diff --git a/.gitattributes b/.gitattributes index 45f8ddad297..5e0e7d63803 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,5 +1,3 @@ -*.nr linguist-language=Rust - .yarn/releases/** binary .yarn/plugins/** binary yarn.lock -diff diff --git a/.github/workflows/ci-arm.yml b/.github/workflows/ci-arm.yml index 52b1668c9c6..e89abbf8684 100644 --- a/.github/workflows/ci-arm.yml +++ b/.github/workflows/ci-arm.yml @@ -25,7 +25,7 @@ jobs: setup: uses: ./.github/workflows/setup-runner.yml with: - username: ${{ github.event.pull_request.user.login || github.actor }} + username: master runner_type: builder-arm secrets: inherit @@ -49,24 +49,28 @@ jobs: build-images: needs: [setup, changes] - runs-on: ${{ github.event.pull_request.user.login || github.actor }}-arm + # Note we don't put the 'if' here as that would also apply to dependent jobs, instead we just copy it into each step + runs-on: master-arm steps: # permission kludge before checkout, see https://github.com/actions/checkout/issues/211#issuecomment-611986243 - run: sudo chown -R $USER:$USER /home/ubuntu/ + if: needs.changes.outputs.build-images == 'true' - uses: actions/checkout@v4 with: { ref: "${{ env.GIT_COMMIT }}" } + if: needs.changes.outputs.build-images == 'true' - uses: ./.github/ci-setup-action + if: needs.changes.outputs.build-images == 'true' with: concurrency_key: build-images-arm - name: "Push Build Images If Changed" - if: ${{ needs.changes.outputs.build-images }} + if: needs.changes.outputs.build-images == 'true' timeout-minutes: 40 run: | earthly-ci --push ./build-images/+build build: needs: [build-images] - runs-on: ${{ github.event.pull_request.user.login || github.actor }}-arm + runs-on: master-arm steps: # permission kludge before checkout, see https://github.com/actions/checkout/issues/211#issuecomment-611986243 - run: sudo chown -R $USER:$USER /home/ubuntu/ @@ -84,7 +88,7 @@ jobs: # all the non-bench end-to-end integration tests for aztec e2e: needs: [build] - runs-on: ${{ github.event.pull_request.user.login || github.actor }}-arm + runs-on: master-arm steps: # permission kludge before checkout, see https://github.com/actions/checkout/issues/211#issuecomment-611986243 - run: sudo chown -R $USER:$USER /home/ubuntu/ diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 78bab204d48..896275461f6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,6 +8,7 @@ on: - reopened - synchronize - ready_for_review + - labeled branches-ignore: [devnet] workflow_dispatch: inputs: {} @@ -54,6 +55,7 @@ jobs: barretenberg-cpp: ${{ steps.filter.outputs.barretenberg-cpp }} noir: ${{ steps.filter.outputs.noir }} noir-projects: ${{ steps.filter.outputs.noir-projects }} + txe: ${{ steps.filter.outputs.txe }} l1-contracts: ${{ steps.filter.outputs.l1-contracts }} non-docs: ${{ steps.filter.outputs.non-docs }} non-misc-ci: ${{ steps.filter.outputs.non-misc-ci }} @@ -79,13 +81,16 @@ jobs: - 'l1-contracts/**' noir-projects: - 'noir-projects/**' + txe: + - 'yarn-project/txe/**' non-barretenberg-cpp: - '!(barretenberg/cpp/**)' # don't consider AVM stuff 'core bb' - barretenberg/cpp/pil/** - barretenberg/cpp/src/barretenberg/vm/** - barretenberg/cpp/src/barretenberg/**/generated/* - - barretenberg/cpp/src/barretenberg/client_ivc.{hpp,cpp} + - barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.{hpp,cpp} + - barretenberg/cpp/src/barretenberg/bb/main.cpp non-docs: - '!(docs/**)' non-misc-ci: @@ -113,7 +118,7 @@ jobs: build: needs: [build-images, changes] - if: needs.changes.outputs.non-docs == 'true' && needs.changes.outputs.non-misc-ci == 'true' && needs.changes.outputs.non-barretenberg-cpp == 'true' + if: (needs.changes.outputs.non-docs == 'true' && needs.changes.outputs.non-misc-ci == 'true' && needs.changes.outputs.non-barretenberg-cpp == 'true') || github.ref_name == 'master' runs-on: ${{ github.event.pull_request.user.login || github.actor }}-x86 outputs: e2e_list: ${{ steps.e2e_list.outputs.list }} @@ -133,15 +138,29 @@ jobs: # (Note ARM uses just 2 tests as a smoketest) - name: Create list of non-bench end-to-end jobs id: e2e_list - run: echo "list=$(earthly ls ./yarn-project/end-to-end | grep -v '+base' | grep -v '+bench' | grep -v "+network" | grep -v 'devnet' | sed 's/+//' | jq -R . | jq -cs .)" >> $GITHUB_OUTPUT + run: | + if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then + LABELS=$(jq -r '.pull_request.labels | map(.name) | join(",")' "$GITHUB_EVENT_PATH") + else + LABELS="" + fi + echo Labels: $LABELS + echo "list=$(./scripts/ci/get_e2e_jobs.sh ${{github.ref_name}} "$LABELS")" >> $GITHUB_OUTPUT - name: Create list of bench end-to-end jobs id: bench_list - run: echo "list=$(earthly ls ./yarn-project/end-to-end | grep '+bench' | sed 's/+//' | jq -R . | jq -cs .)" >> $GITHUB_OUTPUT + run: | + if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then + LABELS=$(jq -r '.pull_request.labels | map(.name) | join(",")' "$GITHUB_EVENT_PATH") + else + LABELS="" + fi + echo Labels: $LABELS + echo "list=$(./scripts/ci/get_bench_jobs.sh ${{github.ref_name}} "$LABELS")" >> $GITHUB_OUTPUT # all the non-bench end-to-end integration tests for aztec e2e: needs: [build, changes] - if: needs.changes.outputs.non-barretenberg-cpp == 'true' + if: needs.changes.outputs.non-barretenberg-cpp == 'true' || github.ref_name == 'master' || contains(github.event.pull_request.labels.*.name, 'e2e') runs-on: ubuntu-20.04 strategy: fail-fast: false @@ -171,7 +190,7 @@ jobs: # all the benchmarking end-to-end integration tests for aztec (not required to merge) bench-e2e: needs: [build, changes] - if: needs.changes.outputs.non-barretenberg-cpp == 'true' + if: needs.changes.outputs.non-barretenberg-cpp == 'true' || github.ref_name == 'master' || contains(github.event.pull_request.labels.*.name, 'bench') runs-on: ubuntu-20.04 strategy: fail-fast: false @@ -456,7 +475,7 @@ jobs: noir-projects: needs: [build-images, changes, build] runs-on: ${{ github.event.pull_request.user.login || github.actor }}-x86 - if: needs.changes.outputs.barretenberg == 'true' || needs.changes.outputs.noir == 'true' || needs.changes.outputs.noir-projects == 'true' + if: needs.changes.outputs.barretenberg == 'true' || needs.changes.outputs.noir == 'true' || needs.changes.outputs.noir-projects == 'true' || needs.changes.outputs.txe == 'true' steps: - uses: actions/checkout@v4 with: { ref: "${{ env.GIT_COMMIT }}" } @@ -606,6 +625,7 @@ jobs: boxes: needs: build runs-on: ${{ github.event.pull_request.user.login || github.actor }}-x86 + if: github.ref_name == 'master' || contains(github.event.pull_request.labels.*.name, 'boxes') || contains(github.event.pull_request.labels.*.name, 'e2e-all') steps: - uses: actions/checkout@v4 with: { ref: "${{ github.event.pull_request.head.sha }}" } @@ -676,6 +696,47 @@ jobs: delete: ${{ !steps.gates_diff.outputs.markdown }} message: ${{ steps.gates_diff.outputs.markdown }} + public-functions-size-report: + needs: [build-images, changes] + if: needs.changes.outputs.non-docs == 'true' && needs.changes.outputs.non-misc-ci == 'true' + runs-on: ${{ github.event.pull_request.user.login || github.actor }}-x86 + permissions: + pull-requests: write + steps: + - uses: actions/checkout@v4 + with: { ref: "${{ env.GIT_COMMIT }}" } + # Only allow one memory-hunger prover test to use this runner + - uses: ./.github/ci-setup-action + with: + concurrency_key: public-functions-size-report-x86 + - name: "Aztec Public Functions Bytecode Size Report" + working-directory: ./noir-projects/ + timeout-minutes: 40 + run: | + earthly-ci \ + --artifact +public-functions-report/public_functions_report.json + mv public_functions_report.json ../public_functions_report.json + + - name: Compare public functions bytecode size reports + id: public_functions_sizes_diff + uses: noir-lang/noir-gates-diff@ef8aaf48fb833f3b6e3f91665bb23afb7e68c6e3 + with: + report: public_functions_report.json + header: | + # Changes to public function bytecode sizes + brillig_report: true + brillig_report_bytes: true + summaryQuantile: 0 # Display any diff in bytecode size count + + - name: Add bytecode size diff to sticky comment + if: github.event_name == 'pull_request' || github.event_name == 'pull_request_target' + uses: marocchino/sticky-pull-request-comment@v2 + with: + header: public_functions_size + # delete the comment in case changes no longer impact circuit sizes + delete: ${{ !steps.public_functions_sizes_diff.outputs.markdown }} + message: ${{ steps.public_functions_sizes_diff.outputs.markdown }} + merge-check: runs-on: ubuntu-20.04 needs: diff --git a/.github/workflows/devnet-deploys.yml b/.github/workflows/devnet-deploys.yml index b08d25a0994..0edded3dcb1 100644 --- a/.github/workflows/devnet-deploys.yml +++ b/.github/workflows/devnet-deploys.yml @@ -735,7 +735,7 @@ jobs: # working-directory: ./yarn-project/aztec/terraform/pxe # run: | # set -eo pipefail - # docker run aztecprotocol/aztec:${{ env.DEPLOY_TAG }} set-proven-until \ + # docker run aztecprotocol/aztec:${{ env.DEPLOY_TAG }} set-proven-through \ # --rpc-url https://api.aztec.network/${{ env.DEPLOY_TAG }}/aztec-pxe/${{ env.API_KEY }} \ # --l1-rpc-url https://${{ env.DEPLOY_TAG }}-mainnet-fork.aztec.network:8545/admin-${{ env.FORK_ADMIN_API_KEY }} \ # --l1-chain-id ${{ env.L1_CHAIN_ID }} \ @@ -770,7 +770,7 @@ jobs: run: | ./.github/scripts/wait_for_infra.sh pxe ${{ env.DEPLOY_TAG }} ${{ env.API_KEY }} - - name: Deploy verifier (allow failure) + - name: Deploy verifier working-directory: ./yarn-project/aztec/terraform/pxe run: | set -eo pipefail diff --git a/.github/workflows/network-deploy.yml b/.github/workflows/network-deploy.yml new file mode 100644 index 00000000000..8adc7539d93 --- /dev/null +++ b/.github/workflows/network-deploy.yml @@ -0,0 +1,57 @@ +name: Aztec Network EKS Deployment + +# Manual trigerring of this workflow is intentionally disabled +# Helm deployments do not support lock files +# Without a lockfile, manual trigerring can lead to corrupted or partial deployments + +on: + push: + branches: + - staging + - production + pull_request: + branches: + - staging + - production + +jobs: + network_deployment: + # This job will run on Ubuntu + runs-on: ubuntu-latest + concurrency: + group: deploy-${{ github.ref }} # Only one job per branch + cancel-in-progress: false # Allow previous deployment to complete to avoid corruption + + # Set up a variable based on the branch name + env: + NAMESPACE: ${{ github.ref == 'refs/heads/production' && 'production' || 'staging' }} + CHART_PATH: ./spartan/aztec-network + + steps: + # Step 1: Check out the repository's code + - name: Checkout code + uses: actions/checkout@v3 + + # Step 2: Configure AWS credentials using GitHub Secrets + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v2 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: us-east-2 + + # Step 3: Set up Kubernetes context for AWS EKS + - name: Configure kubectl with EKS cluster + run: | + aws eks update-kubeconfig --region us-east-2 --name spartan_cluster + + # Step 4: Install Helm + - name: Install Helm + run: | + curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash + + # Step 5: Apply Helm Chart + - name: Deploy Helm chart + run: | + helm dependency update ${{ env.CHART_PATH }} + helm upgrade --install ${{ env.NAMESPACE }} ${{ env.CHART_PATH }} --namespace ${{ env.NAMESPACE }} --atomic diff --git a/.github/workflows/redo-typo-pr.yml b/.github/workflows/redo-typo-pr.yml new file mode 100644 index 00000000000..d298762f935 --- /dev/null +++ b/.github/workflows/redo-typo-pr.yml @@ -0,0 +1,44 @@ +name: Redo Typo PR + +on: + workflow_dispatch: + inputs: + pr_number: + description: 'The PR number to redo' + required: true + type: string + + pull_request_target: + types: [labeled] + branches: + - master + paths-ignore: + - '**/README.md' + +jobs: + redo-typo-pr: + if: github.event_name == 'workflow_dispatch' || contains(github.event.pull_request.labels.*.name, 'redo-typo-pr') + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + with: + token: ${{ secrets.AZTEC_BOT_GITHUB_TOKEN }} + + - name: Authenticate with GitHub CLI + run: | + echo "${{ secrets.AZTEC_BOT_GITHUB_TOKEN }}" | gh auth login --with-token + + - name: Set git configure for commits + run: | + # Identify ourselves, needed to commit + git config --global user.name AztecBot + git config --global user.email tech@aztecprotocol.com + + - name: Determine PR number + id: determine-pr-number + run: echo "PR_NUMBER=${{ github.event.inputs.pr_number || github.event.pull_request.number }}" >> $GITHUB_ENV + + - name: Run repo-typo-pr script + run: ./scripts/redo-typo-pr ${{ env.PR_NUMBER }} diff --git a/.github/workflows/rerun.yml b/.github/workflows/rerun.yml index eb060a3828c..9623ad4272a 100644 --- a/.github/workflows/rerun.yml +++ b/.github/workflows/rerun.yml @@ -1,20 +1,52 @@ -# from https://github.com/orgs/community/discussions/67654 +# adapted from https://github.com/orgs/community/discussions/67654 +# altered to not rerun if we are not the newest commit in the run's branch on: workflow_dispatch: inputs: run_id: required: true + jobs: rerun: runs-on: ubuntu-latest permissions: - actions: write + actions: write # Needed for 'gh run rerun' steps: - - name: rerun ${{ inputs.run_id }} + - name: Wait for run to finish env: GH_REPO: ${{ github.repository }} GH_TOKEN: ${{ github.token }} GH_DEBUG: api run: | gh run watch ${{ inputs.run_id }} > /dev/null 2>&1 - gh run rerun ${{ inputs.run_id }} --failed + + - name: Rerun failed jobs if the commit is the latest on the branch + env: + GH_REPO: ${{ github.repository }} + GH_TOKEN: ${{ github.token }} + GH_DEBUG: api + run: | + RUN_ID="${{ inputs.run_id }}" + # Get the run details + RUN_INFO=$(gh run view $RUN_ID --json headSha,headBranch,event) + # Extract the commit SHA, branch name, and event type + COMMIT_SHA=$(echo "$RUN_INFO" | jq -r '.headSha') + BRANCH_NAME=$(echo "$RUN_INFO" | jq -r '.headBranch') + EVENT_TYPE=$(echo "$RUN_INFO" | jq -r '.event') + + # Only proceed if the event is a pull_request + if [[ "$EVENT_TYPE" != "pull_request" ]]; then + echo "Event type is $EVENT_TYPE. Skipping rerun." + exit 0 + fi + + # Get the latest commit SHA on the branch + LATEST_COMMIT_SHA=$(gh api repos/${{ github.repository }}/commits/$BRANCH_NAME --jq .sha) + + # Compare the SHAs + if [[ "$COMMIT_SHA" != "$LATEST_COMMIT_SHA" ]]; then + echo "Commit $COMMIT_SHA is not the latest commit on branch $BRANCH_NAME (latest is $LATEST_COMMIT_SHA). Skipping rerun." + else + echo "Commit $COMMIT_SHA is the latest on branch $BRANCH_NAME. Proceeding with rerun." + gh run rerun ${{ inputs.run_id }} --failed + fi diff --git a/.github/workflows/sepolia-deploy.yml b/.github/workflows/sepolia-deploy.yml new file mode 100644 index 00000000000..d908f89827d --- /dev/null +++ b/.github/workflows/sepolia-deploy.yml @@ -0,0 +1,113 @@ +name: Deploy to Sepolia network +on: + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + IMAGE_TAG: latest + DEPLOY_TAG: sepolianet + CONTRACT_S3_BUCKET: s3://static.aztec.network + + # TF Variables + TF_VAR_IMAGE_TAG: latest + TF_VAR_DEPLOY_TAG: sepolianet + TF_VAR_L1_CHAIN_ID: 11155111 + TF_VAR_ETHEREUM_HOST: https://sepolia.infura.io/v3/${{ secrets.SEPOLIA_API_KEY }} + TF_VAR_PROVING_ENABLED: false + TF_VAR_BOT_TOKEN_CONTRACT: EasyPrivateTokenContract + TF_VAR_API_KEY: ${{ secrets.SEPOLIANET_API_KEY }} + # Node / Sequencer + TF_VAR_BOOTSTRAP_NODES: "" + TF_VAR_P2P_ENABLED: "false" + TF_VAR_NODE_P2P_PRIVATE_KEYS: '[""]' + TF_VAR_SEQ_MIN_TX_PER_BLOCK: 1 + TF_VAR_SEQ_MAX_TX_PER_BLOCK: 64 + TF_VAR_NODE_LB_RULE_PRIORITY: 7000 + TF_VAR_NODE_P2P_TCP_PORT: 40500 + TF_VAR_NODE_P2P_UDP_PORT: 45500 + # Address 0x652575Ff941e7c2850fB89f2B207efF6B06BC7B4 + TF_VAR_SEQUENCER_PRIVATE_KEYS: '["${{ secrets.SEPOLIA_SEQ_PRIVATE_KEY }}"]' + + # Prover Node + TF_VAR_PROVER_NODE_LB_RULE_PRIORITY: 7100 + # Address 0xE3b8F9F23b8D4BD7d437218Bff3bcED1ce5E70B3 + TF_VAR_PROVER_PRIVATE_KEYS: '["${{ secrets.SEPOLIA_PROVER_PRIVATE_KEY }}"]' + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + ref: "${{ github.sha }}" + + - uses: ./.github/ci-setup-action + + - uses: hashicorp/setup-terraform@v3 + with: + terraform_version: 1.7.5 + + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v1 + with: + aws-access-key-id: ${{ env.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ env.AWS_SECRET_ACCESS_KEY }} + aws-region: eu-west-2 + + - name: Deploy L1 Contracts to Sepolia + run: | + set -e + docker pull aztecprotocol/aztec:${{ env.IMAGE_TAG }} + docker run aztecprotocol/aztec:${{ env.IMAGE_TAG }} deploy-l1-contracts \ + --private-key ${{ secrets.SEPOLIA_SEQ_PRIVATE_KEY }} \ + --rpc-url ${{ env.TF_VAR_ETHEREUM_HOST }} \ + --l1-chain-id ${{ env.TF_VAR_L1_CHAIN_ID }} \ + --salt ${{ github.run_id }} \ + --json | tee ./l1_contracts.json + + # upload contract addresses to S3 + aws s3 cp ./l1_contracts.json ${{ env.CONTRACT_S3_BUCKET }}/${{ env.DEPLOY_TAG }}/l1_contracts.json + + # export contract addresses so they can be used by subsequent terraform deployments + function extract() { + jq -r ".$1" ./l1_contracts.json + } + + echo "TF_VAR_ROLLUP_CONTRACT_ADDRESS=$(extract rollupAddress)" >>$GITHUB_ENV + echo "TF_VAR_REGISTRY_CONTRACT_ADDRESS=$(extract registryAddress)" >>$GITHUB_ENV + echo "TF_VAR_INBOX_CONTRACT_ADDRESS=$(extract inboxAddress)" >>$GITHUB_ENV + echo "TF_VAR_OUTBOX_CONTRACT_ADDRESS=$(extract outboxAddress)" >>$GITHUB_ENV + echo "TF_VAR_AVAILABILITY_ORACLE_CONTRACT_ADDRESS=$(extract availabilityOracleAddress)" >>$GITHUB_ENV + echo "TF_VAR_FEE_JUICE_CONTRACT_ADDRESS=$(extract feeJuiceAddress)" >>$GITHUB_ENV + echo "TF_VAR_FEE_JUICE_PORTAL_CONTRACT_ADDRESS=$(extract feeJuicePortalAddress)" >>$GITHUB_ENV + + - name: Apply l1-contracts Terraform + working-directory: ./l1-contracts/terraform + run: | + env + terraform init -input=false -backend-config="key=${{ env.DEPLOY_TAG }}/l1-contracts" + terraform apply -input=false -auto-approve + + - name: Deploy Aztec Node + working-directory: ./yarn-project/aztec/terraform/node + run: | + terraform init -input=false -backend-config="key=${{ env.DEPLOY_TAG }}/aztec-node" + terraform apply -input=false -auto-approve + + - name: Deploy Aztec Prover Node + working-directory: ./yarn-project/aztec/terraform/prover-node + run: | + terraform init -input=false -backend-config="key=${{ env.DEPLOY_TAG }}/aztec-prover-node" + terraform apply -input=false -auto-approve + + - name: Deploy PXE + working-directory: ./yarn-project/aztec/terraform/pxe + run: | + terraform init -input=false -backend-config="key=${{ env.DEPLOY_TAG }}/pxe" + terraform apply -input=false -auto-approve -replace="aws_efs_file_system.pxe_data_store" diff --git a/.github/workflows/sepolia-test.yml b/.github/workflows/sepolia-test.yml index fb08801d994..e2e6210f28a 100644 --- a/.github/workflows/sepolia-test.yml +++ b/.github/workflows/sepolia-test.yml @@ -21,7 +21,7 @@ env: PROVER_PUBLISHER_PRIVATE_KEY: ${{ secrets.SEPOLIA_PROVER_PRIVATE_KEY }} ETHEREUM_HOST: "https://sepolia.infura.io/v3/${{ secrets.SEPOLIA_API_KEY }}" - L1_CHAIN_ID: "11155111" + L1_CHAIN_ID: 11155111 jobs: setup: @@ -55,10 +55,10 @@ jobs: cd ./yarn-project/end-to-end/ export FORCE_COLOR=1 ../../scripts/earthly-ci -P --no-output +e2e-public-testnet \ - --SEQ_PUBLISHER_PRIVATE_KEY=${{ secrets.SEPOLIA_SEQ_PRIVATE_KEY }} \ - --PROVER_PUBLISHER_PRIVATE_KEY=${{ secrets.SEPOLIA_PROVER_PRIVATE_KEY }} \ - --ETHEREUM_HOST="https://sepolia.infura.io/v3/${{ secrets.SEPOLIA_API_KEY }}" \ - --L1_CHAIN_ID="11155111" + --SEQ_PUBLISHER_PRIVATE_KEY=${{ secrets.SEPOLIA_SEQ_PRIVATE_KEY }} \ + --PROVER_PUBLISHER_PRIVATE_KEY=${{ secrets.SEPOLIA_PROVER_PRIVATE_KEY }} \ + --ETHEREUM_HOST="https://sepolia.infura.io/v3/${{ secrets.SEPOLIA_API_KEY }}" \ + --L1_CHAIN_ID=${{ env.L1_CHAIN_ID }} success-check: runs-on: ubuntu-20.04 diff --git a/.github/workflows/spartan-test.yml b/.github/workflows/spartan-test.yml index 6ed63e39900..901dbebdb5a 100644 --- a/.github/workflows/spartan-test.yml +++ b/.github/workflows/spartan-test.yml @@ -136,11 +136,10 @@ jobs: tester_ttl: 40 run: | set -eux - cd ./yarn-project/end-to-end/ - ./scripts/setup_local_k8s.sh + ./spartan/scripts/setup_local_k8s.sh export FORCE_COLOR=1 export EARTHLY_BUILD_ARGS="${{ env.EARTHLY_BUILD_ARGS }}" - ../../scripts/earthly-ci --exec-stats -P --no-output ./+network-transfer --values-file=${{ matrix.values_file }} + ./scripts/earthly-ci --exec-stats -P --no-output ./yarn-project/end-to-end/+network-transfer --values-file=${{ matrix.values_file }} success-check: runs-on: ubuntu-20.04 diff --git a/.gitignore b/.gitignore index 71f1e37b5e2..9a2dd48b704 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ build/ .idea cmake-build-debug .terraform* +terraform.tfstate* .bootstrapped .tsbuildinfo diff --git a/.noir-sync-commit b/.noir-sync-commit index eb1aa3d1edc..02b3b743ccd 100644 --- a/.noir-sync-commit +++ b/.noir-sync-commit @@ -1 +1 @@ -a2bc059f993d3e9ca06a2fe4857ef1c522c97286 +66d2a07f0fedb04422c218cbe8d6fb080efac994 diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 26010d2a625..224cbb4eeca 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,7 +1,7 @@ { - ".": "0.55.0", + ".": "0.56.0", "yarn-project/cli": "0.35.1", - "yarn-project/aztec": "0.55.0", - "barretenberg": "0.55.0", - "barretenberg/ts": "0.55.0" + "yarn-project/aztec": "0.56.0", + "barretenberg": "0.56.0", + "barretenberg/ts": "0.56.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index e55cddb7f3c..95a1c007a74 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,263 @@ # Changelog +## [0.56.0](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.55.1...aztec-packages-v0.56.0) (2024-09-25) + + +### ⚠ BREAKING CHANGES + +* make compute_nullifier_without_context unconstrained ([#8742](https://github.com/AztecProtocol/aztec-packages/issues/8742)) +* remove PublicContextInputs ([#8770](https://github.com/AztecProtocol/aztec-packages/issues/8770)) +* make TestEnvironment be unconstrained ([#8747](https://github.com/AztecProtocol/aztec-packages/issues/8747)) +* change ec_add to unsafe implementation (but much better perf) ([#8374](https://github.com/AztecProtocol/aztec-packages/issues/8374)) +* `aztec_macros` are dead, long live `aztec::macros` ([#8438](https://github.com/AztecProtocol/aztec-packages/issues/8438)) +* **avm:** GETENVVAR + ISSTATICCALL ([#8692](https://github.com/AztecProtocol/aztec-packages/issues/8692)) +* remove sha256 opcode ([#4571](https://github.com/AztecProtocol/aztec-packages/issues/4571)) +* removing implicit numeric generics (https://github.com/noir-lang/noir/pull/5837) +* Infer globals to be u32 when used in a type (https://github.com/noir-lang/noir/pull/6083) +* add support for u1 in the avm, ToRadix's radix arg is a memory addr ([#8570](https://github.com/AztecProtocol/aztec-packages/issues/8570)) +* remove key registry ([#8613](https://github.com/AztecProtocol/aztec-packages/issues/8613)) +* **avm:** dont compress public bytecode ([#8623](https://github.com/AztecProtocol/aztec-packages/issues/8623)) +* **avm:** remove tag in NOT ([#8606](https://github.com/AztecProtocol/aztec-packages/issues/8606)) + +### Features + +* (LSP) if in runtime code, always suggest functions that return Quoted as macro calls (https://github.com/noir-lang/noir/pull/6098) ([7fb2a45](https://github.com/AztecProtocol/aztec-packages/commit/7fb2a454531db8cef757b5ec2028d97e823bef5f)) +* (LSP) remove unused imports (https://github.com/noir-lang/noir/pull/6129) ([4522c4f](https://github.com/AztecProtocol/aztec-packages/commit/4522c4f428b288825013d7c38c5a4cbc5b8c8f58)) +* (LSP) show global value on hover (https://github.com/noir-lang/noir/pull/6097) ([7fb2a45](https://github.com/AztecProtocol/aztec-packages/commit/7fb2a454531db8cef757b5ec2028d97e823bef5f)) +* (LSP) suggest $vars inside `quote { ... }` (https://github.com/noir-lang/noir/pull/6114) ([7a87314](https://github.com/AztecProtocol/aztec-packages/commit/7a873147444ef03bc1df88e0fdca3cf6fc124725)) +* `aztec_macros` are dead, long live `aztec::macros` ([#8438](https://github.com/AztecProtocol/aztec-packages/issues/8438)) ([7cbabd6](https://github.com/AztecProtocol/aztec-packages/commit/7cbabd6840ee8127c12a51a2342ef634f1d58954)) +* Add `Expr::as_constructor` (https://github.com/noir-lang/noir/pull/5980) ([7ea4709](https://github.com/AztecProtocol/aztec-packages/commit/7ea4709743aaaf2768d35d92cad3fbd4a8404fb0)) +* Add `Expr::as_for` and `Expr::as_for_range` (https://github.com/noir-lang/noir/pull/6039) ([7ea4709](https://github.com/AztecProtocol/aztec-packages/commit/7ea4709743aaaf2768d35d92cad3fbd4a8404fb0)) +* Add `Expr::as_lambda` (https://github.com/noir-lang/noir/pull/6048) ([7ea4709](https://github.com/AztecProtocol/aztec-packages/commit/7ea4709743aaaf2768d35d92cad3fbd4a8404fb0)) +* Add Aztec Bot to helm testnet package ([#8702](https://github.com/AztecProtocol/aztec-packages/issues/8702)) ([982a04e](https://github.com/AztecProtocol/aztec-packages/commit/982a04e8021ec88b178ea05fdebb7193998cde38)) +* Add epochs to existing orchestrator ([#8675](https://github.com/AztecProtocol/aztec-packages/issues/8675)) ([0337fe9](https://github.com/AztecProtocol/aztec-packages/commit/0337fe9c2a7ac9f19fe8f695c7c072102dae9ec2)) +* Add epochs to existing orchestrator v2 ([#8732](https://github.com/AztecProtocol/aztec-packages/issues/8732)) ([cec4d3f](https://github.com/AztecProtocol/aztec-packages/commit/cec4d3fedd5483cece5e53c0c1682d7a0b26f5fd)) +* Add initial integration of databus ([#8710](https://github.com/AztecProtocol/aztec-packages/issues/8710)) ([779e104](https://github.com/AztecProtocol/aztec-packages/commit/779e10499cfe668506ba8a199342cf86fae258a7)) +* Add peer scoring to req resp rate limits ([#8633](https://github.com/AztecProtocol/aztec-packages/issues/8633)) ([b015a79](https://github.com/AztecProtocol/aztec-packages/commit/b015a79560133d4bf842834066eb88bffba7cb7f)) +* Add separate report for public function bytecode sizes ([#8750](https://github.com/AztecProtocol/aztec-packages/issues/8750)) ([d3c102f](https://github.com/AztecProtocol/aztec-packages/commit/d3c102f3c055e29c2beeb5ed81ac7b76b7135d25)) +* Add support for u1 in the avm, ToRadix's radix arg is a memory addr ([#8570](https://github.com/AztecProtocol/aztec-packages/issues/8570)) ([1785737](https://github.com/AztecProtocol/aztec-packages/commit/178573738731e2e74e4119a035f913da39675d85)) +* Add validation to request / response interactions + adjust scoring appropiately ([#8641](https://github.com/AztecProtocol/aztec-packages/issues/8641)) ([8dfdebc](https://github.com/AztecProtocol/aztec-packages/commit/8dfdebc7055ca89861a3727ea2d419fde98d6cf7)) +* Aggregate honk and avm recursion constraints together ([#8696](https://github.com/AztecProtocol/aztec-packages/issues/8696)) ([3fa9e83](https://github.com/AztecProtocol/aztec-packages/commit/3fa9e83c0fac460f586572fe2866823fe7f740d2)) +* Allow visibility modifiers in struct definitions (https://github.com/noir-lang/noir/pull/6054) ([7ea4709](https://github.com/AztecProtocol/aztec-packages/commit/7ea4709743aaaf2768d35d92cad3fbd4a8404fb0)) +* **avm:** Avm recursive TS/Noir integration ([#8531](https://github.com/AztecProtocol/aztec-packages/issues/8531)) ([dd09f05](https://github.com/AztecProtocol/aztec-packages/commit/dd09f057e97ac1bba7b3fbf29b50737ebe5ca76f)), closes [#7791](https://github.com/AztecProtocol/aztec-packages/issues/7791) +* **avm:** Avm recursive TS/Noir integration ([#8611](https://github.com/AztecProtocol/aztec-packages/issues/8611)) ([e417231](https://github.com/AztecProtocol/aztec-packages/commit/e4172318af81ac2ac8535c89d3e5afc72d33ba29)) +* **avm:** Bounded mle implementation ([#8668](https://github.com/AztecProtocol/aztec-packages/issues/8668)) ([aa85f2a](https://github.com/AztecProtocol/aztec-packages/commit/aa85f2a781223f067291b5702f2e47baced865fd)), closes [#8651](https://github.com/AztecProtocol/aztec-packages/issues/8651) +* **avm:** GETENVVAR + ISSTATICCALL ([#8692](https://github.com/AztecProtocol/aztec-packages/issues/8692)) ([02cff0b](https://github.com/AztecProtocol/aztec-packages/commit/02cff0b525d9d6b1c854219f06713a8b94a8e9f5)) +* **avm:** Opcode STATICCALL - stubbed ([#8601](https://github.com/AztecProtocol/aztec-packages/issues/8601)) ([facff7f](https://github.com/AztecProtocol/aztec-packages/commit/facff7fd0b6ea57e91f7d3e3863435655d8b48ea)), closes [#8596](https://github.com/AztecProtocol/aztec-packages/issues/8596) +* **avm:** Remove tag in NOT ([#8606](https://github.com/AztecProtocol/aztec-packages/issues/8606)) ([d5695fc](https://github.com/AztecProtocol/aztec-packages/commit/d5695fcde93cbfda3e45bfa03988a9e72f2dcb59)) +* **avm:** Return oracle ([#8629](https://github.com/AztecProtocol/aztec-packages/issues/8629)) ([b6bc7c3](https://github.com/AztecProtocol/aztec-packages/commit/b6bc7c3f5064255480e3d4443471c2c50007d0ca)) +* **avm:** Set avm circuit subgroup size ([#8537](https://github.com/AztecProtocol/aztec-packages/issues/8537)) ([3b78058](https://github.com/AztecProtocol/aztec-packages/commit/3b78058288edbbe18a2eb8c81de5576c8a9478ab)) +* Benchmark compute_row_evaluations and update analysis script ([#8673](https://github.com/AztecProtocol/aztec-packages/issues/8673)) ([c738c47](https://github.com/AztecProtocol/aztec-packages/commit/c738c47bd13875ba1649d808e7abd2908fa29e07)) +* Check unconstrained trait impl method matches (https://github.com/noir-lang/noir/pull/6057) ([3e0067a](https://github.com/AztecProtocol/aztec-packages/commit/3e0067a11935d4f2ead9579458d3c00c2f27f1ef)) +* Compute args hash with comptime length ([#8736](https://github.com/AztecProtocol/aztec-packages/issues/8736)) ([dae82d8](https://github.com/AztecProtocol/aztec-packages/commit/dae82d84f95242ad7da1bf8e0c7e5063a35b1fef)) +* Constant sized PG proofs and const sized PG rec verifier ([#8605](https://github.com/AztecProtocol/aztec-packages/issues/8605)) ([09e2f44](https://github.com/AztecProtocol/aztec-packages/commit/09e2f447b003ed4c77b12069893785851a2c6258)) +* Do not double error on import with error (https://github.com/noir-lang/noir/pull/6131) ([0d9f547](https://github.com/AztecProtocol/aztec-packages/commit/0d9f547d4e470a1e5383c1fff4c0c6125169de19)) +* **docs:** Getting started, portals page, some other nits ([#8515](https://github.com/AztecProtocol/aztec-packages/issues/8515)) ([9632e0d](https://github.com/AztecProtocol/aztec-packages/commit/9632e0dcf3c5b8966be0e1d02fa7ea9a5677af97)) +* **docs:** Some small custom note stuff ([#8518](https://github.com/AztecProtocol/aztec-packages/issues/8518)) ([a098d41](https://github.com/AztecProtocol/aztec-packages/commit/a098d41ef0ba91beaf8b22a353bccd8e78bae5f5)) +* EpochProofQuote implementation in TS ([#8689](https://github.com/AztecProtocol/aztec-packages/issues/8689)) ([1aad110](https://github.com/AztecProtocol/aztec-packages/commit/1aad110ba582599a69216dc0491f19b0df6dafea)) +* Faster LSP by caching file managers (https://github.com/noir-lang/noir/pull/6047) ([7ea4709](https://github.com/AztecProtocol/aztec-packages/commit/7ea4709743aaaf2768d35d92cad3fbd4a8404fb0)) +* Implement `to_be_radix` in the comptime interpreter (https://github.com/noir-lang/noir/pull/6043) ([7ea4709](https://github.com/AztecProtocol/aztec-packages/commit/7ea4709743aaaf2768d35d92cad3fbd4a8404fb0)) +* Implement solver for mov_registers_to_registers (https://github.com/noir-lang/noir/pull/6089) ([03b9e71](https://github.com/AztecProtocol/aztec-packages/commit/03b9e71e5ebb3d46827671b2197697b5d294d04e)) +* Implement type paths (https://github.com/noir-lang/noir/pull/6093) ([b330e87](https://github.com/AztecProtocol/aztec-packages/commit/b330e874dc11235eb9730aca7c936299378c9ce8)) +* Let LSP suggest macro calls too (https://github.com/noir-lang/noir/pull/6090) ([b330e87](https://github.com/AztecProtocol/aztec-packages/commit/b330e874dc11235eb9730aca7c936299378c9ce8)) +* Light block builder ([#8662](https://github.com/AztecProtocol/aztec-packages/issues/8662)) ([1e922a5](https://github.com/AztecProtocol/aztec-packages/commit/1e922a5a13bf3105e1317eda6d5536aa44a84b54)) +* LSP autocompletion for `TypePath` (https://github.com/noir-lang/noir/pull/6117) ([7a87314](https://github.com/AztecProtocol/aztec-packages/commit/7a873147444ef03bc1df88e0fdca3cf6fc124725)) +* Make compute_nullifier_without_context unconstrained ([#8742](https://github.com/AztecProtocol/aztec-packages/issues/8742)) ([e30a743](https://github.com/AztecProtocol/aztec-packages/commit/e30a743d01ab190a1f7a677d2ae667f15c83d97f)) +* Make TestEnvironment be unconstrained ([#8747](https://github.com/AztecProtocol/aztec-packages/issues/8747)) ([b9a1f59](https://github.com/AztecProtocol/aztec-packages/commit/b9a1f59a5343c8fa7caa957a5ebc3eb533a21c9c)) +* Make UltraKeccak work with Shplemini at bb-level ([#8646](https://github.com/AztecProtocol/aztec-packages/issues/8646)) ([82b60eb](https://github.com/AztecProtocol/aztec-packages/commit/82b60ebbdb18400363248b80986c993df1b7e4af)) +* **metaprogramming:** Add `#[use_callers_scope]` (https://github.com/noir-lang/noir/pull/6050) ([7ea4709](https://github.com/AztecProtocol/aztec-packages/commit/7ea4709743aaaf2768d35d92cad3fbd4a8404fb0)) +* More robust recursion input generator ([#8634](https://github.com/AztecProtocol/aztec-packages/issues/8634)) ([020d4fd](https://github.com/AztecProtocol/aztec-packages/commit/020d4fd0cf4137e21f55b1c41e9e381a27191d84)) +* Only download non-pruned blocks ([#8578](https://github.com/AztecProtocol/aztec-packages/issues/8578)) ([ae26474](https://github.com/AztecProtocol/aztec-packages/commit/ae26474709e28116a38fd2c2773de39dfb6816ad)) +* Optimize constraints in sha256 (https://github.com/noir-lang/noir/pull/6145) ([0d9f547](https://github.com/AztecProtocol/aztec-packages/commit/0d9f547d4e470a1e5383c1fff4c0c6125169de19)) +* Partial notes log encoding ([#8538](https://github.com/AztecProtocol/aztec-packages/issues/8538)) ([5f5ec20](https://github.com/AztecProtocol/aztec-packages/commit/5f5ec2099782a64160c7b06ce2021d28c264e7e9)) +* **perf:** Allow array set last uses optimization in return block of Brillig functions (https://github.com/noir-lang/noir/pull/6119) ([7a87314](https://github.com/AztecProtocol/aztec-packages/commit/7a873147444ef03bc1df88e0fdca3cf6fc124725)) +* **perf:** Remove unused loads in mem2reg and last stores per function (https://github.com/noir-lang/noir/pull/5925) ([3e0067a](https://github.com/AztecProtocol/aztec-packages/commit/3e0067a11935d4f2ead9579458d3c00c2f27f1ef)) +* Pretty print Quoted token stream (https://github.com/noir-lang/noir/pull/6111) ([7a87314](https://github.com/AztecProtocol/aztec-packages/commit/7a873147444ef03bc1df88e0fdca3cf6fc124725)) +* Prune if needed ([#8617](https://github.com/AztecProtocol/aztec-packages/issues/8617)) ([49b17d0](https://github.com/AztecProtocol/aztec-packages/commit/49b17d0924fc3b11d0b2202cfc01d3dd4c18617a)), closes [#8608](https://github.com/AztecProtocol/aztec-packages/issues/8608) +* Public kernel handles enqueued calls ([#8523](https://github.com/AztecProtocol/aztec-packages/issues/8523)) ([6303b4a](https://github.com/AztecProtocol/aztec-packages/commit/6303b4afbc39715e92d5ca7ae5100c60f6398686)) +* Reduce max memory in translator by freeing accumulator and eccvm ([#8253](https://github.com/AztecProtocol/aztec-packages/issues/8253)) ([7247ddb](https://github.com/AztecProtocol/aztec-packages/commit/7247ddba274e691a7c5220848caf1fa9d6aa911e)) +* Remove aztec macros (https://github.com/noir-lang/noir/pull/6087) ([0d9f547](https://github.com/AztecProtocol/aztec-packages/commit/0d9f547d4e470a1e5383c1fff4c0c6125169de19)) +* Remove key registry ([#8613](https://github.com/AztecProtocol/aztec-packages/issues/8613)) ([a668506](https://github.com/AztecProtocol/aztec-packages/commit/a6685067a0a5d17cbbc4cbfed4e78e364864ff51)) +* Remove sha256 opcode ([#4571](https://github.com/AztecProtocol/aztec-packages/issues/4571)) ([4b4a0bf](https://github.com/AztecProtocol/aztec-packages/commit/4b4a0bf17050893f913b3db10bc70a584b7aaa5e)) +* Remove unnecessary branching in keccak impl (https://github.com/noir-lang/noir/pull/6133) ([0d9f547](https://github.com/AztecProtocol/aztec-packages/commit/0d9f547d4e470a1e5383c1fff4c0c6125169de19)) +* Represent assertions more similarly to function calls (https://github.com/noir-lang/noir/pull/6103) ([7a87314](https://github.com/AztecProtocol/aztec-packages/commit/7a873147444ef03bc1df88e0fdca3cf6fc124725)) +* Show test output when running via LSP (https://github.com/noir-lang/noir/pull/6049) ([7ea4709](https://github.com/AztecProtocol/aztec-packages/commit/7ea4709743aaaf2768d35d92cad3fbd4a8404fb0)) +* Swap endianness in-place in keccak implementation (https://github.com/noir-lang/noir/pull/6128) ([4522c4f](https://github.com/AztecProtocol/aztec-packages/commit/4522c4f428b288825013d7c38c5a4cbc5b8c8f58)) +* Update rollup storage to hold pending/proven tips ([#8583](https://github.com/AztecProtocol/aztec-packages/issues/8583)) ([38e3051](https://github.com/AztecProtocol/aztec-packages/commit/38e3051d60f9f8a80e33fab4e0f7f3ec3cde2ee2)) +* Use new IVC scheme ([#8480](https://github.com/AztecProtocol/aztec-packages/issues/8480)) ([1c7b06d](https://github.com/AztecProtocol/aztec-packages/commit/1c7b06d6621d9873f84147b2b7f1f22bf21bbacb)) +* **vc:** Remove viem signers from validator client ([#8517](https://github.com/AztecProtocol/aztec-packages/issues/8517)) ([8244fa2](https://github.com/AztecProtocol/aztec-packages/commit/8244fa2d496975bb8bcc032690e0eab1b8c9548f)) +* Visibility for traits (https://github.com/noir-lang/noir/pull/6056) ([7ea4709](https://github.com/AztecProtocol/aztec-packages/commit/7ea4709743aaaf2768d35d92cad3fbd4a8404fb0)) + + +### Bug Fixes + +* Address a bunch of issues with generics ([#8625](https://github.com/AztecProtocol/aztec-packages/issues/8625)) ([94718f1](https://github.com/AztecProtocol/aztec-packages/commit/94718f1fbc26b165107872b2e32ba5412ba3b7fd)) +* Allow macros to change types on each iteration of a comptime loop (https://github.com/noir-lang/noir/pull/6105) ([03b9e71](https://github.com/AztecProtocol/aztec-packages/commit/03b9e71e5ebb3d46827671b2197697b5d294d04e)) +* Allow providing default implementations of unconstrained trait methods (https://github.com/noir-lang/noir/pull/6138) ([0d9f547](https://github.com/AztecProtocol/aztec-packages/commit/0d9f547d4e470a1e5383c1fff4c0c6125169de19)) +* Always parse all tokens from quoted token streams (https://github.com/noir-lang/noir/pull/6064) ([3e0067a](https://github.com/AztecProtocol/aztec-packages/commit/3e0067a11935d4f2ead9579458d3c00c2f27f1ef)) +* **avm:** Fix tests under proving ([#8640](https://github.com/AztecProtocol/aztec-packages/issues/8640)) ([8bfc769](https://github.com/AztecProtocol/aztec-packages/commit/8bfc769d7cbd6f88bfa7926c051a329ee0fd3468)) +* Be more lenient with semicolons on interned expressions (https://github.com/noir-lang/noir/pull/6062) ([3e0067a](https://github.com/AztecProtocol/aztec-packages/commit/3e0067a11935d4f2ead9579458d3c00c2f27f1ef)) +* Boomerang variable in sha256 hash function ([#8581](https://github.com/AztecProtocol/aztec-packages/issues/8581)) ([f2a1330](https://github.com/AztecProtocol/aztec-packages/commit/f2a13309f544bbd83b593e6a6207d49d9ef48b74)) +* **ci:** Rerun.yml should not trigger if a commit has been pushed ([#8735](https://github.com/AztecProtocol/aztec-packages/issues/8735)) ([39fbf92](https://github.com/AztecProtocol/aztec-packages/commit/39fbf92a068be5f746b7cc379910c6af85f5e064)) +* Consider constants as used values to keep their rc ops (https://github.com/noir-lang/noir/pull/6122) ([4522c4f](https://github.com/AztecProtocol/aztec-packages/commit/4522c4f428b288825013d7c38c5a4cbc5b8c8f58)) +* Correct stack trace order in comptime assertion failures (https://github.com/noir-lang/noir/pull/6066) ([3e0067a](https://github.com/AztecProtocol/aztec-packages/commit/3e0067a11935d4f2ead9579458d3c00c2f27f1ef)) +* Decode databus return values (https://github.com/noir-lang/noir/pull/6095) ([7a87314](https://github.com/AztecProtocol/aztec-packages/commit/7a873147444ef03bc1df88e0fdca3cf6fc124725)) +* Delete database file from disk on db.delete ([#8693](https://github.com/AztecProtocol/aztec-packages/issues/8693)) ([07d43ea](https://github.com/AztecProtocol/aztec-packages/commit/07d43ea77b57aba5d6edba56fe873b7dafd17e50)) +* Delete temp lmdb stores + close db connection ([#8778](https://github.com/AztecProtocol/aztec-packages/issues/8778)) ([9321cbc](https://github.com/AztecProtocol/aztec-packages/commit/9321cbcf022994e5f8d41798d8c765490ab96824)) +* Disambiguate field or int static trait method call (https://github.com/noir-lang/noir/pull/6112) ([7a87314](https://github.com/AztecProtocol/aztec-packages/commit/7a873147444ef03bc1df88e0fdca3cf6fc124725)) +* Do not prune if we are behind the assumed proven block ([#8744](https://github.com/AztecProtocol/aztec-packages/issues/8744)) ([e85bee5](https://github.com/AztecProtocol/aztec-packages/commit/e85bee5fb32057c8315593027417853cb4dfdcd5)) +* **docs:** Simplify home page ([#8630](https://github.com/AztecProtocol/aztec-packages/issues/8630)) ([87e0a17](https://github.com/AztecProtocol/aztec-packages/commit/87e0a17db6c89a3a6e23fca3369c3bc5fe84ad3d)) +* Don't crash on untyped global used as array length (https://github.com/noir-lang/noir/pull/6076) ([3e0067a](https://github.com/AztecProtocol/aztec-packages/commit/3e0067a11935d4f2ead9579458d3c00c2f27f1ef)) +* Don't prune while proposing or proving. ([#8739](https://github.com/AztecProtocol/aztec-packages/issues/8739)) ([5854879](https://github.com/AztecProtocol/aztec-packages/commit/5854879f46f0f777dd986f1ba6adf6aa24abc683)) +* Error on `&mut x` when `x` is not mutable (https://github.com/noir-lang/noir/pull/6037) ([7ea4709](https://github.com/AztecProtocol/aztec-packages/commit/7ea4709743aaaf2768d35d92cad3fbd4a8404fb0)) +* Fix canonicalization bug (https://github.com/noir-lang/noir/pull/6033) ([7ea4709](https://github.com/AztecProtocol/aztec-packages/commit/7ea4709743aaaf2768d35d92cad3fbd4a8404fb0)) +* Fix comptime type formatting (https://github.com/noir-lang/noir/pull/6079) ([3e0067a](https://github.com/AztecProtocol/aztec-packages/commit/3e0067a11935d4f2ead9579458d3c00c2f27f1ef)) +* Fixes mapTuple typing ([#8615](https://github.com/AztecProtocol/aztec-packages/issues/8615)) ([25d5805](https://github.com/AztecProtocol/aztec-packages/commit/25d5805db1a2ccd0f06f14ab9a11a3fa455e5b69)) +* Handle multi-byte utf8 characters in formatter (https://github.com/noir-lang/noir/pull/6118) ([0d9f547](https://github.com/AztecProtocol/aztec-packages/commit/0d9f547d4e470a1e5383c1fff4c0c6125169de19)) +* Handle parenthesized expressions in array length (https://github.com/noir-lang/noir/pull/6132) ([4522c4f](https://github.com/AztecProtocol/aztec-packages/commit/4522c4f428b288825013d7c38c5a4cbc5b8c8f58)) +* Infer globals to be u32 when used in a type (https://github.com/noir-lang/noir/pull/6083) ([3e0067a](https://github.com/AztecProtocol/aztec-packages/commit/3e0067a11935d4f2ead9579458d3c00c2f27f1ef)) +* Initialise databus using return values (https://github.com/noir-lang/noir/pull/6074) ([b330e87](https://github.com/AztecProtocol/aztec-packages/commit/b330e874dc11235eb9730aca7c936299378c9ce8)) +* Let LSP suggest fields and methods in LValue chains (https://github.com/noir-lang/noir/pull/6051) ([7ea4709](https://github.com/AztecProtocol/aztec-packages/commit/7ea4709743aaaf2768d35d92cad3fbd4a8404fb0)) +* Let token pretty printer handle `+=` and similar token sequences (https://github.com/noir-lang/noir/pull/6135) ([0d9f547](https://github.com/AztecProtocol/aztec-packages/commit/0d9f547d4e470a1e5383c1fff4c0c6125169de19)) +* **mem2reg:** Remove possibility of underflow (https://github.com/noir-lang/noir/pull/6107) ([7a87314](https://github.com/AztecProtocol/aztec-packages/commit/7a873147444ef03bc1df88e0fdca3cf6fc124725)) +* New commit_sparse bug and new tests ([#8649](https://github.com/AztecProtocol/aztec-packages/issues/8649)) ([5818018](https://github.com/AztecProtocol/aztec-packages/commit/581801863529cd2b437cb51b041ada17a96949e0)) +* Parse a statement as an expression (https://github.com/noir-lang/noir/pull/6040) ([7ea4709](https://github.com/AztecProtocol/aztec-packages/commit/7ea4709743aaaf2768d35d92cad3fbd4a8404fb0)) +* Preserve generic kind on trait methods (https://github.com/noir-lang/noir/pull/6099) ([7fb2a45](https://github.com/AztecProtocol/aztec-packages/commit/7fb2a454531db8cef757b5ec2028d97e823bef5f)) +* Prevent check_can_mutate crashing on undefined variable (https://github.com/noir-lang/noir/pull/6044) ([7ea4709](https://github.com/AztecProtocol/aztec-packages/commit/7ea4709743aaaf2768d35d92cad3fbd4a8404fb0)) +* Quick TXE after public executor changes ([#8661](https://github.com/AztecProtocol/aztec-packages/issues/8661)) ([48a715b](https://github.com/AztecProtocol/aztec-packages/commit/48a715b6a11a07af7f9adce7a1049cf5e81a933d)) +* **revert:** "chore!: change ec_add to unsafe implementation (but much better perf)" ([#8722](https://github.com/AztecProtocol/aztec-packages/issues/8722)) ([9a1b5b5](https://github.com/AztecProtocol/aztec-packages/commit/9a1b5b5fdd3194f4e7833aacbca4f48aadafbd74)) +* **revert:** "feat: Add epochs to existing orchestrator" ([#8727](https://github.com/AztecProtocol/aztec-packages/issues/8727)) ([ff8e1ed](https://github.com/AztecProtocol/aztec-packages/commit/ff8e1edc5eae5d5a18d36cb960eb3d98afa1cfa6)) +* Skip G1 SRS download if numPoints is zero ([#8717](https://github.com/AztecProtocol/aztec-packages/issues/8717)) ([753cdf8](https://github.com/AztecProtocol/aztec-packages/commit/753cdf8b047365b6280c0306fdc6f59f824f740b)) +* **ssa:** RC correctness issue (https://github.com/noir-lang/noir/pull/6134) ([0d9f547](https://github.com/AztecProtocol/aztec-packages/commit/0d9f547d4e470a1e5383c1fff4c0c6125169de19)) +* Unencryptedlogs witgen ([#8669](https://github.com/AztecProtocol/aztec-packages/issues/8669)) ([aee4c2d](https://github.com/AztecProtocol/aztec-packages/commit/aee4c2dde7576fad1c47e407ee0dca43dac2b1b4)) +* Unify macro result type with actual type (https://github.com/noir-lang/noir/pull/6086) ([b330e87](https://github.com/AztecProtocol/aztec-packages/commit/b330e874dc11235eb9730aca7c936299378c9ce8)) +* Update databus in flattening (https://github.com/noir-lang/noir/pull/6063) ([3e0067a](https://github.com/AztecProtocol/aztec-packages/commit/3e0067a11935d4f2ead9579458d3c00c2f27f1ef)) +* **world_state:** Fix race conditions in WorldState and IndexedTree ([#8612](https://github.com/AztecProtocol/aztec-packages/issues/8612)) ([6797525](https://github.com/AztecProtocol/aztec-packages/commit/679752542edf1667d58e8839aca05d2b9fcc7da6)) + + +### Miscellaneous + +* Add more cases for assert_equal conversion ([#8446](https://github.com/AztecProtocol/aztec-packages/issues/8446)) ([e3ea298](https://github.com/AztecProtocol/aztec-packages/commit/e3ea298fd1f7326199e6e35b3523aadb2b12a925)) +* Archiver cleanup ([#8599](https://github.com/AztecProtocol/aztec-packages/issues/8599)) ([184cc88](https://github.com/AztecProtocol/aztec-packages/commit/184cc882b3f1b90d74f149e46100474263a3665d)) +* **avm:** Dont compress public bytecode ([#8623](https://github.com/AztecProtocol/aztec-packages/issues/8623)) ([353da3f](https://github.com/AztecProtocol/aztec-packages/commit/353da3f65e34783058d3ec7187dbe876f737b044)) +* **avm:** Simplify bb-prover and other AVM tests ([#8627](https://github.com/AztecProtocol/aztec-packages/issues/8627)) ([0d75363](https://github.com/AztecProtocol/aztec-packages/commit/0d7536395f2406a22a76f15d01114730c84edc18)) +* **avm:** Smaller skippable test ([#8664](https://github.com/AztecProtocol/aztec-packages/issues/8664)) ([2418977](https://github.com/AztecProtocol/aztec-packages/commit/241897733fe0a5e2ccdf322449debd367f458086)) +* **bb readme:** Document how to Honk Noir programs ([#7638](https://github.com/AztecProtocol/aztec-packages/issues/7638)) ([cd46ddd](https://github.com/AztecProtocol/aztec-packages/commit/cd46ddd96539f2db466d1116dabdb838d2a807e7)) +* Bye bye Zeromorph in Solidity ([#8678](https://github.com/AztecProtocol/aztec-packages/issues/8678)) ([74182c4](https://github.com/AztecProtocol/aztec-packages/commit/74182c40e152e988ee8590f39c51d00150ef01ca)) +* Change ec_add to unsafe implementation (but much better perf) ([#8374](https://github.com/AztecProtocol/aztec-packages/issues/8374)) ([aabd2d8](https://github.com/AztecProtocol/aztec-packages/commit/aabd2d85d4f3f35d67d53421b47214aa8904c505)) +* **ci:** Bump noir compile tests ([#8705](https://github.com/AztecProtocol/aztec-packages/issues/8705)) ([4121ef3](https://github.com/AztecProtocol/aztec-packages/commit/4121ef32d28ea8bf08b10f1bf1508daeef77e1a9)) +* **ci:** Make boxes only run on master ([#8604](https://github.com/AztecProtocol/aztec-packages/issues/8604)) ([07e6a7e](https://github.com/AztecProtocol/aztec-packages/commit/07e6a7e36626f51f987fff1962903c86df34eb5b)) +* **ci:** More lenient recovery ([#8462](https://github.com/AztecProtocol/aztec-packages/issues/8462)) ([5d9a2fe](https://github.com/AztecProtocol/aztec-packages/commit/5d9a2fee16b1229987f66070239196235dc10a83)) +* **ci:** Reinstate a bunch of tests in e2e list ([#8737](https://github.com/AztecProtocol/aztec-packages/issues/8737)) ([226f311](https://github.com/AztecProtocol/aztec-packages/commit/226f31103b5e92017732bc1477733cd634dc1e9c)) +* **ci:** Remove deleted e2e ([#8600](https://github.com/AztecProtocol/aztec-packages/issues/8600)) ([03127b2](https://github.com/AztecProtocol/aztec-packages/commit/03127b29c9bcad21ff35c14aecf9b2402faa20a5)) +* **ci:** Remove e2e-prover-full from default set ([#8697](https://github.com/AztecProtocol/aztec-packages/issues/8697)) ([8dcc3bd](https://github.com/AztecProtocol/aztec-packages/commit/8dcc3bd3a678239b14a01da4d99f7c2e44030875)) +* **ci:** Run noir-projects on txe changes ([#8660](https://github.com/AztecProtocol/aztec-packages/issues/8660)) ([22f6084](https://github.com/AztecProtocol/aztec-packages/commit/22f6084d6a5ff5693b72d2e08ac758472bb73e29)) +* **ci:** Scriptify local earthfile ([#8709](https://github.com/AztecProtocol/aztec-packages/issues/8709)) ([aacd238](https://github.com/AztecProtocol/aztec-packages/commit/aacd2389d82ce8dfbd0604ecb095c95a400a1150)) +* **ci:** Slightly safer default e2e jobs ([#8729](https://github.com/AztecProtocol/aztec-packages/issues/8729)) ([80acfd9](https://github.com/AztecProtocol/aztec-packages/commit/80acfd943ac3cd42b548043824f530018ac07a2d)) +* Cleanup call interfaces and calldata_copy warnings ([#8777](https://github.com/AztecProtocol/aztec-packages/issues/8777)) ([633a3a0](https://github.com/AztecProtocol/aztec-packages/commit/633a3a0686d3b4811ae37482ffcb544f01e27624)) +* Consolidate aztec node configurations (helm refactor) ([#8731](https://github.com/AztecProtocol/aztec-packages/issues/8731)) ([9d248a2](https://github.com/AztecProtocol/aztec-packages/commit/9d248a24091cfbf1c4d09b49227136883e6118f0)) +* Create a Gemini prover ([#8622](https://github.com/AztecProtocol/aztec-packages/issues/8622)) ([94339fb](https://github.com/AztecProtocol/aztec-packages/commit/94339fbfc7c0c822dc1497c113d48f74a89f1bad)) +* Delete .gitattributes in aztec-nr ([#8670](https://github.com/AztecProtocol/aztec-packages/issues/8670)) ([bc6d7ee](https://github.com/AztecProtocol/aztec-packages/commit/bc6d7ee9d6bc6f89100e52efd6cb6cc71664d12a)) +* Delete duplicated test (https://github.com/noir-lang/noir/pull/6113) ([7a87314](https://github.com/AztecProtocol/aztec-packages/commit/7a873147444ef03bc1df88e0fdca3cf6fc124725)) +* Delete eth-log-hander ([#8598](https://github.com/AztecProtocol/aztec-packages/issues/8598)) ([4064e90](https://github.com/AztecProtocol/aztec-packages/commit/4064e90c7455d1f06590635678f0588706bce328)) +* Delete poseidon2 from `bn254_blackbox_solver` ([#8741](https://github.com/AztecProtocol/aztec-packages/issues/8741)) ([02fea6a](https://github.com/AztecProtocol/aztec-packages/commit/02fea6abe8637b9fb8f9535d1709b367d5e1da5c)) +* **docs:** Fix migration notes ([#8713](https://github.com/AztecProtocol/aztec-packages/issues/8713)) ([d5fd155](https://github.com/AztecProtocol/aztec-packages/commit/d5fd155ed14e2c9f7e889f519e7be791561a0e71)) +* **docs:** Protocol-specs typos ([#8706](https://github.com/AztecProtocol/aztec-packages/issues/8706)) ([48de163](https://github.com/AztecProtocol/aztec-packages/commit/48de163a55bf792acca51a0df745fee44c7decf1)) +* **docs:** Removing old versions (https://github.com/noir-lang/noir/pull/6075) ([7a87314](https://github.com/AztecProtocol/aztec-packages/commit/7a873147444ef03bc1df88e0fdca3cf6fc124725)) +* Document array methods (https://github.com/noir-lang/noir/pull/6034) ([7ea4709](https://github.com/AztecProtocol/aztec-packages/commit/7ea4709743aaaf2768d35d92cad3fbd4a8404fb0)) +* Ec addition for non-zero points (https://github.com/noir-lang/noir/pull/5858) ([7a87314](https://github.com/AztecProtocol/aztec-packages/commit/7a873147444ef03bc1df88e0fdca3cf6fc124725)) +* Fix broken formatting on master (https://github.com/noir-lang/noir/pull/6096) ([7fb2a45](https://github.com/AztecProtocol/aztec-packages/commit/7fb2a454531db8cef757b5ec2028d97e823bef5f)) +* Fix docs (https://github.com/noir-lang/noir/pull/6035) ([7ea4709](https://github.com/AztecProtocol/aztec-packages/commit/7ea4709743aaaf2768d35d92cad3fbd4a8404fb0)) +* Fixing MacOS build - static_cast from field issue ([#8642](https://github.com/AztecProtocol/aztec-packages/issues/8642)) ([14ff3cf](https://github.com/AztecProtocol/aztec-packages/commit/14ff3cfb4291c288113695a3f2245340587fc8e9)) +* Gas premiums for AVM side effects, DA gas in AVM ([#8632](https://github.com/AztecProtocol/aztec-packages/issues/8632)) ([d5f16cc](https://github.com/AztecProtocol/aztec-packages/commit/d5f16cc41bc077f24947fc92af2767630e928ed8)) +* Make structs pub ([#8760](https://github.com/AztecProtocol/aztec-packages/issues/8760)) ([7bb2a38](https://github.com/AztecProtocol/aztec-packages/commit/7bb2a382e83bf422f90b3b144ae5c1d4e7adf227)) +* Migrate higher-level APIs for barretenberg to bb.js ([#8677](https://github.com/AztecProtocol/aztec-packages/issues/8677)) ([0237a20](https://github.com/AztecProtocol/aztec-packages/commit/0237a20c989f2b37a64ee18b41c1da361363a81f)) +* Misc cleanup ([#8748](https://github.com/AztecProtocol/aztec-packages/issues/8748)) ([e92da1f](https://github.com/AztecProtocol/aztec-packages/commit/e92da1f89974f8a51d491a0facc857fe774bf2fb)) +* Protogalaxy recursive verifier matches native verifier ([#8568](https://github.com/AztecProtocol/aztec-packages/issues/8568)) ([a4f61b3](https://github.com/AztecProtocol/aztec-packages/commit/a4f61b39c39bf01a1071b52bbf042408f29d5564)) +* Re-add blob library to CI ([#8734](https://github.com/AztecProtocol/aztec-packages/issues/8734)) ([4615fcc](https://github.com/AztecProtocol/aztec-packages/commit/4615fcc1c8b66d4ea71e0cd9c840656b152d05eb)) +* Reduce redundant event fetching ([#8628](https://github.com/AztecProtocol/aztec-packages/issues/8628)) ([6903291](https://github.com/AztecProtocol/aztec-packages/commit/690329113876129fcdde52daf9f59f3dcad6949d)) +* Reinstate skipped tests ([#8743](https://github.com/AztecProtocol/aztec-packages/issues/8743)) ([18e2697](https://github.com/AztecProtocol/aztec-packages/commit/18e2697d8791b4533e042ec04526e32922b608bc)) +* Remove bubble_up_constrains (https://github.com/noir-lang/noir/pull/6127) ([4522c4f](https://github.com/AztecProtocol/aztec-packages/commit/4522c4f428b288825013d7c38c5a4cbc5b8c8f58)) +* Remove creation of extra toml file in recursion inputs flow ([#8700](https://github.com/AztecProtocol/aztec-packages/issues/8700)) ([014bacc](https://github.com/AztecProtocol/aztec-packages/commit/014bacc0b2f1d56f416a3ab939b8aa5ad90656dd)) +* Remove empty file ([#8724](https://github.com/AztecProtocol/aztec-packages/issues/8724)) ([d5b91b8](https://github.com/AztecProtocol/aztec-packages/commit/d5b91b8992c4c087991e824c9b3618476f83f13c)) +* Remove key rotation from the key store ([#8645](https://github.com/AztecProtocol/aztec-packages/issues/8645)) ([d8bcb9f](https://github.com/AztecProtocol/aztec-packages/commit/d8bcb9f16537d5ec9c8f7a7f48efa3e6e767fa28)) +* Remove multiple public dbs ([#8585](https://github.com/AztecProtocol/aztec-packages/issues/8585)) ([75b7b60](https://github.com/AztecProtocol/aztec-packages/commit/75b7b60456ded2c18f493aaa12306b49cc64ec21)) +* Remove PublicContextInputs ([#8770](https://github.com/AztecProtocol/aztec-packages/issues/8770)) ([1507762](https://github.com/AztecProtocol/aztec-packages/commit/150776269b557703552826f90915c85adb639137)) +* Remove special sync behaviour of `verify_honk_proof` ([#8676](https://github.com/AztecProtocol/aztec-packages/issues/8676)) ([a9e412b](https://github.com/AztecProtocol/aztec-packages/commit/a9e412bd49a8f0071906102eef07dd3248303443)) +* Remove unnecessary `Prover.toml`s (https://github.com/noir-lang/noir/pull/6140) ([0d9f547](https://github.com/AztecProtocol/aztec-packages/commit/0d9f547d4e470a1e5383c1fff4c0c6125169de19)) +* Remove unused imports ([#8766](https://github.com/AztecProtocol/aztec-packages/issues/8766)) ([420dd64](https://github.com/AztecProtocol/aztec-packages/commit/420dd642a4860e08b33b61e6bdd28efdc453ee6f)) +* Remove unused TypeVariableKind::Constant (https://github.com/noir-lang/noir/pull/6053) ([3e0067a](https://github.com/AztecProtocol/aztec-packages/commit/3e0067a11935d4f2ead9579458d3c00c2f27f1ef)) +* Removing implicit numeric generics (https://github.com/noir-lang/noir/pull/5837) ([3e0067a](https://github.com/AztecProtocol/aztec-packages/commit/3e0067a11935d4f2ead9579458d3c00c2f27f1ef)) +* Rename CustomAtrribute to CustomAttribute (https://github.com/noir-lang/noir/pull/6038) ([7ea4709](https://github.com/AztecProtocol/aztec-packages/commit/7ea4709743aaaf2768d35d92cad3fbd4a8404fb0)) +* Replace relative paths to noir-protocol-circuits ([00b1e61](https://github.com/AztecProtocol/aztec-packages/commit/00b1e61e4bda15aa456675f09129cd502438f823)) +* Replace relative paths to noir-protocol-circuits ([d031f8f](https://github.com/AztecProtocol/aztec-packages/commit/d031f8fec1197b7abda8cfed07ed0797bee891d7)) +* Replace relative paths to noir-protocol-circuits ([0f5dd09](https://github.com/AztecProtocol/aztec-packages/commit/0f5dd09b80cb5c6b5e7332520a0451863bc0e28a)) +* Replace relative paths to noir-protocol-circuits ([755f484](https://github.com/AztecProtocol/aztec-packages/commit/755f48433df9f940ef472fc923be39576d3a8cfe)) +* Replace relative paths to noir-protocol-circuits ([3d4e79a](https://github.com/AztecProtocol/aztec-packages/commit/3d4e79a3cad83b09f55d9ab503ab6b789892a66e)) +* Replace relative paths to noir-protocol-circuits ([1bd828f](https://github.com/AztecProtocol/aztec-packages/commit/1bd828f57fea834d8a04e9261c92b2378c5c0fd5)) +* Schnorr signature verification in Noir (https://github.com/noir-lang/noir/pull/5437) ([03b9e71](https://github.com/AztecProtocol/aztec-packages/commit/03b9e71e5ebb3d46827671b2197697b5d294d04e)) +* Skip p2p integration ([#8779](https://github.com/AztecProtocol/aztec-packages/issues/8779)) ([48de45d](https://github.com/AztecProtocol/aztec-packages/commit/48de45de03b840e8c663f65af2ea866353eabb9b)) +* Skip some tests in CI ([#8738](https://github.com/AztecProtocol/aztec-packages/issues/8738)) ([251db7b](https://github.com/AztecProtocol/aztec-packages/commit/251db7be2d7541852de314a13a85205b4b3a0418)) +* Split `noirc_frontend/src/tests.rs` into submodules (https://github.com/noir-lang/noir/pull/6139) ([0d9f547](https://github.com/AztecProtocol/aztec-packages/commit/0d9f547d4e470a1e5383c1fff4c0c6125169de19)) +* Use config object to make phase manager less noisy ([#8586](https://github.com/AztecProtocol/aztec-packages/issues/8586)) ([5a5f2b2](https://github.com/AztecProtocol/aztec-packages/commit/5a5f2b25c00aadd3fa014a81f21b5d01e83e360d)) +* Use panic instead of assert ([#8703](https://github.com/AztecProtocol/aztec-packages/issues/8703)) ([c96d923](https://github.com/AztecProtocol/aztec-packages/commit/c96d923cd94503fc4c408fde3366c55778e37e82)) +* Use random ports in p2p_client tests ([#8624](https://github.com/AztecProtocol/aztec-packages/issues/8624)) ([650a241](https://github.com/AztecProtocol/aztec-packages/commit/650a241faee7d2c9be5d0ea071b26b275fb09b39)) + +## [0.55.1](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.55.0...aztec-packages-v0.55.1) (2024-09-17) + + +### Features + +* `TXE::store_note_in_cache` --> `TXE::add_note` ([#8547](https://github.com/AztecProtocol/aztec-packages/issues/8547)) ([5a6aaeb](https://github.com/AztecProtocol/aztec-packages/commit/5a6aaeb2cacb1e1cbcda8b93441e9d4cf4b912fa)) +* Add a `comptime` string type for string handling at compile-time (https://github.com/noir-lang/noir/pull/6026) ([cd7983a](https://github.com/AztecProtocol/aztec-packages/commit/cd7983a0b7692629428e63c58deb4d4920353d4b)) +* CI deploy on sepolia ([#8514](https://github.com/AztecProtocol/aztec-packages/issues/8514)) ([54f0344](https://github.com/AztecProtocol/aztec-packages/commit/54f0344b0fd5eba26d0c02641533ad9f18616de1)) +* Default to outputting witness with file named after package (https://github.com/noir-lang/noir/pull/6031) ([cd7983a](https://github.com/AztecProtocol/aztec-packages/commit/cd7983a0b7692629428e63c58deb4d4920353d4b)) +* Let LSP suggest trait impl methods as you are typing them (https://github.com/noir-lang/noir/pull/6029) ([cd7983a](https://github.com/AztecProtocol/aztec-packages/commit/cd7983a0b7692629428e63c58deb4d4920353d4b)) +* NFT with "transient" storage shield flow ([#8129](https://github.com/AztecProtocol/aztec-packages/issues/8129)) ([578f67c](https://github.com/AztecProtocol/aztec-packages/commit/578f67ca7df6ea0c66265bf60767803f692d46f4)) +* Optimize allocating immediate amounts of memory ([#8579](https://github.com/AztecProtocol/aztec-packages/issues/8579)) ([e0185e7](https://github.com/AztecProtocol/aztec-packages/commit/e0185e75e65df08b5334856f8bf63fa3aed7049a)) +* Spartan iac ([#8455](https://github.com/AztecProtocol/aztec-packages/issues/8455)) ([16fba46](https://github.com/AztecProtocol/aztec-packages/commit/16fba46e722e0178f5ebfe4b9562e445d12386a8)) +* Sync from aztec-packages (https://github.com/noir-lang/noir/pull/6028) ([cd7983a](https://github.com/AztecProtocol/aztec-packages/commit/cd7983a0b7692629428e63c58deb4d4920353d4b)) +* Tx verification & peer scoring on p2p layer. bot support for EasyPrivateToken ([#8298](https://github.com/AztecProtocol/aztec-packages/issues/8298)) ([beb651f](https://github.com/AztecProtocol/aztec-packages/commit/beb651f241fe71776689bedc764be650dfd5ae0c)) +* Unconstraining keys in unconstrained encryption ([#7912](https://github.com/AztecProtocol/aztec-packages/issues/7912)) ([eb9275a](https://github.com/AztecProtocol/aztec-packages/commit/eb9275a3b7eee4bb76c440dc7307caec4f9e16bd)) +* Update args hash to be a flat poseidon ([#8571](https://github.com/AztecProtocol/aztec-packages/issues/8571)) ([0c54224](https://github.com/AztecProtocol/aztec-packages/commit/0c5422446de40a5824daa5af33cad1ec015589a0)) +* Use poseidon for fn selectors ([#8239](https://github.com/AztecProtocol/aztec-packages/issues/8239)) ([41891db](https://github.com/AztecProtocol/aztec-packages/commit/41891dbd6c9022fd9ad2e8e66e073782a1798887)) + + +### Bug Fixes + +* Disable side-effects for no_predicates functions (https://github.com/noir-lang/noir/pull/6027) ([cd7983a](https://github.com/AztecProtocol/aztec-packages/commit/cd7983a0b7692629428e63c58deb4d4920353d4b)) +* Native world state test issues ([#8546](https://github.com/AztecProtocol/aztec-packages/issues/8546)) ([aab8773](https://github.com/AztecProtocol/aztec-packages/commit/aab87733b4381d8d64b85f5e5a6bff4e31ee1abd)) +* Remove special case for epoch 0 ([#8549](https://github.com/AztecProtocol/aztec-packages/issues/8549)) ([b035d01](https://github.com/AztecProtocol/aztec-packages/commit/b035d012a875772ffdf523c112aa70777300c047)) +* Serialize AvmVerificationKeyData ([#8529](https://github.com/AztecProtocol/aztec-packages/issues/8529)) ([78c94a4](https://github.com/AztecProtocol/aztec-packages/commit/78c94a4f316605bf6f27c8e466d7c000a486e593)) + + +### Miscellaneous + +* 7791: Disable world_state test suite ([#8594](https://github.com/AztecProtocol/aztec-packages/issues/8594)) ([ee21583](https://github.com/AztecProtocol/aztec-packages/commit/ee21583aea137eea31cb1b4e6e0643061ef0d59f)) +* Add jq to aztec image ([#8542](https://github.com/AztecProtocol/aztec-packages/issues/8542)) ([a7fb791](https://github.com/AztecProtocol/aztec-packages/commit/a7fb791ffaf398b5efd5fb64090a2b0b6a7b6685)) +* Add sync suite ([#8550](https://github.com/AztecProtocol/aztec-packages/issues/8550)) ([ce0a9db](https://github.com/AztecProtocol/aztec-packages/commit/ce0a9dbd87d4371a8b6dd11eb87907fb1dd48030)) +* **ci:** Action to redo typo PRs ([#8553](https://github.com/AztecProtocol/aztec-packages/issues/8553)) ([3ed5879](https://github.com/AztecProtocol/aztec-packages/commit/3ed5879d486eb20bffdfe9084fed2fb9eb681d26)) +* **ci:** Fix master ([#8534](https://github.com/AztecProtocol/aztec-packages/issues/8534)) ([47c368f](https://github.com/AztecProtocol/aztec-packages/commit/47c368f991116d4637f544f2cb71ef146ed201de)) +* **ci:** Fix redo-typo-pr.yml ([abf9802](https://github.com/AztecProtocol/aztec-packages/commit/abf9802b8ace37fc6eff9034927fb4ab29feea33)) +* **ci:** Fix redo-typo-pr.yml ([#8555](https://github.com/AztecProtocol/aztec-packages/issues/8555)) ([7f1673c](https://github.com/AztecProtocol/aztec-packages/commit/7f1673cb5b7a472368d1b44912fda72c8be31636)) +* **ci:** Hotfix ([ffd31aa](https://github.com/AztecProtocol/aztec-packages/commit/ffd31aa32a02c212b14487b15b79bcff8b14293a)) +* **ci:** Hotfix arm ci ([979f267](https://github.com/AztecProtocol/aztec-packages/commit/979f2674b639d84d2b45d1c419e41aa613bd94e9)) +* **ci:** Optimize disk usage in arm run ([#8564](https://github.com/AztecProtocol/aztec-packages/issues/8564)) ([33e6aa4](https://github.com/AztecProtocol/aztec-packages/commit/33e6aa41b3d87d54eafbcf68ddcaedac6df13204)) +* **ci:** Use labels and if branch=master to control jobs ([#8508](https://github.com/AztecProtocol/aztec-packages/issues/8508)) ([68a2226](https://github.com/AztecProtocol/aztec-packages/commit/68a222607ecd9584c46a0499bce568d1d7ec7ce7)) +* GitHub Actions Deployments to Amazon EKS ([#8563](https://github.com/AztecProtocol/aztec-packages/issues/8563)) ([6fae8f0](https://github.com/AztecProtocol/aztec-packages/commit/6fae8f031749b1aaede2033f5de4b61fecf98b6b)) +* Moves add gate out of aux ([#8541](https://github.com/AztecProtocol/aztec-packages/issues/8541)) ([c3ad163](https://github.com/AztecProtocol/aztec-packages/commit/c3ad163dbcf79067b49553f1c139c49a6aa066cb)) +* Protogalaxy verifier matches prover 2 ([#8477](https://github.com/AztecProtocol/aztec-packages/issues/8477)) ([58882b1](https://github.com/AztecProtocol/aztec-packages/commit/58882b199081b18e33fb65f8d05cfce7fe458f1e)) +* Redo typo PR by ankushgoel27 ([#8595](https://github.com/AztecProtocol/aztec-packages/issues/8595)) ([7ca6d24](https://github.com/AztecProtocol/aztec-packages/commit/7ca6d24d3fdef17e9d71a898dbca5206a166a624)) +* Redo typo PR by Ocheretovich ([#8559](https://github.com/AztecProtocol/aztec-packages/issues/8559)) ([c4296ba](https://github.com/AztecProtocol/aztec-packages/commit/c4296bab075577fad0c7e1a04587e0995902b656)) +* Redo typo PR by Olexandr88 ([#8560](https://github.com/AztecProtocol/aztec-packages/issues/8560)) ([e35d148](https://github.com/AztecProtocol/aztec-packages/commit/e35d14864cb6fe3727f5a93f3037786add10beb4)) +* Redo typo PR by skaunov ([#8557](https://github.com/AztecProtocol/aztec-packages/issues/8557)) ([8a1e7c3](https://github.com/AztecProtocol/aztec-packages/commit/8a1e7c33735d60b479fc70a32dcde18d3ce2d97a)) +* Release Noir(0.34.0) (https://github.com/noir-lang/noir/pull/5692) ([cd7983a](https://github.com/AztecProtocol/aztec-packages/commit/cd7983a0b7692629428e63c58deb4d4920353d4b)) +* Remove ARCHIVER_L1_START_BLOCK ([#8554](https://github.com/AztecProtocol/aztec-packages/issues/8554)) ([bc8d461](https://github.com/AztecProtocol/aztec-packages/commit/bc8d461f6fc20c55aa94647dc671ecb59f52cad2)) +* Remove redundant e2e tests and organize ([#8561](https://github.com/AztecProtocol/aztec-packages/issues/8561)) ([de2b775](https://github.com/AztecProtocol/aztec-packages/commit/de2b775b07166a14093bbfec857403e985fcffbd)) +* Remove unused imports ([#8556](https://github.com/AztecProtocol/aztec-packages/issues/8556)) ([e11242e](https://github.com/AztecProtocol/aztec-packages/commit/e11242e2ab2fd1eef0a17db2e0714cd289b2fec1)) +* Replace relative paths to noir-protocol-circuits ([2336986](https://github.com/AztecProtocol/aztec-packages/commit/2336986463c660fe67b2e46b375d2bcf3531cdb9)) +* Replace relative paths to noir-protocol-circuits ([9668ed5](https://github.com/AztecProtocol/aztec-packages/commit/9668ed5c548a24c69cdacfbc58d544adf47d3272)) + ## [0.55.0](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.54.0...aztec-packages-v0.55.0) (2024-09-13) diff --git a/avm-transpiler/Cargo.lock b/avm-transpiler/Cargo.lock index b404fc7bd84..17c78633c6e 100644 --- a/avm-transpiler/Cargo.lock +++ b/avm-transpiler/Cargo.lock @@ -4,7 +4,7 @@ version = 3 [[package]] name = "acir" -version = "0.49.0" +version = "0.50.0" dependencies = [ "acir_field", "base64 0.21.7", @@ -18,7 +18,7 @@ dependencies = [ [[package]] name = "acir_field" -version = "0.49.0" +version = "0.50.0" dependencies = [ "ark-bn254", "ark-ff", @@ -30,7 +30,7 @@ dependencies = [ [[package]] name = "acvm" -version = "0.49.0" +version = "0.50.0" dependencies = [ "acir", "acvm_blackbox_solver", @@ -44,7 +44,7 @@ dependencies = [ [[package]] name = "acvm_blackbox_solver" -version = "0.49.0" +version = "0.50.0" dependencies = [ "acir", "blake2", @@ -303,7 +303,6 @@ dependencies = [ "acvm", "base64 0.21.7", "env_logger", - "flate2", "fxhash", "log", "noirc_errors", @@ -383,7 +382,7 @@ dependencies = [ [[package]] name = "brillig" -version = "0.49.0" +version = "0.50.0" dependencies = [ "acir_field", "serde", @@ -391,7 +390,7 @@ dependencies = [ [[package]] name = "brillig_vm" -version = "0.49.0" +version = "0.50.0" dependencies = [ "acir", "acvm_blackbox_solver", @@ -696,7 +695,7 @@ dependencies = [ [[package]] name = "fm" -version = "0.33.0" +version = "0.34.0" dependencies = [ "codespan-reporting", "iter-extended", @@ -860,7 +859,7 @@ checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" [[package]] name = "iter-extended" -version = "0.33.0" +version = "0.34.0" [[package]] name = "itertools" @@ -965,7 +964,7 @@ dependencies = [ [[package]] name = "noirc_errors" -version = "0.33.0" +version = "0.34.0" dependencies = [ "acvm", "base64 0.21.7", @@ -983,7 +982,7 @@ dependencies = [ [[package]] name = "noirc_printable_type" -version = "0.33.0" +version = "0.34.0" dependencies = [ "acvm", "iter-extended", diff --git a/avm-transpiler/Cargo.toml b/avm-transpiler/Cargo.toml index d3d106e5037..5800a7af48e 100644 --- a/avm-transpiler/Cargo.toml +++ b/avm-transpiler/Cargo.toml @@ -19,4 +19,3 @@ env_logger = "0.11" log = "0.4" serde_json = "1.0" serde = { version = "1.0.136", features = ["derive"] } -flate2 = "1.0" diff --git a/avm-transpiler/src/bit_traits.rs b/avm-transpiler/src/bit_traits.rs index ff54ef23df5..d4f65ba032e 100644 --- a/avm-transpiler/src/bit_traits.rs +++ b/avm-transpiler/src/bit_traits.rs @@ -58,15 +58,15 @@ impl BitsQueryable for usize { pub fn bits_needed_for(val: &T) -> usize { let num_bits = val.num_bits(); - if num_bits < 8 { + if num_bits <= 8 { 8 - } else if num_bits < 16 { + } else if num_bits <= 16 { 16 - } else if num_bits < 32 { + } else if num_bits <= 32 { 32 - } else if num_bits < 64 { + } else if num_bits <= 64 { 64 - } else if num_bits < 128 { + } else if num_bits <= 128 { 128 } else { 254 diff --git a/avm-transpiler/src/instructions.rs b/avm-transpiler/src/instructions.rs index 0e25dedc3f3..0f0a75495b9 100644 --- a/avm-transpiler/src/instructions.rs +++ b/avm-transpiler/src/instructions.rs @@ -10,6 +10,7 @@ pub const ALL_DIRECT: u8 = 0b00000000; pub const ZEROTH_OPERAND_INDIRECT: u8 = 0b00000001; pub const FIRST_OPERAND_INDIRECT: u8 = 0b00000010; pub const SECOND_OPERAND_INDIRECT: u8 = 0b00000100; +pub const THIRD_OPERAND_INDIRECT: u8 = 0b00001000; /// A simple representation of an AVM instruction for the purpose /// of generating an AVM bytecode from Brillig. @@ -94,6 +95,7 @@ impl Default for AvmInstruction { #[derive(Copy, Clone, Debug)] pub enum AvmTypeTag { UNINITIALIZED, + UINT1, UINT8, UINT16, UINT32, @@ -107,6 +109,7 @@ pub enum AvmTypeTag { /// Constants (as used by the SET instruction) can have size /// different from 32 bits pub enum AvmOperand { + U1 { value: u8 }, // same wire format as U8 U8 { value: u8 }, U16 { value: u16 }, U32 { value: u32 }, @@ -118,6 +121,7 @@ pub enum AvmOperand { impl Display for AvmOperand { fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { match self { + AvmOperand::U1 { value } => write!(f, " U1:{}", value), AvmOperand::U8 { value } => write!(f, " U8:{}", value), AvmOperand::U16 { value } => write!(f, " U16:{}", value), AvmOperand::U32 { value } => write!(f, " U32:{}", value), @@ -131,6 +135,7 @@ impl Display for AvmOperand { impl AvmOperand { pub fn to_be_bytes(&self) -> Vec { match self { + AvmOperand::U1 { value } => value.to_be_bytes().to_vec(), AvmOperand::U8 { value } => value.to_be_bytes().to_vec(), AvmOperand::U16 { value } => value.to_be_bytes().to_vec(), AvmOperand::U32 { value } => value.to_be_bytes().to_vec(), diff --git a/avm-transpiler/src/opcodes.rs b/avm-transpiler/src/opcodes.rs index 93d1a3ba7ea..e20a993702f 100644 --- a/avm-transpiler/src/opcodes.rs +++ b/avm-transpiler/src/opcodes.rs @@ -35,21 +35,8 @@ pub enum AvmOpcode { CAST_8, CAST_16, // Execution environment - ADDRESS, - STORAGEADDRESS, - SENDER, - FUNCTIONSELECTOR, - TRANSACTIONFEE, - CHAINID, - VERSION, - BLOCKNUMBER, - TIMESTAMP, - FEEPERL2GAS, - FEEPERDAGAS, + GETENVVAR_16, CALLDATACOPY, - // Gas - L2GASLEFT, - DAGASLEFT, // Control flow JUMP_16, JUMPI_16, @@ -88,16 +75,14 @@ pub enum AvmOpcode { // Gadgets KECCAK, POSEIDON2, - SHA256, // temp - may be removed, but alot of contracts rely on it + SHA256COMPRESSION, + KECCAKF1600, PEDERSEN, // temp - may be removed, but alot of contracts rely on it ECADD, MSM, PEDERSENCOMMITMENT, // temp // Conversions TORADIXLE, - // Other - SHA256COMPRESSION, - KECCAKF1600, } impl AvmOpcode { @@ -140,25 +125,11 @@ impl AvmOpcode { AvmOpcode::CAST_16 => "CAST_16", // Execution Environment - AvmOpcode::ADDRESS => "ADDRESS", - AvmOpcode::STORAGEADDRESS => "STORAGEADDRESS", - AvmOpcode::SENDER => "SENDER", - AvmOpcode::FUNCTIONSELECTOR => "FUNCTIONSELECTOR", - AvmOpcode::TRANSACTIONFEE => "TRANSACTIONFEE", - // Execution Environment - Globals - AvmOpcode::CHAINID => "CHAINID", - AvmOpcode::VERSION => "VERSION", - AvmOpcode::BLOCKNUMBER => "BLOCKNUMBER", - AvmOpcode::TIMESTAMP => "TIMESTAMP", - AvmOpcode::FEEPERL2GAS => "FEEPERL2GAS", - AvmOpcode::FEEPERDAGAS => "FEEPERDAGAS", + AvmOpcode::GETENVVAR_16 => "GETENVVAR_16", // Execution Environment - Calldata AvmOpcode::CALLDATACOPY => "CALLDATACOPY", // Machine State - // Machine State - Gas - AvmOpcode::L2GASLEFT => "L2GASLEFT", - AvmOpcode::DAGASLEFT => "DAGASLEFT", // Machine State - Internal Control Flow AvmOpcode::JUMP_16 => "JUMP_16", AvmOpcode::JUMPI_16 => "JUMPI_16", @@ -202,17 +173,15 @@ impl AvmOpcode { // Gadgets AvmOpcode::KECCAK => "KECCAK", + AvmOpcode::KECCAKF1600 => "KECCAKF1600", AvmOpcode::POSEIDON2 => "POSEIDON2", - AvmOpcode::SHA256 => "SHA256 ", + AvmOpcode::SHA256COMPRESSION => "SHA256COMPRESSION", AvmOpcode::PEDERSEN => "PEDERSEN", AvmOpcode::ECADD => "ECADD", AvmOpcode::MSM => "MSM", AvmOpcode::PEDERSENCOMMITMENT => "PEDERSENCOMMITMENT", // Conversions AvmOpcode::TORADIXLE => "TORADIXLE", - // Other - AvmOpcode::SHA256COMPRESSION => "SHA256COMPRESSION", - AvmOpcode::KECCAKF1600 => "KECCAKF1600", } } } diff --git a/avm-transpiler/src/transpile.rs b/avm-transpiler/src/transpile.rs index a5087582327..77a98d21945 100644 --- a/avm-transpiler/src/transpile.rs +++ b/avm-transpiler/src/transpile.rs @@ -12,7 +12,7 @@ use noirc_errors::debug_info::DebugInfo; use crate::bit_traits::bits_needed_for; use crate::instructions::{ AvmInstruction, AvmOperand, AvmTypeTag, ALL_DIRECT, FIRST_OPERAND_INDIRECT, - SECOND_OPERAND_INDIRECT, ZEROTH_OPERAND_INDIRECT, + SECOND_OPERAND_INDIRECT, THIRD_OPERAND_INDIRECT, ZEROTH_OPERAND_INDIRECT, }; use crate::opcodes::AvmOpcode; use crate::utils::{dbg_print_avm_program, dbg_print_brillig_program, make_operand}; @@ -200,17 +200,8 @@ pub fn brillig_to_avm( make_operand(bits_needed, &source.0), make_operand(bits_needed, &destination.0), ], - tag: Some(tag_from_bit_size(BitSize::Integer(*bit_size))), + tag: None, }); - if let IntegerBitSize::U1 = bit_size { - // We need to cast the result back to u1 - handle_cast( - &mut avm_instrs, - destination, - destination, - BitSize::Integer(IntegerBitSize::U1), - ); - } } BrilligOpcode::CalldataCopy { destination_address, size_address, offset_address } => { avm_instrs.push(AvmInstruction { @@ -404,6 +395,7 @@ fn handle_foreign_call( handle_get_contract_instance(avm_instrs, destinations, inputs); } "avmOpcodeCalldataCopy" => handle_calldata_copy(avm_instrs, destinations, inputs), + "avmOpcodeReturn" => handle_return(avm_instrs, destinations, inputs), "avmOpcodeStorageRead" => handle_storage_read(avm_instrs, destinations, inputs), "avmOpcodeStorageWrite" => handle_storage_write(avm_instrs, destinations, inputs), "debugLog" => handle_debug_log(avm_instrs, destinations, inputs), @@ -475,7 +467,7 @@ fn handle_external_call( // (left to right) // * selector direct // * success offset direct - // * (n/a) ret size is an immeadiate + // * (n/a) ret size is an immediate // * ret offset INDIRECT // * arg size offset direct // * args offset INDIRECT @@ -505,32 +497,8 @@ fn handle_cast( let source_offset = source.to_usize() as u32; let dest_offset = destination.to_usize() as u32; - if bit_size == BitSize::Integer(IntegerBitSize::U1) { - assert!( - matches!(tag_from_bit_size(bit_size), AvmTypeTag::UINT8), - "If u1 doesn't map to u8 anymore, change this code!" - ); - avm_instrs.extend([ - // We cast to Field to be able to use toradix. - generate_cast_instruction(source_offset, false, dest_offset, false, AvmTypeTag::FIELD), - // Toradix with radix 2 and 1 limb is the same as modulo 2. - // We need to insert an instruction explicitly because we want to fine-tune 'indirect'. - AvmInstruction { - opcode: AvmOpcode::TORADIXLE, - indirect: Some(ALL_DIRECT), - tag: None, - operands: vec![ - AvmOperand::U32 { value: dest_offset }, - AvmOperand::U32 { value: dest_offset }, - AvmOperand::U32 { value: /*radix=*/ 2}, - AvmOperand::U32 { value: /*limbs=*/ 1}, - ], - }, - ]); - } else { - let tag = tag_from_bit_size(bit_size); - avm_instrs.push(generate_cast_instruction(source_offset, false, dest_offset, false, tag)); - } + let tag = tag_from_bit_size(bit_size); + avm_instrs.push(generate_cast_instruction(source_offset, false, dest_offset, false, tag)); } /// Handle an AVM NOTEHASHEXISTS instruction @@ -764,6 +732,23 @@ fn handle_getter_instruction( destinations: &Vec, inputs: &Vec, ) { + enum EnvironmentVariable { + ADDRESS, + STORAGEADDRESS, + SENDER, + FUNCTIONSELECTOR, + TRANSACTIONFEE, + CHAINID, + VERSION, + BLOCKNUMBER, + TIMESTAMP, + FEEPERL2GAS, + FEEPERDAGAS, + ISSTATICCALL, + L2GASLEFT, + DAGASLEFT, + } + // For the foreign calls we want to handle, we do not want inputs, as they are getters assert!(inputs.is_empty()); assert!(destinations.len() == 1); @@ -774,28 +759,31 @@ fn handle_getter_instruction( _ => panic!("ForeignCall address destination should be a single value"), }; - let opcode = match function { - "avmOpcodeAddress" => AvmOpcode::ADDRESS, - "avmOpcodeStorageAddress" => AvmOpcode::STORAGEADDRESS, - "avmOpcodeSender" => AvmOpcode::SENDER, - "avmOpcodeFeePerL2Gas" => AvmOpcode::FEEPERL2GAS, - "avmOpcodeFeePerDaGas" => AvmOpcode::FEEPERDAGAS, - "avmOpcodeTransactionFee" => AvmOpcode::TRANSACTIONFEE, - "avmOpcodeChainId" => AvmOpcode::CHAINID, - "avmOpcodeVersion" => AvmOpcode::VERSION, - "avmOpcodeBlockNumber" => AvmOpcode::BLOCKNUMBER, - "avmOpcodeTimestamp" => AvmOpcode::TIMESTAMP, - "avmOpcodeL2GasLeft" => AvmOpcode::L2GASLEFT, - "avmOpcodeDaGasLeft" => AvmOpcode::DAGASLEFT, - "avmOpcodeFunctionSelector" => AvmOpcode::FUNCTIONSELECTOR, - // "callStackDepth" => AvmOpcode::CallStackDepth, - _ => panic!("Transpiler doesn't know how to process ForeignCall function {:?}", function), + let var_idx = match function { + "avmOpcodeAddress" => EnvironmentVariable::ADDRESS, + "avmOpcodeStorageAddress" => EnvironmentVariable::STORAGEADDRESS, + "avmOpcodeSender" => EnvironmentVariable::SENDER, + "avmOpcodeFeePerL2Gas" => EnvironmentVariable::FEEPERL2GAS, + "avmOpcodeFeePerDaGas" => EnvironmentVariable::FEEPERDAGAS, + "avmOpcodeTransactionFee" => EnvironmentVariable::TRANSACTIONFEE, + "avmOpcodeChainId" => EnvironmentVariable::CHAINID, + "avmOpcodeVersion" => EnvironmentVariable::VERSION, + "avmOpcodeBlockNumber" => EnvironmentVariable::BLOCKNUMBER, + "avmOpcodeTimestamp" => EnvironmentVariable::TIMESTAMP, + "avmOpcodeL2GasLeft" => EnvironmentVariable::L2GASLEFT, + "avmOpcodeDaGasLeft" => EnvironmentVariable::DAGASLEFT, + "avmOpcodeFunctionSelector" => EnvironmentVariable::FUNCTIONSELECTOR, + "avmOpcodeIsStaticCall" => EnvironmentVariable::ISSTATICCALL, + _ => panic!("Transpiler doesn't know how to process getter {:?}", function), }; avm_instrs.push(AvmInstruction { - opcode, + opcode: AvmOpcode::GETENVVAR_16, indirect: Some(ALL_DIRECT), - operands: vec![AvmOperand::U32 { value: dest_offset as u32 }], + operands: vec![ + AvmOperand::U8 { value: var_idx as u8 }, + AvmOperand::U16 { value: dest_offset as u16 }, + ], ..Default::default() }); } @@ -897,19 +885,24 @@ fn generate_mov_instruction(indirect: Option, source: u32, dest: u32) -> Avm /// (array goes in -> field element comes out) fn handle_black_box_function(avm_instrs: &mut Vec, operation: &BlackBoxOp) { match operation { - BlackBoxOp::Sha256 { message, output } => { - let message_offset = message.pointer.0; - let message_size_offset = message.size.0; - let dest_offset = output.pointer.0; - assert_eq!(output.size, 32, "SHA256 output size must be 32!"); + BlackBoxOp::Sha256Compression { input, hash_values, output } => { + let inputs_offset = input.pointer.0; + let inputs_size_offset = input.size.0; + let state_offset = hash_values.pointer.0; + let state_size_offset = hash_values.size.0; + let output_offset = output.pointer.0; avm_instrs.push(AvmInstruction { - opcode: AvmOpcode::SHA256, - indirect: Some(ZEROTH_OPERAND_INDIRECT | FIRST_OPERAND_INDIRECT), + opcode: AvmOpcode::SHA256COMPRESSION, + indirect: Some( + ZEROTH_OPERAND_INDIRECT | FIRST_OPERAND_INDIRECT | THIRD_OPERAND_INDIRECT, + ), operands: vec![ - AvmOperand::U32 { value: dest_offset as u32 }, - AvmOperand::U32 { value: message_offset as u32 }, - AvmOperand::U32 { value: message_size_offset as u32 }, + AvmOperand::U32 { value: output_offset as u32 }, + AvmOperand::U32 { value: state_offset as u32 }, + AvmOperand::U32 { value: state_size_offset as u32 }, + AvmOperand::U32 { value: inputs_offset as u32 }, + AvmOperand::U32 { value: inputs_size_offset as u32 }, ], ..Default::default() }); @@ -987,12 +980,11 @@ fn handle_black_box_function(avm_instrs: &mut Vec, operation: &B ..Default::default() }); } - // We ignore the output bits flag since we represent bits as bytes - BlackBoxOp::ToRadix { input, radix, output, output_bits: _ } => { + BlackBoxOp::ToRadix { input, radix, output, output_bits } => { let num_limbs = output.size as u32; let input_offset = input.0 as u32; let output_offset = output.pointer.0 as u32; - assert!(radix <= &256u32, "Radix must be less than or equal to 256"); + let radix_offset = radix.0 as u32; avm_instrs.push(AvmInstruction { opcode: AvmOpcode::TORADIXLE, @@ -1001,8 +993,9 @@ fn handle_black_box_function(avm_instrs: &mut Vec, operation: &B operands: vec![ AvmOperand::U32 { value: input_offset }, AvmOperand::U32 { value: output_offset }, - AvmOperand::U32 { value: *radix }, + AvmOperand::U32 { value: radix_offset }, AvmOperand::U32 { value: num_limbs }, + AvmOperand::U1 { value: *output_bits as u8 }, ], }); } @@ -1159,6 +1152,33 @@ fn handle_calldata_copy( }); } +// #[oracle(avmOpcodeReturn)] +// unconstrained fn return_opcode(returndata: [Field; N]) {} +fn handle_return( + avm_instrs: &mut Vec, + destinations: &Vec, + inputs: &Vec, +) { + assert!(inputs.len() == 1); + assert!(destinations.len() == 0); + + // First arg is the size, which is ignored because it's redundant. + let (return_data_offset, return_data_size) = match inputs[0] { + ValueOrArray::HeapArray(HeapArray { pointer, size }) => (pointer.0 as u32, size as u32), + _ => panic!("Return instruction's args input should be a HeapArray"), + }; + + avm_instrs.push(AvmInstruction { + opcode: AvmOpcode::RETURN, + indirect: Some(ZEROTH_OPERAND_INDIRECT), + operands: vec![ + AvmOperand::U32 { value: return_data_offset as u32 }, + AvmOperand::U32 { value: return_data_size as u32 }, + ], + ..Default::default() + }); +} + /// Emit a storage write opcode /// The current implementation writes an array of values into storage ( contiguous slots in memory ) fn handle_storage_write( @@ -1313,8 +1333,6 @@ pub fn map_brillig_pcs_to_avm_pcs(brillig_bytecode: &[BrilligOpcode 2, - BrilligOpcode::Not { bit_size: IntegerBitSize::U1, .. } => 3, _ => 1, }; // next Brillig pc will map to an AVM pc offset by the @@ -1338,7 +1356,7 @@ fn is_integral_bit_size(bit_size: IntegerBitSize) -> bool { fn tag_from_bit_size(bit_size: BitSize) -> AvmTypeTag { match bit_size { - BitSize::Integer(IntegerBitSize::U1) => AvmTypeTag::UINT8, // temp workaround + BitSize::Integer(IntegerBitSize::U1) => AvmTypeTag::UINT1, BitSize::Integer(IntegerBitSize::U8) => AvmTypeTag::UINT8, BitSize::Integer(IntegerBitSize::U16) => AvmTypeTag::UINT16, BitSize::Integer(IntegerBitSize::U32) => AvmTypeTag::UINT32, diff --git a/avm-transpiler/src/transpile_contract.rs b/avm-transpiler/src/transpile_contract.rs index fff7ad27522..542baef9cc7 100644 --- a/avm-transpiler/src/transpile_contract.rs +++ b/avm-transpiler/src/transpile_contract.rs @@ -1,5 +1,3 @@ -use std::io::Read; - use acvm::FieldElement; use base64::Engine; use log::info; @@ -94,7 +92,7 @@ impl From for TranspiledContractArtifact { for function in contract.functions { // TODO(4269): once functions are tagged for transpilation to AVM, check tag - if function.custom_attributes.contains(&"aztec(public)".to_string()) { + if function.custom_attributes.contains(&"public".to_string()) { info!("Transpiling AVM function {} on contract {}", function.name, contract.name); // Extract Brillig Opcodes from acir let acir_program = function.bytecode; @@ -112,19 +110,11 @@ impl From for TranspiledContractArtifact { // Transpile to AVM let avm_bytecode = brillig_to_avm(brillig_bytecode, &brillig_pcs_to_avm_pcs); - // Gzip AVM bytecode. This has to be removed once we need to do bytecode verification. - let mut compressed_avm_bytecode = Vec::new(); - let mut encoder = - flate2::read::GzEncoder::new(&avm_bytecode[..], flate2::Compression::best()); - let _ = encoder.read_to_end(&mut compressed_avm_bytecode); - log::info!( - "{}::{}: bytecode size of {} was compressed to {} ({}% reduction)", + "{}::{}: bytecode is {} bytes", contract.name, function.name, avm_bytecode.len(), - compressed_avm_bytecode.len(), - 100 - (compressed_avm_bytecode.len() * 100 / avm_bytecode.len()) ); // Patch the debug infos with updated PCs @@ -140,7 +130,7 @@ impl From for TranspiledContractArtifact { is_unconstrained: function.is_unconstrained, custom_attributes: function.custom_attributes, abi: function.abi, - bytecode: base64::prelude::BASE64_STANDARD.encode(compressed_avm_bytecode), + bytecode: base64::prelude::BASE64_STANDARD.encode(avm_bytecode), debug_symbols: ProgramDebugInfo { debug_infos }, brillig_names: function.brillig_names, assert_messages, diff --git a/barretenberg/.gitrepo b/barretenberg/.gitrepo index 241fc91a267..894f1f0964f 100644 --- a/barretenberg/.gitrepo +++ b/barretenberg/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/barretenberg branch = master - commit = f110fbcf3dcd1ec946517395566059b1034ce815 - parent = 8bd0755a40357a0bc3c56ae5f60e7ff71552a69c + commit = 210c03edc60bcabfc8a5363d215770121424ae3f + parent = 9d248a24091cfbf1c4d09b49227136883e6118f0 method = merge cmdver = 0.4.6 diff --git a/barretenberg/CHANGELOG.md b/barretenberg/CHANGELOG.md index 4446490e2ab..90f5b4ad830 100644 --- a/barretenberg/CHANGELOG.md +++ b/barretenberg/CHANGELOG.md @@ -1,5 +1,90 @@ # Changelog +## [0.56.0](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.55.1...barretenberg-v0.56.0) (2024-09-25) + + +### ⚠ BREAKING CHANGES + +* change ec_add to unsafe implementation (but much better perf) ([#8374](https://github.com/AztecProtocol/aztec-packages/issues/8374)) +* **avm:** GETENVVAR + ISSTATICCALL ([#8692](https://github.com/AztecProtocol/aztec-packages/issues/8692)) +* remove sha256 opcode ([#4571](https://github.com/AztecProtocol/aztec-packages/issues/4571)) +* add support for u1 in the avm, ToRadix's radix arg is a memory addr ([#8570](https://github.com/AztecProtocol/aztec-packages/issues/8570)) +* **avm:** remove tag in NOT ([#8606](https://github.com/AztecProtocol/aztec-packages/issues/8606)) + +### Features + +* (LSP) suggest $vars inside `quote { ... }` (https://github.com/noir-lang/noir/pull/6114) ([7a87314](https://github.com/AztecProtocol/aztec-packages/commit/7a873147444ef03bc1df88e0fdca3cf6fc124725)) +* Add initial integration of databus ([#8710](https://github.com/AztecProtocol/aztec-packages/issues/8710)) ([779e104](https://github.com/AztecProtocol/aztec-packages/commit/779e10499cfe668506ba8a199342cf86fae258a7)) +* Add support for u1 in the avm, ToRadix's radix arg is a memory addr ([#8570](https://github.com/AztecProtocol/aztec-packages/issues/8570)) ([1785737](https://github.com/AztecProtocol/aztec-packages/commit/178573738731e2e74e4119a035f913da39675d85)) +* Aggregate honk and avm recursion constraints together ([#8696](https://github.com/AztecProtocol/aztec-packages/issues/8696)) ([3fa9e83](https://github.com/AztecProtocol/aztec-packages/commit/3fa9e83c0fac460f586572fe2866823fe7f740d2)) +* **avm:** Avm recursive TS/Noir integration ([#8531](https://github.com/AztecProtocol/aztec-packages/issues/8531)) ([dd09f05](https://github.com/AztecProtocol/aztec-packages/commit/dd09f057e97ac1bba7b3fbf29b50737ebe5ca76f)), closes [#7791](https://github.com/AztecProtocol/aztec-packages/issues/7791) +* **avm:** Avm recursive TS/Noir integration ([#8611](https://github.com/AztecProtocol/aztec-packages/issues/8611)) ([e417231](https://github.com/AztecProtocol/aztec-packages/commit/e4172318af81ac2ac8535c89d3e5afc72d33ba29)) +* **avm:** Bounded mle implementation ([#8668](https://github.com/AztecProtocol/aztec-packages/issues/8668)) ([aa85f2a](https://github.com/AztecProtocol/aztec-packages/commit/aa85f2a781223f067291b5702f2e47baced865fd)), closes [#8651](https://github.com/AztecProtocol/aztec-packages/issues/8651) +* **avm:** GETENVVAR + ISSTATICCALL ([#8692](https://github.com/AztecProtocol/aztec-packages/issues/8692)) ([02cff0b](https://github.com/AztecProtocol/aztec-packages/commit/02cff0b525d9d6b1c854219f06713a8b94a8e9f5)) +* **avm:** Opcode STATICCALL - stubbed ([#8601](https://github.com/AztecProtocol/aztec-packages/issues/8601)) ([facff7f](https://github.com/AztecProtocol/aztec-packages/commit/facff7fd0b6ea57e91f7d3e3863435655d8b48ea)), closes [#8596](https://github.com/AztecProtocol/aztec-packages/issues/8596) +* **avm:** Remove tag in NOT ([#8606](https://github.com/AztecProtocol/aztec-packages/issues/8606)) ([d5695fc](https://github.com/AztecProtocol/aztec-packages/commit/d5695fcde93cbfda3e45bfa03988a9e72f2dcb59)) +* **avm:** Set avm circuit subgroup size ([#8537](https://github.com/AztecProtocol/aztec-packages/issues/8537)) ([3b78058](https://github.com/AztecProtocol/aztec-packages/commit/3b78058288edbbe18a2eb8c81de5576c8a9478ab)) +* Benchmark compute_row_evaluations and update analysis script ([#8673](https://github.com/AztecProtocol/aztec-packages/issues/8673)) ([c738c47](https://github.com/AztecProtocol/aztec-packages/commit/c738c47bd13875ba1649d808e7abd2908fa29e07)) +* Constant sized PG proofs and const sized PG rec verifier ([#8605](https://github.com/AztecProtocol/aztec-packages/issues/8605)) ([09e2f44](https://github.com/AztecProtocol/aztec-packages/commit/09e2f447b003ed4c77b12069893785851a2c6258)) +* LSP autocompletion for `TypePath` (https://github.com/noir-lang/noir/pull/6117) ([7a87314](https://github.com/AztecProtocol/aztec-packages/commit/7a873147444ef03bc1df88e0fdca3cf6fc124725)) +* Make UltraKeccak work with Shplemini at bb-level ([#8646](https://github.com/AztecProtocol/aztec-packages/issues/8646)) ([82b60eb](https://github.com/AztecProtocol/aztec-packages/commit/82b60ebbdb18400363248b80986c993df1b7e4af)) +* More robust recursion input generator ([#8634](https://github.com/AztecProtocol/aztec-packages/issues/8634)) ([020d4fd](https://github.com/AztecProtocol/aztec-packages/commit/020d4fd0cf4137e21f55b1c41e9e381a27191d84)) +* **perf:** Allow array set last uses optimization in return block of Brillig functions (https://github.com/noir-lang/noir/pull/6119) ([7a87314](https://github.com/AztecProtocol/aztec-packages/commit/7a873147444ef03bc1df88e0fdca3cf6fc124725)) +* Pretty print Quoted token stream (https://github.com/noir-lang/noir/pull/6111) ([7a87314](https://github.com/AztecProtocol/aztec-packages/commit/7a873147444ef03bc1df88e0fdca3cf6fc124725)) +* Public kernel handles enqueued calls ([#8523](https://github.com/AztecProtocol/aztec-packages/issues/8523)) ([6303b4a](https://github.com/AztecProtocol/aztec-packages/commit/6303b4afbc39715e92d5ca7ae5100c60f6398686)) +* Reduce max memory in translator by freeing accumulator and eccvm ([#8253](https://github.com/AztecProtocol/aztec-packages/issues/8253)) ([7247ddb](https://github.com/AztecProtocol/aztec-packages/commit/7247ddba274e691a7c5220848caf1fa9d6aa911e)) +* Remove sha256 opcode ([#4571](https://github.com/AztecProtocol/aztec-packages/issues/4571)) ([4b4a0bf](https://github.com/AztecProtocol/aztec-packages/commit/4b4a0bf17050893f913b3db10bc70a584b7aaa5e)) +* Represent assertions more similarly to function calls (https://github.com/noir-lang/noir/pull/6103) ([7a87314](https://github.com/AztecProtocol/aztec-packages/commit/7a873147444ef03bc1df88e0fdca3cf6fc124725)) +* Use new IVC scheme ([#8480](https://github.com/AztecProtocol/aztec-packages/issues/8480)) ([1c7b06d](https://github.com/AztecProtocol/aztec-packages/commit/1c7b06d6621d9873f84147b2b7f1f22bf21bbacb)) + + +### Bug Fixes + +* **avm:** Fix tests under proving ([#8640](https://github.com/AztecProtocol/aztec-packages/issues/8640)) ([8bfc769](https://github.com/AztecProtocol/aztec-packages/commit/8bfc769d7cbd6f88bfa7926c051a329ee0fd3468)) +* Boomerang variable in sha256 hash function ([#8581](https://github.com/AztecProtocol/aztec-packages/issues/8581)) ([f2a1330](https://github.com/AztecProtocol/aztec-packages/commit/f2a13309f544bbd83b593e6a6207d49d9ef48b74)) +* Decode databus return values (https://github.com/noir-lang/noir/pull/6095) ([7a87314](https://github.com/AztecProtocol/aztec-packages/commit/7a873147444ef03bc1df88e0fdca3cf6fc124725)) +* Disambiguate field or int static trait method call (https://github.com/noir-lang/noir/pull/6112) ([7a87314](https://github.com/AztecProtocol/aztec-packages/commit/7a873147444ef03bc1df88e0fdca3cf6fc124725)) +* **mem2reg:** Remove possibility of underflow (https://github.com/noir-lang/noir/pull/6107) ([7a87314](https://github.com/AztecProtocol/aztec-packages/commit/7a873147444ef03bc1df88e0fdca3cf6fc124725)) +* New commit_sparse bug and new tests ([#8649](https://github.com/AztecProtocol/aztec-packages/issues/8649)) ([5818018](https://github.com/AztecProtocol/aztec-packages/commit/581801863529cd2b437cb51b041ada17a96949e0)) +* **revert:** "chore!: change ec_add to unsafe implementation (but much better perf)" ([#8722](https://github.com/AztecProtocol/aztec-packages/issues/8722)) ([9a1b5b5](https://github.com/AztecProtocol/aztec-packages/commit/9a1b5b5fdd3194f4e7833aacbca4f48aadafbd74)) +* Unencryptedlogs witgen ([#8669](https://github.com/AztecProtocol/aztec-packages/issues/8669)) ([aee4c2d](https://github.com/AztecProtocol/aztec-packages/commit/aee4c2dde7576fad1c47e407ee0dca43dac2b1b4)) +* **world_state:** Fix race conditions in WorldState and IndexedTree ([#8612](https://github.com/AztecProtocol/aztec-packages/issues/8612)) ([6797525](https://github.com/AztecProtocol/aztec-packages/commit/679752542edf1667d58e8839aca05d2b9fcc7da6)) + + +### Miscellaneous + +* Add more cases for assert_equal conversion ([#8446](https://github.com/AztecProtocol/aztec-packages/issues/8446)) ([e3ea298](https://github.com/AztecProtocol/aztec-packages/commit/e3ea298fd1f7326199e6e35b3523aadb2b12a925)) +* **avm:** Simplify bb-prover and other AVM tests ([#8627](https://github.com/AztecProtocol/aztec-packages/issues/8627)) ([0d75363](https://github.com/AztecProtocol/aztec-packages/commit/0d7536395f2406a22a76f15d01114730c84edc18)) +* **avm:** Smaller skippable test ([#8664](https://github.com/AztecProtocol/aztec-packages/issues/8664)) ([2418977](https://github.com/AztecProtocol/aztec-packages/commit/241897733fe0a5e2ccdf322449debd367f458086)) +* **bb readme:** Document how to Honk Noir programs ([#7638](https://github.com/AztecProtocol/aztec-packages/issues/7638)) ([cd46ddd](https://github.com/AztecProtocol/aztec-packages/commit/cd46ddd96539f2db466d1116dabdb838d2a807e7)) +* Bye bye Zeromorph in Solidity ([#8678](https://github.com/AztecProtocol/aztec-packages/issues/8678)) ([74182c4](https://github.com/AztecProtocol/aztec-packages/commit/74182c40e152e988ee8590f39c51d00150ef01ca)) +* Change ec_add to unsafe implementation (but much better perf) ([#8374](https://github.com/AztecProtocol/aztec-packages/issues/8374)) ([aabd2d8](https://github.com/AztecProtocol/aztec-packages/commit/aabd2d85d4f3f35d67d53421b47214aa8904c505)) +* Create a Gemini prover ([#8622](https://github.com/AztecProtocol/aztec-packages/issues/8622)) ([94339fb](https://github.com/AztecProtocol/aztec-packages/commit/94339fbfc7c0c822dc1497c113d48f74a89f1bad)) +* Delete duplicated test (https://github.com/noir-lang/noir/pull/6113) ([7a87314](https://github.com/AztecProtocol/aztec-packages/commit/7a873147444ef03bc1df88e0fdca3cf6fc124725)) +* **docs:** Removing old versions (https://github.com/noir-lang/noir/pull/6075) ([7a87314](https://github.com/AztecProtocol/aztec-packages/commit/7a873147444ef03bc1df88e0fdca3cf6fc124725)) +* Ec addition for non-zero points (https://github.com/noir-lang/noir/pull/5858) ([7a87314](https://github.com/AztecProtocol/aztec-packages/commit/7a873147444ef03bc1df88e0fdca3cf6fc124725)) +* Fixing MacOS build - static_cast from field issue ([#8642](https://github.com/AztecProtocol/aztec-packages/issues/8642)) ([14ff3cf](https://github.com/AztecProtocol/aztec-packages/commit/14ff3cfb4291c288113695a3f2245340587fc8e9)) +* Gas premiums for AVM side effects, DA gas in AVM ([#8632](https://github.com/AztecProtocol/aztec-packages/issues/8632)) ([d5f16cc](https://github.com/AztecProtocol/aztec-packages/commit/d5f16cc41bc077f24947fc92af2767630e928ed8)) +* Migrate higher-level APIs for barretenberg to bb.js ([#8677](https://github.com/AztecProtocol/aztec-packages/issues/8677)) ([0237a20](https://github.com/AztecProtocol/aztec-packages/commit/0237a20c989f2b37a64ee18b41c1da361363a81f)) +* Protogalaxy recursive verifier matches native verifier ([#8568](https://github.com/AztecProtocol/aztec-packages/issues/8568)) ([a4f61b3](https://github.com/AztecProtocol/aztec-packages/commit/a4f61b39c39bf01a1071b52bbf042408f29d5564)) +* Reinstate skipped tests ([#8743](https://github.com/AztecProtocol/aztec-packages/issues/8743)) ([18e2697](https://github.com/AztecProtocol/aztec-packages/commit/18e2697d8791b4533e042ec04526e32922b608bc)) +* Remove creation of extra toml file in recursion inputs flow ([#8700](https://github.com/AztecProtocol/aztec-packages/issues/8700)) ([014bacc](https://github.com/AztecProtocol/aztec-packages/commit/014bacc0b2f1d56f416a3ab939b8aa5ad90656dd)) +* Skip some tests in CI ([#8738](https://github.com/AztecProtocol/aztec-packages/issues/8738)) ([251db7b](https://github.com/AztecProtocol/aztec-packages/commit/251db7be2d7541852de314a13a85205b4b3a0418)) + +## [0.55.1](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.55.0...barretenberg-v0.55.1) (2024-09-17) + + +### Bug Fixes + +* Native world state test issues ([#8546](https://github.com/AztecProtocol/aztec-packages/issues/8546)) ([aab8773](https://github.com/AztecProtocol/aztec-packages/commit/aab87733b4381d8d64b85f5e5a6bff4e31ee1abd)) + + +### Miscellaneous + +* 7791: Disable world_state test suite ([#8594](https://github.com/AztecProtocol/aztec-packages/issues/8594)) ([ee21583](https://github.com/AztecProtocol/aztec-packages/commit/ee21583aea137eea31cb1b4e6e0643061ef0d59f)) +* Moves add gate out of aux ([#8541](https://github.com/AztecProtocol/aztec-packages/issues/8541)) ([c3ad163](https://github.com/AztecProtocol/aztec-packages/commit/c3ad163dbcf79067b49553f1c139c49a6aa066cb)) +* Protogalaxy verifier matches prover 2 ([#8477](https://github.com/AztecProtocol/aztec-packages/issues/8477)) ([58882b1](https://github.com/AztecProtocol/aztec-packages/commit/58882b199081b18e33fb65f8d05cfce7fe458f1e)) + ## [0.55.0](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.54.0...barretenberg-v0.55.0) (2024-09-13) diff --git a/barretenberg/acir_tests/browser-test-app/src/index.ts b/barretenberg/acir_tests/browser-test-app/src/index.ts index 45b39346ddf..5bd1f0a010c 100644 --- a/barretenberg/acir_tests/browser-test-app/src/index.ts +++ b/barretenberg/acir_tests/browser-test-app/src/index.ts @@ -9,34 +9,21 @@ async function runTest( witness: Uint8Array, threads?: number ) { - const { Barretenberg, RawBuffer, Crs } = await import("@aztec/bb.js"); - const CIRCUIT_SIZE = 2 ** 19; + const { UltraPlonkBackend, BarretenbergVerifier } = await import("@aztec/bb.js"); debug("starting test..."); - const api = await Barretenberg.new({ threads }); + const backend = new UltraPlonkBackend(bytecode, { threads }); + const proof = await backend.generateProof(witness); - // Important to init slab allocator as first thing, to ensure maximum memory efficiency. - await api.commonInitSlabAllocator(CIRCUIT_SIZE); + const verificationKey = await backend.getVerificationKey(); + await backend.destroy(); - // Plus 1 needed! - const crs = await Crs.new(CIRCUIT_SIZE + 1); - await api.srsInitSrs( - new RawBuffer(crs.getG1Data()), - crs.numPoints, - new RawBuffer(crs.getG2Data()) - ); - - const acirComposer = await api.acirNewAcirComposer(CIRCUIT_SIZE); - const proof = await api.acirCreateProof( - acirComposer, - bytecode, - witness, - ); debug(`verifying...`); - const verified = await api.acirVerifyProof(acirComposer, proof); + const verifier = new BarretenbergVerifier({ threads }); + const verified = await verifier.verifyUltraplonkProof(proof, verificationKey); debug(`verified: ${verified}`); - await api.destroy(); + await verifier.destroy(); debug("test complete."); return verified; diff --git a/barretenberg/acir_tests/regenerate_verify_honk_proof_inputs.sh b/barretenberg/acir_tests/regenerate_verify_honk_proof_inputs.sh index 3847c20e07b..ba811246596 100755 --- a/barretenberg/acir_tests/regenerate_verify_honk_proof_inputs.sh +++ b/barretenberg/acir_tests/regenerate_verify_honk_proof_inputs.sh @@ -6,9 +6,7 @@ set -eu BIN=${BIN:-../cpp/build/bin/bb} CRS_PATH=~/.bb-crs BRANCH=master -VERBOSE=${VERBOSE:-} -RECURSIVE=true -PROOF_NAME="proof_a" +VERBOSE=${VERBOSE:+-v} if [ -f $BIN ]; then BIN=$(realpath $BIN) @@ -18,31 +16,22 @@ fi export BRANCH -./reset_acir_tests.sh --rebuild-nargo --programs assert_statement_recursive +# the program for which a proof will be recursively verified +PROGRAM=assert_statement_recursive +# the program containing the recursive verifier +RECURSIVE_PROGRAM=verify_honk_proof -cd acir_tests/assert_statement_recursive +./reset_acir_tests.sh --rebuild-nargo --programs "$PROGRAM" +cd "acir_tests/$PROGRAM" -PROOF_DIR=$PWD/proofs -PROOF_PATH=$PROOF_DIR/$PROOF_NAME -VFLAG=${VERBOSE:+-v} -RFLAG=${RECURSIVE:+-r} - -echo "Write VK to file for assert_statement..." -$BIN write_vk_ultra_honk $VFLAG -c $CRS_PATH -o ./target/honk_vk - -echo "Write VK as fields for recursion..." -$BIN vk_as_fields_ultra_honk $VFLAG -c $CRS_PATH -k ./target/honk_vk -o ./target/honk_vk_fields.json - -echo "Generate proof to file..." -[ -d "$PROOF_DIR" ] || mkdir $PWD/proofs -[ -e "$PROOF_PATH" ] || touch $PROOF_PATH -$BIN prove_ultra_honk $VFLAG -c $CRS_PATH -b ./target/program.json -o "./proofs/honk_$PROOF_NAME" +TOML_DIR=../../../../noir/noir-repo/test_programs/execution_success/"$RECURSIVE_PROGRAM" +if [ ! -d "$TOML_DIR" ]; then + echo "Error: Directory $TOML_DIR does not exist." + exit 1 +fi -echo "Write proof as fields for recursion..." -$BIN proof_as_fields_honk $VFLAG -c $CRS_PATH -p "./proofs/honk_$PROOF_NAME" -o "./proofs/honk_${PROOF_NAME}_fields.json" +echo "Generating recursion inputs and writing to directory $TOML_DIR" +$BIN write_recursion_inputs_honk $VERBOSE -c $CRS_PATH -b ./target/program.json -o "$TOML_DIR" -# cd back to barretenberg/acir_tests cd ../.. -python3 update_verify_honk_proof_inputs.py - -./reset_acir_tests.sh --programs verify_honk_proof \ No newline at end of file +./reset_acir_tests.sh --programs "$RECURSIVE_PROGRAM" \ No newline at end of file diff --git a/barretenberg/acir_tests/run_acir_tests.sh b/barretenberg/acir_tests/run_acir_tests.sh index 0a6cdbbb3fd..011dbfa5d64 100755 --- a/barretenberg/acir_tests/run_acir_tests.sh +++ b/barretenberg/acir_tests/run_acir_tests.sh @@ -41,7 +41,8 @@ SKIP_ARRAY=(diamond_deps_0 workspace workspace_default_member) # if HONK is false, we should skip verify_honk_proof if [ "$HONK" = false ]; then # Insert the new item into the array - SKIP_ARRAY+=(verify_honk_proof) + # TODO https://github.com/AztecProtocol/barretenberg/issues/1108 + SKIP_ARRAY+=(verify_honk_proof regression_5045) fi function test() { diff --git a/barretenberg/acir_tests/sol-test/src/index.js b/barretenberg/acir_tests/sol-test/src/index.js index bcfed952892..25a25484ba6 100644 --- a/barretenberg/acir_tests/sol-test/src/index.js +++ b/barretenberg/acir_tests/sol-test/src/index.js @@ -3,11 +3,11 @@ const { readFileSync, promises: fsPromises } = fs; import { spawn } from "child_process"; import { ethers } from "ethers"; import solc from "solc"; -import linker from "solc/linker.js"; const NUMBER_OF_FIELDS_IN_PLONK_PROOF = 93; -// This excludes the public inputs which are sent separately to the Solidity verifier -const NUMBER_OF_FIELDS_IN_HONK_PROOF = 423; +// TODO(https://github.com/AztecProtocol/barretenberg/issues/1093): This is the size of the proof up to Sumcheck, without public inputs, as the Honk contract does not currently have a PCS. +// This needs to be changed once Shplemini is implemented in the smart contract. +const NUMBER_OF_FIELDS_IN_HONK_PROOF = 303; // We use the solcjs compiler version in this test, although it is slower than foundry, to run the test end to end // it simplifies of parallelising the test suite diff --git a/barretenberg/acir_tests/update_verify_honk_proof_inputs.py b/barretenberg/acir_tests/update_verify_honk_proof_inputs.py deleted file mode 100644 index 2902a87a854..00000000000 --- a/barretenberg/acir_tests/update_verify_honk_proof_inputs.py +++ /dev/null @@ -1,45 +0,0 @@ -import json -import shutil - -# Paths to the input files -proof_file_path = "acir_tests/assert_statement_recursive/proofs/honk_proof_a_fields.json" -vk_file_path = "acir_tests/assert_statement_recursive/target/honk_vk_fields.json" - -# Path to the output TOML file -output_toml_path = "../../noir/verify_honk_proof/Prover.toml" -output_toml_path_2 = "../../noir/noir-repo/test_programs/execution_success/verify_honk_proof/Prover.toml" - -# Read the proof from the JSON file -with open(proof_file_path, "r") as proof_file: - proof_data = json.load(proof_file) - -# Read the verification key from the JSON file -with open(vk_file_path, "r") as vk_file: - vk_data = json.load(vk_file) - -# Extract the one public input (4th element in the proof array) -public_inputs = proof_data[3] if len(proof_data) > 3 else None - -# Remove the public input from the proof array -proof_data_without_public_input = proof_data[:3] + proof_data[4:] - -# Convert each element in the proof and verification key to a hex string with double quotes -proof_data_str = [f'"{item}"' for item in proof_data_without_public_input] -vk_data_str = [f'"{item}"' for item in vk_data] -public_inputs_str = f'"{public_inputs}"' - -# Manually create the TOML content with public_inputs as an array -toml_content = ( - f'key_hash = "0x{"0" * 64}"\n' - f'proof = [{", ".join(proof_data_str)}]\n' - f'public_inputs = [{public_inputs_str}]\n' - f'verification_key = [{", ".join(vk_data_str)}]\n' -) - -# Write the content to the output TOML file -with open(output_toml_path, "w") as output_toml_file: - output_toml_file.write(toml_content) - -shutil.copy(output_toml_path, output_toml_path_2) - -print(f"Prover.toml has been successfully created at {output_toml_path}") diff --git a/barretenberg/cpp/CMakeLists.txt b/barretenberg/cpp/CMakeLists.txt index 63dc4638365..81b75435a15 100644 --- a/barretenberg/cpp/CMakeLists.txt +++ b/barretenberg/cpp/CMakeLists.txt @@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 3.24 FATAL_ERROR) project( Barretenberg DESCRIPTION "BN254 elliptic curve library, and PLONK SNARK prover" - VERSION 0.55.0 # x-release-please-version + VERSION 0.56.0 # x-release-please-version LANGUAGES CXX C ) # Insert version into `bb` config file diff --git a/barretenberg/cpp/CMakePresets.json b/barretenberg/cpp/CMakePresets.json index 140b5780ed0..643e4590ae2 100644 --- a/barretenberg/cpp/CMakePresets.json +++ b/barretenberg/cpp/CMakePresets.json @@ -264,6 +264,9 @@ "description": "Build with thread sanitizer on clang16 with debugging information", "inherits": "clang16-dbg", "binaryDir": "build-tsan", + "cacheVariables": { + "HAVE_STD_REGEX": "ON" + }, "environment": { "CFLAGS": "-fsanitize=thread", "CXXFLAGS": "-fsanitize=thread", diff --git a/barretenberg/cpp/bootstrap.sh b/barretenberg/cpp/bootstrap.sh index 532e9b1165e..05844f3a8c6 100755 --- a/barretenberg/cpp/bootstrap.sh +++ b/barretenberg/cpp/bootstrap.sh @@ -118,5 +118,5 @@ if [ ! -d ./srs_db/grumpkin ]; then # The Grumpkin SRS is generated manually at the moment, only up to a large enough size for tests # If tests require more points, the parameter can be increased here. Note: IPA requires # dyadic_circuit_size + 1 points so in general this number will be a power of two plus 1 - cd ./build && cmake --build . --parallel --target grumpkin_srs_gen && ./bin/grumpkin_srs_gen 8193 + cd ./build && cmake --build . --parallel --target grumpkin_srs_gen && ./bin/grumpkin_srs_gen 32769 fi diff --git a/barretenberg/cpp/cmake/module.cmake b/barretenberg/cpp/cmake/module.cmake index f405d175d73..924952e8d0b 100644 --- a/barretenberg/cpp/cmake/module.cmake +++ b/barretenberg/cpp/cmake/module.cmake @@ -156,7 +156,7 @@ function(barretenberg_module MODULE_NAME) # enable msgpack downloading via dependency (solves race condition) add_dependencies(${MODULE_NAME}_test_objects msgpack-c) add_dependencies(${MODULE_NAME}_tests msgpack-c) - if(NOT WASM AND NOT CI) + if(NOT WASM) # If collecting coverage data, set profile # For some reason processor affinity doesn't work, so the developer has to set it manually anyway if(COVERAGE) @@ -168,7 +168,7 @@ function(barretenberg_module MODULE_NAME) WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) else() # Currently haven't found a way to easily wrap the calls in wasmtime when run from ctest. - gtest_discover_tests(${MODULE_NAME}_tests WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) + gtest_discover_tests(${MODULE_NAME}_tests WORKING_DIRECTORY ${CMAKE_BINARY_DIR} TEST_FILTER -*_SKIP_CI*) endif() endif() diff --git a/barretenberg/cpp/pil/avm/alu.pil b/barretenberg/cpp/pil/avm/alu.pil index 6778c42e9d7..392a49d8f04 100644 --- a/barretenberg/cpp/pil/avm/alu.pil +++ b/barretenberg/cpp/pil/avm/alu.pil @@ -1,3 +1,4 @@ +include "constants_gen.pil"; include "gadgets/range_check.pil"; include "gadgets/cmp.pil"; namespace alu(256); @@ -12,16 +13,17 @@ namespace alu(256); pol commit ic; pol commit sel_alu; // Predicate to activate the copy of intermediate registers to ALU table. - // Instruction tag (1: u8, 2: u16, 3: u32, 4: u64, 5: u128, 6: field) copied from Main table + // Instruction tag (1: u1, 2: u8, 3: u16, 4: u32, 5: u64, 6: u128, 7: field) copied from Main table pol commit in_tag; // Flattened boolean instruction tags - pol commit ff_tag; + pol commit u1_tag; pol commit u8_tag; pol commit u16_tag; pol commit u32_tag; pol commit u64_tag; pol commit u128_tag; + pol commit ff_tag; // Compute predicate telling whether there is a row entry in the ALU table. sel_alu = op_add + op_sub + op_mul + op_not + op_eq + op_cast + op_lt + op_lte + op_shr + op_shl + op_div; @@ -30,18 +32,25 @@ namespace alu(256); // Remark: Operation selectors are constrained in the main trace. // Boolean flattened instructions tags - ff_tag * (1 - ff_tag) = 0; + u1_tag * (1 - u1_tag) = 0; u8_tag * (1 - u8_tag) = 0; u16_tag * (1 - u16_tag) = 0; u32_tag * (1 - u32_tag) = 0; u64_tag * (1 - u64_tag) = 0; u128_tag * (1 - u128_tag) = 0; + ff_tag * (1 - ff_tag) = 0; // Mutual exclusion of the flattened instruction tag. - sel_alu * (ff_tag + u8_tag + u16_tag + u32_tag + u64_tag + u128_tag - 1) = 0; + sel_alu * (u1_tag + u8_tag + u16_tag + u32_tag + u64_tag + u128_tag + ff_tag - 1) = 0; // Correct flattening of the instruction tag. - in_tag = u8_tag + 2 * u16_tag + 3 * u32_tag + 4 * u64_tag + 5 * u128_tag + 6 * ff_tag; + in_tag = (constants.MEM_TAG_U1 * u1_tag) + + (constants.MEM_TAG_U8 * u8_tag) + + (constants.MEM_TAG_U16 * u16_tag) + + (constants.MEM_TAG_U32 * u32_tag) + + (constants.MEM_TAG_U64 * u64_tag) + + (constants.MEM_TAG_U128 * u128_tag) + + (constants.MEM_TAG_FF * ff_tag); // Operation selectors are copied from main table and do not need to be constrained here. // Mutual exclusion of op_add and op_sub are derived from their mutual exclusion in the @@ -59,7 +68,7 @@ namespace alu(256); range_check_input_value = (op_add + op_sub + op_mul + op_cast + op_div) * ic + (op_shr * a_hi * NON_TRIVIAL_SHIFT) + (op_shl * a_lo * NON_TRIVIAL_SHIFT); // The allowed bit range is defined by the instr tag, unless in shifts where it's different range_check_num_bits = - (op_add + op_sub + op_mul + op_cast + op_div) * (u8_tag * 8 + u16_tag * 16 + u32_tag * 32 + u64_tag * 64 + u128_tag * 128) + + (op_add + op_sub + op_mul + op_cast + op_div) * (u1_tag * 1 + u8_tag * 8 + u16_tag * 16 + u32_tag * 32 + u64_tag * 64 + u128_tag * 128) + (op_shl + op_shr) * (MAX_BITS - ib) * NON_TRIVIAL_SHIFT; // Permutation to the Range Check Gadget @@ -92,15 +101,16 @@ namespace alu(256); // These are useful and commonly used relations / columns used through the file // The maximum number of bits as defined by the instr tag - pol MAX_BITS = u8_tag * 8 + u16_tag * 16 + u32_tag * 32 + u64_tag * 64 + u128_tag * 128; + pol MAX_BITS = u1_tag * 1 + u8_tag * 8 + u16_tag * 16 + u32_tag * 32 + u64_tag * 64 + u128_tag * 128; // 2^MAX_BITS - pol MAX_BITS_POW = u8_tag * 2**8 + u16_tag * 2**16 + u32_tag * 2**32 + u64_tag * 2**64 + u128_tag * 2**128; + pol MAX_BITS_POW = u1_tag * 2 + u8_tag * 2**8 + u16_tag * 2**16 + u32_tag * 2**32 + u64_tag * 2**64 + u128_tag * 2**128; pol UINT_MAX = MAX_BITS_POW - 1; // Value of p - 1 pol MAX_FIELD_VALUE = 21888242871839275222246405745257275088548364400416034343698204186575808495616; // Used when we split inputs into lo and hi limbs each of (MAX_BITS / 2) + // omitted: u1_tag * 0 (no need for limbs...) pol LIMB_BITS_POW = u8_tag * 2**4 + u16_tag * 2**8 + u32_tag * 2**16 + u64_tag * 2**32 + u128_tag * 2**64; // Lo and Hi Limbs for ia, ib and ic resp. Useful when performing operations over integers pol commit a_lo; @@ -132,7 +142,8 @@ namespace alu(256); a_lo * b_hi + b_lo * a_hi = partial_prod_lo + LIMB_BITS_POW * partial_prod_hi; // This holds the product over the integers - pol PRODUCT = a_lo * b_lo + LIMB_BITS_POW * partial_prod_lo + MAX_BITS_POW * (partial_prod_hi + a_hi * b_hi); + // (u1 multiplication only cares about a_lo and b_lo) + pol PRODUCT = a_lo * b_lo + (1 - u1_tag) * (LIMB_BITS_POW * partial_prod_lo + MAX_BITS_POW * (partial_prod_hi + a_hi * b_hi)); // =============== ADDITION/SUBTRACTION Operation Constraints ================================================= pol commit op_add; @@ -243,6 +254,7 @@ namespace alu(256); // =============== Trivial Shift Operation ================================================= // We use the comparison gadget to test ib > (MAX_BITS - 1) + // (always true for u1 - all u1 shifts are trivial) (op_shl + op_shr) * (cmp_gadget_input_a - ib) = 0; (op_shl + op_shr) * (cmp_gadget_input_b - (MAX_BITS - 1) ) = 0; diff --git a/barretenberg/cpp/pil/avm/binary.pil b/barretenberg/cpp/pil/avm/binary.pil index d30edaa7474..d9e7d3d57a6 100644 --- a/barretenberg/cpp/pil/avm/binary.pil +++ b/barretenberg/cpp/pil/avm/binary.pil @@ -13,7 +13,7 @@ namespace binary(256); pol commit acc_ib; pol commit acc_ic; - // This is the instruction tag {1,2,3,4,5} (restricted to not be a field) + // This is the instruction tag {1,2,3,4,5,6} (restricted to not be a field) // Operations over FF are not supported, it is assumed this exclusion is handled // outside of this subtrace. @@ -37,7 +37,7 @@ namespace binary(256); // To support dynamically sized memory operands we use a counter against a lookup // This decrementing counter goes from [MEM_TAG, 0] where MEM_TAG is the number of bytes in the - // corresponding integer. i.e. MEM_TAG is between 1 (U8) and 16(U128). + // corresponding integer. i.e. MEM_TAG is between 1 (U8) and 16 (U128). // Consistency can be achieved with a lookup table between the instr_tag and bytes_length pol commit mem_tag_ctr; #[MEM_TAG_REL] diff --git a/barretenberg/cpp/pil/avm/constants_gen.pil b/barretenberg/cpp/pil/avm/constants_gen.pil index c2a17b1d7ec..be8d4bfae2c 100644 --- a/barretenberg/cpp/pil/avm/constants_gen.pil +++ b/barretenberg/cpp/pil/avm/constants_gen.pil @@ -11,10 +11,18 @@ namespace constants(256); pol MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL = 16; pol MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL = 16; pol MAX_UNENCRYPTED_LOGS_PER_CALL = 4; + pol MEM_TAG_U1 = 1; + pol MEM_TAG_U8 = 2; + pol MEM_TAG_U16 = 3; + pol MEM_TAG_U32 = 4; + pol MEM_TAG_U64 = 5; + pol MEM_TAG_U128 = 6; + pol MEM_TAG_FF = 7; pol SENDER_SELECTOR = 0; pol ADDRESS_SELECTOR = 1; pol STORAGE_ADDRESS_SELECTOR = 1; pol FUNCTION_SELECTOR_SELECTOR = 2; + pol IS_STATIC_CALL_SELECTOR = 4; pol START_GLOBAL_VARIABLES = 29; pol CHAIN_ID_SELECTOR = 29; pol VERSION_SELECTOR = 30; diff --git a/barretenberg/cpp/pil/avm/fixed/byte_lookup.pil b/barretenberg/cpp/pil/avm/fixed/byte_lookup.pil index 5cd3b8f242f..9579ed1e451 100644 --- a/barretenberg/cpp/pil/avm/fixed/byte_lookup.pil +++ b/barretenberg/cpp/pil/avm/fixed/byte_lookup.pil @@ -8,6 +8,6 @@ namespace byte_lookup(256); pol constant sel_bin; // These two columns are a mapping between instruction tags and their byte lengths - // {U8: 1, U16: 2, ... , U128: 16} - pol constant table_in_tags; // Column of U8,U16,...,U128 - pol constant table_byte_lengths; // Columns of byte lengths 1,2,...,16; + // {U1: 1, U8: 1, U16: 2, ... , U128: 16} + pol constant table_in_tags; // Column of U1,U8,U16,...,U128 + pol constant table_byte_lengths; // Columns of byte lengths 1,1,2,...,16; diff --git a/barretenberg/cpp/pil/avm/gadgets/conversion.pil b/barretenberg/cpp/pil/avm/gadgets/conversion.pil index 115a0571075..5ab45ee45b1 100644 --- a/barretenberg/cpp/pil/avm/gadgets/conversion.pil +++ b/barretenberg/cpp/pil/avm/gadgets/conversion.pil @@ -17,3 +17,4 @@ namespace conversion(256); pol commit input; pol commit radix; pol commit num_limbs; + pol commit output_bits; diff --git a/barretenberg/cpp/pil/avm/gas.pil b/barretenberg/cpp/pil/avm/gas.pil index 09f9913c592..f1d275fabbd 100644 --- a/barretenberg/cpp/pil/avm/gas.pil +++ b/barretenberg/cpp/pil/avm/gas.pil @@ -54,16 +54,16 @@ namespace main(256); // Constrain that the gas decrements correctly per instruction #[L2_GAS_REMAINING_DECREMENT_NOT_CALL] - sel_execution_row * (1 - sel_op_external_call) * (l2_gas_remaining' - l2_gas_remaining + base_l2_gas_op_cost + (dyn_l2_gas_op_cost * dyn_gas_multiplier)) = 0; + sel_execution_row * (1 - sel_op_external_call - sel_op_static_call) * (l2_gas_remaining' - l2_gas_remaining + base_l2_gas_op_cost + (dyn_l2_gas_op_cost * dyn_gas_multiplier)) = 0; #[DA_GAS_REMAINING_DECREMENT_NOT_CALL] - sel_execution_row * (1 - sel_op_external_call) * (da_gas_remaining' - da_gas_remaining + base_da_gas_op_cost + (dyn_da_gas_op_cost * dyn_gas_multiplier)) = 0; + sel_execution_row * (1 - sel_op_external_call - sel_op_static_call) * (da_gas_remaining' - da_gas_remaining + base_da_gas_op_cost + (dyn_da_gas_op_cost * dyn_gas_multiplier)) = 0; // We need to special-case external calls since the gas cost format is // base_l2 + nested_call_cost + dyn_gas_cost * dyn_gas_multiplier. // TODO: Unconstrained until CALL is properly implemented. // #[L2_GAS_REMAINING_DECREMENT_CALL] - // sel_execution_row * sel_op_external_call * (l2_gas_remaining' - l2_gas_remaining + base_l2_gas_op_cost + (dyn_l2_gas_op_cost * dyn_gas_multiplier)) = 0; + // sel_execution_row * (sel_op_external_call + sel_op_static_call) * (l2_gas_remaining' - l2_gas_remaining + base_l2_gas_op_cost + (dyn_l2_gas_op_cost * dyn_gas_multiplier)) = 0; // #[DA_GAS_REMAINING_DECREMENT_CALL] - // sel_execution_row * sel_op_external_call * (da_gas_remaining' - da_gas_remaining + base_da_gas_op_cost + (dyn_da_gas_op_cost * dyn_gas_multiplier)) = 0; + // sel_execution_row * (sel_op_external_call + sel_op_static_call) * (da_gas_remaining' - da_gas_remaining + base_da_gas_op_cost + (dyn_da_gas_op_cost * dyn_gas_multiplier)) = 0; // Prove that XX_out_of_gas == 0 <==> XX_gas_remaining' >= 0 // TODO: Ensure that remaining gas values are initialized as u32 and that gas l2_gas_op_cost/da_gas_op_cost are u32. diff --git a/barretenberg/cpp/pil/avm/kernel.pil b/barretenberg/cpp/pil/avm/kernel.pil index fce9aec35be..df94d750dac 100644 --- a/barretenberg/cpp/pil/avm/kernel.pil +++ b/barretenberg/cpp/pil/avm/kernel.pil @@ -22,9 +22,9 @@ namespace main(256); pol commit sel_kernel_out; // Kernel Outputs - // + // // The current implementation of kernel outputs is described within https://hackmd.io/zP1oMXF6Rf-L-ZZLXWmfHg - + // Global side effect counter; incremented after each side effect is produced. pol commit side_effect_counter; @@ -98,6 +98,9 @@ namespace main(256); #[FEE_TRANSACTION_FEE_KERNEL] sel_op_transaction_fee * (kernel_in_offset - constants.TRANSACTION_FEE_SELECTOR) = 0; + #[IS_STATIC_CALL_KERNEL] + sel_op_is_static_call * (kernel_in_offset - constants.IS_STATIC_CALL_SELECTOR) = 0; + // CONTEXT - ENVIRONMENT - GLOBALS #[CHAIN_ID_KERNEL] sel_op_chain_id * (kernel_in_offset - constants.CHAIN_ID_SELECTOR) = 0; @@ -123,7 +126,7 @@ namespace main(256); #[NOTE_HASH_KERNEL_OUTPUT] sel_op_note_hash_exists * (kernel_out_offset - (constants.START_NOTE_HASH_EXISTS_WRITE_OFFSET + note_hash_exist_write_offset)) = 0; sel_first * note_hash_exist_write_offset = 0; - + #[EMIT_NOTE_HASH_KERNEL_OUTPUT] sel_op_emit_note_hash * (kernel_out_offset - (constants.START_EMIT_NOTE_HASH_WRITE_OFFSET + emit_note_hash_write_offset)) = 0; sel_first * emit_note_hash_write_offset = 0; @@ -168,7 +171,7 @@ namespace main(256); pol KERNEL_INPUT_SELECTORS = sel_op_address + sel_op_storage_address + sel_op_sender + sel_op_function_selector + sel_op_transaction_fee + sel_op_chain_id + sel_op_version + sel_op_block_number + sel_op_timestamp - + sel_op_fee_per_l2_gas + sel_op_fee_per_da_gas; + + sel_op_fee_per_l2_gas + sel_op_fee_per_da_gas + sel_op_is_static_call; // Ensure that only one kernel lookup is active when the kernel_in_offset is active #[KERNEL_INPUT_ACTIVE_CHECK] KERNEL_INPUT_SELECTORS * (1 - sel_q_kernel_lookup) = 0; diff --git a/barretenberg/cpp/pil/avm/main.pil b/barretenberg/cpp/pil/avm/main.pil index b4debf47049..29840e932b5 100644 --- a/barretenberg/cpp/pil/avm/main.pil +++ b/barretenberg/cpp/pil/avm/main.pil @@ -46,6 +46,7 @@ namespace main(256); pol commit sel_op_sender; pol commit sel_op_function_selector; pol commit sel_op_transaction_fee; + pol commit sel_op_is_static_call; // CONTEXT - ENVIRONMENT - GLOBALS pol commit sel_op_chain_id; @@ -87,7 +88,7 @@ namespace main(256); pol commit sel_op_ecadd; pol commit sel_op_pedersen_commit; pol commit sel_op_msm; - + //===== Memory Slice Gadget Selectors ========================================= pol commit sel_op_calldata_copy; pol commit sel_op_external_return; @@ -100,18 +101,19 @@ namespace main(256); //===== CONTROL FLOW ========================================================== // Program counter - pol commit pc; + pol commit pc; // Return Pointer pol commit internal_return_ptr; // Call Pointer (nested call) pol commit call_ptr; - + pol commit sel_op_internal_call; pol commit sel_op_internal_return; pol commit sel_op_jump; pol commit sel_op_jumpi; pol commit sel_op_external_call; - + pol commit sel_op_static_call; + // Memory Space Identifier pol commit space_id; @@ -119,7 +121,7 @@ namespace main(256); pol commit sel_op_set; pol commit sel_op_mov; pol commit sel_op_cmov; - + //===== TABLE SUBOP-TR ======================================================== // Boolean selectors for (sub-)operations. Only one operation is activated at // a time. @@ -146,7 +148,7 @@ namespace main(256); // Helper selector to characterize a Binary chiplet selector pol commit sel_bin; - // Instruction memory tags read/write (1: u8, 2: u16, 3: u32, 4: u64, 5: u128, 6: field) + // Instruction memory tags read/write (1: u1, 2: u8, 3: u16, 4: u32, 5: u64, 6: u128, 7: field) pol commit r_in_tag; pol commit w_in_tag; pol commit alu_in_tag; // Copy of r_in_tag or w_in_tag depending of the operation. It is sent to ALU trace. @@ -170,7 +172,7 @@ namespace main(256); pol commit ib; pol commit ic; pol commit id; - + // Memory operation selector per intermediate register // They signal that a memory operation is performed on the register. // This does NOT take into consideration indirections. @@ -185,7 +187,7 @@ namespace main(256); pol commit rwb; pol commit rwc; pol commit rwd; - + // Indirect register values // Cell ind_addr_x holds the indirect address to be resolved into mem_addr_ix. pol commit ind_addr_a; @@ -207,11 +209,11 @@ namespace main(256); pol commit sel_resolve_ind_addr_b; pol commit sel_resolve_ind_addr_c; pol commit sel_resolve_ind_addr_d; - + // Track the last line of the execution trace. It does NOT correspond to the last row of the whole table // of size N. As this depends on the supplied bytecode, this polynomial cannot be constant. pol commit sel_last; - + // Relations on type constraints // TODO: Very likely, we can remove these constraints as the selectors should be derived during // opcode decomposition. @@ -226,6 +228,7 @@ namespace main(256); sel_op_timestamp * (1 - sel_op_timestamp) = 0; sel_op_fee_per_l2_gas * (1 - sel_op_fee_per_l2_gas) = 0; sel_op_fee_per_da_gas * (1 - sel_op_fee_per_da_gas) = 0; + sel_op_is_static_call * (1 - sel_op_is_static_call) = 0; // MACHINE STATE - GAS sel_op_l2gasleft * (1 - sel_op_l2gasleft) = 0; @@ -273,6 +276,7 @@ namespace main(256); sel_op_jump * (1 - sel_op_jump) = 0; sel_op_jumpi * (1 - sel_op_jumpi) = 0; sel_op_external_call * (1 - sel_op_external_call) = 0; + sel_op_static_call * (1 - sel_op_static_call) = 0; sel_op_calldata_copy * (1 - sel_op_calldata_copy) = 0; sel_op_external_return * (1 - sel_op_external_return) = 0; @@ -311,17 +315,17 @@ namespace main(256); // values should be written into these memory indices. // - For indirect memory accesses, the memory trace constraints ensure that // loaded values come from memory addresses with tag u32. This is enforced in the memory trace - // where each memory entry with flag sel_resolve_ind_addr_x (for x = a,b,c,d) constrains r_int_tag == 3 (u32). + // where each memory entry with flag sel_resolve_ind_addr_x (for x = a,b,c,d) constrains r_int_tag is u32. // // - ind_addr_a, ind_addr_b, ind_addr_c, ind_addr_d to u32 type: Should be guaranteed by bytecode validation and // instruction decomposition as only immediate 32-bit values should be written into the indirect registers. // - // - 0 <= r_in_tag, w_in_tag <= 6 // This should be constrained by the operation decomposition. + // - 0 <= r_in_tag, w_in_tag <= constants.MEM_TAG_FF // This should be constrained by the operation decomposition. //====== COMPARATOR OPCODES CONSTRAINTS ===================================== - // Enforce that the tag for the ouput of EQ opcode is u8 (i.e. equal to 1). - #[OUTPUT_U8] - (sel_op_eq + sel_op_lte + sel_op_lt) * (w_in_tag - 1) = 0; + // Enforce that the tag for the ouput of EQ opcode is u1 (i.e. equal to 1). + #[OUTPUT_U1] + (sel_op_eq + sel_op_lte + sel_op_lt) * (w_in_tag - constants.MEM_TAG_U1) = 0; //====== FDIV OPCODE CONSTRAINTS ============================================ // Relation for division over the finite field @@ -340,13 +344,13 @@ namespace main(256); #[SUBOP_FDIV_ZERO_ERR2] (sel_op_fdiv + sel_op_div) * op_err * (1 - inv) = 0; - // Enforcement that instruction tags are FF (tag constant 6). + // Enforcement that instruction tags are FF // TODO: These 2 conditions might be removed and enforced through // the bytecode decomposition instead. #[SUBOP_FDIV_R_IN_TAG_FF] - sel_op_fdiv * (r_in_tag - 6) = 0; + sel_op_fdiv * (r_in_tag - constants.MEM_TAG_FF) = 0; #[SUBOP_FDIV_W_IN_TAG_FF] - sel_op_fdiv * (w_in_tag - 6) = 0; + sel_op_fdiv * (w_in_tag - constants.MEM_TAG_FF) = 0; // op_err cannot be maliciously activated for a non-relevant // operation selector, i.e., op_err == 1 ==> sel_op_fdiv || sel_op_XXX || ... @@ -364,10 +368,10 @@ namespace main(256); // For the finite field division, we could lower the degree from 4 to 3 // (sel_op_fdiv - op_fdiv_err) * (ic * ib - ia) = 0; // Same for the relations related to the error activation: - // (ib * inv - 1 + op_fdiv_err) = 0 && op_err * (1 - inv) = 0 + // (ib * inv - 1 + op_fdiv_err) = 0 && op_err * (1 - inv) = 0 // This works in combination with op_fdiv_err * (sel_op_fdiv - 1) = 0; // Drawback is the need to paralllelize the latter. - + //===== CONTROL FLOW ======================================================= // pol commit sel_halted; // sel_halted * (1 - sel_halted) = 0; @@ -384,7 +388,7 @@ namespace main(256); //===== INTERNAL_CALL ====================================================== // - The program counter in the next row should be equal to the value loaded from the ia register // - We then write the return location (pc + 1) into the call stack (in memory) - + #[RETURN_POINTER_INCREMENT] sel_op_internal_call * (internal_return_ptr' - (internal_return_ptr + 1)) = 0; sel_op_internal_call * (internal_return_ptr - mem_addr_b) = 0; @@ -394,9 +398,9 @@ namespace main(256); // TODO(md): Below relations may be removed through sub-op table lookup sel_op_internal_call * (rwb - 1) = 0; sel_op_internal_call * (sel_mem_op_b - 1) = 0; - + //===== INTERNAL_RETURN =================================================== - // - We load the memory pointer to be the internal_return_ptr + // - We load the memory pointer to be the internal_return_ptr // - Constrain then next program counter to be the loaded value // - decrement the internal_return_ptr @@ -411,7 +415,7 @@ namespace main(256); //===== CONTROL_FLOW_CONSISTENCY ============================================ pol SEL_ALL_CTRL_FLOW = sel_op_jump + sel_op_jumpi + sel_op_internal_call - + sel_op_internal_return + sel_op_external_call + sel_op_external_return; + + sel_op_internal_return + sel_op_external_call + sel_op_static_call + sel_op_external_return; pol SEL_ALU_R_TAG = sel_op_add + sel_op_sub + sel_op_mul + sel_op_div + sel_op_not + sel_op_eq + sel_op_lt + sel_op_lte + sel_op_shr + sel_op_shl; pol SEL_ALU_W_TAG = sel_op_cast; @@ -542,9 +546,9 @@ namespace main(256); binary.start {binary.clk, binary.acc_ia, binary.acc_ib, binary.acc_ic, binary.op_id, binary.in_tag}; #[PERM_MAIN_CONV] - sel_op_radix_le {clk, ia, ic, id} + sel_op_radix_le {clk, ia, ib, ic, id} is - conversion.sel_to_radix_le {conversion.clk, conversion.input, conversion.radix, conversion.num_limbs}; + conversion.sel_to_radix_le {conversion.clk, conversion.input, conversion.radix, conversion.num_limbs, conversion.output_bits}; // This will be enabled when we migrate just to sha256Compression, as getting sha256 to work with it is tricky. // #[PERM_MAIN_SHA256] diff --git a/barretenberg/cpp/pil/avm/mem.pil b/barretenberg/cpp/pil/avm/mem.pil index ff9ff2dd905..e4b07c9c0f8 100644 --- a/barretenberg/cpp/pil/avm/mem.pil +++ b/barretenberg/cpp/pil/avm/mem.pil @@ -1,4 +1,5 @@ include "main.pil"; +include "constants_gen.pil"; include "./gadgets/range_check.pil"; namespace mem(256); @@ -8,7 +9,7 @@ namespace mem(256); pol commit addr; pol commit space_id; pol commit glob_addr; - pol commit tag; // Memory tag (0: uninitialized, 1: u8, 2: u16, 3: u32, 4: u64, 5: u128, 6:field) + pol commit tag; // Memory tag (0: uninitialized, 1: u1, 2: u8, 3: u16, 4: u32, 5: u64, 6: u128, 7:field) pol commit val; pol commit rw; // Enum: 0 (read), 1 (write) pol commit lastAccess; // Boolean (1 when this row is the last of a given address) @@ -223,11 +224,11 @@ namespace mem(256); rw * tag_err = 0; //====== Indirect Memory Constraints ===================================== - // Enforce r_in_tag == 3, i.e., r_in_tag must be U32 - sel_resolve_ind_addr_a * (r_in_tag - 3) = 0; - sel_resolve_ind_addr_b * (r_in_tag - 3) = 0; - sel_resolve_ind_addr_c * (r_in_tag - 3) = 0; - sel_resolve_ind_addr_d * (r_in_tag - 3) = 0; + // Enforce r_in_tag is U32 + sel_resolve_ind_addr_a * (r_in_tag - constants.MEM_TAG_U32) = 0; + sel_resolve_ind_addr_b * (r_in_tag - constants.MEM_TAG_U32) = 0; + sel_resolve_ind_addr_c * (r_in_tag - constants.MEM_TAG_U32) = 0; + sel_resolve_ind_addr_d * (r_in_tag - constants.MEM_TAG_U32) = 0; // Indirect operation is always a load sel_resolve_ind_addr_a * rw = 0; @@ -236,19 +237,19 @@ namespace mem(256); sel_resolve_ind_addr_d * rw = 0; //====== CALLDATACOPY/RETURN specific constraints ================================== - sel_op_slice * (w_in_tag - 6) = 0; // Only write elements of type FF - sel_op_slice * (r_in_tag - 6) = 0; // Only read elements of type FF + sel_op_slice * (w_in_tag - constants.MEM_TAG_FF) = 0; // Only write elements of type FF + sel_op_slice * (r_in_tag - constants.MEM_TAG_FF) = 0; // Only read elements of type FF //====== POSEIDON2 specific constraints ================================== - sel_op_poseidon_read_a * (w_in_tag - 6) = 0; // Only read elements of type FF - sel_op_poseidon_read_b * (w_in_tag - 6) = 0; // Only read elements of type FF - sel_op_poseidon_read_c * (w_in_tag - 6) = 0; // Only read elements of type FF - sel_op_poseidon_read_d * (w_in_tag - 6) = 0; // Only read elements of type FF - - sel_op_poseidon_write_a * (r_in_tag - 6) = 0; // Only write elements of type FF - sel_op_poseidon_write_b * (r_in_tag - 6) = 0; // Only write elements of type FF - sel_op_poseidon_write_c * (r_in_tag - 6) = 0; // Only write elements of type FF - sel_op_poseidon_write_d * (r_in_tag - 6) = 0; // Only write elements of type FF + sel_op_poseidon_read_a * (w_in_tag - constants.MEM_TAG_FF) = 0; // Only read elements of type FF + sel_op_poseidon_read_b * (w_in_tag - constants.MEM_TAG_FF) = 0; // Only read elements of type FF + sel_op_poseidon_read_c * (w_in_tag - constants.MEM_TAG_FF) = 0; // Only read elements of type FF + sel_op_poseidon_read_d * (w_in_tag - constants.MEM_TAG_FF) = 0; // Only read elements of type FF + + sel_op_poseidon_write_a * (r_in_tag - constants.MEM_TAG_FF) = 0; // Only write elements of type FF + sel_op_poseidon_write_b * (r_in_tag - constants.MEM_TAG_FF) = 0; // Only write elements of type FF + sel_op_poseidon_write_c * (r_in_tag - constants.MEM_TAG_FF) = 0; // Only write elements of type FF + sel_op_poseidon_write_d * (r_in_tag - constants.MEM_TAG_FF) = 0; // Only write elements of type FF //====== MOV/CMOV Opcode Tag Constraint ===================================== // The following constraint ensures that the r_in_tag is set to tag for diff --git a/barretenberg/cpp/scripts/analyze_client_ivc_bench.py b/barretenberg/cpp/scripts/analyze_client_ivc_bench.py index 485725375bc..600854679c5 100644 --- a/barretenberg/cpp/scripts/analyze_client_ivc_bench.py +++ b/barretenberg/cpp/scripts/analyze_client_ivc_bench.py @@ -66,7 +66,7 @@ print('\nBreakdown of ProtogalaxyProver::prove:') protogalaxy_round_labels = [ - "ProtogalaxyProver_::preparation_round(t)", + "ProtogalaxyProver_::run_oink_prover_on_each_incomplete_key(t)", "ProtogalaxyProver_::perturbator_round(t)", "ProtogalaxyProver_::combiner_quotient_round(t)", "ProtogalaxyProver_::update_target_sum_and_fold(t)" diff --git a/barretenberg/cpp/scripts/analyze_protogalaxy_bench.py b/barretenberg/cpp/scripts/analyze_protogalaxy_bench.py index b5686fc351a..bb1906678eb 100755 --- a/barretenberg/cpp/scripts/analyze_protogalaxy_bench.py +++ b/barretenberg/cpp/scripts/analyze_protogalaxy_bench.py @@ -47,7 +47,7 @@ print('\nBreakdown of ProtogalaxyProver::prove:') protogalaxy_round_labels = [ - "ProtogalaxyProver_::preparation_round(t)", + "ProtogalaxyProver_::run_oink_prover_on_each_incomplete_key(t)", "ProtogalaxyProver_::perturbator_round(t)", "ProtogalaxyProver_::combiner_quotient_round(t)", "ProtogalaxyProver_::update_target_sum_and_fold(t)" diff --git a/barretenberg/cpp/scripts/benchmark_client_ivc.sh b/barretenberg/cpp/scripts/benchmark_client_ivc.sh index 0841f4429ba..baacc910ff3 100755 --- a/barretenberg/cpp/scripts/benchmark_client_ivc.sh +++ b/barretenberg/cpp/scripts/benchmark_client_ivc.sh @@ -2,16 +2,7 @@ set -eu TARGET=${1:-"client_ivc_bench"} - -if [ "$TARGET" = "client_ivc_bench" ]; then - BENCHMARK="ClientIVCBench/Full/6" -elif [ "$TARGET" = "aztec_ivc_bench" ]; then - BENCHMARK="AztecIVCBench/FullStructured/6" -else - echo "Error: Unrecognized TARGET '$TARGET'." - exit 1 -fi - +BENCHMARK="ClientIVCBench/Full/6" BUILD_DIR="build-op-count-time" FILTER="${BENCHMARK}$" # '$' to ensure only specified bench is run diff --git a/barretenberg/cpp/scripts/benchmark_tracy.sh b/barretenberg/cpp/scripts/benchmark_tracy.sh index e39f6517bbc..f9b00282f42 100644 --- a/barretenberg/cpp/scripts/benchmark_tracy.sh +++ b/barretenberg/cpp/scripts/benchmark_tracy.sh @@ -29,6 +29,7 @@ ssh $BOX " ./tracy-capture -a 127.0.0.1 -f -o trace-$BENCHMARK & ; sleep 0.1 ; cd ~/aztec-packages/barretenberg/cpp/build-$PRESET ; + ninja $BENCHMARK ; $COMMAND ; " & wait # TODO(AD) hack - not sure why needed diff --git a/barretenberg/cpp/src/CMakeLists.txt b/barretenberg/cpp/src/CMakeLists.txt index a4476f0e909..018021e33f9 100644 --- a/barretenberg/cpp/src/CMakeLists.txt +++ b/barretenberg/cpp/src/CMakeLists.txt @@ -61,10 +61,9 @@ if (ENABLE_PIC AND CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_subdirectory(barretenberg/world_state_napi) endif() -add_subdirectory(barretenberg/aztec_ivc) +add_subdirectory(barretenberg/client_ivc) add_subdirectory(barretenberg/bb) add_subdirectory(barretenberg/circuit_checker) -add_subdirectory(barretenberg/client_ivc) add_subdirectory(barretenberg/commitment_schemes) add_subdirectory(barretenberg/commitment_schemes_recursion) add_subdirectory(barretenberg/common) @@ -112,10 +111,9 @@ include(GNUInstallDirs) message(STATUS "Compiling all-in-one barretenberg archive") set(BARRETENBERG_TARGET_OBJECTS - $ + $ $ $ - $ $ $ $ diff --git a/barretenberg/cpp/src/barretenberg/aztec_ivc/CMakeLists.txt b/barretenberg/cpp/src/barretenberg/aztec_ivc/CMakeLists.txt deleted file mode 100644 index 80ffcb9aa60..00000000000 --- a/barretenberg/cpp/src/barretenberg/aztec_ivc/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -barretenberg_module(aztec_ivc stdlib_protogalaxy_verifier stdlib_goblin_verifier) \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/aztec_ivc/aztec_ivc.cpp b/barretenberg/cpp/src/barretenberg/aztec_ivc/aztec_ivc.cpp deleted file mode 100644 index d0817e8f7fe..00000000000 --- a/barretenberg/cpp/src/barretenberg/aztec_ivc/aztec_ivc.cpp +++ /dev/null @@ -1,272 +0,0 @@ -#include "barretenberg/aztec_ivc/aztec_ivc.hpp" -#include "barretenberg/ultra_honk/oink_prover.hpp" - -namespace bb { - -/** - * @brief Instantiate a stdlib verification queue for use in the kernel completion logic - * @details Construct a stdlib proof/verification_key for each entry in the native verification queue. By default, both - * are constructed from their counterpart in the native queue. Alternatively, Stdlib verification keys can be provided - * directly as input to this method. (The later option is used, for example, when constructing recursive verifiers based - * on the verification key witnesses from an acir recursion constraint. This option is not provided for proofs since - * valid proof witnesses are in general not known at the time of acir constraint generation). - * - * @param circuit - */ -void AztecIVC::instantiate_stdlib_verification_queue( - ClientCircuit& circuit, const std::vector>& input_keys) -{ - bool vkeys_provided = !input_keys.empty(); - if (vkeys_provided && verification_queue.size() != input_keys.size()) { - info("Warning: Incorrect number of verification keys provided in stdlib verification queue instantiation."); - ASSERT(false); - } - - size_t key_idx = 0; - for (auto& [proof, vkey, type] : verification_queue) { - // Construct stdlib proof directly from the internal native queue data - auto stdlib_proof = bb::convert_proof_to_witness(&circuit, proof); - - // Use the provided stdlib vkey if present, otherwise construct one from the internal native queue - auto stdlib_vkey = - vkeys_provided ? input_keys[key_idx++] : std::make_shared(&circuit, vkey); - - stdlib_verification_queue.push_back({ stdlib_proof, stdlib_vkey, type }); - } - verification_queue.clear(); // the native data is not needed beyond this point -} - -/** - * @brief Populate the provided circuit with constraints for (1) recursive verification of the provided accumulation - * proof and (2) the associated databus commitment consistency checks. - * @details The recursive verifier will be either Oink or Protogalaxy depending on the specified proof type. In either - * case, the verifier accumulator is updated in place via the verification algorithm. Databus commitment consistency - * checks are performed on the witness commitments and public inputs extracted from the proof by the verifier. - * - * @param circuit The circuit to which the constraints are appended - * @param proof A stdlib proof to be recursively verified (either oink or PG) - * @param vkey The stdlib verfication key associated with the proof - * @param type The type of the proof (equivalently, the type of the verifier) - */ -void AztecIVC::perform_recursive_verification_and_databus_consistency_checks( - ClientCircuit& circuit, - const StdlibProof& proof, - const std::shared_ptr& vkey, - const QUEUE_TYPE type) -{ - switch (type) { - case QUEUE_TYPE::PG: { - // Construct stdlib verifier accumulator from the native counterpart computed on a previous round - auto stdlib_verifier_accum = std::make_shared(&circuit, verifier_accumulator); - - // Perform folding recursive verification to update the verifier accumulator - FoldingRecursiveVerifier verifier{ &circuit, stdlib_verifier_accum, { vkey } }; - auto verifier_accum = verifier.verify_folding_proof(proof); - - // Extract native verifier accumulator from the stdlib accum for use on the next round - verifier_accumulator = std::make_shared(verifier_accum->get_value()); - - // Perform databus commitment consistency checks and propagate return data commitments via public inputs - bus_depot.execute(verifier.keys_to_fold[1]->witness_commitments, - verifier.keys_to_fold[1]->public_inputs, - verifier.keys_to_fold[1]->verification_key->databus_propagation_data); - break; - } - case QUEUE_TYPE::OINK: { - // Construct an incomplete stdlib verifier accumulator from the corresponding stdlib verification key - auto verifier_accum = std::make_shared(&circuit, vkey); - - // Perform oink recursive verification to complete the initial verifier accumulator - OinkRecursiveVerifier oink{ &circuit, verifier_accum }; - oink.verify_proof(proof); - verifier_accum->is_accumulator = true; // indicate to PG that it should not run oink - - // Extract native verifier accumulator from the stdlib accum for use on the next round - verifier_accumulator = std::make_shared(verifier_accum->get_value()); - // Initialize the gate challenges to zero for use in first round of folding - auto log_circuit_size = static_cast(verifier_accum->verification_key->log_circuit_size); - verifier_accumulator->gate_challenges = std::vector(log_circuit_size, 0); - - // Perform databus commitment consistency checks and propagate return data commitments via public inputs - bus_depot.execute(verifier_accum->witness_commitments, - verifier_accum->public_inputs, - verifier_accum->verification_key->databus_propagation_data); - - break; - } - } -} - -/** - * @brief Perform recursive merge verification for each merge proof in the queue - * - * @param circuit - */ -void AztecIVC::process_recursive_merge_verification_queue(ClientCircuit& circuit) -{ - // Recusively verify all merge proofs in queue - for (auto& proof : merge_verification_queue) { - goblin.verify_merge(circuit, proof); - } - merge_verification_queue.clear(); -} - -/** - * @brief Append logic to complete a kernel circuit - * @details A kernel circuit may contain some combination of PG recursive verification, merge recursive - * verification, and databus commitment consistency checks. This method appends this logic to a provided kernel - * circuit. - * - * @param circuit - */ -void AztecIVC::complete_kernel_circuit_logic(ClientCircuit& circuit) -{ - circuit.databus_propagation_data.is_kernel = true; - - // Instantiate stdlib verifier inputs from their native counterparts - if (stdlib_verification_queue.empty()) { - instantiate_stdlib_verification_queue(circuit); - } - - // Peform recursive verification and databus consistency checks for each entry in the verification queue - for (auto& [proof, vkey, type] : stdlib_verification_queue) { - perform_recursive_verification_and_databus_consistency_checks(circuit, proof, vkey, type); - } - stdlib_verification_queue.clear(); - - // Perform recursive merge verification for every merge proof in the queue - process_recursive_merge_verification_queue(circuit); -} - -/** - * @brief Execute prover work for accumulation - * @details Construct an proving key for the provided circuit. If this is the first step in the IVC, simply initialize - * the folding accumulator. Otherwise, execute the PG prover to fold the proving key into the accumulator and produce a - * folding proof. Also execute the merge protocol to produce a merge proof. - * - * @param circuit - * @param precomputed_vk - */ -void AztecIVC::accumulate(ClientCircuit& circuit, const std::shared_ptr& precomputed_vk) -{ - // Construct merge proof for the present circuit and add to merge verification queue - MergeProof merge_proof = goblin.prove_merge(circuit); - merge_verification_queue.emplace_back(merge_proof); - - // TODO(https://github.com/AztecProtocol/barretenberg/issues/1069): Do proper aggregation with merge recursive - // verifier. - circuit.add_recursive_proof(stdlib::recursion::init_default_agg_obj_indices(circuit)); - - // Construct the proving key for circuit - std::shared_ptr proving_key; - if (!initialized) { - proving_key = std::make_shared(circuit, trace_structure); - } else { - proving_key = std::make_shared( - circuit, trace_structure, fold_output.accumulator->proving_key.commitment_key); - } - - // Set the verification key from precomputed if available, else compute it - honk_vk = precomputed_vk ? precomputed_vk : std::make_shared(proving_key->proving_key); - - // If this is the first circuit in the IVC, use oink to complete the decider proving key and generate an oink proof - if (!initialized) { - OinkProver oink_prover{ proving_key }; - oink_prover.prove(); - proving_key->is_accumulator = true; // indicate to PG that it should not run oink on this key - // Initialize the gate challenges to zero for use in first round of folding - proving_key->gate_challenges = std::vector(proving_key->proving_key.log_circuit_size, 0); - - fold_output.accumulator = proving_key; // initialize the prover accum with the completed key - - // Add oink proof and corresponding verification key to the verification queue - verification_queue.push_back( - bb::AztecIVC::VerifierInputs{ oink_prover.transcript->proof_data, honk_vk, QUEUE_TYPE::OINK }); - - initialized = true; - } else { // Otherwise, fold the new key into the accumulator - FoldingProver folding_prover({ fold_output.accumulator, proving_key }); - fold_output = folding_prover.prove(); - - // Add fold proof and corresponding verification key to the verification queue - verification_queue.push_back(bb::AztecIVC::VerifierInputs{ fold_output.proof, honk_vk, QUEUE_TYPE::PG }); - } - - // Track the maximum size of each block for all circuits porcessed (for debugging purposes only) - max_block_size_tracker.update(circuit); -} - -/** - * @brief Construct a proof for the IVC, which, if verified, fully establishes its correctness - * - * @return Proof - */ -AztecIVC::Proof AztecIVC::prove() -{ - max_block_size_tracker.print(); // print minimum structured sizes for each block - ASSERT(verification_queue.size() == 1); // ensure only a single fold proof remains in the queue - ASSERT(merge_verification_queue.size() == 1); // ensure only a single merge proof remains in the queue - FoldProof& fold_proof = verification_queue[0].proof; - MergeProof& merge_proof = merge_verification_queue[0]; - return { fold_proof, decider_prove(), goblin.prove(merge_proof) }; -}; - -bool AztecIVC::verify(const Proof& proof, - const std::shared_ptr& accumulator, - const std::shared_ptr& final_stack_vk, - const std::shared_ptr& eccvm_vk, - const std::shared_ptr& translator_vk) -{ - // Goblin verification (merge, eccvm, translator) - GoblinVerifier goblin_verifier{ eccvm_vk, translator_vk }; - bool goblin_verified = goblin_verifier.verify(proof.goblin_proof); - - // Decider verification - AztecIVC::FoldingVerifier folding_verifier({ accumulator, final_stack_vk }); - auto verifier_accumulator = folding_verifier.verify_folding_proof(proof.folding_proof); - - AztecIVC::DeciderVerifier decider_verifier(verifier_accumulator); - bool decision = decider_verifier.verify_proof(proof.decider_proof); - return goblin_verified && decision; -} - -/** - * @brief Verify a full proof of the IVC - * - * @param proof - * @return bool - */ -bool AztecIVC::verify(const Proof& proof, const std::vector>& vk_stack) -{ - auto eccvm_vk = std::make_shared(goblin.get_eccvm_proving_key()); - auto translator_vk = std::make_shared(goblin.get_translator_proving_key()); - return verify(proof, vk_stack[0], vk_stack[1], eccvm_vk, translator_vk); -} - -/** - * @brief Internal method for constructing a decider proof - * - * @return HonkProof - */ -HonkProof AztecIVC::decider_prove() const -{ - MegaDeciderProver decider_prover(fold_output.accumulator); - return decider_prover.construct_proof(); -} - -/** - * @brief Construct and verify a proof for the IVC - * @note Use of this method only makes sense when the prover and verifier are the same entity, e.g. in - * development/testing. - * - */ -bool AztecIVC::prove_and_verify() -{ - auto proof = prove(); - - ASSERT(verification_queue.size() == 1); // ensure only a single fold proof remains in the queue - auto verifier_inst = std::make_shared(this->verification_queue[0].honk_verification_key); - return verify(proof, { this->verifier_accumulator, verifier_inst }); -} - -} // namespace bb diff --git a/barretenberg/cpp/src/barretenberg/aztec_ivc/aztec_ivc.hpp b/barretenberg/cpp/src/barretenberg/aztec_ivc/aztec_ivc.hpp deleted file mode 100644 index 29cf5f504de..00000000000 --- a/barretenberg/cpp/src/barretenberg/aztec_ivc/aztec_ivc.hpp +++ /dev/null @@ -1,145 +0,0 @@ -#pragma once - -#include "barretenberg/goblin/goblin.hpp" -#include "barretenberg/goblin/mock_circuits.hpp" -#include "barretenberg/plonk_honk_shared/arithmetization/max_block_size_tracker.hpp" -#include "barretenberg/protogalaxy/protogalaxy_prover.hpp" -#include "barretenberg/protogalaxy/protogalaxy_verifier.hpp" -#include "barretenberg/stdlib/primitives/databus/databus.hpp" -#include "barretenberg/ultra_honk/decider_keys.hpp" -#include "barretenberg/ultra_honk/decider_prover.hpp" -#include "barretenberg/ultra_honk/decider_verifier.hpp" -#include - -namespace bb { - -/** - * @brief The IVC scheme used by the aztec client for private function execution - * @details Combines Protogalaxy with Goblin to accumulate one circuit at a time with efficient EC group - * operations. It is assumed that the circuits being accumulated correspond alternatingly to an app and a kernel, as is - * the case in Aztec. Two recursive folding verifiers are appended to each kernel (except the first one) to verify the - * folding of a previous kernel and an app/function circuit. Due to this structure it is enforced that the total number - * of circuits being accumulated is even. - * - */ -class AztecIVC { - - public: - using Flavor = MegaFlavor; - using VerificationKey = Flavor::VerificationKey; - using FF = Flavor::FF; - using FoldProof = std::vector; - using MergeProof = std::vector; - using DeciderProvingKey = DeciderProvingKey_; - using DeciderVerificationKey = DeciderVerificationKey_; - using ClientCircuit = MegaCircuitBuilder; // can only be Mega - using DeciderProver = DeciderProver_; - using DeciderVerifier = DeciderVerifier_; - using DeciderProvingKeys = DeciderProvingKeys_; - using FoldingProver = ProtogalaxyProver_; - using DeciderVerificationKeys = DeciderVerificationKeys_; - using FoldingVerifier = ProtogalaxyVerifier_; - using ECCVMVerificationKey = bb::ECCVMFlavor::VerificationKey; - using TranslatorVerificationKey = bb::TranslatorFlavor::VerificationKey; - - using RecursiveFlavor = MegaRecursiveFlavor_; - using RecursiveDeciderVerificationKeys = - bb::stdlib::recursion::honk::RecursiveDeciderVerificationKeys_; - using RecursiveDeciderVerificationKey = RecursiveDeciderVerificationKeys::DeciderVK; - using RecursiveVerificationKey = RecursiveFlavor::VerificationKey; - using FoldingRecursiveVerifier = - bb::stdlib::recursion::honk::ProtogalaxyRecursiveVerifier_; - using OinkRecursiveVerifier = stdlib::recursion::honk::OinkRecursiveVerifier_; - - using DataBusDepot = stdlib::DataBusDepot; - - // A full proof for the IVC scheme - struct Proof { - FoldProof folding_proof; // final fold proof - HonkProof decider_proof; - GoblinProof goblin_proof; - - size_t size() const { return folding_proof.size() + decider_proof.size() + goblin_proof.size(); } - - MSGPACK_FIELDS(folding_proof, decider_proof, goblin_proof); - }; - - enum class QUEUE_TYPE { OINK, PG }; // for specifying type of proof in the verification queue - - // An entry in the native verification queue - struct VerifierInputs { - std::vector proof; // oink or PG - std::shared_ptr honk_verification_key; - QUEUE_TYPE type; - }; - using VerificationQueue = std::vector; - - // An entry in the stdlib verification queue - struct StdlibVerifierInputs { - StdlibProof proof; // oink or PG - std::shared_ptr honk_verification_key; - QUEUE_TYPE type; - }; - using StdlibVerificationQueue = std::vector; - - // Utility for tracking the max size of each block across the full IVC - MaxBlockSizeTracker max_block_size_tracker; - - private: - using ProverFoldOutput = FoldingResult; - - public: - GoblinProver goblin; - - ProverFoldOutput fold_output; // prover accumulator and fold proof - - std::shared_ptr verifier_accumulator; // verifier accumulator - std::shared_ptr honk_vk; // honk vk to be completed and folded into the accumulator - - // Set of tuples {proof, verification_key, type} to be recursively verified - VerificationQueue verification_queue; - // Set of tuples {stdlib_proof, stdlib_verification_key, type} corresponding to the native verification queue - StdlibVerificationQueue stdlib_verification_queue; - // Set of merge proofs to be recursively verified - std::vector merge_verification_queue; - - // Management of linking databus commitments between circuits in the IVC - DataBusDepot bus_depot; - - // A flag indicating whether or not to construct a structured trace in the DeciderProvingKey - TraceStructure trace_structure = TraceStructure::NONE; - - bool initialized = false; // Is the IVC accumulator initialized - - void instantiate_stdlib_verification_queue( - ClientCircuit& circuit, const std::vector>& input_keys = {}); - - void perform_recursive_verification_and_databus_consistency_checks( - ClientCircuit& circuit, - const StdlibProof& proof, - const std::shared_ptr& vkey, - const QUEUE_TYPE type); - - void process_recursive_merge_verification_queue(ClientCircuit& circuit); - - // Complete the logic of a kernel circuit (e.g. PG/merge recursive verification, databus consistency checks) - void complete_kernel_circuit_logic(ClientCircuit& circuit); - - // Perform prover work for accumulation (e.g. PG folding, merge proving) - void accumulate(ClientCircuit& circuit, const std::shared_ptr& precomputed_vk = nullptr); - - Proof prove(); - - static bool verify(const Proof& proof, - const std::shared_ptr& accumulator, - const std::shared_ptr& final_stack_vk, - const std::shared_ptr& eccvm_vk, - const std::shared_ptr& translator_vk); - - bool verify(const Proof& proof, const std::vector>& vk_stack); - - bool prove_and_verify(); - - HonkProof decider_prove() const; -}; -} // namespace bb \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/aztec_ivc/aztec_ivc.test.cpp b/barretenberg/cpp/src/barretenberg/aztec_ivc/aztec_ivc.test.cpp deleted file mode 100644 index a7c7ce6ed53..00000000000 --- a/barretenberg/cpp/src/barretenberg/aztec_ivc/aztec_ivc.test.cpp +++ /dev/null @@ -1,344 +0,0 @@ -#include "barretenberg/aztec_ivc/aztec_ivc.hpp" -#include "barretenberg/goblin/goblin.hpp" -#include "barretenberg/goblin/mock_circuits.hpp" -#include "barretenberg/stdlib_circuit_builders/mega_circuit_builder.hpp" -#include "barretenberg/stdlib_circuit_builders/ultra_circuit_builder.hpp" - -#include - -using namespace bb; - -class AztecIVCTests : public ::testing::Test { - protected: - static void SetUpTestSuite() - { - srs::init_crs_factory("../srs_db/ignition"); - srs::init_grumpkin_crs_factory("../srs_db/grumpkin"); - } - - using Flavor = AztecIVC::Flavor; - using FF = typename Flavor::FF; - using VerificationKey = Flavor::VerificationKey; - using Builder = AztecIVC::ClientCircuit; - using DeciderProvingKey = AztecIVC::DeciderProvingKey; - using DeciderVerificationKey = AztecIVC::DeciderVerificationKey; - using FoldProof = AztecIVC::FoldProof; - using DeciderProver = AztecIVC::DeciderProver; - using DeciderVerifier = AztecIVC::DeciderVerifier; - using DeciderProvingKeys = DeciderProvingKeys_; - using FoldingProver = ProtogalaxyProver_; - using DeciderVerificationKeys = DeciderVerificationKeys_; - using FoldingVerifier = ProtogalaxyVerifier_; - - /** - * @brief Construct mock circuit with arithmetic gates and goblin ops - * @details Defaulted to add 2^16 gates (which will bump to next power of two with the addition of dummy gates). - * The size of the baseline circuit needs to be ~2x the number of gates appended to the kernel circuits via - * recursive verifications (currently ~60k) to ensure that the circuits being folded are equal in size. (This is - * only necessary if the structured trace is not in use). - * - */ - static Builder create_mock_circuit(AztecIVC& ivc, size_t log2_num_gates = 16) - { - Builder circuit{ ivc.goblin.op_queue }; - MockCircuits::construct_arithmetic_circuit(circuit, log2_num_gates); - - // TODO(https://github.com/AztecProtocol/barretenberg/issues/911): We require goblin ops to be added to the - // function circuit because we cannot support zero commtiments. While the builder handles this at - // finalisation stage via the add_gates_to_ensure_all_polys_are_non_zero function for other MegaHonk - // circuits (where we don't explicitly need to add goblin ops), in AztecIVC merge proving happens prior to - // folding where the absense of goblin ecc ops will result in zero commitments. - MockCircuits::construct_goblin_ecc_op_circuit(circuit); - return circuit; - } - - /** - * @brief A test utility for generating alternating mock app and kernel circuits and precomputing verification keys - * - */ - class MockCircuitProducer { - using ClientCircuit = AztecIVC::ClientCircuit; - - bool is_kernel = false; - - public: - ClientCircuit create_next_circuit(AztecIVC& ivc, size_t log2_num_gates = 16) - { - ClientCircuit circuit{ ivc.goblin.op_queue }; - circuit = create_mock_circuit(ivc, log2_num_gates); // construct mock base logic - if (is_kernel) { - ivc.complete_kernel_circuit_logic(circuit); // complete with recursive verifiers etc - } - is_kernel = !is_kernel; // toggle is_kernel on/off alternatingly - - return circuit; - } - - auto precompute_verification_keys(const size_t num_circuits, - TraceStructure trace_structure, - size_t log2_num_gates = 16) - { - AztecIVC ivc; // temporary IVC instance needed to produce the complete kernel circuits - ivc.trace_structure = trace_structure; - - std::vector> vkeys; - - for (size_t idx = 0; idx < num_circuits; ++idx) { - ClientCircuit circuit = create_next_circuit(ivc, log2_num_gates); // create the next circuit - ivc.accumulate(circuit); // accumulate the circuit - vkeys.emplace_back(ivc.honk_vk); // save the VK for the circuit - } - is_kernel = false; - - return vkeys; - } - }; - - /** - * @brief Tamper with a proof by finding the first non-zero value and incrementing it by 1 - * - */ - static void tamper_with_proof(FoldProof& proof) - { - for (auto& val : proof) { - if (val > 0) { - val += 1; - break; - } - } - } -}; - -/** - * @brief A simple-as-possible test demonstrating IVC for two mock circuits - * @details When accumulating only two circuits, only a single round of folding is performed thus no recursive - * verfication occurs. - * - */ -TEST_F(AztecIVCTests, Basic) -{ - AztecIVC ivc; - - MockCircuitProducer circuit_producer; - - // Initialize the IVC with an arbitrary circuit - Builder circuit_0 = circuit_producer.create_next_circuit(ivc); - ivc.accumulate(circuit_0); - - // Create another circuit and accumulate - Builder circuit_1 = circuit_producer.create_next_circuit(ivc); - ivc.accumulate(circuit_1); - - EXPECT_TRUE(ivc.prove_and_verify()); -}; - -/** - * @brief A simple test demonstrating IVC for four mock circuits, which is slightly more than minimal. - * @details When accumulating only four circuits, we execute all the functionality of a full AztecIVC run. - * - */ -TEST_F(AztecIVCTests, BasicFour) -{ - AztecIVC ivc; - - MockCircuitProducer circuit_producer; - for (size_t idx = 0; idx < 4; ++idx) { - Builder circuit = circuit_producer.create_next_circuit(ivc); - ivc.accumulate(circuit); - } - - EXPECT_TRUE(ivc.prove_and_verify()); -}; - -/** - * @brief Check that the IVC fails if an intermediate fold proof is invalid - * @details When accumulating 4 circuits, there are 3 fold proofs to verify (the first two are recursively verfied and - * the 3rd is verified as part of the IVC proof). Check that if any of one of these proofs is invalid, the IVC will - * fail. - * - */ -TEST_F(AztecIVCTests, BadProofFailure) -{ - // Confirm that the IVC verifies if nothing is tampered with - { - AztecIVC ivc; - ivc.trace_structure = TraceStructure::SMALL_TEST; - - MockCircuitProducer circuit_producer; - - // Construct and accumulate a set of mocked private function execution circuits - size_t NUM_CIRCUITS = 4; - for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) { - auto circuit = circuit_producer.create_next_circuit(ivc, /*log2_num_gates=*/5); - ivc.accumulate(circuit); - } - EXPECT_TRUE(ivc.prove_and_verify()); - } - - // The IVC throws an exception if the FIRST fold proof is tampered with - { - AztecIVC ivc; - ivc.trace_structure = TraceStructure::SMALL_TEST; - - MockCircuitProducer circuit_producer; - - // Construct and accumulate a set of mocked private function execution circuits - size_t NUM_CIRCUITS = 4; - for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) { - if (idx == 3) { // At idx = 3, we've tampered with the one of the folding proofs so create the recursive - // folding verifier will throw an error. - EXPECT_ANY_THROW(circuit_producer.create_next_circuit(ivc, /*log2_num_gates=*/5)); - break; - } - auto circuit = circuit_producer.create_next_circuit(ivc, /*log2_num_gates=*/5); - ivc.accumulate(circuit); - - if (idx == 2) { - EXPECT_EQ(ivc.verification_queue.size(), 2); // two proofs after 3 calls to accumulation - tamper_with_proof(ivc.verification_queue[0].proof); // tamper with first proof - } - } - } - - // The IVC fails if the SECOND fold proof is tampered with - { - AztecIVC ivc; - ivc.trace_structure = TraceStructure::SMALL_TEST; - - MockCircuitProducer circuit_producer; - - // Construct and accumulate a set of mocked private function execution circuits - size_t NUM_CIRCUITS = 4; - for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) { - if (idx == 3) { // At idx = 3, we've tampered with the one of the folding proofs so create the recursive - // folding verifier will throw an error. - EXPECT_ANY_THROW(circuit_producer.create_next_circuit(ivc, /*log2_num_gates=*/5)); - break; - } - auto circuit = circuit_producer.create_next_circuit(ivc, /*log2_num_gates=*/5); - ivc.accumulate(circuit); - - if (idx == 2) { - EXPECT_EQ(ivc.verification_queue.size(), 2); // two proofs after 3 calls to accumulation - tamper_with_proof(ivc.verification_queue[1].proof); // tamper with second proof - } - } - } - - // The IVC fails if the 3rd/FINAL fold proof is tampered with - { - AztecIVC ivc; - ivc.trace_structure = TraceStructure::SMALL_TEST; - - MockCircuitProducer circuit_producer; - - // Construct and accumulate a set of mocked private function execution circuits - size_t NUM_CIRCUITS = 4; - for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) { - auto circuit = circuit_producer.create_next_circuit(ivc, /*log2_num_gates=*/5); - ivc.accumulate(circuit); - } - - // Only a single proof should be present in the queue when verification of the IVC is performed - EXPECT_EQ(ivc.verification_queue.size(), 1); - tamper_with_proof(ivc.verification_queue[0].proof); // tamper with the final fold proof - - EXPECT_ANY_THROW(ivc.prove_and_verify()); - } - - EXPECT_TRUE(true); -}; - -/** - * @brief Prove and verify accumulation of an arbitrary set of circuits - * - */ -TEST_F(AztecIVCTests, BasicLarge) -{ - AztecIVC ivc; - - MockCircuitProducer circuit_producer; - - // Construct and accumulate a set of mocked private function execution circuits - size_t NUM_CIRCUITS = 6; - std::vector circuits; - for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) { - auto circuit = circuit_producer.create_next_circuit(ivc); - ivc.accumulate(circuit); - } - - EXPECT_TRUE(ivc.prove_and_verify()); -}; - -/** - * @brief Using a structured trace allows for the accumulation of circuits of varying size - * - */ -TEST_F(AztecIVCTests, BasicStructured) -{ - AztecIVC ivc; - ivc.trace_structure = TraceStructure::SMALL_TEST; - - MockCircuitProducer circuit_producer; - - size_t NUM_CIRCUITS = 4; - - // Construct and accumulate some circuits of varying size - size_t log2_num_gates = 5; - for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) { - auto circuit = circuit_producer.create_next_circuit(ivc, log2_num_gates); - ivc.accumulate(circuit); - log2_num_gates += 2; - } - - EXPECT_TRUE(ivc.prove_and_verify()); -}; - -/** - * @brief Prove and verify accumulation of an arbitrary set of circuits using precomputed verification keys - * - */ -TEST_F(AztecIVCTests, PrecomputedVerificationKeys) -{ - AztecIVC ivc; - - size_t NUM_CIRCUITS = 4; - - MockCircuitProducer circuit_producer; - - auto precomputed_vks = circuit_producer.precompute_verification_keys(NUM_CIRCUITS, TraceStructure::NONE); - - // Construct and accumulate set of circuits using the precomputed vkeys - for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) { - auto circuit = circuit_producer.create_next_circuit(ivc); - ivc.accumulate(circuit, precomputed_vks[idx]); - } - - EXPECT_TRUE(ivc.prove_and_verify()); -}; - -/** - * @brief Perform accumulation with a structured trace and precomputed verification keys - * - */ -TEST_F(AztecIVCTests, StructuredPrecomputedVKs) -{ - AztecIVC ivc; - ivc.trace_structure = TraceStructure::SMALL_TEST; - - size_t NUM_CIRCUITS = 4; - size_t log2_num_gates = 5; // number of gates in baseline mocked circuit - - MockCircuitProducer circuit_producer; - - auto precomputed_vks = - circuit_producer.precompute_verification_keys(NUM_CIRCUITS, ivc.trace_structure, log2_num_gates); - - // Construct and accumulate set of circuits using the precomputed vkeys - for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) { - auto circuit = circuit_producer.create_next_circuit(ivc, log2_num_gates); - ivc.accumulate(circuit, precomputed_vks[idx]); - } - - EXPECT_TRUE(ivc.prove_and_verify()); -}; diff --git a/barretenberg/cpp/src/barretenberg/bb/main.cpp b/barretenberg/cpp/src/barretenberg/bb/main.cpp index cf5e1abaf7f..cadf836cc53 100644 --- a/barretenberg/cpp/src/barretenberg/bb/main.cpp +++ b/barretenberg/cpp/src/barretenberg/bb/main.cpp @@ -2,9 +2,12 @@ #include "barretenberg/client_ivc/client_ivc.hpp" #include "barretenberg/common/map.hpp" #include "barretenberg/common/serialize.hpp" +#include "barretenberg/constants.hpp" #include "barretenberg/dsl/acir_format/acir_format.hpp" +#include "barretenberg/dsl/acir_format/proof_surgeon.hpp" #include "barretenberg/dsl/acir_proofs/honk_contract.hpp" #include "barretenberg/honk/proof_system/types/proof.hpp" +#include "barretenberg/numeric/bitop/get_msb.hpp" #include "barretenberg/plonk/proof_system/proving_key/serialize.hpp" #include "barretenberg/plonk_honk_shared/types/aggregation_object_type.hpp" #include "barretenberg/serialize/cbind.hpp" @@ -14,8 +17,10 @@ #include #ifndef DISABLE_AZTEC_VM +#include "barretenberg/vm/avm/generated/flavor.hpp" #include "barretenberg/vm/avm/trace/common.hpp" #include "barretenberg/vm/avm/trace/execution.hpp" +#include "barretenberg/vm/aztec_constants.hpp" #include "barretenberg/vm/stats.hpp" #endif #include "config.hpp" @@ -129,6 +134,7 @@ std::string vk_to_json(std::vector const& data) return format("[", join(map(rotated, [](auto fr) { return format("\"", fr, "\""); })), "]"); } +// WORKTODO: delete? std::string honk_vk_to_json(std::vector& data) { return format("[", join(map(data, [](auto fr) { return format("\"", fr, "\""); })), "]"); @@ -334,40 +340,39 @@ void client_ivc_prove_output_all_msgpack(const std::string& bytecodePath, using Program = acir_format::AcirProgram; using ECCVMVK = ECCVMFlavor::VerificationKey; using TranslatorVK = TranslatorFlavor::VerificationKey; + using DeciderVerificationKey = ClientIVC::DeciderVerificationKey; + + using namespace acir_format; init_bn254_crs(1 << 24); init_grumpkin_crs(1 << 15); - auto gzippedBincodes = unpack_from_file>(bytecodePath); - auto witnessMaps = unpack_from_file>(witnessPath); + auto gzipped_bincodes = unpack_from_file>(bytecodePath); + auto witness_data = unpack_from_file>(witnessPath); std::vector folding_stack; - for (size_t i = 0; i < gzippedBincodes.size(); i++) { + for (auto [bincode, wit] : zip_view(gzipped_bincodes, witness_data)) { // TODO(#7371) there is a lot of copying going on in bincode, we should make sure this writes as a buffer in // the future - std::vector buffer = - decompressedBuffer(reinterpret_cast(&gzippedBincodes[i][0]), gzippedBincodes[i].size()); // NOLINT - - std::vector constraint_systems = acir_format::program_buf_to_acir_format( - buffer, - false); // TODO(https://github.com/AztecProtocol/barretenberg/issues/1013): - // this assumes that folding is never done with ultrahonk. - std::vector witnessBuffer = - decompressedBuffer(reinterpret_cast(&witnessMaps[i][0]), witnessMaps[i].size()); // NOLINT - acir_format::WitnessVectorStack witness_stack = acir_format::witness_buf_to_witness_stack(witnessBuffer); - acir_format::AcirProgramStack program_stack{ constraint_systems, witness_stack }; - folding_stack.push_back(program_stack.back()); + std::vector constraint_buf = + decompressedBuffer(reinterpret_cast(bincode.data()), bincode.size()); // NOLINT + std::vector witness_buf = + decompressedBuffer(reinterpret_cast(wit.data()), wit.size()); // NOLINT + + AcirFormat constraints = circuit_buf_to_acir_format(constraint_buf, /*honk_recursion=*/false); + WitnessVector witness = witness_buf_to_witness_data(witness_buf); + + folding_stack.push_back(Program{ constraints, witness }); } // TODO(#7371) dedupe this with the rest of the similar code + // TODO(https://github.com/AztecProtocol/barretenberg/issues/1101): remove use of auto_verify_mode ClientIVC ivc; + ivc.auto_verify_mode = true; ivc.trace_structure = TraceStructure::E2E_FULL_TEST; // Accumulate the entire program stack into the IVC for (Program& program : folding_stack) { - // auto& stack_item = program_stack.witness_stack[i]; - - // Construct a bberg circuit from the acir representation - auto circuit = - acir_format::create_circuit(program.constraints, 0, program.witness, false, ivc.goblin.op_queue); + // Construct a bberg circuit from the acir representation then accumulate it into the IVC + auto circuit = create_circuit(program.constraints, 0, program.witness, false, ivc.goblin.op_queue); ivc.accumulate(circuit); } @@ -383,12 +388,12 @@ void client_ivc_prove_output_all_msgpack(const std::string& bytecodePath, auto eccvm_vk = std::make_shared(ivc.goblin.get_eccvm_proving_key()); auto translator_vk = std::make_shared(ivc.goblin.get_translator_proving_key()); - auto last_vk = std::make_shared(ivc.decider_vk); + auto last_vk = std::make_shared(ivc.honk_vk); vinfo("ensure valid proof: ", ivc.verify(proof, { ivc.verifier_accumulator, last_vk })); vinfo("write proof and vk data to files.."); write_file(proofPath, to_buffer(proof)); - write_file(vkPath, to_buffer(ivc.decider_vk)); + write_file(vkPath, to_buffer(ivc.honk_vk)); write_file(accPath, to_buffer(ivc.verifier_accumulator)); write_file(translatorVkPath, to_buffer(translator_vk)); write_file(eccVkPath, to_buffer(eccvm_vk)); @@ -445,6 +450,7 @@ bool foldAndVerifyProgram(const std::string& bytecodePath, const std::string& wi init_grumpkin_crs(1 << 16); ClientIVC ivc; + ivc.auto_verify_mode = true; ivc.trace_structure = TraceStructure::SMALL_TEST; auto program_stack = acir_format::get_acir_program_stack( @@ -482,11 +488,14 @@ void client_ivc_prove_output_all(const std::string& bytecodePath, using Builder = Flavor::CircuitBuilder; using ECCVMVK = ECCVMFlavor::VerificationKey; using TranslatorVK = TranslatorFlavor::VerificationKey; + using DeciderVK = ClientIVC::DeciderVerificationKey; init_bn254_crs(1 << 22); init_grumpkin_crs(1 << 16); + // TODO(https://github.com/AztecProtocol/barretenberg/issues/1101): remove use of auto_verify_mode ClientIVC ivc; + ivc.auto_verify_mode = true; ivc.trace_structure = TraceStructure::E2E_FULL_TEST; auto program_stack = acir_format::get_acir_program_stack( @@ -518,12 +527,12 @@ void client_ivc_prove_output_all(const std::string& bytecodePath, auto eccvm_vk = std::make_shared(ivc.goblin.get_eccvm_proving_key()); auto translator_vk = std::make_shared(ivc.goblin.get_translator_proving_key()); - auto last_vk = std::make_shared(ivc.decider_vk); + auto last_vk = std::make_shared(ivc.honk_vk); vinfo("ensure valid proof: ", ivc.verify(proof, { ivc.verifier_accumulator, last_vk })); vinfo("write proof and vk data to files.."); write_file(proofPath, to_buffer(proof)); - write_file(vkPath, to_buffer(ivc.decider_vk)); // maybe dereference + write_file(vkPath, to_buffer(ivc.honk_vk)); // maybe dereference write_file(accPath, to_buffer(ivc.verifier_accumulator)); write_file(translatorVkPath, to_buffer(translator_vk)); write_file(eccVkPath, to_buffer(eccvm_vk)); @@ -580,10 +589,12 @@ void prove_tube(const std::string& output_path) // TODO(https://github.com/AztecProtocol/barretenberg/issues/1048): INSECURE - make this tube proof actually use // these public inputs by turning proof into witnesses and call // set_public on each witness - auto num_public_inputs = static_cast(static_cast(proof.folding_proof[1])); - for (size_t i = 0; i < num_public_inputs - bb::AGGREGATION_OBJECT_SIZE; i++) { - // We offset 3 - builder->add_public_variable(proof.folding_proof[i + 3]); + auto num_public_inputs = static_cast(static_cast(proof.folding_proof[1])); + num_public_inputs -= bb::AGGREGATION_OBJECT_SIZE; // don't add the agg object + num_public_inputs -= 2 * 8; // don't add the databus return data commitments (2x) + for (size_t i = 0; i < num_public_inputs; i++) { + auto offset = acir_format::HONK_RECURSION_PUBLIC_INPUT_OFFSET; + builder->add_public_variable(proof.folding_proof[i + offset]); } ClientIVC verifier{ builder, input }; @@ -959,8 +970,8 @@ void avm_prove(const std::filesystem::path& bytecode_path, std::vector vk_as_fields = verification_key.to_field_elements(); vinfo("vk fields size: ", vk_as_fields.size()); - vinfo("circuit size: ", vk_as_fields[0]); - vinfo("num of pub inputs: ", vk_as_fields[1]); + vinfo("circuit size: ", static_cast(vk_as_fields[0])); + vinfo("num of pub inputs: ", static_cast(vk_as_fields[1])); std::string vk_json = to_json(vk_as_fields); const auto proof_path = output_path / "proof"; @@ -1009,18 +1020,22 @@ bool avm_verify(const std::filesystem::path& proof_path, const std::filesystem:: std::span vk_span(vk_as_fields); vinfo("vk fields size: ", vk_as_fields.size()); - vinfo("circuit size: ", circuit_size); + vinfo("circuit size: ", circuit_size, " (next or eq power: 2^", numeric::round_up_power_2(circuit_size), ")"); vinfo("num of pub inputs: ", num_public_inputs); - // Each commitment (precomputed entity) is represented as 2 Fq field elements. - // Each Fq element is split into two limbs of Fr elements. - // We therefore need 2 (circuit_size, num_public_inputs) + 4 * NUM_PRECOMPUTED_ENTITIES fr elements. - ASSERT(vk_as_fields.size() == 4 * AvmFlavor::NUM_PRECOMPUTED_ENTITIES + 2); + if (vk_as_fields.size() != AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS) { + info("The supplied avm vk has incorrect size. Number of fields: ", + vk_as_fields.size(), + " but expected: ", + AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS); + return false; + } std::array precomputed_cmts; for (size_t i = 0; i < AvmFlavor::NUM_PRECOMPUTED_ENTITIES; i++) { - // Start at offset 2 and adds 4 fr elements per commitment. Therefore, index = 4 * i + 2. - precomputed_cmts[i] = field_conversion::convert_from_bn254_frs(vk_span.subspan(4 * i + 2, 4)); + // Start at offset 2 and adds 4 (NUM_FRS_COM) fr elements per commitment. Therefore, index = 4 * i + 2. + precomputed_cmts[i] = field_conversion::convert_from_bn254_frs( + vk_span.subspan(AvmFlavor::NUM_FRS_COM * i + 2, AvmFlavor::NUM_FRS_COM)); } auto vk = AvmFlavor::VerificationKey(circuit_size, num_public_inputs, precomputed_cmts); @@ -1061,8 +1076,7 @@ UltraProver_ compute_valid_prover(const std::string& bytecodePath, const size_t srs_size = builder.get_circuit_subgroup_size(builder.get_total_circuit_size() + num_extra_gates); init_bn254_crs(srs_size); - Prover prover{ builder }; - return prover; + return Prover{ builder }; } /** @@ -1085,6 +1099,13 @@ void prove_honk(const std::string& bytecodePath, const std::string& witnessPath, // Construct Honk proof Prover prover = compute_valid_prover(bytecodePath, witnessPath); auto proof = prover.construct_proof(); + // TODO(https://github.com/AztecProtocol/barretenberg/issues/1093): As the Smart contract doesn't verify the PCS and + // Shplemini is not constant size, we slice the proof up to sumcheck so calculation of public inputs is correct. + // This hack will be subsequently removed. + if constexpr (std::same_as) { + auto num_public_inputs = static_cast(prover.proving_key->proving_key.num_public_inputs); + proof.erase(proof.begin() + num_public_inputs + 303, proof.end()); + } if (outputPath == "-") { writeRawBytesToStdout(to_buffer(proof)); vinfo("proof written to stdout"); @@ -1141,13 +1162,11 @@ template bool verify_honk(const std::string& proof_path, template void write_vk_honk(const std::string& bytecodePath, const std::string& outputPath) { using Prover = UltraProver_; - using DeciderProvingKey = DeciderProvingKey_; using VerificationKey = Flavor::VerificationKey; + // Construct a verification key from a partial form of the proving key which only has precomputed entities Prover prover = compute_valid_prover(bytecodePath, ""); - DeciderProvingKey& prover_inst = *prover.proving_key; - VerificationKey vk( - prover_inst.proving_key); // uses a partial form of the proving key which only has precomputed entities + VerificationKey vk(prover.proving_key->proving_key); auto serialized_vk = to_buffer(vk); if (outputPath == "-") { @@ -1159,6 +1178,46 @@ template void write_vk_honk(const std::string& bytecodePa } } +/** + * @brief Write a toml file containing recursive verifier inputs for a given program + witness + * + * @tparam Flavor + * @param bytecodePath Path to the file containing the serialized circuit + * @param witnessPath Path to the file containing the serialized witness + * @param outputPath Path to write toml file + */ +template +void write_recursion_inputs_honk(const std::string& bytecodePath, + const std::string& witnessPath, + const std::string& outputPath) +{ + using Builder = Flavor::CircuitBuilder; + using Prover = UltraProver_; + using VerificationKey = Flavor::VerificationKey; + using FF = Flavor::FF; + + bool honk_recursion = true; + auto constraints = get_constraint_system(bytecodePath, /*honk_recursion=*/true); + auto witness = get_witness(witnessPath); + auto builder = acir_format::create_circuit(constraints, 0, witness, honk_recursion); + + auto num_extra_gates = builder.get_num_gates_added_to_ensure_nonzero_polynomials(); + size_t srs_size = builder.get_circuit_subgroup_size(builder.get_total_circuit_size() + num_extra_gates); + init_bn254_crs(srs_size); + + // Construct Honk proof and verification key + Prover prover{ builder }; + std::vector proof = prover.construct_proof(); + VerificationKey verification_key(prover.proving_key->proving_key); + + // Construct a string with the content of the toml file (vk hash, proof, public inputs, vk) + std::string toml_content = acir_format::ProofSurgeon::construct_recursion_inputs_toml_data(proof, verification_key); + + // Write all components to the TOML file + std::string toml_path = outputPath + "/Prover.toml"; + write_file(toml_path, { toml_content.begin(), toml_content.end() }); +} + /** * @brief Outputs proof as vector of field elements in readable format. * @@ -1456,6 +1515,9 @@ int main(int argc, char* argv[]) } else if (command == "vk_as_fields") { std::string output_path = get_option(args, "-o", vk_path + "_fields.json"); vk_as_fields(vk_path, output_path); + } else if (command == "write_recursion_inputs_honk") { + std::string output_path = get_option(args, "-o", "./target"); + write_recursion_inputs_honk(bytecode_path, witness_path, output_path); #ifndef DISABLE_AZTEC_VM } else if (command == "avm_prove") { std::filesystem::path avm_bytecode_path = get_option(args, "--avm-bytecode", "./target/avm_bytecode.bin"); diff --git a/barretenberg/cpp/src/barretenberg/bb/readme.md b/barretenberg/cpp/src/barretenberg/bb/readme.md index ede853e8239..028e52ed4c1 100644 --- a/barretenberg/cpp/src/barretenberg/bb/readme.md +++ b/barretenberg/cpp/src/barretenberg/bb/readme.md @@ -27,10 +27,10 @@ This binary will take as input ACIR and witness values described in the IR to cr source ~/.bashrc ``` -3. Install the version of `bb` compatible with your Noir version; with Noir v0.32.0 for example: +3. Install the version of `bb` compatible with your Noir version; with **Noir v0.34.0** for example: ```bash - bbup -v 0.46.1 + bbup -v 0.55.0 ``` Check the version compatibility section below for how to identify matching versions. @@ -52,6 +52,8 @@ Certain `bb` commands will expect the tool `jq` to already be installed. If `jq TODO: https://github.com/AztecProtocol/aztec-packages/issues/7511 For quick reference: +- Noir v0.34.0 <> BB v0.55.0 +- Noir v0.33.0 <> BB v0.47.1 - Noir v0.32.0 <> BB v0.46.1 - Noir v0.31.0 <> BB v0.41.0 @@ -59,13 +61,80 @@ For quick reference: TODO: https://github.com/AztecProtocol/aztec-packages/issues/7600 -Full list of available commands: -https://github.com/AztecProtocol/aztec-packages/blob/1a97698071a667cd56510c7b7201373a9ac9c646/barretenberg/cpp/src/barretenberg/bb/main.cpp#L1361-L1493 +All available `bb` commands: +https://github.com/AztecProtocol/aztec-packages/blob/barretenberg-v0.55.0/barretenberg/cpp/src/barretenberg/bb/main.cpp#L1369-L1512 #### FilePath vs Stdout For commands which allow you to send the output to a file using `-o {filePath}`, there is also the option to send the output to stdout by using `-o -`. +#### Usage with UltraHonk + +Documented with Noir v0.33.0 <> BB v0.47.1: + +##### Proving and verifying + +1. Follow [the Noir docs](https://noir-lang.org/docs/getting_started/hello_noir/) to compile and generate witness of your Noir program + +2. Prove the valid execution of your Noir program running: + + ```bash + bb prove_ultra_honk -b ./target/hello_world.json -w ./target/witness-name.gz -o ./target/proof + ``` + +3. Compute the verification key for your Noir program running: + + ```bash + bb write_vk_ultra_honk -b ./target/hello_world.json -o ./target/vk + ``` + +4. Verify your proof running: + + ```bash + bb verify_ultra_honk -k ./target/vk -p ./target/proof + ``` + + If successful, the verification will complete in silence; if unsuccessful, the command will trigger logging of the corresponding error. + +Refer to all available `bb` commands linked above for full list of functionality. + +##### Generating proofs for verifying in Solidity + +Barretenberg UltraHonk comes with the capability to verify proofs in Solidity, i.e. in smart contracts on EVM chains. + +1. Follow [the Noir docs](https://noir-lang.org/docs/getting_started/hello_noir/) to compile and generate witness of your Noir program + +2. Prove the valid execution of your Noir program running: + + ```bash + bb prove_keccak_ultra_honk -b ./target/hello_world.json -w ./target/witness-name.gz -o ./target/proof + ``` + + > **Note:** `prove_keccak_ultra_honk` is used to generate UltraHonk proofs with Keccak hashes, as it is what the Solidity verifier is designed to be compatible with given the better gas efficiency when verifying on-chain; `prove_ultra_honk` in comparison generates proofs with Poseidon hashes, more efficient in recursions but not on-chain verifications. + +3. Compute the verification key for your Noir program running: + + ```bash + bb write_vk_ultra_honk -b ./target/hello_world.json -o ./target/vk + ``` + +4. Generate Solidity verifier + **WARNING:** Contract incomplete, do not use in production! + + ```bash + bb contract_ultra_honk -k ./target/vk -c $CRS_PATH -b ./target/hello_world.json -o ./target/Verifier.sol + ``` + +#### Usage with MegaHonk + +Use `bb _mega_honk`. + +Refer to all available `bb` commands linked above for full list of functionality. + +Note that MegaHonk: +- Generates insecure recursion circuits when Goblin recursive verifiers are not present +- Will not have a Solidity verifier, as the proving system is intended for use with apps deploying on Aztec only + ### Maximum circuit size Currently the binary downloads an SRS that can be used to prove the maximum circuit size. This maximum circuit size parameter is a constant in the code and has been set to $2^{23}$ as of writing. This maximum circuit size differs from the maximum circuit size that one can prove in the browser, due to WASM limits. diff --git a/barretenberg/cpp/src/barretenberg/benchmark/CMakeLists.txt b/barretenberg/cpp/src/barretenberg/benchmark/CMakeLists.txt index ab990b18d9f..e76758ca571 100644 --- a/barretenberg/cpp/src/barretenberg/benchmark/CMakeLists.txt +++ b/barretenberg/cpp/src/barretenberg/benchmark/CMakeLists.txt @@ -2,7 +2,6 @@ add_subdirectory(basics_bench) add_subdirectory(decrypt_bench) add_subdirectory(goblin_bench) add_subdirectory(ipa_bench) -add_subdirectory(aztec_ivc_bench) add_subdirectory(client_ivc_bench) add_subdirectory(pippenger_bench) add_subdirectory(plonk_bench) diff --git a/barretenberg/cpp/src/barretenberg/benchmark/aztec_ivc_bench/CMakeLists.txt b/barretenberg/cpp/src/barretenberg/benchmark/aztec_ivc_bench/CMakeLists.txt deleted file mode 100644 index 60ca548a375..00000000000 --- a/barretenberg/cpp/src/barretenberg/benchmark/aztec_ivc_bench/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -barretenberg_module(aztec_ivc_bench aztec_ivc stdlib_honk_verifier stdlib_sha256 crypto_merkle_tree stdlib_primitives) diff --git a/barretenberg/cpp/src/barretenberg/benchmark/aztec_ivc_bench/aztec_ivc.bench.cpp b/barretenberg/cpp/src/barretenberg/benchmark/aztec_ivc_bench/aztec_ivc.bench.cpp deleted file mode 100644 index e16664c432f..00000000000 --- a/barretenberg/cpp/src/barretenberg/benchmark/aztec_ivc_bench/aztec_ivc.bench.cpp +++ /dev/null @@ -1,110 +0,0 @@ - -#include - -#include "barretenberg/aztec_ivc/aztec_ivc.hpp" -#include "barretenberg/aztec_ivc/mock_circuit_producer.hpp" -#include "barretenberg/common/op_count.hpp" -#include "barretenberg/common/op_count_google_bench.hpp" -#include "barretenberg/goblin/mock_circuits.hpp" -#include "barretenberg/stdlib_circuit_builders/ultra_circuit_builder.hpp" -#include "barretenberg/ultra_honk/ultra_verifier.hpp" - -using namespace benchmark; -using namespace bb; - -namespace { - -/** - * @brief Benchmark suite for the aztec client PG-Goblin IVC scheme - * - */ -class AztecIVCBench : public benchmark::Fixture { - public: - using Builder = MegaCircuitBuilder; - using DeciderVerificationKey = DeciderVerificationKey_; - using Proof = AztecIVC::Proof; - using MockCircuitProducer = PrivateFunctionExecutionMockCircuitProducer; - - // Number of function circuits to accumulate(based on Zacs target numbers) - static constexpr size_t NUM_ITERATIONS_MEDIUM_COMPLEXITY = 6; - - void SetUp([[maybe_unused]] const ::benchmark::State& state) override - { - bb::srs::init_crs_factory("../srs_db/ignition"); - bb::srs::init_grumpkin_crs_factory("../srs_db/grumpkin"); - } - - /** - * @brief Verify an IVC proof - * - */ - static bool verify_ivc(Proof& proof, AztecIVC& ivc) - { - auto verifier_inst = std::make_shared(ivc.verification_queue[0].honk_verification_key); - bool verified = ivc.verify(proof, { ivc.verifier_accumulator, verifier_inst }); - - // This is a benchmark, not a test, so just print success or failure to the log - if (verified) { - info("IVC successfully verified!"); - } else { - info("IVC failed to verify."); - } - return verified; - } - - /** - * @brief Perform a specified number of circuit accumulation rounds - * - * @param NUM_CIRCUITS Number of circuits to accumulate (apps + kernels) - */ - static void perform_ivc_accumulation_rounds(size_t NUM_CIRCUITS, AztecIVC& ivc, auto& precomputed_vks) - { - ASSERT(precomputed_vks.size() == NUM_CIRCUITS); // ensure presence of a precomputed VK for each circuit - - MockCircuitProducer circuit_producer; - - for (size_t circuit_idx = 0; circuit_idx < NUM_CIRCUITS; ++circuit_idx) { - Builder circuit; - { - BB_OP_COUNT_TIME_NAME("construct_circuits"); - circuit = circuit_producer.create_next_circuit(ivc); - } - - ivc.accumulate(circuit, precomputed_vks[circuit_idx]); - } - } -}; - -/** - * @brief Benchmark the prover work for the full PG-Goblin IVC protocol - * - */ -BENCHMARK_DEFINE_F(AztecIVCBench, FullStructured)(benchmark::State& state) -{ - AztecIVC ivc; - ivc.trace_structure = TraceStructure::AZTEC_IVC_BENCH; - - auto total_num_circuits = 2 * static_cast(state.range(0)); // 2x accounts for kernel circuits - - // Precompute the verification keys for the benchmark circuits - MockCircuitProducer circuit_producer; - auto precomputed_vkeys = circuit_producer.precompute_verification_keys(total_num_circuits, ivc.trace_structure); - - Proof proof; - for (auto _ : state) { - BB_REPORT_OP_COUNT_IN_BENCH(state); - perform_ivc_accumulation_rounds(total_num_circuits, ivc, precomputed_vkeys); - proof = ivc.prove(); - } - - // For good measure, ensure the IVC verifies - verify_ivc(proof, ivc); -} - -#define ARGS Arg(AztecIVCBench::NUM_ITERATIONS_MEDIUM_COMPLEXITY) - -BENCHMARK_REGISTER_F(AztecIVCBench, FullStructured)->Unit(benchmark::kMillisecond)->ARGS; - -} // namespace - -BENCHMARK_MAIN(); diff --git a/barretenberg/cpp/src/barretenberg/benchmark/client_ivc_bench/client_ivc.bench.cpp b/barretenberg/cpp/src/barretenberg/benchmark/client_ivc_bench/client_ivc.bench.cpp index 00eb07d7549..e891e9e23ce 100644 --- a/barretenberg/cpp/src/barretenberg/benchmark/client_ivc_bench/client_ivc.bench.cpp +++ b/barretenberg/cpp/src/barretenberg/benchmark/client_ivc_bench/client_ivc.bench.cpp @@ -2,6 +2,7 @@ #include #include "barretenberg/client_ivc/client_ivc.hpp" +#include "barretenberg/client_ivc/mock_circuit_producer.hpp" #include "barretenberg/common/op_count.hpp" #include "barretenberg/common/op_count_google_bench.hpp" #include "barretenberg/goblin/mock_circuits.hpp" @@ -20,6 +21,9 @@ namespace { class ClientIVCBench : public benchmark::Fixture { public: using Builder = MegaCircuitBuilder; + using DeciderVerificationKey = DeciderVerificationKey_; + using Proof = ClientIVC::Proof; + using MockCircuitProducer = PrivateFunctionExecutionMockCircuitProducer; // Number of function circuits to accumulate(based on Zacs target numbers) static constexpr size_t NUM_ITERATIONS_MEDIUM_COMPLEXITY = 6; @@ -31,116 +35,43 @@ class ClientIVCBench : public benchmark::Fixture { } /** - * @brief Compute verification key for each circuit in the IVC based on the number of desired function circuits - * @details Assumes the following circuit ordering: one initial function circuit followed by pairs of {function, - * kernel} until the desired number of function circuits has been reached. + * @brief Verify an IVC proof * - * @param ivc - * @param num_function_circuits */ - static auto precompute_verification_keys(ClientIVC& ivc, const size_t num_function_circuits) + static bool verify_ivc(Proof& proof, ClientIVC& ivc) { - // Populate the set of mock function and kernel circuits to be accumulated in the IVC - std::vector circuits; - Builder function_circuit{ ivc.goblin.op_queue }; - GoblinMockCircuits::construct_mock_function_circuit(function_circuit); - circuits.emplace_back(function_circuit); - - for (size_t idx = 1; idx < num_function_circuits; ++idx) { - Builder function_circuit{ ivc.goblin.op_queue }; - GoblinMockCircuits::construct_mock_function_circuit(function_circuit); - circuits.emplace_back(function_circuit); - - Builder kernel_circuit{ ivc.goblin.op_queue }; - GoblinMockCircuits::construct_mock_folding_kernel(kernel_circuit); - circuits.emplace_back(kernel_circuit); + auto verifier_inst = std::make_shared(ivc.verification_queue[0].honk_verification_key); + bool verified = ivc.verify(proof, { ivc.verifier_accumulator, verifier_inst }); + + // This is a benchmark, not a test, so just print success or failure to the log + if (verified) { + info("IVC successfully verified!"); + } else { + info("IVC failed to verify."); } - - // Compute and return the verfication keys corresponding to this set of circuits - return ivc.precompute_folding_verification_keys(circuits); + return verified; } /** - * @brief Perform a specified number of function circuit accumulation rounds - * @details Each round "accumulates" a mock function circuit and a mock kernel circuit. Each round thus consists of - * the generation of two circuits, two folding proofs and two Merge proofs. To match the sizes called out in the - * spec - * (https://github.com/AztecProtocol/aztec-packages/blob/master/yellow-paper/docs/cryptography/performance-targets.md) - * we set the size of the function circuit to be 2^17. The first one should be 2^19 but we can't currently support - * folding circuits of unequal size. + * @brief Perform a specified number of circuit accumulation rounds * - * @param NUM_CIRCUITS Number of function circuits to accumulate + * @param NUM_CIRCUITS Number of circuits to accumulate (apps + kernels) */ static void perform_ivc_accumulation_rounds(size_t NUM_CIRCUITS, ClientIVC& ivc, auto& precomputed_vks) { - size_t TOTAL_NUM_CIRCUITS = NUM_CIRCUITS * 2 - 1; // need one less kernel than number of function circuits - ASSERT(precomputed_vks.size() == TOTAL_NUM_CIRCUITS); // ensure presence of a precomputed VK for each circuit - - const size_t size_hint = 1 << 17; // Size hint for reserving wires/selector vector memory in builders - std::vector initial_function_circuits(2); - - // Construct 2 starting function circuits in parallel - { - BB_OP_COUNT_TIME_NAME("construct_circuits"); - parallel_for(2, [&](size_t circuit_index) { - GoblinMockCircuits::construct_mock_function_circuit(initial_function_circuits[circuit_index]); - }); - }; + ASSERT(precomputed_vks.size() == NUM_CIRCUITS); // ensure presence of a precomputed VK for each circuit - // Prepend queue to the first circuit - initial_function_circuits[0].op_queue->prepend_previous_queue(*ivc.goblin.op_queue); - // Initialize ivc - ivc.accumulate(initial_function_circuits[0], precomputed_vks[0]); - // Retrieve the queue - std::swap(*ivc.goblin.op_queue, *initial_function_circuits[0].op_queue); + MockCircuitProducer circuit_producer; - // Prepend queue to the second circuit - initial_function_circuits[1].op_queue->prepend_previous_queue(*ivc.goblin.op_queue); - // Accumulate another function circuit - ivc.accumulate(initial_function_circuits[1], precomputed_vks[1]); - // Retrieve the queue - std::swap(*ivc.goblin.op_queue, *initial_function_circuits[1].op_queue); - - // Free memory - initial_function_circuits.clear(); - - for (size_t circuit_idx = 2; circuit_idx < TOTAL_NUM_CIRCUITS - 1; circuit_idx += 2) { - Builder kernel_circuit{ size_hint, ivc.goblin.op_queue }; - Builder function_circuit{ size_hint }; - // Construct function and kernel circuits in parallel + for (size_t circuit_idx = 0; circuit_idx < NUM_CIRCUITS; ++circuit_idx) { + Builder circuit; { BB_OP_COUNT_TIME_NAME("construct_circuits"); - parallel_for(2, [&](size_t workload_idx) { - // workload index is 0 for kernel and 1 for function - if (workload_idx == 0) { - GoblinMockCircuits::construct_mock_folding_kernel(kernel_circuit); - } else { - GoblinMockCircuits::construct_mock_function_circuit(function_circuit); - } - }); - }; - - // No need to prepend queue, it's the same after last swap - // Accumulate kernel circuit - ivc.accumulate(kernel_circuit, precomputed_vks[circuit_idx]); - - // Prepend queue to function circuit - function_circuit.op_queue->prepend_previous_queue(*ivc.goblin.op_queue); - - // Accumulate function circuit - ivc.accumulate(function_circuit, precomputed_vks[circuit_idx + 1]); + circuit = circuit_producer.create_next_circuit(ivc); + } - // Retrieve queue - std::swap(*ivc.goblin.op_queue, *function_circuit.op_queue); + ivc.accumulate(circuit, precomputed_vks[circuit_idx]); } - - // Final kernel - Builder kernel_circuit{ size_hint, ivc.goblin.op_queue }; - { - BB_OP_COUNT_TIME_NAME("construct_circuits"); - GoblinMockCircuits::construct_mock_folding_kernel(kernel_circuit); - } - ivc.accumulate(kernel_circuit, precomputed_vks.back()); } }; @@ -149,143 +80,30 @@ class ClientIVCBench : public benchmark::Fixture { * */ BENCHMARK_DEFINE_F(ClientIVCBench, Full)(benchmark::State& state) -{ - ClientIVC ivc; - - auto num_circuits = static_cast(state.range(0)); - auto precomputed_vks = precompute_verification_keys(ivc, num_circuits); - - for (auto _ : state) { - BB_REPORT_OP_COUNT_IN_BENCH(state); - // Perform a specified number of iterations of function/kernel accumulation - perform_ivc_accumulation_rounds(num_circuits, ivc, precomputed_vks); - - // Construct IVC scheme proof (fold, decider, merge, eccvm, translator) - ivc.prove(); - } -} - -/** - * @brief Benchmark the prover work for the full PG-Goblin IVC protocol - * - */ -BENCHMARK_DEFINE_F(ClientIVCBench, FullStructured)(benchmark::State& state) { ClientIVC ivc; ivc.trace_structure = TraceStructure::CLIENT_IVC_BENCH; - auto num_circuits = static_cast(state.range(0)); - auto precomputed_vks = precompute_verification_keys(ivc, num_circuits); - - for (auto _ : state) { - BB_REPORT_OP_COUNT_IN_BENCH(state); - // Perform a specified number of iterations of function/kernel accumulation - perform_ivc_accumulation_rounds(num_circuits, ivc, precomputed_vks); - - // Construct IVC scheme proof (fold, decider, merge, eccvm, translator) - ivc.prove(); - } -} - -/** - * @brief Benchmark only the accumulation rounds - * - */ -BENCHMARK_DEFINE_F(ClientIVCBench, Accumulate)(benchmark::State& state) -{ - ClientIVC ivc; + auto total_num_circuits = 2 * static_cast(state.range(0)); // 2x accounts for kernel circuits - auto num_circuits = static_cast(state.range(0)); - auto precomputed_vks = precompute_verification_keys(ivc, num_circuits); + // Precompute the verification keys for the benchmark circuits + MockCircuitProducer circuit_producer; + auto precomputed_vkeys = circuit_producer.precompute_verification_keys(total_num_circuits, ivc.trace_structure); - // Perform a specified number of iterations of function/kernel accumulation + Proof proof; for (auto _ : state) { BB_REPORT_OP_COUNT_IN_BENCH(state); - perform_ivc_accumulation_rounds(num_circuits, ivc, precomputed_vks); + perform_ivc_accumulation_rounds(total_num_circuits, ivc, precomputed_vkeys); + proof = ivc.prove(); } -} - -/** - * @brief Benchmark only the Decider component - * - */ -BENCHMARK_DEFINE_F(ClientIVCBench, Decide)(benchmark::State& state) -{ - ClientIVC ivc; - - auto num_circuits = static_cast(state.range(0)); - auto precomputed_vks = precompute_verification_keys(ivc, num_circuits); - // Perform a specified number of iterations of function/kernel accumulation - perform_ivc_accumulation_rounds(num_circuits, ivc, precomputed_vks); - - // Construct eccvm proof, measure only translator proof construction - for (auto _ : state) { - BB_REPORT_OP_COUNT_IN_BENCH(state); - ivc.decider_prove(); - } -} - -/** - * @brief Benchmark only the ECCVM component - * - */ -BENCHMARK_DEFINE_F(ClientIVCBench, ECCVM)(benchmark::State& state) -{ - ClientIVC ivc; - - auto num_circuits = static_cast(state.range(0)); - auto precomputed_vks = precompute_verification_keys(ivc, num_circuits); - - // Perform a specified number of iterations of function/kernel accumulation - perform_ivc_accumulation_rounds(num_circuits, ivc, precomputed_vks); - - // Construct and measure eccvm only - for (auto _ : state) { - BB_REPORT_OP_COUNT_IN_BENCH(state); - ivc.goblin.prove_eccvm(); - } -} - -/** - * @brief Benchmark only the Translator component - * - */ -BENCHMARK_DEFINE_F(ClientIVCBench, Translator)(benchmark::State& state) -{ - ClientIVC ivc; - auto num_circuits = static_cast(state.range(0)); - auto precomputed_vks = precompute_verification_keys(ivc, num_circuits); - - // Perform a specified number of iterations of function/kernel accumulation - perform_ivc_accumulation_rounds(num_circuits, ivc, precomputed_vks); - - BB_REPORT_OP_COUNT_IN_BENCH(state); - // Perform a specified number of iterations of function/kernel accumulation - perform_ivc_accumulation_rounds(num_circuits, ivc, precomputed_vks); - - // Construct eccvm proof, measure only translator proof construction - ivc.goblin.prove_eccvm(); - for (auto _ : state) { - ivc.goblin.prove_translator(); - } + // For good measure, ensure the IVC verifies + verify_ivc(proof, ivc); } -#define ARGS \ - Arg(ClientIVCBench::NUM_ITERATIONS_MEDIUM_COMPLEXITY) \ - ->Arg(1 << 1) \ - ->Arg(1 << 2) \ - ->Arg(1 << 3) \ - ->Arg(1 << 4) \ - ->Arg(1 << 5) \ - ->Arg(1 << 6) +#define ARGS Arg(ClientIVCBench::NUM_ITERATIONS_MEDIUM_COMPLEXITY) BENCHMARK_REGISTER_F(ClientIVCBench, Full)->Unit(benchmark::kMillisecond)->ARGS; -BENCHMARK_REGISTER_F(ClientIVCBench, FullStructured)->Unit(benchmark::kMillisecond)->ARGS; -BENCHMARK_REGISTER_F(ClientIVCBench, Accumulate)->Unit(benchmark::kMillisecond)->ARGS; -BENCHMARK_REGISTER_F(ClientIVCBench, Decide)->Unit(benchmark::kMillisecond)->ARGS; -BENCHMARK_REGISTER_F(ClientIVCBench, ECCVM)->Unit(benchmark::kMillisecond)->ARGS; -BENCHMARK_REGISTER_F(ClientIVCBench, Translator)->Unit(benchmark::kMillisecond)->ARGS; } // namespace diff --git a/barretenberg/cpp/src/barretenberg/benchmark/protogalaxy_bench/CMakeLists.txt b/barretenberg/cpp/src/barretenberg/benchmark/protogalaxy_bench/CMakeLists.txt index 16230d801c8..319463b5bc5 100644 --- a/barretenberg/cpp/src/barretenberg/benchmark/protogalaxy_bench/CMakeLists.txt +++ b/barretenberg/cpp/src/barretenberg/benchmark/protogalaxy_bench/CMakeLists.txt @@ -1,4 +1,4 @@ barretenberg_module( protogalaxy_bench - stdlib_protogalaxy_verifier + protogalaxy ) \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/benchmark/protogalaxy_bench/protogalaxy.bench.cpp b/barretenberg/cpp/src/barretenberg/benchmark/protogalaxy_bench/protogalaxy.bench.cpp index aad7be68295..105bbb564ce 100644 --- a/barretenberg/cpp/src/barretenberg/benchmark/protogalaxy_bench/protogalaxy.bench.cpp +++ b/barretenberg/cpp/src/barretenberg/benchmark/protogalaxy_bench/protogalaxy.bench.cpp @@ -2,6 +2,7 @@ #include "barretenberg/common/op_count_google_bench.hpp" #include "barretenberg/protogalaxy/protogalaxy_prover.hpp" +#include "barretenberg/protogalaxy/protogalaxy_prover_internal.hpp" #include "barretenberg/stdlib_circuit_builders/mock_circuits.hpp" #include "barretenberg/stdlib_circuit_builders/ultra_circuit_builder.hpp" #include "barretenberg/ultra_honk/decider_keys.hpp" @@ -11,9 +12,42 @@ using namespace benchmark; namespace bb { +using Flavor = MegaFlavor; +using FF = typename Flavor::FF; + +void vector_of_evaluations(State& state) noexcept +{ + using RelationEvaluations = typename Flavor::TupleOfArraysOfValues; + + for (auto _ : state) { + std::vector evals(1 << state.range(0)); + DoNotOptimize(evals); + } +} + +void compute_row_evaluations(State& state) noexcept +{ + using Fun = ProtogalaxyProverInternal>; + using Polys = Flavor::ProverPolynomials; + using Alphas = Flavor::RelationSeparator; + using Params = RelationParameters; + + const size_t dyadic_size = 1 << state.range(0); + Polys polys(dyadic_size); + Alphas alphas; + auto params = Params::get_random(); + + for (auto _ : state) { + auto result = Fun::compute_row_evaluations(polys, alphas, params); + DoNotOptimize(result); + } +} + // Fold one proving key into an accumulator. -template void fold_k(State& state) noexcept +void fold_k(State& state) noexcept { + static constexpr size_t k{ 1 }; + using DeciderProvingKey = DeciderProvingKey_; using ProtogalaxyProver = ProtogalaxyProver_>; using Builder = typename Flavor::CircuitBuilder; @@ -41,8 +75,10 @@ template void fold_k(State& state) noexcept } } +BENCHMARK(vector_of_evaluations)->DenseRange(15, 21)->Unit(kMillisecond); +BENCHMARK(compute_row_evaluations)->DenseRange(15, 21)->Unit(kMillisecond); // We stick to just k=1 for compile-time reasons. -BENCHMARK(fold_k)->/* vary the circuit size */ DenseRange(14, 20)->Unit(kMillisecond); +BENCHMARK(fold_k)->/* vary the circuit size */ DenseRange(14, 20)->Unit(kMillisecond); } // namespace bb diff --git a/barretenberg/cpp/src/barretenberg/circuit_checker/mega_circuit_builder.test.cpp b/barretenberg/cpp/src/barretenberg/circuit_checker/mega_circuit_builder.test.cpp index ef237747ee0..03e4d731d72 100644 --- a/barretenberg/cpp/src/barretenberg/circuit_checker/mega_circuit_builder.test.cpp +++ b/barretenberg/cpp/src/barretenberg/circuit_checker/mega_circuit_builder.test.cpp @@ -1,5 +1,6 @@ #include "barretenberg/stdlib_circuit_builders/mega_circuit_builder.hpp" #include "barretenberg/circuit_checker/circuit_checker.hpp" +#include "barretenberg/goblin/mock_circuits.hpp" #include "barretenberg/stdlib/primitives/bigfield/constants.hpp" #include @@ -158,4 +159,48 @@ TEST(MegaCircuitBuilder, GoblinEccOpQueueUltraOps) } } +/** + * @brief Check that the selector partitioning is correct for the mega circuit builder + * @details We check that for the arithmetic, delta_range, elliptic, aux, lookup, busread, poseidon2_external, + * poseidon2_internal blocks, and the other selectors are zero on that block. + */ +TEST(MegaCircuitBuilder, CompleteSelectorPartitioningCheck) +{ + auto builder = MegaCircuitBuilder(); + GoblinMockCircuits::construct_simple_circuit(builder); + bool result = CircuitChecker::check(builder); + EXPECT_EQ(result, true); + + // For each block, we want to check that all of the other selectors are zero on that block besides the one + // corresponding to the current block + for (auto& block : builder.blocks.get()) { + for (size_t i = 0; i < block.size(); ++i) { + if (&block != &builder.blocks.arithmetic) { + EXPECT_EQ(block.q_arith()[i], 0); + } + if (&block != &builder.blocks.delta_range) { + EXPECT_EQ(block.q_delta_range()[i], 0); + } + if (&block != &builder.blocks.elliptic) { + EXPECT_EQ(block.q_elliptic()[i], 0); + } + if (&block != &builder.blocks.aux) { + EXPECT_EQ(block.q_aux()[i], 0); + } + if (&block != &builder.blocks.lookup) { + EXPECT_EQ(block.q_lookup_type()[i], 0); + } + if (&block != &builder.blocks.busread) { + EXPECT_EQ(block.q_busread()[i], 0); + } + if (&block != &builder.blocks.poseidon2_external) { + EXPECT_EQ(block.q_poseidon2_external()[i], 0); + } + if (&block != &builder.blocks.poseidon2_internal) { + EXPECT_EQ(block.q_poseidon2_internal()[i], 0); + } + } + } +} + } // namespace bb \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/circuit_checker/ultra_circuit_builder.test.cpp b/barretenberg/cpp/src/barretenberg/circuit_checker/ultra_circuit_builder.test.cpp index 5d1eec57741..4d1e0da2b37 100644 --- a/barretenberg/cpp/src/barretenberg/circuit_checker/ultra_circuit_builder.test.cpp +++ b/barretenberg/cpp/src/barretenberg/circuit_checker/ultra_circuit_builder.test.cpp @@ -15,7 +15,7 @@ namespace bb { using plookup::ColumnIdx; using plookup::MultiTableId; -TEST(ultra_circuit_constructor, copy_constructor) +TEST(UltraCircuitConstructor, CopyConstructor) { UltraCircuitBuilder circuit_constructor = UltraCircuitBuilder(); @@ -43,7 +43,7 @@ TEST(ultra_circuit_constructor, copy_constructor) EXPECT_TRUE(CircuitChecker::check(duplicate_circuit_constructor)); } -TEST(ultra_circuit_constructor, create_gates_from_plookup_accumulators) +TEST(UltraCircuitConstructor, CreateGatesFromPlookupAccumulators) { UltraCircuitBuilder circuit_builder = UltraCircuitBuilder(); @@ -105,7 +105,7 @@ TEST(ultra_circuit_constructor, create_gates_from_plookup_accumulators) EXPECT_EQ(result, true); } -TEST(ultra_circuit_constructor, bad_lookup_failure) +TEST(UltraCircuitConstructor, BadLookupFailure) { UltraCircuitBuilder builder; MockCircuits::add_lookup_gates(builder); @@ -121,7 +121,7 @@ TEST(ultra_circuit_constructor, bad_lookup_failure) EXPECT_FALSE(CircuitChecker::check(builder)); } -TEST(ultra_circuit_constructor, base_case) +TEST(UltraCircuitConstructor, BaseCase) { UltraCircuitBuilder circuit_constructor = UltraCircuitBuilder(); fr a = fr::one(); @@ -129,7 +129,7 @@ TEST(ultra_circuit_constructor, base_case) bool result = CircuitChecker::check(circuit_constructor); EXPECT_EQ(result, true); } -TEST(ultra_circuit_constructor, test_no_lookup_proof) +TEST(UltraCircuitConstructor, TestNoLookupProof) { UltraCircuitBuilder circuit_constructor = UltraCircuitBuilder(); @@ -152,7 +152,7 @@ TEST(ultra_circuit_constructor, test_no_lookup_proof) EXPECT_EQ(result, true); } -TEST(ultra_circuit_constructor, test_elliptic_gate) +TEST(UltraCircuitConstructor, TestEllipticGate) { typedef grumpkin::g1::affine_element affine_element; typedef grumpkin::g1::element element; @@ -180,7 +180,7 @@ TEST(ultra_circuit_constructor, test_elliptic_gate) EXPECT_EQ(CircuitChecker::check(circuit_constructor), false); } -TEST(ultra_circuit_constructor, test_elliptic_double_gate) +TEST(UltraCircuitConstructor, TestEllipticDoubleGate) { typedef grumpkin::g1::affine_element affine_element; typedef grumpkin::g1::element element; @@ -200,7 +200,7 @@ TEST(ultra_circuit_constructor, test_elliptic_double_gate) EXPECT_EQ(result, true); } -TEST(ultra_circuit_constructor, non_trivial_tag_permutation) +TEST(UltraCircuitConstructor, NonTrivialTagPermutation) { UltraCircuitBuilder circuit_constructor = UltraCircuitBuilder(); fr a = fr::random_element(); @@ -232,7 +232,7 @@ TEST(ultra_circuit_constructor, non_trivial_tag_permutation) EXPECT_EQ(CircuitChecker::check(circuit_constructor), false); } -TEST(ultra_circuit_constructor, non_trivial_tag_permutation_and_cycles) +TEST(UltraCircuitConstructor, NonTrivialTagPermutationAndCycles) { UltraCircuitBuilder circuit_constructor = UltraCircuitBuilder(); fr a = fr::random_element(); @@ -273,7 +273,7 @@ TEST(ultra_circuit_constructor, non_trivial_tag_permutation_and_cycles) circuit_constructor.real_variable_tags[circuit_constructor.real_variable_index[a_idx]] = 2; EXPECT_EQ(CircuitChecker::check(circuit_constructor), false); } -TEST(ultra_circuit_constructor, bad_tag_permutation) +TEST(UltraCircuitConstructor, BadTagPermutation) { UltraCircuitBuilder circuit_constructor = UltraCircuitBuilder(); fr a = fr::random_element(); @@ -302,7 +302,7 @@ TEST(ultra_circuit_constructor, bad_tag_permutation) EXPECT_EQ(result, false); } -TEST(ultra_circuit_constructor, sort_widget) +TEST(UltraCircuitConstructor, SortWidget) { UltraCircuitBuilder circuit_constructor = UltraCircuitBuilder(); fr a = fr::one(); @@ -328,7 +328,7 @@ std::vector add_variables(UltraCircuitBuilder& circuit_constructor, st } return res; } -TEST(ultra_circuit_constructor, sort_with_edges_gate) +TEST(UltraCircuitConstructor, SortWithEdgesGate) { fr a = fr::one(); fr b = fr(2); @@ -421,7 +421,7 @@ TEST(ultra_circuit_constructor, sort_with_edges_gate) } } -TEST(ultra_circuit_constructor, range_constraint) +TEST(UltraCircuitConstructor, RangeConstraint) { { UltraCircuitBuilder circuit_constructor = UltraCircuitBuilder(); @@ -490,7 +490,7 @@ TEST(ultra_circuit_constructor, range_constraint) } } -TEST(ultra_circuit_constructor, range_with_gates) +TEST(UltraCircuitConstructor, RangeWithGates) { UltraCircuitBuilder circuit_constructor = UltraCircuitBuilder(); auto idx = add_variables(circuit_constructor, { 1, 2, 3, 4, 5, 6, 7, 8 }); @@ -510,7 +510,7 @@ TEST(ultra_circuit_constructor, range_with_gates) EXPECT_EQ(result, true); } -TEST(ultra_circuit_constructor, range_with_gates_where_range_is_not_a_power_of_two) +TEST(UltraCircuitConstructor, RangeWithGatesWhereRangeIsNotAPowerOfTwo) { UltraCircuitBuilder circuit_constructor = UltraCircuitBuilder(); auto idx = add_variables(circuit_constructor, { 1, 2, 3, 4, 5, 6, 7, 8 }); @@ -530,7 +530,7 @@ TEST(ultra_circuit_constructor, range_with_gates_where_range_is_not_a_power_of_t EXPECT_EQ(result, true); } -TEST(ultra_circuit_constructor, sort_widget_complex) +TEST(UltraCircuitConstructor, SortWidgetComplex) { { @@ -557,7 +557,7 @@ TEST(ultra_circuit_constructor, sort_widget_complex) EXPECT_EQ(result, false); } } -TEST(ultra_circuit_constructor, sort_widget_neg) +TEST(UltraCircuitConstructor, SortWidgetNeg) { UltraCircuitBuilder circuit_constructor = UltraCircuitBuilder(); fr a = fr::one(); @@ -575,7 +575,7 @@ TEST(ultra_circuit_constructor, sort_widget_neg) EXPECT_EQ(result, false); } -TEST(ultra_circuit_constructor, composed_range_constraint) +TEST(UltraCircuitConstructor, ComposedRangeConstraint) { UltraCircuitBuilder circuit_constructor = UltraCircuitBuilder(); auto c = fr::random_element(); @@ -590,7 +590,7 @@ TEST(ultra_circuit_constructor, composed_range_constraint) EXPECT_EQ(result, true); } -TEST(ultra_circuit_constructor, non_native_field_multiplication) +TEST(UltraCircuitConstructor, NonNativeFieldMultiplication) { UltraCircuitBuilder circuit_constructor = UltraCircuitBuilder(); @@ -646,7 +646,78 @@ TEST(ultra_circuit_constructor, non_native_field_multiplication) EXPECT_EQ(result, true); } -TEST(ultra_circuit_constructor, rom) +/** + * @brief Test that the aux block only contains aux gates. + * + */ +TEST(UltraCircuitConstructor, NonNativeFieldMultiplicationSortCheck) +{ + UltraCircuitBuilder circuit_constructor = UltraCircuitBuilder(); + + fq a = fq::random_element(); + fq b = fq::random_element(); + uint256_t modulus = fq::modulus; + + uint1024_t a_big = uint512_t(uint256_t(a)); + uint1024_t b_big = uint512_t(uint256_t(b)); + uint1024_t p_big = uint512_t(uint256_t(modulus)); + + uint1024_t q_big = (a_big * b_big) / p_big; + uint1024_t r_big = (a_big * b_big) % p_big; + + uint256_t q(q_big.lo.lo); + uint256_t r(r_big.lo.lo); + + const auto split_into_limbs = [&](const uint512_t& input) { + constexpr size_t NUM_BITS = 68; + std::array limbs; + limbs[0] = input.slice(0, NUM_BITS).lo; + limbs[1] = input.slice(NUM_BITS * 1, NUM_BITS * 2).lo; + limbs[2] = input.slice(NUM_BITS * 2, NUM_BITS * 3).lo; + limbs[3] = input.slice(NUM_BITS * 3, NUM_BITS * 4).lo; + limbs[4] = fr(input.lo); + return limbs; + }; + + const auto get_limb_witness_indices = [&](const std::array& limbs) { + std::array limb_indices; + limb_indices[0] = circuit_constructor.add_variable(limbs[0]); + limb_indices[1] = circuit_constructor.add_variable(limbs[1]); + limb_indices[2] = circuit_constructor.add_variable(limbs[2]); + limb_indices[3] = circuit_constructor.add_variable(limbs[3]); + limb_indices[4] = circuit_constructor.add_variable(limbs[4]); + return limb_indices; + }; + const uint512_t BINARY_BASIS_MODULUS = uint512_t(1) << (68 * 4); + auto modulus_limbs = split_into_limbs(BINARY_BASIS_MODULUS - uint512_t(modulus)); + + const auto a_indices = get_limb_witness_indices(split_into_limbs(uint256_t(a))); + const auto b_indices = get_limb_witness_indices(split_into_limbs(uint256_t(b))); + const auto q_indices = get_limb_witness_indices(split_into_limbs(uint256_t(q))); + const auto r_indices = get_limb_witness_indices(split_into_limbs(uint256_t(r))); + + non_native_field_witnesses inputs{ + a_indices, b_indices, q_indices, r_indices, modulus_limbs, fr(uint256_t(modulus)), + }; + const auto [lo_1_idx, hi_1_idx] = circuit_constructor.evaluate_non_native_field_multiplication(inputs); + circuit_constructor.range_constrain_two_limbs(lo_1_idx, hi_1_idx, 70, 70); + + bool result = CircuitChecker::check(circuit_constructor); + EXPECT_EQ(result, true); + + // Everything above was copied from the previous test. + // Check that in the aux blocks, the other selectors besides the aux selector are zero + for (size_t i = 0; i < circuit_constructor.blocks.aux.size(); ++i) { + EXPECT_EQ(circuit_constructor.blocks.aux.q_arith()[i], 0); + EXPECT_EQ(circuit_constructor.blocks.aux.q_delta_range()[i], 0); + EXPECT_EQ(circuit_constructor.blocks.aux.q_elliptic()[i], 0); + EXPECT_EQ(circuit_constructor.blocks.aux.q_lookup_type()[i], 0); + EXPECT_EQ(circuit_constructor.blocks.aux.q_poseidon2_external()[i], 0); + EXPECT_EQ(circuit_constructor.blocks.aux.q_poseidon2_internal()[i], 0); + } +} + +TEST(UltraCircuitConstructor, Rom) { UltraCircuitBuilder circuit_constructor = UltraCircuitBuilder(); @@ -692,7 +763,7 @@ TEST(ultra_circuit_constructor, rom) * @brief A simple-as-possible RAM read test, for easier debugging * */ -TEST(ultra_circuit_constructor, ram_simple) +TEST(UltraCircuitConstructor, RamSimple) { UltraCircuitBuilder builder; @@ -722,7 +793,7 @@ TEST(ultra_circuit_constructor, ram_simple) EXPECT_TRUE(CircuitChecker::check(builder)); } -TEST(ultra_circuit_constructor, ram) +TEST(UltraCircuitConstructor, Ram) { UltraCircuitBuilder circuit_constructor = UltraCircuitBuilder(); @@ -793,7 +864,7 @@ TEST(ultra_circuit_constructor, ram) EXPECT_TRUE(CircuitChecker::check(duplicate_circuit_constructor)); } -TEST(ultra_circuit_constructor, range_checks_on_duplicates) +TEST(UltraCircuitConstructor, RangeChecksOnDuplicates) { UltraCircuitBuilder circuit_constructor = UltraCircuitBuilder(); @@ -828,7 +899,7 @@ TEST(ultra_circuit_constructor, range_checks_on_duplicates) EXPECT_EQ(result, true); } -TEST(ultra_circuit_constructor, check_circuit_showcase) +TEST(UltraCircuitConstructor, CheckCircuitShowcase) { UltraCircuitBuilder circuit_constructor = UltraCircuitBuilder(); // check_circuit allows us to check correctness on the go diff --git a/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.cpp b/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.cpp index 210bef71e50..857a70ddb5b 100644 --- a/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.cpp +++ b/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.cpp @@ -1,69 +1,204 @@ #include "barretenberg/client_ivc/client_ivc.hpp" -#include "tracy/Tracy.hpp" +#include "barretenberg/ultra_honk/oink_prover.hpp" namespace bb { /** - * @brief Accumulate a circuit into the IVC scheme - * @details If this is the first circuit being accumulated, initialize the prover and verifier accumulators. Otherwise, - * fold the key for the provided circuit into the accumulator. If a previous fold proof exists, a recursive - * folding verification is appended to the provided circuit prior to its accumulation. Similarly, if a merge proof - * exists, a recursive merge verifier is appended. + * @brief Instantiate a stdlib verification queue for use in the kernel completion logic + * @details Construct a stdlib proof/verification_key for each entry in the native verification queue. By default, both + * are constructed from their counterpart in the native queue. Alternatively, Stdlib verification keys can be provided + * directly as input to this method. (The later option is used, for example, when constructing recursive verifiers based + * on the verification key witnesses from an acir recursion constraint. This option is not provided for proofs since + * valid proof witnesses are in general not known at the time of acir constraint generation). * - * @param circuit Circuit to be accumulated/folded - * @param precomputed_vk Optional precomputed VK (otherwise will be computed herein) + * @param circuit */ -void ClientIVC::accumulate(ClientCircuit& circuit, const std::shared_ptr& precomputed_vk) +void ClientIVC::instantiate_stdlib_verification_queue( + ClientCircuit& circuit, const std::vector>& input_keys) { - // If a previous fold proof exists, add a recursive folding verification to the circuit - if (!fold_output.proof.empty()) { - BB_OP_COUNT_TIME_NAME("construct_circuits"); + bool vkeys_provided = !input_keys.empty(); + if (vkeys_provided && verification_queue.size() != input_keys.size()) { + info("Warning: Incorrect number of verification keys provided in stdlib verification queue instantiation."); + ASSERT(false); + } + + size_t key_idx = 0; + for (auto& [proof, vkey, type] : verification_queue) { + // Construct stdlib proof directly from the internal native queue data + auto stdlib_proof = bb::convert_proof_to_witness(&circuit, proof); - // Construct stdlib accumulator, vkey and proof + // Use the provided stdlib vkey if present, otherwise construct one from the internal native queue + auto stdlib_vkey = + vkeys_provided ? input_keys[key_idx++] : std::make_shared(&circuit, vkey); + + stdlib_verification_queue.push_back({ stdlib_proof, stdlib_vkey, type }); + } + verification_queue.clear(); // the native data is not needed beyond this point +} + +/** + * @brief Populate the provided circuit with constraints for (1) recursive verification of the provided accumulation + * proof and (2) the associated databus commitment consistency checks. + * @details The recursive verifier will be either Oink or Protogalaxy depending on the specified proof type. In either + * case, the verifier accumulator is updated in place via the verification algorithm. Databus commitment consistency + * checks are performed on the witness commitments and public inputs extracted from the proof by the verifier. + * + * @param circuit The circuit to which the constraints are appended + * @param proof A stdlib proof to be recursively verified (either oink or PG) + * @param vkey The stdlib verfication key associated with the proof + * @param type The type of the proof (equivalently, the type of the verifier) + */ +void ClientIVC::perform_recursive_verification_and_databus_consistency_checks( + ClientCircuit& circuit, + const StdlibProof& proof, + const std::shared_ptr& vkey, + const QUEUE_TYPE type) +{ + switch (type) { + case QUEUE_TYPE::PG: { + // Construct stdlib verifier accumulator from the native counterpart computed on a previous round auto stdlib_verifier_accum = std::make_shared(&circuit, verifier_accumulator); - auto stdlib_decider_vk = std::make_shared(&circuit, decider_vk); - auto stdlib_proof = bb::convert_proof_to_witness(&circuit, fold_output.proof); - FoldingRecursiveVerifier verifier{ &circuit, stdlib_verifier_accum, { stdlib_decider_vk } }; - auto verifier_accum = verifier.verify_folding_proof(stdlib_proof); + // Perform folding recursive verification to update the verifier accumulator + FoldingRecursiveVerifier verifier{ &circuit, stdlib_verifier_accum, { vkey } }; + auto verifier_accum = verifier.verify_folding_proof(proof); + + // Extract native verifier accumulator from the stdlib accum for use on the next round verifier_accumulator = std::make_shared(verifier_accum->get_value()); + + // Perform databus commitment consistency checks and propagate return data commitments via public inputs + bus_depot.execute(verifier.keys_to_fold[1]->witness_commitments, + verifier.keys_to_fold[1]->public_inputs, + verifier.keys_to_fold[1]->verification_key->databus_propagation_data); + break; } + case QUEUE_TYPE::OINK: { + // Construct an incomplete stdlib verifier accumulator from the corresponding stdlib verification key + auto verifier_accum = std::make_shared(&circuit, vkey); + + // Perform oink recursive verification to complete the initial verifier accumulator + OinkRecursiveVerifier oink{ &circuit, verifier_accum }; + oink.verify_proof(proof); + verifier_accum->is_accumulator = true; // indicate to PG that it should not run oink - // Construct a merge proof (and add a recursive merge verifier to the circuit if a previous merge proof exists) - goblin.merge(circuit); + // Extract native verifier accumulator from the stdlib accum for use on the next round + verifier_accumulator = std::make_shared(verifier_accum->get_value()); + // Initialize the gate challenges to zero for use in first round of folding + verifier_accumulator->gate_challenges = std::vector(CONST_PG_LOG_N, 0); + + // Perform databus commitment consistency checks and propagate return data commitments via public inputs + bus_depot.execute(verifier_accum->witness_commitments, + verifier_accum->public_inputs, + verifier_accum->verification_key->databus_propagation_data); + + break; + } + } +} + +/** + * @brief Perform recursive merge verification for each merge proof in the queue + * + * @param circuit + */ +void ClientIVC::process_recursive_merge_verification_queue(ClientCircuit& circuit) +{ + // Recusively verify all merge proofs in queue + for (auto& proof : merge_verification_queue) { + goblin.verify_merge(circuit, proof); + } + merge_verification_queue.clear(); +} + +/** + * @brief Append logic to complete a kernel circuit + * @details A kernel circuit may contain some combination of PG recursive verification, merge recursive + * verification, and databus commitment consistency checks. This method appends this logic to a provided kernel + * circuit. + * + * @param circuit + */ +void ClientIVC::complete_kernel_circuit_logic(ClientCircuit& circuit) +{ + circuit.databus_propagation_data.is_kernel = true; + + // Instantiate stdlib verifier inputs from their native counterparts + if (stdlib_verification_queue.empty()) { + instantiate_stdlib_verification_queue(circuit); + } + + // Peform recursive verification and databus consistency checks for each entry in the verification queue + for (auto& [proof, vkey, type] : stdlib_verification_queue) { + perform_recursive_verification_and_databus_consistency_checks(circuit, proof, vkey, type); + } + stdlib_verification_queue.clear(); + + // Perform recursive merge verification for every merge proof in the queue + process_recursive_merge_verification_queue(circuit); +} + +/** + * @brief Execute prover work for accumulation + * @details Construct an proving key for the provided circuit. If this is the first step in the IVC, simply initialize + * the folding accumulator. Otherwise, execute the PG prover to fold the proving key into the accumulator and produce a + * folding proof. Also execute the merge protocol to produce a merge proof. + * + * @param circuit + * @param precomputed_vk + */ +void ClientIVC::accumulate(ClientCircuit& circuit, const std::shared_ptr& precomputed_vk) +{ + is_kernel = !is_kernel; // toggle on each call (every even circuit is a kernel) + + if (auto_verify_mode && is_kernel) { + complete_kernel_circuit_logic(circuit); + } + + // Construct merge proof for the present circuit and add to merge verification queue + MergeProof merge_proof = goblin.prove_merge(circuit); + merge_verification_queue.emplace_back(merge_proof); // TODO(https://github.com/AztecProtocol/barretenberg/issues/1069): Do proper aggregation with merge recursive // verifier. circuit.add_recursive_proof(stdlib::recursion::init_default_agg_obj_indices(circuit)); - // Construct the proving key for the circuit - std::shared_ptr decider_pk; + // Construct the proving key for circuit + std::shared_ptr proving_key; if (!initialized) { - decider_pk = std::make_shared(circuit, trace_structure); + proving_key = std::make_shared(circuit, trace_structure); } else { - decider_pk = std::make_shared( + proving_key = std::make_shared( circuit, trace_structure, fold_output.accumulator->proving_key.commitment_key); } - // Track the maximum size of each block for all circuits porcessed (for debugging purposes only) - max_block_size_tracker.update(circuit); - // Set the verification key from precomputed if available, else compute it - if (precomputed_vk) { - decider_vk = precomputed_vk; - } else { - decider_vk = std::make_shared(decider_pk->proving_key); - } + honk_vk = precomputed_vk ? precomputed_vk : std::make_shared(proving_key->proving_key); - // If the IVC is uninitialized, simply initialize the prover and verifier accumulators + // If this is the first circuit in the IVC, use oink to complete the decider proving key and generate an oink proof if (!initialized) { - fold_output.accumulator = decider_pk; - verifier_accumulator = std::make_shared(decider_vk); + OinkProver oink_prover{ proving_key }; + oink_prover.prove(); + proving_key->is_accumulator = true; // indicate to PG that it should not run oink on this key + // Initialize the gate challenges to zero for use in first round of folding + proving_key->gate_challenges = std::vector(CONST_PG_LOG_N, 0); + + fold_output.accumulator = proving_key; // initialize the prover accum with the completed key + + // Add oink proof and corresponding verification key to the verification queue + verification_queue.push_back( + bb::ClientIVC::VerifierInputs{ oink_prover.transcript->proof_data, honk_vk, QUEUE_TYPE::OINK }); + initialized = true; - } else { // Otherwise, fold the new proving key into the accumulator - FoldingProver folding_prover({ fold_output.accumulator, decider_pk }); + } else { // Otherwise, fold the new key into the accumulator + FoldingProver folding_prover({ fold_output.accumulator, proving_key }); fold_output = folding_prover.prove(); + + // Add fold proof and corresponding verification key to the verification queue + verification_queue.push_back(bb::ClientIVC::VerifierInputs{ fold_output.proof, honk_vk, QUEUE_TYPE::PG }); } + + // Track the maximum size of each block for all circuits porcessed (for debugging purposes only) + max_block_size_tracker.update(circuit); } /** @@ -73,9 +208,15 @@ void ClientIVC::accumulate(ClientCircuit& circuit, const std::shared_ptr& eccvm_vk, const std::shared_ptr& translator_vk) { - ZoneScopedN("ClientIVC::verify"); // Goblin verification (merge, eccvm, translator) GoblinVerifier goblin_verifier{ eccvm_vk, translator_vk }; bool goblin_verified = goblin_verifier.verify(proof.goblin_proof); @@ -104,7 +244,7 @@ bool ClientIVC::verify(const Proof& proof, * @param proof * @return bool */ -bool ClientIVC::verify(Proof& proof, const std::vector>& vk_stack) const +bool ClientIVC::verify(const Proof& proof, const std::vector>& vk_stack) { auto eccvm_vk = std::make_shared(goblin.get_eccvm_proving_key()); auto translator_vk = std::make_shared(goblin.get_translator_proving_key()); @@ -118,11 +258,24 @@ bool ClientIVC::verify(Proof& proof, const std::vector(this->verification_queue[0].honk_verification_key); + return verify(proof, { this->verifier_accumulator, verifier_inst }); +} + /** * @brief Given a set of circuits, compute the verification keys that will be required by the IVC scheme * @details The verification keys computed here are in general not the same as the verification keys for the @@ -142,29 +295,17 @@ std::vector> ClientIVC::precompute_f for (auto& circuit : circuits) { accumulate(circuit); - vkeys.emplace_back(decider_vk); + vkeys.emplace_back(honk_vk); } // Reset the scheme so it can be reused for actual accumulation, maintaining the trace structure setting as is TraceStructure structure = trace_structure; + bool auto_verify = auto_verify_mode; *this = ClientIVC(); this->trace_structure = structure; + this->auto_verify_mode = auto_verify; return vkeys; } -/** - * @brief Construct and verify a proof for the IVC - * @note Use of this method only makes sense when the prover and verifier are the same entity, e.g. in - * development/testing. - * - */ -bool ClientIVC::prove_and_verify() -{ - auto proof = prove(); - - auto verifier_inst = std::make_shared(this->decider_vk); - return verify(proof, { this->verifier_accumulator, verifier_inst }); -} - -} // namespace bb \ No newline at end of file +} // namespace bb diff --git a/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.hpp b/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.hpp index 078e8fa98ca..03f2aa4ab5c 100644 --- a/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.hpp +++ b/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.hpp @@ -5,6 +5,7 @@ #include "barretenberg/plonk_honk_shared/arithmetization/max_block_size_tracker.hpp" #include "barretenberg/protogalaxy/protogalaxy_prover.hpp" #include "barretenberg/protogalaxy/protogalaxy_verifier.hpp" +#include "barretenberg/stdlib/primitives/databus/databus.hpp" #include "barretenberg/ultra_honk/decider_keys.hpp" #include "barretenberg/ultra_honk/decider_prover.hpp" #include "barretenberg/ultra_honk/decider_verifier.hpp" @@ -13,8 +14,13 @@ namespace bb { /** - * @brief The IVC interface to be used by the aztec client for private function execution - * @details Combines Protogalaxy with Goblin to accumulate one circuit at a time with efficient EC group operations + * @brief The IVC scheme used by the aztec client for private function execution + * @details Combines Protogalaxy with Goblin to accumulate one circuit at a time with efficient EC group + * operations. It is assumed that the circuits being accumulated correspond alternatingly to an app and a kernel, as is + * the case in Aztec. Two recursive folding verifiers are appended to each kernel (except the first one) to verify the + * folding of a previous kernel and an app/function circuit. Due to this structure it is enforced that the total number + * of circuits being accumulated is even. + * */ class ClientIVC { @@ -23,6 +29,7 @@ class ClientIVC { using VerificationKey = Flavor::VerificationKey; using FF = Flavor::FF; using FoldProof = std::vector; + using MergeProof = std::vector; using DeciderProvingKey = DeciderProvingKey_; using DeciderVerificationKey = DeciderVerificationKey_; using ClientCircuit = MegaCircuitBuilder; // can only be Mega @@ -35,13 +42,16 @@ class ClientIVC { using ECCVMVerificationKey = bb::ECCVMFlavor::VerificationKey; using TranslatorVerificationKey = bb::TranslatorFlavor::VerificationKey; - using GURecursiveFlavor = MegaRecursiveFlavor_; + using RecursiveFlavor = MegaRecursiveFlavor_; using RecursiveDeciderVerificationKeys = - bb::stdlib::recursion::honk::RecursiveDeciderVerificationKeys_; + bb::stdlib::recursion::honk::RecursiveDeciderVerificationKeys_; using RecursiveDeciderVerificationKey = RecursiveDeciderVerificationKeys::DeciderVK; - using RecursiveVerificationKey = RecursiveDeciderVerificationKeys::VerificationKey; + using RecursiveVerificationKey = RecursiveFlavor::VerificationKey; using FoldingRecursiveVerifier = bb::stdlib::recursion::honk::ProtogalaxyRecursiveVerifier_; + using OinkRecursiveVerifier = stdlib::recursion::honk::OinkRecursiveVerifier_; + + using DataBusDepot = stdlib::DataBusDepot; // A full proof for the IVC scheme struct Proof { @@ -54,26 +64,73 @@ class ClientIVC { MSGPACK_FIELDS(folding_proof, decider_proof, goblin_proof); }; + enum class QUEUE_TYPE { OINK, PG }; // for specifying type of proof in the verification queue + + // An entry in the native verification queue + struct VerifierInputs { + std::vector proof; // oink or PG + std::shared_ptr honk_verification_key; + QUEUE_TYPE type; + }; + using VerificationQueue = std::vector; + + // An entry in the stdlib verification queue + struct StdlibVerifierInputs { + StdlibProof proof; // oink or PG + std::shared_ptr honk_verification_key; + QUEUE_TYPE type; + }; + using StdlibVerificationQueue = std::vector; + // Utility for tracking the max size of each block across the full IVC MaxBlockSizeTracker max_block_size_tracker; private: using ProverFoldOutput = FoldingResult; - // Note: We need to save the last proving key that was folded in order to compute its verification key, this will - // not be needed in the real IVC as they are provided as inputs public: GoblinProver goblin; - ProverFoldOutput fold_output; - std::shared_ptr verifier_accumulator; - std::shared_ptr decider_vk; + + ProverFoldOutput fold_output; // prover accumulator and fold proof + + std::shared_ptr verifier_accumulator; // verifier accumulator + std::shared_ptr honk_vk; // honk vk to be completed and folded into the accumulator + + // Set of tuples {proof, verification_key, type} to be recursively verified + VerificationQueue verification_queue; + // Set of tuples {stdlib_proof, stdlib_verification_key, type} corresponding to the native verification queue + StdlibVerificationQueue stdlib_verification_queue; + // Set of merge proofs to be recursively verified + std::vector merge_verification_queue; + + // Management of linking databus commitments between circuits in the IVC + DataBusDepot bus_depot; // A flag indicating whether or not to construct a structured trace in the DeciderProvingKey TraceStructure trace_structure = TraceStructure::NONE; - // A flag indicating whether the IVC has been initialized with an initial decider proving key - bool initialized = false; + // TODO(https://github.com/AztecProtocol/barretenberg/issues/1101): eventually do away with this. + // Setting auto_verify_mode = true will cause kernel completion logic to be added to kernels automatically + bool auto_verify_mode = false; + bool is_kernel = true; + + bool initialized = false; // Is the IVC accumulator initialized + + void instantiate_stdlib_verification_queue( + ClientCircuit& circuit, const std::vector>& input_keys = {}); + + void perform_recursive_verification_and_databus_consistency_checks( + ClientCircuit& circuit, + const StdlibProof& proof, + const std::shared_ptr& vkey, + const QUEUE_TYPE type); + + void process_recursive_merge_verification_queue(ClientCircuit& circuit); + + // Complete the logic of a kernel circuit (e.g. PG/merge recursive verification, databus consistency checks) + void complete_kernel_circuit_logic(ClientCircuit& circuit); + // Perform prover work for accumulation (e.g. PG folding, merge proving) void accumulate(ClientCircuit& circuit, const std::shared_ptr& precomputed_vk = nullptr); Proof prove(); @@ -84,12 +141,13 @@ class ClientIVC { const std::shared_ptr& eccvm_vk, const std::shared_ptr& translator_vk); - bool verify(Proof& proof, const std::vector>& vk_stack) const; + bool verify(const Proof& proof, const std::vector>& vk_stack); bool prove_and_verify(); HonkProof decider_prove() const; - std::vector> precompute_folding_verification_keys(std::vector); + std::vector> precompute_folding_verification_keys( + std::vector circuits); }; } // namespace bb \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.test.cpp b/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.test.cpp index 8efb1b4f3b6..f687323c541 100644 --- a/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.test.cpp +++ b/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.test.cpp @@ -30,25 +30,12 @@ class ClientIVCTests : public ::testing::Test { using DeciderVerificationKeys = DeciderVerificationKeys_; using FoldingVerifier = ProtogalaxyVerifier_; - /** - * @brief Prove and verify the IVC scheme - * @details Constructs four proofs: merge, eccvm, translator, decider; Verifies these four plus the final folding - * proof constructed on the last accumulation round - * - */ - static bool prove_and_verify(ClientIVC& ivc) - { - ZoneScopedN("ClientIVC::prove_and_verify"); - auto proof = ivc.prove(); - - auto verifier_inst = std::make_shared(ivc.decider_vk); - return ivc.verify(proof, { ivc.verifier_accumulator, verifier_inst }); - } - /** * @brief Construct mock circuit with arithmetic gates and goblin ops - * @details Currently default sized to 2^16 to match kernel. (Note: dummy op gates added to avoid non-zero - * polynomials will bump size to next power of 2) + * @details Defaulted to add 2^16 gates (which will bump to next power of two with the addition of dummy gates). + * The size of the baseline circuit needs to be ~2x the number of gates appended to the kernel circuits via + * recursive verifications (currently ~60k) to ensure that the circuits being folded are equal in size. (This is + * only necessary if the structured trace is not in use). * */ static Builder create_mock_circuit(ClientIVC& ivc, size_t log2_num_gates = 16) @@ -64,74 +51,202 @@ class ClientIVCTests : public ::testing::Test { MockCircuits::construct_goblin_ecc_op_circuit(circuit); return circuit; } + + /** + * @brief A test utility for generating alternating mock app and kernel circuits and precomputing verification keys + * + */ + class MockCircuitProducer { + using ClientCircuit = ClientIVC::ClientCircuit; + + bool is_kernel = false; + + public: + ClientCircuit create_next_circuit(ClientIVC& ivc, size_t log2_num_gates = 16) + { + ClientCircuit circuit{ ivc.goblin.op_queue }; + circuit = create_mock_circuit(ivc, log2_num_gates); // construct mock base logic + if (is_kernel) { + ivc.complete_kernel_circuit_logic(circuit); // complete with recursive verifiers etc + } + is_kernel = !is_kernel; // toggle is_kernel on/off alternatingly + + return circuit; + } + + auto precompute_verification_keys(const size_t num_circuits, + TraceStructure trace_structure, + size_t log2_num_gates = 16) + { + ClientIVC ivc; // temporary IVC instance needed to produce the complete kernel circuits + ivc.trace_structure = trace_structure; + + std::vector> vkeys; + + for (size_t idx = 0; idx < num_circuits; ++idx) { + ClientCircuit circuit = create_next_circuit(ivc, log2_num_gates); // create the next circuit + ivc.accumulate(circuit); // accumulate the circuit + vkeys.emplace_back(ivc.honk_vk); // save the VK for the circuit + } + is_kernel = false; + + return vkeys; + } + }; + + /** + * @brief Tamper with a proof by finding the first non-zero value and incrementing it by 1 + * + */ + static void tamper_with_proof(FoldProof& proof) + { + for (auto& val : proof) { + if (val > 0) { + val += 1; + break; + } + } + } }; /** * @brief A simple-as-possible test demonstrating IVC for two mock circuits + * @details When accumulating only two circuits, only a single round of folding is performed thus no recursive + * verfication occurs. * */ TEST_F(ClientIVCTests, Basic) { ClientIVC ivc; - { - // Initialize the IVC with an arbitrary circuit - Builder circuit_0 = create_mock_circuit(ivc); - ivc.accumulate(circuit_0); - } + MockCircuitProducer circuit_producer; - { - // Create another circuit and accumulate - Builder circuit_1 = create_mock_circuit(ivc); - ivc.accumulate(circuit_1); - } + // Initialize the IVC with an arbitrary circuit + Builder circuit_0 = circuit_producer.create_next_circuit(ivc); + ivc.accumulate(circuit_0); + + // Create another circuit and accumulate + Builder circuit_1 = circuit_producer.create_next_circuit(ivc); + ivc.accumulate(circuit_1); - EXPECT_TRUE(prove_and_verify(ivc)); + EXPECT_TRUE(ivc.prove_and_verify()); }; /** - * @brief A simple test demonstrating IVC for three mock circuits which does more logic than just two circuits. + * @brief A simple test demonstrating IVC for four mock circuits, which is slightly more than minimal. + * @details When accumulating only four circuits, we execute all the functionality of a full ClientIVC run. * */ -TEST_F(ClientIVCTests, BasicThree) +TEST_F(ClientIVCTests, BasicFour) { ClientIVC ivc; - for (size_t idx = 0; idx < 3; ++idx) { - Builder circuit = create_mock_circuit(ivc); + MockCircuitProducer circuit_producer; + for (size_t idx = 0; idx < 4; ++idx) { + Builder circuit = circuit_producer.create_next_circuit(ivc); ivc.accumulate(circuit); } - EXPECT_TRUE(prove_and_verify(ivc)); + EXPECT_TRUE(ivc.prove_and_verify()); }; /** * @brief Check that the IVC fails if an intermediate fold proof is invalid + * @details When accumulating 4 circuits, there are 3 fold proofs to verify (the first two are recursively verfied and + * the 3rd is verified as part of the IVC proof). Check that if any of one of these proofs is invalid, the IVC will + * fail. * */ -TEST_F(ClientIVCTests, BasicFailure) +TEST_F(ClientIVCTests, BadProofFailure) { - ClientIVC ivc; + // Confirm that the IVC verifies if nothing is tampered with + { + ClientIVC ivc; + ivc.trace_structure = TraceStructure::SMALL_TEST; - // Initialize the IVC with an arbitrary circuit - Builder circuit_0 = create_mock_circuit(ivc); - ivc.accumulate(circuit_0); + MockCircuitProducer circuit_producer; - // Create another circuit and accumulate - Builder circuit_1 = create_mock_circuit(ivc); - ivc.accumulate(circuit_1); + // Construct and accumulate a set of mocked private function execution circuits + size_t NUM_CIRCUITS = 4; + for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) { + auto circuit = circuit_producer.create_next_circuit(ivc, /*log2_num_gates=*/5); + ivc.accumulate(circuit); + } + EXPECT_TRUE(ivc.prove_and_verify()); + } + + // The IVC throws an exception if the FIRST fold proof is tampered with + { + ClientIVC ivc; + ivc.trace_structure = TraceStructure::SMALL_TEST; + + MockCircuitProducer circuit_producer; + + // Construct and accumulate a set of mocked private function execution circuits + size_t NUM_CIRCUITS = 4; + for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) { + if (idx == 3) { // At idx = 3, we've tampered with the one of the folding proofs so create the recursive + // folding verifier will throw an error. + EXPECT_ANY_THROW(circuit_producer.create_next_circuit(ivc, /*log2_num_gates=*/5)); + break; + } + auto circuit = circuit_producer.create_next_circuit(ivc, /*log2_num_gates=*/5); + ivc.accumulate(circuit); + + if (idx == 2) { + EXPECT_EQ(ivc.verification_queue.size(), 2); // two proofs after 3 calls to accumulation + tamper_with_proof(ivc.verification_queue[0].proof); // tamper with first proof + } + } + } - // Tamper with the fold proof just created in the last accumulation step - for (auto& val : ivc.fold_output.proof) { - if (val > 0) { // tamper by finding the first non-zero value and incrementing it by 1 - val += 1; - break; + // The IVC fails if the SECOND fold proof is tampered with + { + ClientIVC ivc; + ivc.trace_structure = TraceStructure::SMALL_TEST; + + MockCircuitProducer circuit_producer; + + // Construct and accumulate a set of mocked private function execution circuits + size_t NUM_CIRCUITS = 4; + for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) { + if (idx == 3) { // At idx = 3, we've tampered with the one of the folding proofs so create the recursive + // folding verifier will throw an error. + EXPECT_ANY_THROW(circuit_producer.create_next_circuit(ivc, /*log2_num_gates=*/5)); + break; + } + auto circuit = circuit_producer.create_next_circuit(ivc, /*log2_num_gates=*/5); + ivc.accumulate(circuit); + + if (idx == 2) { + EXPECT_EQ(ivc.verification_queue.size(), 2); // two proofs after 3 calls to accumulation + tamper_with_proof(ivc.verification_queue[1].proof); // tamper with second proof + } } } - // Accumulate another circuit; this involves recursive folding verification of the bad proof which throws an error - // because of circuit sizes don't match. - Builder circuit_2 = create_mock_circuit(ivc); - EXPECT_ANY_THROW(ivc.accumulate(circuit_2)); + + // The IVC fails if the 3rd/FINAL fold proof is tampered with + { + ClientIVC ivc; + ivc.trace_structure = TraceStructure::SMALL_TEST; + + MockCircuitProducer circuit_producer; + + // Construct and accumulate a set of mocked private function execution circuits + size_t NUM_CIRCUITS = 4; + for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) { + auto circuit = circuit_producer.create_next_circuit(ivc, /*log2_num_gates=*/5); + ivc.accumulate(circuit); + } + + // Only a single proof should be present in the queue when verification of the IVC is performed + EXPECT_EQ(ivc.verification_queue.size(), 1); + tamper_with_proof(ivc.verification_queue[0].proof); // tamper with the final fold proof + + EXPECT_ANY_THROW(ivc.prove_and_verify()); + } + + EXPECT_TRUE(true); }; /** @@ -142,19 +257,17 @@ TEST_F(ClientIVCTests, BasicLarge) { ClientIVC ivc; - // Construct a set of arbitrary circuits - size_t NUM_CIRCUITS = 5; + MockCircuitProducer circuit_producer; + + // Construct and accumulate a set of mocked private function execution circuits + size_t NUM_CIRCUITS = 6; std::vector circuits; for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) { - circuits.emplace_back(create_mock_circuit(ivc)); - } - - // Accumulate each circuit - for (auto& circuit : circuits) { + auto circuit = circuit_producer.create_next_circuit(ivc); ivc.accumulate(circuit); } - EXPECT_TRUE(prove_and_verify(ivc)); + EXPECT_TRUE(ivc.prove_and_verify()); }; /** @@ -166,17 +279,19 @@ TEST_F(ClientIVCTests, BasicStructured) ClientIVC ivc; ivc.trace_structure = TraceStructure::SMALL_TEST; - // Construct some circuits of varying size - Builder circuit_0 = create_mock_circuit(ivc, /*log2_num_gates=*/5); - Builder circuit_1 = create_mock_circuit(ivc, /*log2_num_gates=*/8); - Builder circuit_2 = create_mock_circuit(ivc, /*log2_num_gates=*/11); + MockCircuitProducer circuit_producer; - // The circuits can be accumulated as normal due to the structured trace - ivc.accumulate(circuit_0); - ivc.accumulate(circuit_1); - ivc.accumulate(circuit_2); + size_t NUM_CIRCUITS = 4; - EXPECT_TRUE(prove_and_verify(ivc)); + // Construct and accumulate some circuits of varying size + size_t log2_num_gates = 5; + for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) { + auto circuit = circuit_producer.create_next_circuit(ivc, log2_num_gates); + ivc.accumulate(circuit); + log2_num_gates += 2; + } + + EXPECT_TRUE(ivc.prove_and_verify()); }; /** @@ -187,22 +302,19 @@ TEST_F(ClientIVCTests, PrecomputedVerificationKeys) { ClientIVC ivc; - // Construct a set of arbitrary circuits - size_t NUM_CIRCUITS = 3; - std::vector circuits; - for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) { - circuits.emplace_back(create_mock_circuit(ivc)); - } + size_t NUM_CIRCUITS = 4; + + MockCircuitProducer circuit_producer; - // Precompute the verification keys that will be needed for the IVC - auto precomputed_vkeys = ivc.precompute_folding_verification_keys(circuits); + auto precomputed_vks = circuit_producer.precompute_verification_keys(NUM_CIRCUITS, TraceStructure::NONE); - // Accumulate each circuit using the precomputed VKs - for (auto [circuit, precomputed_vk] : zip_view(circuits, precomputed_vkeys)) { - ivc.accumulate(circuit, precomputed_vk); + // Construct and accumulate set of circuits using the precomputed vkeys + for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) { + auto circuit = circuit_producer.create_next_circuit(ivc); + ivc.accumulate(circuit, precomputed_vks[idx]); } - EXPECT_TRUE(prove_and_verify(ivc)); + EXPECT_TRUE(ivc.prove_and_verify()); }; /** @@ -214,20 +326,19 @@ TEST_F(ClientIVCTests, StructuredPrecomputedVKs) ClientIVC ivc; ivc.trace_structure = TraceStructure::SMALL_TEST; - // Construct a set of arbitrary circuits - size_t NUM_CIRCUITS = 3; - std::vector circuits; - for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) { - circuits.emplace_back(create_mock_circuit(ivc, /*log2_num_gates=*/5)); - } + size_t NUM_CIRCUITS = 4; + size_t log2_num_gates = 5; // number of gates in baseline mocked circuit - // Precompute the (structured) verification keys that will be needed for the IVC - auto precomputed_vkeys = ivc.precompute_folding_verification_keys(circuits); + MockCircuitProducer circuit_producer; - // Accumulate each circuit - for (auto [circuit, precomputed_vk] : zip_view(circuits, precomputed_vkeys)) { - ivc.accumulate(circuit, precomputed_vk); + auto precomputed_vks = + circuit_producer.precompute_verification_keys(NUM_CIRCUITS, ivc.trace_structure, log2_num_gates); + + // Construct and accumulate set of circuits using the precomputed vkeys + for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) { + auto circuit = circuit_producer.create_next_circuit(ivc, log2_num_gates); + ivc.accumulate(circuit, precomputed_vks[idx]); } - EXPECT_TRUE(prove_and_verify(ivc)); + EXPECT_TRUE(ivc.prove_and_verify()); }; diff --git a/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc_auto_verify.test.cpp b/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc_auto_verify.test.cpp new file mode 100644 index 00000000000..5e413362f7b --- /dev/null +++ b/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc_auto_verify.test.cpp @@ -0,0 +1,182 @@ +#include "barretenberg/client_ivc/client_ivc.hpp" +#include "barretenberg/goblin/goblin.hpp" +#include "barretenberg/goblin/mock_circuits.hpp" +#include "barretenberg/stdlib_circuit_builders/mega_circuit_builder.hpp" +#include "barretenberg/stdlib_circuit_builders/ultra_circuit_builder.hpp" + +#include + +using namespace bb; + +// TODO(https://github.com/AztecProtocol/barretenberg/issues/1101): These tests are for the auto_verify_mode version of +// ClientIVC and can be removed altogether when that functionality is removed. +class ClientIVCAutoVerifyTests : public ::testing::Test { + protected: + static void SetUpTestSuite() + { + srs::init_crs_factory("../srs_db/ignition"); + srs::init_grumpkin_crs_factory("../srs_db/grumpkin"); + } + + using Flavor = ClientIVC::Flavor; + using FF = typename Flavor::FF; + using VerificationKey = Flavor::VerificationKey; + using Builder = ClientIVC::ClientCircuit; + using DeciderProvingKey = ClientIVC::DeciderProvingKey; + using DeciderVerificationKey = ClientIVC::DeciderVerificationKey; + using FoldProof = ClientIVC::FoldProof; + using DeciderProver = ClientIVC::DeciderProver; + using DeciderVerifier = ClientIVC::DeciderVerifier; + using DeciderProvingKeys = DeciderProvingKeys_; + using FoldingProver = ProtogalaxyProver_; + using DeciderVerificationKeys = DeciderVerificationKeys_; + using FoldingVerifier = ProtogalaxyVerifier_; + + /** + * @brief Construct mock circuit with arithmetic gates and goblin ops + * @details Currently default sized to 2^16 to match kernel. (Note: dummy op gates added to avoid non-zero + * polynomials will bump size to next power of 2) + * + */ + static Builder create_mock_circuit(ClientIVC& ivc, size_t log2_num_gates = 16) + { + Builder circuit{ ivc.goblin.op_queue }; + MockCircuits::construct_arithmetic_circuit(circuit, log2_num_gates); + + // TODO(https://github.com/AztecProtocol/barretenberg/issues/911): We require goblin ops to be added to the + // function circuit because we cannot support zero commtiments. While the builder handles this at + // finalisation stage via the add_gates_to_ensure_all_polys_are_non_zero function for other MegaHonk + // circuits (where we don't explicitly need to add goblin ops), in ClientIVC merge proving happens prior to + // folding where the absense of goblin ecc ops will result in zero commitments. + MockCircuits::construct_goblin_ecc_op_circuit(circuit); + return circuit; + } +}; + +/** + * @brief A simple-as-possible test demonstrating IVC for two mock circuits + * + */ +TEST_F(ClientIVCAutoVerifyTests, Basic) +{ + ClientIVC ivc; + ivc.auto_verify_mode = true; + + { + // Initialize the IVC with an arbitrary circuit + Builder circuit_0 = create_mock_circuit(ivc); + ivc.accumulate(circuit_0); + } + + { + // Create another circuit and accumulate + Builder circuit_1 = create_mock_circuit(ivc); + ivc.accumulate(circuit_1); + } + + EXPECT_TRUE(ivc.prove_and_verify()); +}; + +/** + * @brief Prove and verify accumulation of an arbitrary set of circuits + * + */ +TEST_F(ClientIVCAutoVerifyTests, BasicLarge) +{ + ClientIVC ivc; + ivc.auto_verify_mode = true; + + // Construct a set of arbitrary circuits + size_t NUM_CIRCUITS = 6; + std::vector circuits; + for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) { + circuits.emplace_back(create_mock_circuit(ivc)); + } + + // Accumulate each circuit + for (auto& circuit : circuits) { + ivc.accumulate(circuit); + } + + EXPECT_TRUE(ivc.prove_and_verify()); +}; + +/** + * @brief Using a structured trace allows for the accumulation of circuits of varying size + * + */ +TEST_F(ClientIVCAutoVerifyTests, BasicStructured) +{ + ClientIVC ivc; + ivc.auto_verify_mode = true; + ivc.trace_structure = TraceStructure::SMALL_TEST; + + // Construct some circuits of varying size + Builder circuit_0 = create_mock_circuit(ivc, /*log2_num_gates=*/5); + Builder circuit_1 = create_mock_circuit(ivc, /*log2_num_gates=*/8); + Builder circuit_2 = create_mock_circuit(ivc, /*log2_num_gates=*/11); + Builder circuit_3 = create_mock_circuit(ivc, /*log2_num_gates=*/11); + + // The circuits can be accumulated as normal due to the structured trace + ivc.accumulate(circuit_0); + ivc.accumulate(circuit_1); + ivc.accumulate(circuit_2); + ivc.accumulate(circuit_3); + + EXPECT_TRUE(ivc.prove_and_verify()); +}; + +/** + * @brief Prove and verify accumulation of an arbitrary set of circuits using precomputed verification keys + * + */ +TEST_F(ClientIVCAutoVerifyTests, PrecomputedVerificationKeys) +{ + ClientIVC ivc; + ivc.auto_verify_mode = true; + + // Construct a set of arbitrary circuits + size_t NUM_CIRCUITS = 4; + std::vector circuits; + for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) { + circuits.emplace_back(create_mock_circuit(ivc)); + } + + // Precompute the verification keys that will be needed for the IVC + auto precomputed_vkeys = ivc.precompute_folding_verification_keys(circuits); + + // Accumulate each circuit using the precomputed VKs + for (auto [circuit, precomputed_vk] : zip_view(circuits, precomputed_vkeys)) { + ivc.accumulate(circuit, precomputed_vk); + } + + EXPECT_TRUE(ivc.prove_and_verify()); +}; + +/** + * @brief Perform accumulation with a structured trace and precomputed verification keys + * + */ +TEST_F(ClientIVCAutoVerifyTests, StructuredPrecomputedVKs) +{ + ClientIVC ivc; + ivc.auto_verify_mode = true; + ivc.trace_structure = TraceStructure::SMALL_TEST; + + // Construct a set of arbitrary circuits + size_t NUM_CIRCUITS = 4; + std::vector circuits; + for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) { + circuits.emplace_back(create_mock_circuit(ivc, /*log2_num_gates=*/5)); + } + + // Precompute the (structured) verification keys that will be needed for the IVC + auto precomputed_vkeys = ivc.precompute_folding_verification_keys(circuits); + + // Accumulate each circuit + for (auto [circuit, precomputed_vk] : zip_view(circuits, precomputed_vkeys)) { + ivc.accumulate(circuit, precomputed_vk); + } + + EXPECT_TRUE(ivc.prove_and_verify()); +}; diff --git a/barretenberg/cpp/src/barretenberg/aztec_ivc/aztec_ivc_integration.test.cpp b/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc_integration.test.cpp similarity index 82% rename from barretenberg/cpp/src/barretenberg/aztec_ivc/aztec_ivc_integration.test.cpp rename to barretenberg/cpp/src/barretenberg/client_ivc/client_ivc_integration.test.cpp index 55eca16b126..aae13a136a2 100644 --- a/barretenberg/cpp/src/barretenberg/aztec_ivc/aztec_ivc_integration.test.cpp +++ b/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc_integration.test.cpp @@ -1,5 +1,5 @@ -#include "barretenberg/aztec_ivc/aztec_ivc.hpp" -#include "barretenberg/aztec_ivc/mock_circuit_producer.hpp" +#include "barretenberg/client_ivc/client_ivc.hpp" +#include "barretenberg/client_ivc/mock_circuit_producer.hpp" #include "barretenberg/goblin/goblin.hpp" #include "barretenberg/goblin/mock_circuits.hpp" #include "barretenberg/stdlib_circuit_builders/mega_circuit_builder.hpp" @@ -13,7 +13,7 @@ using namespace bb; * @brief A test suite that mirrors the logic in the nominal IVC benchmark case * */ -class AztecIVCIntegrationTests : public ::testing::Test { +class ClientIVCIntegrationTests : public ::testing::Test { protected: static void SetUpTestSuite() { @@ -21,10 +21,10 @@ class AztecIVCIntegrationTests : public ::testing::Test { srs::init_grumpkin_crs_factory("../srs_db/grumpkin"); } - using Flavor = AztecIVC::Flavor; + using Flavor = ClientIVC::Flavor; using FF = typename Flavor::FF; using VerificationKey = Flavor::VerificationKey; - using Builder = AztecIVC::ClientCircuit; + using Builder = ClientIVC::ClientCircuit; using MockCircuitProducer = PrivateFunctionExecutionMockCircuitProducer; }; @@ -34,10 +34,10 @@ class AztecIVCIntegrationTests : public ::testing::Test { * circuits total (3 app, 3 kernel) to save time. * */ -TEST_F(AztecIVCIntegrationTests, BenchmarkCaseSimple) +TEST_F(ClientIVCIntegrationTests, BenchmarkCaseSimple) { - AztecIVC ivc; - ivc.trace_structure = TraceStructure::AZTEC_IVC_BENCH; + ClientIVC ivc; + ivc.trace_structure = TraceStructure::CLIENT_IVC_BENCH; MockCircuitProducer circuit_producer; @@ -57,10 +57,10 @@ TEST_F(AztecIVCIntegrationTests, BenchmarkCaseSimple) * verification keys * */ -TEST_F(AztecIVCIntegrationTests, BenchmarkCasePrecomputedVKs) +TEST_F(ClientIVCIntegrationTests, BenchmarkCasePrecomputedVKs) { - AztecIVC ivc; - ivc.trace_structure = TraceStructure::AZTEC_IVC_BENCH; + ClientIVC ivc; + ivc.trace_structure = TraceStructure::CLIENT_IVC_BENCH; size_t NUM_CIRCUITS = 6; @@ -87,10 +87,10 @@ TEST_F(AztecIVCIntegrationTests, BenchmarkCasePrecomputedVKs) * causes failure of the IVC to verify. * */ -TEST_F(AztecIVCIntegrationTests, DatabusFailure) +TEST_F(ClientIVCIntegrationTests, DatabusFailure) { - AztecIVC ivc; - ivc.trace_structure = TraceStructure::AZTEC_IVC_BENCH; + ClientIVC ivc; + ivc.trace_structure = TraceStructure::CLIENT_IVC_BENCH; MockCircuitProducer circuit_producer; diff --git a/barretenberg/cpp/src/barretenberg/aztec_ivc/mock_circuit_producer.hpp b/barretenberg/cpp/src/barretenberg/client_ivc/mock_circuit_producer.hpp similarity index 95% rename from barretenberg/cpp/src/barretenberg/aztec_ivc/mock_circuit_producer.hpp rename to barretenberg/cpp/src/barretenberg/client_ivc/mock_circuit_producer.hpp index d7d52342e0f..5946a222bff 100644 --- a/barretenberg/cpp/src/barretenberg/aztec_ivc/mock_circuit_producer.hpp +++ b/barretenberg/cpp/src/barretenberg/client_ivc/mock_circuit_producer.hpp @@ -1,5 +1,5 @@ -#include "barretenberg/aztec_ivc/aztec_ivc.hpp" +#include "barretenberg/client_ivc/client_ivc.hpp" #include "barretenberg/common/op_count.hpp" #include "barretenberg/goblin/mock_circuits.hpp" #include "barretenberg/stdlib_circuit_builders/ultra_circuit_builder.hpp" @@ -17,7 +17,7 @@ namespace { */ class MockDatabusProducer { private: - using ClientCircuit = AztecIVC::ClientCircuit; + using ClientCircuit = ClientIVC::ClientCircuit; using Flavor = MegaFlavor; using FF = Flavor::FF; using BusDataArray = std::vector; @@ -83,7 +83,7 @@ class MockDatabusProducer { * checks. */ class PrivateFunctionExecutionMockCircuitProducer { - using ClientCircuit = AztecIVC::ClientCircuit; + using ClientCircuit = ClientIVC::ClientCircuit; using Flavor = MegaFlavor; using VerificationKey = Flavor::VerificationKey; @@ -95,7 +95,7 @@ class PrivateFunctionExecutionMockCircuitProducer { /** * @brief Create a the next circuit (app/kernel) in a mocked private function execution stack */ - ClientCircuit create_next_circuit(AztecIVC& ivc) + ClientCircuit create_next_circuit(ClientIVC& ivc) { circuit_counter++; @@ -131,7 +131,7 @@ class PrivateFunctionExecutionMockCircuitProducer { */ auto precompute_verification_keys(const size_t num_circuits, TraceStructure trace_structure) { - AztecIVC ivc; // temporary IVC instance needed to produce the complete kernel circuits + ClientIVC ivc; // temporary IVC instance needed to produce the complete kernel circuits ivc.trace_structure = trace_structure; std::vector> vkeys; diff --git a/barretenberg/cpp/src/barretenberg/client_ivc/mock_kernel_pinning.test.cpp b/barretenberg/cpp/src/barretenberg/client_ivc/mock_kernel_pinning.test.cpp index 73297e499ec..2dc33189cbc 100644 --- a/barretenberg/cpp/src/barretenberg/client_ivc/mock_kernel_pinning.test.cpp +++ b/barretenberg/cpp/src/barretenberg/client_ivc/mock_kernel_pinning.test.cpp @@ -1,4 +1,5 @@ #include "barretenberg/client_ivc/client_ivc.hpp" +#include "barretenberg/client_ivc/mock_circuit_producer.hpp" #include "barretenberg/goblin/mock_circuits.hpp" #include "barretenberg/stdlib_circuit_builders/mega_circuit_builder.hpp" @@ -14,6 +15,7 @@ using namespace bb; class MockKernelTest : public ::testing::Test { public: using Builder = MegaCircuitBuilder; + using MockCircuitProducer = PrivateFunctionExecutionMockCircuitProducer; protected: static void SetUpTestSuite() { srs::init_crs_factory("../srs_db/ignition"); } @@ -22,20 +24,17 @@ class MockKernelTest : public ::testing::Test { TEST_F(MockKernelTest, PinFoldingKernelSizes) { ClientIVC ivc; + ivc.trace_structure = TraceStructure::CLIENT_IVC_BENCH; - // Construct two function circuits and a kernel circuit - Builder circuit_1{ ivc.goblin.op_queue }; - Builder circuit_2{ ivc.goblin.op_queue }; - Builder kernel_circuit{ ivc.goblin.op_queue }; + MockCircuitProducer circuit_producer; - GoblinMockCircuits::construct_mock_function_circuit(circuit_1); - GoblinMockCircuits::construct_mock_function_circuit(circuit_2); - GoblinMockCircuits::construct_mock_folding_kernel(kernel_circuit); + // Construct and accumulate a series of mocked private function execution circuits + size_t NUM_CIRCUITS = 4; + for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) { + Builder circuit = circuit_producer.create_next_circuit(ivc); - // Accumulate all three; The kernel will contain a single recursive folding verifier - ivc.accumulate(circuit_1); - ivc.accumulate(circuit_2); - ivc.accumulate(kernel_circuit); + ivc.accumulate(circuit); + } - EXPECT_EQ(ivc.fold_output.accumulator->proving_key.log_circuit_size, 17); + EXPECT_EQ(ivc.fold_output.accumulator->proving_key.log_circuit_size, 19); } \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/commitment_key.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/commitment_key.hpp index 567c32c5ba4..c713e58be37 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/commitment_key.hpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/commitment_key.hpp @@ -124,19 +124,19 @@ template class CommitmentKey { // Extract the precomputed point table (contains raw SRS points at even indices and the corresponding // endomorphism point (\beta*x, -y) at odd indices). We offset by polynomial.start_index * 2 to align - // with our polynomial spann. + // with our polynomial span. std::span point_table = srs->get_monomial_points().subspan(polynomial.start_index * 2); // Define structures needed to multithread the extraction of non-zero inputs - const size_t num_threads = poly_size >= get_num_cpus_pow2() ? get_num_cpus_pow2() : 1; - const size_t block_size = poly_size / num_threads; + const size_t num_threads = calculate_num_threads(poly_size); + const size_t block_size = (poly_size + num_threads - 1) / num_threads; // round up std::vector> thread_scalars(num_threads); std::vector> thread_points(num_threads); // Loop over all polynomial coefficients and keep {point, scalar} pairs for which scalar != 0 parallel_for(num_threads, [&](size_t thread_idx) { const size_t start = thread_idx * block_size; - const size_t end = (thread_idx + 1) * block_size; + const size_t end = std::min(poly_size, (thread_idx + 1) * block_size); for (size_t idx = start; idx < end; ++idx) { diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/commitment_key.test.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/commitment_key.test.hpp index 76956dd7ae9..16464cda07f 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/commitment_key.test.hpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/commitment_key.test.hpp @@ -81,15 +81,6 @@ template class CommitmentTest : public ::testing::Test { return { x, y }; } - std::pair, Polynomial> random_claim(const size_t n) - { - auto polynomial = Polynomial::random(n); - auto opening_pair = random_eval(polynomial); - auto commitment = commit(polynomial); - auto opening_claim = OpeningClaim{ opening_pair, commitment }; - return { opening_claim, polynomial }; - }; - std::vector random_evaluation_point(const size_t num_variables) { std::vector u(num_variables); @@ -106,7 +97,6 @@ template class CommitmentTest : public ::testing::Test { Fr y_expected = witness.evaluate(x); EXPECT_EQ(y, y_expected) << "OpeningClaim: evaluations mismatch"; Commitment commitment_expected = commit(witness); - // found it EXPECT_EQ(commitment, commitment_expected) << "OpeningClaim: commitment mismatch"; } @@ -139,14 +129,12 @@ template class CommitmentTest : public ::testing::Test { * @brief Ensures that a set of opening pairs is correct by checking that evaluations are * correct by recomputing them from each witness polynomial. */ - void verify_batch_opening_pair(std::span> opening_pairs, - std::span witnesses) + void verify_batch_opening_pair(std::vector> opening_claims) { - const size_t num_pairs = opening_pairs.size(); - ASSERT_EQ(witnesses.size(), num_pairs); - - for (size_t j = 0; j < num_pairs; ++j) { - this->verify_opening_pair(opening_pairs[j], witnesses[j]); + for (auto claim : opening_claims) { + auto& [x, y] = claim.opening_pair; + Fr y_expected = claim.polynomial.evaluate(x); + EXPECT_EQ(y, y_expected) << "OpeningPair: evaluations mismatch"; } } diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/gemini/gemini.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/gemini/gemini.cpp index 679857e1d66..982c37c5682 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/gemini/gemini.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/gemini/gemini.cpp @@ -1,191 +1,6 @@ - -#include "gemini.hpp" #include "barretenberg/common/thread.hpp" - -#include -#include -#include - -/** - * @brief Protocol for opening several multi-linear polynomials at the same point. - * - * - * m = number of variables - * n = 2ᵐ - * u = (u₀,...,uₘ₋₁) - * f₀, …, fₖ₋₁ = multilinear polynomials, - * g₀, …, gₕ₋₁ = shifted multilinear polynomial, - * Each gⱼ is the left-shift of some f↺ᵢ, and gⱼ points to the same memory location as fᵢ. - * v₀, …, vₖ₋₁, v↺₀, …, v↺ₕ₋₁ = multilinear evalutions s.t. fⱼ(u) = vⱼ, and gⱼ(u) = f↺ⱼ(u) = v↺ⱼ - * - * We use a challenge ρ to create a random linear combination of all fⱼ, - * and actually define A₀ = F + G↺, where - * F = ∑ⱼ ρʲ fⱼ - * G = ∑ⱼ ρᵏ⁺ʲ gⱼ, - * G↺ = is the shift of G - * where fⱼ is normal, and gⱼ is shifted. - * The evaluations are also batched, and - * v = ∑ ρʲ⋅vⱼ + ∑ ρᵏ⁺ʲ⋅v↺ⱼ = F(u) + G↺(u) - * - * The prover then creates the folded polynomials A₀, ..., Aₘ₋₁, - * and opens them at different points, as univariates. - * - * We open A₀ as univariate at r and -r. - * Since A₀ = F + G↺, but the verifier only has commitments to the gⱼs, - * we need to partially evaluate A₀ at both evaluation points. - * As univariate, we have - * A₀(X) = F(X) + G↺(X) = F(X) + G(X)/X - * So we define - * - A₀₊(X) = F(X) + G(X)/r - * - A₀₋(X) = F(X) − G(X)/r - * So that A₀₊(r) = A₀(r) and A₀₋(-r) = A₀(-r). - * The verifier is able to computed the simulated commitments to A₀₊(X) and A₀₋(X) - * since they are linear-combinations of the commitments [fⱼ] and [gⱼ]. - */ +#include "gemini_impl.hpp" namespace bb { - -/** - * @brief Computes d-1 fold polynomials Fold_i, i = 1, ..., d-1 - * - * @param mle_opening_point multilinear opening point 'u' - * @param batched_unshifted F(X) = ∑ⱼ ρʲ fⱼ(X) - * @param batched_to_be_shifted G(X) = ∑ⱼ ρᵏ⁺ʲ gⱼ(X) - * @return std::vector - */ -template -std::vector::Polynomial> GeminiProver_::compute_gemini_polynomials( - std::span mle_opening_point, Polynomial&& batched_unshifted, Polynomial&& batched_to_be_shifted) -{ - const size_t num_variables = mle_opening_point.size(); // m - - const size_t num_threads = get_num_cpus_pow2(); - constexpr size_t efficient_operations_per_thread = 64; // A guess of the number of operation for which there - // would be a point in sending them to a separate thread - - // Allocate space for m+1 Fold polynomials - // - // The first two are populated here with the batched unshifted and to-be-shifted polynomial respectively. - // They will eventually contain the full batched polynomial A₀ partially evaluated at the challenges r,-r. - // This function populates the other m-1 polynomials with the foldings of A₀. - std::vector gemini_polynomials; - gemini_polynomials.reserve(num_variables + 1); - - // F(X) = ∑ⱼ ρʲ fⱼ(X) and G(X) = ∑ⱼ ρᵏ⁺ʲ gⱼ(X) - Polynomial& batched_F = gemini_polynomials.emplace_back(std::move(batched_unshifted)); - Polynomial& batched_G = gemini_polynomials.emplace_back(std::move(batched_to_be_shifted)); - constexpr size_t offset_to_folded = 2; // Offset because of F an G - // A₀(X) = F(X) + G↺(X) = F(X) + G(X)/X. - Polynomial A_0 = batched_F; - A_0 += batched_G.shifted(); - - // Allocate everything before parallel computation - for (size_t l = 0; l < num_variables - 1; ++l) { - // size of the previous polynomial/2 - const size_t n_l = 1 << (num_variables - l - 1); - - // A_l_fold = Aₗ₊₁(X) = (1-uₗ)⋅even(Aₗ)(X) + uₗ⋅odd(Aₗ)(X) - gemini_polynomials.emplace_back(Polynomial(n_l)); - } - - // A_l = Aₗ(X) is the polynomial being folded - // in the first iteration, we take the batched polynomial - // in the next iteration, it is the previously folded one - auto A_l = A_0.data(); - for (size_t l = 0; l < num_variables - 1; ++l) { - // size of the previous polynomial/2 - const size_t n_l = 1 << (num_variables - l - 1); - - // Use as many threads as it is useful so that 1 thread doesn't process 1 element, but make sure that there is - // at least 1 - size_t num_used_threads = std::min(n_l / efficient_operations_per_thread, num_threads); - num_used_threads = num_used_threads ? num_used_threads : 1; - size_t chunk_size = n_l / num_used_threads; - size_t last_chunk_size = (n_l % chunk_size) ? (n_l % num_used_threads) : chunk_size; - - // Openning point is the same for all - const Fr u_l = mle_opening_point[l]; - - // A_l_fold = Aₗ₊₁(X) = (1-uₗ)⋅even(Aₗ)(X) + uₗ⋅odd(Aₗ)(X) - auto A_l_fold = gemini_polynomials[l + offset_to_folded].data(); - - parallel_for(num_used_threads, [&](size_t i) { - size_t current_chunk_size = (i == (num_used_threads - 1)) ? last_chunk_size : chunk_size; - for (std::ptrdiff_t j = (std::ptrdiff_t)(i * chunk_size); - j < (std::ptrdiff_t)((i * chunk_size) + current_chunk_size); - j++) { - // fold(Aₗ)[j] = (1-uₗ)⋅even(Aₗ)[j] + uₗ⋅odd(Aₗ)[j] - // = (1-uₗ)⋅Aₗ[2j] + uₗ⋅Aₗ[2j+1] - // = Aₗ₊₁[j] - A_l_fold[j] = A_l[j << 1] + u_l * (A_l[(j << 1) + 1] - A_l[j << 1]); - } - }); - // set Aₗ₊₁ = Aₗ for the next iteration - A_l = A_l_fold; - } - - return gemini_polynomials; -}; - -/** - * @brief Computes/aggragates d+1 Fold polynomials and their opening pairs (challenge, evaluation) - * - * @details This function assumes that, upon input, last d-1 entries in gemini_polynomials are Fold_i. - * The first two entries are assumed to be, respectively, the batched unshifted and batched to-be-shifted - * polynomials F(X) = ∑ⱼ ρʲfⱼ(X) and G(X) = ∑ⱼ ρᵏ⁺ʲ gⱼ(X). This function completes the computation - * of the first two Fold polynomials as F + G/r and F - G/r. It then evaluates each of the d+1 - * fold polynomials at, respectively, the points r, rₗ = r^{2ˡ} for l = 0, 1, ..., d-1. - * - * @param mle_opening_point u = (u₀,...,uₘ₋₁) is the MLE opening point - * @param gemini_polynomials vector of polynomials whose first two elements are F(X) = ∑ⱼ ρʲfⱼ(X) - * and G(X) = ∑ⱼ ρᵏ⁺ʲ gⱼ(X), and the next d-1 elements are Fold_i, i = 1, ..., d-1. - * @param r_challenge univariate opening challenge - */ -template -GeminiProverOutput GeminiProver_::compute_fold_polynomial_evaluations( - std::span mle_opening_point, std::vector&& gemini_polynomials, const Fr& r_challenge) -{ - const size_t num_variables = mle_opening_point.size(); // m - - Polynomial& batched_F = gemini_polynomials[0]; // F(X) = ∑ⱼ ρʲ fⱼ(X) - Polynomial& batched_G = gemini_polynomials[1]; // G(X) = ∑ⱼ ρᵏ⁺ʲ gⱼ(X) - - // Compute univariate opening queries rₗ = r^{2ˡ} for l = 0, 1, ..., m-1 - std::vector r_squares = gemini::powers_of_evaluation_challenge(r_challenge, num_variables); - - // Compute G/r - Fr r_inv = r_challenge.invert(); - batched_G *= r_inv; - - // Construct A₀₊ = F + G/r and A₀₋ = F - G/r in place in gemini_polynomials - Polynomial tmp = batched_F; - Polynomial& A_0_pos = gemini_polynomials[0]; - - // A₀₊(X) = F(X) + G(X)/r, s.t. A₀₊(r) = A₀(r) - A_0_pos += batched_G; - - // Perform a swap so that tmp = G(X)/r and A_0_neg = F(X) - std::swap(tmp, batched_G); - Polynomial& A_0_neg = gemini_polynomials[1]; - - // A₀₋(X) = F(X) - G(X)/r, s.t. A₀₋(-r) = A₀(-r) - A_0_neg -= tmp; - - std::vector> fold_poly_opening_pairs; - fold_poly_opening_pairs.reserve(num_variables + 1); - - // Compute first opening pair {r, A₀(r)} - fold_poly_opening_pairs.emplace_back( - OpeningPair{ r_challenge, gemini_polynomials[0].evaluate(r_challenge) }); - - // Compute the remaining m opening pairs {−r^{2ˡ}, Aₗ(−r^{2ˡ})}, l = 0, ..., m-1. - for (size_t l = 0; l < num_variables; ++l) { - fold_poly_opening_pairs.emplace_back( - OpeningPair{ -r_squares[l], gemini_polynomials[l + 1].evaluate(-r_squares[l]) }); - } - - return { fold_poly_opening_pairs, std::move(gemini_polynomials) }; -}; - template class GeminiProver_; template class GeminiProver_; -}; // namespace bb +}; // namespace bb \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/gemini/gemini.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/gemini/gemini.hpp index bc3034bc753..0766722893e 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/gemini/gemini.hpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/gemini/gemini.hpp @@ -1,11 +1,9 @@ #pragma once -#include "../claim.hpp" +#include "barretenberg/commitment_schemes/claim.hpp" #include "barretenberg/polynomials/polynomial.hpp" #include "barretenberg/transcript/transcript.hpp" -#include - /** * @brief Protocol for opening several multi-linear polynomials at the same point. * @@ -57,10 +55,6 @@ namespace bb { * ] * @tparam Curve CommitmentScheme parameters */ -template struct GeminiProverOutput { - std::vector> opening_pairs; - std::vector> witnesses; -}; namespace gemini { /** @@ -102,15 +96,25 @@ template inline std::vector powers_of_evaluation_challenge(const template class GeminiProver_ { using Fr = typename Curve::ScalarField; using Polynomial = bb::Polynomial; + using Claim = ProverOpeningClaim; public: - static std::vector compute_gemini_polynomials(std::span mle_opening_point, - Polynomial&& batched_unshifted, - Polynomial&& batched_to_be_shifted); + static std::vector compute_fold_polynomials(const size_t log_N, + std::span multilinear_challenge, + Polynomial&& batched_unshifted, + Polynomial&& batched_to_be_shifted); + + static std::vector compute_fold_polynomial_evaluations(const size_t log_N, + std::vector&& fold_polynomials, + const Fr& r_challenge); - static GeminiProverOutput compute_fold_polynomial_evaluations(std::span mle_opening_point, - std::vector&& gemini_polynomials, - const Fr& r_challenge); + template + static std::vector prove(const Fr circuit_size, + RefSpan f_polynomials, + RefSpan g_polynomials, + std::span multilinear_challenge, + const std::shared_ptr>& commitment_key, + const std::shared_ptr& transcript); }; // namespace bb template class GeminiVerifier_ { @@ -122,25 +126,45 @@ template class GeminiVerifier_ { /** * @brief Returns univariate opening claims for the Fold polynomials to be checked later * - * @param mle_opening_point the MLE evaluation point u + * @param multilinear_evaluations the MLE evaluation point u * @param batched_evaluation batched evaluation from multivariate evals at the point u - * @param batched_f batched commitment to unshifted polynomials - * @param batched_g batched commitment to to-be-shifted polynomials + * @param batched_commitment_unshifted batched commitment to unshifted polynomials + * @param batched_commitment_to_be_shifted batched commitment to to-be-shifted polynomials * @param proof commitments to the m-1 folded polynomials, and alleged evaluations. * @param transcript * @return Fold polynomial opening claims: (r, A₀(r), C₀₊), (-r, A₀(-r), C₀₋), and * (Cⱼ, Aⱼ(-r^{2ʲ}), -r^{2}), j = [1, ..., m-1] */ - static std::vector> reduce_verification(std::span mle_opening_point, /* u */ - Fr& batched_evaluation, /* all */ - GroupElement& batched_f, /* unshifted */ - GroupElement& batched_g, /* to-be-shifted */ + static std::vector> reduce_verification(std::span multilinear_challenge, + std::span multilinear_evaluations, + RefSpan unshifted_commitments, + RefSpan to_be_shifted_commitments, auto& transcript) { - const size_t num_variables = mle_opening_point.size(); + const size_t num_variables = multilinear_challenge.size(); + + Fr rho = transcript->template get_challenge("rho"); + std::vector rhos = gemini::powers_of_rho(rho, multilinear_evaluations.size()); + + GroupElement batched_commitment_unshifted = GroupElement::zero(); + GroupElement batched_commitment_to_be_shifted = GroupElement::zero(); + + Fr batched_evaluation = Fr::zero(); + for (size_t i = 0; i < multilinear_evaluations.size(); ++i) { + batched_evaluation += multilinear_evaluations[i] * rhos[i]; + } + + const size_t num_unshifted = unshifted_commitments.size(); + const size_t num_to_be_shifted = to_be_shifted_commitments.size(); + for (size_t i = 0; i < num_unshifted; i++) { + batched_commitment_unshifted += unshifted_commitments[i] * rhos[i]; + } + for (size_t i = 0; i < num_to_be_shifted; i++) { + batched_commitment_to_be_shifted += to_be_shifted_commitments[i] * rhos[num_unshifted + i]; + } // Get polynomials Fold_i, i = 1,...,m-1 from transcript - const std::vector commitments = get_gemini_commitments(num_variables, transcript); + const std::vector commitments = get_fold_commitments(num_variables, transcript); // compute vector of powers of random evaluation point r const Fr r = transcript->template get_challenge("Gemini:r"); @@ -149,12 +173,13 @@ template class GeminiVerifier_ { // Get evaluations a_i, i = 0,...,m-1 from transcript const std::vector evaluations = get_gemini_evaluations(num_variables, transcript); // Compute evaluation A₀(r) - auto a_0_pos = - compute_gemini_batched_univariate_evaluation(batched_evaluation, mle_opening_point, r_squares, evaluations); + auto a_0_pos = compute_gemini_batched_univariate_evaluation( + num_variables, batched_evaluation, multilinear_challenge, r_squares, evaluations); // C₀_r_pos = ∑ⱼ ρʲ⋅[fⱼ] + r⁻¹⋅∑ⱼ ρᵏ⁺ʲ [gⱼ] // C₀_r_pos = ∑ⱼ ρʲ⋅[fⱼ] - r⁻¹⋅∑ⱼ ρᵏ⁺ʲ [gⱼ] - auto [c0_r_pos, c0_r_neg] = compute_simulated_commitments(batched_f, batched_g, r); + auto [c0_r_pos, c0_r_neg] = + compute_simulated_commitments(batched_commitment_unshifted, batched_commitment_to_be_shifted, r); std::vector> fold_polynomial_opening_claims; fold_polynomial_opening_claims.reserve(num_variables + 1); @@ -172,22 +197,22 @@ template class GeminiVerifier_ { return fold_polynomial_opening_claims; } - static std::vector get_gemini_commitments(const size_t log_circuit_size, auto& transcript) + static std::vector get_fold_commitments(const size_t log_circuit_size, auto& transcript) { - std::vector gemini_commitments; - gemini_commitments.reserve(log_circuit_size - 1); + std::vector fold_commitments; + fold_commitments.reserve(log_circuit_size - 1); for (size_t i = 0; i < log_circuit_size - 1; ++i) { const Commitment commitment = transcript->template receive_from_prover("Gemini:FOLD_" + std::to_string(i + 1)); - gemini_commitments.emplace_back(commitment); + fold_commitments.emplace_back(commitment); } - return gemini_commitments; + return fold_commitments; } static std::vector get_gemini_evaluations(const size_t log_circuit_size, auto& transcript) { std::vector gemini_evaluations; gemini_evaluations.reserve(log_circuit_size); - for (size_t i = 0; i < log_circuit_size; ++i) { + for (size_t i = 1; i <= log_circuit_size; ++i) { const Fr evaluation = transcript->template receive_from_prover("Gemini:a_" + std::to_string(i)); gemini_evaluations.emplace_back(evaluation); } @@ -216,12 +241,13 @@ template class GeminiVerifier_ { * @param fold_polynomial_evals Evaluations \f$ A_{i-1}(-r^{2^{i-1}}) \f$. * @return Evaluation \f$ A_0(r) \f$. */ - static Fr compute_gemini_batched_univariate_evaluation(Fr& batched_eval_accumulator, + static Fr compute_gemini_batched_univariate_evaluation(size_t evaluation_point_size, + Fr& batched_eval_accumulator, std::span evaluation_point, std::span challenge_powers, std::span fold_polynomial_evals) { - const size_t num_variables = evaluation_point.size(); + const size_t num_variables = evaluation_point_size; const auto& evals = fold_polynomial_evals; @@ -246,14 +272,13 @@ template class GeminiVerifier_ { /** * @brief Computes two commitments to A₀ partially evaluated in r and -r. * - * @param batched_f batched commitment to non-shifted polynomials - * @param batched_g batched commitment to to-be-shifted polynomials + * @param batched_commitment_unshifted batched commitment to non-shifted polynomials + * @param batched_commitment_to_be_shifted batched commitment to to-be-shifted polynomials * @param r evaluation point at which we have partially evaluated A₀ at r and -r. * @return std::pair c0_r_pos, c0_r_neg */ - static std::pair compute_simulated_commitments(GroupElement& batched_f, - GroupElement& batched_g, - Fr r) + static std::pair compute_simulated_commitments( + GroupElement& batched_commitment_unshifted, GroupElement& batched_commitment_to_be_shifted, Fr r) { // C₀ᵣ₊ = [F] + r⁻¹⋅[G] GroupElement C0_r_pos; @@ -265,7 +290,7 @@ template class GeminiVerifier_ { // TODO(#673): The following if-else represents the stldib/native code paths. Once the "native" verifier is // achieved through a builder Simulator, the stdlib codepath should become the only codepath. if constexpr (Curve::is_stdlib_type) { - std::vector commitments = { batched_f, batched_g }; + std::vector commitments = { batched_commitment_unshifted, batched_commitment_to_be_shifted }; auto builder = r.get_context(); auto one = Fr(builder, 1); // TODO(#707): these batch muls include the use of 1 as a scalar. This is handled appropriately as a non-mul @@ -274,12 +299,12 @@ template class GeminiVerifier_ { C0_r_pos = GroupElement::batch_mul(commitments, { one, r_inv }); C0_r_neg = GroupElement::batch_mul(commitments, { one, -r_inv }); } else { - C0_r_pos = batched_f; - C0_r_neg = batched_f; - if (!batched_g.is_point_at_infinity()) { - batched_g = batched_g * r_inv; - C0_r_pos += batched_g; - C0_r_neg -= batched_g; + C0_r_pos = batched_commitment_unshifted; + C0_r_neg = batched_commitment_unshifted; + if (!batched_commitment_to_be_shifted.is_point_at_infinity()) { + batched_commitment_to_be_shifted = batched_commitment_to_be_shifted * r_inv; + C0_r_pos += batched_commitment_to_be_shifted; + C0_r_neg -= batched_commitment_to_be_shifted; } } diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/gemini/gemini.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/gemini/gemini.test.cpp index 1da66356c64..ebb8e2ccb2e 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/gemini/gemini.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/gemini/gemini.test.cpp @@ -1,11 +1,8 @@ -#include "gemini.hpp" +#include "gemini_impl.hpp" #include "../commitment_key.test.hpp" #include "barretenberg/polynomials/polynomial.hpp" #include "barretenberg/transcript/transcript.hpp" -#include -#include -#include using namespace bb; @@ -16,67 +13,27 @@ template class GeminiTest : public CommitmentTest { using GroupElement = typename Curve::Element; public: - void execute_gemini_and_verify_claims(size_t log_n, - std::vector multilinear_evaluation_point, - std::vector multilinear_evaluations, - std::vector> multilinear_polynomials, - std::vector> multilinear_polynomials_to_be_shifted, - std::vector multilinear_commitments, - std::vector multilinear_commitments_to_be_shifted) + void execute_gemini_and_verify_claims(std::vector& multilinear_evaluation_point, + std::vector& multilinear_evaluations, + RefSpan> multilinear_polynomials, + RefSpan> multilinear_polynomials_to_be_shifted, + RefVector multilinear_commitments, + RefVector multilinear_commitments_to_be_shifted) { auto prover_transcript = NativeTranscript::prover_init_empty(); - const Fr rho = Fr::random_element(); - - std::vector rhos = gemini::powers_of_rho(rho, multilinear_evaluations.size()); - - // Compute batched multivariate evaluation - Fr batched_evaluation = Fr::zero(); - for (size_t i = 0; i < multilinear_evaluations.size(); ++i) { - batched_evaluation += multilinear_evaluations[i] * rhos[i]; - } - - Polynomial batched_unshifted(1 << log_n); - Polynomial batched_to_be_shifted = Polynomial::shiftable(1 << log_n); - GroupElement batched_commitment_unshifted = GroupElement::zero(); - GroupElement batched_commitment_to_be_shifted = GroupElement::zero(); - const size_t num_unshifted = multilinear_polynomials.size(); - const size_t num_shifted = multilinear_polynomials_to_be_shifted.size(); - for (size_t i = 0; i < num_unshifted; ++i) { - batched_unshifted.add_scaled(multilinear_polynomials[i], rhos[i]); - batched_commitment_unshifted += multilinear_commitments[i] * rhos[i]; - } - for (size_t i = 0; i < num_shifted; ++i) { - size_t rho_idx = num_unshifted + i; - batched_to_be_shifted.add_scaled(multilinear_polynomials_to_be_shifted[i], rhos[rho_idx]); - batched_commitment_to_be_shifted += multilinear_commitments_to_be_shifted[i] * rhos[rho_idx]; - } - // Compute: // - (d+1) opening pairs: {r, \hat{a}_0}, {-r^{2^i}, a_i}, i = 0, ..., d-1 // - (d+1) Fold polynomials Fold_{r}^(0), Fold_{-r}^(0), and Fold^(i), i = 0, ..., d-1 - auto gemini_polynomials = GeminiProver::compute_gemini_polynomials( - multilinear_evaluation_point, std::move(batched_unshifted), std::move(batched_to_be_shifted)); - - for (size_t l = 0; l < log_n - 1; ++l) { - std::string label = "FOLD_" + std::to_string(l + 1); - auto commitment = this->ck()->commit(gemini_polynomials[l + 2]); - prover_transcript->send_to_verifier(label, commitment); - } - - const Fr r_challenge = prover_transcript->get_challenge("Gemini:r"); - - auto prover_output = GeminiProver::compute_fold_polynomial_evaluations( - multilinear_evaluation_point, std::move(gemini_polynomials), r_challenge); - - for (size_t l = 0; l < log_n; ++l) { - std::string label = "Gemini:a_" + std::to_string(l); - const auto& evaluation = prover_output.opening_pairs[l + 1].evaluation; - prover_transcript->send_to_verifier(label, evaluation); - } + auto prover_output = GeminiProver::prove(1 << multilinear_evaluation_point.size(), + multilinear_polynomials, + multilinear_polynomials_to_be_shifted, + multilinear_evaluation_point, + this->commitment_key, + prover_transcript); // Check that the Fold polynomials have been evaluated correctly in the prover - this->verify_batch_opening_pair(prover_output.opening_pairs, prover_output.witnesses); + this->verify_batch_opening_pair(prover_output); auto verifier_transcript = NativeTranscript::verifier_init_empty(prover_transcript); @@ -84,19 +41,17 @@ template class GeminiTest : public CommitmentTest { // - Single opening pair: {r, \hat{a}_0} // - 2 partially evaluated Fold polynomial commitments [Fold_{r}^(0)] and [Fold_{-r}^(0)] // Aggregate: d+1 opening pairs and d+1 Fold poly commitments into verifier claim - auto verifier_claim = GeminiVerifier::reduce_verification(multilinear_evaluation_point, - batched_evaluation, - batched_commitment_unshifted, - batched_commitment_to_be_shifted, - verifier_transcript); + auto verifier_claims = GeminiVerifier::reduce_verification(multilinear_evaluation_point, + multilinear_evaluations, + RefVector(multilinear_commitments), + RefVector(multilinear_commitments_to_be_shifted), + verifier_transcript); // Check equality of the opening pairs computed by prover and verifier - for (size_t i = 0; i < (log_n + 1); ++i) { - ASSERT_EQ(prover_output.opening_pairs[i], verifier_claim[i].opening_pair); + for (auto [prover_claim, verifier_claim] : zip_view(prover_output, verifier_claims)) { + ASSERT_EQ(prover_claim.opening_pair, verifier_claim.opening_pair); + this->verify_opening_claim(verifier_claim, prover_claim.polynomial); } - - // Explicitly verify the claims computed by the verfier - this->verify_batch_opening_claim(verifier_claim, prover_output.witnesses); } }; @@ -123,13 +78,12 @@ TYPED_TEST(GeminiTest, Single) std::vector multilinear_commitments = { commitment }; std::vector multilinear_commitments_to_be_shifted = {}; - this->execute_gemini_and_verify_claims(log_n, - u, + this->execute_gemini_and_verify_claims(u, multilinear_evaluations, - multilinear_polynomials, - multilinear_polynomials_to_be_shifted, - multilinear_commitments, - multilinear_commitments_to_be_shifted); + RefVector(multilinear_polynomials), + RefVector(multilinear_polynomials_to_be_shifted), + RefVector(multilinear_commitments), + RefVector(multilinear_commitments_to_be_shifted)); } TYPED_TEST(GeminiTest, SingleShift) @@ -155,13 +109,12 @@ TYPED_TEST(GeminiTest, SingleShift) std::vector multilinear_commitments = {}; std::vector multilinear_commitments_to_be_shifted = { commitment }; - this->execute_gemini_and_verify_claims(log_n, - u, + this->execute_gemini_and_verify_claims(u, multilinear_evaluations, - multilinear_polynomials, - multilinear_polynomials_to_be_shifted, - multilinear_commitments, - multilinear_commitments_to_be_shifted); + RefVector(multilinear_polynomials), + RefVector(multilinear_polynomials_to_be_shifted), + RefVector(multilinear_commitments), + RefVector(multilinear_commitments_to_be_shifted)); } TYPED_TEST(GeminiTest, Double) @@ -190,13 +143,12 @@ TYPED_TEST(GeminiTest, Double) std::vector multilinear_commitments = { commitment1, commitment2 }; std::vector multilinear_commitments_to_be_shifted = {}; - this->execute_gemini_and_verify_claims(log_n, - u, + this->execute_gemini_and_verify_claims(u, multilinear_evaluations, - multilinear_polynomials, - multilinear_polynomials_to_be_shifted, - multilinear_commitments, - multilinear_commitments_to_be_shifted); + RefVector(multilinear_polynomials), + RefVector(multilinear_polynomials_to_be_shifted), + RefVector(multilinear_commitments), + RefVector(multilinear_commitments_to_be_shifted)); } TYPED_TEST(GeminiTest, DoubleWithShift) @@ -226,11 +178,10 @@ TYPED_TEST(GeminiTest, DoubleWithShift) std::vector multilinear_commitments = { commitment1, commitment2 }; std::vector multilinear_commitments_to_be_shifted = { commitment2 }; - this->execute_gemini_and_verify_claims(log_n, - u, + this->execute_gemini_and_verify_claims(u, multilinear_evaluations, - multilinear_polynomials, - multilinear_polynomials_to_be_shifted, - multilinear_commitments, - multilinear_commitments_to_be_shifted); + RefVector(multilinear_polynomials), + RefVector(multilinear_polynomials_to_be_shifted), + RefVector(multilinear_commitments), + RefVector(multilinear_commitments_to_be_shifted)); } diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/gemini/gemini_impl.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/gemini/gemini_impl.hpp new file mode 100644 index 00000000000..05a1cd99447 --- /dev/null +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/gemini/gemini_impl.hpp @@ -0,0 +1,234 @@ +#pragma once +#include "barretenberg/common/thread.hpp" +#include "gemini.hpp" + +/** + * @brief Protocol for opening several multi-linear polynomials at the same point. + * + * + * m = number of variables + * n = 2ᵐ + * u = (u₀,...,uₘ₋₁) + * f₀, …, fₖ₋₁ = multilinear polynomials, + * g₀, …, gₕ₋₁ = shifted multilinear polynomial, + * Each gⱼ is the left-shift of some f↺ᵢ, and gⱼ points to the same memory location as fᵢ. + * v₀, …, vₖ₋₁, v↺₀, …, v↺ₕ₋₁ = multilinear evalutions s.t. fⱼ(u) = vⱼ, and gⱼ(u) = f↺ⱼ(u) = v↺ⱼ + * + * We use a challenge ρ to create a random linear combination of all fⱼ, + * and actually define A₀ = F + G↺, where + * F = ∑ⱼ ρʲ fⱼ + * G = ∑ⱼ ρᵏ⁺ʲ gⱼ, + * G↺ = is the shift of G + * where fⱼ is normal, and gⱼ is shifted. + * The evaluations are also batched, and + * v = ∑ ρʲ⋅vⱼ + ∑ ρᵏ⁺ʲ⋅v↺ⱼ = F(u) + G↺(u) + * + * The prover then creates the folded polynomials A₀, ..., Aₘ₋₁, + * and opens them at different points, as univariates. + * + * We open A₀ as univariate at r and -r. + * Since A₀ = F + G↺, but the verifier only has commitments to the gⱼs, + * we need to partially evaluate A₀ at both evaluation points. + * As univariate, we have + * A₀(X) = F(X) + G↺(X) = F(X) + G(X)/X + * So we define + * - A₀₊(X) = F(X) + G(X)/r + * - A₀₋(X) = F(X) − G(X)/r + * So that A₀₊(r) = A₀(r) and A₀₋(-r) = A₀(-r). + * The verifier is able to computed the simulated commitments to A₀₊(X) and A₀₋(X) + * since they are linear-combinations of the commitments [fⱼ] and [gⱼ]. + */ +namespace bb { +template +template +std::vector::Claim> GeminiProver_::prove( + Fr circuit_size, + RefSpan f_polynomials, // unshifted + RefSpan g_polynomials, // to-be-shifted + std::span multilinear_challenge, + const std::shared_ptr>& commitment_key, + const std::shared_ptr& transcript) +{ + size_t log_n = numeric::get_msb(static_cast(circuit_size)); + size_t n = 1 << log_n; + + Fr rho = transcript->template get_challenge("rho"); + std::vector rhos = gemini::powers_of_rho(rho, f_polynomials.size() + g_polynomials.size()); + + // Compute batched polynomials + Polynomial batched_unshifted(n); + Polynomial batched_to_be_shifted = Polynomial::shiftable(1 << log_n); + + const size_t num_unshifted = f_polynomials.size(); + const size_t num_to_be_shifted = g_polynomials.size(); + for (size_t i = 0; i < num_unshifted; i++) { + Fr rho_challenge = rhos[i]; + batched_unshifted.add_scaled(f_polynomials[i], rho_challenge); + } + for (size_t i = 0; i < num_to_be_shifted; i++) { + Fr rho_challenge = rhos[num_unshifted + i]; + batched_to_be_shifted.add_scaled(g_polynomials[i], rho_challenge); + } + + auto fold_polynomials = compute_fold_polynomials( + log_n, multilinear_challenge, std::move(batched_unshifted), std::move(batched_to_be_shifted)); + + for (size_t l = 0; l < log_n - 1; l++) { + transcript->send_to_verifier("Gemini:FOLD_" + std::to_string(l + 1), + commitment_key->commit(fold_polynomials[l + 2])); + } + const Fr r_challenge = transcript->template get_challenge("Gemini:r"); + std::vector claims = compute_fold_polynomial_evaluations(log_n, std::move(fold_polynomials), r_challenge); + + for (size_t l = 1; l <= log_n; l++) { + transcript->send_to_verifier("Gemini:a_" + std::to_string(l), claims[l].opening_pair.evaluation); + } + + return claims; +}; + +/** + * @brief Computes d-1 fold polynomials Fold_i, i = 1, ..., d-1 + * + * @param mle_opening_point multilinear opening point 'u' + * @param batched_unshifted F(X) = ∑ⱼ ρʲ fⱼ(X) + * @param batched_to_be_shifted G(X) = ∑ⱼ ρᵏ⁺ʲ gⱼ(X) + * @return std::vector + */ +template +std::vector::Polynomial> GeminiProver_::compute_fold_polynomials( + const size_t log_N, + std::span mle_opening_point, + Polynomial&& batched_unshifted, + Polynomial&& batched_to_be_shifted) +{ + const size_t num_variables = log_N; + + const size_t num_threads = get_num_cpus_pow2(); + constexpr size_t efficient_operations_per_thread = 64; // A guess of the number of operation for which there + // would be a point in sending them to a separate thread + + // Allocate space for m+1 Fold polynomials + // + // The first two are populated here with the batched unshifted and to-be-shifted polynomial respectively. + // They will eventually contain the full batched polynomial A₀ partially evaluated at the challenges r,-r. + // This function populates the other m-1 polynomials with the foldings of A₀. + std::vector fold_polynomials; + fold_polynomials.reserve(num_variables + 1); + + // F(X) = ∑ⱼ ρʲ fⱼ(X) and G(X) = ∑ⱼ ρᵏ⁺ʲ gⱼ(X) + Polynomial& batched_F = fold_polynomials.emplace_back(std::move(batched_unshifted)); + Polynomial& batched_G = fold_polynomials.emplace_back(std::move(batched_to_be_shifted)); + constexpr size_t offset_to_folded = 2; // Offset because of F an G + // A₀(X) = F(X) + G↺(X) = F(X) + G(X)/X. + Polynomial A_0 = batched_F; + A_0 += batched_G.shifted(); + + // Allocate everything before parallel computation + for (size_t l = 0; l < num_variables - 1; ++l) { + // size of the previous polynomial/2 + const size_t n_l = 1 << (num_variables - l - 1); + + // A_l_fold = Aₗ₊₁(X) = (1-uₗ)⋅even(Aₗ)(X) + uₗ⋅odd(Aₗ)(X) + fold_polynomials.emplace_back(Polynomial(n_l)); + } + + // A_l = Aₗ(X) is the polynomial being folded + // in the first iteration, we take the batched polynomial + // in the next iteration, it is the previously folded one + auto A_l = A_0.data(); + for (size_t l = 0; l < num_variables - 1; ++l) { + // size of the previous polynomial/2 + const size_t n_l = 1 << (num_variables - l - 1); + + // Use as many threads as it is useful so that 1 thread doesn't process 1 element, but make sure that there is + // at least 1 + size_t num_used_threads = std::min(n_l / efficient_operations_per_thread, num_threads); + num_used_threads = num_used_threads ? num_used_threads : 1; + size_t chunk_size = n_l / num_used_threads; + size_t last_chunk_size = (n_l % chunk_size) ? (n_l % num_used_threads) : chunk_size; + + // Openning point is the same for all + const Fr u_l = mle_opening_point[l]; + + // A_l_fold = Aₗ₊₁(X) = (1-uₗ)⋅even(Aₗ)(X) + uₗ⋅odd(Aₗ)(X) + auto A_l_fold = fold_polynomials[l + offset_to_folded].data(); + + parallel_for(num_used_threads, [&](size_t i) { + size_t current_chunk_size = (i == (num_used_threads - 1)) ? last_chunk_size : chunk_size; + for (std::ptrdiff_t j = (std::ptrdiff_t)(i * chunk_size); + j < (std::ptrdiff_t)((i * chunk_size) + current_chunk_size); + j++) { + // fold(Aₗ)[j] = (1-uₗ)⋅even(Aₗ)[j] + uₗ⋅odd(Aₗ)[j] + // = (1-uₗ)⋅Aₗ[2j] + uₗ⋅Aₗ[2j+1] + // = Aₗ₊₁[j] + A_l_fold[j] = A_l[j << 1] + u_l * (A_l[(j << 1) + 1] - A_l[j << 1]); + } + }); + // set Aₗ₊₁ = Aₗ for the next iteration + A_l = A_l_fold; + } + + return fold_polynomials; +}; + +/** + * @brief Computes/aggragates d+1 Fold polynomials and their opening pairs (challenge, evaluation) + * + * @details This function assumes that, upon input, last d-1 entries in fold_polynomials are Fold_i. + * The first two entries are assumed to be, respectively, the batched unshifted and batched to-be-shifted + * polynomials F(X) = ∑ⱼ ρʲfⱼ(X) and G(X) = ∑ⱼ ρᵏ⁺ʲ gⱼ(X). This function completes the computation + * of the first two Fold polynomials as F + G/r and F - G/r. It then evaluates each of the d+1 + * fold polynomials at, respectively, the points r, rₗ = r^{2ˡ} for l = 0, 1, ..., d-1. + * + * @param mle_opening_point u = (u₀,...,uₘ₋₁) is the MLE opening point + * @param fold_polynomials vector of polynomials whose first two elements are F(X) = ∑ⱼ ρʲfⱼ(X) + * and G(X) = ∑ⱼ ρᵏ⁺ʲ gⱼ(X), and the next d-1 elements are Fold_i, i = 1, ..., d-1. + * @param r_challenge univariate opening challenge + */ +template +std::vector::Claim> GeminiProver_::compute_fold_polynomial_evaluations( + const size_t log_N, std::vector&& fold_polynomials, const Fr& r_challenge) +{ + const size_t num_variables = log_N; + + Polynomial& batched_F = fold_polynomials[0]; // F(X) = ∑ⱼ ρʲ fⱼ(X) + Polynomial& batched_G = fold_polynomials[1]; // G(X) = ∑ⱼ ρᵏ⁺ʲ gⱼ(X) + + // Compute univariate opening queries rₗ = r^{2ˡ} for l = 0, 1, ..., m-1 + std::vector r_squares = gemini::powers_of_evaluation_challenge(r_challenge, num_variables); + + // Compute G/r + Fr r_inv = r_challenge.invert(); + batched_G *= r_inv; + + // Construct A₀₊ = F + G/r and A₀₋ = F - G/r in place in fold_polynomials + Polynomial tmp = batched_F; + Polynomial& A_0_pos = fold_polynomials[0]; + + // A₀₊(X) = F(X) + G(X)/r, s.t. A₀₊(r) = A₀(r) + A_0_pos += batched_G; + + // Perform a swap so that tmp = G(X)/r and A_0_neg = F(X) + std::swap(tmp, batched_G); + Polynomial& A_0_neg = fold_polynomials[1]; + + // A₀₋(X) = F(X) - G(X)/r, s.t. A₀₋(-r) = A₀(-r) + A_0_neg -= tmp; + + std::vector opening_claims; + opening_claims.reserve(num_variables + 1); + + // Compute first opening pair {r, A₀(r)} + Fr evaluation = fold_polynomials[0].evaluate(r_challenge); + opening_claims.emplace_back( + Claim{ fold_polynomials[0], { r_challenge, fold_polynomials[0].evaluate(r_challenge) } }); + // Compute the remaining m opening pairs {−r^{2ˡ}, Aₗ(−r^{2ˡ})}, l = 0, ..., m-1. + for (size_t l = 0; l < num_variables; ++l) { + evaluation = fold_polynomials[l + 1].evaluate(-r_squares[l]); + opening_claims.emplace_back(Claim{ fold_polynomials[l + 1], { -r_squares[l], evaluation } }); + } + + return opening_claims; +}; +} // namespace bb diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.hpp index 129e5265480..53d1ed7c172 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.hpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.hpp @@ -593,7 +593,6 @@ template class IPA { static OpeningClaim reduce_batch_opening_claim( const BatchOpeningClaim& batch_opening_claim) { - using Utils = CommitmentSchemesUtils; // Extract batch_mul arguments from the accumulator const auto& commitments = batch_opening_claim.commitments; const auto& scalars = batch_opening_claim.scalars; @@ -604,7 +603,7 @@ template class IPA { shplonk_output_commitment = GroupElement::batch_mul(commitments, scalars, /*max_num_bits=*/0, /*with_edgecases=*/true); } else { - shplonk_output_commitment = Utils::batch_mul_native(commitments, scalars); + shplonk_output_commitment = batch_mul_native(commitments, scalars); } // Output an opening claim to be verified by the IPA opening protocol return { { shplonk_eval_challenge, Fr(0) }, shplonk_output_commitment }; diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.test.cpp index c8ad9c652db..7db3ea01e3b 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/ipa/ipa.test.cpp @@ -1,6 +1,6 @@ #include "../gemini/gemini.hpp" -#include "../shplonk/shplemini_verifier.hpp" +#include "../shplonk/shplemini.hpp" #include "../shplonk/shplonk.hpp" #include "./mock_transcript.hpp" #include "barretenberg/commitment_schemes/commitment_key.test.hpp" @@ -8,9 +8,6 @@ #include "barretenberg/ecc/curves/bn254/fq12.hpp" #include "barretenberg/ecc/curves/types.hpp" #include "barretenberg/polynomials/polynomial_arithmetic.hpp" -#include -#include - using namespace bb; namespace { @@ -77,8 +74,8 @@ TEST_F(IPATest, OpenZeroPolynomial) EXPECT_TRUE(result); } -// This test makes sure that even if the whole vector \vec{b} generated from the x, at which we open the polynomial, is -// zero, IPA behaves +// This test makes sure that even if the whole vector \vec{b} generated from the x, at which we open the polynomial, +// is zero, IPA behaves TEST_F(IPATest, OpenAtZero) { using IPA = IPA; @@ -244,8 +241,6 @@ TEST_F(IPATest, GeminiShplonkIPAWithShift) const size_t n = 8; const size_t log_n = 3; - Fr rho = Fr::random_element(); - // Generate multilinear polynomials, their commitments (genuine and mocked) and evaluations (genuine) at a random // point. auto mle_opening_point = this->random_evaluation_point(log_n); // sometimes denoted 'u' @@ -261,59 +256,25 @@ TEST_F(IPATest, GeminiShplonkIPAWithShift) std::vector multilinear_evaluations = { eval1, eval2, eval2_shift }; - std::vector rhos = gemini::powers_of_rho(rho, multilinear_evaluations.size()); - - Fr batched_evaluation = Fr::zero(); - for (size_t i = 0; i < rhos.size(); ++i) { - batched_evaluation += multilinear_evaluations[i] * rhos[i]; - } - - Polynomial batched_unshifted(n); - Polynomial batched_to_be_shifted = Polynomial::shiftable(n); - batched_unshifted.add_scaled(poly1, rhos[0]); - batched_unshifted.add_scaled(poly2, rhos[1]); - batched_to_be_shifted.add_scaled(poly2, rhos[2]); - - GroupElement batched_commitment_unshifted = GroupElement::zero(); - GroupElement batched_commitment_to_be_shifted = GroupElement::zero(); - batched_commitment_unshifted = commitment1 * rhos[0] + commitment2 * rhos[1]; - batched_commitment_to_be_shifted = commitment2 * rhos[2]; - auto prover_transcript = NativeTranscript::prover_init_empty(); - auto gemini_polynomials = GeminiProver::compute_gemini_polynomials( - mle_opening_point, std::move(batched_unshifted), std::move(batched_to_be_shifted)); - - for (size_t l = 0; l < log_n - 1; ++l) { - std::string label = "FOLD_" + std::to_string(l + 1); - auto commitment = this->ck()->commit(gemini_polynomials[l + 2]); - prover_transcript->send_to_verifier(label, commitment); - } - - const Fr r_challenge = prover_transcript->template get_challenge("Gemini:r"); - - const auto [gemini_opening_pairs, gemini_witnesses] = GeminiProver::compute_fold_polynomial_evaluations( - mle_opening_point, std::move(gemini_polynomials), r_challenge); - - std::vector> opening_claims; + // Run the full prover PCS protocol: - for (size_t l = 0; l < log_n; ++l) { - std::string label = "Gemini:a_" + std::to_string(l); - const auto& evaluation = gemini_opening_pairs[l + 1].evaluation; - prover_transcript->send_to_verifier(label, evaluation); - opening_claims.push_back({ gemini_witnesses[l], gemini_opening_pairs[l] }); - } - opening_claims.push_back({ gemini_witnesses[log_n], gemini_opening_pairs[log_n] }); + // Compute: + // - (d+1) opening pairs: {r, \hat{a}_0}, {-r^{2^i}, a_i}, i = 0, ..., d-1 + // - (d+1) Fold polynomials Fold_{r}^(0), Fold_{-r}^(0), and Fold^(i), i = 0, ..., d-1 + auto prover_opening_claims = GeminiProver::prove( + n, RefArray{ poly1, poly2 }, RefArray{ poly2 }, mle_opening_point, this->ck(), prover_transcript); - const auto opening_claim = ShplonkProver::prove(this->ck(), opening_claims, prover_transcript); + const auto opening_claim = ShplonkProver::prove(this->ck(), prover_opening_claims, prover_transcript); IPA::compute_opening_proof(this->ck(), opening_claim, prover_transcript); auto verifier_transcript = NativeTranscript::verifier_init_empty(prover_transcript); auto gemini_verifier_claim = GeminiVerifier::reduce_verification(mle_opening_point, - batched_evaluation, - batched_commitment_unshifted, - batched_commitment_to_be_shifted, + multilinear_evaluations, + RefArray{ commitment1, commitment2 }, + RefArray{ commitment2 }, verifier_transcript); const auto shplonk_verifier_claim = @@ -345,56 +306,26 @@ TEST_F(IPATest, ShpleminiIPAWithShift) auto eval2 = poly2.evaluate_mle(mle_opening_point); auto eval2_shift = poly2.evaluate_mle(mle_opening_point, true); - std::vector multilinear_evaluations = { eval1, eval2, eval2_shift }; - auto prover_transcript = NativeTranscript::prover_init_empty(); - Fr rho = prover_transcript->template get_challenge("rho"); - std::vector rhos = gemini::powers_of_rho(rho, multilinear_evaluations.size()); - - Fr batched_evaluation = Fr::zero(); - for (size_t i = 0; i < rhos.size(); ++i) { - batched_evaluation += multilinear_evaluations[i] * rhos[i]; - } - - Polynomial batched_unshifted(n); - Polynomial batched_to_be_shifted = Polynomial::shiftable(n); - batched_unshifted.add_scaled(poly1, rhos[0]); - batched_unshifted.add_scaled(poly2, rhos[1]); - batched_to_be_shifted.add_scaled(poly2, rhos[2]); - auto gemini_polynomials = GeminiProver::compute_gemini_polynomials( - mle_opening_point, std::move(batched_unshifted), std::move(batched_to_be_shifted)); + // Run the full prover PCS protocol: - for (size_t l = 0; l < log_n - 1; ++l) { - std::string label = "FOLD_" + std::to_string(l + 1); - auto commitment = this->ck()->commit(gemini_polynomials[l + 2]); - prover_transcript->send_to_verifier(label, commitment); - } - - const Fr r_challenge = prover_transcript->template get_challenge("Gemini:r"); - - const auto [gemini_opening_pairs, gemini_witnesses] = GeminiProver::compute_fold_polynomial_evaluations( - mle_opening_point, std::move(gemini_polynomials), r_challenge); - - std::vector> opening_claims; - - for (size_t l = 0; l < log_n; ++l) { - std::string label = "Gemini:a_" + std::to_string(l); - const auto& evaluation = gemini_opening_pairs[l + 1].evaluation; - prover_transcript->send_to_verifier(label, evaluation); - opening_claims.push_back({ gemini_witnesses[l], gemini_opening_pairs[l] }); - } - opening_claims.push_back({ gemini_witnesses[log_n], gemini_opening_pairs[log_n] }); + // Compute: + // - (d+1) opening pairs: {r, \hat{a}_0}, {-r^{2^i}, a_i}, i = 0, ..., d-1 + // - (d+1) Fold polynomials Fold_{r}^(0), Fold_{-r}^(0), and Fold^(i), i = 0, ..., d-1 + auto prover_opening_claims = GeminiProver::prove( + n, RefArray{ poly1, poly2 }, RefArray{ poly2 }, mle_opening_point, this->ck(), prover_transcript); - const auto opening_claim = ShplonkProver::prove(this->ck(), opening_claims, prover_transcript); + const auto opening_claim = ShplonkProver::prove(this->ck(), prover_opening_claims, prover_transcript); IPA::compute_opening_proof(this->ck(), opening_claim, prover_transcript); auto verifier_transcript = NativeTranscript::verifier_init_empty(prover_transcript); - const auto batch_opening_claim = ShpleminiVerifier::compute_batch_opening_claim(log_n, + const auto batch_opening_claim = ShpleminiVerifier::compute_batch_opening_claim(n, RefVector(unshifted_commitments), RefVector(shifted_commitments), - RefVector(multilinear_evaluations), + RefArray{ eval1, eval2 }, + RefArray{ eval2_shift }, mle_opening_point, this->vk()->get_g1_identity(), verifier_transcript); diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/kzg/kzg.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/kzg/kzg.hpp index 0fab4113fab..955a9da9fe1 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/kzg/kzg.hpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/kzg/kzg.hpp @@ -108,7 +108,6 @@ template class KZG { static VerifierAccumulator reduce_verify_batch_opening_claim(BatchOpeningClaim batch_opening_claim, const std::shared_ptr& transcript) { - using Utils = CommitmentSchemesUtils; auto quotient_commitment = transcript->template receive_from_prover("KZG:W"); // The pairing check can be expressed as @@ -125,7 +124,7 @@ template class KZG { /*max_num_bits=*/0, /*with_edgecases=*/true); } else { - P_0 = Utils::batch_mul_native(batch_opening_claim.commitments, batch_opening_claim.scalars); + P_0 = batch_mul_native(batch_opening_claim.commitments, batch_opening_claim.scalars); } auto P_1 = -quotient_commitment; diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/kzg/kzg.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/kzg/kzg.test.cpp index ded35bb6a42..e23a6d90c77 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/kzg/kzg.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/kzg/kzg.test.cpp @@ -1,17 +1,12 @@ #include "kzg.hpp" #include "../gemini/gemini.hpp" -#include "../shplonk/shplemini_verifier.hpp" +#include "../shplonk/shplemini.hpp" #include "../shplonk/shplonk.hpp" #include "../commitment_key.test.hpp" #include "barretenberg/commitment_schemes/claim.hpp" -#include "barretenberg/ecc/curves/bn254/g1.hpp" - -#include -#include - namespace bb { template class KZGTest : public CommitmentTest { @@ -69,8 +64,6 @@ TYPED_TEST(KZGTest, GeminiShplonkKzgWithShift) const size_t n = 16; const size_t log_n = 4; - Fr rho = Fr::random_element(); - // Generate multilinear polynomials, their commitments (genuine and mocked) and evaluations (genuine) at a random // point. auto mle_opening_point = this->random_evaluation_point(log_n); // sometimes denoted 'u' @@ -87,27 +80,6 @@ TYPED_TEST(KZGTest, GeminiShplonkKzgWithShift) // Collect multilinear evaluations for input to prover std::vector multilinear_evaluations = { eval1, eval2, eval2_shift }; - std::vector rhos = gemini::powers_of_rho(rho, multilinear_evaluations.size()); - - // Compute batched multivariate evaluation - Fr batched_evaluation = Fr::zero(); - for (size_t i = 0; i < rhos.size(); ++i) { - batched_evaluation += multilinear_evaluations[i] * rhos[i]; - } - - // Compute batched polynomials - Polynomial batched_unshifted(n); - Polynomial batched_to_be_shifted = Polynomial::shiftable(n); - batched_unshifted.add_scaled(poly1, rhos[0]); - batched_unshifted.add_scaled(poly2, rhos[1]); - batched_to_be_shifted.add_scaled(poly2, rhos[2]); - - // Compute batched commitments - GroupElement batched_commitment_unshifted = GroupElement::zero(); - GroupElement batched_commitment_to_be_shifted = GroupElement::zero(); - batched_commitment_unshifted = commitment1 * rhos[0] + commitment2 * rhos[1]; - batched_commitment_to_be_shifted = commitment2 * rhos[2]; - auto prover_transcript = NativeTranscript::prover_init_empty(); // Run the full prover PCS protocol: @@ -115,33 +87,13 @@ TYPED_TEST(KZGTest, GeminiShplonkKzgWithShift) // Compute: // - (d+1) opening pairs: {r, \hat{a}_0}, {-r^{2^i}, a_i}, i = 0, ..., d-1 // - (d+1) Fold polynomials Fold_{r}^(0), Fold_{-r}^(0), and Fold^(i), i = 0, ..., d-1 - auto gemini_polynomials = GeminiProver::compute_gemini_polynomials( - mle_opening_point, std::move(batched_unshifted), std::move(batched_to_be_shifted)); - - for (size_t l = 0; l < log_n - 1; ++l) { - std::string label = "FOLD_" + std::to_string(l + 1); - auto commitment = this->ck()->commit(gemini_polynomials[l + 2]); - prover_transcript->send_to_verifier(label, commitment); - } - - const Fr r_challenge = prover_transcript->template get_challenge("Gemini:r"); - - const auto [gemini_opening_pairs, gemini_witnesses] = GeminiProver::compute_fold_polynomial_evaluations( - mle_opening_point, std::move(gemini_polynomials), r_challenge); - - std::vector> opening_claims; - for (size_t l = 0; l < log_n; ++l) { - std::string label = "Gemini:a_" + std::to_string(l); - const auto& evaluation = gemini_opening_pairs[l + 1].evaluation; - prover_transcript->send_to_verifier(label, evaluation); - opening_claims.push_back({ gemini_witnesses[l], gemini_opening_pairs[l] }); - } - opening_claims.push_back({ gemini_witnesses[log_n], gemini_opening_pairs[log_n] }); + auto prover_opening_claims = GeminiProver::prove( + n, RefArray{ poly1, poly2 }, RefArray{ poly2 }, mle_opening_point, this->ck(), prover_transcript); // Shplonk prover output: // - opening pair: (z_challenge, 0) // - witness: polynomial Q - Q_z - const auto opening_claim = ShplonkProver::prove(this->ck(), opening_claims, prover_transcript); + const auto opening_claim = ShplonkProver::prove(this->ck(), prover_opening_claims, prover_transcript); // KZG prover: // - Adds commitment [W] to transcript @@ -154,9 +106,9 @@ TYPED_TEST(KZGTest, GeminiShplonkKzgWithShift) // Gemini verifier output: // - claim: d+1 commitments to Fold_{r}^(0), Fold_{-r}^(0), Fold^(l), d+1 evaluations a_0_pos, a_l, l = 0:d-1 auto gemini_verifier_claim = GeminiVerifier::reduce_verification(mle_opening_point, - batched_evaluation, - batched_commitment_unshifted, - batched_commitment_to_be_shifted, + multilinear_evaluations, + RefArray{ commitment1, commitment2 }, + RefArray{ commitment2 }, verifier_transcript); // Shplonk verifier claim: commitment [Q] - [Q_z], opening point (z_challenge, 0) @@ -179,85 +131,53 @@ TYPED_TEST(KZGTest, ShpleminiKzgWithShift) using ShpleminiVerifier = ShpleminiVerifier_; using KZG = KZG; using Fr = typename TypeParam::ScalarField; - using GroupElement = typename TypeParam::Element; using Commitment = typename TypeParam::AffineElement; using Polynomial = typename bb::Polynomial; const size_t n = 16; const size_t log_n = 4; - auto prover_transcript = NativeTranscript::prover_init_empty(); - // Get batching challenge - Fr rho = prover_transcript->template get_challenge("rho"); // Generate multilinear polynomials, their commitments (genuine and mocked) and evaluations (genuine) at a random // point. auto mle_opening_point = this->random_evaluation_point(log_n); // sometimes denoted 'u' - auto poly1 = Polynomial::random(n); - auto poly2 = Polynomial::random(n, /*shiftable*/ 1); + auto poly1 = Polynomial::random(n, 1); + auto poly2 = Polynomial::random(n); + auto poly3 = Polynomial::random(n, 1); + auto poly4 = Polynomial::random(n); Commitment commitment1 = this->commit(poly1); Commitment commitment2 = this->commit(poly2); - std::vector unshifted_commitments = { commitment1, commitment2 }; - std::vector shifted_commitments = { commitment2 }; + Commitment commitment3 = this->commit(poly3); + Commitment commitment4 = this->commit(poly4); + std::vector unshifted_commitments = { commitment1, commitment2, commitment3, commitment4 }; + std::vector shifted_commitments = { commitment1, commitment3 }; auto eval1 = poly1.evaluate_mle(mle_opening_point); auto eval2 = poly2.evaluate_mle(mle_opening_point); - auto eval2_shift = poly2.evaluate_mle(mle_opening_point, true); + auto eval3 = poly3.evaluate_mle(mle_opening_point); + auto eval4 = poly4.evaluate_mle(mle_opening_point); + auto eval1_shift = poly1.evaluate_mle(mle_opening_point, true); + auto eval3_shift = poly3.evaluate_mle(mle_opening_point, true); // Collect multilinear evaluations for input to prover - std::vector multilinear_evaluations = { eval1, eval2, eval2_shift }; - - std::vector rhos = gemini::powers_of_rho(rho, multilinear_evaluations.size()); - - // Compute batched multivariate evaluation - Fr batched_evaluation = Fr::zero(); - for (size_t i = 0; i < rhos.size(); ++i) { - batched_evaluation += multilinear_evaluations[i] * rhos[i]; - } + std::vector multilinear_evaluations = { eval1, eval2, eval3, eval1_shift, eval3_shift }; - // Compute batched polynomials - Polynomial batched_unshifted(n); - Polynomial batched_to_be_shifted = Polynomial::shiftable(n); - batched_unshifted.add_scaled(poly1, rhos[0]); - batched_unshifted.add_scaled(poly2, rhos[1]); - batched_to_be_shifted.add_scaled(poly2, rhos[2]); - - // Compute batched commitments - GroupElement batched_commitment_unshifted = GroupElement::zero(); - GroupElement batched_commitment_to_be_shifted = GroupElement::zero(); - batched_commitment_unshifted = commitment1 * rhos[0] + commitment2 * rhos[1]; - batched_commitment_to_be_shifted = commitment2 * rhos[2]; + auto prover_transcript = NativeTranscript::prover_init_empty(); // Run the full prover PCS protocol: // Compute: // - (d+1) opening pairs: {r, \hat{a}_0}, {-r^{2^i}, a_i}, i = 0, ..., d-1 // - (d+1) Fold polynomials Fold_{r}^(0), Fold_{-r}^(0), and Fold^(i), i = 0, ..., d-1 - auto gemini_polynomials = GeminiProver::compute_gemini_polynomials( - mle_opening_point, std::move(batched_unshifted), std::move(batched_to_be_shifted)); - - for (size_t l = 0; l < log_n - 1; ++l) { - std::string label = "FOLD_" + std::to_string(l + 1); - auto commitment = this->ck()->commit(gemini_polynomials[l + 2]); - prover_transcript->send_to_verifier(label, commitment); - } - - const Fr r_challenge = prover_transcript->template get_challenge("Gemini:r"); - - const auto [gemini_opening_pairs, gemini_witnesses] = GeminiProver::compute_fold_polynomial_evaluations( - mle_opening_point, std::move(gemini_polynomials), r_challenge); - - std::vector> opening_claims; - for (size_t l = 0; l < log_n; ++l) { - std::string label = "Gemini:a_" + std::to_string(l); - const auto& evaluation = gemini_opening_pairs[l + 1].evaluation; - prover_transcript->send_to_verifier(label, evaluation); - opening_claims.push_back({ gemini_witnesses[l], gemini_opening_pairs[l] }); - } - opening_claims.push_back({ gemini_witnesses[log_n], gemini_opening_pairs[log_n] }); + auto prover_opening_claims = GeminiProver::prove(n, + RefArray{ poly1, poly2, poly3, poly4 }, + RefArray{ poly1, poly3 }, + mle_opening_point, + this->ck(), + prover_transcript); // Shplonk prover output: // - opening pair: (z_challenge, 0) // - witness: polynomial Q - Q_z - const auto opening_claim = ShplonkProver::prove(this->ck(), opening_claims, prover_transcript); + const auto opening_claim = ShplonkProver::prove(this->ck(), prover_opening_claims, prover_transcript); // KZG prover: // - Adds commitment [W] to transcript @@ -269,13 +189,15 @@ TYPED_TEST(KZGTest, ShpleminiKzgWithShift) // Gemini verifier output: // - claim: d+1 commitments to Fold_{r}^(0), Fold_{-r}^(0), Fold^(l), d+1 evaluations a_0_pos, a_l, l = 0:d-1 - const auto batch_opening_claim = ShpleminiVerifier::compute_batch_opening_claim(log_n, - RefVector(unshifted_commitments), - RefVector(shifted_commitments), - RefVector(multilinear_evaluations), - mle_opening_point, - this->vk()->get_g1_identity(), - verifier_transcript); + const auto batch_opening_claim = + ShpleminiVerifier::compute_batch_opening_claim(n, + RefVector(unshifted_commitments), + RefVector(shifted_commitments), + RefArray{ eval1, eval2, eval3, eval4 }, + RefArray{ eval1_shift, eval3_shift }, + mle_opening_point, + this->vk()->get_g1_identity(), + verifier_transcript); const auto pairing_points = KZG::reduce_verify_batch_opening_claim(batch_opening_claim, verifier_transcript); // Final pairing check: e([Q] - [Q_z] + z[W], [1]_2) = e([W], [x]_2) diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplemini_verifier.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplemini.hpp similarity index 82% rename from barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplemini_verifier.hpp rename to barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplemini.hpp index 53893f7b0cb..98f4aa22147 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplemini_verifier.hpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplemini.hpp @@ -1,13 +1,40 @@ #pragma once #include "barretenberg/commitment_schemes/claim.hpp" #include "barretenberg/commitment_schemes/commitment_key.hpp" -#include "barretenberg/commitment_schemes/gemini/gemini.hpp" +#include "barretenberg/commitment_schemes/gemini/gemini_impl.hpp" #include "barretenberg/commitment_schemes/shplonk/shplonk.hpp" -#include "barretenberg/commitment_schemes/utils/batch_mul_native.hpp" #include "barretenberg/commitment_schemes/verification_key.hpp" #include "barretenberg/transcript/transcript.hpp" namespace bb { + +template class ShpleminiProver_ { + public: + using FF = typename Curve::ScalarField; + using GroupElement = typename Curve::Element; + using Commitment = typename Curve::AffineElement; + using Polynomial = bb::Polynomial; + using OpeningClaim = ProverOpeningClaim; + + using VK = CommitmentKey; + using ShplonkProver = ShplonkProver_; + using GeminiProver = GeminiProver_; + + template + static OpeningClaim prove(const FF circuit_size, + RefSpan f_polynomials, + RefSpan g_polynomials, + std::span multilinear_challenge, + const std::shared_ptr>& commitment_key, + const std::shared_ptr& transcript) + { + std::vector opening_claims = GeminiProver::prove( + circuit_size, f_polynomials, g_polynomials, multilinear_challenge, commitment_key, transcript); + + OpeningClaim batched_claim = ShplonkProver::prove(commitment_key, opening_claims, transcript); + return batched_claim; + }; +}; /** * \brief An efficient verifier for the evaluation proofs of multilinear polynomials and their shifts. * @@ -72,20 +99,22 @@ template class ShpleminiVerifier_ { public: template - static BatchOpeningClaim compute_batch_opening_claim(const Fr log_N, + static BatchOpeningClaim compute_batch_opening_claim(const Fr N, RefSpan unshifted_commitments, RefSpan shifted_commitments, - RefSpan claimed_evaluations, + RefSpan unshifted_evaluations, + RefSpan shifted_evaluations, const std::vector& multivariate_challenge, const Commitment& g1_identity, - std::shared_ptr& transcript) + const std::shared_ptr& transcript) { + // Extract log_circuit_size size_t log_circuit_size{ 0 }; if constexpr (Curve::is_stdlib_type) { - log_circuit_size = static_cast(log_N.get_value()); + log_circuit_size = numeric::get_msb(static_cast(N.get_value())); } else { - log_circuit_size = static_cast(log_N); + log_circuit_size = numeric::get_msb(static_cast(N)); } // Get the challenge ρ to batch commitments to multilinear polynomials and their shifts @@ -93,8 +122,8 @@ template class ShpleminiVerifier_ { // Process Gemini transcript data: // - Get Gemini commitments (com(A₁), com(A₂), … , com(Aₙ₋₁)) - const std::vector gemini_commitments = - GeminiVerifier::get_gemini_commitments(log_circuit_size, transcript); + const std::vector fold_commitments = + GeminiVerifier::get_fold_commitments(log_circuit_size, transcript); // - Get Gemini evaluation challenge for Aᵢ, i = 0, … , d−1 const Fr gemini_evaluation_challenge = transcript->template get_challenge("Gemini:r"); // - Get evaluations (A₀(−r), A₁(−r²), ... , Aₙ₋₁(−r²⁽ⁿ⁻¹⁾)) @@ -136,12 +165,13 @@ template class ShpleminiVerifier_ { gemini_evaluation_challenge.invert() * (inverse_vanishing_evals[0] - shplonk_batching_challenge * inverse_vanishing_evals[1]); - // Place the commitments to prover polynomials in the commitments vector. Compute the evaluation of the batched - // multilinear polynomial. Populate the vector of scalars for the final batch mul + // Place the commitments to prover polynomials in the commitments vector. Compute the evaluation of the + // batched multilinear polynomial. Populate the vector of scalars for the final batch mul Fr batched_evaluation{ 0 }; batch_multivariate_opening_claims(unshifted_commitments, shifted_commitments, - claimed_evaluations, + unshifted_evaluations, + shifted_evaluations, multivariate_batching_challenge, unshifted_scalar, shifted_scalar, @@ -152,7 +182,7 @@ template class ShpleminiVerifier_ { // Place the commitments to Gemini Aᵢ to the vector of commitments, compute the contributions from // Aᵢ(−r²ⁱ) for i=1, … , n−1 to the constant term accumulator, add corresponding scalars batch_gemini_claims_received_from_prover(log_circuit_size, - gemini_commitments, + fold_commitments, gemini_evaluations, inverse_vanishing_evals, shplonk_batching_challenge, @@ -162,8 +192,12 @@ template class ShpleminiVerifier_ { // Add contributions from A₀(r) and A₀(-r) to constant_term_accumulator: // - Compute A₀(r) - const Fr a_0_pos = GeminiVerifier_::compute_gemini_batched_univariate_evaluation( - batched_evaluation, multivariate_challenge, gemini_eval_challenge_powers, gemini_evaluations); + const Fr a_0_pos = + GeminiVerifier_::compute_gemini_batched_univariate_evaluation(log_circuit_size, + batched_evaluation, + multivariate_challenge, + gemini_eval_challenge_powers, + gemini_evaluations); // - Add A₀(r)/(z−r) to the constant term accumulator constant_term_accumulator += a_0_pos * inverse_vanishing_evals[0]; // Add A₀(−r)/(z+r) to the constant term accumulator @@ -176,8 +210,8 @@ template class ShpleminiVerifier_ { return { commitments, scalars, shplonk_evaluation_challenge }; }; /** - * @brief Populates the vectors of commitments and scalars, and computes the evaluation of the batched multilinear - * polynomial at the sumcheck challenge. + * @brief Populates the vectors of commitments and scalars, and computes the evaluation of the batched + * multilinear polynomial at the sumcheck challenge. * * @details This function iterates over all commitments and the claimed evaluations of the corresponding * polynomials. The following notations are used: @@ -224,7 +258,8 @@ template class ShpleminiVerifier_ { */ static void batch_multivariate_opening_claims(RefSpan unshifted_commitments, RefSpan shifted_commitments, - RefSpan claimed_evaluations, + RefSpan unshifted_evaluations, + RefSpan shifted_evaluations, const Fr& multivariate_batching_challenge, const Fr& unshifted_scalar, const Fr& shifted_scalar, @@ -232,27 +267,25 @@ template class ShpleminiVerifier_ { std::vector& scalars, Fr& batched_evaluation) { - size_t evaluation_idx = 0; Fr current_batching_challenge = Fr(1); - for (auto& unshifted_commitment : unshifted_commitments) { + for (auto [unshifted_commitment, unshifted_evaluation] : + zip_view(unshifted_commitments, unshifted_evaluations)) { // Move unshifted commitments to the 'commitments' vector commitments.emplace_back(std::move(unshifted_commitment)); // Compute −ρⁱ ⋅ (1/(z−r) + ν/(z+r)) and place into 'scalars' scalars.emplace_back(-unshifted_scalar * current_batching_challenge); // Accumulate the evaluation of ∑ ρⁱ ⋅ fᵢ at the sumcheck challenge - batched_evaluation += claimed_evaluations[evaluation_idx] * current_batching_challenge; - evaluation_idx += 1; + batched_evaluation += unshifted_evaluation * current_batching_challenge; // Update the batching challenge current_batching_challenge *= multivariate_batching_challenge; } - for (auto& shifted_commitment : shifted_commitments) { + for (auto [shifted_commitment, shifted_evaluation] : zip_view(shifted_commitments, shifted_evaluations)) { // Move shifted commitments to the 'commitments' vector commitments.emplace_back(std::move(shifted_commitment)); // Compute −ρ⁽ⁱ⁺ᵏ⁾ ⋅ r⁻¹ ⋅ (1/(z−r) − ν/(z+r)) and place into 'scalars' scalars.emplace_back(-shifted_scalar * current_batching_challenge); // Accumulate the evaluation of ∑ ρ⁽ⁱ⁺ᵏ⁾ ⋅ f_shift, i at the sumcheck challenge - batched_evaluation += claimed_evaluations[evaluation_idx] * current_batching_challenge; - evaluation_idx += 1; + batched_evaluation += shifted_evaluation * current_batching_challenge; // Update the batching challenge current_batching_challenge *= multivariate_batching_challenge; } @@ -283,7 +316,7 @@ template class ShpleminiVerifier_ { * and adds them to the 'constant_term_accumulator'. * * @param log_circuit_size The logarithm of the circuit size, determining the depth of the Gemini protocol. - * @param gemini_commitments A vector containing the commitments to the Gemini fold polynomials \f$ A_i \f$. + * @param fold_commitments A vector containing the commitments to the Gemini fold polynomials \f$ A_i \f$. * @param gemini_evaluations A vector containing the evaluations of the Gemini fold polynomials \f$ A_i \f$ at * points \f$ -r^{2^i} \f$. * @param inverse_vanishing_evals A vector containing the inverse evaluations of the vanishing polynomial. @@ -293,7 +326,7 @@ template class ShpleminiVerifier_ { * @param constant_term_accumulator The accumulator for the summands of the constant term. */ static void batch_gemini_claims_received_from_prover(const size_t log_circuit_size, - const std::vector& gemini_commitments, + const std::vector& fold_commitments, const std::vector& gemini_evaluations, const std::vector& inverse_vanishing_evals, const Fr& shplonk_batching_challenge, @@ -313,7 +346,7 @@ template class ShpleminiVerifier_ { // Update the batching challenge current_batching_challenge *= shplonk_batching_challenge; // Move com(Aᵢ) to the 'commitments' vector - commitments.emplace_back(std::move(gemini_commitments[j])); + commitments.emplace_back(std::move(fold_commitments[j])); } } }; diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplemini_verifier.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplemini.test.cpp similarity index 91% rename from barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplemini_verifier.test.cpp rename to barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplemini.test.cpp index 45292861fae..b1aad152f59 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplemini_verifier.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplemini.test.cpp @@ -1,5 +1,5 @@ -#include "shplemini_verifier.hpp" +#include "shplemini.hpp" #include "../commitment_key.test.hpp" #include "../gemini/gemini.hpp" #include "../kzg/kzg.hpp" @@ -33,7 +33,6 @@ TYPED_TEST(ShpleminiTest, CorrectnessOfMultivariateClaimBatching) using GroupElement = typename TypeParam::Element; using Commitment = typename TypeParam::AffineElement; using Polynomial = typename bb::Polynomial; - using Utils = CommitmentSchemesUtils; const size_t n = 16; const size_t log_n = 4; @@ -102,7 +101,8 @@ TYPED_TEST(ShpleminiTest, CorrectnessOfMultivariateClaimBatching) ShpleminiVerifier::batch_multivariate_opening_claims(RefVector(unshifted_commitments), RefVector(shifted_commitments), - RefVector(multilinear_evaluations), + RefArray{ eval1, eval2, eval3 }, + RefArray{ eval2_shift, eval3_shift }, rho, unshifted_scalar, shifted_scalar, @@ -111,13 +111,12 @@ TYPED_TEST(ShpleminiTest, CorrectnessOfMultivariateClaimBatching) verifier_batched_evaluation); // Final pairing check - GroupElement shplemini_result = Utils::batch_mul_native(commitments, scalars); + GroupElement shplemini_result = batch_mul_native(commitments, scalars); EXPECT_EQ(commitments.size(), unshifted_commitments.size() + shifted_commitments.size()); EXPECT_EQ(batched_evaluation, verifier_batched_evaluation); EXPECT_EQ(-expected_result, shplemini_result); } - TYPED_TEST(ShpleminiTest, CorrectnessOfGeminiClaimBatching) { using GeminiProver = GeminiProver_; @@ -127,7 +126,6 @@ TYPED_TEST(ShpleminiTest, CorrectnessOfGeminiClaimBatching) using GroupElement = typename TypeParam::Element; using Commitment = typename TypeParam::AffineElement; using Polynomial = typename bb::Polynomial; - using Utils = CommitmentSchemesUtils; const size_t n = 16; const size_t log_n = 4; @@ -166,22 +164,21 @@ TYPED_TEST(ShpleminiTest, CorrectnessOfGeminiClaimBatching) // Compute: // - (d+1) opening pairs: {r, \hat{a}_0}, {-r^{2^i}, a_i}, i = 0, ..., d-1 // - (d+1) Fold polynomials Fold_{r}^(0), Fold_{-r}^(0), and Fold^(i), i = 0, ..., d-1 - auto gemini_polynomials = GeminiProver::compute_gemini_polynomials( - mle_opening_point, std::move(batched_unshifted), std::move(batched_to_be_shifted)); + auto fold_polynomials = GeminiProver::compute_fold_polynomials( + log_n, mle_opening_point, std::move(batched_unshifted), std::move(batched_to_be_shifted)); std::vector prover_commitments; for (size_t l = 0; l < log_n - 1; ++l) { - auto commitment = this->ck()->commit(gemini_polynomials[l + 2]); + auto commitment = this->ck()->commit(fold_polynomials[l + 2]); prover_commitments.emplace_back(commitment); } - const auto [gemini_opening_pairs, gemini_witnesses] = GeminiProver::compute_fold_polynomial_evaluations( - mle_opening_point, std::move(gemini_polynomials), gemini_eval_challenge); + const auto opening_claims = + GeminiProver::compute_fold_polynomial_evaluations(log_n, std::move(fold_polynomials), gemini_eval_challenge); std::vector prover_evaluations; - std::vector> opening_claims; for (size_t l = 0; l < log_n; ++l) { - const auto& evaluation = gemini_opening_pairs[l + 1].evaluation; + const auto& evaluation = opening_claims[l + 1].opening_pair.evaluation; prover_evaluations.emplace_back(evaluation); } @@ -221,7 +218,7 @@ TYPED_TEST(ShpleminiTest, CorrectnessOfGeminiClaimBatching) EXPECT_EQ(commitments.size(), prover_commitments.size()); // Compute the group element using the output of Shplemini method - GroupElement shplemini_result = Utils::batch_mul_native(commitments, scalars); + GroupElement shplemini_result = batch_mul_native(commitments, scalars); EXPECT_EQ(shplemini_result, expected_result); } diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.hpp index 5526feca2c3..f8db79c9a2a 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.hpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/shplonk/shplonk.hpp @@ -126,9 +126,10 @@ template class ShplonkProver_ { * @param transcript * @return ProverOpeningClaim */ + template static ProverOpeningClaim prove(const std::shared_ptr>& commitment_key, std::span> opening_claims, - auto& transcript) + const std::shared_ptr& transcript) { const Fr nu = transcript->template get_challenge("Shplonk:nu"); auto batched_quotient = compute_batched_quotient(opening_claims, nu); @@ -159,9 +160,10 @@ template class ShplonkVerifier_ { * @param transcript * @return OpeningClaim */ + template static OpeningClaim reduce_verification(Commitment g1_identity, std::span> claims, - auto& transcript) + std::shared_ptr& transcript) { const size_t num_claims = claims.size(); diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/sparse_commitment.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/sparse_commitment.test.cpp index 9d7da38d893..87473bee3d5 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/sparse_commitment.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/sparse_commitment.test.cpp @@ -66,4 +66,94 @@ TYPED_TEST(CommitmentKeyTest, CommitSparse) EXPECT_EQ(sparse_commit_result, commit_result); } +/** + * @brief Test commit_sparse on polynomial with zero start index. + * + */ +TYPED_TEST(CommitmentKeyTest, CommitSparseSmallSize) +{ + using Curve = TypeParam; + using CK = CommitmentKey; + using G1 = Curve::AffineElement; + using Fr = Curve::ScalarField; + using Polynomial = bb::Polynomial; + + const size_t num_points = 1 << 12; // large enough to ensure normal pippenger logic is used + const size_t num_nonzero = 7; + + // Construct a sparse random polynomial + Polynomial poly(num_nonzero, num_points, 0); + for (size_t i = 0; i < num_nonzero; ++i) { + poly.at(i) = Fr::random_element(); + } + + // Commit to the polynomial using both the conventional commit method and the sparse commitment method + auto key = TestFixture::template create_commitment_key(num_points); + G1 commit_result = key->commit(poly); + G1 sparse_commit_result = key->commit_sparse(poly); + + EXPECT_EQ(sparse_commit_result, commit_result); +} + +/** + * @brief Test commit_sparse on polynomial with nonzero start index. + * + */ +TYPED_TEST(CommitmentKeyTest, CommitSparseNonZeroStartIndex) +{ + using Curve = TypeParam; + using CK = CommitmentKey; + using G1 = Curve::AffineElement; + using Fr = Curve::ScalarField; + using Polynomial = bb::Polynomial; + + const size_t num_points = 1 << 12; // large enough to ensure normal pippenger logic is used + const size_t num_nonzero = 7; + const size_t offset = 1 << 11; + + // Construct a sparse random polynomial + Polynomial poly(num_nonzero, num_points, offset); + for (size_t i = offset; i < offset + num_nonzero; ++i) { + poly.at(i) = Fr::random_element(); + } + + // Commit to the polynomial using both the conventional commit method and the sparse commitment method + auto key = TestFixture::template create_commitment_key(num_points); + G1 commit_result = key->commit(poly); + G1 sparse_commit_result = key->commit_sparse(poly); + + EXPECT_EQ(sparse_commit_result, commit_result); +} + +/** + * @brief Test commit_sparse on polynomial with medium size and nonzero start index. + * @details This was used to catch a bug in commit_sparse where the number of threads was > 1 and the size was not a + * power of 2. + */ +TYPED_TEST(CommitmentKeyTest, CommitSparseMediumNonZeroStartIndex) +{ + using Curve = TypeParam; + using CK = CommitmentKey; + using G1 = Curve::AffineElement; + using Fr = Curve::ScalarField; + using Polynomial = bb::Polynomial; + + const size_t num_points = 1 << 12; // large enough to ensure normal pippenger logic is used + const size_t num_nonzero = (1 << 9) + 1; + const size_t offset = 1 << 11; + + // Construct a sparse random polynomial + Polynomial poly(num_nonzero, num_points, offset); + for (size_t i = offset; i < offset + num_nonzero; ++i) { + poly.at(i) = Fr::random_element(); + } + + // Commit to the polynomial using both the conventional commit method and the sparse commitment method + auto key = TestFixture::template create_commitment_key(num_points); + G1 commit_result = key->commit(poly); + G1 sparse_commit_result = key->commit_sparse(poly); + + EXPECT_EQ(sparse_commit_result, commit_result); +} + } // namespace bb diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/utils/batch_mul_native.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/utils/batch_mul_native.hpp index 59970ea6d0b..507e2a6d2ba 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/utils/batch_mul_native.hpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/utils/batch_mul_native.hpp @@ -4,40 +4,48 @@ #include namespace bb { -template class CommitmentSchemesUtils { +/** + * @brief Utility for native batch multiplication of group elements + * @note This is used only for native verification and is not optimized for efficiency + */ +template +static Commitment batch_mul_native(const std::vector& _points, const std::vector& _scalars) +{ + std::vector points; + std::vector scalars; + for (size_t i = 0; i < _points.size(); ++i) { + const auto& point = _points[i]; + const auto& scalar = _scalars[i]; - public: - using Commitment = typename Curve::AffineElement; - using FF = typename Curve::ScalarField; - - /** - * @brief Utility for native batch multiplication of group elements - * @note This is used only for native verification and is not optimized for efficiency - */ - static Commitment batch_mul_native(const std::vector& _points, const std::vector& _scalars) - { - std::vector points; - std::vector scalars; - for (size_t i = 0; i < _points.size(); ++i) { - const auto& point = _points[i]; - const auto& scalar = _scalars[i]; - - // TODO: Special handling of point at infinity here due to incorrect serialization. - if (!scalar.is_zero() && !point.is_point_at_infinity() && !point.y.is_zero()) { - points.emplace_back(point); - scalars.emplace_back(scalar); - } + // TODO: Special handling of point at infinity here due to incorrect serialization. + if (!scalar.is_zero() && !point.is_point_at_infinity() && !point.y.is_zero()) { + points.emplace_back(point); + scalars.emplace_back(scalar); } + } - if (points.empty()) { - return Commitment::infinity(); - } + if (points.empty()) { + return Commitment::infinity(); + } - auto result = points[0] * scalars[0]; - for (size_t idx = 1; idx < scalars.size(); ++idx) { - result = result + points[idx] * scalars[idx]; - } - return result; + auto result = points[0] * scalars[0]; + for (size_t idx = 1; idx < scalars.size(); ++idx) { + result = result + points[idx] * scalars[idx]; + } + return result; +} + +/** + * @brief Utility for native batch multiplication of group elements + * @note This is used only for native verification and is not optimized for efficiency + */ +template static FF linear_combination(const std::vector& as, const std::vector& bs) +{ + FF result = as[0] * bs[0]; + for (size_t idx = 1; idx < as.size(); ++idx) { + result += as[idx] * bs[idx]; } -}; -} // namespace bb \ No newline at end of file + return result; +} + +} // namespace bb diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/wrapper.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/wrapper.hpp deleted file mode 100644 index ded625f8e39..00000000000 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/wrapper.hpp +++ /dev/null @@ -1,14 +0,0 @@ -#pragma once - -#include "barretenberg/ecc/curves/bn254/g1.hpp" -#include "gemini/gemini.hpp" - -namespace bb { - -struct OpeningProof { - std::vector gemini; - bb::g1::affine_element shplonk; - bb::g1::affine_element kzg; -}; - -} // namespace bb diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp index 659fa2be271..e1ee3b92fcd 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes/zeromorph/zeromorph.hpp @@ -469,7 +469,6 @@ template class ZeroMorphProver_ { template class ZeroMorphVerifier_ { using FF = typename Curve::ScalarField; using Commitment = typename Curve::AffineElement; - using Utils = CommitmentSchemesUtils; public: /** @@ -549,7 +548,7 @@ template class ZeroMorphVerifier_ { return Commitment::batch_mul(commitments, scalars); } } else { - return Utils::batch_mul_native(commitments, scalars); + return batch_mul_native(commitments, scalars); } } @@ -705,7 +704,7 @@ template class ZeroMorphVerifier_ { return Commitment::batch_mul(commitments, scalars); } } else { - return Utils::batch_mul_native(commitments, scalars); + return batch_mul_native(commitments, scalars); } } diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes_recursion/shplemini.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes_recursion/shplemini.test.cpp index 050a2603972..1398cefe7e8 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes_recursion/shplemini.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes_recursion/shplemini.test.cpp @@ -1,9 +1,9 @@ +#include "barretenberg/commitment_schemes/shplonk/shplemini.hpp" #include "barretenberg/circuit_checker/circuit_checker.hpp" #include "barretenberg/commitment_schemes/commitment_key.test.hpp" #include "barretenberg/commitment_schemes/gemini/gemini.hpp" #include "barretenberg/commitment_schemes/ipa/ipa.hpp" #include "barretenberg/commitment_schemes/kzg/kzg.hpp" -#include "barretenberg/commitment_schemes/shplonk/shplemini_verifier.hpp" #include "barretenberg/commitment_schemes/shplonk/shplonk.hpp" #include "barretenberg/srs/global_crs.hpp" #include "barretenberg/stdlib/primitives/curves/bn254.hpp" @@ -33,8 +33,7 @@ TEST(ShpleminiRecursionTest, ProveAndVerifySingle) using NativeCurve = typename Curve::NativeCurve; using NativePCS = std::conditional_t, KZG, IPA>; using CommitmentKey = typename NativePCS::CK; - using GeminiProver = GeminiProver_; - using ShplonkProver = ShplonkProver_; + using ShpleminiProver = ShpleminiProver_; using ShpleminiVerifier = ShpleminiVerifier_; using Fr = typename Curve::ScalarField; using NativeFr = typename Curve::NativeCurve::ScalarField; @@ -68,14 +67,10 @@ TEST(ShpleminiRecursionTest, ProveAndVerifySingle) for (size_t i = 0; i < NUM_SHIFTED; ++i) { g_polynomials.emplace_back(f_polynomials[i]); h_polynomials.emplace_back(g_polynomials[i].shifted()); - w_evaluations.emplace_back(h_polynomials[i].evaluate_mle(u_challenge)); + w_evaluations.emplace_back(f_polynomials[i].evaluate_mle(u_challenge, true)); } } - std::vector claimed_evaluations; - claimed_evaluations.reserve(v_evaluations.size() + w_evaluations.size()); - claimed_evaluations.insert(claimed_evaluations.end(), v_evaluations.begin(), v_evaluations.end()); - claimed_evaluations.insert(claimed_evaluations.end(), w_evaluations.begin(), w_evaluations.end()); // Compute commitments [f_i] std::vector f_commitments; auto commitment_key = std::make_shared(4096); @@ -90,49 +85,8 @@ TEST(ShpleminiRecursionTest, ProveAndVerifySingle) // Initialize an empty NativeTranscript auto prover_transcript = NativeTranscript::prover_init_empty(); - - NativeFr rho = prover_transcript->template get_challenge("rho"); - std::vector rhos = gemini::powers_of_rho(rho, NUM_SHIFTED + NUM_UNSHIFTED); - // Batch the unshifted polynomials and the to-be-shifted polynomials using ρ - Polynomial batched_poly_unshifted(N); - size_t poly_idx = 0; - for (auto& unshifted_poly : f_polynomials) { - batched_poly_unshifted.add_scaled(unshifted_poly, rhos[poly_idx]); - ++poly_idx; - } - - Polynomial batched_poly_to_be_shifted = Polynomial::shiftable(N); // batched to-be-shifted polynomials - for (auto& to_be_shifted_poly : g_polynomials) { - batched_poly_to_be_shifted.add_scaled(to_be_shifted_poly, rhos[poly_idx]); - ++poly_idx; - }; - - // Compute d-1 polynomials Fold^(i), i = 1, ..., d-1. - auto fold_polynomials = GeminiProver::compute_gemini_polynomials( - u_challenge, std::move(batched_poly_unshifted), std::move(batched_poly_to_be_shifted)); - // Comute and add to trasnscript the commitments [Fold^(i)], i = 1, ..., d-1 - for (size_t l = 0; l < log_circuit_size - 1; ++l) { - NativeCommitment current_commitment = commitment_key->commit(fold_polynomials[l + 2]); - prover_transcript->send_to_verifier("Gemini:FOLD_" + std::to_string(l + 1), current_commitment); - } - const NativeFr r_challenge = prover_transcript->template get_challenge("Gemini:r"); - - const auto [gemini_opening_pairs, gemini_witnesses] = - GeminiProver::compute_fold_polynomial_evaluations(u_challenge, std::move(fold_polynomials), r_challenge); - - std::vector> opening_claims; - for (size_t l = 0; l < log_circuit_size; ++l) { - std::string label = "Gemini:a_" + std::to_string(l); - const auto& evaluation = gemini_opening_pairs[l + 1].evaluation; - prover_transcript->send_to_verifier(label, evaluation); - opening_claims.push_back({ gemini_witnesses[l], gemini_opening_pairs[l] }); - } - opening_claims.push_back({ gemini_witnesses[log_circuit_size], gemini_opening_pairs[log_circuit_size] }); - - // Shplonk prover output: - // - opening pair: (z_challenge, 0) - // - witness: polynomial Q - Q_z - ShplonkProver::prove(commitment_key, opening_claims, prover_transcript); + auto prover_opening_claims = ShpleminiProver::prove( + N, RefVector(f_polynomials), RefVector(g_polynomials), u_challenge, commitment_key, prover_transcript); Builder builder; StdlibProof stdlib_proof = bb::convert_proof_to_witness(&builder, prover_transcript->proof_data); @@ -160,15 +114,17 @@ TEST(ShpleminiRecursionTest, ProveAndVerifySingle) }; auto stdlib_f_commitments = commitments_to_witnesses(f_commitments); auto stdlib_g_commitments = commitments_to_witnesses(g_commitments); - auto stdlib_claimed_evaluations = elements_to_witness(claimed_evaluations); + auto stdlib_v_evaluations = elements_to_witness(v_evaluations); + auto stdlib_w_evaluations = elements_to_witness(w_evaluations); std::vector u_challenge_in_circuit = elements_to_witness(u_challenge); [[maybe_unused]] auto opening_claim = - ShpleminiVerifier::compute_batch_opening_claim(Fr::from_witness(&builder, log_circuit_size), + ShpleminiVerifier::compute_batch_opening_claim(Fr::from_witness(&builder, N), RefVector(stdlib_f_commitments), RefVector(stdlib_g_commitments), - RefVector(stdlib_claimed_evaluations), + RefVector(stdlib_v_evaluations), + RefVector(stdlib_w_evaluations), u_challenge_in_circuit, Commitment::one(&builder), stdlib_verifier_transcript); diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes_recursion/zeromorph.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes_recursion/zeromorph.test.cpp index a31be135de5..5c6f22d6af4 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes_recursion/zeromorph.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes_recursion/zeromorph.test.cpp @@ -134,8 +134,6 @@ TEST(ZeroMorphRecursionTest, ProveAndVerifySingle) RefVector(stdlib_w_evaluations), // shifted u_challenge_in_circuit, Commitment::one(&builder), - stdlib_verifier_transcript, - {}, - {}); + stdlib_verifier_transcript); EXPECT_TRUE(CircuitChecker::check(builder)); } diff --git a/barretenberg/cpp/src/barretenberg/constants.hpp b/barretenberg/cpp/src/barretenberg/constants.hpp index 72e8f9fcd3e..13adc7c74f7 100644 --- a/barretenberg/cpp/src/barretenberg/constants.hpp +++ b/barretenberg/cpp/src/barretenberg/constants.hpp @@ -5,4 +5,9 @@ namespace bb { // The log of the max circuit size assumed in order to achieve constant sized Honk proofs // TODO(https://github.com/AztecProtocol/barretenberg/issues/1046): Remove the need for const sized proofs static constexpr uint32_t CONST_PROOF_SIZE_LOG_N = 28; + +// The log of the max circuit size of circuits being folded. This size is assumed by the PG prover and verifier in order +// to ensure a constant PG proof size and a PG recursive verifier circuit that is independent of the size of the +// circuits being folded. +static constexpr uint32_t CONST_PG_LOG_N = 20; } // namespace bb \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/crypto/merkle_tree/signal.hpp b/barretenberg/cpp/src/barretenberg/crypto/merkle_tree/signal.hpp index 0c313b06614..b9ff1e7a201 100644 --- a/barretenberg/cpp/src/barretenberg/crypto/merkle_tree/signal.hpp +++ b/barretenberg/cpp/src/barretenberg/crypto/merkle_tree/signal.hpp @@ -4,27 +4,27 @@ namespace bb::crypto::merkle_tree { /** - * @brief Used in parallel insertions in the IndexedTree. Workers signal to other following workes as they move up + * @brief Used in parallel insertions in the the IndexedTree. Workers signal to other following workes as they move up * the level of the tree. * */ class Signal { public: - explicit Signal(uint32_t initial_level = 1) - : signal_(std::make_unique>(initial_level)){}; + Signal(uint32_t initial_level = 1) + : signal_(initial_level){}; ~Signal() = default; Signal(const Signal& other) - : signal_(std::make_unique>(other.signal_->load())) + : signal_(other.signal_.load()) {} - Signal(Signal&& other) = default; + Signal(const Signal&& other) = delete; Signal& operator=(const Signal& other) { if (this != &other) { - signal_->store(other.signal_->load()); + signal_.store(other.signal_.load()); } return *this; } - Signal& operator=(Signal&& other) = default; + Signal& operator=(const Signal&& other) = delete; /** * @brief Causes the thread to wait until the required level has been signalled @@ -33,10 +33,10 @@ class Signal { */ void wait_for_level(uint32_t level = 0) { - uint32_t current_level = signal_->load(); + uint32_t current_level = signal_.load(); while (current_level > level) { - signal_->wait(current_level); - current_level = signal_->load(); + signal_.wait(current_level); + current_level = signal_.load(); } } @@ -47,18 +47,17 @@ class Signal { */ void signal_level(uint32_t level = 0) { - signal_->store(level); - signal_->notify_all(); + signal_.store(level); + signal_.notify_all(); } void signal_decrement(uint32_t delta = 1) { - signal_->fetch_sub(delta); - signal_->notify_all(); + signal_.fetch_sub(delta); + signal_.notify_all(); } private: - // apple clang has issues if this cannot be move-constructed, so we wrap in unique_ptr - std::unique_ptr> signal_; + std::atomic signal_; }; } // namespace bb::crypto::merkle_tree diff --git a/barretenberg/cpp/src/barretenberg/dsl/CMakeLists.txt b/barretenberg/cpp/src/barretenberg/dsl/CMakeLists.txt index dc8acd00b49..2ddd66ceb49 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/CMakeLists.txt +++ b/barretenberg/cpp/src/barretenberg/dsl/CMakeLists.txt @@ -2,10 +2,9 @@ # We do not need to bloat barretenberg.wasm with gzip functionality in a browser context as the browser can do this set(DSL_DEPENDENCIES - aztec_ivc + client_ivc plonk ultra_honk - client_ivc stdlib_sha256 stdlib_aes128 stdlib_keccak diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp index ef8ee0eebc7..486e7f599ad 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp @@ -7,6 +7,7 @@ #include "barretenberg/stdlib_circuit_builders/ultra_circuit_builder.hpp" #include "proof_surgeon.hpp" #include +#include namespace acir_format { @@ -55,7 +56,11 @@ void build_constraints(Builder& builder, // Add range constraint for (size_t i = 0; i < constraint_system.range_constraints.size(); ++i) { const auto& constraint = constraint_system.range_constraints.at(i); - builder.create_range_constraint(constraint.witness, constraint.num_bits, ""); + uint32_t range = constraint.num_bits; + if (constraint_system.minimal_range.contains(constraint.witness)) { + range = constraint_system.minimal_range[constraint.witness]; + } + builder.create_range_constraint(constraint.witness, range, ""); gate_counter.track_diff(constraint_system.gates_per_opcode, constraint_system.original_opcode_indices.range_constraints.at(i)); } @@ -69,13 +74,6 @@ void build_constraints(Builder& builder, } // Add sha256 constraints - for (size_t i = 0; i < constraint_system.sha256_constraints.size(); ++i) { - const auto& constraint = constraint_system.sha256_constraints.at(i); - create_sha256_constraints(builder, constraint); - gate_counter.track_diff(constraint_system.gates_per_opcode, - constraint_system.original_opcode_indices.sha256_constraints.at(i)); - } - for (size_t i = 0; i < constraint_system.sha256_compression.size(); ++i) { const auto& constraint = constraint_system.sha256_compression[i]; create_sha256_compression_constraints(builder, constraint); @@ -212,10 +210,10 @@ void build_constraints(Builder& builder, gate_counter.track_diff(constraint_system.gates_per_opcode, constraint_system.original_opcode_indices.bigint_to_le_bytes_constraints.at(i)); } + // assert equals for (size_t i = 0; i < constraint_system.assert_equalities.size(); ++i) { const auto& constraint = constraint_system.assert_equalities.at(i); - builder.assert_equal(constraint.a, constraint.b); gate_counter.track_diff(constraint_system.gates_per_opcode, constraint_system.original_opcode_indices.assert_equalities.at(i)); @@ -236,19 +234,22 @@ void build_constraints(Builder& builder, } } else { process_plonk_recursion_constraints(builder, constraint_system, has_valid_witness_assignments, gate_counter); - process_honk_recursion_constraints(builder, constraint_system, has_valid_witness_assignments, gate_counter); + AggregationObjectIndices current_aggregation_object = + stdlib::recursion::init_default_agg_obj_indices(builder); + current_aggregation_object = process_honk_recursion_constraints( + builder, constraint_system, has_valid_witness_assignments, gate_counter, current_aggregation_object); #ifndef DISABLE_AZTEC_VM - process_avm_recursion_constraints(builder, constraint_system, has_valid_witness_assignments, gate_counter); + current_aggregation_object = process_avm_recursion_constraints( + builder, constraint_system, has_valid_witness_assignments, gate_counter, current_aggregation_object); #endif - - // If the circuit does not itself contain honk recursion constraints but is going to be - // proven with honk then recursively verified, add a default aggregation object - if (constraint_system.honk_recursion_constraints.empty() && honk_recursion && - builder.is_recursive_circuit) { // Set a default aggregation object if we don't have - // one. - AggregationObjectIndices current_aggregation_object = - stdlib::recursion::init_default_agg_obj_indices(builder); + // If the circuit has either honk or avm recursion constraints, add the aggregation object. Otherwise, add a + // default one if the circuit is recursive and honk_recursion is true. + if (!constraint_system.honk_recursion_constraints.empty() || + !constraint_system.avm_recursion_constraints.empty()) { + ASSERT(honk_recursion); + builder.add_recursive_proof(current_aggregation_object); + } else if (honk_recursion && builder.is_recursive_circuit) { // Make sure the verification key records the public input indices of the // final recursion output. builder.add_recursive_proof(current_aggregation_object); @@ -344,14 +345,12 @@ void process_plonk_recursion_constraints(Builder& builder, } } -void process_honk_recursion_constraints(Builder& builder, - AcirFormat& constraint_system, - bool has_valid_witness_assignments, - GateCounter& gate_counter) +AggregationObjectIndices process_honk_recursion_constraints(Builder& builder, + AcirFormat& constraint_system, + bool has_valid_witness_assignments, + GateCounter& gate_counter, + AggregationObjectIndices current_aggregation_object) { - AggregationObjectIndices current_aggregation_object = - stdlib::recursion::init_default_agg_obj_indices(builder); - // Add recursion constraints size_t idx = 0; for (auto& constraint : constraint_system.honk_recursion_constraints) { @@ -361,35 +360,16 @@ void process_honk_recursion_constraints(Builder& builder, gate_counter.track_diff(constraint_system.gates_per_opcode, constraint_system.original_opcode_indices.honk_recursion_constraints.at(idx++)); } - - // Now that the circuit has been completely built, we add the output aggregation as public - // inputs. - if (!constraint_system.honk_recursion_constraints.empty()) { - - // First add the output aggregation object as public inputs - // Set the indices as public inputs because they are no longer being - // created in ACIR - for (const auto& idx : current_aggregation_object) { - builder.set_public_input(idx); - } - - // Make sure the verification key records the public input indices of the - // final recursion output. - builder.set_recursive_proof(current_aggregation_object); - } + return current_aggregation_object; } -// TODO(https://github.com/AztecProtocol/barretenberg/issues/1095): Probably makes sense to aggregate Honk and AVM -// proofs together. #ifndef DISABLE_AZTEC_VM -void process_avm_recursion_constraints(Builder& builder, - AcirFormat& constraint_system, - bool has_valid_witness_assignments, - GateCounter& gate_counter) +AggregationObjectIndices process_avm_recursion_constraints(Builder& builder, + AcirFormat& constraint_system, + bool has_valid_witness_assignments, + GateCounter& gate_counter, + AggregationObjectIndices current_aggregation_object) { - AggregationObjectIndices current_aggregation_object = - stdlib::recursion::init_default_agg_obj_indices(builder); - // Add recursion constraints size_t idx = 0; for (auto& constraint : constraint_system.avm_recursion_constraints) { @@ -399,25 +379,7 @@ void process_avm_recursion_constraints(Builder& builder, gate_counter.track_diff(constraint_system.gates_per_opcode, constraint_system.original_opcode_indices.avm_recursion_constraints.at(idx++)); } - - // TODO(https://github.com/AztecProtocol/barretenberg/issues/1095): The following code will have to be adapted to - // support a circuit with both honk and avm recursion constraints. - - // Now that the circuit has been completely built, we add - // the output aggregation as public inputs. - if (!constraint_system.avm_recursion_constraints.empty()) { - - // First add the output aggregation object as public inputs - // Set the indices as public inputs because they are no longer being - // created in ACIR - for (const auto& idx : current_aggregation_object) { - builder.set_public_input(idx); - } - - // Make sure the verification key records the public input indices of the - // final recursion output. - builder.set_recursive_proof(current_aggregation_object); - } + return current_aggregation_object; } #endif // DISABLE_AZTEC_VM @@ -479,7 +441,7 @@ MegaCircuitBuilder create_circuit(AcirFormat& constraint_system, /** * @brief Create a kernel circuit from a constraint system and an IVC instance - * @details This method processes ivc_recursion_constraints using the kernel completion logic contained in AztecIvc. + * @details This method processes ivc_recursion_constraints using the kernel completion logic contained in ClientIVC. * Since verification keys are known at the time of acir generation, the verification key witnesses contained in the * constraints are used directly to instantiate the recursive verifiers. On the other hand, the proof witnesses * contained in the constraints are generally 'dummy' values since proofs are not known during acir generation (with the @@ -493,11 +455,11 @@ MegaCircuitBuilder create_circuit(AcirFormat& constraint_system, * @return MegaCircuitBuilder */ MegaCircuitBuilder create_kernel_circuit(AcirFormat& constraint_system, - AztecIVC& ivc, + ClientIVC& ivc, const WitnessVector& witness, const size_t size_hint) { - using StdlibVerificationKey = AztecIVC::RecursiveVerificationKey; + using StdlibVerificationKey = ClientIVC::RecursiveVerificationKey; // Construct the main kernel circuit logic excluding recursive verifiers auto circuit = create_circuit(constraint_system, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.hpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.hpp index ef80b59020e..02de8ac8b9e 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.hpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.hpp @@ -5,7 +5,7 @@ #include "avm_recursion_constraint.hpp" #endif -#include "barretenberg/aztec_ivc/aztec_ivc.hpp" +#include "barretenberg/client_ivc/client_ivc.hpp" #include "barretenberg/common/slab_allocator.hpp" #include "barretenberg/serialize/msgpack.hpp" #include "bigint_constraint.hpp" @@ -25,6 +25,7 @@ #include "recursion_constraint.hpp" #include "schnorr_verify.hpp" #include "sha256_constraint.hpp" +#include #include #include @@ -40,7 +41,6 @@ struct AcirFormatOriginalOpcodeIndices { std::vector logic_constraints; std::vector range_constraints; std::vector aes128_constraints; - std::vector sha256_constraints; std::vector sha256_compression; std::vector schnorr_constraints; std::vector ecdsa_k1_constraints; @@ -89,7 +89,6 @@ struct AcirFormat { std::vector logic_constraints; std::vector range_constraints; std::vector aes128_constraints; - std::vector sha256_constraints; std::vector sha256_compression; std::vector schnorr_constraints; std::vector ecdsa_k1_constraints; @@ -125,6 +124,7 @@ struct AcirFormat { // Set of constrained witnesses std::set constrained_witness = {}; + std::map minimal_range = {}; // Indices of the original opcode that originated each constraint in AcirFormat. AcirFormatOriginalOpcodeIndices original_opcode_indices; @@ -135,7 +135,6 @@ struct AcirFormat { logic_constraints, range_constraints, aes128_constraints, - sha256_constraints, sha256_compression, schnorr_constraints, ecdsa_k1_constraints, @@ -210,7 +209,7 @@ Builder create_circuit(AcirFormat& constraint_system, bool collect_gates_per_opcode = false); MegaCircuitBuilder create_kernel_circuit(AcirFormat& constraint_system, - AztecIVC& ivc, + ClientIVC& ivc, const WitnessVector& witness = {}, const size_t size_hint = 0); diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp index 64a7fea8a5e..f894d12eed4 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp @@ -45,7 +45,6 @@ TEST_F(AcirFormatTests, TestASingleConstraintNoPubInputs) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -169,7 +168,6 @@ TEST_F(AcirFormatTests, TestLogicGateFromNoirCircuit) .logic_constraints = { logic_constraint }, .range_constraints = { range_a, range_b }, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -243,6 +241,7 @@ TEST_F(AcirFormatTests, TestSchnorrVerifyPass) .result = 76, .signature = signature, }; + AcirFormat constraint_system{ .varnum = 81, .recursive = false, @@ -251,7 +250,6 @@ TEST_F(AcirFormatTests, TestSchnorrVerifyPass) .logic_constraints = {}, .range_constraints = range_constraints, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = { schnorr_constraint }, .ecdsa_k1_constraints = {}, @@ -360,7 +358,6 @@ TEST_F(AcirFormatTests, TestSchnorrVerifySmallRange) .logic_constraints = {}, .range_constraints = range_constraints, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = { schnorr_constraint }, .ecdsa_k1_constraints = {}, @@ -482,7 +479,6 @@ TEST_F(AcirFormatTests, TestVarKeccak) .logic_constraints = {}, .range_constraints = { range_a, range_b, range_c, range_d }, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -564,7 +560,6 @@ TEST_F(AcirFormatTests, TestKeccakPermutation) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -598,11 +593,9 @@ TEST_F(AcirFormatTests, TestKeccakPermutation) 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50 }; auto builder = create_circuit(constraint_system, /*size_hint=*/0, witness); - auto composer = Composer(); auto prover = composer.create_ultra_with_keccak_prover(builder); auto proof = prover.construct_proof(); - auto verifier = composer.create_ultra_with_keccak_verifier(builder); EXPECT_EQ(verifier.verify_proof(proof), true); @@ -643,7 +636,6 @@ TEST_F(AcirFormatTests, TestCollectsGateCounts) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -676,4 +668,4 @@ TEST_F(AcirFormatTests, TestCollectsGateCounts) create_circuit(constraint_system, /*size_hint*/ 0, witness, false, std::make_shared(), true); EXPECT_EQ(constraint_system.gates_per_opcode, std::vector({ 2, 1 })); -} \ No newline at end of file +} diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format_mocks.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format_mocks.cpp index e1240d85e82..2173285becf 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format_mocks.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format_mocks.cpp @@ -6,7 +6,6 @@ acir_format::AcirFormatOriginalOpcodeIndices create_empty_original_opcode_indice .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -46,9 +45,6 @@ void mock_opcode_indices(acir_format::AcirFormat& constraint_system) for (size_t i = 0; i < constraint_system.aes128_constraints.size(); i++) { constraint_system.original_opcode_indices.aes128_constraints.push_back(current_opcode++); } - for (size_t i = 0; i < constraint_system.sha256_constraints.size(); i++) { - constraint_system.original_opcode_indices.sha256_constraints.push_back(current_opcode++); - } for (size_t i = 0; i < constraint_system.sha256_compression.size(); i++) { constraint_system.original_opcode_indices.sha256_compression.push_back(current_opcode++); } @@ -127,4 +123,4 @@ void mock_opcode_indices(acir_format::AcirFormat& constraint_system) } constraint_system.num_acir_opcodes = static_cast(current_opcode); -} \ No newline at end of file +} diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_integration.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_integration.test.cpp index a1d47e61123..453b80171c4 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_integration.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_integration.test.cpp @@ -406,6 +406,7 @@ TEST_P(AcirIntegrationFoldingTest, DISABLED_FoldAndVerifyProgramStack) // Assumes Flavor is not UltraHonk ClientIVC ivc; + ivc.auto_verify_mode = true; ivc.trace_structure = TraceStructure::SMALL_TEST; while (!program_stack.empty()) { diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.cpp index c42ba62db64..c5fda604160 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.cpp @@ -193,7 +193,8 @@ std::pair is_assert_equal(Program::Opcode::AssertZero const& return { 0, 0 }; } if (pt.q_l == -pt.q_r && pt.q_l != bb::fr::zero() && pt.q_c == bb::fr::zero()) { - if (af.constrained_witness.contains(pt.a) && af.constrained_witness.contains(pt.b)) { + // we require that one of the 2 witnesses to be constrained in an arithmetic gate + if (af.constrained_witness.contains(pt.a) || af.constrained_witness.contains(pt.b)) { return { pt.a, pt.b }; } } @@ -210,13 +211,39 @@ void handle_arithmetic(Program::Opcode::AssertZero const& arg, AcirFormat& af, s uint32_t w2 = std::get<1>(assert_equal); if (w1 != 0) { if (w1 != w2) { + if (!af.constrained_witness.contains(pt.a)) { + // we mark it as constrained because it is going to be asserted to be equal to a constrained one. + af.constrained_witness.insert(pt.a); + // swap the witnesses so that the first one is always properly constrained. + auto tmp = pt.a; + pt.a = pt.b; + pt.b = tmp; + } + if (!af.constrained_witness.contains(pt.b)) { + // we mark it as constrained because it is going to be asserted to be equal to a constrained one. + af.constrained_witness.insert(pt.b); + } + // minimal_range of a witness is the smallest range of the witness and the witness that are + // 'assert_equal' to it + if (af.minimal_range.contains(pt.b) && af.minimal_range.contains(pt.a)) { + if (af.minimal_range[pt.a] < af.minimal_range[pt.b]) { + af.minimal_range[pt.a] = af.minimal_range[pt.b]; + } else { + af.minimal_range[pt.b] = af.minimal_range[pt.a]; + } + } else if (af.minimal_range.contains(pt.b)) { + af.minimal_range[pt.a] = af.minimal_range[pt.b]; + } else if (af.minimal_range.contains(pt.a)) { + af.minimal_range[pt.b] = af.minimal_range[pt.a]; + } + af.assert_equalities.push_back(pt); af.original_opcode_indices.assert_equalities.push_back(opcode_index); } return; } // Even if the number of linear terms is less than 3, we might not be able to fit it into a width-3 arithmetic - // gate. This is the case if the linear terms are all disctinct witness from the multiplication term. In that + // gate. This is the case if the linear terms are all distinct witness from the multiplication term. In that // case, the serialize_arithmetic_gate() function will return a poly_triple with all 0's, and we use a width-4 // gate instead. We could probably always use a width-4 gate in fact. if (pt == poly_triple{ 0, 0, 0, 0, 0, 0, 0, 0 }) { @@ -288,6 +315,7 @@ void handle_blackbox_func_call(Program::Opcode::BlackBoxFuncCall const& arg, .num_bits = arg.lhs.num_bits, .is_xor_gate = false, }); + af.constrained_witness.insert(af.logic_constraints.back().result); af.original_opcode_indices.logic_constraints.push_back(opcode_index); } else if constexpr (std::is_same_v) { auto lhs_input = parse_input(arg.lhs); @@ -299,6 +327,7 @@ void handle_blackbox_func_call(Program::Opcode::BlackBoxFuncCall const& arg, .num_bits = arg.lhs.num_bits, .is_xor_gate = true, }); + af.constrained_witness.insert(af.logic_constraints.back().result); af.original_opcode_indices.logic_constraints.push_back(opcode_index); } else if constexpr (std::is_same_v) { auto witness_input = get_witness_from_function_input(arg.input); @@ -307,7 +336,13 @@ void handle_blackbox_func_call(Program::Opcode::BlackBoxFuncCall const& arg, .num_bits = arg.input.num_bits, }); af.original_opcode_indices.range_constraints.push_back(opcode_index); - + if (af.minimal_range.contains(witness_input)) { + if (af.minimal_range[witness_input] > arg.input.num_bits) { + af.minimal_range[witness_input] = arg.input.num_bits; + } + } else { + af.minimal_range[witness_input] = arg.input.num_bits; + } } else if constexpr (std::is_same_v) { af.aes128_constraints.push_back(AES128Constraint{ .inputs = map(arg.inputs, [](auto& e) { return parse_input(e); }), @@ -315,28 +350,19 @@ void handle_blackbox_func_call(Program::Opcode::BlackBoxFuncCall const& arg, .key = map(arg.key, [](auto& e) { return parse_input(e); }), .outputs = map(arg.outputs, [](auto& e) { return e.value; }), }); + for (auto& output : af.aes128_constraints.back().outputs) { + af.constrained_witness.insert(output); + } af.original_opcode_indices.aes128_constraints.push_back(opcode_index); - - } else if constexpr (std::is_same_v) { - af.sha256_constraints.push_back(Sha256Constraint{ - .inputs = map(arg.inputs, - [](auto& e) { - auto input_witness = get_witness_from_function_input(e); - return Sha256Input{ - .witness = input_witness, - .num_bits = e.num_bits, - }; - }), - .result = map(arg.outputs, [](auto& e) { return e.value; }), - }); - af.original_opcode_indices.sha256_constraints.push_back(opcode_index); - } else if constexpr (std::is_same_v) { af.sha256_compression.push_back(Sha256Compression{ .inputs = map(arg.inputs, [](auto& e) { return parse_input(e); }), .hash_values = map(arg.hash_values, [](auto& e) { return parse_input(e); }), .result = map(arg.outputs, [](auto& e) { return e.value; }), }); + for (auto& output : af.sha256_compression.back().result) { + af.constrained_witness.insert(output); + } af.original_opcode_indices.sha256_compression.push_back(opcode_index); } else if constexpr (std::is_same_v) { af.blake2s_constraints.push_back(Blake2sConstraint{ @@ -349,6 +375,9 @@ void handle_blackbox_func_call(Program::Opcode::BlackBoxFuncCall const& arg, }), .result = map(arg.outputs, [](auto& e) { return e.value; }), }); + for (auto& output : af.blake2s_constraints.back().result) { + af.constrained_witness.insert(output); + } af.original_opcode_indices.blake2s_constraints.push_back(opcode_index); } else if constexpr (std::is_same_v) { af.blake3_constraints.push_back(Blake3Constraint{ @@ -361,6 +390,9 @@ void handle_blackbox_func_call(Program::Opcode::BlackBoxFuncCall const& arg, }), .result = map(arg.outputs, [](auto& e) { return e.value; }), }); + for (auto& output : af.blake3_constraints.back().result) { + af.constrained_witness.insert(output); + } af.original_opcode_indices.blake3_constraints.push_back(opcode_index); } else if constexpr (std::is_same_v) { auto input_pkey_x = get_witness_from_function_input(arg.public_key_x); @@ -373,14 +405,16 @@ void handle_blackbox_func_call(Program::Opcode::BlackBoxFuncCall const& arg, .signature = map(arg.signature, [](auto& e) { return get_witness_from_function_input(e); }), }); af.original_opcode_indices.schnorr_constraints.push_back(opcode_index); + af.constrained_witness.insert(af.schnorr_constraints.back().result); } else if constexpr (std::is_same_v) { - af.pedersen_constraints.push_back(PedersenConstraint{ .scalars = map(arg.inputs, [](auto& e) { return get_witness_from_function_input(e); }), .hash_index = arg.domain_separator, .result_x = arg.outputs[0].value, .result_y = arg.outputs[1].value, }); + af.constrained_witness.insert(af.pedersen_constraints.back().result_x); + af.constrained_witness.insert(af.pedersen_constraints.back().result_y); af.original_opcode_indices.pedersen_constraints.push_back(opcode_index); } else if constexpr (std::is_same_v) { af.pedersen_hash_constraints.push_back(PedersenHashConstraint{ @@ -388,6 +422,7 @@ void handle_blackbox_func_call(Program::Opcode::BlackBoxFuncCall const& arg, .hash_index = arg.domain_separator, .result = arg.output.value, }); + af.constrained_witness.insert(af.pedersen_hash_constraints.back().result); af.original_opcode_indices.pedersen_hash_constraints.push_back(opcode_index); } else if constexpr (std::is_same_v) { af.ecdsa_k1_constraints.push_back(EcdsaSecp256k1Constraint{ @@ -398,6 +433,7 @@ void handle_blackbox_func_call(Program::Opcode::BlackBoxFuncCall const& arg, .pub_y_indices = map(arg.public_key_y, [](auto& e) { return get_witness_from_function_input(e); }), .result = arg.output.value, }); + af.constrained_witness.insert(af.ecdsa_k1_constraints.back().result); af.original_opcode_indices.ecdsa_k1_constraints.push_back(opcode_index); } else if constexpr (std::is_same_v) { af.ecdsa_r1_constraints.push_back(EcdsaSecp256r1Constraint{ @@ -408,6 +444,7 @@ void handle_blackbox_func_call(Program::Opcode::BlackBoxFuncCall const& arg, .result = arg.output.value, .signature = map(arg.signature, [](auto& e) { return get_witness_from_function_input(e); }), }); + af.constrained_witness.insert(af.ecdsa_r1_constraints.back().result); af.original_opcode_indices.ecdsa_r1_constraints.push_back(opcode_index); } else if constexpr (std::is_same_v) { af.multi_scalar_mul_constraints.push_back(MultiScalarMul{ @@ -417,6 +454,9 @@ void handle_blackbox_func_call(Program::Opcode::BlackBoxFuncCall const& arg, .out_point_y = arg.outputs[1].value, .out_point_is_infinite = arg.outputs[2].value, }); + af.constrained_witness.insert(af.multi_scalar_mul_constraints.back().out_point_x); + af.constrained_witness.insert(af.multi_scalar_mul_constraints.back().out_point_y); + af.constrained_witness.insert(af.multi_scalar_mul_constraints.back().out_point_is_infinite); af.original_opcode_indices.multi_scalar_mul_constraints.push_back(opcode_index); } else if constexpr (std::is_same_v) { auto input_1_x = parse_input(arg.input1[0]); @@ -437,6 +477,9 @@ void handle_blackbox_func_call(Program::Opcode::BlackBoxFuncCall const& arg, .result_y = arg.outputs[1].value, .result_infinite = arg.outputs[2].value, }); + af.constrained_witness.insert(af.ec_add_constraints.back().result_x); + af.constrained_witness.insert(af.ec_add_constraints.back().result_y); + af.constrained_witness.insert(af.ec_add_constraints.back().result_infinite); af.original_opcode_indices.ec_add_constraints.push_back(opcode_index); } else if constexpr (std::is_same_v) { auto input_var_message_size = get_witness_from_function_input(arg.var_message_size); @@ -452,12 +495,18 @@ void handle_blackbox_func_call(Program::Opcode::BlackBoxFuncCall const& arg, .result = map(arg.outputs, [](auto& e) { return e.value; }), .var_message_size = input_var_message_size, }); + for (auto& output : af.keccak_constraints.back().result) { + af.constrained_witness.insert(output); + } af.original_opcode_indices.keccak_constraints.push_back(opcode_index); } else if constexpr (std::is_same_v) { af.keccak_permutations.push_back(Keccakf1600{ .state = map(arg.inputs, [](auto& e) { return parse_input(e); }), .result = map(arg.outputs, [](auto& e) { return e.value; }), }); + for (auto& output : af.keccak_permutations.back().result) { + af.constrained_witness.insert(output); + } af.original_opcode_indices.keccak_permutations.push_back(opcode_index); } else if constexpr (std::is_same_v) { @@ -509,6 +558,9 @@ void handle_blackbox_func_call(Program::Opcode::BlackBoxFuncCall const& arg, .input = arg.input, .result = map(arg.outputs, [](auto& e) { return e.value; }), }); + for (auto& output : af.bigint_to_le_bytes_constraints.back().result) { + af.constrained_witness.insert(output); + } af.original_opcode_indices.bigint_to_le_bytes_constraints.push_back(opcode_index); } else if constexpr (std::is_same_v) { af.bigint_operations.push_back(BigIntOperation{ @@ -548,6 +600,9 @@ void handle_blackbox_func_call(Program::Opcode::BlackBoxFuncCall const& arg, .result = map(arg.outputs, [](auto& e) { return e.value; }), .len = arg.len, }); + for (auto& output : af.poseidon2_constraints.back().result) { + af.constrained_witness.insert(output); + } af.original_opcode_indices.poseidon2_constraints.push_back(opcode_index); } }, @@ -648,7 +703,8 @@ AcirFormat circuit_serde_to_acir_format(Program::Circuit const& circuit, bool ho } for (const auto& [block_id, block] : block_id_to_block_constraint) { // Note: the trace will always be empty for ReturnData since it cannot be explicitly read from in noir - if (!block.first.trace.empty() || block.first.type == BlockType::ReturnData) { + if (!block.first.trace.empty() || block.first.type == BlockType::ReturnData || + block.first.type == BlockType::CallData) { af.block_constraints.push_back(block.first); af.original_opcode_indices.block_constraints.push_back(block.second); } @@ -753,4 +809,4 @@ AcirProgramStack get_acir_program_stack(std::string const& bytecode_path, return { constraint_systems, witness_stack }; } #endif -} // namespace acir_format \ No newline at end of file +} // namespace acir_format diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/avm_recursion_constraint.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/avm_recursion_constraint.cpp index 069acda9c57..68dcd61424b 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/avm_recursion_constraint.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/avm_recursion_constraint.cpp @@ -1,12 +1,14 @@ #ifndef DISABLE_AZTEC_VM #include "avm_recursion_constraint.hpp" +#include "barretenberg/constants.hpp" #include "barretenberg/flavor/flavor.hpp" #include "barretenberg/stdlib/plonk_recursion/aggregation_state/aggregation_state.hpp" #include "barretenberg/stdlib/primitives/curves/bn254.hpp" #include "barretenberg/stdlib_circuit_builders/ultra_flavor.hpp" #include "barretenberg/vm/avm/recursion/avm_recursive_flavor.hpp" #include "barretenberg/vm/avm/recursion/avm_recursive_verifier.hpp" +#include "barretenberg/vm/aztec_constants.hpp" #include "proof_surgeon.hpp" #include @@ -38,21 +40,19 @@ void create_dummy_vkey_and_proof(Builder& builder, { using Flavor = AvmFlavor; - size_t num_frs_comm = bb::field_conversion::calc_num_bn254_frs(); - size_t num_frs_fr = bb::field_conversion::calc_num_bn254_frs(); - // Relevant source for proof layout: AvmFlavor::Transcript::serialize_full_transcript() - assert((proof_size - Flavor::NUM_WITNESS_ENTITIES * num_frs_comm - Flavor::NUM_ALL_ENTITIES * num_frs_fr - - 2 * num_frs_comm) % - (num_frs_comm + num_frs_fr * Flavor::BATCHED_RELATION_PARTIAL_LENGTH) == + assert((proof_size - Flavor::NUM_WITNESS_ENTITIES * Flavor::NUM_FRS_COM - + Flavor::NUM_ALL_ENTITIES * Flavor::NUM_FRS_FR - 2 * Flavor::NUM_FRS_COM - Flavor::NUM_FRS_FR) % + (Flavor::NUM_FRS_COM + Flavor::NUM_FRS_FR * Flavor::BATCHED_RELATION_PARTIAL_LENGTH) == 0); // Derivation of circuit size based on the proof // Here, we should always get CONST_PROOF_SIZE_LOG_N which is not what is // usually set for the AVM proof. As it is a dummy key/proof, it should not matter. - auto log_circuit_size = (proof_size - Flavor::NUM_WITNESS_ENTITIES * num_frs_comm - - Flavor::NUM_ALL_ENTITIES * num_frs_fr - 2 * num_frs_comm) / - (num_frs_comm + num_frs_fr * Flavor::BATCHED_RELATION_PARTIAL_LENGTH); + auto log_circuit_size = + (proof_size - Flavor::NUM_WITNESS_ENTITIES * Flavor::NUM_FRS_COM - + Flavor::NUM_ALL_ENTITIES * Flavor::NUM_FRS_FR - 2 * Flavor::NUM_FRS_COM - Flavor::NUM_FRS_FR) / + (Flavor::NUM_FRS_COM + Flavor::NUM_FRS_FR * Flavor::BATCHED_RELATION_PARTIAL_LENGTH); /*************************************************************************** * Construct Dummy Verification Key diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/avm_recursion_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/avm_recursion_constraint.test.cpp index dbbd169c3cd..619a9810aa4 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/avm_recursion_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/avm_recursion_constraint.test.cpp @@ -114,7 +114,7 @@ class AcirAvmRecursionConstraint : public ::testing::Test { constraint_system.original_opcode_indices = create_empty_original_opcode_indices(); mock_opcode_indices(constraint_system); - auto outer_circuit = create_circuit(constraint_system, /*size_hint*/ 0, witness); + auto outer_circuit = create_circuit(constraint_system, /*size_hint*/ 0, witness, /*honk_recursion=*/true); return outer_circuit; } }; diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/bigint_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/bigint_constraint.test.cpp index a2dec9cce39..541dbcab37a 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/bigint_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/bigint_constraint.test.cpp @@ -178,7 +178,6 @@ TEST_F(BigIntTests, TestBigIntConstraintMultiple) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -254,7 +253,6 @@ TEST_F(BigIntTests, TestBigIntConstraintSimple) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -314,7 +312,6 @@ TEST_F(BigIntTests, TestBigIntConstraintReuse) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -379,7 +376,6 @@ TEST_F(BigIntTests, TestBigIntConstraintReuse2) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -465,7 +461,6 @@ TEST_F(BigIntTests, TestBigIntDIV) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/block_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/block_constraint.test.cpp index 03ddf8035dc..45dece532ee 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/block_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/block_constraint.test.cpp @@ -146,7 +146,6 @@ TEST_F(UltraPlonkRAM, TestBlockConstraint) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -200,7 +199,6 @@ TEST_F(MegaHonk, Databus) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -309,7 +307,6 @@ TEST_F(MegaHonk, DatabusReturn) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ec_operations.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ec_operations.test.cpp index ac86757bb0d..f12c39e8f8f 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ec_operations.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ec_operations.test.cpp @@ -68,7 +68,6 @@ TEST_F(EcOperations, TestECOperations) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -207,7 +206,6 @@ TEST_F(EcOperations, TestECMultiScalarMul) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256k1.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256k1.test.cpp index d8bc40c5308..24864b52f6d 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256k1.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256k1.test.cpp @@ -100,7 +100,6 @@ TEST_F(ECDSASecp256k1, TestECDSAConstraintSucceed) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = { ecdsa_k1_constraint }, @@ -157,7 +156,6 @@ TEST_F(ECDSASecp256k1, TestECDSACompilesForVerifier) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = { ecdsa_k1_constraint }, @@ -209,7 +207,6 @@ TEST_F(ECDSASecp256k1, TestECDSAConstraintFail) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = { ecdsa_k1_constraint }, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256r1.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256r1.test.cpp index 869c896ea6f..657eaa2d316 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256r1.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256r1.test.cpp @@ -134,7 +134,6 @@ TEST(ECDSASecp256r1, test_hardcoded) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -193,7 +192,6 @@ TEST(ECDSASecp256r1, TestECDSAConstraintSucceed) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -250,7 +248,6 @@ TEST(ECDSASecp256r1, TestECDSACompilesForVerifier) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -303,7 +300,6 @@ TEST(ECDSASecp256r1, TestECDSAConstraintFail) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/honk_recursion_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/honk_recursion_constraint.test.cpp index abf9be04f69..cf3303b557b 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/honk_recursion_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/honk_recursion_constraint.test.cpp @@ -96,7 +96,6 @@ class AcirHonkRecursionConstraint : public ::testing::Test { .logic_constraints = { logic_constraint }, .range_constraints = { range_a, range_b }, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -173,7 +172,7 @@ class AcirHonkRecursionConstraint : public ::testing::Test { AcirFormat constraint_system{}; constraint_system.varnum = static_cast(witness.size()); - constraint_system.recursive = false; + constraint_system.recursive = true; constraint_system.num_acir_opcodes = static_cast(honk_recursion_constraints.size()); constraint_system.honk_recursion_constraints = honk_recursion_constraints; constraint_system.original_opcode_indices = create_empty_original_opcode_indices(); diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ivc_recursion_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ivc_recursion_constraint.test.cpp index bee50c74aa7..f4a2d6b0c95 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ivc_recursion_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ivc_recursion_constraint.test.cpp @@ -1,6 +1,6 @@ #include "acir_format.hpp" #include "acir_format_mocks.hpp" -#include "barretenberg/aztec_ivc/aztec_ivc.hpp" +#include "barretenberg/client_ivc/client_ivc.hpp" #include "barretenberg/goblin/mock_circuits.hpp" #include "barretenberg/ultra_honk/decider_proving_key.hpp" #include "barretenberg/ultra_honk/ultra_prover.hpp" @@ -20,9 +20,9 @@ class IvcRecursionConstraintTest : public ::testing::Test { using Builder = MegaCircuitBuilder; using Flavor = MegaFlavor; using FF = Flavor::FF; - using VerifierInputs = AztecIVC::VerifierInputs; - using QUEUE_TYPE = AztecIVC::QUEUE_TYPE; - using VerificationQueue = AztecIVC::VerificationQueue; + using VerifierInputs = ClientIVC::VerifierInputs; + using QUEUE_TYPE = ClientIVC::QUEUE_TYPE; + using VerificationQueue = ClientIVC::VerificationQueue; using ArithmeticConstraint = AcirFormat::PolyTripleConstraint; /** @@ -31,7 +31,7 @@ class IvcRecursionConstraintTest : public ::testing::Test { * from another in testing. * */ - static Builder construct_mock_app_circuit(AztecIVC& ivc) + static Builder construct_mock_app_circuit(ClientIVC& ivc) { Builder circuit{ ivc.goblin.op_queue }; GoblinMockCircuits::construct_simple_circuit(circuit); @@ -160,7 +160,7 @@ class IvcRecursionConstraintTest : public ::testing::Test { */ TEST_F(IvcRecursionConstraintTest, AccumulateTwo) { - AztecIVC ivc; + ClientIVC ivc; ivc.trace_structure = TraceStructure::SMALL_TEST; // construct a mock app_circuit @@ -185,7 +185,7 @@ TEST_F(IvcRecursionConstraintTest, AccumulateTwo) */ TEST_F(IvcRecursionConstraintTest, AccumulateFour) { - AztecIVC ivc; + ClientIVC ivc; ivc.trace_structure = TraceStructure::SMALL_TEST; // construct a mock app_circuit @@ -232,7 +232,7 @@ TEST_F(IvcRecursionConstraintTest, AccumulateTwoFailure) // then proving and verifying the full IVC. VerifierInputs alternative_verification_queue_entry; { - AztecIVC ivc; + ClientIVC ivc; ivc.trace_structure = TraceStructure::SMALL_TEST; // construct and accumulate a mock app circuit with a single unique public input @@ -254,7 +254,7 @@ TEST_F(IvcRecursionConstraintTest, AccumulateTwoFailure) // Repeat a similar IVC but use the alternative queue entry just created to provide different (but independently // valid) witnesses during constraint system construction VS recursive verifier construction. - AztecIVC ivc; + ClientIVC ivc; ivc.trace_structure = TraceStructure::SMALL_TEST; // construct and accumulate a mock app circuit with a single unique public input diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/multi_scalar_mul.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/multi_scalar_mul.test.cpp index 47bd777cfce..a0adc6331e0 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/multi_scalar_mul.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/multi_scalar_mul.test.cpp @@ -68,7 +68,6 @@ TEST_F(MSMTests, TestMSM) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/poseidon2_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/poseidon2_constraint.test.cpp index c3dc81fd9bc..ec2793c3aca 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/poseidon2_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/poseidon2_constraint.test.cpp @@ -48,7 +48,6 @@ TEST_F(Poseidon2Tests, TestPoseidon2Permutation) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/proof_surgeon.hpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/proof_surgeon.hpp index ef342ff45c2..6906b048ff4 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/proof_surgeon.hpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/proof_surgeon.hpp @@ -1,8 +1,10 @@ #pragma once +#include "barretenberg/common/map.hpp" #include "barretenberg/common/serialize.hpp" #include "barretenberg/ecc/curves/bn254/fr.hpp" #include "barretenberg/plonk_honk_shared/types/aggregation_object_type.hpp" #include "barretenberg/serialize/msgpack.hpp" +#include #include namespace acir_format { @@ -11,7 +13,46 @@ namespace acir_format { static constexpr size_t HONK_RECURSION_PUBLIC_INPUT_OFFSET = 3; class ProofSurgeon { + using FF = bb::fr; + + // construct a string of the form "[, , ...]" + static std::string to_json(const std::vector& data) + { + return format("[", bb::join(map(data, [](auto fr) { return format("\"", fr, "\""); }), ", "), "]"); + } + public: + /** + * @brief Constrcut a string containing the inputs to a noir verify_proof call (to be written to a .toml) + * + * @param proof A complete bberg style proof (i.e. contains the public inputs) + * @param verification_key + * @param toml_path + */ + static std::string construct_recursion_inputs_toml_data(std::vector& proof, const auto& verification_key) + { + // Convert verification key to fields + std::vector vkey_fields = verification_key.to_field_elements(); + + // Get public inputs by cutting them out of the proof + const size_t num_public_inputs_to_extract = verification_key.num_public_inputs - bb::AGGREGATION_OBJECT_SIZE; + std::vector public_inputs = + acir_format::ProofSurgeon::cut_public_inputs_from_proof(proof, num_public_inputs_to_extract); + + // Construct json-style output for each component + std::string proof_json = to_json(proof); + std::string pub_inputs_json = to_json(public_inputs); + std::string vk_json = to_json(vkey_fields); + + // Format with labels for noir recursion input + std::string toml_content = "key_hash = " + format("\"", FF(0), "\"") + "\n"; // not used by honk + toml_content += "proof = " + proof_json + "\n"; + toml_content += "public_inputs = " + pub_inputs_json + "\n"; + toml_content += "verification_key = " + vk_json + "\n"; + + return toml_content; + } + /** * @brief Reconstruct a bberg style proof from a acir style proof + public inputs * @details Insert the public inputs in the middle the proof fields after 'inner_public_input_offset' because this diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.hpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.hpp index e53937bc8be..0c243e6f357 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.hpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.hpp @@ -8,6 +8,8 @@ namespace acir_format { // Used to specify the type of recursive verifier via the proof_type specified by the RecursiveAggregation opcode from // ACIR +// Keep this enum values in sync with their noir counterpart constants defined in +// noir-protocol-circuits/crates/types/src/constants.nr enum PROOF_TYPE { PLONK, HONK, OINK, PG, AVM }; using namespace bb::plonk; diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp index 1811b8d7fee..ec22ec71fdb 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp @@ -93,7 +93,6 @@ Builder create_inner_circuit() .logic_constraints = { logic_constraint }, .range_constraints = { range_a, range_b }, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -257,7 +256,6 @@ Builder create_outer_circuit(std::vector& inner_circuits) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/serde/acir.hpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/serde/acir.hpp index d4bdab6ebb0..5905b337856 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/serde/acir.hpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/serde/acir.hpp @@ -256,15 +256,6 @@ struct BlackBoxOp { static AES128Encrypt bincodeDeserialize(std::vector); }; - struct Sha256 { - Program::HeapVector message; - Program::HeapArray output; - - friend bool operator==(const Sha256&, const Sha256&); - std::vector bincodeSerialize() const; - static Sha256 bincodeDeserialize(std::vector); - }; - struct Blake2s { Program::HeapVector message; Program::HeapArray output; @@ -462,7 +453,7 @@ struct BlackBoxOp { struct ToRadix { Program::MemoryAddress input; - uint32_t radix; + Program::MemoryAddress radix; Program::HeapArray output; bool output_bits; @@ -472,7 +463,6 @@ struct BlackBoxOp { }; std::variant); }; - struct SHA256 { - std::vector inputs; - std::array outputs; - - friend bool operator==(const SHA256&, const SHA256&); - std::vector bincodeSerialize() const; - static SHA256 bincodeDeserialize(std::vector); - }; - struct Blake2s { std::vector inputs; std::array outputs; @@ -1086,7 +1067,6 @@ struct BlackBoxFuncCall { AND, XOR, RANGE, - SHA256, Blake2s, Blake3, SchnorrVerify, @@ -2922,58 +2902,6 @@ Program::BlackBoxFuncCall::RANGE serde::Deserializable BlackBoxFuncCall::SHA256::bincodeSerialize() const -{ - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} - -inline BlackBoxFuncCall::SHA256 BlackBoxFuncCall::SHA256::bincodeDeserialize(std::vector input) -{ - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw_or_abort("Some input bytes were not read"); - } - return value; -} - -} // end of namespace Program - -template <> -template -void serde::Serializable::serialize(const Program::BlackBoxFuncCall::SHA256& obj, - Serializer& serializer) -{ - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.outputs, serializer); -} - -template <> -template -Program::BlackBoxFuncCall::SHA256 serde::Deserializable::deserialize( - Deserializer& deserializer) -{ - Program::BlackBoxFuncCall::SHA256 obj; - obj.inputs = serde::Deserializable::deserialize(deserializer); - obj.outputs = serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Program { - inline bool operator==(const BlackBoxFuncCall::Blake2s& lhs, const BlackBoxFuncCall::Blake2s& rhs) { if (!(lhs.inputs == rhs.inputs)) { @@ -4254,57 +4182,6 @@ Program::BlackBoxOp::AES128Encrypt serde::Deserializable BlackBoxOp::Sha256::bincodeSerialize() const -{ - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} - -inline BlackBoxOp::Sha256 BlackBoxOp::Sha256::bincodeDeserialize(std::vector input) -{ - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw_or_abort("Some input bytes were not read"); - } - return value; -} - -} // end of namespace Program - -template <> -template -void serde::Serializable::serialize(const Program::BlackBoxOp::Sha256& obj, - Serializer& serializer) -{ - serde::Serializable::serialize(obj.message, serializer); - serde::Serializable::serialize(obj.output, serializer); -} - -template <> -template -Program::BlackBoxOp::Sha256 serde::Deserializable::deserialize(Deserializer& deserializer) -{ - Program::BlackBoxOp::Sha256 obj; - obj.message = serde::Deserializable::deserialize(deserializer); - obj.output = serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Program { - inline bool operator==(const BlackBoxOp::Blake2s& lhs, const BlackBoxOp::Blake2s& rhs) { if (!(lhs.message == rhs.message)) { diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.cpp index cafec218b11..80fd8a18867 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.cpp @@ -6,53 +6,10 @@ namespace acir_format { -using namespace bb; - -// This function does not work (properly) because the stdlib:sha256 function is not working correctly for 512 bits -// pair -template void create_sha256_constraints(Builder& builder, const Sha256Constraint& constraint) -{ - using byte_array_ct = stdlib::byte_array; - using field_ct = stdlib::field_t; - - // Create byte array struct - byte_array_ct arr(&builder); - - // Get the witness assignment for each witness index - // Write the witness assignment to the byte_array - for (const auto& witness_index_num_bits : constraint.inputs) { - auto witness_index = witness_index_num_bits.witness; - auto num_bits = witness_index_num_bits.num_bits; - - // XXX: The implementation requires us to truncate the element to the nearest byte and not bit - auto num_bytes = round_to_nearest_byte(num_bits); - - field_ct element = field_ct::from_witness_index(&builder, witness_index); - byte_array_ct element_bytes(element, num_bytes); - - arr.write(element_bytes); - } - - // Compute sha256 - byte_array_ct output_bytes = stdlib::sha256(arr); - - // Convert byte array to vector of field_t - auto bytes = output_bytes.bytes(); - - for (size_t i = 0; i < bytes.size(); ++i) { - auto normalised = bytes[i].normalize(); - if (normalised.is_constant()) { - builder.fix_witness(constraint.result[i], normalised.get_value()); - } else { - builder.assert_equal(bytes[i].normalize().witness_index, constraint.result[i]); - } - } -} - template void create_sha256_compression_constraints(Builder& builder, const Sha256Compression& constraint) { - using field_ct = stdlib::field_t; + using field_ct = bb::stdlib::field_t; std::array inputs; std::array hash_inputs; @@ -72,14 +29,14 @@ void create_sha256_compression_constraints(Builder& builder, const Sha256Compres } // Compute sha256 compression - auto output_bytes = stdlib::sha256_plookup::sha256_block(hash_inputs, inputs); + auto output_bytes = bb::stdlib::sha256_plookup::sha256_block(hash_inputs, inputs); for (size_t i = 0; i < 8; ++i) { auto normalised_output = output_bytes[i].normalize(); if (normalised_output.is_constant()) { builder.fix_witness(constraint.result[i], normalised_output.get_value()); } else { - poly_triple assert_equal{ + bb::poly_triple assert_equal{ .a = normalised_output.witness_index, .b = constraint.result[i], .c = 0, @@ -94,14 +51,9 @@ void create_sha256_compression_constraints(Builder& builder, const Sha256Compres } } -template void create_sha256_constraints(UltraCircuitBuilder& builder, - const Sha256Constraint& constraint); -template void create_sha256_constraints(MegaCircuitBuilder& builder, - const Sha256Constraint& constraint); - -template void create_sha256_compression_constraints(UltraCircuitBuilder& builder, - const Sha256Compression& constraint); -template void create_sha256_compression_constraints(MegaCircuitBuilder& builder, - const Sha256Compression& constraint); +template void create_sha256_compression_constraints(bb::UltraCircuitBuilder& builder, + const Sha256Compression& constraint); +template void create_sha256_compression_constraints(bb::MegaCircuitBuilder& builder, + const Sha256Compression& constraint); } // namespace acir_format diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.hpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.hpp index 4b243b5b6ab..cb5e95f3328 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.hpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.hpp @@ -16,15 +16,6 @@ struct Sha256Input { MSGPACK_FIELDS(witness, num_bits); }; -struct Sha256Constraint { - std::vector inputs; - std::array result; - - friend bool operator==(Sha256Constraint const& lhs, Sha256Constraint const& rhs) = default; - // for serialization, update with any new fields - MSGPACK_FIELDS(inputs, result); -}; - struct Sha256Compression { std::array, 16> inputs; std::array, 8> hash_values; @@ -35,10 +26,6 @@ struct Sha256Compression { MSGPACK_FIELDS(inputs, hash_values, result); }; -// This function does not work (properly) because the stdlib:sha256 function is not working correctly for 512 bits -// pair -template void create_sha256_constraints(Builder& builder, const Sha256Constraint& constraint); - template void create_sha256_compression_constraints(Builder& builder, const Sha256Compression& constraint); diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.test.cpp index 3f27b41c584..063ad4f62c8 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.test.cpp @@ -43,7 +43,6 @@ TEST_F(Sha256Tests, TestSha256Compression) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = { sha256_compression }, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_proofs/c_bind.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_proofs/c_bind.cpp index ea8bef00035..170140dc1e3 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_proofs/c_bind.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_proofs/c_bind.cpp @@ -93,6 +93,7 @@ WASM_EXPORT void acir_fold_and_verify_program_stack(uint8_t const* acir_vec, uin ProgramStack program_stack{ constraint_systems, witness_stack }; ClientIVC ivc; + ivc.auto_verify_mode = true; ivc.trace_structure = TraceStructure::SMALL_TEST; while (!program_stack.empty()) { diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_proofs/honk_contract.hpp b/barretenberg/cpp/src/barretenberg/dsl/acir_proofs/honk_contract.hpp index 3a62a688bac..7a451cd81f2 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_proofs/honk_contract.hpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_proofs/honk_contract.hpp @@ -263,10 +263,6 @@ library Honk { // Sumcheck Fr[BATCHED_RELATION_PARTIAL_LENGTH][CONST_PROOF_SIZE_LOG_N] sumcheckUnivariates; Fr[NUMBER_OF_ENTITIES] sumcheckEvaluations; - // Zero morph - Honk.G1ProofPoint[CONST_PROOF_SIZE_LOG_N] zmCqs; - Honk.G1ProofPoint zmCq; - Honk.G1ProofPoint zmPi; } } @@ -281,12 +277,6 @@ struct Transcript { Fr[NUMBER_OF_ALPHAS] alphas; Fr[CONST_PROOF_SIZE_LOG_N] gateChallenges; Fr[CONST_PROOF_SIZE_LOG_N] sumCheckUChallenges; - Fr rho; - // Zero morph - Fr zmX; - Fr zmY; - Fr zmZ; - Fr zmQuotient; // Derived Fr publicInputsDelta; Fr lookupGrandProductDelta; @@ -308,11 +298,6 @@ library TranscriptLib { (t.gateChallenges, previousChallenge) = generateGateChallenges(previousChallenge); (t.sumCheckUChallenges, previousChallenge) = generateSumcheckChallenges(proof, previousChallenge); - (t.rho, previousChallenge) = generateRhoChallenge(proof, previousChallenge); - - (t.zmY, previousChallenge) = generateZMYChallenge(previousChallenge, proof); - - (t.zmX, t.zmZ, previousChallenge) = generateZMXZChallenges(previousChallenge, proof); return t; } @@ -436,52 +421,6 @@ library TranscriptLib { } nextPreviousChallenge = prevChallenge; } - - function generateRhoChallenge(Honk.Proof memory proof, Fr prevChallenge) internal view returns (Fr rho, Fr nextPreviousChallenge) - { - Fr[NUMBER_OF_ENTITIES + 1] memory rhoChallengeElements; - rhoChallengeElements[0] = prevChallenge; - - // TODO(https://github.com/AztecProtocol/barretenberg/issues/1098): memcpy - for (uint256 i = 0; i < NUMBER_OF_ENTITIES; i++) { - rhoChallengeElements[i + 1] = proof.sumcheckEvaluations[i]; - } - - nextPreviousChallenge = FrLib.fromBytes32(keccak256(abi.encodePacked(rhoChallengeElements))); - Fr unused; - (rho, unused) = splitChallenge(nextPreviousChallenge); - } - - function generateZMYChallenge(Fr previousChallenge, Honk.Proof memory proof) internal view returns (Fr zeromorphY, Fr nextPreviousChallenge) - { - uint256[CONST_PROOF_SIZE_LOG_N * 4 + 1] memory zmY; - zmY[0] = Fr.unwrap(previousChallenge); - - for (uint256 i; i < CONST_PROOF_SIZE_LOG_N; ++i) { - zmY[1 + i * 4] = proof.zmCqs[i].x_0; - zmY[2 + i * 4] = proof.zmCqs[i].x_1; - zmY[3 + i * 4] = proof.zmCqs[i].y_0; - zmY[4 + i * 4] = proof.zmCqs[i].y_1; - } - - nextPreviousChallenge = FrLib.fromBytes32(keccak256(abi.encodePacked(zmY))); - Fr unused; - (zeromorphY, unused) = splitChallenge(nextPreviousChallenge); - } - - function generateZMXZChallenges(Fr previousChallenge, Honk.Proof memory proof) internal pure returns (Fr zeromorphX, Fr zeromorphZ, Fr nextPreviousChallenge) - { - uint256[4 + 1] memory buf; - buf[0] = Fr.unwrap(previousChallenge); - - buf[1] = proof.zmCq.x_0; - buf[2] = proof.zmCq.x_1; - buf[3] = proof.zmCq.y_0; - buf[4] = proof.zmCq.y_1; - - nextPreviousChallenge = FrLib.fromBytes32(keccak256(abi.encodePacked(buf))); - (zeromorphX, zeromorphZ) = splitChallenge(nextPreviousChallenge); - } } // EC Point utilities @@ -1219,7 +1158,6 @@ library RelationsLib { // Errors error PublicInputsLengthWrong(); error SumcheckFailed(); -error ZeromorphFailed(); interface IVerifier { function verify(bytes calldata _proof, bytes32[] calldata _publicInputs) external view returns (bool); @@ -1246,11 +1184,8 @@ contract HonkVerifier is IVerifier // Sumcheck bool sumcheckVerified = verifySumcheck(p, t); if (!sumcheckVerified) revert SumcheckFailed(); - // Zeromorph - bool zeromorphVerified = verifyZeroMorph(p, vk, t); - if (!zeromorphVerified) revert ZeromorphFailed(); - return sumcheckVerified && zeromorphVerified; // Boolean condition not required - nice for vanity :) + return sumcheckVerified; // Boolean condition not required - nice for vanity :) } function loadVerificationKey() internal view returns (Honk.VerificationKey memory) { @@ -1347,45 +1282,6 @@ contract HonkVerifier is IVerifier } boundary = boundary + (NUMBER_OF_ENTITIES * 0x20); - // Zero morph Commitments - for (uint256 i = 0; i < CONST_PROOF_SIZE_LOG_N; i++) { - // Explicitly stating the x0, x1, y0, y1 start and end boundaries to make the calldata slicing bearable - uint256 xStart = boundary + (i * 0x80); - uint256 xEnd = xStart + 0x20; - - uint256 x1Start = xEnd; - uint256 x1End = x1Start + 0x20; - - uint256 yStart = x1End; - uint256 yEnd = yStart + 0x20; - - uint256 y1Start = yEnd; - uint256 y1End = y1Start + 0x20; - - p.zmCqs[i] = Honk.G1ProofPoint({ - x_0: uint256(bytes32(proof[xStart:xEnd])), - x_1: uint256(bytes32(proof[x1Start:x1End])), - y_0: uint256(bytes32(proof[yStart:yEnd])), - y_1: uint256(bytes32(proof[y1Start:y1End])) - }); - } - - boundary = boundary + (CONST_PROOF_SIZE_LOG_N * 0x80); - - p.zmCq = Honk.G1ProofPoint({ - x_0: uint256(bytes32(proof[boundary:boundary + 0x20])), - x_1: uint256(bytes32(proof[boundary + 0x20:boundary + 0x40])), - y_0: uint256(bytes32(proof[boundary + 0x40:boundary + 0x60])), - y_1: uint256(bytes32(proof[boundary + 0x60:boundary + 0x80])) - }); - - p.zmPi = Honk.G1ProofPoint({ - x_0: uint256(bytes32(proof[boundary + 0x80:boundary + 0xa0])), - x_1: uint256(bytes32(proof[boundary + 0xa0:boundary + 0xc0])), - y_0: uint256(bytes32(proof[boundary + 0xc0:boundary + 0xe0])), - y_1: uint256(bytes32(proof[boundary + 0xe0:boundary + 0x100])) - }); - return p; } @@ -1515,305 +1411,6 @@ contract HonkVerifier is IVerifier Fr univariateEval = Fr.wrap(1) + (roundChallenge * (tp.gateChallenges[round] - Fr.wrap(1))); newEvaluation = currentEvaluation * univariateEval; } - - function verifyZeroMorph(Honk.Proof memory proof, Honk.VerificationKey memory vk, Transcript memory tp) - internal - view - returns (bool verified) - { - // Construct batched evaluation v = sum_{i=0}^{m-1}\rho^i*f_i(u) + sum_{i=0}^{l-1}\rho^{m+i}*h_i(u) - Fr batchedEval = Fr.wrap(0); - Fr batchedScalar = Fr.wrap(1); - - // We linearly combine all evaluations (unshifted first, then shifted) - for (uint256 i = 0; i < NUMBER_OF_ENTITIES; ++i) { - batchedEval = batchedEval + proof.sumcheckEvaluations[i] * batchedScalar; - batchedScalar = batchedScalar * tp.rho; - } - - // Get k commitments - Honk.G1Point memory c_zeta = computeCZeta(proof, tp); - Honk.G1Point memory c_zeta_x = computeCZetaX(proof, vk, tp, batchedEval); - Honk.G1Point memory c_zeta_Z = ecAdd(c_zeta, ecMul(c_zeta_x, tp.zmZ)); - - // KZG pairing accumulator - Fr evaluation = Fr.wrap(0); - verified = zkgReduceVerify(proof, tp, evaluation, c_zeta_Z); - } - - // Compute commitment to lifted degree quotient identity - function computeCZeta(Honk.Proof memory proof, Transcript memory tp) internal view returns (Honk.G1Point memory) { - Fr[LOG_N + 1] memory scalars; - Honk.G1ProofPoint[LOG_N + 1] memory commitments; - - // Initial contribution - commitments[0] = proof.zmCq; - scalars[0] = Fr.wrap(1); - - // TODO: optimize pow operations here ? batch mulable - for (uint256 k = 0; k < LOG_N; ++k) { - Fr degree = Fr.wrap((1 << k) - 1); - Fr scalar = FrLib.pow(tp.zmY, k); - scalar = scalar * FrLib.pow(tp.zmX, (1 << LOG_N) - Fr.unwrap(degree) - 1); - scalar = scalar * MINUS_ONE; - - scalars[k + 1] = scalar; - commitments[k + 1] = proof.zmCqs[k]; - } - - // Convert all commitments for batch mul - Honk.G1Point[LOG_N + 1] memory comms = convertPoints(commitments); - - return batchMul(comms, scalars); - } - - struct CZetaXParams { - Fr phi_numerator; - Fr phi_n_x; - Fr rho_pow; - Fr phi_1; - Fr phi_2; - Fr x_pow_2k; - Fr x_pow_2kp1; - } - - function computeCZetaX( - Honk.Proof memory proof, - Honk.VerificationKey memory vk, - Transcript memory tp, - Fr batchedEval - ) internal view returns (Honk.G1Point memory) { - Fr[NUMBER_OF_ENTITIES + CONST_PROOF_SIZE_LOG_N + 1] memory scalars; - Honk.G1Point[NUMBER_OF_ENTITIES + CONST_PROOF_SIZE_LOG_N + 1] memory commitments; - CZetaXParams memory cp; - - // Phi_n(x) = (x^N - 1) / (x - 1) - cp.phi_numerator = FrLib.pow(tp.zmX, (1 << LOG_N)) - Fr.wrap(1); - cp.phi_n_x = FrLib.div(cp.phi_numerator, tp.zmX - Fr.wrap(1)); - - // Add contribution: -v * x * \Phi_n(x) * [1]_1 - // Add base - scalars[0] = MINUS_ONE * batchedEval * tp.zmX * cp.phi_n_x; - commitments[0] = Honk.G1Point({x: 1, y: 2}); // One - - // f - Add all unshifted commitments - // g - Add add to be shifted commitments - - // f commitments are accumulated at (zm_x * r) - cp.rho_pow = Fr.wrap(1); - for (uint256 i = 1; i <= NUMBER_UNSHIFTED; ++i) { - scalars[i] = tp.zmX * cp.rho_pow; - cp.rho_pow = cp.rho_pow * tp.rho; - } - // g commitments are accumulated at r - for (uint256 i = NUMBER_UNSHIFTED + 1; i <= NUMBER_OF_ENTITIES; ++i) { - scalars[i] = cp.rho_pow; - cp.rho_pow = cp.rho_pow * tp.rho; - } - - commitments[1] = vk.qm; - commitments[2] = vk.qc; - commitments[3] = vk.ql; - commitments[4] = vk.qr; - commitments[5] = vk.qo; - commitments[6] = vk.q4; - commitments[7] = vk.qArith; - commitments[8] = vk.qDeltaRange; - commitments[9] = vk.qElliptic; - commitments[10] = vk.qAux; - commitments[11] = vk.qLookup; - commitments[12] = vk.qPoseidon2External; - commitments[13] = vk.qPoseidon2Internal; - commitments[14] = vk.s1; - commitments[15] = vk.s2; - commitments[16] = vk.s3; - commitments[17] = vk.s4; - commitments[18] = vk.id1; - commitments[19] = vk.id2; - commitments[20] = vk.id3; - commitments[21] = vk.id4; - commitments[22] = vk.t1; - commitments[23] = vk.t2; - commitments[24] = vk.t3; - commitments[25] = vk.t4; - commitments[26] = vk.lagrangeFirst; - commitments[27] = vk.lagrangeLast; - - // Accumulate proof points - commitments[28] = convertProofPoint(proof.w1); - commitments[29] = convertProofPoint(proof.w2); - commitments[30] = convertProofPoint(proof.w3); - commitments[31] = convertProofPoint(proof.w4); - commitments[32] = convertProofPoint(proof.zPerm); - commitments[33] = convertProofPoint(proof.lookupInverses); - commitments[34] = convertProofPoint(proof.lookupReadCounts); - commitments[35] = convertProofPoint(proof.lookupReadTags); - - // to be Shifted - commitments[36] = vk.t1; - commitments[37] = vk.t2; - commitments[38] = vk.t3; - commitments[39] = vk.t4; - commitments[40] = convertProofPoint(proof.w1); - commitments[41] = convertProofPoint(proof.w2); - commitments[42] = convertProofPoint(proof.w3); - commitments[43] = convertProofPoint(proof.w4); - commitments[44] = convertProofPoint(proof.zPerm); - - // Add scalar contributions - // Add contributions: scalar * [q_k], k = 0,...,log_N, where - // scalar = -x * (x^{2^k} * \Phi_{n-k-1}(x^{2^{k+1}}) - u_k * \Phi_{n-k}(x^{2^k})) - cp.x_pow_2k = tp.zmX; - cp.x_pow_2kp1 = tp.zmX * tp.zmX; - for (uint256 k; k < CONST_PROOF_SIZE_LOG_N; ++k) { - bool dummy_round = k >= LOG_N; - - // note: defaults to 0 - Fr scalar; - if (!dummy_round) { - cp.phi_1 = FrLib.div(cp.phi_numerator, cp.x_pow_2kp1 - Fr.wrap(1)); - cp.phi_2 = FrLib.div(cp.phi_numerator, cp.x_pow_2k - Fr.wrap(1)); - - scalar = cp.x_pow_2k * cp.phi_1; - scalar = scalar - (tp.sumCheckUChallenges[k] * cp.phi_2); - scalar = scalar * tp.zmX; - scalar = scalar * MINUS_ONE; - - cp.x_pow_2k = cp.x_pow_2kp1; - cp.x_pow_2kp1 = cp.x_pow_2kp1 * cp.x_pow_2kp1; - } - - scalars[NUMBER_OF_ENTITIES + 1 + k] = scalar; - commitments[NUMBER_OF_ENTITIES + 1 + k] = convertProofPoint(proof.zmCqs[k]); - } - - return batchMul2(commitments, scalars); - } - - // Scalar Mul and acumulate into total - function batchMul(Honk.G1Point[LOG_N + 1] memory base, Fr[LOG_N + 1] memory scalars) - internal - view - returns (Honk.G1Point memory result) - { - uint256 limit = LOG_N + 1; - assembly { - let success := 0x01 - let free := mload(0x40) - - // Write the original into the accumulator - // Load into memory for ecMUL, leave offset for eccAdd result - // base is an array of pointers, so we have to dereference them - mstore(add(free, 0x40), mload(mload(base))) - mstore(add(free, 0x60), mload(add(0x20, mload(base)))) - // Add scalar - mstore(add(free, 0x80), mload(scalars)) - success := and(success, staticcall(gas(), 7, add(free, 0x40), 0x60, free, 0x40)) - - let count := 0x01 - - for {} lt(count, limit) { count := add(count, 1) } { - // Get loop offsets - let base_base := add(base, mul(count, 0x20)) - let scalar_base := add(scalars, mul(count, 0x20)) - - mstore(add(free, 0x40), mload(mload(base_base))) - mstore(add(free, 0x60), mload(add(0x20, mload(base_base)))) - // Add scalar - mstore(add(free, 0x80), mload(scalar_base)) - - success := and(success, staticcall(gas(), 7, add(free, 0x40), 0x60, add(free, 0x40), 0x40)) - success := and(success, staticcall(gas(), 6, free, 0x80, free, 0x40)) - } - - mstore(result, mload(free)) - mstore(add(result, 0x20), mload(add(free, 0x20))) - } - } - - // This implementation is the same as above with different constants - function batchMul2( - Honk.G1Point[NUMBER_OF_ENTITIES + CONST_PROOF_SIZE_LOG_N + 1] memory base, - Fr[NUMBER_OF_ENTITIES + CONST_PROOF_SIZE_LOG_N + 1] memory scalars - ) internal view returns (Honk.G1Point memory result) { - uint256 limit = NUMBER_OF_ENTITIES + LOG_N + 1; - assembly { - let success := 0x01 - let free := mload(0x40) - - // Write the original into the accumulator - // Load into memory for ecMUL, leave offset for eccAdd result - // base is an array of pointers, so we have to dereference them - mstore(add(free, 0x40), mload(mload(base))) - mstore(add(free, 0x60), mload(add(0x20, mload(base)))) - // Add scalar - mstore(add(free, 0x80), mload(scalars)) - success := and(success, staticcall(gas(), 7, add(free, 0x40), 0x60, free, 0x40)) - - let count := 0x01 - for {} lt(count, limit) { count := add(count, 1) } { - // Get loop offsets - let base_base := add(base, mul(count, 0x20)) - let scalar_base := add(scalars, mul(count, 0x20)) - - mstore(add(free, 0x40), mload(mload(base_base))) - mstore(add(free, 0x60), mload(add(0x20, mload(base_base)))) - // Add scalar - mstore(add(free, 0x80), mload(scalar_base)) - - success := and(success, staticcall(gas(), 7, add(free, 0x40), 0x60, add(free, 0x40), 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, free, 0x80, free, 0x40)) - } - - // Return the result - i hate this - mstore(result, mload(free)) - mstore(add(result, 0x20), mload(add(free, 0x20))) - } - } - - function zkgReduceVerify( - Honk.Proof memory proof, - Transcript memory tp, - Fr evaluation, - Honk.G1Point memory commitment - ) internal view returns (bool) { - Honk.G1Point memory quotient_commitment = convertProofPoint(proof.zmPi); - Honk.G1Point memory ONE = Honk.G1Point({x: 1, y: 2}); - - Honk.G1Point memory P0 = commitment; - P0 = ecAdd(P0, ecMul(quotient_commitment, tp.zmX)); - - Honk.G1Point memory evalAsPoint = ecMul(ONE, evaluation); - P0 = ecSub(P0, evalAsPoint); - - Honk.G1Point memory P1 = negateInplace(quotient_commitment); - - // Perform pairing check - return pairing(P0, P1); - } - - function pairing(Honk.G1Point memory rhs, Honk.G1Point memory lhs) internal view returns(bool) - { - bytes memory input = - abi.encodePacked(rhs.x, - rhs.y, - // Fixed G1 point - uint256(0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2), - uint256(0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed), - uint256(0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b), - uint256(0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa), - lhs.x, - lhs.y, - // G1 point from VK - uint256(0x260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c1), - uint256(0x0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b0), - uint256(0x04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe4), - uint256(0x22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55)); - - (bool success, bytes memory result) = address(0x08).staticcall(input); - return abi.decode(result, (bool)); - } } // Conversion util - Duplicated as we cannot template LOG_N diff --git a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.hpp b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.hpp index 52d243ca06c..6a01c6af112 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.hpp +++ b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.hpp @@ -53,9 +53,6 @@ class ECCVMProver { CommitmentLabels commitment_labels; - // Container for d + 1 Fold polynomials produced by Gemini - std::vector gemini_polynomials; - Polynomial batched_quotient_Q; // batched quotient poly computed by Shplonk FF nu_challenge; // needed in both Shplonk rounds diff --git a/barretenberg/cpp/src/barretenberg/flavor/flavor.hpp b/barretenberg/cpp/src/barretenberg/flavor/flavor.hpp index cc443d58fa6..e9cb9dbb63a 100644 --- a/barretenberg/cpp/src/barretenberg/flavor/flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/flavor/flavor.hpp @@ -172,7 +172,7 @@ class VerificationKey_ : public PrecomputedCommitments { * * @return std::vector */ - std::vector to_field_elements() + std::vector to_field_elements() const { using namespace bb::field_conversion; @@ -189,7 +189,7 @@ class VerificationKey_ : public PrecomputedCommitments { serialize_to_field_buffer(this->contains_recursive_proof, elements); serialize_to_field_buffer(this->recursive_proof_public_input_indices, elements); - for (Commitment& commitment : this->get_all()) { + for (const Commitment& commitment : this->get_all()) { serialize_to_field_buffer(commitment, elements); } diff --git a/barretenberg/cpp/src/barretenberg/goblin/goblin.hpp b/barretenberg/cpp/src/barretenberg/goblin/goblin.hpp index 18415c42637..134db00a929 100644 --- a/barretenberg/cpp/src/barretenberg/goblin/goblin.hpp +++ b/barretenberg/cpp/src/barretenberg/goblin/goblin.hpp @@ -58,15 +58,14 @@ class GoblinProver { // on the first call to accumulate there is no merge proof to verify bool merge_proof_exists{ false }; - std::shared_ptr get_eccvm_proving_key() const { return eccvm_prover->key; } + std::shared_ptr get_eccvm_proving_key() const { return eccvm_key; } std::shared_ptr get_translator_proving_key() const { return translator_prover->key; } private: // TODO(https://github.com/AztecProtocol/barretenberg/issues/798) unique_ptr use is a hack - std::unique_ptr eccvm_builder; - std::unique_ptr translator_builder; std::unique_ptr translator_prover; std::unique_ptr eccvm_prover; + std::shared_ptr eccvm_key; GoblinAccumulationOutput accumulator; // Used only for ACIR methods for now @@ -171,11 +170,21 @@ class GoblinProver { */ void prove_eccvm() { - eccvm_builder = std::make_unique(op_queue); - eccvm_prover = std::make_unique(*eccvm_builder); - goblin_proof.eccvm_proof = eccvm_prover->construct_proof(); - goblin_proof.translation_evaluations = eccvm_prover->translation_evaluations; - }; + { + ZoneScopedN("Create ECCVMBuilder and ECCVMProver"); + auto eccvm_builder = std::make_unique(op_queue); + eccvm_prover = std::make_unique(*eccvm_builder); + } + { + ZoneScopedN("Construct ECCVM Proof"); + goblin_proof.eccvm_proof = eccvm_prover->construct_proof(); + } + + { + ZoneScopedN("Assign Translation Evaluations"); + goblin_proof.translation_evaluations = eccvm_prover->translation_evaluations; + } + } /** * @brief Construct a translator proof @@ -183,11 +192,23 @@ class GoblinProver { */ void prove_translator() { - translator_builder = std::make_unique( - eccvm_prover->translation_batching_challenge_v, eccvm_prover->evaluation_challenge_x, op_queue); - translator_prover = std::make_unique(*translator_builder, eccvm_prover->transcript); - goblin_proof.translator_proof = translator_prover->construct_proof(); - }; + fq translation_batching_challenge_v = eccvm_prover->translation_batching_challenge_v; + fq evaluation_challenge_x = eccvm_prover->evaluation_challenge_x; + std::shared_ptr transcript = eccvm_prover->transcript; + eccvm_key = eccvm_prover->key; + eccvm_prover = nullptr; + { + ZoneScopedN("Create TranslatorBuilder and TranslatorProver"); + auto translator_builder = + std::make_unique(translation_batching_challenge_v, evaluation_challenge_x, op_queue); + translator_prover = std::make_unique(*translator_builder, transcript); + } + + { + ZoneScopedN("Construct Translator Proof"); + goblin_proof.translator_proof = translator_prover->construct_proof(); + } + } /** * @brief Constuct a full Goblin proof (ECCVM, Translator, merge) diff --git a/barretenberg/cpp/src/barretenberg/goblin/mock_circuits.hpp b/barretenberg/cpp/src/barretenberg/goblin/mock_circuits.hpp index 02e7eb836c2..7daf890d8ae 100644 --- a/barretenberg/cpp/src/barretenberg/goblin/mock_circuits.hpp +++ b/barretenberg/cpp/src/barretenberg/goblin/mock_circuits.hpp @@ -56,7 +56,7 @@ class GoblinMockCircuits { { if (large) { // Results in circuit size 2^19 stdlib::generate_sha256_test_circuit(builder, 12); - stdlib::generate_ecdsa_verification_test_circuit(builder, 11); + stdlib::generate_ecdsa_verification_test_circuit(builder, 10); stdlib::generate_merkle_membership_test_circuit(builder, 12); } else { // Results in circuit size 2^17 stdlib::generate_sha256_test_circuit(builder, 9); diff --git a/barretenberg/cpp/src/barretenberg/goblin/mock_circuits_pinning.test.cpp b/barretenberg/cpp/src/barretenberg/goblin/mock_circuits_pinning.test.cpp index 6367c157c15..53e7c5b2644 100644 --- a/barretenberg/cpp/src/barretenberg/goblin/mock_circuits_pinning.test.cpp +++ b/barretenberg/cpp/src/barretenberg/goblin/mock_circuits_pinning.test.cpp @@ -49,4 +49,31 @@ TEST_F(MegaMockCircuitsPinning, AppCircuitSizes) }; run_test(true); run_test(false); +} + +/** + * @brief Regression test that the structured circuit size has not increased over a power of 2. + */ +TEST_F(MegaMockCircuitsPinning, SmallTestStructuredCircuitSize) +{ + GoblinProver goblin; + MegaCircuitBuilder app_circuit{ goblin.op_queue }; + auto proving_key = std::make_shared(app_circuit, TraceStructure::SMALL_TEST); + EXPECT_EQ(proving_key->proving_key.log_circuit_size, 18); +} + +TEST_F(MegaMockCircuitsPinning, ClientIVCBenchStructuredCircuitSize) +{ + GoblinProver goblin; + MegaCircuitBuilder app_circuit{ goblin.op_queue }; + auto proving_key = std::make_shared(app_circuit, TraceStructure::CLIENT_IVC_BENCH); + EXPECT_EQ(proving_key->proving_key.log_circuit_size, 19); +} + +TEST_F(MegaMockCircuitsPinning, E2EStructuredCircuitSize) +{ + GoblinProver goblin; + MegaCircuitBuilder app_circuit{ goblin.op_queue }; + auto proving_key = std::make_shared(app_circuit, TraceStructure::E2E_FULL_TEST); + EXPECT_EQ(proving_key->proving_key.log_circuit_size, 20); } \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/arithmetization.hpp b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/arithmetization.hpp index ba90244a20d..d5f637de877 100644 --- a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/arithmetization.hpp +++ b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/arithmetization.hpp @@ -30,7 +30,7 @@ struct StackTraces { // A set of fixed block size conigurations to be used with the structured execution trace. The actual block sizes // corresponding to these settings are defined in the corresponding arithmetization classes (Ultra/Mega). For efficiency // it is best to use the smallest possible block sizes to accommodate a given situation. -enum class TraceStructure { NONE, SMALL_TEST, CLIENT_IVC_BENCH, AZTEC_IVC_BENCH, E2E_FULL_TEST }; +enum class TraceStructure { NONE, SMALL_TEST, CLIENT_IVC_BENCH, E2E_FULL_TEST }; /** * @brief Basic structure for storing gate data in a builder diff --git a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/max_block_size_tracker.hpp b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/max_block_size_tracker.hpp index 864d3f25944..911bd581e1f 100644 --- a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/max_block_size_tracker.hpp +++ b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/max_block_size_tracker.hpp @@ -30,10 +30,10 @@ struct MaxBlockSizeTracker { } // For printing only. Must match the order of the members in the arithmetization - std::vector block_labels{ "ecc_op", "pub_inputs", "arithmetic", - "delta_range", "elliptic", "aux", - "lookup", "busread", "poseidon_external", - "poseidon_internal" }; + std::vector block_labels{ + "ecc_op", "pub_inputs", "arithmetic", "delta_range", "elliptic", + "aux", "lookup", "busread", "poseidon2_external", "poseidon2_internal" + }; void print() { diff --git a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/mega_arithmetization.hpp b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/mega_arithmetization.hpp index cca898f800a..cd4f374c2b8 100644 --- a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/mega_arithmetization.hpp +++ b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/mega_arithmetization.hpp @@ -29,13 +29,13 @@ template class MegaArith { T aux; T lookup; T busread; - T poseidon_external; - T poseidon_internal; + T poseidon2_external; + T poseidon2_internal; auto get() { - return RefArray{ ecc_op, pub_inputs, arithmetic, delta_range, elliptic, - aux, lookup, busread, poseidon_external, poseidon_internal }; + return RefArray{ ecc_op, pub_inputs, arithmetic, delta_range, elliptic, + aux, lookup, busread, poseidon2_external, poseidon2_internal }; } bool operator==(const MegaTraceBlocks& other) const = default; @@ -55,42 +55,25 @@ template class MegaArith { this->aux = FIXED_SIZE; this->lookup = FIXED_SIZE; this->busread = FIXED_SIZE; - this->poseidon_external = FIXED_SIZE; - this->poseidon_internal = 1 << 15; + this->poseidon2_external = FIXED_SIZE; + this->poseidon2_internal = 1 << 15; } }; - // A minimal structuring specifically tailored to the medium complexity transaction for the ClientIvc benchmark + // A minimal structuring specifically tailored to the medium complexity transaction for the ClientIVC benchmark struct ClientIvcBenchStructuredBlockSizes : public MegaTraceBlocks { ClientIvcBenchStructuredBlockSizes() { this->ecc_op = 1 << 10; this->pub_inputs = 1 << 7; - this->arithmetic = 1 << 16; - this->delta_range = 1 << 15; - this->elliptic = 1 << 14; - this->aux = 1 << 16; - this->lookup = 1 << 15; - this->busread = 1 << 7; - this->poseidon_external = 1 << 11; - this->poseidon_internal = 1 << 14; - } - }; - - // A minimal structuring specifically tailored to the medium complexity transaction for the AztecIvc benchmark - struct AztecIvcBenchStructuredBlockSizes : public MegaTraceBlocks { - AztecIvcBenchStructuredBlockSizes() - { - this->ecc_op = 1 << 10; - this->pub_inputs = 1 << 7; - this->arithmetic = 187000; + this->arithmetic = 201000; this->delta_range = 90000; this->elliptic = 9000; this->aux = 137000; this->lookup = 72000; this->busread = 1 << 7; - this->poseidon_external = 3500; - this->poseidon_internal = 17500; + this->poseidon2_external = 2500; + this->poseidon2_internal = 11500; } }; @@ -98,16 +81,16 @@ template class MegaArith { struct E2eStructuredBlockSizes : public MegaTraceBlocks { E2eStructuredBlockSizes() { - this->ecc_op = 1 << 9; + this->ecc_op = 1 << 10; this->pub_inputs = 4000; this->arithmetic = 200000; this->delta_range = 25000; this->elliptic = 80000; this->aux = 100000; this->lookup = 200000; - this->busread = 10; - this->poseidon_external = 30000; - this->poseidon_internal = 150000; + this->busread = 100; + this->poseidon2_external = 30000; + this->poseidon2_internal = 150000; } }; @@ -186,9 +169,6 @@ template class MegaArith { case TraceStructure::CLIENT_IVC_BENCH: fixed_block_sizes = ClientIvcBenchStructuredBlockSizes(); break; - case TraceStructure::AZTEC_IVC_BENCH: - fixed_block_sizes = AztecIvcBenchStructuredBlockSizes(); - break; case TraceStructure::E2E_FULL_TEST: fixed_block_sizes = E2eStructuredBlockSizes(); break; @@ -215,8 +195,8 @@ template class MegaArith { info("auxiliary :\t", this->aux.size(), "/", this->aux.get_fixed_size()); info("lookups :\t", this->lookup.size(), "/", this->lookup.get_fixed_size()); info("busread :\t", this->busread.size(), "/", this->busread.get_fixed_size()); - info("poseidon ext :\t", this->poseidon_external.size(), "/", this->poseidon_external.get_fixed_size()); - info("poseidon int :\t", this->poseidon_internal.size(), "/", this->poseidon_internal.get_fixed_size()); + info("poseidon ext :\t", this->poseidon2_external.size(), "/", this->poseidon2_external.get_fixed_size()); + info("poseidon int :\t", this->poseidon2_internal.size(), "/", this->poseidon2_internal.get_fixed_size()); info(""); } diff --git a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/ultra_arithmetization.hpp b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/ultra_arithmetization.hpp index 52f5ff80a2f..c5466d4eac0 100644 --- a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/ultra_arithmetization.hpp +++ b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/ultra_arithmetization.hpp @@ -21,13 +21,13 @@ template class UltraArith { T elliptic; T aux; T lookup; - T poseidon_external; - T poseidon_internal; + T poseidon2_external; + T poseidon2_internal; auto get() { - return RefArray{ pub_inputs, arithmetic, delta_range, elliptic, - aux, lookup, poseidon_external, poseidon_internal }; + return RefArray{ pub_inputs, arithmetic, delta_range, elliptic, + aux, lookup, poseidon2_external, poseidon2_internal }; } bool operator==(const UltraTraceBlocks& other) const = default; @@ -44,8 +44,8 @@ template class UltraArith { this->elliptic = FIXED_SIZE; this->aux = FIXED_SIZE; this->lookup = FIXED_SIZE; - this->poseidon_external = FIXED_SIZE; - this->poseidon_internal = FIXED_SIZE; + this->poseidon2_external = FIXED_SIZE; + this->poseidon2_internal = FIXED_SIZE; } }; @@ -101,7 +101,6 @@ template class UltraArith { // We don't use Ultra in ClientIvc so no need for anything other than sizing for simple unit tests case TraceStructure::SMALL_TEST: case TraceStructure::CLIENT_IVC_BENCH: - case TraceStructure::AZTEC_IVC_BENCH: case TraceStructure::E2E_FULL_TEST: fixed_block_sizes = SmallTestStructuredBlockSizes(); break; @@ -119,8 +118,8 @@ template class UltraArith { auto get() { - return RefArray{ this->pub_inputs, this->arithmetic, this->delta_range, this->elliptic, - this->aux, this->lookup, this->poseidon_external, this->poseidon_internal }; + return RefArray{ this->pub_inputs, this->arithmetic, this->delta_range, this->elliptic, + this->aux, this->lookup, this->poseidon2_external, this->poseidon2_internal }; } void summarize() const @@ -132,8 +131,8 @@ template class UltraArith { info("elliptic :\t", this->elliptic.size()); info("auxiliary :\t", this->aux.size()); info("lookups :\t", this->lookup.size()); - info("poseidon ext :\t", this->poseidon_external.size()); - info("poseidon int :\t", this->poseidon_internal.size()); + info("poseidon ext :\t", this->poseidon2_external.size()); + info("poseidon int :\t", this->poseidon2_internal.size()); } size_t get_total_structured_size() diff --git a/barretenberg/cpp/src/barretenberg/polynomials/polynomial.cpp b/barretenberg/cpp/src/barretenberg/polynomials/polynomial.cpp index 9897f2d2173..846487bd2a7 100644 --- a/barretenberg/cpp/src/barretenberg/polynomials/polynomial.cpp +++ b/barretenberg/cpp/src/barretenberg/polynomials/polynomial.cpp @@ -2,6 +2,7 @@ #include "barretenberg/common/assert.hpp" #include "barretenberg/common/slab_allocator.hpp" #include "barretenberg/common/thread.hpp" +#include "barretenberg/numeric/bitop/get_msb.hpp" #include "barretenberg/numeric/bitop/pow.hpp" #include "barretenberg/polynomials/shared_shifted_virtual_zeroes_array.hpp" #include "polynomial_arithmetic.hpp" @@ -10,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -185,16 +187,21 @@ template Fr Polynomial::evaluate(const Fr& z) const template Fr Polynomial::evaluate_mle(std::span evaluation_points, bool shift) const { - const size_t m = evaluation_points.size(); + if (size() == 0) { + return Fr(0); + } + + const size_t n = evaluation_points.size(); + const size_t dim = numeric::get_msb(end_index() - 1) + 1; // Round up to next power of 2 // To simplify handling of edge cases, we assume that the index space is always a power of 2 - ASSERT(virtual_size() == static_cast(1 << m)); + ASSERT(virtual_size() == static_cast(1 << n)); - // we do m rounds l = 0,...,m-1. + // We first fold over dim rounds l = 0,...,dim-1. // in round l, n_l is the size of the buffer containing the Polynomial partially evaluated // at u₀,..., u_l. - // in round 0, this is half the size of n - size_t n_l = 1 << (m - 1); + // In round 0, this is half the size of dim + size_t n_l = 1 << (dim - 1); // temporary buffer of half the size of the Polynomial // TODO(https://github.com/AztecProtocol/barretenberg/issues/1096): Make this a Polynomial with DontZeroMemory::FLAG @@ -215,15 +222,22 @@ template Fr Polynomial::evaluate_mle(std::span evalu const size_t ALLOW_ONE_PAST_READ = 1; tmp[i] = get(i * 2 + offset) + u_l * (get(i * 2 + 1 + offset, ALLOW_ONE_PAST_READ) - get(i * 2 + offset)); } - // partially evaluate the m-1 remaining points - for (size_t l = 1; l < m; ++l) { - n_l = 1 << (m - l - 1); + + // partially evaluate the dim-1 remaining points + for (size_t l = 1; l < dim; ++l) { + n_l = 1 << (dim - l - 1); u_l = evaluation_points[l]; for (size_t i = 0; i < n_l; ++i) { tmp[i] = tmp[i * 2] + u_l * (tmp[(i * 2) + 1] - tmp[i * 2]); } } - Fr result = tmp[0]; + auto result = tmp[0]; + + // We handle the "trivial" dimensions which are full of zeros. + for (size_t i = dim; i < n; i++) { + result *= (Fr(1) - evaluation_points[i]); + } + return result; } diff --git a/barretenberg/cpp/src/barretenberg/polynomials/polynomial.hpp b/barretenberg/cpp/src/barretenberg/polynomials/polynomial.hpp index fa6608456c5..55b03b533c7 100644 --- a/barretenberg/cpp/src/barretenberg/polynomials/polynomial.hpp +++ b/barretenberg/cpp/src/barretenberg/polynomials/polynomial.hpp @@ -69,6 +69,12 @@ template class Polynomial { : Polynomial(coefficients, coefficients.size()) {} + /** + * @brief Utility to efficiently construct a shift from the original polynomial. + * + * @param virtual_size the size of the polynomial to be shifted + * @return Polynomial + */ static Polynomial shiftable(size_t virtual_size) { return Polynomial(/*actual size*/ virtual_size - 1, virtual_size, /*shiftable offset*/ 1); @@ -137,14 +143,19 @@ template class Polynomial { Polynomial shifted() const; /** - * @brief evaluates p(X) = ∑ᵢ aᵢ⋅Xⁱ considered as multi-linear extension p(X₀,…,Xₘ₋₁) = ∑ᵢ aᵢ⋅Lᵢ(X₀,…,Xₘ₋₁) - * at u = (u₀,…,uₘ₋₁) + * @brief evaluate multi-linear extension p(X_0,…,X_{n-1}) = \sum_i a_i*L_i(X_0,…,X_{n-1}) at u = (u_0,…,u_{n-1}) + * If the polynomial is embedded into a lower dimension k= 2^k. + * We fold over k dimensions and then multiply the result by + * (1 - u_k) * (1 - u_{k+1}) ... * (1 - u_{n-1}). In this case, for any + * i < 2^k, L_i is a multiple of (1 - X_k) * (1 - X_{k+1}) ... * (1 - X_{n-1}). Dividing + * p by this monomial leads to a multilinear extension over variables X_0, X_1, ..X_{k-1}. * - * @details this function allocates a temporary buffer of size n/2 + * @details this function allocates a temporary buffer of size 2^(k-1) * - * @param evaluation_points an MLE evaluation point u = (u₀,…,uₘ₋₁) - * @param shift evaluates p'(X₀,…,Xₘ₋₁) = 1⋅L₀(X₀,…,Xₘ₋₁) + ∑ᵢ˲₁ aᵢ₋₁⋅Lᵢ(X₀,…,Xₘ₋₁) if true - * @return Fr p(u₀,…,uₘ₋₁) + * @param evaluation_points evaluation vector of size n + * @param shift a boolean and when set to true, we evaluate the shifted counterpart polynomial: + * enforce a_0 == 0 and compute \sum_i a_{i+1}*L_i(X_0,…,X_{n-1}) */ Fr evaluate_mle(std::span evaluation_points, bool shift = false) const; diff --git a/barretenberg/cpp/src/barretenberg/polynomials/polynomial_arithmetic.test.cpp b/barretenberg/cpp/src/barretenberg/polynomials/polynomial_arithmetic.test.cpp index d400545f063..f143fa21d4e 100644 --- a/barretenberg/cpp/src/barretenberg/polynomials/polynomial_arithmetic.test.cpp +++ b/barretenberg/cpp/src/barretenberg/polynomials/polynomial_arithmetic.test.cpp @@ -4,6 +4,7 @@ #include "barretenberg/numeric/random/engine.hpp" #include "barretenberg/polynomials/evaluation_domain.hpp" #include "legacy_polynomial.hpp" +#include "polynomial.hpp" #include #include #include @@ -1090,7 +1091,8 @@ TYPED_TEST(PolynomialTests, interpolation_constructor) } } -TYPED_TEST(PolynomialTests, evaluate_mle) +// LegacyPolynomials MLE +TYPED_TEST(PolynomialTests, evaluate_mle_legacy) { using FF = TypeParam; @@ -1147,6 +1149,52 @@ TYPED_TEST(PolynomialTests, evaluate_mle) test_case(2); } +/* + * @brief Compare that the mle evaluation over Polynomials match the mle evaluation of + * LegacyPolynomials. + */ +TYPED_TEST(PolynomialTests, evaluate_mle) +{ + using FF = TypeParam; + + auto test_case = [](size_t n, size_t dim) { + auto& engine = numeric::get_debug_randomness(); + size_t k = 1 << dim; + + std::vector evaluation_points; + evaluation_points.resize(n); + for (size_t i = 0; i < n; i++) { + evaluation_points[i] = FF::random_element(&engine); + } + + LegacyPolynomial legacy_poly(1 << n); + Polynomial poly(k, 1 << n); + for (size_t i = 0; i < k; ++i) { + auto const rnd = FF::random_element(&engine); + legacy_poly[i] = rnd; + poly.at(i) = rnd; + } + + const FF legacy_res = legacy_poly.evaluate_mle(evaluation_points); + const FF res = poly.evaluate_mle(evaluation_points); + + EXPECT_EQ(legacy_res, res); + + // Same with shifted polynomials + legacy_poly[0] = FF(0); + poly.at(0) = FF(0); + + const FF legacy_shift_res = legacy_poly.evaluate_mle(evaluation_points, true); + const FF shift_res = poly.evaluate_mle(evaluation_points, true); + + EXPECT_EQ(legacy_shift_res, shift_res); + }; + + test_case(9, 3); + test_case(8, 8); + test_case(13, 1); +} + /** * @brief Test the function for partially evaluating MLE polynomials * diff --git a/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy.test.cpp b/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy.test.cpp index e6a4fe1d340..6cd078f8322 100644 --- a/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy.test.cpp +++ b/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy.test.cpp @@ -213,6 +213,7 @@ template class ProtogalaxyTests : public testing::Test { auto accumulator = std::make_shared(); accumulator->proving_key.polynomials = std::move(full_polynomials); + accumulator->proving_key.log_circuit_size = log_size; accumulator->gate_challenges = betas; accumulator->target_sum = target_sum; accumulator->relation_parameters = relation_parameters; diff --git a/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy_prover_impl.hpp b/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy_prover_impl.hpp index 37365af0156..0a376672a86 100644 --- a/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy_prover_impl.hpp +++ b/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy_prover_impl.hpp @@ -27,7 +27,7 @@ void ProtogalaxyProver_::run_oink_prover_on_each_incomplete_ if (!key->is_accumulator) { run_oink_prover_on_one_incomplete_key(key, domain_separator); key->target_sum = 0; - key->gate_challenges = std::vector(key->proving_key.log_circuit_size, 0); + key->gate_challenges = std::vector(CONST_PG_LOG_N, 0); } idx++; @@ -51,19 +51,16 @@ ProtogalaxyProver_::perturbator_round( using Fun = ProtogalaxyProverInternal; const FF delta = transcript->template get_challenge("delta"); - const std::vector deltas = compute_round_challenge_pows(accumulator->proving_key.log_circuit_size, delta); + const std::vector deltas = compute_round_challenge_pows(CONST_PG_LOG_N, delta); // An honest prover with valid initial key computes that the perturbator is 0 in the first round - const Polynomial perturbator = accumulator->is_accumulator - ? Fun::compute_perturbator(accumulator, deltas) - : Polynomial(accumulator->proving_key.log_circuit_size + 1); + const Polynomial perturbator = accumulator->is_accumulator ? Fun::compute_perturbator(accumulator, deltas) + : Polynomial(CONST_PG_LOG_N + 1); // Prover doesn't send the constant coefficient of F because this is supposed to be equal to the target sum of // the accumulator which the folding verifier has from the previous iteration. // TODO(https://github.com/AztecProtocol/barretenberg/issues/1087): Verifier circuit for first IVC step is // different - if (accumulator->is_accumulator) { - for (size_t idx = 1; idx <= accumulator->proving_key.log_circuit_size; idx++) { - transcript->send_to_verifier("perturbator_" + std::to_string(idx), perturbator[idx]); - } + for (size_t idx = 1; idx <= CONST_PG_LOG_N; idx++) { + transcript->send_to_verifier("perturbator_" + std::to_string(idx), perturbator[idx]); } return std::make_tuple(deltas, perturbator); @@ -88,7 +85,7 @@ ProtogalaxyProver_::combiner_quotient_round(const std::vecto const std::vector updated_gate_challenges = update_gate_challenges(perturbator_challenge, gate_challenges, deltas); const UnivariateRelationSeparator alphas = Fun::compute_and_extend_alphas(keys); - const GateSeparatorPolynomial gate_separators{ updated_gate_challenges, keys[0]->proving_key.log_circuit_size }; + const GateSeparatorPolynomial gate_separators{ updated_gate_challenges, CONST_PG_LOG_N }; const UnivariateRelationParameters relation_parameters = Fun::template compute_extended_relation_parameters(keys); @@ -125,11 +122,9 @@ FoldingResult ProtogalaxyProver_template get_challenge("combiner_quotient_challenge"); FoldingResult result{ .accumulator = keys[0], .proof = std::move(transcript->proof_data) }; - - // TODO(https://github.com/AztecProtocol/barretenberg/issues/881): bad pattern result.accumulator->is_accumulator = true; - // Compute the next target sum + // Compute the next target sum (for its own use; verifier must compute its own values) auto [vanishing_polynomial_at_challenge, lagranges] = Fun::compute_vanishing_polynomial_and_lagranges(combiner_challenge); result.accumulator->target_sum = perturbator_evaluation * lagranges[0] + diff --git a/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy_prover_internal.hpp b/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy_prover_internal.hpp index 4659dce991d..4fd90abed34 100644 --- a/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy_prover_internal.hpp +++ b/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy_prover_internal.hpp @@ -106,8 +106,8 @@ template class ProtogalaxyProverInternal { * each level, the resulting parent nodes will be polynomials of degree (level+1) because we multiply by an * additional factor of X. */ - static std::vector construct_coefficients_tree(const std::vector& betas, - const std::vector& deltas, + static std::vector construct_coefficients_tree(std::span betas, + std::span deltas, const std::vector>& prev_level_coeffs, size_t level = 1) { @@ -142,8 +142,8 @@ template class ProtogalaxyProverInternal { * TODO(https://github.com/AztecProtocol/barretenberg/issues/745): make computation of perturbator more memory * efficient, operate in-place and use std::resize; add multithreading */ - static std::vector construct_perturbator_coefficients(const std::vector& betas, - const std::vector& deltas, + static std::vector construct_perturbator_coefficients(std::span betas, + std::span deltas, const std::vector& full_honk_evaluations) { auto width = full_honk_evaluations.size(); @@ -171,7 +171,18 @@ template class ProtogalaxyProverInternal { accumulator->proving_key.polynomials, accumulator->alphas, accumulator->relation_parameters); const auto betas = accumulator->gate_challenges; ASSERT(betas.size() == deltas.size()); - return Polynomial(construct_perturbator_coefficients(betas, deltas, full_honk_evaluations)); + const size_t log_circuit_size = accumulator->proving_key.log_circuit_size; + + // Compute the perturbator using only the first log_circuit_size-many betas/deltas + std::vector perturbator = construct_perturbator_coefficients(std::span{ betas.data(), log_circuit_size }, + std::span{ deltas.data(), log_circuit_size }, + full_honk_evaluations); + + // Populate the remaining coefficients with zeros to reach the required constant size + for (size_t idx = log_circuit_size; idx < CONST_PG_LOG_N; ++idx) { + perturbator.emplace_back(FF(0)); + } + return Polynomial{ perturbator }; } /** @@ -252,7 +263,7 @@ template class ProtogalaxyProverInternal { * time) assumes the value G(1) is 0, which is true in the case where the witness to be folded is valid. * @todo (https://github.com/AztecProtocol/barretenberg/issues/968) Make combiner tests better * - * @tparam skip_zero_computations whether to use the the optimization that skips computing zero. + * @tparam skip_zero_computations whether to use the optimization that skips computing zero. * @param * @param gate_separators * @return ExtendedUnivariateWithRandomization @@ -514,4 +525,4 @@ template class ProtogalaxyProverInternal { return result; } }; -} // namespace bb \ No newline at end of file +} // namespace bb diff --git a/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy_verifier.cpp b/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy_verifier.cpp index 868ba89c9c2..351596b7552 100644 --- a/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy_verifier.cpp @@ -1,4 +1,5 @@ #include "protogalaxy_verifier.hpp" +#include "barretenberg/commitment_schemes/utils/batch_mul_native.hpp" #include "barretenberg/plonk_honk_shared/library/grand_product_delta.hpp" #include "barretenberg/protogalaxy/prover_verifier_shared.hpp" #include "barretenberg/ultra_honk/oink_verifier.hpp" @@ -24,7 +25,7 @@ void ProtogalaxyVerifier_::run_oink_verifier_on_each_in if (!key->is_accumulator) { run_oink_verifier_on_one_incomplete_key(key, domain_separator); key->target_sum = 0; - key->gate_challenges = std::vector(static_cast(key->verification_key->log_circuit_size), 0); + key->gate_challenges = std::vector(static_cast(CONST_PG_LOG_N), 0); } index++; @@ -35,57 +36,25 @@ void ProtogalaxyVerifier_::run_oink_verifier_on_each_in } } -template -std::shared_ptr ProtogalaxyVerifier_< - DeciderVerificationKeys>::verify_folding_proof(const std::vector& proof) +template +std::tuple> compute_vanishing_polynomial_and_lagrange_evaluations(const FF& combiner_challenge) { - run_oink_verifier_on_each_incomplete_key(proof); - - const FF delta = transcript->template get_challenge("delta"); - const std::shared_ptr& accumulator = keys_to_fold[0]; // WORKTODO: move - - const size_t log_circuit_size = static_cast(accumulator->verification_key->log_circuit_size); - const std::vector deltas = compute_round_challenge_pows(log_circuit_size, delta); - - std::vector perturbator_coeffs(log_circuit_size + 1, 0); - if (accumulator->is_accumulator) { - for (size_t idx = 1; idx <= log_circuit_size; idx++) { - perturbator_coeffs[idx] = - transcript->template receive_from_prover("perturbator_" + std::to_string(idx)); - } - } - - perturbator_coeffs[0] = accumulator->target_sum; - const Polynomial perturbator(perturbator_coeffs); - const FF perturbator_challenge = transcript->template get_challenge("perturbator_challenge"); - const FF perturbator_evaluation = perturbator.evaluate(perturbator_challenge); + static_assert(NUM < 5); + static constexpr FF inverse_two = FF(2).invert(); - // The degree of K(X) is dk - k - 1 = k(d - 1) - 1. Hence we need k(d - 1) evaluations to represent it. - std::array - combiner_quotient_evals; - for (size_t idx = 0; idx < DeciderVerificationKeys::BATCHED_EXTENDED_LENGTH - DeciderVerificationKeys::NUM; idx++) { - combiner_quotient_evals[idx] = transcript->template receive_from_prover( - "combiner_quotient_" + std::to_string(idx + DeciderVerificationKeys::NUM)); - } - const Univariate - combiner_quotient(combiner_quotient_evals); - const FF combiner_challenge = transcript->template get_challenge("combiner_quotient_challenge"); - const FF combiner_quotient_evaluation = combiner_quotient.evaluate(combiner_challenge); - - constexpr FF inverse_two = FF(2).invert(); + std::vector lagranges(NUM); FF vanishing_polynomial_at_challenge; - std::array lagranges; - if constexpr (DeciderVerificationKeys::NUM == 2) { + if constexpr (NUM == 2) { vanishing_polynomial_at_challenge = combiner_challenge * (combiner_challenge - FF(1)); lagranges = { FF(1) - combiner_challenge, combiner_challenge }; - } else if constexpr (DeciderVerificationKeys::NUM == 3) { + } else if constexpr (NUM == 3) { vanishing_polynomial_at_challenge = combiner_challenge * (combiner_challenge - FF(1)) * (combiner_challenge - FF(2)); lagranges = { (FF(1) - combiner_challenge) * (FF(2) - combiner_challenge) * inverse_two, combiner_challenge * (FF(2) - combiner_challenge), combiner_challenge * (combiner_challenge - FF(1)) * inverse_two }; - } else if constexpr (DeciderVerificationKeys::NUM == 4) { - constexpr FF inverse_six = FF(6).invert(); + } else if constexpr (NUM == 4) { + static constexpr FF inverse_six = FF(6).invert(); vanishing_polynomial_at_challenge = combiner_challenge * (combiner_challenge - FF(1)) * (combiner_challenge - FF(2)) * (combiner_challenge - FF(3)); lagranges = { (FF(1) - combiner_challenge) * (FF(2) - combiner_challenge) * (FF(3) - combiner_challenge) * @@ -94,64 +63,75 @@ std::shared_ptr ProtogalaxyVerifier combiner_challenge * (combiner_challenge - FF(1)) * (FF(3) - combiner_challenge) * inverse_two, combiner_challenge * (combiner_challenge - FF(1)) * (combiner_challenge - FF(2)) * inverse_six }; } - static_assert(DeciderVerificationKeys::NUM < 5); + return std::make_tuple(vanishing_polynomial_at_challenge, lagranges); +} + +template +std::shared_ptr ProtogalaxyVerifier_< + DeciderVerificationKeys>::verify_folding_proof(const std::vector& proof) +{ + static constexpr size_t BATCHED_EXTENDED_LENGTH = DeciderVerificationKeys::BATCHED_EXTENDED_LENGTH; + static constexpr size_t NUM_KEYS = DeciderVerificationKeys::NUM; + + const std::shared_ptr& accumulator = keys_to_fold[0]; + + run_oink_verifier_on_each_incomplete_key(proof); + + // Perturbator round + const FF delta = transcript->template get_challenge("delta"); + const std::vector deltas = compute_round_challenge_pows(CONST_PG_LOG_N, delta); + std::vector perturbator_coeffs(CONST_PG_LOG_N + 1, 0); + for (size_t idx = 1; idx <= CONST_PG_LOG_N; idx++) { + perturbator_coeffs[idx] = transcript->template receive_from_prover("perturbator_" + std::to_string(idx)); + } + const FF perturbator_challenge = transcript->template get_challenge("perturbator_challenge"); + + // Combiner quotient round + perturbator_coeffs[0] = accumulator->target_sum; + const Polynomial perturbator(perturbator_coeffs); + const FF perturbator_evaluation = perturbator.evaluate(perturbator_challenge); + + std::array + combiner_quotient_evals; // The degree of the combiner quotient (K in the paper) is dk - k - 1 = k(d - 1) - 1. + // Hence we need k(d - 1) evaluations to represent it. + for (size_t idx = DeciderVerificationKeys::NUM; auto& val : combiner_quotient_evals) { + val = transcript->template receive_from_prover("combiner_quotient_" + std::to_string(idx++)); + } + + // Folding + const FF combiner_challenge = transcript->template get_challenge("combiner_quotient_challenge"); + const Univariate combiner_quotient(combiner_quotient_evals); + const FF combiner_quotient_evaluation = combiner_quotient.evaluate(combiner_challenge); - // TODO(https://github.com/AztecProtocol/barretenberg/issues/881): bad pattern auto next_accumulator = std::make_shared(); next_accumulator->verification_key = std::make_shared(*accumulator->verification_key); next_accumulator->is_accumulator = true; - size_t commitment_idx = 0; - for (auto& expected_vk : next_accumulator->verification_key->get_all()) { - size_t vk_idx = 0; - expected_vk = Commitment::infinity(); - for (auto& key : keys_to_fold) { - expected_vk = expected_vk + key->verification_key->get_all()[commitment_idx] * lagranges[vk_idx]; - vk_idx++; - } - commitment_idx++; - } - // Compute next folding parameters + const auto [vanishing_polynomial_at_challenge, lagranges] = + compute_vanishing_polynomial_and_lagrange_evaluations(combiner_challenge); next_accumulator->target_sum = perturbator_evaluation * lagranges[0] + vanishing_polynomial_at_challenge * combiner_quotient_evaluation; - next_accumulator->gate_challenges = + next_accumulator->gate_challenges = // note: known already in previous round update_gate_challenges(perturbator_challenge, accumulator->gate_challenges, deltas); - // Compute ϕ - auto& acc_witness_commitments = next_accumulator->witness_commitments; - commitment_idx = 0; - for (auto& comm : acc_witness_commitments.get_all()) { - comm = Commitment::infinity(); - size_t vk_idx = 0; - for (auto& key : keys_to_fold) { - comm = comm + key->witness_commitments.get_all()[commitment_idx] * lagranges[vk_idx]; - vk_idx++; - } - commitment_idx++; + // // Fold the commitments + for (auto [combination, to_combine] : + zip_view(next_accumulator->verification_key->get_all(), keys_to_fold.get_precomputed_commitments())) { + combination = batch_mul_native(to_combine, lagranges); + } + for (auto [combination, to_combine] : + zip_view(next_accumulator->witness_commitments.get_all(), keys_to_fold.get_witness_commitments())) { + combination = batch_mul_native(to_combine, lagranges); } - size_t alpha_idx = 0; - for (auto& alpha : next_accumulator->alphas) { - alpha = FF(0); - size_t vk_idx = 0; - for (auto& key : keys_to_fold) { - alpha += key->alphas[alpha_idx] * lagranges[vk_idx]; - vk_idx++; - } - alpha_idx++; + // Fold the relation parameters + for (auto [combination, to_combine] : zip_view(next_accumulator->alphas, keys_to_fold.get_alphas())) { + combination = linear_combination(to_combine, lagranges); } - auto& expected_parameters = next_accumulator->relation_parameters; - for (size_t vk_idx = 0; vk_idx < DeciderVerificationKeys::NUM; vk_idx++) { - auto& key = keys_to_fold[vk_idx]; - expected_parameters.eta += key->relation_parameters.eta * lagranges[vk_idx]; - expected_parameters.eta_two += key->relation_parameters.eta_two * lagranges[vk_idx]; - expected_parameters.eta_three += key->relation_parameters.eta_three * lagranges[vk_idx]; - expected_parameters.beta += key->relation_parameters.beta * lagranges[vk_idx]; - expected_parameters.gamma += key->relation_parameters.gamma * lagranges[vk_idx]; - expected_parameters.public_input_delta += key->relation_parameters.public_input_delta * lagranges[vk_idx]; - expected_parameters.lookup_grand_product_delta += - key->relation_parameters.lookup_grand_product_delta * lagranges[vk_idx]; + for (auto [combination, to_combine] : + zip_view(next_accumulator->relation_parameters.get_to_fold(), keys_to_fold.get_relation_parameters())) { + combination = linear_combination(to_combine, lagranges); } return next_accumulator; diff --git a/barretenberg/cpp/src/barretenberg/protogalaxy/prover_verifier_shared.cpp b/barretenberg/cpp/src/barretenberg/protogalaxy/prover_verifier_shared.cpp deleted file mode 100644 index e6399e54465..00000000000 --- a/barretenberg/cpp/src/barretenberg/protogalaxy/prover_verifier_shared.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include "barretenberg/protogalaxy/prover_verifier_shared.hpp" - -namespace bb { -std::vector update_gate_challenges(const fr& perturbator_challenge, - const std::vector& gate_challenges, - const std::vector& init_challenges) -{ - const size_t num_challenges = gate_challenges.size(); - std::vector next_gate_challenges(num_challenges); - - for (size_t idx = 0; idx < num_challenges; idx++) { - next_gate_challenges[idx] = gate_challenges[idx] + perturbator_challenge * init_challenges[idx]; - } - return next_gate_challenges; -} - -std::vector compute_round_challenge_pows(const size_t num_powers, const fr& round_challenge) -{ - std::vector pows(num_powers); - pows[0] = round_challenge; - for (size_t i = 1; i < num_powers; i++) { - pows[i] = pows[i - 1].sqr(); - } - return pows; -} - -} // namespace bb \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/protogalaxy/prover_verifier_shared.hpp b/barretenberg/cpp/src/barretenberg/protogalaxy/prover_verifier_shared.hpp index 9739c895d1c..181d7b30f3d 100644 --- a/barretenberg/cpp/src/barretenberg/protogalaxy/prover_verifier_shared.hpp +++ b/barretenberg/cpp/src/barretenberg/protogalaxy/prover_verifier_shared.hpp @@ -1,20 +1,57 @@ #pragma once -#include "barretenberg/ecc/curves/bn254/fr.hpp" #include - namespace bb { + /** * @brief Compute the gate challenges used in the combiner calculation. * @details This is Step 8 of the protocol as written in the paper. */ -std::vector update_gate_challenges(const fr& perturbator_challenge, - const std::vector& gate_challenges, - const std::vector& init_challenges); +template +std::vector update_gate_challenges(const FF& perturbator_challenge, + const std::vector& gate_challenges, + const std::vector& init_challenges) +{ + const size_t num_challenges = gate_challenges.size(); + std::vector next_gate_challenges(num_challenges); + for (size_t idx = 0; idx < num_challenges; idx++) { + next_gate_challenges[idx] = gate_challenges[idx] + perturbator_challenge * init_challenges[idx]; + } + return next_gate_challenges; +} /** * @brief Given δ, compute the vector [δ, δ^2,..., δ^num_powers]. * @details This is Step 2 of the protocol as written in the paper. */ -std::vector compute_round_challenge_pows(const size_t num_powers, const fr& round_challenge); +template std::vector compute_round_challenge_pows(const size_t num_powers, const FF& round_challenge) +{ + std::vector pows(num_powers); + pows[0] = round_challenge; + for (size_t i = 1; i < num_powers; i++) { + pows[i] = pows[i - 1].sqr(); + } + return pows; +} + +/** + * @brief Evaluates the perturbator at a given scalar, in a sequential manner for the recursive setting. + * + * @details This method is equivalent to the one in the Polynomial class for evaluating a polynomial, represented by + * coefficients in monomial basis, at a given point. The Polynomial class is used in the native verifier for + * constructing and computing the perturbator. We implement this separate functionality here in the recursive + * folding verifier to avoid instantiating the entire Polynomial class on stdlib::bn254. Furthermore, the evaluation + * needs to be done sequentially as we don't support a parallel_for in circuits. + * + */ +template static FF evaluate_perturbator(std::vector coeffs, FF point) +{ + FF point_acc = FF(1); + FF result = FF(0); + for (size_t i = 0; i < coeffs.size(); i++) { + result += coeffs[i] * point_acc; + point_acc *= point; + } + return result; +}; -} // namespace bb \ No newline at end of file +} // namespace bb diff --git a/barretenberg/cpp/src/barretenberg/stdlib/client_ivc_verifier/client_ivc_recursive_verifier.test.cpp b/barretenberg/cpp/src/barretenberg/stdlib/client_ivc_verifier/client_ivc_recursive_verifier.test.cpp index d51600df147..0bb5b61075d 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/client_ivc_verifier/client_ivc_recursive_verifier.test.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/client_ivc_verifier/client_ivc_recursive_verifier.test.cpp @@ -38,16 +38,15 @@ class ClientIVCRecursionTests : public testing::Test { { using Builder = ClientIVC::ClientCircuit; - size_t NUM_CIRCUITS = 3; + size_t NUM_CIRCUITS = 2; for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) { Builder circuit{ ivc.goblin.op_queue }; GoblinMockCircuits::construct_mock_function_circuit(circuit); - circuit.add_recursive_proof(stdlib::recursion::init_default_agg_obj_indices(circuit)); ivc.accumulate(circuit); } Proof proof = ivc.prove(); - FoldVerifierInput fold_verifier_input{ ivc.verifier_accumulator, { ivc.decider_vk } }; + FoldVerifierInput fold_verifier_input{ ivc.verifier_accumulator, { ivc.honk_vk } }; GoblinVerifierInput goblin_verifier_input{ std::make_shared(ivc.goblin.get_eccvm_proving_key()), std::make_shared( ivc.goblin.get_translator_proving_key()) }; @@ -63,6 +62,7 @@ class ClientIVCRecursionTests : public testing::Test { TEST_F(ClientIVCRecursionTests, NativeVerification) { ClientIVC ivc; + ivc.auto_verify_mode = true; auto [proof, verifier_input] = construct_client_ivc_prover_output(ivc); // Construct the set of native decider vks to be processed by the folding verifier @@ -83,6 +83,7 @@ TEST_F(ClientIVCRecursionTests, Basic) { // Generate a genuine ClientIVC prover output ClientIVC ivc; + ivc.auto_verify_mode = true; auto [proof, verifier_input] = construct_client_ivc_prover_output(ivc); // Construct the ClientIVC recursive verifier @@ -104,6 +105,7 @@ TEST_F(ClientIVCRecursionTests, ClientTubeBase) { // Generate a genuine ClientIVC prover output ClientIVC ivc; + ivc.auto_verify_mode = true; auto [proof, verifier_input] = construct_client_ivc_prover_output(ivc); // Construct the ClientIVC recursive verifier diff --git a/barretenberg/cpp/src/barretenberg/stdlib/hash/poseidon2/poseidon2_permutation.cpp b/barretenberg/cpp/src/barretenberg/stdlib/hash/poseidon2/poseidon2_permutation.cpp index ef7e26d5d69..907f4fc6696 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/hash/poseidon2/poseidon2_permutation.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/hash/poseidon2/poseidon2_permutation.cpp @@ -50,7 +50,7 @@ typename Poseidon2Permutation::State Poseidon2Permutationcreate_dummy_gate(builder->blocks.poseidon_external, + builder->create_dummy_gate(builder->blocks.poseidon2_external, current_state[0].witness_index, current_state[1].witness_index, current_state[2].witness_index, @@ -75,7 +75,7 @@ typename Poseidon2Permutation::State Poseidon2Permutationcreate_dummy_gate(builder->blocks.poseidon_internal, + builder->create_dummy_gate(builder->blocks.poseidon2_internal, current_state[0].witness_index, current_state[1].witness_index, current_state[2].witness_index, @@ -101,7 +101,7 @@ typename Poseidon2Permutation::State Poseidon2Permutationcreate_dummy_gate(builder->blocks.poseidon_external, + builder->create_dummy_gate(builder->blocks.poseidon2_external, current_state[0].witness_index, current_state[1].witness_index, current_state[2].witness_index, diff --git a/barretenberg/cpp/src/barretenberg/stdlib/hash/sha256/sha256.test.cpp b/barretenberg/cpp/src/barretenberg/stdlib/hash/sha256/sha256.test.cpp index f44eafe3d9c..fbea1529965 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/hash/sha256/sha256.test.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/hash/sha256/sha256.test.cpp @@ -21,6 +21,7 @@ using Builder = UltraCircuitBuilder; using byte_array_ct = byte_array; using packed_byte_array_ct = packed_byte_array; using field_ct = field_t; +using witness_ct = witness_t; constexpr uint64_t ror(uint64_t val, uint64_t shift) { @@ -425,3 +426,38 @@ TEST(stdlib_sha256, test_input_str_len_multiple) EXPECT_EQ(circuit_output, expected); } } + +TEST(stdlib_sha256, test_boomerang_value_regression) +{ + auto builder = Builder(); + std::array, 16> input; + + // Create random input witnesses and ensure that the witnesses are constrained to constants + for (size_t i = 0; i < 16; i++) { + auto random32bits = engine.get_random_uint32(); + field_ct elt(witness_ct(&builder, fr(random32bits))); + elt.fix_witness(); + input[i] = elt; + } + // Check correctness + std::array, 64> w_ext = sha256_plookup::extend_witness(input); + bool result1 = CircuitChecker::check(builder); + EXPECT_EQ(result1, true); + bool result2 = false; + for (auto& single_extended_witness : w_ext) { + + auto random32bits = engine.get_random_uint32(); + uint32_t variable_index = single_extended_witness.witness_index; + // Ensure our random value is different + while (builder.variables[builder.real_variable_index[variable_index]] == fr(random32bits)) { + random32bits = engine.get_random_uint32(); + } + auto backup = builder.variables[builder.real_variable_index[variable_index]]; + builder.variables[builder.real_variable_index[variable_index]] = fr(random32bits); + // Check that the circuit fails + result2 = result2 || CircuitChecker::check(builder); + builder.variables[builder.real_variable_index[variable_index]] = backup; + } + // If at least one of the updated witnesses hasn't caused the circuit to fail, we're in trouble + EXPECT_EQ(result2, false); +} diff --git a/barretenberg/cpp/src/barretenberg/stdlib/hash/sha256/sha256_plookup.cpp b/barretenberg/cpp/src/barretenberg/stdlib/hash/sha256/sha256_plookup.cpp index b6245b6c945..6c809f12d84 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/hash/sha256/sha256_plookup.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/hash/sha256/sha256_plookup.cpp @@ -139,7 +139,15 @@ std::array, 64> extend_witness(const std::array( ctx, fr(w_out_raw.get_value().from_montgomery_form().data[0] & (uint64_t)0xffffffffULL)); + static constexpr fr inv_pow_two = fr(2).pow(32).invert(); + // If we multiply the field elements by constants separately and then subtract, then the divisor is going to + // be in a normalized state right after subtraction and the call to .normalize() won't add gates + field_pt w_out_raw_inv_pow_two = w_out_raw * inv_pow_two; + field_pt w_out_inv_pow_two = w_out * inv_pow_two; + field_pt divisor = (w_out_raw_inv_pow_two - w_out_inv_pow_two).normalize(); + ctx->create_new_range_constraint(divisor.witness_index, 3); } + w_sparse[i] = sparse_witness_limbs(w_out); } diff --git a/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/protogalaxy_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/protogalaxy_recursive_verifier.cpp index b64d0b09f38..36a27699d38 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/protogalaxy_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/protogalaxy_recursive_verifier.cpp @@ -1,38 +1,38 @@ #include "protogalaxy_recursive_verifier.hpp" #include "barretenberg/plonk_honk_shared/library/grand_product_delta.hpp" -#include "barretenberg/stdlib/protogalaxy_verifier/recursive_decider_verification_keys.hpp" +#include "barretenberg/protogalaxy/prover_verifier_shared.hpp" +#include "barretenberg/stdlib/honk_verifier/oink_recursive_verifier.hpp" +#include "barretenberg/ultra_honk/decider_keys.hpp" namespace bb::stdlib::recursion::honk { template -void ProtogalaxyRecursiveVerifier_::receive_and_finalise_key( - const std::shared_ptr& inst, std::string& domain_separator) +void ProtogalaxyRecursiveVerifier_::run_oink_verifier_on_one_incomplete_key( + const std::shared_ptr& key, std::string& domain_separator) { - domain_separator = domain_separator + "_"; - OinkVerifier oink_verifier{ builder, inst, transcript, domain_separator }; + OinkRecursiveVerifier_ oink_verifier{ builder, key, transcript, domain_separator + '_' }; oink_verifier.verify(); } -// TODO(https://github.com/AztecProtocol/barretenberg/issues/795): The rounds prior to actual verifying are common -// between decider and folding verifier and could be somehow shared so we do not duplicate code so much. template -void ProtogalaxyRecursiveVerifier_::prepare_for_folding() +void ProtogalaxyRecursiveVerifier_::run_oink_verifier_on_each_incomplete_key( + const std::vector& proof) { - auto index = 0; - auto inst = keys_to_fold[0]; + transcript = std::make_shared(proof); + size_t index = 0; + auto key = keys_to_fold[0]; auto domain_separator = std::to_string(index); - - if (!inst->is_accumulator) { - receive_and_finalise_key(inst, domain_separator); - inst->target_sum = 0; - inst->gate_challenges = std::vector(static_cast(inst->verification_key->log_circuit_size), 0); + if (!key->is_accumulator) { + run_oink_verifier_on_one_incomplete_key(key, domain_separator); + key->target_sum = 0; + key->gate_challenges = std::vector(static_cast(CONST_PG_LOG_N), 0); } index++; for (auto it = keys_to_fold.begin() + 1; it != keys_to_fold.end(); it++, index++) { - auto inst = *it; + auto key = *it; auto domain_separator = std::to_string(index); - receive_and_finalise_key(inst, domain_separator); + run_oink_verifier_on_one_incomplete_key(key, domain_separator); } } @@ -40,98 +40,75 @@ template std::shared_ptr ProtogalaxyRecursiveVerifier_< DeciderVerificationKeys>::verify_folding_proof(const StdlibProof& proof) { - using Transcript = typename Flavor::Transcript; + static constexpr size_t BATCHED_EXTENDED_LENGTH = DeciderVerificationKeys::BATCHED_EXTENDED_LENGTH; + static constexpr size_t NUM_KEYS = DeciderVerificationKeys::NUM; + static constexpr size_t COMBINER_LENGTH = BATCHED_EXTENDED_LENGTH - NUM_KEYS; - transcript = std::make_shared(proof); - prepare_for_folding(); - - auto delta = transcript->template get_challenge("delta"); - auto accumulator = get_accumulator(); - auto deltas = - compute_round_challenge_pows(static_cast(accumulator->verification_key->log_circuit_size), delta); - - std::vector perturbator_coeffs(static_cast(accumulator->verification_key->log_circuit_size) + 1, 0); - if (accumulator->is_accumulator) { - for (size_t idx = 1; idx <= static_cast(accumulator->verification_key->log_circuit_size); idx++) { - perturbator_coeffs[idx] = - transcript->template receive_from_prover("perturbator_" + std::to_string(idx)); - } - } + run_oink_verifier_on_each_incomplete_key(proof); - perturbator_coeffs[0] = accumulator->target_sum; - - FF perturbator_challenge = transcript->template get_challenge("perturbator_challenge"); + std::shared_ptr accumulator = keys_to_fold[0]; - auto perturbator_at_challenge = evaluate_perturbator(perturbator_coeffs, perturbator_challenge); - // The degree of K(X) is dk - k - 1 = k(d - 1) - 1. Hence we need k(d - 1) evaluations to represent it. - std::array - combiner_quotient_evals; - for (size_t idx = 0; idx < DeciderVerificationKeys::BATCHED_EXTENDED_LENGTH - DeciderVerificationKeys::NUM; idx++) { - combiner_quotient_evals[idx] = transcript->template receive_from_prover( - "combiner_quotient_" + std::to_string(idx + DeciderVerificationKeys::NUM)); + // Perturbator round + const FF delta = transcript->template get_challenge("delta"); + const std::vector deltas = compute_round_challenge_pows(CONST_PG_LOG_N, delta); + std::vector perturbator_coeffs(CONST_PG_LOG_N + 1, 0); + for (size_t idx = 1; idx <= CONST_PG_LOG_N; idx++) { + perturbator_coeffs[idx] = transcript->template receive_from_prover("perturbator_" + std::to_string(idx)); } - Univariate combiner_quotient( - combiner_quotient_evals); - FF combiner_challenge = transcript->template get_challenge("combiner_quotient_challenge"); - auto combiner_quotient_at_challenge = combiner_quotient.evaluate(combiner_challenge); // fine recursive i think - - auto vanishing_polynomial_at_challenge = combiner_challenge * (combiner_challenge - FF(1)); - auto lagranges = std::vector{ FF(1) - combiner_challenge, combiner_challenge }; - - auto next_accumulator = std::make_shared(builder); - - next_accumulator->verification_key = std::make_shared( - accumulator->verification_key->circuit_size, accumulator->verification_key->num_public_inputs); - next_accumulator->verification_key->pcs_verification_key = accumulator->verification_key->pcs_verification_key; - next_accumulator->verification_key->pub_inputs_offset = accumulator->verification_key->pub_inputs_offset; - next_accumulator->verification_key->contains_recursive_proof = - accumulator->verification_key->contains_recursive_proof; - next_accumulator->verification_key->recursive_proof_public_input_indices = - accumulator->verification_key->recursive_proof_public_input_indices; - if constexpr (IsGoblinFlavor) { // Databus commitment propagation data - next_accumulator->verification_key->databus_propagation_data = - accumulator->verification_key->databus_propagation_data; + const FF perturbator_challenge = transcript->template get_challenge("perturbator_challenge"); + + // Combiner quotient round + perturbator_coeffs[0] = accumulator->target_sum; + const FF perturbator_evaluation = evaluate_perturbator(perturbator_coeffs, perturbator_challenge); + + std::array + combiner_quotient_evals; // The degree of the combiner quotient (K in the paper) is dk - k - 1 = k(d - 1) - 1. + // Hence we need k(d - 1) evaluations to represent it. + for (size_t idx = 0; idx < COMBINER_LENGTH; idx++) { + combiner_quotient_evals[idx] = + transcript->template receive_from_prover("combiner_quotient_" + std::to_string(idx + NUM_KEYS)); } - next_accumulator->public_inputs = accumulator->public_inputs; + // Folding + const FF combiner_challenge = transcript->template get_challenge("combiner_quotient_challenge"); + const Univariate combiner_quotient(combiner_quotient_evals); + const FF combiner_quotient_at_challenge = combiner_quotient.evaluate(combiner_challenge); - next_accumulator->is_accumulator = true; + const FF vanishing_polynomial_at_challenge = combiner_challenge * (combiner_challenge - FF(1)); + const std::vector lagranges = { FF(1) - combiner_challenge, combiner_challenge }; // Compute next folding parameters - next_accumulator->target_sum = - perturbator_at_challenge * lagranges[0] + vanishing_polynomial_at_challenge * combiner_quotient_at_challenge; - next_accumulator->gate_challenges = - update_gate_challenges(perturbator_challenge, accumulator->gate_challenges, deltas); - - // Compute ϕ - fold_commitments(lagranges, keys_to_fold, next_accumulator); - - size_t alpha_idx = 0; - for (auto& alpha : next_accumulator->alphas) { - alpha = FF(0); - size_t vk_idx = 0; - for (auto& key : keys_to_fold) { - alpha += key->alphas[alpha_idx] * lagranges[vk_idx]; - vk_idx++; - } - alpha_idx++; + accumulator->is_accumulator = true; + accumulator->target_sum = + perturbator_evaluation * lagranges[0] + vanishing_polynomial_at_challenge * combiner_quotient_at_challenge; + accumulator->gate_challenges = update_gate_challenges(perturbator_challenge, accumulator->gate_challenges, deltas); + + // Fold the commitments + for (auto [combination, to_combine] : + zip_view(accumulator->verification_key->get_all(), keys_to_fold.get_precomputed_commitments())) { + combination = Commitment::batch_mul( + to_combine, lagranges, /*max_num_bits=*/0, /*with_edgecases=*/IsUltraBuilder); + } + + for (auto [combination, to_combine] : + zip_view(accumulator->witness_commitments.get_all(), keys_to_fold.get_witness_commitments())) { + combination = Commitment::batch_mul( + to_combine, lagranges, /*max_num_bits=*/0, /*with_edgecases=*/IsUltraBuilder); } - auto& expected_parameters = next_accumulator->relation_parameters; - for (size_t inst_idx = 0; inst_idx < DeciderVerificationKeys::NUM; inst_idx++) { - auto& key = keys_to_fold[inst_idx]; - expected_parameters.eta += key->relation_parameters.eta * lagranges[inst_idx]; - expected_parameters.eta_two += key->relation_parameters.eta_two * lagranges[inst_idx]; - expected_parameters.eta_three += key->relation_parameters.eta_three * lagranges[inst_idx]; - expected_parameters.beta += key->relation_parameters.beta * lagranges[inst_idx]; - expected_parameters.gamma += key->relation_parameters.gamma * lagranges[inst_idx]; - expected_parameters.public_input_delta += key->relation_parameters.public_input_delta * lagranges[inst_idx]; - expected_parameters.lookup_grand_product_delta += - key->relation_parameters.lookup_grand_product_delta * lagranges[inst_idx]; + // Fold the relation parameters + for (auto [combination, to_combine] : zip_view(accumulator->alphas, keys_to_fold.get_alphas())) { + combination = linear_combination(to_combine, lagranges); } - return next_accumulator; + for (auto [combination, to_combine] : + zip_view(accumulator->relation_parameters.get_to_fold(), keys_to_fold.get_relation_parameters())) { + combination = linear_combination(to_combine, lagranges); + } + + return accumulator; } +// Instantiate the template with specific flavors and builders template class ProtogalaxyRecursiveVerifier_< RecursiveDeciderVerificationKeys_, 2>>; template class ProtogalaxyRecursiveVerifier_< @@ -144,4 +121,5 @@ template class ProtogalaxyRecursiveVerifier_< RecursiveDeciderVerificationKeys_, 2>>; template class ProtogalaxyRecursiveVerifier_< RecursiveDeciderVerificationKeys_, 2>>; -} // namespace bb::stdlib::recursion::honk \ No newline at end of file + +} // namespace bb::stdlib::recursion::honk diff --git a/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/protogalaxy_recursive_verifier.hpp b/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/protogalaxy_recursive_verifier.hpp index fc1202cc071..4cde2740f6d 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/protogalaxy_recursive_verifier.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/protogalaxy_recursive_verifier.hpp @@ -2,46 +2,40 @@ #include "barretenberg/flavor/flavor.hpp" #include "barretenberg/honk/proof_system/types/proof.hpp" #include "barretenberg/protogalaxy/folding_result.hpp" -#include "barretenberg/stdlib/honk_verifier/oink_recursive_verifier.hpp" #include "barretenberg/stdlib/protogalaxy_verifier/recursive_decider_verification_keys.hpp" #include "barretenberg/stdlib/transcript/transcript.hpp" #include "barretenberg/stdlib_circuit_builders/mega_recursive_flavor.hpp" #include "barretenberg/stdlib_circuit_builders/ultra_recursive_flavor.hpp" +#include "barretenberg/ultra_honk/decider_keys.hpp" namespace bb::stdlib::recursion::honk { template class ProtogalaxyRecursiveVerifier_ { public: using Flavor = typename DeciderVerificationKeys::Flavor; - using NativeFlavor = typename Flavor::NativeFlavor; using FF = typename Flavor::FF; using Commitment = typename Flavor::Commitment; - using GroupElement = typename Flavor::GroupElement; using DeciderVK = typename DeciderVerificationKeys::DeciderVK; - using NativeDeciderVK = bb::DeciderVerificationKey_; using VerificationKey = typename Flavor::VerificationKey; - using NativeVerificationKey = typename Flavor::NativeVerificationKey; - using WitnessCommitments = typename Flavor::WitnessCommitments; - using CommitmentLabels = typename Flavor::CommitmentLabels; + using Builder = typename Flavor::CircuitBuilder; - using RelationSeparator = typename Flavor::RelationSeparator; - using PairingPoints = std::array; - static constexpr size_t NUM = DeciderVerificationKeys::NUM; using Transcript = bb::BaseTranscript>; - using OinkVerifier = OinkRecursiveVerifier_; + + static constexpr size_t NUM_SUBRELATIONS = Flavor::NUM_SUBRELATIONS; + struct VerifierInput { public: - using DeciderVK = NativeDeciderVK; + using NativeFlavor = typename Flavor::NativeFlavor; + using DeciderVK = bb::DeciderVerificationKey_; + using NativeVerificationKey = typename Flavor::NativeVerificationKey; std::shared_ptr accumulator; std::vector> decider_vks; }; - static constexpr size_t NUM_SUBRELATIONS = Flavor::NUM_SUBRELATIONS; + Builder* builder; - CommitmentLabels commitment_labels; + DeciderVerificationKeys keys_to_fold; - Builder* builder; std::shared_ptr transcript; - DeciderVerificationKeys keys_to_fold; ProtogalaxyRecursiveVerifier_(Builder* builder, const std::shared_ptr& accumulator, @@ -50,52 +44,14 @@ template class ProtogalaxyRecursiveVerifier_ { , keys_to_fold(DeciderVerificationKeys(builder, accumulator, decider_vks)){}; /** - * @brief Given δ, compute the vector [δ, δ^2,..., δ^num_powers]. - * @details This is Step 2 of the protocol as written in the paper. - */ - static std::vector compute_round_challenge_pows(const size_t num_powers, const FF& round_challenge) - { - std::vector pows(num_powers); - pows[0] = round_challenge; - for (size_t i = 1; i < num_powers; i++) { - pows[i] = pows[i - 1].sqr(); - } - return pows; - } - - static std::vector update_gate_challenges(const FF perturbator_challenge, - const std::vector& gate_challenges, - const std::vector& round_challenges) - { - const size_t num_challenges = gate_challenges.size(); - std::vector next_gate_challenges(num_challenges); - - for (size_t idx = 0; idx < num_challenges; idx++) { - next_gate_challenges[idx] = gate_challenges[idx] + perturbator_challenge * round_challenges[idx]; - } - return next_gate_challenges; - } - - std::shared_ptr get_accumulator() { return keys_to_fold[0]; } - - /** - * @brief Instatiate the decider verification keys and the transcript. - * - * @param fold_data The data transmitted via the transcript by the prover. - */ - void prepare_for_folding(); - - /** - * @brief Instantiate the accumulator from the transcript. - * + * @brief Process the public data ϕ for the decider verification keys to be folded. */ - void receive_accumulator(const std::shared_ptr&, const std::string&); + void run_oink_verifier_on_each_incomplete_key(const std::vector&); /** - * @brief Process the public data ϕ for the keys to be folded. - * + * @brief Instatiate the vks and the transcript. */ - void receive_and_finalise_key(const std::shared_ptr&, std::string&); + void run_oink_verifier_on_one_incomplete_key(const std::shared_ptr&, std::string&); /** * @brief Run the folding protocol on the verifier side to establish whether the public data ϕ of the new @@ -107,62 +63,6 @@ template class ProtogalaxyRecursiveVerifier_ { * */ std::shared_ptr verify_folding_proof(const StdlibProof&); - - /** - * @brief Evaluates the perturbator at a given scalar, in a sequential manner for the recursive setting. - * - * @details This method is equivalent to the one in the Polynomial class for evaluating a polynomial, represented by - * coefficients in monomial basis, at a given point. The Polynomial class is used in the native verifier for - * constructing and computing the perturbator. We implement this separate functionality here in the recursive - * folding verifier to avoid instantiating the entire Polynomial class on stdlib::bn254. Furthermore, the evaluation - * needs to be done sequentially as we don't support a parallel_for in circuits. - * - */ - static FF evaluate_perturbator(std::vector coeffs, FF point) - { - FF point_acc = FF(1); - FF result = FF(0); - for (size_t i = 0; i < coeffs.size(); i++) { - result += coeffs[i] * point_acc; - point_acc *= point; - } - return result; - }; - - /** - * @brief Folds the witness commitments and verification key (part of ϕ) and stores the values in the accumulator. - * - * - */ - - void fold_commitments(std::vector lagranges, - DeciderVerificationKeys& keys, - std::shared_ptr& accumulator) - { - size_t vk_idx = 0; - for (auto& expected_vk : accumulator->verification_key->get_all()) { - std::vector commitments; - for (auto& key : keys) { - commitments.emplace_back(key->verification_key->get_all()[vk_idx]); - } - // For ultra we need to enable edgecase prevention - expected_vk = Commitment::batch_mul( - commitments, lagranges, /*max_num_bits=*/0, /*with_edgecases=*/IsUltraBuilder); - vk_idx++; - } - - size_t comm_idx = 0; - for (auto& comm : accumulator->witness_commitments.get_all()) { - std::vector commitments; - for (auto& key : keys) { - commitments.emplace_back(key->witness_commitments.get_all()[comm_idx]); - } - // For ultra we need to enable edgecase prevention - comm = Commitment::batch_mul( - commitments, lagranges, /*max_num_bits=*/0, /*with_edgecases=*/IsUltraBuilder); - comm_idx++; - } - } }; } // namespace bb::stdlib::recursion::honk \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/protogalaxy_recursive_verifier.test.cpp b/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/protogalaxy_recursive_verifier.test.cpp index 3c5a432d248..31a30ee77bb 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/protogalaxy_recursive_verifier.test.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/protogalaxy_recursive_verifier.test.cpp @@ -3,6 +3,7 @@ #include "barretenberg/common/test.hpp" #include "barretenberg/protogalaxy/protogalaxy_prover.hpp" #include "barretenberg/protogalaxy/protogalaxy_verifier.hpp" +#include "barretenberg/protogalaxy/prover_verifier_shared.hpp" #include "barretenberg/stdlib/hash/blake3s/blake3s.hpp" #include "barretenberg/stdlib/hash/pedersen/pedersen.hpp" #include "barretenberg/stdlib/honk_verifier/decider_recursive_verifier.hpp" @@ -14,6 +15,8 @@ #include "barretenberg/ultra_honk/ultra_prover.hpp" #include "barretenberg/ultra_honk/ultra_verifier.hpp" +auto& engine = bb::numeric::get_debug_randomness(); + namespace bb::stdlib::recursion::honk { template class ProtogalaxyRecursiveTests : public testing::Test { public: @@ -72,11 +75,11 @@ template class ProtogalaxyRecursiveTests : public tes // Create 2^log_n many add gates based on input log num gates const size_t num_gates = 1 << log_num_gates; for (size_t i = 0; i < num_gates; ++i) { - fr a = fr::random_element(); + fr a = fr::random_element(&engine); uint32_t a_idx = builder.add_variable(a); - fr b = fr::random_element(); - fr c = fr::random_element(); + fr b = fr::random_element(&engine); + fr c = fr::random_element(&engine); fr d = a + b + c; uint32_t b_idx = builder.add_variable(b); uint32_t c_idx = builder.add_variable(c); @@ -86,9 +89,9 @@ template class ProtogalaxyRecursiveTests : public tes } // Define some additional non-trivial but arbitrary circuit logic - fr_ct a(public_witness_ct(&builder, fr::random_element())); - fr_ct b(public_witness_ct(&builder, fr::random_element())); - fr_ct c(public_witness_ct(&builder, fr::random_element())); + fr_ct a(public_witness_ct(&builder, fr::random_element(&engine))); + fr_ct b(public_witness_ct(&builder, fr::random_element(&engine))); + fr_ct c(public_witness_ct(&builder, fr::random_element(&engine))); for (size_t i = 0; i < 32; ++i) { a = (a * b) + b + a; @@ -98,7 +101,7 @@ template class ProtogalaxyRecursiveTests : public tes byte_array_ct to_hash(&builder, "nonsense test data"); blake3s(to_hash); - fr bigfield_data = fr::random_element(); + fr bigfield_data = fr::random_element(&engine); fr bigfield_data_a{ bigfield_data.data[0], bigfield_data.data[1], 0, 0 }; fr bigfield_data_b{ bigfield_data.data[2], bigfield_data.data[3], 0, 0 }; @@ -158,16 +161,16 @@ template class ProtogalaxyRecursiveTests : public tes std::vector coeffs; std::vector coeffs_ct; for (size_t idx = 0; idx < 8; idx++) { - auto el = fr::random_element(); + auto el = fr::random_element(&engine); coeffs.emplace_back(el); coeffs_ct.emplace_back(fr_ct(&builder, el)); } Polynomial poly(coeffs); - fr point = fr::random_element(); + fr point = fr::random_element(&engine); fr_ct point_ct(fr_ct(&builder, point)); auto res1 = poly.evaluate(point); - auto res2 = FoldingRecursiveVerifier::evaluate_perturbator(coeffs_ct, point_ct); + auto res2 = evaluate_perturbator(coeffs_ct, point_ct); EXPECT_EQ(res1, res2.get_value()); }; @@ -353,7 +356,7 @@ template class ProtogalaxyRecursiveTests : public tes auto [prover_accumulator, verifier_accumulator] = fold_and_verify_native(); // Tamper with the accumulator by changing the target sum - verifier_accumulator->target_sum = FF::random_element(); + verifier_accumulator->target_sum = FF::random_element(&engine); // Create a decider proof for accumulator obtained through folding InnerDeciderProver decider_prover(prover_accumulator); @@ -381,7 +384,7 @@ template class ProtogalaxyRecursiveTests : public tes auto verification_key = std::make_shared(prover_inst->proving_key); auto verifier_inst = std::make_shared(verification_key); - prover_accumulator->proving_key.polynomials.w_l.at(1) = FF::random_element(); + prover_accumulator->proving_key.polynomials.w_l.at(1) = FF::random_element(&engine); // Generate a folding proof with the incorrect polynomials which would result in the prover having the wrong // target sum @@ -404,6 +407,60 @@ template class ProtogalaxyRecursiveTests : public tes // Validate that the target sum between prover and verifier is now different EXPECT_FALSE(folding_proof.accumulator->target_sum == recursive_verifier_acc->target_sum.get_value()); }; + + // Ensure that the PG recursive verifier circuit is independent of the size of the circuits being folded + static void test_constant_pg_verifier_circuit() + { + struct ProofAndVerifier { + HonkProof fold_proof; + OuterBuilder verifier_circuit; + }; + + // Fold two circuits of a given size then construct a recursive PG verifier circuit + auto produce_proof_and_verifier_circuit = [](size_t log_num_gates) -> ProofAndVerifier { + InnerBuilder builder1; + create_function_circuit(builder1, log_num_gates); + InnerBuilder builder2; + create_function_circuit(builder2, log_num_gates); + + // Generate a folding proof + auto decider_pk_1 = std::make_shared(builder1); + auto decider_pk_2 = std::make_shared(builder2); + InnerFoldingProver folding_prover({ decider_pk_1, decider_pk_2 }); + auto fold_result = folding_prover.prove(); + + // Create a folding verifier circuit + auto honk_vk_1 = std::make_shared(decider_pk_1->proving_key); + auto honk_vk_2 = std::make_shared(decider_pk_2->proving_key); + OuterBuilder verifier_circuit; + auto recursive_decider_vk_1 = + std::make_shared(&verifier_circuit, honk_vk_1); + auto recursive_decider_vk_2 = std::make_shared(&verifier_circuit, honk_vk_2); + StdlibProof stdlib_proof = bb::convert_proof_to_witness(&verifier_circuit, fold_result.proof); + + auto verifier = + FoldingRecursiveVerifier{ &verifier_circuit, recursive_decider_vk_1, { recursive_decider_vk_2 } }; + auto recursive_verifier_accumulator = verifier.verify_folding_proof(stdlib_proof); + + return { fold_result.proof, verifier_circuit }; + }; + + // Create fold proofs and verifier circuits from folding circuits of different sizes + auto [proof_1, verifier_circuit_1] = produce_proof_and_verifier_circuit(10); + auto [proof_2, verifier_circuit_2] = produce_proof_and_verifier_circuit(11); + + EXPECT_TRUE(CircuitChecker::check(verifier_circuit_1)); + EXPECT_TRUE(CircuitChecker::check(verifier_circuit_2)); + + // Check that the proofs are the same size and that the verifier circuits have the same number of gates + EXPECT_EQ(proof_1.size(), proof_2.size()); + EXPECT_EQ(verifier_circuit_1.get_num_gates(), verifier_circuit_2.get_num_gates()); + + // The circuit blocks (selectors + wires) fully determine the circuit - check that they are identical + if constexpr (!IsSimulator) { + EXPECT_EQ(verifier_circuit_1.blocks, verifier_circuit_2.blocks); + } + } }; using FlavorTypes = @@ -446,4 +503,9 @@ TYPED_TEST(ProtogalaxyRecursiveTests, TamperedAccumulator) TestFixture::test_tampered_accumulator(); } +TYPED_TEST(ProtogalaxyRecursiveTests, ConstantVerifierCircuit) +{ + TestFixture::test_constant_pg_verifier_circuit(); +} + } // namespace bb::stdlib::recursion::honk \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/recursive_decider_verification_keys.hpp b/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/recursive_decider_verification_keys.hpp index eadd7d8a656..6e75211df15 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/recursive_decider_verification_keys.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/recursive_decider_verification_keys.hpp @@ -35,5 +35,82 @@ template struct RecursiveDeciderVerific idx++; } } + /** + * @brief Get the precomputed commitments grouped by commitment index + * @example If the commitments are grouped as in + * VK 0 VK 1 VK 2 VK 3 + * q_c_0 q_c_1 q_c_2 q_c_3 + * q_l_0 q_l_1 q_l_2 q_l_3 + * ⋮ ⋮ ⋮ ⋮ + * + * then this function outputs this matrix of group elements as a vector of rows, + * i.e. it outputs {{q_c_0, q_c_1, q_c_2, q_c_3}, {q_l_0, q_l_1, q_l_2, q_l_3},...}. + * The "commitment index" is the index of the row. + */ + std::vector> get_precomputed_commitments() const + { + const size_t num_commitments_to_fold = _data[0]->verification_key->get_all().size(); + std::vector> result(num_commitments_to_fold, + std::vector(NUM)); + for (size_t idx = 0; auto& commitment_at_idx : result) { + for (auto [elt, key] : zip_view(commitment_at_idx, _data)) { + elt = key->verification_key->get_all()[idx]; + } + idx++; + } + return result; + } + + /** + * @brief Get the witness commitments grouped by commitment index + * @details See get_precomputed_commitments; this is essentially the same. + */ + std::vector> get_witness_commitments() const + { + const size_t num_commitments_to_fold = _data[0]->witness_commitments.get_all().size(); + std::vector> result(num_commitments_to_fold, + std::vector(NUM)); + for (size_t idx = 0; auto& commitment_at_idx : result) { + for (auto [elt, key] : zip_view(commitment_at_idx, _data)) { + elt = key->witness_commitments.get_all()[idx]; + } + idx++; + } + return result; + } + + /** + * @brief Get the alphas grouped by commitment index + * @details See get_precomputed_commitments; this is essentially the same. + */ + std::vector> get_alphas() const + { + const size_t num_alphas_to_fold = _data[0]->alphas.size(); + std::vector> result(num_alphas_to_fold, std::vector(NUM)); + for (size_t idx = 0; auto& alpha_at_idx : result) { + for (auto [elt, key] : zip_view(alpha_at_idx, _data)) { + elt = key->alphas[idx]; + } + idx++; + } + return result; + } + + /** + * @brief Get the relation parameters grouped by commitment index + * @details See get_precomputed_commitments; this is essentially the same. + */ + std::vector> get_relation_parameters() const + { + const size_t num_params_to_fold = _data[0]->relation_parameters.get_to_fold().size(); + std::vector> result(num_params_to_fold, std::vector(NUM)); + for (size_t idx = 0; auto& params_at_idx : result) { + for (auto [elt, key] : zip_view(params_at_idx, _data)) { + elt = key->relation_parameters.get_to_fold()[idx]; + } + idx++; + } + return result; + } }; } // namespace bb::stdlib::recursion::honk diff --git a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/circuit_builder_base_impl.hpp b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/circuit_builder_base_impl.hpp index 9e83ae4b3de..93640e9a8eb 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/circuit_builder_base_impl.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/circuit_builder_base_impl.hpp @@ -235,6 +235,7 @@ void CircuitBuilderBase::add_recursive_proof(const AggregationObjectIndices { if (contains_recursive_proof) { failure("added recursive proof when one already exists"); + ASSERT(0); } contains_recursive_proof = true; diff --git a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/mega_flavor.hpp b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/mega_flavor.hpp index 0ff86bf9070..2c1f44c617e 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/mega_flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/mega_flavor.hpp @@ -378,7 +378,7 @@ class MegaFlavor { ProverPolynomials(size_t circuit_size) { // TODO(https://github.com/AztecProtocol/barretenberg/issues/1072): Unexpected jump in time to allocate all - // of these polys (in aztec_ivc_bench only). + // of these polys (in client_ivc_bench only). BB_OP_COUNT_TIME_NAME("ProverPolynomials(size_t)"); for (auto& poly : get_to_be_shifted()) { @@ -562,7 +562,7 @@ class MegaFlavor { /** * @brief Serialize verification key to field elements */ - std::vector to_field_elements() + std::vector to_field_elements() const { using namespace bb::field_conversion; @@ -585,7 +585,7 @@ class MegaFlavor { serialize_to_field_buffer(this->databus_propagation_data.kernel_return_data_public_input_idx, elements); serialize_to_field_buffer(this->databus_propagation_data.is_kernel, elements); - for (Commitment& commitment : this->get_all()) { + for (const Commitment& commitment : this->get_all()) { serialize_to_field_buffer(commitment, elements); } diff --git a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_circuit_builder.cpp b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_circuit_builder.cpp index 0d554b80c13..9bae714db18 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_circuit_builder.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_circuit_builder.cpp @@ -180,52 +180,52 @@ void UltraCircuitBuilder_::add_gates_to_ensure_all_polys_are_no plookup::MultiTableId::HONK_DUMMY_MULTI, dummy_accumulators, left_witness_index, right_witness_index); // mock a poseidon external gate, with all zeros as input - blocks.poseidon_external.populate_wires(this->zero_idx, this->zero_idx, this->zero_idx, this->zero_idx); - blocks.poseidon_external.q_m().emplace_back(0); - blocks.poseidon_external.q_1().emplace_back(0); - blocks.poseidon_external.q_2().emplace_back(0); - blocks.poseidon_external.q_3().emplace_back(0); - blocks.poseidon_external.q_c().emplace_back(0); - blocks.poseidon_external.q_arith().emplace_back(0); - blocks.poseidon_external.q_4().emplace_back(0); - blocks.poseidon_external.q_delta_range().emplace_back(0); - blocks.poseidon_external.q_lookup_type().emplace_back(0); - blocks.poseidon_external.q_elliptic().emplace_back(0); - blocks.poseidon_external.q_aux().emplace_back(0); - blocks.poseidon_external.q_poseidon2_external().emplace_back(1); - blocks.poseidon_external.q_poseidon2_internal().emplace_back(0); + blocks.poseidon2_external.populate_wires(this->zero_idx, this->zero_idx, this->zero_idx, this->zero_idx); + blocks.poseidon2_external.q_m().emplace_back(0); + blocks.poseidon2_external.q_1().emplace_back(0); + blocks.poseidon2_external.q_2().emplace_back(0); + blocks.poseidon2_external.q_3().emplace_back(0); + blocks.poseidon2_external.q_c().emplace_back(0); + blocks.poseidon2_external.q_arith().emplace_back(0); + blocks.poseidon2_external.q_4().emplace_back(0); + blocks.poseidon2_external.q_delta_range().emplace_back(0); + blocks.poseidon2_external.q_lookup_type().emplace_back(0); + blocks.poseidon2_external.q_elliptic().emplace_back(0); + blocks.poseidon2_external.q_aux().emplace_back(0); + blocks.poseidon2_external.q_poseidon2_external().emplace_back(1); + blocks.poseidon2_external.q_poseidon2_internal().emplace_back(0); if constexpr (HasAdditionalSelectors) { - blocks.poseidon_external.pad_additional(); + blocks.poseidon2_external.pad_additional(); } check_selector_length_consistency(); ++this->num_gates; // dummy gate to be read into by previous poseidon external gate via shifts - this->create_dummy_gate(blocks.poseidon_external, this->zero_idx, this->zero_idx, this->zero_idx, this->zero_idx); + this->create_dummy_gate(blocks.poseidon2_external, this->zero_idx, this->zero_idx, this->zero_idx, this->zero_idx); // mock a poseidon internal gate, with all zeros as input - blocks.poseidon_internal.populate_wires(this->zero_idx, this->zero_idx, this->zero_idx, this->zero_idx); - blocks.poseidon_internal.q_m().emplace_back(0); - blocks.poseidon_internal.q_1().emplace_back(0); - blocks.poseidon_internal.q_2().emplace_back(0); - blocks.poseidon_internal.q_3().emplace_back(0); - blocks.poseidon_internal.q_c().emplace_back(0); - blocks.poseidon_internal.q_arith().emplace_back(0); - blocks.poseidon_internal.q_4().emplace_back(0); - blocks.poseidon_internal.q_delta_range().emplace_back(0); - blocks.poseidon_internal.q_lookup_type().emplace_back(0); - blocks.poseidon_internal.q_elliptic().emplace_back(0); - blocks.poseidon_internal.q_aux().emplace_back(0); - blocks.poseidon_internal.q_poseidon2_external().emplace_back(0); - blocks.poseidon_internal.q_poseidon2_internal().emplace_back(1); + blocks.poseidon2_internal.populate_wires(this->zero_idx, this->zero_idx, this->zero_idx, this->zero_idx); + blocks.poseidon2_internal.q_m().emplace_back(0); + blocks.poseidon2_internal.q_1().emplace_back(0); + blocks.poseidon2_internal.q_2().emplace_back(0); + blocks.poseidon2_internal.q_3().emplace_back(0); + blocks.poseidon2_internal.q_c().emplace_back(0); + blocks.poseidon2_internal.q_arith().emplace_back(0); + blocks.poseidon2_internal.q_4().emplace_back(0); + blocks.poseidon2_internal.q_delta_range().emplace_back(0); + blocks.poseidon2_internal.q_lookup_type().emplace_back(0); + blocks.poseidon2_internal.q_elliptic().emplace_back(0); + blocks.poseidon2_internal.q_aux().emplace_back(0); + blocks.poseidon2_internal.q_poseidon2_external().emplace_back(0); + blocks.poseidon2_internal.q_poseidon2_internal().emplace_back(1); if constexpr (HasAdditionalSelectors) { - blocks.poseidon_internal.pad_additional(); + blocks.poseidon2_internal.pad_additional(); } check_selector_length_consistency(); ++this->num_gates; // dummy gate to be read into by previous poseidon internal gate via shifts - create_dummy_gate(blocks.poseidon_internal, this->zero_idx, this->zero_idx, this->zero_idx, this->zero_idx); + create_dummy_gate(blocks.poseidon2_internal, this->zero_idx, this->zero_idx, this->zero_idx, this->zero_idx); } /** @@ -1717,45 +1717,22 @@ std::array UltraCircuitBuilder_::evaluate_non_nati range_constrain_two_limbs(input.q[2], input.q[3]); } - // TODO(https://github.com/AztecProtocol/barretenberg/issues/913): Remove this arithmetic gate from the aux block - // and replace with the big_add + dummy below. - this->assert_valid_variables({ input.q[0], input.q[1], input.r[1], lo_1_idx }); - blocks.aux.populate_wires(input.q[0], input.q[1], input.r[1], lo_1_idx); - blocks.aux.q_m().emplace_back(0); - blocks.aux.q_1().emplace_back(input.neg_modulus[0] + input.neg_modulus[1] * LIMB_SHIFT); - blocks.aux.q_2().emplace_back(input.neg_modulus[0] * LIMB_SHIFT); - blocks.aux.q_3().emplace_back(-LIMB_SHIFT); - blocks.aux.q_c().emplace_back(0); - blocks.aux.q_arith().emplace_back(2); - blocks.aux.q_4().emplace_back(-LIMB_SHIFT.sqr()); - blocks.aux.q_delta_range().emplace_back(0); - blocks.aux.q_lookup_type().emplace_back(0); - blocks.aux.q_elliptic().emplace_back(0); - blocks.aux.q_aux().emplace_back(0); - blocks.aux.q_poseidon2_external().emplace_back(0); - blocks.aux.q_poseidon2_internal().emplace_back(0); - if constexpr (HasAdditionalSelectors) { - blocks.aux.pad_additional(); - } - check_selector_length_consistency(); - ++this->num_gates; - // TODO(https://github.com/AztecProtocol/barretenberg/issues/879): Originally this was a single arithmetic gate. // With trace sorting, we must add a dummy gate since the add gate would otherwise try to read into an aux gate that - // has been sorted out of sequence. (Note: temporarily disabled in favor of manual arith gate in aux block above). + // has been sorted out of sequence. // product gate 1 // (lo_0 + q_0(p_0 + p_1*2^b) + q_1(p_0*2^b) - (r_1)2^b)2^-2b - lo_1 = 0 - // create_big_add_gate({ input.q[0], - // input.q[1], - // input.r[1], - // lo_1_idx, - // input.neg_modulus[0] + input.neg_modulus[1] * LIMB_SHIFT, - // input.neg_modulus[0] * LIMB_SHIFT, - // -LIMB_SHIFT, - // -LIMB_SHIFT.sqr(), - // 0 }, - // true); - // create_dummy_gate(blocks.arithmetic, this->zero_idx, this->zero_idx, this->zero_idx, lo_0_idx); + create_big_add_gate({ input.q[0], + input.q[1], + input.r[1], + lo_1_idx, + input.neg_modulus[0] + input.neg_modulus[1] * LIMB_SHIFT, + input.neg_modulus[0] * LIMB_SHIFT, + -LIMB_SHIFT, + -LIMB_SHIFT.sqr(), + 0 }, + true); + create_dummy_gate(blocks.arithmetic, this->zero_idx, this->zero_idx, this->zero_idx, lo_0_idx); blocks.aux.populate_wires(input.a[1], input.b[1], input.r[0], lo_0_idx); apply_aux_selectors(AUX_SELECTORS::NON_NATIVE_FIELD_1); @@ -2803,7 +2780,7 @@ template void UltraCircuitBuilder_:: template void UltraCircuitBuilder_::create_poseidon2_external_gate(const poseidon2_external_gate_& in) { - auto& block = this->blocks.poseidon_external; + auto& block = this->blocks.poseidon2_external; block.populate_wires(in.a, in.b, in.c, in.d); block.q_m().emplace_back(0); block.q_1().emplace_back(crypto::Poseidon2Bn254ScalarFieldParams::round_constants[in.round_idx][0]); @@ -2831,7 +2808,7 @@ void UltraCircuitBuilder_::create_poseidon2_external_gate(const poseidon2_ex template void UltraCircuitBuilder_::create_poseidon2_internal_gate(const poseidon2_internal_gate_& in) { - auto& block = this->blocks.poseidon_internal; + auto& block = this->blocks.poseidon2_internal; block.populate_wires(in.a, in.b, in.c, in.d); block.q_m().emplace_back(0); block.q_1().emplace_back(crypto::Poseidon2Bn254ScalarFieldParams::round_constants[in.round_idx][0]); diff --git a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_flavor.hpp b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_flavor.hpp index 2bb9cb89721..b40174ce164 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_flavor.hpp @@ -38,8 +38,9 @@ class UltraFlavor { // Indicates that this flavor runs with non-ZK Sumcheck. static constexpr bool HasZK = false; static constexpr size_t NUM_WIRES = CircuitBuilder::NUM_WIRES; - // The number of multivariate polynomials on which a sumcheck prover sumcheck operates (including shifts). We often - // need containers of this size to hold related data, so we choose a name more agnostic than `NUM_POLYNOMIALS`. + // The number of multivariate polynomials on which a sumcheck prover sumcheck operates (witness polynomials, + // precomputed polynomials and shifts). We often need containers of this size to hold related data, so we choose a + // name more agnostic than `NUM_POLYNOMIALS`. static constexpr size_t NUM_ALL_ENTITIES = 44; // The number of polynomials precomputed to describe a circuit and to aid a prover in constructing a satisfying // assignment of witnesses. We again choose a neutral name. @@ -56,12 +57,15 @@ class UltraFlavor { // Note: made generic for use in MegaRecursive. template + // List of relations reflecting the Ultra arithmetisation. WARNING: As UltraKeccak flavor inherits from Ultra flavor + // any change of ordering in this tuple needs to be reflected in the smart contract, otherwise relation accumulation + // will not match. using Relations_ = std::tuple, bb::UltraPermutationRelation, + bb::LogDerivLookupRelation, bb::DeltaRangeConstraintRelation, bb::EllipticRelation, bb::AuxiliaryRelation, - bb::LogDerivLookupRelation, bb::Poseidon2ExternalRelation, bb::Poseidon2InternalRelation>; diff --git a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_keccak_flavor.hpp b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_keccak_flavor.hpp index 0b9485e4122..68653fbdb87 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_keccak_flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_keccak_flavor.hpp @@ -19,370 +19,13 @@ #include "barretenberg/relations/relation_parameters.hpp" #include "barretenberg/relations/ultra_arithmetic_relation.hpp" #include "barretenberg/stdlib_circuit_builders/ultra_circuit_builder.hpp" +#include "barretenberg/stdlib_circuit_builders/ultra_flavor.hpp" #include "barretenberg/transcript/transcript.hpp" namespace bb { -class UltraKeccakFlavor { +class UltraKeccakFlavor : public bb::UltraFlavor { public: - using CircuitBuilder = UltraCircuitBuilder; - using Curve = curve::BN254; - using FF = Curve::ScalarField; - using GroupElement = Curve::Element; - using Commitment = Curve::AffineElement; - using PCS = KZG; - using Polynomial = bb::Polynomial; - using CommitmentKey = bb::CommitmentKey; - using VerifierCommitmentKey = bb::VerifierCommitmentKey; - - // Indicates that this flavor runs with non-ZK Sumcheck. - static constexpr bool HasZK = false; - static constexpr size_t NUM_WIRES = CircuitBuilder::NUM_WIRES; - // The number of multivariate polynomials on which a sumcheck prover sumcheck operates (including shifts). We often - // need containers of this size to hold related data, so we choose a name more agnostic than `NUM_POLYNOMIALS`. - static constexpr size_t NUM_ALL_ENTITIES = 44; - // The number of polynomials precomputed to describe a circuit and to aid a prover in constructing a satisfying - // assignment of witnesses. We again choose a neutral name. - static constexpr size_t NUM_PRECOMPUTED_ENTITIES = 27; - // The total number of witness entities not including shifts. - static constexpr size_t NUM_WITNESS_ENTITIES = 8; - // The total number of witnesses including shifts and derived entities. - static constexpr size_t NUM_ALL_WITNESS_ENTITIES = 13; - // Total number of folded polynomials, which is just all polynomials except the shifts - static constexpr size_t NUM_FOLDED_ENTITIES = NUM_PRECOMPUTED_ENTITIES + NUM_WITNESS_ENTITIES; - - using GrandProductRelations = std::tuple>; - // define the tuple of Relations that comprise the Sumcheck relation - // Note: made generic for use in MegaRecursive. - template - using Relations_ = std::tuple, - bb::UltraPermutationRelation, - bb::LogDerivLookupRelation, - bb::DeltaRangeConstraintRelation, - bb::EllipticRelation, - bb::AuxiliaryRelation, - bb::Poseidon2ExternalRelation, - bb::Poseidon2InternalRelation>; - - using Relations = Relations_; - - static constexpr size_t MAX_PARTIAL_RELATION_LENGTH = compute_max_partial_relation_length(); - static_assert(MAX_PARTIAL_RELATION_LENGTH == 7); - static constexpr size_t MAX_TOTAL_RELATION_LENGTH = compute_max_total_relation_length(); - static_assert(MAX_TOTAL_RELATION_LENGTH == 11); - static constexpr size_t NUM_SUBRELATIONS = compute_number_of_subrelations(); - // For instances of this flavour, used in folding, we need a unique sumcheck batching challenge for each - // subrelation. This is because using powers of alpha would increase the degree of Protogalaxy polynomial $G$ (the - // combiner) too much. - using RelationSeparator = std::array; - - // BATCHED_RELATION_PARTIAL_LENGTH = algebraic degree of sumcheck relation *after* multiplying by the `pow_zeta` - // random polynomial e.g. For \sum(x) [A(x) * B(x) + C(x)] * PowZeta(X), relation length = 2 and random relation - // length = 3 - static constexpr size_t BATCHED_RELATION_PARTIAL_LENGTH = MAX_PARTIAL_RELATION_LENGTH + 1; - static constexpr size_t NUM_RELATIONS = std::tuple_size_v; - - template - using ProtogalaxyTupleOfTuplesOfUnivariatesNoOptimisticSkipping = - decltype(create_protogalaxy_tuple_of_tuples_of_univariates()); - template - using ProtogalaxyTupleOfTuplesOfUnivariates = - decltype(create_protogalaxy_tuple_of_tuples_of_univariates()); - using SumcheckTupleOfTuplesOfUnivariates = decltype(create_sumcheck_tuple_of_tuples_of_univariates()); - using TupleOfArraysOfValues = decltype(create_tuple_of_arrays_of_values()); - - // Whether or not the first row of the execution trace is reserved for 0s to enable shifts - static constexpr bool has_zero_row = true; - - static constexpr bool is_decider = true; - - /** - * @brief A base class labelling precomputed entities and (ordered) subsets of interest. - * @details Used to build the proving key and verification key. - */ - template class PrecomputedEntities : public PrecomputedEntitiesBase { - public: - using DataType = DataType_; - DEFINE_FLAVOR_MEMBERS(DataType, - q_m, // column 0 - q_c, // column 1 - q_l, // column 2 - q_r, // column 3 - q_o, // column 4 - q_4, // column 5 - q_arith, // column 6 - q_delta_range, // column 7 - q_elliptic, // column 8 - q_aux, // column 9 - q_lookup, // column 10 - q_poseidon2_external, // column 11 - q_poseidon2_internal, // column 12 - sigma_1, // column 13 - sigma_2, // column 14 - sigma_3, // column 15 - sigma_4, // column 16 - id_1, // column 17 - id_2, // column 18 - id_3, // column 19 - id_4, // column 20 - table_1, // column 21 - table_2, // column 22 - table_3, // column 23 - table_4, // column 24 - lagrange_first, // column 25 - lagrange_last) // column 26 - - static constexpr CircuitType CIRCUIT_TYPE = CircuitBuilder::CIRCUIT_TYPE; - - auto get_selectors() - { - return RefArray{ q_m, - q_c, - q_l, - q_r, - q_o, - q_4, - q_arith, - q_delta_range, - q_elliptic, - q_aux, - q_lookup, - q_poseidon2_external, - q_poseidon2_internal }; - }; - auto get_sigma_polynomials() { return RefArray{ sigma_1, sigma_2, sigma_3, sigma_4 }; }; - auto get_id_polynomials() { return RefArray{ id_1, id_2, id_3, id_4 }; }; - - auto get_table_polynomials() { return RefArray{ table_1, table_2, table_3, table_4 }; }; - }; - - /** - * @brief Container for all witness polynomials used/constructed by the prover. - * @details Shifts are not included here since they do not occupy their own memory. - */ - template class WitnessEntities { - public: - DEFINE_FLAVOR_MEMBERS(DataType, - w_l, // column 0 - w_r, // column 1 - w_o, // column 2 - w_4, // column 3 - z_perm, // column 4 - lookup_inverses, // column 5 - lookup_read_counts, // column 6 - lookup_read_tags) // column 7 - - auto get_wires() { return RefArray{ w_l, w_r, w_o, w_4 }; }; - - MSGPACK_FIELDS(w_l, w_r, w_o, w_4, z_perm, lookup_inverses, lookup_read_counts, lookup_read_tags); - }; - - /** - * @brief Class for ShiftedEntities, containing shifted witness and table polynomials. - */ - template class ShiftedEntities { - public: - DEFINE_FLAVOR_MEMBERS(DataType, - table_1_shift, // column 0 - table_2_shift, // column 1 - table_3_shift, // column 2 - table_4_shift, // column 3 - w_l_shift, // column 4 - w_r_shift, // column 5 - w_o_shift, // column 6 - w_4_shift, // column 7 - z_perm_shift) // column 10 - - auto get_shifted() - { - return RefArray{ table_1_shift, table_2_shift, table_3_shift, table_4_shift, w_l_shift, - w_r_shift, w_o_shift, w_4_shift, z_perm_shift }; - }; - }; - - /** - * @brief A base class labelling all entities (for instance, all of the polynomials used by the prover during - * sumcheck) in this Honk variant along with particular subsets of interest - * @details Used to build containers for: the prover's polynomial during sumcheck; the sumcheck's folded - * polynomials; the univariates consturcted during during sumcheck; the evaluations produced by sumcheck. - * - * Symbolically we have: AllEntities = PrecomputedEntities + WitnessEntities + "ShiftedEntities". It could be - * implemented as such, but we have this now. - */ - template - class AllEntities : public PrecomputedEntities, - public WitnessEntities, - public ShiftedEntities { - public: - DEFINE_COMPOUND_GET_ALL(PrecomputedEntities, WitnessEntities, ShiftedEntities) - - auto get_wires() { return RefArray{ this->w_l, this->w_r, this->w_o, this->w_4 }; }; - auto get_selectors() { return PrecomputedEntities::get_selectors(); } - auto get_sigmas() { return RefArray{ this->sigma_1, this->sigma_2, this->sigma_3, this->sigma_4 }; }; - auto get_ids() { return RefArray{ this->id_1, this->id_2, this->id_3, this->id_4 }; }; - auto get_tables() { return RefArray{ this->table_1, this->table_2, this->table_3, this->table_4 }; }; - auto get_unshifted() - { - return concatenate(PrecomputedEntities::get_all(), WitnessEntities::get_all()); - }; - - auto get_precomputed() { return PrecomputedEntities::get_all(); } - - auto get_witness() { return WitnessEntities::get_all(); }; - auto get_to_be_shifted() - { - return RefArray{ this->table_1, this->table_2, this->table_3, this->table_4, this->w_l, - this->w_r, this->w_o, this->w_4, this->z_perm }; - }; - auto get_shifted() { return ShiftedEntities::get_all(); }; - }; - - public: - /** - * @brief A field element for each entity of the flavor. These entities represent the prover polynomials - * evaluated at one point. - */ - class AllValues : public AllEntities { - public: - using Base = AllEntities; - using Base::Base; - }; - - /** - * @brief A container for polynomials handles. - */ - // TODO(https://github.com/AztecProtocol/barretenberg/issues/966): use inheritance - class ProverPolynomials : public AllEntities { - public: - // Define all operations as default, except copy construction/assignment - ProverPolynomials() = default; - ProverPolynomials(size_t circuit_size) - { // Initialize all unshifted polynomials to the zero polynomial and initialize the - // shifted polys - - for (auto& poly : get_to_be_shifted()) { - poly = Polynomial{ /*memory size*/ circuit_size - 1, - /*largest possible index*/ circuit_size, - /* offset */ 1 }; - } - for (auto& poly : get_unshifted()) { - if (poly.is_empty()) { - // Not set above - poly = Polynomial{ /*memory size*/ circuit_size, /*largest possible index*/ circuit_size }; - } - } - set_shifted(); - } - ProverPolynomials& operator=(const ProverPolynomials&) = delete; - ProverPolynomials(const ProverPolynomials& o) = delete; - ProverPolynomials(ProverPolynomials&& o) noexcept = default; - ProverPolynomials& operator=(ProverPolynomials&& o) noexcept = default; - ~ProverPolynomials() = default; - [[nodiscard]] size_t get_polynomial_size() const { return q_c.size(); } - [[nodiscard]] AllValues get_row(const size_t row_idx) const - { - BB_OP_COUNT_TIME(); - AllValues result; - for (auto [result_field, polynomial] : zip_view(result.get_all(), get_all())) { - result_field = polynomial[row_idx]; - } - return result; - } - - // Set all shifted polynomials based on their to-be-shifted counterpart - void set_shifted() - { - for (auto [shifted, to_be_shifted] : zip_view(get_shifted(), get_to_be_shifted())) { - shifted = to_be_shifted.shifted(); - } - } - }; - /** - * @brief The proving key is responsible for storing the polynomials used by the prover. - * - */ - class ProvingKey : public ProvingKey_ { - public: - using Base = ProvingKey_; - - ProvingKey() = default; - ProvingKey(const size_t circuit_size, - const size_t num_public_inputs, - std::shared_ptr commitment_key = nullptr) - : Base(circuit_size, num_public_inputs, commitment_key) - , polynomials(circuit_size){}; - - std::vector memory_read_records; - std::vector memory_write_records; - ProverPolynomials polynomials; // storage for all polynomials evaluated by the prover - - /** - * @brief Add RAM/ROM memory records to the fourth wire polynomial - * - * @details This operation must be performed after the first three wires have been - * committed to, hence the dependence on the `eta` challenge. - * - * @tparam Flavor - * @param eta challenge produced after commitment to first three wire polynomials - */ - void add_ram_rom_memory_records_to_wire_4(const FF& eta, const FF& eta_two, const FF& eta_three) - { - // The memory record values are computed at the indicated indices as - // w4 = w3 * eta^3 + w2 * eta^2 + w1 * eta + read_write_flag; - // (See the Auxiliary relation for details) - auto wires = polynomials.get_wires(); - - // Compute read record values - for (const auto& gate_idx : memory_read_records) { - wires[3].at(gate_idx) += wires[2][gate_idx] * eta_three; - wires[3].at(gate_idx) += wires[1][gate_idx] * eta_two; - wires[3].at(gate_idx) += wires[0][gate_idx] * eta; - } - - // Compute write record values - for (const auto& gate_idx : memory_write_records) { - wires[3].at(gate_idx) += wires[2][gate_idx] * eta_three; - wires[3].at(gate_idx) += wires[1][gate_idx] * eta_two; - wires[3].at(gate_idx) += wires[0][gate_idx] * eta; - wires[3].at(gate_idx) += 1; - } - } - - /** - * @brief Compute the inverse polynomial used in the log derivative lookup argument - * - * @tparam Flavor - * @param beta - * @param gamma - */ - void compute_logderivative_inverses(const RelationParameters& relation_parameters) - { - // Compute inverses for conventional lookups - compute_logderivative_inverse>( - this->polynomials, relation_parameters, this->circuit_size); - } - - /** - * @brief Computes public_input_delta and the permutation grand product polynomial - * - * @param relation_parameters - */ - void compute_grand_product_polynomials(RelationParameters& relation_parameters) - { - auto public_input_delta = compute_public_input_delta(this->public_inputs, - relation_parameters.beta, - relation_parameters.gamma, - this->circuit_size, - this->pub_inputs_offset); - relation_parameters.public_input_delta = public_input_delta; - - // Compute permutation and lookup grand product polynomials - compute_grand_products(this->polynomials, relation_parameters); - } - }; - /** * @brief The verification key is responsible for storing the commitments to the precomputed (non-witnessk) * polynomials used by the verifier. @@ -391,6 +34,7 @@ class UltraKeccakFlavor { * that, and split out separate PrecomputedPolynomials/Commitments data for clarity but also for portability of our * circuits. */ + // TODO(https://github.com/AztecProtocol/barretenberg/issues/1094): Add aggregation class VerificationKey : public VerificationKey_, VerifierCommitmentKey> { public: VerificationKey() = default; @@ -509,146 +153,6 @@ class UltraKeccakFlavor { lagrange_last); }; - /** - * @brief A container for storing the partially evaluated multivariates produced by sumcheck. - */ - class PartiallyEvaluatedMultivariates : public AllEntities { - - public: - PartiallyEvaluatedMultivariates() = default; - PartiallyEvaluatedMultivariates(const size_t circuit_size) - { - // Storage is only needed after the first partial evaluation, hence polynomials of - // size (n / 2) - for (auto& poly : this->get_all()) { - poly = Polynomial(circuit_size / 2); - } - } - }; - - /** - * @brief A container for univariates used during Protogalaxy folding and sumcheck. - * @details During folding and sumcheck, the prover evaluates the relations on these univariates. - */ - template using ProverUnivariates = AllEntities>; - /** - * @brief A container for univariates used during Protogalaxy folding and sumcheck. - * @details During folding and sumcheck, the prover evaluates the relations on these univariates. - */ - template - using ProverUnivariatesWithOptimisticSkipping = AllEntities>; - - /** - * @brief A container for univariates produced during the hot loop in sumcheck. - */ - using ExtendedEdges = ProverUnivariates; - - /** - * @brief A container for the witness commitments. - */ - using WitnessCommitments = WitnessEntities; - - /** - * @brief A container for commitment labels. - * @note It's debatable whether this should inherit from AllEntities. since most entries are not strictly needed. It - * has, however, been useful during debugging to have these labels available. - * - */ - class CommitmentLabels : public AllEntities { - public: - CommitmentLabels() - { - w_l = "W_L"; - w_r = "W_R"; - w_o = "W_O"; - w_4 = "W_4"; - z_perm = "Z_PERM"; - lookup_inverses = "LOOKUP_INVERSES"; - lookup_read_counts = "LOOKUP_READ_COUNTS"; - lookup_read_tags = "LOOKUP_READ_TAGS"; - - q_c = "Q_C"; - q_l = "Q_L"; - q_r = "Q_R"; - q_o = "Q_O"; - q_4 = "Q_4"; - q_m = "Q_M"; - q_arith = "Q_ARITH"; - q_delta_range = "Q_SORT"; - q_elliptic = "Q_ELLIPTIC"; - q_aux = "Q_AUX"; - q_lookup = "Q_LOOKUP"; - q_poseidon2_external = "Q_POSEIDON2_EXTERNAL"; - q_poseidon2_internal = "Q_POSEIDON2_INTERNAL"; - sigma_1 = "SIGMA_1"; - sigma_2 = "SIGMA_2"; - sigma_3 = "SIGMA_3"; - sigma_4 = "SIGMA_4"; - id_1 = "ID_1"; - id_2 = "ID_2"; - id_3 = "ID_3"; - id_4 = "ID_4"; - table_1 = "TABLE_1"; - table_2 = "TABLE_2"; - table_3 = "TABLE_3"; - table_4 = "TABLE_4"; - lagrange_first = "LAGRANGE_FIRST"; - lagrange_last = "LAGRANGE_LAST"; - }; - }; - - /** - * @brief A container encapsulating all the commitments that the verifier receives (to precomputed polynomials and - * witness polynomials). - * - */ - template - class VerifierCommitments_ : public AllEntities { - public: - VerifierCommitments_(const std::shared_ptr& verification_key, - const std::optional& witness_commitments = std::nullopt) - { - this->q_m = verification_key->q_m; - this->q_c = verification_key->q_c; - this->q_l = verification_key->q_l; - this->q_r = verification_key->q_r; - this->q_o = verification_key->q_o; - this->q_4 = verification_key->q_4; - this->q_arith = verification_key->q_arith; - this->q_delta_range = verification_key->q_delta_range; - this->q_elliptic = verification_key->q_elliptic; - this->q_aux = verification_key->q_aux; - this->q_lookup = verification_key->q_lookup; - this->q_poseidon2_external = verification_key->q_poseidon2_external; - this->q_poseidon2_internal = verification_key->q_poseidon2_internal; - this->sigma_1 = verification_key->sigma_1; - this->sigma_2 = verification_key->sigma_2; - this->sigma_3 = verification_key->sigma_3; - this->sigma_4 = verification_key->sigma_4; - this->id_1 = verification_key->id_1; - this->id_2 = verification_key->id_2; - this->id_3 = verification_key->id_3; - this->id_4 = verification_key->id_4; - this->table_1 = verification_key->table_1; - this->table_2 = verification_key->table_2; - this->table_3 = verification_key->table_3; - this->table_4 = verification_key->table_4; - this->lagrange_first = verification_key->lagrange_first; - this->lagrange_last = verification_key->lagrange_last; - - if (witness_commitments.has_value()) { - auto commitments = witness_commitments.value(); - this->w_l = commitments.w_l; - this->w_r = commitments.w_r; - this->w_o = commitments.w_o; - this->lookup_inverses = commitments.lookup_inverses; - this->lookup_read_counts = commitments.lookup_read_counts; - this->lookup_read_tags = commitments.lookup_read_tags; - this->w_4 = commitments.w_4; - this->z_perm = commitments.z_perm; - } - } - }; // Specialize for Ultra (general case used in UltraRecursive). using VerifierCommitments = VerifierCommitments_; diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/decider_keys.hpp b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_keys.hpp index 882950d95db..e6ef907c622 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/decider_keys.hpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_keys.hpp @@ -43,9 +43,9 @@ template struct DeciderProvingKeys_ { * PK 0 PK 1 PK 2 PK 3 * q_c q_l q_r ... q_c q_l q_r ... q_c q_l q_r ... q_c q_l q_r ... * * * * * * * * * - * * * * * * * * * * a_1 a_2 a_3 ... b_1 b_2 b_3 ... c_1 c_2 c_3 ... d_1 d_2 d_3 ... * * * * * * * * * + * ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ * * and the function returns the univariates [{a_1, b_1, c_1, d_1}, {a_2, b_2, c_2, d_2}, ...] * @@ -86,6 +86,8 @@ template struct DeciderProvingKeys_ { template struct DeciderVerificationKeys_ { static_assert(NUM_ > 1, "Must have at least two decider verification keys."); using Flavor = Flavor_; + using FF = typename Flavor_::FF; + using Commitment = typename Flavor_::Commitment; using VerificationKey = typename Flavor::VerificationKey; using DeciderVK = DeciderVerificationKey_; using ArrayType = std::array, NUM_>; @@ -97,8 +99,8 @@ template struct DeciderVerificationKeys_ { std::shared_ptr const& operator[](size_t idx) const { return _data[idx]; } typename ArrayType::iterator begin() { return _data.begin(); }; typename ArrayType::iterator end() { return _data.end(); }; - DeciderVerificationKeys_() = default; + DeciderVerificationKeys_() = default; DeciderVerificationKeys_(const std::vector>& data) { ASSERT(data.size() == NUM); @@ -106,5 +108,81 @@ template struct DeciderVerificationKeys_ { _data[idx] = std::move(data[idx]); } }; + + /** + * @brief Get the precomputed commitments grouped by commitment index + * @example If the commitments are grouped as in + * VK 0 VK 1 VK 2 VK 3 + * q_c_0 q_c_1 q_c_2 q_c_3 + * q_l_0 q_l_1 q_l_2 q_l_3 + * ⋮ ⋮ ⋮ ⋮ + * + * then this function output this matrix of group elements as a vector of rows, + * i.e. it ouptuts {{q_c_0, q_c_1, q_c_2, q_c_3}, {q_l_0, q_l_1, q_l_2, q_l_3},...}. + * The "commitment index" is the index of the row. + */ + std::vector> get_precomputed_commitments() const + { + const size_t num_commitments_to_fold = _data[0]->verification_key->get_all().size(); + std::vector> result(num_commitments_to_fold, std::vector(NUM)); + for (size_t idx = 0; auto& commitment_at_idx : result) { + for (auto [elt, key] : zip_view(commitment_at_idx, _data)) { + elt = key->verification_key->get_all()[idx]; + } + idx++; + } + return result; + } + + /** + * @brief Get the witness commitments grouped by commitment index + * @details See get_precomputed_commitments; this is essentially the same. + */ + std::vector> get_witness_commitments() const + { + const size_t num_commitments_to_fold = _data[0]->witness_commitments.get_all().size(); + std::vector> result(num_commitments_to_fold, std::vector(NUM)); + for (size_t idx = 0; auto& commitment_at_idx : result) { + for (auto [elt, key] : zip_view(commitment_at_idx, _data)) { + elt = key->witness_commitments.get_all()[idx]; + } + idx++; + } + return result; + } + + /** + * @brief Get the alphas grouped by commitment index + * @details See get_precomputed_commitments; this is essentially the same. + */ + std::vector> get_alphas() const + { + const size_t num_alphas_to_fold = _data[0]->alphas.size(); + std::vector> result(num_alphas_to_fold, std::vector(NUM)); + for (size_t idx = 0; auto& alpha_at_idx : result) { + for (auto [elt, key] : zip_view(alpha_at_idx, _data)) { + elt = key->alphas[idx]; + } + idx++; + } + return result; + } + + /** + * @brief Get the relation parameters grouped by commitment index + * @details See get_precomputed_commitments; this is essentially the same. + */ + std::vector> get_relation_parameters() const + { + const size_t num_params_to_fold = _data[0]->relation_parameters.get_to_fold().size(); + std::vector> result(num_params_to_fold, std::vector(NUM)); + for (size_t idx = 0; auto& params_at_idx : result) { + for (auto [elt, key] : zip_view(params_at_idx, _data)) { + elt = key->relation_parameters.get_to_fold()[idx]; + } + idx++; + } + return result; + } }; } // namespace bb diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.cpp b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.cpp index 5d8defd5036..e8063431f7d 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.cpp @@ -47,15 +47,30 @@ template void DeciderProver_::execute_relation_ch * */ template void DeciderProver_::execute_pcs_rounds() { - using ZeroMorph = ZeroMorphProver_; - auto prover_opening_claim = ZeroMorph::prove(proving_key->proving_key.circuit_size, - proving_key->proving_key.polynomials.get_unshifted(), - proving_key->proving_key.polynomials.get_to_be_shifted(), - sumcheck_output.claimed_evaluations.get_unshifted(), - sumcheck_output.claimed_evaluations.get_shifted(), - sumcheck_output.challenge, - commitment_key, - transcript); + using OpeningClaim = ProverOpeningClaim; + + // TODO(https://github.com/AztecProtocol/barretenberg/issues/1109): Remove this hack once the verifier runs on + // Shplemini for all Ultra flavors + OpeningClaim prover_opening_claim; + if constexpr (bb::IsAnyOf) { + + prover_opening_claim = ShpleminiProver_::prove(proving_key->proving_key.circuit_size, + proving_key->proving_key.polynomials.get_unshifted(), + proving_key->proving_key.polynomials.get_to_be_shifted(), + sumcheck_output.challenge, + commitment_key, + transcript); + } else { + + prover_opening_claim = ZeroMorphProver_::prove(proving_key->proving_key.circuit_size, + proving_key->proving_key.polynomials.get_unshifted(), + proving_key->proving_key.polynomials.get_to_be_shifted(), + sumcheck_output.claimed_evaluations.get_unshifted(), + sumcheck_output.claimed_evaluations.get_shifted(), + sumcheck_output.challenge, + commitment_key, + transcript); + } PCS::compute_opening_proof(commitment_key, prover_opening_claim, transcript); } diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.hpp b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.hpp index c85a9520d47..05edb01d22a 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.hpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.hpp @@ -1,4 +1,5 @@ #pragma once +#include "barretenberg/commitment_schemes/shplonk/shplemini.hpp" #include "barretenberg/commitment_schemes/zeromorph/zeromorph.hpp" #include "barretenberg/honk/proof_system/types/proof.hpp" #include "barretenberg/relations/relation_parameters.hpp" diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/decider_verifier.cpp b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_verifier.cpp index 8fb81f8749c..477ac93c297 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/decider_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_verifier.cpp @@ -1,6 +1,8 @@ #include "decider_verifier.hpp" +#include "barretenberg/commitment_schemes/shplonk/shplemini.hpp" #include "barretenberg/commitment_schemes/zeromorph/zeromorph.hpp" #include "barretenberg/numeric/bitop/get_msb.hpp" +#include "barretenberg/sumcheck/sumcheck.hpp" #include "barretenberg/transcript/transcript.hpp" #include "barretenberg/ultra_honk/decider_verification_key.hpp" @@ -37,7 +39,9 @@ template bool DeciderVerifier_::verify() { using PCS = typename Flavor::PCS; using Curve = typename Flavor::Curve; + using GroupElement = typename Curve::Element; using ZeroMorph = ZeroMorphVerifier_; + using Shplemini = ShpleminiVerifier_; using VerifierCommitments = typename Flavor::VerifierCommitments; VerifierCommitments commitments{ accumulator->verification_key, accumulator->witness_commitments }; @@ -54,19 +58,33 @@ template bool DeciderVerifier_::verify() return false; } - // Execute ZeroMorph rounds. See https://hackmd.io/dlf9xEwhTQyE3hiGbq4FsA?view for a complete description of the - // unrolled protocol. - auto opening_claim = ZeroMorph::verify(accumulator->verification_key->circuit_size, - commitments.get_unshifted(), - commitments.get_to_be_shifted(), - claimed_evaluations.get_unshifted(), - claimed_evaluations.get_shifted(), - multivariate_challenge, - Commitment::one(), - transcript); - auto pairing_points = PCS::reduce_verify(opening_claim, transcript); - - auto verified = pcs_verification_key->pairing_check(pairing_points[0], pairing_points[1]); + std::array pairing_points; + // TODO(https://github.com/AztecProtocol/barretenberg/issues/1109): Remove this hack once the verifier runs on + // Shplemini for all Ultra flavors + if constexpr (bb::IsAnyOf) { + const auto opening_claim = Shplemini::compute_batch_opening_claim(accumulator->verification_key->circuit_size, + commitments.get_unshifted(), + commitments.get_to_be_shifted(), + claimed_evaluations.get_unshifted(), + claimed_evaluations.get_shifted(), + multivariate_challenge, + Commitment::one(), + transcript); + pairing_points = PCS::reduce_verify_batch_opening_claim(opening_claim, transcript); + } else { + // Execute ZeroMorph rounds. See https://hackmd.io/dlf9xEwhTQyE3hiGbq4FsA?view for a complete description of the + // unrolled protocol. + const auto opening_claim = ZeroMorph::verify(accumulator->verification_key->circuit_size, + commitments.get_unshifted(), + commitments.get_to_be_shifted(), + claimed_evaluations.get_unshifted(), + claimed_evaluations.get_shifted(), + multivariate_challenge, + Commitment::one(), + transcript); + pairing_points = PCS::reduce_verify(opening_claim, transcript); + } + bool verified = pcs_verification_key->pairing_check(pairing_points[0], pairing_points[1]); return sumcheck_verified.value() && verified; } diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/decider_verifier.hpp b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_verifier.hpp index 904b0a8b968..b4d013a9fe4 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/decider_verifier.hpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_verifier.hpp @@ -3,7 +3,6 @@ #include "barretenberg/srs/global_crs.hpp" #include "barretenberg/stdlib_circuit_builders/mega_flavor.hpp" #include "barretenberg/stdlib_circuit_builders/ultra_flavor.hpp" -#include "barretenberg/sumcheck/sumcheck.hpp" #include "barretenberg/ultra_honk/decider_verification_key.hpp" namespace bb { diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/circuit_builder.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/circuit_builder.cpp index f007e455874..6606d0667ec 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/circuit_builder.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/circuit_builder.cpp @@ -8,6 +8,7 @@ #include "barretenberg/common/throw_or_abort.hpp" #include "barretenberg/ecc/curves/bn254/fr.hpp" #include "barretenberg/honk/proof_system/logderivative_library.hpp" +#include "barretenberg/numeric/bitop/get_msb.hpp" #include "barretenberg/relations/generic_lookup/generic_lookup_relation.hpp" #include "barretenberg/relations/generic_permutation/generic_permutation_relation.hpp" #include "barretenberg/vm/stats.hpp" @@ -16,28 +17,31 @@ namespace bb { AvmCircuitBuilder::ProverPolynomials AvmCircuitBuilder::compute_polynomials() const { - const auto num_rows = get_circuit_subgroup_size(); + const size_t num_rows = get_num_gates(); + const size_t circuit_subgroup_size = get_circuit_subgroup_size(); + ASSERT(num_rows <= circuit_subgroup_size); ProverPolynomials polys; // Allocate mem for each column AVM_TRACK_TIME("circuit_builder/init_polys_to_be_shifted", ({ for (auto& poly : polys.get_to_be_shifted()) { poly = Polynomial{ /*memory size*/ num_rows - 1, - /*largest possible index*/ num_rows, + /*largest possible index*/ circuit_subgroup_size, /*make shiftable with offset*/ 1 }; } })); // catch-all with fully formed polynomials - AVM_TRACK_TIME("circuit_builder/init_polys_unshifted", ({ - auto unshifted = polys.get_unshifted(); - bb::parallel_for(unshifted.size(), [&](size_t i) { - auto& poly = unshifted[i]; - if (poly.is_empty()) { - // Not set above - poly = Polynomial{ /*memory size*/ num_rows, /*largest possible index*/ num_rows }; - } - }); - })); + AVM_TRACK_TIME( + "circuit_builder/init_polys_unshifted", ({ + auto unshifted = polys.get_unshifted(); + bb::parallel_for(unshifted.size(), [&](size_t i) { + auto& poly = unshifted[i]; + if (poly.is_empty()) { + // Not set above + poly = Polynomial{ /*memory size*/ num_rows, /*largest possible index*/ circuit_subgroup_size }; + } + }); + })); AVM_TRACK_TIME( "circuit_builder/set_polys_unshifted", ({ @@ -107,6 +111,7 @@ AvmCircuitBuilder::ProverPolynomials AvmCircuitBuilder::compute_polynomials() co polys.alu_sel_shift_which.set_if_valid_index(i, rows[i].alu_sel_shift_which); polys.alu_u128_tag.set_if_valid_index(i, rows[i].alu_u128_tag); polys.alu_u16_tag.set_if_valid_index(i, rows[i].alu_u16_tag); + polys.alu_u1_tag.set_if_valid_index(i, rows[i].alu_u1_tag); polys.alu_u32_tag.set_if_valid_index(i, rows[i].alu_u32_tag); polys.alu_u64_tag.set_if_valid_index(i, rows[i].alu_u64_tag); polys.alu_u8_tag.set_if_valid_index(i, rows[i].alu_u8_tag); @@ -152,6 +157,7 @@ AvmCircuitBuilder::ProverPolynomials AvmCircuitBuilder::compute_polynomials() co polys.conversion_clk.set_if_valid_index(i, rows[i].conversion_clk); polys.conversion_input.set_if_valid_index(i, rows[i].conversion_input); polys.conversion_num_limbs.set_if_valid_index(i, rows[i].conversion_num_limbs); + polys.conversion_output_bits.set_if_valid_index(i, rows[i].conversion_output_bits); polys.conversion_radix.set_if_valid_index(i, rows[i].conversion_radix); polys.conversion_sel_to_radix_le.set_if_valid_index(i, rows[i].conversion_sel_to_radix_le); polys.keccakf1600_clk.set_if_valid_index(i, rows[i].keccakf1600_clk); @@ -251,6 +257,7 @@ AvmCircuitBuilder::ProverPolynomials AvmCircuitBuilder::compute_polynomials() co rows[i].main_sel_op_get_contract_instance); polys.main_sel_op_internal_call.set_if_valid_index(i, rows[i].main_sel_op_internal_call); polys.main_sel_op_internal_return.set_if_valid_index(i, rows[i].main_sel_op_internal_return); + polys.main_sel_op_is_static_call.set_if_valid_index(i, rows[i].main_sel_op_is_static_call); polys.main_sel_op_jump.set_if_valid_index(i, rows[i].main_sel_op_jump); polys.main_sel_op_jumpi.set_if_valid_index(i, rows[i].main_sel_op_jumpi); polys.main_sel_op_keccak.set_if_valid_index(i, rows[i].main_sel_op_keccak); @@ -276,6 +283,7 @@ AvmCircuitBuilder::ProverPolynomials AvmCircuitBuilder::compute_polynomials() co polys.main_sel_op_shr.set_if_valid_index(i, rows[i].main_sel_op_shr); polys.main_sel_op_sload.set_if_valid_index(i, rows[i].main_sel_op_sload); polys.main_sel_op_sstore.set_if_valid_index(i, rows[i].main_sel_op_sstore); + polys.main_sel_op_static_call.set_if_valid_index(i, rows[i].main_sel_op_static_call); polys.main_sel_op_storage_address.set_if_valid_index(i, rows[i].main_sel_op_storage_address); polys.main_sel_op_sub.set_if_valid_index(i, rows[i].main_sel_op_sub); polys.main_sel_op_timestamp.set_if_valid_index(i, rows[i].main_sel_op_timestamp); @@ -721,7 +729,8 @@ bool AvmCircuitBuilder::check_circuit() const }; auto polys = compute_polynomials(); - const size_t num_rows = polys.get_polynomial_size(); + // We'll only check up to the generated trace which might be << than the circuit subgroup size. + const size_t num_rows = get_num_gates(); // Checks that we will run. using SignalErrorFn = const std::function&; diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/circuit_builder.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/circuit_builder.hpp index 1c3eff83f94..528b0428dc0 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/circuit_builder.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/circuit_builder.hpp @@ -10,31 +10,38 @@ namespace bb { class AvmCircuitBuilder { public: + // Do not use this constant directly, use get_circuit_subgroup_size() instead. + constexpr static size_t CIRCUIT_SUBGROUP_SIZE = 1 << 21; + using Flavor = bb::AvmFlavor; using FF = Flavor::FF; using Row = AvmFullRow; - - // TODO: template using Polynomial = Flavor::Polynomial; using ProverPolynomials = Flavor::ProverPolynomials; - std::vector rows; - - void set_trace(std::vector&& trace) { rows = std::move(trace); } + void set_trace(std::vector&& trace) + { + rows = std::move(trace); + num_rows = rows.size(); + } + void clear_trace() + { + rows.clear(); + rows.shrink_to_fit(); + num_rows = 0; + } ProverPolynomials compute_polynomials() const; bool check_circuit() const; - size_t get_num_gates() const { return rows.size(); } + size_t get_num_gates() const { return num_rows; } - size_t get_circuit_subgroup_size() const - { - const size_t num_rows = get_num_gates(); - const auto num_rows_log2 = static_cast(numeric::get_msb64(num_rows)); - size_t num_rows_pow2 = 1UL << (num_rows_log2 + (1UL << num_rows_log2 == num_rows ? 0 : 1)); - return num_rows_pow2; - } + size_t get_circuit_subgroup_size() const { return CIRCUIT_SUBGROUP_SIZE; } + + private: + size_t num_rows = 0; + std::vector rows; }; } // namespace bb \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/composer.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/composer.cpp index 45ffe4c9eea..0f9a66a557d 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/composer.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/composer.cpp @@ -44,10 +44,8 @@ std::shared_ptr AvmComposer::compute_proving_key(CircuitCons return proving_key; } - // Initialize proving_key const size_t subgroup_size = circuit_constructor.get_circuit_subgroup_size(); proving_key = std::make_shared(subgroup_size, 0); - return proving_key; } diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/composer.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/composer.hpp index a205c890ecf..4fde11c2f33 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/composer.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/composer.hpp @@ -32,8 +32,6 @@ class AvmComposer { // The commitment key is passed to the prover but also used herein to compute the verfication key commitments std::shared_ptr commitment_key; - AggregationObjectPubInputIndices recursive_proof_public_input_indices; - bool contains_recursive_proof = false; bool computed_witness = false; AvmComposer() { crs_factory_ = bb::srs::get_bn254_crs_factory(); } diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.cpp index d5b13f28986..0ff1bdefc96 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.cpp @@ -70,682 +70,686 @@ AvmFlavor::AllConstRefValues::AllConstRefValues( , alu_sel_shift_which(il[62]) , alu_u128_tag(il[63]) , alu_u16_tag(il[64]) - , alu_u32_tag(il[65]) - , alu_u64_tag(il[66]) - , alu_u8_tag(il[67]) - , alu_zero_shift(il[68]) - , binary_acc_ia(il[69]) - , binary_acc_ib(il[70]) - , binary_acc_ic(il[71]) - , binary_clk(il[72]) - , binary_ia_bytes(il[73]) - , binary_ib_bytes(il[74]) - , binary_ic_bytes(il[75]) - , binary_in_tag(il[76]) - , binary_mem_tag_ctr(il[77]) - , binary_mem_tag_ctr_inv(il[78]) - , binary_op_id(il[79]) - , binary_sel_bin(il[80]) - , binary_start(il[81]) - , cmp_a_hi(il[82]) - , cmp_a_lo(il[83]) - , cmp_b_hi(il[84]) - , cmp_b_lo(il[85]) - , cmp_borrow(il[86]) - , cmp_clk(il[87]) - , cmp_cmp_rng_ctr(il[88]) - , cmp_input_a(il[89]) - , cmp_input_b(il[90]) - , cmp_op_eq(il[91]) - , cmp_op_eq_diff_inv(il[92]) - , cmp_op_gt(il[93]) - , cmp_p_a_borrow(il[94]) - , cmp_p_b_borrow(il[95]) - , cmp_p_sub_a_hi(il[96]) - , cmp_p_sub_a_lo(il[97]) - , cmp_p_sub_b_hi(il[98]) - , cmp_p_sub_b_lo(il[99]) - , cmp_range_chk_clk(il[100]) - , cmp_res_hi(il[101]) - , cmp_res_lo(il[102]) - , cmp_result(il[103]) - , cmp_sel_cmp(il[104]) - , cmp_sel_rng_chk(il[105]) - , cmp_shift_sel(il[106]) - , conversion_clk(il[107]) - , conversion_input(il[108]) - , conversion_num_limbs(il[109]) - , conversion_radix(il[110]) - , conversion_sel_to_radix_le(il[111]) - , keccakf1600_clk(il[112]) - , keccakf1600_input(il[113]) - , keccakf1600_output(il[114]) - , keccakf1600_sel_keccakf1600(il[115]) - , main_abs_da_rem_gas(il[116]) - , main_abs_l2_rem_gas(il[117]) - , main_alu_in_tag(il[118]) - , main_base_da_gas_op_cost(il[119]) - , main_base_l2_gas_op_cost(il[120]) - , main_bin_op_id(il[121]) - , main_call_ptr(il[122]) - , main_da_gas_remaining(il[123]) - , main_da_out_of_gas(il[124]) - , main_dyn_da_gas_op_cost(il[125]) - , main_dyn_gas_multiplier(il[126]) - , main_dyn_l2_gas_op_cost(il[127]) - , main_emit_l2_to_l1_msg_write_offset(il[128]) - , main_emit_note_hash_write_offset(il[129]) - , main_emit_nullifier_write_offset(il[130]) - , main_emit_unencrypted_log_write_offset(il[131]) - , main_ia(il[132]) - , main_ib(il[133]) - , main_ic(il[134]) - , main_id(il[135]) - , main_id_zero(il[136]) - , main_ind_addr_a(il[137]) - , main_ind_addr_b(il[138]) - , main_ind_addr_c(il[139]) - , main_ind_addr_d(il[140]) - , main_internal_return_ptr(il[141]) - , main_inv(il[142]) - , main_kernel_in_offset(il[143]) - , main_kernel_out_offset(il[144]) - , main_l1_to_l2_msg_exists_write_offset(il[145]) - , main_l2_gas_remaining(il[146]) - , main_l2_out_of_gas(il[147]) - , main_mem_addr_a(il[148]) - , main_mem_addr_b(il[149]) - , main_mem_addr_c(il[150]) - , main_mem_addr_d(il[151]) - , main_note_hash_exist_write_offset(il[152]) - , main_nullifier_exists_write_offset(il[153]) - , main_nullifier_non_exists_write_offset(il[154]) - , main_op_err(il[155]) - , main_opcode_val(il[156]) - , main_pc(il[157]) - , main_r_in_tag(il[158]) - , main_rwa(il[159]) - , main_rwb(il[160]) - , main_rwc(il[161]) - , main_rwd(il[162]) - , main_sel_alu(il[163]) - , main_sel_bin(il[164]) - , main_sel_calldata(il[165]) - , main_sel_execution_row(il[166]) - , main_sel_kernel_inputs(il[167]) - , main_sel_kernel_out(il[168]) - , main_sel_last(il[169]) - , main_sel_mem_op_a(il[170]) - , main_sel_mem_op_b(il[171]) - , main_sel_mem_op_c(il[172]) - , main_sel_mem_op_d(il[173]) - , main_sel_mov_ia_to_ic(il[174]) - , main_sel_mov_ib_to_ic(il[175]) - , main_sel_op_add(il[176]) - , main_sel_op_address(il[177]) - , main_sel_op_and(il[178]) - , main_sel_op_block_number(il[179]) - , main_sel_op_calldata_copy(il[180]) - , main_sel_op_cast(il[181]) - , main_sel_op_chain_id(il[182]) - , main_sel_op_cmov(il[183]) - , main_sel_op_dagasleft(il[184]) - , main_sel_op_div(il[185]) - , main_sel_op_ecadd(il[186]) - , main_sel_op_emit_l2_to_l1_msg(il[187]) - , main_sel_op_emit_note_hash(il[188]) - , main_sel_op_emit_nullifier(il[189]) - , main_sel_op_emit_unencrypted_log(il[190]) - , main_sel_op_eq(il[191]) - , main_sel_op_external_call(il[192]) - , main_sel_op_external_return(il[193]) - , main_sel_op_external_revert(il[194]) - , main_sel_op_fdiv(il[195]) - , main_sel_op_fee_per_da_gas(il[196]) - , main_sel_op_fee_per_l2_gas(il[197]) - , main_sel_op_function_selector(il[198]) - , main_sel_op_get_contract_instance(il[199]) - , main_sel_op_internal_call(il[200]) - , main_sel_op_internal_return(il[201]) - , main_sel_op_jump(il[202]) - , main_sel_op_jumpi(il[203]) - , main_sel_op_keccak(il[204]) - , main_sel_op_l1_to_l2_msg_exists(il[205]) - , main_sel_op_l2gasleft(il[206]) - , main_sel_op_lt(il[207]) - , main_sel_op_lte(il[208]) - , main_sel_op_mov(il[209]) - , main_sel_op_msm(il[210]) - , main_sel_op_mul(il[211]) - , main_sel_op_not(il[212]) - , main_sel_op_note_hash_exists(il[213]) - , main_sel_op_nullifier_exists(il[214]) - , main_sel_op_or(il[215]) - , main_sel_op_pedersen(il[216]) - , main_sel_op_pedersen_commit(il[217]) - , main_sel_op_poseidon2(il[218]) - , main_sel_op_radix_le(il[219]) - , main_sel_op_sender(il[220]) - , main_sel_op_set(il[221]) - , main_sel_op_sha256(il[222]) - , main_sel_op_shl(il[223]) - , main_sel_op_shr(il[224]) - , main_sel_op_sload(il[225]) - , main_sel_op_sstore(il[226]) - , main_sel_op_storage_address(il[227]) - , main_sel_op_sub(il[228]) - , main_sel_op_timestamp(il[229]) - , main_sel_op_transaction_fee(il[230]) - , main_sel_op_version(il[231]) - , main_sel_op_xor(il[232]) - , main_sel_q_kernel_lookup(il[233]) - , main_sel_q_kernel_output_lookup(il[234]) - , main_sel_resolve_ind_addr_a(il[235]) - , main_sel_resolve_ind_addr_b(il[236]) - , main_sel_resolve_ind_addr_c(il[237]) - , main_sel_resolve_ind_addr_d(il[238]) - , main_sel_returndata(il[239]) - , main_sel_rng_16(il[240]) - , main_sel_rng_8(il[241]) - , main_sel_slice_gadget(il[242]) - , main_side_effect_counter(il[243]) - , main_sload_write_offset(il[244]) - , main_space_id(il[245]) - , main_sstore_write_offset(il[246]) - , main_tag_err(il[247]) - , main_w_in_tag(il[248]) - , mem_addr(il[249]) - , mem_clk(il[250]) - , mem_diff(il[251]) - , mem_glob_addr(il[252]) - , mem_last(il[253]) - , mem_lastAccess(il[254]) - , mem_one_min_inv(il[255]) - , mem_r_in_tag(il[256]) - , mem_rw(il[257]) - , mem_sel_mem(il[258]) - , mem_sel_mov_ia_to_ic(il[259]) - , mem_sel_mov_ib_to_ic(il[260]) - , mem_sel_op_a(il[261]) - , mem_sel_op_b(il[262]) - , mem_sel_op_c(il[263]) - , mem_sel_op_cmov(il[264]) - , mem_sel_op_d(il[265]) - , mem_sel_op_poseidon_read_a(il[266]) - , mem_sel_op_poseidon_read_b(il[267]) - , mem_sel_op_poseidon_read_c(il[268]) - , mem_sel_op_poseidon_read_d(il[269]) - , mem_sel_op_poseidon_write_a(il[270]) - , mem_sel_op_poseidon_write_b(il[271]) - , mem_sel_op_poseidon_write_c(il[272]) - , mem_sel_op_poseidon_write_d(il[273]) - , mem_sel_op_slice(il[274]) - , mem_sel_resolve_ind_addr_a(il[275]) - , mem_sel_resolve_ind_addr_b(il[276]) - , mem_sel_resolve_ind_addr_c(il[277]) - , mem_sel_resolve_ind_addr_d(il[278]) - , mem_sel_rng_chk(il[279]) - , mem_skip_check_tag(il[280]) - , mem_space_id(il[281]) - , mem_tag(il[282]) - , mem_tag_err(il[283]) - , mem_tsp(il[284]) - , mem_val(il[285]) - , mem_w_in_tag(il[286]) - , pedersen_clk(il[287]) - , pedersen_input(il[288]) - , pedersen_output(il[289]) - , pedersen_sel_pedersen(il[290]) - , poseidon2_B_10_0(il[291]) - , poseidon2_B_10_1(il[292]) - , poseidon2_B_10_2(il[293]) - , poseidon2_B_10_3(il[294]) - , poseidon2_B_11_0(il[295]) - , poseidon2_B_11_1(il[296]) - , poseidon2_B_11_2(il[297]) - , poseidon2_B_11_3(il[298]) - , poseidon2_B_12_0(il[299]) - , poseidon2_B_12_1(il[300]) - , poseidon2_B_12_2(il[301]) - , poseidon2_B_12_3(il[302]) - , poseidon2_B_13_0(il[303]) - , poseidon2_B_13_1(il[304]) - , poseidon2_B_13_2(il[305]) - , poseidon2_B_13_3(il[306]) - , poseidon2_B_14_0(il[307]) - , poseidon2_B_14_1(il[308]) - , poseidon2_B_14_2(il[309]) - , poseidon2_B_14_3(il[310]) - , poseidon2_B_15_0(il[311]) - , poseidon2_B_15_1(il[312]) - , poseidon2_B_15_2(il[313]) - , poseidon2_B_15_3(il[314]) - , poseidon2_B_16_0(il[315]) - , poseidon2_B_16_1(il[316]) - , poseidon2_B_16_2(il[317]) - , poseidon2_B_16_3(il[318]) - , poseidon2_B_17_0(il[319]) - , poseidon2_B_17_1(il[320]) - , poseidon2_B_17_2(il[321]) - , poseidon2_B_17_3(il[322]) - , poseidon2_B_18_0(il[323]) - , poseidon2_B_18_1(il[324]) - , poseidon2_B_18_2(il[325]) - , poseidon2_B_18_3(il[326]) - , poseidon2_B_19_0(il[327]) - , poseidon2_B_19_1(il[328]) - , poseidon2_B_19_2(il[329]) - , poseidon2_B_19_3(il[330]) - , poseidon2_B_20_0(il[331]) - , poseidon2_B_20_1(il[332]) - , poseidon2_B_20_2(il[333]) - , poseidon2_B_20_3(il[334]) - , poseidon2_B_21_0(il[335]) - , poseidon2_B_21_1(il[336]) - , poseidon2_B_21_2(il[337]) - , poseidon2_B_21_3(il[338]) - , poseidon2_B_22_0(il[339]) - , poseidon2_B_22_1(il[340]) - , poseidon2_B_22_2(il[341]) - , poseidon2_B_22_3(il[342]) - , poseidon2_B_23_0(il[343]) - , poseidon2_B_23_1(il[344]) - , poseidon2_B_23_2(il[345]) - , poseidon2_B_23_3(il[346]) - , poseidon2_B_24_0(il[347]) - , poseidon2_B_24_1(il[348]) - , poseidon2_B_24_2(il[349]) - , poseidon2_B_24_3(il[350]) - , poseidon2_B_25_0(il[351]) - , poseidon2_B_25_1(il[352]) - , poseidon2_B_25_2(il[353]) - , poseidon2_B_25_3(il[354]) - , poseidon2_B_26_0(il[355]) - , poseidon2_B_26_1(il[356]) - , poseidon2_B_26_2(il[357]) - , poseidon2_B_26_3(il[358]) - , poseidon2_B_27_0(il[359]) - , poseidon2_B_27_1(il[360]) - , poseidon2_B_27_2(il[361]) - , poseidon2_B_27_3(il[362]) - , poseidon2_B_28_0(il[363]) - , poseidon2_B_28_1(il[364]) - , poseidon2_B_28_2(il[365]) - , poseidon2_B_28_3(il[366]) - , poseidon2_B_29_0(il[367]) - , poseidon2_B_29_1(il[368]) - , poseidon2_B_29_2(il[369]) - , poseidon2_B_29_3(il[370]) - , poseidon2_B_30_0(il[371]) - , poseidon2_B_30_1(il[372]) - , poseidon2_B_30_2(il[373]) - , poseidon2_B_30_3(il[374]) - , poseidon2_B_31_0(il[375]) - , poseidon2_B_31_1(il[376]) - , poseidon2_B_31_2(il[377]) - , poseidon2_B_31_3(il[378]) - , poseidon2_B_32_0(il[379]) - , poseidon2_B_32_1(il[380]) - , poseidon2_B_32_2(il[381]) - , poseidon2_B_32_3(il[382]) - , poseidon2_B_33_0(il[383]) - , poseidon2_B_33_1(il[384]) - , poseidon2_B_33_2(il[385]) - , poseidon2_B_33_3(il[386]) - , poseidon2_B_34_0(il[387]) - , poseidon2_B_34_1(il[388]) - , poseidon2_B_34_2(il[389]) - , poseidon2_B_34_3(il[390]) - , poseidon2_B_35_0(il[391]) - , poseidon2_B_35_1(il[392]) - , poseidon2_B_35_2(il[393]) - , poseidon2_B_35_3(il[394]) - , poseidon2_B_36_0(il[395]) - , poseidon2_B_36_1(il[396]) - , poseidon2_B_36_2(il[397]) - , poseidon2_B_36_3(il[398]) - , poseidon2_B_37_0(il[399]) - , poseidon2_B_37_1(il[400]) - , poseidon2_B_37_2(il[401]) - , poseidon2_B_37_3(il[402]) - , poseidon2_B_38_0(il[403]) - , poseidon2_B_38_1(il[404]) - , poseidon2_B_38_2(il[405]) - , poseidon2_B_38_3(il[406]) - , poseidon2_B_39_0(il[407]) - , poseidon2_B_39_1(il[408]) - , poseidon2_B_39_2(il[409]) - , poseidon2_B_39_3(il[410]) - , poseidon2_B_40_0(il[411]) - , poseidon2_B_40_1(il[412]) - , poseidon2_B_40_2(il[413]) - , poseidon2_B_40_3(il[414]) - , poseidon2_B_41_0(il[415]) - , poseidon2_B_41_1(il[416]) - , poseidon2_B_41_2(il[417]) - , poseidon2_B_41_3(il[418]) - , poseidon2_B_42_0(il[419]) - , poseidon2_B_42_1(il[420]) - , poseidon2_B_42_2(il[421]) - , poseidon2_B_42_3(il[422]) - , poseidon2_B_43_0(il[423]) - , poseidon2_B_43_1(il[424]) - , poseidon2_B_43_2(il[425]) - , poseidon2_B_43_3(il[426]) - , poseidon2_B_44_0(il[427]) - , poseidon2_B_44_1(il[428]) - , poseidon2_B_44_2(il[429]) - , poseidon2_B_44_3(il[430]) - , poseidon2_B_45_0(il[431]) - , poseidon2_B_45_1(il[432]) - , poseidon2_B_45_2(il[433]) - , poseidon2_B_45_3(il[434]) - , poseidon2_B_46_0(il[435]) - , poseidon2_B_46_1(il[436]) - , poseidon2_B_46_2(il[437]) - , poseidon2_B_46_3(il[438]) - , poseidon2_B_47_0(il[439]) - , poseidon2_B_47_1(il[440]) - , poseidon2_B_47_2(il[441]) - , poseidon2_B_47_3(il[442]) - , poseidon2_B_48_0(il[443]) - , poseidon2_B_48_1(il[444]) - , poseidon2_B_48_2(il[445]) - , poseidon2_B_48_3(il[446]) - , poseidon2_B_49_0(il[447]) - , poseidon2_B_49_1(il[448]) - , poseidon2_B_49_2(il[449]) - , poseidon2_B_49_3(il[450]) - , poseidon2_B_4_0(il[451]) - , poseidon2_B_4_1(il[452]) - , poseidon2_B_4_2(il[453]) - , poseidon2_B_4_3(il[454]) - , poseidon2_B_50_0(il[455]) - , poseidon2_B_50_1(il[456]) - , poseidon2_B_50_2(il[457]) - , poseidon2_B_50_3(il[458]) - , poseidon2_B_51_0(il[459]) - , poseidon2_B_51_1(il[460]) - , poseidon2_B_51_2(il[461]) - , poseidon2_B_51_3(il[462]) - , poseidon2_B_52_0(il[463]) - , poseidon2_B_52_1(il[464]) - , poseidon2_B_52_2(il[465]) - , poseidon2_B_52_3(il[466]) - , poseidon2_B_53_0(il[467]) - , poseidon2_B_53_1(il[468]) - , poseidon2_B_53_2(il[469]) - , poseidon2_B_53_3(il[470]) - , poseidon2_B_54_0(il[471]) - , poseidon2_B_54_1(il[472]) - , poseidon2_B_54_2(il[473]) - , poseidon2_B_54_3(il[474]) - , poseidon2_B_55_0(il[475]) - , poseidon2_B_55_1(il[476]) - , poseidon2_B_55_2(il[477]) - , poseidon2_B_55_3(il[478]) - , poseidon2_B_56_0(il[479]) - , poseidon2_B_56_1(il[480]) - , poseidon2_B_56_2(il[481]) - , poseidon2_B_56_3(il[482]) - , poseidon2_B_57_0(il[483]) - , poseidon2_B_57_1(il[484]) - , poseidon2_B_57_2(il[485]) - , poseidon2_B_57_3(il[486]) - , poseidon2_B_58_0(il[487]) - , poseidon2_B_58_1(il[488]) - , poseidon2_B_58_2(il[489]) - , poseidon2_B_58_3(il[490]) - , poseidon2_B_59_0(il[491]) - , poseidon2_B_59_1(il[492]) - , poseidon2_B_59_2(il[493]) - , poseidon2_B_59_3(il[494]) - , poseidon2_B_5_0(il[495]) - , poseidon2_B_5_1(il[496]) - , poseidon2_B_5_2(il[497]) - , poseidon2_B_5_3(il[498]) - , poseidon2_B_6_0(il[499]) - , poseidon2_B_6_1(il[500]) - , poseidon2_B_6_2(il[501]) - , poseidon2_B_6_3(il[502]) - , poseidon2_B_7_0(il[503]) - , poseidon2_B_7_1(il[504]) - , poseidon2_B_7_2(il[505]) - , poseidon2_B_7_3(il[506]) - , poseidon2_B_8_0(il[507]) - , poseidon2_B_8_1(il[508]) - , poseidon2_B_8_2(il[509]) - , poseidon2_B_8_3(il[510]) - , poseidon2_B_9_0(il[511]) - , poseidon2_B_9_1(il[512]) - , poseidon2_B_9_2(il[513]) - , poseidon2_B_9_3(il[514]) - , poseidon2_EXT_LAYER_4(il[515]) - , poseidon2_EXT_LAYER_5(il[516]) - , poseidon2_EXT_LAYER_6(il[517]) - , poseidon2_EXT_LAYER_7(il[518]) - , poseidon2_T_0_4(il[519]) - , poseidon2_T_0_5(il[520]) - , poseidon2_T_0_6(il[521]) - , poseidon2_T_0_7(il[522]) - , poseidon2_T_1_4(il[523]) - , poseidon2_T_1_5(il[524]) - , poseidon2_T_1_6(il[525]) - , poseidon2_T_1_7(il[526]) - , poseidon2_T_2_4(il[527]) - , poseidon2_T_2_5(il[528]) - , poseidon2_T_2_6(il[529]) - , poseidon2_T_2_7(il[530]) - , poseidon2_T_3_4(il[531]) - , poseidon2_T_3_5(il[532]) - , poseidon2_T_3_6(il[533]) - , poseidon2_T_3_7(il[534]) - , poseidon2_T_60_4(il[535]) - , poseidon2_T_60_5(il[536]) - , poseidon2_T_60_6(il[537]) - , poseidon2_T_60_7(il[538]) - , poseidon2_T_61_4(il[539]) - , poseidon2_T_61_5(il[540]) - , poseidon2_T_61_6(il[541]) - , poseidon2_T_61_7(il[542]) - , poseidon2_T_62_4(il[543]) - , poseidon2_T_62_5(il[544]) - , poseidon2_T_62_6(il[545]) - , poseidon2_T_62_7(il[546]) - , poseidon2_T_63_4(il[547]) - , poseidon2_T_63_5(il[548]) - , poseidon2_T_63_6(il[549]) - , poseidon2_T_63_7(il[550]) - , poseidon2_a_0(il[551]) - , poseidon2_a_1(il[552]) - , poseidon2_a_2(il[553]) - , poseidon2_a_3(il[554]) - , poseidon2_b_0(il[555]) - , poseidon2_b_1(il[556]) - , poseidon2_b_2(il[557]) - , poseidon2_b_3(il[558]) - , poseidon2_clk(il[559]) - , poseidon2_input_addr(il[560]) - , poseidon2_mem_addr_read_a(il[561]) - , poseidon2_mem_addr_read_b(il[562]) - , poseidon2_mem_addr_read_c(il[563]) - , poseidon2_mem_addr_read_d(il[564]) - , poseidon2_mem_addr_write_a(il[565]) - , poseidon2_mem_addr_write_b(il[566]) - , poseidon2_mem_addr_write_c(il[567]) - , poseidon2_mem_addr_write_d(il[568]) - , poseidon2_output_addr(il[569]) - , poseidon2_sel_poseidon_perm(il[570]) - , range_check_alu_rng_chk(il[571]) - , range_check_clk(il[572]) - , range_check_cmp_hi_bits_rng_chk(il[573]) - , range_check_cmp_lo_bits_rng_chk(il[574]) - , range_check_dyn_diff(il[575]) - , range_check_dyn_rng_chk_bits(il[576]) - , range_check_dyn_rng_chk_pow_2(il[577]) - , range_check_gas_da_rng_chk(il[578]) - , range_check_gas_l2_rng_chk(il[579]) - , range_check_is_lte_u112(il[580]) - , range_check_is_lte_u128(il[581]) - , range_check_is_lte_u16(il[582]) - , range_check_is_lte_u32(il[583]) - , range_check_is_lte_u48(il[584]) - , range_check_is_lte_u64(il[585]) - , range_check_is_lte_u80(il[586]) - , range_check_is_lte_u96(il[587]) - , range_check_mem_rng_chk(il[588]) - , range_check_rng_chk_bits(il[589]) - , range_check_sel_lookup_0(il[590]) - , range_check_sel_lookup_1(il[591]) - , range_check_sel_lookup_2(il[592]) - , range_check_sel_lookup_3(il[593]) - , range_check_sel_lookup_4(il[594]) - , range_check_sel_lookup_5(il[595]) - , range_check_sel_lookup_6(il[596]) - , range_check_sel_rng_chk(il[597]) - , range_check_u16_r0(il[598]) - , range_check_u16_r1(il[599]) - , range_check_u16_r2(il[600]) - , range_check_u16_r3(il[601]) - , range_check_u16_r4(il[602]) - , range_check_u16_r5(il[603]) - , range_check_u16_r6(il[604]) - , range_check_u16_r7(il[605]) - , range_check_value(il[606]) - , sha256_clk(il[607]) - , sha256_input(il[608]) - , sha256_output(il[609]) - , sha256_sel_sha256_compression(il[610]) - , sha256_state(il[611]) - , slice_addr(il[612]) - , slice_clk(il[613]) - , slice_cnt(il[614]) - , slice_col_offset(il[615]) - , slice_one_min_inv(il[616]) - , slice_sel_cd_cpy(il[617]) - , slice_sel_mem_active(il[618]) - , slice_sel_return(il[619]) - , slice_sel_start(il[620]) - , slice_space_id(il[621]) - , slice_val(il[622]) - , lookup_rng_chk_pow_2_counts(il[623]) - , lookup_rng_chk_diff_counts(il[624]) - , lookup_rng_chk_0_counts(il[625]) - , lookup_rng_chk_1_counts(il[626]) - , lookup_rng_chk_2_counts(il[627]) - , lookup_rng_chk_3_counts(il[628]) - , lookup_rng_chk_4_counts(il[629]) - , lookup_rng_chk_5_counts(il[630]) - , lookup_rng_chk_6_counts(il[631]) - , lookup_rng_chk_7_counts(il[632]) - , lookup_pow_2_0_counts(il[633]) - , lookup_pow_2_1_counts(il[634]) - , lookup_byte_lengths_counts(il[635]) - , lookup_byte_operations_counts(il[636]) - , lookup_opcode_gas_counts(il[637]) - , kernel_output_lookup_counts(il[638]) - , lookup_into_kernel_counts(il[639]) - , lookup_cd_value_counts(il[640]) - , lookup_ret_value_counts(il[641]) - , incl_main_tag_err_counts(il[642]) - , incl_mem_tag_err_counts(il[643]) - , perm_rng_mem_inv(il[644]) - , perm_rng_cmp_lo_inv(il[645]) - , perm_rng_cmp_hi_inv(il[646]) - , perm_rng_alu_inv(il[647]) - , perm_cmp_alu_inv(il[648]) - , perm_rng_gas_l2_inv(il[649]) - , perm_rng_gas_da_inv(il[650]) - , perm_pos_mem_read_a_inv(il[651]) - , perm_pos_mem_read_b_inv(il[652]) - , perm_pos_mem_read_c_inv(il[653]) - , perm_pos_mem_read_d_inv(il[654]) - , perm_pos_mem_write_a_inv(il[655]) - , perm_pos_mem_write_b_inv(il[656]) - , perm_pos_mem_write_c_inv(il[657]) - , perm_pos_mem_write_d_inv(il[658]) - , perm_slice_mem_inv(il[659]) - , perm_main_alu_inv(il[660]) - , perm_main_bin_inv(il[661]) - , perm_main_conv_inv(il[662]) - , perm_main_pos2_perm_inv(il[663]) - , perm_main_pedersen_inv(il[664]) - , perm_main_slice_inv(il[665]) - , perm_main_mem_a_inv(il[666]) - , perm_main_mem_b_inv(il[667]) - , perm_main_mem_c_inv(il[668]) - , perm_main_mem_d_inv(il[669]) - , perm_main_mem_ind_addr_a_inv(il[670]) - , perm_main_mem_ind_addr_b_inv(il[671]) - , perm_main_mem_ind_addr_c_inv(il[672]) - , perm_main_mem_ind_addr_d_inv(il[673]) - , lookup_rng_chk_pow_2_inv(il[674]) - , lookup_rng_chk_diff_inv(il[675]) - , lookup_rng_chk_0_inv(il[676]) - , lookup_rng_chk_1_inv(il[677]) - , lookup_rng_chk_2_inv(il[678]) - , lookup_rng_chk_3_inv(il[679]) - , lookup_rng_chk_4_inv(il[680]) - , lookup_rng_chk_5_inv(il[681]) - , lookup_rng_chk_6_inv(il[682]) - , lookup_rng_chk_7_inv(il[683]) - , lookup_pow_2_0_inv(il[684]) - , lookup_pow_2_1_inv(il[685]) - , lookup_byte_lengths_inv(il[686]) - , lookup_byte_operations_inv(il[687]) - , lookup_opcode_gas_inv(il[688]) - , kernel_output_lookup_inv(il[689]) - , lookup_into_kernel_inv(il[690]) - , lookup_cd_value_inv(il[691]) - , lookup_ret_value_inv(il[692]) - , incl_main_tag_err_inv(il[693]) - , incl_mem_tag_err_inv(il[694]) - , binary_acc_ia_shift(il[695]) - , binary_acc_ib_shift(il[696]) - , binary_acc_ic_shift(il[697]) - , binary_mem_tag_ctr_shift(il[698]) - , binary_op_id_shift(il[699]) - , cmp_a_hi_shift(il[700]) - , cmp_a_lo_shift(il[701]) - , cmp_b_hi_shift(il[702]) - , cmp_b_lo_shift(il[703]) - , cmp_cmp_rng_ctr_shift(il[704]) - , cmp_op_gt_shift(il[705]) - , cmp_p_sub_a_hi_shift(il[706]) - , cmp_p_sub_a_lo_shift(il[707]) - , cmp_p_sub_b_hi_shift(il[708]) - , cmp_p_sub_b_lo_shift(il[709]) - , cmp_sel_rng_chk_shift(il[710]) - , main_da_gas_remaining_shift(il[711]) - , main_emit_l2_to_l1_msg_write_offset_shift(il[712]) - , main_emit_note_hash_write_offset_shift(il[713]) - , main_emit_nullifier_write_offset_shift(il[714]) - , main_emit_unencrypted_log_write_offset_shift(il[715]) - , main_internal_return_ptr_shift(il[716]) - , main_l1_to_l2_msg_exists_write_offset_shift(il[717]) - , main_l2_gas_remaining_shift(il[718]) - , main_note_hash_exist_write_offset_shift(il[719]) - , main_nullifier_exists_write_offset_shift(il[720]) - , main_nullifier_non_exists_write_offset_shift(il[721]) - , main_pc_shift(il[722]) - , main_sel_execution_row_shift(il[723]) - , main_sload_write_offset_shift(il[724]) - , main_sstore_write_offset_shift(il[725]) - , mem_glob_addr_shift(il[726]) - , mem_rw_shift(il[727]) - , mem_sel_mem_shift(il[728]) - , mem_tag_shift(il[729]) - , mem_tsp_shift(il[730]) - , mem_val_shift(il[731]) - , slice_addr_shift(il[732]) - , slice_clk_shift(il[733]) - , slice_cnt_shift(il[734]) - , slice_col_offset_shift(il[735]) - , slice_sel_cd_cpy_shift(il[736]) - , slice_sel_mem_active_shift(il[737]) - , slice_sel_return_shift(il[738]) - , slice_sel_start_shift(il[739]) - , slice_space_id_shift(il[740]) + , alu_u1_tag(il[65]) + , alu_u32_tag(il[66]) + , alu_u64_tag(il[67]) + , alu_u8_tag(il[68]) + , alu_zero_shift(il[69]) + , binary_acc_ia(il[70]) + , binary_acc_ib(il[71]) + , binary_acc_ic(il[72]) + , binary_clk(il[73]) + , binary_ia_bytes(il[74]) + , binary_ib_bytes(il[75]) + , binary_ic_bytes(il[76]) + , binary_in_tag(il[77]) + , binary_mem_tag_ctr(il[78]) + , binary_mem_tag_ctr_inv(il[79]) + , binary_op_id(il[80]) + , binary_sel_bin(il[81]) + , binary_start(il[82]) + , cmp_a_hi(il[83]) + , cmp_a_lo(il[84]) + , cmp_b_hi(il[85]) + , cmp_b_lo(il[86]) + , cmp_borrow(il[87]) + , cmp_clk(il[88]) + , cmp_cmp_rng_ctr(il[89]) + , cmp_input_a(il[90]) + , cmp_input_b(il[91]) + , cmp_op_eq(il[92]) + , cmp_op_eq_diff_inv(il[93]) + , cmp_op_gt(il[94]) + , cmp_p_a_borrow(il[95]) + , cmp_p_b_borrow(il[96]) + , cmp_p_sub_a_hi(il[97]) + , cmp_p_sub_a_lo(il[98]) + , cmp_p_sub_b_hi(il[99]) + , cmp_p_sub_b_lo(il[100]) + , cmp_range_chk_clk(il[101]) + , cmp_res_hi(il[102]) + , cmp_res_lo(il[103]) + , cmp_result(il[104]) + , cmp_sel_cmp(il[105]) + , cmp_sel_rng_chk(il[106]) + , cmp_shift_sel(il[107]) + , conversion_clk(il[108]) + , conversion_input(il[109]) + , conversion_num_limbs(il[110]) + , conversion_output_bits(il[111]) + , conversion_radix(il[112]) + , conversion_sel_to_radix_le(il[113]) + , keccakf1600_clk(il[114]) + , keccakf1600_input(il[115]) + , keccakf1600_output(il[116]) + , keccakf1600_sel_keccakf1600(il[117]) + , main_abs_da_rem_gas(il[118]) + , main_abs_l2_rem_gas(il[119]) + , main_alu_in_tag(il[120]) + , main_base_da_gas_op_cost(il[121]) + , main_base_l2_gas_op_cost(il[122]) + , main_bin_op_id(il[123]) + , main_call_ptr(il[124]) + , main_da_gas_remaining(il[125]) + , main_da_out_of_gas(il[126]) + , main_dyn_da_gas_op_cost(il[127]) + , main_dyn_gas_multiplier(il[128]) + , main_dyn_l2_gas_op_cost(il[129]) + , main_emit_l2_to_l1_msg_write_offset(il[130]) + , main_emit_note_hash_write_offset(il[131]) + , main_emit_nullifier_write_offset(il[132]) + , main_emit_unencrypted_log_write_offset(il[133]) + , main_ia(il[134]) + , main_ib(il[135]) + , main_ic(il[136]) + , main_id(il[137]) + , main_id_zero(il[138]) + , main_ind_addr_a(il[139]) + , main_ind_addr_b(il[140]) + , main_ind_addr_c(il[141]) + , main_ind_addr_d(il[142]) + , main_internal_return_ptr(il[143]) + , main_inv(il[144]) + , main_kernel_in_offset(il[145]) + , main_kernel_out_offset(il[146]) + , main_l1_to_l2_msg_exists_write_offset(il[147]) + , main_l2_gas_remaining(il[148]) + , main_l2_out_of_gas(il[149]) + , main_mem_addr_a(il[150]) + , main_mem_addr_b(il[151]) + , main_mem_addr_c(il[152]) + , main_mem_addr_d(il[153]) + , main_note_hash_exist_write_offset(il[154]) + , main_nullifier_exists_write_offset(il[155]) + , main_nullifier_non_exists_write_offset(il[156]) + , main_op_err(il[157]) + , main_opcode_val(il[158]) + , main_pc(il[159]) + , main_r_in_tag(il[160]) + , main_rwa(il[161]) + , main_rwb(il[162]) + , main_rwc(il[163]) + , main_rwd(il[164]) + , main_sel_alu(il[165]) + , main_sel_bin(il[166]) + , main_sel_calldata(il[167]) + , main_sel_execution_row(il[168]) + , main_sel_kernel_inputs(il[169]) + , main_sel_kernel_out(il[170]) + , main_sel_last(il[171]) + , main_sel_mem_op_a(il[172]) + , main_sel_mem_op_b(il[173]) + , main_sel_mem_op_c(il[174]) + , main_sel_mem_op_d(il[175]) + , main_sel_mov_ia_to_ic(il[176]) + , main_sel_mov_ib_to_ic(il[177]) + , main_sel_op_add(il[178]) + , main_sel_op_address(il[179]) + , main_sel_op_and(il[180]) + , main_sel_op_block_number(il[181]) + , main_sel_op_calldata_copy(il[182]) + , main_sel_op_cast(il[183]) + , main_sel_op_chain_id(il[184]) + , main_sel_op_cmov(il[185]) + , main_sel_op_dagasleft(il[186]) + , main_sel_op_div(il[187]) + , main_sel_op_ecadd(il[188]) + , main_sel_op_emit_l2_to_l1_msg(il[189]) + , main_sel_op_emit_note_hash(il[190]) + , main_sel_op_emit_nullifier(il[191]) + , main_sel_op_emit_unencrypted_log(il[192]) + , main_sel_op_eq(il[193]) + , main_sel_op_external_call(il[194]) + , main_sel_op_external_return(il[195]) + , main_sel_op_external_revert(il[196]) + , main_sel_op_fdiv(il[197]) + , main_sel_op_fee_per_da_gas(il[198]) + , main_sel_op_fee_per_l2_gas(il[199]) + , main_sel_op_function_selector(il[200]) + , main_sel_op_get_contract_instance(il[201]) + , main_sel_op_internal_call(il[202]) + , main_sel_op_internal_return(il[203]) + , main_sel_op_is_static_call(il[204]) + , main_sel_op_jump(il[205]) + , main_sel_op_jumpi(il[206]) + , main_sel_op_keccak(il[207]) + , main_sel_op_l1_to_l2_msg_exists(il[208]) + , main_sel_op_l2gasleft(il[209]) + , main_sel_op_lt(il[210]) + , main_sel_op_lte(il[211]) + , main_sel_op_mov(il[212]) + , main_sel_op_msm(il[213]) + , main_sel_op_mul(il[214]) + , main_sel_op_not(il[215]) + , main_sel_op_note_hash_exists(il[216]) + , main_sel_op_nullifier_exists(il[217]) + , main_sel_op_or(il[218]) + , main_sel_op_pedersen(il[219]) + , main_sel_op_pedersen_commit(il[220]) + , main_sel_op_poseidon2(il[221]) + , main_sel_op_radix_le(il[222]) + , main_sel_op_sender(il[223]) + , main_sel_op_set(il[224]) + , main_sel_op_sha256(il[225]) + , main_sel_op_shl(il[226]) + , main_sel_op_shr(il[227]) + , main_sel_op_sload(il[228]) + , main_sel_op_sstore(il[229]) + , main_sel_op_static_call(il[230]) + , main_sel_op_storage_address(il[231]) + , main_sel_op_sub(il[232]) + , main_sel_op_timestamp(il[233]) + , main_sel_op_transaction_fee(il[234]) + , main_sel_op_version(il[235]) + , main_sel_op_xor(il[236]) + , main_sel_q_kernel_lookup(il[237]) + , main_sel_q_kernel_output_lookup(il[238]) + , main_sel_resolve_ind_addr_a(il[239]) + , main_sel_resolve_ind_addr_b(il[240]) + , main_sel_resolve_ind_addr_c(il[241]) + , main_sel_resolve_ind_addr_d(il[242]) + , main_sel_returndata(il[243]) + , main_sel_rng_16(il[244]) + , main_sel_rng_8(il[245]) + , main_sel_slice_gadget(il[246]) + , main_side_effect_counter(il[247]) + , main_sload_write_offset(il[248]) + , main_space_id(il[249]) + , main_sstore_write_offset(il[250]) + , main_tag_err(il[251]) + , main_w_in_tag(il[252]) + , mem_addr(il[253]) + , mem_clk(il[254]) + , mem_diff(il[255]) + , mem_glob_addr(il[256]) + , mem_last(il[257]) + , mem_lastAccess(il[258]) + , mem_one_min_inv(il[259]) + , mem_r_in_tag(il[260]) + , mem_rw(il[261]) + , mem_sel_mem(il[262]) + , mem_sel_mov_ia_to_ic(il[263]) + , mem_sel_mov_ib_to_ic(il[264]) + , mem_sel_op_a(il[265]) + , mem_sel_op_b(il[266]) + , mem_sel_op_c(il[267]) + , mem_sel_op_cmov(il[268]) + , mem_sel_op_d(il[269]) + , mem_sel_op_poseidon_read_a(il[270]) + , mem_sel_op_poseidon_read_b(il[271]) + , mem_sel_op_poseidon_read_c(il[272]) + , mem_sel_op_poseidon_read_d(il[273]) + , mem_sel_op_poseidon_write_a(il[274]) + , mem_sel_op_poseidon_write_b(il[275]) + , mem_sel_op_poseidon_write_c(il[276]) + , mem_sel_op_poseidon_write_d(il[277]) + , mem_sel_op_slice(il[278]) + , mem_sel_resolve_ind_addr_a(il[279]) + , mem_sel_resolve_ind_addr_b(il[280]) + , mem_sel_resolve_ind_addr_c(il[281]) + , mem_sel_resolve_ind_addr_d(il[282]) + , mem_sel_rng_chk(il[283]) + , mem_skip_check_tag(il[284]) + , mem_space_id(il[285]) + , mem_tag(il[286]) + , mem_tag_err(il[287]) + , mem_tsp(il[288]) + , mem_val(il[289]) + , mem_w_in_tag(il[290]) + , pedersen_clk(il[291]) + , pedersen_input(il[292]) + , pedersen_output(il[293]) + , pedersen_sel_pedersen(il[294]) + , poseidon2_B_10_0(il[295]) + , poseidon2_B_10_1(il[296]) + , poseidon2_B_10_2(il[297]) + , poseidon2_B_10_3(il[298]) + , poseidon2_B_11_0(il[299]) + , poseidon2_B_11_1(il[300]) + , poseidon2_B_11_2(il[301]) + , poseidon2_B_11_3(il[302]) + , poseidon2_B_12_0(il[303]) + , poseidon2_B_12_1(il[304]) + , poseidon2_B_12_2(il[305]) + , poseidon2_B_12_3(il[306]) + , poseidon2_B_13_0(il[307]) + , poseidon2_B_13_1(il[308]) + , poseidon2_B_13_2(il[309]) + , poseidon2_B_13_3(il[310]) + , poseidon2_B_14_0(il[311]) + , poseidon2_B_14_1(il[312]) + , poseidon2_B_14_2(il[313]) + , poseidon2_B_14_3(il[314]) + , poseidon2_B_15_0(il[315]) + , poseidon2_B_15_1(il[316]) + , poseidon2_B_15_2(il[317]) + , poseidon2_B_15_3(il[318]) + , poseidon2_B_16_0(il[319]) + , poseidon2_B_16_1(il[320]) + , poseidon2_B_16_2(il[321]) + , poseidon2_B_16_3(il[322]) + , poseidon2_B_17_0(il[323]) + , poseidon2_B_17_1(il[324]) + , poseidon2_B_17_2(il[325]) + , poseidon2_B_17_3(il[326]) + , poseidon2_B_18_0(il[327]) + , poseidon2_B_18_1(il[328]) + , poseidon2_B_18_2(il[329]) + , poseidon2_B_18_3(il[330]) + , poseidon2_B_19_0(il[331]) + , poseidon2_B_19_1(il[332]) + , poseidon2_B_19_2(il[333]) + , poseidon2_B_19_3(il[334]) + , poseidon2_B_20_0(il[335]) + , poseidon2_B_20_1(il[336]) + , poseidon2_B_20_2(il[337]) + , poseidon2_B_20_3(il[338]) + , poseidon2_B_21_0(il[339]) + , poseidon2_B_21_1(il[340]) + , poseidon2_B_21_2(il[341]) + , poseidon2_B_21_3(il[342]) + , poseidon2_B_22_0(il[343]) + , poseidon2_B_22_1(il[344]) + , poseidon2_B_22_2(il[345]) + , poseidon2_B_22_3(il[346]) + , poseidon2_B_23_0(il[347]) + , poseidon2_B_23_1(il[348]) + , poseidon2_B_23_2(il[349]) + , poseidon2_B_23_3(il[350]) + , poseidon2_B_24_0(il[351]) + , poseidon2_B_24_1(il[352]) + , poseidon2_B_24_2(il[353]) + , poseidon2_B_24_3(il[354]) + , poseidon2_B_25_0(il[355]) + , poseidon2_B_25_1(il[356]) + , poseidon2_B_25_2(il[357]) + , poseidon2_B_25_3(il[358]) + , poseidon2_B_26_0(il[359]) + , poseidon2_B_26_1(il[360]) + , poseidon2_B_26_2(il[361]) + , poseidon2_B_26_3(il[362]) + , poseidon2_B_27_0(il[363]) + , poseidon2_B_27_1(il[364]) + , poseidon2_B_27_2(il[365]) + , poseidon2_B_27_3(il[366]) + , poseidon2_B_28_0(il[367]) + , poseidon2_B_28_1(il[368]) + , poseidon2_B_28_2(il[369]) + , poseidon2_B_28_3(il[370]) + , poseidon2_B_29_0(il[371]) + , poseidon2_B_29_1(il[372]) + , poseidon2_B_29_2(il[373]) + , poseidon2_B_29_3(il[374]) + , poseidon2_B_30_0(il[375]) + , poseidon2_B_30_1(il[376]) + , poseidon2_B_30_2(il[377]) + , poseidon2_B_30_3(il[378]) + , poseidon2_B_31_0(il[379]) + , poseidon2_B_31_1(il[380]) + , poseidon2_B_31_2(il[381]) + , poseidon2_B_31_3(il[382]) + , poseidon2_B_32_0(il[383]) + , poseidon2_B_32_1(il[384]) + , poseidon2_B_32_2(il[385]) + , poseidon2_B_32_3(il[386]) + , poseidon2_B_33_0(il[387]) + , poseidon2_B_33_1(il[388]) + , poseidon2_B_33_2(il[389]) + , poseidon2_B_33_3(il[390]) + , poseidon2_B_34_0(il[391]) + , poseidon2_B_34_1(il[392]) + , poseidon2_B_34_2(il[393]) + , poseidon2_B_34_3(il[394]) + , poseidon2_B_35_0(il[395]) + , poseidon2_B_35_1(il[396]) + , poseidon2_B_35_2(il[397]) + , poseidon2_B_35_3(il[398]) + , poseidon2_B_36_0(il[399]) + , poseidon2_B_36_1(il[400]) + , poseidon2_B_36_2(il[401]) + , poseidon2_B_36_3(il[402]) + , poseidon2_B_37_0(il[403]) + , poseidon2_B_37_1(il[404]) + , poseidon2_B_37_2(il[405]) + , poseidon2_B_37_3(il[406]) + , poseidon2_B_38_0(il[407]) + , poseidon2_B_38_1(il[408]) + , poseidon2_B_38_2(il[409]) + , poseidon2_B_38_3(il[410]) + , poseidon2_B_39_0(il[411]) + , poseidon2_B_39_1(il[412]) + , poseidon2_B_39_2(il[413]) + , poseidon2_B_39_3(il[414]) + , poseidon2_B_40_0(il[415]) + , poseidon2_B_40_1(il[416]) + , poseidon2_B_40_2(il[417]) + , poseidon2_B_40_3(il[418]) + , poseidon2_B_41_0(il[419]) + , poseidon2_B_41_1(il[420]) + , poseidon2_B_41_2(il[421]) + , poseidon2_B_41_3(il[422]) + , poseidon2_B_42_0(il[423]) + , poseidon2_B_42_1(il[424]) + , poseidon2_B_42_2(il[425]) + , poseidon2_B_42_3(il[426]) + , poseidon2_B_43_0(il[427]) + , poseidon2_B_43_1(il[428]) + , poseidon2_B_43_2(il[429]) + , poseidon2_B_43_3(il[430]) + , poseidon2_B_44_0(il[431]) + , poseidon2_B_44_1(il[432]) + , poseidon2_B_44_2(il[433]) + , poseidon2_B_44_3(il[434]) + , poseidon2_B_45_0(il[435]) + , poseidon2_B_45_1(il[436]) + , poseidon2_B_45_2(il[437]) + , poseidon2_B_45_3(il[438]) + , poseidon2_B_46_0(il[439]) + , poseidon2_B_46_1(il[440]) + , poseidon2_B_46_2(il[441]) + , poseidon2_B_46_3(il[442]) + , poseidon2_B_47_0(il[443]) + , poseidon2_B_47_1(il[444]) + , poseidon2_B_47_2(il[445]) + , poseidon2_B_47_3(il[446]) + , poseidon2_B_48_0(il[447]) + , poseidon2_B_48_1(il[448]) + , poseidon2_B_48_2(il[449]) + , poseidon2_B_48_3(il[450]) + , poseidon2_B_49_0(il[451]) + , poseidon2_B_49_1(il[452]) + , poseidon2_B_49_2(il[453]) + , poseidon2_B_49_3(il[454]) + , poseidon2_B_4_0(il[455]) + , poseidon2_B_4_1(il[456]) + , poseidon2_B_4_2(il[457]) + , poseidon2_B_4_3(il[458]) + , poseidon2_B_50_0(il[459]) + , poseidon2_B_50_1(il[460]) + , poseidon2_B_50_2(il[461]) + , poseidon2_B_50_3(il[462]) + , poseidon2_B_51_0(il[463]) + , poseidon2_B_51_1(il[464]) + , poseidon2_B_51_2(il[465]) + , poseidon2_B_51_3(il[466]) + , poseidon2_B_52_0(il[467]) + , poseidon2_B_52_1(il[468]) + , poseidon2_B_52_2(il[469]) + , poseidon2_B_52_3(il[470]) + , poseidon2_B_53_0(il[471]) + , poseidon2_B_53_1(il[472]) + , poseidon2_B_53_2(il[473]) + , poseidon2_B_53_3(il[474]) + , poseidon2_B_54_0(il[475]) + , poseidon2_B_54_1(il[476]) + , poseidon2_B_54_2(il[477]) + , poseidon2_B_54_3(il[478]) + , poseidon2_B_55_0(il[479]) + , poseidon2_B_55_1(il[480]) + , poseidon2_B_55_2(il[481]) + , poseidon2_B_55_3(il[482]) + , poseidon2_B_56_0(il[483]) + , poseidon2_B_56_1(il[484]) + , poseidon2_B_56_2(il[485]) + , poseidon2_B_56_3(il[486]) + , poseidon2_B_57_0(il[487]) + , poseidon2_B_57_1(il[488]) + , poseidon2_B_57_2(il[489]) + , poseidon2_B_57_3(il[490]) + , poseidon2_B_58_0(il[491]) + , poseidon2_B_58_1(il[492]) + , poseidon2_B_58_2(il[493]) + , poseidon2_B_58_3(il[494]) + , poseidon2_B_59_0(il[495]) + , poseidon2_B_59_1(il[496]) + , poseidon2_B_59_2(il[497]) + , poseidon2_B_59_3(il[498]) + , poseidon2_B_5_0(il[499]) + , poseidon2_B_5_1(il[500]) + , poseidon2_B_5_2(il[501]) + , poseidon2_B_5_3(il[502]) + , poseidon2_B_6_0(il[503]) + , poseidon2_B_6_1(il[504]) + , poseidon2_B_6_2(il[505]) + , poseidon2_B_6_3(il[506]) + , poseidon2_B_7_0(il[507]) + , poseidon2_B_7_1(il[508]) + , poseidon2_B_7_2(il[509]) + , poseidon2_B_7_3(il[510]) + , poseidon2_B_8_0(il[511]) + , poseidon2_B_8_1(il[512]) + , poseidon2_B_8_2(il[513]) + , poseidon2_B_8_3(il[514]) + , poseidon2_B_9_0(il[515]) + , poseidon2_B_9_1(il[516]) + , poseidon2_B_9_2(il[517]) + , poseidon2_B_9_3(il[518]) + , poseidon2_EXT_LAYER_4(il[519]) + , poseidon2_EXT_LAYER_5(il[520]) + , poseidon2_EXT_LAYER_6(il[521]) + , poseidon2_EXT_LAYER_7(il[522]) + , poseidon2_T_0_4(il[523]) + , poseidon2_T_0_5(il[524]) + , poseidon2_T_0_6(il[525]) + , poseidon2_T_0_7(il[526]) + , poseidon2_T_1_4(il[527]) + , poseidon2_T_1_5(il[528]) + , poseidon2_T_1_6(il[529]) + , poseidon2_T_1_7(il[530]) + , poseidon2_T_2_4(il[531]) + , poseidon2_T_2_5(il[532]) + , poseidon2_T_2_6(il[533]) + , poseidon2_T_2_7(il[534]) + , poseidon2_T_3_4(il[535]) + , poseidon2_T_3_5(il[536]) + , poseidon2_T_3_6(il[537]) + , poseidon2_T_3_7(il[538]) + , poseidon2_T_60_4(il[539]) + , poseidon2_T_60_5(il[540]) + , poseidon2_T_60_6(il[541]) + , poseidon2_T_60_7(il[542]) + , poseidon2_T_61_4(il[543]) + , poseidon2_T_61_5(il[544]) + , poseidon2_T_61_6(il[545]) + , poseidon2_T_61_7(il[546]) + , poseidon2_T_62_4(il[547]) + , poseidon2_T_62_5(il[548]) + , poseidon2_T_62_6(il[549]) + , poseidon2_T_62_7(il[550]) + , poseidon2_T_63_4(il[551]) + , poseidon2_T_63_5(il[552]) + , poseidon2_T_63_6(il[553]) + , poseidon2_T_63_7(il[554]) + , poseidon2_a_0(il[555]) + , poseidon2_a_1(il[556]) + , poseidon2_a_2(il[557]) + , poseidon2_a_3(il[558]) + , poseidon2_b_0(il[559]) + , poseidon2_b_1(il[560]) + , poseidon2_b_2(il[561]) + , poseidon2_b_3(il[562]) + , poseidon2_clk(il[563]) + , poseidon2_input_addr(il[564]) + , poseidon2_mem_addr_read_a(il[565]) + , poseidon2_mem_addr_read_b(il[566]) + , poseidon2_mem_addr_read_c(il[567]) + , poseidon2_mem_addr_read_d(il[568]) + , poseidon2_mem_addr_write_a(il[569]) + , poseidon2_mem_addr_write_b(il[570]) + , poseidon2_mem_addr_write_c(il[571]) + , poseidon2_mem_addr_write_d(il[572]) + , poseidon2_output_addr(il[573]) + , poseidon2_sel_poseidon_perm(il[574]) + , range_check_alu_rng_chk(il[575]) + , range_check_clk(il[576]) + , range_check_cmp_hi_bits_rng_chk(il[577]) + , range_check_cmp_lo_bits_rng_chk(il[578]) + , range_check_dyn_diff(il[579]) + , range_check_dyn_rng_chk_bits(il[580]) + , range_check_dyn_rng_chk_pow_2(il[581]) + , range_check_gas_da_rng_chk(il[582]) + , range_check_gas_l2_rng_chk(il[583]) + , range_check_is_lte_u112(il[584]) + , range_check_is_lte_u128(il[585]) + , range_check_is_lte_u16(il[586]) + , range_check_is_lte_u32(il[587]) + , range_check_is_lte_u48(il[588]) + , range_check_is_lte_u64(il[589]) + , range_check_is_lte_u80(il[590]) + , range_check_is_lte_u96(il[591]) + , range_check_mem_rng_chk(il[592]) + , range_check_rng_chk_bits(il[593]) + , range_check_sel_lookup_0(il[594]) + , range_check_sel_lookup_1(il[595]) + , range_check_sel_lookup_2(il[596]) + , range_check_sel_lookup_3(il[597]) + , range_check_sel_lookup_4(il[598]) + , range_check_sel_lookup_5(il[599]) + , range_check_sel_lookup_6(il[600]) + , range_check_sel_rng_chk(il[601]) + , range_check_u16_r0(il[602]) + , range_check_u16_r1(il[603]) + , range_check_u16_r2(il[604]) + , range_check_u16_r3(il[605]) + , range_check_u16_r4(il[606]) + , range_check_u16_r5(il[607]) + , range_check_u16_r6(il[608]) + , range_check_u16_r7(il[609]) + , range_check_value(il[610]) + , sha256_clk(il[611]) + , sha256_input(il[612]) + , sha256_output(il[613]) + , sha256_sel_sha256_compression(il[614]) + , sha256_state(il[615]) + , slice_addr(il[616]) + , slice_clk(il[617]) + , slice_cnt(il[618]) + , slice_col_offset(il[619]) + , slice_one_min_inv(il[620]) + , slice_sel_cd_cpy(il[621]) + , slice_sel_mem_active(il[622]) + , slice_sel_return(il[623]) + , slice_sel_start(il[624]) + , slice_space_id(il[625]) + , slice_val(il[626]) + , lookup_rng_chk_pow_2_counts(il[627]) + , lookup_rng_chk_diff_counts(il[628]) + , lookup_rng_chk_0_counts(il[629]) + , lookup_rng_chk_1_counts(il[630]) + , lookup_rng_chk_2_counts(il[631]) + , lookup_rng_chk_3_counts(il[632]) + , lookup_rng_chk_4_counts(il[633]) + , lookup_rng_chk_5_counts(il[634]) + , lookup_rng_chk_6_counts(il[635]) + , lookup_rng_chk_7_counts(il[636]) + , lookup_pow_2_0_counts(il[637]) + , lookup_pow_2_1_counts(il[638]) + , lookup_byte_lengths_counts(il[639]) + , lookup_byte_operations_counts(il[640]) + , lookup_opcode_gas_counts(il[641]) + , kernel_output_lookup_counts(il[642]) + , lookup_into_kernel_counts(il[643]) + , lookup_cd_value_counts(il[644]) + , lookup_ret_value_counts(il[645]) + , incl_main_tag_err_counts(il[646]) + , incl_mem_tag_err_counts(il[647]) + , perm_rng_mem_inv(il[648]) + , perm_rng_cmp_lo_inv(il[649]) + , perm_rng_cmp_hi_inv(il[650]) + , perm_rng_alu_inv(il[651]) + , perm_cmp_alu_inv(il[652]) + , perm_rng_gas_l2_inv(il[653]) + , perm_rng_gas_da_inv(il[654]) + , perm_pos_mem_read_a_inv(il[655]) + , perm_pos_mem_read_b_inv(il[656]) + , perm_pos_mem_read_c_inv(il[657]) + , perm_pos_mem_read_d_inv(il[658]) + , perm_pos_mem_write_a_inv(il[659]) + , perm_pos_mem_write_b_inv(il[660]) + , perm_pos_mem_write_c_inv(il[661]) + , perm_pos_mem_write_d_inv(il[662]) + , perm_slice_mem_inv(il[663]) + , perm_main_alu_inv(il[664]) + , perm_main_bin_inv(il[665]) + , perm_main_conv_inv(il[666]) + , perm_main_pos2_perm_inv(il[667]) + , perm_main_pedersen_inv(il[668]) + , perm_main_slice_inv(il[669]) + , perm_main_mem_a_inv(il[670]) + , perm_main_mem_b_inv(il[671]) + , perm_main_mem_c_inv(il[672]) + , perm_main_mem_d_inv(il[673]) + , perm_main_mem_ind_addr_a_inv(il[674]) + , perm_main_mem_ind_addr_b_inv(il[675]) + , perm_main_mem_ind_addr_c_inv(il[676]) + , perm_main_mem_ind_addr_d_inv(il[677]) + , lookup_rng_chk_pow_2_inv(il[678]) + , lookup_rng_chk_diff_inv(il[679]) + , lookup_rng_chk_0_inv(il[680]) + , lookup_rng_chk_1_inv(il[681]) + , lookup_rng_chk_2_inv(il[682]) + , lookup_rng_chk_3_inv(il[683]) + , lookup_rng_chk_4_inv(il[684]) + , lookup_rng_chk_5_inv(il[685]) + , lookup_rng_chk_6_inv(il[686]) + , lookup_rng_chk_7_inv(il[687]) + , lookup_pow_2_0_inv(il[688]) + , lookup_pow_2_1_inv(il[689]) + , lookup_byte_lengths_inv(il[690]) + , lookup_byte_operations_inv(il[691]) + , lookup_opcode_gas_inv(il[692]) + , kernel_output_lookup_inv(il[693]) + , lookup_into_kernel_inv(il[694]) + , lookup_cd_value_inv(il[695]) + , lookup_ret_value_inv(il[696]) + , incl_main_tag_err_inv(il[697]) + , incl_mem_tag_err_inv(il[698]) + , binary_acc_ia_shift(il[699]) + , binary_acc_ib_shift(il[700]) + , binary_acc_ic_shift(il[701]) + , binary_mem_tag_ctr_shift(il[702]) + , binary_op_id_shift(il[703]) + , cmp_a_hi_shift(il[704]) + , cmp_a_lo_shift(il[705]) + , cmp_b_hi_shift(il[706]) + , cmp_b_lo_shift(il[707]) + , cmp_cmp_rng_ctr_shift(il[708]) + , cmp_op_gt_shift(il[709]) + , cmp_p_sub_a_hi_shift(il[710]) + , cmp_p_sub_a_lo_shift(il[711]) + , cmp_p_sub_b_hi_shift(il[712]) + , cmp_p_sub_b_lo_shift(il[713]) + , cmp_sel_rng_chk_shift(il[714]) + , main_da_gas_remaining_shift(il[715]) + , main_emit_l2_to_l1_msg_write_offset_shift(il[716]) + , main_emit_note_hash_write_offset_shift(il[717]) + , main_emit_nullifier_write_offset_shift(il[718]) + , main_emit_unencrypted_log_write_offset_shift(il[719]) + , main_internal_return_ptr_shift(il[720]) + , main_l1_to_l2_msg_exists_write_offset_shift(il[721]) + , main_l2_gas_remaining_shift(il[722]) + , main_note_hash_exist_write_offset_shift(il[723]) + , main_nullifier_exists_write_offset_shift(il[724]) + , main_nullifier_non_exists_write_offset_shift(il[725]) + , main_pc_shift(il[726]) + , main_sel_execution_row_shift(il[727]) + , main_sload_write_offset_shift(il[728]) + , main_sstore_write_offset_shift(il[729]) + , mem_glob_addr_shift(il[730]) + , mem_rw_shift(il[731]) + , mem_sel_mem_shift(il[732]) + , mem_tag_shift(il[733]) + , mem_tsp_shift(il[734]) + , mem_val_shift(il[735]) + , slice_addr_shift(il[736]) + , slice_clk_shift(il[737]) + , slice_cnt_shift(il[738]) + , slice_col_offset_shift(il[739]) + , slice_sel_cd_cpy_shift(il[740]) + , slice_sel_mem_active_shift(il[741]) + , slice_sel_return_shift(il[742]) + , slice_sel_start_shift(il[743]) + , slice_space_id_shift(il[744]) {} AvmFlavor::ProverPolynomials::ProverPolynomials(ProvingKey& proving_key) @@ -827,6 +831,7 @@ AvmFlavor::AllConstRefValues AvmFlavor::ProverPolynomials::get_row(size_t row_id alu_sel_shift_which[row_idx], alu_u128_tag[row_idx], alu_u16_tag[row_idx], + alu_u1_tag[row_idx], alu_u32_tag[row_idx], alu_u64_tag[row_idx], alu_u8_tag[row_idx], @@ -872,6 +877,7 @@ AvmFlavor::AllConstRefValues AvmFlavor::ProverPolynomials::get_row(size_t row_id conversion_clk[row_idx], conversion_input[row_idx], conversion_num_limbs[row_idx], + conversion_output_bits[row_idx], conversion_radix[row_idx], conversion_sel_to_radix_le[row_idx], keccakf1600_clk[row_idx], @@ -964,6 +970,7 @@ AvmFlavor::AllConstRefValues AvmFlavor::ProverPolynomials::get_row(size_t row_id main_sel_op_get_contract_instance[row_idx], main_sel_op_internal_call[row_idx], main_sel_op_internal_return[row_idx], + main_sel_op_is_static_call[row_idx], main_sel_op_jump[row_idx], main_sel_op_jumpi[row_idx], main_sel_op_keccak[row_idx], @@ -989,6 +996,7 @@ AvmFlavor::AllConstRefValues AvmFlavor::ProverPolynomials::get_row(size_t row_id main_sel_op_shr[row_idx], main_sel_op_sload[row_idx], main_sel_op_sstore[row_idx], + main_sel_op_static_call[row_idx], main_sel_op_storage_address[row_idx], main_sel_op_sub[row_idx], main_sel_op_timestamp[row_idx], @@ -1572,6 +1580,7 @@ AvmFlavor::CommitmentLabels::CommitmentLabels() Base::alu_sel_shift_which = "ALU_SEL_SHIFT_WHICH"; Base::alu_u128_tag = "ALU_U128_TAG"; Base::alu_u16_tag = "ALU_U16_TAG"; + Base::alu_u1_tag = "ALU_U1_TAG"; Base::alu_u32_tag = "ALU_U32_TAG"; Base::alu_u64_tag = "ALU_U64_TAG"; Base::alu_u8_tag = "ALU_U8_TAG"; @@ -1617,6 +1626,7 @@ AvmFlavor::CommitmentLabels::CommitmentLabels() Base::conversion_clk = "CONVERSION_CLK"; Base::conversion_input = "CONVERSION_INPUT"; Base::conversion_num_limbs = "CONVERSION_NUM_LIMBS"; + Base::conversion_output_bits = "CONVERSION_OUTPUT_BITS"; Base::conversion_radix = "CONVERSION_RADIX"; Base::conversion_sel_to_radix_le = "CONVERSION_SEL_TO_RADIX_LE"; Base::keccakf1600_clk = "KECCAKF1600_CLK"; @@ -1709,6 +1719,7 @@ AvmFlavor::CommitmentLabels::CommitmentLabels() Base::main_sel_op_get_contract_instance = "MAIN_SEL_OP_GET_CONTRACT_INSTANCE"; Base::main_sel_op_internal_call = "MAIN_SEL_OP_INTERNAL_CALL"; Base::main_sel_op_internal_return = "MAIN_SEL_OP_INTERNAL_RETURN"; + Base::main_sel_op_is_static_call = "MAIN_SEL_OP_IS_STATIC_CALL"; Base::main_sel_op_jump = "MAIN_SEL_OP_JUMP"; Base::main_sel_op_jumpi = "MAIN_SEL_OP_JUMPI"; Base::main_sel_op_keccak = "MAIN_SEL_OP_KECCAK"; @@ -1734,6 +1745,7 @@ AvmFlavor::CommitmentLabels::CommitmentLabels() Base::main_sel_op_shr = "MAIN_SEL_OP_SHR"; Base::main_sel_op_sload = "MAIN_SEL_OP_SLOAD"; Base::main_sel_op_sstore = "MAIN_SEL_OP_SSTORE"; + Base::main_sel_op_static_call = "MAIN_SEL_OP_STATIC_CALL"; Base::main_sel_op_storage_address = "MAIN_SEL_OP_STORAGE_ADDRESS"; Base::main_sel_op_sub = "MAIN_SEL_OP_SUB"; Base::main_sel_op_timestamp = "MAIN_SEL_OP_TIMESTAMP"; diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.hpp index 7d3cabeeca8..ca6708e976f 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.hpp @@ -13,6 +13,7 @@ #include "barretenberg/transcript/transcript.hpp" #include "barretenberg/vm/avm/generated/flavor_settings.hpp" +#include "barretenberg/vm/aztec_constants.hpp" // Relations #include "barretenberg/vm/avm/generated/relations/alu.hpp" @@ -89,7 +90,7 @@ template using tuple_cat_t = decltype(std::tuple_cat(std:: // The entities that will be used in the flavor. // clang-format off #define PRECOMPUTED_ENTITIES byte_lookup_sel_bin, byte_lookup_table_byte_lengths, byte_lookup_table_in_tags, byte_lookup_table_input_a, byte_lookup_table_input_b, byte_lookup_table_op_id, byte_lookup_table_output, gas_base_da_gas_fixed_table, gas_base_l2_gas_fixed_table, gas_dyn_da_gas_fixed_table, gas_dyn_l2_gas_fixed_table, gas_sel_gas_cost, main_clk, main_sel_first, main_zeroes, powers_power_of_2 -#define WIRE_ENTITIES main_kernel_inputs, main_kernel_value_out, main_kernel_side_effect_out, main_kernel_metadata_out, main_calldata, main_returndata, alu_a_hi, alu_a_lo, alu_b_hi, alu_b_lo, alu_b_pow, alu_c_hi, alu_c_lo, alu_cf, alu_clk, alu_cmp_gadget_gt, alu_cmp_gadget_input_a, alu_cmp_gadget_input_b, alu_cmp_gadget_result, alu_cmp_gadget_sel, alu_ff_tag, alu_ia, alu_ib, alu_ic, alu_in_tag, alu_max_bits_sub_b_bits, alu_max_bits_sub_b_pow, alu_op_add, alu_op_cast, alu_op_div, alu_op_eq, alu_op_lt, alu_op_lte, alu_op_mul, alu_op_not, alu_op_shl, alu_op_shr, alu_op_sub, alu_partial_prod_hi, alu_partial_prod_lo, alu_range_check_input_value, alu_range_check_num_bits, alu_range_check_sel, alu_remainder, alu_sel_alu, alu_sel_cmp, alu_sel_shift_which, alu_u128_tag, alu_u16_tag, alu_u32_tag, alu_u64_tag, alu_u8_tag, alu_zero_shift, binary_acc_ia, binary_acc_ib, binary_acc_ic, binary_clk, binary_ia_bytes, binary_ib_bytes, binary_ic_bytes, binary_in_tag, binary_mem_tag_ctr, binary_mem_tag_ctr_inv, binary_op_id, binary_sel_bin, binary_start, cmp_a_hi, cmp_a_lo, cmp_b_hi, cmp_b_lo, cmp_borrow, cmp_clk, cmp_cmp_rng_ctr, cmp_input_a, cmp_input_b, cmp_op_eq, cmp_op_eq_diff_inv, cmp_op_gt, cmp_p_a_borrow, cmp_p_b_borrow, cmp_p_sub_a_hi, cmp_p_sub_a_lo, cmp_p_sub_b_hi, cmp_p_sub_b_lo, cmp_range_chk_clk, cmp_res_hi, cmp_res_lo, cmp_result, cmp_sel_cmp, cmp_sel_rng_chk, cmp_shift_sel, conversion_clk, conversion_input, conversion_num_limbs, conversion_radix, conversion_sel_to_radix_le, keccakf1600_clk, keccakf1600_input, keccakf1600_output, keccakf1600_sel_keccakf1600, main_abs_da_rem_gas, main_abs_l2_rem_gas, main_alu_in_tag, main_base_da_gas_op_cost, main_base_l2_gas_op_cost, main_bin_op_id, main_call_ptr, main_da_gas_remaining, main_da_out_of_gas, main_dyn_da_gas_op_cost, main_dyn_gas_multiplier, main_dyn_l2_gas_op_cost, main_emit_l2_to_l1_msg_write_offset, main_emit_note_hash_write_offset, main_emit_nullifier_write_offset, main_emit_unencrypted_log_write_offset, main_ia, main_ib, main_ic, main_id, main_id_zero, main_ind_addr_a, main_ind_addr_b, main_ind_addr_c, main_ind_addr_d, main_internal_return_ptr, main_inv, main_kernel_in_offset, main_kernel_out_offset, main_l1_to_l2_msg_exists_write_offset, main_l2_gas_remaining, main_l2_out_of_gas, main_mem_addr_a, main_mem_addr_b, main_mem_addr_c, main_mem_addr_d, main_note_hash_exist_write_offset, main_nullifier_exists_write_offset, main_nullifier_non_exists_write_offset, main_op_err, main_opcode_val, main_pc, main_r_in_tag, main_rwa, main_rwb, main_rwc, main_rwd, main_sel_alu, main_sel_bin, main_sel_calldata, main_sel_execution_row, main_sel_kernel_inputs, main_sel_kernel_out, main_sel_last, main_sel_mem_op_a, main_sel_mem_op_b, main_sel_mem_op_c, main_sel_mem_op_d, main_sel_mov_ia_to_ic, main_sel_mov_ib_to_ic, main_sel_op_add, main_sel_op_address, main_sel_op_and, main_sel_op_block_number, main_sel_op_calldata_copy, main_sel_op_cast, main_sel_op_chain_id, main_sel_op_cmov, main_sel_op_dagasleft, main_sel_op_div, main_sel_op_ecadd, main_sel_op_emit_l2_to_l1_msg, main_sel_op_emit_note_hash, main_sel_op_emit_nullifier, main_sel_op_emit_unencrypted_log, main_sel_op_eq, main_sel_op_external_call, main_sel_op_external_return, main_sel_op_external_revert, main_sel_op_fdiv, main_sel_op_fee_per_da_gas, main_sel_op_fee_per_l2_gas, main_sel_op_function_selector, main_sel_op_get_contract_instance, main_sel_op_internal_call, main_sel_op_internal_return, main_sel_op_jump, main_sel_op_jumpi, main_sel_op_keccak, main_sel_op_l1_to_l2_msg_exists, main_sel_op_l2gasleft, main_sel_op_lt, main_sel_op_lte, main_sel_op_mov, main_sel_op_msm, main_sel_op_mul, main_sel_op_not, main_sel_op_note_hash_exists, main_sel_op_nullifier_exists, main_sel_op_or, main_sel_op_pedersen, main_sel_op_pedersen_commit, main_sel_op_poseidon2, main_sel_op_radix_le, main_sel_op_sender, main_sel_op_set, main_sel_op_sha256, main_sel_op_shl, main_sel_op_shr, main_sel_op_sload, main_sel_op_sstore, main_sel_op_storage_address, main_sel_op_sub, main_sel_op_timestamp, main_sel_op_transaction_fee, main_sel_op_version, main_sel_op_xor, main_sel_q_kernel_lookup, main_sel_q_kernel_output_lookup, main_sel_resolve_ind_addr_a, main_sel_resolve_ind_addr_b, main_sel_resolve_ind_addr_c, main_sel_resolve_ind_addr_d, main_sel_returndata, main_sel_rng_16, main_sel_rng_8, main_sel_slice_gadget, main_side_effect_counter, main_sload_write_offset, main_space_id, main_sstore_write_offset, main_tag_err, main_w_in_tag, mem_addr, mem_clk, mem_diff, mem_glob_addr, mem_last, mem_lastAccess, mem_one_min_inv, mem_r_in_tag, mem_rw, mem_sel_mem, mem_sel_mov_ia_to_ic, mem_sel_mov_ib_to_ic, mem_sel_op_a, mem_sel_op_b, mem_sel_op_c, mem_sel_op_cmov, mem_sel_op_d, mem_sel_op_poseidon_read_a, mem_sel_op_poseidon_read_b, mem_sel_op_poseidon_read_c, mem_sel_op_poseidon_read_d, mem_sel_op_poseidon_write_a, mem_sel_op_poseidon_write_b, mem_sel_op_poseidon_write_c, mem_sel_op_poseidon_write_d, mem_sel_op_slice, mem_sel_resolve_ind_addr_a, mem_sel_resolve_ind_addr_b, mem_sel_resolve_ind_addr_c, mem_sel_resolve_ind_addr_d, mem_sel_rng_chk, mem_skip_check_tag, mem_space_id, mem_tag, mem_tag_err, mem_tsp, mem_val, mem_w_in_tag, pedersen_clk, pedersen_input, pedersen_output, pedersen_sel_pedersen, poseidon2_B_10_0, poseidon2_B_10_1, poseidon2_B_10_2, poseidon2_B_10_3, poseidon2_B_11_0, poseidon2_B_11_1, poseidon2_B_11_2, poseidon2_B_11_3, poseidon2_B_12_0, poseidon2_B_12_1, poseidon2_B_12_2, poseidon2_B_12_3, poseidon2_B_13_0, poseidon2_B_13_1, poseidon2_B_13_2, poseidon2_B_13_3, poseidon2_B_14_0, poseidon2_B_14_1, poseidon2_B_14_2, poseidon2_B_14_3, poseidon2_B_15_0, poseidon2_B_15_1, poseidon2_B_15_2, poseidon2_B_15_3, poseidon2_B_16_0, poseidon2_B_16_1, poseidon2_B_16_2, poseidon2_B_16_3, poseidon2_B_17_0, poseidon2_B_17_1, poseidon2_B_17_2, poseidon2_B_17_3, poseidon2_B_18_0, poseidon2_B_18_1, poseidon2_B_18_2, poseidon2_B_18_3, poseidon2_B_19_0, poseidon2_B_19_1, poseidon2_B_19_2, poseidon2_B_19_3, poseidon2_B_20_0, poseidon2_B_20_1, poseidon2_B_20_2, poseidon2_B_20_3, poseidon2_B_21_0, poseidon2_B_21_1, poseidon2_B_21_2, poseidon2_B_21_3, poseidon2_B_22_0, poseidon2_B_22_1, poseidon2_B_22_2, poseidon2_B_22_3, poseidon2_B_23_0, poseidon2_B_23_1, poseidon2_B_23_2, poseidon2_B_23_3, poseidon2_B_24_0, poseidon2_B_24_1, poseidon2_B_24_2, poseidon2_B_24_3, poseidon2_B_25_0, poseidon2_B_25_1, poseidon2_B_25_2, poseidon2_B_25_3, poseidon2_B_26_0, poseidon2_B_26_1, poseidon2_B_26_2, poseidon2_B_26_3, poseidon2_B_27_0, poseidon2_B_27_1, poseidon2_B_27_2, poseidon2_B_27_3, poseidon2_B_28_0, poseidon2_B_28_1, poseidon2_B_28_2, poseidon2_B_28_3, poseidon2_B_29_0, poseidon2_B_29_1, poseidon2_B_29_2, poseidon2_B_29_3, poseidon2_B_30_0, poseidon2_B_30_1, poseidon2_B_30_2, poseidon2_B_30_3, poseidon2_B_31_0, poseidon2_B_31_1, poseidon2_B_31_2, poseidon2_B_31_3, poseidon2_B_32_0, poseidon2_B_32_1, poseidon2_B_32_2, poseidon2_B_32_3, poseidon2_B_33_0, poseidon2_B_33_1, poseidon2_B_33_2, poseidon2_B_33_3, poseidon2_B_34_0, poseidon2_B_34_1, poseidon2_B_34_2, poseidon2_B_34_3, poseidon2_B_35_0, poseidon2_B_35_1, poseidon2_B_35_2, poseidon2_B_35_3, poseidon2_B_36_0, poseidon2_B_36_1, poseidon2_B_36_2, poseidon2_B_36_3, poseidon2_B_37_0, poseidon2_B_37_1, poseidon2_B_37_2, poseidon2_B_37_3, poseidon2_B_38_0, poseidon2_B_38_1, poseidon2_B_38_2, poseidon2_B_38_3, poseidon2_B_39_0, poseidon2_B_39_1, poseidon2_B_39_2, poseidon2_B_39_3, poseidon2_B_40_0, poseidon2_B_40_1, poseidon2_B_40_2, poseidon2_B_40_3, poseidon2_B_41_0, poseidon2_B_41_1, poseidon2_B_41_2, poseidon2_B_41_3, poseidon2_B_42_0, poseidon2_B_42_1, poseidon2_B_42_2, poseidon2_B_42_3, poseidon2_B_43_0, poseidon2_B_43_1, poseidon2_B_43_2, poseidon2_B_43_3, poseidon2_B_44_0, poseidon2_B_44_1, poseidon2_B_44_2, poseidon2_B_44_3, poseidon2_B_45_0, poseidon2_B_45_1, poseidon2_B_45_2, poseidon2_B_45_3, poseidon2_B_46_0, poseidon2_B_46_1, poseidon2_B_46_2, poseidon2_B_46_3, poseidon2_B_47_0, poseidon2_B_47_1, poseidon2_B_47_2, poseidon2_B_47_3, poseidon2_B_48_0, poseidon2_B_48_1, poseidon2_B_48_2, poseidon2_B_48_3, poseidon2_B_49_0, poseidon2_B_49_1, poseidon2_B_49_2, poseidon2_B_49_3, poseidon2_B_4_0, poseidon2_B_4_1, poseidon2_B_4_2, poseidon2_B_4_3, poseidon2_B_50_0, poseidon2_B_50_1, poseidon2_B_50_2, poseidon2_B_50_3, poseidon2_B_51_0, poseidon2_B_51_1, poseidon2_B_51_2, poseidon2_B_51_3, poseidon2_B_52_0, poseidon2_B_52_1, poseidon2_B_52_2, poseidon2_B_52_3, poseidon2_B_53_0, poseidon2_B_53_1, poseidon2_B_53_2, poseidon2_B_53_3, poseidon2_B_54_0, poseidon2_B_54_1, poseidon2_B_54_2, poseidon2_B_54_3, poseidon2_B_55_0, poseidon2_B_55_1, poseidon2_B_55_2, poseidon2_B_55_3, poseidon2_B_56_0, poseidon2_B_56_1, poseidon2_B_56_2, poseidon2_B_56_3, poseidon2_B_57_0, poseidon2_B_57_1, poseidon2_B_57_2, poseidon2_B_57_3, poseidon2_B_58_0, poseidon2_B_58_1, poseidon2_B_58_2, poseidon2_B_58_3, poseidon2_B_59_0, poseidon2_B_59_1, poseidon2_B_59_2, poseidon2_B_59_3, poseidon2_B_5_0, poseidon2_B_5_1, poseidon2_B_5_2, poseidon2_B_5_3, poseidon2_B_6_0, poseidon2_B_6_1, poseidon2_B_6_2, poseidon2_B_6_3, poseidon2_B_7_0, poseidon2_B_7_1, poseidon2_B_7_2, poseidon2_B_7_3, poseidon2_B_8_0, poseidon2_B_8_1, poseidon2_B_8_2, poseidon2_B_8_3, poseidon2_B_9_0, poseidon2_B_9_1, poseidon2_B_9_2, poseidon2_B_9_3, poseidon2_EXT_LAYER_4, poseidon2_EXT_LAYER_5, poseidon2_EXT_LAYER_6, poseidon2_EXT_LAYER_7, poseidon2_T_0_4, poseidon2_T_0_5, poseidon2_T_0_6, poseidon2_T_0_7, poseidon2_T_1_4, poseidon2_T_1_5, poseidon2_T_1_6, poseidon2_T_1_7, poseidon2_T_2_4, poseidon2_T_2_5, poseidon2_T_2_6, poseidon2_T_2_7, poseidon2_T_3_4, poseidon2_T_3_5, poseidon2_T_3_6, poseidon2_T_3_7, poseidon2_T_60_4, poseidon2_T_60_5, poseidon2_T_60_6, poseidon2_T_60_7, poseidon2_T_61_4, poseidon2_T_61_5, poseidon2_T_61_6, poseidon2_T_61_7, poseidon2_T_62_4, poseidon2_T_62_5, poseidon2_T_62_6, poseidon2_T_62_7, poseidon2_T_63_4, poseidon2_T_63_5, poseidon2_T_63_6, poseidon2_T_63_7, poseidon2_a_0, poseidon2_a_1, poseidon2_a_2, poseidon2_a_3, poseidon2_b_0, poseidon2_b_1, poseidon2_b_2, poseidon2_b_3, poseidon2_clk, poseidon2_input_addr, poseidon2_mem_addr_read_a, poseidon2_mem_addr_read_b, poseidon2_mem_addr_read_c, poseidon2_mem_addr_read_d, poseidon2_mem_addr_write_a, poseidon2_mem_addr_write_b, poseidon2_mem_addr_write_c, poseidon2_mem_addr_write_d, poseidon2_output_addr, poseidon2_sel_poseidon_perm, range_check_alu_rng_chk, range_check_clk, range_check_cmp_hi_bits_rng_chk, range_check_cmp_lo_bits_rng_chk, range_check_dyn_diff, range_check_dyn_rng_chk_bits, range_check_dyn_rng_chk_pow_2, range_check_gas_da_rng_chk, range_check_gas_l2_rng_chk, range_check_is_lte_u112, range_check_is_lte_u128, range_check_is_lte_u16, range_check_is_lte_u32, range_check_is_lte_u48, range_check_is_lte_u64, range_check_is_lte_u80, range_check_is_lte_u96, range_check_mem_rng_chk, range_check_rng_chk_bits, range_check_sel_lookup_0, range_check_sel_lookup_1, range_check_sel_lookup_2, range_check_sel_lookup_3, range_check_sel_lookup_4, range_check_sel_lookup_5, range_check_sel_lookup_6, range_check_sel_rng_chk, range_check_u16_r0, range_check_u16_r1, range_check_u16_r2, range_check_u16_r3, range_check_u16_r4, range_check_u16_r5, range_check_u16_r6, range_check_u16_r7, range_check_value, sha256_clk, sha256_input, sha256_output, sha256_sel_sha256_compression, sha256_state, slice_addr, slice_clk, slice_cnt, slice_col_offset, slice_one_min_inv, slice_sel_cd_cpy, slice_sel_mem_active, slice_sel_return, slice_sel_start, slice_space_id, slice_val, lookup_rng_chk_pow_2_counts, lookup_rng_chk_diff_counts, lookup_rng_chk_0_counts, lookup_rng_chk_1_counts, lookup_rng_chk_2_counts, lookup_rng_chk_3_counts, lookup_rng_chk_4_counts, lookup_rng_chk_5_counts, lookup_rng_chk_6_counts, lookup_rng_chk_7_counts, lookup_pow_2_0_counts, lookup_pow_2_1_counts, lookup_byte_lengths_counts, lookup_byte_operations_counts, lookup_opcode_gas_counts, kernel_output_lookup_counts, lookup_into_kernel_counts, lookup_cd_value_counts, lookup_ret_value_counts, incl_main_tag_err_counts, incl_mem_tag_err_counts +#define WIRE_ENTITIES main_kernel_inputs, main_kernel_value_out, main_kernel_side_effect_out, main_kernel_metadata_out, main_calldata, main_returndata, alu_a_hi, alu_a_lo, alu_b_hi, alu_b_lo, alu_b_pow, alu_c_hi, alu_c_lo, alu_cf, alu_clk, alu_cmp_gadget_gt, alu_cmp_gadget_input_a, alu_cmp_gadget_input_b, alu_cmp_gadget_result, alu_cmp_gadget_sel, alu_ff_tag, alu_ia, alu_ib, alu_ic, alu_in_tag, alu_max_bits_sub_b_bits, alu_max_bits_sub_b_pow, alu_op_add, alu_op_cast, alu_op_div, alu_op_eq, alu_op_lt, alu_op_lte, alu_op_mul, alu_op_not, alu_op_shl, alu_op_shr, alu_op_sub, alu_partial_prod_hi, alu_partial_prod_lo, alu_range_check_input_value, alu_range_check_num_bits, alu_range_check_sel, alu_remainder, alu_sel_alu, alu_sel_cmp, alu_sel_shift_which, alu_u128_tag, alu_u16_tag, alu_u1_tag, alu_u32_tag, alu_u64_tag, alu_u8_tag, alu_zero_shift, binary_acc_ia, binary_acc_ib, binary_acc_ic, binary_clk, binary_ia_bytes, binary_ib_bytes, binary_ic_bytes, binary_in_tag, binary_mem_tag_ctr, binary_mem_tag_ctr_inv, binary_op_id, binary_sel_bin, binary_start, cmp_a_hi, cmp_a_lo, cmp_b_hi, cmp_b_lo, cmp_borrow, cmp_clk, cmp_cmp_rng_ctr, cmp_input_a, cmp_input_b, cmp_op_eq, cmp_op_eq_diff_inv, cmp_op_gt, cmp_p_a_borrow, cmp_p_b_borrow, cmp_p_sub_a_hi, cmp_p_sub_a_lo, cmp_p_sub_b_hi, cmp_p_sub_b_lo, cmp_range_chk_clk, cmp_res_hi, cmp_res_lo, cmp_result, cmp_sel_cmp, cmp_sel_rng_chk, cmp_shift_sel, conversion_clk, conversion_input, conversion_num_limbs, conversion_output_bits, conversion_radix, conversion_sel_to_radix_le, keccakf1600_clk, keccakf1600_input, keccakf1600_output, keccakf1600_sel_keccakf1600, main_abs_da_rem_gas, main_abs_l2_rem_gas, main_alu_in_tag, main_base_da_gas_op_cost, main_base_l2_gas_op_cost, main_bin_op_id, main_call_ptr, main_da_gas_remaining, main_da_out_of_gas, main_dyn_da_gas_op_cost, main_dyn_gas_multiplier, main_dyn_l2_gas_op_cost, main_emit_l2_to_l1_msg_write_offset, main_emit_note_hash_write_offset, main_emit_nullifier_write_offset, main_emit_unencrypted_log_write_offset, main_ia, main_ib, main_ic, main_id, main_id_zero, main_ind_addr_a, main_ind_addr_b, main_ind_addr_c, main_ind_addr_d, main_internal_return_ptr, main_inv, main_kernel_in_offset, main_kernel_out_offset, main_l1_to_l2_msg_exists_write_offset, main_l2_gas_remaining, main_l2_out_of_gas, main_mem_addr_a, main_mem_addr_b, main_mem_addr_c, main_mem_addr_d, main_note_hash_exist_write_offset, main_nullifier_exists_write_offset, main_nullifier_non_exists_write_offset, main_op_err, main_opcode_val, main_pc, main_r_in_tag, main_rwa, main_rwb, main_rwc, main_rwd, main_sel_alu, main_sel_bin, main_sel_calldata, main_sel_execution_row, main_sel_kernel_inputs, main_sel_kernel_out, main_sel_last, main_sel_mem_op_a, main_sel_mem_op_b, main_sel_mem_op_c, main_sel_mem_op_d, main_sel_mov_ia_to_ic, main_sel_mov_ib_to_ic, main_sel_op_add, main_sel_op_address, main_sel_op_and, main_sel_op_block_number, main_sel_op_calldata_copy, main_sel_op_cast, main_sel_op_chain_id, main_sel_op_cmov, main_sel_op_dagasleft, main_sel_op_div, main_sel_op_ecadd, main_sel_op_emit_l2_to_l1_msg, main_sel_op_emit_note_hash, main_sel_op_emit_nullifier, main_sel_op_emit_unencrypted_log, main_sel_op_eq, main_sel_op_external_call, main_sel_op_external_return, main_sel_op_external_revert, main_sel_op_fdiv, main_sel_op_fee_per_da_gas, main_sel_op_fee_per_l2_gas, main_sel_op_function_selector, main_sel_op_get_contract_instance, main_sel_op_internal_call, main_sel_op_internal_return, main_sel_op_is_static_call, main_sel_op_jump, main_sel_op_jumpi, main_sel_op_keccak, main_sel_op_l1_to_l2_msg_exists, main_sel_op_l2gasleft, main_sel_op_lt, main_sel_op_lte, main_sel_op_mov, main_sel_op_msm, main_sel_op_mul, main_sel_op_not, main_sel_op_note_hash_exists, main_sel_op_nullifier_exists, main_sel_op_or, main_sel_op_pedersen, main_sel_op_pedersen_commit, main_sel_op_poseidon2, main_sel_op_radix_le, main_sel_op_sender, main_sel_op_set, main_sel_op_sha256, main_sel_op_shl, main_sel_op_shr, main_sel_op_sload, main_sel_op_sstore, main_sel_op_static_call, main_sel_op_storage_address, main_sel_op_sub, main_sel_op_timestamp, main_sel_op_transaction_fee, main_sel_op_version, main_sel_op_xor, main_sel_q_kernel_lookup, main_sel_q_kernel_output_lookup, main_sel_resolve_ind_addr_a, main_sel_resolve_ind_addr_b, main_sel_resolve_ind_addr_c, main_sel_resolve_ind_addr_d, main_sel_returndata, main_sel_rng_16, main_sel_rng_8, main_sel_slice_gadget, main_side_effect_counter, main_sload_write_offset, main_space_id, main_sstore_write_offset, main_tag_err, main_w_in_tag, mem_addr, mem_clk, mem_diff, mem_glob_addr, mem_last, mem_lastAccess, mem_one_min_inv, mem_r_in_tag, mem_rw, mem_sel_mem, mem_sel_mov_ia_to_ic, mem_sel_mov_ib_to_ic, mem_sel_op_a, mem_sel_op_b, mem_sel_op_c, mem_sel_op_cmov, mem_sel_op_d, mem_sel_op_poseidon_read_a, mem_sel_op_poseidon_read_b, mem_sel_op_poseidon_read_c, mem_sel_op_poseidon_read_d, mem_sel_op_poseidon_write_a, mem_sel_op_poseidon_write_b, mem_sel_op_poseidon_write_c, mem_sel_op_poseidon_write_d, mem_sel_op_slice, mem_sel_resolve_ind_addr_a, mem_sel_resolve_ind_addr_b, mem_sel_resolve_ind_addr_c, mem_sel_resolve_ind_addr_d, mem_sel_rng_chk, mem_skip_check_tag, mem_space_id, mem_tag, mem_tag_err, mem_tsp, mem_val, mem_w_in_tag, pedersen_clk, pedersen_input, pedersen_output, pedersen_sel_pedersen, poseidon2_B_10_0, poseidon2_B_10_1, poseidon2_B_10_2, poseidon2_B_10_3, poseidon2_B_11_0, poseidon2_B_11_1, poseidon2_B_11_2, poseidon2_B_11_3, poseidon2_B_12_0, poseidon2_B_12_1, poseidon2_B_12_2, poseidon2_B_12_3, poseidon2_B_13_0, poseidon2_B_13_1, poseidon2_B_13_2, poseidon2_B_13_3, poseidon2_B_14_0, poseidon2_B_14_1, poseidon2_B_14_2, poseidon2_B_14_3, poseidon2_B_15_0, poseidon2_B_15_1, poseidon2_B_15_2, poseidon2_B_15_3, poseidon2_B_16_0, poseidon2_B_16_1, poseidon2_B_16_2, poseidon2_B_16_3, poseidon2_B_17_0, poseidon2_B_17_1, poseidon2_B_17_2, poseidon2_B_17_3, poseidon2_B_18_0, poseidon2_B_18_1, poseidon2_B_18_2, poseidon2_B_18_3, poseidon2_B_19_0, poseidon2_B_19_1, poseidon2_B_19_2, poseidon2_B_19_3, poseidon2_B_20_0, poseidon2_B_20_1, poseidon2_B_20_2, poseidon2_B_20_3, poseidon2_B_21_0, poseidon2_B_21_1, poseidon2_B_21_2, poseidon2_B_21_3, poseidon2_B_22_0, poseidon2_B_22_1, poseidon2_B_22_2, poseidon2_B_22_3, poseidon2_B_23_0, poseidon2_B_23_1, poseidon2_B_23_2, poseidon2_B_23_3, poseidon2_B_24_0, poseidon2_B_24_1, poseidon2_B_24_2, poseidon2_B_24_3, poseidon2_B_25_0, poseidon2_B_25_1, poseidon2_B_25_2, poseidon2_B_25_3, poseidon2_B_26_0, poseidon2_B_26_1, poseidon2_B_26_2, poseidon2_B_26_3, poseidon2_B_27_0, poseidon2_B_27_1, poseidon2_B_27_2, poseidon2_B_27_3, poseidon2_B_28_0, poseidon2_B_28_1, poseidon2_B_28_2, poseidon2_B_28_3, poseidon2_B_29_0, poseidon2_B_29_1, poseidon2_B_29_2, poseidon2_B_29_3, poseidon2_B_30_0, poseidon2_B_30_1, poseidon2_B_30_2, poseidon2_B_30_3, poseidon2_B_31_0, poseidon2_B_31_1, poseidon2_B_31_2, poseidon2_B_31_3, poseidon2_B_32_0, poseidon2_B_32_1, poseidon2_B_32_2, poseidon2_B_32_3, poseidon2_B_33_0, poseidon2_B_33_1, poseidon2_B_33_2, poseidon2_B_33_3, poseidon2_B_34_0, poseidon2_B_34_1, poseidon2_B_34_2, poseidon2_B_34_3, poseidon2_B_35_0, poseidon2_B_35_1, poseidon2_B_35_2, poseidon2_B_35_3, poseidon2_B_36_0, poseidon2_B_36_1, poseidon2_B_36_2, poseidon2_B_36_3, poseidon2_B_37_0, poseidon2_B_37_1, poseidon2_B_37_2, poseidon2_B_37_3, poseidon2_B_38_0, poseidon2_B_38_1, poseidon2_B_38_2, poseidon2_B_38_3, poseidon2_B_39_0, poseidon2_B_39_1, poseidon2_B_39_2, poseidon2_B_39_3, poseidon2_B_40_0, poseidon2_B_40_1, poseidon2_B_40_2, poseidon2_B_40_3, poseidon2_B_41_0, poseidon2_B_41_1, poseidon2_B_41_2, poseidon2_B_41_3, poseidon2_B_42_0, poseidon2_B_42_1, poseidon2_B_42_2, poseidon2_B_42_3, poseidon2_B_43_0, poseidon2_B_43_1, poseidon2_B_43_2, poseidon2_B_43_3, poseidon2_B_44_0, poseidon2_B_44_1, poseidon2_B_44_2, poseidon2_B_44_3, poseidon2_B_45_0, poseidon2_B_45_1, poseidon2_B_45_2, poseidon2_B_45_3, poseidon2_B_46_0, poseidon2_B_46_1, poseidon2_B_46_2, poseidon2_B_46_3, poseidon2_B_47_0, poseidon2_B_47_1, poseidon2_B_47_2, poseidon2_B_47_3, poseidon2_B_48_0, poseidon2_B_48_1, poseidon2_B_48_2, poseidon2_B_48_3, poseidon2_B_49_0, poseidon2_B_49_1, poseidon2_B_49_2, poseidon2_B_49_3, poseidon2_B_4_0, poseidon2_B_4_1, poseidon2_B_4_2, poseidon2_B_4_3, poseidon2_B_50_0, poseidon2_B_50_1, poseidon2_B_50_2, poseidon2_B_50_3, poseidon2_B_51_0, poseidon2_B_51_1, poseidon2_B_51_2, poseidon2_B_51_3, poseidon2_B_52_0, poseidon2_B_52_1, poseidon2_B_52_2, poseidon2_B_52_3, poseidon2_B_53_0, poseidon2_B_53_1, poseidon2_B_53_2, poseidon2_B_53_3, poseidon2_B_54_0, poseidon2_B_54_1, poseidon2_B_54_2, poseidon2_B_54_3, poseidon2_B_55_0, poseidon2_B_55_1, poseidon2_B_55_2, poseidon2_B_55_3, poseidon2_B_56_0, poseidon2_B_56_1, poseidon2_B_56_2, poseidon2_B_56_3, poseidon2_B_57_0, poseidon2_B_57_1, poseidon2_B_57_2, poseidon2_B_57_3, poseidon2_B_58_0, poseidon2_B_58_1, poseidon2_B_58_2, poseidon2_B_58_3, poseidon2_B_59_0, poseidon2_B_59_1, poseidon2_B_59_2, poseidon2_B_59_3, poseidon2_B_5_0, poseidon2_B_5_1, poseidon2_B_5_2, poseidon2_B_5_3, poseidon2_B_6_0, poseidon2_B_6_1, poseidon2_B_6_2, poseidon2_B_6_3, poseidon2_B_7_0, poseidon2_B_7_1, poseidon2_B_7_2, poseidon2_B_7_3, poseidon2_B_8_0, poseidon2_B_8_1, poseidon2_B_8_2, poseidon2_B_8_3, poseidon2_B_9_0, poseidon2_B_9_1, poseidon2_B_9_2, poseidon2_B_9_3, poseidon2_EXT_LAYER_4, poseidon2_EXT_LAYER_5, poseidon2_EXT_LAYER_6, poseidon2_EXT_LAYER_7, poseidon2_T_0_4, poseidon2_T_0_5, poseidon2_T_0_6, poseidon2_T_0_7, poseidon2_T_1_4, poseidon2_T_1_5, poseidon2_T_1_6, poseidon2_T_1_7, poseidon2_T_2_4, poseidon2_T_2_5, poseidon2_T_2_6, poseidon2_T_2_7, poseidon2_T_3_4, poseidon2_T_3_5, poseidon2_T_3_6, poseidon2_T_3_7, poseidon2_T_60_4, poseidon2_T_60_5, poseidon2_T_60_6, poseidon2_T_60_7, poseidon2_T_61_4, poseidon2_T_61_5, poseidon2_T_61_6, poseidon2_T_61_7, poseidon2_T_62_4, poseidon2_T_62_5, poseidon2_T_62_6, poseidon2_T_62_7, poseidon2_T_63_4, poseidon2_T_63_5, poseidon2_T_63_6, poseidon2_T_63_7, poseidon2_a_0, poseidon2_a_1, poseidon2_a_2, poseidon2_a_3, poseidon2_b_0, poseidon2_b_1, poseidon2_b_2, poseidon2_b_3, poseidon2_clk, poseidon2_input_addr, poseidon2_mem_addr_read_a, poseidon2_mem_addr_read_b, poseidon2_mem_addr_read_c, poseidon2_mem_addr_read_d, poseidon2_mem_addr_write_a, poseidon2_mem_addr_write_b, poseidon2_mem_addr_write_c, poseidon2_mem_addr_write_d, poseidon2_output_addr, poseidon2_sel_poseidon_perm, range_check_alu_rng_chk, range_check_clk, range_check_cmp_hi_bits_rng_chk, range_check_cmp_lo_bits_rng_chk, range_check_dyn_diff, range_check_dyn_rng_chk_bits, range_check_dyn_rng_chk_pow_2, range_check_gas_da_rng_chk, range_check_gas_l2_rng_chk, range_check_is_lte_u112, range_check_is_lte_u128, range_check_is_lte_u16, range_check_is_lte_u32, range_check_is_lte_u48, range_check_is_lte_u64, range_check_is_lte_u80, range_check_is_lte_u96, range_check_mem_rng_chk, range_check_rng_chk_bits, range_check_sel_lookup_0, range_check_sel_lookup_1, range_check_sel_lookup_2, range_check_sel_lookup_3, range_check_sel_lookup_4, range_check_sel_lookup_5, range_check_sel_lookup_6, range_check_sel_rng_chk, range_check_u16_r0, range_check_u16_r1, range_check_u16_r2, range_check_u16_r3, range_check_u16_r4, range_check_u16_r5, range_check_u16_r6, range_check_u16_r7, range_check_value, sha256_clk, sha256_input, sha256_output, sha256_sel_sha256_compression, sha256_state, slice_addr, slice_clk, slice_cnt, slice_col_offset, slice_one_min_inv, slice_sel_cd_cpy, slice_sel_mem_active, slice_sel_return, slice_sel_start, slice_space_id, slice_val, lookup_rng_chk_pow_2_counts, lookup_rng_chk_diff_counts, lookup_rng_chk_0_counts, lookup_rng_chk_1_counts, lookup_rng_chk_2_counts, lookup_rng_chk_3_counts, lookup_rng_chk_4_counts, lookup_rng_chk_5_counts, lookup_rng_chk_6_counts, lookup_rng_chk_7_counts, lookup_pow_2_0_counts, lookup_pow_2_1_counts, lookup_byte_lengths_counts, lookup_byte_operations_counts, lookup_opcode_gas_counts, kernel_output_lookup_counts, lookup_into_kernel_counts, lookup_cd_value_counts, lookup_ret_value_counts, incl_main_tag_err_counts, incl_mem_tag_err_counts #define DERIVED_WITNESS_ENTITIES perm_rng_mem_inv, perm_rng_cmp_lo_inv, perm_rng_cmp_hi_inv, perm_rng_alu_inv, perm_cmp_alu_inv, perm_rng_gas_l2_inv, perm_rng_gas_da_inv, perm_pos_mem_read_a_inv, perm_pos_mem_read_b_inv, perm_pos_mem_read_c_inv, perm_pos_mem_read_d_inv, perm_pos_mem_write_a_inv, perm_pos_mem_write_b_inv, perm_pos_mem_write_c_inv, perm_pos_mem_write_d_inv, perm_slice_mem_inv, perm_main_alu_inv, perm_main_bin_inv, perm_main_conv_inv, perm_main_pos2_perm_inv, perm_main_pedersen_inv, perm_main_slice_inv, perm_main_mem_a_inv, perm_main_mem_b_inv, perm_main_mem_c_inv, perm_main_mem_d_inv, perm_main_mem_ind_addr_a_inv, perm_main_mem_ind_addr_b_inv, perm_main_mem_ind_addr_c_inv, perm_main_mem_ind_addr_d_inv, lookup_rng_chk_pow_2_inv, lookup_rng_chk_diff_inv, lookup_rng_chk_0_inv, lookup_rng_chk_1_inv, lookup_rng_chk_2_inv, lookup_rng_chk_3_inv, lookup_rng_chk_4_inv, lookup_rng_chk_5_inv, lookup_rng_chk_6_inv, lookup_rng_chk_7_inv, lookup_pow_2_0_inv, lookup_pow_2_1_inv, lookup_byte_lengths_inv, lookup_byte_operations_inv, lookup_opcode_gas_inv, kernel_output_lookup_inv, lookup_into_kernel_inv, lookup_cd_value_inv, lookup_ret_value_inv, incl_main_tag_err_inv, incl_mem_tag_err_inv #define SHIFTED_ENTITIES binary_acc_ia_shift, binary_acc_ib_shift, binary_acc_ic_shift, binary_mem_tag_ctr_shift, binary_op_id_shift, cmp_a_hi_shift, cmp_a_lo_shift, cmp_b_hi_shift, cmp_b_lo_shift, cmp_cmp_rng_ctr_shift, cmp_op_gt_shift, cmp_p_sub_a_hi_shift, cmp_p_sub_a_lo_shift, cmp_p_sub_b_hi_shift, cmp_p_sub_b_lo_shift, cmp_sel_rng_chk_shift, main_da_gas_remaining_shift, main_emit_l2_to_l1_msg_write_offset_shift, main_emit_note_hash_write_offset_shift, main_emit_nullifier_write_offset_shift, main_emit_unencrypted_log_write_offset_shift, main_internal_return_ptr_shift, main_l1_to_l2_msg_exists_write_offset_shift, main_l2_gas_remaining_shift, main_note_hash_exist_write_offset_shift, main_nullifier_exists_write_offset_shift, main_nullifier_non_exists_write_offset_shift, main_pc_shift, main_sel_execution_row_shift, main_sload_write_offset_shift, main_sstore_write_offset_shift, mem_glob_addr_shift, mem_rw_shift, mem_sel_mem_shift, mem_tag_shift, mem_tsp_shift, mem_val_shift, slice_addr_shift, slice_clk_shift, slice_cnt_shift, slice_col_offset_shift, slice_sel_cd_cpy_shift, slice_sel_mem_active_shift, slice_sel_return_shift, slice_sel_start_shift, slice_space_id_shift #define TO_BE_SHIFTED(e) e.binary_acc_ia, e.binary_acc_ib, e.binary_acc_ic, e.binary_mem_tag_ctr, e.binary_op_id, e.cmp_a_hi, e.cmp_a_lo, e.cmp_b_hi, e.cmp_b_lo, e.cmp_cmp_rng_ctr, e.cmp_op_gt, e.cmp_p_sub_a_hi, e.cmp_p_sub_a_lo, e.cmp_p_sub_b_hi, e.cmp_p_sub_b_lo, e.cmp_sel_rng_chk, e.main_da_gas_remaining, e.main_emit_l2_to_l1_msg_write_offset, e.main_emit_note_hash_write_offset, e.main_emit_nullifier_write_offset, e.main_emit_unencrypted_log_write_offset, e.main_internal_return_ptr, e.main_l1_to_l2_msg_exists_write_offset, e.main_l2_gas_remaining, e.main_note_hash_exist_write_offset, e.main_nullifier_exists_write_offset, e.main_nullifier_non_exists_write_offset, e.main_pc, e.main_sel_execution_row, e.main_sload_write_offset, e.main_sstore_write_offset, e.mem_glob_addr, e.mem_rw, e.mem_sel_mem, e.mem_tag, e.mem_tsp, e.mem_val, e.slice_addr, e.slice_clk, e.slice_cnt, e.slice_col_offset, e.slice_sel_cd_cpy, e.slice_sel_mem_active, e.slice_sel_return, e.slice_sel_start, e.slice_space_id @@ -118,12 +119,12 @@ class AvmFlavor { static constexpr bool HasZK = false; static constexpr size_t NUM_PRECOMPUTED_ENTITIES = 16; - static constexpr size_t NUM_WITNESS_ENTITIES = 679; + static constexpr size_t NUM_WITNESS_ENTITIES = 683; static constexpr size_t NUM_SHIFTED_ENTITIES = 46; static constexpr size_t NUM_WIRES = NUM_WITNESS_ENTITIES + NUM_PRECOMPUTED_ENTITIES; // We have two copies of the witness entities, so we subtract the number of fixed ones (they have no shift), one for // the unshifted and one for the shifted - static constexpr size_t NUM_ALL_ENTITIES = 741; + static constexpr size_t NUM_ALL_ENTITIES = 745; // The total number of witnesses including shifts and derived entities. static constexpr size_t NUM_ALL_WITNESS_ENTITIES = NUM_WITNESS_ENTITIES + NUM_SHIFTED_ENTITIES; @@ -223,6 +224,29 @@ class AvmFlavor { static constexpr bool has_zero_row = true; + static constexpr size_t NUM_FRS_COM = field_conversion::calc_num_bn254_frs(); + static constexpr size_t NUM_FRS_FR = field_conversion::calc_num_bn254_frs(); + + // After any circuit changes, hover `COMPUTED_AVM_PROOF_LENGTH_IN_FIELDS` in your IDE + // to see its value and then update `AVM_PROOF_LENGTH_IN_FIELDS` in constants.nr. + static constexpr size_t COMPUTED_AVM_PROOF_LENGTH_IN_FIELDS = + (NUM_WITNESS_ENTITIES + 2) * NUM_FRS_COM + (NUM_ALL_ENTITIES + 1) * NUM_FRS_FR + + CONST_PROOF_SIZE_LOG_N * (NUM_FRS_COM + NUM_FRS_FR * BATCHED_RELATION_PARTIAL_LENGTH); + + static_assert(AVM_PROOF_LENGTH_IN_FIELDS == COMPUTED_AVM_PROOF_LENGTH_IN_FIELDS, + "\nUnexpected AVM proof length. This might be due to some changes in the\n" + "AVM circuit layout. In this case, modify AVM_PROOF_LENGTH_IN_FIELDS \n" + "in constants.nr accordingly."); + + // VK is composed of + // - circuit size encoded as a fr field element + // - num of inputs encoded as a fr field element + // - NUM_PRECOMPUTED_ENTITIES commitments + static_assert(AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS == 2 * NUM_FRS_FR + NUM_PRECOMPUTED_ENTITIES * NUM_FRS_COM, + "\nUnexpected AVM VK length. This might be due to some changes in the\n" + "AVM circuit. In this case, modify AVM_VERIFICATION_LENGTH_IN_FIELDS \n" + "in constants.nr accordingly."); + template class PrecomputedEntities : public PrecomputedEntitiesBase { public: using DataType = DataType_; diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/full_row.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/full_row.cpp index 1f465d4098c..e1ded958f99 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/full_row.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/full_row.cpp @@ -84,6 +84,7 @@ template std::vector AvmFullRow::names() "alu_sel_shift_which", "alu_u128_tag", "alu_u16_tag", + "alu_u1_tag", "alu_u32_tag", "alu_u64_tag", "alu_u8_tag", @@ -129,6 +130,7 @@ template std::vector AvmFullRow::names() "conversion_clk", "conversion_input", "conversion_num_limbs", + "conversion_output_bits", "conversion_radix", "conversion_sel_to_radix_le", "keccakf1600_clk", @@ -221,6 +223,7 @@ template std::vector AvmFullRow::names() "main_sel_op_get_contract_instance", "main_sel_op_internal_call", "main_sel_op_internal_return", + "main_sel_op_is_static_call", "main_sel_op_jump", "main_sel_op_jumpi", "main_sel_op_keccak", @@ -246,6 +249,7 @@ template std::vector AvmFullRow::names() "main_sel_op_shr", "main_sel_op_sload", "main_sel_op_sstore", + "main_sel_op_static_call", "main_sel_op_storage_address", "main_sel_op_sub", "main_sel_op_timestamp", @@ -784,6 +788,7 @@ template RefVector AvmFullRow::as_vector() const alu_sel_shift_which, alu_u128_tag, alu_u16_tag, + alu_u1_tag, alu_u32_tag, alu_u64_tag, alu_u8_tag, @@ -829,6 +834,7 @@ template RefVector AvmFullRow::as_vector() const conversion_clk, conversion_input, conversion_num_limbs, + conversion_output_bits, conversion_radix, conversion_sel_to_radix_le, keccakf1600_clk, @@ -921,6 +927,7 @@ template RefVector AvmFullRow::as_vector() const main_sel_op_get_contract_instance, main_sel_op_internal_call, main_sel_op_internal_return, + main_sel_op_is_static_call, main_sel_op_jump, main_sel_op_jumpi, main_sel_op_keccak, @@ -946,6 +953,7 @@ template RefVector AvmFullRow::as_vector() const main_sel_op_shr, main_sel_op_sload, main_sel_op_sstore, + main_sel_op_static_call, main_sel_op_storage_address, main_sel_op_sub, main_sel_op_timestamp, diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/full_row.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/full_row.hpp index c4bbe015e9c..687678508cc 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/full_row.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/full_row.hpp @@ -75,6 +75,7 @@ template struct AvmFullRow { FF alu_sel_shift_which{}; FF alu_u128_tag{}; FF alu_u16_tag{}; + FF alu_u1_tag{}; FF alu_u32_tag{}; FF alu_u64_tag{}; FF alu_u8_tag{}; @@ -120,6 +121,7 @@ template struct AvmFullRow { FF conversion_clk{}; FF conversion_input{}; FF conversion_num_limbs{}; + FF conversion_output_bits{}; FF conversion_radix{}; FF conversion_sel_to_radix_le{}; FF keccakf1600_clk{}; @@ -212,6 +214,7 @@ template struct AvmFullRow { FF main_sel_op_get_contract_instance{}; FF main_sel_op_internal_call{}; FF main_sel_op_internal_return{}; + FF main_sel_op_is_static_call{}; FF main_sel_op_jump{}; FF main_sel_op_jumpi{}; FF main_sel_op_keccak{}; @@ -237,6 +240,7 @@ template struct AvmFullRow { FF main_sel_op_shr{}; FF main_sel_op_sload{}; FF main_sel_op_sstore{}; + FF main_sel_op_static_call{}; FF main_sel_op_storage_address{}; FF main_sel_op_sub{}; FF main_sel_op_timestamp{}; @@ -709,7 +713,7 @@ template struct AvmFullRow { RefVector as_vector() const; static std::vector names(); - static constexpr size_t SIZE = 695; + static constexpr size_t SIZE = 699; }; template std::ostream& operator<<(std::ostream& os, AvmFullRow const& row); diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/prover.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/prover.cpp index 488bf1fc4b3..4cd03f684a1 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/prover.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/prover.cpp @@ -92,7 +92,6 @@ void AvmProver::execute_log_derivative_inverse_commitments_round() { // Commit to all logderivative inverse polynomials for (auto [commitment, key_poly] : zip_view(witness_commitments.get_derived(), key->get_derived())) { - // We don't use commit_sparse here because the logderivative inverse polynomials are dense commitment = commitment_key->commit(key_poly); } diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/alu.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/alu.hpp index 8cb08635d00..266fca913ec 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/alu.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/alu.hpp @@ -10,10 +10,10 @@ template class aluImpl { public: using FF = FF_; - static constexpr std::array SUBRELATION_PARTIAL_LENGTHS = { 2, 3, 3, 3, 3, 3, 3, 3, 2, 3, 4, 4, - 2, 2, 3, 3, 4, 4, 5, 5, 5, 4, 6, 3, - 3, 3, 5, 5, 4, 6, 4, 3, 3, 3, 2, 3, - 3, 3, 4, 3, 3, 3, 3, 3, 4, 4, 4, 5 }; + static constexpr std::array SUBRELATION_PARTIAL_LENGTHS = { 2, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 4, 4, + 2, 2, 3, 3, 4, 4, 5, 5, 5, 4, 7, 3, 3, + 3, 5, 5, 4, 7, 4, 3, 3, 3, 2, 3, 3, 3, + 4, 3, 3, 3, 3, 3, 4, 4, 4, 5 }; template void static accumulate(ContainerOverSubrelations& evals, @@ -21,11 +21,20 @@ template class aluImpl { [[maybe_unused]] const RelationParameters&, [[maybe_unused]] const FF& scaling_factor) { + const auto constants_MEM_TAG_U1 = FF(1); + const auto constants_MEM_TAG_U8 = FF(2); + const auto constants_MEM_TAG_U16 = FF(3); + const auto constants_MEM_TAG_U32 = FF(4); + const auto constants_MEM_TAG_U64 = FF(5); + const auto constants_MEM_TAG_U128 = FF(6); + const auto constants_MEM_TAG_FF = FF(7); const auto alu_MAX_BITS = - (((((new_term.alu_u8_tag * FF(8)) + (new_term.alu_u16_tag * FF(16))) + (new_term.alu_u32_tag * FF(32))) + + ((((((new_term.alu_u1_tag * FF(1)) + (new_term.alu_u8_tag * FF(8))) + (new_term.alu_u16_tag * FF(16))) + + (new_term.alu_u32_tag * FF(32))) + (new_term.alu_u64_tag * FF(64))) + (new_term.alu_u128_tag * FF(128))); - const auto alu_MAX_BITS_POW = (((((new_term.alu_u8_tag * FF(256)) + (new_term.alu_u16_tag * FF(65536))) + + const auto alu_MAX_BITS_POW = ((((((new_term.alu_u1_tag * FF(2)) + (new_term.alu_u8_tag * FF(256))) + + (new_term.alu_u16_tag * FF(65536))) + (new_term.alu_u32_tag * FF(4294967296UL))) + (new_term.alu_u64_tag * FF(uint256_t{ 0UL, 1UL, 0UL, 0UL }))) + (new_term.alu_u128_tag * FF(uint256_t{ 0UL, 0UL, 1UL, 0UL }))); @@ -35,8 +44,10 @@ template class aluImpl { (new_term.alu_u64_tag * FF(4294967296UL))) + (new_term.alu_u128_tag * FF(uint256_t{ 0UL, 1UL, 0UL, 0UL }))); const auto alu_PRODUCT = - (((new_term.alu_a_lo * new_term.alu_b_lo) + (alu_LIMB_BITS_POW * new_term.alu_partial_prod_lo)) + - (alu_MAX_BITS_POW * (new_term.alu_partial_prod_hi + (new_term.alu_a_hi * new_term.alu_b_hi)))); + ((new_term.alu_a_lo * new_term.alu_b_lo) + + ((FF(1) - new_term.alu_u1_tag) * + ((alu_LIMB_BITS_POW * new_term.alu_partial_prod_lo) + + (alu_MAX_BITS_POW * (new_term.alu_partial_prod_hi + (new_term.alu_a_hi * new_term.alu_b_hi)))))); const auto alu_RESULT = ((new_term.alu_op_add * (new_term.alu_ia + new_term.alu_ib)) + (new_term.alu_op_sub * (new_term.alu_ia - new_term.alu_ib))); const auto alu_NON_TRIVIAL_SHIFT = (FF(1) - new_term.alu_zero_shift); @@ -58,7 +69,7 @@ template class aluImpl { } { using Accumulator = typename std::tuple_element_t<1, ContainerOverSubrelations>; - auto tmp = (new_term.alu_ff_tag * (FF(1) - new_term.alu_ff_tag)); + auto tmp = (new_term.alu_u1_tag * (FF(1) - new_term.alu_u1_tag)); tmp *= scaling_factor; std::get<1>(evals) += typename Accumulator::View(tmp); } @@ -94,27 +105,37 @@ template class aluImpl { } { using Accumulator = typename std::tuple_element_t<7, ContainerOverSubrelations>; - auto tmp = - (new_term.alu_sel_alu * - ((((((new_term.alu_ff_tag + new_term.alu_u8_tag) + new_term.alu_u16_tag) + new_term.alu_u32_tag) + - new_term.alu_u64_tag) + - new_term.alu_u128_tag) - - FF(1))); + auto tmp = (new_term.alu_ff_tag * (FF(1) - new_term.alu_ff_tag)); tmp *= scaling_factor; std::get<7>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<8, ContainerOverSubrelations>; - auto tmp = (new_term.alu_in_tag - - (((((new_term.alu_u8_tag + (FF(2) * new_term.alu_u16_tag)) + (FF(3) * new_term.alu_u32_tag)) + - (FF(4) * new_term.alu_u64_tag)) + - (FF(5) * new_term.alu_u128_tag)) + - (FF(6) * new_term.alu_ff_tag))); + auto tmp = + (new_term.alu_sel_alu * + (((((((new_term.alu_u1_tag + new_term.alu_u8_tag) + new_term.alu_u16_tag) + new_term.alu_u32_tag) + + new_term.alu_u64_tag) + + new_term.alu_u128_tag) + + new_term.alu_ff_tag) - + FF(1))); tmp *= scaling_factor; std::get<8>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<9, ContainerOverSubrelations>; + auto tmp = + (new_term.alu_in_tag - + (((((((constants_MEM_TAG_U1 * new_term.alu_u1_tag) + (constants_MEM_TAG_U8 * new_term.alu_u8_tag)) + + (constants_MEM_TAG_U16 * new_term.alu_u16_tag)) + + (constants_MEM_TAG_U32 * new_term.alu_u32_tag)) + + (constants_MEM_TAG_U64 * new_term.alu_u64_tag)) + + (constants_MEM_TAG_U128 * new_term.alu_u128_tag)) + + (constants_MEM_TAG_FF * new_term.alu_ff_tag))); + tmp *= scaling_factor; + std::get<9>(evals) += typename Accumulator::View(tmp); + } + { + using Accumulator = typename std::tuple_element_t<10, ContainerOverSubrelations>; auto tmp = (new_term.alu_range_check_sel - (((FF(1) - new_term.alu_ff_tag) * @@ -122,10 +143,10 @@ template class aluImpl { new_term.alu_op_div)) + ((new_term.alu_op_shr + new_term.alu_op_shl) * alu_NON_TRIVIAL_SHIFT))); tmp *= scaling_factor; - std::get<9>(evals) += typename Accumulator::View(tmp); + std::get<10>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<10, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<11, ContainerOverSubrelations>; auto tmp = (new_term.alu_range_check_input_value - (((((((new_term.alu_op_add + new_term.alu_op_sub) + new_term.alu_op_mul) + new_term.alu_op_cast) + @@ -134,261 +155,262 @@ template class aluImpl { ((new_term.alu_op_shr * new_term.alu_a_hi) * alu_NON_TRIVIAL_SHIFT)) + ((new_term.alu_op_shl * new_term.alu_a_lo) * alu_NON_TRIVIAL_SHIFT))); tmp *= scaling_factor; - std::get<10>(evals) += typename Accumulator::View(tmp); + std::get<11>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<11, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<12, ContainerOverSubrelations>; auto tmp = (new_term.alu_range_check_num_bits - ((((((new_term.alu_op_add + new_term.alu_op_sub) + new_term.alu_op_mul) + new_term.alu_op_cast) + new_term.alu_op_div) * - (((((new_term.alu_u8_tag * FF(8)) + (new_term.alu_u16_tag * FF(16))) + + ((((((new_term.alu_u1_tag * FF(1)) + (new_term.alu_u8_tag * FF(8))) + + (new_term.alu_u16_tag * FF(16))) + (new_term.alu_u32_tag * FF(32))) + (new_term.alu_u64_tag * FF(64))) + (new_term.alu_u128_tag * FF(128)))) + (((new_term.alu_op_shl + new_term.alu_op_shr) * (alu_MAX_BITS - new_term.alu_ib)) * alu_NON_TRIVIAL_SHIFT))); tmp *= scaling_factor; - std::get<11>(evals) += typename Accumulator::View(tmp); + std::get<12>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<12, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<13, ContainerOverSubrelations>; auto tmp = (new_term.alu_cmp_gadget_gt - ((((new_term.alu_op_lt + new_term.alu_op_lte) + new_term.alu_op_div) + new_term.alu_op_shr) + new_term.alu_op_shl)); tmp *= scaling_factor; - std::get<12>(evals) += typename Accumulator::View(tmp); - } - { - using Accumulator = typename std::tuple_element_t<13, ContainerOverSubrelations>; - auto tmp = (new_term.alu_cmp_gadget_sel - (new_term.alu_cmp_gadget_gt + new_term.alu_op_eq)); - tmp *= scaling_factor; std::get<13>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<14, ContainerOverSubrelations>; - auto tmp = (((new_term.alu_a_lo * new_term.alu_b_hi) + (new_term.alu_b_lo * new_term.alu_a_hi)) - - (new_term.alu_partial_prod_lo + (alu_LIMB_BITS_POW * new_term.alu_partial_prod_hi))); + auto tmp = (new_term.alu_cmp_gadget_sel - (new_term.alu_cmp_gadget_gt + new_term.alu_op_eq)); tmp *= scaling_factor; std::get<14>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<15, ContainerOverSubrelations>; - auto tmp = (new_term.alu_cf * (FF(1) - new_term.alu_cf)); + auto tmp = (((new_term.alu_a_lo * new_term.alu_b_hi) + (new_term.alu_b_lo * new_term.alu_a_hi)) - + (new_term.alu_partial_prod_lo + (alu_LIMB_BITS_POW * new_term.alu_partial_prod_hi))); tmp *= scaling_factor; std::get<15>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<16, ContainerOverSubrelations>; - auto tmp = (new_term.alu_op_add * ((alu_RESULT - new_term.alu_ic) - (new_term.alu_cf * alu_MAX_BITS_POW))); + auto tmp = (new_term.alu_cf * (FF(1) - new_term.alu_cf)); tmp *= scaling_factor; std::get<16>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<17, ContainerOverSubrelations>; - auto tmp = (new_term.alu_op_sub * ((alu_RESULT - new_term.alu_ic) + (new_term.alu_cf * alu_MAX_BITS_POW))); + auto tmp = (new_term.alu_op_add * ((alu_RESULT - new_term.alu_ic) - (new_term.alu_cf * alu_MAX_BITS_POW))); tmp *= scaling_factor; std::get<17>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<18, ContainerOverSubrelations>; - auto tmp = - ((new_term.alu_ff_tag * new_term.alu_op_mul) * ((new_term.alu_ia * new_term.alu_ib) - new_term.alu_ic)); + auto tmp = (new_term.alu_op_sub * ((alu_RESULT - new_term.alu_ic) + (new_term.alu_cf * alu_MAX_BITS_POW))); tmp *= scaling_factor; std::get<18>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<19, ContainerOverSubrelations>; - auto tmp = (((FF(1) - new_term.alu_ff_tag) * new_term.alu_op_mul) * - ((new_term.alu_ia - new_term.alu_a_lo) - (alu_LIMB_BITS_POW * new_term.alu_a_hi))); + auto tmp = + ((new_term.alu_ff_tag * new_term.alu_op_mul) * ((new_term.alu_ia * new_term.alu_ib) - new_term.alu_ic)); tmp *= scaling_factor; std::get<19>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<20, ContainerOverSubrelations>; auto tmp = (((FF(1) - new_term.alu_ff_tag) * new_term.alu_op_mul) * - ((new_term.alu_ib - new_term.alu_b_lo) - (alu_LIMB_BITS_POW * new_term.alu_b_hi))); + ((new_term.alu_ia - new_term.alu_a_lo) - (alu_LIMB_BITS_POW * new_term.alu_a_hi))); tmp *= scaling_factor; std::get<20>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<21, ContainerOverSubrelations>; - auto tmp = (((FF(1) - new_term.alu_ff_tag) * new_term.alu_op_mul) * (new_term.alu_ic - new_term.alu_c_lo)); + auto tmp = (((FF(1) - new_term.alu_ff_tag) * new_term.alu_op_mul) * + ((new_term.alu_ib - new_term.alu_b_lo) - (alu_LIMB_BITS_POW * new_term.alu_b_hi))); tmp *= scaling_factor; std::get<21>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<22, ContainerOverSubrelations>; - auto tmp = (((FF(1) - new_term.alu_ff_tag) * new_term.alu_op_mul) * - (alu_PRODUCT - (new_term.alu_c_lo + (alu_MAX_BITS_POW * new_term.alu_c_hi)))); + auto tmp = (((FF(1) - new_term.alu_ff_tag) * new_term.alu_op_mul) * (new_term.alu_ic - new_term.alu_c_lo)); tmp *= scaling_factor; std::get<22>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<23, ContainerOverSubrelations>; - auto tmp = (new_term.alu_op_div * (new_term.alu_cmp_gadget_input_a - new_term.alu_ib)); + auto tmp = (((FF(1) - new_term.alu_ff_tag) * new_term.alu_op_mul) * + (alu_PRODUCT - (new_term.alu_c_lo + (alu_MAX_BITS_POW * new_term.alu_c_hi)))); tmp *= scaling_factor; std::get<23>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<24, ContainerOverSubrelations>; - auto tmp = (new_term.alu_op_div * (new_term.alu_cmp_gadget_input_b - new_term.alu_remainder)); + auto tmp = (new_term.alu_op_div * (new_term.alu_cmp_gadget_input_a - new_term.alu_ib)); tmp *= scaling_factor; std::get<24>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<25, ContainerOverSubrelations>; - auto tmp = (new_term.alu_op_div * (new_term.alu_cmp_gadget_result - FF(1))); + auto tmp = (new_term.alu_op_div * (new_term.alu_cmp_gadget_input_b - new_term.alu_remainder)); tmp *= scaling_factor; std::get<25>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<26, ContainerOverSubrelations>; - auto tmp = (((FF(1) - new_term.alu_ff_tag) * new_term.alu_op_div) * - ((new_term.alu_ib - new_term.alu_a_lo) - (alu_LIMB_BITS_POW * new_term.alu_a_hi))); + auto tmp = (new_term.alu_op_div * (new_term.alu_cmp_gadget_result - FF(1))); tmp *= scaling_factor; std::get<26>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<27, ContainerOverSubrelations>; auto tmp = (((FF(1) - new_term.alu_ff_tag) * new_term.alu_op_div) * - ((new_term.alu_ic - new_term.alu_b_lo) - (alu_LIMB_BITS_POW * new_term.alu_b_hi))); + ((new_term.alu_ib - new_term.alu_a_lo) - (alu_LIMB_BITS_POW * new_term.alu_a_hi))); tmp *= scaling_factor; std::get<27>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<28, ContainerOverSubrelations>; - auto tmp = (((FF(1) - new_term.alu_ff_tag) * new_term.alu_op_div) * (new_term.alu_ia - new_term.alu_c_lo)); + auto tmp = (((FF(1) - new_term.alu_ff_tag) * new_term.alu_op_div) * + ((new_term.alu_ic - new_term.alu_b_lo) - (alu_LIMB_BITS_POW * new_term.alu_b_hi))); tmp *= scaling_factor; std::get<28>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<29, ContainerOverSubrelations>; - auto tmp = (((FF(1) - new_term.alu_ff_tag) * new_term.alu_op_div) * - (alu_PRODUCT - - ((new_term.alu_c_lo - new_term.alu_remainder) + (alu_MAX_BITS_POW * new_term.alu_c_hi)))); + auto tmp = (((FF(1) - new_term.alu_ff_tag) * new_term.alu_op_div) * (new_term.alu_ia - new_term.alu_c_lo)); tmp *= scaling_factor; std::get<29>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<30, ContainerOverSubrelations>; - auto tmp = (((FF(1) - new_term.alu_ff_tag) * new_term.alu_op_not) * - ((new_term.alu_ia + new_term.alu_ic) - alu_UINT_MAX)); + auto tmp = (((FF(1) - new_term.alu_ff_tag) * new_term.alu_op_div) * + (alu_PRODUCT - + ((new_term.alu_c_lo - new_term.alu_remainder) + (alu_MAX_BITS_POW * new_term.alu_c_hi)))); tmp *= scaling_factor; std::get<30>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<31, ContainerOverSubrelations>; - auto tmp = (new_term.alu_op_eq * (new_term.alu_ia - new_term.alu_cmp_gadget_input_a)); + auto tmp = (((FF(1) - new_term.alu_ff_tag) * new_term.alu_op_not) * + ((new_term.alu_ia + new_term.alu_ic) - alu_UINT_MAX)); tmp *= scaling_factor; std::get<31>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<32, ContainerOverSubrelations>; - auto tmp = (new_term.alu_op_eq * (new_term.alu_ib - new_term.alu_cmp_gadget_input_b)); + auto tmp = (new_term.alu_op_eq * (new_term.alu_ia - new_term.alu_cmp_gadget_input_a)); tmp *= scaling_factor; std::get<32>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<33, ContainerOverSubrelations>; - auto tmp = (new_term.alu_op_eq * (new_term.alu_ic - new_term.alu_cmp_gadget_result)); + auto tmp = (new_term.alu_op_eq * (new_term.alu_ib - new_term.alu_cmp_gadget_input_b)); tmp *= scaling_factor; std::get<33>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<34, ContainerOverSubrelations>; - auto tmp = (new_term.alu_sel_cmp - (new_term.alu_op_lt + new_term.alu_op_lte)); + auto tmp = (new_term.alu_op_eq * (new_term.alu_ic - new_term.alu_cmp_gadget_result)); tmp *= scaling_factor; std::get<34>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<35, ContainerOverSubrelations>; - auto tmp = ((new_term.alu_op_lt * (new_term.alu_ib - new_term.alu_cmp_gadget_input_a)) + - (new_term.alu_op_lte * (new_term.alu_ia - new_term.alu_cmp_gadget_input_a))); + auto tmp = (new_term.alu_sel_cmp - (new_term.alu_op_lt + new_term.alu_op_lte)); tmp *= scaling_factor; std::get<35>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<36, ContainerOverSubrelations>; - auto tmp = ((new_term.alu_op_lt * (new_term.alu_ia - new_term.alu_cmp_gadget_input_b)) + - (new_term.alu_op_lte * (new_term.alu_ib - new_term.alu_cmp_gadget_input_b))); + auto tmp = ((new_term.alu_op_lt * (new_term.alu_ib - new_term.alu_cmp_gadget_input_a)) + + (new_term.alu_op_lte * (new_term.alu_ia - new_term.alu_cmp_gadget_input_a))); tmp *= scaling_factor; std::get<36>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<37, ContainerOverSubrelations>; - auto tmp = ((new_term.alu_op_lte * ((FF(1) - new_term.alu_cmp_gadget_result) - new_term.alu_ic)) + - (new_term.alu_op_lt * (new_term.alu_cmp_gadget_result - new_term.alu_ic))); + auto tmp = ((new_term.alu_op_lt * (new_term.alu_ia - new_term.alu_cmp_gadget_input_b)) + + (new_term.alu_op_lte * (new_term.alu_ib - new_term.alu_cmp_gadget_input_b))); tmp *= scaling_factor; std::get<37>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<38, ContainerOverSubrelations>; - auto tmp = (new_term.alu_op_cast * - ((new_term.alu_ia - new_term.alu_a_lo) - (alu_MAX_BITS_POW * new_term.alu_a_hi))); + auto tmp = ((new_term.alu_op_lte * ((FF(1) - new_term.alu_cmp_gadget_result) - new_term.alu_ic)) + + (new_term.alu_op_lt * (new_term.alu_cmp_gadget_result - new_term.alu_ic))); tmp *= scaling_factor; std::get<38>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<39, ContainerOverSubrelations>; - auto tmp = (new_term.alu_op_cast * (new_term.alu_ic - new_term.alu_a_lo)); + auto tmp = (new_term.alu_op_cast * + ((new_term.alu_ia - new_term.alu_a_lo) - (alu_MAX_BITS_POW * new_term.alu_a_hi))); tmp *= scaling_factor; std::get<39>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<40, ContainerOverSubrelations>; - auto tmp = - ((new_term.alu_op_shl + new_term.alu_op_shr) * (new_term.alu_cmp_gadget_input_a - new_term.alu_ib)); + auto tmp = (new_term.alu_op_cast * (new_term.alu_ic - new_term.alu_a_lo)); tmp *= scaling_factor; std::get<40>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<41, ContainerOverSubrelations>; - auto tmp = ((new_term.alu_op_shl + new_term.alu_op_shr) * - (new_term.alu_cmp_gadget_input_b - (alu_MAX_BITS - FF(1)))); + auto tmp = + ((new_term.alu_op_shl + new_term.alu_op_shr) * (new_term.alu_cmp_gadget_input_a - new_term.alu_ib)); tmp *= scaling_factor; std::get<41>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<42, ContainerOverSubrelations>; auto tmp = ((new_term.alu_op_shl + new_term.alu_op_shr) * - (new_term.alu_zero_shift - new_term.alu_cmp_gadget_result)); + (new_term.alu_cmp_gadget_input_b - (alu_MAX_BITS - FF(1)))); tmp *= scaling_factor; std::get<42>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<43, ContainerOverSubrelations>; - auto tmp = - (new_term.alu_sel_shift_which - ((new_term.alu_op_shr + new_term.alu_op_shl) * alu_NON_TRIVIAL_SHIFT)); + auto tmp = ((new_term.alu_op_shl + new_term.alu_op_shr) * + (new_term.alu_zero_shift - new_term.alu_cmp_gadget_result)); tmp *= scaling_factor; std::get<43>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<44, ContainerOverSubrelations>; - auto tmp = (new_term.alu_op_shr * - ((new_term.alu_ia - new_term.alu_a_lo) - (new_term.alu_b_pow * new_term.alu_a_hi))); + auto tmp = + (new_term.alu_sel_shift_which - ((new_term.alu_op_shr + new_term.alu_op_shl) * alu_NON_TRIVIAL_SHIFT)); tmp *= scaling_factor; std::get<44>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<45, ContainerOverSubrelations>; - auto tmp = (new_term.alu_op_shr * (new_term.alu_ic - (new_term.alu_a_hi * alu_NON_TRIVIAL_SHIFT))); + auto tmp = (new_term.alu_op_shr * + ((new_term.alu_ia - new_term.alu_a_lo) - (new_term.alu_b_pow * new_term.alu_a_hi))); tmp *= scaling_factor; std::get<45>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<46, ContainerOverSubrelations>; - auto tmp = (new_term.alu_op_shl * ((new_term.alu_ia - new_term.alu_a_lo) - - (new_term.alu_max_bits_sub_b_pow * new_term.alu_a_hi))); + auto tmp = (new_term.alu_op_shr * (new_term.alu_ic - (new_term.alu_a_hi * alu_NON_TRIVIAL_SHIFT))); tmp *= scaling_factor; std::get<46>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<47, ContainerOverSubrelations>; + auto tmp = (new_term.alu_op_shl * ((new_term.alu_ia - new_term.alu_a_lo) - + (new_term.alu_max_bits_sub_b_pow * new_term.alu_a_hi))); + tmp *= scaling_factor; + std::get<47>(evals) += typename Accumulator::View(tmp); + } + { + using Accumulator = typename std::tuple_element_t<48, ContainerOverSubrelations>; auto tmp = (new_term.alu_op_shl * (new_term.alu_ic - ((new_term.alu_a_lo * new_term.alu_b_pow) * alu_NON_TRIVIAL_SHIFT))); tmp *= scaling_factor; - std::get<47>(evals) += typename Accumulator::View(tmp); + std::get<48>(evals) += typename Accumulator::View(tmp); } } }; @@ -400,13 +422,13 @@ template class alu : public Relation> { static std::string get_subrelation_label(size_t index) { switch (index) { - case 18: + case 19: return "ALU_MULTIPLICATION_FF"; - case 22: + case 23: return "ALU_PROD_MUL"; - case 29: - return "DIVISION_RELATION"; case 30: + return "DIVISION_RELATION"; + case 31: return "ALU_OP_NOT"; } return std::to_string(index); diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/gas.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/gas.hpp index d6e25061183..f6b12a808b5 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/gas.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/gas.hpp @@ -33,7 +33,8 @@ template class gasImpl { } { using Accumulator = typename std::tuple_element_t<2, ContainerOverSubrelations>; - auto tmp = ((new_term.main_sel_execution_row * (FF(1) - new_term.main_sel_op_external_call)) * + auto tmp = ((new_term.main_sel_execution_row * + ((FF(1) - new_term.main_sel_op_external_call) - new_term.main_sel_op_static_call)) * (((new_term.main_l2_gas_remaining_shift - new_term.main_l2_gas_remaining) + new_term.main_base_l2_gas_op_cost) + (new_term.main_dyn_l2_gas_op_cost * new_term.main_dyn_gas_multiplier))); @@ -42,7 +43,8 @@ template class gasImpl { } { using Accumulator = typename std::tuple_element_t<3, ContainerOverSubrelations>; - auto tmp = ((new_term.main_sel_execution_row * (FF(1) - new_term.main_sel_op_external_call)) * + auto tmp = ((new_term.main_sel_execution_row * + ((FF(1) - new_term.main_sel_op_external_call) - new_term.main_sel_op_static_call)) * (((new_term.main_da_gas_remaining_shift - new_term.main_da_gas_remaining) + new_term.main_base_da_gas_op_cost) + (new_term.main_dyn_da_gas_op_cost * new_term.main_dyn_gas_multiplier))); diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/kernel.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/kernel.hpp index 1542c964bff..eefe05d9e71 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/kernel.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/kernel.hpp @@ -10,9 +10,9 @@ template class kernelImpl { public: using FF = FF_; - static constexpr std::array SUBRELATION_PARTIAL_LENGTHS = { 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }; + static constexpr std::array SUBRELATION_PARTIAL_LENGTHS = { 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }; template void static accumulate(ContainerOverSubrelations& evals, @@ -24,6 +24,7 @@ template class kernelImpl { const auto constants_ADDRESS_SELECTOR = FF(1); const auto constants_STORAGE_ADDRESS_SELECTOR = FF(1); const auto constants_FUNCTION_SELECTOR_SELECTOR = FF(2); + const auto constants_IS_STATIC_CALL_SELECTOR = FF(4); const auto constants_CHAIN_ID_SELECTOR = FF(29); const auto constants_VERSION_SELECTOR = FF(30); const auto constants_BLOCK_NUMBER_SELECTOR = FF(31); @@ -42,16 +43,17 @@ template class kernelImpl { const auto constants_START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET = FF(160); const auto constants_START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET = FF(162); const auto main_KERNEL_INPUT_SELECTORS = - ((((((((((new_term.main_sel_op_address + new_term.main_sel_op_storage_address) + - new_term.main_sel_op_sender) + - new_term.main_sel_op_function_selector) + - new_term.main_sel_op_transaction_fee) + - new_term.main_sel_op_chain_id) + - new_term.main_sel_op_version) + - new_term.main_sel_op_block_number) + - new_term.main_sel_op_timestamp) + - new_term.main_sel_op_fee_per_l2_gas) + - new_term.main_sel_op_fee_per_da_gas); + (((((((((((new_term.main_sel_op_address + new_term.main_sel_op_storage_address) + + new_term.main_sel_op_sender) + + new_term.main_sel_op_function_selector) + + new_term.main_sel_op_transaction_fee) + + new_term.main_sel_op_chain_id) + + new_term.main_sel_op_version) + + new_term.main_sel_op_block_number) + + new_term.main_sel_op_timestamp) + + new_term.main_sel_op_fee_per_l2_gas) + + new_term.main_sel_op_fee_per_da_gas) + + new_term.main_sel_op_is_static_call); const auto main_KERNEL_OUTPUT_SELECTORS = ((((((((new_term.main_sel_op_note_hash_exists + new_term.main_sel_op_emit_note_hash) + new_term.main_sel_op_nullifier_exists) + @@ -180,74 +182,81 @@ template class kernelImpl { } { using Accumulator = typename std::tuple_element_t<15, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_chain_id * (new_term.main_kernel_in_offset - constants_CHAIN_ID_SELECTOR)); + auto tmp = (new_term.main_sel_op_is_static_call * + (new_term.main_kernel_in_offset - constants_IS_STATIC_CALL_SELECTOR)); tmp *= scaling_factor; std::get<15>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<16, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_version * (new_term.main_kernel_in_offset - constants_VERSION_SELECTOR)); + auto tmp = (new_term.main_sel_op_chain_id * (new_term.main_kernel_in_offset - constants_CHAIN_ID_SELECTOR)); tmp *= scaling_factor; std::get<16>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<17, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_block_number * - (new_term.main_kernel_in_offset - constants_BLOCK_NUMBER_SELECTOR)); + auto tmp = (new_term.main_sel_op_version * (new_term.main_kernel_in_offset - constants_VERSION_SELECTOR)); tmp *= scaling_factor; std::get<17>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<18, ContainerOverSubrelations>; - auto tmp = - (new_term.main_sel_op_timestamp * (new_term.main_kernel_in_offset - constants_TIMESTAMP_SELECTOR)); + auto tmp = (new_term.main_sel_op_block_number * + (new_term.main_kernel_in_offset - constants_BLOCK_NUMBER_SELECTOR)); tmp *= scaling_factor; std::get<18>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<19, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_fee_per_da_gas * - (new_term.main_kernel_in_offset - constants_FEE_PER_DA_GAS_SELECTOR)); + auto tmp = + (new_term.main_sel_op_timestamp * (new_term.main_kernel_in_offset - constants_TIMESTAMP_SELECTOR)); tmp *= scaling_factor; std::get<19>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<20, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_fee_per_l2_gas * - (new_term.main_kernel_in_offset - constants_FEE_PER_L2_GAS_SELECTOR)); + auto tmp = (new_term.main_sel_op_fee_per_da_gas * + (new_term.main_kernel_in_offset - constants_FEE_PER_DA_GAS_SELECTOR)); tmp *= scaling_factor; std::get<20>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<21, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_note_hash_exists * - (new_term.main_kernel_out_offset - - (constants_START_NOTE_HASH_EXISTS_WRITE_OFFSET + new_term.main_note_hash_exist_write_offset))); + auto tmp = (new_term.main_sel_op_fee_per_l2_gas * + (new_term.main_kernel_in_offset - constants_FEE_PER_L2_GAS_SELECTOR)); tmp *= scaling_factor; std::get<21>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<22, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_first * new_term.main_note_hash_exist_write_offset); + auto tmp = (new_term.main_sel_op_note_hash_exists * + (new_term.main_kernel_out_offset - + (constants_START_NOTE_HASH_EXISTS_WRITE_OFFSET + new_term.main_note_hash_exist_write_offset))); tmp *= scaling_factor; std::get<22>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<23, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_emit_note_hash * - (new_term.main_kernel_out_offset - - (constants_START_EMIT_NOTE_HASH_WRITE_OFFSET + new_term.main_emit_note_hash_write_offset))); + auto tmp = (new_term.main_sel_first * new_term.main_note_hash_exist_write_offset); tmp *= scaling_factor; std::get<23>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<24, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_first * new_term.main_emit_note_hash_write_offset); + auto tmp = (new_term.main_sel_op_emit_note_hash * + (new_term.main_kernel_out_offset - + (constants_START_EMIT_NOTE_HASH_WRITE_OFFSET + new_term.main_emit_note_hash_write_offset))); tmp *= scaling_factor; std::get<24>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<25, ContainerOverSubrelations>; + auto tmp = (new_term.main_sel_first * new_term.main_emit_note_hash_write_offset); + tmp *= scaling_factor; + std::get<25>(evals) += typename Accumulator::View(tmp); + } + { + using Accumulator = typename std::tuple_element_t<26, ContainerOverSubrelations>; auto tmp = (new_term.main_sel_op_nullifier_exists * (new_term.main_kernel_out_offset - ((new_term.main_ib * @@ -255,116 +264,116 @@ template class kernelImpl { ((FF(1) - new_term.main_ib) * (constants_START_NULLIFIER_NON_EXISTS_OFFSET + new_term.main_nullifier_non_exists_write_offset))))); tmp *= scaling_factor; - std::get<25>(evals) += typename Accumulator::View(tmp); - } - { - using Accumulator = typename std::tuple_element_t<26, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_first * new_term.main_nullifier_exists_write_offset); - tmp *= scaling_factor; std::get<26>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<27, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_first * new_term.main_nullifier_non_exists_write_offset); + auto tmp = (new_term.main_sel_first * new_term.main_nullifier_exists_write_offset); tmp *= scaling_factor; std::get<27>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<28, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_emit_nullifier * - (new_term.main_kernel_out_offset - - (constants_START_EMIT_NULLIFIER_WRITE_OFFSET + new_term.main_emit_nullifier_write_offset))); + auto tmp = (new_term.main_sel_first * new_term.main_nullifier_non_exists_write_offset); tmp *= scaling_factor; std::get<28>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<29, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_first * new_term.main_emit_nullifier_write_offset); + auto tmp = (new_term.main_sel_op_emit_nullifier * + (new_term.main_kernel_out_offset - + (constants_START_EMIT_NULLIFIER_WRITE_OFFSET + new_term.main_emit_nullifier_write_offset))); tmp *= scaling_factor; std::get<29>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<30, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_l1_to_l2_msg_exists * - (new_term.main_kernel_out_offset - (constants_START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET + - new_term.main_l1_to_l2_msg_exists_write_offset))); + auto tmp = (new_term.main_sel_first * new_term.main_emit_nullifier_write_offset); tmp *= scaling_factor; std::get<30>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<31, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_first * new_term.main_l1_to_l2_msg_exists_write_offset); + auto tmp = (new_term.main_sel_op_l1_to_l2_msg_exists * + (new_term.main_kernel_out_offset - (constants_START_L1_TO_L2_MSG_EXISTS_WRITE_OFFSET + + new_term.main_l1_to_l2_msg_exists_write_offset))); tmp *= scaling_factor; std::get<31>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<32, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_emit_unencrypted_log * - (new_term.main_kernel_out_offset - (constants_START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET + - new_term.main_emit_unencrypted_log_write_offset))); + auto tmp = (new_term.main_sel_first * new_term.main_l1_to_l2_msg_exists_write_offset); tmp *= scaling_factor; std::get<32>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<33, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_first * new_term.main_emit_unencrypted_log_write_offset); + auto tmp = (new_term.main_sel_op_emit_unencrypted_log * + (new_term.main_kernel_out_offset - (constants_START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET + + new_term.main_emit_unencrypted_log_write_offset))); tmp *= scaling_factor; std::get<33>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<34, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_emit_l2_to_l1_msg * - (new_term.main_kernel_out_offset - (constants_START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET + - new_term.main_emit_l2_to_l1_msg_write_offset))); + auto tmp = (new_term.main_sel_first * new_term.main_emit_unencrypted_log_write_offset); tmp *= scaling_factor; std::get<34>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<35, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_first * new_term.main_emit_l2_to_l1_msg_write_offset); + auto tmp = (new_term.main_sel_op_emit_l2_to_l1_msg * + (new_term.main_kernel_out_offset - (constants_START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET + + new_term.main_emit_l2_to_l1_msg_write_offset))); tmp *= scaling_factor; std::get<35>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<36, ContainerOverSubrelations>; - auto tmp = - (new_term.main_sel_op_sload * (new_term.main_kernel_out_offset - (constants_START_SLOAD_WRITE_OFFSET + - new_term.main_sload_write_offset))); + auto tmp = (new_term.main_sel_first * new_term.main_emit_l2_to_l1_msg_write_offset); tmp *= scaling_factor; std::get<36>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<37, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_first * new_term.main_sload_write_offset); + auto tmp = + (new_term.main_sel_op_sload * (new_term.main_kernel_out_offset - (constants_START_SLOAD_WRITE_OFFSET + + new_term.main_sload_write_offset))); tmp *= scaling_factor; std::get<37>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<38, ContainerOverSubrelations>; - auto tmp = - (new_term.main_sel_op_sstore * (new_term.main_kernel_out_offset - (constants_START_SSTORE_WRITE_OFFSET + - new_term.main_sstore_write_offset))); + auto tmp = (new_term.main_sel_first * new_term.main_sload_write_offset); tmp *= scaling_factor; std::get<38>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<39, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_first * new_term.main_sstore_write_offset); + auto tmp = + (new_term.main_sel_op_sstore * (new_term.main_kernel_out_offset - (constants_START_SSTORE_WRITE_OFFSET + + new_term.main_sstore_write_offset))); tmp *= scaling_factor; std::get<39>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<40, ContainerOverSubrelations>; - auto tmp = (main_KERNEL_INPUT_SELECTORS * (FF(1) - new_term.main_sel_q_kernel_lookup)); + auto tmp = (new_term.main_sel_first * new_term.main_sstore_write_offset); tmp *= scaling_factor; std::get<40>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<41, ContainerOverSubrelations>; - auto tmp = (main_KERNEL_OUTPUT_SELECTORS * (FF(1) - new_term.main_sel_q_kernel_output_lookup)); + auto tmp = (main_KERNEL_INPUT_SELECTORS * (FF(1) - new_term.main_sel_q_kernel_lookup)); tmp *= scaling_factor; std::get<41>(evals) += typename Accumulator::View(tmp); } + { + using Accumulator = typename std::tuple_element_t<42, ContainerOverSubrelations>; + auto tmp = (main_KERNEL_OUTPUT_SELECTORS * (FF(1) - new_term.main_sel_q_kernel_output_lookup)); + tmp *= scaling_factor; + std::get<42>(evals) += typename Accumulator::View(tmp); + } } }; @@ -406,38 +415,40 @@ template class kernel : public Relation> { case 14: return "FEE_TRANSACTION_FEE_KERNEL"; case 15: - return "CHAIN_ID_KERNEL"; + return "IS_STATIC_CALL_KERNEL"; case 16: - return "VERSION_KERNEL"; + return "CHAIN_ID_KERNEL"; case 17: - return "BLOCK_NUMBER_KERNEL"; + return "VERSION_KERNEL"; case 18: - return "TIMESTAMP_KERNEL"; + return "BLOCK_NUMBER_KERNEL"; case 19: - return "FEE_DA_GAS_KERNEL"; + return "TIMESTAMP_KERNEL"; case 20: - return "FEE_L2_GAS_KERNEL"; + return "FEE_DA_GAS_KERNEL"; case 21: + return "FEE_L2_GAS_KERNEL"; + case 22: return "NOTE_HASH_KERNEL_OUTPUT"; - case 23: + case 24: return "EMIT_NOTE_HASH_KERNEL_OUTPUT"; - case 25: + case 26: return "NULLIFIER_EXISTS_KERNEL_OUTPUT"; - case 28: + case 29: return "EMIT_NULLIFIER_KERNEL_OUTPUT"; - case 30: + case 31: return "L1_TO_L2_MSG_EXISTS_KERNEL_OUTPUT"; - case 32: + case 33: return "EMIT_UNENCRYPTED_LOG_KERNEL_OUTPUT"; - case 34: + case 35: return "EMIT_L2_TO_L1_MSGS_KERNEL_OUTPUT"; - case 36: + case 37: return "SLOAD_KERNEL_OUTPUT"; - case 38: + case 39: return "SSTORE_KERNEL_OUTPUT"; - case 40: - return "KERNEL_INPUT_ACTIVE_CHECK"; case 41: + return "KERNEL_INPUT_ACTIVE_CHECK"; + case 42: return "KERNEL_OUTPUT_ACTIVE_CHECK"; } return std::to_string(index); diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/main.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/main.hpp index 146bb6d1bc2..a10bb223f4e 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/main.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/main.hpp @@ -10,11 +10,11 @@ template class mainImpl { public: using FF = FF_; - static constexpr std::array SUBRELATION_PARTIAL_LENGTHS = { + static constexpr std::array SUBRELATION_PARTIAL_LENGTHS = { 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 4, 4, 3, 3, 3, 3, 4, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 5, 5, 3, 3, 4, 4, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 4, 2, 2 + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 4, 4, 3, 3, 3, 3, 4, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 3, 3, 4, 4, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 4, 2, 2 }; template @@ -23,18 +23,21 @@ template class mainImpl { [[maybe_unused]] const RelationParameters&, [[maybe_unused]] const FF& scaling_factor) { + const auto constants_MEM_TAG_U1 = FF(1); + const auto constants_MEM_TAG_FF = FF(7); const auto constants_misc_INTERNAL_CALL_SPACE_ID = FF(255); const auto main_KERNEL_INPUT_SELECTORS = - ((((((((((new_term.main_sel_op_address + new_term.main_sel_op_storage_address) + - new_term.main_sel_op_sender) + - new_term.main_sel_op_function_selector) + - new_term.main_sel_op_transaction_fee) + - new_term.main_sel_op_chain_id) + - new_term.main_sel_op_version) + - new_term.main_sel_op_block_number) + - new_term.main_sel_op_timestamp) + - new_term.main_sel_op_fee_per_l2_gas) + - new_term.main_sel_op_fee_per_da_gas); + (((((((((((new_term.main_sel_op_address + new_term.main_sel_op_storage_address) + + new_term.main_sel_op_sender) + + new_term.main_sel_op_function_selector) + + new_term.main_sel_op_transaction_fee) + + new_term.main_sel_op_chain_id) + + new_term.main_sel_op_version) + + new_term.main_sel_op_block_number) + + new_term.main_sel_op_timestamp) + + new_term.main_sel_op_fee_per_l2_gas) + + new_term.main_sel_op_fee_per_da_gas) + + new_term.main_sel_op_is_static_call); const auto main_KERNEL_OUTPUT_SELECTORS = ((((((((new_term.main_sel_op_note_hash_exists + new_term.main_sel_op_emit_note_hash) + new_term.main_sel_op_nullifier_exists) + @@ -45,9 +48,10 @@ template class mainImpl { new_term.main_sel_op_sload) + new_term.main_sel_op_sstore); const auto main_SEL_ALL_CTRL_FLOW = - (((((new_term.main_sel_op_jump + new_term.main_sel_op_jumpi) + new_term.main_sel_op_internal_call) + - new_term.main_sel_op_internal_return) + - new_term.main_sel_op_external_call) + + ((((((new_term.main_sel_op_jump + new_term.main_sel_op_jumpi) + new_term.main_sel_op_internal_call) + + new_term.main_sel_op_internal_return) + + new_term.main_sel_op_external_call) + + new_term.main_sel_op_static_call) + new_term.main_sel_op_external_return); const auto main_SEL_ALU_R_TAG = (((((((((new_term.main_sel_op_add + new_term.main_sel_op_sub) + new_term.main_sel_op_mul) + @@ -165,627 +169,639 @@ template class mainImpl { } { using Accumulator = typename std::tuple_element_t<13, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_l2gasleft * (FF(1) - new_term.main_sel_op_l2gasleft)); + auto tmp = (new_term.main_sel_op_is_static_call * (FF(1) - new_term.main_sel_op_is_static_call)); tmp *= scaling_factor; std::get<13>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<14, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_dagasleft * (FF(1) - new_term.main_sel_op_dagasleft)); + auto tmp = (new_term.main_sel_op_l2gasleft * (FF(1) - new_term.main_sel_op_l2gasleft)); tmp *= scaling_factor; std::get<14>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<15, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_note_hash_exists * (FF(1) - new_term.main_sel_op_note_hash_exists)); + auto tmp = (new_term.main_sel_op_dagasleft * (FF(1) - new_term.main_sel_op_dagasleft)); tmp *= scaling_factor; std::get<15>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<16, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_emit_note_hash * (FF(1) - new_term.main_sel_op_emit_note_hash)); + auto tmp = (new_term.main_sel_op_note_hash_exists * (FF(1) - new_term.main_sel_op_note_hash_exists)); tmp *= scaling_factor; std::get<16>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<17, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_nullifier_exists * (FF(1) - new_term.main_sel_op_nullifier_exists)); + auto tmp = (new_term.main_sel_op_emit_note_hash * (FF(1) - new_term.main_sel_op_emit_note_hash)); tmp *= scaling_factor; std::get<17>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<18, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_emit_nullifier * (FF(1) - new_term.main_sel_op_emit_nullifier)); + auto tmp = (new_term.main_sel_op_nullifier_exists * (FF(1) - new_term.main_sel_op_nullifier_exists)); tmp *= scaling_factor; std::get<18>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<19, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_l1_to_l2_msg_exists * (FF(1) - new_term.main_sel_op_l1_to_l2_msg_exists)); + auto tmp = (new_term.main_sel_op_emit_nullifier * (FF(1) - new_term.main_sel_op_emit_nullifier)); tmp *= scaling_factor; std::get<19>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<20, ContainerOverSubrelations>; - auto tmp = - (new_term.main_sel_op_emit_unencrypted_log * (FF(1) - new_term.main_sel_op_emit_unencrypted_log)); + auto tmp = (new_term.main_sel_op_l1_to_l2_msg_exists * (FF(1) - new_term.main_sel_op_l1_to_l2_msg_exists)); tmp *= scaling_factor; std::get<20>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<21, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_emit_l2_to_l1_msg * (FF(1) - new_term.main_sel_op_emit_l2_to_l1_msg)); + auto tmp = + (new_term.main_sel_op_emit_unencrypted_log * (FF(1) - new_term.main_sel_op_emit_unencrypted_log)); tmp *= scaling_factor; std::get<21>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<22, ContainerOverSubrelations>; - auto tmp = - (new_term.main_sel_op_get_contract_instance * (FF(1) - new_term.main_sel_op_get_contract_instance)); + auto tmp = (new_term.main_sel_op_emit_l2_to_l1_msg * (FF(1) - new_term.main_sel_op_emit_l2_to_l1_msg)); tmp *= scaling_factor; std::get<22>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<23, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_sload * (FF(1) - new_term.main_sel_op_sload)); + auto tmp = + (new_term.main_sel_op_get_contract_instance * (FF(1) - new_term.main_sel_op_get_contract_instance)); tmp *= scaling_factor; std::get<23>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<24, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_sstore * (FF(1) - new_term.main_sel_op_sstore)); + auto tmp = (new_term.main_sel_op_sload * (FF(1) - new_term.main_sel_op_sload)); tmp *= scaling_factor; std::get<24>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<25, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_radix_le * (FF(1) - new_term.main_sel_op_radix_le)); + auto tmp = (new_term.main_sel_op_sstore * (FF(1) - new_term.main_sel_op_sstore)); tmp *= scaling_factor; std::get<25>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<26, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_sha256 * (FF(1) - new_term.main_sel_op_sha256)); + auto tmp = (new_term.main_sel_op_radix_le * (FF(1) - new_term.main_sel_op_radix_le)); tmp *= scaling_factor; std::get<26>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<27, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_poseidon2 * (FF(1) - new_term.main_sel_op_poseidon2)); + auto tmp = (new_term.main_sel_op_sha256 * (FF(1) - new_term.main_sel_op_sha256)); tmp *= scaling_factor; std::get<27>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<28, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_keccak * (FF(1) - new_term.main_sel_op_keccak)); + auto tmp = (new_term.main_sel_op_poseidon2 * (FF(1) - new_term.main_sel_op_poseidon2)); tmp *= scaling_factor; std::get<28>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<29, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_pedersen * (FF(1) - new_term.main_sel_op_pedersen)); + auto tmp = (new_term.main_sel_op_keccak * (FF(1) - new_term.main_sel_op_keccak)); tmp *= scaling_factor; std::get<29>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<30, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_ecadd * (FF(1) - new_term.main_sel_op_ecadd)); + auto tmp = (new_term.main_sel_op_pedersen * (FF(1) - new_term.main_sel_op_pedersen)); tmp *= scaling_factor; std::get<30>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<31, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_pedersen_commit * (FF(1) - new_term.main_sel_op_pedersen_commit)); + auto tmp = (new_term.main_sel_op_ecadd * (FF(1) - new_term.main_sel_op_ecadd)); tmp *= scaling_factor; std::get<31>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<32, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_msm * (FF(1) - new_term.main_sel_op_msm)); + auto tmp = (new_term.main_sel_op_pedersen_commit * (FF(1) - new_term.main_sel_op_pedersen_commit)); tmp *= scaling_factor; std::get<32>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<33, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_add * (FF(1) - new_term.main_sel_op_add)); + auto tmp = (new_term.main_sel_op_msm * (FF(1) - new_term.main_sel_op_msm)); tmp *= scaling_factor; std::get<33>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<34, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_sub * (FF(1) - new_term.main_sel_op_sub)); + auto tmp = (new_term.main_sel_op_add * (FF(1) - new_term.main_sel_op_add)); tmp *= scaling_factor; std::get<34>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<35, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_mul * (FF(1) - new_term.main_sel_op_mul)); + auto tmp = (new_term.main_sel_op_sub * (FF(1) - new_term.main_sel_op_sub)); tmp *= scaling_factor; std::get<35>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<36, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_div * (FF(1) - new_term.main_sel_op_div)); + auto tmp = (new_term.main_sel_op_mul * (FF(1) - new_term.main_sel_op_mul)); tmp *= scaling_factor; std::get<36>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<37, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_fdiv * (FF(1) - new_term.main_sel_op_fdiv)); + auto tmp = (new_term.main_sel_op_div * (FF(1) - new_term.main_sel_op_div)); tmp *= scaling_factor; std::get<37>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<38, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_not * (FF(1) - new_term.main_sel_op_not)); + auto tmp = (new_term.main_sel_op_fdiv * (FF(1) - new_term.main_sel_op_fdiv)); tmp *= scaling_factor; std::get<38>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<39, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_eq * (FF(1) - new_term.main_sel_op_eq)); + auto tmp = (new_term.main_sel_op_not * (FF(1) - new_term.main_sel_op_not)); tmp *= scaling_factor; std::get<39>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<40, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_and * (FF(1) - new_term.main_sel_op_and)); + auto tmp = (new_term.main_sel_op_eq * (FF(1) - new_term.main_sel_op_eq)); tmp *= scaling_factor; std::get<40>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<41, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_or * (FF(1) - new_term.main_sel_op_or)); + auto tmp = (new_term.main_sel_op_and * (FF(1) - new_term.main_sel_op_and)); tmp *= scaling_factor; std::get<41>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<42, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_xor * (FF(1) - new_term.main_sel_op_xor)); + auto tmp = (new_term.main_sel_op_or * (FF(1) - new_term.main_sel_op_or)); tmp *= scaling_factor; std::get<42>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<43, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_cast * (FF(1) - new_term.main_sel_op_cast)); + auto tmp = (new_term.main_sel_op_xor * (FF(1) - new_term.main_sel_op_xor)); tmp *= scaling_factor; std::get<43>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<44, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_lt * (FF(1) - new_term.main_sel_op_lt)); + auto tmp = (new_term.main_sel_op_cast * (FF(1) - new_term.main_sel_op_cast)); tmp *= scaling_factor; std::get<44>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<45, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_lte * (FF(1) - new_term.main_sel_op_lte)); + auto tmp = (new_term.main_sel_op_lt * (FF(1) - new_term.main_sel_op_lt)); tmp *= scaling_factor; std::get<45>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<46, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_shl * (FF(1) - new_term.main_sel_op_shl)); + auto tmp = (new_term.main_sel_op_lte * (FF(1) - new_term.main_sel_op_lte)); tmp *= scaling_factor; std::get<46>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<47, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_shr * (FF(1) - new_term.main_sel_op_shr)); + auto tmp = (new_term.main_sel_op_shl * (FF(1) - new_term.main_sel_op_shl)); tmp *= scaling_factor; std::get<47>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<48, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_internal_call * (FF(1) - new_term.main_sel_op_internal_call)); + auto tmp = (new_term.main_sel_op_shr * (FF(1) - new_term.main_sel_op_shr)); tmp *= scaling_factor; std::get<48>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<49, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_internal_return * (FF(1) - new_term.main_sel_op_internal_return)); + auto tmp = (new_term.main_sel_op_internal_call * (FF(1) - new_term.main_sel_op_internal_call)); tmp *= scaling_factor; std::get<49>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<50, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_jump * (FF(1) - new_term.main_sel_op_jump)); + auto tmp = (new_term.main_sel_op_internal_return * (FF(1) - new_term.main_sel_op_internal_return)); tmp *= scaling_factor; std::get<50>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<51, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_jumpi * (FF(1) - new_term.main_sel_op_jumpi)); + auto tmp = (new_term.main_sel_op_jump * (FF(1) - new_term.main_sel_op_jump)); tmp *= scaling_factor; std::get<51>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<52, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_external_call * (FF(1) - new_term.main_sel_op_external_call)); + auto tmp = (new_term.main_sel_op_jumpi * (FF(1) - new_term.main_sel_op_jumpi)); tmp *= scaling_factor; std::get<52>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<53, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_calldata_copy * (FF(1) - new_term.main_sel_op_calldata_copy)); + auto tmp = (new_term.main_sel_op_external_call * (FF(1) - new_term.main_sel_op_external_call)); tmp *= scaling_factor; std::get<53>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<54, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_external_return * (FF(1) - new_term.main_sel_op_external_return)); + auto tmp = (new_term.main_sel_op_static_call * (FF(1) - new_term.main_sel_op_static_call)); tmp *= scaling_factor; std::get<54>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<55, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_external_revert * (FF(1) - new_term.main_sel_op_external_revert)); + auto tmp = (new_term.main_sel_op_calldata_copy * (FF(1) - new_term.main_sel_op_calldata_copy)); tmp *= scaling_factor; std::get<55>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<56, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_set * (FF(1) - new_term.main_sel_op_set)); + auto tmp = (new_term.main_sel_op_external_return * (FF(1) - new_term.main_sel_op_external_return)); tmp *= scaling_factor; std::get<56>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<57, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_mov * (FF(1) - new_term.main_sel_op_mov)); + auto tmp = (new_term.main_sel_op_external_revert * (FF(1) - new_term.main_sel_op_external_revert)); tmp *= scaling_factor; std::get<57>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<58, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_cmov * (FF(1) - new_term.main_sel_op_cmov)); + auto tmp = (new_term.main_sel_op_set * (FF(1) - new_term.main_sel_op_set)); tmp *= scaling_factor; std::get<58>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<59, ContainerOverSubrelations>; - auto tmp = (new_term.main_op_err * (FF(1) - new_term.main_op_err)); + auto tmp = (new_term.main_sel_op_mov * (FF(1) - new_term.main_sel_op_mov)); tmp *= scaling_factor; std::get<59>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<60, ContainerOverSubrelations>; - auto tmp = (new_term.main_tag_err * (FF(1) - new_term.main_tag_err)); + auto tmp = (new_term.main_sel_op_cmov * (FF(1) - new_term.main_sel_op_cmov)); tmp *= scaling_factor; std::get<60>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<61, ContainerOverSubrelations>; - auto tmp = (new_term.main_id_zero * (FF(1) - new_term.main_id_zero)); + auto tmp = (new_term.main_op_err * (FF(1) - new_term.main_op_err)); tmp *= scaling_factor; std::get<61>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<62, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_mem_op_a * (FF(1) - new_term.main_sel_mem_op_a)); + auto tmp = (new_term.main_tag_err * (FF(1) - new_term.main_tag_err)); tmp *= scaling_factor; std::get<62>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<63, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_mem_op_b * (FF(1) - new_term.main_sel_mem_op_b)); + auto tmp = (new_term.main_id_zero * (FF(1) - new_term.main_id_zero)); tmp *= scaling_factor; std::get<63>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<64, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_mem_op_c * (FF(1) - new_term.main_sel_mem_op_c)); + auto tmp = (new_term.main_sel_mem_op_a * (FF(1) - new_term.main_sel_mem_op_a)); tmp *= scaling_factor; std::get<64>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<65, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_mem_op_d * (FF(1) - new_term.main_sel_mem_op_d)); + auto tmp = (new_term.main_sel_mem_op_b * (FF(1) - new_term.main_sel_mem_op_b)); tmp *= scaling_factor; std::get<65>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<66, ContainerOverSubrelations>; - auto tmp = (new_term.main_rwa * (FF(1) - new_term.main_rwa)); + auto tmp = (new_term.main_sel_mem_op_c * (FF(1) - new_term.main_sel_mem_op_c)); tmp *= scaling_factor; std::get<66>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<67, ContainerOverSubrelations>; - auto tmp = (new_term.main_rwb * (FF(1) - new_term.main_rwb)); + auto tmp = (new_term.main_sel_mem_op_d * (FF(1) - new_term.main_sel_mem_op_d)); tmp *= scaling_factor; std::get<67>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<68, ContainerOverSubrelations>; - auto tmp = (new_term.main_rwc * (FF(1) - new_term.main_rwc)); + auto tmp = (new_term.main_rwa * (FF(1) - new_term.main_rwa)); tmp *= scaling_factor; std::get<68>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<69, ContainerOverSubrelations>; - auto tmp = (new_term.main_rwd * (FF(1) - new_term.main_rwd)); + auto tmp = (new_term.main_rwb * (FF(1) - new_term.main_rwb)); tmp *= scaling_factor; std::get<69>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<70, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_resolve_ind_addr_a * (FF(1) - new_term.main_sel_resolve_ind_addr_a)); + auto tmp = (new_term.main_rwc * (FF(1) - new_term.main_rwc)); tmp *= scaling_factor; std::get<70>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<71, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_resolve_ind_addr_b * (FF(1) - new_term.main_sel_resolve_ind_addr_b)); + auto tmp = (new_term.main_rwd * (FF(1) - new_term.main_rwd)); tmp *= scaling_factor; std::get<71>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<72, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_resolve_ind_addr_c * (FF(1) - new_term.main_sel_resolve_ind_addr_c)); + auto tmp = (new_term.main_sel_resolve_ind_addr_a * (FF(1) - new_term.main_sel_resolve_ind_addr_a)); tmp *= scaling_factor; std::get<72>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<73, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_resolve_ind_addr_d * (FF(1) - new_term.main_sel_resolve_ind_addr_d)); + auto tmp = (new_term.main_sel_resolve_ind_addr_b * (FF(1) - new_term.main_sel_resolve_ind_addr_b)); tmp *= scaling_factor; std::get<73>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<74, ContainerOverSubrelations>; - auto tmp = (((new_term.main_sel_op_eq + new_term.main_sel_op_lte) + new_term.main_sel_op_lt) * - (new_term.main_w_in_tag - FF(1))); + auto tmp = (new_term.main_sel_resolve_ind_addr_c * (FF(1) - new_term.main_sel_resolve_ind_addr_c)); tmp *= scaling_factor; std::get<74>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<75, ContainerOverSubrelations>; - auto tmp = ((new_term.main_sel_op_fdiv * (FF(1) - new_term.main_op_err)) * - ((new_term.main_ic * new_term.main_ib) - new_term.main_ia)); + auto tmp = (new_term.main_sel_resolve_ind_addr_d * (FF(1) - new_term.main_sel_resolve_ind_addr_d)); tmp *= scaling_factor; std::get<75>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<76, ContainerOverSubrelations>; - auto tmp = ((new_term.main_sel_op_fdiv + new_term.main_sel_op_div) * - (((new_term.main_ib * new_term.main_inv) - FF(1)) + new_term.main_op_err)); + auto tmp = (((new_term.main_sel_op_eq + new_term.main_sel_op_lte) + new_term.main_sel_op_lt) * + (new_term.main_w_in_tag - constants_MEM_TAG_U1)); tmp *= scaling_factor; std::get<76>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<77, ContainerOverSubrelations>; - auto tmp = (((new_term.main_sel_op_fdiv + new_term.main_sel_op_div) * new_term.main_op_err) * - (FF(1) - new_term.main_inv)); + auto tmp = ((new_term.main_sel_op_fdiv * (FF(1) - new_term.main_op_err)) * + ((new_term.main_ic * new_term.main_ib) - new_term.main_ia)); tmp *= scaling_factor; std::get<77>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<78, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_fdiv * (new_term.main_r_in_tag - FF(6))); + auto tmp = ((new_term.main_sel_op_fdiv + new_term.main_sel_op_div) * + (((new_term.main_ib * new_term.main_inv) - FF(1)) + new_term.main_op_err)); tmp *= scaling_factor; std::get<78>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<79, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_fdiv * (new_term.main_w_in_tag - FF(6))); + auto tmp = (((new_term.main_sel_op_fdiv + new_term.main_sel_op_div) * new_term.main_op_err) * + (FF(1) - new_term.main_inv)); tmp *= scaling_factor; std::get<79>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<80, ContainerOverSubrelations>; - auto tmp = (new_term.main_op_err * ((new_term.main_sel_op_fdiv + new_term.main_sel_op_div) - FF(1))); + auto tmp = (new_term.main_sel_op_fdiv * (new_term.main_r_in_tag - constants_MEM_TAG_FF)); tmp *= scaling_factor; std::get<80>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<81, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_jump * (new_term.main_pc_shift - new_term.main_ia)); + auto tmp = (new_term.main_sel_op_fdiv * (new_term.main_w_in_tag - constants_MEM_TAG_FF)); tmp *= scaling_factor; std::get<81>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<82, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_jumpi * - (((FF(1) - new_term.main_id_zero) * (new_term.main_pc_shift - new_term.main_ia)) + - (new_term.main_id_zero * ((new_term.main_pc_shift - new_term.main_pc) - FF(1))))); + auto tmp = (new_term.main_op_err * ((new_term.main_sel_op_fdiv + new_term.main_sel_op_div) - FF(1))); tmp *= scaling_factor; std::get<82>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<83, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_internal_call * - (new_term.main_internal_return_ptr_shift - (new_term.main_internal_return_ptr + FF(1)))); + auto tmp = (new_term.main_sel_op_jump * (new_term.main_pc_shift - new_term.main_ia)); tmp *= scaling_factor; std::get<83>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<84, ContainerOverSubrelations>; - auto tmp = - (new_term.main_sel_op_internal_call * (new_term.main_internal_return_ptr - new_term.main_mem_addr_b)); + auto tmp = (new_term.main_sel_op_jumpi * + (((FF(1) - new_term.main_id_zero) * (new_term.main_pc_shift - new_term.main_ia)) + + (new_term.main_id_zero * ((new_term.main_pc_shift - new_term.main_pc) - FF(1))))); tmp *= scaling_factor; std::get<84>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<85, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_internal_call * (new_term.main_pc_shift - new_term.main_ia)); + auto tmp = (new_term.main_sel_op_internal_call * + (new_term.main_internal_return_ptr_shift - (new_term.main_internal_return_ptr + FF(1)))); tmp *= scaling_factor; std::get<85>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<86, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_internal_call * ((new_term.main_pc + FF(1)) - new_term.main_ib)); + auto tmp = + (new_term.main_sel_op_internal_call * (new_term.main_internal_return_ptr - new_term.main_mem_addr_b)); tmp *= scaling_factor; std::get<86>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<87, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_internal_call * (new_term.main_rwb - FF(1))); + auto tmp = (new_term.main_sel_op_internal_call * (new_term.main_pc_shift - new_term.main_ia)); tmp *= scaling_factor; std::get<87>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<88, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_internal_call * (new_term.main_sel_mem_op_b - FF(1))); + auto tmp = (new_term.main_sel_op_internal_call * ((new_term.main_pc + FF(1)) - new_term.main_ib)); tmp *= scaling_factor; std::get<88>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<89, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_internal_return * - (new_term.main_internal_return_ptr_shift - (new_term.main_internal_return_ptr - FF(1)))); + auto tmp = (new_term.main_sel_op_internal_call * (new_term.main_rwb - FF(1))); tmp *= scaling_factor; std::get<89>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<90, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_internal_return * - ((new_term.main_internal_return_ptr - FF(1)) - new_term.main_mem_addr_a)); + auto tmp = (new_term.main_sel_op_internal_call * (new_term.main_sel_mem_op_b - FF(1))); tmp *= scaling_factor; std::get<90>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<91, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_internal_return * (new_term.main_pc_shift - new_term.main_ia)); + auto tmp = (new_term.main_sel_op_internal_return * + (new_term.main_internal_return_ptr_shift - (new_term.main_internal_return_ptr - FF(1)))); tmp *= scaling_factor; std::get<91>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<92, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_internal_return * new_term.main_rwa); + auto tmp = (new_term.main_sel_op_internal_return * + ((new_term.main_internal_return_ptr - FF(1)) - new_term.main_mem_addr_a)); tmp *= scaling_factor; std::get<92>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<93, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_internal_return * (new_term.main_sel_mem_op_a - FF(1))); + auto tmp = (new_term.main_sel_op_internal_return * (new_term.main_pc_shift - new_term.main_ia)); tmp *= scaling_factor; std::get<93>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<94, ContainerOverSubrelations>; - auto tmp = ((main_CUR_AND_NEXT_ARE_MAIN * (FF(1) - main_SEL_ALL_CTRL_FLOW)) * - (new_term.main_pc_shift - (new_term.main_pc + FF(1)))); + auto tmp = (new_term.main_sel_op_internal_return * new_term.main_rwa); tmp *= scaling_factor; std::get<94>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<95, ContainerOverSubrelations>; - auto tmp = ((main_CUR_AND_NEXT_ARE_MAIN * (FF(1) - main_SEL_ALL_CTRL_FLOW)) * - (new_term.main_internal_return_ptr_shift - new_term.main_internal_return_ptr)); + auto tmp = (new_term.main_sel_op_internal_return * (new_term.main_sel_mem_op_a - FF(1))); tmp *= scaling_factor; std::get<95>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<96, ContainerOverSubrelations>; - auto tmp = ((new_term.main_sel_op_internal_call + new_term.main_sel_op_internal_return) * - (new_term.main_space_id - constants_misc_INTERNAL_CALL_SPACE_ID)); + auto tmp = ((main_CUR_AND_NEXT_ARE_MAIN * (FF(1) - main_SEL_ALL_CTRL_FLOW)) * + (new_term.main_pc_shift - (new_term.main_pc + FF(1)))); tmp *= scaling_factor; std::get<96>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<97, ContainerOverSubrelations>; - auto tmp = (((FF(1) - new_term.main_sel_op_internal_call) - new_term.main_sel_op_internal_return) * - (new_term.main_call_ptr - new_term.main_space_id)); + auto tmp = ((main_CUR_AND_NEXT_ARE_MAIN * (FF(1) - main_SEL_ALL_CTRL_FLOW)) * + (new_term.main_internal_return_ptr_shift - new_term.main_internal_return_ptr)); tmp *= scaling_factor; std::get<97>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<98, ContainerOverSubrelations>; - auto tmp = ((new_term.main_sel_op_cmov + new_term.main_sel_op_jumpi) * - (((new_term.main_id * new_term.main_inv) - FF(1)) + new_term.main_id_zero)); + auto tmp = ((new_term.main_sel_op_internal_call + new_term.main_sel_op_internal_return) * + (new_term.main_space_id - constants_misc_INTERNAL_CALL_SPACE_ID)); tmp *= scaling_factor; std::get<98>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<99, ContainerOverSubrelations>; - auto tmp = (((new_term.main_sel_op_cmov + new_term.main_sel_op_jumpi) * new_term.main_id_zero) * - (FF(1) - new_term.main_inv)); + auto tmp = (((FF(1) - new_term.main_sel_op_internal_call) - new_term.main_sel_op_internal_return) * + (new_term.main_call_ptr - new_term.main_space_id)); tmp *= scaling_factor; std::get<99>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<100, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_mov_ia_to_ic - - (new_term.main_sel_op_mov + (new_term.main_sel_op_cmov * (FF(1) - new_term.main_id_zero)))); + auto tmp = ((new_term.main_sel_op_cmov + new_term.main_sel_op_jumpi) * + (((new_term.main_id * new_term.main_inv) - FF(1)) + new_term.main_id_zero)); tmp *= scaling_factor; std::get<100>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<101, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_mov_ib_to_ic - (new_term.main_sel_op_cmov * new_term.main_id_zero)); + auto tmp = (((new_term.main_sel_op_cmov + new_term.main_sel_op_jumpi) * new_term.main_id_zero) * + (FF(1) - new_term.main_inv)); tmp *= scaling_factor; std::get<101>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<102, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_mov_ia_to_ic * (new_term.main_ia - new_term.main_ic)); + auto tmp = (new_term.main_sel_mov_ia_to_ic - + (new_term.main_sel_op_mov + (new_term.main_sel_op_cmov * (FF(1) - new_term.main_id_zero)))); tmp *= scaling_factor; std::get<102>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<103, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_mov_ib_to_ic * (new_term.main_ib - new_term.main_ic)); + auto tmp = (new_term.main_sel_mov_ib_to_ic - (new_term.main_sel_op_cmov * new_term.main_id_zero)); tmp *= scaling_factor; std::get<103>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<104, ContainerOverSubrelations>; - auto tmp = ((new_term.main_sel_op_mov + new_term.main_sel_op_cmov) * - (new_term.main_r_in_tag - new_term.main_w_in_tag)); + auto tmp = (new_term.main_sel_mov_ia_to_ic * (new_term.main_ia - new_term.main_ic)); tmp *= scaling_factor; std::get<104>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<105, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_alu - - ((main_SEL_ALL_ALU * (FF(1) - new_term.main_tag_err)) * (FF(1) - new_term.main_op_err))); + auto tmp = (new_term.main_sel_mov_ib_to_ic * (new_term.main_ib - new_term.main_ic)); tmp *= scaling_factor; std::get<105>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<106, ContainerOverSubrelations>; - auto tmp = (main_SEL_ALU_R_TAG * (new_term.main_alu_in_tag - new_term.main_r_in_tag)); + auto tmp = ((new_term.main_sel_op_mov + new_term.main_sel_op_cmov) * + (new_term.main_r_in_tag - new_term.main_w_in_tag)); tmp *= scaling_factor; std::get<106>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<107, ContainerOverSubrelations>; - auto tmp = (main_SEL_ALU_W_TAG * (new_term.main_alu_in_tag - new_term.main_w_in_tag)); + auto tmp = (new_term.main_sel_alu - + ((main_SEL_ALL_ALU * (FF(1) - new_term.main_tag_err)) * (FF(1) - new_term.main_op_err))); tmp *= scaling_factor; std::get<107>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<108, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_l2gasleft * (new_term.main_ia - new_term.main_l2_gas_remaining_shift)); + auto tmp = (main_SEL_ALU_R_TAG * (new_term.main_alu_in_tag - new_term.main_r_in_tag)); tmp *= scaling_factor; std::get<108>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<109, ContainerOverSubrelations>; - auto tmp = (new_term.main_sel_op_dagasleft * (new_term.main_ia - new_term.main_da_gas_remaining_shift)); + auto tmp = (main_SEL_ALU_W_TAG * (new_term.main_alu_in_tag - new_term.main_w_in_tag)); tmp *= scaling_factor; std::get<109>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<110, ContainerOverSubrelations>; - auto tmp = ((new_term.main_ib * (FF(1) - new_term.main_tag_err)) * - ((new_term.main_sel_op_calldata_copy + new_term.main_sel_op_external_return) - - new_term.main_sel_slice_gadget)); + auto tmp = (new_term.main_sel_op_l2gasleft * (new_term.main_ia - new_term.main_l2_gas_remaining_shift)); tmp *= scaling_factor; std::get<110>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<111, ContainerOverSubrelations>; - auto tmp = (new_term.main_bin_op_id - (new_term.main_sel_op_or + (FF(2) * new_term.main_sel_op_xor))); + auto tmp = (new_term.main_sel_op_dagasleft * (new_term.main_ia - new_term.main_da_gas_remaining_shift)); tmp *= scaling_factor; std::get<111>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<112, ContainerOverSubrelations>; + auto tmp = ((new_term.main_ib * (FF(1) - new_term.main_tag_err)) * + ((new_term.main_sel_op_calldata_copy + new_term.main_sel_op_external_return) - + new_term.main_sel_slice_gadget)); + tmp *= scaling_factor; + std::get<112>(evals) += typename Accumulator::View(tmp); + } + { + using Accumulator = typename std::tuple_element_t<113, ContainerOverSubrelations>; + auto tmp = (new_term.main_bin_op_id - (new_term.main_sel_op_or + (FF(2) * new_term.main_sel_op_xor))); + tmp *= scaling_factor; + std::get<113>(evals) += typename Accumulator::View(tmp); + } + { + using Accumulator = typename std::tuple_element_t<114, ContainerOverSubrelations>; auto tmp = (new_term.main_sel_bin - ((new_term.main_sel_op_and + new_term.main_sel_op_or) + new_term.main_sel_op_xor)); tmp *= scaling_factor; - std::get<112>(evals) += typename Accumulator::View(tmp); + std::get<114>(evals) += typename Accumulator::View(tmp); } } }; @@ -799,53 +815,53 @@ template class main : public Relation> { switch (index) { case 0: return "OPCODE_SELECTORS"; - case 74: - return "OUTPUT_U8"; - case 75: - return "SUBOP_FDIV"; case 76: - return "SUBOP_FDIV_ZERO_ERR1"; + return "OUTPUT_U1"; case 77: - return "SUBOP_FDIV_ZERO_ERR2"; + return "SUBOP_FDIV"; case 78: - return "SUBOP_FDIV_R_IN_TAG_FF"; + return "SUBOP_FDIV_ZERO_ERR1"; case 79: - return "SUBOP_FDIV_W_IN_TAG_FF"; + return "SUBOP_FDIV_ZERO_ERR2"; case 80: - return "SUBOP_ERROR_RELEVANT_OP"; + return "SUBOP_FDIV_R_IN_TAG_FF"; case 81: - return "PC_JUMP"; + return "SUBOP_FDIV_W_IN_TAG_FF"; case 82: - return "PC_JUMPI"; + return "SUBOP_ERROR_RELEVANT_OP"; case 83: + return "PC_JUMP"; + case 84: + return "PC_JUMPI"; + case 85: return "RETURN_POINTER_INCREMENT"; - case 89: + case 91: return "RETURN_POINTER_DECREMENT"; - case 94: + case 96: return "PC_INCREMENT"; - case 95: + case 97: return "INTERNAL_RETURN_POINTER_CONSISTENCY"; - case 96: + case 98: return "SPACE_ID_INTERNAL"; - case 97: + case 99: return "SPACE_ID_STANDARD_OPCODES"; - case 98: + case 100: return "CMOV_CONDITION_RES_1"; - case 99: + case 101: return "CMOV_CONDITION_RES_2"; - case 102: + case 104: return "MOV_SAME_VALUE_A"; - case 103: + case 105: return "MOV_SAME_VALUE_B"; - case 104: + case 106: return "MOV_MAIN_SAME_TAG"; - case 108: + case 110: return "L2GASLEFT"; - case 109: - return "DAGASLEFT"; case 111: + return "DAGASLEFT"; + case 113: return "BIN_SEL_1"; - case 112: + case 114: return "BIN_SEL_2"; } return std::to_string(index); diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/mem.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/mem.hpp index b99228615e9..e52feb9a46b 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/mem.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/mem.hpp @@ -21,6 +21,8 @@ template class memImpl { [[maybe_unused]] const RelationParameters&, [[maybe_unused]] const FF& scaling_factor) { + const auto constants_MEM_TAG_U32 = FF(4); + const auto constants_MEM_TAG_FF = FF(7); const auto mem_SEL_DIRECT_MEM_OP_A = ((new_term.mem_sel_op_a + new_term.mem_sel_op_poseidon_read_a) + new_term.mem_sel_op_poseidon_write_a); const auto mem_SEL_DIRECT_MEM_OP_B = @@ -258,25 +260,25 @@ template class memImpl { } { using Accumulator = typename std::tuple_element_t<33, ContainerOverSubrelations>; - auto tmp = (new_term.mem_sel_resolve_ind_addr_a * (new_term.mem_r_in_tag - FF(3))); + auto tmp = (new_term.mem_sel_resolve_ind_addr_a * (new_term.mem_r_in_tag - constants_MEM_TAG_U32)); tmp *= scaling_factor; std::get<33>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<34, ContainerOverSubrelations>; - auto tmp = (new_term.mem_sel_resolve_ind_addr_b * (new_term.mem_r_in_tag - FF(3))); + auto tmp = (new_term.mem_sel_resolve_ind_addr_b * (new_term.mem_r_in_tag - constants_MEM_TAG_U32)); tmp *= scaling_factor; std::get<34>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<35, ContainerOverSubrelations>; - auto tmp = (new_term.mem_sel_resolve_ind_addr_c * (new_term.mem_r_in_tag - FF(3))); + auto tmp = (new_term.mem_sel_resolve_ind_addr_c * (new_term.mem_r_in_tag - constants_MEM_TAG_U32)); tmp *= scaling_factor; std::get<35>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<36, ContainerOverSubrelations>; - auto tmp = (new_term.mem_sel_resolve_ind_addr_d * (new_term.mem_r_in_tag - FF(3))); + auto tmp = (new_term.mem_sel_resolve_ind_addr_d * (new_term.mem_r_in_tag - constants_MEM_TAG_U32)); tmp *= scaling_factor; std::get<36>(evals) += typename Accumulator::View(tmp); } @@ -306,61 +308,61 @@ template class memImpl { } { using Accumulator = typename std::tuple_element_t<41, ContainerOverSubrelations>; - auto tmp = (new_term.mem_sel_op_slice * (new_term.mem_w_in_tag - FF(6))); + auto tmp = (new_term.mem_sel_op_slice * (new_term.mem_w_in_tag - constants_MEM_TAG_FF)); tmp *= scaling_factor; std::get<41>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<42, ContainerOverSubrelations>; - auto tmp = (new_term.mem_sel_op_slice * (new_term.mem_r_in_tag - FF(6))); + auto tmp = (new_term.mem_sel_op_slice * (new_term.mem_r_in_tag - constants_MEM_TAG_FF)); tmp *= scaling_factor; std::get<42>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<43, ContainerOverSubrelations>; - auto tmp = (new_term.mem_sel_op_poseidon_read_a * (new_term.mem_w_in_tag - FF(6))); + auto tmp = (new_term.mem_sel_op_poseidon_read_a * (new_term.mem_w_in_tag - constants_MEM_TAG_FF)); tmp *= scaling_factor; std::get<43>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<44, ContainerOverSubrelations>; - auto tmp = (new_term.mem_sel_op_poseidon_read_b * (new_term.mem_w_in_tag - FF(6))); + auto tmp = (new_term.mem_sel_op_poseidon_read_b * (new_term.mem_w_in_tag - constants_MEM_TAG_FF)); tmp *= scaling_factor; std::get<44>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<45, ContainerOverSubrelations>; - auto tmp = (new_term.mem_sel_op_poseidon_read_c * (new_term.mem_w_in_tag - FF(6))); + auto tmp = (new_term.mem_sel_op_poseidon_read_c * (new_term.mem_w_in_tag - constants_MEM_TAG_FF)); tmp *= scaling_factor; std::get<45>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<46, ContainerOverSubrelations>; - auto tmp = (new_term.mem_sel_op_poseidon_read_d * (new_term.mem_w_in_tag - FF(6))); + auto tmp = (new_term.mem_sel_op_poseidon_read_d * (new_term.mem_w_in_tag - constants_MEM_TAG_FF)); tmp *= scaling_factor; std::get<46>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<47, ContainerOverSubrelations>; - auto tmp = (new_term.mem_sel_op_poseidon_write_a * (new_term.mem_r_in_tag - FF(6))); + auto tmp = (new_term.mem_sel_op_poseidon_write_a * (new_term.mem_r_in_tag - constants_MEM_TAG_FF)); tmp *= scaling_factor; std::get<47>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<48, ContainerOverSubrelations>; - auto tmp = (new_term.mem_sel_op_poseidon_write_b * (new_term.mem_r_in_tag - FF(6))); + auto tmp = (new_term.mem_sel_op_poseidon_write_b * (new_term.mem_r_in_tag - constants_MEM_TAG_FF)); tmp *= scaling_factor; std::get<48>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<49, ContainerOverSubrelations>; - auto tmp = (new_term.mem_sel_op_poseidon_write_c * (new_term.mem_r_in_tag - FF(6))); + auto tmp = (new_term.mem_sel_op_poseidon_write_c * (new_term.mem_r_in_tag - constants_MEM_TAG_FF)); tmp *= scaling_factor; std::get<49>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<50, ContainerOverSubrelations>; - auto tmp = (new_term.mem_sel_op_poseidon_write_d * (new_term.mem_r_in_tag - FF(6))); + auto tmp = (new_term.mem_sel_op_poseidon_write_d * (new_term.mem_r_in_tag - constants_MEM_TAG_FF)); tmp *= scaling_factor; std::get<50>(evals) += typename Accumulator::View(tmp); } diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/perm_main_conv.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/perm_main_conv.hpp index 70fabd25948..a97b8c1a046 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/perm_main_conv.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/perm_main_conv.hpp @@ -11,7 +11,7 @@ namespace bb { class perm_main_conv_permutation_settings { public: // This constant defines how many columns are bundled together to form each set. - constexpr static size_t COLUMNS_PER_SET = 4; + constexpr static size_t COLUMNS_PER_SET = 5; template static inline auto inverse_polynomial_is_computed_at_row(const AllEntities& in) { @@ -26,12 +26,14 @@ class perm_main_conv_permutation_settings { in.conversion_sel_to_radix_le, in.main_clk, in.main_ia, + in.main_ib, in.main_ic, in.main_id, in.conversion_clk, in.conversion_input, in.conversion_radix, - in.conversion_num_limbs); + in.conversion_num_limbs, + in.conversion_output_bits); } template static inline auto get_nonconst_entities(AllEntities& in) @@ -42,12 +44,14 @@ class perm_main_conv_permutation_settings { in.conversion_sel_to_radix_le, in.main_clk, in.main_ia, + in.main_ib, in.main_ic, in.main_id, in.conversion_clk, in.conversion_input, in.conversion_radix, - in.conversion_num_limbs); + in.conversion_num_limbs, + in.conversion_output_bits); } }; diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/verifier.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/verifier.cpp index bd132af86f6..9f974702495 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/verifier.cpp @@ -1,6 +1,7 @@ // AUTOGENERATED FILE #include "barretenberg/vm/avm/generated/verifier.hpp" +#include "barretenberg/common/log.hpp" #include "barretenberg/vm/constants.hpp" #include "barretenberg/commitment_schemes/zeromorph/zeromorph.hpp" @@ -27,17 +28,9 @@ AvmVerifier& AvmVerifier::operator=(AvmVerifier&& other) noexcept using FF = AvmFlavor::FF; // Evaluate the given public input column over the multivariate challenge points -[[maybe_unused]] inline FF evaluate_public_input_column(const std::vector& points, - const size_t circuit_size, - std::vector challenges) +inline FF AvmVerifier::evaluate_public_input_column(const std::vector& points, std::vector challenges) { - - // TODO(https://github.com/AztecProtocol/aztec-packages/issues/6361): we pad the points to the circuit size in order - // to get the correct evaluation. This is not efficient, and will not be valid in production. - std::vector new_points(circuit_size, 0); - std::copy(points.begin(), points.end(), new_points.data()); - - Polynomial polynomial(new_points); + Polynomial polynomial(points, key->circuit_size); return polynomial.evaluate_mle(challenges); } @@ -65,8 +58,8 @@ bool AvmVerifier::verify_proof(const HonkProof& proof, CommitmentLabels commitment_labels; const auto circuit_size = transcript->template receive_from_prover("circuit_size"); - if (circuit_size != key->circuit_size) { + vinfo("Circuit size mismatch: expected", key->circuit_size, " got ", circuit_size); return false; } @@ -99,7 +92,8 @@ bool AvmVerifier::verify_proof(const HonkProof& proof, sumcheck.verify(relation_parameters, alpha, gate_challenges); // If Sumcheck did not verify, return false - if (sumcheck_verified.has_value() && !sumcheck_verified.value()) { + if (!sumcheck_verified.has_value() || !sumcheck_verified.value()) { + vinfo("Sumcheck verification failed"); return false; } @@ -107,36 +101,39 @@ bool AvmVerifier::verify_proof(const HonkProof& proof, std::vector mle_challenge(multivariate_challenge.begin(), multivariate_challenge.begin() + static_cast(log_circuit_size)); - FF main_kernel_inputs_evaluation = evaluate_public_input_column(public_inputs[0], circuit_size, mle_challenge); + FF main_kernel_inputs_evaluation = evaluate_public_input_column(public_inputs[0], mle_challenge); if (main_kernel_inputs_evaluation != claimed_evaluations.main_kernel_inputs) { + vinfo("main_kernel_inputs_evaluation failed"); return false; } - FF main_kernel_value_out_evaluation = evaluate_public_input_column(public_inputs[1], circuit_size, mle_challenge); + FF main_kernel_value_out_evaluation = evaluate_public_input_column(public_inputs[1], mle_challenge); if (main_kernel_value_out_evaluation != claimed_evaluations.main_kernel_value_out) { + vinfo("main_kernel_value_out_evaluation failed"); return false; } - FF main_kernel_side_effect_out_evaluation = - evaluate_public_input_column(public_inputs[2], circuit_size, mle_challenge); + FF main_kernel_side_effect_out_evaluation = evaluate_public_input_column(public_inputs[2], mle_challenge); if (main_kernel_side_effect_out_evaluation != claimed_evaluations.main_kernel_side_effect_out) { + vinfo("main_kernel_side_effect_out_evaluation failed"); return false; } - FF main_kernel_metadata_out_evaluation = - evaluate_public_input_column(public_inputs[3], circuit_size, mle_challenge); + FF main_kernel_metadata_out_evaluation = evaluate_public_input_column(public_inputs[3], mle_challenge); if (main_kernel_metadata_out_evaluation != claimed_evaluations.main_kernel_metadata_out) { + vinfo("main_kernel_metadata_out_evaluation failed"); return false; } - FF main_calldata_evaluation = evaluate_public_input_column(public_inputs[4], circuit_size, mle_challenge); + FF main_calldata_evaluation = evaluate_public_input_column(public_inputs[4], mle_challenge); if (main_calldata_evaluation != claimed_evaluations.main_calldata) { + vinfo("main_calldata_evaluation failed"); return false; } - FF main_returndata_evaluation = evaluate_public_input_column(public_inputs[5], circuit_size, mle_challenge); + FF main_returndata_evaluation = evaluate_public_input_column(public_inputs[5], mle_challenge); if (main_returndata_evaluation != claimed_evaluations.main_returndata) { + vinfo("main_returndata_evaluation failed"); return false; } // Execute ZeroMorph rounds. See https://hackmd.io/dlf9xEwhTQyE3hiGbq4FsA?view for a complete description of the // unrolled protocol. - auto opening_claim = ZeroMorph::verify(circuit_size, commitments.get_unshifted(), commitments.get_to_be_shifted(), @@ -147,8 +144,14 @@ bool AvmVerifier::verify_proof(const HonkProof& proof, transcript); auto pairing_points = PCS::reduce_verify(opening_claim, transcript); - auto verified = key->pcs_verification_key->pairing_check(pairing_points[0], pairing_points[1]); - return sumcheck_verified.value() && verified; + auto zeromorph_verified = key->pcs_verification_key->pairing_check(pairing_points[0], pairing_points[1]); + + if (!zeromorph_verified) { + vinfo("ZeroMorph verification failed"); + return false; + } + + return true; } } // namespace bb diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/verifier.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/verifier.hpp index de4dd7acc24..e3b242c96f9 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/verifier.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/verifier.hpp @@ -28,6 +28,9 @@ class AvmVerifier { std::shared_ptr key; std::map commitments; std::shared_ptr transcript; + + private: + FF evaluate_public_input_column(const std::vector& points, std::vector challenges); }; } // namespace bb \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/arithmetic.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/arithmetic.test.cpp index ea204252647..aae3a07fd72 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/arithmetic.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/arithmetic.test.cpp @@ -162,7 +162,7 @@ size_t common_validate_eq(std::vector const& trace, EXPECT_TRUE(alu_row != trace.end()); common_validate_arithmetic_op(*row, *alu_row, a, b, c, addr_a, addr_b, addr_c, tag); - EXPECT_EQ(row->main_w_in_tag, FF(static_cast(AvmMemoryTag::U8))); + EXPECT_EQ(row->main_w_in_tag, FF(static_cast(AvmMemoryTag::U1))); // Check that equality selector is set. EXPECT_EQ(row->main_sel_op_eq, FF(1)); @@ -205,7 +205,8 @@ class AvmArithmeticTests : public ::testing::Test { public: AvmArithmeticTests() : public_inputs(generate_base_public_inputs()) - , trace_builder(AvmTraceBuilder(public_inputs)) + , trace_builder( + AvmTraceBuilder(public_inputs).set_full_precomputed_tables(false).set_range_check_required(false)) { srs::init_crs_factory("../srs_db/ignition"); } @@ -215,7 +216,9 @@ class AvmArithmeticTests : public ::testing::Test { void gen_trace_builder(std::vector const& calldata) { - trace_builder = AvmTraceBuilder(public_inputs, {}, 0, calldata); + trace_builder = AvmTraceBuilder(public_inputs, {}, 0, calldata) + .set_full_precomputed_tables(false) + .set_range_check_required(false); } // Generate a trace with an EQ opcode operation. @@ -314,6 +317,7 @@ class AvmArithmeticTests : public ::testing::Test { }; class AvmArithmeticTestsFF : public AvmArithmeticTests {}; +class AvmArithmeticTestsU1 : public AvmArithmeticTests {}; class AvmArithmeticTestsU8 : public AvmArithmeticTests {}; class AvmArithmeticTestsU16 : public AvmArithmeticTests {}; class AvmArithmeticTestsU32 : public AvmArithmeticTests {}; @@ -325,6 +329,10 @@ class AvmArithmeticNegativeTestsFF : public AvmArithmeticTests { protected: void SetUp() override { GTEST_SKIP(); } }; +class AvmArithmeticNegativeTestsU1 : public AvmArithmeticTests { + protected: + void SetUp() override { GTEST_SKIP(); } +}; class AvmArithmeticNegativeTestsU8 : public AvmArithmeticTests { protected: void SetUp() override { GTEST_SKIP(); } @@ -347,9 +355,10 @@ class AvmArithmeticNegativeTestsU128 : public AvmArithmeticTests { }; std::vector uint_mem_tags{ - { AvmMemoryTag::U8, AvmMemoryTag::U16, AvmMemoryTag::U32, AvmMemoryTag::U64, AvmMemoryTag::U128 } + { AvmMemoryTag::U1, AvmMemoryTag::U8, AvmMemoryTag::U16, AvmMemoryTag::U32, AvmMemoryTag::U64, AvmMemoryTag::U128 } }; std::vector> positive_op_div_test_values = { { + { FF(1), FF(1), FF(1) }, { FF(10), FF(5), FF(2) }, { FF(5323), FF(5323), FF(1) }, { FF(13793), FF(10590617LLU), FF(0) }, @@ -407,7 +416,7 @@ TEST_F(AvmArithmeticTestsFF, addition) std::vector const returndata = { 37, 4, 11, 0, 41 }; - validate_trace(std::move(trace), public_inputs, calldata, returndata, true); + validate_trace(std::move(trace), public_inputs, calldata, returndata); } // Test on basic subtraction over finite field type. @@ -615,7 +624,7 @@ TEST_F(AvmArithmeticTestsFF, mixedOperationsWithError) trace_builder.op_return(0, 0, 0); auto trace = trace_builder.finalize(); - validate_trace(std::move(trace), public_inputs, calldata, {}, true); + validate_trace(std::move(trace), public_inputs, calldata, {}); } // Test of equality on FF elements @@ -708,6 +717,155 @@ TEST_F(AvmArithmeticTests, DivisionByZeroError) validate_trace(std::move(trace), public_inputs); } +/****************************************************************************** + * Positive Tests - U1 + ******************************************************************************/ + +// Test on basic addition over u1 type. +TEST_F(AvmArithmeticTestsU1, addition) +{ + // trace_builder + trace_builder.op_set(0, 1, 0, AvmMemoryTag::U1); + trace_builder.op_set(0, 0, 1, AvmMemoryTag::U1); + + // Memory layout: [1,0,0,0,0,....] + trace_builder.op_add(0, 0, 1, 2, AvmMemoryTag::U1); // [1,0,1,0,0,....] + trace_builder.op_return(0, 0, 0); + auto trace = trace_builder.finalize(); + + auto alu_row = common_validate_add(trace, FF(1), FF(0), FF(1), FF(0), FF(1), FF(2), AvmMemoryTag::U1); + + EXPECT_EQ(alu_row.alu_u1_tag, FF(1)); + EXPECT_EQ(alu_row.alu_cf, FF(0)); + + validate_trace(std::move(trace), public_inputs); +} + +// Test on basic addition over u1 type with carry. +TEST_F(AvmArithmeticTestsU1, additionCarry) +{ + // trace_builder + trace_builder.op_set(0, 1, 0, AvmMemoryTag::U1); + trace_builder.op_set(0, 1, 1, AvmMemoryTag::U1); + + // Memory layout: [1,1,0,0,0,....] + trace_builder.op_add(0, 0, 1, 2, AvmMemoryTag::U1); // [1,1,0,0,0,....] + trace_builder.op_return(0, 0, 0); + auto trace = trace_builder.finalize(); + + auto alu_row = common_validate_add(trace, FF(1), FF(1), FF(0), FF(0), FF(1), FF(2), AvmMemoryTag::U1); + + EXPECT_EQ(alu_row.alu_u1_tag, FF(1)); + EXPECT_EQ(alu_row.alu_cf, FF(1)); + + validate_trace(std::move(trace), public_inputs); +} + +// Test on basic subtraction over u1 type. +TEST_F(AvmArithmeticTestsU1, subtraction) +{ + // trace_builder + trace_builder.op_set(0, 1, 0, AvmMemoryTag::U1); + trace_builder.op_set(0, 1, 1, AvmMemoryTag::U1); + + // Memory layout: [1,1,0,0,0,....] + trace_builder.op_sub(0, 0, 1, 2, AvmMemoryTag::U1); // [1,1,0,0,0,....] + trace_builder.op_return(0, 0, 0); + auto trace = trace_builder.finalize(); + + auto alu_row = common_validate_sub(trace, FF(1), FF(1), FF(0), FF(0), FF(1), FF(2), AvmMemoryTag::U1); + + EXPECT_EQ(alu_row.alu_u1_tag, FF(1)); + EXPECT_EQ(alu_row.alu_cf, FF(0)); + + validate_trace(std::move(trace), public_inputs); +} + +// Test on subtraction over u1 type with carry. +// For a subtraction a - b = c, there is a carry flag iff a < b (equivalent to a < c) +TEST_F(AvmArithmeticTestsU1, subtractionCarry) +{ + // trace_builder + trace_builder.op_set(0, 0, 0, AvmMemoryTag::U1); + trace_builder.op_set(0, 1, 1, AvmMemoryTag::U1); + + // Memory layout: [0,1,0,0,0,....] + trace_builder.op_sub(0, 0, 1, 2, AvmMemoryTag::U1); // [0,1,1,0,0,....] + trace_builder.op_return(0, 0, 0); + auto trace = trace_builder.finalize(); + + auto alu_row = common_validate_sub(trace, FF(0), FF(1), FF(1), FF(0), FF(1), FF(2), AvmMemoryTag::U1); + + EXPECT_EQ(alu_row.alu_u1_tag, FF(1)); + EXPECT_EQ(alu_row.alu_cf, FF(1)); + + validate_trace(std::move(trace), public_inputs); +} + +// Test on basic multiplication over u1 type. +TEST_F(AvmArithmeticTestsU1, multiplication) +{ + // trace_builder + trace_builder.op_set(0, 1, 0, AvmMemoryTag::U1); + trace_builder.op_set(0, 1, 1, AvmMemoryTag::U1); + + trace_builder.op_mul(0, 0, 1, 2, AvmMemoryTag::U1); + trace_builder.op_return(0, 0, 0); + auto trace = trace_builder.finalize(); + + auto alu_row_index = common_validate_mul(trace, FF(1), FF(1), FF(1), FF(0), FF(1), FF(2), AvmMemoryTag::U1); + auto alu_row = trace.at(alu_row_index); + + EXPECT_EQ(alu_row.alu_u1_tag, FF(1)); + + validate_trace(std::move(trace), public_inputs); +} + +// Test on basic multiplication by 0 over u1 type. +TEST_F(AvmArithmeticTestsU1, multiplicationByzero) +{ + // trace_builder + trace_builder.op_set(0, 1, 0, AvmMemoryTag::U1); + trace_builder.op_set(0, 0, 1, AvmMemoryTag::U1); + + trace_builder.op_mul(0, 0, 1, 2, AvmMemoryTag::U1); + trace_builder.op_return(0, 0, 0); + auto trace = trace_builder.finalize(); + + auto alu_row_index = common_validate_mul(trace, FF(1), FF(0), FF(0), FF(0), FF(1), FF(2), AvmMemoryTag::U1); + auto alu_row = trace.at(alu_row_index); + + EXPECT_EQ(alu_row.alu_u1_tag, FF(1)); + + validate_trace(std::move(trace), public_inputs); +} + +// Test of equality on u1 elements +TEST_F(AvmArithmeticTestsU1, equality) +{ + auto trace = gen_trace_eq(1, 1, 0, 1, 2, AvmMemoryTag::U1); + + auto alu_row_index = common_validate_eq(trace, FF(1), FF(1), FF(1), FF(0), FF(1), FF(2), AvmMemoryTag::U1); + auto alu_row = trace.at(alu_row_index); + + EXPECT_EQ(alu_row.alu_u1_tag, FF(1)); + EXPECT_EQ(alu_row.cmp_op_eq_diff_inv, FF(0)); + validate_trace(std::move(trace), public_inputs); +} + +// Test correct non-equality of U1 elements +TEST_F(AvmArithmeticTestsU1, nonEquality) +{ + auto trace = gen_trace_eq(0, 1, 12, 15, 28, AvmMemoryTag::U1); + + auto alu_row_index = common_validate_eq(trace, 0, 1, FF(0), FF(12), FF(15), FF(28), AvmMemoryTag::U1); + auto alu_row = trace.at(alu_row_index); + + EXPECT_EQ(alu_row.alu_u1_tag, FF(1)); + EXPECT_EQ(alu_row.cmp_op_eq_diff_inv, FF(-1).invert()); + validate_trace(std::move(trace), public_inputs); +} + /****************************************************************************** * Positive Tests - U8 ******************************************************************************/ @@ -1771,7 +1929,7 @@ TEST_F(AvmArithmeticNegativeTestsFF, eqOutputWrongTag) ASSERT_TRUE(row != trace.end()); row->main_w_in_tag = FF(4); - EXPECT_THROW_WITH_MESSAGE(validate_trace_check_circuit(std::move(trace)), "OUTPUT_U8"); + EXPECT_THROW_WITH_MESSAGE(validate_trace_check_circuit(std::move(trace)), "OUTPUT_U1"); } // Tests a situation for field elements the (a-b)^1 is incorrect. i.e. (a-b) * (a-b)^1 != 1 for (a-b) != 0; @@ -1839,7 +1997,7 @@ TEST_F(AvmArithmeticNegativeTestsU8, eqOutputWrongTag) ASSERT_TRUE(row != trace.end()); row->main_w_in_tag = FF(3); - EXPECT_THROW_WITH_MESSAGE(validate_trace_check_circuit(std::move(trace)), "OUTPUT_U8"); + EXPECT_THROW_WITH_MESSAGE(validate_trace_check_circuit(std::move(trace)), "OUTPUT_U1"); } // Tests a situation for U8 elements the (a-b)^1 is incorrect. i.e. (a-b) * (a-b)^1 != 1 for (a-b) != 0; @@ -1906,7 +2064,7 @@ TEST_F(AvmArithmeticNegativeTestsU16, eqOutputWrongTag) ASSERT_TRUE(row != trace.end()); row->main_w_in_tag = FF(5); - EXPECT_THROW_WITH_MESSAGE(validate_trace_check_circuit(std::move(trace)), "OUTPUT_U8"); + EXPECT_THROW_WITH_MESSAGE(validate_trace_check_circuit(std::move(trace)), "OUTPUT_U1"); } // Tests a situation for U16 elements the (a-b)^1 is incorrect. i.e. (a-b) * (a-b)^1 != 1 for (a-b) != 0; @@ -1973,7 +2131,7 @@ TEST_F(AvmArithmeticNegativeTestsU32, eqOutputWrongTag) ASSERT_TRUE(row != trace.end()); row->main_w_in_tag = FF(6); - EXPECT_THROW_WITH_MESSAGE(validate_trace_check_circuit(std::move(trace)), "OUTPUT_U8"); + EXPECT_THROW_WITH_MESSAGE(validate_trace_check_circuit(std::move(trace)), "OUTPUT_U1"); } // Tests a situation for U32 elements the (a-b)^1 is incorrect. i.e. (a-b) * (a-b)^1 != 1 for (a-b) != 0; @@ -2047,7 +2205,7 @@ TEST_F(AvmArithmeticNegativeTestsU64, eqOutputWrongTag) ASSERT_TRUE(row != trace.end()); row->main_w_in_tag = FF(2); - EXPECT_THROW_WITH_MESSAGE(validate_trace_check_circuit(std::move(trace)), "OUTPUT_U8"); + EXPECT_THROW_WITH_MESSAGE(validate_trace_check_circuit(std::move(trace)), "OUTPUT_U1"); } // Tests a situation for U64 elements the (a-b)^1 is incorrect. i.e. (a-b) * (a-b)^1 != 1 for (a-b) != 0; @@ -2177,7 +2335,7 @@ TEST_F(AvmArithmeticNegativeTestsU128, eqOutputWrongTag) ASSERT_TRUE(row != trace.end()); row->main_w_in_tag = FF(4); - EXPECT_THROW_WITH_MESSAGE(validate_trace_check_circuit(std::move(trace)), "OUTPUT_U8"); + EXPECT_THROW_WITH_MESSAGE(validate_trace_check_circuit(std::move(trace)), "OUTPUT_U1"); } // Tests a situation for U128 elements the (a-b)^1 is incorrect. i.e. (a-b) * (a-b)^1 != 1 for (a-b) != 0; diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/bitwise.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/bitwise.test.cpp index ecb51b50a7d..3debc937021 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/bitwise.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/bitwise.test.cpp @@ -67,6 +67,9 @@ void common_validate_op_not(std::vector const& trace, case AvmMemoryTag::U0: FAIL() << "Unintialized Mem Tags Disallowed"; break; + case AvmMemoryTag::U1: + EXPECT_EQ(alu_row->alu_u1_tag, FF(1)); + break; case AvmMemoryTag::U8: EXPECT_EQ(alu_row->alu_u8_tag, FF(1)); break; @@ -347,7 +350,8 @@ class AvmBitwiseTests : public ::testing::Test { public: AvmBitwiseTests() : public_inputs(generate_base_public_inputs()) - , trace_builder(AvmTraceBuilder(public_inputs)) + , trace_builder( + AvmTraceBuilder(public_inputs).set_full_precomputed_tables(false).set_range_check_required(false)) { srs::init_crs_factory("../srs_db/ignition"); } @@ -358,7 +362,7 @@ class AvmBitwiseTests : public ::testing::Test { std::vector gen_mutated_trace_not(FF const& a, FF const& c_mutated, avm_trace::AvmMemoryTag tag) { trace_builder.op_set(0, a, 0, tag); - trace_builder.op_not(0, 0, 1, tag); + trace_builder.op_not(0, 0, 1); trace_builder.op_return(0, 0, 0); auto trace = trace_builder.finalize(); @@ -377,10 +381,11 @@ class AvmBitwiseTests : public ::testing::Test { using TwoOpParamRow = std::tuple, AvmMemoryTag>; std::vector mem_tags{ - { AvmMemoryTag::U8, AvmMemoryTag::U16, AvmMemoryTag::U32, AvmMemoryTag::U64, AvmMemoryTag::U128 } + { AvmMemoryTag::U1, AvmMemoryTag::U8, AvmMemoryTag::U16, AvmMemoryTag::U32, AvmMemoryTag::U64, AvmMemoryTag::U128 } }; -std::vector> positive_op_not_test_values = { { { 1, 254 }, +std::vector> positive_op_not_test_values = { { { 1, 0 }, + { 1, 254 }, { 512, 65'023 }, { 131'072, 4'294'836'223LLU }, { 0x100000000LLU, 0xfffffffeffffffffLLU }, @@ -401,6 +406,7 @@ std::vector gen_two_op_params(std::vector> oper std::vector positive_op_and_test_values = { { { FF(1), FF(1), FF(1) }, + { FF(1), FF(1), FF(1) }, { FF(5323), FF(321), FF(65) }, { FF(13793), FF(10590617LLU), FF(4481) }, { FF(0x7bff744e3cdf79LLU), FF(0x14ccccccccb6LLU), FF(0x14444c0ccc30LLU) }, @@ -411,6 +417,7 @@ std::vector positive_op_and_test_values = { std::vector> positive_op_or_test_values = { { { FF(1), FF(1), FF(1) }, + { FF(1), FF(1), FF(1) }, { FF(5323), FF(321), FF(0x15cb) }, { FF(13793), FF(10590617LLU), FF(0xa1bdf9) }, { FF(0x7bff744e3cdf79LLU), FF(0x14ccccccccb6LLU), FF(0x7bfffccefcdfffLLU) }, @@ -420,6 +427,7 @@ std::vector> positive_op_or_test_values = { }; std::vector> positive_op_xor_test_values = { { { FF(1), FF(1), FF(0) }, + { FF(1), FF(1), FF(0) }, { FF(5323), FF(321), FF(0x158a) }, { FF(13793), FF(10590617LLU), FF(0xa1ac78) }, { FF(0x7bff744e3cdf79LLU), FF(0x14ccccccccb6LLU), uint256_t::from_uint128(0x7bebb882f013cf) }, @@ -428,7 +436,8 @@ std::vector> positive_op_xor_test_values = { uint256_t::from_uint128((uint128_t{ 0xa906021301080001 } << 64) + uint128_t{ 0x0001080876844827 }) } } }; std::vector> positive_op_shr_test_values = { - { { FF(20), FF(3), FF(2) }, + { { FF(1), FF(1), FF(0) }, + { FF(20), FF(3), FF(2) }, { FF(5323), FF(255), FF(0) }, { FF(36148), FF(13), FF(4) }, { FF(0x7bff744e3cdf79LLU), FF(64), FF(0) }, @@ -437,7 +446,8 @@ std::vector> positive_op_shr_test_values = { FF(2) } } }; std::vector> positive_op_shl_test_values = { - { { FF(20), FF(8), FF(0) }, + { { FF(1), FF(1), FF(0) }, + { FF(20), FF(8), FF(0) }, { FF(5323), FF(10), FF(11264) }, { FF(13793), FF(255), FF(0) }, { FF(239), FF(50), uint256_t::from_uint128(269090077735387136) }, @@ -467,7 +477,7 @@ TEST_P(AvmBitwiseTestsNot, ParamTest) const auto [operands, mem_tag] = GetParam(); const auto [a, output] = operands; trace_builder.op_set(0, a, 0, mem_tag); - trace_builder.op_not(0, 0, 1, mem_tag); // [1,254,0,0,....] + trace_builder.op_not(0, 0, 1); // [1,254,0,0,....] trace_builder.op_return(0, 0, 0); auto trace = trace_builder.finalize(); common_validate_op_not(trace, a, output, FF(0), FF(1), mem_tag); @@ -489,7 +499,7 @@ TEST_P(AvmBitwiseTestsAnd, AllAndTest) auto trace = trace_builder.finalize(); common_validate_bit_op(trace, 0, a, b, output, FF(0), FF(1), FF(2), mem_tag); - validate_trace(std::move(trace), public_inputs, {}, { output }, true); + validate_trace(std::move(trace), public_inputs, {}, { output }); } INSTANTIATE_TEST_SUITE_P(AvmBitwiseTests, AvmBitwiseTestsAnd, @@ -602,6 +612,10 @@ class AvmBitwiseNegativeTestsFF : public AvmBitwiseTests { protected: void SetUp() override { GTEST_SKIP(); } }; +class AvmBitwiseNegativeTestsU1 : public AvmBitwiseTests { + protected: + void SetUp() override { GTEST_SKIP(); } +}; class AvmBitwiseNegativeTestsU8 : public AvmBitwiseTests { protected: void SetUp() override { GTEST_SKIP(); } @@ -745,7 +759,7 @@ TEST_F(AvmBitwiseNegativeTestsFF, UndefinedOverFF) // Triggers a write row 1 of mem_trace and alu_trace trace_builder.op_set(0, 10, 0, AvmMemoryTag::U8); // Triggers a write in row 2 of alu_trace - trace_builder.op_not(0, 0, 1, AvmMemoryTag::U8); + trace_builder.op_not(0, 0, 1); // Finally, we will have a write in row 3 of the mem_trace to copy the result // from the op_not operation. trace_builder.op_return(0, 0, 0); @@ -754,19 +768,25 @@ TEST_F(AvmBitwiseNegativeTestsFF, UndefinedOverFF) // TODO(ilyas): When the SET opcodes applies relational constraints, this will fail // we will need to look at a new way of doing this test. for (size_t i = 1; i < 4; i++) { - trace.at(i).mem_tag = FF(6); - trace.at(i).mem_r_in_tag = FF(6); - trace.at(i).mem_w_in_tag = FF(6); + trace.at(i).mem_tag = FF(static_cast(AvmMemoryTag::FF)); + trace.at(i).mem_r_in_tag = FF(static_cast(AvmMemoryTag::FF)); + trace.at(i).mem_w_in_tag = FF(static_cast(AvmMemoryTag::FF)); trace.at(i).alu_ff_tag = FF::one(); trace.at(i).alu_u8_tag = FF::zero(); - trace.at(i).main_r_in_tag = FF(6); - trace.at(i).main_w_in_tag = FF(6); - trace.at(i).alu_in_tag = FF(6); + trace.at(i).main_r_in_tag = FF(static_cast(AvmMemoryTag::FF)); + trace.at(i).main_w_in_tag = FF(static_cast(AvmMemoryTag::FF)); + trace.at(i).alu_in_tag = FF(static_cast(AvmMemoryTag::FF)); } EXPECT_THROW_WITH_MESSAGE(validate_trace_check_circuit(std::move(trace)), "ALU_FF_NOT_XOR"); } +TEST_F(AvmBitwiseNegativeTestsU1, BitwiseNot) +{ + std::vector trace = gen_mutated_trace_not(FF{ 0 }, FF{ 0 }, AvmMemoryTag::U1); + EXPECT_THROW_WITH_MESSAGE(validate_trace_check_circuit(std::move(trace)), "ALU_OP_NOT"); +} + TEST_F(AvmBitwiseNegativeTestsU8, BitwiseNot) { std::vector trace = gen_mutated_trace_not(FF{ 1 }, FF{ 2 }, AvmMemoryTag::U8); diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/cast.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/cast.test.cpp index b9985009ba3..d93abc2872d 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/cast.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/cast.test.cpp @@ -17,7 +17,8 @@ class AvmCastTests : public ::testing::Test { public: AvmCastTests() : public_inputs(generate_base_public_inputs()) - , trace_builder(AvmTraceBuilder(public_inputs)) + , trace_builder( + AvmTraceBuilder(public_inputs).set_full_precomputed_tables(false).set_range_check_required(false)) { srs::init_crs_factory("../srs_db/ignition"); } @@ -66,10 +67,7 @@ class AvmCastTests : public ::testing::Test { uint32_t src_address, uint32_t dst_address, AvmMemoryTag src_tag, - AvmMemoryTag dst_tag, - bool force_proof = false - - ) + AvmMemoryTag dst_tag) { auto const& row = trace.at(main_row_idx); EXPECT_THAT(row, @@ -106,13 +104,7 @@ class AvmCastTests : public ::testing::Test { ALU_ROW_FIELD_EQ(in_tag, static_cast(dst_tag)), ALU_ROW_FIELD_EQ(sel_alu, 1))); - // We still want the ability to enable proving through the environment variable and therefore we do not pass - // the boolean variable force_proof to validate_trace second argument. - if (force_proof) { - validate_trace(std::move(trace), public_inputs, calldata, {}, true); - } else { - validate_trace(std::move(trace), public_inputs, calldata); - } + validate_trace(std::move(trace), public_inputs, calldata); } }; @@ -121,6 +113,24 @@ class AvmCastNegativeTests : public AvmCastTests { void SetUp() override { GTEST_SKIP(); } }; +TEST_F(AvmCastTests, basicU1ToU8) +{ + gen_trace(1, 0, 1, AvmMemoryTag::U1, AvmMemoryTag::U8); + validate_cast_trace(1, 1, 0, 1, AvmMemoryTag::U1, AvmMemoryTag::U8); +} + +TEST_F(AvmCastTests, noTruncationU8ToU1) +{ + gen_trace(1, 0, 1, AvmMemoryTag::U8, AvmMemoryTag::U1); + validate_cast_trace(1, 1, 0, 1, AvmMemoryTag::U8, AvmMemoryTag::U1); +} + +TEST_F(AvmCastTests, truncationU8ToU1) +{ + gen_trace(15, 0, 1, AvmMemoryTag::U8, AvmMemoryTag::U1); + validate_cast_trace(15, 1, 0, 1, AvmMemoryTag::U8, AvmMemoryTag::U1); +} + TEST_F(AvmCastTests, basicU8ToU16) { gen_trace(237, 0, 1, AvmMemoryTag::U8, AvmMemoryTag::U16); @@ -171,7 +181,9 @@ TEST_F(AvmCastTests, noTruncationFFToU32) TEST_F(AvmCastTests, truncationFFToU16ModMinus1) { calldata = { FF::modulus - 1 }; - trace_builder = AvmTraceBuilder(public_inputs, {}, 0, calldata); + trace_builder = AvmTraceBuilder(public_inputs, {}, 0, calldata) + .set_full_precomputed_tables(false) + .set_range_check_required(false); trace_builder.op_set(0, 1, 1, AvmMemoryTag::U32); trace_builder.op_calldata_copy(0, 0, 1, 0); trace_builder.op_cast(0, 0, 1, AvmMemoryTag::U16); @@ -185,7 +197,9 @@ TEST_F(AvmCastTests, truncationFFToU16ModMinus1) TEST_F(AvmCastTests, truncationFFToU16ModMinus2) { calldata = { FF::modulus_minus_two }; - trace_builder = AvmTraceBuilder(public_inputs, {}, 0, calldata); + trace_builder = AvmTraceBuilder(public_inputs, {}, 0, calldata) + .set_full_precomputed_tables(false) + .set_range_check_required(false); trace_builder.op_set(0, 1, 1, AvmMemoryTag::U32); trace_builder.op_calldata_copy(0, 0, 1, 0); trace_builder.op_cast(0, 0, 1, AvmMemoryTag::U16); @@ -217,7 +231,7 @@ TEST_F(AvmCastTests, indirectAddrTruncationU64ToU8) trace = trace_builder.finalize(); gen_indices(); - validate_cast_trace(256'000'000'203UL, 203, 10, 11, AvmMemoryTag::U64, AvmMemoryTag::U8, true); + validate_cast_trace(256'000'000'203UL, 203, 10, 11, AvmMemoryTag::U64, AvmMemoryTag::U8); } TEST_F(AvmCastTests, indirectAddrWrongResolutionU64ToU8) @@ -297,7 +311,9 @@ TEST_F(AvmCastNegativeTests, wrongOutputAluIc) TEST_F(AvmCastNegativeTests, wrongLimbDecompositionInput) { calldata = { FF::modulus_minus_two }; - trace_builder = AvmTraceBuilder(public_inputs, {}, 0, calldata); + trace_builder = AvmTraceBuilder(public_inputs, {}, 0, calldata) + .set_full_precomputed_tables(false) + .set_range_check_required(false); trace_builder.op_calldata_copy(0, 0, 1, 0); trace_builder.op_cast(0, 0, 1, AvmMemoryTag::U16); trace_builder.op_return(0, 0, 0); @@ -322,7 +338,9 @@ TEST_F(AvmCastNegativeTests, wrongPSubALo) TEST_F(AvmCastNegativeTests, wrongPSubAHi) { calldata = { FF::modulus_minus_two - 987 }; - trace_builder = AvmTraceBuilder(public_inputs, {}, 0, calldata); + trace_builder = AvmTraceBuilder(public_inputs, {}, 0, calldata) + .set_full_precomputed_tables(false) + .set_range_check_required(false); trace_builder.op_calldata_copy(0, 0, 1, 0); trace_builder.op_cast(0, 0, 1, AvmMemoryTag::U16); trace_builder.op_return(0, 0, 0); @@ -360,7 +378,9 @@ TEST_F(AvmCastNegativeTests, wrongRangeCheckDecompositionLo) TEST_F(AvmCastNegativeTests, wrongRangeCheckDecompositionHi) { calldata = { FF::modulus_minus_two - 987 }; - trace_builder = AvmTraceBuilder(public_inputs, {}, 0, calldata); + trace_builder = AvmTraceBuilder(public_inputs, {}, 0, calldata) + .set_full_precomputed_tables(false) + .set_range_check_required(false); trace_builder.op_calldata_copy(0, 0, 1, 0); trace_builder.op_cast(0, 0, 1, AvmMemoryTag::U16); trace_builder.op_return(0, 0, 0); @@ -398,7 +418,9 @@ TEST_F(AvmCastNegativeTests, wrongCopySubLoForRangeCheck) TEST_F(AvmCastNegativeTests, wrongCopySubHiForRangeCheck) { std::vector const calldata = { FF::modulus_minus_two - 972836 }; - trace_builder = AvmTraceBuilder(public_inputs, {}, 0, calldata); + trace_builder = AvmTraceBuilder(public_inputs, {}, 0, calldata) + .set_full_precomputed_tables(false) + .set_range_check_required(false); trace_builder.op_calldata_copy(0, 0, 1, 0); trace_builder.op_cast(0, 0, 1, AvmMemoryTag::U128); trace_builder.op_return(0, 0, 0); diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/comparison.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/comparison.test.cpp index b1315b0bb97..463a281f600 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/comparison.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/comparison.test.cpp @@ -51,7 +51,7 @@ void common_validate_cmp(Row const& row, // Check the instruction tags EXPECT_EQ(row.main_r_in_tag, FF(static_cast(tag))); - EXPECT_EQ(row.main_w_in_tag, FF(static_cast(AvmMemoryTag::U8))); + EXPECT_EQ(row.main_w_in_tag, FF(static_cast(AvmMemoryTag::U1))); // Check that intermediate registers are correctly copied in Alu trace EXPECT_EQ(alu_row.alu_ia, a); @@ -60,6 +60,7 @@ void common_validate_cmp(Row const& row, } } // namespace std::vector positive_op_lt_test_values = { { { FF(1), FF(1), FF(0) }, + { FF(1), FF(1), FF(0) }, { FF(5323), FF(321), FF(0) }, { FF(13793), FF(10590617LLU), FF(1) }, { FF(0x7bff744e3cdf79LLU), FF(0x14ccccccccb6LLU), FF(0) }, @@ -69,6 +70,7 @@ std::vector positive_op_lt_test_values = { { { FF(1), FF(1), FF(0) 1 } } }; std::vector positive_op_lte_test_values = { { { FF(1), FF(1), FF(1) }, + { FF(1), FF(1), FF(1) }, { FF(5323), FF(321), FF(0) }, { FF(13793), FF(10590617LLU), FF(1) }, { FF(0x7bff744e3cdf79LLU), FF(0x14ccccccccb6LLU), FF(0) }, @@ -78,14 +80,15 @@ std::vector positive_op_lte_test_values = { }; std::vector mem_tag_arr{ - { AvmMemoryTag::U8, AvmMemoryTag::U16, AvmMemoryTag::U32, AvmMemoryTag::U64, AvmMemoryTag::U128 } + { AvmMemoryTag::U1, AvmMemoryTag::U8, AvmMemoryTag::U16, AvmMemoryTag::U32, AvmMemoryTag::U64, AvmMemoryTag::U128 } }; class AvmCmpTests : public ::testing::Test { public: AvmCmpTests() : public_inputs(generate_base_public_inputs()) - , trace_builder(AvmTraceBuilder(public_inputs)) + , trace_builder( + AvmTraceBuilder(public_inputs).set_full_precomputed_tables(false).set_range_check_required(false)) { srs::init_crs_factory("../srs_db/ignition"); } @@ -110,7 +113,9 @@ TEST_P(AvmCmpTestsLT, ParamTest) if (mem_tag == AvmMemoryTag::FF) { calldata = { a, b }; - trace_builder = AvmTraceBuilder(public_inputs, {}, 0, calldata); + trace_builder = AvmTraceBuilder(public_inputs, {}, 0, calldata) + .set_full_precomputed_tables(false) + .set_range_check_required(false); trace_builder.op_calldata_copy(0, 0, 2, 0); } else { trace_builder.op_set(0, a, 0, mem_tag); @@ -146,7 +151,9 @@ TEST_P(AvmCmpTestsLTE, ParamTest) if (mem_tag == AvmMemoryTag::FF) { calldata = { a, b }; - trace_builder = AvmTraceBuilder(public_inputs, {}, 0, calldata); + trace_builder = AvmTraceBuilder(public_inputs, {}, 0, calldata) + .set_full_precomputed_tables(false) + .set_range_check_required(false); trace_builder.op_calldata_copy(0, 0, 2, 0); } else { trace_builder.op_set(0, a, 0, mem_tag); @@ -324,7 +331,9 @@ TEST_P(AvmCmpNegativeTestsLT, ParamTest) const auto [failure_string, failure_mode] = failure; const auto [a, b, output] = params; - trace_builder = AvmTraceBuilder(public_inputs, {}, 0, std::vector{ a, b, output }); + trace_builder = AvmTraceBuilder(public_inputs, {}, 0, std::vector{ a, b, output }) + .set_full_precomputed_tables(false) + .set_range_check_required(false); trace_builder.op_calldata_copy(0, 0, 3, 0); trace_builder.op_lt(0, 0, 1, 2, AvmMemoryTag::FF); trace_builder.op_return(0, 0, 0); @@ -343,7 +352,9 @@ TEST_P(AvmCmpNegativeTestsLTE, ParamTest) const auto [failure, params] = GetParam(); const auto [failure_string, failure_mode] = failure; const auto [a, b, output] = params; - trace_builder = AvmTraceBuilder(public_inputs, {}, 0, std::vector{ a, b, output }); + trace_builder = AvmTraceBuilder(public_inputs, {}, 0, std::vector{ a, b, output }) + .set_full_precomputed_tables(false) + .set_range_check_required(false); trace_builder.op_calldata_copy(0, 0, 3, 0); trace_builder.op_lte(0, 0, 1, 2, AvmMemoryTag::FF); trace_builder.op_return(0, 0, 0); diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/control_flow.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/control_flow.test.cpp index 833c7cd357e..51120ff94c8 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/control_flow.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/control_flow.test.cpp @@ -40,7 +40,8 @@ class AvmControlFlowTests : public ::testing::Test { public: AvmControlFlowTests() : public_inputs(generate_base_public_inputs()) - , trace_builder(AvmTraceBuilder(public_inputs)) + , trace_builder( + AvmTraceBuilder(public_inputs).set_full_precomputed_tables(false).set_range_check_required(false)) { srs::init_crs_factory("../srs_db/ignition"); } @@ -87,7 +88,7 @@ TEST_F(AvmControlFlowTests, simpleCall) EXPECT_EQ(halt_row->main_pc, FF(CALL_PC)); EXPECT_EQ(halt_row->main_internal_return_ptr, FF(1)); } - validate_trace(std::move(trace), public_inputs, {}, {}, true); + validate_trace(std::move(trace), public_inputs, {}, {}); } TEST_F(AvmControlFlowTests, simpleJump) diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/execution.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/execution.test.cpp index bb6302e8662..7a8c3cb6a36 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/execution.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/execution.test.cpp @@ -30,7 +30,18 @@ class AvmExecutionTests : public ::testing::Test { VmPublicInputs public_inputs; AvmExecutionTests() - : public_inputs_vec(PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH){}; + : public_inputs_vec(PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH) + { + Execution::set_trace_builder_constructor([](VmPublicInputs public_inputs, + ExecutionHints execution_hints, + uint32_t side_effect_counter, + std::vector calldata) { + return AvmTraceBuilder( + std::move(public_inputs), std::move(execution_hints), side_effect_counter, std::move(calldata)) + .set_full_precomputed_tables(false) + .set_range_check_required(false); + }); + }; protected: const FixedGasTable& GAS_COST_TABLE = FixedGasTable::get(); @@ -68,9 +79,9 @@ class AvmExecutionTests : public ::testing::Test { // Parsing, trace generation and proving is verified. TEST_F(AvmExecutionTests, basicAddReturn) { - std::string bytecode_hex = to_hex(OpCode::ADD_16) + // opcode ADD - "00" // Indirect flag - "01" // U8 + std::string bytecode_hex = to_hex(OpCode::ADD_16) + // opcode ADD + "00" // Indirect flag + + to_hex(AvmMemoryTag::U8) + "0007" // addr a 7 "0009" // addr b 9 "0001" // addr c 1 @@ -102,25 +113,25 @@ TEST_F(AvmExecutionTests, basicAddReturn) ElementsAre(VariantWith(0), VariantWith(0), VariantWith(0))))); auto trace = gen_trace_from_instr(instructions); - validate_trace(std::move(trace), public_inputs, {}, {}, true); + validate_trace(std::move(trace), public_inputs, {}, {}); } // Positive test for SET and SUB opcodes TEST_F(AvmExecutionTests, setAndSubOpcodes) { - std::string bytecode_hex = to_hex(OpCode::SET_16) + // opcode SET - "00" // Indirect flag - "02" // U16 + std::string bytecode_hex = to_hex(OpCode::SET_16) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U16) + "B813" // val 47123 "00AA" // dst_offset 170 + to_hex(OpCode::SET_16) + // opcode SET "00" // Indirect flag - "02" // U16 - "9103" // val 37123 - "0033" // dst_offset 51 - + to_hex(OpCode::SUB_8) + // opcode SUB - "00" // Indirect flag - "02" // U16 + + to_hex(AvmMemoryTag::U16) + + "9103" // val 37123 + "0033" // dst_offset 51 + + to_hex(OpCode::SUB_8) + // opcode SUB + "00" // Indirect flag + + to_hex(AvmMemoryTag::U16) + "AA" // addr a "33" // addr b "01" // addr c 1 @@ -167,7 +178,7 @@ TEST_F(AvmExecutionTests, setAndSubOpcodes) // Find the first row enabling the subtraction selector auto row = std::ranges::find_if(trace.begin(), trace.end(), [](Row r) { return r.main_sel_op_sub == 1; }); EXPECT_EQ(row->main_ic, 10000); // 47123 - 37123 = 10000 - validate_trace(std::move(trace), public_inputs, {}, {}, true); + validate_trace(std::move(trace), public_inputs, {}, {}); } // Positive test for multiple MUL opcodes @@ -178,23 +189,23 @@ TEST_F(AvmExecutionTests, setAndSubOpcodes) // the result at offset 1. TEST_F(AvmExecutionTests, powerWithMulOpcodes) { - std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "04" // U64 + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U64) + "05" // val "00" // dst_offset 0 + to_hex(OpCode::SET_8) + // opcode SET "00" // Indirect flag - "04" // U64 - "01" // val - "01"; // dst_offset 1 + + to_hex(AvmMemoryTag::U64) + + "01" // val + "01"; // dst_offset 1 std::string const mul_hex = to_hex(OpCode::MUL_8) + // opcode MUL "00" // Indirect flag - "04" // U64 - "00" // addr a - "01" // addr b - "01"; // addr c 1 + + to_hex(AvmMemoryTag::U64) + + "00" // addr a + "01" // addr b + "01"; // addr c 1 std::string const ret_hex = to_hex(OpCode::RETURN) + // opcode RETURN "00" // Indirect flag @@ -259,26 +270,26 @@ TEST_F(AvmExecutionTests, powerWithMulOpcodes) // 0 1 2 3 4 5 TEST_F(AvmExecutionTests, simpleInternalCall) { - std::string bytecode_hex = to_hex(OpCode::SET_32) + // opcode SET - "00" // Indirect flag - "03" // U32 + std::string bytecode_hex = to_hex(OpCode::SET_32) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + "0D3D2518" // val 222111000 = 0xD3D2518 "0004" // dst_offset 4 + to_hex(OpCode::INTERNALCALL) + // opcode INTERNALCALL "00000004" // jmp_dest + to_hex(OpCode::ADD_16) + // opcode ADD "00" // Indirect flag - "03" // U32 - "0004" // addr a 4 - "0007" // addr b 7 - "0009" // addr c9 - + to_hex(OpCode::RETURN) + // opcode RETURN - "00" // Indirect flag - "00000000" // ret offset 0 - "00000000" // ret size 0 - + to_hex(OpCode::SET_32) + // opcode SET - "00" // Indirect flag - "03" // U32 + + to_hex(AvmMemoryTag::U32) + + "0004" // addr a 4 + "0007" // addr b 7 + "0009" // addr c9 + + to_hex(OpCode::RETURN) + // opcode RETURN + "00" // Indirect flag + "00000000" // ret offset 0 + "00000000" // ret size 0 + + to_hex(OpCode::SET_32) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + "075BCD15" // val 123456789 = 0x75BCD15 "0007" // dst_offset 7 + to_hex(OpCode::INTERNALRETURN) // opcode INTERNALRETURN @@ -338,12 +349,11 @@ TEST_F(AvmExecutionTests, nestedInternalCalls) // val and dst_offset is assumed to be 2 bytes return to_hex(OpCode::SET_32) // opcode SET + "00" // Indirect flag - + "01" // U8 - + "000000" + val + "00" + dst_offset; + + to_hex(AvmMemoryTag::U8) + "000000" + val + "00" + dst_offset; }; - const std::string tag_address_arguments = "00" // Indirect Flag - "01" // U8 + const std::string tag_address_arguments = "00" // Indirect Flag + + to_hex(AvmMemoryTag::U8) + "02" // addr a 2 "03" // addr b 3 "02"; // addr c 2 @@ -401,14 +411,14 @@ TEST_F(AvmExecutionTests, nestedInternalCalls) // 0 1 2 3 4 TEST_F(AvmExecutionTests, jumpAndCalldatacopy) { - std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "03" // U32 - "00" // val - "00" // dst_offset 101 - + to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "03" // U32 + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "00" // val + "00" // dst_offset 101 + + to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + "02" // val "01" // dst_offset 101 + to_hex(OpCode::CALLDATACOPY) + // opcode CALLDATACOPY (no in tag) @@ -420,20 +430,20 @@ TEST_F(AvmExecutionTests, jumpAndCalldatacopy) "0005" // jmp_dest (FDIV located at 3) + to_hex(OpCode::SUB_8) + // opcode SUB "00" // Indirect flag - "06" // FF - "0B" // addr 11 - "0A" // addr 10 - "01" // addr c 1 (If executed would be 156 - 13 = 143) - + to_hex(OpCode::FDIV_8) + // opcode FDIV - "00" // Indirect flag - "06" // tag - "0B" // addr 11 - "0A" // addr 10 - "01" // addr c 1 (156 / 13 = 12) - + to_hex(OpCode::RETURN) + // opcode RETURN - "00" // Indirect flag - "00000000" // ret offset 0 - "00000000" // ret size 0 + + to_hex(AvmMemoryTag::FF) + + "0B" // addr 11 + "0A" // addr 10 + "01" // addr c 1 (If executed would be 156 - 13 = 143) + + to_hex(OpCode::FDIV_8) + // opcode FDIV + "00" // Indirect flag + + to_hex(AvmMemoryTag::FF) + + "0B" // addr 11 + "0A" // addr 10 + "01" // addr c 1 (156 / 13 = 12) + + to_hex(OpCode::RETURN) + // opcode RETURN + "00" // Indirect flag + "00000000" // ret offset 0 + "00000000" // ret size 0 ; auto bytecode = hex_to_bytes(bytecode_hex); @@ -492,14 +502,14 @@ TEST_F(AvmExecutionTests, jumpAndCalldatacopy) // We test this bytecode with two calldatacopy values: 9873123 and 0. TEST_F(AvmExecutionTests, jumpiAndCalldatacopy) { - std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "03" // U32 - "00" // val - "00" // dst_offset - + to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "03" // U32 + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "00" // val + "00" // dst_offset + + to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + "01" // val "01" // dst_offset + to_hex(OpCode::CALLDATACOPY) + // opcode CALLDATACOPY (no in tag) @@ -509,29 +519,29 @@ TEST_F(AvmExecutionTests, jumpiAndCalldatacopy) "0000000A" // dst_offset 10 + to_hex(OpCode::SET_8) + // opcode SET "00" // Indirect flag - "02" // U16 - "14" // val 20 - "65" // dst_offset 101 - + to_hex(OpCode::JUMPI_16) + // opcode JUMPI - "00" // Indirect flag - "0006" // jmp_dest (MUL located at 6) - "000A" // cond_offset 10 - + to_hex(OpCode::ADD_16) + // opcode ADD - "00" // Indirect flag - "02" // U16 - "0065" // addr 101 - "0065" // addr 101 - "0065" // output addr 101 - + to_hex(OpCode::MUL_8) + // opcode MUL - "00" // Indirect flag - "02" // U16 - "65" // addr 101 - "65" // addr 101 - "66" // output of MUL addr 102 - + to_hex(OpCode::RETURN) + // opcode RETURN - "00" // Indirect flag - "00000000" // ret offset 0 - "00000000" // ret size 0 + + to_hex(AvmMemoryTag::U16) + + "14" // val 20 + "65" // dst_offset 101 + + to_hex(OpCode::JUMPI_16) + // opcode JUMPI + "00" // Indirect flag + "0006" // jmp_dest (MUL located at 6) + "000A" // cond_offset 10 + + to_hex(OpCode::ADD_16) + // opcode ADD + "00" // Indirect flag + + to_hex(AvmMemoryTag::U16) + + "0065" // addr 101 + "0065" // addr 101 + "0065" // output addr 101 + + to_hex(OpCode::MUL_8) + // opcode MUL + "00" // Indirect flag + + to_hex(AvmMemoryTag::U16) + + "65" // addr 101 + "65" // addr 101 + "66" // output of MUL addr 102 + + to_hex(OpCode::RETURN) + // opcode RETURN + "00" // Indirect flag + "00000000" // ret offset 0 + "00000000" // ret size 0 ; auto bytecode = hex_to_bytes(bytecode_hex); @@ -573,9 +583,9 @@ TEST_F(AvmExecutionTests, jumpiAndCalldatacopy) // Positive test with MOV. TEST_F(AvmExecutionTests, movOpcode) { - std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "01" // U8 + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U8) + "13" // val 19 "AB" // dst_offset 171 + to_hex(OpCode::MOV_8) + // opcode MOV @@ -621,19 +631,19 @@ TEST_F(AvmExecutionTests, movOpcode) // Positive test with CMOV. TEST_F(AvmExecutionTests, cmovOpcode) { - std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "01" // U8 - "03" // val 3 - "10" // a_offset 16 - + to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "02" // U16 - "04" // val 4 - "11" // b_offset 17 - + to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "03" // U32 + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U8) + + "03" // val 3 + "10" // a_offset 16 + + to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U16) + + "04" // val 4 + "11" // b_offset 17 + + to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + "05" // val 5 "20" // cond_offset 32 + to_hex(OpCode::CMOV) + // opcode CMOV @@ -677,19 +687,19 @@ TEST_F(AvmExecutionTests, cmovOpcode) // Positive test with indirect MOV. TEST_F(AvmExecutionTests, indMovOpcode) { - std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "03" // U32 - "0A" // val 10 - "01" // dst_offset 1 - + to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "03" // U32 - "0B" // val 11 - "02" // dst_offset 2 - + to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "01" // U8 + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "0A" // val 10 + "01" // dst_offset 1 + + to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "0B" // val 11 + "02" // dst_offset 2 + + to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U8) + "FF" // val 255 "0A" // dst_offset 10 + to_hex(OpCode::MOV_8) + // opcode MOV @@ -725,14 +735,14 @@ TEST_F(AvmExecutionTests, indMovOpcode) // Positive test for SET and CAST opcodes TEST_F(AvmExecutionTests, setAndCastOpcodes) { - std::string bytecode_hex = to_hex(OpCode::SET_16) + // opcode SET - "00" // Indirect flag - "02" // U16 + std::string bytecode_hex = to_hex(OpCode::SET_16) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U16) + "B813" // val 47123 "0011" // dst_offset 17 + to_hex(OpCode::CAST_8) + // opcode CAST "00" // Indirect flag - "01" // U8 + + to_hex(AvmMemoryTag::U8) + "11" // addr a "12" // addr casted a + to_hex(OpCode::RETURN) + // opcode RETURN @@ -766,14 +776,14 @@ TEST_F(AvmExecutionTests, setAndCastOpcodes) // Positive test with TO_RADIX_LE. TEST_F(AvmExecutionTests, toRadixLeOpcode) { - std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "03" // U32 - "00" // val - "00" // dst_offset - + to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "03" // U32 + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "00" // val + "00" // dst_offset + + to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + "01" // val "01" // dst_offset + to_hex(OpCode::CALLDATACOPY) + // opcode CALLDATACOPY @@ -783,24 +793,96 @@ TEST_F(AvmExecutionTests, toRadixLeOpcode) "00000001" // dst_offset + to_hex(OpCode::SET_8) + // opcode SET for indirect src "00" // Indirect flag - "03" // U32 - "01" // value 1 (i.e. where the src from calldata is copied) - "11" // dst_offset 17 - + to_hex(OpCode::SET_8) + // opcode SET for indirect dst + + to_hex(AvmMemoryTag::U32) + + "01" // value 1 (i.e. where the src from calldata is copied) + "11" // dst_offset 17 + + to_hex(OpCode::SET_8) + // opcode SET for indirect dst + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "05" // value 5 (i.e. where the dst will be written to) + "15" // dst_offset 21 + + to_hex(OpCode::SET_8) + // opcode SET for indirect dst + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "02" // value 2 (i.e. radix 2 - perform bitwise decomposition) + "80" // radix_offset 80 + + to_hex(OpCode::TORADIXLE) + // opcode TO_RADIX_LE + "03" // Indirect flag + "00000011" // src_offset 17 (indirect) + "00000015" // dst_offset 21 (indirect) + "00000080" // radix_offset 80 (direct) + "00000100" // limbs: 256 + "00" // output_bits: false + + to_hex(OpCode::RETURN) + // opcode RETURN + "00" // Indirect flag + "00000005" // ret offset 0 + "00000100"; // ret size 0 + + auto bytecode = hex_to_bytes(bytecode_hex); + auto instructions = Deserialization::parse(bytecode); + + // Assign a vector that we will mutate internally in gen_trace to store the return values; + std::vector returndata; + auto trace = + Execution::gen_trace(instructions, returndata, std::vector{ FF::modulus - FF(1) }, public_inputs_vec); + + // Find the first row enabling the TORADIXLE selector + // Expected output is bitwise decomposition of MODULUS - 1..could hardcode the result but it's a bit long + std::vector expected_output; + // Extract each bit. + for (size_t i = 0; i < 256; i++) { + FF expected_limb = (FF::modulus - 1) >> i & 1; + expected_output.emplace_back(expected_limb); + } + EXPECT_EQ(returndata, expected_output); + + validate_trace(std::move(trace), public_inputs, { FF::modulus - FF(1) }, returndata); +} + +// Positive test with TO_RADIX_LE. +TEST_F(AvmExecutionTests, toRadixLeOpcodeBitsMode) +{ + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "00" // val + "00" // dst_offset + + to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "01" // val + "01" // dst_offset + + to_hex(OpCode::CALLDATACOPY) + // opcode CALLDATACOPY "00" // Indirect flag - "03" // U32 - "05" // value 5 (i.e. where the dst will be written to) - "15" // dst_offset 21 - + to_hex(OpCode::TORADIXLE) + // opcode TO_RADIX_LE - "03" // Indirect flag - "00000011" // src_offset 17 (indirect) - "00000015" // dst_offset 21 (indirect) - "00000002" // radix: 2 (i.e. perform bitwise decomposition) - "00000100" // limbs: 256 - + to_hex(OpCode::RETURN) + // opcode RETURN + "00000000" // cd_offset + "00000001" // copy_size + "00000001" // dst_offset + + to_hex(OpCode::SET_8) + // opcode SET for indirect src "00" // Indirect flag - "00000005" // ret offset 0 - "00000100"; // ret size 0 + + to_hex(AvmMemoryTag::U32) + + "01" // value 1 (i.e. where the src from calldata is copied) + "11" // dst_offset 17 + + to_hex(OpCode::SET_8) + // opcode SET for indirect dst + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "05" // value 5 (i.e. where the dst will be written to) + "15" // dst_offset 21 + + to_hex(OpCode::SET_8) + // opcode SET for indirect dst + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "02" // value 2 (i.e. radix 2 - perform bitwise decomposition) + "80" // radix_offset 80 + + to_hex(OpCode::TORADIXLE) + // opcode TO_RADIX_LE + "03" // Indirect flag + "00000011" // src_offset 17 (indirect) + "00000015" // dst_offset 21 (indirect) + "00000080" // radix_offset 80 (direct) + "00000100" // limbs: 256 + "01" // output_bits: true + + to_hex(OpCode::RETURN) + // opcode RETURN + "00" // Indirect flag + "00000005" // ret offset 0 + "00000100"; // ret size 0 auto bytecode = hex_to_bytes(bytecode_hex); auto instructions = Deserialization::parse(bytecode); @@ -831,43 +913,43 @@ TEST_F(AvmExecutionTests, sha256CompressionOpcode) // Test vectors taken from noir black_box_solver // State = Uint32Array.from([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]), for (uint8_t i = 1; i <= 8; i++) { - bytecode_preamble += to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "03" + // U32 - to_hex(i) + // val i - to_hex(i); // val i + bytecode_preamble += to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + to_hex(i) + // val i + to_hex(i); // val i } // Set operations for sha256 input // Test vectors taken from noir black_box_solver // Input = Uint32Array.from([1, 2, 3, 4, 5, 6, 7, 8]), for (uint8_t i = 1; i <= 16; i++) { - bytecode_preamble += to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "03" + // U32 - to_hex(i) + // val i - to_hex(i + 8); // val i + bytecode_preamble += to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + to_hex(i) + // val i + to_hex(i + 8); // val i } std::string bytecode_hex = bytecode_preamble // Initial SET operations to store state and input + to_hex(OpCode::SET_16) + // opcode SET for indirect dst (output) "00" // Indirect flag - "03" // U32 - "0100" // value 256 (i.e. where the dst will be written to) - "0024" // dst_offset 36 - + to_hex(OpCode::SET_8) + // opcode SET for indirect state - "00" // Indirect flag - "03" // U32 - "01" // value 1 (i.e. where the state will be read from) - "22" // dst_offset 34 - + to_hex(OpCode::SET_8) + // opcode SET for indirect input - "00" // Indirect flag - "03" // U32 - "09" // value 9 (i.e. where the input will be read from) - "23" // dst_offset 35 + + to_hex(AvmMemoryTag::U32) + + "0100" // value 256 (i.e. where the dst will be written to) + "0024" // dst_offset 36 + + to_hex(OpCode::SET_8) + // opcode SET for indirect state + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "01" // value 1 (i.e. where the state will be read from) + "22" // dst_offset 34 + + to_hex(OpCode::SET_8) + // opcode SET for indirect input + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "09" // value 9 (i.e. where the input will be read from) + "23" // dst_offset 35 + to_hex(OpCode::SHA256COMPRESSION) + // opcode SHA256COMPRESSION - "07" // Indirect flag (first 3 operands indirect) - "00000024" // output offset (indirect 36) - "00000022" // state offset (indirect 34) - "00000023" // input offset (indirect 35) + "00" // Indirect flag + "00000100" // output offset + "00000001" // state offset + "0000000F" // state size + "00000009" // input offset + "00000008" // input size + to_hex(OpCode::RETURN) + // opcode RETURN "00" // Indirect flag "00000100" // ret offset 256 @@ -891,74 +973,6 @@ TEST_F(AvmExecutionTests, sha256CompressionOpcode) validate_trace(std::move(trace), public_inputs, calldata, returndata); } -// Positive test with SHA256 -TEST_F(AvmExecutionTests, sha256Opcode) -{ - - // Test vectors taken from noir black_box_solver - // Uint8Array.from([0x61, 0x62, 0x63]), - // Uint8Array.from([ - // 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, 0xb0, 0x03, - // 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad, - // ]), - std::vector expected_output = { - FF(0xba), FF(0x78), FF(0x16), FF(0xbf), FF(0x8f), FF(0x01), FF(0xcf), FF(0xea), FF(0x41), FF(0x41), FF(0x40), - FF(0xde), FF(0x5d), FF(0xae), FF(0x22), FF(0x23), FF(0xb0), FF(0x03), FF(0x61), FF(0xa3), FF(0x96), FF(0x17), - FF(0x7a), FF(0x9c), FF(0xb4), FF(0x10), FF(0xff), FF(0x61), FF(0xf2), FF(0x00), FF(0x15), FF(0xad), - }; - std::string bytecode_hex = to_hex(OpCode::SET_8) + // Initial SET operations to store state and input - "00" // Indirect Flag - "01" // U8 - "61" // val 97 - "01" // dst_offset 1 - + to_hex(OpCode::SET_8) + // opcode SET for indirect src (input) - "00" // Indirect flag - "01" // U8 - "62" // value 98 (i.e. where the src will be read from)A - "02" // input_offset 2 - + to_hex(OpCode::SET_8) + // opcode SET for indirect src (input) - "00" // Indirect flag - "01" // U32 - "63" // value 99 (i.e. where the src will be read from) - "03" // input_offset 36 - + to_hex(OpCode::SET_8) + // opcode SET for indirect src (input) - "00" // Indirect flag - "03" // U32 - "01" // value 1 (i.e. where the src will be read from) - "24" // input_offset 36 - + to_hex(OpCode::SET_8) + // - "00" // Indirect flag - "03" // U8 - "03" // value 3 (i.e. where the length parameter is stored) - "25" // input_offset 37 - + to_hex(OpCode::SET_16) + // opcode SET for indirect dst (output) - "00" // Indirect flag - "03" // U32 - "0100" // value 256 (i.e. where the ouput will be written to) - "0023" // dst_offset 35 - + to_hex(OpCode::SHA256) + // opcode SHA256 - "03" // Indirect flag (first 2 operands indirect) - "00000023" // output offset (indirect 35) - "00000024" // input offset (indirect 36) - "00000025" // length offset 37 - + to_hex(OpCode::RETURN) + // opcode RETURN - "00" // Indirect flag - "00000100" // ret offset 256 - "00000020"; // ret size 32 - - auto bytecode = hex_to_bytes(bytecode_hex); - auto instructions = Deserialization::parse(bytecode); - - // Assign a vector that we will mutate internally in gen_trace to store the return values; - std::vector returndata = std::vector(); - std::vector calldata = std::vector(); - auto trace = Execution::gen_trace(instructions, returndata, calldata, public_inputs_vec); - - EXPECT_EQ(returndata, expected_output); - - validate_trace(std::move(trace), public_inputs, calldata, returndata); -} - // Positive test with POSEIDON2_PERM. TEST_F(AvmExecutionTests, poseidon2PermutationOpCode) { @@ -968,14 +982,14 @@ TEST_F(AvmExecutionTests, poseidon2PermutationOpCode) FF(std::string("9a807b615c4d3e2fa0b1c2d3e4f56789fedcba9876543210abcdef0123456789")), FF(std::string("9a807b615c4d3e2fa0b1c2d3e4f56789fedcba9876543210abcdef0123456789")) }; - std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "03" // U32 - "00" // val - "00" // dst_offset - + to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "03" // U32 + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "00" // val + "00" // dst_offset + + to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + "04" // val "01" // dst_offset + to_hex(OpCode::CALLDATACOPY) + // opcode CALL DATA COPY @@ -985,22 +999,22 @@ TEST_F(AvmExecutionTests, poseidon2PermutationOpCode) "00000001" // dst_offset 1 + to_hex(OpCode::SET_8) + // opcode SET for indirect src (input) "00" // Indirect flag - "03" // U32 - "01" // value 1 (i.e. where the src will be read from) - "24" // dst_offset 36 - + to_hex(OpCode::SET_8) + // opcode SET for indirect dst (output) - "00" // Indirect flag - "03" // U32 - "09" // value 9 (i.e. where the ouput will be written to) - "23" // dst_offset 35 - + to_hex(OpCode::POSEIDON2) + // opcode POSEIDON2 - "03" // Indirect flag (first 2 operands indirect) - "00000024" // input offset (indirect 36) - "00000023" // output offset (indirect 35) - + to_hex(OpCode::RETURN) + // opcode RETURN - "00" // Indirect flag - "00000009" // ret offset 256 - "00000004"; // ret size 8 + + to_hex(AvmMemoryTag::U32) + + "01" // value 1 (i.e. where the src will be read from) + "24" // dst_offset 36 + + to_hex(OpCode::SET_8) + // opcode SET for indirect dst (output) + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "09" // value 9 (i.e. where the ouput will be written to) + "23" // dst_offset 35 + + to_hex(OpCode::POSEIDON2) + // opcode POSEIDON2 + "03" // Indirect flag (first 2 operands indirect) + "00000024" // input offset (indirect 36) + "00000023" // output offset (indirect 35) + + to_hex(OpCode::RETURN) + // opcode RETURN + "00" // Indirect flag + "00000009" // ret offset 256 + "00000004"; // ret size 8 auto bytecode = hex_to_bytes(bytecode_hex); auto instructions = Deserialization::parse(bytecode); @@ -1047,28 +1061,27 @@ TEST_F(AvmExecutionTests, keccakf1600OpCode) std::string bytecode_preamble; // Set operations for keccak state for (uint8_t i = 0; i < 25; i++) { - bytecode_preamble += to_hex(OpCode::SET_64) + // opcode SET - "00" // Indirect flag - "04" + // U64 - to_hex(state[i]) + // val i - to_hex(i + 1); // dst offset + bytecode_preamble += to_hex(OpCode::SET_64) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U64) + to_hex(state[i]) + // val i + to_hex(i + 1); // dst offset } // We use calldatacopy twice because we need to set up 4 inputs - std::string bytecode_hex = bytecode_preamble + // Initial SET operations to store state and input - to_hex(OpCode::SET_8) + // opcode SET for indirect src (input) - "00" // Indirect flag - "03" // U32 - "01" // value 1 (i.e. where the src will be read from) - "24" // input_offset 36 - + to_hex(OpCode::SET_8) + // - "00" // Indirect flag - "03" // U32 - "19" // value 25 (i.e. where the length parameter is stored) - "25" // input_offset 37 - + to_hex(OpCode::SET_16) + // opcode SET for indirect dst (output) - "00" // Indirect flag - "03" // U32 + std::string bytecode_hex = bytecode_preamble + // Initial SET operations to store state and input + to_hex(OpCode::SET_8) + // opcode SET for indirect src (input) + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "01" // value 1 (i.e. where the src will be read from) + "24" // input_offset 36 + + to_hex(OpCode::SET_8) + // + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "19" // value 25 (i.e. where the length parameter is stored) + "25" // input_offset 37 + + to_hex(OpCode::SET_16) + // opcode SET for indirect dst (output) + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + "0100" // value 256 (i.e. where the ouput will be written to) "0023" // dst_offset 35 + to_hex(OpCode::KECCAKF1600) + // opcode KECCAKF1600 @@ -1108,24 +1121,24 @@ TEST_F(AvmExecutionTests, keccakOpCode) FF(0x33), FF(0x65), FF(0x19), FF(0x37), FF(0xe8), FF(0x05), FF(0x27), FF(0x0c), FF(0xa3), FF(0xf3), FF(0xaf), FF(0x1c), FF(0x0d), FF(0xd2), FF(0x46), FF(0x2d), FF(0xca), FF(0x4b), FF(0x3b), FF(0x1a), FF(0xbf) }; - std::string bytecode_hex = to_hex(OpCode::SET_8) + // Initial SET operations to store state and input - "00" // Indirect Flag - "01" // U8 - "BD" // val 189 - "01" // dst_offset 1 - + to_hex(OpCode::SET_8) + // opcode SET for indirect src (input) - "00" // Indirect flag - "03" // U32 - "01" // value 1 (i.e. where the src will be read from) - "24" // input_offset 36 - + to_hex(OpCode::SET_8) + // - "00" // Indirect flag - "03" // U8 + std::string bytecode_hex = to_hex(OpCode::SET_8) + // Initial SET operations to store state and input + "00" // Indirect Flag + + to_hex(AvmMemoryTag::U8) + + "BD" // val 189 + "01" // dst_offset 1 + + to_hex(OpCode::SET_8) + // opcode SET for indirect src (input) + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "01" // value 1 (i.e. where the src will be read from) + "24" // input_offset 36 + + to_hex(OpCode::SET_8) + // + "00" // Indirect flag + + to_hex(AvmMemoryTag::U8) + "01" // value 1 (i.e. where the length parameter is stored) "25" // input_offset 37 + to_hex(OpCode::SET_16) + // opcode SET for indirect dst (output) "00" // Indirect flag - "03" // U32 + + to_hex(AvmMemoryTag::U32) + "0100" // value 256 (i.e. where the ouput will be written to) "0023" // dst_offset 35 + to_hex(OpCode::KECCAK) + // opcode KECCAK @@ -1159,14 +1172,14 @@ TEST_F(AvmExecutionTests, pedersenHashOpCode) // output = 0x1c446df60816b897cda124524e6b03f36df0cec333fad87617aab70d7861daa6 // hash_index = 5; FF expected_output = FF("0x1c446df60816b897cda124524e6b03f36df0cec333fad87617aab70d7861daa6"); - std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "03" // U32 - "00" // val - "00" // dst_offset - + to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "03" // U32 + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "00" // val + "00" // dst_offset + + to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + "02" // val "01" // dst_offset + to_hex(OpCode::CALLDATACOPY) + // Calldatacopy @@ -1176,29 +1189,29 @@ TEST_F(AvmExecutionTests, pedersenHashOpCode) "00000000" // dst_offset + to_hex(OpCode::SET_8) + // opcode SET for direct hash index offset "00" // Indirect flag - "03" // U32 - "05" // value 5 - "02" // input_offset 2 - + to_hex(OpCode::SET_8) + // opcode SET for indirect src - "00" // Indirect flag - "03" // U32 - "00" // value 0 (i.e. where the src will be read from) - "04" // dst_offset 4 - + to_hex(OpCode::SET_8) + // opcode SET for direct src_length - "00" // Indirect flag - "03" // U32 - "02" // value 2 - "05" // dst_offset - + to_hex(OpCode::PEDERSEN) + // opcode PEDERSEN - "04" // Indirect flag (3rd operand indirect) - "00000002" // hash_index offset (direct) - "00000003" // dest offset (direct) - "00000004" // input offset (indirect) - "00000005" // length offset (direct) - + to_hex(OpCode::RETURN) + // opcode RETURN - "00" // Indirect flag - "00000003" // ret offset 3 - "00000001"; // ret size 1 + + to_hex(AvmMemoryTag::U32) + + "05" // value 5 + "02" // input_offset 2 + + to_hex(OpCode::SET_8) + // opcode SET for indirect src + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "00" // value 0 (i.e. where the src will be read from) + "04" // dst_offset 4 + + to_hex(OpCode::SET_8) + // opcode SET for direct src_length + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "02" // value 2 + "05" // dst_offset + + to_hex(OpCode::PEDERSEN) + // opcode PEDERSEN + "04" // Indirect flag (3rd operand indirect) + "00000002" // hash_index offset (direct) + "00000003" // dest offset (direct) + "00000004" // input offset (indirect) + "00000005" // length offset (direct) + + to_hex(OpCode::RETURN) + // opcode RETURN + "00" // Indirect flag + "00000003" // ret offset 3 + "00000001"; // ret size 1 auto bytecode = hex_to_bytes(bytecode_hex); auto instructions = Deserialization::parse(bytecode); @@ -1223,14 +1236,14 @@ TEST_F(AvmExecutionTests, embeddedCurveAddOpCode) auto b_is_inf = b.is_point_at_infinity(); grumpkin::g1::affine_element res = a + b; auto expected_output = std::vector{ res.x, res.y, res.is_point_at_infinity() }; - std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "03" // U32 - "00" // val - "00" // dst_offset - + to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "03" // U32 + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "00" // val + "00" // dst_offset + + to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + "06" // val "01" // dst_offset + to_hex(OpCode::CALLDATACOPY) + // Calldatacopy @@ -1240,32 +1253,32 @@ TEST_F(AvmExecutionTests, embeddedCurveAddOpCode) "00000000" // dst_offset + to_hex(OpCode::CAST_8) + // opcode CAST inf to U8 "00" // Indirect flag - "01" // U8 tag field - "02" // a_is_inf - "02" // a_is_inf - + to_hex(OpCode::CAST_8) + // opcode CAST inf to U8 - "00" // Indirect flag - "01" // U8 tag field - "05" // b_is_inf - "05" // b_is_inf - + to_hex(OpCode::SET_8) + // opcode SET for direct src_length - "00" // Indirect flag - "03" // U32 - "07" // value - "06" // dst_offset - + to_hex(OpCode::ECADD) + // opcode ECADD - "40" // Indirect flag (sixth operand indirect) - "00000000" // hash_index offset (direct) - "00000001" // dest offset (direct) - "00000002" // input offset (indirect) - "00000003" // length offset (direct) - "00000004" // length offset (direct) - "00000005" // length offset (direct) - "00000006" // length offset (direct) - + to_hex(OpCode::RETURN) + // opcode RETURN - "00" // Indirect flag - "00000007" // ret offset 3 - "00000003"; // ret size 1 + + to_hex(AvmMemoryTag::U8) + + "02" // a_is_inf + "02" // a_is_inf + + to_hex(OpCode::CAST_8) + // opcode CAST inf to U8 + "00" // Indirect flag + + to_hex(AvmMemoryTag::U8) + + "05" // b_is_inf + "05" // b_is_inf + + to_hex(OpCode::SET_8) + // opcode SET for direct src_length + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "07" // value + "06" // dst_offset + + to_hex(OpCode::ECADD) + // opcode ECADD + "40" // Indirect flag (sixth operand indirect) + "00000000" // hash_index offset (direct) + "00000001" // dest offset (direct) + "00000002" // input offset (indirect) + "00000003" // length offset (direct) + "00000004" // length offset (direct) + "00000005" // length offset (direct) + "00000006" // length offset (direct) + + to_hex(OpCode::RETURN) + // opcode RETURN + "00" // Indirect flag + "00000007" // ret offset 3 + "00000003"; // ret size 1 auto bytecode = hex_to_bytes(bytecode_hex); auto instructions = Deserialization::parse(bytecode); @@ -1299,15 +1312,15 @@ TEST_F(AvmExecutionTests, msmOpCode) // Send all the input as Fields and cast them to U8 later std::vector calldata = { FF(a.x), FF(a.y), a_is_inf, FF(b.x), FF(b.y), b_is_inf, scalar_a_lo, scalar_a_hi, scalar_b_lo, scalar_b_hi }; - std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "03" // U32 + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + "00" // val "00" // dst_offset + to_hex(OpCode::SET_8) + // opcode SET "00" // Indirect flag - "03" // U32 - "0A" // val + + to_hex(AvmMemoryTag::U32) + + "0A" // val "01" + to_hex(OpCode::CALLDATACOPY) + // Calldatacopy "00" // Indirect flag @@ -1316,44 +1329,44 @@ TEST_F(AvmExecutionTests, msmOpCode) "00000000" // dst_offset 0 + to_hex(OpCode::CAST_8) + // opcode CAST inf to U8 "00" // Indirect flag - "01" // U8 tag field - "02" // a_is_inf - "02" // - + to_hex(OpCode::CAST_8) + // opcode CAST inf to U8 - "00" // Indirect flag - "01" // U8 tag field - "05" // b_is_inf - "05" // - + to_hex(OpCode::SET_8) + // opcode SET for length - "00" // Indirect flag - "03" // U32 - "06" // Length of point elements (6) - "0b" // dst offset (11) - + to_hex(OpCode::SET_8) + // SET Indirects - "00" // Indirect flag - "03" // U32 - "00" // points offset - "0d" // dst offset + - + to_hex(OpCode::SET_8) + // SET Indirects - "00" // Indirect flag - "03" // U32 - "06" // scalars offset - "0e" + // dst offset - to_hex(OpCode::SET_8) + // SET Indirects - "00" // Indirect flag - "03" // U32 - "0c" // output offset - "0f" + // dst offset - to_hex(OpCode::MSM) + // opcode MSM - "07" // Indirect flag (first 3 indirect) - "0000000d" // points offset - "0000000e" // scalars offset - "0000000f" // output offset - "0000000b" // length offset - + to_hex(OpCode::RETURN) + // opcode RETURN - "00" // Indirect flag - "0000000c" // ret offset 12 (this overwrites) - "00000003"; // ret size 3 + + to_hex(AvmMemoryTag::U8) + + "02" // a_is_inf + "02" // + + to_hex(OpCode::CAST_8) + // opcode CAST inf to U8 + "00" // Indirect flag + + to_hex(AvmMemoryTag::U8) + + "05" // b_is_inf + "05" // + + to_hex(OpCode::SET_8) + // opcode SET for length + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "06" // Length of point elements (6) + "0b" // dst offset (11) + + to_hex(OpCode::SET_8) + // SET Indirects + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "00" // points offset + "0d" // dst offset + + + to_hex(OpCode::SET_8) + // SET Indirects + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "06" // scalars offset + "0e" + // dst offset + to_hex(OpCode::SET_8) + // SET Indirects + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "0c" // output offset + "0f" + // dst offset + to_hex(OpCode::MSM) + // opcode MSM + "07" // Indirect flag (first 3 indirect) + "0000000d" // points offset + "0000000e" // scalars offset + "0000000f" // output offset + "0000000b" // length offset + + to_hex(OpCode::RETURN) + // opcode RETURN + "00" // Indirect flag + "0000000c" // ret offset 12 (this overwrites) + "00000003"; // ret size 3 auto bytecode = hex_to_bytes(bytecode_hex); auto instructions = Deserialization::parse(bytecode); @@ -1382,39 +1395,39 @@ TEST_F(AvmExecutionTests, pedersenCommitmentOpcode) std::vector expected_output = { expected_result.x, expected_result.y, expected_result.is_point_at_infinity() }; // Send all the input as Fields and cast them to U8 later std::vector calldata = { scalar_a, scalar_b }; - std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "03" // U32 + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + "00" // val "00" // dst_offset + to_hex(OpCode::SET_8) + // opcode SET "00" // Indirect flag - "03" // U32 - "02" // val + + to_hex(AvmMemoryTag::U32) + + "02" // val "01" + - to_hex(OpCode::CALLDATACOPY) + // Calldatacopy - "00" // Indirect flag - "00000000" // cd_offset 0 - "00000001" // copy_size (2 elements) - "00000000" // dst_offset 0 - + to_hex(OpCode::SET_8) + // opcode SET for indirect input - "00" // Indirect flag - "03" // U32 - "00" // Input stored at memory 0 - "0b" // dst offset (11) - + to_hex(OpCode::SET_8) + // opcode SET for indirect output - "00" // Indirect flag - "03" // U32 - "20" // output offset - "0d" // dst offset - + to_hex(OpCode::SET_8) + // opcode SET for input length - "00" // Indirect flag - "03" // U32 - "02" // scalars length (2) - "02" + // dst offset (2) - to_hex(OpCode::SET_8) + // opcode SET for ctx index - "00" // Indirect flag - "03" // U32 + to_hex(OpCode::CALLDATACOPY) + // Calldatacopy + "00" // Indirect flag + "00000000" // cd_offset 0 + "00000001" // copy_size (2 elements) + "00000000" // dst_offset 0 + + to_hex(OpCode::SET_8) + // opcode SET for indirect input + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "00" // Input stored at memory 0 + "0b" // dst offset (11) + + to_hex(OpCode::SET_8) + // opcode SET for indirect output + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "20" // output offset + "0d" // dst offset + + to_hex(OpCode::SET_8) + // opcode SET for input length + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "02" // scalars length (2) + "02" + // dst offset (2) + to_hex(OpCode::SET_8) + // opcode SET for ctx index + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + "00" // ctx index (0) "0f" + // dst offset to_hex(OpCode::PEDERSENCOMMITMENT) + // opcode MSM @@ -1443,106 +1456,164 @@ TEST_F(AvmExecutionTests, pedersenCommitmentOpcode) // Positive test for Kernel Input opcodes TEST_F(AvmExecutionTests, kernelInputOpcodes) { - std::string bytecode_hex = to_hex(OpCode::ADDRESS) + // opcode ADDRESS - "00" // Indirect flag - "00000001" // dst_offset - + to_hex(OpCode::STORAGEADDRESS) + // opcode STORAGEADDRESS - "00" // Indirect flag - "00000002" // dst_offset - + to_hex(OpCode::SENDER) + // opcode SENDER - "00" // Indirect flag - "00000003" // dst_offset - + to_hex(OpCode::FUNCTIONSELECTOR) + // opcode TRANSACTIONFEE - "00" // Indirect flag - "00000004" // dst_offset - + to_hex(OpCode::TRANSACTIONFEE) + // opcode TRANSACTIONFEE - "00" // Indirect flag - "00000005" // dst_offset - + to_hex(OpCode::CHAINID) + // opcode CHAINID - "00" // Indirect flag - "00000006" // dst_offset - + to_hex(OpCode::VERSION) + // opcode VERSION - "00" // Indirect flag - "00000007" // dst_offset - + to_hex(OpCode::BLOCKNUMBER) + // opcode BLOCKNUMBER - "00" // Indirect flag - "00000008" // dst_offset - + to_hex(OpCode::TIMESTAMP) + // opcode TIMESTAMP - "00" // Indirect flag - "00000009" // dst_offset - + to_hex(OpCode::FEEPERL2GAS) + // opcode FEEPERL2GAS - "00" // Indirect flag - "0000000a" // dst_offset - + to_hex(OpCode::FEEPERDAGAS) + // opcode FEEPERDAGAS - "00" // Indirect flag - "0000000b" // dst_offset - + to_hex(OpCode::RETURN) + // opcode RETURN - "00" // Indirect flag - "00000001" // ret offset 1 - "0000000b"; // ret size 11 + std::string bytecode_hex = + to_hex(OpCode::GETENVVAR_16) + // opcode ADDRESS + "00" // Indirect flag + + to_hex(static_cast(EnvironmentVariable::ADDRESS)) + // envvar ADDRESS + "0001" // dst_offset + + to_hex(OpCode::GETENVVAR_16) + // opcode STORAGEADDRESS + "00" // Indirect flag + + to_hex(static_cast(EnvironmentVariable::STORAGEADDRESS)) + // envvar STORAGEADDRESS + "0002" // dst_offset + + to_hex(OpCode::GETENVVAR_16) + // opcode SENDER + "00" // Indirect flag + + to_hex(static_cast(EnvironmentVariable::SENDER)) + // envvar SENDER + "0003" // dst_offset + + to_hex(OpCode::GETENVVAR_16) + // opcode FUNCTIONSELECTOR + "00" // Indirect flag + + to_hex(static_cast(EnvironmentVariable::FUNCTIONSELECTOR)) + // envvar FUNCTIONSELECTOR + "0004" // dst_offset + + to_hex(OpCode::GETENVVAR_16) + // opcode TRANSACTIONFEE + "00" // Indirect flag + + to_hex(static_cast(EnvironmentVariable::TRANSACTIONFEE)) + // envvar TRANSACTIONFEE + "0005" // dst_offset + + to_hex(OpCode::GETENVVAR_16) + // opcode CHAINID + "00" // Indirect flag + + to_hex(static_cast(EnvironmentVariable::CHAINID)) + // envvar CHAINID + "0006" // dst_offset + + to_hex(OpCode::GETENVVAR_16) + // opcode VERSION + "00" // Indirect flag + + to_hex(static_cast(EnvironmentVariable::VERSION)) + // envvar VERSION + "0007" // dst_offset + + to_hex(OpCode::GETENVVAR_16) + // opcode BLOCKNUMBER + "00" // Indirect flag + + to_hex(static_cast(EnvironmentVariable::BLOCKNUMBER)) + // envvar BLOCKNUMBER + "0008" // dst_offset + + to_hex(OpCode::GETENVVAR_16) + // opcode TIMESTAMP + "00" // Indirect flag + + to_hex(static_cast(EnvironmentVariable::TIMESTAMP)) + // envvar TIMESTAMP + "0009" // dst_offset + + to_hex(OpCode::GETENVVAR_16) + // opcode FEEPERL2GAS + "00" // Indirect flag + + to_hex(static_cast(EnvironmentVariable::FEEPERL2GAS)) + // envvar FEEPERL2GAS + "000A" // dst_offset + + to_hex(OpCode::GETENVVAR_16) + // opcode FEEPERDAGAS + "00" // Indirect flag + + to_hex(static_cast(EnvironmentVariable::FEEPERDAGAS)) + // envvar FEEPERDAGAS + "000B" // dst_offset + + to_hex(OpCode::GETENVVAR_16) + // opcode FEEPERDAGAS + "00" // Indirect flag + + to_hex(static_cast(EnvironmentVariable::ISSTATICCALL)) + // envvar FEEPERDAGAS + "000C" // dst_offset + + to_hex(OpCode::RETURN) + // opcode RETURN + "00" // Indirect flag + "00000001" // ret offset 1 + "0000000C"; // ret size 12 auto bytecode = hex_to_bytes(bytecode_hex); auto instructions = Deserialization::parse(bytecode); - ASSERT_THAT(instructions, SizeIs(12)); + ASSERT_THAT(instructions, SizeIs(13)); // ADDRESS EXPECT_THAT(instructions.at(0), - AllOf(Field(&Instruction::op_code, OpCode::ADDRESS), - Field(&Instruction::operands, ElementsAre(VariantWith(0), VariantWith(1))))); + AllOf(Field(&Instruction::op_code, OpCode::GETENVVAR_16), + Field(&Instruction::operands, + ElementsAre(VariantWith(0), + VariantWith(static_cast(EnvironmentVariable::ADDRESS)), + VariantWith(1))))); // STORAGEADDRESS EXPECT_THAT(instructions.at(1), - AllOf(Field(&Instruction::op_code, OpCode::STORAGEADDRESS), - Field(&Instruction::operands, ElementsAre(VariantWith(0), VariantWith(2))))); + AllOf(Field(&Instruction::op_code, OpCode::GETENVVAR_16), + Field(&Instruction::operands, + ElementsAre(VariantWith(0), + VariantWith(static_cast(EnvironmentVariable::STORAGEADDRESS)), + VariantWith(2))))); // SENDER EXPECT_THAT(instructions.at(2), - AllOf(Field(&Instruction::op_code, OpCode::SENDER), - Field(&Instruction::operands, ElementsAre(VariantWith(0), VariantWith(3))))); + AllOf(Field(&Instruction::op_code, OpCode::GETENVVAR_16), + Field(&Instruction::operands, + ElementsAre(VariantWith(0), + VariantWith(static_cast(EnvironmentVariable::SENDER)), + VariantWith(3))))); // FUNCTIONSELECTOR - EXPECT_THAT(instructions.at(3), - AllOf(Field(&Instruction::op_code, OpCode::FUNCTIONSELECTOR), - Field(&Instruction::operands, ElementsAre(VariantWith(0), VariantWith(4))))); + EXPECT_THAT( + instructions.at(3), + AllOf(Field(&Instruction::op_code, OpCode::GETENVVAR_16), + Field(&Instruction::operands, + ElementsAre(VariantWith(0), + VariantWith(static_cast(EnvironmentVariable::FUNCTIONSELECTOR)), + VariantWith(4))))); // TRANSACTIONFEE EXPECT_THAT(instructions.at(4), - AllOf(Field(&Instruction::op_code, OpCode::TRANSACTIONFEE), - Field(&Instruction::operands, ElementsAre(VariantWith(0), VariantWith(5))))); + AllOf(Field(&Instruction::op_code, OpCode::GETENVVAR_16), + Field(&Instruction::operands, + ElementsAre(VariantWith(0), + VariantWith(static_cast(EnvironmentVariable::TRANSACTIONFEE)), + VariantWith(5))))); // CHAINID EXPECT_THAT(instructions.at(5), - AllOf(Field(&Instruction::op_code, OpCode::CHAINID), - Field(&Instruction::operands, ElementsAre(VariantWith(0), VariantWith(6))))); + AllOf(Field(&Instruction::op_code, OpCode::GETENVVAR_16), + Field(&Instruction::operands, + ElementsAre(VariantWith(0), + VariantWith(static_cast(EnvironmentVariable::CHAINID)), + VariantWith(6))))); // VERSION EXPECT_THAT(instructions.at(6), - AllOf(Field(&Instruction::op_code, OpCode::VERSION), - Field(&Instruction::operands, ElementsAre(VariantWith(0), VariantWith(7))))); + AllOf(Field(&Instruction::op_code, OpCode::GETENVVAR_16), + Field(&Instruction::operands, + ElementsAre(VariantWith(0), + VariantWith(static_cast(EnvironmentVariable::VERSION)), + VariantWith(7))))); // BLOCKNUMBER EXPECT_THAT(instructions.at(7), - AllOf(Field(&Instruction::op_code, OpCode::BLOCKNUMBER), - Field(&Instruction::operands, ElementsAre(VariantWith(0), VariantWith(8))))); + AllOf(Field(&Instruction::op_code, OpCode::GETENVVAR_16), + Field(&Instruction::operands, + ElementsAre(VariantWith(0), + VariantWith(static_cast(EnvironmentVariable::BLOCKNUMBER)), + VariantWith(8))))); // TIMESTAMP EXPECT_THAT(instructions.at(8), - AllOf(Field(&Instruction::op_code, OpCode::TIMESTAMP), - Field(&Instruction::operands, ElementsAre(VariantWith(0), VariantWith(9))))); + AllOf(Field(&Instruction::op_code, OpCode::GETENVVAR_16), + Field(&Instruction::operands, + ElementsAre(VariantWith(0), + VariantWith(static_cast(EnvironmentVariable::TIMESTAMP)), + VariantWith(9))))); // FEEPERL2GAS EXPECT_THAT(instructions.at(9), - AllOf(Field(&Instruction::op_code, OpCode::FEEPERL2GAS), - Field(&Instruction::operands, ElementsAre(VariantWith(0), VariantWith(10))))); + AllOf(Field(&Instruction::op_code, OpCode::GETENVVAR_16), + Field(&Instruction::operands, + ElementsAre(VariantWith(0), + VariantWith(static_cast(EnvironmentVariable::FEEPERL2GAS)), + VariantWith(10))))); // FEEPERDAGAS EXPECT_THAT(instructions.at(10), - AllOf(Field(&Instruction::op_code, OpCode::FEEPERDAGAS), - Field(&Instruction::operands, ElementsAre(VariantWith(0), VariantWith(11))))); + AllOf(Field(&Instruction::op_code, OpCode::GETENVVAR_16), + Field(&Instruction::operands, + ElementsAre(VariantWith(0), + VariantWith(static_cast(EnvironmentVariable::FEEPERDAGAS)), + VariantWith(11))))); + + // ISSTATICCALL + EXPECT_THAT(instructions.at(11), + AllOf(Field(&Instruction::op_code, OpCode::GETENVVAR_16), + Field(&Instruction::operands, + ElementsAre(VariantWith(0), + VariantWith(static_cast(EnvironmentVariable::ISSTATICCALL)), + VariantWith(12))))); // Public inputs for the circuit - std::vector calldata = {}; + std::vector calldata; FF sender = 1; FF address = 2; @@ -1557,12 +1628,13 @@ TEST_F(AvmExecutionTests, kernelInputOpcodes) FF timestamp = 9; FF feeperl2gas = 10; FF feeperdagas = 11; + FF is_static_call = 12; // The return data for this test should be a the opcodes in sequence, as the opcodes dst address lines up with // this array The returndata call above will then return this array std::vector const expected_returndata = { address, storage_address, sender, function_selector, transaction_fee, chainid, - version, blocknumber, timestamp, feeperl2gas, feeperdagas, + version, blocknumber, timestamp, feeperl2gas, feeperdagas, is_static_call, }; // Set up public inputs to contain the above values @@ -1574,6 +1646,7 @@ TEST_F(AvmExecutionTests, kernelInputOpcodes) public_inputs_vec[SENDER_SELECTOR] = sender; public_inputs_vec[FUNCTION_SELECTOR_SELECTOR] = function_selector; public_inputs_vec[TRANSACTION_FEE_OFFSET] = transaction_fee; + public_inputs_vec[IS_STATIC_CALL_SELECTOR] = is_static_call; // Global variables public_inputs_vec[CHAIN_ID_OFFSET] = chainid; @@ -1645,24 +1718,30 @@ TEST_F(AvmExecutionTests, kernelInputOpcodes) std::ranges::find_if(trace.begin(), trace.end(), [](Row r) { return r.main_sel_op_fee_per_l2_gas == 1; }); EXPECT_EQ(feeperl2gas_row->main_ia, feeperl2gas); + // Check is_static_call + auto is_static_call_row = + std::ranges::find_if(trace.begin(), trace.end(), [](Row r) { return r.main_sel_op_is_static_call == 1; }); + EXPECT_EQ(is_static_call_row->main_ia, is_static_call); + validate_trace(std::move(trace), Execution::convert_public_inputs(public_inputs_vec), calldata, returndata); } // Positive test for L2GASLEFT opcode TEST_F(AvmExecutionTests, l2GasLeft) { - std::string bytecode_hex = to_hex(OpCode::SET_16) + // opcode SET - "00" // Indirect flag - "03" // U32 - "0101" // val 257 - "0011" // dst_offset 17 - + to_hex(OpCode::L2GASLEFT) + // opcode L2GASLEFT - "01" // Indirect flag - "00000011" // dst_offset (indirect addr: 17) - + to_hex(OpCode::RETURN) + // opcode RETURN - "00" // Indirect flag - "00000000" // ret offset 0 - "00000000"; // ret size 0 + std::string bytecode_hex = to_hex(OpCode::SET_16) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "0101" // val 257 + "0011" // dst_offset 17 + + to_hex(OpCode::GETENVVAR_16) + // opcode L2GASLEFT + "01" // Indirect flag + + to_hex(static_cast(EnvironmentVariable::L2GASLEFT)) + + "0011" // dst_offset (indirect addr: 17) + + to_hex(OpCode::RETURN) + // opcode RETURN + "00" // Indirect flag + "00000000" // ret offset 0 + "00000000"; // ret size 0 auto bytecode = hex_to_bytes(bytecode_hex); auto instructions = Deserialization::parse(bytecode); @@ -1671,8 +1750,11 @@ TEST_F(AvmExecutionTests, l2GasLeft) // L2GASLEFT EXPECT_THAT(instructions.at(1), - AllOf(Field(&Instruction::op_code, OpCode::L2GASLEFT), - Field(&Instruction::operands, ElementsAre(VariantWith(1), VariantWith(17))))); + AllOf(Field(&Instruction::op_code, OpCode::GETENVVAR_16), + Field(&Instruction::operands, + ElementsAre(VariantWith(1), + VariantWith(static_cast(EnvironmentVariable::L2GASLEFT)), + VariantWith(17))))); auto trace = gen_trace_from_instr(instructions); @@ -1681,7 +1763,7 @@ TEST_F(AvmExecutionTests, l2GasLeft) uint32_t expected_rem_gas = DEFAULT_INITIAL_L2_GAS - static_cast(GAS_COST_TABLE.at(OpCode::SET_8).base_l2_gas_fixed_table) - - static_cast(GAS_COST_TABLE.at(OpCode::L2GASLEFT).base_l2_gas_fixed_table); + static_cast(GAS_COST_TABLE.at(OpCode::GETENVVAR_16).base_l2_gas_fixed_table); EXPECT_EQ(row->main_ia, expected_rem_gas); EXPECT_EQ(row->main_mem_addr_a, 257); // Resolved direct address: 257 @@ -1692,19 +1774,20 @@ TEST_F(AvmExecutionTests, l2GasLeft) // Positive test for DAGASLEFT opcode TEST_F(AvmExecutionTests, daGasLeft) { - std::string bytecode_hex = to_hex(OpCode::ADD_16) + // opcode ADD - "00" // Indirect flag - "03" // U32 - "0007" // addr a 7 - "0009" // addr b 9 - "0001" // addr c 1 - + to_hex(OpCode::DAGASLEFT) + // opcode DAGASLEFT - "00" // Indirect flag - "00000027" // dst_offset 39 - + to_hex(OpCode::RETURN) + // opcode RETURN - "00" // Indirect flag - "00000000" // ret offset 0 - "00000000"; // ret size 0 + std::string bytecode_hex = to_hex(OpCode::ADD_16) + // opcode ADD + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + + "0007" // addr a 7 + "0009" // addr b 9 + "0001" // addr c 1 + + to_hex(OpCode::GETENVVAR_16) + // opcode L2GASLEFT + "00" // Indirect flag + + to_hex(static_cast(EnvironmentVariable::DAGASLEFT)) + + "0027" // dst_offset (indirect addr: 17) + + to_hex(OpCode::RETURN) + // opcode RETURN + "00" // Indirect flag + "00000000" // ret offset 0 + "00000000"; // ret size 0 auto bytecode = hex_to_bytes(bytecode_hex); auto instructions = Deserialization::parse(bytecode); @@ -1713,8 +1796,11 @@ TEST_F(AvmExecutionTests, daGasLeft) // DAGASLEFT EXPECT_THAT(instructions.at(1), - AllOf(Field(&Instruction::op_code, OpCode::DAGASLEFT), - Field(&Instruction::operands, ElementsAre(VariantWith(0), VariantWith(39))))); + AllOf(Field(&Instruction::op_code, OpCode::GETENVVAR_16), + Field(&Instruction::operands, + ElementsAre(VariantWith(0), + VariantWith(static_cast(EnvironmentVariable::DAGASLEFT)), + VariantWith(39))))); auto trace = gen_trace_from_instr(instructions); @@ -1723,7 +1809,7 @@ TEST_F(AvmExecutionTests, daGasLeft) uint32_t expected_rem_gas = DEFAULT_INITIAL_DA_GAS - static_cast(GAS_COST_TABLE.at(OpCode::ADD_8).base_da_gas_fixed_table) - - static_cast(GAS_COST_TABLE.at(OpCode::DAGASLEFT).base_da_gas_fixed_table); + static_cast(GAS_COST_TABLE.at(OpCode::GETENVVAR_16).base_da_gas_fixed_table); EXPECT_EQ(row->main_ia, expected_rem_gas); EXPECT_EQ(row->main_mem_addr_a, 39); @@ -1734,9 +1820,9 @@ TEST_F(AvmExecutionTests, daGasLeft) // Should throw whenever the wrong number of public inputs are provided TEST_F(AvmExecutionTests, ExecutorThrowsWithIncorrectNumberOfPublicInputs) { - std::string bytecode_hex = to_hex(OpCode::SENDER) + // opcode SENDER - "00" // Indirect flag - "00000007"; // addr 7 + std::string bytecode_hex = to_hex(OpCode::GETENVVAR_16) + // opcode SENDER + "00" // Indirect flag + + to_hex(static_cast(EnvironmentVariable::SENDER)) + "0007"; // addr 7 std::vector calldata = {}; std::vector returndata = {}; @@ -1752,15 +1838,14 @@ TEST_F(AvmExecutionTests, ExecutorThrowsWithIncorrectNumberOfPublicInputs) TEST_F(AvmExecutionTests, kernelOutputEmitOpcodes) { // Set values into the first register to emit - std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode Set - "00" // Indirect flag - "03" // U32 - "01" // value 1 - "01" // dst_offset 1 - // Cast set to field - + to_hex(OpCode::CAST_8) + // opcode CAST + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode Set + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + // tag U32 + "01" // value 1 + "01" // dst_offset 1 + + to_hex(OpCode::CAST_8) + // opcode CAST (to field) "00" // Indirect flag - "06" // tag field + + to_hex(AvmMemoryTag::FF) + // tag FF "01" // dst 1 "01" // dst 1 + to_hex(OpCode::EMITNOTEHASH) + // opcode EMITNOTEHASH @@ -1823,13 +1908,15 @@ TEST_F(AvmExecutionTests, kernelOutputEmitOpcodes) // CHECK EMIT UNENCRYPTED LOG auto emit_log_row = std::ranges::find_if(trace.begin(), trace.end(), [](Row r) { return r.main_sel_op_emit_unencrypted_log == 1; }); - EXPECT_EQ(emit_log_row->main_ia, 1); + // Trust me bro for now, this is the truncated sha output + FF expected_hash = FF(std::string("0x006db65fd59fd356f6729140571b5bcd6bb3b83492a16e1bf0a3884442fc3c8a")); + EXPECT_EQ(emit_log_row->main_ia, expected_hash); EXPECT_EQ(emit_log_row->main_side_effect_counter, 2); uint32_t emit_log_out_offset = START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET; auto emit_log_kernel_out_row = std::ranges::find_if(trace.begin(), trace.end(), [&](Row r) { return r.main_clk == emit_log_out_offset; }); - EXPECT_EQ(emit_log_kernel_out_row->main_kernel_value_out, 1); + EXPECT_EQ(emit_log_kernel_out_row->main_kernel_value_out, expected_hash); EXPECT_EQ(emit_log_kernel_out_row->main_kernel_side_effect_out, 2); feed_output(emit_log_out_offset, 1, 2, 0); @@ -1854,14 +1941,14 @@ TEST_F(AvmExecutionTests, kernelOutputEmitOpcodes) TEST_F(AvmExecutionTests, kernelOutputStorageLoadOpcodeSimple) { // Sload from a value that has not previously been written to will require a hint to process - std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "03" // U32 + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + "09" // value 9 "01" // dst_offset 1 + to_hex(OpCode::CAST_8) + // opcode CAST (Cast set to field) "00" // Indirect flag - "06" // tag field + + to_hex(AvmMemoryTag::FF) + "01" // dst 1 "01" // dst 1 + to_hex(OpCode::SLOAD) + // opcode SLOAD @@ -1910,15 +1997,15 @@ TEST_F(AvmExecutionTests, kernelOutputStorageStoreOpcodeSimple) { // SSTORE, write 2 elements of calldata to dstOffset 1 and 2. std::vector calldata = { 42, 123, 9, 10 }; - std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "03" // U32 + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + "00" // val "00" // dst_offset + to_hex(OpCode::SET_8) + // opcode SET "00" // Indirect flag - "03" // U32 - "04" // val + + to_hex(AvmMemoryTag::U32) + + "04" // val "01" + to_hex(OpCode::CALLDATACOPY) + // opcode CALLDATACOPY "00" // Indirect flag @@ -1968,13 +2055,13 @@ TEST_F(AvmExecutionTests, kernelOutputStorageOpcodes) // Sload from a value that has not previously been written to will require a hint to process std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET "00" // Indirect flag - "03" // U32 - "09" // value 9 - "01" // dst_offset 1 + + to_hex(AvmMemoryTag::U32) + + "09" // value 9 + "01" // dst_offset 1 // Cast set to field + to_hex(OpCode::CAST_8) + // opcode CAST "00" // Indirect flag - "06" // tag field + + to_hex(AvmMemoryTag::FF) + "01" // dst 1 "01" // dst 1 + to_hex(OpCode::SLOAD) + // opcode SLOAD @@ -2043,13 +2130,13 @@ TEST_F(AvmExecutionTests, kernelOutputHashExistsOpcodes) // hash exists from a value that has not previously been written to will require a hint to process std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET "00" // Indirect flag - "03" // U32 - "01" // value 1 - "01" // dst_offset 1 + + to_hex(AvmMemoryTag::U32) + + "01" // value 1 + "01" // dst_offset 1 // Cast set to field - + to_hex(OpCode::CAST_8) + // opcode CAST - "00" // Indirect flag - "06" // tag field + + to_hex(OpCode::CAST_8) + // opcode CAST + "00" // Indirect flag + + to_hex(AvmMemoryTag::FF) + "01" // dst 1 "01" // dst 1 + to_hex(OpCode::NOTEHASHEXISTS) + // opcode NOTEHASHEXISTS @@ -2142,49 +2229,49 @@ TEST_F(AvmExecutionTests, opCallOpcodes) // Set up Gas offsets bytecode_preamble += to_hex(OpCode::SET_8) + // opcode SET for gas offset indirect "00" // Indirect flag - "03" // U32 - "00" // val 0 (address where gas tuple is located) - "11"; // dst_offset 17 + + to_hex(AvmMemoryTag::U32) + + "00" // val 0 (address where gas tuple is located) + "11"; // dst_offset 17 // Set up contract address offset bytecode_preamble += to_hex(OpCode::SET_8) + // opcode SET for args offset indirect "00" // Indirect flag - "03" // U32 - "02" // val 2 (where contract address is located) - "12"; // dst_offset 18 + + to_hex(AvmMemoryTag::U32) + + "02" // val 2 (where contract address is located) + "12"; // dst_offset 18 // Set up args offset bytecode_preamble += to_hex(OpCode::SET_8) + // opcode SET for ret offset indirect "00" // Indirect flag - "03" // U32 - "03" // val 3 (the start of the args array) - "13"; // dst_offset 19 + + to_hex(AvmMemoryTag::U32) + + "03" // val 3 (the start of the args array) + "13"; // dst_offset 19 // Set up args size offset bytecode_preamble += to_hex(OpCode::SET_8) + // opcode SET for ret offset indirect "00" // Indirect flag - "03" // U32 - "04" // val 4 (the length of the args array) - "14"; // dst_offset 20 + + to_hex(AvmMemoryTag::U32) + + "04" // val 4 (the length of the args array) + "14"; // dst_offset 20 // Set up the ret offset bytecode_preamble += to_hex(OpCode::SET_16) + // opcode SET for ret offset indirect "00" // Indirect flag - "03" // U32 - "0100" // val 256 (the start of where to write the return data) - "0015"; // dst_offset 21 + + to_hex(AvmMemoryTag::U32) + + "0100" // val 256 (the start of where to write the return data) + "0015"; // dst_offset 21 // Set up the success offset bytecode_preamble += to_hex(OpCode::SET_16) + // opcode SET for ret offset indirect "00" // Indirect flag - "03" // U32 - "0102" // val 258 (write the success flag at ret_offset + ret_size) - "0016"; // dst_offset 22 + + to_hex(AvmMemoryTag::U32) + + "0102" // val 258 (write the success flag at ret_offset + ret_size) + "0016"; // dst_offset 22 - std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "03" // U32 + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + "00" // val "00" // dst_offset + to_hex(OpCode::SET_8) + // opcode SET "00" // Indirect flag - "03" // U32 - "07" // val + + to_hex(AvmMemoryTag::U32) + + "07" // val "01" + to_hex(OpCode::CALLDATACOPY) + // opcode CALLDATACOPY "00" // Indirect flag @@ -2229,24 +2316,24 @@ TEST_F(AvmExecutionTests, opCallOpcodes) TEST_F(AvmExecutionTests, opGetContractInstanceOpcodes) { - std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET - "00" // Indirect flag - "03" // U32 + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + "00" // val "00" // dst_offset + to_hex(OpCode::SET_8) + // opcode SET "00" // Indirect flag - "03" // U32 - "01" // val + + to_hex(AvmMemoryTag::U32) + + "01" // val "01" + - to_hex(OpCode::CALLDATACOPY) + // opcode CALLDATACOPY for addr - "00" // Indirect flag - "00000000" // cd_offset - "00000001" // copy_size - "00000001" // dst_offset, (i.e. where we store the addr) - + to_hex(OpCode::SET_8) + // opcode SET for the indirect dst offset - "00" // Indirect flag - "03" // U32 + to_hex(OpCode::CALLDATACOPY) + // opcode CALLDATACOPY for addr + "00" // Indirect flag + "00000000" // cd_offset + "00000001" // copy_size + "00000001" // dst_offset, (i.e. where we store the addr) + + to_hex(OpCode::SET_8) + // opcode SET for the indirect dst offset + "00" // Indirect flag + + to_hex(AvmMemoryTag::U32) + "03" // val i "02" + // dst_offset 2 to_hex(OpCode::GETCONTRACTINSTANCE) + // opcode CALL @@ -2280,13 +2367,13 @@ TEST_F(AvmExecutionTests, invalidOpcode) { std::string bytecode_hex = to_hex(OpCode::ADD_16) + // opcode ADD "00" // Indirect flag - "02" // U16 - "0007" // addr a 7 - "0009" // addr b 9 - "0001" // addr c 1 - "AB" // Invalid opcode byte - "00000000" // ret offset 0 - "00000000"; // ret size 0 + + to_hex(AvmMemoryTag::U16) + + "0007" // addr a 7 + "0009" // addr b 9 + "0001" // addr c 1 + "AB" // Invalid opcode byte + "00000000" // ret offset 0 + "00000000"; // ret size 0 auto bytecode = hex_to_bytes(bytecode_hex); EXPECT_THROW_WITH_MESSAGE(Deserialization::parse(bytecode), "Invalid opcode"); @@ -2315,7 +2402,7 @@ TEST_F(AvmExecutionTests, truncatedInstructionNoTag) { std::string bytecode_hex = to_hex(OpCode::ADD_16) + // opcode ADD "00" // Indirect flag - "02" // U16 + + to_hex(AvmMemoryTag::U16) + "0007" // addr a 7 "0009" // addr b 9 "0001" // addr c 1 @@ -2328,17 +2415,17 @@ TEST_F(AvmExecutionTests, truncatedInstructionNoTag) // Negative test detecting an incomplete instruction: instruction tag present but an operand is missing TEST_F(AvmExecutionTests, truncatedInstructionNoOperand) { - std::string bytecode_hex = to_hex(OpCode::ADD_16) + // opcode ADD - "00" // Indirect flag - "02" // U16 + std::string bytecode_hex = to_hex(OpCode::ADD_16) + // opcode ADD + "00" // Indirect flag + + to_hex(AvmMemoryTag::U16) + "0007" // addr a 7 "0009" // addr b 9 "0001" // addr c 1 + to_hex(OpCode::SUB_8) + // opcode SUB "00" // Indirect flag - "04" // U64 - "AB" // addr a - "FF"; // addr b and missing address for c = a-b + + to_hex(AvmMemoryTag::U64) + + "AB" // addr a + "FF"; // addr b and missing address for c = a-b auto bytecode = hex_to_bytes(bytecode_hex); EXPECT_THROW_WITH_MESSAGE(Deserialization::parse(bytecode), "Operand is missing"); diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/fuzz_skippable.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/fuzz_skippable.test.cpp index f513cd87cf4..15b13751168 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/fuzz_skippable.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/fuzz_skippable.test.cpp @@ -15,10 +15,9 @@ using namespace bb::Avm_vm; TEST(AvmSkippableTests, shouldSkipCorrectly) { using FF = AvmFlavor::FF; - constexpr size_t TRACE_SIZE = 1 << 15; + constexpr size_t TRACE_SIZE = 300; std::vector> trace(TRACE_SIZE); - std::cerr << "Generating trace of size " << TRACE_SIZE << "..." << std::endl; // This is the most time consuming part of this test! // In particular, the generation of random fields. bb::parallel_for(trace.size(), [&](size_t i) { @@ -39,13 +38,11 @@ TEST(AvmSkippableTests, shouldSkipCorrectly) // Set the conditions for skippable to return true. row.poseidon2_sel_poseidon_perm = 0; }); - std::cerr << "Done generating trace..." << std::endl; // We build the polynomials needed to run "sumcheck". AvmCircuitBuilder cb; cb.set_trace(std::move(trace)); auto polys = cb.compute_polynomials(); - std::cerr << "Done computing polynomials..." << std::endl; // For each skippable relation we will check: // 1. That Relation::skippable returns true (i.e., we correctly set the conditions) @@ -75,7 +72,7 @@ TEST(AvmSkippableTests, shouldSkipCorrectly) if (result[j] != 0) { EXPECT_EQ(result[j], 0) << "Relation " << Relation::NAME << " subrelation " << j << " was expected to be zero."; - GTEST_SKIP(); + GTEST_FAIL(); } } } diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/gas.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/gas.test.cpp index b4b18138205..6e5525fce18 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/gas.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/gas.test.cpp @@ -38,7 +38,8 @@ void test_gas(StartGas startGas, OpcodesFunc apply_opcodes, CheckFunc check_trac VmPublicInputs public_inputs; std::get<0>(public_inputs) = kernel_inputs; - AvmTraceBuilder trace_builder(public_inputs); + auto trace_builder = + AvmTraceBuilder(public_inputs).set_full_precomputed_tables(false).set_range_check_required(false); // We should return a value of 1 for the sender, as it exists at index 0 apply_opcodes(trace_builder); diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/helpers.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/helpers.test.cpp index 509a0adae4b..90951a0e163 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/helpers.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/helpers.test.cpp @@ -24,7 +24,9 @@ std::vector gen_three_op_params(std::vector opera */ void validate_trace_check_circuit(std::vector&& trace) { - validate_trace(std::move(trace), {}, {}, {}, false); + auto circuit_builder = AvmCircuitBuilder(); + circuit_builder.set_trace(std::move(trace)); + EXPECT_TRUE(circuit_builder.check_circuit()); }; /** @@ -40,6 +42,9 @@ void validate_trace(std::vector&& trace, bool with_proof, bool expect_proof_failure) { + // This is here for our nighly test runs. + with_proof |= std::getenv("AVM_ENABLE_FULL_PROVING") != nullptr; + const std::string avm_dump_trace_path = std::getenv("AVM_DUMP_TRACE_PATH") != nullptr ? std::getenv("AVM_DUMP_TRACE_PATH") : ""; if (!avm_dump_trace_path.empty()) { diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/helpers.test.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/helpers.test.hpp index 1b9f8dcc032..6eba2649c7d 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/helpers.test.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/helpers.test.hpp @@ -35,7 +35,7 @@ void validate_trace(std::vector&& trace, VmPublicInputs const& public_inputs = {}, std::vector const& calldata = {}, std::vector const& returndata = {}, - bool with_proof = bb::avm_trace::ENABLE_PROVING, + bool with_proof = false, bool expect_proof_failure = false); void mutate_ic_in_trace(std::vector& trace, std::function&& selectRow, diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/indirect_mem.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/indirect_mem.test.cpp index b9e3bb1b302..63ee094e9ab 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/indirect_mem.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/indirect_mem.test.cpp @@ -9,7 +9,8 @@ class AvmIndirectMemTests : public ::testing::Test { public: AvmIndirectMemTests() : public_inputs(generate_base_public_inputs()) - , trace_builder(AvmTraceBuilder(public_inputs)) + , trace_builder( + AvmTraceBuilder(public_inputs).set_full_precomputed_tables(false).set_range_check_required(false)) { srs::init_crs_factory("../srs_db/ignition"); } @@ -68,7 +69,7 @@ TEST_F(AvmIndirectMemTests, allIndirectAdd) EXPECT_EQ(row->main_sel_mem_op_b, FF(1)); EXPECT_EQ(row->main_sel_mem_op_c, FF(1)); - validate_trace(std::move(trace), public_inputs, {}, {}, true); + validate_trace(std::move(trace), public_inputs, {}, {}); } // Testing a subtraction operation with direct input operands a, b, and an indirect diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/inter_table.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/inter_table.test.cpp index 98aa04b7e66..4edde8f1296 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/inter_table.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/inter_table.test.cpp @@ -148,13 +148,13 @@ class AvmRangeCheckNegativeTests : public AvmInterTableTests { void SetUp() override { GTEST_SKIP(); } - void genTraceAdd(FF const& a, FF const& b, FF const& c, AvmMemoryTag tag, uint32_t min_trace_size = 0) + void genTraceAdd(FF const& a, FF const& b, FF const& c, AvmMemoryTag tag) { trace_builder.op_set(0, a, 0, tag); trace_builder.op_set(0, b, 1, tag); trace_builder.op_add(0, 0, 1, 2, tag); // 7 + 8 = 15 trace_builder.op_return(0, 0, 0); - trace = trace_builder.finalize(min_trace_size); + trace = trace_builder.finalize(); // Find the row with addition operation and retrieve clk. auto row = std::ranges::find_if(trace.begin(), trace.end(), [](Row r) { return r.main_sel_op_add == FF(1); }); @@ -259,7 +259,7 @@ TEST_F(AvmRangeCheckNegativeTests, additionU8Reg1) // Out-of-range value in register u16_r0 TEST_F(AvmRangeCheckNegativeTests, additionU16Reg0) { - genTraceAdd(1200, 2000, 3200, AvmMemoryTag::U16, 130); + genTraceAdd(1200, 2000, 3200, AvmMemoryTag::U16); auto& row = trace.at(main_row_idx); auto& mem_row = trace.at(mem_row_idx); auto& alu_row = trace.at(alu_row_idx); diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/kernel.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/kernel.test.cpp index b18553f1f2c..611e08dc34c 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/kernel.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/kernel.test.cpp @@ -3,6 +3,8 @@ #include "barretenberg/vm/avm/tests/helpers.test.hpp" #include "barretenberg/vm/avm/trace/common.hpp" #include "barretenberg/vm/avm/trace/kernel_trace.hpp" +#include "barretenberg/vm/avm/trace/trace.hpp" +#include "barretenberg/vm/aztec_constants.hpp" #include "barretenberg/vm/constants.hpp" #include "common.test.hpp" @@ -67,7 +69,9 @@ void test_kernel_lookup(bool indirect, VmPublicInputs public_inputs = get_base_public_inputs(), ExecutionHints execution_hints = {}) { - AvmTraceBuilder trace_builder(public_inputs, std::move(execution_hints)); + auto trace_builder = AvmTraceBuilder(public_inputs, std::move(execution_hints)) + .set_full_precomputed_tables(false) + .set_range_check_required(false); apply_opcodes(trace_builder); @@ -189,15 +193,15 @@ TEST_F(AvmKernelPositiveTests, kernelSender) uint32_t indirect_dst_offset = 69; // We test that the sender opcode is included at index 0 in the public inputs auto direct_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_sender(/*indirect*/ false, dst_offset); + trace_builder.op_sender(/*indirect*/ 0, dst_offset); }; auto indirect_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { trace_builder.op_set( - /*indirect*/ false, + /*indirect*/ 0, /*value*/ dst_offset, /*dst_offset*/ indirect_dst_offset, AvmMemoryTag::U32); - trace_builder.op_sender(/*indirect*/ true, indirect_dst_offset); + trace_builder.op_sender(/*indirect*/ 1, indirect_dst_offset); }; auto checks = [=](bool indirect, const std::vector& trace) { @@ -223,15 +227,15 @@ TEST_F(AvmKernelPositiveTests, kernelAddress) uint32_t dst_offset = 42; uint32_t indirect_dst_offset = 69; auto direct_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_address(/*indirect*/ false, dst_offset); + trace_builder.op_address(/*indirect*/ 0, dst_offset); }; auto indirect_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { trace_builder.op_set( - /*indirect*/ false, + /*indirect*/ 0, /*value*/ dst_offset, /*dst_offset*/ indirect_dst_offset, AvmMemoryTag::U32); - trace_builder.op_address(/*indirect*/ true, indirect_dst_offset); + trace_builder.op_address(/*indirect*/ 1, indirect_dst_offset); }; auto checks = [=](bool indirect, const std::vector& trace) { @@ -256,15 +260,15 @@ TEST_F(AvmKernelPositiveTests, kernelStorageAddress) uint32_t dst_offset = 42; uint32_t indirect_dst_offset = 69; auto direct_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_storage_address(/*indirect*/ false, dst_offset); + trace_builder.op_storage_address(/*indirect*/ 0, dst_offset); }; auto indirect_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { trace_builder.op_set( - /*indirect*/ false, + /*indirect*/ 0, /*value*/ dst_offset, /*dst_offset*/ indirect_dst_offset, AvmMemoryTag::U32); - trace_builder.op_storage_address(/*indirect*/ true, indirect_dst_offset); + trace_builder.op_storage_address(/*indirect*/ 1, indirect_dst_offset); }; auto checks = [=](bool indirect, const std::vector& trace) { @@ -292,15 +296,15 @@ TEST_F(AvmKernelPositiveTests, kernelFunctionSelector) uint32_t indirect_dst_offset = 69; // We test that the function selector opcode is included at index 0 in the public inputs auto direct_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_function_selector(/*indirect*/ false, dst_offset); + trace_builder.op_function_selector(/*indirect*/ 0, dst_offset); }; auto indirect_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { trace_builder.op_set( - /*indirect*/ false, + /*indirect*/ 0, /*value*/ dst_offset, /*dst_offset*/ indirect_dst_offset, AvmMemoryTag::U32); - trace_builder.op_function_selector(/*indirect*/ true, indirect_dst_offset); + trace_builder.op_function_selector(/*indirect*/ 1, indirect_dst_offset); }; auto checks = [=](bool indirect, const std::vector& trace) { @@ -326,15 +330,15 @@ TEST_F(AvmKernelPositiveTests, kernelFeePerDa) uint32_t dst_offset = 42; uint32_t indirect_dst_offset = 69; auto direct_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_fee_per_da_gas(/*indirect*/ false, dst_offset); + trace_builder.op_fee_per_da_gas(/*indirect*/ 0, dst_offset); }; auto indirect_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { trace_builder.op_set( - /*indirect*/ false, + /*indirect*/ 0, /*value*/ dst_offset, /*dst_offset*/ indirect_dst_offset, AvmMemoryTag::U32); - trace_builder.op_fee_per_da_gas(/*indirect*/ true, indirect_dst_offset); + trace_builder.op_fee_per_da_gas(/*indirect*/ 1, indirect_dst_offset); }; auto checks = [=](bool indirect, const std::vector& trace) { @@ -360,15 +364,15 @@ TEST_F(AvmKernelPositiveTests, kernelFeePerL2) uint32_t dst_offset = 42; uint32_t indirect_dst_offset = 69; auto direct_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_fee_per_l2_gas(/*indirect*/ false, dst_offset); + trace_builder.op_fee_per_l2_gas(/*indirect*/ 0, dst_offset); }; auto indirect_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { trace_builder.op_set( - /*indirect*/ false, + /*indirect*/ 0, /*value*/ dst_offset, /*dst_offset*/ indirect_dst_offset, AvmMemoryTag::U32); - trace_builder.op_fee_per_l2_gas(/*indirect*/ true, indirect_dst_offset); + trace_builder.op_fee_per_l2_gas(/*indirect*/ 1, indirect_dst_offset); }; auto checks = [=](bool indirect, const std::vector& trace) { @@ -394,15 +398,15 @@ TEST_F(AvmKernelPositiveTests, kernelTransactionFee) uint32_t dst_offset = 42; uint32_t indirect_dst_offset = 69; auto direct_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_transaction_fee(/*indirect*/ false, dst_offset); + trace_builder.op_transaction_fee(/*indirect*/ 0, dst_offset); }; auto indirect_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { trace_builder.op_set( - /*indirect*/ false, + /*indirect*/ 0, /*value*/ dst_offset, /*dst_offset*/ indirect_dst_offset, AvmMemoryTag::U32); - trace_builder.op_transaction_fee(/*indirect*/ true, indirect_dst_offset); + trace_builder.op_transaction_fee(/*indirect*/ 1, indirect_dst_offset); }; auto checks = [=](bool indirect, const std::vector& trace) { @@ -423,20 +427,54 @@ TEST_F(AvmKernelPositiveTests, kernelTransactionFee) test_kernel_lookup(true, indirect_apply_opcodes, checks); } +TEST_F(AvmKernelPositiveTests, kernelIsStaticCall) +{ + uint32_t dst_offset = 42; + uint32_t indirect_dst_offset = 69; + auto direct_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { + trace_builder.op_is_static_call(/*indirect*/ 0, dst_offset); + }; + auto indirect_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { + trace_builder.op_set( + /*indirect*/ 0, + /*value*/ dst_offset, + /*dst_offset*/ indirect_dst_offset, + AvmMemoryTag::U32); + trace_builder.op_is_static_call(/*indirect*/ 1, indirect_dst_offset); + }; + + auto checks = [=](bool indirect, const std::vector& trace) { + auto row = std::ranges::find_if( + trace.begin(), trace.end(), [](Row r) { return r.main_sel_op_is_static_call == FF(1); }); + EXPECT_TRUE(row != trace.end()); + + expect_row(row, + /*kernel_in_offset=*/IS_STATIC_CALL_SELECTOR, + /*ia=*/IS_STATIC_CALL_SELECTOR + + 1, // Note the value generated above for public inputs is the same as the index read + 1 + /*ind_a*/ indirect ? indirect_dst_offset : 0, + /*mem_addr_a=*/dst_offset, + /*w_in_tag=*/AvmMemoryTag::FF); + }; + + test_kernel_lookup(false, direct_apply_opcodes, checks); + test_kernel_lookup(true, indirect_apply_opcodes, checks); +} + TEST_F(AvmKernelPositiveTests, kernelChainId) { uint32_t dst_offset = 42; uint32_t indirect_dst_offset = 69; auto direct_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_chain_id(/*indirect*/ false, dst_offset); + trace_builder.op_chain_id(/*indirect*/ 0, dst_offset); }; auto indirect_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { trace_builder.op_set( - /*indirect*/ false, + /*indirect*/ 0, /*value*/ dst_offset, /*dst_offset*/ indirect_dst_offset, AvmMemoryTag::U32); - trace_builder.op_chain_id(/*indirect*/ true, indirect_dst_offset); + trace_builder.op_chain_id(/*indirect*/ 1, indirect_dst_offset); }; auto checks = [=](bool indirect, const std::vector& trace) { @@ -462,15 +500,15 @@ TEST_F(AvmKernelPositiveTests, kernelVersion) uint32_t dst_offset = 42; uint32_t indirect_dst_offset = 69; auto direct_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_version(/*indirect*/ false, dst_offset); + trace_builder.op_version(/*indirect*/ 0, dst_offset); }; auto indirect_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { trace_builder.op_set( - /*indirect*/ false, + /*indirect*/ 0, /*value*/ dst_offset, /*dst_offset*/ indirect_dst_offset, AvmMemoryTag::U32); - trace_builder.op_version(/*indirect*/ true, indirect_dst_offset); + trace_builder.op_version(/*indirect*/ 1, indirect_dst_offset); }; auto checks = [=](bool indirect, const std::vector& trace) { @@ -496,15 +534,15 @@ TEST_F(AvmKernelPositiveTests, kernelBlockNumber) uint32_t dst_offset = 42; uint32_t indirect_dst_offset = 69; auto direct_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_block_number(/*indirect*/ false, dst_offset); + trace_builder.op_block_number(/*indirect*/ 0, dst_offset); }; auto indirect_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { trace_builder.op_set( - /*indirect*/ false, + /*indirect*/ 0, /*value*/ dst_offset, /*dst_offset*/ indirect_dst_offset, AvmMemoryTag::U32); - trace_builder.op_block_number(/*indirect*/ true, indirect_dst_offset); + trace_builder.op_block_number(/*indirect*/ 1, indirect_dst_offset); }; auto checks = [=](bool indirect, const std::vector& trace) { @@ -530,15 +568,15 @@ TEST_F(AvmKernelPositiveTests, kernelTimestamp) uint32_t dst_offset = 42; uint32_t indirect_dst_offset = 69; auto direct_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_timestamp(/*indirect*/ false, dst_offset); + trace_builder.op_timestamp(/*indirect*/ 0, dst_offset); }; auto indirect_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { trace_builder.op_set( - /*indirect*/ false, + /*indirect*/ 0, /*value*/ dst_offset, /*dst_offset*/ indirect_dst_offset, AvmMemoryTag::U32); - trace_builder.op_timestamp(/*indirect*/ true, indirect_dst_offset); + trace_builder.op_timestamp(/*indirect*/ 1, indirect_dst_offset); }; auto checks = [=](bool indirect, const std::vector& trace) { @@ -571,7 +609,8 @@ void negative_test_incorrect_ia_kernel_lookup(OpcodesFunc apply_opcodes, auto expected_message) { VmPublicInputs public_inputs = get_base_public_inputs(); - AvmTraceBuilder trace_builder(public_inputs); + auto trace_builder = + AvmTraceBuilder(public_inputs).set_full_precomputed_tables(false).set_range_check_required(false); // We should return a value of 1 for the sender, as it exists at index 0 apply_opcodes(trace_builder); @@ -588,7 +627,7 @@ void negative_test_incorrect_ia_kernel_lookup(OpcodesFunc apply_opcodes, // memory trace should only have one row for these tests as well, so first row has looked-up val ta.mem_val = incorrect_ia; - check_trace(/*indirect*/ false, trace); + check_trace(/*indirect*/ 0, trace); EXPECT_THROW_WITH_MESSAGE(validate_trace_check_circuit(std::move(trace)), expected_message); } @@ -599,9 +638,7 @@ TEST_F(AvmKernelNegativeTests, incorrectIaSender) FF incorrect_ia = FF(69); // We test that the sender opcode is inlcuded at index x in the public inputs - auto apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_sender(/*indirect*/ false, dst_offset); - }; + auto apply_opcodes = [=](AvmTraceBuilder& trace_builder) { trace_builder.op_sender(/*indirect*/ 0, dst_offset); }; auto checks = [=](bool indirect, const std::vector& trace) { auto row = std::ranges::find_if(trace.begin(), trace.end(), [](Row r) { return r.main_sel_op_sender == FF(1); }); @@ -625,9 +662,7 @@ TEST_F(AvmKernelNegativeTests, incorrectIaAddress) FF incorrect_ia = FF(69); // We test that the sender opcode is inlcuded at index x in the public inputs - auto apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_address(/*indirect*/ false, dst_offset); - }; + auto apply_opcodes = [=](AvmTraceBuilder& trace_builder) { trace_builder.op_address(/*indirect*/ 0, dst_offset); }; auto checks = [=](bool indirect, const std::vector& trace) { auto row = std::ranges::find_if(trace.begin(), trace.end(), [](Row r) { return r.main_sel_op_address == FF(1); }); @@ -652,7 +687,7 @@ TEST_F(AvmKernelNegativeTests, incorrectIaStorageAddress) // We test that the sender opcode is inlcuded at index x in the public inputs auto apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_storage_address(/*indirect*/ false, dst_offset); + trace_builder.op_storage_address(/*indirect*/ 0, dst_offset); }; auto checks = [=](bool indirect, const std::vector& trace) { auto row = std::ranges::find_if( @@ -678,7 +713,7 @@ TEST_F(AvmKernelNegativeTests, incorrectIaFunctionSelector) // We test that the sender opcode is inlcuded at index x in the public inputs auto apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_function_selector(/*indirect*/ false, dst_offset); + trace_builder.op_function_selector(/*indirect*/ 0, dst_offset); }; auto checks = [=](bool indirect, const std::vector& trace) { auto row = std::ranges::find_if( @@ -704,7 +739,7 @@ TEST_F(AvmKernelNegativeTests, incorrectIaDaGas) // We test that the sender opcode is inlcuded at index x in the public inputs auto apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_fee_per_da_gas(/*indirect*/ false, dst_offset); + trace_builder.op_fee_per_da_gas(/*indirect*/ 0, dst_offset); }; auto checks = [=](bool indirect, const std::vector& trace) { auto row = std::ranges::find_if( @@ -730,7 +765,7 @@ TEST_F(AvmKernelNegativeTests, incorrectIal2Gas) // We test that the sender opcode is inlcuded at index x in the public inputs auto apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_fee_per_l2_gas(/*indirect*/ false, dst_offset); + trace_builder.op_fee_per_l2_gas(/*indirect*/ 0, dst_offset); }; auto checks = [=](bool indirect, const std::vector& trace) { auto row = std::ranges::find_if( @@ -756,7 +791,7 @@ TEST_F(AvmKernelNegativeTests, incorrectIaTransactionFee) // We test that the sender opcode is inlcuded at index x in the public inputs auto apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_transaction_fee(/*indirect*/ false, dst_offset); + trace_builder.op_transaction_fee(/*indirect*/ 0, dst_offset); }; auto checks = [=](bool indirect, const std::vector& trace) { auto row = std::ranges::find_if( @@ -781,9 +816,7 @@ TEST_F(AvmKernelNegativeTests, incorrectIaChainId) FF incorrect_ia = FF(69); // We test that the sender opcode is inlcuded at index x in the public inputs - auto apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_chain_id(/*indirect*/ false, dst_offset); - }; + auto apply_opcodes = [=](AvmTraceBuilder& trace_builder) { trace_builder.op_chain_id(/*indirect*/ 0, dst_offset); }; auto checks = [=](bool indirect, const std::vector& trace) { auto row = std::ranges::find_if(trace.begin(), trace.end(), [](Row r) { return r.main_sel_op_chain_id == FF(1); }); @@ -807,9 +840,7 @@ TEST_F(AvmKernelNegativeTests, incorrectIaVersion) FF incorrect_ia = FF(69); // We test that the sender opcode is inlcuded at index x in the public inputs - auto apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_version(/*indirect*/ false, dst_offset); - }; + auto apply_opcodes = [=](AvmTraceBuilder& trace_builder) { trace_builder.op_version(/*indirect*/ 0, dst_offset); }; auto checks = [=](bool indirect, const std::vector& trace) { auto row = std::ranges::find_if(trace.begin(), trace.end(), [](Row r) { return r.main_sel_op_version == FF(1); }); @@ -834,7 +865,7 @@ TEST_F(AvmKernelNegativeTests, incorrectIaBlockNumber) // We test that the sender opcode is inlcuded at index x in the public inputs auto apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_block_number(/*indirect*/ false, dst_offset); + trace_builder.op_block_number(/*indirect*/ 0, dst_offset); }; auto checks = [=](bool indirect, const std::vector& trace) { auto row = @@ -860,7 +891,7 @@ TEST_F(AvmKernelNegativeTests, incorrectIaTimestamp) // We test that the sender opcode is inlcuded at index x in the public inputs auto apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_timestamp(/*indirect*/ false, dst_offset); + trace_builder.op_timestamp(/*indirect*/ 0, dst_offset); }; auto checks = [=](bool indirect, const std::vector& trace) { auto row = @@ -1167,7 +1198,7 @@ TEST_F(AvmKernelOutputPositiveTests, kernelNoteHashExists) auto direct_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { trace_builder.op_set(0, value, value_offset, AvmMemoryTag::FF); // TODO(#8287): Leaf index isnt constrained properly so we just set it to 0 - trace_builder.op_note_hash_exists(/*indirect*/ false, value_offset, 0, metadata_offset); + trace_builder.op_note_hash_exists(/*indirect*/ 0, value_offset, 0, metadata_offset); }; // TODO: fix auto indirect_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { @@ -1295,7 +1326,7 @@ TEST_F(AvmKernelOutputPositiveTests, kernelL1ToL2MsgExists) auto apply_opcodes = [=](AvmTraceBuilder& trace_builder) { trace_builder.op_set(0, value, value_offset, AvmMemoryTag::FF); // TODO(#8287): Leaf index isnt constrained properly so we just set it to 0 - trace_builder.op_l1_to_l2_msg_exists(/*indirect*/ false, value_offset, 0, metadata_offset); + trace_builder.op_l1_to_l2_msg_exists(/*indirect*/ 0, value_offset, 0, metadata_offset); }; auto checks = [=]([[maybe_unused]] bool indirect, const std::vector& trace) { auto row = std::ranges::find_if( diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/mem_opcodes.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/mem_opcodes.test.cpp index 84eed13b773..74f3b934559 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/mem_opcodes.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/mem_opcodes.test.cpp @@ -17,7 +17,8 @@ class AvmMemOpcodeTests : public ::testing::Test { public: AvmMemOpcodeTests() : public_inputs(generate_base_public_inputs()) - , trace_builder(AvmTraceBuilder(public_inputs)) + , trace_builder( + AvmTraceBuilder(public_inputs).set_full_precomputed_tables(false).set_range_check_required(false)) { srs::init_crs_factory("../srs_db/ignition"); } @@ -403,7 +404,7 @@ TEST_F(AvmMemOpcodeTests, indirectMovInvalidAddressTag) MEM_ROW_FIELD_EQ(r_in_tag, static_cast(AvmMemoryTag::U32)), MEM_ROW_FIELD_EQ(sel_resolve_ind_addr_c, 1))); - validate_trace(std::move(trace), public_inputs, {}, {}, true); + validate_trace(std::move(trace), public_inputs, {}, {}); } /****************************************************************************** @@ -424,7 +425,7 @@ TEST_F(AvmMemOpcodeTests, allDirectCMovA) compute_cmov_indices(0); common_cmov_trace_validate( false, 1979, 1980, 987162, 10, 11, 12, 20, AvmMemoryTag::U16, AvmMemoryTag::U128, AvmMemoryTag::U64); - validate_trace_check_circuit(std::move(trace)); + validate_trace(std::move(trace), public_inputs); } TEST_F(AvmMemOpcodeTests, allDirectCMovB) @@ -441,7 +442,7 @@ TEST_F(AvmMemOpcodeTests, allDirectCMovB) compute_cmov_indices(0); common_cmov_trace_validate( false, 1979, 1980, 0, 10, 11, 12, 20, AvmMemoryTag::U8, AvmMemoryTag::U8, AvmMemoryTag::U64); - validate_trace_check_circuit(std::move(trace)); + validate_trace(std::move(trace), public_inputs); } TEST_F(AvmMemOpcodeTests, allDirectCMovConditionUninitialized) @@ -458,7 +459,7 @@ TEST_F(AvmMemOpcodeTests, allDirectCMovConditionUninitialized) compute_cmov_indices(0); common_cmov_trace_validate( false, 1979, 1980, 0, 10, 11, 12, 20, AvmMemoryTag::U8, AvmMemoryTag::U8, AvmMemoryTag::U0); - validate_trace_check_circuit(std::move(trace)); + validate_trace(std::move(trace), public_inputs); } TEST_F(AvmMemOpcodeTests, allDirectCMovOverwriteA) @@ -474,7 +475,7 @@ TEST_F(AvmMemOpcodeTests, allDirectCMovOverwriteA) compute_cmov_indices(0); common_cmov_trace_validate( false, 1979, 1980, 0, 10, 11, 10, 20, AvmMemoryTag::U8, AvmMemoryTag::U8, AvmMemoryTag::U64); - validate_trace_check_circuit(std::move(trace)); + validate_trace(std::move(trace), public_inputs); } TEST_F(AvmMemOpcodeTests, allIndirectCMovA) @@ -501,7 +502,7 @@ TEST_F(AvmMemOpcodeTests, allIndirectCMovA) compute_cmov_indices(15); common_cmov_trace_validate( true, 1979, 1980, 987162, 10, 11, 12, 20, AvmMemoryTag::U16, AvmMemoryTag::U128, AvmMemoryTag::U64); - validate_trace_check_circuit(std::move(trace)); + validate_trace(std::move(trace), public_inputs); } TEST_F(AvmMemOpcodeTests, allIndirectCMovAllUnitialized) @@ -512,7 +513,7 @@ TEST_F(AvmMemOpcodeTests, allIndirectCMovAllUnitialized) compute_cmov_indices(15); common_cmov_trace_validate(true, 0, 0, 0, 0, 0, 0, 0, AvmMemoryTag::U0, AvmMemoryTag::U0, AvmMemoryTag::U0); - validate_trace_check_circuit(std::move(trace)); + validate_trace(std::move(trace), public_inputs); } /****************************************************************************** diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/memory.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/memory.test.cpp index 4a48913c483..245077021ef 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/memory.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/memory.test.cpp @@ -10,7 +10,8 @@ class AvmMemoryTests : public ::testing::Test { public: AvmMemoryTests() : public_inputs(generate_base_public_inputs()) - , trace_builder(AvmTraceBuilder(public_inputs)) + , trace_builder( + AvmTraceBuilder(public_inputs).set_full_precomputed_tables(false).set_range_check_required(false)) { srs::init_crs_factory("../srs_db/ignition"); } @@ -37,7 +38,9 @@ class AvmMemoryTests : public ::testing::Test { TEST_F(AvmMemoryTests, mismatchedTagAddOperation) { std::vector const calldata = { 98, 12 }; - trace_builder = AvmTraceBuilder(public_inputs, {}, 0, calldata); + trace_builder = AvmTraceBuilder(public_inputs, {}, 0, calldata) + .set_full_precomputed_tables(false) + .set_range_check_required(false); trace_builder.op_set(0, 2, 1, AvmMemoryTag::U32); trace_builder.op_calldata_copy(0, 0, 1, 0); @@ -78,7 +81,7 @@ TEST_F(AvmMemoryTests, mismatchedTagAddOperation) EXPECT_EQ(row->mem_r_in_tag, FF(static_cast(AvmMemoryTag::U8))); EXPECT_EQ(row->mem_tag, FF(static_cast(AvmMemoryTag::FF))); - validate_trace(std::move(trace), public_inputs, calldata, {}, true); + validate_trace(std::move(trace), public_inputs, calldata, {}); } // Testing an equality operation with a mismatched memory tag. @@ -231,7 +234,9 @@ TEST_F(AvmMemoryTests, readUninitializedMemoryViolation) // must raise a VM error. TEST_F(AvmMemoryTests, mismatchedTagErrorViolation) { - trace_builder = AvmTraceBuilder(public_inputs, {}, 0, { 98, 12 }); + trace_builder = AvmTraceBuilder(public_inputs, {}, 0, { 98, 12 }) + .set_full_precomputed_tables(false) + .set_range_check_required(false); trace_builder.op_set(0, 2, 1, AvmMemoryTag::U32); trace_builder.op_calldata_copy(0, 0, 1, 0); @@ -267,7 +272,9 @@ TEST_F(AvmMemoryTests, mismatchedTagErrorViolation) // must not set a VM error. TEST_F(AvmMemoryTests, consistentTagNoErrorViolation) { - trace_builder = AvmTraceBuilder(public_inputs, {}, 0, std::vector{ 84, 7 }); + trace_builder = AvmTraceBuilder(public_inputs, {}, 0, std::vector{ 84, 7 }) + .set_full_precomputed_tables(false) + .set_range_check_required(false); trace_builder.op_set(0, 2, 1, AvmMemoryTag::U32); trace_builder.op_calldata_copy(0, 0, 1, 0); trace_builder.op_fdiv(0, 0, 1, 4, AvmMemoryTag::FF); @@ -294,7 +301,9 @@ TEST_F(AvmMemoryTests, consistentTagNoErrorViolation) // Testing violation that a write operation must not set a VM error. TEST_F(AvmMemoryTests, noErrorTagWriteViolation) { - trace_builder = AvmTraceBuilder(public_inputs, {}, 0, { 84, 7 }); + trace_builder = AvmTraceBuilder(public_inputs, {}, 0, { 84, 7 }) + .set_full_precomputed_tables(false) + .set_range_check_required(false); trace_builder.op_set(0, 2, 1, AvmMemoryTag::U32); trace_builder.op_calldata_copy(0, 0, 1, 0); trace_builder.op_fdiv(0, 0, 1, 4, AvmMemoryTag::FF); diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/slice.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/slice.test.cpp index 85e85f80c31..300b1ca935b 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/slice.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/slice.test.cpp @@ -2,6 +2,7 @@ #include "barretenberg/vm/avm/trace/common.hpp" #include "common.test.hpp" #include "gtest/gtest.h" +#include #include #include @@ -19,14 +20,17 @@ class AvmSliceTests : public ::testing::Test { public: AvmSliceTests() : public_inputs(generate_base_public_inputs()) - , trace_builder(AvmTraceBuilder(public_inputs)) + , trace_builder( + AvmTraceBuilder(public_inputs).set_full_precomputed_tables(false).set_range_check_required(false)) { srs::init_crs_factory("../srs_db/ignition"); } void gen_trace_builder(std::vector const& calldata) { - trace_builder = AvmTraceBuilder(public_inputs, {}, 0, calldata); + trace_builder = AvmTraceBuilder(public_inputs, {}, 0, calldata) + .set_full_precomputed_tables(false) + .set_range_check_required(false); this->calldata = calldata; } @@ -40,17 +44,14 @@ class AvmSliceTests : public ::testing::Test { } gen_trace_builder(calldata); - trace_builder.op_set(0, col_offset, 10000, AvmMemoryTag::U32); - trace_builder.op_set(0, copy_size, 10001, AvmMemoryTag::U32); - trace_builder.op_calldata_copy(static_cast(indirect), 10000, 10001, dst_offset); + trace_builder.op_set(0, col_offset, 0, AvmMemoryTag::U32); + trace_builder.op_set(0, copy_size, 1, AvmMemoryTag::U32); + trace_builder.op_calldata_copy(static_cast(indirect), 0, 1, dst_offset); trace_builder.op_return(0, 0, 0); trace = trace_builder.finalize(); } - void validate_single_calldata_copy_trace(uint32_t col_offset, - uint32_t copy_size, - uint32_t dst_offset, - bool proof_verif = false) + void validate_single_calldata_copy_trace(uint32_t col_offset, uint32_t copy_size, uint32_t dst_offset) { // Find the first row enabling the calldata_copy selector auto row = std::ranges::find_if( @@ -111,11 +112,7 @@ class AvmSliceTests : public ::testing::Test { SLICE_ROW_FIELD_EQ(sel_cd_cpy, 0), SLICE_ROW_FIELD_EQ(sel_start, 0))); - if (proof_verif) { - validate_trace(std::move(trace), public_inputs, calldata, {}, true); - } else { - validate_trace(std::move(trace), public_inputs, calldata); - } + validate_trace(std::move(trace), public_inputs, calldata); } VmPublicInputs public_inputs; @@ -131,7 +128,7 @@ class AvmSliceTests : public ::testing::Test { TEST_F(AvmSliceTests, simpleCopyAllCDValues) { gen_single_calldata_copy(false, 12, 0, 12, 25); - validate_single_calldata_copy_trace(0, 12, 25, true); + validate_single_calldata_copy_trace(0, 12, 25); } TEST_F(AvmSliceTests, singleCopyCDElement) @@ -142,8 +139,9 @@ TEST_F(AvmSliceTests, singleCopyCDElement) TEST_F(AvmSliceTests, longCopyAllCDValues) { - gen_single_calldata_copy(false, 2000, 0, 2000, 873); - validate_single_calldata_copy_trace(0, 2000, 873); + const size_t cd_size = 2000; + gen_single_calldata_copy(false, cd_size, 0, cd_size, 20); + validate_single_calldata_copy_trace(0, cd_size, 20); } TEST_F(AvmSliceTests, copyFirstHalfCDValues) @@ -166,9 +164,7 @@ TEST_F(AvmSliceTests, copyToHighestMemOffset) TEST_F(AvmSliceTests, twoCallsNoOverlap) { - calldata = { 2, 3, 4, 5, 6 }; - - gen_trace_builder(calldata); + gen_trace_builder({ 2, 3, 4, 5, 6 }); trace_builder.op_set(0, 2, 1, AvmMemoryTag::U32); trace_builder.op_calldata_copy(0, 0, 1, 34); trace_builder.op_set(0, 3, 1, AvmMemoryTag::U32); @@ -203,9 +199,7 @@ TEST_F(AvmSliceTests, twoCallsNoOverlap) TEST_F(AvmSliceTests, indirectTwoCallsOverlap) { - calldata = { 2, 3, 4, 5, 6 }; - - gen_trace_builder(calldata); + gen_trace_builder({ 2, 3, 4, 5, 6 }); trace_builder.op_set(0, 34, 100, AvmMemoryTag::U32); // indirect address 100 resolves to 34 trace_builder.op_set(0, 2123, 101, AvmMemoryTag::U32); // indirect address 101 resolves to 2123 trace_builder.op_set(0, 1, 1, AvmMemoryTag::U32); @@ -246,9 +240,7 @@ TEST_F(AvmSliceTests, indirectTwoCallsOverlap) TEST_F(AvmSliceTests, indirectFailedResolution) { - calldata = { 2, 3, 4, 5, 6 }; - - gen_trace_builder(calldata); + gen_trace_builder({ 2, 3, 4, 5, 6 }); trace_builder.op_set(0, 34, 100, AvmMemoryTag::U16); // indirect address 100 resolves to 34 trace_builder.op_set(0, 1, 1, AvmMemoryTag::U32); trace_builder.op_set(0, 3, 3, AvmMemoryTag::U32); @@ -322,14 +314,12 @@ TEST_F(AvmSliceNegativeTests, wrongCDValueInCalldataColumn) TEST_F(AvmSliceNegativeTests, wrongCDValueInCalldataVerifier) { - calldata = { 2, 3, 4, 5, 6 }; - - gen_trace_builder(calldata); + gen_trace_builder({ 2, 3, 4, 5, 6 }); trace_builder.op_calldata_copy(0, 1, 3, 100); trace_builder.op_return(0, 0, 0); trace = trace_builder.finalize(); - validate_trace(std::move(trace), public_inputs, { 2, 3, 4, 5, 7 }, {}, true, true); + validate_trace(std::move(trace), public_inputs, { 2, 3, 4, 5, 7 }, {}, false, true); } TEST_F(AvmSliceNegativeTests, disableMemWriteEntry) diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/alu_trace.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/alu_trace.cpp index a4111e0b6c7..b9776ee44ef 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/alu_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/alu_trace.cpp @@ -25,6 +25,8 @@ std::tuple decompose(uint256_t const& a, uint8_t const b) uint8_t mem_tag_bits(AvmMemoryTag in_tag) { switch (in_tag) { + case AvmMemoryTag::U1: + return 1; case AvmMemoryTag::U8: return 8; case AvmMemoryTag::U16: @@ -48,6 +50,8 @@ uint8_t mem_tag_bits(AvmMemoryTag in_tag) FF cast_to_mem_tag(uint256_t input, AvmMemoryTag in_tag) { switch (in_tag) { + case AvmMemoryTag::U1: + return FF{ static_cast(input & 1) }; case AvmMemoryTag::U8: return FF{ static_cast(input) }; case AvmMemoryTag::U16: @@ -80,6 +84,7 @@ FF cast_to_mem_tag(uint256_t input, AvmMemoryTag in_tag) void AvmAluTraceBuilder::reset() { alu_trace.clear(); + alu_trace.shrink_to_fit(); // Reclaim memory. range_checked_required = false; } @@ -194,8 +199,10 @@ FF AvmAluTraceBuilder::op_mul(FF const& a, FF const& b, AvmMemoryTag in_tag, uin FF c = cast_to_mem_tag(c_u256, in_tag); - uint8_t limb_bits = mem_tag_bits(in_tag) / 2; - uint8_t num_bits = mem_tag_bits(in_tag); + uint8_t bits = mem_tag_bits(in_tag); + // limbs are size 1 for u1 + uint8_t limb_bits = bits == 1 ? 1 : bits / 2; + uint8_t num_bits = bits; // Decompose a auto [alu_a_lo, alu_a_hi] = decompose(a_u256, limb_bits); @@ -247,7 +254,7 @@ FF AvmAluTraceBuilder::op_div(FF const& a, FF const& b, AvmMemoryTag in_tag, uin if (b_u256 == 0) { return 0; } - uint8_t limb_bits = mem_tag_bits(in_tag) / 2; + uint8_t limb_bits = in_tag == AvmMemoryTag::U1 ? 1 : mem_tag_bits(in_tag) / 2; uint8_t num_bits = mem_tag_bits(in_tag); // Decompose a auto [alu_a_lo, alu_a_hi] = decompose(b_u256, limb_bits); @@ -260,7 +267,8 @@ FF AvmAluTraceBuilder::op_div(FF const& a, FF const& b, AvmMemoryTag in_tag, uin // We perform the range checks here if (in_tag != AvmMemoryTag::FF) { - cmp_builder.range_check_builder.assert_range(uint128_t(c_u256), mem_tag_bits(in_tag), EventEmitter::ALU, clk); + cmp_builder.range_check_builder.assert_range( + static_cast(c_u256), mem_tag_bits(in_tag), EventEmitter::ALU, clk); } // Also check the remainder < divisor (i.e. remainder < b) bool is_gt = cmp_builder.constrained_gt(b, rem_u256, clk, EventEmitter::ALU); @@ -653,6 +661,7 @@ void AvmAluTraceBuilder::finalize(std::vector>& main_trace) if (src.tag.has_value()) { dest.alu_ff_tag = FF(src.tag == AvmMemoryTag::FF ? 1 : 0); + dest.alu_u1_tag = FF(src.tag == AvmMemoryTag::U1 ? 1 : 0); dest.alu_u8_tag = FF(src.tag == AvmMemoryTag::U8 ? 1 : 0); dest.alu_u16_tag = FF(src.tag == AvmMemoryTag::U16 ? 1 : 0); dest.alu_u32_tag = FF(src.tag == AvmMemoryTag::U32 ? 1 : 0); diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/binary_trace.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/binary_trace.cpp index 1d5aaf6b2d1..d5efd069775 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/binary_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/binary_trace.cpp @@ -13,6 +13,7 @@ namespace bb::avm_trace { void AvmBinaryTraceBuilder::reset() { binary_trace.clear(); + binary_trace.shrink_to_fit(); // Reclaim memory. } /** @@ -48,7 +49,10 @@ void AvmBinaryTraceBuilder::entry_builder( { // Given the instruction tag, calculate the number of bytes to decompose values into // The number of rows for this entry will be number of bytes + 1 - size_t num_bytes = 1 << (static_cast(instr_tag) - 1); + // Both U1 and U8 are 1 byte. + size_t num_bytes = instr_tag == AvmMemoryTag::U1 + ? 1 + : 1 << (static_cast(instr_tag) - static_cast(AvmMemoryTag::U8)); // Big Endian encoded std::vector a_bytes = bytes_decompose_le(a); @@ -192,17 +196,23 @@ void AvmBinaryTraceBuilder::finalize_lookups(std::vector>& main_t main_trace.at(clk).lookup_byte_operations_counts = count; } - for (uint8_t avm_in_tag = 0; avm_in_tag < 5; avm_in_tag++) { - // The +1 here is because the instruction tags we care about (i.e excl U0 and FF) has the range [1,5] - main_trace.at(avm_in_tag).lookup_byte_lengths_counts = byte_length_counter[avm_in_tag + 1]; + for (uint8_t avm_in_tag = static_cast(AvmMemoryTag::U1); + avm_in_tag <= static_cast(AvmMemoryTag::U128); + avm_in_tag++) { + // lookup indices start at 0 + uint8_t lookup_index = avm_in_tag - static_cast(AvmMemoryTag::U1); + main_trace.at(lookup_index).lookup_byte_lengths_counts = byte_length_counter[avm_in_tag]; } } void AvmBinaryTraceBuilder::finalize_lookups_for_testing(std::vector>& main_trace) { - for (uint8_t avm_in_tag = 0; avm_in_tag < 5; avm_in_tag++) { - // The +1 here is because the instruction tags we care about (i.e excl U0 and FF) has the range [1,5] - main_trace.at(avm_in_tag).lookup_byte_lengths_counts = byte_length_counter[avm_in_tag + 1]; + for (uint8_t avm_in_tag = static_cast(AvmMemoryTag::U1); + avm_in_tag <= static_cast(AvmMemoryTag::U128); + avm_in_tag++) { + // lookup indices start at 0 + uint8_t lookup_index = avm_in_tag - static_cast(AvmMemoryTag::U1); + main_trace.at(lookup_index).lookup_byte_lengths_counts = byte_length_counter[avm_in_tag]; } } diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/common.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/common.hpp index 18d7019e229..1f5df25e342 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/common.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/common.hpp @@ -13,9 +13,6 @@ namespace bb::avm_trace { using FF = AvmFlavorSettings::FF; -// To toggle all relevant unit tests with proving, set the env variable "AVM_ENABLE_FULL_PROVING". -static const bool ENABLE_PROVING = std::getenv("AVM_ENABLE_FULL_PROVING") != nullptr; - // There are 4 public input columns, 1 for context inputs, and 3 for emitting side effects using VmPublicInputs = std::tuple, // Input: Kernel context inputs std::array, // Output: Kernel outputs data @@ -36,8 +33,18 @@ enum class IntermRegister : uint32_t { IA = 0, IB = 1, IC = 2, ID = 3 }; enum class IndirectRegister : uint32_t { IND_A = 0, IND_B = 1, IND_C = 2, IND_D = 3 }; // Keep following enum in sync with MAX_MEM_TAG below -enum class AvmMemoryTag : uint32_t { U0 = 0, U8 = 1, U16 = 2, U32 = 3, U64 = 4, U128 = 5, FF = 6 }; -static const uint32_t MAX_MEM_TAG = 6; +enum class AvmMemoryTag : uint32_t { + U0 = 0, + U1 = MEM_TAG_U1, + U8 = MEM_TAG_U8, + U16 = MEM_TAG_U16, + U32 = MEM_TAG_U32, + U64 = MEM_TAG_U64, + U128 = MEM_TAG_U128, + FF = MEM_TAG_FF, +}; + +static const uint32_t MAX_MEM_TAG = MEM_TAG_FF; static const size_t NUM_MEM_SPACES = 256; static const uint8_t INTERNAL_CALL_SPACE_ID = 255; diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.cpp index 115f965b7c4..4bbea346ab1 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.cpp @@ -1,6 +1,7 @@ #include "barretenberg/vm/avm/trace/deserialization.hpp" #include "barretenberg/common/throw_or_abort.hpp" #include "barretenberg/vm/avm/trace/common.hpp" +#include "barretenberg/vm/avm/trace/helper.hpp" #include "barretenberg/vm/avm/trace/opcode.hpp" #include @@ -22,11 +23,6 @@ const std::vector three_operand_format16 = { }; const std::vector kernel_input_operand_format = { OperandType::INDIRECT, OperandType::UINT32 }; -const std::vector getter_format = { - OperandType::INDIRECT, - OperandType::UINT32, -}; - const std::vector external_call_format = { OperandType::INDIRECT, /*gasOffset=*/OperandType::UINT32, /*addrOffset=*/OperandType::UINT32, @@ -66,8 +62,8 @@ const std::unordered_map> OPCODE_WIRE_FORMAT = { OpCode::OR_16, three_operand_format16 }, { OpCode::XOR_8, three_operand_format8 }, { OpCode::XOR_16, three_operand_format16 }, - { OpCode::NOT_8, { OperandType::INDIRECT, OperandType::TAG, OperandType::UINT8, OperandType::UINT8 } }, - { OpCode::NOT_16, { OperandType::INDIRECT, OperandType::TAG, OperandType::UINT16, OperandType::UINT16 } }, + { OpCode::NOT_8, { OperandType::INDIRECT, OperandType::UINT8, OperandType::UINT8 } }, + { OpCode::NOT_16, { OperandType::INDIRECT, OperandType::UINT16, OperandType::UINT16 } }, { OpCode::SHL_8, three_operand_format8 }, { OpCode::SHL_16, three_operand_format16 }, { OpCode::SHR_8, three_operand_format8 }, @@ -77,27 +73,16 @@ const std::unordered_map> OPCODE_WIRE_FORMAT = { OpCode::CAST_16, { OperandType::INDIRECT, OperandType::TAG, OperandType::UINT16, OperandType::UINT16 } }, // Execution Environment - Globals - { OpCode::ADDRESS, getter_format }, - { OpCode::STORAGEADDRESS, getter_format }, - { OpCode::SENDER, getter_format }, - { OpCode::FUNCTIONSELECTOR, getter_format }, - { OpCode::TRANSACTIONFEE, getter_format }, - // Execution Environment - Globals - { OpCode::CHAINID, getter_format }, - { OpCode::VERSION, getter_format }, - { OpCode::BLOCKNUMBER, getter_format }, - { OpCode::TIMESTAMP, getter_format }, - // Execution Environment - Globals - Gas - { OpCode::FEEPERL2GAS, getter_format }, - { OpCode::FEEPERDAGAS, getter_format }, + { OpCode::GETENVVAR_16, + { + OperandType::INDIRECT, + OperandType::UINT8, // var idx + OperandType::UINT16, + } }, // Execution Environment - Calldata { OpCode::CALLDATACOPY, { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32 } }, - // Machine State - Gas - { OpCode::L2GASLEFT, getter_format }, - { OpCode::DAGASLEFT, getter_format }, - // Machine State - Internal Control Flow { OpCode::JUMP_16, { OperandType::UINT16 } }, { OpCode::JUMPI_16, { OperandType::INDIRECT, OperandType::UINT16, OperandType::UINT16 } }, @@ -158,7 +143,7 @@ const std::unordered_map> OPCODE_WIRE_FORMAT = // Control Flow - Contract Calls { OpCode::CALL, external_call_format }, - // STATICCALL, + { OpCode::STATICCALL, external_call_format }, // DELEGATECALL, -- not in simulator { OpCode::RETURN, { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32 } }, // REVERT, @@ -173,7 +158,14 @@ const std::unordered_map> OPCODE_WIRE_FORMAT = // Gadgets - Hashing { OpCode::KECCAK, { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32 } }, { OpCode::POSEIDON2, { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32 } }, - { OpCode::SHA256, { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32 } }, + { OpCode::SHA256COMPRESSION, + { OperandType::INDIRECT, + OperandType::UINT32, + OperandType::UINT32, + OperandType::UINT32, + OperandType::UINT32, + OperandType::UINT32 } }, + { OpCode::KECCAKF1600, { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32 } }, { OpCode::PEDERSEN, { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32 } }, // TEMP ECADD without relative memory @@ -192,7 +184,12 @@ const std::unordered_map> OPCODE_WIRE_FORMAT = { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32 } }, // Gadget - Conversion { OpCode::TORADIXLE, - { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32 } }, + { OperandType::INDIRECT, + OperandType::UINT32, + OperandType::UINT32, + OperandType::UINT32, + OperandType::UINT32, + OperandType::UINT1 } }, // Gadgets - Unused for now { OpCode::SHA256COMPRESSION, { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32 } }, @@ -200,8 +197,9 @@ const std::unordered_map> OPCODE_WIRE_FORMAT = }; const std::unordered_map OPERAND_TYPE_SIZE = { - { OperandType::INDIRECT, 1 }, { OperandType::TAG, 1 }, { OperandType::UINT8, 1 }, { OperandType::UINT16, 2 }, - { OperandType::UINT32, 4 }, { OperandType::UINT64, 8 }, { OperandType::UINT128, 16 }, { OperandType::FF, 32 } + { OperandType::INDIRECT, 1 }, { OperandType::TAG, 1 }, { OperandType::UINT1, 1 }, + { OperandType::UINT8, 1 }, { OperandType::UINT16, 2 }, { OperandType::UINT32, 4 }, + { OperandType::UINT64, 8 }, { OperandType::UINT128, 16 }, { OperandType::FF, 32 } }; } // Anonymous namespace @@ -261,6 +259,7 @@ std::vector Deserialization::parse(std::vector const& byte operands.emplace_back(static_cast(tag_u8)); break; } + case OperandType::UINT1: case OperandType::UINT8: operands.emplace_back(bytecode.at(pos)); break; diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.hpp index 2a38e836f03..83265fb76ba 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.hpp @@ -11,7 +11,7 @@ namespace bb::avm_trace { // See avm/serialization/instruction_serialization.ts). // Note that the TAG enum value is not supported in TS and is parsed as UINT8. // INDIRECT is parsed as UINT8 where the bits represent the operands that have indirect mem access. -enum class OperandType : uint8_t { INDIRECT, TAG, UINT8, UINT16, UINT32, UINT64, UINT128, FF }; +enum class OperandType : uint8_t { INDIRECT, TAG, UINT1, UINT8, UINT16, UINT32, UINT64, UINT128, FF }; class Deserialization { public: diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp index ff9384f333e..ea713ac51be 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp @@ -14,6 +14,7 @@ #include "barretenberg/vm/avm/trace/kernel_trace.hpp" #include "barretenberg/vm/avm/trace/opcode.hpp" #include "barretenberg/vm/avm/trace/trace.hpp" +#include "barretenberg/vm/aztec_constants.hpp" #include "barretenberg/vm/constants.hpp" #include "barretenberg/vm/stats.hpp" @@ -37,6 +38,10 @@ std::filesystem::path avm_dump_trace_path; namespace bb::avm_trace { namespace { +// The SRS needs to be able to accommodate the circuit subgroup size. +// Note: The *2 is due to how init_bn254_crs works, look there. +static_assert(Execution::SRS_SIZE >= AvmCircuitBuilder::CIRCUIT_SUBGROUP_SIZE * 2); + template std::vector> sorted_entries(const std::unordered_map& map, bool invert = false) { @@ -81,8 +86,74 @@ std::unordered_map get_relati return relations_degrees; } +void show_trace_info(const auto& trace) +{ + vinfo("Built trace size: ", trace.size(), " (next power: 2^", std::bit_width(trace.size()), ")"); + vinfo("Number of columns: ", trace.front().SIZE); + vinfo("Relation degrees: ", []() { + std::string result; + for (const auto& [key, value] : sorted_entries(get_relations_degrees())) { + result += "\n\t" + key + ": [" + value + "]"; + } + return result; + }()); + + // The following computations are expensive, so we only do them in verbose mode. + if (!verbose_logging) { + return; + } + + const size_t total_elements = trace.front().SIZE * trace.size(); + const size_t nonzero_elements = [&]() { + size_t count = 0; + for (auto const& row : trace) { + for (const auto& ff : row.as_vector()) { + if (!ff.is_zero()) { + count++; + } + } + } + return count; + }(); + vinfo("Number of non-zero elements: ", + nonzero_elements, + "/", + total_elements, + " (", + 100 * nonzero_elements / total_elements, + "%)"); + const size_t non_zero_columns = [&]() { + bool column_is_nonzero[trace.front().SIZE]; + for (auto const& row : trace) { + const auto row_vec = row.as_vector(); + for (size_t col = 0; col < row.SIZE; col++) { + if (!row_vec[col].is_zero()) { + column_is_nonzero[col] = true; + } + } + } + return static_cast(std::count(column_is_nonzero, column_is_nonzero + trace.front().SIZE, true)); + }(); + vinfo("Number of non-zero columns: ", + non_zero_columns, + "/", + trace.front().SIZE, + " (", + 100 * non_zero_columns / trace.front().SIZE, + "%)"); +} + } // namespace +// Needed for dependency injection in tests. +Execution::TraceBuilderConstructor Execution::trace_builder_constructor = [](VmPublicInputs public_inputs, + ExecutionHints execution_hints, + uint32_t side_effect_counter, + std::vector calldata) { + return AvmTraceBuilder( + std::move(public_inputs), std::move(execution_hints), side_effect_counter, std::move(calldata)); +}; + /** * @brief Temporary routine to generate default public inputs (gas values) until we get * proper integration of public inputs. @@ -117,16 +188,15 @@ std::tuple Execution::prove(std::vector returndata; - std::vector trace; - AVM_TRACK_TIME("prove/gen_trace", - (trace = gen_trace(instructions, returndata, calldata, public_inputs_vec, execution_hints))); + std::vector trace = AVM_TRACK_TIME_V( + "prove/gen_trace", gen_trace(instructions, returndata, calldata, public_inputs_vec, execution_hints)); if (!avm_dump_trace_path.empty()) { info("Dumping trace as CSV to: " + avm_dump_trace_path.string()); dump_trace_as_csv(trace, avm_dump_trace_path); } auto circuit_builder = bb::AvmCircuitBuilder(); circuit_builder.set_trace(std::move(trace)); - vinfo("Trace size after padding: 2^", + vinfo("Circuit subgroup size: 2^", // this calculates the integer log2 std::bit_width(circuit_builder.get_circuit_subgroup_size()) - 1); @@ -135,14 +205,17 @@ std::tuple Execution::prove(std::vector Execution::prove(std::vector Execution::gen_trace(std::vector const& instructions, - std::vector const& calldata, - std::vector const& public_inputs, - ExecutionHints const& execution_hints) -{ - std::vector returndata{}; - return gen_trace(instructions, returndata, calldata, public_inputs, execution_hints); -} - /** * @brief Convert Public Inputs * @@ -207,6 +263,7 @@ VmPublicInputs Execution::convert_public_inputs(std::vector const& public_in // kernel_inputs[ADDRESS_SELECTOR] = public_inputs_vec[ADDRESS_SELECTOR]; // Address kernel_inputs[STORAGE_ADDRESS_SELECTOR] = public_inputs_vec[STORAGE_ADDRESS_SELECTOR]; // Storage Address kernel_inputs[FUNCTION_SELECTOR_SELECTOR] = public_inputs_vec[FUNCTION_SELECTOR_SELECTOR]; + kernel_inputs[IS_STATIC_CALL_SELECTOR] = public_inputs_vec[IS_STATIC_CALL_SELECTOR]; // PublicCircuitPublicInputs - GlobalVariables kernel_inputs[CHAIN_ID_SELECTOR] = public_inputs_vec[CHAIN_ID_OFFSET]; // Chain ID @@ -312,10 +369,12 @@ VmPublicInputs Execution::convert_public_inputs(std::vector const& public_in // For EMITUNENCRYPTEDLOG for (size_t i = 0; i < MAX_UNENCRYPTED_LOGS_PER_CALL; i++) { size_t dest_offset = START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET + i; - size_t pcpi_offset = PCPI_NEW_UNENCRYPTED_LOGS_OFFSET + (i * 2); + size_t pcpi_offset = + PCPI_NEW_UNENCRYPTED_LOGS_OFFSET + (i * 3); // 3 because we have metadata, this is the window size ko_values[dest_offset] = public_inputs_vec[pcpi_offset]; ko_side_effect[dest_offset] = public_inputs_vec[pcpi_offset + 1]; + ko_metadata[dest_offset] = public_inputs_vec[pcpi_offset + 2]; } return public_inputs; @@ -387,7 +446,9 @@ std::vector Execution::gen_trace(std::vector const& instructio uint32_t start_side_effect_counter = !public_inputs_vec.empty() ? static_cast(public_inputs_vec[PCPI_START_SIDE_EFFECT_COUNTER_OFFSET]) : 0; - AvmTraceBuilder trace_builder(public_inputs, execution_hints, start_side_effect_counter, calldata); + + AvmTraceBuilder trace_builder = + Execution::trace_builder_constructor(public_inputs, execution_hints, start_side_effect_counter, calldata); // Copied version of pc maintained in trace builder. The value of pc is evolving based // on opcode logic and therefore is not maintained here. However, the next opcode in the execution @@ -558,15 +619,13 @@ std::vector Execution::gen_trace(std::vector const& instructio break; case OpCode::NOT_8: trace_builder.op_not(std::get(inst.operands.at(0)), - std::get(inst.operands.at(2)), - std::get(inst.operands.at(3)), - std::get(inst.operands.at(1))); + std::get(inst.operands.at(1)), + std::get(inst.operands.at(2))); break; case OpCode::NOT_16: trace_builder.op_not(std::get(inst.operands.at(0)), - std::get(inst.operands.at(2)), - std::get(inst.operands.at(3)), - std::get(inst.operands.at(1))); + std::get(inst.operands.at(1)), + std::get(inst.operands.at(2))); break; case OpCode::SHL_8: trace_builder.op_shl(std::get(inst.operands.at(0)), @@ -613,46 +672,10 @@ std::vector Execution::gen_trace(std::vector const& instructio // Execution Environment // TODO(https://github.com/AztecProtocol/aztec-packages/issues/6284): support indirect for below - case OpCode::ADDRESS: - trace_builder.op_address(std::get(inst.operands.at(0)), std::get(inst.operands.at(1))); - break; - case OpCode::STORAGEADDRESS: - trace_builder.op_storage_address(std::get(inst.operands.at(0)), - std::get(inst.operands.at(1))); - break; - case OpCode::SENDER: - trace_builder.op_sender(std::get(inst.operands.at(0)), std::get(inst.operands.at(1))); - break; - case OpCode::FUNCTIONSELECTOR: - trace_builder.op_function_selector(std::get(inst.operands.at(0)), - std::get(inst.operands.at(1))); - break; - case OpCode::TRANSACTIONFEE: - trace_builder.op_transaction_fee(std::get(inst.operands.at(0)), - std::get(inst.operands.at(1))); - break; - - // Execution Environment - Globals - case OpCode::CHAINID: - trace_builder.op_chain_id(std::get(inst.operands.at(0)), std::get(inst.operands.at(1))); - break; - case OpCode::VERSION: - trace_builder.op_version(std::get(inst.operands.at(0)), std::get(inst.operands.at(1))); - break; - case OpCode::BLOCKNUMBER: - trace_builder.op_block_number(std::get(inst.operands.at(0)), - std::get(inst.operands.at(1))); - break; - case OpCode::TIMESTAMP: - trace_builder.op_timestamp(std::get(inst.operands.at(0)), std::get(inst.operands.at(1))); - break; - case OpCode::FEEPERL2GAS: - trace_builder.op_fee_per_l2_gas(std::get(inst.operands.at(0)), - std::get(inst.operands.at(1))); - break; - case OpCode::FEEPERDAGAS: - trace_builder.op_fee_per_da_gas(std::get(inst.operands.at(0)), - std::get(inst.operands.at(1))); + case OpCode::GETENVVAR_16: + trace_builder.op_get_env_var(std::get(inst.operands.at(0)), + std::get(inst.operands.at(1)), + std::get(inst.operands.at(2))); break; // Execution Environment - Calldata @@ -663,14 +686,6 @@ std::vector Execution::gen_trace(std::vector const& instructio std::get(inst.operands.at(3))); break; - // Machine State - Gas - case OpCode::L2GASLEFT: - trace_builder.op_l2gasleft(std::get(inst.operands.at(0)), std::get(inst.operands.at(1))); - break; - case OpCode::DAGASLEFT: - trace_builder.op_dagasleft(std::get(inst.operands.at(0)), std::get(inst.operands.at(1))); - break; - // Machine State - Internal Control Flow case OpCode::JUMP_16: trace_builder.op_jump(std::get(inst.operands.at(0))); @@ -819,6 +834,17 @@ std::vector Execution::gen_trace(std::vector const& instructio std::get(inst.operands.at(7)), std::get(inst.operands.at(8))); break; + case OpCode::STATICCALL: + trace_builder.op_static_call(std::get(inst.operands.at(0)), + std::get(inst.operands.at(1)), + std::get(inst.operands.at(2)), + std::get(inst.operands.at(3)), + std::get(inst.operands.at(4)), + std::get(inst.operands.at(5)), + std::get(inst.operands.at(6)), + std::get(inst.operands.at(7)), + std::get(inst.operands.at(8))); + break; case OpCode::RETURN: { auto ret = trace_builder.op_return(std::get(inst.operands.at(0)), std::get(inst.operands.at(1)), @@ -865,12 +891,6 @@ std::vector Execution::gen_trace(std::vector const& instructio std::get(inst.operands.at(2))); break; - case OpCode::SHA256: - trace_builder.op_sha256(std::get(inst.operands.at(0)), - std::get(inst.operands.at(1)), - std::get(inst.operands.at(2)), - std::get(inst.operands.at(3))); - break; case OpCode::PEDERSEN: trace_builder.op_pedersen_hash(std::get(inst.operands.at(0)), std::get(inst.operands.at(1)), @@ -902,15 +922,17 @@ std::vector Execution::gen_trace(std::vector const& instructio std::get(inst.operands.at(1)), std::get(inst.operands.at(2)), std::get(inst.operands.at(3)), - std::get(inst.operands.at(4))); + std::get(inst.operands.at(4)), + std::get(inst.operands.at(5))); break; - // Future Gadgets -- pending changes in noir case OpCode::SHA256COMPRESSION: trace_builder.op_sha256_compression(std::get(inst.operands.at(0)), std::get(inst.operands.at(1)), std::get(inst.operands.at(2)), - std::get(inst.operands.at(3))); + std::get(inst.operands.at(3)), + std::get(inst.operands.at(4)), + std::get(inst.operands.at(5))); break; case OpCode::KECCAKF1600: @@ -936,35 +958,7 @@ std::vector Execution::gen_trace(std::vector const& instructio } auto trace = trace_builder.finalize(); - vinfo("Built trace size: ", trace.size()); - vinfo("Number of columns: ", trace.front().SIZE); - const size_t total_elements = trace.front().SIZE * trace.size(); - const size_t nonzero_elements = [&]() { - size_t count = 0; - for (auto const& row : trace) { - for (const auto& ff : row.as_vector()) { - if (!ff.is_zero()) { - count++; - } - } - } - return count; - }(); - vinfo("Number of non-zero elements: ", - nonzero_elements, - "/", - total_elements, - " (", - 100 * nonzero_elements / total_elements, - "%)"); - vinfo("Relation degrees: ", []() { - std::string result; - for (const auto& [key, value] : sorted_entries(get_relations_degrees())) { - result += "\n\t" + key + ": [" + value + "]"; - } - return result; - }()); - + show_trace_info(trace); return trace; } diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.hpp index 305c77b35da..ae6863589d0 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.hpp @@ -14,9 +14,11 @@ namespace bb::avm_trace { class Execution { public: - // Hardcoded circuit size for now, with enough to support 16-bit range checks and more. - // The SRS size is expected to be ~67MB at this size. - static constexpr size_t SRS_SIZE = 1 << 20; + static constexpr size_t SRS_SIZE = 1 << 22; + using TraceBuilderConstructor = std::function calldata)>; Execution() = default; @@ -38,12 +40,21 @@ class Execution { std::vector const& public_inputs, ExecutionHints const& execution_hints); + // For testing purposes only. + static void set_trace_builder_constructor(TraceBuilderConstructor constructor) + { + trace_builder_constructor = std::move(constructor); + } + static std::tuple prove( std::vector const& bytecode, std::vector const& calldata = {}, std::vector const& public_inputs_vec = getDefaultPublicInputs(), ExecutionHints const& execution_hints = {}); static bool verify(AvmFlavor::VerificationKey vk, HonkProof const& proof); + + private: + static TraceBuilderConstructor trace_builder_constructor; }; } // namespace bb::avm_trace diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/fixed_bytes.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/fixed_bytes.cpp index a7fa63bb2fc..60428021215 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/fixed_bytes.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/fixed_bytes.cpp @@ -89,13 +89,18 @@ void FixedBytesTable::finalize_for_testing(std::vector>& main_tra void FixedBytesTable::finalize_byte_length(std::vector>& main_trace) { // Generate ByteLength Lookup table of instruction tags to the number of bytes - // {U8: 1, U16: 2, U32: 4, U64: 8, U128: 16} - for (uint8_t avm_in_tag = 0; avm_in_tag < 5; avm_in_tag++) { - // The +1 here is because the instruction tags we care about (i.e excl U0 and FF) has the range 1,5] - main_trace.at(avm_in_tag).byte_lookup_sel_bin = FF(1); - main_trace.at(avm_in_tag).byte_lookup_table_in_tags = avm_in_tag + 1; - main_trace.at(avm_in_tag).byte_lookup_table_byte_lengths = static_cast(1 << avm_in_tag); + for (uint8_t avm_in_tag = static_cast(AvmMemoryTag::U1); + avm_in_tag <= static_cast(AvmMemoryTag::U128); + avm_in_tag++) { + // lookup indices start at 0 + uint8_t lookup_index = avm_in_tag - static_cast(AvmMemoryTag::U1); + size_t num_bytes = avm_in_tag == static_cast(AvmMemoryTag::U1) + ? 1 + : 1 << (static_cast(avm_in_tag) - static_cast(AvmMemoryTag::U8)); + main_trace.at(lookup_index).byte_lookup_sel_bin = FF(1); + main_trace.at(lookup_index).byte_lookup_table_in_tags = avm_in_tag; + main_trace.at(lookup_index).byte_lookup_table_byte_lengths = num_bytes; } } -} // namespace bb::avm_trace \ No newline at end of file +} // namespace bb::avm_trace diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/fixed_gas.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/fixed_gas.cpp index cf34e1d4691..edcc3a9976e 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/fixed_gas.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/fixed_gas.cpp @@ -18,93 +18,82 @@ constexpr auto make_cost(uint16_t l2_base, uint16_t da_base, uint16_t l2_dyn, ui } const std::unordered_map GAS_COST_TABLE = { - { OpCode::ADD_8, make_cost(AVM_ADD_BASE_L2_GAS, 0, AVM_ADD_DYN_L2_GAS, 0) }, - { OpCode::ADD_16, make_cost(AVM_ADD_BASE_L2_GAS, 0, AVM_ADD_DYN_L2_GAS, 0) }, - { OpCode::SUB_8, make_cost(AVM_SUB_BASE_L2_GAS, 0, AVM_SUB_DYN_L2_GAS, 0) }, - { OpCode::SUB_16, make_cost(AVM_SUB_BASE_L2_GAS, 0, AVM_SUB_DYN_L2_GAS, 0) }, - { OpCode::MUL_8, make_cost(AVM_MUL_BASE_L2_GAS, 0, AVM_MUL_DYN_L2_GAS, 0) }, - { OpCode::MUL_16, make_cost(AVM_MUL_BASE_L2_GAS, 0, AVM_MUL_DYN_L2_GAS, 0) }, - { OpCode::DIV_8, make_cost(AVM_DIV_BASE_L2_GAS, 0, AVM_DIV_DYN_L2_GAS, 0) }, - { OpCode::DIV_16, make_cost(AVM_DIV_BASE_L2_GAS, 0, AVM_DIV_DYN_L2_GAS, 0) }, - { OpCode::FDIV_8, make_cost(AVM_FDIV_BASE_L2_GAS, 0, AVM_FDIV_DYN_L2_GAS, 0) }, - { OpCode::FDIV_16, make_cost(AVM_FDIV_BASE_L2_GAS, 0, AVM_FDIV_DYN_L2_GAS, 0) }, - { OpCode::EQ_8, make_cost(AVM_EQ_BASE_L2_GAS, 0, AVM_EQ_DYN_L2_GAS, 0) }, - { OpCode::EQ_16, make_cost(AVM_EQ_BASE_L2_GAS, 0, AVM_EQ_DYN_L2_GAS, 0) }, - { OpCode::LT_8, make_cost(AVM_LT_BASE_L2_GAS, 0, AVM_LT_DYN_L2_GAS, 0) }, - { OpCode::LT_16, make_cost(AVM_LT_BASE_L2_GAS, 0, AVM_LT_DYN_L2_GAS, 0) }, - { OpCode::LTE_8, make_cost(AVM_LTE_BASE_L2_GAS, 0, AVM_LTE_DYN_L2_GAS, 0) }, - { OpCode::LTE_16, make_cost(AVM_LTE_BASE_L2_GAS, 0, AVM_LTE_DYN_L2_GAS, 0) }, - { OpCode::AND_8, make_cost(AVM_AND_BASE_L2_GAS, 0, AVM_AND_DYN_L2_GAS, 0) }, - { OpCode::AND_16, make_cost(AVM_AND_BASE_L2_GAS, 0, AVM_AND_DYN_L2_GAS, 0) }, - { OpCode::OR_8, make_cost(AVM_OR_BASE_L2_GAS, 0, AVM_OR_DYN_L2_GAS, 0) }, - { OpCode::OR_16, make_cost(AVM_OR_BASE_L2_GAS, 0, AVM_OR_DYN_L2_GAS, 0) }, - { OpCode::XOR_8, make_cost(AVM_XOR_BASE_L2_GAS, 0, AVM_XOR_DYN_L2_GAS, 0) }, - { OpCode::XOR_16, make_cost(AVM_XOR_BASE_L2_GAS, 0, AVM_XOR_DYN_L2_GAS, 0) }, - { OpCode::NOT_8, make_cost(AVM_NOT_BASE_L2_GAS, 0, AVM_NOT_DYN_L2_GAS, 0) }, - { OpCode::NOT_16, make_cost(AVM_NOT_BASE_L2_GAS, 0, AVM_NOT_DYN_L2_GAS, 0) }, - { OpCode::SHL_8, make_cost(AVM_SHL_BASE_L2_GAS, 0, AVM_SHL_DYN_L2_GAS, 0) }, - { OpCode::SHL_16, make_cost(AVM_SHL_BASE_L2_GAS, 0, AVM_SHL_DYN_L2_GAS, 0) }, - { OpCode::SHR_8, make_cost(AVM_SHR_BASE_L2_GAS, 0, AVM_SHR_DYN_L2_GAS, 0) }, - { OpCode::SHR_16, make_cost(AVM_SHR_BASE_L2_GAS, 0, AVM_SHR_DYN_L2_GAS, 0) }, - { OpCode::CAST_8, make_cost(AVM_CAST_BASE_L2_GAS, 0, AVM_CAST_DYN_L2_GAS, 0) }, - { OpCode::CAST_16, make_cost(AVM_CAST_BASE_L2_GAS, 0, AVM_CAST_DYN_L2_GAS, 0) }, - { OpCode::ADDRESS, make_cost(AVM_ADDRESS_BASE_L2_GAS, 0, AVM_ADDRESS_DYN_L2_GAS, 0) }, - { OpCode::STORAGEADDRESS, make_cost(AVM_STORAGEADDRESS_BASE_L2_GAS, 0, AVM_STORAGEADDRESS_DYN_L2_GAS, 0) }, - { OpCode::SENDER, make_cost(AVM_SENDER_BASE_L2_GAS, 0, AVM_SENDER_DYN_L2_GAS, 0) }, - { OpCode::FUNCTIONSELECTOR, make_cost(AVM_FUNCTIONSELECTOR_BASE_L2_GAS, 0, AVM_FUNCTIONSELECTOR_DYN_L2_GAS, 0) }, - { OpCode::TRANSACTIONFEE, make_cost(AVM_TRANSACTIONFEE_BASE_L2_GAS, 0, AVM_TRANSACTIONFEE_DYN_L2_GAS, 0) }, - { OpCode::CHAINID, make_cost(AVM_CHAINID_BASE_L2_GAS, 0, AVM_CHAINID_DYN_L2_GAS, 0) }, - { OpCode::VERSION, make_cost(AVM_VERSION_BASE_L2_GAS, 0, AVM_VERSION_DYN_L2_GAS, 0) }, - { OpCode::BLOCKNUMBER, make_cost(AVM_BLOCKNUMBER_BASE_L2_GAS, 0, AVM_BLOCKNUMBER_DYN_L2_GAS, 0) }, - { OpCode::TIMESTAMP, make_cost(AVM_TIMESTAMP_BASE_L2_GAS, 0, AVM_TIMESTAMP_DYN_L2_GAS, 0) }, - { OpCode::FEEPERL2GAS, make_cost(AVM_FEEPERL2GAS_BASE_L2_GAS, 0, AVM_FEEPERL2GAS_DYN_L2_GAS, 0) }, - { OpCode::FEEPERDAGAS, make_cost(AVM_FEEPERDAGAS_BASE_L2_GAS, 0, AVM_FEEPERDAGAS_DYN_L2_GAS, 0) }, + { OpCode::ADD_8, make_cost(AVM_ADD_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::ADD_16, make_cost(AVM_ADD_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::SUB_8, make_cost(AVM_SUB_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::SUB_16, make_cost(AVM_SUB_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::MUL_8, make_cost(AVM_MUL_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::MUL_16, make_cost(AVM_MUL_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::DIV_8, make_cost(AVM_DIV_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::DIV_16, make_cost(AVM_DIV_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::FDIV_8, make_cost(AVM_FDIV_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::FDIV_16, make_cost(AVM_FDIV_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::EQ_8, make_cost(AVM_EQ_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::EQ_16, make_cost(AVM_EQ_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::LT_8, make_cost(AVM_LT_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::LT_16, make_cost(AVM_LT_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::LTE_8, make_cost(AVM_LTE_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::LTE_16, make_cost(AVM_LTE_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::AND_8, make_cost(AVM_AND_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::AND_16, make_cost(AVM_AND_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::OR_8, make_cost(AVM_OR_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::OR_16, make_cost(AVM_OR_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::XOR_8, make_cost(AVM_XOR_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::XOR_16, make_cost(AVM_XOR_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::NOT_8, make_cost(AVM_NOT_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::NOT_16, make_cost(AVM_NOT_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::SHL_8, make_cost(AVM_SHL_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::SHL_16, make_cost(AVM_SHL_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::SHR_8, make_cost(AVM_SHR_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::SHR_16, make_cost(AVM_SHR_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::CAST_8, make_cost(AVM_CAST_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::CAST_16, make_cost(AVM_CAST_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::GETENVVAR_16, make_cost(AVM_GETENVVAR_BASE_L2_GAS, 0, 0, 0) }, { OpCode::CALLDATACOPY, make_cost(AVM_CALLDATACOPY_BASE_L2_GAS, 0, AVM_CALLDATACOPY_DYN_L2_GAS, 0) }, - { OpCode::L2GASLEFT, make_cost(AVM_L2GASLEFT_BASE_L2_GAS, 0, AVM_L2GASLEFT_DYN_L2_GAS, 0) }, - { OpCode::DAGASLEFT, make_cost(AVM_DAGASLEFT_BASE_L2_GAS, 0, AVM_DAGASLEFT_DYN_L2_GAS, 0) }, - { OpCode::JUMP_16, make_cost(AVM_JUMP_BASE_L2_GAS, 0, AVM_JUMP_DYN_L2_GAS, 0) }, - { OpCode::JUMPI_16, make_cost(AVM_JUMPI_BASE_L2_GAS, 0, AVM_JUMPI_DYN_L2_GAS, 0) }, - { OpCode::INTERNALCALL, make_cost(AVM_INTERNALCALL_BASE_L2_GAS, 0, AVM_INTERNALCALL_DYN_L2_GAS, 0) }, - { OpCode::INTERNALRETURN, make_cost(AVM_INTERNALRETURN_BASE_L2_GAS, 0, AVM_INTERNALRETURN_DYN_L2_GAS, 0) }, - { OpCode::SET_8, make_cost(AVM_SET_BASE_L2_GAS, 0, AVM_SET_DYN_L2_GAS, 0) }, - { OpCode::SET_16, make_cost(AVM_SET_BASE_L2_GAS, 0, AVM_SET_DYN_L2_GAS, 0) }, - { OpCode::SET_32, make_cost(AVM_SET_BASE_L2_GAS, 0, AVM_SET_DYN_L2_GAS, 0) }, - { OpCode::SET_64, make_cost(AVM_SET_BASE_L2_GAS, 0, AVM_SET_DYN_L2_GAS, 0) }, - { OpCode::SET_128, make_cost(AVM_SET_BASE_L2_GAS, 0, AVM_SET_DYN_L2_GAS, 0) }, - { OpCode::SET_FF, make_cost(AVM_SET_BASE_L2_GAS, 0, AVM_SET_DYN_L2_GAS, 0) }, - { OpCode::MOV_8, make_cost(AVM_MOV_BASE_L2_GAS, 0, AVM_MOV_DYN_L2_GAS, 0) }, - { OpCode::MOV_16, make_cost(AVM_MOV_BASE_L2_GAS, 0, AVM_MOV_DYN_L2_GAS, 0) }, - { OpCode::CMOV, make_cost(AVM_CMOV_BASE_L2_GAS, 0, AVM_CMOV_DYN_L2_GAS, 0) }, - { OpCode::SLOAD, make_cost(AVM_SLOAD_BASE_L2_GAS, 0, AVM_SLOAD_DYN_L2_GAS, 0) }, - { OpCode::SSTORE, make_cost(AVM_SSTORE_BASE_L2_GAS, 0, AVM_SSTORE_DYN_L2_GAS, 0) }, - { OpCode::NOTEHASHEXISTS, make_cost(AVM_NOTEHASHEXISTS_BASE_L2_GAS, 0, AVM_NOTEHASHEXISTS_DYN_L2_GAS, 0) }, - { OpCode::EMITNOTEHASH, make_cost(AVM_EMITNOTEHASH_BASE_L2_GAS, 0, AVM_EMITNOTEHASH_DYN_L2_GAS, 0) }, - { OpCode::NULLIFIEREXISTS, make_cost(AVM_NULLIFIEREXISTS_BASE_L2_GAS, 0, AVM_NULLIFIEREXISTS_DYN_L2_GAS, 0) }, - { OpCode::EMITNULLIFIER, make_cost(AVM_EMITNULLIFIER_BASE_L2_GAS, 0, AVM_EMITNULLIFIER_DYN_L2_GAS, 0) }, - { OpCode::L1TOL2MSGEXISTS, make_cost(AVM_L1TOL2MSGEXISTS_BASE_L2_GAS, 0, AVM_L1TOL2MSGEXISTS_DYN_L2_GAS, 0) }, - { OpCode::GETCONTRACTINSTANCE, - make_cost(AVM_GETCONTRACTINSTANCE_BASE_L2_GAS, 0, AVM_GETCONTRACTINSTANCE_DYN_L2_GAS, 0) }, + { OpCode::JUMP_16, make_cost(AVM_JUMP_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::JUMPI_16, make_cost(AVM_JUMPI_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::INTERNALCALL, make_cost(AVM_INTERNALCALL_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::INTERNALRETURN, make_cost(AVM_INTERNALRETURN_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::SET_8, make_cost(AVM_SET_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::SET_16, make_cost(AVM_SET_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::SET_32, make_cost(AVM_SET_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::SET_64, make_cost(AVM_SET_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::SET_128, make_cost(AVM_SET_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::SET_FF, make_cost(AVM_SET_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::MOV_8, make_cost(AVM_MOV_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::MOV_16, make_cost(AVM_MOV_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::CMOV, make_cost(AVM_CMOV_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::SLOAD, make_cost(AVM_SLOAD_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::SSTORE, make_cost(AVM_SSTORE_BASE_L2_GAS, AVM_SSTORE_BASE_DA_GAS, 0, 0) }, + { OpCode::NOTEHASHEXISTS, make_cost(AVM_NOTEHASHEXISTS_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::EMITNOTEHASH, make_cost(AVM_EMITNOTEHASH_BASE_L2_GAS, AVM_EMITNOTEHASH_BASE_DA_GAS, 0, 0) }, + { OpCode::NULLIFIEREXISTS, make_cost(AVM_NULLIFIEREXISTS_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::EMITNULLIFIER, make_cost(AVM_EMITNULLIFIER_BASE_L2_GAS, AVM_EMITNULLIFIER_BASE_DA_GAS, 0, 0) }, + { OpCode::L1TOL2MSGEXISTS, make_cost(AVM_L1TOL2MSGEXISTS_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::GETCONTRACTINSTANCE, make_cost(AVM_GETCONTRACTINSTANCE_BASE_L2_GAS, 0, 0, 0) }, { OpCode::EMITUNENCRYPTEDLOG, - make_cost(AVM_EMITUNENCRYPTEDLOG_BASE_L2_GAS, 0, AVM_EMITUNENCRYPTEDLOG_DYN_L2_GAS, 0) }, - { OpCode::SENDL2TOL1MSG, make_cost(AVM_SENDL2TOL1MSG_BASE_L2_GAS, 0, AVM_SENDL2TOL1MSG_DYN_L2_GAS, 0) }, + make_cost(AVM_EMITUNENCRYPTEDLOG_BASE_L2_GAS, + 0, + AVM_EMITUNENCRYPTEDLOG_DYN_L2_GAS, + AVM_EMITUNENCRYPTEDLOG_DYN_DA_GAS) }, + { OpCode::SENDL2TOL1MSG, make_cost(AVM_SENDL2TOL1MSG_BASE_L2_GAS, AVM_SENDL2TOL1MSG_BASE_DA_GAS, 0, 0) }, { OpCode::CALL, make_cost(AVM_CALL_BASE_L2_GAS, 0, AVM_CALL_DYN_L2_GAS, 0) }, { OpCode::STATICCALL, make_cost(AVM_STATICCALL_BASE_L2_GAS, 0, AVM_STATICCALL_DYN_L2_GAS, 0) }, { OpCode::DELEGATECALL, make_cost(AVM_DELEGATECALL_BASE_L2_GAS, 0, AVM_DELEGATECALL_DYN_L2_GAS, 0) }, { OpCode::RETURN, make_cost(AVM_RETURN_BASE_L2_GAS, 0, AVM_RETURN_DYN_L2_GAS, 0) }, { OpCode::REVERT_8, make_cost(AVM_REVERT_BASE_L2_GAS, 0, AVM_REVERT_DYN_L2_GAS, 0) }, { OpCode::REVERT_16, make_cost(AVM_REVERT_BASE_L2_GAS, 0, AVM_REVERT_DYN_L2_GAS, 0) }, - { OpCode::DEBUGLOG, make_cost(AVM_DEBUGLOG_BASE_L2_GAS, 0, AVM_DEBUGLOG_DYN_L2_GAS, 0) }, + { OpCode::DEBUGLOG, make_cost(AVM_DEBUGLOG_BASE_L2_GAS, 0, 0, 0) }, { OpCode::KECCAK, make_cost(AVM_KECCAK_BASE_L2_GAS, 0, AVM_KECCAK_DYN_L2_GAS, 0) }, - { OpCode::POSEIDON2, make_cost(AVM_POSEIDON2_BASE_L2_GAS, 0, AVM_POSEIDON2_DYN_L2_GAS, 0) }, - { OpCode::SHA256, make_cost(AVM_SHA256_BASE_L2_GAS, 0, AVM_SHA256_DYN_L2_GAS, 0) }, + { OpCode::POSEIDON2, make_cost(AVM_POSEIDON2_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::SHA256COMPRESSION, make_cost(AVM_SHA256COMPRESSION_BASE_L2_GAS, 0, 0, 0) }, + { OpCode::KECCAKF1600, make_cost(AVM_KECCAKF1600_BASE_L2_GAS, 0, 0, 0) }, { OpCode::PEDERSEN, make_cost(AVM_PEDERSEN_BASE_L2_GAS, 0, AVM_PEDERSEN_DYN_L2_GAS, 0) }, - { OpCode::ECADD, make_cost(AVM_ECADD_BASE_L2_GAS, 0, AVM_ECADD_DYN_L2_GAS, 0) }, + { OpCode::ECADD, make_cost(AVM_ECADD_BASE_L2_GAS, 0, 0, 0) }, { OpCode::MSM, make_cost(AVM_MSM_BASE_L2_GAS, 0, AVM_MSM_DYN_L2_GAS, 0) }, { OpCode::PEDERSENCOMMITMENT, make_cost(AVM_PEDERSENCOMMITMENT_BASE_L2_GAS, 0, AVM_PEDERSENCOMMITMENT_DYN_L2_GAS, 0) }, { OpCode::TORADIXLE, make_cost(AVM_TORADIXLE_BASE_L2_GAS, 0, AVM_TORADIXLE_DYN_L2_GAS, 0) }, - { OpCode::SHA256COMPRESSION, make_cost(AVM_SHA256COMPRESSION_BASE_L2_GAS, 0, AVM_SHA256COMPRESSION_DYN_L2_GAS, 0) }, - { OpCode::KECCAKF1600, make_cost(AVM_KECCAKF1600_BASE_L2_GAS, 0, AVM_KECCAKF1600_DYN_L2_GAS, 0) }, }; } // namespace diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/conversion_trace.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/conversion_trace.cpp index b53d04599a8..07a4320ec9c 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/conversion_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/conversion_trace.cpp @@ -10,6 +10,7 @@ std::vector AvmConversionTraceB void AvmConversionTraceBuilder::reset() { conversion_trace.clear(); + conversion_trace.shrink_to_fit(); // Reclaim memory. } /** @@ -19,24 +20,27 @@ void AvmConversionTraceBuilder::reset() * @param a First operand of the TO_RADIX_LE, the value to be converted * @param radix The upper bound for each limbm 0 <= limb < radix * @param num_limbs The number of limbs to the value into. - * @param in_tag Instruction tag defining the number of bits for the LT. + * @param output_bits Should the output be U1s instead of U8s? * @param clk Clock referring to the operation in the main trace. * - * @return std::vector The LE converted values stored as bytes. + * @return std::vector The LE converted values stored as bytes or bits. */ -std::vector AvmConversionTraceBuilder::op_to_radix_le(FF const& a, - uint32_t radix, - uint32_t num_limbs, - uint32_t clk) +std::vector AvmConversionTraceBuilder::op_to_radix_le( + FF const& a, uint32_t radix, uint32_t num_limbs, uint8_t output_bits, uint32_t clk) { - ASSERT(radix <= 256); + ASSERT(radix <= 256); // should never reach here because main trace won't call with bad radix auto a_uint256 = uint256_t(a); auto radix_uint256 = uint256_t(radix); - std::vector bytes; + std::vector bytes_or_bits; for (uint32_t i = 0; i < num_limbs; i++) { - bytes.emplace_back(static_cast(a_uint256 % radix_uint256)); + auto limb = a_uint256 % radix_uint256; + if (output_bits > 0) { + bytes_or_bits.emplace_back(static_cast(limb == 0 ? 0 : 1)); + } else { + bytes_or_bits.emplace_back(static_cast(limb)); + } a_uint256 /= radix_uint256; } @@ -46,10 +50,11 @@ std::vector AvmConversionTraceBuilder::op_to_radix_le(FF const& a, .input = a, .radix = radix, .num_limbs = num_limbs, - .limbs = bytes, + .output_bits = output_bits, + .limbs = bytes_or_bits, }); - return bytes; + return bytes_or_bits; } } // namespace bb::avm_trace diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/conversion_trace.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/conversion_trace.hpp index dd6d16f14c1..cf0ac4723bf 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/conversion_trace.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/conversion_trace.hpp @@ -17,6 +17,7 @@ class AvmConversionTraceBuilder { FF input{}; uint32_t radix = 0; uint32_t num_limbs = 0; + uint8_t output_bits = 0; std::vector limbs; }; @@ -25,7 +26,8 @@ class AvmConversionTraceBuilder { // Finalize the trace std::vector finalize(); - std::vector op_to_radix_le(FF const& a, uint32_t radix, uint32_t num_limbs, uint32_t clk); + std::vector op_to_radix_le( + FF const& a, uint32_t radix, uint32_t num_limbs, uint8_t output_bits, uint32_t clk); private: std::vector conversion_trace; diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/ecc.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/ecc.cpp index 5486ae85316..1eaae98b230 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/ecc.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/ecc.cpp @@ -13,6 +13,7 @@ std::vector AvmEccTraceBuilder::finalize() void AvmEccTraceBuilder::reset() { ecc_trace.clear(); + ecc_trace.shrink_to_fit(); // Reclaim memory. } element AvmEccTraceBuilder::embedded_curve_add(element lhs, element rhs, uint32_t clk) diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/keccak.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/keccak.cpp index 366efc06009..f998505aa48 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/keccak.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/keccak.cpp @@ -15,6 +15,7 @@ std::vector AvmKeccakTraceBuilder::fina void AvmKeccakTraceBuilder::reset() { keccak_trace.clear(); + keccak_trace.shrink_to_fit(); // Reclaim memory. } std::array AvmKeccakTraceBuilder::keccakf1600(uint32_t clk, std::array input) diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/pedersen.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/pedersen.cpp index 14da5418df8..3d94837692b 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/pedersen.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/pedersen.cpp @@ -12,6 +12,7 @@ std::vector AvmPedersenTraceBuilder void AvmPedersenTraceBuilder::reset() { pedersen_trace.clear(); + pedersen_trace.shrink_to_fit(); // Reclaim memory. } FF AvmPedersenTraceBuilder::pedersen_hash(const std::vector& inputs, uint32_t offset, uint32_t clk) diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/poseidon2.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/poseidon2.cpp index ce9474ed5f0..6092061f0c6 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/poseidon2.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/poseidon2.cpp @@ -12,6 +12,7 @@ std::vector AvmPoseidon2TraceBuil void AvmPoseidon2TraceBuilder::reset() { poseidon2_trace.clear(); + poseidon2_trace.shrink_to_fit(); // Reclaim memory. } std::array AvmPoseidon2TraceBuilder::poseidon2_permutation(std::array const& input, diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/sha256.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/sha256.cpp index f6c09dcc1f2..ff51cbab113 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/sha256.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/sha256.cpp @@ -19,6 +19,7 @@ std::vector AvmSha256TraceBuilder::fina void AvmSha256TraceBuilder::reset() { sha256_trace.clear(); + sha256_trace.shrink_to_fit(); // Reclaim memory. } // Taken from barretenberg/crypto/sha256/sha256.cpp since it is not exposed directly diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/slice_trace.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/slice_trace.cpp index 52aee087590..78629d1e93c 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/slice_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/gadgets/slice_trace.cpp @@ -8,6 +8,7 @@ namespace bb::avm_trace { void AvmSliceTraceBuilder::reset() { slice_trace.clear(); + slice_trace.shrink_to_fit(); // Reclaim memory. cd_lookup_counts.clear(); ret_lookup_counts.clear(); } diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/gas_trace.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/gas_trace.cpp index c2b1765781d..e8ffd2ecbce 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/gas_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/gas_trace.cpp @@ -11,6 +11,7 @@ namespace bb::avm_trace { void AvmGasTraceBuilder::reset() { gas_trace.clear(); + gas_trace.shrink_to_fit(); // Reclaim memory. } void AvmGasTraceBuilder::set_initial_gas(uint32_t l2_gas, uint32_t da_gas) @@ -33,42 +34,17 @@ uint32_t AvmGasTraceBuilder::get_da_gas_left() const return gas_trace.back().remaining_da_gas; } -void AvmGasTraceBuilder::constrain_gas(uint32_t clk, OpCode opcode, uint32_t dyn_gas_multiplier) +void AvmGasTraceBuilder::constrain_gas( + uint32_t clk, OpCode opcode, uint32_t dyn_gas_multiplier, uint32_t nested_l2_gas_cost, uint32_t nested_da_gas_cost) { - gas_opcode_lookup_counter[opcode]++; + uint32_t effective_nested_l2_gas_cost = 0; + uint32_t effective_nested_da_gas_cost = 0; - // Get the gas prices for this opcode - const auto& GAS_COST_TABLE = FixedGasTable::get(); - const auto& gas_info = GAS_COST_TABLE.at(opcode); - auto base_l2_gas_cost = static_cast(gas_info.base_l2_gas_fixed_table); - auto base_da_gas_cost = static_cast(gas_info.base_da_gas_fixed_table); - auto dyn_l2_gas_cost = static_cast(gas_info.dyn_l2_gas_fixed_table); - auto dyn_da_gas_cost = static_cast(gas_info.dyn_da_gas_fixed_table); - - // Decrease the gas left - remaining_l2_gas -= base_l2_gas_cost + dyn_l2_gas_cost * dyn_gas_multiplier; - remaining_da_gas -= base_da_gas_cost + dyn_da_gas_cost * dyn_gas_multiplier; - - // Create a gas trace entry - gas_trace.push_back({ - .clk = clk, - .opcode = opcode, - .base_l2_gas_cost = base_l2_gas_cost, - .base_da_gas_cost = base_da_gas_cost, - .dyn_l2_gas_cost = dyn_l2_gas_cost, - .dyn_da_gas_cost = dyn_da_gas_cost, - .dyn_gas_multiplier = dyn_gas_multiplier, - .remaining_l2_gas = remaining_l2_gas, - .remaining_da_gas = remaining_da_gas, - }); -} + if (opcode == OpCode::CALL || opcode == OpCode::STATICCALL) { + effective_nested_l2_gas_cost = nested_l2_gas_cost; + effective_nested_da_gas_cost = nested_da_gas_cost; + } -void AvmGasTraceBuilder::constrain_gas_for_external_call(uint32_t clk, - uint32_t dyn_gas_multiplier, - uint32_t nested_l2_gas_cost, - uint32_t nested_da_gas_cost) -{ - const OpCode opcode = OpCode::CALL; gas_opcode_lookup_counter[opcode]++; // Get the gas prices for this opcode @@ -79,10 +55,9 @@ void AvmGasTraceBuilder::constrain_gas_for_external_call(uint32_t clk, auto dyn_l2_gas_cost = static_cast(gas_info.dyn_l2_gas_fixed_table); auto dyn_da_gas_cost = static_cast(gas_info.dyn_da_gas_fixed_table); - // TODO: this is the only difference, unify. // Decrease the gas left - remaining_l2_gas -= (base_l2_gas_cost + dyn_gas_multiplier * dyn_l2_gas_cost) + nested_l2_gas_cost; - remaining_da_gas -= (base_da_gas_cost + dyn_gas_multiplier * dyn_da_gas_cost) + nested_da_gas_cost; + remaining_l2_gas -= (base_l2_gas_cost + dyn_gas_multiplier * dyn_l2_gas_cost) + effective_nested_l2_gas_cost; + remaining_da_gas -= (base_da_gas_cost + dyn_gas_multiplier * dyn_da_gas_cost) + effective_nested_da_gas_cost; // Create a gas trace entry gas_trace.push_back({ diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/gas_trace.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/gas_trace.hpp index 412343933f8..4d094576186 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/gas_trace.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/gas_trace.hpp @@ -32,11 +32,11 @@ class AvmGasTraceBuilder { void finalize(std::vector>& trace); void finalize_lookups(std::vector>& trace); - void constrain_gas(uint32_t clk, OpCode opcode, uint32_t dyn_gas_multiplier = 0); - void constrain_gas_for_external_call(uint32_t clk, - uint32_t dyn_gas_multiplier, - uint32_t nested_l2_gas_cost, - uint32_t nested_da_gas_cost); + void constrain_gas(uint32_t clk, + OpCode opcode, + uint32_t dyn_gas_multiplier = 0, + uint32_t nested_l2_gas_cost = 0, + uint32_t nested_da_gas_cost = 0); void set_initial_gas(uint32_t l2_gas, uint32_t da_gas); uint32_t get_l2_gas_left() const; diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/helper.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/helper.cpp index 0380178eda8..588e750a10b 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/helper.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/helper.cpp @@ -103,4 +103,9 @@ std::vector> copy_public_inputs_columns(VmPublicInputs const& pu }; } +std::string to_hex(bb::avm_trace::AvmMemoryTag tag) +{ + return to_hex(static_cast(tag)); +} + } // namespace bb::avm_trace diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/helper.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/helper.hpp index 7017b2d463e..91979bd4499 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/helper.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/helper.hpp @@ -21,4 +21,18 @@ std::vector> copy_public_inputs_columns(VmPublicInputs const& pu std::vector const& calldata, std::vector const& returndata); -} // namespace bb::avm_trace \ No newline at end of file +template + requires(std::unsigned_integral) +std::string to_hex(T value) +{ + std::ostringstream stream; + auto num_bytes = static_cast(sizeof(T)); + auto mask = static_cast((static_cast(1) << (num_bytes * 8)) - 1); + auto padding = static_cast(num_bytes * 2); + stream << std::setfill('0') << std::setw(padding) << std::hex << (value & mask); + return stream.str(); +} + +std::string to_hex(bb::avm_trace::AvmMemoryTag tag); + +} // namespace bb::avm_trace diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/kernel_trace.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/kernel_trace.cpp index d646b2e51b4..26e2a9a27b4 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/kernel_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/kernel_trace.cpp @@ -17,6 +17,7 @@ namespace bb::avm_trace { void AvmKernelTraceBuilder::reset() { kernel_trace.clear(); + kernel_trace.shrink_to_fit(); // Reclaim memory. kernel_input_selector_counter.clear(); kernel_output_selector_counter.clear(); } @@ -154,6 +155,16 @@ FF AvmKernelTraceBuilder::op_fee_per_l2_gas(uint32_t clk) return perform_kernel_input_lookup(FEE_PER_L2_GAS_SELECTOR); } +FF AvmKernelTraceBuilder::op_is_static_call(uint32_t clk) +{ + KernelTraceEntry entry = { + .clk = clk, + .operation = KernelTraceOpType::IS_STATIC_CALL, + }; + kernel_trace.push_back(entry); + return perform_kernel_input_lookup(IS_STATIC_CALL_SELECTOR); +} + // TODO(https://github.com/AztecProtocol/aztec-packages/issues/6481): need to process hint from avm in order to know if // output should be set to true or not void AvmKernelTraceBuilder::op_note_hash_exists(uint32_t clk, @@ -264,10 +275,13 @@ void AvmKernelTraceBuilder::op_l1_to_l2_msg_exists(uint32_t clk, kernel_trace.push_back(entry); } -void AvmKernelTraceBuilder::op_emit_unencrypted_log(uint32_t clk, uint32_t side_effect_counter, const FF& log_hash) +void AvmKernelTraceBuilder::op_emit_unencrypted_log(uint32_t clk, + uint32_t side_effect_counter, + const FF& log_hash, + const FF& log_length) { uint32_t offset = START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET + emit_unencrypted_log_offset; - perform_kernel_output_lookup(offset, side_effect_counter, log_hash, FF(0)); + perform_kernel_output_lookup(offset, side_effect_counter, log_hash, log_length); emit_unencrypted_log_offset++; KernelTraceEntry entry = { @@ -395,6 +409,10 @@ void AvmKernelTraceBuilder::finalize(std::vector>& main_trace) dest.main_kernel_in_offset = FEE_PER_L2_GAS_SELECTOR; dest.main_sel_q_kernel_lookup = 1; break; + case KernelTraceOpType::IS_STATIC_CALL: + dest.main_kernel_in_offset = IS_STATIC_CALL_SELECTOR; + dest.main_sel_q_kernel_lookup = 1; + break; // OUT case KernelTraceOpType::NOTE_HASH_EXISTS: dest.main_kernel_out_offset = src.kernel_out_offset; @@ -496,25 +514,11 @@ void AvmKernelTraceBuilder::finalize_columns(std::vector>& main_t for (auto const& [selector, count] : kernel_input_selector_counter) { main_trace.at(selector).lookup_into_kernel_counts = FF(count); } - // for (uint32_t i = 0; i < KERNEL_INPUTS_LENGTH; i++) { - // auto value = kernel_input_selector_counter.find(i); - // if (value != kernel_input_selector_counter.end()) { - // auto& dest = main_trace.at(i); - // dest.lookup_into_kernel_counts = FF(value->second); - // } - // } // Write lookup counts for outputs for (auto const& [selector, count] : kernel_output_selector_counter) { main_trace.at(selector).kernel_output_lookup_counts = FF(count); } - // for (uint32_t i = 0; i < KERNEL_OUTPUTS_LENGTH; i++) { - // auto value = kernel_output_selector_counter.find(i); - // if (value != kernel_output_selector_counter.end()) { - // auto& dest = main_trace.at(i); - // dest.kernel_output_lookup_counts = FF(value->second); - // } - // } } } // namespace bb::avm_trace diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/kernel_trace.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/kernel_trace.hpp index 71a5bb77d79..49979bca3cd 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/kernel_trace.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/kernel_trace.hpp @@ -27,6 +27,7 @@ class AvmKernelTraceBuilder { TIMESTAMP, FEE_PER_DA_GAS, FEE_PER_L2_GAS, + IS_STATIC_CALL, // OUT SLOAD, SSTORE, @@ -57,12 +58,13 @@ class AvmKernelTraceBuilder { std::unordered_map kernel_output_selector_counter; AvmKernelTraceBuilder(uint32_t initial_side_effect_counter, VmPublicInputs public_inputs, ExecutionHints hints) - : initial_side_effect_counter(initial_side_effect_counter) - , public_inputs(std::move(public_inputs)) + : public_inputs(std::move(public_inputs)) + , initial_side_effect_counter(initial_side_effect_counter) , hints(std::move(hints)) {} void reset(); + size_t size() const { return kernel_trace.size(); } void finalize(std::vector>& main_trace); void finalize_columns(std::vector>& main_trace) const; @@ -72,6 +74,7 @@ class AvmKernelTraceBuilder { FF op_sender(uint32_t clk); FF op_function_selector(uint32_t clk); FF op_transaction_fee(uint32_t clk); + FF op_is_static_call(uint32_t clk); // Globals FF op_chain_id(uint32_t clk); @@ -91,14 +94,16 @@ class AvmKernelTraceBuilder { void op_nullifier_exists(uint32_t clk, uint32_t side_effect_counter, const FF& nullifier, uint32_t result); void op_emit_nullifier(uint32_t clk, uint32_t side_effect_counter, const FF& nullifier); void op_l1_to_l2_msg_exists(uint32_t clk, uint32_t side_effect_counter, const FF& message, uint32_t result); - void op_emit_unencrypted_log(uint32_t clk, uint32_t side_effect_counter, const FF& log_hash); + void op_emit_unencrypted_log(uint32_t clk, uint32_t side_effect_counter, const FF& log_hash, const FF& log_length); void op_emit_l2_to_l1_msg(uint32_t clk, uint32_t side_effect_counter, const FF& l2_to_l1_msg, const FF& recipient); + // This is temporarily made public so we can access PIs + VmPublicInputs public_inputs; + private: std::vector kernel_trace; uint32_t initial_side_effect_counter; - VmPublicInputs public_inputs; ExecutionHints hints; // Output index counters diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/mem_trace.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/mem_trace.cpp index cbe1ef4890b..2c932af69e5 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/mem_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/mem_trace.cpp @@ -13,6 +13,7 @@ namespace bb::avm_trace { void AvmMemTraceBuilder::reset() { mem_trace.clear(); + mem_trace.shrink_to_fit(); // Reclaim memory. memory.fill({}); } diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/mem_trace.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/mem_trace.hpp index 56835aa77f5..70e543757ad 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/mem_trace.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/mem_trace.hpp @@ -110,6 +110,7 @@ class AvmMemTraceBuilder { // DO NOT USE FOR REAL OPERATIONS FF unconstrained_read(uint8_t space_id, uint32_t addr) { return memory[space_id][addr].val; } + AvmMemoryTag unconstrained_get_memory_tag(uint8_t space_id, uint32_t addr) { return memory[space_id][addr].tag; } private: std::vector mem_trace; // Entries will be sorted by m_clk, m_sub_clk after finalize(). diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.cpp index 5eece456d0d..91a6ba60ae3 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.cpp @@ -1,6 +1,7 @@ #include "barretenberg/vm/avm/trace/opcode.hpp" #include "barretenberg/common/log.hpp" #include "barretenberg/common/serialize.hpp" +#include "barretenberg/vm/avm/trace/helper.hpp" namespace bb::avm_trace { @@ -87,38 +88,12 @@ std::string to_string(OpCode opcode) case OpCode::CAST_16: return "CAST_16"; // Execution Environment - case OpCode::ADDRESS: - return "ADDRESS"; - case OpCode::STORAGEADDRESS: - return "STORAGEADDRESS"; - case OpCode::SENDER: - return "SENDER"; - case OpCode::FUNCTIONSELECTOR: - return "FUNCTIONSELECTOR"; - case OpCode::TRANSACTIONFEE: - return "TRANSACTIONFEE"; - // Execution Environment - Globals - case OpCode::CHAINID: - return "CHAINID"; - case OpCode::VERSION: - return "VERSION"; - case OpCode::BLOCKNUMBER: - return "BLOCKNUMBER"; - case OpCode::TIMESTAMP: - return "TIMESTAMP"; - case OpCode::FEEPERL2GAS: - return "FEEPERL2GAS"; - case OpCode::FEEPERDAGAS: - return "FEEPERDAGAS"; + case OpCode::GETENVVAR_16: + return "GETENVVAR_16"; // Execution Environment - Calldata case OpCode::CALLDATACOPY: return "CALLDATACOPY"; // Machine State - // Machine State - Gas - case OpCode::L2GASLEFT: - return "L2GASLEFT"; - case OpCode::DAGASLEFT: - return "DAGASLEFT"; // Machine State - Internal Control Flow case OpCode::JUMP_16: return "JUMP_16"; @@ -190,8 +165,10 @@ std::string to_string(OpCode opcode) return "KECCAK"; case OpCode::POSEIDON2: return "POSEIDON2"; - case OpCode::SHA256: - return "SHA256"; + case OpCode::SHA256COMPRESSION: + return "SHA256COMPRESSION"; + case OpCode::KECCAKF1600: + return "KECCAKF1600"; case OpCode::PEDERSEN: return "PEDERSEN"; case OpCode::ECADD: @@ -201,11 +178,6 @@ std::string to_string(OpCode opcode) // Conversions case OpCode::TORADIXLE: return "TORADIXLE"; - // Future Gadgets -- pending changes in noir - case OpCode::SHA256COMPRESSION: - return "SHA256COMPRESSION"; - case OpCode::KECCAKF1600: - return "KECCAKF1600"; // Sentinel case OpCode::LAST_OPCODE_SENTINEL: return "LAST_OPCODE_SENTINEL"; diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.hpp index a60469864fd..02e88167768 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.hpp @@ -53,25 +53,11 @@ enum class OpCode : uint8_t { CAST_16, // Execution Environment - ADDRESS, - STORAGEADDRESS, - SENDER, - FUNCTIONSELECTOR, - TRANSACTIONFEE, - // Execution Environment - Globals - CHAINID, - VERSION, - BLOCKNUMBER, - TIMESTAMP, - FEEPERL2GAS, - FEEPERDAGAS, + GETENVVAR_16, // Execution Environment - Calldata CALLDATACOPY, // Machine State - // Machine State - Gas - L2GASLEFT, - DAGASLEFT, // Machine State - Internal Control Flow JUMP_16, JUMPI_16, @@ -116,38 +102,43 @@ enum class OpCode : uint8_t { // Gadgets KECCAK, POSEIDON2, - SHA256, + SHA256COMPRESSION, + KECCAKF1600, PEDERSEN, ECADD, MSM, PEDERSENCOMMITMENT, // Conversions TORADIXLE, - // Future Gadgets -- pending changes in noir - SHA256COMPRESSION, - KECCAKF1600, // Here for when we eventually support this // Sentinel LAST_OPCODE_SENTINEL, }; +enum class EnvironmentVariable { + ADDRESS, + STORAGEADDRESS, + SENDER, + FUNCTIONSELECTOR, + TRANSACTIONFEE, + CHAINID, + VERSION, + BLOCKNUMBER, + TIMESTAMP, + FEEPERL2GAS, + FEEPERDAGAS, + ISSTATICCALL, + L2GASLEFT, + DAGASLEFT, + // sentinel + MAX_ENV_VAR +}; + class Bytecode { public: static bool is_valid(uint8_t byte); }; -// Look into whether we can do something with concepts here to enable OpCode as a parameter -template - requires(std::unsigned_integral) -std::string to_hex(T value) -{ - std::ostringstream stream; - auto num_bytes = static_cast(sizeof(T)); - auto mask = static_cast((static_cast(1) << (num_bytes * 8)) - 1); - auto padding = static_cast(num_bytes * 2); - stream << std::setfill('0') << std::setw(padding) << std::hex << (value & mask); - return stream.str(); -} std::string to_hex(OpCode opcode); std::string to_string(OpCode opcode); diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.cpp index 0be9049ffe0..a1e563ed638 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.cpp @@ -14,6 +14,7 @@ #include #include "barretenberg/common/assert.hpp" +#include "barretenberg/common/serialize.hpp" #include "barretenberg/common/throw_or_abort.hpp" #include "barretenberg/crypto/pedersen_commitment/pedersen.hpp" #include "barretenberg/ecc/curves/grumpkin/grumpkin.hpp" @@ -206,6 +207,15 @@ AvmTraceBuilder::MemOp AvmTraceBuilder::constrained_write_to_memory(uint8_t spac .val = value }; } +AvmMemoryTag AvmTraceBuilder::unconstrained_get_memory_tag(AddressWithMode addr) +{ + auto offset = addr.offset; + if (addr.mode == AddressingMode::INDIRECT) { + offset = static_cast(mem_trace_builder.unconstrained_read(call_ptr, offset)); + } + return mem_trace_builder.unconstrained_get_memory_tag(call_ptr, offset); +} + FF AvmTraceBuilder::unconstrained_read_from_memory(AddressWithMode addr) { auto offset = addr.offset; @@ -668,8 +678,8 @@ void AvmTraceBuilder::op_eq( auto [resolved_a, resolved_b, resolved_c] = unpack_indirects<3>(indirect, { a_offset, b_offset, dst_offset }); // Reading from memory and loading into ia resp. ib. - auto read_a = constrained_read_from_memory(call_ptr, clk, resolved_a, in_tag, AvmMemoryTag::U8, IntermRegister::IA); - auto read_b = constrained_read_from_memory(call_ptr, clk, resolved_b, in_tag, AvmMemoryTag::U8, IntermRegister::IB); + auto read_a = constrained_read_from_memory(call_ptr, clk, resolved_a, in_tag, AvmMemoryTag::U1, IntermRegister::IA); + auto read_b = constrained_read_from_memory(call_ptr, clk, resolved_b, in_tag, AvmMemoryTag::U1, IntermRegister::IB); bool tag_match = read_a.tag_match && read_b.tag_match; FF a = read_a.val; @@ -682,7 +692,7 @@ void AvmTraceBuilder::op_eq( // Write into memory value c from intermediate register ic. auto write_c = - constrained_write_to_memory(call_ptr, clk, resolved_c, c, in_tag, AvmMemoryTag::U8, IntermRegister::IC); + constrained_write_to_memory(call_ptr, clk, resolved_c, c, in_tag, AvmMemoryTag::U1, IntermRegister::IC); // Constrain gas cost gas_trace_builder.constrain_gas(clk, OpCode::EQ_8); @@ -712,7 +722,7 @@ void AvmTraceBuilder::op_eq( .main_sel_resolve_ind_addr_b = FF(static_cast(read_b.is_indirect)), .main_sel_resolve_ind_addr_c = FF(static_cast(write_c.is_indirect)), .main_tag_err = FF(static_cast(!tag_match)), - .main_w_in_tag = FF(static_cast(AvmMemoryTag::U8)), + .main_w_in_tag = FF(static_cast(AvmMemoryTag::U1)), }); } @@ -723,8 +733,8 @@ void AvmTraceBuilder::op_lt( auto [resolved_a, resolved_b, resolved_c] = unpack_indirects<3>(indirect, { a_offset, b_offset, dst_offset }); - auto read_a = constrained_read_from_memory(call_ptr, clk, resolved_a, in_tag, AvmMemoryTag::U8, IntermRegister::IA); - auto read_b = constrained_read_from_memory(call_ptr, clk, resolved_b, in_tag, AvmMemoryTag::U8, IntermRegister::IB); + auto read_a = constrained_read_from_memory(call_ptr, clk, resolved_a, in_tag, AvmMemoryTag::U1, IntermRegister::IA); + auto read_b = constrained_read_from_memory(call_ptr, clk, resolved_b, in_tag, AvmMemoryTag::U1, IntermRegister::IB); bool tag_match = read_a.tag_match && read_b.tag_match; FF a = tag_match ? read_a.val : FF(0); @@ -734,7 +744,7 @@ void AvmTraceBuilder::op_lt( // Write into memory value c from intermediate register ic. auto write_c = - constrained_write_to_memory(call_ptr, clk, resolved_c, c, in_tag, AvmMemoryTag::U8, IntermRegister::IC); + constrained_write_to_memory(call_ptr, clk, resolved_c, c, in_tag, AvmMemoryTag::U1, IntermRegister::IC); // Constrain gas cost gas_trace_builder.constrain_gas(clk, OpCode::LT_8); @@ -764,7 +774,7 @@ void AvmTraceBuilder::op_lt( .main_sel_resolve_ind_addr_b = FF(static_cast(read_b.is_indirect)), .main_sel_resolve_ind_addr_c = FF(static_cast(write_c.is_indirect)), .main_tag_err = FF(static_cast(!tag_match)), - .main_w_in_tag = FF(static_cast(AvmMemoryTag::U8)), + .main_w_in_tag = FF(static_cast(AvmMemoryTag::U1)), }); } @@ -776,8 +786,8 @@ void AvmTraceBuilder::op_lte( auto [resolved_a, resolved_b, resolved_c] = unpack_indirects<3>(indirect, { a_offset, b_offset, dst_offset }); // Reading from memory and loading into ia resp. ib. - auto read_a = constrained_read_from_memory(call_ptr, clk, resolved_a, in_tag, AvmMemoryTag::U8, IntermRegister::IA); - auto read_b = constrained_read_from_memory(call_ptr, clk, resolved_b, in_tag, AvmMemoryTag::U8, IntermRegister::IB); + auto read_a = constrained_read_from_memory(call_ptr, clk, resolved_a, in_tag, AvmMemoryTag::U1, IntermRegister::IA); + auto read_b = constrained_read_from_memory(call_ptr, clk, resolved_b, in_tag, AvmMemoryTag::U1, IntermRegister::IB); bool tag_match = read_a.tag_match && read_b.tag_match; FF a = tag_match ? read_a.val : FF(0); @@ -787,7 +797,7 @@ void AvmTraceBuilder::op_lte( // Write into memory value c from intermediate register ic. auto write_c = - constrained_write_to_memory(call_ptr, clk, resolved_c, c, in_tag, AvmMemoryTag::U8, IntermRegister::IC); + constrained_write_to_memory(call_ptr, clk, resolved_c, c, in_tag, AvmMemoryTag::U1, IntermRegister::IC); // Constrain gas cost gas_trace_builder.constrain_gas(clk, OpCode::LTE_8); @@ -817,7 +827,7 @@ void AvmTraceBuilder::op_lte( .main_sel_resolve_ind_addr_b = FF(static_cast(read_b.is_indirect)), .main_sel_resolve_ind_addr_c = FF(static_cast(write_c.is_indirect)), .main_tag_err = FF(static_cast(!tag_match)), - .main_w_in_tag = FF(static_cast(AvmMemoryTag::U8)), + .main_w_in_tag = FF(static_cast(AvmMemoryTag::U1)), }); } @@ -989,15 +999,16 @@ void AvmTraceBuilder::op_xor( * @param indirect A byte encoding information about indirect/direct memory access. * @param a_offset An index in memory pointing to the only operand of Not. * @param dst_offset An index in memory pointing to the output of Not. - * @param in_tag The instruction memory tag of the operands. */ -void AvmTraceBuilder::op_not(uint8_t indirect, uint32_t a_offset, uint32_t dst_offset, AvmMemoryTag in_tag) +void AvmTraceBuilder::op_not(uint8_t indirect, uint32_t a_offset, uint32_t dst_offset) { auto clk = static_cast(main_trace.size()) + 1; // Resolve any potential indirects in the order they are encoded in the indirect byte. auto [resolved_a, resolved_c] = unpack_indirects<2>(indirect, { a_offset, dst_offset }); + // We get our representative memory tag from the resolved_a memory address. + AvmMemoryTag in_tag = unconstrained_get_memory_tag(resolved_a); // Reading from memory and loading into ia auto read_a = constrained_read_from_memory(call_ptr, clk, resolved_a, in_tag, in_tag, IntermRegister::IA); @@ -1261,6 +1272,59 @@ Row AvmTraceBuilder::create_kernel_lookup_opcode(uint8_t indirect, uint32_t dst_ }; } +void AvmTraceBuilder::op_get_env_var(uint8_t indirect, uint8_t env_var, uint32_t dst_offset) +{ + ASSERT(env_var < static_cast(EnvironmentVariable::MAX_ENV_VAR)); + EnvironmentVariable var = static_cast(env_var); + + switch (var) { + case EnvironmentVariable::ADDRESS: + op_address(indirect, dst_offset); + break; + case EnvironmentVariable::STORAGEADDRESS: + op_storage_address(indirect, dst_offset); + break; + case EnvironmentVariable::SENDER: + op_sender(indirect, dst_offset); + break; + case EnvironmentVariable::FUNCTIONSELECTOR: + op_function_selector(indirect, dst_offset); + break; + case EnvironmentVariable::TRANSACTIONFEE: + op_transaction_fee(indirect, dst_offset); + break; + case EnvironmentVariable::CHAINID: + op_chain_id(indirect, dst_offset); + break; + case EnvironmentVariable::VERSION: + op_version(indirect, dst_offset); + break; + case EnvironmentVariable::BLOCKNUMBER: + op_block_number(indirect, dst_offset); + break; + case EnvironmentVariable::TIMESTAMP: + op_timestamp(indirect, dst_offset); + break; + case EnvironmentVariable::FEEPERL2GAS: + op_fee_per_l2_gas(indirect, dst_offset); + break; + case EnvironmentVariable::FEEPERDAGAS: + op_fee_per_da_gas(indirect, dst_offset); + break; + case EnvironmentVariable::ISSTATICCALL: + op_is_static_call(indirect, dst_offset); + break; + case EnvironmentVariable::L2GASLEFT: + op_l2gasleft(indirect, dst_offset); + break; + case EnvironmentVariable::DAGASLEFT: + op_dagasleft(indirect, dst_offset); + break; + default: + throw std::runtime_error("Invalid environment variable"); + } +} + void AvmTraceBuilder::op_address(uint8_t indirect, uint32_t dst_offset) { auto const clk = static_cast(main_trace.size()) + 1; @@ -1269,7 +1333,7 @@ void AvmTraceBuilder::op_address(uint8_t indirect, uint32_t dst_offset) row.main_sel_op_address = FF(1); // Constrain gas cost - gas_trace_builder.constrain_gas(static_cast(row.main_clk), OpCode::ADDRESS); + gas_trace_builder.constrain_gas(static_cast(row.main_clk), OpCode::GETENVVAR_16); main_trace.push_back(row); } @@ -1282,7 +1346,7 @@ void AvmTraceBuilder::op_storage_address(uint8_t indirect, uint32_t dst_offset) row.main_sel_op_storage_address = FF(1); // Constrain gas cost - gas_trace_builder.constrain_gas(static_cast(row.main_clk), OpCode::STORAGEADDRESS); + gas_trace_builder.constrain_gas(static_cast(row.main_clk), OpCode::GETENVVAR_16); main_trace.push_back(row); } @@ -1295,7 +1359,7 @@ void AvmTraceBuilder::op_sender(uint8_t indirect, uint32_t dst_offset) row.main_sel_op_sender = FF(1); // Constrain gas cost - gas_trace_builder.constrain_gas(static_cast(row.main_clk), OpCode::SENDER); + gas_trace_builder.constrain_gas(static_cast(row.main_clk), OpCode::GETENVVAR_16); main_trace.push_back(row); } @@ -1308,7 +1372,7 @@ void AvmTraceBuilder::op_function_selector(uint8_t indirect, uint32_t dst_offset row.main_sel_op_function_selector = FF(1); // Constrain gas cost - gas_trace_builder.constrain_gas(static_cast(row.main_clk), OpCode::FUNCTIONSELECTOR); + gas_trace_builder.constrain_gas(static_cast(row.main_clk), OpCode::GETENVVAR_16); main_trace.push_back(row); } @@ -1321,7 +1385,20 @@ void AvmTraceBuilder::op_transaction_fee(uint8_t indirect, uint32_t dst_offset) row.main_sel_op_transaction_fee = FF(1); // Constrain gas cost - gas_trace_builder.constrain_gas(static_cast(row.main_clk), OpCode::TRANSACTIONFEE); + gas_trace_builder.constrain_gas(static_cast(row.main_clk), OpCode::GETENVVAR_16); + + main_trace.push_back(row); +} + +void AvmTraceBuilder::op_is_static_call(uint8_t indirect, uint32_t dst_offset) +{ + auto const clk = static_cast(main_trace.size()) + 1; + FF ia_value = kernel_trace_builder.op_is_static_call(clk); + Row row = create_kernel_lookup_opcode(indirect, dst_offset, ia_value, AvmMemoryTag::FF); + row.main_sel_op_is_static_call = FF(1); + + // Constrain gas cost + gas_trace_builder.constrain_gas(static_cast(row.main_clk), OpCode::GETENVVAR_16); main_trace.push_back(row); } @@ -1338,7 +1415,7 @@ void AvmTraceBuilder::op_chain_id(uint8_t indirect, uint32_t dst_offset) row.main_sel_op_chain_id = FF(1); // Constrain gas cost - gas_trace_builder.constrain_gas(static_cast(row.main_clk), OpCode::CHAINID); + gas_trace_builder.constrain_gas(static_cast(row.main_clk), OpCode::GETENVVAR_16); main_trace.push_back(row); } @@ -1351,7 +1428,7 @@ void AvmTraceBuilder::op_version(uint8_t indirect, uint32_t dst_offset) row.main_sel_op_version = FF(1); // Constrain gas cost - gas_trace_builder.constrain_gas(static_cast(row.main_clk), OpCode::VERSION); + gas_trace_builder.constrain_gas(static_cast(row.main_clk), OpCode::GETENVVAR_16); main_trace.push_back(row); } @@ -1364,7 +1441,7 @@ void AvmTraceBuilder::op_block_number(uint8_t indirect, uint32_t dst_offset) row.main_sel_op_block_number = FF(1); // Constrain gas cost - gas_trace_builder.constrain_gas(static_cast(row.main_clk), OpCode::BLOCKNUMBER); + gas_trace_builder.constrain_gas(static_cast(row.main_clk), OpCode::GETENVVAR_16); main_trace.push_back(row); } @@ -1377,7 +1454,7 @@ void AvmTraceBuilder::op_timestamp(uint8_t indirect, uint32_t dst_offset) row.main_sel_op_timestamp = FF(1); // Constrain gas cost - gas_trace_builder.constrain_gas(static_cast(row.main_clk), OpCode::TIMESTAMP); + gas_trace_builder.constrain_gas(static_cast(row.main_clk), OpCode::GETENVVAR_16); main_trace.push_back(row); } @@ -1390,7 +1467,7 @@ void AvmTraceBuilder::op_fee_per_l2_gas(uint8_t indirect, uint32_t dst_offset) row.main_sel_op_fee_per_l2_gas = FF(1); // Constrain gas cost - gas_trace_builder.constrain_gas(static_cast(row.main_clk), OpCode::FEEPERL2GAS); + gas_trace_builder.constrain_gas(static_cast(row.main_clk), OpCode::GETENVVAR_16); main_trace.push_back(row); } @@ -1403,7 +1480,7 @@ void AvmTraceBuilder::op_fee_per_da_gas(uint8_t indirect, uint32_t dst_offset) row.main_sel_op_fee_per_da_gas = FF(1); // Constrain gas cost - gas_trace_builder.constrain_gas(static_cast(row.main_clk), OpCode::FEEPERDAGAS); + gas_trace_builder.constrain_gas(static_cast(row.main_clk), OpCode::GETENVVAR_16); main_trace.push_back(row); } @@ -1493,20 +1570,20 @@ void AvmTraceBuilder::op_calldata_copy(uint8_t indirect, **************************************************************************************************/ // Helper for "gas left" related opcodes -void AvmTraceBuilder::execute_gasleft(OpCode opcode, uint8_t indirect, uint32_t dst_offset) +void AvmTraceBuilder::execute_gasleft(EnvironmentVariable var, uint8_t indirect, uint32_t dst_offset) { - assert(opcode == OpCode::L2GASLEFT || opcode == OpCode::DAGASLEFT); + assert(var == EnvironmentVariable::L2GASLEFT || var == EnvironmentVariable::DAGASLEFT); auto clk = static_cast(main_trace.size()) + 1; auto [resolved_dst] = unpack_indirects<1>(indirect, { dst_offset }); // Constrain gas cost - gas_trace_builder.constrain_gas(clk, opcode); + gas_trace_builder.constrain_gas(clk, OpCode::GETENVVAR_16); uint32_t gas_remaining = 0; - if (opcode == OpCode::L2GASLEFT) { + if (var == EnvironmentVariable::L2GASLEFT) { gas_remaining = gas_trace_builder.get_l2_gas_left(); } else { gas_remaining = gas_trace_builder.get_da_gas_left(); @@ -1528,8 +1605,8 @@ void AvmTraceBuilder::execute_gasleft(OpCode opcode, uint8_t indirect, uint32_t .main_r_in_tag = FF(static_cast(AvmMemoryTag::U0)), .main_rwa = FF(1), .main_sel_mem_op_a = FF(1), - .main_sel_op_dagasleft = (opcode == OpCode::DAGASLEFT) ? FF(1) : FF(0), - .main_sel_op_l2gasleft = (opcode == OpCode::L2GASLEFT) ? FF(1) : FF(0), + .main_sel_op_dagasleft = (var == EnvironmentVariable::DAGASLEFT) ? FF(1) : FF(0), + .main_sel_op_l2gasleft = (var == EnvironmentVariable::L2GASLEFT) ? FF(1) : FF(0), .main_sel_resolve_ind_addr_a = FF(static_cast(is_operand_indirect(indirect, 0))), .main_tag_err = FF(static_cast(!write_dst.tag_match)), .main_w_in_tag = FF(static_cast(AvmMemoryTag::FF)), // TODO: probably will be U32 in final version @@ -1539,12 +1616,12 @@ void AvmTraceBuilder::execute_gasleft(OpCode opcode, uint8_t indirect, uint32_t void AvmTraceBuilder::op_l2gasleft(uint8_t indirect, uint32_t dst_offset) { - execute_gasleft(OpCode::L2GASLEFT, indirect, dst_offset); + execute_gasleft(EnvironmentVariable::L2GASLEFT, indirect, dst_offset); } void AvmTraceBuilder::op_dagasleft(uint8_t indirect, uint32_t dst_offset) { - execute_gasleft(OpCode::DAGASLEFT, indirect, dst_offset); + execute_gasleft(EnvironmentVariable::DAGASLEFT, indirect, dst_offset); } /************************************************************************************************** @@ -2060,10 +2137,10 @@ Row AvmTraceBuilder::create_kernel_output_opcode_with_set_metadata_output_from_h auto [resolved_data, resolved_metadata] = unpack_indirects<2>(indirect, { data_offset, metadata_offset }); auto read_a = constrained_read_from_memory( - call_ptr, clk, resolved_data, AvmMemoryTag::FF, AvmMemoryTag::U8, IntermRegister::IA); + call_ptr, clk, resolved_data, AvmMemoryTag::FF, AvmMemoryTag::U1, IntermRegister::IA); auto write_b = constrained_write_to_memory( - call_ptr, clk, resolved_metadata, exists, AvmMemoryTag::FF, AvmMemoryTag::U8, IntermRegister::IB); + call_ptr, clk, resolved_metadata, exists, AvmMemoryTag::FF, AvmMemoryTag::U1, IntermRegister::IB); bool tag_match = read_a.tag_match && write_b.tag_match; return Row{ @@ -2085,7 +2162,7 @@ Row AvmTraceBuilder::create_kernel_output_opcode_with_set_metadata_output_from_h .main_sel_resolve_ind_addr_a = FF(static_cast(read_a.is_indirect)), .main_sel_resolve_ind_addr_b = FF(static_cast(write_b.is_indirect)), .main_tag_err = static_cast(!tag_match), - .main_w_in_tag = static_cast(AvmMemoryTag::U8), + .main_w_in_tag = static_cast(AvmMemoryTag::U1), }; } @@ -2098,10 +2175,10 @@ Row AvmTraceBuilder::create_kernel_output_opcode_for_leaf_index( auto [resolved_data, resolved_metadata] = unpack_indirects<2>(indirect, { data_offset, metadata_offset }); auto read_a = constrained_read_from_memory( - call_ptr, clk, resolved_data, AvmMemoryTag::FF, AvmMemoryTag::U8, IntermRegister::IA); + call_ptr, clk, resolved_data, AvmMemoryTag::FF, AvmMemoryTag::U1, IntermRegister::IA); auto write_b = constrained_write_to_memory( - call_ptr, clk, resolved_metadata, exists, AvmMemoryTag::FF, AvmMemoryTag::U8, IntermRegister::IB); + call_ptr, clk, resolved_metadata, exists, AvmMemoryTag::FF, AvmMemoryTag::U1, IntermRegister::IB); bool tag_match = read_a.tag_match && write_b.tag_match; return Row{ @@ -2123,7 +2200,7 @@ Row AvmTraceBuilder::create_kernel_output_opcode_for_leaf_index( .main_sel_resolve_ind_addr_a = FF(static_cast(read_a.is_indirect)), .main_sel_resolve_ind_addr_b = FF(static_cast(write_b.is_indirect)), .main_tag_err = static_cast(!tag_match), - .main_w_in_tag = static_cast(AvmMemoryTag::U8), + .main_w_in_tag = static_cast(AvmMemoryTag::U1), }; } @@ -2483,18 +2560,67 @@ void AvmTraceBuilder::op_emit_unencrypted_log(uint8_t indirect, uint32_t log_offset, [[maybe_unused]] uint32_t log_size_offset) { + std::vector bytes_to_hash; + auto const clk = static_cast(main_trace.size()) + 1; // FIXME: read (and constrain) log_size_offset auto [resolved_log_offset, resolved_log_size_offset] = unpack_indirects<2>(indirect, { log_offset, log_size_offset }); - auto log_size = unconstrained_read_from_memory(resolved_log_size_offset); - // FIXME: we need to constrain the log_size_offset mem read (and tag check), not just one field! - // FIXME: we shouldn't pass resolved_log_offset.offset; we should modify create_kernel_output_opcode to take an - // addresswithmode. - Row row = create_kernel_output_opcode(indirect, clk, resolved_log_offset.offset); - kernel_trace_builder.op_emit_unencrypted_log(clk, side_effect_counter, row.main_ia); + FF contract_address = std::get<0>(kernel_trace_builder.public_inputs)[ADDRESS_SELECTOR]; + std::vector contract_address_bytes = contract_address.to_buffer(); + + // Unencrypted logs are hashed with sha256 and truncated to 31 bytes - and then padded back to 32 bytes + bytes_to_hash.insert(bytes_to_hash.end(), + std::make_move_iterator(contract_address_bytes.begin()), + std::make_move_iterator(contract_address_bytes.end())); + + uint32_t log_size = static_cast(unconstrained_read_from_memory(resolved_log_size_offset)); + // The size is in fields of 32 bytes, the length used for the hash is in terms of bytes + uint32_t num_bytes = log_size * 32; + std::vector log_size_bytes = to_buffer(num_bytes); + // Add the log size to the hash to bytes + bytes_to_hash.insert(bytes_to_hash.end(), + std::make_move_iterator(log_size_bytes.begin()), + std::make_move_iterator(log_size_bytes.end())); + + // Load the log values from memory + // This first read might be indirect which subsequent reads should not be + FF initial_direct_addr = resolved_log_offset.mode == AddressingMode::DIRECT + ? resolved_log_offset.offset + : unconstrained_read_from_memory(resolved_log_offset.offset); + + AddressWithMode direct_field_addr = AddressWithMode(static_cast(initial_direct_addr)); + // We need to read the rest of the log_size number of elements + std::vector log_value_bytes; + for (uint32_t i = 0; i < log_size; i++) { + FF log_value = unconstrained_read_from_memory(direct_field_addr + i); + std::vector log_value_byte = log_value.to_buffer(); + bytes_to_hash.insert(bytes_to_hash.end(), + std::make_move_iterator(log_value_byte.begin()), + std::make_move_iterator(log_value_byte.end())); + } + + std::array output = crypto::sha256(bytes_to_hash); + // Truncate the hash to 31 bytes so it will be a valid field element + FF trunc_hash = FF(from_buffer(output.data()) >> 8); + + // The + 32 here is for the contract_address in bytes, the +4 is for the extra 4 bytes that contain log_size and is + // prefixed to message see toBuffer in unencrypted_l2_log.ts + FF length_of_preimage = num_bytes + 32 + 4; + // The + 4 is because the kernels store the length of the + // processed log as 4 bytes; thus for this length value to match the log length stored in the kernels, we need to + // add four to the length here. [Copied from unencrypted_l2_log.ts] + FF metadata_log_length = length_of_preimage + 4; + Row row = Row{ + .main_clk = clk, + .main_ia = trunc_hash, + .main_ib = metadata_log_length, + .main_internal_return_ptr = internal_return_ptr, + .main_pc = pc++, + }; + kernel_trace_builder.op_emit_unencrypted_log(clk, side_effect_counter, trunc_hash, metadata_log_length); row.main_sel_op_emit_unencrypted_log = FF(1); // Constrain gas cost @@ -2529,34 +2655,19 @@ void AvmTraceBuilder::op_emit_l2_to_l1_msg(uint8_t indirect, uint32_t recipient_ * CONTROL FLOW - CONTRACT CALLS **************************************************************************************************/ -/** - * @brief External Call with direct or indirect memory access. - * - * TODO: Use the indirect later to support all the indirect accesses - * NOTE: we do not constrain this here as it's behaviour will change fully once we have a full enqueued function - * call in one vm circuit - * @param indirect byte encoding information about indirect/direct memory access. - * @param gas_offset An index in memory pointing to the first of the gas value tuple (l2Gas, daGas) - * @param addr_offset An index in memory pointing to the target contract address - * @param args_offset An index in memory pointing to the first value of the input array for the external call - * @param args_size The number of values in the input array for the external call - * @param ret_offset An index in memory pointing to where the first value of the external calls return value should - * be stored. - * @param ret_size The number of values in the return array - * @param success_offset An index in memory pointing to where the success flag (U8) of the external call should be - * stored - * @param function_selector_offset An index in memory pointing to the function selector of the external call (TEMP) - */ -void AvmTraceBuilder::op_call(uint8_t indirect, - uint32_t gas_offset, - uint32_t addr_offset, - uint32_t args_offset, - uint32_t args_size_offset, - uint32_t ret_offset, - uint32_t ret_size, - uint32_t success_offset, - [[maybe_unused]] uint32_t function_selector_offset) -{ +// Helper/implementation for CALL and STATICCALL +void AvmTraceBuilder::constrain_external_call(OpCode opcode, + uint8_t indirect, + uint32_t gas_offset, + uint32_t addr_offset, + uint32_t args_offset, + uint32_t args_size_offset, + uint32_t ret_offset, + uint32_t ret_size, + uint32_t success_offset, + [[maybe_unused]] uint32_t function_selector_offset) +{ + ASSERT(opcode == OpCode::CALL || opcode == OpCode::STATICCALL); auto clk = static_cast(main_trace.size()) + 1; const ExternalCallHint& hint = execution_hints.externalcall_hints.at(external_call_counter); @@ -2583,12 +2694,12 @@ void AvmTraceBuilder::op_call(uint8_t indirect, // TODO: constrain this auto args_size = static_cast(unconstrained_read_from_memory(resolved_args_size_offset)); - gas_trace_builder.constrain_gas_for_external_call(clk, - /*dyn_gas_multiplier=*/args_size + ret_size, - static_cast(hint.l2_gas_used), - static_cast(hint.da_gas_used)); + gas_trace_builder.constrain_gas(clk, + opcode, + /*dyn_gas_multiplier=*/args_size + ret_size, + static_cast(hint.l2_gas_used), + static_cast(hint.da_gas_used)); - // We read the input and output addresses in one row as they should contain FF elements main_trace.push_back(Row{ .main_clk = clk, .main_ia = read_gas_l2.val, /* gas_offset_l2 */ @@ -2609,7 +2720,8 @@ void AvmTraceBuilder::op_call(uint8_t indirect, .main_sel_mem_op_b = FF(1), .main_sel_mem_op_c = FF(1), .main_sel_mem_op_d = FF(1), - .main_sel_op_external_call = FF(1), + .main_sel_op_external_call = static_cast(opcode == OpCode::CALL), + .main_sel_op_static_call = static_cast(opcode == OpCode::STATICCALL), .main_sel_resolve_ind_addr_a = FF(static_cast(read_gas_l2.is_indirect)), .main_sel_resolve_ind_addr_c = FF(static_cast(read_addr.is_indirect)), .main_sel_resolve_ind_addr_d = FF(static_cast(read_args.is_indirect)), @@ -2621,11 +2733,91 @@ void AvmTraceBuilder::op_call(uint8_t indirect, // Write the return data to memory write_slice_to_memory(resolved_ret_offset, AvmMemoryTag::FF, hint.return_data); // Write the success flag to memory - write_slice_to_memory(resolved_success_offset, AvmMemoryTag::U8, std::vector{ hint.success }); + write_slice_to_memory(resolved_success_offset, AvmMemoryTag::U1, std::vector{ hint.success }); external_call_counter++; - // Adjust the side_effect_counter to the value at the end of the external call. - side_effect_counter = static_cast(hint.end_side_effect_counter); + // Adjust the side_effect_counter to the value at the end of the external call but not static call. + if (opcode == OpCode::CALL) { + side_effect_counter = static_cast(hint.end_side_effect_counter); + } +} + +/** + * @brief External Call with direct or indirect memory access. + * + * NOTE: we do not constrain this here as it's behaviour will change fully once we have a full enqueued function + * call in one vm circuit + * @param indirect byte encoding information about indirect/direct memory access. + * @param gas_offset An index in memory pointing to the first of the gas value tuple (l2Gas, daGas) + * @param addr_offset An index in memory pointing to the target contract address + * @param args_offset An index in memory pointing to the first value of the input array for the external call + * @param args_size The number of values in the input array for the external call + * @param ret_offset An index in memory pointing to where the first value of the external calls return value should + * be stored. + * @param ret_size The number of values in the return array + * @param success_offset An index in memory pointing to where the success flag (U1) of the external call should be + * stored + * @param function_selector_offset An index in memory pointing to the function selector of the external call (TEMP) + */ +void AvmTraceBuilder::op_call(uint8_t indirect, + uint32_t gas_offset, + uint32_t addr_offset, + uint32_t args_offset, + uint32_t args_size_offset, + uint32_t ret_offset, + uint32_t ret_size, + uint32_t success_offset, + [[maybe_unused]] uint32_t function_selector_offset) +{ + return constrain_external_call(OpCode::CALL, + indirect, + gas_offset, + addr_offset, + args_offset, + args_size_offset, + ret_offset, + ret_size, + success_offset, + function_selector_offset); +} + +/** + * @brief Static Call with direct or indirect memory access. + * + * NOTE: we do not constrain this here as it's behaviour will change fully once we have a full enqueued function + * call in one vm circuit + * @param indirect byte encoding information about indirect/direct memory access. + * @param gas_offset An index in memory pointing to the first of the gas value tuple (l2Gas, daGas) + * @param addr_offset An index in memory pointing to the target contract address + * @param args_offset An index in memory pointing to the first value of the input array for the external call + * @param args_size The number of values in the input array for the static call + * @param ret_offset An index in memory pointing to where the first value of the static call return value should + * be stored. + * @param ret_size The number of values in the return array + * @param success_offset An index in memory pointing to where the success flag (U8) of the static call should be + * stored + * @param function_selector_offset An index in memory pointing to the function selector of the external call (TEMP) + */ +void AvmTraceBuilder::op_static_call(uint8_t indirect, + uint32_t gas_offset, + uint32_t addr_offset, + uint32_t args_offset, + uint32_t args_size_offset, + uint32_t ret_offset, + uint32_t ret_size, + uint32_t success_offset, + [[maybe_unused]] uint32_t function_selector_offset) +{ + return constrain_external_call(OpCode::STATICCALL, + indirect, + gas_offset, + addr_offset, + args_offset, + args_size_offset, + ret_offset, + ret_size, + success_offset, + function_selector_offset); } /** @@ -2731,13 +2923,13 @@ void AvmTraceBuilder::op_keccak(uint8_t indirect, auto [resolved_output_offset, resolved_input_offset, resolved_input_size_offset] = unpack_indirects<3>(indirect, { output_offset, input_offset, input_size_offset }); - // Constrain gas cost - gas_trace_builder.constrain_gas(clk, OpCode::KECCAK); - // Read the input length first auto input_length_read = constrained_read_from_memory( call_ptr, clk, resolved_input_size_offset, AvmMemoryTag::U32, AvmMemoryTag::U0, IntermRegister::IB); + // Constrain gas cost + gas_trace_builder.constrain_gas(clk, OpCode::KECCAK, static_cast(input_length_read.val)); + // Store the clock time that we will use to line up the gadget later auto keccak_op_clk = clk; main_trace.push_back(Row{ @@ -2904,61 +3096,6 @@ void AvmTraceBuilder::op_poseidon2_permutation(uint8_t indirect, uint32_t input_ AvmMemTraceBuilder::POSEIDON2); } -/** - * @brief SHA256 Hash with direct or indirect memory access. - * This function is temporary until we have transitioned to sha256Compression - * @param indirect byte encoding information about indirect/direct memory access. - * @param output_offset An index in memory pointing to where the first U32 value of the output array should be - * stored. - * @param input_offset An index in memory pointing to the first U8 value of the state array to be used in the next - * instance of sha256. - * @param input_size_offset An index in memory pointing to the U32 value of the input size. - */ -void AvmTraceBuilder::op_sha256(uint8_t indirect, - uint32_t output_offset, - uint32_t input_offset, - uint32_t input_size_offset) -{ - auto clk = static_cast(main_trace.size()) + 1; - auto [resolved_output_offset, resolved_input_offset, resolved_input_size_offset] = - unpack_indirects<3>(indirect, { output_offset, input_offset, input_size_offset }); - - gas_trace_builder.constrain_gas(clk, OpCode::SHA256); - - auto input_length_read = constrained_read_from_memory( - call_ptr, clk, resolved_input_size_offset, AvmMemoryTag::U32, AvmMemoryTag::U0, IntermRegister::IB); - - // Store the clock time that we will use to line up the gadget later - auto sha256_op_clk = clk; - main_trace.push_back(Row{ - .main_clk = clk, - .main_ib = input_length_read.val, // Message Length - .main_ind_addr_b = FF(input_length_read.indirect_address), - .main_internal_return_ptr = FF(internal_return_ptr), - .main_mem_addr_b = FF(input_length_read.direct_address), - .main_pc = FF(pc++), - .main_r_in_tag = FF(static_cast(AvmMemoryTag::U32)), - .main_sel_mem_op_b = FF(1), - .main_sel_op_sha256 = FF(1), - .main_sel_resolve_ind_addr_b = FF(static_cast(input_length_read.is_indirect)), - .main_tag_err = FF(static_cast(!input_length_read.tag_match)), - }); - clk++; - - std::vector input; - input.reserve(uint32_t(input_length_read.val)); - read_slice_from_memory(resolved_input_offset, uint32_t(input_length_read.val), input); - - std::array result = sha256_trace_builder.sha256(input, sha256_op_clk); - - std::vector ff_result; - for (uint32_t i = 0; i < 32; i++) { - ff_result.emplace_back(result[i]); - } - // Write the result to memory after - write_slice_to_memory(resolved_output_offset, AvmMemoryTag::U8, ff_result); -} - /** * @brief Pedersen Hash with direct or indirect memory access. * @param indirect byte encoding information about indirect/direct memory access. @@ -2986,7 +3123,8 @@ void AvmTraceBuilder::op_pedersen_hash(uint8_t indirect, auto gen_ctx_read = unconstrained_read_from_memory(resolved_gen_ctx_offset); // Constrain gas cost - gas_trace_builder.constrain_gas(clk, OpCode::PEDERSEN); + // TODO(dbanks12): need tag check u32 here on input size + gas_trace_builder.constrain_gas(clk, OpCode::PEDERSEN, static_cast(input_size_read)); // We read the input and output addresses in one row as they should contain FF elements main_trace.push_back(Row{ @@ -3004,8 +3142,8 @@ void AvmTraceBuilder::op_pedersen_hash(uint8_t indirect, }); std::vector inputs; - read_slice_from_memory(resolved_input_offset, uint32_t(input_size_read), inputs); - FF output = pedersen_trace_builder.pedersen_hash(inputs, uint32_t(gen_ctx_read), clk); + read_slice_from_memory(resolved_input_offset, static_cast(input_size_read), inputs); + FF output = pedersen_trace_builder.pedersen_hash(inputs, static_cast(gen_ctx_read), clk); write_slice_to_memory(resolved_output_offset, AvmMemoryTag::FF, std::vector{ output }); } @@ -3148,7 +3286,9 @@ void AvmTraceBuilder::op_variable_msm(uint8_t indirect, .main_tag_err = FF(0), }); - gas_trace_builder.constrain_gas(clk, OpCode::MSM); + // TODO(dbanks12): length needs to fit into u32 here or it will certainly + // run out of gas. Casting/truncating here is not secure. + gas_trace_builder.constrain_gas(clk, OpCode::MSM, static_cast(points_length)); // Write the result back to memory [x, y, inf] with tags [FF, FF, U8] AddressWithMode output_offset_direct = @@ -3186,7 +3326,9 @@ void AvmTraceBuilder::op_pedersen_commit(uint8_t indirect, .main_tag_err = FF(0), }); - gas_trace_builder.constrain_gas(clk, OpCode::PEDERSENCOMMITMENT); + // TODO(dbanks12): length needs to fit into u32 here or it will certainly + // run out of gas. Casting/truncating here is not secure. + gas_trace_builder.constrain_gas(clk, OpCode::PEDERSENCOMMITMENT, static_cast(input_length_read)); // Write the result back to memory [x, y, inf] with tags [FF, FF, U8] AddressWithMode output_offset_direct = @@ -3208,28 +3350,47 @@ void AvmTraceBuilder::op_pedersen_commit(uint8_t indirect, * @param indirect A byte encoding information about indirect/direct memory access. * @param src_offset An index in memory pointing to the input of the To_Radix_LE conversion. * @param dst_offset An index in memory pointing to the output of the To_Radix_LE conversion. - * @param radix A strict upper bound of each converted limb, i.e., 0 <= limb < radix. + * @param radix_offset An index in memory pointing to the strict upper bound of each converted limb, i.e., 0 <= limb < + * radix. * @param num_limbs The number of limbs to the value into. + * @param output_bits Should the output be U1s instead of U8s? */ -void AvmTraceBuilder::op_to_radix_le( - uint8_t indirect, uint32_t src_offset, uint32_t dst_offset, uint32_t radix, uint32_t num_limbs) +void AvmTraceBuilder::op_to_radix_le(uint8_t indirect, + uint32_t src_offset, + uint32_t dst_offset, + uint32_t radix_offset, + uint32_t num_limbs, + uint8_t output_bits) { auto clk = static_cast(main_trace.size()) + 1; - auto [resolved_src_offset, resolved_dst_offset] = unpack_indirects<2>(indirect, { src_offset, dst_offset }); - auto read_src = constrained_read_from_memory( - call_ptr, clk, resolved_src_offset, AvmMemoryTag::FF, AvmMemoryTag::U8, IntermRegister::IA); + // write output as bits or bytes + AvmMemoryTag w_in_tag = output_bits > 0 ? AvmMemoryTag::U1 // bits mode + : AvmMemoryTag::U8; - auto read_dst = constrained_read_from_memory( - call_ptr, clk, resolved_dst_offset, AvmMemoryTag::FF, AvmMemoryTag::U8, IntermRegister::IB); + auto [resolved_src_offset, resolved_dst_offset, resolved_radix_offset] = + unpack_indirects<3>(indirect, { src_offset, dst_offset, radix_offset }); + + auto read_src = constrained_read_from_memory( + call_ptr, clk, resolved_src_offset, AvmMemoryTag::FF, w_in_tag, IntermRegister::IA); + // TODO:(8603): once instructions can have multiple different tags for reads, constrain the radix's read + // auto read_radix = constrained_read_from_memory( + // call_ptr, clk, resolved_radix_offset, AvmMemoryTag::U32, AvmMemoryTag::U32, IntermRegister::IB); + auto read_radix = unconstrained_read_from_memory(resolved_radix_offset); FF input = read_src.val; + // TODO:(8603): uncomment + // uint32_t radix = static_cast(read_radix.val); + uint32_t radix = static_cast(read_radix); - // In case of a memory tag error, we do not perform the computation. - // Therefore, we do not create any entry in gadget table and return a vector of 0 - std::vector res = read_src.tag_match - ? conversion_trace_builder.op_to_radix_le(input, radix, num_limbs, clk) - : std::vector(num_limbs, 0); + bool radix_out_of_bounds = radix > 256; + bool error = radix_out_of_bounds || !read_src.tag_match; // || !read_radix.tag_match; + + // In case of an error, we do not perform the computation. + // Therefore, we do not create any entry in gadget table and we return a vector of 0. + std::vector res = error + ? std::vector(num_limbs, 0) + : conversion_trace_builder.op_to_radix_le(input, radix, num_limbs, output_bits, clk); // Constrain gas cost gas_trace_builder.constrain_gas(clk, OpCode::TORADIXLE, num_limbs); @@ -3240,25 +3401,30 @@ void AvmTraceBuilder::op_to_radix_le( .main_clk = clk, .main_call_ptr = call_ptr, .main_ia = input, - .main_ib = read_dst.val, - .main_ic = radix, - .main_id = num_limbs, + .main_ib = radix, + .main_ic = num_limbs, + .main_id = output_bits, .main_ind_addr_a = read_src.indirect_address, - .main_ind_addr_b = read_dst.indirect_address, + // TODO:(8603): uncomment + //.main_ind_addr_b = read_radix.indirect_address, .main_internal_return_ptr = FF(internal_return_ptr), .main_mem_addr_a = read_src.direct_address, - .main_mem_addr_b = read_dst.direct_address, + // TODO:(8603): uncomment + //.main_mem_addr_b = read_radix.direct_address, + .main_op_err = error ? FF(1) : FF(0), .main_pc = FF(pc++), .main_r_in_tag = FF(static_cast(AvmMemoryTag::FF)), .main_sel_mem_op_a = FF(1), - .main_sel_mem_op_b = FF(1), + // TODO:(8603): uncomment + //.main_sel_mem_op_b = FF(1), .main_sel_op_radix_le = FF(1), .main_sel_resolve_ind_addr_a = FF(static_cast(read_src.is_indirect)), - .main_sel_resolve_ind_addr_b = FF(static_cast(read_dst.is_indirect)), - .main_w_in_tag = FF(static_cast(AvmMemoryTag::U8)), + // TODO:(8603): uncomment + //.main_sel_resolve_ind_addr_b = FF(static_cast(read_radix.is_indirect)), + .main_w_in_tag = FF(static_cast(w_in_tag)), }); - write_slice_to_memory(resolved_dst_offset, AvmMemoryTag::U8, res); + write_slice_to_memory(resolved_dst_offset, w_in_tag, res); } /************************************************************************************************** @@ -3269,7 +3435,7 @@ void AvmTraceBuilder::op_to_radix_le( * @brief SHA256 Compression with direct or indirect memory access. * * @param indirect byte encoding information about indirect/direct memory access. - * @param h_init_offset An index in memory pointing to the first U32 value of the state array to be used in the next + * @param state_offset An index in memory pointing to the first U32 value of the state array to be used in the next * instance of sha256 compression. * @param input_offset An index in memory pointing to the first U32 value of the input array to be used in the next * instance of sha256 compression. @@ -3278,21 +3444,28 @@ void AvmTraceBuilder::op_to_radix_le( */ void AvmTraceBuilder::op_sha256_compression(uint8_t indirect, uint32_t output_offset, - uint32_t h_init_offset, - uint32_t input_offset) + uint32_t state_offset, + uint32_t state_size_offset, + uint32_t inputs_offset, + uint32_t inputs_size_offset) { // The clk plays a crucial role in this function as we attempt to write across multiple lines in the main trace. auto clk = static_cast(main_trace.size()) + 1; // Resolve the indirect flags, the results of this function are used to determine the memory offsets // that point to the starting memory addresses for the input and output values. - auto [resolved_h_init_offset, resolved_input_offset, resolved_output_offset] = - unpack_indirects<3>(indirect, { h_init_offset, input_offset, output_offset }); + auto [resolved_output_offset, + resolved_state_offset, + resolved_state_size_offset, + resolved_inputs_offset, + resolved_inputs_size_offset] = + unpack_indirects<5>(indirect, + { output_offset, state_offset, state_size_offset, inputs_offset, inputs_size_offset }); auto read_a = constrained_read_from_memory( - call_ptr, clk, resolved_h_init_offset, AvmMemoryTag::U32, AvmMemoryTag::U0, IntermRegister::IA); + call_ptr, clk, resolved_state_offset, AvmMemoryTag::U32, AvmMemoryTag::U0, IntermRegister::IA); auto read_b = constrained_read_from_memory( - call_ptr, clk, resolved_input_offset, AvmMemoryTag::U32, AvmMemoryTag::U0, IntermRegister::IB); + call_ptr, clk, resolved_inputs_offset, AvmMemoryTag::U32, AvmMemoryTag::U0, IntermRegister::IB); bool tag_match = read_a.tag_match && read_b.tag_match; // Constrain gas cost @@ -3334,9 +3507,9 @@ void AvmTraceBuilder::op_sha256_compression(uint8_t indirect, // Input for hash is expanded to 512 bits std::vector input_vec; // Read results are written to h_init array. - read_slice_from_memory(resolved_h_init_offset, 8, h_init_vec); + read_slice_from_memory(resolved_state_offset, 8, h_init_vec); // Read results are written to input array - read_slice_from_memory(resolved_input_offset, 16, input_vec); + read_slice_from_memory(resolved_inputs_offset, 16, input_vec); // Now that we have read all the values, we can perform the operation to get the resulting witness. // Note: We use the sha_op_clk to ensure that the sha256 operation is performed at the same clock cycle as the @@ -3431,8 +3604,11 @@ void AvmTraceBuilder::op_keccakf1600(uint8_t indirect, * * @return The main trace */ -std::vector AvmTraceBuilder::finalize(bool range_check_required) +std::vector AvmTraceBuilder::finalize() { + vinfo("range_check_required: ", range_check_required); + vinfo("full_precomputed_tables: ", full_precomputed_tables); + auto mem_trace = mem_trace_builder.finalize(); auto conv_trace = conversion_trace_builder.finalize(); auto sha256_trace = sha256_trace_builder.finalize(); @@ -3452,15 +3628,16 @@ std::vector AvmTraceBuilder::finalize(bool range_check_required) size_t bin_trace_size = bin_trace_builder.size(); size_t gas_trace_size = gas_trace_builder.size(); size_t slice_trace_size = slice_trace.size(); + size_t kernel_trace_size = kernel_trace_builder.size(); // Range check size is 1 less than it needs to be since we insert a "first row" at the top of the trace at the // end, with clk 0 (this doubles as our range check) size_t const range_check_size = range_check_required ? UINT16_MAX : 0; - std::vector trace_sizes = { mem_trace_size, main_trace_size + 1, alu_trace_size, - range_check_size, conv_trace_size, sha256_trace_size, - poseidon2_trace_size, pedersen_trace_size, gas_trace_size + 1, - KERNEL_INPUTS_LENGTH, KERNEL_OUTPUTS_LENGTH, fixed_gas_table.size(), - slice_trace_size, calldata.size() }; + std::vector trace_sizes = { mem_trace_size, main_trace_size + 1, alu_trace_size, + range_check_size, conv_trace_size, sha256_trace_size, + poseidon2_trace_size, pedersen_trace_size, gas_trace_size + 1, + KERNEL_INPUTS_LENGTH, KERNEL_OUTPUTS_LENGTH, kernel_trace_size, + fixed_gas_table.size(), slice_trace_size, calldata.size() }; auto trace_size = std::max_element(trace_sizes.begin(), trace_sizes.end()); // Before making any changes to the main trace, mark the real rows. @@ -3623,6 +3800,7 @@ std::vector AvmTraceBuilder::finalize(bool range_check_required) dest.conversion_input = src.input; dest.conversion_radix = FF(src.radix); dest.conversion_num_limbs = FF(src.num_limbs); + dest.conversion_output_bits = FF(src.output_bits); } // Add SHA256 Gadget table @@ -3710,7 +3888,7 @@ std::vector AvmTraceBuilder::finalize(bool range_check_required) **********************************************************************************************/ // Only generate precomputed byte tables if we are actually going to use them in this main trace. - if (bin_trace_size > 0) { + if (bin_trace_size > 0 || full_precomputed_tables) { if (!range_check_required) { FixedBytesTable::get().finalize_for_testing(main_trace, bin_trace_builder.byte_operation_counter); bin_trace_builder.finalize_lookups_for_testing(main_trace); @@ -3867,7 +4045,17 @@ std::vector AvmTraceBuilder::finalize(bool range_check_required) "\n\trange_check_trace_size: ", range_entries.size(), "\n\tcmp_trace_size: ", - cmp_trace_size); + cmp_trace_size, + "\n\tkeccak_trace_size: ", + keccak_trace_size, + "\n\tkernel_trace_size: ", + kernel_trace_size, + "\n\tKERNEL_INPUTS_LENGTH: ", + KERNEL_INPUTS_LENGTH, + "\n\tKERNEL_OUTPUTS_LENGTH: ", + KERNEL_OUTPUTS_LENGTH, + "\n\tcalldata_size: ", + calldata.size()); reset(); return trace; @@ -3880,6 +4068,7 @@ std::vector AvmTraceBuilder::finalize(bool range_check_required) void AvmTraceBuilder::reset() { main_trace.clear(); + main_trace.shrink_to_fit(); // Reclaim memory. mem_trace_builder.reset(); alu_trace_builder.reset(); bin_trace_builder.reset(); diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.hpp index 873d58210db..a9a1ee74476 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.hpp @@ -75,7 +75,7 @@ class AvmTraceBuilder { void op_and(uint8_t indirect, uint32_t a_offset, uint32_t b_offset, uint32_t dst_offset, AvmMemoryTag in_tag); void op_or(uint8_t indirect, uint32_t a_offset, uint32_t b_offset, uint32_t dst_offset, AvmMemoryTag in_tag); void op_xor(uint8_t indirect, uint32_t a_offset, uint32_t b_offset, uint32_t dst_offset, AvmMemoryTag in_tag); - void op_not(uint8_t indirect, uint32_t a_offset, uint32_t dst_offset, AvmMemoryTag in_tag); + void op_not(uint8_t indirect, uint32_t a_offset, uint32_t dst_offset); void op_shl(uint8_t indirect, uint32_t a_offset, uint32_t b_offset, uint32_t dst_offset, AvmMemoryTag in_tag); void op_shr(uint8_t indirect, uint32_t a_offset, uint32_t b_offset, uint32_t dst_offset, AvmMemoryTag in_tag); @@ -83,11 +83,13 @@ class AvmTraceBuilder { void op_cast(uint8_t indirect, uint32_t a_offset, uint32_t dst_offset, AvmMemoryTag dst_tag); // Execution Environment + void op_get_env_var(uint8_t indirect, uint8_t env_var, uint32_t dst_offset); void op_address(uint8_t indirect, uint32_t dst_offset); void op_storage_address(uint8_t indirect, uint32_t dst_offset); void op_sender(uint8_t indirect, uint32_t dst_offset); void op_function_selector(uint8_t indirect, uint32_t dst_offset); void op_transaction_fee(uint8_t indirect, uint32_t dst_offset); + void op_is_static_call(uint8_t indirect, uint32_t dst_offset); // Execution Environment - Globals void op_chain_id(uint8_t indirect, uint32_t dst_offset); @@ -146,6 +148,15 @@ class AvmTraceBuilder { uint32_t ret_size, uint32_t success_offset, uint32_t function_selector_offset); + void op_static_call(uint8_t indirect, + uint32_t gas_offset, + uint32_t addr_offset, + uint32_t args_offset, + uint32_t args_size, + uint32_t ret_offset, + uint32_t ret_size, + uint32_t success_offset, + uint32_t function_selector_offset); std::vector op_return(uint8_t indirect, uint32_t ret_offset, uint32_t ret_size); // REVERT Opcode (that just call return under the hood for now) std::vector op_revert(uint8_t indirect, uint32_t ret_offset, uint32_t ret_size); @@ -153,7 +164,6 @@ class AvmTraceBuilder { // Gadgets void op_keccak(uint8_t indirect, uint32_t output_offset, uint32_t input_offset, uint32_t input_size_offset); void op_poseidon2_permutation(uint8_t indirect, uint32_t input_offset, uint32_t output_offset); - void op_sha256(uint8_t indirect, uint32_t output_offset, uint32_t input_offset, uint32_t input_size_offset); void op_pedersen_hash(uint8_t indirect, uint32_t gen_ctx_offset, uint32_t output_offset, @@ -178,15 +188,37 @@ class AvmTraceBuilder { uint32_t input_size_offset, uint32_t gen_ctx_offset); // Conversions - void op_to_radix_le(uint8_t indirect, uint32_t src_offset, uint32_t dst_offset, uint32_t radix, uint32_t num_limbs); + void op_to_radix_le(uint8_t indirect, + uint32_t src_offset, + uint32_t dst_offset, + uint32_t radix_offset, + uint32_t num_limbs, + uint8_t output_bits); // Future Gadgets -- pending changes in noir - void op_sha256_compression(uint8_t indirect, uint32_t output_offset, uint32_t h_init_offset, uint32_t input_offset); + void op_sha256_compression(uint8_t indirect, + uint32_t output_offset, + uint32_t state_offset, + uint32_t state_size_offset, + uint32_t inputs_offset, + uint32_t inputs_size_offset); void op_keccakf1600(uint8_t indirect, uint32_t output_offset, uint32_t input_offset, uint32_t input_size_offset); - std::vector finalize(bool range_check_required = ENABLE_PROVING); + std::vector finalize(); void reset(); + // These are used for testing only. + AvmTraceBuilder& set_range_check_required(bool required) + { + range_check_required = required; + return *this; + } + AvmTraceBuilder& set_full_precomputed_tables(bool required) + { + full_precomputed_tables = required; + return *this; + } + struct MemOp { bool is_indirect; uint32_t indirect_address; @@ -203,9 +235,13 @@ class AvmTraceBuilder { std::vector returndata; // Side effect counter will increment when any state writing values are encountered. uint32_t side_effect_counter = 0; - uint32_t external_call_counter = 0; + uint32_t external_call_counter = 0; // Incremented both by OpCode::CALL and OpCode::STATICCALL ExecutionHints execution_hints; + // These exist due to testing only. + bool range_check_required = true; + bool full_precomputed_tables = true; + AvmMemTraceBuilder mem_trace_builder; AvmAluTraceBuilder alu_trace_builder; AvmBinaryTraceBuilder bin_trace_builder; @@ -244,7 +280,18 @@ class AvmTraceBuilder { uint32_t data_offset, uint32_t metadata_offset); - void execute_gasleft(OpCode opcode, uint8_t indirect, uint32_t dst_offset); + void constrain_external_call(OpCode opcode, + uint8_t indirect, + uint32_t gas_offset, + uint32_t addr_offset, + uint32_t args_offset, + uint32_t args_size_offset, + uint32_t ret_offset, + uint32_t ret_size, + uint32_t success_offset, + [[maybe_unused]] uint32_t function_selector_offset); + + void execute_gasleft(EnvironmentVariable var, uint8_t indirect, uint32_t dst_offset); void finalise_mem_trace_lookup_counts(); @@ -270,6 +317,7 @@ class AvmTraceBuilder { AvmMemTraceBuilder::MemOpOwner mem_op_owner = AvmMemTraceBuilder::MAIN); // TODO: remove these once everything is constrained. + AvmMemoryTag unconstrained_get_memory_tag(AddressWithMode addr); FF unconstrained_read_from_memory(AddressWithMode addr); template void read_slice_from_memory(AddressWithMode addr, size_t slice_len, std::vector& slice); void write_to_memory(AddressWithMode addr, FF val, AvmMemoryTag w_tag); diff --git a/barretenberg/cpp/src/barretenberg/vm/aztec_constants.hpp b/barretenberg/cpp/src/barretenberg/vm/aztec_constants.hpp index 68c5ce65516..8c6c05e4dc6 100644 --- a/barretenberg/cpp/src/barretenberg/vm/aztec_constants.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/aztec_constants.hpp @@ -27,17 +27,27 @@ #define LOG_HASH_LENGTH 3 #define NOTE_HASH_LENGTH 2 #define NULLIFIER_LENGTH 3 -#define PUBLIC_CALL_REQUEST_LENGTH 14 +#define PUBLIC_INNER_CALL_REQUEST_LENGTH 14 #define STATE_REFERENCE_LENGTH 8 #define TOTAL_FEES_LENGTH 1 #define HEADER_LENGTH 24 #define PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH 691 #define PUBLIC_CONTEXT_INPUTS_LENGTH 42 #define AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS 66 +#define AVM_PROOF_LENGTH_IN_FIELDS 3822 +#define AVM_PUBLIC_COLUMN_MAX_SIZE_LOG2 8 +#define MEM_TAG_U1 1 +#define MEM_TAG_U8 2 +#define MEM_TAG_U16 3 +#define MEM_TAG_U32 4 +#define MEM_TAG_U64 5 +#define MEM_TAG_U128 6 +#define MEM_TAG_FF 7 #define SENDER_SELECTOR 0 #define ADDRESS_SELECTOR 1 #define STORAGE_ADDRESS_SELECTOR 1 #define FUNCTION_SELECTOR_SELECTOR 2 +#define IS_STATIC_CALL_SELECTOR 4 #define START_GLOBAL_VARIABLES 29 #define CHAIN_ID_SELECTOR 29 #define VERSION_SELECTOR 30 @@ -58,129 +68,71 @@ #define START_EMIT_NULLIFIER_WRITE_OFFSET 144 #define START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET 160 #define START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET 162 -#define AVM_DEFAULT_BASE_GAS_L2 100 -#define AVM_DEFAULT_DYN_GAS_L2 0 -#define AVM_ADD_BASE_L2_GAS 320 -#define AVM_SUB_BASE_L2_GAS 320 -#define AVM_MUL_BASE_L2_GAS 330 -#define AVM_DIV_BASE_L2_GAS 430 -#define AVM_FDIV_BASE_L2_GAS 320 -#define AVM_EQ_BASE_L2_GAS 320 -#define AVM_LT_BASE_L2_GAS 640 -#define AVM_LTE_BASE_L2_GAS 640 -#define AVM_AND_BASE_L2_GAS 330 -#define AVM_OR_BASE_L2_GAS 330 -#define AVM_XOR_BASE_L2_GAS 320 -#define AVM_NOT_BASE_L2_GAS 270 -#define AVM_SHL_BASE_L2_GAS 320 -#define AVM_SHR_BASE_L2_GAS 320 -#define AVM_CAST_BASE_L2_GAS 300 -#define AVM_ADDRESS_BASE_L2_GAS 200 -#define AVM_STORAGEADDRESS_BASE_L2_GAS 200 -#define AVM_SENDER_BASE_L2_GAS 200 -#define AVM_FUNCTIONSELECTOR_BASE_L2_GAS 200 -#define AVM_TRANSACTIONFEE_BASE_L2_GAS 200 -#define AVM_CHAINID_BASE_L2_GAS 200 -#define AVM_VERSION_BASE_L2_GAS 200 -#define AVM_BLOCKNUMBER_BASE_L2_GAS 200 -#define AVM_TIMESTAMP_BASE_L2_GAS 200 -#define AVM_FEEPERL2GAS_BASE_L2_GAS 200 -#define AVM_FEEPERDAGAS_BASE_L2_GAS 200 -#define AVM_CALLDATACOPY_BASE_L2_GAS 290 -#define AVM_L2GASLEFT_BASE_L2_GAS 180 -#define AVM_DAGASLEFT_BASE_L2_GAS 180 -#define AVM_JUMP_BASE_L2_GAS 120 -#define AVM_JUMPI_BASE_L2_GAS 180 -#define AVM_INTERNALCALL_BASE_L2_GAS 180 -#define AVM_INTERNALRETURN_BASE_L2_GAS 180 -#define AVM_SET_BASE_L2_GAS 180 -#define AVM_MOV_BASE_L2_GAS 230 -#define AVM_CMOV_BASE_L2_GAS 340 -#define AVM_SLOAD_BASE_L2_GAS 180 -#define AVM_SSTORE_BASE_L2_GAS 180 -#define AVM_NOTEHASHEXISTS_BASE_L2_GAS 260 -#define AVM_EMITNOTEHASH_BASE_L2_GAS 260 -#define AVM_NULLIFIEREXISTS_BASE_L2_GAS 260 -#define AVM_EMITNULLIFIER_BASE_L2_GAS 260 -#define AVM_L1TOL2MSGEXISTS_BASE_L2_GAS 260 -#define AVM_GETCONTRACTINSTANCE_BASE_L2_GAS 480 -#define AVM_EMITUNENCRYPTEDLOG_BASE_L2_GAS 180 -#define AVM_SENDL2TOL1MSG_BASE_L2_GAS 260 -#define AVM_CALL_BASE_L2_GAS 450 -#define AVM_STATICCALL_BASE_L2_GAS 450 -#define AVM_DELEGATECALL_BASE_L2_GAS 0 -#define AVM_RETURN_BASE_L2_GAS 140 -#define AVM_REVERT_BASE_L2_GAS 140 -#define AVM_DEBUGLOG_BASE_L2_GAS 100 +#define AVM_ADD_BASE_L2_GAS 32 +#define AVM_SUB_BASE_L2_GAS 32 +#define AVM_MUL_BASE_L2_GAS 33 +#define AVM_DIV_BASE_L2_GAS 43 +#define AVM_FDIV_BASE_L2_GAS 32 +#define AVM_EQ_BASE_L2_GAS 32 +#define AVM_LT_BASE_L2_GAS 64 +#define AVM_LTE_BASE_L2_GAS 64 +#define AVM_AND_BASE_L2_GAS 33 +#define AVM_OR_BASE_L2_GAS 33 +#define AVM_XOR_BASE_L2_GAS 33 +#define AVM_NOT_BASE_L2_GAS 27 +#define AVM_SHL_BASE_L2_GAS 32 +#define AVM_SHR_BASE_L2_GAS 32 +#define AVM_CAST_BASE_L2_GAS 30 +#define AVM_GETENVVAR_BASE_L2_GAS 20 +#define AVM_CALLDATACOPY_BASE_L2_GAS 29 +#define AVM_JUMP_BASE_L2_GAS 12 +#define AVM_JUMPI_BASE_L2_GAS 18 +#define AVM_INTERNALCALL_BASE_L2_GAS 18 +#define AVM_INTERNALRETURN_BASE_L2_GAS 18 +#define AVM_SET_BASE_L2_GAS 18 +#define AVM_MOV_BASE_L2_GAS 23 +#define AVM_CMOV_BASE_L2_GAS 34 +#define AVM_SLOAD_BASE_L2_GAS 1218 +#define AVM_SSTORE_BASE_L2_GAS 2642 +#define AVM_NOTEHASHEXISTS_BASE_L2_GAS 986 +#define AVM_EMITNOTEHASH_BASE_L2_GAS 2330 +#define AVM_NULLIFIEREXISTS_BASE_L2_GAS 1226 +#define AVM_EMITNULLIFIER_BASE_L2_GAS 2650 +#define AVM_L1TOL2MSGEXISTS_BASE_L2_GAS 506 +#define AVM_GETCONTRACTINSTANCE_BASE_L2_GAS 1248 +#define AVM_EMITUNENCRYPTEDLOG_BASE_L2_GAS 18 +#define AVM_SENDL2TOL1MSG_BASE_L2_GAS 226 +#define AVM_CALL_BASE_L2_GAS 2445 +#define AVM_STATICCALL_BASE_L2_GAS 2445 +#define AVM_DELEGATECALL_BASE_L2_GAS 2445 +#define AVM_RETURN_BASE_L2_GAS 28 +#define AVM_REVERT_BASE_L2_GAS 28 +#define AVM_DEBUGLOG_BASE_L2_GAS 10 #define AVM_KECCAK_BASE_L2_GAS 3000 -#define AVM_POSEIDON2_BASE_L2_GAS 670 -#define AVM_SHA256_BASE_L2_GAS 3000 -#define AVM_PEDERSEN_BASE_L2_GAS 3000 -#define AVM_ECADD_BASE_L2_GAS 900 -#define AVM_MSM_BASE_L2_GAS 900 -#define AVM_PEDERSENCOMMITMENT_BASE_L2_GAS 3000 -#define AVM_TORADIXLE_BASE_L2_GAS 200 -#define AVM_SHA256COMPRESSION_BASE_L2_GAS 3000 -#define AVM_KECCAKF1600_BASE_L2_GAS 3000 -#define AVM_ADD_DYN_L2_GAS 0 -#define AVM_SUB_DYN_L2_GAS 0 -#define AVM_MUL_DYN_L2_GAS 0 -#define AVM_DIV_DYN_L2_GAS 0 -#define AVM_FDIV_DYN_L2_GAS 0 -#define AVM_EQ_DYN_L2_GAS 0 -#define AVM_LT_DYN_L2_GAS 0 -#define AVM_LTE_DYN_L2_GAS 0 -#define AVM_AND_DYN_L2_GAS 0 -#define AVM_OR_DYN_L2_GAS 0 -#define AVM_XOR_DYN_L2_GAS 0 -#define AVM_NOT_DYN_L2_GAS 0 -#define AVM_SHL_DYN_L2_GAS 0 -#define AVM_SHR_DYN_L2_GAS 0 -#define AVM_CAST_DYN_L2_GAS 0 -#define AVM_ADDRESS_DYN_L2_GAS 0 -#define AVM_STORAGEADDRESS_DYN_L2_GAS 0 -#define AVM_SENDER_DYN_L2_GAS 0 -#define AVM_FUNCTIONSELECTOR_DYN_L2_GAS 0 -#define AVM_TRANSACTIONFEE_DYN_L2_GAS 0 -#define AVM_CHAINID_DYN_L2_GAS 0 -#define AVM_VERSION_DYN_L2_GAS 0 -#define AVM_BLOCKNUMBER_DYN_L2_GAS 0 -#define AVM_TIMESTAMP_DYN_L2_GAS 0 -#define AVM_FEEPERL2GAS_DYN_L2_GAS 0 -#define AVM_FEEPERDAGAS_DYN_L2_GAS 0 -#define AVM_CALLDATACOPY_DYN_L2_GAS 50 -#define AVM_L2GASLEFT_DYN_L2_GAS 0 -#define AVM_DAGASLEFT_DYN_L2_GAS 0 -#define AVM_JUMP_DYN_L2_GAS 0 -#define AVM_JUMPI_DYN_L2_GAS 0 -#define AVM_INTERNALCALL_DYN_L2_GAS 0 -#define AVM_INTERNALRETURN_DYN_L2_GAS 0 -#define AVM_SET_DYN_L2_GAS 0 -#define AVM_MOV_DYN_L2_GAS 0 -#define AVM_CMOV_DYN_L2_GAS 0 -#define AVM_SLOAD_DYN_L2_GAS 180 -#define AVM_SSTORE_DYN_L2_GAS 180 -#define AVM_NOTEHASHEXISTS_DYN_L2_GAS 0 -#define AVM_EMITNOTEHASH_DYN_L2_GAS 0 -#define AVM_NULLIFIEREXISTS_DYN_L2_GAS 0 -#define AVM_EMITNULLIFIER_DYN_L2_GAS 0 -#define AVM_L1TOL2MSGEXISTS_DYN_L2_GAS 0 -#define AVM_GETCONTRACTINSTANCE_DYN_L2_GAS 0 -#define AVM_EMITUNENCRYPTEDLOG_DYN_L2_GAS 180 -#define AVM_SENDL2TOL1MSG_DYN_L2_GAS 0 -#define AVM_CALL_DYN_L2_GAS 50 -#define AVM_STATICCALL_DYN_L2_GAS 50 -#define AVM_DELEGATECALL_DYN_L2_GAS 50 -#define AVM_RETURN_DYN_L2_GAS 50 -#define AVM_REVERT_DYN_L2_GAS 50 -#define AVM_DEBUGLOG_DYN_L2_GAS 0 -#define AVM_KECCAK_DYN_L2_GAS 0 -#define AVM_POSEIDON2_DYN_L2_GAS 0 -#define AVM_SHA256_DYN_L2_GAS 0 -#define AVM_PEDERSEN_DYN_L2_GAS 0 -#define AVM_ECADD_DYN_L2_GAS 0 -#define AVM_MSM_DYN_L2_GAS 0 -#define AVM_PEDERSENCOMMITMENT_DYN_L2_GAS 0 -#define AVM_TORADIXLE_DYN_L2_GAS 200 -#define AVM_SHA256COMPRESSION_DYN_L2_GAS 0 -#define AVM_KECCAKF1600_DYN_L2_GAS 0 +#define AVM_POSEIDON2_BASE_L2_GAS 78 +#define AVM_SHA256_BASE_L2_GAS 2610 +#define AVM_PEDERSEN_BASE_L2_GAS 1000 +#define AVM_ECADD_BASE_L2_GAS 62 +#define AVM_MSM_BASE_L2_GAS 1000 +#define AVM_PEDERSENCOMMITMENT_BASE_L2_GAS 1000 +#define AVM_TORADIXLE_BASE_L2_GAS 46 +#define AVM_SHA256COMPRESSION_BASE_L2_GAS 261 +#define AVM_KECCAKF1600_BASE_L2_GAS 300 +#define AVM_CALLDATACOPY_DYN_L2_GAS 6 +#define AVM_EMITUNENCRYPTEDLOG_DYN_L2_GAS 146 +#define AVM_CALL_DYN_L2_GAS 4 +#define AVM_STATICCALL_DYN_L2_GAS 4 +#define AVM_DELEGATECALL_DYN_L2_GAS 4 +#define AVM_RETURN_DYN_L2_GAS 6 +#define AVM_REVERT_DYN_L2_GAS 6 +#define AVM_KECCAK_DYN_L2_GAS 100 +#define AVM_SHA256_DYN_L2_GAS 100 +#define AVM_PEDERSEN_DYN_L2_GAS 100 +#define AVM_PEDERSENCOMMITMENT_DYN_L2_GAS 100 +#define AVM_MSM_DYN_L2_GAS 100 +#define AVM_TORADIXLE_DYN_L2_GAS 20 +#define AVM_SSTORE_BASE_DA_GAS 512 +#define AVM_EMITNOTEHASH_BASE_DA_GAS 512 +#define AVM_EMITNULLIFIER_BASE_DA_GAS 512 +#define AVM_SENDL2TOL1MSG_BASE_DA_GAS 512 +#define AVM_EMITUNENCRYPTEDLOG_DYN_DA_GAS 512 diff --git a/barretenberg/cpp/src/barretenberg/vm/constants.hpp b/barretenberg/cpp/src/barretenberg/vm/constants.hpp index c7024d89587..aedd9cb3215 100644 --- a/barretenberg/cpp/src/barretenberg/vm/constants.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/constants.hpp @@ -59,7 +59,7 @@ inline const uint32_t PCPI_PUBLIC_CALLSTACK_OFFSET = PCPI_PUBLIC_DATA_READ_OFFSET + (MAX_PUBLIC_DATA_READS_PER_CALL * CONTRACT_STORAGE_READ_LENGTH); inline const uint32_t PCPI_NEW_NOTE_HASHES_OFFSET = - PCPI_PUBLIC_CALLSTACK_OFFSET + (MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL * PUBLIC_CALL_REQUEST_LENGTH); + PCPI_PUBLIC_CALLSTACK_OFFSET + (MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL * PUBLIC_INNER_CALL_REQUEST_LENGTH); inline const uint32_t PCPI_NEW_NULLIFIERS_OFFSET = PCPI_NEW_NOTE_HASHES_OFFSET + (MAX_NOTE_HASHES_PER_CALL * NOTE_HASH_LENGTH); @@ -71,7 +71,11 @@ inline const uint32_t PCPI_NEW_L2_TO_L1_MSGS_OFFSET = inline const uint32_t PCPI_START_SIDE_EFFECT_COUNTER_OFFSET = PCPI_NEW_L2_TO_L1_MSGS_OFFSET + (MAX_L2_TO_L1_MSGS_PER_CALL * L2_TO_L1_MESSAGE_LENGTH); -inline const uint32_t PCPI_NEW_UNENCRYPTED_LOGS_OFFSET = PCPI_START_SIDE_EFFECT_COUNTER_OFFSET + /*1 item gap*/ 1; +// The +2 here is because the order is +// START_SIDE_EFFECT_COUNTER +// END_SIDE_EFFECT_COUNTER -> + 1 +// NEW_UNENCRYPTED_LOGS -> + 2 +inline const uint32_t PCPI_NEW_UNENCRYPTED_LOGS_OFFSET = PCPI_START_SIDE_EFFECT_COUNTER_OFFSET + 2; // END INDEXES in the PUBLIC_CIRCUIT_PUBLIC_INPUTS diff --git a/barretenberg/cpp/src/barretenberg/world_state/world_state.cpp b/barretenberg/cpp/src/barretenberg/world_state/world_state.cpp index 307c99cb980..4a093e5067d 100644 --- a/barretenberg/cpp/src/barretenberg/world_state/world_state.cpp +++ b/barretenberg/cpp/src/barretenberg/world_state/world_state.cpp @@ -9,6 +9,7 @@ #include "barretenberg/world_state/tree_with_store.hpp" #include "barretenberg/world_state/types.hpp" #include +#include #include #include #include @@ -96,18 +97,17 @@ StateReference WorldState::get_state_reference(WorldStateRevision revision) cons { Signal signal(static_cast(_trees.size())); StateReference state_reference; + bool uncommitted = include_uncommitted(revision); for (const auto& [id, tree] : _trees) { - std::visit( - [&signal, &state_reference, id, uncommitted](auto&& wrapper) { - auto callback = [&signal, &state_reference, id](const TypedResponse& meta) { - state_reference.insert({ id, { meta.inner.root, meta.inner.size } }); - signal.signal_decrement(); - }; - wrapper.tree->get_meta_data(uncommitted, callback); - }, - tree); + auto callback = [&](const TypedResponse& meta) { + std::lock_guard lock(state_ref_mutex); + state_reference.insert({ id, { meta.inner.root, meta.inner.size } }); + signal.signal_decrement(); + }; + std::visit([&callback, uncommitted](auto&& wrapper) { wrapper.tree->get_meta_data(uncommitted, callback); }, + tree); } signal.wait_for_level(0); diff --git a/barretenberg/cpp/src/barretenberg/world_state/world_state.hpp b/barretenberg/cpp/src/barretenberg/world_state/world_state.hpp index 4ab6455131b..df4880e0058 100644 --- a/barretenberg/cpp/src/barretenberg/world_state/world_state.hpp +++ b/barretenberg/cpp/src/barretenberg/world_state/world_state.hpp @@ -198,6 +198,8 @@ class WorldState { std::unique_ptr _lmdb_env; std::unordered_map _trees; bb::ThreadPool _workers; + // Guards state reference access, flagged as mutable as used in otherwise const methods + mutable std::mutex state_ref_mutex; TreeStateReference get_tree_snapshot(MerkleTreeId id); diff --git a/barretenberg/sol/src/honk/HonkTypes.sol b/barretenberg/sol/src/honk/HonkTypes.sol index 593d4bf2c2a..180b163271f 100644 --- a/barretenberg/sol/src/honk/HonkTypes.sol +++ b/barretenberg/sol/src/honk/HonkTypes.sol @@ -136,9 +136,5 @@ library Honk { // Sumcheck Fr[BATCHED_RELATION_PARTIAL_LENGTH][CONST_PROOF_SIZE_LOG_N] sumcheckUnivariates; Fr[NUMBER_OF_ENTITIES] sumcheckEvaluations; - // Zero morph - Honk.G1ProofPoint[CONST_PROOF_SIZE_LOG_N] zmCqs; - Honk.G1ProofPoint zmCq; - Honk.G1ProofPoint zmPi; } } diff --git a/barretenberg/sol/src/honk/HonkVerifier.sol b/barretenberg/sol/src/honk/HonkVerifier.sol index 540398bc0c6..635d4188e71 100644 --- a/barretenberg/sol/src/honk/HonkVerifier.sol +++ b/barretenberg/sol/src/honk/HonkVerifier.sol @@ -27,7 +27,6 @@ import {RelationsLib} from "./Relations.sol"; error PublicInputsLengthWrong(); error SumcheckFailed(); -error ZeromorphFailed(); /// Smart contract verifier of honk proofs abstract contract BaseHonkVerifier is IVerifier { @@ -52,11 +51,7 @@ abstract contract BaseHonkVerifier is IVerifier { bool sumcheckVerified = verifySumcheck(p, t); if (!sumcheckVerified) revert SumcheckFailed(); - // Zeromorph - bool zeromorphVerified = verifyZeroMorph(p, vk, t); - if (!zeromorphVerified) revert ZeromorphFailed(); - - return sumcheckVerified && zeromorphVerified; // Boolean condition not required - nice for vanity :) + return sumcheckVerified; // Boolean condition not required - nice for vanity :) } function loadVerificationKey() internal view returns (Honk.VerificationKey memory) { @@ -192,181 +187,7 @@ abstract contract BaseHonkVerifier is IVerifier { newEvaluation = currentEvaluation * univariateEval; } - function verifyZeroMorph(Honk.Proof memory proof, Honk.VerificationKey memory vk, Transcript memory tp) - internal - view - returns (bool verified) - { - // Construct batched evaluation v = sum_{i=0}^{m-1}\rho^i*f_i(u) + sum_{i=0}^{l-1}\rho^{m+i}*h_i(u) - Fr batchedEval = Fr.wrap(0); - Fr batchedScalar = Fr.wrap(1); - - // We linearly combine all evaluations (unshifted first, then shifted) - for (uint256 i = 0; i < NUMBER_OF_ENTITIES; ++i) { - batchedEval = batchedEval + proof.sumcheckEvaluations[i] * batchedScalar; - batchedScalar = batchedScalar * tp.rho; - } - - // Get k commitments - Honk.G1Point memory c_zeta = computeCZeta(proof, tp); - Honk.G1Point memory c_zeta_x = computeCZetaX(proof, vk, tp, batchedEval); - Honk.G1Point memory c_zeta_Z = ecAdd(c_zeta, ecMul(c_zeta_x, tp.zmZ)); - - // KZG pairing accumulator - // WORKTODO: concerned that this is zero - it is multiplied by a point later on - Fr evaluation = Fr.wrap(0); - verified = zkgReduceVerify(proof, tp, evaluation, c_zeta_Z); - } - - // Compute commitment to lifted degree quotient identity - function computeCZeta(Honk.Proof memory proof, Transcript memory tp) internal view returns (Honk.G1Point memory) { - Fr[LOG_N + 1] memory scalars; - Honk.G1ProofPoint[LOG_N + 1] memory commitments; - - // Initial contribution - commitments[0] = proof.zmCq; - scalars[0] = Fr.wrap(1); - - // TODO: optimize pow operations here ? batch mulable - for (uint256 k = 0; k < LOG_N; ++k) { - Fr degree = Fr.wrap((1 << k) - 1); - Fr scalar = FrLib.pow(tp.zmY, k); - scalar = scalar * FrLib.pow(tp.zmX, (1 << LOG_N) - Fr.unwrap(degree) - 1); - scalar = scalar * MINUS_ONE; - - scalars[k + 1] = scalar; - commitments[k + 1] = proof.zmCqs[k]; - } - - // Convert all commitments for batch mul - Honk.G1Point[LOG_N + 1] memory comms = convertPoints(commitments); - - return batchMul(comms, scalars); - } - - struct CZetaXParams { - Fr phi_numerator; - Fr phi_n_x; - Fr rho_pow; - Fr phi_1; - Fr phi_2; - Fr x_pow_2k; - Fr x_pow_2kp1; - } - - function computeCZetaX( - Honk.Proof memory proof, - Honk.VerificationKey memory vk, - Transcript memory tp, - Fr batchedEval - ) internal view returns (Honk.G1Point memory) { - Fr[NUMBER_OF_ENTITIES + CONST_PROOF_SIZE_LOG_N + 1] memory scalars; - Honk.G1Point[NUMBER_OF_ENTITIES + CONST_PROOF_SIZE_LOG_N + 1] memory commitments; - CZetaXParams memory cp; - - // Phi_n(x) = (x^N - 1) / (x - 1) - cp.phi_numerator = FrLib.pow(tp.zmX, (1 << LOG_N)) - Fr.wrap(1); - cp.phi_n_x = FrLib.div(cp.phi_numerator, tp.zmX - Fr.wrap(1)); - - // Add contribution: -v * x * \Phi_n(x) * [1]_1 - // Add base - scalars[0] = MINUS_ONE * batchedEval * tp.zmX * cp.phi_n_x; - commitments[0] = Honk.G1Point({x: 1, y: 2}); // One - - // f - Add all unshifted commitments - // g - Add add to be shifted commitments - - // f commitments are accumulated at (zm_x * r) - cp.rho_pow = Fr.wrap(1); - for (uint256 i = 1; i <= NUMBER_UNSHIFTED; ++i) { - scalars[i] = tp.zmX * cp.rho_pow; - cp.rho_pow = cp.rho_pow * tp.rho; - } - // g commitments are accumulated at r - for (uint256 i = NUMBER_UNSHIFTED + 1; i <= NUMBER_OF_ENTITIES; ++i) { - scalars[i] = cp.rho_pow; - cp.rho_pow = cp.rho_pow * tp.rho; - } - - // TODO: dont accumulate these into the comms array, just accumulate directly - commitments[1] = vk.qm; - commitments[2] = vk.qc; - commitments[3] = vk.ql; - commitments[4] = vk.qr; - commitments[5] = vk.qo; - commitments[6] = vk.q4; - commitments[7] = vk.qArith; - commitments[8] = vk.qDeltaRange; - commitments[9] = vk.qElliptic; - commitments[10] = vk.qAux; - commitments[11] = vk.qLookup; - commitments[12] = vk.qPoseidon2External; - commitments[13] = vk.qPoseidon2Internal; - commitments[14] = vk.s1; - commitments[15] = vk.s2; - commitments[16] = vk.s3; - commitments[17] = vk.s4; - commitments[18] = vk.id1; - commitments[19] = vk.id2; - commitments[20] = vk.id3; - commitments[21] = vk.id4; - commitments[22] = vk.t1; - commitments[23] = vk.t2; - commitments[24] = vk.t3; - commitments[25] = vk.t4; - commitments[26] = vk.lagrangeFirst; - commitments[27] = vk.lagrangeLast; - - // Accumulate proof points - commitments[28] = convertProofPoint(proof.w1); - commitments[29] = convertProofPoint(proof.w2); - commitments[30] = convertProofPoint(proof.w3); - commitments[31] = convertProofPoint(proof.w4); - commitments[32] = convertProofPoint(proof.zPerm); - commitments[33] = convertProofPoint(proof.lookupInverses); - commitments[34] = convertProofPoint(proof.lookupReadCounts); - commitments[35] = convertProofPoint(proof.lookupReadTags); - - // to be Shifted - commitments[36] = vk.t1; - commitments[37] = vk.t2; - commitments[38] = vk.t3; - commitments[39] = vk.t4; - commitments[40] = convertProofPoint(proof.w1); - commitments[41] = convertProofPoint(proof.w2); - commitments[42] = convertProofPoint(proof.w3); - commitments[43] = convertProofPoint(proof.w4); - commitments[44] = convertProofPoint(proof.zPerm); - - // Add scalar contributions - // Add contributions: scalar * [q_k], k = 0,...,log_N, where - // scalar = -x * (x^{2^k} * \Phi_{n-k-1}(x^{2^{k+1}}) - u_k * \Phi_{n-k}(x^{2^k})) - cp.x_pow_2k = tp.zmX; - cp.x_pow_2kp1 = tp.zmX * tp.zmX; - for (uint256 k; k < CONST_PROOF_SIZE_LOG_N; ++k) { - bool dummy_round = k >= LOG_N; - - // note: defaults to 0 - Fr scalar; - if (!dummy_round) { - cp.phi_1 = FrLib.div(cp.phi_numerator, cp.x_pow_2kp1 - Fr.wrap(1)); - cp.phi_2 = FrLib.div(cp.phi_numerator, cp.x_pow_2k - Fr.wrap(1)); - - scalar = cp.x_pow_2k * cp.phi_1; - scalar = scalar - (tp.sumCheckUChallenges[k] * cp.phi_2); - scalar = scalar * tp.zmX; - scalar = scalar * MINUS_ONE; - - cp.x_pow_2k = cp.x_pow_2kp1; - cp.x_pow_2kp1 = cp.x_pow_2kp1 * cp.x_pow_2kp1; - } - - scalars[NUMBER_OF_ENTITIES + 1 + k] = scalar; - commitments[NUMBER_OF_ENTITIES + 1 + k] = convertProofPoint(proof.zmCqs[k]); - } - - return batchMul2(commitments, scalars); - } + // TODO: Implement Shplemini, functions above are left here in case they are useful // TODO: TODO: TODO: optimize // Scalar Mul and acumulate into total @@ -451,26 +272,26 @@ abstract contract BaseHonkVerifier is IVerifier { } } - function zkgReduceVerify( - Honk.Proof memory proof, - Transcript memory tp, - Fr evaluation, - Honk.G1Point memory commitment - ) internal view returns (bool) { - Honk.G1Point memory quotient_commitment = convertProofPoint(proof.zmPi); - Honk.G1Point memory ONE = Honk.G1Point({x: 1, y: 2}); + // function kzgReduceVerify( + // Honk.Proof memory proof, + // Transcript memory tp, + // Fr evaluation, + // Honk.G1Point memory commitment + // ) internal view returns (bool) { + // Honk.G1Point memory quotient_commitment = convertProofPoint(proof.zmPi); + // Honk.G1Point memory ONE = Honk.G1Point({x: 1, y: 2}); - Honk.G1Point memory P0 = commitment; - P0 = ecAdd(P0, ecMul(quotient_commitment, tp.zmX)); + // Honk.G1Point memory P0 = commitment; + // P0 = ecAdd(P0, ecMul(quotient_commitment, tp.zmX)); - Honk.G1Point memory evalAsPoint = ecMul(ONE, evaluation); - P0 = ecSub(P0, evalAsPoint); + // Honk.G1Point memory evalAsPoint = ecMul(ONE, evaluation); + // P0 = ecSub(P0, evalAsPoint); - Honk.G1Point memory P1 = negateInplace(quotient_commitment); + // Honk.G1Point memory P1 = negateInplace(quotient_commitment); - // Perform pairing check - return pairing(P0, P1); - } + // // Perform pairing check + // return pairing(P0, P1); + // } function pairing(Honk.G1Point memory rhs, Honk.G1Point memory lhs) internal view returns (bool) { bytes memory input = abi.encodePacked( diff --git a/barretenberg/sol/src/honk/Transcript.sol b/barretenberg/sol/src/honk/Transcript.sol index 1f450263a44..70ac6234158 100644 --- a/barretenberg/sol/src/honk/Transcript.sol +++ b/barretenberg/sol/src/honk/Transcript.sol @@ -19,12 +19,7 @@ struct Transcript { Fr[NUMBER_OF_ALPHAS] alphas; Fr[CONST_PROOF_SIZE_LOG_N] gateChallenges; Fr[CONST_PROOF_SIZE_LOG_N] sumCheckUChallenges; - Fr rho; - // Zero morph - Fr zmX; - Fr zmY; - Fr zmZ; - Fr zmQuotient; + // Fr rho; // Derived Fr publicInputsDelta; } @@ -45,11 +40,7 @@ library TranscriptLib { (t.gateChallenges, previousChallenge) = generateGateChallenges(previousChallenge); (t.sumCheckUChallenges, previousChallenge) = generateSumcheckChallenges(proof, previousChallenge); - (t.rho, previousChallenge) = generateRhoChallenge(proof, previousChallenge); - - (t.zmY, previousChallenge) = generateZMYChallenge(previousChallenge, proof); - - (t.zmX, t.zmZ, previousChallenge) = generateZMXZChallenges(previousChallenge, proof); + // (t.rho, previousChallenge) = generateRhoChallenge(proof, previousChallenge); return t; } @@ -186,6 +177,7 @@ library TranscriptLib { nextPreviousChallenge = prevChallenge; } + // TODO: reuse this for Shplemini function generateRhoChallenge(Honk.Proof memory proof, Fr prevChallenge) internal view @@ -204,43 +196,6 @@ library TranscriptLib { (rho, unused) = splitChallenge(nextPreviousChallenge); } - function generateZMYChallenge(Fr previousChallenge, Honk.Proof memory proof) - internal - view - returns (Fr zeromorphY, Fr nextPreviousChallenge) - { - uint256[CONST_PROOF_SIZE_LOG_N * 4 + 1] memory zmY; - zmY[0] = Fr.unwrap(previousChallenge); - - for (uint256 i; i < CONST_PROOF_SIZE_LOG_N; ++i) { - zmY[1 + i * 4] = proof.zmCqs[i].x_0; - zmY[2 + i * 4] = proof.zmCqs[i].x_1; - zmY[3 + i * 4] = proof.zmCqs[i].y_0; - zmY[4 + i * 4] = proof.zmCqs[i].y_1; - } - - nextPreviousChallenge = FrLib.fromBytes32(keccak256(abi.encodePacked(zmY))); - Fr unused; - (zeromorphY, unused) = splitChallenge(nextPreviousChallenge); - } - - function generateZMXZChallenges(Fr previousChallenge, Honk.Proof memory proof) - internal - pure - returns (Fr zeromorphX, Fr zeromorphZ, Fr nextPreviousChallenge) - { - uint256[4 + 1] memory buf; - buf[0] = Fr.unwrap(previousChallenge); - - buf[1] = proof.zmCq.x_0; - buf[2] = proof.zmCq.x_1; - buf[3] = proof.zmCq.y_0; - buf[4] = proof.zmCq.y_1; - - nextPreviousChallenge = FrLib.fromBytes32(keccak256(abi.encodePacked(buf))); - (zeromorphX, zeromorphZ) = splitChallenge(nextPreviousChallenge); - } - // TODO: mod q proof points // TODO: Preprocess all of the memory locations // TODO: Adjust proof point serde away from poseidon forced field elements @@ -332,44 +287,12 @@ library TranscriptLib { } boundary = boundary + (NUMBER_OF_ENTITIES * 0x20); - // Zero morph Commitments - for (uint256 i = 0; i < CONST_PROOF_SIZE_LOG_N; i++) { - // Explicitly stating the x0, x1, y0, y1 start and end boundaries to make the calldata slicing bearable - uint256 xStart = boundary + (i * 0x80); - uint256 xEnd = xStart + 0x20; - - uint256 x1Start = xEnd; - uint256 x1End = x1Start + 0x20; - - uint256 yStart = x1End; - uint256 yEnd = yStart + 0x20; - - uint256 y1Start = yEnd; - uint256 y1End = y1Start + 0x20; - - p.zmCqs[i] = Honk.G1ProofPoint({ - x_0: uint256(bytes32(proof[xStart:xEnd])), - x_1: uint256(bytes32(proof[x1Start:x1End])), - y_0: uint256(bytes32(proof[yStart:yEnd])), - y_1: uint256(bytes32(proof[y1Start:y1End])) - }); - } - - boundary = boundary + (CONST_PROOF_SIZE_LOG_N * 0x80); - - p.zmCq = Honk.G1ProofPoint({ - x_0: uint256(bytes32(proof[boundary:boundary + 0x20])), - x_1: uint256(bytes32(proof[boundary + 0x20:boundary + 0x40])), - y_0: uint256(bytes32(proof[boundary + 0x40:boundary + 0x60])), - y_1: uint256(bytes32(proof[boundary + 0x60:boundary + 0x80])) - }); - - p.zmPi = Honk.G1ProofPoint({ - x_0: uint256(bytes32(proof[boundary + 0x80:boundary + 0xa0])), - x_1: uint256(bytes32(proof[boundary + 0xa0:boundary + 0xc0])), - y_0: uint256(bytes32(proof[boundary + 0xc0:boundary + 0xe0])), - y_1: uint256(bytes32(proof[boundary + 0xe0:boundary + 0x100])) - }); + // p.zmPi = Honk.G1ProofPoint({ + // x_0: uint256(bytes32(proof[boundary + 0x80:boundary + 0xa0])), + // x_1: uint256(bytes32(proof[boundary + 0xa0:boundary + 0xc0])), + // y_0: uint256(bytes32(proof[boundary + 0xc0:boundary + 0xe0])), + // y_1: uint256(bytes32(proof[boundary + 0xe0:boundary + 0x100])) + // }); return p; } diff --git a/barretenberg/sol/src/honk/instance/Add2Honk.sol b/barretenberg/sol/src/honk/instance/Add2Honk.sol index 9f554d10b54..a6eaec5afa8 100644 --- a/barretenberg/sol/src/honk/instance/Add2Honk.sol +++ b/barretenberg/sol/src/honk/instance/Add2Honk.sol @@ -28,7 +28,6 @@ import {RelationsLib} from "../Relations.sol"; // Errors error PublicInputsLengthWrong(); error SumcheckFailed(); -error ZeromorphFailed(); /// Smart contract verifier of honk proofs contract Add2HonkVerifier is IVerifier { @@ -51,11 +50,7 @@ contract Add2HonkVerifier is IVerifier { bool sumcheckVerified = verifySumcheck(p, t); if (!sumcheckVerified) revert SumcheckFailed(); - // Zeromorph - bool zeromorphVerified = verifyZeroMorph(p, vk, t); - if (!zeromorphVerified) revert ZeromorphFailed(); - - return sumcheckVerified && zeromorphVerified; // Boolean condition not required - nice for vanity :) + return sumcheckVerified; // Boolean condition not required - nice for vanity :) } function loadVerificationKey() internal view returns (Honk.VerificationKey memory) { @@ -191,181 +186,6 @@ contract Add2HonkVerifier is IVerifier { newEvaluation = currentEvaluation * univariateEval; } - function verifyZeroMorph(Honk.Proof memory proof, Honk.VerificationKey memory vk, Transcript memory tp) - internal - view - returns (bool verified) - { - // Construct batched evaluation v = sum_{i=0}^{m-1}\rho^i*f_i(u) + sum_{i=0}^{l-1}\rho^{m+i}*h_i(u) - Fr batchedEval = Fr.wrap(0); - Fr batchedScalar = Fr.wrap(1); - - // We linearly combine all evaluations (unshifted first, then shifted) - for (uint256 i = 0; i < NUMBER_OF_ENTITIES; ++i) { - batchedEval = batchedEval + proof.sumcheckEvaluations[i] * batchedScalar; - batchedScalar = batchedScalar * tp.rho; - } - - // Get k commitments - Honk.G1Point memory c_zeta = computeCZeta(proof, tp); - Honk.G1Point memory c_zeta_x = computeCZetaX(proof, vk, tp, batchedEval); - Honk.G1Point memory c_zeta_Z = ecAdd(c_zeta, ecMul(c_zeta_x, tp.zmZ)); - - // KZG pairing accumulator - Fr evaluation = Fr.wrap(0); - verified = zkgReduceVerify(proof, tp, evaluation, c_zeta_Z); - } - - // Compute commitment to lifted degree quotient identity - function computeCZeta(Honk.Proof memory proof, Transcript memory tp) internal view returns (Honk.G1Point memory) { - Fr[LOG_N + 1] memory scalars; - Honk.G1ProofPoint[LOG_N + 1] memory commitments; - - // Initial contribution - commitments[0] = proof.zmCq; - scalars[0] = Fr.wrap(1); - - // TODO: optimize pow operations here ? batch mulable - for (uint256 k = 0; k < LOG_N; ++k) { - Fr degree = Fr.wrap((1 << k) - 1); - Fr scalar = FrLib.pow(tp.zmY, k); - scalar = scalar * FrLib.pow(tp.zmX, (1 << LOG_N) - Fr.unwrap(degree) - 1); - scalar = scalar * MINUS_ONE; - - scalars[k + 1] = scalar; - commitments[k + 1] = proof.zmCqs[k]; - } - - // Convert all commitments for batch mul - Honk.G1Point[LOG_N + 1] memory comms = convertPoints(commitments); - - return batchMul(comms, scalars); - } - - struct CZetaXParams { - Fr phi_numerator; - Fr phi_n_x; - Fr rho_pow; - Fr phi_1; - Fr phi_2; - Fr x_pow_2k; - Fr x_pow_2kp1; - } - - function computeCZetaX( - Honk.Proof memory proof, - Honk.VerificationKey memory vk, - Transcript memory tp, - Fr batchedEval - ) internal view returns (Honk.G1Point memory) { - Fr[NUMBER_OF_ENTITIES + CONST_PROOF_SIZE_LOG_N + 1] memory scalars; - Honk.G1Point[NUMBER_OF_ENTITIES + CONST_PROOF_SIZE_LOG_N + 1] memory commitments; - CZetaXParams memory cp; - - // Phi_n(x) = (x^N - 1) / (x - 1) - cp.phi_numerator = FrLib.pow(tp.zmX, (1 << LOG_N)) - Fr.wrap(1); - cp.phi_n_x = FrLib.div(cp.phi_numerator, tp.zmX - Fr.wrap(1)); - - // Add contribution: -v * x * \Phi_n(x) * [1]_1 - // Add base - scalars[0] = MINUS_ONE * batchedEval * tp.zmX * cp.phi_n_x; - commitments[0] = Honk.G1Point({x: 1, y: 2}); // One - - // f - Add all unshifted commitments - // g - Add add to be shifted commitments - - // f commitments are accumulated at (zm_x * r) - cp.rho_pow = Fr.wrap(1); - for (uint256 i = 1; i <= NUMBER_UNSHIFTED; ++i) { - scalars[i] = tp.zmX * cp.rho_pow; - cp.rho_pow = cp.rho_pow * tp.rho; - } - // g commitments are accumulated at r - for (uint256 i = NUMBER_UNSHIFTED + 1; i <= NUMBER_OF_ENTITIES; ++i) { - scalars[i] = cp.rho_pow; - cp.rho_pow = cp.rho_pow * tp.rho; - } - - // TODO: dont accumulate these into the comms array, just accumulate directly - commitments[1] = vk.qm; - commitments[2] = vk.qc; - commitments[3] = vk.ql; - commitments[4] = vk.qr; - commitments[5] = vk.qo; - commitments[6] = vk.q4; - commitments[7] = vk.qArith; - commitments[8] = vk.qDeltaRange; - commitments[9] = vk.qElliptic; - commitments[10] = vk.qAux; - commitments[11] = vk.qLookup; - commitments[12] = vk.qPoseidon2External; - commitments[13] = vk.qPoseidon2Internal; - commitments[14] = vk.s1; - commitments[15] = vk.s2; - commitments[16] = vk.s3; - commitments[17] = vk.s4; - commitments[18] = vk.id1; - commitments[19] = vk.id2; - commitments[20] = vk.id3; - commitments[21] = vk.id4; - commitments[22] = vk.t1; - commitments[23] = vk.t2; - commitments[24] = vk.t3; - commitments[25] = vk.t4; - commitments[26] = vk.lagrangeFirst; - commitments[27] = vk.lagrangeLast; - - // Accumulate proof points - commitments[28] = convertProofPoint(proof.w1); - commitments[29] = convertProofPoint(proof.w2); - commitments[30] = convertProofPoint(proof.w3); - commitments[31] = convertProofPoint(proof.w4); - commitments[32] = convertProofPoint(proof.zPerm); - commitments[33] = convertProofPoint(proof.lookupInverses); - commitments[34] = convertProofPoint(proof.lookupReadCounts); - commitments[35] = convertProofPoint(proof.lookupReadTags); - - // to be Shifted - commitments[36] = vk.t1; - commitments[37] = vk.t2; - commitments[38] = vk.t3; - commitments[39] = vk.t4; - commitments[40] = convertProofPoint(proof.w1); - commitments[41] = convertProofPoint(proof.w2); - commitments[42] = convertProofPoint(proof.w3); - commitments[43] = convertProofPoint(proof.w4); - commitments[44] = convertProofPoint(proof.zPerm); - - // Add scalar contributions - // Add contributions: scalar * [q_k], k = 0,...,log_N, where - // scalar = -x * (x^{2^k} * \Phi_{n-k-1}(x^{2^{k+1}}) - u_k * \Phi_{n-k}(x^{2^k})) - cp.x_pow_2k = tp.zmX; - cp.x_pow_2kp1 = tp.zmX * tp.zmX; - for (uint256 k; k < CONST_PROOF_SIZE_LOG_N; ++k) { - bool dummy_round = k >= LOG_N; - - // note: defaults to 0 - Fr scalar; - if (!dummy_round) { - cp.phi_1 = FrLib.div(cp.phi_numerator, cp.x_pow_2kp1 - Fr.wrap(1)); - cp.phi_2 = FrLib.div(cp.phi_numerator, cp.x_pow_2k - Fr.wrap(1)); - - scalar = cp.x_pow_2k * cp.phi_1; - scalar = scalar - (tp.sumCheckUChallenges[k] * cp.phi_2); - scalar = scalar * tp.zmX; - scalar = scalar * MINUS_ONE; - - cp.x_pow_2k = cp.x_pow_2kp1; - cp.x_pow_2kp1 = cp.x_pow_2kp1 * cp.x_pow_2kp1; - } - - scalars[NUMBER_OF_ENTITIES + 1 + k] = scalar; - commitments[NUMBER_OF_ENTITIES + 1 + k] = convertProofPoint(proof.zmCqs[k]); - } - - return batchMul2(commitments, scalars); - } - // TODO: TODO: TODO: optimize // Scalar Mul and acumulate into total function batchMul(Honk.G1Point[LOG_N + 1] memory base, Fr[LOG_N + 1] memory scalars) @@ -449,26 +269,26 @@ contract Add2HonkVerifier is IVerifier { } } - function zkgReduceVerify( - Honk.Proof memory proof, - Transcript memory tp, - Fr evaluation, - Honk.G1Point memory commitment - ) internal view returns (bool) { - Honk.G1Point memory quotient_commitment = convertProofPoint(proof.zmPi); - Honk.G1Point memory ONE = Honk.G1Point({x: 1, y: 2}); + // function kzgReduceVerify( + // Honk.Proof memory proof, + // Transcript memory tp, + // Fr evaluation, + // Honk.G1Point memory commitment + // ) internal view returns (bool) { + // Honk.G1Point memory quotient_commitment = convertProofPoint(proof.zmPi); + // Honk.G1Point memory ONE = Honk.G1Point({x: 1, y: 2}); - Honk.G1Point memory P0 = commitment; - P0 = ecAdd(P0, ecMul(quotient_commitment, tp.zmX)); + // Honk.G1Point memory P0 = commitment; + // P0 = ecAdd(P0, ecMul(quotient_commitment, tp.zmX)); - Honk.G1Point memory evalAsPoint = ecMul(ONE, evaluation); - P0 = ecSub(P0, evalAsPoint); + // Honk.G1Point memory evalAsPoint = ecMul(ONE, evaluation); + // P0 = ecSub(P0, evalAsPoint); - Honk.G1Point memory P1 = negateInplace(quotient_commitment); + // Honk.G1Point memory P1 = negateInplace(quotient_commitment); - // Perform pairing check - return pairing(P0, P1); - } + // // Perform pairing check + // return pairing(P0, P1); + // } function pairing(Honk.G1Point memory rhs, Honk.G1Point memory lhs) internal view returns (bool) { bytes memory input = abi.encodePacked( diff --git a/barretenberg/sol/src/honk/instance/BlakeHonk.sol b/barretenberg/sol/src/honk/instance/BlakeHonk.sol index f3b36f359b2..4c40fc2337b 100644 --- a/barretenberg/sol/src/honk/instance/BlakeHonk.sol +++ b/barretenberg/sol/src/honk/instance/BlakeHonk.sol @@ -28,7 +28,6 @@ import {RelationsLib} from "../Relations.sol"; // Errors error PublicInputsLengthWrong(); error SumcheckFailed(); -error ZeromorphFailed(); /// Smart contract verifier of honk proofs contract BlakeHonkVerifier is IVerifier { @@ -51,11 +50,7 @@ contract BlakeHonkVerifier is IVerifier { bool sumcheckVerified = verifySumcheck(p, t); if (!sumcheckVerified) revert SumcheckFailed(); - // Zeromorph - bool zeromorphVerified = verifyZeroMorph(p, vk, t); - if (!zeromorphVerified) revert ZeromorphFailed(); - - return sumcheckVerified && zeromorphVerified; // Boolean condition not required - nice for vanity :) + return sumcheckVerified; // Boolean condition not required - nice for vanity :) } function loadVerificationKey() internal view returns (Honk.VerificationKey memory) { @@ -191,182 +186,6 @@ contract BlakeHonkVerifier is IVerifier { newEvaluation = currentEvaluation * univariateEval; } - function verifyZeroMorph(Honk.Proof memory proof, Honk.VerificationKey memory vk, Transcript memory tp) - internal - view - returns (bool verified) - { - // Construct batched evaluation v = sum_{i=0}^{m-1}\rho^i*f_i(u) + sum_{i=0}^{l-1}\rho^{m+i}*h_i(u) - Fr batchedEval = Fr.wrap(0); - Fr batchedScalar = Fr.wrap(1); - - // We linearly combine all evaluations (unshifted first, then shifted) - for (uint256 i = 0; i < NUMBER_OF_ENTITIES; ++i) { - batchedEval = batchedEval + proof.sumcheckEvaluations[i] * batchedScalar; - batchedScalar = batchedScalar * tp.rho; - } - - // Get k commitments - Honk.G1Point memory c_zeta = computeCZeta(proof, tp); - Honk.G1Point memory c_zeta_x = computeCZetaX(proof, vk, tp, batchedEval); - Honk.G1Point memory c_zeta_Z = ecAdd(c_zeta, ecMul(c_zeta_x, tp.zmZ)); - - // KZG pairing accumulator - // WORKTODO: concerned that this is zero - it is multiplied by a point later on - Fr evaluation = Fr.wrap(0); - verified = zkgReduceVerify(proof, tp, evaluation, c_zeta_Z); - } - - // Compute commitment to lifted degree quotient identity - function computeCZeta(Honk.Proof memory proof, Transcript memory tp) internal view returns (Honk.G1Point memory) { - Fr[LOG_N + 1] memory scalars; - Honk.G1ProofPoint[LOG_N + 1] memory commitments; - - // Initial contribution - commitments[0] = proof.zmCq; - scalars[0] = Fr.wrap(1); - - // TODO: optimize pow operations here ? batch mulable - for (uint256 k = 0; k < LOG_N; ++k) { - Fr degree = Fr.wrap((1 << k) - 1); - Fr scalar = FrLib.pow(tp.zmY, k); - scalar = scalar * FrLib.pow(tp.zmX, (1 << LOG_N) - Fr.unwrap(degree) - 1); - scalar = scalar * MINUS_ONE; - - scalars[k + 1] = scalar; - commitments[k + 1] = proof.zmCqs[k]; - } - - // Convert all commitments for batch mul - Honk.G1Point[LOG_N + 1] memory comms = convertPoints(commitments); - - return batchMul(comms, scalars); - } - - struct CZetaXParams { - Fr phi_numerator; - Fr phi_n_x; - Fr rho_pow; - Fr phi_1; - Fr phi_2; - Fr x_pow_2k; - Fr x_pow_2kp1; - } - - function computeCZetaX( - Honk.Proof memory proof, - Honk.VerificationKey memory vk, - Transcript memory tp, - Fr batchedEval - ) internal view returns (Honk.G1Point memory) { - Fr[NUMBER_OF_ENTITIES + CONST_PROOF_SIZE_LOG_N + 1] memory scalars; - Honk.G1Point[NUMBER_OF_ENTITIES + CONST_PROOF_SIZE_LOG_N + 1] memory commitments; - CZetaXParams memory cp; - - // Phi_n(x) = (x^N - 1) / (x - 1) - cp.phi_numerator = FrLib.pow(tp.zmX, (1 << LOG_N)) - Fr.wrap(1); - cp.phi_n_x = FrLib.div(cp.phi_numerator, tp.zmX - Fr.wrap(1)); - - // Add contribution: -v * x * \Phi_n(x) * [1]_1 - // Add base - scalars[0] = MINUS_ONE * batchedEval * tp.zmX * cp.phi_n_x; - commitments[0] = Honk.G1Point({x: 1, y: 2}); // One - - // f - Add all unshifted commitments - // g - Add add to be shifted commitments - - // f commitments are accumulated at (zm_x * r) - cp.rho_pow = Fr.wrap(1); - for (uint256 i = 1; i <= NUMBER_UNSHIFTED; ++i) { - scalars[i] = tp.zmX * cp.rho_pow; - cp.rho_pow = cp.rho_pow * tp.rho; - } - // g commitments are accumulated at r - for (uint256 i = NUMBER_UNSHIFTED + 1; i <= NUMBER_OF_ENTITIES; ++i) { - scalars[i] = cp.rho_pow; - cp.rho_pow = cp.rho_pow * tp.rho; - } - - // TODO: dont accumulate these into the comms array, just accumulate directly - commitments[1] = vk.qm; - commitments[2] = vk.qc; - commitments[3] = vk.ql; - commitments[4] = vk.qr; - commitments[5] = vk.qo; - commitments[6] = vk.q4; - commitments[7] = vk.qArith; - commitments[8] = vk.qDeltaRange; - commitments[9] = vk.qElliptic; - commitments[10] = vk.qAux; - commitments[11] = vk.qLookup; - commitments[12] = vk.qPoseidon2External; - commitments[13] = vk.qPoseidon2Internal; - commitments[14] = vk.s1; - commitments[15] = vk.s2; - commitments[16] = vk.s3; - commitments[17] = vk.s4; - commitments[18] = vk.id1; - commitments[19] = vk.id2; - commitments[20] = vk.id3; - commitments[21] = vk.id4; - commitments[22] = vk.t1; - commitments[23] = vk.t2; - commitments[24] = vk.t3; - commitments[25] = vk.t4; - commitments[26] = vk.lagrangeFirst; - commitments[27] = vk.lagrangeLast; - - // Accumulate proof points - commitments[28] = convertProofPoint(proof.w1); - commitments[29] = convertProofPoint(proof.w2); - commitments[30] = convertProofPoint(proof.w3); - commitments[31] = convertProofPoint(proof.w4); - commitments[32] = convertProofPoint(proof.zPerm); - commitments[33] = convertProofPoint(proof.lookupInverses); - commitments[34] = convertProofPoint(proof.lookupReadCounts); - commitments[35] = convertProofPoint(proof.lookupReadTags); - - // to be Shifted - commitments[36] = vk.t1; - commitments[37] = vk.t2; - commitments[38] = vk.t3; - commitments[39] = vk.t4; - commitments[40] = convertProofPoint(proof.w1); - commitments[41] = convertProofPoint(proof.w2); - commitments[42] = convertProofPoint(proof.w3); - commitments[43] = convertProofPoint(proof.w4); - commitments[44] = convertProofPoint(proof.zPerm); - - // Add scalar contributions - // Add contributions: scalar * [q_k], k = 0,...,log_N, where - // scalar = -x * (x^{2^k} * \Phi_{n-k-1}(x^{2^{k+1}}) - u_k * \Phi_{n-k}(x^{2^k})) - cp.x_pow_2k = tp.zmX; - cp.x_pow_2kp1 = tp.zmX * tp.zmX; - for (uint256 k; k < CONST_PROOF_SIZE_LOG_N; ++k) { - bool dummy_round = k >= LOG_N; - - // note: defaults to 0 - Fr scalar; - if (!dummy_round) { - cp.phi_1 = FrLib.div(cp.phi_numerator, cp.x_pow_2kp1 - Fr.wrap(1)); - cp.phi_2 = FrLib.div(cp.phi_numerator, cp.x_pow_2k - Fr.wrap(1)); - - scalar = cp.x_pow_2k * cp.phi_1; - scalar = scalar - (tp.sumCheckUChallenges[k] * cp.phi_2); - scalar = scalar * tp.zmX; - scalar = scalar * MINUS_ONE; - - cp.x_pow_2k = cp.x_pow_2kp1; - cp.x_pow_2kp1 = cp.x_pow_2kp1 * cp.x_pow_2kp1; - } - - scalars[NUMBER_OF_ENTITIES + 1 + k] = scalar; - commitments[NUMBER_OF_ENTITIES + 1 + k] = convertProofPoint(proof.zmCqs[k]); - } - - return batchMul2(commitments, scalars); - } - // TODO: TODO: TODO: optimize // Scalar Mul and acumulate into total function batchMul(Honk.G1Point[LOG_N + 1] memory base, Fr[LOG_N + 1] memory scalars) @@ -450,26 +269,26 @@ contract BlakeHonkVerifier is IVerifier { } } - function zkgReduceVerify( - Honk.Proof memory proof, - Transcript memory tp, - Fr evaluation, - Honk.G1Point memory commitment - ) internal view returns (bool) { - Honk.G1Point memory quotient_commitment = convertProofPoint(proof.zmPi); - Honk.G1Point memory ONE = Honk.G1Point({x: 1, y: 2}); + // function kzgReduceVerify( + // Honk.Proof memory proof, + // Transcript memory tp, + // Fr evaluation, + // Honk.G1Point memory commitment + // ) internal view returns (bool) { + // Honk.G1Point memory quotient_commitment = convertProofPoint(proof.zmPi); + // Honk.G1Point memory ONE = Honk.G1Point({x: 1, y: 2}); - Honk.G1Point memory P0 = commitment; - P0 = ecAdd(P0, ecMul(quotient_commitment, tp.zmX)); + // Honk.G1Point memory P0 = commitment; + // P0 = ecAdd(P0, ecMul(quotient_commitment, tp.zmX)); - Honk.G1Point memory evalAsPoint = ecMul(ONE, evaluation); - P0 = ecSub(P0, evalAsPoint); + // Honk.G1Point memory evalAsPoint = ecMul(ONE, evaluation); + // P0 = ecSub(P0, evalAsPoint); - Honk.G1Point memory P1 = negateInplace(quotient_commitment); + // Honk.G1Point memory P1 = negateInplace(quotient_commitment); - // Perform pairing check - return pairing(P0, P1); - } + // // Perform pairing check + // return pairing(P0, P1); + // } function pairing(Honk.G1Point memory rhs, Honk.G1Point memory lhs) internal view returns (bool) { bytes memory input = abi.encodePacked( diff --git a/barretenberg/sol/src/honk/instance/EcdsaHonk.sol b/barretenberg/sol/src/honk/instance/EcdsaHonk.sol index 1dc716151cd..2a683c27dcc 100644 --- a/barretenberg/sol/src/honk/instance/EcdsaHonk.sol +++ b/barretenberg/sol/src/honk/instance/EcdsaHonk.sol @@ -28,7 +28,6 @@ import {RelationsLib} from "../Relations.sol"; // Errors error PublicInputsLengthWrong(); error SumcheckFailed(); -error ZeromorphFailed(); /// Smart contract verifier of honk proofs contract EcdsaHonkVerifier is IVerifier { @@ -51,11 +50,7 @@ contract EcdsaHonkVerifier is IVerifier { bool sumcheckVerified = verifySumcheck(p, t); if (!sumcheckVerified) revert SumcheckFailed(); - // Zeromorph - bool zeromorphVerified = verifyZeroMorph(p, vk, t); - if (!zeromorphVerified) revert ZeromorphFailed(); - - return sumcheckVerified && zeromorphVerified; // Boolean condition not required - nice for vanity :) + return sumcheckVerified; // Boolean condition not required - nice for vanity :) } function loadVerificationKey() internal view returns (Honk.VerificationKey memory) { @@ -191,182 +186,6 @@ contract EcdsaHonkVerifier is IVerifier { newEvaluation = currentEvaluation * univariateEval; } - function verifyZeroMorph(Honk.Proof memory proof, Honk.VerificationKey memory vk, Transcript memory tp) - internal - view - returns (bool verified) - { - // Construct batched evaluation v = sum_{i=0}^{m-1}\rho^i*f_i(u) + sum_{i=0}^{l-1}\rho^{m+i}*h_i(u) - Fr batchedEval = Fr.wrap(0); - Fr batchedScalar = Fr.wrap(1); - - // We linearly combine all evaluations (unshifted first, then shifted) - for (uint256 i = 0; i < NUMBER_OF_ENTITIES; ++i) { - batchedEval = batchedEval + proof.sumcheckEvaluations[i] * batchedScalar; - batchedScalar = batchedScalar * tp.rho; - } - - // Get k commitments - Honk.G1Point memory c_zeta = computeCZeta(proof, tp); - Honk.G1Point memory c_zeta_x = computeCZetaX(proof, vk, tp, batchedEval); - Honk.G1Point memory c_zeta_Z = ecAdd(c_zeta, ecMul(c_zeta_x, tp.zmZ)); - - // KZG pairing accumulator - // WORKTODO: concerned that this is zero - it is multiplied by a point later on - Fr evaluation = Fr.wrap(0); - verified = zkgReduceVerify(proof, tp, evaluation, c_zeta_Z); - } - - // Compute commitment to lifted degree quotient identity - function computeCZeta(Honk.Proof memory proof, Transcript memory tp) internal view returns (Honk.G1Point memory) { - Fr[LOG_N + 1] memory scalars; - Honk.G1ProofPoint[LOG_N + 1] memory commitments; - - // Initial contribution - commitments[0] = proof.zmCq; - scalars[0] = Fr.wrap(1); - - // TODO: optimize pow operations here ? batch mulable - for (uint256 k = 0; k < LOG_N; ++k) { - Fr degree = Fr.wrap((1 << k) - 1); - Fr scalar = FrLib.pow(tp.zmY, k); - scalar = scalar * FrLib.pow(tp.zmX, (1 << LOG_N) - Fr.unwrap(degree) - 1); - scalar = scalar * MINUS_ONE; - - scalars[k + 1] = scalar; - commitments[k + 1] = proof.zmCqs[k]; - } - - // Convert all commitments for batch mul - Honk.G1Point[LOG_N + 1] memory comms = convertPoints(commitments); - - return batchMul(comms, scalars); - } - - struct CZetaXParams { - Fr phi_numerator; - Fr phi_n_x; - Fr rho_pow; - Fr phi_1; - Fr phi_2; - Fr x_pow_2k; - Fr x_pow_2kp1; - } - - function computeCZetaX( - Honk.Proof memory proof, - Honk.VerificationKey memory vk, - Transcript memory tp, - Fr batchedEval - ) internal view returns (Honk.G1Point memory) { - Fr[NUMBER_OF_ENTITIES + CONST_PROOF_SIZE_LOG_N + 1] memory scalars; - Honk.G1Point[NUMBER_OF_ENTITIES + CONST_PROOF_SIZE_LOG_N + 1] memory commitments; - CZetaXParams memory cp; - - // Phi_n(x) = (x^N - 1) / (x - 1) - cp.phi_numerator = FrLib.pow(tp.zmX, (1 << LOG_N)) - Fr.wrap(1); - cp.phi_n_x = FrLib.div(cp.phi_numerator, tp.zmX - Fr.wrap(1)); - - // Add contribution: -v * x * \Phi_n(x) * [1]_1 - // Add base - scalars[0] = MINUS_ONE * batchedEval * tp.zmX * cp.phi_n_x; - commitments[0] = Honk.G1Point({x: 1, y: 2}); // One - - // f - Add all unshifted commitments - // g - Add add to be shifted commitments - - // f commitments are accumulated at (zm_x * r) - cp.rho_pow = Fr.wrap(1); - for (uint256 i = 1; i <= NUMBER_UNSHIFTED; ++i) { - scalars[i] = tp.zmX * cp.rho_pow; - cp.rho_pow = cp.rho_pow * tp.rho; - } - // g commitments are accumulated at r - for (uint256 i = NUMBER_UNSHIFTED + 1; i <= NUMBER_OF_ENTITIES; ++i) { - scalars[i] = cp.rho_pow; - cp.rho_pow = cp.rho_pow * tp.rho; - } - - // TODO: dont accumulate these into the comms array, just accumulate directly - commitments[1] = vk.qm; - commitments[2] = vk.qc; - commitments[3] = vk.ql; - commitments[4] = vk.qr; - commitments[5] = vk.qo; - commitments[6] = vk.q4; - commitments[7] = vk.qArith; - commitments[8] = vk.qDeltaRange; - commitments[9] = vk.qElliptic; - commitments[10] = vk.qAux; - commitments[11] = vk.qLookup; - commitments[12] = vk.qPoseidon2External; - commitments[13] = vk.qPoseidon2Internal; - commitments[14] = vk.s1; - commitments[15] = vk.s2; - commitments[16] = vk.s3; - commitments[17] = vk.s4; - commitments[18] = vk.id1; - commitments[19] = vk.id2; - commitments[20] = vk.id3; - commitments[21] = vk.id4; - commitments[22] = vk.t1; - commitments[23] = vk.t2; - commitments[24] = vk.t3; - commitments[25] = vk.t4; - commitments[26] = vk.lagrangeFirst; - commitments[27] = vk.lagrangeLast; - - // Accumulate proof points - commitments[28] = convertProofPoint(proof.w1); - commitments[29] = convertProofPoint(proof.w2); - commitments[30] = convertProofPoint(proof.w3); - commitments[31] = convertProofPoint(proof.w4); - commitments[32] = convertProofPoint(proof.zPerm); - commitments[33] = convertProofPoint(proof.lookupInverses); - commitments[34] = convertProofPoint(proof.lookupReadCounts); - commitments[35] = convertProofPoint(proof.lookupReadTags); - - // to be Shifted - commitments[36] = vk.t1; - commitments[37] = vk.t2; - commitments[38] = vk.t3; - commitments[39] = vk.t4; - commitments[40] = convertProofPoint(proof.w1); - commitments[41] = convertProofPoint(proof.w2); - commitments[42] = convertProofPoint(proof.w3); - commitments[43] = convertProofPoint(proof.w4); - commitments[44] = convertProofPoint(proof.zPerm); - - // Add scalar contributions - // Add contributions: scalar * [q_k], k = 0,...,log_N, where - // scalar = -x * (x^{2^k} * \Phi_{n-k-1}(x^{2^{k+1}}) - u_k * \Phi_{n-k}(x^{2^k})) - cp.x_pow_2k = tp.zmX; - cp.x_pow_2kp1 = tp.zmX * tp.zmX; - for (uint256 k; k < CONST_PROOF_SIZE_LOG_N; ++k) { - bool dummy_round = k >= LOG_N; - - // note: defaults to 0 - Fr scalar; - if (!dummy_round) { - cp.phi_1 = FrLib.div(cp.phi_numerator, cp.x_pow_2kp1 - Fr.wrap(1)); - cp.phi_2 = FrLib.div(cp.phi_numerator, cp.x_pow_2k - Fr.wrap(1)); - - scalar = cp.x_pow_2k * cp.phi_1; - scalar = scalar - (tp.sumCheckUChallenges[k] * cp.phi_2); - scalar = scalar * tp.zmX; - scalar = scalar * MINUS_ONE; - - cp.x_pow_2k = cp.x_pow_2kp1; - cp.x_pow_2kp1 = cp.x_pow_2kp1 * cp.x_pow_2kp1; - } - - scalars[NUMBER_OF_ENTITIES + 1 + k] = scalar; - commitments[NUMBER_OF_ENTITIES + 1 + k] = convertProofPoint(proof.zmCqs[k]); - } - - return batchMul2(commitments, scalars); - } - // TODO: TODO: TODO: optimize // Scalar Mul and acumulate into total function batchMul(Honk.G1Point[LOG_N + 1] memory base, Fr[LOG_N + 1] memory scalars) @@ -450,26 +269,26 @@ contract EcdsaHonkVerifier is IVerifier { } } - function zkgReduceVerify( - Honk.Proof memory proof, - Transcript memory tp, - Fr evaluation, - Honk.G1Point memory commitment - ) internal view returns (bool) { - Honk.G1Point memory quotient_commitment = convertProofPoint(proof.zmPi); - Honk.G1Point memory ONE = Honk.G1Point({x: 1, y: 2}); + // function kzgReduceVerify( + // Honk.Proof memory proof, + // Transcript memory tp, + // Fr evaluation, + // Honk.G1Point memory commitment + // ) internal view returns (bool) { + // Honk.G1Point memory quotient_commitment = convertProofPoint(proof.zmPi); + // Honk.G1Point memory ONE = Honk.G1Point({x: 1, y: 2}); - Honk.G1Point memory P0 = commitment; - P0 = ecAdd(P0, ecMul(quotient_commitment, tp.zmX)); + // Honk.G1Point memory P0 = commitment; + // P0 = ecAdd(P0, ecMul(quotient_commitment, tp.zmX)); - Honk.G1Point memory evalAsPoint = ecMul(ONE, evaluation); - P0 = ecSub(P0, evalAsPoint); + // Honk.G1Point memory evalAsPoint = ecMul(ONE, evaluation); + // P0 = ecSub(P0, evalAsPoint); - Honk.G1Point memory P1 = negateInplace(quotient_commitment); + // Honk.G1Point memory P1 = negateInplace(quotient_commitment); - // Perform pairing check - return pairing(P0, P1); - } + // // Perform pairing check + // return pairing(P0, P1); + // } function pairing(Honk.G1Point memory rhs, Honk.G1Point memory lhs) internal view returns (bool) { bytes memory input = abi.encodePacked( diff --git a/barretenberg/ts/CHANGELOG.md b/barretenberg/ts/CHANGELOG.md index 55340c374b7..3641d47d382 100644 --- a/barretenberg/ts/CHANGELOG.md +++ b/barretenberg/ts/CHANGELOG.md @@ -1,5 +1,29 @@ # Changelog +## [0.56.0](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.55.1...barretenberg.js-v0.56.0) (2024-09-25) + + +### Features + +* Use new IVC scheme ([#8480](https://github.com/AztecProtocol/aztec-packages/issues/8480)) ([1c7b06d](https://github.com/AztecProtocol/aztec-packages/commit/1c7b06d6621d9873f84147b2b7f1f22bf21bbacb)) + + +### Bug Fixes + +* Skip G1 SRS download if numPoints is zero ([#8717](https://github.com/AztecProtocol/aztec-packages/issues/8717)) ([753cdf8](https://github.com/AztecProtocol/aztec-packages/commit/753cdf8b047365b6280c0306fdc6f59f824f740b)) + + +### Miscellaneous + +* Migrate higher-level APIs for barretenberg to bb.js ([#8677](https://github.com/AztecProtocol/aztec-packages/issues/8677)) ([0237a20](https://github.com/AztecProtocol/aztec-packages/commit/0237a20c989f2b37a64ee18b41c1da361363a81f)) + +## [0.55.1](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.55.0...barretenberg.js-v0.55.1) (2024-09-17) + + +### Miscellaneous + +* **barretenberg.js:** Synchronize aztec-packages versions + ## [0.55.0](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.54.0...barretenberg.js-v0.55.0) (2024-09-13) diff --git a/barretenberg/ts/package.json b/barretenberg/ts/package.json index 4fc96f037ea..d36d3a237c7 100644 --- a/barretenberg/ts/package.json +++ b/barretenberg/ts/package.json @@ -1,7 +1,7 @@ { "name": "@aztec/bb.js", "packageManager": "yarn@1.22.22", - "version": "0.55.0", + "version": "0.56.0", "homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/barretenberg/ts", "license": "MIT", "type": "module", diff --git a/barretenberg/ts/src/barretenberg/backend.ts b/barretenberg/ts/src/barretenberg/backend.ts new file mode 100644 index 00000000000..663dd666678 --- /dev/null +++ b/barretenberg/ts/src/barretenberg/backend.ts @@ -0,0 +1,203 @@ +import { BackendOptions, Barretenberg } from './index.js'; +import { RawBuffer } from '../types/raw_buffer.js'; + +export class UltraPlonkBackend { + // These type assertions are used so that we don't + // have to initialize `api` and `acirComposer` in the constructor. + // These are initialized asynchronously in the `init` function, + // constructors cannot be asynchronous which is why we do this. + + protected api!: Barretenberg; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + protected acirComposer: any; + + constructor(protected acirUncompressedBytecode: Uint8Array, protected options: BackendOptions = { threads: 1 }) {} + + /** @ignore */ + async instantiate(): Promise { + if (!this.api) { + if (typeof navigator !== 'undefined' && navigator.hardwareConcurrency) { + this.options.threads = navigator.hardwareConcurrency; + } else { + try { + const os = await import('os'); + this.options.threads = os.cpus().length; + } catch (e) { + console.log('Could not detect environment. Falling back to one thread.', e); + } + } + const api = await Barretenberg.new(this.options); + + const honkRecursion = false; + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const [_exact, _total, subgroupSize] = await api.acirGetCircuitSizes( + this.acirUncompressedBytecode, + honkRecursion, + ); + + await api.initSRSForCircuitSize(subgroupSize); + this.acirComposer = await api.acirNewAcirComposer(subgroupSize); + await api.acirInitProvingKey(this.acirComposer, this.acirUncompressedBytecode); + this.api = api; + } + } + + /** @description Generates a proof */ + async generateProof(uncompressedWitness: Uint8Array): Promise { + await this.instantiate(); + return this.api.acirCreateProof(this.acirComposer, this.acirUncompressedBytecode, uncompressedWitness); + } + + /** + * Generates artifacts that will be passed to a circuit that will verify this proof. + * + * Instead of passing the proof and verification key as a byte array, we pass them + * as fields which makes it cheaper to verify in a circuit. + * + * The proof that is passed here will have been created using a circuit + * that has the #[recursive] attribute on its `main` method. + * + * The number of public inputs denotes how many public inputs are in the inner proof. + * + * @example + * ```typescript + * const artifacts = await backend.generateRecursiveProofArtifacts(proof, numOfPublicInputs); + * ``` + */ + async generateRecursiveProofArtifacts( + proof: Uint8Array, + numOfPublicInputs = 0, + ): Promise<{ + proofAsFields: string[]; + vkAsFields: string[]; + vkHash: string; + }> { + await this.instantiate(); + const proofAsFields = ( + await this.api.acirSerializeProofIntoFields(this.acirComposer, proof, numOfPublicInputs) + ).slice(numOfPublicInputs); + + // TODO: perhaps we should put this in the init function. Need to benchmark + // TODO how long it takes. + await this.api.acirInitVerificationKey(this.acirComposer); + + // Note: If you don't init verification key, `acirSerializeVerificationKeyIntoFields`` will just hang on serialization + const vk = await this.api.acirSerializeVerificationKeyIntoFields(this.acirComposer); + + return { + proofAsFields: proofAsFields.map(p => p.toString()), + vkAsFields: vk[0].map(vk => vk.toString()), + vkHash: vk[1].toString(), + }; + } + + /** @description Verifies a proof */ + async verifyProof(proof: Uint8Array): Promise { + await this.instantiate(); + await this.api.acirInitVerificationKey(this.acirComposer); + return await this.api.acirVerifyProof(this.acirComposer, proof); + } + + async getVerificationKey(): Promise { + await this.instantiate(); + await this.api.acirInitVerificationKey(this.acirComposer); + return await this.api.acirGetVerificationKey(this.acirComposer); + } + + async destroy(): Promise { + if (!this.api) { + return; + } + await this.api.destroy(); + } +} + +export class UltraHonkBackend { + // These type assertions are used so that we don't + // have to initialize `api` in the constructor. + // These are initialized asynchronously in the `init` function, + // constructors cannot be asynchronous which is why we do this. + + protected api!: Barretenberg; + + constructor(protected acirUncompressedBytecode: Uint8Array, protected options: BackendOptions = { threads: 1 }) {} + + /** @ignore */ + async instantiate(): Promise { + if (!this.api) { + if (typeof navigator !== 'undefined' && navigator.hardwareConcurrency) { + this.options.threads = navigator.hardwareConcurrency; + } else { + try { + const os = await import('os'); + this.options.threads = os.cpus().length; + } catch (e) { + console.log('Could not detect environment. Falling back to one thread.', e); + } + } + const api = await Barretenberg.new(this.options); + const honkRecursion = true; + await api.acirInitSRS(this.acirUncompressedBytecode, honkRecursion); + + // We don't init a proving key here in the Honk API + // await api.acirInitProvingKey(this.acirComposer, this.acirUncompressedBytecode); + this.api = api; + } + } + + async generateProof(uncompressedWitness: Uint8Array): Promise { + await this.instantiate(); + return this.api.acirProveUltraHonk(this.acirUncompressedBytecode, uncompressedWitness); + } + + async verifyProof(proof: Uint8Array): Promise { + await this.instantiate(); + const vkBuf = await this.api.acirWriteVkUltraHonk(this.acirUncompressedBytecode); + + return await this.api.acirVerifyUltraHonk(proof, new RawBuffer(vkBuf)); + } + + async getVerificationKey(): Promise { + await this.instantiate(); + return await this.api.acirWriteVkUltraHonk(this.acirUncompressedBytecode); + } + + // TODO(https://github.com/noir-lang/noir/issues/5661): Update this to handle Honk recursive aggregation in the browser once it is ready in the backend itself + async generateRecursiveProofArtifacts( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + _proof: Uint8Array, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + _numOfPublicInputs: number, + ): Promise<{ proofAsFields: string[]; vkAsFields: string[]; vkHash: string }> { + await this.instantiate(); + // TODO(https://github.com/noir-lang/noir/issues/5661): This needs to be updated to handle recursive aggregation. + // There is still a proofAsFields method but we could consider getting rid of it as the proof itself + // is a list of field elements. + // UltraHonk also does not have public inputs directly prepended to the proof and they are still instead + // inserted at an offset. + // const proof = reconstructProofWithPublicInputs(proofData); + // const proofAsFields = (await this.api.acirProofAsFieldsUltraHonk(proof)).slice(numOfPublicInputs); + + // TODO: perhaps we should put this in the init function. Need to benchmark + // TODO how long it takes. + const vkBuf = await this.api.acirWriteVkUltraHonk(this.acirUncompressedBytecode); + const vk = await this.api.acirVkAsFieldsUltraHonk(vkBuf); + + return { + // TODO(https://github.com/noir-lang/noir/issues/5661) + proofAsFields: [], + vkAsFields: vk.map(vk => vk.toString()), + // We use an empty string for the vk hash here as it is unneeded as part of the recursive artifacts + // The user can be expected to hash the vk inside their circuit to check whether the vk is the circuit + // they expect + vkHash: '', + }; + } + + async destroy(): Promise { + if (!this.api) { + return; + } + await this.api.destroy(); + } +} diff --git a/barretenberg/ts/src/barretenberg/index.ts b/barretenberg/ts/src/barretenberg/index.ts index 73e935d3372..264f8e91d9b 100644 --- a/barretenberg/ts/src/barretenberg/index.ts +++ b/barretenberg/ts/src/barretenberg/index.ts @@ -5,6 +5,11 @@ import { BarretenbergWasmMain, BarretenbergWasmMainWorker } from '../barretenber import { getRemoteBarretenbergWasm } from '../barretenberg_wasm/helpers/index.js'; import { BarretenbergWasmWorker, fetchModuleAndThreads } from '../barretenberg_wasm/index.js'; import createDebug from 'debug'; +import { Crs } from '../crs/index.js'; +import { RawBuffer } from '../types/raw_buffer.js'; + +export { BarretenbergVerifier } from './verifier.js'; +export { UltraPlonkBackend, UltraHonkBackend } from './backend.js'; const debug = createDebug('bb.js:wasm'); @@ -40,6 +45,18 @@ export class Barretenberg extends BarretenbergApi { return await this.wasm.getNumThreads(); } + async initSRSForCircuitSize(circuitSize: number): Promise { + const crs = await Crs.new(circuitSize + 1); + await this.commonInitSlabAllocator(circuitSize); + await this.srsInitSrs(new RawBuffer(crs.getG1Data()), crs.numPoints, new RawBuffer(crs.getG2Data())); + } + + async acirInitSRS(bytecode: Uint8Array, honkRecursion: boolean): Promise { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const [_exact, _total, subgroupSize] = await this.acirGetCircuitSizes(bytecode, honkRecursion); + return this.initSRSForCircuitSize(subgroupSize); + } + async destroy() { await this.wasm.destroy(); await this.worker.terminate(); diff --git a/barretenberg/ts/src/barretenberg/verifier.ts b/barretenberg/ts/src/barretenberg/verifier.ts new file mode 100644 index 00000000000..0937ca814ea --- /dev/null +++ b/barretenberg/ts/src/barretenberg/verifier.ts @@ -0,0 +1,63 @@ +import { BackendOptions, Barretenberg } from './index.js'; +import { RawBuffer } from '../types/raw_buffer.js'; + +// TODO: once UP is removed we can just roll this into the bas `Barretenberg` class. + +export class BarretenbergVerifier { + // These type assertions are used so that we don't + // have to initialize `api` and `acirComposer` in the constructor. + // These are initialized asynchronously in the `init` function, + // constructors cannot be asynchronous which is why we do this. + + private api!: Barretenberg; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + private acirComposer: any; + + constructor(private options: BackendOptions = { threads: 1 }) {} + + /** @ignore */ + async instantiate(): Promise { + if (!this.api) { + if (typeof navigator !== 'undefined' && navigator.hardwareConcurrency) { + this.options.threads = navigator.hardwareConcurrency; + } else { + try { + const os = await import('os'); + this.options.threads = os.cpus().length; + } catch (e) { + console.log('Could not detect environment. Falling back to one thread.', e); + } + } + + const api = await Barretenberg.new(this.options); + await api.initSRSForCircuitSize(0); + + this.acirComposer = await api.acirNewAcirComposer(0); + this.api = api; + } + } + + /** @description Verifies a proof */ + async verifyUltraplonkProof(proof: Uint8Array, verificationKey: Uint8Array): Promise { + await this.instantiate(); + // The verifier can be used for a variety of ACIR programs so we should not assume that it + // is preloaded with the correct verification key. + await this.api.acirLoadVerificationKey(this.acirComposer, new RawBuffer(verificationKey)); + + return await this.api.acirVerifyProof(this.acirComposer, proof); + } + + /** @description Verifies a proof */ + async verifyUltrahonkProof(proof: Uint8Array, verificationKey: Uint8Array): Promise { + await this.instantiate(); + + return await this.api.acirVerifyUltraHonk(proof, new RawBuffer(verificationKey)); + } + + async destroy(): Promise { + if (!this.api) { + return; + } + await this.api.destroy(); + } +} diff --git a/barretenberg/ts/src/crs/net_crs.ts b/barretenberg/ts/src/crs/net_crs.ts index 7cca5c887ef..5411a73535b 100644 --- a/barretenberg/ts/src/crs/net_crs.ts +++ b/barretenberg/ts/src/crs/net_crs.ts @@ -21,6 +21,11 @@ export class NetCrs { } async downloadG1Data() { + // Skip the download if numPoints is 0 (would download the entire file due to bad range header otherwise) + if (this.numPoints === 0) { + return (this.data = new Uint8Array([])); + } + const g1End = this.numPoints * 64 - 1; const response = await fetch('https://aztec-ignition.s3.amazonaws.com/MAIN%20IGNITION/flat/g1.dat', { diff --git a/barretenberg/ts/src/index.ts b/barretenberg/ts/src/index.ts index 49ce2404202..a58a25203a0 100644 --- a/barretenberg/ts/src/index.ts +++ b/barretenberg/ts/src/index.ts @@ -1,3 +1,10 @@ export { Crs } from './crs/index.js'; -export { Barretenberg, BarretenbergSync } from './barretenberg/index.js'; +export { + BackendOptions, + Barretenberg, + BarretenbergSync, + BarretenbergVerifier, + UltraPlonkBackend, + UltraHonkBackend, +} from './barretenberg/index.js'; export { RawBuffer, Fr } from './types/index.js'; diff --git a/barretenberg/ts/src/main.ts b/barretenberg/ts/src/main.ts index 188db2733e0..b12c4e83f60 100755 --- a/barretenberg/ts/src/main.ts +++ b/barretenberg/ts/src/main.ts @@ -102,7 +102,7 @@ async function initClientIVC(bytecodePath: string, crsPath: string) { debug('loading BN254 and Grumpkin crs...'); // Plus 1 needed! (Move +1 into Crs?) const crs = await Crs.new(2 ** 18 + 1, crsPath); - const grumpkinCrs = await GrumpkinCrs.new(8192 + 1, crsPath); + const grumpkinCrs = await GrumpkinCrs.new(2 ** 14 + 1, crsPath); // Load CRS into wasm global CRS state. // TODO: Make RawBuffer be default behavior, and have a specific Vector type for when wanting length prefixed. diff --git a/barretenberg/ts/webpack.config.js b/barretenberg/ts/webpack.config.js index 25b55785b4f..6a809547b87 100644 --- a/barretenberg/ts/webpack.config.js +++ b/barretenberg/ts/webpack.config.js @@ -52,6 +52,9 @@ export default { ], resolve: { plugins: [new ResolveTypeScriptPlugin()], + fallback: { + "os": false + } }, devServer: { hot: false, diff --git a/bb-pilcom/bb-pil-backend/templates/circuit_builder.cpp.hbs b/bb-pilcom/bb-pil-backend/templates/circuit_builder.cpp.hbs index f657586caa7..53215800f86 100644 --- a/bb-pilcom/bb-pil-backend/templates/circuit_builder.cpp.hbs +++ b/bb-pilcom/bb-pil-backend/templates/circuit_builder.cpp.hbs @@ -10,33 +10,37 @@ #include "barretenberg/relations/generic_permutation/generic_permutation_relation.hpp" #include "barretenberg/relations/generic_lookup/generic_lookup_relation.hpp" #include "barretenberg/honk/proof_system/logderivative_library.hpp" +#include "barretenberg/numeric/bitop/get_msb.hpp" #include "barretenberg/vm/stats.hpp" namespace bb { {{name}}CircuitBuilder::ProverPolynomials {{name}}CircuitBuilder::compute_polynomials() const { - const auto num_rows = get_circuit_subgroup_size(); + const size_t num_rows = get_num_gates(); + const size_t circuit_subgroup_size = get_circuit_subgroup_size(); + ASSERT(num_rows <= circuit_subgroup_size); ProverPolynomials polys; // Allocate mem for each column AVM_TRACK_TIME("circuit_builder/init_polys_to_be_shifted", ({ for (auto& poly : polys.get_to_be_shifted()) { poly = Polynomial{ /*memory size*/ num_rows - 1, - /*largest possible index*/ num_rows, + /*largest possible index*/ circuit_subgroup_size, /*make shiftable with offset*/ 1 }; } })); // catch-all with fully formed polynomials - AVM_TRACK_TIME("circuit_builder/init_polys_unshifted", ({ - auto unshifted = polys.get_unshifted(); - bb::parallel_for(unshifted.size(), [&](size_t i) { - auto& poly = unshifted[i]; - if (poly.is_empty()) { - // Not set above - poly = Polynomial{ /*memory size*/ num_rows, /*largest possible index*/ num_rows }; - } - }); - })); + AVM_TRACK_TIME( + "circuit_builder/init_polys_unshifted", ({ + auto unshifted = polys.get_unshifted(); + bb::parallel_for(unshifted.size(), [&](size_t i) { + auto& poly = unshifted[i]; + if (poly.is_empty()) { + // Not set above + poly = Polynomial{ /*memory size*/ num_rows, /*largest possible index*/ circuit_subgroup_size }; + } + }); + })); AVM_TRACK_TIME( "circuit_builder/set_polys_unshifted", ({ @@ -72,7 +76,8 @@ bool {{name}}CircuitBuilder::check_circuit() const { }; auto polys = compute_polynomials(); - const size_t num_rows = polys.get_polynomial_size(); + // We'll only check up to the generated trace which might be << than the circuit subgroup size. + const size_t num_rows = get_num_gates(); // Checks that we will run. using SignalErrorFn = const std::function&; diff --git a/bb-pilcom/bb-pil-backend/templates/circuit_builder.hpp.hbs b/bb-pilcom/bb-pil-backend/templates/circuit_builder.hpp.hbs index 8b034e983b7..4e2cfec72a4 100644 --- a/bb-pilcom/bb-pil-backend/templates/circuit_builder.hpp.hbs +++ b/bb-pilcom/bb-pil-backend/templates/circuit_builder.hpp.hbs @@ -9,32 +9,39 @@ namespace bb { class {{name}}CircuitBuilder { - public: - using Flavor = bb::{{name}}Flavor; - using FF = Flavor::FF; - using Row = {{name}}FullRow; - - // TODO: template - using Polynomial = Flavor::Polynomial; - using ProverPolynomials = Flavor::ProverPolynomials; - - std::vector rows; - - void set_trace(std::vector&& trace) { rows = std::move(trace); } - - ProverPolynomials compute_polynomials() const; - - bool check_circuit() const; - - size_t get_num_gates() const { return rows.size(); } - - size_t get_circuit_subgroup_size() const - { - const size_t num_rows = get_num_gates(); - const auto num_rows_log2 = static_cast(numeric::get_msb64(num_rows)); - size_t num_rows_pow2 = 1UL << (num_rows_log2 + (1UL << num_rows_log2 == num_rows ? 0 : 1)); - return num_rows_pow2; - } + public: + // Do not use this constant directly, use get_circuit_subgroup_size() instead. + constexpr static size_t CIRCUIT_SUBGROUP_SIZE = 1 << 21; + + using Flavor = bb::{{name}}Flavor; + using FF = Flavor::FF; + using Row = {{name}}FullRow; + using Polynomial = Flavor::Polynomial; + using ProverPolynomials = Flavor::ProverPolynomials; + + void set_trace(std::vector&& trace) + { + rows = std::move(trace); + num_rows = rows.size(); + } + void clear_trace() + { + rows.clear(); + rows.shrink_to_fit(); + num_rows = 0; + } + + ProverPolynomials compute_polynomials() const; + + bool check_circuit() const; + + size_t get_num_gates() const { return num_rows; } + + size_t get_circuit_subgroup_size() const { return CIRCUIT_SUBGROUP_SIZE; } + + private: + size_t num_rows = 0; + std::vector rows; }; } // namespace bb \ No newline at end of file diff --git a/bb-pilcom/bb-pil-backend/templates/composer.cpp.hbs b/bb-pilcom/bb-pil-backend/templates/composer.cpp.hbs index 4486ab527f7..17b826f5c83 100644 --- a/bb-pilcom/bb-pil-backend/templates/composer.cpp.hbs +++ b/bb-pilcom/bb-pil-backend/templates/composer.cpp.hbs @@ -44,12 +44,8 @@ std::shared_ptr {{name}}Composer::compute_proving_key(Circui return proving_key; } - // Initialize proving_key - { - const size_t subgroup_size = circuit_constructor.get_circuit_subgroup_size(); - proving_key = std::make_shared(subgroup_size, 0); - } - + const size_t subgroup_size = circuit_constructor.get_circuit_subgroup_size(); + proving_key = std::make_shared(subgroup_size, 0); return proving_key; } diff --git a/bb-pilcom/bb-pil-backend/templates/composer.hpp.hbs b/bb-pilcom/bb-pil-backend/templates/composer.hpp.hbs index c91ddbe8fe3..870ca82595e 100644 --- a/bb-pilcom/bb-pil-backend/templates/composer.hpp.hbs +++ b/bb-pilcom/bb-pil-backend/templates/composer.hpp.hbs @@ -32,8 +32,6 @@ class {{name}}Composer { // The commitment key is passed to the prover but also used herein to compute the verfication key commitments std::shared_ptr commitment_key; - AggregationObjectPubInputIndices recursive_proof_public_input_indices; - bool contains_recursive_proof = false; bool computed_witness = false; {{name}}Composer() { crs_factory_ = bb::srs::get_bn254_crs_factory(); } diff --git a/bb-pilcom/bb-pil-backend/templates/flavor.hpp.hbs b/bb-pilcom/bb-pil-backend/templates/flavor.hpp.hbs index 0a9830d51c5..b14c281ae4b 100644 --- a/bb-pilcom/bb-pil-backend/templates/flavor.hpp.hbs +++ b/bb-pilcom/bb-pil-backend/templates/flavor.hpp.hbs @@ -13,6 +13,7 @@ #include "barretenberg/flavor/flavor.hpp" #include "barretenberg/vm/{{snakeCase name}}/generated/flavor_settings.hpp" +#include "barretenberg/vm/aztec_constants.hpp" // Relations {{#each relation_file_names as |r|}} @@ -102,6 +103,29 @@ class {{name}}Flavor { static constexpr bool has_zero_row = true; + static constexpr size_t NUM_FRS_COM = field_conversion::calc_num_bn254_frs(); + static constexpr size_t NUM_FRS_FR = field_conversion::calc_num_bn254_frs(); + + // After any circuit changes, hover `COMPUTED_AVM_PROOF_LENGTH_IN_FIELDS` in your IDE + // to see its value and then update `AVM_PROOF_LENGTH_IN_FIELDS` in constants.nr. + static constexpr size_t COMPUTED_AVM_PROOF_LENGTH_IN_FIELDS = + (NUM_WITNESS_ENTITIES + 2) * NUM_FRS_COM + (NUM_ALL_ENTITIES + 1) * NUM_FRS_FR + + CONST_PROOF_SIZE_LOG_N * (NUM_FRS_COM + NUM_FRS_FR * BATCHED_RELATION_PARTIAL_LENGTH); + + static_assert(AVM_PROOF_LENGTH_IN_FIELDS == COMPUTED_AVM_PROOF_LENGTH_IN_FIELDS, + "\nUnexpected AVM proof length. This might be due to some changes in the\n" + "AVM circuit layout. In this case, modify AVM_PROOF_LENGTH_IN_FIELDS \n" + "in constants.nr accordingly."); + + // VK is composed of + // - circuit size encoded as a fr field element + // - num of inputs encoded as a fr field element + // - NUM_PRECOMPUTED_ENTITIES commitments + static_assert(AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS == 2 * NUM_FRS_FR + NUM_PRECOMPUTED_ENTITIES * NUM_FRS_COM, + "\nUnexpected AVM VK length. This might be due to some changes in the\n" + "AVM circuit. In this case, modify AVM_VERIFICATION_LENGTH_IN_FIELDS \n" + "in constants.nr accordingly."); + template class PrecomputedEntities : public PrecomputedEntitiesBase { public: using DataType = DataType_; diff --git a/bb-pilcom/bb-pil-backend/templates/prover.cpp.hbs b/bb-pilcom/bb-pil-backend/templates/prover.cpp.hbs index c8eada2e506..66ca5eaba04 100644 --- a/bb-pilcom/bb-pil-backend/templates/prover.cpp.hbs +++ b/bb-pilcom/bb-pil-backend/templates/prover.cpp.hbs @@ -93,7 +93,6 @@ void {{name}}Prover::execute_log_derivative_inverse_commitments_round() { // Commit to all logderivative inverse polynomials for (auto [commitment, key_poly] : zip_view(witness_commitments.get_derived(), key->get_derived())) { - // We don't use commit_sparse here because the logderivative inverse polynomials are dense commitment = commitment_key->commit(key_poly); } diff --git a/bb-pilcom/bb-pil-backend/templates/verifier.cpp.hbs b/bb-pilcom/bb-pil-backend/templates/verifier.cpp.hbs index dbb2ad78685..b6a101ff1fd 100644 --- a/bb-pilcom/bb-pil-backend/templates/verifier.cpp.hbs +++ b/bb-pilcom/bb-pil-backend/templates/verifier.cpp.hbs @@ -1,6 +1,7 @@ // AUTOGENERATED FILE #include "barretenberg/vm/{{snakeCase name}}/generated/verifier.hpp" +#include "barretenberg/common/log.hpp" #include "barretenberg/vm/constants.hpp" #include "barretenberg/commitment_schemes/zeromorph/zeromorph.hpp" @@ -27,17 +28,9 @@ namespace bb { using FF = {{name}}Flavor::FF; // Evaluate the given public input column over the multivariate challenge points -[[maybe_unused]] inline FF evaluate_public_input_column(const std::vector& points, - const size_t circuit_size, - std::vector challenges) +inline FF AvmVerifier::evaluate_public_input_column(const std::vector& points, std::vector challenges) { - - // TODO(https://github.com/AztecProtocol/aztec-packages/issues/6361): we pad the points to the circuit size in order - // to get the correct evaluation. This is not efficient, and will not be valid in production. - std::vector new_points(circuit_size, 0); - std::copy(points.begin(), points.end(), new_points.data()); - - Polynomial polynomial(new_points); + Polynomial polynomial(points, key->circuit_size); return polynomial.evaluate_mle(challenges); } @@ -64,8 +57,8 @@ bool {{name}}Verifier::verify_proof(const HonkProof& proof, [[maybe_unused]] con CommitmentLabels commitment_labels; const auto circuit_size = transcript->template receive_from_prover("circuit_size"); - if (circuit_size != key->circuit_size) { + vinfo("Circuit size mismatch: expected", key->circuit_size, " got ", circuit_size); return false; } @@ -98,7 +91,8 @@ bool {{name}}Verifier::verify_proof(const HonkProof& proof, [[maybe_unused]] con sumcheck.verify(relation_parameters, alpha, gate_challenges); // If Sumcheck did not verify, return false - if (sumcheck_verified.has_value() && !sumcheck_verified.value()) { + if (!sumcheck_verified.has_value() || !sumcheck_verified.value()) { + vinfo("Sumcheck verification failed"); return false; } @@ -107,15 +101,15 @@ bool {{name}}Verifier::verify_proof(const HonkProof& proof, [[maybe_unused]] con multivariate_challenge.begin() + static_cast(log_circuit_size)); {{#each public_cols}} - FF {{col}}_evaluation = evaluate_public_input_column(public_inputs[{{idx}}], circuit_size, mle_challenge); + FF {{col}}_evaluation = evaluate_public_input_column(public_inputs[{{idx}}], mle_challenge); if ({{col}}_evaluation != claimed_evaluations.{{col}}) { + vinfo("{{col}}_evaluation failed"); return false; } {{/each}} // Execute ZeroMorph rounds. See https://hackmd.io/dlf9xEwhTQyE3hiGbq4FsA?view for a complete description of the // unrolled protocol. - auto opening_claim = ZeroMorph::verify(circuit_size, commitments.get_unshifted(), commitments.get_to_be_shifted(), @@ -126,8 +120,14 @@ bool {{name}}Verifier::verify_proof(const HonkProof& proof, [[maybe_unused]] con transcript); auto pairing_points = PCS::reduce_verify(opening_claim, transcript); - auto verified = key->pcs_verification_key->pairing_check(pairing_points[0], pairing_points[1]); - return sumcheck_verified.value() && verified; + auto zeromorph_verified = key->pcs_verification_key->pairing_check(pairing_points[0], pairing_points[1]); + + if (!zeromorph_verified) { + vinfo("ZeroMorph verification failed"); + return false; + } + + return true; } } // namespace bb diff --git a/bb-pilcom/bb-pil-backend/templates/verifier.hpp.hbs b/bb-pilcom/bb-pil-backend/templates/verifier.hpp.hbs index 951ea0b4275..40c6f0f891d 100644 --- a/bb-pilcom/bb-pil-backend/templates/verifier.hpp.hbs +++ b/bb-pilcom/bb-pil-backend/templates/verifier.hpp.hbs @@ -28,6 +28,9 @@ class {{name}}Verifier { std::shared_ptr key; std::map commitments; std::shared_ptr transcript; + + private: + FF evaluate_public_input_column(const std::vector& points, std::vector challenges); }; } // namespace bb \ No newline at end of file diff --git a/boxes/boxes/react/src/contracts/src/main.nr b/boxes/boxes/react/src/contracts/src/main.nr index d0fafea3250..6d5d4ecc830 100644 --- a/boxes/boxes/react/src/contracts/src/main.nr +++ b/boxes/boxes/react/src/contracts/src/main.nr @@ -1,18 +1,22 @@ +use dep::aztec::macros::aztec; + +#[aztec] contract BoxReact { use dep::aztec::{ keys::public_keys::{IvpkM, OvpkM}, prelude::{AztecAddress, PrivateMutable, Map, NoteInterface, NoteHeader, Point}, - encrypted_logs::encrypted_note_emission::encode_and_encrypt_note_with_keys + encrypted_logs::encrypted_note_emission::encode_and_encrypt_note_with_keys, + macros::{storage::storage, functions::{private, public, initializer}} }; - use dep::value_note::value_note::{ValueNote, VALUE_NOTE_LEN}; + use dep::value_note::value_note::ValueNote; - #[aztec(storage)] - struct Storage { - numbers: Map>, + #[storage] + struct Storage { + numbers: Map, Context>, } - #[aztec(private)] - #[aztec(initializer)] + #[private] + #[initializer] fn constructor( number: Field, owner: AztecAddress, @@ -25,7 +29,7 @@ contract BoxReact { numbers.at(owner).initialize(&mut new_number).emit(encode_and_encrypt_note_with_keys(&mut context, owner_ovpk_m, owner_ivpk_m, owner)); } - #[aztec(private)] + #[private] fn setNumber( number: Field, owner: AztecAddress, diff --git a/boxes/boxes/vanilla/src/contracts/src/main.nr b/boxes/boxes/vanilla/src/contracts/src/main.nr index 401a2c86989..f336c4ad841 100644 --- a/boxes/boxes/vanilla/src/contracts/src/main.nr +++ b/boxes/boxes/vanilla/src/contracts/src/main.nr @@ -1,18 +1,22 @@ +use dep::aztec::macros::aztec; + +#[aztec] contract Vanilla { use dep::aztec::{ keys::public_keys::{IvpkM, OvpkM}, prelude::{AztecAddress, PrivateMutable, Map, NoteInterface, NoteHeader, Point}, - encrypted_logs::encrypted_note_emission::encode_and_encrypt_note_with_keys + encrypted_logs::encrypted_note_emission::encode_and_encrypt_note_with_keys, + macros::{storage::storage, functions::{private, public, initializer}} }; use dep::value_note::value_note::{ValueNote, VALUE_NOTE_LEN}; - #[aztec(storage)] - struct Storage { - numbers: Map>, + #[storage] + struct Storage { + numbers: Map, Context>, } - #[aztec(private)] - #[aztec(initializer)] + #[private] + #[initializer] fn constructor( number: Field, owner: AztecAddress, @@ -25,7 +29,7 @@ contract Vanilla { numbers.at(owner).initialize(&mut new_number).emit(encode_and_encrypt_note_with_keys(&mut context, owner_ovpk_m, owner_ivpk_m, owner)); } - #[aztec(private)] + #[private] fn setNumber( number: Field, owner: AztecAddress, diff --git a/boxes/init/src/main.nr b/boxes/init/src/main.nr index 8e06a99f11c..7924ff03505 100644 --- a/boxes/init/src/main.nr +++ b/boxes/init/src/main.nr @@ -1,6 +1,9 @@ +use dep::aztec::macros::aztec; + +#[aztec] contract Main { - #[aztec(private)] - #[aztec(initializer)] + #[private] + #[initializer] fn constructor() { } } diff --git a/cspell.json b/cspell.json index b6110189f08..e405fe53f0b 100644 --- a/cspell.json +++ b/cspell.json @@ -269,6 +269,7 @@ "unprefixed", "unshield", "unshielding", + "unshields", "unzipit", "updateable", "upperfirst", diff --git a/docker-compose.provernet.yml b/docker-compose.provernet.yml index 7fdf67c3b6a..1084e28bf7b 100644 --- a/docker-compose.provernet.yml +++ b/docker-compose.provernet.yml @@ -32,7 +32,7 @@ services: SEQ_PUBLISHER_PRIVATE_KEY: "0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a" VALIDATOR_PRIVATE_KEY: "0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a" PROVER_REAL_PROOFS: "${PROVER_REAL_PROOFS:-false}" - ASSUME_PROVEN_UNTIL_BLOCK_NUMBER: "${ASSUME_PROVEN_UNTIL_BLOCK_NUMBER:-4}" + ASSUME_PROVEN_THROUGH_BLOCK_NUMBER: "${ASSUME_PROVEN_THROUGH_BLOCK_NUMBER:-4}" P2P_ENABLED: false IS_DEV_NET: true volumes: @@ -104,7 +104,7 @@ services: PROVER_AGENT_ENABLED: false PROVER_PUBLISHER_PRIVATE_KEY: "0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97" PROVER_REAL_PROOFS: "${PROVER_REAL_PROOFS:-false}" - ASSUME_PROVEN_UNTIL_BLOCK_NUMBER: "${ASSUME_PROVEN_UNTIL_BLOCK_NUMBER:-4}" + ASSUME_PROVEN_THROUGH_BLOCK_NUMBER: "${ASSUME_PROVEN_THROUGH_BLOCK_NUMBER:-4}" IS_DEV_NET: true volumes: - ./log/aztec-prover/:/usr/src/yarn-project/aztec/log:rw diff --git a/docs/HOW_WE_WRITE_DOCS.md b/docs/HOW_WE_WRITE_DOCS.md index b74cdb91b60..d81fe19a17a 100644 --- a/docs/HOW_WE_WRITE_DOCS.md +++ b/docs/HOW_WE_WRITE_DOCS.md @@ -20,13 +20,13 @@ The Aztec docs roughly follow the [Diataxis](https://diataxis.fr/) framework. It Every page will fall into **one type of doc**. If your contribution covers multiple types, you will need to split it into multiple pages. -#### Explainations +#### Explanations -These answer the questions "What is...?" and don't have any direct implications for what the reader does. It helps readers understand a concept. These can exist in both `Learn` and `Build` sections of the docs, depending on the context of the explanations. For example, a doc explaining UTXOs would sit in `Learn`, but explaining how Aztec.nr abstracts UTXOs would sit in `Build`. +These answer the question "What is...?" and don't have any direct implications for what the reader does. It helps readers understand a concept. These can exist in both `Learn` and `Build` sections of the docs, depending on the context of the explanations. For example, a doc explaining UTXOs would sit in `Learn`, but explaining how Aztec.nr abstracts UTXOs would sit in `Build`. #### Tutorials -These are follow-along experiences that guide the reader into building something. In the context of Aztec docs, these are generally project-oriented rather than feature-oriented. For example, a developer might learn how to build a private token rather than focusing on how to use a specific Aztec privacy feature. It does not expect too much prior knowledge from the developer, and does not expect that they have a goal in mind aside from learning. They currently only exist in `Build`. +These are follow-along experiences that guide the reader into building something. In the context of Aztec docs, these are generally project-oriented rather than feature-oriented. For example, a developer might learn how to build a private token rather than focusing on how to use a specific Aztec privacy feature. It does not expect too much prior knowledge from the developer and does not expect that they have a goal in mind aside from learning. They currently only exist in `Build`. #### How-tos @@ -34,7 +34,7 @@ These are guides for the reader to accomplish a specific goal. In the context of #### References -These are docs that developers can consult to know exact and succint information about a specific library or feature. In the case of Aztec, it usually consists of lists of callable functions, their parameters, and return types. Most Aztec references are autogenerated. They currently only exist in `Build`. +These are docs that developers can consult to know exact and succinct information about a specific library or feature. In the case of Aztec, it usually consists of lists of callable functions, their parameters, and return types. Most Aztec references are autogenerated. They currently only exist in `Build`. ## Tone @@ -46,9 +46,9 @@ These are docs that developers can consult to know exact and succint information ## Grammar -To keep docs consistent and easily-searchable, follow these grammar guidelines: +To keep docs consistent and easily searchable, follow these grammar guidelines: -* Write with American English +* Write in American English * When talking about ZK, use: * `zero knowledge` as the noun * `zero-knowledge` as the adjective @@ -67,7 +67,7 @@ Markdown links by file (with extension). Can be relative to current path (`./`, `../`), eg within a section, or absolute (relative to docs). [link1](https://docusaurus.io/docs/markdown-features/links), [link2](https://docusaurus.io/docs/versioning#link-docs-by-file-paths) -If you spot a broken url, ping us in discord or create an issue :) +If you spot a broken URL, ping us in Discord or create an issue :) ## Keywords diff --git a/docs/docs/aztec/concepts/accounts/authwit.md b/docs/docs/aztec/concepts/accounts/authwit.md index 182f0ee4bc2..e24d5a2057c 100644 --- a/docs/docs/aztec/concepts/accounts/authwit.md +++ b/docs/docs/aztec/concepts/accounts/authwit.md @@ -1,6 +1,8 @@ --- -title: Authentication Witness +title: Authentication Witness (Authwit) tags: [accounts, authwit] +importance: 1 +keywords: [authwit, authentication witness, accounts] --- Authentication Witness is a scheme for authenticating actions on Aztec, so users can allow third-parties (eg protocols or other users) to execute an action on their behalf. diff --git a/docs/docs/aztec/concepts/accounts/keys.md b/docs/docs/aztec/concepts/accounts/keys.md index 8024c6bb8d6..b20ae224227 100644 --- a/docs/docs/aztec/concepts/accounts/keys.md +++ b/docs/docs/aztec/concepts/accounts/keys.md @@ -25,23 +25,13 @@ Instead it's up to the account contract developer to implement it. ## Public keys retrieval -The keys can either be retrieved from a key registry contract or from the [Private eXecution Environment (PXE)](../pxe/index.md). - -:::note -The key registry is a canonical contract used to store user public keys. -Canonical in this context means that it is a contract whose functionality is essential for the protocol. -There is 1 key registry and its address is hardcoded in the protocol code. -::: - -To retrieve them a developer can use one of the getters in Aztec.nr: +The keys can be retrieved from the [Private eXecution Environment (PXE)](../pxe/index.md) using the following getter in Aztec.nr: ``` -fn get_current_public_keys(context: &mut PrivateContext, account: AztecAddress) -> PublicKeys; -fn get_historical_public_keys(historical_header: Header, account: AztecAddress) -> PublicKeys; +fn get_public_keys(account: AztecAddress) -> PublicKeys; ``` -If the keys are registered in the key registry these methods can be called without any setup. -If they are not there, it is necessary to first register the user as a recipient in our PXE. +It is necessary to first register the user as a recipient in our PXE, providing their public keys. First we need to get a hold of recipient's [complete address](#complete-address). Below are some ways how we could instantiate it after getting the information in a string form from a recipient: @@ -54,18 +44,6 @@ Then to register the recipient's [complete address](#complete-address) in PXE we During private function execution these keys are obtained via an oracle call from PXE. -## Key rotation - -To prevent users from needing to migrate all their positions if some of their keys are leaked we allow for key rotation. -Key rotation can be performed by calling the corresponding function on key registry. -E.g. for nullifier key: - -#include_code key-rotation /yarn-project/end-to-end/src/e2e_key_registry.test.ts rust - -Note that the notes directly contain `Npk_m`. -This means that it will be possible to nullify the notes with the same old key after the key rotation and attacker could still potentially steal them if there are no other guardrails in place (like for example account contract auth check). -These guardrails are typically in place so a user should not lose her notes even if this unfortunate accident happens. - ## Scoped keys To minimize damage of potential key leaks the keys are scoped (also called app-siloed) to the contract that requests them. @@ -180,7 +158,7 @@ An example of an escrow contract is a betting contract. In this scenario, both p The escrow would then release the reward only to the party that provides a "proof of winning". Because of the contract address derivation scheme it is possible to check that a given set of public keys corresponds to a given address just by trying to recompute it. -Since this is commonly needed to be done when sending a note to an account whose keys are not yet registered in the key registry contract we coined the term **complete address** for the collection of: +Since this is commonly needed to be done when sending a note to an account we coined the term **complete address** for the collection of: 1. all the user's public keys, 2. partial address, @@ -188,8 +166,3 @@ Since this is commonly needed to be done when sending a note to an account whose Once the complete address is shared with the sender, the sender can check that the address was correctly derived from the public keys and partial address and then send the notes to that address. Because of this it is possible to send a note to an account whose account contract was not yet deployed. - -:::note -Note that since the individual [keys can be rotated](#key-rotation) complete address is used only for non-registered accounts. -For registered accounts key registry is always the source of truth. -::: diff --git a/docs/docs/aztec/concepts/communication/cross_chain_calls.md b/docs/docs/aztec/concepts/communication/cross_chain_calls.md new file mode 100644 index 00000000000..a65573ac251 --- /dev/null +++ b/docs/docs/aztec/concepts/communication/cross_chain_calls.md @@ -0,0 +1,156 @@ +--- +id: portals +title: L1 <--> L2 communication (Portals) +description: "This page is a conceptual introduction to Portals, how Aztec communicates with L1 (Ethereum)" +keywords: [portals] +tags: [portals, protocol, ethereum] +importance: 1 +--- + +# L1-L2 Communication (Portals) + +import Image from "@theme/IdealImage"; + +In Aztec, what we call _portals_ are the key element in facilitating communication between L1 and L2. While typical L2 solutions rely on synchronous communication with L1, Aztec's privacy-first nature means this is not possible. You can learn more about why in the previous section. + +Traditional L1 \<-\> L2 communication might involve direct calls between L2 nd L1 contracts. However, in Aztec, due to the privacy components and the way transactions are processed (kernel proofs built on historical data), direct calls between L1 and L2 would not be possible if we want to maintain privacy. + +Portals are the solution to this problem, acting as bridges for communication between the two layers. These portals can transmit messages from public functions in L1 to private functions in L2 and vice versa, thus enabling messaging while maintaining privacy. + +This page covers: + +- How portals enable privacy communication between L1 and L2 +- How messages are sent, received, and processed +- Message Boxes and how they work +- How and why linking of contracts between L1 and L2 occurs + +## Objective + +The goal is to set up a minimal-complexity mechanism, that will allow a base-layer (L1) and the Aztec Network (L2) to communicate arbitrary messages such that: + +- L2 functions can `call` L1 functions. +- L1 functions can `call` L2 functions. +- The rollup-block size have a limited impact by the messages and their size. + +## High Level Overview + +This document will contain communication abstractions that we use to support interaction between _private_ functions, _public_ functions and Layer 1 portal contracts. + +Fundamental restrictions for Aztec: + +- L1 and L2 have very different execution environments, stuff that is cheap on L1 is most often expensive on L2 and vice versa. As an example, `keccak256` is cheap on L1, but very expensive on L2. +- _Private_ function calls are fully "prepared" and proven by the user, which provides the kernel proof along with commitments and nullifiers to the sequencer. +- _Public_ functions altering public state (updatable storage) must be executed at the current "head" of the chain, which only the sequencer can ensure, so these must be executed separately to the _private_ functions. +- _Private_ and _public_ functions within Aztec are therefore ordered such that first _private_ functions are executed, and then _public_. For a more detailed description of why, see above. +- Messages are consumables, and can only be consumed by the recipient. See [Message Boxes](#message-boxes) for more information. + +With the aforementioned restrictions taken into account, cross-chain messages can be operated in a similar manner to when _public_ functions must transmit information to _private_ functions. In such a scenario, a "message" is created and conveyed to the recipient for future use. It is worth noting that any call made between different domains (_private, public, cross-chain_) is unilateral in nature. In other words, the caller is unaware of the outcome of the initiated call until told when some later rollup is executed (if at all). This can be regarded as message passing, providing us with a consistent mental model across all domains, which is convenient. + +As an illustration, suppose a private function adds a cross-chain call. In such a case, the private function would not have knowledge of the result of the cross-chain call within the same rollup (since it has yet to be executed). + +Similarly to the ordering of private and public functions, we can also reap the benefits of intentionally ordering messages between L1 and L2. When a message is sent from L1 to L2, it has been "emitted" by an action in the past (an L1 interaction), allowing us to add it to the list of consumables at the "beginning" of the block execution. This practical approach means that a message could be consumed in the same block it is included. In a sophisticated setup, rollup $n$ could send an L2 to L1 message that is then consumed on L1, and the response is added already in $n+1$. However, messages going from L2 to L1 will be added as they are emitted. + +:::info +Because everything is unilateral and async, the application developer have to explicitly handle failure cases such that user can gracefully recover. Example where recovering is of utmost importance is token bridges, where it is very inconvenient if the locking of funds on one domain occur, but never the minting or unlocking on the other. +::: + +## Components + +### Portal + +A "portal" refers to the part of an application residing on L1, which is associated with a particular L2 address (the confidential part of the application). It could be a contract or even an EOA on L1. + +### Message Boxes + +In a logical sense, a Message Box functions as a one-way message passing mechanism with two ends, one residing on each side of the divide, i.e., one component on L1 and another on L2. Essentially, these boxes are utilized to transmit messages between L1 and L2 via the rollup contract. The boxes can be envisaged as multi-sets that enable the same message to be inserted numerous times, a feature that is necessary to accommodate scenarios where, for instance, "deposit 10 eth to A" is required multiple times. The diagram below provides a detailed illustration of how one can perceive a message box in a logical context. + + + +- Here, a `sender` will insert a message into the `pending` set, the specific constraints of the actions depend on the implementation domain, but for now, say that anyone can insert into the pending set. +- At some point, a rollup will be executed, in this step messages are "moved" from pending on Domain A, to ready on Domain B. Note that consuming the message is "pulling & deleting" (or nullifying). The action is atomic, so a message that is consumed from the pending set MUST be added to the ready set, or the state transition should fail. A further constraint on moving messages along the way, is that only messages where the `sender` and `recipient` pair exists in a leaf in the contracts tree are allowed! +- When the message has been added to the ready set, the `recipient` can consume the message as part of a function call. + +A difference when compared to other cross-chain setups, is that Aztec is "pulling" messages, and that the message doesn't need to be calldata for a function call. For other rollups, execution is happening FROM the "message bridge", which then calls the L1 contract. For Aztec, you call the L1 contract, and it should then consume messages from the message box. + +Why? _Privacy_! When pushing, we would be needing full `calldata`. Which for functions with private inputs is not really something we want as that calldata for L1 -> L2 transactions are committed to on L1, e.g., publicly sharing the inputs to a private function. + +By instead pulling, we can have the "message" be something that is derived from the arguments instead. This way, a private function to perform second half of a deposit, leaks the "value" deposited and "who" made the deposit (as this is done on L1), but the new owner can be hidden on L2. + +To support messages in both directions we require two of these message boxes (one in each direction). However, due to the limitations of each domain, the message box for sending messages into the rollup and sending messages out are not fully symmetrical. In reality, the setup looks closer to the following: + + + +:::info +The L2 -> L1 pending messages set only exist logically, as it is practically unnecessary. For anything to happen to the L2 state (e.g., update the pending messages), the state will be updated on L1, meaning that we could just as well insert the messages directly into the ready set. +::: + +### Rollup Contract + +The rollup contract has a few very important responsibilities. The contract must keep track of the _L2 rollup state root_, perform _state transitions_ and ensure that the data is available for anyone else to synchronize to the current state. + +To ensure that _state transitions_ are performed correctly, the contract will derive public inputs for the **rollup circuit** based on the input data, and then use a _verifier_ contract to validate that inputs correctly transition the current state to the next. All data needed for the public inputs to the circuit must be from the rollup block, ensuring that the block is available. For a valid proof, the _rollup state root_ is updated and it will emit an _event_ to make it easy for anyone to find the data. + +As part of _state transitions_ where cross-chain messages are included, the contract must "move" messages along the way, e.g., from "pending" to "ready". + +### Kernel Circuit + +For L2 to L1 messages, the public inputs of a user-proof will contain a dynamic array of messages to be added, of size at most `MAX_MESSAGESTACK_DEPTH`, limited to ensure it is not impossible to include the transaction. The circuit must ensure, that all messages have a `sender/recipient` pair, and that those pairs exist in the contracts tree and that the `sender` is the L2 contract that actually emitted the message. +For consuming L1 to L2 messages the circuit must create proper nullifiers. + +### Rollup Circuit + +The rollup circuit must ensure that, provided two states $S$ and $S'$ and the rollup block $B$, applying $B$ to $S$ using the transition function must give us $S'$, e.g., $T(S, B) \mapsto S'$. If this is not the case, the constraints are not satisfied. + +For the sake of cross-chain messages, this means inserting and nullifying L1 $\rightarrow$ L2 in the trees, and publish L2 $\rightarrow$ L1 messages on chain. These messages should only be inserted if the `sender` and `recipient` match an entry in the contracts leaf (as checked by the kernel). + +### Messages + +While a message could theoretically be arbitrarily long, we want to limit the cost of the insertion on L1 as much as possible. Therefore, we allow the users to send 32 bytes of "content" between L1 and L2. If 32 suffices, no packing required. If the 32 is too "small" for the message directly, the sender should simply pass along a `sha256(content)` instead of the content directly (note that this hash should fit in a field element which is ~254 bits. More info on this below). The content can then either be emitted as an event on L2 or kept by the sender, who should then be the only entity that can "unpack" the message. +In this manner, there is some way to "unpack" the content on the receiving domain. + +The message that is passed along, require the `sender/recipient` pair to be communicated as well (we need to know who should receive the message and be able to check). By having the pending messages be a contract on L1, we can ensure that the `sender = msg.sender` and let only `content` and `recipient` be provided by the caller. Summing up, we can use the struct's seen below, and only store the commitment (`sha256(LxToLyMsg)`) on chain or in the trees, this way, we need only update a single storage slot per message. + +```solidity +struct L1Actor { + address: actor, + uint256: chainId, +} + +struct L2Actor { + bytes32: actor, + uint256: version, +} + +struct L1ToL2Msg { + L1Actor: sender, + L2Actor: recipient, + bytes32: content, + bytes32: secretHash, +} + +struct L2ToL1Msg { + L2Actor: sender, + L1Actor: recipient, + bytes32: content, +} +``` + +:::info +The `bytes32` elements for `content` and `secretHash` hold values that must fit in a field element (~ 254 bits). +::: + +:::info +The nullifier computation should include the index of the message in the message tree to ensure that it is possible to send duplicate messages (e.g., 2 x deposit of 500 dai to the same account). + +To make it possible to hide when a specific message is consumed, the `L1ToL2Msg` is extended with a `secretHash` field, where the `secretPreimage` is used as part of the nullifier computation. This way, it is not possible for someone just seeing the `L1ToL2Msg` on L1 to know when it is consumed on L2. +::: + +## Combined Architecture + +The following diagram shows the overall architecture, combining the earlier sections. + + + +## Learn more + +Check out the [protocol specs](../../../protocol-specs/l1-smart-contracts#portals) for more information about cross-chain communication and contracts on L1. diff --git a/docs/docs/aztec/concepts/communication/index.md b/docs/docs/aztec/concepts/communication/index.md new file mode 100644 index 00000000000..2174e4e6836 --- /dev/null +++ b/docs/docs/aztec/concepts/communication/index.md @@ -0,0 +1,12 @@ +--- +title: Communication +sidebar_position: 5 +--- + +## Cross-chain communication + +See [L1 \<--\> L2 communication (Portals)](./cross_chain_calls.md) for information about how Aztec communications with L1 (Ethereum) through Portals. + +## Private / Public execution + +For in-depth information about how private and public functions can call each other, read the [Smart Contracts section](../../smart_contracts/functions/public_private_calls.md). diff --git a/docs/docs/aztec/concepts/pxe/index.md b/docs/docs/aztec/concepts/pxe/index.md index 8192327b278..6e54b1ed354 100644 --- a/docs/docs/aztec/concepts/pxe/index.md +++ b/docs/docs/aztec/concepts/pxe/index.md @@ -2,6 +2,8 @@ title: Private Execution Environment (PXE) sidebar_position: 6 tags: [PXE] +keywords: [pxe, private execution environment] +importance: 1 --- The Private Execution Environment (or PXE, pronounced 'pixie') is a client-side library for the execution of private operations. It is a TypeScript library and can be run within Node, such as when you run the sandbox. In the future it could be run inside wallet software or a browser. diff --git a/docs/docs/aztec/concepts/state_model/index.md b/docs/docs/aztec/concepts/state_model/index.md index 914ccf51ae5..d256ef0996f 100644 --- a/docs/docs/aztec/concepts/state_model/index.md +++ b/docs/docs/aztec/concepts/state_model/index.md @@ -33,16 +33,6 @@ This is achieved with two main features: 1. Users sign over transactions, not over specific UTXO's 2. Aztec.nr contracts support developer defined `unconstrained` getter functions to help dApp's make sense of UTXO's. e.g `getBalance()`. These functions can be called outside of a transaction context to read private state. -## To be documented soon - -- The lifecycle of a note -- Custom notes -- Injection of data by the kernel -- Nonce & contract address -- Custom nullifiers -- Emission of custom note data to L1 -- Decrypting and storing encrypted note data - ## Further reading Read more about how to leverage the Aztec state model in Aztec contracts [here](../storage/index.md). diff --git a/docs/docs/aztec/concepts/storage/partial_notes.md b/docs/docs/aztec/concepts/storage/partial_notes.md index 7a72ef21814..1d21c0b227f 100644 --- a/docs/docs/aztec/concepts/storage/partial_notes.md +++ b/docs/docs/aztec/concepts/storage/partial_notes.md @@ -134,9 +134,9 @@ Then we just emit `P_a.x` and `P_b.x` as a note hashes, and we're done! [`NoteInterface.nr`](https://github.com/AztecProtocol/aztec-packages/blob/#include_aztec_version/noir-projects/aztec-nr/aztec/src/note/note_interface.nr) implements `compute_note_hiding_point`, which takes a note and computes the point "hides" it. -This is implemented in the example token contract: +This is implemented by applying the `partial_note` attribute: -#include_code compute_note_hiding_point noir-projects/noir-contracts/contracts/token_contract/src/types/token_note.nr rust +#include_code TokenNote noir-projects/noir-contracts/contracts/token_contract/src/types/token_note.nr rust Those `G_x` are generators that generated [here](https://github.com/AztecProtocol/aztec-packages/blob/#include_aztec_version/noir-projects/noir-projects/aztec-nr/aztec/src/generators.nr). Anyone can use them for separating different fields in a "partial note". diff --git a/docs/docs/aztec/concepts/transactions.md b/docs/docs/aztec/concepts/transactions.md index 57b947bfbaf..6f75a98d412 100644 --- a/docs/docs/aztec/concepts/transactions.md +++ b/docs/docs/aztec/concepts/transactions.md @@ -49,7 +49,7 @@ Transactions on Aztec start with a call from Aztec.js, which creates a request c See [this diagram](https://raw.githubusercontent.com/AztecProtocol/aztec-packages/2fa143e4d88b3089ebbe2a9e53645edf66157dc8/docs/static/img/sandbox_sending_a_tx.svg) for a more detailed overview of the transaction execution process. It highlights 3 different types of transaction execution: contract deployments, private transactions and public transactions. -See the page on [contract communication](../smart_contracts/communication/index.md) for more context on transaction execution. +See the page on [contract communication](../smart_contracts/functions/public_private_calls.md) for more context on transaction execution. ### Enabling Transaction Semantics: The Aztec Kernel diff --git a/docs/docs/aztec/concepts/wallets/index.md b/docs/docs/aztec/concepts/wallets/index.md index c8550e418c0..790db2cd1f9 100644 --- a/docs/docs/aztec/concepts/wallets/index.md +++ b/docs/docs/aztec/concepts/wallets/index.md @@ -28,7 +28,7 @@ Note that users must be able to receive funds in Aztec before deploying their ac Every transaction in Aztec is broadcast to the network as a zero-knowledge proof of correct execution, in order to preserve privacy. This means that transaction proofs are generated on the wallet and not on a remote node. This is one of the biggest differences with regard to EVM chain wallets. -A wallet is responsible for **creating** an _execution request_ out of one or more _function calls_ requested by a dapp. For example, a dapp may request a wallet to "invoke the `transfer` function on the contract at `0x1234` with the following arguments", in response to a user action. The wallet [turns that into an execution request](../../../protocol-specs/transactions/local-execution.md#execution-request) with the signed instructions to execute that function call from the user's account contract. In an [ECDSA-based account](https://github.com/AztecProtocol/aztec-packages/blob/master/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr), for instance, this is an execution request that encodes the function call in the _entrypoint payload_, and includes its ECDSA signature with the account's signing private key. +A wallet is responsible for **creating** an _execution request_ out of one or more _function calls_ requested by a dapp. For example, a dapp may request a wallet to "invoke the `transfer` function on the contract at `0x1234` with the following arguments", in response to a user action. The wallet [turns that into an execution request](../../../protocol-specs/transactions/local-execution.md#execution-request) with the signed instructions to execute that function call from the user's account contract. In an [ECDSA-based account](https://github.com/AztecProtocol/aztec-packages/blob/master/noir-projects/noir-contracts/contracts/ecdsa_k_account_contract/src/main.nr), for instance, this is an execution request that encodes the function call in the _entrypoint payload_, and includes its ECDSA signature with the account's signing private key. Once the _execution request_ is created, the wallet is responsible for **simulating** and **proving** the execution of its private functions. The simulation yields an execution trace, which can be used to provide the user with a list of side effects of the private execution of the transaction. During this simulation, the wallet is responsible of providing data to the virtual machine, such as private notes, encryption keys, or nullifier secrets. This execution trace is fed into the prover, which returns a zero-knowledge proof that guarantees correct execution and hides all private information. The output of this process is a [_transaction object_](../../../protocol-specs/transactions/tx-object.md). diff --git a/docs/docs/aztec/glossary/call_types.md b/docs/docs/aztec/glossary/call_types.md index efd977d48cb..0e080b38335 100644 --- a/docs/docs/aztec/glossary/call_types.md +++ b/docs/docs/aztec/glossary/call_types.md @@ -178,7 +178,7 @@ This is used to get a result out of an execution, either private or public. It c #include_code public_getter /noir-projects/noir-contracts/contracts/auth_contract/src/main.nr rust -#include_code simulate_public_getter yarn-project/end-to-end/src/e2e_auth_contract.test.ts typescript +#include_code simulate_function yarn-project/end-to-end/src/composed/docs_examples.test.ts typescript :::warning No correctness is guaranteed on the result of `simulate`! Correct execution is entirely optional and left up to the client that handles this request. diff --git a/docs/docs/aztec/overview.md b/docs/docs/aztec/overview.md index 06150ec4ded..32a353fa80e 100644 --- a/docs/docs/aztec/overview.md +++ b/docs/docs/aztec/overview.md @@ -130,9 +130,9 @@ Explore the Concepts for a deeper understanding into the components that make up ### Start coding
- + -

Developer quickstart

+

Developer Getting Started Guide

Follow the getting started guide to start developing with the Aztec Sandbox diff --git a/docs/docs/aztec/smart_contracts/communication/index.md b/docs/docs/aztec/smart_contracts/communication/index.md deleted file mode 100644 index 1b1aa003d7f..00000000000 --- a/docs/docs/aztec/smart_contracts/communication/index.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Contract Communication -sidebar_position: 5 ---- - -## Private / Public execution - -See [Private \<--\> Public execution](./public_private_calls.md) for information about how Aztec contracts pass information between these execution contexts. - -## Cross-chain communication - -Read the protocol specification about Cross-chain communication between Aztec and Ethereum [here](../communication/index.md). diff --git a/docs/docs/aztec/smart_contracts/functions/inner_workings.md b/docs/docs/aztec/smart_contracts/functions/inner_workings.md index 600707ccb79..dc72805ea2c 100644 --- a/docs/docs/aztec/smart_contracts/functions/inner_workings.md +++ b/docs/docs/aztec/smart_contracts/functions/inner_workings.md @@ -1,6 +1,6 @@ --- title: Inner Workings of Functions and Macros -sidebar_position: 3 +sidebar_position: 4 tags: [functions] --- @@ -79,14 +79,14 @@ This function takes the application context, and converts it into the `PrivateCi Unconstrained functions are an underlying part of Noir. In short, they are functions which are not directly constrained and therefore should be seen as un-trusted. That they are un-trusted means that the developer must make sure to constrain their return values when used. Note: Calling an unconstrained function from a private function means that you are injecting unconstrained values. -Defining a function as `unconstrained` tells Aztec to simulate it completely client-side in the [ACIR simulator](../../../aztec/concepts/pxe/index.md) without generating proofs. They are useful for extracting information from a user through an [oracle](../oracles/index.md). +Defining a function as `unconstrained` tells Aztec to simulate it completely client-side in the [ACIR simulator](../../concepts/pxe/index.md) without generating proofs. They are useful for extracting information from a user through an [oracle](../oracles/index.md). When an unconstrained function is called, it prompts the ACIR simulator to 1. generate the execution environment 2. execute the function within this environment -To generate the environment, the simulator gets the blockheader from the [PXE database](../../../aztec/concepts/pxe/index.md#database) and passes it along with the contract address to `ViewDataOracle`. This creates a context that simulates the state of the blockchain at a specific block, allowing the unconstrained function to access and interact with blockchain data as it would appear in that block, but without affecting the actual blockchain state. +To generate the environment, the simulator gets the blockheader from the [PXE database](../../concepts/pxe/index.md#database) and passes it along with the contract address to `ViewDataOracle`. This creates a context that simulates the state of the blockchain at a specific block, allowing the unconstrained function to access and interact with blockchain data as it would appear in that block, but without affecting the actual blockchain state. Once the execution environment is created, `execute_unconstrained_function` is invoked: @@ -122,22 +122,19 @@ To create a public function you can annotate it with the `#[aztec(public)]` attr Under the hood: - Context Creation: The macro inserts code at the beginning of the function to create a`PublicContext` object: + ```rust -let mut context = PublicContext::new(inputs); +let mut context = PublicContext::new(args_hasher); ``` + This context provides access to public state and transaction information -- Function Signature Modification: The macro modifies the function signature to include a `PublicContextInputs` parameter: -```rust -fn function_name(inputs: PublicContextInputs, ...other_params) -> ReturnType -``` -- Return Type Transformation: For functions that return a value, the macro wraps the return type in a `PublicCircuitPublicInputs` struct: -```rust --> protocol_types::abis::public_circuit_public_inputs::PublicCircuitPublicInputs -``` + - Storage Access: If the contract has a storage struct defined, the macro inserts code to initialize the storage: + ```rust let storage = Storage::init(&mut context); ``` + - Function Body Wrapping: The original function body is wrapped in a new scope that handles the context and return value - Visibility Control: The function is marked as pub, making it accessible from outside the contract. - Unconstrained Execution: Public functions are marked as unconstrained, meaning they don't generate proofs and are executed directly by the sequencer. @@ -206,7 +203,6 @@ When a struct is annotated with `#[aztec(note)]`, the Aztec macro applies a seri 6. **Export Information**: The note type and its ID are automatically exported - ### Before expansion Here is how you could define a custom note: @@ -250,7 +246,7 @@ impl CustomNote { fn compute_note_hiding_point(self: CustomNote) -> Point { aztec::hash::pedersen_commitment( - self.serialize_content(), + self.serialize_content(), aztec::protocol_types::constants::GENERATOR_INDEX__NOTE_HIDING_POINT ) } @@ -291,6 +287,7 @@ struct CustomNoteProperties { owner: aztec::note::note_getter_options::PropertySelector, } ``` + Key things to keep in mind: - Developers can override any of the auto-generated methods by specifying a note interface @@ -360,7 +357,6 @@ Key things to keep in mind: - `Map` types and private `Note` types always occupy a single storage slot ## Further reading + - [How do macros work](./inner_workings.md) - [Macros reference](../../../reference/developer_references/smart_contract_reference/macros.md) - - diff --git a/docs/docs/aztec/smart_contracts/communication/public_private_calls.md b/docs/docs/aztec/smart_contracts/functions/public_private_calls.md similarity index 99% rename from docs/docs/aztec/smart_contracts/communication/public_private_calls.md rename to docs/docs/aztec/smart_contracts/functions/public_private_calls.md index 027c5d17b01..bf872794353 100644 --- a/docs/docs/aztec/smart_contracts/communication/public_private_calls.md +++ b/docs/docs/aztec/smart_contracts/functions/public_private_calls.md @@ -1,7 +1,10 @@ --- title: Private <> Public Communication +sidebar_position: 3 +tags: [functions] --- + import Image from "@theme/IdealImage"; import Disclaimer from "@site/src/components/Disclaimers/\_wip_disclaimer.mdx"; diff --git a/docs/docs/guides/developer_guides/getting_started.md b/docs/docs/guides/developer_guides/getting_started.md new file mode 100644 index 00000000000..5fa6e910b26 --- /dev/null +++ b/docs/docs/guides/developer_guides/getting_started.md @@ -0,0 +1,272 @@ +--- +title: Getting Started +sidebar_position: 0 +tags: [sandbox] +--- + +This guide will teach you how to install the Aztec sandbox, run it using the Aztec CLI, and interact with contracts using the wallet CLI. + +The Sandbox is an Aztec network running fully on your machine, and interacting with a development Ethereum node. You can develop and deploy on it just like on a testnet or mainnet. + +## Prerequisites + +You need two global dependencies iyour machine: + +- Node.js >= v18 (recommend installing with [nvm](https://github.com/nvm-sh/nvm)) +- Docker (visit [this page of the Docker docs](https://docs.docker.com/get-docker/) on how to install it) + +## Install and run the sandbox + +### Start Docker + +Docker needs to be running in order to install the sandbox. Find instructions on the [Docker website](https://docs.docker.com/get-started/). + +### Install the sandbox + +Run: + +```bash +bash -i <(curl -s https://install.aztec.network) +``` + +This will install the following tools: + +- **aztec** - launches various infrastructure subsystems (full sandbox, sequencer, prover, pxe, etc) and provides utility commands to interact with the network +- **aztec-nargo** - aztec's build of nargo, the noir compiler toolchain. +- **aztec-up** - a tool to upgrade the aztec toolchain to the latest, or specific versions. +- **aztec-wallet** - a tool for interacting with the aztec network + +### Start the sandbox + +Once these have been installed, to start the sandbox, run: + +```bash +aztec start --sandbox +``` + +**Congratulations, you have just installed and run the Aztec Sandbox!** + +```bash + /\ | | + / \ ___| |_ ___ ___ + / /\ \ |_ / __/ _ \/ __| + / ____ \ / /| || __/ (__ + /_/___ \_\/___|\__\___|\___| + +``` + +In the terminal, you will see some logs: + +1. Sandbox version +2. Contract addresses of rollup contracts +3. PXE (private execution environment) setup logs +4. Initial accounts that are shipped with the sandbox and can be used in tests + +You'll know the sandbox is ready to go when you see something like this: + +```bash +[INFO] Aztec Server listening on port 8080 +``` + +## Creating an account in the sandbox + +Now you have the sandbox running, let's create an account. For the next steps, we will use the wallet CLI. Open a new terminal window and run: + +```bash +aztec-wallet create-account -a my-wallet +``` + +This will create a new wallet with an account and give it the alias `my-wallet`. This will let us reference it with `accounts:my-wallet`. You will see logs telling you the address, public key, secret key, and more. + +On successful depoyment of the account, you should see something like this: + +```bash +New account: + +Address: 0x066108a2398e3e2ff53ec4b502e4c2e778c6de91bb889de103d5b4567530d99c +Public key: 0x007343da506ea513e6c05ba4d5e92e3c682333d97447d45db357d05a28df0656181e47a6257e644c3277c0b11223b28f2b36c94f9b0a954523de61ac967b42662b60e402f55e3b7384ba61261335040fe4cd52cb0383f559a36eeea304daf67d1645b06c38ee6098f90858b21b90129e7e1fdc4666dd58d13ef8fab845b2211906656d11b257feee0e91a42cb28f46b80aabdc70baad50eaa6bb2c5a7acff4e30b5036e1eb8bdf96fad3c81e63836b8aa39759d11e1637bd71e3fc76e3119e500fbcc1a22e61df8f060004104c5a75b52a1b939d0f315ac29013e2f908ca6bc50529a5c4a2604c754d52c9e7e3dee158be21b7e8008e950991174e2765740f58 +Secret key: 0x1c94f8b19e91d23fd3ab6e15f7891fde7ba7cae01d3fa94e4c6afb4006ec0cfb +Partial address: 0x2fd6b540a6bb129dd2c05ff91a9c981fb5aa2ac8beb4268f10b3aa5fb4a0fcd1 +Salt: 0x0000000000000000000000000000000000000000000000000000000000000000 +Init hash: 0x28df95b579a365e232e1c63316375c45a16f6a6191af86c5606c31a940262db2 +Deployer: 0x0000000000000000000000000000000000000000000000000000000000000000 + +Waiting for account contract deployment... +Deploy tx hash: 0a632ded6269bda38ad6b54cd49bef033078218b4484b902e326c30ce9dc6a36 +Deploy tx fee: 200013616 +Account stored in database with aliases last & my-wallet +``` + +You can double check by running `aztec-wallet get-alias accounts:my-wallet`. + +With this new account, let's get some local test tokens! + +## Deploying a contract + +The sandbox comes with some contracts that you can deploy and play with. One of these is an example token contract. + +Deploy it with this: + +```bash +aztec-wallet deploy TokenContractArtifact --from accounts:my-wallet --args accounts:my-wallet TestToken TST 18 -a testtoken +``` + +This takes + +- the contract artifact as the argument, which is `TokenContractArtifact` +- the deployer account, which we aliased as `my-wallet` +- the args that the contract constructor takes, which is the `admin` (`accounts:my-wallet`), `name` (`TestToken`), `symbol` (`TST`), and `decimals` (`18`). +- an alias `testtoken` (`-a`) so we can easily reference it later with `contracts:testtoken` + +On successful deployment, you should see something like this: + +```bash +aztec:wallet [INFO] Using wallet with address 0x066108a2398e3e2ff53ec4b502e4c2e778c6de91bb889de103d5b4567530d99c +0ms +Contract deployed at 0x15ce68d4be65819fe9c335132f10643b725a9ebc7d86fb22871f6eb8bdbc3abd +Contract partial address 0x25a91e546590d77108d7b184cb81b0a0999e8c0816da1a83a2fa6903480ea138 +Contract init hash 0x0abbaf0570bf684da355bd9a9a4b175548be6999625b9c8e0e9775d140c78506 +Deployment tx hash: 0a8ccd1f4e28092a8fa4d1cb85ef877f8533935c4e94b352a38af73eee17944f +Deployment salt: 0x266295eb5da322aba96fbb24f9de10b2ba01575dde846b806f884f749d416707 +Deployment fee: 200943060 +Contract stored in database with aliases last & testtoken +``` + +In the next step, let's mint some tokens! + +## Minting public tokens + +Call the public mint function like this: + +```bash +aztec-wallet send mint_public --from accounts:my-wallet --contract-address testtoken --args accounts:my-wallet 100 +``` + +This takes + +- the function name as the argument, whcih is `mint_public` +- the `from` account (caller) which is `accounts:my-wallet` +- the contract address, which is alised as `contracts:testtoken` +- the args that the function takes, which is the account to mint the tokens into (`my-wallet`), and `amount` (`100`). + +This only works because we are using the secret key of the admin who has permissions to mint. + +A successful call should print something like this: + +```bash +aztec:wallet [INFO] Using wallet with address 0x066108a2398e3e2ff53ec4b502e4c2e778c6de91bb889de103d5b4567530d99c +0ms +Maximum total tx fee: 1161660 +Estimated total tx fee: 116166 +Estimated gas usage: da=1127,l2=115039,teardownDA=0,teardownL2=0 + +Transaction hash: 2ac383e8e2b68216cda154b52e940207a905c1c38dadba7a103c81caacec403d +Transaction has been mined + Tx fee: 200106180 + Status: success + Block number: 17 + Block hash: 1e27d200600bc45ab94d467c230490808d1e7d64f5ee6cee5e94a08ee9580809 +Transaction hash stored in database with aliases last & mint_public-9044 +``` + +You can double-check by calling the function that checks your public account balance: + +```bash +aztec-wallet simulate balance_of_public --from my-wallet --contract-address testtoken --args accounts:my-wallet +``` + +This should print + +```bash +Simulation result: 100n +``` + +## Playing with hybrid state and private functions + +In the following steps, we'll shield a token (moving it from public to private state), and check our private and public balance. + +First we need to generate a secret and secret hash with the alias `shield`: + +```bash +aztec-wallet create-secret -a shield +``` + +Call the `shield` function like this: + +```bash +aztec-wallet send shield --from accounts:my-wallet --contract-address testtoken --args accounts:my-wallet 25 secrets:shield:hash 0 +``` + +This takes the same parameters as our previous `send` call, plus the arguments which are + +- the account that is shielding the tokens (`$ACCOUNT_ADDRESS`) +- the number of tokens to shield (`25`) +- a `secret_hash` (`SECRET_HASH` which has been derived from a secret that you generated in the CLI) +- a `nonce` (`0` in this case). + +A successful call should print something similar to what you've seen before. + +Now when you call `balance_of_public` again you will see 75! + +```bash +aztec-wallet simulate balance_of_public --from my-wallet --contract-address testtoken --args accounts:my-wallet +``` + +This should print + +```bash +Simulation result: 75n +``` + +Now we will need to add these shielded tokens into our account's environment so that we have the correct information to claim them. + +```bash +aztec-wallet add-note TransparentNote pending_shields --contract-address testtoken --transaction-hash last --address accounts:my-wallet --body 25 secrets:shield:hash +``` + +This takes + +- the type of note you are claiming (`TransparentNote`) +- the name of the storage (`pending_shields`) +- the contract address +- the transaction hash the note was created in (automatically aliased as `last`) +- the address to claim the note into (`accounts:my-wallet`) + +Don't worry if you don't understand what `TransparentNote` or `add-note` mean just yet. When you follow the tutorials, you'll learn more. + +A successful result will not print anything. + +Now you can redeem the shielded tokens: + +```bash +aztec-wallet send redeem_shield --contract-address testtoken --args accounts:my-wallet 25 secrets:shield --from accounts:my-wallet +``` + +And then call `balance_of_private` to check that you have your tokens! + +```bash +aztec-wallet simulate balance_of_private --from my-wallet --contract-address testtoken --args accounts:my-wallet +``` + +This should print + +```bash +Simulation result: 25n +``` + +**Congratulations, you now know the fundamentals of working with the Aztec sandbox!** You are ready to move onto the more fun stuff. + +## What's next? + +Now you have a development network running, so you're ready to start coding your first app with Aztec.nr and Aztec.js! + +If you want to start coding, head over to the Tutorials & Examples section and write & deploy your first smart contract. + +
+ + +

Write your first contract

+
+ + Write and deploy a simple private counter smart contract on your local sandbox + +
+
diff --git a/docs/docs/guides/developer_guides/getting_started/quickstart.md b/docs/docs/guides/developer_guides/getting_started/quickstart.md deleted file mode 100644 index 6ec66163c11..00000000000 --- a/docs/docs/guides/developer_guides/getting_started/quickstart.md +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: Quickstart -sidebar_position: 0 -tags: [sandbox] ---- - -You can get started with an Aztec development environment (A.K.A. Sandbox) in less than 5 minutes. - -The Sandbox is an Aztec network running fully on your machine, and interacting with a development Ethereum node. You can develop and deploy on it just like on a testnet or mainnet. - -### Prerequisites - -You need two global dependencies in your machine: - -- Node.js >= v18 (recommend installing with [nvm](https://github.com/nvm-sh/nvm)) -- Docker (visit [this page of the Docker docs](https://docs.docker.com/get-docker/) on how to install it) - -### Install the sandbox - -Run: - -```bash -bash -i <(curl -s https://install.aztec.network) -``` - -This will install the following tools: - -- **aztec** - launches various infrastructure subsystems (full sandbox, sequencer, prover, pxe, etc) and provides utility commands to interact with the network -- **aztec-nargo** - aztec's build of nargo, the noir compiler toolchain. -- **aztec-up** - a tool to upgrade the aztec toolchain to the latest, or specific versions. - -Once these have been installed, to start the sandbox, run: - -```bash -aztec start --sandbox -``` - -### Have fun - -**Congratulations, you have just installed and run the Aztec Sandbox!** - -```bash - /\ | | - / \ ___| |_ ___ ___ - / /\ \ |_ / __/ _ \/ __| - / ____ \ / /| || __/ (__ - /_/___ \_\/___|\__\___|\___| - -``` - -In the terminal, you will see some logs: - -1. Sandbox version -2. Contract addresses of rollup contracts -3. PXE (private execution environment) setup logs -4. Initial accounts that are shipped with the sandbox and can be used in tests - -## Running Aztec PXE / Node / P2P-Bootstrap node - -If you wish to run components of the Aztec network stack separately, you can use the `aztec start` command with various options for enabling components. - -```bash -aztec start --node [nodeOptions] --pxe [pxeOptions] --archiver [archiverOptions] --sequencer [sequencerOptions] --prover [proverOptions] ----p2p-bootstrap [p2pOptions] -``` - -Starting the aztec node alongside a PXE, sequencer or archiver, will attach the components to the node. Eg if you want to run a PXE separately to a node, you can [read this guide](../local_env/run_more_than_one_pxe_sandbox.md). - -## Update the sandbox - -To update the sandbox, you can just run: - -```bash -aztec-up -``` - -## Clone a Box (optional) - -You can use the `npx aztec-app` command to clone a ready-to-go "aztec box" with a sample contract or frontend. Assuming you have [node](https://nodejs.org/en/) installed, run: - -```bash -npx aztec-app -``` - -## Install Noir LSP (recommended) - -Install the [Noir Language Support extension](https://marketplace.visualstudio.com/items?itemName=noir-lang.vscode-noir) to get syntax highlighting, syntax error detection and go-to definitions for your Aztec contracts. - -Once the extension is installed, check your nargo binary by hovering over `Nargo` in the status bar on the bottom right of the application window. Click to choose the path to `aztec-nargo` (or regular `nargo`, if you have that installed). - -You can print the path of your `aztec-nargo` executable by running: - -```bash -which aztec-nargo -``` - -To specify a custom nargo executable, go to the VSCode settings and search for "noir", or click extension settings on the `noir-lang` LSP plugin. -Update the `Noir: Nargo Path` field to point to your desired `aztec-nargo` executable. - -## What's next? - -Now you have a development network running, so you're ready to start coding your first app with Aztec.nr and Aztec.js! - -If you want to start coding, it is recommended to go through the tutorials in order. Click on the link below to dive in! - -
- - -

Write your first contract

-
- - Write and deploy a simple private counter smart contract on your local sandbox - -
-
diff --git a/docs/docs/guides/developer_guides/js_apps/rotate_keys.md b/docs/docs/guides/developer_guides/js_apps/rotate_keys.md deleted file mode 100644 index 55eba15e4ef..00000000000 --- a/docs/docs/guides/developer_guides/js_apps/rotate_keys.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: How to Rotate Nullifier Keys -tags: [accounts, keys] ---- - -This guide explains how to rotate nullifer secret and public keys using Aztec.js. To learn more about key rotation, read the [concepts section](../../../aztec/concepts/accounts/keys.md#key-rotation) - -## Prerequisites - -You should have a wallet whose keys you want to rotate. You can learn how to create wallets from [this guide](./create_account.md). - -You should also have a PXE initialized. - -## Relevant imports - -You will need to import these from Aztec.js: - -#include_code imports yarn-project/end-to-end/src/e2e_key_rotation.test.ts typescript - -## Create nullifier secret and public key - -`newNskM` = new master nullifier secret key - -`newNpkM` = new master nullifier public key (type `PublicKey`) - -#include_code create_keys yarn-project/end-to-end/src/e2e_key_rotation.test.ts typescript - -## Rotate nullifier secret and public key - -Call `rotateNullifierKeys` on the AccountWallet to rotate the secret key in the PXE and call the key registry with the new derived public key. - -#include_code rotateNullifierKeys yarn-project/end-to-end/src/e2e_key_rotation.test.ts typescript diff --git a/docs/docs/guides/developer_guides/js_apps/test.md b/docs/docs/guides/developer_guides/js_apps/test.md index dc1d0b4d0e4..3c604d2e27f 100644 --- a/docs/docs/guides/developer_guides/js_apps/test.md +++ b/docs/docs/guides/developer_guides/js_apps/test.md @@ -8,7 +8,7 @@ In this guide we will cover how to interact with your Aztec.nr smart contracts i ## Prerequisites - A compiled contract with TS interface (read [how to compile](../smart_contracts/how_to_compile_contract.md)) -- Your sandbox running (read [getting started](../getting_started/quickstart.md)) +- Your sandbox running (read [getting started](../getting_started.md)) ## Create TS file and install libraries diff --git a/docs/docs/guides/developer_guides/local_env/cloning_a_box.md b/docs/docs/guides/developer_guides/local_env/cloning_a_box.md new file mode 100644 index 00000000000..5d0d950e61e --- /dev/null +++ b/docs/docs/guides/developer_guides/local_env/cloning_a_box.md @@ -0,0 +1,10 @@ +--- +title: Cloning a box +sidebar_position: 4 +tags: [accounts] +--- +You can use the `npx aztec-app` command to clone a ready-to-go "aztec box" with a sample contract or frontend. Assuming you have [node](https://nodejs.org/en/) installed, run: + +```bash +npx aztec-app +``` \ No newline at end of file diff --git a/docs/docs/guides/developer_guides/local_env/creating_schnorr_accounts.md b/docs/docs/guides/developer_guides/local_env/creating_schnorr_accounts.md index d9b3837f274..e8668294c95 100644 --- a/docs/docs/guides/developer_guides/local_env/creating_schnorr_accounts.md +++ b/docs/docs/guides/developer_guides/local_env/creating_schnorr_accounts.md @@ -1,6 +1,6 @@ --- title: Creating Schnorr Accounts -sidebar_position: 1 +sidebar_position: 2 draft: true tags: [accounts] --- @@ -18,7 +18,7 @@ An in-depth explainer about accounts on aztec can be found [here](../../../aztec ## Pre-requisites -Have a running Sandbox and a repository that interacts with it as explained [in the quickstart](../getting_started/quickstart.md). +Have a running Sandbox and a repository that interacts with it as explained [in the quickstart](../getting_started.md). Let's assume you have a file `src/index.ts` from the example used in the Sandbox page. diff --git a/docs/docs/guides/developer_guides/local_env/installing_noir_lsp.md b/docs/docs/guides/developer_guides/local_env/installing_noir_lsp.md new file mode 100644 index 00000000000..52bf1b28d18 --- /dev/null +++ b/docs/docs/guides/developer_guides/local_env/installing_noir_lsp.md @@ -0,0 +1,17 @@ +--- +title: Installing the Noir LSP +sidebar_position: 1 +tags: [sandbox] +--- + +Install the [Noir Language Support extension](https://marketplace.visualstudio.com/items?itemName=noir-lang.vscode-noir) to get syntax highlighting, syntax error detection and go-to definitions for your Aztec contracts. + +Once the extension is installed, check your nargo binary by hovering over Nargo in the status bar on the bottom right of the application window. Click to choose the path to aztec-nargo (or regular nargo, if you have that installed). + +You can print the path of your `aztec-nargo` executable by running: + +```bash +which aztec-nargo +``` + +To specify a custom nargo executable, go to the VSCode settings and search for "noir", or click extension settings on the `noir-lang` LSP plugin. Update the `Noir: Nargo Path` field to point to your desired `aztec-nargo` executable. \ No newline at end of file diff --git a/docs/docs/guides/developer_guides/local_env/run_more_than_one_pxe_sandbox.md b/docs/docs/guides/developer_guides/local_env/run_more_than_one_pxe_sandbox.md index d8530befc98..ad575e6baf6 100644 --- a/docs/docs/guides/developer_guides/local_env/run_more_than_one_pxe_sandbox.md +++ b/docs/docs/guides/developer_guides/local_env/run_more_than_one_pxe_sandbox.md @@ -1,17 +1,9 @@ --- title: Running Multiple PXEs in the Sandbox -sidebar_position: 2 +sidebar_position: 3 tags: [PXE] --- -:::warning - -Unfortunately, this is currently not working due to a bug when attempting to run an `aztec` command with the sandbox running. This will be fixed in a future version. - -::: - --- - When you run the sandbox, the Aztec node and PXE have their own http server. This makes it possible to run two PXEs on your local machine, which can be useful for testing that notes are accurately stored and remaining private in their respective PXEs. We are working on a better solution for this so expect an update soon, but currently you can follow this guide. diff --git a/docs/docs/guides/developer_guides/local_env/versions-updating.md b/docs/docs/guides/developer_guides/local_env/versions-updating.md index 263a00ec5aa..9e90f47102c 100644 --- a/docs/docs/guides/developer_guides/local_env/versions-updating.md +++ b/docs/docs/guides/developer_guides/local_env/versions-updating.md @@ -56,7 +56,7 @@ diff ~/nargo/github.com/AztecProtocol/aztec-packages-v0.23.0/yarn-project/noir-c ### Language server version (aztec-nargo) -The [Noir LSP](../getting_started/quickstart.md#install-noir-lsp-recommended) uses your local version of `aztec-nargo`, and thus also `aztec-nargo compile`. +The [Noir LSP](../local_env/installing_noir_lsp.md) uses your local version of `aztec-nargo`, and thus also `aztec-nargo compile`. The path of the former (once installed) can be seen by hovering over "Nargo" in the bottom status bar of VS Code, and the latter via the `which aztec-nargo` command. :::caution diff --git a/docs/docs/guides/developer_guides/smart_contracts/how_to_compile_contract.md b/docs/docs/guides/developer_guides/smart_contracts/how_to_compile_contract.md index 1bea4c72e2d..e2b4fa891f0 100644 --- a/docs/docs/guides/developer_guides/smart_contracts/how_to_compile_contract.md +++ b/docs/docs/guides/developer_guides/smart_contracts/how_to_compile_contract.md @@ -223,7 +223,7 @@ export class TokenContract extends ContractBase { } ``` -Read more about interacting with contracts using `aztec.js` [by following this tutorial](../../../tutorials/codealong/aztecjs-getting-started.md). +Read more about interacting with contracts using `aztec.js` [by following this tutorial](../../../tutorials/codealong/aztecjs-getting-started). ### Aztec.nr interfaces diff --git a/docs/docs/guides/developer_guides/smart_contracts/how_to_deploy_contract.md b/docs/docs/guides/developer_guides/smart_contracts/how_to_deploy_contract.md index 90584a31e08..7df9f76b1a8 100644 --- a/docs/docs/guides/developer_guides/smart_contracts/how_to_deploy_contract.md +++ b/docs/docs/guides/developer_guides/smart_contracts/how_to_deploy_contract.md @@ -12,7 +12,7 @@ Once you have [compiled](./how_to_compile_contract.md) your contracts you can pr - `aztec-nargo` installed (go to [Sandbox section](../../../reference/developer_references/sandbox_reference/sandbox-reference.md) for installation instructions) - contract artifacts ready (go to [How to Compile Contract](./how_to_compile_contract.md) for instructions on how to compile contracts) -- Aztec Sandbox running (go to [Sandbox section](../getting_started/quickstart.md) for instructions on how to install and run the sandbox) +- Aztec Sandbox running (go to [Getting Started](../getting_started.md) for instructions on how to install and run the sandbox) ## Deploy diff --git a/docs/docs/guides/developer_guides/smart_contracts/testing_contracts/testing.md b/docs/docs/guides/developer_guides/smart_contracts/testing_contracts/testing.md index dc933c32927..534969e86be 100644 --- a/docs/docs/guides/developer_guides/smart_contracts/testing_contracts/testing.md +++ b/docs/docs/guides/developer_guides/smart_contracts/testing_contracts/testing.md @@ -1,6 +1,8 @@ --- title: Testing Contracts in the TXE -tags: [contracts, tests] +tags: [contracts, tests, testing, txe] +keywords: [tests, testing, txe] +importance: 1 --- Aztec contracts can be tested in a variety of ways depending on the needs of a particular application and the complexity of the interactions they must support. @@ -36,7 +38,7 @@ So to summarize: ### Running TXE -If you have [the sandbox](../../getting_started/quickstart.md) installed, you can run TXE tests using: +If you have [the sandbox](../../getting_started.md) installed, you can run TXE tests using: `aztec test` @@ -186,7 +188,7 @@ You can add [authwits](../writing_contracts/authwit.md) to the TXE. Here is an e Sometimes we have to tell TXE about notes that are not generated by ourselves, but someone else. This allows us to check if we are able to decrypt them: -#include_code txe_test_store_note /noir-projects/noir-contracts/contracts/token_contract/src/test/utils.nr rust +#include_code txe_test_add_note /noir-projects/noir-contracts/contracts/token_contract/src/test/utils.nr rust ### Time traveling diff --git a/docs/docs/guides/developer_guides/smart_contracts/writing_contracts/common_patterns/index.md b/docs/docs/guides/developer_guides/smart_contracts/writing_contracts/common_patterns/index.md index fbf1f9e26f8..f99deb83cbd 100644 --- a/docs/docs/guides/developer_guides/smart_contracts/writing_contracts/common_patterns/index.md +++ b/docs/docs/guides/developer_guides/smart_contracts/writing_contracts/common_patterns/index.md @@ -16,7 +16,7 @@ Similarly we have discovered some anti-patterns too (like privacy leakage) that We call this the "authentication witness" pattern or authwit for short. - Approve someone in private domain: - #include_code authwit_to_another_sc /yarn-project/end-to-end/src/e2e_cross_chain_messaging.test.ts typescript + #include_code authwit_to_another_sc /yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_private.test.ts typescript Here you approve a contract to burn funds on your behalf. diff --git a/docs/docs/guides/developer_guides/smart_contracts/writing_contracts/common_patterns/key_rotation.md b/docs/docs/guides/developer_guides/smart_contracts/writing_contracts/common_patterns/key_rotation.md deleted file mode 100644 index 5841e5eb3fc..00000000000 --- a/docs/docs/guides/developer_guides/smart_contracts/writing_contracts/common_patterns/key_rotation.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Key Rotation -tags: [accounts, keys] ---- - -## Prerequisite reading - -- [Keys Concept](../../../../../aztec/concepts/accounts/keys.md) - -## Introduction - -It is possible for users to rotate their keys, which can be helpful if some of their keys are leaked. Key rotation allows users to continue using the same account without having to create a new one. - -Because of this, notes are often associated with their `nullifier key` (through a nullifier public key hash, often called `npk_m_hash`) rather than any sort of 'owner' address. - -It is still possible to nullify the notes with the old nullifier key even after the key rotation. - -## `TokenNote` example - -See the structure of the `TokenNote` below: - -#include_code TokenNote noir-projects/noir-contracts/contracts/token_contract/src/types/token_note.nr rust - -In the `TokenNote` type, you can see that the nullifer computation gets the nullifier secret key specific to the contract from the PXE, based on the stored `npk_m_hash`, so a `TokenNote` is not inherently or permanently linked to a specific Aztec account. - -#include_code nullifier noir-projects/noir-contracts/contracts/token_contract/src/types/token_note.nr rust - -## Things to consider - -- When using the `npk_m_hash`, used to represent ownership, whoever has the nullifier secret can nullify a note. -- Consider how key rotation can affect account contracts, e.g. you can add additional security checks for who or how the key rotation is called - -## Resources - -- End to end tests for key rotation can be found [here](https://github.com/AztecProtocol/aztec-packages/blob/#include_aztec_version/yarn-project/end-to-end/src/e2e_key_rotation.test.ts) - -## Glossary - -- `npk_m_hash`: master nullifying public key hash -- `nsk_app`: app nullifying secret key - the app-specific NSK (learn more about app-scoped keys [here](../../../../../aztec/concepts/accounts/keys.md#scoped-keys)) -- `nsk_hash`: nullifying secret key hash -- `ivpk_m`: incoming view public key (master) (learn more about IVPKs [here](../../../../../aztec/concepts/accounts/keys.md#incoming-viewing-keys)) diff --git a/docs/docs/guides/developer_guides/smart_contracts/writing_contracts/notes/custom_note.md b/docs/docs/guides/developer_guides/smart_contracts/writing_contracts/notes/custom_note.md index 73939944a88..c3efb4b6844 100644 --- a/docs/docs/guides/developer_guides/smart_contracts/writing_contracts/notes/custom_note.md +++ b/docs/docs/guides/developer_guides/smart_contracts/writing_contracts/notes/custom_note.md @@ -1,6 +1,7 @@ --- title: Using custom note types in Aztec.nr tags: [contracts, notes] +keywords: [custom note, note] --- It may be useful to write a custom note type if you want to use a specific type of private data or struct that does not have a default implementation in Aztec.nr. If you create a note that uses a custom note type, you are able to nullify that note with one nullifier. This is more secure and less expensive than using multiple separate notes. @@ -17,7 +18,11 @@ A custom note type can be defined with the macro `#[aztec(note)]` used on a stru #include_code state_vars-CardNote noir-projects/noir-contracts/contracts/docs_example_contract/src/types/card_note.nr rust -In this example, we are implementing a card note that holds a number of points as `u8`. +In this example, we are implementing a card note that holds a number of `points` as `u8`. + +`randomness` is not enforced by the protocol and should be implemented by the application developer. If you do not include `randomness`, and the note preimage can be guessed by an attacker, it makes the note vulnerable to preimage attacks. + +`npk_m_hash` is `nullifier public key, master, hash` which is the hash of the nullifier key owned by the user. It ensures that when the note is spent, only the owner of the `npk_m` can spend it. ## Implement NoteInterface @@ -43,4 +48,6 @@ If you are also planning to be able to access the data with a note in public sta ## Further reading +- [What is `#[aztec(note)]` actually doing? + functions such as serialize() and deserialize()](../../../../../aztec/smart_contracts/functions/inner_workings.md#custom-notes-aztecnote) - [Macros reference](../../../../../reference/developer_references/smart_contract_reference/macros.md) +- [Keys, including npk_m_hash (nullifier public key master)](../../../../../aztec/concepts/accounts/keys.md) diff --git a/docs/docs/guides/index.md b/docs/docs/guides/index.md index cf5cd9c93b6..a89e40c0b3e 100644 --- a/docs/docs/guides/index.md +++ b/docs/docs/guides/index.md @@ -11,9 +11,9 @@ Guides are step-by-step how-tos to achieve a specific goal. On this page you can ## Getting Started
- + -

Quickstart

+

Getting Started

Get started on Aztec by installing the sandbox and playing with it diff --git a/docs/docs/index.mdx b/docs/docs/index.mdx index b7a9e01a97b..b38e104d38e 100644 --- a/docs/docs/index.mdx +++ b/docs/docs/index.mdx @@ -11,41 +11,25 @@ sidebar_position: 0 On Ethereum today, everything is publicly visible, by everyone. In the real world, people enjoy privacy. Aztec brings privacy to Ethereum. -![aztec illustration](@site/static/img/aztec_illustration.png) - -
-“When we started Aztec, the technology to scale blockchains privately didn’t exist. Since then, we’ve assembled a team of world-class cryptographers who continuously redefine the state-of-the-art. Inventing PLONK — the paradigm-defining universal zk-SNARK — showcases our ability to produce technology that matches our ambitions: unlocking an entire universe of blockchain applications that couldn’t exist without privacy.” - -_Zac Williamson, CEO and Co-founder, Aztec_ - -
- -## Values - -Our vision is to create a fairer, more open financial eco-system, built with encryption at its core. - -We believe decentralization is premised on individual rights — without widely accessible encryption, we compromise our ability to choose how we live our lives and earn our livelihoods. - -Aztec is: - -- **Private.**: The only true zero-knowledge rollup, built with a privacy-first UTXO architecture to allow developers to build privacy preserving programable applications. -- **Accessible.**: Proving transaction validity via recursive aggregation of zero-knowledge proofs, significantly reduces transaction costs, keeping the protocol accessible to the masses. -- **Compliant**: The programmable nature of Aztec smart contracts, enables dApp developers to code privacy-preserving audit and compliance checks into apps, while fully preserving a credible neutral protocol layer. - ## Get started -### Learn 📚 - -Start on the [Technical Overview page](aztec/overview.md) to read about how Aztec works. - -### Build 🧑‍💻 - -Go to the [Getting Started section](guides/developer_guides/getting_started/quickstart.md) of the developer docs to get your hands dirty and start developing on Aztec. - -#### Go deeper 🔬 - -Check out the [Awesome Aztec repo](https://github.com/AztecProtocol/awesome-aztec) for a curated list of learning resources and tools to help you learn more about Aztec. - -Clone the [Aztec Starter repo](https://github.com/AztecProtocol/aztec-starter) to get a minimal project set up with Sandbox (local developer network), a simple contract and a test suite. - -Jump into one of the [tutorials](tutorials/index.md) to learn how to build more complex applications on Aztec. +
+ + +

Tutorials

+
+ + Start writing Aztec contracts with our tutorials. + +
+ + + +

References

+
+ + Review reference materials for building on Aztec. + + +
+
diff --git a/docs/docs/migration_notes.md b/docs/docs/migration_notes.md index 4d725794a05..25735e13590 100644 --- a/docs/docs/migration_notes.md +++ b/docs/docs/migration_notes.md @@ -8,6 +8,119 @@ Aztec is in full-speed development. Literally every version breaks compatibility ## TBD +### [Aztec.nr] Changes to `NullifiableNote` + +The `compute_nullifier_without_context` function is now `unconstrained`. It had always been meant to be called in unconstrained contexts (which is why it did not receive the `context` object), but now that Noir supports trait functions being `unconstrained` this can be implemented properly. Users must add the `unconstrained` keyword to their implementations of the trait: + +```diff +impl NullifiableNote for MyCustomNote { +- fn compute_nullifier_without_context(self) -> Field { ++ unconstrained fn compute_nullifier_without_context(self) -> Field { +``` + +### [Aztec.nr] Make `TestEnvironment` unconstrained + +All of `TestEnvironment`'s functions are now `unconstrained`, preventing accidentally calling them in a constrained circuit, among other kinds of user error. Becuase they work with mutable references, and these are not allowed to cross the constrained/unconstrained barrier, tests that use `TestEnvironment` must also become `unconstrained`. The recommended practice is to make _all_ Noir tests and test helper functions be `unconstrained: + +```diff +#[test] +-fn test_my_function() { ++unconstrained fn test_my_function() { + let env = TestEnvironment::new(); +``` + +## 0.56.0 + +### [Aztec.nr] Changes to contract definition + +We've migrated the Aztec macros to use the newly introduce meta programming Noir feature. Due to being Noir-based, the new macros are less obscure and can be more easily modified. + +As part of this transition, some changes need to be applied to Aztec contracts: + +- The top level `contract` block needs to have the `#[aztec]` macro applied to it. +- All `#[aztec(name)]` macros are renamed to `#[name]`. +- The storage struct (the one that gets the `#[storage]` macro applied) but be generic over a `Context` type, and all state variables receive this type as their last generic type parameter. + +```diff ++ use dep::aztec::macros::aztec; + +#[aztec] +contract Token { ++ use dep::aztec::macros::{storage::storage, events::event, functions::{initializer, private, view, public}}; + +- #[aztec(storage)] +- struct Storage { ++ #[storage] ++ struct Storage { +- admin: PublicMutable, ++ admin: PublicMutable, +- minters: Map>, ++ minters: Map, Context>, + } + +- #[aztec(public)] +- #[aztec(initializer)] ++ #[public] ++ #[initializer] + fn constructor(admin: AztecAddress, name: str<31>, symbol: str<31>, decimals: u8) { + ... + } + +- #[aztec(public)] +- #[aztec(view)] +- fn public_get_name() -> FieldCompressedString { ++ #[public] ++ #[view] + fn public_get_name() -> FieldCompressedString { + ... + } +``` + +### [Aztec.nr] Changes to `NoteInterface` + +The new macro model prevents partial trait auto-implementation: they either implement the entire trait or none of it. This means users can no longer implement part of `NoteInterface` and have the rest be auto-implemented. + +For this reason we've separated the methods which are auto-implemented and those which needs to be implemented manually into two separate traits: the auto-implemented ones stay in the `NoteInterface` trace and the manually implemented ones were moved to `NullifiableNote` (name likely to change): + +```diff +-#[aztec(note)] ++#[note] +struct AddressNote { + ... +} + +-impl NoteInterface for AddressNote { ++impl NullifiableNote for AddressNote { + fn compute_nullifier(self, context: &mut PrivateContext, note_hash_for_nullify: Field) -> Field { + ... + } + + fn compute_nullifier_without_context(self) -> Field { + ... + } +} +``` + +### [Aztec.nr] Changes to contract interface + +The `Contract::storage()` static method has been renamed to `Contract::storage_layout()`. + +```diff +- let fee_payer_balances_slot = derive_storage_slot_in_map(Token::storage().balances.slot, fee_payer); +- let user_balances_slot = derive_storage_slot_in_map(Token::storage().balances.slot, user); ++ let fee_payer_balances_slot = derive_storage_slot_in_map(Token::storage_layout().balances.slot, fee_payer); ++ let user_balances_slot = derive_storage_slot_in_map(Token::storage_layout().balances.slot, user); +``` + +### Key rotation removed + +The ability to rotate incoming, outgoing, nullifying and tagging keys has been removed - this feature was easy to misuse and not worth the complexity and gate count cost. As part of this, the Key Registry contract has also been deleted. The API for fetching public keys has been adjusted accordingly: + +```diff +- let keys = get_current_public_keys(&mut context, account); ++ let keys = get_public_keys(account); +``` + ### [Aztec.nr] Rework `NoteGetterOptions::select` The `select` function in both `NoteGetterOptions` and `NoteViewerOptions` no longer takes an `Option` of a comparator, but instead requires an explicit comparator to be passed. Additionally, the order of the parameters has been changed so that they are `(lhs, operator, rhs)`. These two changes should make invocations of the function easier to read: diff --git a/docs/docs/protocol-specs/data-publication-and-availability/overview.md b/docs/docs/protocol-specs/data-publication-and-availability/overview.md index c8bcc533217..d299edbe54d 100644 --- a/docs/docs/protocol-specs/data-publication-and-availability/overview.md +++ b/docs/docs/protocol-specs/data-publication-and-availability/overview.md @@ -94,9 +94,9 @@ You could say that the transactions are pre-confirmed until they convince the va ### No-consensus If there is no explicit consensus for the Rollup, staking can still be utilized for leader selection, picking a distinct sequencer which will have a period to propose a block and convince the validating light-client. -The user can as earlier define his own confirmation rules and could decide that if the sequencer acknowledge his transaction, then he sees it as confirmed. -This have a weaker guarantees than the consensus based as the sequencer could be malicious and not uphold his part of the deal. -Nevertheless, the user could always do an out of protocol agreement with the sequencer, where the sequencer guarantees that he will include the transaction or the user will be able to slash him and get compensated. +The user can as earlier define his own confirmation rules and could decide that if the sequencer acknowledges his transaction, then he sees it as confirmed. +This has weaker guarantees than the consensus-based approach as the sequencer could be malicious and not uphold his part of the deal. +Nevertheless, the user could always do an out-of-protocol agreement with the sequencer, where the sequencer guarantees that he will include the transaction or the user will be able to slash him and get compensated. :::info Fernet Fernet lives in this category if you have a single sequencer active from the proposal to proof inclusion stage. @@ -107,7 +107,7 @@ If the user is not satisfied with the guarantee provided by the sequencer, he ca ## Data Availability and Publication -As alluded to earlier, we belong to the school of thought that Data Availability and Publication is different things. +As alluded to earlier, we belong to the school of thought that Data Availability and Publication are different things. Generally, what is often referred to as Data Availability is merely Data Publication, e.g., whether or not the data have been published somewhere. For data published on Ethereum you will currently have no issues getting a hold of the data because there are many full nodes and they behave nicely, but they are not guaranteed to continue doing so. New nodes are essentially bootstrapped by other friendly nodes. @@ -125,7 +125,7 @@ The latency is based on using Ethereum L1 as the home of the validating light no |Method | Publication | Availability | Quantity | Latency | Description | | ------- | :----------: | :----------: | :----------: | :-------: | :-------: | |calldata| Eth L1 | Eth L1 | $78,125~\dfrac{byte}{s}$ | None | Part of the transaction payload required to execute history, if you can sync an Ethereum node from zero, this is available. Essentially, if Ethereum lives this is available. Have to compete against everything on Ethereum for blockspace. | -|blobs| Eth L1 | benevolent Eth L1 super full-nodes | x | None | New blob data, will be published but only commitments available from the execution environment. Content can be discarded later and don't have to be stored forever. Practically a "committee" of whoever wants can keep it, and you rely on someone from this set providing the data to you. | +|blobs| Eth L1 | benevolent Eth L1 super full-nodes | x | None | New blob data, will be published but only commitments available from the execution environment. Content can be discarded later and doesn't have to be stored forever. Practically a "committee" of whoever wants can keep it, and you rely on someone from this set providing the data to you. | ^^| | | $31,744 \dfrac{byte}{s}$ | None | target of `3` blobs of size `4096` fields (`380,928` bytes per block) | ^^| | | $677,205 \dfrac{byte}{s}$ | None | target of `64` blobs of size `4096` fields (`8,126,464` bytes per block) | |Celestia| Celestia + Blobstream bridge | Celestia Full Storage Nodes | $161,319~\dfrac{byte}{s}$ | ~100 mins | 2MB blocks. Can be used in proof after relay happens, with latency improvements expected.| diff --git a/docs/docs/protocol-specs/public-vm/gen/_instruction-set.mdx b/docs/docs/protocol-specs/public-vm/gen/_instruction-set.mdx index 8e97a5ce0a8..eb473ccb742 100644 --- a/docs/docs/protocol-specs/public-vm/gen/_instruction-set.mdx +++ b/docs/docs/protocol-specs/public-vm/gen/_instruction-set.mdx @@ -1095,6 +1095,7 @@ context.machineState.pc = loc`} - **Details**: Target location is an immediate value (a constant in the bytecode). - **Bit-size**: 48 +[![](/img/protocol-specs/public-vm/bit-formats/INTERNALCALL.png)](/img/protocol-specs/public-vm/bit-formats/INTERNALCALL.png) ### `INTERNALRETURN` Return from an internal call. Pop from the internal call stack and jump to the popped location. diff --git a/docs/docs/protocol-specs/state/wonky-tree.md b/docs/docs/protocol-specs/state/wonky-tree.md index 14d1a977675..093e7334e5e 100644 --- a/docs/docs/protocol-specs/state/wonky-tree.md +++ b/docs/docs/protocol-specs/state/wonky-tree.md @@ -7,7 +7,7 @@ For example, using a balanced merkle tree to rollup 5 transactions requires padd ```mermaid graph BT R_c[Root] - + M4_c[Merge] M5_c[Merge] M4_c --> R_c @@ -27,12 +27,12 @@ graph BT B1_c --> M0_c B2_c --> M1_c B3_c --> M1_c - + M2_c[Merge] M3_c[Merge*] M2_c --> M5_c M3_c --> M5_c - + B4_c[Base] B5_c[Base*] B6_c[Base*] @@ -62,7 +62,7 @@ Our wonky tree implementation instead gives the below structure for 5 transactio ```mermaid graph BT R_c[Root] - + M4_c[Merge] M4_c --> R_c @@ -80,8 +80,8 @@ graph BT B1_c --> M0_c B2_c --> M1_c B3_c --> M1_c - - + + B4_c[Base] B4_c --> R_c @@ -115,7 +115,7 @@ graph graph BT M0_c[Merge 0] M1_c[Merge 1] - + B0_c[Base 0] B1_c[Base 1] B2_c[Base 2] @@ -124,7 +124,7 @@ graph BT B1_c --> M0_c B2_c --> M1_c B3_c --> M1_c - + B4_c[Base 4] ``` @@ -135,7 +135,7 @@ graph BT M0_c[Merge 0] M1_c[Merge 1] M2_c[Merge 2] - + B0_c[Base 0] B1_c[Base 1] B2_c[Base 2] @@ -144,10 +144,10 @@ graph BT B1_c --> M0_c B2_c --> M1_c B3_c --> M1_c - + M0_c --> M2_c M1_c --> M2_c - + B4_c[Base 4] ``` @@ -156,11 +156,11 @@ Once paired, the base layer has length 4, the next merge layer has 2, and the fi ```mermaid graph BT R_c[Root] - + M0_c[Merge 0] M1_c[Merge 1] M2_c[Merge 2] - + B0_c[Base 0] B1_c[Base 1] B2_c[Base 2] @@ -169,17 +169,18 @@ graph BT B1_c --> M0_c B2_c --> M1_c B3_c --> M1_c - + M0_c --> M2_c M1_c --> M2_c - + B4_c[Base 4] M2_c --> R_c B4_c --> R_c ``` + Since we have processed all base circuits, this final pair will be input to a root circuit. -Filling from left to right means that we can easily reconstruct the tree only from the number of transactions `n`. The above method ensures that the final tree is a combination of *balanced* subtrees of descending size. The widths of these subtrees are given by the decomposition of `n` into powers of 2. For example, 5 transactions: +Filling from left to right means that we can easily reconstruct the tree only from the number of transactions `n`. The above method ensures that the final tree is a combination of _balanced_ subtrees of descending size. The widths of these subtrees are given by the decomposition of `n` into powers of 2. For example, 5 transactions: ``` Subtrees: [4, 1] -> @@ -189,6 +190,7 @@ Subtrees: [4, 1] -> ``` For 31 transactions: + ``` Subtrees: [16, 8, 4, 2, 1] -> Merge D: left_subtree_root = balanced_tree(txs[0..16]) @@ -207,6 +209,7 @@ Subtrees: [16, 8, 4, 2, 1] -> } root = left_subtree_root | right_subtree_root ``` + An unrolled recursive algorithm is not the easiest thing to read. This diagram represents the 31 transactions rolled up in our wonky structure, where each `Merge ` is a 'subroot' above: ```mermaid @@ -215,36 +218,37 @@ graph BT M3_c[Merge D Subtree of 16 txs] R_c[Root] - - + + B4_c[Merge C Subtree of 8 txs] B5_c[Merge 1] - + B4_c --> M2_c B5_c --> M2_c - + B6_c[Merge B Subtree of 4 txs] B7_c[Merge 0] - + B6_c --> B5_c B7_c --> B5_c - + B8_c[Merge A Subtree of 2 txs] B9_c[Base 30] - + B8_c --> B7_c B9_c --> B7_c - + M3_c --> R_c M2_c --> R_c ``` + The tree is reconstructed to check the `txs_effects_hash` (= the root of a wonky tree given by leaves of each tx's `tx_effects`) on L1. We also reconstruct it to provide a membership path against the stored `out_hash` (= the root of a wonky tree given by leaves of each tx's L2 to L1 message tree root) for consuming a L2 to L1 message. -Currently, this tree is built via the [orchestrator](../../../../yarn-project/prover-client/src/orchestrator/proving-state.ts#74) given the number of transactions to rollup (`this.totalNumTxs`). Each 'node' is assigned a level (0 at the root) and index in that level. The below function finds the parent level: +Currently, this tree is built via the orchestrator given the number of transactions to rollup. Each 'node' is assigned a level (0 at the root) and index in that level. The below function finds the parent level: ``` // Calculates the index and level of the parent rollup circuit @@ -272,14 +276,14 @@ Currently, this tree is built via the [orchestrator](../../../../yarn-project/pr return [mergeLevel - 1n, thisIndex >> 1n, thisIndex & 1n]; } ``` - For example, `Base 4` above starts with `level = 3` and `index = 4`. Since we have an odd number of transactions at this level, `thisLevelSize` is set to 4 with `shiftUp = true`. - The while loop triggers and shifts up our node to `level = 2` and `index = 2`. This level (containing `Merge 0` and `Merge 1`) is of even length, so the loop continues. The next iteration shifts up to `level = 1` and `index = 1` - we now have an odd level, so the loop stops. The actual position of `Base 4` is therefore at `level = 1` and `index = 1`. This function returns the parent level of the input node, so we return `level = 0`, `index = 0`, correctly indicating that the parent of `Base 4` is the root. +For example, `Base 4` above starts with `level = 3` and `index = 4`. Since we have an odd number of transactions at this level, `thisLevelSize` is set to 4 with `shiftUp = true`. +The while loop triggers and shifts up our node to `level = 2` and `index = 2`. This level (containing `Merge 0` and `Merge 1`) is of even length, so the loop continues. The next iteration shifts up to `level = 1` and `index = 1` - we now have an odd level, so the loop stops. The actual position of `Base 4` is therefore at `level = 1` and `index = 1`. This function returns the parent level of the input node, so we return `level = 0`, `index = 0`, correctly indicating that the parent of `Base 4` is the root. ### Flexible wonky trees -We can also encode the structure of *any* binary merkle tree by tracking `number_of_branches` and `number_of_leaves` for each node in the tree. This encoding was originally designed for [logs](../logs/index.md) before they were included in the `txs_effects_hash`, so the below explanation references the leaves stored in relation to logs and transactions. +We can also encode the structure of _any_ binary merkle tree by tracking `number_of_branches` and `number_of_leaves` for each node in the tree. This encoding was originally designed for [logs](../logs/index.md) before they were included in the `txs_effects_hash`, so the below explanation references the leaves stored in relation to logs and transactions. The benefit of this method as opposed to the one above is allowing for any binary structure and therefore allowing for 'skipping' leaves with no information. However, the encoding grows as the tree grows, by at least 2 bytes per node. The above implementation only requires the number of leaves to be encoded, which will likely only require a single field to store. @@ -419,4 +423,4 @@ function hash_tx_logs_data(logs_data) { } return res; } -``` \ No newline at end of file +``` diff --git a/docs/docs/reference/developer_references/common_errors/sandbox-errors.md b/docs/docs/reference/developer_references/common_errors/sandbox-errors.md index 2e9aed08ee5..0190ea28585 100644 --- a/docs/docs/reference/developer_references/common_errors/sandbox-errors.md +++ b/docs/docs/reference/developer_references/common_errors/sandbox-errors.md @@ -88,7 +88,7 @@ Calling a private Aztec.nr function in a public kernel is not allowed. #### 3005 - PUBLIC_KERNEL\_\_NON_EMPTY_PRIVATE_CALL_STACK -Public functions are executed after all the private functions are (see [private-public execution](../../../aztec/smart_contracts/communication/public_private_calls.md)). As such, private call stack must be empty when executing in the public kernel. +Public functions are executed after all the private functions are (see [private-public execution](../../../aztec/smart_contracts/functions/public_private_calls.md)). As such, private call stack must be empty when executing in the public kernel. #### 3011 - PUBLIC_KERNEL\_\_CALCULATED_PRIVATE_CALL_HASH_AND_PROVIDED_PRIVATE_CALL_HASH_MISMATCH @@ -191,7 +191,7 @@ Users may create a proof against a historical state in Aztec. The rollup circuit - "\$\{treeName\} tree next available leaf index mismatch" - validating a tree's root is not enough. It also checks that the `next_available_leaf_index` is as expected. This is the next index we can insert new values into. Note that for the public data tree, this test is skipped since as it is a sparse tree unlike the others. -- "Public call stack size exceeded" - In Aztec, the sequencer executes all enqueued public functions in a transaction (to prevent race conditions - see [private-public execution](../../../aztec/smart_contracts/communication/public_private_calls.md)). This error says there are too many public functions requested. +- "Public call stack size exceeded" - In Aztec, the sequencer executes all enqueued public functions in a transaction (to prevent race conditions - see [private-public execution](../../../aztec/smart_contracts/functions/public_private_calls.md)). This error says there are too many public functions requested. - "Array size exceeds target length" - happens if you add more items than allowed by the constants set due to our circuit limitations (eg sending too many L2 to L1 messages or creating a function that exceeds the call stack length or returns more values than what Aztec.nr functions allow) diff --git a/docs/docs/reference/developer_references/debugging.md b/docs/docs/reference/developer_references/debugging.md index 12fab8f69ba..29b6be17ff4 100644 --- a/docs/docs/reference/developer_references/debugging.md +++ b/docs/docs/reference/developer_references/debugging.md @@ -51,7 +51,7 @@ Prepend the command to start the sandbox with `DEBUG=aztec:*` to log everything ```bash # Using the docker-compose.yml setup -cd ~./aztec && DEBUG=aztec:* docker-compose up +cd ~/.aztec && DEBUG=aztec:* docker-compose up ``` Alternatively you can update the `DEBUG` environment variable in docker-compose.yml and start the sandbox normally. diff --git a/docs/docs/reference/developer_references/sandbox_reference/cli_wallet_reference.md b/docs/docs/reference/developer_references/sandbox_reference/cli_wallet_reference.md index f1a0b637b87..593415d21d9 100644 --- a/docs/docs/reference/developer_references/sandbox_reference/cli_wallet_reference.md +++ b/docs/docs/reference/developer_references/sandbox_reference/cli_wallet_reference.md @@ -1,6 +1,7 @@ --- title: CLI Wallet tags: [sandbox, wallet, cli] +keywords: [wallet, cli wallet] --- For development, it may be useful to deploy, transact, or create notes in a non-programmatic way. You can use Aztec's CLI Wallet for thing such as: @@ -36,6 +37,7 @@ It will also try to determine which type is expected. For example, if the alias You can create arbitrary aliases with the `alias` command. For example `aztec-wallet alias accounts test_alias 0x2c37902cdade7710bd2355e5949416dc5e43a16e0b13a5560854d2451d92d289`. +::: ## Account Management @@ -149,5 +151,5 @@ The Add Note method makes it easy to store notes on your local PXE if they haven It expects `name` and `storageFieldName`. For example, if the `#[storage]` struct had a `available_members: PrivateMutable` property: ```bash -aztec-note add-note JediMember available_members -a master_yoda -ca jedi_order -h 0x00000 +aztec-wallet add-note JediMember available_members -a master_yoda -ca jedi_order -h 0x00000 ``` diff --git a/docs/docs/reference/developer_references/sandbox_reference/sandbox-reference.md b/docs/docs/reference/developer_references/sandbox_reference/sandbox-reference.md index 079de8cff0b..394439049bc 100644 --- a/docs/docs/reference/developer_references/sandbox_reference/sandbox-reference.md +++ b/docs/docs/reference/developer_references/sandbox_reference/sandbox-reference.md @@ -5,7 +5,7 @@ tags: [sandbox] :::tip -For a quick start, follow the [guide](../../../guides/developer_guides/getting_started/quickstart.md) to install the sandbox. +For a quick start, follow the [guide](../../../guides/developer_guides/getting_started) to install the sandbox. ::: @@ -159,3 +159,21 @@ UniswapContractArtifact > Source code: /yarn-project/end-to-end/src/composed/cli_docs_sandbox.test.ts#L95-L118 You can see all of our example contracts in the monorepo [here (GitHub link)](https://github.com/AztecProtocol/aztec-packages/tree/master/noir-projects/noir-contracts/contracts). + +## Running Aztec PXE / Node / P2P-Bootstrap node individually + +If you wish to run components of the Aztec network stack separately, you can use the `aztec start` command with various options for enabling components. + +```bash +aztec start --node [nodeOptions] --pxe [pxeOptions] --archiver [archiverOptions] --sequencer [sequencerOptions] --prover [proverOptions] ----p2p-bootstrap [p2pOptions] +``` + +Starting the aztec node alongside a PXE, sequencer or archiver, will attach the components to the node. Eg if you want to run a PXE separately to a node, you can [read this guide](../../../guides/developer_guides/local_env/run_more_than_one_pxe_sandbox.md). + +## Update the sandbox + +To update the sandbox, run: + +```bash +aztec-up +``` \ No newline at end of file diff --git a/docs/docs/reference/developer_references/smart_contract_reference/storage/index.md b/docs/docs/reference/developer_references/smart_contract_reference/storage/index.md index 1ca6e302063..7d3730efc64 100644 --- a/docs/docs/reference/developer_references/smart_contract_reference/storage/index.md +++ b/docs/docs/reference/developer_references/smart_contract_reference/storage/index.md @@ -63,19 +63,15 @@ You can view the implementation in the Aztec.nr library [here (GitHub link)](htt You can have multiple `map`s in your contract that each have a different underlying note type, due to note type IDs. These are identifiers for each note type that are unique within a contract. -### `new` - -When declaring the storage for a map, we use the `Map::new()` constructor. As seen below, this takes the `storage_slot` and the `start_var_constructor` along with the `Context`. - -We will see examples of map constructors for public and private variables in later sections. - #### As private storage -When declaring a mapping in private storage, we have to specify which type of Note to use. In the example below, we are specifying that we want to use the `PrivateMutable` note type. +When declaring a mapping in private storage, we have to specify which type of Note to use. In the example below, we are specifying that we want to use the `PrivateMutable` note which will hold `ValueNote` types. In the Storage struct: -#include_code storage-private-mutable-declaration /noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr rust +```rust +numbers: Map>, +``` #### Public Example @@ -106,5 +102,5 @@ require(minters[msg.sender], "caller is not minter"); ## Concepts mentioned - [State Model](../../../../aztec/concepts/state_model/index.md) -- [Public-private execution](../../../../aztec/smart_contracts/communication/public_private_calls.md) +- [Public-private execution](../../../../aztec/smart_contracts/functions/public_private_calls.md) - [Function Contexts](../../../../aztec/smart_contracts/functions/context.md) diff --git a/docs/docs/tutorials/codealong/aztecjs-getting-started.md b/docs/docs/tutorials/codealong/aztecjs-getting-started.md index d4b9966e08a..d9c59554bf4 100644 --- a/docs/docs/tutorials/codealong/aztecjs-getting-started.md +++ b/docs/docs/tutorials/codealong/aztecjs-getting-started.md @@ -7,7 +7,7 @@ import Image from "@theme/IdealImage"; In this guide, we will retrieving the Sandbox and deploy a pre-written contract to it using Aztec.js. -This guide assumes you have followed the [quickstart](../../guides/developer_guides/getting_started/quickstart.md). +This guide assumes you have followed the [quickstart](../../guides/developer_guides/getting_started). ## Prerequisites diff --git a/docs/docs/tutorials/codealong/cli_wallet/faceid_wallet.md b/docs/docs/tutorials/codealong/cli_wallet/faceid_wallet.md index 426bc1227b0..73d04e960b9 100644 --- a/docs/docs/tutorials/codealong/cli_wallet/faceid_wallet.md +++ b/docs/docs/tutorials/codealong/cli_wallet/faceid_wallet.md @@ -1,5 +1,8 @@ --- title: FaceID Wallet (Mac Only) +tags: [sandbox, wallet, cli] +keywords: [wallet, cli wallet, faceid] +importance: 3 --- In this tutorial, we will use Apple Mac's Secure Enclave to store the private key, and use it in Aztec's [CLI Wallet](../../../reference/developer_references/sandbox_reference/cli_wallet_reference.md). This enables fully private, native, and seedless account abstraction! @@ -12,7 +15,7 @@ Aztec is in active development and this has only been tested on MacOS. Please re ## Prerequisites -For this tutorial, we will need to have the the [Sandbox](../../../reference/developer_references/sandbox_reference/index.md) installed. +For this tutorial, we will need to have the [Sandbox](../../../reference/developer_references/sandbox_reference/index.md) installed. We also need to install Secretive, a nice open-source package that allows us to store keys on the Secure Enclave. You can head to the [secretive releases page](https://github.com/maxgoedjen/secretive/releases) and get the last release's `zip`, unzip and move to Applications, or use [Homebrew](https://brew.sh/): diff --git a/docs/docs/tutorials/codealong/contract_tutorials/advanced/token_bridge/0_setup.md b/docs/docs/tutorials/codealong/contract_tutorials/advanced/token_bridge/0_setup.md index 0af6c030071..200c4347b48 100644 --- a/docs/docs/tutorials/codealong/contract_tutorials/advanced/token_bridge/0_setup.md +++ b/docs/docs/tutorials/codealong/contract_tutorials/advanced/token_bridge/0_setup.md @@ -17,7 +17,7 @@ We recommend going through this setup to fully understand where things live. - [node v18+ (GitHub link)](https://github.com/tj/n) - [docker](https://docs.docker.com/) -- [Aztec sandbox](../../../../../guides/developer_guides/getting_started/quickstart.md) - you should have this running before starting the tutorial +- [Aztec sandbox](../../../../../guides/developer_guides/getting_started) - you should have this running before starting the tutorial Start the sandbox diff --git a/docs/docs/tutorials/codealong/contract_tutorials/advanced/token_bridge/4_typescript_glue_code.md b/docs/docs/tutorials/codealong/contract_tutorials/advanced/token_bridge/4_typescript_glue_code.md index 3a349ae6d26..e814d562829 100644 --- a/docs/docs/tutorials/codealong/contract_tutorials/advanced/token_bridge/4_typescript_glue_code.md +++ b/docs/docs/tutorials/codealong/contract_tutorials/advanced/token_bridge/4_typescript_glue_code.md @@ -141,14 +141,14 @@ This fetches the wallets from the sandbox and deploys our cross chain harness on Paste the private flow test below the setup: -#include_code e2e_private_cross_chain /yarn-project/end-to-end/src/e2e_cross_chain_messaging.test.ts typescript +#include_code e2e_private_cross_chain /yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_private.test.ts typescript ## Public flow test Paste the public flow below the private flow: ```ts -#include_code e2e_public_cross_chain /yarn-project/end-to-end/src/e2e_public_cross_chain_messaging/deposits.test.ts raw +#include_code e2e_public_cross_chain /yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_public.test.ts raw }) ``` @@ -165,9 +165,9 @@ Note - you might have a jest error at the end of each test saying "expected 1-2 ## Next Steps -### Follow a more detailed Aztec.js tutorial +### Follow a more detailed Aztec.js tutorial -Follow the tutorial [here](../../../aztecjs-getting-started.md). +Follow the tutorial [here](../../../aztecjs-getting-started). ### Optional: Learn more about concepts mentioned here diff --git a/docs/docs/tutorials/codealong/contract_tutorials/counter_contract.md b/docs/docs/tutorials/codealong/contract_tutorials/counter_contract.md index 85109d46668..017643618aa 100644 --- a/docs/docs/tutorials/codealong/contract_tutorials/counter_contract.md +++ b/docs/docs/tutorials/codealong/contract_tutorials/counter_contract.md @@ -7,8 +7,9 @@ In this guide, we will create our first Aztec.nr smart contract. We will build a ## Prerequisites -- You have followed the [quickstart](../../../guides/developer_guides/getting_started/quickstart.md) +- You have followed the [quickstart](../../../guides/developer_guides/getting_started.md) - Running Aztec Sandbox +- Installed [Noir LSP](../../../guides/developer_guides/local_env/installing_noir_lsp.md) (optional) ## Set up a project diff --git a/docs/docs/tutorials/codealong/contract_tutorials/crowdfunding_contract.md b/docs/docs/tutorials/codealong/contract_tutorials/crowdfunding_contract.md index 9995740f5ee..ed7b0b9d21f 100644 --- a/docs/docs/tutorials/codealong/contract_tutorials/crowdfunding_contract.md +++ b/docs/docs/tutorials/codealong/contract_tutorials/crowdfunding_contract.md @@ -26,7 +26,7 @@ Along the way you will: ### Install tools -Please ensure that the you already have [Installed the Sandbox](../../../guides/developer_guides/getting_started/quickstart.md) +Please ensure that the you already have [Installed the Sandbox](../../../guides/developer_guides/getting_started) ### Create an Aztec project diff --git a/docs/docs/tutorials/codealong/contract_tutorials/private_voting_contract.md b/docs/docs/tutorials/codealong/contract_tutorials/private_voting_contract.md index e348f36350d..168b9023b50 100644 --- a/docs/docs/tutorials/codealong/contract_tutorials/private_voting_contract.md +++ b/docs/docs/tutorials/codealong/contract_tutorials/private_voting_contract.md @@ -21,7 +21,7 @@ To keep things simple, we won't create ballots or allow for delegate voting. ## Prerequisites -- You have followed the [quickstart](../../../guides/developer_guides/getting_started/quickstart.md) to install `aztec-nargo` and `aztec`. +- You have followed the [quickstart](../../../guides/developer_guides/getting_started) to install `aztec-nargo` and `aztec`. - Running Aztec Sandbox ## Set up a project @@ -128,17 +128,13 @@ The first thing we do here is assert that the vote has not ended. The code after the assertion will only run if the assertion is true. In this snippet, we read the current vote tally at the `candidate`, add 1 to it, and write this new number to the `candidate`. The `Field` element allows us to use `+` to add to an integer. -:::warning -Refer to [common patterns (Guides section)](../../../guides/developer_guides/smart_contracts/writing_contracts/common_patterns/key_rotation.md) for more information about key rotation and considerations. -::: - ## Getting the number of votes We will create a function that anyone can call that will return the number of votes at a given vote Id. Paste this in your contract: #include_code get_vote noir-projects/noir-contracts/contracts/easy_private_voting_contract/src/main.nr rust -We set it as `unconstrained` and do not annotate it because it is only reading from state. +We set it as `unconstrained` and do not annotate it because it is only reading from state. ## Allowing an admin to end a voting period @@ -176,7 +172,7 @@ Follow the crowdfunding contracts tutorial on the [next page](./crowdfunding_con ### Optional: Learn more about concepts mentioned here - - [Unconstrained functions](../../../aztec/smart_contracts/functions/index.md). - - [Oracles](../../../aztec/smart_contracts/oracles/index.md) - - [Nullifier secrets](../../../aztec/concepts/accounts/keys.md#nullifier-secrets). - - [How to deploy a contract to the sandbox](../../../guides/developer_guides/smart_contracts/how_to_deploy_contract.md) +- [Unconstrained functions](../../../aztec/smart_contracts/functions/index.md). +- [Oracles](../../../aztec/smart_contracts/oracles/index.md) +- [Nullifier secrets](../../../aztec/concepts/accounts/keys.md#nullifier-secrets). +- [How to deploy a contract to the sandbox](../../../guides/developer_guides/smart_contracts/how_to_deploy_contract.md) diff --git a/docs/docs/tutorials/codealong/contract_tutorials/token_contract.md b/docs/docs/tutorials/codealong/contract_tutorials/token_contract.md index 05920373366..26ae89d4570 100644 --- a/docs/docs/tutorials/codealong/contract_tutorials/token_contract.md +++ b/docs/docs/tutorials/codealong/contract_tutorials/token_contract.md @@ -384,6 +384,6 @@ It builds on the Token contract described here and goes into more detail about A - Review [the end to end tests (Github link)](https://github.com/AztecProtocol/aztec-packages/blob/#include_aztec_version/yarn-project/end-to-end/src/e2e_token_contract/) for reference. - [Commitments (Wikipedia link)](https://en.wikipedia.org/wiki/Commitment_scheme) - [Nullifiers](../../../aztec/concepts/storage/trees/index.md#nullifier-tree) -- [Contract Communication](../../../aztec/smart_contracts/communication/index.md). +- [Public / Private function calls](../../../aztec/smart_contracts/functions/public_private_calls.md). - [Contract Storage](../../../aztec/concepts/storage/index.md) - [Authwit](../../../aztec/concepts/accounts/authwit.md) diff --git a/docs/docs/tutorials/codealong/simple_dapp/index.md b/docs/docs/tutorials/codealong/simple_dapp/index.md index 3300cca55a6..26b04daebdc 100644 --- a/docs/docs/tutorials/codealong/simple_dapp/index.md +++ b/docs/docs/tutorials/codealong/simple_dapp/index.md @@ -12,7 +12,7 @@ The full code for this tutorial is [available on the `aztec-packages` repository - Linux or OSX environment - [NodeJS](https://nodejs.org/) 18 or higher -- [Aztec Sandbox](../../../guides/developer_guides/getting_started/quickstart.md) +- [Aztec Sandbox](../../../guides/developer_guides/getting_started) ## Prerequisites diff --git a/docs/docs/tutorials/index.md b/docs/docs/tutorials/index.md index 541dcee83eb..c6e9362c344 100644 --- a/docs/docs/tutorials/index.md +++ b/docs/docs/tutorials/index.md @@ -17,7 +17,7 @@ This page includes the most popular tutorials in order of increasing complexity. ### Beginner: Write your first smart contract
- +

Simple counter contract

@@ -33,7 +33,7 @@ This page includes the most popular tutorials in order of increasing complexity. It is recommended to follow these in order.
- +

Simple private voting contract

diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index beb364c2a2a..678e9cce230 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -197,6 +197,10 @@ const config = { appId: "CL4NK79B0W", apiKey: "21d89dadaa37a4d1b6bf4b17978dcf7f", indexName: "aztec", + contextualSearch: true, + customRanking: [ + { asc: 'importance' }, + ], }, colorMode: { defaultMode: "light", @@ -338,8 +342,8 @@ const config = { to: "/", }, { - label: "Developer Quickstart", - to: "/guides/developer_guides/getting_started/quickstart", + label: "Developer Getting Started Guide", + to: "/guides/developer_guides/getting_started", }, { label: "Aztec.nr", diff --git a/docs/netlify.toml b/docs/netlify.toml index b1fd1528562..bf5475fff6b 100644 --- a/docs/netlify.toml +++ b/docs/netlify.toml @@ -8,7 +8,7 @@ [[redirects]] from = "/getting_started" - to = "/guides/developer_guides/getting_started/quickstart" + to = "/guides/developer_guides/getting_started" [[redirects]] from = "/tutorials/simple_dapp/*" @@ -64,7 +64,7 @@ [[redirects]] from = "/developers/sandbox/*" - to = "/guides/developer_guides/getting_started/quickstart" + to = "/guides/developer_guides/getting_started" [[redirects]] from = "/developers/contracts/*" @@ -72,7 +72,7 @@ [[redirects]] from = "/dev_docs/*" - to = "/guides/developer_guides/getting_started/quickstart" + to = "/guides/developer_guides/getting_started" [[redirects]] from = "/aztec/cryptography/cryptography-roadmap" @@ -136,8 +136,12 @@ [[redirects]] from = "/reference/sandbox_reference/sandbox-reference" - to = "/guides/developer_guides/getting_started/quickstart" + to = "/guides/developer_guides/getting_started" [[redirects]] from = "/reference/sandbox_reference" - to = "/guides/developer_guides/getting_started/quickstart" \ No newline at end of file + to = "/guides/developer_guides/getting_started" + +[[redirects]] + from = "/guides/developer_guides/getting_started/quickstart" + to = "/guides/developer_guides/getting_started" \ No newline at end of file diff --git a/helm-charts/aztec-network/templates/anvil.service.yaml b/helm-charts/aztec-network/templates/anvil.service.yaml deleted file mode 100644 index c0eca3456c7..00000000000 --- a/helm-charts/aztec-network/templates/anvil.service.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "aztec-network.fullname" . }}-ethereum - labels: - {{- include "aztec-network.labels" . | nindent 4 }} -spec: - type: {{ .Values.ethereum.service.type }} - selector: - {{- include "aztec-network.selectorLabels" . | nindent 4 }} - app: ethereum - ports: - - protocol: TCP - port: {{ .Values.ethereum.service.port }} - targetPort: {{ .Values.ethereum.service.targetPort }} - {{- if and (eq .Values.ethereum.service.type "NodePort") .Values.ethereum.service.nodePort }} - nodePort: {{ .Values.ethereum.service.nodePort }} - {{- end }} \ No newline at end of file diff --git a/helm-charts/aztec-network/templates/boot-node.service.yaml b/helm-charts/aztec-network/templates/boot-node.service.yaml deleted file mode 100644 index ccaf38c0c06..00000000000 --- a/helm-charts/aztec-network/templates/boot-node.service.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "aztec-network.fullname" . }}-boot-node - labels: - {{- include "aztec-network.labels" . | nindent 4 }} -spec: - clusterIP: None - selector: - {{- include "aztec-network.selectorLabels" . | nindent 4 }} - app: boot-node - ports: - - port: {{ .Values.bootNode.service.p2pPort }} - name: p2p - - port: {{ .Values.bootNode.service.nodePort }} - name: node \ No newline at end of file diff --git a/helm-charts/aztec-network/templates/deploy-l2-contracts.job.yaml b/helm-charts/aztec-network/templates/deploy-l2-contracts.job.yaml deleted file mode 100644 index aeb84cc4eae..00000000000 --- a/helm-charts/aztec-network/templates/deploy-l2-contracts.job.yaml +++ /dev/null @@ -1,38 +0,0 @@ -apiVersion: batch/v1 -kind: Job -metadata: - name: {{ include "aztec-network.fullname" . }}-deploy-l2-contracts - labels: - {{- include "aztec-network.labels" . | nindent 4 }} -spec: - template: - metadata: - labels: - {{- include "aztec-network.selectorLabels" . | nindent 8 }} - app: deploy-l2-contracts - spec: - restartPolicy: OnFailure - containers: - - name: deploy-l2-contracts - image: {{ .Values.images.aztec.image }} - command: - - /bin/bash - - -c - - | - until curl -s -X POST -H 'content-type: application/json' \ - -d '{"jsonrpc":"2.0","method":"pxe_getNodeInfo","params":[],"id":67}' \ - {{ include "aztec-network.pxeUrl" . }} | grep -q '"enr:-'; do - echo "Waiting for PXE service..." - sleep 5 - done - echo "PXE service is ready!" - set -e - node --no-warnings /usr/src/yarn-project/aztec/dest/bin/index.js deploy-protocol-contracts - echo "Deployed L2 contracts" - env: - - name: PXE_URL - value: {{ include "aztec-network.pxeUrl" . | quote }} - - name: DEBUG - value: "aztec:*" - - name: LOG_LEVEL - value: "debug" diff --git a/helm-charts/aztec-network/templates/prover-node.service.yaml b/helm-charts/aztec-network/templates/prover-node.service.yaml deleted file mode 100644 index 1d20ba7cd3e..00000000000 --- a/helm-charts/aztec-network/templates/prover-node.service.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "aztec-network.fullname" . }}-prover-node - labels: - {{- include "aztec-network.labels" . | nindent 4 }} -spec: - clusterIP: None - selector: - {{- include "aztec-network.selectorLabels" . | nindent 4 }} - app: prover-node - ports: - - port: {{ .Values.proverNode.service.nodePort }} - name: node \ No newline at end of file diff --git a/helm-charts/aztec-network/templates/pxe.service.yaml b/helm-charts/aztec-network/templates/pxe.service.yaml deleted file mode 100644 index 09e5d2c6db3..00000000000 --- a/helm-charts/aztec-network/templates/pxe.service.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "aztec-network.fullname" . }}-pxe - labels: - {{- include "aztec-network.labels" . | nindent 4 }} -spec: - type: {{ .Values.pxe.service.type }} - selector: - {{- include "aztec-network.selectorLabels" . | nindent 4 }} - app: pxe - ports: - - protocol: TCP - port: {{ .Values.pxe.service.port }} - targetPort: {{ .Values.pxe.service.targetPort }} - {{- if and (eq .Values.pxe.service.type "NodePort") .Values.pxe.service.nodePort }} - nodePort: {{ .Values.pxe.service.nodePort }} - {{- end }} \ No newline at end of file diff --git a/helm-charts/aztec-network/templates/validator.service.yaml b/helm-charts/aztec-network/templates/validator.service.yaml deleted file mode 100644 index 0a49e7d4e6b..00000000000 --- a/helm-charts/aztec-network/templates/validator.service.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "aztec-network.fullname" . }}-validator - labels: - {{- include "aztec-network.labels" . | nindent 4 }} -spec: - clusterIP: None - selector: - {{- include "aztec-network.selectorLabels" . | nindent 4 }} - app: validator - ports: - - port: {{ .Values.validator.service.p2pPort }} - name: p2p - - port: {{ .Values.validator.service.nodePort }} - name: node \ No newline at end of file diff --git a/l1-contracts/src/core/Rollup.sol b/l1-contracts/src/core/Rollup.sol index 03f8181ddf2..73cdccaac44 100644 --- a/l1-contracts/src/core/Rollup.sol +++ b/l1-contracts/src/core/Rollup.sol @@ -4,6 +4,7 @@ pragma solidity >=0.8.18; // Interfaces import {IRollup, ITestRollup} from "./interfaces/IRollup.sol"; +import {IProofCommitmentEscrow} from "./interfaces/IProofCommitmentEscrow.sol"; import {IInbox} from "./interfaces/messagebridge/IInbox.sol"; import {IOutbox} from "./interfaces/messagebridge/IOutbox.sol"; import {IRegistry} from "./interfaces/messagebridge/IRegistry.sol"; @@ -15,13 +16,14 @@ import {HeaderLib} from "./libraries/HeaderLib.sol"; import {Errors} from "./libraries/Errors.sol"; import {Constants} from "./libraries/ConstantsGen.sol"; import {MerkleLib} from "./libraries/MerkleLib.sol"; -import {SignatureLib} from "./sequencer_selection/SignatureLib.sol"; +import {SignatureLib} from "./libraries/SignatureLib.sol"; import {SafeCast} from "@oz/utils/math/SafeCast.sol"; import {DataStructures} from "./libraries/DataStructures.sol"; import {TxsDecoder} from "./libraries/decoders/TxsDecoder.sol"; // Contracts import {MockVerifier} from "../mock/MockVerifier.sol"; +import {MockProofCommitmentEscrow} from "../mock/MockProofCommitmentEscrow.sol"; import {Inbox} from "./messagebridge/Inbox.sol"; import {Outbox} from "./messagebridge/Outbox.sol"; import {Leonidas} from "./sequencer_selection/Leonidas.sol"; @@ -35,27 +37,33 @@ import {Leonidas} from "./sequencer_selection/Leonidas.sol"; contract Rollup is Leonidas, IRollup, ITestRollup { using SafeCast for uint256; + struct ChainTips { + uint256 pendingBlockNumber; + uint256 provenBlockNumber; + } + struct BlockLog { bytes32 archive; bytes32 blockHash; uint128 slotNumber; } - // @note The number of slots within which a block must be proven - // This number is currently pulled out of thin air and should be replaced when we are not blind - // @todo #8018 - uint256 public constant TIMELINESS_PROVING_IN_SLOTS = 100; + // See https://github.com/AztecProtocol/engineering-designs/blob/main/in-progress/8401-proof-timeliness/proof-timeliness.ipynb + // for justification of CLAIM_DURATION_IN_L2_SLOTS. + uint256 public constant CLAIM_DURATION_IN_L2_SLOTS = 13; + uint256 public constant PROOF_COMMITMENT_MIN_BOND_AMOUNT_IN_TST = 1000; + uint256 public immutable L1_BLOCK_AT_GENESIS; IRegistry public immutable REGISTRY; IInbox public immutable INBOX; IOutbox public immutable OUTBOX; + IProofCommitmentEscrow public immutable PROOF_COMMITMENT_ESCROW; uint256 public immutable VERSION; IFeeJuicePortal public immutable FEE_JUICE_PORTAL; - IVerifier public verifier; - uint256 public pendingBlockCount; - uint256 public provenBlockCount; + ChainTips public tips; + DataStructures.EpochProofClaim public proofClaim; // @todo Validate assumption: // Currently we assume that the archive root following a block is specific to the block @@ -66,9 +74,9 @@ contract Rollup is Leonidas, IRollup, ITestRollup { bytes32 public vkTreeRoot; - // @note Assume that all blocks up to this value are automatically proven. Speeds up bootstrapping. + // @note Assume that all blocks up to this value (inclusive) are automatically proven. Speeds up bootstrapping. // Testing only. This should be removed eventually. - uint256 private assumeProvenUntilBlockNumber; + uint256 private assumeProvenThroughBlockNumber; constructor( IRegistry _registry, @@ -80,10 +88,12 @@ contract Rollup is Leonidas, IRollup, ITestRollup { verifier = new MockVerifier(); REGISTRY = _registry; FEE_JUICE_PORTAL = _fpcJuicePortal; + PROOF_COMMITMENT_ESCROW = new MockProofCommitmentEscrow(); INBOX = new Inbox(address(this), Constants.L1_TO_L2_MSG_SUBTREE_HEIGHT); OUTBOX = new Outbox(address(this)); vkTreeRoot = _vkTreeRoot; VERSION = 1; + L1_BLOCK_AT_GENESIS = block.number; // Genesis block blocks[0] = BlockLog({ @@ -91,9 +101,6 @@ contract Rollup is Leonidas, IRollup, ITestRollup { blockHash: bytes32(0), slotNumber: 0 }); - pendingBlockCount = 1; - provenBlockCount = 1; - for (uint256 i = 0; i < _validators.length; i++) { _addValidator(_validators[i]); } @@ -104,46 +111,28 @@ contract Rollup is Leonidas, IRollup, ITestRollup { * @notice Prune the pending chain up to the last proven block * * @dev Will revert if there is nothing to prune or if the chain is not ready to be pruned - * - * @dev While in devnet, this will be guarded behind an `onlyOwner` */ - function prune() external override(IRollup) onlyOwner { - if (pendingBlockCount == provenBlockCount) { + function prune() external override(IRollup) { + if (!_canPrune()) { revert Errors.Rollup__NothingToPrune(); } - BlockLog storage firstPendingNotInProven = blocks[provenBlockCount]; - uint256 prunableAtSlot = - uint256(firstPendingNotInProven.slotNumber) + TIMELINESS_PROVING_IN_SLOTS; - uint256 currentSlot = getCurrentSlot(); - - if (currentSlot < prunableAtSlot) { - revert Errors.Rollup__NotReadyToPrune(currentSlot, prunableAtSlot); - } - - // @note We are not deleting the blocks, but we are "winding back" the pendingBlockCount - // to the last block that was proven. - // The reason we can do this, is that any new block proposed will overwrite a previous block - // so no values should "survive". It it is however slightly odd for people reading - // the chain separately from the contract without using pendingBlockCount as a boundary. - pendingBlockCount = provenBlockCount; - - emit PrunedPending(provenBlockCount, pendingBlockCount); + _prune(); } /** - * Sets the assumeProvenUntilBlockNumber. Only the contract deployer can set it. + * Sets the assumeProvenThroughBlockNumber. Only the contract deployer can set it. * @param blockNumber - New value. */ - function setAssumeProvenUntilBlockNumber(uint256 blockNumber) + function setAssumeProvenThroughBlockNumber(uint256 blockNumber) external override(ITestRollup) onlyOwner { - if (blockNumber > provenBlockCount && blockNumber <= pendingBlockCount) { - provenBlockCount = blockNumber; + if (blockNumber > tips.provenBlockNumber && blockNumber <= tips.pendingBlockNumber) { + tips.provenBlockNumber = blockNumber; } - assumeProvenUntilBlockNumber = blockNumber; + assumeProvenThroughBlockNumber = blockNumber; } /** @@ -168,13 +157,58 @@ contract Rollup is Leonidas, IRollup, ITestRollup { vkTreeRoot = _vkTreeRoot; } - function computeTxsEffectsHash(bytes calldata _body) + function claimEpochProofRight(DataStructures.EpochProofQuote calldata _quote) external - view override(IRollup) - returns (bytes32) { - return TxsDecoder.decode(_body); + uint256 currentSlot = getCurrentSlot(); + address currentProposer = getCurrentProposer(); + uint256 epochToProve = getEpochToProve(); + + if (currentProposer != address(0) && currentProposer != msg.sender) { + revert Errors.Leonidas__InvalidProposer(currentProposer, msg.sender); + } + + if (_quote.epochToProve != epochToProve) { + revert Errors.Rollup__NotClaimingCorrectEpoch(epochToProve, _quote.epochToProve); + } + + if (currentSlot % Constants.AZTEC_EPOCH_DURATION >= CLAIM_DURATION_IN_L2_SLOTS) { + revert Errors.Rollup__NotInClaimPhase( + currentSlot % Constants.AZTEC_EPOCH_DURATION, CLAIM_DURATION_IN_L2_SLOTS + ); + } + + // if the epoch to prove is not the one that has been claimed, + // then whatever is in the proofClaim is stale + if (proofClaim.epochToProve == epochToProve && proofClaim.proposerClaimant != address(0)) { + revert Errors.Rollup__ProofRightAlreadyClaimed(); + } + + if (_quote.bondAmount < PROOF_COMMITMENT_MIN_BOND_AMOUNT_IN_TST) { + revert Errors.Rollup__InsufficientBondAmount( + PROOF_COMMITMENT_MIN_BOND_AMOUNT_IN_TST, _quote.bondAmount + ); + } + + if (_quote.validUntilSlot < currentSlot) { + revert Errors.Rollup__QuoteExpired(currentSlot, _quote.validUntilSlot); + } + + // We don't currently unstake, + // but we will as part of https://github.com/AztecProtocol/aztec-packages/issues/8652. + // Blocked on submitting epoch proofs to this contract. + PROOF_COMMITMENT_ESCROW.stakeBond(_quote.bondAmount, _quote.prover); + + proofClaim = DataStructures.EpochProofClaim({ + epochToProve: epochToProve, + basisPointFee: _quote.basisPointFee, + bondAmount: _quote.bondAmount, + bondProvider: _quote.prover, + proposerClaimant: msg.sender + }); + + emit ProofRightClaimed(epochToProve, _quote.prover, msg.sender, _quote.bondAmount, currentSlot); } /** @@ -195,6 +229,9 @@ contract Rollup is Leonidas, IRollup, ITestRollup { SignatureLib.Signature[] memory _signatures, bytes calldata _body ) external override(IRollup) { + if (_canPrune()) { + _prune(); + } bytes32 txsEffectsHash = TxsDecoder.decode(_body); // Decode and validate header @@ -211,14 +248,16 @@ contract Rollup is Leonidas, IRollup, ITestRollup { _flags: DataStructures.ExecutionFlags({ignoreDA: false, ignoreSignatures: false}) }); - blocks[pendingBlockCount++] = BlockLog({ + uint256 blockNumber = ++tips.pendingBlockNumber; + + blocks[blockNumber] = BlockLog({ archive: _archive, blockHash: _blockHash, slotNumber: header.globalVariables.slotNumber.toUint128() }); // @note The block number here will always be >=1 as the genesis block is at 0 - bytes32 inHash = INBOX.consume(header.globalVariables.blockNumber); + bytes32 inHash = INBOX.consume(blockNumber); if (header.contentCommitment.inHash != inHash) { revert Errors.Rollup__InvalidInHash(inHash, header.contentCommitment.inHash); } @@ -227,15 +266,13 @@ contract Rollup is Leonidas, IRollup, ITestRollup { // Min size = smallest path of the rollup tree + 1 (uint256 min,) = MerkleLib.computeMinMaxPathLength(header.contentCommitment.numTxs); uint256 l2ToL1TreeMinHeight = min + 1; - OUTBOX.insert( - header.globalVariables.blockNumber, header.contentCommitment.outHash, l2ToL1TreeMinHeight - ); + OUTBOX.insert(blockNumber, header.contentCommitment.outHash, l2ToL1TreeMinHeight); - emit L2BlockProposed(header.globalVariables.blockNumber); + emit L2BlockProposed(blockNumber, _archive); - // Automatically flag the block as proven if we have cheated and set assumeProvenUntilBlockNumber. - if (header.globalVariables.blockNumber < assumeProvenUntilBlockNumber) { - provenBlockCount += 1; + // Automatically flag the block as proven if we have cheated and set assumeProvenThroughBlockNumber. + if (blockNumber <= assumeProvenThroughBlockNumber) { + tips.provenBlockNumber = blockNumber; if (header.globalVariables.coinbase != address(0) && header.totalFees > 0) { // @note This will currently fail if there are insufficient funds in the bridge @@ -244,7 +281,7 @@ contract Rollup is Leonidas, IRollup, ITestRollup { FEE_JUICE_PORTAL.distributeFees(header.globalVariables.coinbase, header.totalFees); } - emit L2ProofVerified(header.globalVariables.blockNumber, "CHEAT"); + emit L2ProofVerified(blockNumber, "CHEAT"); } } @@ -279,22 +316,24 @@ contract Rollup is Leonidas, IRollup, ITestRollup { bytes calldata _aggregationObject, bytes calldata _proof ) external override(IRollup) { + if (_canPrune()) { + _prune(); + } HeaderLib.Header memory header = HeaderLib.decode(_header); - if (header.globalVariables.blockNumber >= pendingBlockCount) { + if (header.globalVariables.blockNumber > tips.pendingBlockNumber) { revert Errors.Rollup__TryingToProveNonExistingBlock(); } // @note This implicitly also ensures that we have not already proven, since - // the value `provenBlockCount` is incremented at the end of this function - if (header.globalVariables.blockNumber != provenBlockCount) { + // the value `tips.provenBlockNumber` is incremented at the end of this function + if (header.globalVariables.blockNumber != tips.provenBlockNumber + 1) { revert Errors.Rollup__NonSequentialProving(); } bytes32 expectedLastArchive = blocks[header.globalVariables.blockNumber - 1].archive; // We do it this way to provide better error messages than passing along the storage values - // TODO(#4148) Proper genesis state. If the state is empty, we allow anything for now. - if (expectedLastArchive != bytes32(0) && header.lastArchive.root != expectedLastArchive) { + if (header.lastArchive.root != expectedLastArchive) { revert Errors.Rollup__InvalidArchive(expectedLastArchive, header.lastArchive.root); } @@ -326,10 +365,8 @@ contract Rollup is Leonidas, IRollup, ITestRollup { // new_archive.next_available_leaf_index: the new archive next available index publicInputs[3] = bytes32(header.globalVariables.blockNumber + 1); - // TODO(#7346): Currently previous block hash is unchecked, but will be checked in batch rollup (block merge -> root). - // block-building-helpers.ts is injecting as 0 for now, replicating here. // previous_block_hash: the block hash just preceding this block (will eventually become the end_block_hash of the prev batch) - publicInputs[4] = bytes32(0); + publicInputs[4] = blocks[header.globalVariables.blockNumber - 1].blockHash; // end_block_hash: the current block hash (will eventually become the hash of the final block proven in a batch) publicInputs[5] = blocks[header.globalVariables.blockNumber].blockHash; @@ -373,7 +410,7 @@ contract Rollup is Leonidas, IRollup, ITestRollup { revert Errors.Rollup__InvalidProof(); } - provenBlockCount += 1; + tips.provenBlockNumber = header.globalVariables.blockNumber; for (uint256 i = 0; i < 32; i++) { address coinbase = address(uint160(uint256(publicInputs[25 + i * 2]))); @@ -389,15 +426,25 @@ contract Rollup is Leonidas, IRollup, ITestRollup { emit L2ProofVerified(header.globalVariables.blockNumber, _proverId); } - /** - * @notice Get the archive root of a specific block - * - * @param _blockNumber - The block number to get the archive root of - * - * @return bytes32 - The archive root of the block - */ - function archiveAt(uint256 _blockNumber) external view override(IRollup) returns (bytes32) { - return blocks[_blockNumber].archive; + function status(uint256 myHeaderBlockNumber) + external + view + override(IRollup) + returns ( + uint256 provenBlockNumber, + bytes32 provenArchive, + uint256 pendingBlockNumber, + bytes32 pendingArchive, + bytes32 archiveOfMyBlock + ) + { + return ( + tips.provenBlockNumber, + blocks[tips.provenBlockNumber].archive, + tips.pendingBlockNumber, + blocks[tips.pendingBlockNumber].archive, + archiveAt(myHeaderBlockNumber) + ); } /** @@ -417,7 +464,7 @@ contract Rollup is Leonidas, IRollup, ITestRollup { { uint256 slot = getSlotAt(_ts); - uint256 lastSlot = uint256(blocks[pendingBlockCount - 1].slotNumber); + uint256 lastSlot = uint256(blocks[tips.pendingBlockNumber].slotNumber); if (slot <= lastSlot) { revert Errors.Rollup__SlotAlreadyInChain(lastSlot, slot); } @@ -433,7 +480,7 @@ contract Rollup is Leonidas, IRollup, ITestRollup { DataStructures.ExecutionFlags({ignoreDA: true, ignoreSignatures: true}); _validateLeonidas(slot, sigs, _archive, flags); - return (slot, pendingBlockCount); + return (slot, tips.pendingBlockNumber + 1); } /** @@ -460,13 +507,105 @@ contract Rollup is Leonidas, IRollup, ITestRollup { _validateHeader(header, _signatures, _digest, _currentTime, _txsEffectsHash, _flags); } + function computeTxsEffectsHash(bytes calldata _body) + external + pure + override(IRollup) + returns (bytes32) + { + return TxsDecoder.decode(_body); + } + /** * @notice Get the current archive root * * @return bytes32 - The current archive root */ function archive() public view override(IRollup) returns (bytes32) { - return blocks[pendingBlockCount - 1].archive; + return blocks[tips.pendingBlockNumber].archive; + } + + function getProvenBlockNumber() public view override(IRollup) returns (uint256) { + return tips.provenBlockNumber; + } + + function getPendingBlockNumber() public view override(IRollup) returns (uint256) { + return tips.pendingBlockNumber; + } + + /** + * @notice Get the epoch that should be proven + * + * @dev This is the epoch that should be proven. It does so by getting the epoch of the block + * following the last proven block. If there is no such block (i.e. the pending chain is + * the same as the proven chain), then revert. + * + * @return uint256 - The epoch to prove + */ + function getEpochToProve() public view override(IRollup) returns (uint256) { + if (tips.provenBlockNumber == tips.pendingBlockNumber) { + revert Errors.Rollup__NoEpochToProve(); + } else { + return getEpochAt(blocks[getProvenBlockNumber() + 1].slotNumber); + } + } + + /** + * @notice Get the archive root of a specific block + * + * @param _blockNumber - The block number to get the archive root of + * + * @return bytes32 - The archive root of the block + */ + function archiveAt(uint256 _blockNumber) public view override(IRollup) returns (bytes32) { + if (_blockNumber <= tips.pendingBlockNumber) { + return blocks[_blockNumber].archive; + } + return bytes32(0); + } + + function _prune() internal { + // TODO #8656 + delete proofClaim; + + uint256 pending = tips.pendingBlockNumber; + + // @note We are not deleting the blocks, but we are "winding back" the pendingTip to the last block that was proven. + // We can do because any new block proposed will overwrite a previous block in the block log, + // so no values should "survive". + // People must therefore read the chain using the pendingTip as a boundary. + tips.pendingBlockNumber = tips.provenBlockNumber; + + emit PrunedPending(tips.provenBlockNumber, pending); + } + + function _canPrune() internal view returns (bool) { + if ( + tips.pendingBlockNumber == tips.provenBlockNumber + || tips.pendingBlockNumber <= assumeProvenThroughBlockNumber + ) { + return false; + } + + uint256 currentSlot = getCurrentSlot(); + uint256 oldestPendingEpoch = getEpochAt(blocks[tips.provenBlockNumber + 1].slotNumber); + uint256 startSlotOfPendingEpoch = oldestPendingEpoch * Constants.AZTEC_EPOCH_DURATION; + + // suppose epoch 1 is proven, epoch 2 is pending, epoch 3 is the current epoch. + // we prune the pending chain back to the end of epoch 1 if: + // - the proof claim phase of epoch 3 has ended without a claim to prove epoch 2 (or proof of epoch 2) + // - we reach epoch 4 without a proof of epoch 2 (regardless of whether a proof claim was submitted) + bool inClaimPhase = currentSlot + < startSlotOfPendingEpoch + Constants.AZTEC_EPOCH_DURATION + CLAIM_DURATION_IN_L2_SLOTS; + + bool claimExists = currentSlot < startSlotOfPendingEpoch + 2 * Constants.AZTEC_EPOCH_DURATION + && proofClaim.epochToProve == oldestPendingEpoch && proofClaim.proposerClaimant != address(0); + + if (inClaimPhase || claimExists) { + // If we are in the claim phase, do not prune + return false; + } + return true; } /** @@ -567,9 +706,9 @@ contract Rollup is Leonidas, IRollup, ITestRollup { revert Errors.Rollup__InvalidVersion(VERSION, _header.globalVariables.version); } - if (_header.globalVariables.blockNumber != pendingBlockCount) { + if (_header.globalVariables.blockNumber != tips.pendingBlockNumber + 1) { revert Errors.Rollup__InvalidBlockNumber( - pendingBlockCount, _header.globalVariables.blockNumber + tips.pendingBlockNumber + 1, _header.globalVariables.blockNumber ); } @@ -583,7 +722,7 @@ contract Rollup is Leonidas, IRollup, ITestRollup { revert Errors.Rollup__SlotValueTooLarge(slot); } - uint256 lastSlot = uint256(blocks[pendingBlockCount - 1].slotNumber); + uint256 lastSlot = uint256(blocks[tips.pendingBlockNumber].slotNumber); if (slot <= lastSlot) { revert Errors.Rollup__SlotAlreadyInChain(lastSlot, slot); } diff --git a/l1-contracts/src/core/interfaces/IProofCommitmentEscrow.sol b/l1-contracts/src/core/interfaces/IProofCommitmentEscrow.sol new file mode 100644 index 00000000000..5aa2be81ec8 --- /dev/null +++ b/l1-contracts/src/core/interfaces/IProofCommitmentEscrow.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +// Copyright 2024 Aztec Labs. +pragma solidity >=0.8.18; + +import {SignatureLib} from "../libraries/SignatureLib.sol"; + +interface IProofCommitmentEscrow { + function deposit(uint256 _amount) external; + function withdraw(uint256 _amount) external; + function stakeBond(uint256 _bondAmount, address _prover) external; + function unstakeBond(uint256 _bondAmount, address _prover) external; +} diff --git a/l1-contracts/src/core/interfaces/IRollup.sol b/l1-contracts/src/core/interfaces/IRollup.sol index ce99bd64921..464f4c93a96 100644 --- a/l1-contracts/src/core/interfaces/IRollup.sol +++ b/l1-contracts/src/core/interfaces/IRollup.sol @@ -5,35 +5,30 @@ pragma solidity >=0.8.18; import {IInbox} from "../interfaces/messagebridge/IInbox.sol"; import {IOutbox} from "../interfaces/messagebridge/IOutbox.sol"; -import {SignatureLib} from "../sequencer_selection/SignatureLib.sol"; +import {SignatureLib} from "../libraries/SignatureLib.sol"; import {DataStructures} from "../libraries/DataStructures.sol"; interface ITestRollup { function setVerifier(address _verifier) external; function setVkTreeRoot(bytes32 _vkTreeRoot) external; - function setAssumeProvenUntilBlockNumber(uint256 blockNumber) external; + function setAssumeProvenThroughBlockNumber(uint256 blockNumber) external; } interface IRollup { - event L2BlockProposed(uint256 indexed blockNumber); + event L2BlockProposed(uint256 indexed blockNumber, bytes32 indexed archive); event L2ProofVerified(uint256 indexed blockNumber, bytes32 indexed proverId); - event PrunedPending(uint256 provenBlockCount, uint256 pendingBlockCount); - - function canProposeAtTime(uint256 _ts, bytes32 _archive) external view returns (uint256, uint256); - function validateHeader( - bytes calldata _header, - SignatureLib.Signature[] memory _signatures, - bytes32 _digest, - uint256 _currentTime, - bytes32 _txsEffecstHash, - DataStructures.ExecutionFlags memory _flags - ) external view; + event PrunedPending(uint256 provenBlockNumber, uint256 pendingBlockNumber); + event ProofRightClaimed( + uint256 indexed epoch, + address indexed bondProvider, + address indexed proposer, + uint256 bondAmount, + uint256 currentSlot + ); function prune() external; - function INBOX() external view returns (IInbox); - - function OUTBOX() external view returns (IOutbox); + function claimEpochProofRight(DataStructures.EpochProofQuote calldata _quote) external; function propose( bytes calldata _header, @@ -52,6 +47,36 @@ interface IRollup { bytes calldata _proof ) external; + function canProposeAtTime(uint256 _ts, bytes32 _archive) external view returns (uint256, uint256); + function validateHeader( + bytes calldata _header, + SignatureLib.Signature[] memory _signatures, + bytes32 _digest, + uint256 _currentTime, + bytes32 _txsEffecstHash, + DataStructures.ExecutionFlags memory _flags + ) external view; + + // solhint-disable-next-line func-name-mixedcase + function INBOX() external view returns (IInbox); + + // solhint-disable-next-line func-name-mixedcase + function OUTBOX() external view returns (IOutbox); + + // solhint-disable-next-line func-name-mixedcase + function L1_BLOCK_AT_GENESIS() external view returns (uint256); + + function status(uint256 myHeaderBlockNumber) + external + view + returns ( + uint256 provenBlockCount, + bytes32 provenArchive, + uint256 pendingBlockCount, + bytes32 pendingArchive, + bytes32 archiveOfMyBlock + ); + // TODO(#7346): Integrate batch rollups // function submitRootProof( // bytes32 _previousArchive, @@ -66,5 +91,8 @@ interface IRollup { function archive() external view returns (bytes32); function archiveAt(uint256 _blockNumber) external view returns (bytes32); - function computeTxsEffectsHash(bytes calldata _body) external view returns (bytes32); + function getProvenBlockNumber() external view returns (uint256); + function getPendingBlockNumber() external view returns (uint256); + function getEpochToProve() external view returns (uint256); + function computeTxsEffectsHash(bytes calldata _body) external pure returns (bytes32); } diff --git a/l1-contracts/src/core/interfaces/messagebridge/IOutbox.sol b/l1-contracts/src/core/interfaces/messagebridge/IOutbox.sol index 74469a1e9ee..c5a986c3944 100644 --- a/l1-contracts/src/core/interfaces/messagebridge/IOutbox.sol +++ b/l1-contracts/src/core/interfaces/messagebridge/IOutbox.sol @@ -72,7 +72,7 @@ interface IOutbox { * @param _l2BlockNumber - The block number to fetch the root data for * * @return root - The root of the merkle tree containing the L2 to L1 messages - * @return minHeight - The min height for the the merkle tree that the root corresponds to + * @return minHeight - The min height for the merkle tree that the root corresponds to */ function getRootData(uint256 _l2BlockNumber) external diff --git a/l1-contracts/src/core/libraries/ConstantsGen.sol b/l1-contracts/src/core/libraries/ConstantsGen.sol index 82933e08a27..3d488ae07d9 100644 --- a/l1-contracts/src/core/libraries/ConstantsGen.sol +++ b/l1-contracts/src/core/libraries/ConstantsGen.sol @@ -83,9 +83,8 @@ library Constants { uint256 internal constant PRIVATE_KERNEL_TAIL_TO_PUBLIC_INDEX = 11; uint256 internal constant EMPTY_NESTED_INDEX = 12; uint256 internal constant PRIVATE_KERNEL_EMPTY_INDEX = 13; - uint256 internal constant PUBLIC_KERNEL_SETUP_INDEX = 14; - uint256 internal constant PUBLIC_KERNEL_APP_LOGIC_INDEX = 15; - uint256 internal constant PUBLIC_KERNEL_TEARDOWN_INDEX = 16; + uint256 internal constant PUBLIC_KERNEL_INNER_INDEX = 15; + uint256 internal constant PUBLIC_KERNEL_MERGE_INDEX = 16; uint256 internal constant PUBLIC_KERNEL_TAIL_INDEX = 17; uint256 internal constant BASE_PARITY_INDEX = 18; uint256 internal constant ROOT_PARITY_INDEX = 19; @@ -94,10 +93,8 @@ library Constants { uint256 internal constant BLOCK_ROOT_ROLLUP_INDEX = 22; uint256 internal constant BLOCK_MERGE_ROLLUP_INDEX = 23; uint256 internal constant ROOT_ROLLUP_INDEX = 24; + uint256 internal constant BLOCK_ROOT_ROLLUP_FINAL_INDEX = 25; uint256 internal constant FUNCTION_SELECTOR_NUM_BYTES = 4; - uint256 internal constant ARGS_HASH_CHUNK_LENGTH = 16; - uint256 internal constant ARGS_HASH_CHUNK_COUNT = 16; - uint256 internal constant MAX_ARGS_LENGTH = 256; uint256 internal constant INITIALIZATION_SLOT_SEPARATOR = 1000000000; uint256 internal constant INITIAL_L2_BLOCK_NUM = 1; uint256 internal constant BLOB_SIZE_IN_BYTES = 126976; @@ -130,21 +127,28 @@ library Constants { uint256 internal constant FIXED_DA_GAS = 512; uint256 internal constant FIXED_L2_GAS = 512; uint256 internal constant FIXED_AVM_STARTUP_L2_GAS = 1024; + uint256 internal constant L2_GAS_DISTRIBUTED_STORAGE_PREMIUM = 1024; + uint256 internal constant L2_GAS_PER_READ_MERKLE_HASH = 30; + uint256 internal constant L2_GAS_PER_WRITE_MERKLE_HASH = 40; + uint256 internal constant L2_GAS_PER_PUBLIC_DATA_UPDATE = 2624; + uint256 internal constant L2_GAS_PER_NOTE_HASH = 2304; + uint256 internal constant L2_GAS_PER_NULLIFIER = 2624; + uint256 internal constant L2_GAS_PER_PUBLIC_DATA_READ = 1200; + uint256 internal constant L2_GAS_PER_NOTE_HASH_READ_REQUEST = 960; + uint256 internal constant L2_GAS_PER_NULLIFIER_READ_REQUEST = 1200; + uint256 internal constant L2_GAS_PER_L1_TO_L2_MSG_READ_REQUEST = 480; uint256 internal constant L2_GAS_PER_LOG_BYTE = 4; - uint256 internal constant L2_GAS_PER_NOTE_HASH = 32; - uint256 internal constant L2_GAS_PER_NULLIFIER = 64; - uint256 internal constant CANONICAL_KEY_REGISTRY_ADDRESS = - 9694109890306420370616891858093188542026876097103155811681068343994212062621; + uint256 internal constant L2_GAS_PER_L2_TO_L1_MSG = 200; uint256 internal constant CANONICAL_AUTH_REGISTRY_ADDRESS = - 16522644890256297179255458951626875692461008240031142745359776058397274208468; + 19361441716519463065948254497947932755739298943049449145365332870925554042208; uint256 internal constant DEPLOYER_CONTRACT_ADDRESS = - 19310994760783330368337163480198602393920956587162708699802190083077641908361; + 17119407406465801909352274670277571579675739451008438338071219340964365249977; uint256 internal constant REGISTERER_CONTRACT_ADDRESS = - 2631409926445785927331173506476539962589925110142857699603561302478860342858; + 12405643717676802437578418009978929188439257864607100766293128479227092050857; uint256 internal constant FEE_JUICE_ADDRESS = - 10248142274714515101077825679585135641434041564851038865006795089686437446849; + 12096583827711775893711303288210371301779120762215263550909768879597884314839; uint256 internal constant ROUTER_ADDRESS = - 7268799613082469933251235702514160327341161584122631177360064643484764773587; + 13369993014609648298719593339393818582619449364029983937306132176549332172208; uint256 internal constant AZTEC_ADDRESS_LENGTH = 1; uint256 internal constant GAS_FEES_LENGTH = 2; uint256 internal constant GAS_LENGTH = 2; @@ -180,29 +184,33 @@ library Constants { uint256 internal constant SCOPED_NULLIFIER_LENGTH = 4; uint256 internal constant PUBLIC_CALL_STACK_ITEM_COMPRESSED_LENGTH = 13; uint256 internal constant PRIVATE_CALL_REQUEST_LENGTH = 10; - uint256 internal constant PUBLIC_CALL_REQUEST_LENGTH = 14; + uint256 internal constant PUBLIC_CALL_REQUEST_LENGTH = 8; + uint256 internal constant PUBLIC_INNER_CALL_REQUEST_LENGTH = 14; uint256 internal constant ROLLUP_VALIDATION_REQUESTS_LENGTH = 2; uint256 internal constant STATE_REFERENCE_LENGTH = 8; uint256 internal constant TX_CONTEXT_LENGTH = 9; uint256 internal constant TX_REQUEST_LENGTH = 13; uint256 internal constant TOTAL_FEES_LENGTH = 1; uint256 internal constant HEADER_LENGTH = 24; - uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 646; + uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 544; uint256 internal constant PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 691; - uint256 internal constant PRIVATE_CALL_STACK_ITEM_LENGTH = 649; + uint256 internal constant PRIVATE_CALL_STACK_ITEM_LENGTH = 547; uint256 internal constant PUBLIC_CONTEXT_INPUTS_LENGTH = 42; uint256 internal constant AGGREGATION_OBJECT_LENGTH = 16; uint256 internal constant SCOPED_READ_REQUEST_LEN = 3; - uint256 internal constant PUBLIC_DATA_READ_LENGTH = 2; + uint256 internal constant PUBLIC_DATA_READ_LENGTH = 3; uint256 internal constant PRIVATE_VALIDATION_REQUESTS_LENGTH = 772; - uint256 internal constant PUBLIC_VALIDATION_REQUESTS_LENGTH = 770; + uint256 internal constant NUM_PUBLIC_VALIDATION_REQUEST_ARRAYS = 5; + uint256 internal constant PUBLIC_VALIDATION_REQUESTS_LENGTH = 834; uint256 internal constant PUBLIC_DATA_UPDATE_REQUEST_LENGTH = 3; uint256 internal constant COMBINED_ACCUMULATED_DATA_LENGTH = 610; uint256 internal constant COMBINED_CONSTANT_DATA_LENGTH = 43; - uint256 internal constant PRIVATE_ACCUMULATED_DATA_LENGTH = 1336; - uint256 internal constant PRIVATE_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 2167; - uint256 internal constant PUBLIC_ACCUMULATED_DATA_LENGTH = 1311; - uint256 internal constant PUBLIC_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 3885; + uint256 internal constant PRIVATE_ACCUMULATED_DATA_LENGTH = 1144; + uint256 internal constant PRIVATE_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 1969; + uint256 internal constant PUBLIC_ACCUMULATED_DATA_LENGTH = 1119; + uint256 internal constant NUM_PUBLIC_ACCUMULATED_DATA_ARRAYS = 8; + uint256 internal constant PUBLIC_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 3126; + uint256 internal constant VM_CIRCUIT_PUBLIC_INPUTS_LENGTH = 2471; uint256 internal constant KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 663; uint256 internal constant CONSTANT_ROLLUP_DATA_LENGTH = 12; uint256 internal constant BASE_OR_MERGE_PUBLIC_INPUTS_LENGTH = 29; @@ -222,10 +230,18 @@ library Constants { uint256 internal constant NESTED_RECURSIVE_PROOF_LENGTH = 439; uint256 internal constant TUBE_PROOF_LENGTH = 439; uint256 internal constant VERIFICATION_KEY_LENGTH_IN_FIELDS = 128; + uint256 internal constant MEM_TAG_U1 = 1; + uint256 internal constant MEM_TAG_U8 = 2; + uint256 internal constant MEM_TAG_U16 = 3; + uint256 internal constant MEM_TAG_U32 = 4; + uint256 internal constant MEM_TAG_U64 = 5; + uint256 internal constant MEM_TAG_U128 = 6; + uint256 internal constant MEM_TAG_FF = 7; uint256 internal constant SENDER_SELECTOR = 0; uint256 internal constant ADDRESS_SELECTOR = 1; uint256 internal constant STORAGE_ADDRESS_SELECTOR = 1; uint256 internal constant FUNCTION_SELECTOR_SELECTOR = 2; + uint256 internal constant IS_STATIC_CALL_SELECTOR = 4; uint256 internal constant START_GLOBAL_VARIABLES = 29; uint256 internal constant CHAIN_ID_SELECTOR = 29; uint256 internal constant VERSION_SELECTOR = 30; @@ -249,4 +265,9 @@ library Constants { uint256 internal constant START_EMIT_NULLIFIER_WRITE_OFFSET = 144; uint256 internal constant START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET = 160; uint256 internal constant START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET = 162; + uint256 internal constant PROOF_TYPE_PLONK = 0; + uint256 internal constant PROOF_TYPE_HONK = 1; + uint256 internal constant PROOF_TYPE_OINK = 2; + uint256 internal constant PROOF_TYPE_PG = 3; + uint256 internal constant PROOF_TYPE_AVM = 4; } diff --git a/l1-contracts/src/core/libraries/DataStructures.sol b/l1-contracts/src/core/libraries/DataStructures.sol index 5462e09fa1b..8a114ce55c0 100644 --- a/l1-contracts/src/core/libraries/DataStructures.sol +++ b/l1-contracts/src/core/libraries/DataStructures.sol @@ -2,6 +2,8 @@ // Copyright 2023 Aztec Labs. pragma solidity >=0.8.18; +import {SignatureLib} from "./SignatureLib.sol"; + /** * @title Data Structures Library * @author Aztec Labs @@ -79,4 +81,21 @@ library DataStructures { bool ignoreDA; bool ignoreSignatures; } + + struct EpochProofQuote { + SignatureLib.Signature signature; + uint256 epochToProve; + uint256 validUntilSlot; + uint256 bondAmount; + address prover; + uint32 basisPointFee; + } + + struct EpochProofClaim { + uint256 epochToProve; // the epoch that the bond provider is claiming to prove + uint256 basisPointFee; // the fee that the bond provider will receive as a percentage of the block rewards + uint256 bondAmount; // the amount of escrowed funds that the bond provider will stake. Must be at least PROOF_COMMITMENT_BOND_AMOUNT + address bondProvider; // the address that has deposited funds in the escrow contract + address proposerClaimant; // the address of the proposer that submitted the claim + } } diff --git a/l1-contracts/src/core/libraries/Errors.sol b/l1-contracts/src/core/libraries/Errors.sol index db826807b5e..b5086474992 100644 --- a/l1-contracts/src/core/libraries/Errors.sol +++ b/l1-contracts/src/core/libraries/Errors.sol @@ -44,24 +44,29 @@ library Errors { error Outbox__BlockNotProven(uint256 l2BlockNumber); // 0x0e194a6d // Rollup + error Rollup__InsufficientBondAmount(uint256 minimum, uint256 provided); // 0xa165f276 error Rollup__InvalidArchive(bytes32 expected, bytes32 actual); // 0xb682a40e - error Rollup__InvalidProposedArchive(bytes32 expected, bytes32 actual); // 0x32532e73 error Rollup__InvalidBlockNumber(uint256 expected, uint256 actual); // 0xe5edf847 - error Rollup__SlotValueTooLarge(uint256 slot); // 0x7234f4fe - error Rollup__SlotAlreadyInChain(uint256 lastSlot, uint256 proposedSlot); // 0x83510bd0 + error Rollup__InvalidChainId(uint256 expected, uint256 actual); // 0x37b5bc12 error Rollup__InvalidEpoch(uint256 expected, uint256 actual); // 0x3c6d65e6 - error Rollup__TryingToProveNonExistingBlock(); // 0x34ef4954 error Rollup__InvalidInHash(bytes32 expected, bytes32 actual); // 0xcd6f4233 error Rollup__InvalidProof(); // 0xa5b2ba17 - error Rollup__InvalidChainId(uint256 expected, uint256 actual); // 0x37b5bc12 - error Rollup__InvalidVersion(uint256 expected, uint256 actual); // 0x9ef30794 + error Rollup__InvalidProposedArchive(bytes32 expected, bytes32 actual); // 0x32532e73 error Rollup__InvalidTimestamp(uint256 expected, uint256 actual); // 0x3132e895 + error Rollup__InvalidVersion(uint256 expected, uint256 actual); // 0x9ef30794 + error Rollup__NoEpochToProve(); // 0xcbaa3951 + error Rollup__NonSequentialProving(); // 0x1e5be132 + error Rollup__NotClaimingCorrectEpoch(uint256 expected, uint256 actual); // 0xf0e0744d + error Rollup__NothingToPrune(); // 0x850defd3 + error Rollup__NotInClaimPhase(uint256 currentSlotInEpoch, uint256 claimDuration); // 0xe6969f11 + error Rollup__ProofRightAlreadyClaimed(); // 0x2cac5f0a + error Rollup__QuoteExpired(uint256 currentSlot, uint256 quoteSlot); // 0x20a001eb + error Rollup__SlotAlreadyInChain(uint256 lastSlot, uint256 proposedSlot); // 0x83510bd0 + error Rollup__SlotValueTooLarge(uint256 slot); // 0x7234f4fe error Rollup__TimestampInFuture(uint256 max, uint256 actual); // 0x89f30690 error Rollup__TimestampTooOld(); // 0x72ed9c81 + error Rollup__TryingToProveNonExistingBlock(); // 0x34ef4954 error Rollup__UnavailableTxs(bytes32 txsHash); // 0x414906c3 - error Rollup__NothingToPrune(); // 0x850defd3 - error Rollup__NotReadyToPrune(uint256 currentSlot, uint256 prunableAt); // 0x9fdf1614 - error Rollup__NonSequentialProving(); // 0x1e5be132 // Registry error Registry__RollupNotRegistered(address rollup); // 0xa1fee4cf diff --git a/l1-contracts/src/core/sequencer_selection/SignatureLib.sol b/l1-contracts/src/core/libraries/SignatureLib.sol similarity index 88% rename from l1-contracts/src/core/sequencer_selection/SignatureLib.sol rename to l1-contracts/src/core/libraries/SignatureLib.sol index 434e6945c3f..1bb8d6fb050 100644 --- a/l1-contracts/src/core/sequencer_selection/SignatureLib.sol +++ b/l1-contracts/src/core/libraries/SignatureLib.sol @@ -1,6 +1,8 @@ +// SPDX-License-Identifier: Apache-2.0 +// Copyright 2024 Aztec Labs. pragma solidity ^0.8.13; -import {Errors} from "../libraries/Errors.sol"; +import {Errors} from "./Errors.sol"; library SignatureLib { struct Signature { diff --git a/l1-contracts/src/core/messagebridge/Outbox.sol b/l1-contracts/src/core/messagebridge/Outbox.sol index d4131930d8c..eeb56348450 100644 --- a/l1-contracts/src/core/messagebridge/Outbox.sol +++ b/l1-contracts/src/core/messagebridge/Outbox.sol @@ -81,7 +81,7 @@ contract Outbox is IOutbox { uint256 _leafIndex, bytes32[] calldata _path ) external override(IOutbox) { - if (_l2BlockNumber >= ROLLUP.provenBlockCount()) { + if (_l2BlockNumber > ROLLUP.getProvenBlockNumber()) { revert Errors.Outbox__BlockNotProven(_l2BlockNumber); } @@ -149,7 +149,7 @@ contract Outbox is IOutbox { * @param _l2BlockNumber - The block number to fetch the root data for * * @return root - The root of the merkle tree containing the L2 to L1 messages - * @return minHeight - The min height for the the merkle tree that the root corresponds to + * @return minHeight - The min height for the merkle tree that the root corresponds to */ function getRootData(uint256 _l2BlockNumber) external @@ -157,7 +157,7 @@ contract Outbox is IOutbox { override(IOutbox) returns (bytes32 root, uint256 minHeight) { - if (_l2BlockNumber >= ROLLUP.provenBlockCount()) { + if (_l2BlockNumber > ROLLUP.getProvenBlockNumber()) { return (bytes32(0), 0); } RootData storage rootData = roots[_l2BlockNumber]; diff --git a/l1-contracts/src/core/sequencer_selection/ILeonidas.sol b/l1-contracts/src/core/sequencer_selection/ILeonidas.sol index a9542975205..68a58572236 100644 --- a/l1-contracts/src/core/sequencer_selection/ILeonidas.sol +++ b/l1-contracts/src/core/sequencer_selection/ILeonidas.sol @@ -27,4 +27,7 @@ interface ILeonidas { function getCurrentEpochCommittee() external view returns (address[] memory); function getEpochCommittee(uint256 _epoch) external view returns (address[] memory); function getValidators() external view returns (address[] memory); + + function getEpochAt(uint256 _ts) external view returns (uint256); + function getSlotAt(uint256 _ts) external view returns (uint256); } diff --git a/l1-contracts/src/core/sequencer_selection/Leonidas.sol b/l1-contracts/src/core/sequencer_selection/Leonidas.sol index ad9550c794f..8a90052500f 100644 --- a/l1-contracts/src/core/sequencer_selection/Leonidas.sol +++ b/l1-contracts/src/core/sequencer_selection/Leonidas.sol @@ -6,8 +6,8 @@ import {DataStructures} from "../libraries/DataStructures.sol"; import {Errors} from "../libraries/Errors.sol"; import {EnumerableSet} from "@oz/utils/structs/EnumerableSet.sol"; import {Ownable} from "@oz/access/Ownable.sol"; -import {SignatureLib} from "./SignatureLib.sol"; import {SampleLib} from "./SampleLib.sol"; +import {SignatureLib} from "../libraries/SignatureLib.sol"; import {Constants} from "../libraries/ConstantsGen.sol"; import {MessageHashUtils} from "@oz/utils/cryptography/MessageHashUtils.sol"; @@ -128,28 +128,6 @@ contract Leonidas is Ownable, ILeonidas { return epochs[_epoch].committee; } - function getCommitteeAt(uint256 _ts) internal view returns (address[] memory) { - uint256 epochNumber = getEpochAt(_ts); - Epoch storage epoch = epochs[epochNumber]; - - if (epoch.sampleSeed != 0) { - uint256 committeeSize = epoch.committee.length; - if (committeeSize == 0) { - return new address[](0); - } - return epoch.committee; - } - - // Allow anyone if there is no validator set - if (validatorSet.length() == 0) { - return new address[](0); - } - - // Emulate a sampling of the validators - uint256 sampleSeed = _getSampleSeed(epochNumber); - return _sampleValidators(sampleSeed); - } - /** * @notice Get the validator set for the current epoch * @return The validator set for the current epoch @@ -169,6 +147,28 @@ contract Leonidas is Ownable, ILeonidas { return validatorSet.values(); } + /** + * @notice Performs a setup of an epoch if needed. The setup will + * - Sample the validator set for the epoch + * - Set the seed for the epoch + * - Update the last seed + * + * @dev Since this is a reference optimising for simplicity, we store the actual validator set in the epoch structure. + * This is very heavy on gas, so start crying because the gas here will melt the poles + * https://i.giphy.com/U1aN4HTfJ2SmgB2BBK.webp + */ + function setupEpoch() public override(ILeonidas) { + uint256 epochNumber = getCurrentEpoch(); + Epoch storage epoch = epochs[epochNumber]; + + if (epoch.sampleSeed == 0) { + epoch.sampleSeed = _getSampleSeed(epochNumber); + epoch.nextSeed = lastSeed = _computeNextSeed(epochNumber); + + epoch.committee = _sampleValidators(epoch.sampleSeed); + } + } + /** * @notice Get the number of validators in the validator set * @@ -198,28 +198,6 @@ contract Leonidas is Ownable, ILeonidas { return validatorSet.contains(_validator); } - /** - * @notice Performs a setup of an epoch if needed. The setup will - * - Sample the validator set for the epoch - * - Set the seed for the epoch - * - Update the last seed - * - * @dev Since this is a reference optimising for simplicity, we store the actual validator set in the epoch structure. - * This is very heavy on gas, so start crying because the gas here will melt the poles - * https://i.giphy.com/U1aN4HTfJ2SmgB2BBK.webp - */ - function setupEpoch() public override(ILeonidas) { - uint256 epochNumber = getCurrentEpoch(); - Epoch storage epoch = epochs[epochNumber]; - - if (epoch.sampleSeed == 0) { - epoch.sampleSeed = _getSampleSeed(epochNumber); - epoch.nextSeed = lastSeed = _computeNextSeed(epochNumber); - - epoch.committee = _sampleValidators(epoch.sampleSeed); - } - } - /** * @notice Get the current epoch number * @@ -289,9 +267,6 @@ contract Leonidas is Ownable, ILeonidas { function getProposerAt(uint256 _ts) public view override(ILeonidas) returns (address) { uint256 epochNumber = getEpochAt(_ts); uint256 slot = getSlotAt(_ts); - if (epochNumber == 0) { - return address(0); - } Epoch storage epoch = epochs[epochNumber]; @@ -317,6 +292,28 @@ contract Leonidas is Ownable, ILeonidas { return committee[_computeProposerIndex(epochNumber, slot, sampleSeed, committee.length)]; } + /** + * @notice Computes the epoch at a specific time + * + * @param _ts - The timestamp to compute the epoch for + * + * @return The computed epoch + */ + function getEpochAt(uint256 _ts) public view override(ILeonidas) returns (uint256) { + return _ts < GENESIS_TIME ? 0 : (_ts - GENESIS_TIME) / (EPOCH_DURATION * SLOT_DURATION); + } + + /** + * @notice Computes the slot at a specific time + * + * @param _ts - The timestamp to compute the slot for + * + * @return The computed slot + */ + function getSlotAt(uint256 _ts) public view override(ILeonidas) returns (uint256) { + return _ts < GENESIS_TIME ? 0 : (_ts - GENESIS_TIME) / SLOT_DURATION; + } + /** * @notice Adds a validator to the set WITHOUT setting up the epoch * @param _validator - The validator to add @@ -325,6 +322,28 @@ contract Leonidas is Ownable, ILeonidas { validatorSet.add(_validator); } + function getCommitteeAt(uint256 _ts) internal view returns (address[] memory) { + uint256 epochNumber = getEpochAt(_ts); + Epoch storage epoch = epochs[epochNumber]; + + if (epoch.sampleSeed != 0) { + uint256 committeeSize = epoch.committee.length; + if (committeeSize == 0) { + return new address[](0); + } + return epoch.committee; + } + + // Allow anyone if there is no validator set + if (validatorSet.length() == 0) { + return new address[](0); + } + + // Emulate a sampling of the validators + uint256 sampleSeed = _getSampleSeed(epochNumber); + return _sampleValidators(sampleSeed); + } + /** * @notice Propose a pending block from the point-of-view of sequencer selection. Will: * - Setup the epoch if needed (if epoch committee is empty skips the rest) @@ -378,8 +397,7 @@ contract Leonidas is Ownable, ILeonidas { // Validate the attestations uint256 validAttestations = 0; - bytes32 ethSignedDigest = _digest.toEthSignedMessageHash(); - + bytes32 digest = _digest.toEthSignedMessageHash(); for (uint256 i = 0; i < _signatures.length; i++) { SignatureLib.Signature memory signature = _signatures[i]; if (signature.isEmpty) { @@ -387,7 +405,7 @@ contract Leonidas is Ownable, ILeonidas { } // The verification will throw if invalid - signature.verify(committee[i], ethSignedDigest); + signature.verify(committee[i], digest); validAttestations++; } @@ -396,6 +414,20 @@ contract Leonidas is Ownable, ILeonidas { } } + /** + * @notice Computes the nextSeed for an epoch + * + * @dev We include the `_epoch` instead of using the randao directly to avoid issues with foundry testing + * where randao == 0. + * + * @param _epoch - The epoch to compute the seed for + * + * @return The computed seed + */ + function _computeNextSeed(uint256 _epoch) private view returns (uint256) { + return uint256(keccak256(abi.encode(_epoch, block.prevrandao))); + } + /** * @notice Samples a validator set for a specific epoch * @@ -456,42 +488,6 @@ contract Leonidas is Ownable, ILeonidas { return lastSeed; } - /** - * @notice Computes the epoch at a specific time - * - * @param _ts - The timestamp to compute the epoch for - * - * @return The computed epoch - */ - function getEpochAt(uint256 _ts) public view returns (uint256) { - return (_ts - GENESIS_TIME) / (EPOCH_DURATION * SLOT_DURATION); - } - - /** - * @notice Computes the slot at a specific time - * - * @param _ts - The timestamp to compute the slot for - * - * @return The computed slot - */ - function getSlotAt(uint256 _ts) public view returns (uint256) { - return (_ts - GENESIS_TIME) / SLOT_DURATION; - } - - /** - * @notice Computes the nextSeed for an epoch - * - * @dev We include the `_epoch` instead of using the randao directly to avoid issues with foundry testing - * where randao == 0. - * - * @param _epoch - The epoch to compute the seed for - * - * @return The computed seed - */ - function _computeNextSeed(uint256 _epoch) private view returns (uint256) { - return uint256(keccak256(abi.encode(_epoch, block.prevrandao))); - } - /** * @notice Computes the index of the committee member that acts as proposer for a given slot * diff --git a/l1-contracts/src/mock/MockProofCommitmentEscrow.sol b/l1-contracts/src/mock/MockProofCommitmentEscrow.sol new file mode 100644 index 00000000000..89e61d3c241 --- /dev/null +++ b/l1-contracts/src/mock/MockProofCommitmentEscrow.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: Apache-2.0 +// Copyright 2024 Aztec Labs. +pragma solidity >=0.8.18; + +import {SignatureLib} from "../core/libraries/SignatureLib.sol"; +import {IProofCommitmentEscrow} from "../core/interfaces/IProofCommitmentEscrow.sol"; + +contract MockProofCommitmentEscrow is IProofCommitmentEscrow { + function deposit(uint256 _amount) external override { + // do nothing + } + + function withdraw(uint256 _amount) external override { + // do nothing + } + + function unstakeBond(uint256 _amount, address _prover) external override { + // do nothing + } + + function stakeBond(uint256 _amount, address _prover) external override { + // do nothing + } +} diff --git a/l1-contracts/test/Outbox.t.sol b/l1-contracts/test/Outbox.t.sol index 420e16625c7..f25bfd2e1b9 100644 --- a/l1-contracts/test/Outbox.t.sol +++ b/l1-contracts/test/Outbox.t.sol @@ -12,10 +12,10 @@ import {NaiveMerkle} from "./merkle/Naive.sol"; import {MerkleTestUtil} from "./merkle/TestUtil.sol"; contract FakeRollup { - uint256 public provenBlockCount = 1; + uint256 public getProvenBlockNumber = 0; - function setProvenBlockCount(uint256 _provenBlockCount) public { - provenBlockCount = _provenBlockCount; + function setProvenBlockNum(uint256 _provenBlockNum) public { + getProvenBlockNumber = _provenBlockNum; } } @@ -33,7 +33,7 @@ contract OutboxTest is Test { function setUp() public { ROLLUP_CONTRACT = address(new FakeRollup()); - FakeRollup(ROLLUP_CONTRACT).setProvenBlockCount(2); + FakeRollup(ROLLUP_CONTRACT).setProvenBlockNum(1); outbox = new Outbox(ROLLUP_CONTRACT); zeroedTree = new NaiveMerkle(DEFAULT_TREE_HEIGHT); @@ -203,7 +203,7 @@ contract OutboxTest is Test { } function testRevertIfConsumingFromTreeNotProven() public { - FakeRollup(ROLLUP_CONTRACT).setProvenBlockCount(1); + FakeRollup(ROLLUP_CONTRACT).setProvenBlockNum(0); DataStructures.L2ToL1Msg memory fakeMessage = _fakeMessage(address(this)); bytes32 leaf = fakeMessage.sha256ToField(); @@ -256,7 +256,7 @@ contract OutboxTest is Test { uint8 _size ) public { uint256 blockNumber = bound(_blockNumber, 1, 256); - FakeRollup(ROLLUP_CONTRACT).setProvenBlockCount(blockNumber + 1); + FakeRollup(ROLLUP_CONTRACT).setProvenBlockNum(blockNumber); uint256 numberOfMessages = bound(_size, 1, _recipients.length); DataStructures.L2ToL1Msg[] memory messages = new DataStructures.L2ToL1Msg[](numberOfMessages); diff --git a/l1-contracts/test/Rollup.t.sol b/l1-contracts/test/Rollup.t.sol index e9b1f899eaa..27e20595c59 100644 --- a/l1-contracts/test/Rollup.t.sol +++ b/l1-contracts/test/Rollup.t.sol @@ -6,6 +6,7 @@ import {DecoderBase} from "./decoders/Base.sol"; import {DataStructures} from "../src/core/libraries/DataStructures.sol"; import {Constants} from "../src/core/libraries/ConstantsGen.sol"; +import {SignatureLib} from "../src/core/libraries/SignatureLib.sol"; import {Registry} from "../src/core/messagebridge/Registry.sol"; import {Inbox} from "../src/core/messagebridge/Inbox.sol"; @@ -13,9 +14,9 @@ import {Outbox} from "../src/core/messagebridge/Outbox.sol"; import {Errors} from "../src/core/libraries/Errors.sol"; import {Rollup} from "../src/core/Rollup.sol"; import {IFeeJuicePortal} from "../src/core/interfaces/IFeeJuicePortal.sol"; +import {IRollup} from "../src/core/interfaces/IRollup.sol"; import {FeeJuicePortal} from "../src/core/FeeJuicePortal.sol"; import {Leonidas} from "../src/core/sequencer_selection/Leonidas.sol"; -import {SignatureLib} from "../src/core/sequencer_selection/SignatureLib.sol"; import {NaiveMerkle} from "./merkle/Naive.sol"; import {MerkleTestUtil} from "./merkle/TestUtil.sol"; import {PortalERC20} from "./portals/PortalERC20.sol"; @@ -23,6 +24,8 @@ import {PortalERC20} from "./portals/PortalERC20.sol"; import {TxsDecoderHelper} from "./decoders/helpers/TxsDecoderHelper.sol"; import {IERC20Errors} from "@oz/interfaces/draft-IERC6093.sol"; +// solhint-disable comprehensive-interface + /** * Blocks are generated using the `integration_l1_publisher.test.ts` tests. * Main use of these test is shorter cycles when updating the decoder contract. @@ -76,6 +79,284 @@ contract RollupTest is DecoderBase { _; } + function warpToL2Slot(uint256 _slot) public { + vm.warp(rollup.getTimestampForSlot(_slot)); + } + + function testClaimWithNothingToProve() public setUpFor("mixed_block_1") { + assertEq(rollup.getCurrentSlot(), 0, "genesis slot should be zero"); + + DataStructures.EpochProofQuote memory quote = DataStructures.EpochProofQuote({ + signature: SignatureLib.Signature({isEmpty: false, v: 27, r: bytes32(0), s: bytes32(0)}), + epochToProve: 0, + validUntilSlot: 1, + bondAmount: rollup.PROOF_COMMITMENT_MIN_BOND_AMOUNT_IN_TST(), + prover: address(this), + basisPointFee: 0 + }); + + // sanity check that proven/pending tip are at genesis + vm.expectRevert(abi.encodeWithSelector(Errors.Rollup__NoEpochToProve.selector)); + rollup.claimEpochProofRight(quote); + + warpToL2Slot(1); + assertEq(rollup.getCurrentSlot(), 1, "warp to slot 1 failed"); + assertEq(rollup.getCurrentEpoch(), 0, "Invalid current epoch"); + + // empty slots do not move pending chain + vm.expectRevert(abi.encodeWithSelector(Errors.Rollup__NoEpochToProve.selector)); + rollup.claimEpochProofRight(quote); + } + + function testClaimWithWrongEpoch() public setUpFor("mixed_block_1") { + _testBlock("mixed_block_1", false, 0); + + DataStructures.EpochProofQuote memory quote = DataStructures.EpochProofQuote({ + signature: SignatureLib.Signature({isEmpty: false, v: 27, r: bytes32(0), s: bytes32(0)}), + epochToProve: 1, + validUntilSlot: 1, + bondAmount: rollup.PROOF_COMMITMENT_MIN_BOND_AMOUNT_IN_TST(), + prover: address(this), + basisPointFee: 0 + }); + + vm.expectRevert( + abi.encodeWithSelector(Errors.Rollup__NotClaimingCorrectEpoch.selector, 0, quote.epochToProve) + ); + rollup.claimEpochProofRight(quote); + } + + function testClaimWithInsufficientBond() public setUpFor("mixed_block_1") { + _testBlock("mixed_block_1", false, 0); + + DataStructures.EpochProofQuote memory quote = DataStructures.EpochProofQuote({ + signature: SignatureLib.Signature({isEmpty: false, v: 27, r: bytes32(0), s: bytes32(0)}), + epochToProve: 0, + validUntilSlot: 1, + bondAmount: 0, + prover: address(this), + basisPointFee: 0 + }); + + vm.expectRevert( + abi.encodeWithSelector( + Errors.Rollup__InsufficientBondAmount.selector, + rollup.PROOF_COMMITMENT_MIN_BOND_AMOUNT_IN_TST(), + quote.bondAmount + ) + ); + rollup.claimEpochProofRight(quote); + } + + function testClaimPastValidUntil() public setUpFor("mixed_block_1") { + _testBlock("mixed_block_1", false, 0); + + DataStructures.EpochProofQuote memory quote = DataStructures.EpochProofQuote({ + signature: SignatureLib.Signature({isEmpty: false, v: 27, r: bytes32(0), s: bytes32(0)}), + epochToProve: 0, + validUntilSlot: 0, + bondAmount: rollup.PROOF_COMMITMENT_MIN_BOND_AMOUNT_IN_TST(), + prover: address(this), + basisPointFee: 0 + }); + + warpToL2Slot(1); + + vm.expectRevert( + abi.encodeWithSelector(Errors.Rollup__QuoteExpired.selector, 1, quote.validUntilSlot) + ); + rollup.claimEpochProofRight(quote); + } + + function testClaimSimple() public setUpFor("mixed_block_1") { + _testBlock("mixed_block_1", false, 0); + + DataStructures.EpochProofQuote memory quote = DataStructures.EpochProofQuote({ + signature: SignatureLib.Signature({isEmpty: false, v: 27, r: bytes32(0), s: bytes32(0)}), + epochToProve: 0, + validUntilSlot: 1, + bondAmount: rollup.PROOF_COMMITMENT_MIN_BOND_AMOUNT_IN_TST(), + prover: address(0), + basisPointFee: 0 + }); + + warpToL2Slot(1); + + vm.expectEmit(true, true, true, true); + emit IRollup.ProofRightClaimed( + quote.epochToProve, address(0), address(this), quote.bondAmount, 1 + ); + rollup.claimEpochProofRight(quote); + + ( + uint256 epochToProve, + uint256 basisPointFee, + uint256 bondAmount, + address bondProvider, + address proposerClaimant + ) = rollup.proofClaim(); + assertEq(epochToProve, quote.epochToProve, "Invalid epoch to prove"); + assertEq(basisPointFee, quote.basisPointFee, "Invalid basis point fee"); + assertEq(bondAmount, quote.bondAmount, "Invalid bond amount"); + // TODO #8573 + // This will be fixed with proper escrow + assertEq(bondProvider, address(0), "Invalid bond provider"); + assertEq(proposerClaimant, address(this), "Invalid proposer claimant"); + } + + function testClaimTwice() public setUpFor("mixed_block_1") { + _testBlock("mixed_block_1", false, 0); + + DataStructures.EpochProofQuote memory quote = DataStructures.EpochProofQuote({ + signature: SignatureLib.Signature({isEmpty: false, v: 27, r: bytes32(0), s: bytes32(0)}), + epochToProve: 0, + validUntilSlot: 1, + bondAmount: rollup.PROOF_COMMITMENT_MIN_BOND_AMOUNT_IN_TST(), + prover: address(this), + basisPointFee: 0 + }); + + warpToL2Slot(1); + + rollup.claimEpochProofRight(quote); + + vm.expectRevert(abi.encodeWithSelector(Errors.Rollup__ProofRightAlreadyClaimed.selector)); + rollup.claimEpochProofRight(quote); + + warpToL2Slot(2); + vm.expectRevert(abi.encodeWithSelector(Errors.Rollup__ProofRightAlreadyClaimed.selector)); + rollup.claimEpochProofRight(quote); + + // warp to epoch 1 + warpToL2Slot(Constants.AZTEC_EPOCH_DURATION); + assertEq(rollup.getCurrentEpoch(), 1, "Invalid current epoch"); + + // We should still be trying to prove epoch 0 in epoch 1 + vm.expectRevert(abi.encodeWithSelector(Errors.Rollup__ProofRightAlreadyClaimed.selector)); + rollup.claimEpochProofRight(quote); + + // still nothing to prune + vm.expectRevert(abi.encodeWithSelector(Errors.Rollup__NothingToPrune.selector)); + rollup.prune(); + } + + function testClaimOutsideClaimPhase() public setUpFor("mixed_block_1") { + _testBlock("mixed_block_1", false, 0); + + DataStructures.EpochProofQuote memory quote = DataStructures.EpochProofQuote({ + signature: SignatureLib.Signature({isEmpty: false, v: 27, r: bytes32(0), s: bytes32(0)}), + epochToProve: 0, + validUntilSlot: 1, + bondAmount: rollup.PROOF_COMMITMENT_MIN_BOND_AMOUNT_IN_TST(), + prover: address(this), + basisPointFee: 0 + }); + + warpToL2Slot(Constants.AZTEC_EPOCH_DURATION + rollup.CLAIM_DURATION_IN_L2_SLOTS()); + + vm.expectRevert( + abi.encodeWithSelector( + Errors.Rollup__NotInClaimPhase.selector, + rollup.CLAIM_DURATION_IN_L2_SLOTS(), + rollup.CLAIM_DURATION_IN_L2_SLOTS() + ) + ); + rollup.claimEpochProofRight(quote); + } + + function testNoPruneWhenClaimExists() public setUpFor("mixed_block_1") { + _testBlock("mixed_block_1", false, 0); + + DataStructures.EpochProofQuote memory quote = DataStructures.EpochProofQuote({ + signature: SignatureLib.Signature({isEmpty: false, v: 27, r: bytes32(0), s: bytes32(0)}), + epochToProve: 0, + validUntilSlot: 2 * Constants.AZTEC_EPOCH_DURATION, + bondAmount: rollup.PROOF_COMMITMENT_MIN_BOND_AMOUNT_IN_TST(), + prover: address(this), + basisPointFee: 0 + }); + + warpToL2Slot(Constants.AZTEC_EPOCH_DURATION + rollup.CLAIM_DURATION_IN_L2_SLOTS() - 1); + + rollup.claimEpochProofRight(quote); + + warpToL2Slot(Constants.AZTEC_EPOCH_DURATION + rollup.CLAIM_DURATION_IN_L2_SLOTS()); + + vm.expectRevert(abi.encodeWithSelector(Errors.Rollup__NothingToPrune.selector)); + rollup.prune(); + } + + function testPruneWhenClaimExpires() public setUpFor("mixed_block_1") { + _testBlock("mixed_block_1", false, 0); + + DataStructures.EpochProofQuote memory quote = DataStructures.EpochProofQuote({ + signature: SignatureLib.Signature({isEmpty: false, v: 27, r: bytes32(0), s: bytes32(0)}), + epochToProve: 0, + validUntilSlot: 2 * Constants.AZTEC_EPOCH_DURATION, + bondAmount: rollup.PROOF_COMMITMENT_MIN_BOND_AMOUNT_IN_TST(), + prover: address(this), + basisPointFee: 0 + }); + + warpToL2Slot(Constants.AZTEC_EPOCH_DURATION + rollup.CLAIM_DURATION_IN_L2_SLOTS() - 1); + + rollup.claimEpochProofRight(quote); + + warpToL2Slot(Constants.AZTEC_EPOCH_DURATION * 2); + + // We should still be trying to prove epoch 0 in epoch 2 + vm.expectRevert(abi.encodeWithSelector(Errors.Rollup__ProofRightAlreadyClaimed.selector)); + rollup.claimEpochProofRight(quote); + + rollup.prune(); + + vm.expectRevert(abi.encodeWithSelector(Errors.Rollup__NoEpochToProve.selector)); + rollup.claimEpochProofRight(quote); + } + + function testClaimAfterPrune() public setUpFor("mixed_block_1") { + _testBlock("mixed_block_1", false, 0); + + DataStructures.EpochProofQuote memory quote = DataStructures.EpochProofQuote({ + signature: SignatureLib.Signature({isEmpty: false, v: 27, r: bytes32(0), s: bytes32(0)}), + epochToProve: 0, + validUntilSlot: 2 * Constants.AZTEC_EPOCH_DURATION, + bondAmount: rollup.PROOF_COMMITMENT_MIN_BOND_AMOUNT_IN_TST(), + prover: address(this), + basisPointFee: 0 + }); + + warpToL2Slot(Constants.AZTEC_EPOCH_DURATION + rollup.CLAIM_DURATION_IN_L2_SLOTS() - 1); + + rollup.claimEpochProofRight(quote); + + warpToL2Slot(Constants.AZTEC_EPOCH_DURATION * 2); + + rollup.prune(); + + _testBlock("mixed_block_1", false, Constants.AZTEC_EPOCH_DURATION * 2); + + vm.expectEmit(true, true, true, true); + emit IRollup.ProofRightClaimed( + quote.epochToProve, + address(this), + address(this), + quote.bondAmount, + Constants.AZTEC_EPOCH_DURATION * 2 + ); + rollup.claimEpochProofRight(quote); + } + + function testPruneWhenNoProofClaim() public setUpFor("mixed_block_1") { + _testBlock("mixed_block_1", false); + warpToL2Slot(Constants.AZTEC_EPOCH_DURATION + rollup.CLAIM_DURATION_IN_L2_SLOTS() - 1); + vm.expectRevert(abi.encodeWithSelector(Errors.Rollup__NothingToPrune.selector)); + rollup.prune(); + + warpToL2Slot(Constants.AZTEC_EPOCH_DURATION + rollup.CLAIM_DURATION_IN_L2_SLOTS()); + rollup.prune(); + } + function testRevertProveTwice() public setUpFor("mixed_block_1") { DecoderBase.Data memory data = load("mixed_block_1").block; bytes memory header = data.header; @@ -113,13 +394,7 @@ contract RollupTest is DecoderBase { _testBlock("mixed_block_1", false); - uint256 currentSlot = rollup.getCurrentSlot(); - (,, uint128 slot) = rollup.blocks(1); - uint256 prunableAt = uint256(slot) + rollup.TIMELINESS_PROVING_IN_SLOTS(); - - vm.expectRevert( - abi.encodeWithSelector(Errors.Rollup__NotReadyToPrune.selector, currentSlot, prunableAt) - ); + vm.expectRevert(abi.encodeWithSelector(Errors.Rollup__NothingToPrune.selector)); rollup.prune(); } @@ -133,13 +408,13 @@ contract RollupTest is DecoderBase { bytes32 inboxRoot2 = inbox.getRoot(2); (,, uint128 slot) = rollup.blocks(1); - uint256 prunableAt = uint256(slot) + rollup.TIMELINESS_PROVING_IN_SLOTS(); + uint256 prunableAt = uint256(slot) + Constants.AZTEC_EPOCH_DURATION * 2; uint256 timeOfPrune = rollup.getTimestampForSlot(prunableAt); vm.warp(timeOfPrune); - assertEq(rollup.pendingBlockCount(), 2, "Invalid pending block count"); - assertEq(rollup.provenBlockCount(), 1, "Invalid proven block count"); + assertEq(rollup.getPendingBlockNumber(), 1, "Invalid pending block number"); + assertEq(rollup.getProvenBlockNumber(), 0, "Invalid proven block number"); // @note Get the root and min height that we have in the outbox. // We read it directly in storage because it is not yet proven, so the getter will give (0, 0). @@ -154,20 +429,20 @@ contract RollupTest is DecoderBase { rollup.prune(); assertEq(inbox.inProgress(), 3, "Invalid in progress"); - assertEq(rollup.pendingBlockCount(), 1, "Invalid pending block count"); - assertEq(rollup.provenBlockCount(), 1, "Invalid proven block count"); + assertEq(rollup.getPendingBlockNumber(), 0, "Invalid pending block number"); + assertEq(rollup.getProvenBlockNumber(), 0, "Invalid proven block number"); // @note We alter what slot is specified in the empty block! // This means that we keep the `empty_block_1` mostly as is, but replace the slot number // and timestamp as if it was created at a different point in time. This allow us to insert it // as if it was the first block, even after we had originally inserted the mixed block. - // An example where this could happen would be if no-one could proof the mixed block. + // An example where this could happen would be if no-one could prove the mixed block. _testBlock("empty_block_1", false, prunableAt); assertEq(inbox.inProgress(), 3, "Invalid in progress"); assertEq(inbox.getRoot(2), inboxRoot2, "Invalid inbox root"); - assertEq(rollup.pendingBlockCount(), 2, "Invalid pending block count"); - assertEq(rollup.provenBlockCount(), 1, "Invalid proven block count"); + assertEq(rollup.getPendingBlockNumber(), 1, "Invalid pending block number"); + assertEq(rollup.getProvenBlockNumber(), 0, "Invalid proven block number"); // We check that the roots in the outbox have correctly been updated. bytes32 rootEmpty = vm.load(address(outbox), keccak256(abi.encode(1, 0))); @@ -180,6 +455,15 @@ contract RollupTest is DecoderBase { assertNotEq(minHeightEmpty, minHeightMixed, "Invalid min height"); } + function testPruneDuringPropose() public setUpFor("mixed_block_1") { + _testBlock("mixed_block_1", false); + warpToL2Slot(Constants.AZTEC_EPOCH_DURATION * 2); + _testBlock("mixed_block_1", false, Constants.AZTEC_EPOCH_DURATION * 2); + + assertEq(rollup.getPendingBlockNumber(), 1, "Invalid pending block number"); + assertEq(rollup.getProvenBlockNumber(), 0, "Invalid proven block number"); + } + function testBlockFee() public setUpFor("mixed_block_1") { uint256 feeAmount = 2e18; @@ -232,8 +516,8 @@ contract RollupTest is DecoderBase { function testMixedBlock(bool _toProve) public setUpFor("mixed_block_1") { _testBlock("mixed_block_1", _toProve); - assertEq(rollup.pendingBlockCount(), 2, "Invalid pending block count"); - assertEq(rollup.provenBlockCount(), _toProve ? 2 : 1, "Invalid proven block count"); + assertEq(rollup.getPendingBlockNumber(), 1, "Invalid pending block number"); + assertEq(rollup.getProvenBlockNumber(), _toProve ? 1 : 0, "Invalid proven block number"); } function testConsecutiveMixedBlocks(uint256 _blocksToProve) public setUpFor("mixed_block_1") { @@ -242,8 +526,8 @@ contract RollupTest is DecoderBase { _testBlock("mixed_block_1", toProve > 0); _testBlock("mixed_block_2", toProve > 1); - assertEq(rollup.pendingBlockCount(), 3, "Invalid pending block count"); - assertEq(rollup.provenBlockCount(), 1 + toProve, "Invalid proven block count"); + assertEq(rollup.getPendingBlockNumber(), 2, "Invalid pending block number"); + assertEq(rollup.getProvenBlockNumber(), 0 + toProve, "Invalid proven block number"); } function testConsecutiveMixedBlocksNonSequentialProof() public setUpFor("mixed_block_1") { @@ -261,14 +545,14 @@ contract RollupTest is DecoderBase { vm.expectRevert(abi.encodeWithSelector(Errors.Rollup__NonSequentialProving.selector)); rollup.submitBlockRootProof(header, archive, bytes32(0), "", ""); - assertEq(rollup.pendingBlockCount(), 3, "Invalid pending block count"); - assertEq(rollup.provenBlockCount(), 1, "Invalid proven block count"); + assertEq(rollup.getPendingBlockNumber(), 2, "Invalid pending block number"); + assertEq(rollup.getProvenBlockNumber(), 0, "Invalid proven block number"); } function testEmptyBlock(bool _toProve) public setUpFor("empty_block_1") { _testBlock("empty_block_1", _toProve); - assertEq(rollup.pendingBlockCount(), 2, "Invalid pending block count"); - assertEq(rollup.provenBlockCount(), _toProve ? 2 : 1, "Invalid proven block count"); + assertEq(rollup.getPendingBlockNumber(), 1, "Invalid pending block number"); + assertEq(rollup.getProvenBlockNumber(), _toProve ? 1 : 0, "Invalid proven block number"); } function testConsecutiveEmptyBlocks(uint256 _blocksToProve) public setUpFor("empty_block_1") { @@ -276,8 +560,8 @@ contract RollupTest is DecoderBase { _testBlock("empty_block_1", toProve > 0); _testBlock("empty_block_2", toProve > 1); - assertEq(rollup.pendingBlockCount(), 3, "Invalid pending block count"); - assertEq(rollup.provenBlockCount(), 1 + toProve, "Invalid proven block count"); + assertEq(rollup.getPendingBlockNumber(), 2, "Invalid pending block number"); + assertEq(rollup.getProvenBlockNumber(), 0 + toProve, "Invalid proven block number"); } function testRevertInvalidBlockNumber() public setUpFor("empty_block_1") { @@ -347,27 +631,27 @@ contract RollupTest is DecoderBase { } function testBlocksWithAssumeProven() public setUpFor("mixed_block_1") { - rollup.setAssumeProvenUntilBlockNumber(2); - assertEq(rollup.pendingBlockCount(), 1, "Invalid pending block count"); - assertEq(rollup.provenBlockCount(), 1, "Invalid proven block count"); + rollup.setAssumeProvenThroughBlockNumber(1); + assertEq(rollup.getPendingBlockNumber(), 0, "Invalid pending block number"); + assertEq(rollup.getProvenBlockNumber(), 0, "Invalid proven block number"); _testBlock("mixed_block_1", false); _testBlock("mixed_block_2", false); - assertEq(rollup.pendingBlockCount(), 3, "Invalid pending block count"); - assertEq(rollup.provenBlockCount(), 2, "Invalid proven block count"); + assertEq(rollup.getPendingBlockNumber(), 2, "Invalid pending block number"); + assertEq(rollup.getProvenBlockNumber(), 1, "Invalid proven block number"); } function testSetAssumeProvenAfterBlocksProcessed() public setUpFor("mixed_block_1") { - assertEq(rollup.pendingBlockCount(), 1, "Invalid pending block count"); - assertEq(rollup.provenBlockCount(), 1, "Invalid proven block count"); + assertEq(rollup.getPendingBlockNumber(), 0, "Invalid pending block number"); + assertEq(rollup.getProvenBlockNumber(), 0, "Invalid proven block number"); _testBlock("mixed_block_1", false); _testBlock("mixed_block_2", false); - rollup.setAssumeProvenUntilBlockNumber(2); + rollup.setAssumeProvenThroughBlockNumber(1); - assertEq(rollup.pendingBlockCount(), 3, "Invalid pending block count"); - assertEq(rollup.provenBlockCount(), 2, "Invalid proven block count"); + assertEq(rollup.getPendingBlockNumber(), 2, "Invalid pending block number"); + assertEq(rollup.getProvenBlockNumber(), 1, "Invalid proven block number"); } function testSubmitProofNonExistantBlock() public setUpFor("empty_block_1") { @@ -446,11 +730,11 @@ contract RollupTest is DecoderBase { rollup.propose(header, archive, bytes32(0), txHashes, signatures, body); if (_submitProof) { - uint256 pre = rollup.provenBlockCount(); + uint256 pre = rollup.getProvenBlockNumber(); rollup.submitBlockRootProof(header, archive, bytes32(0), "", ""); - assertEq(pre + 1, rollup.provenBlockCount(), "Block not proven"); + assertEq(pre + 1, rollup.getProvenBlockNumber(), "Block not proven"); } bytes32 l2ToL1MessageTreeRoot; @@ -484,7 +768,7 @@ contract RollupTest is DecoderBase { (bytes32 root,) = outbox.getRootData(full.block.decodedHeader.globalVariables.blockNumber); // If we are trying to read a block beyond the proven chain, we should see "nothing". - if (rollup.provenBlockCount() > full.block.decodedHeader.globalVariables.blockNumber) { + if (rollup.getProvenBlockNumber() >= full.block.decodedHeader.globalVariables.blockNumber) { assertEq(l2ToL1MessageTreeRoot, root, "Invalid l2 to l1 message tree root"); } else { assertEq(root, bytes32(0), "Invalid outbox root"); diff --git a/l1-contracts/test/portals/TokenPortal.t.sol b/l1-contracts/test/portals/TokenPortal.t.sol index 96104d54ddb..5832c544437 100644 --- a/l1-contracts/test/portals/TokenPortal.t.sol +++ b/l1-contracts/test/portals/TokenPortal.t.sol @@ -71,8 +71,8 @@ contract TokenPortalTest is Test { tokenPortal.initialize(address(registry), address(portalERC20), l2TokenAddress); // Modify the proven block count - vm.store(address(rollup), bytes32(uint256(7)), bytes32(l2BlockNumber + 1)); - assertEq(rollup.provenBlockCount(), l2BlockNumber + 1); + vm.store(address(rollup), bytes32(uint256(7)), bytes32(l2BlockNumber)); + assertEq(rollup.getProvenBlockNumber(), l2BlockNumber); vm.deal(address(this), 100 ether); } diff --git a/l1-contracts/test/portals/UniswapPortal.t.sol b/l1-contracts/test/portals/UniswapPortal.t.sol index 0f506b279ef..f0710fa9c3b 100644 --- a/l1-contracts/test/portals/UniswapPortal.t.sol +++ b/l1-contracts/test/portals/UniswapPortal.t.sol @@ -67,7 +67,7 @@ contract UniswapPortalTest is Test { // Modify the proven block count vm.store(address(rollup), bytes32(uint256(7)), bytes32(l2BlockNumber + 1)); - assertEq(rollup.provenBlockCount(), l2BlockNumber + 1); + assertEq(rollup.getProvenBlockNumber(), l2BlockNumber + 1); // have DAI locked in portal that can be moved when funds are withdrawn deal(address(DAI), address(daiTokenPortal), amount); diff --git a/l1-contracts/test/sparta/Sparta.t.sol b/l1-contracts/test/sparta/Sparta.t.sol index dc559ede666..44700b1e4f5 100644 --- a/l1-contracts/test/sparta/Sparta.t.sol +++ b/l1-contracts/test/sparta/Sparta.t.sol @@ -6,8 +6,7 @@ import {DecoderBase} from "../decoders/Base.sol"; import {DataStructures} from "../../src/core/libraries/DataStructures.sol"; import {Constants} from "../../src/core/libraries/ConstantsGen.sol"; -import {SignatureLib} from "../../src/core/sequencer_selection/SignatureLib.sol"; -import {MessageHashUtils} from "@oz/utils/cryptography/MessageHashUtils.sol"; +import {SignatureLib} from "../../src/core/libraries/SignatureLib.sol"; import {Registry} from "../../src/core/messagebridge/Registry.sol"; import {Inbox} from "../../src/core/messagebridge/Inbox.sol"; @@ -20,14 +19,23 @@ import {MerkleTestUtil} from "../merkle/TestUtil.sol"; import {PortalERC20} from "../portals/PortalERC20.sol"; import {TxsDecoderHelper} from "../decoders/helpers/TxsDecoderHelper.sol"; import {IFeeJuicePortal} from "../../src/core/interfaces/IFeeJuicePortal.sol"; +import {MessageHashUtils} from "@oz/utils/cryptography/MessageHashUtils.sol"; + +// solhint-disable comprehensive-interface + /** * We are using the same blocks as from Rollup.t.sol. * The tests in this file is testing the sequencer selection */ - contract SpartaTest is DecoderBase { using MessageHashUtils for bytes32; + struct StructToAvoidDeepStacks { + uint256 needed; + address proposer; + bool shouldRevert; + } + Registry internal registry; Inbox internal inbox; Outbox internal outbox; @@ -36,9 +44,10 @@ contract SpartaTest is DecoderBase { TxsDecoderHelper internal txsHelper; PortalERC20 internal portalERC20; - mapping(address validator => uint256 privateKey) internal privateKeys; - SignatureLib.Signature internal emptySignature; + mapping(address validator => uint256 privateKey) internal privateKeys; + mapping(address => bool) internal _seenValidators; + mapping(address => bool) internal _seenCommittee; /** * @notice Set up the contracts needed for the tests with time aligned to the provided block name @@ -78,9 +87,6 @@ contract SpartaTest is DecoderBase { _; } - mapping(address => bool) internal _seenValidators; - mapping(address => bool) internal _seenCommittee; - function testInitialCommitteMatch() public setup(4) { address[] memory validators = rollup.getValidators(); address[] memory committee = rollup.getCurrentEpochCommittee(); @@ -97,6 +103,9 @@ contract SpartaTest is DecoderBase { assertFalse(_seenCommittee[committee[i]]); _seenCommittee[committee[i]] = true; } + + address proposer = rollup.getCurrentProposer(); + assertTrue(_seenCommittee[proposer]); } function testProposerForNonSetupEpoch(uint8 _epochsToJump) public setup(4) { @@ -142,12 +151,6 @@ contract SpartaTest is DecoderBase { _testBlock("mixed_block_1", true, 2, false); } - struct StructToAvoidDeepStacks { - uint256 needed; - address proposer; - bool shouldRevert; - } - function _testBlock( string memory _name, bool _expectRevert, @@ -256,7 +259,7 @@ contract SpartaTest is DecoderBase { (bytes32 root,) = outbox.getRootData(full.block.decodedHeader.globalVariables.blockNumber); // If we are trying to read a block beyond the proven chain, we should see "nothing". - if (rollup.provenBlockCount() > full.block.decodedHeader.globalVariables.blockNumber) { + if (rollup.getProvenBlockNumber() >= full.block.decodedHeader.globalVariables.blockNumber) { assertEq(l2ToL1MessageTreeRoot, root, "Invalid l2 to l1 message tree root"); } else { assertEq(root, bytes32(0), "Invalid outbox root"); @@ -280,8 +283,9 @@ contract SpartaTest is DecoderBase { returns (SignatureLib.Signature memory) { uint256 privateKey = privateKeys[_signer]; - bytes32 digestForSig = _digest.toEthSignedMessageHash(); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(privateKey, digestForSig); + + bytes32 digest = _digest.toEthSignedMessageHash(); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(privateKey, digest); return SignatureLib.Signature({isEmpty: false, v: v, r: r, s: s}); } diff --git a/noir-projects/Earthfile b/noir-projects/Earthfile index d679b5c72c5..658f5987e48 100644 --- a/noir-projects/Earthfile +++ b/noir-projects/Earthfile @@ -124,3 +124,12 @@ gates-report: RUN ./gates_report.sh SAVE ARTIFACT ./noir-protocol-circuits/gates_report.json gates_report.json + +public-functions-report: + FROM +build-contracts + WORKDIR /usr/src/noir-projects + + RUN cd noir-contracts && node publicFunctionsSizeReport.js ./target/ + + SAVE ARTIFACT ./noir-contracts/public_functions_report.json public_functions_report.json + diff --git a/noir-projects/aztec-nr/.gitattributes b/noir-projects/aztec-nr/.gitattributes deleted file mode 100644 index 7335faf5afd..00000000000 --- a/noir-projects/aztec-nr/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -*.nr linguist-language=Rust diff --git a/noir-projects/aztec-nr/.gitrepo b/noir-projects/aztec-nr/.gitrepo index 319218c1aaf..4c8887c0dae 100644 --- a/noir-projects/aztec-nr/.gitrepo +++ b/noir-projects/aztec-nr/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/aztec-nr branch = master - commit = 805976a6fb227b4ecb6f47bd870655d26289951c + commit = 909b3d87ba54961f8c2fc766e98ede64a224b8d6 method = merge cmdver = 0.4.6 - parent = 62e8e5d0277eb90ceedace061c8c65a175f1c802 + parent = 7bd4e9c665d6f327e8673537d75953fbbfa91e84 diff --git a/noir-projects/aztec-nr/address-note/src/address_note.nr b/noir-projects/aztec-nr/address-note/src/address_note.nr index 6be58816d1e..9da6a381c1a 100644 --- a/noir-projects/aztec-nr/address-note/src/address_note.nr +++ b/noir-projects/aztec-nr/address-note/src/address_note.nr @@ -1,21 +1,15 @@ use dep::aztec::{ - protocol_types::{ - address::AztecAddress, traits::Empty, constants::GENERATOR_INDEX__NOTE_NULLIFIER, - hash::poseidon2_hash_with_separator -}, - note::{note_header::NoteHeader, note_interface::NoteInterface, utils::compute_note_hash_for_nullify}, - oracle::unsafe_rand::unsafe_rand, keys::getters::get_nsk_app, context::PrivateContext + protocol_types::{address::AztecAddress, constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator}, + note::{note_header::NoteHeader, note_interface::NullifiableNote, utils::compute_note_hash_for_nullify}, + oracle::unsafe_rand::unsafe_rand, keys::getters::get_nsk_app, context::PrivateContext, + macros::notes::note }; -global ADDRESS_NOTE_LEN: Field = 3; -// ADDRESS_NOTE_LEN * 32 + 32(storage_slot as bytes) + 32(note_type_id as bytes) -global ADDRESS_NOTE_BYTES_LEN: Field = 3 * 32 + 64; - // docs:start:address_note_def // docs:start:address_note_struct // Stores an address -#[aztec(note)] -struct AddressNote { +#[note] +pub struct AddressNote { address: AztecAddress, // The nullifying public key hash is used with the nsk_app to ensure that the note can be privately spent. npk_m_hash: Field, @@ -23,7 +17,7 @@ struct AddressNote { } // docs:end:address_note_struct -impl NoteInterface for AddressNote { +impl NullifiableNote for AddressNote { fn compute_nullifier(self, context: &mut PrivateContext, note_hash_for_nullify: Field) -> Field { let secret = context.request_nsk_app(self.npk_m_hash); @@ -36,7 +30,7 @@ impl NoteInterface for AddressNote { ) } - fn compute_nullifier_without_context(self) -> Field { + unconstrained fn compute_nullifier_without_context(self) -> Field { let note_hash_for_nullify = compute_note_hash_for_nullify(self); let secret = get_nsk_app(self.npk_m_hash); poseidon2_hash_with_separator( diff --git a/noir-projects/aztec-nr/authwit/src/account.nr b/noir-projects/aztec-nr/authwit/src/account.nr index c4cc7976167..e0adbb797e7 100644 --- a/noir-projects/aztec-nr/authwit/src/account.nr +++ b/noir-projects/aztec-nr/authwit/src/account.nr @@ -7,7 +7,7 @@ use dep::aztec::{ use crate::entrypoint::{app::AppPayload, fee::FeePayload}; use crate::auth::{IS_VALID_SELECTOR, compute_authwit_message_hash}; -struct AccountActions { +pub struct AccountActions { context: Context, is_valid_impl: fn(&mut PrivateContext, Field) -> bool, } diff --git a/noir-projects/aztec-nr/authwit/src/auth.nr b/noir-projects/aztec-nr/authwit/src/auth.nr index a533bd589b5..07212727082 100644 --- a/noir-projects/aztec-nr/authwit/src/auth.nr +++ b/noir-projects/aztec-nr/authwit/src/auth.nr @@ -6,7 +6,7 @@ use dep::aztec::protocol_types::{ }, hash::poseidon2_hash_with_separator }; -use dep::aztec::{prelude::Deserialize, context::{PrivateContext, PublicContext, gas::GasOpts}, hash::hash_args_array}; +use dep::aztec::{context::{PrivateContext, PublicContext, gas::GasOpts}, hash::hash_args_array}; /** * Authenticaion witness helper library @@ -170,7 +170,7 @@ use dep::aztec::{prelude::Deserialize, context::{PrivateContext, PublicContext, * * * --- FAQ --- - * Q: Why are we using a success flag of `keccak256("IS_VALID()")` instead of just returning a boolean? + * Q: Why are we using a success flag of `poseidon2_hash_bytes("IS_VALID()")` instead of just returning a boolean? * A: We want to make sure that we don't accidentally return `true` if there is a collision in the function selector. * By returning a hash of `IS_VALID()`, it becomes very unlikely that there is both a collision and we return * a success flag. @@ -189,7 +189,7 @@ use dep::aztec::{prelude::Deserialize, context::{PrivateContext, PublicContext, * chain to avoid a case where the same message could be used across multiple chains. */ -global IS_VALID_SELECTOR = 0xabf64ad4; // 4 first bytes of keccak256("IS_VALID()") +global IS_VALID_SELECTOR = 0x47dacd73; // 4 last bytes of poseidon2_hash_bytes("IS_VALID()") /** * Assert that `on_behalf_of` have authorized the current call with a valid authentication witness @@ -215,11 +215,7 @@ pub fn assert_current_call_valid_authwit(context: &mut PrivateContext, on_behalf * @param on_behalf_of The address that have authorized the current call * @param inner_hash The hash of the message to authorize */ -pub fn assert_inner_hash_valid_authwit( - context: &mut PrivateContext, - on_behalf_of: AztecAddress, - inner_hash: Field -) { +pub fn assert_inner_hash_valid_authwit(context: &mut PrivateContext, on_behalf_of: AztecAddress, inner_hash: Field) { // We perform a static call here and not a standard one to ensure that the account contract cannot re-enter. let result: Field = context.static_call_private_function( on_behalf_of, @@ -247,7 +243,10 @@ pub fn assert_inner_hash_valid_authwit( * @param on_behalf_of The address that have authorized the current call */ // docs:start:assert_current_call_valid_authwit_public -pub fn assert_current_call_valid_authwit_public(context: &mut PublicContext, on_behalf_of: AztecAddress) { +pub fn assert_current_call_valid_authwit_public( + context: &mut PublicContext, + on_behalf_of: AztecAddress +) { let inner_hash = compute_inner_authwit_hash( [(*context).msg_sender().to_field(), (*context).selector().to_field(), (*context).get_args_hash()] ); @@ -266,11 +265,7 @@ pub fn assert_current_call_valid_authwit_public(context: &mut PublicContext, on_ * * @param on_behalf_of The address that have authorized the `inner_hash` */ -pub fn assert_inner_hash_valid_authwit_public( - context: &mut PublicContext, - on_behalf_of: AztecAddress, - inner_hash: Field -) { +pub fn assert_inner_hash_valid_authwit_public(context: &mut PublicContext, on_behalf_of: AztecAddress, inner_hash: Field) { let result: Field = context.call_public_function( CANONICAL_AUTH_REGISTRY_ADDRESS, comptime { @@ -346,12 +341,7 @@ pub fn compute_authwit_nullifier(on_behalf_of: AztecAddress, inner_hash: Field) * @param version The version of the chain that the message is being consumed on * @param inner_hash The hash of the "inner" message that is being consumed */ -pub fn compute_authwit_message_hash( - consumer: AztecAddress, - chain_id: Field, - version: Field, - inner_hash: Field -) -> Field { +pub fn compute_authwit_message_hash(consumer: AztecAddress, chain_id: Field, version: Field, inner_hash: Field) -> Field { poseidon2_hash_with_separator( [ consumer.to_field(), diff --git a/noir-projects/aztec-nr/authwit/src/cheatcodes.nr b/noir-projects/aztec-nr/authwit/src/cheatcodes.nr index 74e8b3621de..be5b715842a 100644 --- a/noir-projects/aztec-nr/authwit/src/cheatcodes.nr +++ b/noir-projects/aztec-nr/authwit/src/cheatcodes.nr @@ -6,7 +6,7 @@ use dep::aztec::{ use crate::auth::{compute_inner_authwit_hash, compute_authwit_message_hash, set_authorized}; -pub fn add_private_authwit_from_call_interface( +pub fn add_private_authwit_from_call_interface( on_behalf_of: AztecAddress, caller: AztecAddress, call_interface: C @@ -22,7 +22,7 @@ pub fn add_private_authwit_from_call_interface( cheatcodes::add_authwit(on_behalf_of, message_hash); } -pub fn add_public_authwit_from_call_interface( +pub fn add_public_authwit_from_call_interface( on_behalf_of: AztecAddress, caller: AztecAddress, call_interface: C @@ -37,8 +37,8 @@ pub fn add_public_authwit_from_call_interface( let selector = call_interface.get_selector(); let inner_hash = compute_inner_authwit_hash([caller.to_field(), selector.to_field(), args_hash]); let message_hash = compute_authwit_message_hash(target, chain_id, version, inner_hash); - let mut inputs = cheatcodes::get_public_context_inputs(); - let mut context = PublicContext::new(inputs); + let mut context = PublicContext::new(|| {panic( f"Provide args hash manually")}); + context.args_hash = Option::some(args_hash); set_authorized(&mut context, message_hash, true); cheatcodes::set_contract_address(current_contract); } diff --git a/noir-projects/aztec-nr/authwit/src/entrypoint/app.nr b/noir-projects/aztec-nr/authwit/src/entrypoint/app.nr index c658539a306..3c0dd775cf4 100644 --- a/noir-projects/aztec-nr/authwit/src/entrypoint/app.nr +++ b/noir-projects/aztec-nr/authwit/src/entrypoint/app.nr @@ -4,18 +4,18 @@ use dep::aztec::protocol_types::{ traits::{Hash, Serialize} }; -use crate::entrypoint::function_call::{FunctionCall, FUNCTION_CALL_SIZE_IN_BYTES}; +use crate::entrypoint::function_call::FunctionCall; // FUNCTION_CALL_SIZE * ACCOUNT_MAX_CALLS + 1 -global APP_PAYLOAD_SIZE: u64 = 21; +global APP_PAYLOAD_SIZE: u32 = 21; // FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS + 32 -global APP_PAYLOAD_SIZE_IN_BYTES: u64 = 424; +global APP_PAYLOAD_SIZE_IN_BYTES: u32 = 424; -global ACCOUNT_MAX_CALLS: u64 = 4; +global ACCOUNT_MAX_CALLS: u32 = 4; // Note: If you change the following struct you have to update default_entrypoint.ts // docs:start:app-payload-struct -struct AppPayload { +pub struct AppPayload { function_calls: [FunctionCall; ACCOUNT_MAX_CALLS], nonce: Field, } diff --git a/noir-projects/aztec-nr/authwit/src/entrypoint/fee.nr b/noir-projects/aztec-nr/authwit/src/entrypoint/fee.nr index f2cf7a76eaf..75de54e7427 100644 --- a/noir-projects/aztec-nr/authwit/src/entrypoint/fee.nr +++ b/noir-projects/aztec-nr/authwit/src/entrypoint/fee.nr @@ -6,15 +6,15 @@ use dep::aztec::protocol_types::{ use crate::entrypoint::function_call::FunctionCall; // 2 * 5 (FUNCTION_CALL_SIZE) + 2 -global FEE_PAYLOAD_SIZE: Field = 12; +global FEE_PAYLOAD_SIZE: u32 = 12; // 2 * 98 (FUNCTION_CALL_SIZE_IN_BYTES) + 32 -global FEE_PAYLOAD_SIZE_IN_BYTES: Field = 228; +global FEE_PAYLOAD_SIZE_IN_BYTES: u32 = 228; -global MAX_FEE_FUNCTION_CALLS = 2; +global MAX_FEE_FUNCTION_CALLS: u32 = 2; // docs:start:fee-payload-struct -struct FeePayload { +pub struct FeePayload { function_calls: [FunctionCall; MAX_FEE_FUNCTION_CALLS], nonce: Field, is_fee_payer: bool, diff --git a/noir-projects/aztec-nr/authwit/src/entrypoint/function_call.nr b/noir-projects/aztec-nr/authwit/src/entrypoint/function_call.nr index 5ba2bf836b5..38e943f95f4 100644 --- a/noir-projects/aztec-nr/authwit/src/entrypoint/function_call.nr +++ b/noir-projects/aztec-nr/authwit/src/entrypoint/function_call.nr @@ -1,11 +1,11 @@ use dep::aztec::protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress, traits::Serialize}; // 1 (ARGS_HASH) + 1 (FUNCTION_SELECTOR) + 1 (TARGET_ADDRESS) + 1 (IS_PUBLIC) + 1 (IS_STATIC) -global FUNCTION_CALL_SIZE: Field = 5; +global FUNCTION_CALL_SIZE: u32 = 5; // 3 * 32 + 2 -global FUNCTION_CALL_SIZE_IN_BYTES: Field = 98; +global FUNCTION_CALL_SIZE_IN_BYTES: u32 = 98; -struct FunctionCall { +pub struct FunctionCall { args_hash: Field, function_selector: FunctionSelector, target_address: AztecAddress, diff --git a/noir-projects/aztec-nr/aztec/src/context/call_interfaces.nr b/noir-projects/aztec-nr/aztec/src/context/call_interfaces.nr index 0c818e3ac7b..49d5a424ac0 100644 --- a/noir-projects/aztec-nr/aztec/src/context/call_interfaces.nr +++ b/noir-projects/aztec-nr/aztec/src/context/call_interfaces.nr @@ -5,13 +5,13 @@ use dep::protocol_types::{ use crate::context::{ private_context::PrivateContext, public_context::PublicContext, gas::GasOpts, - inputs::{PrivateContextInputs, PublicContextInputs} + inputs::PrivateContextInputs }; use crate::oracle::arguments::pack_arguments; use crate::hash::hash_args; -trait CallInterface { +pub trait CallInterface { fn get_original(self) -> fn[Env](T) -> P; fn get_args(self) -> [Field] { @@ -41,7 +41,7 @@ impl CallInterface { +pub struct PrivateCallInterface { target_contract: AztecAddress, selector: FunctionSelector, name: str, @@ -53,7 +53,10 @@ struct PrivateCallInterface { impl PrivateCallInterface { pub fn call(self, context: &mut PrivateContext) -> T where T: Deserialize { - assert(self.args_hash == pack_arguments(self.args)); + let packed_args_hash = unsafe { + pack_arguments(self.args) + }; + assert(self.args_hash == packed_args_hash); let returns = context.call_private_function_with_packed_args( self.target_contract, self.selector, @@ -66,13 +69,19 @@ impl PrivateCallInterface { } pub fn view(self, context: &mut PrivateContext) -> T where T: Deserialize { - assert(self.args_hash == pack_arguments(self.args)); + let packed_args_hash = unsafe { + pack_arguments(self.args) + }; + assert(self.args_hash == packed_args_hash); let returns = context.call_private_function_with_packed_args(self.target_contract, self.selector, self.args_hash, true, false); returns.unpack_into() } pub fn delegate_call(self, context: &mut PrivateContext) -> T where T: Deserialize { - assert(self.args_hash == pack_arguments(self.args)); + let packed_args_hash = unsafe { + pack_arguments(self.args) + }; + assert(self.args_hash == packed_args_hash); let returns = context.call_private_function_with_packed_args(self.target_contract, self.selector, self.args_hash, false, true); returns.unpack_into() } @@ -84,7 +93,7 @@ impl CallInterface { +pub struct PrivateVoidCallInterface { target_contract: AztecAddress, selector: FunctionSelector, name: str, @@ -96,7 +105,10 @@ struct PrivateVoidCallInterface { impl PrivateVoidCallInterface { pub fn call(self, context: &mut PrivateContext) { - assert(self.args_hash == pack_arguments(self.args)); + let packed_args_hash = unsafe { + pack_arguments(self.args) + }; + assert(self.args_hash == packed_args_hash); context.call_private_function_with_packed_args( self.target_contract, self.selector, @@ -107,12 +119,18 @@ impl PrivateVoidCallInterface { } pub fn view(self, context: &mut PrivateContext) { - assert(self.args_hash == pack_arguments(self.args)); + let packed_args_hash = unsafe { + pack_arguments(self.args) + }; + assert(self.args_hash == packed_args_hash); context.call_private_function_with_packed_args(self.target_contract, self.selector, self.args_hash, true, false).assert_empty(); } pub fn delegate_call(self, context: &mut PrivateContext) { - assert(self.args_hash == pack_arguments(self.args)); + let packed_args_hash = unsafe { + pack_arguments(self.args) + }; + assert(self.args_hash == packed_args_hash); context.call_private_function_with_packed_args(self.target_contract, self.selector, self.args_hash, false, true).assert_empty(); } } @@ -123,7 +141,7 @@ impl CallInterface { +pub struct PrivateStaticCallInterface { target_contract: AztecAddress, selector: FunctionSelector, name: str, @@ -135,7 +153,10 @@ struct PrivateStaticCallInterface { impl PrivateStaticCallInterface { pub fn view(self, context: &mut PrivateContext) -> T where T: Deserialize { - assert(self.args_hash == pack_arguments(self.args)); + let packed_args_hash = unsafe { + pack_arguments(self.args) + }; + assert(self.args_hash == packed_args_hash); let returns = context.call_private_function_with_packed_args(self.target_contract, self.selector, self.args_hash, true, false); returns.unpack_into() } @@ -147,7 +168,7 @@ impl CallInterface { +pub struct PrivateStaticVoidCallInterface { target_contract: AztecAddress, selector: FunctionSelector, name: str, @@ -159,24 +180,27 @@ struct PrivateStaticVoidCallInterface { impl PrivateStaticVoidCallInterface { pub fn view(self, context: &mut PrivateContext) { - assert(self.args_hash == pack_arguments(self.args)); + let packed_args_hash = unsafe { + pack_arguments(self.args) + }; + assert(self.args_hash == packed_args_hash); context.call_private_function_with_packed_args(self.target_contract, self.selector, self.args_hash, true, false).assert_empty(); } } -impl CallInterface for PublicCallInterface { - fn get_original(self) -> fn[Env](PublicContextInputs) -> T { +impl CallInterface for PublicCallInterface { + fn get_original(self) -> fn[Env](()) -> T { self.original } } -struct PublicCallInterface { +pub struct PublicCallInterface { target_contract: AztecAddress, selector: FunctionSelector, name: str, args: [Field], gas_opts: GasOpts, - original: fn[Env](PublicContextInputs) -> T, + original: fn[Env](()) -> T, is_static: bool } @@ -203,7 +227,10 @@ impl PublicCallInterface { pub fn enqueue(self, context: &mut PrivateContext) { let args_hash = hash_args(self.args); - assert(args_hash == pack_arguments(self.args)); + let packed_args_hash = unsafe { + pack_arguments(self.args) + }; + assert(args_hash == packed_args_hash); context.call_public_function_with_packed_args( self.target_contract, self.selector, @@ -215,7 +242,10 @@ impl PublicCallInterface { pub fn enqueue_view(self, context: &mut PrivateContext) { let args_hash = hash_args(self.args); - assert(args_hash == pack_arguments(self.args)); + let packed_args_hash = unsafe { + pack_arguments(self.args) + }; + assert(args_hash == packed_args_hash); context.call_public_function_with_packed_args( self.target_contract, self.selector, @@ -227,7 +257,10 @@ impl PublicCallInterface { pub fn delegate_enqueue(self, context: &mut PrivateContext) { let args_hash = hash_args(self.args); - assert(args_hash == pack_arguments(self.args)); + let packed_args_hash = unsafe { + pack_arguments(self.args) + }; + assert(args_hash == packed_args_hash); context.call_public_function_with_packed_args( self.target_contract, self.selector, @@ -238,18 +271,18 @@ impl PublicCallInterface { } } -impl CallInterface for PublicVoidCallInterface { - fn get_original(self) -> fn[Env](PublicContextInputs) -> () { +impl CallInterface for PublicVoidCallInterface { + fn get_original(self) -> fn[Env](()) -> () { self.original } } -struct PublicVoidCallInterface { +pub struct PublicVoidCallInterface { target_contract: AztecAddress, selector: FunctionSelector, name: str, args: [Field], - original: fn[Env](PublicContextInputs) -> (), + original: fn[Env](()) -> (), is_static: bool, gas_opts: GasOpts } @@ -277,7 +310,10 @@ impl PublicVoidCallInterface { pub fn enqueue(self, context: &mut PrivateContext) { let args_hash = hash_args(self.args); - assert(args_hash == pack_arguments(self.args)); + let packed_args_hash = unsafe { + pack_arguments(self.args) + }; + assert(args_hash == packed_args_hash); context.call_public_function_with_packed_args( self.target_contract, self.selector, @@ -289,7 +325,10 @@ impl PublicVoidCallInterface { pub fn enqueue_view(self, context: &mut PrivateContext) { let args_hash = hash_args(self.args); - assert(args_hash == pack_arguments(self.args)); + let packed_args_hash = unsafe { + pack_arguments(self.args) + }; + assert(args_hash == packed_args_hash); context.call_public_function_with_packed_args( self.target_contract, self.selector, @@ -301,7 +340,10 @@ impl PublicVoidCallInterface { pub fn delegate_enqueue(self, context: &mut PrivateContext) { let args_hash = hash_args(self.args); - assert(args_hash == pack_arguments(self.args)); + let packed_args_hash = unsafe { + pack_arguments(self.args) + }; + assert(args_hash == packed_args_hash); context.call_public_function_with_packed_args( self.target_contract, self.selector, @@ -312,18 +354,18 @@ impl PublicVoidCallInterface { } } -impl CallInterface for PublicStaticCallInterface { - fn get_original(self) -> fn[Env](PublicContextInputs) -> T { +impl CallInterface for PublicStaticCallInterface { + fn get_original(self) -> fn[Env](()) -> T { self.original } } -struct PublicStaticCallInterface { +pub struct PublicStaticCallInterface { target_contract: AztecAddress, selector: FunctionSelector, name: str, args: [Field], - original: fn[Env](PublicContextInputs) -> T, + original: fn[Env](()) -> T, is_static: bool, gas_opts: GasOpts } @@ -342,7 +384,10 @@ impl PublicStaticCallInterface { pub fn enqueue_view(self, context: &mut PrivateContext) { let args_hash = hash_args(self.args); - assert(args_hash == pack_arguments(self.args)); + let packed_args_hash = unsafe { + pack_arguments(self.args) + }; + assert(args_hash == packed_args_hash); context.call_public_function_with_packed_args( self.target_contract, self.selector, @@ -353,18 +398,18 @@ impl PublicStaticCallInterface { } } -impl CallInterface for PublicStaticVoidCallInterface { - fn get_original(self) -> fn[Env](PublicContextInputs) -> () { +impl CallInterface for PublicStaticVoidCallInterface { + fn get_original(self) -> fn[Env](()) -> () { self.original } } -struct PublicStaticVoidCallInterface { +pub struct PublicStaticVoidCallInterface { target_contract: AztecAddress, selector: FunctionSelector, name: str, args: [Field], - original: fn[Env](PublicContextInputs) -> (), + original: fn[Env](()) -> (), is_static: bool, gas_opts: GasOpts } @@ -382,7 +427,10 @@ impl PublicStaticVoidCallInterface { pub fn enqueue_view(self, context: &mut PrivateContext) { let args_hash = hash_args(self.args); - assert(args_hash == pack_arguments(self.args)); + let packed_args_hash = unsafe { + pack_arguments(self.args) + }; + assert(args_hash == packed_args_hash); context.call_public_function_with_packed_args( self.target_contract, self.selector, diff --git a/noir-projects/aztec-nr/aztec/src/context/gas.nr b/noir-projects/aztec-nr/aztec/src/context/gas.nr index 835a78664eb..5742cbd9549 100644 --- a/noir-projects/aztec-nr/aztec/src/context/gas.nr +++ b/noir-projects/aztec-nr/aztec/src/context/gas.nr @@ -1,4 +1,4 @@ -struct GasOpts { +pub struct GasOpts { l2_gas: Option, da_gas: Option, } diff --git a/noir-projects/aztec-nr/aztec/src/context/inputs/mod.nr b/noir-projects/aztec-nr/aztec/src/context/inputs/mod.nr index cb2a1eba4dd..581bbfd8a2e 100644 --- a/noir-projects/aztec-nr/aztec/src/context/inputs/mod.nr +++ b/noir-projects/aztec-nr/aztec/src/context/inputs/mod.nr @@ -1,5 +1,3 @@ mod private_context_inputs; -mod public_context_inputs; pub use crate::context::inputs::private_context_inputs::PrivateContextInputs; -pub use crate::context::inputs::public_context_inputs::PublicContextInputs; diff --git a/noir-projects/aztec-nr/aztec/src/context/inputs/private_context_inputs.nr b/noir-projects/aztec-nr/aztec/src/context/inputs/private_context_inputs.nr index a1398c50c9f..274112b1194 100644 --- a/noir-projects/aztec-nr/aztec/src/context/inputs/private_context_inputs.nr +++ b/noir-projects/aztec-nr/aztec/src/context/inputs/private_context_inputs.nr @@ -2,7 +2,7 @@ use dep::protocol_types::{transaction::tx_context::TxContext, abis::{call_contex // PrivateContextInputs are expected to be provided to each private function // docs:start:private-context-inputs -struct PrivateContextInputs { +pub struct PrivateContextInputs { call_context : CallContext, historical_header: Header, tx_context: TxContext, diff --git a/noir-projects/aztec-nr/aztec/src/context/inputs/public_context_inputs.nr b/noir-projects/aztec-nr/aztec/src/context/inputs/public_context_inputs.nr deleted file mode 100644 index 68dbb85b80b..00000000000 --- a/noir-projects/aztec-nr/aztec/src/context/inputs/public_context_inputs.nr +++ /dev/null @@ -1,14 +0,0 @@ -use dep::protocol_types::traits::Empty; - -// These inputs will likely go away once the AVM processes 1 public kernel per enqueued call. -struct PublicContextInputs { - // TODO: Remove this structure and get calldata size at compile time. - calldata_length: Field, - is_static_call: bool -} - -impl Empty for PublicContextInputs { - fn empty() -> Self { - PublicContextInputs { calldata_length: 0, is_static_call: false } - } -} diff --git a/noir-projects/aztec-nr/aztec/src/context/packed_returns.nr b/noir-projects/aztec-nr/aztec/src/context/packed_returns.nr index 418320270f1..abf2ee7ea39 100644 --- a/noir-projects/aztec-nr/aztec/src/context/packed_returns.nr +++ b/noir-projects/aztec-nr/aztec/src/context/packed_returns.nr @@ -1,7 +1,7 @@ use crate::{hash::hash_args_array, oracle::returns::unpack_returns}; use dep::protocol_types::traits::Deserialize; -struct PackedReturns { +pub struct PackedReturns { packed_returns: Field, } diff --git a/noir-projects/aztec-nr/aztec/src/context/private_context.nr b/noir-projects/aztec-nr/aztec/src/context/private_context.nr index bb415cacd0d..c5b79df6937 100644 --- a/noir-projects/aztec-nr/aztec/src/context/private_context.nr +++ b/noir-projects/aztec-nr/aztec/src/context/private_context.nr @@ -14,13 +14,11 @@ use crate::{ }; use dep::protocol_types::{ abis::{ - call_context::CallContext, function_selector::FunctionSelector, gas::Gas, - max_block_number::MaxBlockNumber, + call_context::CallContext, function_selector::FunctionSelector, max_block_number::MaxBlockNumber, validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator}, private_call_request::PrivateCallRequest, private_circuit_public_inputs::PrivateCircuitPublicInputs, - public_call_request::PublicCallRequest, - public_call_stack_item_compressed::PublicCallStackItemCompressed, read_request::ReadRequest, - note_hash::NoteHash, nullifier::Nullifier, log_hash::{LogHash, NoteLogHash, EncryptedLogHash} + public_call_request::PublicCallRequest, read_request::ReadRequest, note_hash::NoteHash, + nullifier::Nullifier, log_hash::{LogHash, NoteLogHash, EncryptedLogHash} }, address::{AztecAddress, EthAddress}, constants::{ @@ -30,11 +28,11 @@ use dep::protocol_types::{ MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_ENCRYPTED_LOGS_PER_CALL, MAX_UNENCRYPTED_LOGS_PER_CALL, MAX_NOTE_ENCRYPTED_LOGS_PER_CALL }, - header::Header, messaging::l2_to_l1_message::L2ToL1Message, utils::reader::Reader, traits::Empty + header::Header, messaging::l2_to_l1_message::L2ToL1Message, traits::Empty }; // When finished, one can call .finish() to convert back to the abi -struct PrivateContext { +pub struct PrivateContext { // docs:start:private-context inputs: PrivateContextInputs, side_effect_counter: u32, @@ -486,17 +484,7 @@ impl PrivateContext { is_delegate_call ); - let item = PublicCallStackItemCompressed { - contract_address, - call_context, - args_hash, - returns_hash: 0, - revert_code: 0, - start_gas_left: Gas::empty(), - end_gas_left: Gas::empty() - }; - - let call_request = PublicCallRequest { item, counter }; + let call_request = PublicCallRequest { contract_address, call_context, args_hash, counter }; self.public_call_requests.push(call_request); } @@ -538,18 +526,10 @@ impl PrivateContext { is_delegate_call ); - let item = PublicCallStackItemCompressed { + self.public_teardown_call_request = PublicCallRequest { contract_address, call_context, args_hash, - returns_hash: 0, - revert_code: 0, - start_gas_left: Gas::empty(), - end_gas_left: Gas::empty() - }; - - self.public_teardown_call_request = PublicCallRequest { - item, counter, }; } diff --git a/noir-projects/aztec-nr/aztec/src/context/public_context.nr b/noir-projects/aztec-nr/aztec/src/context/public_context.nr index 5bc56f947f9..0a3da729960 100644 --- a/noir-projects/aztec-nr/aztec/src/context/public_context.nr +++ b/noir-projects/aztec-nr/aztec/src/context/public_context.nr @@ -3,18 +3,17 @@ use dep::protocol_types::address::{AztecAddress, EthAddress}; use dep::protocol_types::constants::MAX_FIELD_VALUE; use dep::protocol_types::traits::{Serialize, Deserialize, Empty}; use dep::protocol_types::abis::function_selector::FunctionSelector; -use crate::context::inputs::public_context_inputs::PublicContextInputs; use crate::context::gas::GasOpts; use crate::hash::ArgsHasher; -struct PublicContext { - inputs: PublicContextInputs, - args_hash: Option +pub struct PublicContext { + args_hash: Option, + compute_args_hash: fn () -> Field, } impl PublicContext { - pub fn new(inputs: PublicContextInputs) -> Self { - PublicContext { inputs, args_hash: Option::none() } + pub fn new(compute_args_hash: fn() -> Field) -> Self { + PublicContext { args_hash: Option::none(), compute_args_hash } } pub fn emit_unencrypted_log(_self: &mut Self, log: T) where T: Serialize { @@ -109,8 +108,7 @@ impl PublicContext { _function_selector: FunctionSelector, _args: [Field] ) -> FunctionReturns { - assert(false, "'delegate_call_public_function' not implemented!"); - FunctionReturns::new([0; RETURNS_COUNT]) + panic(f"'delegate_call_public_function' not implemented!") } fn push_note_hash(_self: &mut Self, note_hash: Field) { @@ -134,18 +132,10 @@ impl PublicContext { } fn get_args_hash(mut self) -> Field { if !self.args_hash.is_some() { - let mut hasher = ArgsHasher::new(); - - // TODO: this should be replaced with the compile-time calldata size. - for i in 0..self.inputs.calldata_length as u32 { - let argn: [Field; 1] = calldata_copy((2 + i) as u32, 1); - hasher.add(argn[0]); - } - - self.args_hash = Option::some(hasher.hash()); + self.args_hash = Option::some((self.compute_args_hash)()); } - self.args_hash.unwrap() + self.args_hash.unwrap_unchecked() } fn transaction_fee(_self: Self) -> Field { transaction_fee() @@ -176,6 +166,9 @@ impl PublicContext { fn da_gas_left(_self: Self) -> Field { da_gas_left() } + fn is_static_call(_self: Self) -> bool { + is_static_call() == 1 + } fn raw_storage_read(_self: Self, storage_slot: Field) -> [Field; N] { let mut out = [0; N]; @@ -254,6 +247,9 @@ unconstrained fn l2_gas_left() -> Field { unconstrained fn da_gas_left() -> Field { da_gas_left_opcode() } +unconstrained fn is_static_call() -> Field { + is_static_call_opcode() +} unconstrained fn note_hash_exists(note_hash: Field, leaf_index: Field) -> u8 { note_hash_exists_opcode(note_hash, leaf_index) } @@ -292,10 +288,14 @@ unconstrained fn call_static( call_static_opcode(gas, address, args, function_selector) } -unconstrained fn calldata_copy(cdoffset: u32, copy_size: u32) -> [Field; N] { +unconstrained pub fn calldata_copy(cdoffset: u32, copy_size: u32) -> [Field; N] { calldata_copy_opcode(cdoffset, copy_size) } +unconstrained fn avm_return(returndata: [Field; N]) { + return_opcode(returndata) +} + unconstrained fn storage_read(storage_slot: Field) -> Field { storage_read_opcode(storage_slot) } @@ -306,7 +306,7 @@ unconstrained fn storage_write(storage_slot: Field, value: Field) { impl Empty for PublicContext { fn empty() -> Self { - PublicContext::new(PublicContextInputs::empty()) + PublicContext::new(|| 0) } } @@ -353,6 +353,9 @@ unconstrained fn l2_gas_left_opcode() -> Field {} #[oracle(avmOpcodeDaGasLeft)] unconstrained fn da_gas_left_opcode() -> Field {} +#[oracle(avmOpcodeIsStaticCall)] +unconstrained fn is_static_call_opcode() -> Field {} + #[oracle(avmOpcodeNoteHashExists)] unconstrained fn note_hash_exists_opcode(note_hash: Field, leaf_index: Field) -> u8 {} @@ -377,6 +380,9 @@ unconstrained fn send_l2_to_l1_msg_opcode(recipient: EthAddress, content: Field) #[oracle(avmOpcodeCalldataCopy)] unconstrained fn calldata_copy_opcode(cdoffset: u32, copy_size: u32) -> [Field; N] {} +#[oracle(avmOpcodeReturn)] +unconstrained fn return_opcode(returndata: [Field; N]) {} + #[oracle(avmOpcodeCall)] unconstrained fn call_opcode( gas: [Field; 2], // gas allocation: [l2_gas, da_gas] @@ -403,7 +409,7 @@ unconstrained fn storage_read_opcode(storage_slot: Field) -> Field {} #[oracle(avmOpcodeStorageWrite)] unconstrained fn storage_write_opcode(storage_slot: Field, value: Field) {} -struct FunctionReturns { +pub struct FunctionReturns { values: [Field; N] } diff --git a/noir-projects/aztec-nr/aztec/src/context/unconstrained_context.nr b/noir-projects/aztec-nr/aztec/src/context/unconstrained_context.nr index 8ce6591dd39..cc0cc68f08c 100644 --- a/noir-projects/aztec-nr/aztec/src/context/unconstrained_context.nr +++ b/noir-projects/aztec-nr/aztec/src/context/unconstrained_context.nr @@ -1,7 +1,7 @@ use dep::protocol_types::{address::AztecAddress, traits::Deserialize}; use crate::oracle::{execution::{get_chain_id, get_version, get_contract_address, get_block_number}, storage::storage_read}; -struct UnconstrainedContext { +pub struct UnconstrainedContext { block_number: u32, contract_address: AztecAddress, version: Field, diff --git a/noir-projects/aztec-nr/aztec/src/deploy.nr b/noir-projects/aztec-nr/aztec/src/deploy.nr index 947a0eb85d8..d916b384f80 100644 --- a/noir-projects/aztec-nr/aztec/src/deploy.nr +++ b/noir-projects/aztec-nr/aztec/src/deploy.nr @@ -25,7 +25,9 @@ pub fn deploy_contract(context: &mut PrivateContext, target: AztecAddress) { let _call_result = context.call_private_function( DEPLOYER_CONTRACT_ADDRESS, - FunctionSelector::from_field(0x7ebd3690), + comptime { + FunctionSelector::from_signature("deploy(Field,(Field),Field,(Field),bool)") + }, serialized_args ); } diff --git a/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_event_emission.nr b/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_event_emission.nr index 90752c29467..70953b5fe66 100644 --- a/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_event_emission.nr +++ b/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_event_emission.nr @@ -1,12 +1,12 @@ use crate::{ context::PrivateContext, event::event_interface::EventInterface, encrypted_logs::payload::compute_encrypted_event_log, - keys::{getters::get_current_public_keys, public_keys::{OvpkM, IvpkM}}, + keys::{getters::get_public_keys, public_keys::{OvpkM, IvpkM}}, oracle::logs_traits::LensForEncryptedEvent, oracle::unsafe_rand::unsafe_rand }; use dep::protocol_types::{address::AztecAddress, hash::sha256_to_field}; -unconstrained fn compute_unconstrained( +unconstrained fn compute_unconstrained( contract_address: AztecAddress, randomness: Field, ovsk_app: Field, @@ -14,7 +14,7 @@ unconstrained fn compute_unconstrained ([u8; OB], Field) where Event: EventInterface, [u8; NB]: LensForEncryptedEvent { +) -> ([u8; OB], Field) where Event: EventInterface, [u8; N * 32 + 64]: LensForEncryptedEvent { compute( contract_address, randomness, @@ -26,7 +26,7 @@ unconstrained fn compute_unconstrained( +fn compute( contract_address: AztecAddress, randomness: Field, ovsk_app: Field, @@ -34,7 +34,7 @@ fn compute( ivpk: IvpkM, recipient: AztecAddress, event: Event -) -> ([u8; OB], Field) where Event: EventInterface, [u8; NB]: LensForEncryptedEvent { +) -> ([u8; OB], Field) where Event: EventInterface, [u8; N * 32 + 64]: LensForEncryptedEvent { let encrypted_log: [u8; OB] = compute_encrypted_event_log( contract_address, randomness, @@ -48,7 +48,7 @@ fn compute( (encrypted_log, log_hash) } -fn emit_with_keys( +fn emit_with_keys( context: &mut PrivateContext, randomness: Field, event: Event, @@ -56,108 +56,108 @@ fn emit_with_keys( ivpk: IvpkM, iv: AztecAddress, inner_compute: fn(AztecAddress, Field, Field, OvpkM, IvpkM, AztecAddress, Event) -> ([u8; OB], Field) -) where Event: EventInterface, [u8; NB]: LensForEncryptedEvent { +) where Event: EventInterface, [u8; N * 32 + 64]: LensForEncryptedEvent { let contract_address: AztecAddress = context.this_address(); let ovsk_app: Field = context.request_ovsk_app(ovpk.hash()); let (encrypted_log, log_hash) = inner_compute(contract_address, randomness, ovsk_app, ovpk, ivpk, iv, event); context.emit_raw_event_log_with_masked_address(randomness, encrypted_log, log_hash); } -pub fn encode_and_encrypt_event( +pub fn encode_and_encrypt_event( context: &mut PrivateContext, ov: AztecAddress, iv: AztecAddress -) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress)](Event) -> () where Event: EventInterface, [u8; NB]: LensForEncryptedEvent { +) -> fn[(AztecAddress, AztecAddress, &mut PrivateContext)](Event) -> () where Event: EventInterface, [u8; N * 32 + 64]: LensForEncryptedEvent { | e: Event | { - let ovpk = get_current_public_keys(context, ov).ovpk_m; - let ivpk = get_current_public_keys(context, iv).ivpk_m; + let ovpk = get_public_keys(ov).ovpk_m; + let ivpk = get_public_keys(iv).ivpk_m; let randomness = unsafe_rand(); emit_with_keys(context, randomness, e, ovpk, ivpk, iv, compute); } } -pub fn encode_and_encrypt_event_unconstrained( +pub fn encode_and_encrypt_event_unconstrained( context: &mut PrivateContext, ov: AztecAddress, iv: AztecAddress -) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress)](Event) -> () where Event: EventInterface, [u8; NB]: LensForEncryptedEvent { +) -> fn[(AztecAddress, AztecAddress, &mut PrivateContext)](Event) -> () where Event: EventInterface, [u8; N * 32 + 64]: LensForEncryptedEvent { | e: Event | { - let ovpk = get_current_public_keys(context, ov).ovpk_m; - let ivpk = get_current_public_keys(context, iv).ivpk_m; + let ovpk = get_public_keys(ov).ovpk_m; + let ivpk = get_public_keys(iv).ivpk_m; let randomness = unsafe_rand(); emit_with_keys(context, randomness, e, ovpk, ivpk, iv, compute_unconstrained); } } -pub fn encode_and_encrypt_event_with_randomness( +pub fn encode_and_encrypt_event_with_randomness( context: &mut PrivateContext, randomness: Field, ov: AztecAddress, iv: AztecAddress -) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress, Field)](Event) -> () where Event: EventInterface, [u8; NB]: LensForEncryptedEvent { +) -> fn[(AztecAddress, AztecAddress, &mut PrivateContext, Field)](Event) -> () where Event: EventInterface, [u8; N * 32 + 64]: LensForEncryptedEvent { | e: Event | { - let ovpk = get_current_public_keys(context, ov).ovpk_m; - let ivpk = get_current_public_keys(context, iv).ivpk_m; + let ovpk = get_public_keys(ov).ovpk_m; + let ivpk = get_public_keys(iv).ivpk_m; emit_with_keys(context, randomness, e, ovpk, ivpk, iv, compute); } } -pub fn encode_and_encrypt_event_with_randomness_unconstrained( +pub fn encode_and_encrypt_event_with_randomness_unconstrained( context: &mut PrivateContext, randomness: Field, ov: AztecAddress, iv: AztecAddress -) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress, Field)](Event) -> () where Event: EventInterface, [u8; NB]: LensForEncryptedEvent { +) -> fn[(AztecAddress, AztecAddress, &mut PrivateContext, Field)](Event) -> () where Event: EventInterface, [u8; N * 32 + 64]: LensForEncryptedEvent { | e: Event | { - let ovpk = get_current_public_keys(context, ov).ovpk_m; - let ivpk = get_current_public_keys(context, iv).ivpk_m; + let ovpk = get_public_keys(ov).ovpk_m; + let ivpk = get_public_keys(iv).ivpk_m; emit_with_keys(context, randomness, e, ovpk, ivpk, iv, compute_unconstrained); } } -pub fn encode_and_encrypt_event_with_keys( +pub fn encode_and_encrypt_event_with_keys( context: &mut PrivateContext, ovpk: OvpkM, ivpk: IvpkM, recipient: AztecAddress -) -> fn[(&mut PrivateContext, OvpkM, IvpkM, AztecAddress)](Event) -> () where Event: EventInterface, [u8; NB]: LensForEncryptedEvent { +) -> fn[(&mut PrivateContext, OvpkM, IvpkM, AztecAddress)](Event) -> () where Event: EventInterface, [u8; N * 32 + 64]: LensForEncryptedEvent { | e: Event | { let randomness = unsafe_rand(); emit_with_keys(context, randomness, e, ovpk, ivpk, recipient, compute); } } -pub fn encode_and_encrypt_event_with_keys_unconstrained( +pub fn encode_and_encrypt_event_with_keys_unconstrained( context: &mut PrivateContext, ovpk: OvpkM, ivpk: IvpkM, recipient: AztecAddress -) -> fn[(&mut PrivateContext, OvpkM, IvpkM, AztecAddress)](Event) -> () where Event: EventInterface, [u8; NB]: LensForEncryptedEvent { +) -> fn[(&mut PrivateContext, OvpkM, IvpkM, AztecAddress)](Event) -> () where Event: EventInterface, [u8; N * 32 + 64]: LensForEncryptedEvent { | e: Event | { let randomness = unsafe_rand(); emit_with_keys(context, randomness, e, ovpk, ivpk, recipient, compute_unconstrained); } } -pub fn encode_and_encrypt_event_with_keys_with_randomness( +pub fn encode_and_encrypt_event_with_keys_with_randomness( context: &mut PrivateContext, randomness: Field, ovpk: OvpkM, ivpk: IvpkM, recipient: AztecAddress -) -> fn[(&mut PrivateContext, Field, OvpkM, IvpkM, AztecAddress)](Event) -> () where Event: EventInterface, [u8; NB]: LensForEncryptedEvent { +) -> fn[(&mut PrivateContext, Field, OvpkM, IvpkM, AztecAddress)](Event) -> () where Event: EventInterface, [u8; N * 32 + 64]: LensForEncryptedEvent { | e: Event | { emit_with_keys(context, randomness, e, ovpk, ivpk, recipient, compute); } } -pub fn encode_and_encrypt_event_with_keys_with_randomness_unconstrained( +pub fn encode_and_encrypt_event_with_keys_with_randomness_unconstrained( context: &mut PrivateContext, randomness: Field, ovpk: OvpkM, ivpk: IvpkM, recipient: AztecAddress -) -> fn[(&mut PrivateContext, Field, OvpkM, IvpkM, AztecAddress)](Event) -> () where Event: EventInterface, [u8; NB]: LensForEncryptedEvent { +) -> fn[(&mut PrivateContext, Field, OvpkM, IvpkM, AztecAddress)](Event) -> () where Event: EventInterface, [u8; N * 32 + 64]: LensForEncryptedEvent { | e: Event | { emit_with_keys(context, randomness, e, ovpk, ivpk, recipient, compute_unconstrained); } diff --git a/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_note_emission.nr b/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_note_emission.nr index acf40ee79ba..fc55b43ea64 100644 --- a/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_note_emission.nr +++ b/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_note_emission.nr @@ -1,125 +1,149 @@ use crate::{ context::PrivateContext, note::{note_emission::NoteEmission, note_interface::NoteInterface}, - keys::{getters::get_current_public_keys, public_keys::{OvpkM, IvpkM}}, + keys::{getters::{get_public_keys, get_ovsk_app}, public_keys::{OvpkM, IvpkM}}, encrypted_logs::payload::compute_encrypted_note_log, oracle::logs_traits::LensForEncryptedLog }; use dep::protocol_types::{hash::sha256_to_field, address::AztecAddress, abis::note_hash::NoteHash}; -unconstrained fn compute_unconstrained( - contract_address: AztecAddress, - storage_slot: Field, - ovsk_app: Field, - ovpk: OvpkM, - ivpk: IvpkM, - recipient: AztecAddress, - note: Note -) -> ([u8; M], Field) where Note: NoteInterface, [Field; N]: LensForEncryptedLog { - compute( - contract_address, - storage_slot, - ovsk_app, - ovpk, - ivpk, - recipient, - note - ) -} - -fn compute( - contract_address: AztecAddress, - storage_slot: Field, - ovsk_app: Field, - ovpk: OvpkM, - ivpk: IvpkM, - recipient: AztecAddress, - note: Note -) -> ([u8; M], Field) where Note: NoteInterface, [Field; N]: LensForEncryptedLog { - let encrypted_log: [u8; M] = compute_encrypted_note_log( - contract_address, - storage_slot, - ovsk_app, - ovpk, - ivpk, - recipient, - note - ); - let log_hash = sha256_to_field(encrypted_log); - (encrypted_log, log_hash) -} - -fn emit_with_keys( - context: &mut PrivateContext, +fn compute_raw_note_log( + context: PrivateContext, note: Note, + ovsk_app: Field, ovpk: OvpkM, ivpk: IvpkM, recipient: AztecAddress, - inner_compute: fn(AztecAddress, Field, Field, OvpkM, IvpkM, AztecAddress, Note) -> ([u8; M], Field) -) where Note: NoteInterface, [Field; N]: LensForEncryptedLog { + num_public_values: u8 // Number of values to be appended to the log in public (used in partial note flow). +) -> (u32, [u8; M], Field) where Note: NoteInterface, [Field; N]: LensForEncryptedLog { let note_header = note.get_header(); let note_hash_counter = note_header.note_hash_counter; let storage_slot = note_header.storage_slot; + // TODO(#8589): use typesystem to skip this check when not needed let note_exists = context.note_hashes.storage.any(|n: NoteHash| n.counter == note_hash_counter); assert(note_exists, "Can only emit a note log for an existing note."); let contract_address: AztecAddress = context.this_address(); - let ovsk_app: Field = context.request_ovsk_app(ovpk.hash()); - let (encrypted_log, log_hash) = inner_compute( + let encrypted_log: [u8; M] = compute_encrypted_note_log( contract_address, storage_slot, ovsk_app, ovpk, ivpk, recipient, - note + note, + num_public_values ); + let log_hash = sha256_to_field(encrypted_log); - context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash); + (note_hash_counter, encrypted_log, log_hash) } -pub fn encode_and_encrypt_note( +unconstrained fn compute_raw_note_log_unconstrained( + context: PrivateContext, + note: Note, + ovpk: OvpkM, + ivpk: IvpkM, + recipient: AztecAddress, + num_public_values: u8 // Number of values to be appended to the log in public (used in partial note flow). +) -> (u32, [u8; M], Field) where Note: NoteInterface, [Field; N]: LensForEncryptedLog { + let ovsk_app = get_ovsk_app(ovpk.hash()); + compute_raw_note_log(context, note, ovsk_app, ovpk, ivpk, recipient, num_public_values) +} + +pub fn encode_and_encrypt_note( context: &mut PrivateContext, ov: AztecAddress, iv: AztecAddress -) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress)](NoteEmission) -> () where Note: NoteInterface, [Field; N]: LensForEncryptedLog { +) -> fn[(AztecAddress, AztecAddress, &mut PrivateContext)](NoteEmission) -> () where Note: NoteInterface, [Field; N]: LensForEncryptedLog { | e: NoteEmission | { - let ovpk = get_current_public_keys(context, ov).ovpk_m; - let ivpk = get_current_public_keys(context, iv).ivpk_m; - emit_with_keys(context, e.note, ovpk, ivpk, iv, compute); + let ovpk = get_public_keys(ov).ovpk_m; + let ivpk = get_public_keys(iv).ivpk_m; + let ovsk_app: Field = context.request_ovsk_app(ovpk.hash()); + + // Number of public values is always 0 here because `encode_and_encrypt_note(...)` is only called + // in the non-partial note flow. + let num_public_values = 0; + let (note_hash_counter, encrypted_log, log_hash) = compute_raw_note_log(*context, e.note, ovsk_app, ovpk, ivpk, iv, num_public_values); + context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash); } } -pub fn encode_and_encrypt_note_unconstrained( +pub fn encode_and_encrypt_note_unconstrained( context: &mut PrivateContext, ov: AztecAddress, iv: AztecAddress -) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress)](NoteEmission) -> () where Note: NoteInterface, [Field; N]: LensForEncryptedLog { +) -> fn[(AztecAddress, AztecAddress, &mut PrivateContext)](NoteEmission) -> () where Note: NoteInterface, [Field; N]: LensForEncryptedLog { | e: NoteEmission | { - let ovpk = get_current_public_keys(context, ov).ovpk_m; - let ivpk = get_current_public_keys(context, iv).ivpk_m; - emit_with_keys(context, e.note, ovpk, ivpk, iv, compute_unconstrained); + // Note: We could save a lot of gates by obtaining the following keys in an unconstrained context but this + // function is currently not used anywhere so we are not optimizing it. + let ovpk = get_public_keys(ov).ovpk_m; + let ivpk = get_public_keys(iv).ivpk_m; + + // Number of public values is always 0 here because `encode_and_encrypt_note_unconstrained(...)` is only called + // in the non-partial note flow. + let num_public_values = 0; + + // See the comment in `encode_and_encrypt_note_with_keys_unconstrained` for why having note hash counter + // and log hash unconstrained here is fine. + let (note_hash_counter, encrypted_log, log_hash) = unsafe { + compute_raw_note_log_unconstrained(*context, e.note, ovpk, ivpk, iv, num_public_values) + }; + context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash); } } -pub fn encode_and_encrypt_note_with_keys( +pub fn encode_and_encrypt_note_with_keys( context: &mut PrivateContext, ovpk: OvpkM, ivpk: IvpkM, recipient: AztecAddress -) -> fn[(&mut PrivateContext, OvpkM, IvpkM, AztecAddress)](NoteEmission) -> () where Note: NoteInterface, [Field; N]: LensForEncryptedLog { +) -> fn[(&mut PrivateContext, OvpkM, IvpkM, AztecAddress)](NoteEmission) -> () where Note: NoteInterface, [Field; N]: LensForEncryptedLog { | e: NoteEmission | { - emit_with_keys(context, e.note, ovpk, ivpk, recipient, compute); + let ovsk_app: Field = context.request_ovsk_app(ovpk.hash()); + + // Number of public values is always 0 here because `encode_and_encrypt_note_unconstrained(...)` is only called + // in the non-partial note flow. + let num_public_values = 0; + + let (note_hash_counter, encrypted_log, log_hash) = compute_raw_note_log(*context, e.note, ovsk_app, ovpk, ivpk, recipient, num_public_values); + context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash); } } -pub fn encode_and_encrypt_note_with_keys_unconstrained( +pub fn encode_and_encrypt_note_with_keys_unconstrained( context: &mut PrivateContext, ovpk: OvpkM, ivpk: IvpkM, recipient: AztecAddress -) -> fn[(&mut PrivateContext, OvpkM, IvpkM, AztecAddress)](NoteEmission) -> () where Note: NoteInterface, [Field; N]: LensForEncryptedLog { +) -> fn[(&mut PrivateContext, OvpkM, IvpkM, AztecAddress)](NoteEmission) -> () where Note: NoteInterface, [Field; N]: LensForEncryptedLog { | e: NoteEmission | { - emit_with_keys(context, e.note, ovpk, ivpk, recipient, compute_unconstrained); + // Number of public values is always 0 here because `encode_and_encrypt_note_with_keys_unconstrained(...)` is only called + // in the non-partial note flow. + let num_public_values = 0; + + // Having the log hash be unconstrained here is fine because the way this works is we send the log hash + // to the kernel, and it gets included as part of its public inputs. Then we send the tx to the sequencer, + // which includes the kernel proof and the log preimages. The sequencer computes the hashes of the logs + // and checks that they are the ones in the public inputs of the kernel, and drops the tx otherwise (proposing + // the block on L1 would later fail if it didn't because of txs effects hash mismatch). + // So if we don't constrain the log hash, then a malicious sender can compute the correct log, submit a bad + // log hash to the kernel, and then submit the bad log preimage to the sequencer. All checks will pass, but + // the submitted log will not be the one that was computed by the app. + // In the unconstrained case, we don't care about the log at all because we don't do anything with it, + // and because it's unconstrained: it could be anything. So if a sender chooses to broadcast the tx with a log + // that is different from the one that was used in the circuit, then they'll be able to, but they were already + // able to change the log before anyway, so the end result is the same. It's important here that we do not + // return the log from this function to the app, otherwise it could try to do stuff with it and then that might + // be wrong. + // Regarding the note hash counter, this is used for squashing. The kernel assumes that a given note can have + // more than one log and removes all of the matching ones, so all a malicious sender could do is either: cause + // for the log to be deleted when it shouldn't have (which is fine - they can already make the content be + // whatever), or cause for the log to not be deleted when it should have (which is also fine - it'll be a log + // for a note that doesn't exist). + let (note_hash_counter, encrypted_log, log_hash) = unsafe { + compute_raw_note_log_unconstrained(*context, e.note, ovpk, ivpk, recipient, num_public_values) + }; + context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash); } } diff --git a/noir-projects/aztec-nr/aztec/src/encrypted_logs/header.nr b/noir-projects/aztec-nr/aztec/src/encrypted_logs/header.nr index c4962380f92..7db919c8728 100644 --- a/noir-projects/aztec-nr/aztec/src/encrypted_logs/header.nr +++ b/noir-projects/aztec-nr/aztec/src/encrypted_logs/header.nr @@ -4,7 +4,7 @@ use crate::keys::{point_to_symmetric_key::point_to_symmetric_key, public_keys::T use std::aes128::aes128_encrypt; -struct EncryptedLogHeader { +pub struct EncryptedLogHeader { address: AztecAddress, } @@ -29,7 +29,7 @@ impl EncryptedLogHeader { } #[test] -fn test_encrypted_log_header_matches_noir() { +unconstrained fn test_encrypted_log_header_matches_noir() { let address = AztecAddress::from_field(0xdeadbeef); let header = EncryptedLogHeader::new(address); let secret = Scalar { diff --git a/noir-projects/aztec-nr/aztec/src/encrypted_logs/incoming_body.nr b/noir-projects/aztec-nr/aztec/src/encrypted_logs/incoming_body.nr index 2ba0ec2a8b7..171ed82ebce 100644 --- a/noir-projects/aztec-nr/aztec/src/encrypted_logs/incoming_body.nr +++ b/noir-projects/aztec-nr/aztec/src/encrypted_logs/incoming_body.nr @@ -5,20 +5,17 @@ use dep::protocol_types::{scalar::Scalar}; use std::aes128::aes128_encrypt; use crate::keys::{point_to_symmetric_key::point_to_symmetric_key, public_keys::IvpkM}; -struct EncryptedLogIncomingBody { - plaintext: [u8; M] +pub struct EncryptedLogIncomingBody { + plaintext: [u8; N * 32 + 64] } -impl EncryptedLogIncomingBody { - pub fn from_note(note: T, storage_slot: Field) -> Self where T: NoteInterface { +impl EncryptedLogIncomingBody { + pub fn from_note(note: T, storage_slot: Field) -> Self where T: NoteInterface { let mut plaintext = note.to_be_bytes(storage_slot); EncryptedLogIncomingBody { plaintext } } - pub fn from_event( - event: T, - randomness: Field - ) -> Self where T: EventInterface { + pub fn from_event(event: T, randomness: Field) -> Self where T: EventInterface { let mut plaintext = event.private_to_be_bytes(randomness); EncryptedLogIncomingBody { plaintext } } @@ -43,7 +40,7 @@ mod test { }; use crate::{ - note::{note_header::NoteHeader, note_interface::NoteInterface}, + note::{note_header::NoteHeader, note_interface::{NoteInterface, NullifiableNote}}, encrypted_logs::incoming_body::EncryptedLogIncomingBody, event::event_interface::EventInterface, context::PrivateContext, keys::public_keys::IvpkM }; @@ -55,14 +52,28 @@ mod test { header: NoteHeader, } - global ADDRESS_NOTE_LEN: Field = 3; - global ADDRESS_NOTE_BYTES_LEN = 32 * 3 + 64; + global ADDRESS_NOTE_LEN: u32 = 3; - impl NoteInterface for AddressNote { - fn compute_note_hiding_point(_self: Self) -> Point { - crate::generators::Ga1 + impl NullifiableNote for AddressNote { + fn compute_nullifier( + _self: Self, + _context: &mut PrivateContext, + _note_hash_for_nullify: Field + ) -> Field { + 1 } + unconstrained fn compute_nullifier_without_context(_self: Self) -> Field { + 1 + } + } + + struct AddressNoteHidingPoint { + inner: Point + } + + impl NoteInterface for AddressNote { + fn get_note_type_id() -> Field { 1 } @@ -75,18 +86,6 @@ mod test { self.header = header; } - fn compute_nullifier( - _self: Self, - _context: &mut PrivateContext, - _note_hash_for_nullify: Field - ) -> Field { - 1 - } - - fn compute_nullifier_without_context(_self: Self) -> Field { - 1 - } - fn serialize_content(self) -> [Field; ADDRESS_NOTE_LEN] { [self.address.to_field(), self.owner.to_field(), self.randomness] } @@ -100,10 +99,10 @@ mod test { } } - fn to_be_bytes(self, storage_slot: Field) -> [u8; ADDRESS_NOTE_BYTES_LEN] { + fn to_be_bytes(self, storage_slot: Field) -> [u8; ADDRESS_NOTE_LEN * 32 + 64] { let serialized_note = self.serialize_content(); - let mut buffer: [u8; ADDRESS_NOTE_BYTES_LEN] = [0; ADDRESS_NOTE_BYTES_LEN]; + let mut buffer: [u8; ADDRESS_NOTE_LEN * 32 + 64] = [0; ADDRESS_NOTE_LEN * 32 + 64]; let storage_slot_bytes: [u8; 32] = storage_slot.to_be_bytes(); let note_type_id_bytes: [u8; 32] = AddressNote::get_note_type_id().to_be_bytes(); @@ -121,6 +120,10 @@ mod test { } buffer } + + fn compute_note_hash(_self: Self) -> Field { + crate::generators::Ga1.x + } } impl AddressNote { @@ -130,7 +133,7 @@ mod test { } #[test] - fn test_encrypted_note_log_incoming_body_matches_typescript() { + unconstrained fn test_encrypted_note_log_incoming_body_matches_typescript() { // All the values in this test were copied over from `encrypted_note_log_incoming_body.test.ts` let note = AddressNote::new( AztecAddress::from_field(0x1), @@ -186,11 +189,9 @@ mod test { } } - global TEST_EVENT_LEN: Field = 3; - global TEST_EVENT_BYTES_LEN = 32 * 3 + 64; - global TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS = 32 * 3 + 32; + global TEST_EVENT_LEN: u32 = 3; - impl EventInterface for TestEvent { + impl EventInterface for TestEvent { fn get_event_type_id() -> EventSelector { comptime { @@ -198,8 +199,8 @@ mod test { } } - fn private_to_be_bytes(self, randomness: Field) -> [u8; TEST_EVENT_BYTES_LEN] { - let mut buffer: [u8; TEST_EVENT_BYTES_LEN] = [0; TEST_EVENT_BYTES_LEN]; + fn private_to_be_bytes(self, randomness: Field) -> [u8; TEST_EVENT_LEN * 32 + 64] { + let mut buffer: [u8; TEST_EVENT_LEN * 32 + 64] = [0; TEST_EVENT_LEN * 32 + 64]; let randomness_bytes: [u8; 32] = randomness.to_be_bytes(); let event_type_id_bytes: [u8; 32] = TestEvent::get_event_type_id().to_field().to_be_bytes(); @@ -221,8 +222,8 @@ mod test { buffer } - fn to_be_bytes(self) -> [u8; TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS] { - let mut buffer: [u8; TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS] = [0; TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS]; + fn to_be_bytes(self) -> [u8; TEST_EVENT_LEN * 32 + 32] { + let mut buffer: [u8; TEST_EVENT_LEN * 32 + 32] = [0; TEST_EVENT_LEN * 32 + 32]; let event_type_id_bytes: [u8; 32] = TestEvent::get_event_type_id().to_field().to_be_bytes(); @@ -248,7 +249,7 @@ mod test { } #[test] - fn test_encrypted_log_event_incoming_body() { + unconstrained fn test_encrypted_log_event_incoming_body() { let test_event = TestEvent { value0: 1, value1: 2, value2: 3 }; let eph_sk = Scalar { @@ -273,7 +274,7 @@ mod test { // The following value was generated by `encrypted_event_log_incoming_body.test.ts` // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data. let event_body_ciphertext_from_typescript = [ - 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 147, 228, 160, 190, 146, 61, 95, 203, 124, 153, 68, 168, 17, 150, 92, 0, 99, 214, 85, 64, 191, 78, 157, 131, 149, 96, 236, 253, 96, 172, 157, 30, 185, 29, 14, 152, 216, 130, 219, 151, 80, 185, 43, 223, 167, 8, 89, 189, 88, 188, 101, 137, 255, 136, 84, 252, 79, 18, 52, 3, 110, 54, 54, 206, 244, 209, 246, 226, 207, 247, 143, 253, 211, 75, 160, 224, 172, 41, 45, 7, 208, 137, 90, 56, 59, 4, 234, 48, 53, 23, 130, 230, 49, 249, 142, 243, 170, 72, 183, 242, 49, 124, 46, 52, 198, 75, 55, 102, 56, 89, 254, 67, 59, 157, 249, 120, 184, 67, 154, 16, 148, 227, 93, 37, 120, 199, 93, 166, 80, 127, 173, 52, 80, 135, 87, 1, 168, 164, 51, 48, 126, 120, 47, 102, 211, 227, 234, 170, 208, 99, 111, 198, 170, 226, 156, 244, 241, 174, 206, 30 + 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 147, 228, 160, 190, 146, 61, 95, 203, 124, 153, 68, 168, 17, 150, 92, 0, 99, 214, 85, 64, 191, 78, 157, 131, 149, 96, 236, 253, 96, 172, 157, 30, 201, 247, 40, 80, 60, 188, 158, 251, 242, 103, 197, 79, 165, 195, 10, 160, 255, 35, 167, 152, 25, 233, 77, 145, 214, 243, 210, 119, 0, 20, 29, 95, 15, 63, 33, 190, 184, 67, 254, 96, 128, 243, 220, 228, 201, 130, 86, 163, 52, 127, 111, 10, 212, 7, 160, 16, 87, 13, 39, 11, 5, 1, 164, 65, 8, 56, 82, 245, 13, 68, 176, 90, 100, 69, 243, 78, 117, 188, 221, 34, 178, 31, 155, 89, 143, 176, 129, 118, 36, 236, 64, 179, 52, 239, 184, 51, 51, 199, 221, 49, 81, 197, 17, 199, 192, 99, 49, 168, 157, 164, 190, 33, 240, 182, 214, 173, 7, 156, 102, 95, 65, 217, 225, 123, 42, 21, 124, 144 ]; assert_eq(event_body_ciphertext_from_typescript.len(), ciphertext.len()); diff --git a/noir-projects/aztec-nr/aztec/src/encrypted_logs/outgoing_body.nr b/noir-projects/aztec-nr/aztec/src/encrypted_logs/outgoing_body.nr index 64095b9ad03..dfd92f65121 100644 --- a/noir-projects/aztec-nr/aztec/src/encrypted_logs/outgoing_body.nr +++ b/noir-projects/aztec-nr/aztec/src/encrypted_logs/outgoing_body.nr @@ -6,7 +6,7 @@ use std::aes128::aes128_encrypt; use crate::{keys::public_keys::IvpkM, utils::point::point_to_bytes}; -struct EncryptedLogOutgoingBody { +pub struct EncryptedLogOutgoingBody { eph_sk: Scalar, recipient: AztecAddress, recipient_ivpk: IvpkM, @@ -63,7 +63,7 @@ mod test { use std::embedded_curve_ops::fixed_base_scalar_mul as derive_public_key; #[test] - fn test_encrypted_log_outgoing_body_matches_typescript() { + unconstrained fn test_encrypted_log_outgoing_body_matches_typescript() { let eph_sk = Scalar { lo: 0x00000000000000000000000000000000d0d302ee245dfaf2807e604eec4715fe, hi: 0x000000000000000000000000000000000f096b423017226a18461115fa8d34bb @@ -92,9 +92,6 @@ mod test { 127, 182, 227, 75, 192, 197, 54, 47, 168, 134, 233, 148, 251, 46, 86, 12, 73, 50, 238, 50, 31, 174, 27, 202, 110, 77, 161, 197, 244, 124, 17, 100, 143, 150, 232, 14, 156, 248, 43, 177, 16, 82, 244, 103, 88, 74, 84, 200, 15, 65, 187, 14, 163, 60, 91, 22, 104, 31, 211, 190, 124, 121, 79, 92, 239, 65, 185, 106, 51, 178, 168, 137, 84, 43, 79, 158, 151, 152, 83, 42, 170, 13, 106, 209, 254, 74, 39, 145, 73, 215, 17, 234, 196, 89, 30, 58, 120, 127, 88, 69, 121, 61, 18, 206, 89, 118, 243, 238, 177, 71, 73, 47, 147, 4, 155, 25, 173, 248, 206, 52, 17, 180, 122, 186, 106, 191, 252, 102, 197, 91, 16, 39, 94, 91, 224, 30, 168, 177, 26, 144, 5, 124, 128, 6 ]; - for i in 0..outgoing_body_ciphertext_from_typescript.len() { - assert_eq(ciphertext[i], outgoing_body_ciphertext_from_typescript[i]); - } - assert_eq(outgoing_body_ciphertext_from_typescript.len(), ciphertext.len()); + assert_eq(outgoing_body_ciphertext_from_typescript, ciphertext); } } diff --git a/noir-projects/aztec-nr/aztec/src/encrypted_logs/payload.nr b/noir-projects/aztec-nr/aztec/src/encrypted_logs/payload.nr index 84c7a9eacbf..782ec40be53 100644 --- a/noir-projects/aztec-nr/aztec/src/encrypted_logs/payload.nr +++ b/noir-projects/aztec-nr/aztec/src/encrypted_logs/payload.nr @@ -14,7 +14,7 @@ use crate::{ keys::public_keys::{OvpkM, IvpkM} }; -pub fn compute_encrypted_event_log( +pub fn compute_encrypted_event_log( contract_address: AztecAddress, randomness: Field, ovsk_app: Field, @@ -22,7 +22,7 @@ pub fn compute_encrypted_event_log ivpk: IvpkM, recipient: AztecAddress, event: Event -) -> [u8; OB] where Event: EventInterface { +) -> [u8; OB] where Event: EventInterface { let (eph_sk, eph_pk) = generate_ephemeral_key_pair(); let header = EncryptedLogHeader::new(contract_address); @@ -65,15 +65,16 @@ pub fn compute_encrypted_event_log encrypted_bytes } -pub fn compute_encrypted_note_log( +pub fn compute_encrypted_note_log( contract_address: AztecAddress, storage_slot: Field, ovsk_app: Field, ovpk: OvpkM, ivpk: IvpkM, recipient: AztecAddress, - note: Note -) -> [u8; M] where Note: NoteInterface { + note: Note, + num_public_values: u8 // Number of values to be appended to the log in public (used in partial note flow). +) -> [u8; M] where Note: NoteInterface { let (eph_sk, eph_pk) = generate_ephemeral_key_pair(); let header = EncryptedLogHeader::new(contract_address); @@ -86,27 +87,29 @@ pub fn compute_encrypted_note_log( let mut encrypted_bytes: [u8; M] = [0; M]; // @todo We ignore the tags for now + encrypted_bytes[64] = num_public_values; // TODO(#8558): This can be just a single bit if we store info about partial fields in ABI let eph_pk_bytes = point_to_bytes(eph_pk); for i in 0..32 { - encrypted_bytes[64 + i] = eph_pk_bytes[i]; + encrypted_bytes[65 + i] = eph_pk_bytes[i]; } for i in 0..48 { - encrypted_bytes[96 + i] = incoming_header_ciphertext[i]; - encrypted_bytes[144 + i] = outgoing_header_ciphertext[i]; + encrypted_bytes[97 + i] = incoming_header_ciphertext[i]; + encrypted_bytes[145 + i] = outgoing_header_ciphertext[i]; } for i in 0..144 { - encrypted_bytes[192 + i] = outgoing_body_ciphertext[i]; + encrypted_bytes[193 + i] = outgoing_body_ciphertext[i]; } // Then we fill in the rest as the incoming body ciphertext - let size = M - 336; + let size = M - 337; assert_eq(size, incoming_body_ciphertext.len(), "ciphertext length mismatch"); for i in 0..size { - encrypted_bytes[336 + i] = incoming_body_ciphertext[i]; + encrypted_bytes[337 + i] = incoming_body_ciphertext[i]; } // Current unoptimized size of the encrypted log // incoming_tag (32 bytes) // outgoing_tag (32 bytes) + // num_public_values (1 byte) // eph_pk (32 bytes) // incoming_header (48 bytes) // outgoing_header (48 bytes) @@ -143,7 +146,7 @@ mod test { use std::test::OracleMock; #[test] - fn test_encrypted_note_log_matches_typescript() { + unconstrained fn test_encrypted_note_log_matches_typescript() { // All the values in this test were copied over from `tagged_log.test.ts` let contract_address = AztecAddress::from_field(0x10f48cd9eff7ae5b209c557c70de2e657ee79166868676b787e9417e19260e04); let storage_slot = 0x0fe46be583b71f4ab5b70c2657ff1d05cccf1d292a9369628d1a194f944e6599; @@ -170,25 +173,88 @@ mod test { let _ = OracleMock::mock("getRandomField").returns(eph_sk); let recipient = AztecAddress::from_field(0x10ee41ee4b62703b16f61e03cb0d88c4b306a9eb4a6ceeb2aff13428541689a2); + let num_public_values: u8 = 0; - let log: [u8; 448] = compute_encrypted_note_log( + let log: [u8; 449] = compute_encrypted_note_log( contract_address, storage_slot, ovsk_app, ovpk_m, ivpk_m, recipient, - note + note, + num_public_values ); // The following value was generated by `tagged_log.test.ts` // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data. let encrypted_note_log_from_typescript = [ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 70, 12, 14, 67, 77, 132, 110, 193, 234, 40, 110, 64, 144, 235, 86, 55, 111, 242, 123, 221, 193, 170, 202, 225, 216, 86, 84, 159, 112, 31, 167, 126, 79, 51, 186, 47, 71, 253, 172, 99, 112, 241, 59, 197, 241, 107, 186, 232, 87, 187, 230, 171, 62, 228, 234, 42, 51, 145, 146, 238, 242, 42, 71, 206, 13, 244, 66, 111, 195, 20, 203, 98, 148, 204, 242, 145, 183, 156, 29, 141, 54, 44, 220, 194, 35, 229, 16, 32, 204, 211, 49, 142, 112, 82, 202, 116, 241, 254, 146, 42, 217, 20, 189, 70, 228, 182, 171, 205, 104, 27, 99, 171, 28, 91, 244, 21, 30, 130, 240, 5, 72, 174, 124, 97, 197, 157, 248, 193, 23, 193, 76, 46, 141, 144, 70, 211, 45, 67, 167, 218, 129, 140, 104, 190, 41, 110, 249, 209, 68, 106, 135, 164, 80, 235, 63, 101, 80, 32, 13, 38, 99, 145, 91, 11, 173, 151, 231, 247, 65, 153, 117, 229, 167, 64, 239, 182, 126, 235, 83, 4, 169, 8, 8, 160, 4, 235, 252, 21, 96, 84, 161, 69, 145, 145, 215, 254, 161, 117, 246, 198, 65, 89, 179, 194, 90, 19, 121, 12, 202, 114, 80, 195, 14, 60, 128, 105, 142, 100, 86, 90, 108, 157, 219, 22, 172, 20, 121, 195, 25, 159, 236, 2, 70, 75, 42, 37, 34, 2, 17, 149, 20, 176, 32, 18, 204, 56, 117, 121, 34, 15, 3, 88, 123, 64, 68, 74, 233, 63, 59, 131, 222, 194, 192, 167, 110, 217, 10, 128, 73, 129, 172, 205, 103, 212, 60, 151, 141, 10, 151, 222, 151, 180, 43, 91, 148, 201, 110, 165, 10, 238, 32, 134, 235, 99, 216, 200, 182, 31, 22, 156, 18, 209, 222, 172, 239, 193, 212, 86, 99, 62, 70, 182, 45, 175, 241, 91, 202, 179, 225, 236, 95, 71, 66, 151, 225, 203, 53, 216, 85, 102, 130, 6, 8, 25, 180, 86, 58, 140, 198, 105, 102, 177, 42, 94, 115, 247, 145, 147, 24, 231, 39, 73, 27, 10, 219, 130, 115, 188, 74, 114, 5, 177, 199, 83, 183, 106, 87, 204, 238, 231, 72, 45, 240, 39, 174, 25, 98, 53, 187, 156, 159, 244, 38 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 70, 12, 14, 67, 77, 132, 110, 193, 234, 40, 110, 64, 144, 235, 86, 55, 111, 242, 123, 221, 193, 170, 202, 225, 216, 86, 84, 159, 112, 31, 167, 126, 79, 51, 186, 47, 71, 253, 172, 99, 112, 241, 59, 197, 241, 107, 186, 232, 87, 187, 230, 171, 62, 228, 234, 42, 51, 145, 146, 238, 242, 42, 71, 206, 13, 244, 66, 111, 195, 20, 203, 98, 148, 204, 242, 145, 183, 156, 29, 141, 54, 44, 220, 194, 35, 229, 16, 32, 204, 211, 49, 142, 112, 82, 202, 116, 241, 254, 146, 42, 217, 20, 189, 70, 228, 182, 171, 205, 104, 27, 99, 171, 28, 91, 244, 21, 30, 130, 240, 5, 72, 174, 124, 97, 197, 157, 248, 193, 23, 193, 76, 46, 141, 144, 70, 211, 45, 67, 167, 218, 129, 140, 104, 190, 41, 110, 249, 209, 68, 106, 135, 164, 80, 235, 63, 101, 80, 32, 13, 38, 99, 145, 91, 11, 173, 151, 231, 247, 65, 153, 117, 229, 167, 64, 239, 182, 126, 235, 83, 4, 169, 8, 8, 160, 4, 235, 252, 21, 96, 84, 161, 69, 145, 145, 215, 254, 161, 117, 246, 198, 65, 89, 179, 194, 90, 19, 121, 12, 202, 114, 80, 195, 14, 60, 128, 105, 142, 100, 86, 90, 108, 157, 219, 22, 172, 20, 121, 195, 25, 159, 236, 2, 70, 75, 42, 37, 34, 2, 17, 149, 20, 176, 32, 18, 204, 56, 117, 121, 34, 15, 3, 88, 123, 64, 68, 74, 233, 63, 59, 131, 222, 194, 192, 167, 110, 217, 10, 128, 73, 129, 172, 205, 103, 212, 60, 151, 141, 10, 151, 222, 151, 180, 43, 91, 148, 201, 110, 165, 10, 238, 32, 134, 235, 99, 216, 200, 182, 31, 22, 156, 18, 209, 222, 172, 239, 193, 212, 86, 99, 62, 70, 182, 45, 175, 241, 91, 202, 179, 225, 236, 95, 71, 66, 151, 225, 203, 53, 216, 85, 102, 130, 6, 8, 25, 180, 86, 58, 140, 198, 105, 102, 177, 42, 94, 115, 247, 145, 147, 24, 231, 39, 73, 27, 10, 219, 130, 115, 188, 74, 114, 5, 177, 199, 83, 183, 106, 87, 204, 238, 231, 72, 45, 240, 39, 174, 25, 98, 53, 187, 156, 159, 244, 38 ]; - for i in 0..encrypted_note_log_from_typescript.len() { - assert_eq(log[i], encrypted_note_log_from_typescript[i]); + assert_eq(encrypted_note_log_from_typescript, log); + } + + #[test] + unconstrained fn test_encrypted_note_log_of_finalized_partial_note_matches_typescript() { + // All the values in this test were copied over from `tagged_log.test.ts` + let contract_address = AztecAddress::from_field(0x10f48cd9eff7ae5b209c557c70de2e657ee79166868676b787e9417e19260e04); + let storage_slot = 0x0fe46be583b71f4ab5b70c2657ff1d05cccf1d292a9369628d1a194f944e6599; + let ovsk_app = 0x03a6513d6def49f41d20373d2cec894c23e7492794b08fc50c0e8a1bd2512612; + let ovpk_m = OvpkM { + inner: Point { + x: 0x1961448682803198631f299340e4206bb12809d4bebbf012b30f59af73ba1a15, + y: 0x133674060c3925142aceb4f1dcd9f9137d0217d37ff8729ee5ceaa6e2790353d, + is_infinite: false + } + }; + let ivpk_m = IvpkM { + inner: Point { + x: 0x260cd3904f6df16e974c29944fdc839e40fb5cf293f03df2eb370851d3a527bc, + y: 0x0eef2964fe6640e84c82b5d2915892409b38e9e25d39f68dd79edb725c55387f, + is_infinite: false + } + }; + + let note_value = 0x301640ceea758391b2e161c92c0513f129020f4125256afdae2646ce31099f5c; + let note_public_value1 = 0x14172339287e8d281545c177313f02b6aa2fedfd628cfd8b7f11a136fd0d6557; + let note_public_value2 = 0x0834d81e3f73c7e2809b08ae38600ffc76a2554473eeab6de7bff4b33a84feac; + let note = MockNoteBuilder::new(note_value).contract_address(contract_address).storage_slot(storage_slot).build(); + + let eph_sk = 0x1358d15019d4639393d62b97e1588c095957ce74a1c32d6ec7d62fe6705d9538; + let _ = OracleMock::mock("getRandomField").returns(eph_sk); + + let recipient = AztecAddress::from_field(0x10ee41ee4b62703b16f61e03cb0d88c4b306a9eb4a6ceeb2aff13428541689a2); + let num_public_values: u8 = 2; + + // First we compute the encrypted log without the public values + let log_without_public_values: [u8; 449] = compute_encrypted_note_log( + contract_address, + storage_slot, + ovsk_app, + ovpk_m, + ivpk_m, + recipient, + note, + num_public_values + ); + + // Then we "append" the public values to the log by copying both the original log and the current log into a new byte array + let mut log: [u8; 513] = [0; 513]; + for i in 0..449 { + log[i] = log_without_public_values[i]; + } + let note_public_value1_bytes: [u8; 32] = note_public_value1.to_be_bytes(); + let note_public_value2_bytes: [u8; 32] = note_public_value2.to_be_bytes(); + for i in 0..32 { + log[449 + i] = note_public_value1_bytes[i]; + log[481 + i] = note_public_value2_bytes[i]; } - assert_eq(encrypted_note_log_from_typescript.len(), log.len()); + + // The following value was generated by `tagged_log.test.ts` + // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data. + let encrypted_note_log_of_finalized_partial_from_typescript = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 141, 70, 12, 14, 67, 77, 132, 110, 193, 234, 40, 110, 64, 144, 235, 86, 55, 111, 242, 123, 221, 193, 170, 202, 225, 216, 86, 84, 159, 112, 31, 167, 126, 79, 51, 186, 47, 71, 253, 172, 99, 112, 241, 59, 197, 241, 107, 186, 232, 87, 187, 230, 171, 62, 228, 234, 42, 51, 145, 146, 238, 242, 42, 71, 206, 13, 244, 66, 111, 195, 20, 203, 98, 148, 204, 242, 145, 183, 156, 29, 141, 54, 44, 220, 194, 35, 229, 16, 32, 204, 211, 49, 142, 112, 82, 202, 116, 241, 254, 146, 42, 217, 20, 189, 70, 228, 182, 171, 205, 104, 27, 99, 171, 28, 91, 244, 21, 30, 130, 240, 5, 72, 174, 124, 97, 197, 157, 248, 193, 23, 193, 76, 46, 141, 144, 70, 211, 45, 67, 167, 218, 129, 140, 104, 190, 41, 110, 249, 209, 68, 106, 135, 164, 80, 235, 63, 101, 80, 32, 13, 38, 99, 145, 91, 11, 173, 151, 231, 247, 65, 153, 117, 229, 167, 64, 239, 182, 126, 235, 83, 4, 169, 8, 8, 160, 4, 235, 252, 21, 96, 84, 161, 69, 145, 145, 215, 254, 161, 117, 246, 198, 65, 89, 179, 194, 90, 19, 121, 12, 202, 114, 80, 195, 14, 60, 128, 105, 142, 100, 86, 90, 108, 157, 219, 22, 172, 20, 121, 195, 25, 159, 236, 2, 70, 75, 42, 37, 34, 2, 17, 149, 20, 176, 32, 18, 204, 56, 117, 121, 34, 15, 3, 88, 123, 64, 68, 74, 233, 63, 59, 131, 222, 194, 192, 167, 110, 217, 10, 128, 73, 129, 172, 205, 103, 212, 60, 151, 141, 10, 151, 222, 151, 180, 43, 91, 148, 201, 110, 165, 10, 238, 32, 134, 235, 99, 216, 200, 182, 31, 22, 156, 18, 209, 222, 172, 239, 193, 212, 86, 99, 62, 70, 182, 45, 175, 241, 91, 202, 179, 225, 236, 95, 71, 66, 151, 225, 203, 53, 216, 85, 102, 130, 6, 8, 25, 180, 86, 58, 140, 198, 105, 102, 177, 42, 94, 115, 247, 145, 147, 24, 231, 39, 73, 27, 10, 219, 130, 115, 188, 74, 114, 5, 177, 199, 83, 183, 106, 87, 204, 238, 231, 72, 45, 240, 39, 174, 25, 98, 53, 187, 156, 159, 244, 38, 20, 23, 35, 57, 40, 126, 141, 40, 21, 69, 193, 119, 49, 63, 2, 182, 170, 47, 237, 253, 98, 140, 253, 139, 127, 17, 161, 54, 253, 13, 101, 87, 8, 52, 216, 30, 63, 115, 199, 226, 128, 155, 8, 174, 56, 96, 15, 252, 118, 162, 85, 68, 115, 238, 171, 109, 231, 191, 244, 179, 58, 132, 254, 172 + ]; + assert_eq(encrypted_note_log_of_finalized_partial_from_typescript, log); } } diff --git a/noir-projects/aztec-nr/aztec/src/event/event_interface.nr b/noir-projects/aztec-nr/aztec/src/event/event_interface.nr index 58a7ea2ba79..08498f1373d 100644 --- a/noir-projects/aztec-nr/aztec/src/event/event_interface.nr +++ b/noir-projects/aztec-nr/aztec/src/event/event_interface.nr @@ -1,8 +1,8 @@ use dep::protocol_types::abis::event_selector::EventSelector; -trait EventInterface { - fn private_to_be_bytes(self, randomness: Field) -> [u8; NB]; - fn to_be_bytes(self) -> [u8; MB]; +pub trait EventInterface { + fn private_to_be_bytes(self, randomness: Field) -> [u8; N * 32 + 64]; + fn to_be_bytes(self) -> [u8; N * 32 + 32]; fn get_event_type_id() -> EventSelector; fn emit(self, _emit: fn[Env](Self) -> ()); } diff --git a/noir-projects/aztec-nr/aztec/src/generators.nr b/noir-projects/aztec-nr/aztec/src/generators.nr index d6318f2bec9..03b9df31273 100644 --- a/noir-projects/aztec-nr/aztec/src/generators.nr +++ b/noir-projects/aztec-nr/aztec/src/generators.nr @@ -4,20 +4,24 @@ use dep::protocol_types::point::Point; global Ga1 = Point { x: 0x30426e64aee30e998c13c8ceecda3a77807dbead52bc2f3bf0eae851b4b710c1, y: 0x113156a068f603023240c96b4da5474667db3b8711c521c748212a15bc034ea6, is_infinite: false }; global Ga2 = Point { x: 0x2825c79cc6a5cbbeef7d6a8f1b6a12b312aa338440aefeb4396148c89147c049, y: 0x129bfd1da54b7062d6b544e7e36b90736350f6fba01228c41c72099509f5701e, is_infinite: false }; global Ga3 = Point { x: 0x0edb1e293c3ce91bfc04e3ceaa50d2c541fa9d091c72eb403efb1cfa2cb3357f, y: 0x1341d675fa030ece3113ad53ca34fd13b19b6e9762046734f414824c4d6ade35, is_infinite: false }; +global Ga4 = Point { x: 0x0e0dad2250583f2a9f0acb04ededf1701b85b0393cae753fe7e14b88af81cb52, y: 0x0973b02c5caac339ee4ad5dab51329920f7bf1b6a07e1dabe5df67040b300962, is_infinite: false }; +global Ga5 = Point { x: 0x2f3342e900e8c488a28931aae68970738fdc68afde2910de7b320c00c902087d, y: 0x1bf958dc63cb09d59230603a0269ae86d6f92494da244910351f1132df20fc08, is_infinite: false }; // If you change this update `G_SLOT` in `yarn-project/simulator/src/client/test_utils.ts` as well global G_slot = Point { x: 0x041223147b680850dc82e8a55a952d4df20256fe0593d949a9541ca00f0abf15, y: 0x0a8c72e60d0e60f5d804549d48f3044d06140b98ed717a9b532af630c1530791, is_infinite: false }; mod test { - use crate::generators::{Ga1, Ga2, Ga3, G_slot}; + use crate::generators::{Ga1, Ga2, Ga3, Ga4, Ga5, G_slot}; use dep::protocol_types::point::Point; use std::hash::derive_generators; #[test] - fn test_generators() { - let generators: [Point; 4] = derive_generators("aztec_nr_generators".as_bytes(), 0); + unconstrained fn test_generators() { + let generators: [Point; 6] = derive_generators("aztec_nr_generators".as_bytes(), 0); assert_eq(generators[0], Ga1); assert_eq(generators[1], Ga2); assert_eq(generators[2], Ga3); + assert_eq(generators[4], Ga4); + assert_eq(generators[5], Ga5); assert_eq(generators[3], G_slot); } } diff --git a/noir-projects/aztec-nr/aztec/src/hash.nr b/noir-projects/aztec-nr/aztec/src/hash.nr index 3a66e2ca643..490cc13bbfd 100644 --- a/noir-projects/aztec-nr/aztec/src/hash.nr +++ b/noir-projects/aztec-nr/aztec/src/hash.nr @@ -1,10 +1,8 @@ use dep::protocol_types::{ address::{AztecAddress, EthAddress}, - constants::{ - GENERATOR_INDEX__SECRET_HASH, GENERATOR_INDEX__MESSAGE_NULLIFIER, ARGS_HASH_CHUNK_COUNT, - GENERATOR_INDEX__FUNCTION_ARGS, ARGS_HASH_CHUNK_LENGTH, MAX_ARGS_LENGTH -}, - point::Point, traits::Hash, hash::{sha256_to_field, poseidon2_hash_with_separator} + constants::{GENERATOR_INDEX__SECRET_HASH, GENERATOR_INDEX__MESSAGE_NULLIFIER, GENERATOR_INDEX__FUNCTION_ARGS}, + point::Point, traits::Hash, + hash::{sha256_to_field, poseidon2_hash_with_separator, poseidon2_hash_with_separator_slice} }; use crate::oracle::logs_traits::ToBytesForUnencryptedLog; @@ -79,7 +77,7 @@ pub fn compute_message_nullifier(message_hash: Field, secret: Field, leaf_index: ) } -struct ArgsHasher { +pub struct ArgsHasher { fields: [Field], } @@ -106,48 +104,34 @@ impl ArgsHasher { } pub fn hash_args_array(args: [Field; N]) -> Field { - hash_args(args.as_slice()) + if args.len() == 0 { + 0 + } else { + poseidon2_hash_with_separator(args, GENERATOR_INDEX__FUNCTION_ARGS) + } } pub fn hash_args(args: [Field]) -> Field { if args.len() == 0 { 0 } else { - assert(args.len() <= MAX_ARGS_LENGTH, "Args length exceeds maximum"); - let mut chunks_hashes = [0; ARGS_HASH_CHUNK_COUNT]; - let mut current_chunk_values = [0; ARGS_HASH_CHUNK_LENGTH]; - - let mut current_chunk_index = 0; - let mut index_inside_current_chunk = 0; - for i in 0..args.len() { - current_chunk_values[index_inside_current_chunk] = args[i]; - index_inside_current_chunk+=1; - if index_inside_current_chunk == ARGS_HASH_CHUNK_LENGTH { - chunks_hashes[current_chunk_index] = poseidon2_hash_with_separator(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS); - current_chunk_values = [0; ARGS_HASH_CHUNK_LENGTH]; - current_chunk_index+=1; - index_inside_current_chunk = 0; - } - } - if index_inside_current_chunk > 0 { - chunks_hashes[current_chunk_index] = poseidon2_hash_with_separator(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS); - } - poseidon2_hash_with_separator(chunks_hashes, GENERATOR_INDEX__FUNCTION_ARGS) + poseidon2_hash_with_separator_slice(args, GENERATOR_INDEX__FUNCTION_ARGS) } } #[test] -fn compute_var_args_hash() { +unconstrained fn compute_var_args_hash() { let mut input = ArgsHasher::new(); - for i in 0..MAX_ARGS_LENGTH { + for i in 0..100 { input.add(i as Field); } let hash = input.hash(); - assert(hash == 0x1cce4dbf69f14c44865919991ee1057922e34d7310ba237d71759aa422621ca9); + dep::std::println(hash); + assert(hash == 0x19b0d74feb06ebde19edd85a28986c97063e84b3b351a8b666c7cac963ce655f); } #[test] -fn compute_unenc_log_hash_array() { +unconstrained fn compute_unenc_log_hash_array() { let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6); let log = [ 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2, @@ -161,7 +145,7 @@ fn compute_unenc_log_hash_array() { } #[test] -fn compute_unenc_log_hash_addr() { +unconstrained fn compute_unenc_log_hash_addr() { let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6); let log = AztecAddress::from_field(0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303); let hash = compute_unencrypted_log_hash(contract_address, log); @@ -169,7 +153,7 @@ fn compute_unenc_log_hash_addr() { } #[test] -fn compute_unenc_log_hash_str() { +unconstrained fn compute_unenc_log_hash_str() { let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8); let log = "dummy"; let hash = compute_unencrypted_log_hash(contract_address, log); @@ -177,7 +161,7 @@ fn compute_unenc_log_hash_str() { } #[test] -fn compute_unenc_log_hash_longer_str() { +unconstrained fn compute_unenc_log_hash_longer_str() { let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8); let log = "Hello this is a string"; let hash = compute_unencrypted_log_hash(contract_address, log); diff --git a/noir-projects/aztec-nr/aztec/src/history/note_inclusion.nr b/noir-projects/aztec-nr/aztec/src/history/note_inclusion.nr index 6dc078e986b..4e245febc9f 100644 --- a/noir-projects/aztec-nr/aztec/src/history/note_inclusion.nr +++ b/noir-projects/aztec-nr/aztec/src/history/note_inclusion.nr @@ -2,16 +2,19 @@ use dep::protocol_types::merkle_tree::root::root_from_sibling_path; use dep::protocol_types::header::Header; use crate::{ - note::{utils::compute_note_hash_for_nullify, note_interface::NoteInterface}, + note::{utils::compute_note_hash_for_nullify, note_interface::{NoteInterface, NullifiableNote}}, oracle::get_membership_witness::get_note_hash_membership_witness }; trait ProveNoteInclusion { - fn prove_note_inclusion(header: Header, note: Note) where Note: NoteInterface; + fn prove_note_inclusion(header: Header, note: Note) where Note: NoteInterface + NullifiableNote; } impl ProveNoteInclusion for Header { - fn prove_note_inclusion(self, note: Note) where Note: NoteInterface { + fn prove_note_inclusion( + self, + note: Note + ) where Note: NoteInterface + NullifiableNote { let note_hash = compute_note_hash_for_nullify(note); let witness = unsafe { diff --git a/noir-projects/aztec-nr/aztec/src/history/note_validity.nr b/noir-projects/aztec-nr/aztec/src/history/note_validity.nr index 8fa98581b90..eba2cfc2d05 100644 --- a/noir-projects/aztec-nr/aztec/src/history/note_validity.nr +++ b/noir-projects/aztec-nr/aztec/src/history/note_validity.nr @@ -1,17 +1,17 @@ -use crate::{context::PrivateContext, note::note_interface::NoteInterface}; +use crate::{context::PrivateContext, note::note_interface::{NoteInterface, NullifiableNote}}; use dep::protocol_types::header::Header; trait ProveNoteValidity { - fn prove_note_validity(header: Header, note: Note, context: &mut PrivateContext) where Note: NoteInterface; + fn prove_note_validity(header: Header, note: Note, context: &mut PrivateContext) where Note: NoteInterface + NullifiableNote; } impl ProveNoteValidity for Header { - fn prove_note_validity( + fn prove_note_validity( self, note: Note, context: &mut PrivateContext - ) where Note: NoteInterface { + ) where Note: NoteInterface + NullifiableNote { self.prove_note_inclusion(note); self.prove_note_not_nullified(note, context); } diff --git a/noir-projects/aztec-nr/aztec/src/history/nullifier_inclusion.nr b/noir-projects/aztec-nr/aztec/src/history/nullifier_inclusion.nr index fb67a6bf885..81aee809ebc 100644 --- a/noir-projects/aztec-nr/aztec/src/history/nullifier_inclusion.nr +++ b/noir-projects/aztec-nr/aztec/src/history/nullifier_inclusion.nr @@ -3,7 +3,7 @@ use dep::protocol_types::header::Header; use crate::{ context::PrivateContext, oracle::get_nullifier_membership_witness::get_nullifier_membership_witness, - note::{utils::compute_siloed_nullifier, note_interface::NoteInterface} + note::{utils::compute_siloed_nullifier, note_interface::{NoteInterface, NullifiableNote}} }; trait ProveNullifierInclusion { @@ -32,16 +32,16 @@ impl ProveNullifierInclusion for Header { } trait ProveNoteIsNullified { - fn prove_note_is_nullified(header: Header, note: Note, context: &mut PrivateContext) where Note: NoteInterface; + fn prove_note_is_nullified(header: Header, note: Note, context: &mut PrivateContext) where Note: NoteInterface + NullifiableNote; } impl ProveNoteIsNullified for Header { // docs:start:prove_note_is_nullified - fn prove_note_is_nullified( + fn prove_note_is_nullified( self, note: Note, context: &mut PrivateContext - ) where Note: NoteInterface { + ) where Note: NoteInterface + NullifiableNote { let nullifier = compute_siloed_nullifier(note, context); self.prove_nullifier_inclusion(nullifier); diff --git a/noir-projects/aztec-nr/aztec/src/history/nullifier_non_inclusion.nr b/noir-projects/aztec-nr/aztec/src/history/nullifier_non_inclusion.nr index c70689473e5..977a5477547 100644 --- a/noir-projects/aztec-nr/aztec/src/history/nullifier_non_inclusion.nr +++ b/noir-projects/aztec-nr/aztec/src/history/nullifier_non_inclusion.nr @@ -1,7 +1,8 @@ use dep::protocol_types::merkle_tree::root::root_from_sibling_path; use dep::protocol_types::{header::Header, utils::field::{full_field_less_than, full_field_greater_than}}; use crate::{ - context::PrivateContext, note::{utils::compute_siloed_nullifier, note_interface::NoteInterface}, + context::PrivateContext, + note::{utils::compute_siloed_nullifier, note_interface::{NoteInterface, NullifiableNote}}, oracle::get_nullifier_membership_witness::get_low_nullifier_membership_witness }; @@ -41,16 +42,16 @@ impl ProveNullifierNonInclusion for Header { } trait ProveNoteNotNullified { - fn prove_note_not_nullified(header: Header, note: Note, context: &mut PrivateContext) where Note: NoteInterface; + fn prove_note_not_nullified(header: Header, note: Note, context: &mut PrivateContext) where Note: NoteInterface + NullifiableNote; } impl ProveNoteNotNullified for Header { // docs:start:prove_note_not_nullified - fn prove_note_not_nullified( + fn prove_note_not_nullified( self, note: Note, context: &mut PrivateContext - ) where Note: NoteInterface { + ) where Note: NoteInterface + NullifiableNote { let nullifier = compute_siloed_nullifier(note, context); self.prove_nullifier_non_inclusion(nullifier); diff --git a/noir-projects/aztec-nr/aztec/src/keys/getters/mod.nr b/noir-projects/aztec-nr/aztec/src/keys/getters/mod.nr index 55ec09951ab..06af9e34374 100644 --- a/noir-projects/aztec-nr/aztec/src/keys/getters/mod.nr +++ b/noir-projects/aztec-nr/aztec/src/keys/getters/mod.nr @@ -1,105 +1,32 @@ -use dep::protocol_types::{ - header::Header, address::AztecAddress, constants::CANONICAL_KEY_REGISTRY_ADDRESS, - storage::map::derive_storage_slot_in_map -}; +use dep::protocol_types::address::AztecAddress; use crate::{ - context::{PrivateContext, UnconstrainedContext}, oracle::{keys::get_public_keys_and_partial_address, key_validation_request::get_key_validation_request}, - keys::{public_keys::{PublicKeys, PUBLIC_KEYS_LENGTH}, stored_keys::StoredKeys, constants::NULLIFIER_INDEX}, - state_vars::{public_mutable::PublicMutable, map::Map} + keys::{public_keys::PublicKeys, constants::{NULLIFIER_INDEX, OUTGOING_INDEX}} }; mod test; -// This is the number of blocks that must pass after a key rotation event until the old keys are fully phased out and -// become invalid. -global KEY_REGISTRY_UPDATE_BLOCKS = 5; - -global KEY_REGISTRY_STORAGE_SLOT = 1; - unconstrained pub fn get_nsk_app(npk_m_hash: Field) -> Field { get_key_validation_request(npk_m_hash, NULLIFIER_INDEX).sk_app } -// Returns all current public keys for a given account, applying proper constraints to the context. We read all -// keys at once since the constraints for reading them all are actually fewer than if we read them one at a time - any -// read keys that are not required by the caller can simply be discarded. -pub fn get_current_public_keys(context: &mut PrivateContext, account: AztecAddress) -> PublicKeys { - // We're going to perform historical reads from public storage, and so need to constrain the caller so that they - // cannot use very old blocks when constructing proofs, and hence e.g. read very old keys. We are lax and allow - // _any_ recent block number to be used, regardless of whether there may have been a recent key rotation. This means - // that multiple sets of keys are valid for a while immediately after rotation, until the old keys become phased - // out. We *must* be lax to prevent denial of service and transaction fingerprinting attacks by accounts that rotate - // their keys frequently. - // Note that we constrain the max block number even if the registry ends up being empty: this ensures that proof of - // an empty registry is also fresh. - let current_header = context.get_header(); - context.set_tx_max_block_number(current_header.global_variables.block_number as u32 + KEY_REGISTRY_UPDATE_BLOCKS); - - get_historical_public_keys(current_header, account) +// A helper function that gets app-siloed outgoing viewing key for a given `ovpk_m_hash`. This function is used +// in unconstrained contexts only - when computing unconstrained note logs. The safe alternative is `request_ovsk_app` +// function defined on `PrivateContext`. +unconstrained pub fn get_ovsk_app(ovpk_m_hash: Field) -> Field { + get_key_validation_request(ovpk_m_hash, OUTGOING_INDEX).sk_app } -// Returns historical public keys for a given account at some block determined by a block header. We read all keys at -// once since the constraints for reading them all are actually fewer than if we read them one at a time - any read keys -// that are not required by the caller can simply be discarded. -// WARNING: if called with a historical header created from a fixed block this function will explicitly ignore key -// rotation! This means that callers of this may force a user to use old keys, potentially leaking privacy (e.g. if the -// old keys were leaked). Only call this function with a header from a fixed block if you understand the implications of -// breaking key rotation very well. -pub fn get_historical_public_keys(historical_header: Header, account: AztecAddress) -> PublicKeys { - // TODO: improve this so that we always hint the correct set of keys (either registry or canonical) and hash them - // once instead of having two different hints and twice as many constraints due to the double hashing. - - // The key registry is the primary source of information for keys, as that's where accounts store their new keys - // when they perform rotation. The key registry conveniently stores a hash of each user's keys, so we can read that - // single field and then prove that we know its preimage (i.e. the current set of keys). - let key_registry_hash = key_registry_hash_public_historical_read(historical_header, account); - if key_registry_hash != 0 { - let hinted_registry_public_keys = key_registry_get_stored_keys_hint( - account, - historical_header.global_variables.block_number as u32 - ); - assert_eq(hinted_registry_public_keys.hash().to_field(), key_registry_hash); - - hinted_registry_public_keys - } else { - // If nothing was written to the registry, we may still be able to produce the correct keys if we happen to know - // the canonical set (i.e. the ones that are part of the account's preimage). - let (hinted_canonical_public_keys, partial_address) = get_public_keys_and_partial_address(account); - assert_eq( - account, AztecAddress::compute(hinted_canonical_public_keys.hash(), partial_address), "Invalid public keys hint for address" - ); - - hinted_canonical_public_keys - } -} - -fn key_registry_hash_public_historical_read(historical_header: Header, account: AztecAddress) -> Field { - // The keys are stored in a Map that is keyed with the address of each account, so we first derive the corresponding - // slot for this account. - let keys_storage_slot = derive_storage_slot_in_map(KEY_REGISTRY_STORAGE_SLOT, account); - - // The keys are stored as [ ...serialized_keys, hash ], and since arrays get allocated sequential storage slots - // (prior to siloing!), we simply add the length to the base slot to get the last element. - let hash_storage_slot = keys_storage_slot + PUBLIC_KEYS_LENGTH as Field; - - historical_header.public_storage_historical_read(hash_storage_slot, CANONICAL_KEY_REGISTRY_ADDRESS) -} - -unconstrained fn key_registry_get_stored_keys_hint(account: AztecAddress, block_number: u32) -> PublicKeys { - // This is equivalent to the key registry contract having an unconstrained getter that we call from an oracle, but - // PXE does not yet support that functionality so we do this manually instad. Note that this would be a *historical* - // call! - - // TODO (#7524): call the unconstrained KeyRegistry.get_current_keys() function instead - - let context = UnconstrainedContext::at_historical(CANONICAL_KEY_REGISTRY_ADDRESS, block_number); - let keys_storage = Map::new( - context, - KEY_REGISTRY_STORAGE_SLOT, - |context, slot| { PublicMutable::new(context, slot) } +// Returns all public keys for a given account, applying proper constraints to the context. We read all +// keys at once since the constraints for reading them all are actually fewer than if we read them one at a time - any +// read keys that are not required by the caller can simply be discarded. +pub fn get_public_keys(account: AztecAddress) -> PublicKeys { + let (hinted_canonical_public_keys, partial_address) = unsafe { + get_public_keys_and_partial_address(account) + }; + assert_eq( + account, AztecAddress::compute(hinted_canonical_public_keys.hash(), partial_address), "Invalid public keys hint for address" ); - let stored_keys: StoredKeys = keys_storage.at(account).read(); - stored_keys.public_keys + hinted_canonical_public_keys } diff --git a/noir-projects/aztec-nr/aztec/src/keys/getters/test.nr b/noir-projects/aztec-nr/aztec/src/keys/getters/test.nr index d83594e04f0..273e370658f 100644 --- a/noir-projects/aztec-nr/aztec/src/keys/getters/test.nr +++ b/noir-projects/aztec-nr/aztec/src/keys/getters/test.nr @@ -1,57 +1,30 @@ -use crate::keys::getters::{get_current_public_keys, get_historical_public_keys, KEY_REGISTRY_UPDATE_BLOCKS}; -use crate::context::PrivateContext; +use crate::keys::getters::get_public_keys; use crate::test::helpers::{cheatcodes, test_environment::TestEnvironment, utils::TestAccount}; use dep::std::test::OracleMock; global KEY_ORACLE_RESPONSE_LENGTH = 13; // 12 fields for the keys, one field for the partial address -fn setup() -> (TestEnvironment, PrivateContext, TestAccount) { - let mut env = TestEnvironment::new(); +unconstrained fn setup() -> TestAccount { + let _ = TestEnvironment::new(); let account = cheatcodes::create_account(); - let historical_block_number = env.block_number(); - let context = env.private_at(historical_block_number); - - (env, context, account) -} - -#[test(should_fail_with="Invalid public keys hint for address")] -fn test_get_current_keys_unknown_unregistered() { - let (_, context, account) = setup(); - - let _ = OracleMock::mock("getPublicKeysAndPartialAddress").returns([0; KEY_ORACLE_RESPONSE_LENGTH]).times(1); - let _ = get_current_public_keys(&mut context, account.address); + account } #[test(should_fail_with="Invalid public keys hint for address")] -fn test_get_historical_keys_unknown_unregistered() { - let (_, context, account) = setup(); - let historical_header = context.get_header(); +unconstrained fn test_get_public_keys_unknown() { + let account = setup(); + // Instead of querying for some unknown account, which would result in the oracle erroring out, we mock a bad oracle + // response to check that the circuit properly checks the address derivation. let _ = OracleMock::mock("getPublicKeysAndPartialAddress").returns([0; KEY_ORACLE_RESPONSE_LENGTH]).times(1); - let _ = get_historical_public_keys(historical_header, account.address); + let _ = get_public_keys(account.address); } #[test] -fn test_get_current_keys_known_unregistered() { - let (_, mut context, account) = setup(); - - let current_keys = get_current_public_keys(&mut context, account.address); - - assert_eq(current_keys, account.keys); - assert_eq( - context.max_block_number.unwrap(), context.historical_header.global_variables.block_number as u32 + KEY_REGISTRY_UPDATE_BLOCKS - ); -} - -#[test] -fn test_get_historical_keys_known_unregistered() { - let (_, context, account) = setup(); - - let historical_header = context.get_header(); +unconstrained fn test_get_public_keys_known() { + let account = setup(); - let historical_keys = get_historical_public_keys(historical_header, account.address); - assert_eq(historical_keys, account.keys); - assert(context.max_block_number.is_none()); + assert_eq(get_public_keys(account.address), account.keys); } diff --git a/noir-projects/aztec-nr/aztec/src/keys/mod.nr b/noir-projects/aztec-nr/aztec/src/keys/mod.nr index 12ee77b56f5..828ff12a0ec 100644 --- a/noir-projects/aztec-nr/aztec/src/keys/mod.nr +++ b/noir-projects/aztec-nr/aztec/src/keys/mod.nr @@ -2,6 +2,5 @@ mod constants; mod getters; mod point_to_symmetric_key; mod public_keys; -mod stored_keys; pub use crate::keys::public_keys::{PublicKeys, PUBLIC_KEYS_LENGTH}; diff --git a/noir-projects/aztec-nr/aztec/src/keys/point_to_symmetric_key.nr b/noir-projects/aztec-nr/aztec/src/keys/point_to_symmetric_key.nr index fc27829d578..b6af664ea91 100644 --- a/noir-projects/aztec-nr/aztec/src/keys/point_to_symmetric_key.nr +++ b/noir-projects/aztec-nr/aztec/src/keys/point_to_symmetric_key.nr @@ -14,7 +14,7 @@ pub fn point_to_symmetric_key(secret: Scalar, point: Point) -> [u8; 32] { } #[test] -fn test_point_to_symmetric_key_matches_noir() { +unconstrained fn test_point_to_symmetric_key_matches_noir() { // Value taken from "derive shared secret" test in encrypt_buffer.test.ts let secret = Scalar { lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd, diff --git a/noir-projects/aztec-nr/aztec/src/keys/public_keys.nr b/noir-projects/aztec-nr/aztec/src/keys/public_keys.nr index c4114e030b5..ae684061f8b 100644 --- a/noir-projects/aztec-nr/aztec/src/keys/public_keys.nr +++ b/noir-projects/aztec-nr/aztec/src/keys/public_keys.nr @@ -6,18 +6,18 @@ use dep::protocol_types::{ global PUBLIC_KEYS_LENGTH: u32 = 12; -struct PublicKeys { +pub struct PublicKeys { npk_m: NpkM, ivpk_m: IvpkM, ovpk_m: OvpkM, tpk_m: TpkM, } -trait ToPoint { +pub trait ToPoint { fn to_point(self) -> Point; } -struct NpkM { +pub struct NpkM { inner: Point } @@ -40,7 +40,7 @@ impl Hash for NpkM { } } -struct IvpkM { +pub struct IvpkM { inner: Point } @@ -56,7 +56,7 @@ impl Serialize for IvpkM { } } -struct OvpkM { +pub struct OvpkM { inner: Point } @@ -78,7 +78,7 @@ impl Serialize for OvpkM { } } -struct TpkM { +pub struct TpkM { inner: Point } @@ -151,7 +151,7 @@ impl Deserialize for PublicKeys { } #[test] -fn compute_public_keys_hash() { +unconstrained fn compute_public_keys_hash() { let keys = PublicKeys { npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } }, ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } }, @@ -166,7 +166,7 @@ fn compute_public_keys_hash() { } #[test] -fn compute_empty_hash() { +unconstrained fn compute_empty_hash() { let keys = PublicKeys::empty(); let actual = keys.hash(); @@ -176,7 +176,7 @@ fn compute_empty_hash() { } #[test] -fn test_public_keys_serialization() { +unconstrained fn test_public_keys_serialization() { let keys = PublicKeys { npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } }, ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } }, diff --git a/noir-projects/aztec-nr/aztec/src/keys/stored_keys.nr b/noir-projects/aztec-nr/aztec/src/keys/stored_keys.nr deleted file mode 100644 index 20111f6e795..00000000000 --- a/noir-projects/aztec-nr/aztec/src/keys/stored_keys.nr +++ /dev/null @@ -1,59 +0,0 @@ -use crate::keys::public_keys::{PublicKeys, PUBLIC_KEYS_LENGTH}; -use dep::protocol_types::traits::{Serialize, Deserialize}; - -// This struct represents how public keys are stored in the key registry. We store not just the keys themselves but also -// their hash, so that when reading in private we can perform a historical read for the hash and then show that it -// corresponds to a preimage obtained from an unconstrained hint. We do store the keys keys regardless as they might be -// needed during public execution, and since we need to broadcast and produce hints in some standardized way. -// While it might seem odd to create a struct for what is effectively some data and a pure function called on it, state -// variables rely on serializable structs in order to persist data to storage, so we must use this abstraction. -struct StoredKeys { - public_keys: PublicKeys, - hash: Field, -} - -impl StoredKeys { - // Instances of StoredKeys are expected to only be created by calling this function so that we guarantee that the - // hash field does indeed correspond to the hash of the keys. Ideally we'd forbid direct access to the struct, but - // Noir doesn't yet support private members. - fn new(public_keys: PublicKeys) -> Self { - Self { public_keys, hash: public_keys.hash().inner } - } -} - -// Our serialization is the concatenation of the public keys serialization plush the hash, so we need one extra field. -global STORED_KEYS_LENGTH: u32 = PUBLIC_KEYS_LENGTH + 1; - -impl Serialize for StoredKeys { - fn serialize(self) -> [Field; STORED_KEYS_LENGTH] { - // The code below is equivalent to: - // [ ...self.public_keys.serialize(), self.hash ] - - let mut array = [0; STORED_KEYS_LENGTH]; - - let serialized_keys = self.public_keys.serialize(); - for i in 0..serialized_keys.len() { - array[i] = serialized_keys[i]; - } - - array[PUBLIC_KEYS_LENGTH] = self.hash; - - array - } -} - -impl Deserialize for StoredKeys { - fn deserialize(array: [Field; STORED_KEYS_LENGTH]) -> Self { - // The code below is equivalent to: - // Self { public_keys: PublicKeys::deserialize(array[0 : PUBLIC_KEYS_LENGTH]), hash: array[PUBLIC_KEYS_LENGTH] } - - let mut serialized_keys = [0; PUBLIC_KEYS_LENGTH]; - for i in 0..serialized_keys.len() { - serialized_keys[i] = array[i]; - } - - let hash = array[PUBLIC_KEYS_LENGTH]; - - Self { public_keys: PublicKeys::deserialize(serialized_keys), hash } - } -} diff --git a/noir-projects/aztec-nr/aztec/src/lib.nr b/noir-projects/aztec-nr/aztec/src/lib.nr index b699ecd2652..beb2d4b81dc 100644 --- a/noir-projects/aztec-nr/aztec/src/lib.nr +++ b/noir-projects/aztec-nr/aztec/src/lib.nr @@ -15,5 +15,6 @@ mod encrypted_logs; mod unencrypted_logs; pub use dep::protocol_types; mod utils; +mod macros; mod test; diff --git a/noir-projects/aztec-nr/aztec/src/macros/events/mod.nr b/noir-projects/aztec-nr/aztec/src/macros/events/mod.nr new file mode 100644 index 00000000000..be9e588cb90 --- /dev/null +++ b/noir-projects/aztec-nr/aztec/src/macros/events/mod.nr @@ -0,0 +1,76 @@ +use protocol_types::meta::flatten_to_fields; +use super::utils::compute_event_selector; + +comptime fn generate_event_interface(s: StructDefinition) -> Quoted { + let name = s.name(); + let typ = s.as_type(); + let (fields, _) = flatten_to_fields(quote { self }, typ, &[quote {self.header}]); + let content_len = fields.len(); + + let event_type_id = compute_event_selector(s); + + quote { + impl aztec::event::event_interface::EventInterface<$content_len> for $name { + + fn private_to_be_bytes(self, randomness: Field) -> [u8; $content_len * 32 + 64] { + let mut buffer: [u8; $content_len * 32 + 64] = [0; $content_len * 32 + 64]; + + let randomness_bytes: [u8; 32] = randomness.to_be_bytes(); + let event_type_id_bytes: [u8; 32] = $name::get_event_type_id().to_field().to_be_bytes(); + + for i in 0..32 { + buffer[i] = randomness_bytes[i]; + buffer[32 + i] = event_type_id_bytes[i]; + } + + let serialized_event = self.serialize(); + + for i in 0..serialized_event.len() { + let bytes: [u8; 32] = serialized_event[i].to_be_bytes(); + for j in 0..32 { + buffer[64 + i * 32 + j] = bytes[j]; + } + } + + buffer + } + + fn to_be_bytes(self) -> [u8; $content_len * 32 + 32] { + let mut buffer: [u8; $content_len * 32 + 32] = [0; $content_len * 32 + 32]; + + let event_type_id_bytes: [u8; 32] = $name::get_event_type_id().to_field().to_be_bytes(); + + for i in 0..32 { + buffer[32 + i] = event_type_id_bytes[i]; + } + + let serialized_event = self.serialize(); + + for i in 0..serialized_event.len() { + let bytes: [u8; 32] = serialized_event[i].to_be_bytes(); + for j in 0..32 { + buffer[64 + i * 32 + j] = bytes[j]; + } + } + + buffer + } + + fn get_event_type_id() -> aztec::protocol_types::abis::event_selector::EventSelector { + aztec::protocol_types::abis::event_selector::EventSelector::from_field($event_type_id) + } + + fn emit(self, _emit: fn[Env](Self) -> ()) { + _emit(self); + } + } + } +} + +pub comptime fn event(s: StructDefinition) -> Quoted { + let event_interface = generate_event_interface(s); + s.add_attribute("abi(events)"); + quote { + $event_interface + } +} diff --git a/noir-projects/aztec-nr/aztec/src/macros/functions/interfaces.nr b/noir-projects/aztec-nr/aztec/src/macros/functions/interfaces.nr new file mode 100644 index 00000000000..25486c1d07a --- /dev/null +++ b/noir-projects/aztec-nr/aztec/src/macros/functions/interfaces.nr @@ -0,0 +1,196 @@ +use std::{ + meta::{unquote, type_of}, collections::umap::UHashMap, + hash::{BuildHasherDefault, poseidon2::Poseidon2Hasher} +}; +use crate::macros::utils::{get_fn_visibility, is_fn_view, is_fn_private, add_to_field_slice, compute_fn_selector, is_fn_public}; + +comptime mut global STUBS: UHashMap> = UHashMap::default(); + +pub(crate) comptime fn create_fn_abi_export(f: FunctionDefinition) -> Quoted { + let name = f.name(); + let mut parameters = f.parameters().map( + | (name, typ): (Quoted, Type) | { + quote { $name: $typ } + } + ).join(quote{,}); + + let parameters_struct_name = f"{name}_parameters".quoted_contents(); + let parameters = quote { + struct $parameters_struct_name { + $parameters + } + }; + + let return_value_type = f.return_type(); + let return_type = if return_value_type != type_of(()) { + quote { return_type: $return_value_type } + } else { + quote {} + }; + + let abi_struct_name = f"{name}_abi".quoted_contents(); + + let result = quote { + + $parameters + + #[abi(functions)] + pub struct $abi_struct_name { + parameters: $parameters_struct_name, + $return_type + } + }; + result +} + +pub comptime fn stub_fn(f: FunctionDefinition) -> Quoted { + let fn_name = f.name(); + let fn_parameters = f.parameters(); + let fn_return_type = f.return_type(); + + let fn_visibility = get_fn_visibility(f); + let is_static_call = is_fn_view(f); + let is_void = fn_return_type == type_of(()); + + let fn_visibility_capitalized = if is_fn_private(f) { + quote { Private } + } else { + quote { Public } + }; + let is_static_call_capitalized = if is_static_call { + quote { Static } + } else { + quote { } + }; + let is_void_capitalized = if is_void { quote { Void } } else { quote { } }; + + let args_acc_name = quote { args_acc }; + let args_acc = fn_parameters.fold( + quote { + let mut $args_acc_name = &[]; + }, + |args_hasher, param: (Quoted, Type)| { + let (name, typ) = param; + let appended_arg = add_to_field_slice(args_acc_name, name, typ); + quote { + $args_hasher + $appended_arg + } + } + ); + + let args_hash_name = if fn_visibility == quote { private } { + quote { args_hash } + } else { + quote {} + }; + + let args = if fn_visibility == quote { private } { + quote { + $args_acc + let $args_hash_name = dep::aztec::hash::hash_args($args_acc_name); + } + } else { + args_acc + }; + + let fn_parameters_list = fn_parameters.map( + | (name, typ): (Quoted, Type) | { + quote { $name: $typ } + } + ).join(quote{,}); + + let fn_name_str = fn_name.as_str_quote(); + + let fn_name_len: u32 = unquote!(quote { $fn_name_str.as_bytes().len()}); + + let arg_types_list: Quoted = fn_parameters.map(|(_, typ): (_, Type)| quote { $typ }).join(quote {,}); + let arg_types = if fn_parameters.len() == 1 { + // Extra colon to avoid it being interpreted as a parenthesized expression instead of a tuple + quote { ($arg_types_list,) } + } else { + quote { ($arg_types_list) } + }; + + let call_interface_generics = if is_void { + quote { $fn_name_len, $arg_types } + } else { + quote { $fn_name_len, $fn_return_type, $arg_types } + }; + + let call_interface_name = f"dep::aztec::context::call_interfaces::{fn_visibility_capitalized}{is_static_call_capitalized}{is_void_capitalized}CallInterface".quoted_contents(); + + let fn_selector: Field = compute_fn_selector(f); + + let gas_opts = if is_fn_public(f) { + quote { gas_opts: dep::aztec::context::gas::GasOpts::default() } + } else { + quote {} + }; + + let input_type = if is_fn_private(f) { + quote { crate::context::inputs::PrivateContextInputs }.as_type() + } else { + quote { () }.as_type() + }; + + let return_type_hint = if is_fn_private(f) { + quote { protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs }.as_type() + } else { + fn_return_type + }; + + let mut parameter_names_list = fn_parameters.map(|(name, _): (Quoted, _)| name); + let parameter_names = if is_fn_private(f) { + &[quote {inputs}].append(parameter_names_list).join(quote{,}) + } else { + parameter_names_list.join(quote {,}) + }; + let original = if is_fn_private(f) { + quote { + | inputs: $input_type | -> $return_type_hint { + $fn_name($parameter_names) + } + } + } else { + quote { + | _: $input_type | -> $return_type_hint { + unsafe { $fn_name($parameter_names) } + } + } + }; + + let args_hash = if fn_visibility == quote { private } { + quote { $args_hash_name, } + } else { + quote {} + }; + + quote { + pub fn $fn_name(self, $fn_parameters_list) -> $call_interface_name<$call_interface_generics> { + $args + let selector = dep::aztec::protocol_types::abis::function_selector::FunctionSelector::from_field($fn_selector); + $call_interface_name { + target_contract: self.target_contract, + selector, + name: $fn_name_str, + $args_hash + args: $args_acc_name, + original: $original, + is_static: $is_static_call, + $gas_opts + } + } + } +} + +/// Registers a function stub created via `stub_fn` as part of a module, +pub(crate) comptime fn register_stub(m: Module, stub: Quoted) { + let current_stubs = STUBS.get(m); + let stubs_to_insert = if current_stubs.is_some() { + current_stubs.unwrap().push_back(stub) + } else { + &[stub] + }; + STUBS.insert(m, stubs_to_insert); +} diff --git a/noir-projects/aztec-nr/aztec/src/macros/functions/mod.nr b/noir-projects/aztec-nr/aztec/src/macros/functions/mod.nr new file mode 100644 index 00000000000..2b576827881 --- /dev/null +++ b/noir-projects/aztec-nr/aztec/src/macros/functions/mod.nr @@ -0,0 +1,320 @@ +mod interfaces; + +use std::meta::type_of; +use super::utils::{ + modify_fn_body, is_fn_private, get_fn_visibility, is_fn_view, is_fn_initializer, is_fn_internal, + fn_has_noinitcheck, add_to_hasher, module_has_storage, module_has_initializer +}; +use protocol_types::meta::flatten_to_fields; + +use interfaces::{create_fn_abi_export, register_stub, stub_fn}; + +// Functions can have multiple attributes applied to them, e.g. a single function can have #[public], #[view] and +// #[internal]. However. the order in which this will be evaluated is unknown, which makes combining them tricky. +// +// Our strategy is to have two mutually exclusive attributes, #[private] and #[public] (technically unconstrained is a +// hidden third kind), and make it so all functions must have one of them. These contain the code for all other +// attributes, but they only run it if the corresponding attribute has been applied to the function in question. +// +// For example, `#[private]` knows about `#[internal]` and what it should do, but it only does it if it sees that the +// private function in question also has the `internal` attribute applied. `#[internal]` itself does nothing - it is +// what we call a 'marker' attribute, that only exists for `#[private]` or `#[public]` to check if it's been applied. +// Therefore, the execution order of `#[internal]` and `#[private]` is irrelevant. + +/// Internal functions can only be called by the contract itself, typically from private into public. +pub comptime fn internal(_f: FunctionDefinition) { + // Marker attribute +} + +comptime fn create_internal_check(f: FunctionDefinition) -> Quoted { + let name = f.name(); + let assertion_message = f"Function {name} can only be called internally"; + quote { assert(context.msg_sender() == context.this_address(), $assertion_message); } +} + +/// View functions can only be called in a static execution context. +pub comptime fn view(_f: FunctionDefinition) { + // Marker attribute +} + +comptime fn create_view_check(f: FunctionDefinition) -> Quoted { + let name = f.name(); + let assertion_message = f"Function {name} can only be called statically"; + if is_fn_private(f) { + // Here `context` is of type context::PrivateContext + quote { assert(context.inputs.call_context.is_static_call == true, $assertion_message); } + } else { + // Here `context` is of type context::PublicContext + quote { assert(context.is_static_call(), $assertion_message); } + } +} + +/// An initializer function is similar to a constructor: +/// - it can only be called once +/// - if there are multiple initializer functions, only one of them can be called +/// - no non-initializer functions can be called until an initializer has ben called (except `noinitcheck` functions) +pub comptime fn initializer(_f: FunctionDefinition) { + // Marker attribute +} + +/// Functions with noinitcheck can be called before contract initialization. +pub comptime fn noinitcheck(_f: FunctionDefinition) { + // Marker attribute +} + +comptime fn create_assert_correct_initializer_args(f: FunctionDefinition) -> Quoted { + let fn_visibility = get_fn_visibility(f); + f"dep::aztec::initializer::assert_initialization_matches_address_preimage_{fn_visibility}(context);".quoted_contents() +} + +comptime fn create_mark_as_initialized(f: FunctionDefinition) -> Quoted { + let fn_visibility = get_fn_visibility(f); + f"dep::aztec::initializer::mark_as_initialized_{fn_visibility}(&mut context);".quoted_contents() +} + +comptime fn create_init_check(f: FunctionDefinition) -> Quoted { + let fn_visibility = get_fn_visibility(f); + f"dep::aztec::initializer::assert_is_initialized_{fn_visibility}(&mut context);".quoted_contents() +} + +/// Private functions are executed client-side and preserve privacy. +pub comptime fn private(f: FunctionDefinition) -> Quoted { + let fn_abi = create_fn_abi_export(f); + let fn_stub = stub_fn(f); + register_stub(f.module(), fn_stub); + + let module_has_initializer = module_has_initializer(f.module()); + let module_has_storage = module_has_storage(f.module()); + + // Private functions undergo a lot of transformations from their Aztec.nr form into a circuit that can be fed to the + // Private Kernel Circuit. + + // First we change the function signature so that it also receives `PrivateContextInputs`, which contain information + // about the execution context (e.g. the caller). + let original_params = f.parameters(); + f.set_parameters( + &[ + ( + quote { inputs }, quote { crate::context::inputs::private_context_inputs::PrivateContextInputs }.as_type() + ) + ].append(original_params) + ); + + let mut body = f.body().as_block().unwrap(); + + // The original params are hashed and passed to the `context` object, so that the kernel can verify we're received + // the correct values. + + // TODO: Optimize args_hasher for small number of arguments + let args_hasher_name = quote { args_hasher }; + let args_hasher = original_params.fold( + quote { + let mut $args_hasher_name = dep::aztec::hash::ArgsHasher::new(); + }, + |args_hasher, param: (Quoted, Type)| { + let (name, typ) = param; + let appended_arg = add_to_hasher(args_hasher_name, name, typ); + quote { + $args_hasher + $appended_arg + } + } + ); + + let context_creation = quote { let mut context = dep::aztec::context::private_context::PrivateContext::new(inputs, args_hasher.hash()); }; + + // Modifications introduced by the different marker attributes. + + let internal_check = if is_fn_internal(f) { + create_internal_check(f) + } else { + quote {} + }; + + let view_check = if is_fn_view(f) { + create_view_check(f) + } else { + quote {} + }; + + let (assert_initializer, mark_as_initialized) = if is_fn_initializer(f) { + (create_assert_correct_initializer_args(f), create_mark_as_initialized(f)) + } else { + (quote {}, quote {}) + }; + + let storage_init = if module_has_storage { + quote { let storage = Storage::init(&mut context); } + } else { + quote {} + }; + + // Initialization checks are not included in contracts that don't have initializers. + let init_check = if module_has_initializer & !is_fn_initializer(f) & !fn_has_noinitcheck(f) { + create_init_check(f) + } else { + quote {} + }; + + // Finally, we need to change the return type to be `PrivateCircuitPublicInputs`, which is what the Private Kernel + // circuit expects. + + let return_value_var_name = quote { macro__returned__values }; + + let return_value_type = f.return_type(); + let return_value = if body.len() == 0 { + quote {} + } else if return_value_type != type_of(()) { + // The original return value is passed to a second args hasher which the context receives. + + let (body_without_return, last_body_expr) = body.pop_back(); + let return_value = last_body_expr.quoted(); + let return_value_assignment = quote { let $return_value_var_name: $return_value_type = $return_value; }; + let return_hasher_name = quote { return_hasher }; + let return_value_into_hasher = add_to_hasher(return_hasher_name, return_value_var_name, return_value_type); + + body = body_without_return; + + quote { + let mut $return_hasher_name = dep::aztec::hash::ArgsHasher::new(); + $return_value_assignment + $return_value_into_hasher + context.set_return_hash($return_hasher_name); + } + } else { + let (body_without_return, last_body_expr) = body.pop_back(); + if !last_body_expr.has_semicolon() + & last_body_expr.as_for().is_none() + & last_body_expr.as_assert().is_none() + & last_body_expr.as_for_range().is_none() + & last_body_expr.as_assert_eq().is_none() + & last_body_expr.as_let().is_none() { + let unused_return_value_name = f"_{return_value_var_name}".quoted_contents(); + body = body_without_return.push_back(quote { let $unused_return_value_name = $last_body_expr; }.as_expr().unwrap()); + } + quote {} + }; + + let context_finish = quote { context.finish() }; + + let to_prepend = quote { + $args_hasher + $context_creation + $assert_initializer + $init_check + $internal_check + $view_check + $storage_init + }; + + let to_append = quote { + $return_value + $mark_as_initialized + $context_finish + }; + let modified_body = modify_fn_body(body, to_prepend, to_append); + f.set_body(modified_body); + f.add_attribute("recursive"); + f.set_return_public(true); + f.set_return_type( + quote { dep::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs }.as_type() + ); + + fn_abi +} + +/// Public functions are executed sequencer-side and do not preserve privacy, similar to the EVM. +pub comptime fn public(f: FunctionDefinition) -> Quoted { + let fn_abi = create_fn_abi_export(f); + let fn_stub = stub_fn(f); + register_stub(f.module(), fn_stub); + + let module_has_initializer = module_has_initializer(f.module()); + let module_has_storage = module_has_storage(f.module()); + + // Public functions undergo a lot of transformations from their Aztec.nr form. + let original_params = f.parameters(); + let args_len = original_params.map(|(name, typ): (Quoted, Type)| flatten_to_fields(name, typ, &[]).0.len()).fold(0, |acc: u32, val: u32| acc + val); + + // Unlike in the private case, in public the `context` does not need to receive the hash of the original params. + let context_creation = quote { let mut context = dep::aztec::context::public_context::PublicContext::new(|| { + let serialized_args : [Field; $args_len] = dep::aztec::context::public_context::calldata_copy(0, $args_len); + dep::aztec::hash::hash_args_array(serialized_args) + }); }; + + // Modifications introduced by the different marker attributes. + let internal_check = if is_fn_internal(f) { + create_internal_check(f) + } else { + quote {} + }; + + let view_check = if is_fn_view(f) { + create_view_check(f) + } else { + quote {} + }; + + let (assert_initializer, mark_as_initialized) = if is_fn_initializer(f) { + (create_assert_correct_initializer_args(f), create_mark_as_initialized(f)) + } else { + (quote {}, quote {}) + }; + + let storage_init = if module_has_storage { + quote { let storage = Storage::init(&mut context); } + } else { + quote {} + }; + + // Initialization checks are not included in contracts that don't have initializers. + let init_check = if module_has_initializer & !fn_has_noinitcheck(f) & !is_fn_initializer(f) { + create_init_check(f) + } else { + quote {} + }; + + let to_prepend = quote { + $context_creation + $assert_initializer + $init_check + $internal_check + $view_check + $storage_init + }; + + let to_append = quote { + $mark_as_initialized + }; + + let body = f.body().as_block().unwrap(); + let modified_body = modify_fn_body(body, to_prepend, to_append); + f.set_body(modified_body); + + // All public functions are automatically made unconstrained, even if they were not marked as such. This is because + // instead of compiling into a circuit, they will compile to bytecode that will be later transpiled into AVM + // bytecode. + f.set_unconstrained(true); + f.set_return_public(true); + + fn_abi +} + +pub comptime fn transform_unconstrained(f: FunctionDefinition) { + let context_creation = quote { let mut context = dep::aztec::context::unconstrained_context::UnconstrainedContext::new(); }; + let module_has_storage = module_has_storage(f.module()); + + let storage_init = if module_has_storage { + quote { let storage = Storage::init(context); } + } else { + quote {} + }; + let to_prepend = quote { + $context_creation + $storage_init + }; + let body = f.body().as_block().unwrap(); + let modified_body = modify_fn_body(body, to_prepend, quote {}); + f.set_return_public(true); + f.set_body(modified_body); +} diff --git a/noir-projects/aztec-nr/aztec/src/macros/mod.nr b/noir-projects/aztec-nr/aztec/src/macros/mod.nr new file mode 100644 index 00000000000..23da22f2d1d --- /dev/null +++ b/noir-projects/aztec-nr/aztec/src/macros/mod.nr @@ -0,0 +1,164 @@ +mod functions; +mod utils; +mod notes; +mod storage; +mod events; + +use functions::interfaces::STUBS; +use storage::STORAGE_LAYOUT_NAME; +use notes::{NOTES, generate_note_export}; + +use functions::transform_unconstrained; +use utils::module_has_storage; + +/// Marks a contract as an Aztec contract, generating the interfaces for its functions and notes, as well as injecting +/// the `compute_note_hash_and_optionally_a_nullifier` function PXE requires in order to validate notes. +pub comptime fn aztec(m: Module) -> Quoted { + let interface = generate_contract_interface(m); + + let unconstrained_functions = m.functions().filter( + | f: FunctionDefinition | f.is_unconstrained() & !f.has_named_attribute("test") & !f.has_named_attribute("public") + ); + for f in unconstrained_functions { + transform_unconstrained(f); + } + + let compute_note_hash_and_optionally_a_nullifier = generate_compute_note_hash_and_optionally_a_nullifier(); + let note_exports = generate_note_exports(); + + quote { + $note_exports + $interface + $compute_note_hash_and_optionally_a_nullifier + } +} + +comptime fn generate_contract_interface(m: Module) -> Quoted { + let module_name = m.name(); + let contract_stubs = STUBS.get(m); + let fn_stubs_quote = if contract_stubs.is_some() { + contract_stubs.unwrap().join(quote {}) + } else { + quote {} + }; + + let has_storage_layout = module_has_storage(m) & STORAGE_LAYOUT_NAME.get(m).is_some(); + let storage_layout_getter = if has_storage_layout { + let storage_layout_name = STORAGE_LAYOUT_NAME.get(m).unwrap(); + quote { + pub fn storage_layout() -> StorageLayout { + $storage_layout_name + } + } + } else { + quote {} + }; + + let library_storage_layout_getter = if has_storage_layout { + quote { + #[contract_library_method] + $storage_layout_getter + } + } else { + quote {} + }; + + quote { + struct $module_name { + target_contract: dep::aztec::protocol_types::address::AztecAddress + } + + impl $module_name { + $fn_stubs_quote + + pub fn at( + target_contract: aztec::protocol_types::address::AztecAddress + ) -> Self { + Self { target_contract } + } + + pub fn interface() -> Self { + Self { target_contract: aztec::protocol_types::address::AztecAddress::zero() } + } + + $storage_layout_getter + } + + #[contract_library_method] + pub fn at( + target_contract: aztec::protocol_types::address::AztecAddress + ) -> $module_name { + $module_name { target_contract } + } + + #[contract_library_method] + pub fn interface() -> $module_name { + $module_name { target_contract: aztec::protocol_types::address::AztecAddress::zero() } + } + + $library_storage_layout_getter + + } +} + +comptime fn generate_compute_note_hash_and_optionally_a_nullifier() -> Quoted { + let mut max_note_length: u32 = 0; + let notes = NOTES.entries(); + let body = if notes.len() > 0 { + max_note_length = notes.fold(0, | acc, (_, (_, len, _)): (Type, (StructDefinition, u32, Field)) | { + acc + len + }); + + let mut if_statements_list = &[]; + + for i in 0..notes.len() { + let (typ, (_, _, _)) = notes[i]; + let if_or_else_if = if i == 0 { + quote { if } + } else { + quote { else if } + }; + if_statements_list = if_statements_list.push_back(quote { + $if_or_else_if note_type_id == $typ::get_note_type_id() { + aztec::note::utils::compute_note_hash_and_optionally_a_nullifier($typ::deserialize_content, note_header, compute_nullifier, serialized_note) + } + }); + } + + let if_statements = if_statements_list.join(quote {}); + + quote { + let note_header = aztec::prelude::NoteHeader::new(contract_address, nonce, storage_slot); + $if_statements + else { + panic(f"Unknown note type ID") + } + } + } else { + quote { + panic(f"No notes defined") + } + }; + + quote { + unconstrained fn compute_note_hash_and_optionally_a_nullifier( + contract_address: aztec::protocol_types::address::AztecAddress, + nonce: Field, + storage_slot: Field, + note_type_id: Field, + compute_nullifier: bool, + serialized_note: [Field; $max_note_length], + ) -> pub [Field; 4] { + $body + } + } +} + +comptime fn generate_note_exports() -> Quoted { + let notes = NOTES.values(); + notes.map( + | (s, _, note_type_id): (StructDefinition, u32, Field) | { + generate_note_export(s, note_type_id) + } + ).join(quote {}) +} diff --git a/noir-projects/aztec-nr/aztec/src/macros/notes/mod.nr b/noir-projects/aztec-nr/aztec/src/macros/notes/mod.nr new file mode 100644 index 00000000000..fd8777873a1 --- /dev/null +++ b/noir-projects/aztec-nr/aztec/src/macros/notes/mod.nr @@ -0,0 +1,387 @@ +use std::{ + meta::{type_of, unquote, typ::fresh_type_variable}, collections::umap::UHashMap, + hash::{BuildHasherDefault, poseidon2::Poseidon2Hasher} +}; +use protocol_types::meta::{flatten_to_fields, pack_from_fields}; +use crate::note::{note_header::NoteHeader, note_getter_options::PropertySelector}; + +comptime global NOTE_HEADER_TYPE = type_of(NoteHeader::empty()); + +comptime mut global NOTES: UHashMap> = UHashMap::default(); + +comptime fn compute_note_type_id(name: Quoted) -> Field { + let name_as_str_quote = name.as_str_quote(); + + unquote!( + quote { + let bytes = $name_as_str_quote.as_bytes(); + let hash = protocol_types::hash::poseidon2_hash_bytes(bytes); + let hash_bytes = hash.to_be_bytes::<4>(); + protocol_types::utils::field::field_from_bytes(hash_bytes, true) + } + ) +} + +comptime fn generate_note_interface( + s: StructDefinition, + note_type_id: Field, + hiding_point_name: Quoted, + indexed_fixed_fields: [(Quoted, Type, u32)], + indexed_nullable_fields: [(Quoted, Type, u32)] +) -> (Quoted, u32) { + let name = s.name(); + let typ = s.as_type(); + let (fields, aux_vars) = flatten_to_fields(quote { self }, typ, &[quote {self.header}]); + let aux_vars_for_serialization = if aux_vars.len() > 0 { + let joint = aux_vars.join(quote {;}); + quote { $joint; } + } else { + quote {} + }; + let serialized_fields = fields.join(quote {,}); + let content_len = fields.len(); + + let (deserialized_content, _) = pack_from_fields( + quote { self }, + typ, + quote { value }, + 0, + &[(quote {header}, quote { aztec::note::note_header::NoteHeader::empty() })] + ); + + let fixed_fields_args = indexed_fixed_fields.map(| (name, _, _): (Quoted, Type, u32) | quote{ self.$name }).push_back(quote { self.get_header().storage_slot }).join(quote {,}); + let nullable_fields_args = indexed_nullable_fields.map(|(name, _, _): (Quoted, Type, u32)| quote { self.$name }).join(quote {,}); + + (quote { + impl aztec::note::note_interface::NoteInterface<$content_len> for $name { + fn to_be_bytes(self, storage_slot: Field) -> [u8; $content_len * 32 + 64] { + let serialized_note = self.serialize_content(); + + let mut buffer: [u8; $content_len * 32 + 64] = [0; $content_len * 32 + 64]; + + let storage_slot_bytes: [u8; 32] = storage_slot.to_be_bytes(); + let note_type_id_bytes: [u8; 32] = $name::get_note_type_id().to_be_bytes(); + + for i in 0..32 { + buffer[i] = storage_slot_bytes[i]; + buffer[32 + i] = note_type_id_bytes[i]; + } + + for i in 0..serialized_note.len() { + let bytes: [u8; 32] = serialized_note[i].to_be_bytes(); + for j in 0..32 { + buffer[64 + i * 32 + j] = bytes[j]; + } + } + buffer + } + + fn deserialize_content(value: [Field; $content_len]) -> Self { + $deserialized_content + } + + fn serialize_content(self) -> [Field; $content_len] { + $aux_vars_for_serialization + [$serialized_fields] + } + + fn get_note_type_id() -> Field { + $note_type_id + } + + fn set_header(&mut self, header: $NOTE_HEADER_TYPE) { + self.header = header; + } + + fn get_header(self) -> $NOTE_HEADER_TYPE { + self.header + } + + fn compute_note_hash(self) -> Field { + $hiding_point_name::empty().new($fixed_fields_args).finalize($nullable_fields_args) + } + } + }, content_len) +} + +comptime fn generate_note_properties(s: StructDefinition) -> Quoted { + let name = s.name(); + + let struct_name = f"{name}Properties".quoted_contents(); + + let property_selector_type = type_of(PropertySelector { index: 0, offset: 0, length: 0 }); + let note_header_type: Type = type_of(NoteHeader::empty()); + + let non_header_fields = s.fields().filter(| (_, typ): (Quoted, Type) | typ != note_header_type); + + let properties_types = non_header_fields.map( + | (name, _): (Quoted, Type) | { + quote { $name: $property_selector_type } + } + ).join(quote {,}); + + // TODO #8694: Properly handle non-field types https://github.com/AztecProtocol/aztec-packages/issues/8694 + let mut properties_list = &[]; + for i in 0..non_header_fields.len() { + let (name, _) = non_header_fields[i]; + properties_list = properties_list.push_back(quote { $name: aztec::note::note_getter_options::PropertySelector { index: $i, offset: 0, length: 32 } }); + } + + let properties = properties_list.join(quote {,}); + + quote { + struct $struct_name { + $properties_types + } + + impl aztec::note::note_interface::NoteProperties<$struct_name> for $name { + fn properties() -> $struct_name { + $struct_name { + $properties + } + } + } + } +} + +pub(crate) comptime fn generate_note_export(s: StructDefinition, note_type_id: Field) -> Quoted { + let name = s.name(); + let global_export_name = f"{name}_EXPORTS".quoted_contents(); + let note_name_as_str = name.as_str_quote(); + let note_name_str_len = unquote!(quote { $note_name_as_str.as_bytes().len() }); + quote { + #[abi(notes)] + global $global_export_name: (Field, str<$note_name_str_len>) = ($note_type_id,$note_name_as_str); + } +} + +comptime fn generate_multi_scalar_mul(indexed_fields: [(Quoted, Type, u32)]) -> ([Quoted], [Quoted], [Quoted], Quoted) { + let mut generators_list = &[]; + let mut scalars_list = &[]; + let mut args_list = &[]; + let mut aux_vars_list = &[]; + // TODO(#8648): Generate generators at comptime instead of importing here. + for i in 0..indexed_fields.len() { + let (field_name, typ, index) = indexed_fields[i]; + let start_generator_index = index + 1; + let (flattened_field, aux_vars) = flatten_to_fields(field_name, typ, &[]); + for j in 0..flattened_field.len() { + let flattened_as_field = flattened_field[j]; + let generator_index = start_generator_index + j; + generators_list = generators_list.push_back(f"aztec::generators::Ga{generator_index}".quoted_contents()); + scalars_list = scalars_list.push_back(quote { std::hash::from_field_unsafe($flattened_as_field) }); + } + args_list = args_list.push_back(quote { $field_name: $typ }); + aux_vars_list = aux_vars_list.append(aux_vars); + } + + let aux_vars = if aux_vars_list.len() > 0 { + let joint = aux_vars_list.join(quote {;}); + quote { $joint; } + } else { + quote {} + }; + (generators_list, scalars_list, args_list, aux_vars) +} + +comptime fn generate_note_hiding_point( + s: StructDefinition, + indexed_fixed_fields: [(Quoted, Type, u32)], + indexed_nullable_fields: [(Quoted, Type, u32)] +) -> (Quoted, Quoted) { + let name = s.name(); + let hiding_point_name = f"{name}HidingPoint".quoted_contents(); + + let (new_generators_list, new_scalars_list, new_args_list, new_aux_vars) = generate_multi_scalar_mul(indexed_fixed_fields); + + let new_args = &[quote {mut self}].append(new_args_list).push_back(quote { storage_slot: Field }).join(quote {,}); + let new_generators = new_generators_list.push_back(quote { aztec::generators::G_slot }).join(quote {,}); + let new_scalars = new_scalars_list.push_back(quote { std::hash::from_field_unsafe(storage_slot) }).join(quote {,}); + + let (finalize_generators_list, finalize_scalars_list, finalize_args_list, finalize_aux_vars) = generate_multi_scalar_mul(indexed_nullable_fields); + + let finalize_args = if finalize_args_list.len() > 0 { + &[quote {self}].append(finalize_args_list).join(quote {,}) + } else { + quote {self} + }; + + let finalize_body = if indexed_nullable_fields.len() > 0 { + let finalize_generators = finalize_generators_list.join(quote {,}); + let finalize_scalars = finalize_scalars_list.join(quote {,}); + quote { + $finalize_aux_vars + let point = std::embedded_curve_ops::multi_scalar_mul( + [$finalize_generators], + [$finalize_scalars] + ) + self.inner; + point.x + } + } else { + quote { self.inner.x } + }; + + (quote { + struct $hiding_point_name { + inner: aztec::protocol_types::point::Point + } + + impl $hiding_point_name { + fn new($new_args) -> $hiding_point_name { + $new_aux_vars + let point = std::embedded_curve_ops::multi_scalar_mul( + [$new_generators], + [$new_scalars] + ); + self.inner = point; + self + } + + fn from_point(mut self, point: aztec::protocol_types::point::Point) -> $hiding_point_name { + self.inner = point; + self + } + + + fn finalize($finalize_args) -> Field { + $finalize_body + } + } + + impl aztec::protocol_types::traits::Serialize for $hiding_point_name { + fn serialize(self) -> [Field; aztec::protocol_types::point::POINT_LENGTH] { + self.inner.serialize() + } + } + + impl aztec::protocol_types::traits::Deserialize for $hiding_point_name { + fn deserialize(serialized: [Field; aztec::protocol_types::point::POINT_LENGTH]) -> $hiding_point_name { + $hiding_point_name { inner: aztec::protocol_types::point::Point::deserialize(serialized) } + } + } + + impl aztec::protocol_types::traits::Empty for $hiding_point_name { + fn empty() -> Self { + Self { inner: aztec::protocol_types::point::Point::empty() } + } + } + + impl Eq for $hiding_point_name { + fn eq(self, other: Self) -> bool { + self.inner == other.inner + } + } + + }, hiding_point_name) +} + +comptime fn generate_partial_note_impl(s: StructDefinition, hiding_point_name: Quoted) -> Quoted { + let name = s.name(); + quote { + impl aztec::note::note_interface::PartialNote<$hiding_point_name> for $name { + fn hiding_point() -> $hiding_point_name { + $hiding_point_name::empty() + } + } + } +} + +comptime fn register_note(note: StructDefinition, note_serialized_len: u32, note_type_id: Field) { + NOTES.insert(note.as_type(), (note, note_serialized_len, note_type_id)); +} + +comptime fn index_note_fields( + s: StructDefinition, + nullable_fields: [Quoted] +) -> ([(Quoted, Type, u32)], [(Quoted, Type, u32)]) { + let mut indexed_fixed_fields = &[]; + let mut indexed_nullable_fields = &[]; + let mut counter: u32 = 0; + for field in s.fields() { + let (name, typ) = field; + if (typ != NOTE_HEADER_TYPE) { + if nullable_fields.all(| field | field != name) { + indexed_fixed_fields = indexed_fixed_fields.push_back((name, typ, counter)); + } else { + indexed_nullable_fields = indexed_nullable_fields.push_back((name, typ, counter)); + } + } + let (flattened, _) = flatten_to_fields(name, typ, &[]); + counter+=flattened.len(); + } + (indexed_fixed_fields, indexed_nullable_fields) +} + +comptime fn common_note_annotation(s: StructDefinition) -> (Quoted, Field) { + // Automatically inject header if not present + let filtered_header = s.fields().filter(| (_, typ): (Quoted, Type) | typ == NOTE_HEADER_TYPE); + if (filtered_header.len() == 0) { + let new_fields = s.fields().push_back((quote { header }, NOTE_HEADER_TYPE)); + s.set_fields(new_fields); + } + let note_properties = generate_note_properties(s); + let note_type_id = compute_note_type_id(s.name()); + + (quote { + $note_properties + }, note_type_id) +} + +#[varargs] +pub comptime fn partial_note(s: StructDefinition, nullable_fields: [Quoted]) -> Quoted { + let (indexed_fixed_fields, indexed_nullable_fields) = index_note_fields(s, nullable_fields); + + let (common, note_type_id) = common_note_annotation(s); + let (note_hiding_point, hiding_point_name) = generate_note_hiding_point(s, indexed_fixed_fields, indexed_nullable_fields); + let (note_interface_impl, note_serialized_len) = generate_note_interface( + s, + note_type_id, + hiding_point_name, + indexed_fixed_fields, + indexed_nullable_fields + ); + let partial_note_impl = generate_partial_note_impl(s, hiding_point_name); + register_note(s, note_serialized_len, note_type_id); + + quote { + $common + $note_hiding_point + $note_interface_impl + $partial_note_impl + } +} + +pub comptime fn note(s: StructDefinition) -> Quoted { + let (indexed_fixed_fields, indexed_nullable_fields) = index_note_fields(s, &[]); + let (common, note_type_id) = common_note_annotation(s); + let (note_hiding_point, hiding_point_name) = generate_note_hiding_point(s, indexed_fixed_fields, indexed_nullable_fields); + let (note_interface_impl, note_serialized_len) = generate_note_interface( + s, + note_type_id, + hiding_point_name, + indexed_fixed_fields, + indexed_nullable_fields + ); + register_note(s, note_serialized_len, note_type_id); + + quote { + $common + $note_hiding_point + $note_interface_impl + } +} + +pub comptime fn note_custom_interface(s: StructDefinition) -> Quoted { + let (common, note_type_id) = common_note_annotation(s); + let serialized_len_type = fresh_type_variable(); + let note_interface_impl = s.as_type().get_trait_impl(quote { crate::note::note_interface::NoteInterface<$serialized_len_type> }.as_trait_constraint()); + let name = s.name(); + + let note_serialized_len = note_interface_impl.expect(f"Note {name} must implement NoteInterface trait").trait_generic_args()[0].as_constant().unwrap(); + + register_note(s, note_serialized_len, note_type_id); + + quote { + $common + } +} diff --git a/noir-projects/aztec-nr/aztec/src/macros/storage/mod.nr b/noir-projects/aztec-nr/aztec/src/macros/storage/mod.nr new file mode 100644 index 00000000000..7b72fe8329e --- /dev/null +++ b/noir-projects/aztec-nr/aztec/src/macros/storage/mod.nr @@ -0,0 +1,157 @@ +use std::{collections::umap::UHashMap, hash::{BuildHasherDefault, poseidon2::Poseidon2Hasher}}; + +use super::utils::get_serialized_size; +use super::utils::is_note; + +comptime mut global STORAGE_LAYOUT_NAME: UHashMap> = UHashMap::default(); + +/// Marks a struct as the one describing the storage layout of a contract. Only a single struct in the entire contract +/// should have this macro (or `storage_no_init`) applied to it. +/// The contract's storage is accessed via the `storage` variable, which will will automatically be made available in +/// all functions as an instance of the struct this macro was applied to. +pub comptime fn storage(s: StructDefinition) -> Quoted { + // This macro performs three things: + // - it marks the contract as having storage, so that `macros::utils::module_has_storage` will return true and + // functions will have the storage variable injected and initialized via the `init` function. + // - it implements said `init` function by allocating appropriate storage slots to each state variable. + // - it exposes the storage layout by creating a `StorageLayout` struct that is exposed via the `abi(storage)` + // macro. + + let mut slot: u32 = 1; + let mut storage_vars_constructors = &[]; + let mut storage_layout_fields = &[]; + let mut storage_layout_constructors = &[]; + + // TODO(#8658): uncomment the code below to inject the Context type parameter. + + //let mut new_storage_fields = &[]; + //let context_generic = s.add_generic("Context"); + for field in s.fields() { + let (name, typ) = field; + let (storage_field_constructor, serialized_size) = generate_storage_field_constructor(typ, quote { $slot }, false); + storage_vars_constructors = storage_vars_constructors.push_back(quote { $name: $storage_field_constructor }); + storage_layout_fields = storage_layout_fields.push_back(quote { $name: dep::aztec::prelude::Storable }); + storage_layout_constructors = storage_layout_constructors.push_back(quote { $name: dep::aztec::prelude::Storable { slot: $slot } }); + //let with_context_generic = add_context_generic(typ, context_generic); + //println(with_context_generic); + //new_storage_fields = new_storage_fields.push_back((name, with_context_generic )); + slot += serialized_size; + } + + //s.set_fields(new_storage_fields); + + let storage_vars_constructors = storage_vars_constructors.join(quote {,}); + let storage_impl = quote { + impl Storage { + fn init(context: Context) -> Self { + Self { + $storage_vars_constructors + } + } + } + }; + + let storage_layout_fields = storage_layout_fields.join(quote {,}); + let storage_layout_constructors = storage_layout_constructors.join(quote {,}); + + let module = s.module(); + let module_name = module.name(); + let storage_layout_name = f"STORAGE_LAYOUT_{module_name}".quoted_contents(); + STORAGE_LAYOUT_NAME.insert(module, storage_layout_name); + + quote { + $storage_impl + + struct StorageLayout { + $storage_layout_fields + } + + #[abi(storage)] + global $storage_layout_name = StorageLayout { + $storage_layout_constructors + }; + } +} + +/// Same as `storage`, except the user is in charge of providing an implementation of the `init` constructor function +/// with signature `fn init(context: Context) -> Self`, which allows for manual control of storage slot +/// allocation. Similarly, no `StorageLayout` struct will be created. +/// Only a single struct in the entire contract should have this macro (or `storage`) applied to it. +pub comptime fn storage_no_init(_s: StructDefinition) { + // All `storage` does is provide the `init` implementation, so we don't need to do anything here. Applying this + // macro however will cause for `macros::utils::module_has_storage` to return true, resulting in the injection of + // the `storage` variable. +} + +/// Returns the expression required to initialize a state variable with a given slot, along with its serialization size, +/// i.e. how many contiguous storage slots the variable requires. +comptime fn generate_storage_field_constructor(typ: Type, slot: Quoted, parent_is_map: bool) -> (Quoted, u32) { + assert( + typ.as_struct().is_some(), "Storage containers must be generic structs of the form `Container<_, Context>`, or Map" + ); + let (container_struct, generics) = typ.as_struct().unwrap(); + let struct_name = container_struct.name(); + + if is_storage_map(typ) { + // Map state variables recursively initialize their contents - this includes nested maps. + let (value_constructor, _) = generate_storage_field_constructor(generics[1], quote { slot }, true); + (quote { $struct_name::new(context, $slot, | context, slot | { $value_constructor }) }, 1) + } else { + let (container_struct, container_struct_generics) = typ.as_struct().unwrap(); + let container_struct_name = container_struct.name(); + + let serialized_size = if parent_is_map { + // Variables inside a map do not require contiguous slots since the map slot derivation is assumed to result + // in slots very far away from one another. + 1 + } else { + let stored_struct = container_struct_generics[0]; + if is_note(stored_struct) & (container_struct_name != quote { PublicMutable }) { + // Private notes always occupy a single slot, since the slot is only used as a state variable + // identifier. + + // Someone could store a Note in PublicMutable for whatever reason though. + // TODO(#8659): remove the PublicMutable exception above + 1 + } else { + get_serialized_size(stored_struct) + } + }; + + // We assume below that all state variables implement `fn new(context: Context, slot: Field) -> Self`. + (quote { $struct_name::new(context, $slot)}, serialized_size) + } +} + +/// Returns true if `typ` is `state_vars::map::Map`. +comptime fn is_storage_map(typ: Type) -> bool { + if typ.as_struct().is_some() { + let (def, generics) = typ.as_struct().unwrap(); + let maybe_map = if (def.name() == quote { Map }) & (generics.len() == 3) { + let maybe_key = generics[0]; + let maybe_value = generics[1]; + let maybe_context = generics[2]; + quote { crate::state_vars::map::Map<$maybe_key, $maybe_value, $maybe_context> }.as_type() + } else { + quote {()}.as_type() + }; + typ == maybe_map + } else { + false + } +} + +comptime fn add_context_generic(typ: Type, context_generic: Type) -> Type { + let (def, mut generics) = typ.as_struct().expect(f"Storage containers must be generic structs of the form `Container<..., Context>`"); + let name = def.name(); + + if is_storage_map(typ) { + generics[generics.len() - 2] = add_context_generic(generics[1], context_generic); + generics[generics.len() - 1] = context_generic; + } else { + generics[generics.len() - 1] = context_generic; + } + + let generics = generics.map(|typ: Type| quote{$typ}).join(quote{,}); + quote { $name<$generics> }.as_type() +} diff --git a/noir-projects/aztec-nr/aztec/src/macros/utils.nr b/noir-projects/aztec-nr/aztec/src/macros/utils.nr new file mode 100644 index 00000000000..27c2086246e --- /dev/null +++ b/noir-projects/aztec-nr/aztec/src/macros/utils.nr @@ -0,0 +1,253 @@ +use std::meta::{typ::fresh_type_variable, unquote}; + +pub(crate) comptime fn get_fn_visibility(f: FunctionDefinition) -> Quoted { + if f.has_named_attribute("private") { + quote { private } + } else if f.has_named_attribute("public") { + quote { public } + } else { + panic(f"Function is neither private nor public") + } +} + +pub(crate) comptime fn is_fn_private(f: FunctionDefinition) -> bool { + f.has_named_attribute("private") +} + +pub(crate) comptime fn is_fn_public(f: FunctionDefinition) -> bool { + f.has_named_attribute("public") +} + +pub(crate) comptime fn is_fn_view(f: FunctionDefinition) -> bool { + f.has_named_attribute("view") +} + +pub(crate) comptime fn is_fn_internal(f: FunctionDefinition) -> bool { + f.has_named_attribute("internal") +} + +pub(crate) comptime fn is_fn_initializer(f: FunctionDefinition) -> bool { + f.has_named_attribute("initializer") +} + +pub(crate) comptime fn fn_has_noinitcheck(f: FunctionDefinition) -> bool { + f.has_named_attribute("noinitcheck") +} + +/// Takes a function body as a collection of expressions, and alters it by prepending and appending quoted values. +pub(crate) comptime fn modify_fn_body(body: [Expr], prepend: Quoted, append: Quoted) -> Expr { + // We need to quote the body before we can alter its contents, so we fold it by quoting each expression. + let mut body_quote = body.fold( + quote {}, + |full_quote: Quoted, expr: Expr| { + let expr_quote = expr.quoted(); + quote { + $full_quote + $expr_quote + } + } + ); + body_quote = quote { + { + $prepend + $body_quote + $append + } + }; + let body_expr = body_quote.as_expr(); + body_expr.expect(f"Body is not an expression: {body_quote}") +} + +pub(crate) comptime fn add_to_field_slice(slice_name: Quoted, name: Quoted, typ: Type) -> Quoted { + if typ.is_field() | typ.as_integer().is_some() | typ.is_bool() { + quote { $slice_name = $slice_name.push_back($name as Field); } + } else if typ.as_struct().is_some() { + quote { $slice_name = $slice_name.append($name.serialize()); } + } else if typ.as_array().is_some() { + let (element_type, _) = typ.as_array().unwrap(); + let serialized_name = f"{name}_serialized".quoted_contents(); + quote { + let $serialized_name = $name.map(|x: $element_type | x.serialize()); + for i in 0..$name.len() { + $slice_name = $slice_name.append($serialized_name[i].as_slice()); + } + } + } else if typ.as_str().is_some() { + quote { + $slice_name = $slice_name.append($name.as_bytes().map(| byte: u8 | byte as Field).as_slice()); + } + } else { + panic(f"Cannot add to slice: unsupported type {typ} variable {name}") + } +} + +/// Adds a value to a hash::ArgsHasher. Structs and values inside arrays are required to implement the Serialize trait. +pub(crate) comptime fn add_to_hasher(hasher_name: Quoted, name: Quoted, typ: Type) -> Quoted { + if typ.is_field() | typ.as_integer().is_some() | typ.is_bool() { + quote { $hasher_name.add($name as Field); } + } else if typ.as_struct().is_some() { + quote { $hasher_name.add_multiple($name.serialize()); } + } else if typ.as_array().is_some() { + let (element_type, _) = typ.as_array().unwrap(); + let serialized_name = f"{name}_serialized".quoted_contents(); + quote { + let $serialized_name = $name.map(|x: $element_type | x.serialize()); + for i in 0..$name.len() { + $hasher_name.add_multiple($serialized_name[i]); + } + } + } else if typ.as_str().is_some() { + quote { + $hasher_name.add_multiple($name.as_bytes().map(| byte: u8 | byte as Field)); + } + } else { + panic(f"Cannot add to hasher: unsupported type {typ} of variable {name}") + } +} + +comptime fn signature_of_type(typ: Type) -> Quoted { + if typ.is_field() { + quote{Field} + } else if typ.as_integer().is_some() { + let (is_signed, bit_size) = typ.as_integer().unwrap(); + if is_signed { + f"i{bit_size}".quoted_contents() + } else { + f"u{bit_size}".quoted_contents() + } + } else if typ.is_bool() { + quote {bool} + } else if typ.as_str().is_some() { + let str_len_typ = typ.as_str().unwrap(); + let str_len = str_len_typ.as_constant().unwrap(); + f"str<{str_len}>".quoted_contents() + } else if typ.as_array().is_some() { + let (element_type, array_len) = typ.as_array().unwrap(); + let array_len = array_len.as_constant().unwrap(); + let element_typ_quote = signature_of_type(element_type); + f"[{element_typ_quote};{array_len}]".quoted_contents() + } else if typ.as_struct().is_some() { + let (s, _) = typ.as_struct().unwrap(); + let field_signatures = s.fields().map( + | (_, typ): (Quoted, Type) | { + signature_of_type(typ) + } + ).join(quote {,}); + f"({field_signatures})".quoted_contents() + } else if typ.as_tuple().is_some() { + // Note that tuples are handled the same way as structs + let types = typ.as_tuple().unwrap(); + let field_signatures = types.map( + | typ: Type | { + signature_of_type(typ) + } + ).join(quote {,}); + f"({field_signatures})".quoted_contents() + } else { + panic(f"Unsupported type {typ}") + } +} + +trait AsStrQuote { + fn as_str_quote(self) -> Self; +} + +impl AsStrQuote for Quoted { + // Used to convert an arbirary quoted type into a quoted string, removing whitespace between tokens + comptime fn as_str_quote(self) -> Quoted { + let tokens = self.tokens(); + let mut acc: [u8] = &[]; + let mut total_len: u32 = 0; + for token in tokens { + let token_as_fmt_str = f"{token}"; + let token_as_str = unquote!(quote {$token_as_fmt_str}); + let token_len = unquote!(quote { $token_as_str.as_bytes().len() }); + let token_as_bytes = unquote!(quote { $token_as_str.as_bytes().as_slice() }); + total_len += token_len; + acc = acc.append(token_as_bytes); + } + let result = unquote!( + quote { + let signature_as_array: [u8; $total_len] = $acc.as_array(); + signature_as_array.as_str_unchecked() + } + ); + quote { $result } + } +} + +pub(crate) comptime fn compute_fn_selector(f: FunctionDefinition) -> Field { + // The function selector is computed from the function signature, which is made up of the function name and types of + // parameters, but not including the return type. For example, given: + // + // fn foo(a: Field, b: AztecAddress) -> Field + // + // The signature will be "foo(Field,AztecAddress)". + + let fn_name = f.name(); + let args_signatures = f.parameters().map( + | (_, typ): (Quoted, Type) | { + signature_of_type(typ) + } + ).join(quote {,}); + let signature_quote = quote { $fn_name($args_signatures) }; + let signature_str_quote = signature_quote.as_str_quote(); + + let computation_quote = quote { + protocol_types::abis::function_selector::FunctionSelector::from_signature($signature_str_quote).to_field() + }; + unquote!(computation_quote) +} + +pub(crate) comptime fn compute_event_selector(s: StructDefinition) -> Field { + // The event selector is computed from the type signature of the struct in the event, similar to how one might type + // the constructor function. For example, given: + // + // struct Foo { + // a: Field, + // b: AztecAddress, + // } + // + // The signature will be "Foo(Field,AztecAddress)". + + let event_name = s.name(); + let args_signatures = s.fields().map( + | (_, typ): (Quoted, Type) | { + signature_of_type(typ) // signature_of_type can handle structs, so this supports nested structs + } + ).join(quote {,}); + let signature_quote = quote { $event_name($args_signatures) }; + let signature_str_quote = signature_quote.as_str_quote(); + + let computation_quote = quote { + protocol_types::abis::event_selector::EventSelector::from_signature($signature_str_quote).to_field() + }; + unquote!(computation_quote) +} + +pub(crate) comptime fn get_serialized_size(typ: Type) -> u32 { + let any = fresh_type_variable(); + let maybe_serialize_impl = typ.get_trait_impl(quote { protocol_types::traits::Serialize<$any> }.as_trait_constraint()); + + maybe_serialize_impl.expect(f"Attempted to fetch serialization length, but {typ} does not implement the Serialize trait").trait_generic_args()[0].as_constant().unwrap() +} + +pub(crate) comptime fn module_has_storage(m: Module) -> bool { + m.structs().any( + |s: StructDefinition| s.has_named_attribute("storage") | s.has_named_attribute("storage_no_init") + ) +} + +pub(crate) comptime fn module_has_initializer(m: Module) -> bool { + m.functions().any(|f: FunctionDefinition| is_fn_initializer(f)) +} + +pub(crate) comptime fn is_note(typ: Type) -> bool { + typ.as_struct().map_or( + false, + | struc: (StructDefinition, [Type]) | { + let (def, _) = struc; + def.has_named_attribute("note") | def.has_named_attribute("partial_note") | def.has_named_attribute("note_custom_interface") + } + ) +} diff --git a/noir-projects/aztec-nr/aztec/src/note/constants.nr b/noir-projects/aztec-nr/aztec/src/note/constants.nr index 3b238572e90..f948e023f88 100644 --- a/noir-projects/aztec-nr/aztec/src/note/constants.nr +++ b/noir-projects/aztec-nr/aztec/src/note/constants.nr @@ -1,6 +1,6 @@ -global MAX_NOTE_FIELDS_LENGTH: u64 = 20; +global MAX_NOTE_FIELDS_LENGTH: u32 = 20; // The plus 1 is 1 extra field for nonce. // + 2 for EXTRA_DATA: [number_of_return_notes, contract_address] -global GET_NOTE_ORACLE_RETURN_LENGTH: u64 = MAX_NOTE_FIELDS_LENGTH + 1 + 2; -global MAX_NOTES_PER_PAGE: u64 = 10; -global VIEW_NOTE_ORACLE_RETURN_LENGTH: u64 = MAX_NOTES_PER_PAGE * (MAX_NOTE_FIELDS_LENGTH + 1) + 2; +global GET_NOTE_ORACLE_RETURN_LENGTH: u32 = MAX_NOTE_FIELDS_LENGTH + 1 + 2; +global MAX_NOTES_PER_PAGE: u32 = 10; +global VIEW_NOTE_ORACLE_RETURN_LENGTH: u32 = MAX_NOTES_PER_PAGE * (MAX_NOTE_FIELDS_LENGTH + 1) + 2; diff --git a/noir-projects/aztec-nr/aztec/src/note/lifecycle.nr b/noir-projects/aztec-nr/aztec/src/note/lifecycle.nr index 5253b37ddd2..58321fff061 100644 --- a/noir-projects/aztec-nr/aztec/src/note/lifecycle.nr +++ b/noir-projects/aztec-nr/aztec/src/note/lifecycle.nr @@ -1,23 +1,22 @@ use crate::context::{PrivateContext, PublicContext}; use crate::note::{ - note_header::NoteHeader, note_interface::NoteInterface, + note_header::NoteHeader, note_interface::{NoteInterface, NullifiableNote}, utils::{compute_note_hash_for_read_request, compute_note_hash_for_nullify_internal}, note_emission::NoteEmission }; use crate::oracle::notes::{notify_created_note, notify_nullified_note}; -pub fn create_note( +pub fn create_note( context: &mut PrivateContext, storage_slot: Field, note: &mut Note -) -> NoteEmission where Note: NoteInterface { +) -> NoteEmission where Note: NoteInterface + NullifiableNote { let contract_address = (*context).this_address(); let note_hash_counter = context.side_effect_counter; let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter }; note.set_header(header); - // TODO(#7771): inject compute_note_hash(...) func to notes with macros. - let note_hash = note.compute_note_hiding_point().x; + let note_hash = note.compute_note_hash(); let serialized_note = Note::serialize_content(*note); assert( @@ -36,36 +35,35 @@ pub fn create_note( NoteEmission::new(*note) } -pub fn create_note_hash_from_public( +pub fn create_note_hash_from_public( context: &mut PublicContext, storage_slot: Field, note: &mut Note -) where Note: NoteInterface { +) where Note: NoteInterface + NullifiableNote { let contract_address = (*context).this_address(); // Public note hashes are transient, but have no side effect counters, so we just need note_hash_counter != 0 let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter: 1 }; note.set_header(header); - // TODO(#7771): inject compute_note_hash(...) func to notes with macros. - let note_hash = note.compute_note_hiding_point().x; + let note_hash = note.compute_note_hash(); context.push_note_hash(note_hash); } // Note: This function is currently totally unused. -pub fn destroy_note( +pub fn destroy_note( context: &mut PrivateContext, note: Note -) where Note: NoteInterface { +) where Note: NoteInterface + NullifiableNote { let note_hash_for_read_request = compute_note_hash_for_read_request(note); destroy_note_unsafe(context, note, note_hash_for_read_request) } -pub fn destroy_note_unsafe( +pub fn destroy_note_unsafe( context: &mut PrivateContext, note: Note, note_hash_for_read_request: Field -) where Note: NoteInterface { +) where Note: NoteInterface + NullifiableNote { let note_hash_for_nullify = compute_note_hash_for_nullify_internal(note, note_hash_for_read_request); let nullifier = note.compute_nullifier(context, note_hash_for_nullify); diff --git a/noir-projects/aztec-nr/aztec/src/note/note_emission.nr b/noir-projects/aztec-nr/aztec/src/note/note_emission.nr index dd2622ff5eb..2c89b39b7e8 100644 --- a/noir-projects/aztec-nr/aztec/src/note/note_emission.nr +++ b/noir-projects/aztec-nr/aztec/src/note/note_emission.nr @@ -2,7 +2,7 @@ * A note emission struct containing the information required for emitting a note. * The exact `emit` logic is passed in by the application code */ -struct NoteEmission { +pub struct NoteEmission { note: Note } @@ -23,10 +23,10 @@ impl NoteEmission { * This is the struct provided to application codes, which can be used to emit * only when a note was actually inserted. * It is fairly common to have cases where a function conditionally inserts, - * and this allows us to keep the same API for emission in both cases (e.g. inserting + * and this allows us to keep the same API for emission in both cases (e.g. inserting * a change note in a token's transfer function only when there is "change" left). */ -struct OuterNoteEmission { +pub struct OuterNoteEmission { emission: Option>, } diff --git a/noir-projects/aztec-nr/aztec/src/note/note_getter/mod.nr b/noir-projects/aztec-nr/aztec/src/note/note_getter/mod.nr index 8162c7002ac..615609690e6 100644 --- a/noir-projects/aztec-nr/aztec/src/note/note_getter/mod.nr +++ b/noir-projects/aztec-nr/aztec/src/note/note_getter/mod.nr @@ -3,7 +3,7 @@ use crate::context::PrivateContext; use crate::note::{ constants::{GET_NOTE_ORACLE_RETURN_LENGTH, VIEW_NOTE_ORACLE_RETURN_LENGTH}, note_getter_options::{NoteGetterOptions, Select, Sort, SortOrder, NoteStatus, PropertySelector}, - note_interface::NoteInterface, note_viewer_options::NoteViewerOptions, + note_interface::{NoteInterface, NullifiableNote}, note_viewer_options::NoteViewerOptions, utils::compute_note_hash_for_read_request }; use crate::oracle; @@ -34,11 +34,11 @@ fn extract_property_value_from_selector( value_field } -fn check_note_header( +fn check_note_header( context: PrivateContext, storage_slot: Field, note: Note -) where Note: NoteInterface { +) where Note: NoteInterface { let header = note.get_header(); let contract_address = context.this_address(); assert(header.contract_address.eq(contract_address), "Mismatch note header contract address."); @@ -78,10 +78,10 @@ fn check_notes_order( } } -pub fn get_note( +pub fn get_note( context: &mut PrivateContext, storage_slot: Field -) -> (Note, Field) where Note: NoteInterface { +) -> (Note, Field) where Note: NoteInterface + NullifiableNote { let note = unsafe { get_note_internal(storage_slot) }; @@ -96,11 +96,11 @@ pub fn get_note( (note, note_hash_for_read_request) } -pub fn get_notes( +pub fn get_notes( context: &mut PrivateContext, storage_slot: Field, - options: NoteGetterOptions -) -> (BoundedVec, BoundedVec) where Note: NoteInterface + Eq { + options: NoteGetterOptions +) -> (BoundedVec, BoundedVec) where Note: NoteInterface + NullifiableNote + Eq { let opt_notes = unsafe { get_notes_internal(storage_slot, options) }; @@ -118,12 +118,12 @@ unconstrained fn apply_preprocessor( preprocessor(notes, preprocessor_args) } -fn constrain_get_notes_internal( +fn constrain_get_notes_internal( context: &mut PrivateContext, storage_slot: Field, opt_notes: [Option; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL], - options: NoteGetterOptions -) -> (BoundedVec, BoundedVec) where Note: NoteInterface + Eq { + options: NoteGetterOptions +) -> (BoundedVec, BoundedVec) where Note: NoteInterface + NullifiableNote + Eq { // The filter is applied first to avoid pushing note read requests for notes we're not interested in. Note that // while the filter function can technically mutate the contents of the notes (as opposed to simply removing some), // the private kernel will later validate that these note actually exist, so transformations would cause for that @@ -163,7 +163,7 @@ fn constrain_get_notes_internal(storage_slot: Field) -> Note where Note: NoteInterface { +unconstrained fn get_note_internal(storage_slot: Field) -> Note where Note: NoteInterface { let placeholder_note = [Option::none()]; let placeholder_fields = [0; GET_NOTE_ORACLE_RETURN_LENGTH]; let placeholder_note_length = [0; N]; @@ -185,13 +185,13 @@ unconstrained fn get_note_internal(storage_slot: F placeholder_note, placeholder_fields, placeholder_note_length - )[0].unwrap() // Notice: we don't allow dummies to be returned from get_note (singular). + )[0].expect(f"Failed to get a note") // Notice: we don't allow dummies to be returned from get_note (singular). } -unconstrained fn get_notes_internal( +unconstrained fn get_notes_internal( storage_slot: Field, - options: NoteGetterOptions -) -> [Option; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] where Note: NoteInterface { + options: NoteGetterOptions +) -> [Option; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] where Note: NoteInterface { // This function simply performs some transformations from NoteGetterOptions into the types required by the oracle. let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) = flatten_options(options.selects, options.sorts); @@ -222,10 +222,10 @@ unconstrained fn get_notes_internal( +unconstrained pub fn view_notes( storage_slot: Field, - options: NoteViewerOptions -) -> BoundedVec where Note: NoteInterface { + options: NoteViewerOptions +) -> BoundedVec where Note: NoteInterface { let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) = flatten_options(options.selects, options.sorts); let placeholder_opt_notes = [Option::none(); MAX_NOTES_PER_PAGE]; let placeholder_fields = [0; VIEW_NOTE_ORACLE_RETURN_LENGTH]; diff --git a/noir-projects/aztec-nr/aztec/src/note/note_getter/test.nr b/noir-projects/aztec-nr/aztec/src/note/note_getter/test.nr index a2f4b162547..c25608bc0d6 100644 --- a/noir-projects/aztec-nr/aztec/src/note/note_getter/test.nr +++ b/noir-projects/aztec-nr/aztec/src/note/note_getter/test.nr @@ -12,15 +12,15 @@ use crate::utils::comparison::Comparator; global storage_slot: Field = 42; -fn setup() -> TestEnvironment { +unconstrained fn setup() -> TestEnvironment { TestEnvironment::new() } -fn build_valid_note(value: Field) -> MockNote { +unconstrained fn build_valid_note(value: Field) -> MockNote { MockNote::new(value).contract_address(get_contract_address()).storage_slot(storage_slot).build() } -fn assert_equivalent_vec_and_array( +unconstrained fn assert_equivalent_vec_and_array( vec: BoundedVec, arr: [Option; N] ) where T: Eq { @@ -37,7 +37,7 @@ fn assert_equivalent_vec_and_array( } #[test] -fn processes_single_note() { +unconstrained fn processes_single_note() { let mut env = setup(); let mut context = env.private(); @@ -52,7 +52,7 @@ fn processes_single_note() { } #[test] -fn processes_many_notes() { +unconstrained fn processes_many_notes() { let mut env = setup(); let mut context = env.private(); @@ -68,7 +68,7 @@ fn processes_many_notes() { } #[test] -fn collapses_notes_at_the_beginning_of_the_array() { +unconstrained fn collapses_notes_at_the_beginning_of_the_array() { let mut env = setup(); let mut context = env.private(); @@ -94,7 +94,8 @@ fn collapses_notes_at_the_beginning_of_the_array() { assert_equivalent_vec_and_array(returned, expected); } -fn can_return_zero_notes() { +#[test] +unconstrained fn can_return_zero_notes() { let mut env = setup(); let mut context = env.private(); @@ -106,7 +107,7 @@ fn can_return_zero_notes() { } #[test(should_fail_with="Got more notes than limit.")] -fn rejects_mote_notes_than_limit() { +unconstrained fn rejects_mote_notes_than_limit() { let mut env = setup(); let mut context = env.private(); @@ -121,7 +122,7 @@ fn rejects_mote_notes_than_limit() { } #[test] -fn applies_filter_before_constraining() { +unconstrained fn applies_filter_before_constraining() { let mut env = setup(); let mut context = env.private(); @@ -155,7 +156,7 @@ fn applies_filter_before_constraining() { } #[test(should_fail_with="Mismatch note header contract address.")] -fn rejects_mismatched_address() { +unconstrained fn rejects_mismatched_address() { let mut env = setup(); let mut context = env.private(); @@ -169,7 +170,7 @@ fn rejects_mismatched_address() { } #[test(should_fail_with="Mismatch note header storage slot.")] -fn rejects_mismatched_storage_slot() { +unconstrained fn rejects_mismatched_storage_slot() { let mut env = setup(); let mut context = env.private(); @@ -183,7 +184,7 @@ fn rejects_mismatched_storage_slot() { } #[test(should_fail_with="Mismatch return note field.")] -fn rejects_mismatched_selector() { +unconstrained fn rejects_mismatched_selector() { let mut env = setup(); let mut context = env.private(); @@ -204,7 +205,7 @@ fn rejects_mismatched_selector() { } #[test(should_fail_with="Return notes not sorted in descending order.")] -fn rejects_mismatched_desc_sort_order() { +unconstrained fn rejects_mismatched_desc_sort_order() { let mut env = setup(); let mut context = env.private(); @@ -222,7 +223,7 @@ fn rejects_mismatched_desc_sort_order() { } #[test(should_fail_with="Return notes not sorted in ascending order.")] -fn rejects_mismatched_asc_sort_order() { +unconstrained fn rejects_mismatched_asc_sort_order() { let mut env = setup(); let mut context = env.private(); diff --git a/noir-projects/aztec-nr/aztec/src/note/note_getter_options.nr b/noir-projects/aztec-nr/aztec/src/note/note_getter_options.nr index 7c2ff74a4ab..01145a45860 100644 --- a/noir-projects/aztec-nr/aztec/src/note/note_getter_options.nr +++ b/noir-projects/aztec-nr/aztec/src/note/note_getter_options.nr @@ -2,13 +2,13 @@ use std::option::Option; use dep::protocol_types::{constants::MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, traits::ToField}; use crate::note::note_interface::NoteInterface; -struct PropertySelector { - index: u8, - offset: u8, - length: u8, +pub struct PropertySelector { + index: u8, // index of the field in the serialized note array + offset: u8, // offset in the byte representation of the field (selected with index above) from which to reading + length: u8, // number of bytes to read after the offset } -struct Select { +pub struct Select { property_selector: PropertySelector, comparator: u8, value: Field, @@ -22,7 +22,7 @@ impl Select { } } -struct SortOrderEnum { +pub struct SortOrderEnum { DESC: u8, ASC: u8, } @@ -32,7 +32,7 @@ global SortOrder = SortOrderEnum { ASC: 2, }; -struct Sort { +pub struct Sort { property_selector: PropertySelector, order: u8, } @@ -43,7 +43,7 @@ impl Sort { } } -struct NoteStatusEnum { +pub struct NoteStatusEnum { ACTIVE: u8, ACTIVE_OR_NULLIFIED: u8, } @@ -54,6 +54,7 @@ global NoteStatus = NoteStatusEnum { // TODO 4217: add 'NULLIFIED' }; +// This is the default filter and preprocessor, which does nothing fn return_all_notes( notes: [Option; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL], _p: Field @@ -62,7 +63,7 @@ fn return_all_notes( } // docs:start:NoteGetterOptions -struct NoteGetterOptions { +pub struct NoteGetterOptions { selects: BoundedVec, N>, sorts: BoundedVec, N>, limit: u32, @@ -83,7 +84,7 @@ struct NoteGetterOptions NoteGetterOptions { +impl NoteGetterOptions { // This method adds a `Select` criterion to the options. // It takes a property_selector indicating which field to select, // a value representing the specific value to match in that field, and @@ -129,7 +130,7 @@ impl NoteGetterOpt } } -impl NoteGetterOptions where Note: NoteInterface { +impl NoteGetterOptions where Note: NoteInterface { // This function initializes a NoteGetterOptions that simply returns the maximum number of notes allowed in a call. pub fn new() -> Self { Self { @@ -146,7 +147,7 @@ impl NoteGetterOptions w } } -impl NoteGetterOptions where Note: NoteInterface { +impl NoteGetterOptions where Note: NoteInterface { // This function initializes a NoteGetterOptions with a preprocessor, which takes the notes returned from // the database and preprocessor_args as its parameters. // `preprocessor_args` allows you to provide additional data or context to the custom preprocessor. @@ -168,7 +169,7 @@ impl NoteGetterOptions NoteGetterOptions where Note: NoteInterface { +impl NoteGetterOptions where Note: NoteInterface { // This function initializes a NoteGetterOptions with a filter, which takes // the notes returned from the database and filter_args as its parameters. // `filter_args` allows you to provide additional data or context to the custom filter. diff --git a/noir-projects/aztec-nr/aztec/src/note/note_header.nr b/noir-projects/aztec-nr/aztec/src/note/note_header.nr index 2c20777fd4d..0308a9a5b6e 100644 --- a/noir-projects/aztec-nr/aztec/src/note/note_header.nr +++ b/noir-projects/aztec-nr/aztec/src/note/note_header.nr @@ -1,8 +1,8 @@ use dep::protocol_types::{address::AztecAddress, traits::{Empty, Serialize}}; -global NOTE_HEADER_LENGTH: Field = 4; +global NOTE_HEADER_LENGTH: u32 = 4; -struct NoteHeader { +pub struct NoteHeader { contract_address: AztecAddress, nonce: Field, storage_slot: Field, diff --git a/noir-projects/aztec-nr/aztec/src/note/note_interface.nr b/noir-projects/aztec-nr/aztec/src/note/note_interface.nr index 7631d30da12..0ec39088aad 100644 --- a/noir-projects/aztec-nr/aztec/src/note/note_interface.nr +++ b/noir-projects/aztec-nr/aztec/src/note/note_interface.nr @@ -1,9 +1,15 @@ use crate::context::PrivateContext; use crate::note::note_header::NoteHeader; -use dep::protocol_types::point::Point; -// docs:start:note_interface -trait NoteInterface { +pub trait NoteProperties { + fn properties() -> T; +} + +pub trait PartialNote { + fn hiding_point() -> T; +} + +pub trait NullifiableNote { // This function MUST be called with the correct note hash for consumption! It will otherwise silently fail and // compute an incorrect value. // The reason why we receive this as an argument instead of computing it ourselves directly is because the @@ -13,28 +19,32 @@ trait NoteInterface { // Unlike compute_nullifier, this function does not take a note hash since it'll only be invoked in unconstrained // contexts, where there is no gate count. - fn compute_nullifier_without_context(self) -> Field; - - // Autogenerated by the #[aztec(note)] macro unless it is overridden by a custom implementation + unconstrained fn compute_nullifier_without_context(self) -> Field; +} + +// docs:start:note_interface +// Autogenerated by the #[note] macro + +pub trait NoteInterface { + // Autogenerated by the #[note] macro fn serialize_content(self) -> [Field; N]; - // Autogenerated by the #[aztec(note)] macro unless it is overridden by a custom implementation + // Autogenerated by the #[note] macro fn deserialize_content(fields: [Field; N]) -> Self; - // Autogenerated by the #[aztec(note)] macro unless it is overridden by a custom implementation - fn compute_note_hiding_point(self) -> Point; - - // Autogenerated by the #[aztec(note)] macro unless it is overridden by a custom implementation + // Autogenerated by the #[note] macro fn get_header(self) -> NoteHeader; - // Autogenerated by the #[aztec(note)] macro unless it is overridden by a custom implementation + // Autogenerated by the #[note] macro fn set_header(&mut self, header: NoteHeader) -> (); - // Autogenerated by the #[aztec(note)] macro unless it is overridden by a custom implementation + // Autogenerated by the #[note] macro fn get_note_type_id() -> Field; - // Autogenerated by the #[aztec(note)] macro unless it is overridden by a custom implementation - fn to_be_bytes(self, storage_slot: Field) -> [u8; M]; + // Autogenerated by the #[note] macro + fn to_be_bytes(self, storage_slot: Field) -> [u8; N*32 + 64]; + + // Autogenerated by the #[note] macro + fn compute_note_hash(self) -> Field; } // docs:end:note_interface - diff --git a/noir-projects/aztec-nr/aztec/src/note/note_viewer_options.nr b/noir-projects/aztec-nr/aztec/src/note/note_viewer_options.nr index f8dca021500..0e5769b6fe1 100644 --- a/noir-projects/aztec-nr/aztec/src/note/note_viewer_options.nr +++ b/noir-projects/aztec-nr/aztec/src/note/note_viewer_options.nr @@ -5,7 +5,7 @@ use crate::note::note_interface::NoteInterface; use crate::note::constants::MAX_NOTES_PER_PAGE; // docs:start:NoteViewerOptions -struct NoteViewerOptions { +pub struct NoteViewerOptions { selects: BoundedVec, N>, sorts: BoundedVec, N>, limit: u32, @@ -14,8 +14,8 @@ struct NoteViewerOptions { } // docs:end:NoteViewerOptions -impl NoteViewerOptions { - pub fn new() -> NoteViewerOptions where Note: NoteInterface { +impl NoteViewerOptions { + pub fn new() -> NoteViewerOptions where Note: NoteInterface { NoteViewerOptions { selects: BoundedVec::new(), sorts: BoundedVec::new(), diff --git a/noir-projects/aztec-nr/aztec/src/note/utils.nr b/noir-projects/aztec-nr/aztec/src/note/utils.nr index 75cb366afe7..7b2f671f6ed 100644 --- a/noir-projects/aztec-nr/aztec/src/note/utils.nr +++ b/noir-projects/aztec-nr/aztec/src/note/utils.nr @@ -1,4 +1,7 @@ -use crate::{context::PrivateContext, note::{note_header::NoteHeader, note_interface::NoteInterface}}; +use crate::{ + context::PrivateContext, + note::{note_header::NoteHeader, note_interface::{NullifiableNote, NoteInterface}} +}; use dep::protocol_types::{ hash::{ @@ -8,10 +11,10 @@ use dep::protocol_types::{ utils::arr_copy_slice }; -pub fn compute_siloed_nullifier( +pub fn compute_siloed_nullifier( note_with_header: Note, context: &mut PrivateContext -) -> Field where Note: NoteInterface { +) -> Field where Note: NoteInterface + NullifiableNote { let header = note_with_header.get_header(); let note_hash_for_nullify = compute_note_hash_for_nullify(note_with_header); let inner_nullifier = note_with_header.compute_nullifier(context, note_hash_for_nullify); @@ -20,9 +23,8 @@ pub fn compute_siloed_nullifier( } // TODO(#7775): make this not impossible to understand -pub fn compute_note_hash_for_read_request(note: Note) -> Field where Note: NoteInterface { - // TODO(#7771): inject compute_note_hash(...) func to notes with macros. - let note_hash = note.compute_note_hiding_point().x; +pub fn compute_note_hash_for_read_request(note: Note) -> Field where Note: NoteInterface + NullifiableNote { + let note_hash = note.compute_note_hash(); let nonce = note.get_header().nonce; let counter = note.get_header().note_hash_counter; @@ -34,10 +36,10 @@ pub fn compute_note_hash_for_read_request(note: No } // TODO(#7775): make this not impossible to understand -pub fn compute_note_hash_for_nullify_internal( +pub fn compute_note_hash_for_nullify_internal( note: Note, note_hash_for_read_request: Field -) -> Field where Note: NoteInterface { +) -> Field where Note: NoteInterface + NullifiableNote { let header = note.get_header(); if header.note_hash_counter != 0 { @@ -57,16 +59,15 @@ pub fn compute_note_hash_for_nullify_internal( } // TODO(#7775): nuke this commented out code - kept it around as it contains comments which might be helpful when tackling #7775 -// pub fn compute_note_hash_for_nullify(note: Note) -> Field where Note: NoteInterface { +// pub fn compute_note_hash_for_nullify(note: Note) -> Field where Note: NoteInterface { // let header = note.get_header(); // // There are 3 cases for reading a note intended for consumption: -// // 1. The note was inserted in this transaction, is revertible, or is not nullified by a revertible nullifier in +// // 1. The note was inserted in this transaction, is revertible, or is not nullified by a revertible nullifier in // // the same transaction: (note_hash_counter != 0) & (nonce == 0) -// // 2. The note was inserted in this transaction, is non-revertible, and is nullified by a revertible nullifier in +// // 2. The note was inserted in this transaction, is non-revertible, and is nullified by a revertible nullifier in // // the same transaction: (note_hash_counter != 0) & (nonce != 0) // // 3. The note was inserted in a previous transaction: (note_hash_counter == 0) & (nonce != 0) -// // TODO(#7771): inject compute_note_hash(...) func to notes with macros. // let note_hash = note.compute_note_hiding_point().x; // if header.nonce == 0 { @@ -74,15 +75,15 @@ pub fn compute_note_hash_for_nullify_internal( // // If a note is transient, we just read the note_hash (kernel will hash it with nonce and silo by contract address). // note_hash // } else { -// // Case 2: If a note is non-revertible, and is nullified by a revertible nullifier, we cannot squash them in the -// // private reset circuit. Because if the tx reverts, we will have to keep the note hash and throw away the +// // Case 2: If a note is non-revertible, and is nullified by a revertible nullifier, we cannot squash them in the +// // private reset circuit. Because if the tx reverts, we will have to keep the note hash and throw away the // // nullifier. // // And if the tx does not revert, both will be emitted. In which case, the nullifier must be created in the app // // from the siloed note hash. // // The kernel circuit will check that a nullifier with non-zero note_nonce is linked to a note hash, whose // // siloed note hash matches the note hash specified in the nullifier. -// // Case 3: If a note is not from the current transaction, that means we are reading a settled note (from +// // Case 3: If a note is not from the current transaction, that means we are reading a settled note (from // // tree) created in a previous TX. So we need the siloed_note_hash which has already been hashed with // // nonce and then contract address. This hash will match the existing leaf in the note hash // // tree, so the kernel can just perform a membership check directly on this hash/leaf. @@ -99,22 +100,21 @@ pub fn compute_note_hash_for_nullify_internal( // } // } -pub fn compute_note_hash_for_nullify(note: Note) -> Field where Note: NoteInterface { +pub fn compute_note_hash_for_nullify(note: Note) -> Field where Note: NoteInterface + NullifiableNote { let note_hash_for_read_request = compute_note_hash_for_read_request(note); compute_note_hash_for_nullify_internal(note, note_hash_for_read_request) } -pub fn compute_note_hash_and_optionally_a_nullifier( +pub fn compute_note_hash_and_optionally_a_nullifier( deserialize_content: fn([Field; N]) -> T, note_header: NoteHeader, compute_nullifier: bool, serialized_note: [Field; S] -) -> [Field; 4] where T: NoteInterface { +) -> [Field; 4] where T: NoteInterface + NullifiableNote { let mut note = deserialize_content(arr_copy_slice(serialized_note, [0; N], 0)); note.set_header(note_header); - // TODO(#7771): inject compute_note_hash(...) func to notes with macros. - let note_hash = note.compute_note_hiding_point().x; + let note_hash = note.compute_note_hash(); let unique_note_hash = compute_unique_note_hash(note_header.nonce, note_hash); let siloed_note_hash = compute_siloed_note_hash(note_header.contract_address, unique_note_hash); diff --git a/noir-projects/aztec-nr/aztec/src/oracle/get_l1_to_l2_membership_witness.nr b/noir-projects/aztec-nr/aztec/src/oracle/get_l1_to_l2_membership_witness.nr index 38e81094b2b..0a93fa3f8f2 100644 --- a/noir-projects/aztec-nr/aztec/src/oracle/get_l1_to_l2_membership_witness.nr +++ b/noir-projects/aztec-nr/aztec/src/oracle/get_l1_to_l2_membership_witness.nr @@ -1,6 +1,6 @@ -use dep::protocol_types::{address::AztecAddress}; +use dep::protocol_types::address::AztecAddress; -global L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH: u64 = 17; +global L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH: u32 = 17; // Obtains membership witness (index and sibling path) for a message in the L1 to L2 message tree. #[oracle(getL1ToL2MembershipWitness)] diff --git a/noir-projects/aztec-nr/aztec/src/oracle/get_membership_witness.nr b/noir-projects/aztec-nr/aztec/src/oracle/get_membership_witness.nr index 125848fd25d..9aeb08f8265 100644 --- a/noir-projects/aztec-nr/aztec/src/oracle/get_membership_witness.nr +++ b/noir-projects/aztec-nr/aztec/src/oracle/get_membership_witness.nr @@ -10,7 +10,7 @@ global ARCHIVE_TREE_ID = 4; // // Another way to do it would be to add "type_hint: [Field; T]" as argument to `get_membership_witness` but that's // a bit too boilerplatey for my taste. -struct MembershipWitness { +pub struct MembershipWitness { index: Field, path: [Field; N], } diff --git a/noir-projects/aztec-nr/aztec/src/oracle/get_nullifier_membership_witness.nr b/noir-projects/aztec-nr/aztec/src/oracle/get_nullifier_membership_witness.nr index 5050988fee2..92031f28785 100644 --- a/noir-projects/aztec-nr/aztec/src/oracle/get_nullifier_membership_witness.nr +++ b/noir-projects/aztec-nr/aztec/src/oracle/get_nullifier_membership_witness.nr @@ -4,9 +4,9 @@ use dep::protocol_types::{ }; // INDEX_LENGTH + NULLIFIER_LEAF_PREIMAGE_LENGTH + NULLIFIER_TREE_HEIGHT -global NULLIFIER_MEMBERSHIP_WITNESS: Field = 24; +global NULLIFIER_MEMBERSHIP_WITNESS: u32 = 24; -struct NullifierMembershipWitness { +pub struct NullifierMembershipWitness { index: Field, leaf_preimage: NullifierLeafPreimage, path: [Field; NULLIFIER_TREE_HEIGHT], diff --git a/noir-projects/aztec-nr/aztec/src/oracle/get_public_data_witness.nr b/noir-projects/aztec-nr/aztec/src/oracle/get_public_data_witness.nr index 8c0f76f5eb8..1db5554f9aa 100644 --- a/noir-projects/aztec-nr/aztec/src/oracle/get_public_data_witness.nr +++ b/noir-projects/aztec-nr/aztec/src/oracle/get_public_data_witness.nr @@ -1,9 +1,9 @@ use dep::protocol_types::{constants::PUBLIC_DATA_TREE_HEIGHT, data::PublicDataTreeLeafPreimage, utils::arr_copy_slice}; global LEAF_PREIMAGE_LENGTH: u32 = 4; -global PUBLIC_DATA_WITNESS: Field = 45; +global PUBLIC_DATA_WITNESS: u32 = 45; -struct PublicDataWitness { +pub struct PublicDataWitness { index: Field, leaf_preimage: PublicDataTreeLeafPreimage, path: [Field; PUBLIC_DATA_TREE_HEIGHT], diff --git a/noir-projects/aztec-nr/aztec/src/oracle/header.nr b/noir-projects/aztec-nr/aztec/src/oracle/header.nr index 444419ccec4..32c570026ec 100644 --- a/noir-projects/aztec-nr/aztec/src/oracle/header.nr +++ b/noir-projects/aztec-nr/aztec/src/oracle/header.nr @@ -78,7 +78,7 @@ fn constrain_get_header_at_internal( } #[test(should_fail_with = "Block number provided is not the same as the block number from the header hint")] -fn fetching_a_valid_but_different_header_should_fail() { +unconstrained fn fetching_a_valid_but_different_header_should_fail() { let mut env = TestEnvironment::new(); env.advance_block_to(3); diff --git a/noir-projects/aztec-nr/aztec/src/oracle/logs_traits.nr b/noir-projects/aztec-nr/aztec/src/oracle/logs_traits.nr index 9417dfe6224..c8de6c54971 100644 --- a/noir-projects/aztec-nr/aztec/src/oracle/logs_traits.nr +++ b/noir-projects/aztec-nr/aztec/src/oracle/logs_traits.nr @@ -1,5 +1,6 @@ use dep::protocol_types::address::AztecAddress; +// TODO(#8548): We have arithmetics over generics now so this file can be nuked. // TODO: this is awful but since we can't have a fn that maps [Field; N] -> [u8; 416 + N * 32] // (where N is the note pre-image size and 416 + N * 32 is the encryption output size) // The fns for LensForEncryptedLog are never used, it's just to tell the compiler what the lens are @@ -9,111 +10,111 @@ use dep::protocol_types::address::AztecAddress; // I could have omitted N from the trait, but wanted to keep it strictly for field arrs // TODO(1139): Once we enc inside the circuit, we will no longer need the oracle to return // anything, so we can remove this trait -trait LensForEncryptedLog { +pub trait LensForEncryptedLog { // N = note preimage input in fields - // M = encryption output len in bytes (= 416 + N * 32) + // M = encryption output len in bytes (= 417 + N * 32) fn output_fields(self: [Field; N]) -> [Field; N]; fn output_bytes(self: [Field; N]) -> [u8; M]; } -impl LensForEncryptedLog<1, 448> for [Field; 1] { +impl LensForEncryptedLog<1, 449> for [Field; 1] { fn output_fields(self) -> [Field; 1] { [self[0]; 1] } - fn output_bytes(self) -> [u8; 448] { - [self[0] as u8; 448] + fn output_bytes(self) -> [u8; 449] { + [self[0] as u8; 449] } } -impl LensForEncryptedLog<2, 480> for [Field; 2] { +impl LensForEncryptedLog<2, 481> for [Field; 2] { fn output_fields(self) -> [Field; 2] { [self[0]; 2] } - fn output_bytes(self) -> [u8; 480] { - [self[0] as u8; 480] + fn output_bytes(self) -> [u8; 481] { + [self[0] as u8; 481] } } -impl LensForEncryptedLog<3, 512> for [Field; 3] { +impl LensForEncryptedLog<3, 513> for [Field; 3] { fn output_fields(self) -> [Field; 3] { [self[0]; 3] } - fn output_bytes(self) -> [u8; 512] { - [self[0] as u8; 512] + fn output_bytes(self) -> [u8; 513] { + [self[0] as u8; 513] } } -impl LensForEncryptedLog<4, 544> for [Field; 4] { +impl LensForEncryptedLog<4, 545> for [Field; 4] { fn output_fields(self) -> [Field; 4] { [self[0]; 4] } - fn output_bytes(self) -> [u8; 544] { - [self[0] as u8; 544] + fn output_bytes(self) -> [u8; 545] { + [self[0] as u8; 545] } } -impl LensForEncryptedLog<5, 576> for [Field; 5] { +impl LensForEncryptedLog<5, 577> for [Field; 5] { fn output_fields(self) -> [Field; 5] { [self[0]; 5] } - fn output_bytes(self) -> [u8; 576] { - [self[0] as u8; 576] + fn output_bytes(self) -> [u8; 577] { + [self[0] as u8; 577] } } -impl LensForEncryptedLog<6, 608> for [Field; 6] { +impl LensForEncryptedLog<6, 609> for [Field; 6] { fn output_fields(self) -> [Field; 6] { [self[0]; 6] } - fn output_bytes(self) -> [u8; 608] { - [self[0] as u8; 608] + fn output_bytes(self) -> [u8; 609] { + [self[0] as u8; 609] } } -impl LensForEncryptedLog<7, 640> for [Field; 7] { +impl LensForEncryptedLog<7, 641> for [Field; 7] { fn output_fields(self) -> [Field; 7] { [self[0]; 7] } - fn output_bytes(self) -> [u8; 640] { - [self[0] as u8; 640] + fn output_bytes(self) -> [u8; 641] { + [self[0] as u8; 641] } } -impl LensForEncryptedLog<8, 672> for [Field; 8] { +impl LensForEncryptedLog<8, 673> for [Field; 8] { fn output_fields(self) -> [Field; 8] { [self[0]; 8] } - fn output_bytes(self) -> [u8; 672] { - [self[0] as u8; 672] + fn output_bytes(self) -> [u8; 673] { + [self[0] as u8; 673] } } -impl LensForEncryptedLog<9, 704> for [Field; 9] { +impl LensForEncryptedLog<9, 705> for [Field; 9] { fn output_fields(self) -> [Field; 9] { [self[0]; 9] } - fn output_bytes(self) -> [u8; 704] { - [self[0] as u8; 704] + fn output_bytes(self) -> [u8; 705] { + [self[0] as u8; 705] } } -impl LensForEncryptedLog<10, 736> for [Field; 10] { +impl LensForEncryptedLog<10, 737> for [Field; 10] { fn output_fields(self) -> [Field; 10] { [self[0]; 10] } - fn output_bytes(self) -> [u8; 736] { - [self[0] as u8; 736] + fn output_bytes(self) -> [u8; 737] { + [self[0] as u8; 737] } } -impl LensForEncryptedLog<11, 768> for [Field; 11] { +impl LensForEncryptedLog<11, 769> for [Field; 11] { fn output_fields(self) -> [Field; 11] { [self[0]; 11] } - fn output_bytes(self) -> [u8; 768] { - [self[0] as u8; 768] + fn output_bytes(self) -> [u8; 769] { + [self[0] as u8; 769] } } -impl LensForEncryptedLog<12, 800> for [Field; 12] { +impl LensForEncryptedLog<12, 801> for [Field; 12] { fn output_fields(self) -> [Field; 12] { [self[0]; 12] } - fn output_bytes(self) -> [u8; 800] { - [self[0] as u8; 800] + fn output_bytes(self) -> [u8; 801] { + [self[0] as u8; 801] } } -trait LensForEncryptedEvent { +pub trait LensForEncryptedEvent { // N = event preimage input in bytes // M = encryption output len in bytes (= 416 + M) fn output(self: [u8; N]) -> [u8; M]; @@ -153,7 +154,7 @@ impl LensForEncryptedEvent<256, 608> for [u8; 256] { // This trait defines the length of the inputs in bytes to // the unencrypted log hash fn, where the log can be any type T // as long as the ACVM can convert to fields. -trait ToBytesForUnencryptedLog { +pub trait ToBytesForUnencryptedLog { // N = preimage input in bytes (32 * num fields or chars) // M = full log input in bytes ( = N + 40 = N + 32 for addr, + 4 for selector, + 4 for len) fn to_be_bytes_arr(self) -> [u8; N]; diff --git a/noir-projects/aztec-nr/aztec/src/oracle/notes.nr b/noir-projects/aztec-nr/aztec/src/oracle/notes.nr index b384ff82488..b3f95b57a4a 100644 --- a/noir-projects/aztec-nr/aztec/src/oracle/notes.nr +++ b/noir-projects/aztec-nr/aztec/src/oracle/notes.nr @@ -86,7 +86,7 @@ unconstrained fn get_notes_oracle_wrapper( ) } -unconstrained pub fn get_notes( +unconstrained pub fn get_notes( storage_slot: Field, num_selects: u8, select_by_indexes: [u8; M], @@ -104,7 +104,7 @@ unconstrained pub fn get_notes; S], // TODO: Remove it and use `limit` to initialize the note array. placeholder_fields: [Field; NS], // TODO: Remove it and use `limit` to initialize the note array. _placeholder_note_length: [Field; N] // Turbofish hack? Compiler breaks calculating read_offset unless we add this parameter -) -> [Option; S] where Note: NoteInterface { +) -> [Option; S] where Note: NoteInterface { let fields = get_notes_oracle_wrapper( storage_slot, num_selects, diff --git a/noir-projects/aztec-nr/aztec/src/oracle/storage.nr b/noir-projects/aztec-nr/aztec/src/oracle/storage.nr index 462740170ed..196aa5a275a 100644 --- a/noir-projects/aztec-nr/aztec/src/oracle/storage.nr +++ b/noir-projects/aztec-nr/aztec/src/oracle/storage.nr @@ -36,7 +36,7 @@ mod tests { global block_number = 17; #[test] - fn test_raw_storage_read() { + unconstrained fn test_raw_storage_read() { let written = MockStruct { a: 13, b: 42 }; let _ = OracleMock::mock("storageRead").returns(written.serialize()); @@ -47,7 +47,7 @@ mod tests { } #[test] - fn test_storage_read() { + unconstrained fn test_storage_read() { let written = MockStruct { a: 13, b: 42 }; let _ = OracleMock::mock("storageRead").returns(written.serialize()); diff --git a/noir-projects/aztec-nr/aztec/src/prelude.nr b/noir-projects/aztec-nr/aztec/src/prelude.nr index 21bac4ea1b4..793550c5668 100644 --- a/noir-projects/aztec-nr/aztec/src/prelude.nr +++ b/noir-projects/aztec-nr/aztec/src/prelude.nr @@ -11,8 +11,8 @@ pub use crate::{ }, context::{PrivateContext, PackedReturns, FunctionReturns}, note::{ - note_header::NoteHeader, note_interface::NoteInterface, note_getter_options::NoteGetterOptions, - note_viewer_options::NoteViewerOptions, + note_header::NoteHeader, note_interface::{NoteInterface, NullifiableNote}, + note_getter_options::NoteGetterOptions, note_viewer_options::NoteViewerOptions, utils::compute_note_hash_and_optionally_a_nullifier as utils_compute_note_hash_and_optionally_a_nullifier } }; diff --git a/noir-projects/aztec-nr/aztec/src/state_vars/map.nr b/noir-projects/aztec-nr/aztec/src/state_vars/map.nr index 5ca79f852b9..e4db34b7c18 100644 --- a/noir-projects/aztec-nr/aztec/src/state_vars/map.nr +++ b/noir-projects/aztec-nr/aztec/src/state_vars/map.nr @@ -2,7 +2,7 @@ use dep::protocol_types::{storage::map::derive_storage_slot_in_map, traits::ToFi use crate::state_vars::storage::Storage; // docs:start:map -struct Map { +pub struct Map { context: Context, storage_slot: Field, state_var_constructor: fn(Context, Field) -> V, @@ -33,4 +33,3 @@ impl Map { } // docs:end:at } - diff --git a/noir-projects/aztec-nr/aztec/src/state_vars/private_immutable.nr b/noir-projects/aztec-nr/aztec/src/state_vars/private_immutable.nr index 5510253e228..37e23170beb 100644 --- a/noir-projects/aztec-nr/aztec/src/state_vars/private_immutable.nr +++ b/noir-projects/aztec-nr/aztec/src/state_vars/private_immutable.nr @@ -2,14 +2,15 @@ use dep::protocol_types::{constants::GENERATOR_INDEX__INITIALIZATION_NULLIFIER, use crate::context::{PrivateContext, UnconstrainedContext}; use crate::note::{ - lifecycle::create_note, note_getter::{get_note, view_notes}, note_interface::NoteInterface, - note_viewer_options::NoteViewerOptions, note_emission::NoteEmission + lifecycle::create_note, note_getter::{get_note, view_notes}, + note_interface::{NoteInterface, NullifiableNote}, note_viewer_options::NoteViewerOptions, + note_emission::NoteEmission }; use crate::oracle::notes::check_nullifier_exists; use crate::state_vars::storage::Storage; // docs:start:struct -struct PrivateImmutable { +pub struct PrivateImmutable { context: Context, storage_slot: Field, } @@ -41,10 +42,10 @@ impl PrivateImmutable { impl PrivateImmutable { // docs:start:initialize - pub fn initialize( + pub fn initialize( self, note: &mut Note - ) -> NoteEmission where Note: NoteInterface { + ) -> NoteEmission where Note: NoteInterface + NullifiableNote { // Nullify the storage slot. let nullifier = self.compute_initialization_nullifier(); self.context.push_nullifier(nullifier); @@ -54,7 +55,7 @@ impl PrivateImmutable { // docs:end:initialize // docs:start:get_note - pub fn get_note(self) -> Note where Note: NoteInterface { + pub fn get_note(self) -> Note where Note: NoteInterface + NullifiableNote { let storage_slot = self.storage_slot; get_note(self.context, storage_slot).0 } @@ -71,7 +72,7 @@ impl PrivateImmutable { // view_note does not actually use the context, but it calls oracles that are only available in private // docs:start:view_note - unconstrained pub fn view_note(self) -> Note where Note: NoteInterface { + unconstrained pub fn view_note(self) -> Note where Note: NoteInterface + NullifiableNote { let mut options = NoteViewerOptions::new(); view_notes(self.storage_slot, options.set_limit(1)).get(0) } diff --git a/noir-projects/aztec-nr/aztec/src/state_vars/private_mutable.nr b/noir-projects/aztec-nr/aztec/src/state_vars/private_mutable.nr index 2a084b360a7..453f46b5515 100644 --- a/noir-projects/aztec-nr/aztec/src/state_vars/private_mutable.nr +++ b/noir-projects/aztec-nr/aztec/src/state_vars/private_mutable.nr @@ -3,13 +3,14 @@ use dep::protocol_types::{constants::GENERATOR_INDEX__INITIALIZATION_NULLIFIER, use crate::context::{PrivateContext, UnconstrainedContext}; use crate::note::{ lifecycle::{create_note, destroy_note_unsafe}, note_getter::{get_note, view_notes}, - note_interface::NoteInterface, note_viewer_options::NoteViewerOptions, note_emission::NoteEmission + note_interface::{NoteInterface, NullifiableNote}, note_viewer_options::NoteViewerOptions, + note_emission::NoteEmission }; use crate::oracle::notes::check_nullifier_exists; use crate::state_vars::storage::Storage; // docs:start:struct -struct PrivateMutable { +pub struct PrivateMutable { context: Context, storage_slot: Field } @@ -43,7 +44,7 @@ impl PrivateMutable { } } -impl PrivateMutable where Note: NoteInterface { +impl PrivateMutable where Note: NoteInterface + NullifiableNote { // docs:start:initialize pub fn initialize(self, note: &mut Note) -> NoteEmission { // Nullify the storage slot. @@ -102,7 +103,7 @@ impl PrivateMutable where Note: NoteInter // docs:end:get_note } -impl PrivateMutable where Note: NoteInterface { +impl PrivateMutable where Note: NoteInterface + NullifiableNote { unconstrained pub fn is_initialized(self) -> bool { let nullifier = self.compute_initialization_nullifier(); check_nullifier_exists(nullifier) diff --git a/noir-projects/aztec-nr/aztec/src/state_vars/private_mutable/test.nr b/noir-projects/aztec-nr/aztec/src/state_vars/private_mutable/test.nr index 49639eb0309..4277bd73730 100644 --- a/noir-projects/aztec-nr/aztec/src/state_vars/private_mutable/test.nr +++ b/noir-projects/aztec-nr/aztec/src/state_vars/private_mutable/test.nr @@ -7,11 +7,11 @@ use std::test::OracleMock; global storage_slot = 17; -fn setup() -> TestEnvironment { +unconstrained fn setup() -> TestEnvironment { TestEnvironment::new() } -fn in_private(env: &mut TestEnvironment) -> PrivateMutable { +unconstrained fn in_private(env: &mut TestEnvironment) -> PrivateMutable { let state_var = PrivateMutable::new(&mut env.private(), storage_slot); // This oracle is called for its side effects alone - it's always expected to return 0. @@ -21,7 +21,7 @@ fn in_private(env: &mut TestEnvironment) -> PrivateMutable { +pub struct PrivateSet { context: Context, storage_slot: Field, } @@ -27,7 +27,7 @@ impl PrivateSet { // docs:end:new } -impl PrivateSet where Note: NoteInterface { +impl PrivateSet where Note: NoteInterface + NullifiableNote { // docs:start:insert_from_public pub fn insert_from_public(self, note: &mut Note) { create_note_hash_from_public(self.context, self.storage_slot, note); @@ -35,7 +35,7 @@ impl PrivateSet where No // docs:end:insert_from_public } -impl PrivateSet where Note: NoteInterface + Eq { +impl PrivateSet where Note: NoteInterface + NullifiableNote + Eq { // docs:start:insert pub fn insert(self, note: &mut Note) -> NoteEmission { create_note(self.context, self.storage_slot, note) @@ -44,7 +44,7 @@ impl PrivateSet where N pub fn pop_notes( self, - options: NoteGetterOptions + options: NoteGetterOptions ) -> BoundedVec { let (notes, note_hashes) = get_notes(self.context, self.storage_slot, options); // We iterate in a range 0..options.limit instead of 0..notes.len() because options.limit is known at compile @@ -77,17 +77,17 @@ impl PrivateSet where N /// in significantly less constrains due to avoiding 1 read request check. pub fn get_notes( self, - options: NoteGetterOptions + options: NoteGetterOptions ) -> BoundedVec { get_notes(self.context, self.storage_slot, options).0 } } -impl PrivateSet where Note: NoteInterface { +impl PrivateSet where Note: NoteInterface + NullifiableNote { // docs:start:view_notes unconstrained pub fn view_notes( self, - options: NoteViewerOptions + options: NoteViewerOptions ) -> BoundedVec { view_notes(self.storage_slot, options) } diff --git a/noir-projects/aztec-nr/aztec/src/state_vars/public_immutable.nr b/noir-projects/aztec-nr/aztec/src/state_vars/public_immutable.nr index 78d077be7ab..745f3d9eefc 100644 --- a/noir-projects/aztec-nr/aztec/src/state_vars/public_immutable.nr +++ b/noir-projects/aztec-nr/aztec/src/state_vars/public_immutable.nr @@ -3,7 +3,7 @@ use dep::protocol_types::{constants::INITIALIZATION_SLOT_SEPARATOR, traits::{Des // Just like SharedImmutable but without the ability to read from private functions. // docs:start:public_immutable_struct -struct PublicImmutable { +pub struct PublicImmutable { context: Context, storage_slot: Field, } @@ -24,7 +24,7 @@ impl PublicImmutable { // docs:end:public_immutable_struct_new } -impl PublicImmutable where T: Serialize + Deserialize { +impl PublicImmutable where T: Serialize + Deserialize { // docs:start:public_immutable_struct_write pub fn initialize(self, value: T) { // We check that the struct is not yet initialized by checking if the initialization slot is 0 @@ -46,7 +46,7 @@ impl PublicImmutable where T: Seria // docs:end:public_immutable_struct_read } -impl PublicImmutablewhere T: Deserialize { +impl PublicImmutablewhere T: Deserialize { unconstrained pub fn read(self) -> T { self.context.storage_read(self.storage_slot) } diff --git a/noir-projects/aztec-nr/aztec/src/state_vars/public_mutable.nr b/noir-projects/aztec-nr/aztec/src/state_vars/public_mutable.nr index 72fce5d0b59..1e8840db7cf 100644 --- a/noir-projects/aztec-nr/aztec/src/state_vars/public_mutable.nr +++ b/noir-projects/aztec-nr/aztec/src/state_vars/public_mutable.nr @@ -3,7 +3,7 @@ use dep::protocol_types::traits::{Deserialize, Serialize}; use crate::state_vars::storage::Storage; // docs:start:public_mutable_struct -struct PublicMutable { +pub struct PublicMutable { context: Context, storage_slot: Field, } @@ -24,7 +24,7 @@ impl PublicMutable { // docs:end:public_mutable_struct_new } -impl PublicMutable where T: Serialize + Deserialize { +impl PublicMutable where T: Serialize + Deserialize { // docs:start:public_mutable_struct_read pub fn read(self) -> T { self.context.storage_read(self.storage_slot) @@ -38,7 +38,7 @@ impl PublicMutable where T: Serializ // docs:end:public_mutable_struct_write } -impl PublicMutable where T: Deserialize { +impl PublicMutable where T: Deserialize { unconstrained pub fn read(self) -> T { self.context.storage_read(self.storage_slot) } diff --git a/noir-projects/aztec-nr/aztec/src/state_vars/shared_immutable.nr b/noir-projects/aztec-nr/aztec/src/state_vars/shared_immutable.nr index 97db8c5de5f..2fa82e94a08 100644 --- a/noir-projects/aztec-nr/aztec/src/state_vars/shared_immutable.nr +++ b/noir-projects/aztec-nr/aztec/src/state_vars/shared_immutable.nr @@ -2,7 +2,7 @@ use crate::{context::{PrivateContext, PublicContext, UnconstrainedContext}, stat use dep::protocol_types::{constants::INITIALIZATION_SLOT_SEPARATOR, traits::{Deserialize, Serialize}}; // Just like PublicImmutable but with the ability to read from private functions. -struct SharedImmutable{ +pub struct SharedImmutable{ context: Context, storage_slot: Field, } @@ -20,7 +20,7 @@ impl SharedImmutable { } } -impl SharedImmutable where T: Serialize + Deserialize { +impl SharedImmutable where T: Serialize + Deserialize { // Intended to be only called once. pub fn initialize(self, value: T) { // We check that the struct is not yet initialized by checking if the initialization slot is 0 @@ -38,13 +38,13 @@ impl SharedImmutable where T: Serial } } -impl SharedImmutable where T: Serialize + Deserialize { +impl SharedImmutable where T: Serialize + Deserialize { unconstrained pub fn read_public(self) -> T { self.context.storage_read(self.storage_slot) } } -impl SharedImmutable where T: Serialize + Deserialize { +impl SharedImmutable where T: Serialize + Deserialize { pub fn read_private(self) -> T { let header = self.context.get_header(); let mut fields = [0; T_SERIALIZED_LEN]; diff --git a/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/scheduled_delay_change.nr b/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/scheduled_delay_change.nr index 9773ee59f75..682a04febdd 100644 --- a/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/scheduled_delay_change.nr +++ b/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/scheduled_delay_change.nr @@ -9,7 +9,7 @@ mod test; // is performed via `schedule_change` in order to satisfy ScheduleValueChange constraints: if e.g. we allowed for the // delay to be decreased immediately then it'd be possible for the state variable to schedule a value change with a // reduced delay, invalidating prior private reads. -struct ScheduledDelayChange { +pub struct ScheduledDelayChange { // Both pre and post are stored in public storage, so by default they are zeroed. By wrapping them in an Option, // they default to Option::none(), which we detect and replace with INITIAL_DELAY. The end result is that a // ScheduledDelayChange that has not been initialized has a delay equal to INITIAL_DELAY, which is the desired @@ -127,7 +127,7 @@ impl ScheduledDelayChange { } } -impl Serialize<1> for ScheduledDelayChange { +impl Serialize<1> for ScheduledDelayChange { fn serialize(self) -> [Field; 1] { // We pack all three u32 values into a single U128, which is made up of two u64 limbs. // Low limb: [ pre_inner: u32 | post_inner: u32 ] @@ -145,7 +145,7 @@ impl Serialize<1> for ScheduledDelayChange { } } -impl Deserialize<1> for ScheduledDelayChange { +impl Deserialize<1> for ScheduledDelayChange { fn deserialize(input: [Field; 1]) -> Self { let packed = U128::from_integer(input[0]); @@ -175,7 +175,7 @@ impl Deserialize<1> for ScheduledDelayChange { } } -impl Eq for ScheduledDelayChange { +impl Eq for ScheduledDelayChange { fn eq(self, other: Self) -> bool { (self.pre == other.pre) & (self.post == other.post) diff --git a/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/scheduled_delay_change/test.nr b/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/scheduled_delay_change/test.nr index c569510e2cd..9a619978cdc 100644 --- a/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/scheduled_delay_change/test.nr +++ b/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/scheduled_delay_change/test.nr @@ -1,8 +1,8 @@ use crate::state_vars::shared_mutable::scheduled_delay_change::ScheduledDelayChange; -global TEST_INITIAL_DELAY = 13; +global TEST_INITIAL_DELAY: u32 = 13; -fn assert_equal_after_conversion(original: ScheduledDelayChange) { +unconstrained fn assert_equal_after_conversion(original: ScheduledDelayChange) { // We have to do explicit type annotations because Noir lacks turbofish support. // TODO: improve syntax once https://github.com/noir-lang/noir/issues/4710 is implemented. let converted: ScheduledDelayChange = ScheduledDelayChange::deserialize((original).serialize()); @@ -14,7 +14,7 @@ fn assert_equal_after_conversion(original: ScheduledDelayChange ScheduledDelayChange { +unconstrained fn get_initial_delay_change() -> ScheduledDelayChange { ScheduledDelayChange::deserialize([0]) } #[test] -fn test_get_current() { +unconstrained fn test_get_current() { let pre = 1; let post = 2; let block_of_change = 50; @@ -66,7 +66,7 @@ fn test_get_current() { } #[test] -fn test_get_current_initial() { +unconstrained fn test_get_current_initial() { let delay_change = get_initial_delay_change(); assert_eq(delay_change.get_current(0), TEST_INITIAL_DELAY); @@ -74,7 +74,7 @@ fn test_get_current_initial() { } #[test] -fn test_get_scheduled() { +unconstrained fn test_get_scheduled() { let pre = 1; let post = 2; let block_of_change = 50; @@ -85,14 +85,14 @@ fn test_get_scheduled() { } #[test] -fn test_get_scheduled_initial() { +unconstrained fn test_get_scheduled_initial() { let delay_change = get_initial_delay_change(); assert_eq(delay_change.get_scheduled(), (TEST_INITIAL_DELAY, 0)); } #[test] -fn test_schedule_change_to_shorter_delay_before_change() { +unconstrained fn test_schedule_change_to_shorter_delay_before_change() { let pre = 15; let post = 25; let block_of_change = 500; @@ -111,7 +111,7 @@ fn test_schedule_change_to_shorter_delay_before_change() { } #[test] -fn test_schedule_change_to_shorter_delay_after_change() { +unconstrained fn test_schedule_change_to_shorter_delay_after_change() { let pre = 15; let post = 25; let block_of_change = 500; @@ -129,7 +129,7 @@ fn test_schedule_change_to_shorter_delay_after_change() { } #[test] -fn test_schedule_change_to_shorter_delay_from_initial() { +unconstrained fn test_schedule_change_to_shorter_delay_from_initial() { let new = TEST_INITIAL_DELAY - 1; let current_block_number = 50; @@ -144,7 +144,7 @@ fn test_schedule_change_to_shorter_delay_from_initial() { } #[test] -fn test_schedule_change_to_longer_delay_before_change() { +unconstrained fn test_schedule_change_to_longer_delay_before_change() { let pre = 15; let post = 25; let block_of_change = 500; @@ -164,7 +164,7 @@ fn test_schedule_change_to_longer_delay_before_change() { } #[test] -fn test_schedule_change_to_longer_delay_after_change() { +unconstrained fn test_schedule_change_to_longer_delay_after_change() { let pre = 15; let post = 25; let block_of_change = 500; @@ -183,14 +183,14 @@ fn test_schedule_change_to_longer_delay_after_change() { } #[test] -fn test_schedule_change_to_longer_delay_from_initial() { - let new = TEST_INITIAL_DELAY + 1; +unconstrained fn test_schedule_change_to_longer_delay_from_initial() { + let new: u32 = TEST_INITIAL_DELAY + 1; let current_block_number = 50; let mut delay_change = get_initial_delay_change(); delay_change.schedule_change(new, current_block_number); - // Like in the after change scenario, change is effective immediately because the new delay is longer than the + // Like in the after change scenario, change is effective immediately because the new delay is longer than the // current one. assert_eq(delay_change.pre.unwrap(), TEST_INITIAL_DELAY); assert_eq(delay_change.post.unwrap(), new); @@ -198,7 +198,7 @@ fn test_schedule_change_to_longer_delay_from_initial() { assert_eq(delay_change.get_current(current_block_number), new); } -fn assert_effective_minimum_delay_invariants( +unconstrained fn assert_effective_minimum_delay_invariants( delay_change: &mut ScheduledDelayChange, historical_block_number: u32, effective_minimum_delay: u32 @@ -222,15 +222,15 @@ fn assert_effective_minimum_delay_invariants( let value_change_block = change_schedule_block + delay_change.get_current(change_schedule_block); assert(expected_earliest_value_change_block <= value_change_block); - // Finally, a delay reduction could be scheduled immediately after the historical block. We reduce the delay to - // zero, which means that at the delay block of change there'll be no delay and a value change could be + // Finally, a delay reduction could be scheduled immediately after the historical block. We reduce the delay to + // zero, which means that at the delay block of change there'll be no delay and a value change could be // performed immediately then. delay_change.schedule_change(0, historical_block_number + 1); assert(expected_earliest_value_change_block <= delay_change.block_of_change); } #[test] -fn test_get_effective_delay_at_before_change_in_far_future() { +unconstrained fn test_get_effective_delay_at_before_change_in_far_future() { let pre = 15; let post = 25; let block_of_change = 500; @@ -252,7 +252,7 @@ fn test_get_effective_delay_at_before_change_in_far_future() { } #[test] -fn test_get_effective_delay_at_before_change_to_long_delay() { +unconstrained fn test_get_effective_delay_at_before_change_to_long_delay() { let pre = 15; let post = 25; let block_of_change = 500; @@ -275,7 +275,7 @@ fn test_get_effective_delay_at_before_change_to_long_delay() { } #[test] -fn test_get_effective_delay_at_before_near_change_to_short_delay() { +unconstrained fn test_get_effective_delay_at_before_near_change_to_short_delay() { let pre = 15; let post = 3; let block_of_change = 500; @@ -300,7 +300,7 @@ fn test_get_effective_delay_at_before_near_change_to_short_delay() { } #[test] -fn test_get_effective_delay_at_after_change() { +unconstrained fn test_get_effective_delay_at_after_change() { let pre = 15; let post = 25; let block_of_change = 500; @@ -321,12 +321,12 @@ fn test_get_effective_delay_at_after_change() { } #[test] -fn test_get_effective_delay_at_initial() { +unconstrained fn test_get_effective_delay_at_initial() { let mut delay_change = get_initial_delay_change(); let historical_block_number = 200; - // Like in the after change scenario, no delay change is scheduled, so the effective delay is simply the current + // Like in the after change scenario, no delay change is scheduled, so the effective delay is simply the current // one (initial). let effective_minimum_delay = delay_change.get_effective_minimum_delay_at(historical_block_number); assert_eq(effective_minimum_delay, TEST_INITIAL_DELAY); diff --git a/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/scheduled_value_change.nr b/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/scheduled_value_change.nr index 91c13f21f33..8c4ebe8c863 100644 --- a/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/scheduled_value_change.nr +++ b/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/scheduled_value_change.nr @@ -8,7 +8,7 @@ mod test; // of change after some minimum delay measured in blocks has elapsed. This means that at any given block number we know // both the current value and the smallest block number at which the value might change - this is called the // 'block horizon'. -struct ScheduledValueChange { +pub struct ScheduledValueChange { pre: T, post: T, // Block at which `post` value is used instead of `pre` diff --git a/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/scheduled_value_change/test.nr b/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/scheduled_value_change/test.nr index 5dab89c9701..c34faa7c2a6 100644 --- a/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/scheduled_value_change/test.nr +++ b/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/scheduled_value_change/test.nr @@ -3,7 +3,7 @@ use crate::state_vars::shared_mutable::scheduled_value_change::ScheduledValueCha global TEST_DELAY: u32 = 200; #[test] -fn test_serde() { +unconstrained fn test_serde() { let pre = 1; let post = 2; let block_of_change = 50; @@ -18,7 +18,7 @@ fn test_serde() { } #[test] -fn test_get_current_at() { +unconstrained fn test_get_current_at() { let pre = 1; let post = 2; let block_of_change = 50; @@ -32,7 +32,7 @@ fn test_get_current_at() { } #[test] -fn test_get_scheduled() { +unconstrained fn test_get_scheduled() { let pre = 1; let post = 2; let block_of_change = 50; @@ -42,7 +42,7 @@ fn test_get_scheduled() { assert_eq(value_change.get_scheduled(), (post, block_of_change)); } -fn assert_block_horizon_invariants( +unconstrained fn assert_block_horizon_invariants( value_change: &mut ScheduledValueChange, historical_block_number: u32, block_horizon: u32 @@ -68,7 +68,7 @@ fn assert_block_horizon_invariants( } #[test] -fn test_get_block_horizon_change_in_past() { +unconstrained fn test_get_block_horizon_change_in_past() { let historical_block_number = 100; let block_of_change = 50; @@ -81,7 +81,7 @@ fn test_get_block_horizon_change_in_past() { } #[test] -fn test_get_block_horizon_change_in_immediate_past() { +unconstrained fn test_get_block_horizon_change_in_immediate_past() { let historical_block_number = 100; let block_of_change = 100; @@ -94,7 +94,7 @@ fn test_get_block_horizon_change_in_immediate_past() { } #[test] -fn test_get_block_horizon_change_in_near_future() { +unconstrained fn test_get_block_horizon_change_in_near_future() { let historical_block_number = 100; let block_of_change = 120; @@ -110,7 +110,7 @@ fn test_get_block_horizon_change_in_near_future() { } #[test] -fn test_get_block_horizon_change_in_far_future() { +unconstrained fn test_get_block_horizon_change_in_far_future() { let historical_block_number = 100; let block_of_change = 500; @@ -123,7 +123,7 @@ fn test_get_block_horizon_change_in_far_future() { } #[test] -fn test_get_block_horizon_n0_delay() { +unconstrained fn test_get_block_horizon_n0_delay() { let historical_block_number = 100; let block_of_change = 50; @@ -136,7 +136,7 @@ fn test_get_block_horizon_n0_delay() { } #[test] -fn test_schedule_change_before_change() { +unconstrained fn test_schedule_change_before_change() { let pre = 1; let post = 2; let block_of_change = 500; @@ -159,7 +159,7 @@ fn test_schedule_change_before_change() { } #[test] -fn test_schedule_change_after_change() { +unconstrained fn test_schedule_change_after_change() { let pre = 1; let post = 2; let block_of_change = 500; @@ -181,7 +181,7 @@ fn test_schedule_change_after_change() { } #[test] -fn test_schedule_change_no_delay() { +unconstrained fn test_schedule_change_no_delay() { let pre = 1; let post = 2; let block_of_change = 500; diff --git a/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/shared_mutable.nr b/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/shared_mutable.nr index dfd458c3915..2b72072aa97 100644 --- a/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/shared_mutable.nr +++ b/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/shared_mutable.nr @@ -13,7 +13,7 @@ use dep::std::mem::zeroed; mod test; -struct SharedMutable { +pub struct SharedMutable { context: Context, storage_slot: Field, } diff --git a/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/shared_mutable_private_getter.nr b/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/shared_mutable_private_getter.nr index 84d3816b66b..a5078d9cb95 100644 --- a/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/shared_mutable_private_getter.nr +++ b/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/shared_mutable_private_getter.nr @@ -2,7 +2,7 @@ use dep::protocol_types::{traits::{FromField, ToField}, address::AztecAddress, h use crate::{context::PrivateContext, state_vars::shared_mutable::shared_mutable::SharedMutable}; -struct SharedMutablePrivateGetter { +pub struct SharedMutablePrivateGetter { context: &mut PrivateContext, // The contract address of the contract we want to read from other_contract_address: AztecAddress, @@ -12,7 +12,7 @@ struct SharedMutablePrivateGetter { // We have this as a view-only interface to reading Shared Mutables in other contracts. // Currently the Shared Mutable does not support this. We can adapt SharedMutable at a later date -impl SharedMutablePrivateGetter where T: FromField + ToField + Eq { +impl SharedMutablePrivateGetter where T: FromField + ToField + Eq { pub fn new( context: &mut PrivateContext, other_contract_address: AztecAddress, @@ -25,7 +25,7 @@ impl SharedMutablePrivateGetter where T: Fr pub fn get_value_in_private(self, header: Header) -> T { // We create a dummy SharedMutable state variable so that we can reuse its historical_read_from_public_storage - // method, greatly reducing code duplication. + // method, greatly reducing code duplication. let dummy: SharedMutable = SharedMutable::new((), self.storage_slot); let (value_change, delay_change, historical_block_number) = dummy.historical_read_from_public_storage(header, self.other_contract_address); diff --git a/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/test.nr b/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/test.nr index 785ff8d2c41..ee5a1f67cf0 100644 --- a/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/test.nr +++ b/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/test.nr @@ -17,27 +17,27 @@ global storage_slot = 47; global TEST_INITIAL_DELAY: u32 = 32; -fn setup() -> TestEnvironment { +unconstrained fn setup() -> TestEnvironment { TestEnvironment::new() } -fn in_public(env: TestEnvironment) -> SharedMutable { +unconstrained fn in_public(env: TestEnvironment) -> SharedMutable { SharedMutable::new(&mut env.public(), storage_slot) } -fn in_private( +unconstrained fn in_private( env: &mut TestEnvironment, historical_block_number: u32 ) -> SharedMutable { SharedMutable::new(&mut env.private_at(historical_block_number), storage_slot) } -fn in_unconstrained(env: TestEnvironment) -> SharedMutable { +unconstrained fn in_unconstrained(env: TestEnvironment) -> SharedMutable { SharedMutable::new(env.unkonstrained(), storage_slot) } #[test] -fn test_get_current_value_in_public_initial() { +unconstrained fn test_get_current_value_in_public_initial() { let env = setup(); let state_var = in_public(env); @@ -45,7 +45,7 @@ fn test_get_current_value_in_public_initial() { } #[test] -fn test_get_scheduled_value_in_public() { +unconstrained fn test_get_scheduled_value_in_public() { let mut env = setup(); let state_var = in_public(env); @@ -57,7 +57,7 @@ fn test_get_scheduled_value_in_public() { } #[test] -fn test_get_current_value_in_public_before_scheduled_change() { +unconstrained fn test_get_current_value_in_public_before_scheduled_change() { let mut env = setup(); let state_var = in_public(env); @@ -76,7 +76,7 @@ fn test_get_current_value_in_public_before_scheduled_change() { } #[test] -fn test_get_current_value_in_public_at_scheduled_change() { +unconstrained fn test_get_current_value_in_public_at_scheduled_change() { let mut env = setup(); let state_var = in_public(env); @@ -89,7 +89,7 @@ fn test_get_current_value_in_public_at_scheduled_change() { } #[test] -fn test_get_current_value_in_public_after_scheduled_change() { +unconstrained fn test_get_current_value_in_public_after_scheduled_change() { let mut env = setup(); let state_var = in_public(env); @@ -102,7 +102,7 @@ fn test_get_current_value_in_public_after_scheduled_change() { } #[test] -fn test_get_current_delay_in_public_initial() { +unconstrained fn test_get_current_delay_in_public_initial() { let env = setup(); let state_var = in_public(env); @@ -110,7 +110,7 @@ fn test_get_current_delay_in_public_initial() { } #[test] -fn test_get_scheduled_delay_in_public() { +unconstrained fn test_get_scheduled_delay_in_public() { let mut env = setup(); let state_var = in_public(env); @@ -123,7 +123,7 @@ fn test_get_scheduled_delay_in_public() { } #[test] -fn test_get_current_delay_in_public_before_scheduled_change() { +unconstrained fn test_get_current_delay_in_public_before_scheduled_change() { let mut env = setup(); let state_var = in_public(env); @@ -142,7 +142,7 @@ fn test_get_current_delay_in_public_before_scheduled_change() { } #[test] -fn test_get_current_delay_in_public_at_scheduled_change() { +unconstrained fn test_get_current_delay_in_public_at_scheduled_change() { let mut env = setup(); let state_var = in_public(env); @@ -155,7 +155,7 @@ fn test_get_current_delay_in_public_at_scheduled_change() { } #[test] -fn test_get_current_delay_in_public_after_scheduled_change() { +unconstrained fn test_get_current_delay_in_public_after_scheduled_change() { let mut env = setup(); let state_var = in_public(env); @@ -168,7 +168,7 @@ fn test_get_current_delay_in_public_after_scheduled_change() { } #[test] -fn test_get_current_value_in_private_initial() { +unconstrained fn test_get_current_value_in_private_initial() { let mut env = setup(); let historical_block_number = env.block_number(); @@ -179,7 +179,7 @@ fn test_get_current_value_in_private_initial() { } #[test] -fn test_get_current_value_in_private_before_change() { +unconstrained fn test_get_current_value_in_private_before_change() { let mut env = setup(); let public_state_var = in_public(env); @@ -195,7 +195,7 @@ fn test_get_current_value_in_private_before_change() { } #[test] -fn test_get_current_value_in_private_immediately_before_change() { +unconstrained fn test_get_current_value_in_private_immediately_before_change() { let mut env = setup(); let public_state_var = in_public(env); @@ -212,7 +212,7 @@ fn test_get_current_value_in_private_immediately_before_change() { } #[test] -fn test_get_current_value_in_private_at_change() { +unconstrained fn test_get_current_value_in_private_at_change() { let mut env = setup(); let public_state_var = in_public(env); @@ -229,7 +229,7 @@ fn test_get_current_value_in_private_at_change() { } #[test] -fn test_get_current_value_in_private_after_change() { +unconstrained fn test_get_current_value_in_private_after_change() { let mut env = setup(); let public_state_var = in_public(env); @@ -246,7 +246,7 @@ fn test_get_current_value_in_private_after_change() { } #[test] -fn test_get_current_value_in_private_with_non_initial_delay() { +unconstrained fn test_get_current_value_in_private_with_non_initial_delay() { let mut env = setup(); let public_state_var = in_public(env); @@ -268,7 +268,7 @@ fn test_get_current_value_in_private_with_non_initial_delay() { } #[test(should_fail_with="Hint values do not match hash")] -fn test_get_current_value_in_private_bad_value_hints() { +unconstrained fn test_get_current_value_in_private_bad_value_hints() { let mut env = setup(); let public_state_var = in_public(env); @@ -288,7 +288,7 @@ fn test_get_current_value_in_private_bad_value_hints() { } #[test(should_fail_with="Hint values do not match hash")] -fn test_get_current_value_in_private_bad_delay_hints() { +unconstrained fn test_get_current_value_in_private_bad_delay_hints() { let mut env = setup(); let public_state_var = in_public(env); @@ -308,7 +308,7 @@ fn test_get_current_value_in_private_bad_delay_hints() { } #[test(should_fail_with="Non-zero value change for zero hash")] -fn test_get_current_value_in_private_bad_zero_hash_value_hints() { +unconstrained fn test_get_current_value_in_private_bad_zero_hash_value_hints() { let mut env = setup(); let historical_block_number = env.block_number(); @@ -325,7 +325,7 @@ fn test_get_current_value_in_private_bad_zero_hash_value_hints() { } #[test(should_fail_with="Non-zero delay change for zero hash")] -fn test_get_current_value_in_private_bad_zero_hash_delay_hints() { +unconstrained fn test_get_current_value_in_private_bad_zero_hash_delay_hints() { let mut env = setup(); let historical_block_number = env.block_number(); @@ -342,7 +342,7 @@ fn test_get_current_value_in_private_bad_zero_hash_delay_hints() { } #[test] -fn test_get_current_value_in_unconstrained_initial() { +unconstrained fn test_get_current_value_in_unconstrained_initial() { let env = setup(); let state_var = in_unconstrained(env); @@ -350,7 +350,7 @@ fn test_get_current_value_in_unconstrained_initial() { } #[test] -fn test_get_current_value_in_unconstrained_before_scheduled_change() { +unconstrained fn test_get_current_value_in_unconstrained_before_scheduled_change() { let mut env = setup(); let state_var_public = in_public(env); @@ -373,7 +373,7 @@ fn test_get_current_value_in_unconstrained_before_scheduled_change() { } #[test] -fn test_get_current_value_in_unconstrained_at_scheduled_change() { +unconstrained fn test_get_current_value_in_unconstrained_at_scheduled_change() { let mut env = setup(); let state_var_public = in_public(env); @@ -388,7 +388,7 @@ fn test_get_current_value_in_unconstrained_at_scheduled_change() { } #[test] -fn test_get_current_value_in_unconstrained_after_scheduled_change() { +unconstrained fn test_get_current_value_in_unconstrained_after_scheduled_change() { let mut env = setup(); let state_var_public = in_public(env); diff --git a/noir-projects/aztec-nr/aztec/src/state_vars/storage.nr b/noir-projects/aztec-nr/aztec/src/state_vars/storage.nr index 8ae9faf228c..2eec5d9c1b8 100644 --- a/noir-projects/aztec-nr/aztec/src/state_vars/storage.nr +++ b/noir-projects/aztec-nr/aztec/src/state_vars/storage.nr @@ -1,15 +1,14 @@ use dep::protocol_types::traits::{Deserialize, Serialize}; -trait Storage where T: Serialize + Deserialize { +pub trait Storage where T: Serialize + Deserialize { fn get_storage_slot(self) -> Field { self.storage_slot } } // Struct representing an exportable storage variable in the contract -// Every entry in the storage struct will be exported in the compilation artifact as a +// Every entry in the storage struct will be exported in the compilation artifact as a // Storable entity, containing the storage slot -struct Storable { +pub struct Storable { slot: Field, } - diff --git a/noir-projects/aztec-nr/aztec/src/test/helpers/cheatcodes.nr b/noir-projects/aztec-nr/aztec/src/test/helpers/cheatcodes.nr index d1a6e42d500..d9578e46048 100644 --- a/noir-projects/aztec-nr/aztec/src/test/helpers/cheatcodes.nr +++ b/noir-projects/aztec-nr/aztec/src/test/helpers/cheatcodes.nr @@ -2,7 +2,7 @@ use dep::protocol_types::{ abis::function_selector::FunctionSelector, address::AztecAddress, constants::CONTRACT_INSTANCE_LENGTH, contract_instance::ContractInstance }; -use crate::context::inputs::{PublicContextInputs, PrivateContextInputs}; +use crate::context::inputs::PrivateContextInputs; use crate::test::helpers::utils::TestAccount; use crate::keys::public_keys::PublicKeys; @@ -22,10 +22,6 @@ unconstrained pub fn get_private_context_inputs(historical_block_number: u32) -> oracle_get_private_context_inputs(historical_block_number) } -unconstrained pub fn get_public_context_inputs() -> PublicContextInputs { - oracle_get_public_context_inputs() -} - unconstrained pub fn deploy( path: str, name: str, @@ -111,6 +107,10 @@ unconstrained pub fn set_fn_selector(selector: FunctionSelector) { oracle_set_function_selector(selector) } +unconstrained pub fn set_is_static_call(is_static: bool) { + oracle_set_is_static_call(is_static) +} + #[oracle(reset)] unconstrained fn oracle_reset() {} @@ -123,9 +123,6 @@ unconstrained fn oracle_advance_blocks_by(blocks: u32) {} #[oracle(getPrivateContextInputs)] unconstrained fn oracle_get_private_context_inputs(historical_block_number: u32) -> PrivateContextInputs {} -#[oracle(getPublicContextInputs)] -unconstrained fn oracle_get_public_context_inputs() -> PublicContextInputs {} - #[oracle(deploy)] unconstrained fn oracle_deploy( path: str, @@ -157,6 +154,9 @@ unconstrained fn oracle_get_msg_sender() -> AztecAddress {} #[oracle(setMsgSender)] unconstrained fn oracle_set_msg_sender(msg_sender: AztecAddress) {} +#[oracle(setIsStaticCall)] +unconstrained fn oracle_set_is_static_call(is_static: bool) {} + #[oracle(getSideEffectsCounter)] unconstrained fn oracle_get_side_effects_counter() -> u32 {} diff --git a/noir-projects/aztec-nr/aztec/src/test/helpers/keys.nr b/noir-projects/aztec-nr/aztec/src/test/helpers/keys.nr deleted file mode 100644 index 9226b6e9854..00000000000 --- a/noir-projects/aztec-nr/aztec/src/test/helpers/keys.nr +++ /dev/null @@ -1,26 +0,0 @@ -use dep::protocol_types::{ - address::AztecAddress, storage::map::derive_storage_slot_in_map, - constants::CANONICAL_KEY_REGISTRY_ADDRESS -}; - -use crate::{test::helpers::cheatcodes, keys::public_keys::ToPoint}; - -pub fn store_master_key(key_index: Field, address: AztecAddress, key: T) where T: ToPoint { - let key_point = key.to_point(); - - let x_coordinate_map_slot = key_index * 2 + 1; - let y_coordinate_map_slot = x_coordinate_map_slot + 1; - let x_coordinate_derived_slot = derive_storage_slot_in_map(x_coordinate_map_slot, address); - let y_coordinate_derived_slot = derive_storage_slot_in_map(y_coordinate_map_slot, address); - - cheatcodes::direct_storage_write( - CANONICAL_KEY_REGISTRY_ADDRESS, - x_coordinate_derived_slot, - [key_point.x] - ); - cheatcodes::direct_storage_write( - CANONICAL_KEY_REGISTRY_ADDRESS, - y_coordinate_derived_slot, - [key_point.y] - ); -} diff --git a/noir-projects/aztec-nr/aztec/src/test/helpers/mod.nr b/noir-projects/aztec-nr/aztec/src/test/helpers/mod.nr index b7164a82359..93eb11040c8 100644 --- a/noir-projects/aztec-nr/aztec/src/test/helpers/mod.nr +++ b/noir-projects/aztec-nr/aztec/src/test/helpers/mod.nr @@ -1,4 +1,3 @@ mod test_environment; mod cheatcodes; mod utils; -mod keys; diff --git a/noir-projects/aztec-nr/aztec/src/test/helpers/test_environment.nr b/noir-projects/aztec-nr/aztec/src/test/helpers/test_environment.nr index e39ac6bec5a..d176db97cb2 100644 --- a/noir-projects/aztec-nr/aztec/src/test/helpers/test_environment.nr +++ b/noir-projects/aztec-nr/aztec/src/test/helpers/test_environment.nr @@ -3,61 +3,59 @@ use dep::protocol_types::{ address::AztecAddress, traits::Deserialize }; -use crate::context::inputs::{PublicContextInputs, PrivateContextInputs}; +use crate::context::inputs::PrivateContextInputs; use crate::context::{packed_returns::PackedReturns, call_interfaces::CallInterface}; use crate::context::{PrivateContext, PublicContext, UnconstrainedContext}; -use crate::test::helpers::{cheatcodes, utils::{apply_side_effects_private, Deployer}, keys}; -use crate::keys::constants::{NULLIFIER_INDEX, INCOMING_INDEX, OUTGOING_INDEX, TAGGING_INDEX}; +use crate::test::helpers::{cheatcodes, utils::{apply_side_effects_private, Deployer}}; use crate::hash::hash_args; -use crate::note::{note_header::NoteHeader, note_interface::NoteInterface}; +use crate::note::{note_header::NoteHeader, note_interface::{NoteInterface, NullifiableNote}}; use crate::oracle::{execution::{get_block_number, get_contract_address}, notes::notify_created_note}; -struct TestEnvironment {} +pub struct TestEnvironment {} impl TestEnvironment { - fn new() -> Self { + unconstrained fn new() -> Self { cheatcodes::reset(); Self {} } - fn block_number(_self: Self) -> u32 { + unconstrained fn block_number(_self: Self) -> u32 { get_block_number() } - fn contract_address(_self: Self) -> AztecAddress { + unconstrained fn contract_address(_self: Self) -> AztecAddress { get_contract_address() } - fn impersonate(_self: Self, address: AztecAddress) { + unconstrained fn impersonate(_self: Self, address: AztecAddress) { cheatcodes::set_contract_address(address) } - fn advance_block_to(&mut self, block_number: u32) { + unconstrained fn advance_block_to(&mut self, block_number: u32) { let difference = block_number - get_block_number(); self.advance_block_by(difference); } - fn advance_block_by(_self: &mut Self, blocks: u32) { + unconstrained fn advance_block_by(_self: &mut Self, blocks: u32) { cheatcodes::advance_blocks_by(blocks); } - fn public(_self: Self) -> PublicContext { - let mut inputs = cheatcodes::get_public_context_inputs(); - PublicContext::new(inputs) + unconstrained fn public(_self: Self) -> PublicContext { + PublicContext::new(|| 0) } - fn private(&mut self) -> PrivateContext { + unconstrained fn private(&mut self) -> PrivateContext { self.private_at(get_block_number()) } // unconstrained is a key word, so we mis-spell purposefully here, like we do with contrakt - fn unkonstrained(_self: Self) -> UnconstrainedContext { + unconstrained fn unkonstrained(_self: Self) -> UnconstrainedContext { UnconstrainedContext::new() } - fn private_at(&mut self, historical_block_number: u32) -> PrivateContext { + unconstrained fn private_at(&mut self, historical_block_number: u32) -> PrivateContext { if historical_block_number >= get_block_number() { self.advance_block_to(historical_block_number + 1); } @@ -67,31 +65,16 @@ impl TestEnvironment { PrivateContext::new(inputs, 0) } - fn create_account(_self: Self) -> AztecAddress { + unconstrained fn create_account(_self: Self) -> AztecAddress { let test_account = cheatcodes::create_account(); - let address = test_account.address; - let keys = test_account.keys; - - keys::store_master_key(NULLIFIER_INDEX, address, keys.npk_m); - keys::store_master_key(INCOMING_INDEX, address, keys.ivpk_m); - keys::store_master_key(OUTGOING_INDEX, address, keys.ovpk_m); - keys::store_master_key(TAGGING_INDEX, address, keys.tpk_m); - test_account.address } - fn create_account_contract(&mut self, secret: Field) -> AztecAddress { + unconstrained fn create_account_contract(&mut self, secret: Field) -> AztecAddress { let test_account = cheatcodes::add_account(secret); let address = test_account.address; cheatcodes::advance_blocks_by(1); - let keys = test_account.keys; - - keys::store_master_key(NULLIFIER_INDEX, address, keys.npk_m); - keys::store_master_key(INCOMING_INDEX, address, keys.ivpk_m); - keys::store_master_key(OUTGOING_INDEX, address, keys.ovpk_m); - keys::store_master_key(TAGGING_INDEX, address, keys.tpk_m); - let selector = FunctionSelector::from_signature("constructor(Field,Field)"); let mut context = self.private_at(get_block_number()); @@ -101,15 +84,15 @@ impl TestEnvironment { address } - fn deploy(self, path: str, name: str) -> Deployer { + unconstrained fn deploy(_self: Self, path: str, name: str) -> Deployer { Deployer { path, name, public_keys_hash: 0 } } - fn deploy_self(self, name: str) -> Deployer<0, M> { + unconstrained fn deploy_self(_self: Self, name: str) -> Deployer<0, M> { Deployer { path: "", name, public_keys_hash: 0 } } - fn call_private( + unconstrained fn call_private( _self: Self, call_interface: C ) -> T where C: CallInterface, T: Deserialize { @@ -131,7 +114,7 @@ impl TestEnvironment { PackedReturns::new(public_inputs.returns_hash).unpack_into() } - fn call_private_void( + unconstrained fn call_private_void( _self: Self, call_interface: C ) where C: CallInterface { @@ -153,10 +136,7 @@ impl TestEnvironment { PackedReturns::new(public_inputs.returns_hash).assert_empty(); } - fn call_public( - _self: Self, - call_interface: C - ) -> T where C: CallInterface { + unconstrained fn call_public(_self: Self, call_interface: C) -> T where C: CallInterface { let original_fn = call_interface.get_original(); let original_msg_sender = cheatcodes::get_msg_sender(); let original_contract_address = get_contract_address(); @@ -168,24 +148,23 @@ impl TestEnvironment { cheatcodes::set_fn_selector(fn_selector); cheatcodes::set_contract_address(target_address); cheatcodes::set_msg_sender(original_contract_address); - let mut inputs = cheatcodes::get_public_context_inputs(); - inputs.calldata_length = call_interface.get_args().len() as Field; - inputs.is_static_call = call_interface.get_is_static(); + cheatcodes::set_is_static_call(call_interface.get_is_static()); cheatcodes::set_calldata(calldata); - let result = original_fn(inputs); + let result = original_fn(()); cheatcodes::set_fn_selector(original_fn_selector); cheatcodes::set_contract_address(original_contract_address); cheatcodes::set_msg_sender(original_msg_sender); cheatcodes::set_calldata(calldata); + cheatcodes::set_is_static_call(call_interface.get_is_static()); result } - fn assert_public_call_fails( + unconstrained fn assert_public_call_fails( _self: Self, call_interface: C - ) where C: CallInterface { + ) where C: CallInterface { cheatcodes::assert_public_call_fails( call_interface.get_contract_address(), call_interface.get_selector(), @@ -193,7 +172,7 @@ impl TestEnvironment { ); } - fn assert_private_call_fails( + unconstrained fn assert_private_call_fails( _self: Self, call_interface: C ) where C: CallInterface { @@ -207,20 +186,21 @@ impl TestEnvironment { ); } - pub fn store_note_in_cache( + /// Manually adds a note to TXE. This needs to be called if you want to work with a note in your test with the note + /// not having an encrypted log emitted. TXE alternative to `PXE.addNote(...)`. + unconstrained pub fn add_note( _self: Self, note: &mut Note, storage_slot: Field, contract_address: AztecAddress - ) where Note: NoteInterface { + ) where Note: NoteInterface + NullifiableNote { let original_contract_address = get_contract_address(); cheatcodes::set_contract_address(contract_address); let note_hash_counter = cheatcodes::get_side_effects_counter(); let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter }; note.set_header(header); - // TODO(#7771): inject compute_note_hash(...) func to notes with macros. - let note_hash = note.compute_note_hiding_point().x; + let note_hash = note.compute_note_hash(); let serialized_note = Note::serialize_content(*note); assert( notify_created_note( diff --git a/noir-projects/aztec-nr/aztec/src/test/helpers/utils.nr b/noir-projects/aztec-nr/aztec/src/test/helpers/utils.nr index 20661d24a8f..e0bd79bc1d3 100644 --- a/noir-projects/aztec-nr/aztec/src/test/helpers/utils.nr +++ b/noir-projects/aztec-nr/aztec/src/test/helpers/utils.nr @@ -4,14 +4,14 @@ use dep::protocol_types::{ contract_instance::ContractInstance }; -use crate::context::inputs::{PublicContextInputs, PrivateContextInputs}; +use crate::context::inputs::PrivateContextInputs; use crate::context::call_interfaces::CallInterface; use crate::test::helpers::cheatcodes; use crate::keys::public_keys::{PUBLIC_KEYS_LENGTH, PublicKeys}; use crate::oracle::{execution::{get_block_number, get_contract_address}}; -pub fn apply_side_effects_private(contract_address: AztecAddress, public_inputs: PrivateCircuitPublicInputs) { +unconstrained pub fn apply_side_effects_private(contract_address: AztecAddress, public_inputs: PrivateCircuitPublicInputs) { let mut nullifiers = &[]; for nullifier in public_inputs.nullifiers { if nullifier.value != 0 { @@ -28,14 +28,14 @@ pub fn apply_side_effects_private(contract_address: AztecAddress, public_inputs: cheatcodes::add_note_hashes(contract_address, note_hashes); } -struct Deployer { +pub struct Deployer { path: str, name: str, public_keys_hash: Field } impl Deployer { - pub fn with_private_initializer( + unconstrained pub fn with_private_initializer( self, call_interface: C ) -> ContractInstance where C: CallInterface { @@ -65,10 +65,10 @@ impl Deployer { instance } - pub fn with_public_initializer( + unconstrained pub fn with_public_initializer( self, call_interface: C - ) -> ContractInstance where C: CallInterface { + ) -> ContractInstance where C: CallInterface { let instance = cheatcodes::deploy( self.path, self.name, @@ -86,21 +86,20 @@ impl Deployer { cheatcodes::set_fn_selector(call_interface.get_selector()); cheatcodes::set_contract_address(instance.to_address()); cheatcodes::set_msg_sender(original_contract_address); - let mut inputs = cheatcodes::get_public_context_inputs(); - inputs.calldata_length = call_interface.get_args().len() as Field; - inputs.is_static_call = call_interface.get_is_static(); + cheatcodes::set_is_static_call(call_interface.get_is_static()); cheatcodes::set_calldata(calldata); - let _result: T = original_fn(inputs); + let _result: T = original_fn(()); cheatcodes::set_fn_selector(original_fn_selector); cheatcodes::set_contract_address(original_contract_address); cheatcodes::set_msg_sender(original_msg_sender); cheatcodes::set_calldata(calldata); + cheatcodes::set_is_static_call(call_interface.get_is_static()); instance } - pub fn without_initializer(self) -> ContractInstance { + unconstrained pub fn without_initializer(self) -> ContractInstance { cheatcodes::deploy(self.path, self.name, "", &[], self.public_keys_hash) } } @@ -108,7 +107,7 @@ impl Deployer { // Keys length + address global TEST_ACCOUNT_LENGTH = PUBLIC_KEYS_LENGTH + 1; -struct TestAccount { +pub struct TestAccount { address: AztecAddress, keys: PublicKeys } diff --git a/noir-projects/aztec-nr/aztec/src/test/mocks/mock_note.nr b/noir-projects/aztec-nr/aztec/src/test/mocks/mock_note.nr index 12e2e741260..13f1723d481 100644 --- a/noir-projects/aztec-nr/aztec/src/test/mocks/mock_note.nr +++ b/noir-projects/aztec-nr/aztec/src/test/mocks/mock_note.nr @@ -3,19 +3,39 @@ use crate::{ note::{note_header::NoteHeader, note_interface::NoteInterface, utils::compute_note_hash_for_nullify} }; -use dep::protocol_types::{address::AztecAddress, constants::GENERATOR_INDEX__NOTE_NULLIFIER, point::Point}; +use dep::protocol_types::{address::AztecAddress, constants::GENERATOR_INDEX__NOTE_NULLIFIER, traits::Eq}; use dep::std::{embedded_curve_ops::multi_scalar_mul, hash::from_field_unsafe}; +use crate::note::note_interface::NullifiableNote; -global MOCK_NOTE_LENGTH = 1; -// MOCK_NOTE_LENGTH * 32 + 32(storage_slot as bytes) + 32(note_type_id as bytes) -global MOCK_NOTE_BYTES_LENGTH: Field = 1 * 32 + 64; +global MOCK_NOTE_LENGTH: u32 = 1; -struct MockNote { +pub(crate) struct MockNote { header: NoteHeader, value: Field, } -impl NoteInterface for MockNote { +impl NullifiableNote for MockNote { + fn compute_nullifier(_self: Self, _context: &mut PrivateContext, note_hash_for_nullify: Field) -> Field { + // We don't use any kind of secret here since this is only a mock note and having it here would make tests + // more cumbersome + poseidon2_hash_with_separator( + [note_hash_for_nullify], + GENERATOR_INDEX__NOTE_NULLIFIER as Field + ) + } + + unconstrained fn compute_nullifier_without_context(self) -> Field { + // We don't use any kind of secret here since this is only a mock note and having it here would make tests + // more cumbersome + let note_hash_for_nullify = compute_note_hash_for_nullify(self); + poseidon2_hash_with_separator( + [note_hash_for_nullify], + GENERATOR_INDEX__NOTE_NULLIFIER as Field + ) + } +} + +impl NoteInterface for MockNote { fn serialize_content(self) -> [Field; MOCK_NOTE_LENGTH] { [self.value] } @@ -24,13 +44,6 @@ impl NoteInterface for MockNote { Self { value: fields[0], header: NoteHeader::empty() } } - fn compute_note_hiding_point(self: Self) -> Point { - assert(self.header.storage_slot != 0, "Storage slot must be set before computing note hiding point"); - // We use the unsafe version because the multi_scalar_mul will constrain the scalars. - let value_scalar = from_field_unsafe(self.value); - multi_scalar_mul([G_val], [value_scalar]) - } - fn get_header(self) -> NoteHeader { self.header } @@ -44,29 +57,10 @@ impl NoteInterface for MockNote { 4135 } - fn compute_nullifier(_self: Self, _context: &mut PrivateContext, note_hash_for_nullify: Field) -> Field { - // We don't use any kind of secret here since this is only a mock note and having it here would make tests - // more cumbersome - poseidon2_hash_with_separator( - [note_hash_for_nullify], - GENERATOR_INDEX__NOTE_NULLIFIER as Field - ) - } - - fn compute_nullifier_without_context(self) -> Field { - // We don't use any kind of secret here since this is only a mock note and having it here would make tests - // more cumbersome - let note_hash_for_nullify = compute_note_hash_for_nullify(self); - poseidon2_hash_with_separator( - [note_hash_for_nullify], - GENERATOR_INDEX__NOTE_NULLIFIER as Field - ) - } - - fn to_be_bytes(self, storage_slot: Field) -> [u8; MOCK_NOTE_BYTES_LENGTH] { + fn to_be_bytes(self, storage_slot: Field) -> [u8; MOCK_NOTE_LENGTH * 32 + 64] { let serialized_note = self.serialize_content(); - let mut buffer: [u8; MOCK_NOTE_BYTES_LENGTH] = [0; MOCK_NOTE_BYTES_LENGTH]; + let mut buffer: [u8; MOCK_NOTE_LENGTH * 32 + 64] = [0; MOCK_NOTE_LENGTH * 32 + 64]; let storage_slot_bytes: [u8; 32] = storage_slot.to_be_bytes(); let note_type_id_bytes: [u8; 32] = MockNote::get_note_type_id().to_be_bytes(); @@ -84,6 +78,13 @@ impl NoteInterface for MockNote { } buffer } + + fn compute_note_hash(self: Self) -> Field { + assert(self.header.storage_slot != 0, "Storage slot must be set before computing note hash"); + // We use the unsafe version because the multi_scalar_mul will constrain the scalars. + let value_scalar = from_field_unsafe(self.value); + multi_scalar_mul([G_val], [value_scalar]).x + } } impl Eq for MockNote { @@ -92,7 +93,7 @@ impl Eq for MockNote { } } -struct MockNoteBuilder { +pub struct MockNoteBuilder { value: Field, contract_address: Option, storage_slot: Option, diff --git a/noir-projects/aztec-nr/aztec/src/test/mocks/mock_struct.nr b/noir-projects/aztec-nr/aztec/src/test/mocks/mock_struct.nr index 8df0dd4cac3..339312e1749 100644 --- a/noir-projects/aztec-nr/aztec/src/test/mocks/mock_struct.nr +++ b/noir-projects/aztec-nr/aztec/src/test/mocks/mock_struct.nr @@ -1,6 +1,6 @@ use dep::protocol_types::traits::{Serialize, Deserialize}; -struct MockStruct { +pub(crate) struct MockStruct { a: Field, b: Field, } @@ -30,7 +30,7 @@ impl Deserialize<2> for MockStruct { } #[test] -fn test_serde() { +unconstrained fn test_serde() { let val = MockStruct::new(5, 6); assert_eq(val, MockStruct::deserialize(val.serialize())); } diff --git a/noir-projects/aztec-nr/aztec/src/unencrypted_logs/unencrypted_event_emission.nr b/noir-projects/aztec-nr/aztec/src/unencrypted_logs/unencrypted_event_emission.nr index b5b20f2b096..f8bdcf3d53e 100644 --- a/noir-projects/aztec-nr/aztec/src/unencrypted_logs/unencrypted_event_emission.nr +++ b/noir-projects/aztec-nr/aztec/src/unencrypted_logs/unencrypted_event_emission.nr @@ -1,10 +1,10 @@ use crate::{context::PublicContext, event::event_interface::EventInterface}; use dep::protocol_types::{traits::Serialize}; -fn emit( +fn emit( context: &mut PublicContext, event: Event -) where Event: EventInterface, Event: Serialize, [Field; N]: LensForEventSelector { +) where Event: EventInterface, Event: Serialize, [Field; N]: LensForEventSelector { let selector = Event::get_event_type_id(); let serialized_event = event.serialize(); @@ -20,7 +20,7 @@ fn emit( context.emit_unencrypted_log(emitted_log); } -pub fn encode_event(context: &mut PublicContext) -> fn[(&mut PublicContext,)](Event) -> () where Event: EventInterface, Event: Serialize, [Field; N]: LensForEventSelector { +pub fn encode_event(context: &mut PublicContext) -> fn[(&mut PublicContext,)](Event) -> () where Event: EventInterface, Event: Serialize, [Field; N]: LensForEventSelector { | e: Event | { emit( context, diff --git a/noir-projects/aztec-nr/aztec/src/utils/comparison.nr b/noir-projects/aztec-nr/aztec/src/utils/comparison.nr index 3f44be53a40..32ab067b96c 100644 --- a/noir-projects/aztec-nr/aztec/src/utils/comparison.nr +++ b/noir-projects/aztec-nr/aztec/src/utils/comparison.nr @@ -34,8 +34,7 @@ pub fn compare(lhs: Field, operation: u8, rhs: Field) -> bool { } else if (operation == Comparator.GTE) { !is_lt } else { - assert(false, "Invalid operation"); - false // Noir would complain without boolean value here + panic(f"Invalid operation") } } @@ -44,7 +43,7 @@ mod test { use super::Comparator; #[test] - fn test_compare() { + unconstrained fn test_compare() { let lhs = 10; let rhs = 10; assert(compare(lhs, Comparator.EQ, rhs), "Expected lhs to be equal to rhs"); diff --git a/noir-projects/aztec-nr/aztec/src/utils/point.nr b/noir-projects/aztec-nr/aztec/src/utils/point.nr index 633bd837ebb..65967ce1a57 100644 --- a/noir-projects/aztec-nr/aztec/src/utils/point.nr +++ b/noir-projects/aztec-nr/aztec/src/utils/point.nr @@ -35,7 +35,7 @@ mod test { use crate::utils::point::point_to_bytes; #[test] - fn test_point_to_bytes_positive_sign() { + unconstrained fn test_point_to_bytes_positive_sign() { let p = Point { x: 0x1af41f5de96446dc3776a1eb2d98bb956b7acd9979a67854bec6fa7c2973bd73, y: 0x07fc22c7f2c7057571f137fe46ea9c95114282bc95d37d71ec4bfb88de457d4a, @@ -48,14 +48,11 @@ mod test { 154, 244, 31, 93, 233, 100, 70, 220, 55, 118, 161, 235, 45, 152, 187, 149, 107, 122, 205, 153, 121, 166, 120, 84, 190, 198, 250, 124, 41, 115, 189, 115 ]; - assert_eq(expected_compressed_point_positive_sign.len(), compressed_point.len()); - for i in 0..expected_compressed_point_positive_sign.len() { - assert_eq(compressed_point[i], expected_compressed_point_positive_sign[i]); - } + assert_eq(expected_compressed_point_positive_sign, compressed_point); } #[test] - fn test_point_to_bytes_negative_sign() { + unconstrained fn test_point_to_bytes_negative_sign() { let p = Point { x: 0x247371652e55dd74c9af8dbe9fb44931ba29a9229994384bd7077796c14ee2b5, y: 0x26441aec112e1ae4cee374f42556932001507ad46e255ffb27369c7e3766e5c0, @@ -68,9 +65,6 @@ mod test { 36, 115, 113, 101, 46, 85, 221, 116, 201, 175, 141, 190, 159, 180, 73, 49, 186, 41, 169, 34, 153, 148, 56, 75, 215, 7, 119, 150, 193, 78, 226, 181 ]; - assert_eq(expected_compressed_point_negative_sign.len(), compressed_point.len()); - for i in 0..expected_compressed_point_negative_sign.len() { - assert_eq(compressed_point[i], expected_compressed_point_negative_sign[i]); - } + assert_eq(expected_compressed_point_negative_sign, compressed_point); } } diff --git a/noir-projects/aztec-nr/aztec/src/utils/test.nr b/noir-projects/aztec-nr/aztec/src/utils/test.nr index 4eadb4e2123..39521ca8a31 100644 --- a/noir-projects/aztec-nr/aztec/src/utils/test.nr +++ b/noir-projects/aztec-nr/aztec/src/utils/test.nr @@ -1,7 +1,7 @@ use super::collapse_array::{collapse_array, verify_collapse_hints}; #[test] -fn collapse_empty_array() { +unconstrained fn collapse_empty_array() { let original: [Option; 2] = [Option::none(), Option::none()]; let collapsed = collapse_array(original); @@ -9,7 +9,7 @@ fn collapse_empty_array() { } #[test] -fn collapse_non_sparse_array() { +unconstrained fn collapse_non_sparse_array() { let original = [Option::some(7), Option::some(3), Option::none()]; let collapsed = collapse_array(original); @@ -19,7 +19,7 @@ fn collapse_non_sparse_array() { } #[test] -fn collapse_sparse_array() { +unconstrained fn collapse_sparse_array() { let original = [Option::some(7), Option::none(), Option::some(3)]; let collapsed = collapse_array(original); @@ -29,7 +29,7 @@ fn collapse_sparse_array() { } #[test] -fn collapse_array_front_padding() { +unconstrained fn collapse_array_front_padding() { let original = [Option::none(), Option::none(), Option::some(7), Option::none(), Option::some(3)]; let collapsed = collapse_array(original); @@ -39,7 +39,7 @@ fn collapse_array_front_padding() { } #[test] -fn collapse_array_back_padding() { +unconstrained fn collapse_array_back_padding() { let original = [Option::some(7), Option::none(), Option::some(3), Option::none(), Option::none()]; let collapsed = collapse_array(original); @@ -49,7 +49,7 @@ fn collapse_array_back_padding() { } #[test] -fn verify_collapse_hints_good_hints() { +unconstrained fn verify_collapse_hints_good_hints() { let original = [Option::some(7), Option::none(), Option::some(3)]; let collapsed = BoundedVec::from_array([7, 3]); let collapsed_to_input_index_mapping = BoundedVec::from_array([0, 2]); @@ -58,7 +58,7 @@ fn verify_collapse_hints_good_hints() { } #[test(should_fail_with="Wrong collapsed vec length")] -fn verify_collapse_hints_wrong_length() { +unconstrained fn verify_collapse_hints_wrong_length() { let original = [Option::some(7), Option::none(), Option::some(3)]; let collapsed = BoundedVec::from_array([7]); let collapsed_to_input_index_mapping = BoundedVec::from_array([0]); @@ -67,7 +67,7 @@ fn verify_collapse_hints_wrong_length() { } #[test(should_fail_with="Collapse hint vec length mismatch")] -fn verify_collapse_hints_hint_length_mismatch() { +unconstrained fn verify_collapse_hints_hint_length_mismatch() { let original = [Option::some(7), Option::none(), Option::some(3)]; let collapsed = BoundedVec::from_array([7, 3]); let collapsed_to_input_index_mapping = BoundedVec::from_array([0]); @@ -75,9 +75,8 @@ fn verify_collapse_hints_hint_length_mismatch() { verify_collapse_hints(original, collapsed, collapsed_to_input_index_mapping); } -// https://github.com/noir-lang/noir/issues/5464 -#[test(should_fail)] -fn verify_collapse_hints_out_of_bounds_index_hint() { +#[test(should_fail_with="Out of bounds index hint")] +unconstrained fn verify_collapse_hints_out_of_bounds_index_hint() { let original = [Option::some(7), Option::none(), Option::some(3)]; let collapsed = BoundedVec::from_array([7, 3]); let collapsed_to_input_index_mapping = BoundedVec::from_array([0, 5]); @@ -86,7 +85,7 @@ fn verify_collapse_hints_out_of_bounds_index_hint() { } #[test(should_fail)] -fn verify_collapse_hints_hint_to_none() { +unconstrained fn verify_collapse_hints_hint_to_none() { let original = [Option::some(7), Option::none(), Option::some(3)]; let collapsed = BoundedVec::from_array([7, 0]); let collapsed_to_input_index_mapping = BoundedVec::from_array([0, 1]); @@ -95,7 +94,7 @@ fn verify_collapse_hints_hint_to_none() { } #[test(should_fail_with="Wrong collapsed vec content")] -fn verify_collapse_hints_wrong_vec_content() { +unconstrained fn verify_collapse_hints_wrong_vec_content() { let original = [Option::some(7), Option::none(), Option::some(3)]; let collapsed = BoundedVec::from_array([7, 42]); let collapsed_to_input_index_mapping = BoundedVec::from_array([0, 2]); @@ -104,7 +103,7 @@ fn verify_collapse_hints_wrong_vec_content() { } #[test(should_fail_with="Wrong collapsed vec order")] -fn verify_collapse_hints_wrong_vec_order() { +unconstrained fn verify_collapse_hints_wrong_vec_order() { let original = [Option::some(7), Option::none(), Option::some(3)]; let collapsed = BoundedVec::from_array([3, 7]); let collapsed_to_input_index_mapping = BoundedVec::from_array([2, 0]); @@ -113,7 +112,7 @@ fn verify_collapse_hints_wrong_vec_order() { } #[test(should_fail_with="Dirty collapsed vec storage")] -fn verify_collapse_hints_dirty_storage() { +unconstrained fn verify_collapse_hints_dirty_storage() { let original = [Option::some(7), Option::none(), Option::some(3)]; let mut collapsed: BoundedVec = BoundedVec::from_array([7, 3]); diff --git a/noir-projects/aztec-nr/compressed-string/src/compressed_string.nr b/noir-projects/aztec-nr/compressed-string/src/compressed_string.nr index 3211c3d89db..8321c3f4b27 100644 --- a/noir-projects/aztec-nr/compressed-string/src/compressed_string.nr +++ b/noir-projects/aztec-nr/compressed-string/src/compressed_string.nr @@ -4,7 +4,7 @@ use dep::aztec::protocol_types::{utils::field::field_from_bytes, traits::{Serial // Compresses M bytes into N fields. // Can be used for longer strings that don't fit in a single field. // Each field can store 31 characters, so N should be M/31 rounded up. -struct CompressedString { +pub struct CompressedString { value: [Field; N] } @@ -65,7 +65,7 @@ impl Deserialize for CompressedString { } #[test] -fn test_short_string() { +unconstrained fn test_short_string() { let i = "Hello world"; let b = i.as_bytes(); let name: CompressedString<1,11> = CompressedString::from_string(i); @@ -74,7 +74,7 @@ fn test_short_string() { } #[test] -fn test_long_string() { +unconstrained fn test_long_string() { let i = "Hello world. I'm setting up a very long text of blibbablubb such that we can see if works as planned for longer names."; let b = i.as_bytes(); let name: CompressedString<4,118> = CompressedString::from_string(i); @@ -83,7 +83,7 @@ fn test_long_string() { } #[test] -fn test_long_string_work_with_too_many_fields() { +unconstrained fn test_long_string_work_with_too_many_fields() { let i = "Hello world. I'm setting up a very long text of blibbablubb such that we can see if works as planned for longer names."; let b = i.as_bytes(); let name: CompressedString<5,118> = CompressedString::from_string(i); @@ -92,7 +92,7 @@ fn test_long_string_work_with_too_many_fields() { } #[test] -fn test_serde() { +unconstrained fn test_serde() { let i = "Hello world. I'm setting up a very long text of blibbablubb such that we can see if works as planned for longer names."; let name: CompressedString<5,118> = CompressedString::from_string(i); @@ -100,7 +100,7 @@ fn test_serde() { } #[test(should_fail)] -fn test_long_string_fail_with_too_few_fields() { +unconstrained fn test_long_string_fail_with_too_few_fields() { let i = "Hello world. I'm setting up a very long text of blibbablubb such that we can see if works as planned for longer names."; let b = i.as_bytes(); let name: CompressedString<3,118> = CompressedString::from_string(i); diff --git a/noir-projects/aztec-nr/compressed-string/src/field_compressed_string.nr b/noir-projects/aztec-nr/compressed-string/src/field_compressed_string.nr index 9b02c6419f8..9ee35aa9099 100644 --- a/noir-projects/aztec-nr/compressed-string/src/field_compressed_string.nr +++ b/noir-projects/aztec-nr/compressed-string/src/field_compressed_string.nr @@ -2,7 +2,7 @@ use dep::aztec::protocol_types::{utils::field::field_from_bytes, traits::{Serial // A Fixedsize Compressed String. // Essentially a special version of Compressed String for practical use. -struct FieldCompressedString{ +pub struct FieldCompressedString{ value: Field } diff --git a/noir-projects/aztec-nr/easy-private-state/src/easy_private_uint.nr b/noir-projects/aztec-nr/easy-private-state/src/easy_private_uint.nr index 944c29603a6..8863b8e9699 100644 --- a/noir-projects/aztec-nr/easy-private-state/src/easy_private_uint.nr +++ b/noir-projects/aztec-nr/easy-private-state/src/easy_private_uint.nr @@ -2,11 +2,11 @@ use dep::aztec::{ context::PrivateContext, protocol_types::{address::AztecAddress}, note::note_getter_options::NoteGetterOptions, state_vars::PrivateSet, encrypted_logs::encrypted_note_emission::encode_and_encrypt_note_with_keys, - keys::getters::get_current_public_keys + keys::getters::get_public_keys }; use dep::value_note::{filter::filter_notes_min_sum, value_note::ValueNote}; -struct EasyPrivateUint { +pub struct EasyPrivateUint { context: Context, set: PrivateSet, storage_slot: Field, @@ -24,8 +24,8 @@ impl EasyPrivateUint { impl EasyPrivateUint<&mut PrivateContext> { // Very similar to `value_note::utils::increment`. pub fn add(self, addend: u64, owner: AztecAddress, outgoing_viewer: AztecAddress) { - let owner_keys = get_current_public_keys(self.context, owner); - let outgoing_viewer_keys = get_current_public_keys(self.context, outgoing_viewer); + let owner_keys = get_public_keys(owner); + let outgoing_viewer_keys = get_public_keys(outgoing_viewer); // Creates new note for the owner. let mut addend_note = ValueNote::new(addend as Field, owner_keys.npk_m.hash()); @@ -44,8 +44,8 @@ impl EasyPrivateUint<&mut PrivateContext> { // Very similar to `value_note::utils::decrement`. pub fn sub(self, subtrahend: u64, owner: AztecAddress, outgoing_viewer: AztecAddress) { - let owner_keys = get_current_public_keys(self.context, owner); - let outgoing_viewer_keys = get_current_public_keys(self.context, outgoing_viewer); + let owner_keys = get_public_keys(owner); + let outgoing_viewer_keys = get_public_keys(outgoing_viewer); // docs:start:pop_notes let options = NoteGetterOptions::with_filter(filter_notes_min_sum, subtrahend as Field); diff --git a/noir-projects/aztec-nr/uint-note/src/uint_note.nr b/noir-projects/aztec-nr/uint-note/src/uint_note.nr index 96660b551d4..8e4485a8f09 100644 --- a/noir-projects/aztec-nr/uint-note/src/uint_note.nr +++ b/noir-projects/aztec-nr/uint-note/src/uint_note.nr @@ -1,20 +1,11 @@ use dep::aztec::{ - generators::{Ga1 as G_amt, Ga2 as G_npk, Ga3 as G_rnd, G_slot}, - prelude::{NoteInterface, PrivateContext}, - protocol_types::{ - constants::GENERATOR_INDEX__NOTE_NULLIFIER, point::{Point, POINT_LENGTH}, - hash::poseidon2_hash_with_separator, traits::Serialize -}, - note::utils::compute_note_hash_for_nullify, oracle::unsafe_rand::unsafe_rand, - keys::getters::get_nsk_app + prelude::{NullifiableNote, PrivateContext}, + protocol_types::{constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator}, + note::utils::compute_note_hash_for_nullify, keys::getters::get_nsk_app, macros::notes::note }; -use dep::std::{embedded_curve_ops::multi_scalar_mul, hash::from_field_unsafe}; -global UINT_NOTE_LEN: Field = 3; // 3 plus a header. -global UINT_NOTE_BYTES_LEN: Field = 3 * 32 + 64; - -#[aztec(note)] -struct UintNote { +#[note] +pub struct UintNote { // The integer stored by the note value: U128, // The nullifying public key hash is used with the nsk_app to ensure that the note can be privately spent. @@ -23,7 +14,7 @@ struct UintNote { randomness: Field, } -impl NoteInterface for UintNote { +impl NullifiableNote for UintNote { fn compute_nullifier(self, context: &mut PrivateContext, note_hash_for_nullify: Field) -> Field { let secret = context.request_nsk_app(self.npk_m_hash); poseidon2_hash_with_separator( @@ -35,7 +26,7 @@ impl NoteInterface for UintNote { ) } - fn compute_nullifier_without_context(self) -> Field { + unconstrained fn compute_nullifier_without_context(self) -> Field { let note_hash_for_nullify = compute_note_hash_for_nullify(self); let secret = get_nsk_app(self.npk_m_hash); poseidon2_hash_with_separator( @@ -43,66 +34,6 @@ impl NoteInterface for UintNote { GENERATOR_INDEX__NOTE_NULLIFIER ) } - - fn compute_note_hiding_point(self) -> Point { - // We use the unsafe version because the multi_scalar_mul will constrain the scalars. - let amount_scalar = from_field_unsafe(self.value.to_integer()); - let npk_m_hash_scalar = from_field_unsafe(self.npk_m_hash); - let randomness_scalar = from_field_unsafe(self.randomness); - let slot_scalar = from_field_unsafe(self.header.storage_slot); - // We compute the note hiding point as: - // `G_amt * amount + G_npk * npk_m_hash + G_rnd * randomness + G_slot * slot` - // instead of using pedersen or poseidon2 because it allows us to privately add and subtract from amount - // in public by leveraging homomorphism. - multi_scalar_mul( - [G_amt, G_npk, G_rnd, G_slot], - [amount_scalar, npk_m_hash_scalar, randomness_scalar, slot_scalar] - ) - } -} - -impl UintNote { - // TODO: Merge this func with `compute_note_hiding_point`. I (benesjan) didn't do it in the initial PR to not have - // to modify macros and all the related funcs in it. - fn to_note_hiding_point(self) -> UintNoteHidingPoint { - UintNoteHidingPoint::new(self.compute_note_hiding_point()) - } -} - -struct UintNoteHidingPoint { - inner: Point -} - -impl UintNoteHidingPoint { - fn new(point: Point) -> Self { - Self { inner: point } - } - - fn add_amount(&mut self, amount: U128) { - self.inner = multi_scalar_mul([G_amt], [from_field_unsafe(amount.to_integer())]) + self.inner; - } - - fn add_npk_m_hash(&mut self, npk_m_hash: Field) { - self.inner = multi_scalar_mul([G_npk], [from_field_unsafe(npk_m_hash)]) + self.inner; - } - - fn add_randomness(&mut self, randomness: Field) { - self.inner = multi_scalar_mul([G_rnd], [from_field_unsafe(randomness)]) + self.inner; - } - - fn add_slot(&mut self, slot: Field) { - self.inner = multi_scalar_mul([G_slot], [from_field_unsafe(slot)]) + self.inner; - } - - fn finalize(self) -> Field { - self.inner.x - } -} - -impl Serialize for UintNoteHidingPoint { - fn serialize(self) -> [Field; POINT_LENGTH] { - self.inner.serialize() - } } impl Eq for UintNote { diff --git a/noir-projects/aztec-nr/value-note/src/utils.nr b/noir-projects/aztec-nr/value-note/src/utils.nr index f4919981818..d6a65d16af8 100644 --- a/noir-projects/aztec-nr/value-note/src/utils.nr +++ b/noir-projects/aztec-nr/value-note/src/utils.nr @@ -1,12 +1,12 @@ use dep::aztec::prelude::{AztecAddress, PrivateContext, PrivateSet, NoteGetterOptions}; use dep::aztec::note::note_getter_options::SortOrder; use dep::aztec::encrypted_logs::encrypted_note_emission::encode_and_encrypt_note_with_keys; -use dep::aztec::keys::getters::get_current_public_keys; -use crate::{filter::filter_notes_min_sum, value_note::{ValueNote, VALUE_NOTE_LEN, VALUE_NOTE_BYTES_LEN}}; +use dep::aztec::keys::getters::get_public_keys; +use crate::{filter::filter_notes_min_sum, value_note::{ValueNote, VALUE_NOTE_LEN}}; // Sort the note values (0th field) in descending order. // Pick the fewest notes whose sum is equal to or greater than `amount`. -pub fn create_note_getter_options_for_decreasing_balance(amount: Field) -> NoteGetterOptions { +pub fn create_note_getter_options_for_decreasing_balance(amount: Field) -> NoteGetterOptions { NoteGetterOptions::with_filter(filter_notes_min_sum, amount).sort(ValueNote::properties().value, SortOrder.DESC) } @@ -19,8 +19,8 @@ pub fn increment( recipient: AztecAddress, outgoing_viewer: AztecAddress // docs:end:increment_args ) { - let recipient_keys = get_current_public_keys(balance.context, recipient); - let outgoing_viewer_ovpk_m = get_current_public_keys(balance.context, outgoing_viewer).ovpk_m; + let recipient_keys = get_public_keys(recipient); + let outgoing_viewer_ovpk_m = get_public_keys(outgoing_viewer).ovpk_m; let mut note = ValueNote::new(amount, recipient_keys.npk_m.hash()); // Insert the new note to the owner's set of notes and emit the log if value is non-zero. diff --git a/noir-projects/aztec-nr/value-note/src/value_note.nr b/noir-projects/aztec-nr/value-note/src/value_note.nr index 356aaa4444e..cc581512017 100644 --- a/noir-projects/aztec-nr/value-note/src/value_note.nr +++ b/noir-projects/aztec-nr/value-note/src/value_note.nr @@ -1,22 +1,18 @@ use dep::aztec::{ - generators::{Ga1 as G_amt, Ga2 as G_npk, Ga3 as G_rnd, G_slot}, - protocol_types::{ - traits::Serialize, constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator, - point::{Point, POINT_LENGTH} -}, - note::{note_header::NoteHeader, note_interface::NoteInterface, utils::compute_note_hash_for_nullify}, + protocol_types::{traits::Serialize, constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator}, + macros::notes::note, + note::{note_header::NoteHeader, note_interface::NullifiableNote, utils::compute_note_hash_for_nullify}, oracle::unsafe_rand::unsafe_rand, keys::getters::get_nsk_app, context::PrivateContext }; -use dep::std::{embedded_curve_ops::multi_scalar_mul}; -use std::hash::from_field_unsafe; -global VALUE_NOTE_LEN: Field = 3; // 3 plus a header. -// VALUE_NOTE_LEN * 32 + 32(storage_slot as bytes) + 32(note_type_id as bytes) -global VALUE_NOTE_BYTES_LEN: Field = 3 * 32 + 64; +global VALUE_NOTE_LEN: u32 = 3; // 3 plus a header. // docs:start:value-note-def -#[aztec(note)] -struct ValueNote { +// ValueNote is used as fn parameter in the Claim contract, so it has to implement the Serialize trait. +// It is important that the order of these annotations is preserved so that derive(Serialize) runs AFTER the note macro, which injects the note header. +#[note] +#[derive(Serialize)] +pub struct ValueNote { value: Field, // The nullifying public key hash is used with the nsk_app to ensure that the note can be privately spent. npk_m_hash: Field, @@ -24,7 +20,7 @@ struct ValueNote { } // docs:end:value-note-def -impl NoteInterface for ValueNote { +impl NullifiableNote for ValueNote { // docs:start:nullifier fn compute_nullifier(self, context: &mut PrivateContext, note_hash_for_nullify: Field) -> Field { @@ -40,7 +36,7 @@ impl NoteInterface for ValueNote { // docs:end:nullifier - fn compute_nullifier_without_context(self) -> Field { + unconstrained fn compute_nullifier_without_context(self) -> Field { let note_hash_for_nullify = compute_note_hash_for_nullify(self); let secret = get_nsk_app(self.npk_m_hash); poseidon2_hash_with_separator( @@ -51,22 +47,6 @@ impl NoteInterface for ValueNote { GENERATOR_INDEX__NOTE_NULLIFIER as Field ) } - - fn compute_note_hiding_point(self) -> Point { - // We use the unsafe version because the multi_scalar_mul will constrain the scalars. - let amount_scalar = from_field_unsafe(self.value); - let npk_m_hash_scalar = from_field_unsafe(self.npk_m_hash); - let randomness_scalar = from_field_unsafe(self.randomness); - let slot_scalar = from_field_unsafe(self.header.storage_slot); - // We compute the note hiding point as: - // `G_amt * amount + G_npk * npk_m_hash + G_rnd * randomness + G_slot * slot` - // instead of using pedersen or poseidon2 because it allows us to privately add and subtract from amount - // in public by leveraging homomorphism. - multi_scalar_mul( - [G_amt, G_npk, G_rnd, G_slot], - [amount_scalar, npk_m_hash_scalar, randomness_scalar, slot_scalar] - ) - } } impl ValueNote { @@ -75,24 +55,6 @@ impl ValueNote { let header = NoteHeader::empty(); ValueNote { value, npk_m_hash, randomness, header } } - - // TODO: Merge this func with `compute_note_hiding_point`. I (benesjan) didn't do it in the initial PR to not have - // to modify macros and all the related funcs in it. - fn to_note_hiding_point(self) -> ValueNoteHidingPoint { - ValueNoteHidingPoint::new(self.compute_note_hiding_point()) - } -} - -impl Serialize<7> for ValueNote { - /// The following method needed to be implemented because the note is passed as an argument to a contract function - /// --> the serialize method is called by aztec-nr when computing an arguments hash. - /// Note that when the note is about to be encrypted and emitted as a log the to_be_bytes function auto-implemented - /// by aztec macros is called instead. - fn serialize(self) -> [Field; 7] { - let header = self.header.serialize(); - - [self.value, self.npk_m_hash, self.randomness, header[0], header[1], header[2], header[3]] - } } impl Eq for ValueNote { @@ -102,39 +64,3 @@ impl Eq for ValueNote { & (self.randomness == other.randomness) } } - -struct ValueNoteHidingPoint { - inner: Point -} - -impl ValueNoteHidingPoint { - fn new(point: Point) -> Self { - Self { inner: point } - } - - fn add_value(&mut self, value: U128) { - self.inner = multi_scalar_mul([G_amt], [from_field_unsafe(value.to_integer())]) + self.inner; - } - - fn add_npk_m_hash(&mut self, npk_m_hash: Field) { - self.inner = multi_scalar_mul([G_npk], [from_field_unsafe(npk_m_hash)]) + self.inner; - } - - fn add_randomness(&mut self, randomness: Field) { - self.inner = multi_scalar_mul([G_rnd], [from_field_unsafe(randomness)]) + self.inner; - } - - fn add_slot(&mut self, slot: Field) { - self.inner = multi_scalar_mul([G_slot], [from_field_unsafe(slot)]) + self.inner; - } - - fn finalize(self) -> Field { - self.inner.x - } -} - -impl Serialize for ValueNoteHidingPoint { - fn serialize(self) -> [Field; POINT_LENGTH] { - self.inner.serialize() - } -} diff --git a/noir-projects/mock-protocol-circuits/Nargo.toml b/noir-projects/mock-protocol-circuits/Nargo.toml index 2c08f6cb1d8..32eb55ee14b 100644 --- a/noir-projects/mock-protocol-circuits/Nargo.toml +++ b/noir-projects/mock-protocol-circuits/Nargo.toml @@ -7,4 +7,5 @@ members = [ "crates/mock-private-kernel-inner", "crates/mock-private-kernel-reset", "crates/mock-private-kernel-tail", + "crates/mock-public-kernel", ] diff --git a/noir-projects/mock-protocol-circuits/Readme.md b/noir-projects/mock-protocol-circuits/Readme.md index 75c8081e821..f4fa6e1968c 100644 --- a/noir-projects/mock-protocol-circuits/Readme.md +++ b/noir-projects/mock-protocol-circuits/Readme.md @@ -1,3 +1,7 @@ # Mocked protocol circuits These simplified circuits act as a way of testing the IVC integration between noir and barretenberg. They follow the same IVC scheme as the real circuits, but are much simpler and easier to reason about. + +# Public Kernel + +The folder public-kernel is currently used to test the noir integration of the avm recursive verifier. diff --git a/noir-projects/mock-protocol-circuits/crates/app-creator/src/main.nr b/noir-projects/mock-protocol-circuits/crates/app-creator/src/main.nr index ebc5a2530c5..0cb4309d6a5 100644 --- a/noir-projects/mock-protocol-circuits/crates/app-creator/src/main.nr +++ b/noir-projects/mock-protocol-circuits/crates/app-creator/src/main.nr @@ -2,7 +2,7 @@ use dep::mock_types::{AppPublicInputs, MAX_COMMITMENTS_PER_CALL}; // Mock app for testing that creates the commitments the user commands. // Note: A zero is a null commitment. -fn main(commitments_to_create: [Field; MAX_COMMITMENTS_PER_CALL]) -> pub AppPublicInputs { +fn main(commitments_to_create: [Field; MAX_COMMITMENTS_PER_CALL]) -> return_data AppPublicInputs { let mut result = AppPublicInputs::default(); result.commitments = commitments_to_create; result diff --git a/noir-projects/mock-protocol-circuits/crates/app-reader/src/main.nr b/noir-projects/mock-protocol-circuits/crates/app-reader/src/main.nr index a8d114de211..11d179ec6a7 100644 --- a/noir-projects/mock-protocol-circuits/crates/app-reader/src/main.nr +++ b/noir-projects/mock-protocol-circuits/crates/app-reader/src/main.nr @@ -2,7 +2,7 @@ use dep::mock_types::{AppPublicInputs, MAX_COMMITMENT_READ_REQUESTS_PER_CALL}; // Mock app for testing that reads the commitments (generates read requests) the user commands. // Note: A zero read is a null read. -fn main(commitments_to_read: [Field; MAX_COMMITMENT_READ_REQUESTS_PER_CALL]) -> pub AppPublicInputs { +fn main(commitments_to_read: [Field; MAX_COMMITMENT_READ_REQUESTS_PER_CALL]) -> return_data AppPublicInputs { let mut result = AppPublicInputs::default(); result.read_requests = commitments_to_read; result diff --git a/noir-projects/mock-protocol-circuits/crates/mock-private-kernel-init/src/main.nr b/noir-projects/mock-protocol-circuits/crates/mock-private-kernel-init/src/main.nr index 2d9e665d74d..d2585336fdb 100644 --- a/noir-projects/mock-protocol-circuits/crates/mock-private-kernel-init/src/main.nr +++ b/noir-projects/mock-protocol-circuits/crates/mock-private-kernel-init/src/main.nr @@ -1,6 +1,9 @@ use dep::mock_types::{TxRequest, PrivateKernelPublicInputs, PrivateKernelPublicInputsBuilder, AppPublicInputs}; -fn main(tx: TxRequest, app_inputs: AppPublicInputs) -> pub PrivateKernelPublicInputs { +fn main( + tx: TxRequest, + app_inputs: call_data(1) AppPublicInputs +) -> return_data PrivateKernelPublicInputs { let mut private_kernel_inputs = PrivateKernelPublicInputsBuilder::from_tx(tx); private_kernel_inputs.ingest_app_inputs(app_inputs); private_kernel_inputs.finish() diff --git a/noir-projects/mock-protocol-circuits/crates/mock-private-kernel-inner/src/main.nr b/noir-projects/mock-protocol-circuits/crates/mock-private-kernel-inner/src/main.nr index 40daf983ec5..0a6b4c11761 100644 --- a/noir-projects/mock-protocol-circuits/crates/mock-private-kernel-inner/src/main.nr +++ b/noir-projects/mock-protocol-circuits/crates/mock-private-kernel-inner/src/main.nr @@ -1,9 +1,9 @@ use dep::mock_types::{PrivateKernelPublicInputs, PrivateKernelPublicInputsBuilder, AppPublicInputs}; fn main( - prev_kernel_public_inputs: PrivateKernelPublicInputs, - app_inputs: AppPublicInputs -) -> pub PrivateKernelPublicInputs { + prev_kernel_public_inputs: call_data(0) PrivateKernelPublicInputs, + app_inputs: call_data(1) AppPublicInputs +) -> return_data PrivateKernelPublicInputs { let mut private_kernel_inputs = PrivateKernelPublicInputsBuilder::from_previous_kernel(prev_kernel_public_inputs); private_kernel_inputs.ingest_app_inputs(app_inputs); private_kernel_inputs.finish() diff --git a/noir-projects/mock-protocol-circuits/crates/mock-private-kernel-reset/src/main.nr b/noir-projects/mock-protocol-circuits/crates/mock-private-kernel-reset/src/main.nr index 6e977352ce1..f4e49af46d7 100644 --- a/noir-projects/mock-protocol-circuits/crates/mock-private-kernel-reset/src/main.nr +++ b/noir-projects/mock-protocol-circuits/crates/mock-private-kernel-reset/src/main.nr @@ -3,9 +3,9 @@ use dep::mock_types::{PrivateKernelPublicInputs, MAX_COMMITMENT_READ_REQUESTS_PE // Mock reset kernel that reset read requests. // It needs hints to locate the commitment that matches the read requests. fn main( - mut prev_kernel_public_inputs: PrivateKernelPublicInputs, + mut prev_kernel_public_inputs: call_data(0) PrivateKernelPublicInputs, commitment_read_hints: [u32; MAX_COMMITMENT_READ_REQUESTS_PER_TX] -) -> pub PrivateKernelPublicInputs { +) -> return_data PrivateKernelPublicInputs { for i in 0..MAX_COMMITMENT_READ_REQUESTS_PER_TX { if commitment_read_hints[i] != MAX_COMMITMENTS_PER_TX { assert_eq( diff --git a/noir-projects/mock-protocol-circuits/crates/mock-private-kernel-tail/src/main.nr b/noir-projects/mock-protocol-circuits/crates/mock-private-kernel-tail/src/main.nr index 06cb0fdc965..6b94d6eb0d7 100644 --- a/noir-projects/mock-protocol-circuits/crates/mock-private-kernel-tail/src/main.nr +++ b/noir-projects/mock-protocol-circuits/crates/mock-private-kernel-tail/src/main.nr @@ -1,7 +1,7 @@ use dep::mock_types::{PrivateKernelPublicInputs, KernelPublicInputs, MAX_COMMITMENT_READ_REQUESTS_PER_TX}; // The tail kernel finishes the client IVC chain exposing the final public inputs with no remaining calls or unfulfilled read requests. -fn main(prev_kernel_public_inputs: PrivateKernelPublicInputs) -> pub KernelPublicInputs { +fn main(prev_kernel_public_inputs: call_data(0) PrivateKernelPublicInputs) -> return_data KernelPublicInputs { assert_eq(prev_kernel_public_inputs.remaining_calls, 0); for i in 0..MAX_COMMITMENT_READ_REQUESTS_PER_TX { assert_eq(prev_kernel_public_inputs.read_requests[i], 0); diff --git a/noir-projects/mock-protocol-circuits/crates/mock-public-kernel/Nargo.toml b/noir-projects/mock-protocol-circuits/crates/mock-public-kernel/Nargo.toml new file mode 100644 index 00000000000..26644c8f295 --- /dev/null +++ b/noir-projects/mock-protocol-circuits/crates/mock-public-kernel/Nargo.toml @@ -0,0 +1,8 @@ +[package] +name = "mock_public_kernel" +type = "bin" +authors = [""] +compiler_version = ">=0.32.0" + +[dependencies] +types = { path = "../../../noir-protocol-circuits/crates/types" } \ No newline at end of file diff --git a/noir-projects/mock-protocol-circuits/crates/mock-public-kernel/src/main.nr b/noir-projects/mock-protocol-circuits/crates/mock-public-kernel/src/main.nr new file mode 100644 index 00000000000..b66b27da567 --- /dev/null +++ b/noir-projects/mock-protocol-circuits/crates/mock-public-kernel/src/main.nr @@ -0,0 +1,9 @@ +use dep::types::constants::{AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS, AVM_PROOF_LENGTH_IN_FIELDS, PROOF_TYPE_AVM}; + +fn main( + verification_key: [Field; AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS], + proof: [Field; AVM_PROOF_LENGTH_IN_FIELDS] +) -> pub u8 { + std::verify_proof_with_type(verification_key, proof, [], 0, PROOF_TYPE_AVM); + 1 // Dummy value to return for the mock kernel as void function creates some pain. +} diff --git a/noir-projects/noir-contracts/Nargo.toml b/noir-projects/noir-contracts/Nargo.toml index f3d2b637a44..2abc3ddb90a 100644 --- a/noir-projects/noir-contracts/Nargo.toml +++ b/noir-projects/noir-contracts/Nargo.toml @@ -25,9 +25,9 @@ members = [ "contracts/escrow_contract", "contracts/fee_juice_contract", "contracts/import_test_contract", - "contracts/key_registry_contract", "contracts/inclusion_proofs_contract", "contracts/lending_contract", + "contracts/nft_contract", "contracts/parent_contract", "contracts/pending_note_hashes_contract", "contracts/price_feed_contract", @@ -37,6 +37,7 @@ members = [ "contracts/schnorr_hardcoded_account_contract", "contracts/schnorr_single_key_account_contract", "contracts/stateful_test_contract", + "contracts/spam_contract", "contracts/test_contract", "contracts/test_log_contract", "contracts/token_contract", diff --git a/noir-projects/noir-contracts/contracts/app_subscription_contract/src/dapp_payload.nr b/noir-projects/noir-contracts/contracts/app_subscription_contract/src/dapp_payload.nr index 592f2cbe441..dbdcf349ca8 100644 --- a/noir-projects/noir-contracts/contracts/app_subscription_contract/src/dapp_payload.nr +++ b/noir-projects/noir-contracts/contracts/app_subscription_contract/src/dapp_payload.nr @@ -6,15 +6,15 @@ use dep::aztec::protocol_types::{ use dep::authwit::entrypoint::function_call::FunctionCall; -global DAPP_MAX_CALLS: u64 = 1; +global DAPP_MAX_CALLS: u32 = 1; // FUNCTION_CALL_SIZE * DAPP_MAX_CALLS + 1 -global DAPP_PAYLOAD_SIZE: u64 = 6; +global DAPP_PAYLOAD_SIZE: u32 = 6; // FUNCTION_CALL_SIZE_IN_BYTES * DAPP_MAX_CALLS + 32 -global DAPP_PAYLOAD_SIZE_IN_BYTES: u64 = 130; +global DAPP_PAYLOAD_SIZE_IN_BYTES: u32 = 130; // Note: If you change the following struct you have to update default_entrypoint.ts // docs:start:app-payload-struct -struct DAppPayload { +pub struct DAppPayload { function_calls: [FunctionCall; DAPP_MAX_CALLS], nonce: Field, } diff --git a/noir-projects/noir-contracts/contracts/app_subscription_contract/src/main.nr b/noir-projects/noir-contracts/contracts/app_subscription_contract/src/main.nr index 7be2b0de514..dc5db7ace32 100644 --- a/noir-projects/noir-contracts/contracts/app_subscription_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/app_subscription_contract/src/main.nr @@ -1,36 +1,39 @@ mod subscription_note; mod dapp_payload; +use dep::aztec::macros::aztec; + +#[aztec] contract AppSubscription { use crate::{dapp_payload::DAppPayload, subscription_note::SubscriptionNote}; use aztec::{ - prelude::{AztecAddress, Map, PrivateMutable, SharedImmutable}, + prelude::{AztecAddress, Map, PrivateMutable, SharedImmutable}, keys::getters::get_public_keys, + protocol_types::constants::MAX_FIELD_VALUE, utils::comparison::Comparator, encrypted_logs::encrypted_note_emission::{encode_and_encrypt_note, encode_and_encrypt_note_with_keys}, - keys::getters::get_current_public_keys, protocol_types::constants::MAX_FIELD_VALUE, - utils::comparison::Comparator + macros::{storage::storage, functions::{public, initializer, private}} }; use authwit::auth::assert_current_call_valid_authwit; use token::Token; use router::utils::privately_check_block_number; - #[aztec(storage)] - struct Storage { + #[storage] + struct Storage { // The following is only needed in private but we use ShareImmutable here instead of PrivateImmutable because // the value can be publicly known and SharedImmutable provides us with a better devex here because we don't // have to bother with sharing the note between pixies of users. - target_address: SharedImmutable, - subscription_token_address: SharedImmutable, - subscription_recipient_address: SharedImmutable, - subscription_price: SharedImmutable, - subscriptions: Map>, - fee_juice_limit_per_tx: SharedImmutable, + target_address: SharedImmutable, + subscription_token_address: SharedImmutable, + subscription_recipient_address: SharedImmutable, + subscription_price: SharedImmutable, + subscriptions: Map, Context>, + fee_juice_limit_per_tx: SharedImmutable, } global SUBSCRIPTION_DURATION_IN_BLOCKS = 5; global SUBSCRIPTION_TXS = 5; - #[aztec(private)] + #[private] fn entrypoint(payload: DAppPayload, user_address: AztecAddress) { // Default msg_sender for entrypoints is now Fr.max_value rather than 0 addr (see #7190 & #7404) assert(context.msg_sender().to_field() == MAX_FIELD_VALUE); @@ -59,8 +62,8 @@ contract AppSubscription { payload.execute_calls(&mut context, storage.target_address.read_private()); } - #[aztec(public)] - #[aztec(initializer)] + #[public] + #[initializer] fn constructor( target_address: AztecAddress, subscription_recipient_address: AztecAddress, @@ -75,7 +78,7 @@ contract AppSubscription { storage.fee_juice_limit_per_tx.initialize(fee_juice_limit_per_tx); } - #[aztec(private)] + #[private] fn subscribe(subscriber: AztecAddress, nonce: Field, expiry_block_number: Field, tx_count: Field) { assert(tx_count as u64 <= SUBSCRIPTION_TXS as u64); @@ -94,8 +97,8 @@ contract AppSubscription { &mut context ); - let subscriber_keys = get_current_public_keys(&mut context, subscriber); - let msg_sender_ovpk_m = get_current_public_keys(&mut context, context.msg_sender()).ovpk_m; + let subscriber_keys = get_public_keys(subscriber); + let msg_sender_ovpk_m = get_public_keys(context.msg_sender()).ovpk_m; let mut subscription_note = SubscriptionNote::new(subscriber_keys.npk_m.hash(), expiry_block_number, tx_count); storage.subscriptions.at(subscriber).initialize_or_replace(&mut subscription_note).emit( diff --git a/noir-projects/noir-contracts/contracts/app_subscription_contract/src/subscription_note.nr b/noir-projects/noir-contracts/contracts/app_subscription_contract/src/subscription_note.nr index 36ca60c7515..29a55da9218 100644 --- a/noir-projects/noir-contracts/contracts/app_subscription_contract/src/subscription_note.nr +++ b/noir-projects/noir-contracts/contracts/app_subscription_contract/src/subscription_note.nr @@ -1,16 +1,12 @@ use dep::aztec::{ hash::poseidon2_hash_with_separator, note::utils::compute_note_hash_for_nullify, keys::getters::get_nsk_app, oracle::unsafe_rand::unsafe_rand, - prelude::{PrivateContext, NoteHeader, NoteInterface}, - protocol_types::constants::GENERATOR_INDEX__NOTE_NULLIFIER + prelude::{PrivateContext, NoteHeader, NullifiableNote}, + protocol_types::constants::GENERATOR_INDEX__NOTE_NULLIFIER, macros::notes::note }; -global SUBSCRIPTION_NOTE_LEN: Field = 4; -// SUBSCRIPTION_NOTE_BYTES_LEN * 32 + 32(storage_slot as bytes) + 32(note_type_id as bytes) -global SUBSCRIPTION_NOTE_BYTES_LEN: Field = SUBSCRIPTION_NOTE_LEN * 32 + 64; - -#[aztec(note)] -struct SubscriptionNote { +#[note] +pub struct SubscriptionNote { // The nullifying public key hash is used with the nsk_app to ensure that the note can be privately spent. npk_m_hash: Field, expiry_block_number: Field, @@ -19,7 +15,7 @@ struct SubscriptionNote { randomness: Field, } -impl NoteInterface for SubscriptionNote { +impl NullifiableNote for SubscriptionNote { fn compute_nullifier(self, context: &mut PrivateContext, note_hash_for_nullify: Field) -> Field { let secret = context.request_nsk_app(self.npk_m_hash); poseidon2_hash_with_separator( @@ -31,7 +27,7 @@ impl NoteInterface for Subsc ) } - fn compute_nullifier_without_context(self) -> Field { + unconstrained fn compute_nullifier_without_context(self) -> Field { let note_hash_for_nullify = compute_note_hash_for_nullify(self); let secret = get_nsk_app(self.npk_m_hash); poseidon2_hash_with_separator( diff --git a/noir-projects/noir-contracts/contracts/auth_contract/src/main.nr b/noir-projects/noir-contracts/contracts/auth_contract/src/main.nr index 885fbdbd162..18f4cd0aebb 100644 --- a/noir-projects/noir-contracts/contracts/auth_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/auth_contract/src/main.nr @@ -1,30 +1,37 @@ +mod test; + // Test contract showing basic public access control that can be used in private. It uses a SharedMutable state variable to // publicly store the address of an authorized account that can call private functions. +use dep::aztec::macros::aztec; + +#[aztec] contract Auth { - use dep::aztec::protocol_types::address::AztecAddress; - use dep::aztec::state_vars::{PublicImmutable, SharedMutable}; + use dep::aztec::{ + protocol_types::address::AztecAddress, state_vars::{PublicImmutable, SharedMutable}, + macros::{storage::storage, functions::{private, public, initializer, view}} + }; // Authorizing a new address has a certain block delay before it goes into effect. - global CHANGE_AUTHORIZED_DELAY_BLOCKS = 5; + global CHANGE_AUTHORIZED_DELAY_BLOCKS: u32 = 5; - #[aztec(storage)] - struct Storage { + #[storage] + struct Storage { // Admin can change the value of the authorized address via set_authorized() - admin: PublicImmutable, + admin: PublicImmutable, // docs:start:shared_mutable_storage - authorized: SharedMutable, + authorized: SharedMutable, // docs:end:shared_mutable_storage } - #[aztec(public)] - #[aztec(initializer)] + #[public] + #[initializer] fn constructor(admin: AztecAddress) { assert(!admin.is_zero(), "invalid admin"); storage.admin.initialize(admin); } // docs:start:shared_mutable_schedule - #[aztec(public)] + #[public] fn set_authorized(authorized: AztecAddress) { assert_eq(storage.admin.read(), context.msg_sender(), "caller is not admin"); storage.authorized.schedule_value_change(authorized); @@ -32,8 +39,8 @@ contract Auth { } // docs:start:public_getter - #[aztec(public)] - #[aztec(view)] + #[public] + #[view] fn get_authorized() -> AztecAddress { // docs:start:shared_mutable_get_current_public storage.authorized.get_current_value_in_public() @@ -41,8 +48,8 @@ contract Auth { } // docs:end:public_getter - #[aztec(public)] - #[aztec(view)] + #[public] + #[view] fn get_scheduled_authorized() -> AztecAddress { // docs:start:shared_mutable_get_scheduled_public let (scheduled_value, _block_of_change): (AztecAddress, u32) = storage.authorized.get_scheduled_value_in_public(); @@ -50,18 +57,18 @@ contract Auth { scheduled_value } - #[aztec(public)] - #[aztec(view)] + #[public] + #[view] fn get_authorized_delay() -> pub u32 { storage.authorized.get_current_delay_in_public() } - #[aztec(public)] + #[public] fn set_authorized_delay(new_delay: u32) { storage.authorized.schedule_delay_change(new_delay); } - #[aztec(private)] + #[private] fn do_private_authorized_thing() { // Reading a value from authorized in private automatically adds an extra validity condition: the base rollup // circuit will reject this tx if included in a block past the block horizon, which is as far as the circuit can @@ -72,8 +79,8 @@ contract Auth { assert_eq(authorized, context.msg_sender(), "caller is not authorized"); } - #[aztec(private)] - #[aztec(view)] + #[private] + #[view] fn get_authorized_in_private() -> AztecAddress { storage.authorized.get_current_value_in_private() } diff --git a/noir-projects/noir-contracts/contracts/auth_contract/src/test.nr b/noir-projects/noir-contracts/contracts/auth_contract/src/test.nr new file mode 100644 index 00000000000..23d3896f7b7 --- /dev/null +++ b/noir-projects/noir-contracts/contracts/auth_contract/src/test.nr @@ -0,0 +1,2 @@ +mod main; +mod utils; diff --git a/noir-projects/noir-contracts/contracts/auth_contract/src/test/main.nr b/noir-projects/noir-contracts/contracts/auth_contract/src/test/main.nr new file mode 100644 index 00000000000..f0a7775b16c --- /dev/null +++ b/noir-projects/noir-contracts/contracts/auth_contract/src/test/main.nr @@ -0,0 +1,123 @@ +use crate::test::utils; +use crate::Auth; + +use dep::aztec::prelude::AztecAddress; + +global CHANGE_AUTHORIZED_DELAY_BLOCKS = 5; + +// TODO (#8588): These were ported over directly from e2e tests. Refactor these in the correct TXe style. +#[test] +unconstrained fn main() { + // Setup without account contracts. We are not using authwits here, so dummy accounts are enough + let (env, auth_contract_address, admin, to_authorize, other) = utils::setup(); + + let authorized_is_unset_initially = || { + env.impersonate(admin); + let authorized = env.call_public(Auth::at(auth_contract_address).get_authorized()); + assert_eq(authorized, AztecAddress::from_field(0)); + }; + authorized_is_unset_initially(); + + let non_admin_cannot_set_unauthorized = || { + env.impersonate(other); + env.assert_public_call_fails(Auth::at(auth_contract_address).set_authorized(to_authorize)); + }; + non_admin_cannot_set_unauthorized(); + + let admin_sets_authorized = || { + env.impersonate(admin); + env.call_public(Auth::at(auth_contract_address).set_authorized(to_authorize)); + env.advance_block_by(1); + + let scheduled_authorized = env.call_public(Auth::at(auth_contract_address).get_scheduled_authorized()); + assert_eq(scheduled_authorized, to_authorize); + }; + admin_sets_authorized(); + + let authorized_is_not_yet_effective = || { + env.impersonate(to_authorize); + let authorized: AztecAddress = env.call_public(Auth::at(auth_contract_address).get_authorized()); + assert_eq(authorized, AztecAddress::zero()); + + env.assert_private_call_fails(Auth::at(auth_contract_address).do_private_authorized_thing()); + }; + authorized_is_not_yet_effective(); + + let authorized_becomes_effective_after_delay = || { + env.impersonate(to_authorize); + + // We advance block by 4, because the delay is 5, and we initially advanced block by one after setting the value. See below comment for explanation. + env.advance_block_by(CHANGE_AUTHORIZED_DELAY_BLOCKS - 1); + let authorized: AztecAddress = env.call_public(Auth::at(auth_contract_address).get_authorized()); + assert_eq(authorized, to_authorize); + + let authorized_in_private: AztecAddress = env.call_private(Auth::at(auth_contract_address).get_authorized_in_private()); + assert_eq(authorized_in_private, AztecAddress::zero()); + + // We need to always advance the block one more time to get the current value in private, compared to the value in public. + // To see why let's see this diagram. + // When we schedule a change in public, lets say we are at block 2 (building a tx to be included in block 2), which means the latest committed block is block 1. + // Thus, the value change will be set to block 7 (2 + 5). + // If we now advance our env by 5 blocks, we will be at block 7 (building a tx to be included in block 7), which means the latest committed block is block 6. + // Reading the value in public will work, because it will use the current block (7), and the current block is the block of change; but + // if we try to create a historical proof, we do not have access to block 7 yet, and have to build the proof off of block 6, but at this time, the value change will not have + // taken place yet, therefore we need to be at block 8 (building a tx to be included in block 8), for the historical proof to work, as it will have access to the full block 7 + // where the value change takes effect. + // Note: We do not see this behavior in the e2e tests because setting the value inplicitly advances the block number by 1. + // 1 2 3 4 5 6 7 8 9 + // | | | | | | | | | + // ^ + // value change scheduled here + // ^ + // get_authorized() (public) called here with block_number = 7 + // ^ + // get_authorized() (private) called here with block_number = 8 + env.advance_block_by(1); + let authorized_in_private_again: AztecAddress = env.call_private(Auth::at(auth_contract_address).get_authorized_in_private()); + assert_eq(authorized_in_private_again, to_authorize); + + env.call_private_void(Auth::at(auth_contract_address).do_private_authorized_thing()); + }; + authorized_becomes_effective_after_delay(); + + let authorize_other = || { + env.impersonate(admin); + env.call_public(Auth::at(auth_contract_address).set_authorized(other)); + env.advance_block_by(1); + + let scheduled_authorized = env.call_public(Auth::at(auth_contract_address).get_scheduled_authorized()); + assert_eq(scheduled_authorized, other); + + let authorized: AztecAddress = env.call_public(Auth::at(auth_contract_address).get_authorized()); + assert_eq(authorized, to_authorize); + + env.impersonate(to_authorize); + env.call_private_void(Auth::at(auth_contract_address).do_private_authorized_thing()); + + env.impersonate(other); + env.assert_private_call_fails(Auth::at(auth_contract_address).do_private_authorized_thing()); + }; + authorize_other(); + + let authorized_becomes_effective_after_delay_again = || { + env.impersonate(to_authorize); + + // We advance the block by 4 again like above + env.advance_block_by(CHANGE_AUTHORIZED_DELAY_BLOCKS - 1); + let authorized: AztecAddress = env.call_public(Auth::at(auth_contract_address).get_authorized()); + assert_eq(authorized, other); + + let authorized_in_private: AztecAddress = env.call_private(Auth::at(auth_contract_address).get_authorized_in_private()); + assert_eq(authorized_in_private, to_authorize); + + env.advance_block_by(1); + let authorized_in_private_again: AztecAddress = env.call_private(Auth::at(auth_contract_address).get_authorized_in_private()); + assert_eq(authorized_in_private_again, other); + + env.assert_private_call_fails(Auth::at(auth_contract_address).do_private_authorized_thing()); + + env.impersonate(other); + env.call_private_void(Auth::at(auth_contract_address).do_private_authorized_thing()); + }; + authorized_becomes_effective_after_delay_again(); +} diff --git a/noir-projects/noir-contracts/contracts/auth_contract/src/test/utils.nr b/noir-projects/noir-contracts/contracts/auth_contract/src/test/utils.nr new file mode 100644 index 00000000000..5f3204cf9c3 --- /dev/null +++ b/noir-projects/noir-contracts/contracts/auth_contract/src/test/utils.nr @@ -0,0 +1,18 @@ +use dep::aztec::{prelude::AztecAddress, test::helpers::test_environment::TestEnvironment}; + +use crate::Auth; + +unconstrained pub fn setup() -> (&mut TestEnvironment, AztecAddress, AztecAddress, AztecAddress, AztecAddress) { + let mut env = TestEnvironment::new(); + + let admin = env.create_account(); + let to_authorize = env.create_account(); + let other = env.create_account(); + + let initializer_call_interface = Auth::interface().constructor(admin); + + let auth_contract = env.deploy_self("Auth").with_public_initializer(initializer_call_interface); + let auth_contract_address = auth_contract.to_address(); + env.advance_block_by(1); + (&mut env, auth_contract_address, admin, to_authorize, other) +} diff --git a/noir-projects/noir-contracts/contracts/auth_registry_contract/src/main.nr b/noir-projects/noir-contracts/contracts/auth_registry_contract/src/main.nr index 12b35516ba2..965f39ea20a 100644 --- a/noir-projects/noir-contracts/contracts/auth_registry_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/auth_registry_contract/src/main.nr @@ -1,12 +1,18 @@ +use dep::aztec::macros::aztec; + +#[aztec] contract AuthRegistry { - use dep::aztec::{state_vars::{PublicMutable, Map}, protocol_types::address::AztecAddress}; + use dep::aztec::{ + state_vars::{PublicMutable, Map}, protocol_types::address::AztecAddress, + macros::{storage::storage, functions::{private, public, internal}} + }; use dep::authwit::auth::{IS_VALID_SELECTOR, compute_authwit_message_hash, assert_current_call_valid_authwit}; - #[aztec(storage)] - struct Storage { - reject_all: Map>, + #[storage] + struct Storage { + reject_all: Map, Context>, // on_behalf_of => authwit hash => authorized - approved_actions: Map>>, + approved_actions: Map, Context>, Context>, } /** @@ -15,26 +21,26 @@ contract AuthRegistry { * @param message_hash The message hash being authorized * @param authorize True if the caller is authorized to perform the message hash, false otherwise */ - #[aztec(public)] + #[public] fn set_authorized(message_hash: Field, authorize: bool) { storage.approved_actions.at(context.msg_sender()).at(message_hash).write(authorize); } /** * Updates the `reject_all` value for `msg_sender`. - * + * * When `reject_all` is `true` any `consume` on `msg_sender` will revert. - * + * * @param reject True if all actions should be rejected, false otherwise */ - #[aztec(public)] + #[public] fn set_reject_all(reject: bool) { storage.reject_all.at(context.msg_sender()).write(reject); } /** * Consumes an `inner_hash` on behalf of `on_behalf_of` if the caller is authorized to do so. - * + * * Will revert even if the caller is authorized if `reject_all` is set to true for `on_behalf_of`. * This is to support "mass-revoke". * @@ -42,7 +48,7 @@ contract AuthRegistry { * @param inner_hash The inner_hash of the authwit * @return `IS_VALID_SELECTOR` if the action was consumed, revert otherwise */ - #[aztec(public)] + #[public] fn consume(on_behalf_of: AztecAddress, inner_hash: Field) -> Field { assert_eq(false, storage.reject_all.at(on_behalf_of).read(), "rejecting all"); @@ -63,7 +69,7 @@ contract AuthRegistry { /** * Updates a public authwit using a private authwit - * + * * Useful for the case where you want someone else to insert a public authwit for you. * For example, if Alice wants Bob to insert an authwit in public, such that they can execute * a trade, Alice can create a private authwit, and Bob can call this function with it. @@ -72,7 +78,7 @@ contract AuthRegistry { * @param message_hash The message hash to authorize * @param authorize True if the message hash should be authorized, false otherwise */ - #[aztec(private)] + #[private] fn set_authorized_private(approver: AztecAddress, message_hash: Field, authorize: bool) { assert_current_call_valid_authwit(&mut context, approver); AuthRegistry::at(context.this_address())._set_authorized(approver, message_hash, authorize).enqueue(&mut context); @@ -81,38 +87,38 @@ contract AuthRegistry { /** * Internal function to update the `authorized` value for `approver` for `messageHash`. * Used along with `set_authorized_private` to update the public authwit. - * + * * @param approver The address of the approver * @param message_hash The message hash being authorized * @param authorize True if the caller is authorized to perform the message hash, false otherwise */ - #[aztec(public)] - #[aztec(internal)] + #[public] + #[internal] fn _set_authorized(approver: AztecAddress, message_hash: Field, authorize: bool) { storage.approved_actions.at(approver).at(message_hash).write(authorize); } /** * Fetches the `reject_all` value for `on_behalf_of`. - * + * * @param on_behalf_of The address to check * @return True if all actions are rejected, false otherwise */ - #[aztec(public)] - #[aztec(view)] + #[public] + #[view] fn is_reject_all(on_behalf_of: AztecAddress) -> bool { storage.reject_all.at(on_behalf_of).read() } /** * Fetches the `authorized` value for `on_behalf_of` for `message_hash`. - * + * * @param on_behalf_of The address on whose behalf the action is being consumed * @param message_hash The message hash to check * @return True if the caller is authorized to perform the action, false otherwise */ - #[aztec(public)] - #[aztec(view)] + #[public] + #[view] fn is_consumable(on_behalf_of: AztecAddress, message_hash: Field) -> bool { storage.approved_actions.at(on_behalf_of).at(message_hash).read() } diff --git a/noir-projects/noir-contracts/contracts/auth_wit_test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/auth_wit_test_contract/src/main.nr index 997d53439a6..8fbf2ba8c82 100644 --- a/noir-projects/noir-contracts/contracts/auth_wit_test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/auth_wit_test_contract/src/main.nr @@ -1,13 +1,17 @@ +use dep::aztec::macros::aztec; + +#[aztec] contract AuthWitTest { - use dep::aztec::protocol_types::address::AztecAddress; + use dep::aztec::{protocol_types::address::AztecAddress, macros::{functions::{private, public}}}; + use dep::authwit::auth::{assert_inner_hash_valid_authwit, assert_inner_hash_valid_authwit_public}; - #[aztec(private)] + #[private] fn consume(on_behalf_of: AztecAddress, inner_hash: Field) { assert_inner_hash_valid_authwit(&mut context, on_behalf_of, inner_hash); } - #[aztec(public)] + #[public] fn consume_public(on_behalf_of: AztecAddress, inner_hash: Field) { assert_inner_hash_valid_authwit_public(&mut context, on_behalf_of, inner_hash); } diff --git a/noir-projects/noir-contracts/contracts/avm_initializer_test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/avm_initializer_test_contract/src/main.nr index 6e075e89a3e..8c74544a783 100644 --- a/noir-projects/noir-contracts/contracts/avm_initializer_test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/avm_initializer_test_contract/src/main.nr @@ -1,23 +1,25 @@ +use dep::aztec::macros::aztec; + +#[aztec] contract AvmInitializerTest { // Libs - use dep::aztec::state_vars::PublicImmutable; - use dep::aztec::protocol_types::address::AztecAddress; + use dep::aztec::{state_vars::PublicImmutable, macros::{storage::storage, functions::{initializer, public}}}; - #[aztec(storage)] - struct Storage { - immutable: PublicImmutable, + #[storage] + struct Storage { + immutable: PublicImmutable, } /************************************************************************ * Storage ************************************************************************/ - #[aztec(public)] - #[aztec(initializer)] + #[public] + #[initializer] fn constructor() { storage.immutable.initialize(42); } - #[aztec(public)] + #[public] fn read_storage_immutable() -> pub Field { storage.immutable.read() } diff --git a/noir-projects/noir-contracts/contracts/avm_test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/avm_test_contract/src/main.nr index a0fa23e74bc..122f5ce92b3 100644 --- a/noir-projects/noir-contracts/contracts/avm_test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/avm_test_contract/src/main.nr @@ -1,6 +1,6 @@ use dep::aztec::protocol_types::traits::{Serialize, Deserialize}; -struct Note { +pub struct Note { a: Field, b: Field, } @@ -17,6 +17,9 @@ impl Deserialize<2> for Note { } } +use dep::aztec::macros::aztec; + +#[aztec] contract AvmTest { use crate::Note; @@ -32,55 +35,56 @@ contract AvmTest { use dep::aztec::protocol_types::{address::{AztecAddress, EthAddress}, point::Point, scalar::Scalar}; use dep::aztec::oracle::get_contract_instance::{get_contract_instance_avm, get_contract_instance_internal_avm}; use dep::aztec::protocol_types::{abis::function_selector::FunctionSelector, storage::map::derive_storage_slot_in_map}; - use dep::aztec::context::gas::GasOpts; use dep::compressed_string::CompressedString; + use dep::aztec::macros::{storage::storage, functions::{public, private}}; + use dep::aztec::context::gas::GasOpts; - #[aztec(storage)] - struct Storage { - single: PublicMutable, - list: PublicMutable, - map: Map>, + #[storage] + struct Storage { + single: PublicMutable, + list: PublicMutable, + map: Map, Context>, } /************************************************************************ * Storage ************************************************************************/ - #[aztec(public)] + #[public] fn set_storage_single(a: Field) { storage.single.write(a); } - #[aztec(public)] + #[public] fn read_storage_single() -> Field { storage.single.read() } // should still be able to use ` -> pub *` for return type even though macro forces `pub` - #[aztec(public)] + #[public] fn set_read_storage_single(a: Field) -> pub Field { storage.single.write(a); storage.single.read() } - #[aztec(public)] + #[public] fn set_storage_list(a: Field, b: Field) { storage.list.write(Note { a, b }); } - #[aztec(public)] + #[public] fn read_storage_list() -> [Field; 2] { let note: Note = storage.list.read(); note.serialize() } - #[aztec(public)] + #[public] fn set_storage_map(to: AztecAddress, amount: u32) -> Field { storage.map.at(to).write(amount); // returns storage slot for key derive_storage_slot_in_map(storage.map.storage_slot, to) } - #[aztec(public)] + #[public] fn add_storage_map(to: AztecAddress, amount: u32) -> Field { let new_balance = storage.map.at(to).read().add(amount); storage.map.at(to).write(new_balance); @@ -88,12 +92,12 @@ contract AvmTest { derive_storage_slot_in_map(storage.map.storage_slot, to) } - #[aztec(public)] + #[public] fn read_storage_map(address: AztecAddress) -> u32 { storage.map.at(address).read() } - #[aztec(public)] + #[public] fn add_args_return(arg_a: Field, arg_b: Field) -> Field { arg_a + arg_b } @@ -101,47 +105,47 @@ contract AvmTest { /************************************************************************ * General Opcodes ************************************************************************/ - #[aztec(public)] + #[public] fn set_opcode_u8() -> u8 { 8 as u8 } - #[aztec(public)] + #[public] fn set_opcode_u32() -> u32 { 1 << 30 as u8 } - #[aztec(public)] + #[public] fn set_opcode_u64() -> u64 { 1 << 60 as u8 } - #[aztec(public)] + #[public] fn set_opcode_small_field() -> Field { big_field_128_bits } - #[aztec(public)] + #[public] fn set_opcode_big_field() -> Field { big_field_136_bits } - #[aztec(public)] + #[public] fn set_opcode_really_big_field() -> Field { big_field_254_bits } - #[aztec(public)] + #[public] fn add_u128(a: U128, b: U128) -> U128 { a + b } - #[aztec(public)] + #[public] fn modulo2(a: u64) -> u64 { a % 2 } - #[aztec(public)] + #[public] fn elliptic_curve_add_and_double() -> Point { let g = Point { x: 1, y: 17631683881184975370165255887551781615748388533673675138860, is_infinite: false }; @@ -150,7 +154,7 @@ contract AvmTest { added } - #[aztec(public)] + #[public] fn variable_base_msm() -> Point { let g = Point { x: 1, y: 17631683881184975370165255887551781615748388533673675138860, is_infinite: false }; let scalar = Scalar { lo: 3, hi: 0 }; @@ -159,7 +163,7 @@ contract AvmTest { triple_g } - #[aztec(public)] + #[public] fn pedersen_commit(x: Field, y: Field) -> EmbeddedCurvePoint { let commitment = dep::std::hash::pedersen_commitment_with_separator([x, y], 20); commitment @@ -169,20 +173,20 @@ contract AvmTest { * Misc ************************************************************************/ - #[aztec(public)] + #[public] fn u128_addition_overflow() -> U128 { let max_u128: U128 = U128::from_hex("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"); let one: U128 = U128::from_integer(1); max_u128 + one } - #[aztec(public)] + #[public] fn u128_from_integer_overflow() -> U128 { let should_overflow: Field = 2.pow_32(128); // U128::max() + 1; U128::from_integer(should_overflow) } - #[aztec(public)] + #[public] fn to_radix_le(input: Field) -> [u8; 10] { input.to_le_radix(/*base=*/ 2) } @@ -196,12 +200,12 @@ contract AvmTest { inner_helper_with_failed_assertion(); } - #[aztec(public)] + #[public] fn assertion_failure() { helper_with_failed_assertion() } - #[aztec(public)] + #[public] fn debug_logging() { dep::aztec::oracle::debug_log::debug_log("just text"); dep::aztec::oracle::debug_log::debug_log_format("second: {1}", [1, 2, 3, 4]); @@ -209,41 +213,54 @@ contract AvmTest { dep::aztec::oracle::debug_log::debug_log("tabs and newlines\n\t- first\n\t- second"); } - #[aztec(public)] + #[public] fn assert_same(arg_a: Field, arg_b: Field) -> pub Field { assert(arg_a == arg_b, "Values are not equal"); 1 } + #[public] + fn assert_calldata_copy(args: [Field; 3]) { + let offset = 0; + let cd: [Field; 3] = dep::aztec::context::public_context::calldata_copy(offset, 3); + assert(cd == args, "Calldata copy failed"); + } + + #[public] + fn return_oracle() -> [Field; 3] { + dep::aztec::context::public_context::avm_return([1, 2, 3]); + [4, 5, 6] // Should not get here. + } + /************************************************************************ * Hashing functions ************************************************************************/ - #[aztec(public)] + #[public] fn keccak_hash(data: [u8; 10]) -> [u8; 32] { std::hash::keccak256(data, data.len() as u32) } - #[aztec(public)] + #[public] fn keccak_f1600(data: [u64; 25]) -> [u64; 25] { std::hash::keccak::keccakf1600(data) } - #[aztec(public)] + #[public] fn poseidon2_hash(data: [Field; 10]) -> Field { std::hash::poseidon2::Poseidon2::hash(data, data.len()) } - #[aztec(public)] + #[public] fn sha256_hash(data: [u8; 10]) -> [u8; 32] { std::hash::sha256(data) } - #[aztec(public)] + #[public] fn pedersen_hash(data: [Field; 10]) -> Field { std::hash::pedersen_hash(data) } - #[aztec(public)] + #[public] fn pedersen_hash_with_index(data: [Field; 10]) -> Field { std::hash::pedersen_hash_with_separator(data, /*index=*/ 20) } @@ -251,7 +268,7 @@ contract AvmTest { /************************************************************************ * Contract instance ************************************************************************/ - #[aztec(public)] + #[public] fn test_get_contract_instance_raw() { let fields = get_contract_instance_internal_avm(context.this_address()); // The values here should match those in `avm_simulator.test.ts>Contract>GETCONTRACTINSTANCE deserializes correctly` @@ -264,7 +281,7 @@ contract AvmTest { assert(fields[5] == 0x161718); } - #[aztec(public)] + #[public] fn test_get_contract_instance() { let ci = get_contract_instance_avm(context.this_address()); assert(ci.is_some(), "Contract instance not found!"); @@ -273,78 +290,78 @@ contract AvmTest { /************************************************************************ * AvmContext functions ************************************************************************/ - #[aztec(public)] + #[public] fn get_address() -> AztecAddress { context.this_address() } - #[aztec(public)] + #[public] fn get_storage_address() -> AztecAddress { context.storage_address() } - #[aztec(public)] + #[public] fn get_sender() -> AztecAddress { context.msg_sender() } - #[aztec(public)] + #[public] fn get_function_selector() -> FunctionSelector { context.selector() } - #[aztec(public)] + #[public] fn get_transaction_fee() -> Field { context.transaction_fee() } - #[aztec(public)] + #[public] fn get_chain_id() -> Field { context.chain_id() } - #[aztec(public)] + #[public] fn get_version() -> Field { context.version() } - #[aztec(public)] + #[public] fn get_block_number() -> Field { context.block_number() } - #[aztec(public)] + #[public] fn get_timestamp() -> u64 { context.timestamp() } - #[aztec(public)] + #[public] fn get_fee_per_l2_gas() -> Field { context.fee_per_l2_gas() } - #[aztec(public)] + #[public] fn get_fee_per_da_gas() -> Field { context.fee_per_da_gas() } - #[aztec(public)] + #[public] fn get_l2_gas_left() -> Field { context.l2_gas_left() } - #[aztec(public)] + #[public] fn get_da_gas_left() -> Field { context.da_gas_left() } - #[aztec(public)] + #[public] fn assert_timestamp(expected_timestamp: u64) { let timestamp = context.timestamp(); assert(timestamp == expected_timestamp, "timestamp does not match"); } - #[aztec(public)] + #[public] fn check_selector() { assert( context.selector() == comptime { @@ -353,12 +370,12 @@ contract AvmTest { ); } - #[aztec(public)] + #[public] fn get_args_hash(_a: u8, _fields: [Field; 3]) -> Field { context.get_args_hash() } - #[aztec(public)] + #[public] fn emit_unencrypted_log() { context.emit_unencrypted_log(/*message=*/ [10, 20, 30]); context.emit_unencrypted_log(/*message=*/ "Hello, world!"); @@ -366,36 +383,36 @@ contract AvmTest { context.emit_unencrypted_log(/*message=*/ s); } - #[aztec(public)] + #[public] fn note_hash_exists(note_hash: Field, leaf_index: Field) -> bool { context.note_hash_exists(note_hash, leaf_index) } // Use the standard context interface to emit a new note hash - #[aztec(public)] + #[public] fn new_note_hash(note_hash: Field) { context.push_note_hash(note_hash); } // Use the standard context interface to emit a new nullifier - #[aztec(public)] + #[public] fn new_nullifier(nullifier: Field) { context.push_nullifier(nullifier); } // Use the standard context interface to check for a nullifier - #[aztec(public)] + #[public] fn nullifier_exists(nullifier: Field) -> bool { context.nullifier_exists(nullifier, context.storage_address()) } - #[aztec(public)] + #[public] fn assert_nullifier_exists(nullifier: Field) { assert(context.nullifier_exists(nullifier, context.storage_address()), "Nullifier doesn't exist!"); } // Use the standard context interface to emit a new nullifier - #[aztec(public)] + #[public] fn emit_nullifier_and_check(nullifier: Field) { context.push_nullifier(nullifier); let exists = context.nullifier_exists(nullifier, context.storage_address()); @@ -403,19 +420,19 @@ contract AvmTest { } // Create the same nullifier twice (shouldn't work!) - #[aztec(public)] + #[public] fn nullifier_collision(nullifier: Field) { context.push_nullifier(nullifier); // Can't do this twice! context.push_nullifier(nullifier); } - #[aztec(public)] + #[public] fn l1_to_l2_msg_exists(msg_hash: Field, msg_leaf_index: Field) -> bool { context.l1_to_l2_msg_exists(msg_hash, msg_leaf_index) } - #[aztec(public)] + #[public] fn send_l2_to_l1_msg(recipient: EthAddress, content: Field) { context.message_portal(recipient, content) } @@ -423,7 +440,7 @@ contract AvmTest { /************************************************************************ * Nested calls ************************************************************************/ - #[aztec(public)] + #[public] fn nested_call_to_add_with_gas( arg_a: Field, arg_b: Field, @@ -434,30 +451,30 @@ contract AvmTest { } // Use the `call_public_function` wrapper to initiate a nested call to the add function - #[aztec(public)] + #[public] fn nested_call_to_add(arg_a: Field, arg_b: Field) -> pub Field { AvmTest::at(context.this_address()).add_args_return(arg_a, arg_b).call(&mut context) } // Indirectly call_static the external call opcode to initiate a nested call to the add function - #[aztec(public)] + #[public] fn nested_static_call_to_add(arg_a: Field, arg_b: Field) -> pub Field { AvmTest::at(context.this_address()).add_args_return(arg_a, arg_b).view(&mut context) } // Indirectly call_static `set_storage_single`. Should revert since it's accessing storage. - #[aztec(public)] + #[public] fn nested_static_call_to_set_storage() { AvmTest::at(context.this_address()).set_storage_single(20).view(&mut context); } - #[aztec(public)] + #[public] fn create_same_nullifier_in_nested_call(nestedAddress: AztecAddress, nullifier: Field) { context.push_nullifier(nullifier); AvmTest::at(nestedAddress).new_nullifier(nullifier).call(&mut context); } - #[aztec(public)] + #[public] fn create_different_nullifier_in_nested_call(nestedAddress: AztecAddress, nullifier: Field) { context.push_nullifier(nullifier); AvmTest::at(nestedAddress).new_nullifier(nullifier + 1).call(&mut context); @@ -466,9 +483,85 @@ contract AvmTest { /** * Enqueue a public call from private */ - #[aztec(private)] + #[private] fn enqueue_public_from_private() { AvmTest::at(context.this_address()).set_opcode_u8().enqueue_view(&mut context); AvmTest::at(context.this_address()).set_read_storage_single(5).enqueue(&mut context); } + + /************************************************************************ + * Bulk testing: exercise many functions in a single call. + * It only makes sense to call functions with side effects (or oracle + * calls - but not blackboxes!), since otherwise the whole call will + * be optimized away. + ************************************************************************/ + #[public] + fn bulk_testing(args_field: [Field; 10], args_u8: [u8; 10]) { + dep::aztec::oracle::debug_log::debug_log("set_storage_single"); + set_storage_single(30); + dep::aztec::oracle::debug_log::debug_log("set_storage_list"); + set_storage_list(40, 50); + dep::aztec::oracle::debug_log::debug_log("read_storage_list"); + let _ = set_storage_map(context.this_address(), 60); + dep::aztec::oracle::debug_log::debug_log("add_storage_map"); + let _ = add_storage_map(context.this_address(), 10); + dep::aztec::oracle::debug_log::debug_log("read_storage_map"); + let _ = read_storage_map(context.this_address()); + dep::aztec::oracle::debug_log::debug_log("keccak_hash"); + let _ = keccak_hash(args_u8); + dep::aztec::oracle::debug_log::debug_log("sha256_hash"); + let _ = sha256_hash(args_u8); + dep::aztec::oracle::debug_log::debug_log("poseidon2_hash"); + let _ = poseidon2_hash(args_field); + dep::aztec::oracle::debug_log::debug_log("pedersen_hash"); + let _ = pedersen_hash(args_field); + dep::aztec::oracle::debug_log::debug_log("pedersen_hash_with_index"); + let _ = pedersen_hash_with_index(args_field); + dep::aztec::oracle::debug_log::debug_log("test_get_contract_instance"); + test_get_contract_instance(); + dep::aztec::oracle::debug_log::debug_log("get_address"); + let _ = get_address(); + dep::aztec::oracle::debug_log::debug_log("get_storage_address"); + let _ = get_storage_address(); + dep::aztec::oracle::debug_log::debug_log("get_sender"); + let _ = get_sender(); + dep::aztec::oracle::debug_log::debug_log("get_function_selector"); + let _ = get_function_selector(); + dep::aztec::oracle::debug_log::debug_log("get_transaction_fee"); + let _ = get_transaction_fee(); + dep::aztec::oracle::debug_log::debug_log("get_chain_id"); + let _ = get_chain_id(); + dep::aztec::oracle::debug_log::debug_log("get_version"); + let _ = get_version(); + dep::aztec::oracle::debug_log::debug_log("get_block_number"); + let _ = get_block_number(); + dep::aztec::oracle::debug_log::debug_log("get_timestamp"); + let _ = get_timestamp(); + dep::aztec::oracle::debug_log::debug_log("get_fee_per_l2_gas"); + let _ = get_fee_per_l2_gas(); + dep::aztec::oracle::debug_log::debug_log("get_fee_per_da_gas"); + let _ = get_fee_per_da_gas(); + dep::aztec::oracle::debug_log::debug_log("get_l2_gas_left"); + let _ = get_l2_gas_left(); + dep::aztec::oracle::debug_log::debug_log("get_da_gas_left"); + let _ = get_da_gas_left(); + dep::aztec::oracle::debug_log::debug_log("emit_unencrypted_log"); + let _ = emit_unencrypted_log(); + dep::aztec::oracle::debug_log::debug_log("note_hash_exists"); + let _ = note_hash_exists(1, 2); + dep::aztec::oracle::debug_log::debug_log("new_note_hash"); + let _ = new_note_hash(1); + dep::aztec::oracle::debug_log::debug_log("new_nullifier"); + let _ = new_nullifier(1); + dep::aztec::oracle::debug_log::debug_log("nullifier_exists"); + let _ = nullifier_exists(1); + dep::aztec::oracle::debug_log::debug_log("l1_to_l2_msg_exists"); + let _ = l1_to_l2_msg_exists(1, 2); + dep::aztec::oracle::debug_log::debug_log("send_l2_to_l1_msg"); + let _ = send_l2_to_l1_msg(EthAddress::from_field(0x2020), 1); + dep::aztec::oracle::debug_log::debug_log("nested_call_to_add"); + let _ = nested_call_to_add(1, 2); + dep::aztec::oracle::debug_log::debug_log("nested_static_call_to_add"); + let _ = nested_static_call_to_add(1, 2); + } } diff --git a/noir-projects/noir-contracts/contracts/benchmarking_contract/src/main.nr b/noir-projects/noir-contracts/contracts/benchmarking_contract/src/main.nr index 5f7690615da..2116a55fa3a 100644 --- a/noir-projects/noir-contracts/contracts/benchmarking_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/benchmarking_contract/src/main.nr @@ -3,20 +3,23 @@ // would alter the metrics we're capturing in the benchmarks, and we want to keep the // subject being tested as unmodified as possible so we can detect metric changes that +use dep::aztec::macros::aztec; + +#[aztec] contract Benchmarking { - use dep::aztec::prelude::{AztecAddress, FunctionSelector, NoteHeader, NoteGetterOptions, Map, PublicMutable, PrivateSet}; - use dep::value_note::{utils::{increment, decrement}, value_note::ValueNote}; + use dep::aztec::prelude::{AztecAddress, NoteGetterOptions, Map, PublicMutable, PrivateSet}; + use dep::value_note::{utils::increment, value_note::ValueNote}; - use dep::aztec::context::gas::GasOpts; + use dep::aztec::macros::{storage::storage, functions::{private, public}}; - #[aztec(storage)] - struct Storage { - notes: Map>, - balances: Map>, + #[storage] + struct Storage { + notes: Map, Context>, + balances: Map, Context>, } // Creates a new value note for the target owner. Use this method to seed an initial set of notes. - #[aztec(private)] + #[private] fn create_note(owner: AztecAddress, outgoing_viewer: AztecAddress, value: Field) { // docs:start:increment_valuenote increment(storage.notes.at(owner), value, owner, outgoing_viewer); @@ -27,7 +30,7 @@ contract Benchmarking { // multiple txs that will land on the same block. // See https://discourse.aztec.network/t/utxo-concurrency-issues-for-private-state/635 // by @rahul-kothari for a full explanation on why this is needed. - #[aztec(private)] + #[private] fn recreate_note(owner: AztecAddress, outgoing_viewer: AztecAddress, index: u32) { let owner_notes = storage.notes.at(owner); let mut getter_options = NoteGetterOptions::new(); @@ -37,7 +40,7 @@ contract Benchmarking { } // Reads and writes to public storage and enqueues a call to another public function. - #[aztec(public)] + #[public] fn increment_balance(owner: AztecAddress, value: Field) { let current = storage.balances.at(owner).read(); storage.balances.at(owner).write(current + value); @@ -45,7 +48,7 @@ contract Benchmarking { } // Emits a public log. - #[aztec(public)] + #[public] fn broadcast(owner: AztecAddress) { context.emit_unencrypted_log(storage.balances.at(owner).read()); } diff --git a/noir-projects/noir-contracts/contracts/card_game_contract/src/cards.nr b/noir-projects/noir-contracts/contracts/card_game_contract/src/cards.nr index 543e33357d0..4d575eae01e 100644 --- a/noir-projects/noir-contracts/contracts/card_game_contract/src/cards.nr +++ b/noir-projects/noir-contracts/contracts/card_game_contract/src/cards.nr @@ -4,11 +4,11 @@ use dep::aztec::{ context::UnconstrainedContext, protocol_types::{traits::{ToField, Serialize, FromField}, constants::MAX_NOTE_HASH_READ_REQUESTS_PER_CALL}, encrypted_logs::encrypted_note_emission::encode_and_encrypt_note_with_keys, - keys::getters::get_current_public_keys, state_vars::PrivateSet, note::constants::MAX_NOTES_PER_PAGE + keys::getters::get_public_keys, state_vars::PrivateSet, note::constants::MAX_NOTES_PER_PAGE }; use dep::value_note::value_note::ValueNote; -struct Card { +pub struct Card { // We use u32s since u16s are unsupported strength: u32, points: u32, @@ -44,7 +44,7 @@ fn test_to_from_field() { } // docs:end:pure_noir_testing -struct CardNote { +pub struct CardNote { card: Card, note: ValueNote, } @@ -64,11 +64,11 @@ impl CardNote { } } -struct Deck { +pub struct Deck { set: PrivateSet, } -pub fn filter_cards( +pub fn filter_cards( notes: [Option; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL], desired_cards: [Card; N] ) -> [Option; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] { @@ -102,11 +102,12 @@ impl Deck { } impl Deck<&mut PrivateContext> { - pub fn add_cards(&mut self, cards: [Card; N], owner: AztecAddress) -> [CardNote] { - let owner_keys = get_current_public_keys(self.set.context, owner); + pub fn add_cards(&mut self, cards: [Card; N], owner: AztecAddress) -> [CardNote] { + let owner_keys = get_public_keys(owner); + let owner_ivpk_m = owner_keys.ivpk_m; let owner_npk_m_hash = owner_keys.npk_m.hash(); - let msg_sender_ovpk_m = get_current_public_keys(self.set.context, self.set.context.msg_sender()).ovpk_m; + let msg_sender_ovpk_m = get_public_keys(self.set.context.msg_sender()).ovpk_m; let mut inserted_cards = &[]; for card in cards { @@ -120,7 +121,7 @@ impl Deck<&mut PrivateContext> { inserted_cards } - pub fn remove_cards(&mut self, cards: [Card; N]) { + pub fn remove_cards(&mut self, cards: [Card; N]) { let options = NoteGetterOptions::with_filter(filter_cards, cards); let notes = self.set.pop_notes(options); assert(notes.len() == N, "Not all cards were removed"); @@ -151,7 +152,7 @@ pub fn get_pack_cards( owner: AztecAddress, context: &mut PrivateContext ) -> [Card; PACK_CARDS] { - let owner_npk_m_hash = get_current_public_keys(context, owner).npk_m.hash(); + let owner_npk_m_hash = get_public_keys(owner).npk_m.hash(); // generate pseudo randomness deterministically from 'seed' and user secret let secret = context.request_nsk_app(owner_npk_m_hash); @@ -173,7 +174,7 @@ pub fn get_pack_cards( cards } -pub fn compute_deck_strength(cards: [Card; N]) -> Field { +pub fn compute_deck_strength(cards: [Card; N]) -> Field { cards.fold( 0, |acc, card: Card| { diff --git a/noir-projects/noir-contracts/contracts/card_game_contract/src/game.nr b/noir-projects/noir-contracts/contracts/card_game_contract/src/game.nr index 057c40640cc..49c55c12c32 100644 --- a/noir-projects/noir-contracts/contracts/card_game_contract/src/game.nr +++ b/noir-projects/noir-contracts/contracts/card_game_contract/src/game.nr @@ -1,10 +1,10 @@ use dep::aztec::protocol_types::{address::AztecAddress, traits::{Serialize, Deserialize}}; use crate::cards::Card; -global NUMBER_OF_PLAYERS: u64 = 2; -global NUMBER_OF_CARDS_DECK: u64 = 2; +global NUMBER_OF_PLAYERS: u32 = 2; +global NUMBER_OF_CARDS_DECK: u32 = 2; -struct PlayerEntry { +pub struct PlayerEntry { address: AztecAddress, deck_strength: u32, points: u64, @@ -16,7 +16,7 @@ impl PlayerEntry { } } -global PLAYER_SERIALIZED_LEN: Field = 3; +global PLAYER_SERIALIZED_LEN: u32 = 3; impl Deserialize for PlayerEntry { fn deserialize(fields: [Field; PLAYER_SERIALIZED_LEN]) -> PlayerEntry { @@ -36,19 +36,19 @@ impl Eq for PlayerEntry { } } -global PLAYABLE_CARDS = 4; +global PLAYABLE_CARDS: u32 = 4; -struct Game { +pub struct Game { players: [PlayerEntry; NUMBER_OF_PLAYERS], rounds_cards: [Card; PLAYABLE_CARDS], started: bool, finished: bool, claimed: bool, - current_player: u64, - current_round: u64, + current_player: u32, + current_round: u32, } -global GAME_SERIALIZED_LEN: Field = 15; +global GAME_SERIALIZED_LEN: u32 = 15; impl Serialize for Game { fn serialize(game: Game) -> [Field; GAME_SERIALIZED_LEN] { @@ -88,8 +88,8 @@ impl Deserialize for Game { started: fields[10] as bool, finished: fields[11] as bool, claimed: fields[12] as bool, - current_player: fields[13] as u64, - current_round: fields[14] as u64 + current_player: fields[13] as u32, + current_round: fields[14] as u32 } } } @@ -155,7 +155,7 @@ impl Game { } fn _finish_round(&mut self) { - let round_offset = self.current_round * NUMBER_OF_PLAYERS; + let round_offset = self.current_round as u32 * NUMBER_OF_PLAYERS; self.current_round += 1; let mut winner_index = 0; diff --git a/noir-projects/noir-contracts/contracts/card_game_contract/src/main.nr b/noir-projects/noir-contracts/contracts/card_game_contract/src/main.nr index df8318028a1..095f870193b 100644 --- a/noir-projects/noir-contracts/contracts/card_game_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/card_game_contract/src/main.nr @@ -1,25 +1,27 @@ mod cards; mod game; +use dep::aztec::macros::aztec; + +#[aztec] contract CardGame { - use dep::aztec::protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress}; + use dep::aztec::protocol_types::address::AztecAddress; use dep::aztec::{hash::pedersen_hash, state_vars::{Map, PublicMutable}}; - use dep::value_note::{balance_utils, value_note::{ValueNote, VALUE_NOTE_LEN}}; - - use dep::aztec::note::{note_header::NoteHeader, constants::MAX_NOTES_PER_PAGE}; + use dep::aztec::note::constants::MAX_NOTES_PER_PAGE; - use crate::cards::{PACK_CARDS, Deck, Card, get_pack_cards, compute_deck_strength}; - use crate::game::{NUMBER_OF_PLAYERS, NUMBER_OF_CARDS_DECK, PLAYABLE_CARDS, PlayerEntry, Game, GAME_SERIALIZED_LEN}; + use crate::cards::{Deck, Card, get_pack_cards, compute_deck_strength}; + use crate::game::{PLAYABLE_CARDS, PlayerEntry, Game}; + use dep::aztec::macros::{storage::storage, functions::{private, public, internal}}; - #[aztec(storage)] - struct Storage { - collections: Map, - game_decks: Map>, - games: Map>, + #[storage] + struct Storage { + collections: Map, Context>, + game_decks: Map, Context>, Context>, + games: Map, Context>, } - #[aztec(private)] + #[private] fn buy_pack(seed: Field // The randomness used to generate the cards. Passed in for now. ) { let buyer = context.msg_sender(); @@ -29,7 +31,7 @@ contract CardGame { let _inserted_cards = collection.add_cards(cards, buyer); } - #[aztec(private)] + #[private] fn join_game(game: u32, cards_fields: [Field; 2]) { let cards = cards_fields.map(|card_field| Card::from_field(card_field)); @@ -43,8 +45,8 @@ contract CardGame { CardGame::at(context.this_address()).on_game_joined(game, player, strength as u32).enqueue(&mut context); } - #[aztec(public)] - #[aztec(internal)] + #[public] + #[internal] fn on_game_joined(game: u32, player: AztecAddress, deck_strength: u32) { let game_storage = storage.games.at(game as Field); @@ -54,7 +56,7 @@ contract CardGame { game_storage.write(game_data); } - #[aztec(public)] + #[public] fn start_game(game: u32) { let game_storage = storage.games.at(game as Field); @@ -63,7 +65,7 @@ contract CardGame { game_storage.write(game_data); } - #[aztec(private)] + #[private] fn play_card(game: u32, card: Card) { let player = context.msg_sender(); @@ -75,8 +77,8 @@ contract CardGame { // docs:end:call_public_function } - #[aztec(public)] - #[aztec(internal)] + #[public] + #[internal] fn on_card_played(game: u32, player: AztecAddress, card_as_field: Field) { let game_storage = storage.games.at(game as Field); @@ -90,7 +92,7 @@ contract CardGame { game_storage.write(game_data); } - #[aztec(private)] + #[private] fn claim_cards(game: u32, cards_fields: [Field; PLAYABLE_CARDS]) { let player = context.msg_sender(); let cards = cards_fields.map(|card_field| Card::from_field(card_field)); @@ -100,8 +102,8 @@ contract CardGame { CardGame::at(context.this_address()).on_cards_claimed(game, player, pedersen_hash(cards_fields, 0)).enqueue(&mut context); } - #[aztec(public)] - #[aztec(internal)] + #[public] + #[internal] fn on_cards_claimed(game: u32, player: AztecAddress, cards_hash: Field) { let game_storage = storage.games.at(game as Field); let mut game_data = game_storage.read(); diff --git a/noir-projects/noir-contracts/contracts/child_contract/src/main.nr b/noir-projects/noir-contracts/contracts/child_contract/src/main.nr index 50074872b2a..a6fb7ffbf11 100644 --- a/noir-projects/noir-contracts/contracts/child_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/child_contract/src/main.nr @@ -1,36 +1,39 @@ // A contract used along with `Parent` contract to test nested calls. +use dep::aztec::macros::aztec; + +#[aztec] contract Child { - use dep::aztec::prelude::{AztecAddress, FunctionSelector, PublicMutable, PrivateSet, PrivateContext, Deserialize, Map}; + use dep::aztec::prelude::{AztecAddress, PublicMutable, PrivateSet, Map}; use dep::aztec::{ - context::gas::GasOpts, protocol_types::{abis::call_context::CallContext}, - note::{note_getter_options::NoteGetterOptions, note_header::NoteHeader}, + note::{note_getter_options::NoteGetterOptions}, encrypted_logs::encrypted_note_emission::encode_and_encrypt_note_with_keys, - keys::getters::get_current_public_keys, utils::comparison::Comparator + keys::getters::get_public_keys, utils::comparison::Comparator, + macros::{storage::storage, functions::{private, public, internal}} }; use dep::value_note::value_note::ValueNote; - #[aztec(storage)] - struct Storage { - current_value: PublicMutable, - a_map_with_private_values: Map>, + #[storage] + struct Storage { + current_value: PublicMutable, + a_map_with_private_values: Map, Context>, } // Returns a sum of the input and the chain id and version of the contract in private circuit public input's return_values. - #[aztec(private)] + #[private] fn value(input: Field) -> Field { input + context.chain_id() + context.version() } // Returns a sum of the input and the chain id and version of the contract in private circuit public input's return_values. // Can only be called from this contract. - #[aztec(private)] - #[aztec(internal)] + #[private] + #[internal] fn value_internal(input: Field) -> Field { input + context.chain_id() + context.version() } // Returns base_value + chain_id + version + block_number + timestamp - #[aztec(public)] + #[public] fn pub_get_value(base_value: Field) -> Field { let return_value = base_value + context.chain_id() @@ -42,7 +45,7 @@ contract Child { } // Sets `current_value` to `new_value` - #[aztec(public)] + #[public] fn pub_set_value(new_value: Field) -> Field { storage.current_value.write(new_value); context.emit_unencrypted_log(new_value); @@ -50,16 +53,16 @@ contract Child { new_value } - #[aztec(private)] + #[private] fn private_set_value(new_value: Field, owner: AztecAddress) -> Field { - let owner_keys = get_current_public_keys(&mut context, owner); + let owner_keys = get_public_keys(owner); let mut note = ValueNote::new(new_value, owner_keys.npk_m.hash()); storage.a_map_with_private_values.at(owner).insert(&mut note).emit(encode_and_encrypt_note_with_keys(&mut context, owner_keys.ovpk_m, owner_keys.ivpk_m, owner)); new_value } - #[aztec(private)] + #[private] fn private_get_value(amount: Field, owner: AztecAddress) -> Field { let mut options = NoteGetterOptions::new(); options = options.select(ValueNote::properties().value, Comparator.EQ, amount).set_limit(1); @@ -68,7 +71,7 @@ contract Child { } // Increments `current_value` by `new_value` - #[aztec(public)] + #[public] fn pub_inc_value(new_value: Field) -> Field { let old_value = storage.current_value.read(); storage.current_value.write(old_value + new_value); @@ -78,8 +81,8 @@ contract Child { } // Increments `current_value` by `new_value`. Can only be called from this contract. - #[aztec(public)] - #[aztec(internal)] + #[public] + #[internal] fn pub_inc_value_internal(new_value: Field) -> Field { let old_value = storage.current_value.read(); storage.current_value.write(old_value + new_value); @@ -88,21 +91,21 @@ contract Child { new_value } - #[aztec(public)] + #[public] fn set_value_twice_with_nested_first() { let _result = Child::at(context.this_address()).pub_set_value(10).call(&mut context); storage.current_value.write(20); context.emit_unencrypted_log(20); } - #[aztec(public)] + #[public] fn set_value_twice_with_nested_last() { storage.current_value.write(20); context.emit_unencrypted_log(20); let _result = Child::at(context.this_address()).pub_set_value(10).call(&mut context); } - #[aztec(public)] + #[public] fn set_value_with_two_nested_calls() { Child::at(context.this_address()).set_value_twice_with_nested_first().call(&mut context); Child::at(context.this_address()).set_value_twice_with_nested_last().call(&mut context); diff --git a/noir-projects/noir-contracts/contracts/claim_contract/src/main.nr b/noir-projects/noir-contracts/contracts/claim_contract/src/main.nr index e39e00df441..93d42b7e9ee 100644 --- a/noir-projects/noir-contracts/contracts/claim_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/claim_contract/src/main.nr @@ -1,28 +1,31 @@ +use dep::aztec::macros::aztec; + +#[aztec] contract Claim { use dep::aztec::{ - note::utils::compute_note_hash_for_nullify, - protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress}, - state_vars::SharedImmutable + note::utils::compute_note_hash_for_nullify, protocol_types::address::AztecAddress, + state_vars::SharedImmutable, + macros::{storage::storage, functions::{private, public, initializer}} }; use dep::value_note::value_note::ValueNote; - use dep::token::Token; + use token::Token; - #[aztec(storage)] - struct Storage { + #[storage] + struct Storage { // Address of a contract based on whose notes we distribute the rewards - target_contract: SharedImmutable, + target_contract: SharedImmutable, // Token to be distributed as a reward when claiming - reward_token: SharedImmutable, + reward_token: SharedImmutable, } - #[aztec(public)] - #[aztec(initializer)] + #[public] + #[initializer] fn constructor(target_contract: AztecAddress, reward_token: AztecAddress) { storage.target_contract.initialize(target_contract); storage.reward_token.initialize(reward_token); } - #[aztec(private)] + #[private] fn claim(proof_note: ValueNote, recipient: AztecAddress) { // 1) Check that the note corresponds to the target contract and belongs to the sender let target_address = storage.target_contract.read_private(); diff --git a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/capsule.nr b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/capsule.nr index 99c90896b4a..32d739f3946 100644 --- a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/capsule.nr +++ b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/capsule.nr @@ -2,10 +2,10 @@ // docs:start:pop_capsule #[oracle(popCapsule)] -unconstrained fn pop_capsule_oracle() -> [Field; N] {} +unconstrained fn pop_capsule_oracle() -> [Field; N] {} // A capsule is a "blob" of data that is passed to the contract through an oracle. -unconstrained pub fn pop_capsule() -> [Field; N] { +unconstrained pub fn pop_capsule() -> [Field; N] { pop_capsule_oracle() } // docs:end:pop_capsule \ No newline at end of file diff --git a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/class_registered.nr b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/class_registered.nr index 3cbea7c57ca..3a67ffbf2e0 100644 --- a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/class_registered.nr +++ b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/class_registered.nr @@ -4,8 +4,8 @@ use dep::aztec::protocol_types::{ traits::Serialize }; -// #[aztec(event)] -struct ContractClassRegistered { +// #[event] +pub struct ContractClassRegistered { contract_class_id: ContractClassId, version: Field, artifact_hash: Field, diff --git a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/private_function_broadcasted.nr b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/private_function_broadcasted.nr index 3e23539c72f..b9889efc89d 100644 --- a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/private_function_broadcasted.nr +++ b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/private_function_broadcasted.nr @@ -1,5 +1,4 @@ use dep::aztec::prelude::FunctionSelector; -use dep::aztec::protocol_types; use dep::aztec::protocol_types::{ contract_class_id::ContractClassId, constants::{ @@ -11,10 +10,10 @@ use dep::aztec::protocol_types::{ traits::Serialize }; -struct InnerPrivateFunction { +pub struct InnerPrivateFunction { selector: FunctionSelector, - metadata_hash: Field, - vk_hash: Field, + metadata_hash: Field, + vk_hash: Field, } impl Serialize<3> for InnerPrivateFunction { @@ -23,10 +22,10 @@ impl Serialize<3> for InnerPrivateFunction { } } -struct PrivateFunction { +pub struct PrivateFunction { selector: FunctionSelector, - metadata_hash: Field, - vk_hash: Field, + metadata_hash: Field, + vk_hash: Field, bytecode: [Field; MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS], } @@ -43,8 +42,8 @@ impl Serialize for } } -// #[aztec(event)] -struct ClassPrivateFunctionBroadcasted { +// #[event] +pub struct ClassPrivateFunctionBroadcasted { contract_class_id: ContractClassId, artifact_metadata_hash: Field, unconstrained_functions_artifact_tree_root: Field, diff --git a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/unconstrained_function_broadcasted.nr b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/unconstrained_function_broadcasted.nr index 382f94aac9f..a6a0d5095ed 100644 --- a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/unconstrained_function_broadcasted.nr +++ b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/unconstrained_function_broadcasted.nr @@ -1,5 +1,4 @@ use dep::aztec::prelude::FunctionSelector; -use dep::aztec::protocol_types; use dep::aztec::protocol_types::{ contract_class_id::ContractClassId, constants::{ @@ -10,9 +9,9 @@ use dep::aztec::protocol_types::{ traits::Serialize }; -struct InnerUnconstrainedFunction { +pub struct InnerUnconstrainedFunction { selector: FunctionSelector, - metadata_hash: Field, + metadata_hash: Field, } impl Serialize<2> for InnerUnconstrainedFunction { @@ -21,9 +20,9 @@ impl Serialize<2> for InnerUnconstrainedFunction { } } -struct UnconstrainedFunction { +pub struct UnconstrainedFunction { selector: FunctionSelector, - metadata_hash: Field, + metadata_hash: Field, bytecode: [Field; MAX_PACKED_BYTECODE_SIZE_PER_UNCONSTRAINED_FUNCTION_IN_FIELDS], } @@ -39,8 +38,8 @@ impl Serialize we provide a membership proof // Ordinary logs are not protected by the above so this fn shouldn't be called by anything else #[contract_library_method] - pub fn emit_contract_class_unencrypted_log(context: &mut PrivateContext, log: [Field; N]) { + pub fn emit_contract_class_unencrypted_log(context: &mut PrivateContext, log: [Field; N]) { let contract_address = context.this_address(); let counter = context.next_counter(); let log_hash = emit_contract_class_unencrypted_log_private_internal(contract_address, log, counter); // 40 = addr (32) + raw log len (4) + processed log len (4) let len = 40 + N * 32; - let side_effect = LogHash { value: log_hash, counter, length: len }; + let side_effect = LogHash { value: log_hash, counter, length: len as Field }; context.unencrypted_logs_hashes.push(side_effect); } } diff --git a/noir-projects/noir-contracts/contracts/contract_instance_deployer_contract/src/main.nr b/noir-projects/noir-contracts/contracts/contract_instance_deployer_contract/src/main.nr index 6f340a009b9..b14d4188713 100644 --- a/noir-projects/noir-contracts/contracts/contract_instance_deployer_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/contract_instance_deployer_contract/src/main.nr @@ -1,11 +1,20 @@ +use dep::aztec::macros::aztec; + +#[aztec] contract ContractInstanceDeployer { use dep::aztec::protocol_types::{ address::{AztecAddress, PublicKeysHash, PartialAddress}, contract_class_id::ContractClassId, - constants::DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE, abis::log_hash::LogHash + constants::DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE, abis::log_hash::LogHash, + traits::Serialize + }; + use dep::aztec::{ + hash::compute_unencrypted_log_hash, oracle::logs::emit_unencrypted_log_private_internal, + macros::{events::event, functions::private} }; - use dep::aztec::{hash::compute_unencrypted_log_hash, oracle::logs::emit_unencrypted_log_private_internal}; + use std::meta::derive; - #[aztec(event)] + #[event] + #[derive(Serialize)] struct ContractInstanceDeployed { DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE: Field, address: AztecAddress, @@ -17,7 +26,7 @@ contract ContractInstanceDeployer { deployer: AztecAddress, } - #[aztec(private)] + #[private] fn deploy( salt: Field, contract_class_id: ContractClassId, diff --git a/noir-projects/noir-contracts/contracts/counter_contract/src/main.nr b/noir-projects/noir-contracts/contracts/counter_contract/src/main.nr index 62a3afd057d..dbf98f6719b 100644 --- a/noir-projects/noir-contracts/contracts/counter_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/counter_contract/src/main.nr @@ -1,20 +1,24 @@ +use dep::aztec::macros::aztec; + +#[aztec] contract Counter { // docs:start:imports - use dep::aztec::prelude::{AztecAddress, Map}; - use dep::value_note::{balance_utils, value_note::ValueNote}; - use dep::easy_private_state::EasyPrivateUint; + use aztec::prelude::{AztecAddress, Map}; + use value_note::{balance_utils, value_note::ValueNote}; + use easy_private_state::EasyPrivateUint; + use aztec::macros::{storage::storage, functions::{initializer, private}}; // docs:end:imports // docs:start:storage_struct - #[aztec(storage)] - struct Storage { - counters: Map, + #[storage] + struct Storage { + counters: Map, Context>, } // docs:end:storage_struct // docs:start:constructor - #[aztec(private)] - #[aztec(initializer)] + #[initializer] + #[private] // We can name our initializer anything we want as long as it's marked as aztec(initializer) fn initialize(headstart: u64, owner: AztecAddress, outgoing_viewer: AztecAddress) { let counters = storage.counters; @@ -23,47 +27,45 @@ contract Counter { // docs:end:constructor // docs:start:increment - #[aztec(private)] + #[private] fn increment(owner: AztecAddress, outgoing_viewer: AztecAddress) { - dep::aztec::oracle::debug_log::debug_log_format("Incrementing counter for owner {0}", [owner.to_field()]); + unsafe { + dep::aztec::oracle::debug_log::debug_log_format("Incrementing counter for owner {0}", [owner.to_field()]); + } let counters = storage.counters; counters.at(owner).add(1, owner, outgoing_viewer); } // docs:end:increment - // docs:start:get_counter unconstrained fn get_counter(owner: AztecAddress) -> pub Field { let counters = storage.counters; balance_utils::get_balance(counters.at(owner).set) } - // docs:end:get_counter + // docs:end:get_counter // docs:start:test_imports - use dep::aztec::test::{helpers::{cheatcodes, test_environment::TestEnvironment}}; + use dep::aztec::test::helpers::test_environment::TestEnvironment; use dep::aztec::protocol_types::storage::map::derive_storage_slot_in_map; use dep::aztec::note::note_getter::{MAX_NOTES_PER_PAGE, view_notes}; use dep::aztec::note::note_viewer_options::NoteViewerOptions; // docs:end:test_imports - // docs:start:txe_test_increment #[test] - fn test_increment() { + unconstrained fn test_increment() { // Setup env, generate keys let mut env = TestEnvironment::new(); let owner = env.create_account(); let outgoing_viewer = env.create_account(); let initial_value: Field = 5; env.impersonate(owner); - // Deploy contract and initialize let initializer = Counter::interface().initialize(initial_value as u64, owner, outgoing_viewer); let counter_contract = env.deploy_self("Counter").with_private_initializer(initializer); let contract_address = counter_contract.to_address(); - // docs:start:txe_test_read_notes // Read the stored value in the note env.impersonate(contract_address); - let counter_slot = Counter::storage().counters.slot; + let counter_slot = Counter::storage_layout().counters.slot; let owner_slot = derive_storage_slot_in_map(counter_slot, owner); let mut options = NoteViewerOptions::new(); let notes: BoundedVec = view_notes(owner_slot, options); @@ -72,7 +74,6 @@ contract Counter { initial_note_value == initial_value, f"Expected {initial_value} but got {initial_note_value}" ); // docs:end:txe_test_read_notes - // Increment the counter let increment_call_interface = Counter::at(contract_address).increment(owner, outgoing_viewer); env.call_private_void(increment_call_interface); diff --git a/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/main.nr b/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/main.nr index 4e0feeceb05..bd34f60917d 100644 --- a/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/main.nr @@ -1,38 +1,44 @@ // docs:start:empty-contract +use dep::aztec::macros::aztec; + +#[aztec] contract Crowdfunding { // docs:end:empty-contract // docs:start:all-deps use dep::aztec::{ encrypted_logs::encrypted_note_emission::encode_and_encrypt_note_with_keys, - keys::getters::get_current_public_keys, prelude::{AztecAddress, PrivateSet, SharedImmutable}, - utils::comparison::Comparator + keys::getters::get_public_keys, prelude::{AztecAddress, PrivateSet, SharedImmutable}, + utils::comparison::Comparator, unencrypted_logs::unencrypted_event_emission::encode_event, + macros::{storage::storage, events::event, functions::{public, initializer, private, internal}}, + protocol_types::traits::Serialize }; - use dep::aztec::unencrypted_logs::unencrypted_event_emission::encode_event; + use std::meta::derive; // docs:start:import_valuenote use dep::value_note::value_note::ValueNote; // docs:end:import_valuenote - use dep::token::Token; + use token::Token; use router::utils::privately_check_timestamp; // docs:end:all-deps - #[aztec(event)] + #[event] + #[derive(Serialize)] struct WithdrawalProcessed { - who: Field, - amount: Field, + who: AztecAddress, + amount: u64, } // docs:start:storage - #[aztec(storage)] - struct Storage { + #[storage] + struct Storage { // Token used for donations (e.g. DAI) - donation_token: SharedImmutable, + donation_token: SharedImmutable, // Crowdfunding campaign operator - operator: SharedImmutable, + operator: SharedImmutable, // End of the crowdfunding campaign after which no more donations are accepted - deadline: SharedImmutable, + deadline: SharedImmutable, // Notes emitted to donors when they donate (can be used as proof to obtain rewards, eg in Claim contracts) - donation_receipts: PrivateSet, + donation_receipts: PrivateSet, } // docs:end:storage @@ -40,8 +46,8 @@ contract Crowdfunding { // docs:start:init // docs:start:init-header // docs:start:init-header-error - #[aztec(public)] - #[aztec(initializer)] + #[public] + #[initializer] // this-will-error:init-header-error fn init(donation_token: AztecAddress, operator: AztecAddress, deadline: u64) { // docs:end:init-header @@ -53,7 +59,7 @@ contract Crowdfunding { // docs:end:init // docs:start:donate - #[aztec(private)] + #[private] fn donate(amount: u64) { // 1) Check that the deadline has not passed --> we do that via the router contract to conceal which contract // is performing the check. @@ -70,7 +76,7 @@ contract Crowdfunding { // 3) Create a value note for the donor so that he can later on claim a rewards token in the Claim // contract by proving that the hash of this note exists in the note hash tree. - let donor_keys = get_current_public_keys(&mut context, donor); + let donor_keys = get_public_keys(donor); // docs:start:valuenote_new let mut note = ValueNote::new(amount as Field, donor_keys.npk_m.hash()); // docs:end:valuenote_new @@ -80,7 +86,7 @@ contract Crowdfunding { // docs:start:operator-withdrawals // Withdraws balance to the operator. Requires that msg_sender() is the operator. - #[aztec(private)] + #[private] fn withdraw(amount: u64) { // 1) Check that msg_sender() is the operator let operator_address = storage.operator.read_private(); @@ -93,9 +99,9 @@ contract Crowdfunding { } // docs:end:operator-withdrawals - #[aztec(public)] - #[aztec(internal)] + #[public] + #[internal] fn _publish_donation_receipts(amount: u64, to: AztecAddress) { - WithdrawalProcessed { amount: amount as Field, who: to.to_field() }.emit(encode_event(&mut context)); + WithdrawalProcessed { amount, who: to }.emit(encode_event(&mut context)); } } diff --git a/noir-projects/noir-contracts/contracts/delegated_on_contract/src/main.nr b/noir-projects/noir-contracts/contracts/delegated_on_contract/src/main.nr index c1ae841fa6c..2548052f7ec 100644 --- a/noir-projects/noir-contracts/contracts/delegated_on_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/delegated_on_contract/src/main.nr @@ -1,37 +1,38 @@ // A contract used along with `Parent` contract to test nested calls. +use dep::aztec::macros::aztec; + +#[aztec] contract DelegatedOn { - use dep::aztec::prelude::{ - AztecAddress, FunctionSelector, NoteHeader, NoteGetterOptions, NoteViewerOptions, PublicMutable, - PrivateSet, PrivateContext, Map - }; + use dep::aztec::prelude::{AztecAddress, NoteGetterOptions, PublicMutable, PrivateSet, Map}; use dep::aztec::{ encrypted_logs::encrypted_note_emission::encode_and_encrypt_note, - keys::getters::get_current_public_keys, utils::comparison::Comparator + keys::getters::get_public_keys, utils::comparison::Comparator, + macros::{storage::storage, functions::{private, public}} }; use dep::value_note::value_note::ValueNote; - #[aztec(storage)] - struct Storage { - current_value: PublicMutable, - a_map_with_private_values: Map>, + #[storage] + struct Storage { + current_value: PublicMutable, + a_map_with_private_values: Map, Context>, } - #[aztec(private)] + #[private] fn private_set_value(new_value: Field, owner: AztecAddress) -> Field { - let owner_npk_m_hash = get_current_public_keys(&mut context, owner).npk_m.hash(); + let owner_npk_m_hash = get_public_keys(owner).npk_m.hash(); let mut note = ValueNote::new(new_value, owner_npk_m_hash); storage.a_map_with_private_values.at(owner).insert(&mut note).emit(encode_and_encrypt_note(&mut context, context.msg_sender(), owner)); new_value } - #[aztec(public)] + #[public] fn public_set_value(new_value: Field) -> Field { storage.current_value.write(new_value); new_value } - #[aztec(private)] + #[private] fn get_private_value(amount: Field, owner: AztecAddress) -> pub Field { let mut options = NoteGetterOptions::new(); options = options.select(ValueNote::properties().value, Comparator.EQ, amount).set_limit(1); @@ -39,7 +40,7 @@ contract DelegatedOn { notes.get(0).value } - unconstrained fn view_public_value() -> pub Field { + unconstrained fn view_public_value() -> Field { storage.current_value.read() } } diff --git a/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr b/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr index 402230a2fb8..80e095d0e43 100644 --- a/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr @@ -1,17 +1,19 @@ // A contract used along with `Parent` contract to test nested calls. +use dep::aztec::macros::aztec; + +#[aztec] contract Delegator { - use dep::aztec::prelude::{AztecAddress, NoteGetterOptions, PublicMutable, PrivateSet, Map}; + use dep::aztec::prelude::{AztecAddress, PublicMutable, PrivateSet, Map, NoteGetterOptions}; use dep::value_note::value_note::ValueNote; use dep::delegated_on::DelegatedOn; - use dep::aztec::utils::comparison::Comparator; + use dep::aztec::{utils::comparison::Comparator, macros::{storage::storage, functions::{private, public}}}; - #[aztec(storage)] - struct Storage { - current_value: PublicMutable, - a_map_with_private_values: Map>, + #[storage] + struct Storage { + current_value: PublicMutable, + a_map_with_private_values: Map, Context>, } - - #[aztec(private)] + #[private] fn private_delegate_set_value( target_contract: AztecAddress, value: Field, @@ -20,26 +22,22 @@ contract Delegator { // Call the target private function DelegatedOn::at(target_contract).private_set_value(value, owner).delegate_call(&mut context) } - - #[aztec(private)] + #[private] fn enqueued_delegate_set_value(target_contract: AztecAddress, value: Field) { DelegatedOn::at(target_contract).public_set_value(value).delegate_enqueue(&mut context) } - - #[aztec(public)] + #[public] fn public_delegate_set_value(target_contract: AztecAddress, value: Field) -> Field { DelegatedOn::at(target_contract).public_set_value(value).delegate_call(&mut context) } - - #[aztec(private)] - fn get_private_value(amount: Field, owner: AztecAddress) -> pub Field { + #[private] + fn get_private_value(amount: Field, owner: AztecAddress) -> Field { let mut options = NoteGetterOptions::new(); options = options.select(ValueNote::properties().value, Comparator.EQ, amount).set_limit(1); let notes = storage.a_map_with_private_values.at(owner).get_notes(options); notes.get_unchecked(0).value } - - unconstrained fn view_public_value() -> pub Field { + unconstrained fn view_public_value() -> Field { storage.current_value.read() } } diff --git a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr index 7a84beae36f..b5a6465d2c3 100644 --- a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr @@ -11,42 +11,49 @@ mod types; // also has `options.nr` which shows various ways of using `NoteGetterOptions` to query notes // it also shows what our macros do behind the scenes! +use dep::aztec::macros::aztec; + +#[aztec] contract DocsExample { // how to import dependencies defined in your workspace use dep::aztec::prelude::{ AztecAddress, NoteViewerOptions, PrivateContext, Map, PublicMutable, PublicImmutable, PrivateMutable, PrivateImmutable, PrivateSet, SharedImmutable }; - use dep::aztec::encrypted_logs::encrypted_note_emission::{encode_and_encrypt_note, encode_and_encrypt_note_with_keys}; - use dep::aztec::keys::getters::get_current_public_keys; + use dep::aztec::{ + encrypted_logs::encrypted_note_emission::{encode_and_encrypt_note, encode_and_encrypt_note_with_keys}, + keys::getters::get_public_keys, + macros::{storage::storage, functions::{public, private, internal, view}} + }; + // how to import methods from other files/folders within your workspace use crate::types::{card_note::CardNote, leader::Leader}; - #[aztec(storage)] - struct Storage { + #[storage_no_init] + struct Storage { // Shows how to create a custom struct in PublicMutable // docs:start:storage-leader-declaration - leader: PublicMutable, + leader: PublicMutable, // docs:end:storage-leader-declaration // docs:start:storage-private-mutable-declaration - legendary_card: PrivateMutable, + legendary_card: PrivateMutable, // docs:end:storage-private-mutable-declaration // just used for docs example to show how to create a private mutable map. - profiles: Map>, + profiles: Map, Context>, // docs:start:storage-set-declaration - set: PrivateSet, + set: PrivateSet, // docs:end:storage-set-declaration // docs:start:storage-private-immutable-declaration - private_immutable: PrivateImmutable, + private_immutable: PrivateImmutable, // docs:end:storage-private-immutable-declaration // docs:start:storage-shared-immutable-declaration - shared_immutable: SharedImmutable, + shared_immutable: SharedImmutable, // docs:end:storage-shared-immutable-declaration // docs:start:storage-minters-declaration - minters: Map>, + minters: Map, Context>, // docs:end:storage-minters-declaration // docs:start:storage-public-immutable-declaration - public_immutable: PublicImmutable, + public_immutable: PublicImmutable, // docs:end:storage-public-immutable-declaration } @@ -91,13 +98,13 @@ contract DocsExample { } } - #[aztec(public)] + #[public] fn initialize_shared_immutable(points: u8) { let mut new_leader = Leader { account: context.msg_sender(), points }; storage.shared_immutable.initialize(new_leader); } - #[aztec(private)] + #[private] fn match_shared_immutable(account: AztecAddress, points: u8) { let expected = Leader { account, points }; let read = storage.shared_immutable.read_private(); @@ -106,8 +113,8 @@ contract DocsExample { assert(read.points == expected.points, "Invalid points"); } - #[aztec(private)] - fn get_shared_immutable_constrained_private_indirect() -> pub Leader { + #[private] + fn get_shared_immutable_constrained_private_indirect() -> Leader { // This is a private function that calls another private function // and returns the response. // Used to test that we can retrieve values through calls and @@ -117,8 +124,8 @@ contract DocsExample { leader } - #[aztec(public)] - fn get_shared_immutable_constrained_public_indirect() -> pub Leader { + #[public] + fn get_shared_immutable_constrained_public_indirect() -> Leader { // This is a public function that calls another public function // and returns the response. // Used to test that we can retrieve values through calls and @@ -128,29 +135,29 @@ contract DocsExample { leader } - #[aztec(public)] - #[aztec(view)] - fn get_shared_immutable_constrained_public() -> pub Leader { + #[public] + #[view] + fn get_shared_immutable_constrained_public() -> Leader { storage.shared_immutable.read_public() } - #[aztec(public)] - fn get_shared_immutable_constrained_public_multiple() -> pub [Leader; 5] { + #[public] + fn get_shared_immutable_constrained_public_multiple() -> [Leader; 5] { let a = storage.shared_immutable.read_public(); [a, a, a, a, a] } - #[aztec(private)] - #[aztec(view)] - fn get_shared_immutable_constrained_private() -> pub Leader { + #[private] + #[view] + fn get_shared_immutable_constrained_private() -> Leader { storage.shared_immutable.read_private() } - unconstrained fn get_shared_immutable() -> pub Leader { + unconstrained fn get_shared_immutable() -> Leader { storage.shared_immutable.read_public() } - #[aztec(public)] + #[public] fn initialize_public_immutable(points: u8) { // docs:start:initialize_public_immutable let mut new_leader = Leader { account: context.msg_sender(), points }; @@ -158,35 +165,35 @@ contract DocsExample { // docs:end:initialize_public_immutable } - unconstrained fn get_public_immutable() -> pub Leader { + unconstrained fn get_public_immutable() -> Leader { // docs:start:read_public_immutable storage.public_immutable.read() // docs:end:read_public_immutable } // docs:start:initialize-private-mutable - #[aztec(private)] + #[private] fn initialize_private_immutable(randomness: Field, points: u8) { - let msg_sender_npk_m_hash = get_current_public_keys(&mut context, context.msg_sender()).npk_m.hash(); + let msg_sender_npk_m_hash = get_public_keys(context.msg_sender()).npk_m.hash(); let mut new_card = CardNote::new(points, randomness, msg_sender_npk_m_hash); storage.private_immutable.initialize(&mut new_card).emit(encode_and_encrypt_note(&mut context, context.msg_sender(), context.msg_sender())); } // docs:end:initialize-private-mutable - #[aztec(private)] + #[private] // msg_sender() is 0 at deploy time. So created another function fn initialize_private(randomness: Field, points: u8) { - let msg_sender_npk_m_hash = get_current_public_keys(&mut context, context.msg_sender()).npk_m.hash(); + let msg_sender_npk_m_hash = get_public_keys(context.msg_sender()).npk_m.hash(); let mut legendary_card = CardNote::new(points, randomness, msg_sender_npk_m_hash); // create and broadcast note storage.legendary_card.initialize(&mut legendary_card).emit(encode_and_encrypt_note(&mut context, context.msg_sender(), context.msg_sender())); } - #[aztec(private)] + #[private] fn insert_notes(amounts: [u8; 3]) { - let sender_keys = get_current_public_keys(&mut context, context.msg_sender()); + let sender_keys = get_public_keys(context.msg_sender()); let sender_npk_m_hash = sender_keys.npk_m.hash(); for i in 0..amounts.len() { @@ -201,111 +208,91 @@ contract DocsExample { ); } } - - #[aztec(private)] + #[private] fn insert_note(amount: u8, randomness: Field) { - let sender_npk_m_hash = get_current_public_keys(&mut context, context.msg_sender()).npk_m.hash(); + let sender_npk_m_hash = get_public_keys(context.msg_sender()).npk_m.hash(); let mut note = CardNote::new(amount, randomness, sender_npk_m_hash); storage.set.insert(&mut note).emit(encode_and_encrypt_note(&mut context, context.msg_sender(), context.msg_sender())); } - // docs:start:state_vars-NoteGetterOptionsComparatorExampleNoir - unconstrained fn read_note(comparator: u8, amount: Field) -> pub BoundedVec { + unconstrained fn read_note(comparator: u8, amount: Field) -> BoundedVec { let mut options = NoteViewerOptions::new(); storage.set.view_notes(options.select(CardNote::properties().points, comparator, amount)) } // docs:end:state_vars-NoteGetterOptionsComparatorExampleNoir - - #[aztec(private)] + #[private] fn update_legendary_card(randomness: Field, points: u8) { - let sender_npk_m_hash = get_current_public_keys(&mut context, context.msg_sender()).npk_m.hash(); + let sender_npk_m_hash = get_public_keys(context.msg_sender()).npk_m.hash(); let mut new_card = CardNote::new(points, randomness, sender_npk_m_hash); storage.legendary_card.replace(&mut new_card).emit(encode_and_encrypt_note(&mut context, context.msg_sender(), context.msg_sender())); DocsExample::at(context.this_address()).update_leader(context.msg_sender(), points).enqueue(&mut context); } - - #[aztec(private)] + #[private] fn increase_legendary_points() { // Ensure `points` > current value // Also serves as a e2e test that you can `get_note()` and then `replace()` - let sender_npk_m_hash = get_current_public_keys(&mut context, context.msg_sender()).npk_m.hash(); + let sender_npk_m_hash = get_public_keys(context.msg_sender()).npk_m.hash(); // docs:start:state_vars-PrivateMutableGet let card = storage.legendary_card.get_note().note; - // docs:end:state_vars-PrivateMutableGet - let points = card.points + 1; - let mut new_card = CardNote::new(points, card.randomness, sender_npk_m_hash); // docs:start:state_vars-PrivateMutableReplace storage.legendary_card.replace(&mut new_card).emit(encode_and_encrypt_note(&mut context, context.msg_sender(), context.msg_sender())); // docs:end:state_vars-PrivateMutableReplace - DocsExample::at(context.this_address()).update_leader(context.msg_sender(), points).enqueue(&mut context); } - - #[aztec(private)] - #[aztec(view)] + #[private] + #[view] fn verify_private_authwit(inner_hash: Field) -> Field { 1 } - - #[aztec(public)] + #[public] fn spend_public_authwit(inner_hash: Field) -> Field { 1 } - - #[aztec(public)] - #[aztec(internal)] + #[public] + #[internal] fn update_leader(account: AztecAddress, points: u8) { let new_leader = Leader { account, points }; storage.leader.write(new_leader); } - - unconstrained fn get_leader() -> pub Leader { + unconstrained fn get_leader() -> Leader { storage.leader.read() } - - unconstrained fn get_legendary_card() -> pub CardNote { + unconstrained fn get_legendary_card() -> CardNote { storage.legendary_card.view_note() } - // docs:start:private_mutable_is_initialized - unconstrained fn is_legendary_initialized() -> pub bool { + unconstrained fn is_legendary_initialized() -> bool { storage.legendary_card.is_initialized() } // docs:end:private_mutable_is_initialized - // docs:start:get_note-private-immutable - #[aztec(private)] + #[private] fn get_imm_card() -> CardNote { storage.private_immutable.get_note() } // docs:end:get_note-private-immutable - - unconstrained fn view_imm_card() -> pub CardNote { + unconstrained fn view_imm_card() -> CardNote { storage.private_immutable.view_note() } - - unconstrained fn is_priv_imm_initialized() -> pub bool { + unconstrained fn is_priv_imm_initialized() -> bool { storage.private_immutable.is_initialized() } - /// Macro equivalence section use dep::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs; use dep::aztec::context::inputs::PrivateContextInputs; - // docs:start:simple_macro_example - #[aztec(private)] + #[private] fn simple_macro_example(a: Field, b: Field) -> Field { a + b } // docs:end:simple_macro_example - // docs:start:simple_macro_example_expanded fn simple_macro_example_expanded( // ************************************************************ @@ -314,7 +301,6 @@ contract DocsExample { inputs: PrivateContextInputs, // docs:end:context-example-inputs // ************************************************************ - // Our original inputs! a: Field, b: Field // The actual return type of our circuit is the PrivateCircuitPublicInputs struct, this will be the @@ -329,20 +315,16 @@ contract DocsExample { args_hasher.add(a); args_hasher.add(b); // docs:end:context-example-hasher - // The context object is created with the inputs and the hash of the inputs // docs:start:context-example-context let mut context = PrivateContext::new(inputs, args_hasher.hash()); // docs:end:context-example-context - // docs:start:storage-example-context let mut storage = Storage::init(&mut context); // docs:end:storage-example-context // ************************************************************ - // Our actual program let result = a + b; - // ************************************************************ // Return values are pushed into the context // docs:start:context-example-context-return @@ -350,7 +332,6 @@ contract DocsExample { return_hasher.add(result); context.set_return_hash(return_hasher); // docs:end:context-example-context-return - // The context is returned to be consumed by the kernel circuit! // docs:start:context-example-finish context.finish() diff --git a/noir-projects/noir-contracts/contracts/docs_example_contract/src/options.nr b/noir-projects/noir-contracts/contracts/docs_example_contract/src/options.nr index b3a56d2cbdf..b0216a98b51 100644 --- a/noir-projects/noir-contracts/contracts/docs_example_contract/src/options.nr +++ b/noir-projects/noir-contracts/contracts/docs_example_contract/src/options.nr @@ -1,4 +1,4 @@ -use crate::types::card_note::{CardNote, CARD_NOTE_LEN, CARD_NOTE_BYTES_LEN}; +use crate::types::card_note::{CARD_NOTE_LEN, CardNote}; use dep::aztec::prelude::NoteGetterOptions; use dep::aztec::protocol_types::constants::MAX_NOTE_HASH_READ_REQUESTS_PER_CALL; @@ -10,7 +10,7 @@ use dep::aztec::{note::note_getter_options::SortOrder, utils::comparison::Compar pub fn create_npk_card_getter_options( account_npk_m_hash: Field, offset: u32 -) -> NoteGetterOptions { +) -> NoteGetterOptions { let mut options = NoteGetterOptions::new(); options.select( CardNote::properties().npk_m_hash, @@ -25,7 +25,7 @@ pub fn create_exact_card_getter_options( points: u8, secret: Field, account_npk_m_hash: Field -) -> NoteGetterOptions { +) -> NoteGetterOptions { let mut options = NoteGetterOptions::new(); options.select(CardNote::properties().points, Comparator.EQ, points as Field).select(CardNote::properties().randomness, Comparator.EQ, secret).select( CardNote::properties().npk_m_hash, @@ -53,13 +53,13 @@ pub fn filter_min_points( // docs:end:state_vars-OptionFilter // docs:start:state_vars-NoteGetterOptionsFilter -pub fn create_cards_with_min_points_getter_options(min_points: u8) -> NoteGetterOptions { +pub fn create_cards_with_min_points_getter_options(min_points: u8) -> NoteGetterOptions { NoteGetterOptions::with_filter(filter_min_points, min_points).sort(CardNote::properties().points, SortOrder.ASC) } // docs:end:state_vars-NoteGetterOptionsFilter // docs:start:state_vars-NoteGetterOptionsPickOne -pub fn create_largest_card_getter_options() -> NoteGetterOptions { +pub fn create_largest_card_getter_options() -> NoteGetterOptions { let mut options = NoteGetterOptions::new(); options.sort(CardNote::properties().points, SortOrder.DESC).set_limit(1) } diff --git a/noir-projects/noir-contracts/contracts/docs_example_contract/src/types/card_note.nr b/noir-projects/noir-contracts/contracts/docs_example_contract/src/types/card_note.nr index 053db37aa93..4b4dd746b8d 100644 --- a/noir-projects/noir-contracts/contracts/docs_example_contract/src/types/card_note.nr +++ b/noir-projects/noir-contracts/contracts/docs_example_contract/src/types/card_note.nr @@ -1,18 +1,15 @@ -use dep::aztec::prelude::{NoteInterface, NoteHeader, PrivateContext}; +use dep::aztec::prelude::{NullifiableNote, PrivateContext, NoteHeader}; use dep::aztec::{ note::{utils::compute_note_hash_for_nullify}, keys::getters::get_nsk_app, - protocol_types::{traits::Serialize, constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator} + protocol_types::{traits::Serialize, constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator}, + macros::notes::note }; -// Shows how to create a custom note - -global CARD_NOTE_LEN: Field = 3; -// CARD_NOTE_LEN * 32 + 32(storage_slot as bytes) + 32(note_type_id as bytes) -global CARD_NOTE_BYTES_LEN: Field = 3 * 32 + 64; - // docs:start:state_vars-CardNote -#[aztec(note)] -struct CardNote { +global CARD_NOTE_LEN: u32 = 3; // 3 plus a header. + +#[note] +pub struct CardNote { points: u8, randomness: Field, // The nullifying public key hash is used with the nsk_app to ensure that the note can be privately spent. @@ -29,7 +26,7 @@ impl CardNote { // docs:end:cardnote_impl // docs:start:note_interface -impl NoteInterface for CardNote { +impl NullifiableNote for CardNote { fn compute_nullifier(self, context: &mut PrivateContext, note_hash_for_nullify: Field) -> Field { let secret = context.request_nsk_app(self.npk_m_hash); poseidon2_hash_with_separator( @@ -41,7 +38,7 @@ impl NoteInterface for CardNote { ) } - fn compute_nullifier_without_context(self) -> Field { + unconstrained fn compute_nullifier_without_context(self) -> Field { let note_hash_for_nullify = compute_note_hash_for_nullify(self); let secret = get_nsk_app(self.npk_m_hash); poseidon2_hash_with_separator( diff --git a/noir-projects/noir-contracts/contracts/docs_example_contract/src/types/leader.nr b/noir-projects/noir-contracts/contracts/docs_example_contract/src/types/leader.nr index 85f1b08199d..1c6dbf021b4 100644 --- a/noir-projects/noir-contracts/contracts/docs_example_contract/src/types/leader.nr +++ b/noir-projects/noir-contracts/contracts/docs_example_contract/src/types/leader.nr @@ -1,12 +1,12 @@ use dep::aztec::protocol_types::{address::AztecAddress, traits::{Serialize, Deserialize}}; // Shows how to create a custom struct in Public -struct Leader { +pub struct Leader { account: AztecAddress, points: u8, } -global LEADER_SERIALIZED_LEN: Field = 2; +global LEADER_SERIALIZED_LEN: u32 = 2; impl Deserialize for Leader { fn deserialize(fields: [Field; LEADER_SERIALIZED_LEN]) -> Self { @@ -19,4 +19,3 @@ impl Serialize for Leader { [self.account.to_field(), self.points as Field] } } - diff --git a/noir-projects/noir-contracts/contracts/easy_private_token_contract/src/main.nr b/noir-projects/noir-contracts/contracts/easy_private_token_contract/src/main.nr index 72959179f75..8e118629ed8 100644 --- a/noir-projects/noir-contracts/contracts/easy_private_token_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/easy_private_token_contract/src/main.nr @@ -1,19 +1,23 @@ // docs:start:easy_private_token_contract +use dep::aztec::macros::aztec; + +#[aztec] contract EasyPrivateToken { use dep::aztec::prelude::{AztecAddress, Map}; use dep::value_note::balance_utils; use dep::easy_private_state::EasyPrivateUint; + use dep::aztec::macros::{storage::storage, functions::{initializer, private}}; - #[aztec(storage)] - struct Storage { - balances: Map, + #[storage] + struct Storage { + balances: Map, Context>, } /** * initialize the contract's initial state variables. */ - #[aztec(private)] - #[aztec(initializer)] + #[private] + #[initializer] fn constructor(initial_supply: u64, owner: AztecAddress, outgoing_viewer: AztecAddress) { let balances = storage.balances; @@ -21,7 +25,7 @@ contract EasyPrivateToken { } // Mints `amount` of tokens to `owner`. - #[aztec(private)] + #[private] fn mint(amount: u64, owner: AztecAddress, outgoing_viewer: AztecAddress) { let balances = storage.balances; @@ -29,7 +33,7 @@ contract EasyPrivateToken { } // Transfers `amount` of tokens from `sender` to a `recipient`. - #[aztec(private)] + #[private] fn transfer( amount: u64, sender: AztecAddress, diff --git a/noir-projects/noir-contracts/contracts/easy_private_voting_contract/src/main.nr b/noir-projects/noir-contracts/contracts/easy_private_voting_contract/src/main.nr index 387e6b9fdf9..55539d9e4b5 100644 --- a/noir-projects/noir-contracts/contracts/easy_private_voting_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/easy_private_voting_contract/src/main.nr @@ -1,21 +1,27 @@ +use dep::aztec::macros::aztec; + +#[aztec] contract EasyPrivateVoting { // docs:start:imports use dep::aztec::prelude::{AztecAddress, Map, PublicMutable, SharedImmutable}; - use dep::aztec::keys::getters::get_historical_public_keys; + use dep::aztec::{ + keys::getters::get_public_keys, + macros::{storage::storage, functions::{public, initializer, private, internal}} + }; // docs:end:imports // docs:start:storage_struct - #[aztec(storage)] - struct Storage { - admin: PublicMutable, // admin can end vote - tally: Map>, // we will store candidate as key and number of votes as value - vote_ended: PublicMutable, // vote_ended is boolean - active_at_block: SharedImmutable, // when people can start voting + #[storage] + struct Storage { + admin: PublicMutable, // admin can end vote + tally: Map, Context>, // we will store candidate as key and number of votes as value + vote_ended: PublicMutable, // vote_ended is boolean + active_at_block: SharedImmutable, // when people can start voting } // docs:end:storage_struct // docs:start:constructor - #[aztec(public)] - #[aztec(initializer)] // annotation to mark function as a constructor + #[public] + #[initializer] // annotation to mark function as a constructor fn constructor(admin: AztecAddress) { storage.admin.write(admin); storage.vote_ended.write(false); @@ -24,12 +30,9 @@ contract EasyPrivateVoting { // docs:end:constructor // docs:start:cast_vote - #[aztec(private)] // annotation to mark function as private and expose private context + #[private] // annotation to mark function as private and expose private context fn cast_vote(candidate: Field) { - // Below, we make sure to get our nullifier public key at a specific block. By pinning the nullifier public key at a specific block, - // rotating keys will have no effect on the nullifier being produced, and voting again after will fail because the same nullifier is computed each time the user votes. - let header_at_active_at_block = context.get_header_at(storage.active_at_block.read_private()); - let msg_sender_npk_m_hash = get_historical_public_keys(header_at_active_at_block, context.msg_sender()).npk_m.hash(); + let msg_sender_npk_m_hash = get_public_keys(context.msg_sender()).npk_m.hash(); let secret = context.request_nsk_app(msg_sender_npk_m_hash); // get secret key of caller of function let nullifier = std::hash::pedersen_hash([context.msg_sender().to_field(), secret]); // derive nullifier from sender and secret @@ -39,8 +42,8 @@ contract EasyPrivateVoting { // docs:end:cast_vote // docs:start:add_to_tally_public - #[aztec(public)] - #[aztec(internal)] + #[public] + #[internal] fn add_to_tally_public(candidate: Field) { assert(storage.vote_ended.read() == false, "Vote has ended"); // assert that vote has not ended let new_tally = storage.tally.at(candidate).read() + 1; @@ -49,7 +52,7 @@ contract EasyPrivateVoting { // docs:end:add_to_tally_public // docs:start:end_vote - #[aztec(public)] + #[public] fn end_vote() { assert(storage.admin.read().eq(context.msg_sender()), "Only admin can end votes"); // assert that caller is admin storage.vote_ended.write(true); diff --git a/noir-projects/noir-contracts/contracts/ecdsa_k_account_contract/src/main.nr b/noir-projects/noir-contracts/contracts/ecdsa_k_account_contract/src/main.nr index b80c6d00f98..5bdce740498 100644 --- a/noir-projects/noir-contracts/contracts/ecdsa_k_account_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/ecdsa_k_account_contract/src/main.nr @@ -1,10 +1,14 @@ // Account contract that uses ECDSA signatures for authentication on the same curve as Ethereum. // The signing key is stored in an immutable private note and should be different from the signing key. +use dep::aztec::macros::aztec; + +#[aztec] contract EcdsaKAccount { use dep::aztec::prelude::{PrivateContext, PrivateImmutable}; use dep::aztec::{ encrypted_logs::encrypted_note_emission::encode_and_encrypt_note_with_keys, - keys::getters::get_current_public_keys + keys::getters::get_public_keys, + macros::{storage::storage, functions::{private, initializer, view, noinitcheck}} }; use dep::authwit::{ @@ -14,17 +18,17 @@ contract EcdsaKAccount { use dep::ecdsa_public_key_note::EcdsaPublicKeyNote; - #[aztec(storage)] - struct Storage { - public_key: PrivateImmutable, + #[storage] + struct Storage { + public_key: PrivateImmutable, } // Creates a new account out of an ECDSA public key to use for signature verification - #[aztec(private)] - #[aztec(initializer)] + #[private] + #[initializer] fn constructor(signing_pub_key_x: [u8; 32], signing_pub_key_y: [u8; 32]) { let this = context.this_address(); - let this_keys = get_current_public_keys(&mut context, this); + let this_keys = get_public_keys(this); // Not emitting outgoing for msg_sender here to not have to register keys for the contract through which we // deploy this (typically MultiCallEntrypoint). I think it's ok here as I feel the outgoing here is not that // important. @@ -34,15 +38,15 @@ contract EcdsaKAccount { } // Note: If you globally change the entrypoint signature don't forget to update account_entrypoint.ts - #[aztec(private)] + #[private] fn entrypoint(app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) { let actions = AccountActions::init(&mut context, is_valid_impl); actions.entrypoint(app_payload, fee_payload, cancellable); } - #[aztec(private)] - #[aztec(noinitcheck)] - #[aztec(view)] + #[private] + #[noinitcheck] + #[view] fn verify_private_authwit(inner_hash: Field) -> Field { let actions = AccountActions::init(&mut context, is_valid_impl); actions.verify_private_authwit(inner_hash) @@ -70,3 +74,4 @@ contract EcdsaKAccount { std::ecdsa_secp256k1::verify_signature(public_key.x, public_key.y, signature, hashed_message) } } + diff --git a/noir-projects/noir-contracts/contracts/ecdsa_public_key_note/src/lib.nr b/noir-projects/noir-contracts/contracts/ecdsa_public_key_note/src/lib.nr index 511e046c7ce..1f88a0851a3 100644 --- a/noir-projects/noir-contracts/contracts/ecdsa_public_key_note/src/lib.nr +++ b/noir-projects/noir-contracts/contracts/ecdsa_public_key_note/src/lib.nr @@ -1,25 +1,27 @@ -use dep::aztec::prelude::{AztecAddress, FunctionSelector, NoteHeader, NoteInterface, NoteGetterOptions, PrivateContext}; +use dep::aztec::prelude::{NoteHeader, NoteInterface, NullifiableNote, PrivateContext}; use dep::aztec::{ note::utils::compute_note_hash_for_nullify, keys::getters::get_nsk_app, - protocol_types::{constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator} + protocol_types::{constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator}, + macros::notes::note_custom_interface, generators::Ga1 as Gx_1, generators::Ga2 as Gx_2, + generators::Ga3 as Gy_1, generators::Ga4 as Gy_2, generators::Ga5 as Gnpk_m_hash, generators::G_slot }; -global ECDSA_PUBLIC_KEY_NOTE_LEN: Field = 5; -// ECDSA_PUBLIC_KEY_NOTE_LEN * 32 + 32(storage_slot as bytes) + 32(note_type_id as bytes) -global ECDSA_PUBLIC_KEY_NOTE_BYTES_LEN: Field = 5 * 32 + 64; +use std::hash::from_field_unsafe; + +global ECDSA_PUBLIC_KEY_NOTE_LEN: u32 = 5; // Stores an ECDSA public key composed of two 32-byte elements // TODO: Do we need to include a nonce, in case we want to read/nullify/recreate with the same pubkey value? -#[aztec(note)] -struct EcdsaPublicKeyNote { +#[note_custom_interface] +pub struct EcdsaPublicKeyNote { x: [u8; 32], y: [u8; 32], // We store the npk_m_hash only to get the secret key to compute the nullifier npk_m_hash: Field, } -impl NoteInterface for EcdsaPublicKeyNote { +impl NoteInterface for EcdsaPublicKeyNote { // Cannot use the automatic serialization since x and y don't fit. Serialize the note as 5 fields where: // [0] = x[0..31] (upper bound excluded) // [1] = x[31] @@ -32,11 +34,11 @@ impl NoteInterface f let mut mul: Field = 1; for i in 1..32 { - let byte_x: Field = self.x[31 - i] as Field; - x = x + (byte_x * mul); - let byte_y: Field = self.y[31 - i] as Field; - y = y + (byte_y * mul); - mul *= 256; + let byte_x: Field = self.x[31 - i] as Field; + x = x + (byte_x * mul); + let byte_y: Field = self.y[31 - i] as Field; + y = y + (byte_y * mul); + mul *= 256; } let last_x = self.x[31] as Field; @@ -65,24 +67,84 @@ impl NoteInterface f EcdsaPublicKeyNote { x, y, npk_m_hash: serialized_note[4], header: NoteHeader::empty() } } + fn to_be_bytes(self, storage_slot: Field) -> [u8; ECDSA_PUBLIC_KEY_NOTE_LEN * 32 + 64] { + let serialized_note = self.serialize_content(); + + let mut buffer: [u8; ECDSA_PUBLIC_KEY_NOTE_LEN * 32 + 64] = [0; ECDSA_PUBLIC_KEY_NOTE_LEN * 32 + 64]; + + let storage_slot_bytes: [u8; 32] = storage_slot.to_be_bytes(); + let note_type_id_bytes: [u8; 32] = EcdsaPublicKeyNote::get_note_type_id().to_be_bytes(); + + for i in 0..32 { + buffer[i] = storage_slot_bytes[i]; + buffer[32 + i] = note_type_id_bytes[i]; + } + + for i in 0..serialized_note.len() { + let bytes: [u8; 32] = serialized_note[i].to_be_bytes(); + for j in 0..32 { + buffer[64 + i * 32 + j] = bytes[j]; + } + } + buffer + } + + fn get_note_type_id() -> Field { + comptime + { + let bytes = "EcdsaPublicKeyNote".as_bytes(); + let hash = aztec::protocol_types::hash::poseidon2_hash_bytes(bytes); + let hash_bytes = hash.to_be_bytes::<4>(); + aztec::protocol_types::utils::field::field_from_bytes(hash_bytes, true) + } + } + + fn get_header(self) -> NoteHeader { + self.header + } + + fn set_header(&mut self, header: NoteHeader) { + self.header = header; + } + + fn compute_note_hash(self) -> Field { + let serialized = self.serialize_content(); + std::embedded_curve_ops::multi_scalar_mul( + [Gx_1, Gx_2, Gy_1, Gy_2, Gnpk_m_hash, G_slot], + [ + from_field_unsafe(serialized[0]), + from_field_unsafe(serialized[1]), + from_field_unsafe(serialized[2]), + from_field_unsafe(serialized[3]), + from_field_unsafe(serialized[4]), + from_field_unsafe(self.get_header().storage_slot) + ] + ).x + } +} + +impl NullifiableNote for EcdsaPublicKeyNote { + fn compute_nullifier(self, context: &mut PrivateContext, note_hash_for_nullify: Field) -> Field { let secret = context.request_nsk_app(self.npk_m_hash); - poseidon2_hash_with_separator([ + poseidon2_hash_with_separator( + [ note_hash_for_nullify, secret ], - GENERATOR_INDEX__NOTE_NULLIFIER as Field, + GENERATOR_INDEX__NOTE_NULLIFIER as Field ) } - fn compute_nullifier_without_context(self) -> Field { + unconstrained fn compute_nullifier_without_context(self) -> Field { let note_hash_for_nullify = compute_note_hash_for_nullify(self); let secret = get_nsk_app(self.npk_m_hash); - poseidon2_hash_with_separator([ + poseidon2_hash_with_separator( + [ note_hash_for_nullify, - secret, + secret ], - GENERATOR_INDEX__NOTE_NULLIFIER as Field, + GENERATOR_INDEX__NOTE_NULLIFIER as Field ) } } diff --git a/noir-projects/noir-contracts/contracts/ecdsa_r_account_contract/src/main.nr b/noir-projects/noir-contracts/contracts/ecdsa_r_account_contract/src/main.nr index 9c9ca530495..06335e30a91 100644 --- a/noir-projects/noir-contracts/contracts/ecdsa_r_account_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/ecdsa_r_account_contract/src/main.nr @@ -1,9 +1,13 @@ // Account contract that uses ECDSA signatures for authentication on random version of the p256 curve (to use with touchID). +use dep::aztec::macros::aztec; + +#[aztec] contract EcdsaRAccount { use dep::aztec::prelude::{PrivateContext, PrivateImmutable}; use dep::aztec::{ encrypted_logs::encrypted_note_emission::encode_and_encrypt_note_with_keys, - keys::getters::get_current_public_keys + keys::getters::get_public_keys, + macros::{storage::storage, functions::{private, initializer, view, noinitcheck}} }; use dep::authwit::{ @@ -13,17 +17,17 @@ contract EcdsaRAccount { use dep::ecdsa_public_key_note::EcdsaPublicKeyNote; - #[aztec(storage)] - struct Storage { - public_key: PrivateImmutable, + #[storage] + struct Storage { + public_key: PrivateImmutable, } // Creates a new account out of an ECDSA public key to use for signature verification - #[aztec(private)] - #[aztec(initializer)] + #[private] + #[initializer] fn constructor(signing_pub_key_x: [u8; 32], signing_pub_key_y: [u8; 32]) { let this = context.this_address(); - let this_keys = get_current_public_keys(&mut context, this); + let this_keys = get_public_keys(this); // Not emitting outgoing for msg_sender here to not have to register keys for the contract through which we // deploy this (typically MultiCallEntrypoint). I think it's ok here as I feel the outgoing here is not that // important. @@ -33,15 +37,15 @@ contract EcdsaRAccount { } // Note: If you globally change the entrypoint signature don't forget to update account_entrypoint.ts - #[aztec(private)] + #[private] fn entrypoint(app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) { let actions = AccountActions::init(&mut context, is_valid_impl); actions.entrypoint(app_payload, fee_payload, cancellable); } - #[aztec(private)] - #[aztec(noinitcheck)] - #[aztec(view)] + #[private] + #[noinitcheck] + #[view] fn verify_private_authwit(inner_hash: Field) -> Field { let actions = AccountActions::init(&mut context, is_valid_impl); actions.verify_private_authwit(inner_hash) diff --git a/noir-projects/noir-contracts/contracts/escrow_contract/src/main.nr b/noir-projects/noir-contracts/contracts/escrow_contract/src/main.nr index 9d17a6833fa..f121333cf2e 100644 --- a/noir-projects/noir-contracts/contracts/escrow_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/escrow_contract/src/main.nr @@ -1,9 +1,12 @@ // Sample escrow contract that stores a balance of a private token on behalf of an owner. +use dep::aztec::macros::aztec; + +#[aztec] contract Escrow { use dep::aztec::prelude::{AztecAddress, PrivateImmutable}; use dep::aztec::{ encrypted_logs::encrypted_note_emission::encode_and_encrypt_note_with_keys, - keys::getters::get_current_public_keys + keys::getters::get_public_keys, macros::{storage::storage, functions::{private, initializer}} }; // docs:start:addressnote_import @@ -11,17 +14,17 @@ contract Escrow { // docs:end:addressnote_import use dep::token::Token; - #[aztec(storage)] - struct Storage { - owner: PrivateImmutable, + #[storage] + struct Storage { + owner: PrivateImmutable, } // Creates a new instance - #[aztec(private)] - #[aztec(initializer)] + #[private] + #[initializer] fn constructor(owner: AztecAddress) { - let owner_keys = get_current_public_keys(&mut context, owner); - let msg_sender_keys = get_current_public_keys(&mut context, context.msg_sender()); + let owner_keys = get_public_keys(owner); + let msg_sender_keys = get_public_keys(context.msg_sender()); // docs:start:addressnote_new let mut note = AddressNote::new(owner, owner_keys.npk_m.hash()); // docs:end:addressnote_new @@ -31,7 +34,7 @@ contract Escrow { } // Withdraws balance. Requires that msg.sender is the owner. - #[aztec(private)] + #[private] fn withdraw(token: AztecAddress, amount: Field, recipient: AztecAddress) { let sender = context.msg_sender(); diff --git a/noir-projects/noir-contracts/contracts/fee_juice_contract/src/main.nr b/noir-projects/noir-contracts/contracts/fee_juice_contract/src/main.nr index a5d008e160e..5718d59a554 100644 --- a/noir-projects/noir-contracts/contracts/fee_juice_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/fee_juice_contract/src/main.nr @@ -1,5 +1,8 @@ mod lib; +use dep::aztec::macros::aztec; + +#[aztec] contract FeeJuice { use dep::aztec::{ protocol_types::{ @@ -7,7 +10,8 @@ contract FeeJuice { constants::{DEPLOYER_CONTRACT_ADDRESS, REGISTERER_CONTRACT_ADDRESS, FEE_JUICE_INITIAL_MINT} }, state_vars::{SharedImmutable, PublicMutable, Map}, - oracle::get_contract_instance::get_contract_instance + oracle::get_contract_instance::get_contract_instance, + macros::{storage::storage, functions::{private, public, view, internal}} }; use dep::deployer::ContractInstanceDeployer; @@ -15,17 +19,17 @@ contract FeeJuice { use crate::lib::get_bridge_gas_msg_hash; - #[aztec(storage)] - struct Storage { + #[storage] + struct Storage { // This map is accessed directly by protocol circuits to check balances for fee payment. // Do not change this storage layout unless you also update the base rollup circuits. - balances: Map>, - portal_address: SharedImmutable, + balances: Map, Context>, + portal_address: SharedImmutable, } // Not flagged as initializer to reduce cost of checking init nullifier in all functions. // This function should be called as entrypoint to initialize the contract by minting itself funds. - #[aztec(private)] + #[private] fn deploy( artifact_hash: Field, private_functions_root: Field, @@ -70,13 +74,13 @@ contract FeeJuice { // We purposefully not set this function as an initializer so we do not bind // the contract to a specific L1 portal address, since the Fee Juice address // is a hardcoded constant in the rollup circuits. - #[aztec(public)] + #[public] fn set_portal(portal_address: EthAddress) { assert(storage.portal_address.read_public().is_zero()); storage.portal_address.initialize(portal_address); } - #[aztec(private)] + #[private] fn claim(to: AztecAddress, amount: Field, secret: Field) { let content_hash = get_bridge_gas_msg_hash(to, amount); let portal_address = storage.portal_address.read_private(); @@ -91,23 +95,23 @@ contract FeeJuice { FeeJuice::at(context.this_address())._increase_public_balance(to, amount).enqueue(&mut context); } - #[aztec(public)] - #[aztec(internal)] + #[public] + #[internal] fn _increase_public_balance(to: AztecAddress, amount: Field) { let new_balance = storage.balances.at(to).read().add(U128::from_integer(amount)); storage.balances.at(to).write(new_balance); } - #[aztec(public)] - #[aztec(view)] + #[public] + #[view] fn check_balance(fee_limit: Field) { let fee_limit = U128::from_integer(fee_limit); assert(storage.balances.at(context.msg_sender()).read() >= fee_limit, "Balance too low"); } // utility function for testing - #[aztec(public)] - #[aztec(view)] + #[public] + #[view] fn balance_of_public(owner: AztecAddress) -> pub Field { storage.balances.at(owner).read().to_field() } diff --git a/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr b/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr index 7c301aa6b33..33c966b0c45 100644 --- a/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr @@ -1,25 +1,29 @@ mod lib; +use dep::aztec::macros::aztec; + +#[aztec] contract FPC { use dep::aztec::{ protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress}, - state_vars::SharedImmutable + state_vars::SharedImmutable, + macros::{storage::storage, functions::{private, public, initializer}} }; use dep::token::Token; use crate::lib::compute_rebate; - #[aztec(storage)] - struct Storage { - other_asset: SharedImmutable, + #[storage] + struct Storage { + other_asset: SharedImmutable, } - #[aztec(public)] - #[aztec(initializer)] + #[public] + #[initializer] fn constructor(other_asset: AztecAddress) { storage.other_asset.initialize(other_asset); } - #[aztec(private)] + #[private] fn fee_entrypoint_private(amount: Field, asset: AztecAddress, secret_hash: Field, nonce: Field) { assert(asset == storage.other_asset.read_private()); Token::at(asset).unshield(context.msg_sender(), context.this_address(), amount, nonce).call(&mut context); @@ -35,7 +39,7 @@ contract FPC { ); } - #[aztec(private)] + #[private] fn fee_entrypoint_public(amount: Field, asset: AztecAddress, nonce: Field) { FPC::at(context.this_address()).prepare_fee(context.msg_sender(), amount, asset, nonce).enqueue(&mut context); context.set_as_fee_payer(); @@ -50,24 +54,24 @@ contract FPC { ); } - #[aztec(public)] - #[aztec(internal)] + #[public] + #[internal] fn prepare_fee(from: AztecAddress, amount: Field, asset: AztecAddress, nonce: Field) { // docs:start:public_call Token::at(asset).transfer_public(from, context.this_address(), amount, nonce).call(&mut context); // docs:end:public_call } - #[aztec(public)] - #[aztec(internal)] + #[public] + #[internal] fn pay_refund(refund_address: AztecAddress, amount: Field, asset: AztecAddress) { // Just do public refunds for the present let refund = compute_rebate(context, amount); Token::at(asset).transfer_public(context.this_address(), refund_address, refund, 0).call(&mut context); } - #[aztec(public)] - #[aztec(internal)] + #[public] + #[internal] fn pay_refund_with_shielded_rebate(amount: Field, asset: AztecAddress, secret_hash: Field) { let refund = compute_rebate(context, amount); Token::at(asset).shield(context.this_address(), refund, secret_hash, 0).call(&mut context); diff --git a/noir-projects/noir-contracts/contracts/import_test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/import_test_contract/src/main.nr index 6e125f3979a..6f5a19f3fda 100644 --- a/noir-projects/noir-contracts/contracts/import_test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/import_test_contract/src/main.nr @@ -1,15 +1,20 @@ // Contract that uses the autogenerated interface of the Test contract for calling its functions. // Used for testing calling into other contracts via autogenerated interfaces. +use dep::aztec::macros::aztec; + +#[aztec] contract ImportTest { use dep::aztec::prelude::AztecAddress; use dep::test::{Test, Test::DeepStruct, Test::DummyNote}; + use dep::aztec::macros::functions::{private, public}; + // Calls the test_code_gen on the Test contract at the target address // Used for testing calling a function with arguments of multiple types // See yarn-project/simulator/src/client/private_execution.ts // See yarn-project/end-to-end/src/e2e_nested_contract.test.ts - #[aztec(private)] + #[private] fn main_contract(target: AztecAddress) -> Field { Test::at(target).test_code_gen( 1, @@ -33,7 +38,7 @@ contract ImportTest { // Calls the get_this_address on the Test contract at the target address // Used for testing calling a function with no arguments // See yarn-project/end-to-end/src/e2e_nested_contract.test.ts - #[aztec(private)] + #[private] fn call_no_args(target: AztecAddress) -> AztecAddress { Test::at(target).get_this_address().call(&mut context) } @@ -41,7 +46,7 @@ contract ImportTest { // Calls the emit_nullifier_public on the Test contract at the target address // Used for testing calling a public function // See yarn-project/end-to-end/src/e2e_nested_contract.test.ts - #[aztec(private)] + #[private] fn call_public_fn(target: AztecAddress) { Test::at(target).emit_nullifier_public(1).enqueue(&mut context); } @@ -49,9 +54,8 @@ contract ImportTest { // Calls the emit_nullifier_public on the Test contract at the target address // Used for testing calling a public function from another public function // See yarn-project/end-to-end/src/e2e_nested_contract.test.ts - #[aztec(public)] + #[public] fn pub_call_public_fn(target: AztecAddress) { Test::at(target).emit_nullifier_public(1).call(&mut context); } } - diff --git a/noir-projects/noir-contracts/contracts/inclusion_proofs_contract/src/main.nr b/noir-projects/noir-contracts/contracts/inclusion_proofs_contract/src/main.nr index 0d654b91c42..b67fdd30cfd 100644 --- a/noir-projects/noir-contracts/contracts/inclusion_proofs_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/inclusion_proofs_contract/src/main.nr @@ -1,41 +1,44 @@ // A demonstration of inclusion and non-inclusion proofs. +use dep::aztec::macros::aztec; + +#[aztec] contract InclusionProofs { use dep::aztec::prelude::{AztecAddress, NoteGetterOptions, Map, PrivateSet, PublicMutable}; + use dep::aztec::{encrypted_logs::encrypted_note_emission::encode_and_encrypt_note, keys::getters::get_public_keys}; + use dep::aztec::{ - encrypted_logs::encrypted_note_emission::encode_and_encrypt_note, - keys::getters::get_current_public_keys + note::note_getter_options::NoteStatus, + macros::{storage::storage, functions::{private, public, initializer}} }; - - use dep::aztec::{note::note_getter_options::NoteStatus}; // docs:start:value_note_imports use dep::value_note::value_note::ValueNote; // docs:end:value_note_imports - #[aztec(storage)] - struct Storage { - private_values: Map>, - public_value: PublicMutable, - public_unused_value: PublicMutable, + #[storage] + struct Storage { + private_values: Map, Context>, + public_value: PublicMutable, + public_unused_value: PublicMutable, } - #[aztec(public)] - #[aztec(initializer)] + #[public] + #[initializer] fn constructor(public_value: Field) { storage.public_value.write(public_value); } // docs:start:create_note // Creates a value note owned by `owner`. - #[aztec(private)] + #[private] fn create_note(owner: AztecAddress, value: Field) { let owner_private_values = storage.private_values.at(owner); - let owner_npk_m_hash = get_current_public_keys(&mut context, owner).npk_m.hash(); + let owner_npk_m_hash = get_public_keys(owner).npk_m.hash(); let mut note = ValueNote::new(value, owner_npk_m_hash); owner_private_values.insert(&mut note).emit(encode_and_encrypt_note(&mut context, context.msg_sender(), owner)); } // docs:end:create_note - #[aztec(private)] + #[private] fn test_note_inclusion( owner: AztecAddress, use_block_number: bool, @@ -65,14 +68,14 @@ contract InclusionProofs { // docs:end:prove_note_inclusion } - #[aztec(private)] + #[private] fn test_note_inclusion_fail_case( owner: AztecAddress, use_block_number: bool, block_number: u32 // The block at which we'll prove that the note exists ) { let header = context.get_header(); - let owner_npk_m_hash = get_current_public_keys(&mut context, owner).npk_m.hash(); + let owner_npk_m_hash = get_public_keys(owner).npk_m.hash(); let mut note = ValueNote::new(1, owner_npk_m_hash); let header = if (use_block_number) { @@ -85,7 +88,7 @@ contract InclusionProofs { } // Proves that the note was not yet nullified at block `block_number`. - #[aztec(private)] + #[private] fn test_note_not_nullified( owner: AztecAddress, use_block_number: bool, @@ -114,7 +117,7 @@ contract InclusionProofs { // docs:end:prove_note_not_nullified } - #[aztec(private)] + #[private] fn test_note_validity( owner: AztecAddress, use_block_number: bool, @@ -142,7 +145,7 @@ contract InclusionProofs { } // docs:start:nullify_note - #[aztec(private)] + #[private] fn nullify_note(owner: AztecAddress) { let private_values = storage.private_values.at(owner); let mut options = NoteGetterOptions::new(); @@ -155,7 +158,7 @@ contract InclusionProofs { // Proves nullifier existed at block `block_number`. // Note: I am not getting a nullifier of the note that was created in this contract in this function because it is // currently not possible to obtain a nullified note from PXE. - #[aztec(private)] + #[private] fn test_nullifier_inclusion( nullifier: Field, use_block_number: bool, @@ -171,18 +174,18 @@ contract InclusionProofs { // docs:end:prove_nullifier_inclusion } - #[aztec(public)] + #[public] fn push_nullifier_public(nullifier: Field) { context.push_nullifier(nullifier); } // Proves nullifier existed at latest block - #[aztec(public)] + #[public] fn test_nullifier_inclusion_from_public(nullifier: Field) { assert(context.nullifier_exists(nullifier, context.this_address())); } - #[aztec(private)] + #[private] fn test_storage_historical_read_unset_slot(block_number: u32 // The block at which we'll read the public storage value ) { let header = context.get_header_at(block_number); @@ -196,7 +199,7 @@ contract InclusionProofs { // docs:end:public_storage_historical_read } - #[aztec(private)] + #[private] fn test_storage_historical_read( expected: Field, use_block_number: bool, @@ -214,7 +217,7 @@ contract InclusionProofs { } // Proves that a contract was publicly deployed and/or initialized at block `block_number`. - #[aztec(private)] + #[private] fn test_contract_inclusion( contract_address: AztecAddress, block_number: u32, @@ -236,7 +239,7 @@ contract InclusionProofs { } // Proves that a contract was NOT publicly deployed and/or initialized at block `block_number`. - #[aztec(private)] + #[private] fn test_contract_non_inclusion( contract_address: AztecAddress, block_number: u32, diff --git a/noir-projects/noir-contracts/contracts/key_registry_contract/src/main.nr b/noir-projects/noir-contracts/contracts/key_registry_contract/src/main.nr deleted file mode 100644 index d4ff344ed17..00000000000 --- a/noir-projects/noir-contracts/contracts/key_registry_contract/src/main.nr +++ /dev/null @@ -1,63 +0,0 @@ -contract KeyRegistry { - use dep::authwit::auth::assert_current_call_valid_authwit_public; - - use dep::aztec::{ - keys::{PublicKeys, stored_keys::StoredKeys, public_keys::NpkM}, - state_vars::{PublicMutable, Map}, protocol_types::address::{AztecAddress, PartialAddress} - }; - - #[aztec(storage)] - struct Storage { - current_keys: Map>, - } - - impl Storage { - // The init function is typically automatically generated by the macros - here we implement it manually in order - // to have control over which storage slot is assigned to the current_keys state variable. - fn init(context: Context) -> Self { - Storage { - // Ideally we'd do KEY_REGISTRY_STORAGE_SLOT instead of hardcoding the 1 here, but that is currently - // causing compilation errors. - // TODO(#7829): fix this - current_keys: Map::new( - context, - 1, - |context, slot| { PublicMutable::new(context, slot) } - ) - } - } - } - - unconstrained fn get_current_keys(account: AztecAddress) -> pub PublicKeys { - // If #7524 were to be implemented, this function could be called by an oracle from an unconstrained function - // in order to produce the preimage of the stored hash, and hence prove the correctness of the keys. - storage.current_keys.at(account).read().public_keys - } - - #[aztec(public)] - fn register_initial_keys(account: AztecAddress, partial_address: PartialAddress, keys: PublicKeys) { - let computed_address = AztecAddress::compute(keys.hash(), partial_address); - assert(computed_address.eq(account), "Computed address does not match supplied address"); - - storage.current_keys.at(account).write(StoredKeys::new(keys)); - } - - #[aztec(public)] - fn rotate_npk_m(account: AztecAddress, new_npk_m: NpkM, nonce: Field) { - if (!account.eq(context.msg_sender())) { - assert_current_call_valid_authwit_public(&mut context, account); - } else { - assert(nonce == 0, "invalid nonce"); - } - - let account_key_storage = storage.current_keys.at(account); - - // We read all other current keys so that we can compute the new hash - we can't update just the npk. This means - // updating all keys at once costs the same as updating just one (unless setting public storage to its current - // value is cheaper than changing it, e.g. EIP-2200). - let mut current_keys = account_key_storage.read().public_keys; - current_keys.npk_m = new_npk_m; - - account_key_storage.write(StoredKeys::new(current_keys)); - } -} diff --git a/noir-projects/noir-contracts/contracts/lending_contract/src/asset.nr b/noir-projects/noir-contracts/contracts/lending_contract/src/asset.nr index 7440df2640f..bbee9ba545e 100644 --- a/noir-projects/noir-contracts/contracts/lending_contract/src/asset.nr +++ b/noir-projects/noir-contracts/contracts/lending_contract/src/asset.nr @@ -6,14 +6,14 @@ use dep::aztec::protocol_types::traits::{Deserialize, Serialize}; // and last time it was updated. // In practice, it should also point to an oracle and have more fields related to // loan to value ratios and other things, but we did not have enough reads/writes for this. -struct Asset { +pub struct Asset { interest_accumulator: U128, last_updated_ts: u64, loan_to_value: U128, oracle: AztecAddress, } -global SERIALIZED_LEN: Field = 6; +global SERIALIZED_LEN: u32 = 6; impl Serialize for Asset { fn serialize(Asset: Asset) -> [Field; SERIALIZED_LEN] { diff --git a/noir-projects/noir-contracts/contracts/lending_contract/src/helpers.nr b/noir-projects/noir-contracts/contracts/lending_contract/src/helpers.nr index 750b6dff607..c5e537e88ed 100644 --- a/noir-projects/noir-contracts/contracts/lending_contract/src/helpers.nr +++ b/noir-projects/noir-contracts/contracts/lending_contract/src/helpers.nr @@ -31,7 +31,7 @@ pub fn covered_by_collateral( debt_covered } -struct DebtReturn { +pub struct DebtReturn { debt_value: U128, static_debt: U128, } diff --git a/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr b/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr index 93d7052e876..66d2af3a916 100644 --- a/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr @@ -10,6 +10,9 @@ mod helpers; // - Update accumulator should be for specific asset, just abusing only 1 asset atm. // - A way to repay all debt at once // - Liquidations +use dep::aztec::macros::aztec; + +#[aztec] contract Lending { use dep::aztec::prelude::{AztecAddress, Map, PublicMutable}; @@ -20,23 +23,25 @@ contract Lending { use dep::token::Token; use dep::price_feed::PriceFeed; + use dep::aztec::macros::{storage::storage, functions::{private, public, initializer, internal}}; + // Storage structure, containing all storage, and specifying what slots they use. - #[aztec(storage)] - struct Storage { - collateral_asset: PublicMutable, - stable_coin: PublicMutable, - assets: Map>, - collateral: Map>, - static_debt: Map>, // abusing keys very heavily + #[storage] + struct Storage { + collateral_asset: PublicMutable, + stable_coin: PublicMutable, + assets: Map, Context>, + collateral: Map, Context>, + static_debt: Map, Context>, // abusing keys very heavily } // Constructs the contract. - #[aztec(private)] - #[aztec(initializer)] + #[private] + #[initializer] fn constructor( ) {} - #[aztec(public)] + #[public] fn init( oracle: AztecAddress, loan_to_value: Field, @@ -63,7 +68,7 @@ contract Lending { } // Create a position. - #[aztec(public)] + #[public] fn update_accumulator() -> Asset { let asset_loc = storage.assets.at(0); let mut asset: Asset = asset_loc.read(); @@ -88,7 +93,7 @@ contract Lending { asset } - #[aztec(private)] + #[private] fn deposit_private( from: AztecAddress, amount: Field, @@ -108,7 +113,7 @@ contract Lending { // docs:end:enqueue_public } - #[aztec(public)] + #[public] fn deposit_public(amount: Field, nonce: Field, on_behalf_of: Field, collateral_asset: AztecAddress) { let _ = Token::at(collateral_asset).transfer_public(context.msg_sender(), context.this_address(), amount, nonce).call(&mut context); let _ = Lending::at(context.this_address())._deposit( @@ -118,8 +123,8 @@ contract Lending { ).call(&mut context); } - #[aztec(public)] - #[aztec(internal)] + #[public] + #[internal] fn _deposit(owner: AztecAddress, amount: Field, collateral_asset: AztecAddress) { let _asset = Lending::at(context.this_address()).update_accumulator().call(&mut context); @@ -131,19 +136,19 @@ contract Lending { coll_loc.write(collateral + amount); } - #[aztec(private)] + #[private] fn withdraw_private(secret: Field, to: AztecAddress, amount: Field) { let on_behalf_of = compute_identifier(secret, 0, context.msg_sender().to_field()); Lending::at(context.this_address())._withdraw(AztecAddress::from_field(on_behalf_of), to, amount).enqueue(&mut context); } - #[aztec(public)] + #[public] fn withdraw_public(to: AztecAddress, amount: Field) { let _ = Lending::at(context.this_address())._withdraw(context.msg_sender(), to, amount).call(&mut context); } - #[aztec(public)] - #[aztec(internal)] + #[public] + #[internal] fn _withdraw(owner: AztecAddress, recipient: AztecAddress, amount: Field) { let asset = Lending::at(context.this_address()).update_accumulator().call(&mut context); let price = PriceFeed::at(asset.oracle).get_price(0).view(&mut context).price; @@ -179,19 +184,19 @@ contract Lending { let _ = Token::at(collateral_asset).transfer_public(context.this_address(), recipient, amount, 0).call(&mut context); } - #[aztec(private)] + #[private] fn borrow_private(secret: Field, to: AztecAddress, amount: Field) { let on_behalf_of = compute_identifier(secret, 0, context.msg_sender().to_field()); let _ = Lending::at(context.this_address())._borrow(AztecAddress::from_field(on_behalf_of), to, amount).enqueue(&mut context); } - #[aztec(public)] + #[public] fn borrow_public(to: AztecAddress, amount: Field) { let _ = Lending::at(context.this_address())._borrow(context.msg_sender(), to, amount).call(&mut context); } - #[aztec(public)] - #[aztec(internal)] + #[public] + #[internal] fn _borrow(owner: AztecAddress, to: AztecAddress, amount: Field) { let asset = Lending::at(context.this_address()).update_accumulator().call(&mut context); let price = PriceFeed::at(asset.oracle).get_price(0).view(&mut context).price; @@ -223,7 +228,7 @@ contract Lending { let _ = Token::at(stable_coin).mint_public(to, amount).call(&mut context); } - #[aztec(private)] + #[private] fn repay_private( from: AztecAddress, amount: Field, @@ -239,14 +244,14 @@ contract Lending { let _ = Lending::at(context.this_address())._repay(AztecAddress::from_field(on_behalf_of), amount, stable_coin).enqueue(&mut context); } - #[aztec(public)] + #[public] fn repay_public(amount: Field, nonce: Field, owner: AztecAddress, stable_coin: AztecAddress) { let _ = Token::at(stable_coin).burn_public(context.msg_sender(), amount, nonce).call(&mut context); let _ = Lending::at(context.this_address())._repay(owner, amount, stable_coin).call(&mut context); } - #[aztec(public)] - #[aztec(internal)] + #[public] + #[internal] fn _repay(owner: AztecAddress, amount: Field, stable_coin: AztecAddress) { let asset = Lending::at(context.this_address()).update_accumulator().call(&mut context); @@ -264,14 +269,14 @@ contract Lending { storage.static_debt.at(owner).write(debt_returns.static_debt.to_integer()); } - #[aztec(public)] - #[aztec(view)] - fn get_asset(asset_id: Field) -> pub Asset { + #[public] + #[view] + fn get_asset(asset_id: Field) -> Asset { storage.assets.at(asset_id).read() } - #[aztec(public)] - #[aztec(view)] + #[public] + #[view] fn get_position(owner: AztecAddress) -> pub Position { let collateral = storage.collateral.at(owner).read(); let static_debt = storage.static_debt.at(owner).read(); @@ -283,8 +288,8 @@ contract Lending { Position { collateral, static_debt, debt } } - #[aztec(public)] - #[aztec(view)] + #[public] + #[view] fn get_assets() -> pub [AztecAddress; 2] { [storage.collateral_asset.read(), storage.stable_coin.read()] } diff --git a/noir-projects/noir-contracts/contracts/lending_contract/src/position.nr b/noir-projects/noir-contracts/contracts/lending_contract/src/position.nr index 7a2b9a0cb1e..052f935d025 100644 --- a/noir-projects/noir-contracts/contracts/lending_contract/src/position.nr +++ b/noir-projects/noir-contracts/contracts/lending_contract/src/position.nr @@ -1,12 +1,12 @@ use dep::aztec::protocol_types::traits::{Deserialize, Serialize}; -struct Position { +pub struct Position { collateral: Field, static_debt: Field, debt: Field, } -global POSITION_SERIALIZED_LEN: Field = 3; +global POSITION_SERIALIZED_LEN: u32 = 3; impl Serialize for Position { fn serialize(position: Position) -> [Field; POSITION_SERIALIZED_LEN] { diff --git a/noir-projects/noir-contracts/contracts/multi_call_entrypoint_contract/src/main.nr b/noir-projects/noir-contracts/contracts/multi_call_entrypoint_contract/src/main.nr index f14d751d344..2351f61ecc0 100644 --- a/noir-projects/noir-contracts/contracts/multi_call_entrypoint_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/multi_call_entrypoint_contract/src/main.nr @@ -1,9 +1,13 @@ // An entrypoint contract that allows everything to go through. Only used for testing // Pair this with SignerlessWallet to perform multiple actions before any account contracts are deployed (and without authentication) +use dep::aztec::macros::aztec; + +#[aztec] contract MultiCallEntrypoint { use dep::authwit::entrypoint::app::AppPayload; + use dep::aztec::macros::functions::private; - #[aztec(private)] + #[private] fn entrypoint(app_payload: AppPayload) { app_payload.execute_calls(&mut context); } diff --git a/noir-projects/noir-contracts/contracts/key_registry_contract/Nargo.toml b/noir-projects/noir-contracts/contracts/nft_contract/Nargo.toml similarity index 66% rename from noir-projects/noir-contracts/contracts/key_registry_contract/Nargo.toml rename to noir-projects/noir-contracts/contracts/nft_contract/Nargo.toml index cae3a7ead7e..8b1e9b7b438 100644 --- a/noir-projects/noir-contracts/contracts/key_registry_contract/Nargo.toml +++ b/noir-projects/noir-contracts/contracts/nft_contract/Nargo.toml @@ -1,9 +1,10 @@ [package] -name = "key_registry_contract" +name = "nft_contract" authors = [""] compiler_version = ">=0.25.0" type = "contract" [dependencies] aztec = { path = "../../../aztec-nr/aztec" } +compressed_string = { path = "../../../aztec-nr/compressed-string" } authwit = { path = "../../../aztec-nr/authwit" } diff --git a/noir-projects/noir-contracts/contracts/nft_contract/src/main.nr b/noir-projects/noir-contracts/contracts/nft_contract/src/main.nr new file mode 100644 index 00000000000..03cb0d0a8d3 --- /dev/null +++ b/noir-projects/noir-contracts/contracts/nft_contract/src/main.nr @@ -0,0 +1,300 @@ +mod types; +mod test; + +use dep::aztec::macros::aztec; + +// Minimal NFT implementation with `AuthWit` support that allows minting in public-only and transfers in both public +// and private. +#[aztec] +contract NFT { + use dep::compressed_string::FieldCompressedString; + use dep::aztec::{ + prelude::{NoteGetterOptions, NoteViewerOptions, Map, PublicMutable, SharedImmutable, PrivateSet, AztecAddress}, + encrypted_logs::{encrypted_note_emission::encode_and_encrypt_note_with_keys}, + hash::pedersen_hash, keys::getters::get_public_keys, note::constants::MAX_NOTES_PER_PAGE, + protocol_types::traits::is_empty, utils::comparison::Comparator, + protocol_types::{point::Point, traits::Serialize}, + macros::{storage::storage, events::event, functions::{private, public, view, internal, initializer}} + }; + use dep::authwit::auth::{assert_current_call_valid_authwit, assert_current_call_valid_authwit_public, compute_authwit_nullifier}; + use std::{embedded_curve_ops::EmbeddedCurvePoint, meta::derive}; + use crate::types::nft_note::NFTNote; + + global TRANSIENT_STORAGE_SLOT_PEDERSEN_INDEX = 3; + + // TODO(#8467): Rename this to Transfer - calling this NFTTransfer to avoid export conflict with the Transfer event + // in the Token contract. + #[event] + #[derive(Serialize)] + struct NFTTransfer { + from: AztecAddress, + to: AztecAddress, + token_id: Field, + } + + #[storage] + struct Storage { + // The symbol of the NFT + symbol: SharedImmutable, + // The name of the NFT + name: SharedImmutable, + // The admin of the contract + admin: PublicMutable, + // Addresses that can mint + minters: Map, Context>, + // Contains the NFTs owned by each address in private. + private_nfts: Map, Context>, + // A map from token ID to a boolean indicating if the NFT exists. + nft_exists: Map, Context>, + // A map from token ID to the public owner of the NFT. + public_owners: Map, Context>, + } + + #[public] + #[initializer] + fn constructor(admin: AztecAddress, name: str<31>, symbol: str<31>) { + assert(!admin.is_zero(), "invalid admin"); + storage.admin.write(admin); + storage.minters.at(admin).write(true); + storage.name.initialize(FieldCompressedString::from_string(name)); + storage.symbol.initialize(FieldCompressedString::from_string(symbol)); + } + + #[public] + fn set_admin(new_admin: AztecAddress) { + assert(storage.admin.read().eq(context.msg_sender()), "caller is not an admin"); + storage.admin.write(new_admin); + } + + #[public] + fn set_minter(minter: AztecAddress, approve: bool) { + assert(storage.admin.read().eq(context.msg_sender()), "caller is not an admin"); + storage.minters.at(minter).write(approve); + } + + #[public] + fn mint(to: AztecAddress, token_id: Field) { + assert(token_id != 0, "zero token ID not supported"); + assert(storage.minters.at(context.msg_sender()).read(), "caller is not a minter"); + assert(storage.nft_exists.at(token_id).read() == false, "token already exists"); + + storage.nft_exists.at(token_id).write(true); + + storage.public_owners.at(token_id).write(to); + } + + #[public] + #[view] + fn public_get_name() -> pub FieldCompressedString { + storage.name.read_public() + } + + #[private] + #[view] + fn private_get_name() -> pub FieldCompressedString { + storage.name.read_private() + } + + #[public] + #[view] + fn public_get_symbol() -> pub FieldCompressedString { + storage.symbol.read_public() + } + + #[private] + #[view] + fn private_get_symbol() -> pub FieldCompressedString { + storage.symbol.read_private() + } + + #[public] + #[view] + fn get_admin() -> Field { + storage.admin.read().to_field() + } + + #[public] + #[view] + fn is_minter(minter: AztecAddress) -> bool { + storage.minters.at(minter).read() + } + + #[public] + fn transfer_in_public(from: AztecAddress, to: AztecAddress, token_id: Field, nonce: Field) { + if (!from.eq(context.msg_sender())) { + assert_current_call_valid_authwit_public(&mut context, from); + } else { + assert(nonce == 0, "invalid nonce"); + } + + let public_owners_storage = storage.public_owners.at(token_id); + assert(public_owners_storage.read().eq(from), "invalid owner"); + + public_owners_storage.write(to); + } + + /// Prepares a transfer from public balance of `from` to a private balance of `to`. The transfer then needs to be + /// finalized by calling `finalize_transfer_to_private`. `transient_storage_slot_randomness` is passed + /// as an argument so that we can derive `transfer_preparer_storage_slot_commitment` off-chain and then pass it + /// as an argument to the followup call to `finalize_transfer_to_private`. + // TODO(#8238): Remove the `note_randomness` argument below once we have partial notes delivery (then we can just + // fetch the randomness from oracle). + #[private] + fn prepare_transfer_to_private( + from: AztecAddress, + to: AztecAddress, + note_randomness: Field, + transient_storage_slot_randomness: Field + ) { + // We create a partial NFT note hiding point with unpopulated/zero token id for 'to' + let to_npk_m_hash = get_public_keys(to).npk_m.hash(); + let to_note_slot = storage.private_nfts.at(to).storage_slot; + let hiding_point = NFTNote::hiding_point().new(to_npk_m_hash, note_randomness, to_note_slot); + + // We make the msg_sender/transfer_preparer part of the slot preimage to ensure he cannot interfere with + // non-sender's slots + let transfer_preparer_storage_slot_commitment: Field = pedersen_hash( + [context.msg_sender().to_field(), transient_storage_slot_randomness], + TRANSIENT_STORAGE_SLOT_PEDERSEN_INDEX + ); + // Then we hash the transfer preparer storage slot commitment with `from` and use that as the final slot + // --> by hashing it with a `from` we ensure that `from` cannot interfere with slots not assigned to him. + let slot: Field = pedersen_hash( + [from.to_field(), transfer_preparer_storage_slot_commitment], + TRANSIENT_STORAGE_SLOT_PEDERSEN_INDEX + ); + + NFT::at(context.this_address())._store_point_in_transient_storage(hiding_point.inner, slot).enqueue(&mut context); + } + + #[public] + #[internal] + fn _store_point_in_transient_storage(point: Point, slot: Field) { + // We don't perform check for the overwritten value to be non-zero because the slots are siloed to `to` + // and hence `to` can interfere only with his own execution. + context.storage_write(slot, point); + } + + /// Finalizes a transfer of NFT with `token_id` from public balance of `from` to a private balance of `to`. + /// The transfer must be prepared by calling `prepare_transfer_to_private` first. + /// The `transfer_preparer_storage_slot_commitment` has to be computed off-chain the same way as was done + /// in the preparation call. + #[public] + fn finalize_transfer_to_private( + token_id: Field, + transfer_preparer_storage_slot_commitment: Field + ) { + // We don't need to support authwit here because `prepare_transfer_to_private` allows us to set arbitrary + // `from` and `from` will always be the msg sender here. + let from = context.msg_sender(); + let public_owners_storage = storage.public_owners.at(token_id); + assert(public_owners_storage.read().eq(from), "invalid NFT owner"); + + // Derive the slot from the transfer preparer storage slot commitment and the `from` address (declared + // as `from` in this function) + let hiding_point_slot = pedersen_hash( + [from.to_field(), transfer_preparer_storage_slot_commitment], + TRANSIENT_STORAGE_SLOT_PEDERSEN_INDEX + ); + + // Read the hiding point from "transient" storage and check it's not empty to ensure the transfer was prepared + let mut hiding_point = NFTNote::hiding_point().from_point(context.storage_read(hiding_point_slot)); + assert(!is_empty(hiding_point), "transfer not prepared"); + + // Set the public NFT owner to zero + public_owners_storage.write(AztecAddress::zero()); + + // Finalize the hiding point with the `token_id` and insert the note + let note_hash = hiding_point.finalize(token_id); + context.push_note_hash(note_hash); + + // At last we reset public storage to zero to achieve the effect of transient storage - kernels will squash + // the writes + context.storage_write( + hiding_point_slot, + NFTNote::hiding_point().from_point(Point::empty()) + ); + } + + /** + * Cancel a private authentication witness. + * @param inner_hash The inner hash of the authwit to cancel. + */ + #[private] + fn cancel_authwit(inner_hash: Field) { + let on_behalf_of = context.msg_sender(); + let nullifier = compute_authwit_nullifier(on_behalf_of, inner_hash); + context.push_nullifier(nullifier); + } + + #[private] + fn transfer_in_private(from: AztecAddress, to: AztecAddress, token_id: Field, nonce: Field) { + if (!from.eq(context.msg_sender())) { + assert_current_call_valid_authwit(&mut context, from); + } else { + assert(nonce == 0, "invalid nonce"); + } + + let nfts = storage.private_nfts; + + let notes = nfts.at(from).pop_notes( + NoteGetterOptions::new().select(NFTNote::properties().token_id, Comparator.EQ, token_id).set_limit(1) + ); + assert(notes.len() == 1, "NFT not found when transferring"); + + let from_ovpk_m = get_public_keys(from).ovpk_m; + let to_keys = get_public_keys(to); + + let mut new_note = NFTNote::new(token_id, to_keys.npk_m.hash()); + nfts.at(to).insert(&mut new_note).emit(encode_and_encrypt_note_with_keys(&mut context, from_ovpk_m, to_keys.ivpk_m, to)); + } + + #[private] + fn transfer_to_public(from: AztecAddress, to: AztecAddress, token_id: Field, nonce: Field) { + if (!from.eq(context.msg_sender())) { + assert_current_call_valid_authwit(&mut context, from); + } else { + assert(nonce == 0, "invalid nonce"); + } + + let notes = storage.private_nfts.at(from).pop_notes( + NoteGetterOptions::new().select(NFTNote::properties().token_id, Comparator.EQ, token_id).set_limit(1) + ); + assert(notes.len() == 1, "NFT not found when transferring to public"); + + NFT::at(context.this_address())._finish_transfer_to_public(to, token_id).enqueue(&mut context); + } + + #[public] + #[internal] + fn _finish_transfer_to_public(to: AztecAddress, token_id: Field) { + storage.public_owners.at(token_id).write(to); + } + + // Returns zero address when the token does not have a public owner. Reverts if the token does not exist. + #[public] + #[view] + fn owner_of(token_id: Field) -> AztecAddress { + assert(storage.nft_exists.at(token_id).read(), "token does not exist"); + storage.public_owners.at(token_id).read() + } + + /// Returns an array of token IDs owned by `owner` in private and a flag indicating whether a page limit was + /// reached. Starts getting the notes from page with index `page_index`. Zero values in the array are placeholder + /// values for non-existing notes. + unconstrained fn get_private_nfts(owner: AztecAddress, page_index: u32) -> pub ([Field; MAX_NOTES_PER_PAGE], bool) { + let offset = page_index * MAX_NOTES_PER_PAGE; + let mut options = NoteViewerOptions::new(); + let notes = storage.private_nfts.at(owner).view_notes(options.set_offset(offset)); + + let mut owned_nft_ids = [0; MAX_NOTES_PER_PAGE]; + for i in 0..options.limit { + if i < notes.len() { + owned_nft_ids[i] = notes.get_unchecked(i).token_id; + } + } + + let page_limit_reached = notes.len() == options.limit; + (owned_nft_ids, page_limit_reached) + } +} diff --git a/noir-projects/noir-contracts/contracts/nft_contract/src/test.nr b/noir-projects/noir-contracts/contracts/nft_contract/src/test.nr new file mode 100644 index 00000000000..a08dd7f0f13 --- /dev/null +++ b/noir-projects/noir-contracts/contracts/nft_contract/src/test.nr @@ -0,0 +1,7 @@ +mod access_control; +mod minting; +mod transfer_in_private; +mod transfer_in_public; +mod transfer_to_private; +mod transfer_to_public; +mod utils; diff --git a/noir-projects/noir-contracts/contracts/nft_contract/src/test/access_control.nr b/noir-projects/noir-contracts/contracts/nft_contract/src/test/access_control.nr new file mode 100644 index 00000000000..f07c2c905c3 --- /dev/null +++ b/noir-projects/noir-contracts/contracts/nft_contract/src/test/access_control.nr @@ -0,0 +1,47 @@ +use crate::test::utils; +use crate::NFT; + +#[test] +unconstrained fn access_control() { + // Setup without account contracts. We are not using authwits here, so dummy accounts are enough + let (env, nft_contract_address, owner, recipient) = utils::setup(/* with_account_contracts */ false); + + // Set a new admin + env.call_public(NFT::at(nft_contract_address).set_admin(recipient)); + + // Check it worked + let admin = env.call_public(NFT::at(nft_contract_address).get_admin()); + assert(admin == recipient.to_field()); + + // Impersonate new admin + env.impersonate(recipient); + + // Check new admin is not a minter + let is_minter_call_interface = NFT::at(nft_contract_address).is_minter(recipient); + let is_minter = env.call_public(is_minter_call_interface); + assert(is_minter == false); + // Set admin as minter + let set_minter_call_interface = NFT::at(nft_contract_address).set_minter(recipient, true); + env.call_public(set_minter_call_interface); + + // Check it worked + let is_minter = env.call_public(is_minter_call_interface); + assert(is_minter == true); + + // Revoke minter as admin + let set_minter_call_interface = NFT::at(nft_contract_address).set_minter(recipient, false); + env.call_public(set_minter_call_interface); + + // Check it worked + let is_minter = env.call_public(is_minter_call_interface); + assert(is_minter == false); + + // Impersonate original admin + env.impersonate(owner); + + // Try to set ourselves as admin, fail miserably + env.assert_public_call_fails(NFT::at(nft_contract_address).set_admin(recipient)); + + // Try to revoke minter status to recipient, fail miserably + env.assert_public_call_fails(NFT::at(nft_contract_address).set_minter(recipient, false)); +} diff --git a/noir-projects/noir-contracts/contracts/nft_contract/src/test/minting.nr b/noir-projects/noir-contracts/contracts/nft_contract/src/test/minting.nr new file mode 100644 index 00000000000..c50d28c1a6e --- /dev/null +++ b/noir-projects/noir-contracts/contracts/nft_contract/src/test/minting.nr @@ -0,0 +1,40 @@ +use crate::test::utils; +use crate::NFT; + +#[test] +unconstrained fn mint_success() { + // Setup without account contracts. We are not using authwits here, so dummy accounts are enough + let (env, nft_contract_address, owner, _) = utils::setup(/* with_account_contracts */ false); + + let token_id = 10000; + let mint_call_interface = NFT::at(nft_contract_address).mint(owner, token_id); + env.call_public(mint_call_interface); + + utils::assert_owns_public_nft(env, nft_contract_address, owner, token_id); +} + +#[test] +unconstrained fn mint_failures() { + // Setup without account contracts. We are not using authwits here, so dummy accounts are enough + let (env, nft_contract_address, owner, recipient) = utils::setup(/* with_account_contracts */ false); + + // MINTING AS A NON-MINTER + let token_id = 10000; + env.impersonate(recipient); + let mint_call_interface = NFT::at(nft_contract_address).mint(owner, token_id); + env.assert_public_call_fails(mint_call_interface); + + assert(!utils::get_nft_exists(nft_contract_address, token_id), "NFT minted by non-minter"); + + // MINTING THE SAME NFT TWICE + env.impersonate(owner); + env.call_public(mint_call_interface); + assert(utils::get_nft_exists(nft_contract_address, token_id), "NFT not minted"); + + // Second call should fail + env.assert_public_call_fails(mint_call_interface); + + // MINTING NFT WITH TOKEN ID 0 + let mint_call_interface = NFT::at(nft_contract_address).mint(owner, 0); + env.assert_public_call_fails(mint_call_interface); +} diff --git a/noir-projects/noir-contracts/contracts/nft_contract/src/test/transfer_in_private.nr b/noir-projects/noir-contracts/contracts/nft_contract/src/test/transfer_in_private.nr new file mode 100644 index 00000000000..817a30c8306 --- /dev/null +++ b/noir-projects/noir-contracts/contracts/nft_contract/src/test/transfer_in_private.nr @@ -0,0 +1,117 @@ +use crate::test::utils; +use dep::aztec::test::helpers::cheatcodes; +use aztec::oracle::unsafe_rand::unsafe_rand; +use dep::authwit::cheatcodes as authwit_cheatcodes; +use crate::NFT; + +#[test] +unconstrained fn transfer_in_private() { + // Setup without account contracts. We are not using authwits here, so dummy accounts are enough + let (env, nft_contract_address, sender, recipient, token_id) = utils::setup_mint_and_transfer_to_private(/* with_account_contracts */ false); + + // Transfer the NFT to the recipient + env.call_private_void(NFT::at(nft_contract_address).transfer_in_private(sender, recipient, token_id, 0)); + + // Recipient should have the note in their private nfts + utils::assert_owns_private_nft(nft_contract_address, recipient, token_id); +} + +#[test] +unconstrained fn transfer_in_private_to_self() { + // Setup without account contracts. We are not using authwits here, so dummy accounts are enough + let (env, nft_contract_address, owner, _, token_id) = utils::setup_mint_and_transfer_to_private(/* with_account_contracts */ false); + + // Transfer the NFT back to the owner + env.call_private_void(NFT::at(nft_contract_address).transfer_in_private(owner, owner, token_id, 0)); + + // NFT owner should stay the same + utils::assert_owns_private_nft(nft_contract_address, owner, token_id); +} + +#[test] +unconstrained fn transfer_in_private_to_non_deployed_account() { + // Setup without account contracts. We are not using authwits here, so dummy accounts are enough + let (env, nft_contract_address, sender, _, token_id) = utils::setup_mint_and_transfer_to_private(/* with_account_contracts */ false); + let not_deployed = cheatcodes::create_account(); + + // Transfer the NFT to the recipient + env.call_private_void(NFT::at(nft_contract_address).transfer_in_private(sender, not_deployed.address, token_id, 0)); + + // Owner of the private NFT should be the not_deployed account + utils::assert_owns_private_nft(nft_contract_address, not_deployed.address, token_id); +} + +#[test] +unconstrained fn transfer_in_private_on_behalf_of_other() { + // Setup with account contracts. Slower since we actually deploy them, but needed for authwits. + let (env, nft_contract_address, sender, recipient, token_id) = utils::setup_mint_and_transfer_to_private(/* with_account_contracts */ true); + + // Transfer the NFT to the recipient + let transfer_in_private_call_interface = NFT::at(nft_contract_address).transfer_in_private(sender, recipient, token_id, 1); + authwit_cheatcodes::add_private_authwit_from_call_interface(sender, recipient, transfer_in_private_call_interface); + + // Impersonate recipient to perform the call + env.impersonate(recipient); + // Transfer the NFT to the recipient + env.call_private_void(transfer_in_private_call_interface); + + // Recipient should be the private NFT owner + utils::assert_owns_private_nft(nft_contract_address, recipient, token_id); +} + +#[test(should_fail_with="NFT not found when transferring")] +unconstrained fn transfer_in_private_failure_not_an_owner() { + // Setup without account contracts. We are not using authwits here, so dummy accounts are enough + let (env, nft_contract_address, owner, not_owner, token_id) = utils::setup_mint_and_transfer_to_private(/* with_account_contracts */ false); + // Try transferring the NFT from not_owner + env.impersonate(not_owner); + env.call_private_void(NFT::at(nft_contract_address).transfer_in_private(not_owner, owner, token_id, 0)); +} + +#[test(should_fail_with="invalid nonce")] +unconstrained fn transfer_in_private_failure_on_behalf_of_self_non_zero_nonce() { + // Setup without account contracts. We are not using authwits here, so dummy accounts are enough. + // The nonce check is in the beginning so we don't need to waste time on minting the NFT and transferring + // it to private. + let (env, nft_contract_address, sender, recipient) = utils::setup(/* with_account_contracts */ false); + + // We set random value for the token_id as the nonce check is before we use the value. + let token_id = unsafe_rand(); + + // Try transferring the NFT + env.call_private_void(NFT::at(nft_contract_address).transfer_in_private(sender, recipient, token_id, 1)); +} + +#[test(should_fail_with="Authorization not found for message hash")] +unconstrained fn transfer_in_private_failure_on_behalf_of_other_without_approval() { + // Setup with account contracts. Slower since we actually deploy them, but needed for authwits. + // The authwit check is in the beginning so we don't need to waste time on minting the NFT and transferring + // it to private. + let (env, nft_contract_address, sender, recipient) = utils::setup(/* with_account_contracts */ true); + + // We set random value for the token_id as the nonce check is before we use the value. + let token_id = unsafe_rand(); + + // Impersonate recipient to perform the call + env.impersonate(recipient); + // Try transferring the NFT + env.call_private_void(NFT::at(nft_contract_address).transfer_in_private(sender, recipient, token_id, 1)); +} + +#[test(should_fail_with="Authorization not found for message hash")] +unconstrained fn transfer_in_private_failure_on_behalf_of_other_wrong_caller() { + // Setup with account contracts. Slower since we actually deploy them, but needed for authwits. + // The authwit check is in the beginning so we don't need to waste time on minting the NFT and transferring + // it to private. + let (env, nft_contract_address, sender, recipient) = utils::setup(/* with_account_contracts */ true); + + // We set random value for the token_id as the nonce check is before we use the value. + let token_id = unsafe_rand(); + + let transfer_in_private_from_call_interface = NFT::at(nft_contract_address).transfer_in_private(sender, recipient, token_id, 1); + authwit_cheatcodes::add_private_authwit_from_call_interface(sender, sender, transfer_in_private_from_call_interface); + // Impersonate recipient to perform the call + env.impersonate(recipient); + // Try transferring the NFT + env.call_private_void(transfer_in_private_from_call_interface); +} diff --git a/noir-projects/noir-contracts/contracts/nft_contract/src/test/transfer_in_public.nr b/noir-projects/noir-contracts/contracts/nft_contract/src/test/transfer_in_public.nr new file mode 100644 index 00000000000..81136a9bbeb --- /dev/null +++ b/noir-projects/noir-contracts/contracts/nft_contract/src/test/transfer_in_public.nr @@ -0,0 +1,96 @@ +use crate::test::utils; +use dep::aztec::oracle::unsafe_rand::unsafe_rand; +use dep::authwit::cheatcodes as authwit_cheatcodes; +use crate::NFT; + +#[test] +unconstrained fn transfer_in_public() { + // Setup without account contracts. We are not using authwits here, so dummy accounts are enough + let (env, nft_contract_address, sender, recipient, token_id) = utils::setup_and_mint(/* with_account_contracts */ false); + + // Transfer the NFT + env.call_public(NFT::at(nft_contract_address).transfer_in_public(sender, recipient, token_id, 0)); + + utils::assert_owns_public_nft(env, nft_contract_address, recipient, token_id); +} + +#[test] +unconstrained fn transfer_in_public_to_self() { + // Setup without account contracts. We are not using authwits here, so dummy accounts are enough + let (env, nft_contract_address, user, _, token_id) = utils::setup_and_mint(/* with_account_contracts */ false); + + // Transfer the NFT + env.call_public(NFT::at(nft_contract_address).transfer_in_public(user, user, token_id, 0)); + + // Check the user stayed the public owner + utils::assert_owns_public_nft(env, nft_contract_address, user, token_id); +} + +#[test] +unconstrained fn transfer_in_public_on_behalf_of_other() { + // Setup with account contracts. Slower since we actually deploy them, but needed for authwits. + let (env, nft_contract_address, sender, recipient, token_id) = utils::setup_and_mint(/* with_account_contracts */ true); + + let transfer_in_public_from_call_interface = NFT::at(nft_contract_address).transfer_in_public(sender, recipient, token_id, 1); + authwit_cheatcodes::add_public_authwit_from_call_interface(sender, recipient, transfer_in_public_from_call_interface); + // Impersonate recipient to perform the call + env.impersonate(recipient); + // Transfer the NFT + env.call_public(transfer_in_public_from_call_interface); + + // Check the is recipient is the new public owner + utils::assert_owns_public_nft(env, nft_contract_address, recipient, token_id); +} + +#[test(should_fail_with="invalid nonce")] +unconstrained fn transfer_in_public_failure_on_behalf_of_self_non_zero_nonce() { + // Setup without account contracts. We are not using authwits here, so dummy accounts are enough. + // The authwit check is in the beginning so we don't need to waste time on minting the NFT and transferring + // it to private.. + let (env, nft_contract_address, sender, recipient) = utils::setup(/* with_account_contracts */ false); + + // We set random value for the token_id as the nonce check is before we use the value. + let token_id = unsafe_rand(); + + // Try to transfer the NFT + env.call_public(NFT::at(nft_contract_address).transfer_in_public(sender, recipient, token_id, unsafe_rand())); +} + +#[test(should_fail_with="invalid owner")] +unconstrained fn transfer_in_public_non_existent_nft() { + // Setup without account contracts. We are not using authwits here, so dummy accounts are enough + let (env, nft_contract_address, sender, recipient) = utils::setup(/* with_account_contracts */ false); + + // Try to transfer the NFT + let token_id = 612; + env.call_public(NFT::at(nft_contract_address).transfer_in_public(sender, recipient, token_id, 0)); +} + +// Not checking error message here with should_fail_with because noir panics when I try doing that. +#[test] +unconstrained fn transfer_in_public_failure_on_behalf_of_other_without_approval() { + // Setup with account contracts. Slower since we actually deploy them, but needed for authwits. + let (env, nft_contract_address, sender, recipient, token_id) = utils::setup_and_mint(/* with_account_contracts */ true); + + // Impersonate recipient to perform the call + env.impersonate(recipient); + // Try to transfer tokens + env.assert_public_call_fails(NFT::at(nft_contract_address).transfer_in_public(sender, recipient, token_id, 1)); + // Check the sender stayed the public owner + utils::assert_owns_public_nft(env, nft_contract_address, sender, token_id); +} + +// Not checking error message here with should_fail_with because noir panics when I try doing that. +#[test] +unconstrained fn transfer_in_public_failure_on_behalf_of_other_wrong_caller() { + // Setup with account contracts. Slower since we actually deploy them, but needed for authwits. + let (env, nft_contract_address, sender, recipient, token_id) = utils::setup_and_mint(/* with_account_contracts */ true); + let transfer_in_public_from_call_interface = NFT::at(nft_contract_address).transfer_in_public(sender, recipient, token_id, 1); + authwit_cheatcodes::add_public_authwit_from_call_interface(sender, sender, transfer_in_public_from_call_interface); + // Impersonate recipient to perform the call + env.impersonate(recipient); + // Try to transfer tokens + env.assert_public_call_fails(transfer_in_public_from_call_interface); + // Check the sender stayed the public owner + utils::assert_owns_public_nft(env, nft_contract_address, sender, token_id); +} diff --git a/noir-projects/noir-contracts/contracts/nft_contract/src/test/transfer_to_private.nr b/noir-projects/noir-contracts/contracts/nft_contract/src/test/transfer_to_private.nr new file mode 100644 index 00000000000..51350ae3adf --- /dev/null +++ b/noir-projects/noir-contracts/contracts/nft_contract/src/test/transfer_to_private.nr @@ -0,0 +1,130 @@ +use crate::test::utils; +use dep::aztec::{ + hash::pedersen_hash, keys::getters::get_public_keys, prelude::{AztecAddress, NoteHeader}, + oracle::unsafe_rand::unsafe_rand, protocol_types::storage::map::derive_storage_slot_in_map +}; +use crate::{types::nft_note::NFTNote, NFT}; + +#[test] +unconstrained fn transfer_to_private_to_self() { + // The transfer to private to self is done in `utils::setup_mint_and_transfer_to_private` and for this reason + // in this test we just call it and check the outcome. + + // Setup without account contracts. We are not using authwits here, so dummy accounts are enough + let (env, nft_contract_address, user, _, token_id) = utils::setup_mint_and_transfer_to_private(/* with_account_contracts */ false); + + // User should have the note in their private nfts + utils::assert_owns_private_nft(nft_contract_address, user, token_id); + + // Since the NFT was sent to private, the public owner should be zero address + utils::assert_owns_public_nft(env, nft_contract_address, AztecAddress::zero(), token_id); +} + +#[test] +unconstrained fn transfer_to_private_to_a_different_account() { + // Setup without account contracts. We are not using authwits here, so dummy accounts are enough + let (env, nft_contract_address, sender, recipient, token_id) = utils::setup_and_mint(/* with_account_contracts */ false); + + let note_randomness = unsafe_rand(); + let transient_storage_slot_randomness = unsafe_rand(); + // Sender will be the msg_sender/transfer_preparer in prepare_transfer_to_private + let transfer_preparer_storage_slot_commitment = pedersen_hash( + [sender.to_field(), transient_storage_slot_randomness], + NFT::TRANSIENT_STORAGE_SLOT_PEDERSEN_INDEX + ); + + // We prepare the transfer + env.call_private_void( + NFT::at(nft_contract_address).prepare_transfer_to_private( + sender, + recipient, + note_randomness, + transient_storage_slot_randomness + ) + ); + + // Finalize the transfer of the NFT + env.call_public( + NFT::at(nft_contract_address).finalize_transfer_to_private(token_id, transfer_preparer_storage_slot_commitment) + ); + + // Store the finalized note in the cache + let mut context = env.private(); + let recipient_npk_m_hash = get_public_keys(recipient).npk_m.hash(); + let private_nfts_recipient_slot = derive_storage_slot_in_map(NFT::storage_layout().private_nfts.slot, recipient); + + env.add_note( + &mut NFTNote { token_id, npk_m_hash: recipient_npk_m_hash, randomness: note_randomness, header: NoteHeader::empty() }, + private_nfts_recipient_slot, + nft_contract_address + ); + + // Recipient should have the note in their private nfts + utils::assert_owns_private_nft(nft_contract_address, recipient, token_id); + + // Since the NFT got transferred to private public owner should be zero address + utils::assert_owns_public_nft(env, nft_contract_address, AztecAddress::zero(), token_id); +} + +#[test(should_fail_with="transfer not prepared")] +unconstrained fn transfer_to_private_to_self_transfer_not_prepared() { + // Setup without account contracts. We are not using authwits here, so dummy accounts are enough + let (env, nft_contract_address, _, _, token_id) = utils::setup_and_mint(/* with_account_contracts */ false); + + // Transfer was not prepared so we can use random value for the commitment + let transfer_preparer_storage_slot_commitment = unsafe_rand(); + + // Try finalizing the transfer without preparing it + env.call_public( + NFT::at(nft_contract_address).finalize_transfer_to_private(token_id, transfer_preparer_storage_slot_commitment) + ); +} + +#[test(should_fail_with="transfer not prepared")] +unconstrained fn transfer_to_private_finalizing_from_incorrect_sender() { + // Setup without account contracts. We are not using authwits here, so dummy accounts are enough + let (env, nft_contract_address, incorrect_sender, recipient, token_id) = utils::setup_and_mint(/* with_account_contracts */ false); + + let correct_sender = AztecAddress::from_field(9); + + let note_randomness = unsafe_rand(); + let transient_storage_slot_randomness = unsafe_rand(); + // Sender will be the msg_sender/transfer_preparer in prepare_transfer_to_private + let transfer_preparer_storage_slot_commitment = pedersen_hash( + [correct_sender.to_field(), transient_storage_slot_randomness], + NFT::TRANSIENT_STORAGE_SLOT_PEDERSEN_INDEX + ); + + // We prepare the transfer + env.call_private_void( + NFT::at(nft_contract_address).prepare_transfer_to_private( + correct_sender, + recipient, + note_randomness, + transient_storage_slot_randomness + ) + ); + + // We impersonate incorrect sender and try to finalize the transfer of the NFT. The incorrect sender owns the NFT + // but tries to consume a prepared transfer not belonging to him. For this reason the test should fail with + // "transfer not prepared". + env.impersonate(incorrect_sender); + env.call_public( + NFT::at(nft_contract_address).finalize_transfer_to_private(token_id, transfer_preparer_storage_slot_commitment) + ); +} + +#[test(should_fail_with="invalid NFT owner")] +unconstrained fn transfer_to_private_failure_not_an_owner() { + // Setup without account contracts. We are not using authwits here, so dummy accounts are enough + let (env, nft_contract_address, _, not_owner, token_id) = utils::setup_and_mint(/* with_account_contracts */ false); + + // We set random value for the commitment as the NFT owner check is before we use the value + let transfer_preparer_storage_slot_commitment = unsafe_rand(); + + // Try transferring someone else's public NFT + env.impersonate(not_owner); + env.call_public( + NFT::at(nft_contract_address).finalize_transfer_to_private(token_id, transfer_preparer_storage_slot_commitment) + ); +} diff --git a/noir-projects/noir-contracts/contracts/nft_contract/src/test/transfer_to_public.nr b/noir-projects/noir-contracts/contracts/nft_contract/src/test/transfer_to_public.nr new file mode 100644 index 00000000000..ca24227e785 --- /dev/null +++ b/noir-projects/noir-contracts/contracts/nft_contract/src/test/transfer_to_public.nr @@ -0,0 +1,80 @@ +use crate::test::utils; +use dep::aztec::oracle::unsafe_rand::unsafe_rand; +use dep::authwit::cheatcodes as authwit_cheatcodes; +use crate::NFT; + +#[test] +unconstrained fn transfer_to_public() { + // Setup without account contracts. We are not using authwits here, so dummy accounts are enough + let (env, nft_contract_address, sender, recipient, token_id) = utils::setup_mint_and_transfer_to_private(/* with_account_contracts */ false); + + env.call_private_void(NFT::at(nft_contract_address).transfer_to_public(sender, recipient, token_id, 0)); + + // Recipient should be the public owner + utils::assert_owns_public_nft(env, nft_contract_address, recipient, token_id); +} + +#[test] +unconstrained fn transfer_to_public_to_self() { + // Setup without account contracts. We are not using authwits here, so dummy accounts are enough + let (env, nft_contract_address, user, _, token_id) = utils::setup_mint_and_transfer_to_private(/* with_account_contracts */ false); + + env.call_private_void(NFT::at(nft_contract_address).transfer_to_public(user, user, token_id, 0)); + + // Check the user stayed the public owner + utils::assert_owns_public_nft(env, nft_contract_address, user, token_id); +} + +#[test] +unconstrained fn transfer_to_public_on_behalf_of_other() { + let (env, nft_contract_address, sender, recipient, token_id) = utils::setup_mint_and_transfer_to_private(/* with_account_contracts */ true); + + let transfer_to_public_call_interface = NFT::at(nft_contract_address).transfer_to_public(sender, recipient, token_id, 0); + authwit_cheatcodes::add_private_authwit_from_call_interface(sender, recipient, transfer_to_public_call_interface); + // Impersonate recipient + env.impersonate(recipient); + // transfer_to_public the NFT + env.call_private_void(transfer_to_public_call_interface); + + // Recipient should be the public owner + utils::assert_owns_public_nft(env, nft_contract_address, recipient, token_id); +} + +#[test(should_fail_with="NFT not found when transferring to public")] +unconstrained fn transfer_to_public_failure_not_an_owner() { + // Setup without account contracts. We are not using authwits here, so dummy accounts are enough + let (env, nft_contract_address, _, not_owner, token_id) = utils::setup_mint_and_transfer_to_private(/* with_account_contracts */ false); + + env.impersonate(not_owner); + env.call_private_void(NFT::at(nft_contract_address).transfer_to_public(not_owner, not_owner, token_id, 0)); +} + +#[test(should_fail_with="invalid nonce")] +unconstrained fn transfer_to_public_failure_on_behalf_of_self_non_zero_nonce() { + // Setup without account contracts. We are not using authwits here, so dummy accounts are enough + let (env, nft_contract_address, user, _, token_id) = utils::setup_mint_and_transfer_to_private(/* with_account_contracts */ false); + + env.call_private_void(NFT::at(nft_contract_address).transfer_to_public(user, user, token_id, unsafe_rand())); +} + +#[test(should_fail_with="Authorization not found for message hash")] +unconstrained fn transfer_to_public_failure_on_behalf_of_other_invalid_designated_caller() { + let (env, nft_contract_address, sender, recipient, token_id) = utils::setup_mint_and_transfer_to_private(/* with_account_contracts */ true); + + let transfer_to_public_call_interface = NFT::at(nft_contract_address).transfer_to_public(sender, recipient, token_id, 0); + authwit_cheatcodes::add_private_authwit_from_call_interface(sender, sender, transfer_to_public_call_interface); + // Impersonate recipient + env.impersonate(recipient); + // transfer_to_public the NFT + env.call_private_void(transfer_to_public_call_interface); +} + +#[test(should_fail_with="Authorization not found for message hash")] +unconstrained fn transfer_to_public_failure_on_behalf_of_other_no_approval() { + let (env, nft_contract_address, sender, recipient, token_id) = utils::setup_mint_and_transfer_to_private(/* with_account_contracts */ true); + + // Impersonate recipient + env.impersonate(recipient); + // transfer_to_public the NFT + env.call_private_void(NFT::at(nft_contract_address).transfer_to_public(sender, recipient, token_id, 0)); +} diff --git a/noir-projects/noir-contracts/contracts/nft_contract/src/test/utils.nr b/noir-projects/noir-contracts/contracts/nft_contract/src/test/utils.nr new file mode 100644 index 00000000000..7b95f3efda3 --- /dev/null +++ b/noir-projects/noir-contracts/contracts/nft_contract/src/test/utils.nr @@ -0,0 +1,134 @@ +use dep::aztec::{ + hash::pedersen_hash, keys::getters::get_public_keys, prelude::{AztecAddress, NoteHeader}, + test::helpers::{cheatcodes, test_environment::TestEnvironment}, + protocol_types::storage::map::derive_storage_slot_in_map, + oracle::{execution::{get_block_number, get_contract_address}, unsafe_rand::unsafe_rand, storage::storage_read} +}; +use crate::{types::nft_note::NFTNote, NFT}; + +unconstrained pub fn setup(with_account_contracts: bool) -> (&mut TestEnvironment, AztecAddress, AztecAddress, AztecAddress) { + // Setup env, generate keys + let mut env = TestEnvironment::new(); + let (owner, recipient) = if with_account_contracts { + let owner = env.create_account_contract(1); + let recipient = env.create_account_contract(2); + // Deploy canonical auth registry + let _auth_registry = env.deploy("./@auth_registry_contract", "AuthRegistry").without_initializer(); + (owner, recipient) + } else { + let owner = env.create_account(); + let recipient = env.create_account(); + (owner, recipient) + }; + + // Start the test in the account contract address + env.impersonate(owner); + + // Deploy token contract + let initializer_call_interface = NFT::interface().constructor( + owner, + "TestNFT000000000000000000000000", + "TN00000000000000000000000000000" + ); + let nft_contract = env.deploy_self("NFT").with_public_initializer(initializer_call_interface); + let nft_contract_address = nft_contract.to_address(); + env.advance_block_by(1); + (&mut env, nft_contract_address, owner, recipient) +} + +unconstrained pub fn setup_and_mint(with_account_contracts: bool) -> (&mut TestEnvironment, AztecAddress, AztecAddress, AztecAddress, Field) { + // Setup + let (env, nft_contract_address, owner, recipient) = setup(with_account_contracts); + let minted_token_id = 615; + + let mint_public_call_interface = NFT::at(nft_contract_address).mint(owner, minted_token_id); + env.call_public(mint_public_call_interface); + + (env, nft_contract_address, owner, recipient, minted_token_id) +} + +unconstrained pub fn setup_mint_and_transfer_to_private(with_account_contracts: bool) -> (&mut TestEnvironment, AztecAddress, AztecAddress, AztecAddress, Field) { + let (env, nft_contract_address, owner, recipient, minted_token_id) = setup_and_mint(with_account_contracts); + + let note_randomness = unsafe_rand(); + let transient_storage_slot_randomness = unsafe_rand(); + let transfer_preparer_storage_slot_commitment = pedersen_hash( + [owner.to_field(), transient_storage_slot_randomness], + NFT::TRANSIENT_STORAGE_SLOT_PEDERSEN_INDEX + ); + + // We prepare the transfer with user being both the sender and the recipient (classical "shield" flow) + let prepare_transfer_to_private_call_interface = NFT::at(nft_contract_address).prepare_transfer_to_private( + owner, + owner, + note_randomness, + transient_storage_slot_randomness + ); + env.call_private_void(prepare_transfer_to_private_call_interface); + + // Finalize the transfer of the NFT + let finalize_transfer_to_private_call_interface = NFT::at(nft_contract_address).finalize_transfer_to_private(minted_token_id, transfer_preparer_storage_slot_commitment); + env.call_public(finalize_transfer_to_private_call_interface); + + // Store the finalized note in the cache + let mut context = env.private(); + let owner_npk_m_hash = get_public_keys(owner).npk_m.hash(); + let private_nfts_owner_slot = derive_storage_slot_in_map(NFT::storage_layout().private_nfts.slot, owner); + + env.add_note( + &mut NFTNote { + token_id: minted_token_id, + npk_m_hash: owner_npk_m_hash, + randomness: note_randomness, + header: NoteHeader::empty() + }, + private_nfts_owner_slot, + nft_contract_address + ); + + (env, nft_contract_address, owner, recipient, minted_token_id) +} + +unconstrained pub fn get_nft_exists(nft_contract_address: AztecAddress, token_id: Field) -> bool { + let current_contract_address = get_contract_address(); + cheatcodes::set_contract_address(nft_contract_address); + let block_number = get_block_number(); + + let nft_exists_slot = NFT::storage_layout().nft_exists.slot; + let nft_slot = derive_storage_slot_in_map(nft_exists_slot, token_id); + let exists: bool = storage_read(nft_contract_address, nft_slot, block_number); + cheatcodes::set_contract_address(current_contract_address); + + exists +} + +unconstrained pub fn assert_owns_public_nft( + env: &mut TestEnvironment, + nft_contract_address: AztecAddress, + owner: AztecAddress, + token_id: Field +) { + let owner_of_interface = NFT::at(nft_contract_address).owner_of(token_id); + let obtained_owner = env.call_public(owner_of_interface); + + assert(owner == obtained_owner, "Incorrect NFT owner"); +} + +unconstrained pub fn assert_owns_private_nft(nft_contract_address: AztecAddress, owner: AztecAddress, token_id: Field) { + let current_contract_address = get_contract_address(); + cheatcodes::set_contract_address(nft_contract_address); + + // Direct call to unconstrained + let (private_nfts, _) = NFT::get_private_nfts(owner, 0); + + let mut nft_found = false; + for obtained_token_id in private_nfts { + if obtained_token_id == token_id { + nft_found = true; + } + } + + cheatcodes::set_contract_address(current_contract_address); + + assert(nft_found, "NFT not found in private nfts"); +} diff --git a/noir-projects/noir-contracts/contracts/nft_contract/src/types.nr b/noir-projects/noir-contracts/contracts/nft_contract/src/types.nr new file mode 100644 index 00000000000..26ed97fbe8a --- /dev/null +++ b/noir-projects/noir-contracts/contracts/nft_contract/src/types.nr @@ -0,0 +1 @@ +mod nft_note; diff --git a/noir-projects/noir-contracts/contracts/nft_contract/src/types/nft_note.nr b/noir-projects/noir-contracts/contracts/nft_contract/src/types/nft_note.nr new file mode 100644 index 00000000000..ea331467bcc --- /dev/null +++ b/noir-projects/noir-contracts/contracts/nft_contract/src/types/nft_note.nr @@ -0,0 +1,58 @@ +use dep::aztec::{ + note::utils::compute_note_hash_for_nullify, keys::getters::get_nsk_app, + oracle::unsafe_rand::unsafe_rand, prelude::{NullifiableNote, NoteHeader, PrivateContext}, + protocol_types::{constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator, traits::{Empty, Eq}}, + macros::notes::partial_note +}; + +#[partial_note(quote { token_id})] +pub struct NFTNote { + // ID of the token + token_id: Field, + // The nullifying public key hash is used with the nsk_app to ensure that the note can be privately spent. + npk_m_hash: Field, + // Randomness of the note to hide its contents + randomness: Field, +} + +impl NullifiableNote for NFTNote { + fn compute_nullifier(self, context: &mut PrivateContext, note_hash_for_nullify: Field) -> Field { + let secret = context.request_nsk_app(self.npk_m_hash); + poseidon2_hash_with_separator( + [ + note_hash_for_nullify, + secret + ], + GENERATOR_INDEX__NOTE_NULLIFIER as Field + ) + } + + unconstrained fn compute_nullifier_without_context(self) -> Field { + let note_hash_for_nullify = compute_note_hash_for_nullify(self); + let secret = get_nsk_app(self.npk_m_hash); + poseidon2_hash_with_separator( + [ + note_hash_for_nullify, + secret + ], + GENERATOR_INDEX__NOTE_NULLIFIER as Field + ) + } +} + +impl NFTNote { + pub fn new(token_id: Field, npk_m_hash: Field) -> Self { + let randomness = unsafe { + unsafe_rand() + }; + NFTNote { token_id, npk_m_hash, randomness, header: NoteHeader::empty() } + } +} + +impl Eq for NFTNote { + fn eq(self, other: Self) -> bool { + (self.token_id == other.token_id) + & (self.npk_m_hash == other.npk_m_hash) + & (self.randomness == other.randomness) + } +} diff --git a/noir-projects/noir-contracts/contracts/parent_contract/src/main.nr b/noir-projects/noir-contracts/contracts/parent_contract/src/main.nr index 7825f85a167..ac1526eca14 100644 --- a/noir-projects/noir-contracts/contracts/parent_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/parent_contract/src/main.nr @@ -1,17 +1,19 @@ // A contract used along with `Child` contract to test nested calls. +use dep::aztec::macros::aztec; + +#[aztec] contract Parent { use dep::aztec::prelude::{AztecAddress, FunctionSelector}; - use dep::aztec::context::gas::GasOpts; + use dep::aztec::{context::gas::GasOpts, macros::functions::{private, public}}; // Private function to call another private function in the target_contract using the provided selector - #[aztec(private)] + #[private] fn entry_point(target_contract: AztecAddress, target_selector: FunctionSelector) -> Field { // Call the target private function context.call_private_function(target_contract, target_selector, [0]).unpack_into() } - // Public function to directly call another public function to the target_contract using the selector and value provided - #[aztec(public)] + #[public] fn pub_entry_point( target_contract: AztecAddress, target_selector: FunctionSelector, @@ -24,9 +26,8 @@ contract Parent { GasOpts::default() ).deserialize_into() } - // Same as pub_entry_point, but calls the target contract twice, using the return value from the first invocation as the argument for the second. - #[aztec(public)] + #[public] fn pub_entry_point_twice( target_contract: AztecAddress, target_selector: FunctionSelector, @@ -45,9 +46,8 @@ contract Parent { GasOpts::default() ).deserialize_into() } - // Private function to enqueue a call to the target_contract address using the selector and argument provided - #[aztec(private)] + #[private] fn enqueue_call_to_child( target_contract: AztecAddress, target_selector: FunctionSelector, @@ -55,11 +55,10 @@ contract Parent { ) { context.call_public_function(target_contract, target_selector, [target_value]); } - // Private function that enqueues two calls to a child contract: // - one through a nested call to enqueue_call_to_child with value 10, // - followed by one issued directly from this function with value 20. - #[aztec(private)] + #[private] fn enqueue_calls_to_child_with_nested_first( target_contract: AztecAddress, target_selector: FunctionSelector @@ -74,11 +73,10 @@ contract Parent { ); context.call_public_function(target_contract, target_selector, [20]); } - // Private function that enqueues two calls to a child contract: // - one issued directly from this function with value 20, // - followed by one through a nested call to enqueue_call_to_child with value 10. - #[aztec(private)] + #[private] fn enqueue_calls_to_child_with_nested_last( target_contract: AztecAddress, target_selector: FunctionSelector @@ -93,9 +91,8 @@ contract Parent { [target_contract.to_field(), target_selector.to_field(), 10] ); } - // Private function to enqueue a call to the target_contract address using the selector and argument provided - #[aztec(private)] + #[private] fn enqueue_call_to_child_twice( target_contract: AztecAddress, target_selector: FunctionSelector, @@ -106,9 +103,8 @@ contract Parent { // Enqueue the second public call context.call_public_function(target_contract, target_selector, [target_value + 1]); } - // Private function to enqueue a call to the pub_entry_point function of this same contract, passing the target arguments provided - #[aztec(private)] + #[private] fn enqueue_call_to_pub_entry_point( target_contract: AztecAddress, target_selector: FunctionSelector, @@ -124,9 +120,8 @@ contract Parent { [target_contract.to_field(), target_selector.to_field(), target_value] ); } - // Private function to enqueue two calls to the pub_entry_point function of this same contract, passing the target arguments provided - #[aztec(private)] + #[private] fn enqueue_calls_to_pub_entry_point( target_contract: AztecAddress, target_selector: FunctionSelector, @@ -136,21 +131,18 @@ contract Parent { FunctionSelector::from_signature("pub_entry_point((Field),(u32),Field)") }; let this_address = context.this_address(); - context.call_public_function( this_address, pub_entry_point_selector, [target_contract.to_field(), target_selector.to_field(), target_value] ); - context.call_public_function( this_address, pub_entry_point_selector, [target_contract.to_field(), target_selector.to_field(), target_value + 1] ); } - - #[aztec(private)] + #[private] fn private_static_call( target_contract: AztecAddress, target_selector: FunctionSelector, @@ -159,8 +151,7 @@ contract Parent { // Call the target private function context.static_call_private_function(target_contract, target_selector, args).unpack_into() } - - #[aztec(private)] + #[private] fn private_call( target_contract: AztecAddress, target_selector: FunctionSelector, @@ -169,9 +160,8 @@ contract Parent { // Call the target private function context.call_private_function(target_contract, target_selector, args).unpack_into() } - // Private function to set a static context and verify correct propagation for nested private calls - #[aztec(private)] + #[private] fn private_nested_static_call( target_contract: AztecAddress, target_selector: FunctionSelector, @@ -185,13 +175,11 @@ contract Parent { private_call_selector, [target_contract.to_field(), target_selector.to_field(), args[0], args[1]] ).unpack_into(); - // Copy the return value from the call to this function's return values return_value } - // Public function to directly call another public function to the target_contract using the selector and value provided - #[aztec(public)] + #[public] fn public_static_call( target_contract: AztecAddress, target_selector: FunctionSelector, @@ -204,9 +192,8 @@ contract Parent { GasOpts::default() ).deserialize_into() } - // Public function to set a static context and verify correct propagation for nested public calls - #[aztec(public)] + #[public] fn public_nested_static_call( target_contract: AztecAddress, target_selector: FunctionSelector, @@ -222,9 +209,8 @@ contract Parent { GasOpts::default() ).deserialize_into() } - // Private function to enqueue a static call to the pub_entry_point function of another contract, passing the target arguments provided - #[aztec(private)] + #[private] fn enqueue_static_nested_call_to_pub_function( target_contract: AztecAddress, target_selector: FunctionSelector, @@ -239,9 +225,8 @@ contract Parent { [target_contract.to_field(), target_selector.to_field(), args[0]] ); } - // Private function to enqueue a static call to the pub_entry_point function of another contract, passing the target arguments provided - #[aztec(private)] + #[private] fn enqueue_static_call_to_pub_function( target_contract: AztecAddress, target_selector: FunctionSelector, @@ -250,25 +235,21 @@ contract Parent { // Call the target private function context.static_call_public_function(target_contract, target_selector, args); } - use dep::aztec::test::{helpers::{cheatcodes, test_environment::TestEnvironment}}; use dep::aztec::protocol_types::storage::map::derive_storage_slot_in_map; use dep::aztec::note::note_getter::{MAX_NOTES_PER_PAGE, view_notes}; use dep::aztec::note::note_viewer_options::NoteViewerOptions; use dep::child_contract::Child; use dep::value_note::value_note::ValueNote; - #[test] fn test_private_call() { // Setup env, generate keys let mut env = TestEnvironment::new(); let owner = env.create_account(); - // Deploy child contract let child_contract = env.deploy("./@child_contract", "Child").without_initializer(); let child_contract_address = child_contract.to_address(); cheatcodes::advance_blocks_by(1); - // Set value in child through parent let value_to_set = 7; let parent_private_set_call_interface = Parent::interface().private_call( @@ -282,7 +263,7 @@ contract Parent { assert(result == value_to_set); // Read the stored value in the note. We have to change the contract address to the child contract in order to read its notes env.impersonate(child_contract_address); - let counter_slot = Child::storage().a_map_with_private_values.slot; + let counter_slot = Child::storage_layout().a_map_with_private_values.slot; let owner_slot = derive_storage_slot_in_map(counter_slot, owner); let mut options = NoteViewerOptions::new(); let notes: BoundedVec = view_notes(owner_slot, options); diff --git a/noir-projects/noir-contracts/contracts/pending_note_hashes_contract/src/main.nr b/noir-projects/noir-contracts/contracts/pending_note_hashes_contract/src/main.nr index 021c304c75f..9663eebb80f 100644 --- a/noir-projects/noir-contracts/contracts/pending_note_hashes_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/pending_note_hashes_contract/src/main.nr @@ -2,6 +2,9 @@ // read (eventually even nullified) in the same TX. This contract // also contains some "bad" test cases to ensure that notes cannot // be read/nullified before their creation etc. +use dep::aztec::macros::aztec; + +#[aztec] contract PendingNoteHashes { // Libs use dep::aztec::prelude::{AztecAddress, FunctionSelector, NoteGetterOptions, PrivateContext, Map, PrivateSet}; @@ -9,11 +12,12 @@ contract PendingNoteHashes { use dep::aztec::protocol_types::constants::{MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NOTE_HASHES_PER_CALL}; use dep::aztec::encrypted_logs::encrypted_note_emission::{encode_and_encrypt_note, encode_and_encrypt_note_with_keys}; use dep::aztec::note::note_emission::NoteEmission; - use dep::aztec::keys::getters::get_current_public_keys; + use dep::aztec::keys::getters::get_public_keys; + use dep::aztec::macros::{storage::storage, functions::private}; - #[aztec(storage)] - struct Storage { - balances: Map>, + #[storage] + struct Storage { + balances: Map, Context>, } // TODO(dbanks12): consolidate code into internal helper functions @@ -22,7 +26,7 @@ contract PendingNoteHashes { // Confirm can access pending note hashes by creating / inserting a note and then // getting / reading that note all in the same contract function // Realistic way to describe this test is "Mint note A, then burn note A in the same transaction" - #[aztec(private)] + #[private] fn test_insert_then_get_then_nullify_flat( amount: Field, owner: AztecAddress, @@ -30,7 +34,7 @@ contract PendingNoteHashes { ) -> Field { let owner_balance = storage.balances.at(owner); - let owner_npk_m_hash = get_current_public_keys(&mut context, owner).npk_m.hash(); + let owner_npk_m_hash = get_public_keys(owner).npk_m.hash(); let mut note = ValueNote::new(amount, owner_npk_m_hash); @@ -49,7 +53,7 @@ contract PendingNoteHashes { } // Confirm cannot access note hashes inserted later in same function - #[aztec(private)] + #[private] fn test_bad_get_then_insert_flat(amount: Field, owner: AztecAddress) -> Field { let owner_balance = storage.balances.at(owner); @@ -59,7 +63,7 @@ contract PendingNoteHashes { assert(notes.len() == 0); - let owner_npk_m_hash = get_current_public_keys(&mut context, owner).npk_m.hash(); + let owner_npk_m_hash = get_public_keys(owner).npk_m.hash(); // Insert note let mut note = ValueNote::new(amount, owner_npk_m_hash); @@ -69,15 +73,15 @@ contract PendingNoteHashes { } // Dummy nested/inner function (to pass a function which does nothing) - #[aztec(private)] + #[private] fn dummy(amount: Field, owner: AztecAddress, outgoing_viewer: AztecAddress) {} // Nested/inner function to create and insert a note - #[aztec(private)] + #[private] fn insert_note(amount: Field, owner: AztecAddress, outgoing_viewer: AztecAddress) { let owner_balance = storage.balances.at(owner); - let owner_npk_m_hash = get_current_public_keys(&mut context, owner).npk_m.hash(); + let owner_npk_m_hash = get_public_keys(owner).npk_m.hash(); let mut note = ValueNote::new(amount, owner_npk_m_hash); @@ -88,7 +92,7 @@ contract PendingNoteHashes { // Nested/inner function to create and insert a note // TESTING: inserts a static randomness value to test notes with // the same note hash are dealt with correctly - #[aztec(private)] + #[private] fn insert_note_static_randomness( amount: Field, owner: AztecAddress, @@ -96,7 +100,7 @@ contract PendingNoteHashes { ) { let mut owner_balance = storage.balances.at(owner); - let owner_npk_m_hash = get_current_public_keys(&mut context, owner).npk_m.hash(); + let owner_npk_m_hash = get_public_keys(owner).npk_m.hash(); let mut note = ValueNote::new(amount, owner_npk_m_hash); note.randomness = 2; @@ -107,11 +111,11 @@ contract PendingNoteHashes { // Nested/inner function to create and insert a note // then emit another note log for the same note - #[aztec(private)] + #[private] fn insert_note_extra_emit(amount: Field, owner: AztecAddress, outgoing_viewer: AztecAddress) { let mut owner_balance = storage.balances.at(owner); - let owner_npk_m_hash = get_current_public_keys(&mut context, owner).npk_m.hash(); + let owner_npk_m_hash = get_public_keys(owner).npk_m.hash(); let mut note = ValueNote::new(amount, owner_npk_m_hash); @@ -125,7 +129,7 @@ contract PendingNoteHashes { } // Nested/inner function to get a note and confirm it matches the expected value - #[aztec(private)] + #[private] fn get_then_nullify_note(expected_value: Field, owner: AztecAddress) -> Field { let owner_balance = storage.balances.at(owner); @@ -138,7 +142,7 @@ contract PendingNoteHashes { } // Nested/inner function to get a note and confirms that none is returned - #[aztec(private)] + #[private] fn get_note_zero_balance(owner: AztecAddress) { let owner_balance = storage.balances.at(owner); @@ -151,7 +155,7 @@ contract PendingNoteHashes { // Test pending note hashes with note insertion done in a nested call // and "read" / get of that pending note hash in another nested call // Realistic way to describe this test is "Mint note A, then burn note A in the same transaction" - #[aztec(private)] + #[private] fn test_insert_then_get_then_nullify_all_in_nested_calls( amount: Field, owner: AztecAddress, @@ -174,7 +178,7 @@ contract PendingNoteHashes { } // same test as above, but insert 2, get 2, nullify 2 - #[aztec(private)] + #[private] fn test_insert2_then_get2_then_nullify2_all_in_nested_calls( amount: Field, owner: AztecAddress, @@ -214,7 +218,7 @@ contract PendingNoteHashes { } // same test as above, but insert 2, get 1, nullify 1 - #[aztec(private)] + #[private] fn test_insert2_then_get2_then_nullify1_all_in_nested_calls( amount: Field, owner: AztecAddress, @@ -248,7 +252,7 @@ contract PendingNoteHashes { // insert 1 note, then get 2 notes (one pending, one persistent) and nullify both. // one nullifier will be squashed with the pending note, one will become persistent. // ONLY WORKS IF THERE IS A PERSISTENT NOTE TO GET - #[aztec(private)] + #[private] fn test_insert1_then_get2_then_nullify2_all_in_nested_calls( amount: Field, owner: AztecAddress, @@ -285,7 +289,7 @@ contract PendingNoteHashes { // nested call (later kernel iteration) should not be able to read the note hash despite // it being present at that stage in the kernel. // If we can somehow force the simulator to allow execution to succeed can ensure that this test fails in the kernel - // #[aztec(private)] + // #[private] //fn test_bad_get_in_nested_call_then_insert( // amount: Field, // owner: AztecAddress, @@ -293,7 +297,7 @@ contract PendingNoteHashes { //) { //} - #[aztec(private)] + #[private] fn test_recursively_create_notes( owner: AztecAddress, outgoing_viewer: AztecAddress, @@ -304,7 +308,7 @@ contract PendingNoteHashes { PendingNoteHashes::at(context.this_address()).recursively_destroy_and_create_notes(owner, outgoing_viewer, how_many_recursions).call(&mut context); } - #[aztec(private)] + #[private] fn recursively_destroy_and_create_notes( owner: AztecAddress, outgoing_viewer: AztecAddress, @@ -325,14 +329,14 @@ contract PendingNoteHashes { // TESTING: Forces the private context to accept a note log for a non-existent note // by using an existing note's counter via its header. This is used to check that // the pxe rejects the note log later. - #[aztec(private)] + #[private] fn test_emit_bad_note_log(owner: AztecAddress, outgoing_viewer: AztecAddress) { let owner_balance = storage.balances.at(owner); - let owner_keys = get_current_public_keys(&mut context, owner); + let owner_keys = get_public_keys(owner); let owner_npk_m_hash = owner_keys.npk_m.hash(); let owner_ivpk_m = owner_keys.ivpk_m; - let outgoing_viewer_ovpk_m = get_current_public_keys(&mut context, outgoing_viewer).ovpk_m; + let outgoing_viewer_ovpk_m = get_public_keys(outgoing_viewer).ovpk_m; let mut good_note = ValueNote::new(10, owner_npk_m_hash); // Insert good note with real log @@ -357,10 +361,10 @@ contract PendingNoteHashes { ) { let owner_balance = storage.balances.at(owner); - let owner_keys = get_current_public_keys(context, owner); + let owner_keys = get_public_keys(owner); let owner_npk_m_hash = owner_keys.npk_m.hash(); let owner_ivpk_m = owner_keys.ivpk_m; - let outgoing_viewer_ovpk_m = get_current_public_keys(context, outgoing_viewer).ovpk_m; + let outgoing_viewer_ovpk_m = get_public_keys(outgoing_viewer).ovpk_m; for i in 0..max_notes_per_call() { let mut note = ValueNote::new(i as Field, owner_npk_m_hash); diff --git a/noir-projects/noir-contracts/contracts/price_feed_contract/src/asset.nr b/noir-projects/noir-contracts/contracts/price_feed_contract/src/asset.nr index 147c33c0e6c..f28fc928259 100644 --- a/noir-projects/noir-contracts/contracts/price_feed_contract/src/asset.nr +++ b/noir-projects/noir-contracts/contracts/price_feed_contract/src/asset.nr @@ -1,10 +1,10 @@ use dep::aztec::protocol_types::traits::{Serialize, Deserialize}; -struct Asset { +pub struct Asset { price: U128, } -global ASSET_SERIALIZED_LEN: Field = 2; +global ASSET_SERIALIZED_LEN: u32 = 2; impl Serialize for Asset { fn serialize(asset: Asset) -> [Field; ASSET_SERIALIZED_LEN] { diff --git a/noir-projects/noir-contracts/contracts/price_feed_contract/src/main.nr b/noir-projects/noir-contracts/contracts/price_feed_contract/src/main.nr index 3c919579009..f360c87ad74 100644 --- a/noir-projects/noir-contracts/contracts/price_feed_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/price_feed_contract/src/main.nr @@ -1,23 +1,28 @@ mod asset; +use dep::aztec::macros::aztec; + +#[aztec] contract PriceFeed { - use dep::aztec::prelude::{AztecAddress, FunctionSelector, PrivateContext, Map, PublicMutable}; + use dep::aztec::prelude::{Map, PublicMutable}; use crate::asset::Asset; + use dep::aztec::macros::{storage::storage, functions::{public, view}}; + // Storage structure, containing all storage, and specifying what slots they use. - #[aztec(storage)] - struct Storage { - assets: Map>, + #[storage] + struct Storage { + assets: Map, Context>, } - #[aztec(public)] + #[public] fn set_price(asset_id: Field, price: Field) { let asset = storage.assets.at(asset_id); asset.write(Asset { price: U128::from_integer(price) }); } - #[aztec(public)] - #[aztec(view)] + #[public] + #[view] fn get_price(asset_id: Field) -> Asset { storage.assets.at(asset_id).read() } diff --git a/noir-projects/noir-contracts/contracts/private_fpc_contract/src/main.nr b/noir-projects/noir-contracts/contracts/private_fpc_contract/src/main.nr index c8716b0f9d4..910cff462d0 100644 --- a/noir-projects/noir-contracts/contracts/private_fpc_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/private_fpc_contract/src/main.nr @@ -1,23 +1,30 @@ mod settings; +use dep::aztec::macros::aztec; + +#[aztec] contract PrivateFPC { - use dep::aztec::{protocol_types::{address::AztecAddress, hash::compute_siloed_nullifier}, state_vars::SharedImmutable}; - use dep::token::Token; + use dep::aztec::{ + protocol_types::{address::AztecAddress, hash::compute_siloed_nullifier}, + state_vars::SharedImmutable, + macros::{storage::storage, functions::{private, initializer, public}} + }; + use token::Token; use crate::settings::Settings; - #[aztec(storage)] - struct Storage { - settings: SharedImmutable, + #[storage] + struct Storage { + settings: SharedImmutable, } - #[aztec(public)] - #[aztec(initializer)] + #[public] + #[initializer] fn constructor(other_asset: AztecAddress, admin: AztecAddress) { let settings = Settings { other_asset, admin }; storage.settings.initialize(settings); } - #[aztec(private)] + #[private] fn fund_transaction_privately(amount: Field, asset: AztecAddress, user_randomness: Field) { // TODO: Once SharedImmutable performs only 1 merkle proof here, we'll save ~4k gates let settings = storage.settings.read_private(); diff --git a/noir-projects/noir-contracts/contracts/private_fpc_contract/src/settings.nr b/noir-projects/noir-contracts/contracts/private_fpc_contract/src/settings.nr index 3c51a1861a0..3a3ea50030b 100644 --- a/noir-projects/noir-contracts/contracts/private_fpc_contract/src/settings.nr +++ b/noir-projects/noir-contracts/contracts/private_fpc_contract/src/settings.nr @@ -1,8 +1,8 @@ use dep::aztec::protocol_types::{address::AztecAddress, traits::{Serialize, Deserialize}}; -global SETTINGS_LENGTH = 2; +global SETTINGS_LENGTH: u32 = 2; -struct Settings { +pub struct Settings { other_asset: AztecAddress, admin: AztecAddress, } diff --git a/noir-projects/noir-contracts/contracts/router_contract/src/main.nr b/noir-projects/noir-contracts/contracts/router_contract/src/main.nr index fd614c18c54..914b3829f75 100644 --- a/noir-projects/noir-contracts/contracts/router_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/router_contract/src/main.nr @@ -1,23 +1,26 @@ mod test; mod utils; +use dep::aztec::macros::aztec; + /// The purpose of this contract is to perform a check in public without revealing what contract enqued the public /// call. This is achieved by having a private function on this contract that enques the public call and hence /// the `msg_sender` in the public call is the address of this contract. +#[aztec] contract Router { - use aztec::utils::comparison::compare; + use aztec::{macros::functions::{private, public, view, internal}, utils::comparison::compare}; // docs:start:check_timestamp /// Asserts that the current timestamp in the enqueued public call satisfies the `operation` with respect /// to the `value. - #[aztec(private)] + #[private] fn check_timestamp(operation: u8, value: u64) { Router::at(context.this_address())._check_timestamp(operation, value).enqueue_view(&mut context); } - #[aztec(public)] - #[aztec(internal)] - #[aztec(view)] + #[public] + #[internal] + #[view] fn _check_timestamp(operation: u8, value: u64) { let lhs_field = context.timestamp() as Field; let rhs_field = value as Field; @@ -27,14 +30,14 @@ contract Router { /// Asserts that the current block number in the enqueued public call satisfies the `operation` with respect /// to the `value. - #[aztec(private)] + #[private] fn check_block_number(operation: u8, value: Field) { Router::at(context.this_address())._check_block_number(operation, value).enqueue_view(&mut context); } - #[aztec(public)] - #[aztec(internal)] - #[aztec(view)] + #[public] + #[internal] + #[view] fn _check_block_number(operation: u8, value: Field) { assert(compare(context.block_number(), operation, value), "Block number mismatch."); } diff --git a/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/main.nr b/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/main.nr index 882423aa75a..da74e7c3104 100644 --- a/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/main.nr @@ -2,6 +2,9 @@ mod public_key_note; // Account contract that uses Schnorr signatures for authentication. // The signing key is stored in an immutable private note and should be different from the encryption/nullifying key. +use dep::aztec::macros::aztec; + +#[aztec] contract SchnorrAccount { use dep::std; @@ -11,22 +14,23 @@ contract SchnorrAccount { entrypoint::{app::AppPayload, fee::FeePayload}, account::AccountActions, auth_witness::get_auth_witness, auth::{compute_authwit_nullifier, compute_authwit_message_hash} }; - use dep::aztec::{hash::compute_siloed_nullifier, keys::getters::get_current_public_keys}; + use dep::aztec::{hash::compute_siloed_nullifier, keys::getters::get_public_keys}; use dep::aztec::oracle::get_nullifier_membership_witness::get_low_nullifier_membership_witness; + use dep::aztec::macros::{storage::storage, functions::{private, initializer, view, noinitcheck}}; use crate::public_key_note::PublicKeyNote; - #[aztec(storage)] - struct Storage { - signing_public_key: PrivateImmutable, + #[storage] + struct Storage { + signing_public_key: PrivateImmutable, } // Constructs the contract - #[aztec(private)] - #[aztec(initializer)] + #[private] + #[initializer] fn constructor(signing_pub_key_x: Field, signing_pub_key_y: Field) { let this = context.this_address(); - let this_keys = get_current_public_keys(&mut context, this); + let this_keys = get_public_keys(this); // Not emitting outgoing for msg_sender here to not have to register keys for the contract through which we // deploy this (typically MultiCallEntrypoint). I think it's ok here as I feel the outgoing here is not that // important. @@ -36,16 +40,16 @@ contract SchnorrAccount { } // Note: If you globally change the entrypoint signature don't forget to update account_entrypoint.ts file - #[aztec(private)] - #[aztec(noinitcheck)] + #[private] + #[noinitcheck] fn entrypoint(app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) { let actions = AccountActions::init(&mut context, is_valid_impl); actions.entrypoint(app_payload, fee_payload, cancellable); } - #[aztec(private)] - #[aztec(noinitcheck)] - #[aztec(view)] + #[private] + #[noinitcheck] + #[view] fn verify_private_authwit(inner_hash: Field) -> Field { let actions = AccountActions::init(&mut context, is_valid_impl); actions.verify_private_authwit(inner_hash) diff --git a/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/public_key_note.nr b/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/public_key_note.nr index 948367a413a..7098b66ab11 100644 --- a/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/public_key_note.nr +++ b/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/public_key_note.nr @@ -1,24 +1,21 @@ -use dep::aztec::prelude::{NoteHeader, NoteInterface, PrivateContext}; +use dep::aztec::prelude::{NoteHeader, NullifiableNote, PrivateContext}; use dep::aztec::{ note::utils::compute_note_hash_for_nullify, keys::getters::get_nsk_app, - protocol_types::{constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator} + protocol_types::{constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator}, + macros::notes::note }; -global PUBLIC_KEY_NOTE_LEN: Field = 3; -// PUBLIC_KEY_NOTE_LEN * 32 + 32(storage_slot as bytes) + 32(note_type_id as bytes) -global PUBLIC_KEY_NOTE_BYTES_LEN: Field = 3 * 32 + 64; - // Stores a public key composed of two fields // TODO: Do we need to include a nonce, in case we want to read/nullify/recreate with the same pubkey value? -#[aztec(note)] -struct PublicKeyNote { +#[note] +pub struct PublicKeyNote { x: Field, y: Field, // We store the npk_m_hash only to get the secret key to compute the nullifier npk_m_hash: Field, } -impl NoteInterface for PublicKeyNote { +impl NullifiableNote for PublicKeyNote { fn compute_nullifier(self, context: &mut PrivateContext, note_hash_for_nullify: Field) -> Field { let secret = context.request_nsk_app(self.npk_m_hash); poseidon2_hash_with_separator( @@ -30,7 +27,7 @@ impl NoteInterface for PublicKey ) } - fn compute_nullifier_without_context(self) -> Field { + unconstrained fn compute_nullifier_without_context(self) -> Field { let note_hash_for_nullify = compute_note_hash_for_nullify(self); let secret = get_nsk_app(self.npk_m_hash); poseidon2_hash_with_separator( diff --git a/noir-projects/noir-contracts/contracts/schnorr_hardcoded_account_contract/src/main.nr b/noir-projects/noir-contracts/contracts/schnorr_hardcoded_account_contract/src/main.nr index b6bca50d603..f61dea42972 100644 --- a/noir-projects/noir-contracts/contracts/schnorr_hardcoded_account_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/schnorr_hardcoded_account_contract/src/main.nr @@ -1,5 +1,8 @@ // docs:start:contract // Account contract that uses Schnorr signatures for authentication using a hardcoded public key. +use dep::aztec::macros::aztec; + +#[aztec] contract SchnorrHardcodedAccount { use dep::aztec::prelude::PrivateContext; use dep::authwit::{ @@ -7,18 +10,20 @@ contract SchnorrHardcodedAccount { auth_witness::get_auth_witness }; + use dep::aztec::macros::{functions::{private, view}}; + global public_key_x: Field = 0x16b93f4afae55cab8507baeb8e7ab4de80f5ab1e9e1f5149bf8cd0d375451d90; global public_key_y: Field = 0x208d44b36eb6e73b254921134d002da1a90b41131024e3b1d721259182106205; // Note: If you globally change the entrypoint signature don't forget to update account_entrypoint.ts - #[aztec(private)] + #[private] fn entrypoint(app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) { let actions = AccountActions::init(&mut context, is_valid_impl); actions.entrypoint(app_payload, fee_payload, cancellable); } - #[aztec(private)] - #[aztec(view)] + #[private] + #[view] fn verify_private_authwit(inner_hash: Field) -> Field { let actions = AccountActions::init(&mut context, is_valid_impl); actions.verify_private_authwit(inner_hash) diff --git a/noir-projects/noir-contracts/contracts/schnorr_single_key_account_contract/src/auth_oracle.nr b/noir-projects/noir-contracts/contracts/schnorr_single_key_account_contract/src/auth_oracle.nr index 00c2f96bfe6..f9f4f3f4bd2 100644 --- a/noir-projects/noir-contracts/contracts/schnorr_single_key_account_contract/src/auth_oracle.nr +++ b/noir-projects/noir-contracts/contracts/schnorr_single_key_account_contract/src/auth_oracle.nr @@ -4,7 +4,7 @@ use dep::aztec::{ keys::{PublicKeys, PUBLIC_KEYS_LENGTH} }; -struct AuthWitness { +pub struct AuthWitness { keys: PublicKeys, signature: [u8; 64], partial_address: PartialAddress, diff --git a/noir-projects/noir-contracts/contracts/schnorr_single_key_account_contract/src/main.nr b/noir-projects/noir-contracts/contracts/schnorr_single_key_account_contract/src/main.nr index ec4c9037b63..b9f00815f63 100644 --- a/noir-projects/noir-contracts/contracts/schnorr_single_key_account_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/schnorr_single_key_account_contract/src/main.nr @@ -1,6 +1,9 @@ mod util; mod auth_oracle; +use dep::aztec::macros::aztec; + +#[aztec] contract SchnorrSingleKeyAccount { use dep::aztec::prelude::PrivateContext; @@ -8,15 +11,17 @@ contract SchnorrSingleKeyAccount { use crate::{util::recover_address, auth_oracle::get_auth_witness}; + use dep::aztec::macros::{functions::{private, view}}; + // Note: If you globally change the entrypoint signature don't forget to update account_entrypoint.ts - #[aztec(private)] + #[private] fn entrypoint(app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) { let actions = AccountActions::init(&mut context, is_valid_impl); actions.entrypoint(app_payload, fee_payload, cancellable); } - #[aztec(private)] - #[aztec(view)] + #[private] + #[view] fn verify_private_authwit(inner_hash: Field) -> Field { let actions = AccountActions::init(&mut context, is_valid_impl); actions.verify_private_authwit(inner_hash) diff --git a/noir-projects/noir-contracts/contracts/spam_contract/Nargo.toml b/noir-projects/noir-contracts/contracts/spam_contract/Nargo.toml new file mode 100644 index 00000000000..955b1823484 --- /dev/null +++ b/noir-projects/noir-contracts/contracts/spam_contract/Nargo.toml @@ -0,0 +1,10 @@ +[package] +name = "spam_contract" +authors = [""] +compiler_version = ">=0.25.0" +type = "contract" + +[dependencies] +aztec = { path = "../../../aztec-nr/aztec" } +value_note = { path = "../../../aztec-nr/value-note" } +token_portal_content_hash_lib = { path = "../token_portal_content_hash_lib" } diff --git a/noir-projects/noir-contracts/contracts/spam_contract/src/main.nr b/noir-projects/noir-contracts/contracts/spam_contract/src/main.nr new file mode 100644 index 00000000000..fae6a1bbad0 --- /dev/null +++ b/noir-projects/noir-contracts/contracts/spam_contract/src/main.nr @@ -0,0 +1,72 @@ +mod types; + +use dep::aztec::macros::aztec; + +// A contract used for testing a random hodgepodge of small features from simulator and end-to-end tests. +#[aztec] +contract Spam { + + use dep::aztec::{ + prelude::{Map, AztecAddress, PublicMutable}, + encrypted_logs::{encrypted_note_emission::encode_and_encrypt_note_with_keys_unconstrained}, + keys::getters::get_public_keys, + protocol_types::{ + hash::poseidon2_hash_with_separator, + constants::{ + MAX_NOTE_HASHES_PER_CALL, MAX_NULLIFIERS_PER_CALL, GENERATOR_INDEX__NOTE_NULLIFIER, + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL + } + }, + macros::{storage::storage, functions::{private, public, internal}} + }; + + use crate::types::{token_note::TokenNote, balance_set::BalanceSet}; + + #[storage] + struct Storage { + balances: Map, Context>, + public_balances: Map, Context>, + } + + #[private] + fn spam(nullifier_seed: Field, nullifier_count: u32, call_public: bool) { + let caller = context.msg_sender(); + let caller_keys = get_public_keys(caller); + let amount = U128::from_integer(1); + + for _ in 0..MAX_NOTE_HASHES_PER_CALL { + storage.balances.at(caller).add(caller_keys.npk_m, U128::from_integer(amount)).emit( + encode_and_encrypt_note_with_keys_unconstrained(&mut context, caller_keys.ovpk_m, caller_keys.ivpk_m, caller) + ); + } + + for i in 0..MAX_NULLIFIERS_PER_CALL { + if (i < nullifier_count) { + context.push_nullifier( + poseidon2_hash_with_separator( + [nullifier_seed, i as Field], + GENERATOR_INDEX__NOTE_NULLIFIER as Field + ) + ); + } + } + + if (call_public) { + Spam::at(context.this_address()).public_spam(0, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL).enqueue(&mut context); + Spam::at(context.this_address()).public_spam( + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX + ).enqueue(&mut context); + } + } + + #[public] + #[internal] + fn public_spam(start: u32, end: u32) { + let one = U128::from_integer(1); + for i in start..end { + let prev = storage.public_balances.at(i as Field).read(); + storage.public_balances.at(i as Field).write(prev + one); + } + } +} diff --git a/noir-projects/noir-contracts/contracts/spam_contract/src/types.nr b/noir-projects/noir-contracts/contracts/spam_contract/src/types.nr new file mode 100644 index 00000000000..a121770a831 --- /dev/null +++ b/noir-projects/noir-contracts/contracts/spam_contract/src/types.nr @@ -0,0 +1,2 @@ +mod balance_set; +mod token_note; diff --git a/noir-projects/noir-contracts/contracts/spam_contract/src/types/balance_set.nr b/noir-projects/noir-contracts/contracts/spam_contract/src/types/balance_set.nr new file mode 100644 index 00000000000..d6a17fe5ab5 --- /dev/null +++ b/noir-projects/noir-contracts/contracts/spam_contract/src/types/balance_set.nr @@ -0,0 +1,136 @@ +// This file is copied from the token contract. +use dep::aztec::prelude::{NoteGetterOptions, NoteViewerOptions, NoteInterface, NullifiableNote, PrivateSet}; +use dep::aztec::{ + context::{PrivateContext, UnconstrainedContext}, + protocol_types::constants::MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, + note::note_emission::OuterNoteEmission, keys::public_keys::NpkM +}; +use crate::types::token_note::OwnedNote; + +pub struct BalanceSet { + set: PrivateSet, +} + +impl BalanceSet { + pub fn new(context: Context, storage_slot: Field) -> Self { + assert(storage_slot != 0, "Storage slot 0 not allowed. Storage slots must start from 1."); + Self { set: PrivateSet::new(context, storage_slot) } + } +} + +impl BalanceSet { + unconstrained pub fn balance_of(self: Self) -> U128 where T: NoteInterface + NullifiableNote + OwnedNote { + self.balance_of_with_offset(0) + } + + unconstrained pub fn balance_of_with_offset( + self: Self, + offset: u32 + ) -> U128 where T: NoteInterface + NullifiableNote + OwnedNote { + let mut balance = U128::from_integer(0); + // docs:start:view_notes + let mut options = NoteViewerOptions::new(); + let notes = self.set.view_notes(options.set_offset(offset)); + // docs:end:view_notes + for i in 0..options.limit { + if i < notes.len() { + balance = balance + notes.get_unchecked(i).get_amount(); + } + } + if (notes.len() == options.limit) { + balance = balance + self.balance_of_with_offset(offset + options.limit); + } + + balance + } +} + +impl BalanceSet { + pub fn add( + self: Self, + owner_npk_m: NpkM, + addend: U128 + ) -> OuterNoteEmission where T: NoteInterface + NullifiableNote + OwnedNote + Eq { + if addend == U128::from_integer(0) { + OuterNoteEmission::new(Option::none()) + } else { + // We fetch the nullifier public key hash from the registry / from our PXE + let mut addend_note = T::new(addend, owner_npk_m.hash()); + + // docs:start:insert + OuterNoteEmission::new(Option::some(self.set.insert(&mut addend_note))) + // docs:end:insert + } + } + + pub fn sub( + self: Self, + owner_npk_m: NpkM, + amount: U128 + ) -> OuterNoteEmission where T: NoteInterface + NullifiableNote + OwnedNote + Eq { + let subtracted = self.try_sub(amount, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL); + + // try_sub may have substracted more or less than amount. We must ensure that we subtracted at least as much as + // we needed, and then create a new note for the owner for the change (if any). + assert(subtracted >= amount, "Balance too low"); + self.add(owner_npk_m, subtracted - amount) + } + + // Attempts to remove 'target_amount' from the owner's balance. try_sub returns how much was actually subtracted + // (i.e. the sum of the value of nullified notes), but this subtracted amount may be more or less than the target + // amount. + // This may seem odd, but is unfortunately unavoidable due to the number of notes available and their amounts being + // unknown. What try_sub does is a best-effort attempt to consume as few notes as possible that add up to more than + // `target_amount`. + // The `max_notes` parameter is used to fine-tune the number of constraints created by this function. The gate count + // scales relatively linearly with `max_notes`, but a lower `max_notes` parameter increases the likelihood of + // `try_sub` subtracting an amount smaller than `target_amount`. + pub fn try_sub( + self: Self, + target_amount: U128, + max_notes: u32 + ) -> U128 where T: NoteInterface + NullifiableNote + OwnedNote + Eq { + // We are using a preprocessor here (filter applied in an unconstrained context) instead of a filter because + // we do not need to prove correct execution of the preprocessor. + // Because the `min_sum` notes is not constrained, users could choose to e.g. not call it. However, all this + // might result in is simply higher DA costs due to more nullifiers being emitted. Since we don't care + // about proving optimal note usage, we can save these constraints and make the circuit smaller. + let options = NoteGetterOptions::with_preprocessor(preprocess_notes_min_sum, target_amount).set_limit(max_notes); + let notes = self.set.pop_notes(options); + + let mut subtracted = U128::from_integer(0); + for i in 0..options.limit { + if i < notes.len() { + let note = notes.get_unchecked(i); + subtracted = subtracted + note.get_amount(); + } + } + + subtracted + } +} + +// Computes the partial sum of the notes array, stopping once 'min_sum' is reached. This can be used to minimize the +// number of notes read that add to some value, e.g. when transferring some amount of tokens. +// The preprocessor (a filter applied in an unconstrained context) does not check if total sum is larger or equal to +// 'min_sum' - all it does is remove extra notes if it does reach that value. +// Note that proper usage of this preprocessor requires for notes to be sorted in descending order. +pub fn preprocess_notes_min_sum( + notes: [Option; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL], + min_sum: U128 +) -> [Option; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] where T: NoteInterface + NullifiableNote + OwnedNote { + let mut selected = [Option::none(); MAX_NOTE_HASH_READ_REQUESTS_PER_CALL]; + let mut sum = U128::from_integer(0); + for i in 0..notes.len() { + // Because we process notes in retrieved order, notes need to be sorted in descending amount order for this + // filter to be useful. Consider a 'min_sum' of 4, and a set of notes with amounts [3, 2, 1, 1, 1, 1, 1]. If + // sorted in descending order, the filter will only choose the notes with values 3 and 2, but if sorted in + // ascending order it will choose 4 notes of value 1. + if notes[i].is_some() & sum < min_sum { + let note = notes[i].unwrap_unchecked(); + selected[i] = Option::some(note); + sum = sum.add(note.get_amount()); + } + } + selected +} diff --git a/noir-projects/noir-contracts/contracts/spam_contract/src/types/token_note.nr b/noir-projects/noir-contracts/contracts/spam_contract/src/types/token_note.nr new file mode 100644 index 00000000000..b14bc87f94c --- /dev/null +++ b/noir-projects/noir-contracts/contracts/spam_contract/src/types/token_note.nr @@ -0,0 +1,64 @@ +use dep::aztec::{ + prelude::{NoteHeader, NullifiableNote, PrivateContext}, + protocol_types::{constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator}, + note::utils::compute_note_hash_for_nullify, oracle::unsafe_rand::unsafe_rand, + keys::getters::get_nsk_app, macros::notes::note +}; + +trait OwnedNote { + fn new(amount: U128, owner_npk_m_hash: Field) -> Self; + fn get_amount(self) -> U128; +} +// docs:start:TokenNote +#[note] +pub struct TokenNote { + // The amount of tokens in the note + amount: U128, + // The nullifying public key hash is used with the nsk_app to ensure that the note can be privately spent. + npk_m_hash: Field, + // Randomness of the note to hide its contents + randomness: Field, +} +// docs:end:TokenNote + +impl NullifiableNote for TokenNote { + // docs:start:nullifier + fn compute_nullifier(self, context: &mut PrivateContext, note_hash_for_nullify: Field) -> Field { + let secret = context.request_nsk_app(self.npk_m_hash); + poseidon2_hash_with_separator( + [ + note_hash_for_nullify, + secret + ], + GENERATOR_INDEX__NOTE_NULLIFIER as Field + ) + } + // docs:end:nullifier + + unconstrained fn compute_nullifier_without_context(self) -> Field { + let note_hash_for_nullify = compute_note_hash_for_nullify(self); + let secret = get_nsk_app(self.npk_m_hash); + poseidon2_hash_with_separator( + [note_hash_for_nullify, secret], + GENERATOR_INDEX__NOTE_NULLIFIER + ) + } +} + +impl Eq for TokenNote { + fn eq(self, other: Self) -> bool { + (self.amount == other.amount) + & (self.npk_m_hash == other.npk_m_hash) + & (self.randomness == other.randomness) + } +} + +impl OwnedNote for TokenNote { + fn new(amount: U128, owner_npk_m_hash: Field) -> Self { + Self { amount, npk_m_hash: owner_npk_m_hash, randomness: unsafe_rand(), header: NoteHeader::empty() } + } + + fn get_amount(self) -> U128 { + self.amount + } +} diff --git a/noir-projects/noir-contracts/contracts/stateful_test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/stateful_test_contract/src/main.nr index ba8b82fee3e..fd229a997d6 100644 --- a/noir-projects/noir-contracts/contracts/stateful_test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/stateful_test_contract/src/main.nr @@ -1,23 +1,29 @@ // A contract used for testing a random hodgepodge of small features from simulator and end-to-end tests. +use dep::aztec::macros::aztec; + +#[aztec] contract StatefulTest { use dep::aztec::prelude::{Map, PublicMutable, PrivateSet, AztecAddress, FunctionSelector}; use dep::value_note::{balance_utils, utils::{increment, decrement}, value_note::ValueNote}; - use dep::aztec::{initializer::assert_is_initialized_private}; - - #[aztec(storage)] - struct Storage { - notes: Map>, - public_values: Map>, + use dep::aztec::{ + initializer::assert_is_initialized_private, + macros::{storage::storage, functions::{private, public, initializer, noinitcheck, view}} + }; + + #[storage] + struct Storage { + notes: Map, Context>, + public_values: Map, Context>, } - #[aztec(private)] - #[aztec(initializer)] + #[private] + #[initializer] fn constructor(owner: AztecAddress, outgoing_viewer: AztecAddress, value: Field) { StatefulTest::at(context.this_address()).create_note_no_init_check(owner, outgoing_viewer, value).call(&mut context); } - #[aztec(private)] - #[aztec(initializer)] + #[private] + #[initializer] fn wrong_constructor() { let selector = FunctionSelector::from_signature("not_exists(Field)"); let _res = context.call_public_function(context.this_address(), selector, [42]); @@ -25,13 +31,13 @@ contract StatefulTest { // Having _ignored_arg here as it makes the params the same as for the private constructor which makes // contract_class_registration tests way less cluttered. This is a test contract. Don't judge me. - #[aztec(public)] - #[aztec(initializer)] + #[public] + #[initializer] fn public_constructor(owner: AztecAddress, _ignored_arg: AztecAddress, value: Field) { StatefulTest::at(context.this_address()).increment_public_value_no_init_check(owner, value).call(&mut context); } - #[aztec(private)] + #[private] fn create_note(owner: AztecAddress, outgoing_viewer: AztecAddress, value: Field) { if (value != 0) { let loc = storage.notes.at(owner); @@ -39,8 +45,8 @@ contract StatefulTest { } } - #[aztec(private)] - #[aztec(noinitcheck)] + #[private] + #[noinitcheck] fn create_note_no_init_check(owner: AztecAddress, outgoing_viewer: AztecAddress, value: Field) { if (value != 0) { let loc = storage.notes.at(owner); @@ -48,7 +54,7 @@ contract StatefulTest { } } - #[aztec(private)] + #[private] fn destroy_and_create(recipient: AztecAddress, amount: Field) { assert_is_initialized_private(&mut context); let sender = context.msg_sender(); @@ -60,8 +66,8 @@ contract StatefulTest { increment(recipient_notes, amount, recipient, context.msg_sender()); } - #[aztec(private)] - #[aztec(noinitcheck)] + #[private] + #[noinitcheck] fn destroy_and_create_no_init_check(recipient: AztecAddress, amount: Field) { let sender = context.msg_sender(); @@ -72,14 +78,14 @@ contract StatefulTest { increment(recipient_notes, amount, recipient, context.msg_sender()); } - #[aztec(public)] + #[public] fn increment_public_value(owner: AztecAddress, value: Field) { let loc = storage.public_values.at(owner); loc.write(loc.read() + value); } - #[aztec(public)] - #[aztec(noinitcheck)] + #[public] + #[noinitcheck] fn increment_public_value_no_init_check(owner: AztecAddress, value: Field) { let loc = storage.public_values.at(owner); loc.write(loc.read() + value); @@ -94,9 +100,9 @@ contract StatefulTest { // docs:end:get_balance } - #[aztec(public)] - #[aztec(noinitcheck)] - #[aztec(view)] + #[public] + #[noinitcheck] + #[view] fn get_public_value(owner: AztecAddress) -> pub Field { storage.public_values.at(owner).read() } diff --git a/noir-projects/noir-contracts/contracts/static_child_contract/src/main.nr b/noir-projects/noir-contracts/contracts/static_child_contract/src/main.nr index 828f077d95d..fbdcf745c57 100644 --- a/noir-projects/noir-contracts/contracts/static_child_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/static_child_contract/src/main.nr @@ -1,24 +1,27 @@ // A contract used along with `StaticParent` contract to test static calls. +use dep::aztec::macros::aztec; + +#[aztec] contract StaticChild { - use dep::aztec::prelude::{AztecAddress, FunctionSelector, PublicMutable, PrivateSet, PrivateContext, Deserialize}; + use dep::aztec::prelude::{AztecAddress, PublicMutable, PrivateSet}; use dep::aztec::{ - context::{PublicContext, gas::GasOpts}, protocol_types::{abis::{call_context::CallContext}}, - note::{note_getter_options::NoteGetterOptions, note_header::NoteHeader}, + note::{note_getter_options::NoteGetterOptions}, encrypted_logs::encrypted_note_emission::encode_and_encrypt_note, - keys::getters::get_current_public_keys, utils::comparison::Comparator + keys::getters::get_public_keys, utils::comparison::Comparator, + macros::{storage::storage, functions::{private, public, view}} }; use dep::value_note::value_note::ValueNote; - #[aztec(storage)] - struct Storage { - current_value: PublicMutable, - a_private_value: PrivateSet, + #[storage] + struct Storage { + current_value: PublicMutable, + a_private_value: PrivateSet, } // Returns base_value + chain_id + version + block_number + timestamp statically - #[aztec(public)] - #[aztec(view)] + #[public] + #[view] fn pub_get_value(base_value: Field) -> Field { let return_value = base_value + context.chain_id() @@ -30,7 +33,7 @@ contract StaticChild { } // Sets `current_value` to `new_value` - #[aztec(public)] + #[public] fn pub_set_value(new_value: Field) -> Field { storage.current_value.write(new_value); context.emit_unencrypted_log(new_value); @@ -38,33 +41,33 @@ contract StaticChild { } // View function that attempts to modify state. Should always fail regardless how it's called. - #[aztec(private)] - #[aztec(view)] + #[private] + #[view] fn private_illegal_set_value(new_value: Field, owner: AztecAddress) -> Field { - let owner_npk_m_hash = get_current_public_keys(&mut context, owner).npk_m.hash(); + let owner_npk_m_hash = get_public_keys(owner).npk_m.hash(); let mut note = ValueNote::new(new_value, owner_npk_m_hash); storage.a_private_value.insert(&mut note).emit(encode_and_encrypt_note(&mut context, context.msg_sender(), owner)); new_value } // Modify a note - #[aztec(private)] + #[private] fn private_set_value( new_value: Field, owner: AztecAddress, outgoing_viewer: AztecAddress ) -> Field { - let owner_npk_m_hash = get_current_public_keys(&mut context, owner).npk_m.hash(); + let owner_npk_m_hash = get_public_keys(owner).npk_m.hash(); let mut note = ValueNote::new(new_value, owner_npk_m_hash); storage.a_private_value.insert(&mut note).emit(encode_and_encrypt_note(&mut context, outgoing_viewer, owner)); new_value } // Retrieve note value statically - #[aztec(private)] - #[aztec(view)] + #[private] + #[view] fn private_get_value(amount: Field, owner: AztecAddress) -> Field { - let owner_npk_m_hash = get_current_public_keys(&mut context, owner).npk_m.hash(); + let owner_npk_m_hash = get_public_keys(owner).npk_m.hash(); let mut options = NoteGetterOptions::new(); options = options.select(ValueNote::properties().value, Comparator.EQ, amount).select( ValueNote::properties().npk_m_hash, @@ -76,7 +79,7 @@ contract StaticChild { } // Increments `current_value` by `new_value` - #[aztec(public)] + #[public] fn pub_inc_value(new_value: Field) -> Field { let old_value = storage.current_value.read(); storage.current_value.write(old_value + new_value); @@ -85,8 +88,8 @@ contract StaticChild { } // View function that attempts to modify state. Should always fail regardless how it's called. - #[aztec(public)] - #[aztec(view)] + #[public] + #[view] fn pub_illegal_inc_value(new_value: Field) -> Field { let old_value = storage.current_value.read(); storage.current_value.write(old_value + new_value); diff --git a/noir-projects/noir-contracts/contracts/static_parent_contract/src/main.nr b/noir-projects/noir-contracts/contracts/static_parent_contract/src/main.nr index 1b30deb1b8f..d363d073fb0 100644 --- a/noir-projects/noir-contracts/contracts/static_parent_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/static_parent_contract/src/main.nr @@ -1,12 +1,15 @@ // A contract used along with `StaticChild` contract to test static calls. +use dep::aztec::macros::aztec; + +#[aztec] contract StaticParent { use dep::aztec::prelude::{AztecAddress, FunctionSelector}; - use dep::aztec::context::gas::GasOpts; + use dep::aztec::{context::gas::GasOpts, macros::functions::{private, public, view}}; use dep::static_child_contract::StaticChild; // Public function to directly call another public function to the target_contract using the selector and value provided - #[aztec(public)] + #[public] fn public_call( target_contract: AztecAddress, target_selector: FunctionSelector, @@ -21,7 +24,7 @@ contract StaticParent { } // Private function to directly call another private function to the target_contract using the selector and args provided - #[aztec(private)] + #[private] fn private_call( target_contract: AztecAddress, target_selector: FunctionSelector, @@ -31,7 +34,7 @@ contract StaticParent { } // Just like function above but with 3 args. - #[aztec(private)] + #[private] fn private_call_3_args( target_contract: AztecAddress, target_selector: FunctionSelector, @@ -41,7 +44,7 @@ contract StaticParent { } // Private function to enqueue a call to a public function of another contract, passing the target arguments provided - #[aztec(private)] + #[private] fn enqueue_call( target_contract: AztecAddress, target_selector: FunctionSelector, @@ -50,7 +53,7 @@ contract StaticParent { context.call_public_function(target_contract, target_selector, args); } - #[aztec(private)] + #[private] fn private_static_call( target_contract: AztecAddress, target_selector: FunctionSelector, @@ -60,7 +63,7 @@ contract StaticParent { } // Private function to statically call another private function to the target_contract using the selector and values provided - #[aztec(private)] + #[private] fn private_static_call_3_args( target_contract: AztecAddress, target_selector: FunctionSelector, @@ -70,7 +73,7 @@ contract StaticParent { } // Same as above but using a specific function from the interface - #[aztec(private)] + #[private] fn private_get_value_from_child( target_contract: AztecAddress, value: Field, @@ -80,7 +83,7 @@ contract StaticParent { } // Private function to set a static context and verify correct propagation for nested private calls - #[aztec(private)] + #[private] fn private_nested_static_call( target_contract: AztecAddress, target_selector: FunctionSelector, @@ -90,7 +93,7 @@ contract StaticParent { } // Just like function above but with 3 args. - #[aztec(private)] + #[private] fn private_nested_static_call_3_args( target_contract: AztecAddress, target_selector: FunctionSelector, @@ -100,7 +103,7 @@ contract StaticParent { } // Public function to statically call another public function to the target_contract using the selector and value provided - #[aztec(public)] + #[public] fn public_static_call( target_contract: AztecAddress, target_selector: FunctionSelector, @@ -115,13 +118,13 @@ contract StaticParent { } // Same as above but using a specific function from the interface - #[aztec(public)] + #[public] fn public_get_value_from_child(target_contract: AztecAddress, value: Field) -> Field { StaticChild::at(target_contract).pub_get_value(value).view(&mut context) } // Public function to set a static context and verify correct propagation for nested public calls - #[aztec(public)] + #[public] fn public_nested_static_call( target_contract: AztecAddress, target_selector: FunctionSelector, @@ -132,7 +135,7 @@ contract StaticParent { } // Private function to enqueue a static call to a public function of another contract, passing the target arguments provided - #[aztec(private)] + #[private] fn enqueue_static_call_to_pub_function( target_contract: AztecAddress, target_selector: FunctionSelector, @@ -142,13 +145,13 @@ contract StaticParent { } // Same as above but using a specific function from the interface - #[aztec(private)] + #[private] fn enqueue_public_get_value_from_child(target_contract: AztecAddress, value: Field) { StaticChild::at(target_contract).pub_get_value(value).enqueue_view(&mut context); } // Private function to set a static context and verify correct propagation of nested enqueuing of public calls - #[aztec(private)] + #[private] fn enqueue_static_nested_call_to_pub_function( target_contract: AztecAddress, target_selector: FunctionSelector, diff --git a/noir-projects/noir-contracts/contracts/test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/test_contract/src/main.nr index bf982ad9048..f1298cc100d 100644 --- a/noir-projects/noir-contracts/contracts/test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/test_contract/src/main.nr @@ -1,6 +1,9 @@ mod test_note; // A contract used for testing a random hodgepodge of small features from simulator and end-to-end tests. +use dep::aztec::macros::aztec; + +#[aztec] contract Test { use dep::aztec::prelude::{ @@ -12,9 +15,8 @@ contract Test { use dep::aztec::protocol_types::{ abis::private_circuit_public_inputs::PrivateCircuitPublicInputs, - constants::{MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, CANONICAL_KEY_REGISTRY_ADDRESS}, - traits::{Serialize, ToField, FromField}, point::Point, scalar::Scalar, - storage::map::derive_storage_slot_in_map + constants::MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, traits::{Serialize, ToField, FromField}, + point::Point, scalar::Scalar, storage::map::derive_storage_slot_in_map }; use dep::aztec::encrypted_logs::header::EncryptedLogHeader; @@ -22,7 +24,7 @@ contract Test { use dep::aztec::encrypted_logs::outgoing_body::EncryptedLogOutgoingBody; use dep::aztec::note::constants::MAX_NOTES_PER_PAGE; - use dep::aztec::keys::getters::get_current_public_keys; + use dep::aztec::keys::getters::get_public_keys; use dep::aztec::state_vars::{shared_mutable::SharedMutablePrivateGetter}; @@ -34,15 +36,19 @@ contract Test { note_getter_options::NoteStatus }, deploy::deploy_contract as aztec_deploy_contract, - oracle::{encryption::aes128_encrypt, unsafe_rand::unsafe_rand}, utils::comparison::Comparator + oracle::{encryption::aes128_encrypt, unsafe_rand::unsafe_rand}, utils::comparison::Comparator, + macros::{storage::storage, events::event, functions::{private, public, internal}} }; use dep::token_portal_content_hash_lib::{get_mint_private_content_hash, get_mint_public_content_hash}; use dep::value_note::value_note::ValueNote; - use std::embedded_curve_ops::fixed_base_scalar_mul as derive_public_key; + // TODO investigate why the macros require EmbeddedCurvePoint and EmbeddedCurveScalar + use std::embedded_curve_ops::{EmbeddedCurveScalar, EmbeddedCurvePoint, fixed_base_scalar_mul as derive_public_key}; + use std::meta::derive; use crate::test_note::TestNote; - #[aztec(event)] + #[event] + #[derive(Serialize)] struct ExampleEvent { value0: Field, value1: Field, @@ -51,31 +57,31 @@ contract Test { value4: Field, } - #[aztec(storage)] - struct Storage { - example_constant: PrivateImmutable, - example_set: PrivateSet, + #[storage] + struct Storage { + example_constant: PrivateImmutable, + example_set: PrivateSet, } - #[aztec(private)] + #[private] fn get_ovsk_app(ovpk_m_hash: Field) -> Field { context.request_ovsk_app(ovpk_m_hash) } - #[aztec(private)] + #[private] fn get_master_incoming_viewing_public_key(address: AztecAddress) -> [Field; 2] { - let ivpk_m = get_current_public_keys(&mut context, address).ivpk_m; + let ivpk_m = get_public_keys(address).ivpk_m; [ivpk_m.inner.x, ivpk_m.inner.y] } // Get the address of this contract (taken from the input context) - #[aztec(private)] + #[private] fn get_this_address() -> AztecAddress { context.this_address() } - #[aztec(private)] + #[private] fn set_tx_max_block_number(max_block_number: u32, enqueue_public_call: bool) { context.set_tx_max_block_number(max_block_number); @@ -84,11 +90,11 @@ contract Test { } } - #[aztec(public)] - #[aztec(internal)] + #[public] + #[internal] fn dummy_public_call() {} - #[aztec(private)] + #[private] fn call_create_note( value: Field, owner: AztecAddress, @@ -99,13 +105,13 @@ contract Test { storage_slot != storage.example_constant.get_storage_slot(), "this storage slot is reserved for example_constant" ); - let owner_npk_m_hash = get_current_public_keys(&mut context, owner).npk_m.hash(); + let owner_npk_m_hash = get_public_keys(owner).npk_m.hash(); let mut note = ValueNote::new(value, owner_npk_m_hash); create_note(&mut context, storage_slot, &mut note).emit(encode_and_encrypt_note(&mut context, outgoing_viewer, owner)); } - #[aztec(private)] + #[private] fn call_get_notes(storage_slot: Field, active_or_nullified: bool) -> Field { assert( storage_slot != storage.example_constant.get_storage_slot(), "this storage slot is reserved for example_constant" @@ -121,7 +127,7 @@ contract Test { notes.get(0).value } - #[aztec(private)] + #[private] fn call_get_notes_many(storage_slot: Field, active_or_nullified: bool) -> [Field; 2] { assert( storage_slot != storage.example_constant.get_storage_slot(), "this storage slot is reserved for example_constant" @@ -167,7 +173,7 @@ contract Test { [notes.get(0).value, notes.get(1).value] } - #[aztec(private)] + #[private] fn call_destroy_note(storage_slot: Field) { assert( storage_slot != storage.example_constant.get_storage_slot(), "this storage slot is reserved for example_constant" @@ -182,7 +188,7 @@ contract Test { destroy_note_unsafe(&mut context, note, note_hash); } - #[aztec(private)] + #[private] fn test_code_gen( a_field: Field, a_bool: bool, @@ -209,7 +215,7 @@ contract Test { args.hash() } - #[aztec(private)] + #[private] fn test_setting_teardown() { context.set_public_teardown_function( context.this_address(), @@ -220,13 +226,13 @@ contract Test { ); } - #[aztec(private)] + #[private] fn test_setting_fee_payer() { context.set_as_fee_payer(); } // Purely exists for testing - #[aztec(public)] + #[public] fn create_l2_to_l1_message_public(amount: Field, secret_hash: Field, portal_address: EthAddress) { // Create a commitment to the amount let note = DummyNote::new(amount, secret_hash); @@ -235,40 +241,40 @@ contract Test { context.message_portal(portal_address, note.get_commitment()); } - #[aztec(public)] + #[public] fn create_l2_to_l1_message_arbitrary_recipient_public(content: Field, recipient: EthAddress) { // Public oracle call to emit new commitment. context.message_portal(recipient, content); } - #[aztec(private)] + #[private] fn create_l2_to_l1_message_arbitrary_recipient_private(content: Field, recipient: EthAddress) { // Public oracle call to emit new commitment. context.message_portal(recipient, content); } // Purely exists for testing - #[aztec(public)] + #[public] fn emit_nullifier_public(nullifier: Field) { context.push_nullifier(nullifier); } // Forcefully emits a nullifier (for testing purposes) - #[aztec(private)] + #[private] fn emit_nullifier(nullifier: Field) { context.push_nullifier(nullifier); } // For testing non-note encrypted logs - #[aztec(private)] + #[private] fn emit_array_as_encrypted_log( fields: [Field; 5], owner: AztecAddress, outgoing_viewer: AztecAddress, nest: bool ) { - let owner_ivpk_m = get_current_public_keys(&mut context, owner).ivpk_m; - let outgoing_viewer_ovpk_m = get_current_public_keys(&mut context, outgoing_viewer).ovpk_m; + let owner_ivpk_m = get_public_keys(owner).ivpk_m; + let outgoing_viewer_ovpk_m = get_public_keys(outgoing_viewer).ovpk_m; let event = ExampleEvent { value0: fields[0], value1: fields[1], value2: fields[2], value3: fields[3], value4: fields[4] }; @@ -303,13 +309,13 @@ contract Test { } } - #[aztec(private)] + #[private] fn emit_encrypted_logs_nested(value: Field, owner: AztecAddress, outgoing_viewer: AztecAddress) { let mut storage_slot = storage.example_constant.get_storage_slot() + 1; Test::at(context.this_address()).call_create_note(value, owner, outgoing_viewer, storage_slot).call(&mut context); storage_slot += 1; - let owner_npk_m_hash = get_current_public_keys(&mut context, owner).npk_m.hash(); + let owner_npk_m_hash = get_public_keys(owner).npk_m.hash(); let mut note = ValueNote::new(value + 1, owner_npk_m_hash); create_note(&mut context, storage_slot, &mut note).emit(encode_and_encrypt_note(&mut context, context.msg_sender(), owner)); @@ -318,14 +324,14 @@ contract Test { } // docs:start:is-time-equal - #[aztec(public)] + #[public] fn is_time_equal(time: u64) -> u64 { assert(context.timestamp() == time); time } // docs:end:is-time-equal - #[aztec(public)] + #[public] fn emit_unencrypted(value: Field) { // docs:start:emit_unencrypted context.emit_unencrypted_log(/*message=*/ value); @@ -334,7 +340,7 @@ contract Test { // docs:end:emit_unencrypted } - #[aztec(public)] + #[public] fn consume_mint_public_message( to: AztecAddress, amount: Field, @@ -347,7 +353,7 @@ contract Test { context.consume_l1_to_l2_message(content_hash, secret, portal_address, message_leaf_index); } - #[aztec(private)] + #[private] fn consume_mint_private_message( secret_hash_for_redeeming_minted_notes: Field, amount: Field, @@ -363,7 +369,7 @@ contract Test { ); } - #[aztec(public)] + #[public] fn consume_message_from_arbitrary_sender_public( content: Field, secret: Field, @@ -374,45 +380,41 @@ contract Test { context.consume_l1_to_l2_message(content, secret, sender, message_leaf_index); } - #[aztec(private)] - fn consume_message_from_arbitrary_sender_private( - content: Field, - secret: Field, - sender: EthAddress - ) { + #[private] + fn consume_message_from_arbitrary_sender_private(content: Field, secret: Field, sender: EthAddress) { // Consume message and emit nullifier context.consume_l1_to_l2_message(content, secret, sender); } - #[aztec(private)] + #[private] fn set_constant(value: Field) { let mut note = TestNote::new(value); storage.example_constant.initialize(&mut note).discard(); } - #[aztec(private)] + #[private] fn assert_private_global_vars(chain_id: Field, version: Field) { assert(context.chain_id() == chain_id, "Invalid chain id"); assert(context.version() == version, "Invalid version"); } - #[aztec(private)] + #[private] fn encrypt(input: [u8; 64], iv: [u8; 16], key: [u8; 16]) -> [u8; 80] { aes128_encrypt(input, iv, key) } - #[aztec(private)] + #[private] fn encrypt_with_padding(input: [u8; 65], iv: [u8; 16], key: [u8; 16]) -> [u8; 80] { aes128_encrypt(input, iv, key) } - #[aztec(private)] + #[private] fn compute_note_header_ciphertext(secret: Scalar, ivpk: IvpkM) -> [u8; 48] { EncryptedLogHeader::new(context.this_address()).compute_ciphertext(secret, ivpk) } // 64 bytes + 32 * #fields + 16 = 112 bytes - #[aztec(private)] + #[private] fn compute_incoming_log_body_ciphertext( secret: Scalar, ivpk: IvpkM, @@ -423,7 +425,7 @@ contract Test { EncryptedLogIncomingBody::from_note(note, storage_slot).compute_ciphertext(secret, ivpk).as_array() } - #[aztec(private)] + #[private] fn compute_outgoing_log_body_ciphertext( eph_sk: Scalar, recipient: AztecAddress, @@ -434,7 +436,7 @@ contract Test { EncryptedLogOutgoingBody::new(eph_sk, recipient, recipient_ivpk).compute_ciphertext(ovsk_app, eph_pk) } - #[aztec(public)] + #[public] fn assert_public_global_vars( chain_id: Field, version: Field, @@ -451,23 +453,23 @@ contract Test { assert(context.fee_per_l2_gas() == fee_per_l2_gas, "Invalid fee per l2 gas"); } - #[aztec(private)] + #[private] fn assert_header_private(header_hash: Field) { assert(context.historical_header.hash() == header_hash, "Invalid header hash"); } // TODO(4840): add AVM opcodes for getting header (members) - //#[aztec(public)] + //#[public] //fn assert_header_public(header_hash: Field) { // assert(context.historical_header.hash() == header_hash, "Invalid header hash"); //} - #[aztec(private)] + #[private] fn deploy_contract(target: AztecAddress) { aztec_deploy_contract(&mut context, target); } - #[aztec(private)] + #[private] // Adapted from TokenContract#redeem_shield but without an initcheck so it can be run in simulator/src/client/private_execution.test.ts fn consume_note_from_secret(secret: Field) { let notes_set = storage.example_set; @@ -484,7 +486,7 @@ contract Test { } // This function is used in the e2e_state_vars to test the SharedMutablePrivateGetter in isolation - #[aztec(private)] + #[private] fn test_shared_mutable_private_getter( contract_address_to_read: AztecAddress, storage_slot_of_shared_mutable: Field @@ -501,9 +503,9 @@ contract Test { ret.to_field() } - #[aztec(private)] + #[private] fn test_nullifier_key_freshness(address: AztecAddress, public_nullifying_key: Point) { - assert_eq(get_current_public_keys(&mut context, address).npk_m.inner, public_nullifying_key); + assert_eq(get_public_keys(address).npk_m.inner, public_nullifying_key); } // Purely exists for testing @@ -511,7 +513,7 @@ contract Test { kinda_seed * unsafe_rand() } - struct DummyNote { + pub struct DummyNote { amount: Field, secret_hash: Field } @@ -532,7 +534,7 @@ contract Test { } } - struct DeepStruct { + pub struct DeepStruct { a_field: Field, a_bool: bool, a_note: DummyNote, diff --git a/noir-projects/noir-contracts/contracts/test_contract/src/test_note.nr b/noir-projects/noir-contracts/contracts/test_contract/src/test_note.nr index a2bc9c31bff..8092554dad4 100644 --- a/noir-projects/noir-contracts/contracts/test_contract/src/test_note.nr +++ b/noir-projects/noir-contracts/contracts/test_contract/src/test_note.nr @@ -1,26 +1,25 @@ -use dep::aztec::{note::{note_header::NoteHeader, note_interface::NoteInterface}, context::PrivateContext}; - -global TEST_NOTE_LEN: Field = 1; -// TEST_NOTE_LENGTH * 32 + 32(storage_slot as bytes) + 32(note_type_id as bytes) -global TEST_NOTE_BYTES_LENGTH: Field = 1 * 32 + 64; +use dep::aztec::{ + note::{note_header::NoteHeader, note_interface::NullifiableNote}, context::PrivateContext, + macros::notes::note +}; // A note which stores a field and is expected to be passed around using the `addNote` function. -// WARNING: This Note is not private as it does not contain randomness and hence it can be easy to perform +// WARNING: This Note is not private as it does not contain randomness and hence it can be easy to perform // serialized_note attack on it. This note has been developed purely for testing purposes so that it can easily be // manually added to PXE. Do not use for real applications. -#[aztec(note)] -struct TestNote { +#[note] +pub struct TestNote { value: Field, } -impl NoteInterface for TestNote { +impl NullifiableNote for TestNote { - fn compute_nullifier(self, _context: &mut PrivateContext, _note_hash_for_nullify: Field) -> Field { - // This note is expected to be shared between users and for this reason can't be nullified using a secret. + fn compute_nullifier(_self: Self, _context: &mut PrivateContext, _note_hash_for_nullify: Field) -> Field { + // This note is expected to be shared between users and fstructor this reason can't be nullified using a secret. 0 } - fn compute_nullifier_without_context(self) -> Field { + unconstrained fn compute_nullifier_without_context(_self: Self) -> Field { // This note is expected to be shared between users and for this reason can't be nullified using a secret. 0 } diff --git a/noir-projects/noir-contracts/contracts/test_log_contract/src/main.nr b/noir-projects/noir-contracts/contracts/test_log_contract/src/main.nr index 55384dd4b57..d3c6e29746d 100644 --- a/noir-projects/noir-contracts/contracts/test_log_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/test_log_contract/src/main.nr @@ -1,33 +1,42 @@ +use dep::aztec::macros::aztec; + +#[aztec] contract TestLog { + use std::meta::derive; use dep::aztec::prelude::PrivateSet; - use dep::aztec::protocol_types::{scalar::Scalar, address::AztecAddress}; + use dep::aztec::protocol_types::{scalar::Scalar, address::AztecAddress, traits::Serialize}; use dep::aztec::keys::public_keys::IvpkM; use dep::value_note::value_note::ValueNote; use dep::aztec::encrypted_logs::incoming_body::EncryptedLogIncomingBody; use dep::aztec::encrypted_logs::encrypted_event_emission::encode_and_encrypt_event_with_randomness; use dep::aztec::unencrypted_logs::unencrypted_event_emission::encode_event; + use dep::aztec::macros::{storage::storage, events::event, functions::{private, public}}; + + use std::embedded_curve_ops::EmbeddedCurveScalar; - #[aztec(event)] + #[event] + #[derive(Serialize)] struct ExampleEvent0 { value0: Field, value1: Field, } - #[aztec(event)] + #[event] + #[derive(Serialize)] struct ExampleEvent1 { value2: AztecAddress, value3: u8, } - #[aztec(storage)] - struct Storage { - example_set: PrivateSet, + #[storage] + struct Storage { + example_set: PrivateSet, } // EXAMPLE_EVENT_0_BYTES_LEN + 16 global EXAMPLE_EVENT_0_CIPHERTEXT_BYTES_LEN = 144; - #[aztec(private)] + #[private] fn compute_incoming_log_body_ciphertext( secret: Scalar, ivpk: IvpkM, @@ -41,7 +50,7 @@ contract TestLog { ).compute_ciphertext(secret, ivpk).as_array() } - #[aztec(private)] + #[private] fn emit_encrypted_events(other: AztecAddress, randomness: [Field; 2], preimages: [Field; 4]) { let event0 = ExampleEvent0 { value0: preimages[0], value1: preimages[1] }; @@ -79,7 +88,7 @@ contract TestLog { ); } - #[aztec(public)] + #[public] fn emit_unencrypted_events(preimages: [Field; 4]) { let event0 = ExampleEvent0 { value0: preimages[0], value1: preimages[1] }; diff --git a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr index 5ef31e0529d..45cc7e76994 100644 --- a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr @@ -8,12 +8,17 @@ mod types; // Including a nonce in the message hash ensures that the message can only be used once. // The SharedMutables are used for access control related to minters and blacklist. +use dep::aztec::macros::aztec; + +#[aztec] contract TokenBlacklist { // Libs use dep::aztec::{ hash::compute_secret_hash, prelude::{AztecAddress, Map, NoteGetterOptions, PrivateSet, PublicMutable, SharedMutable}, - encrypted_logs::encrypted_note_emission::encode_and_encrypt_note, utils::comparison::Comparator + encrypted_logs::encrypted_note_emission::{encode_and_encrypt_note_unconstrained, encode_and_encrypt_note}, + utils::comparison::Comparator, + macros::{storage::storage, functions::{private, public, initializer, view, internal}} }; use dep::authwit::{auth::{assert_current_call_valid_authwit, assert_current_call_valid_authwit_public}}; @@ -21,44 +26,44 @@ contract TokenBlacklist { use crate::types::{transparent_note::TransparentNote, token_note::TokenNote, balances_map::BalancesMap, roles::UserFlags}; // Changing an address' roles has a certain block delay before it goes into effect. - global CHANGE_ROLES_DELAY_BLOCKS = 2; - - #[aztec(storage)] - struct Storage { - balances: BalancesMap, - total_supply: PublicMutable, - pending_shields: PrivateSet, - public_balances: Map>, - roles: Map>, + global CHANGE_ROLES_DELAY_BLOCKS: u32 = 2; + + #[storage] + struct Storage { + balances: BalancesMap, + total_supply: PublicMutable, + pending_shields: PrivateSet, + public_balances: Map, Context>, + roles: Map, Context>, } // docs:start:constructor - #[aztec(public)] - #[aztec(initializer)] + #[public] + #[initializer] fn constructor(admin: AztecAddress) { let admin_roles = UserFlags { is_admin: true, is_minter: false, is_blacklisted: false }; storage.roles.at(admin).schedule_value_change(admin_roles); } - #[aztec(public)] - #[aztec(view)] + #[public] + #[view] fn total_supply() -> pub Field { storage.total_supply.read().to_field() } - #[aztec(public)] - #[aztec(view)] + #[public] + #[view] fn balance_of_public(owner: AztecAddress) -> pub Field { storage.public_balances.at(owner).read().to_field() } - #[aztec(public)] - #[aztec(view)] + #[public] + #[view] fn get_roles(user: AztecAddress) -> UserFlags { storage.roles.at(user).get_current_value_in_public() } - #[aztec(public)] + #[public] fn update_roles(user: AztecAddress, roles: UserFlags) { let caller_roles = storage.roles.at(context.msg_sender()).get_current_value_in_public(); assert(caller_roles.is_admin, "caller is not admin"); @@ -66,7 +71,7 @@ contract TokenBlacklist { storage.roles.at(user).schedule_value_change(roles); } - #[aztec(public)] + #[public] fn mint_public(to: AztecAddress, amount: Field) { let to_roles = storage.roles.at(to).get_current_value_in_public(); assert(!to_roles.is_blacklisted, "Blacklisted: Recipient"); @@ -82,7 +87,7 @@ contract TokenBlacklist { storage.total_supply.write(supply); } - #[aztec(public)] + #[public] fn mint_private(amount: Field, secret_hash: Field) { let caller_roles = storage.roles.at(context.msg_sender()).get_current_value_in_public(); assert(caller_roles.is_minter, "caller is not minter"); @@ -95,7 +100,7 @@ contract TokenBlacklist { pending_shields.insert_from_public(&mut note); } - #[aztec(public)] + #[public] fn shield(from: AztecAddress, amount: Field, secret_hash: Field, nonce: Field) { let from_roles = storage.roles.at(from).get_current_value_in_public(); assert(!from_roles.is_blacklisted, "Blacklisted: Sender"); @@ -117,7 +122,7 @@ contract TokenBlacklist { pending_shields.insert_from_public(&mut note); } - #[aztec(public)] + #[public] fn transfer_public(from: AztecAddress, to: AztecAddress, amount: Field, nonce: Field) { let from_roles = storage.roles.at(from).get_current_value_in_public(); assert(!from_roles.is_blacklisted, "Blacklisted: Sender"); @@ -138,7 +143,7 @@ contract TokenBlacklist { storage.public_balances.at(to).write(to_balance); } - #[aztec(public)] + #[public] fn burn_public(from: AztecAddress, amount: Field, nonce: Field) { let from_roles = storage.roles.at(from).get_current_value_in_public(); assert(!from_roles.is_blacklisted, "Blacklisted: Sender"); @@ -157,7 +162,7 @@ contract TokenBlacklist { storage.total_supply.write(new_supply); } - #[aztec(private)] + #[private] fn redeem_shield(to: AztecAddress, amount: Field, secret: Field) { let to_roles = storage.roles.at(to).get_current_value_in_private(); assert(!to_roles.is_blacklisted, "Blacklisted: Recipient"); @@ -181,7 +186,7 @@ contract TokenBlacklist { storage.balances.add(to, U128::from_integer(amount)).emit(encode_and_encrypt_note(&mut context, caller, to)); } - #[aztec(private)] + #[private] fn unshield(from: AztecAddress, to: AztecAddress, amount: Field, nonce: Field) { let from_roles = storage.roles.at(from).get_current_value_in_private(); assert(!from_roles.is_blacklisted, "Blacklisted: Sender"); @@ -200,7 +205,7 @@ contract TokenBlacklist { } // docs:start:transfer_private - #[aztec(private)] + #[private] fn transfer(from: AztecAddress, to: AztecAddress, amount: Field, nonce: Field) { let from_roles = storage.roles.at(from).get_current_value_in_private(); assert(!from_roles.is_blacklisted, "Blacklisted: Sender"); @@ -214,11 +219,11 @@ contract TokenBlacklist { } let amount = U128::from_integer(amount); - storage.balances.sub(from, amount).emit(encode_and_encrypt_note(&mut context, from, from)); - storage.balances.add(to, amount).emit(encode_and_encrypt_note(&mut context, from, to)); + storage.balances.sub(from, amount).emit(encode_and_encrypt_note_unconstrained(&mut context, from, from)); + storage.balances.add(to, amount).emit(encode_and_encrypt_note_unconstrained(&mut context, from, to)); } - #[aztec(private)] + #[private] fn burn(from: AztecAddress, amount: Field, nonce: Field) { let from_roles = storage.roles.at(from).get_current_value_in_private(); assert(!from_roles.is_blacklisted, "Blacklisted: Sender"); @@ -236,15 +241,15 @@ contract TokenBlacklist { /// Internal /// - #[aztec(public)] - #[aztec(internal)] + #[public] + #[internal] fn _increase_public_balance(to: AztecAddress, amount: Field) { let new_balance = storage.public_balances.at(to).read().add(U128::from_integer(amount)); storage.public_balances.at(to).write(new_balance); } - #[aztec(public)] - #[aztec(internal)] + #[public] + #[internal] fn _reduce_total_supply(amount: Field) { // Only to be called from burn. let new_supply = storage.total_supply.read().sub(U128::from_integer(amount)); diff --git a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/types/balances_map.nr b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/types/balances_map.nr index d0aeac1b7cf..6fb9f33271b 100644 --- a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/types/balances_map.nr +++ b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/types/balances_map.nr @@ -1,12 +1,12 @@ -use dep::aztec::prelude::{AztecAddress, NoteGetterOptions, NoteViewerOptions, NoteInterface, PrivateSet, Map}; +use dep::aztec::prelude::{AztecAddress, NoteGetterOptions, NoteViewerOptions, NoteInterface, NullifiableNote, PrivateSet, Map}; use dep::aztec::{ context::{PrivateContext, UnconstrainedContext}, protocol_types::constants::MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, - note::{note_emission::OuterNoteEmission}, keys::getters::get_current_public_keys + note::{note_emission::OuterNoteEmission}, keys::getters::get_public_keys }; use crate::types::{token_note::OwnedNote}; -struct BalancesMap { +pub struct BalancesMap { map: Map, Context> } @@ -24,18 +24,18 @@ impl BalancesMap { } impl BalancesMap { - unconstrained pub fn balance_of( + unconstrained pub fn balance_of( self: Self, owner: AztecAddress - ) -> U128 where T: NoteInterface + OwnedNote { + ) -> U128 where T: NoteInterface + NullifiableNote + OwnedNote { self.balance_of_with_offset(owner, 0) } - unconstrained pub fn balance_of_with_offset( + unconstrained pub fn balance_of_with_offset( self: Self, owner: AztecAddress, offset: u32 - ) -> U128 where T: NoteInterface + OwnedNote { + ) -> U128 where T: NoteInterface + NullifiableNote + OwnedNote { let mut balance = U128::from_integer(0); // docs:start:view_notes let mut options = NoteViewerOptions::new(); @@ -55,18 +55,19 @@ impl BalancesMap { } impl BalancesMap { - pub fn add( + + pub fn add( self: Self, owner: AztecAddress, addend: U128 - ) -> OuterNoteEmission where T: NoteInterface + OwnedNote + Eq { + ) -> OuterNoteEmission where T: NoteInterface + NullifiableNote + OwnedNote + Eq { if addend == U128::from_integer(0) { OuterNoteEmission::new(Option::none()) } else { let context = self.map.context; // We fetch the nullifier public key hash from the registry / from our PXE - let owner_npk_m_hash = get_current_public_keys(context, owner).npk_m.hash(); + let owner_npk_m_hash = get_public_keys(owner).npk_m.hash(); let mut addend_note = T::new(addend, owner_npk_m_hash); // docs:start:insert @@ -75,11 +76,11 @@ impl BalancesMap { } } - pub fn sub( + pub fn sub( self: Self, owner: AztecAddress, subtrahend: U128 - ) -> OuterNoteEmission where T: NoteInterface + OwnedNote + Eq { + ) -> OuterNoteEmission where T: NoteInterface + NullifiableNote + OwnedNote + Eq { let options = NoteGetterOptions::with_filter(filter_notes_min_sum, subtrahend); let notes = self.map.at(owner).pop_notes(options); @@ -100,10 +101,10 @@ impl BalancesMap { } } -pub fn filter_notes_min_sum( +pub fn filter_notes_min_sum( notes: [Option; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL], min_sum: U128 -) -> [Option; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] where T: NoteInterface + OwnedNote { +) -> [Option; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] where T: NoteInterface + OwnedNote { let mut selected = [Option::none(); MAX_NOTE_HASH_READ_REQUESTS_PER_CALL]; let mut sum = U128::from_integer(0); for i in 0..notes.len() { diff --git a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/types/roles.nr b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/types/roles.nr index 687feee2cc4..565f709cb8d 100644 --- a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/types/roles.nr +++ b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/types/roles.nr @@ -4,7 +4,7 @@ global ADMIN_FLAG: u64 = 1; global MINTER_FLAG: u64 = 2; global BLACKLIST_FLAG: u64 = 4; -struct UserFlags { +pub struct UserFlags { is_admin: bool, is_minter: bool, is_blacklisted: bool, diff --git a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/types/token_note.nr b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/types/token_note.nr index 21d1a365d03..1dd1ed8aba7 100644 --- a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/types/token_note.nr +++ b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/types/token_note.nr @@ -1,8 +1,8 @@ use dep::aztec::{ - prelude::{NoteHeader, NoteInterface, PrivateContext}, + prelude::{NoteHeader, NullifiableNote, PrivateContext}, protocol_types::{constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator}, note::utils::compute_note_hash_for_nullify, oracle::unsafe_rand::unsafe_rand, - keys::getters::get_nsk_app + keys::getters::get_nsk_app, macros::notes::note }; trait OwnedNote { @@ -10,12 +10,8 @@ trait OwnedNote { fn get_amount(self) -> U128; } -global TOKEN_NOTE_LEN: Field = 3; // 3 plus a header. -// TOKEN_NOTE_LEN * 32 + 32(storage_slot as bytes) + 32(note_type_id as bytes) -global TOKEN_NOTE_BYTES_LEN: Field = 3 * 32 + 64; - -#[aztec(note)] -struct TokenNote { +#[note] +pub struct TokenNote { // The amount of tokens in the note amount: U128, // The nullifying public key hash is used with the nsk_app to ensure that the note can be privately spent. @@ -24,7 +20,7 @@ struct TokenNote { randomness: Field, } -impl NoteInterface for TokenNote { +impl NullifiableNote for TokenNote { // docs:start:nullifier fn compute_nullifier(self, context: &mut PrivateContext, note_hash_for_nullify: Field) -> Field { let secret = context.request_nsk_app(self.npk_m_hash); @@ -38,7 +34,7 @@ impl NoteInterface for TokenNote { } // docs:end:nullifier - fn compute_nullifier_without_context(self) -> Field { + unconstrained fn compute_nullifier_without_context(self) -> Field { let note_hash_for_nullify = compute_note_hash_for_nullify(self); let secret = get_nsk_app(self.npk_m_hash); poseidon2_hash_with_separator( diff --git a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/types/transparent_note.nr b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/types/transparent_note.nr index b3a5c8f3171..5b440c545b2 100644 --- a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/types/transparent_note.nr +++ b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/types/transparent_note.nr @@ -1,60 +1,44 @@ // docs:start:token_types_all use dep::aztec::{ note::{note_getter_options::PropertySelector, utils::compute_note_hash_for_nullify}, - prelude::{NoteHeader, NoteInterface, PrivateContext}, - protocol_types::{constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator} + prelude::{NoteHeader, NullifiableNote, PrivateContext}, + protocol_types::{constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator}, + macros::notes::note }; -global TRANSPARENT_NOTE_LEN: Field = 2; -// TRANSPARENT_NOTE_LEN * 32 + 32(storage_slot as bytes) + 32(note_type_id as bytes) -global TRANSPARENT_NOTE_BYTES_LEN: Field = 2 * 32 + 64; +use dep::std::mem::zeroed; // Transparent note represents a note that is created in the clear (public execution), but can only be spent by those // that know the preimage of the "secret_hash" (the secret). This is typically used when shielding a token balance. // Owner of the tokens provides a "secret_hash" as an argument to the public "shield" function and then the tokens // can be redeemed in private by presenting the preimage of the "secret_hash" (the secret). -#[aztec(note)] -struct TransparentNote { +#[note] +pub struct TransparentNote { amount: Field, secret_hash: Field, } -struct TransparentNoteProperties { - amount: PropertySelector, - secret_hash: PropertySelector, -} - -impl NoteInterface for TransparentNote { - - // Custom serialization to avoid disclosing the secret field - fn serialize_content(self) -> [Field; TRANSPARENT_NOTE_LEN] { - [self.amount, self.secret_hash] - } - - // Custom deserialization since we don't have access to the secret plaintext - fn deserialize_content(serialized_note: [Field; TRANSPARENT_NOTE_LEN]) -> Self { - TransparentNote { amount: serialized_note[0], secret_hash: serialized_note[1], header: NoteHeader::empty() } - } - - fn compute_nullifier(self, _context: &mut PrivateContext, _note_hash_for_nullify: Field) -> Field { - self.compute_nullifier_without_context() - } - +impl NullifiableNote for TransparentNote { // Computing a nullifier in a transparent note is not guarded by making secret a part of the nullifier preimage (as // is common in other cases) and instead is guarded by the functionality of "redeem_shield" function. There we do // the following: // 1) We pass the secret as an argument to the function and use it to compute a secret hash, // 2) we fetch a note via the "get_notes" oracle which accepts the secret hash as an argument, // 3) the "get_notes" oracle constrains that the secret hash in the returned note matches the one computed in - // circuit. + // circuit. // This achieves that the note can only be spent by the party that knows the secret. - fn compute_nullifier_without_context(self) -> Field { + fn compute_nullifier(self, _context: &mut PrivateContext, _note_hash_for_nullify: Field) -> Field { let note_hash_for_nullify = compute_note_hash_for_nullify(self); poseidon2_hash_with_separator( [note_hash_for_nullify], GENERATOR_INDEX__NOTE_NULLIFIER as Field ) } + + unconstrained fn compute_nullifier_without_context(self) -> Field { + // compute_nullifier ignores both of its parameters so we can reuse it here + self.compute_nullifier(zeroed(), zeroed()) + } } impl TransparentNote { @@ -62,15 +46,6 @@ impl TransparentNote { pub fn new(amount: Field, secret_hash: Field) -> Self { TransparentNote { amount, secret_hash, header: NoteHeader::empty() } } - - // CUSTOM FUNCTIONS FOR THIS NOTE TYPE - // Custom serialization forces us to manually create the metadata struct and its getter - pub fn properties() -> TransparentNoteProperties { - TransparentNoteProperties { - amount: PropertySelector { index: 0, offset: 0, length: 32 }, - secret_hash: PropertySelector { index: 1, offset: 0, length: 32 } - } - } } impl Eq for TransparentNote { diff --git a/noir-projects/noir-contracts/contracts/token_bridge_contract/src/main.nr b/noir-projects/noir-contracts/contracts/token_bridge_contract/src/main.nr index 06de11e96cb..76c04213dc3 100644 --- a/noir-projects/noir-contracts/contracts/token_bridge_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/token_bridge_contract/src/main.nr @@ -5,44 +5,49 @@ // And corresponds to a Token on L2 that uses the `AuthWit` accounts pattern. // Bridge has to be set as a minter on the token before it can be used +use dep::aztec::macros::aztec; + +#[aztec] contract TokenBridge { - use dep::aztec::prelude::{FunctionSelector, AztecAddress, EthAddress, PublicMutable, SharedImmutable}; + use dep::aztec::prelude::{AztecAddress, EthAddress, PublicMutable, SharedImmutable}; use dep::token_portal_content_hash_lib::{get_mint_public_content_hash, get_mint_private_content_hash, get_withdraw_content_hash}; use dep::token::Token; + + use dep::aztec::macros::{storage::storage, functions::{public, initializer, private, internal}}; // docs:end:token_bridge_imports // docs:start:token_bridge_storage_and_constructor // Storage structure, containing all storage, and specifying what slots they use. - #[aztec(storage)] - struct Storage { - token: PublicMutable, - portal_address: SharedImmutable, + #[storage] + struct Storage { + token: PublicMutable, + portal_address: SharedImmutable, } // Constructs the contract. - #[aztec(public)] - #[aztec(initializer)] + #[public] + #[initializer] fn constructor(token: AztecAddress, portal_address: EthAddress) { storage.token.write(token); storage.portal_address.initialize(portal_address); } // docs:end:token_bridge_storage_and_constructor - #[aztec(private)] + #[private] fn get_portal_address() -> EthAddress { storage.portal_address.read_private() } - #[aztec(public)] + #[public] fn get_portal_address_public() -> EthAddress { storage.portal_address.read_public() } // docs:start:claim_public // Consumes a L1->L2 message and calls the token contract to mint the appropriate amount publicly - #[aztec(public)] + #[public] fn claim_public(to: AztecAddress, amount: Field, secret: Field, message_leaf_index: Field) { let content_hash = get_mint_public_content_hash(to, amount); @@ -62,7 +67,7 @@ contract TokenBridge { // docs:start:exit_to_l1_public // Burns the appropriate amount of tokens and creates a L2 to L1 withdraw message publicly // Requires `msg.sender` to give approval to the bridge to burn tokens on their behalf using witness signatures - #[aztec(public)] + #[public] fn exit_to_l1_public( recipient: EthAddress, // ethereum address to withdraw to amount: Field, @@ -80,7 +85,8 @@ contract TokenBridge { // docs:start:claim_private // Consumes a L1->L2 message and calls the token contract to mint the appropriate amount in private assets // User needs to call token.redeem_shield() to get the private assets - #[aztec(private)] + // TODO(#8416): Consider creating a truly private claim flow. + #[private] fn claim_private( secret_hash_for_redeeming_minted_notes: Field, // secret hash used to redeem minted notes at a later time. This enables anyone to call this function and mint tokens to a user on their behalf amount: Field, @@ -105,7 +111,7 @@ contract TokenBridge { // docs:start:exit_to_l1_private // Burns the appropriate amount of tokens and creates a L2 to L1 withdraw message privately // Requires `msg.sender` (caller of the method) to give approval to the bridge to burn tokens on their behalf using witness signatures - #[aztec(private)] + #[private] fn exit_to_l1_private( token: AztecAddress, recipient: EthAddress, // ethereum address to withdraw to @@ -128,8 +134,8 @@ contract TokenBridge { /// docs:end:exit_to_l1_private // docs:start:get_token - #[aztec(public)] - #[aztec(view)] + #[public] + #[view] fn get_token() -> AztecAddress { storage.token.read() } @@ -139,16 +145,16 @@ contract TokenBridge { // This is a public call as we need to read from public storage. // Also, note that user hashes their secret in private and only sends the hash in public // meaning only user can `redeem_shield` at a later time with their secret. - #[aztec(public)] - #[aztec(internal)] + #[public] + #[internal] fn _call_mint_on_token(amount: Field, secret_hash: Field) { Token::at(storage.token.read()).mint_private(amount, secret_hash).call(&mut context); } // docs:end:call_mint_on_token // docs:start:assert_token_is_same - #[aztec(public)] - #[aztec(internal)] + #[public] + #[internal] fn _assert_token_is_same(token: AztecAddress) { assert(storage.token.read().eq(token), "Token address is not the same as seen in storage"); } diff --git a/noir-projects/noir-contracts/contracts/token_contract/src/main.nr b/noir-projects/noir-contracts/contracts/token_contract/src/main.nr index e31b47382cc..a5ec69962f3 100644 --- a/noir-projects/noir-contracts/contracts/token_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/token_contract/src/main.nr @@ -3,51 +3,52 @@ mod types; mod test; +use dep::aztec::macros::aztec; + // Minimal token implementation that supports `AuthWit` accounts. // The auth message follows a similar pattern to the cross-chain message and includes a designated caller. // The designated caller is ALWAYS used here, and not based on a flag as cross-chain. // message hash = H([caller, contract, selector, ...args]) // To be read as `caller` calls function at `contract` defined by `selector` with `args` // Including a nonce in the message hash ensures that the message can only be used once. - +#[aztec] contract Token { // Libs + use std::meta::derive; use dep::compressed_string::FieldCompressedString; use dep::aztec::{ context::{PrivateContext, PrivateCallInterface}, hash::compute_secret_hash, - prelude::{ - NoteGetterOptions, Map, PublicMutable, SharedImmutable, PrivateSet, AztecAddress, - FunctionSelector, NoteHeader - }, + prelude::{NoteGetterOptions, Map, PublicMutable, SharedImmutable, PrivateSet, AztecAddress, FunctionSelector}, encrypted_logs::{ encrypted_note_emission::{encode_and_encrypt_note_with_keys, encode_and_encrypt_note_with_keys_unconstrained}, encrypted_event_emission::encode_and_encrypt_event_with_keys_unconstrained }, - keys::getters::get_current_public_keys, utils::comparison::Comparator + keys::getters::get_public_keys, + macros::{storage::storage, events::event, functions::{initializer, private, view, public}}, + utils::comparison::Comparator, protocol_types::{point::Point, traits::Serialize} }; // docs:start:import_authwit use dep::authwit::auth::{assert_current_call_valid_authwit, assert_current_call_valid_authwit_public, compute_authwit_nullifier}; // docs:end:import_authwit - use crate::types::{ - transparent_note::TransparentNote, token_note::{TokenNote, TokenNoteHidingPoint}, - balance_set::BalanceSet - }; + use crate::types::{transparent_note::TransparentNote, token_note::TokenNote, balance_set::BalanceSet}; + // docs:end::imports // In the first transfer iteration we are computing a lot of additional information (validating inputs, retrieving // keys, etc.), so the gate count is already relatively high. We therefore only read a few notes to keep the happy // case with few constraints. - global INITIAL_TRANSFER_CALL_MAX_NOTES = 2; + global INITIAL_TRANSFER_CALL_MAX_NOTES: u32 = 2; // All the recursive call does is nullify notes, meaning the gate count is low, but it is all constant overhead. We // therefore read more notes than in the base case to increase the efficiency of the overhead, since this results in // an overall small circuit regardless. - global RECURSIVE_TRANSFER_CALL_MAX_NOTES = 8; + global RECURSIVE_TRANSFER_CALL_MAX_NOTES: u32 = 8; - #[aztec(event)] + #[event] + #[derive(Serialize)] struct Transfer { from: AztecAddress, to: AztecAddress, @@ -55,33 +56,33 @@ contract Token { } // docs:start:storage_struct - #[aztec(storage)] - struct Storage { + #[storage] + struct Storage { // docs:start:storage_admin - admin: PublicMutable, + admin: PublicMutable, // docs:end:storage_admin // docs:start:storage_minters - minters: Map>, + minters: Map, Context>, // docs:end:storage_minters // docs:start:storage_balances - balances: Map>, + balances: Map, Context>, // docs:end:storage_balances - total_supply: PublicMutable, + total_supply: PublicMutable, // docs:start:storage_pending_shields - pending_shields: PrivateSet, + pending_shields: PrivateSet, // docs:end:storage_pending_shields - public_balances: Map>, - symbol: SharedImmutable, - name: SharedImmutable, + public_balances: Map, Context>, + symbol: SharedImmutable, + name: SharedImmutable, // docs:start:storage_decimals - decimals: SharedImmutable, + decimals: SharedImmutable, // docs:end:storage_decimals } // docs:end:storage_struct // docs:start:constructor - #[aztec(public)] - #[aztec(initializer)] + #[public] + #[initializer] fn constructor(admin: AztecAddress, name: str<31>, symbol: str<31>, decimals: u8) { assert(!admin.is_zero(), "invalid admin"); storage.admin.write(admin); @@ -93,9 +94,8 @@ contract Token { // docs:end:initialize_decimals } // docs:end:constructor - // docs:start:set_admin - #[aztec(public)] + #[public] fn set_admin(new_admin: AztecAddress) { assert(storage.admin.read().eq(context.msg_sender()), "caller is not admin"); // docs:start:write_admin @@ -103,81 +103,71 @@ contract Token { // docs:end:write_admin } // docs:end:set_admin - - #[aztec(public)] - #[aztec(view)] - fn public_get_name() -> pub FieldCompressedString { + #[public] + #[view] + fn public_get_name() -> FieldCompressedString { storage.name.read_public() } - #[aztec(private)] - #[aztec(view)] - fn private_get_name() -> pub FieldCompressedString { + #[private] + #[view] + fn private_get_name() -> FieldCompressedString { storage.name.read_private() } - - #[aztec(public)] - #[aztec(view)] + #[public] + #[view] fn public_get_symbol() -> pub FieldCompressedString { storage.symbol.read_public() } - - #[aztec(private)] - #[aztec(view)] + #[private] + #[view] fn private_get_symbol() -> pub FieldCompressedString { storage.symbol.read_private() } - - #[aztec(public)] - #[aztec(view)] + #[public] + #[view] fn public_get_decimals() -> pub u8 { // docs:start:read_decimals_public storage.decimals.read_public() // docs:end:read_decimals_public } - - #[aztec(private)] - #[aztec(view)] + #[private] + #[view] fn private_get_decimals() -> pub u8 { // docs:start:read_decimals_private storage.decimals.read_private() // docs:end:read_decimals_private } - // docs:start:admin - #[aztec(public)] - #[aztec(view)] - fn admin() -> Field { + #[public] + #[view] + fn get_admin() -> Field { storage.admin.read().to_field() } // docs:end:admin - // docs:start:is_minter - #[aztec(public)] - #[aztec(view)] + #[public] + #[view] fn is_minter(minter: AztecAddress) -> bool { storage.minters.at(minter).read() } // docs:end:is_minter - // docs:start:total_supply - #[aztec(public)] - #[aztec(view)] + #[public] + #[view] fn total_supply() -> Field { storage.total_supply.read().to_integer() } // docs:end:total_supply - // docs:start:balance_of_public - #[aztec(public)] - #[aztec(view)] + #[public] + #[view] fn balance_of_public(owner: AztecAddress) -> Field { storage.public_balances.at(owner).read().to_integer() } // docs:end:balance_of_public - // docs:start:set_minter - #[aztec(public)] + #[public] fn set_minter(minter: AztecAddress, approve: bool) { // docs:start:read_admin assert(storage.admin.read().eq(context.msg_sender()), "caller is not admin"); @@ -187,9 +177,8 @@ contract Token { // docs:end:write_minter } // docs:end:set_minter - // docs:start:mint_public - #[aztec(public)] + #[public] fn mint_public(to: AztecAddress, amount: Field) { // docs:start:read_minter assert(storage.minters.at(context.msg_sender()).read(), "caller is not minter"); @@ -197,49 +186,42 @@ contract Token { let amount = U128::from_integer(amount); let new_balance = storage.public_balances.at(to).read().add(amount); let supply = storage.total_supply.read().add(amount); - storage.public_balances.at(to).write(new_balance); storage.total_supply.write(supply); } // docs:end:mint_public - // docs:start:mint_private - #[aztec(public)] + #[public] fn mint_private(amount: Field, secret_hash: Field) { assert(storage.minters.at(context.msg_sender()).read(), "caller is not minter"); let pending_shields = storage.pending_shields; let mut note = TransparentNote::new(amount, secret_hash); let supply = storage.total_supply.read().add(U128::from_integer(amount)); - storage.total_supply.write(supply); // docs:start:insert_from_public pending_shields.insert_from_public(&mut note); // docs:end:insert_from_public } // docs:end:mint_private - // TODO: Nuke this - test functions do not belong to token contract! - #[aztec(private)] + #[private] fn privately_mint_private_note(amount: Field) { let caller = context.msg_sender(); - let caller_keys = get_current_public_keys(&mut context, caller); + let caller_keys = get_public_keys(caller); storage.balances.at(caller).add(caller_keys.npk_m, U128::from_integer(amount)).emit( encode_and_encrypt_note_with_keys(&mut context, caller_keys.ovpk_m, caller_keys.ivpk_m, caller) ); - Token::at(context.this_address()).assert_minter_and_mint(context.msg_sender(), amount).enqueue(&mut context); } - - #[aztec(public)] - #[aztec(internal)] + #[public] + #[internal] fn assert_minter_and_mint(minter: AztecAddress, amount: Field) { assert(storage.minters.at(minter).read(), "caller is not minter"); let supply = storage.total_supply.read() + U128::from_integer(amount); storage.total_supply.write(supply); } - // docs:start:shield - #[aztec(public)] + #[public] fn shield(from: AztecAddress, amount: Field, secret_hash: Field, nonce: Field) { if (!from.eq(context.msg_sender())) { // The redeem is only spendable once, so we need to ensure that you cannot insert multiple shields from the same message. @@ -247,38 +229,31 @@ contract Token { } else { assert(nonce == 0, "invalid nonce"); } - let amount = U128::from_integer(amount); let from_balance = storage.public_balances.at(from).read().sub(amount); - let pending_shields = storage.pending_shields; let mut note = TransparentNote::new(amount.to_field(), secret_hash); - storage.public_balances.at(from).write(from_balance); pending_shields.insert_from_public(&mut note); } // docs:end:shield - // docs:start:transfer_public - #[aztec(public)] + #[public] fn transfer_public(from: AztecAddress, to: AztecAddress, amount: Field, nonce: Field) { if (!from.eq(context.msg_sender())) { assert_current_call_valid_authwit_public(&mut context, from); } else { assert(nonce == 0, "invalid nonce"); } - let amount = U128::from_integer(amount); let from_balance = storage.public_balances.at(from).read().sub(amount); storage.public_balances.at(from).write(from_balance); - let to_balance = storage.public_balances.at(to).read().add(amount); storage.public_balances.at(to).write(to_balance); } // docs:end:transfer_public - // docs:start:burn_public - #[aztec(public)] + #[public] fn burn_public(from: AztecAddress, amount: Field, nonce: Field) { // docs:start:assert_current_call_valid_authwit_public if (!from.eq(context.msg_sender())) { @@ -287,21 +262,17 @@ contract Token { assert(nonce == 0, "invalid nonce"); } // docs:end:assert_current_call_valid_authwit_public - let amount = U128::from_integer(amount); let from_balance = storage.public_balances.at(from).read().sub(amount); storage.public_balances.at(from).write(from_balance); - let new_supply = storage.total_supply.read().sub(amount); storage.total_supply.write(new_supply); } // docs:end:burn_public - // docs:start:redeem_shield - #[aztec(private)] + #[private] fn redeem_shield(to: AztecAddress, amount: Field, secret: Field) { let secret_hash = compute_secret_hash(secret); - // Pop 1 note (set_limit(1)) which has an amount stored in a field with index 0 (select(0, amount)) and // a secret_hash stored in a field with index 1 (select(1, secret_hash)). let mut options = NoteGetterOptions::new(); @@ -310,22 +281,19 @@ contract Token { Comparator.EQ, secret_hash ).set_limit(1); - let notes = storage.pending_shields.pop_notes(options); assert(notes.len() == 1, "note not popped"); - // Add the token note to user's balances set // Note: Using context.msg_sender() as a sender below makes this incompatible with escrows because we send // outgoing logs to that address and to send outgoing logs you need to get a hold of ovsk_m. let from = context.msg_sender(); - let from_keys = get_current_public_keys(&mut context, from); - let to_keys = get_current_public_keys(&mut context, to); + let from_keys = get_public_keys(from); + let to_keys = get_public_keys(to); storage.balances.at(to).add(to_keys.npk_m, U128::from_integer(amount)).emit(encode_and_encrypt_note_with_keys(&mut context, from_keys.ovpk_m, to_keys.ivpk_m, to)); } // docs:end:redeem_shield - // docs:start:unshield - #[aztec(private)] + #[private] fn unshield(from: AztecAddress, to: AztecAddress, amount: Field, nonce: Field) { if (!from.eq(context.msg_sender())) { assert_current_call_valid_authwit(&mut context, from); @@ -333,23 +301,20 @@ contract Token { assert(nonce == 0, "invalid nonce"); } - let from_keys = get_current_public_keys(&mut context, from); + let from_keys = get_public_keys(from); storage.balances.at(from).sub(from_keys.npk_m, U128::from_integer(amount)).emit(encode_and_encrypt_note_with_keys(&mut context, from_keys.ovpk_m, from_keys.ivpk_m, from)); - Token::at(context.this_address())._increase_public_balance(to, amount).enqueue(&mut context); } // docs:end:unshield - // docs:start:transfer - #[aztec(private)] + #[private] fn transfer(to: AztecAddress, amount: Field) { let from = context.msg_sender(); - let from_keys = get_current_public_keys(&mut context, from); - let to_keys = get_current_public_keys(&mut context, to); + let from_keys = get_public_keys(from); + let to_keys = get_public_keys(to); let amount = U128::from_integer(amount); - // We reduce `from`'s balance by amount by recursively removing notes over potentially multiple calls. This // method keeps the gate count for each individual call low - reading too many notes at once could result in // circuits in which proving is not feasible. @@ -363,15 +328,12 @@ contract Token { amount, INITIAL_TRANSFER_CALL_MAX_NOTES ); - storage.balances.at(from).add(from_keys.npk_m, change).emit( encode_and_encrypt_note_with_keys_unconstrained(&mut context, from_keys.ovpk_m, from_keys.ivpk_m, from) ); - storage.balances.at(to).add(to_keys.npk_m, amount).emit( encode_and_encrypt_note_with_keys_unconstrained(&mut context, from_keys.ovpk_m, to_keys.ivpk_m, to) ); - // We don't constrain encryption of the note log in `transfer` (unlike in `transfer_from`) because the transfer // function is only designed to be used in situations where the event is not strictly necessary (e.g. payment to // another person where the payment is considered to be successful when the other party successfully decrypts a @@ -381,7 +343,6 @@ contract Token { ); } // docs:end:transfer - #[contract_library_method] fn subtract_balance( context: &mut PrivateContext, @@ -391,13 +352,11 @@ contract Token { max_notes: u32 ) -> U128 { let subtracted = storage.balances.at(account).try_sub(amount, max_notes); - // Failing to subtract any amount means that the owner was unable to produce more notes that could be nullified. // We could in some cases fail early inside try_sub if we detected that fewer notes than the maximum were // returned and we were still unable to reach the target amount, but that'd make the code more complicated, and // optimizing for the failure scenario is not as important. assert(subtracted > U128::from_integer(0), "Balance too low"); - if subtracted >= amount { // We have achieved our goal of nullifying notes that add up to more than amount, so we return the change subtracted - amount @@ -408,7 +367,6 @@ contract Token { compute_recurse_subtract_balance_call(*context, account, remaining).call(context) } } - // TODO(#7729): apply no_predicates to the contract interface method directly instead of having to use a wrapper // like we do here. #[no_predicates] @@ -420,11 +378,10 @@ contract Token { ) -> PrivateCallInterface<25, U128, (AztecAddress, Field)> { Token::at(context.this_address())._recurse_subtract_balance(account, remaining.to_field()) } - // TODO(#7728): even though the amount should be a U128, we can't have that type in a contract interface due to // serialization issues. - #[aztec(internal)] - #[aztec(private)] + #[internal] + #[private] fn _recurse_subtract_balance(account: AztecAddress, amount: Field) -> U128 { subtract_balance( &mut context, @@ -434,22 +391,20 @@ contract Token { RECURSIVE_TRANSFER_CALL_MAX_NOTES ) } - /** * Cancel a private authentication witness. * @param inner_hash The inner hash of the authwit to cancel. */ // docs:start:cancel_authwit - #[aztec(private)] + #[private] fn cancel_authwit(inner_hash: Field) { let on_behalf_of = context.msg_sender(); let nullifier = compute_authwit_nullifier(on_behalf_of, inner_hash); context.push_nullifier(nullifier); } // docs:end:cancel_authwit - // docs:start:transfer_from - #[aztec(private)] + #[private] fn transfer_from(from: AztecAddress, to: AztecAddress, amount: Field, nonce: Field) { // docs:start:assert_current_call_valid_authwit if (!from.eq(context.msg_sender())) { @@ -459,8 +414,8 @@ contract Token { } // docs:end:assert_current_call_valid_authwit - let from_keys = get_current_public_keys(&mut context, from); - let to_keys = get_current_public_keys(&mut context, to); + let from_keys = get_public_keys(from); + let to_keys = get_public_keys(to); let amount = U128::from_integer(amount); // docs:start:increase_private_balance @@ -471,23 +426,19 @@ contract Token { storage.balances.at(to).add(to_keys.npk_m, amount).emit(encode_and_encrypt_note_with_keys(&mut context, from_keys.ovpk_m, to_keys.ivpk_m, to)); } // docs:end:transfer_from - // docs:start:burn - #[aztec(private)] + #[private] fn burn(from: AztecAddress, amount: Field, nonce: Field) { if (!from.eq(context.msg_sender())) { assert_current_call_valid_authwit(&mut context, from); } else { assert(nonce == 0, "invalid nonce"); } - - let from_keys = get_current_public_keys(&mut context, from); + let from_keys = get_public_keys(from); storage.balances.at(from).sub(from_keys.npk_m, U128::from_integer(amount)).emit(encode_and_encrypt_note_with_keys(&mut context, from_keys.ovpk_m, from_keys.ivpk_m, from)); - Token::at(context.this_address())._reduce_total_supply(amount).enqueue(&mut context); } // docs:end:burn - /// We need to use different randomness for the user and for the fee payer notes because if the randomness values /// were the same we could fingerprint the user by doing the following: /// 1) randomness_influence = fee_payer_point - G_npk * fee_payer_npk = @@ -502,13 +453,13 @@ contract Token { /// a limited set of fee paying contracts will be used and they will be known, searching for fingerprints /// by trying different fee payers is a feasible attack. /// - /// Note 1: fee_payer_npk is publicly available in a key registry contract under a fee_payer address. So if we have - /// a known set of fee payer contract addresses getting fee_payer_npk and fee_payer_slot is trivial (slot - /// is derived in a `Map<...>` as a hash of balances map slot and a fee payer address). + /// Note 1: fee_payer_npk is part of the fee_payer address preimage derivation, and is assumed to be known. So + // if we have a known set of fee payer contract addresses getting fee_payer_npk and fee_payer_slot is + // trivial (slot is derived in a `Map<...>` as a hash of balances map slot and a fee payer address). /// Note 2: fee_payer_point and user_point above are public information because they are passed as args to /// the public `complete_refund(...)` function. // docs:start:setup_refund - #[aztec(private)] + #[private] fn setup_refund( fee_payer: AztecAddress, // Address of the entity which will receive the fee note. user: AztecAddress, // A user for which we are setting up the fee refund. @@ -519,12 +470,10 @@ contract Token { // 1. This function is called by fee paying contract (fee_payer) when setting up a refund so we need to support // the authwit flow here and check that the user really permitted fee_payer to set up a refund on their behalf. assert_current_call_valid_authwit(&mut context, user); - // 2. Get all the relevant keys - let fee_payer_npk_m_hash = get_current_public_keys(&mut context, fee_payer).npk_m.hash(); - let user_keys = get_current_public_keys(&mut context, user); + let fee_payer_npk_m_hash = get_public_keys(fee_payer).npk_m.hash(); + let user_keys = get_public_keys(user); let user_npk_m_hash = user_keys.npk_m.hash(); - // 3. Deduct the funded amount from the user's balance - this is a maximum fee a user is willing to pay // (called fee limit in aztec spec). The difference between fee limit and the actual tx fee will be refunded // to the user in the `complete_refund(...)` function. @@ -538,42 +487,23 @@ contract Token { storage.balances.at(user).add(user_keys.npk_m, change).emit( encode_and_encrypt_note_with_keys_unconstrained(&mut context, user_keys.ovpk_m, user_keys.ivpk_m, user) ); - - // 4. We create the partial notes for the fee payer and the user. - // --> Called "partial" because they don't have the amount set yet (that will be done in `complete_refund(...)`). - let fee_payer_partial_note = TokenNote { - header: NoteHeader { - contract_address: AztecAddress::zero(), - nonce: 0, - storage_slot: storage.balances.at(fee_payer).set.storage_slot, - note_hash_counter: 0 - }, - amount: U128::zero(), - npk_m_hash: fee_payer_npk_m_hash, - randomness: fee_payer_randomness - }; - let user_partial_note = TokenNote { - header: NoteHeader { - contract_address: AztecAddress::zero(), - nonce: 0, - storage_slot: storage.balances.at(user).set.storage_slot, - note_hash_counter: 0 - }, - amount: U128::zero(), - npk_m_hash: user_npk_m_hash, - randomness: user_randomness - }; - - // 5. Now we get the note hiding points. - let mut fee_payer_point = fee_payer_partial_note.to_note_hiding_point(); - let mut user_point = user_partial_note.to_note_hiding_point(); - - // 6. Set the public teardown function to `complete_refund(...)`. Public teardown is the only time when a public + // 4. Now we get the note hiding points. + let mut fee_payer_point = TokenNote::hiding_point().new( + fee_payer_npk_m_hash, + fee_payer_randomness, + storage.balances.at(fee_payer).set.storage_slot + ); + let mut user_point = TokenNote::hiding_point().new( + user_npk_m_hash, + user_randomness, + storage.balances.at(user).set.storage_slot + ); + // 5. Set the public teardown function to `complete_refund(...)`. Public teardown is the only time when a public // function has access to the final transaction fee, which is needed to compute the actual refund amount. context.set_public_teardown_function( context.this_address(), comptime { - FunctionSelector::from_signature("complete_refund(((Field,Field,bool)),((Field,Field,bool)),Field)") + FunctionSelector::from_signature("complete_refund((Field,Field,bool),(Field,Field,bool),Field)") }, [ fee_payer_point.inner.x, fee_payer_point.inner.y, fee_payer_point.inner.is_infinite as Field, user_point.inner.x, user_point.inner.y, user_point.inner.is_infinite as Field, funded_amount @@ -581,73 +511,50 @@ contract Token { ); } // docs:end:setup_refund - // TODO(#7728): even though the funded_amount should be a U128, we can't have that type in a contract interface due // to serialization issues. // docs:start:complete_refund - #[aztec(public)] - #[aztec(internal)] - fn complete_refund( - // TODO(#7771): the following makes macros crash --> try getting it work once we migrate to metaprogramming - // mut fee_payer_point: TokenNoteHidingPoint, - // mut user_point: TokenNoteHidingPoint, - fee_payer_point_immutable: TokenNoteHidingPoint, - user_point_immutable: TokenNoteHidingPoint, - funded_amount: Field - ) { - // TODO(#7771): nuke the following 2 lines once we have mutable args - let mut fee_payer_point = fee_payer_point_immutable; - let mut user_point = user_point_immutable; - + #[public] + #[internal] + fn complete_refund(fee_payer_point: Point, user_point: Point, funded_amount: Field) { + let mut fee_payer_hiding_point = TokenNote::hiding_point().from_point(fee_payer_point); + let mut user_hiding_point = TokenNote::hiding_point().from_point(user_point); // TODO(#7728): Remove the next line let funded_amount = U128::from_integer(funded_amount); let tx_fee = U128::from_integer(context.transaction_fee()); - // 1. We check that user funded the fee payer contract with at least the transaction fee. // TODO(#7796): we should try to prevent reverts here assert(funded_amount >= tx_fee, "funded amount not enough to cover tx fee"); - // 2. We compute the refund amount as the difference between funded amount and tx fee. let refund_amount = funded_amount - tx_fee; - - // 3. We add fee to the fee payer point and refund amount to the user point. - fee_payer_point.add_amount(tx_fee); - user_point.add_amount(refund_amount); - - // 4. We finalize the hiding points to get the note hashes. - let fee_payer_note_hash = fee_payer_point.finalize(); - let user_note_hash = user_point.finalize(); - + // 3. We finalize the hiding points with the correct amounts to get the note hashes. + let fee_payer_note_hash = fee_payer_hiding_point.finalize(tx_fee); + let user_note_hash = user_hiding_point.finalize(refund_amount); // 5. At last we emit the note hashes. context.push_note_hash(fee_payer_note_hash); context.push_note_hash(user_note_hash); // --> Once the tx is settled user and fee recipient can add the notes to their pixies. } // docs:end:complete_refund - /// Internal /// - // docs:start:increase_public_balance - #[aztec(public)] - #[aztec(internal)] + #[public] + #[internal] fn _increase_public_balance(to: AztecAddress, amount: Field) { let new_balance = storage.public_balances.at(to).read().add(U128::from_integer(amount)); storage.public_balances.at(to).write(new_balance); } // docs:end:increase_public_balance - // docs:start:reduce_total_supply - #[aztec(public)] - #[aztec(internal)] + #[public] + #[internal] fn _reduce_total_supply(amount: Field) { // Only to be called from burn. let new_supply = storage.total_supply.read().sub(U128::from_integer(amount)); storage.total_supply.write(new_supply); } // docs:end:reduce_total_supply - /// Unconstrained /// - // docs:start:balance_of_private unconstrained pub(crate) fn balance_of_private(owner: AztecAddress) -> pub Field { storage.balances.at(owner).balance_of().to_field() diff --git a/noir-projects/noir-contracts/contracts/token_contract/src/test/access_control.nr b/noir-projects/noir-contracts/contracts/token_contract/src/test/access_control.nr index 45a4ce6a295..510819e331c 100644 --- a/noir-projects/noir-contracts/contracts/token_contract/src/test/access_control.nr +++ b/noir-projects/noir-contracts/contracts/token_contract/src/test/access_control.nr @@ -11,7 +11,7 @@ unconstrained fn access_control() { env.call_public(set_admin_call_interface); // Check it worked - let get_admin_call_interface = Token::at(token_contract_address).admin(); + let get_admin_call_interface = Token::at(token_contract_address).get_admin(); let admin = env.call_public(get_admin_call_interface); assert(admin == recipient.to_field()); diff --git a/noir-projects/noir-contracts/contracts/token_contract/src/test/minting.nr b/noir-projects/noir-contracts/contracts/token_contract/src/test/minting.nr index 159c4daf0fc..b8064eabf75 100644 --- a/noir-projects/noir-contracts/contracts/token_contract/src/test/minting.nr +++ b/noir-projects/noir-contracts/contracts/token_contract/src/test/minting.nr @@ -74,10 +74,10 @@ unconstrained fn mint_private_success() { // Time travel so we can read keys from the registry env.advance_block_by(6); - // Store a note in the cache so we can redeem it - env.store_note_in_cache( + // We need to manually add the note to TXE because `TransparentNote` does not support automatic note log delivery. + env.add_note( &mut TransparentNote::new(mint_amount, secret_hash), - Token::storage().pending_shields.slot, + Token::storage_layout().pending_shields.slot, token_contract_address ); @@ -105,10 +105,10 @@ unconstrained fn mint_private_failure_double_spend() { // Time travel so we can read keys from the registry env.advance_block_by(6); - // Store a note in the cache so we can redeem it - env.store_note_in_cache( + // We need to manually add the note to TXE because `TransparentNote` does not support automatic note log delivery. + env.add_note( &mut TransparentNote::new(mint_amount, secret_hash), - Token::storage().pending_shields.slot, + Token::storage_layout().pending_shields.slot, token_contract_address ); @@ -164,10 +164,10 @@ unconstrained fn mint_private_failure_overflow_recipient() { // Time travel so we can read keys from the registry env.advance_block_by(6); - // Store a note in the cache so we can redeem it - env.store_note_in_cache( + // We need to manually add the note to TXE because `TransparentNote` does not support automatic note log delivery. + env.add_note( &mut TransparentNote::new(mint_amount, secret_hash), - Token::storage().pending_shields.slot, + Token::storage_layout().pending_shields.slot, token_contract_address ); @@ -205,14 +205,14 @@ unconstrained fn mint_private_failure_overflow_total_supply() { env.advance_block_by(6); // Store 2 notes in the cache so we can redeem it for owner and recipient - env.store_note_in_cache( + env.add_note( &mut TransparentNote::new(mint_amount, secret_hash_owner), - Token::storage().pending_shields.slot, + Token::storage_layout().pending_shields.slot, token_contract_address ); - env.store_note_in_cache( + env.add_note( &mut TransparentNote::new(mint_amount, secret_hash_recipient), - Token::storage().pending_shields.slot, + Token::storage_layout().pending_shields.slot, token_contract_address ); diff --git a/noir-projects/noir-contracts/contracts/token_contract/src/test/refunds.nr b/noir-projects/noir-contracts/contracts/token_contract/src/test/refunds.nr index 8bd9b5763b8..339bd464871 100644 --- a/noir-projects/noir-contracts/contracts/token_contract/src/test/refunds.nr +++ b/noir-projects/noir-contracts/contracts/token_contract/src/test/refunds.nr @@ -1,9 +1,8 @@ use crate::{test::utils, Token, types::token_note::TokenNote}; use dep::aztec::{ - test::helpers::cheatcodes, oracle::unsafe_rand::unsafe_rand, hash::compute_secret_hash, prelude::NoteHeader, protocol_types::storage::map::derive_storage_slot_in_map, - keys::getters::get_current_public_keys + keys::getters::get_public_keys }; use dep::authwit::cheatcodes as authwit_cheatcodes; @@ -34,17 +33,17 @@ unconstrained fn setup_refund_success() { env.call_private_void(setup_refund_from_call_interface); let mut context = env.private(); - let user_npk_m_hash = get_current_public_keys(&mut context, user).npk_m.hash(); - let fee_payer_npk_m_hash = get_current_public_keys(&mut context, fee_payer).npk_m.hash(); + let user_npk_m_hash = get_public_keys(user).npk_m.hash(); + let fee_payer_npk_m_hash = get_public_keys(fee_payer).npk_m.hash(); - let fee_payer_balances_slot = derive_storage_slot_in_map(Token::storage().balances.slot, fee_payer); - let user_balances_slot = derive_storage_slot_in_map(Token::storage().balances.slot, user); + let fee_payer_balances_slot = derive_storage_slot_in_map(Token::storage_layout().balances.slot, fee_payer); + let user_balances_slot = derive_storage_slot_in_map(Token::storage_layout().balances.slot, user); // When the refund was set up, we would've spent the note worth mint_amount, and inserted a note worth //`mint_amount - funded_amount`. When completing the refund, we would've constructed a hash corresponding to a note // worth `funded_amount - transaction_fee`. We "know" the transaction fee was 1 (it is hardcoded in // `executePublicFunction` TXE oracle) but we need to notify TXE of the note (preimage). - env.store_note_in_cache( + env.add_note( &mut TokenNote { amount: U128::from_integer(funded_amount - 1), npk_m_hash: user_npk_m_hash, @@ -54,7 +53,7 @@ unconstrained fn setup_refund_success() { user_balances_slot, token_contract_address ); - env.store_note_in_cache( + env.add_note( &mut TokenNote { amount: U128::from_integer(1), npk_m_hash: fee_payer_npk_m_hash, diff --git a/noir-projects/noir-contracts/contracts/token_contract/src/test/shielding.nr b/noir-projects/noir-contracts/contracts/token_contract/src/test/shielding.nr index a1f9212d866..7e7eb3e5dc2 100644 --- a/noir-projects/noir-contracts/contracts/token_contract/src/test/shielding.nr +++ b/noir-projects/noir-contracts/contracts/token_contract/src/test/shielding.nr @@ -1,5 +1,5 @@ use crate::test::utils; -use dep::aztec::{test::helpers::cheatcodes, oracle::unsafe_rand::unsafe_rand, hash::compute_secret_hash}; +use dep::aztec::{oracle::unsafe_rand::unsafe_rand, hash::compute_secret_hash}; use dep::authwit::cheatcodes as authwit_cheatcodes; use crate::{types::transparent_note::TransparentNote, Token}; @@ -14,10 +14,10 @@ unconstrained fn shielding_on_behalf_of_self() { let shield_call_interface = Token::at(token_contract_address).shield(owner, shield_amount, secret_hash, 0); env.call_public(shield_call_interface); - // Store a note in the cache so we can redeem it - env.store_note_in_cache( + // We need to manually add the note to TXE because `TransparentNote` does not support automatic note log delivery. + env.add_note( &mut TransparentNote::new(shield_amount, secret_hash), - Token::storage().pending_shields.slot, + Token::storage_layout().pending_shields.slot, token_contract_address ); @@ -47,10 +47,10 @@ unconstrained fn shielding_on_behalf_of_other() { // Become owner again env.impersonate(owner); - // Store a note in the cache so we can redeem it - env.store_note_in_cache( + // We need to manually add the note to TXE because `TransparentNote` does not support automatic note log delivery. + env.add_note( &mut TransparentNote::new(shield_amount, secret_hash), - Token::storage().pending_shields.slot, + Token::storage_layout().pending_shields.slot, token_contract_address ); diff --git a/noir-projects/noir-contracts/contracts/token_contract/src/test/transfer_private.nr b/noir-projects/noir-contracts/contracts/token_contract/src/test/transfer_private.nr index 0b4c9cb72d6..08f22fd47f1 100644 --- a/noir-projects/noir-contracts/contracts/token_contract/src/test/transfer_private.nr +++ b/noir-projects/noir-contracts/contracts/token_contract/src/test/transfer_private.nr @@ -80,8 +80,8 @@ unconstrained fn transfer_private_failure_more_than_balance() { // docs:start:fail_with_message #[test(should_fail_with="invalid nonce")] unconstrained fn transfer_private_failure_on_behalf_of_self_non_zero_nonce() { - // Setup with account contracts. Slower since we actually deploy them, but needed for authwits. - let (env, token_contract_address, owner, recipient, _) = utils::setup_and_mint(/* with_account_contracts */ true); + // Setup without account contracts. We are not using authwits here, so dummy accounts are enough + let (env, token_contract_address, owner, recipient, _) = utils::setup_and_mint(/* with_account_contracts */ false); // Add authwit let transfer_amount = 1000; let transfer_private_from_call_interface = Token::at(token_contract_address).transfer_from(owner, recipient, transfer_amount, 1); @@ -104,10 +104,10 @@ unconstrained fn transfer_private_failure_on_behalf_of_more_than_balance() { env.call_private_void(transfer_private_from_call_interface); } -#[test(should_fail)] +#[test(should_fail_with="Authorization not found for message hash")] unconstrained fn transfer_private_failure_on_behalf_of_other_without_approval() { // Setup with account contracts. Slower since we actually deploy them, but needed for authwits. - let (env, token_contract_address, owner, recipient, mint_amount) = utils::setup_and_mint(/* with_account_contracts */ true); + let (env, token_contract_address, owner, recipient, _) = utils::setup_and_mint(/* with_account_contracts */ true); // Add authwit let transfer_amount = 1000; let transfer_private_from_call_interface = Token::at(token_contract_address).transfer_from(owner, recipient, transfer_amount, 1); @@ -115,15 +115,12 @@ unconstrained fn transfer_private_failure_on_behalf_of_other_without_approval() env.impersonate(recipient); // Transfer tokens env.call_private_void(transfer_private_from_call_interface); - // Check balances - utils::check_private_balance(token_contract_address, owner, mint_amount - transfer_amount); - utils::check_private_balance(token_contract_address, recipient, transfer_amount); } -#[test(should_fail)] +#[test(should_fail_with="Authorization not found for message hash")] unconstrained fn transfer_private_failure_on_behalf_of_other_wrong_caller() { // Setup with account contracts. Slower since we actually deploy them, but needed for authwits. - let (env, token_contract_address, owner, recipient, mint_amount) = utils::setup_and_mint(/* with_account_contracts */ true); + let (env, token_contract_address, owner, recipient, _) = utils::setup_and_mint(/* with_account_contracts */ true); // Add authwit let transfer_amount = 1000; let transfer_private_from_call_interface = Token::at(token_contract_address).transfer_from(owner, recipient, transfer_amount, 1); @@ -132,7 +129,4 @@ unconstrained fn transfer_private_failure_on_behalf_of_other_wrong_caller() { env.impersonate(recipient); // Transfer tokens env.call_private_void(transfer_private_from_call_interface); - // Check balances - utils::check_private_balance(token_contract_address, owner, mint_amount - transfer_amount); - utils::check_private_balance(token_contract_address, recipient, transfer_amount); } diff --git a/noir-projects/noir-contracts/contracts/token_contract/src/test/transfer_public.nr b/noir-projects/noir-contracts/contracts/token_contract/src/test/transfer_public.nr index aae666f6bd3..65b1cbf612b 100644 --- a/noir-projects/noir-contracts/contracts/token_contract/src/test/transfer_public.nr +++ b/noir-projects/noir-contracts/contracts/token_contract/src/test/transfer_public.nr @@ -1,5 +1,5 @@ use crate::test::utils; -use dep::aztec::{test::helpers::cheatcodes, oracle::unsafe_rand::unsafe_rand}; +use dep::aztec::oracle::unsafe_rand::unsafe_rand; use dep::authwit::cheatcodes as authwit_cheatcodes; use crate::Token; @@ -63,20 +63,18 @@ unconstrained fn public_transfer_failure_more_than_balance() { utils::check_public_balance(token_contract_address, owner, mint_amount); } -#[test] +#[test(should_fail_with="invalid nonce")] unconstrained fn public_transfer_failure_on_behalf_of_self_non_zero_nonce() { // Setup without account contracts. We are not using authwits here, so dummy accounts are enough - let (env, token_contract_address, owner, recipient, mint_amount) = utils::setup_and_mint(/* with_account_contracts */ true); + let (env, token_contract_address, owner, recipient, mint_amount) = utils::setup_and_mint(/* with_account_contracts */ false); // Transfer tokens let transfer_amount = mint_amount / 10; let public_transfer_call_interface = Token::at(token_contract_address).transfer_public(owner, recipient, transfer_amount, unsafe_rand()); // Try to transfer tokens - env.assert_public_call_fails(public_transfer_call_interface); - - // Check balances - utils::check_public_balance(token_contract_address, owner, mint_amount); + env.call_public(public_transfer_call_interface); } +// Not checking error message here with should_fail_with because noir panics when I try doing that. #[test] unconstrained fn public_transfer_failure_on_behalf_of_other_without_approval() { // Setup with account contracts. Slower since we actually deploy them, but needed for authwits. @@ -92,7 +90,7 @@ unconstrained fn public_transfer_failure_on_behalf_of_other_without_approval() { utils::check_public_balance(token_contract_address, recipient, 0); } -#[test] +#[test(should_fail_with="attempt to subtract with underflow")] unconstrained fn public_transfer_failure_on_behalf_of_other_more_than_balance() { // Setup with account contracts. Slower since we actually deploy them, but needed for authwits. let (env, token_contract_address, owner, recipient, mint_amount) = utils::setup_and_mint(/* with_account_contracts */ true); @@ -104,12 +102,10 @@ unconstrained fn public_transfer_failure_on_behalf_of_other_more_than_balance() // Impersonate recipient to perform the call env.impersonate(recipient); // Try to transfer tokens - env.assert_public_call_fails(public_transfer_from_call_interface); - // Check balances - utils::check_public_balance(token_contract_address, owner, mint_amount); - utils::check_public_balance(token_contract_address, recipient, 0); + env.call_public(public_transfer_from_call_interface); } +// Not checking error message here with should_fail_with because noir panics when I try doing that. #[test] unconstrained fn public_transfer_failure_on_behalf_of_other_wrong_caller() { // Setup with account contracts. Slower since we actually deploy them, but needed for authwits. diff --git a/noir-projects/noir-contracts/contracts/token_contract/src/test/unshielding.nr b/noir-projects/noir-contracts/contracts/token_contract/src/test/unshielding.nr index d127046d382..061cf29e686 100644 --- a/noir-projects/noir-contracts/contracts/token_contract/src/test/unshielding.nr +++ b/noir-projects/noir-contracts/contracts/token_contract/src/test/unshielding.nr @@ -1,5 +1,5 @@ use crate::test::utils; -use dep::aztec::{oracle::unsafe_rand::unsafe_rand, test::helpers::cheatcodes}; +use dep::aztec::oracle::unsafe_rand::unsafe_rand; use dep::authwit::cheatcodes as authwit_cheatcodes; use crate::Token; @@ -63,7 +63,7 @@ unconstrained fn unshield_failure_on_behalf_of_other_more_than_balance() { env.call_private_void(unshield_call_interface); } -#[test(should_fail)] +#[test(should_fail_with="Authorization not found for message hash")] unconstrained fn unshield_failure_on_behalf_of_other_invalid_designated_caller() { let (env, token_contract_address, owner, recipient, mint_amount) = utils::setup_and_mint(/* with_account_contracts */ true); @@ -76,7 +76,7 @@ unconstrained fn unshield_failure_on_behalf_of_other_invalid_designated_caller() env.call_private_void(unshield_call_interface); } -#[test(should_fail)] +#[test(should_fail_with="Authorization not found for message hash")] unconstrained fn unshield_failure_on_behalf_of_other_no_approval() { let (env, token_contract_address, owner, recipient, mint_amount) = utils::setup_and_mint(/* with_account_contracts */ true); diff --git a/noir-projects/noir-contracts/contracts/token_contract/src/test/utils.nr b/noir-projects/noir-contracts/contracts/token_contract/src/test/utils.nr index fde110352eb..76ef268271d 100644 --- a/noir-projects/noir-contracts/contracts/token_contract/src/test/utils.nr +++ b/noir-projects/noir-contracts/contracts/token_contract/src/test/utils.nr @@ -7,7 +7,7 @@ use dep::aztec::{ use crate::{types::transparent_note::TransparentNote, Token}; -pub fn setup(with_account_contracts: bool) -> (&mut TestEnvironment, AztecAddress, AztecAddress, AztecAddress) { +unconstrained pub fn setup(with_account_contracts: bool) -> (&mut TestEnvironment, AztecAddress, AztecAddress, AztecAddress) { // Setup env, generate keys let mut env = TestEnvironment::new(); let (owner, recipient) = if with_account_contracts { @@ -38,7 +38,7 @@ pub fn setup(with_account_contracts: bool) -> (&mut TestEnvironment, AztecAddres (&mut env, token_contract_address, owner, recipient) } -pub fn setup_and_mint(with_account_contracts: bool) -> (&mut TestEnvironment, AztecAddress, AztecAddress, AztecAddress, Field) { +unconstrained pub fn setup_and_mint(with_account_contracts: bool) -> (&mut TestEnvironment, AztecAddress, AztecAddress, AztecAddress, Field) { // Setup let (env, token_contract_address, owner, recipient) = setup(with_account_contracts); let mint_amount = 10000; @@ -54,14 +54,14 @@ pub fn setup_and_mint(with_account_contracts: bool) -> (&mut TestEnvironment, Az // Time travel so we can read keys from the registry env.advance_block_by(6); - // docs:start:txe_test_store_note - // Store a note in the cache so we can redeem it - env.store_note_in_cache( + // docs:start:txe_test_add_note + // We need to manually add the note to TXE because `TransparentNote` does not support automatic note log delivery. + env.add_note( &mut TransparentNote::new(mint_amount, secret_hash), - Token::storage().pending_shields.slot, + Token::storage_layout().pending_shields.slot, token_contract_address ); - // docs:end:txe_test_store_note + // docs:end:txe_test_add_note // Redeem our shielded tokens let redeem_shield_call_interface = Token::at(token_contract_address).redeem_shield(owner, mint_amount, secret); @@ -71,12 +71,16 @@ pub fn setup_and_mint(with_account_contracts: bool) -> (&mut TestEnvironment, Az } // docs:start:txe_test_read_public -pub fn check_public_balance(token_contract_address: AztecAddress, address: AztecAddress, address_amount: Field) { +unconstrained pub fn check_public_balance( + token_contract_address: AztecAddress, + address: AztecAddress, + address_amount: Field +) { let current_contract_address = get_contract_address(); cheatcodes::set_contract_address(token_contract_address); let block_number = get_block_number(); - let balances_slot = Token::storage().public_balances.slot; + let balances_slot = Token::storage_layout().public_balances.slot; let address_slot = derive_storage_slot_in_map(balances_slot, address); let amount: U128 = storage_read(token_contract_address, address_slot, block_number); assert(amount.to_field() == address_amount, "Public balance is not correct"); @@ -85,7 +89,11 @@ pub fn check_public_balance(token_contract_address: AztecAddress, address: Aztec // docs:end:txe_test_read_public // docs:start:txe_test_call_unconstrained -pub fn check_private_balance(token_contract_address: AztecAddress, address: AztecAddress, address_amount: Field) { +unconstrained pub fn check_private_balance( + token_contract_address: AztecAddress, + address: AztecAddress, + address_amount: Field +) { let current_contract_address = get_contract_address(); cheatcodes::set_contract_address(token_contract_address); // Direct call to unconstrained @@ -94,4 +102,3 @@ pub fn check_private_balance(token_contract_address: AztecAddress, address: Azte cheatcodes::set_contract_address(current_contract_address); } // docs:end:txe_test_call_unconstrained - diff --git a/noir-projects/noir-contracts/contracts/token_contract/src/types/balance_set.nr b/noir-projects/noir-contracts/contracts/token_contract/src/types/balance_set.nr index 25d0407c6bb..c768d432277 100644 --- a/noir-projects/noir-contracts/contracts/token_contract/src/types/balance_set.nr +++ b/noir-projects/noir-contracts/contracts/token_contract/src/types/balance_set.nr @@ -1,13 +1,13 @@ -use dep::aztec::prelude::{NoteGetterOptions, NoteViewerOptions, NoteInterface, PrivateSet, Point}; +use dep::aztec::prelude::{NoteGetterOptions, NoteViewerOptions, NoteInterface, PrivateSet}; use dep::aztec::{ context::{PrivateContext, UnconstrainedContext}, protocol_types::constants::MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, - note::{note_getter::view_notes, note_emission::{NoteEmission, OuterNoteEmission}}, - keys::{getters::get_current_public_keys, public_keys::NpkM} + note::{note_interface::NullifiableNote, note_getter::view_notes, note_emission::OuterNoteEmission}, + keys::{getters::get_public_keys, public_keys::NpkM} }; use crate::types::token_note::OwnedNote; -struct BalanceSet { +pub struct BalanceSet { set: PrivateSet, } @@ -19,14 +19,14 @@ impl BalanceSet { } impl BalanceSet { - unconstrained pub fn balance_of(self: Self) -> U128 where T: NoteInterface + OwnedNote { + unconstrained pub fn balance_of(self: Self) -> U128 where T: NoteInterface + NullifiableNote + OwnedNote { self.balance_of_with_offset(0) } - unconstrained pub fn balance_of_with_offset( + unconstrained pub fn balance_of_with_offset( self: Self, offset: u32 - ) -> U128 where T: NoteInterface + OwnedNote { + ) -> U128 where T: NoteInterface + NullifiableNote + OwnedNote { let mut balance = U128::from_integer(0); // docs:start:view_notes let mut options = NoteViewerOptions::new(); @@ -46,11 +46,11 @@ impl BalanceSet { } impl BalanceSet { - pub fn add( + pub fn add( self: Self, owner_npk_m: NpkM, addend: U128 - ) -> OuterNoteEmission where T: NoteInterface + OwnedNote + Eq { + ) -> OuterNoteEmission where T: NoteInterface + NullifiableNote + OwnedNote + Eq { if addend == U128::from_integer(0) { OuterNoteEmission::new(Option::none()) } else { @@ -63,11 +63,11 @@ impl BalanceSet { } } - pub fn sub( + pub fn sub( self: Self, owner_npk_m: NpkM, amount: U128 - ) -> OuterNoteEmission where T: NoteInterface + OwnedNote + Eq { + ) -> OuterNoteEmission where T: NoteInterface + NullifiableNote + OwnedNote + Eq { let subtracted = self.try_sub(amount, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL); // try_sub may have substracted more or less than amount. We must ensure that we subtracted at least as much as @@ -85,11 +85,11 @@ impl BalanceSet { // The `max_notes` parameter is used to fine-tune the number of constraints created by this function. The gate count // scales relatively linearly with `max_notes`, but a lower `max_notes` parameter increases the likelihood of // `try_sub` subtracting an amount smaller than `target_amount`. - pub fn try_sub( + pub fn try_sub( self: Self, target_amount: U128, max_notes: u32 - ) -> U128 where T: NoteInterface + OwnedNote + Eq { + ) -> U128 where T: NoteInterface + NullifiableNote + OwnedNote + Eq { // We are using a preprocessor here (filter applied in an unconstrained context) instead of a filter because // we do not need to prove correct execution of the preprocessor. // Because the `min_sum` notes is not constrained, users could choose to e.g. not call it. However, all this @@ -115,10 +115,10 @@ impl BalanceSet { // The preprocessor (a filter applied in an unconstrained context) does not check if total sum is larger or equal to // 'min_sum' - all it does is remove extra notes if it does reach that value. // Note that proper usage of this preprocessor requires for notes to be sorted in descending order. -pub fn preprocess_notes_min_sum( +pub fn preprocess_notes_min_sum( notes: [Option; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL], min_sum: U128 -) -> [Option; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] where T: NoteInterface + OwnedNote { +) -> [Option; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] where T: NoteInterface + NullifiableNote + OwnedNote { let mut selected = [Option::none(); MAX_NOTE_HASH_READ_REQUESTS_PER_CALL]; let mut sum = U128::from_integer(0); for i in 0..notes.len() { diff --git a/noir-projects/noir-contracts/contracts/token_contract/src/types/token_note.nr b/noir-projects/noir-contracts/contracts/token_contract/src/types/token_note.nr index 2163c254a4e..f1133488ad3 100644 --- a/noir-projects/noir-contracts/contracts/token_contract/src/types/token_note.nr +++ b/noir-projects/noir-contracts/contracts/token_contract/src/types/token_note.nr @@ -1,26 +1,18 @@ use dep::aztec::{ - generators::{Ga1 as G_amt, Ga2 as G_npk, Ga3 as G_rnd, G_slot}, - prelude::{NoteHeader, NoteInterface, PrivateContext}, - protocol_types::{ - constants::GENERATOR_INDEX__NOTE_NULLIFIER, point::{Point, POINT_LENGTH}, scalar::Scalar, - hash::poseidon2_hash_with_separator, traits::Serialize -}, + prelude::{NoteHeader, NullifiableNote, PrivateContext}, + protocol_types::{constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator}, note::utils::compute_note_hash_for_nullify, oracle::unsafe_rand::unsafe_rand, - keys::getters::get_nsk_app + keys::getters::get_nsk_app, macros::notes::partial_note }; -use dep::std::{embedded_curve_ops::multi_scalar_mul, hash::from_field_unsafe}; trait OwnedNote { fn new(amount: U128, owner_npk_m_hash: Field) -> Self; fn get_amount(self) -> U128; } -global TOKEN_NOTE_LEN: Field = 3; // 3 plus a header. -global TOKEN_NOTE_BYTES_LEN: Field = 3 * 32 + 64; - // docs:start:TokenNote -#[aztec(note)] -struct TokenNote { +#[partial_note(quote {amount})] +pub struct TokenNote { // The amount of tokens in the note amount: U128, // The nullifying public key hash is used with the nsk_app to ensure that the note can be privately spent. @@ -30,7 +22,7 @@ struct TokenNote { } // docs:end:TokenNote -impl NoteInterface for TokenNote { +impl NullifiableNote for TokenNote { // docs:start:nullifier fn compute_nullifier(self, context: &mut PrivateContext, note_hash_for_nullify: Field) -> Field { let secret = context.request_nsk_app(self.npk_m_hash); @@ -44,7 +36,7 @@ impl NoteInterface for TokenNote { } // docs:end:nullifier - fn compute_nullifier_without_context(self) -> Field { + unconstrained fn compute_nullifier_without_context(self) -> Field { let note_hash_for_nullify = compute_note_hash_for_nullify(self); let secret = get_nsk_app(self.npk_m_hash); poseidon2_hash_with_separator( @@ -52,68 +44,6 @@ impl NoteInterface for TokenNote { GENERATOR_INDEX__NOTE_NULLIFIER ) } - - // docs:start:compute_note_hiding_point - fn compute_note_hiding_point(self) -> Point { - // We use the unsafe version because the multi_scalar_mul will constrain the scalars. - let amount_scalar = from_field_unsafe(self.amount.to_integer()); - let npk_m_hash_scalar = from_field_unsafe(self.npk_m_hash); - let randomness_scalar = from_field_unsafe(self.randomness); - let slot_scalar = from_field_unsafe(self.header.storage_slot); - // We compute the note hiding point as: - // `G_amt * amount + G_npk * npk_m_hash + G_rnd * randomness + G_slot * slot` - // instead of using pedersen or poseidon2 because it allows us to privately add and subtract from amount - // in public by leveraging homomorphism. - multi_scalar_mul( - [G_amt, G_npk, G_rnd, G_slot], - [amount_scalar, npk_m_hash_scalar, randomness_scalar, slot_scalar] - ) - } - // docs:end:compute_note_hiding_point -} - -impl TokenNote { - // TODO: Merge this func with `compute_note_hiding_point`. I (benesjan) didn't do it in the initial PR to not have - // to modify macros and all the related funcs in it. - fn to_note_hiding_point(self) -> TokenNoteHidingPoint { - TokenNoteHidingPoint::new(self.compute_note_hiding_point()) - } -} - -struct TokenNoteHidingPoint { - inner: Point -} - -impl TokenNoteHidingPoint { - fn new(point: Point) -> Self { - Self { inner: point } - } - - fn add_amount(&mut self, amount: U128) { - self.inner = multi_scalar_mul([G_amt], [from_field_unsafe(amount.to_integer())]) + self.inner; - } - - fn add_npk_m_hash(&mut self, npk_m_hash: Field) { - self.inner = multi_scalar_mul([G_npk], [from_field_unsafe(npk_m_hash)]) + self.inner; - } - - fn add_randomness(&mut self, randomness: Field) { - self.inner = multi_scalar_mul([G_rnd], [from_field_unsafe(randomness)]) + self.inner; - } - - fn add_slot(&mut self, slot: Field) { - self.inner = multi_scalar_mul([G_slot], [from_field_unsafe(slot)]) + self.inner; - } - - fn finalize(self) -> Field { - self.inner.x - } -} - -impl Serialize for TokenNoteHidingPoint { - fn serialize(self) -> [Field; POINT_LENGTH] { - self.inner.serialize() - } } impl Eq for TokenNote { diff --git a/noir-projects/noir-contracts/contracts/token_contract/src/types/transparent_note.nr b/noir-projects/noir-contracts/contracts/token_contract/src/types/transparent_note.nr index 867aa4d3467..19ec7ac1812 100644 --- a/noir-projects/noir-contracts/contracts/token_contract/src/types/transparent_note.nr +++ b/noir-projects/noir-contracts/contracts/token_contract/src/types/transparent_note.nr @@ -1,60 +1,43 @@ // docs:start:token_types_all use dep::aztec::{ - note::{note_getter_options::PropertySelector, utils::compute_note_hash_for_nullify}, - prelude::{NoteHeader, NoteInterface, PrivateContext}, - protocol_types::{constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator} + note::utils::compute_note_hash_for_nullify, prelude::{NoteHeader, NullifiableNote, PrivateContext}, + protocol_types::{constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator}, + macros::notes::note }; -global TRANSPARENT_NOTE_LEN: Field = 2; -// TRANSPARENT_NOTE_LEN * 32 + 32(storage_slot as bytes) + 32(note_type_id as bytes) -global TRANSPARENT_NOTE_BYTES_LEN: Field = 2 * 32 + 64; +use dep::std::mem::zeroed; // Transparent note represents a note that is created in the clear (public execution), but can only be spent by those // that know the preimage of the "secret_hash" (the secret). This is typically used when shielding a token balance. // Owner of the tokens provides a "secret_hash" as an argument to the public "shield" function and then the tokens // can be redeemed in private by presenting the preimage of the "secret_hash" (the secret). -#[aztec(note)] -struct TransparentNote { +#[note] +pub struct TransparentNote { amount: Field, secret_hash: Field, } -struct TransparentNoteProperties { - amount: PropertySelector, - secret_hash: PropertySelector, -} - -impl NoteInterface for TransparentNote { - - // Custom serialization to avoid disclosing the secret field - fn serialize_content(self) -> [Field; TRANSPARENT_NOTE_LEN] { - [self.amount, self.secret_hash] - } - - // Custom deserialization since we don't have access to the secret plaintext - fn deserialize_content(serialized_note: [Field; TRANSPARENT_NOTE_LEN]) -> Self { - TransparentNote { amount: serialized_note[0], secret_hash: serialized_note[1], header: NoteHeader::empty() } - } - - fn compute_nullifier(self, _context: &mut PrivateContext, _note_hash_for_nullify: Field) -> Field { - self.compute_nullifier_without_context() - } - +impl NullifiableNote for TransparentNote { // Computing a nullifier in a transparent note is not guarded by making secret a part of the nullifier preimage (as // is common in other cases) and instead is guarded by the functionality of "redeem_shield" function. There we do // the following: // 1) We pass the secret as an argument to the function and use it to compute a secret hash, // 2) we fetch a note via the "get_notes" oracle which accepts the secret hash as an argument, // 3) the "get_notes" oracle constrains that the secret hash in the returned note matches the one computed in - // circuit. + // circuit. // This achieves that the note can only be spent by the party that knows the secret. - fn compute_nullifier_without_context(self) -> Field { + fn compute_nullifier(self, _context: &mut PrivateContext, _note_hash_for_nullify: Field) -> Field { let note_hash_for_nullify = compute_note_hash_for_nullify(self); poseidon2_hash_with_separator( [note_hash_for_nullify], GENERATOR_INDEX__NOTE_NULLIFIER as Field ) } + + unconstrained fn compute_nullifier_without_context(self) -> Field { + // compute_nullifier ignores both of its parameters so we can reuse it here + self.compute_nullifier(zeroed(), zeroed()) + } } impl TransparentNote { @@ -62,15 +45,6 @@ impl TransparentNote { pub fn new(amount: Field, secret_hash: Field) -> Self { TransparentNote { amount, secret_hash, header: NoteHeader::empty() } } - - // CUSTOM FUNCTIONS FOR THIS NOTE TYPE - // Custom serialization forces us to manually create the metadata struct and its getter - pub fn properties() -> TransparentNoteProperties { - TransparentNoteProperties { - amount: PropertySelector { index: 0, offset: 0, length: 32 }, - secret_hash: PropertySelector { index: 1, offset: 0, length: 32 } - } - } } impl Eq for TransparentNote { @@ -79,4 +53,4 @@ impl Eq for TransparentNote { } } -// docs:end:token_types_all \ No newline at end of file +// docs:end:token_types_all diff --git a/noir-projects/noir-contracts/contracts/uniswap_contract/src/main.nr b/noir-projects/noir-contracts/contracts/uniswap_contract/src/main.nr index ed18788ebe0..0b1aeb7cd55 100644 --- a/noir-projects/noir-contracts/contracts/uniswap_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/uniswap_contract/src/main.nr @@ -4,6 +4,9 @@ mod util; // Demonstrates how to use portal contracts to swap on L1 Uniswap with funds on L2 // Has two separate flows for private and public respectively // Uses the token bridge contract, which tells which input token we need to talk to and handles the exit funds to L1 +use dep::aztec::macros::aztec; + +#[aztec] contract Uniswap { use dep::aztec::prelude::{FunctionSelector, AztecAddress, EthAddress, SharedImmutable}; @@ -12,21 +15,22 @@ contract Uniswap { use dep::token::Token; use dep::token_bridge::TokenBridge; use crate::util::{compute_swap_private_content_hash, compute_swap_public_content_hash}; + use dep::aztec::macros::{storage::storage, functions::{public, initializer, view, internal, private}}; - #[aztec(storage)] - struct Storage { - portal_address: SharedImmutable, + #[storage] + struct Storage { + portal_address: SharedImmutable, } - #[aztec(public)] - #[aztec(initializer)] + #[public] + #[initializer] fn constructor(portal_address: EthAddress) { storage.portal_address.initialize(portal_address); } // docs:end:uniswap_setup // docs:start:swap_public - #[aztec(public)] + #[public] fn swap_public( sender: AztecAddress, input_asset_bridge: AztecAddress, @@ -87,7 +91,7 @@ contract Uniswap { // docs:end:swap_public // docs:start:swap_private - #[aztec(private)] + #[private] fn swap_private( input_asset: AztecAddress, // since private, we pass here and later assert that this is as expected by input_bridge input_asset_bridge: AztecAddress, @@ -150,13 +154,9 @@ contract Uniswap { // Assume `token` relates to `token_bridge` (ie token_bridge.token == token) // Note that private can't read public return values so created an internal public that handles everything // this method is used for both private and public swaps. - #[aztec(public)] - #[aztec(internal)] - fn _approve_bridge_and_exit_input_asset_to_L1( - token: AztecAddress, - token_bridge: AztecAddress, - amount: Field - ) { + #[public] + #[internal] + fn _approve_bridge_and_exit_input_asset_to_L1(token: AztecAddress, token_bridge: AztecAddress, amount: Field) { // Since we will authorize and instantly spend the funds, all in public, we can use the same nonce // every interaction. In practice, the authwit should be squashed, so this is also cheap! let nonce = 0xdeadbeef; @@ -181,9 +181,9 @@ contract Uniswap { // docs:end:authwit_uniswap_set // docs:start:assert_token_is_same - #[aztec(public)] - #[aztec(internal)] - #[aztec(view)] + #[public] + #[internal] + #[view] fn _assert_token_is_same(token: AztecAddress, token_bridge: AztecAddress) { assert( token.eq(TokenBridge::at(token_bridge).get_token().view(&mut context)), "input_asset address is not the same as seen in the bridge contract" diff --git a/noir-projects/noir-contracts/publicFunctionsSizeReport.js b/noir-projects/noir-contracts/publicFunctionsSizeReport.js new file mode 100644 index 00000000000..9324690bd24 --- /dev/null +++ b/noir-projects/noir-contracts/publicFunctionsSizeReport.js @@ -0,0 +1,73 @@ +const path = require("path"); +const fs = require("fs"); +const fsp = require("fs").promises; + +// Simple script to extract the exact bytecode size of a contracts public functions. +// The output of this script is meant to be used with the noir-lang/noir-gates-diff project. +// The noir-gates-diff was made for comparing ACIR/Brillig opcodes. +// However, this script was made to re-use the noir-gates-diff for bytecode sizes as +// to minimize both the amount of changes needed in noir-gates-diff and in nargo. +async function main() { + + let [targetDir] = process.argv.slice(2); + if (!targetDir) { + console.log( + "Usage: node extractPublicFunctionsAsNoirArtifacts.js " + ); + return; + } + + let artifactPaths = []; + fs.readdirSync(targetDir).forEach(file => { + // We want to exclude any backups that may be generated by the avm-transpiler + if (path.extname(file) === ".json") { + artifactPaths.push(path.join(targetDir, file)); + } + }); + + let workspaceReport = { + programs: [] + } + for (var i = 0; i < artifactPaths.length; i++) { + let contractArtifactPath = artifactPaths[i]; + const contractArtifact = JSON.parse( + await fsp.readFile(contractArtifactPath, "utf8") + ); + contractArtifact.functions.forEach(async func => { + if (func.custom_attributes.includes("public")) { + if (func.brillig_names.length != 1) { + console.log( + "Expected only a single Brillig function" + ); + return; + } + let func_with_contract_name = contractArtifact.name + "::" + func.brillig_names[0]; + let program_report = { + package_name: "", + functions: [{ name: "main", opcodes: 1 }], + unconstrained_functions: [], + } + // Programs are compared by package name, so we make a unique one for each function here + program_report.package_name = func_with_contract_name; + let bytecode_bytes = Buffer.from(func.bytecode, 'base64'); + let func_report = { + name: "main", + opcodes: bytecode_bytes, + }; + func_report.opcodes = bytecode_bytes.length; + program_report.unconstrained_functions.push(func_report); + workspaceReport.programs.push(program_report); + } + }); + } + + const outPath = path.join("public_functions_report.json"); + + console.log(`Writing to ${outPath}`); + await fsp.writeFile(outPath, JSON.stringify(workspaceReport, null, 2)); +} + +main().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/noir-projects/noir-protocol-circuits/Nargo.template.toml b/noir-projects/noir-protocol-circuits/Nargo.template.toml index d30541738e1..4aa888cb7e7 100644 --- a/noir-projects/noir-protocol-circuits/Nargo.template.toml +++ b/noir-projects/noir-protocol-circuits/Nargo.template.toml @@ -1,7 +1,7 @@ [workspace] members = [ "crates/types", - "crates/blob", +# "crates/blob", "crates/parity-base", "crates/parity-lib", "crates/parity-root", @@ -21,12 +21,10 @@ members = [ "crates/empty-nested", "crates/empty-nested-simulated", "crates/public-kernel-lib", - "crates/public-kernel-setup", - "crates/public-kernel-setup-simulated", - "crates/public-kernel-app-logic", - "crates/public-kernel-app-logic-simulated", - "crates/public-kernel-teardown", - "crates/public-kernel-teardown-simulated", + "crates/public-kernel-inner", + "crates/public-kernel-inner-simulated", + "crates/public-kernel-merge", + "crates/public-kernel-merge-simulated", "crates/public-kernel-tail", "crates/public-kernel-tail-simulated", "crates/reset-kernel-lib", @@ -36,5 +34,6 @@ members = [ "crates/rollup-base-simulated", "crates/rollup-block-merge", "crates/rollup-block-root", + "crates/rollup-block-root-final", "crates/rollup-root", ] diff --git a/noir-projects/noir-protocol-circuits/crates/blob/Nargo.toml b/noir-projects/noir-protocol-circuits/crates/blob/Nargo.toml index 356e55ea849..29bbc9ffce0 100644 --- a/noir-projects/noir-protocol-circuits/crates/blob/Nargo.toml +++ b/noir-projects/noir-protocol-circuits/crates/blob/Nargo.toml @@ -5,4 +5,4 @@ authors = [""] compiler_version = ">=0.30.0" [dependencies] -bigint = {tag = "tf/update-to-le-bytes", git = "https://github.com/noir-lang/noir-bignum" } +bigint = {tag = "v0.3.4", git = "https://github.com/noir-lang/noir-bignum" } diff --git a/noir-projects/noir-protocol-circuits/crates/blob/src/config.nr b/noir-projects/noir-protocol-circuits/crates/blob/src/config.nr index 5062a5506a3..8b3fbac3339 100644 --- a/noir-projects/noir-protocol-circuits/crates/blob/src/config.nr +++ b/noir-projects/noir-protocol-circuits/crates/blob/src/config.nr @@ -2,11 +2,11 @@ use dep::bigint::{BigNum, fields::bls12_381Fr::BLS12_381_Fr_Params}; type F = BigNum<3, BLS12_381_Fr_Params>; -global FIELDS_PER_BLOB: u64 = 4096; -global LOG_FIELDS_PER_BLOB: u64 = 12; -global EXTRA_FIELDS_PER_BLOB: u64 = 16; // 16 = floor(4096 FIELDS_PER_BLOB / 254 noir_field_bits), wasting only 32 bits. -global NOIR_FIELDS_PER_BLOB: u64 = FIELDS_PER_BLOB + EXTRA_FIELDS_PER_BLOB; -global FIELDS_CARRYING_AN_EXTRA_BIT_PER_BLOB: u64 = EXTRA_FIELDS_PER_BLOB * 254; // EXTRA_FIELDS_PER_BLOB * 254 = 4064. So the first 4064 bls Fr fields in the blob will carry an extra bit in their 255th bit position, that will be used to reconstitute 16 extra fields. +global FIELDS_PER_BLOB: u32 = 4096; +global LOG_FIELDS_PER_BLOB: u32 = 12; +global EXTRA_FIELDS_PER_BLOB: u32 = 16; // 16 = floor(4096 FIELDS_PER_BLOB / 254 noir_field_bits), wasting only 32 bits. +global NOIR_FIELDS_PER_BLOB: u32 = FIELDS_PER_BLOB + EXTRA_FIELDS_PER_BLOB; +global FIELDS_CARRYING_AN_EXTRA_BIT_PER_BLOB: u32 = EXTRA_FIELDS_PER_BLOB * 254; // EXTRA_FIELDS_PER_BLOB * 254 = 4064. So the first 4064 bls Fr fields in the blob will carry an extra bit in their 255th bit position, that will be used to reconstitute 16 extra fields. global D: F = BigNum { limbs: [4096, 0, 0] }; global D_INV = BigNum { limbs: [0x686828bfce5c19400fffff00100001, 0x6878b46ae3705eb6a46a89213de7d3, 0x73e6] }; diff --git a/noir-projects/noir-protocol-circuits/crates/blob/src/main.nr b/noir-projects/noir-protocol-circuits/crates/blob/src/main.nr index 1a5ca5e8fdc..d4b4b06b957 100644 --- a/noir-projects/noir-protocol-circuits/crates/blob/src/main.nr +++ b/noir-projects/noir-protocol-circuits/crates/blob/src/main.nr @@ -58,15 +58,15 @@ unconstrained fn __batch_invert_impl(mut x: [F; N]) -> [F; N] { unconstrained fn __compute_fracs(z: F, ys: [F; FIELDS_PER_BLOB]) -> [F; FIELDS_PER_BLOB] { let mut denoms: [F; FIELDS_PER_BLOB] = [BigNum::new(); FIELDS_PER_BLOB]; for i in 0..FIELDS_PER_BLOB { - denoms[i] = z.__add(NEGATIVE_ROOTS[i]); // (z - ω^i) + denoms[i] = z.__add(NEGATIVE_ROOTS[i]); // (z - omega^i) } - let inv_denoms = __batch_invert_impl(denoms); // 1 / (z - ω^i), for all i + let inv_denoms = __batch_invert_impl(denoms); // 1 / (z - omega^i), for all i let mut fracs: [F; FIELDS_PER_BLOB] = [BigNum::new(); FIELDS_PER_BLOB]; for i in 0..FIELDS_PER_BLOB { - let inv_denom = inv_denoms[i]; // 1 / (z - ω^i) + let inv_denom = inv_denoms[i]; // 1 / (z - omega^i) - fracs[i] = ys[i].__mul(inv_denom); // y_i / (z - ω^i) + fracs[i] = ys[i].__mul(inv_denom); // y_i / (z - omega^i) } fracs } @@ -260,9 +260,9 @@ fn main(blob: [F; FIELDS_PER_BLOB], kzg_commitment: [Field; 2]) -> pub (Field, F /** * ___d-1 - * z^d - 1 \ ω^i + * z^d - 1 \ omega^i * p(z) = --------- . / y_i . --------- - * d /____ z - ω^i + * d /____ z - omega^i * i=0 * * p(z) = factor . sum( y_i . num / denom ) @@ -271,7 +271,7 @@ fn main(blob: [F; FIELDS_PER_BLOB], kzg_commitment: [Field; 2]) -> pub (Field, F * where d = 4096 * * Precompute: - * - The d roots of unity ω^i (plus maybe their negatives for z - ω^i computations). + * - The d roots of unity omega^i (plus maybe their negatives for z - omega^i computations). * - (1 / d) * * @param z @@ -342,13 +342,13 @@ fn barycentric_evaluate_blob_at_z(z: F, ys: [F; FIELDS_PER_BLOB]) -> F { let mut sum: F = BigNum::new(); // Making a call to this function causes a "stack too deep" error, so I've put the body of that function here, instead: - // let fracs = __compute_fracs(z, ys); // { y_i / (z - ω^i) } + // let fracs = __compute_fracs(z, ys); // { y_i / (z - omega^i) } // Note: it's more efficient (saving 30k constraints) to compute: // ___d-1 // \ / y_i \ - // / | --------- | . ω^i - // /____ \ z - ω^i / + // / | --------- | . omega^i + // /____ \ z - omega^i / // i=0 // ^^^^^^^^^ // frac @@ -356,34 +356,34 @@ fn barycentric_evaluate_blob_at_z(z: F, ys: [F; FIELDS_PER_BLOB]) -> F { // ... than to compute: // // ___d-1 - // \ / ω^i \ + // \ / omega^i \ // / y_i . | --------- | - // /____ \ z - ω^i / + // /____ \ z - omega^i / // i=0 // - // perhaps because all the ω^i terms are constant witnesses? + // perhaps because all the omega^i terms are constant witnesses? //***************************************************************** // This section is only needed because `__compute_fracs` isn't working (stack too deep error). - let mut fracs: [F; FIELDS_PER_BLOB] = [BigNum::new(); FIELDS_PER_BLOB]; // y_i / (z - ω^i), for all i + let mut fracs: [F; FIELDS_PER_BLOB] = [BigNum::new(); FIELDS_PER_BLOB]; // y_i / (z - omega^i), for all i let mut denoms = [BigNum::new(); FIELDS_PER_BLOB]; for i in 0..FIELDS_PER_BLOB { - denoms[i] = z.__add(NEGATIVE_ROOTS[i]); // (z - ω^i) + denoms[i] = z.__add(NEGATIVE_ROOTS[i]); // (z - omega^i) } // If you're seeing a `bug` warning for this line, I think it's fine. // Ideally, we'd be using `__compute_fracs`, anyway, but we're getting a "stack too deep" error. - let inv_denoms = __batch_invert_impl(denoms); // 1 / (z - ω^i), for all i + let inv_denoms = __batch_invert_impl(denoms); // 1 / (z - omega^i), for all i for i in 0..FIELDS_PER_BLOB { let num = ys[i]; - let inv_denom = inv_denoms[i]; // 1 / (z - ω^i) + let inv_denom = inv_denoms[i]; // 1 / (z - omega^i) - let frac = num.__mul(inv_denom); // y_i * (1 / (z - ω^i)) + let frac = num.__mul(inv_denom); // y_i * (1 / (z - omega^i)) - fracs[i] = frac; // y_i / (z - ω^i) + fracs[i] = frac; // y_i / (z - omega^i) std::as_witness(fracs[i].limbs[0]); std::as_witness(fracs[i].limbs[1]); std::as_witness(fracs[i].limbs[2]); @@ -414,9 +414,9 @@ fn barycentric_evaluate_blob_at_z(z: F, ys: [F; FIELDS_PER_BLOB]) -> F { // Seeking: // ___d-1 - // \ ω^i + // \ omega^i // sum = / y_i . --------- - // /____ z - ω^i + // /____ z - omega^i // i=0 let NUM_PARTIAL_SUMS = FIELDS_PER_BLOB / 8; for i in 0..NUM_PARTIAL_SUMS { @@ -426,15 +426,15 @@ fn barycentric_evaluate_blob_at_z(z: F, ys: [F; FIELDS_PER_BLOB]) -> F { // Seeking: // ___i*8 + 7 - // \ ω^k + // \ omega^k // partial_sum = / y_k . --------- - // /____ z - ω^k + // /____ z - omega^k // k=i*8 + 0 for j in 0..8 { let k = i * 8 + j; - lhs[j] = ROOTS[k]; // ω^k - rhs[j] = fracs[k]; // y_k / (z - ω^k) + lhs[j] = ROOTS[k]; // omega^k + rhs[j] = fracs[k]; // y_k / (z - omega^k) std::as_witness(lhs[j].limbs[0]); std::as_witness(lhs[j].limbs[1]); std::as_witness(lhs[j].limbs[2]); @@ -442,10 +442,10 @@ fn barycentric_evaluate_blob_at_z(z: F, ys: [F; FIELDS_PER_BLOB]) -> F { std::as_witness(rhs[j].limbs[1]); std::as_witness(rhs[j].limbs[2]); - // y_k * ( ω^k / (z - ω^k) ) + // y_k * ( omega^k / (z - omega^k) ) let summand = ROOTS[k].__mul(fracs[k]); - // partial_sum + ( y_k * ( ω^k / (z - ω^k) ) -> partial_sum + // partial_sum + ( y_k * ( omega^k / (z - omega^k) ) -> partial_sum partial_sum = partial_sum.__add(summand); std::as_witness(partial_sum.limbs[0]); std::as_witness(partial_sum.limbs[1]); @@ -454,9 +454,9 @@ fn barycentric_evaluate_blob_at_z(z: F, ys: [F; FIELDS_PER_BLOB]) -> F { // Seeking: // ___i*8 - 1 ___i*8 + 7 - // \ ω^i \ / y_k \ - // sum_out = / y_i . --------- + / ω^k . | --------- | - // /____ z - ω^i /____ \ z - ω^k / + // \ omega^i \ / y_k \ + // sum_out = / y_i . --------- + / omega^k . | --------- | + // /____ z - omega^i /____ \ z - omega^k / // 0 k = i*8 // ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // sum partial_sum @@ -464,9 +464,9 @@ fn barycentric_evaluate_blob_at_z(z: F, ys: [F; FIELDS_PER_BLOB]) -> F { // ... that is: // // ___i*8 - 1 ___ 7 - // \ ω^i \ + // \ omega^i \ // sum_out = / y_i . --------- + / lhs[j] . rhs[j] - // /____ z - ω^i /____ + // /____ z - omega^i /____ // 0 j = 0 // ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ // sum partial_sum diff --git a/noir-projects/noir-protocol-circuits/crates/bug-collecting-crate/devex-turbo-fish.nr b/noir-projects/noir-protocol-circuits/crates/bug-collecting-crate/devex-turbo-fish.nr index 67b2f933b57..b283f25d605 100644 --- a/noir-projects/noir-protocol-circuits/crates/bug-collecting-crate/devex-turbo-fish.nr +++ b/noir-projects/noir-protocol-circuits/crates/bug-collecting-crate/devex-turbo-fish.nr @@ -10,10 +10,10 @@ fn main(){ }; } -struct Foo { +pub struct Foo { x : N, } -struct Bar { +pub struct Bar { x : FooField, -} \ No newline at end of file +} diff --git a/noir-projects/noir-protocol-circuits/crates/bug-collecting-crate/type-alias-shorthand.nr b/noir-projects/noir-protocol-circuits/crates/bug-collecting-crate/type-alias-shorthand.nr index 8f7e92a2cb3..d7facd14e83 100644 --- a/noir-projects/noir-protocol-circuits/crates/bug-collecting-crate/type-alias-shorthand.nr +++ b/noir-projects/noir-protocol-circuits/crates/bug-collecting-crate/type-alias-shorthand.nr @@ -1,6 +1,6 @@ use X as Y; -struct X{ +pub struct X{ x :u32 } @@ -8,7 +8,7 @@ fn main() { let z= Y{20}; } -error: cannot find `Y` in this scope +error: cannot find `Y` in this scope ┌─ main.nr:8:12 │ 8 │ let z= Y{20}; @@ -22,4 +22,4 @@ error: Expected a ; separating these two statements │ - │ -// Note not using shorthand and doing Y{x : 20} will fix this. \ No newline at end of file +// Note not using shorthand and doing Y{x : 20} will fix this. diff --git a/noir-projects/noir-protocol-circuits/crates/bug-collecting-crate/typechain-type-alias.nr b/noir-projects/noir-protocol-circuits/crates/bug-collecting-crate/typechain-type-alias.nr index c2d2c3fa624..e5a7e55ba36 100644 --- a/noir-projects/noir-protocol-circuits/crates/bug-collecting-crate/typechain-type-alias.nr +++ b/noir-projects/noir-protocol-circuits/crates/bug-collecting-crate/typechain-type-alias.nr @@ -1,15 +1,15 @@ -The typescript binding generator has a bug when we use type aliases because +The typescript binding generator has a bug when we use type aliases because the abi says that they have the same struct path. For example: -struct Generic { +pub struct Generic { x : [Field; N] } -struct Concrete { +pub struct Concrete { gen2 : Generic<2>, gen4 : Generic<4>, diff --git a/noir-projects/noir-protocol-circuits/crates/parity-lib/src/base/base_parity_inputs.nr b/noir-projects/noir-protocol-circuits/crates/parity-lib/src/base/base_parity_inputs.nr index 700e4df7756..d9bbcdab794 100644 --- a/noir-projects/noir-protocol-circuits/crates/parity-lib/src/base/base_parity_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/parity-lib/src/base/base_parity_inputs.nr @@ -1,7 +1,7 @@ use crate::{parity_public_inputs::ParityPublicInputs, utils::sha256_merkle_tree::Sha256MerkleTree}; -use dep::types::{constants::NUM_MSGS_PER_BASE_PARITY, merkle_tree::MerkleTree, utils::uint256::U256}; +use dep::types::{constants::NUM_MSGS_PER_BASE_PARITY, merkle_tree::MerkleTree}; -struct BaseParityInputs { +pub struct BaseParityInputs { msgs: [Field; NUM_MSGS_PER_BASE_PARITY], vk_tree_root: Field, } diff --git a/noir-projects/noir-protocol-circuits/crates/parity-lib/src/lib.nr b/noir-projects/noir-protocol-circuits/crates/parity-lib/src/lib.nr index 4c2c07b1515..dcd55f829ce 100644 --- a/noir-projects/noir-protocol-circuits/crates/parity-lib/src/lib.nr +++ b/noir-projects/noir-protocol-circuits/crates/parity-lib/src/lib.nr @@ -3,8 +3,8 @@ mod root; mod parity_public_inputs; mod utils; -use crate::base::base_parity_inputs::BaseParityInputs; -use crate::root::root_parity_input::RootParityInput; -use crate::root::root_parity_inputs::RootParityInputs; -use crate::root::root_rollup_parity_input::RootRollupParityInput; -use crate::parity_public_inputs::ParityPublicInputs; +pub use crate::base::base_parity_inputs::BaseParityInputs; +pub use crate::root::root_parity_input::RootParityInput; +pub use crate::root::root_parity_inputs::RootParityInputs; +pub use crate::root::root_rollup_parity_input::RootRollupParityInput; +pub use crate::parity_public_inputs::ParityPublicInputs; diff --git a/noir-projects/noir-protocol-circuits/crates/parity-lib/src/parity_public_inputs.nr b/noir-projects/noir-protocol-circuits/crates/parity-lib/src/parity_public_inputs.nr index 6adbdaf250e..20b645c4050 100644 --- a/noir-projects/noir-protocol-circuits/crates/parity-lib/src/parity_public_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/parity-lib/src/parity_public_inputs.nr @@ -1,9 +1,9 @@ use dep::types::{traits::{Empty, Serialize, Deserialize}}; -struct ParityPublicInputs { - sha_root: Field, +pub struct ParityPublicInputs { + sha_root: Field, converted_root: Field, - vk_tree_root: Field, + vk_tree_root: Field, } impl Empty for ParityPublicInputs { diff --git a/noir-projects/noir-protocol-circuits/crates/parity-lib/src/root/root_parity_input.nr b/noir-projects/noir-protocol-circuits/crates/parity-lib/src/root/root_parity_input.nr index c84894e21c5..61c89698191 100644 --- a/noir-projects/noir-protocol-circuits/crates/parity-lib/src/root/root_parity_input.nr +++ b/noir-projects/noir-protocol-circuits/crates/parity-lib/src/root/root_parity_input.nr @@ -5,7 +5,7 @@ use dep::types::{ }; use crate::parity_public_inputs::ParityPublicInputs; -struct RootParityInput { +pub struct RootParityInput { proof: RecursiveProof, verification_key: VerificationKey, vk_path: [Field; VK_TREE_HEIGHT], diff --git a/noir-projects/noir-protocol-circuits/crates/parity-lib/src/root/root_parity_inputs.nr b/noir-projects/noir-protocol-circuits/crates/parity-lib/src/root/root_parity_inputs.nr index 5f4554f43cf..4473cb2a6ba 100644 --- a/noir-projects/noir-protocol-circuits/crates/parity-lib/src/root/root_parity_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/parity-lib/src/root/root_parity_inputs.nr @@ -1,16 +1,12 @@ -use dep::types::{ - merkle_tree::MerkleTree, recursion::{verification_key::VerificationKey, proof::RecursiveProof}, - traits::Serialize -}; +use dep::types::merkle_tree::MerkleTree; use crate::{ parity_public_inputs::ParityPublicInputs, root::root_parity_input::RootParityInput, utils::sha256_merkle_tree::Sha256MerkleTree }; -use dep::std; -global NUM_BASE_PARITY_PER_ROOT_PARITY: u64 = 4; +global NUM_BASE_PARITY_PER_ROOT_PARITY: u32 = 4; -struct RootParityInputs { +pub struct RootParityInputs { children: [RootParityInput; NUM_BASE_PARITY_PER_ROOT_PARITY], } @@ -63,7 +59,9 @@ mod tests { use dep::types::tests::fixtures; use dep::types::constants::BASE_PARITY_INDEX; - fn test_setup() -> [RootParityInput; 4] { + use super::NUM_BASE_PARITY_PER_ROOT_PARITY; + + fn test_setup() -> [RootParityInput; NUM_BASE_PARITY_PER_ROOT_PARITY] { // 31 byte test SHA roots let children_sha_roots = [ 0xb3a3fc1968999f2c2d798b900bdf0de41311be2a4d20496a7e792a521fc8ab, diff --git a/noir-projects/noir-protocol-circuits/crates/parity-lib/src/root/root_rollup_parity_input.nr b/noir-projects/noir-protocol-circuits/crates/parity-lib/src/root/root_rollup_parity_input.nr index da20609f839..b4156754378 100644 --- a/noir-projects/noir-protocol-circuits/crates/parity-lib/src/root/root_rollup_parity_input.nr +++ b/noir-projects/noir-protocol-circuits/crates/parity-lib/src/root/root_rollup_parity_input.nr @@ -5,7 +5,7 @@ use dep::types::{ }; use crate::parity_public_inputs::ParityPublicInputs; -struct RootRollupParityInput { +pub struct RootRollupParityInput { proof: NestedRecursiveProof, verification_key: VerificationKey, vk_path: [Field; VK_TREE_HEIGHT], diff --git a/noir-projects/noir-protocol-circuits/crates/parity-lib/src/utils/sha256_merkle_tree.nr b/noir-projects/noir-protocol-circuits/crates/parity-lib/src/utils/sha256_merkle_tree.nr index 318cf1c9511..8e9ace41647 100644 --- a/noir-projects/noir-protocol-circuits/crates/parity-lib/src/utils/sha256_merkle_tree.nr +++ b/noir-projects/noir-protocol-circuits/crates/parity-lib/src/utils/sha256_merkle_tree.nr @@ -4,7 +4,7 @@ use dep::types::{hash::accumulate_sha256}; // hash functions. // TODO(Miranda): This is an interim version with 1 field sha256 - ideally we remove this and use accumulate_sha256 inside // the general MT -struct Sha256MerkleTree { +pub struct Sha256MerkleTree { leaves: [Field; N], nodes: [Field; N], } diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/previous_kernel_validator.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/previous_kernel_validator.nr index 626355ec44f..a3a6f2f0882 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/previous_kernel_validator.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/previous_kernel_validator.nr @@ -6,7 +6,7 @@ use dep::types::{ address::AztecAddress, traits::is_empty, utils::arrays::array_length }; -struct PreviousKernelValidator { +pub struct PreviousKernelValidator { previous_kernel: PrivateKernelCircuitPublicInputs, hints: PreviousKernelValidatorHints, } diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/previous_kernel_validator/previous_kernel_validator_hints.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/previous_kernel_validator/previous_kernel_validator_hints.nr index dc6bc18aae5..4a213530454 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/previous_kernel_validator/previous_kernel_validator_hints.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/previous_kernel_validator/previous_kernel_validator_hints.nr @@ -3,7 +3,7 @@ use dep::types::{ constants::{MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX}, utils::arrays::find_index_hint }; -struct PreviousKernelValidatorHints { +pub struct PreviousKernelValidatorHints { note_hash_indexes_for_nullifiers: [u32; MAX_NULLIFIERS_PER_TX], } diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/private_call_data_validator.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/private_call_data_validator.nr index a3a0483dfdf..eb2cdc5364d 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/private_call_data_validator.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/private_call_data_validator.nr @@ -83,7 +83,7 @@ fn validate_incrementing_counter_ranges_within_range(counter_star ); } -struct PrivateCallDataValidator { +pub struct PrivateCallDataValidator { data: PrivateCallData, array_lengths: PrivateCircuitPublicInputsArrayLengths, } @@ -285,8 +285,8 @@ impl PrivateCallDataValidator { should_check &= i != num_requests; if should_check { validate_call_context( - call_requests[i].item.contract_address, - call_requests[i].item.call_context, + call_requests[i].contract_address, + call_requests[i].call_context, public_inputs.call_context ); } @@ -298,8 +298,8 @@ impl PrivateCallDataValidator { let request = self.data.call_stack_item.public_inputs.public_teardown_call_request; if request.counter != 0 { validate_call_context( - request.item.contract_address, - request.item.call_context, + request.contract_address, + request.call_context, public_inputs.call_context ); } diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/private_kernel_circuit_output_validator.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/private_kernel_circuit_output_validator.nr index d52adc43ff1..770c33e6d8d 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/private_kernel_circuit_output_validator.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/private_kernel_circuit_output_validator.nr @@ -3,106 +3,16 @@ use dep::types::{ abis::{ kernel_circuit_public_inputs::{PrivateKernelCircuitPublicInputs, PrivateKernelCircuitPublicInputsArrayLengths}, max_block_number::MaxBlockNumber, - private_circuit_public_inputs::{PrivateCircuitPublicInputs, PrivateCircuitPublicInputsArrayLengths}, - side_effect::Scoped + private_circuit_public_inputs::{PrivateCircuitPublicInputs, PrivateCircuitPublicInputsArrayLengths} }, - address::AztecAddress, traits::{Empty, is_empty}, transaction::tx_request::TxRequest -}; - -fn validate_array_prepended( - dest: [T; N], - source: [T; N], - num_source_items: u32 -) where T: Eq { - let mut proceed = true; - for i in 0..source.len() { - proceed &= i != num_source_items; - if proceed { - assert_eq(dest[i], source[i], "source item does not prepend to dest"); - } - } -} - -fn validate_array_appended( - dest: [T; N], - source: [T; M], - num_source_items: u32, - num_prepended_items: u32 -) where T: Empty + Eq { - let items_propagated = num_prepended_items + num_source_items; - assert(items_propagated <= N, "number of total items exceeds limit"); - let mut should_check = false; - let mut is_non_empty_item = true; - for i in 0..dest.len() { // Loop through dest instead of source because we also need to check that dest is appended with empty items. - should_check |= i == num_prepended_items; // Prepended items have been checked in validate_array_prepended() and can be skipped here. - is_non_empty_item &= i != items_propagated; - if should_check { - if is_non_empty_item { - assert_eq(dest[i], source[i - num_prepended_items], "source item does not append to dest"); - } else { - assert(is_empty(dest[i]), "output should be appended with empty items"); - } - } - } -} - -// Similar to validate_array_appended, except that the contract address of the dest items will also be checked. -fn validate_array_appended_scoped( - dest: [ST; N], - source: [T; M], - num_source_items: u32, - num_prepended_items: u32, - contract_address: AztecAddress -) where ST: Scoped + Empty + Eq, T: Eq { - let items_propagated = num_prepended_items + num_source_items; - assert(items_propagated <= N, "number of total items exceeds limit"); - let mut should_check = false; - let mut is_non_empty_item = true; - for i in 0..dest.len() { - should_check |= i == num_prepended_items; - is_non_empty_item &= i != items_propagated; - if should_check { - if is_non_empty_item { - assert_eq( - dest[i].inner(), source[i - num_prepended_items], "source item does not append to dest" - ); - assert_eq( - dest[i].contract_address(), contract_address, "propagated contract address does not match" - ); - } else { - assert(is_empty(dest[i]), "output should be appended with empty items"); - } - } - } -} - -// Similar to validate_array_appended, except that the souce items will be appended to dest in reversed order. -fn validate_array_appended_reversed( - dest: [T; N], - source: [T; M], - num_source_items: u32, - num_prepended_items: u32 -) where T: Empty + Eq { - let items_propagated = num_prepended_items + num_source_items; - assert(items_propagated <= N, "number of total items exceeds limit"); - let mut should_check = false; - let mut is_non_empty_item = true; - for i in 0..dest.len() { - should_check |= i == num_prepended_items; - is_non_empty_item &= i != items_propagated; - if should_check { - if is_non_empty_item { - assert_eq( - dest[i], source[items_propagated - i - 1], "source item does not reversed append to dest" - ); - } else { - assert(is_empty(dest[i]), "output should be appended with empty items"); - } - } - } + address::AztecAddress, traits::is_empty, transaction::tx_request::TxRequest, + utils::arrays::{ + assert_array_appended, assert_array_appended_reversed, assert_array_appended_scoped, + assert_array_prepended } +}; -struct PrivateKernelCircuitOutputValidator { +pub struct PrivateKernelCircuitOutputValidator { output: PrivateKernelCircuitPublicInputs, } @@ -247,59 +157,59 @@ impl PrivateKernelCircuitOutputValidator { self.output.validation_requests.split_counter, previous_kernel.validation_requests.split_counter, "mismatch validation requests split counter" ); - validate_array_prepended( + assert_array_prepended( self.output.validation_requests.note_hash_read_requests, previous_kernel.validation_requests.note_hash_read_requests, array_lengths.note_hash_read_requests ); - validate_array_prepended( + assert_array_prepended( self.output.validation_requests.nullifier_read_requests, previous_kernel.validation_requests.nullifier_read_requests, array_lengths.nullifier_read_requests ); - validate_array_prepended( + assert_array_prepended( self.output.validation_requests.scoped_key_validation_requests_and_generators, previous_kernel.validation_requests.scoped_key_validation_requests_and_generators, array_lengths.scoped_key_validation_requests_and_generators ); - validate_array_prepended( + assert_array_prepended( self.output.end.note_hashes, previous_kernel.end.note_hashes, array_lengths.note_hashes ); - validate_array_prepended( + assert_array_prepended( self.output.end.nullifiers, previous_kernel.end.nullifiers, array_lengths.nullifiers ); - validate_array_prepended( + assert_array_prepended( self.output.end.l2_to_l1_msgs, previous_kernel.end.l2_to_l1_msgs, array_lengths.l2_to_l1_msgs ); - validate_array_prepended( + assert_array_prepended( self.output.end.note_encrypted_logs_hashes, previous_kernel.end.note_encrypted_logs_hashes, array_lengths.note_encrypted_logs_hashes ); - validate_array_prepended( + assert_array_prepended( self.output.end.encrypted_logs_hashes, previous_kernel.end.encrypted_logs_hashes, array_lengths.encrypted_logs_hashes ); - validate_array_prepended( + assert_array_prepended( self.output.end.unencrypted_logs_hashes, previous_kernel.end.unencrypted_logs_hashes, array_lengths.unencrypted_logs_hashes ); - validate_array_prepended( + assert_array_prepended( self.output.end.public_call_requests, previous_kernel.end.public_call_requests, array_lengths.public_call_requests ); // array_lengths.private_call_stack is guaranteed to be greater than 0. // It's checked in private_kernel_inner when comparing the top item in the stack with the current private call. - validate_array_prepended( + assert_array_prepended( self.output.end.private_call_stack, previous_kernel.end.private_call_stack, array_lengths.private_call_stack - 1 // Do not copy the top item in the stack. @@ -314,75 +224,75 @@ impl PrivateKernelCircuitOutputValidator { num_popped_call: u32 ) { let storage_contract_address = private_call.call_context.storage_contract_address; - validate_array_appended_scoped( + assert_array_appended_scoped( self.output.validation_requests.note_hash_read_requests, private_call.note_hash_read_requests, array_lengths.note_hash_read_requests, offsets.note_hash_read_requests, storage_contract_address ); - validate_array_appended_scoped( + assert_array_appended_scoped( self.output.validation_requests.nullifier_read_requests, private_call.nullifier_read_requests, array_lengths.nullifier_read_requests, offsets.nullifier_read_requests, storage_contract_address ); - validate_array_appended_scoped( + assert_array_appended_scoped( self.output.validation_requests.scoped_key_validation_requests_and_generators, private_call.key_validation_requests_and_generators, array_lengths.key_validation_requests_and_generators, offsets.scoped_key_validation_requests_and_generators, storage_contract_address ); - validate_array_appended_scoped( + assert_array_appended_scoped( self.output.end.note_hashes, private_call.note_hashes, array_lengths.note_hashes, offsets.note_hashes, storage_contract_address ); - validate_array_appended_scoped( + assert_array_appended_scoped( self.output.end.nullifiers, private_call.nullifiers, array_lengths.nullifiers, offsets.nullifiers, storage_contract_address ); - validate_array_appended_scoped( + assert_array_appended_scoped( self.output.end.l2_to_l1_msgs, private_call.l2_to_l1_msgs, array_lengths.l2_to_l1_msgs, offsets.l2_to_l1_msgs, storage_contract_address ); - validate_array_appended( + assert_array_appended( self.output.end.note_encrypted_logs_hashes, private_call.note_encrypted_logs_hashes, array_lengths.note_encrypted_logs_hashes, offsets.note_encrypted_logs_hashes ); - validate_array_appended_scoped( + assert_array_appended_scoped( self.output.end.encrypted_logs_hashes, private_call.encrypted_logs_hashes, array_lengths.encrypted_logs_hashes, offsets.encrypted_logs_hashes, storage_contract_address ); - validate_array_appended_scoped( + assert_array_appended_scoped( self.output.end.unencrypted_logs_hashes, private_call.unencrypted_logs_hashes, array_lengths.unencrypted_logs_hashes, offsets.unencrypted_logs_hashes, storage_contract_address ); - validate_array_appended( + assert_array_appended( self.output.end.public_call_requests, private_call.public_call_requests, array_lengths.public_call_requests, offsets.public_call_requests ); - validate_array_appended_reversed( + assert_array_appended_reversed( self.output.end.private_call_stack, private_call.private_call_requests, array_lengths.private_call_requests, diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/private_kernel_circuit_public_inputs_composer.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/private_kernel_circuit_public_inputs_composer.nr index 1f935ba9ec3..10e8f2da5c5 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/private_kernel_circuit_public_inputs_composer.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/private_kernel_circuit_public_inputs_composer.nr @@ -9,7 +9,7 @@ use dep::types::{ utils::arrays::{array_length, array_to_bounded_vec, sort_by_counter_asc, sort_by_counter_desc} }; -struct DataSource { +pub struct DataSource { private_call_public_inputs: PrivateCircuitPublicInputs, contract_address: AztecAddress, storage_contract_address: AztecAddress, @@ -19,7 +19,7 @@ pub fn create_first_nullifier(tx_request: TxRequest) -> ScopedNullifier { Nullifier { value: tx_request.hash(), note_hash: 0, counter: 0 }.scope(AztecAddress::zero()) } -struct PrivateKernelCircuitPublicInputsComposer { +pub struct PrivateKernelCircuitPublicInputsComposer { public_inputs: PrivateKernelCircuitPublicInputsBuilder, } diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/reset_output_composer.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/reset_output_composer.nr index bbaf6dbbc0f..cb10b27ed85 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/reset_output_composer.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/reset_output_composer.nr @@ -18,7 +18,7 @@ use dep::types::{ hash::{mask_encrypted_log_hash, silo_note_hash, silo_nullifier}, utils::arrays::sort_by_counter_asc }; -struct ResetOutputComposer< +pub struct ResetOutputComposer< let NH_RR_PENDING: u32, let NH_RR_SETTLED: u32, let NLL_RR_PENDING: u32, diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/reset_output_composer/reset_output_hints.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/reset_output_composer/reset_output_hints.nr index 6def209f88b..bd165f2f7b4 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/reset_output_composer/reset_output_hints.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/reset_output_composer/reset_output_hints.nr @@ -18,7 +18,7 @@ use dep::types::{ utils::arrays::{OrderHint, get_order_hints_asc} }; -struct ResetOutputHints { +pub struct ResetOutputHints { // note_hashes kept_note_hashes: [ScopedNoteHash; MAX_NOTE_HASHES_PER_TX], sorted_note_hash_indexes: [u32; MAX_NOTE_HASHES_PER_TX], diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/reset_output_validator.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/reset_output_validator.nr index 7897c85c1e8..9d2c6682f90 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/reset_output_validator.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/reset_output_validator.nr @@ -10,7 +10,7 @@ use dep::types::{ utils::arrays::{assert_sorted_transformed_value_array, assert_sorted_transformed_value_array_capped_size} }; -struct ResetOutputValidator< +pub struct ResetOutputValidator< let NH_RR_PENDING: u32, let NH_RR_SETTLED: u32, let NLL_RR_PENDING: u32, diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_output_composer.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_output_composer.nr index 02d32768979..5dc692b568c 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_output_composer.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_output_composer.nr @@ -14,7 +14,7 @@ use dep::types::{ messaging::l2_to_l1_message::ScopedL2ToL1Message }; -struct TailOutputComposer { +pub struct TailOutputComposer { output_composer: PrivateKernelCircuitPublicInputsComposer, } diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_output_validator.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_output_validator.nr index 205819bf0b4..a4071b50910 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_output_validator.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_output_validator.nr @@ -13,7 +13,7 @@ use dep::types::{ utils::arrays::assert_exposed_sorted_transformed_value_array }; -struct TailOutputValidator { +pub struct TailOutputValidator { output: KernelCircuitPublicInputs, previous_kernel: PrivateKernelCircuitPublicInputs, hints: TailOutputHints, diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_output_validator/tail_output_hints.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_output_validator/tail_output_hints.nr index 814fed215e7..5a6325c5b69 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_output_validator/tail_output_hints.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_output_validator/tail_output_hints.nr @@ -4,7 +4,7 @@ use dep::types::{ utils::arrays::{OrderHint, sort_by_counter_asc, get_order_hints_asc} }; -struct TailOutputHints { +pub struct TailOutputHints { // L2 to l1 msgs. sorted_l2_to_l1_msg_hints: [OrderHint; MAX_L2_TO_L1_MSGS_PER_TX], // Unencrypted log hashes. diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_to_public_output_composer.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_to_public_output_composer.nr index 7b945727093..0d1bc18226a 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_to_public_output_composer.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_to_public_output_composer.nr @@ -13,7 +13,7 @@ use dep::types::abis::{ validation_requests::PublicValidationRequests }; -struct TailToPublicOutputComposer { +pub struct TailToPublicOutputComposer { output_composer: PrivateKernelCircuitPublicInputsComposer, } @@ -34,7 +34,7 @@ impl TailToPublicOutputComposer { let mut output = PublicKernelCircuitPublicInputs::empty(); output.validation_requests = validation_requests; output.constants = source.constants; - output.public_teardown_call_stack[0] = source.public_teardown_call_request.expose_to_public(); + output.public_teardown_call_request = source.public_teardown_call_request.expose_to_public(); output.fee_payer = source.fee_payer; let mut (end_non_revertible, end) = split_to_public(source.end, source.min_revertible_side_effect_counter); diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_to_public_output_validator.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_to_public_output_validator.nr index 231353cb013..bbb1058d44f 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_to_public_output_validator.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_to_public_output_validator.nr @@ -10,14 +10,14 @@ use dep::types::{ log_hash::{LogHash, ScopedEncryptedLogHash, NoteLogHash, ScopedLogHash}, note_hash::ScopedNoteHash, nullifier::{Nullifier, ScopedNullifier}, public_call_request::PublicCallRequest }, - messaging::l2_to_l1_message::ScopedL2ToL1Message, traits::{is_empty, is_empty_array}, + messaging::l2_to_l1_message::ScopedL2ToL1Message, traits::is_empty_array, utils::arrays::{ assert_split_sorted_transformed_value_arrays_asc, assert_split_sorted_transformed_value_arrays_desc, assert_split_transformed_value_arrays } }; -struct TailToPublicOutputValidator { +pub struct TailToPublicOutputValidator { output: PublicKernelCircuitPublicInputs, previous_kernel: PrivateKernelCircuitPublicInputs, hints: TailToPublicOutputHints, @@ -70,17 +70,9 @@ impl TailToPublicOutputValidator { assert_eq(self.output.fee_payer, self.previous_kernel.fee_payer, "mismatch fee_payer"); - // public_teardown_call_stack assert_eq( - self.output.public_teardown_call_stack[0].item, self.previous_kernel.public_teardown_call_request.item, "mismatch public_teardown_call_request" + self.output.public_teardown_call_request, self.previous_kernel.public_teardown_call_request.expose_to_public(), "mismatch public_teardown_call_request" ); - assert_eq( - self.output.public_teardown_call_stack[0].counter, 0, "cannot expose teardown call request counter" - ); - let teardown_call_stack = self.output.public_teardown_call_stack; - for i in 1..teardown_call_stack.len() { - assert(is_empty(teardown_call_stack[i]), "unexpected teardown call request"); - } } fn validate_propagated_split_values(self) { diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_to_public_output_validator/tail_to_public_output_hints.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_to_public_output_validator/tail_to_public_output_hints.nr index 9342441434c..3c829e4b559 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_to_public_output_validator/tail_to_public_output_hints.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_to_public_output_validator/tail_to_public_output_hints.nr @@ -4,7 +4,7 @@ use dep::types::{ utils::arrays::{get_split_order_hints_asc, get_split_order_hints_desc, SplitOrderHints} }; -struct TailToPublicOutputHints { +pub struct TailToPublicOutputHints { // L2 to l1 msgs. sorted_l2_to_l1_msg_hints: SplitOrderHints, // Unencrypted log hashes. diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_empty.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_empty.nr index 453663f5e2b..2e3d677e0b8 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_empty.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_empty.nr @@ -3,7 +3,7 @@ use dep::types::{ recursion::{verification_key::VerificationKey, proof::RecursiveProof, traits::Verifiable} }; -struct EmptyNestedCircuitPublicInputs { +pub struct EmptyNestedCircuitPublicInputs { proof: RecursiveProof, vk: VerificationKey, } @@ -20,7 +20,7 @@ impl Empty for EmptyNestedCircuitPublicInputs { } } -struct PrivateKernelEmptyPrivateInputs { +pub struct PrivateKernelEmptyPrivateInputs { empty_nested: EmptyNestedCircuitPublicInputs, historical_header: Header, chain_id: Field, diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_init.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_init.nr index da34dc55e7d..8bd9f9d4a15 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_init.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_init.nr @@ -14,7 +14,7 @@ use dep::types::{ }; // Initialization struct for private inputs to the private kernel -struct PrivateKernelInitCircuitPrivateInputs { +pub struct PrivateKernelInitCircuitPrivateInputs { tx_request: TxRequest, vk_tree_root: Field, private_call: PrivateCallData, diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_inner.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_inner.nr index 7168efc5a7a..f5e70ebe1d2 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_inner.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_inner.nr @@ -27,7 +27,7 @@ global ALLOWED_PREVIOUS_CIRCUITS = [ PRIVATE_KERNEL_RESET_TINY_INDEX, ]; -struct PrivateKernelInnerCircuitPrivateInputs { +pub struct PrivateKernelInnerCircuitPrivateInputs { previous_kernel: PrivateKernelData, private_call: PrivateCallData, } diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_reset.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_reset.nr index b06e27d3c64..2a3532fe1e5 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_reset.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_reset.nr @@ -16,7 +16,7 @@ global ALLOWED_PREVIOUS_CIRCUITS = [ PRIVATE_KERNEL_INNER_INDEX, ]; -struct PrivateKernelResetHints { +pub struct PrivateKernelResetHints { note_hash_read_request_hints: NoteHashReadRequestHints, nullifier_read_request_hints: NullifierReadRequestHints, key_validation_hints: [KeyValidationHint; KEY_VALIDATION_REQUESTS], @@ -24,7 +24,7 @@ struct PrivateKernelResetHints { +pub struct PrivateKernelResetCircuitPrivateInputs { previous_kernel: PrivateKernelData, hints: PrivateKernelResetHints, } diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_tail.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_tail.nr index 9f273692cf5..a64716f8c3c 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_tail.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_tail.nr @@ -21,7 +21,7 @@ global ALLOWED_PREVIOUS_CIRCUITS = [ PRIVATE_KERNEL_RESET_TINY_INDEX, ]; -struct PrivateKernelTailCircuitPrivateInputs { +pub struct PrivateKernelTailCircuitPrivateInputs { previous_kernel: PrivateKernelData, } @@ -183,7 +183,7 @@ mod tests { #[test(should_fail_with="Public teardown call request must be empty when executing the tail circuit")] fn non_empty_public_teardown_call_request_should_fail() { let mut builder = PrivateKernelTailInputsBuilder::new(); - builder.previous_kernel.append_public_teardown_call_request(); + builder.previous_kernel.set_public_teardown_call_request(); builder.failed(); } diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_tail_to_public.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_tail_to_public.nr index 48877201b5f..56b90114239 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_tail_to_public.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_tail_to_public.nr @@ -22,7 +22,7 @@ global ALLOWED_PREVIOUS_CIRCUITS = [ PRIVATE_KERNEL_RESET_TINY_INDEX, ]; -struct PrivateKernelTailToPublicCircuitPrivateInputs { +pub struct PrivateKernelTailToPublicCircuitPrivateInputs { previous_kernel: PrivateKernelData, } @@ -163,7 +163,7 @@ mod tests { fn can_run_with_only_teardown() { let mut builder = PrivateKernelTailToPublicInputsBuilder::new(); builder.previous_kernel.public_call_requests = BoundedVec::new(); - builder.previous_kernel.append_public_teardown_call_request(); + builder.previous_kernel.set_public_teardown_call_request(); builder.succeeded(); } diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/previous_kernel_validator_builder/mod.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/previous_kernel_validator_builder/mod.nr index 9b61eb4f637..4c3cd2c336d 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/previous_kernel_validator_builder/mod.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/previous_kernel_validator_builder/mod.nr @@ -3,7 +3,7 @@ mod validate_no_transient_data; use crate::components::previous_kernel_validator::PreviousKernelValidator; use dep::types::tests::fixture_builder::FixtureBuilder; -struct PreviousKernelValidatorBuilder { +pub struct PreviousKernelValidatorBuilder { previous_kernel: FixtureBuilder } @@ -20,4 +20,4 @@ impl PreviousKernelValidatorBuilder { } } -// TODO: Add tests. \ No newline at end of file +// TODO: Add tests. diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_call_data_validator_builder/mod.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_call_data_validator_builder/mod.nr index 3e395b9843b..afecb1bbc42 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_call_data_validator_builder/mod.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_call_data_validator_builder/mod.nr @@ -19,7 +19,7 @@ use dep::types::{ tests::fixture_builder::FixtureBuilder, transaction::tx_request::TxRequest }; -struct PrivateCallDataValidatorBuilder { +pub struct PrivateCallDataValidatorBuilder { private_call: FixtureBuilder, previous_note_hashes: BoundedVec, } diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_call_data_validator_builder/validate_call_requests.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_call_data_validator_builder/validate_call_requests.nr index fdfb832fce2..2b725f15f84 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_call_data_validator_builder/validate_call_requests.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_call_data_validator_builder/validate_call_requests.nr @@ -50,7 +50,7 @@ fn validate_public_call_requests_incorrect_msg_sender_for_delegate_call_fails() builder.private_call.append_public_call_requests_delegate(1); // Change the msg_sender to be the contract address. - builder.private_call.public_call_requests.storage[0].item.call_context.msg_sender = builder.private_call.contract_address; + builder.private_call.public_call_requests.storage[0].call_context.msg_sender = builder.private_call.contract_address; builder.validate(); } @@ -61,8 +61,8 @@ fn validate_public_call_requests_incorrect_storage_contract_address_for_delegate builder.private_call.append_public_call_requests_delegate(1); // Change the storage_contract_address to be the target contract address. - let target_contract = builder.private_call.public_call_requests.storage[0].item.contract_address; - builder.private_call.public_call_requests.storage[0].item.call_context.storage_contract_address = target_contract; + let target_contract = builder.private_call.public_call_requests.storage[0].contract_address; + builder.private_call.public_call_requests.storage[0].call_context.storage_contract_address = target_contract; builder.validate(); } @@ -73,7 +73,7 @@ fn validate_public_call_requests_incorrect_msg_sender_for_regular_call_fails() { builder.private_call.append_public_call_requests(1); // Change the msg_sender to be the caller's msg_sender. - builder.private_call.public_call_requests.storage[0].item.call_context.msg_sender = builder.private_call.msg_sender; + builder.private_call.public_call_requests.storage[0].call_context.msg_sender = builder.private_call.msg_sender; builder.validate(); } @@ -84,7 +84,7 @@ fn validate_public_call_requests_incorrect_storage_contract_address_for_regular_ builder.private_call.append_public_call_requests(1); // Change the storage_contract_address to be the caller's storage contract address. - builder.private_call.public_call_requests.storage[0].item.call_context.storage_contract_address = builder.private_call.storage_contract_address; + builder.private_call.public_call_requests.storage[0].call_context.storage_contract_address = builder.private_call.storage_contract_address; builder.validate(); } @@ -95,7 +95,7 @@ fn validate_public_call_requests_static_call_regular_call_fails() { builder.private_call.append_public_call_requests(1); // Tweak the request to be making a non-static call. - builder.private_call.public_call_requests.storage[0].item.call_context.is_static_call = false; + builder.private_call.public_call_requests.storage[0].call_context.is_static_call = false; builder.validate(); } @@ -108,7 +108,7 @@ fn validate_public_call_requests_static_call_regular_call_fails() { fn validate_teardown_call_request_succeeds() { let mut builder = PrivateCallDataValidatorBuilder::new(); - builder.private_call.append_public_teardown_call_request(); + builder.private_call.set_public_teardown_call_request(); builder.validate(); } @@ -117,7 +117,7 @@ fn validate_teardown_call_request_succeeds() { fn validate_teardown_call_request_delegate_call_succeeds() { let mut builder = PrivateCallDataValidatorBuilder::new(); - builder.private_call.append_public_teardown_call_request_delegate(); + builder.private_call.set_public_teardown_call_request_delegate(); builder.validate(); } @@ -126,7 +126,7 @@ fn validate_teardown_call_request_delegate_call_succeeds() { fn validate_teardown_call_request_from_static_call_succeeds() { let mut builder = PrivateCallDataValidatorBuilder::new().is_static_call(); - builder.private_call.append_public_teardown_call_request(); + builder.private_call.set_public_teardown_call_request(); builder.validate(); } @@ -135,7 +135,7 @@ fn validate_teardown_call_request_from_static_call_succeeds() { fn validate_teardown_call_request_delegate_from_static_call_succeeds() { let mut builder = PrivateCallDataValidatorBuilder::new().is_static_call(); - builder.private_call.append_public_teardown_call_request_delegate(); + builder.private_call.set_public_teardown_call_request_delegate(); builder.validate(); } @@ -144,9 +144,9 @@ fn validate_teardown_call_request_delegate_from_static_call_succeeds() { fn validate_teardown_call_request_incorrect_msg_sender_for_delegate_call_fails() { let mut builder = PrivateCallDataValidatorBuilder::new(); - builder.private_call.append_public_teardown_call_request_delegate(); + builder.private_call.set_public_teardown_call_request_delegate(); // Change the msg_sender to be the contract address. - builder.private_call.public_teardown_call_stack.storage[0].item.call_context.msg_sender = builder.private_call.contract_address; + builder.private_call.public_teardown_call_request.call_context.msg_sender = builder.private_call.contract_address; builder.validate(); } @@ -155,10 +155,10 @@ fn validate_teardown_call_request_incorrect_msg_sender_for_delegate_call_fails() fn validate_teardown_call_request_incorrect_storage_contract_address_for_delegate_call_fails() { let mut builder = PrivateCallDataValidatorBuilder::new(); - builder.private_call.append_public_teardown_call_request_delegate(); + builder.private_call.set_public_teardown_call_request_delegate(); // Change the storage_contract_address to be the target contract address. - let target_contract = builder.private_call.public_teardown_call_stack.storage[0].item.contract_address; - builder.private_call.public_teardown_call_stack.storage[0].item.call_context.storage_contract_address = target_contract; + let target_contract = builder.private_call.public_teardown_call_request.contract_address; + builder.private_call.public_teardown_call_request.call_context.storage_contract_address = target_contract; builder.validate(); } @@ -167,9 +167,9 @@ fn validate_teardown_call_request_incorrect_storage_contract_address_for_delegat fn validate_teardown_call_request_incorrect_msg_sender_for_regular_call_fails() { let mut builder = PrivateCallDataValidatorBuilder::new(); - builder.private_call.append_public_teardown_call_request(); + builder.private_call.set_public_teardown_call_request(); // Change the msg_sender to be the caller's msg_sender. - builder.private_call.public_teardown_call_stack.storage[0].item.call_context.msg_sender = builder.private_call.msg_sender; + builder.private_call.public_teardown_call_request.call_context.msg_sender = builder.private_call.msg_sender; builder.validate(); } @@ -178,9 +178,9 @@ fn validate_teardown_call_request_incorrect_msg_sender_for_regular_call_fails() fn validate_teardown_call_request_incorrect_storage_contract_address_for_regular_call_fails() { let mut builder = PrivateCallDataValidatorBuilder::new(); - builder.private_call.append_public_teardown_call_request(); + builder.private_call.set_public_teardown_call_request(); // Change the storage_contract_address to be the caller's storage contract address. - builder.private_call.public_teardown_call_stack.storage[0].item.call_context.storage_contract_address = builder.private_call.storage_contract_address; + builder.private_call.public_teardown_call_request.call_context.storage_contract_address = builder.private_call.storage_contract_address; builder.validate(); } @@ -189,9 +189,9 @@ fn validate_teardown_call_request_incorrect_storage_contract_address_for_regular fn validate_teardown_call_request_static_call_regular_call_fails() { let mut builder = PrivateCallDataValidatorBuilder::new().is_static_call(); - builder.private_call.append_public_teardown_call_request(); + builder.private_call.set_public_teardown_call_request(); // Tweak the request to be making a non-static call. - builder.private_call.public_teardown_call_stack.storage[0].item.call_context.is_static_call = false; + builder.private_call.public_teardown_call_request.call_context.is_static_call = false; builder.validate(); } diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_kernel_circuit_output_validator_builder/mod.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_kernel_circuit_output_validator_builder/mod.nr index 621fc3f494e..70070359b7b 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_kernel_circuit_output_validator_builder/mod.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_kernel_circuit_output_validator_builder/mod.nr @@ -19,7 +19,7 @@ use dep::types::{ constants::PRIVATE_KERNEL_INIT_INDEX }; -struct PrivateKernelCircuitOutputValidatorBuilder { +pub struct PrivateKernelCircuitOutputValidatorBuilder { previous_kernel: FixtureBuilder, private_call: FixtureBuilder, output: FixtureBuilder, diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_kernel_circuit_output_validator_builder/validate_aggregated_values.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_kernel_circuit_output_validator_builder/validate_aggregated_values.nr index a68647a2cc7..0a30597cf8c 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_kernel_circuit_output_validator_builder/validate_aggregated_values.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_kernel_circuit_output_validator_builder/validate_aggregated_values.nr @@ -155,8 +155,8 @@ fn validate_aggregated_values_max_block_number_random_output_fails() { fn validate_aggregated_values_public_teardown_call_request_from_previous_succeeds() { let mut builder = PrivateKernelCircuitOutputValidatorBuilder::new(); - builder.previous_kernel.append_public_teardown_call_request(); - builder.output.append_public_teardown_call_request(); + builder.previous_kernel.set_public_teardown_call_request(); + builder.output.set_public_teardown_call_request(); builder.validate_as_inner_call(); } @@ -165,8 +165,8 @@ fn validate_aggregated_values_public_teardown_call_request_from_previous_succeed fn validate_aggregated_values_public_teardown_call_request_from_private_call_succeeds() { let mut builder = PrivateKernelCircuitOutputValidatorBuilder::new(); - builder.private_call.append_public_teardown_call_request(); - builder.output.append_public_teardown_call_request(); + builder.private_call.set_public_teardown_call_request(); + builder.output.set_public_teardown_call_request(); builder.validate_as_inner_call(); } @@ -175,9 +175,9 @@ fn validate_aggregated_values_public_teardown_call_request_from_private_call_suc fn validate_aggregated_values_public_teardown_call_request_from_both_fails() { let mut builder = PrivateKernelCircuitOutputValidatorBuilder::new(); - builder.previous_kernel.append_public_teardown_call_request(); - builder.private_call.append_public_teardown_call_request(); - builder.output.append_public_teardown_call_request(); + builder.previous_kernel.set_public_teardown_call_request(); + builder.private_call.set_public_teardown_call_request(); + builder.output.set_public_teardown_call_request(); builder.validate_as_inner_call(); } @@ -186,10 +186,10 @@ fn validate_aggregated_values_public_teardown_call_request_from_both_fails() { fn validate_aggregated_values_public_teardown_call_request_from_previous_mismatch_fails() { let mut builder = PrivateKernelCircuitOutputValidatorBuilder::new(); - builder.previous_kernel.append_public_teardown_call_request(); - builder.output.append_public_teardown_call_request(); + builder.previous_kernel.set_public_teardown_call_request(); + builder.output.set_public_teardown_call_request(); // Tweak the output. - builder.output.public_teardown_call_stack.storage[0].item.args_hash += 1; + builder.output.public_teardown_call_request.args_hash += 1; builder.validate_as_inner_call(); } @@ -198,10 +198,10 @@ fn validate_aggregated_values_public_teardown_call_request_from_previous_mismatc fn validate_aggregated_values_public_teardown_call_request_from_private_call_mismatch_fails() { let mut builder = PrivateKernelCircuitOutputValidatorBuilder::new(); - builder.private_call.append_public_teardown_call_request(); - builder.output.append_public_teardown_call_request(); + builder.private_call.set_public_teardown_call_request(); + builder.output.set_public_teardown_call_request(); // Tweak the output. - builder.output.public_teardown_call_stack.storage[0].item.args_hash += 1; + builder.output.public_teardown_call_request.args_hash += 1; builder.validate_as_inner_call(); } @@ -210,7 +210,7 @@ fn validate_aggregated_values_public_teardown_call_request_from_private_call_mis fn validate_aggregated_values_public_teardown_call_request_random_output_fails() { let mut builder = PrivateKernelCircuitOutputValidatorBuilder::new(); - builder.output.append_public_teardown_call_request(); + builder.output.set_public_teardown_call_request(); builder.validate_as_inner_call(); } diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_kernel_circuit_output_validator_builder/validate_initial_values.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_kernel_circuit_output_validator_builder/validate_initial_values.nr index f2586db2c0c..391ce60e561 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_kernel_circuit_output_validator_builder/validate_initial_values.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_kernel_circuit_output_validator_builder/validate_initial_values.nr @@ -152,8 +152,8 @@ fn validate_initial_values_max_block_number_random_output_fails() { fn validate_initial_values_public_teardown_call_request_succeeds() { let mut builder = PrivateKernelCircuitOutputValidatorBuilder::new(); - builder.private_call.append_public_teardown_call_request(); - builder.output.append_public_teardown_call_request(); + builder.private_call.set_public_teardown_call_request(); + builder.output.set_public_teardown_call_request(); builder.validate_as_first_call(); } @@ -162,10 +162,10 @@ fn validate_initial_values_public_teardown_call_request_succeeds() { fn validate_initial_values_public_teardown_call_request_mismatch_fails() { let mut builder = PrivateKernelCircuitOutputValidatorBuilder::new(); - builder.private_call.append_public_teardown_call_request(); - builder.output.append_public_teardown_call_request(); + builder.private_call.set_public_teardown_call_request(); + builder.output.set_public_teardown_call_request(); // Tweak the output. - builder.output.public_teardown_call_stack.storage[0].item.args_hash += 1; + builder.output.public_teardown_call_request.args_hash += 1; builder.validate_as_first_call(); } @@ -174,7 +174,7 @@ fn validate_initial_values_public_teardown_call_request_mismatch_fails() { fn validate_initial_values_public_teardown_call_request_empty_output_fails() { let mut builder = PrivateKernelCircuitOutputValidatorBuilder::new(); - builder.private_call.append_public_teardown_call_request(); + builder.private_call.set_public_teardown_call_request(); builder.validate_as_first_call(); } @@ -183,7 +183,7 @@ fn validate_initial_values_public_teardown_call_request_empty_output_fails() { fn validate_initial_values_public_teardown_call_request_random_output_fails() { let mut builder = PrivateKernelCircuitOutputValidatorBuilder::new(); - builder.output.append_public_teardown_call_request(); + builder.output.set_public_teardown_call_request(); builder.validate_as_first_call(); } diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_kernel_circuit_public_inputs_composer_builder/mod.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_kernel_circuit_public_inputs_composer_builder/mod.nr index 3b1bbec4d12..5e6e86b9118 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_kernel_circuit_public_inputs_composer_builder/mod.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_kernel_circuit_public_inputs_composer_builder/mod.nr @@ -11,7 +11,7 @@ use dep::types::{ tests::fixture_builder::FixtureBuilder, transaction::tx_request::TxRequest }; -struct PrivateKernelCircuitPublicInputsComposerBuilder { +pub struct PrivateKernelCircuitPublicInputsComposerBuilder { tx_request: TxRequest, previous_kernel: FixtureBuilder, private_call: FixtureBuilder, diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_kernel_circuit_public_inputs_composer_builder/new_from_previous_kernel_with_private_call.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_kernel_circuit_public_inputs_composer_builder/new_from_previous_kernel_with_private_call.nr index 85a0831fc46..ada950b4a87 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_kernel_circuit_public_inputs_composer_builder/new_from_previous_kernel_with_private_call.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_kernel_circuit_public_inputs_composer_builder/new_from_previous_kernel_with_private_call.nr @@ -280,8 +280,8 @@ fn new_from_previous_kernel_with_private_call_public_call_requests_succeeds() { fn new_from_previous_kernel_with_private_call_public_teardown_call_request_succeeds() { let mut builder = PrivateKernelCircuitPublicInputsComposerBuilder::new(); - builder.private_call.append_public_teardown_call_request(); - let request = builder.private_call.public_teardown_call_stack.storage[0]; + builder.private_call.set_public_teardown_call_request(); + let request = builder.private_call.public_teardown_call_request; let output = builder.compose_from_previous_kernel(); @@ -292,8 +292,8 @@ fn new_from_previous_kernel_with_private_call_public_teardown_call_request_succe fn new_from_previous_kernel_with_private_call_public_teardown_call_request_overwrite_fails() { let mut builder = PrivateKernelCircuitPublicInputsComposerBuilder::new(); - builder.previous_kernel.append_public_teardown_call_request(); - builder.private_call.append_public_teardown_call_request(); + builder.previous_kernel.set_public_teardown_call_request(); + builder.private_call.set_public_teardown_call_request(); let _ = builder.compose_from_previous_kernel(); } diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_kernel_circuit_public_inputs_composer_builder/propagate_from_private_call.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_kernel_circuit_public_inputs_composer_builder/propagate_from_private_call.nr index f3c119504d0..c84c936d5e3 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_kernel_circuit_public_inputs_composer_builder/propagate_from_private_call.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/private_kernel_circuit_public_inputs_composer_builder/propagate_from_private_call.nr @@ -201,8 +201,8 @@ fn propagate_from_private_call_public_call_requests_succeeds() { fn propagate_from_private_call_public_teardown_call_request_succeeds() { let mut builder = PrivateKernelCircuitPublicInputsComposerBuilder::new(); - builder.private_call.append_public_teardown_call_request(); - let res = builder.private_call.public_teardown_call_stack.storage[0]; + builder.private_call.set_public_teardown_call_request(); + let res = builder.private_call.public_teardown_call_request; let output = builder.compose_from_tx_request(); diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/reset_output_validator_builder/mod.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/reset_output_validator_builder/mod.nr index 83632225e34..dc58d472d73 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/reset_output_validator_builder/mod.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/reset_output_validator_builder/mod.nr @@ -14,7 +14,7 @@ use dep::types::{ tests::fixture_builder::FixtureBuilder }; -struct ResetOutputValidatorBuilder { +pub struct ResetOutputValidatorBuilder { output: FixtureBuilder, previous_kernel: FixtureBuilder, note_hash_read_request_hints_builder: NoteHashReadRequestHintsBuilder<6, 3>, diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_output_composer_builder/mod.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_output_composer_builder/mod.nr index 1b974ed4897..0e82c914a67 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_output_composer_builder/mod.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_output_composer_builder/mod.nr @@ -3,7 +3,7 @@ mod meter_gas_used; use crate::components::tail_output_composer::TailOutputComposer; use dep::types::{abis::kernel_circuit_public_inputs::KernelCircuitPublicInputs, tests::fixture_builder::FixtureBuilder}; -struct TailOutputComposerBuilder { +pub struct TailOutputComposerBuilder { previous_kernel: FixtureBuilder, } @@ -23,4 +23,4 @@ impl TailOutputComposerBuilder { } } -// TODO: Add tests. \ No newline at end of file +// TODO: Add tests. diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_output_validator_builder/mod.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_output_validator_builder/mod.nr index a1c3159deb7..98f146d5288 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_output_validator_builder/mod.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_output_validator_builder/mod.nr @@ -12,7 +12,7 @@ use dep::types::{ tests::fixture_builder::FixtureBuilder }; -struct TailOutputValidatorBuilder { +pub struct TailOutputValidatorBuilder { output: FixtureBuilder, previous_kernel: FixtureBuilder, } diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_to_public_output_composer_builder/mod.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_to_public_output_composer_builder/mod.nr index 25d7b776f26..db217294f16 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_to_public_output_composer_builder/mod.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_to_public_output_composer_builder/mod.nr @@ -8,7 +8,7 @@ use dep::types::{ tests::fixture_builder::FixtureBuilder }; -struct TailToPublicOutputComposerBuilder { +pub struct TailToPublicOutputComposerBuilder { previous_kernel: FixtureBuilder, } diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_to_public_output_validator_builder.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_to_public_output_validator_builder.nr index 27ddb515eb7..d1a6a03b034 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_to_public_output_validator_builder.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_to_public_output_validator_builder.nr @@ -1,7 +1,7 @@ use crate::components::{tail_to_public_output_validator::TailToPublicOutputValidator}; use dep::types::tests::fixture_builder::FixtureBuilder; -struct TailToPublicOutputValidatorBuilder { +pub struct TailToPublicOutputValidatorBuilder { output: FixtureBuilder, previous_kernel: FixtureBuilder } @@ -24,4 +24,4 @@ impl TailToPublicOutputValidatorBuilder { } } -// TODO: Add tests. \ No newline at end of file +// TODO: Add tests. diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-app-logic-simulated/Nargo.toml b/noir-projects/noir-protocol-circuits/crates/public-kernel-app-logic-simulated/Nargo.toml deleted file mode 100644 index e986a1d7f0d..00000000000 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-app-logic-simulated/Nargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "public_kernel_app_logic_simulated" -type = "bin" -authors = [""] -compiler_version = ">=0.18.0" - -[dependencies] -types = { path = "../types" } -public_kernel_lib = { path = "../public-kernel-lib" } diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-app-logic-simulated/src/main.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-app-logic-simulated/src/main.nr deleted file mode 100644 index 1993752060a..00000000000 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-app-logic-simulated/src/main.nr +++ /dev/null @@ -1,6 +0,0 @@ -use dep::public_kernel_lib::PublicKernelAppLogicCircuitPrivateInputs; -use dep::types::PublicKernelCircuitPublicInputs; - -unconstrained fn main(input: PublicKernelAppLogicCircuitPrivateInputs) -> pub PublicKernelCircuitPublicInputs { - input.execute() -} diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-app-logic/src/main.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-app-logic/src/main.nr deleted file mode 100644 index 8f63370cc4b..00000000000 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-app-logic/src/main.nr +++ /dev/null @@ -1,7 +0,0 @@ -use dep::public_kernel_lib::PublicKernelAppLogicCircuitPrivateInputs; -use dep::types::PublicKernelCircuitPublicInputs; - -#[recursive] -fn main(input: PublicKernelAppLogicCircuitPrivateInputs) -> pub PublicKernelCircuitPublicInputs { - input.execute() -} diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-app-logic/Nargo.toml b/noir-projects/noir-protocol-circuits/crates/public-kernel-inner-simulated/Nargo.toml similarity index 81% rename from noir-projects/noir-protocol-circuits/crates/public-kernel-app-logic/Nargo.toml rename to noir-projects/noir-protocol-circuits/crates/public-kernel-inner-simulated/Nargo.toml index aeb65bd2e11..f2b452faa2b 100644 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-app-logic/Nargo.toml +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-inner-simulated/Nargo.toml @@ -1,5 +1,5 @@ [package] -name = "public_kernel_app_logic" +name = "public_kernel_inner_simulated" type = "bin" authors = [""] compiler_version = ">=0.18.0" diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-inner-simulated/src/main.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-inner-simulated/src/main.nr new file mode 100644 index 00000000000..dd9e32e681d --- /dev/null +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-inner-simulated/src/main.nr @@ -0,0 +1,6 @@ +use dep::public_kernel_lib::PublicKernelInnerCircuitPrivateInputs; +use dep::types::VMCircuitPublicInputs; + +unconstrained fn main(input: PublicKernelInnerCircuitPrivateInputs) -> pub VMCircuitPublicInputs { + input.execute() +} diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-setup/Nargo.toml b/noir-projects/noir-protocol-circuits/crates/public-kernel-inner/Nargo.toml similarity index 85% rename from noir-projects/noir-protocol-circuits/crates/public-kernel-setup/Nargo.toml rename to noir-projects/noir-protocol-circuits/crates/public-kernel-inner/Nargo.toml index 7ff8886bfdd..8455ddac0ce 100644 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-setup/Nargo.toml +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-inner/Nargo.toml @@ -1,5 +1,5 @@ [package] -name = "public_kernel_setup" +name = "public_kernel_inner" type = "bin" authors = [""] compiler_version = ">=0.18.0" diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-inner/src/main.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-inner/src/main.nr new file mode 100644 index 00000000000..a19659b00de --- /dev/null +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-inner/src/main.nr @@ -0,0 +1,7 @@ +use dep::public_kernel_lib::PublicKernelInnerCircuitPrivateInputs; +use dep::types::VMCircuitPublicInputs; + +#[recursive] +fn main(input: PublicKernelInnerCircuitPrivateInputs) -> pub VMCircuitPublicInputs { + input.execute() +} diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/enqueued_call_data_validator.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/enqueued_call_data_validator.nr new file mode 100644 index 00000000000..7688f780885 --- /dev/null +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/enqueued_call_data_validator.nr @@ -0,0 +1,141 @@ +use crate::public_kernel_phase::PublicKernelPhase; +use dep::types::{ + abis::{ + accumulated_data::PublicAccumulatedDataArrayLengths, + kernel_circuit_public_inputs::PublicKernelCircuitPublicInputs, enqueued_call_data::EnqueuedCallData, + public_call_request::PublicCallRequest, validation_requests::PublicValidationRequestArrayLengths +}, + utils::arrays::array_length +}; + +pub struct EnqueuedCallDataValidator { + enqueued_call: EnqueuedCallData, + phase: u8, +} + +impl EnqueuedCallDataValidator { + pub fn new(enqueued_call: EnqueuedCallData, phase: u8) -> Self { + EnqueuedCallDataValidator { enqueued_call, phase } + } + + pub fn validate_proof(_self: Self) { + // TODO + } + + pub fn validate(self) { + self.validate_revert_flag() + } + + pub fn validate_against_previous_kernel( + self, + previous_kernel: PublicKernelCircuitPublicInputs, + previous_validation_request_array_lengths: PublicValidationRequestArrayLengths, + previous_non_revertible_data_array_lengths: PublicAccumulatedDataArrayLengths, + previous_revertible_data_array_lengths: PublicAccumulatedDataArrayLengths + ) { + self.validate_global_variables(previous_kernel); + self.validate_against_call_request(previous_kernel); + self.validate_counters(previous_kernel); + self.validate_start_gas(previous_kernel); + self.validate_transaction_fee(previous_kernel); + self.validate_array_lengths( + previous_validation_request_array_lengths, + previous_non_revertible_data_array_lengths, + previous_revertible_data_array_lengths + ); + } + + fn validate_revert_flag(self) { + if self.phase == PublicKernelPhase.SETUP { + assert_eq(self.enqueued_call.data.reverted, false, "Public call cannot be reverted"); + } + } + + fn validate_global_variables(self, previous_kernel: PublicKernelCircuitPublicInputs) { + let prev_global_variables = previous_kernel.constants.global_variables; + if !prev_global_variables.is_empty() { // It's empty when the previous kernel is from private_kernel_tail_to_pubic. + let enqueued_call_globals = self.enqueued_call.data.constants.global_variables; + assert_eq( + enqueued_call_globals, prev_global_variables, "Global variables injected into the public call do not match constants" + ); + } + } + + fn validate_against_call_request(self, previous_kernel: PublicKernelCircuitPublicInputs) { + let call_request = if self.phase == PublicKernelPhase.SETUP { + let call_stack = previous_kernel.end_non_revertible.public_call_stack; + call_stack[array_length(call_stack) - 1] + } else if self.phase == PublicKernelPhase.APP_LOGIC { + let call_stack = previous_kernel.end.public_call_stack; + call_stack[array_length(call_stack) - 1] + } else if self.phase == PublicKernelPhase.TEARDOWN { + previous_kernel.public_teardown_call_request + } else { + assert(false, "Unknown phase"); + PublicCallRequest::empty() + }; + + assert( + self.enqueued_call.data.call_request == call_request, "enqueued call does not match item at the top of the call stack" + ); + } + + fn validate_counters(self, previous_kernel: PublicKernelCircuitPublicInputs) { + assert_eq( + self.enqueued_call.data.start_side_effect_counter, previous_kernel.end_side_effect_counter + 1, "enqueued call must start from the end counter of the previous call" + ); + } + + // Validates that the start gas injected into the vm circuit matches the remaining gas. + fn validate_start_gas(self, previous_kernel: PublicKernelCircuitPublicInputs) { + let enqueued_call_start_gas = self.enqueued_call.data.start_gas_left; + if self.phase != PublicKernelPhase.TEARDOWN { + // An enqueued call's start gas is the remaining gas left in the transaction after the previous kernel. + let tx_gas_limits = previous_kernel.constants.tx_context.gas_settings.gas_limits; + let computed_start_gas = tx_gas_limits.sub(previous_kernel.end.gas_used).sub(previous_kernel.end_non_revertible.gas_used); + assert_eq( + enqueued_call_start_gas, computed_start_gas, "Start gas for enqueued call does not match transaction gas left" + ); + } else { + let teardown_gas_limit = previous_kernel.constants.tx_context.gas_settings.teardown_gas_limits; + assert_eq( + enqueued_call_start_gas, teardown_gas_limit, "Start gas for enqueued call does not match teardown gas allocation" + ); + } + } + + fn validate_transaction_fee(self, previous_kernel: PublicKernelCircuitPublicInputs) { + let transaction_fee = self.enqueued_call.data.transaction_fee; + if self.phase != PublicKernelPhase.TEARDOWN { + assert_eq(transaction_fee, 0, "Transaction fee must be zero on setup and app phases"); + } else { + // Note that teardown_gas is already included in end.gas_used as it was injected by the private kernel + let total_gas_used = previous_kernel.end.gas_used + previous_kernel.end_non_revertible.gas_used; + let block_gas_fees = self.enqueued_call.data.constants.global_variables.gas_fees; + let inclusion_fee = previous_kernel.constants.tx_context.gas_settings.inclusion_fee; + let computed_transaction_fee = total_gas_used.compute_fee(block_gas_fees) + inclusion_fee; + assert( + transaction_fee == computed_transaction_fee, "Transaction fee on teardown phase does not match expected value" + ); + } + } + + fn validate_array_lengths( + self, + previous_validation_request_array_lengths: PublicValidationRequestArrayLengths, + previous_non_revertible_data_array_lengths: PublicAccumulatedDataArrayLengths, + previous_revertible_data_array_lengths: PublicAccumulatedDataArrayLengths + ) { + assert_eq( + self.enqueued_call.data.previous_validation_request_array_lengths, previous_validation_request_array_lengths, "mismatch previous_validation_request_array_lengths" + ); + let prev_lengths = if self.phase == PublicKernelPhase.SETUP { + previous_non_revertible_data_array_lengths + } else { + previous_revertible_data_array_lengths + }; + assert_eq( + self.enqueued_call.data.previous_accumulated_data_array_lengths, prev_lengths, "mismatch previoius_accumulated_data_array_lengths" + ); + } +} diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/mod.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/mod.nr index 3fad7634f8c..285b74fd9f0 100644 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/mod.nr +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/mod.nr @@ -1,5 +1,7 @@ +mod enqueued_call_data_validator; mod previous_kernel_validator; -mod public_call_data_validator; mod public_kernel_output_composer; +mod public_kernel_output_validator; mod public_tail_output_composer; mod public_tail_output_validator; +mod vm_circuit_output_composer; diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/previous_kernel_validator.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/previous_kernel_validator.nr index 42b748709db..3a53b0febcd 100644 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/previous_kernel_validator.nr +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/previous_kernel_validator.nr @@ -1,7 +1,7 @@ use crate::public_kernel_phase::PublicKernelPhase; use dep::types::abis::public_kernel_data::PublicKernelData; -struct PreviousKernelValidator { +pub struct PreviousKernelValidator { previous_kernel: PublicKernelData, } @@ -22,18 +22,18 @@ impl PreviousKernelValidator { pub fn validate_phase(self, phase: u8) { let public_inputs = self.previous_kernel.public_inputs; - let needs_setup = !public_inputs.end_non_revertible.public_call_stack[0].item.contract_address.is_zero(); + let needs_setup = !public_inputs.end_non_revertible.public_call_stack[0].contract_address.is_zero(); if phase == PublicKernelPhase.SETUP { assert_eq(needs_setup, true, "Cannot run unnecessary setup circuit"); } - let needs_app_logic = !public_inputs.end.public_call_stack[0].item.contract_address.is_zero(); + let needs_app_logic = !public_inputs.end.public_call_stack[0].contract_address.is_zero(); if phase == PublicKernelPhase.APP_LOGIC { assert_eq(needs_setup, false, "Cannot run app logic circuit before setup circuit"); assert_eq(needs_app_logic, true, "Cannot run unnecessary app logic circuit"); } - let needs_teardown = !public_inputs.public_teardown_call_stack[0].item.contract_address.is_zero(); + let needs_teardown = !public_inputs.public_teardown_call_request.contract_address.is_zero(); if phase == PublicKernelPhase.TEARDOWN { assert_eq(needs_setup, false, "Cannot run teardown circuit before setup circuit"); assert_eq(needs_app_logic, false, "Cannot run teardown circuit before app logic circuit"); diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_call_data_validator.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_call_data_validator.nr index c4b906c8d68..0969265f3dd 100644 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_call_data_validator.nr +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_call_data_validator.nr @@ -7,7 +7,7 @@ use dep::types::{ constants::MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, utils::arrays::array_length }; -struct PublicCallDataValidator { +pub struct PublicCallDataValidator { data: PublicCallData, phase: u8, } @@ -125,8 +125,7 @@ impl PublicCallDataValidator { } else if self.phase == PublicKernelPhase.TEARDOWN { previous_kernel.public_teardown_call_stack } else { - assert(false, "Unknown phase"); - [PublicCallRequest::empty(); MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX] + panic(f"Unknown phase") }; let call_request = call_stack[array_length(call_stack) - 1]; diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_kernel_output_composer.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_kernel_output_composer.nr index 094d013bc99..7f9964cacd2 100644 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_kernel_output_composer.nr +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_kernel_output_composer.nr @@ -7,13 +7,13 @@ use crate::{ use dep::types::{ abis::{ accumulated_data::PublicAccumulatedDataBuilder, - kernel_circuit_public_inputs::{PublicKernelCircuitPublicInputs, PublicKernelCircuitPublicInputsBuilder}, - public_circuit_public_inputs::PublicCircuitPublicInputs, public_data_read::PublicDataRead + kernel_circuit_public_inputs::{PublicKernelCircuitPublicInputs, PublicKernelCircuitPublicInputsBuilder, VMCircuitPublicInputs}, + public_call_request::PublicCallRequest }, - traits::is_empty, utils::arrays::array_to_bounded_vec + traits::is_empty }; -struct PublicKernelOutputComposer { +pub struct PublicKernelOutputComposer { output_builder: PublicKernelCircuitPublicInputsBuilder, } @@ -31,17 +31,18 @@ impl PublicKernelOutputComposer { let _ = self.output_builder.end.public_call_stack.pop(); } if phase == PublicKernelPhase.TEARDOWN { - let _ = self.output_builder.public_teardown_call_stack.pop(); + self.output_builder.public_teardown_call_request = PublicCallRequest::empty(); } *self } - pub fn propagate_from_public_call(&mut self, public_call: PublicCircuitPublicInputs, phase: u8) -> Self { - self.output_builder.constants.global_variables = public_call.global_variables; - self.propagate_revert_code(public_call, phase); - self.propagate_validation_requests(public_call); - self.propagate_accumulated_data(public_call, phase); - self.update_gas_used(public_call, phase); + pub fn propagate_from_enqueued_call(&mut self, enqueued_call: VMCircuitPublicInputs, phase: u8) -> Self { + self.output_builder.constants.global_variables = enqueued_call.constants.global_variables; + self.propagate_revert_code(enqueued_call, phase); + self.propagate_validation_requests(enqueued_call); + self.propagate_accumulated_data(enqueued_call, phase); + self.propagate_end_side_effect_counter(enqueued_call); + self.update_gas_used(enqueued_call, phase); *self } @@ -49,21 +50,17 @@ impl PublicKernelOutputComposer { self.output_builder.finish() } - fn propagate_revert_code(&mut self, public_call: PublicCircuitPublicInputs, phase: u8) { - let prev_revert_code = self.output_builder.revert_code; - let public_call_revert_code = public_call.revert_code; - if phase == PublicKernelPhase.SETUP { - // Keep prev_revert_code. - // public_call_revert_code should be 0. If not, PublicCallDataValidator > validate_revert_code will fail. - } - if phase == PublicKernelPhase.APP_LOGIC { - if prev_revert_code == 0 { - self.output_builder.revert_code = public_call_revert_code; + fn propagate_revert_code(&mut self, enqueued_call: VMCircuitPublicInputs, phase: u8) { + if enqueued_call.reverted { + let prev_revert_code = self.output_builder.revert_code; + if phase == PublicKernelPhase.SETUP { + // enqueued_call.reverted should be false. If not, EnqueuedCallDataValidator > validate_revert_flag will fail. } - } - if phase == PublicKernelPhase.TEARDOWN { - // See https://docs.aztec.network/protocol-specs/gas-and-fees/kernel-tracking#handling-reverts - if public_call_revert_code != 0 { + if phase == PublicKernelPhase.APP_LOGIC { + self.output_builder.revert_code = 1; + } + if phase == PublicKernelPhase.TEARDOWN { + // See https://docs.aztec.network/protocol-specs/gas-and-fees/kernel-tracking#handling-reverts self.output_builder.revert_code = if prev_revert_code == 0 { // Case where there is a new error in teardown 2 @@ -75,12 +72,11 @@ impl PublicKernelOutputComposer { } } - fn propagate_validation_requests(&mut self, public_call: PublicCircuitPublicInputs) { + fn propagate_validation_requests(&mut self, enqueued_call: VMCircuitPublicInputs) { + let data = enqueued_call.validation_requests; // Note that the public kernel cannot modify the max block number value - it simply forwards it to the rollup - let storage_contract_address = public_call.call_context.storage_contract_address; - - let note_hash_read_requests = public_call.note_hash_read_requests; + let note_hash_read_requests = data.note_hash_read_requests; for i in 0..note_hash_read_requests.len() { let request = note_hash_read_requests[i]; if !is_empty(request) { @@ -88,23 +84,23 @@ impl PublicKernelOutputComposer { } } - let nullifier_read_requests = public_call.nullifier_read_requests; + let nullifier_read_requests = data.nullifier_read_requests; for i in 0..nullifier_read_requests.len() { let request = nullifier_read_requests[i]; if !is_empty(request) { - self.output_builder.validation_requests.nullifier_read_requests.push(request.scope(storage_contract_address)); + self.output_builder.validation_requests.nullifier_read_requests.push(request); } } - let nullifier_non_existent_read_requests = public_call.nullifier_non_existent_read_requests; + let nullifier_non_existent_read_requests = data.nullifier_non_existent_read_requests; for i in 0..nullifier_non_existent_read_requests.len() { let request = nullifier_non_existent_read_requests[i]; if !is_empty(request) { - self.output_builder.validation_requests.nullifier_non_existent_read_requests.push(request.scope(storage_contract_address)); + self.output_builder.validation_requests.nullifier_non_existent_read_requests.push(request); } } - let l1_to_l2_msg_read_requests = public_call.l1_to_l2_msg_read_requests; + let l1_to_l2_msg_read_requests = data.l1_to_l2_msg_read_requests; for i in 0..l1_to_l2_msg_read_requests.len() { let request = l1_to_l2_msg_read_requests[i]; if !is_empty(request) { @@ -112,70 +108,46 @@ impl PublicKernelOutputComposer { } } - let read_requests = public_call.contract_storage_reads; + let read_requests = data.public_data_reads; for i in 0..read_requests.len() { let read_request = read_requests[i]; if !is_empty(read_request) { - self.output_builder.validation_requests.public_data_reads.push(PublicDataRead::from_contract_storage_read(storage_contract_address, read_request)); + self.output_builder.validation_requests.public_data_reads.push(read_request); } } } - fn propagate_accumulated_data(&mut self, public_call: PublicCircuitPublicInputs, phase: u8) { - let revert_in_phase = (self.output_builder.revert_code != 0) - & ((phase != PublicKernelPhase.TEARDOWN) | (self.output_builder.revert_code != 1)); // Revert in APP_LOGIC - + fn propagate_accumulated_data(&mut self, enqueued_call: VMCircuitPublicInputs, phase: u8) { if phase == PublicKernelPhase.SETUP { - self.output_builder.end_non_revertible = propagate_accumulated_data(&mut self.output_builder.end_non_revertible, public_call); + self.output_builder.end_non_revertible = propagate_accumulated_data(&mut self.output_builder.end_non_revertible, enqueued_call.accumulated_data); } if (phase == PublicKernelPhase.APP_LOGIC) | (phase == PublicKernelPhase.TEARDOWN) { - self.output_builder.end = propagate_accumulated_data(&mut self.output_builder.end, public_call); + self.output_builder.end = propagate_accumulated_data(&mut self.output_builder.end, enqueued_call.accumulated_data); } // TODO: Should keep the data even when reverts. // The data is required for verifying validation requests in the tail circuit, which will then discard the // revertible data. + let revert_in_phase = (self.output_builder.revert_code != 0) + & ((phase != PublicKernelPhase.TEARDOWN) | (self.output_builder.revert_code != 1)); // Revert in APP_LOGIC if revert_in_phase { + let gas_used = self.output_builder.end.gas_used; self.output_builder.end = PublicAccumulatedDataBuilder::empty(); - if phase == PublicKernelPhase.TEARDOWN { - self.output_builder.public_teardown_call_stack = BoundedVec::new(); - } - } - if !revert_in_phase { - self.propagate_call_requests(public_call, phase); + self.output_builder.end.gas_used = gas_used; } } - fn propagate_call_requests(&mut self, public_call: PublicCircuitPublicInputs, phase: u8) { - let call_requests = array_to_bounded_vec(public_call.public_call_requests); - - // TODO: Insert call requests in reversed order. - if phase == PublicKernelPhase.SETUP { - self.output_builder.end_non_revertible.public_call_stack.extend_from_bounded_vec(call_requests); - } - if phase == PublicKernelPhase.APP_LOGIC { - self.output_builder.end.public_call_stack.extend_from_bounded_vec(call_requests); - } - if phase == PublicKernelPhase.TEARDOWN { - self.output_builder.public_teardown_call_stack.extend_from_bounded_vec(call_requests); - } + fn propagate_end_side_effect_counter(&mut self, enqueued_call: VMCircuitPublicInputs) { + self.output_builder.end_side_effect_counter = enqueued_call.end_side_effect_counter; } - fn update_gas_used(&mut self, public_call: PublicCircuitPublicInputs, phase: u8) { - let tx_gas_limits = self.output_builder.constants.tx_context.gas_settings.gas_limits; - let call_gas_left = public_call.end_gas_left; + fn update_gas_used(&mut self, enqueued_call: VMCircuitPublicInputs, phase: u8) { + let call_gas_used = enqueued_call.accumulated_data.gas_used; if phase == PublicKernelPhase.SETUP { - let accum_end_gas_used = self.output_builder.end.gas_used; - self.output_builder.end_non_revertible.gas_used = tx_gas_limits - .sub(call_gas_left) - .sub(accum_end_gas_used); + self.output_builder.end_non_revertible.gas_used += call_gas_used; } - if phase == PublicKernelPhase.APP_LOGIC { - let accum_end_non_revertible_gas_used = self.output_builder.end_non_revertible.gas_used; - self.output_builder.end.gas_used = tx_gas_limits - .sub(call_gas_left) - .sub(accum_end_non_revertible_gas_used); + self.output_builder.end.gas_used += call_gas_used; } } } diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_kernel_output_composer/propagate_accumulated_data.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_kernel_output_composer/propagate_accumulated_data.nr index b1d6c05a13b..8b024825d8b 100644 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_kernel_output_composer/propagate_accumulated_data.nr +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_kernel_output_composer/propagate_accumulated_data.nr @@ -1,80 +1,72 @@ -use dep::types::{ - abis::{ - accumulated_data::PublicAccumulatedDataBuilder, nullifier::Nullifier, - public_circuit_public_inputs::PublicCircuitPublicInputs, - public_data_update_request::PublicDataUpdateRequest -}, - hash::compute_siloed_nullifier -}; +use dep::types::{abis::{accumulated_data::{PublicAccumulatedData, PublicAccumulatedDataBuilder}}}; pub fn propagate_accumulated_data( data: &mut PublicAccumulatedDataBuilder, - public_call: PublicCircuitPublicInputs + from_data: PublicAccumulatedData ) -> PublicAccumulatedDataBuilder { - propagate_note_hashes(data, public_call); - propagate_nullifiers(data, public_call); - propagate_l2_to_l1_messages(data, public_call); - propagate_unencrypted_logs(data, public_call); - propagate_public_data_writes(data, public_call); + propagate_note_hashes(data, from_data); + propagate_nullifiers(data, from_data); + propagate_l2_to_l1_messages(data, from_data); + propagate_unencrypted_logs(data, from_data); + propagate_public_data_writes(data, from_data); *data } -fn propagate_note_hashes(data: &mut PublicAccumulatedDataBuilder, public_call: PublicCircuitPublicInputs) { - let storage_contract_address = public_call.call_context.storage_contract_address; - let note_hashes = public_call.note_hashes; +fn propagate_note_hashes(data: &mut PublicAccumulatedDataBuilder, from_data: PublicAccumulatedData) { + let note_hashes = from_data.note_hashes; for i in 0..note_hashes.len() { let note_hash = note_hashes[i]; - if note_hash.counter != 0 { - data.note_hashes.push(note_hash.scope(storage_contract_address)); + if note_hash.counter() != 0 { + data.note_hashes.push(note_hash); } } } -fn propagate_nullifiers(data: &mut PublicAccumulatedDataBuilder, public_call: PublicCircuitPublicInputs) { - let storage_contract_address = public_call.call_context.storage_contract_address; - let nullifiers = public_call.nullifiers; +fn propagate_nullifiers(data: &mut PublicAccumulatedDataBuilder, from_data: PublicAccumulatedData) { + let nullifiers = from_data.nullifiers; for i in 0..nullifiers.len() { let nullifier = nullifiers[i]; - if nullifier.counter != 0 { - let siloed_value = compute_siloed_nullifier(storage_contract_address, nullifier.value); - data.nullifiers.push( - Nullifier { value: siloed_value, counter: nullifier.counter, note_hash: nullifier.note_hash } - ); + if nullifier.counter() != 0 { + data.nullifiers.push(nullifier); } } } -fn propagate_l2_to_l1_messages(data: &mut PublicAccumulatedDataBuilder, public_call: PublicCircuitPublicInputs) { - let storage_contract_address = public_call.call_context.storage_contract_address; - let msgs = public_call.l2_to_l1_msgs; +fn propagate_l2_to_l1_messages( + data: &mut PublicAccumulatedDataBuilder, + from_data: PublicAccumulatedData +) { + let msgs = from_data.l2_to_l1_msgs; for i in 0..msgs.len() { let msg = msgs[i]; - if msg.counter != 0 { - data.l2_to_l1_msgs.push(msg.scope(storage_contract_address)); + if msg.counter() != 0 { + data.l2_to_l1_msgs.push(msg); } } } -fn propagate_unencrypted_logs(data: &mut PublicAccumulatedDataBuilder, public_call: PublicCircuitPublicInputs) { - let storage_contract_address = public_call.call_context.storage_contract_address; - let logs = public_call.unencrypted_logs_hashes; +fn propagate_unencrypted_logs( + data: &mut PublicAccumulatedDataBuilder, + from_data: PublicAccumulatedData +) { + let logs = from_data.unencrypted_logs_hashes; for i in 0..logs.len() { let log = logs[i]; - if log.counter != 0 { - data.unencrypted_logs_hashes.push(log.scope(storage_contract_address)); + if log.counter() != 0 { + data.unencrypted_logs_hashes.push(log); } } } -fn propagate_public_data_writes(data: &mut PublicAccumulatedDataBuilder, public_call: PublicCircuitPublicInputs) { - let storage_contract_address = public_call.call_context.storage_contract_address; - let writes = public_call.contract_storage_update_requests; +fn propagate_public_data_writes( + data: &mut PublicAccumulatedDataBuilder, + from_data: PublicAccumulatedData +) { + let writes = from_data.public_data_update_requests; for i in 0..writes.len() { let write = writes[i]; - if write.counter != 0 { - data.public_data_update_requests.push( - PublicDataUpdateRequest::from_contract_storage_update_request(storage_contract_address, write) - ); + if write.counter() != 0 { + data.public_data_update_requests.push(write); } } } diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_kernel_output_validator.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_kernel_output_validator.nr new file mode 100644 index 00000000000..9894230f6fc --- /dev/null +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_kernel_output_validator.nr @@ -0,0 +1,376 @@ +use crate::{public_kernel_phase::PublicKernelPhase}; +use dep::types::{ + abis::{ + accumulated_data::public_accumulated_data::{PublicAccumulatedData, PublicAccumulatedDataArrayLengths}, + kernel_circuit_public_inputs::{PublicKernelCircuitPublicInputs, VMCircuitPublicInputs}, + validation_requests::public_validation_requests::PublicValidationRequestArrayLengths +}, + traits::is_empty, utils::arrays::{array_length, assert_array_appended, assert_array_prepended} +}; + +pub struct PublicKernelOutputValidator { + output: PublicKernelCircuitPublicInputs, + previous_kernel: PublicKernelCircuitPublicInputs, + enqueued_call: VMCircuitPublicInputs, + phase: u8, + revertible: bool, + previous_validation_request_array_lengths: PublicValidationRequestArrayLengths, + previous_non_revertible_data_array_lengths: PublicAccumulatedDataArrayLengths, + previous_revertible_data_array_lengths: PublicAccumulatedDataArrayLengths +} + +impl PublicKernelOutputValidator { + pub fn new( + output: PublicKernelCircuitPublicInputs, + previous_kernel: PublicKernelCircuitPublicInputs, + enqueued_call: VMCircuitPublicInputs, + phase: u8 + ) -> Self { + let revertible = phase != PublicKernelPhase.SETUP; + let previous_validation_request_array_lengths = PublicValidationRequestArrayLengths::new(previous_kernel.validation_requests); + let previous_non_revertible_data_array_lengths = PublicAccumulatedDataArrayLengths::new(previous_kernel.end_non_revertible); + let previous_revertible_data_array_lengths = PublicAccumulatedDataArrayLengths::new(previous_kernel.end); + PublicKernelOutputValidator { + output, + previous_kernel, + enqueued_call, + phase, + revertible, + previous_validation_request_array_lengths, + previous_non_revertible_data_array_lengths, + previous_revertible_data_array_lengths + } + } + + pub fn validate(self) { + self.validate_constants(); + self.validate_validation_requests(); + self.validate_accumulated_data(); + self.validate_end_side_effect_counter(); + self.validate_public_teardown_call_request(); + self.validate_fee_payer(); + self.validate_revert_code(); + } + + fn validate_constants(self) { + let prev = self.previous_kernel.constants; + let out = self.output.constants; + assert_eq(out.historical_header, prev.historical_header, "mismatch historical_header"); + assert_eq(out.tx_context, prev.tx_context, "mismatch tx_context"); + assert_eq(out.vk_tree_root, prev.vk_tree_root, "mismatch vk_tree_root"); + assert_eq( + out.global_variables, self.enqueued_call.constants.global_variables, "mismatch global_variables" + ); + } + + fn validate_public_teardown_call_request(self) { + let out = self.output.public_teardown_call_request; + if self.phase == PublicKernelPhase.TEARDOWN { + assert(is_empty(out), "public_teardown_call_request must be empty after teardown"); + } else { + assert_eq( + out, self.previous_kernel.public_teardown_call_request, "mismatch public_teardown_call_request" + ); + } + } + + fn validate_fee_payer(self) { + assert_eq(self.output.fee_payer, self.previous_kernel.fee_payer, "mismatch fee payer"); + } + + fn validate_validation_requests(self) { + self.validate_validation_requests_from_previous_kernel(); + self.validate_validation_requests_from_enqueued_call(); + } + + fn validate_validation_requests_from_previous_kernel(self) { + let out = self.output.validation_requests; + let prev = self.previous_kernel.validation_requests; + let prev_lengths = self.previous_validation_request_array_lengths; + + assert_eq(out.for_rollup, prev.for_rollup); + + assert_array_prepended( + out.note_hash_read_requests, + prev.note_hash_read_requests, + prev_lengths.note_hash_read_requests + ); + + assert_array_prepended( + out.nullifier_read_requests, + prev.nullifier_read_requests, + prev_lengths.nullifier_read_requests + ); + + assert_array_prepended( + out.nullifier_non_existent_read_requests, + prev.nullifier_non_existent_read_requests, + prev_lengths.nullifier_non_existent_read_requests + ); + + assert_array_prepended( + out.l1_to_l2_msg_read_requests, + prev.l1_to_l2_msg_read_requests, + prev_lengths.l1_to_l2_msg_read_requests + ); + + assert_array_prepended( + out.public_data_reads, + prev.public_data_reads, + prev_lengths.public_data_reads + ); + } + + fn validate_validation_requests_from_enqueued_call(self) { + let out = self.output.validation_requests; + let curr = self.enqueued_call.validation_requests; + let curr_lengths = PublicValidationRequestArrayLengths::new(curr); + let prev_lengths = self.previous_validation_request_array_lengths; + + // Note that the enqueued call cannot modify the max block number value - it simply forwards it to the rollup. + + assert_array_appended( + out.note_hash_read_requests, + curr.note_hash_read_requests, + curr_lengths.note_hash_read_requests, + prev_lengths.note_hash_read_requests + ); + + assert_array_appended( + out.nullifier_read_requests, + curr.nullifier_read_requests, + curr_lengths.nullifier_read_requests, + prev_lengths.nullifier_read_requests + ); + + assert_array_appended( + out.nullifier_non_existent_read_requests, + curr.nullifier_non_existent_read_requests, + curr_lengths.nullifier_non_existent_read_requests, + prev_lengths.nullifier_non_existent_read_requests + ); + + assert_array_appended( + out.l1_to_l2_msg_read_requests, + curr.l1_to_l2_msg_read_requests, + curr_lengths.l1_to_l2_msg_read_requests, + prev_lengths.l1_to_l2_msg_read_requests + ); + + assert_array_appended( + out.public_data_reads, + curr.public_data_reads, + curr_lengths.public_data_reads, + prev_lengths.public_data_reads + ); + } + + fn validate_accumulated_data(self) { + // TODO: Should keep the data even when reverts. + let revert_in_phase = (self.output.revert_code != 0) + & ((self.phase != PublicKernelPhase.TEARDOWN) | (self.output.revert_code != 1)); // Revert in APP_LOGIC + + self.validate_accumulated_data_from_private(revert_in_phase); + self.validate_combined_accumulated_data(revert_in_phase); + self.validate_gas_used(); + } + + fn validate_accumulated_data_from_private(self, revert_in_phase: bool) { + let out = self.output.end_non_revertible; + let prev = self.previous_kernel.end_non_revertible; + assert_eq( + out.note_encrypted_logs_hashes, prev.note_encrypted_logs_hashes, "mismatch non-revertible note_encrypted_logs_hashes" + ); + assert_eq( + out.encrypted_logs_hashes, prev.encrypted_logs_hashes, "mismatch non-revertible encrypted_logs_hashes" + ); + + let out = self.output.end; + let prev = self.previous_kernel.end; + if revert_in_phase { + assert_eq( + array_length(out.note_encrypted_logs_hashes), 0, "revertible note_encrypted_logs_hashes must be cleared after revert" + ); + assert_eq( + array_length(out.encrypted_logs_hashes), 0, "revertible encrypted_logs_hashes must be cleared after revert" + ); + } else { + assert_eq( + out.note_encrypted_logs_hashes, prev.note_encrypted_logs_hashes, "mismatch revertible note_encrypted_logs_hashes" + ); + assert_eq( + out.encrypted_logs_hashes, prev.encrypted_logs_hashes, "mismatch revertible encrypted_logs_hashes" + ); + } + } + + fn validate_combined_accumulated_data(self, revert_in_phase: bool) { + // Prepended from previous kernel. + let out_non_revertible = self.output.end_non_revertible; + let out_revertible = self.output.end; + let prev_non_revertible = self.previous_kernel.end_non_revertible; + let prev_revertible = self.previous_kernel.end; + let mut prev_non_revertible_lengths = self.previous_non_revertible_data_array_lengths; + let mut prev_revertible_lengths = self.previous_revertible_data_array_lengths; + let empty_lengths = PublicAccumulatedDataArrayLengths::empty(); + + if self.phase == PublicKernelPhase.SETUP { + prev_non_revertible_lengths.public_call_stack -= 1; + } else if self.phase == PublicKernelPhase.APP_LOGIC { + prev_revertible_lengths.public_call_stack -= 1; + } + + self.validate_prepended_accumulated_data( + out_non_revertible, + prev_non_revertible, + prev_non_revertible_lengths + ); + let prepended_revertible_lengths = if revert_in_phase { + empty_lengths + } else { + prev_revertible_lengths + }; + self.validate_prepended_accumulated_data(out_revertible, prev_revertible, prepended_revertible_lengths); + + // Appended from enqueued call. + let curr_data = self.enqueued_call.accumulated_data; + let curr_lengths = PublicAccumulatedDataArrayLengths::new(curr_data); + let appended_non_revertible_lengths = if self.revertible { + empty_lengths + } else { + curr_lengths + }; + let appended_revertible_lengths = if self.revertible & !revert_in_phase { + curr_lengths + } else { + empty_lengths + }; + self.validate_appended_accumulated_data( + out_non_revertible, + curr_data, + prev_non_revertible_lengths, + appended_non_revertible_lengths + ); + self.validate_appended_accumulated_data( + out_revertible, + curr_data, + prev_revertible_lengths, + appended_revertible_lengths + ); + } + + fn validate_prepended_accumulated_data( + _self: Self, + out: PublicAccumulatedData, + prev: PublicAccumulatedData, + lengths: PublicAccumulatedDataArrayLengths + ) { + assert_array_prepended(out.note_hashes, prev.note_hashes, lengths.note_hashes); + assert_array_prepended(out.nullifiers, prev.nullifiers, lengths.nullifiers); + assert_array_prepended(out.l2_to_l1_msgs, prev.l2_to_l1_msgs, lengths.l2_to_l1_msgs); + assert_array_prepended( + out.unencrypted_logs_hashes, + prev.unencrypted_logs_hashes, + lengths.unencrypted_logs_hashes + ); + assert_array_prepended( + out.public_data_update_requests, + prev.public_data_update_requests, + lengths.public_data_update_requests + ); + assert_array_prepended( + out.public_call_stack, + prev.public_call_stack, + lengths.public_call_stack + ); + } + + fn validate_appended_accumulated_data( + _self: Self, + out: PublicAccumulatedData, + curr: PublicAccumulatedData, + prev_lengths: PublicAccumulatedDataArrayLengths, + curr_lengths: PublicAccumulatedDataArrayLengths + ) { + assert_array_appended( + out.note_hashes, + curr.note_hashes, + curr_lengths.note_hashes, + prev_lengths.note_hashes + ); + assert_array_appended( + out.nullifiers, + curr.nullifiers, + curr_lengths.nullifiers, + prev_lengths.nullifiers + ); + assert_array_appended( + out.l2_to_l1_msgs, + curr.l2_to_l1_msgs, + curr_lengths.l2_to_l1_msgs, + prev_lengths.l2_to_l1_msgs + ); + assert_array_appended( + out.unencrypted_logs_hashes, + curr.unencrypted_logs_hashes, + curr_lengths.unencrypted_logs_hashes, + prev_lengths.unencrypted_logs_hashes + ); + assert_array_appended( + out.public_data_update_requests, + curr.public_data_update_requests, + curr_lengths.public_data_update_requests, + prev_lengths.public_data_update_requests + ); + } + + fn validate_gas_used(self) { + let out_non_revertible_gas_used = self.output.end_non_revertible.gas_used; + let out_revertible_gas_used = self.output.end.gas_used; + let curr_gas_used = self.enqueued_call.accumulated_data.gas_used; + let mut expected_non_revertible_gas_used = self.previous_kernel.end_non_revertible.gas_used; + let mut expected_revertible_gas_used = self.previous_kernel.end.gas_used; + if self.phase == PublicKernelPhase.SETUP { + expected_non_revertible_gas_used += curr_gas_used; + } else if self.phase == PublicKernelPhase.APP_LOGIC { + expected_revertible_gas_used += curr_gas_used; + } + assert_eq( + out_non_revertible_gas_used, expected_non_revertible_gas_used, "wrong non-revertible gas used" + ); + assert_eq(out_revertible_gas_used, expected_revertible_gas_used, "wrong revertible gas used"); + } + + fn validate_end_side_effect_counter(self) { + assert_eq( + self.output.end_side_effect_counter, self.enqueued_call.end_side_effect_counter, "mismatch end_side_effect_counter" + ); + } + + fn validate_revert_code(self) { + if self.phase == PublicKernelPhase.SETUP { + // enqueued_call.reverted should be false. If not, EnqueuedCallDataValidator > validate_revert_flag will fail. + assert_eq(self.output.revert_code, 0, "expected revert code to be 0"); + } + + let prev = self.previous_kernel.revert_code; + let out = self.output.revert_code; + if !self.enqueued_call.reverted { + assert_eq(out, prev, "mismatch revert code"); + } else { + if self.phase == PublicKernelPhase.APP_LOGIC { + assert_eq(out, 1, "expected revert code to be 1"); + } + if self.phase == PublicKernelPhase.TEARDOWN { + // See https://docs.aztec.network/protocol-specs/gas-and-fees/kernel-tracking#handling-reverts + if prev == 0 { + // Case where there is a new error in teardown + assert_eq(out, 2, "expected revert code to be 2"); + } else { + // Case where there is an error in both app logic and teardown + assert_eq(out, 3, "expected revert code to be 3"); + }; + } + } + } +} diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_tail_output_composer.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_tail_output_composer.nr index f107f99ad11..e3756c8304d 100644 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_tail_output_composer.nr +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_tail_output_composer.nr @@ -12,7 +12,7 @@ use dep::types::{ data::PublicDataLeafHint, partial_state_reference::PartialStateReference }; -struct PublicTailOutputComposer { +pub struct PublicTailOutputComposer { previous_kernel: PublicKernelCircuitPublicInputs, start_state: PartialStateReference, public_data_leaf_hints: [PublicDataLeafHint; NUM_PUBLIC_DATA_LEAVES], diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_tail_output_composer/generate_output_hints.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_tail_output_composer/generate_output_hints.nr index 8938c0e166c..f73a491339b 100644 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_tail_output_composer/generate_output_hints.nr +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_tail_output_composer/generate_output_hints.nr @@ -16,7 +16,7 @@ use dep::types::{ utils::arrays::{array_merge, CombinedOrderHint, get_combined_order_hints_asc, sort_by_counter_asc, SortedResult} }; -struct SiloedNoteHashHint { +pub struct SiloedNoteHashHint { siloed_note_hash: Field, index: u32, } @@ -33,7 +33,7 @@ impl Eq for SiloedNoteHashHint { } } -struct OutputHints { +pub struct OutputHints { siloed_note_hashes: [Field; MAX_NOTE_HASHES_PER_TX], siloed_note_hash_hints: [SiloedNoteHashHint; MAX_NOTE_HASHES_PER_TX], sorted_note_hash_hints: [CombinedOrderHint; MAX_NOTE_HASHES_PER_TX], diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_tail_output_composer/generate_overridable_public_data_writes.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_tail_output_composer/generate_overridable_public_data_writes.nr index 9ecb9d69902..143214a6b22 100644 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_tail_output_composer/generate_overridable_public_data_writes.nr +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_tail_output_composer/generate_overridable_public_data_writes.nr @@ -3,7 +3,7 @@ use dep::types::{ data::OverridablePublicDataTreeLeaf, traits::Empty, utils::arrays::{array_length, find_index_hint} }; -struct LinkedIndexHint { +pub struct LinkedIndexHint { is_first_write: bool, prev_index: u32, } diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_tail_output_composer/generate_public_data_leaves.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_tail_output_composer/generate_public_data_leaves.nr index 6df5c91dc6d..d3eeb603d92 100644 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_tail_output_composer/generate_public_data_leaves.nr +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_tail_output_composer/generate_public_data_leaves.nr @@ -4,7 +4,7 @@ use dep::types::{ utils::arrays::{get_sorted_result, SortedResult} }; -struct SlotIndex { +pub struct SlotIndex { slot: Field, index: u32, counter: u32, diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_tail_output_validator.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_tail_output_validator.nr index 4f6afcd9f52..97601499165 100644 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_tail_output_validator.nr +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/public_tail_output_validator.nr @@ -24,7 +24,7 @@ use dep::types::{ } }; -struct PublicTailOutputValidator { +pub struct PublicTailOutputValidator { output: KernelCircuitPublicInputs, previous_kernel: PublicKernelCircuitPublicInputs, start_state: PartialStateReference, diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/vm_circuit_output_composer.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/vm_circuit_output_composer.nr new file mode 100644 index 00000000000..eddc54ea0c2 --- /dev/null +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/vm_circuit_output_composer.nr @@ -0,0 +1,161 @@ +mod propagate_accumulated_data; + +use crate::{components::vm_circuit_output_composer::propagate_accumulated_data::propagate_accumulated_data}; +use dep::types::{ + abis::{ + accumulated_data::{PublicAccumulatedDataArrayLengths, PublicAccumulatedDataBuilder}, + combined_constant_data::CombinedConstantData, gas::Gas, + kernel_circuit_public_inputs::vm_circuit_public_inputs::VMCircuitPublicInputs, + public_call_request::PublicCallRequest, public_circuit_public_inputs::PublicCircuitPublicInputs, + public_data_read::PublicDataRead, public_inner_call_request::PublicInnerCallRequest, + validation_requests::{ + PublicValidationRequestArrayLengths, + public_validation_requests_builder::PublicValidationRequestsBuilder +} +}, + constants::MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, traits::is_empty, + utils::arrays::array_to_bounded_vec +}; + +// TODO(#7124): To be deprecated. +pub struct VMCircuitOutputComposer { + constants: CombinedConstantData, + call_request: PublicCallRequest, + public_call_stack: BoundedVec, + previous_validation_request_array_lengths: PublicValidationRequestArrayLengths, + validation_requests: PublicValidationRequestsBuilder, + previous_accumulated_data_array_lengths: PublicAccumulatedDataArrayLengths, + accumulated_data: PublicAccumulatedDataBuilder, + start_side_effect_counter: u32, + end_side_effect_counter: u32, + start_gas_left: Gas, + transaction_fee: Field, + reverted: bool, +} + +impl VMCircuitOutputComposer { + pub fn new_from_previous_kernel(previous_kernel: VMCircuitPublicInputs) -> Self { + let mut public_call_stack = array_to_bounded_vec(previous_kernel.public_call_stack); + let _ = public_call_stack.pop(); + let validation_requests = PublicValidationRequestsBuilder::new(previous_kernel.validation_requests); + let accumulated_data = PublicAccumulatedDataBuilder::new(previous_kernel.accumulated_data); + VMCircuitOutputComposer { + constants: previous_kernel.constants, + call_request: previous_kernel.call_request, + public_call_stack, + previous_validation_request_array_lengths: previous_kernel.previous_validation_request_array_lengths, + validation_requests, + previous_accumulated_data_array_lengths: previous_kernel.previous_accumulated_data_array_lengths, + accumulated_data, + start_side_effect_counter: previous_kernel.start_side_effect_counter, + end_side_effect_counter: previous_kernel.end_side_effect_counter, + start_gas_left: previous_kernel.start_gas_left, + transaction_fee: previous_kernel.transaction_fee, + reverted: previous_kernel.reverted + } + } + + pub fn propagate_from_public_call(&mut self, public_call: PublicCircuitPublicInputs) -> Self { + self.constants.global_variables = public_call.global_variables; + self.propagate_revert_flag(public_call); + self.propagate_validation_requests(public_call); + self.propagate_accumulated_data(public_call); + self.propagate_end_side_effect_counter(public_call); + // Other values should be the same through out the entire enqueued call. + *self + } + + pub fn finish(self) -> VMCircuitPublicInputs { + VMCircuitPublicInputs { + constants: self.constants, + call_request: self.call_request, + public_call_stack: self.public_call_stack.storage, + previous_validation_request_array_lengths: self.previous_validation_request_array_lengths, + validation_requests: self.validation_requests.finish(), + previous_accumulated_data_array_lengths: self.previous_accumulated_data_array_lengths, + accumulated_data: self.accumulated_data.finish(), + start_side_effect_counter: self.start_side_effect_counter, + end_side_effect_counter: self.end_side_effect_counter, + start_gas_left: self.start_gas_left, + transaction_fee: self.transaction_fee, + reverted: self.reverted + } + } + + fn propagate_revert_flag(&mut self, public_call: PublicCircuitPublicInputs) { + if !self.reverted { + self.reverted = public_call.revert_code != 0; + } + } + + fn propagate_validation_requests(&mut self, public_call: PublicCircuitPublicInputs) { + // Note that the public kernel cannot modify the max block number value - it simply forwards it to the rollup + + let storage_contract_address = public_call.call_context.storage_contract_address; + + let note_hash_read_requests = public_call.note_hash_read_requests; + for i in 0..note_hash_read_requests.len() { + let request = note_hash_read_requests[i]; + if !is_empty(request) { + self.validation_requests.note_hash_read_requests.push(request); + } + } + + let nullifier_read_requests = public_call.nullifier_read_requests; + for i in 0..nullifier_read_requests.len() { + let request = nullifier_read_requests[i]; + if !is_empty(request) { + self.validation_requests.nullifier_read_requests.push(request.scope(storage_contract_address)); + } + } + + let nullifier_non_existent_read_requests = public_call.nullifier_non_existent_read_requests; + for i in 0..nullifier_non_existent_read_requests.len() { + let request = nullifier_non_existent_read_requests[i]; + if !is_empty(request) { + self.validation_requests.nullifier_non_existent_read_requests.push(request.scope(storage_contract_address)); + } + } + + let l1_to_l2_msg_read_requests = public_call.l1_to_l2_msg_read_requests; + for i in 0..l1_to_l2_msg_read_requests.len() { + let request = l1_to_l2_msg_read_requests[i]; + if !is_empty(request) { + self.validation_requests.l1_to_l2_msg_read_requests.push(request); + } + } + + let read_requests = public_call.contract_storage_reads; + for i in 0..read_requests.len() { + let read_request = read_requests[i]; + if !is_empty(read_request) { + self.validation_requests.public_data_reads.push(PublicDataRead::from_contract_storage_read(storage_contract_address, read_request)); + } + } + } + + fn propagate_accumulated_data(&mut self, public_call: PublicCircuitPublicInputs) { + // TODO: Should keep the data even when reverts. + // The data is required for verifying validation requests in the tail circuit, which will then discard the + // revertible data. + if self.reverted { + self.accumulated_data = PublicAccumulatedDataBuilder::empty(); + } else { + self.accumulated_data = propagate_accumulated_data(&mut self.accumulated_data, public_call); + self.propagate_call_requests(public_call); + } + + self.accumulated_data.gas_used += public_call.start_gas_left.sub(public_call.end_gas_left); + } + + fn propagate_call_requests(&mut self, public_call: PublicCircuitPublicInputs) { + let call_requests = array_to_bounded_vec(public_call.public_call_requests); + self.public_call_stack.extend_from_bounded_vec(call_requests); + } + + fn propagate_end_side_effect_counter(&mut self, public_call: PublicCircuitPublicInputs) { + if public_call.end_side_effect_counter > self.end_side_effect_counter { + self.end_side_effect_counter = public_call.end_side_effect_counter; + } + } +} diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/vm_circuit_output_composer/propagate_accumulated_data.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/vm_circuit_output_composer/propagate_accumulated_data.nr new file mode 100644 index 00000000000..b1d6c05a13b --- /dev/null +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/components/vm_circuit_output_composer/propagate_accumulated_data.nr @@ -0,0 +1,80 @@ +use dep::types::{ + abis::{ + accumulated_data::PublicAccumulatedDataBuilder, nullifier::Nullifier, + public_circuit_public_inputs::PublicCircuitPublicInputs, + public_data_update_request::PublicDataUpdateRequest +}, + hash::compute_siloed_nullifier +}; + +pub fn propagate_accumulated_data( + data: &mut PublicAccumulatedDataBuilder, + public_call: PublicCircuitPublicInputs +) -> PublicAccumulatedDataBuilder { + propagate_note_hashes(data, public_call); + propagate_nullifiers(data, public_call); + propagate_l2_to_l1_messages(data, public_call); + propagate_unencrypted_logs(data, public_call); + propagate_public_data_writes(data, public_call); + *data +} + +fn propagate_note_hashes(data: &mut PublicAccumulatedDataBuilder, public_call: PublicCircuitPublicInputs) { + let storage_contract_address = public_call.call_context.storage_contract_address; + let note_hashes = public_call.note_hashes; + for i in 0..note_hashes.len() { + let note_hash = note_hashes[i]; + if note_hash.counter != 0 { + data.note_hashes.push(note_hash.scope(storage_contract_address)); + } + } +} + +fn propagate_nullifiers(data: &mut PublicAccumulatedDataBuilder, public_call: PublicCircuitPublicInputs) { + let storage_contract_address = public_call.call_context.storage_contract_address; + let nullifiers = public_call.nullifiers; + for i in 0..nullifiers.len() { + let nullifier = nullifiers[i]; + if nullifier.counter != 0 { + let siloed_value = compute_siloed_nullifier(storage_contract_address, nullifier.value); + data.nullifiers.push( + Nullifier { value: siloed_value, counter: nullifier.counter, note_hash: nullifier.note_hash } + ); + } + } +} + +fn propagate_l2_to_l1_messages(data: &mut PublicAccumulatedDataBuilder, public_call: PublicCircuitPublicInputs) { + let storage_contract_address = public_call.call_context.storage_contract_address; + let msgs = public_call.l2_to_l1_msgs; + for i in 0..msgs.len() { + let msg = msgs[i]; + if msg.counter != 0 { + data.l2_to_l1_msgs.push(msg.scope(storage_contract_address)); + } + } +} + +fn propagate_unencrypted_logs(data: &mut PublicAccumulatedDataBuilder, public_call: PublicCircuitPublicInputs) { + let storage_contract_address = public_call.call_context.storage_contract_address; + let logs = public_call.unencrypted_logs_hashes; + for i in 0..logs.len() { + let log = logs[i]; + if log.counter != 0 { + data.unencrypted_logs_hashes.push(log.scope(storage_contract_address)); + } + } +} + +fn propagate_public_data_writes(data: &mut PublicAccumulatedDataBuilder, public_call: PublicCircuitPublicInputs) { + let storage_contract_address = public_call.call_context.storage_contract_address; + let writes = public_call.contract_storage_update_requests; + for i in 0..writes.len() { + let write = writes[i]; + if write.counter != 0 { + data.public_data_update_requests.push( + PublicDataUpdateRequest::from_contract_storage_update_request(storage_contract_address, write) + ); + } + } +} diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/lib.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/lib.nr index a090565150f..0f192aa4fe0 100644 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/lib.nr +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/lib.nr @@ -1,11 +1,9 @@ mod components; +mod public_kernel_inner; +mod public_kernel_merge; mod public_kernel_phase; -mod public_kernel_setup; -mod public_kernel_app_logic; -mod public_kernel_teardown; mod public_kernel_tail; -pub use public_kernel_setup::PublicKernelSetupCircuitPrivateInputs; -pub use public_kernel_app_logic::PublicKernelAppLogicCircuitPrivateInputs; -pub use public_kernel_teardown::PublicKernelTeardownCircuitPrivateInputs; +pub use public_kernel_inner::PublicKernelInnerCircuitPrivateInputs; +pub use public_kernel_merge::PublicKernelMergeCircuitPrivateInputs; pub use public_kernel_tail::PublicKernelTailCircuitPrivateInputs; diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/public_kernel_app_logic.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/public_kernel_app_logic.nr index 7e059aa7fd3..4bcb3ad9d9d 100644 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/public_kernel_app_logic.nr +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/public_kernel_app_logic.nr @@ -20,7 +20,7 @@ global ALLOWED_PREVIOUS_CIRCUITS = [ PUBLIC_KERNEL_APP_LOGIC_INDEX, ]; -struct PublicKernelAppLogicCircuitPrivateInputs { +pub struct PublicKernelAppLogicCircuitPrivateInputs { previous_kernel: PublicKernelData, public_call: PublicCallData, } diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/public_kernel_inner.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/public_kernel_inner.nr new file mode 100644 index 00000000000..eaff4176460 --- /dev/null +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/public_kernel_inner.nr @@ -0,0 +1,19 @@ +use crate::components::{vm_circuit_output_composer::VMCircuitOutputComposer}; +use dep::types::{ + abis::{ + kernel_circuit_public_inputs::VMCircuitPublicInputs, + public_kernel_inner_data::PublicKernelInnerData, public_call_data::PublicCallData +} +}; + +// TODO(#7124): To be deprecated. +pub struct PublicKernelInnerCircuitPrivateInputs { + previous_kernel: PublicKernelInnerData, + public_call: PublicCallData, +} + +impl PublicKernelInnerCircuitPrivateInputs { + fn execute(self) -> VMCircuitPublicInputs { + VMCircuitOutputComposer::new_from_previous_kernel(self.previous_kernel.public_inputs).propagate_from_public_call(self.public_call.call_stack_item.public_inputs).finish() + } +} diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/public_kernel_merge.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/public_kernel_merge.nr new file mode 100644 index 00000000000..ebfd605cee7 --- /dev/null +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/public_kernel_merge.nr @@ -0,0 +1,256 @@ +use crate::{ + components::{ + enqueued_call_data_validator::EnqueuedCallDataValidator, + previous_kernel_validator::PreviousKernelValidator, + public_kernel_output_composer::PublicKernelOutputComposer, + public_kernel_output_validator::PublicKernelOutputValidator +}, + public_kernel_phase::PublicKernelPhase +}; +use dep::types::{ + abis::{ + enqueued_call_data::EnqueuedCallData, kernel_circuit_public_inputs::PublicKernelCircuitPublicInputs, + public_kernel_data::PublicKernelData +}, + constants::{PRIVATE_KERNEL_TAIL_TO_PUBLIC_INDEX, PUBLIC_KERNEL_MERGE_INDEX} +}; + +global ALLOWED_PREVIOUS_CIRCUITS = [ + PRIVATE_KERNEL_TAIL_TO_PUBLIC_INDEX, + PUBLIC_KERNEL_MERGE_INDEX, +]; + +pub struct PublicKernelMergeCircuitPrivateInputs { + previous_kernel: PublicKernelData, + enqueued_call: EnqueuedCallData, +} + +impl PublicKernelMergeCircuitPrivateInputs { + unconstrained fn generate_output(self, phase: u8) -> PublicKernelCircuitPublicInputs { + // noir-fmt:ignore + PublicKernelOutputComposer::new_from_previous_kernel(self.previous_kernel.public_inputs) + .remove_top_call_request(phase) + .propagate_from_enqueued_call(self.enqueued_call.data, phase) + .finish() + } + + fn get_phase(self) -> u8 { + let public_inputs = self.previous_kernel.public_inputs; + let needs_setup = !public_inputs.end_non_revertible.public_call_stack[0].contract_address.is_zero(); + let needs_app_logic = !public_inputs.end.public_call_stack[0].contract_address.is_zero(); + if needs_setup { + PublicKernelPhase.SETUP + } else if needs_app_logic { + PublicKernelPhase.APP_LOGIC + } else { + PublicKernelPhase.TEARDOWN + } + } + + fn execute(self) -> PublicKernelCircuitPublicInputs { + let phase = self.get_phase(); + + let output = unsafe { + self.generate_output(phase) + }; + + let output_validator = PublicKernelOutputValidator::new( + output, + self.previous_kernel.public_inputs, + self.enqueued_call.data, + phase + ); + + let previous_kernel_validator = PreviousKernelValidator::new(self.previous_kernel); + previous_kernel_validator.validate_proof(ALLOWED_PREVIOUS_CIRCUITS); + + let enqueued_call_data_validator = EnqueuedCallDataValidator::new(self.enqueued_call, phase); + enqueued_call_data_validator.validate_proof(); + enqueued_call_data_validator.validate_against_previous_kernel( + self.previous_kernel.public_inputs, + output_validator.previous_validation_request_array_lengths, + output_validator.previous_non_revertible_data_array_lengths, + output_validator.previous_revertible_data_array_lengths + ); + + output_validator.validate(); + + output + } +} + +mod tests { + use crate::{ + public_kernel_phase::PublicKernelPhase, + public_kernel_merge::{ALLOWED_PREVIOUS_CIRCUITS, PublicKernelMergeCircuitPrivateInputs} + }; + use dep::types::{ + abis::{ + accumulated_data::PublicAccumulatedDataArrayLengths, gas::Gas, + kernel_circuit_public_inputs::PublicKernelCircuitPublicInputs, max_block_number::MaxBlockNumber, + validation_requests::PublicValidationRequestArrayLengths + }, + constants::PRIVATE_KERNEL_TAIL_TO_PUBLIC_INDEX, + tests::{fixture_builder::FixtureBuilder, utils::assert_array_eq} + }; + + struct PublicKernelMergeCircuitPrivateInputsBuilder { + previous_kernel: FixtureBuilder, + previous_revertible: FixtureBuilder, + enqueued_call: FixtureBuilder, + phase: u8 + } + + impl PublicKernelMergeCircuitPrivateInputsBuilder { + pub fn new() -> Self { + let previous_kernel = FixtureBuilder::new().as_parent_contract().in_vk_tree(PRIVATE_KERNEL_TAIL_TO_PUBLIC_INDEX); + let mut previous_revertible = FixtureBuilder::new(); + let mut enqueued_call = FixtureBuilder::new().is_public_function(); + // Add an offset so that the mock data won't be the same as the values in previous_kernel. + previous_revertible.value_offset = 5555; + enqueued_call.counter_start = 7777; + enqueued_call.value_offset = 9999; + + let phase = PublicKernelPhase.SETUP; + + PublicKernelMergeCircuitPrivateInputsBuilder { previous_kernel, previous_revertible, enqueued_call, phase } + } + + pub fn execute(&mut self) -> PublicKernelCircuitPublicInputs { + let enqueued_call_request = self.enqueued_call.to_public_call_request(); + if self.phase == PublicKernelPhase.SETUP { + self.previous_kernel.add_public_call_request(enqueued_call_request); + } else { + self.previous_revertible.add_public_call_request(enqueued_call_request); + } + + let mut previous_kernel = self.previous_kernel.to_public_kernel_data(false); + previous_kernel.public_inputs.end = self.previous_revertible.to_public_accumulated_data(); + + let mut enqueued_call = self.enqueued_call.to_enqueued_call_data(); + enqueued_call.data.previous_validation_request_array_lengths = PublicValidationRequestArrayLengths::new(previous_kernel.public_inputs.validation_requests); + enqueued_call.data.previous_accumulated_data_array_lengths = if self.phase == PublicKernelPhase.SETUP { + PublicAccumulatedDataArrayLengths::new(previous_kernel.public_inputs.end_non_revertible) + } else { + PublicAccumulatedDataArrayLengths::new(previous_kernel.public_inputs.end) + }; + + previous_kernel.public_inputs.end_side_effect_counter = enqueued_call.data.start_side_effect_counter - 1; + + let kernel = PublicKernelMergeCircuitPrivateInputs { previous_kernel, enqueued_call }; + kernel.execute() + } + + pub fn populate_gas_used(&mut self) { + // Transaction gas limit is 1k. + self.previous_kernel.tx_context.gas_settings.gas_limits = Gas::new(1000, 1000); + + // Non-revertible has used 200. + self.previous_kernel.gas_used = Gas::new(200, 200); + + // Revertible has used 100. + self.previous_revertible.gas_used = Gas::new(100, 100); + + // So this call starts with 700 gas left + self.enqueued_call.start_gas_left = Gas::new(700, 700); + // And uses 250. + self.enqueued_call.gas_used = Gas::new(250, 250); + // Ending with 450 left. + self.enqueued_call.end_gas_left = Gas::new(450, 450); + } + + pub fn succeeded(&mut self) { + let _ = self.execute(); + } + + pub fn failed(&mut self) { + let _ = self.execute(); + } + } + + #[test] + unconstrained fn circuit_outputs_should_be_correctly_populated_with_previous_private_kernel() { + let mut builder = PublicKernelMergeCircuitPrivateInputsBuilder::new(); + + builder.previous_kernel.max_block_number = MaxBlockNumber::new(13); + + builder.enqueued_call.append_public_data_read_requests(1); + let curr_reads = builder.enqueued_call.public_data_reads.storage; + builder.previous_kernel.append_public_data_read_requests(2); + let prev_reads = builder.previous_kernel.public_data_reads.storage; + + builder.enqueued_call.append_note_hashes(2); + let curr_note_hashes = builder.enqueued_call.note_hashes.storage; + builder.previous_kernel.append_note_hashes(1); + let prev_note_hashes = builder.previous_kernel.note_hashes.storage; + + builder.enqueued_call.append_public_call_requests(2); + builder.previous_kernel.append_public_call_requests(1); + let prev_calls = builder.previous_kernel.public_call_requests.storage; + + let public_inputs = builder.execute(); + + assert_eq(public_inputs.validation_requests.for_rollup.max_block_number.unwrap(), 13); + + assert_array_eq( + public_inputs.validation_requests.public_data_reads, + [prev_reads[0], prev_reads[1], curr_reads[0]] + ); + + assert_array_eq( + public_inputs.end_non_revertible.note_hashes, + [prev_note_hashes[0], curr_note_hashes[0], curr_note_hashes[1]] + ); + + assert_array_eq( + public_inputs.end_non_revertible.public_call_stack, + [prev_calls[0]] // Public call requests can only be propagated from previous kernel. + ); + } + + #[test] + unconstrained fn updates_revertible_gas_used() { + let mut builder = PublicKernelMergeCircuitPrivateInputsBuilder::new(); + builder.phase = PublicKernelPhase.APP_LOGIC; + + builder.populate_gas_used(); + + // So the updated gas used by revertible must go up by 250, and non-revertible must stay the same. + let output = builder.execute(); + assert_eq(output.end_non_revertible.gas_used, Gas::new(200, 200)); + assert_eq(output.end.gas_used, Gas::new(350, 350)); + } + + #[test] + unconstrained fn handle_revert_in_app_logic() { + let mut builder = PublicKernelMergeCircuitPrivateInputsBuilder::new(); + builder.phase = PublicKernelPhase.APP_LOGIC; + builder.enqueued_call.revert_code = 1; + + builder.populate_gas_used(); + + let output = builder.execute(); + + assert_eq(output.revert_code, 1); + + // gas_used is propagated even when reverts. + assert_eq(output.end_non_revertible.gas_used, Gas::new(200, 200)); + assert_eq(output.end.gas_used, Gas::new(350, 350)); + } + + #[test] + fn valid_previous_kernel() { + for i in 0..ALLOWED_PREVIOUS_CIRCUITS.len() { + let mut builder = PublicKernelMergeCircuitPrivateInputsBuilder::new(); + builder.previous_kernel = builder.previous_kernel.in_vk_tree(ALLOWED_PREVIOUS_CIRCUITS[i]); + builder.succeeded(); + } + } + // TODO(#7410) we need the tube vk to reinstate this + // #[test(should_fail_with="Invalid vk index")] + // fn invalid_previous_kernel() { + // let mut builder = PublicKernelMergeCircuitPrivateInputsBuilder::new(); + // builder.previous_kernel = builder.previous_kernel.in_vk_tree(BASE_ROLLUP_INDEX); + // let _res = builder.execute(); + // } +} diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/public_kernel_setup.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/public_kernel_setup.nr index 4dee42f6364..04a1fdbe9da 100644 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/public_kernel_setup.nr +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/public_kernel_setup.nr @@ -19,7 +19,7 @@ global ALLOWED_PREVIOUS_CIRCUITS = [ PUBLIC_KERNEL_SETUP_INDEX, ]; -struct PublicKernelSetupCircuitPrivateInputs { +pub struct PublicKernelSetupCircuitPrivateInputs { // Note: One might think that our previous_kernel ought to be // a PrivateKernelTailData. However, we instead supply a PublicKernelData. // This is because PrivateKernelTailData is a subset of PublicKernelData. diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/public_kernel_tail.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/public_kernel_tail.nr index d44aa614db4..6dc88bee1c0 100644 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/public_kernel_tail.nr +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/public_kernel_tail.nr @@ -16,19 +16,16 @@ use dep::types::{ constants::{ L1_TO_L2_MSG_TREE_HEIGHT, MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_TX, MAX_NOTE_HASH_READ_REQUESTS_PER_TX, MAX_NULLIFIER_READ_REQUESTS_PER_TX, MAX_PUBLIC_DATA_HINTS, MAX_PUBLIC_DATA_READS_PER_TX, - NOTE_HASH_TREE_HEIGHT, PUBLIC_KERNEL_SETUP_INDEX, PUBLIC_KERNEL_APP_LOGIC_INDEX, - PUBLIC_KERNEL_TEARDOWN_INDEX + NOTE_HASH_TREE_HEIGHT, PUBLIC_KERNEL_MERGE_INDEX }, data::PublicDataLeafHint, partial_state_reference::PartialStateReference }; global ALLOWED_PREVIOUS_CIRCUITS = [ - PUBLIC_KERNEL_SETUP_INDEX, - PUBLIC_KERNEL_APP_LOGIC_INDEX, - PUBLIC_KERNEL_TEARDOWN_INDEX, + PUBLIC_KERNEL_MERGE_INDEX, ]; -struct PublicKernelTailCircuitPrivateInputs { +pub struct PublicKernelTailCircuitPrivateInputs { previous_kernel: PublicKernelData, note_hash_read_request_hints: [TreeLeafReadRequestHint; MAX_NOTE_HASH_READ_REQUESTS_PER_TX], nullifier_read_request_hints: NullifierReadRequestHints, @@ -111,8 +108,7 @@ mod tests { MAX_PUBLIC_DATA_HINTS, NOTE_HASH_SUBTREE_HEIGHT, NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH, NULLIFIER_TREE_HEIGHT, NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH, NULLIFIER_SUBTREE_HEIGHT, PUBLIC_DATA_SUBTREE_HEIGHT, PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH, PUBLIC_DATA_TREE_HEIGHT, - MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, NOTE_HASH_TREE_HEIGHT, - PUBLIC_KERNEL_APP_LOGIC_INDEX, PUBLIC_KERNEL_SETUP_INDEX, PUBLIC_KERNEL_TEARDOWN_INDEX + MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, NOTE_HASH_TREE_HEIGHT, PUBLIC_KERNEL_MERGE_INDEX }, data::{PublicDataLeafHint, PublicDataTreeLeafPreimage}, hash::{compute_siloed_nullifier, silo_note_hash}, @@ -173,7 +169,7 @@ mod tests { impl PublicKernelTailCircuitPrivateInputsBuilder { pub fn new() -> PublicKernelTailCircuitPrivateInputsBuilder { - let previous_kernel = FixtureBuilder::new().in_vk_tree(PUBLIC_KERNEL_APP_LOGIC_INDEX); + let previous_kernel = FixtureBuilder::new().in_vk_tree(PUBLIC_KERNEL_MERGE_INDEX); let previous_revertible = FixtureBuilder::new(); let nullifier_non_existent_read_request_hints_builder = NullifierNonExistentReadRequestHintsBuilder::new(); @@ -418,6 +414,7 @@ mod tests { builder.succeeded(); } + #[test] unconstrained fn one_pending_nullifier_read_request() { let mut builder = PublicKernelTailCircuitPrivateInputsBuilder::new(); @@ -630,25 +627,9 @@ mod tests { } #[test] - fn valid_previous_kernel_setup() { - let mut builder = PublicKernelTailCircuitPrivateInputsBuilder::new(); - builder.previous_kernel = builder.previous_kernel.in_vk_tree(PUBLIC_KERNEL_SETUP_INDEX); - - let _res = builder.execute(); - } - - #[test] - fn valid_previous_kernel_app_logic() { - let mut builder = PublicKernelTailCircuitPrivateInputsBuilder::new(); - builder.previous_kernel = builder.previous_kernel.in_vk_tree(PUBLIC_KERNEL_APP_LOGIC_INDEX); - - let _res = builder.execute(); - } - - #[test] - fn valid_previous_kernel_teardown() { + fn valid_previous_kernel_merge() { let mut builder = PublicKernelTailCircuitPrivateInputsBuilder::new(); - builder.previous_kernel = builder.previous_kernel.in_vk_tree(PUBLIC_KERNEL_TEARDOWN_INDEX); + builder.previous_kernel = builder.previous_kernel.in_vk_tree(PUBLIC_KERNEL_MERGE_INDEX); let _res = builder.execute(); } diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/public_kernel_teardown.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/public_kernel_teardown.nr index 087efbf91e7..23150b26090 100644 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/public_kernel_teardown.nr +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-lib/src/public_kernel_teardown.nr @@ -17,7 +17,7 @@ use dep::types::{ } }; -struct PublicKernelTeardownCircuitPrivateInputs { +pub struct PublicKernelTeardownCircuitPrivateInputs { previous_kernel: PublicKernelData, public_call: PublicCallData, } diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-setup-simulated/Nargo.toml b/noir-projects/noir-protocol-circuits/crates/public-kernel-merge-simulated/Nargo.toml similarity index 81% rename from noir-projects/noir-protocol-circuits/crates/public-kernel-setup-simulated/Nargo.toml rename to noir-projects/noir-protocol-circuits/crates/public-kernel-merge-simulated/Nargo.toml index f1c72422c51..d2d71db1e5c 100644 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-setup-simulated/Nargo.toml +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-merge-simulated/Nargo.toml @@ -1,5 +1,5 @@ [package] -name = "public_kernel_setup_simulated" +name = "public_kernel_merge_simulated" type = "bin" authors = [""] compiler_version = ">=0.18.0" diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-merge-simulated/src/main.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-merge-simulated/src/main.nr new file mode 100644 index 00000000000..8f37b525057 --- /dev/null +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-merge-simulated/src/main.nr @@ -0,0 +1,6 @@ +use dep::public_kernel_lib::PublicKernelMergeCircuitPrivateInputs; +use dep::types::PublicKernelCircuitPublicInputs; + +unconstrained fn main(input: PublicKernelMergeCircuitPrivateInputs) -> pub PublicKernelCircuitPublicInputs { + input.execute() +} diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-teardown/Nargo.toml b/noir-projects/noir-protocol-circuits/crates/public-kernel-merge/Nargo.toml similarity index 84% rename from noir-projects/noir-protocol-circuits/crates/public-kernel-teardown/Nargo.toml rename to noir-projects/noir-protocol-circuits/crates/public-kernel-merge/Nargo.toml index a481c24ff38..c6433b11998 100644 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-teardown/Nargo.toml +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-merge/Nargo.toml @@ -1,5 +1,5 @@ [package] -name = "public_kernel_teardown" +name = "public_kernel_merge" type = "bin" authors = [""] compiler_version = ">=0.18.0" diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-merge/src/main.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-merge/src/main.nr new file mode 100644 index 00000000000..4a4a7f036bf --- /dev/null +++ b/noir-projects/noir-protocol-circuits/crates/public-kernel-merge/src/main.nr @@ -0,0 +1,7 @@ +use dep::public_kernel_lib::PublicKernelMergeCircuitPrivateInputs; +use dep::types::PublicKernelCircuitPublicInputs; + +#[recursive] +fn main(input: PublicKernelMergeCircuitPrivateInputs) -> pub PublicKernelCircuitPublicInputs { + input.execute() +} diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-setup-simulated/src/main.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-setup-simulated/src/main.nr deleted file mode 100644 index c27a53e2dec..00000000000 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-setup-simulated/src/main.nr +++ /dev/null @@ -1,6 +0,0 @@ -use dep::public_kernel_lib::PublicKernelSetupCircuitPrivateInputs; -use dep::types::PublicKernelCircuitPublicInputs; - -unconstrained fn main(input: PublicKernelSetupCircuitPrivateInputs) -> pub PublicKernelCircuitPublicInputs { - input.execute() -} diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-setup/src/main.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-setup/src/main.nr deleted file mode 100644 index 6849a58b4fa..00000000000 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-setup/src/main.nr +++ /dev/null @@ -1,7 +0,0 @@ -use dep::public_kernel_lib::PublicKernelSetupCircuitPrivateInputs; -use dep::types::PublicKernelCircuitPublicInputs; - -#[recursive] -fn main(input: PublicKernelSetupCircuitPrivateInputs) -> pub PublicKernelCircuitPublicInputs { - input.execute() -} diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-teardown-simulated/Nargo.toml b/noir-projects/noir-protocol-circuits/crates/public-kernel-teardown-simulated/Nargo.toml deleted file mode 100644 index 698657b684d..00000000000 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-teardown-simulated/Nargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "public_kernel_teardown_simulated" -type = "bin" -authors = [""] -compiler_version = ">=0.18.0" - -[dependencies] -types = { path = "../types" } -public_kernel_lib = { path = "../public-kernel-lib" } diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-teardown-simulated/src/main.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-teardown-simulated/src/main.nr deleted file mode 100644 index aaef26a016f..00000000000 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-teardown-simulated/src/main.nr +++ /dev/null @@ -1,6 +0,0 @@ -use dep::public_kernel_lib::PublicKernelTeardownCircuitPrivateInputs; -use dep::types::PublicKernelCircuitPublicInputs; - -unconstrained fn main(input: PublicKernelTeardownCircuitPrivateInputs) -> pub PublicKernelCircuitPublicInputs { - input.execute() -} diff --git a/noir-projects/noir-protocol-circuits/crates/public-kernel-teardown/src/main.nr b/noir-projects/noir-protocol-circuits/crates/public-kernel-teardown/src/main.nr deleted file mode 100644 index adc9d2eda65..00000000000 --- a/noir-projects/noir-protocol-circuits/crates/public-kernel-teardown/src/main.nr +++ /dev/null @@ -1,7 +0,0 @@ -use dep::public_kernel_lib::PublicKernelTeardownCircuitPrivateInputs; -use dep::types::PublicKernelCircuitPublicInputs; - -#[recursive] -fn main(input: PublicKernelTeardownCircuitPrivateInputs) -> pub PublicKernelCircuitPublicInputs { - input.execute() -} diff --git a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/note_hash_read_request_reset.nr b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/note_hash_read_request_reset.nr index 8c53b9be7de..928e4693eea 100644 --- a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/note_hash_read_request_reset.nr +++ b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/note_hash_read_request_reset.nr @@ -6,7 +6,7 @@ use dep::types::{ merkle_tree::MembershipWitness }; -struct NoteHashSettledReadHint { +pub struct NoteHashSettledReadHint { read_request_index: u32, membership_witness: MembershipWitness, leaf_preimage: NoteHashLeafPreimage, @@ -36,7 +36,7 @@ impl SettledReadHint for NoteHashSe } } -struct NoteHashReadRequestHints { +pub struct NoteHashReadRequestHints { read_request_statuses: [ReadRequestStatus; MAX_NOTE_HASH_READ_REQUESTS_PER_TX], pending_read_hints: [PendingReadHint; NUM_PENDING_HINTS], settled_read_hints: [NoteHashSettledReadHint; NUM_SETTLED_HINTS], @@ -245,4 +245,3 @@ mod tests { builder.verify(); } } - diff --git a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/nullifier_non_existent_read_request_reset.nr b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/nullifier_non_existent_read_request_reset.nr index fef20b6eeb9..82fe8c04b55 100644 --- a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/nullifier_non_existent_read_request_reset.nr +++ b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/nullifier_non_existent_read_request_reset.nr @@ -5,7 +5,7 @@ use dep::types::{ constants::{MAX_NULLIFIERS_PER_TX, MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX, NULLIFIER_TREE_HEIGHT} }; -struct NullifierNonMembershipHint { +pub struct NullifierNonMembershipHint { low_leaf_preimage: NullifierLeafPreimage, membership_witness: MembershipWitness, } @@ -20,7 +20,7 @@ impl NonMembershipHint for Nullifi } } -struct NullifierNonExistentReadRequestHints { +pub struct NullifierNonExistentReadRequestHints { non_membership_hints: [NullifierNonMembershipHint; MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX], sorted_pending_values: [Nullifier; MAX_NULLIFIERS_PER_TX], sorted_pending_value_index_hints: [u32; MAX_NULLIFIERS_PER_TX], diff --git a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/nullifier_read_request_reset.nr b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/nullifier_read_request_reset.nr index 1f9088af5f5..c9f780d05b5 100644 --- a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/nullifier_read_request_reset.nr +++ b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/nullifier_read_request_reset.nr @@ -6,7 +6,7 @@ use dep::types::{ merkle_tree::MembershipWitness }; -struct NullifierSettledReadHint { +pub struct NullifierSettledReadHint { read_request_index: u32, membership_witness: MembershipWitness, leaf_preimage: NullifierLeafPreimage, @@ -36,7 +36,7 @@ impl SettledReadHint for Nullifier } } -struct NullifierReadRequestHints { +pub struct NullifierReadRequestHints { read_request_statuses: [ReadRequestStatus; MAX_NULLIFIER_READ_REQUESTS_PER_TX], pending_read_hints: [PendingReadHint; NUM_PENDING_HINTS], settled_read_hints: [NullifierSettledReadHint; NUM_SETTLED_HINTS], @@ -237,4 +237,3 @@ mod tests { builder.verify(); } } - diff --git a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/private_validation_request_processor.nr b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/private_validation_request_processor.nr index 42a49a84ebc..76dfd18db7b 100644 --- a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/private_validation_request_processor.nr +++ b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/private_validation_request_processor.nr @@ -9,7 +9,7 @@ use dep::types::{ constants::{MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX} }; -struct PrivateValidationRequestProcessor { +pub struct PrivateValidationRequestProcessor { validation_requests: PrivateValidationRequests, note_hash_read_request_hints: NoteHashReadRequestHints, pending_note_hashes: [ScopedNoteHash; MAX_NOTE_HASHES_PER_TX], diff --git a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/public_data_read_request_hints.nr b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/public_data_read_request_hints.nr index 3f1eebc06cc..962e8ce3e0b 100644 --- a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/public_data_read_request_hints.nr +++ b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/public_data_read_request_hints.nr @@ -4,7 +4,7 @@ use dep::types::{ data::OverridablePublicDataTreeLeaf, utils::arrays::find_index_hint }; -struct PublicDataReadRequestHints { +pub struct PublicDataReadRequestHints { read_request_statuses: [ReadRequestStatus; NUM_READS], pending_read_hints: [ReadIndexHint; NUM_READS], leaf_data_read_hints: [ReadIndexHint; NUM_READS], diff --git a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/public_validation_request_processor.nr b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/public_validation_request_processor.nr index a07fbef6114..6c843db2760 100644 --- a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/public_validation_request_processor.nr +++ b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/public_validation_request_processor.nr @@ -25,7 +25,7 @@ use dep::types::{ utils::arrays::{array_to_bounded_vec, assert_combined_array, assert_sorted_array, combine_arrays} }; -struct PublicValidationRequestProcessor { +pub struct PublicValidationRequestProcessor { validation_requests: PublicValidationRequests, note_hash_read_request_hints: [TreeLeafReadRequestHint; MAX_NOTE_HASH_READ_REQUESTS_PER_TX], note_hash_tree_root: Field, diff --git a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/reset/key_validation_hint.nr b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/reset/key_validation_hint.nr index e0c4de9dc1b..78119974eea 100644 --- a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/reset/key_validation_hint.nr +++ b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/reset/key_validation_hint.nr @@ -4,7 +4,7 @@ use dep::types::{ }; use std::embedded_curve_ops::fixed_base_scalar_mul as derive_public_key; -struct KeyValidationHint { +pub struct KeyValidationHint { sk_m: Scalar, request_index: u32, } diff --git a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/reset/mutable_data_read_request.nr b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/reset/mutable_data_read_request.nr index 848a8818878..6c953eb0d61 100644 --- a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/reset/mutable_data_read_request.nr +++ b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/reset/mutable_data_read_request.nr @@ -1,7 +1,7 @@ use crate::reset::{read_request::{ReadRequestState, ReadRequestStatus}}; use dep::types::{abis::side_effect::{Ordered, Overridable, Readable}}; -struct ReadIndexHint { +pub struct ReadIndexHint { read_request_index: u32, value_index: u32, } diff --git a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/reset/read_request.nr b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/reset/read_request.nr index b7196b494f2..04dda504841 100644 --- a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/reset/read_request.nr +++ b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/reset/read_request.nr @@ -4,7 +4,7 @@ use dep::types::{ merkle_tree::{assert_check_membership, LeafPreimage, MembershipWitness}, traits::Empty }; -struct ReadRequestStateEnum { +pub struct ReadRequestStateEnum { NADA: u8, PENDING: u8, SETTLED: u8, @@ -16,7 +16,7 @@ global ReadRequestState = ReadRequestStateEnum { SETTLED: 2, }; -struct ReadRequestStatus { +pub struct ReadRequestStatus { state: u8, hint_index: u32, } @@ -41,7 +41,7 @@ trait ReadValueHint { fn read_request_index(self) -> u32; } -struct PendingReadHint { +pub struct PendingReadHint { read_request_index: u32, pending_value_index: u32, } @@ -86,7 +86,13 @@ fn validate_pending_read_requests( +fn validate_settled_read_requests< + let READ_REQUEST_LEN: u32, + let NUM_SETTLED_READS: u32, + H, + let TREE_HEIGHT: u32, + LEAF_PREIMAGE +>( read_requests: [ScopedReadRequest; READ_REQUEST_LEN], hints: [H; NUM_SETTLED_READS], tree_root: Field @@ -143,7 +149,7 @@ pub fn verify_reset_read_requests< let NUM_PENDING_READS: u32, let NUM_SETTLED_READS: u32, H, - TREE_HEIGHT, + let TREE_HEIGHT: u32, LEAF_PREIMAGE >( read_requests: [ScopedReadRequest; READ_REQUEST_LEN], @@ -560,4 +566,3 @@ mod tests { builder.verify(); } } - diff --git a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/reset/transient_data.nr b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/reset/transient_data.nr index d0c1f2c7f37..0fe0c0dbdad 100644 --- a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/reset/transient_data.nr +++ b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/reset/transient_data.nr @@ -3,7 +3,7 @@ use dep::types::{ traits::is_empty }; -struct TransientDataIndexHint { +pub struct TransientDataIndexHint { nullifier_index: u32, note_hash_index: u32, } diff --git a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/reset/tree_leaf_read_request.nr b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/reset/tree_leaf_read_request.nr index bca4161020c..75ac5ab045a 100644 --- a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/reset/tree_leaf_read_request.nr +++ b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/reset/tree_leaf_read_request.nr @@ -3,7 +3,7 @@ use dep::types::{ merkle_tree::assert_check_membership }; -struct TreeLeafReadRequestHint { +pub struct TreeLeafReadRequestHint { sibling_path: [Field; N] } @@ -24,4 +24,3 @@ pub fn validate_tree_leaf_read_requests { +pub struct NoteHashReadRequestHintsBuilder { read_request_statuses: [ReadRequestStatus; MAX_NOTE_HASH_READ_REQUESTS_PER_TX], pending_read_hints: BoundedVec, settled_read_hints: BoundedVec, diff --git a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/tests/nullifier_non_existent_read_request_hints_builder.nr b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/tests/nullifier_non_existent_read_request_hints_builder.nr index 27f2fc56b1e..25c6fd0f1b2 100644 --- a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/tests/nullifier_non_existent_read_request_hints_builder.nr +++ b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/tests/nullifier_non_existent_read_request_hints_builder.nr @@ -9,7 +9,7 @@ use dep::types::{ utils::{arrays::{find_index_hint, get_sorted_result}} }; -struct NullifierNonExistentReadRequestHintsBuilder { +pub struct NullifierNonExistentReadRequestHintsBuilder { nullifier_tree: NonEmptyMerkleTree, non_membership_hints: BoundedVec, read_values: BoundedVec, diff --git a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/tests/nullifier_read_request_hints_builder.nr b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/tests/nullifier_read_request_hints_builder.nr index a6691f45eaa..4b9462e01ce 100644 --- a/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/tests/nullifier_read_request_hints_builder.nr +++ b/noir-projects/noir-protocol-circuits/crates/reset-kernel-lib/src/tests/nullifier_read_request_hints_builder.nr @@ -4,7 +4,7 @@ use crate::{ }; use dep::types::constants::MAX_NULLIFIER_READ_REQUESTS_PER_TX; -struct NullifierReadRequestHintsBuilder { +pub struct NullifierReadRequestHintsBuilder { read_request_statuses: [ReadRequestStatus; MAX_NULLIFIER_READ_REQUESTS_PER_TX], pending_read_hints: BoundedVec, settled_read_hints: BoundedVec, diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-block-root-final/Nargo.toml b/noir-projects/noir-protocol-circuits/crates/rollup-block-root-final/Nargo.toml new file mode 100644 index 00000000000..2d827d6e167 --- /dev/null +++ b/noir-projects/noir-protocol-circuits/crates/rollup-block-root-final/Nargo.toml @@ -0,0 +1,9 @@ +[package] +name = "rollup_block_root_final" +type = "bin" +authors = [""] +compiler_version = ">=0.18.0" + +[dependencies] +rollup_lib = { path = "../rollup-lib" } +types = { path = "../types" } diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-block-root-final/src/main.nr b/noir-projects/noir-protocol-circuits/crates/rollup-block-root-final/src/main.nr new file mode 100644 index 00000000000..b23b532e957 --- /dev/null +++ b/noir-projects/noir-protocol-circuits/crates/rollup-block-root-final/src/main.nr @@ -0,0 +1,7 @@ +use dep::rollup_lib::block_root::{BlockRootRollupInputs, BlockRootOrBlockMergePublicInputs}; + +// This is a non-recursive variant of the rollup-block-root. We use it so we can generate proofs that can be verified on L1, until we +// drop support for proving single blocks and move to epoch proving completely. +fn main(inputs: BlockRootRollupInputs) -> pub BlockRootOrBlockMergePublicInputs { + inputs.block_root_rollup_circuit() +} diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-block-root/src/main.nr b/noir-projects/noir-protocol-circuits/crates/rollup-block-root/src/main.nr index d5e7a5e691d..f4ce060103f 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-block-root/src/main.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-block-root/src/main.nr @@ -1,5 +1,6 @@ use dep::rollup_lib::block_root::{BlockRootRollupInputs, BlockRootOrBlockMergePublicInputs}; +#[recursive] fn main(inputs: BlockRootRollupInputs) -> pub BlockRootOrBlockMergePublicInputs { inputs.block_root_rollup_circuit() } diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/base_or_merge_rollup_public_inputs.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/base_or_merge_rollup_public_inputs.nr index 440272f7ba1..109ea39bf4e 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/base_or_merge_rollup_public_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/base_or_merge_rollup_public_inputs.nr @@ -7,7 +7,7 @@ use crate::abis::constant_rollup_data::ConstantRollupData; global BASE_ROLLUP_TYPE = 0; global MERGE_ROLLUP_TYPE = 1; -struct BaseOrMergeRollupPublicInputs { +pub struct BaseOrMergeRollupPublicInputs { // rollup_type is either 0 (base) or 1 (merge) // TODO(Kev): Why is this a u32 instead of a u8/u16? rollup_type : u32, diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/block_root_or_block_merge_public_inputs.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/block_root_or_block_merge_public_inputs.nr index 4c5fb902225..7fede7a1c1b 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/block_root_or_block_merge_public_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/block_root_or_block_merge_public_inputs.nr @@ -4,7 +4,7 @@ use dep::types::{ utils::reader::Reader, address::EthAddress }; -struct FeeRecipient { +pub struct FeeRecipient { recipient: EthAddress, value: Field, } @@ -36,7 +36,7 @@ impl Eq for FeeRecipient { // TODO: instead of archives + global vars, use ConstantRollupData x2? It also includes vk root // may be confusing as new_constant.last_archive would actually be the new_archive -struct BlockRootOrBlockMergePublicInputs { +pub struct BlockRootOrBlockMergePublicInputs { previous_archive: AppendOnlyTreeSnapshot, // Archive tree root immediately before this block range new_archive: AppendOnlyTreeSnapshot, // Archive tree root after adding this block range previous_block_hash: Field, // Identifier of the previous block before the range diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/constant_rollup_data.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/constant_rollup_data.nr index c41ed12c297..beea85cc4b9 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/constant_rollup_data.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/constant_rollup_data.nr @@ -4,7 +4,7 @@ use dep::types::{ utils::reader::Reader }; -struct ConstantRollupData { +pub struct ConstantRollupData { // Archive tree snapshot at the very beginning of the entire rollup. last_archive : AppendOnlyTreeSnapshot, diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/previous_rollup_block_data.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/previous_rollup_block_data.nr index 02c3c126c4b..b235ce5de9a 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/previous_rollup_block_data.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/previous_rollup_block_data.nr @@ -6,7 +6,7 @@ use dep::types::{ utils::arrays::find_index_hint }; -struct PreviousRollupBlockData { +pub struct PreviousRollupBlockData { block_root_or_block_merge_public_inputs: BlockRootOrBlockMergePublicInputs, proof: NestedRecursiveProof, vk: VerificationKey, diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/previous_rollup_data.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/previous_rollup_data.nr index 39ba99e4406..e2d3be7dc41 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/previous_rollup_data.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/previous_rollup_data.nr @@ -6,7 +6,7 @@ use dep::types::{ utils::arrays::find_index_hint }; -struct PreviousRollupData{ +pub struct PreviousRollupData{ base_or_merge_rollup_public_inputs : BaseOrMergeRollupPublicInputs, proof : NestedRecursiveProof, vk : VerificationKey, diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/base_rollup_inputs.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/base_rollup_inputs.nr index a42e25a10b5..6ff7470d81d 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/base_rollup_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/base_rollup_inputs.nr @@ -40,7 +40,7 @@ global ALLOWED_PREVIOUS_CIRCUITS = [ PUBLIC_KERNEL_TAIL_INDEX, ]; -struct BaseRollupInputs { +pub struct BaseRollupInputs { kernel_data: KernelData, start: PartialStateReference, @@ -482,10 +482,7 @@ mod tests { }, partial_state_reference::PartialStateReference, data::{PublicDataTreeLeaf, PublicDataTreeLeafPreimage}, - tests::{ - fixtures, fixture_builder::FixtureBuilder, - merkle_tree_utils::{NonEmptyMerkleTree, compute_zero_hashes} - }, + tests::{fixtures, fixture_builder::FixtureBuilder, merkle_tree_utils::NonEmptyMerkleTree}, utils::{arrays::get_sorted_tuple::get_sorted_tuple, field::{full_field_less_than, field_from_bytes_32_trunc}}, traits::Empty }; @@ -495,8 +492,8 @@ mod tests { value: Field, } - global MAX_nullifiers_PER_TEST = 4; - global MAX_PUBLIC_DATA_READS_PER_TEST = 2; + global MAX_nullifiers_PER_TEST: u32 = 4; + global MAX_PUBLIC_DATA_READS_PER_TEST: u32 = 2; fn update_public_data_tree( public_data_tree: &mut NonEmptyMerkleTree, @@ -609,10 +606,6 @@ mod tests { fee_payer_fee_juice_balance_pre_existing_public_data_index: Option } - fn test_compute_empty_root(size: [Field; N]) -> Field { - compute_zero_hashes(size)[N - 1] - } - impl BaseRollupInputsBuilder { fn new() -> Self { let mut inputs = BaseRollupInputsBuilder::empty(); diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/state_diff_hints.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/state_diff_hints.nr index 91f2cc0a31b..a214e0d816c 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/state_diff_hints.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/state_diff_hints.nr @@ -7,7 +7,7 @@ use dep::types::{ merkle_tree::MembershipWitness }; -struct StateDiffHints { +pub struct StateDiffHints { nullifier_predecessor_preimages: [NullifierLeafPreimage; MAX_NULLIFIERS_PER_TX], nullifier_predecessor_membership_witnesses: [MembershipWitness; MAX_NULLIFIERS_PER_TX], diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/block_merge/block_merge_rollup_inputs.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/block_merge/block_merge_rollup_inputs.nr index d13216d391f..d6c7ea1633f 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/block_merge/block_merge_rollup_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/block_merge/block_merge_rollup_inputs.nr @@ -8,7 +8,7 @@ global ALLOWED_PREVIOUS_CIRCUITS = [ BLOCK_MERGE_ROLLUP_INDEX, ]; -struct BlockMergeRollupInputs { +pub struct BlockMergeRollupInputs { previous_rollup_data : [PreviousRollupBlockData; 2] } diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/block_root/block_root_rollup_inputs.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/block_root/block_root_rollup_inputs.nr index f32c144b9cc..c09efc21967 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/block_root/block_root_rollup_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/block_root/block_root_rollup_inputs.nr @@ -22,7 +22,7 @@ global ALLOWED_PREVIOUS_CIRCUITS = [ MERGE_ROLLUP_INDEX, ]; -struct BlockRootRollupInputs { +pub struct BlockRootRollupInputs { // All below are shared between the base and merge rollups previous_rollup_data: [PreviousRollupData; 2], diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/merge/merge_rollup_inputs.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/merge/merge_rollup_inputs.nr index 785d471e668..ee10a70d852 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/merge/merge_rollup_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/merge/merge_rollup_inputs.nr @@ -8,7 +8,7 @@ global ALLOWED_PREVIOUS_CIRCUITS = [ MERGE_ROLLUP_INDEX, ]; -struct MergeRollupInputs { +pub struct MergeRollupInputs { // TODO(Kev): Why is this 2? previous_rollup_data : [PreviousRollupData; 2] } diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/root_rollup_inputs.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/root_rollup_inputs.nr index e27538d300c..3bd35c0a372 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/root_rollup_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/root_rollup_inputs.nr @@ -9,7 +9,7 @@ global ALLOWED_PREVIOUS_CIRCUITS = [ BLOCK_MERGE_ROLLUP_INDEX, ]; -struct RootRollupInputs { +pub struct RootRollupInputs { previous_rollup_data: [PreviousRollupBlockData; 2], prover_id: Field, } diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/root_rollup_public_inputs.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/root_rollup_public_inputs.nr index 15b239b8714..4a27117d79a 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/root_rollup_public_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/root_rollup_public_inputs.nr @@ -1,7 +1,7 @@ use dep::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot; use crate::abis::block_root_or_block_merge_public_inputs::FeeRecipient; // TODO(#7346): Currently unused! Will be used when batch rollup circuits are integrated. -struct RootRollupPublicInputs { +pub struct RootRollupPublicInputs { // Snapshot of archive tree before/after this rollup has been processed previous_archive: AppendOnlyTreeSnapshot, end_archive: AppendOnlyTreeSnapshot, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/combined_accumulated_data.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/combined_accumulated_data.nr index b142411d12d..6d712c88add 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/combined_accumulated_data.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/combined_accumulated_data.nr @@ -9,13 +9,13 @@ use crate::{ utils::reader::Reader, traits::{Empty, Serialize, Deserialize} }; -struct CombinedAccumulatedData { +pub struct CombinedAccumulatedData { note_hashes: [Field; MAX_NOTE_HASHES_PER_TX], nullifiers: [Field; MAX_NULLIFIERS_PER_TX], l2_to_l1_msgs: [ScopedL2ToL1Message; MAX_L2_TO_L1_MSGS_PER_TX], note_encrypted_logs_hashes: [LogHash; MAX_NOTE_ENCRYPTED_LOGS_PER_TX], - encrypted_logs_hashes: [ScopedLogHash; MAX_ENCRYPTED_LOGS_PER_TX], + encrypted_logs_hashes: [ScopedLogHash; MAX_ENCRYPTED_LOGS_PER_TX], unencrypted_logs_hashes: [ScopedLogHash; MAX_UNENCRYPTED_LOGS_PER_TX], // Here so that the gas cost of this request can be measured by circuits, without actually needing to feed in the diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/mod.nr similarity index 82% rename from noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data.nr rename to noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/mod.nr index fc48dc3c0e5..5b1d9f59179 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/mod.nr @@ -7,5 +7,5 @@ mod public_accumulated_data_builder; pub use combined_accumulated_data::CombinedAccumulatedData; pub use private_accumulated_data::PrivateAccumulatedData; pub use private_accumulated_data_builder::PrivateAccumulatedDataBuilder; -pub use public_accumulated_data::PublicAccumulatedData; +pub use public_accumulated_data::{PublicAccumulatedData, PublicAccumulatedDataArrayLengths}; pub use public_accumulated_data_builder::PublicAccumulatedDataBuilder; diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/private_accumulated_data.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/private_accumulated_data.nr index bfa47b82795..75d0abd27ba 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/private_accumulated_data.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/private_accumulated_data.nr @@ -13,7 +13,7 @@ use crate::constants::{ MAX_UNENCRYPTED_LOGS_PER_TX, MAX_NOTE_ENCRYPTED_LOGS_PER_TX, PRIVATE_ACCUMULATED_DATA_LENGTH }; -struct PrivateAccumulatedData { +pub struct PrivateAccumulatedData { note_hashes: [ScopedNoteHash; MAX_NOTE_HASHES_PER_TX], nullifiers: [ScopedNullifier; MAX_NULLIFIERS_PER_TX], l2_to_l1_msgs: [ScopedL2ToL1Message; MAX_L2_TO_L1_MSGS_PER_TX], diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/private_accumulated_data_builder.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/private_accumulated_data_builder.nr index 7f8441bd464..d0d3c841f63 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/private_accumulated_data_builder.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/private_accumulated_data_builder.nr @@ -13,7 +13,7 @@ use crate::{ messaging::l2_to_l1_message::ScopedL2ToL1Message, traits::Empty }; -struct PrivateAccumulatedDataBuilder { +pub struct PrivateAccumulatedDataBuilder { note_hashes: BoundedVec, nullifiers: BoundedVec, l2_to_l1_msgs: BoundedVec, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/public_accumulated_data.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/public_accumulated_data.nr index d461fba114c..1eec6ab169e 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/public_accumulated_data.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/public_accumulated_data.nr @@ -7,12 +7,13 @@ use crate::{ constants::{ MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, MAX_L2_TO_L1_MSGS_PER_TX, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MAX_ENCRYPTED_LOGS_PER_TX, - MAX_UNENCRYPTED_LOGS_PER_TX, MAX_NOTE_ENCRYPTED_LOGS_PER_TX, PUBLIC_ACCUMULATED_DATA_LENGTH + MAX_UNENCRYPTED_LOGS_PER_TX, MAX_NOTE_ENCRYPTED_LOGS_PER_TX, NUM_PUBLIC_ACCUMULATED_DATA_ARRAYS, + PUBLIC_ACCUMULATED_DATA_LENGTH }, - traits::{Empty, Serialize, Deserialize}, utils::reader::Reader + traits::{Empty, Serialize, Deserialize}, utils::{arrays::array_length, reader::Reader} }; -struct PublicAccumulatedData { +pub struct PublicAccumulatedData { note_hashes: [ScopedNoteHash; MAX_NOTE_HASHES_PER_TX], nullifiers: [Nullifier; MAX_NULLIFIERS_PER_TX], l2_to_l1_msgs: [ScopedL2ToL1Message; MAX_L2_TO_L1_MSGS_PER_TX], @@ -147,6 +148,98 @@ impl Eq for PublicAccumulatedData { } } +pub struct PublicAccumulatedDataArrayLengths { + note_hashes: u32, + nullifiers: u32, + l2_to_l1_msgs: u32, + note_encrypted_logs_hashes: u32, + encrypted_logs_hashes: u32, + unencrypted_logs_hashes: u32, + public_data_update_requests: u32, + public_call_stack: u32, +} + +impl PublicAccumulatedDataArrayLengths { + pub fn new(data: PublicAccumulatedData) -> Self { + PublicAccumulatedDataArrayLengths { + note_hashes: array_length(data.note_hashes), + nullifiers: array_length(data.nullifiers), + l2_to_l1_msgs: array_length(data.l2_to_l1_msgs), + note_encrypted_logs_hashes: array_length(data.note_encrypted_logs_hashes), + encrypted_logs_hashes: array_length(data.encrypted_logs_hashes), + unencrypted_logs_hashes: array_length(data.unencrypted_logs_hashes), + public_data_update_requests: array_length(data.public_data_update_requests), + public_call_stack: array_length(data.public_call_stack) + } + } +} + +impl Empty for PublicAccumulatedDataArrayLengths { + fn empty() -> Self { + PublicAccumulatedDataArrayLengths { + note_hashes: 0, + nullifiers: 0, + l2_to_l1_msgs: 0, + note_encrypted_logs_hashes: 0, + encrypted_logs_hashes: 0, + unencrypted_logs_hashes: 0, + public_data_update_requests: 0, + public_call_stack: 0 + } + } +} + +impl Eq for PublicAccumulatedDataArrayLengths { + fn eq(self, other: Self) -> bool { + (self.note_hashes == other.note_hashes) + & (self.nullifiers == other.nullifiers) + & (self.l2_to_l1_msgs == other.l2_to_l1_msgs) + & (self.note_encrypted_logs_hashes == other.note_encrypted_logs_hashes) + & (self.encrypted_logs_hashes == other.encrypted_logs_hashes) + & (self.unencrypted_logs_hashes == other.unencrypted_logs_hashes) + & (self.public_data_update_requests + == other.public_data_update_requests) + & (self.public_call_stack == other.public_call_stack) + } +} + +impl Serialize for PublicAccumulatedDataArrayLengths { + fn serialize(self) -> [Field; NUM_PUBLIC_ACCUMULATED_DATA_ARRAYS] { + let mut fields: BoundedVec = BoundedVec::new(); + + fields.push(self.note_hashes as Field); + fields.push(self.nullifiers as Field); + fields.push(self.l2_to_l1_msgs as Field); + fields.push(self.note_encrypted_logs_hashes as Field); + fields.push(self.encrypted_logs_hashes as Field); + fields.push(self.unencrypted_logs_hashes as Field); + fields.push(self.public_data_update_requests as Field); + fields.push(self.public_call_stack as Field); + + fields.storage + } +} + +impl Deserialize for PublicAccumulatedDataArrayLengths { + fn deserialize(fields: [Field; NUM_PUBLIC_ACCUMULATED_DATA_ARRAYS]) -> PublicAccumulatedDataArrayLengths { + let mut reader = Reader::new(fields); + + let item = Self { + note_hashes: reader.read_u32(), + nullifiers: reader.read_u32(), + l2_to_l1_msgs: reader.read_u32(), + note_encrypted_logs_hashes: reader.read_u32(), + encrypted_logs_hashes: reader.read_u32(), + unencrypted_logs_hashes: reader.read_u32(), + public_data_update_requests: reader.read_u32(), + public_call_stack: reader.read_u32() + }; + + reader.finish(); + item + } +} + #[test] fn serialization_of_empty() { let item = PublicAccumulatedData::empty(); @@ -154,3 +247,11 @@ fn serialization_of_empty() { let deserialized = PublicAccumulatedData::deserialize(serialized); assert(item.eq(deserialized)); } + +#[test] +fn serialization_of_empty_array_lengths() { + let item = PublicAccumulatedDataArrayLengths::empty(); + let serialized = item.serialize(); + let deserialized = PublicAccumulatedDataArrayLengths::deserialize(serialized); + assert(item.eq(deserialized)); +} diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/public_accumulated_data_builder.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/public_accumulated_data_builder.nr index b1f768852a1..e69d6dc7432 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/public_accumulated_data_builder.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/public_accumulated_data_builder.nr @@ -13,7 +13,7 @@ use crate::{ traits::Empty, utils::arrays::array_to_bounded_vec }; -struct PublicAccumulatedDataBuilder { +pub struct PublicAccumulatedDataBuilder { note_hashes: BoundedVec, nullifiers: BoundedVec, l2_to_l1_msgs: BoundedVec, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/append_only_tree_snapshot.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/append_only_tree_snapshot.nr index a4527980e83..5967effa446 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/append_only_tree_snapshot.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/append_only_tree_snapshot.nr @@ -1,4 +1,4 @@ -struct AppendOnlyTreeSnapshot { +pub struct AppendOnlyTreeSnapshot { root : Field, // TODO(Alvaro) change this to a u64 next_available_leaf_index : u32 diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/call_context.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/call_context.nr index 269a8cf15cb..64da68a2ac5 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/call_context.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/call_context.nr @@ -4,7 +4,7 @@ use crate::{ }; // docs:start:call-context -struct CallContext { +pub struct CallContext { msg_sender: AztecAddress, storage_contract_address: AztecAddress, function_selector: FunctionSelector, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/combined_constant_data.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/combined_constant_data.nr index 8d0f074c353..fc5b478fa24 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/combined_constant_data.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/combined_constant_data.nr @@ -5,7 +5,7 @@ use crate::abis::global_variables::GlobalVariables; use crate::constants::COMBINED_CONSTANT_DATA_LENGTH; use crate::utils::reader::Reader; -struct CombinedConstantData { +pub struct CombinedConstantData { historical_header: Header, // Note: `chain_id` and `version` in tx_context are not redundant to the values in // self.historical_header.global_variables because they can be different in case of a protocol upgrade. In such diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/contract_class_function_leaf_preimage.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/contract_class_function_leaf_preimage.nr index 2e2097bc9be..9a6349b4e6d 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/contract_class_function_leaf_preimage.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/contract_class_function_leaf_preimage.nr @@ -3,7 +3,7 @@ use crate::constants::GENERATOR_INDEX__FUNCTION_LEAF; use crate::traits::Hash; use crate::hash::poseidon2_hash_with_separator; -struct ContractClassFunctionLeafPreimage { +pub struct ContractClassFunctionLeafPreimage { selector : FunctionSelector, vk_hash : Field, } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/enqueued_call_data.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/enqueued_call_data.nr new file mode 100644 index 00000000000..8aa99d22665 --- /dev/null +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/enqueued_call_data.nr @@ -0,0 +1,9 @@ +use crate::abis::{kernel_circuit_public_inputs::vm_circuit_public_inputs::VMCircuitPublicInputs}; + +// Mocked here as the only remaining non-recursive proof +pub struct Proof {} + +pub struct EnqueuedCallData { + data: VMCircuitPublicInputs, + proof: Proof, +} diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/event_selector.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/event_selector.nr index 25a41ad1b35..b456c2fd03f 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/event_selector.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/event_selector.nr @@ -1,9 +1,9 @@ use crate::utils::field::field_from_bytes; use crate::traits::{Serialize, Deserialize, FromField, ToField, Empty}; -global SELECTOR_SIZE = 4; +global SELECTOR_SIZE: u32 = 4; -struct EventSelector { +pub struct EventSelector { // 1st 4-bytes (big-endian leftmost) of abi-encoding of an event. inner: u32, } @@ -51,14 +51,12 @@ impl EventSelector { pub fn from_signature(signature: str) -> Self { let bytes = signature.as_bytes(); - let hash = std::hash::keccak256(bytes, bytes.len() as u32); + let hash = crate::hash::poseidon2_hash_bytes(bytes); - let mut selector_be_bytes = [0; SELECTOR_SIZE]; - for i in 0..SELECTOR_SIZE { - selector_be_bytes[i] = hash[i]; - } + // We choose the last SELECTOR_SIZE bytes of the hash to avoid getting the first byte that is not full + let hash_bytes = hash.to_be_bytes::(); - EventSelector::from_field(field_from_bytes(selector_be_bytes, true)) + EventSelector::from_field(field_from_bytes(hash_bytes, true)) } pub fn zero() -> Self { diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/function_data.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/function_data.nr index a32c9fc9907..2e62c732e46 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/function_data.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/function_data.nr @@ -3,7 +3,7 @@ use crate::{ traits::{Serialize, Deserialize, Empty} }; -struct FunctionData { +pub struct FunctionData { selector : FunctionSelector, is_private : bool, } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/function_selector.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/function_selector.nr index 80075b751bd..f5a81195504 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/function_selector.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/function_selector.nr @@ -1,9 +1,9 @@ use crate::utils::field::field_from_bytes; use crate::traits::{Serialize, Deserialize, FromField, ToField, Empty}; -global SELECTOR_SIZE = 4; +global SELECTOR_SIZE: u32 = 4; -struct FunctionSelector { +pub struct FunctionSelector { // 1st 4-bytes of abi-encoding of function. inner: u32, } @@ -51,17 +51,27 @@ impl FunctionSelector { pub fn from_signature(signature: str) -> Self { let bytes = signature.as_bytes(); - let hash = std::hash::keccak256(bytes, bytes.len() as u32); + let hash = crate::hash::poseidon2_hash_bytes(bytes); - let mut selector_be_bytes = [0; SELECTOR_SIZE]; - for i in 0..SELECTOR_SIZE { - selector_be_bytes[i] = hash[i]; - } + // We choose the last SELECTOR_SIZE bytes of the hash to avoid getting the first byte that is not full + let hash_bytes = hash.to_be_bytes::(); - FunctionSelector::from_field(field_from_bytes(selector_be_bytes, true)) + FunctionSelector::from_field(field_from_bytes(hash_bytes, true)) } pub fn zero() -> Self { Self { inner: 0 } } } + +#[test] +fn test_is_valid_selector() { + let selector = FunctionSelector::from_signature("IS_VALID()"); + assert_eq(selector.to_field(), 0x73cdda47); +} + +#[test] +fn test_long_selector() { + let selector = FunctionSelector::from_signature("foo_and_bar_and_baz_and_foo_bar_baz_and_bar_foo"); + assert_eq(selector.to_field(), 0x7590a997); +} diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/gas.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/gas.nr index d0622d27cde..3225fdbc51d 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/gas.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/gas.nr @@ -4,7 +4,7 @@ use crate::{ }; use std::ops::{Add, Sub}; -struct Gas { +pub struct Gas { da_gas: u32, l2_gas: u32, } @@ -74,4 +74,3 @@ fn serialization_of_empty() { let deserialized = Gas::deserialize(serialized); assert(item.eq(deserialized)); } - diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/gas_fees.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/gas_fees.nr index f87ca6f31e2..86a1280e433 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/gas_fees.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/gas_fees.nr @@ -1,6 +1,6 @@ use crate::{constants::GAS_FEES_LENGTH, traits::{Deserialize, Serialize, Empty}}; -struct GasFees { +pub struct GasFees { fee_per_da_gas: Field, fee_per_l2_gas: Field, } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/gas_settings.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/gas_settings.nr index ec380971601..004e7321a27 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/gas_settings.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/gas_settings.nr @@ -7,7 +7,7 @@ use crate::{ traits::{Deserialize, Serialize, Empty}, utils::reader::Reader }; -struct GasSettings { +pub struct GasSettings { gas_limits: Gas, teardown_gas_limits: Gas, max_fees_per_gas: GasFees, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/global_variables.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/global_variables.nr index 7dde548565e..799c9617c75 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/global_variables.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/global_variables.nr @@ -4,7 +4,7 @@ use crate::{ }; // docs:start:global-variables -struct GlobalVariables { +pub struct GlobalVariables { chain_id : Field, version : Field, block_number : Field, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/kernel_circuit_public_inputs.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/kernel_circuit_public_inputs.nr index ffa2bc7ab45..e1fa46b77e8 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/kernel_circuit_public_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/kernel_circuit_public_inputs.nr @@ -8,7 +8,7 @@ use crate::{ utils::reader::Reader }; -struct KernelCircuitPublicInputs { +pub struct KernelCircuitPublicInputs { rollup_validation_requests: RollupValidationRequests, end: CombinedAccumulatedData, constants: CombinedConstantData, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/mod.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/mod.nr index d30b2feeea2..9ae785af23c 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/mod.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/mod.nr @@ -3,9 +3,11 @@ mod private_kernel_circuit_public_inputs; mod private_kernel_circuit_public_inputs_builder; mod public_kernel_circuit_public_inputs; mod public_kernel_circuit_public_inputs_builder; +mod vm_circuit_public_inputs; pub use kernel_circuit_public_inputs::KernelCircuitPublicInputs; pub use private_kernel_circuit_public_inputs::{PrivateKernelCircuitPublicInputs, PrivateKernelCircuitPublicInputsArrayLengths}; pub use private_kernel_circuit_public_inputs_builder::PrivateKernelCircuitPublicInputsBuilder; pub use public_kernel_circuit_public_inputs::PublicKernelCircuitPublicInputs; pub use public_kernel_circuit_public_inputs_builder::PublicKernelCircuitPublicInputsBuilder; +pub use vm_circuit_public_inputs::VMCircuitPublicInputs; diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/private_kernel_circuit_public_inputs.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/private_kernel_circuit_public_inputs.nr index ff93719dd87..a84b06e1a21 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/private_kernel_circuit_public_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/private_kernel_circuit_public_inputs.nr @@ -7,7 +7,7 @@ use crate::{ traits::{Serialize, Deserialize, Empty}, utils::{arrays::array_length, reader::Reader} }; -struct PrivateKernelCircuitPublicInputsArrayLengths { +pub struct PrivateKernelCircuitPublicInputsArrayLengths { note_hash_read_requests: u32, nullifier_read_requests: u32, scoped_key_validation_requests_and_generators: u32, @@ -73,7 +73,7 @@ impl Eq for PrivateKernelCircuitPublicInputsArrayLengths { } } -struct PrivateKernelCircuitPublicInputs { +pub struct PrivateKernelCircuitPublicInputs { min_revertible_side_effect_counter: u32, validation_requests: PrivateValidationRequests, end: PrivateAccumulatedData, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/private_kernel_circuit_public_inputs_builder.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/private_kernel_circuit_public_inputs_builder.nr index add7c553b6e..8c84cf9b8b8 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/private_kernel_circuit_public_inputs_builder.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/private_kernel_circuit_public_inputs_builder.nr @@ -7,7 +7,7 @@ use crate::{ address::AztecAddress, traits::Empty }; -struct PrivateKernelCircuitPublicInputsBuilder { +pub struct PrivateKernelCircuitPublicInputsBuilder { min_revertible_side_effect_counter: u32, validation_requests: PrivateValidationRequestsBuilder, end: PrivateAccumulatedDataBuilder, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/public_kernel_circuit_public_inputs.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/public_kernel_circuit_public_inputs.nr index 0f24e976331..5f3351423e5 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/public_kernel_circuit_public_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/public_kernel_circuit_public_inputs.nr @@ -3,31 +3,32 @@ use crate::{ accumulated_data::PublicAccumulatedData, combined_constant_data::CombinedConstantData, public_call_request::PublicCallRequest, validation_requests::PublicValidationRequests }, - address::AztecAddress, - constants::{MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, PUBLIC_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH}, + address::AztecAddress, constants::PUBLIC_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH, traits::{Empty, Serialize, Deserialize}, utils::reader::Reader }; -struct PublicKernelCircuitPublicInputs { +pub struct PublicKernelCircuitPublicInputs { + constants: CombinedConstantData, validation_requests: PublicValidationRequests, end_non_revertible: PublicAccumulatedData, end: PublicAccumulatedData, - constants: CombinedConstantData, + end_side_effect_counter: u32, + public_teardown_call_request: PublicCallRequest, + fee_payer: AztecAddress, revert_code: u8, - public_teardown_call_stack: [PublicCallRequest; MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX], - fee_payer: AztecAddress } impl Empty for PublicKernelCircuitPublicInputs { fn empty() -> Self { PublicKernelCircuitPublicInputs { + constants: CombinedConstantData::empty(), validation_requests: PublicValidationRequests::empty(), end_non_revertible: PublicAccumulatedData::empty(), end: PublicAccumulatedData::empty(), - constants: CombinedConstantData::empty(), - revert_code: 0, - public_teardown_call_stack: [PublicCallRequest::empty(); MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX], - fee_payer: AztecAddress::empty() + end_side_effect_counter: 0, + public_teardown_call_request: PublicCallRequest::empty(), + fee_payer: AztecAddress::empty(), + revert_code: 0 } } } @@ -36,17 +37,14 @@ impl Serialize for PublicKernelCircu fn serialize(self) -> [Field; PUBLIC_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH] { let mut fields: BoundedVec = BoundedVec::new(); + fields.extend_from_array(self.constants.serialize()); fields.extend_from_array(self.validation_requests.serialize()); fields.extend_from_array(self.end_non_revertible.serialize()); fields.extend_from_array(self.end.serialize()); - fields.extend_from_array(self.constants.serialize()); - fields.push(self.revert_code as Field); - - for i in 0..MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX { - fields.extend_from_array(self.public_teardown_call_stack[i].serialize()); - } - + fields.push(self.end_side_effect_counter as Field); + fields.extend_from_array(self.public_teardown_call_request.serialize()); fields.extend_from_array(self.fee_payer.serialize()); + fields.push(self.revert_code as Field); assert_eq(fields.len(), PUBLIC_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH); @@ -59,16 +57,14 @@ impl Deserialize for PublicKernelCir let mut reader = Reader::new(fields); let item = PublicKernelCircuitPublicInputs { + constants: reader.read_struct(CombinedConstantData::deserialize), validation_requests: reader.read_struct(PublicValidationRequests::deserialize), end_non_revertible: reader.read_struct(PublicAccumulatedData::deserialize), end: reader.read_struct(PublicAccumulatedData::deserialize), - constants: reader.read_struct(CombinedConstantData::deserialize), - revert_code: reader.read() as u8, - public_teardown_call_stack: reader.read_struct_array( - PublicCallRequest::deserialize, - [PublicCallRequest::empty(); MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX] - ), - fee_payer: reader.read_struct(AztecAddress::deserialize) + end_side_effect_counter: reader.read_u32(), + public_teardown_call_request: reader.read_struct(PublicCallRequest::deserialize), + fee_payer: reader.read_struct(AztecAddress::deserialize), + revert_code: reader.read() as u8 }; reader.finish(); item @@ -77,12 +73,14 @@ impl Deserialize for PublicKernelCir impl Eq for PublicKernelCircuitPublicInputs { fn eq(self, other: Self) -> bool { - (self.validation_requests == other.validation_requests) + (self.constants == other.constants) + & (self.validation_requests == other.validation_requests) & (self.end_non_revertible == other.end_non_revertible) & (self.end == other.end) - & (self.constants == other.constants) + & (self.end_side_effect_counter == other.end_side_effect_counter) + & (self.public_teardown_call_request == other.public_teardown_call_request) + & (self.fee_payer == other.fee_payer) & (self.revert_code == other.revert_code) - & (self.public_teardown_call_stack == other.public_teardown_call_stack) } } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/public_kernel_circuit_public_inputs_builder.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/public_kernel_circuit_public_inputs_builder.nr index 0da08008e81..e40de7784e9 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/public_kernel_circuit_public_inputs_builder.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/public_kernel_circuit_public_inputs_builder.nr @@ -4,45 +4,47 @@ use crate::{ kernel_circuit_public_inputs::{public_kernel_circuit_public_inputs::PublicKernelCircuitPublicInputs}, public_call_request::PublicCallRequest, validation_requests::PublicValidationRequestsBuilder }, - address::AztecAddress, constants::MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, traits::Empty, - utils::arrays::array_to_bounded_vec + address::AztecAddress, traits::Empty }; -struct PublicKernelCircuitPublicInputsBuilder { +pub struct PublicKernelCircuitPublicInputsBuilder { + constants: CombinedConstantData, validation_requests: PublicValidationRequestsBuilder, end_non_revertible: PublicAccumulatedDataBuilder, end: PublicAccumulatedDataBuilder, - constants: CombinedConstantData, - revert_code: u8, - public_teardown_call_stack: BoundedVec, + end_side_effect_counter: u32, + public_teardown_call_request: PublicCallRequest, fee_payer: AztecAddress, + revert_code: u8, } impl PublicKernelCircuitPublicInputsBuilder { pub fn new(data: PublicKernelCircuitPublicInputs) -> Self { PublicKernelCircuitPublicInputsBuilder { + constants: data.constants, validation_requests: PublicValidationRequestsBuilder::new(data.validation_requests), end_non_revertible: PublicAccumulatedDataBuilder::new(data.end_non_revertible), end: PublicAccumulatedDataBuilder::new(data.end), - constants: data.constants, - revert_code: data.revert_code, - public_teardown_call_stack: array_to_bounded_vec(data.public_teardown_call_stack), - fee_payer: data.fee_payer + end_side_effect_counter: data.end_side_effect_counter, + public_teardown_call_request: data.public_teardown_call_request, + fee_payer: data.fee_payer, + revert_code: data.revert_code } } pub fn finish(self) -> PublicKernelCircuitPublicInputs { PublicKernelCircuitPublicInputs { + constants: self.constants, // Note that we're including both the validation_requests AND the rollup_validation requests, because this // struct is used as an input for both the public kernel and base rollup circuits. In the near future the // base rollup will only receive rollup_validation_requests, and the public kernel only validation_requests. validation_requests: self.validation_requests.finish(), end_non_revertible: self.end_non_revertible.finish(), end: self.end.finish(), - constants: self.constants, - revert_code: self.revert_code, - public_teardown_call_stack: self.public_teardown_call_stack.storage, - fee_payer: self.fee_payer + end_side_effect_counter: self.end_side_effect_counter, + public_teardown_call_request: self.public_teardown_call_request, + fee_payer: self.fee_payer, + revert_code: self.revert_code } } } @@ -50,13 +52,14 @@ impl PublicKernelCircuitPublicInputsBuilder { impl Empty for PublicKernelCircuitPublicInputsBuilder { fn empty() -> Self { PublicKernelCircuitPublicInputsBuilder { + constants: CombinedConstantData::empty(), validation_requests: PublicValidationRequestsBuilder::empty(), end_non_revertible: PublicAccumulatedDataBuilder::empty(), end: PublicAccumulatedDataBuilder::empty(), - constants: CombinedConstantData::empty(), - revert_code: 0 as u8, - public_teardown_call_stack: BoundedVec::new(), - fee_payer: AztecAddress::empty() + end_side_effect_counter: 0, + public_teardown_call_request: PublicCallRequest::empty(), + fee_payer: AztecAddress::empty(), + revert_code: 0 as u8 } } } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/vm_circuit_public_inputs.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/vm_circuit_public_inputs.nr new file mode 100644 index 00000000000..8aec60ac157 --- /dev/null +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_circuit_public_inputs/vm_circuit_public_inputs.nr @@ -0,0 +1,126 @@ +use crate::{ + abis::{ + accumulated_data::{PublicAccumulatedData, PublicAccumulatedDataArrayLengths}, + combined_constant_data::CombinedConstantData, gas::Gas, public_call_request::PublicCallRequest, + public_inner_call_request::PublicInnerCallRequest, + validation_requests::{PublicValidationRequests, PublicValidationRequestArrayLengths} +}, + constants::{MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, VM_CIRCUIT_PUBLIC_INPUTS_LENGTH}, + traits::{Deserialize, Empty, Serialize}, utils::reader::Reader +}; + +pub struct VMCircuitPublicInputs { + constants: CombinedConstantData, + call_request: PublicCallRequest, + + // TODO(#7124): To be deprecated. + public_call_stack: [PublicInnerCallRequest; MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX], + + previous_validation_request_array_lengths: PublicValidationRequestArrayLengths, // Lengths of the validation requests before the enqueued call. + validation_requests: PublicValidationRequests, // Validation requests emitted throughout the enqueued call. + previous_accumulated_data_array_lengths: PublicAccumulatedDataArrayLengths, // Lengths of the accumulated data before the enqueued call. + accumulated_data: PublicAccumulatedData, // Data emitted throughout the enqueued call. + start_side_effect_counter: u32, + end_side_effect_counter: u32, + start_gas_left: Gas, + transaction_fee: Field, + reverted: bool, +} + +impl Empty for VMCircuitPublicInputs { + fn empty() -> Self { + VMCircuitPublicInputs { + constants: CombinedConstantData::empty(), + call_request: PublicCallRequest::empty(), + public_call_stack: [PublicInnerCallRequest::empty(); MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX], + previous_validation_request_array_lengths: PublicValidationRequestArrayLengths::empty(), + validation_requests: PublicValidationRequests::empty(), + previous_accumulated_data_array_lengths: PublicAccumulatedDataArrayLengths::empty(), + accumulated_data: PublicAccumulatedData::empty(), + start_side_effect_counter: 0, + end_side_effect_counter: 0, + start_gas_left: Gas::empty(), + transaction_fee: 0, + reverted: false + } + } +} + +impl Eq for VMCircuitPublicInputs { + fn eq(self, other: Self) -> bool { + (self.constants == other.constants) + & (self.call_request == other.call_request) + & (self.public_call_stack == other.public_call_stack) + & (self.previous_validation_request_array_lengths + == other.previous_validation_request_array_lengths) + & (self.validation_requests == other.validation_requests) + & (self.previous_accumulated_data_array_lengths + == other.previous_accumulated_data_array_lengths) + & (self.accumulated_data == other.accumulated_data) + & (self.start_side_effect_counter + == other.start_side_effect_counter) + & (self.end_side_effect_counter + == other.end_side_effect_counter) + & (self.start_gas_left == other.start_gas_left) + & (self.transaction_fee == other.transaction_fee) + & (self.reverted == other.reverted) + } +} + +impl Serialize for VMCircuitPublicInputs { + fn serialize(self) -> [Field; VM_CIRCUIT_PUBLIC_INPUTS_LENGTH] { + let mut fields: BoundedVec = BoundedVec::new(); + + fields.extend_from_array(self.constants.serialize()); + fields.extend_from_array(self.call_request.serialize()); + for i in 0..MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX { + fields.extend_from_array(self.public_call_stack[i].serialize()); + } + fields.extend_from_array(self.previous_validation_request_array_lengths.serialize()); + fields.extend_from_array(self.validation_requests.serialize()); + fields.extend_from_array(self.previous_accumulated_data_array_lengths.serialize()); + fields.extend_from_array(self.accumulated_data.serialize()); + fields.push(self.start_side_effect_counter as Field); + fields.push(self.end_side_effect_counter as Field); + fields.extend_from_array(self.start_gas_left.serialize()); + fields.push(self.transaction_fee); + fields.push(self.reverted as Field); + + assert_eq(fields.len(), VM_CIRCUIT_PUBLIC_INPUTS_LENGTH); + + fields.storage + } +} + +impl Deserialize for VMCircuitPublicInputs { + fn deserialize(fields: [Field; VM_CIRCUIT_PUBLIC_INPUTS_LENGTH]) -> VMCircuitPublicInputs { + let mut reader = Reader::new(fields); + let item = VMCircuitPublicInputs { + constants: reader.read_struct(CombinedConstantData::deserialize), + call_request: reader.read_struct(PublicCallRequest::deserialize), + public_call_stack: reader.read_struct_array( + PublicInnerCallRequest::deserialize, + [PublicInnerCallRequest::empty(); MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX] + ), + previous_validation_request_array_lengths: reader.read_struct(PublicValidationRequestArrayLengths::deserialize), + validation_requests: reader.read_struct(PublicValidationRequests::deserialize), + previous_accumulated_data_array_lengths: reader.read_struct(PublicAccumulatedDataArrayLengths::deserialize), + accumulated_data: reader.read_struct(PublicAccumulatedData::deserialize), + start_side_effect_counter: reader.read_u32(), + end_side_effect_counter: reader.read_u32(), + start_gas_left: reader.read_struct(Gas::deserialize), + transaction_fee: reader.read(), + reverted: reader.read() as bool + }; + reader.finish(); + item + } +} + +#[test] +fn serialization_of_empty() { + let item = VMCircuitPublicInputs::empty(); + let serialized = item.serialize(); + let deserialized = VMCircuitPublicInputs::deserialize(serialized); + assert(item.eq(deserialized)); +} diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_data.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_data.nr index 49390ded212..82934bf8360 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_data.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/kernel_data.nr @@ -5,7 +5,7 @@ use crate::{ utils::arrays::find_index_hint }; -struct KernelData { +pub struct KernelData { public_inputs: KernelCircuitPublicInputs, proof: NestedRecursiveProof, vk: VerificationKey, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/log_hash.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/log_hash.nr index 034b99e8e15..48de98abbc5 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/log_hash.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/log_hash.nr @@ -7,7 +7,7 @@ use crate::{ traits::{Empty, Serialize, Deserialize}, utils::{arrays::array_concat, reader::Reader} }; -struct LogHash { +pub struct LogHash { value: Field, counter: u32, length: Field, @@ -60,7 +60,7 @@ impl LogHash { } } -struct ScopedLogHash { +pub struct ScopedLogHash { log_hash: LogHash, contract_address: AztecAddress, } @@ -129,7 +129,7 @@ impl ScopedLogHash { } } -struct EncryptedLogHash { +pub struct EncryptedLogHash { value: Field, counter: u32, length: Field, @@ -184,7 +184,7 @@ impl EncryptedLogHash { } } -struct ScopedEncryptedLogHash { +pub struct ScopedEncryptedLogHash { log_hash: EncryptedLogHash, contract_address: AztecAddress, } @@ -254,7 +254,7 @@ impl Deserialize for ScopedEncryptedLogHash { } } -struct NoteLogHash { +pub struct NoteLogHash { value: Field, counter: u32, length: Field, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/max_block_number.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/max_block_number.nr index 05aafd9b80c..f9d6a09c372 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/max_block_number.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/max_block_number.nr @@ -1,6 +1,6 @@ use crate::{constants::MAX_BLOCK_NUMBER_LENGTH, traits::{Deserialize, Serialize, Empty}}; -struct MaxBlockNumber { +pub struct MaxBlockNumber { _opt: Option } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/mod.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/mod.nr index 87f44a23b0c..21df3495695 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/mod.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/mod.nr @@ -32,14 +32,17 @@ mod kernel_circuit_public_inputs; mod kernel_data; mod private_kernel_data; mod public_kernel_data; +mod public_kernel_inner_data; mod private_call_request; mod private_call_stack_item; mod public_call_request; mod public_call_stack_item; mod public_call_stack_item_compressed; +mod public_inner_call_request; mod call_context; +mod enqueued_call_data; mod public_call_data; mod public_circuit_public_inputs; diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/note_hash.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/note_hash.nr index ad3ed114ab6..22a2c7e5238 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/note_hash.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/note_hash.nr @@ -5,7 +5,7 @@ use crate::{ utils::{arrays::array_concat, reader::Reader} }; -struct NoteHash { +pub struct NoteHash { value: Field, counter: u32, } @@ -46,7 +46,7 @@ impl NoteHash { } } -struct ScopedNoteHash { +pub struct ScopedNoteHash { note_hash: NoteHash, contract_address: AztecAddress, } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/note_hash_leaf_preimage.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/note_hash_leaf_preimage.nr index 652f8bf3732..deebd8fb118 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/note_hash_leaf_preimage.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/note_hash_leaf_preimage.nr @@ -1,11 +1,11 @@ -global NOTE_HASH_LEAF_PREIMAGE_LENGTH: u64 = 1; +global NOTE_HASH_LEAF_PREIMAGE_LENGTH: u32 = 1; use crate::{ abis::{read_request::ScopedReadRequest, side_effect::Readable}, hash::compute_siloed_note_hash, merkle_tree::leaf_preimage::LeafPreimage, traits::Empty }; -struct NoteHashLeafPreimage { +pub struct NoteHashLeafPreimage { value : Field, } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/nullifier.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/nullifier.nr index 13b2105c640..93bf2cfec28 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/nullifier.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/nullifier.nr @@ -5,7 +5,7 @@ use crate::{ utils::{arrays::array_concat, reader::Reader} }; -struct Nullifier { +pub struct Nullifier { value: Field, counter: u32, note_hash: Field, @@ -70,7 +70,7 @@ impl Nullifier { } } -struct ScopedNullifier { +pub struct ScopedNullifier { nullifier: Nullifier, contract_address: AztecAddress, } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/nullifier_leaf_preimage.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/nullifier_leaf_preimage.nr index e3e40bd7bf6..4321af0c13f 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/nullifier_leaf_preimage.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/nullifier_leaf_preimage.nr @@ -5,7 +5,7 @@ use crate::{ merkle_tree::leaf_preimage::{LeafPreimage, IndexedTreeLeafPreimage}, traits::{Empty, Hash} }; -struct NullifierLeafPreimage { +pub struct NullifierLeafPreimage { nullifier : Field, next_nullifier :Field, next_index : u32, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_call_request.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_call_request.nr index d0b64e0890b..d682d3be4ff 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_call_request.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_call_request.nr @@ -4,7 +4,7 @@ use crate::{ utils::reader::Reader }; -struct PrivateCallRequest { +pub struct PrivateCallRequest { contract_address: AztecAddress, call_context: CallContext, args_hash: Field, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_call_stack_item.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_call_stack_item.nr index 5cd0a86d6aa..e6dd0ca7dca 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_call_stack_item.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_call_stack_item.nr @@ -4,7 +4,7 @@ use crate::{ traits::{Deserialize, Serialize, Empty}, utils::reader::Reader }; -struct PrivateCallStackItem { +pub struct PrivateCallStackItem { // This is the _actual_ contract address relating to where this function's code resides in the // contract tree. Regardless of whether this is a call or delegatecall, this // `contract_address` _does not change_. Amongst other things, it's used as a lookup for diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_circuit_public_inputs.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_circuit_public_inputs.nr index a1565d85df3..0c9121a206b 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_circuit_public_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_circuit_public_inputs.nr @@ -16,7 +16,7 @@ use crate::{ utils::reader::Reader, transaction::tx_context::TxContext, utils::arrays::validate_array }; -struct PrivateCircuitPublicInputsArrayLengths { +pub struct PrivateCircuitPublicInputsArrayLengths { note_hash_read_requests: u32, nullifier_read_requests: u32, key_validation_requests_and_generators: u32, @@ -48,7 +48,8 @@ impl PrivateCircuitPublicInputsArrayLengths { } } -struct PrivateCircuitPublicInputs { +// Public inputs to private app circuit. +pub struct PrivateCircuitPublicInputs { call_context: CallContext, args_hash: Field, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_kernel/private_call_data.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_kernel/private_call_data.nr index 512d114dbc6..b60eed12cad 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_kernel/private_call_data.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_kernel/private_call_data.nr @@ -4,7 +4,7 @@ use crate::{ merkle_tree::membership::MembershipWitness, recursion::{verification_key::VerificationKey} }; -struct PrivateCallData { +pub struct PrivateCallData { call_stack_item: PrivateCallStackItem, vk: VerificationKey, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_kernel_data.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_kernel_data.nr index 623ef5f1cad..2da1b406533 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_kernel_data.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_kernel_data.nr @@ -4,7 +4,7 @@ use crate::{ utils::arrays::find_index_hint }; -struct PrivateKernelData { +pub struct PrivateKernelData { public_inputs: PrivateKernelCircuitPublicInputs, vk: VerificationKey, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_data.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_data.nr index 534b6882053..16a1099a399 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_data.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_data.nr @@ -1,9 +1,10 @@ use crate::abis::public_call_stack_item::PublicCallStackItem; // Mocked here as the only remaining non-recursive proof -struct Proof {} +pub struct Proof {} -struct PublicCallData { +// TODO(#7124): To be deprecated. +pub struct PublicCallData { call_stack_item: PublicCallStackItem, proof: Proof, bytecode_hash: Field, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_request.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_request.nr index 26fe27373ff..7a1eaf96265 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_request.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_request.nr @@ -1,11 +1,13 @@ use crate::{ - abis::{public_call_stack_item_compressed::PublicCallStackItemCompressed, side_effect::Ordered}, + abis::{call_context::CallContext, side_effect::Ordered}, address::AztecAddress, constants::PUBLIC_CALL_REQUEST_LENGTH, traits::{Empty, Serialize, Deserialize}, utils::reader::Reader }; -struct PublicCallRequest { - item: PublicCallStackItemCompressed, +pub struct PublicCallRequest { + contract_address: AztecAddress, + call_context: CallContext, + args_hash: Field, counter: u32, } @@ -17,19 +19,27 @@ impl Ordered for PublicCallRequest { impl Eq for PublicCallRequest { fn eq(self, other: PublicCallRequest) -> bool { - (other.item == self.item) & (other.counter == self.counter) + (self.contract_address == other.contract_address) + & (self.call_context == other.call_context) + & (self.args_hash == other.args_hash) + & (self.counter == other.counter) } } impl Empty for PublicCallRequest { fn empty() -> Self { - PublicCallRequest { item: PublicCallStackItemCompressed::empty(), counter: 0 } + PublicCallRequest { contract_address: AztecAddress::empty(), call_context: CallContext::empty(), args_hash: 0, counter: 0 } } } impl PublicCallRequest { pub fn expose_to_public(self) -> Self { - PublicCallRequest { item: self.item, counter: 0 } + PublicCallRequest { + contract_address: self.contract_address, + call_context: self.call_context, + args_hash: self.args_hash, + counter: 0 + } } } @@ -37,7 +47,9 @@ impl Serialize for PublicCallRequest { fn serialize(self) -> [Field; PUBLIC_CALL_REQUEST_LENGTH] { let mut fields: BoundedVec = BoundedVec::new(); - fields.extend_from_array(self.item.serialize()); + fields.push(self.contract_address.to_field()); + fields.extend_from_array(self.call_context.serialize()); + fields.push(self.args_hash); fields.push(self.counter as Field); assert_eq(fields.len(), PUBLIC_CALL_REQUEST_LENGTH); @@ -50,7 +62,12 @@ impl Deserialize for PublicCallRequest { fn deserialize(fields: [Field; PUBLIC_CALL_REQUEST_LENGTH]) -> PublicCallRequest { let mut reader = Reader::new(fields); - let request = PublicCallRequest { item: reader.read_struct(PublicCallStackItemCompressed::deserialize), counter: reader.read_u32() }; + let request = PublicCallRequest { + contract_address: reader.read_struct(AztecAddress::deserialize), + call_context: reader.read_struct(CallContext::deserialize), + args_hash: reader.read(), + counter: reader.read_u32() + }; reader.finish(); request } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_stack_item.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_stack_item.nr index 65adfd48593..5a8d9301233 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_stack_item.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_stack_item.nr @@ -1,49 +1,9 @@ -use crate::abis::{ - function_data::FunctionData, public_circuit_public_inputs::PublicCircuitPublicInputs, - public_call_stack_item_compressed::PublicCallStackItemCompressed -}; +use crate::abis::{function_data::FunctionData, public_circuit_public_inputs::PublicCircuitPublicInputs}; use crate::address::AztecAddress; -struct PublicCallStackItem { +// TODO(#7124): To be deprecated. +pub struct PublicCallStackItem { contract_address: AztecAddress, public_inputs: PublicCircuitPublicInputs, function_data: FunctionData, - // True if this call stack item represents a request to execute a function rather than a - // fulfilled execution. Used when enqueuing calls from private to public functions. - is_execution_request: bool, -} - -impl PublicCallStackItem { - fn as_execution_request(self) -> Self { - let public_inputs = self.public_inputs; - let mut request_public_inputs = PublicCircuitPublicInputs::empty(); - request_public_inputs.call_context = public_inputs.call_context; - request_public_inputs.args_hash = public_inputs.args_hash; - - let call_stack_item = PublicCallStackItem { - contract_address: self.contract_address, - function_data: self.function_data, - is_execution_request: true, - public_inputs: request_public_inputs - }; - call_stack_item - } - - fn get_compressed(self) -> PublicCallStackItemCompressed { - let item = if self.is_execution_request { - self.as_execution_request() - } else { - self - }; - - PublicCallStackItemCompressed { - contract_address: item.contract_address, - call_context: item.public_inputs.call_context, - args_hash: item.public_inputs.args_hash, - returns_hash: item.public_inputs.returns_hash, - revert_code: item.public_inputs.revert_code, - start_gas_left: item.public_inputs.start_gas_left, - end_gas_left: item.public_inputs.end_gas_left - } - } } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_stack_item_compressed.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_stack_item_compressed.nr index b2eb5280142..42efa7eb2fb 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_stack_item_compressed.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_stack_item_compressed.nr @@ -7,18 +7,18 @@ use crate::utils::reader::Reader; /** * A compressed version of the PublicCallStackItem struct used to compute the "hash" * of a PublicCallStackItem. - * + * * Historically, we have been zeroing most values in the PublicCallStackItem struct * to compute the hash involved when adding a PublicCallStackItem to the PublicCallStack. - * + * * This struct is used to store the values that we did not zero out, and allow us to hash * only these, thereby skipping a lot of computation and saving us a lot of constraints - * - * Essentially this struct exists such that we don't have a `hash` function in the + * + * Essentially this struct exists such that we don't have a `hash` function in the * PublicCallStackItem struct that practically throws away some values of the struct * without clearly indicating that it does so. */ -struct PublicCallStackItemCompressed { +pub struct PublicCallStackItemCompressed { contract_address: AztecAddress, call_context: CallContext, args_hash: Field, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_circuit_public_inputs.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_circuit_public_inputs.nr index 8721797316c..294406aeb10 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_circuit_public_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_circuit_public_inputs.nr @@ -2,7 +2,7 @@ use crate::{ abis::{ call_context::CallContext, note_hash::NoteHash, nullifier::Nullifier, read_request::ReadRequest, tree_leaf_read_request::TreeLeafReadRequest, gas::Gas, global_variables::GlobalVariables, - log_hash::LogHash, public_call_request::PublicCallRequest + log_hash::LogHash, public_inner_call_request::PublicInnerCallRequest }, address::AztecAddress, constants::{ @@ -18,7 +18,8 @@ use crate::{ utils::reader::Reader }; -struct PublicCircuitPublicInputs { +// Public inputs to public app circuit. +pub struct PublicCircuitPublicInputs { call_context: CallContext, args_hash: Field, @@ -32,7 +33,7 @@ struct PublicCircuitPublicInputs { contract_storage_reads: [StorageRead; MAX_PUBLIC_DATA_READS_PER_CALL], // todo: add sideeffect ranges for the input to these hashes - public_call_requests: [PublicCallRequest; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL], + public_call_requests: [PublicInnerCallRequest; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL], note_hashes: [NoteHash; MAX_NOTE_HASHES_PER_CALL], nullifiers: [Nullifier; MAX_NULLIFIERS_PER_CALL], l2_to_l1_msgs: [L2ToL1Message; MAX_L2_TO_L1_MSGS_PER_CALL], @@ -151,8 +152,8 @@ impl Deserialize for PublicCircuitPublicInp [StorageRead::empty(); MAX_PUBLIC_DATA_READS_PER_CALL] ), public_call_requests: reader.read_struct_array( - PublicCallRequest::deserialize, - [PublicCallRequest::empty(); MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL] + PublicInnerCallRequest::deserialize, + [PublicInnerCallRequest::empty(); MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL] ), note_hashes: reader.read_struct_array( NoteHash::deserialize, @@ -198,7 +199,7 @@ impl Empty for PublicCircuitPublicInputs { l1_to_l2_msg_read_requests: [TreeLeafReadRequest::empty(); MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL], contract_storage_update_requests: [StorageUpdateRequest::empty(); MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL], contract_storage_reads: [StorageRead::empty(); MAX_PUBLIC_DATA_READS_PER_CALL], - public_call_requests: [PublicCallRequest::empty(); MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL], + public_call_requests: [PublicInnerCallRequest::empty(); MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL], note_hashes: [NoteHash::empty(); MAX_NOTE_HASHES_PER_CALL], nullifiers: [Nullifier::empty(); MAX_NULLIFIERS_PER_CALL], l2_to_l1_msgs: [L2ToL1Message::empty(); MAX_L2_TO_L1_MSGS_PER_CALL], diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_data_read.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_data_read.nr index f5a3ce9d067..7ba5ce28f44 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_data_read.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_data_read.nr @@ -5,7 +5,7 @@ use crate::{ traits::{Empty, Serialize, Deserialize} }; -struct PublicDataRead { +pub struct PublicDataRead { leaf_slot: Field, value: Field, counter: u32, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_data_update_request.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_data_update_request.nr index 2516e214fa3..3222c469775 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_data_update_request.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_data_update_request.nr @@ -9,7 +9,7 @@ use crate::{ }; // TODO: Rename to PublicDataWrite -struct PublicDataUpdateRequest { +pub struct PublicDataUpdateRequest { leaf_slot : Field, new_value : Field, counter: u32 diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_data_write.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_data_write.nr index c7b9b7ce047..134e00f7b30 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_data_write.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_data_write.nr @@ -6,7 +6,7 @@ use crate::{ traits::Empty }; -struct OverridablePublicDataWrite { +pub struct OverridablePublicDataWrite { write: PublicDataUpdateRequest, override_counter: u32, } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_inner_call_request.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_inner_call_request.nr new file mode 100644 index 00000000000..ab77f5aca60 --- /dev/null +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_inner_call_request.nr @@ -0,0 +1,60 @@ +use crate::{ + abis::{public_call_stack_item_compressed::PublicCallStackItemCompressed, side_effect::Ordered}, + constants::PUBLIC_INNER_CALL_REQUEST_LENGTH, traits::{Empty, Serialize, Deserialize}, + utils::reader::Reader +}; + +// TODO(#7124): To be deprecated. +pub struct PublicInnerCallRequest { + item: PublicCallStackItemCompressed, + counter: u32, +} + +impl Ordered for PublicInnerCallRequest { + fn counter(self) -> u32 { + self.counter + } +} + +impl Eq for PublicInnerCallRequest { + fn eq(self, other: PublicInnerCallRequest) -> bool { + (other.item == self.item) & (other.counter == self.counter) + } +} + +impl Empty for PublicInnerCallRequest { + fn empty() -> Self { + PublicInnerCallRequest { item: PublicCallStackItemCompressed::empty(), counter: 0 } + } +} + +impl Serialize for PublicInnerCallRequest { + fn serialize(self) -> [Field; PUBLIC_INNER_CALL_REQUEST_LENGTH] { + let mut fields: BoundedVec = BoundedVec::new(); + + fields.extend_from_array(self.item.serialize()); + fields.push(self.counter as Field); + + assert_eq(fields.len(), PUBLIC_INNER_CALL_REQUEST_LENGTH); + + fields.storage + } +} + +impl Deserialize for PublicInnerCallRequest { + fn deserialize(fields: [Field; PUBLIC_INNER_CALL_REQUEST_LENGTH]) -> PublicInnerCallRequest { + let mut reader = Reader::new(fields); + + let request = PublicInnerCallRequest { item: reader.read_struct(PublicCallStackItemCompressed::deserialize), counter: reader.read_u32() }; + reader.finish(); + request + } +} + +#[test] +fn serialization_of_empty() { + let item = PublicInnerCallRequest::empty(); + let serialized = item.serialize(); + let deserialized = PublicInnerCallRequest::deserialize(serialized); + assert(item.eq(deserialized)); +} diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_kernel_data.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_kernel_data.nr index 62053755e1a..050a092d29e 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_kernel_data.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_kernel_data.nr @@ -5,7 +5,7 @@ use crate::{ utils::arrays::find_index_hint }; -struct PublicKernelData { +pub struct PublicKernelData { public_inputs: PublicKernelCircuitPublicInputs, proof: NestedRecursiveProof, vk: VerificationKey, @@ -35,4 +35,3 @@ impl PublicKernelData { ); } } - diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_kernel_inner_data.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_kernel_inner_data.nr new file mode 100644 index 00000000000..7986b55cbc1 --- /dev/null +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_kernel_inner_data.nr @@ -0,0 +1,17 @@ +use crate::{ + abis::kernel_circuit_public_inputs::VMCircuitPublicInputs, + recursion::{proof::NestedRecursiveProof, verification_key::VerificationKey, traits::Verifiable} +}; + +pub struct PublicKernelInnerData { + public_inputs: VMCircuitPublicInputs, + proof: NestedRecursiveProof, + vk: VerificationKey, +} + +impl Verifiable for PublicKernelInnerData { + fn verify(self) { + let inputs = VMCircuitPublicInputs::serialize(self.public_inputs); + std::verify_proof(self.vk.key, self.proof.fields, inputs, self.vk.hash); + } +} diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/read_request.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/read_request.nr index b68d480c5a1..6497dba6419 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/read_request.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/read_request.nr @@ -4,7 +4,7 @@ use crate::{ utils::{arrays::array_concat, reader::Reader} }; -struct ReadRequest { +pub struct ReadRequest { value: Field, counter: u32, } @@ -45,7 +45,7 @@ impl ReadRequest { } } -struct ScopedReadRequest { +pub struct ScopedReadRequest { read_request: ReadRequest, contract_address: AztecAddress, } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/side_effect.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/side_effect.nr index ac98426ae34..df8eea9d545 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/side_effect.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/side_effect.nr @@ -1,33 +1,33 @@ use crate::{address::AztecAddress}; -trait Ordered { +pub trait Ordered { fn counter(self) -> u32; } -trait RangeOrdered { +pub trait RangeOrdered { fn counter_start(self) -> u32; fn counter_end(self) -> u32; } -trait OrderedValue where T: Eq { +pub trait OrderedValue where T: Eq { fn value(self) -> T; fn counter(self) -> u32; } -trait Scoped where T: Eq { +pub trait Scoped where T: Eq { fn contract_address(self) -> AztecAddress; fn inner(self) -> T; } -trait Readable { +pub trait Readable { fn assert_match_read_request(self, read_request: T); } -trait Overridable { +pub trait Overridable { // The counter of the next side effect that's overriding the current side effect. fn override_counter(self) -> u32; } -trait Inner { +pub trait Inner { fn inner(self) -> T; } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/tree_leaf_read_request.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/tree_leaf_read_request.nr index 4a8a386fe55..fe03444b4ca 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/tree_leaf_read_request.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/tree_leaf_read_request.nr @@ -1,6 +1,6 @@ use crate::{traits::{Empty, Serialize, Deserialize}, constants::TREE_LEAF_READ_REQUEST_LENGTH}; -struct TreeLeafReadRequest { +pub struct TreeLeafReadRequest { value: Field, leaf_index: Field, } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/key_validation_request.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/key_validation_request.nr index ec0a59ab834..ef1a6196598 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/key_validation_request.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/key_validation_request.nr @@ -1,7 +1,7 @@ use crate::{traits::{Empty, Serialize, Deserialize}, point::Point}; pub use crate::constants::KEY_VALIDATION_REQUEST_LENGTH; -struct KeyValidationRequest { +pub struct KeyValidationRequest { pk_m: Point, sk_app: Field, // not a grumpkin scalar because it's output of poseidon2 } @@ -34,4 +34,3 @@ impl Deserialize for KeyValidationRequest { Self { pk_m: Point { x: fields[0], y: fields[1], is_infinite: fields[2] as bool }, sk_app: fields[3] } } } - diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/key_validation_request_and_generator.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/key_validation_request_and_generator.nr index c35e1289696..184fa47535e 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/key_validation_request_and_generator.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/key_validation_request_and_generator.nr @@ -8,7 +8,7 @@ use crate::{ utils::{arrays::array_concat, reader::Reader} }; -struct KeyValidationRequestAndGenerator { +pub struct KeyValidationRequestAndGenerator { request: KeyValidationRequest, sk_app_generator: Field, } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/mod.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/mod.nr index 7470eeb30f9..fc63425956b 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/mod.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/mod.nr @@ -11,7 +11,7 @@ pub use key_validation_request::KeyValidationRequest; pub use key_validation_request_and_generator::KeyValidationRequestAndGenerator; pub use private_validation_requests::PrivateValidationRequests; pub use private_validation_requests_builder::PrivateValidationRequestsBuilder; -pub use public_validation_requests::PublicValidationRequests; +pub use public_validation_requests::{PublicValidationRequests, PublicValidationRequestArrayLengths}; pub use public_validation_requests_builder::PublicValidationRequestsBuilder; pub use rollup_validation_requests::RollupValidationRequests; pub use scoped_key_validation_request_and_generator::ScopedKeyValidationRequestAndGenerator; diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/private_validation_requests.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/private_validation_requests.nr index 763bc2f685e..4b8ceeef053 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/private_validation_requests.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/private_validation_requests.nr @@ -13,7 +13,7 @@ use crate::{ traits::{Serialize, Deserialize, Empty}, utils::reader::Reader }; -struct PrivateValidationRequests { +pub struct PrivateValidationRequests { for_rollup: RollupValidationRequests, note_hash_read_requests: [ScopedReadRequest; MAX_NOTE_HASH_READ_REQUESTS_PER_TX], nullifier_read_requests: [ScopedReadRequest; MAX_NULLIFIER_READ_REQUESTS_PER_TX], diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/private_validation_requests_builder.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/private_validation_requests_builder.nr index 3cee3e151e0..109eb77956c 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/private_validation_requests_builder.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/private_validation_requests_builder.nr @@ -14,7 +14,7 @@ use crate::{ traits::Empty }; -struct PrivateValidationRequestsBuilder { +pub struct PrivateValidationRequestsBuilder { max_block_number: MaxBlockNumber, note_hash_read_requests: BoundedVec, nullifier_read_requests: BoundedVec, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/public_validation_requests.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/public_validation_requests.nr index 616cc69764f..8eba0da9316 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/public_validation_requests.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/public_validation_requests.nr @@ -7,12 +7,13 @@ use crate::{ constants::{ MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_TX, MAX_NOTE_HASH_READ_REQUESTS_PER_TX, MAX_NULLIFIER_READ_REQUESTS_PER_TX, MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX, - MAX_PUBLIC_DATA_READS_PER_TX, PUBLIC_VALIDATION_REQUESTS_LENGTH + MAX_PUBLIC_DATA_READS_PER_TX, NUM_PUBLIC_VALIDATION_REQUEST_ARRAYS, + PUBLIC_VALIDATION_REQUESTS_LENGTH }, - traits::{Serialize, Deserialize, Empty}, utils::reader::Reader + traits::{Serialize, Deserialize, Empty}, utils::{arrays::array_length, reader::Reader} }; -struct PublicValidationRequests { +pub struct PublicValidationRequests { for_rollup: RollupValidationRequests, note_hash_read_requests: [TreeLeafReadRequest; MAX_NOTE_HASH_READ_REQUESTS_PER_TX], nullifier_read_requests: [ScopedReadRequest; MAX_NULLIFIER_READ_REQUESTS_PER_TX], @@ -111,6 +112,78 @@ impl Eq for PublicValidationRequests { } } +pub struct PublicValidationRequestArrayLengths { + note_hash_read_requests: u32, + nullifier_read_requests: u32, + nullifier_non_existent_read_requests: u32, + l1_to_l2_msg_read_requests: u32, + public_data_reads: u32, +} + +impl PublicValidationRequestArrayLengths { + pub fn new(requests: PublicValidationRequests) -> Self { + PublicValidationRequestArrayLengths { + note_hash_read_requests: array_length(requests.note_hash_read_requests), + nullifier_read_requests: array_length(requests.nullifier_read_requests), + nullifier_non_existent_read_requests: array_length(requests.nullifier_non_existent_read_requests), + l1_to_l2_msg_read_requests: array_length(requests.l1_to_l2_msg_read_requests), + public_data_reads: array_length(requests.public_data_reads) + } + } +} + +impl Empty for PublicValidationRequestArrayLengths { + fn empty() -> Self { + PublicValidationRequestArrayLengths { + note_hash_read_requests: 0, + nullifier_read_requests: 0, + nullifier_non_existent_read_requests: 0, + l1_to_l2_msg_read_requests: 0, + public_data_reads: 0 + } + } +} + +impl Eq for PublicValidationRequestArrayLengths { + fn eq(self, other: Self) -> bool { + (self.note_hash_read_requests == other.note_hash_read_requests) + & (self.nullifier_read_requests == other.nullifier_read_requests) + & (self.nullifier_non_existent_read_requests + == other.nullifier_non_existent_read_requests) + & (self.l1_to_l2_msg_read_requests == other.l1_to_l2_msg_read_requests) + & (self.public_data_reads == other.public_data_reads) + } +} + +impl Serialize for PublicValidationRequestArrayLengths { + fn serialize(self) -> [Field; NUM_PUBLIC_VALIDATION_REQUEST_ARRAYS] { + let mut fields: BoundedVec = BoundedVec::new(); + + fields.push(self.note_hash_read_requests as Field); + fields.push(self.nullifier_read_requests as Field); + fields.push(self.nullifier_non_existent_read_requests as Field); + fields.push(self.l1_to_l2_msg_read_requests as Field); + fields.push(self.public_data_reads as Field); + + fields.storage + } +} + +impl Deserialize for PublicValidationRequestArrayLengths { + fn deserialize(serialized: [Field; NUM_PUBLIC_VALIDATION_REQUEST_ARRAYS]) -> Self { + let mut reader = Reader::new(serialized); + let item = Self { + note_hash_read_requests: reader.read_u32(), + nullifier_read_requests: reader.read_u32(), + nullifier_non_existent_read_requests: reader.read_u32(), + l1_to_l2_msg_read_requests: reader.read_u32(), + public_data_reads: reader.read_u32() + }; + reader.finish(); + item + } +} + #[test] fn serialization_of_empty() { let item = PublicValidationRequests::empty(); @@ -118,3 +191,11 @@ fn serialization_of_empty() { let deserialized = PublicValidationRequests::deserialize(serialized); assert(item.eq(deserialized)); } + +#[test] +fn serialization_of_empty_array_lengths() { + let item = PublicValidationRequestArrayLengths::empty(); + let serialized = item.serialize(); + let deserialized = PublicValidationRequestArrayLengths::deserialize(serialized); + assert(item.eq(deserialized)); +} diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/public_validation_requests_builder.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/public_validation_requests_builder.nr index 4cf894617f3..3b541ca6aa0 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/public_validation_requests_builder.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/public_validation_requests_builder.nr @@ -15,7 +15,7 @@ use crate::{ traits::Empty, utils::arrays::array_to_bounded_vec }; -struct PublicValidationRequestsBuilder { +pub struct PublicValidationRequestsBuilder { max_block_number: MaxBlockNumber, note_hash_read_requests: BoundedVec, nullifier_read_requests: BoundedVec, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/rollup_validation_requests.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/rollup_validation_requests.nr index 9cfac17a676..59921e2103c 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/rollup_validation_requests.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/rollup_validation_requests.nr @@ -3,9 +3,9 @@ use crate::{ constants::ROLLUP_VALIDATION_REQUESTS_LENGTH, utils::reader::Reader }; -// These are validation requests that cannot be fulfilled in the current context (private or public), and must be +// These are validation requests that cannot be fulfilled in the current context (private or public), and must be // instead forwarded to the rollup for it to take care of them. -struct RollupValidationRequests { +pub struct RollupValidationRequests { max_block_number: MaxBlockNumber, } @@ -43,4 +43,3 @@ fn serialization_of_empty() { let deserialized = RollupValidationRequests::deserialize(serialized); assert(item.eq(deserialized)); } - diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/scoped_key_validation_request_and_generator.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/scoped_key_validation_request_and_generator.nr index ecceea2812f..d42bf260460 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/scoped_key_validation_request_and_generator.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/scoped_key_validation_request_and_generator.nr @@ -7,7 +7,7 @@ use crate::{ } }; -struct ScopedKeyValidationRequestAndGenerator { +pub struct ScopedKeyValidationRequestAndGenerator { request: KeyValidationRequestAndGenerator, contract_address: AztecAddress, } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr b/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr index db9787ffbce..06605d2c553 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr @@ -6,7 +6,7 @@ use crate::{ }; // Aztec address -struct AztecAddress { +pub struct AztecAddress { inner : Field } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/address/eth_address.nr b/noir-projects/noir-protocol-circuits/crates/types/src/address/eth_address.nr index cc3a7e292f7..79e90bd2c00 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/address/eth_address.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/address/eth_address.nr @@ -1,6 +1,6 @@ use crate::{constants::ETH_ADDRESS_LENGTH, traits::{Empty, ToField, Serialize, Deserialize}, utils}; -struct EthAddress{ +pub struct EthAddress{ inner : Field } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/address/partial_address.nr b/noir-projects/noir-protocol-circuits/crates/types/src/address/partial_address.nr index 0e118db7070..de1ca920cea 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/address/partial_address.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/address/partial_address.nr @@ -4,10 +4,10 @@ use crate::{ hash::poseidon2_hash_with_separator, traits::{ToField, Serialize, Deserialize} }; -global PARTIAL_ADDRESS_LENGTH = 1; +global PARTIAL_ADDRESS_LENGTH: u32 = 1; // Partial address -struct PartialAddress { +pub struct PartialAddress { inner : Field } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/address/public_keys_hash.nr b/noir-projects/noir-protocol-circuits/crates/types/src/address/public_keys_hash.nr index 29aa5aa9a5a..9e05807428a 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/address/public_keys_hash.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/address/public_keys_hash.nr @@ -1,7 +1,7 @@ use crate::traits::{ToField, Serialize, Deserialize}; // Public keys hash. Used in the computation of an address. -struct PublicKeysHash { +pub struct PublicKeysHash { inner: Field } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/address/salted_initialization_hash.nr b/noir-projects/noir-protocol-circuits/crates/types/src/address/salted_initialization_hash.nr index 07fc4dc215b..27c4cf7a65f 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/address/salted_initialization_hash.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/address/salted_initialization_hash.nr @@ -4,7 +4,7 @@ use crate::{ }; // Salted initialization hash. Used in the computation of a partial address. -struct SaltedInitializationHash { +pub struct SaltedInitializationHash { inner: Field } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr index 45d5b997272..f5cf45fbfc6 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr @@ -15,11 +15,11 @@ global ARGS_LENGTH: u32 = 16; * * In the kernel circuits, we accumulate elements such as note hashes and the nullifiers from all functions calls in a * transaction. Therefore, we always must have: - * MAX_XXX_PER_TX ≥ MAX_XXX_PER_CALL + * MAX_XXX_PER_TX >= MAX_XXX_PER_CALL * * For instance: - * MAX_NOTE_HASHES_PER_TX ≥ MAX_NOTE_HASHES_PER_CALL - * MAX_NULLIFIERS_PER_TX ≥ MAX_NULLIFIERS_PER_CALL + * MAX_NOTE_HASHES_PER_TX >= MAX_NOTE_HASHES_PER_CALL + * MAX_NULLIFIERS_PER_TX >= MAX_NULLIFIERS_PER_CALL * */ @@ -109,9 +109,8 @@ global PRIVATE_KERNEL_TAIL_INDEX: u32 = 10; global PRIVATE_KERNEL_TAIL_TO_PUBLIC_INDEX: u32 = 11; global EMPTY_NESTED_INDEX: u32 = 12; global PRIVATE_KERNEL_EMPTY_INDEX: u32 = 13; -global PUBLIC_KERNEL_SETUP_INDEX: u32 = 14; -global PUBLIC_KERNEL_APP_LOGIC_INDEX: u32 = 15; -global PUBLIC_KERNEL_TEARDOWN_INDEX: u32 = 16; +global PUBLIC_KERNEL_INNER_INDEX: u32 = 15; // TODO(#7124): To be deprecated. +global PUBLIC_KERNEL_MERGE_INDEX: u32 = 16; global PUBLIC_KERNEL_TAIL_INDEX: u32 = 17; global BASE_PARITY_INDEX: u32 = 18; global ROOT_PARITY_INDEX: u32 = 19; @@ -120,12 +119,10 @@ global MERGE_ROLLUP_INDEX: u32 = 21; global BLOCK_ROOT_ROLLUP_INDEX: u32 = 22; global BLOCK_MERGE_ROLLUP_INDEX: u32 = 23; global ROOT_ROLLUP_INDEX: u32 = 24; +global BLOCK_ROOT_ROLLUP_FINAL_INDEX: u32 = 25; // MISC CONSTANTS global FUNCTION_SELECTOR_NUM_BYTES: Field = 4; -global ARGS_HASH_CHUNK_LENGTH: u32 = 16; -global ARGS_HASH_CHUNK_COUNT: u32 = 16; -global MAX_ARGS_LENGTH: u32 = ARGS_HASH_CHUNK_COUNT * ARGS_HASH_CHUNK_LENGTH; // The following is used in immutable state variables to compute an initialization slot whose value is used to // determine whether a given variable has been initialized (by asserting that the value in the slot is 0). // The initialization slot is computed by adding the constant below to the variable's storage slot. This constant has @@ -141,7 +138,7 @@ global AZTEC_TARGET_COMMITTEE_SIZE: u32 = 48; // The following is taken from building a block and looking at the `lastArchive` value in it. // You can run the `integration_l1_publisher.test.ts` and look at the first blocks in the fixtures. global GENESIS_ARCHIVE_ROOT: Field = 0x1200a06aae1368abe36530b585bd7a4d2ba4de5037b82076412691a187d7621e; -// The following and the value in `deploy_l1_contracts´ must match. We should not have the code both places, but +// The following and the value in `deploy_l1_contracts` must match. We should not have the code both places, but // we are running into circular dependency issues. #3342 global FEE_JUICE_INITIAL_MINT: Field = 20000000000; @@ -181,25 +178,46 @@ global FIXED_DA_GAS: u32 = 512; // pays for fixed tx costs like validation, and updating state roots global FIXED_L2_GAS: u32 = 512; // base cost for a single public call -global FIXED_AVM_STARTUP_L2_GAS : u32= 1024; -// pays for hashing/validating logs +global FIXED_AVM_STARTUP_L2_GAS: u32 = 1024; + +// Some tree insertions incur an additional cost associated with +// the new database entry to be stored by all network participants. +global L2_GAS_DISTRIBUTED_STORAGE_PREMIUM: u32 = 1024; + +// Kernel and/or rollup circuits perform a hash per tree-level for insertions and reads. +// All network participants need to perform tree insertions. +// Not _all_ network participants need to perform membership checks, so they're cheaper. +global L2_GAS_PER_READ_MERKLE_HASH: u32 = 30; +global L2_GAS_PER_WRITE_MERKLE_HASH: u32 = 40; + +// Gas for tree insertions and associated storage +global L2_GAS_PER_PUBLIC_DATA_UPDATE: u32 = L2_GAS_DISTRIBUTED_STORAGE_PREMIUM + (PUBLIC_DATA_TREE_HEIGHT * L2_GAS_PER_WRITE_MERKLE_HASH); +global L2_GAS_PER_NOTE_HASH: u32 = L2_GAS_DISTRIBUTED_STORAGE_PREMIUM + (NOTE_HASH_TREE_HEIGHT * L2_GAS_PER_WRITE_MERKLE_HASH); +// 2x because insertion into indexed tree requires a low-leaf membership check and a standard insertion +global L2_GAS_PER_NULLIFIER: u32 = L2_GAS_DISTRIBUTED_STORAGE_PREMIUM + (2 * NULLIFIER_TREE_HEIGHT * L2_GAS_PER_WRITE_MERKLE_HASH); + +// Gas for tree read requests +global L2_GAS_PER_PUBLIC_DATA_READ: u32 = PUBLIC_DATA_TREE_HEIGHT * L2_GAS_PER_READ_MERKLE_HASH; +global L2_GAS_PER_NOTE_HASH_READ_REQUEST: u32 = NOTE_HASH_TREE_HEIGHT * L2_GAS_PER_READ_MERKLE_HASH; +// 2x because non-membership checks are really 2 membership checks +global L2_GAS_PER_NULLIFIER_READ_REQUEST: u32 = 2 * NULLIFIER_TREE_HEIGHT * L2_GAS_PER_READ_MERKLE_HASH; +global L2_GAS_PER_L1_TO_L2_MSG_READ_REQUEST: u32 = L1_TO_L2_MSG_TREE_HEIGHT * L2_GAS_PER_READ_MERKLE_HASH; + +// Gas for hashing and validating logs global L2_GAS_PER_LOG_BYTE: u32 = 4; -// pays for tree insertions. -global L2_GAS_PER_NOTE_HASH: u32 = 32; -// nullifiers are more expensive to insert/validate: -// they are inserted into an indexed tree and must be checked for duplicates -global L2_GAS_PER_NULLIFIER: u32 = 64; + +// Gas for writing message to L1 portal +global L2_GAS_PER_L2_TO_L1_MSG: u32 = 200; // CANONICAL CONTRACT ADDRESSES -global CANONICAL_KEY_REGISTRY_ADDRESS = AztecAddress::from_field(0x156eabf84e3ea50d40e3330224f2d2e81648fff8f1f7ec1bc6d2873cca6e959d); -global CANONICAL_AUTH_REGISTRY_ADDRESS = AztecAddress::from_field(0x24877c50868f86712240eb535d90d1c97403d074805dd3758c3aecb02958f8d4); -global DEPLOYER_CONTRACT_ADDRESS = AztecAddress::from_field(0x2ab1a2bd6d07d8d61ea56d85861446349e52c6b7c0612b702cb1e6db6ad0b089); -global REGISTERER_CONTRACT_ADDRESS = AztecAddress::from_field(0x05d15342d76e46e5be07d3cda0d753158431cdc5e39d29ce4e8fe1f5c070564a); -global FEE_JUICE_ADDRESS = AztecAddress::from_field(0x16a83e3395bc921a2441db55dce24f0e0932636901a2e676fa68b9b2b9a644c1); -global ROUTER_ADDRESS = AztecAddress::from_field(0x1011feaa54609098a884322267ec754c637b280c15aa79c3be9f1394e2b29cd3); +global CANONICAL_AUTH_REGISTRY_ADDRESS = AztecAddress::from_field(0x2ace300b02ca5ab0a25052b1e852913a47292096997ca09f758c0e3624e84560); +global DEPLOYER_CONTRACT_ADDRESS = AztecAddress::from_field(0x25d93dc07b5baaf53a98caeae2679df3528cb83e11e2640a57a0a53abbaaadb9); +global REGISTERER_CONTRACT_ADDRESS = AztecAddress::from_field(0x1b6d5873cef5a35f681ab9468527f356c96e09b3c64603aef404ec2ad80aa3a9); +global FEE_JUICE_ADDRESS = AztecAddress::from_field(0x1abe6c7f5c4caf04cbf7556495e08ad9c0a225a5f9d33554ae07285b13c494d7); +global ROUTER_ADDRESS = AztecAddress::from_field(0x1d8f25db3e8faa6a96cb1ecf57876a2ee04581deb3c4f181488ccd817abcbdb0); // LENGTH OF STRUCTS SERIALIZED TO FIELDS -global AZTEC_ADDRESS_LENGTH = 1; +global AZTEC_ADDRESS_LENGTH: u32 = 1; global GAS_FEES_LENGTH: u32 = 2; global GAS_LENGTH: u32 = 2; global GAS_SETTINGS_LENGTH: u32 = GAS_LENGTH * 2 + GAS_FEES_LENGTH + /* inclusion_fee */ 1; @@ -208,69 +226,73 @@ global CONTENT_COMMITMENT_LENGTH: u32 = 4; global CONTRACT_INSTANCE_LENGTH: u32 = 5; global CONTRACT_STORAGE_READ_LENGTH: u32 = 3; global CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH: u32 = 3; -global ETH_ADDRESS_LENGTH = 1; +global ETH_ADDRESS_LENGTH: u32 = 1; global FUNCTION_DATA_LENGTH: u32 = 2; global FUNCTION_LEAF_PREIMAGE_LENGTH: u32 = 5; global GLOBAL_VARIABLES_LENGTH: u32 = 7 + GAS_FEES_LENGTH; -global APPEND_ONLY_TREE_SNAPSHOT_LENGTH = 2; +global APPEND_ONLY_TREE_SNAPSHOT_LENGTH: u32 = 2; global L1_TO_L2_MESSAGE_LENGTH: u32 = 6; global L2_TO_L1_MESSAGE_LENGTH: u32 = 3; -global SCOPED_L2_TO_L1_MESSAGE_LENGTH = L2_TO_L1_MESSAGE_LENGTH + 1; +global SCOPED_L2_TO_L1_MESSAGE_LENGTH: u32 = L2_TO_L1_MESSAGE_LENGTH + 1; global MAX_BLOCK_NUMBER_LENGTH: u32 = 2; // 1 for the option flag, 1 for the value -global KEY_VALIDATION_REQUEST_LENGTH = 4; -global KEY_VALIDATION_REQUEST_AND_GENERATOR_LENGTH = KEY_VALIDATION_REQUEST_LENGTH + 1; -global SCOPED_KEY_VALIDATION_REQUEST_AND_GENERATOR_LENGTH = KEY_VALIDATION_REQUEST_AND_GENERATOR_LENGTH + 1; +global KEY_VALIDATION_REQUEST_LENGTH: u32 = 4; +global KEY_VALIDATION_REQUEST_AND_GENERATOR_LENGTH: u32 = KEY_VALIDATION_REQUEST_LENGTH + 1; +global SCOPED_KEY_VALIDATION_REQUEST_AND_GENERATOR_LENGTH: u32 = KEY_VALIDATION_REQUEST_AND_GENERATOR_LENGTH + 1; global PARTIAL_STATE_REFERENCE_LENGTH: u32 = 6; -global READ_REQUEST_LENGTH = 2; -global TREE_LEAF_READ_REQUEST_LENGTH = 2; -global LOG_HASH_LENGTH = 3; -global SCOPED_LOG_HASH_LENGTH = LOG_HASH_LENGTH + 1; -global ENCRYPTED_LOG_HASH_LENGTH = 4; -global SCOPED_ENCRYPTED_LOG_HASH_LENGTH = ENCRYPTED_LOG_HASH_LENGTH + 1; -global NOTE_LOG_HASH_LENGTH = 4; -global NOTE_HASH_LENGTH = 2; -global SCOPED_NOTE_HASH_LENGTH = NOTE_HASH_LENGTH + 1; -global NULLIFIER_LENGTH = 3; -global SCOPED_NULLIFIER_LENGTH = NULLIFIER_LENGTH + 1; -global PUBLIC_CALL_STACK_ITEM_COMPRESSED_LENGTH = AZTEC_ADDRESS_LENGTH + CALL_CONTEXT_LENGTH + 3 + 2 * GAS_LENGTH; -global PRIVATE_CALL_REQUEST_LENGTH = AZTEC_ADDRESS_LENGTH + CALL_CONTEXT_LENGTH + 4; -global PUBLIC_CALL_REQUEST_LENGTH = PUBLIC_CALL_STACK_ITEM_COMPRESSED_LENGTH + 1 /* counter */; -global ROLLUP_VALIDATION_REQUESTS_LENGTH = MAX_BLOCK_NUMBER_LENGTH; +global READ_REQUEST_LENGTH: u32 = 2; +global TREE_LEAF_READ_REQUEST_LENGTH: u32 = 2; +global LOG_HASH_LENGTH: u32 = 3; +global SCOPED_LOG_HASH_LENGTH: u32 = LOG_HASH_LENGTH + 1; +global ENCRYPTED_LOG_HASH_LENGTH: u32 = 4; +global SCOPED_ENCRYPTED_LOG_HASH_LENGTH: u32 = ENCRYPTED_LOG_HASH_LENGTH + 1; +global NOTE_LOG_HASH_LENGTH: u32 = 4; +global NOTE_HASH_LENGTH: u32 = 2; +global SCOPED_NOTE_HASH_LENGTH: u32 = NOTE_HASH_LENGTH + 1; +global NULLIFIER_LENGTH: u32 = 3; +global SCOPED_NULLIFIER_LENGTH: u32 = NULLIFIER_LENGTH + 1; +global PUBLIC_CALL_STACK_ITEM_COMPRESSED_LENGTH: u32 = AZTEC_ADDRESS_LENGTH + CALL_CONTEXT_LENGTH + 3 + 2 * GAS_LENGTH; +global PRIVATE_CALL_REQUEST_LENGTH: u32 = AZTEC_ADDRESS_LENGTH + CALL_CONTEXT_LENGTH + 4; +global PUBLIC_CALL_REQUEST_LENGTH: u32 = AZTEC_ADDRESS_LENGTH + CALL_CONTEXT_LENGTH + 1 /* args_hash */ + 1 /* counter */; +global PUBLIC_INNER_CALL_REQUEST_LENGTH: u32 = PUBLIC_CALL_STACK_ITEM_COMPRESSED_LENGTH + 1 /* counter */; +global ROLLUP_VALIDATION_REQUESTS_LENGTH: u32 = MAX_BLOCK_NUMBER_LENGTH; global STATE_REFERENCE_LENGTH: u32 = APPEND_ONLY_TREE_SNAPSHOT_LENGTH + PARTIAL_STATE_REFERENCE_LENGTH; global TX_CONTEXT_LENGTH: u32 = 2 + GAS_SETTINGS_LENGTH; global TX_REQUEST_LENGTH: u32 = 2 + TX_CONTEXT_LENGTH + FUNCTION_DATA_LENGTH; -global TOTAL_FEES_LENGTH = 1; +global TOTAL_FEES_LENGTH: u32 = 1; global HEADER_LENGTH: u32 = APPEND_ONLY_TREE_SNAPSHOT_LENGTH + CONTENT_COMMITMENT_LENGTH + STATE_REFERENCE_LENGTH + GLOBAL_VARIABLES_LENGTH + TOTAL_FEES_LENGTH; global PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH: u32 = CALL_CONTEXT_LENGTH + 4 + MAX_BLOCK_NUMBER_LENGTH + (READ_REQUEST_LENGTH * MAX_NOTE_HASH_READ_REQUESTS_PER_CALL) + (READ_REQUEST_LENGTH * MAX_NULLIFIER_READ_REQUESTS_PER_CALL) + (KEY_VALIDATION_REQUEST_AND_GENERATOR_LENGTH * MAX_KEY_VALIDATION_REQUESTS_PER_CALL) + (NOTE_HASH_LENGTH * MAX_NOTE_HASHES_PER_CALL) + (NULLIFIER_LENGTH * MAX_NULLIFIERS_PER_CALL) + (PRIVATE_CALL_REQUEST_LENGTH * MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL) + (PUBLIC_CALL_REQUEST_LENGTH * MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL) + PUBLIC_CALL_REQUEST_LENGTH + (L2_TO_L1_MESSAGE_LENGTH * MAX_L2_TO_L1_MSGS_PER_CALL) + 2 + (NOTE_LOG_HASH_LENGTH * MAX_NOTE_ENCRYPTED_LOGS_PER_CALL) + (ENCRYPTED_LOG_HASH_LENGTH * MAX_ENCRYPTED_LOGS_PER_CALL) + (LOG_HASH_LENGTH * MAX_UNENCRYPTED_LOGS_PER_CALL) + HEADER_LENGTH + TX_CONTEXT_LENGTH; -global PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH: u32 = CALL_CONTEXT_LENGTH + /*argsHash + returnsHash*/ 2 + (TREE_LEAF_READ_REQUEST_LENGTH * MAX_NOTE_HASH_READ_REQUESTS_PER_CALL) + (READ_REQUEST_LENGTH * MAX_NULLIFIER_READ_REQUESTS_PER_CALL) + (READ_REQUEST_LENGTH * MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL) + (TREE_LEAF_READ_REQUEST_LENGTH * MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL) + (CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH * MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL) + (CONTRACT_STORAGE_READ_LENGTH * MAX_PUBLIC_DATA_READS_PER_CALL) + (PUBLIC_CALL_REQUEST_LENGTH * MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL) + (NOTE_HASH_LENGTH * MAX_NOTE_HASHES_PER_CALL) + (NULLIFIER_LENGTH * MAX_NULLIFIERS_PER_CALL) + (L2_TO_L1_MESSAGE_LENGTH * MAX_L2_TO_L1_MSGS_PER_CALL) + 2 + (LOG_HASH_LENGTH * MAX_UNENCRYPTED_LOGS_PER_CALL) + HEADER_LENGTH + GLOBAL_VARIABLES_LENGTH + AZTEC_ADDRESS_LENGTH + /* revert_code */ 1 + 2 * GAS_LENGTH + /* transaction_fee */ 1; +global PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH: u32 = CALL_CONTEXT_LENGTH + /*argsHash + returnsHash*/ 2 + (TREE_LEAF_READ_REQUEST_LENGTH * MAX_NOTE_HASH_READ_REQUESTS_PER_CALL) + (READ_REQUEST_LENGTH * MAX_NULLIFIER_READ_REQUESTS_PER_CALL) + (READ_REQUEST_LENGTH * MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL) + (TREE_LEAF_READ_REQUEST_LENGTH * MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL) + (CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH * MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL) + (CONTRACT_STORAGE_READ_LENGTH * MAX_PUBLIC_DATA_READS_PER_CALL) + (PUBLIC_INNER_CALL_REQUEST_LENGTH * MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL) + (NOTE_HASH_LENGTH * MAX_NOTE_HASHES_PER_CALL) + (NULLIFIER_LENGTH * MAX_NULLIFIERS_PER_CALL) + (L2_TO_L1_MESSAGE_LENGTH * MAX_L2_TO_L1_MSGS_PER_CALL) + 2 + (LOG_HASH_LENGTH * MAX_UNENCRYPTED_LOGS_PER_CALL) + HEADER_LENGTH + GLOBAL_VARIABLES_LENGTH + AZTEC_ADDRESS_LENGTH + /* revert_code */ 1 + 2 * GAS_LENGTH + /* transaction_fee */ 1; global PRIVATE_CALL_STACK_ITEM_LENGTH: u32 = AZTEC_ADDRESS_LENGTH + FUNCTION_DATA_LENGTH + PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH; global PUBLIC_CONTEXT_INPUTS_LENGTH: u32 = CALL_CONTEXT_LENGTH + HEADER_LENGTH + GLOBAL_VARIABLES_LENGTH + GAS_LENGTH + 2; global AGGREGATION_OBJECT_LENGTH: u32 = 16; -global SCOPED_READ_REQUEST_LEN = READ_REQUEST_LENGTH + 1; -global PUBLIC_DATA_READ_LENGTH = 3; -global PRIVATE_VALIDATION_REQUESTS_LENGTH = ROLLUP_VALIDATION_REQUESTS_LENGTH + (SCOPED_READ_REQUEST_LEN * MAX_NOTE_HASH_READ_REQUESTS_PER_TX) + (SCOPED_READ_REQUEST_LEN * MAX_NULLIFIER_READ_REQUESTS_PER_TX) + (SCOPED_KEY_VALIDATION_REQUEST_AND_GENERATOR_LENGTH * MAX_KEY_VALIDATION_REQUESTS_PER_TX) + 2; -global PUBLIC_VALIDATION_REQUESTS_LENGTH = ROLLUP_VALIDATION_REQUESTS_LENGTH + (TREE_LEAF_READ_REQUEST_LENGTH * MAX_NOTE_HASH_READ_REQUESTS_PER_TX) + (SCOPED_READ_REQUEST_LEN * MAX_NULLIFIER_READ_REQUESTS_PER_TX) + (SCOPED_READ_REQUEST_LEN * MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX) + (PUBLIC_DATA_READ_LENGTH * MAX_PUBLIC_DATA_READS_PER_TX) + (TREE_LEAF_READ_REQUEST_LENGTH * MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_TX); +global SCOPED_READ_REQUEST_LEN: u32 = READ_REQUEST_LENGTH + 1; +global PUBLIC_DATA_READ_LENGTH: u32 = 3; +global PRIVATE_VALIDATION_REQUESTS_LENGTH: u32 = ROLLUP_VALIDATION_REQUESTS_LENGTH + (SCOPED_READ_REQUEST_LEN * MAX_NOTE_HASH_READ_REQUESTS_PER_TX) + (SCOPED_READ_REQUEST_LEN * MAX_NULLIFIER_READ_REQUESTS_PER_TX) + (SCOPED_KEY_VALIDATION_REQUEST_AND_GENERATOR_LENGTH * MAX_KEY_VALIDATION_REQUESTS_PER_TX) + 2; +global NUM_PUBLIC_VALIDATION_REQUEST_ARRAYS: u32 = 5; +global PUBLIC_VALIDATION_REQUESTS_LENGTH: u32 = ROLLUP_VALIDATION_REQUESTS_LENGTH + (TREE_LEAF_READ_REQUEST_LENGTH * MAX_NOTE_HASH_READ_REQUESTS_PER_TX) + (SCOPED_READ_REQUEST_LEN * MAX_NULLIFIER_READ_REQUESTS_PER_TX) + (SCOPED_READ_REQUEST_LEN * MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX) + (PUBLIC_DATA_READ_LENGTH * MAX_PUBLIC_DATA_READS_PER_TX) + (TREE_LEAF_READ_REQUEST_LENGTH * MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_TX); -global PUBLIC_DATA_UPDATE_REQUEST_LENGTH = 3; -global COMBINED_ACCUMULATED_DATA_LENGTH = MAX_NOTE_HASHES_PER_TX + MAX_NULLIFIERS_PER_TX + (MAX_L2_TO_L1_MSGS_PER_TX * SCOPED_L2_TO_L1_MESSAGE_LENGTH) + (LOG_HASH_LENGTH * MAX_NOTE_ENCRYPTED_LOGS_PER_TX) + (SCOPED_LOG_HASH_LENGTH * MAX_ENCRYPTED_LOGS_PER_TX) + 3 + (MAX_UNENCRYPTED_LOGS_PER_TX * SCOPED_LOG_HASH_LENGTH) + (MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX * PUBLIC_DATA_UPDATE_REQUEST_LENGTH) + GAS_LENGTH; -global COMBINED_CONSTANT_DATA_LENGTH = HEADER_LENGTH + TX_CONTEXT_LENGTH + GLOBAL_VARIABLES_LENGTH + 1; +global PUBLIC_DATA_UPDATE_REQUEST_LENGTH: u32 = 3; +global COMBINED_ACCUMULATED_DATA_LENGTH: u32 = MAX_NOTE_HASHES_PER_TX + MAX_NULLIFIERS_PER_TX + (MAX_L2_TO_L1_MSGS_PER_TX * SCOPED_L2_TO_L1_MESSAGE_LENGTH) + (LOG_HASH_LENGTH * MAX_NOTE_ENCRYPTED_LOGS_PER_TX) + (SCOPED_LOG_HASH_LENGTH * MAX_ENCRYPTED_LOGS_PER_TX) + 3 + (MAX_UNENCRYPTED_LOGS_PER_TX * SCOPED_LOG_HASH_LENGTH) + (MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX * PUBLIC_DATA_UPDATE_REQUEST_LENGTH) + GAS_LENGTH; +global COMBINED_CONSTANT_DATA_LENGTH: u32 = HEADER_LENGTH + TX_CONTEXT_LENGTH + GLOBAL_VARIABLES_LENGTH + 1; -global PRIVATE_ACCUMULATED_DATA_LENGTH = (SCOPED_NOTE_HASH_LENGTH * MAX_NOTE_HASHES_PER_TX) + (SCOPED_NULLIFIER_LENGTH * MAX_NULLIFIERS_PER_TX) + (MAX_L2_TO_L1_MSGS_PER_TX * SCOPED_L2_TO_L1_MESSAGE_LENGTH) + (NOTE_LOG_HASH_LENGTH * MAX_NOTE_ENCRYPTED_LOGS_PER_TX) + (SCOPED_ENCRYPTED_LOG_HASH_LENGTH * MAX_ENCRYPTED_LOGS_PER_TX) + (SCOPED_LOG_HASH_LENGTH * MAX_UNENCRYPTED_LOGS_PER_TX) + (PRIVATE_CALL_REQUEST_LENGTH * MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX) + (PUBLIC_CALL_REQUEST_LENGTH * MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX); -global PRIVATE_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 1 + PRIVATE_VALIDATION_REQUESTS_LENGTH + PRIVATE_ACCUMULATED_DATA_LENGTH + COMBINED_CONSTANT_DATA_LENGTH + PUBLIC_CALL_REQUEST_LENGTH + AZTEC_ADDRESS_LENGTH; +global PRIVATE_ACCUMULATED_DATA_LENGTH: u32 = (SCOPED_NOTE_HASH_LENGTH * MAX_NOTE_HASHES_PER_TX) + (SCOPED_NULLIFIER_LENGTH * MAX_NULLIFIERS_PER_TX) + (MAX_L2_TO_L1_MSGS_PER_TX * SCOPED_L2_TO_L1_MESSAGE_LENGTH) + (NOTE_LOG_HASH_LENGTH * MAX_NOTE_ENCRYPTED_LOGS_PER_TX) + (SCOPED_ENCRYPTED_LOG_HASH_LENGTH * MAX_ENCRYPTED_LOGS_PER_TX) + (SCOPED_LOG_HASH_LENGTH * MAX_UNENCRYPTED_LOGS_PER_TX) + (PRIVATE_CALL_REQUEST_LENGTH * MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX) + (PUBLIC_CALL_REQUEST_LENGTH * MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX); +global PRIVATE_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH: u32 = 1 + PRIVATE_VALIDATION_REQUESTS_LENGTH + PRIVATE_ACCUMULATED_DATA_LENGTH + COMBINED_CONSTANT_DATA_LENGTH + PUBLIC_CALL_REQUEST_LENGTH + AZTEC_ADDRESS_LENGTH; -global PUBLIC_ACCUMULATED_DATA_LENGTH = (MAX_NOTE_HASHES_PER_TX * SCOPED_NOTE_HASH_LENGTH) + (MAX_NULLIFIERS_PER_TX * NULLIFIER_LENGTH) + (MAX_L2_TO_L1_MSGS_PER_TX * SCOPED_L2_TO_L1_MESSAGE_LENGTH) + (MAX_NOTE_ENCRYPTED_LOGS_PER_TX * LOG_HASH_LENGTH) + (MAX_ENCRYPTED_LOGS_PER_TX * SCOPED_LOG_HASH_LENGTH) + (MAX_UNENCRYPTED_LOGS_PER_TX * SCOPED_LOG_HASH_LENGTH) + (MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX * PUBLIC_DATA_UPDATE_REQUEST_LENGTH) + (MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX * PUBLIC_CALL_REQUEST_LENGTH) + GAS_LENGTH; -global PUBLIC_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = PUBLIC_VALIDATION_REQUESTS_LENGTH + PUBLIC_ACCUMULATED_DATA_LENGTH + PUBLIC_ACCUMULATED_DATA_LENGTH + COMBINED_CONSTANT_DATA_LENGTH + 1 + (MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX * PUBLIC_CALL_REQUEST_LENGTH) + AZTEC_ADDRESS_LENGTH; +global PUBLIC_ACCUMULATED_DATA_LENGTH: u32 = (MAX_NOTE_HASHES_PER_TX * SCOPED_NOTE_HASH_LENGTH) + (MAX_NULLIFIERS_PER_TX * NULLIFIER_LENGTH) + (MAX_L2_TO_L1_MSGS_PER_TX * SCOPED_L2_TO_L1_MESSAGE_LENGTH) + (MAX_NOTE_ENCRYPTED_LOGS_PER_TX * LOG_HASH_LENGTH) + (MAX_ENCRYPTED_LOGS_PER_TX * SCOPED_LOG_HASH_LENGTH) + (MAX_UNENCRYPTED_LOGS_PER_TX * SCOPED_LOG_HASH_LENGTH) + (MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX * PUBLIC_DATA_UPDATE_REQUEST_LENGTH) + (MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX * PUBLIC_CALL_REQUEST_LENGTH) + GAS_LENGTH; +global NUM_PUBLIC_ACCUMULATED_DATA_ARRAYS: u32 = 8; +global PUBLIC_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH: u32 = COMBINED_CONSTANT_DATA_LENGTH + PUBLIC_VALIDATION_REQUESTS_LENGTH + PUBLIC_ACCUMULATED_DATA_LENGTH + PUBLIC_ACCUMULATED_DATA_LENGTH + 1 /* end_side_effect_counter */ + PUBLIC_CALL_REQUEST_LENGTH + AZTEC_ADDRESS_LENGTH + 1 /* revert_code */; +global VM_CIRCUIT_PUBLIC_INPUTS_LENGTH: u32 = COMBINED_CONSTANT_DATA_LENGTH + PUBLIC_CALL_REQUEST_LENGTH + PUBLIC_VALIDATION_REQUESTS_LENGTH + NUM_PUBLIC_VALIDATION_REQUEST_ARRAYS + PUBLIC_ACCUMULATED_DATA_LENGTH + NUM_PUBLIC_ACCUMULATED_DATA_ARRAYS + 1 /* start_side_effect_counter */ + 1 /* end_side_effect_counter */ + GAS_LENGTH + 1 + 1 + (PUBLIC_INNER_CALL_REQUEST_LENGTH * MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX); -global KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = ROLLUP_VALIDATION_REQUESTS_LENGTH + COMBINED_ACCUMULATED_DATA_LENGTH + COMBINED_CONSTANT_DATA_LENGTH + PARTIAL_STATE_REFERENCE_LENGTH + 1 + AZTEC_ADDRESS_LENGTH; +global KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH: u32 = ROLLUP_VALIDATION_REQUESTS_LENGTH + COMBINED_ACCUMULATED_DATA_LENGTH + COMBINED_CONSTANT_DATA_LENGTH + PARTIAL_STATE_REFERENCE_LENGTH + 1 + AZTEC_ADDRESS_LENGTH; -global CONSTANT_ROLLUP_DATA_LENGTH = APPEND_ONLY_TREE_SNAPSHOT_LENGTH + 1 + GLOBAL_VARIABLES_LENGTH; +global CONSTANT_ROLLUP_DATA_LENGTH: u32 = APPEND_ONLY_TREE_SNAPSHOT_LENGTH + 1 + GLOBAL_VARIABLES_LENGTH; // + 5 for rollup_type, height_in_block_tree, txs_effects_hash, out_hash, accumulated_fees -global BASE_OR_MERGE_PUBLIC_INPUTS_LENGTH = CONSTANT_ROLLUP_DATA_LENGTH + PARTIAL_STATE_REFERENCE_LENGTH + PARTIAL_STATE_REFERENCE_LENGTH + 5; +global BASE_OR_MERGE_PUBLIC_INPUTS_LENGTH: u32 = CONSTANT_ROLLUP_DATA_LENGTH + PARTIAL_STATE_REFERENCE_LENGTH + PARTIAL_STATE_REFERENCE_LENGTH + 5; // + 64 for 32 * FeeRecipient { recipient, value }, + 4 for previous_block_hash, end_block_hash, out_hash, vk_tree_root + 1 temporarily for prover_id -global BLOCK_ROOT_OR_BLOCK_MERGE_PUBLIC_INPUTS_LENGTH = 2 * APPEND_ONLY_TREE_SNAPSHOT_LENGTH + 2 * GLOBAL_VARIABLES_LENGTH + 69; +global BLOCK_ROOT_OR_BLOCK_MERGE_PUBLIC_INPUTS_LENGTH: u32 = 2 * APPEND_ONLY_TREE_SNAPSHOT_LENGTH + 2 * GLOBAL_VARIABLES_LENGTH + 69; global GET_NOTES_ORACLE_RETURN_LENGTH: u32 = 674; global NOTE_HASHES_NUM_BYTES_PER_BASE_ROLLUP: u32 = 32 * MAX_NOTE_HASHES_PER_TX; @@ -287,18 +309,23 @@ global NUM_MSGS_PER_BASE_PARITY: u32 = 4; global NUM_BASE_PARITY_PER_ROOT_PARITY: u32 = 4; // Lengths of the different types of proofs in fields -global RECURSIVE_PROOF_LENGTH = 439; -global NESTED_RECURSIVE_PROOF_LENGTH = 439; -global TUBE_PROOF_LENGTH = RECURSIVE_PROOF_LENGTH; // in the future these can differ +global RECURSIVE_PROOF_LENGTH: u32 = 439; +global NESTED_RECURSIVE_PROOF_LENGTH: u32 = 439; +global TUBE_PROOF_LENGTH: u32 = RECURSIVE_PROOF_LENGTH; // in the future these can differ -global VERIFICATION_KEY_LENGTH_IN_FIELDS = 128; +global VERIFICATION_KEY_LENGTH_IN_FIELDS: u32 = 128; // VK is composed of // - circuit size encoded as a fr field element (32 bytes) // - num of inputs encoded as a fr field element (32 bytes) // - 16 affine elements (curve base field fq) encoded as fr elements takes (16 * 4 * 32 bytes) // 16 above refers to the constant AvmFlavor::NUM_PRECOMPUTED_ENTITIES -global AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS = 2 + 16 * 4; +global AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS: u32 = 2 + 16 * 4; +// `AVM_PROOF_LENGTH_IN_FIELDS` must be updated when AVM circuit changes. +// To determine latest value, hover `COMPUTED_AVM_PROOF_LENGTH_IN_FIELDS` +// in barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.hpp +global AVM_PROOF_LENGTH_IN_FIELDS: u32 = 3822; +global AVM_PUBLIC_COLUMN_MAX_SIZE_LOG2 = 8; /** * Enumerate the hash_indices which are used for pedersen hashing. * We start from 1 to avoid the default generators. The generator indices are listed @@ -307,12 +334,12 @@ global AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS = 2 + 16 * 4; * +-----------+-------------------------------+----------------------+ * | Hash size | Number of elements hashed (n) | Condition to use | * |-----------+-------------------------------+----------------------| - * | LOW | n ≤ 8 | 0 < hash_index ≤ 32 | - * | MID | 8 < n ≤ 16 | 32 < hash_index ≤ 40 | - * | HIGH | 16 < n ≤ 48 | 40 < hash_index ≤ 48 | + * | LOW | n <= 8 | 0 < hash_index <= 32 | + * | MID | 8 < n <= 16 | 32 < hash_index <= 40 | + * | HIGH | 16 < n <= 48 | 40 < hash_index <= 48 | * +-----------+-------------------------------+----------------------+ */ -// Indices with size ≤ 8 +// Indices with size <= 8 global GENERATOR_INDEX__NOTE_HASH: u32 = 1; global GENERATOR_INDEX__NOTE_HASH_NONCE: u32 = 2; global GENERATOR_INDEX__UNIQUE_NOTE_HASH: u32 = 3; @@ -345,10 +372,10 @@ global GENERATOR_INDEX__SIDE_EFFECT: u32 = 29; global GENERATOR_INDEX__FEE_PAYLOAD: u32 = 30; global GENERATOR_INDEX__COMBINED_PAYLOAD: u32 = 31; global GENERATOR_INDEX__TX_NULLIFIER: u32 = 32; -// Indices with size ≤ 16 +// Indices with size <= 16 global GENERATOR_INDEX__TX_REQUEST: u32 = 33; global GENERATOR_INDEX__SIGNATURE_PAYLOAD: u32 = 34; -// Indices with size ≤ 44 +// Indices with size <= 44 global GENERATOR_INDEX__VK: u32 = 41; global GENERATOR_INDEX__PRIVATE_CIRCUIT_PUBLIC_INPUTS: u32 = 42; global GENERATOR_INDEX__PUBLIC_CIRCUIT_PUBLIC_INPUTS: u32 = 43; @@ -367,12 +394,22 @@ global GENERATOR_INDEX__NOTE_NULLIFIER: u32 = 53; global GENERATOR_INDEX__NOTE_HIDING_POINT: u32 = 54; global GENERATOR_INDEX__SYMMETRIC_KEY: u8 = 55; +// AVM memory tags +global MEM_TAG_U1 = 1; +global MEM_TAG_U8 = 2; +global MEM_TAG_U16 = 3; +global MEM_TAG_U32 = 4; +global MEM_TAG_U64 = 5; +global MEM_TAG_U128 = 6; +global MEM_TAG_FF = 7; + global SENDER_SELECTOR: u32 = 0; // "address" actually does not exist in PublicCircuitPublicInputs, // so this is just an alias to "storage address" for now global ADDRESS_SELECTOR: u32 = SENDER_SELECTOR + 1; global STORAGE_ADDRESS_SELECTOR: u32 = ADDRESS_SELECTOR; global FUNCTION_SELECTOR_SELECTOR: u32 = ADDRESS_SELECTOR + 1; +global IS_STATIC_CALL_SELECTOR: u32 = FUNCTION_SELECTOR_SELECTOR + 2; // Global Variables global START_GLOBAL_VARIABLES: u32 = CALL_CONTEXT_LENGTH + HEADER_LENGTH; global CHAIN_ID_SELECTOR: u32 = START_GLOBAL_VARIABLES; @@ -405,131 +442,88 @@ global START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET: u32 = START_EMIT_L2_TO_L1_MSG_WR * GAS COSTS FOR AVM OPCODES * They are used in TS and C++ */ -global AVM_DEFAULT_BASE_GAS_L2: u16 = 100; -global AVM_DEFAULT_DYN_GAS_L2: u16 = 0; -// Base GAS. -global AVM_ADD_BASE_L2_GAS: u16 = 320; -global AVM_SUB_BASE_L2_GAS: u16 = 320; -global AVM_MUL_BASE_L2_GAS: u16 = 330; -global AVM_DIV_BASE_L2_GAS: u16 = 430; -global AVM_FDIV_BASE_L2_GAS: u16 = 320; -global AVM_EQ_BASE_L2_GAS: u16 = 320; -global AVM_LT_BASE_L2_GAS: u16 = 640; -global AVM_LTE_BASE_L2_GAS: u16 = 640; -global AVM_AND_BASE_L2_GAS: u16 = 330; -global AVM_OR_BASE_L2_GAS: u16 = 330; -global AVM_XOR_BASE_L2_GAS: u16 = 320; -global AVM_NOT_BASE_L2_GAS: u16 = 270; -global AVM_SHL_BASE_L2_GAS: u16 = 320; -global AVM_SHR_BASE_L2_GAS: u16 = 320; -global AVM_CAST_BASE_L2_GAS: u16 = 300; -global AVM_ADDRESS_BASE_L2_GAS: u16 = 200; -global AVM_STORAGEADDRESS_BASE_L2_GAS: u16 = 200; -global AVM_SENDER_BASE_L2_GAS: u16 = 200; -global AVM_FUNCTIONSELECTOR_BASE_L2_GAS: u16 = 200; -global AVM_TRANSACTIONFEE_BASE_L2_GAS: u16 = 200; -global AVM_CHAINID_BASE_L2_GAS: u16 = 200; -global AVM_VERSION_BASE_L2_GAS: u16 = 200; -global AVM_BLOCKNUMBER_BASE_L2_GAS: u16 = 200; -global AVM_TIMESTAMP_BASE_L2_GAS: u16 = 200; -global AVM_FEEPERL2GAS_BASE_L2_GAS: u16 = 200; -global AVM_FEEPERDAGAS_BASE_L2_GAS: u16 = 200; -global AVM_CALLDATACOPY_BASE_L2_GAS: u16 = 290; -global AVM_L2GASLEFT_BASE_L2_GAS: u16 = 180; -global AVM_DAGASLEFT_BASE_L2_GAS: u16 = 180; -global AVM_JUMP_BASE_L2_GAS: u16 = 120; -global AVM_JUMPI_BASE_L2_GAS: u16 = 180; -global AVM_INTERNALCALL_BASE_L2_GAS: u16 = 180; -global AVM_INTERNALRETURN_BASE_L2_GAS: u16 = 180; -global AVM_SET_BASE_L2_GAS: u16 = 180; -global AVM_MOV_BASE_L2_GAS: u16 = 230; -global AVM_CMOV_BASE_L2_GAS: u16 = 340; -global AVM_SLOAD_BASE_L2_GAS: u16 = 180; -global AVM_SSTORE_BASE_L2_GAS: u16 = 180; -global AVM_NOTEHASHEXISTS_BASE_L2_GAS: u16 = 260; -global AVM_EMITNOTEHASH_BASE_L2_GAS: u16 = 260; -global AVM_NULLIFIEREXISTS_BASE_L2_GAS: u16 = 260; -global AVM_EMITNULLIFIER_BASE_L2_GAS: u16 = 260; -global AVM_L1TOL2MSGEXISTS_BASE_L2_GAS: u16 = 260; -global AVM_GETCONTRACTINSTANCE_BASE_L2_GAS: u16 = 480; -global AVM_EMITUNENCRYPTEDLOG_BASE_L2_GAS: u16 = 180; -global AVM_SENDL2TOL1MSG_BASE_L2_GAS: u16 = 260; -global AVM_CALL_BASE_L2_GAS: u16 = 450; -global AVM_STATICCALL_BASE_L2_GAS: u16 = 450; -global AVM_DELEGATECALL_BASE_L2_GAS: u16 = 0; -global AVM_RETURN_BASE_L2_GAS: u16 = 140; -global AVM_REVERT_BASE_L2_GAS: u16 = 140; -global AVM_DEBUGLOG_BASE_L2_GAS: u16 = 100; -global AVM_KECCAK_BASE_L2_GAS: u16 = 3000; -global AVM_POSEIDON2_BASE_L2_GAS: u16 = 670; -global AVM_SHA256_BASE_L2_GAS: u16 = 3000; -global AVM_PEDERSEN_BASE_L2_GAS: u16 = 3000; -global AVM_ECADD_BASE_L2_GAS: u16 = 900; -global AVM_MSM_BASE_L2_GAS: u16 = 900; -global AVM_PEDERSENCOMMITMENT_BASE_L2_GAS: u16 = 3000; -global AVM_TORADIXLE_BASE_L2_GAS: u16 = 200; -global AVM_SHA256COMPRESSION_BASE_L2_GAS: u16 = 3000; -global AVM_KECCAKF1600_BASE_L2_GAS: u16 = 3000; -// Dynamic GAS -global AVM_ADD_DYN_L2_GAS: u16 = 0; -global AVM_SUB_DYN_L2_GAS: u16 = 0; -global AVM_MUL_DYN_L2_GAS: u16 = 0; -global AVM_DIV_DYN_L2_GAS: u16 = 0; -global AVM_FDIV_DYN_L2_GAS: u16 = 0; -global AVM_EQ_DYN_L2_GAS: u16 = 0; -global AVM_LT_DYN_L2_GAS: u16 = 0; -global AVM_LTE_DYN_L2_GAS: u16 = 0; -global AVM_AND_DYN_L2_GAS: u16 = 0; -global AVM_OR_DYN_L2_GAS: u16 = 0; -global AVM_XOR_DYN_L2_GAS: u16 = 0; -global AVM_NOT_DYN_L2_GAS: u16 = 0; -global AVM_SHL_DYN_L2_GAS: u16 = 0; -global AVM_SHR_DYN_L2_GAS: u16 = 0; -global AVM_CAST_DYN_L2_GAS: u16 = 0; -global AVM_ADDRESS_DYN_L2_GAS: u16 = 0; -global AVM_STORAGEADDRESS_DYN_L2_GAS: u16 = 0; -global AVM_SENDER_DYN_L2_GAS: u16 = 0; -global AVM_FUNCTIONSELECTOR_DYN_L2_GAS: u16 = 0; -global AVM_TRANSACTIONFEE_DYN_L2_GAS: u16 = 0; -global AVM_CHAINID_DYN_L2_GAS: u16 = 0; -global AVM_VERSION_DYN_L2_GAS: u16 = 0; -global AVM_BLOCKNUMBER_DYN_L2_GAS: u16 = 0; -global AVM_TIMESTAMP_DYN_L2_GAS: u16 = 0; -global AVM_FEEPERL2GAS_DYN_L2_GAS: u16 = 0; -global AVM_FEEPERDAGAS_DYN_L2_GAS: u16 = 0; -global AVM_CALLDATACOPY_DYN_L2_GAS: u16 = 50; -global AVM_L2GASLEFT_DYN_L2_GAS: u16 = 0; -global AVM_DAGASLEFT_DYN_L2_GAS: u16 = 0; -global AVM_JUMP_DYN_L2_GAS: u16 = 0; -global AVM_JUMPI_DYN_L2_GAS: u16 = 0; -global AVM_INTERNALCALL_DYN_L2_GAS: u16 = 0; -global AVM_INTERNALRETURN_DYN_L2_GAS: u16 = 0; -global AVM_SET_DYN_L2_GAS: u16 = 0; -global AVM_MOV_DYN_L2_GAS: u16 = 0; -global AVM_CMOV_DYN_L2_GAS: u16 = 0; -global AVM_SLOAD_DYN_L2_GAS: u16 = 180; -global AVM_SSTORE_DYN_L2_GAS: u16 = 180; -global AVM_NOTEHASHEXISTS_DYN_L2_GAS: u16 = 0; -global AVM_EMITNOTEHASH_DYN_L2_GAS: u16 = 0; -global AVM_NULLIFIEREXISTS_DYN_L2_GAS: u16 = 0; -global AVM_EMITNULLIFIER_DYN_L2_GAS: u16 = 0; -global AVM_L1TOL2MSGEXISTS_DYN_L2_GAS: u16 = 0; -global AVM_GETCONTRACTINSTANCE_DYN_L2_GAS: u16 = 0; -global AVM_EMITUNENCRYPTEDLOG_DYN_L2_GAS: u16 = 180; -global AVM_SENDL2TOL1MSG_DYN_L2_GAS: u16 = 0; -global AVM_CALL_DYN_L2_GAS: u16 = 50; -global AVM_STATICCALL_DYN_L2_GAS: u16 = 50; -global AVM_DELEGATECALL_DYN_L2_GAS: u16 = 50; -global AVM_RETURN_DYN_L2_GAS: u16 = 50; -global AVM_REVERT_DYN_L2_GAS: u16 = 50; -global AVM_DEBUGLOG_DYN_L2_GAS: u16 = 0; -global AVM_KECCAK_DYN_L2_GAS: u16 = 0; -global AVM_POSEIDON2_DYN_L2_GAS: u16 = 0; -global AVM_SHA256_DYN_L2_GAS: u16 = 0; -global AVM_PEDERSEN_DYN_L2_GAS: u16 = 0; -global AVM_ECADD_DYN_L2_GAS: u16 = 0; -global AVM_MSM_DYN_L2_GAS: u16 = 0; -global AVM_PEDERSENCOMMITMENT_DYN_L2_GAS: u16 = 0; -global AVM_TORADIXLE_DYN_L2_GAS: u16 = 200; -global AVM_SHA256COMPRESSION_DYN_L2_GAS: u16 = 0; -global AVM_KECCAKF1600_DYN_L2_GAS: u16 = 0; +// Base L2 GAS +// Note: magic numbers here are derived from each op's AVM circuit trace area +global AVM_ADD_BASE_L2_GAS: u32 = 32; +global AVM_SUB_BASE_L2_GAS: u32 = 32; +global AVM_MUL_BASE_L2_GAS: u32 = 33; +global AVM_DIV_BASE_L2_GAS: u32 = 43; +global AVM_FDIV_BASE_L2_GAS: u32 = 32; +global AVM_EQ_BASE_L2_GAS: u32 = 32; +global AVM_LT_BASE_L2_GAS: u32 = 64; +global AVM_LTE_BASE_L2_GAS: u32 = 64; +global AVM_AND_BASE_L2_GAS: u32 = 33; +global AVM_OR_BASE_L2_GAS: u32 = 33; +global AVM_XOR_BASE_L2_GAS: u32 = 33; +global AVM_NOT_BASE_L2_GAS: u32 = 27; +global AVM_SHL_BASE_L2_GAS: u32 = 32; +global AVM_SHR_BASE_L2_GAS: u32 = 32; +global AVM_CAST_BASE_L2_GAS: u32 = 30; +global AVM_GETENVVAR_BASE_L2_GAS: u16 = 20; +global AVM_CALLDATACOPY_BASE_L2_GAS: u32 = 29; +global AVM_JUMP_BASE_L2_GAS: u32 = 12; +global AVM_JUMPI_BASE_L2_GAS: u32 = 18; +global AVM_INTERNALCALL_BASE_L2_GAS: u32 = 18; +global AVM_INTERNALRETURN_BASE_L2_GAS: u32 = 18; +global AVM_SET_BASE_L2_GAS: u32 = 18; +global AVM_MOV_BASE_L2_GAS: u32 = 23; +global AVM_CMOV_BASE_L2_GAS: u32 = 34; +global AVM_SLOAD_BASE_L2_GAS: u32 = 18 + L2_GAS_PER_PUBLIC_DATA_READ; +global AVM_SSTORE_BASE_L2_GAS: u32 = 18 + L2_GAS_PER_PUBLIC_DATA_UPDATE; +global AVM_NOTEHASHEXISTS_BASE_L2_GAS: u32 = 26 + L2_GAS_PER_NOTE_HASH_READ_REQUEST; +global AVM_EMITNOTEHASH_BASE_L2_GAS: u32 = 26 + L2_GAS_PER_NOTE_HASH; +global AVM_NULLIFIEREXISTS_BASE_L2_GAS: u32 = 26 + L2_GAS_PER_NULLIFIER_READ_REQUEST; +global AVM_EMITNULLIFIER_BASE_L2_GAS: u32 = 26 + L2_GAS_PER_NULLIFIER; +global AVM_L1TOL2MSGEXISTS_BASE_L2_GAS: u32 = 26 + L2_GAS_PER_L1_TO_L2_MSG_READ_REQUEST; +global AVM_GETCONTRACTINSTANCE_BASE_L2_GAS: u32 = 48 + L2_GAS_PER_NULLIFIER_READ_REQUEST; // does a nullifier check +global AVM_EMITUNENCRYPTEDLOG_BASE_L2_GAS: u32 = 18; +global AVM_SENDL2TOL1MSG_BASE_L2_GAS: u32 = 26 + L2_GAS_PER_L2_TO_L1_MSG; +// On CALL, AVM performs nullifier checks for contract address & contract class ID +global AVM_CALL_BASE_L2_GAS: u32 = 45 + (2 * L2_GAS_PER_NULLIFIER_READ_REQUEST); +global AVM_STATICCALL_BASE_L2_GAS: u32 = 45 + (2 * L2_GAS_PER_NULLIFIER_READ_REQUEST); +global AVM_DELEGATECALL_BASE_L2_GAS: u32 = 45 + (2 * L2_GAS_PER_NULLIFIER_READ_REQUEST); +global AVM_RETURN_BASE_L2_GAS: u32 = 28; +global AVM_REVERT_BASE_L2_GAS: u32 = 28; +global AVM_DEBUGLOG_BASE_L2_GAS: u32 = 10; +global AVM_KECCAK_BASE_L2_GAS: u32 = 3000; +global AVM_POSEIDON2_BASE_L2_GAS: u32 = 78; +global AVM_SHA256_BASE_L2_GAS: u32 = 2610; +global AVM_PEDERSEN_BASE_L2_GAS: u32 = 1000; +global AVM_ECADD_BASE_L2_GAS: u32 = 62; +global AVM_MSM_BASE_L2_GAS: u32 = 1000; +global AVM_PEDERSENCOMMITMENT_BASE_L2_GAS: u32 = 1000; +global AVM_TORADIXLE_BASE_L2_GAS: u32 = 46; +global AVM_SHA256COMPRESSION_BASE_L2_GAS: u32 = 261; +global AVM_KECCAKF1600_BASE_L2_GAS: u32 = 300; +// Dynamic L2 GAS +global AVM_CALLDATACOPY_DYN_L2_GAS: u32 = 6; +// a single increment here corresponds to an entire additional field (hence x32 bytes per field) +global AVM_EMITUNENCRYPTEDLOG_DYN_L2_GAS: u32 = 18 + (DA_BYTES_PER_FIELD * L2_GAS_PER_LOG_BYTE); +global AVM_CALL_DYN_L2_GAS: u32 = 4; +global AVM_STATICCALL_DYN_L2_GAS: u32 = 4; +global AVM_DELEGATECALL_DYN_L2_GAS: u32 = 4; +global AVM_RETURN_DYN_L2_GAS: u32 = 6; +global AVM_REVERT_DYN_L2_GAS: u32 = 6; +global AVM_KECCAK_DYN_L2_GAS: u32 = 100; +global AVM_SHA256_DYN_L2_GAS: u32 = 100; +global AVM_PEDERSEN_DYN_L2_GAS: u32 = 100; +global AVM_PEDERSENCOMMITMENT_DYN_L2_GAS: u32 = 100; +global AVM_MSM_DYN_L2_GAS: u32 = 100; +global AVM_TORADIXLE_DYN_L2_GAS: u32 = 20; + +// Base DA Gas +global AVM_SSTORE_BASE_DA_GAS: u32 = DA_BYTES_PER_FIELD * DA_GAS_PER_BYTE; +global AVM_EMITNOTEHASH_BASE_DA_GAS: u32 = DA_BYTES_PER_FIELD * DA_GAS_PER_BYTE; +global AVM_EMITNULLIFIER_BASE_DA_GAS: u32 = DA_BYTES_PER_FIELD * DA_GAS_PER_BYTE; +global AVM_SENDL2TOL1MSG_BASE_DA_GAS: u32 = DA_BYTES_PER_FIELD * DA_GAS_PER_BYTE; +// Dynamic DA Gas +// a single increment here corresponds to an entire additional field (hence x32 bytes per field) +global AVM_EMITUNENCRYPTEDLOG_DYN_DA_GAS: u32 = DA_BYTES_PER_FIELD * DA_GAS_PER_BYTE; + +// Constants related to proof type of a recursive proof verification. +// Keep following constants in sync with the enum acir_format::PROOF_TYPE in recursion_constraint.hpp +global PROOF_TYPE_PLONK : u32 = 0; +global PROOF_TYPE_HONK : u32 = 1; +global PROOF_TYPE_OINK : u32 = 2; +global PROOF_TYPE_PG : u32 = 3; +global PROOF_TYPE_AVM : u32 = 4; diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/content_commitment.nr b/noir-projects/noir-protocol-circuits/crates/types/src/content_commitment.nr index 03b54424d73..71b160aac52 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/content_commitment.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/content_commitment.nr @@ -1,6 +1,6 @@ use crate::{constants::CONTENT_COMMITMENT_LENGTH, traits::{Deserialize, Empty, Serialize}}; -struct ContentCommitment { +pub struct ContentCommitment { num_txs: Field, txs_effects_hash: Field, in_hash: Field, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/contract_class_id.nr b/noir-projects/noir-protocol-circuits/crates/types/src/contract_class_id.nr index 0060031f1a3..fbe77eb62f9 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/contract_class_id.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/contract_class_id.nr @@ -1,7 +1,7 @@ use crate::constants::GENERATOR_INDEX__CONTRACT_LEAF; use crate::traits::{ToField, FromField, Serialize, Deserialize}; -struct ContractClassId { +pub struct ContractClassId { inner: Field } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/contract_instance.nr b/noir-projects/noir-protocol-circuits/crates/types/src/contract_instance.nr index be2f0f48833..c10fa38c944 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/contract_instance.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/contract_instance.nr @@ -4,7 +4,7 @@ use crate::{ traits::{Deserialize, Hash, Serialize} }; -struct ContractInstance { +pub struct ContractInstance { salt : Field, deployer: AztecAddress, contract_class_id : ContractClassId, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/contrakt/storage_read.nr b/noir-projects/noir-protocol-circuits/crates/types/src/contrakt/storage_read.nr index e7dfed3542e..b69bc4915e3 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/contrakt/storage_read.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/contrakt/storage_read.nr @@ -1,6 +1,6 @@ use crate::{constants::CONTRACT_STORAGE_READ_LENGTH, traits::{Deserialize, Empty, Serialize}}; -struct StorageRead { +pub struct StorageRead { storage_slot: Field, current_value: Field, counter: u32, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/contrakt/storage_update_request.nr b/noir-projects/noir-protocol-circuits/crates/types/src/contrakt/storage_update_request.nr index e082b3c3990..46efa3d7c5c 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/contrakt/storage_update_request.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/contrakt/storage_update_request.nr @@ -1,6 +1,6 @@ use crate::{constants::CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH, traits::{Deserialize, Empty, Serialize}}; -struct StorageUpdateRequest { +pub struct StorageUpdateRequest { storage_slot : Field, new_value : Field, counter: u32 diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/data/public_data_hint.nr b/noir-projects/noir-protocol-circuits/crates/types/src/data/public_data_hint.nr index 23252c3a22c..7625534119a 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/data/public_data_hint.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/data/public_data_hint.nr @@ -4,7 +4,7 @@ use crate::{ constants::PUBLIC_DATA_TREE_HEIGHT }; -struct PublicDataHint { +pub struct PublicDataHint { leaf_slot: Field, value: Field, override_counter: u32, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/data/public_data_leaf_hint.nr b/noir-projects/noir-protocol-circuits/crates/types/src/data/public_data_leaf_hint.nr index ba6640318e2..f7a544abb4a 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/data/public_data_leaf_hint.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/data/public_data_leaf_hint.nr @@ -3,7 +3,7 @@ use crate::{ merkle_tree::MembershipWitness, constants::PUBLIC_DATA_TREE_HEIGHT }; -struct PublicDataLeafHint { +pub struct PublicDataLeafHint { preimage: PublicDataTreeLeafPreimage, membership_witness: MembershipWitness, } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/data/public_data_tree_leaf.nr b/noir-projects/noir-protocol-circuits/crates/types/src/data/public_data_tree_leaf.nr index 22741788061..5a0cdb28f58 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/data/public_data_tree_leaf.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/data/public_data_tree_leaf.nr @@ -1,6 +1,6 @@ use crate::{abis::{public_data_read::PublicDataRead, side_effect::{Overridable, Readable}}, traits::Empty}; -struct PublicDataTreeLeaf { +pub struct PublicDataTreeLeaf { slot: Field, value: Field, } @@ -23,7 +23,7 @@ impl PublicDataTreeLeaf { } } -struct OverridablePublicDataTreeLeaf { +pub struct OverridablePublicDataTreeLeaf { leaf: PublicDataTreeLeaf, override_counter: u32, } @@ -50,4 +50,3 @@ impl Overridable for OverridablePublicDataTreeLeaf { self.override_counter } } - diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/data/public_data_tree_leaf_preimage.nr b/noir-projects/noir-protocol-circuits/crates/types/src/data/public_data_tree_leaf_preimage.nr index 89fc59187c0..df33169354c 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/data/public_data_tree_leaf_preimage.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/data/public_data_tree_leaf_preimage.nr @@ -1,6 +1,6 @@ use crate::{merkle_tree::leaf_preimage::IndexedTreeLeafPreimage, traits::{Empty, Hash}}; -struct PublicDataTreeLeafPreimage { +pub struct PublicDataTreeLeafPreimage { slot : Field, value: Field, next_slot :Field, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr b/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr index 74c49d25d48..ec4ca57fc12 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr @@ -15,6 +15,7 @@ use crate::{ recursion::verification_key::VerificationKey, traits::{is_empty, ToField}, utils::field::field_from_bytes_32_trunc }; +use super::utils::field::field_from_bytes; pub fn sha256_to_field(bytes_to_hash: [u8; N]) -> Field { let sha256_hashed = std::hash::sha256(bytes_to_hash); @@ -276,6 +277,50 @@ pub fn poseidon2_hash_with_separator( sponge.squeeze() } +pub fn poseidon2_hash_with_separator_slice(inputs: [Field], separator: T) -> Field where T: ToField { + let in_len = inputs.len() + 1; + let two_pow_64 = 18446744073709551616; + let iv : Field = (in_len as Field) * two_pow_64; + let mut sponge = std::hash::poseidon2::Poseidon2::new(iv); + sponge.absorb(separator.to_field()); + + for i in 0..inputs.len() { + sponge.absorb(inputs[i]); + } + + sponge.squeeze() +} + +#[no_predicates] +pub fn poseidon2_hash_bytes(inputs: [u8; N]) -> Field { + // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of Math.ceil(N/31) + let mut in_len = N / 31; + let mut has_padding = false; + if N % 31 != 0 { + in_len += 1; + has_padding = true; + } + + let two_pow_64 = 18446744073709551616; + let iv : Field = (in_len as Field) * two_pow_64; + let mut sponge = std::hash::poseidon2::Poseidon2::new(iv); + + let mut current_field = [0; 31]; + for i in 0..inputs.len() { + let index = i % 31; + current_field[index] = inputs[i]; + if index == 30 { + sponge.absorb(field_from_bytes(current_field, false)); + current_field = [0; 31]; + } + } + if has_padding { + sponge.absorb(field_from_bytes(current_field, false)); + } + + sponge.squeeze() +} + #[test] fn smoke_sha256_to_field() { let full_buffer = [ diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/header.nr b/noir-projects/noir-protocol-circuits/crates/types/src/header.nr index 0421cf76181..c92dfdbc16d 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/header.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/header.nr @@ -13,7 +13,7 @@ use crate::{ }; // docs:start:header -struct Header { +pub struct Header { last_archive: AppendOnlyTreeSnapshot, content_commitment: ContentCommitment, state: StateReference, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/lib.nr b/noir-projects/noir-protocol-circuits/crates/types/src/lib.nr index c9b1e034025..be9d5271bc5 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/lib.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/lib.nr @@ -29,5 +29,9 @@ mod recursion; mod data; mod storage; mod validate; +mod meta; -pub use abis::kernel_circuit_public_inputs::{KernelCircuitPublicInputs, PrivateKernelCircuitPublicInputs, PublicKernelCircuitPublicInputs}; +pub use abis::kernel_circuit_public_inputs::{ + KernelCircuitPublicInputs, PrivateKernelCircuitPublicInputs, PublicKernelCircuitPublicInputs, + VMCircuitPublicInputs +}; diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/leaf_preimage.nr b/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/leaf_preimage.nr index 899481e57e4..f33dd072d96 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/leaf_preimage.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/leaf_preimage.nr @@ -1,9 +1,9 @@ -trait LeafPreimage { +pub trait LeafPreimage { fn get_key(self) -> Field; fn as_leaf(self) -> Field; } -trait IndexedTreeLeafPreimage { +pub trait IndexedTreeLeafPreimage { fn get_key(self) -> Field; fn get_next_key(self) -> Field; fn as_leaf(self) -> Field; diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/membership.nr b/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/membership.nr index 72e77f13ffa..4dea95699f1 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/membership.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/membership.nr @@ -6,7 +6,7 @@ use crate::{ traits::Empty }; -struct MembershipWitness { +pub struct MembershipWitness { leaf_index: Field, sibling_path: [Field; N] } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/merkle_tree.nr b/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/merkle_tree.nr index 90f346cfa62..352ba795485 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/merkle_tree.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/merkle_tree.nr @@ -1,6 +1,6 @@ use crate::{traits::Empty, hash::merkle_hash}; -struct MerkleTree { +pub struct MerkleTree { leaves: [Field; N], nodes: [Field; N], } @@ -71,4 +71,3 @@ impl MerkleTree { pub fn sibling_index(index: u32) -> u32 { if index % 2 == 0 { index + 1 } else { index - 1 } } - diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/root.nr b/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/root.nr index b7c01cb8533..c16bfeac356 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/root.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/root.nr @@ -62,8 +62,7 @@ pub fn calculate_empty_tree_root(depth: u32) -> Field { } else if depth == 10 { 0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686 } else { - assert(false, "depth should be between 0 and 10"); - 0 + panic(f"depth should be between 0 and 10") } } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/variable_merkle_tree.nr b/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/variable_merkle_tree.nr index dc0ca51c9d2..b4ffadabeb6 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/variable_merkle_tree.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/variable_merkle_tree.nr @@ -1,7 +1,7 @@ use crate::{hash::accumulate_sha256}; // N = maximum leaves // For now we only care about the root -struct VariableMerkleTree { +pub struct VariableMerkleTree { // leaves: [Field; N], root: Field, } @@ -207,4 +207,3 @@ mod tests { assert_eq(tree.root, full_tree.get_root()); } } - diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/messaging/l2_to_l1_message.nr b/noir-projects/noir-protocol-circuits/crates/types/src/messaging/l2_to_l1_message.nr index 2ba5999897c..e083d269d50 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/messaging/l2_to_l1_message.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/messaging/l2_to_l1_message.nr @@ -6,7 +6,7 @@ use crate::{ }; // Note: Not to be confused with L2ToL1Msg in Solidity -struct L2ToL1Message { +pub struct L2ToL1Message { recipient: EthAddress, content: Field, counter: u32, @@ -50,7 +50,7 @@ impl L2ToL1Message { } } -struct ScopedL2ToL1Message { +pub struct ScopedL2ToL1Message { message: L2ToL1Message, contract_address: AztecAddress, } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/meta/mod.nr b/noir-projects/noir-protocol-circuits/crates/types/src/meta/mod.nr new file mode 100644 index 00000000000..66cab0099b9 --- /dev/null +++ b/noir-projects/noir-protocol-circuits/crates/types/src/meta/mod.nr @@ -0,0 +1,232 @@ +use super::traits::{Serialize, Deserialize}; + +pub comptime fn pack_from_fields( + name: Quoted, + typ: Type, + buffer: Quoted, + already_consumed: u32, + replacements: [(Quoted, Quoted)] +) -> (Quoted, u32) { + let mut result = quote {}; + let mut consumed: u32 = 0; + + let found_replacements = replacements.filter(| (to_omit, _): (Quoted, Quoted) | to_omit == name); + + let replacement = if found_replacements.len() == 1 { + replacements[0].1 + } else { + quote {} + }; + + if replacement == quote {} { + if typ.is_field() | typ.as_integer().is_some() | typ.is_bool() { + result = quote { $buffer[$already_consumed] as $typ }; + consumed = 1; + } else if typ.as_struct().is_some() { + let (nested_def, _) = typ.as_struct().unwrap(); + let nested_name = nested_def.name(); + let mut deserialized_fields_list = &[]; + for field in nested_def.fields() { + let (field_name, field_type) = field; + let (deserialized_field, consumed_by_field) = pack_from_fields( + quote { $field_name }, + field_type, + quote { $buffer }, + consumed + already_consumed, + replacements + ); + consumed += consumed_by_field; + deserialized_fields_list = deserialized_fields_list.push_back(quote { $field_name: $deserialized_field }); + } + let deserialized_fields = deserialized_fields_list.join(quote {,}); + result = quote { + $nested_name { + $deserialized_fields + } + }; + } else if typ.as_array().is_some() { + let (element_type, array_len) = typ.as_array().unwrap(); + let array_len = array_len.as_constant().unwrap(); + let mut array_fields_list = &[]; + for _ in 0..array_len { + let (deserialized_field, consumed_by_field) = pack_from_fields( + quote { $name }, + element_type, + quote { $buffer }, + consumed + already_consumed, + replacements + ); + array_fields_list = array_fields_list.push_back(deserialized_field); + consumed += consumed_by_field; + } + let array_fields = array_fields_list.join(quote {,}); + result = quote { [ $array_fields ] }; + } else if typ.as_str().is_some() { + let length_type = typ.as_str().unwrap(); + let str_len = length_type.as_constant().unwrap(); + let mut byte_list = &[]; + for _ in 0..str_len { + let (deserialized_field, consumed_by_field) = pack_from_fields( + quote { $name }, + quote { u8}.as_type(), + quote { $buffer }, + consumed + already_consumed, + replacements + ); + byte_list = byte_list.push_back(deserialized_field); + consumed += consumed_by_field; + } + let bytes = byte_list.join(quote {,}); + result = quote { [ $bytes ].as_str_unchecked() }; + } else { + panic(f"Unsupported type for serialization of argument {name} and type {typ}") + } + } else { + result = replacement; + } + (result, consumed) +} + +pub comptime fn flatten_to_fields(name: Quoted, typ: Type, omit: [Quoted]) -> ([Quoted], [Quoted]) { + let mut fields = &[]; + let mut aux_vars = &[]; + + if omit.all(| to_omit | to_omit != name) { + if typ.is_field() | typ.as_integer().is_some() | typ.is_bool() { + fields = fields.push_back(quote { $name as Field }); + } else if typ.as_struct().is_some() { + let nested_struct = typ.as_struct().unwrap(); + let params = nested_struct.0.fields(); + let struct_flattened = params.map( + | (param_name, param_type): (Quoted, Type) | flatten_to_fields(quote {$name.$param_name}, param_type, omit) + ); + let struct_flattened_fields = struct_flattened.fold( + &[], + | acc: [Quoted], (fields, _): (_, [Quoted]) | acc.append(fields) + ); + let struct_flattened_aux_vars = struct_flattened.fold( + &[], + |acc: [Quoted], (_, aux_vars): ([Quoted], _) | acc.append(aux_vars) + ); + fields = fields.append(struct_flattened_fields); + aux_vars = aux_vars.append(struct_flattened_aux_vars); + } else if typ.as_array().is_some() { + let (element_type, array_len) = typ.as_array().unwrap(); + let array_len = array_len.as_constant().unwrap(); + for i in 0..array_len { + let (element_fields, element_aux_vars) = flatten_to_fields(quote { $name[$i] }, element_type, omit); + fields = fields.append(element_fields); + aux_vars = aux_vars.append(element_aux_vars); + } + } else if typ.as_str().is_some() { + let length_type = typ.as_str().unwrap(); + let str_len = length_type.as_constant().unwrap(); + let as_member = name.as_expr().unwrap().as_member_access(); + let var_name = if as_member.is_some() { + as_member.unwrap().1 + } else { + name + }; + let as_bytes_name = f"{var_name}_as_bytes".quoted_contents(); + let as_bytes = quote { let $as_bytes_name = $name.as_bytes() }; + for i in 0..str_len { + fields = fields.push_back(quote { $as_bytes_name[$i] as Field } ); + } + aux_vars = aux_vars.push_back(as_bytes); + } else { + panic(f"Unsupported type for serialization of argument {name} and type {typ}") + } + } + (fields, aux_vars) +} + +pub(crate) comptime fn derive_serialize(s: StructDefinition) -> Quoted { + let typ = s.as_type(); + let (fields, aux_vars) = flatten_to_fields(quote { self }, typ, &[]); + let aux_vars_for_serialization = if aux_vars.len() > 0 { + let joint = aux_vars.join(quote {;}); + quote { $joint; } + } else { + quote {} + }; + + let field_serializations = fields.join(quote {,}); + let serialized_len = fields.len(); + quote { + impl Serialize<$serialized_len> for $typ { + fn serialize(self) -> [Field; $serialized_len] { + $aux_vars_for_serialization + [ $field_serializations ] + } + } + } +} + +pub(crate) comptime fn derive_deserialize(s: StructDefinition) -> Quoted { + let typ = s.as_type(); + let (fields, _) = flatten_to_fields(quote { self }, typ, &[]); + let serialized_len = fields.len(); + let (deserialized, _) = pack_from_fields(quote { self }, typ, quote { value }, 0, &[]); + quote { + impl Deserialize<$serialized_len> for $typ { + fn deserialize(value: [Field; $serialized_len]) -> Self { + $deserialized + } + } + } +} + +#[derive(Serialize, Deserialize, Eq)] +pub struct Smol { + a: Field, + b: Field, +} + +#[derive(Serialize, Deserialize, Eq)] +pub struct HasArray { + a: [Field; 2], + b: bool +} + +#[derive(Serialize, Deserialize, Eq)] +pub struct Fancier { + a: Smol, + b: [Field; 2], + c: [u8; 3], + d: str<16>, +} + +fn main() { + assert(false); +} + +#[test] +fn smol_test() { + let smol = Smol { a: 1, b: 2 }; + let serialized = smol.serialize(); + assert(serialized == [1, 2], serialized); + let deserialized = Smol::deserialize(serialized); + assert(deserialized == smol); +} + +#[test] +fn has_array_test() { + let has_array = HasArray { a: [1, 2], b: true }; + let serialized = has_array.serialize(); + assert(serialized == [1, 2, 1], serialized); + let deserialized = HasArray::deserialize(serialized); + assert(deserialized == has_array); +} + +#[test] +fn fancier_test() { + let fancier = Fancier { a: Smol { a: 1, b: 2 }, b: [0, 1], c: [1, 2, 3], d: "metaprogramming!" }; + let serialized = fancier.serialize(); + assert( + serialized == [ + 1, 2, 0, 1, 1, 2, 3, 0x6d, 0x65, 0x74, 0x61, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x21 + ], serialized + ); + let deserialized = Fancier::deserialize(serialized); + assert(deserialized == fancier); +} diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/partial_state_reference.nr b/noir-projects/noir-protocol-circuits/crates/types/src/partial_state_reference.nr index c1a9dd30433..0390c3d8dc3 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/partial_state_reference.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/partial_state_reference.nr @@ -3,7 +3,7 @@ use crate::{ traits::{Deserialize, Empty, Serialize} }; -struct PartialStateReference { +pub struct PartialStateReference { note_hash_tree: AppendOnlyTreeSnapshot, nullifier_tree: AppendOnlyTreeSnapshot, public_data_tree: AppendOnlyTreeSnapshot, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/point.nr b/noir-projects/noir-protocol-circuits/crates/types/src/point.nr index d7aea653c61..5de69793449 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/point.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/point.nr @@ -1,7 +1,7 @@ pub use dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point; -use crate::{traits::{Empty, Hash, Serialize}, hash::poseidon2_hash}; +use crate::{traits::{Deserialize, Empty, Hash, Serialize}, hash::poseidon2_hash}; -global POINT_LENGTH: Field = 3; +global POINT_LENGTH: u32 = 3; impl Serialize for Point { fn serialize(self: Self) -> [Field; POINT_LENGTH] { @@ -22,3 +22,9 @@ impl Empty for Point { Point { x: 0, y: 0, is_infinite: false } } } + +impl Deserialize for Point { + fn deserialize(serialized: [Field; POINT_LENGTH]) -> Point { + Point { x: serialized[0], y: serialized[1], is_infinite: serialized[2] as bool } + } +} diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/recursion/proof.nr b/noir-projects/noir-protocol-circuits/crates/types/src/recursion/proof.nr index 4d3d97280a3..6dc97c15c9e 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/recursion/proof.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/recursion/proof.nr @@ -3,7 +3,7 @@ use crate::{ constants::{RECURSIVE_PROOF_LENGTH, NESTED_RECURSIVE_PROOF_LENGTH} }; -struct RecursiveProof { +pub struct RecursiveProof { fields: [Field; RECURSIVE_PROOF_LENGTH], } @@ -25,7 +25,7 @@ impl Empty for RecursiveProof { } } -struct NestedRecursiveProof { +pub struct NestedRecursiveProof { fields: [Field; NESTED_RECURSIVE_PROOF_LENGTH], } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/recursion/traits.nr b/noir-projects/noir-protocol-circuits/crates/types/src/recursion/traits.nr index 49fca6738a1..7d0565e7c5c 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/recursion/traits.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/recursion/traits.nr @@ -1,3 +1,3 @@ -trait Verifiable { +pub trait Verifiable { fn verify(self); } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/recursion/verification_key.nr b/noir-projects/noir-protocol-circuits/crates/types/src/recursion/verification_key.nr index 4c5be1ef939..e2b21da3bb3 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/recursion/verification_key.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/recursion/verification_key.nr @@ -1,8 +1,8 @@ use crate::{traits::{Serialize, Deserialize, Empty}, constants::VERIFICATION_KEY_LENGTH_IN_FIELDS}; -global SERIALIZED_VERIFICATION_KEY_LENGTH = VERIFICATION_KEY_LENGTH_IN_FIELDS + 1; +global SERIALIZED_VERIFICATION_KEY_LENGTH: u32 = VERIFICATION_KEY_LENGTH_IN_FIELDS + 1; -struct VerificationKey { +pub struct VerificationKey { key: [Field; VERIFICATION_KEY_LENGTH_IN_FIELDS], hash: Field, } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/scalar.nr b/noir-projects/noir-protocol-circuits/crates/types/src/scalar.nr index ac674bf24c9..51379c120de 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/scalar.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/scalar.nr @@ -1,7 +1,7 @@ pub use dep::std::embedded_curve_ops::EmbeddedCurveScalar as Scalar; use crate::traits::{Empty, Serialize}; -global SCALAR_SIZE: Field = 2; +global SCALAR_SIZE: u32 = 2; impl Empty for Scalar { fn empty() -> Self { diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/state_reference.nr b/noir-projects/noir-protocol-circuits/crates/types/src/state_reference.nr index 1f0ca7a64e5..b8f7322e98f 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/state_reference.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/state_reference.nr @@ -5,7 +5,7 @@ use crate::{ utils::arr_copy_slice }; -struct StateReference { +pub struct StateReference { l1_to_l2_message_tree: AppendOnlyTreeSnapshot, partial: PartialStateReference, } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/tests/fixture_builder.nr b/noir-projects/noir-protocol-circuits/crates/types/src/tests/fixture_builder.nr index b9e33389e8f..1bd4a1c6e1b 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/tests/fixture_builder.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/tests/fixture_builder.nr @@ -3,26 +3,31 @@ use crate::{ gas::Gas, gas_settings::GasSettings, call_context::CallContext, accumulated_data::{ CombinedAccumulatedData, PrivateAccumulatedData, PrivateAccumulatedDataBuilder, - PublicAccumulatedData, PublicAccumulatedDataBuilder + PublicAccumulatedData, PublicAccumulatedDataArrayLengths, PublicAccumulatedDataBuilder }, function_data::FunctionData, global_variables::GlobalVariables, - combined_constant_data::CombinedConstantData, - kernel_circuit_public_inputs::{KernelCircuitPublicInputs, PrivateKernelCircuitPublicInputs, PublicKernelCircuitPublicInputs}, + combined_constant_data::CombinedConstantData, enqueued_call_data::{EnqueuedCallData, Proof}, + kernel_circuit_public_inputs::{ + KernelCircuitPublicInputs, PrivateKernelCircuitPublicInputs, PublicKernelCircuitPublicInputs, + VMCircuitPublicInputs +}, kernel_data::KernelData, public_kernel_data::PublicKernelData, max_block_number::MaxBlockNumber, private_kernel_data::PrivateKernelData, note_hash::{NoteHash, ScopedNoteHash}, nullifier::{Nullifier, ScopedNullifier}, private_call_request::PrivateCallRequest, private_call_stack_item::PrivateCallStackItem, private_circuit_public_inputs::PrivateCircuitPublicInputs, - private_kernel::private_call_data::PrivateCallData, public_call_data::{Proof, PublicCallData}, + private_kernel::private_call_data::PrivateCallData, + public_call_data::{Proof as PublicCallDataProof, PublicCallData}, public_call_request::PublicCallRequest, public_call_stack_item::PublicCallStackItem, - public_call_stack_item_compressed::PublicCallStackItemCompressed, public_circuit_public_inputs::PublicCircuitPublicInputs, public_data_read::PublicDataRead, - public_data_update_request::PublicDataUpdateRequest, read_request::{ReadRequest, ScopedReadRequest}, + public_data_update_request::PublicDataUpdateRequest, + public_inner_call_request::PublicInnerCallRequest, read_request::{ReadRequest, ScopedReadRequest}, tree_leaf_read_request::TreeLeafReadRequest, log_hash::{LogHash, NoteLogHash, ScopedLogHash, EncryptedLogHash, ScopedEncryptedLogHash}, validation_requests::{ KeyValidationRequest, KeyValidationRequestAndGenerator, PrivateValidationRequests, - PublicValidationRequests, RollupValidationRequests, ScopedKeyValidationRequestAndGenerator + PublicValidationRequests, PublicValidationRequestArrayLengths, RollupValidationRequests, + ScopedKeyValidationRequestAndGenerator } }, address::{AztecAddress, EthAddress, SaltedInitializationHash, PublicKeysHash}, @@ -35,7 +40,7 @@ use crate::{ MAX_NULLIFIER_READ_REQUESTS_PER_TX, MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX, MAX_KEY_VALIDATION_REQUESTS_PER_TX, VK_TREE_HEIGHT, MAX_ENCRYPTED_LOGS_PER_TX, MAX_UNENCRYPTED_LOGS_PER_TX, MAX_NOTE_ENCRYPTED_LOGS_PER_TX, PRIVATE_CALL_REQUEST_LENGTH, - PUBLIC_CALL_STACK_ITEM_COMPRESSED_LENGTH + PUBLIC_CALL_REQUEST_LENGTH }, contrakt::{storage_read::StorageRead, storage_update_request::StorageUpdateRequest}, hash::{ @@ -69,7 +74,7 @@ fn vec_reverse(vec: BoundedVec) -> BoundedVec { reversed } -struct FixtureBuilder { +pub struct FixtureBuilder { contract_address: AztecAddress, storage_contract_address: AztecAddress, msg_sender: AztecAddress, @@ -79,7 +84,7 @@ struct FixtureBuilder { // Fees. is_fee_payer: bool, fee_payer: AztecAddress, - public_teardown_call_stack: BoundedVec, + public_teardown_call_request: PublicCallRequest, transaction_fee: Field, start_gas_left: Gas, end_gas_left: Gas, @@ -106,6 +111,7 @@ struct FixtureBuilder { contract_storage_update_requests: BoundedVec, private_call_requests: BoundedVec, public_call_requests: BoundedVec, + public_inner_call_requests: BoundedVec, gas_used: Gas, revert_code: u8, @@ -135,7 +141,6 @@ struct FixtureBuilder { acir_hash: Field, // Public call. - is_execution_request: bool, bytecode_hash: Field, prover_address: AztecAddress, @@ -288,7 +293,7 @@ impl FixtureBuilder { nullifiers: subarray(self.nullifiers.storage.map(|n: ScopedNullifier| n.nullifier)), private_call_requests: subarray(self.private_call_requests.storage), public_call_requests: subarray(self.public_call_requests.storage), - public_teardown_call_request: self.public_teardown_call_stack.storage[0], + public_teardown_call_request: self.public_teardown_call_request, l2_to_l1_msgs: subarray(self.l2_to_l1_msgs.storage.map(|r: ScopedL2ToL1Message| r.message)), start_side_effect_counter: self.counter_start, end_side_effect_counter: self.counter, @@ -338,6 +343,15 @@ impl FixtureBuilder { self.to_private_accumulated_data_builder().finish() } + pub fn to_public_call_request(self) -> PublicCallRequest { + PublicCallRequest { + contract_address: self.contract_address, + call_context: self.build_call_context(), + args_hash: self.args_hash, + counter: 0 + } + } + pub fn to_public_accumulated_data_builder(self) -> PublicAccumulatedDataBuilder { let nullifiers = BoundedVec { storage: self.nullifiers.storage.map(|n: ScopedNullifier| n.nullifier), len: self.nullifiers.len() }; let note_encrypted_logs_hashes = BoundedVec { @@ -412,7 +426,7 @@ impl FixtureBuilder { let end = self.to_private_accumulated_data(); let validation_requests = self.to_private_validation_requests(); let constants = self.to_constant_data(); - let public_teardown_call_request = self.public_teardown_call_stack.get_unchecked(0); + let public_teardown_call_request = self.public_teardown_call_request; PrivateKernelCircuitPublicInputs { min_revertible_side_effect_counter: self.min_revertible_side_effect_counter, @@ -442,7 +456,7 @@ impl FixtureBuilder { l1_to_l2_msg_read_requests: subarray(self.l1_to_l2_msg_read_requests.storage), contract_storage_update_requests: subarray(self.contract_storage_update_requests.storage), contract_storage_reads: self.contract_storage_reads.storage, - public_call_requests: subarray(self.public_call_requests.storage), + public_call_requests: subarray(self.public_inner_call_requests.storage), note_hashes: subarray(self.note_hashes.storage.map(|n: ScopedNoteHash| n.note_hash)), nullifiers: subarray(self.nullifiers.storage.map(|n: ScopedNullifier| n.nullifier)), l2_to_l1_msgs: subarray(self.l2_to_l1_msgs.storage.map(|m: ScopedL2ToL1Message| m.message)), @@ -463,13 +477,16 @@ impl FixtureBuilder { PublicCallStackItem { contract_address: self.contract_address, function_data: self.function_data, - is_execution_request: self.is_execution_request, public_inputs: self.to_public_circuit_public_inputs() } } pub fn to_public_call_data(self) -> PublicCallData { - PublicCallData { call_stack_item: self.to_public_call_stack_item(), proof: Proof {}, bytecode_hash: self.bytecode_hash } + PublicCallData { + call_stack_item: self.to_public_call_stack_item(), + proof: PublicCallDataProof {}, + bytecode_hash: self.bytecode_hash + } } pub fn to_public_validation_requests(self) -> PublicValidationRequests { @@ -483,6 +500,27 @@ impl FixtureBuilder { } } + pub fn to_vm_circuit_public_inputs(self) -> VMCircuitPublicInputs { + VMCircuitPublicInputs { + constants: self.to_constant_data(), + call_request: self.to_public_call_request(), + public_call_stack: subarray(self.public_inner_call_requests.storage), + previous_validation_request_array_lengths: PublicValidationRequestArrayLengths::empty(), + validation_requests: self.to_public_validation_requests(), + previous_accumulated_data_array_lengths: PublicAccumulatedDataArrayLengths::empty(), + accumulated_data: self.to_public_accumulated_data(), + start_side_effect_counter: self.counter_start, + end_side_effect_counter: self.counter, + start_gas_left: self.start_gas_left, + transaction_fee: self.transaction_fee, + reverted: self.revert_code != 0 + } + } + + pub fn to_enqueued_call_data(self) -> EnqueuedCallData { + EnqueuedCallData { data: self.to_vm_circuit_public_inputs(), proof: Proof {} } + } + pub fn to_public_kernel_circuit_public_inputs(self, revertible: bool) -> PublicKernelCircuitPublicInputs { // TODO: Split the data using self.min_revertible_side_effect_counter. let accumulated_data = self.to_public_accumulated_data(); @@ -496,17 +534,16 @@ impl FixtureBuilder { } else { PublicAccumulatedData::empty() }; - let validation_requests = self.to_public_validation_requests(); - let constants = self.to_constant_data(); PublicKernelCircuitPublicInputs { + constants: self.to_constant_data(), + validation_requests: self.to_public_validation_requests(), end_non_revertible, end, - validation_requests, - constants, - revert_code: self.revert_code, - public_teardown_call_stack: self.public_teardown_call_stack.storage, - fee_payer: self.fee_payer + end_side_effect_counter: self.counter, + public_teardown_call_request: self.public_teardown_call_request, + fee_payer: self.fee_payer, + revert_code: self.revert_code } } @@ -957,16 +994,17 @@ impl FixtureBuilder { } } - pub fn push_public_call_request(&mut self, item: PublicCallStackItemCompressed) { - self.public_call_requests.push(PublicCallRequest { item, counter: self.next_counter() }); + pub fn add_public_call_request(&mut self, request: PublicCallRequest) { + self.public_call_requests.push(request); } pub fn append_public_call_requests(&mut self, num: u32) { let index_offset = self.public_call_requests.len(); for i in 0..self.public_call_requests.max_len() { if i < num { - let item = self.mock_public_call_request_item(index_offset + i, false); - self.push_public_call_request(item); + let mut request = self.mock_public_call_request(index_offset + i, false); + request.counter = self.next_counter(); + self.add_public_call_request(request); } } } @@ -975,8 +1013,9 @@ impl FixtureBuilder { let index_offset = self.public_call_requests.len(); for i in 0..self.public_call_requests.max_len() { if i < num { - let item = self.mock_public_call_request_item(index_offset + i, true); - self.push_public_call_request(item); + let mut request = self.mock_public_call_request(index_offset + i, true); + request.counter = self.next_counter(); + self.add_public_call_request(request); } } } @@ -991,30 +1030,16 @@ impl FixtureBuilder { self.storage_contract_address } - pub fn push_public_teardown_call_request(&mut self, item: PublicCallStackItemCompressed) { - self.public_teardown_call_stack.push(PublicCallRequest { item, counter: self.next_counter() }); + pub fn set_public_teardown_call_request(&mut self) { + let mut request = self.mock_public_teardown_call_request(false); + request.counter = self.next_counter(); + self.public_teardown_call_request = request; } - pub fn append_public_teardown_call_request(&mut self) { - let index = self.public_teardown_call_stack.len(); - let item = self.mock_public_teardown_call_request_item(index, false); - self.push_public_teardown_call_request(item); - } - - pub fn append_public_teardown_call_request_delegate(&mut self) { - let index = self.public_teardown_call_stack.len(); - let item = self.mock_public_teardown_call_request_item(index, true); - self.push_public_teardown_call_request(item); - } - - pub fn append_public_teardown_call_requests(&mut self, num: u32) { - let index_offset = self.public_teardown_call_stack.len(); - for i in 0..self.public_teardown_call_stack.max_len() { - if i < num { - let item = self.mock_public_teardown_call_request_item(index_offset + i, true); - self.push_public_teardown_call_request(item); - } - } + pub fn set_public_teardown_call_request_delegate(&mut self) { + let mut request = self.mock_public_teardown_call_request(true); + request.counter = self.next_counter(); + self.public_teardown_call_request = request; } pub fn end_setup(&mut self) { @@ -1105,19 +1130,19 @@ impl FixtureBuilder { PrivateCallRequest::deserialize(fields) } - fn mock_public_call_request_item(self, index: u32, is_delegate_call: bool) -> PublicCallStackItemCompressed { + fn mock_public_call_request(self, index: u32, is_delegate_call: bool) -> PublicCallRequest { let value_offset = 636363 + self.value_offset + index as Field; - let mut fields = [0; PUBLIC_CALL_STACK_ITEM_COMPRESSED_LENGTH]; + let mut fields = [0; PUBLIC_CALL_REQUEST_LENGTH]; for i in 0..fields.len() { fields[i] = value_offset + i as Field; } - let mut item = PublicCallStackItemCompressed::deserialize(fields); - item.call_context = self.generate_call_context(item.contract_address, is_delegate_call); - item + let mut request = PublicCallRequest::deserialize(fields); + request.call_context = self.generate_call_context(request.contract_address, is_delegate_call); + request } - fn mock_public_teardown_call_request_item(self, index: u32, is_delegate_call: bool) -> PublicCallStackItemCompressed { - self.mock_public_call_request_item(index + 54345, is_delegate_call) + fn mock_public_teardown_call_request(self, is_delegate_call: bool) -> PublicCallRequest { + self.mock_public_call_request(54345, is_delegate_call) } fn mock_fee_payer(self) -> AztecAddress { @@ -1159,6 +1184,7 @@ impl Empty for FixtureBuilder { is_static_call: false, is_fee_payer: false, fee_payer: AztecAddress::zero(), + public_teardown_call_request: PublicCallRequest::empty(), historical_header: Header::empty(), tx_context: TxContext::empty(), global_variables: GlobalVariables::empty(), @@ -1178,6 +1204,7 @@ impl Empty for FixtureBuilder { contract_storage_update_requests: BoundedVec::new(), private_call_requests: BoundedVec::new(), public_call_requests: BoundedVec::new(), + public_inner_call_requests: BoundedVec::new(), max_block_number: MaxBlockNumber::empty(), note_hash_read_requests: BoundedVec::new(), note_hash_tree_leaf_read_requests: BoundedVec::new(), @@ -1197,7 +1224,6 @@ impl Empty for FixtureBuilder { contract_class_artifact_hash: 0, contract_class_public_bytecode_commitment: 0, acir_hash: 0, - is_execution_request: false, bytecode_hash: 0, prover_address: AztecAddress::zero(), proof: NestedRecursiveProof::empty(), @@ -1214,7 +1240,6 @@ impl Empty for FixtureBuilder { start_gas_left: Gas::empty(), end_gas_left: Gas::empty(), transaction_fee: 0, - public_teardown_call_stack: BoundedVec::new(), value_offset: 0 } } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/tests/fixtures/contract_functions.nr b/noir-projects/noir-protocol-circuits/crates/types/src/tests/fixtures/contract_functions.nr index f0022e81473..972bbc6ac0f 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/tests/fixtures/contract_functions.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/tests/fixtures/contract_functions.nr @@ -2,7 +2,7 @@ use crate::abis::{function_data::FunctionData, function_selector::FunctionSelect use crate::merkle_tree::membership::MembershipWitness; use crate::constants::FUNCTION_TREE_HEIGHT; -struct ContractFunction { +pub struct ContractFunction { data: FunctionData, vk_hash: Field, acir_hash: Field, @@ -47,4 +47,3 @@ global default_public_function = ContractFunction { ], }, }; - diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/tests/fixtures/contracts.nr b/noir-projects/noir-protocol-circuits/crates/types/src/tests/fixtures/contracts.nr index f711fdec1db..319ffb287e1 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/tests/fixtures/contracts.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/tests/fixtures/contracts.nr @@ -3,7 +3,7 @@ use crate::{ contract_class_id::ContractClassId }; -struct ContractData { +pub struct ContractData { address: AztecAddress, artifact_hash: Field, contract_address_salt: Field, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/tests/fixtures/vk_tree.nr b/noir-projects/noir-protocol-circuits/crates/types/src/tests/fixtures/vk_tree.nr index cf875776cc8..75e24d3c28d 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/tests/fixtures/vk_tree.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/tests/fixtures/vk_tree.nr @@ -2,15 +2,14 @@ use crate::constants::{ VK_TREE_HEIGHT, PRIVATE_KERNEL_INIT_INDEX, PRIVATE_KERNEL_INNER_INDEX, PRIVATE_KERNEL_RESET_FULL_INDEX, PRIVATE_KERNEL_RESET_BIG_INDEX, PRIVATE_KERNEL_RESET_MEDIUM_INDEX, PRIVATE_KERNEL_RESET_SMALL_INDEX, PRIVATE_KERNEL_TAIL_INDEX, PRIVATE_KERNEL_TAIL_TO_PUBLIC_INDEX, - EMPTY_NESTED_INDEX, PRIVATE_KERNEL_EMPTY_INDEX, PUBLIC_KERNEL_SETUP_INDEX, - PUBLIC_KERNEL_APP_LOGIC_INDEX, PUBLIC_KERNEL_TEARDOWN_INDEX, PUBLIC_KERNEL_TAIL_INDEX, - BASE_PARITY_INDEX, ROOT_PARITY_INDEX, BASE_ROLLUP_INDEX, MERGE_ROLLUP_INDEX, - BLOCK_ROOT_ROLLUP_INDEX, BLOCK_MERGE_ROLLUP_INDEX, ROOT_ROLLUP_INDEX, - PRIVATE_KERNEL_RESET_TINY_INDEX + EMPTY_NESTED_INDEX, PRIVATE_KERNEL_EMPTY_INDEX, PUBLIC_KERNEL_INNER_INDEX, + PUBLIC_KERNEL_MERGE_INDEX, PUBLIC_KERNEL_TAIL_INDEX, BASE_PARITY_INDEX, ROOT_PARITY_INDEX, + BASE_ROLLUP_INDEX, MERGE_ROLLUP_INDEX, BLOCK_ROOT_ROLLUP_INDEX, BLOCK_MERGE_ROLLUP_INDEX, + ROOT_ROLLUP_INDEX, PRIVATE_KERNEL_RESET_TINY_INDEX, BLOCK_ROOT_ROLLUP_FINAL_INDEX }; use crate::merkle_tree::merkle_tree::MerkleTree; -global VK_TREE_WIDTH = 32; +global VK_TREE_WIDTH: u32 = 32; #[test] fn check_vk_tree_width() { @@ -32,9 +31,8 @@ pub fn get_vk_merkle_tree() -> MerkleTree { leaves[PRIVATE_KERNEL_TAIL_TO_PUBLIC_INDEX] = 11; leaves[EMPTY_NESTED_INDEX] = 12; leaves[PRIVATE_KERNEL_EMPTY_INDEX] = 13; - leaves[PUBLIC_KERNEL_SETUP_INDEX] = 14; - leaves[PUBLIC_KERNEL_APP_LOGIC_INDEX] = 15; - leaves[PUBLIC_KERNEL_TEARDOWN_INDEX] = 16; + leaves[PUBLIC_KERNEL_INNER_INDEX] = 15; + leaves[PUBLIC_KERNEL_MERGE_INDEX] = 16; leaves[PUBLIC_KERNEL_TAIL_INDEX] = 17; leaves[BASE_PARITY_INDEX] = 18; leaves[ROOT_PARITY_INDEX] = 19; @@ -43,6 +41,7 @@ pub fn get_vk_merkle_tree() -> MerkleTree { leaves[BLOCK_ROOT_ROLLUP_INDEX] = 22; leaves[BLOCK_MERGE_ROLLUP_INDEX] = 23; leaves[ROOT_ROLLUP_INDEX] = 24; + leaves[BLOCK_ROOT_ROLLUP_FINAL_INDEX] = 25; MerkleTree::new(leaves) } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/tests/merkle_tree_utils.nr b/noir-projects/noir-protocol-circuits/crates/types/src/tests/merkle_tree_utils.nr index 4cc3700875a..421e21f6ff1 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/tests/merkle_tree_utils.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/tests/merkle_tree_utils.nr @@ -65,14 +65,14 @@ fn test_merkle_tree_update_leaf_three_layers() { assert_eq(tree.get_root(), calculate_empty_tree_root(3)); } -struct NonEmptyMerkleTree { +pub struct NonEmptyMerkleTree { subtree: MerkleTree, zero_hashes: [Field; TREE_HEIGHT], left_supertree_branch: [Field; SUPERTREE_HEIGHT], _phantom_subtree_height: [Field; SUBTREE_HEIGHT], } -impl Empty for NonEmptyMerkleTree { +impl Empty for NonEmptyMerkleTree { fn empty() -> Self { NonEmptyMerkleTree { subtree: MerkleTree::empty(), @@ -83,18 +83,22 @@ impl NonEmptyMerkleTree { +impl NonEmptyMerkleTree { pub fn new( non_zero_leaves: [Field; SUBTREE_ITEMS], _tree_height: [Field; TREE_HEIGHT], _supertree_height: [Field; SUPERTREE_HEIGHT], _subtree_height: [Field; SUBTREE_HEIGHT] ) -> Self { + // Hack to get around us converting a u32 to a u8. + // TODO: improve this. + (SUBTREE_HEIGHT as Field).assert_max_bit_size(8); + assert_eq( TREE_HEIGHT, SUPERTREE_HEIGHT + SUBTREE_HEIGHT, "tree height must be the sum of supertree and subtree height" ); assert_eq( - U128::from_integer(SUBTREE_ITEMS), U128::from_integer(1 << SUBTREE_HEIGHT), "subtree items must be 2^subtree height" + U128::from_integer(SUBTREE_ITEMS), U128::from_integer(1 << SUBTREE_HEIGHT as u8), "subtree items must be 2^subtree height" ); let subtree = MerkleTree::new(non_zero_leaves); @@ -104,7 +108,7 @@ impl Self; } @@ -55,11 +56,11 @@ pub fn is_empty_array(array: [T; N]) -> bool where T: Empty + Eq array.all(|elem| is_empty(elem)) } -trait Hash { +pub trait Hash { fn hash(self) -> Field; } -trait ToField { +pub trait ToField { fn to_field(self) -> Field; } @@ -106,7 +107,7 @@ impl ToField for str { } } -trait FromField { +pub trait FromField { fn from_field(value: Field) -> Self; } @@ -148,7 +149,8 @@ impl FromField for U128 { } // docs:start:serialize -trait Serialize { +#[derive_via(derive_serialize)] +pub trait Serialize { fn serialize(self) -> [Field; N]; } // docs:end:serialize @@ -158,19 +160,21 @@ impl Serialize for [Field; N] { self } } + impl Serialize for str { fn serialize(self) -> [Field; N] { - let mut result = [0; N]; - let bytes: [u8; N] = self.as_bytes(); - for i in 0..N { - result[i] = field_from_bytes([bytes[i];1], true); + let bytes = self.as_bytes(); + let mut fields = [0; N]; + for i in 0..bytes.len() { + fields[i] = bytes[i] as Field; } - result + fields } } // docs:start:deserialize -trait Deserialize { +#[derive_via(derive_deserialize)] +pub trait Deserialize { fn deserialize(fields: [Field; N]) -> Self; } // docs:end:deserialize diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/transaction/tx_context.nr b/noir-projects/noir-protocol-circuits/crates/types/src/transaction/tx_context.nr index f450a1a0eb3..0393c23652d 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/transaction/tx_context.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/transaction/tx_context.nr @@ -4,7 +4,7 @@ use crate::{ }; // docs:start:tx-context -struct TxContext { +pub struct TxContext { chain_id : Field, version : Field, gas_settings: GasSettings, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/transaction/tx_request.nr b/noir-projects/noir-protocol-circuits/crates/types/src/transaction/tx_request.nr index 5bc79a41c83..8bc221c8d3c 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/transaction/tx_request.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/transaction/tx_request.nr @@ -5,7 +5,7 @@ use crate::{ utils::reader::Reader }; -struct TxRequest { +pub struct TxRequest { origin: AztecAddress, args_hash: Field, tx_context: TxContext, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/type_serialization.nr b/noir-projects/noir-protocol-circuits/crates/types/src/type_serialization.nr index 474901eec9c..ac113fe2f79 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/type_serialization.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/type_serialization.nr @@ -1,11 +1,11 @@ use crate::traits::{Serialize, Deserialize}; -global BOOL_SERIALIZED_LEN: Field = 1; -global U8_SERIALIZED_LEN: Field = 1; -global U32_SERIALIZED_LEN: Field = 1; -global U64_SERIALIZED_LEN: Field = 1; -global U128_SERIALIZED_LEN: Field = 1; -global FIELD_SERIALIZED_LEN: Field = 1; +global BOOL_SERIALIZED_LEN: u32 = 1; +global U8_SERIALIZED_LEN: u32 = 1; +global U32_SERIALIZED_LEN: u32 = 1; +global U64_SERIALIZED_LEN: u32 = 1; +global U128_SERIALIZED_LEN: u32 = 1; +global FIELD_SERIALIZED_LEN: u32 = 1; impl Serialize for bool { fn serialize(self) -> [Field; BOOL_SERIALIZED_LEN] { diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr index d5bb0291291..c69e6234ed1 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr @@ -1,3 +1,5 @@ +mod assert_array_appended; +mod assert_array_prepended; mod assert_combined_array; mod assert_combined_sorted_transformed_value_array; mod assert_combined_transformed_array; @@ -13,6 +15,8 @@ mod sort_by; mod sort_by_counter; // Re-exports. +pub use assert_array_appended::{assert_array_appended, assert_array_appended_reversed, assert_array_appended_scoped}; +pub use assert_array_prepended::assert_array_prepended; pub use assert_combined_array::{assert_combined_array, combine_arrays}; pub use assert_combined_sorted_transformed_value_array::{ assert_combined_sorted_transformed_value_array_asc, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/assert_array_appended.nr b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/assert_array_appended.nr new file mode 100644 index 00000000000..ab433566d37 --- /dev/null +++ b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/assert_array_appended.nr @@ -0,0 +1,80 @@ +use crate::{abis::side_effect::Scoped, address::aztec_address::AztecAddress, traits::{Empty, is_empty}}; + +pub fn assert_array_appended( + dest: [T; N], + source: [T; M], + num_source_items: u32, + num_prepended_items: u32 +) where T: Empty + Eq { + let items_propagated = num_prepended_items + num_source_items; + assert(items_propagated <= N, "number of total items exceeds limit"); + let mut should_check = false; + let mut is_non_empty_item = true; + for i in 0..dest.len() { // Loop through dest instead of source because we also need to check that dest is appended with empty items. + should_check |= i == num_prepended_items; // Prepended items have been checked in validate_array_prepended() and can be skipped here. + is_non_empty_item &= i != items_propagated; + if should_check { + if is_non_empty_item { + assert_eq(dest[i], source[i - num_prepended_items], "source item does not append to dest"); + } else { + assert(is_empty(dest[i]), "output should be appended with empty items"); + } + } + } +} + +// Similar to assert_array_appended, except that the souce items will be appended to dest in reversed order. +pub fn assert_array_appended_reversed( + dest: [T; N], + source: [T; M], + num_source_items: u32, + num_prepended_items: u32 +) where T: Empty + Eq { + let items_propagated = num_prepended_items + num_source_items; + assert(items_propagated <= N, "number of total items exceeds limit"); + let mut should_check = false; + let mut is_non_empty_item = true; + for i in 0..dest.len() { + should_check |= i == num_prepended_items; + is_non_empty_item &= i != items_propagated; + if should_check { + if is_non_empty_item { + assert_eq( + dest[i], source[items_propagated - i - 1], "source item does not reversed append to dest" + ); + } else { + assert(is_empty(dest[i]), "output should be appended with empty items"); + } + } + } +} + +// Similar to assert_array_appended, except that the contract address of the dest items will also be checked. +pub fn assert_array_appended_scoped( + dest: [ST; N], + source: [T; M], + num_source_items: u32, + num_prepended_items: u32, + contract_address: AztecAddress +) where ST: Scoped + Empty + Eq, T: Eq { + let items_propagated = num_prepended_items + num_source_items; + assert(items_propagated <= N, "number of total items exceeds limit"); + let mut should_check = false; + let mut is_non_empty_item = true; + for i in 0..dest.len() { + should_check |= i == num_prepended_items; + is_non_empty_item &= i != items_propagated; + if should_check { + if is_non_empty_item { + assert_eq( + dest[i].inner(), source[i - num_prepended_items], "source item does not append to dest" + ); + assert_eq( + dest[i].contract_address(), contract_address, "propagated contract address does not match" + ); + } else { + assert(is_empty(dest[i]), "output should be appended with empty items"); + } + } + } +} diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/assert_array_prepended.nr b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/assert_array_prepended.nr new file mode 100644 index 00000000000..57323410bea --- /dev/null +++ b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/assert_array_prepended.nr @@ -0,0 +1,13 @@ +pub fn assert_array_prepended( + dest: [T; N], + source: [T; N], + num_source_items: u32 +) where T: Eq { + let mut proceed = true; + for i in 0..source.len() { + proceed &= i != num_source_items; + if proceed { + assert_eq(dest[i], source[i], "source item does not prepend to dest"); + } + } +} diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/assert_combined_sorted_transformed_value_array/get_combined_order_hints.nr b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/assert_combined_sorted_transformed_value_array/get_combined_order_hints.nr index 09ae1627c83..7f593937cf6 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/assert_combined_sorted_transformed_value_array/get_combined_order_hints.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/assert_combined_sorted_transformed_value_array/get_combined_order_hints.nr @@ -3,7 +3,7 @@ use crate::{ utils::arrays::{array_length, sort_by_counter::compare_by_counter_empty_padded_asc, get_sorted_tuple::get_sorted_tuple} }; -struct CombinedOrderHint { +pub(crate) struct CombinedOrderHint { counter: u32, original_index: u32, } @@ -254,4 +254,3 @@ mod tests { asc_to_equal(array_lt, array_gte, expected_hints); } } - diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/assert_exposed_sorted_transformed_value_array/get_order_hints.nr b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/assert_exposed_sorted_transformed_value_array/get_order_hints.nr index f5e6ba6200b..55ff2c86848 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/assert_exposed_sorted_transformed_value_array/get_order_hints.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/assert_exposed_sorted_transformed_value_array/get_order_hints.nr @@ -6,7 +6,7 @@ use crate::{ } }; -struct OrderHint { +pub struct OrderHint { counter: u32, sorted_index: u32, } @@ -147,4 +147,3 @@ mod tests { builder.desc_to_equal(expected_hints); } } - diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/assert_split_sorted_transformed_value_arrays/get_split_order_hints.nr b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/assert_split_sorted_transformed_value_arrays/get_split_order_hints.nr index 285835edf14..1b51607e7c9 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/assert_split_sorted_transformed_value_arrays/get_split_order_hints.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/assert_split_sorted_transformed_value_arrays/get_split_order_hints.nr @@ -6,7 +6,7 @@ use crate::{ } }; -struct SplitOrderHints { +pub struct SplitOrderHints { sorted_counters_lt: [u32; N], sorted_counters_gte: [u32; N], sorted_indexes: [u32; N], @@ -281,4 +281,3 @@ mod tests { builder.desc_to_equal(expected_hints); } } - diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/assert_split_transformed_value_arrays.nr b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/assert_split_transformed_value_arrays.nr index be6f88970f5..28c3b0062ff 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/assert_split_transformed_value_arrays.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/assert_split_transformed_value_arrays.nr @@ -69,7 +69,7 @@ mod tests { utils::arrays::assert_split_transformed_value_arrays::{assert_split_transformed_value_arrays, assert_split_transformed_value_arrays_with_hint} }; - global NUM_TEST_ITEMS = 5; + global NUM_TEST_ITEMS: u32 = 5; fn is_transformed(from: TestValue, to: Field) -> bool { from.value == to diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/get_sorted_result.nr b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/get_sorted_result.nr index 7356f9c5ce3..3c51059a76b 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/get_sorted_result.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/get_sorted_result.nr @@ -1,6 +1,6 @@ use crate::{utils::arrays::{get_sorted_tuple::{get_sorted_tuple, SortedTuple}}}; -struct SortedResult { +pub struct SortedResult { sorted_array: [T; N], sorted_index_hints: [u32; N], original_index_hints: [u32; N], diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/get_sorted_tuple.nr b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/get_sorted_tuple.nr index 204d90c1fc9..bc57dfcd30a 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/get_sorted_tuple.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays/get_sorted_tuple.nr @@ -1,6 +1,6 @@ use crate::utils::arrays::sort_by::sort_by; -struct SortedTuple { +pub struct SortedTuple { elem: T, original_index: u32, } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/utils/field.nr b/noir-projects/noir-protocol-circuits/crates/types/src/utils/field.nr index 954ef602f82..d4115e5743d 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/utils/field.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/utils/field.nr @@ -52,9 +52,7 @@ unconstrained fn bytes_field_test() { ]; let field = field_from_bytes(inputs, true); let return_bytes: [u8; 31] = field.to_be_bytes(); - for i in 0..31 { - assert_eq(inputs[i], return_bytes[i]); - } + assert_eq(inputs, return_bytes); // 32 bytes - we remove the final byte, and check it matches the field let inputs2 = [ 84, 62, 10, 102, 66, 255, 235, 128, 57, 41, 104, 97, 118, 90, 83, 64, 123, 186, 98, 189, 28, 151, 202, 67, 55, 77, 233, 80, 187, 224, 167, 158 @@ -62,9 +60,7 @@ unconstrained fn bytes_field_test() { let field2 = field_from_bytes_32_trunc(inputs2); let return_bytes2: [u8; 31] = field.to_be_bytes(); - for i in 0..31 { - assert_eq(return_bytes2[i], return_bytes[i]); - } + assert_eq(return_bytes2, return_bytes); assert_eq(field2, field); } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/utils/reader.nr b/noir-projects/noir-protocol-circuits/crates/types/src/utils/reader.nr index f537f0c9bce..3d8ace278ef 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/utils/reader.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/utils/reader.nr @@ -1,4 +1,4 @@ -struct Reader { +pub struct Reader { data: [Field; N], offset: u32, } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/utils/uint256.nr b/noir-projects/noir-protocol-circuits/crates/types/src/utils/uint256.nr index 54ac75ed94a..b54b7cc3b88 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/utils/uint256.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/utils/uint256.nr @@ -5,7 +5,7 @@ // // This is needed because in the cpp code, we have accumulate_sha256 // which returns 2 field elements, one for the high and low limb. -struct U256 { +pub struct U256 { // This is in big-endian order, typically because // sha256 is usually in big endian order. // Note: this means that inner[0] has the most significant 64 bits. @@ -56,7 +56,7 @@ impl U256 { // We cannot represent u128 in the type system // so we cannot return a u128 type. - // + // // This as conversion assumes that Field can store 128 bits of information // or else the conversion is lossy. // @@ -101,13 +101,13 @@ fn smoke_u256_from_bytes32_one_zero_zero_zero() { #[test] fn smoke_u256_from_bytes32_test() { /* - input: [ 0xAA, 0xBB, 0xCC, 0xDD, - 0xEE, 0xFF, 0x00, 0x11, - 0x22, 0x33, 0x44, 0x55, - 0x66, 0x77, 0x88, 0x99, - 0x11, 0x22, 0x33, 0x44, - 0x55, 0x66, 0x77, 0x88, - 0x99, 0xAA, 0xBB, 0xCC, + input: [ 0xAA, 0xBB, 0xCC, 0xDD, + 0xEE, 0xFF, 0x00, 0x11, + 0x22, 0x33, 0x44, 0x55, + 0x66, 0x77, 0x88, 0x99, + 0x11, 0x22, 0x33, 0x44, + 0x55, 0x66, 0x77, 0x88, + 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x00 ] output: inner[0]: 0xAABBCCDDEEFF0011 diff --git a/noir-projects/noir-protocol-circuits/generate_variants.js b/noir-projects/noir-protocol-circuits/generate_variants.js index 6c3b877cf38..d236a3f76ce 100644 --- a/noir-projects/noir-protocol-circuits/generate_variants.js +++ b/noir-projects/noir-protocol-circuits/generate_variants.js @@ -49,7 +49,7 @@ function generateVariants(originalFolder, variantsArray) { for ([variableName, variableValue] of Object.entries(replacements)) { mainDotNoirCode = mainDotNoirCode.replace( new RegExp(`^global\\s+${variableName}\\s=\\s.*;.*$`, "m"), - `global ${variableName} = ${variableValue};` + `global ${variableName}: u32 = ${variableValue};` ); } diff --git a/noir/.rebuild_patterns_native b/noir/.rebuild_patterns_native index 3d1eeeb33be..89493b066f7 100644 --- a/noir/.rebuild_patterns_native +++ b/noir/.rebuild_patterns_native @@ -3,7 +3,6 @@ ^noir/scripts/test_native.sh ^noir/noir-repo/acvm-repo ^noir/noir-repo/compiler -^noir/noir-repo/aztec_macros ^noir/noir-repo/noir_stdlib ^noir/noir-repo/tooling/backend_interface ^noir/noir-repo/tooling/bb_abstraction_leaks diff --git a/noir/.rebuild_patterns_packages b/noir/.rebuild_patterns_packages index 0541ebaa879..df6e13000bb 100644 --- a/noir/.rebuild_patterns_packages +++ b/noir/.rebuild_patterns_packages @@ -7,7 +7,6 @@ ^noir/noir-repo/yarn.lock ^noir/noir-repo/acvm-repo ^noir/noir-repo/compiler -^noir/noir-repo/aztec_macros ^noir/noir-repo/noir_stdlib ^noir/noir-repo/tooling/noir_codegen ^noir/noir-repo/tooling/noir_js diff --git a/noir/Earthfile b/noir/Earthfile index f5252a92d52..2ad31a5ba23 100644 --- a/noir/Earthfile +++ b/noir/Earthfile @@ -7,7 +7,6 @@ nargo-src: # Relevant source (TODO finer-grained 'tooling') COPY --dir \ noir-repo/acvm-repo \ - noir-repo/aztec_macros \ noir-repo/compiler \ noir-repo/noir_stdlib \ noir-repo/tooling \ @@ -43,7 +42,7 @@ nargo: SAVE IMAGE aztecprotocol/nargo test: - FROM +nargo + FROM +nargo-src COPY ./scripts/test_native.sh ./scripts/test_native.sh COPY noir-repo/.rustfmt.toml noir-repo/.rustfmt.toml @@ -116,7 +115,6 @@ packages-deps: # Relevant source (TODO finer-grained) COPY --dir \ noir-repo/acvm-repo \ - noir-repo/aztec_macros \ noir-repo/compiler \ noir-repo/docs \ noir-repo/noir_stdlib \ diff --git a/noir/bb-version b/noir/bb-version index 316ba4bd9e6..2f4c74eb2dd 100644 --- a/noir/bb-version +++ b/noir/bb-version @@ -1 +1 @@ -0.55.0 +0.56.0 diff --git a/noir/noir-repo/.github/scripts/playwright-install.sh b/noir/noir-repo/.github/scripts/playwright-install.sh index 4072e996264..7e65021166c 100755 --- a/noir/noir-repo/.github/scripts/playwright-install.sh +++ b/noir/noir-repo/.github/scripts/playwright-install.sh @@ -1,4 +1,4 @@ #!/bin/bash set -eu -npx playwright install && npx playwright install-deps +npx -y playwright@1.42 install --with-deps diff --git a/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp b/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp index a789a0f0c47..70ad596a93a 100644 --- a/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp +++ b/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp @@ -256,15 +256,6 @@ namespace Program { static AES128Encrypt bincodeDeserialize(std::vector); }; - struct Sha256 { - Program::HeapVector message; - Program::HeapArray output; - - friend bool operator==(const Sha256&, const Sha256&); - std::vector bincodeSerialize() const; - static Sha256 bincodeDeserialize(std::vector); - }; - struct Blake2s { Program::HeapVector message; Program::HeapArray output; @@ -462,7 +453,7 @@ namespace Program { struct ToRadix { Program::MemoryAddress input; - uint32_t radix; + Program::MemoryAddress radix; Program::HeapArray output; bool output_bits; @@ -471,7 +462,7 @@ namespace Program { static ToRadix bincodeDeserialize(std::vector); }; - std::variant value; + std::variant value; friend bool operator==(const BlackBoxOp&, const BlackBoxOp&); std::vector bincodeSerialize() const; @@ -827,15 +818,6 @@ namespace Program { static RANGE bincodeDeserialize(std::vector); }; - struct SHA256 { - std::vector inputs; - std::array outputs; - - friend bool operator==(const SHA256&, const SHA256&); - std::vector bincodeSerialize() const; - static SHA256 bincodeDeserialize(std::vector); - }; - struct Blake2s { std::vector inputs; std::array outputs; @@ -1040,7 +1022,7 @@ namespace Program { static Sha256Compression bincodeDeserialize(std::vector); }; - std::variant value; + std::variant value; friend bool operator==(const BlackBoxFuncCall&, const BlackBoxFuncCall&); std::vector bincodeSerialize() const; @@ -2630,47 +2612,6 @@ Program::BlackBoxFuncCall::RANGE serde::Deserializable BlackBoxFuncCall::SHA256::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::SHA256 BlackBoxFuncCall::SHA256::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - -} // end of namespace Program - -template <> -template -void serde::Serializable::serialize(const Program::BlackBoxFuncCall::SHA256 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.outputs, serializer); -} - -template <> -template -Program::BlackBoxFuncCall::SHA256 serde::Deserializable::deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::SHA256 obj; - obj.inputs = serde::Deserializable::deserialize(deserializer); - obj.outputs = serde::Deserializable::deserialize(deserializer); - return obj; -} - namespace Program { inline bool operator==(const BlackBoxFuncCall::Blake2s &lhs, const BlackBoxFuncCall::Blake2s &rhs) { @@ -3652,47 +3593,6 @@ Program::BlackBoxOp::AES128Encrypt serde::Deserializable BlackBoxOp::Sha256::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::Sha256 BlackBoxOp::Sha256::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - -} // end of namespace Program - -template <> -template -void serde::Serializable::serialize(const Program::BlackBoxOp::Sha256 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.message, serializer); - serde::Serializable::serialize(obj.output, serializer); -} - -template <> -template -Program::BlackBoxOp::Sha256 serde::Deserializable::deserialize(Deserializer &deserializer) { - Program::BlackBoxOp::Sha256 obj; - obj.message = serde::Deserializable::deserialize(deserializer); - obj.output = serde::Deserializable::deserialize(deserializer); - return obj; -} - namespace Program { inline bool operator==(const BlackBoxOp::Blake2s &lhs, const BlackBoxOp::Blake2s &rhs) { diff --git a/noir/noir-repo/acvm-repo/acir/src/circuit/black_box_functions.rs b/noir/noir-repo/acvm-repo/acir/src/circuit/black_box_functions.rs index 6639f1fbe71..5c07a61af7e 100644 --- a/noir/noir-repo/acvm-repo/acir/src/circuit/black_box_functions.rs +++ b/noir/noir-repo/acvm-repo/acir/src/circuit/black_box_functions.rs @@ -40,12 +40,6 @@ pub enum BlackBoxFunc { /// - input: (witness, bit_size) RANGE, - /// Computes SHA256 of the inputs - /// - inputs are a byte array, i.e a vector of (witness, 8) - /// - output is a byte array of len 32, i.e an array of 32 (witness, 8), - /// constrained to be the sha256 of the inputs. - SHA256, - /// Computes the Blake2s hash of the inputs, as specified in /// https://tools.ietf.org/html/rfc7693 /// - inputs are a byte array, i.e a vector of (witness, 8) @@ -213,7 +207,6 @@ impl BlackBoxFunc { pub fn name(&self) -> &'static str { match self { BlackBoxFunc::AES128Encrypt => "aes128_encrypt", - BlackBoxFunc::SHA256 => "sha256", BlackBoxFunc::SchnorrVerify => "schnorr_verify", BlackBoxFunc::Blake2s => "blake2s", BlackBoxFunc::Blake3 => "blake3", @@ -243,7 +236,6 @@ impl BlackBoxFunc { pub fn lookup(op_name: &str) -> Option { match op_name { "aes128_encrypt" => Some(BlackBoxFunc::AES128Encrypt), - "sha256" => Some(BlackBoxFunc::SHA256), "schnorr_verify" => Some(BlackBoxFunc::SchnorrVerify), "blake2s" => Some(BlackBoxFunc::Blake2s), "blake3" => Some(BlackBoxFunc::Blake3), diff --git a/noir/noir-repo/acvm-repo/acir/src/circuit/opcodes/black_box_function_call.rs b/noir/noir-repo/acvm-repo/acir/src/circuit/opcodes/black_box_function_call.rs index f527522cceb..fbe179d7c04 100644 --- a/noir/noir-repo/acvm-repo/acir/src/circuit/opcodes/black_box_function_call.rs +++ b/noir/noir-repo/acvm-repo/acir/src/circuit/opcodes/black_box_function_call.rs @@ -94,10 +94,6 @@ pub enum BlackBoxFuncCall { RANGE { input: FunctionInput, }, - SHA256 { - inputs: Vec>, - outputs: Box<[Witness; 32]>, - }, Blake2s { inputs: Vec>, outputs: Box<[Witness; 32]>, @@ -251,7 +247,6 @@ impl BlackBoxFuncCall { BlackBoxFuncCall::AND { .. } => BlackBoxFunc::AND, BlackBoxFuncCall::XOR { .. } => BlackBoxFunc::XOR, BlackBoxFuncCall::RANGE { .. } => BlackBoxFunc::RANGE, - BlackBoxFuncCall::SHA256 { .. } => BlackBoxFunc::SHA256, BlackBoxFuncCall::Blake2s { .. } => BlackBoxFunc::Blake2s, BlackBoxFuncCall::Blake3 { .. } => BlackBoxFunc::Blake3, BlackBoxFuncCall::SchnorrVerify { .. } => BlackBoxFunc::SchnorrVerify, @@ -282,7 +277,6 @@ impl BlackBoxFuncCall { pub fn get_inputs_vec(&self) -> Vec> { match self { BlackBoxFuncCall::AES128Encrypt { inputs, .. } - | BlackBoxFuncCall::SHA256 { inputs, .. } | BlackBoxFuncCall::Blake2s { inputs, .. } | BlackBoxFuncCall::Blake3 { inputs, .. } | BlackBoxFuncCall::BigIntFromLeBytes { inputs, .. } @@ -391,8 +385,7 @@ impl BlackBoxFuncCall { pub fn get_outputs_vec(&self) -> Vec { match self { - BlackBoxFuncCall::SHA256 { outputs, .. } - | BlackBoxFuncCall::Blake2s { outputs, .. } + BlackBoxFuncCall::Blake2s { outputs, .. } | BlackBoxFuncCall::Blake3 { outputs, .. } | BlackBoxFuncCall::Keccak256 { outputs, .. } => outputs.to_vec(), diff --git a/noir/noir-repo/acvm-repo/acir/tests/test_program_serialization.rs b/noir/noir-repo/acvm-repo/acir/tests/test_program_serialization.rs index 2b6ea83fafa..6bf5afe52d9 100644 --- a/noir/noir-repo/acvm-repo/acir/tests/test_program_serialization.rs +++ b/noir/noir-repo/acvm-repo/acir/tests/test_program_serialization.rs @@ -91,10 +91,10 @@ fn multi_scalar_mul_circuit() { let bytes = Program::serialize_program(&program); let expected_serialization: Vec = vec![ - 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 93, 141, 11, 10, 0, 32, 8, 67, 43, 181, 15, 116, 255, - 227, 70, 74, 11, 86, 194, 195, 169, 83, 115, 58, 49, 156, 12, 29, 121, 58, 66, 117, 176, - 144, 11, 105, 161, 222, 245, 42, 205, 13, 186, 58, 205, 233, 240, 25, 249, 11, 238, 40, - 245, 19, 253, 255, 119, 159, 216, 103, 157, 249, 169, 193, 0, 0, 0, + 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 93, 141, 11, 10, 0, 32, 8, 67, 43, 181, 15, 221, 255, + 186, 145, 210, 130, 149, 240, 112, 234, 212, 156, 78, 12, 39, 67, 71, 158, 142, 80, 29, 44, + 228, 66, 90, 168, 119, 189, 74, 115, 131, 174, 78, 115, 58, 124, 70, 254, 130, 59, 74, 253, + 68, 255, 255, 221, 39, 54, 29, 134, 27, 102, 193, 0, 0, 0, ]; assert_eq!(bytes, expected_serialization) @@ -134,24 +134,24 @@ fn schnorr_verify_circuit() { let bytes = Program::serialize_program(&program); let expected_serialization: Vec = vec![ - 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 85, 211, 103, 78, 2, 81, 24, 70, 225, 193, 6, 216, 123, - 47, 216, 123, 239, 136, 136, 136, 136, 136, 187, 96, 255, 75, 32, 112, 194, 55, 201, 129, - 100, 50, 79, 244, 7, 228, 222, 243, 102, 146, 254, 167, 221, 123, 50, 97, 222, 217, 120, - 243, 116, 226, 61, 36, 15, 247, 158, 92, 120, 68, 30, 149, 199, 228, 172, 156, 147, 243, - 242, 184, 60, 33, 79, 202, 83, 242, 180, 60, 35, 207, 202, 115, 242, 188, 188, 32, 47, 202, - 75, 242, 178, 188, 34, 175, 202, 107, 242, 186, 188, 33, 111, 202, 91, 242, 182, 188, 35, - 23, 228, 93, 121, 79, 222, 151, 15, 228, 67, 249, 72, 62, 150, 79, 228, 83, 249, 76, 62, - 151, 47, 228, 75, 249, 74, 190, 150, 111, 228, 91, 249, 78, 190, 151, 31, 228, 71, 249, 73, - 126, 150, 95, 228, 87, 185, 40, 191, 201, 37, 249, 93, 46, 203, 31, 114, 69, 254, 148, 171, - 97, 58, 77, 226, 111, 95, 250, 127, 77, 254, 150, 235, 242, 143, 220, 144, 127, 229, 166, - 252, 39, 183, 194, 255, 241, 253, 45, 253, 14, 182, 201, 38, 217, 34, 27, 100, 123, 233, - 230, 242, 241, 155, 217, 20, 91, 98, 67, 108, 135, 205, 176, 21, 54, 194, 54, 216, 4, 91, - 96, 3, 180, 79, 243, 180, 78, 227, 180, 77, 211, 180, 76, 195, 180, 75, 179, 133, 164, 223, - 40, 109, 210, 36, 45, 210, 32, 237, 209, 28, 173, 209, 24, 109, 209, 20, 45, 209, 16, 237, - 208, 12, 173, 208, 8, 109, 208, 4, 45, 208, 0, 119, 207, 157, 115, 215, 220, 113, 49, 238, - 180, 20, 119, 88, 142, 59, 171, 196, 29, 85, 227, 46, 106, 113, 246, 245, 56, 235, 70, 156, - 109, 51, 206, 50, 61, 179, 244, 220, 18, 157, 231, 192, 167, 11, 75, 28, 99, 152, 25, 5, 0, - 0, + 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 85, 211, 103, 78, 2, 81, 24, 70, 225, 193, 130, 96, 239, + 189, 96, 239, 189, 35, 34, 34, 34, 34, 238, 130, 253, 47, 129, 192, 9, 223, 36, 7, 146, + 201, 60, 209, 31, 144, 123, 207, 155, 73, 250, 159, 118, 239, 201, 132, 121, 103, 227, 205, + 211, 137, 247, 144, 60, 220, 123, 114, 225, 17, 121, 84, 206, 202, 99, 114, 78, 206, 203, + 227, 242, 132, 60, 41, 79, 201, 211, 242, 140, 60, 43, 207, 201, 243, 242, 130, 188, 40, + 47, 201, 203, 242, 138, 188, 42, 175, 201, 235, 242, 134, 188, 41, 111, 201, 219, 242, 142, + 92, 144, 119, 229, 61, 121, 95, 62, 144, 15, 229, 35, 249, 88, 62, 145, 79, 229, 51, 249, + 92, 190, 144, 47, 229, 43, 249, 90, 190, 145, 111, 229, 59, 249, 94, 126, 144, 31, 229, 39, + 249, 89, 126, 145, 95, 229, 162, 252, 38, 151, 228, 119, 185, 44, 127, 200, 21, 249, 83, + 174, 134, 233, 52, 137, 191, 125, 233, 255, 53, 249, 91, 174, 203, 63, 114, 67, 254, 149, + 155, 242, 159, 220, 10, 255, 199, 247, 183, 244, 59, 216, 38, 155, 100, 139, 108, 144, 237, + 165, 155, 203, 199, 111, 102, 83, 108, 137, 13, 177, 29, 54, 195, 86, 216, 8, 219, 96, 19, + 108, 129, 13, 208, 62, 205, 211, 58, 141, 211, 54, 77, 211, 50, 13, 211, 46, 205, 22, 146, + 126, 163, 180, 73, 147, 180, 72, 131, 180, 71, 115, 180, 70, 99, 180, 69, 83, 180, 68, 67, + 180, 67, 51, 180, 66, 35, 180, 65, 19, 180, 64, 3, 220, 61, 119, 206, 93, 115, 199, 197, + 184, 211, 82, 220, 97, 57, 238, 172, 18, 119, 84, 141, 187, 168, 197, 217, 215, 227, 172, + 27, 113, 182, 205, 56, 203, 244, 204, 210, 115, 75, 116, 158, 3, 159, 46, 43, 32, 188, 53, + 25, 5, 0, 0, ]; assert_eq!(bytes, expected_serialization) diff --git a/noir/noir-repo/acvm-repo/acvm/src/pwg/blackbox/hash.rs b/noir/noir-repo/acvm-repo/acvm/src/pwg/blackbox/hash.rs index 234ab6162ca..f177cd071d0 100644 --- a/noir/noir-repo/acvm-repo/acvm/src/pwg/blackbox/hash.rs +++ b/noir/noir-repo/acvm-repo/acvm/src/pwg/blackbox/hash.rs @@ -3,7 +3,7 @@ use acir::{ native_types::{Witness, WitnessMap}, AcirField, }; -use acvm_blackbox_solver::{sha256compression, BlackBoxFunctionSolver, BlackBoxResolutionError}; +use acvm_blackbox_solver::{sha256_compression, BlackBoxFunctionSolver, BlackBoxResolutionError}; use crate::pwg::{input_to_value, insert_value}; use crate::OpcodeResolutionError; @@ -94,7 +94,7 @@ pub(crate) fn solve_sha_256_permutation_opcode( let message = to_u32_array(initial_witness, inputs)?; let mut state = to_u32_array(initial_witness, hash_values)?; - sha256compression(&mut state, &message); + sha256_compression(&mut state, &message); for (output_witness, value) in outputs.iter().zip(state.into_iter()) { insert_value(output_witness, F::from(value as u128), initial_witness)?; diff --git a/noir/noir-repo/acvm-repo/acvm/src/pwg/blackbox/mod.rs b/noir/noir-repo/acvm-repo/acvm/src/pwg/blackbox/mod.rs index 8b8bfc5cfc5..1cca14cc680 100644 --- a/noir/noir-repo/acvm-repo/acvm/src/pwg/blackbox/mod.rs +++ b/noir/noir-repo/acvm-repo/acvm/src/pwg/blackbox/mod.rs @@ -3,7 +3,7 @@ use acir::{ native_types::{Witness, WitnessMap}, AcirField, }; -use acvm_blackbox_solver::{blake2s, blake3, keccak256, keccakf1600, sha256}; +use acvm_blackbox_solver::{blake2s, blake3, keccak256, keccakf1600}; use self::{ aes128::solve_aes128_encryption_opcode, bigint::AcvmBigIntSolver, @@ -84,9 +84,6 @@ pub(crate) fn solve( BlackBoxFuncCall::AND { lhs, rhs, output } => and(initial_witness, lhs, rhs, output), BlackBoxFuncCall::XOR { lhs, rhs, output } => xor(initial_witness, lhs, rhs, output), BlackBoxFuncCall::RANGE { input } => solve_range_opcode(initial_witness, input), - BlackBoxFuncCall::SHA256 { inputs, outputs } => { - solve_generic_256_hash_opcode(initial_witness, inputs, None, outputs, sha256) - } BlackBoxFuncCall::Blake2s { inputs, outputs } => { solve_generic_256_hash_opcode(initial_witness, inputs, None, outputs, blake2s) } diff --git a/noir/noir-repo/acvm-repo/acvm/tests/solver.rs b/noir/noir-repo/acvm-repo/acvm/tests/solver.rs index 766d374c43c..6ad52999820 100644 --- a/noir/noir-repo/acvm-repo/acvm/tests/solver.rs +++ b/noir/noir-repo/acvm-repo/acvm/tests/solver.rs @@ -1075,18 +1075,6 @@ fn solve_blackbox_func_call( Ok(witness_map[&Witness(3)]) } -// N inputs -// 32 outputs -fn sha256_op( - function_inputs_and_outputs: (Vec>, Vec), -) -> Result, OpcodeResolutionError> { - let (function_inputs, outputs) = function_inputs_and_outputs; - Ok(BlackBoxFuncCall::SHA256 { - inputs: function_inputs, - outputs: outputs.try_into().expect("SHA256 returns 32 outputs"), - }) -} - // N inputs // 32 outputs fn blake2s_op( @@ -1457,19 +1445,6 @@ fn poseidon2_permutation_zeroes() { assert_eq!(results, expected_results); } -#[test] -fn sha256_zeros() { - let results = solve_array_input_blackbox_call(vec![], 32, None, sha256_op); - let expected_results: Vec<_> = vec![ - 227, 176, 196, 66, 152, 252, 28, 20, 154, 251, 244, 200, 153, 111, 185, 36, 39, 174, 65, - 228, 100, 155, 147, 76, 164, 149, 153, 27, 120, 82, 184, 85, - ] - .into_iter() - .map(|x: u128| FieldElement::from(x)) - .collect(); - assert_eq!(results, Ok(expected_results)); -} - #[test] fn sha256_compression_zeros() { let results = solve_array_input_blackbox_call( @@ -1643,12 +1618,6 @@ proptest! { prop_assert_eq!(result, expected_result) } - #[test] - fn sha256_injective(inputs_distinct_inputs in any_distinct_inputs(None, 0, 32)) { - let (inputs, distinct_inputs) = inputs_distinct_inputs; - let (result, message) = prop_assert_injective(inputs, distinct_inputs, 32, None, sha256_op); - prop_assert!(result, "{}", message); - } #[test] fn sha256_compression_injective(inputs_distinct_inputs in any_distinct_inputs(None, 24, 24)) { diff --git a/noir/noir-repo/acvm-repo/acvm_js/package.json b/noir/noir-repo/acvm-repo/acvm_js/package.json index 54261a78dbc..95b8a46456f 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/package.json +++ b/noir/noir-repo/acvm-repo/acvm_js/package.json @@ -40,7 +40,7 @@ "@esm-bundle/chai": "^4.3.4-fix.0", "@web/dev-server-esbuild": "^0.3.6", "@web/test-runner": "^0.18.1", - "@web/test-runner-playwright": "^0.10.0", + "@web/test-runner-playwright": "^0.11.0", "chai": "^4.4.1", "eslint": "^8.57.0", "eslint-plugin-prettier": "^5.1.3", diff --git a/noir/noir-repo/acvm-repo/acvm_js/src/black_box_solvers.rs b/noir/noir-repo/acvm-repo/acvm_js/src/black_box_solvers.rs index 4cd85a5ed87..6046d52943c 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/src/black_box_solvers.rs +++ b/noir/noir-repo/acvm-repo/acvm_js/src/black_box_solvers.rs @@ -22,10 +22,13 @@ pub fn xor(lhs: JsString, rhs: JsString) -> JsString { field_element_to_js_string(&result) } -/// Calculates the SHA256 hash of the input bytes +/// Sha256 compression function #[wasm_bindgen] -pub fn sha256(inputs: &[u8]) -> Vec { - acvm::blackbox_solver::sha256(inputs).unwrap().into() +pub fn sha256_compression(inputs: &[u32], state: &[u32]) -> Vec { + let mut state: [u32; 8] = state.try_into().unwrap(); + let inputs: [u32; 16] = inputs.try_into().unwrap(); + acvm::blackbox_solver::sha256_compression(&mut state, &inputs); + state.to_vec() } /// Calculates the Blake2s256 hash of the input bytes diff --git a/noir/noir-repo/acvm-repo/acvm_js/src/lib.rs b/noir/noir-repo/acvm-repo/acvm_js/src/lib.rs index fdb8d5ffe08..8fe64afbba9 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/src/lib.rs +++ b/noir/noir-repo/acvm-repo/acvm_js/src/lib.rs @@ -17,7 +17,8 @@ mod logging; mod public_witness; pub use black_box_solvers::{ - and, blake2s256, ecdsa_secp256k1_verify, ecdsa_secp256r1_verify, keccak256, sha256, xor, + and, blake2s256, ecdsa_secp256k1_verify, ecdsa_secp256r1_verify, keccak256, sha256_compression, + xor, }; pub use build_info::build_info; pub use compression::{ diff --git a/noir/noir-repo/acvm-repo/acvm_js/test/browser/black_box_solvers.test.ts b/noir/noir-repo/acvm-repo/acvm_js/test/browser/black_box_solvers.test.ts index 695f6b89afc..9dc5be2c682 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/test/browser/black_box_solvers.test.ts +++ b/noir/noir-repo/acvm-repo/acvm_js/test/browser/black_box_solvers.test.ts @@ -5,7 +5,7 @@ import initACVM, { ecdsa_secp256k1_verify, ecdsa_secp256r1_verify, keccak256, - sha256, + sha256_compression, xor, } from '@noir-lang/acvm_js'; @@ -32,11 +32,11 @@ it('successfully calculates the bitwise XOR of two fields', async () => { }); it('successfully calculates the sha256 hash', async () => { - const { sha256_test_cases } = await import('../shared/black_box_solvers'); + const { sha256_compression_test_cases } = await import('../shared/black_box_solvers'); - for (const testCase of sha256_test_cases) { - const [preimage, expectedResult] = testCase; - const hash = sha256(preimage); + for (const testCase of sha256_compression_test_cases) { + const [message, state, expectedResult] = testCase; + const hash = sha256_compression(message, state); hash.forEach((value, index) => expect(value).to.be.eq(expectedResult.at(index))); } }); diff --git a/noir/noir-repo/acvm-repo/acvm_js/test/node/black_box_solvers.test.ts b/noir/noir-repo/acvm-repo/acvm_js/test/node/black_box_solvers.test.ts index cedadba2c1a..fc998ced5a5 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/test/node/black_box_solvers.test.ts +++ b/noir/noir-repo/acvm-repo/acvm_js/test/node/black_box_solvers.test.ts @@ -5,7 +5,7 @@ import { ecdsa_secp256k1_verify, ecdsa_secp256r1_verify, keccak256, - sha256, + sha256_compression, xor, } from '@noir-lang/acvm_js'; @@ -28,11 +28,11 @@ it('successfully calculates the bitwise XOR of two fields', async () => { }); it('successfully calculates the sha256 hash', async () => { - const { sha256_test_cases } = await import('../shared/black_box_solvers'); + const { sha256_compression_test_cases } = await import('../shared/black_box_solvers'); - for (const testCase of sha256_test_cases) { - const [preimage, expectedResult] = testCase; - const hash = sha256(preimage); + for (const testCase of sha256_compression_test_cases) { + const [message, state, expectedResult] = testCase; + const hash = sha256_compression(message, state); hash.forEach((value, index) => expect(value).to.be.eq(expectedResult.at(index))); } }); diff --git a/noir/noir-repo/acvm-repo/acvm_js/test/shared/black_box_solvers.ts b/noir/noir-repo/acvm-repo/acvm_js/test/shared/black_box_solvers.ts index 0ab3fc12b72..22783a028ea 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/test/shared/black_box_solvers.ts +++ b/noir/noir-repo/acvm-repo/acvm_js/test/shared/black_box_solvers.ts @@ -32,15 +32,11 @@ export const xor_test_cases: [[string, string], string][] = [ ], ]; -// https://www.di-mgt.com.au/sha_testvectors.html -export const sha256_test_cases: [Uint8Array, Uint8Array][] = [ +export const sha256_compression_test_cases: [Uint32Array, Uint32Array, Uint32Array][] = [ [ - // "abc" - Uint8Array.from([0x61, 0x62, 0x63]), - Uint8Array.from([ - 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, - 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad, - ]), + Uint32Array.from([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]), + Uint32Array.from([1, 2, 3, 4, 5, 6, 7, 8]), + Uint32Array.from([1862536192, 526086805, 2067405084, 593147560, 726610467, 813867028, 4091010797, 3974542186]), ], ]; diff --git a/noir/noir-repo/acvm-repo/acvm_js/test/shared/multi_scalar_mul.ts b/noir/noir-repo/acvm-repo/acvm_js/test/shared/multi_scalar_mul.ts index ffb9952b136..f23847a75fc 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/test/shared/multi_scalar_mul.ts +++ b/noir/noir-repo/acvm-repo/acvm_js/test/shared/multi_scalar_mul.ts @@ -1,8 +1,8 @@ // See `multi_scalar_mul_circuit` integration test in `acir/tests/test_program_serialization.rs`. export const bytecode = Uint8Array.from([ - 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 93, 141, 11, 10, 0, 32, 8, 67, 43, 181, 15, 116, 255, 227, 70, 74, 11, 86, 194, - 195, 169, 83, 115, 58, 49, 156, 12, 29, 121, 58, 66, 117, 176, 144, 11, 105, 161, 222, 245, 42, 205, 13, 186, 58, 205, - 233, 240, 25, 249, 11, 238, 40, 245, 19, 253, 255, 119, 159, 216, 103, 157, 249, 169, 193, 0, 0, 0, + 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 93, 141, 11, 10, 0, 32, 8, 67, 43, 181, 15, 221, 255, 186, 145, 210, 130, 149, 240, + 112, 234, 212, 156, 78, 12, 39, 67, 71, 158, 142, 80, 29, 44, 228, 66, 90, 168, 119, 189, 74, 115, 131, 174, 78, 115, + 58, 124, 70, 254, 130, 59, 74, 253, 68, 255, 255, 221, 39, 54, 29, 134, 27, 102, 193, 0, 0, 0, ]); export const initialWitnessMap = new Map([ [1, '0x0000000000000000000000000000000000000000000000000000000000000001'], diff --git a/noir/noir-repo/acvm-repo/acvm_js/test/shared/schnorr_verify.ts b/noir/noir-repo/acvm-repo/acvm_js/test/shared/schnorr_verify.ts index c071c86f61f..830ca1026d6 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/test/shared/schnorr_verify.ts +++ b/noir/noir-repo/acvm-repo/acvm_js/test/shared/schnorr_verify.ts @@ -1,19 +1,19 @@ // See `schnorr_verify_circuit` integration test in `acir/tests/test_program_serialization.rs`. export const bytecode = Uint8Array.from([ - 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 85, 211, 103, 78, 2, 81, 24, 70, 225, 193, 6, 216, 123, 47, 216, 123, 239, 136, - 136, 136, 136, 136, 187, 96, 255, 75, 32, 112, 194, 55, 201, 129, 100, 50, 79, 244, 7, 228, 222, 243, 102, 146, 254, - 167, 221, 123, 50, 97, 222, 217, 120, 243, 116, 226, 61, 36, 15, 247, 158, 92, 120, 68, 30, 149, 199, 228, 172, 156, - 147, 243, 242, 184, 60, 33, 79, 202, 83, 242, 180, 60, 35, 207, 202, 115, 242, 188, 188, 32, 47, 202, 75, 242, 178, - 188, 34, 175, 202, 107, 242, 186, 188, 33, 111, 202, 91, 242, 182, 188, 35, 23, 228, 93, 121, 79, 222, 151, 15, 228, - 67, 249, 72, 62, 150, 79, 228, 83, 249, 76, 62, 151, 47, 228, 75, 249, 74, 190, 150, 111, 228, 91, 249, 78, 190, 151, - 31, 228, 71, 249, 73, 126, 150, 95, 228, 87, 185, 40, 191, 201, 37, 249, 93, 46, 203, 31, 114, 69, 254, 148, 171, 97, - 58, 77, 226, 111, 95, 250, 127, 77, 254, 150, 235, 242, 143, 220, 144, 127, 229, 166, 252, 39, 183, 194, 255, 241, - 253, 45, 253, 14, 182, 201, 38, 217, 34, 27, 100, 123, 233, 230, 242, 241, 155, 217, 20, 91, 98, 67, 108, 135, 205, - 176, 21, 54, 194, 54, 216, 4, 91, 96, 3, 180, 79, 243, 180, 78, 227, 180, 77, 211, 180, 76, 195, 180, 75, 179, 133, - 164, 223, 40, 109, 210, 36, 45, 210, 32, 237, 209, 28, 173, 209, 24, 109, 209, 20, 45, 209, 16, 237, 208, 12, 173, - 208, 8, 109, 208, 4, 45, 208, 0, 119, 207, 157, 115, 215, 220, 113, 49, 238, 180, 20, 119, 88, 142, 59, 171, 196, 29, - 85, 227, 46, 106, 113, 246, 245, 56, 235, 70, 156, 109, 51, 206, 50, 61, 179, 244, 220, 18, 157, 231, 192, 167, 11, - 75, 28, 99, 152, 25, 5, 0, 0, + 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 85, 211, 103, 78, 2, 81, 24, 70, 225, 193, 130, 96, 239, 189, 96, 239, 189, 35, 34, + 34, 34, 34, 238, 130, 253, 47, 129, 192, 9, 223, 36, 7, 146, 201, 60, 209, 31, 144, 123, 207, 155, 73, 250, 159, 118, + 239, 201, 132, 121, 103, 227, 205, 211, 137, 247, 144, 60, 220, 123, 114, 225, 17, 121, 84, 206, 202, 99, 114, 78, + 206, 203, 227, 242, 132, 60, 41, 79, 201, 211, 242, 140, 60, 43, 207, 201, 243, 242, 130, 188, 40, 47, 201, 203, 242, + 138, 188, 42, 175, 201, 235, 242, 134, 188, 41, 111, 201, 219, 242, 142, 92, 144, 119, 229, 61, 121, 95, 62, 144, 15, + 229, 35, 249, 88, 62, 145, 79, 229, 51, 249, 92, 190, 144, 47, 229, 43, 249, 90, 190, 145, 111, 229, 59, 249, 94, 126, + 144, 31, 229, 39, 249, 89, 126, 145, 95, 229, 162, 252, 38, 151, 228, 119, 185, 44, 127, 200, 21, 249, 83, 174, 134, + 233, 52, 137, 191, 125, 233, 255, 53, 249, 91, 174, 203, 63, 114, 67, 254, 149, 155, 242, 159, 220, 10, 255, 199, 247, + 183, 244, 59, 216, 38, 155, 100, 139, 108, 144, 237, 165, 155, 203, 199, 111, 102, 83, 108, 137, 13, 177, 29, 54, 195, + 86, 216, 8, 219, 96, 19, 108, 129, 13, 208, 62, 205, 211, 58, 141, 211, 54, 77, 211, 50, 13, 211, 46, 205, 22, 146, + 126, 163, 180, 73, 147, 180, 72, 131, 180, 71, 115, 180, 70, 99, 180, 69, 83, 180, 68, 67, 180, 67, 51, 180, 66, 35, + 180, 65, 19, 180, 64, 3, 220, 61, 119, 206, 93, 115, 199, 197, 184, 211, 82, 220, 97, 57, 238, 172, 18, 119, 84, 141, + 187, 168, 197, 217, 215, 227, 172, 27, 113, 182, 205, 56, 203, 244, 204, 210, 115, 75, 116, 158, 3, 159, 46, 43, 32, + 188, 53, 25, 5, 0, 0, ]); export const initialWitnessMap = new Map([ diff --git a/noir/noir-repo/acvm-repo/blackbox_solver/src/hash.rs b/noir/noir-repo/acvm-repo/blackbox_solver/src/hash.rs index ac56029b436..af503117466 100644 --- a/noir/noir-repo/acvm-repo/blackbox_solver/src/hash.rs +++ b/noir/noir-repo/acvm-repo/blackbox_solver/src/hash.rs @@ -1,7 +1,6 @@ use acir::BlackBoxFunc; use blake2::digest::generic_array::GenericArray; use blake2::{Blake2s256, Digest}; -use sha2::Sha256; use sha3::Keccak256; use crate::BlackBoxResolutionError; @@ -14,11 +13,6 @@ fn generic_hash_256(message: &[u8]) -> Result<[u8; 32], String> { Ok(output_bytes) } -pub fn sha256(inputs: &[u8]) -> Result<[u8; 32], BlackBoxResolutionError> { - generic_hash_256::(inputs) - .map_err(|err| BlackBoxResolutionError::Failed(BlackBoxFunc::SHA256, err)) -} - pub fn blake2s(inputs: &[u8]) -> Result<[u8; 32], BlackBoxResolutionError> { generic_hash_256::(inputs) .map_err(|err| BlackBoxResolutionError::Failed(BlackBoxFunc::Blake2s, err)) @@ -33,7 +27,7 @@ pub fn keccak256(inputs: &[u8]) -> Result<[u8; 32], BlackBoxResolutionError> { .map_err(|err| BlackBoxResolutionError::Failed(BlackBoxFunc::Keccak256, err)) } -pub fn sha256compression(state: &mut [u32; 8], msg_blocks: &[u32; 16]) { +pub fn sha256_compression(state: &mut [u32; 8], msg_blocks: &[u32; 16]) { let mut blocks = [0_u8; 64]; for (i, block) in msg_blocks.iter().enumerate() { let bytes = block.to_be_bytes(); diff --git a/noir/noir-repo/acvm-repo/blackbox_solver/src/lib.rs b/noir/noir-repo/acvm-repo/blackbox_solver/src/lib.rs index c39deb64138..87ca539f435 100644 --- a/noir/noir-repo/acvm-repo/blackbox_solver/src/lib.rs +++ b/noir/noir-repo/acvm-repo/blackbox_solver/src/lib.rs @@ -21,7 +21,7 @@ pub use aes128::aes128_encrypt; pub use bigint::BigIntSolver; pub use curve_specific_solver::{BlackBoxFunctionSolver, StubbedBlackBoxSolver}; pub use ecdsa::{ecdsa_secp256k1_verify, ecdsa_secp256r1_verify}; -pub use hash::{blake2s, blake3, keccak256, keccakf1600, sha256, sha256compression}; +pub use hash::{blake2s, blake3, keccak256, keccakf1600, sha256_compression}; pub use logic::{bit_and, bit_xor}; #[derive(Clone, PartialEq, Eq, Debug, Error)] diff --git a/noir/noir-repo/acvm-repo/bn254_blackbox_solver/src/lib.rs b/noir/noir-repo/acvm-repo/bn254_blackbox_solver/src/lib.rs index 43ee6a9ddd2..952c4498d84 100644 --- a/noir/noir-repo/acvm-repo/bn254_blackbox_solver/src/lib.rs +++ b/noir/noir-repo/acvm-repo/bn254_blackbox_solver/src/lib.rs @@ -13,7 +13,10 @@ mod schnorr; use ark_ec::AffineRepr; pub use embedded_curve_ops::{embedded_curve_add, multi_scalar_mul}; pub use generator::generators::derive_generators; -pub use poseidon2::{field_from_hex, poseidon2_permutation, Poseidon2Config, POSEIDON2_CONFIG}; +pub use poseidon2::{ + field_from_hex, poseidon2_permutation, poseidon_hash, Poseidon2Config, Poseidon2Sponge, + POSEIDON2_CONFIG, +}; // Temporary hack, this ensure that we always use a bn254 field here // without polluting the feature flags of the `acir_field` crate. diff --git a/noir/noir-repo/acvm-repo/bn254_blackbox_solver/src/poseidon2.rs b/noir/noir-repo/acvm-repo/bn254_blackbox_solver/src/poseidon2.rs index dd3e8b725c2..64823e37029 100644 --- a/noir/noir-repo/acvm-repo/bn254_blackbox_solver/src/poseidon2.rs +++ b/noir/noir-repo/acvm-repo/bn254_blackbox_solver/src/poseidon2.rs @@ -543,6 +543,75 @@ impl<'a> Poseidon2<'a> { } } +/// Performs a poseidon hash with a sponge construction equivalent to the one in poseidon2.nr +pub fn poseidon_hash(inputs: &[FieldElement]) -> Result { + let two_pow_64 = 18446744073709551616_u128.into(); + let iv = FieldElement::from(inputs.len()) * two_pow_64; + let mut sponge = Poseidon2Sponge::new(iv, 3); + for input in inputs.iter() { + sponge.absorb(*input)?; + } + sponge.squeeze() +} + +pub struct Poseidon2Sponge<'a> { + rate: usize, + poseidon: Poseidon2<'a>, + squeezed: bool, + cache: Vec, + state: Vec, +} + +impl<'a> Poseidon2Sponge<'a> { + pub fn new(iv: FieldElement, rate: usize) -> Poseidon2Sponge<'a> { + let mut result = Poseidon2Sponge { + cache: Vec::with_capacity(rate), + state: vec![FieldElement::zero(); rate + 1], + squeezed: false, + rate, + poseidon: Poseidon2::new(), + }; + result.state[rate] = iv; + result + } + + fn perform_duplex(&mut self) -> Result<(), BlackBoxResolutionError> { + // zero-pad the cache + for _ in self.cache.len()..self.rate { + self.cache.push(FieldElement::zero()); + } + // add the cache into sponge state + for i in 0..self.rate { + self.state[i] += self.cache[i]; + } + self.state = self.poseidon.permutation(&self.state, 4)?; + Ok(()) + } + + pub fn absorb(&mut self, input: FieldElement) -> Result<(), BlackBoxResolutionError> { + assert!(!self.squeezed); + if self.cache.len() == self.rate { + // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache + self.perform_duplex()?; + self.cache = vec![input]; + } else { + // If we're absorbing, and the cache is not full, add the input into the cache + self.cache.push(input); + } + Ok(()) + } + + pub fn squeeze(&mut self) -> Result { + assert!(!self.squeezed); + // If we're in absorb mode, apply sponge permutation to compress the cache. + self.perform_duplex()?; + self.squeezed = true; + + // Pop one item off the top of the permutation and return it. + Ok(self.state[0]) + } +} + #[cfg(test)] mod test { use acir::AcirField; @@ -562,4 +631,19 @@ mod test { ]; assert_eq!(result, expected_result); } + + #[test] + fn hash_smoke_test() { + let fields = [ + FieldElement::from(1u128), + FieldElement::from(2u128), + FieldElement::from(3u128), + FieldElement::from(4u128), + ]; + let result = super::poseidon_hash(&fields).expect("should hash successfully"); + assert_eq!( + result, + field_from_hex("130bf204a32cac1f0ace56c78b731aa3809f06df2731ebcf6b3464a15788b1b9"), + ); + } } diff --git a/noir/noir-repo/acvm-repo/brillig/src/black_box.rs b/noir/noir-repo/acvm-repo/brillig/src/black_box.rs index c3240c6ff1e..534ef7d318e 100644 --- a/noir/noir-repo/acvm-repo/brillig/src/black_box.rs +++ b/noir/noir-repo/acvm-repo/brillig/src/black_box.rs @@ -12,11 +12,6 @@ pub enum BlackBoxOp { key: HeapArray, outputs: HeapVector, }, - /// Calculates the SHA256 hash of the inputs. - Sha256 { - message: HeapVector, - output: HeapArray, - }, /// Calculates the Blake2s hash of the inputs. Blake2s { message: HeapVector, @@ -130,7 +125,7 @@ pub enum BlackBoxOp { }, ToRadix { input: MemoryAddress, - radix: u32, + radix: MemoryAddress, output: HeapArray, output_bits: bool, }, diff --git a/noir/noir-repo/acvm-repo/brillig_vm/src/black_box.rs b/noir/noir-repo/acvm-repo/brillig_vm/src/black_box.rs index 3f1a44b921b..56f715c13a9 100644 --- a/noir/noir-repo/acvm-repo/brillig_vm/src/black_box.rs +++ b/noir/noir-repo/acvm-repo/brillig_vm/src/black_box.rs @@ -3,7 +3,7 @@ use acir::{AcirField, BlackBoxFunc}; use acvm_blackbox_solver::BigIntSolver; use acvm_blackbox_solver::{ aes128_encrypt, blake2s, blake3, ecdsa_secp256k1_verify, ecdsa_secp256r1_verify, keccak256, - keccakf1600, sha256, sha256compression, BlackBoxFunctionSolver, BlackBoxResolutionError, + keccakf1600, sha256_compression, BlackBoxFunctionSolver, BlackBoxResolutionError, }; use num_bigint::BigUint; use num_traits::Zero; @@ -65,12 +65,6 @@ pub(crate) fn evaluate_black_box Ok(()) } - BlackBoxOp::Sha256 { message, output } => { - let message = to_u8_vec(read_heap_vector(memory, message)); - let bytes = sha256(message.as_slice())?; - memory.write_slice(memory.read_ref(output.pointer), &to_value_vec(&bytes)); - Ok(()) - } BlackBoxOp::Blake2s { message, output } => { let message = to_u8_vec(read_heap_vector(memory, message)); let bytes = blake2s(message.as_slice())?; @@ -361,7 +355,7 @@ pub(crate) fn evaluate_black_box state[i] = value.try_into().unwrap(); } - sha256compression(&mut state, &message); + sha256_compression(&mut state, &message); let state = state.map(|x| x.into()); memory.write_slice(memory.read_ref(output.pointer), &state); @@ -369,9 +363,13 @@ pub(crate) fn evaluate_black_box } BlackBoxOp::ToRadix { input, radix, output, output_bits } => { let input: F = *memory.read(*input).extract_field().expect("ToRadix input not a field"); + let radix = memory + .read(*radix) + .expect_integer_with_bit_size(IntegerBitSize::U32) + .expect("ToRadix opcode's radix bit size does not match expected bit size 32"); let mut input = BigUint::from_bytes_be(&input.to_be_bytes()); - let radix = BigUint::from(*radix); + let radix = BigUint::from_bytes_be(&radix.to_be_bytes()); let mut limbs: Vec> = Vec::with_capacity(output.size); @@ -447,7 +445,6 @@ impl BrilligBigintSolver { fn black_box_function_from_op(op: &BlackBoxOp) -> BlackBoxFunc { match op { BlackBoxOp::AES128Encrypt { .. } => BlackBoxFunc::AES128Encrypt, - BlackBoxOp::Sha256 { .. } => BlackBoxFunc::SHA256, BlackBoxOp::Blake2s { .. } => BlackBoxFunc::Blake2s, BlackBoxOp::Blake3 { .. } => BlackBoxFunc::Blake3, BlackBoxOp::Keccak256 { .. } => BlackBoxFunc::Keccak256, @@ -470,54 +467,3 @@ fn black_box_function_from_op(op: &BlackBoxOp) -> BlackBoxFunc { BlackBoxOp::PedersenHash { .. } => BlackBoxFunc::PedersenHash, } } - -#[cfg(test)] -mod test { - use acir::{ - brillig::{BlackBoxOp, MemoryAddress}, - FieldElement, - }; - use acvm_blackbox_solver::StubbedBlackBoxSolver; - - use crate::{ - black_box::{evaluate_black_box, to_u8_vec, to_value_vec, BrilligBigintSolver}, - HeapArray, HeapVector, Memory, - }; - - #[test] - fn sha256() { - let message: Vec = b"hello world".to_vec(); - let message_length = message.len(); - - let mut memory: Memory = Memory::default(); - let message_pointer = 3; - let result_pointer = message_pointer + message_length; - memory.write(MemoryAddress(0), message_pointer.into()); - memory.write(MemoryAddress(1), message_length.into()); - memory.write(MemoryAddress(2), result_pointer.into()); - memory.write_slice(MemoryAddress(message_pointer), to_value_vec(&message).as_slice()); - - let op = BlackBoxOp::Sha256 { - message: HeapVector { pointer: 0.into(), size: 1.into() }, - output: HeapArray { pointer: 2.into(), size: 32 }, - }; - - evaluate_black_box( - &op, - &StubbedBlackBoxSolver, - &mut memory, - &mut BrilligBigintSolver::default(), - ) - .unwrap(); - - let result = memory.read_slice(MemoryAddress(result_pointer), 32); - - assert_eq!( - to_u8_vec(result), - vec![ - 185, 77, 39, 185, 147, 77, 62, 8, 165, 46, 82, 215, 218, 125, 171, 250, 196, 132, - 239, 227, 122, 83, 128, 238, 144, 136, 247, 172, 226, 239, 205, 233 - ] - ); - } -} diff --git a/noir/noir-repo/compiler/integration-tests/package.json b/noir/noir-repo/compiler/integration-tests/package.json index a88e55b2321..64a638539d5 100644 --- a/noir/noir-repo/compiler/integration-tests/package.json +++ b/noir/noir-repo/compiler/integration-tests/package.json @@ -21,7 +21,7 @@ "@web/dev-server-esbuild": "^0.3.6", "@web/dev-server-import-maps": "^0.2.0", "@web/test-runner": "^0.18.1", - "@web/test-runner-playwright": "^0.10.0", + "@web/test-runner-playwright": "^0.11.0", "eslint": "^8.57.0", "eslint-plugin-prettier": "^5.1.3", "ethers": "^6.7.1", diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_gen/brillig_black_box.rs b/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_gen/brillig_black_box.rs index 2dde5d2ca49..889af07fbef 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_gen/brillig_black_box.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_gen/brillig_black_box.rs @@ -23,25 +23,6 @@ pub(crate) fn convert_black_box_call { - if let ([message], [BrilligVariable::BrilligArray(result_array)]) = - (function_arguments, function_results) - { - let message_vector = convert_array_or_vector(brillig_context, *message, bb_func); - let output_heap_array = - brillig_context.codegen_brillig_array_to_heap_array(*result_array); - - brillig_context.black_box_op_instruction(BlackBoxOp::Sha256 { - message: message_vector, - output: output_heap_array, - }); - - brillig_context.deallocate_heap_vector(message_vector); - brillig_context.deallocate_heap_array(output_heap_array); - } else { - unreachable!("ICE: SHA256 expects one array argument and one array result") - } - } BlackBoxFunc::Blake2s => { if let ([message], [BrilligVariable::BrilligArray(result_array)]) = (function_arguments, function_results) diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/codegen_intrinsic.rs b/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/codegen_intrinsic.rs index d92412677ca..c9c31267d7b 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/codegen_intrinsic.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/codegen_intrinsic.rs @@ -78,9 +78,11 @@ impl BrilligContext< let heap_array = self.codegen_brillig_array_to_heap_array(target_array); + let radix_var = self.make_constant_instruction(F::from(radix as u128), 32); + self.black_box_op_instruction(BlackBoxOp::ToRadix { input: source_field.address, - radix, + radix: radix_var.address, output: heap_array, output_bits, }); @@ -91,5 +93,6 @@ impl BrilligContext< self.deallocate_single_addr(items_len); } self.deallocate_register(heap_array.pointer); + self.deallocate_register(radix_var.address); } } diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/codegen_memory.rs b/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/codegen_memory.rs index ea8969eddf3..0199d9537a6 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/codegen_memory.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/codegen_memory.rs @@ -9,7 +9,7 @@ use super::{ brillig_variable::{BrilligArray, BrilligVariable, BrilligVector, SingleAddrVariable}, debug_show::DebugToString, registers::RegisterAllocator, - BrilligContext, BRILLIG_MEMORY_ADDRESSING_BIT_SIZE, + BrilligContext, ReservedRegisters, BRILLIG_MEMORY_ADDRESSING_BIT_SIZE, }; impl BrilligContext { @@ -20,9 +20,12 @@ impl BrilligContext< pointer_register: MemoryAddress, size: usize, ) { - let size_register = self.make_usize_constant_instruction(size.into()); - self.codegen_allocate_mem(pointer_register, size_register.address); - self.deallocate_single_addr(size_register); + self.load_free_memory_pointer_instruction(pointer_register); + self.codegen_usize_op_in_place( + ReservedRegisters::free_memory_pointer(), + BrilligBinaryOp::Add, + size, + ); } /// Allocates an array of size contained in size_register and stores the diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/debug_show.rs b/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/debug_show.rs index 7c2fb541006..08e6c18182b 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/debug_show.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/debug_show.rs @@ -285,9 +285,6 @@ impl DebugShow { outputs ); } - BlackBoxOp::Sha256 { message, output } => { - debug_println!(self.enable_debug_trace, " SHA256 {} -> {}", message, output); - } BlackBoxOp::Keccak256 { message, output } => { debug_println!(self.enable_debug_trace, " KECCAK256 {} -> {}", message, output); } diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/acir_gen/acir_ir/generated_acir.rs b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/acir_gen/acir_ir/generated_acir.rs index 0cad7b9c978..21d4dfb60b8 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/acir_gen/acir_ir/generated_acir.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/acir_gen/acir_ir/generated_acir.rs @@ -204,10 +204,6 @@ impl GeneratedAcir { BlackBoxFuncCall::XOR { lhs: inputs[0][0], rhs: inputs[1][0], output: outputs[0] } } BlackBoxFunc::RANGE => BlackBoxFuncCall::RANGE { input: inputs[0][0] }, - BlackBoxFunc::SHA256 => BlackBoxFuncCall::SHA256 { - inputs: inputs[0].clone(), - outputs: outputs.try_into().expect("Compiler should generate correct size outputs"), - }, BlackBoxFunc::Blake2s => BlackBoxFuncCall::Blake2s { inputs: inputs[0].clone(), outputs: outputs.try_into().expect("Compiler should generate correct size outputs"), @@ -649,7 +645,6 @@ fn black_box_func_expected_input_size(name: BlackBoxFunc) -> Option { // variable number of inputs. BlackBoxFunc::AES128Encrypt | BlackBoxFunc::Keccak256 - | BlackBoxFunc::SHA256 | BlackBoxFunc::Blake2s | BlackBoxFunc::Blake3 | BlackBoxFunc::PedersenCommitment @@ -701,10 +696,7 @@ fn black_box_expected_output_size(name: BlackBoxFunc) -> Option { BlackBoxFunc::AND | BlackBoxFunc::XOR => Some(1), // 32 byte hash algorithms - BlackBoxFunc::Keccak256 - | BlackBoxFunc::SHA256 - | BlackBoxFunc::Blake2s - | BlackBoxFunc::Blake3 => Some(32), + BlackBoxFunc::Keccak256 | BlackBoxFunc::Blake2s | BlackBoxFunc::Blake3 => Some(32), BlackBoxFunc::Keccakf1600 => Some(25), // The permutation returns a fixed number of outputs, equals to the inputs length which depends on the proving system implementation. diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/instruction/call.rs b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/instruction/call.rs index d3e5acb467b..3068f2b5c37 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/instruction/call.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/instruction/call.rs @@ -488,7 +488,6 @@ fn simplify_black_box_func( } }; match bb_func { - BlackBoxFunc::SHA256 => simplify_hash(dfg, arguments, acvm::blackbox_solver::sha256), BlackBoxFunc::Blake2s => simplify_hash(dfg, arguments, acvm::blackbox_solver::blake2s), BlackBoxFunc::Blake3 => simplify_hash(dfg, arguments, acvm::blackbox_solver::blake3), BlackBoxFunc::Keccakf1600 => { diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/flatten_cfg.rs b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/flatten_cfg.rs index 467514114e4..cb455507985 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/flatten_cfg.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/flatten_cfg.rs @@ -925,7 +925,7 @@ mod test { ir::{ dfg::DataFlowGraph, function::Function, - instruction::{BinaryOp, Instruction, Intrinsic, TerminatorInstruction}, + instruction::{BinaryOp, Instruction, TerminatorInstruction}, map::Id, types::Type, value::{Value, ValueId}, @@ -1487,8 +1487,7 @@ mod test { // Tests that it does not simplify a true constraint an always-false constraint // acir(inline) fn main f1 { // b0(v0: [u8; 2]): - // v4 = call sha256(v0, u8 2) - // v5 = array_get v4, index u8 0 + // v5 = array_get v0, index u8 0 // v6 = cast v5 as u32 // v8 = truncate v6 to 1 bits, max_bit_size: 32 // v9 = cast v8 as u1 @@ -1520,13 +1519,8 @@ mod test { let array = builder.add_parameter(array_type); let zero = builder.numeric_constant(0_u128, Type::unsigned(8)); - let two = builder.numeric_constant(2_u128, Type::unsigned(8)); - let keccak = - builder.import_intrinsic_id(Intrinsic::BlackBox(acvm::acir::BlackBoxFunc::SHA256)); - let v4 = - builder.insert_call(keccak, vec![array, two], vec![Type::Array(element_type, 32)])[0]; - let v5 = builder.insert_array_get(v4, zero, Type::unsigned(8)); + let v5 = builder.insert_array_get(array, zero, Type::unsigned(8)); let v6 = builder.insert_cast(v5, Type::unsigned(32)); let i_two = builder.numeric_constant(2_u128, Type::unsigned(32)); let v8 = builder.insert_binary(v6, BinaryOp::Mod, i_two); diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/mem2reg.rs b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/mem2reg.rs index d14f50891ea..68c04e3b4b4 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/mem2reg.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/mem2reg.rs @@ -615,7 +615,8 @@ impl<'f> PerFunctionContext<'f> { fn reduce_load_result_count(&mut self, value: ValueId) { if let Some(context) = self.load_results.get_mut(&value) { - context.uses = context.uses.saturating_sub(1); + // TODO this was saturating https://github.com/noir-lang/noir/issues/6124 + context.uses = context.uses.wrapping_sub(1); } } @@ -743,7 +744,8 @@ impl<'f> PerFunctionContext<'f> { if all_loads_removed && !store_alias_used { self.instructions_to_remove.insert(*store_instruction); if let Some((_, counter)) = remaining_last_stores.get_mut(store_address) { - *counter = counter.saturating_sub(1); + // TODO this was saturating https://github.com/noir-lang/noir/issues/6124 + *counter = counter.wrapping_sub(1); } } else if let Some((_, counter)) = remaining_last_stores.get_mut(store_address) { *counter += 1; diff --git a/noir/noir-repo/compiler/noirc_frontend/src/ast/type_alias.rs b/noir/noir-repo/compiler/noirc_frontend/src/ast/type_alias.rs index 3228765170e..b279d86f19e 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/ast/type_alias.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/ast/type_alias.rs @@ -1,4 +1,4 @@ -use super::{Ident, UnresolvedGenerics, UnresolvedType}; +use super::{Ident, ItemVisibility, UnresolvedGenerics, UnresolvedType}; use iter_extended::vecmap; use noirc_errors::Span; use std::fmt::Display; @@ -9,6 +9,7 @@ pub struct NoirTypeAlias { pub name: Ident, pub generics: UnresolvedGenerics, pub typ: UnresolvedType, + pub visibility: ItemVisibility, pub span: Span, } @@ -17,9 +18,10 @@ impl NoirTypeAlias { name: Ident, generics: UnresolvedGenerics, typ: UnresolvedType, + visibility: ItemVisibility, span: Span, ) -> NoirTypeAlias { - NoirTypeAlias { name, generics, typ, span } + NoirTypeAlias { name, generics, typ, visibility, span } } } diff --git a/noir/noir-repo/compiler/noirc_frontend/src/elaborator/mod.rs b/noir/noir-repo/compiler/noirc_frontend/src/elaborator/mod.rs index c36231bcf3b..9dd76885d61 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/elaborator/mod.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/elaborator/mod.rs @@ -1131,13 +1131,106 @@ impl<'context> Elaborator<'context> { self.file = alias.file_id; self.local_module = alias.module_id; + let name = &alias.type_alias_def.name; + let visibility = alias.type_alias_def.visibility; + let span = alias.type_alias_def.typ.span; + let generics = self.add_generics(&alias.type_alias_def.generics); self.current_item = Some(DependencyId::Alias(alias_id)); let typ = self.resolve_type(alias.type_alias_def.typ); + + if visibility != ItemVisibility::Private { + self.check_aliased_type_is_not_more_private(name, visibility, &typ, span); + } + self.interner.set_type_alias(alias_id, typ, generics); self.generics.clear(); } + fn check_aliased_type_is_not_more_private( + &mut self, + name: &Ident, + visibility: ItemVisibility, + typ: &Type, + span: Span, + ) { + match typ { + Type::Struct(struct_type, generics) => { + let struct_type = struct_type.borrow(); + let struct_module_id = struct_type.id.module_id(); + + // We only check this in types in the same crate. If it's in a different crate + // then it's either accessible (all good) or it's not, in which case a different + // error will happen somewhere else, but no need to error again here. + if struct_module_id.krate == self.crate_id { + // Go to the struct's parent module + let module_data = self.get_module(struct_module_id); + let parent_local_id = + module_data.parent.expect("Expected struct module parent to exist"); + let parent_module_id = + ModuleId { krate: struct_module_id.krate, local_id: parent_local_id }; + let parent_module_data = self.get_module(parent_module_id); + + // Find the struct in the parent module so we can know its visibility + let per_ns = parent_module_data.find_name(&struct_type.name); + if let Some((_, aliased_visibility, _)) = per_ns.types { + if aliased_visibility < visibility { + self.push_err(ResolverError::TypeIsMorePrivateThenItem { + typ: struct_type.name.to_string(), + item: name.to_string(), + span, + }); + } + } + } + + for generic in generics { + self.check_aliased_type_is_not_more_private(name, visibility, generic, span); + } + } + Type::Tuple(types) => { + for typ in types { + self.check_aliased_type_is_not_more_private(name, visibility, typ, span); + } + } + Type::Alias(alias_type, generics) => { + self.check_aliased_type_is_not_more_private( + name, + visibility, + &alias_type.borrow().get_type(generics), + span, + ); + } + Type::Function(args, return_type, env, _) => { + for arg in args { + self.check_aliased_type_is_not_more_private(name, visibility, arg, span); + } + self.check_aliased_type_is_not_more_private(name, visibility, return_type, span); + self.check_aliased_type_is_not_more_private(name, visibility, env, span); + } + Type::MutableReference(typ) | Type::Array(_, typ) | Type::Slice(typ) => { + self.check_aliased_type_is_not_more_private(name, visibility, typ, span); + } + Type::InfixExpr(left, _op, right) => { + self.check_aliased_type_is_not_more_private(name, visibility, left, span); + self.check_aliased_type_is_not_more_private(name, visibility, right, span); + } + Type::FieldElement + | Type::Integer(..) + | Type::Bool + | Type::String(..) + | Type::FmtString(..) + | Type::Unit + | Type::Quoted(..) + | Type::TypeVariable(..) + | Type::Forall(..) + | Type::TraitAsType(..) + | Type::Constant(..) + | Type::NamedGeneric(..) + | Type::Error => (), + } + } + fn collect_struct_definitions(&mut self, structs: &BTreeMap) { // This is necessary to avoid cloning the entire struct map // when adding checks after each struct field is resolved. diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/comptime/interpreter/builtin.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/comptime/interpreter/builtin.rs index 2e118eb4f0e..c21ca353e07 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/comptime/interpreter/builtin.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/comptime/interpreter/builtin.rs @@ -794,7 +794,7 @@ fn to_le_radix( }; // Decompose the integer into its radix digits in little endian form. - let decomposed_integer = compute_to_radix(value, radix); + let decomposed_integer = compute_to_radix_le(value, radix); let decomposed_integer = vecmap(0..limb_count as usize, |i| match decomposed_integer.get(i) { Some(digit) => Value::U8(*digit), None => Value::U8(0), @@ -805,7 +805,7 @@ fn to_le_radix( )) } -fn compute_to_radix(field: FieldElement, radix: u32) -> Vec { +fn compute_to_radix_le(field: FieldElement, radix: u32) -> Vec { let bit_size = u32::BITS - (radix - 1).leading_zeros(); let radix_big = BigUint::from(radix); assert_eq!(BigUint::from(2u128).pow(bit_size), radix_big, "ICE: Radix must be a power of 2"); diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_collector/dc_mod.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_collector/dc_mod.rs index f50a0608fab..132b62f84b7 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_collector/dc_mod.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_collector/dc_mod.rs @@ -306,6 +306,7 @@ impl<'a> ModCollector<'a> { let doc_comments = type_alias.doc_comments; let type_alias = type_alias.item; let name = type_alias.name.clone(); + let visibility = type_alias.visibility; // And store the TypeId -> TypeAlias mapping somewhere it is reachable let unresolved = UnresolvedTypeAlias { @@ -327,8 +328,19 @@ impl<'a> ModCollector<'a> { context.def_interner.set_doc_comments(ReferenceId::Alias(type_alias_id), doc_comments); // Add the type alias to scope so its path can be looked up later - let result = self.def_collector.def_map.modules[self.module_id.0] - .declare_type_alias(name.clone(), type_alias_id); + let result = self.def_collector.def_map.modules[self.module_id.0].declare_type_alias( + name.clone(), + visibility, + type_alias_id, + ); + + let parent_module_id = ModuleId { krate, local_id: self.module_id }; + context.def_interner.usage_tracker.add_unused_item( + parent_module_id, + name.clone(), + UnusedItem::TypeAlias(type_alias_id), + visibility, + ); if let Err((first_def, second_def)) = result { let err = DefCollectorErrorKind::Duplicate { @@ -526,7 +538,11 @@ impl<'a> ModCollector<'a> { TraitItem::Type { name } => { if let Err((first_def, second_def)) = self.def_collector.def_map.modules [trait_id.0.local_id.0] - .declare_type_alias(name.clone(), TypeAliasId::dummy_id()) + .declare_type_alias( + name.clone(), + ItemVisibility::Public, + TypeAliasId::dummy_id(), + ) { let error = DefCollectorErrorKind::Duplicate { typ: DuplicateType::TraitAssociatedType, diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/module_data.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/module_data.rs index 645d8650c7e..5bbff85079e 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/module_data.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/module_data.rs @@ -112,9 +112,10 @@ impl ModuleData { pub fn declare_type_alias( &mut self, name: Ident, + visibility: ItemVisibility, id: TypeAliasId, ) -> Result<(), (Ident, Ident)> { - self.declare(name, ItemVisibility::Public, id.into(), None) + self.declare(name, visibility, id.into(), None) } pub fn declare_trait( diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/errors.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/errors.rs index 1e7f29527e2..cd3acbdc0f1 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/errors.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/errors.rs @@ -130,6 +130,8 @@ pub enum ResolverError { MutatingComptimeInNonComptimeContext { name: String, span: Span }, #[error("Failed to parse `{statement}` as an expression")] InvalidInternedStatementInExpr { statement: String, span: Span }, + #[error("Type `{typ}` is more private than item `{item}`")] + TypeIsMorePrivateThenItem { typ: String, item: String, span: Span }, } impl ResolverError { @@ -529,6 +531,13 @@ impl<'a> From<&'a ResolverError> for Diagnostic { *span, ) }, + ResolverError::TypeIsMorePrivateThenItem { typ, item, span } => { + Diagnostic::simple_warning( + format!("Type `{typ}` is more private than item `{item}`"), + String::new(), + *span, + ) + }, } } } diff --git a/noir/noir-repo/compiler/noirc_frontend/src/parser/parser.rs b/noir/noir-repo/compiler/noirc_frontend/src/parser/parser.rs index 0eb49ae975a..3f9a1d7a08b 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/parser/parser.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/parser/parser.rs @@ -290,14 +290,21 @@ fn contract( fn type_alias_definition() -> impl NoirParser { use self::Keyword::Type; - let p = ignore_then_commit(keyword(Type), ident()); - let p = then_commit(p, function::generics()); - let p = then_commit_ignore(p, just(Token::Assign)); - let p = then_commit(p, parse_type()); - - p.map_with_span(|((name, generics), typ), span| { - TopLevelStatementKind::TypeAlias(NoirTypeAlias { name, generics, typ, span }) - }) + item_visibility() + .then_ignore(keyword(Type)) + .then(ident()) + .then(function::generics()) + .then_ignore(just(Token::Assign)) + .then(parse_type()) + .map_with_span(|(((visibility, name), generics), typ), span| { + TopLevelStatementKind::TypeAlias(NoirTypeAlias { + name, + generics, + typ, + visibility, + span, + }) + }) } fn self_parameter() -> impl NoirParser { diff --git a/noir/noir-repo/compiler/noirc_frontend/src/tests.rs b/noir/noir-repo/compiler/noirc_frontend/src/tests.rs index 91e4115ff69..c8e94d2c3e0 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/tests.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/tests.rs @@ -132,41 +132,41 @@ fn check_trait_implemented_for_all_t() { trait Default { fn default() -> Self; } - + trait Eq { fn eq(self, other: Self) -> bool; } - + trait IsDefault { fn is_default(self) -> bool; } - + impl IsDefault for T where T: Default + Eq { fn is_default(self) -> bool { self.eq(T::default()) } } - + struct Foo { a: u64, } - + impl Eq for Foo { - fn eq(self, other: Foo) -> bool { self.a == other.a } + fn eq(self, other: Foo) -> bool { self.a == other.a } } - + impl Default for u64 { fn default() -> Self { 0 } } - + impl Default for Foo { fn default() -> Self { Foo { a: Default::default() } } } - + fn main(a: Foo) -> pub bool { a.is_default() }"; @@ -179,12 +179,12 @@ fn check_trait_implementation_duplicate_method() { trait Default { fn default(x: Field, y: Field) -> Field; } - + struct Foo { bar: Field, array: [Field; 2], } - + impl Default for Foo { // Duplicate trait methods should not compile fn default(x: Field, y: Field) -> Field { @@ -195,7 +195,7 @@ fn check_trait_implementation_duplicate_method() { x + 2 * y } } - + fn main() {}"; let errors = get_program_errors(src); @@ -226,16 +226,16 @@ fn check_trait_wrong_method_return_type() { trait Default { fn default() -> Self; } - + struct Foo { } - + impl Default for Foo { fn default() -> Field { 0 } } - + fn main() { } "; @@ -266,18 +266,18 @@ fn check_trait_wrong_method_return_type2() { trait Default { fn default(x: Field, y: Field) -> Self; } - + struct Foo { bar: Field, array: [Field; 2], } - + impl Default for Foo { fn default(x: Field, _y: Field) -> Field { x } } - + fn main() { }"; let errors = get_program_errors(src); @@ -306,22 +306,22 @@ fn check_trait_missing_implementation() { let src = " trait Default { fn default(x: Field, y: Field) -> Self; - + fn method2(x: Field) -> Field; - + } - + struct Foo { bar: Field, array: [Field; 2], } - + impl Default for Foo { fn default(x: Field, y: Field) -> Self { Self { bar: x, array: [x,y] } } } - + fn main() { } "; @@ -353,17 +353,17 @@ fn check_trait_not_in_scope() { bar: Field, array: [Field; 2], } - + // Default trait does not exist impl Default for Foo { fn default(x: Field, y: Field) -> Self { Self { bar: x, array: [x,y] } } } - + fn main() { } - + "; let errors = get_program_errors(src); assert!(!has_parser_error(&errors)); @@ -387,19 +387,19 @@ fn check_trait_wrong_method_name() { let src = " trait Default { } - + struct Foo { bar: Field, array: [Field; 2], } - + // wrong trait name method should not compile impl Default for Foo { fn does_not_exist(x: Field, y: Field) -> Self { Self { bar: x, array: [x,y] } } } - + fn main() { }"; let compilation_errors = get_program_errors(src); @@ -432,17 +432,17 @@ fn check_trait_wrong_parameter() { trait Default { fn default(x: Field) -> Self; } - + struct Foo { bar: u32, } - + impl Default for Foo { fn default(x: u32) -> Self { Foo {bar: x} } } - + fn main() { } "; @@ -475,18 +475,18 @@ fn check_trait_wrong_parameter2() { trait Default { fn default(x: Field, y: Field) -> Self; } - + struct Foo { bar: Field, array: [Field; 2], } - + impl Default for Foo { fn default(x: Field, y: Foo) -> Self { Self { bar: x, array: [x, y.bar] } } } - + fn main() { }"; @@ -519,7 +519,7 @@ fn check_trait_wrong_parameter_type() { pub trait Default { fn default(x: Field, y: NotAType) -> Field; } - + fn main(x: Field, y: Field) { assert(y == x); }"; @@ -550,18 +550,18 @@ fn check_trait_wrong_parameters_count() { trait Default { fn default(x: Field, y: Field) -> Self; } - + struct Foo { bar: Field, array: [Field; 2], } - + impl Default for Foo { fn default(x: Field) -> Self { Self { bar: x, array: [x, x] } } } - + fn main() { } "; @@ -630,16 +630,16 @@ fn check_impl_struct_not_trait() { struct Default { x: Field, - z: Field, + z: Field, } - + // Default is a struct not a trait impl Default for Foo { fn default(x: Field, y: Field) -> Self { Self { bar: x, array: [x,y] } } } - + fn main() {} "; let errors = get_program_errors(src); @@ -665,23 +665,23 @@ fn check_trait_duplicate_declaration() { trait Default { fn default(x: Field, y: Field) -> Self; } - + struct Foo { bar: Field, array: [Field; 2], } - + impl Default for Foo { fn default(x: Field,y: Field) -> Self { Self { bar: x, array: [x,y] } } } - - + + trait Default { fn default(x: Field) -> Self; } - + fn main() { }"; let errors = get_program_errors(src); @@ -713,7 +713,7 @@ fn check_trait_duplicate_implementation() { struct Foo { bar: Field, } - + impl Default for Foo { } impl Default for Foo { @@ -744,18 +744,18 @@ fn check_trait_duplicate_implementation_with_alias() { let src = " trait Default { } - + struct MyStruct { } - + type MyType = MyStruct; - + impl Default for MyStruct { } - + impl Default for MyType { } - + fn main() { } "; @@ -808,7 +808,7 @@ fn check_trait_as_type_as_fn_parameter() { } impl Eq for Foo { - fn eq(self, other: Foo) -> bool { self.a == other.a } + fn eq(self, other: Foo) -> bool { self.a == other.a } } fn test_eq(x: impl Eq) -> bool { @@ -837,11 +837,11 @@ fn check_trait_as_type_as_two_fn_parameters() { } impl Eq for Foo { - fn eq(self, other: Foo) -> bool { self.a == other.a } + fn eq(self, other: Foo) -> bool { self.a == other.a } } impl Test for u64 { - fn test(self) -> bool { self == self } + fn test(self) -> bool { self == self } } fn test_eq(x: impl Eq, y: impl Test) -> bool { @@ -1426,7 +1426,7 @@ fn specify_function_types_with_turbofish() { fn generic_func() -> (T, U) where T: Default, U: Default { (T::default(), U::default()) } - + fn main() { let _ = generic_func::(); } @@ -1453,13 +1453,13 @@ fn specify_method_types_with_turbofish() { struct Foo { inner: T } - + impl Foo { fn generic_method(_self: Self) -> U where U: Default { U::default() } } - + fn main() { let foo: Foo = Foo { inner: 1 }; let _ = foo.generic_method::(); @@ -1522,13 +1522,13 @@ fn incorrect_turbofish_count_method_call() { struct Foo { inner: T } - + impl Foo { fn generic_method(_self: Self) -> U where U: Default { U::default() } } - + fn main() { let foo: Foo = Foo { inner: 1 }; let _ = foo.generic_method::(); @@ -1604,7 +1604,7 @@ fn numeric_generic_binary_operation_type_mismatch() { let mut check: bool = true; check = N; check - } + } "#; let errors = get_program_errors(src); assert_eq!(errors.len(), 1); @@ -1766,7 +1766,7 @@ fn numeric_generic_used_in_nested_type_pass() { } pub struct InnerNumeric { inner: [u64; N], - } + } "#; assert_no_errors(src); } @@ -1783,13 +1783,13 @@ fn numeric_generic_used_in_trait() { c: Field, d: T, } - + impl Deserialize for MyType { fn deserialize(fields: [Field; N], other: T) -> Self { MyType { a: fields[0], b: fields[1], c: fields[2], d: other } } } - + trait Deserialize { fn deserialize(fields: [Field; N], other: T) -> Self; } @@ -1810,17 +1810,17 @@ fn numeric_generic_in_trait_impl_with_extra_impl_generics() { c: Field, d: T, } - + // Make sure that `T` is placed before `N` as we want to test that the order of the generics is correctly maintained. // `N` is used first in the trait impl generics (`Deserialize for MyType`). // We want to make sure that the compiler correctly accounts for that `N` has a numeric kind - // while `T` has a normal kind. + // while `T` has a normal kind. impl Deserialize for MyType where T: Default { fn deserialize(fields: [Field; N]) -> Self { MyType { a: fields[0], b: fields[1], c: fields[2], d: T::default() } } } - + trait Deserialize { fn deserialize(fields: [Field; N]) -> Self; } @@ -2027,7 +2027,7 @@ fn impl_stricter_than_trait_no_trait_method_constraints() { // is a `DefCollectorErrorKind::ImplIsStricterThanTrait` error. let src = r#" trait Serialize { - // We want to make sure we trigger the error when override a trait method + // We want to make sure we trigger the error when override a trait method // which itself has no trait constraints. fn serialize(self) -> [Field; N]; } @@ -2132,14 +2132,14 @@ fn impl_stricter_than_trait_different_object_generics() { } impl Bar for () { - fn bar_good() - where - OtherOption>: OtherTrait, + fn bar_good() + where + OtherOption>: OtherTrait, Option: MyTrait { } - fn bar_bad() - where - OtherOption>: OtherTrait, + fn bar_bad() + where + OtherOption>: OtherTrait, Option: MyTrait { } fn array_good() where [A; 8]: MyTrait { } @@ -2659,8 +2659,8 @@ fn incorrect_generic_count_on_struct_impl() { #[test] fn incorrect_generic_count_on_type_alias() { let src = r#" - struct Foo {} - type Bar = Foo; + pub struct Foo {} + pub type Bar = Foo; fn main() {} "#; diff --git a/noir/noir-repo/compiler/noirc_frontend/src/tests/unused_items.rs b/noir/noir-repo/compiler/noirc_frontend/src/tests/unused_items.rs index da0a40d93cf..13787dd6955 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/tests/unused_items.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/tests/unused_items.rs @@ -171,3 +171,77 @@ fn silences_unused_variable_warning() { "#; assert_no_errors(src); } + +#[test] +fn errors_on_unused_type_alias() { + let src = r#" + type Foo = Field; + type Bar = Field; + pub fn bar(_: Bar) {} + fn main() {} + "#; + + let errors = get_program_errors(src); + assert_eq!(errors.len(), 1); + + let CompilationError::ResolverError(ResolverError::UnusedItem { ident, item_type }) = + &errors[0].0 + else { + panic!("Expected an unused item error"); + }; + + assert_eq!(ident.to_string(), "Foo"); + assert_eq!(*item_type, "type alias"); +} + +#[test] +fn errors_if_type_alias_aliases_more_private_type() { + let src = r#" + struct Foo {} + pub type Bar = Foo; + pub fn no_unused_warnings(_b: Bar) { + let _ = Foo {}; + } + fn main() {} + "#; + + let errors = get_program_errors(src); + assert_eq!(errors.len(), 1); + + let CompilationError::ResolverError(ResolverError::TypeIsMorePrivateThenItem { + typ, item, .. + }) = &errors[0].0 + else { + panic!("Expected an unused item error"); + }; + + assert_eq!(typ, "Foo"); + assert_eq!(item, "Bar"); +} + +#[test] +fn errors_if_type_alias_aliases_more_private_type_in_generic() { + let src = r#" + pub struct Generic { value: T } + struct Foo {} + pub type Bar = Generic; + pub fn no_unused_warnings(_b: Bar) { + let _ = Foo {}; + let _ = Generic { value: 1 }; + } + fn main() {} + "#; + + let errors = get_program_errors(src); + assert_eq!(errors.len(), 1); + + let CompilationError::ResolverError(ResolverError::TypeIsMorePrivateThenItem { + typ, item, .. + }) = &errors[0].0 + else { + panic!("Expected an unused item error"); + }; + + assert_eq!(typ, "Foo"); + assert_eq!(item, "Bar"); +} diff --git a/noir/noir-repo/compiler/noirc_frontend/src/usage_tracker.rs b/noir/noir-repo/compiler/noirc_frontend/src/usage_tracker.rs index b6f41dc72f2..23c97370b46 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/usage_tracker.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/usage_tracker.rs @@ -4,7 +4,7 @@ use crate::{ ast::{Ident, ItemVisibility}, hir::def_map::ModuleId, macros_api::StructId, - node_interner::{FuncId, TraitId}, + node_interner::{FuncId, TraitId, TypeAliasId}, }; #[derive(Debug)] @@ -13,6 +13,7 @@ pub enum UnusedItem { Function(FuncId), Struct(StructId), Trait(TraitId), + TypeAlias(TypeAliasId), } impl UnusedItem { @@ -22,6 +23,7 @@ impl UnusedItem { UnusedItem::Function(_) => "function", UnusedItem::Struct(_) => "struct", UnusedItem::Trait(_) => "trait", + UnusedItem::TypeAlias(_) => "type alias", } } } diff --git a/noir/noir-repo/compiler/wasm/test/compiler/node/compile.test.ts b/noir/noir-repo/compiler/wasm/test/compiler/node/compile.test.ts index 811dc95ce16..4e40df920e0 100644 --- a/noir/noir-repo/compiler/wasm/test/compiler/node/compile.test.ts +++ b/noir/noir-repo/compiler/wasm/test/compiler/node/compile.test.ts @@ -10,30 +10,42 @@ import { shouldCompileContractIdentically, shouldCompileProgramIdentically } fro const basePath = resolve(join(__dirname, '../../')); describe('noir-compiler/node', () => { - shouldCompileProgramIdentically(async () => { - const { simpleScriptProjectPath, simpleScriptExpectedArtifact } = getPaths(basePath); - - const fm = createFileManager(simpleScriptProjectPath); - const nargoArtifact = JSON.parse((await readFile(simpleScriptExpectedArtifact)).toString()) as ProgramArtifact; - const noirWasmArtifact = await compile_program(fm); - return { nargoArtifact, noirWasmArtifact }; - }, expect); - - shouldCompileProgramIdentically(async () => { - const { depsScriptProjectPath, depsScriptExpectedArtifact } = getPaths(basePath); - - const fm = createFileManager(depsScriptProjectPath); - const nargoArtifact = JSON.parse((await readFile(depsScriptExpectedArtifact)).toString()) as ProgramArtifact; - const noirWasmArtifact = await compile_program(fm); - return { nargoArtifact, noirWasmArtifact }; - }, expect); - - shouldCompileContractIdentically(async () => { - const { contractProjectPath, contractExpectedArtifact } = getPaths(basePath); - - const fm = createFileManager(contractProjectPath); - const nargoArtifact = JSON.parse((await readFile(contractExpectedArtifact)).toString()) as ContractArtifact; - const noirWasmArtifact = await compile_contract(fm); - return { nargoArtifact, noirWasmArtifact }; - }, expect); + shouldCompileProgramIdentically( + async () => { + const { simpleScriptProjectPath, simpleScriptExpectedArtifact } = getPaths(basePath); + + const fm = createFileManager(simpleScriptProjectPath); + const nargoArtifact = JSON.parse((await readFile(simpleScriptExpectedArtifact)).toString()) as ProgramArtifact; + const noirWasmArtifact = await compile_program(fm); + return { nargoArtifact, noirWasmArtifact }; + }, + expect, + /*30 second timeout*/ 30000, + ); + + shouldCompileProgramIdentically( + async () => { + const { depsScriptProjectPath, depsScriptExpectedArtifact } = getPaths(basePath); + + const fm = createFileManager(depsScriptProjectPath); + const nargoArtifact = JSON.parse((await readFile(depsScriptExpectedArtifact)).toString()) as ProgramArtifact; + const noirWasmArtifact = await compile_program(fm); + return { nargoArtifact, noirWasmArtifact }; + }, + expect, + /*30 second timeout*/ 30000, + ); + + shouldCompileContractIdentically( + async () => { + const { contractProjectPath, contractExpectedArtifact } = getPaths(basePath); + + const fm = createFileManager(contractProjectPath); + const nargoArtifact = JSON.parse((await readFile(contractExpectedArtifact)).toString()) as ContractArtifact; + const noirWasmArtifact = await compile_contract(fm); + return { nargoArtifact, noirWasmArtifact }; + }, + expect, + /*30 second timeout*/ 30000, + ); }); diff --git a/noir/noir-repo/docs/docs/noir/concepts/data_types/index.md b/noir/noir-repo/docs/docs/noir/concepts/data_types/index.md index 3eadb2dc8a4..11f51e2b65a 100644 --- a/noir/noir-repo/docs/docs/noir/concepts/data_types/index.md +++ b/noir/noir-repo/docs/docs/noir/concepts/data_types/index.md @@ -105,6 +105,14 @@ type Bad2 = Bad1; // ^^^^^^^^^^^ 'Bad2' recursively depends on itself: Bad2 -> Bad1 -> Bad2 ``` +By default, like functions, type aliases are private to the module the exist in. You can use `pub` +to make the type alias public or `pub(crate)` to make it public to just its crate: + +```rust +// This type alias is now public +pub type Id = u8; +``` + ## Wildcard Type Noir can usually infer the type of the variable from the context, so specifying the type of a variable is only required when it cannot be inferred. However, specifying a complex type can be tedious, especially when it has multiple generic arguments. Often some of the generic types can be inferred from the context, and Noir only needs a hint to properly infer the other types. We can partially specify a variable's type by using `_` as a marker, indicating where we still want the compiler to infer the type. diff --git a/noir/noir-repo/noir_stdlib/src/hash/keccak.nr b/noir/noir-repo/noir_stdlib/src/hash/keccak.nr index bb55ce62210..37eb4dfe8a6 100644 --- a/noir/noir-repo/noir_stdlib/src/hash/keccak.nr +++ b/noir/noir-repo/noir_stdlib/src/hash/keccak.nr @@ -69,9 +69,9 @@ pub(crate) fn keccak256(input: [u8; N], message_size: u32) -> [u8; 3 state = keccakf1600(state); } } else { - // `real_max_blocks` is guaranteed to at least be `1` + // `real_max_blocks` is guaranteed to at least be `1` // We peel out the first block as to avoid a conditional inside of the loop. - // Otherwise, a dynamic predicate can cause a blowup in a constrained runtime. + // Otherwise, a dynamic predicate can cause a blowup in a constrained runtime. for j in 0..LIMBS_PER_BLOCK { state[j] = sliced_buffer.get(j); } diff --git a/noir/noir-repo/noir_stdlib/src/hash/mod.nr b/noir/noir-repo/noir_stdlib/src/hash/mod.nr index 9aa7d220593..93bce3c20e1 100644 --- a/noir/noir-repo/noir_stdlib/src/hash/mod.nr +++ b/noir/noir-repo/noir_stdlib/src/hash/mod.nr @@ -135,7 +135,7 @@ pub fn keccak256(input: [u8; N], message_size: u32) -> [u8; 32] #[foreign(poseidon2_permutation)] pub fn poseidon2_permutation(_input: [Field; N], _state_length: u32) -> [Field; N] {} -// Generic hashing support. +// Generic hashing support. // Partially ported and impacted by rust. // Hash trait shall be implemented per type. @@ -157,7 +157,7 @@ comptime fn derive_hash(s: StructDefinition) -> Quoted { // TODO: consider making the types generic here ([u8], [Field], etc.) pub trait Hasher { fn finish(self) -> Field; - + fn write(&mut self, input: Field); } @@ -169,7 +169,7 @@ pub trait BuildHasher where H: Hasher { pub struct BuildHasherDefault; impl BuildHasher for BuildHasherDefault -where +where H: Hasher + Default { fn build_hasher(_self: Self) -> H { H::default() @@ -177,7 +177,7 @@ where } impl Default for BuildHasherDefault -where +where H: Hasher + Default { fn default() -> Self { BuildHasherDefault {} diff --git a/noir/noir-repo/noir_stdlib/src/hash/sha256.nr b/noir/noir-repo/noir_stdlib/src/hash/sha256.nr index 6d169d027e0..e712019b5cc 100644 --- a/noir/noir-repo/noir_stdlib/src/hash/sha256.nr +++ b/noir/noir-repo/noir_stdlib/src/hash/sha256.nr @@ -4,11 +4,12 @@ use crate::runtime::is_unconstrained; // 32 bytes. // Deprecated in favour of `sha256_var` -#[foreign(sha256)] // docs:start:sha256 pub fn sha256(input: [u8; N]) -> [u8; 32] // docs:end:sha256 -{} +{ + crate::sha256::digest(input) +} #[foreign(sha256_compression)] pub fn sha256_compression(_input: [u32; 16], _state: [u32; 8]) -> [u32; 8] {} @@ -107,7 +108,7 @@ pub fn sha256_var(msg: [u8; N], message_size: u64) -> [u8; 32] { msg_byte_ptr = new_msg_byte_ptr; } - // If the block is filled, compress it. + // If the block is filled, compress it. // An un-filled block is handled after this loop. if msg_byte_ptr == BLOCK_SIZE { h = sha256_compression(msg_u8_to_u32(msg_block), h); @@ -116,8 +117,8 @@ pub fn sha256_var(msg: [u8; N], message_size: u64) -> [u8; 32] { let modulo = N % BLOCK_SIZE; // Handle setup of the final msg block. - // This case is only hit if the msg is less than the block size, - // or our message cannot be evenly split into blocks. + // This case is only hit if the msg is less than the block size, + // or our message cannot be evenly split into blocks. if modulo != 0 { let msg_start = BLOCK_SIZE * num_blocks; let (new_msg_block, new_msg_byte_ptr) = unsafe { @@ -148,7 +149,7 @@ pub fn sha256_var(msg: [u8; N], message_size: u64) -> [u8; 32] { let zero = msg_block[0] - msg_block[0]; // Pad the rest such that we have a [u32; 2] block at the end representing the length - // of the message, and a block of 1 0 ... 0 following the message (i.e. [1 << 7, 0, ..., 0]). + // of the message, and a block of 1 0 ... 0 following the message (i.e. [1 << 7, 0, ..., 0]). msg_block[msg_byte_ptr] = 1 << 7; let last_block = msg_block; msg_byte_ptr = msg_byte_ptr + 1; diff --git a/noir/noir-repo/noir_stdlib/src/meta/mod.nr b/noir/noir-repo/noir_stdlib/src/meta/mod.nr index 1d787ebcdc1..21d80e76bfc 100644 --- a/noir/noir-repo/noir_stdlib/src/meta/mod.nr +++ b/noir/noir-repo/noir_stdlib/src/meta/mod.nr @@ -36,7 +36,7 @@ use crate::hash::poseidon2::Poseidon2Hasher; // A derive function is one that given a struct definition can // create us a quoted trait impl from it. -type DeriveFunction = fn(StructDefinition) -> Quoted; +pub type DeriveFunction = fn(StructDefinition) -> Quoted; // We'll keep a global HANDLERS map to keep track of the derive handler for each trait comptime mut global HANDLERS: UHashMap> = UHashMap::default(); diff --git a/noir/noir-repo/scripts/install_bb.sh b/noir/noir-repo/scripts/install_bb.sh index d60c73c0976..c94a1b7dff0 100755 --- a/noir/noir-repo/scripts/install_bb.sh +++ b/noir/noir-repo/scripts/install_bb.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION="0.55.0" +VERSION="0.56.0" BBUP_PATH=~/.bb/bbup diff --git a/noir/noir-repo/test_programs/compile_success_empty/regression_4436/src/main.nr b/noir/noir-repo/test_programs/compile_success_empty/regression_4436/src/main.nr index 834ea3250cc..336d0f1f4ed 100644 --- a/noir/noir-repo/test_programs/compile_success_empty/regression_4436/src/main.nr +++ b/noir/noir-repo/test_programs/compile_success_empty/regression_4436/src/main.nr @@ -3,8 +3,8 @@ trait LibTrait { fn get_constant() -> Field; } -global STRUCT_A_LEN: Field = 3; -global STRUCT_B_LEN: Field = 5; +global STRUCT_A_LEN: u32 = 3; +global STRUCT_B_LEN: u32 = 5; struct StructA; struct StructB; diff --git a/noir/noir-repo/test_programs/compile_success_empty/regression_6077/Prover.toml b/noir/noir-repo/test_programs/compile_success_empty/regression_6077/Prover.toml new file mode 100644 index 00000000000..ba3522cab01 --- /dev/null +++ b/noir/noir-repo/test_programs/compile_success_empty/regression_6077/Prover.toml @@ -0,0 +1 @@ +a = 0 diff --git a/noir/noir-repo/test_programs/execution_success/fold_basic/src/main.nr b/noir/noir-repo/test_programs/execution_success/fold_basic/src/main.nr index 6c17120660b..440779d2460 100644 --- a/noir/noir-repo/test_programs/execution_success/fold_basic/src/main.nr +++ b/noir/noir-repo/test_programs/execution_success/fold_basic/src/main.nr @@ -1,7 +1,9 @@ fn main(x: Field, y: pub Field) { let z = foo(x, y); let z2 = foo(x, y); + let z3 = foo(x, y); assert(z == z2); + assert(z2 == z3); } #[fold] diff --git a/noir/noir-repo/tooling/noir_js/src/index.ts b/noir/noir-repo/tooling/noir_js/src/index.ts index 1feca8fa275..f3016efd032 100644 --- a/noir/noir-repo/tooling/noir_js/src/index.ts +++ b/noir/noir-repo/tooling/noir_js/src/index.ts @@ -2,15 +2,7 @@ import * as acvm from '@noir-lang/acvm_js'; import * as abi from '@noir-lang/noirc_abi'; import { CompiledCircuit } from '@noir-lang/types'; -export { - ecdsa_secp256r1_verify, - ecdsa_secp256k1_verify, - keccak256, - blake2s256, - sha256, - xor, - and, -} from '@noir-lang/acvm_js'; +export { ecdsa_secp256r1_verify, ecdsa_secp256k1_verify, keccak256, blake2s256, xor, and } from '@noir-lang/acvm_js'; export { InputMap } from '@noir-lang/noirc_abi'; export { WitnessMap, ForeignCallHandler, ForeignCallInput, ForeignCallOutput } from '@noir-lang/acvm_js'; diff --git a/noir/noir-repo/tooling/noir_js_backend_barretenberg/src/backend.ts b/noir/noir-repo/tooling/noir_js_backend_barretenberg/src/backend.ts index 4fd256a7a81..2569c7d868d 100644 --- a/noir/noir-repo/tooling/noir_js_backend_barretenberg/src/backend.ts +++ b/noir/noir-repo/tooling/noir_js_backend_barretenberg/src/backend.ts @@ -1,74 +1,26 @@ -import { decompressSync as gunzip } from 'fflate'; import { acirToUint8Array } from './serialize.js'; import { Backend, CompiledCircuit, ProofData, VerifierBackend } from '@noir-lang/types'; -import { BackendOptions } from './types.js'; import { deflattenFields } from './public_inputs.js'; import { reconstructProofWithPublicInputs, reconstructProofWithPublicInputsHonk } from './verifier.js'; -import { type Barretenberg } from '@aztec/bb.js'; +import { BackendOptions, UltraPlonkBackend, UltraHonkBackend as UltraHonkBackendInternal } from '@aztec/bb.js'; +import { decompressSync as gunzip } from 'fflate'; // This is the number of bytes in a UltraPlonk proof // minus the public inputs. const numBytesInProofWithoutPublicInputs: number = 2144; export class BarretenbergBackend implements Backend, VerifierBackend { - // These type assertions are used so that we don't - // have to initialize `api` and `acirComposer` in the constructor. - // These are initialized asynchronously in the `init` function, - // constructors cannot be asynchronous which is why we do this. - - protected api!: Barretenberg; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - protected acirComposer: any; - protected acirUncompressedBytecode: Uint8Array; + protected backend!: UltraPlonkBackend; - constructor( - acirCircuit: CompiledCircuit, - protected options: BackendOptions = { threads: 1 }, - ) { + constructor(acirCircuit: CompiledCircuit, options: BackendOptions = { threads: 1 }) { const acirBytecodeBase64 = acirCircuit.bytecode; - this.acirUncompressedBytecode = acirToUint8Array(acirBytecodeBase64); - } - - /** @ignore */ - async instantiate(): Promise { - if (!this.api) { - if (typeof navigator !== 'undefined' && navigator.hardwareConcurrency) { - this.options.threads = navigator.hardwareConcurrency; - } else { - try { - const os = await import('os'); - this.options.threads = os.cpus().length; - } catch (e) { - console.log('Could not detect environment. Falling back to one thread.', e); - } - } - const { Barretenberg, RawBuffer, Crs } = await import('@aztec/bb.js'); - const api = await Barretenberg.new(this.options); - - const honkRecursion = false; - const [_exact, _total, subgroupSize] = await api.acirGetCircuitSizes( - this.acirUncompressedBytecode, - honkRecursion, - ); - - const crs = await Crs.new(subgroupSize + 1); - await api.commonInitSlabAllocator(subgroupSize); - await api.srsInitSrs(new RawBuffer(crs.getG1Data()), crs.numPoints, new RawBuffer(crs.getG2Data())); - - this.acirComposer = await api.acirNewAcirComposer(subgroupSize); - await api.acirInitProvingKey(this.acirComposer, this.acirUncompressedBytecode); - this.api = api; - } + const acirUncompressedBytecode = acirToUint8Array(acirBytecodeBase64); + this.backend = new UltraPlonkBackend(acirUncompressedBytecode, options); } /** @description Generates a proof */ async generateProof(compressedWitness: Uint8Array): Promise { - await this.instantiate(); - const proofWithPublicInputs = await this.api.acirCreateProof( - this.acirComposer, - this.acirUncompressedBytecode, - gunzip(compressedWitness), - ); + const proofWithPublicInputs = await this.backend.generateProof(gunzip(compressedWitness)); const splitIndex = proofWithPublicInputs.length - numBytesInProofWithoutPublicInputs; @@ -103,45 +55,22 @@ export class BarretenbergBackend implements Backend, VerifierBackend { vkAsFields: string[]; vkHash: string; }> { - await this.instantiate(); const proof = reconstructProofWithPublicInputs(proofData); - const proofAsFields = ( - await this.api.acirSerializeProofIntoFields(this.acirComposer, proof, numOfPublicInputs) - ).slice(numOfPublicInputs); - - // TODO: perhaps we should put this in the init function. Need to benchmark - // TODO how long it takes. - await this.api.acirInitVerificationKey(this.acirComposer); - - // Note: If you don't init verification key, `acirSerializeVerificationKeyIntoFields`` will just hang on serialization - const vk = await this.api.acirSerializeVerificationKeyIntoFields(this.acirComposer); - - return { - proofAsFields: proofAsFields.map((p) => p.toString()), - vkAsFields: vk[0].map((vk) => vk.toString()), - vkHash: vk[1].toString(), - }; + return this.backend.generateRecursiveProofArtifacts(proof, numOfPublicInputs); } /** @description Verifies a proof */ async verifyProof(proofData: ProofData): Promise { const proof = reconstructProofWithPublicInputs(proofData); - await this.instantiate(); - await this.api.acirInitVerificationKey(this.acirComposer); - return await this.api.acirVerifyProof(this.acirComposer, proof); + return this.backend.verifyProof(proof); } async getVerificationKey(): Promise { - await this.instantiate(); - await this.api.acirInitVerificationKey(this.acirComposer); - return await this.api.acirGetVerificationKey(this.acirComposer); + return this.backend.getVerificationKey(); } async destroy(): Promise { - if (!this.api) { - return; - } - await this.api.destroy(); + await this.backend.destroy(); } } @@ -157,54 +86,16 @@ export class UltraHonkBackend implements Backend, VerifierBackend { // These are initialized asynchronously in the `init` function, // constructors cannot be asynchronous which is why we do this. - protected api!: Barretenberg; - protected acirUncompressedBytecode: Uint8Array; + protected backend!: UltraHonkBackendInternal; - constructor( - acirCircuit: CompiledCircuit, - protected options: BackendOptions = { threads: 1 }, - ) { + constructor(acirCircuit: CompiledCircuit, options: BackendOptions = { threads: 1 }) { const acirBytecodeBase64 = acirCircuit.bytecode; - this.acirUncompressedBytecode = acirToUint8Array(acirBytecodeBase64); + const acirUncompressedBytecode = acirToUint8Array(acirBytecodeBase64); + this.backend = new UltraHonkBackendInternal(acirUncompressedBytecode, options); } - /** @ignore */ - async instantiate(): Promise { - if (!this.api) { - if (typeof navigator !== 'undefined' && navigator.hardwareConcurrency) { - this.options.threads = navigator.hardwareConcurrency; - } else { - try { - const os = await import('os'); - this.options.threads = os.cpus().length; - } catch (e) { - console.log('Could not detect environment. Falling back to one thread.', e); - } - } - const { Barretenberg, RawBuffer, Crs } = await import('@aztec/bb.js'); - const api = await Barretenberg.new(this.options); - - const honkRecursion = true; - const [_exact, _total, subgroupSize] = await api.acirGetCircuitSizes( - this.acirUncompressedBytecode, - honkRecursion, - ); - const crs = await Crs.new(subgroupSize + 1); - await api.commonInitSlabAllocator(subgroupSize); - await api.srsInitSrs(new RawBuffer(crs.getG1Data()), crs.numPoints, new RawBuffer(crs.getG2Data())); - - // We don't init a proving key here in the Honk API - // await api.acirInitProvingKey(this.acirComposer, this.acirUncompressedBytecode); - this.api = api; - } - } - - async generateProof(decompressedWitness: Uint8Array): Promise { - await this.instantiate(); - const proofWithPublicInputs = await this.api.acirProveUltraHonk( - this.acirUncompressedBytecode, - gunzip(decompressedWitness), - ); + async generateProof(compressedWitness: Uint8Array): Promise { + const proofWithPublicInputs = await this.backend.generateProof(gunzip(compressedWitness)); const proofAsStrings = deflattenFields(proofWithPublicInputs.slice(4)); const numPublicInputs = Number(proofAsStrings[1]); @@ -229,55 +120,25 @@ export class UltraHonkBackend implements Backend, VerifierBackend { } async verifyProof(proofData: ProofData): Promise { - const { RawBuffer } = await import('@aztec/bb.js'); - const proof = reconstructProofWithPublicInputsHonk(proofData); - await this.instantiate(); - const vkBuf = await this.api.acirWriteVkUltraHonk(this.acirUncompressedBytecode); - - return await this.api.acirVerifyUltraHonk(proof, new RawBuffer(vkBuf)); + return this.backend.verifyProof(proof); } async getVerificationKey(): Promise { - await this.instantiate(); - return await this.api.acirWriteVkUltraHonk(this.acirUncompressedBytecode); + return this.backend.getVerificationKey(); } // TODO(https://github.com/noir-lang/noir/issues/5661): Update this to handle Honk recursive aggregation in the browser once it is ready in the backend itself async generateRecursiveProofArtifacts( - _proofData: ProofData, - _numOfPublicInputs: number, + proofData: ProofData, + numOfPublicInputs: number, ): Promise<{ proofAsFields: string[]; vkAsFields: string[]; vkHash: string }> { - await this.instantiate(); - // TODO(https://github.com/noir-lang/noir/issues/5661): This needs to be updated to handle recursive aggregation. - // There is still a proofAsFields method but we could consider getting rid of it as the proof itself - // is a list of field elements. - // UltraHonk also does not have public inputs directly prepended to the proof and they are still instead - // inserted at an offset. - // const proof = reconstructProofWithPublicInputs(proofData); - // const proofAsFields = (await this.api.acirProofAsFieldsUltraHonk(proof)).slice(numOfPublicInputs); - - // TODO: perhaps we should put this in the init function. Need to benchmark - // TODO how long it takes. - const vkBuf = await this.api.acirWriteVkUltraHonk(this.acirUncompressedBytecode); - const vk = await this.api.acirVkAsFieldsUltraHonk(vkBuf); - - return { - // TODO(https://github.com/noir-lang/noir/issues/5661) - proofAsFields: [], - vkAsFields: vk.map((vk) => vk.toString()), - // We use an empty string for the vk hash here as it is unneeded as part of the recursive artifacts - // The user can be expected to hash the vk inside their circuit to check whether the vk is the circuit - // they expect - vkHash: '', - }; + const proof = reconstructProofWithPublicInputsHonk(proofData); + return this.backend.generateRecursiveProofArtifacts(proof, numOfPublicInputs); } async destroy(): Promise { - if (!this.api) { - return; - } - await this.api.destroy(); + await this.backend.destroy(); } } diff --git a/noir/noir-repo/tooling/noir_js_backend_barretenberg/src/index.ts b/noir/noir-repo/tooling/noir_js_backend_barretenberg/src/index.ts index 6786c1eec48..f1786396a2a 100644 --- a/noir/noir-repo/tooling/noir_js_backend_barretenberg/src/index.ts +++ b/noir/noir-repo/tooling/noir_js_backend_barretenberg/src/index.ts @@ -3,4 +3,4 @@ export { BarretenbergVerifier, UltraHonkVerifier } from './verifier.js'; // typedoc exports export { Backend, CompiledCircuit, ProofData } from '@noir-lang/types'; -export { BackendOptions } from './types.js'; +export { BackendOptions } from '@aztec/bb.js'; diff --git a/noir/noir-repo/tooling/noir_js_backend_barretenberg/src/types.ts b/noir/noir-repo/tooling/noir_js_backend_barretenberg/src/types.ts deleted file mode 100644 index fac23030aad..00000000000 --- a/noir/noir-repo/tooling/noir_js_backend_barretenberg/src/types.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * @description - * An options object, currently only used to specify the number of threads to use. - */ -export type BackendOptions = { - /** @description Number of threads */ - threads: number; - memory?: { maximum: number }; -}; diff --git a/noir/noir-repo/tooling/noir_js_backend_barretenberg/src/verifier.ts b/noir/noir-repo/tooling/noir_js_backend_barretenberg/src/verifier.ts index 58612672b35..885ec80caa8 100644 --- a/noir/noir-repo/tooling/noir_js_backend_barretenberg/src/verifier.ts +++ b/noir/noir-repo/tooling/noir_js_backend_barretenberg/src/verifier.ts @@ -1,69 +1,22 @@ import { ProofData } from '@noir-lang/types'; -import { BackendOptions } from './types.js'; import { flattenFieldsAsArray } from './public_inputs.js'; -import { type Barretenberg } from '@aztec/bb.js'; +import { BackendOptions, BarretenbergVerifier as BarretenbergVerifierInternal } from '@aztec/bb.js'; export class BarretenbergVerifier { - // These type assertions are used so that we don't - // have to initialize `api` and `acirComposer` in the constructor. - // These are initialized asynchronously in the `init` function, - // constructors cannot be asynchronous which is why we do this. - - private api!: Barretenberg; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - private acirComposer: any; - - constructor(private options: BackendOptions = { threads: 1 }) {} - - /** @ignore */ - async instantiate(): Promise { - if (!this.api) { - if (typeof navigator !== 'undefined' && navigator.hardwareConcurrency) { - this.options.threads = navigator.hardwareConcurrency; - } else { - try { - const os = await import('os'); - this.options.threads = os.cpus().length; - } catch (e) { - console.log('Could not detect environment. Falling back to one thread.', e); - } - } - const { Barretenberg, RawBuffer, Crs } = await import('@aztec/bb.js'); - - // This is the number of CRS points necessary to verify a Barretenberg proof. - const NUM_CRS_POINTS_FOR_VERIFICATION: number = 0; - const [api, crs] = await Promise.all([Barretenberg.new(this.options), Crs.new(NUM_CRS_POINTS_FOR_VERIFICATION)]); - - await api.commonInitSlabAllocator(NUM_CRS_POINTS_FOR_VERIFICATION); - await api.srsInitSrs( - new RawBuffer([] /* crs.getG1Data() */), - NUM_CRS_POINTS_FOR_VERIFICATION, - new RawBuffer(crs.getG2Data()), - ); - - this.acirComposer = await api.acirNewAcirComposer(NUM_CRS_POINTS_FOR_VERIFICATION); - this.api = api; - } + private verifier!: BarretenbergVerifierInternal; + + constructor(options: BackendOptions = { threads: 1 }) { + this.verifier = new BarretenbergVerifierInternal(options); } /** @description Verifies a proof */ async verifyProof(proofData: ProofData, verificationKey: Uint8Array): Promise { - const { RawBuffer } = await import('@aztec/bb.js'); - - await this.instantiate(); - // The verifier can be used for a variety of ACIR programs so we should not assume that it - // is preloaded with the correct verification key. - await this.api.acirLoadVerificationKey(this.acirComposer, new RawBuffer(verificationKey)); - const proof = reconstructProofWithPublicInputs(proofData); - return await this.api.acirVerifyProof(this.acirComposer, proof); + return this.verifier.verifyUltraplonkProof(proof, verificationKey); } async destroy(): Promise { - if (!this.api) { - return; - } - await this.api.destroy(); + await this.verifier.destroy(); } } @@ -78,60 +31,20 @@ export function reconstructProofWithPublicInputs(proofData: ProofData): Uint8Arr } export class UltraHonkVerifier { - // These type assertions are used so that we don't - // have to initialize `api` in the constructor. - // These are initialized asynchronously in the `init` function, - // constructors cannot be asynchronous which is why we do this. - - private api!: Barretenberg; - - constructor(private options: BackendOptions = { threads: 1 }) {} - - /** @ignore */ - async instantiate(): Promise { - if (!this.api) { - if (typeof navigator !== 'undefined' && navigator.hardwareConcurrency) { - this.options.threads = navigator.hardwareConcurrency; - } else { - try { - const os = await import('os'); - this.options.threads = os.cpus().length; - } catch (e) { - console.log('Could not detect environment. Falling back to one thread.', e); - } - } - const { Barretenberg, RawBuffer, Crs } = await import('@aztec/bb.js'); - - // This is the number of CRS points necessary to verify a Barretenberg proof. - const NUM_CRS_POINTS_FOR_VERIFICATION: number = 0; - const [api, crs] = await Promise.all([Barretenberg.new(this.options), Crs.new(NUM_CRS_POINTS_FOR_VERIFICATION)]); - - await api.commonInitSlabAllocator(NUM_CRS_POINTS_FOR_VERIFICATION); - await api.srsInitSrs( - new RawBuffer([] /* crs.getG1Data() */), - NUM_CRS_POINTS_FOR_VERIFICATION, - new RawBuffer(crs.getG2Data()), - ); - - this.api = api; - } + private verifier!: BarretenbergVerifierInternal; + + constructor(options: BackendOptions = { threads: 1 }) { + this.verifier = new BarretenbergVerifierInternal(options); } /** @description Verifies a proof */ async verifyProof(proofData: ProofData, verificationKey: Uint8Array): Promise { - const { RawBuffer } = await import('@aztec/bb.js'); - - await this.instantiate(); - const proof = reconstructProofWithPublicInputsHonk(proofData); - return await this.api.acirVerifyUltraHonk(proof, new RawBuffer(verificationKey)); + return this.verifier.verifyUltrahonkProof(proof, verificationKey); } async destroy(): Promise { - if (!this.api) { - return; - } - await this.api.destroy(); + await this.verifier.destroy(); } } diff --git a/noir/noir-repo/tooling/noirc_abi_wasm/package.json b/noir/noir-repo/tooling/noirc_abi_wasm/package.json index b8d0e74617d..021e80017aa 100644 --- a/noir/noir-repo/tooling/noirc_abi_wasm/package.json +++ b/noir/noir-repo/tooling/noirc_abi_wasm/package.json @@ -42,7 +42,7 @@ "@esm-bundle/chai": "^4.3.4-fix.0", "@web/dev-server-esbuild": "^0.3.6", "@web/test-runner": "^0.18.1", - "@web/test-runner-playwright": "^0.10.0", + "@web/test-runner-playwright": "^0.11.0", "eslint": "^8.57.0", "mocha": "^10.2.0" } diff --git a/noir/noir-repo/tooling/profiler/src/opcode_formatter.rs b/noir/noir-repo/tooling/profiler/src/opcode_formatter.rs index fa72793e406..f367360b189 100644 --- a/noir/noir-repo/tooling/profiler/src/opcode_formatter.rs +++ b/noir/noir-repo/tooling/profiler/src/opcode_formatter.rs @@ -14,7 +14,6 @@ fn format_blackbox_function(call: &BlackBoxFuncCall) -> String { BlackBoxFuncCall::AND { .. } => "and".to_string(), BlackBoxFuncCall::XOR { .. } => "xor".to_string(), BlackBoxFuncCall::RANGE { .. } => "range".to_string(), - BlackBoxFuncCall::SHA256 { .. } => "sha256".to_string(), BlackBoxFuncCall::Blake2s { .. } => "blake2s".to_string(), BlackBoxFuncCall::Blake3 { .. } => "blake3".to_string(), BlackBoxFuncCall::SchnorrVerify { .. } => "schnorr_verify".to_string(), @@ -41,7 +40,6 @@ fn format_blackbox_function(call: &BlackBoxFuncCall) -> String { fn format_blackbox_op(call: &BlackBoxOp) -> String { match call { BlackBoxOp::AES128Encrypt { .. } => "aes128_encrypt".to_string(), - BlackBoxOp::Sha256 { .. } => "sha256".to_string(), BlackBoxOp::Blake2s { .. } => "blake2s".to_string(), BlackBoxOp::Blake3 { .. } => "blake3".to_string(), BlackBoxOp::SchnorrVerify { .. } => "schnorr_verify".to_string(), diff --git a/noir/noir-repo/yarn.lock b/noir/noir-repo/yarn.lock index f77e9f7e72e..77708cc9b21 100644 --- a/noir/noir-repo/yarn.lock +++ b/noir/noir-repo/yarn.lock @@ -4145,7 +4145,7 @@ __metadata: "@esm-bundle/chai": ^4.3.4-fix.0 "@web/dev-server-esbuild": ^0.3.6 "@web/test-runner": ^0.18.1 - "@web/test-runner-playwright": ^0.10.0 + "@web/test-runner-playwright": ^0.11.0 chai: ^4.4.1 eslint: ^8.57.0 eslint-plugin-prettier: ^5.1.3 @@ -4277,7 +4277,7 @@ __metadata: "@noir-lang/types": "workspace:*" "@web/dev-server-esbuild": ^0.3.6 "@web/test-runner": ^0.18.1 - "@web/test-runner-playwright": ^0.10.0 + "@web/test-runner-playwright": ^0.11.0 eslint: ^8.57.0 mocha: ^10.2.0 languageName: unknown @@ -6172,15 +6172,6 @@ __metadata: languageName: node linkType: hard -"@web/browser-logs@npm:^0.3.4": - version: 0.3.4 - resolution: "@web/browser-logs@npm:0.3.4" - dependencies: - errorstacks: ^2.2.0 - checksum: fe212c91c26deada3458b6562a8d7d2ae98b7b51c7099e1cdb972e9f799c63f6cd170776b2eadbe43c47531cb6d9b06f48282113a5944f4394270a0076f8565e - languageName: node - linkType: hard - "@web/browser-logs@npm:^0.4.0": version: 0.4.0 resolution: "@web/browser-logs@npm:0.4.0" @@ -6223,32 +6214,6 @@ __metadata: languageName: node linkType: hard -"@web/dev-server-core@npm:^0.6.2": - version: 0.6.3 - resolution: "@web/dev-server-core@npm:0.6.3" - dependencies: - "@types/koa": ^2.11.6 - "@types/ws": ^7.4.0 - "@web/parse5-utils": ^2.0.2 - chokidar: ^3.4.3 - clone: ^2.1.2 - es-module-lexer: ^1.0.0 - get-stream: ^6.0.0 - is-stream: ^2.0.0 - isbinaryfile: ^5.0.0 - koa: ^2.13.0 - koa-etag: ^4.0.0 - koa-send: ^5.0.1 - koa-static: ^5.0.0 - lru-cache: ^8.0.4 - mime-types: ^2.1.27 - parse5: ^6.0.1 - picomatch: ^2.2.2 - ws: ^7.4.2 - checksum: 98ba42df5eb865828c223bd1de098d013efd8e89983efff28e26ecd9d08c8b35fd29b4c1256ed08b05ecb365abe1aa80d2854e1953bdebbbe230a7e2a597dd8f - languageName: node - linkType: hard - "@web/dev-server-core@npm:^0.7.0": version: 0.7.0 resolution: "@web/dev-server-core@npm:0.7.0" @@ -6351,7 +6316,7 @@ __metadata: languageName: node linkType: hard -"@web/parse5-utils@npm:^2.0.2, @web/parse5-utils@npm:^2.1.0": +"@web/parse5-utils@npm:^2.1.0": version: 2.1.0 resolution: "@web/parse5-utils@npm:2.1.0" dependencies: @@ -6384,40 +6349,6 @@ __metadata: languageName: node linkType: hard -"@web/test-runner-core@npm:^0.12.0": - version: 0.12.0 - resolution: "@web/test-runner-core@npm:0.12.0" - dependencies: - "@babel/code-frame": ^7.12.11 - "@types/babel__code-frame": ^7.0.2 - "@types/co-body": ^6.1.0 - "@types/convert-source-map": ^2.0.0 - "@types/debounce": ^1.2.0 - "@types/istanbul-lib-coverage": ^2.0.3 - "@types/istanbul-reports": ^3.0.0 - "@web/browser-logs": ^0.3.4 - "@web/dev-server-core": ^0.6.2 - chokidar: ^3.4.3 - cli-cursor: ^3.1.0 - co-body: ^6.1.0 - convert-source-map: ^2.0.0 - debounce: ^1.2.0 - dependency-graph: ^0.11.0 - globby: ^11.0.1 - ip: ^1.1.5 - istanbul-lib-coverage: ^3.0.0 - istanbul-lib-report: ^3.0.1 - istanbul-reports: ^3.0.2 - log-update: ^4.0.0 - nanocolors: ^0.2.1 - nanoid: ^3.1.25 - open: ^8.0.2 - picomatch: ^2.2.2 - source-map: ^0.7.3 - checksum: e71afa227f9dc2ea4ec67838b1bc4c8af2c61d3e6002b78e37724e3dc09be466e7f7aa5e6795d5431dca1a0b13b94765a880103f98c5497c97943c2f708327eb - languageName: node - linkType: hard - "@web/test-runner-core@npm:^0.13.0": version: 0.13.0 resolution: "@web/test-runner-core@npm:0.13.0" @@ -6452,19 +6383,6 @@ __metadata: languageName: node linkType: hard -"@web/test-runner-coverage-v8@npm:^0.7.3": - version: 0.7.3 - resolution: "@web/test-runner-coverage-v8@npm:0.7.3" - dependencies: - "@web/test-runner-core": ^0.12.0 - istanbul-lib-coverage: ^3.0.0 - lru-cache: ^8.0.4 - picomatch: ^2.2.2 - v8-to-istanbul: ^9.0.1 - checksum: 05d7a9a4df8ca30991307a8d69ac9388a6572a9c6585887a925e7bdb158a0430f213c81cb356b8dcb7bf9cd3423d0071030b481c29358562bd344da8ea814daa - languageName: node - linkType: hard - "@web/test-runner-coverage-v8@npm:^0.8.0": version: 0.8.0 resolution: "@web/test-runner-coverage-v8@npm:0.8.0" @@ -6487,17 +6405,6 @@ __metadata: languageName: node linkType: hard -"@web/test-runner-playwright@npm:^0.10.0": - version: 0.10.3 - resolution: "@web/test-runner-playwright@npm:0.10.3" - dependencies: - "@web/test-runner-core": ^0.12.0 - "@web/test-runner-coverage-v8": ^0.7.3 - playwright: ^1.22.2 - checksum: 7c765d34482f2e299742c3ffe80790229d0825569016ccfccbb1a0c915f89551a3cc14a1454ed7c6895aaa03605ea444f7c1846eeab82bf02702e87a60628b3c - languageName: node - linkType: hard - "@web/test-runner-playwright@npm:^0.11.0": version: 0.11.0 resolution: "@web/test-runner-playwright@npm:0.11.0" @@ -12671,7 +12578,7 @@ __metadata: "@web/dev-server-esbuild": ^0.3.6 "@web/dev-server-import-maps": ^0.2.0 "@web/test-runner": ^0.18.1 - "@web/test-runner-playwright": ^0.10.0 + "@web/test-runner-playwright": ^0.11.0 eslint: ^8.57.0 eslint-plugin-prettier: ^5.1.3 ethers: ^6.7.1 @@ -16391,27 +16298,27 @@ __metadata: languageName: node linkType: hard -"playwright-core@npm:1.40.1": - version: 1.40.1 - resolution: "playwright-core@npm:1.40.1" +"playwright-core@npm:1.42.1": + version: 1.42.1 + resolution: "playwright-core@npm:1.42.1" bin: playwright-core: cli.js - checksum: 84d92fb9b86e3c225b16b6886bf858eb5059b4e60fa1205ff23336e56a06dcb2eac62650992dede72f406c8e70a7b6a5303e511f9b4bc0b85022ede356a01ee0 + checksum: e7081ff0f43b4b9053255109eb1d82164b7c6b55c7d022e25fca935d0f4fc547cb2e02a7b64f0c2a9462729be7bb45edb082f8b038306415944f1061d00d9c90 languageName: node linkType: hard "playwright@npm:^1.22.2": - version: 1.40.1 - resolution: "playwright@npm:1.40.1" + version: 1.42.1 + resolution: "playwright@npm:1.42.1" dependencies: fsevents: 2.3.2 - playwright-core: 1.40.1 + playwright-core: 1.42.1 dependenciesMeta: fsevents: optional: true bin: playwright: cli.js - checksum: 9e36791c1b4a649c104aa365fdd9d049924eeb518c5967c0e921aa38b9b00994aa6ee54784d6c2af194b3b494b6f69772673081ef53c6c4a4b2065af9955c4ba + checksum: 06c16bcd07d03993126ee6c168bde28c59d3cab7f7d4721eaf57bd5c51e9c929e10a286758de062b5fc02874413ceae2684d14cbb7865c0a51fc8df6d9001ad1 languageName: node linkType: hard diff --git a/noir/scripts/sync-out-fixup.sh b/noir/scripts/sync-out-fixup.sh index 072cefa4afe..b6c519334cf 100755 --- a/noir/scripts/sync-out-fixup.sh +++ b/noir/scripts/sync-out-fixup.sh @@ -10,12 +10,9 @@ BACKEND_BARRETENBERG_PACKAGE_JSON=./tooling/noir_js_backend_barretenberg/package jq --arg v $BB_VERSION '.dependencies."@aztec/bb.js" = $v' $BACKEND_BARRETENBERG_PACKAGE_JSON > $tmp && mv $tmp $BACKEND_BARRETENBERG_PACKAGE_JSON # This script runs in CI which enforces immutable installs by default, -# we then must turn this off in order to update yarn.lock. +# we then must turn this off in order to update yarn.lock. YARN_ENABLE_IMMUTABLE_INSTALLS=false yarn install # Add requirement for `wasm-opt` to be installed sed -i "s/^#require_command wasm-opt/require_command wasm-opt/" ./tooling/noirc_abi_wasm/build.sh -sed -i "s/^#require_command wasm-opt/require_command wasm-opt/" ./acvm-repo/acvm_js/build.sh - -# Remove `verify_honk_proof` test -rm -rf ./test_programs/execution_success/verify_honk_proof +sed -i "s/^#require_command wasm-opt/require_command wasm-opt/" ./acvm-repo/acvm_js/build.sh \ No newline at end of file diff --git a/noir/scripts/test_js_packages.sh b/noir/scripts/test_js_packages.sh index 687ab802fee..f7fa23301e2 100755 --- a/noir/scripts/test_js_packages.sh +++ b/noir/scripts/test_js_packages.sh @@ -4,6 +4,7 @@ set -eu cd $(dirname "$0")/../noir-repo ./.github/scripts/wasm-bindgen-install.sh +./.github/scripts/playwright-install.sh # Set build data manually. export SOURCE_DATE_EPOCH=$(date +%s) @@ -15,6 +16,5 @@ export PATH="${PATH}:/usr/src/noir/noir-repo/target/release/" yarn --immutable yarn build -./.github/scripts/playwright-install.sh yarn test diff --git a/noir/verify_honk_proof/Nargo.toml b/noir/verify_honk_proof/Nargo.toml deleted file mode 100644 index 8fce1bf44b6..00000000000 --- a/noir/verify_honk_proof/Nargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "verify_honk_proof" -type = "bin" -authors = [""] - -[dependencies] diff --git a/noir/verify_honk_proof/Prover.toml b/noir/verify_honk_proof/Prover.toml deleted file mode 100644 index 3f6bf0b427a..00000000000 --- a/noir/verify_honk_proof/Prover.toml +++ /dev/null @@ -1,4 +0,0 @@ -key_hash = "0x0000000000000000000000000000000000000000000000000000000000000000" -proof = ["0x0000000000000000000000000000000000000000000000000000000000000040", "0x0000000000000000000000000000000000000000000000000000000000000011", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000042ab5d6d1986846cf", "0x00000000000000000000000000000000000000000000000b75c020998797da78", "0x0000000000000000000000000000000000000000000000005a107acb64952eca", "0x000000000000000000000000000000000000000000000000000031e97a575e9d", "0x00000000000000000000000000000000000000000000000b5666547acf8bd5a4", "0x00000000000000000000000000000000000000000000000c410db10a01750aeb", "0x00000000000000000000000000000000000000000000000d722669117f9758a4", "0x000000000000000000000000000000000000000000000000000178cbf4206471", "0x000000000000000000000000000000000000000000000000e91b8a11e7842c38", "0x000000000000000000000000000000000000000000000007fd51009034b3357f", "0x000000000000000000000000000000000000000000000009889939f81e9c7402", "0x0000000000000000000000000000000000000000000000000000f94656a2ca48", "0x000000000000000000000000000000000000000000000006fb128b46c1ddb67f", "0x0000000000000000000000000000000000000000000000093fe27776f50224bd", "0x000000000000000000000000000000000000000000000004a0c80c0da527a081", "0x0000000000000000000000000000000000000000000000000001b52c2020d746", "0x0000000000000000000000000000005a9bae947e1e91af9e4033d8d6aa6ed632", "0x000000000000000000000000000000000025e485e013446d4ac7981c88ba6ecc", "0x000000000000000000000000000000ff1e0496e30ab24a63b32b2d1120b76e62", "0x00000000000000000000000000000000001afe0a8a685d7cd85d1010e55d9d7c", "0x000000000000000000000000000000b0804efd6573805f991458295f510a2004", "0x00000000000000000000000000000000000c81a178016e2fe18605022d5a8b0e", "0x000000000000000000000000000000eba51e76eb1cfff60a53a0092a3c3dea47", "0x000000000000000000000000000000000022e7466247b533282f5936ac4e6c15", "0x00000000000000000000000000000071b1d76edf770edff98f00ff4deec264cd", "0x00000000000000000000000000000000001e48128e68794d8861fcbb2986a383", "0x000000000000000000000000000000d3a2af4915ae6d86b097adc377fafda2d4", "0x000000000000000000000000000000000006359de9ca452dab3a4f1f8d9c9d98", "0x0000000000000000000000000000006cf7dd96d7636fda5953191b1ad776d491", "0x00000000000000000000000000000000001633d881a08d136e834cb13a28fcc6", "0x00000000000000000000000000000001254956cff6908b069fca0e6cf1c47eb1", "0x000000000000000000000000000000000006f4d4dd3890e997e75e75886bf8f7", "0x0000000000000000000000000000006cf7dd96d7636fda5953191b1ad776d491", "0x00000000000000000000000000000000001633d881a08d136e834cb13a28fcc6", "0x00000000000000000000000000000001254956cff6908b069fca0e6cf1c47eb1", "0x000000000000000000000000000000000006f4d4dd3890e997e75e75886bf8f7", "0x000000000000000000000000000000f968b227a358a305607f3efc933823d288", "0x00000000000000000000000000000000000eaf8adb390375a76d95e918b65e08", "0x000000000000000000000000000000bb34b4b447aae56f5e24f81c3acd6d547f", "0x00000000000000000000000000000000002175d012746260ebcfe339a91a81e1", "0x00000000000000000000000000000052eebbd1f6f7554e837f60c44000ed14b6", "0x00000000000000000000000000000000001c1c045a3ec94b8801f2272cc0b3f4", "0x0000000000000000000000000000004d2ef74134578f6b431a9df071ffca4292", "0x0000000000000000000000000000000000291326ade7aa6f0dfc8900eab5580b", "0x0000000000000000000000000000002433eec6418a6dba820c9527e2581fc8bc", "0x00000000000000000000000000000000000e88b7daad19af2ac2f9bdf9e50ee2", "0x000000000000000000000000000000dcfce2c427155cc3e4d035735d3dd5ece8", "0x00000000000000000000000000000000002d7d473cac1a15d0fee8b22c1a7b3e", "0x23fb9503f571d567261006e2ca8b4326d325820140b488bb71617583602f4e3e", "0x0c68b96eebbfcac292403ed3b6f61536550e66473904e7d5d28080108fd0b1c3", "0x08d3bdbefd6d437c50fb9e3e3861913433e76577a18d81aa0ea4b8843e55f9ae", "0x08f6173fe87b72da6d821a496eb99b0cfe0ccadcffd25e5a3b718d83ff9adb1a", "0x1e6bd0a24c2cc58c93cf255cc68dd0c57299c99fd934267906b34facb0145cf4", "0x1175996557630bc376d38636f72b277cb8d54a969a39988a7e78f464c03eaeda", "0x03c3bd1f43baf44de0d9bf0f474c5df04b182214d57a196a717aef8868f9948c", "0x27306ffc7a96c8c27c9812d9dfa649ab6897b69125939aabe814e07d105daa32", "0x0c7f0b70aa08158e55bb39471609782656793ac76a03f2b64dcd135e6542592c", "0x03885b9eff8dac38a64779e3aba31f18c74166892cef9c5081ab57f6daf59865", "0x18dd8385333838c514fd11f36469c88e7ea5f6440aee17fa93c0f03c765d4ced", "0x08ad5bc6c05ecc9ae0d8f0b3196f229a53dbe753f41c12c52045c40e7d8220cc", "0x2f308380f90378084075f2bafa73228b17cbdfc2d693f9aaa1e5089557d0f32e", "0x2d3407e6de05e5935a31037c3db88069d0c41ec86cc8dda815048d6ce76f7a5f", "0x108c231f660e75f209201507a2dba6fccf99734ad91db8ecea675275afdf3ce1", "0x0e68df40e8c467a617229ab0f1dc0d4a04254492e709333d623c0963518dd6b4", "0x290650614292eec7c4f26fd402a047298f1a618dc8ff7de615752f737df7d515", "0x0de290891aaf146fd890a3cd5c25025113df2ec4d0a134513a2f397eaf4e3ea9", "0x25521f6f658bd20d9aaa8041164509b7b8d96fc5ef385f6eb6582375d1a86168", "0x0e9ab2f2f06220644c41fb09456d91751c522b015622f30568e66457f647a2bc", "0x28364f88f1e9c7d8e7767a3b954c5daa29223d646279930b34da51351dc01992", "0x0560c214728aacc262eeee0037be142d81aec26a1f5a9cf0606c4236ed344aa8", "0x1faea1662601fa01ad93d160277a1c81f2c60a761b74660f24a596ec8cb783e7", "0x0e703bb7bbf3a8bb8211715d86a1becb7aa3271f51d6001d5d3042faa7465df9", "0x0cc5b499ea9d9cbae4a0e33a5b601a7f7b686d6980dc0dd5bae4382a8ab1c7c7", "0x27fae143a80a37af95a47d5953096eef9b1127b5475480b8a6ecebdb00a65e23", "0x02cdf7c51d9182fbe07e7768ed0fcfe452ef70fc2ac87dc38fc0d4137bdf4aec", "0x14838df5a54d57d0a28b0375107bb7e7e7259c576a08ea39db6af8b0341d2911", "0x1b1fb0b1242e17beebb218c4ec88c830accea9bc93deec6d087d36d4d8de31fd", "0x1a8c0bdf35e674aa37118f5ad7fe6b62c65d8502e9697b3a92dfda8a1923d110", "0x2819aaa537cf012ceb48a8c8036b6fee492eeeef6698dcf8e3bc825d71efa3f8", "0x1ceedf534535a0d2a427b2ceeb3c8878a658b80eaf5210dbc0d32888fe3d05a7", "0x25c96dba803387eb5f3562785bc3bccddb7c9eb019bd4b07dd4563f77965c00c", "0x0353f3ff0f4f3da362b11eac12167dcbc9b3c76fb555f7e5534c14bb4c3f8037", "0x2904e33424ad29d38bda66a50b54a67acdf09be06a068ddc09d5eabdf9c2a9e5", "0x0b28534bf4b58e7f46c4a7514f3b521dd47bbac2a3adf09387baf19ec8df39c5", "0x1628b67c5d7b8c4cb5d8cdd2d0fd1d92bea3bfcf490fba7f16447cb686d7a388", "0x151bde642447aaf993e737329a3b81c6e243eecbe6a7bb43cdb8ffe74b2c0484", "0x07b319f585e9a9a3883deaddd9b0f43c844cbc7477636034f1543ce9f98821bf", "0x2c8738d76925012cc029f5b888be3cae165daa6beb22b5d73f017c918d891c34", "0x118fff7a26b04a6476c21267a3a4e96247640f6eabd05a05f1a94f881c6ee32b", "0x081d82e0808b6d444b03e1d722375adef2659d5914faa3d9ca4cb12c912be257", "0x18426c5ff5a3140f19bdc05e247cc05e1f70e1ea482b2a2b21f4930a494d7a61", "0x296babb7c6a72783d92bc3dee7f90a97302d64a518faeec0f42af4f599ccc0d1", "0x03337dd83835a2e9fe02c97056360eec725d55b01f039663108939f0333dba11", "0x11a796e7e6f1081be5aad42b475dc224f9547769bc6b358af63207fe0d324a4a", "0x2419618a28070cb7af904460207371f5ff9fa0939f6a0148add60ede530b0f14", "0x004d323457b070f3f41a4ce1ad5a867b3dea1a592bccb40c4d69c8521d9682b6", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x2d6ba30a2a23364900cf52019e2d19574813fe4922763a4e281c58c400ffce14", "0x06a0c085375f88283bedf3a1fc76ef35490655f372e2a985842a9375383b69d7", "0x219b78e5cf2ab2e35edfc8e40362062081a24ff4e9c9d15afa254c2a02d6d4e2", "0x182f29b047e6167c338c36d31685a825c66f327336545c623e7a6bd18e4fa97f", "0x1686460e2586e702724b9daf02315a33ddf5cbd275cfadbc3858f9ef3fe97133", "0x2183aaf585ac708b4000a5b88cf5a767356677087133bd90fff1c3e030b91f1e", "0x27dfa9c69d03c7776fecac8e0f56162caa95f44692cdae91f5b52dfc97eb9006", "0x10a9959de8c6d238c6c6dd68274cc9fc5b6d66759938638072d71659a2fe210d", "0x0e179d6215630fdd7d50362ade21893456d4b9a693e96152d9a6bac6518d4605", "0x0175b579d4e3b24eb0a319a6c79756c8a68ce2c1e0d0d8d1593d685125fbfb66", "0x1132bd3d531944f5024f2705d39b13e00ae90c246f6550c745234fd3d080712b", "0x1f2326f3955b431f2a17e937128b890aa366b107b69c61b8b45832fd06ce9e4e", "0x13576e6c03c3f2042c56113991821ec1f9dec46b6b0ff2748e037c94e6656c40", "0x00bb713034ce9d247110149e2a1754dc76f3ad700d420508148060091037477a", "0x25fb93286a48dc64c67ffac9e3f4a96b6c70bb87744e10e44a782117f8f537a0", "0x191227cd5e49d8a6b5aca93888b3286b41069df547e4bd91ffe65e48ab45b2a8", "0x120d4ac764ca4db67357140c8a8dd1523c013f747250a03a6130416669b087e1", "0x131cc1285b242d73eee36b79ccb3024525ae3caf0f91981cb89ec8d81b16a198", "0x0cacfa5aa1bc4624d5d476aced4d4c8026fb881679172dbc482d18772bc28c9f", "0x0e138279e8a4fe06018e9b9e649921500766e7a7afcc971f41732aa51ec31a43", "0x000000000000000000000000000000332f935a88cd2cc8a138d5ff2efe4cdec8", "0x0e1c2af7515e65c7ebced1a37faf4dbeef5c414f5601219d00d3844658b05a61", "0x12aff8e8eed2d2946c91652d448240590690672893b4759cdd31e1ec9ea45138", "0x1e89f396af25e81f9c4b3af2b0a15fd961789f3a8aa60edbdc4e8f2dfb610375", "0x29c05199f808bf38009ee7fa3c82b6aa5e3d65f180f49d4564c4bf6918399461", "0x019ce7ac46f4e5f1d4ce2d3866321506cea78ff5e5fe400d83b0395341cfe5d5", "0x20b40d1a69e62e7eecbf490915e2791975d3bca30859f237c56c4486e1fbb441", "0x243f7e62233a1f80ee17978814d7ab095bcc416d6bcee4583ce1167c7206b7b4", "0x0b6067a921e8d87bc8fd1af67382fbe2a27bcc833effa13fd7d85b5458d71e28", "0x30307a6766be04f3c50378d1b83f2e147e2ceef344d0c60e1abf939d29c26e27", "0x004c0ec19588b920084d00c6bfe0af4dbf83ca101eac5d833cb8191fe1c298b4", "0x00da79a40286bd8d3993b331a72f8195c7ba04bd863d1afd469bb094e29cc7d9", "0x115b70a2c50ee9abc28472ba8e820cfba158113a5a39c8e31817c84182d0503a", "0x09341d5c4b6d85bde38834a418a8ca375592c320c669bdd540c7ccee760f2ea1", "0x09341d5c4b6d85bde38834a418a8ca375592c320c669bdd540c7ccee760f2ea1", "0x0e63e927a9562ce0914fcd8892dff9a94ac722365ce21b8f5c75cc560b364e57", "0x05cf84989894e741a3e1cd815a8f84febfb08e61ee7b424c902fb02ca7d12e95", "0x1f958ad88d5e4a270f35e534154e7a519c5bbfab36d5084202d5b78baf63e09e", "0x21f0a33450db8821c2f8d042aae7e70bf05c9814b063e73c5e95f8ddba515a81", "0x2767a30fa0351c7deb2c8f542ecace4c41c1d136dd460dfad50b372f2a5f4b71", "0x137ee4ebfbc7227bf57ffc35d3368dd4f96c62911db9380aafa220d061c3b59d", "0x111515d3566611192f64e1e0848635ca6d7f73d8039d8b3522da1e2359e6d1b2", "0x2f6284e905c491b8defe4c467b2e664e2fbf144b5ca45e05c4a9d1aa8d41e149", "0x1e688ca09721459cd96d6af042716567a8f5fdb479f08ff9eff248c6013315a4", "0x00000000000000000000000000000015207c89ecabf752a46c0d5b8dbd296d86", "0x0000000000000000000000000000000000286c2b4d49249737816da8fd9f2753", "0x0000000000000000000000000000002492e649af820ca5d83e59823126c03bfb", "0x00000000000000000000000000000000001cdf1b636e33bf02a813687147476e", "0x000000000000000000000000000000b49023689f96212b8166d0c9b105e6df9a", "0x00000000000000000000000000000000000d9d27730e57d86079464ecd8d9edd", "0x0000000000000000000000000000005292b5583bd716a723bae47d344d655528", "0x000000000000000000000000000000000026651dba1a1074382c734163ab3614", "0x0000000000000000000000000000008984f01bc1f237c72fd6d2bb10cc21eb85", "0x00000000000000000000000000000000001029818de60ae9bb21ac2b5d5a4c97", "0x0000000000000000000000000000003aca28da52679f34e33756dfe00f1d8072", "0x0000000000000000000000000000000000124ecac53af720c02d18f54fd29100", "0x000000000000000000000000000000d09ed1c104d0397f046d89b8476f47e641", "0x00000000000000000000000000000000002c5094b27ad41c8a203b16dc74ee54", "0x000000000000000000000000000000bf8609068d29793771eb3f64e7dc3db96d", "0x0000000000000000000000000000000000225e220e16aedaecf2c10de6e41042", "0x0000000000000000000000000000006ae4f0d8baca7866ad4632141f90770cd7", "0x0000000000000000000000000000000000256cb979ab5bbe98be3a413ae8f246", "0x000000000000000000000000000000891f30bd3ac8e7e63e00db4951d518822f", "0x000000000000000000000000000000000014dffca5d842acfcd23fa491a7dae2", "0x000000000000000000000000000000af99905ea5b7a25f2172f044a59b90e67d", "0x00000000000000000000000000000000001e35bb78e382a5b98ad04b846df528", "0x0000000000000000000000000000003cfb75469b791ea188b8dfdff0f269e7b5", "0x00000000000000000000000000000000000e4fb9eb44a3d44d808794066f8811", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x000000000000000000000000000000c42f38f2993af03e18e76996c49f945c6a", "0x00000000000000000000000000000000002aefe820f0e4700abedd9fb6f046c1", "0x0000000000000000000000000000007a878e53414bf22854877c5066eaf916b8", "0x00000000000000000000000000000000001410a75247434da28c1ba6b64703bb", "0x000000000000000000000000000000bca902c1e2af8b47771e7eb42c3870f46b", "0x0000000000000000000000000000000000276eb602c3c232b51668d229d602b8", "0x000000000000000000000000000000dac1254c0753ee39d49d795bc6b3550ba7", "0x000000000000000000000000000000000007d60be9174146bd83f202aa062b92"] -public_inputs = ["0x0000000000000000000000000000000000000000000000000000000000000003"] -verification_key = ["0x0000000000000000000000000000000000000000000000000000000000000040", "0x0000000000000000000000000000000000000000000000000000000000000011", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000003", "0x0000000000000000000000000000000000000000000000000000000000000004", "0x0000000000000000000000000000000000000000000000000000000000000005", "0x0000000000000000000000000000000000000000000000000000000000000006", "0x0000000000000000000000000000000000000000000000000000000000000007", "0x0000000000000000000000000000000000000000000000000000000000000008", "0x0000000000000000000000000000000000000000000000000000000000000009", "0x000000000000000000000000000000000000000000000000000000000000000a", "0x000000000000000000000000000000000000000000000000000000000000000b", "0x000000000000000000000000000000000000000000000000000000000000000c", "0x000000000000000000000000000000000000000000000000000000000000000d", "0x000000000000000000000000000000000000000000000000000000000000000e", "0x000000000000000000000000000000000000000000000000000000000000000f", "0x0000000000000000000000000000000000000000000000000000000000000010", "0x00000000000000000000000000000060e430ad1c23bfcf3514323aae3f206e84", "0x00000000000000000000000000000000001b5c3ff4c2458d8f481b1c068f27ae", "0x000000000000000000000000000000bb510ab2112def34980e4fc6998ad9dd16", "0x00000000000000000000000000000000000576e7c105b43e061e13cb877fefe1", "0x000000000000000000000000000000ced074785d11857b065d8199e6669a601c", "0x00000000000000000000000000000000000053b48a4098c1c0ae268f273952f7", "0x000000000000000000000000000000d1d4b26e941db8168cee8f6de548ae0fd8", "0x00000000000000000000000000000000001a9adf5a6dadc3d948bb61dfd63f4c", "0x0000000000000000000000000000009ce1faac6f8de6ebb18f1db17372c82ad5", "0x00000000000000000000000000000000002002681bb417184b2df070a16a3858", "0x000000000000000000000000000000161baa651a8092e0e84725594de5aba511", "0x00000000000000000000000000000000000be0064399c2a1efff9eb0cdcb2223", "0x0000000000000000000000000000008673be6fd1bdbe980a29d8c1ded54381e7", "0x000000000000000000000000000000000008a5158a7d9648cf1d234524c9fa0c", "0x0000000000000000000000000000002b4fce6e4b1c72062b296d49bca2aa4130", "0x00000000000000000000000000000000002e45a9eff4b6769e55fb710cded44f", "0x00000000000000000000000000000072b85bf733758b76bcf97333efb85a23e3", "0x000000000000000000000000000000000017da0ea508994fc82862715e4b5592", "0x00000000000000000000000000000094fa74695cf058dba8ff35aec95456c6c3", "0x0000000000000000000000000000000000211acddb851061c24b8f159e832bd1", "0x000000000000000000000000000000303b5e5c531384b9a792e11702ad3bcab0", "0x00000000000000000000000000000000000d336dff51a60b8833d5d7f6d4314c", "0x0000000000000000000000000000009f825dde88092070747180d581c342444a", "0x0000000000000000000000000000000000237fbd6511a03cca8cac01b555fe01", "0x0000000000000000000000000000007c313205159495df6d8de292079a4844ff", "0x000000000000000000000000000000000018facdfc468530dd45e8f7a1d38ce9", "0x0000000000000000000000000000000d1ce33446fc3dc4ab40ca38d92dac74e1", "0x00000000000000000000000000000000000852d8e3e0e8f4435af3e94222688b", "0x0000000000000000000000000000006c04ee19ec1dfec87ed47d6d04aa158de2", "0x000000000000000000000000000000000013240f97a584b45184c8ec31319b5f", "0x000000000000000000000000000000cefb5d240b07ceb4be26ea429b6dc9d9e0", "0x00000000000000000000000000000000002dad22022121d689f57fb38ca21349", "0x000000000000000000000000000000c9f189f2a91aeb664ce376d8b157ba98f8", "0x00000000000000000000000000000000002531a51ad54f124d58094b219818d2", "0x000000000000000000000000000000ef1e6db71809307f677677e62b4163f556", "0x0000000000000000000000000000000000272da4396fb2a7ee0638b9140e523d", "0x0000000000000000000000000000002e54c0244a7732c87bc4712a76dd8c83fb", "0x000000000000000000000000000000000007db77b3e04b7eba9643da57cbbe4d", "0x000000000000000000000000000000e0dfe1ddd7f74ae0d636c910c3e85830d8", "0x00000000000000000000000000000000000466fa9b57ec4664abd1505b490862", "0x0000000000000000000000000000009ee55ae8a32fe5384c79907067cc27192e", "0x00000000000000000000000000000000000799d0e465cec07ecb5238c854e830", "0x0000000000000000000000000000001d5910ad361e76e1c241247a823733c39f", "0x00000000000000000000000000000000002b03f2ccf7507564da2e6678bef8fe", "0x000000000000000000000000000000ee40d90bea71fba7a412dd61fcf34e8ceb", "0x0000000000000000000000000000000000140b0936c323fd2471155617b6af56", "0x0000000000000000000000000000002b90071823185c5ff8e440fd3d73b6fefc", "0x00000000000000000000000000000000002b6c10790a5f6631c87d652e059df4", "0x00000000000000000000000000000029a17181c7934fc3fdbd352eac5cb521b9", "0x00000000000000000000000000000000001f497cbf5284ff29a2d336e5991999", "0x000000000000000000000000000000072bd9c0c6beda1fdee6d4ff0432ba9e1b", "0x000000000000000000000000000000000013ea38a0bd2aa751a490a724fac818", "0x000000000000000000000000000000c599f63dcd3edd49f08ae5c3141c1e3493", "0x00000000000000000000000000000000002bdb36be0bea09950dd32a8ccf6fbc", "0x00000000000000000000000000000047f27f29724e7f19eba0340256a0bd4b7d", "0x00000000000000000000000000000000001c1c5ccf87a962129ca785f8f35120", "0x000000000000000000000000000000c5c71efdae00679bbe4a95096e012b1817", "0x000000000000000000000000000000000017a365de041e317817d0135f2b48e0", "0x0000000000000000000000000000008ae711ac402f7848d719c93a89ba8d39f1", "0x00000000000000000000000000000000002b6fb40ed8a1935226f4f9786a0499", "0x0000000000000000000000000000002f03a71501d83de1da5715a4e9462d6198", "0x00000000000000000000000000000000001644064443b8546f48eae693af47b8", "0x00000000000000000000000000000083763ab1b6e8fe269b2fe4c7b9c448c08d", "0x000000000000000000000000000000000021d7cc18c59676a8eeb47c0111c251", "0x000000000000000000000000000000b5f937153073e03ea7d51a996e0ebc2e6b", "0x000000000000000000000000000000000011ddd0e26457373eb06e0493177672", "0x000000000000000000000000000000c5f6eb9f6fc8fa99811a4a88c74a6d018b", "0x000000000000000000000000000000000025bcd07a0732c123567834f5109558", "0x000000000000000000000000000000aeb08a0b1a4442189448b4e97490568146", "0x000000000000000000000000000000000002a1744e4771705536a88f07e0f90f", "0x000000000000000000000000000000b938568293bd0724b0ea76c2ec34c4a829", "0x0000000000000000000000000000000000053296e8f3b9ad3af877dfa9c7c2a7", "0x000000000000000000000000000000f0ca1db6323996eba26bdc86dafef9d10b", "0x00000000000000000000000000000000001441a46c58af03d5645d52721d956a", "0x0000000000000000000000000000008bbf8f884013c66c28ba09c2fbd573b656", "0x0000000000000000000000000000000000206c391ca06fac27d1908e94570243", "0x0000000000000000000000000000002d4f5aaed88ba4f79612d53b804ca8f194", "0x00000000000000000000000000000000001674011c96392df08970fa6b7b4cb8", "0x0000000000000000000000000000009f88297c1729d76c4d9306853598c91325", "0x0000000000000000000000000000000000256f51adfcacc3c1e340be4d32d3e9", "0x0000000000000000000000000000000ab9955eec0d74eb799afed2a802b24d75", "0x00000000000000000000000000000000001fcbe43ea105b30d36ed0b21b03411", "0x000000000000000000000000000000d66b1d5433f1aa5305cd1edce7c22de466", "0x00000000000000000000000000000000002331546a256b8a3b751956806680d4", "0x000000000000000000000000000000e97954ad6cd6f45fb15c91434121db4304", "0x00000000000000000000000000000000002e20a97e09d50f227ced47e7a98250", "0x0000000000000000000000000000001ebbc27eb9ebededefba79522eb58ae89b", "0x0000000000000000000000000000000000090efa4974e566e81d1177b85a30be", "0x0000000000000000000000000000005eafa070b9c9632404052642e3bc14f9fd", "0x00000000000000000000000000000000001489068864102daca6a6b8bc4d448b", "0x0000000000000000000000000000009ebc91aaaac036a6477cadbe54e8556dfd", "0x00000000000000000000000000000000000ef6d835e2ed3343b95c82c8c54037", "0x00000000000000000000000000000033b28b529dff46e93af4e7422530478e4a", "0x000000000000000000000000000000000020a86c2f8591bf190bcddcc03c42fb", "0x000000000000000000000000000000a9679d0acc088f7dc27bf6d866bcd2dda2", "0x00000000000000000000000000000000002fb9d0d2d4099402bed74f738f64cc", "0x00000000000000000000000000000023b09f876a29a061582848a8b9a5870c12", "0x00000000000000000000000000000000001d5bb906f03f0d49e9c4791bc43af9", "0x00000000000000000000000000000017aac9854ea240d8ec97bf760c4d4ba870", "0x00000000000000000000000000000000000b227a556c414ada0dc75bb303e30e", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000009b624fa65d1a24b7f14a8f25f3789622af", "0x000000000000000000000000000000000013d47bff8c630e847b70e2732fd3f0", "0x00000000000000000000000000000061d21663e93132f32921075f4c936a84df", "0x00000000000000000000000000000000001a74ca4e118fb480b9b999902989a3"] diff --git a/noir/verify_honk_proof/src/main.nr b/noir/verify_honk_proof/src/main.nr deleted file mode 100644 index b60a47ccc7f..00000000000 --- a/noir/verify_honk_proof/src/main.nr +++ /dev/null @@ -1,17 +0,0 @@ - -// This circuit aggregates a single Honk proof from `assert_statement_recursive`. -global SIZE_OF_PROOF_IF_LOGN_IS_28 : u32 = 439; -global HONK_IDENTIFIER : u32 = 1; -fn main( - verification_key: [Field; 128], - // This is the proof without public inputs attached. - // - // This means: the size of this does not change with the number of public inputs. - proof: [Field; SIZE_OF_PROOF_IF_LOGN_IS_28], - public_inputs: pub [Field; 1], - // This is currently not public. It is fine given that the vk is a part of the circuit definition. - // I believe we want to eventually make it public too though. - key_hash: Field -) { - std::verify_proof(verification_key, proof, public_inputs, key_hash); -} diff --git a/scripts/ci/get_bench_jobs.sh b/scripts/ci/get_bench_jobs.sh new file mode 100755 index 00000000000..a93ef001f9a --- /dev/null +++ b/scripts/ci/get_bench_jobs.sh @@ -0,0 +1,38 @@ +#!/bin/bash +set -eu + +# Enter repo root. +cd "$(dirname "$0")"/../.. + +BRANCH=$1 +LABELS=$2 + +# Define the allow_list +allow_list=() + +# Add labels from input to the allow_list +IFS=',' read -r -a input_labels <<< "$LABELS" +allow_list+=("${input_labels[@]}") + +# Generate full list of targets on one line +full_list=$(earthly ls ./yarn-project/end-to-end | grep '+bench' | sed 's/+//' | xargs echo) + +# If branch is master or allow_list contains 'bench-all', return full list +if [[ "$BRANCH" == "master" ]] || [[ " ${allow_list[@]} " =~ "bench-all" ]]; then + # print as JSON list + echo "$full_list" | jq -Rc 'split(" ")' + exit 0 +fi + +# Filter the full_list to include only items in the allow_list +filtered_list=() +for item in $full_list; do + for allowed in "${allow_list[@]}"; do + if [[ "$item" == "$allowed" ]]; then + filtered_list+=("$item") + fi + done +done + +# Print the filtered list in JSON format +echo ${filtered_list[@]} | jq -Rc 'split(" ")' diff --git a/scripts/ci/get_e2e_jobs.sh b/scripts/ci/get_e2e_jobs.sh new file mode 100755 index 00000000000..18c54f39ea4 --- /dev/null +++ b/scripts/ci/get_e2e_jobs.sh @@ -0,0 +1,56 @@ +#!/bin/bash +set -eu + +# Enter repo root. +cd "$(dirname "$0")"/../.. + +BRANCH=$1 +LABELS=$2 + +# Define the allow_list +allow_list=( + "e2e-2-pxes" + "e2e-authwit" + "e2e-avm-simulator" + "e2e-block-building" + "e2e-cross-chain-messaging" + "e2e-deploy-contract" + "e2e-fees" + "e2e-fees-gas-estimation" + "e2e-fees-private-payments" + "e2e-max-block-number" + "e2e-nested-contract" + "e2e-ordering" + "e2e-static-calls" + "integration-l1-publisher" + "e2e-cheat-codes" + "e2e-prover-with-padding" + "e2e-lending-contract" +) + +# Add labels from input to the allow_list +IFS=',' read -r -a input_labels <<< "$LABELS" +allow_list+=("${input_labels[@]}") + +# Generate full list of targets, excluding specific entries, on one line +full_list=$(earthly ls ./yarn-project/end-to-end | grep -v '+base' | grep -v '+bench' | grep -v "+network" | grep -v 'devnet' | sed 's/+//' | xargs echo) + +# If branch is master or allow_list contains 'e2e-all', return full list +if [[ "$BRANCH" == "master" ]] || [[ " ${allow_list[@]} " =~ "e2e-all" ]]; then + # print as JSON list + echo "$full_list" | jq -Rc 'split(" ")' + exit 0 +fi + +# Filter the full_list to include only items in the allow_list +filtered_list=() +for item in $full_list; do + for allowed in "${allow_list[@]}"; do + if [[ "$item" == "$allowed" ]]; then + filtered_list+=("$item") + fi + done +done + +# Print the filtered list in JSON format +echo ${filtered_list[@]} | jq -Rc 'split(" ")' diff --git a/scripts/earthly-ci b/scripts/earthly-ci index 7ddd76ba55f..205a1577b56 100755 --- a/scripts/earthly-ci +++ b/scripts/earthly-ci @@ -27,7 +27,7 @@ function wipe_non_cache_docker_state { # Based on https://stackoverflow.com/a/75849307 # wipe everything but volumes where we have earthly cache sudo service docker stop - sudo bash -c 'rm -rf /var/lib/docker/{buildkit,containers,image,network,overlay2,plugins.runtimes,swarm,tmp,trust}/*' + sudo bash -c 'rm -rf /var/lib/docker/{buildkit,containers,image,network,overlay2,plugins.runtimes,swarm,tmp,trust}/*' || true # restart docker - might take down builds, but we need to recover anyway sudo service docker restart } diff --git a/spartan/.gitignore b/spartan/.gitignore new file mode 100644 index 00000000000..aa1ec1ea061 --- /dev/null +++ b/spartan/.gitignore @@ -0,0 +1 @@ +*.tgz diff --git a/helm-charts/aztec-network/.helmignore b/spartan/aztec-network/.helmignore similarity index 100% rename from helm-charts/aztec-network/.helmignore rename to spartan/aztec-network/.helmignore diff --git a/helm-charts/aztec-network/Chart.yaml b/spartan/aztec-network/Chart.yaml similarity index 100% rename from helm-charts/aztec-network/Chart.yaml rename to spartan/aztec-network/Chart.yaml diff --git a/helm-charts/aztec-network/files/config/config-prover-env.sh b/spartan/aztec-network/files/config/config-prover-env.sh similarity index 100% rename from helm-charts/aztec-network/files/config/config-prover-env.sh rename to spartan/aztec-network/files/config/config-prover-env.sh diff --git a/helm-charts/aztec-network/files/config/config-validator-env.sh b/spartan/aztec-network/files/config/config-validator-env.sh similarity index 100% rename from helm-charts/aztec-network/files/config/config-validator-env.sh rename to spartan/aztec-network/files/config/config-validator-env.sh diff --git a/helm-charts/aztec-network/files/grafana_dashboards/aztec/aztec-dashboard-all-in-one.json b/spartan/aztec-network/files/grafana_dashboards/aztec/aztec-dashboard-all-in-one.json similarity index 100% rename from helm-charts/aztec-network/files/grafana_dashboards/aztec/aztec-dashboard-all-in-one.json rename to spartan/aztec-network/files/grafana_dashboards/aztec/aztec-dashboard-all-in-one.json diff --git a/helm-charts/aztec-network/files/grafana_dashboards/default.yml b/spartan/aztec-network/files/grafana_dashboards/default.yml similarity index 100% rename from helm-charts/aztec-network/files/grafana_dashboards/default.yml rename to spartan/aztec-network/files/grafana_dashboards/default.yml diff --git a/helm-charts/aztec-network/templates/_helpers.tpl b/spartan/aztec-network/templates/_helpers.tpl similarity index 100% rename from helm-charts/aztec-network/templates/_helpers.tpl rename to spartan/aztec-network/templates/_helpers.tpl diff --git a/helm-charts/aztec-network/templates/anvil.deployment.yaml b/spartan/aztec-network/templates/anvil.yaml similarity index 78% rename from helm-charts/aztec-network/templates/anvil.deployment.yaml rename to spartan/aztec-network/templates/anvil.yaml index 3894ee5607e..a45c52d58b5 100644 --- a/helm-charts/aztec-network/templates/anvil.deployment.yaml +++ b/spartan/aztec-network/templates/anvil.yaml @@ -50,4 +50,23 @@ spec: successThreshold: {{ .Values.ethereum.readinessProbe.successThreshold }} failureThreshold: {{ .Values.ethereum.readinessProbe.failureThreshold }} resources: - {{- toYaml .Values.ethereum.resources | nindent 12 }} \ No newline at end of file + {{- toYaml .Values.ethereum.resources | nindent 12 }} +--- +apiVersion: v1 +kind: Service +metadata: + name: {{ include "aztec-network.fullname" . }}-ethereum + labels: + {{- include "aztec-network.labels" . | nindent 4 }} +spec: + type: {{ .Values.ethereum.service.type }} + selector: + {{- include "aztec-network.selectorLabels" . | nindent 4 }} + app: ethereum + ports: + - protocol: TCP + port: {{ .Values.ethereum.service.port }} + targetPort: {{ .Values.ethereum.service.targetPort }} + {{- if and (eq .Values.ethereum.service.type "NodePort") .Values.ethereum.service.nodePort }} + nodePort: {{ .Values.ethereum.service.nodePort }} + {{- end }} \ No newline at end of file diff --git a/helm-charts/aztec-network/templates/boot-node.stateful-set.yaml b/spartan/aztec-network/templates/boot-node.yaml similarity index 85% rename from helm-charts/aztec-network/templates/boot-node.stateful-set.yaml rename to spartan/aztec-network/templates/boot-node.yaml index 3e5456c9d2c..779d90ee86f 100644 --- a/helm-charts/aztec-network/templates/boot-node.stateful-set.yaml +++ b/spartan/aztec-network/templates/boot-node.yaml @@ -61,6 +61,16 @@ spec: "-c", "source /shared/contracts.env && env && node --no-warnings /usr/src/yarn-project/aztec/dest/bin/index.js start --node --archiver --sequencer --pxe", ] + livenessProbe: + exec: + command: + - /bin/sh + - -c + - curl -fSs http://127.0.0.1:{{ .Values.bootNode.service.nodePort }}/status + initialDelaySeconds: 30 + periodSeconds: 5 + timeoutSeconds: 30 + failureThreshold: 3 volumeMounts: - name: shared-volume mountPath: /shared @@ -79,6 +89,8 @@ spec: value: "{{ .Values.bootNode.service.nodePort }}" - name: LOG_LEVEL value: "{{ .Values.bootNode.logLevel }}" + - name: LOG_JSON + value: "1" - name: DEBUG value: "{{ .Values.bootNode.debug }}" - name: ETHEREUM_HOST @@ -116,3 +128,20 @@ spec: - name: scripts configMap: name: {{ include "aztec-network.fullname" . }}-deploy-contracts-script +--- +apiVersion: v1 +kind: Service +metadata: + name: {{ include "aztec-network.fullname" . }}-boot-node + labels: + {{- include "aztec-network.labels" . | nindent 4 }} +spec: + clusterIP: None + selector: + {{- include "aztec-network.selectorLabels" . | nindent 4 }} + app: boot-node + ports: + - port: {{ .Values.bootNode.service.p2pPort }} + name: p2p + - port: {{ .Values.bootNode.service.nodePort }} + name: node \ No newline at end of file diff --git a/helm-charts/aztec-network/templates/deploy-contracts.config-map.yaml b/spartan/aztec-network/templates/l2-contracts.yaml similarity index 53% rename from helm-charts/aztec-network/templates/deploy-contracts.config-map.yaml rename to spartan/aztec-network/templates/l2-contracts.yaml index 7191a38b78f..d4ba521e985 100644 --- a/helm-charts/aztec-network/templates/deploy-contracts.config-map.yaml +++ b/spartan/aztec-network/templates/l2-contracts.yaml @@ -1,3 +1,42 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ include "aztec-network.fullname" . }}-deploy-l2-contracts + labels: + {{- include "aztec-network.labels" . | nindent 4 }} +spec: + template: + metadata: + labels: + {{- include "aztec-network.selectorLabels" . | nindent 8 }} + app: deploy-l2-contracts + spec: + restartPolicy: OnFailure + containers: + - name: deploy-l2-contracts + image: {{ .Values.images.aztec.image }} + command: + - /bin/bash + - -c + - | + until curl -s -X POST -H 'content-type: application/json' \ + -d '{"jsonrpc":"2.0","method":"pxe_getNodeInfo","params":[],"id":67}' \ + {{ include "aztec-network.pxeUrl" . }} | grep -q '"enr:-'; do + echo "Waiting for PXE service..." + sleep 5 + done + echo "PXE service is ready!" + set -e + node --no-warnings /usr/src/yarn-project/aztec/dest/bin/index.js deploy-protocol-contracts + echo "Deployed L2 contracts" + env: + - name: PXE_URL + value: {{ include "aztec-network.pxeUrl" . | quote }} + - name: DEBUG + value: "aztec:*" + - name: LOG_LEVEL + value: "debug" +--- apiVersion: v1 kind: ConfigMap metadata: diff --git a/helm-charts/aztec-network/templates/metrics.yaml b/spartan/aztec-network/templates/metrics.yaml similarity index 100% rename from helm-charts/aztec-network/templates/metrics.yaml rename to spartan/aztec-network/templates/metrics.yaml diff --git a/helm-charts/aztec-network/templates/prover-node.stateful-set.yaml b/spartan/aztec-network/templates/prover-node.yaml similarity index 90% rename from helm-charts/aztec-network/templates/prover-node.stateful-set.yaml rename to spartan/aztec-network/templates/prover-node.yaml index a1804ac40d9..13cb4762719 100644 --- a/helm-charts/aztec-network/templates/prover-node.stateful-set.yaml +++ b/spartan/aztec-network/templates/prover-node.yaml @@ -59,6 +59,8 @@ spec: value: "{{ .Values.proverNode.service.nodePort }}" - name: LOG_LEVEL value: "{{ .Values.proverNode.logLevel }}" + - name: LOG_JSON + value: "1" - name: DEBUG value: "{{ .Values.proverNode.debug }}" - name: ETHEREUM_HOST @@ -96,3 +98,18 @@ metadata: data: configure-prover-env.sh: | {{ .Files.Get "files/config/config-prover-env.sh" | nindent 4 }} +--- +apiVersion: v1 +kind: Service +metadata: + name: {{ include "aztec-network.fullname" . }}-prover-node + labels: + {{- include "aztec-network.labels" . | nindent 4 }} +spec: + clusterIP: None + selector: + {{- include "aztec-network.selectorLabels" . | nindent 4 }} + app: prover-node + ports: + - port: {{ .Values.proverNode.service.nodePort }} + name: node \ No newline at end of file diff --git a/helm-charts/aztec-network/templates/pxe.deployment.yaml b/spartan/aztec-network/templates/pxe.yaml similarity index 70% rename from helm-charts/aztec-network/templates/pxe.deployment.yaml rename to spartan/aztec-network/templates/pxe.yaml index fefe94987c4..709a0a190e3 100644 --- a/helm-charts/aztec-network/templates/pxe.deployment.yaml +++ b/spartan/aztec-network/templates/pxe.yaml @@ -29,6 +29,12 @@ spec: value: {{ include "aztec-network.ethereumHost" . | quote }} - name: AZTEC_NODE_URL value: {{ include "aztec-network.bootNodeUrl" . | quote }} + - name: LOG_JSON + value: "1" + - name: LOG_LEVEL + value: "{{ .Values.pxe.logLevel }}" + - name: DEBUG + value: "{{ .Values.pxe.debug }}" ports: - name: http containerPort: {{ .Values.pxe.service.port }} @@ -50,4 +56,23 @@ spec: successThreshold: {{ .Values.pxe.readinessProbe.successThreshold }} failureThreshold: {{ .Values.pxe.readinessProbe.failureThreshold }} resources: - {{- toYaml .Values.pxe.resources | nindent 12 }} \ No newline at end of file + {{- toYaml .Values.pxe.resources | nindent 12 }} +--- +apiVersion: v1 +kind: Service +metadata: + name: {{ include "aztec-network.fullname" . }}-pxe + labels: + {{- include "aztec-network.labels" . | nindent 4 }} +spec: + type: {{ .Values.pxe.service.type }} + selector: + {{- include "aztec-network.selectorLabels" . | nindent 4 }} + app: pxe + ports: + - protocol: TCP + port: {{ .Values.pxe.service.port }} + targetPort: {{ .Values.pxe.service.targetPort }} + {{- if and (eq .Values.pxe.service.type "NodePort") .Values.pxe.service.nodePort }} + nodePort: {{ .Values.pxe.service.nodePort }} + {{- end }} \ No newline at end of file diff --git a/helm-charts/aztec-network/templates/tests/run-tests.yaml b/spartan/aztec-network/templates/tests/run-tests.yaml similarity index 76% rename from helm-charts/aztec-network/templates/tests/run-tests.yaml rename to spartan/aztec-network/templates/tests/run-tests.yaml index 2608b24ffbe..bc32cfd7b00 100644 --- a/helm-charts/aztec-network/templates/tests/run-tests.yaml +++ b/spartan/aztec-network/templates/tests/run-tests.yaml @@ -17,3 +17,9 @@ spec: value: {{ .Values.scenario }} - name: PXE_URL value: {{ include "aztec-network.pxeUrl" . | quote }} + - name: DEBUG + value: "aztec:*" + - name: LOG_LEVEL + value: "debug" + - name: LOG_JSON + value: "1" diff --git a/spartan/aztec-network/templates/transaction-bot.yaml b/spartan/aztec-network/templates/transaction-bot.yaml new file mode 100644 index 00000000000..e1d191271a4 --- /dev/null +++ b/spartan/aztec-network/templates/transaction-bot.yaml @@ -0,0 +1,102 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "aztec-network.fullname" . }}-bot + labels: + app: {{- include "aztec-network.labels" . | nindent 4 }} +spec: + replicas: {{ .Values.bot.replicas }} + selector: + matchLabels: + app: {{- include "aztec-network.selectorLabels" . | nindent 6 }} + app: bot + template: + metadata: + labels: + {{- include "aztec-network.selectorLabels" . | nindent 8 }} + app: bot + spec: + initContainers: + - name: wait-for-aztec-node + image: "{{ .Values.images.curl.image }}" + command: + - /bin/sh + - -c + - | + until curl -s {{ include "aztec-network.bootNodeUrl" . }}/status; do echo waiting for aztec-node; sleep 2; done + containers: + - name: aztec + image: "{{ .Values.images.aztec.image }}" + command: + - "/bin/bash" + - "-c" + - > + node --no-warnings /usr/src/yarn-project/aztec/dest/bin/index.js start --pxe --bot + env: + - name: ETHEREUM_HOST + value: {{ include "aztec-network.ethereumHost" . | quote }} + - name: AZTEC_NODE_URL + value: {{ include "aztec-network.bootNodeUrl" . | quote }} + - name: LOG_JSON + value: "1" + - name: LOG_LEVEL + value: "{{ .Values.bot.logLevel }}" + - name: DEBUG + value: "{{ .Values.bot.debug }}" + - name: BOT_PRIVATE_KEY + value: "{{ .Values.bot.botPrivateKey }}" + - name: BOT_TX_INTERVAL_SECONDS + value: "{{ .Values.bot.txIntervalSeconds }}" + - name: BOT_PRIVATE_TRANSFERS_PER_TX + value: "{{ .Values.bot.privateTransfersPerTx }}" + - name: BOT_PUBLIC_TRANSFERS_PER_TX + value: "{{ .Values.bot.publicTransfersPerTx }}" + - name: BOT_NO_WAIT_FOR_TRANSFERS + value: "{{ .Values.bot.noWaitForTransfers }}" + - name: BOT_NO_START + value: "{{ .Values.bot.botNoStart }}" + - name: PXE_PROVER_ENABLED + value: "{{ .Values.bot.pxeProverEnabled }}" + - name: PROVER_REAL_PROOFS + value: "{{ .Values.bot.proverRealProofs }}" + ports: + - name: http + containerPort: {{ .Values.bot.service.port }} + protocol: TCP + readinessProbe: + exec: + command: + - /bin/bash + - -c + - | + curl -s -X POST -H 'content-type: application/json' \ + -d '{"jsonrpc":"2.0","method":"pxe_getNodeInfo","params":[],"id":67}' \ + 127.0.0.1:{{ .Values.bot.service.port }} > /tmp/probe_output.txt && \ + cat /tmp/probe_output.txt && \ + grep -q '"enr:-' /tmp/probe_output.txt + initialDelaySeconds: {{ .Values.bot.readinessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.bot.readinessProbe.periodSeconds }} + timeoutSeconds: {{ .Values.bot.readinessProbe.timeoutSeconds }} + successThreshold: {{ .Values.bot.readinessProbe.successThreshold }} + failureThreshold: {{ .Values.bot.readinessProbe.failureThreshold }} + resources: + {{- toYaml .Values.bot.resources | nindent 12 }} +--- +apiVersion: v1 +kind: Service +metadata: + name: {{ include "aztec-network.fullname" . }}-bot + labels: + {{- include "aztec-network.labels" . | nindent 4 }} +spec: + type: {{ .Values.bot.service.type }} + selector: + {{- include "aztec-network.selectorLabels" . | nindent 4 }} + app: bot + ports: + - protocol: TCP + port: {{ .Values.bot.service.port }} + targetPort: {{ .Values.bot.service.targetPort }} + {{- if and (eq .Values.bot.service.type "NodePort") .Values.bot.service.nodePort }} + nodePort: {{ .Values.bot.service.nodePort }} + {{- end }} \ No newline at end of file diff --git a/helm-charts/aztec-network/templates/validator.stateful-set.yaml b/spartan/aztec-network/templates/validator.yaml similarity index 90% rename from helm-charts/aztec-network/templates/validator.stateful-set.yaml rename to spartan/aztec-network/templates/validator.yaml index fec535503c3..d6de0f2d5f4 100644 --- a/helm-charts/aztec-network/templates/validator.stateful-set.yaml +++ b/spartan/aztec-network/templates/validator.yaml @@ -59,6 +59,8 @@ spec: value: "{{ .Values.validator.service.nodePort }}" - name: LOG_LEVEL value: "{{ .Values.validator.logLevel }}" + - name: LOG_JSON + value: "1" - name: DEBUG value: "{{ .Values.validator.debug }}" - name: ETHEREUM_HOST @@ -105,3 +107,20 @@ metadata: data: configure-validator-env.sh: | {{ .Files.Get "files/config/config-validator-env.sh" | nindent 4 }} +--- +apiVersion: v1 +kind: Service +metadata: + name: {{ include "aztec-network.fullname" . }}-validator + labels: + {{- include "aztec-network.labels" . | nindent 4 }} +spec: + clusterIP: None + selector: + {{- include "aztec-network.selectorLabels" . | nindent 4 }} + app: validator + ports: + - port: {{ .Values.validator.service.p2pPort }} + name: p2p + - port: {{ .Values.validator.service.nodePort }} + name: node \ No newline at end of file diff --git a/helm-charts/aztec-network/values.yaml b/spartan/aztec-network/values.yaml similarity index 82% rename from helm-charts/aztec-network/values.yaml rename to spartan/aztec-network/values.yaml index 13acf19ddbe..c422508b7ff 100644 --- a/helm-charts/aztec-network/values.yaml +++ b/spartan/aztec-network/values.yaml @@ -67,7 +67,33 @@ proverNode: resources: {} pxe: + logLevel: "debug" + debug: "aztec:*" + replicas: 1 + service: + type: ClusterIP + port: 8080 + targetPort: 8080 + readinessProbe: + initialDelaySeconds: 5 + periodSeconds: 10 + timeoutSeconds: 5 + successThreshold: 1 + failureThreshold: 3 + resources: {} + +bot: + logLevel: "debug" + debug: "aztec:*" replicas: 1 + botPrivateKey: "0xcafe" + txIntervalSeconds: 5 + privateTransfersPerTx: 1 + publicTransfersPerTx: 0 + noWaitForTransfers: true + botNoStart: false + pxeProverEnabled: false + proverRealProofs: false service: type: ClusterIP port: 8080 diff --git a/helm-charts/aztec-network/values/3-validators.yaml b/spartan/aztec-network/values/3-validators.yaml similarity index 100% rename from helm-charts/aztec-network/values/3-validators.yaml rename to spartan/aztec-network/values/3-validators.yaml diff --git a/helm-charts/aztec-network/values/default.yaml b/spartan/aztec-network/values/default.yaml similarity index 100% rename from helm-charts/aztec-network/values/default.yaml rename to spartan/aztec-network/values/default.yaml diff --git a/spartan/metrics/.helmignore b/spartan/metrics/.helmignore new file mode 100644 index 00000000000..0e8a0eb36f4 --- /dev/null +++ b/spartan/metrics/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/spartan/metrics/Chart.lock b/spartan/metrics/Chart.lock new file mode 100644 index 00000000000..85b5ec4e110 --- /dev/null +++ b/spartan/metrics/Chart.lock @@ -0,0 +1,9 @@ +dependencies: +- name: opentelemetry-collector + repository: https://open-telemetry.github.io/opentelemetry-helm-charts + version: 0.104.0 +- name: eck-stack + repository: https://helm.elastic.co + version: 0.12.1 +digest: sha256:e95083de14387953eb4093eb2c6b98cf889e532cd097b21b15b1896cfa117e7c +generated: "2024-09-06T19:31:29.086654335-04:00" diff --git a/spartan/metrics/Chart.yaml b/spartan/metrics/Chart.yaml new file mode 100644 index 00000000000..04a896c0fce --- /dev/null +++ b/spartan/metrics/Chart.yaml @@ -0,0 +1,32 @@ +apiVersion: v2 +name: metrics +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "1.16.0" + +dependencies: + - name: opentelemetry-collector + version: 0.104.0 + repository: https://open-telemetry.github.io/opentelemetry-helm-charts + - name: eck-stack + version: 0.12.1 + repository: https://helm.elastic.co diff --git a/spartan/metrics/values.yaml b/spartan/metrics/values.yaml new file mode 100644 index 00000000000..d792b7d9fee --- /dev/null +++ b/spartan/metrics/values.yaml @@ -0,0 +1,76 @@ +opentelemetry-collector: + extraEnvs: + - name: ELASTICSEARCH_PASSWORD + valueFrom: + secretKeyRef: + name: elasticsearch-es-elastic-user + key: elastic + + mode: daemonset + + image: + repository: "otel/opentelemetry-collector-contrib" + + presets: + logsCollection: + enabled: true + includeCollectorLogs: true + kubernetesAttributes: + enabled: true + config: + exporters: + debug: {} + elasticsearch: + endpoint: "https://elasticsearch-es-http.metrics.svc:9200/" + tls: + insecure_skip_verify: true + auth: + authenticator: basicauth + extensions: + basicauth: + client_auth: + username: elastic + password: ${ELASTICSEARCH_PASSWORD} + # The health_check extension is mandatory for this chart. + # Without the health_check extension the collector will fail the readiness and liveliness probes. + # The health_check extension can be modified, but should never be removed. + health_check: + endpoint: ${env:MY_POD_IP}:13133 + processors: + batch: {} + transform: + error_mode: ignore + log_statements: + - context: log + statements: + - merge_maps(attributes, ParseJSON(body), "upsert") where IsMatch(body, "^\\{") + # https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/pkg/ottl/contexts/ottllog + - set(severity_number, 1) where attributes["level"] == "trace" + - set(severity_number, 5) where attributes["level"] == "debug" + - set(severity_number, 9) where attributes["level"] == "info" + - set(severity_number, 13) where attributes["level"] == "warn" + - set(severity_number, 17) where attributes["level"] == "error" + - set(severity_number, 21) where attributes["level"] == "fatal" + - set(body, attributes["message"]) + - set(attributes["level"], nil) + - set(attributes["message"], nil) + receivers: + otlp: + protocols: + http: + endpoint: ${env:MY_POD_IP}:4318 + service: + extensions: [basicauth, health_check] + telemetry: + metrics: + address: ${env:MY_POD_IP}:8888 + pipelines: + logs: + exporters: + - elasticsearch + - debug + processors: + - transform + - batch + receivers: + - otlp diff --git a/yarn-project/end-to-end/scripts/create_k8s_dashboard.sh b/spartan/scripts/create_k8s_dashboard.sh similarity index 100% rename from yarn-project/end-to-end/scripts/create_k8s_dashboard.sh rename to spartan/scripts/create_k8s_dashboard.sh diff --git a/yarn-project/end-to-end/scripts/forward_k8s_dashboard.sh b/spartan/scripts/forward_k8s_dashboard.sh similarity index 100% rename from yarn-project/end-to-end/scripts/forward_k8s_dashboard.sh rename to spartan/scripts/forward_k8s_dashboard.sh diff --git a/spartan/scripts/install_eck_operator.sh b/spartan/scripts/install_eck_operator.sh new file mode 100755 index 00000000000..5923893ea61 --- /dev/null +++ b/spartan/scripts/install_eck_operator.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +set -ex + +version=2.14.0 + +kubectl create -f https://download.elastic.co/downloads/eck/$version/crds.yaml +kubectl apply -f https://download.elastic.co/downloads/eck/$version/operator.yaml diff --git a/yarn-project/end-to-end/scripts/setup_local_k8s.sh b/spartan/scripts/setup_local_k8s.sh similarity index 100% rename from yarn-project/end-to-end/scripts/setup_local_k8s.sh rename to spartan/scripts/setup_local_k8s.sh diff --git a/spartan/terraform/main.tf b/spartan/terraform/main.tf new file mode 100644 index 00000000000..8174abc71be --- /dev/null +++ b/spartan/terraform/main.tf @@ -0,0 +1,125 @@ +# Configure the AWS Provider +provider "aws" { + region = "us-east-2" # Change this to your preferred region +} + +# Create VPC for EKS +resource "aws_vpc" "spartan_vpc" { + cidr_block = "10.0.0.0/16" + + tags = { + Name = "spartan-vpc" + } +} + +# Create an internet gateway +resource "aws_internet_gateway" "spartan_igw" { + vpc_id = aws_vpc.spartan_vpc.id + + tags = { + Name = "spartan-igw" + } +} + +# Create a subnet +resource "aws_subnet" "spartan_subnet" { + vpc_id = aws_vpc.spartan_vpc.id + cidr_block = "10.0.1.0/24" + availability_zone = "us-east-2a" # Change this to match your region + + tags = { + Name = "spartan-subnet" + } +} + +# Create EKS Cluster +resource "aws_eks_cluster" "spartan_cluster" { + name = "spartan-cluster" + role_arn = aws_iam_role.spartan_cluster_role.arn + + vpc_config { + subnet_ids = [aws_subnet.spartan_subnet.id] + } + + depends_on = [aws_iam_role_policy_attachment.spartan_cluster_policy] +} + +# Create IAM role for EKS Cluster +resource "aws_iam_role" "spartan_cluster_role" { + name = "spartan-cluster-role" + + assume_role_policy = jsonencode({ + Version = "2012-10-17" + Statement = [ + { + Action = "sts:AssumeRole" + Effect = "Allow" + Principal = { + Service = "eks.amazonaws.com" + } + } + ] + }) +} + +# Attach necessary policies to the EKS Cluster role +resource "aws_iam_role_policy_attachment" "spartan_cluster_policy" { + policy_arn = "arn:aws:iam::aws:policy/AmazonEKSClusterPolicy" + role = aws_iam_role.spartan_cluster_role.name +} + +# Create EKS Node Group +resource "aws_eks_node_group" "spartan_node_group" { + cluster_name = aws_eks_cluster.spartan_cluster.name + node_group_name = "spartan-node-group" + node_role_arn = aws_iam_role.spartan_node_role.arn + subnet_ids = [aws_subnet.spartan_subnet.id] + + scaling_config { + desired_size = 1 + max_size = 1 + min_size = 1 + } + + instance_types = ["t4g.2xlarge"] + + depends_on = [ + aws_iam_role_policy_attachment.spartan_worker_node_policy, + aws_iam_role_policy_attachment.spartan_cni_policy, + aws_iam_role_policy_attachment.spartan_ecr_policy, + ] +} + +# Create IAM role for EKS Node Group +resource "aws_iam_role" "spartan_node_role" { + name = "spartan-node-role" + + assume_role_policy = jsonencode({ + Version = "2012-10-17" + Statement = [ + { + Action = "sts:AssumeRole" + Effect = "Allow" + Principal = { + Service = "ec2.amazonaws.com" + } + } + ] + }) +} + +# Attach necessary policies to the EKS Node role +resource "aws_iam_role_policy_attachment" "spartan_worker_node_policy" { + policy_arn = "arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy" + role = aws_iam_role.spartan_node_role.name +} + +resource "aws_iam_role_policy_attachment" "spartan_cni_policy" { + policy_arn = "arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy" + role = aws_iam_role.spartan_node_role.name +} + +resource "aws_iam_role_policy_attachment" "spartan_ecr_policy" { + policy_arn = "arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly" + role = aws_iam_role.spartan_node_role.name +} \ No newline at end of file diff --git a/yarn-project/Dockerfile b/yarn-project/Dockerfile index aab2df6860e..c461e952d2a 100644 --- a/yarn-project/Dockerfile +++ b/yarn-project/Dockerfile @@ -62,5 +62,5 @@ ENV COMMIT_TAG=$COMMIT_TAG COPY --from=builder /usr/src /usr/src WORKDIR /usr/src/yarn-project # add curl to be able to download CRS file -RUN apt update && apt install -y curl +RUN apt update && apt install -y curl jq ENTRYPOINT ["yarn"] diff --git a/yarn-project/Earthfile b/yarn-project/Earthfile index ec298067247..17600ddb1c0 100644 --- a/yarn-project/Earthfile +++ b/yarn-project/Earthfile @@ -123,7 +123,7 @@ rollup-verifier-contract: txe: FROM +cli-base - RUN yarn workspaces focus @aztec/txe --production && yarn cache clean + RUN yarn workspaces focus @aztec/txe && yarn cache clean ENTRYPOINT ["node", "--no-warnings", "/usr/src/yarn-project/txe/dest/bin/index.js"] SAVE ARTIFACT /usr/src /usr/src diff --git a/yarn-project/README.md b/yarn-project/README.md index d3da1172535..9c4c5010812 100644 --- a/yarn-project/README.md +++ b/yarn-project/README.md @@ -86,6 +86,6 @@ COMMIT_TAG= - Extract `VERSION` as the script shows (in the eg it should be 0.8.8) - Skip the version existing checks like `if [ "$VERSION" == "$PUBLISHED_VERSION" ]` and `if [ "$VERSION" != "$HIGHER_VERSION" ]`. Since this is our first time deploying the package, `PUBLISHED_VERSION` and `HIGHER_VERSION` will be empty and hence these checks would fail. These checks are necessary in the CI for continual releases. - Locally update the package version in package.json using `jq` as shown in the script. - - Do a dry-run + - Do a dry-run - If dry run succeeds, publish the package! 5. Create a PR by adding your package into the `deploy-npm` script so next release onwards, CI can cut releases for your package. diff --git a/yarn-project/archiver/src/archiver/archiver.test.ts b/yarn-project/archiver/src/archiver/archiver.test.ts index 9b9232b0ddb..0ec87a3b780 100644 --- a/yarn-project/archiver/src/archiver/archiver.test.ts +++ b/yarn-project/archiver/src/archiver/archiver.test.ts @@ -5,11 +5,13 @@ import { LogType, UnencryptedL2BlockL2Logs, } from '@aztec/circuit-types'; +import { GENESIS_ARCHIVE_ROOT } from '@aztec/circuits.js'; import { EthAddress } from '@aztec/foundation/eth-address'; import { Fr } from '@aztec/foundation/fields'; import { sleep } from '@aztec/foundation/sleep'; import { type InboxAbi, RollupAbi } from '@aztec/l1-artifacts'; +import { jest } from '@jest/globals'; import { type MockProxy, mock } from 'jest-mock-extended'; import { type Chain, @@ -26,6 +28,12 @@ import { type ArchiverDataStore } from './archiver_store.js'; import { type ArchiverInstrumentation } from './instrumentation.js'; import { MemoryArchiverStore } from './memory_archiver_store/memory_archiver_store.js'; +interface MockRollupContractRead { + archiveAt: (args: readonly [bigint]) => Promise<`0x${string}`>; + getProvenBlockNumber: () => Promise; + status: (args: readonly [bigint]) => Promise<[bigint, `0x${string}`, bigint, `0x${string}`, `0x${string}`]>; +} + describe('Archiver', () => { const rollupAddress = EthAddress.ZERO; const inboxAddress = EthAddress.ZERO; @@ -35,10 +43,13 @@ describe('Archiver', () => { let publicClient: MockProxy>; let instrumentation: MockProxy; let archiverStore: ArchiverDataStore; - let proverId: Fr; let now: number; + let rollupRead: MockProxy; let archiver: Archiver; + let blocks: L2Block[]; + + const GENESIS_ROOT = new Fr(GENESIS_ARCHIVE_ROOT).toString(); beforeEach(() => { now = +new Date(); @@ -47,16 +58,10 @@ describe('Archiver', () => { timestamp: args.blockNumber * 1000n + BigInt(now), })) as any, }); + instrumentation = mock({ isEnabled: () => true }); archiverStore = new MemoryArchiverStore(1000); - proverId = Fr.random(); - }); - afterEach(async () => { - await archiver?.stop(); - }); - - it('can start, sync and stop and handle l1 to l2 messages and logs', async () => { archiver = new Archiver( publicClient, rollupAddress, @@ -67,21 +72,39 @@ describe('Archiver', () => { instrumentation, ); + blocks = blockNumbers.map(x => L2Block.random(x, 4, x, x + 1, 2, 2)); + + rollupRead = mock({ + archiveAt: (args: readonly [bigint]) => Promise.resolve(blocks[Number(args[0] - 1n)].archive.root.toString()), + }); + + ((archiver as any).rollup as any).read = rollupRead; + }); + + afterEach(async () => { + await archiver?.stop(); + }); + + it('can start, sync and stop and handle l1 to l2 messages and logs', async () => { let latestBlockNum = await archiver.getBlockNumber(); expect(latestBlockNum).toEqual(0); - const blocks = blockNumbers.map(x => L2Block.random(x, 4, x, x + 1, 2, 2)); blocks.forEach((b, i) => (b.header.globalVariables.timestamp = new Fr(now + 1000 * (i + 1)))); const rollupTxs = blocks.map(makeRollupTx); publicClient.getBlockNumber.mockResolvedValueOnce(2500n).mockResolvedValueOnce(2600n).mockResolvedValueOnce(2700n); + rollupRead.status + .mockResolvedValueOnce([0n, GENESIS_ROOT, 1n, blocks[0].archive.root.toString(), GENESIS_ROOT]) + .mockResolvedValue([0n, GENESIS_ROOT, 3n, blocks[2].archive.root.toString(), blocks[0].archive.root.toString()]); + mockGetLogs({ messageSent: [makeMessageSentEvent(98n, 1n, 0n), makeMessageSentEvent(99n, 1n, 1n)], - L2BlockProposed: [makeL2BlockProposedEvent(101n, 1n)], - proofVerified: [makeProofVerifiedEvent(102n, 1n, proverId)], + L2BlockProposed: [makeL2BlockProposedEvent(101n, 1n, blocks[0].archive.root.toString())], }); + rollupRead.getProvenBlockNumber.mockResolvedValueOnce(1n); + mockGetLogs({ messageSent: [ makeMessageSentEvent(2504n, 2n, 0n), @@ -89,7 +112,10 @@ describe('Archiver', () => { makeMessageSentEvent(2505n, 2n, 2n), makeMessageSentEvent(2506n, 3n, 1n), ], - L2BlockProposed: [makeL2BlockProposedEvent(2510n, 2n), makeL2BlockProposedEvent(2520n, 3n)], + L2BlockProposed: [ + makeL2BlockProposedEvent(2510n, 2n, blocks[1].archive.root.toString()), + makeL2BlockProposedEvent(2520n, 3n, blocks[2].archive.root.toString()), + ], }); publicClient.getTransaction.mockResolvedValueOnce(rollupTxs[0]); @@ -160,65 +186,106 @@ describe('Archiver', () => { // Check getting only proven blocks expect((await archiver.getBlocks(1, 100)).map(b => b.number)).toEqual([1, 2, 3]); expect((await archiver.getBlocks(1, 100, true)).map(b => b.number)).toEqual([1]); - - // Check instrumentation of proven blocks - expect(instrumentation.processProofsVerified).toHaveBeenCalledWith([ - { delay: 1000n, l1BlockNumber: 102n, l2BlockNumber: 1n, proverId: proverId.toString() }, - ]); }, 10_000); - it('does not sync past current block number', async () => { - const numL2BlocksInTest = 2; - archiver = new Archiver( - publicClient, - rollupAddress, - inboxAddress, - registryAddress, - archiverStore, - 1000, - instrumentation, - ); + it('ignores block 3 because it have been pruned (simulate pruning)', async () => { + const loggerSpy = jest.spyOn((archiver as any).log, 'warn'); let latestBlockNum = await archiver.getBlockNumber(); expect(latestBlockNum).toEqual(0); - const blocks = blockNumbers.map(x => L2Block.random(x, 4, x, x + 1, 2, 2)); + const numL2BlocksInTest = 2; const rollupTxs = blocks.map(makeRollupTx); // Here we set the current L1 block number to 102. L1 to L2 messages after this should not be read. publicClient.getBlockNumber.mockResolvedValue(102n); + const badArchive = Fr.random().toString(); + + rollupRead.status.mockResolvedValue([0n, GENESIS_ROOT, 2n, blocks[1].archive.root.toString(), GENESIS_ROOT]); + mockGetLogs({ messageSent: [makeMessageSentEvent(66n, 1n, 0n), makeMessageSentEvent(68n, 1n, 1n)], - L2BlockProposed: [makeL2BlockProposedEvent(70n, 1n), makeL2BlockProposedEvent(80n, 2n)], + L2BlockProposed: [ + makeL2BlockProposedEvent(70n, 1n, blocks[0].archive.root.toString()), + makeL2BlockProposedEvent(80n, 2n, blocks[1].archive.root.toString()), + makeL2BlockProposedEvent(90n, 3n, badArchive), + ], }); - mockGetLogs({}); + rollupTxs.forEach(tx => publicClient.getTransaction.mockResolvedValueOnce(tx)); - rollupTxs.slice(0, numL2BlocksInTest).forEach(tx => publicClient.getTransaction.mockResolvedValueOnce(tx)); + await archiver.start(false); + + while ((await archiver.getBlockNumber()) !== numL2BlocksInTest) { + await sleep(100); + } + + latestBlockNum = await archiver.getBlockNumber(); + expect(latestBlockNum).toEqual(numL2BlocksInTest); + const errorMessage = `Archive mismatch matching, ignoring block ${3} with archive: ${badArchive}, expected ${blocks[2].archive.root.toString()}`; + expect(loggerSpy).toHaveBeenCalledWith(errorMessage); + }, 10_000); + + it('skip event search if not blocks found', async () => { + const loggerSpy = jest.spyOn((archiver as any).log, 'verbose'); + + let latestBlockNum = await archiver.getBlockNumber(); + expect(latestBlockNum).toEqual(0); + + const numL2BlocksInTest = 2; + + const rollupTxs = blocks.map(makeRollupTx); + + publicClient.getBlockNumber.mockResolvedValueOnce(50n).mockResolvedValueOnce(100n); + rollupRead.status + .mockResolvedValueOnce([0n, GENESIS_ROOT, 0n, GENESIS_ROOT, GENESIS_ROOT]) + .mockResolvedValueOnce([0n, GENESIS_ROOT, 2n, blocks[1].archive.root.toString(), GENESIS_ROOT]); + + // This can look slightly odd, but we will need to do an empty request for the messages, and will entirely skip + // a call to the proposed blocks because of changes with status. + mockGetLogs({ + messageSent: [], + }); + mockGetLogs({ + messageSent: [makeMessageSentEvent(66n, 1n, 0n), makeMessageSentEvent(68n, 1n, 1n)], + L2BlockProposed: [ + makeL2BlockProposedEvent(70n, 1n, blocks[0].archive.root.toString()), + makeL2BlockProposedEvent(80n, 2n, blocks[1].archive.root.toString()), + ], + }); + + rollupTxs.forEach(tx => publicClient.getTransaction.mockResolvedValueOnce(tx)); await archiver.start(false); - // Wait until block 3 is processed. If this won't happen the test will fail with timeout. while ((await archiver.getBlockNumber()) !== numL2BlocksInTest) { await sleep(100); } latestBlockNum = await archiver.getBlockNumber(); expect(latestBlockNum).toEqual(numL2BlocksInTest); + + // For some reason, this is 1-indexed. + expect(loggerSpy).toHaveBeenNthCalledWith( + 1, + `Retrieved no new L1 -> L2 messages between L1 blocks ${1n} and ${50}.`, + ); + expect(loggerSpy).toHaveBeenNthCalledWith(2, `No blocks to retrieve from ${1n} to ${50n}`); }, 10_000); // logs should be created in order of how archiver syncs. const mockGetLogs = (logs: { messageSent?: ReturnType[]; L2BlockProposed?: ReturnType[]; - proofVerified?: ReturnType[]; }) => { - publicClient.getLogs - .mockResolvedValueOnce(logs.messageSent ?? []) - .mockResolvedValueOnce(logs.L2BlockProposed ?? []) - .mockResolvedValueOnce(logs.proofVerified ?? []); + if (logs.messageSent) { + publicClient.getLogs.mockResolvedValueOnce(logs.messageSent); + } + if (logs.L2BlockProposed) { + publicClient.getLogs.mockResolvedValueOnce(logs.L2BlockProposed); + } }; }); @@ -228,10 +295,10 @@ describe('Archiver', () => { * @param l2BlockNum - L2 Block number. * @returns An L2BlockProposed event log. */ -function makeL2BlockProposedEvent(l1BlockNum: bigint, l2BlockNum: bigint) { +function makeL2BlockProposedEvent(l1BlockNum: bigint, l2BlockNum: bigint, archive: `0x${string}`) { return { blockNumber: l1BlockNum, - args: { blockNumber: l2BlockNum }, + args: { blockNumber: l2BlockNum, archive }, transactionHash: `0x${l2BlockNum}`, } as Log; } @@ -254,16 +321,6 @@ function makeMessageSentEvent(l1BlockNum: bigint, l2BlockNumber: bigint, index: } as Log; } -function makeProofVerifiedEvent(l1BlockNum: bigint, l2BlockNumber: bigint, proverId: Fr) { - return { - blockNumber: l1BlockNum, - args: { - blockNumber: l2BlockNumber, - proverId: proverId.toString(), - }, - } as Log; -} - /** * Makes a fake rollup tx for testing purposes. * @param block - The L2Block. diff --git a/yarn-project/archiver/src/archiver/archiver.ts b/yarn-project/archiver/src/archiver/archiver.ts index 5015c0a1e35..6a3bd3c57d7 100644 --- a/yarn-project/archiver/src/archiver/archiver.ts +++ b/yarn-project/archiver/src/archiver/archiver.ts @@ -1,6 +1,7 @@ import { type FromLogType, type GetUnencryptedLogsResponse, + type InboxLeaf, type L1ToL2MessageSource, type L2Block, type L2BlockL2Logs, @@ -13,23 +14,24 @@ import { type TxReceipt, type UnencryptedL2Log, } from '@aztec/circuit-types'; -import { ContractClassRegisteredEvent, type FunctionSelector } from '@aztec/circuits.js'; import { + ContractClassRegisteredEvent, ContractInstanceDeployedEvent, + type FunctionSelector, PrivateFunctionBroadcastedEvent, UnconstrainedFunctionBroadcastedEvent, isValidPrivateFunctionMembershipProof, isValidUnconstrainedFunctionMembershipProof, -} from '@aztec/circuits.js/contract'; +} from '@aztec/circuits.js'; import { createEthereumChain } from '@aztec/ethereum'; import { type ContractArtifact } from '@aztec/foundation/abi'; import { type AztecAddress } from '@aztec/foundation/aztec-address'; -import { compactArray, unique } from '@aztec/foundation/collection'; import { type EthAddress } from '@aztec/foundation/eth-address'; import { Fr } from '@aztec/foundation/fields'; import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log'; import { RunningPromise } from '@aztec/foundation/running-promise'; import { Timer } from '@aztec/foundation/timer'; +import { InboxAbi, RollupAbi } from '@aztec/l1-artifacts'; import { ClassRegistererAddress } from '@aztec/protocol-contracts/class-registerer'; import { type TelemetryClient } from '@aztec/telemetry-client'; import { @@ -42,14 +44,22 @@ import { } from '@aztec/types/contracts'; import groupBy from 'lodash.groupby'; -import { type Chain, type HttpTransport, type PublicClient, createPublicClient, http } from 'viem'; - -import { type ArchiverDataStore } from './archiver_store.js'; +import { + type Chain, + type GetContractReturnType, + type HttpTransport, + type PublicClient, + createPublicClient, + getContract, + http, +} from 'viem'; + +import { type ArchiverDataStore, type ArchiverL1SynchPoint } from './archiver_store.js'; import { type ArchiverConfig } from './config.js'; -import { retrieveBlockFromRollup, retrieveL1ToL2Messages, retrieveL2ProofVerifiedEvents } from './data_retrieval.js'; -import { getL1BlockTime } from './eth_log_handlers.js'; +import { retrieveBlockFromRollup, retrieveL1ToL2Messages } from './data_retrieval.js'; import { ArchiverInstrumentation } from './instrumentation.js'; -import { type SingletonDataRetrieval } from './structs/data_retrieval.js'; +import { type DataRetrieval, type SingletonDataRetrieval } from './structs/data_retrieval.js'; +import { type L1Published } from './structs/published.js'; /** * Helper interface to combine all sources this archiver implementation provides. @@ -67,6 +77,11 @@ export class Archiver implements ArchiveSource { */ private runningPromise?: RunningPromise; + private rollup: GetContractReturnType>; + private inbox: GetContractReturnType>; + + private store: ArchiverStoreHelper; + /** * Creates a new instance of the Archiver. * @param publicClient - A client for interacting with the Ethereum node. @@ -80,14 +95,28 @@ export class Archiver implements ArchiveSource { constructor( private readonly publicClient: PublicClient, private readonly rollupAddress: EthAddress, - private readonly inboxAddress: EthAddress, + readonly inboxAddress: EthAddress, private readonly registryAddress: EthAddress, - private readonly store: ArchiverDataStore, + readonly dataStore: ArchiverDataStore, private readonly pollingIntervalMs = 10_000, private readonly instrumentation: ArchiverInstrumentation, private readonly l1StartBlock: bigint = 0n, private readonly log: DebugLogger = createDebugLogger('aztec:archiver'), - ) {} + ) { + this.store = new ArchiverStoreHelper(dataStore); + + this.rollup = getContract({ + address: rollupAddress.toString(), + abi: RollupAbi, + client: publicClient, + }); + + this.inbox = getContract({ + address: inboxAddress.toString(), + abi: InboxAbi, + client: publicClient, + }); + } /** * Creates a new instance of the Archiver and blocks until it syncs from chain. @@ -109,6 +138,14 @@ export class Archiver implements ArchiveSource { pollingInterval: config.viemPollingIntervalMS, }); + const rollup = getContract({ + address: config.l1Contracts.rollupAddress.toString(), + abi: RollupAbi, + client: publicClient, + }); + + const l1StartBlock = await rollup.read.L1_BLOCK_AT_GENESIS(); + const archiver = new Archiver( publicClient, config.l1Contracts.rollupAddress, @@ -117,7 +154,7 @@ export class Archiver implements ArchiveSource { archiverStore, config.archiverPollingIntervalMS, new ArchiverInstrumentation(telemetry), - BigInt(config.archiverL1StartBlock), + BigInt(l1StartBlock), ); await archiver.start(blockUntilSynced); return archiver; @@ -170,31 +207,12 @@ export class Archiver implements ArchiveSource { * This code does not handle reorgs. */ const { - blockBodiesSynchedTo = this.l1StartBlock, blocksSynchedTo = this.l1StartBlock, messagesSynchedTo = this.l1StartBlock, provenLogsSynchedTo = this.l1StartBlock, } = await this.store.getSynchPoint(); const currentL1BlockNumber = await this.publicClient.getBlockNumber(); - if ( - currentL1BlockNumber <= blocksSynchedTo && - currentL1BlockNumber <= messagesSynchedTo && - currentL1BlockNumber <= blockBodiesSynchedTo && - currentL1BlockNumber <= provenLogsSynchedTo - ) { - // chain hasn't moved forward - // or it's been rolled back - this.log.debug(`Nothing to sync`, { - currentL1BlockNumber, - blocksSynchedTo, - messagesSynchedTo, - provenLogsSynchedTo, - blockBodiesSynchedTo, - }); - return; - } - // ********** Ensuring Consistency of data pulled from L1 ********** /** @@ -214,246 +232,129 @@ export class Archiver implements ArchiveSource { * in future but for the time being it should give us the guarantees that we need */ + await this.updateLastProvenL2Block(provenLogsSynchedTo, currentL1BlockNumber); + // ********** Events that are processed per L1 block ********** + await this.handleL1ToL2Messages(blockUntilSynced, messagesSynchedTo, currentL1BlockNumber); + // ********** Events that are processed per L2 block ********** + await this.handleL2blocks(blockUntilSynced, blocksSynchedTo, currentL1BlockNumber); + } + + private async handleL1ToL2Messages( + blockUntilSynced: boolean, + messagesSynchedTo: bigint, + currentL1BlockNumber: bigint, + ) { + if (currentL1BlockNumber <= messagesSynchedTo) { + return; + } const retrievedL1ToL2Messages = await retrieveL1ToL2Messages( - this.publicClient, - this.inboxAddress, + this.inbox, blockUntilSynced, messagesSynchedTo + 1n, currentL1BlockNumber, ); - if (retrievedL1ToL2Messages.retrievedData.length !== 0) { + if (retrievedL1ToL2Messages.retrievedData.length === 0) { + await this.store.setMessageSynchedL1BlockNumber(currentL1BlockNumber); this.log.verbose( - `Retrieved ${retrievedL1ToL2Messages.retrievedData.length} new L1 -> L2 messages between L1 blocks ${ - messagesSynchedTo + 1n - } and ${currentL1BlockNumber}.`, + `Retrieved no new L1 -> L2 messages between L1 blocks ${messagesSynchedTo + 1n} and ${currentL1BlockNumber}.`, ); + return; } await this.store.addL1ToL2Messages(retrievedL1ToL2Messages); - // Read all data from chain and then write to our stores at the end - const nextExpectedL2BlockNum = BigInt((await this.store.getSynchedL2BlockNumber()) + 1); - - this.log.debug(`Retrieving blocks from ${blocksSynchedTo + 1n} to ${currentL1BlockNumber}`); - const retrievedBlocks = await retrieveBlockFromRollup( - this.publicClient, - this.rollupAddress, - blockUntilSynced, - blocksSynchedTo + 1n, - currentL1BlockNumber, - nextExpectedL2BlockNum, - ); - - // Add the body - - (retrievedBlocks.length ? this.log.verbose : this.log.debug)( - `Retrieved ${retrievedBlocks.length || 'no'} new L2 blocks between L1 blocks ${ - blocksSynchedTo + 1n + this.log.verbose( + `Retrieved ${retrievedL1ToL2Messages.retrievedData.length} new L1 -> L2 messages between L1 blocks ${ + messagesSynchedTo + 1n } and ${currentL1BlockNumber}.`, ); - - const lastProcessedL1BlockNumber = - retrievedBlocks.length > 0 ? retrievedBlocks[retrievedBlocks.length - 1].l1.blockNumber : blocksSynchedTo; - - this.log.debug( - `Processing retrieved blocks ${retrievedBlocks - .map(b => b.data.number) - .join(',')} with last processed L1 block ${lastProcessedL1BlockNumber}`, - ); - - if (retrievedBlocks.length > 0) { - await Promise.all( - retrievedBlocks.map(block => { - const noteEncryptedLogs = block.data.body.noteEncryptedLogs; - const encryptedLogs = block.data.body.encryptedLogs; - const unencryptedLogs = block.data.body.unencryptedLogs; - return this.store.addLogs(noteEncryptedLogs, encryptedLogs, unencryptedLogs, block.data.number); - }), - ); - - // Unroll all logs emitted during the retrieved blocks and extract any contract classes and instances from them - await Promise.all( - retrievedBlocks.map(async block => { - const blockLogs = block.data.body.txEffects - .flatMap(txEffect => (txEffect ? [txEffect.unencryptedLogs] : [])) - .flatMap(txLog => txLog.unrollLogs()); - await this.storeRegisteredContractClasses(blockLogs, block.data.number); - await this.storeDeployedContractInstances(blockLogs, block.data.number); - await this.storeBroadcastedIndividualFunctions(blockLogs, block.data.number); - }), - ); - - const timer = new Timer(); - await this.store.addBlockBodies({ - lastProcessedL1BlockNumber: lastProcessedL1BlockNumber, - retrievedData: retrievedBlocks.map(b => b.data.body), - }); - await this.store.addBlocks(retrievedBlocks); - this.instrumentation.processNewBlocks( - timer.ms() / retrievedBlocks.length, - retrievedBlocks.map(b => b.data), - ); - const lastL2BlockNumber = retrievedBlocks[retrievedBlocks.length - 1].data.number; - this.log.verbose(`Processed ${retrievedBlocks.length} new L2 blocks up to ${lastL2BlockNumber}`); - } - - // Fetch the logs for proven blocks in the block range and update the last proven block number. - if (currentL1BlockNumber > provenLogsSynchedTo) { - await this.updateLastProvenL2Block(provenLogsSynchedTo + 1n, currentL1BlockNumber); - } - - if (retrievedBlocks.length > 0 || blockUntilSynced) { - (blockUntilSynced ? this.log.info : this.log.verbose)(`Synced to L1 block ${currentL1BlockNumber}`); - } } - private async updateLastProvenL2Block(fromBlock: bigint, toBlock: bigint) { - const logs = await retrieveL2ProofVerifiedEvents(this.publicClient, this.rollupAddress, fromBlock, toBlock); - const lastLog = logs[logs.length - 1]; - if (!lastLog) { + private async updateLastProvenL2Block(provenSynchedTo: bigint, currentL1BlockNumber: bigint) { + if (currentL1BlockNumber <= provenSynchedTo) { return; } - const provenBlockNumber = lastLog.l2BlockNumber; - if (!provenBlockNumber) { - throw new Error(`Missing argument blockNumber from L2ProofVerified event`); - } - - await this.emitProofVerifiedMetrics(logs); - - const currentProvenBlockNumber = await this.store.getProvenL2BlockNumber(); - if (provenBlockNumber > currentProvenBlockNumber) { - // Update the last proven block number - this.log.verbose(`Updated last proven block number from ${currentProvenBlockNumber} to ${provenBlockNumber}`); + const provenBlockNumber = await this.rollup.read.getProvenBlockNumber(); + if (provenBlockNumber) { await this.store.setProvenL2BlockNumber({ retrievedData: Number(provenBlockNumber), - lastProcessedL1BlockNumber: lastLog.l1BlockNumber, - }); - this.instrumentation.updateLastProvenBlock(Number(provenBlockNumber)); - } else { - // We set the last processed L1 block number to the last L1 block number in the range to avoid duplicate processing - await this.store.setProvenL2BlockNumber({ - retrievedData: Number(currentProvenBlockNumber), - lastProcessedL1BlockNumber: lastLog.l1BlockNumber, + lastProcessedL1BlockNumber: currentL1BlockNumber, }); } } - /** - * Emits as metrics the block number proven, who proved it, and how much time passed since it was submitted. - * @param logs - The ProofVerified logs to emit metrics for, as collected from `retrieveL2ProofVerifiedEvents`. - **/ - private async emitProofVerifiedMetrics(logs: { l1BlockNumber: bigint; l2BlockNumber: bigint; proverId: Fr }[]) { - if (!logs.length || !this.instrumentation.isEnabled()) { + private async handleL2blocks(blockUntilSynced: boolean, blocksSynchedTo: bigint, currentL1BlockNumber: bigint) { + if (currentL1BlockNumber <= blocksSynchedTo) { return; } - const l1BlockTimes = new Map( - await Promise.all( - unique(logs.map(log => log.l1BlockNumber)).map( - async blockNumber => [blockNumber, await getL1BlockTime(this.publicClient, blockNumber)] as const, - ), - ), - ); + const lastBlock = await this.getBlock(-1); - // Collect L2 block times for all the blocks verified, this is the time in which the block proven was - // originally submitted to L1, using the L1 timestamp of the transaction. - const getL2BlockTime = async (blockNumber: bigint) => - (await this.store.getBlocks(Number(blockNumber), 1))[0]?.l1.timestamp; - - const l2BlockTimes = new Map( - await Promise.all( - unique(logs.map(log => log.l2BlockNumber)).map( - async blockNumber => [blockNumber, await getL2BlockTime(blockNumber)] as const, - ), - ), - ); + const [, , pendingBlockNumber, pendingArchive, archiveOfMyBlock] = await this.rollup.read.status([ + BigInt(lastBlock?.number ?? 0), + ]); - // Emit the prover id and the time difference between block submission and proof. - this.instrumentation.processProofsVerified( - compactArray( - logs.map(log => { - const l1BlockTime = l1BlockTimes.get(log.l1BlockNumber)!; - const l2BlockTime = l2BlockTimes.get(log.l2BlockNumber); - if (!l2BlockTime) { - return undefined; - } - return { ...log, delay: l1BlockTime - l2BlockTime, proverId: log.proverId.toString() }; - }), - ), - ); - } + const noBlocksButInitial = lastBlock === undefined && pendingBlockNumber == 0n; + const noBlockSinceLast = + lastBlock && + pendingBlockNumber === BigInt(lastBlock.number) && + pendingArchive === lastBlock.archive.root.toString(); - /** - * Extracts and stores contract classes out of ContractClassRegistered events emitted by the class registerer contract. - * @param allLogs - All logs emitted in a bunch of blocks. - */ - private async storeRegisteredContractClasses(allLogs: UnencryptedL2Log[], blockNum: number) { - const contractClasses = ContractClassRegisteredEvent.fromLogs(allLogs, ClassRegistererAddress).map(e => - e.toContractClassPublic(), - ); - if (contractClasses.length > 0) { - contractClasses.forEach(c => this.log.verbose(`Registering contract class ${c.id.toString()}`)); - await this.store.addContractClasses(contractClasses, blockNum); + if (noBlocksButInitial || noBlockSinceLast) { + await this.store.setBlockSynchedL1BlockNumber(currentL1BlockNumber); + this.log.verbose(`No blocks to retrieve from ${blocksSynchedTo + 1n} to ${currentL1BlockNumber}`); + return; } - } - /** - * Extracts and stores contract instances out of ContractInstanceDeployed events emitted by the canonical deployer contract. - * @param allLogs - All logs emitted in a bunch of blocks. - */ - private async storeDeployedContractInstances(allLogs: UnencryptedL2Log[], blockNum: number) { - const contractInstances = ContractInstanceDeployedEvent.fromLogs(allLogs).map(e => e.toContractInstance()); - if (contractInstances.length > 0) { - contractInstances.forEach(c => this.log.verbose(`Storing contract instance at ${c.address.toString()}`)); - await this.store.addContractInstances(contractInstances, blockNum); + if (lastBlock && archiveOfMyBlock !== lastBlock.archive.root.toString()) { + // @todo Either `prune` have been called, or L1 have re-orged deep enough to remove a block. + // Issue#8620 and Issue#8621 } - } - private async storeBroadcastedIndividualFunctions(allLogs: UnencryptedL2Log[], _blockNum: number) { - // Filter out private and unconstrained function broadcast events - const privateFnEvents = PrivateFunctionBroadcastedEvent.fromLogs(allLogs, ClassRegistererAddress); - const unconstrainedFnEvents = UnconstrainedFunctionBroadcastedEvent.fromLogs(allLogs, ClassRegistererAddress); + this.log.debug(`Retrieving blocks from ${blocksSynchedTo + 1n} to ${currentL1BlockNumber}`); + const retrievedBlocks = await retrieveBlockFromRollup( + this.rollup, + this.publicClient, + blockUntilSynced, + blocksSynchedTo + 1n, + currentL1BlockNumber, + this.log, + ); - // Group all events by contract class id - for (const [classIdString, classEvents] of Object.entries( - groupBy([...privateFnEvents, ...unconstrainedFnEvents], e => e.contractClassId.toString()), - )) { - const contractClassId = Fr.fromString(classIdString); - const contractClass = await this.store.getContractClass(contractClassId); - if (!contractClass) { - this.log.warn(`Skipping broadcasted functions as contract class ${contractClassId.toString()} was not found`); - continue; - } + if (retrievedBlocks.length === 0) { + await this.store.setBlockSynchedL1BlockNumber(currentL1BlockNumber); + this.log.verbose(`Retrieved no new blocks from ${blocksSynchedTo + 1n} to ${currentL1BlockNumber}`); + return; + } - // Split private and unconstrained functions, and filter out invalid ones - const allFns = classEvents.map(e => e.toFunctionWithMembershipProof()); - const privateFns = allFns.filter( - (fn): fn is ExecutablePrivateFunctionWithMembershipProof => 'unconstrainedFunctionsArtifactTreeRoot' in fn, - ); - const unconstrainedFns = allFns.filter( - (fn): fn is UnconstrainedFunctionWithMembershipProof => 'privateFunctionsArtifactTreeRoot' in fn, - ); - const validPrivateFns = privateFns.filter(fn => isValidPrivateFunctionMembershipProof(fn, contractClass)); - const validUnconstrainedFns = unconstrainedFns.filter(fn => - isValidUnconstrainedFunctionMembershipProof(fn, contractClass), - ); - const validFnCount = validPrivateFns.length + validUnconstrainedFns.length; - if (validFnCount !== allFns.length) { - this.log.warn(`Skipping ${allFns.length - validFnCount} invalid functions`); - } + this.log.debug( + `Retrieved ${retrievedBlocks.length} new L2 blocks between L1 blocks ${ + blocksSynchedTo + 1n + } and ${currentL1BlockNumber}.`, + ); - // Store the functions in the contract class in a single operation - if (validFnCount > 0) { - this.log.verbose(`Storing ${validFnCount} functions for contract class ${contractClassId.toString()}`); - } - await this.store.addFunctions(contractClassId, validPrivateFns, validUnconstrainedFns); - } + const lastProcessedL1BlockNumber = retrievedBlocks[retrievedBlocks.length - 1].l1.blockNumber; + + this.log.debug( + `Processing retrieved blocks ${retrievedBlocks + .map(b => b.data.number) + .join(',')} with last processed L1 block ${lastProcessedL1BlockNumber}`, + ); + + const timer = new Timer(); + await this.store.addBlocks(retrievedBlocks); + this.instrumentation.processNewBlocks( + timer.ms() / retrievedBlocks.length, + retrievedBlocks.map(b => b.data), + ); + const lastL2BlockNumber = retrievedBlocks[retrievedBlocks.length - 1].data.number; + this.log.verbose(`Processed ${retrievedBlocks.length} new L2 blocks up to ${lastL2BlockNumber}`); } /** @@ -613,3 +514,174 @@ export class Archiver implements ArchiveSource { return this.store.getContractArtifact(address); } } + +/** + * A helper class that we use to deal with some of the logic needed when adding blocks. + * + * I would have preferred to not have this type. But it is useful for handling the logic that any + * store would need to include otherwise while exposing fewer functions and logic directly to the archiver. + */ +class ArchiverStoreHelper + implements Omit +{ + #log = createDebugLogger('aztec:archiver:block-helper'); + + constructor(private readonly store: ArchiverDataStore) {} + + /** + * Extracts and stores contract classes out of ContractClassRegistered events emitted by the class registerer contract. + * @param allLogs - All logs emitted in a bunch of blocks. + */ + async #storeRegisteredContractClasses(allLogs: UnencryptedL2Log[], blockNum: number) { + const contractClasses = ContractClassRegisteredEvent.fromLogs(allLogs, ClassRegistererAddress).map(e => + e.toContractClassPublic(), + ); + if (contractClasses.length > 0) { + contractClasses.forEach(c => this.#log.verbose(`Registering contract class ${c.id.toString()}`)); + return await this.store.addContractClasses(contractClasses, blockNum); + } + return true; + } + + /** + * Extracts and stores contract instances out of ContractInstanceDeployed events emitted by the canonical deployer contract. + * @param allLogs - All logs emitted in a bunch of blocks. + */ + async #storeDeployedContractInstances(allLogs: UnencryptedL2Log[], blockNum: number) { + const contractInstances = ContractInstanceDeployedEvent.fromLogs(allLogs).map(e => e.toContractInstance()); + if (contractInstances.length > 0) { + contractInstances.forEach(c => this.#log.verbose(`Storing contract instance at ${c.address.toString()}`)); + return await this.store.addContractInstances(contractInstances, blockNum); + } + return true; + } + + async #storeBroadcastedIndividualFunctions(allLogs: UnencryptedL2Log[], _blockNum: number) { + // Filter out private and unconstrained function broadcast events + const privateFnEvents = PrivateFunctionBroadcastedEvent.fromLogs(allLogs, ClassRegistererAddress); + const unconstrainedFnEvents = UnconstrainedFunctionBroadcastedEvent.fromLogs(allLogs, ClassRegistererAddress); + + // Group all events by contract class id + for (const [classIdString, classEvents] of Object.entries( + groupBy([...privateFnEvents, ...unconstrainedFnEvents], e => e.contractClassId.toString()), + )) { + const contractClassId = Fr.fromString(classIdString); + const contractClass = await this.getContractClass(contractClassId); + if (!contractClass) { + this.#log.warn(`Skipping broadcasted functions as contract class ${contractClassId.toString()} was not found`); + continue; + } + + // Split private and unconstrained functions, and filter out invalid ones + const allFns = classEvents.map(e => e.toFunctionWithMembershipProof()); + const privateFns = allFns.filter( + (fn): fn is ExecutablePrivateFunctionWithMembershipProof => 'unconstrainedFunctionsArtifactTreeRoot' in fn, + ); + const unconstrainedFns = allFns.filter( + (fn): fn is UnconstrainedFunctionWithMembershipProof => 'privateFunctionsArtifactTreeRoot' in fn, + ); + const validPrivateFns = privateFns.filter(fn => isValidPrivateFunctionMembershipProof(fn, contractClass)); + const validUnconstrainedFns = unconstrainedFns.filter(fn => + isValidUnconstrainedFunctionMembershipProof(fn, contractClass), + ); + const validFnCount = validPrivateFns.length + validUnconstrainedFns.length; + if (validFnCount !== allFns.length) { + this.#log.warn(`Skipping ${allFns.length - validFnCount} invalid functions`); + } + + // Store the functions in the contract class in a single operation + if (validFnCount > 0) { + this.#log.verbose(`Storing ${validFnCount} functions for contract class ${contractClassId.toString()}`); + } + return await this.store.addFunctions(contractClassId, validPrivateFns, validUnconstrainedFns); + } + return true; + } + + async addBlocks(blocks: L1Published[]): Promise { + return [ + this.store.addLogs(blocks.map(block => block.data)), + // Unroll all logs emitted during the retrieved blocks and extract any contract classes and instances from them + ...(await Promise.all( + blocks.map(async block => { + const blockLogs = block.data.body.txEffects + .flatMap(txEffect => (txEffect ? [txEffect.unencryptedLogs] : [])) + .flatMap(txLog => txLog.unrollLogs()); + + return ( + await Promise.all([ + this.#storeRegisteredContractClasses(blockLogs, block.data.number), + this.#storeDeployedContractInstances(blockLogs, block.data.number), + this.#storeBroadcastedIndividualFunctions(blockLogs, block.data.number), + ]) + ).every(Boolean); + }), + )), + this.store.addBlocks(blocks), + ].every(Boolean); + } + + getBlocks(from: number, limit: number): Promise[]> { + return this.store.getBlocks(from, limit); + } + + getTxEffect(txHash: TxHash): Promise { + return this.store.getTxEffect(txHash); + } + + getSettledTxReceipt(txHash: TxHash): Promise { + return this.store.getSettledTxReceipt(txHash); + } + addL1ToL2Messages(messages: DataRetrieval): Promise { + return this.store.addL1ToL2Messages(messages); + } + getL1ToL2Messages(blockNumber: bigint): Promise { + return this.store.getL1ToL2Messages(blockNumber); + } + getL1ToL2MessageIndex(l1ToL2Message: Fr, startIndex: bigint): Promise { + return this.store.getL1ToL2MessageIndex(l1ToL2Message, startIndex); + } + getLogs( + from: number, + limit: number, + logType: TLogType, + ): Promise>[]> { + return this.store.getLogs(from, limit, logType); + } + getUnencryptedLogs(filter: LogFilter): Promise { + return this.store.getUnencryptedLogs(filter); + } + getSynchedL2BlockNumber(): Promise { + return this.store.getSynchedL2BlockNumber(); + } + getProvenL2BlockNumber(): Promise { + return this.store.getProvenL2BlockNumber(); + } + setProvenL2BlockNumber(l2BlockNumber: SingletonDataRetrieval): Promise { + return this.store.setProvenL2BlockNumber(l2BlockNumber); + } + setBlockSynchedL1BlockNumber(l1BlockNumber: bigint): Promise { + return this.store.setBlockSynchedL1BlockNumber(l1BlockNumber); + } + setMessageSynchedL1BlockNumber(l1BlockNumber: bigint): Promise { + return this.store.setMessageSynchedL1BlockNumber(l1BlockNumber); + } + getSynchPoint(): Promise { + return this.store.getSynchPoint(); + } + getContractClass(id: Fr): Promise { + return this.store.getContractClass(id); + } + getContractInstance(address: AztecAddress): Promise { + return this.store.getContractInstance(address); + } + getContractClassIds(): Promise { + return this.store.getContractClassIds(); + } + addContractArtifact(address: AztecAddress, contract: ContractArtifact): Promise { + return this.store.addContractArtifact(address, contract); + } + getContractArtifact(address: AztecAddress): Promise { + return this.store.getContractArtifact(address); + } +} diff --git a/yarn-project/archiver/src/archiver/archiver_store.ts b/yarn-project/archiver/src/archiver/archiver_store.ts index 2d1f5e52425..1f37181746d 100644 --- a/yarn-project/archiver/src/archiver/archiver_store.ts +++ b/yarn-project/archiver/src/archiver/archiver_store.ts @@ -1,7 +1,4 @@ import { - type Body, - type EncryptedL2BlockL2Logs, - type EncryptedNoteL2BlockL2Logs, type FromLogType, type GetUnencryptedLogsResponse, type InboxLeaf, @@ -12,7 +9,6 @@ import { type TxEffect, type TxHash, type TxReceipt, - type UnencryptedL2BlockL2Logs, } from '@aztec/circuit-types'; import { type Fr } from '@aztec/circuits.js'; import { type ContractArtifact } from '@aztec/foundation/abi'; @@ -33,8 +29,6 @@ import { type L1Published } from './structs/published.js'; export type ArchiverL1SynchPoint = { /** Number of the last L1 block that added a new L2 block metadata. */ blocksSynchedTo?: bigint; - /** Number of the last L1 block that added a new L2 block body. */ - blockBodiesSynchedTo?: bigint; /** Number of the last L1 block that added L1 -> L2 messages from the Inbox. */ messagesSynchedTo?: bigint; /** Number of the last L1 block that added a new proven block. */ @@ -53,21 +47,6 @@ export interface ArchiverDataStore { */ addBlocks(blocks: L1Published[]): Promise; - /** - * Append new block bodies to the store's list. - * @param blockBodies - The L2 block bodies to be added to the store. - * @returns True if the operation is successful. - */ - addBlockBodies(blockBodies: DataRetrieval): Promise; - - /** - * Gets block bodies that have the same txsEffectsHashes as we supply. - * - * @param txsEffectsHashes - A list of txsEffectsHashes. - * @returns The requested L2 block bodies - */ - getBlockBodies(txsEffectsHashes: Buffer[]): Promise<(Body | undefined)[]>; - /** * Gets up to `limit` amount of L2 blocks starting from `from`. * @param from - Number of the first block to return (inclusive). @@ -92,18 +71,10 @@ export interface ArchiverDataStore { /** * Append new logs to the store's list. - * @param noteEncryptedLogs - The note encrypted logs to be added to the store. - * @param encryptedLogs - The encrypted logs to be added to the store. - * @param unencryptedLogs - The unencrypted logs to be added to the store. - * @param blockNumber - The block for which to add the logs. + * @param blocks - The blocks for which to add the logs. * @returns True if the operation is successful. */ - addLogs( - noteEncryptedLogs: EncryptedNoteL2BlockL2Logs | undefined, - encryptedLogs: EncryptedL2BlockL2Logs | undefined, - unencryptedLogs: UnencryptedL2BlockL2Logs | undefined, - blockNumber: number, - ): Promise; + addLogs(blocks: L2Block[]): Promise; /** * Append L1 to L2 messages to the store. @@ -165,6 +136,18 @@ export interface ArchiverDataStore { */ setProvenL2BlockNumber(l2BlockNumber: SingletonDataRetrieval): Promise; + /** + * Stores the l1 block number that blocks have been synched until + * @param l1BlockNumber - The l1 block number + */ + setBlockSynchedL1BlockNumber(l1BlockNumber: bigint): Promise; + + /** + * Stores the l1 block number that messages have been synched until + * @param l1BlockNumber - The l1 block number + */ + setMessageSynchedL1BlockNumber(l1BlockNumber: bigint): Promise; + /** * Gets the synch point of the archiver */ diff --git a/yarn-project/archiver/src/archiver/archiver_store_test_suite.ts b/yarn-project/archiver/src/archiver/archiver_store_test_suite.ts index 48b118a67b8..89a71f46351 100644 --- a/yarn-project/archiver/src/archiver/archiver_store_test_suite.ts +++ b/yarn-project/archiver/src/archiver/archiver_store_test_suite.ts @@ -1,4 +1,4 @@ -import { type Body, InboxLeaf, L2Block, LogId, LogType, TxHash } from '@aztec/circuit-types'; +import { InboxLeaf, L2Block, LogId, LogType, TxHash } from '@aztec/circuit-types'; import '@aztec/circuit-types/jest'; import { AztecAddress, Fr, INITIAL_L2_BLOCK_NUM, L1_TO_L2_MSG_SUBTREE_HEIGHT } from '@aztec/circuits.js'; import { @@ -15,7 +15,6 @@ import { } from '@aztec/types/contracts'; import { type ArchiverDataStore, type ArchiverL1SynchPoint } from './archiver_store.js'; -import { type DataRetrieval } from './structs/data_retrieval.js'; import { type L1Published } from './structs/published.js'; /** @@ -26,7 +25,6 @@ export function describeArchiverDataStore(testName: string, getStore: () => Arch describe(testName, () => { let store: ArchiverDataStore; let blocks: L1Published[]; - let blockBodies: DataRetrieval; const blockTests: [number, number, () => L1Published[]][] = [ [1, 1, () => blocks.slice(0, 1)], [10, 1, () => blocks.slice(9, 10)], @@ -41,17 +39,9 @@ export function describeArchiverDataStore(testName: string, getStore: () => Arch data: L2Block.random(i + 1), l1: { blockNumber: BigInt(i + 10), blockHash: `0x${i}`, timestamp: BigInt(i * 1000) }, })); - blockBodies = { - retrievedData: blocks.map(block => block.data.body), - lastProcessedL1BlockNumber: 4n, - }; }); describe('addBlocks', () => { - it('returns success when adding block bodies', async () => { - await expect(store.addBlockBodies(blockBodies)).resolves.toBe(true); - }); - it('returns success when adding blocks', async () => { await expect(store.addBlocks(blocks)).resolves.toBe(true); }); @@ -65,7 +55,6 @@ export function describeArchiverDataStore(testName: string, getStore: () => Arch describe('getBlocks', () => { beforeEach(async () => { await store.addBlocks(blocks); - await store.addBlockBodies(blockBodies); }); it.each(blockTests)('retrieves previously stored blocks', async (start, limit, getExpectedBlocks) => { @@ -101,7 +90,6 @@ export function describeArchiverDataStore(testName: string, getStore: () => Arch await expect(store.getSynchPoint()).resolves.toEqual({ blocksSynchedTo: undefined, messagesSynchedTo: undefined, - blockBodiesSynchedTo: undefined, provenLogsSynchedTo: undefined, } satisfies ArchiverL1SynchPoint); }); @@ -111,17 +99,6 @@ export function describeArchiverDataStore(testName: string, getStore: () => Arch await expect(store.getSynchPoint()).resolves.toEqual({ blocksSynchedTo: 19n, messagesSynchedTo: undefined, - blockBodiesSynchedTo: undefined, - provenLogsSynchedTo: undefined, - } satisfies ArchiverL1SynchPoint); - }); - - it('returns the L1 block number in which the most recent L2 block body was published', async () => { - await store.addBlockBodies(blockBodies); - await expect(store.getSynchPoint()).resolves.toEqual({ - blocksSynchedTo: undefined, - messagesSynchedTo: undefined, - blockBodiesSynchedTo: blockBodies.lastProcessedL1BlockNumber, provenLogsSynchedTo: undefined, } satisfies ArchiverL1SynchPoint); }); @@ -134,7 +111,6 @@ export function describeArchiverDataStore(testName: string, getStore: () => Arch await expect(store.getSynchPoint()).resolves.toEqual({ blocksSynchedTo: undefined, messagesSynchedTo: 1n, - blockBodiesSynchedTo: undefined, provenLogsSynchedTo: undefined, } satisfies ArchiverL1SynchPoint); }); @@ -144,7 +120,6 @@ export function describeArchiverDataStore(testName: string, getStore: () => Arch await expect(store.getSynchPoint()).resolves.toEqual({ blocksSynchedTo: undefined, messagesSynchedTo: undefined, - blockBodiesSynchedTo: undefined, provenLogsSynchedTo: 3n, } satisfies ArchiverL1SynchPoint); }); @@ -153,14 +128,7 @@ export function describeArchiverDataStore(testName: string, getStore: () => Arch describe('addLogs', () => { it('adds encrypted & unencrypted logs', async () => { const block = blocks[0].data; - await expect( - store.addLogs( - block.body.noteEncryptedLogs, - block.body.encryptedLogs, - block.body.unencryptedLogs, - block.number, - ), - ).resolves.toEqual(true); + await expect(store.addLogs([block])).resolves.toEqual(true); }); }); @@ -170,16 +138,7 @@ export function describeArchiverDataStore(testName: string, getStore: () => Arch ['unencrypted', LogType.UNENCRYPTED], ])('getLogs (%s)', (_, logType) => { beforeEach(async () => { - await Promise.all( - blocks.map(block => - store.addLogs( - block.data.body.noteEncryptedLogs, - block.data.body.encryptedLogs, - block.data.body.unencryptedLogs, - block.data.number, - ), - ), - ); + await store.addLogs(blocks.map(b => b.data)); }); it.each(blockTests)('retrieves previously stored logs', async (from, limit, getExpectedBlocks) => { @@ -201,18 +160,8 @@ export function describeArchiverDataStore(testName: string, getStore: () => Arch describe('getTxEffect', () => { beforeEach(async () => { - await Promise.all( - blocks.map(block => - store.addLogs( - block.data.body.noteEncryptedLogs, - block.data.body.encryptedLogs, - block.data.body.unencryptedLogs, - block.data.number, - ), - ), - ); + await store.addLogs(blocks.map(b => b.data)); await store.addBlocks(blocks); - await store.addBlockBodies(blockBodies); }); it.each([ @@ -364,18 +313,7 @@ export function describeArchiverDataStore(testName: string, getStore: () => Arch })); await store.addBlocks(blocks); - await store.addBlockBodies(blockBodies); - - await Promise.all( - blocks.map(block => - store.addLogs( - block.data.body.noteEncryptedLogs, - block.data.body.encryptedLogs, - block.data.body.unencryptedLogs, - block.data.number, - ), - ), - ); + await store.addLogs(blocks.map(b => b.data)); }); it('"txHash" filter param is respected', async () => { diff --git a/yarn-project/archiver/src/archiver/config.ts b/yarn-project/archiver/src/archiver/config.ts index 3b067f4e4ae..f4ec61d3106 100644 --- a/yarn-project/archiver/src/archiver/config.ts +++ b/yarn-project/archiver/src/archiver/config.ts @@ -22,11 +22,6 @@ export type ArchiverConfig = { */ archiverPollingIntervalMS?: number; - /** - * The L1 block to start reading from - */ - archiverL1StartBlock: number; - /** * The polling interval viem uses in ms */ @@ -57,11 +52,6 @@ export const archiverConfigMappings: ConfigMappingsType = { description: 'The polling interval in ms for retrieving new L2 blocks and encrypted logs.', ...numberConfigHelper(1000), }, - archiverL1StartBlock: { - env: 'ARCHIVER_L1_START_BLOCK', - description: 'The L1 block the archiver should start reading logs from', - ...numberConfigHelper(0), - }, viemPollingIntervalMS: { env: 'ARCHIVER_VIEM_POLLING_INTERVAL_MS', description: 'The polling interval viem uses in ms', diff --git a/yarn-project/archiver/src/archiver/data_retrieval.ts b/yarn-project/archiver/src/archiver/data_retrieval.ts index 5827296d3f1..1e79352fc81 100644 --- a/yarn-project/archiver/src/archiver/data_retrieval.ts +++ b/yarn-project/archiver/src/archiver/data_retrieval.ts @@ -1,20 +1,25 @@ -import { type InboxLeaf, type L2Block } from '@aztec/circuit-types'; -import { Fr, type Proof } from '@aztec/circuits.js'; +import { Body, InboxLeaf, L2Block } from '@aztec/circuit-types'; +import { AppendOnlyTreeSnapshot, Fr, Header, Proof } from '@aztec/circuits.js'; import { type EthAddress } from '@aztec/foundation/eth-address'; +import { type ViemSignature } from '@aztec/foundation/eth-signature'; import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log'; -import { RollupAbi } from '@aztec/l1-artifacts'; - -import { type Hex, type PublicClient, getAbiItem } from 'viem'; +import { numToUInt32BE } from '@aztec/foundation/serialize'; +import { type InboxAbi, RollupAbi } from '@aztec/l1-artifacts'; import { - getBlockProofFromSubmitProofTx, - getL2BlockProposedLogs, - getMessageSentLogs, - processL2BlockProposedLogs, - processMessageSentLogs, -} from './eth_log_handlers.js'; + type Chain, + type GetContractEventsReturnType, + type GetContractReturnType, + type Hex, + type HttpTransport, + type PublicClient, + decodeFunctionData, + getAbiItem, + hexToBytes, +} from 'viem'; + import { type DataRetrieval } from './structs/data_retrieval.js'; -import { type L1Published } from './structs/published.js'; +import { type L1Published, type L1PublishedData } from './structs/published.js'; /** * Fetches new L2 blocks. @@ -27,12 +32,11 @@ import { type L1Published } from './structs/published.js'; * @returns An array of block; as well as the next eth block to search from. */ export async function retrieveBlockFromRollup( + rollup: GetContractReturnType>, publicClient: PublicClient, - rollupAddress: EthAddress, blockUntilSynced: boolean, searchStartBlock: bigint, searchEndBlock: bigint, - expectedNextL2BlockNum: bigint, logger: DebugLogger = createDebugLogger('aztec:archiver'), ): Promise[]> { const retrievedBlocks: L1Published[] = []; @@ -40,29 +44,120 @@ export async function retrieveBlockFromRollup( if (searchStartBlock > searchEndBlock) { break; } - const L2BlockProposedLogs = await getL2BlockProposedLogs( - publicClient, - rollupAddress, - searchStartBlock, - searchEndBlock, + const l2BlockProposedLogs = await rollup.getEvents.L2BlockProposed( + {}, + { + fromBlock: searchStartBlock, + toBlock: searchEndBlock + 1n, + }, ); - if (L2BlockProposedLogs.length === 0) { + + if (l2BlockProposedLogs.length === 0) { break; } - const lastLog = L2BlockProposedLogs[L2BlockProposedLogs.length - 1]; + const lastLog = l2BlockProposedLogs[l2BlockProposedLogs.length - 1]; logger.debug( - `Got L2 block processed logs for ${L2BlockProposedLogs[0].blockNumber}-${lastLog.blockNumber} between ${searchStartBlock}-${searchEndBlock} L1 blocks`, + `Got L2 block processed logs for ${l2BlockProposedLogs[0].blockNumber}-${lastLog.blockNumber} between ${searchStartBlock}-${searchEndBlock} L1 blocks`, ); - const newBlocks = await processL2BlockProposedLogs(publicClient, expectedNextL2BlockNum, L2BlockProposedLogs); + const newBlocks = await processL2BlockProposedLogs(rollup, publicClient, l2BlockProposedLogs, logger); retrievedBlocks.push(...newBlocks); searchStartBlock = lastLog.blockNumber! + 1n; - expectedNextL2BlockNum += BigInt(newBlocks.length); } while (blockUntilSynced && searchStartBlock <= searchEndBlock); return retrievedBlocks; } +/** + * Processes newly received L2BlockProposed logs. + * @param rollup - The rollup contract + * @param publicClient - The viem public client to use for transaction retrieval. + * @param logs - L2BlockProposed logs. + * @returns - An array blocks. + */ +export async function processL2BlockProposedLogs( + rollup: GetContractReturnType>, + publicClient: PublicClient, + logs: GetContractEventsReturnType, + logger: DebugLogger, +): Promise[]> { + const retrievedBlocks: L1Published[] = []; + for (const log of logs) { + const l2BlockNumber = log.args.blockNumber!; + const archive = log.args.archive!; + const archiveFromChain = await rollup.read.archiveAt([l2BlockNumber]); + + // The value from the event and contract will match only if the block is in the chain. + if (archive === archiveFromChain) { + // TODO: Fetch blocks from calldata in parallel + const block = await getBlockFromRollupTx(publicClient, log.transactionHash!, l2BlockNumber); + + const l1: L1PublishedData = { + blockNumber: log.blockNumber, + blockHash: log.blockHash, + timestamp: await getL1BlockTime(publicClient, log.blockNumber), + }; + + retrievedBlocks.push({ data: block, l1 }); + } else { + logger.warn( + `Archive mismatch matching, ignoring block ${l2BlockNumber} with archive: ${archive}, expected ${archiveFromChain}`, + ); + } + } + + return retrievedBlocks; +} + +export async function getL1BlockTime(publicClient: PublicClient, blockNumber: bigint): Promise { + const block = await publicClient.getBlock({ blockNumber, includeTransactions: false }); + return block.timestamp; +} + +/** + * Gets block from the calldata of an L1 transaction. + * Assumes that the block was published from an EOA. + * TODO: Add retries and error management. + * @param publicClient - The viem public client to use for transaction retrieval. + * @param txHash - Hash of the tx that published it. + * @param l2BlockNum - L2 block number. + * @returns L2 block from the calldata, deserialized + */ +async function getBlockFromRollupTx( + publicClient: PublicClient, + txHash: `0x${string}`, + l2BlockNum: bigint, +): Promise { + const { input: data } = await publicClient.getTransaction({ hash: txHash }); + const { functionName, args } = decodeFunctionData({ + abi: RollupAbi, + data, + }); + + if (!(functionName === 'propose')) { + throw new Error(`Unexpected method called ${functionName}`); + } + const [headerHex, archiveRootHex, , , , bodyHex] = args! as readonly [Hex, Hex, Hex, Hex[], ViemSignature[], Hex]; + + const header = Header.fromBuffer(Buffer.from(hexToBytes(headerHex))); + const blockBody = Body.fromBuffer(Buffer.from(hexToBytes(bodyHex))); + + const blockNumberFromHeader = header.globalVariables.blockNumber.toBigInt(); + + if (blockNumberFromHeader !== l2BlockNum) { + throw new Error(`Block number mismatch: expected ${l2BlockNum} but got ${blockNumberFromHeader}`); + } + + const archive = AppendOnlyTreeSnapshot.fromBuffer( + Buffer.concat([ + Buffer.from(hexToBytes(archiveRootHex)), // L2Block.archive.root + numToUInt32BE(Number(l2BlockNum + 1n)), // L2Block.archive.nextAvailableLeafIndex + ]), + ); + + return new L2Block(archive, header, blockBody); +} + /** * Fetch L1 to L2 messages. * @param publicClient - The viem public client to use for transaction retrieval. @@ -73,8 +168,7 @@ export async function retrieveBlockFromRollup( * @returns An array of InboxLeaf and next eth block to search from. */ export async function retrieveL1ToL2Messages( - publicClient: PublicClient, - inboxAddress: EthAddress, + inbox: GetContractReturnType>, blockUntilSynced: boolean, searchStartBlock: bigint, searchEndBlock: bigint, @@ -84,12 +178,24 @@ export async function retrieveL1ToL2Messages( if (searchStartBlock > searchEndBlock) { break; } - const messageSentLogs = await getMessageSentLogs(publicClient, inboxAddress, searchStartBlock, searchEndBlock); + + const messageSentLogs = await inbox.getEvents.MessageSent( + {}, + { + fromBlock: searchStartBlock, + toBlock: searchEndBlock + 1n, + }, + ); + if (messageSentLogs.length === 0) { break; } - const l1ToL2Messages = processMessageSentLogs(messageSentLogs); - retrievedL1ToL2Messages.push(...l1ToL2Messages); + + for (const log of messageSentLogs) { + const { l2BlockNumber, index, hash } = log.args; + retrievedL1ToL2Messages.push(new InboxLeaf(l2BlockNumber!, index!, Fr.fromString(hash!))); + } + // handles the case when there are no new messages: searchStartBlock = (messageSentLogs.findLast(msgLog => !!msgLog)?.blockNumber || searchStartBlock) + 1n; } while (blockUntilSynced && searchStartBlock <= searchEndBlock); @@ -139,3 +245,57 @@ export async function retrieveL2ProofsFromRollup( lastProcessedL1BlockNumber, }; } + +export type SubmitBlockProof = { + header: Header; + archiveRoot: Fr; + proverId: Fr; + aggregationObject: Buffer; + proof: Proof; +}; + +/** + * Gets block metadata (header and archive snapshot) from the calldata of an L1 transaction. + * Assumes that the block was published from an EOA. + * TODO: Add retries and error management. + * @param publicClient - The viem public client to use for transaction retrieval. + * @param txHash - Hash of the tx that published it. + * @param l2BlockNum - L2 block number. + * @returns L2 block metadata (header and archive) from the calldata, deserialized + */ +export async function getBlockProofFromSubmitProofTx( + publicClient: PublicClient, + txHash: `0x${string}`, + l2BlockNum: bigint, + expectedProverId: Fr, +): Promise { + const { input: data } = await publicClient.getTransaction({ hash: txHash }); + const { functionName, args } = decodeFunctionData({ + abi: RollupAbi, + data, + }); + + if (!(functionName === 'submitBlockRootProof')) { + throw new Error(`Unexpected method called ${functionName}`); + } + const [headerHex, archiveHex, proverIdHex, aggregationObjectHex, proofHex] = args!; + + const header = Header.fromBuffer(Buffer.from(hexToBytes(headerHex))); + const proverId = Fr.fromString(proverIdHex); + + const blockNumberFromHeader = header.globalVariables.blockNumber.toBigInt(); + if (blockNumberFromHeader !== l2BlockNum) { + throw new Error(`Block number mismatch: expected ${l2BlockNum} but got ${blockNumberFromHeader}`); + } + if (!proverId.equals(expectedProverId)) { + throw new Error(`Prover ID mismatch: expected ${expectedProverId} but got ${proverId}`); + } + + return { + header, + proverId, + aggregationObject: Buffer.from(hexToBytes(aggregationObjectHex)), + archiveRoot: Fr.fromString(archiveHex), + proof: Proof.fromBuffer(Buffer.from(hexToBytes(proofHex))), + }; +} diff --git a/yarn-project/archiver/src/archiver/eth_log_handlers.ts b/yarn-project/archiver/src/archiver/eth_log_handlers.ts deleted file mode 100644 index fa218fb2086..00000000000 --- a/yarn-project/archiver/src/archiver/eth_log_handlers.ts +++ /dev/null @@ -1,213 +0,0 @@ -import { Body, InboxLeaf, L2Block, type ViemSignature } from '@aztec/circuit-types'; -import { AppendOnlyTreeSnapshot, Header, Proof } from '@aztec/circuits.js'; -import { type EthAddress } from '@aztec/foundation/eth-address'; -import { Fr } from '@aztec/foundation/fields'; -import { numToUInt32BE } from '@aztec/foundation/serialize'; -import { InboxAbi, RollupAbi } from '@aztec/l1-artifacts'; - -import { type Hex, type Log, type PublicClient, decodeFunctionData, getAbiItem, getAddress, hexToBytes } from 'viem'; - -import { type L1Published, type L1PublishedData } from './structs/published.js'; - -/** - * Processes newly received MessageSent (L1 to L2) logs. - * @param logs - MessageSent logs. - * @returns Array of all processed MessageSent logs - */ -export function processMessageSentLogs( - logs: Log[], -): InboxLeaf[] { - const leaves: InboxLeaf[] = []; - for (const log of logs) { - const { l2BlockNumber, index, hash } = log.args; - leaves.push(new InboxLeaf(l2BlockNumber, index, Fr.fromString(hash))); - } - return leaves; -} - -/** - * Processes newly received L2BlockProposed logs. - * @param publicClient - The viem public client to use for transaction retrieval. - * @param expectedL2BlockNumber - The next expected L2 block number. - * @param logs - L2BlockProposed logs. - * @returns - An array blocks. - */ -export async function processL2BlockProposedLogs( - publicClient: PublicClient, - expectedL2BlockNumber: bigint, - logs: Log[], -): Promise[]> { - const retrievedBlocks: L1Published[] = []; - for (const log of logs) { - const blockNum = log.args.blockNumber; - if (blockNum !== expectedL2BlockNumber) { - throw new Error('Block number mismatch. Expected: ' + expectedL2BlockNumber + ' but got: ' + blockNum + '.'); - } - // TODO: Fetch blocks from calldata in parallel - const block = await getBlockFromRollupTx(publicClient, log.transactionHash!, log.args.blockNumber); - - const l1: L1PublishedData = { - blockNumber: log.blockNumber, - blockHash: log.blockHash, - timestamp: await getL1BlockTime(publicClient, log.blockNumber), - }; - - retrievedBlocks.push({ data: block, l1 }); - expectedL2BlockNumber++; - } - - return retrievedBlocks; -} - -export async function getL1BlockTime(publicClient: PublicClient, blockNumber: bigint): Promise { - const block = await publicClient.getBlock({ blockNumber, includeTransactions: false }); - return block.timestamp; -} - -/** - * Gets block from the calldata of an L1 transaction. - * Assumes that the block was published from an EOA. - * TODO: Add retries and error management. - * @param publicClient - The viem public client to use for transaction retrieval. - * @param txHash - Hash of the tx that published it. - * @param l2BlockNum - L2 block number. - * @returns L2 block from the calldata, deserialized - */ -async function getBlockFromRollupTx( - publicClient: PublicClient, - txHash: `0x${string}`, - l2BlockNum: bigint, -): Promise { - const { input: data } = await publicClient.getTransaction({ hash: txHash }); - const { functionName, args } = decodeFunctionData({ - abi: RollupAbi, - data, - }); - - if (!(functionName === 'propose')) { - throw new Error(`Unexpected method called ${functionName}`); - } - const [headerHex, archiveRootHex, , , , bodyHex] = args! as readonly [Hex, Hex, Hex, Hex[], ViemSignature[], Hex]; - - const header = Header.fromBuffer(Buffer.from(hexToBytes(headerHex))); - const blockBody = Body.fromBuffer(Buffer.from(hexToBytes(bodyHex))); - - const blockNumberFromHeader = header.globalVariables.blockNumber.toBigInt(); - - if (blockNumberFromHeader !== l2BlockNum) { - throw new Error(`Block number mismatch: expected ${l2BlockNum} but got ${blockNumberFromHeader}`); - } - - const archive = AppendOnlyTreeSnapshot.fromBuffer( - Buffer.concat([ - Buffer.from(hexToBytes(archiveRootHex)), // L2Block.archive.root - numToUInt32BE(Number(l2BlockNum)), // L2Block.archive.nextAvailableLeafIndex - ]), - ); - - return new L2Block(archive, header, blockBody); -} - -/** - * Gets relevant `L2BlockProposed` logs from chain. - * @param publicClient - The viem public client to use for transaction retrieval. - * @param rollupAddress - The address of the rollup contract. - * @param fromBlock - First block to get logs from (inclusive). - * @param toBlock - Last block to get logs from (inclusive). - * @returns An array of `L2BlockProposed` logs. - */ -export function getL2BlockProposedLogs( - publicClient: PublicClient, - rollupAddress: EthAddress, - fromBlock: bigint, - toBlock: bigint, -): Promise[]> { - return publicClient.getLogs({ - address: getAddress(rollupAddress.toString()), - event: getAbiItem({ - abi: RollupAbi, - name: 'L2BlockProposed', - }), - fromBlock, - toBlock: toBlock + 1n, // the toBlock argument in getLogs is exclusive - }); -} - -/** - * Get relevant `MessageSent` logs emitted by Inbox on chain. - * @param publicClient - The viem public client to use for transaction retrieval. - * @param inboxAddress - The address of the inbox contract. - * @param fromBlock - First block to get logs from (inclusive). - * @param toBlock - Last block to get logs from (inclusive). - * @returns An array of `MessageSent` logs. - */ -export function getMessageSentLogs( - publicClient: PublicClient, - inboxAddress: EthAddress, - fromBlock: bigint, - toBlock: bigint, -): Promise[]> { - return publicClient.getLogs({ - address: getAddress(inboxAddress.toString()), - event: getAbiItem({ - abi: InboxAbi, - name: 'MessageSent', - }), - fromBlock, - toBlock: toBlock + 1n, // the toBlock argument in getLogs is exclusive - }); -} - -export type SubmitBlockProof = { - header: Header; - archiveRoot: Fr; - proverId: Fr; - aggregationObject: Buffer; - proof: Proof; -}; - -/** - * Gets block metadata (header and archive snapshot) from the calldata of an L1 transaction. - * Assumes that the block was published from an EOA. - * TODO: Add retries and error management. - * @param publicClient - The viem public client to use for transaction retrieval. - * @param txHash - Hash of the tx that published it. - * @param l2BlockNum - L2 block number. - * @returns L2 block metadata (header and archive) from the calldata, deserialized - */ -export async function getBlockProofFromSubmitProofTx( - publicClient: PublicClient, - txHash: `0x${string}`, - l2BlockNum: bigint, - expectedProverId: Fr, -): Promise { - const { input: data } = await publicClient.getTransaction({ hash: txHash }); - const { functionName, args } = decodeFunctionData({ - abi: RollupAbi, - data, - }); - - if (!(functionName === 'submitBlockRootProof')) { - throw new Error(`Unexpected method called ${functionName}`); - } - const [headerHex, archiveHex, proverIdHex, aggregationObjectHex, proofHex] = args!; - - const header = Header.fromBuffer(Buffer.from(hexToBytes(headerHex))); - const proverId = Fr.fromString(proverIdHex); - - const blockNumberFromHeader = header.globalVariables.blockNumber.toBigInt(); - if (blockNumberFromHeader !== l2BlockNum) { - throw new Error(`Block number mismatch: expected ${l2BlockNum} but got ${blockNumberFromHeader}`); - } - if (!proverId.equals(expectedProverId)) { - throw new Error(`Prover ID mismatch: expected ${expectedProverId} but got ${proverId}`); - } - - return { - header, - proverId, - aggregationObject: Buffer.from(hexToBytes(aggregationObjectHex)), - archiveRoot: Fr.fromString(archiveHex), - proof: Proof.fromBuffer(Buffer.from(hexToBytes(proofHex))), - }; -} diff --git a/yarn-project/archiver/src/archiver/kv_archiver_store/block_body_store.test.ts b/yarn-project/archiver/src/archiver/kv_archiver_store/block_body_store.test.ts deleted file mode 100644 index f8cd220e109..00000000000 --- a/yarn-project/archiver/src/archiver/kv_archiver_store/block_body_store.test.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Body } from '@aztec/circuit-types'; -import { openTmpStore } from '@aztec/kv-store/utils'; - -import { KVArchiverDataStore } from './kv_archiver_store.js'; - -describe('Block Body Store', () => { - let archiverStore: KVArchiverDataStore; - - beforeEach(() => { - archiverStore = new KVArchiverDataStore(openTmpStore()); - }); - - it('Should add and return block bodies', async () => { - const body = Body.random(1); - - await archiverStore.addBlockBodies({ retrievedData: [body], lastProcessedL1BlockNumber: 5n }); - - const txsEffectsHash = body.getTxsEffectsHash(); - - const [returnedBody] = await archiverStore.getBlockBodies([txsEffectsHash]); - expect(body).toStrictEqual(returnedBody); - - const { blockBodiesSynchedTo } = await archiverStore.getSynchPoint(); - expect(blockBodiesSynchedTo).toEqual(5n); - }); -}); diff --git a/yarn-project/archiver/src/archiver/kv_archiver_store/block_body_store.ts b/yarn-project/archiver/src/archiver/kv_archiver_store/block_body_store.ts deleted file mode 100644 index 566e637e11b..00000000000 --- a/yarn-project/archiver/src/archiver/kv_archiver_store/block_body_store.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { Body } from '@aztec/circuit-types'; -import { createDebugLogger } from '@aztec/foundation/log'; -import { type AztecKVStore, type AztecMap, type AztecSingleton } from '@aztec/kv-store'; - -import { type DataRetrieval } from '../structs/data_retrieval.js'; - -export class BlockBodyStore { - /** Map block body hash to block body */ - #blockBodies: AztecMap; - - /** Stores L1 block number in which the last processed L2 block body was included */ - #lastSynchedL1Block: AztecSingleton; - - constructor(private db: AztecKVStore, private log = createDebugLogger('aztec:archiver:block_body_store')) { - this.#blockBodies = db.openMap('archiver_block_bodies'); - this.#lastSynchedL1Block = db.openSingleton('archiver_block_bodies_last_synched_l1_block'); - } - - /** - * Append new block bodies to the store's map. - * @param blockBodies - The L2 block bodies to be added to the store. - * @returns True if the operation is successful. - */ - addBlockBodies(blockBodies: DataRetrieval): Promise { - return this.db.transaction(() => { - for (const body of blockBodies.retrievedData) { - void this.#blockBodies.set(body.getTxsEffectsHash().toString('hex'), body.toBuffer()); - } - void this.#lastSynchedL1Block.set(blockBodies.lastProcessedL1BlockNumber); - return true; - }); - } - - /** - * Gets a list of L2 block bodies with its associated txsEffectsHashes - * @param txsEffectsHashes - The txsEffectsHashes list that corresponds to the blockBodies we want to retrieve - * @returns The requested L2 block bodies - */ - async getBlockBodies(txsEffectsHashes: Buffer[]): Promise<(Body | undefined)[]> { - const blockBodiesBuffer = await this.db.transaction(() => - txsEffectsHashes.map(txsEffectsHash => this.#blockBodies.get(txsEffectsHash.toString('hex'))), - ); - - const blockBodies: (Body | undefined)[] = []; - for (let i = 0; i < blockBodiesBuffer.length; i++) { - const blockBodyBuffer = blockBodiesBuffer[i]; - if (blockBodyBuffer === undefined) { - this.log.warn(`Block body buffer is undefined for txsEffectsHash: ${txsEffectsHashes[i].toString('hex')}`); - } - blockBodies.push(blockBodyBuffer ? Body.fromBuffer(blockBodyBuffer) : undefined); - } - - return blockBodies; - } - - /** - * Gets an L2 block body. - * @param txsEffectsHash - The txHash of the block body to return - * @returns The requested L2 block body - */ - getBlockBody(txsEffectsHash: Buffer): Body | undefined { - const blockBody = this.#blockBodies.get(txsEffectsHash.toString('hex')); - - return blockBody && Body.fromBuffer(blockBody); - } - - /** - * Gets the last L1 block number in which a L2 block body was included - * @returns The L1 block number - */ - getSynchedL1BlockNumber(): bigint | undefined { - return this.#lastSynchedL1Block.get(); - } -} diff --git a/yarn-project/archiver/src/archiver/kv_archiver_store/block_store.ts b/yarn-project/archiver/src/archiver/kv_archiver_store/block_store.ts index 7ae29bd41b4..024df9f1065 100644 --- a/yarn-project/archiver/src/archiver/kv_archiver_store/block_store.ts +++ b/yarn-project/archiver/src/archiver/kv_archiver_store/block_store.ts @@ -1,10 +1,9 @@ -import { L2Block, type TxEffect, type TxHash, TxReceipt } from '@aztec/circuit-types'; +import { Body, L2Block, type TxEffect, type TxHash, TxReceipt } from '@aztec/circuit-types'; import { AppendOnlyTreeSnapshot, type AztecAddress, Header, INITIAL_L2_BLOCK_NUM } from '@aztec/circuits.js'; import { createDebugLogger } from '@aztec/foundation/log'; import { type AztecKVStore, type AztecMap, type AztecSingleton, type Range } from '@aztec/kv-store'; import { type L1Published, type L1PublishedData } from '../structs/published.js'; -import { type BlockBodyStore } from './block_body_store.js'; type BlockIndexValue = [blockNumber: number, index: number]; @@ -20,6 +19,10 @@ type BlockStorage = { export class BlockStore { /** Map block number to block data */ #blocks: AztecMap; + + /** Map block body hash to block body */ + #blockBodies: AztecMap; + /** Stores L1 block number in which the last processed L2 block was included */ #lastSynchedL1Block: AztecSingleton; @@ -31,12 +34,9 @@ export class BlockStore { #log = createDebugLogger('aztec:archiver:block_store'); - #blockBodyStore: BlockBodyStore; - - constructor(private db: AztecKVStore, blockBodyStore: BlockBodyStore) { - this.#blockBodyStore = blockBodyStore; - + constructor(private db: AztecKVStore) { this.#blocks = db.openMap('archiver_blocks'); + this.#blockBodies = db.openMap('archiver_block_bodies'); this.#txIndex = db.openMap('archiver_tx_index'); this.#contractIndex = db.openMap('archiver_contract_index'); this.#lastSynchedL1Block = db.openSingleton('archiver_last_synched_l1_block'); @@ -63,6 +63,8 @@ export class BlockStore { block.data.body.txEffects.forEach((tx, i) => { void this.#txIndex.set(tx.txHash.toString(), [block.data.number, i]); }); + + void this.#blockBodies.set(block.data.body.getTxsEffectsHash().toString('hex'), block.data.body.toBuffer()); } void this.#lastSynchedL1Block.set(blocks[blocks.length - 1].l1.blockNumber); @@ -100,11 +102,12 @@ export class BlockStore { private getBlockFromBlockStorage(blockStorage: BlockStorage) { const header = Header.fromBuffer(blockStorage.header); const archive = AppendOnlyTreeSnapshot.fromBuffer(blockStorage.archive); - const body = this.#blockBodyStore.getBlockBody(header.contentCommitment.txsEffectsHash); - if (body === undefined) { - throw new Error('Body is not able to be retrieved from BodyStore'); + const blockBodyBuffer = this.#blockBodies.get(header.contentCommitment.txsEffectsHash.toString('hex')); + if (blockBodyBuffer === undefined) { + throw new Error('Body could not be retrieved'); } + const body = Body.fromBuffer(blockBodyBuffer); const l2Block = L2Block.fromFields({ header, archive, body }); return { data: l2Block, l1: blockStorage.l1 }; @@ -184,6 +187,10 @@ export class BlockStore { return this.#lastSynchedL1Block.get(); } + setSynchedL1BlockNumber(l1BlockNumber: bigint) { + void this.#lastSynchedL1Block.set(l1BlockNumber); + } + #computeBlockRange(start: number, limit: number): Required, 'start' | 'end'>> { if (limit < 1) { throw new Error(`Invalid limit: ${limit}`); diff --git a/yarn-project/archiver/src/archiver/kv_archiver_store/kv_archiver_store.ts b/yarn-project/archiver/src/archiver/kv_archiver_store/kv_archiver_store.ts index 7a71f7861ea..944acd694b1 100644 --- a/yarn-project/archiver/src/archiver/kv_archiver_store/kv_archiver_store.ts +++ b/yarn-project/archiver/src/archiver/kv_archiver_store/kv_archiver_store.ts @@ -1,7 +1,4 @@ import { - type Body, - type EncryptedL2BlockL2Logs, - type EncryptedNoteL2BlockL2Logs, type FromLogType, type GetUnencryptedLogsResponse, type InboxLeaf, @@ -12,7 +9,6 @@ import { type TxEffect, type TxHash, type TxReceipt, - type UnencryptedL2BlockL2Logs, } from '@aztec/circuit-types'; import { type Fr } from '@aztec/circuits.js'; import { type ContractArtifact } from '@aztec/foundation/abi'; @@ -29,7 +25,6 @@ import { import { type ArchiverDataStore, type ArchiverL1SynchPoint } from '../archiver_store.js'; import { type DataRetrieval, type SingletonDataRetrieval } from '../structs/data_retrieval.js'; import { type L1Published } from '../structs/published.js'; -import { BlockBodyStore } from './block_body_store.js'; import { BlockStore } from './block_store.js'; import { ContractArtifactsStore } from './contract_artifacts_store.js'; import { ContractClassStore } from './contract_class_store.js'; @@ -42,7 +37,6 @@ import { ProvenStore } from './proven_store.js'; * LMDB implementation of the ArchiverDataStore interface. */ export class KVArchiverDataStore implements ArchiverDataStore { - #blockBodyStore: BlockBodyStore; #blockStore: BlockStore; #provenStore: ProvenStore; #logStore: LogStore; @@ -54,8 +48,7 @@ export class KVArchiverDataStore implements ArchiverDataStore { #log = createDebugLogger('aztec:archiver:data-store'); constructor(db: AztecKVStore, logsMaxPageSize: number = 1000) { - this.#blockBodyStore = new BlockBodyStore(db); - this.#blockStore = new BlockStore(db, this.#blockBodyStore); + this.#blockStore = new BlockStore(db); this.#provenStore = new ProvenStore(db); this.#logStore = new LogStore(db, this.#blockStore, logsMaxPageSize); this.#messageStore = new MessageStore(db); @@ -100,25 +93,6 @@ export class KVArchiverDataStore implements ArchiverDataStore { return (await Promise.all(data.map(c => this.#contractInstanceStore.addContractInstance(c)))).every(Boolean); } - /** - * Append new block bodies to the store's list. - * @param blockBodies - The L2 block bodies to be added to the store. - * @returns True if the operation is successful. - */ - addBlockBodies(blockBodies: DataRetrieval): Promise { - return this.#blockBodyStore.addBlockBodies(blockBodies); - } - - /** - * Gets block bodies that have the same txHashes as we supply. - * - * @param txsEffectsHashes - A list of txsEffectsHashes (body hashes). - * @returns The requested L2 block bodies - */ - getBlockBodies(txsEffectsHashes: Buffer[]): Promise<(Body | undefined)[]> { - return this.#blockBodyStore.getBlockBodies(txsEffectsHashes); - } - /** * Append new blocks to the store's list. * @param blocks - The L2 blocks to be added to the store and the last processed L1 block. @@ -164,18 +138,11 @@ export class KVArchiverDataStore implements ArchiverDataStore { /** * Append new logs to the store's list. - * @param encryptedLogs - The logs to be added to the store. - * @param unencryptedLogs - The type of the logs to be added to the store. - * @param blockNumber - The block for which to add the logs. + * @param blocks - The blocks for which to add the logs. * @returns True if the operation is successful. */ - addLogs( - noteEncryptedLogs: EncryptedNoteL2BlockL2Logs | undefined, - encryptedLogs: EncryptedL2BlockL2Logs | undefined, - unencryptedLogs: UnencryptedL2BlockL2Logs | undefined, - blockNumber: number, - ): Promise { - return this.#logStore.addLogs(noteEncryptedLogs, encryptedLogs, unencryptedLogs, blockNumber); + addLogs(blocks: L2Block[]): Promise { + return this.#logStore.addLogs(blocks); } /** @@ -258,13 +225,22 @@ export class KVArchiverDataStore implements ArchiverDataStore { await this.#provenStore.setProvenL2BlockNumber(blockNumber); } + setBlockSynchedL1BlockNumber(l1BlockNumber: bigint) { + this.#blockStore.setSynchedL1BlockNumber(l1BlockNumber); + return Promise.resolve(); + } + + setMessageSynchedL1BlockNumber(l1BlockNumber: bigint) { + this.#messageStore.setSynchedL1BlockNumber(l1BlockNumber); + return Promise.resolve(); + } + /** * Gets the last L1 block number processed by the archiver */ getSynchPoint(): Promise { return Promise.resolve({ blocksSynchedTo: this.#blockStore.getSynchedL1BlockNumber(), - blockBodiesSynchedTo: this.#blockBodyStore.getSynchedL1BlockNumber(), messagesSynchedTo: this.#messageStore.getSynchedL1BlockNumber(), provenLogsSynchedTo: this.#provenStore.getSynchedL1BlockNumber(), }); diff --git a/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts b/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts index 98021283217..f5fa9836c33 100644 --- a/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts +++ b/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts @@ -4,6 +4,7 @@ import { ExtendedUnencryptedL2Log, type FromLogType, type GetUnencryptedLogsResponse, + type L2Block, type L2BlockL2Logs, type LogFilter, LogId, @@ -37,29 +38,24 @@ export class LogStore { /** * Append new logs to the store's list. - * @param encryptedLogs - The logs to be added to the store. - * @param unencryptedLogs - The type of the logs to be added to the store. - * @param blockNumber - The block for which to add the logs. + * @param blocks - The blocks for which to add the logs. * @returns True if the operation is successful. */ - addLogs( - noteEncryptedLogs: EncryptedNoteL2BlockL2Logs | undefined, - encryptedLogs: EncryptedL2BlockL2Logs | undefined, - unencryptedLogs: UnencryptedL2BlockL2Logs | undefined, - blockNumber: number, - ): Promise { + addLogs(blocks: L2Block[]): Promise { return this.db.transaction(() => { - if (noteEncryptedLogs) { - void this.#noteEncryptedLogs.set(blockNumber, noteEncryptedLogs.toBuffer()); - } + blocks.forEach(block => { + if (block.body.noteEncryptedLogs) { + void this.#noteEncryptedLogs.set(block.number, block.body.noteEncryptedLogs.toBuffer()); + } - if (encryptedLogs) { - void this.#encryptedLogs.set(blockNumber, encryptedLogs.toBuffer()); - } + if (block.body.encryptedLogs) { + void this.#encryptedLogs.set(block.number, block.body.encryptedLogs.toBuffer()); + } - if (unencryptedLogs) { - void this.#unencryptedLogs.set(blockNumber, unencryptedLogs.toBuffer()); - } + if (block.body.unencryptedLogs) { + void this.#unencryptedLogs.set(block.number, block.body.unencryptedLogs.toBuffer()); + } + }); return true; }); diff --git a/yarn-project/archiver/src/archiver/kv_archiver_store/message_store.ts b/yarn-project/archiver/src/archiver/kv_archiver_store/message_store.ts index 38bfb1fc6ee..23a13a9ca32 100644 --- a/yarn-project/archiver/src/archiver/kv_archiver_store/message_store.ts +++ b/yarn-project/archiver/src/archiver/kv_archiver_store/message_store.ts @@ -16,7 +16,7 @@ import { type DataRetrieval } from '../structs/data_retrieval.js'; export class MessageStore { #l1ToL2Messages: AztecMap; #l1ToL2MessageIndices: AztecMap; // We store array of bigints here because there can be duplicate messages - #lastL1BlockMessages: AztecSingleton; + #lastSynchedL1Block: AztecSingleton; #log = createDebugLogger('aztec:archiver:message_store'); @@ -25,7 +25,7 @@ export class MessageStore { constructor(private db: AztecKVStore) { this.#l1ToL2Messages = db.openMap('archiver_l1_to_l2_messages'); this.#l1ToL2MessageIndices = db.openMap('archiver_l1_to_l2_message_indices'); - this.#lastL1BlockMessages = db.openSingleton('archiver_last_l1_block_new_messages'); + this.#lastSynchedL1Block = db.openSingleton('archiver_last_l1_block_new_messages'); } /** @@ -33,7 +33,11 @@ export class MessageStore { * @returns The last L1 block number processed */ getSynchedL1BlockNumber(): bigint | undefined { - return this.#lastL1BlockMessages.get(); + return this.#lastSynchedL1Block.get(); + } + + setSynchedL1BlockNumber(l1BlockNumber: bigint) { + void this.#lastSynchedL1Block.set(l1BlockNumber); } /** @@ -43,12 +47,12 @@ export class MessageStore { */ addL1ToL2Messages(messages: DataRetrieval): Promise { return this.db.transaction(() => { - const lastL1BlockNumber = this.#lastL1BlockMessages.get() ?? 0n; + const lastL1BlockNumber = this.#lastSynchedL1Block.get() ?? 0n; if (lastL1BlockNumber >= messages.lastProcessedL1BlockNumber) { return false; } - void this.#lastL1BlockMessages.set(messages.lastProcessedL1BlockNumber); + void this.#lastSynchedL1Block.set(messages.lastProcessedL1BlockNumber); for (const message of messages.retrievedData) { if (message.index >= this.#l1ToL2MessagesSubtreeSize) { diff --git a/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.test.ts b/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.test.ts index de8237cf336..e85608086ed 100644 --- a/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.test.ts +++ b/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.test.ts @@ -24,16 +24,7 @@ describe('MemoryArchiverStore', () => { })); await archiverStore.addBlocks(blocks); - await Promise.all( - blocks.map(block => - archiverStore.addLogs( - block.data.body.noteEncryptedLogs, - block.data.body.encryptedLogs, - block.data.body.unencryptedLogs, - block.data.number, - ), - ), - ); + await archiverStore.addLogs(blocks.map(b => b.data)); const response = await archiverStore.getUnencryptedLogs({}); diff --git a/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts b/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts index 5094382b15c..775503ae2d9 100644 --- a/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts +++ b/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts @@ -1,5 +1,4 @@ import { - type Body, type EncryptedL2BlockL2Logs, type EncryptedNoteL2BlockL2Logs, ExtendedUnencryptedL2Log, @@ -40,11 +39,6 @@ export class MemoryArchiverStore implements ArchiverDataStore { */ private l2Blocks: L1Published[] = []; - /** - * A mapping of body hash to body - */ - private l2BlockBodies: Map = new Map(); - /** * An array containing all the tx effects in the L2 blocks that have been fetched so far. */ @@ -84,7 +78,6 @@ export class MemoryArchiverStore implements ArchiverDataStore { private contractInstances: Map = new Map(); private lastL1BlockNewBlocks: bigint | undefined = undefined; - private lastL1BlockNewBlockBodies: bigint | undefined = undefined; private lastL1BlockNewMessages: bigint | undefined = undefined; private lastL1BlockNewProvenLogs: bigint | undefined = undefined; @@ -163,58 +156,29 @@ export class MemoryArchiverStore implements ArchiverDataStore { this.lastL1BlockNewBlocks = blocks[blocks.length - 1].l1.blockNumber; this.l2Blocks.push(...blocks); this.txEffects.push(...blocks.flatMap(b => b.data.body.txEffects)); - return Promise.resolve(true); - } - /** - * Append new block bodies to the store's list. - * @param blockBodies - The L2 block bodies to be added to the store. - * @returns True if the operation is successful. - */ - addBlockBodies(blockBodies: DataRetrieval): Promise { - for (const body of blockBodies.retrievedData) { - void this.l2BlockBodies.set(body.getTxsEffectsHash().toString('hex'), body); - } - this.lastL1BlockNewBlockBodies = blockBodies.lastProcessedL1BlockNumber; return Promise.resolve(true); } - /** - * Gets block bodies that have the same txHashes as we supply. - * - * @param txsEffectsHashes - A list of txsEffectsHashes (body hashes). - * @returns The requested L2 block bodies - */ - getBlockBodies(txsEffectsHashes: Buffer[]): Promise<(Body | undefined)[]> { - return Promise.resolve( - txsEffectsHashes.map(txsEffectsHash => this.l2BlockBodies.get(txsEffectsHash.toString('hex'))), - ); - } - /** * Append new logs to the store's list. - * @param encryptedLogs - The encrypted logs to be added to the store. - * @param unencryptedLogs - The unencrypted logs to be added to the store. - * @param blockNumber - The block for which to add the logs. + * @param block - The block for which to add the logs. * @returns True if the operation is successful. */ - addLogs( - noteEncryptedLogs: EncryptedNoteL2BlockL2Logs, - encryptedLogs: EncryptedL2BlockL2Logs, - unencryptedLogs: UnencryptedL2BlockL2Logs, - blockNumber: number, - ): Promise { - if (noteEncryptedLogs) { - this.noteEncryptedLogsPerBlock[blockNumber - INITIAL_L2_BLOCK_NUM] = noteEncryptedLogs; - } + addLogs(blocks: L2Block[]): Promise { + blocks.forEach(block => { + if (block.body.noteEncryptedLogs) { + this.noteEncryptedLogsPerBlock[block.number - INITIAL_L2_BLOCK_NUM] = block.body.noteEncryptedLogs; + } - if (encryptedLogs) { - this.encryptedLogsPerBlock[blockNumber - INITIAL_L2_BLOCK_NUM] = encryptedLogs; - } + if (block.body.encryptedLogs) { + this.encryptedLogsPerBlock[block.number - INITIAL_L2_BLOCK_NUM] = block.body.encryptedLogs; + } - if (unencryptedLogs) { - this.unencryptedLogsPerBlock[blockNumber - INITIAL_L2_BLOCK_NUM] = unencryptedLogs; - } + if (block.body.unencryptedLogs) { + this.unencryptedLogsPerBlock[block.number - INITIAL_L2_BLOCK_NUM] = block.body.unencryptedLogs; + } + }); return Promise.resolve(true); } @@ -451,11 +415,20 @@ export class MemoryArchiverStore implements ArchiverDataStore { return Promise.resolve(); } + setBlockSynchedL1BlockNumber(l1BlockNumber: bigint) { + this.lastL1BlockNewBlocks = l1BlockNumber; + return Promise.resolve(); + } + + setMessageSynchedL1BlockNumber(l1BlockNumber: bigint) { + this.lastL1BlockNewMessages = l1BlockNumber; + return Promise.resolve(); + } + public getSynchPoint(): Promise { return Promise.resolve({ blocksSynchedTo: this.lastL1BlockNewBlocks, messagesSynchedTo: this.lastL1BlockNewMessages, - blockBodiesSynchedTo: this.lastL1BlockNewBlockBodies, provenLogsSynchedTo: this.lastL1BlockNewProvenLogs, }); } diff --git a/yarn-project/archiver/src/index.ts b/yarn-project/archiver/src/index.ts index f23f973101c..6cd0fe60b15 100644 --- a/yarn-project/archiver/src/index.ts +++ b/yarn-project/archiver/src/index.ts @@ -15,8 +15,6 @@ export * from './factory.js'; export { retrieveL2ProofVerifiedEvents, retrieveBlockFromRollup } from './archiver/data_retrieval.js'; -export { getL2BlockProposedLogs } from './archiver/eth_log_handlers.js'; - const log = createDebugLogger('aztec:archiver'); /** diff --git a/yarn-project/aztec-node/package.json b/yarn-project/aztec-node/package.json index 9e9d0c00048..f2bbd2972de 100644 --- a/yarn-project/aztec-node/package.json +++ b/yarn-project/aztec-node/package.json @@ -14,6 +14,7 @@ }, "scripts": { "start": "node --no-warnings ./dest/bin", + "start:debug": "node --no-warnings --inspect ./dest/bin", "build": "yarn clean && tsc -b", "build:dev": "tsc -b --watch", "clean": "rm -rf ./dest .tsbuildinfo", diff --git a/yarn-project/aztec-node/src/aztec-node/server.test.ts b/yarn-project/aztec-node/src/aztec-node/server.test.ts index 7dbd162fbb9..a0b23c4ce5d 100644 --- a/yarn-project/aztec-node/src/aztec-node/server.test.ts +++ b/yarn-project/aztec-node/src/aztec-node/server.test.ts @@ -6,16 +6,16 @@ import { type L2LogsSource, type MerkleTreeAdminOperations, MerkleTreeId, + type WorldStateSynchronizer, mockTxForRollup, } from '@aztec/circuit-types'; -import { AztecAddress, EthAddress, Fr, GasFees, GlobalVariables, MaxBlockNumber } from '@aztec/circuits.js'; +import { EthAddress, Fr, MaxBlockNumber } from '@aztec/circuits.js'; import { type P2P } from '@aztec/p2p'; import { type GlobalVariableBuilder } from '@aztec/sequencer-client'; import { NoopTelemetryClient } from '@aztec/telemetry-client/noop'; import { type ContractDataSource } from '@aztec/types/contracts'; -import { type WorldStateSynchronizer } from '@aztec/world-state'; -import { type MockProxy, mock, mockFn } from 'jest-mock-extended'; +import { type MockProxy, mock } from 'jest-mock-extended'; import { type AztecNodeConfig, getConfigEnvVars } from './config.js'; import { AztecNodeService } from './server.js'; @@ -30,10 +30,6 @@ describe('aztec node', () => { let node: AztecNode; const chainId = new Fr(12345); - const version = Fr.ZERO; - const coinbase = EthAddress.random(); - const feeRecipient = AztecAddress.random(); - const gasFees = GasFees.empty(); beforeEach(() => { lastBlockNumber = 0; @@ -48,7 +44,7 @@ describe('aztec node', () => { }); const l2BlockSource = mock({ - getBlockNumber: mockFn().mockResolvedValue(lastBlockNumber), + getBlockNumber: () => Promise.resolve(lastBlockNumber), }); const l2LogsSource = mock(); @@ -79,7 +75,7 @@ describe('aztec node', () => { l1ToL2MessageSource, worldState, undefined, - 31337, + 12345, 1, globalVariablesBuilder, new TestCircuitVerifier(), @@ -95,21 +91,7 @@ describe('aztec node', () => { }); const doubleSpendTx = txs[0]; const doubleSpendWithExistingTx = txs[1]; - - const mockedGlobalVariables = new GlobalVariables( - chainId, - version, - new Fr(lastBlockNumber + 1), - new Fr(1), - Fr.ZERO, - coinbase, - feeRecipient, - gasFees, - ); - - globalVariablesBuilder.buildGlobalVariables - .mockResolvedValueOnce(mockedGlobalVariables) - .mockResolvedValueOnce(mockedGlobalVariables); + lastBlockNumber += 1; expect(await node.isValidTx(doubleSpendTx)).toBe(true); @@ -118,10 +100,6 @@ describe('aztec node', () => { expect(await node.isValidTx(doubleSpendTx)).toBe(false); - globalVariablesBuilder.buildGlobalVariables - .mockResolvedValueOnce(mockedGlobalVariables) - .mockResolvedValueOnce(mockedGlobalVariables); - expect(await node.isValidTx(doubleSpendWithExistingTx)).toBe(true); // We make a nullifier from `doubleSpendWithExistingTx` a part of the nullifier tree, so it gets rejected as double spend @@ -133,27 +111,13 @@ describe('aztec node', () => { }); expect(await node.isValidTx(doubleSpendWithExistingTx)).toBe(false); + lastBlockNumber = 0; }); it('tests that the node correctly validates chain id', async () => { const tx = mockTxForRollup(0x10000); tx.data.constants.txContext.chainId = chainId; - const mockedGlobalVariables = new GlobalVariables( - chainId, - version, - new Fr(lastBlockNumber + 1), - new Fr(1), - Fr.ZERO, - coinbase, - feeRecipient, - gasFees, - ); - - globalVariablesBuilder.buildGlobalVariables - .mockResolvedValueOnce(mockedGlobalVariables) - .mockResolvedValueOnce(mockedGlobalVariables); - expect(await node.isValidTx(tx)).toBe(true); // We make the chain id on the tx not equal to the configured chain id @@ -184,21 +148,7 @@ describe('aztec node', () => { toBuffer: () => Fr.ZERO.toBuffer(), }; - const mockedGlobalVariables = new GlobalVariables( - chainId, - version, - new Fr(lastBlockNumber + 5), - new Fr(1), - Fr.ZERO, - coinbase, - feeRecipient, - gasFees, - ); - - globalVariablesBuilder.buildGlobalVariables - .mockResolvedValueOnce(mockedGlobalVariables) - .mockResolvedValueOnce(mockedGlobalVariables) - .mockResolvedValueOnce(mockedGlobalVariables); + lastBlockNumber = 3; // Default tx with no max block number should be valid expect(await node.isValidTx(noMaxBlockNumberMetadata)).toBe(true); diff --git a/yarn-project/aztec-node/src/aztec-node/server.ts b/yarn-project/aztec-node/src/aztec-node/server.ts index be8d69c9af8..c8a34e7a1ab 100644 --- a/yarn-project/aztec-node/src/aztec-node/server.ts +++ b/yarn-project/aztec-node/src/aztec-node/server.ts @@ -27,6 +27,7 @@ import { TxReceipt, TxStatus, type TxValidator, + type WorldStateSynchronizer, partitionReverts, } from '@aztec/circuit-types'; import { @@ -50,22 +51,24 @@ import { AztecAddress } from '@aztec/foundation/aztec-address'; import { padArrayEnd } from '@aztec/foundation/collection'; import { createDebugLogger } from '@aztec/foundation/log'; import { Timer } from '@aztec/foundation/timer'; +import { type AztecKVStore } from '@aztec/kv-store'; import { openTmpStore } from '@aztec/kv-store/utils'; import { SHA256Trunc, StandardTree, UnbalancedTree } from '@aztec/merkle-tree'; -import { InMemoryAttestationPool, type P2P, createP2PClient } from '@aztec/p2p'; -import { getCanonicalClassRegisterer } from '@aztec/protocol-contracts/class-registerer'; -import { getCanonicalFeeJuice } from '@aztec/protocol-contracts/fee-juice'; -import { getCanonicalInstanceDeployer } from '@aztec/protocol-contracts/instance-deployer'; -import { getCanonicalKeyRegistryAddress } from '@aztec/protocol-contracts/key-registry'; -import { getCanonicalMultiCallEntrypointAddress } from '@aztec/protocol-contracts/multi-call-entrypoint'; import { AggregateTxValidator, DataTxValidator, DoubleSpendTxValidator, - GlobalVariableBuilder, + InMemoryAttestationPool, MetadataTxValidator, - SequencerClient, -} from '@aztec/sequencer-client'; + type P2P, + TxProofValidator, + createP2PClient, +} from '@aztec/p2p'; +import { getCanonicalClassRegisterer } from '@aztec/protocol-contracts/class-registerer'; +import { getCanonicalFeeJuice } from '@aztec/protocol-contracts/fee-juice'; +import { getCanonicalInstanceDeployer } from '@aztec/protocol-contracts/instance-deployer'; +import { getCanonicalMultiCallEntrypointAddress } from '@aztec/protocol-contracts/multi-call-entrypoint'; +import { GlobalVariableBuilder, SequencerClient } from '@aztec/sequencer-client'; import { PublicProcessorFactory, WASMSimulator, WorldStateDB, createSimulationProvider } from '@aztec/simulator'; import { type TelemetryClient } from '@aztec/telemetry-client'; import { NoopTelemetryClient } from '@aztec/telemetry-client/noop'; @@ -76,11 +79,10 @@ import { type ProtocolContractAddresses, } from '@aztec/types/contracts'; import { createValidatorClient } from '@aztec/validator-client'; -import { type WorldStateSynchronizer, createWorldStateSynchronizer } from '@aztec/world-state'; +import { createWorldStateSynchronizer } from '@aztec/world-state'; import { type AztecNodeConfig, getPackageInfo } from './config.js'; import { NodeMetrics } from './node_metrics.js'; -import { TxProofValidator } from './tx_validator/tx_proof_validator.js'; /** * The aztec node. @@ -144,17 +146,23 @@ export class AztecNodeService implements AztecNode { // this may well change in future config.transactionProtocol = `/aztec/tx/${config.l1Contracts.rollupAddress.toString()}`; - // create the tx pool and the p2p client, which will need the l2 block source - const p2pClient = await createP2PClient(config, new InMemoryAttestationPool(), archiver, telemetry); - // now create the merkle trees and the world state synchronizer const worldStateSynchronizer = await createWorldStateSynchronizer(config, archiver, telemetry); + const proofVerifier = config.realProofs ? await BBCircuitVerifier.new(config) : new TestCircuitVerifier(); + + // create the tx pool and the p2p client, which will need the l2 block source + const p2pClient = await createP2PClient( + config, + new InMemoryAttestationPool(), + archiver, + proofVerifier, + worldStateSynchronizer, + telemetry, + ); // start both and wait for them to sync from the block source await Promise.all([p2pClient.start(), worldStateSynchronizer.start()]); - const proofVerifier = config.realProofs ? await BBCircuitVerifier.new(config) : new TestCircuitVerifier(); - const simulationProvider = await createSimulationProvider(config, log); const validatorClient = createValidatorClient(config, p2pClient); @@ -501,18 +509,15 @@ export class AztecNodeService implements AztecNode { throw new Error('The L2ToL1Message you are trying to prove inclusion of does not exist'); } + const tempStores: AztecKVStore[] = []; + // Construct message subtrees const l2toL1Subtrees = await Promise.all( l2ToL1Messages.map(async (msgs, i) => { + const store = openTmpStore(true); + tempStores.push(store); const treeHeight = msgs.length <= 1 ? 1 : Math.ceil(Math.log2(msgs.length)); - const tree = new StandardTree( - openTmpStore(true), - new SHA256Trunc(), - `temp_msgs_subtrees_${i}`, - treeHeight, - 0n, - Fr, - ); + const tree = new StandardTree(store, new SHA256Trunc(), `temp_msgs_subtrees_${i}`, treeHeight, 0n, Fr); await tree.appendLeaves(msgs); return tree; }), @@ -544,6 +549,9 @@ export class AztecNodeService implements AztecNode { 2, ); + // clear the tmp stores + await Promise.all(tempStores.map(store => store.delete())); + return [BigInt(mergedIndex), new SiblingPath(mergedPath.length, mergedPath)]; } @@ -748,21 +756,13 @@ export class AztecNodeService implements AztecNode { public async isValidTx(tx: Tx, isSimulation: boolean = false): Promise { const blockNumber = (await this.blockSource.getBlockNumber()) + 1; - - const newGlobalVariables = await this.globalVariableBuilder.buildGlobalVariables( - new Fr(blockNumber), - // We only need chainId and block number, thus coinbase and fee recipient can be set to 0. - EthAddress.ZERO, - AztecAddress.ZERO, - ); - // These validators are taken from the sequencer, and should match. // The reason why `phases` and `gas` tx validator is in the sequencer and not here is because // those tx validators are customizable by the sequencer. const txValidators: TxValidator[] = [ new DataTxValidator(), - new MetadataTxValidator(newGlobalVariables), - new DoubleSpendTxValidator(new WorldStateDB(this.worldStateSynchronizer.getLatest())), + new MetadataTxValidator(new Fr(this.l1ChainId), new Fr(blockNumber)), + new DoubleSpendTxValidator(new WorldStateDB(this.worldStateSynchronizer.getLatest(), this.contractDataSource)), ]; if (!isSimulation) { @@ -797,7 +797,6 @@ export class AztecNodeService implements AztecNode { classRegisterer: getCanonicalClassRegisterer().address, feeJuice: getCanonicalFeeJuice().address, instanceDeployer: getCanonicalInstanceDeployer().address, - keyRegistry: getCanonicalKeyRegistryAddress(), multiCallEntrypoint: getCanonicalMultiCallEntrypointAddress(), }); } diff --git a/yarn-project/aztec.js/src/account/interface.ts b/yarn-project/aztec.js/src/account/interface.ts index cafef217f9e..eb0c093af0e 100644 --- a/yarn-project/aztec.js/src/account/interface.ts +++ b/yarn-project/aztec.js/src/account/interface.ts @@ -1,6 +1,6 @@ import { type AuthWitness, type CompleteAddress } from '@aztec/circuit-types'; import { type AztecAddress } from '@aztec/circuits.js'; -import { type Fq, type Fr } from '@aztec/foundation/fields'; +import { type Fr } from '@aztec/foundation/fields'; import { type EntrypointInterface } from '../entrypoint/entrypoint.js'; @@ -32,20 +32,4 @@ export interface AccountInterface extends EntrypointInterface, AuthWitnessProvid /** Returns the rollup version for this account */ getVersion(): Fr; } - -/** - * Handler for interfacing with an account's ability to rotate its keys. - */ -export interface AccountKeyRotationInterface { - /** - * Rotates the account master nullifier key pair. - * @param newNskM - The new master nullifier secret key we want to use. - * @remarks - This function also calls the canonical key registry with the account's new derived master nullifier public key. - * We are doing it this way to avoid user error, in the case that a user rotates their keys in the key registry, - * but fails to do so in the key store. This leads to unspendable notes. - * - * This does not hinder our ability to spend notes tied to a previous master nullifier public key, provided we have the master nullifier secret key for it. - */ - rotateNullifierKeys(newNskM: Fq): Promise; -} // docs:end:account-interface diff --git a/yarn-project/aztec.js/src/account/wallet.ts b/yarn-project/aztec.js/src/account/wallet.ts index 5dc257bca01..3d7a2b7407a 100644 --- a/yarn-project/aztec.js/src/account/wallet.ts +++ b/yarn-project/aztec.js/src/account/wallet.ts @@ -1,13 +1,12 @@ import { type AuthWitness, type PXE } from '@aztec/circuit-types'; import { type IntentAction, type IntentInnerHash } from '../utils/authwit.js'; -import { type AccountInterface, type AccountKeyRotationInterface } from './interface.js'; +import { type AccountInterface } from './interface.js'; /** * The wallet interface. */ export type Wallet = AccountInterface & - PXE & - AccountKeyRotationInterface & { + PXE & { createAuthWit(intent: IntentInnerHash | IntentAction): Promise; }; diff --git a/yarn-project/aztec.js/src/contract/batch_call.ts b/yarn-project/aztec.js/src/contract/batch_call.ts index 19fb03999f6..eeda122ec52 100644 --- a/yarn-project/aztec.js/src/contract/batch_call.ts +++ b/yarn-project/aztec.js/src/contract/batch_call.ts @@ -1,5 +1,5 @@ import { type FunctionCall, type TxExecutionRequest } from '@aztec/circuit-types'; -import { FunctionType, decodeReturnValues } from '@aztec/foundation/abi'; +import { FunctionType, decodeFromAbi } from '@aztec/foundation/abi'; import { type Wallet } from '../account/index.js'; import { BaseContractInteraction, type SendMethodOptions } from './base_contract_interaction.js'; @@ -95,7 +95,7 @@ export class BatchCall extends BaseContractInteraction { ? simulatedTx.privateReturnValues?.nested?.[resultIndex].values : simulatedTx.publicOutput?.publicReturnValues?.[resultIndex].values; - results[callIndex] = rawReturnValues ? decodeReturnValues(call.returnTypes, rawReturnValues) : []; + results[callIndex] = rawReturnValues ? decodeFromAbi(call.returnTypes, rawReturnValues) : []; }); return results; } diff --git a/yarn-project/aztec.js/src/contract/contract.test.ts b/yarn-project/aztec.js/src/contract/contract.test.ts index 73076d9b456..57b54e210d8 100644 --- a/yarn-project/aztec.js/src/contract/contract.test.ts +++ b/yarn-project/aztec.js/src/contract/contract.test.ts @@ -1,7 +1,7 @@ import { type Tx, type TxExecutionRequest, type TxHash, type TxReceipt } from '@aztec/circuit-types'; import { AztecAddress, CompleteAddress, EthAddress } from '@aztec/circuits.js'; import { type L1ContractAddresses } from '@aztec/ethereum'; -import { type ContractArtifact, type DecodedReturn, FunctionType } from '@aztec/foundation/abi'; +import { type AbiDecoded, type ContractArtifact, FunctionType } from '@aztec/foundation/abi'; import { type NodeInfo } from '@aztec/types/interfaces'; import { type MockProxy, mock } from 'jest-mock-extended'; @@ -39,7 +39,6 @@ describe('Contract Class', () => { classRegisterer: AztecAddress.random(), feeJuice: AztecAddress.random(), instanceDeployer: AztecAddress.random(), - keyRegistry: AztecAddress.random(), multiCallEntrypoint: AztecAddress.random(), }, }; @@ -128,7 +127,7 @@ describe('Contract Class', () => { wallet.createTxExecutionRequest.mockResolvedValue(mockTxRequest); wallet.getContractInstance.mockResolvedValue(contractInstance); wallet.sendTx.mockResolvedValue(mockTxHash); - wallet.simulateUnconstrained.mockResolvedValue(mockUnconstrainedResultValue as any as DecodedReturn); + wallet.simulateUnconstrained.mockResolvedValue(mockUnconstrainedResultValue as any as AbiDecoded); wallet.getTxReceipt.mockResolvedValue(mockTxReceipt); wallet.getNodeInfo.mockResolvedValue(mockNodeInfo); wallet.proveTx.mockResolvedValue(mockTx); diff --git a/yarn-project/aztec.js/src/contract/contract_function_interaction.ts b/yarn-project/aztec.js/src/contract/contract_function_interaction.ts index ca9daf825e5..8cf48a01389 100644 --- a/yarn-project/aztec.js/src/contract/contract_function_interaction.ts +++ b/yarn-project/aztec.js/src/contract/contract_function_interaction.ts @@ -4,7 +4,7 @@ import { type FunctionAbi, FunctionSelector, FunctionType, - decodeReturnValues, + decodeFromAbi, encodeArguments, } from '@aztec/foundation/abi'; @@ -110,6 +110,6 @@ export class ContractFunctionInteraction extends BaseContractInteraction { ? simulatedTx.privateReturnValues?.nested?.[0].values : simulatedTx.publicOutput?.publicReturnValues?.[0].values; - return rawReturnValues ? decodeReturnValues(this.functionDao.returnTypes, rawReturnValues) : []; + return rawReturnValues ? decodeFromAbi(this.functionDao.returnTypes, rawReturnValues) : []; } } diff --git a/yarn-project/aztec.js/src/contract/get_gas_limits.test.ts b/yarn-project/aztec.js/src/contract/get_gas_limits.test.ts index 51bc1c3e2cc..423095b8cbf 100644 --- a/yarn-project/aztec.js/src/contract/get_gas_limits.test.ts +++ b/yarn-project/aztec.js/src/contract/get_gas_limits.test.ts @@ -1,4 +1,4 @@ -import { PublicKernelType, type SimulatedTx, mockSimulatedTx } from '@aztec/circuit-types'; +import { PublicKernelPhase, type SimulatedTx, mockSimulatedTx } from '@aztec/circuit-types'; import { type CombinedAccumulatedData, Gas } from '@aztec/circuits.js'; import { getGasLimits } from './get_gas_limits.js'; @@ -14,9 +14,9 @@ describe('getGasLimits', () => { data.gasUsed = Gas.from({ daGas: 100, l2Gas: 200 }); simulatedTx.tx.data.publicInputs.end = data; simulatedTx.publicOutput!.gasUsed = { - [PublicKernelType.SETUP]: Gas.from({ daGas: 10, l2Gas: 20 }), - [PublicKernelType.APP_LOGIC]: Gas.from({ daGas: 20, l2Gas: 40 }), - [PublicKernelType.TEARDOWN]: Gas.from({ daGas: 10, l2Gas: 20 }), + [PublicKernelPhase.SETUP]: Gas.from({ daGas: 10, l2Gas: 20 }), + [PublicKernelPhase.APP_LOGIC]: Gas.from({ daGas: 20, l2Gas: 40 }), + [PublicKernelPhase.TEARDOWN]: Gas.from({ daGas: 10, l2Gas: 20 }), }; simulationTeardownGasLimits = Gas.empty(); }); diff --git a/yarn-project/aztec.js/src/contract/get_gas_limits.ts b/yarn-project/aztec.js/src/contract/get_gas_limits.ts index 1bc37d39be7..d683a508d10 100644 --- a/yarn-project/aztec.js/src/contract/get_gas_limits.ts +++ b/yarn-project/aztec.js/src/contract/get_gas_limits.ts @@ -1,4 +1,4 @@ -import { PublicKernelType, type SimulatedTx } from '@aztec/circuit-types'; +import { PublicKernelPhase, type SimulatedTx } from '@aztec/circuit-types'; import { Gas } from '@aztec/circuits.js'; /** @@ -14,7 +14,7 @@ export function getGasLimits(simulatedTx: SimulatedTx, simulationTeardownGasLimi const publicGasUsed = Object.values(simulatedTx.publicOutput.gasUsed) .filter(Boolean) .reduce((total, current) => total.add(current), Gas.empty()); - const teardownGas = simulatedTx.publicOutput.gasUsed[PublicKernelType.TEARDOWN] ?? Gas.empty(); + const teardownGas = simulatedTx.publicOutput.gasUsed[PublicKernelPhase.TEARDOWN] ?? Gas.empty(); return { totalGas: privateGasUsed.add(publicGasUsed).mul(1 + pad), diff --git a/yarn-project/aztec.js/src/index.ts b/yarn-project/aztec.js/src/index.ts index 84e5a7d6c14..dba2233180c 100644 --- a/yarn-project/aztec.js/src/index.ts +++ b/yarn-project/aztec.js/src/index.ts @@ -29,6 +29,7 @@ export { type ContractStorageLayout, DefaultWaitOpts, DeployMethod, + DeployOptions, DeploySentTx, type SendMethodOptions, SentTx, @@ -143,7 +144,7 @@ export { ContractClassWithId, ContractInstanceWithAddress } from '@aztec/types/c // TODO: These kinds of things have no place on our public api. // External devs will almost certainly have their own methods of doing these things. // If we want to use them in our own "aztec.js consuming code", import them from foundation as needed. -export { encodeArguments } from '@aztec/foundation/abi'; +export { encodeArguments, decodeFromAbi, type AbiType } from '@aztec/foundation/abi'; export { toBigIntBE } from '@aztec/foundation/bigint-buffer'; export { sha256 } from '@aztec/foundation/crypto'; export { makeFetch } from '@aztec/foundation/json-rpc/client'; diff --git a/yarn-project/aztec.js/src/utils/anvil_test_watcher.ts b/yarn-project/aztec.js/src/utils/anvil_test_watcher.ts index 1b6e0cf7f63..859799fd130 100644 --- a/yarn-project/aztec.js/src/utils/anvil_test_watcher.ts +++ b/yarn-project/aztec.js/src/utils/anvil_test_watcher.ts @@ -61,7 +61,7 @@ export class AnvilTestWatcher { async mineIfSlotFilled() { try { const currentSlot = await this.rollup.read.getCurrentSlot(); - const pendingBlockNumber = BigInt(await this.rollup.read.pendingBlockCount()) - 1n; + const pendingBlockNumber = BigInt(await this.rollup.read.getPendingBlockNumber()); const [, , lastSlotNumber] = await this.rollup.read.blocks([pendingBlockNumber]); if (currentSlot === lastSlotNumber) { diff --git a/yarn-project/aztec.js/src/wallet/account_wallet.ts b/yarn-project/aztec.js/src/wallet/account_wallet.ts index 9eab8dd9866..cdf59fb63a4 100644 --- a/yarn-project/aztec.js/src/wallet/account_wallet.ts +++ b/yarn-project/aztec.js/src/wallet/account_wallet.ts @@ -1,5 +1,5 @@ import { type AuthWitness, type PXE, type TxExecutionRequest } from '@aztec/circuit-types'; -import { AztecAddress, CANONICAL_KEY_REGISTRY_ADDRESS, Fq, Fr, derivePublicKeyFromSecretKey } from '@aztec/circuits.js'; +import { type AztecAddress, Fr } from '@aztec/circuits.js'; import { type ABIParameterVisibility, type FunctionAbi, FunctionType } from '@aztec/foundation/abi'; import { AuthRegistryAddress } from '@aztec/protocol-contracts/auth-registry'; @@ -161,30 +161,6 @@ export class AccountWallet extends BaseWallet { return results; } - /** - * Rotates the account master nullifier key pair. - * @param newNskM - The new master nullifier secret key we want to use. - * @remarks - This function also calls the canonical key registry with the account's new derived master nullifier public key. - * We are doing it this way to avoid user error, in the case that a user rotates their keys in the key registry, - * but fails to do so in the key store. This leads to unspendable notes. - * - * This does not hinder our ability to spend notes tied to a previous master nullifier public key, provided we have the master nullifier secret key for it. - */ - public async rotateNullifierKeys(newNskM: Fq = Fq.random()): Promise { - // We rotate our secret key in the keystore first, because if the subsequent interaction fails, there are no bad side-effects. - // If vice versa (the key registry is called first), but the call to the PXE fails, we will end up in a situation with unspendable notes, as we have not committed our - // nullifier secret key to our wallet. - await this.pxe.rotateNskM(this.getAddress(), newNskM); - const interaction = new ContractFunctionInteraction( - this, - AztecAddress.fromBigInt(CANONICAL_KEY_REGISTRY_ADDRESS), - this.getRotateNpkMAbi(), - [this.getAddress(), derivePublicKeyFromSecretKey(newNskM).toWrappedNoirStruct(), Fr.ZERO], - ); - - await interaction.send().wait(); - } - /** Returns the complete address of the account that implements this wallet. */ public getCompleteAddress() { return this.account.getCompleteAddress(); @@ -252,64 +228,4 @@ export class AccountWallet extends BaseWallet { returnTypes: [{ kind: 'boolean' }], }; } - - private getRotateNpkMAbi(): FunctionAbi { - return { - name: 'rotate_npk_m', - isInitializer: false, - functionType: FunctionType.PUBLIC, - isInternal: false, - isStatic: false, - parameters: [ - { - name: 'address', - type: { - fields: [{ name: 'inner', type: { kind: 'field' } }], - kind: 'struct', - path: 'authwit::aztec::protocol_types::address::aztec_address::AztecAddress', - }, - visibility: 'private' as ABIParameterVisibility, - }, - { - name: 'new_npk_m', - type: { - fields: [ - { - name: 'inner', - type: { - fields: [ - { - name: 'x', - type: { - kind: 'field', - }, - }, - { - name: 'y', - type: { - kind: 'field', - }, - }, - { - name: 'is_infinite', - type: { - kind: 'boolean', - }, - }, - ], - kind: 'struct', - path: 'std::embedded_curve_ops::EmbeddedCurvePoint', - }, - }, - ], - kind: 'struct', - path: 'aztec::keys::public_keys::NpkM', - }, - visibility: 'private' as ABIParameterVisibility, - }, - { name: 'nonce', type: { kind: 'field' }, visibility: 'private' as ABIParameterVisibility }, - ], - returnTypes: [], - }; - } } diff --git a/yarn-project/aztec.js/src/wallet/base_wallet.ts b/yarn-project/aztec.js/src/wallet/base_wallet.ts index d9150a87ac9..b6add2cf118 100644 --- a/yarn-project/aztec.js/src/wallet/base_wallet.ts +++ b/yarn-project/aztec.js/src/wallet/base_wallet.ts @@ -24,7 +24,6 @@ import { type NoteProcessorStats } from '@aztec/circuit-types/stats'; import { type AztecAddress, type CompleteAddress, - type Fq, type Fr, type L1_TO_L2_MSG_TREE_HEIGHT, type PartialAddress, @@ -54,8 +53,6 @@ export abstract class BaseWallet implements Wallet { abstract createAuthWit(intent: Fr | Buffer | IntentInnerHash | IntentAction): Promise; - abstract rotateNullifierKeys(newNskM: Fq): Promise; - setScopes(scopes: AztecAddress[]) { this.scopes = scopes; } @@ -82,9 +79,6 @@ export abstract class BaseWallet implements Wallet { registerAccount(secretKey: Fr, partialAddress: PartialAddress): Promise { return this.pxe.registerAccount(secretKey, partialAddress); } - rotateNskM(address: AztecAddress, secretKey: Fq) { - return this.pxe.rotateNskM(address, secretKey); - } registerRecipient(account: CompleteAddress): Promise { return this.pxe.registerRecipient(account); } diff --git a/yarn-project/aztec.js/src/wallet/signerless_wallet.ts b/yarn-project/aztec.js/src/wallet/signerless_wallet.ts index 2f73cca8c27..0231d79b01a 100644 --- a/yarn-project/aztec.js/src/wallet/signerless_wallet.ts +++ b/yarn-project/aztec.js/src/wallet/signerless_wallet.ts @@ -1,5 +1,5 @@ import { type AuthWitness, type PXE, type TxExecutionRequest } from '@aztec/circuit-types'; -import { type CompleteAddress, type Fq, type Fr } from '@aztec/circuits.js'; +import { type CompleteAddress, type Fr } from '@aztec/circuits.js'; import { DefaultEntrypoint } from '../entrypoint/default_entrypoint.js'; import { type EntrypointInterface, type ExecutionRequestInit } from '../entrypoint/entrypoint.js'; @@ -42,8 +42,4 @@ export class SignerlessWallet extends BaseWallet { createAuthWit(_intent: Fr | Buffer | IntentInnerHash | IntentAction): Promise { throw new Error('SignerlessWallet: Method createAuthWit not implemented.'); } - - rotateNullifierKeys(_newNskM: Fq): Promise { - throw new Error('SignerlessWallet: Method rotateNullifierKeys not implemented.'); - } } diff --git a/yarn-project/aztec/CHANGELOG.md b/yarn-project/aztec/CHANGELOG.md index 4c6960f4fdd..29b59929f95 100644 --- a/yarn-project/aztec/CHANGELOG.md +++ b/yarn-project/aztec/CHANGELOG.md @@ -1,5 +1,30 @@ # Changelog +## [0.56.0](https://github.com/AztecProtocol/aztec-packages/compare/aztec-package-v0.55.1...aztec-package-v0.56.0) (2024-09-25) + + +### ⚠ BREAKING CHANGES + +* remove key registry ([#8613](https://github.com/AztecProtocol/aztec-packages/issues/8613)) + +### Features + +* Remove key registry ([#8613](https://github.com/AztecProtocol/aztec-packages/issues/8613)) ([a668506](https://github.com/AztecProtocol/aztec-packages/commit/a6685067a0a5d17cbbc4cbfed4e78e364864ff51)) +* Update rollup storage to hold pending/proven tips ([#8583](https://github.com/AztecProtocol/aztec-packages/issues/8583)) ([38e3051](https://github.com/AztecProtocol/aztec-packages/commit/38e3051d60f9f8a80e33fab4e0f7f3ec3cde2ee2)) + +## [0.55.1](https://github.com/AztecProtocol/aztec-packages/compare/aztec-package-v0.55.0...aztec-package-v0.55.1) (2024-09-17) + + +### Features + +* CI deploy on sepolia ([#8514](https://github.com/AztecProtocol/aztec-packages/issues/8514)) ([54f0344](https://github.com/AztecProtocol/aztec-packages/commit/54f0344b0fd5eba26d0c02641533ad9f18616de1)) +* Tx verification & peer scoring on p2p layer. bot support for EasyPrivateToken ([#8298](https://github.com/AztecProtocol/aztec-packages/issues/8298)) ([beb651f](https://github.com/AztecProtocol/aztec-packages/commit/beb651f241fe71776689bedc764be650dfd5ae0c)) + + +### Miscellaneous + +* Remove ARCHIVER_L1_START_BLOCK ([#8554](https://github.com/AztecProtocol/aztec-packages/issues/8554)) ([bc8d461](https://github.com/AztecProtocol/aztec-packages/commit/bc8d461f6fc20c55aa94647dc671ecb59f52cad2)) + ## [0.55.0](https://github.com/AztecProtocol/aztec-packages/compare/aztec-package-v0.54.0...aztec-package-v0.55.0) (2024-09-13) diff --git a/yarn-project/aztec/package.json b/yarn-project/aztec/package.json index 9076f24bd63..bcc6c9196c5 100644 --- a/yarn-project/aztec/package.json +++ b/yarn-project/aztec/package.json @@ -1,6 +1,6 @@ { "name": "@aztec/aztec", - "version": "0.55.0", + "version": "0.56.0", "type": "module", "exports": { ".": "./dest/index.js" diff --git a/yarn-project/aztec/src/cli/aztec_start_options.ts b/yarn-project/aztec/src/cli/aztec_start_options.ts index 4b551d2dc24..99aa5c54218 100644 --- a/yarn-project/aztec/src/cli/aztec_start_options.ts +++ b/yarn-project/aztec/src/cli/aztec_start_options.ts @@ -180,10 +180,10 @@ export const aztecStartOptions: { [key: string]: AztecStartOption[] } = { parseVal: (val: string) => (val ? parseInt(val) : undefined), }, { - flag: '--node.assumeProvenUntilBlockNumber', + flag: '--node.assumeProvenThroughBlockNumber', description: 'Cheats the rollup contract into assuming every block until this one is proven. Useful for speeding up bootstraps.', - envVar: 'ASSUME_PROVEN_UNTIL_BLOCK_NUMBER', + envVar: 'ASSUME_PROVEN_THROUGH_BLOCK_NUMBER', parseVal: (val: string) => parseInt(val, 10), defaultValue: 0, }, diff --git a/yarn-project/aztec/src/cli/cmds/start_node.ts b/yarn-project/aztec/src/cli/cmds/start_node.ts index 85f0f14fa54..80d538c675d 100644 --- a/yarn-project/aztec/src/cli/cmds/start_node.ts +++ b/yarn-project/aztec/src/cli/cmds/start_node.ts @@ -47,7 +47,7 @@ export const startNode = async ( throw new Error('--node.publisherPrivateKey or --l1-mnemonic is required to deploy L1 contracts'); } await deployContractsToL1(nodeConfig, account!, undefined, { - assumeProvenUntilBlockNumber: nodeSpecificOptions.assumeProvenUntilBlockNumber, + assumeProvenThroughBlockNumber: nodeSpecificOptions.assumeProvenThroughBlockNumber, salt: nodeSpecificOptions.deployAztecContractsSalt, }); } diff --git a/yarn-project/aztec/src/sandbox.ts b/yarn-project/aztec/src/sandbox.ts index 200cdcbe04f..30c38f5b3a7 100644 --- a/yarn-project/aztec/src/sandbox.ts +++ b/yarn-project/aztec/src/sandbox.ts @@ -3,7 +3,7 @@ import { type AztecNodeConfig, AztecNodeService, getConfigEnvVars } from '@aztec import { AnvilTestWatcher, EthCheatCodes, SignerlessWallet } from '@aztec/aztec.js'; import { DefaultMultiCallEntrypoint } from '@aztec/aztec.js/entrypoint'; import { type AztecNode } from '@aztec/circuit-types'; -import { deployCanonicalAuthRegistry, deployCanonicalKeyRegistry, deployCanonicalL2FeeJuice } from '@aztec/cli/misc'; +import { deployCanonicalAuthRegistry, deployCanonicalL2FeeJuice } from '@aztec/cli/misc'; import { type DeployL1Contracts, type L1ContractArtifactsForDeployment, @@ -88,7 +88,7 @@ export async function deployContractsToL1( aztecNodeConfig: AztecNodeConfig, hdAccount: HDAccount | PrivateKeyAccount, contractDeployLogger = logger, - opts: { assumeProvenUntilBlockNumber?: number; salt?: number } = {}, + opts: { assumeProvenThroughBlockNumber?: number; salt?: number } = {}, ) { const l1Artifacts: L1ContractArtifactsForDeployment = { registry: { @@ -125,7 +125,7 @@ export async function deployContractsToL1( deployL1Contracts(aztecNodeConfig.l1RpcUrl, hdAccount, chain.chainInfo, contractDeployLogger, l1Artifacts, { l2FeeJuiceAddress: FeeJuiceAddress, vkTreeRoot: getVKTreeRoot(), - assumeProvenUntil: opts.assumeProvenUntilBlockNumber, + assumeProvenThrough: opts.assumeProvenThroughBlockNumber, salt: opts.salt, }), ); @@ -185,9 +185,6 @@ export async function createSandbox(config: Partial = {}) { const node = await createAztecNode(aztecNodeConfig, client); const pxe = await createAztecPXE(node); - await deployCanonicalKeyRegistry( - new SignerlessWallet(pxe, new DefaultMultiCallEntrypoint(aztecNodeConfig.l1ChainId, aztecNodeConfig.version)), - ); await deployCanonicalAuthRegistry( new SignerlessWallet(pxe, new DefaultMultiCallEntrypoint(aztecNodeConfig.l1ChainId, aztecNodeConfig.version)), ); diff --git a/yarn-project/aztec/terraform/bot/main.tf b/yarn-project/aztec/terraform/bot/main.tf index f49e44b334e..45a6321e13d 100644 --- a/yarn-project/aztec/terraform/bot/main.tf +++ b/yarn-project/aztec/terraform/bot/main.tf @@ -176,7 +176,8 @@ resource "aws_ecs_task_definition" "aztec-bot" { { name = "BOT_SKIP_PUBLIC_SIMULATION", value = tostring(var.BOT_SKIP_PUBLIC_SIMULATION) }, { name = "BOT_L2_GAS_LIMIT", value = var.BOT_L2_GAS_LIMIT }, { name = "BOT_DA_GAS_LIMIT", value = var.BOT_DA_GAS_LIMIT }, - { name = "LOG_JSON", value = "1" } + { name = "LOG_JSON", value = "1" }, + { name = "BOT_TOKEN_CONTRACT", value = var.BOT_TOKEN_CONTRACT } ] logConfiguration = { logDriver = "awslogs" diff --git a/yarn-project/aztec/terraform/bot/variables.tf b/yarn-project/aztec/terraform/bot/variables.tf index 679dd2187ab..5d7b022fe58 100644 --- a/yarn-project/aztec/terraform/bot/variables.tf +++ b/yarn-project/aztec/terraform/bot/variables.tf @@ -80,4 +80,8 @@ variable "BOT_DA_GAS_LIMIT" { type = string } +variable "BOT_TOKEN_CONTRACT" { + type = string + default = "TokenContract" +} diff --git a/yarn-project/aztec/terraform/node/main.tf b/yarn-project/aztec/terraform/node/main.tf index 9933df21a32..4ca97f5fe41 100644 --- a/yarn-project/aztec/terraform/node/main.tf +++ b/yarn-project/aztec/terraform/node/main.tf @@ -58,6 +58,7 @@ locals { node_p2p_private_keys = var.NODE_P2P_PRIVATE_KEYS node_count = length(local.sequencer_private_keys) data_dir = "/usr/src/yarn-project/aztec" + eth_host = var.ETHEREUM_HOST != "" ? var.ETHEREUM_HOST : "https://${var.DEPLOY_TAG}-mainnet-fork.aztec.network:8545/admin-${var.FORK_ADMIN_API_KEY}" } output "node_count" { @@ -239,6 +240,10 @@ resource "aws_ecs_task_definition" "aztec-node" { name = "DEPLOY_TAG" value = var.DEPLOY_TAG }, + { + name = "L1_CHAIN_ID" + value = var.L1_CHAIN_ID + }, { name = "DEPLOY_AZTEC_CONTRACTS" value = "false" @@ -253,24 +258,16 @@ resource "aws_ecs_task_definition" "aztec-node" { }, { name = "ETHEREUM_HOST" - value = "https://${var.DEPLOY_TAG}-mainnet-fork.aztec.network:8545/admin-${var.FORK_ADMIN_API_KEY}" + value = "${local.eth_host}" }, { name = "DATA_DIRECTORY" value = "${local.data_dir}/node_${count.index + 1}/data" }, - { - name = "IS_DEV_NET" - value = "true" - }, { name = "ARCHIVER_POLLING_INTERVAL" value = "10000" }, - { - name = "ARCHIVER_L1_START_BLOCK", - value = "15918000" - }, { name = "SEQ_RETRY_INTERVAL" value = "10000" @@ -359,10 +356,6 @@ resource "aws_ecs_task_definition" "aztec-node" { name = "P2P_ENABLED" value = tostring(var.P2P_ENABLED) }, - { - name = "L1_CHAIN_ID" - value = var.L1_CHAIN_ID - }, { name = "PEER_ID_PRIVATE_KEY" value = local.node_p2p_private_keys[count.index] @@ -377,7 +370,7 @@ resource "aws_ecs_task_definition" "aztec-node" { }, { name = "P2P_BLOCK_CHECK_INTERVAL_MS" - value = "1000" + value = "10000" }, { name = "P2P_PEER_CHECK_INTERVAL_MS" @@ -387,6 +380,34 @@ resource "aws_ecs_task_definition" "aztec-node" { name = "P2P_TX_POOL_KEEP_PROVEN_FOR", value = tostring(var.P2P_TX_POOL_KEEP_PROVEN_FOR) }, + { + name = "P2P_SEVERE_PEER_PENALTY_BLOCK_LENGTH" + value = tostring(var.P2P_SEVERE_PEER_PENALTY_BLOCK_LENGTH) + }, + { + name = "P2P_GOSSIPSUB_INTERVAL_MS" + value = tostring(var.P2P_GOSSIPSUB_INTERVAL_MS) + }, + { + name = "P2P_GOSSIPSUB_D" + value = tostring(var.P2P_GOSSIPSUB_D) + }, + { + name = "P2P_GOSSIPSUB_DLO" + value = tostring(var.P2P_GOSSIPSUB_DLO) + }, + { + name = "P2P_GOSSIPSUB_DHI" + value = tostring(var.P2P_GOSSIPSUB_DHI) + }, + { + name = "P2P_GOSSIPSUB_MCACHE_LENGTH" + value = tostring(var.P2P_GOSSIPSUB_MCACHE_LENGTH) + }, + { + name = "P2P_GOSSIPSUB_MCACHE_GOSSIP" + value = tostring(var.P2P_GOSSIPSUB_MCACHE_GOSSIP) + }, { name = "PROVER_AGENT_ENABLED" value = "false" diff --git a/yarn-project/aztec/terraform/node/variables.tf b/yarn-project/aztec/terraform/node/variables.tf index 533f07cc03e..5336092839f 100644 --- a/yarn-project/aztec/terraform/node/variables.tf +++ b/yarn-project/aztec/terraform/node/variables.tf @@ -12,7 +12,13 @@ variable "API_KEY" { } variable "FORK_ADMIN_API_KEY" { - type = string + type = string + default = "" +} + +variable "ETHEREUM_HOST" { + type = string + default = "" } variable "SEQUENCER_PRIVATE_KEYS" { @@ -79,6 +85,41 @@ variable "P2P_TX_POOL_KEEP_PROVEN_FOR" { default = 64 } +variable "P2P_GOSSIPSUB_INTERVAL_MS" { + type = number + default = 1000 +} + +variable "P2P_GOSSIPSUB_D" { + type = number + default = 8 +} + +variable "P2P_GOSSIPSUB_DLO" { + type = number + default = 4 +} + +variable "P2P_GOSSIPSUB_DHI" { + type = number + default = 12 +} + +variable "P2P_GOSSIPSUB_MCACHE_LENGTH" { + type = number + default = 5 +} + +variable "P2P_GOSSIPSUB_MCACHE_GOSSIP" { + type = number + default = 3 +} + +variable "P2P_SEVERE_PEER_PENALTY_BLOCK_LENGTH" { + type = number + default = 30 +} + variable "PROVING_ENABLED" { type = bool default = false diff --git a/yarn-project/aztec/terraform/prover-node/main.tf b/yarn-project/aztec/terraform/prover-node/main.tf index a9c9a9708ca..5d22fe5300d 100644 --- a/yarn-project/aztec/terraform/prover-node/main.tf +++ b/yarn-project/aztec/terraform/prover-node/main.tf @@ -58,6 +58,7 @@ locals { node_p2p_private_keys = var.NODE_P2P_PRIVATE_KEYS node_count = length(local.prover_private_keys) data_dir = "/usr/src/yarn-project/aztec" + eth_host = var.ETHEREUM_HOST != "" ? var.ETHEREUM_HOST : "https://${var.DEPLOY_TAG}-mainnet-fork.aztec.network:8545/admin-${var.API_KEY}" } output "node_count" { @@ -237,11 +238,10 @@ resource "aws_ecs_task_definition" "aztec-prover-node" { { name = "DEBUG", value = "aztec:*,-json-rpc:json_proxy:*,-aztec:avm_simulator:*" }, { name = "DEPLOY_TAG", value = var.DEPLOY_TAG }, { name = "NETWORK_NAME", value = "${var.DEPLOY_TAG}" }, - { name = "ETHEREUM_HOST", value = "https://${var.DEPLOY_TAG}-mainnet-fork.aztec.network:8545/${var.API_KEY}" }, + { name = "ETHEREUM_HOST", value = "${local.eth_host}" }, { name = "L1_CHAIN_ID", value = var.L1_CHAIN_ID }, { name = "DATA_DIRECTORY", value = "${local.data_dir}/prover_node_${count.index + 1}/data" }, { name = "DEPLOY_AZTEC_CONTRACTS", value = "false" }, - { name = "IS_DEV_NET", value = "true" }, // API { name = "AZTEC_PORT", value = "80" }, @@ -250,7 +250,6 @@ resource "aws_ecs_task_definition" "aztec-prover-node" { // Archiver { name = "ARCHIVER_POLLING_INTERVAL", value = "10000" }, - { name = "ARCHIVER_L1_START_BLOCK", value = "15918000" }, // Aztec node to pull clientivc proofs from (to be replaced with a p2p connection) { name = "TX_PROVIDER_NODE_URL", value = "http://${var.DEPLOY_TAG}-aztec-node-${count.index + 1}.local/${var.DEPLOY_TAG}/aztec-node-${count.index + 1}/${var.API_KEY}" }, diff --git a/yarn-project/aztec/terraform/prover-node/variables.tf b/yarn-project/aztec/terraform/prover-node/variables.tf index 2f29c2f5b71..3d6909375c9 100644 --- a/yarn-project/aztec/terraform/prover-node/variables.tf +++ b/yarn-project/aztec/terraform/prover-node/variables.tf @@ -7,8 +7,14 @@ variable "IMAGE_TAG" { default = "latest" } +variable "ETHEREUM_HOST" { + type = string + default = "" +} + variable "API_KEY" { - type = string + type = string + default = "" } variable "PROVER_PRIVATE_KEYS" { diff --git a/yarn-project/bb-prover/package.json b/yarn-project/bb-prover/package.json index 3fc9ae17d27..7adf7f8a7eb 100644 --- a/yarn-project/bb-prover/package.json +++ b/yarn-project/bb-prover/package.json @@ -74,6 +74,7 @@ }, "devDependencies": { "@aztec/ethereum": "workspace:^", + "@aztec/types": "workspace:^", "@jest/globals": "^29.5.0", "@types/jest": "^29.5.0", "@types/memdown": "^3.0.0", diff --git a/yarn-project/bb-prover/src/avm_proving.test.ts b/yarn-project/bb-prover/src/avm_proving.test.ts index ebf5af81ea5..20645d878e5 100644 --- a/yarn-project/bb-prover/src/avm_proving.test.ts +++ b/yarn-project/bb-prover/src/avm_proving.test.ts @@ -1,47 +1,15 @@ -import { - AvmCircuitInputs, - AvmVerificationKeyData, - AztecAddress, - ContractStorageRead, - ContractStorageUpdateRequest, - FunctionSelector, - Gas, - GlobalVariables, - Header, - L2ToL1Message, - LogHash, - MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL, - MAX_L2_TO_L1_MSGS_PER_CALL, - MAX_NOTE_HASHES_PER_CALL, - MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, - MAX_NULLIFIERS_PER_CALL, - MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL, - MAX_NULLIFIER_READ_REQUESTS_PER_CALL, - MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, - MAX_PUBLIC_DATA_READS_PER_CALL, - MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, - MAX_UNENCRYPTED_LOGS_PER_CALL, - NoteHash, - Nullifier, - PublicCallRequest, - PublicCircuitPublicInputs, - ReadRequest, - RevertCode, - TreeLeafReadRequest, -} from '@aztec/circuits.js'; -import { computeVarArgsHash } from '@aztec/circuits.js/hash'; -import { padArrayEnd } from '@aztec/foundation/collection'; +import { AvmCircuitInputs, AvmVerificationKeyData, FunctionSelector, Gas, GlobalVariables } from '@aztec/circuits.js'; import { Fr } from '@aztec/foundation/fields'; import { createDebugLogger } from '@aztec/foundation/log'; -import { AvmSimulator, type PublicContractsDB, type PublicExecutionResult, type PublicStateDB } from '@aztec/simulator'; +import { AvmSimulator, PublicSideEffectTrace, type WorldStateDB } from '@aztec/simulator'; import { getAvmTestContractBytecode, initContext, initExecutionEnvironment, - initHostStorage, initPersistableStateManager, resolveAvmTestContractAssertionMessage, } from '@aztec/simulator/avm/fixtures'; +import { SerializableContractInstance } from '@aztec/types/contracts'; import { jest } from '@jest/globals'; import { mock } from 'jest-mock-extended'; @@ -49,151 +17,24 @@ import fs from 'node:fs/promises'; import { tmpdir } from 'node:os'; import path from 'path'; -import { PublicSideEffectTrace } from '../../simulator/src/public/side_effect_trace.js'; -import { SerializableContractInstance } from '../../types/src/contracts/contract_instance.js'; import { type BBSuccess, BB_RESULT, generateAvmProof, verifyAvmProof } from './bb/execute.js'; +import { getPublicInputs } from './test/test_avm.js'; import { extractAvmVkData } from './verification_key/verification_key_data.js'; -const TIMEOUT = 60_000; +const TIMEOUT = 180_000; const TIMESTAMP = new Fr(99833); describe('AVM WitGen, proof generation and verification', () => { - const avmFunctionsAndCalldata: [string, Fr[]][] = [ - ['add_args_return', [new Fr(1), new Fr(2)]], - ['get_address', []], - ['note_hash_exists', [new Fr(1), new Fr(2)]], - ['test_get_contract_instance', []], - ['set_storage_single', [new Fr(1)]], - ['set_storage_list', [new Fr(1), new Fr(2)]], - ['read_storage_single', [new Fr(1)]], - ['read_storage_list', [new Fr(1)]], - ['new_note_hash', [new Fr(1)]], - ['new_nullifier', [new Fr(1)]], - ['nullifier_exists', [new Fr(1)]], - ['l1_to_l2_msg_exists', [new Fr(1), new Fr(2)]], - ['send_l2_to_l1_msg', [new Fr(1), new Fr(2)]], - ['to_radix_le', [new Fr(10)]], - ['nested_call_to_add', [new Fr(1), new Fr(2)]], - ]; - - it.each(avmFunctionsAndCalldata)( - 'Should prove %s', - async (name, calldata) => { - await proveAndVerifyAvmTestContract(name, calldata); - }, - TIMEOUT, - ); - - /************************************************************************ - * Hashing functions - ************************************************************************/ - describe('AVM hash functions', () => { - const avmHashFunctions: [string, Fr[]][] = [ - [ - 'keccak_hash', - [ - new Fr(189), - new Fr(0), - new Fr(0), - new Fr(0), - new Fr(0), - new Fr(0), - new Fr(0), - new Fr(0), - new Fr(0), - new Fr(0), - ], - ], - [ - 'poseidon2_hash', - [new Fr(0), new Fr(1), new Fr(2), new Fr(3), new Fr(4), new Fr(5), new Fr(6), new Fr(7), new Fr(8), new Fr(9)], - ], - [ - 'sha256_hash', - [new Fr(0), new Fr(1), new Fr(2), new Fr(3), new Fr(4), new Fr(5), new Fr(6), new Fr(7), new Fr(8), new Fr(9)], - ], - [ - 'pedersen_hash', - [new Fr(0), new Fr(1), new Fr(2), new Fr(3), new Fr(4), new Fr(5), new Fr(6), new Fr(7), new Fr(8), new Fr(9)], - ], - [ - 'pedersen_hash_with_index', - [new Fr(0), new Fr(1), new Fr(2), new Fr(3), new Fr(4), new Fr(5), new Fr(6), new Fr(7), new Fr(8), new Fr(9)], - ], - ]; - - it.each(avmHashFunctions)( - 'Should prove %s', - async (name, calldata) => { - await proveAndVerifyAvmTestContract(name, calldata); - }, - TIMEOUT * 2, // We need more for keccak for now - ); - }); - it( - 'Should prove that timestamp matches', + 'Should prove and verify bulk_testing', async () => { - await proveAndVerifyAvmTestContract('assert_timestamp', [TIMESTAMP]); + await proveAndVerifyAvmTestContract( + 'bulk_testing', + [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x)), + ); }, TIMEOUT, ); - - it( - 'Should prove that mutated timestamp does not match and a revert is performed', - async () => { - // The error assertion string must match with that of assert_timestamp noir function. - await proveAndVerifyAvmTestContract('assert_timestamp', [TIMESTAMP.add(new Fr(1))], 'timestamp does not match'); - }, - TIMEOUT, - ); - - /************************************************************************ - * Avm Embedded Curve functions - ************************************************************************/ - describe('AVM Embedded Curve functions', () => { - const avmEmbeddedCurveFunctions: [string, Fr[]][] = [ - ['elliptic_curve_add_and_double', []], - ['variable_base_msm', []], - ['pedersen_commit', [new Fr(1), new Fr(100)]], - ]; - it.each(avmEmbeddedCurveFunctions)( - 'Should prove %s', - async (name, calldata) => { - await proveAndVerifyAvmTestContract(name, calldata); - }, - TIMEOUT, - ); - }); - - /************************************************************************ - * AvmContext functions - ************************************************************************/ - describe('AVM Context functions', () => { - const avmContextFunctions = [ - 'get_address', - 'get_storage_address', - 'get_sender', - 'get_fee_per_l2_gas', - 'get_fee_per_da_gas', - 'get_transaction_fee', - 'get_function_selector', - 'get_chain_id', - 'get_version', - 'get_block_number', - 'get_timestamp', - 'get_l2_gas_left', - 'get_da_gas_left', - ]; - - it.each(avmContextFunctions)( - 'Should prove %s', - async contextFunction => { - await proveAndVerifyAvmTestContract(contextFunction); - }, - TIMEOUT, - ); - }); }); /************************************************************************ @@ -216,7 +57,7 @@ const proveAndVerifyAvmTestContract = async ( globals.timestamp = TIMESTAMP; const environment = initExecutionEnvironment({ functionSelector, calldata, globals }); - const contractsDb = mock(); + const worldStateDB = mock(); const contractInstance = new SerializableContractInstance({ version: 1, salt: new Fr(0x123), @@ -225,18 +66,16 @@ const proveAndVerifyAvmTestContract = async ( initializationHash: new Fr(0x101112), publicKeysHash: new Fr(0x161718), }).withAddress(environment.address); - contractsDb.getContractInstance.mockResolvedValue(Promise.resolve(contractInstance)); + worldStateDB.getContractInstance.mockResolvedValue(Promise.resolve(contractInstance)); - const storageDb = mock(); const storageValue = new Fr(5); - storageDb.storageRead.mockResolvedValue(Promise.resolve(storageValue)); + worldStateDB.storageRead.mockResolvedValue(Promise.resolve(storageValue)); - const hostStorage = initHostStorage({ contractsDb }); const trace = new PublicSideEffectTrace(startSideEffectCounter); - const persistableState = initPersistableStateManager({ hostStorage, trace }); + const persistableState = initPersistableStateManager({ worldStateDB, trace }); const context = initContext({ env: environment, persistableState }); const nestedCallBytecode = getAvmTestContractBytecode('add_args_return'); - jest.spyOn(hostStorage.contractsDb, 'getBytecode').mockResolvedValue(nestedCallBytecode); + jest.spyOn(worldStateDB, 'getBytecode').mockResolvedValue(nestedCallBytecode); const startGas = new Gas(context.machineState.gasLeft.daGas, context.machineState.gasLeft.l2Gas); @@ -293,57 +132,3 @@ const proveAndVerifyAvmTestContract = async ( const verificationRes = await verifyAvmProof(bbPath, succeededRes.proofPath!, rawVkPath, logger); expect(verificationRes.status).toBe(BB_RESULT.SUCCESS); }; - -// TODO: pub somewhere more usable - copied from abstract phase manager -const getPublicInputs = (result: PublicExecutionResult): PublicCircuitPublicInputs => { - return PublicCircuitPublicInputs.from({ - callContext: result.executionRequest.callContext, - proverAddress: AztecAddress.ZERO, - argsHash: computeVarArgsHash(result.executionRequest.args), - noteHashes: padArrayEnd(result.noteHashes, NoteHash.empty(), MAX_NOTE_HASHES_PER_CALL), - nullifiers: padArrayEnd(result.nullifiers, Nullifier.empty(), MAX_NULLIFIERS_PER_CALL), - l2ToL1Msgs: padArrayEnd(result.l2ToL1Messages, L2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_CALL), - startSideEffectCounter: result.startSideEffectCounter, - endSideEffectCounter: result.endSideEffectCounter, - returnsHash: computeVarArgsHash(result.returnValues), - noteHashReadRequests: padArrayEnd( - result.noteHashReadRequests, - TreeLeafReadRequest.empty(), - MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, - ), - nullifierReadRequests: padArrayEnd( - result.nullifierReadRequests, - ReadRequest.empty(), - MAX_NULLIFIER_READ_REQUESTS_PER_CALL, - ), - nullifierNonExistentReadRequests: padArrayEnd( - result.nullifierNonExistentReadRequests, - ReadRequest.empty(), - MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL, - ), - l1ToL2MsgReadRequests: padArrayEnd( - result.l1ToL2MsgReadRequests, - TreeLeafReadRequest.empty(), - MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL, - ), - contractStorageReads: padArrayEnd( - result.contractStorageReads, - ContractStorageRead.empty(), - MAX_PUBLIC_DATA_READS_PER_CALL, - ), - contractStorageUpdateRequests: padArrayEnd( - result.contractStorageUpdateRequests, - ContractStorageUpdateRequest.empty(), - MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, - ), - publicCallRequests: padArrayEnd([], PublicCallRequest.empty(), MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL), - unencryptedLogsHashes: padArrayEnd(result.unencryptedLogsHashes, LogHash.empty(), MAX_UNENCRYPTED_LOGS_PER_CALL), - historicalHeader: Header.empty(), - globalVariables: GlobalVariables.empty(), - startGasLeft: Gas.from(result.startGasLeft), - endGasLeft: Gas.from(result.endGasLeft), - transactionFee: result.transactionFee, - // TODO(@just-mitch): need better mapping from simulator to revert code. - revertCode: result.reverted ? RevertCode.APP_LOGIC_REVERTED : RevertCode.OK, - }); -}; diff --git a/yarn-project/bb-prover/src/honk.ts b/yarn-project/bb-prover/src/honk.ts index 8c13ed14475..93c72cae6e8 100644 --- a/yarn-project/bb-prover/src/honk.ts +++ b/yarn-project/bb-prover/src/honk.ts @@ -2,7 +2,10 @@ import { type ProtocolArtifact } from '@aztec/noir-protocol-circuits-types'; export type UltraHonkFlavor = 'ultra_honk' | 'ultra_keccak_honk'; -const UltraKeccakHonkCircuits = ['BlockRootRollupArtifact'] as const; +const UltraKeccakHonkCircuits = [ + 'BlockRootRollupFinalArtifact', + 'RootRollupArtifact', +] as const satisfies ProtocolArtifact[]; type UltraKeccakHonkCircuits = (typeof UltraKeccakHonkCircuits)[number]; type UltraHonkCircuits = Exclude; diff --git a/yarn-project/bb-prover/src/index.ts b/yarn-project/bb-prover/src/index.ts index 303e8312519..e8914146199 100644 --- a/yarn-project/bb-prover/src/index.ts +++ b/yarn-project/bb-prover/src/index.ts @@ -3,3 +3,5 @@ export * from './test/index.js'; export * from './verifier/index.js'; export * from './config.js'; export * from './bb/execute.js'; + +export { type ClientProtocolCircuitVerifier } from '@aztec/circuit-types'; diff --git a/yarn-project/bb-prover/src/mappings/mappings.ts b/yarn-project/bb-prover/src/mappings/mappings.ts deleted file mode 100644 index 81df2f46716..00000000000 --- a/yarn-project/bb-prover/src/mappings/mappings.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { PublicKernelType } from '@aztec/circuit-types'; -import { type PublicKernelCircuitPrivateInputs, type PublicKernelCircuitPublicInputs } from '@aztec/circuits.js'; -import { - type ServerProtocolArtifact, - convertPublicInnerInputsToWitnessMap, - convertPublicInnerOutputFromWitnessMap, - convertPublicSetupInputsToWitnessMap, - convertPublicSetupOutputFromWitnessMap, - convertPublicTeardownInputsToWitnessMap, - convertPublicTeardownOutputFromWitnessMap, - convertSimulatedPublicInnerInputsToWitnessMap, - convertSimulatedPublicInnerOutputFromWitnessMap, - convertSimulatedPublicSetupInputsToWitnessMap, - convertSimulatedPublicSetupOutputFromWitnessMap, - convertSimulatedPublicTeardownInputsToWitnessMap, - convertSimulatedPublicTeardownOutputFromWitnessMap, -} from '@aztec/noir-protocol-circuits-types'; - -import { type WitnessMap } from '@noir-lang/types'; - -export type PublicKernelProvingOps = { - artifact: ServerProtocolArtifact; - convertInputs: (inputs: PublicKernelCircuitPrivateInputs) => WitnessMap; - convertOutputs: (outputs: WitnessMap) => PublicKernelCircuitPublicInputs; -}; - -export type KernelTypeToArtifact = Record; - -export const SimulatedPublicKernelArtifactMapping: KernelTypeToArtifact = { - [PublicKernelType.NON_PUBLIC]: undefined, - [PublicKernelType.APP_LOGIC]: { - artifact: 'PublicKernelAppLogicArtifact', - convertInputs: convertSimulatedPublicInnerInputsToWitnessMap, - convertOutputs: convertSimulatedPublicInnerOutputFromWitnessMap, - }, - [PublicKernelType.SETUP]: { - artifact: 'PublicKernelSetupArtifact', - convertInputs: convertSimulatedPublicSetupInputsToWitnessMap, - convertOutputs: convertSimulatedPublicSetupOutputFromWitnessMap, - }, - [PublicKernelType.TEARDOWN]: { - artifact: 'PublicKernelTeardownArtifact', - convertInputs: convertSimulatedPublicTeardownInputsToWitnessMap, - convertOutputs: convertSimulatedPublicTeardownOutputFromWitnessMap, - }, - [PublicKernelType.TAIL]: undefined, -}; - -export const PublicKernelArtifactMapping: KernelTypeToArtifact = { - [PublicKernelType.NON_PUBLIC]: undefined, - [PublicKernelType.APP_LOGIC]: { - artifact: 'PublicKernelAppLogicArtifact', - convertInputs: convertPublicInnerInputsToWitnessMap, - convertOutputs: convertPublicInnerOutputFromWitnessMap, - }, - [PublicKernelType.SETUP]: { - artifact: 'PublicKernelSetupArtifact', - convertInputs: convertPublicSetupInputsToWitnessMap, - convertOutputs: convertPublicSetupOutputFromWitnessMap, - }, - [PublicKernelType.TEARDOWN]: { - artifact: 'PublicKernelTeardownArtifact', - convertInputs: convertPublicTeardownInputsToWitnessMap, - convertOutputs: convertPublicTeardownOutputFromWitnessMap, - }, - [PublicKernelType.TAIL]: undefined, -}; diff --git a/yarn-project/bb-prover/src/prover/bb_prover.ts b/yarn-project/bb-prover/src/prover/bb_prover.ts index 03a2bfa7929..5aff5612630 100644 --- a/yarn-project/bb-prover/src/prover/bb_prover.ts +++ b/yarn-project/bb-prover/src/prover/bb_prover.ts @@ -2,8 +2,6 @@ import { type AvmProofAndVerificationKey, type PublicInputsAndRecursiveProof, - type PublicKernelNonTailRequest, - type PublicKernelTailRequest, type ServerCircuitProver, makePublicInputsAndRecursiveProof, } from '@aztec/circuit-types'; @@ -27,7 +25,10 @@ import { type PrivateKernelEmptyInputData, PrivateKernelEmptyInputs, Proof, + type PublicKernelCircuitPrivateInputs, type PublicKernelCircuitPublicInputs, + type PublicKernelInnerCircuitPrivateInputs, + type PublicKernelTailCircuitPrivateInputs, RECURSIVE_PROOF_LENGTH, RecursiveProof, RootParityInput, @@ -36,6 +37,7 @@ import { type RootRollupPublicInputs, TUBE_PROOF_LENGTH, type TubeInputs, + type VMCircuitPublicInputs, type VerificationKeyAsFields, type VerificationKeyData, makeRecursiveProofFromBinary, @@ -59,6 +61,10 @@ import { convertMergeRollupOutputsFromWitnessMap, convertPrivateKernelEmptyInputsToWitnessMap, convertPrivateKernelEmptyOutputsFromWitnessMap, + convertPublicInnerInputsToWitnessMap, + convertPublicInnerOutputFromWitnessMap, + convertPublicMergeInputsToWitnessMap, + convertPublicMergeOutputFromWitnessMap, convertPublicTailInputsToWitnessMap, convertPublicTailOutputFromWitnessMap, convertRootParityInputsToWitnessMap, @@ -94,7 +100,6 @@ import { import type { ACVMConfig, BBConfig } from '../config.js'; import { type UltraHonkFlavor, getUltraHonkFlavorForCircuit } from '../honk.js'; import { ProverInstrumentation } from '../instrumentation.js'; -import { PublicKernelArtifactMapping } from '../mappings/mappings.js'; import { mapProtocolArtifactNameToCircuitName } from '../stats.js'; import { extractAvmVkData, extractVkData } from '../verification_key/verification_key_data.js'; @@ -206,47 +211,70 @@ export class BBNativeRollupProver implements ServerCircuitProver { } /** - * Requests that a public kernel circuit be executed and the proof generated + * Requests that a public kernel inner circuit be executed and the proof generated * @param kernelRequest - The object encapsulating the request for a proof * @returns The requested circuit's public inputs and proof */ - @trackSpan('BBNativeRollupProver.getPublicKernelProof', kernelReq => ({ - [Attributes.PROTOCOL_CIRCUIT_NAME]: mapProtocolArtifactNameToCircuitName( - PublicKernelArtifactMapping[kernelReq.type]!.artifact, - ), - })) - public async getPublicKernelProof( - kernelRequest: PublicKernelNonTailRequest, + @trackSpan('BBNativeRollupProver.getPublicKernelInnerProof', { + [Attributes.PROTOCOL_CIRCUIT_NAME]: 'public-kernel-inner', + }) + public async getPublicKernelInnerProof( + inputs: PublicKernelInnerCircuitPrivateInputs, + ): Promise> { + const artifact = 'PublicKernelInnerArtifact'; + + const { circuitOutput, proof } = await this.createRecursiveProof( + inputs, + artifact, + NESTED_RECURSIVE_PROOF_LENGTH, + convertPublicInnerInputsToWitnessMap, + convertPublicInnerOutputFromWitnessMap, + ); + + const verificationKey = await this.getVerificationKeyDataForCircuit(artifact); + + await this.verifyProof(artifact, proof.binaryProof); + + return makePublicInputsAndRecursiveProof(circuitOutput, proof, verificationKey); + } + + /** + * Requests that a public kernel merge circuit be executed and the proof generated + * @param kernelRequest - The object encapsulating the request for a proof + * @returns The requested circuit's public inputs and proof + */ + @trackSpan('BBNativeRollupProver.getPublicKernelMergeProof', { + [Attributes.PROTOCOL_CIRCUIT_NAME]: 'public-kernel-merge', + }) + public async getPublicKernelMergeProof( + inputs: PublicKernelCircuitPrivateInputs, ): Promise> { - const kernelOps = PublicKernelArtifactMapping[kernelRequest.type]; - if (kernelOps === undefined) { - throw new Error(`Unable to prove kernel type ${kernelRequest.type}`); - } + const artifact = 'PublicKernelMergeArtifact'; // We may need to convert the recursive proof into fields format - kernelRequest.inputs.previousKernel.proof = await this.ensureValidProof( - kernelRequest.inputs.previousKernel.proof, - kernelOps.artifact, - kernelRequest.inputs.previousKernel.vk, + inputs.previousKernel.proof = await this.ensureValidProof( + inputs.previousKernel.proof, + artifact, + inputs.previousKernel.vk, ); await this.verifyWithKey( - getUltraHonkFlavorForCircuit(kernelOps.artifact), - kernelRequest.inputs.previousKernel.vk, - kernelRequest.inputs.previousKernel.proof.binaryProof, + getUltraHonkFlavorForCircuit(artifact), + inputs.previousKernel.vk, + inputs.previousKernel.proof.binaryProof, ); const { circuitOutput, proof } = await this.createRecursiveProof( - kernelRequest.inputs, - kernelOps.artifact, + inputs, + artifact, NESTED_RECURSIVE_PROOF_LENGTH, - kernelOps.convertInputs, - kernelOps.convertOutputs, + convertPublicMergeInputsToWitnessMap, + convertPublicMergeOutputFromWitnessMap, ); - const verificationKey = await this.getVerificationKeyDataForCircuit(kernelOps.artifact); + const verificationKey = await this.getVerificationKeyDataForCircuit(artifact); - await this.verifyProof(kernelOps.artifact, proof.binaryProof); + await this.verifyProof(artifact, proof.binaryProof); return makePublicInputsAndRecursiveProof(circuitOutput, proof, verificationKey); } @@ -257,10 +285,10 @@ export class BBNativeRollupProver implements ServerCircuitProver { * @returns The requested circuit's public inputs and proof */ public async getPublicTailProof( - kernelRequest: PublicKernelTailRequest, + inputs: PublicKernelTailCircuitPrivateInputs, ): Promise> { const { circuitOutput, proof } = await this.createRecursiveProof( - kernelRequest.inputs, + inputs, 'PublicKernelTailArtifact', NESTED_RECURSIVE_PROOF_LENGTH, convertPublicTailInputsToWitnessMap, @@ -337,20 +365,43 @@ export class BBNativeRollupProver implements ServerCircuitProver { public async getBlockRootRollupProof( input: BlockRootRollupInputs, ): Promise> { - // TODO(#7346): When batch rollups are integrated, we probably want the below to be this.createRecursiveProof - // since we will no longer be verifying it directly on L1 - const { circuitOutput, proof } = await this.createProof( + const { circuitOutput, proof } = await this.createRecursiveProof( input, 'BlockRootRollupArtifact', + NESTED_RECURSIVE_PROOF_LENGTH, + convertBlockRootRollupInputsToWitnessMap, + convertBlockRootRollupOutputsFromWitnessMap, + ); + + const verificationKey = await this.getVerificationKeyDataForCircuit('BlockRootRollupArtifact'); + + await this.verifyProof('BlockRootRollupArtifact', proof.binaryProof); + + return makePublicInputsAndRecursiveProof(circuitOutput, proof, verificationKey); + } + + /** + * Simulates the block root rollup circuit from its inputs. + * Returns a non-recursive proof to verify on L1. + * @dev TODO(palla/prover): This is a temporary workaround to get the proof to L1 with the old block flow. + * @param input - Inputs to the circuit. + * @returns The public inputs as outputs of the simulation. + */ + public async getBlockRootRollupFinalProof( + input: BlockRootRollupInputs, + ): Promise> { + const { circuitOutput, proof } = await this.createProof( + input, + 'BlockRootRollupFinalArtifact', convertBlockRootRollupInputsToWitnessMap, convertBlockRootRollupOutputsFromWitnessMap, ); const recursiveProof = makeRecursiveProofFromBinary(proof, NESTED_RECURSIVE_PROOF_LENGTH); - const verificationKey = await this.getVerificationKeyDataForCircuit('BlockRootRollupArtifact'); + const verificationKey = await this.getVerificationKeyDataForCircuit('BlockRootRollupFinalArtifact'); - await this.verifyProof('BlockRootRollupArtifact', proof); + await this.verifyProof('BlockRootRollupFinalArtifact', proof); return makePublicInputsAndRecursiveProof(circuitOutput, recursiveProof, verificationKey); } diff --git a/yarn-project/bb-prover/src/stats.ts b/yarn-project/bb-prover/src/stats.ts index d96399f677e..92bd1b38e65 100644 --- a/yarn-project/bb-prover/src/stats.ts +++ b/yarn-project/bb-prover/src/stats.ts @@ -1,8 +1,6 @@ import type { CircuitName } from '@aztec/circuit-types/stats'; import { type ClientProtocolArtifact, type ServerProtocolArtifact } from '@aztec/noir-protocol-circuits-types'; -export { mapPublicKernelToCircuitName } from '@aztec/circuit-types'; - export function mapProtocolArtifactNameToCircuitName( artifact: ServerProtocolArtifact | ClientProtocolArtifact, ): CircuitName { @@ -21,12 +19,10 @@ export function mapProtocolArtifactNameToCircuitName( return 'block-merge-rollup'; case 'RootRollupArtifact': return 'root-rollup'; - case 'PublicKernelSetupArtifact': - return 'public-kernel-setup'; - case 'PublicKernelAppLogicArtifact': - return 'public-kernel-app-logic'; - case 'PublicKernelTeardownArtifact': - return 'public-kernel-teardown'; + case 'PublicKernelInnerArtifact': + return 'public-kernel-inner'; + case 'PublicKernelMergeArtifact': + return 'public-kernel-merge'; case 'PublicKernelTailArtifact': return 'public-kernel-tail'; case 'PrivateKernelInitArtifact': @@ -53,6 +49,8 @@ export function mapProtocolArtifactNameToCircuitName( return 'empty-nested'; case 'PrivateKernelEmptyArtifact': return 'private-kernel-empty'; + case 'BlockRootRollupFinalArtifact': + return 'block-root-rollup-final'; default: { const _foo: never = artifact; throw new Error(`Unknown circuit type: ${artifact}`); diff --git a/yarn-project/bb-prover/src/test/index.ts b/yarn-project/bb-prover/src/test/index.ts index 3f84ad27da1..555536e8cb7 100644 --- a/yarn-project/bb-prover/src/test/index.ts +++ b/yarn-project/bb-prover/src/test/index.ts @@ -1,2 +1,3 @@ export * from './test_circuit_prover.js'; export * from './test_verifier.js'; +export * from './test_avm.js'; diff --git a/yarn-project/bb-prover/src/test/test_avm.ts b/yarn-project/bb-prover/src/test/test_avm.ts new file mode 100644 index 00000000000..b571926d4f7 --- /dev/null +++ b/yarn-project/bb-prover/src/test/test_avm.ts @@ -0,0 +1,85 @@ +import { + AztecAddress, + ContractStorageRead, + ContractStorageUpdateRequest, + Gas, + GlobalVariables, + Header, + L2ToL1Message, + LogHash, + MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL, + MAX_L2_TO_L1_MSGS_PER_CALL, + MAX_NOTE_HASHES_PER_CALL, + MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, + MAX_NULLIFIERS_PER_CALL, + MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL, + MAX_NULLIFIER_READ_REQUESTS_PER_CALL, + MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, + MAX_PUBLIC_DATA_READS_PER_CALL, + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, + MAX_UNENCRYPTED_LOGS_PER_CALL, + NoteHash, + Nullifier, + PublicCircuitPublicInputs, + PublicInnerCallRequest, + ReadRequest, + RevertCode, + TreeLeafReadRequest, +} from '@aztec/circuits.js'; +import { computeVarArgsHash } from '@aztec/circuits.js/hash'; +import { padArrayEnd } from '@aztec/foundation/collection'; +import { type PublicExecutionResult } from '@aztec/simulator'; + +// TODO: pub somewhere more usable - copied from abstract phase manager +export function getPublicInputs(result: PublicExecutionResult): PublicCircuitPublicInputs { + return PublicCircuitPublicInputs.from({ + callContext: result.executionRequest.callContext, + proverAddress: AztecAddress.ZERO, + argsHash: computeVarArgsHash(result.executionRequest.args), + noteHashes: padArrayEnd(result.noteHashes, NoteHash.empty(), MAX_NOTE_HASHES_PER_CALL), + nullifiers: padArrayEnd(result.nullifiers, Nullifier.empty(), MAX_NULLIFIERS_PER_CALL), + l2ToL1Msgs: padArrayEnd(result.l2ToL1Messages, L2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_CALL), + startSideEffectCounter: result.startSideEffectCounter, + endSideEffectCounter: result.endSideEffectCounter, + returnsHash: computeVarArgsHash(result.returnValues), + noteHashReadRequests: padArrayEnd( + result.noteHashReadRequests, + TreeLeafReadRequest.empty(), + MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, + ), + nullifierReadRequests: padArrayEnd( + result.nullifierReadRequests, + ReadRequest.empty(), + MAX_NULLIFIER_READ_REQUESTS_PER_CALL, + ), + nullifierNonExistentReadRequests: padArrayEnd( + result.nullifierNonExistentReadRequests, + ReadRequest.empty(), + MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL, + ), + l1ToL2MsgReadRequests: padArrayEnd( + result.l1ToL2MsgReadRequests, + TreeLeafReadRequest.empty(), + MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL, + ), + contractStorageReads: padArrayEnd( + result.contractStorageReads, + ContractStorageRead.empty(), + MAX_PUBLIC_DATA_READS_PER_CALL, + ), + contractStorageUpdateRequests: padArrayEnd( + result.contractStorageUpdateRequests, + ContractStorageUpdateRequest.empty(), + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, + ), + publicCallRequests: padArrayEnd([], PublicInnerCallRequest.empty(), MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL), + unencryptedLogsHashes: padArrayEnd(result.unencryptedLogsHashes, LogHash.empty(), MAX_UNENCRYPTED_LOGS_PER_CALL), + historicalHeader: Header.empty(), + globalVariables: GlobalVariables.empty(), + startGasLeft: Gas.from(result.startGasLeft), + endGasLeft: Gas.from(result.endGasLeft), + transactionFee: result.transactionFee, + // TODO(@just-mitch): need better mapping from simulator to revert code. + revertCode: result.reverted ? RevertCode.APP_LOGIC_REVERTED : RevertCode.OK, + }); +} diff --git a/yarn-project/bb-prover/src/test/test_circuit_prover.ts b/yarn-project/bb-prover/src/test/test_circuit_prover.ts index 63a5d7cf1ba..6ccfb948d92 100644 --- a/yarn-project/bb-prover/src/test/test_circuit_prover.ts +++ b/yarn-project/bb-prover/src/test/test_circuit_prover.ts @@ -1,8 +1,6 @@ import { type AvmProofAndVerificationKey, type PublicInputsAndRecursiveProof, - type PublicKernelNonTailRequest, - type PublicKernelTailRequest, type ServerCircuitProver, makePublicInputsAndRecursiveProof, } from '@aztec/circuit-types'; @@ -22,7 +20,10 @@ import { type PrivateKernelEmptyInputData, PrivateKernelEmptyInputs, type Proof, + type PublicKernelCircuitPrivateInputs, type PublicKernelCircuitPublicInputs, + type PublicKernelInnerCircuitPrivateInputs, + type PublicKernelTailCircuitPrivateInputs, RECURSIVE_PROOF_LENGTH, type RecursiveProof, RootParityInput, @@ -31,6 +32,7 @@ import { type RootRollupPublicInputs, TUBE_PROOF_LENGTH, type TubeInputs, + type VMCircuitPublicInputs, VerificationKeyData, makeEmptyProof, makeEmptyRecursiveProof, @@ -61,6 +63,10 @@ import { convertSimulatedBaseRollupInputsToWitnessMap, convertSimulatedBaseRollupOutputsFromWitnessMap, convertSimulatedPrivateKernelEmptyOutputsFromWitnessMap, + convertSimulatedPublicInnerInputsToWitnessMap, + convertSimulatedPublicInnerOutputFromWitnessMap, + convertSimulatedPublicMergeInputsToWitnessMap, + convertSimulatedPublicMergeOutputFromWitnessMap, convertSimulatedPublicTailInputsToWitnessMap, convertSimulatedPublicTailOutputFromWitnessMap, getVKSiblingPath, @@ -69,8 +75,7 @@ import { type SimulationProvider, WASMSimulator, emitCircuitSimulationStats } fr import { type TelemetryClient, trackSpan } from '@aztec/telemetry-client'; import { ProverInstrumentation } from '../instrumentation.js'; -import { SimulatedPublicKernelArtifactMapping } from '../mappings/mappings.js'; -import { mapPublicKernelToCircuitName } from '../stats.js'; +import { mapProtocolArtifactNameToCircuitName } from '../stats.js'; /** * A class for use in testing situations (e2e, unit test, etc) and temporarily for assembling a block in the sequencer. @@ -342,6 +347,12 @@ export class TestCircuitProver implements ServerCircuitProver { ); } + public getBlockRootRollupFinalProof( + input: BlockRootRollupInputs, + ): Promise> { + return this.getBlockRootRollupProof(input); + } + /** * Simulates the block merge rollup circuit from its inputs. * @param input - Inputs to the circuit. @@ -413,29 +424,53 @@ export class TestCircuitProver implements ServerCircuitProver { ); } - @trackSpan('TestCircuitProver.getPublicKernelProof') - public async getPublicKernelProof( - kernelRequest: PublicKernelNonTailRequest, - ): Promise> { + @trackSpan('TestCircuitProver.getPublicKernelInnerProof') + public async getPublicKernelInnerProof( + inputs: PublicKernelInnerCircuitPrivateInputs, + ): Promise> { const timer = new Timer(); - const kernelOps = SimulatedPublicKernelArtifactMapping[kernelRequest.type]; - if (kernelOps === undefined) { - throw new Error(`Unable to prove for kernel type ${kernelRequest.type}`); - } - const witnessMap = kernelOps.convertInputs(kernelRequest.inputs); - const witness = await this.wasmSimulator.simulateCircuit( - witnessMap, - SimulatedServerCircuitArtifacts[kernelOps.artifact], + const artifact = 'PublicKernelInnerArtifact'; + const circuitName = mapProtocolArtifactNameToCircuitName(artifact); + + const witnessMap = convertSimulatedPublicInnerInputsToWitnessMap(inputs); + const witness = await this.wasmSimulator.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts[artifact]); + + const result = convertSimulatedPublicInnerOutputFromWitnessMap(witness); + this.instrumentation.recordDuration('simulationDuration', circuitName, timer); + emitCircuitSimulationStats( + circuitName, + timer.ms(), + inputs.toBuffer().length, + result.toBuffer().length, + this.logger, ); + await this.delay(); + return makePublicInputsAndRecursiveProof( + result, + makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), + ProtocolCircuitVks[artifact], + ); + } + + @trackSpan('TestCircuitProver.getPublicKernelMergeProof') + public async getPublicKernelMergeProof( + inputs: PublicKernelCircuitPrivateInputs, + ): Promise> { + const timer = new Timer(); + + const artifact = 'PublicKernelMergeArtifact'; + const circuitName = mapProtocolArtifactNameToCircuitName(artifact); + + const witnessMap = convertSimulatedPublicMergeInputsToWitnessMap(inputs); + const witness = await this.wasmSimulator.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts[artifact]); - const result = kernelOps.convertOutputs(witness); - const circuitName = mapPublicKernelToCircuitName(kernelRequest.type); + const result = convertSimulatedPublicMergeOutputFromWitnessMap(witness); this.instrumentation.recordDuration('simulationDuration', circuitName, timer); emitCircuitSimulationStats( circuitName, timer.ms(), - kernelRequest.inputs.toBuffer().length, + inputs.toBuffer().length, result.toBuffer().length, this.logger, ); @@ -443,28 +478,29 @@ export class TestCircuitProver implements ServerCircuitProver { return makePublicInputsAndRecursiveProof( result, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), - ProtocolCircuitVks[kernelOps.artifact], + ProtocolCircuitVks[artifact], ); } @trackSpan('TestCircuitProver.getPublicTailProof') public async getPublicTailProof( - kernelRequest: PublicKernelTailRequest, + inputs: PublicKernelTailCircuitPrivateInputs, ): Promise> { const timer = new Timer(); - const witnessMap = convertSimulatedPublicTailInputsToWitnessMap(kernelRequest.inputs); + + const artifact = 'PublicKernelTailArtifact'; + const circuitName = mapProtocolArtifactNameToCircuitName(artifact); + + const witnessMap = convertSimulatedPublicTailInputsToWitnessMap(inputs); // use WASM here as it is faster for small circuits - const witness = await this.wasmSimulator.simulateCircuit( - witnessMap, - SimulatedServerCircuitArtifacts['PublicKernelTailArtifact'], - ); + const witness = await this.wasmSimulator.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts[artifact]); const result = convertSimulatedPublicTailOutputFromWitnessMap(witness); - this.instrumentation.recordDuration('simulationDuration', 'public-kernel-tail', timer); + this.instrumentation.recordDuration('simulationDuration', circuitName, timer); emitCircuitSimulationStats( - 'public-kernel-tail', + circuitName, timer.ms(), - kernelRequest.inputs.toBuffer().length, + inputs.toBuffer().length, result.toBuffer().length, this.logger, ); @@ -472,7 +508,7 @@ export class TestCircuitProver implements ServerCircuitProver { return makePublicInputsAndRecursiveProof( result, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), - ProtocolCircuitVks['PublicKernelTailArtifact'], + ProtocolCircuitVks[artifact], ); } diff --git a/yarn-project/bb-prover/tsconfig.json b/yarn-project/bb-prover/tsconfig.json index 77c9c6ff999..d3b184f3833 100644 --- a/yarn-project/bb-prover/tsconfig.json +++ b/yarn-project/bb-prover/tsconfig.json @@ -26,6 +26,9 @@ }, { "path": "../ethereum" + }, + { + "path": "../types" } ], "include": ["src"] diff --git a/yarn-project/bot/src/bot.ts b/yarn-project/bot/src/bot.ts index 05ba6df85f8..9e9efcb9179 100644 --- a/yarn-project/bot/src/bot.ts +++ b/yarn-project/bot/src/bot.ts @@ -10,11 +10,11 @@ import { import { type AztecNode, type FunctionCall, type PXE } from '@aztec/circuit-types'; import { Gas, GasSettings } from '@aztec/circuits.js'; import { times } from '@aztec/foundation/collection'; -import { type TokenContract } from '@aztec/noir-contracts.js'; +import { type EasyPrivateTokenContract, type TokenContract } from '@aztec/noir-contracts.js'; import { type BotConfig } from './config.js'; import { BotFactory } from './factory.js'; -import { getBalances } from './utils.js'; +import { getBalances, getPrivateBalance, isStandardTokenContract } from './utils.js'; const TRANSFER_AMOUNT = 1; @@ -23,7 +23,7 @@ export class Bot { protected constructor( public readonly wallet: Wallet, - public readonly token: TokenContract, + public readonly token: TokenContract | EasyPrivateTokenContract, public readonly recipient: AztecAddress, public config: BotConfig, ) {} @@ -50,12 +50,21 @@ export class Bot { logCtx, ); - const calls: FunctionCall[] = [ - ...times(privateTransfersPerTx, () => token.methods.transfer(recipient, TRANSFER_AMOUNT).request()), - ...times(publicTransfersPerTx, () => - token.methods.transfer_public(sender, recipient, TRANSFER_AMOUNT, 0).request(), - ), - ]; + const calls: FunctionCall[] = []; + if (isStandardTokenContract(token)) { + calls.push(...times(privateTransfersPerTx, () => token.methods.transfer(recipient, TRANSFER_AMOUNT).request())); + calls.push( + ...times(publicTransfersPerTx, () => + token.methods.transfer_public(sender, recipient, TRANSFER_AMOUNT, 0).request(), + ), + ); + } else { + calls.push( + ...times(privateTransfersPerTx, () => + token.methods.transfer(TRANSFER_AMOUNT, sender, recipient, sender).request(), + ), + ); + } const opts = this.getSendMethodOpts(); const batch = new BatchCall(wallet, calls); @@ -88,10 +97,23 @@ export class Bot { } public async getBalances() { - return { - sender: await getBalances(this.token, this.wallet.getAddress()), - recipient: await getBalances(this.token, this.recipient), - }; + if (isStandardTokenContract(this.token)) { + return { + sender: await getBalances(this.token, this.wallet.getAddress()), + recipient: await getBalances(this.token, this.recipient), + }; + } else { + return { + sender: { + privateBalance: await getPrivateBalance(this.token, this.wallet.getAddress()), + publicBalance: 0n, + }, + recipient: { + privateBalance: await getPrivateBalance(this.token, this.recipient), + publicBalance: 0n, + }, + }; + } } private getSendMethodOpts(): SendMethodOptions { diff --git a/yarn-project/bot/src/config.ts b/yarn-project/bot/src/config.ts index 7d896ac5023..b4cdd268d04 100644 --- a/yarn-project/bot/src/config.ts +++ b/yarn-project/bot/src/config.ts @@ -11,6 +11,11 @@ import { const botFollowChain = ['NONE', 'PENDING', 'PROVEN'] as const; type BotFollowChain = (typeof botFollowChain)[number]; +export enum SupportedTokenContracts { + TokenContract = 'TokenContract', + EasyPrivateTokenContract = 'EasyPrivateTokenContract', +} + export type BotConfig = { /** The URL to the Aztec node to check for tx pool status. */ nodeUrl: string | undefined; @@ -46,6 +51,8 @@ export type BotConfig = { l2GasLimit: number | undefined; /** DA gas limit for the tx (empty to have the bot trigger an estimate gas). */ daGasLimit: number | undefined; + /** Token contract to use */ + contract: SupportedTokenContracts; }; export const botConfigMappings: ConfigMappingsType = { @@ -142,6 +149,21 @@ export const botConfigMappings: ConfigMappingsType = { description: 'DA gas limit for the tx (empty to have the bot trigger an estimate gas).', ...optionalNumberConfigHelper(), }, + contract: { + env: 'BOT_TOKEN_CONTRACT', + description: 'Token contract to use', + defaultValue: SupportedTokenContracts.TokenContract, + parseEnv(val) { + if (!Object.values(SupportedTokenContracts).includes(val as any)) { + throw new Error( + `Invalid value for BOT_TOKEN_CONTRACT: ${val}. Valid values: ${Object.values(SupportedTokenContracts).join( + ', ', + )}`, + ); + } + return val as SupportedTokenContracts; + }, + }, }; export function getBotConfigFromEnv(): BotConfig { diff --git a/yarn-project/bot/src/factory.ts b/yarn-project/bot/src/factory.ts index e909590c268..541acc975da 100644 --- a/yarn-project/bot/src/factory.ts +++ b/yarn-project/bot/src/factory.ts @@ -1,11 +1,19 @@ import { getSchnorrAccount } from '@aztec/accounts/schnorr'; -import { type AccountWallet, BatchCall, createDebugLogger, createPXEClient } from '@aztec/aztec.js'; +import { + type AccountWallet, + BatchCall, + type DeployMethod, + type DeployOptions, + createDebugLogger, + createPXEClient, +} from '@aztec/aztec.js'; import { type AztecNode, type FunctionCall, type PXE } from '@aztec/circuit-types'; import { Fr, deriveSigningKey } from '@aztec/circuits.js'; +import { EasyPrivateTokenContract } from '@aztec/noir-contracts.js'; import { TokenContract } from '@aztec/noir-contracts.js/Token'; -import { type BotConfig } from './config.js'; -import { getBalances } from './utils.js'; +import { type BotConfig, SupportedTokenContracts } from './config.js'; +import { getBalances, getPrivateBalance, isStandardTokenContract } from './utils.js'; const MINT_BALANCE = 1e12; const MIN_BALANCE = 1e3; @@ -86,9 +94,21 @@ export class BotFactory { * @param wallet - Wallet to deploy the token contract from. * @returns The TokenContract instance. */ - private async setupToken(wallet: AccountWallet): Promise { - const deploy = TokenContract.deploy(wallet, wallet.getAddress(), 'BotToken', 'BOT', 18); - const deployOpts = { contractAddressSalt: this.config.tokenSalt, universalDeploy: true }; + private async setupToken(wallet: AccountWallet): Promise { + let deploy: DeployMethod; + const deployOpts: DeployOptions = { contractAddressSalt: this.config.tokenSalt, universalDeploy: true }; + if (this.config.contract === SupportedTokenContracts.TokenContract) { + deploy = TokenContract.deploy(wallet, wallet.getAddress(), 'BotToken', 'BOT', 18); + } else if (this.config.contract === SupportedTokenContracts.EasyPrivateTokenContract) { + deploy = EasyPrivateTokenContract.deploy(wallet, MINT_BALANCE, wallet.getAddress(), wallet.getAddress()); + deployOpts.skipPublicDeployment = true; + deployOpts.skipClassRegistration = true; + deployOpts.skipInitialization = false; + deployOpts.skipPublicSimulation = true; + } else { + throw new Error(`Unsupported token contract type: ${this.config.contract}`); + } + const address = deploy.getInstance(deployOpts).address; if (await this.pxe.isContractPubliclyDeployed(address)) { this.log.info(`Token at ${address.toString()} already deployed`); @@ -111,15 +131,29 @@ export class BotFactory { * Mints private and public tokens for the sender if their balance is below the minimum. * @param token - Token contract. */ - private async mintTokens(token: TokenContract) { + private async mintTokens(token: TokenContract | EasyPrivateTokenContract) { const sender = token.wallet.getAddress(); - const { privateBalance, publicBalance } = await getBalances(token, sender); + const isStandardToken = isStandardTokenContract(token); + let privateBalance = 0n; + let publicBalance = 0n; + + if (isStandardToken) { + ({ privateBalance, publicBalance } = await getBalances(token, sender)); + } else { + privateBalance = await getPrivateBalance(token, sender); + } + const calls: FunctionCall[] = []; if (privateBalance < MIN_BALANCE) { this.log.info(`Minting private tokens for ${sender.toString()}`); - calls.push(token.methods.privately_mint_private_note(MINT_BALANCE).request()); + + calls.push( + isStandardToken + ? token.methods.privately_mint_private_note(MINT_BALANCE).request() + : token.methods.mint(MINT_BALANCE, sender, sender).request(), + ); } - if (publicBalance < MIN_BALANCE) { + if (isStandardToken && publicBalance < MIN_BALANCE) { this.log.info(`Minting public tokens for ${sender.toString()}`); calls.push(token.methods.mint_public(sender, MINT_BALANCE).request()); } diff --git a/yarn-project/bot/src/index.ts b/yarn-project/bot/src/index.ts index 30278ea4d5d..43025b38956 100644 --- a/yarn-project/bot/src/index.ts +++ b/yarn-project/bot/src/index.ts @@ -1,4 +1,10 @@ export { Bot } from './bot.js'; export { BotRunner } from './runner.js'; -export { BotConfig, getBotConfigFromEnv, getBotDefaultConfig, botConfigMappings } from './config.js'; +export { + BotConfig, + getBotConfigFromEnv, + getBotDefaultConfig, + botConfigMappings, + SupportedTokenContracts, +} from './config.js'; export { createBotRunnerRpcServer } from './rpc.js'; diff --git a/yarn-project/bot/src/utils.ts b/yarn-project/bot/src/utils.ts index bb8297e143b..4c90afa8fba 100644 --- a/yarn-project/bot/src/utils.ts +++ b/yarn-project/bot/src/utils.ts @@ -1,4 +1,5 @@ import { type AztecAddress } from '@aztec/circuits.js'; +import { type EasyPrivateTokenContract } from '@aztec/noir-contracts.js'; import { type TokenContract } from '@aztec/noir-contracts.js/Token'; /** @@ -15,3 +16,12 @@ export async function getBalances( const publicBalance = await token.methods.balance_of_public(who).simulate(); return { privateBalance, publicBalance }; } + +export async function getPrivateBalance(token: EasyPrivateTokenContract, who: AztecAddress): Promise { + const privateBalance = await token.methods.get_balance(who).simulate(); + return privateBalance; +} + +export function isStandardTokenContract(token: TokenContract | EasyPrivateTokenContract): token is TokenContract { + return 'mint_public' in token.methods; +} diff --git a/yarn-project/builder/src/contract-interface-gen/typescript.ts b/yarn-project/builder/src/contract-interface-gen/typescript.ts index 056ef1154b3..a703990bc61 100644 --- a/yarn-project/builder/src/contract-interface-gen/typescript.ts +++ b/yarn-project/builder/src/contract-interface-gen/typescript.ts @@ -1,7 +1,9 @@ import { type ABIParameter, + type ABIVariable, type ContractArtifact, type FunctionArtifact, + decodeFunctionSignature, getDefaultInitializer, isAztecAddressStruct, isEthAddressStruct, @@ -247,7 +249,7 @@ function generateEvents(events: any[] | undefined) { const eventsMetadata = events.map(event => { const eventName = event.path.split('::').at(-1); - const eventDefProps = event.fields.map((field: any) => `${field.name}: Fr`); + const eventDefProps = event.fields.map((field: ABIVariable) => `${field.name}: ${abiTypeToTypescript(field.type)}`); const eventDef = ` export type ${eventName} = { ${eventDefProps.join('\n')} @@ -255,14 +257,14 @@ function generateEvents(events: any[] | undefined) { `; const fieldNames = event.fields.map((field: any) => `"${field.name}"`); - const eventType = `${eventName}: {decode: (payload: L1EventPayload | undefined) => ${eventName} | undefined, eventSelector: EventSelector, fieldNames: string[] }`; - + const eventType = `${eventName}: {decode: (payload: L1EventPayload | UnencryptedL2Log | undefined) => ${eventName} | undefined, eventSelector: EventSelector, fieldNames: string[] }`; + // Reusing the decodeFunctionSignature + const eventSignature = decodeFunctionSignature(eventName, event.fields); + const eventSelector = `EventSelector.fromSignature('${eventSignature}')`; const eventImpl = `${eventName}: { - decode: this.decodeEvent(${event.fields.length}, EventSelector.fromSignature('${eventName}(${event.fields - .map(() => 'Field') - .join(',')})'), [${fieldNames}]), - eventSelector: EventSelector.fromSignature('${eventName}(${event.fields.map(() => 'Field').join(',')})'), - fieldNames: [${fieldNames}], + decode: this.decodeEvent(${eventSelector}, ${JSON.stringify(event, null, 4)}), + eventSelector: ${eventSelector}, + fieldNames: [${fieldNames}], }`; return { @@ -276,31 +278,32 @@ function generateEvents(events: any[] | undefined) { eventDefs: eventsMetadata.map(({ eventDef }) => eventDef).join('\n'), events: ` // Partial application is chosen is to avoid the duplication of so much codegen. - private static decodeEvent(fieldsLength: number, eventSelector: EventSelector, fields: string[]): (payload: L1EventPayload | undefined) => T | undefined { - return (payload: L1EventPayload | undefined): T | undefined => { - if (payload === undefined) { - return undefined; - } - if (!eventSelector.equals(payload.eventTypeId)) { - return undefined; - } - if (payload.event.items.length !== fieldsLength) { - throw new Error( - 'Something is weird here, we have matching EventSelectors, but the actual payload has mismatched length', - ); - } - - return fields.reduce( - (acc, curr, i) => ({ - ...acc, - [curr]: payload.event.items[i], - }), - {} as T, - ); - }; - } + private static decodeEvent( + eventSelector: EventSelector, + eventType: AbiType, + ): (payload: L1EventPayload | UnencryptedL2Log | undefined) => T | undefined { + return (payload: L1EventPayload | UnencryptedL2Log | undefined): T | undefined => { + if (payload === undefined) { + return undefined; + } + + if (payload instanceof L1EventPayload) { + if (!eventSelector.equals(payload.eventTypeId)) { + return undefined; + } + return decodeFromAbi([eventType], payload.event.items) as T; + } else { + let items = []; + for (let i = 0; i < payload.data.length; i += 32) { + items.push(new Fr(payload.data.subarray(i, i + 32))); + } + + return decodeFromAbi([eventType], items) as T; + } + }; + } - public static get events(): { ${eventsMetadata.map(({ eventType }) => eventType).join(', ')} } { + public static get events(): { ${eventsMetadata.map(({ eventType }) => eventType).join(', ')} } { return { ${eventsMetadata.map(({ eventImpl }) => eventImpl).join(',\n')} }; @@ -334,6 +337,7 @@ export function generateTypescriptContractInterface(input: ContractArtifact, art /* eslint-disable */ import { + type AbiType, AztecAddress, type AztecAddressLike, CompleteAddress, @@ -345,6 +349,7 @@ import { type ContractMethod, type ContractStorageLayout, type ContractNotes, + decodeFromAbi, DeployMethod, EthAddress, type EthAddressLike, @@ -358,6 +363,7 @@ import { NoteSelector, Point, type PublicKey, + type UnencryptedL2Log, type Wallet, type WrappedFieldLike, } from '@aztec/aztec.js'; diff --git a/yarn-project/circuit-types/package.json b/yarn-project/circuit-types/package.json index d72351c6ecb..6e874e8b129 100644 --- a/yarn-project/circuit-types/package.json +++ b/yarn-project/circuit-types/package.json @@ -8,6 +8,7 @@ "./jest": "./dest/jest/index.js", "./interfaces": "./dest/interfaces/index.js", "./log_id": "./dest/logs/log_id.js", + "./test": "./dest/test/index.js", "./tx_hash": "./dest/tx/tx_hash.js" }, "typedocOptions": { diff --git a/yarn-project/circuit-types/src/body.ts b/yarn-project/circuit-types/src/body.ts index 21eba85c30e..dcc41c060b6 100644 --- a/yarn-project/circuit-types/src/body.ts +++ b/yarn-project/circuit-types/src/body.ts @@ -4,9 +4,8 @@ import { TxEffect, UnencryptedL2BlockL2Logs, } from '@aztec/circuit-types'; -import { padArrayEnd } from '@aztec/foundation/collection'; -import { sha256Trunc } from '@aztec/foundation/crypto'; import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; +import { computeUnbalancedMerkleRoot } from '@aztec/foundation/trees'; import { inspect } from 'util'; @@ -52,49 +51,9 @@ export class Body { * @returns The txs effects hash. */ getTxsEffectsHash() { - // Adapted from proving-state.ts -> findMergeLevel and unbalanced_tree.ts - // Calculates the tree upwards layer by layer until we reach the root - // The L1 calculation instead computes the tree from right to left (slightly cheaper gas) - // TODO: A more thorough investigation of which method is cheaper, then use that method everywhere - const computeRoot = (leaves: Buffer[]): Buffer => { - const depth = Math.ceil(Math.log2(leaves.length)); - let [layerWidth, nodeToShift] = - leaves.length & 1 ? [leaves.length - 1, leaves[leaves.length - 1]] : [leaves.length, Buffer.alloc(0)]; - // Allocate this layer's leaves and init the next layer up - let thisLayer = leaves.slice(0, layerWidth); - let nextLayer = []; - for (let i = 0; i < depth; i++) { - for (let j = 0; j < layerWidth; j += 2) { - // Store the hash of each pair one layer up - nextLayer[j / 2] = sha256Trunc(Buffer.concat([thisLayer[j], thisLayer[j + 1]])); - } - layerWidth /= 2; - if (layerWidth & 1) { - if (nodeToShift.length) { - // If the next layer has odd length, and we have a node that needs to be shifted up, add it here - nextLayer.push(nodeToShift); - layerWidth += 1; - nodeToShift = Buffer.alloc(0); - } else { - // If we don't have a node waiting to be shifted, store the next layer's final node to be shifted - layerWidth -= 1; - nodeToShift = nextLayer[layerWidth]; - } - } - // reset the layers - thisLayer = nextLayer; - nextLayer = []; - } - // return the root - return thisLayer[0]; - }; - const emptyTxEffectHash = TxEffect.empty().hash(); - let leaves: Buffer[] = this.txEffects.map(txEffect => txEffect.hash()); - if (leaves.length < 2) { - leaves = padArrayEnd(leaves, emptyTxEffectHash, 2); - } - return computeRoot(leaves); + const leaves: Buffer[] = this.txEffects.map(txEffect => txEffect.hash()); + return computeUnbalancedMerkleRoot(leaves, emptyTxEffectHash); } get noteEncryptedLogs(): EncryptedNoteL2BlockL2Logs { diff --git a/yarn-project/circuit-types/src/global_variable_builder.ts b/yarn-project/circuit-types/src/global_variable_builder.ts new file mode 100644 index 00000000000..72ca71272c7 --- /dev/null +++ b/yarn-project/circuit-types/src/global_variable_builder.ts @@ -0,0 +1,21 @@ +import type { AztecAddress, EthAddress, Fr, GlobalVariables } from '@aztec/circuits.js'; + +/** + * Interface for building global variables for Aztec blocks. + */ +export interface GlobalVariableBuilder { + /** + * Builds global variables for a given block. + * @param blockNumber - The block number to build global variables for. + * @param coinbase - The address to receive block reward. + * @param feeRecipient - The address to receive fees. + * @param slotNumber - Optional. The slot number to use for the global variables. If undefined, it will be calculated. + * @returns A promise that resolves to the GlobalVariables for the given block number. + */ + buildGlobalVariables( + blockNumber: Fr, + coinbase: EthAddress, + feeRecipient: AztecAddress, + slotNumber?: bigint, + ): Promise; +} diff --git a/yarn-project/circuit-types/src/index.ts b/yarn-project/circuit-types/src/index.ts index 93ed958b7a5..187539e9736 100644 --- a/yarn-project/circuit-types/src/index.ts +++ b/yarn-project/circuit-types/src/index.ts @@ -22,3 +22,4 @@ export * from './tx/index.js'; export * from './tx_effect.js'; export * from './tx_execution_request.js'; export * from './p2p/index.js'; +export * from './global_variable_builder.js'; diff --git a/yarn-project/circuit-types/src/interfaces/block-prover.ts b/yarn-project/circuit-types/src/interfaces/block-prover.ts index 4823fcbc505..8ef43b17733 100644 --- a/yarn-project/circuit-types/src/interfaces/block-prover.ts +++ b/yarn-project/circuit-types/src/interfaces/block-prover.ts @@ -52,7 +52,7 @@ export interface BlockSimulator extends ProcessedTxHandler { startNewBlock(numTxs: number, globalVariables: GlobalVariables, l1ToL2Messages: Fr[]): Promise; /** Cancels the block currently being processed. Processes already in progress built may continue but further proofs should not be started. */ - cancelBlock(): void; + cancel(): void; /** Performs the final archive tree insertion for this block and returns the L2Block. */ finaliseBlock(): Promise; @@ -72,3 +72,7 @@ export interface BlockProver extends BlockSimulator { /** Performs the final archive tree insertion for this block and returns the L2Block. */ finaliseBlock(): Promise; } + +export interface EpochProver extends BlockProver { + startNewEpoch(epochNumber: number, totalNumBlocks: number): ProvingTicket; +} diff --git a/yarn-project/circuit-types/src/interfaces/index.ts b/yarn-project/circuit-types/src/interfaces/index.ts index 1c12714c1a3..1ef99ee52db 100644 --- a/yarn-project/circuit-types/src/interfaces/index.ts +++ b/yarn-project/circuit-types/src/interfaces/index.ts @@ -11,3 +11,4 @@ export * from './server_circuit_prover.js'; export * from './private_kernel_prover.js'; export * from './tx-provider.js'; export * from './merkle_tree_operations.js'; +export * from './world_state.js'; diff --git a/yarn-project/circuit-types/src/interfaces/proving-job.ts b/yarn-project/circuit-types/src/interfaces/proving-job.ts index 33127e4c535..c805b4cb80e 100644 --- a/yarn-project/circuit-types/src/interfaces/proving-job.ts +++ b/yarn-project/circuit-types/src/interfaces/proving-job.ts @@ -12,7 +12,10 @@ import { type NESTED_RECURSIVE_PROOF_LENGTH, type PrivateKernelEmptyInputData, type Proof, + type PublicKernelCircuitPrivateInputs, type PublicKernelCircuitPublicInputs, + type PublicKernelInnerCircuitPrivateInputs, + type PublicKernelTailCircuitPrivateInputs, type RECURSIVE_PROOF_LENGTH, type RecursiveProof, type RootParityInput, @@ -21,10 +24,11 @@ import { type RootRollupPublicInputs, type TUBE_PROOF_LENGTH, type TubeInputs, + type VMCircuitPublicInputs, type VerificationKeyData, } from '@aztec/circuits.js'; -import type { PublicKernelNonTailRequest, PublicKernelTailRequest } from '../tx/processed_tx.js'; +import { type CircuitName } from '../stats/index.js'; export type AvmProofAndVerificationKey = { proof: Proof; @@ -65,12 +69,14 @@ export enum ProvingRequestType { PRIVATE_KERNEL_EMPTY, PUBLIC_VM, - PUBLIC_KERNEL_NON_TAIL, + PUBLIC_KERNEL_INNER, + PUBLIC_KERNEL_MERGE, PUBLIC_KERNEL_TAIL, BASE_ROLLUP, MERGE_ROLLUP, BLOCK_ROOT_ROLLUP, + BLOCK_ROOT_ROLLUP_FINAL, BLOCK_MERGE_ROLLUP, ROOT_ROLLUP, @@ -80,21 +86,64 @@ export enum ProvingRequestType { TUBE_PROOF, } +export function mapProvingRequestTypeToCircuitName(type: ProvingRequestType): CircuitName { + switch (type) { + case ProvingRequestType.PRIVATE_KERNEL_EMPTY: + return 'private-kernel-empty'; + case ProvingRequestType.PUBLIC_VM: + return 'avm-circuit'; + case ProvingRequestType.PUBLIC_KERNEL_INNER: + return 'public-kernel-inner'; + case ProvingRequestType.PUBLIC_KERNEL_MERGE: + return 'public-kernel-merge'; + case ProvingRequestType.PUBLIC_KERNEL_TAIL: + return 'public-kernel-tail'; + case ProvingRequestType.BASE_ROLLUP: + return 'base-rollup'; + case ProvingRequestType.MERGE_ROLLUP: + return 'merge-rollup'; + case ProvingRequestType.BLOCK_ROOT_ROLLUP: + return 'block-root-rollup'; + case ProvingRequestType.BLOCK_ROOT_ROLLUP_FINAL: + return 'block-root-rollup-final'; + case ProvingRequestType.BLOCK_MERGE_ROLLUP: + return 'block-merge-rollup'; + case ProvingRequestType.ROOT_ROLLUP: + return 'root-rollup'; + case ProvingRequestType.BASE_PARITY: + return 'base-parity'; + case ProvingRequestType.ROOT_PARITY: + return 'root-parity'; + case ProvingRequestType.TUBE_PROOF: + return 'tube-circuit'; + default: + throw new Error(`Cannot find circuit name for proving request type: ${type}`); + } +} + +export type PublicKernelInnerRequest = { + type: ProvingRequestType.PUBLIC_KERNEL_INNER; + inputs: PublicKernelInnerCircuitPrivateInputs; +}; + +export type PublicKernelMergeRequest = { + type: ProvingRequestType.PUBLIC_KERNEL_MERGE; + inputs: PublicKernelCircuitPrivateInputs; +}; + +export type PublicKernelTailRequest = { + type: ProvingRequestType.PUBLIC_KERNEL_TAIL; + inputs: PublicKernelTailCircuitPrivateInputs; +}; + export type ProvingRequest = | { type: ProvingRequestType.PUBLIC_VM; inputs: AvmCircuitInputs; } - | { - type: ProvingRequestType.PUBLIC_KERNEL_NON_TAIL; - kernelType: PublicKernelNonTailRequest['type']; - inputs: PublicKernelNonTailRequest['inputs']; - } - | { - type: ProvingRequestType.PUBLIC_KERNEL_TAIL; - kernelType: PublicKernelTailRequest['type']; - inputs: PublicKernelTailRequest['inputs']; - } + | PublicKernelInnerRequest + | PublicKernelMergeRequest + | PublicKernelTailRequest | { type: ProvingRequestType.BASE_PARITY; inputs: BaseParityInputs; @@ -115,6 +164,10 @@ export type ProvingRequest = type: ProvingRequestType.BLOCK_ROOT_ROLLUP; inputs: BlockRootRollupInputs; } + | { + type: ProvingRequestType.BLOCK_ROOT_ROLLUP_FINAL; + inputs: BlockRootRollupInputs; + } | { type: ProvingRequestType.BLOCK_MERGE_ROLLUP; inputs: BlockMergeRollupInputs; @@ -136,12 +189,14 @@ export type ProvingRequestPublicInputs = { [ProvingRequestType.PRIVATE_KERNEL_EMPTY]: PublicInputsAndRecursiveProof; [ProvingRequestType.PUBLIC_VM]: AvmProofAndVerificationKey; - [ProvingRequestType.PUBLIC_KERNEL_NON_TAIL]: PublicInputsAndRecursiveProof; + [ProvingRequestType.PUBLIC_KERNEL_INNER]: PublicInputsAndRecursiveProof; + [ProvingRequestType.PUBLIC_KERNEL_MERGE]: PublicInputsAndRecursiveProof; [ProvingRequestType.PUBLIC_KERNEL_TAIL]: PublicInputsAndRecursiveProof; [ProvingRequestType.BASE_ROLLUP]: PublicInputsAndRecursiveProof; [ProvingRequestType.MERGE_ROLLUP]: PublicInputsAndRecursiveProof; [ProvingRequestType.BLOCK_ROOT_ROLLUP]: PublicInputsAndRecursiveProof; + [ProvingRequestType.BLOCK_ROOT_ROLLUP_FINAL]: PublicInputsAndRecursiveProof; [ProvingRequestType.BLOCK_MERGE_ROLLUP]: PublicInputsAndRecursiveProof; [ProvingRequestType.ROOT_ROLLUP]: PublicInputsAndRecursiveProof; diff --git a/yarn-project/circuit-types/src/interfaces/pxe.ts b/yarn-project/circuit-types/src/interfaces/pxe.ts index 37f6e0cbfa5..fc5a347f158 100644 --- a/yarn-project/circuit-types/src/interfaces/pxe.ts +++ b/yarn-project/circuit-types/src/interfaces/pxe.ts @@ -1,7 +1,6 @@ import { type AztecAddress, type CompleteAddress, - type Fq, type Fr, type L1_TO_L2_MSG_TREE_HEIGHT, type PartialAddress, @@ -17,7 +16,12 @@ import { type NodeInfo } from '@aztec/types/interfaces'; import { type AuthWitness } from '../auth_witness.js'; import { type L2Block } from '../l2_block.js'; -import { type GetUnencryptedLogsResponse, type L1EventPayload, type LogFilter } from '../logs/index.js'; +import { + type GetUnencryptedLogsResponse, + type L1EventPayload, + type LogFilter, + type UnencryptedL2Log, +} from '../logs/index.js'; import { type IncomingNotesFilter } from '../notes/incoming_notes_filter.js'; import { type ExtendedNote, type OutgoingNotesFilter, type UniqueNote } from '../notes/index.js'; import { type SiblingPath } from '../sibling_path/sibling_path.js'; @@ -119,18 +123,6 @@ export interface PXE { */ getRecipient(address: AztecAddress): Promise; - /** - * Rotates master nullifier keys. - * @param address - The address of the account we want to rotate our key for. - * @param newNskM - The new master nullifier secret key we want to use. - * @remarks - One should not use this function directly without also calling the canonical key registry to rotate - * the new master nullifier secret key's derived master nullifier public key. - * Therefore, it is preferred to use rotateNullifierKeys on AccountWallet, as that handles the call to the Key Registry as well. - * - * This does not hinder our ability to spend notes tied to a previous master nullifier public key, provided we have the master nullifier secret key for it. - */ - rotateNskM(address: AztecAddress, newNskM: Fq): Promise; - /** * Registers a contract class in the PXE without registering any associated contract instance with it. * @@ -440,7 +432,7 @@ export interface PXE { * The shape of the event generated on the Contract. */ export interface EventMetadata { - decode(payload: L1EventPayload): T | undefined; + decode(payload: L1EventPayload | UnencryptedL2Log): T | undefined; eventSelector: EventSelector; fieldNames: string[]; } diff --git a/yarn-project/circuit-types/src/interfaces/server_circuit_prover.ts b/yarn-project/circuit-types/src/interfaces/server_circuit_prover.ts index 802cc5ea983..741b05e25f5 100644 --- a/yarn-project/circuit-types/src/interfaces/server_circuit_prover.ts +++ b/yarn-project/circuit-types/src/interfaces/server_circuit_prover.ts @@ -2,8 +2,6 @@ import { type AvmProofAndVerificationKey, type PublicInputsAndRecursiveProof, type PublicInputsAndTubeProof, - type PublicKernelNonTailRequest, - type PublicKernelTailRequest, type Tx, } from '@aztec/circuit-types'; import { @@ -18,7 +16,10 @@ import { type MergeRollupInputs, type NESTED_RECURSIVE_PROOF_LENGTH, type PrivateKernelEmptyInputData, + type PublicKernelCircuitPrivateInputs, type PublicKernelCircuitPublicInputs, + type PublicKernelInnerCircuitPrivateInputs, + type PublicKernelTailCircuitPrivateInputs, type RECURSIVE_PROOF_LENGTH, type RecursiveProof, type RootParityInput, @@ -26,6 +27,7 @@ import { type RootRollupInputs, type RootRollupPublicInputs, type TubeInputs, + type VMCircuitPublicInputs, type VerificationKeyData, } from '@aztec/circuits.js'; @@ -93,6 +95,16 @@ export interface ServerCircuitProver { epochNumber?: number, ): Promise>; + /** + * Creates a proof for the given input. + * @param input - Input to the circuit. + */ + getBlockRootRollupFinalProof( + input: BlockRootRollupInputs, + signal?: AbortSignal, + epochNumber?: number, + ): Promise>; + /** * Creates a proof for the given input. * @param input - Input to the circuit. @@ -114,21 +126,23 @@ export interface ServerCircuitProver { ): Promise>; /** - * Create a public kernel proof. + * Create a public kernel inner proof. * @param kernelRequest - Object containing the details of the proof required */ - getPublicKernelProof( - kernelRequest: PublicKernelNonTailRequest, + getPublicKernelInnerProof( + inputs: PublicKernelInnerCircuitPrivateInputs, + signal?: AbortSignal, + epochNumber?: number, + ): Promise>; + + getPublicKernelMergeProof( + inputs: PublicKernelCircuitPrivateInputs, signal?: AbortSignal, epochNumber?: number, ): Promise>; - /** - * Create a public kernel tail proof. - * @param kernelRequest - Object containing the details of the proof required - */ getPublicTailProof( - kernelRequest: PublicKernelTailRequest, + inputs: PublicKernelTailCircuitPrivateInputs, signal?: AbortSignal, epochNumber?: number, ): Promise>; diff --git a/yarn-project/world-state/src/synchronizer/world_state_synchronizer.ts b/yarn-project/circuit-types/src/interfaces/world_state.ts similarity index 95% rename from yarn-project/world-state/src/synchronizer/world_state_synchronizer.ts rename to yarn-project/circuit-types/src/interfaces/world_state.ts index 0fb17dbe508..e32963c114e 100644 --- a/yarn-project/world-state/src/synchronizer/world_state_synchronizer.ts +++ b/yarn-project/circuit-types/src/interfaces/world_state.ts @@ -1,4 +1,4 @@ -import { type MerkleTreeAdminOperations, type MerkleTreeOperations } from '../world-state-db/index.js'; +import type { MerkleTreeAdminOperations, MerkleTreeOperations } from './merkle_tree_operations.js'; /** * Defines the possible states of the world state synchronizer. diff --git a/yarn-project/circuit-types/src/l2_block.ts b/yarn-project/circuit-types/src/l2_block.ts index 5f2fb4052b6..0fa89491bae 100644 --- a/yarn-project/circuit-types/src/l2_block.ts +++ b/yarn-project/circuit-types/src/l2_block.ts @@ -108,7 +108,7 @@ export class L2Block { const txsEffectsHash = body.getTxsEffectsHash(); return L2Block.fromFields({ - archive: makeAppendOnlyTreeSnapshot(1), + archive: makeAppendOnlyTreeSnapshot(l2BlockNum + 1), header: makeHeader(0, l2BlockNum, slotNumber ?? l2BlockNum, txsEffectsHash, inHash), body, }); diff --git a/yarn-project/circuit-types/src/logs/encrypted_l2_note_log.ts b/yarn-project/circuit-types/src/logs/encrypted_l2_note_log.ts index 3202155a858..3cc334a028b 100644 --- a/yarn-project/circuit-types/src/logs/encrypted_l2_note_log.ts +++ b/yarn-project/circuit-types/src/logs/encrypted_l2_note_log.ts @@ -61,9 +61,15 @@ export class EncryptedL2NoteLog { * @returns A random log. */ public static random(): EncryptedL2NoteLog { + const numPublicValues = 0; const randomEphPubKey = Point.random(); const randomLogContent = randomBytes(144 - Point.COMPRESSED_SIZE_IN_BYTES); - const data = Buffer.concat([Fr.random().toBuffer(), randomLogContent, randomEphPubKey.toCompressedBuffer()]); + const data = Buffer.concat([ + Buffer.alloc(1, numPublicValues), + Fr.random().toBuffer(), + randomLogContent, + randomEphPubKey.toCompressedBuffer(), + ]); return new EncryptedL2NoteLog(data); } diff --git a/yarn-project/circuit-types/src/logs/l1_payload/l1_note_payload.ts b/yarn-project/circuit-types/src/logs/l1_payload/l1_note_payload.ts index 1f53c1e00c1..29d53578dd5 100644 --- a/yarn-project/circuit-types/src/logs/l1_payload/l1_note_payload.ts +++ b/yarn-project/circuit-types/src/logs/l1_payload/l1_note_payload.ts @@ -67,7 +67,11 @@ export class L1NotePayload extends L1Payload { } public encrypt(ephSk: GrumpkinScalar, recipient: AztecAddress, ivpk: PublicKey, ovKeys: KeyValidationRequest) { - return super._encrypt( + // TODO(#8558): numPublicValues could occupy just a single bit if we store info about partial fields + // in the ABI + // We always set the value to 0 here as we don't need partial notes encryption support in TS + const numPublicValues = 0; + const encryptedPayload = super._encrypt( this.contractAddress, ephSk, recipient, @@ -75,35 +79,38 @@ export class L1NotePayload extends L1Payload { ovKeys, new EncryptedNoteLogIncomingBody(this.storageSlot, this.noteTypeId, this.note), ); + return Buffer.concat([Buffer.alloc(1, numPublicValues), encryptedPayload]); } /** - * Decrypts a ciphertext as an incoming log. + * Extracts public values and decrypts a ciphertext as an incoming log. * * This is executable by the recipient of the note, and uses the ivsk to decrypt the payload. * The outgoing parts of the log are ignored entirely. * * Produces the same output as `decryptAsOutgoing`. * - * @param ciphertext - The ciphertext for the log + * @param content - Content of the log. Contains ciphertext and public values. * @param ivsk - The incoming viewing secret key, used to decrypt the logs * @returns The decrypted log payload */ - public static decryptAsIncoming(ciphertext: Buffer | bigint[], ivsk: GrumpkinScalar) { - const input = Buffer.isBuffer(ciphertext) ? ciphertext : Buffer.from(ciphertext.map((x: bigint) => Number(x))); - const reader = BufferReader.asReader(input); + public static decryptAsIncoming(content: Buffer | bigint[], ivsk: GrumpkinScalar) { + const [ciphertext, publicValues] = this.#getCiphertextAndPublicValues(content); const [address, incomingBody] = super._decryptAsIncoming( - reader.readToEnd(), + ciphertext, ivsk, EncryptedNoteLogIncomingBody.fromCiphertext, ); - return new L1NotePayload(incomingBody.note, address, incomingBody.storageSlot, incomingBody.noteTypeId); + // Partial fields are expected to be at the end of the note + const note = new Note([...incomingBody.note.items, ...publicValues]); + + return new L1NotePayload(note, address, incomingBody.storageSlot, incomingBody.noteTypeId); } /** - * Decrypts a ciphertext as an outgoing log. + * Extracts public values and decrypts a ciphertext as an outgoing log. * * This is executable by the sender of the note, and uses the ovsk to decrypt the payload. * The outgoing parts are decrypted to retrieve information that allows the sender to @@ -111,21 +118,23 @@ export class L1NotePayload extends L1Payload { * * Produces the same output as `decryptAsIncoming`. * - * @param ciphertext - The ciphertext for the log + * @param content - Content of the log. Contains ciphertext and public values. * @param ovsk - The outgoing viewing secret key, used to decrypt the logs * @returns The decrypted log payload */ - public static decryptAsOutgoing(ciphertext: Buffer | bigint[], ovsk: GrumpkinScalar) { - const input = Buffer.isBuffer(ciphertext) ? ciphertext : Buffer.from(ciphertext.map((x: bigint) => Number(x))); - const reader = BufferReader.asReader(input); + public static decryptAsOutgoing(content: Buffer | bigint[], ovsk: GrumpkinScalar) { + const [ciphertext, publicValues] = this.#getCiphertextAndPublicValues(content); const [address, incomingBody] = super._decryptAsOutgoing( - reader.readToEnd(), + ciphertext, ovsk, EncryptedNoteLogIncomingBody.fromCiphertext, ); - return new L1NotePayload(incomingBody.note, address, incomingBody.storageSlot, incomingBody.noteTypeId); + // Partial fields are expected to be at the end of the note + const note = new Note([...incomingBody.note.items, ...publicValues]); + + return new L1NotePayload(note, address, incomingBody.storageSlot, incomingBody.noteTypeId); } public equals(other: L1NotePayload) { @@ -136,4 +145,34 @@ export class L1NotePayload extends L1Payload { this.noteTypeId.equals(other.noteTypeId) ); } + + /** + * Extracts the ciphertext and the public values from the log content. + * Input byte layout: + * +-----------------------------------+ + * | Byte | Description | + * |------|----------------------------| + * | 0 | num_pub_vals | + * |------|----------------------------| + * | 1 to | Ciphertext | + * | N | (N = total_length - 1 | + * | | - num_pub_vals * 32) | + * |------|----------------------------| + * | N+1 | Public values | + * | to | (num_pub_vals * 32 bytes) | + * | end | | + * +-----------------------------------+ + */ + static #getCiphertextAndPublicValues(content: Buffer | bigint[]): [Buffer, Fr[]] { + const input = Buffer.isBuffer(content) ? content : Buffer.from(content.map((x: bigint) => Number(x))); + + const reader = BufferReader.asReader(input); + const numPublicValues = reader.readUInt8(); + const ciphertextLength = reader.getLength() - numPublicValues * Fr.SIZE_IN_BYTES - 1; + + const ciphertext = reader.readBytes(ciphertextLength); + const publicValues = reader.readArray(numPublicValues, Fr); + + return [ciphertext, publicValues]; + } } diff --git a/yarn-project/circuit-types/src/logs/l1_payload/tagged_log.test.ts b/yarn-project/circuit-types/src/logs/l1_payload/tagged_log.test.ts index 05cf0b20921..b97d84705d2 100644 --- a/yarn-project/circuit-types/src/logs/l1_payload/tagged_log.test.ts +++ b/yarn-project/circuit-types/src/logs/l1_payload/tagged_log.test.ts @@ -83,7 +83,7 @@ describe('L1 Note Payload', () => { const encrypted = taggedLog.encrypt(ephSk, recipientAddress, ivpk, ovKeys).toString('hex'); expect(encrypted).toMatchInlineSnapshot( - `"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d460c0e434d846ec1ea286e4090eb56376ff27bddc1aacae1d856549f701fa77e4f33ba2f47fdac6370f13bc5f16bbae857bbe6ab3ee4ea2a339192eef22a47ce0df4426fc314cb6294ccf291b79c1d8d362cdcc223e51020ccd3318e7052ca74f1fe922ad914bd46e4b6abcd681b63ab1c5bf4151e82f00548ae7c61c59df8c117c14c2e8d9046d32d43a7da818c68be296ef9d1446a87a450eb3f6550200d2663915b0bad97e7f7419975e5a740efb67eeb5304a90808a004ebfc156054a1459191d7fea175f6c64159b3c25a13790cca7250c30e3c80698e64565a6c9ddb16ac1479c3199fec02464b2a252202119514b02012cc387579220f03587b40444ae93f3b83dec2c0a76ed90a804981accd67d43c978d0a97de97b42b5b94c96ea50aee2086eb63d8c8b61f169c12d1deacefc1d456633e46b62daff15bcab3e1ec5f474297e1cb35d8556682060819b4563a8cc66966b12a5e73f7919318e727491b0adb8273bc4a7205b1c753b76a57cceee7482df027ae196235bb9c9ff426"`, + `"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d460c0e434d846ec1ea286e4090eb56376ff27bddc1aacae1d856549f701fa77e4f33ba2f47fdac6370f13bc5f16bbae857bbe6ab3ee4ea2a339192eef22a47ce0df4426fc314cb6294ccf291b79c1d8d362cdcc223e51020ccd3318e7052ca74f1fe922ad914bd46e4b6abcd681b63ab1c5bf4151e82f00548ae7c61c59df8c117c14c2e8d9046d32d43a7da818c68be296ef9d1446a87a450eb3f6550200d2663915b0bad97e7f7419975e5a740efb67eeb5304a90808a004ebfc156054a1459191d7fea175f6c64159b3c25a13790cca7250c30e3c80698e64565a6c9ddb16ac1479c3199fec02464b2a252202119514b02012cc387579220f03587b40444ae93f3b83dec2c0a76ed90a804981accd67d43c978d0a97de97b42b5b94c96ea50aee2086eb63d8c8b61f169c12d1deacefc1d456633e46b62daff15bcab3e1ec5f474297e1cb35d8556682060819b4563a8cc66966b12a5e73f7919318e727491b0adb8273bc4a7205b1c753b76a57cceee7482df027ae196235bb9c9ff426"`, ); const byteArrayString = `[${encrypted.match(/.{1,2}/g)!.map(byte => parseInt(byte, 16))}]`; @@ -96,6 +96,62 @@ describe('L1 Note Payload', () => { ); }); + it('encrypted tagged log of finalized partial note matches Noir', () => { + const numPublicValues = 2; + + // All the values in this test were arbitrarily set and copied over to `payload.nr` + const contract = AztecAddress.fromString('0x10f48cd9eff7ae5b209c557c70de2e657ee79166868676b787e9417e19260e04'); + const storageSlot = new Fr(0x0fe46be583b71f4ab5b70c2657ff1d05cccf1d292a9369628d1a194f944e6599n); + const noteValue = new Fr(0x301640ceea758391b2e161c92c0513f129020f4125256afdae2646ce31099f5cn); + const notePublicValue1 = new Fr(0x14172339287e8d281545c177313f02b6aa2fedfd628cfd8b7f11a136fd0d6557n); + const notePublicValue2 = new Fr(0x0834d81e3f73c7e2809b08ae38600ffc76a2554473eeab6de7bff4b33a84feacn); + const noteTypeId = new NoteSelector(4135); // note type id of mock_note.nr + + const payload = new L1NotePayload(new Note([noteValue]), contract, storageSlot, noteTypeId); + + const ovskM = new GrumpkinScalar(0x06b76394ac57b8a18ceb08b14ed15b5b778d5c506b4cfb7edc203324eab27c05n); + const ivskM = new GrumpkinScalar(0x03fd94b1101e834e829cda4f227043f60490b5c7b3073875f5bfbe5028ed05ccn); + + const ovKeys = getKeyValidationRequest(ovskM, payload.contractAddress); + + const ephSk = new GrumpkinScalar(0x1358d15019d4639393d62b97e1588c095957ce74a1c32d6ec7d62fe6705d9538n); + + const recipientAddress = AztecAddress.fromString( + '0x10ee41ee4b62703b16f61e03cb0d88c4b306a9eb4a6ceeb2aff13428541689a2', + ); + + const ivpk = derivePublicKeyFromSecretKey(ivskM); + + const taggedLog = new TaggedLog(payload, new Fr(0), new Fr(0)); + + // We manually update the log because modifying encrypt func to support public values would just polute the code + // because it is never used in prod --> the encrypt functionality is only evner used without the public values. + const encryptedBuf = taggedLog.encrypt(ephSk, recipientAddress, ivpk, ovKeys); + + // We update the encrypted buffer with the public values + encryptedBuf[64] = numPublicValues; + const encryptedBufWithPublicValues = Buffer.concat([ + encryptedBuf, + notePublicValue1.toBuffer(), + notePublicValue2.toBuffer(), + ]); + + const encrypted = encryptedBufWithPublicValues.toString('hex'); + + expect(encrypted).toMatchInlineSnapshot( + `"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028d460c0e434d846ec1ea286e4090eb56376ff27bddc1aacae1d856549f701fa77e4f33ba2f47fdac6370f13bc5f16bbae857bbe6ab3ee4ea2a339192eef22a47ce0df4426fc314cb6294ccf291b79c1d8d362cdcc223e51020ccd3318e7052ca74f1fe922ad914bd46e4b6abcd681b63ab1c5bf4151e82f00548ae7c61c59df8c117c14c2e8d9046d32d43a7da818c68be296ef9d1446a87a450eb3f6550200d2663915b0bad97e7f7419975e5a740efb67eeb5304a90808a004ebfc156054a1459191d7fea175f6c64159b3c25a13790cca7250c30e3c80698e64565a6c9ddb16ac1479c3199fec02464b2a252202119514b02012cc387579220f03587b40444ae93f3b83dec2c0a76ed90a804981accd67d43c978d0a97de97b42b5b94c96ea50aee2086eb63d8c8b61f169c12d1deacefc1d456633e46b62daff15bcab3e1ec5f474297e1cb35d8556682060819b4563a8cc66966b12a5e73f7919318e727491b0adb8273bc4a7205b1c753b76a57cceee7482df027ae196235bb9c9ff42614172339287e8d281545c177313f02b6aa2fedfd628cfd8b7f11a136fd0d65570834d81e3f73c7e2809b08ae38600ffc76a2554473eeab6de7bff4b33a84feac"`, + ); + + const byteArrayString = `[${encrypted.match(/.{1,2}/g)!.map(byte => parseInt(byte, 16))}]`; + + // Run with AZTEC_GENERATE_TEST_DATA=1 to update noir test data + updateInlineTestData( + 'noir-projects/aztec-nr/aztec/src/encrypted_logs/payload.nr', + 'encrypted_note_log_of_finalized_partial_from_typescript', + byteArrayString, + ); + }); + const getKeyValidationRequest = (ovskM: GrumpkinScalar, app: AztecAddress) => { const ovskApp = computeOvskApp(ovskM, app); const ovpkM = derivePublicKeyFromSecretKey(ovskM); diff --git a/yarn-project/circuit-types/src/logs/unencrypted_l2_log.ts b/yarn-project/circuit-types/src/logs/unencrypted_l2_log.ts index d24273a7346..26616746340 100644 --- a/yarn-project/circuit-types/src/logs/unencrypted_l2_log.ts +++ b/yarn-project/circuit-types/src/logs/unencrypted_l2_log.ts @@ -21,10 +21,7 @@ export class UnencryptedL2Log { ) {} get length(): number { - // We want the length of the buffer output from function_l2_logs -> toBuffer to equal the stored log length in the kernels. - // The kernels store the length of the processed log as 4 bytes; thus for this length value to match the log length stored in the kernels, - // we need to add four to the length here. - // https://github.com/AztecProtocol/aztec-packages/issues/6578#issuecomment-2125003435 + // This +4 is because we prefix the log length - see toBuffer below return this.data.length + AztecAddress.SIZE_IN_BYTES + 4; } diff --git a/yarn-project/circuit-types/src/merkle_tree_id.ts b/yarn-project/circuit-types/src/merkle_tree_id.ts index 25ab0897284..785d00ad2a1 100644 --- a/yarn-project/circuit-types/src/merkle_tree_id.ts +++ b/yarn-project/circuit-types/src/merkle_tree_id.ts @@ -1,8 +1,13 @@ import { + ARCHIVE_HEIGHT, ARCHIVE_TREE_ID, L1_TO_L2_MESSAGE_TREE_ID, + L1_TO_L2_MSG_TREE_HEIGHT, + NOTE_HASH_TREE_HEIGHT, NOTE_HASH_TREE_ID, + NULLIFIER_TREE_HEIGHT, NULLIFIER_TREE_ID, + PUBLIC_DATA_TREE_HEIGHT, PUBLIC_DATA_TREE_ID, } from '@aztec/circuits.js'; @@ -21,3 +26,17 @@ export enum MerkleTreeId { export const merkleTreeIds = () => { return Object.values(MerkleTreeId).filter((v): v is MerkleTreeId => !isNaN(Number(v))); }; + +const TREE_HEIGHTS = { + [MerkleTreeId.NOTE_HASH_TREE]: NOTE_HASH_TREE_HEIGHT, + [MerkleTreeId.ARCHIVE]: ARCHIVE_HEIGHT, + [MerkleTreeId.L1_TO_L2_MESSAGE_TREE]: L1_TO_L2_MSG_TREE_HEIGHT, + [MerkleTreeId.NULLIFIER_TREE]: NULLIFIER_TREE_HEIGHT, + [MerkleTreeId.PUBLIC_DATA_TREE]: PUBLIC_DATA_TREE_HEIGHT, +} as const; + +export type TreeHeights = typeof TREE_HEIGHTS; + +export function getTreeHeight(treeId: TID): TreeHeights[TID] { + return TREE_HEIGHTS[treeId]; +} diff --git a/yarn-project/circuit-types/src/mocks.ts b/yarn-project/circuit-types/src/mocks.ts index 3edf74adb19..db9c3bc9f87 100644 --- a/yarn-project/circuit-types/src/mocks.ts +++ b/yarn-project/circuit-types/src/mocks.ts @@ -78,15 +78,15 @@ export const mockTx = ( const publicCallRequests = times(totalPublicCallRequests, i => makePublicCallRequest(seed + 0x102 + i)).reverse(); // Reverse it so that they are sorted by counters in descending order. const publicFunctionArgs = times(totalPublicCallRequests, i => [new Fr(seed + i * 100), new Fr(seed + i * 101)]); - publicCallRequests.forEach((r, i) => (r.item.argsHash = computeVarArgsHash(publicFunctionArgs[i]))); + publicCallRequests.forEach((r, i) => (r.argsHash = computeVarArgsHash(publicFunctionArgs[i]))); if (hasPublicTeardownCallRequest) { const request = publicCallRequests.shift()!; data.forPublic.publicTeardownCallRequest = request; const args = publicFunctionArgs.shift()!; publicTeardownFunctionCall = new PublicExecutionRequest( - request.item.contractAddress, - CallContext.fromFields(request.item.callContext.toFields()), + request.contractAddress, + CallContext.fromFields(request.callContext.toFields()), args, ); } @@ -94,8 +94,8 @@ export const mockTx = ( enqueuedPublicFunctionCalls = publicCallRequests.map( (r, i) => new PublicExecutionRequest( - r.item.contractAddress, - CallContext.fromFields(r.item.callContext.toFields()), + r.contractAddress, + CallContext.fromFields(r.callContext.toFields()), publicFunctionArgs[i], ), ); diff --git a/yarn-project/circuit-types/src/p2p/block_attestation.test.ts b/yarn-project/circuit-types/src/p2p/block_attestation.test.ts index 1a0ba523548..e60fdb09940 100644 --- a/yarn-project/circuit-types/src/p2p/block_attestation.test.ts +++ b/yarn-project/circuit-types/src/p2p/block_attestation.test.ts @@ -1,10 +1,12 @@ // Serde test for the block attestation type +import { Secp256k1Signer } from '@aztec/foundation/crypto'; + import { BlockAttestation } from './block_attestation.js'; -import { makeBlockAttestation, randomSigner } from './mocks.js'; +import { makeBlockAttestation } from './mocks.js'; describe('Block Attestation serialization / deserialization', () => { - it('Should serialize / deserialize', async () => { - const attestation = await makeBlockAttestation(); + it('Should serialize / deserialize', () => { + const attestation = makeBlockAttestation(); const serialized = attestation.toBuffer(); const deserialized = BlockAttestation.fromBuffer(serialized); @@ -12,17 +14,17 @@ describe('Block Attestation serialization / deserialization', () => { expect(deserialized).toEqual(attestation); }); - it('Should serialize / deserialize + recover sender', async () => { - const account = randomSigner(); + it('Should serialize / deserialize + recover sender', () => { + const account = Secp256k1Signer.random(); - const proposal = await makeBlockAttestation(account); + const proposal = makeBlockAttestation(account); const serialized = proposal.toBuffer(); const deserialized = BlockAttestation.fromBuffer(serialized); expect(deserialized).toEqual(proposal); // Recover signature - const sender = await deserialized.getSender(); - expect(sender.toChecksumString()).toEqual(account.address); + const sender = deserialized.getSender(); + expect(sender).toEqual(account.address); }); }); diff --git a/yarn-project/circuit-types/src/p2p/block_attestation.ts b/yarn-project/circuit-types/src/p2p/block_attestation.ts index e38effdb368..c808417baf5 100644 --- a/yarn-project/circuit-types/src/p2p/block_attestation.ts +++ b/yarn-project/circuit-types/src/p2p/block_attestation.ts @@ -1,14 +1,12 @@ -import { EthAddress, Header } from '@aztec/circuits.js'; +import { type EthAddress } from '@aztec/circuits.js'; import { Buffer32 } from '@aztec/foundation/buffer'; -import { Fr } from '@aztec/foundation/fields'; +import { recoverAddress } from '@aztec/foundation/crypto'; +import { Signature } from '@aztec/foundation/eth-signature'; import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; -import { recoverMessageAddress } from 'viem'; - -import { TxHash } from '../tx/tx_hash.js'; -import { get0xStringHashedSignaturePayload, getSignaturePayload } from './block_utils.js'; +import { ConsensusPayload } from './consensus_payload.js'; import { Gossipable } from './gossipable.js'; -import { Signature } from './signature.js'; +import { getHashedSignaturePayloadEthSignedMessage } from './signature_utils.js'; import { TopicType, createTopicString } from './topic_type.js'; export class BlockAttestationHash extends Buffer32 { @@ -24,28 +22,22 @@ export class BlockAttestationHash extends Buffer32 { * will produce a block attestation over the header of the block */ export class BlockAttestation extends Gossipable { - static override p2pTopic: string; + static override p2pTopic = createTopicString(TopicType.block_attestation); private sender: EthAddress | undefined; constructor( - /** The block header the attestation is made over */ - public readonly header: Header, - // TODO(https://github.com/AztecProtocol/aztec-packages/pull/7727#discussion_r1713670830): temporary - public readonly archive: Fr, - public readonly txHashes: TxHash[], + /** The payload of the message, and what the signature is over */ + public readonly payload: ConsensusPayload, + /** The signature of the block attester */ public readonly signature: Signature, ) { super(); } - static { - this.p2pTopic = createTopicString(TopicType.block_attestation); - } - override p2pMessageIdentifier(): Buffer32 { - return BlockAttestationHash.fromField(this.archive); + return BlockAttestationHash.fromField(this.payload.archive); } /**Get sender @@ -53,40 +45,31 @@ export class BlockAttestation extends Gossipable { * Lazily evaluate and cache the sender of the attestation * @returns The sender of the attestation */ - async getSender() { + getSender() { if (!this.sender) { // Recover the sender from the attestation - const hashed = get0xStringHashedSignaturePayload(this.archive, this.txHashes); - const address = await recoverMessageAddress({ - message: { raw: hashed }, - signature: this.signature.to0xString(), - }); + const hashed = getHashedSignaturePayloadEthSignedMessage(this.payload); // Cache the sender for later use - this.sender = EthAddress.fromString(address); + this.sender = recoverAddress(hashed, this.signature); } return this.sender; } getPayload(): Buffer { - return getSignaturePayload(this.archive, this.txHashes); + return this.payload.getPayloadToSign(); } toBuffer(): Buffer { - return serializeToBuffer([this.header, this.archive, this.txHashes.length, this.txHashes, this.signature]); + return serializeToBuffer([this.payload, this.signature]); } static fromBuffer(buf: Buffer | BufferReader): BlockAttestation { const reader = BufferReader.asReader(buf); - return new BlockAttestation( - reader.readObject(Header), - reader.readObject(Fr), - reader.readArray(reader.readNumber(), TxHash), - reader.readObject(Signature), - ); + return new BlockAttestation(reader.readObject(ConsensusPayload), reader.readObject(Signature)); } static empty(): BlockAttestation { - return new BlockAttestation(Header.empty(), Fr.ZERO, [], Signature.empty()); + return new BlockAttestation(ConsensusPayload.empty(), Signature.empty()); } } diff --git a/yarn-project/circuit-types/src/p2p/block_proposal.test.ts b/yarn-project/circuit-types/src/p2p/block_proposal.test.ts index 6eb1c427f4f..af69c619532 100644 --- a/yarn-project/circuit-types/src/p2p/block_proposal.test.ts +++ b/yarn-project/circuit-types/src/p2p/block_proposal.test.ts @@ -1,10 +1,12 @@ // Serde test for the block proposal type +import { Secp256k1Signer } from '@aztec/foundation/crypto'; + import { BlockProposal } from './block_proposal.js'; -import { makeBlockProposal, randomSigner } from './mocks.js'; +import { makeBlockProposal } from './mocks.js'; describe('Block Proposal serialization / deserialization', () => { - it('Should serialize / deserialize', async () => { - const proposal = await makeBlockProposal(); + it('Should serialize / deserialize', () => { + const proposal = makeBlockProposal(); const serialized = proposal.toBuffer(); const deserialized = BlockProposal.fromBuffer(serialized); @@ -12,17 +14,17 @@ describe('Block Proposal serialization / deserialization', () => { expect(deserialized).toEqual(proposal); }); - it('Should serialize / deserialize + recover sender', async () => { - const account = randomSigner(); + it('Should serialize / deserialize + recover sender', () => { + const account = Secp256k1Signer.random(); - const proposal = await makeBlockProposal(account); + const proposal = makeBlockProposal(account); const serialized = proposal.toBuffer(); const deserialized = BlockProposal.fromBuffer(serialized); expect(deserialized).toEqual(proposal); // Recover signature - const sender = await deserialized.getSender(); - expect(sender.toChecksumString()).toEqual(account.address); + const sender = deserialized.getSender(); + expect(sender).toEqual(account.address); }); }); diff --git a/yarn-project/circuit-types/src/p2p/block_proposal.ts b/yarn-project/circuit-types/src/p2p/block_proposal.ts index 8164e755117..80cbb80c596 100644 --- a/yarn-project/circuit-types/src/p2p/block_proposal.ts +++ b/yarn-project/circuit-types/src/p2p/block_proposal.ts @@ -1,14 +1,12 @@ -import { EthAddress, Header } from '@aztec/circuits.js'; +import { type EthAddress } from '@aztec/circuits.js'; import { Buffer32 } from '@aztec/foundation/buffer'; -import { Fr } from '@aztec/foundation/fields'; +import { recoverAddress } from '@aztec/foundation/crypto'; +import { Signature } from '@aztec/foundation/eth-signature'; import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; -import { recoverMessageAddress } from 'viem'; - -import { TxHash } from '../tx/tx_hash.js'; -import { get0xStringHashedSignaturePayload, getHashedSignaturePayload, getSignaturePayload } from './block_utils.js'; +import { ConsensusPayload } from './consensus_payload.js'; import { Gossipable } from './gossipable.js'; -import { Signature } from './signature.js'; +import { getHashedSignaturePayload, getHashedSignaturePayloadEthSignedMessage } from './signature_utils.js'; import { TopicType, createTopicString } from './topic_type.js'; export class BlockProposalHash extends Buffer32 { @@ -24,77 +22,57 @@ export class BlockProposalHash extends Buffer32 { * be included in the head of the chain */ export class BlockProposal extends Gossipable { - static override p2pTopic: string; + static override p2pTopic = createTopicString(TopicType.block_proposal); private sender: EthAddress | undefined; constructor( - /** The block header, after execution of the below sequence of transactions */ - public readonly header: Header, + /** The payload of the message, and what the signature is over */ + public readonly payload: ConsensusPayload, - // TODO(https://github.com/AztecProtocol/aztec-packages/pull/7727#discussion_r1713670830): temporary - public readonly archive: Fr, - /** The sequence of transactions in the block */ - public readonly txs: TxHash[], /** The signer of the BlockProposal over the header of the new block*/ public readonly signature: Signature, ) { super(); } - static { - this.p2pTopic = createTopicString(TopicType.block_proposal); - } - override p2pMessageIdentifier(): Buffer32 { - return BlockProposalHash.fromField(this.archive); + return BlockProposalHash.fromField(this.payload.archive); } static async createProposalFromSigner( - header: Header, - archive: Fr, - txs: TxHash[], - payloadSigner: (payload: Buffer) => Promise, + payload: ConsensusPayload, + payloadSigner: (payload: Buffer32) => Promise, ) { - const hashed = getHashedSignaturePayload(archive, txs); + const hashed = getHashedSignaturePayload(payload); const sig = await payloadSigner(hashed); - return new BlockProposal(header, archive, txs, sig); + return new BlockProposal(payload, sig); } /**Get Sender * Lazily evaluate the sender of the proposal; result is cached */ - async getSender() { + getSender() { if (!this.sender) { - // performance note(): this signature method requires another hash behind the scenes - const hashed = get0xStringHashedSignaturePayload(this.archive, this.txs); - const address = await recoverMessageAddress({ - message: { raw: hashed }, - signature: this.signature.to0xString(), - }); + const hashed = getHashedSignaturePayloadEthSignedMessage(this.payload); // Cache the sender for later use - this.sender = EthAddress.fromString(address); + this.sender = recoverAddress(hashed, this.signature); } return this.sender; } getPayload() { - return getSignaturePayload(this.archive, this.txs); + return this.payload.getPayloadToSign(); } toBuffer(): Buffer { - return serializeToBuffer([this.header, this.archive, this.txs.length, this.txs, this.signature]); + return serializeToBuffer([this.payload, this.signature]); } static fromBuffer(buf: Buffer | BufferReader): BlockProposal { const reader = BufferReader.asReader(buf); - return new BlockProposal( - reader.readObject(Header), - reader.readObject(Fr), - reader.readArray(reader.readNumber(), TxHash), - reader.readObject(Signature), - ); + return new BlockProposal(reader.readObject(ConsensusPayload), reader.readObject(Signature)); } } diff --git a/yarn-project/circuit-types/src/p2p/block_utils.ts b/yarn-project/circuit-types/src/p2p/block_utils.ts deleted file mode 100644 index cd1c5a48842..00000000000 --- a/yarn-project/circuit-types/src/p2p/block_utils.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { keccak256 as keccak256Buffer } from '@aztec/foundation/crypto'; -import { type Fr } from '@aztec/foundation/fields'; - -import { encodeAbiParameters, keccak256 as keccak2560xString, parseAbiParameters } from 'viem'; - -import { type TxHash } from '../tx/tx_hash.js'; - -/** - * Get the payload for the signature of the block proposal - * @param archive - The archive of the block - * @param txs - The transactions in the block - * @returns The payload for the signature of the block proposal - */ -export function getSignaturePayload(archive: Fr, txs: TxHash[]) { - const abi = parseAbiParameters('bytes32, bytes32[]'); - const txArray = txs.map(tx => tx.to0xString()); - const encodedData = encodeAbiParameters(abi, [archive.toString(), txArray] as const); - - return Buffer.from(encodedData.slice(2), 'hex'); -} - -/** - * Get the hashed payload for the signature of the block proposal - * @param archive - The archive of the block - * @param txs - The transactions in the block - * @returns The hashed payload for the signature of the block proposal - */ -export function getHashedSignaturePayload(archive: Fr, txs: TxHash[]): Buffer { - return keccak256Buffer(getSignaturePayload(archive, txs)); -} - -export function get0xStringHashedSignaturePayload(archive: Fr, txs: TxHash[]): `0x${string}` { - return keccak2560xString(getSignaturePayload(archive, txs)); -} diff --git a/yarn-project/circuit-types/src/p2p/consensus_payload.ts b/yarn-project/circuit-types/src/p2p/consensus_payload.ts new file mode 100644 index 00000000000..f9cb6101b06 --- /dev/null +++ b/yarn-project/circuit-types/src/p2p/consensus_payload.ts @@ -0,0 +1,53 @@ +import { Header } from '@aztec/circuits.js'; +import { Fr } from '@aztec/foundation/fields'; +import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; +import { type FieldsOf } from '@aztec/foundation/types'; + +import { encodeAbiParameters, parseAbiParameters } from 'viem'; + +import { TxHash } from '../tx/tx_hash.js'; +import { type Signable } from './signature_utils.js'; + +export class ConsensusPayload implements Signable { + constructor( + /** The block header the attestation is made over */ + public readonly header: Header, + // TODO(https://github.com/AztecProtocol/aztec-packages/pull/7727#discussion_r1713670830): temporary + public readonly archive: Fr, + /** The sequence of transactions in the block */ + public readonly txHashes: TxHash[], + ) {} + + static getFields(fields: FieldsOf) { + return [fields.header, fields.archive, fields.txHashes] as const; + } + + getPayloadToSign(): Buffer { + const abi = parseAbiParameters('bytes32, bytes32[]'); + const txArray = this.txHashes.map(tx => tx.to0xString()); + const encodedData = encodeAbiParameters(abi, [this.archive.toString(), txArray] as const); + + return Buffer.from(encodedData.slice(2), 'hex'); + } + + toBuffer(): Buffer { + return serializeToBuffer([this.header, this.archive, this.txHashes.length, this.txHashes]); + } + + static fromBuffer(buf: Buffer | BufferReader): ConsensusPayload { + const reader = BufferReader.asReader(buf); + return new ConsensusPayload( + reader.readObject(Header), + reader.readObject(Fr), + reader.readArray(reader.readNumber(), TxHash), + ); + } + + static fromFields(fields: FieldsOf): ConsensusPayload { + return new ConsensusPayload(fields.header, fields.archive, fields.txHashes); + } + + static empty(): ConsensusPayload { + return new ConsensusPayload(Header.empty(), Fr.ZERO, []); + } +} diff --git a/yarn-project/circuit-types/src/p2p/index.ts b/yarn-project/circuit-types/src/p2p/index.ts index e6c268523c1..0974775870a 100644 --- a/yarn-project/circuit-types/src/p2p/index.ts +++ b/yarn-project/circuit-types/src/p2p/index.ts @@ -1,7 +1,7 @@ export * from './block_attestation.js'; export * from './block_proposal.js'; -export * from './interface.js'; +export * from './consensus_payload.js'; export * from './gossipable.js'; +export * from './interface.js'; +export * from './signature_utils.js'; export * from './topic_type.js'; -export * from './signature.js'; -export * from './block_utils.js'; diff --git a/yarn-project/circuit-types/src/p2p/interface.ts b/yarn-project/circuit-types/src/p2p/interface.ts index c2de043d00e..1e252250399 100644 --- a/yarn-project/circuit-types/src/p2p/interface.ts +++ b/yarn-project/circuit-types/src/p2p/interface.ts @@ -1,3 +1,4 @@ +import { EpochProofQuote } from '../prover_coordination/epoch_proof_quote.js'; import { Tx } from '../tx/tx.js'; import { BlockAttestation } from './block_attestation.js'; import { BlockProposal } from './block_proposal.js'; @@ -14,4 +15,5 @@ export const TopicTypeMap: Record = { [TopicType.tx]: Tx as unknown as typeof Gossipable, [TopicType.block_proposal]: BlockProposal as unknown as typeof Gossipable, [TopicType.block_attestation]: BlockAttestation as unknown as typeof Gossipable, + [TopicType.epoch_proof_quote]: EpochProofQuote as unknown as typeof Gossipable, }; diff --git a/yarn-project/circuit-types/src/p2p/mocks.ts b/yarn-project/circuit-types/src/p2p/mocks.ts index 2e4b9495d66..efe104f6697 100644 --- a/yarn-project/circuit-types/src/p2p/mocks.ts +++ b/yarn-project/circuit-types/src/p2p/mocks.ts @@ -1,41 +1,33 @@ import { makeHeader } from '@aztec/circuits.js/testing'; +import { Secp256k1Signer } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; -import { type PrivateKeyAccount } from 'viem'; -import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts'; - import { TxHash } from '../tx/tx_hash.js'; import { BlockAttestation } from './block_attestation.js'; import { BlockProposal } from './block_proposal.js'; -import { get0xStringHashedSignaturePayload } from './block_utils.js'; -import { Signature } from './signature.js'; +import { ConsensusPayload } from './consensus_payload.js'; +import { getHashedSignaturePayloadEthSignedMessage } from './signature_utils.js'; -export const makeBlockProposal = async (signer?: PrivateKeyAccount): Promise => { - signer = signer || randomSigner(); +const makeAndSignConsensusPayload = (signer = Secp256k1Signer.random()) => { + const payload = ConsensusPayload.fromFields({ + header: makeHeader(1), + archive: Fr.random(), + txHashes: [0, 1, 2, 3, 4, 5].map(() => TxHash.random()), + }); - const blockHeader = makeHeader(1); - const archive = Fr.random(); - const txs = [0, 1, 2, 3, 4, 5].map(() => TxHash.random()); - const hash = get0xStringHashedSignaturePayload(archive, txs); - const signature = Signature.from0xString(await signer.signMessage({ message: { raw: hash } })); + const hash = getHashedSignaturePayloadEthSignedMessage(payload); + const signature = signer.sign(hash); - return new BlockProposal(blockHeader, archive, txs, signature); + return { payload, signature }; }; -// TODO(https://github.com/AztecProtocol/aztec-packages/issues/8028) -export const makeBlockAttestation = async (signer?: PrivateKeyAccount): Promise => { - signer = signer || randomSigner(); - - const blockHeader = makeHeader(1); - const archive = Fr.random(); - const txs = [0, 1, 2, 3, 4, 5].map(() => TxHash.random()); - const hash = get0xStringHashedSignaturePayload(archive, txs); - const signature = Signature.from0xString(await signer.signMessage({ message: { raw: hash } })); - - return new BlockAttestation(blockHeader, archive, txs, signature); +export const makeBlockProposal = (signer = Secp256k1Signer.random()): BlockProposal => { + const { payload, signature } = makeAndSignConsensusPayload(signer); + return new BlockProposal(payload, signature); }; -export const randomSigner = (): PrivateKeyAccount => { - const privateKey = generatePrivateKey(); - return privateKeyToAccount(privateKey); +// TODO(https://github.com/AztecProtocol/aztec-packages/issues/8028) +export const makeBlockAttestation = (signer?: Secp256k1Signer): BlockAttestation => { + const { payload, signature } = makeAndSignConsensusPayload(signer); + return new BlockAttestation(payload, signature); }; diff --git a/yarn-project/circuit-types/src/p2p/signature.test.ts b/yarn-project/circuit-types/src/p2p/signature.test.ts deleted file mode 100644 index 7e443a4f105..00000000000 --- a/yarn-project/circuit-types/src/p2p/signature.test.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Fr } from '@aztec/foundation/fields'; - -import { recoverMessageAddress } from 'viem'; - -import { randomSigner } from './mocks.js'; -import { Signature } from './signature.js'; - -describe('Signature serialization / deserialization', () => { - it('Should serialize / deserialize', async () => { - const signer = randomSigner(); - - const originalMessage = Fr.random(); - const m = `0x${originalMessage.toBuffer().toString('hex')}`; - - const signature = await signer.signMessage({ message: m }); - - const signatureObj = Signature.from0xString(signature); - - // Serde - const serialized = signatureObj.toBuffer(); - const deserialized = Signature.fromBuffer(serialized); - expect(deserialized).toEqual(signatureObj); - - const as0x = deserialized.to0xString(); - expect(as0x).toEqual(signature); - - // Recover signature - const sender = await recoverMessageAddress({ message: originalMessage.toString(), signature: as0x }); - expect(sender).toEqual(signer.address); - }); -}); diff --git a/yarn-project/circuit-types/src/p2p/signature_utils.ts b/yarn-project/circuit-types/src/p2p/signature_utils.ts new file mode 100644 index 00000000000..b06cbdf5f92 --- /dev/null +++ b/yarn-project/circuit-types/src/p2p/signature_utils.ts @@ -0,0 +1,25 @@ +import { Buffer32 } from '@aztec/foundation/buffer'; +import { keccak256, makeEthSignDigest } from '@aztec/foundation/crypto'; + +export interface Signable { + getPayloadToSign(): Buffer; +} + +/** + * Get the hashed payload for the signature of the `Signable` + * @param s - The `Signable` to sign + * @returns The hashed payload for the signature of the `Signable` + */ +export function getHashedSignaturePayload(s: Signable): Buffer32 { + return Buffer32.fromBuffer(keccak256(s.getPayloadToSign())); +} + +/** + * Get the hashed payload for the signature of the `Signable` as an Ethereum signed message EIP-712 + * @param s - the `Signable` to sign + * @returns The hashed payload for the signature of the `Signable` as an Ethereum signed message + */ +export function getHashedSignaturePayloadEthSignedMessage(s: Signable): Buffer32 { + const payload = getHashedSignaturePayload(s); + return makeEthSignDigest(payload); +} diff --git a/yarn-project/circuit-types/src/p2p/topic_type.ts b/yarn-project/circuit-types/src/p2p/topic_type.ts index 2310d85958e..88aed5b8bc1 100644 --- a/yarn-project/circuit-types/src/p2p/topic_type.ts +++ b/yarn-project/circuit-types/src/p2p/topic_type.ts @@ -15,4 +15,5 @@ export enum TopicType { tx = 'tx', block_proposal = 'block_proposal', block_attestation = 'block_attestation', + epoch_proof_quote = 'epoch_proof_quote', } diff --git a/yarn-project/circuit-types/src/prover_coordination/epoch_proof_quote.test.ts b/yarn-project/circuit-types/src/prover_coordination/epoch_proof_quote.test.ts new file mode 100644 index 00000000000..c62995559ef --- /dev/null +++ b/yarn-project/circuit-types/src/prover_coordination/epoch_proof_quote.test.ts @@ -0,0 +1,24 @@ +import { EthAddress } from '@aztec/circuits.js'; +import { Secp256k1Signer } from '@aztec/foundation/crypto'; + +import { EpochProofQuote } from './epoch_proof_quote.js'; +import { EpochProofQuotePayload } from './epoch_proof_quote_payload.js'; + +describe('epoch proof quote', () => { + it('should serialize / deserialize', () => { + const signer = Secp256k1Signer.random(); + const payload = EpochProofQuotePayload.fromFields({ + basisPointFee: 5000, + bondAmount: 1000000000000000000n, + epochToProve: 42n, + rollupAddress: EthAddress.random(), + validUntilSlot: 100n, + }); + + const quote = EpochProofQuote.new(payload, signer); + + expect(EpochProofQuote.fromBuffer(quote.toBuffer())).toEqual(quote); + + expect(quote.senderAddress).toEqual(signer.address); + }); +}); diff --git a/yarn-project/circuit-types/src/prover_coordination/epoch_proof_quote.ts b/yarn-project/circuit-types/src/prover_coordination/epoch_proof_quote.ts new file mode 100644 index 00000000000..d5c2f40e296 --- /dev/null +++ b/yarn-project/circuit-types/src/prover_coordination/epoch_proof_quote.ts @@ -0,0 +1,55 @@ +import { type EthAddress } from '@aztec/circuits.js'; +import { Buffer32 } from '@aztec/foundation/buffer'; +import { type Secp256k1Signer, recoverAddress } from '@aztec/foundation/crypto'; +import { Signature } from '@aztec/foundation/eth-signature'; +import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; +import { type FieldsOf } from '@aztec/foundation/types'; + +import { Gossipable } from '../p2p/gossipable.js'; +import { getHashedSignaturePayloadEthSignedMessage } from '../p2p/signature_utils.js'; +import { TopicType, createTopicString } from '../p2p/topic_type.js'; +import { EpochProofQuotePayload } from './epoch_proof_quote_payload.js'; + +export class EpochProofQuote extends Gossipable { + static override p2pTopic: string = createTopicString(TopicType.epoch_proof_quote); + + private sender: EthAddress | undefined; + + constructor(public readonly payload: EpochProofQuotePayload, public readonly signature: Signature) { + super(); + } + + static getFields(fields: FieldsOf) { + return [fields.payload, fields.signature] as const; + } + + override p2pMessageIdentifier(): Buffer32 { + return new Buffer32(this.signature.toBuffer()); + } + + override toBuffer(): Buffer { + return serializeToBuffer(...EpochProofQuote.getFields(this)); + } + + static fromBuffer(buf: Buffer | BufferReader): EpochProofQuote { + const reader = BufferReader.asReader(buf); + return new EpochProofQuote(reader.readObject(EpochProofQuotePayload), reader.readObject(Signature)); + } + + static new(payload: EpochProofQuotePayload, signer: Secp256k1Signer): EpochProofQuote { + const digest = getHashedSignaturePayloadEthSignedMessage(payload); + const signature = signer.sign(digest); + return new EpochProofQuote(payload, signature); + } + + get senderAddress(): EthAddress { + if (!this.sender) { + const hashed = getHashedSignaturePayloadEthSignedMessage(this.payload); + + // Cache the sender for later use + this.sender = recoverAddress(hashed, this.signature); + } + + return this.sender; + } +} diff --git a/yarn-project/circuit-types/src/prover_coordination/epoch_proof_quote_payload.ts b/yarn-project/circuit-types/src/prover_coordination/epoch_proof_quote_payload.ts new file mode 100644 index 00000000000..bd0c92fcdc7 --- /dev/null +++ b/yarn-project/circuit-types/src/prover_coordination/epoch_proof_quote_payload.ts @@ -0,0 +1,66 @@ +import { EthAddress } from '@aztec/circuits.js'; +import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; +import { type FieldsOf } from '@aztec/foundation/types'; + +import { encodeAbiParameters, parseAbiParameters } from 'viem'; + +import { type Signable } from '../p2p/signature_utils.js'; + +export class EpochProofQuotePayload implements Signable { + constructor( + public readonly epochToProve: bigint, + public readonly validUntilSlot: bigint, + public readonly bondAmount: bigint, + public readonly rollupAddress: EthAddress, + public readonly basisPointFee: number, + ) {} + + static getFields(fields: FieldsOf) { + return [ + fields.epochToProve, + fields.validUntilSlot, + fields.bondAmount, + fields.rollupAddress, + fields.basisPointFee, + ] as const; + } + + toBuffer(): Buffer { + return serializeToBuffer(...EpochProofQuotePayload.getFields(this)); + } + + static fromBuffer(buf: Buffer | BufferReader): EpochProofQuotePayload { + const reader = BufferReader.asReader(buf); + return new EpochProofQuotePayload( + reader.readUInt256(), + reader.readUInt256(), + reader.readUInt256(), + reader.readObject(EthAddress), + reader.readNumber(), + ); + } + + static fromFields(fields: FieldsOf): EpochProofQuotePayload { + return new EpochProofQuotePayload( + fields.epochToProve, + fields.validUntilSlot, + fields.bondAmount, + fields.rollupAddress, + fields.basisPointFee, + ); + } + + getPayloadToSign(): Buffer { + const abi = parseAbiParameters('uint256, uint256, uint256, address, uint32'); + const encodedData = encodeAbiParameters(abi, [ + this.epochToProve, + this.validUntilSlot, + this.bondAmount, + this.rollupAddress.toString(), + this.basisPointFee, + ] as const); + + // NOTE: trim the first two bytes to get rid of the `0x` prefix + return Buffer.from(encodedData.slice(2), 'hex'); + } +} diff --git a/yarn-project/circuit-types/src/public_execution_request.ts b/yarn-project/circuit-types/src/public_execution_request.ts index 83ad8d3f200..e9a1e19621c 100644 --- a/yarn-project/circuit-types/src/public_execution_request.ts +++ b/yarn-project/circuit-types/src/public_execution_request.ts @@ -59,9 +59,9 @@ export class PublicExecutionRequest { isForCallRequest(callRequest: PublicCallRequest) { return ( - this.contractAddress.equals(callRequest.item.contractAddress) && - this.callContext.equals(callRequest.item.callContext) && - computeVarArgsHash(this.args).equals(callRequest.item.argsHash) + this.contractAddress.equals(callRequest.contractAddress) && + this.callContext.equals(callRequest.callContext) && + computeVarArgsHash(this.args).equals(callRequest.argsHash) ); } diff --git a/yarn-project/circuit-types/src/stats/stats.ts b/yarn-project/circuit-types/src/stats/stats.ts index d38c44765cb..30dcb9f460a 100644 --- a/yarn-project/circuit-types/src/stats/stats.ts +++ b/yarn-project/circuit-types/src/stats/stats.ts @@ -77,6 +77,7 @@ export type CircuitName = | 'base-rollup' | 'merge-rollup' | 'block-root-rollup' + | 'block-root-rollup-final' | 'block-merge-rollup' | 'root-rollup' | 'private-kernel-init' @@ -90,9 +91,8 @@ export type CircuitName = | 'private-kernel-tail' | 'private-kernel-tail-to-public' | 'app-circuit' - | 'public-kernel-setup' - | 'public-kernel-app-logic' - | 'public-kernel-teardown' + | 'public-kernel-inner' + | 'public-kernel-merge' | 'public-kernel-tail' | 'avm-circuit' | 'empty-nested' diff --git a/yarn-project/circuit-types/src/test/factories.ts b/yarn-project/circuit-types/src/test/factories.ts new file mode 100644 index 00000000000..51df5cd43c5 --- /dev/null +++ b/yarn-project/circuit-types/src/test/factories.ts @@ -0,0 +1,63 @@ +import { type MerkleTreeOperations, makeProcessedTx, mockTx } from '@aztec/circuit-types'; +import { + Fr, + GasSettings, + type Header, + KernelCircuitPublicInputs, + LogHash, + MAX_L2_TO_L1_MSGS_PER_TX, + MAX_NOTE_HASHES_PER_TX, + MAX_NULLIFIERS_PER_TX, + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, + PublicDataUpdateRequest, + ScopedLogHash, +} from '@aztec/circuits.js'; +import { makeScopedL2ToL1Message } from '@aztec/circuits.js/testing'; +import { makeTuple } from '@aztec/foundation/array'; + +/** Makes a bloated processed tx for testing purposes. */ +export function makeBloatedProcessedTx( + historicalHeaderOrDb: Header | MerkleTreeOperations, + vkRoot: Fr, + seed = 0x1, + overrides: { inclusionFee?: Fr } = {}, +) { + seed *= MAX_NULLIFIERS_PER_TX; // Ensure no clashing given incremental seeds + const tx = mockTx(seed); + const kernelOutput = KernelCircuitPublicInputs.empty(); + kernelOutput.constants.vkTreeRoot = vkRoot; + kernelOutput.constants.historicalHeader = + 'getInitialHeader' in historicalHeaderOrDb ? historicalHeaderOrDb.getInitialHeader() : historicalHeaderOrDb; + kernelOutput.end.publicDataUpdateRequests = makeTuple( + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, + i => new PublicDataUpdateRequest(new Fr(i), new Fr(i + 10), i + 20), + seed + 0x500, + ); + kernelOutput.end.publicDataUpdateRequests = makeTuple( + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, + i => new PublicDataUpdateRequest(new Fr(i), new Fr(i + 10), i + 20), + seed + 0x600, + ); + + kernelOutput.constants.txContext.gasSettings = GasSettings.default({ inclusionFee: overrides.inclusionFee }); + + const processedTx = makeProcessedTx(tx, kernelOutput, []); + + processedTx.data.end.noteHashes = makeTuple(MAX_NOTE_HASHES_PER_TX, i => new Fr(i), seed + 0x100); + processedTx.data.end.nullifiers = makeTuple(MAX_NULLIFIERS_PER_TX, i => new Fr(i), seed + 0x100000); + + processedTx.data.end.nullifiers[tx.data.forPublic!.end.nullifiers.length - 1] = Fr.zero(); + + processedTx.data.end.l2ToL1Msgs = makeTuple(MAX_L2_TO_L1_MSGS_PER_TX, makeScopedL2ToL1Message, seed + 0x300); + processedTx.noteEncryptedLogs.unrollLogs().forEach((log, i) => { + processedTx.data.end.noteEncryptedLogsHashes[i] = new LogHash(Fr.fromBuffer(log.hash()), 0, new Fr(log.length)); + }); + processedTx.encryptedLogs.unrollLogs().forEach((log, i) => { + processedTx.data.end.encryptedLogsHashes[i] = new ScopedLogHash( + new LogHash(Fr.fromBuffer(log.hash()), 0, new Fr(log.length)), + log.maskedContractAddress, + ); + }); + + return processedTx; +} diff --git a/yarn-project/circuit-types/src/test/index.ts b/yarn-project/circuit-types/src/test/index.ts new file mode 100644 index 00000000000..e24620a0a23 --- /dev/null +++ b/yarn-project/circuit-types/src/test/index.ts @@ -0,0 +1 @@ +export * from './factories.js'; diff --git a/yarn-project/circuit-types/src/tx/processed_tx.ts b/yarn-project/circuit-types/src/tx/processed_tx.ts index 4e73bf0561c..d05d2874963 100644 --- a/yarn-project/circuit-types/src/tx/processed_tx.ts +++ b/yarn-project/circuit-types/src/tx/processed_tx.ts @@ -4,6 +4,9 @@ import { PublicDataWrite, type PublicInputsAndRecursiveProof, type PublicInputsAndTubeProof, + type PublicKernelInnerRequest, + type PublicKernelMergeRequest, + type PublicKernelTailRequest, type SimulationError, type Tx, TxEffect, @@ -20,39 +23,20 @@ import { KernelCircuitPublicInputs, type NESTED_RECURSIVE_PROOF_LENGTH, type PublicDataUpdateRequest, - type PublicKernelCircuitPrivateInputs, type PublicKernelCircuitPublicInputs, - type PublicKernelTailCircuitPrivateInputs, type RecursiveProof, type TUBE_PROOF_LENGTH, type VerificationKeyData, } from '@aztec/circuits.js'; import { siloL2ToL1Message } from '@aztec/circuits.js/hash'; -import { type CircuitName } from '../stats/stats.js'; - -/** - * Used to communicate to the prover which type of circuit to prove - */ -export enum PublicKernelType { - NON_PUBLIC = 'non-public', - SETUP = 'setup', - APP_LOGIC = 'app-logic', - TEARDOWN = 'teardown', - TAIL = 'tail', +export enum PublicKernelPhase { + SETUP, + APP_LOGIC, + TEARDOWN, } -export type PublicKernelTailRequest = { - type: PublicKernelType.TAIL; - inputs: PublicKernelTailCircuitPrivateInputs; -}; - -export type PublicKernelNonTailRequest = { - type: PublicKernelType.SETUP | PublicKernelType.APP_LOGIC | PublicKernelType.TEARDOWN; - inputs: PublicKernelCircuitPrivateInputs; -}; - -export type PublicKernelRequest = PublicKernelTailRequest | PublicKernelNonTailRequest; +export type PublicKernelRequest = PublicKernelInnerRequest | PublicKernelMergeRequest | PublicKernelTailRequest; export const AVM_REQUEST = 'AVM' as const; @@ -62,7 +46,7 @@ export type AvmProvingRequest = { bytecode: Buffer; calldata: Fr[]; avmHints: AvmExecutionHints; - kernelRequest: PublicKernelNonTailRequest; + kernelRequest: PublicKernelInnerRequest; }; export type PublicProvingRequest = AvmProvingRequest | PublicKernelRequest; @@ -96,7 +80,7 @@ export type ProcessedTx = Pick>; + gasUsed: Partial>; /** * All public data updates for this transaction, including those created * or updated by the protocol, such as balance updates from fee payments. @@ -353,18 +337,3 @@ export function validateProcessedTx(tx: ProcessedTx): void { validateProcessedTxLogs(tx); // TODO: validate other fields } - -export function mapPublicKernelToCircuitName(kernelType: PublicKernelRequest['type']): CircuitName { - switch (kernelType) { - case PublicKernelType.SETUP: - return 'public-kernel-setup'; - case PublicKernelType.APP_LOGIC: - return 'public-kernel-app-logic'; - case PublicKernelType.TEARDOWN: - return 'public-kernel-teardown'; - case PublicKernelType.TAIL: - return 'public-kernel-tail'; - default: - throw new Error(`Unknown kernel type: ${kernelType}`); - } -} diff --git a/yarn-project/circuit-types/src/tx/public_simulation_output.ts b/yarn-project/circuit-types/src/tx/public_simulation_output.ts index 6645d3f7a6f..8b497b40467 100644 --- a/yarn-project/circuit-types/src/tx/public_simulation_output.ts +++ b/yarn-project/circuit-types/src/tx/public_simulation_output.ts @@ -3,7 +3,7 @@ import { mapValues } from '@aztec/foundation/collection'; import { EncryptedTxL2Logs, UnencryptedTxL2Logs } from '../logs/tx_l2_logs.js'; import { type SimulationError } from '../simulation_error.js'; -import { type PublicKernelType } from './processed_tx.js'; +import { type PublicKernelPhase } from './processed_tx.js'; /** Return values of simulating a circuit. */ export type ProcessReturnValues = Fr[] | undefined; @@ -31,6 +31,10 @@ export class NestedProcessReturnValues { json.nested?.map((n: any) => NestedProcessReturnValues.fromJSON(n)), ); } + + static empty() { + return new NestedProcessReturnValues([]); + } } /** @@ -44,7 +48,7 @@ export class PublicSimulationOutput { public constants: CombinedConstantData, public end: CombinedAccumulatedData, public publicReturnValues: NestedProcessReturnValues[], - public gasUsed: Partial>, + public gasUsed: Partial>, ) {} toJSON() { diff --git a/yarn-project/circuit-types/src/tx/tx.ts b/yarn-project/circuit-types/src/tx/tx.ts index c15335287df..6bb380aa82d 100644 --- a/yarn-project/circuit-types/src/tx/tx.ts +++ b/yarn-project/circuit-types/src/tx/tx.ts @@ -213,7 +213,7 @@ export class Tx extends Gossipable { this.data .getNonRevertiblePublicCallRequests() .at(-1)! - .item.callContext.functionSelector.toField() + .callContext.functionSelector.toField() .toBigInt() === 0x43417bb1n ? 'fpc_public' : 'fpc_private' diff --git a/yarn-project/circuit-types/src/tx/validator/empty_validator.ts b/yarn-project/circuit-types/src/tx/validator/empty_validator.ts index b96bd9b2381..7ad6f80dcf1 100644 --- a/yarn-project/circuit-types/src/tx/validator/empty_validator.ts +++ b/yarn-project/circuit-types/src/tx/validator/empty_validator.ts @@ -4,4 +4,8 @@ export class EmptyTxValidator implements TxValidator public validateTxs(txs: T[]): Promise<[validTxs: T[], invalidTxs: T[]]> { return Promise.resolve([txs, []]); } + + public validateTx(_tx: T): Promise { + return Promise.resolve(true); + } } diff --git a/yarn-project/circuit-types/src/tx/validator/tx_validator.ts b/yarn-project/circuit-types/src/tx/validator/tx_validator.ts index 336d36fe648..6669b56055a 100644 --- a/yarn-project/circuit-types/src/tx/validator/tx_validator.ts +++ b/yarn-project/circuit-types/src/tx/validator/tx_validator.ts @@ -4,5 +4,6 @@ import { type Tx } from '../tx.js'; export type AnyTx = Tx | ProcessedTx; export interface TxValidator { + validateTx(tx: T): Promise; validateTxs(txs: T[]): Promise<[validTxs: T[], invalidTxs: T[]]>; } diff --git a/yarn-project/circuit-types/src/tx_effect.ts b/yarn-project/circuit-types/src/tx_effect.ts index 4ee1cf633ca..1115f1b2911 100644 --- a/yarn-project/circuit-types/src/tx_effect.ts +++ b/yarn-project/circuit-types/src/tx_effect.ts @@ -146,33 +146,10 @@ export class TxEffect { */ hash() { const padBuffer = (buf: Buffer, length: number) => Buffer.concat([buf, Buffer.alloc(length - buf.length)]); - // Below follows computeTxOutHash in TxsDecoder.sol and new_sha in variable_merkle_tree.nr - // TODO(#7218): Revert to fixed height tree for outbox - const computeTxOutHash = (l2ToL1Msgs: Fr[]) => { - if (l2ToL1Msgs.length == 0) { - return Buffer.alloc(32); - } - const depth = l2ToL1Msgs.length == 1 ? 1 : Math.ceil(Math.log2(l2ToL1Msgs.length)); - let thisLayer = padArrayEnd( - l2ToL1Msgs.map(msg => msg.toBuffer()), - Buffer.alloc(32), - 2 ** depth, - ); - let nextLayer = []; - for (let i = 0; i < depth; i++) { - for (let j = 0; j < thisLayer.length; j += 2) { - // Store the hash of each pair one layer up - nextLayer[j / 2] = sha256Trunc(Buffer.concat([thisLayer[j], thisLayer[j + 1]])); - } - thisLayer = nextLayer; - nextLayer = []; - } - return thisLayer[0]; - }; const noteHashesBuffer = padBuffer(serializeToBuffer(this.noteHashes), Fr.SIZE_IN_BYTES * MAX_NOTE_HASHES_PER_TX); const nullifiersBuffer = padBuffer(serializeToBuffer(this.nullifiers), Fr.SIZE_IN_BYTES * MAX_NULLIFIERS_PER_TX); - const outHashBuffer = computeTxOutHash(this.l2ToL1Msgs); + const outHashBuffer = this.txOutHash(); const publicDataWritesBuffer = padBuffer( serializeToBuffer(this.publicDataWrites), PublicDataWrite.SIZE_IN_BYTES * MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, @@ -200,6 +177,34 @@ export class TxEffect { return sha256Trunc(inputValue); } + /** + * Computes txOutHash of this tx effect. + * TODO(#7218): Revert to fixed height tree for outbox + * @dev Follows computeTxOutHash in TxsDecoder.sol and new_sha in variable_merkle_tree.nr + */ + txOutHash() { + const { l2ToL1Msgs } = this; + if (l2ToL1Msgs.length == 0) { + return Buffer.alloc(32); + } + const depth = l2ToL1Msgs.length == 1 ? 1 : Math.ceil(Math.log2(l2ToL1Msgs.length)); + let thisLayer = padArrayEnd( + l2ToL1Msgs.map(msg => msg.toBuffer()), + Buffer.alloc(32), + 2 ** depth, + ); + let nextLayer = []; + for (let i = 0; i < depth; i++) { + for (let j = 0; j < thisLayer.length; j += 2) { + // Store the hash of each pair one layer up + nextLayer[j / 2] = sha256Trunc(Buffer.concat([thisLayer[j], thisLayer[j + 1]])); + } + thisLayer = nextLayer; + nextLayer = []; + } + return thisLayer[0]; + } + static random( numPrivateCallsPerTx = 2, numPublicCallsPerTx = 3, diff --git a/yarn-project/circuits.js/src/constants.gen.ts b/yarn-project/circuits.js/src/constants.gen.ts index 96be63148a3..2737fa9c6c5 100644 --- a/yarn-project/circuits.js/src/constants.gen.ts +++ b/yarn-project/circuits.js/src/constants.gen.ts @@ -69,9 +69,8 @@ export const PRIVATE_KERNEL_TAIL_INDEX = 10; export const PRIVATE_KERNEL_TAIL_TO_PUBLIC_INDEX = 11; export const EMPTY_NESTED_INDEX = 12; export const PRIVATE_KERNEL_EMPTY_INDEX = 13; -export const PUBLIC_KERNEL_SETUP_INDEX = 14; -export const PUBLIC_KERNEL_APP_LOGIC_INDEX = 15; -export const PUBLIC_KERNEL_TEARDOWN_INDEX = 16; +export const PUBLIC_KERNEL_INNER_INDEX = 15; +export const PUBLIC_KERNEL_MERGE_INDEX = 16; export const PUBLIC_KERNEL_TAIL_INDEX = 17; export const BASE_PARITY_INDEX = 18; export const ROOT_PARITY_INDEX = 19; @@ -80,10 +79,8 @@ export const MERGE_ROLLUP_INDEX = 21; export const BLOCK_ROOT_ROLLUP_INDEX = 22; export const BLOCK_MERGE_ROLLUP_INDEX = 23; export const ROOT_ROLLUP_INDEX = 24; +export const BLOCK_ROOT_ROLLUP_FINAL_INDEX = 25; export const FUNCTION_SELECTOR_NUM_BYTES = 4; -export const ARGS_HASH_CHUNK_LENGTH = 16; -export const ARGS_HASH_CHUNK_COUNT = 16; -export const MAX_ARGS_LENGTH = 256; export const INITIALIZATION_SLOT_SEPARATOR = 1000000000; export const INITIAL_L2_BLOCK_NUM = 1; export const BLOB_SIZE_IN_BYTES = 126976; @@ -115,18 +112,25 @@ export const DA_GAS_PER_BYTE = 16; export const FIXED_DA_GAS = 512; export const FIXED_L2_GAS = 512; export const FIXED_AVM_STARTUP_L2_GAS = 1024; +export const L2_GAS_DISTRIBUTED_STORAGE_PREMIUM = 1024; +export const L2_GAS_PER_READ_MERKLE_HASH = 30; +export const L2_GAS_PER_WRITE_MERKLE_HASH = 40; +export const L2_GAS_PER_PUBLIC_DATA_UPDATE = 2624; +export const L2_GAS_PER_NOTE_HASH = 2304; +export const L2_GAS_PER_NULLIFIER = 2624; +export const L2_GAS_PER_PUBLIC_DATA_READ = 1200; +export const L2_GAS_PER_NOTE_HASH_READ_REQUEST = 960; +export const L2_GAS_PER_NULLIFIER_READ_REQUEST = 1200; +export const L2_GAS_PER_L1_TO_L2_MSG_READ_REQUEST = 480; export const L2_GAS_PER_LOG_BYTE = 4; -export const L2_GAS_PER_NOTE_HASH = 32; -export const L2_GAS_PER_NULLIFIER = 64; -export const CANONICAL_KEY_REGISTRY_ADDRESS = - 9694109890306420370616891858093188542026876097103155811681068343994212062621n; +export const L2_GAS_PER_L2_TO_L1_MSG = 200; export const CANONICAL_AUTH_REGISTRY_ADDRESS = - 16522644890256297179255458951626875692461008240031142745359776058397274208468n; -export const DEPLOYER_CONTRACT_ADDRESS = 19310994760783330368337163480198602393920956587162708699802190083077641908361n; + 19361441716519463065948254497947932755739298943049449145365332870925554042208n; +export const DEPLOYER_CONTRACT_ADDRESS = 17119407406465801909352274670277571579675739451008438338071219340964365249977n; export const REGISTERER_CONTRACT_ADDRESS = - 2631409926445785927331173506476539962589925110142857699603561302478860342858n; -export const FEE_JUICE_ADDRESS = 10248142274714515101077825679585135641434041564851038865006795089686437446849n; -export const ROUTER_ADDRESS = 7268799613082469933251235702514160327341161584122631177360064643484764773587n; + 12405643717676802437578418009978929188439257864607100766293128479227092050857n; +export const FEE_JUICE_ADDRESS = 12096583827711775893711303288210371301779120762215263550909768879597884314839n; +export const ROUTER_ADDRESS = 13369993014609648298719593339393818582619449364029983937306132176549332172208n; export const AZTEC_ADDRESS_LENGTH = 1; export const GAS_FEES_LENGTH = 2; export const GAS_LENGTH = 2; @@ -162,29 +166,33 @@ export const NULLIFIER_LENGTH = 3; export const SCOPED_NULLIFIER_LENGTH = 4; export const PUBLIC_CALL_STACK_ITEM_COMPRESSED_LENGTH = 13; export const PRIVATE_CALL_REQUEST_LENGTH = 10; -export const PUBLIC_CALL_REQUEST_LENGTH = 14; +export const PUBLIC_CALL_REQUEST_LENGTH = 8; +export const PUBLIC_INNER_CALL_REQUEST_LENGTH = 14; export const ROLLUP_VALIDATION_REQUESTS_LENGTH = 2; export const STATE_REFERENCE_LENGTH = 8; export const TX_CONTEXT_LENGTH = 9; export const TX_REQUEST_LENGTH = 13; export const TOTAL_FEES_LENGTH = 1; export const HEADER_LENGTH = 24; -export const PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 646; +export const PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 544; export const PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 691; -export const PRIVATE_CALL_STACK_ITEM_LENGTH = 649; +export const PRIVATE_CALL_STACK_ITEM_LENGTH = 547; export const PUBLIC_CONTEXT_INPUTS_LENGTH = 42; export const AGGREGATION_OBJECT_LENGTH = 16; export const SCOPED_READ_REQUEST_LEN = 3; -export const PUBLIC_DATA_READ_LENGTH = 2; +export const PUBLIC_DATA_READ_LENGTH = 3; export const PRIVATE_VALIDATION_REQUESTS_LENGTH = 772; -export const PUBLIC_VALIDATION_REQUESTS_LENGTH = 770; +export const NUM_PUBLIC_VALIDATION_REQUEST_ARRAYS = 5; +export const PUBLIC_VALIDATION_REQUESTS_LENGTH = 834; export const PUBLIC_DATA_UPDATE_REQUEST_LENGTH = 3; export const COMBINED_ACCUMULATED_DATA_LENGTH = 610; export const COMBINED_CONSTANT_DATA_LENGTH = 43; -export const PRIVATE_ACCUMULATED_DATA_LENGTH = 1336; -export const PRIVATE_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 2167; -export const PUBLIC_ACCUMULATED_DATA_LENGTH = 1311; -export const PUBLIC_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 3885; +export const PRIVATE_ACCUMULATED_DATA_LENGTH = 1144; +export const PRIVATE_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 1969; +export const PUBLIC_ACCUMULATED_DATA_LENGTH = 1119; +export const NUM_PUBLIC_ACCUMULATED_DATA_ARRAYS = 8; +export const PUBLIC_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 3126; +export const VM_CIRCUIT_PUBLIC_INPUTS_LENGTH = 2471; export const KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 663; export const CONSTANT_ROLLUP_DATA_LENGTH = 12; export const BASE_OR_MERGE_PUBLIC_INPUTS_LENGTH = 29; @@ -205,10 +213,20 @@ export const NESTED_RECURSIVE_PROOF_LENGTH = 439; export const TUBE_PROOF_LENGTH = 439; export const VERIFICATION_KEY_LENGTH_IN_FIELDS = 128; export const AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS = 66; +export const AVM_PROOF_LENGTH_IN_FIELDS = 3822; +export const AVM_PUBLIC_COLUMN_MAX_SIZE_LOG2 = 8; +export const MEM_TAG_U1 = 1; +export const MEM_TAG_U8 = 2; +export const MEM_TAG_U16 = 3; +export const MEM_TAG_U32 = 4; +export const MEM_TAG_U64 = 5; +export const MEM_TAG_U128 = 6; +export const MEM_TAG_FF = 7; export const SENDER_SELECTOR = 0; export const ADDRESS_SELECTOR = 1; export const STORAGE_ADDRESS_SELECTOR = 1; export const FUNCTION_SELECTOR_SELECTOR = 2; +export const IS_STATIC_CALL_SELECTOR = 4; export const START_GLOBAL_VARIABLES = 29; export const CHAIN_ID_SELECTOR = 29; export const VERSION_SELECTOR = 30; @@ -232,132 +250,79 @@ export const START_EMIT_NOTE_HASH_WRITE_OFFSET = 128; export const START_EMIT_NULLIFIER_WRITE_OFFSET = 144; export const START_EMIT_L2_TO_L1_MSG_WRITE_OFFSET = 160; export const START_EMIT_UNENCRYPTED_LOG_WRITE_OFFSET = 162; -export const AVM_DEFAULT_BASE_GAS_L2 = 100; -export const AVM_DEFAULT_DYN_GAS_L2 = 0; -export const AVM_ADD_BASE_L2_GAS = 320; -export const AVM_SUB_BASE_L2_GAS = 320; -export const AVM_MUL_BASE_L2_GAS = 330; -export const AVM_DIV_BASE_L2_GAS = 430; -export const AVM_FDIV_BASE_L2_GAS = 320; -export const AVM_EQ_BASE_L2_GAS = 320; -export const AVM_LT_BASE_L2_GAS = 640; -export const AVM_LTE_BASE_L2_GAS = 640; -export const AVM_AND_BASE_L2_GAS = 330; -export const AVM_OR_BASE_L2_GAS = 330; -export const AVM_XOR_BASE_L2_GAS = 320; -export const AVM_NOT_BASE_L2_GAS = 270; -export const AVM_SHL_BASE_L2_GAS = 320; -export const AVM_SHR_BASE_L2_GAS = 320; -export const AVM_CAST_BASE_L2_GAS = 300; -export const AVM_ADDRESS_BASE_L2_GAS = 200; -export const AVM_STORAGEADDRESS_BASE_L2_GAS = 200; -export const AVM_SENDER_BASE_L2_GAS = 200; -export const AVM_FUNCTIONSELECTOR_BASE_L2_GAS = 200; -export const AVM_TRANSACTIONFEE_BASE_L2_GAS = 200; -export const AVM_CHAINID_BASE_L2_GAS = 200; -export const AVM_VERSION_BASE_L2_GAS = 200; -export const AVM_BLOCKNUMBER_BASE_L2_GAS = 200; -export const AVM_TIMESTAMP_BASE_L2_GAS = 200; -export const AVM_FEEPERL2GAS_BASE_L2_GAS = 200; -export const AVM_FEEPERDAGAS_BASE_L2_GAS = 200; -export const AVM_CALLDATACOPY_BASE_L2_GAS = 290; -export const AVM_L2GASLEFT_BASE_L2_GAS = 180; -export const AVM_DAGASLEFT_BASE_L2_GAS = 180; -export const AVM_JUMP_BASE_L2_GAS = 120; -export const AVM_JUMPI_BASE_L2_GAS = 180; -export const AVM_INTERNALCALL_BASE_L2_GAS = 180; -export const AVM_INTERNALRETURN_BASE_L2_GAS = 180; -export const AVM_SET_BASE_L2_GAS = 180; -export const AVM_MOV_BASE_L2_GAS = 230; -export const AVM_CMOV_BASE_L2_GAS = 340; -export const AVM_SLOAD_BASE_L2_GAS = 180; -export const AVM_SSTORE_BASE_L2_GAS = 180; -export const AVM_NOTEHASHEXISTS_BASE_L2_GAS = 260; -export const AVM_EMITNOTEHASH_BASE_L2_GAS = 260; -export const AVM_NULLIFIEREXISTS_BASE_L2_GAS = 260; -export const AVM_EMITNULLIFIER_BASE_L2_GAS = 260; -export const AVM_L1TOL2MSGEXISTS_BASE_L2_GAS = 260; -export const AVM_GETCONTRACTINSTANCE_BASE_L2_GAS = 480; -export const AVM_EMITUNENCRYPTEDLOG_BASE_L2_GAS = 180; -export const AVM_SENDL2TOL1MSG_BASE_L2_GAS = 260; -export const AVM_CALL_BASE_L2_GAS = 450; -export const AVM_STATICCALL_BASE_L2_GAS = 450; -export const AVM_DELEGATECALL_BASE_L2_GAS = 0; -export const AVM_RETURN_BASE_L2_GAS = 140; -export const AVM_REVERT_BASE_L2_GAS = 140; -export const AVM_DEBUGLOG_BASE_L2_GAS = 100; +export const AVM_ADD_BASE_L2_GAS = 32; +export const AVM_SUB_BASE_L2_GAS = 32; +export const AVM_MUL_BASE_L2_GAS = 33; +export const AVM_DIV_BASE_L2_GAS = 43; +export const AVM_FDIV_BASE_L2_GAS = 32; +export const AVM_EQ_BASE_L2_GAS = 32; +export const AVM_LT_BASE_L2_GAS = 64; +export const AVM_LTE_BASE_L2_GAS = 64; +export const AVM_AND_BASE_L2_GAS = 33; +export const AVM_OR_BASE_L2_GAS = 33; +export const AVM_XOR_BASE_L2_GAS = 33; +export const AVM_NOT_BASE_L2_GAS = 27; +export const AVM_SHL_BASE_L2_GAS = 32; +export const AVM_SHR_BASE_L2_GAS = 32; +export const AVM_CAST_BASE_L2_GAS = 30; +export const AVM_GETENVVAR_BASE_L2_GAS = 20; +export const AVM_CALLDATACOPY_BASE_L2_GAS = 29; +export const AVM_JUMP_BASE_L2_GAS = 12; +export const AVM_JUMPI_BASE_L2_GAS = 18; +export const AVM_INTERNALCALL_BASE_L2_GAS = 18; +export const AVM_INTERNALRETURN_BASE_L2_GAS = 18; +export const AVM_SET_BASE_L2_GAS = 18; +export const AVM_MOV_BASE_L2_GAS = 23; +export const AVM_CMOV_BASE_L2_GAS = 34; +export const AVM_SLOAD_BASE_L2_GAS = 1218; +export const AVM_SSTORE_BASE_L2_GAS = 2642; +export const AVM_NOTEHASHEXISTS_BASE_L2_GAS = 986; +export const AVM_EMITNOTEHASH_BASE_L2_GAS = 2330; +export const AVM_NULLIFIEREXISTS_BASE_L2_GAS = 1226; +export const AVM_EMITNULLIFIER_BASE_L2_GAS = 2650; +export const AVM_L1TOL2MSGEXISTS_BASE_L2_GAS = 506; +export const AVM_GETCONTRACTINSTANCE_BASE_L2_GAS = 1248; +export const AVM_EMITUNENCRYPTEDLOG_BASE_L2_GAS = 18; +export const AVM_SENDL2TOL1MSG_BASE_L2_GAS = 226; +export const AVM_CALL_BASE_L2_GAS = 2445; +export const AVM_STATICCALL_BASE_L2_GAS = 2445; +export const AVM_DELEGATECALL_BASE_L2_GAS = 2445; +export const AVM_RETURN_BASE_L2_GAS = 28; +export const AVM_REVERT_BASE_L2_GAS = 28; +export const AVM_DEBUGLOG_BASE_L2_GAS = 10; export const AVM_KECCAK_BASE_L2_GAS = 3000; -export const AVM_POSEIDON2_BASE_L2_GAS = 670; -export const AVM_SHA256_BASE_L2_GAS = 3000; -export const AVM_PEDERSEN_BASE_L2_GAS = 3000; -export const AVM_ECADD_BASE_L2_GAS = 900; -export const AVM_MSM_BASE_L2_GAS = 900; -export const AVM_PEDERSENCOMMITMENT_BASE_L2_GAS = 3000; -export const AVM_TORADIXLE_BASE_L2_GAS = 200; -export const AVM_SHA256COMPRESSION_BASE_L2_GAS = 3000; -export const AVM_KECCAKF1600_BASE_L2_GAS = 3000; -export const AVM_ADD_DYN_L2_GAS = 0; -export const AVM_SUB_DYN_L2_GAS = 0; -export const AVM_MUL_DYN_L2_GAS = 0; -export const AVM_DIV_DYN_L2_GAS = 0; -export const AVM_FDIV_DYN_L2_GAS = 0; -export const AVM_EQ_DYN_L2_GAS = 0; -export const AVM_LT_DYN_L2_GAS = 0; -export const AVM_LTE_DYN_L2_GAS = 0; -export const AVM_AND_DYN_L2_GAS = 0; -export const AVM_OR_DYN_L2_GAS = 0; -export const AVM_XOR_DYN_L2_GAS = 0; -export const AVM_NOT_DYN_L2_GAS = 0; -export const AVM_SHL_DYN_L2_GAS = 0; -export const AVM_SHR_DYN_L2_GAS = 0; -export const AVM_CAST_DYN_L2_GAS = 0; -export const AVM_ADDRESS_DYN_L2_GAS = 0; -export const AVM_STORAGEADDRESS_DYN_L2_GAS = 0; -export const AVM_SENDER_DYN_L2_GAS = 0; -export const AVM_FUNCTIONSELECTOR_DYN_L2_GAS = 0; -export const AVM_TRANSACTIONFEE_DYN_L2_GAS = 0; -export const AVM_CHAINID_DYN_L2_GAS = 0; -export const AVM_VERSION_DYN_L2_GAS = 0; -export const AVM_BLOCKNUMBER_DYN_L2_GAS = 0; -export const AVM_TIMESTAMP_DYN_L2_GAS = 0; -export const AVM_FEEPERL2GAS_DYN_L2_GAS = 0; -export const AVM_FEEPERDAGAS_DYN_L2_GAS = 0; -export const AVM_CALLDATACOPY_DYN_L2_GAS = 50; -export const AVM_L2GASLEFT_DYN_L2_GAS = 0; -export const AVM_DAGASLEFT_DYN_L2_GAS = 0; -export const AVM_JUMP_DYN_L2_GAS = 0; -export const AVM_JUMPI_DYN_L2_GAS = 0; -export const AVM_INTERNALCALL_DYN_L2_GAS = 0; -export const AVM_INTERNALRETURN_DYN_L2_GAS = 0; -export const AVM_SET_DYN_L2_GAS = 0; -export const AVM_MOV_DYN_L2_GAS = 0; -export const AVM_CMOV_DYN_L2_GAS = 0; -export const AVM_SLOAD_DYN_L2_GAS = 180; -export const AVM_SSTORE_DYN_L2_GAS = 180; -export const AVM_NOTEHASHEXISTS_DYN_L2_GAS = 0; -export const AVM_EMITNOTEHASH_DYN_L2_GAS = 0; -export const AVM_NULLIFIEREXISTS_DYN_L2_GAS = 0; -export const AVM_EMITNULLIFIER_DYN_L2_GAS = 0; -export const AVM_L1TOL2MSGEXISTS_DYN_L2_GAS = 0; -export const AVM_GETCONTRACTINSTANCE_DYN_L2_GAS = 0; -export const AVM_EMITUNENCRYPTEDLOG_DYN_L2_GAS = 180; -export const AVM_SENDL2TOL1MSG_DYN_L2_GAS = 0; -export const AVM_CALL_DYN_L2_GAS = 50; -export const AVM_STATICCALL_DYN_L2_GAS = 50; -export const AVM_DELEGATECALL_DYN_L2_GAS = 50; -export const AVM_RETURN_DYN_L2_GAS = 50; -export const AVM_REVERT_DYN_L2_GAS = 50; -export const AVM_DEBUGLOG_DYN_L2_GAS = 0; -export const AVM_KECCAK_DYN_L2_GAS = 0; -export const AVM_POSEIDON2_DYN_L2_GAS = 0; -export const AVM_SHA256_DYN_L2_GAS = 0; -export const AVM_PEDERSEN_DYN_L2_GAS = 0; -export const AVM_ECADD_DYN_L2_GAS = 0; -export const AVM_MSM_DYN_L2_GAS = 0; -export const AVM_PEDERSENCOMMITMENT_DYN_L2_GAS = 0; -export const AVM_TORADIXLE_DYN_L2_GAS = 200; -export const AVM_SHA256COMPRESSION_DYN_L2_GAS = 0; -export const AVM_KECCAKF1600_DYN_L2_GAS = 0; +export const AVM_POSEIDON2_BASE_L2_GAS = 78; +export const AVM_SHA256_BASE_L2_GAS = 2610; +export const AVM_PEDERSEN_BASE_L2_GAS = 1000; +export const AVM_ECADD_BASE_L2_GAS = 62; +export const AVM_MSM_BASE_L2_GAS = 1000; +export const AVM_PEDERSENCOMMITMENT_BASE_L2_GAS = 1000; +export const AVM_TORADIXLE_BASE_L2_GAS = 46; +export const AVM_SHA256COMPRESSION_BASE_L2_GAS = 261; +export const AVM_KECCAKF1600_BASE_L2_GAS = 300; +export const AVM_CALLDATACOPY_DYN_L2_GAS = 6; +export const AVM_EMITUNENCRYPTEDLOG_DYN_L2_GAS = 146; +export const AVM_CALL_DYN_L2_GAS = 4; +export const AVM_STATICCALL_DYN_L2_GAS = 4; +export const AVM_DELEGATECALL_DYN_L2_GAS = 4; +export const AVM_RETURN_DYN_L2_GAS = 6; +export const AVM_REVERT_DYN_L2_GAS = 6; +export const AVM_KECCAK_DYN_L2_GAS = 100; +export const AVM_SHA256_DYN_L2_GAS = 100; +export const AVM_PEDERSEN_DYN_L2_GAS = 100; +export const AVM_PEDERSENCOMMITMENT_DYN_L2_GAS = 100; +export const AVM_MSM_DYN_L2_GAS = 100; +export const AVM_TORADIXLE_DYN_L2_GAS = 20; +export const AVM_SSTORE_BASE_DA_GAS = 512; +export const AVM_EMITNOTEHASH_BASE_DA_GAS = 512; +export const AVM_EMITNULLIFIER_BASE_DA_GAS = 512; +export const AVM_SENDL2TOL1MSG_BASE_DA_GAS = 512; +export const AVM_EMITUNENCRYPTEDLOG_DYN_DA_GAS = 512; +export const PROOF_TYPE_PLONK = 0; +export const PROOF_TYPE_HONK = 1; +export const PROOF_TYPE_OINK = 2; +export const PROOF_TYPE_PG = 3; +export const PROOF_TYPE_AVM = 4; export enum GeneratorIndex { NOTE_HASH = 1, NOTE_HASH_NONCE = 2, diff --git a/yarn-project/circuits.js/src/contract/__snapshots__/contract_address.test.ts.snap b/yarn-project/circuits.js/src/contract/__snapshots__/contract_address.test.ts.snap index b0374a11e52..17a995704b8 100644 --- a/yarn-project/circuits.js/src/contract/__snapshots__/contract_address.test.ts.snap +++ b/yarn-project/circuits.js/src/contract/__snapshots__/contract_address.test.ts.snap @@ -2,7 +2,7 @@ exports[`ContractAddress computeContractAddressFromInstance 1`] = `"0x0ea56faa48431d99cc2d073463d1b718c11174bb551a3d1d6f296b0096089dbb"`; -exports[`ContractAddress computeInitializationHash 1`] = `Fr<0x2f11768c825fac132c632372d7c6d657fd471a9f9db05a153c6927a24863ec53>`; +exports[`ContractAddress computeInitializationHash 1`] = `Fr<0x153329c6098512a53cb449057bb5adade93e360575b71192b7b304ace35b2b6b>`; exports[`ContractAddress computePartialAddress 1`] = `Fr<0x2521255ebd14e8e3e7cd1e8a27d26a902ee9e74905b711950d580e826ba9010d>`; diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.ts b/yarn-project/circuits.js/src/contract/artifact_hash.ts index 05fb484ca13..f5c8bee8ded 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.ts @@ -68,7 +68,6 @@ export function computeArtifactMetadataHash(artifact: ContractArtifact) { const exceptions: string[] = [ 'AuthRegistry', - 'KeyRegistry', 'FeeJuice', 'ContractInstanceDeployer', 'ContractClassRegisterer', diff --git a/yarn-project/circuits.js/src/hash/__snapshots__/hash.test.ts.snap b/yarn-project/circuits.js/src/hash/__snapshots__/hash.test.ts.snap index 4f49be9f7aa..397754cb6ef 100644 --- a/yarn-project/circuits.js/src/hash/__snapshots__/hash.test.ts.snap +++ b/yarn-project/circuits.js/src/hash/__snapshots__/hash.test.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`hash Var args hash matches noir 1`] = `Fr<0x1cce4dbf69f14c44865919991ee1057922e34d7310ba237d71759aa422621ca9>`; +exports[`hash Var args hash matches noir 1`] = `Fr<0x19b0d74feb06ebde19edd85a28986c97063e84b3b351a8b666c7cac963ce655f>`; exports[`hash compute secret message hash 1`] = `Fr<0x211b950e538ee911389e441942d6646d13d725957a49d06500ae9bb673b0fbc2>`; @@ -18,6 +18,6 @@ exports[`hash computes unique note hash 1`] = `Fr<0x2f9b80d22188c5383a577596538f exports[`hash hashes empty function args 1`] = `Fr<0x0000000000000000000000000000000000000000000000000000000000000000>`; -exports[`hash hashes function args 1`] = `Fr<0x2cb19d7f1c57660c695e279c0163042f20dc89e4ae7bed9ada08b74790df3204>`; +exports[`hash hashes function args 1`] = `Fr<0x08fc05646caf2d63a8f3b424351783a521edaf28da0933d7c5b78a27e7497dac>`; -exports[`hash hashes many function args 1`] = `Fr<0x0f987cfa046685fd829f2cab0cc5e078941719d229df8292924178c77a6f886e>`; +exports[`hash hashes many function args 1`] = `Fr<0x03933d5a59efde5af91c47a93e6c4965f0506d160f76c701b2de1503d74c7775>`; diff --git a/yarn-project/circuits.js/src/hash/hash.test.ts b/yarn-project/circuits.js/src/hash/hash.test.ts index 6a9fb665d1e..fc1f0bc9018 100644 --- a/yarn-project/circuits.js/src/hash/hash.test.ts +++ b/yarn-project/circuits.js/src/hash/hash.test.ts @@ -1,7 +1,7 @@ import { times } from '@aztec/foundation/collection'; import { setupCustomSnapshotSerializers, updateInlineTestData } from '@aztec/foundation/testing'; -import { AztecAddress, EthAddress, Fr, L2ToL1Message, MAX_ARGS_LENGTH, ScopedL2ToL1Message } from '../index.js'; +import { AztecAddress, EthAddress, Fr, L2ToL1Message, ScopedL2ToL1Message } from '../index.js'; import { makeAztecAddress } from '../tests/factories.js'; import { computeNoteHashNonce, @@ -83,7 +83,7 @@ describe('hash', () => { }); it('Var args hash matches noir', () => { - const args = times(MAX_ARGS_LENGTH, i => new Fr(i)); + const args = times(100, i => new Fr(i)); const res = computeVarArgsHash(args); expect(res).toMatchSnapshot(); diff --git a/yarn-project/circuits.js/src/hash/hash.ts b/yarn-project/circuits.js/src/hash/hash.ts index 6226ee72183..6083676209d 100644 --- a/yarn-project/circuits.js/src/hash/hash.ts +++ b/yarn-project/circuits.js/src/hash/hash.ts @@ -1,12 +1,9 @@ import { type AztecAddress } from '@aztec/foundation/aztec-address'; -import { padArrayEnd } from '@aztec/foundation/collection'; import { pedersenHashBuffer, poseidon2HashWithSeparator, sha256Trunc } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; import { numToUInt8, numToUInt16BE, numToUInt32BE } from '@aztec/foundation/serialize'; -import chunk from 'lodash.chunk'; - -import { ARGS_HASH_CHUNK_COUNT, ARGS_HASH_CHUNK_LENGTH, GeneratorIndex, MAX_ARGS_LENGTH } from '../constants.gen.js'; +import { GeneratorIndex } from '../constants.gen.js'; import { type ScopedL2ToL1Message, VerificationKey } from '../structs/index.js'; /** @@ -103,22 +100,8 @@ export function computeVarArgsHash(args: Fr[]) { if (args.length === 0) { return Fr.ZERO; } - if (args.length > MAX_ARGS_LENGTH) { - throw new Error(`Hashing ${args.length} args exceeds max of ${MAX_ARGS_LENGTH}`); - } - - let chunksHashes = chunk(args, ARGS_HASH_CHUNK_LENGTH).map((c: Fr[]) => { - if (c.length < ARGS_HASH_CHUNK_LENGTH) { - c = padArrayEnd(c, Fr.ZERO, ARGS_HASH_CHUNK_LENGTH); - } - return poseidon2HashWithSeparator(c, GeneratorIndex.FUNCTION_ARGS); - }); - - if (chunksHashes.length < ARGS_HASH_CHUNK_COUNT) { - chunksHashes = padArrayEnd(chunksHashes, Fr.ZERO, ARGS_HASH_CHUNK_COUNT); - } - return poseidon2HashWithSeparator(chunksHashes, GeneratorIndex.FUNCTION_ARGS); + return poseidon2HashWithSeparator(args, GeneratorIndex.FUNCTION_ARGS); } /** diff --git a/yarn-project/circuits.js/src/hints/build_nullifier_non_existent_read_request_hints.ts b/yarn-project/circuits.js/src/hints/build_nullifier_non_existent_read_request_hints.ts index d217864333d..ea142b12ccd 100644 --- a/yarn-project/circuits.js/src/hints/build_nullifier_non_existent_read_request_hints.ts +++ b/yarn-project/circuits.js/src/hints/build_nullifier_non_existent_read_request_hints.ts @@ -1,7 +1,6 @@ import { padArrayEnd } from '@aztec/foundation/collection'; import { type Fr } from '@aztec/foundation/fields'; import { type Tuple } from '@aztec/foundation/serialize'; -import { type IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; import { MAX_NULLIFIERS_PER_TX, @@ -9,7 +8,7 @@ import { type NULLIFIER_TREE_HEIGHT, } from '../constants.gen.js'; import { siloNullifier } from '../hash/index.js'; -import { Nullifier } from '../structs/index.js'; +import { Nullifier, type NullifierLeafPreimage } from '../structs/index.js'; import { type MembershipWitness } from '../structs/membership_witness.js'; import { NullifierNonExistentReadRequestHintsBuilder } from '../structs/non_existent_read_request_hints.js'; import { type ScopedReadRequest } from '../structs/read_request.js'; @@ -17,7 +16,7 @@ import { countAccumulatedItems } from '../utils/index.js'; interface NullifierMembershipWitnessWithPreimage { membershipWitness: MembershipWitness; - leafPreimage: IndexedTreeLeafPreimage; + leafPreimage: NullifierLeafPreimage; } interface SortedResult { diff --git a/yarn-project/circuits.js/src/merkle/merkle_tree.ts b/yarn-project/circuits.js/src/merkle/merkle_tree.ts index 53d516960d5..aa7ea221337 100644 --- a/yarn-project/circuits.js/src/merkle/merkle_tree.ts +++ b/yarn-project/circuits.js/src/merkle/merkle_tree.ts @@ -47,7 +47,7 @@ export class MerkleTree { } /** Returns a nice string representation of the tree, useful for debugging purposes. */ - public drawTree() { + public drawTree(elemSize = 8) { const levels: string[][] = []; const tree = this.nodes; const maxRowSize = Math.ceil(tree.length / 2); @@ -58,7 +58,7 @@ export class MerkleTree { levels.push( tree .slice(rowOffset, rowOffset + rowSize) - .map(n => n.toString('hex').slice(0, 8) + ' '.repeat((paddingSize - 1) * 9)), + .map(n => n.toString('hex').slice(0, elemSize) + ' '.repeat((paddingSize - 1) * (elemSize + 1))), ); rowOffset += rowSize; paddingSize <<= 1; diff --git a/yarn-project/circuits.js/src/scripts/constants.in.ts b/yarn-project/circuits.js/src/scripts/constants.in.ts index 819f7da934f..bf922fa24fa 100644 --- a/yarn-project/circuits.js/src/scripts/constants.in.ts +++ b/yarn-project/circuits.js/src/scripts/constants.in.ts @@ -31,7 +31,7 @@ const CPP_CONSTANTS = [ 'CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH', 'MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL', 'CONTRACT_STORAGE_READ_LENGTH', - 'PUBLIC_CALL_REQUEST_LENGTH', + 'PUBLIC_INNER_CALL_REQUEST_LENGTH', 'MAX_PUBLIC_DATA_READS_PER_CALL', 'MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL', 'NOTE_HASH_LENGTH', @@ -66,9 +66,17 @@ const CPP_CONSTANTS = [ 'TIMESTAMP_SELECTOR', 'FEE_PER_DA_GAS_SELECTOR', 'FEE_PER_L2_GAS_SELECTOR', + 'IS_STATIC_CALL_SELECTOR', 'END_GLOBAL_VARIABLES', 'START_SIDE_EFFECT_COUNTER', 'TRANSACTION_FEE_SELECTOR', + 'MEM_TAG_U1', + 'MEM_TAG_U8', + 'MEM_TAG_U16', + 'MEM_TAG_U32', + 'MEM_TAG_U64', + 'MEM_TAG_U128', + 'MEM_TAG_FF', ]; const PIL_CONSTANTS = [ @@ -104,9 +112,17 @@ const PIL_CONSTANTS = [ 'TIMESTAMP_SELECTOR', 'FEE_PER_DA_GAS_SELECTOR', 'FEE_PER_L2_GAS_SELECTOR', + 'IS_STATIC_CALL_SELECTOR', 'END_GLOBAL_VARIABLES', 'START_SIDE_EFFECT_COUNTER', 'TRANSACTION_FEE_SELECTOR', + 'MEM_TAG_U1', + 'MEM_TAG_U8', + 'MEM_TAG_U16', + 'MEM_TAG_U32', + 'MEM_TAG_U64', + 'MEM_TAG_U128', + 'MEM_TAG_FF', ]; /** diff --git a/yarn-project/circuits.js/src/structs/gas_settings.ts b/yarn-project/circuits.js/src/structs/gas_settings.ts index 7ef113055e9..8c2b6860efc 100644 --- a/yarn-project/circuits.js/src/structs/gas_settings.ts +++ b/yarn-project/circuits.js/src/structs/gas_settings.ts @@ -1,3 +1,4 @@ +import { compact } from '@aztec/foundation/collection'; import { Fr } from '@aztec/foundation/fields'; import { BufferReader, FieldReader, serializeToBuffer, serializeToFields } from '@aztec/foundation/serialize'; import { type FieldsOf } from '@aztec/foundation/types'; @@ -66,13 +67,13 @@ export class GasSettings { } /** Default gas settings to use when user has not provided them. */ - static default(overrides?: Partial>) { + static default(overrides: Partial> = {}) { return GasSettings.from({ gasLimits: { l2Gas: DEFAULT_GAS_LIMIT, daGas: DEFAULT_GAS_LIMIT }, teardownGasLimits: { l2Gas: DEFAULT_TEARDOWN_GAS_LIMIT, daGas: DEFAULT_TEARDOWN_GAS_LIMIT }, maxFeesPerGas: { feePerL2Gas: new Fr(DEFAULT_MAX_FEE_PER_GAS), feePerDaGas: new Fr(DEFAULT_MAX_FEE_PER_GAS) }, inclusionFee: new Fr(DEFAULT_INCLUSION_FEE), - ...overrides, + ...compact(overrides), }); } diff --git a/yarn-project/circuits.js/src/structs/global_variables.ts b/yarn-project/circuits.js/src/structs/global_variables.ts index 50e88a61592..fbf56755230 100644 --- a/yarn-project/circuits.js/src/structs/global_variables.ts +++ b/yarn-project/circuits.js/src/structs/global_variables.ts @@ -4,6 +4,8 @@ import { Fr } from '@aztec/foundation/fields'; import { BufferReader, FieldReader, serializeToBuffer, serializeToFields } from '@aztec/foundation/serialize'; import { type FieldsOf } from '@aztec/foundation/types'; +import { inspect } from 'util'; + import { GLOBAL_VARIABLES_LENGTH } from '../constants.gen.js'; import { GasFees } from './gas_fees.js'; @@ -150,4 +152,10 @@ export class GlobalVariables { this.gasFees.isEmpty() ); } + + [inspect.custom]() { + return `GlobalVariables { chainId: ${this.chainId.toString()}, version: ${this.version.toString()}, blockNumber: ${this.blockNumber.toString()}, slotNumber: ${this.slotNumber.toString()}, timestamp: ${this.timestamp.toString()}, coinbase: ${this.coinbase.toString()}, feeRecipient: ${this.feeRecipient.toString()}, gasFees: ${inspect( + this.gasFees, + )} }`; + } } diff --git a/yarn-project/circuits.js/src/structs/header.ts b/yarn-project/circuits.js/src/structs/header.ts index dbdb0988198..0b06dc7cfd3 100644 --- a/yarn-project/circuits.js/src/structs/header.ts +++ b/yarn-project/circuits.js/src/structs/header.ts @@ -3,6 +3,8 @@ import { Fr } from '@aztec/foundation/fields'; import { BufferReader, FieldReader, serializeToBuffer, serializeToFields } from '@aztec/foundation/serialize'; import { type FieldsOf } from '@aztec/foundation/types'; +import { inspect } from 'util'; + import { GeneratorIndex, HEADER_LENGTH } from '../constants.gen.js'; import { ContentCommitment } from './content_commitment.js'; import { GlobalVariables } from './global_variables.js'; @@ -125,4 +127,20 @@ export class Header { hash(): Fr { return poseidon2HashWithSeparator(this.toFields(), GeneratorIndex.BLOCK_HASH); } + + [inspect.custom]() { + return `Header { + lastArchive: ${inspect(this.lastArchive)}, + contentCommitment.numTx: ${this.contentCommitment.numTxs.toNumber()}, + contentCommitment.txsEffectsHash: ${this.contentCommitment.txsEffectsHash.toString('hex')}, + contentCommitment.inHash: ${this.contentCommitment.inHash.toString('hex')}, + contentCommitment.outHash: ${this.contentCommitment.outHash.toString('hex')}, + state.l1ToL2MessageTree: ${inspect(this.state.l1ToL2MessageTree)}, + state.noteHashTree: ${inspect(this.state.partial.noteHashTree)}, + state.nullifierTree: ${inspect(this.state.partial.nullifierTree)}, + state.publicDataTree: ${inspect(this.state.partial.publicDataTree)}, + globalVariables: ${inspect(this.globalVariables)}, + totalFees: ${this.totalFees}, +}`; + } } diff --git a/yarn-project/circuits.js/src/structs/index.ts b/yarn-project/circuits.js/src/structs/index.ts index fdc31489a7a..0ff816c36cd 100644 --- a/yarn-project/circuits.js/src/structs/index.ts +++ b/yarn-project/circuits.js/src/structs/index.ts @@ -15,6 +15,7 @@ export * from './global_variables.js'; export * from './header.js'; export * from './kernel/combined_accumulated_data.js'; export * from './kernel/combined_constant_data.js'; +export * from './kernel/enqueued_call_data.js'; export * from './kernel/private_kernel_empty_inputs.js'; export * from './kernel/kernel_circuit_public_inputs.js'; export * from './kernel/kernel_data.js'; @@ -34,7 +35,10 @@ export * from './kernel/public_call_data.js'; export * from './kernel/public_kernel_circuit_private_inputs.js'; export * from './kernel/public_kernel_circuit_public_inputs.js'; export * from './kernel/public_kernel_data.js'; +export * from './kernel/public_kernel_inner_data.js'; +export * from './kernel/public_kernel_inner_circuit_private_inputs.js'; export * from './kernel/public_kernel_tail_circuit_private_inputs.js'; +export * from './kernel/vm_circuit_public_inputs.js'; export * from './key_validation_request.js'; export * from './key_validation_request_and_generator.js'; export * from './l2_to_l1_message.js'; @@ -63,6 +67,7 @@ export * from './public_data_hint.js'; export * from './public_data_leaf_hint.js'; export * from './public_data_read.js'; export * from './public_data_update_request.js'; +export * from './public_inner_call_request.js'; export * from './public_validation_requests.js'; export * from './read_request.js'; export * from './read_request_hints/index.js'; diff --git a/yarn-project/circuits.js/src/structs/kernel/enqueued_call_data.ts b/yarn-project/circuits.js/src/structs/kernel/enqueued_call_data.ts new file mode 100644 index 00000000000..86a500d2bc1 --- /dev/null +++ b/yarn-project/circuits.js/src/structs/kernel/enqueued_call_data.ts @@ -0,0 +1,20 @@ +import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; + +import { Proof } from '../proof.js'; +import { VMCircuitPublicInputs } from './vm_circuit_public_inputs.js'; + +/** + * Public calldata assembled from the kernel execution result and proof. + */ +export class EnqueuedCallData { + constructor(public readonly data: VMCircuitPublicInputs, public readonly proof: Proof) {} + + toBuffer() { + return serializeToBuffer(this.data, this.proof); + } + + static fromBuffer(buffer: BufferReader | Buffer) { + const reader = BufferReader.asReader(buffer); + return new EnqueuedCallData(reader.readObject(VMCircuitPublicInputs), reader.readObject(Proof)); + } +} diff --git a/yarn-project/circuits.js/src/structs/kernel/private_kernel_tail_circuit_public_inputs.ts b/yarn-project/circuits.js/src/structs/kernel/private_kernel_tail_circuit_public_inputs.ts index b804341e44d..0185cc3d377 100644 --- a/yarn-project/circuits.js/src/structs/kernel/private_kernel_tail_circuit_public_inputs.ts +++ b/yarn-project/circuits.js/src/structs/kernel/private_kernel_tail_circuit_public_inputs.ts @@ -1,8 +1,6 @@ import { AztecAddress } from '@aztec/foundation/aztec-address'; -import { padArrayEnd } from '@aztec/foundation/collection'; import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; -import { MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX } from '../../constants.gen.js'; import { countAccumulatedItems, mergeAccumulatedData } from '../../utils/index.js'; import { PartialStateReference } from '../partial_state_reference.js'; import { PublicCallRequest } from '../public_call_request.js'; @@ -159,17 +157,14 @@ export class PrivateKernelTailCircuitPublicInputs { throw new Error('Private tail public inputs is not for public circuit.'); } return new PublicKernelCircuitPublicInputs( + this.constants, this.forPublic.validationRequests, this.forPublic.endNonRevertibleData, this.forPublic.end, - this.constants, - this.revertCode, - padArrayEnd( - [this.forPublic.publicTeardownCallRequest], - PublicCallRequest.empty(), - MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, - ), + 0, // endSideEffectCounter + this.forPublic.publicTeardownCallRequest, this.feePayer, + this.revertCode, ); } diff --git a/yarn-project/circuits.js/src/structs/kernel/public_accumulated_data.ts b/yarn-project/circuits.js/src/structs/kernel/public_accumulated_data.ts index e81eb230b00..1dd6f2beb56 100644 --- a/yarn-project/circuits.js/src/structs/kernel/public_accumulated_data.ts +++ b/yarn-project/circuits.js/src/structs/kernel/public_accumulated_data.ts @@ -14,7 +14,9 @@ import { MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MAX_UNENCRYPTED_LOGS_PER_TX, + NUM_PUBLIC_ACCUMULATED_DATA_ARRAYS, } from '../../constants.gen.js'; +import { countAccumulatedItems } from '../../utils/index.js'; import { Gas } from '../gas.js'; import { ScopedL2ToL1Message } from '../l2_to_l1_message.js'; import { LogHash, ScopedLogHash } from '../log_hash.js'; @@ -211,3 +213,109 @@ export class PublicAccumulatedData { ); } } + +export class PublicAccumulatedDataArrayLengths { + constructor( + public readonly noteHashes: number, + public readonly nullifiers: number, + public readonly l2ToL1Msgs: number, + public readonly noteEncryptedLogsHashes: number, + public readonly encryptedLogsHashes: number, + public readonly unencryptedLogsHashes: number, + public readonly publicDataUpdateRequests: number, + public readonly publicCallStack: number, + ) {} + + static new(data: PublicAccumulatedData) { + return new PublicAccumulatedDataArrayLengths( + countAccumulatedItems(data.noteHashes), + countAccumulatedItems(data.nullifiers), + countAccumulatedItems(data.l2ToL1Msgs), + countAccumulatedItems(data.noteEncryptedLogsHashes), + countAccumulatedItems(data.encryptedLogsHashes), + countAccumulatedItems(data.unencryptedLogsHashes), + countAccumulatedItems(data.publicDataUpdateRequests), + countAccumulatedItems(data.publicCallStack), + ); + } + + getSize() { + return NUM_PUBLIC_ACCUMULATED_DATA_ARRAYS; + } + + toBuffer() { + return serializeToBuffer( + this.noteHashes, + this.nullifiers, + this.l2ToL1Msgs, + this.noteEncryptedLogsHashes, + this.encryptedLogsHashes, + this.unencryptedLogsHashes, + this.publicDataUpdateRequests, + this.publicCallStack, + ); + } + + toString() { + return this.toBuffer().toString('hex'); + } + + isEmpty(): boolean { + return ( + this.noteHashes == 0 && + this.nullifiers == 0 && + this.l2ToL1Msgs == 0 && + this.noteEncryptedLogsHashes == 0 && + this.encryptedLogsHashes == 0 && + this.unencryptedLogsHashes == 0 && + this.publicDataUpdateRequests == 0 && + this.publicCallStack == 0 + ); + } + + /** + * Deserializes from a buffer or reader, corresponding to a write in cpp. + * @param buffer - Buffer or reader to read from. + * @returns Deserialized object. + */ + static fromBuffer(buffer: Buffer | BufferReader) { + const reader = BufferReader.asReader(buffer); + return new this( + reader.readNumber(), + reader.readNumber(), + reader.readNumber(), + reader.readNumber(), + reader.readNumber(), + reader.readNumber(), + reader.readNumber(), + reader.readNumber(), + ); + } + + static fromFields(fields: Fr[] | FieldReader) { + const reader = FieldReader.asReader(fields); + return new this( + reader.readU32(), + reader.readU32(), + reader.readU32(), + reader.readU32(), + reader.readU32(), + reader.readU32(), + reader.readU32(), + reader.readU32(), + ); + } + + /** + * Deserializes from a string, corresponding to a write in cpp. + * @param str - String to read from. + * @returns Deserialized object. + */ + static fromString(str: string) { + return this.fromBuffer(Buffer.from(str, 'hex')); + } + + static empty() { + return new this(0, 0, 0, 0, 0, 0, 0, 0); + } +} diff --git a/yarn-project/circuits.js/src/structs/kernel/public_kernel_circuit_private_inputs.ts b/yarn-project/circuits.js/src/structs/kernel/public_kernel_circuit_private_inputs.ts index 190593832db..8d6cf987007 100644 --- a/yarn-project/circuits.js/src/structs/kernel/public_kernel_circuit_private_inputs.ts +++ b/yarn-project/circuits.js/src/structs/kernel/public_kernel_circuit_private_inputs.ts @@ -1,6 +1,6 @@ import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; -import { PublicCallData } from './public_call_data.js'; +import { EnqueuedCallData } from './enqueued_call_data.js'; import { PublicKernelData } from './public_kernel_data.js'; /** @@ -15,7 +15,7 @@ export class PublicKernelCircuitPrivateInputs { /** * Public calldata assembled from the execution result and proof. */ - public readonly publicCall: PublicCallData, + public readonly enqueuedCall: EnqueuedCallData, ) {} /** @@ -23,7 +23,7 @@ export class PublicKernelCircuitPrivateInputs { * @returns - Buffer representation of the object. */ toBuffer() { - return serializeToBuffer(this.previousKernel, this.publicCall); + return serializeToBuffer(this.previousKernel, this.enqueuedCall); } /** @@ -42,8 +42,8 @@ export class PublicKernelCircuitPrivateInputs { static fromBuffer(buffer: BufferReader | Buffer) { const reader = BufferReader.asReader(buffer); const previousKernel = reader.readObject(PublicKernelData); - const publicCall = reader.readObject(PublicCallData); - return new PublicKernelCircuitPrivateInputs(previousKernel, publicCall); + const enqueuedCall = reader.readObject(EnqueuedCallData); + return new PublicKernelCircuitPrivateInputs(previousKernel, enqueuedCall); } /** diff --git a/yarn-project/circuits.js/src/structs/kernel/public_kernel_circuit_public_inputs.ts b/yarn-project/circuits.js/src/structs/kernel/public_kernel_circuit_public_inputs.ts index ca542885d3e..04214ea5b02 100644 --- a/yarn-project/circuits.js/src/structs/kernel/public_kernel_circuit_public_inputs.ts +++ b/yarn-project/circuits.js/src/structs/kernel/public_kernel_circuit_public_inputs.ts @@ -1,11 +1,9 @@ -import { makeTuple } from '@aztec/foundation/array'; import { AztecAddress } from '@aztec/foundation/aztec-address'; import { type Fr } from '@aztec/foundation/fields'; -import { BufferReader, FieldReader, type Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; +import { BufferReader, FieldReader, serializeToBuffer } from '@aztec/foundation/serialize'; import { inspect } from 'util'; -import { MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX } from '../../constants.gen.js'; import { PublicCallRequest } from '../public_call_request.js'; import { PublicValidationRequests } from '../public_validation_requests.js'; import { RevertCode } from '../revert_code.js'; @@ -18,6 +16,10 @@ import { PublicAccumulatedData } from './public_accumulated_data.js'; */ export class PublicKernelCircuitPublicInputs { constructor( + /** + * Data which is not modified by the circuits. + */ + public constants: CombinedConstantData, /** * Validation requests accumulated from public functions. */ @@ -31,32 +33,33 @@ export class PublicKernelCircuitPublicInputs { */ public end: PublicAccumulatedData, /** - * Data which is not modified by the circuits. - */ - public constants: CombinedConstantData, - /** - * Indicates whether execution of the public circuit reverted. + * Counter of the last side effect. */ - public revertCode: RevertCode, + public endSideEffectCounter: number, /** * The call request for the public teardown function */ - public publicTeardownCallStack: Tuple, + public publicTeardownCallRequest: PublicCallRequest, /** * The address of the fee payer for the transaction */ public feePayer: AztecAddress, + /** + * Indicates whether execution of the public circuit reverted. + */ + public revertCode: RevertCode, ) {} toBuffer() { return serializeToBuffer( + this.constants, this.validationRequests, this.endNonRevertibleData, this.end, - this.constants, - this.revertCode, - this.publicTeardownCallStack, + this.endSideEffectCounter, + this.publicTeardownCallRequest, this.feePayer, + this.revertCode, ); } @@ -72,18 +75,6 @@ export class PublicKernelCircuitPublicInputs { return PublicKernelCircuitPublicInputs.fromBuffer(Buffer.from(str, 'hex')); } - get needsSetup() { - return !this.endNonRevertibleData.publicCallStack[0].isEmpty(); - } - - get needsAppLogic() { - return !this.end.publicCallStack[0].isEmpty(); - } - - get needsTeardown() { - return !this.publicTeardownCallStack[0].isEmpty(); - } - /** * Deserializes from a buffer or reader, corresponding to a write in cpp. * @param buffer - Buffer or reader to read from. @@ -92,50 +83,54 @@ export class PublicKernelCircuitPublicInputs { static fromBuffer(buffer: Buffer | BufferReader): PublicKernelCircuitPublicInputs { const reader = BufferReader.asReader(buffer); return new PublicKernelCircuitPublicInputs( + reader.readObject(CombinedConstantData), reader.readObject(PublicValidationRequests), reader.readObject(PublicAccumulatedData), reader.readObject(PublicAccumulatedData), - reader.readObject(CombinedConstantData), - reader.readObject(RevertCode), - reader.readArray(MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, PublicCallRequest), + reader.readNumber(), + reader.readObject(PublicCallRequest), reader.readObject(AztecAddress), + reader.readObject(RevertCode), ); } static empty() { return new PublicKernelCircuitPublicInputs( + CombinedConstantData.empty(), PublicValidationRequests.empty(), PublicAccumulatedData.empty(), PublicAccumulatedData.empty(), - CombinedConstantData.empty(), - RevertCode.OK, - makeTuple(MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, PublicCallRequest.empty), + 0, + PublicCallRequest.empty(), AztecAddress.ZERO, + RevertCode.OK, ); } static fromFields(fields: Fr[] | FieldReader): PublicKernelCircuitPublicInputs { const reader = FieldReader.asReader(fields); return new PublicKernelCircuitPublicInputs( + CombinedConstantData.fromFields(reader), PublicValidationRequests.fromFields(reader), PublicAccumulatedData.fromFields(reader), PublicAccumulatedData.fromFields(reader), - CombinedConstantData.fromFields(reader), - RevertCode.fromField(reader.readField()), - reader.readArray(MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, PublicCallRequest), + reader.readU32(), + PublicCallRequest.fromFields(reader), AztecAddress.fromFields(reader), + RevertCode.fromField(reader.readField()), ); } [inspect.custom]() { return `PublicKernelCircuitPublicInputs { + constants: ${inspect(this.constants)}, validationRequests: ${inspect(this.validationRequests)}, endNonRevertibleData: ${inspect(this.endNonRevertibleData)}, end: ${inspect(this.end)}, - constants: ${inspect(this.constants)}, + endSideEffectCounter: ${this.endSideEffectCounter}, + publicTeardownCallRequest: ${inspect(this.publicTeardownCallRequest)}, + feePayer: ${this.feePayer}, revertCode: ${this.revertCode}, - publicTeardownCallStack: ${inspect(this.publicTeardownCallStack)} - feePayer: ${this.feePayer} }`; } } diff --git a/yarn-project/circuits.js/src/structs/kernel/public_kernel_inner_circuit_private_inputs.ts b/yarn-project/circuits.js/src/structs/kernel/public_kernel_inner_circuit_private_inputs.ts new file mode 100644 index 00000000000..49698ec53de --- /dev/null +++ b/yarn-project/circuits.js/src/structs/kernel/public_kernel_inner_circuit_private_inputs.ts @@ -0,0 +1,65 @@ +import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; + +import { PublicCallData } from './public_call_data.js'; +import { PublicKernelInnerData } from './public_kernel_inner_data.js'; + +/** + * Inputs to the public kernel circuit. + */ +export class PublicKernelInnerCircuitPrivateInputs { + constructor( + /** + * Kernels are recursive and this is the data from the previous kernel. + */ + public readonly previousKernel: PublicKernelInnerData, + /** + * Public calldata assembled from the execution result and proof. + */ + public readonly publicCall: PublicCallData, + ) {} + + /** + * Serializes the object to a buffer. + * @returns - Buffer representation of the object. + */ + toBuffer() { + return serializeToBuffer(this.previousKernel, this.publicCall); + } + + /** + * Serializes the object to a hex string. + * @returns - Hex string representation of the object. + */ + toString() { + return this.toBuffer().toString('hex'); + } + + /** + * Deserializes the object from a buffer. + * @param buffer - Buffer to deserialize. + * @returns - Deserialized object. + */ + static fromBuffer(buffer: BufferReader | Buffer) { + const reader = BufferReader.asReader(buffer); + const previousKernel = reader.readObject(PublicKernelInnerData); + const publicCall = reader.readObject(PublicCallData); + return new PublicKernelInnerCircuitPrivateInputs(previousKernel, publicCall); + } + + /** + * Deserializes the object from a hex string. + * @param str - Hex string to deserialize. + * @returns - Deserialized object. + */ + static fromString(str: string) { + return PublicKernelInnerCircuitPrivateInputs.fromBuffer(Buffer.from(str, 'hex')); + } + + /** + * Clones the object. + * @returns - Cloned object. + */ + clone() { + return PublicKernelInnerCircuitPrivateInputs.fromBuffer(this.toBuffer()); + } +} diff --git a/yarn-project/circuits.js/src/structs/kernel/public_kernel_inner_data.ts b/yarn-project/circuits.js/src/structs/kernel/public_kernel_inner_data.ts new file mode 100644 index 00000000000..59bc665ea66 --- /dev/null +++ b/yarn-project/circuits.js/src/structs/kernel/public_kernel_inner_data.ts @@ -0,0 +1,51 @@ +import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; + +import { NESTED_RECURSIVE_PROOF_LENGTH } from '../../constants.gen.js'; +import { RecursiveProof, makeEmptyRecursiveProof } from '../recursive_proof.js'; +import { VerificationKeyData } from '../verification_key.js'; +import { VMCircuitPublicInputs } from './vm_circuit_public_inputs.js'; + +/** + * Data of the previous public kernel iteration in the chain of kernels. + */ +export class PublicKernelInnerData { + constructor( + /** + * Public inputs of the previous kernel. + */ + public publicInputs: VMCircuitPublicInputs, + /** + * Proof of the previous kernel. + */ + public proof: RecursiveProof, + /** + * Verification key of the previous kernel. + */ + public vk: VerificationKeyData, + ) {} + + static fromBuffer(buffer: Buffer | BufferReader): PublicKernelInnerData { + const reader = BufferReader.asReader(buffer); + return new this( + reader.readObject(VMCircuitPublicInputs), + RecursiveProof.fromBuffer(reader, NESTED_RECURSIVE_PROOF_LENGTH), + reader.readObject(VerificationKeyData), + ); + } + + static empty(): PublicKernelInnerData { + return new this( + VMCircuitPublicInputs.empty(), + makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), + VerificationKeyData.makeFake(), + ); + } + + /** + * Serialize this as a buffer. + * @returns The buffer. + */ + toBuffer() { + return serializeToBuffer(this.publicInputs, this.proof, this.vk); + } +} diff --git a/yarn-project/circuits.js/src/structs/kernel/vm_circuit_public_inputs.ts b/yarn-project/circuits.js/src/structs/kernel/vm_circuit_public_inputs.ts new file mode 100644 index 00000000000..fc4200a344c --- /dev/null +++ b/yarn-project/circuits.js/src/structs/kernel/vm_circuit_public_inputs.ts @@ -0,0 +1,131 @@ +import { makeTuple } from '@aztec/foundation/array'; +import { Fr } from '@aztec/foundation/fields'; +import { BufferReader, FieldReader, type Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; + +import { inspect } from 'util'; + +import { MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX } from '../../constants.gen.js'; +import { Gas } from '../gas.js'; +import { PublicCallRequest } from '../public_call_request.js'; +import { PublicInnerCallRequest } from '../public_inner_call_request.js'; +import { PublicValidationRequestArrayLengths, PublicValidationRequests } from '../public_validation_requests.js'; +import { CombinedConstantData } from './combined_constant_data.js'; +import { PublicAccumulatedData, PublicAccumulatedDataArrayLengths } from './public_accumulated_data.js'; + +/** + * Call stack item on a public call. + */ +export class VMCircuitPublicInputs { + constructor( + public constants: CombinedConstantData, + public callRequest: PublicCallRequest, + public publicCallStack: Tuple, + public previousValidationRequestArrayLengths: PublicValidationRequestArrayLengths, + public validationRequests: PublicValidationRequests, + public previousAccumulatedDataArrayLengths: PublicAccumulatedDataArrayLengths, + public accumulatedData: PublicAccumulatedData, + public startSideEffectCounter: number, + public endSideEffectCounter: number, + public startGasLeft: Gas, + public transactionFee: Fr, + public reverted: boolean, + ) {} + + toBuffer() { + return serializeToBuffer( + this.constants, + this.callRequest, + this.publicCallStack, + this.previousValidationRequestArrayLengths, + this.validationRequests, + this.previousAccumulatedDataArrayLengths, + this.accumulatedData, + this.startSideEffectCounter, + this.endSideEffectCounter, + this.startGasLeft, + this.transactionFee, + this.reverted, + ); + } + + clone() { + return VMCircuitPublicInputs.fromBuffer(this.toBuffer()); + } + + toString() { + return this.toBuffer().toString('hex'); + } + + static fromString(str: string) { + return VMCircuitPublicInputs.fromBuffer(Buffer.from(str, 'hex')); + } + + static fromBuffer(buffer: Buffer | BufferReader) { + const reader = BufferReader.asReader(buffer); + return new VMCircuitPublicInputs( + reader.readObject(CombinedConstantData), + reader.readObject(PublicCallRequest), + reader.readArray(MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, PublicInnerCallRequest), + reader.readObject(PublicValidationRequestArrayLengths), + reader.readObject(PublicValidationRequests), + reader.readObject(PublicAccumulatedDataArrayLengths), + reader.readObject(PublicAccumulatedData), + reader.readNumber(), + reader.readNumber(), + reader.readObject(Gas), + reader.readObject(Fr), + reader.readBoolean(), + ); + } + + static empty() { + return new VMCircuitPublicInputs( + CombinedConstantData.empty(), + PublicCallRequest.empty(), + makeTuple(MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, PublicInnerCallRequest.empty), + PublicValidationRequestArrayLengths.empty(), + PublicValidationRequests.empty(), + PublicAccumulatedDataArrayLengths.empty(), + PublicAccumulatedData.empty(), + 0, + 0, + Gas.empty(), + Fr.ZERO, + false, + ); + } + + static fromFields(fields: Fr[] | FieldReader) { + const reader = FieldReader.asReader(fields); + return new VMCircuitPublicInputs( + CombinedConstantData.fromFields(reader), + PublicCallRequest.fromFields(reader), + reader.readArray(MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, PublicInnerCallRequest), + PublicValidationRequestArrayLengths.fromFields(reader), + PublicValidationRequests.fromFields(reader), + PublicAccumulatedDataArrayLengths.fromFields(reader), + PublicAccumulatedData.fromFields(reader), + reader.readU32(), + reader.readU32(), + Gas.fromFields(reader), + reader.readField(), + reader.readBoolean(), + ); + } + + [inspect.custom]() { + return `VMCircuitPublicInputs { + constants: ${inspect(this.constants)}, + callRequest: ${inspect(this.callRequest)} + previousValidationRequestArrayLengths: ${inspect(this.previousValidationRequestArrayLengths)}, + validationRequests: ${inspect(this.validationRequests)}, + previousAccumulatedDataArrayLengths: ${inspect(this.previousAccumulatedDataArrayLengths)}, + accumulatedData: ${inspect(this.accumulatedData)}, + startSideEffectCounter: ${this.startSideEffectCounter}, + endSideEffectCounter: ${this.endSideEffectCounter}, + startGasLeft: ${this.startGasLeft}, + transactionFee: ${this.transactionFee}, + reverted: ${this.reverted}, + }`; + } +} diff --git a/yarn-project/circuits.js/src/structs/non_existent_read_request_hints.ts b/yarn-project/circuits.js/src/structs/non_existent_read_request_hints.ts index e6ee1f1249d..2c675326077 100644 --- a/yarn-project/circuits.js/src/structs/non_existent_read_request_hints.ts +++ b/yarn-project/circuits.js/src/structs/non_existent_read_request_hints.ts @@ -100,7 +100,7 @@ export class NonExistentReadRequestHints< export type NullifierNonExistentReadRequestHints = NonExistentReadRequestHints< typeof MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX, typeof NULLIFIER_TREE_HEIGHT, - IndexedTreeLeafPreimage, + NullifierLeafPreimage, typeof MAX_NULLIFIERS_PER_TX, Nullifier >; @@ -147,7 +147,7 @@ export class NullifierNonExistentReadRequestHintsBuilder { addHint( membershipWitness: MembershipWitness, - lowLeafPreimage: IndexedTreeLeafPreimage, + lowLeafPreimage: NullifierLeafPreimage, nextPendingValueIndex: number, ) { this.hints.nonMembershipHints[this.readRequestIndex] = new NonMembershipHint(membershipWitness, lowLeafPreimage); diff --git a/yarn-project/circuits.js/src/structs/public_call_request.ts b/yarn-project/circuits.js/src/structs/public_call_request.ts index 2d53efb37ea..bd66f913f7f 100644 --- a/yarn-project/circuits.js/src/structs/public_call_request.ts +++ b/yarn-project/circuits.js/src/structs/public_call_request.ts @@ -1,20 +1,20 @@ -import { type Fr } from '@aztec/foundation/fields'; +import { AztecAddress } from '@aztec/foundation/aztec-address'; +import { Fr } from '@aztec/foundation/fields'; import { BufferReader, FieldReader, serializeToBuffer, serializeToFields } from '@aztec/foundation/serialize'; import { type FieldsOf } from '@aztec/foundation/types'; import { inspect } from 'util'; -import { PublicCallStackItemCompressed } from './public_call_stack_item_compressed.js'; +import { CallContext } from './call_context.js'; /** * Represents a request to call a public function. */ export class PublicCallRequest { constructor( - public item: PublicCallStackItemCompressed, - /** - * The counter for this call request. - */ + public contractAddress: AztecAddress, + public callContext: CallContext, + public argsHash: Fr, public counter: number, ) {} @@ -27,7 +27,7 @@ export class PublicCallRequest { * @returns The buffer. */ toBuffer() { - return serializeToBuffer(this.item, this.counter); + return serializeToBuffer(this.contractAddress, this.callContext, this.argsHash, this.counter); } /** @@ -37,7 +37,12 @@ export class PublicCallRequest { */ static fromBuffer(buffer: Buffer | BufferReader) { const reader = BufferReader.asReader(buffer); - return new PublicCallRequest(PublicCallStackItemCompressed.fromBuffer(reader), reader.readNumber()); + return new PublicCallRequest( + reader.readObject(AztecAddress), + reader.readObject(CallContext), + reader.readObject(Fr), + reader.readNumber(), + ); } /** @@ -55,29 +60,36 @@ export class PublicCallRequest { * @returns The array. */ static getFields(fields: FieldsOf) { - return [fields.item, fields.counter] as const; + return [fields.contractAddress, fields.callContext, fields.argsHash, fields.counter] as const; } toFields(): Fr[] { - return serializeToFields([this.item, this.counter]); + return serializeToFields([this.contractAddress, this.callContext, this.argsHash, this.counter]); } static fromFields(fields: Fr[] | FieldReader): PublicCallRequest { const reader = FieldReader.asReader(fields); - return new PublicCallRequest(PublicCallStackItemCompressed.fromFields(reader), reader.readU32()); + return new PublicCallRequest( + AztecAddress.fromFields(reader), + CallContext.fromFields(reader), + reader.readField(), + reader.readU32(), + ); } static empty() { - return new PublicCallRequest(PublicCallStackItemCompressed.empty(), 0); + return new PublicCallRequest(AztecAddress.ZERO, CallContext.empty(), Fr.ZERO, 0); } isEmpty(): boolean { - return this.item.isEmpty() && this.counter == 0; + return this.contractAddress.isZero() && this.callContext.isEmpty() && this.argsHash.isEmpty() && this.counter == 0; } [inspect.custom]() { return `PublicCallRequest { - item: ${this.item} + contractAddress: ${this.contractAddress} + callContext: ${this.callContext} + argsHash: ${this.argsHash} counter: ${this.counter} }`; } diff --git a/yarn-project/circuits.js/src/structs/public_call_stack_item.ts b/yarn-project/circuits.js/src/structs/public_call_stack_item.ts index c05e9415259..79d5d2ab29e 100644 --- a/yarn-project/circuits.js/src/structs/public_call_stack_item.ts +++ b/yarn-project/circuits.js/src/structs/public_call_stack_item.ts @@ -23,14 +23,10 @@ export class PublicCallStackItem { * Public inputs to the public kernel circuit. */ public publicInputs: PublicCircuitPublicInputs, - /** - * Whether the current callstack item should be considered a public fn execution request. - */ - public isExecutionRequest: boolean, ) {} static getFields(fields: FieldsOf) { - return [fields.contractAddress, fields.functionData, fields.publicInputs, fields.isExecutionRequest] as const; + return [fields.contractAddress, fields.functionData, fields.publicInputs] as const; } toBuffer() { @@ -48,7 +44,6 @@ export class PublicCallStackItem { reader.readObject(AztecAddress), reader.readObject(FunctionData), reader.readObject(PublicCircuitPublicInputs), - reader.readBoolean(), ); } @@ -58,9 +53,8 @@ export class PublicCallStackItem { const contractAddress = AztecAddress.fromFields(reader); const functionData = FunctionData.fromFields(reader); const publicInputs = PublicCircuitPublicInputs.fromFields(reader); - const isExecutionRequest = reader.readBoolean(); - return new PublicCallStackItem(contractAddress, functionData, publicInputs, isExecutionRequest); + return new PublicCallStackItem(contractAddress, functionData, publicInputs); } /** @@ -72,7 +66,6 @@ export class PublicCallStackItem { AztecAddress.ZERO, FunctionData.empty({ isPrivate: false }), PublicCircuitPublicInputs.empty(), - false, ); } diff --git a/yarn-project/circuits.js/src/structs/public_circuit_public_inputs.ts b/yarn-project/circuits.js/src/structs/public_circuit_public_inputs.ts index bf4e7fe8259..feb8d0382ba 100644 --- a/yarn-project/circuits.js/src/structs/public_circuit_public_inputs.ts +++ b/yarn-project/circuits.js/src/structs/public_circuit_public_inputs.ts @@ -35,7 +35,7 @@ import { L2ToL1Message } from './l2_to_l1_message.js'; import { LogHash } from './log_hash.js'; import { NoteHash } from './note_hash.js'; import { Nullifier } from './nullifier.js'; -import { PublicCallRequest } from './public_call_request.js'; +import { PublicInnerCallRequest } from './public_inner_call_request.js'; import { ReadRequest } from './read_request.js'; import { RevertCode } from './revert_code.js'; import { TreeLeafReadRequest } from './tree_leaf_read_request.js'; @@ -90,7 +90,7 @@ export class PublicCircuitPublicInputs { /** * Public call stack of the current kernel iteration. */ - public publicCallRequests: Tuple, + public publicCallRequests: Tuple, /** * New note hashes created within a public execution call */ @@ -167,7 +167,7 @@ export class PublicCircuitPublicInputs { makeTuple(MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL, TreeLeafReadRequest.empty), makeTuple(MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, ContractStorageUpdateRequest.empty), makeTuple(MAX_PUBLIC_DATA_READS_PER_CALL, ContractStorageRead.empty), - makeTuple(MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, PublicCallRequest.empty), + makeTuple(MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, PublicInnerCallRequest.empty), makeTuple(MAX_NOTE_HASHES_PER_CALL, NoteHash.empty), makeTuple(MAX_NULLIFIERS_PER_CALL, Nullifier.empty), makeTuple(MAX_L2_TO_L1_MSGS_PER_CALL, L2ToL1Message.empty), @@ -279,7 +279,7 @@ export class PublicCircuitPublicInputs { reader.readArray(MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL, TreeLeafReadRequest), reader.readArray(MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, ContractStorageUpdateRequest), reader.readArray(MAX_PUBLIC_DATA_READS_PER_CALL, ContractStorageRead), - reader.readArray(MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, PublicCallRequest), + reader.readArray(MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, PublicInnerCallRequest), reader.readArray(MAX_NOTE_HASHES_PER_CALL, NoteHash), reader.readArray(MAX_NULLIFIERS_PER_CALL, Nullifier), reader.readArray(MAX_L2_TO_L1_MSGS_PER_CALL, L2ToL1Message), @@ -309,7 +309,7 @@ export class PublicCircuitPublicInputs { reader.readArray(MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL, TreeLeafReadRequest), reader.readArray(MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, ContractStorageUpdateRequest), reader.readArray(MAX_PUBLIC_DATA_READS_PER_CALL, ContractStorageRead), - reader.readArray(MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, PublicCallRequest), + reader.readArray(MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, PublicInnerCallRequest), reader.readArray(MAX_NOTE_HASHES_PER_CALL, NoteHash), reader.readArray(MAX_NULLIFIERS_PER_CALL, Nullifier), reader.readArray(MAX_L2_TO_L1_MSGS_PER_CALL, L2ToL1Message), diff --git a/yarn-project/circuits.js/src/structs/public_inner_call_request.ts b/yarn-project/circuits.js/src/structs/public_inner_call_request.ts new file mode 100644 index 00000000000..9dd2abd4de0 --- /dev/null +++ b/yarn-project/circuits.js/src/structs/public_inner_call_request.ts @@ -0,0 +1,84 @@ +import { type Fr } from '@aztec/foundation/fields'; +import { BufferReader, FieldReader, serializeToBuffer, serializeToFields } from '@aztec/foundation/serialize'; +import { type FieldsOf } from '@aztec/foundation/types'; + +import { inspect } from 'util'; + +import { PublicCallStackItemCompressed } from './public_call_stack_item_compressed.js'; + +/** + * Represents a request to call a public function. + */ +export class PublicInnerCallRequest { + constructor( + public item: PublicCallStackItemCompressed, + /** + * The counter for this call request. + */ + public counter: number, + ) {} + + getSize() { + return this.isEmpty() ? 0 : this.toBuffer().length; + } + + /** + * Serialize this as a buffer. + * @returns The buffer. + */ + toBuffer() { + return serializeToBuffer(this.item, this.counter); + } + + /** + * Deserialize this from a buffer. + * @param buffer - The bufferable type from which to deserialize. + * @returns The deserialized instance of PublicInnerCallRequest. + */ + static fromBuffer(buffer: Buffer | BufferReader) { + const reader = BufferReader.asReader(buffer); + return new PublicInnerCallRequest(PublicCallStackItemCompressed.fromBuffer(reader), reader.readNumber()); + } + + /** + * Create PublicInnerCallRequest from a fields dictionary. + * @param fields - The dictionary. + * @returns A PublicInnerCallRequest object. + */ + static from(fields: FieldsOf): PublicInnerCallRequest { + return new PublicInnerCallRequest(...PublicInnerCallRequest.getFields(fields)); + } + + /** + * Serialize into a field array. Low-level utility. + * @param fields - Object with fields. + * @returns The array. + */ + static getFields(fields: FieldsOf) { + return [fields.item, fields.counter] as const; + } + + toFields(): Fr[] { + return serializeToFields([this.item, this.counter]); + } + + static fromFields(fields: Fr[] | FieldReader): PublicInnerCallRequest { + const reader = FieldReader.asReader(fields); + return new PublicInnerCallRequest(PublicCallStackItemCompressed.fromFields(reader), reader.readU32()); + } + + static empty() { + return new PublicInnerCallRequest(PublicCallStackItemCompressed.empty(), 0); + } + + isEmpty(): boolean { + return this.item.isEmpty() && this.counter == 0; + } + + [inspect.custom]() { + return `PublicInnerCallRequest { + item: ${this.item} + counter: ${this.counter} + }`; + } +} diff --git a/yarn-project/circuits.js/src/structs/public_validation_requests.ts b/yarn-project/circuits.js/src/structs/public_validation_requests.ts index b9e7d179b5a..4d45328914c 100644 --- a/yarn-project/circuits.js/src/structs/public_validation_requests.ts +++ b/yarn-project/circuits.js/src/structs/public_validation_requests.ts @@ -11,7 +11,9 @@ import { MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX, MAX_NULLIFIER_READ_REQUESTS_PER_TX, MAX_PUBLIC_DATA_READS_PER_TX, + NUM_PUBLIC_VALIDATION_REQUEST_ARRAYS, } from '../constants.gen.js'; +import { countAccumulatedItems } from '../utils/index.js'; import { PublicDataRead } from './public_data_read.js'; import { ScopedReadRequest } from './read_request.js'; import { RollupValidationRequests } from './rollup_validation_requests.js'; @@ -147,3 +149,91 @@ export class PublicValidationRequests { }`; } } + +export class PublicValidationRequestArrayLengths { + constructor( + public noteHashReadRequests: number, + public nullifierReadRequests: number, + public nullifierNonExistentReadRequests: number, + public l1ToL2MsgReadRequests: number, + public publicDataReads: number, + ) {} + + static new(requests: PublicValidationRequests) { + return new PublicValidationRequestArrayLengths( + countAccumulatedItems(requests.noteHashReadRequests), + countAccumulatedItems(requests.nullifierReadRequests), + countAccumulatedItems(requests.nullifierNonExistentReadRequests), + countAccumulatedItems(requests.l1ToL2MsgReadRequests), + countAccumulatedItems(requests.publicDataReads), + ); + } + + getSize() { + return NUM_PUBLIC_VALIDATION_REQUEST_ARRAYS; + } + + toBuffer() { + return serializeToBuffer( + this.noteHashReadRequests, + this.nullifierReadRequests, + this.nullifierNonExistentReadRequests, + this.l1ToL2MsgReadRequests, + this.publicDataReads, + ); + } + + toString() { + return this.toBuffer().toString('hex'); + } + + static fromFields(fields: Fr[] | FieldReader) { + const reader = FieldReader.asReader(fields); + return new PublicValidationRequestArrayLengths( + reader.readU32(), + reader.readU32(), + reader.readU32(), + reader.readU32(), + reader.readU32(), + ); + } + + /** + * Deserializes from a buffer or reader, corresponding to a write in cpp. + * @param buffer - Buffer or reader to read from. + * @returns Deserialized object. + */ + static fromBuffer(buffer: Buffer | BufferReader) { + const reader = BufferReader.asReader(buffer); + return new PublicValidationRequestArrayLengths( + reader.readNumber(), + reader.readNumber(), + reader.readNumber(), + reader.readNumber(), + reader.readNumber(), + ); + } + + /** + * Deserializes from a string, corresponding to a write in cpp. + * @param str - String to read from. + * @returns Deserialized object. + */ + static fromString(str: string) { + return PublicValidationRequestArrayLengths.fromBuffer(Buffer.from(str, 'hex')); + } + + static empty() { + return new PublicValidationRequestArrayLengths(0, 0, 0, 0, 0); + } + + [inspect.custom]() { + return `PublicValidationRequestArrayLengths { + noteHashReadRequests: ${this.noteHashReadRequests}, + nullifierReadRequests: ${this.nullifierReadRequests}, + nullifierNonExistentReadRequests: ${this.nullifierNonExistentReadRequests}, + l1ToL2MsgReadRequests: ${this.l1ToL2MsgReadRequests}, + publicDataReads: ${this.publicDataReads} +}`; + } +} diff --git a/yarn-project/circuits.js/src/structs/rollup/append_only_tree_snapshot.ts b/yarn-project/circuits.js/src/structs/rollup/append_only_tree_snapshot.ts index c831cbef31f..e1256fb3cb0 100644 --- a/yarn-project/circuits.js/src/structs/rollup/append_only_tree_snapshot.ts +++ b/yarn-project/circuits.js/src/structs/rollup/append_only_tree_snapshot.ts @@ -1,6 +1,8 @@ import { Fr } from '@aztec/foundation/fields'; import { BufferReader, FieldReader, serializeToBuffer } from '@aztec/foundation/serialize'; +import { inspect } from 'util'; + import { STRING_ENCODING, type UInt32 } from '../shared.js'; /** @@ -64,4 +66,10 @@ export class AppendOnlyTreeSnapshot { isZero(): boolean { return this.root.isZero() && this.nextAvailableLeafIndex === 0; } + + [inspect.custom]() { + return `AppendOnlyTreeSnapshot { root: ${this.root.toString()}, nextAvailableLeafIndex: ${ + this.nextAvailableLeafIndex + } }`; + } } diff --git a/yarn-project/circuits.js/src/structs/rollup/block_root_or_block_merge_public_inputs.ts b/yarn-project/circuits.js/src/structs/rollup/block_root_or_block_merge_public_inputs.ts index 193acbff485..48293c44896 100644 --- a/yarn-project/circuits.js/src/structs/rollup/block_root_or_block_merge_public_inputs.ts +++ b/yarn-project/circuits.js/src/structs/rollup/block_root_or_block_merge_public_inputs.ts @@ -1,9 +1,9 @@ +import { EthAddress } from '@aztec/foundation/eth-address'; import { Fr } from '@aztec/foundation/fields'; import { BufferReader, type Tuple, serializeToBuffer, serializeToFields } from '@aztec/foundation/serialize'; import { type FieldsOf } from '@aztec/foundation/types'; import { GlobalVariables } from '../global_variables.js'; -import { EthAddress } from '../index.js'; import { AppendOnlyTreeSnapshot } from './append_only_tree_snapshot.js'; /** @@ -131,4 +131,15 @@ export class FeeRecipient { toFields() { return serializeToFields(...FeeRecipient.getFields(this)); } + + isEmpty() { + return this.value.isZero() && this.recipient.isZero(); + } + + toFriendlyJSON() { + if (this.isEmpty()) { + return {}; + } + return { recipient: this.recipient.toString(), value: this.value.toString() }; + } } diff --git a/yarn-project/circuits.js/src/structs/rollup/block_root_rollup.ts b/yarn-project/circuits.js/src/structs/rollup/block_root_rollup.ts index 18de9e20c8d..0a4eece2374 100644 --- a/yarn-project/circuits.js/src/structs/rollup/block_root_rollup.ts +++ b/yarn-project/circuits.js/src/structs/rollup/block_root_rollup.ts @@ -47,7 +47,6 @@ export class BlockRootRollupInputs { public newArchiveSiblingPath: Tuple, /** * The hash of the block preceding this one. - * TODO(#7346): Integrate batch rollup circuits and inject below */ public previousBlockHash: Fr, /** diff --git a/yarn-project/circuits.js/src/structs/state_reference.ts b/yarn-project/circuits.js/src/structs/state_reference.ts index 5aa48b38c1c..3253371929c 100644 --- a/yarn-project/circuits.js/src/structs/state_reference.ts +++ b/yarn-project/circuits.js/src/structs/state_reference.ts @@ -1,6 +1,8 @@ import { type Fr } from '@aztec/foundation/fields'; import { BufferReader, FieldReader, serializeToBuffer } from '@aztec/foundation/serialize'; +import { inspect } from 'util'; + import { STATE_REFERENCE_LENGTH } from '../constants.gen.js'; import { PartialStateReference } from './partial_state_reference.js'; import { AppendOnlyTreeSnapshot } from './rollup/append_only_tree_snapshot.js'; @@ -56,4 +58,13 @@ export class StateReference { isEmpty(): boolean { return this.l1ToL2MessageTree.isZero() && this.partial.isEmpty(); } + + [inspect.custom]() { + return `StateReference { + l1ToL2MessageTree: ${inspect(this.l1ToL2MessageTree)}, + noteHashTree: ${inspect(this.partial.noteHashTree)}, + nullifierTree: ${inspect(this.partial.nullifierTree)}, + publicDataTree: ${inspect(this.partial.publicDataTree)}, +}`; + } } diff --git a/yarn-project/circuits.js/src/tests/factories.ts b/yarn-project/circuits.js/src/tests/factories.ts index 90dbbec53de..074a0714bf1 100644 --- a/yarn-project/circuits.js/src/tests/factories.ts +++ b/yarn-project/circuits.js/src/tests/factories.ts @@ -1,6 +1,7 @@ import { type FieldsOf, makeHalfFullTuple, makeTuple } from '@aztec/foundation/array'; import { AztecAddress } from '@aztec/foundation/aztec-address'; import { toBufferBE } from '@aztec/foundation/bigint-buffer'; +import { compact } from '@aztec/foundation/collection'; import { EthAddress } from '@aztec/foundation/eth-address'; import { type Bufferable } from '@aztec/foundation/serialize'; import { @@ -111,7 +112,6 @@ import { PublicDataTreeLeaf, PublicDataTreeLeafPreimage, PublicDataUpdateRequest, - PublicKernelCircuitPrivateInputs, PublicKernelCircuitPublicInputs, PublicKernelData, PublicKernelTailCircuitPrivateInputs, @@ -147,12 +147,20 @@ import { GasSettings } from '../structs/gas_settings.js'; import { GlobalVariables } from '../structs/global_variables.js'; import { Header } from '../structs/header.js'; import { + EnqueuedCallData, + PublicAccumulatedDataArrayLengths, PublicDataLeafHint, + PublicInnerCallRequest, + PublicKernelCircuitPrivateInputs, + PublicKernelInnerCircuitPrivateInputs, + PublicKernelInnerData, + PublicValidationRequestArrayLengths, PublicValidationRequests, ScopedL2ToL1Message, ScopedNoteHash, TreeLeafReadRequest, TreeLeafReadRequestHint, + VMCircuitPublicInputs, } from '../structs/index.js'; import { KernelCircuitPublicInputs } from '../structs/kernel/kernel_circuit_public_inputs.js'; import { KernelData } from '../structs/kernel/kernel_data.js'; @@ -335,6 +343,10 @@ function makePublicValidationRequests(seed = 1) { ); } +function makePublicValidationRequestArrayLengths(seed = 1) { + return new PublicValidationRequestArrayLengths(seed, seed + 1, seed + 2, seed + 3, seed + 4); +} + export function makeRollupValidationRequests(seed = 1) { return new RollupValidationRequests(new MaxBlockNumber(true, new Fr(seed + 0x31415))); } @@ -406,6 +418,19 @@ function makePublicAccumulatedData(seed = 1, full = false): PublicAccumulatedDat ); } +function makePublicAccumulatedDataArrayLengths(seed = 1) { + return new PublicAccumulatedDataArrayLengths( + seed, + seed + 1, + seed + 2, + seed + 3, + seed + 4, + seed + 5, + seed + 6, + seed + 7, + ); +} + /** * Creates arbitrary call context. * @param seed - The seed to use for generating the call context. @@ -461,7 +486,12 @@ export function makePublicCircuitPublicInputs( ContractStorageUpdateRequest.empty, ), tupleGenerator(MAX_PUBLIC_DATA_READS_PER_CALL, makeContractStorageRead, seed + 0x500, ContractStorageRead.empty), - tupleGenerator(MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, makePublicCallRequest, seed + 0x600, PublicCallRequest.empty), + tupleGenerator( + MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, + makePublicInnerCallRequest, + seed + 0x600, + PublicInnerCallRequest.empty, + ), tupleGenerator(MAX_NOTE_HASHES_PER_CALL, makeNoteHash, seed + 0x700, NoteHash.empty), tupleGenerator(MAX_NULLIFIERS_PER_CALL, makeNullifier, seed + 0x800, Nullifier.empty), tupleGenerator(MAX_L2_TO_L1_MSGS_PER_CALL, makeL2ToL1Message, seed + 0x900, L2ToL1Message.empty), @@ -487,15 +517,15 @@ export function makePublicKernelCircuitPublicInputs( seed = 1, fullAccumulatedData = true, ): PublicKernelCircuitPublicInputs { - const tupleGenerator = fullAccumulatedData ? makeTuple : makeHalfFullTuple; return new PublicKernelCircuitPublicInputs( - makePublicValidationRequests(seed), - makePublicAccumulatedData(seed, fullAccumulatedData), - makePublicAccumulatedData(seed, fullAccumulatedData), - makeConstantData(seed + 0x100), + makeConstantData(seed), + makePublicValidationRequests(seed + 0x100), + makePublicAccumulatedData(seed + 0x200, fullAccumulatedData), + makePublicAccumulatedData(seed + 0x300, fullAccumulatedData), + seed + 0x300, + makePublicCallRequest(seed + 0x400), + makeAztecAddress(seed + 0x500), RevertCode.OK, - tupleGenerator(MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, makePublicCallRequest, seed + 0x600, PublicCallRequest.empty), - makeAztecAddress(seed + 0x700), ); } @@ -547,6 +577,23 @@ export function makeKernelCircuitPublicInputs(seed = 1, fullAccumulatedData = tr ); } +export function makeVMCircuitPublicInputs(seed = 1) { + return new VMCircuitPublicInputs( + makeCombinedConstantData(seed), + makePublicCallRequest(seed + 0x100), + makeTuple(MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, makePublicInnerCallRequest, seed + 0x200), + makePublicValidationRequestArrayLengths(seed + 0x300), + makePublicValidationRequests(seed + 0x310), + makePublicAccumulatedDataArrayLengths(seed + 0x400), + makePublicAccumulatedData(seed + 0x410), + seed + 0x500, + seed + 0x501, + makeGas(seed + 0x600), + fr(seed + 0x700), + false, + ); +} + function makeSiblingPath(seed: number, size: N) { return makeTuple(size, fr, seed); } @@ -647,21 +694,26 @@ function makePrivateCallRequest(seed = 1): PrivateCallRequest { ); } -function makePublicCallStackItemCompressed(seed = 1, isPublicExecutionResult: boolean): PublicCallStackItemCompressed { +function makePublicCallStackItemCompressed(seed = 1): PublicCallStackItemCompressed { const callContext = makeCallContext(seed); return new PublicCallStackItemCompressed( callContext.storageContractAddress, callContext, fr(seed + 0x20), - isPublicExecutionResult ? fr(seed + 0x30) : fr(0), + fr(seed + 0x30), RevertCode.OK, - isPublicExecutionResult ? makeGas(seed + 0x40) : Gas.empty(), - isPublicExecutionResult ? makeGas(seed + 0x50) : Gas.empty(), + makeGas(seed + 0x40), + makeGas(seed + 0x50), ); } -export function makePublicCallRequest(seed = 1, isPublicExecutionResult = false): PublicCallRequest { - return new PublicCallRequest(makePublicCallStackItemCompressed(seed, isPublicExecutionResult), seed + 0x60); +export function makePublicCallRequest(seed = 1): PublicCallRequest { + const callContext = makeCallContext(seed); + return new PublicCallRequest(callContext.storageContractAddress, callContext, fr(seed + 0x20), seed + 0x60); +} + +function makePublicInnerCallRequest(seed = 1): PublicInnerCallRequest { + return new PublicInnerCallRequest(makePublicCallStackItemCompressed(seed), seed + 0x60); } /** @@ -675,7 +727,6 @@ export function makePublicCallStackItem(seed = 1, full = false): PublicCallStack // in the public kernel, function can't be a constructor or private new FunctionData(makeSelector(seed + 0x1), /*isPrivate=*/ false), makePublicCircuitPublicInputs(seed + 0x10, undefined, full), - false, ); callStackItem.publicInputs.callContext.storageContractAddress = callStackItem.contractAddress; return callStackItem; @@ -692,13 +743,29 @@ export function makePublicCallData(seed = 1, full = false): PublicCallData { return publicCallData; } +function makePublicKernelInnerData(seed = 1) { + return new PublicKernelInnerData( + makeVMCircuitPublicInputs(seed), + makeRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH, seed + 0x100), + VerificationKeyData.makeFake(), + ); +} + +export function makePublicKernelInnerCircuitPrivateInputs(seed = 1) { + return new PublicKernelInnerCircuitPrivateInputs(makePublicKernelInnerData(seed), makePublicCallData(seed + 0x1000)); +} + +function makeEnqueuedCallData(seed = 1) { + return new EnqueuedCallData(makeVMCircuitPublicInputs(seed), makeProof()); +} + /** * Makes arbitrary public kernel inputs. * @param seed - The seed to use for generating the public kernel inputs. * @returns Public kernel inputs. */ export function makePublicKernelCircuitPrivateInputs(seed = 1): PublicKernelCircuitPrivateInputs { - return new PublicKernelCircuitPrivateInputs(makePublicKernelData(seed), makePublicCallData(seed + 0x1000)); + return new PublicKernelCircuitPrivateInputs(makePublicKernelData(seed), makeEnqueuedCallData(seed + 0x1000)); } /** @@ -789,21 +856,18 @@ export function makePrivateCircuitPublicInputs(seed = 0): PrivateCircuitPublicIn }); } -export function makeGlobalVariables( - seed = 1, - blockNumber: number | undefined = undefined, - slotNumber: number | undefined = undefined, -): GlobalVariables { - return new GlobalVariables( - new Fr(seed), - new Fr(seed + 1), - new Fr(blockNumber ?? seed + 2), - new Fr(slotNumber ?? seed + 3), - new Fr(seed + 4), - EthAddress.fromField(new Fr(seed + 5)), - AztecAddress.fromField(new Fr(seed + 6)), - new GasFees(new Fr(seed + 7), new Fr(seed + 8)), - ); +export function makeGlobalVariables(seed = 1, overrides: Partial> = {}): GlobalVariables { + return GlobalVariables.from({ + chainId: new Fr(seed), + version: new Fr(seed + 1), + blockNumber: new Fr(seed + 2), + slotNumber: new Fr(seed + 3), + timestamp: new Fr(seed + 4), + coinbase: EthAddress.fromField(new Fr(seed + 5)), + feeRecipient: AztecAddress.fromField(new Fr(seed + 6)), + gasFees: new GasFees(new Fr(seed + 7), new Fr(seed + 8)), + ...compact(overrides), + }); } export function makeGasFees(seed = 1) { @@ -1076,7 +1140,10 @@ export function makeHeader( makeAppendOnlyTreeSnapshot(seed + 0x100), makeContentCommitment(seed + 0x200, txsEffectsHash), makeStateReference(seed + 0x600), - makeGlobalVariables((seed += 0x700), blockNumber, slotNumber), + makeGlobalVariables((seed += 0x700), { + ...(blockNumber ? { blockNumber: new Fr(blockNumber) } : {}), + ...(slotNumber ? { slotNumber: new Fr(slotNumber) } : {}), + }), fr(seed + 0x800), ); } diff --git a/yarn-project/cli/src/cmds/infrastructure/deploy_protocol_contract.ts b/yarn-project/cli/src/cmds/infrastructure/deploy_protocol_contract.ts index 77e8a51a5d4..dae8b36732d 100644 --- a/yarn-project/cli/src/cmds/infrastructure/deploy_protocol_contract.ts +++ b/yarn-project/cli/src/cmds/infrastructure/deploy_protocol_contract.ts @@ -2,11 +2,7 @@ import { SignerlessWallet, type WaitOpts, createPXEClient, makeFetch } from '@az import { DefaultMultiCallEntrypoint } from '@aztec/aztec.js/entrypoint'; import { type LogFn } from '@aztec/foundation/log'; -import { - deployCanonicalAuthRegistry, - deployCanonicalKeyRegistry, - deployCanonicalL2FeeJuice, -} from '../misc/deploy_contracts.js'; +import { deployCanonicalAuthRegistry, deployCanonicalL2FeeJuice } from '../misc/deploy_contracts.js'; const waitOpts: WaitOpts = { timeout: 180, @@ -22,9 +18,6 @@ export async function deployProtocolContracts(rpcUrl: string, l1ChainId: number, const pxe = createPXEClient(rpcUrl, makeFetch([], true)); const deployer = new SignerlessWallet(pxe, new DefaultMultiCallEntrypoint(l1ChainId, 1)); - // Deploy Key Registry - const keyRegistryAddress = await deployCanonicalKeyRegistry(deployer, waitOpts); - // Deploy Auth Registry const authRegistryAddress = await deployCanonicalAuthRegistry(deployer, waitOpts); @@ -36,7 +29,6 @@ export async function deployProtocolContracts(rpcUrl: string, l1ChainId: number, log( JSON.stringify( { - keyRegistryAddress: keyRegistryAddress.toString(), authRegistryAddress: authRegistryAddress.toString(), feeJuiceAddress: feeJuiceAddress.toString(), }, @@ -45,7 +37,6 @@ export async function deployProtocolContracts(rpcUrl: string, l1ChainId: number, ), ); } else { - log(`Key Registry: ${keyRegistryAddress}`); log(`Auth Registry: ${authRegistryAddress}`); log(`Fee Juice: ${feeJuiceAddress}`); } diff --git a/yarn-project/cli/src/cmds/l1/assume_proven_until.ts b/yarn-project/cli/src/cmds/l1/assume_proven_through.ts similarity index 76% rename from yarn-project/cli/src/cmds/l1/assume_proven_until.ts rename to yarn-project/cli/src/cmds/l1/assume_proven_through.ts index 18a106a7870..23102deb8d1 100644 --- a/yarn-project/cli/src/cmds/l1/assume_proven_until.ts +++ b/yarn-project/cli/src/cmds/l1/assume_proven_through.ts @@ -2,9 +2,9 @@ import { createPXEClient, makeFetch } from '@aztec/aztec.js'; import { createEthereumChain, createL1Clients } from '@aztec/ethereum'; import { type LogFn } from '@aztec/foundation/log'; -import { setAssumeProvenUntil } from '../../utils/aztec.js'; +import { setAssumeProvenThrough } from '../../utils/aztec.js'; -export async function assumeProvenUntil( +export async function assumeProvenThrough( blockNumberOrLatest: number | undefined, l1RpcUrl: string, rpcUrl: string, @@ -20,6 +20,6 @@ export async function assumeProvenUntil( const rollupAddress = await pxe.getNodeInfo().then(i => i.l1ContractAddresses.rollupAddress); const blockNumber = blockNumberOrLatest ?? (await pxe.getBlockNumber()); - await setAssumeProvenUntil(blockNumber + 1, rollupAddress, walletClient); - log(`Assumed proven until block ${blockNumber}`); + await setAssumeProvenThrough(blockNumber, rollupAddress, walletClient); + log(`Assumed proven through block ${blockNumber}`); } diff --git a/yarn-project/cli/src/cmds/l1/deploy_l1_verifier.ts b/yarn-project/cli/src/cmds/l1/deploy_l1_verifier.ts index cc346d98cda..656986f5b58 100644 --- a/yarn-project/cli/src/cmds/l1/deploy_l1_verifier.ts +++ b/yarn-project/cli/src/cmds/l1/deploy_l1_verifier.ts @@ -27,7 +27,7 @@ export async function deployUltraHonkVerifier( const circuitVerifier = await BBCircuitVerifier.new({ bbBinaryPath, bbWorkingDirectory }); const contractSrc = await circuitVerifier.generateSolidityContract( - 'BlockRootRollupArtifact', + 'BlockRootRollupFinalArtifact', 'UltraHonkVerifier.sol', ); log('Generated UltraHonkVerifier contract'); diff --git a/yarn-project/cli/src/cmds/l1/index.ts b/yarn-project/cli/src/cmds/l1/index.ts index 4f8dd9ae6d6..e8729fa3aac 100644 --- a/yarn-project/cli/src/cmds/l1/index.ts +++ b/yarn-project/cli/src/cmds/l1/index.ts @@ -246,7 +246,7 @@ export function injectCommands(program: Command, log: LogFn, debugLogger: DebugL }); program - .command('set-proven-until', { hidden: true }) + .command('set-proven-through', { hidden: true }) .description( 'Instructs the L1 rollup contract to assume all blocks until the given number are automatically proven.', ) @@ -265,8 +265,8 @@ export function injectCommands(program: Command, log: LogFn, debugLogger: DebugL .addOption(l1ChainIdOption) .option('--l1-private-key ', 'The private key to use for deployment', PRIVATE_KEY) .action(async (blockNumber, options) => { - const { assumeProvenUntil } = await import('./assume_proven_until.js'); - await assumeProvenUntil( + const { assumeProvenThrough } = await import('./assume_proven_through.js'); + await assumeProvenThrough( blockNumber, options.l1RpcUrl, options.rpcUrl, diff --git a/yarn-project/cli/src/cmds/l1/prover_stats.ts b/yarn-project/cli/src/cmds/l1/prover_stats.ts index 2184144fd1c..8a9acbb0da0 100644 --- a/yarn-project/cli/src/cmds/l1/prover_stats.ts +++ b/yarn-project/cli/src/cmds/l1/prover_stats.ts @@ -1,13 +1,14 @@ -import { getL2BlockProposedLogs, retrieveL2ProofVerifiedEvents } from '@aztec/archiver'; +import { retrieveL2ProofVerifiedEvents } from '@aztec/archiver'; import { createAztecNodeClient } from '@aztec/circuit-types'; import { EthAddress } from '@aztec/circuits.js'; import { createEthereumChain } from '@aztec/ethereum'; import { compactArray, mapValues, unique } from '@aztec/foundation/collection'; import { type LogFn, type Logger, createDebugLogger } from '@aztec/foundation/log'; +import { RollupAbi } from '@aztec/l1-artifacts'; import chunk from 'lodash.chunk'; import groupBy from 'lodash.groupby'; -import { type PublicClient, createPublicClient, http } from 'viem'; +import { type PublicClient, createPublicClient, getAbiItem, getAddress, http } from 'viem'; export async function proverStats(opts: { l1RpcUrl: string; @@ -85,7 +86,7 @@ export async function proverStats(opts: { // Map from l2 block number to the l1 block in which it was submitted const l2BlockSubmissions: Record = {}; for (const blockEvent of blockEvents) { - l2BlockSubmissions[blockEvent.args.blockNumber.toString()] = blockEvent.blockNumber; + l2BlockSubmissions[blockEvent.args.blockNumber!.toString()] = blockEvent.blockNumber; } // If we want raw logs, output them @@ -172,7 +173,17 @@ async function getL2BlockEvents( const events = []; while (blockNum <= lastBlockNum) { const end = blockNum + batchSize > lastBlockNum + 1n ? lastBlockNum + 1n : blockNum + batchSize; - const newEvents = await getL2BlockProposedLogs(publicClient, rollup, blockNum, end); + + const newEvents = await publicClient.getLogs({ + address: getAddress(rollup.toString()), + event: getAbiItem({ + abi: RollupAbi, + name: 'L2BlockProposed', + }), + fromBlock: blockNum, + toBlock: end + 1n, // the toBlock argument in getLogs is exclusive + }); + events.push(...newEvents); debugLog.verbose(`Got ${newEvents.length} events querying l2 block submitted from block ${blockNum} to ${end}`); blockNum += batchSize; diff --git a/yarn-project/cli/src/cmds/l1/update_l1_validators.ts b/yarn-project/cli/src/cmds/l1/update_l1_validators.ts index a230ed32b3b..b7459beb4b7 100644 --- a/yarn-project/cli/src/cmds/l1/update_l1_validators.ts +++ b/yarn-project/cli/src/cmds/l1/update_l1_validators.ts @@ -100,10 +100,10 @@ export async function debugRollup({ rpcUrl, chainId, rollupAddress, log }: Rollu client: publicClient, }); - const pendingCount = await rollup.read.pendingBlockCount(); - log(`Pending block count: ${pendingCount}`); - const provenCount = await rollup.read.provenBlockCount(); - log(`Proven block count: ${provenCount}`); + const pendingNum = await rollup.read.getPendingBlockNumber(); + log(`Pending block num: ${pendingNum}`); + const provenNum = await rollup.read.getProvenBlockNumber(); + log(`Proven block num: ${provenNum}`); const validators = await rollup.read.getValidators(); log(`Validators: ${validators.map(v => v.toString()).join(', ')}`); const committee = await rollup.read.getCurrentEpochCommittee(); diff --git a/yarn-project/cli/src/cmds/misc/deploy_contracts.ts b/yarn-project/cli/src/cmds/misc/deploy_contracts.ts index 8aeaed0089e..944503a9712 100644 --- a/yarn-project/cli/src/cmds/misc/deploy_contracts.ts +++ b/yarn-project/cli/src/cmds/misc/deploy_contracts.ts @@ -2,14 +2,12 @@ import { DefaultWaitOpts, type EthAddress, NoFeePaymentMethod, type Wallet } fro import { AztecAddress, CANONICAL_AUTH_REGISTRY_ADDRESS, - CANONICAL_KEY_REGISTRY_ADDRESS, GasSettings, MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS, } from '@aztec/circuits.js'; import { bufferAsFields } from '@aztec/foundation/abi'; import { getCanonicalAuthRegistry } from '@aztec/protocol-contracts/auth-registry'; import { getCanonicalFeeJuice } from '@aztec/protocol-contracts/fee-juice'; -import { getCanonicalKeyRegistry } from '@aztec/protocol-contracts/key-registry'; /** * Deploys the contract to pay for gas on L2. @@ -56,43 +54,6 @@ export async function deployCanonicalL2FeeJuice( return canonicalFeeJuice.address; } -/** - * Deploys the key registry on L2. - */ -export async function deployCanonicalKeyRegistry(deployer: Wallet, waitOpts = DefaultWaitOpts): Promise { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - Importing noir-contracts.js even in devDeps results in a circular dependency error. Need to ignore because this line doesn't cause an error in a dev environment - const { KeyRegistryContract } = await import('@aztec/noir-contracts.js'); - - const canonicalKeyRegistry = getCanonicalKeyRegistry(); - - // We check to see if there exists a contract at the canonical Key Registry address with the same contract class id as we expect. This means that - // the key registry has already been deployed to the correct address. - if ( - (await deployer.getContractInstance(canonicalKeyRegistry.address))?.contractClassId.equals( - canonicalKeyRegistry.contractClass.id, - ) && - (await deployer.isContractClassPubliclyRegistered(canonicalKeyRegistry.contractClass.id)) - ) { - return canonicalKeyRegistry.address; - } - - const keyRegistry = await KeyRegistryContract.deploy(deployer) - .send({ contractAddressSalt: canonicalKeyRegistry.instance.salt, universalDeploy: true }) - .deployed(waitOpts); - - if ( - !keyRegistry.address.equals(canonicalKeyRegistry.address) || - !keyRegistry.address.equals(AztecAddress.fromBigInt(CANONICAL_KEY_REGISTRY_ADDRESS)) - ) { - throw new Error( - `Deployed Key Registry address ${keyRegistry.address} does not match expected address ${canonicalKeyRegistry.address}, or they both do not equal CANONICAL_KEY_REGISTRY_ADDRESS`, - ); - } - - return canonicalKeyRegistry.address; -} - /** * Deploys the auth registry on L2. */ diff --git a/yarn-project/cli/src/cmds/pxe/get_node_info.ts b/yarn-project/cli/src/cmds/pxe/get_node_info.ts index a3347f792d5..5e4b060259b 100644 --- a/yarn-project/cli/src/cmds/pxe/get_node_info.ts +++ b/yarn-project/cli/src/cmds/pxe/get_node_info.ts @@ -20,6 +20,5 @@ export async function getNodeInfo(rpcUrl: string, debugLogger: DebugLogger, log: log(` Class Registerer: ${info.protocolContractAddresses.classRegisterer.toString()}`); log(` Fee Juice: ${info.protocolContractAddresses.feeJuice.toString()}`); log(` Instance Deployer: ${info.protocolContractAddresses.instanceDeployer.toString()}`); - log(` Key Registry: ${info.protocolContractAddresses.keyRegistry.toString()}`); log(` MultiCall: ${info.protocolContractAddresses.multiCallEntrypoint.toString()}`); } diff --git a/yarn-project/cli/src/cmds/pxe/get_pxe_info.ts b/yarn-project/cli/src/cmds/pxe/get_pxe_info.ts index c448afa4613..ac10160694b 100644 --- a/yarn-project/cli/src/cmds/pxe/get_pxe_info.ts +++ b/yarn-project/cli/src/cmds/pxe/get_pxe_info.ts @@ -9,6 +9,5 @@ export async function getPXEInfo(rpcUrl: string, debugLogger: DebugLogger, log: log(` Class Registerer: ${info.protocolContractAddresses.classRegisterer.toString()}`); log(` Fee Juice: ${info.protocolContractAddresses.feeJuice.toString()}`); log(` Instance Deployer: ${info.protocolContractAddresses.instanceDeployer.toString()}`); - log(` Key Registry: ${info.protocolContractAddresses.keyRegistry.toString()}`); log(` Multi Call Entrypoint: ${info.protocolContractAddresses.multiCallEntrypoint.toString()}`); } diff --git a/yarn-project/cli/src/utils/aztec.ts b/yarn-project/cli/src/utils/aztec.ts index 921fd4ac56d..71919cd8ec7 100644 --- a/yarn-project/cli/src/utils/aztec.ts +++ b/yarn-project/cli/src/utils/aztec.ts @@ -118,7 +118,7 @@ export async function deployAztecContracts( } /** Sets the assumed proven block number on the rollup contract on L1 */ -export async function setAssumeProvenUntil( +export async function setAssumeProvenThrough( blockNumber: number, rollupAddress: EthAddress, walletClient: WalletClient, @@ -128,7 +128,7 @@ export async function setAssumeProvenUntil( abi: RollupAbi, client: walletClient, }); - const hash = await rollup.write.setAssumeProvenUntilBlockNumber([BigInt(blockNumber)]); + const hash = await rollup.write.setAssumeProvenThroughBlockNumber([BigInt(blockNumber)]); await walletClient.extend(publicActions).waitForTransactionReceipt({ hash }); } diff --git a/yarn-project/end-to-end/Earthfile b/yarn-project/end-to-end/Earthfile index b59dbd47986..2cf744c225d 100644 --- a/yarn-project/end-to-end/Earthfile +++ b/yarn-project/end-to-end/Earthfile @@ -1,339 +1,297 @@ VERSION 0.8 -E2E_COMPOSE_TEST: - FUNCTION - ARG test - ARG compose_file=./scripts/docker-compose.yml - ARG debug="aztec:*" - ARG hardware_concurrency="" - LOCALLY - ENV TEST=$test - ENV DEBUG=$debug - ENV HARDWARE_CONCURRENCY=$hardware_concurrency - LET project_name=$(echo $test | sed 's/\./_/g' | sed 's/\//_/g') - IF docker compose > /dev/null 2>&1 - LET CMD="docker compose" - ELSE - LET CMD="docker-compose" - END - # Let docker compose know about the pushed tags above - ENV AZTEC_DOCKER_TAG=$(git rev-parse HEAD) - # Optimize to not cause serial behavior if image already exists - IF ! docker image ls --format '{{.Repository}}:{{.Tag}}' | grep "aztecprotocol/aztec:$AZTEC_DOCKER_TAG" || \ - ! docker image ls --format '{{.Repository}}:{{.Tag}}' | grep "aztecprotocol/end-to-end:$AZTEC_DOCKER_TAG" - WAIT - BUILD ../+export-e2e-test-images - END - END - # Run our docker compose, ending whenever sandbox ends, filtering out noisy eth_getLogs - ENV JOB_NAME=$project_name - RUN $CMD -p $project_name -f $compose_file up --exit-code-from=end-to-end --force-recreate - -E2E_TEST: - FUNCTION - ARG hardware_concurrency="" - ARG test - ARG allow_fail=false - LOCALLY - # Let docker compose know about the pushed tags above - ENV AZTEC_DOCKER_TAG=$(git rev-parse HEAD) - # Optimize to not cause serial behavior if image already exists - IF ! docker image ls --format '{{.Repository}}:{{.Tag}}' | grep "aztecprotocol/end-to-end:$AZTEC_DOCKER_TAG" - WAIT - BUILD ../+export-end-to-end - END - END - RUN docker run -e HARDWARE_CONCURRENCY=$hardware_concurrency --rm aztecprotocol/end-to-end:$AZTEC_DOCKER_TAG $test || $allow_fail - -E2E_TEST_PUBLIC_TESTNET: - FUNCTION - ARG hardware_concurrency="" - ARG test - ARG allow_fail=false - ARG seq_private_key - ARG prover_private_key - ARG ethereum_host - ARG l1_chain_id - LOCALLY - # Let docker compose know about the pushed tags above - ENV AZTEC_DOCKER_TAG=$(git rev-parse HEAD) - # Optimize to not cause serial behavior if image already exists - IF ! docker image ls --format '{{.Repository}}:{{.Tag}}' | grep "aztecprotocol/end-to-end:$AZTEC_DOCKER_TAG" - WAIT - BUILD ../+export-end-to-end - END - END - RUN docker run -e L1_CHAIN_ID=$l1_chain_id -e ETHEREUM_HOST=$ethereum_host -e SEQ_PUBLISHER_PRIVATE_KEY=$seq_private_key -e PROVER_PUBLISHER_PRIVATE_KEY=$prover_private_key -e HARDWARE_CONCURRENCY=$hardware_concurrency --rm aztecprotocol/end-to-end:$AZTEC_DOCKER_TAG $test || $allow_fail - -NETWORK_TEST: - FUNCTION - ARG values_file="default.yaml" - ARG namespace - ARG test - ARG chaos_values - ARG fresh_install - ARG force_build - LOCALLY - # Let docker compose know about the pushed tags above - ENV AZTEC_DOCKER_TAG=$(git rev-parse HEAD) - IF [ "$force_build" = "true" ] || \ - ! docker image ls --format '{{.Repository}}:{{.Tag}}' | grep "aztecprotocol/aztec:$AZTEC_DOCKER_TAG" || \ - ! docker image ls --format '{{.Repository}}:{{.Tag}}' | grep "aztecprotocol/end-to-end:$AZTEC_DOCKER_TAG" - WAIT - BUILD ../+export-e2e-test-images - END - END - # load the docker image into kind - RUN kind load docker-image aztecprotocol/end-to-end:$AZTEC_DOCKER_TAG - RUN kind load docker-image aztecprotocol/aztec:$AZTEC_DOCKER_TAG - - # if fresh_install is true, delete the namespace - IF [ "$fresh_install" = "true" ] - RUN kubectl delete namespace $namespace --ignore-not-found=true --wait=true --now --timeout=10m - END - - RUN helm install spartan ../../helm-charts/aztec-network \ - --namespace $namespace \ - --create-namespace \ - --values ../../helm-charts/aztec-network/values/$values_file \ - --set images.test.image="aztecprotocol/end-to-end:$AZTEC_DOCKER_TAG" \ - --set images.aztec.image="aztecprotocol/aztec:$AZTEC_DOCKER_TAG" \ - --set test="$test" \ - --wait \ - --wait-for-jobs=true \ - --timeout=10m - - RUN kubectl wait pod -l app==pxe --for=condition=Ready -n $namespace --timeout=10m - - RUN helm test spartan --namespace $namespace --timeout 30m - e2e-p2p: - DO +E2E_TEST --test=./src/e2e_p2p_network.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_p2p_network.test.ts e2e-l1-with-wall-time: - DO +E2E_TEST --test=./src/e2e_l1_with_wall_time.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_l1_with_wall_time.test.ts e2e-2-pxes: - DO +E2E_TEST --test=./src/e2e_2_pxes.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_2_pxes.test.ts + +e2e-nft: + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_nft.test.ts e2e-prover-full: - DO +E2E_TEST --test=./src/e2e_prover/full --hardware_concurrency=${HARDWARE_CONCURRENCY:-32} + LOCALLY + RUN HARDWARE_CONCURRENCY=${HARDWARE_CONCURRENCY:-32} ./scripts/e2e_test.sh ./src/e2e_prover/full e2e-prover-with-padding: - DO +E2E_TEST --test=./src/e2e_prover/with_padding --hardware_concurrency=${HARDWARE_CONCURRENCY:-32} + LOCALLY + RUN HARDWARE_CONCURRENCY=${HARDWARE_CONCURRENCY:-32} ./scripts/e2e_test.sh ./src/e2e_prover/with_padding e2e-account-contracts: - DO +E2E_TEST --test=./src/e2e_account_contracts.test.ts - -e2e-auth-contract: - DO +E2E_TEST --test=./src/e2e_auth_contract.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_account_contracts.test.ts e2e-authwit: - DO +E2E_TEST --test=./src/e2e_authwit.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_authwit.test.ts e2e-avm-simulator: - DO +E2E_TEST --test=./src/e2e_avm_simulator.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_avm_simulator.test.ts e2e-blacklist-token-contract: - DO +E2E_TEST --test=./src/e2e_blacklist_token_contract + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_blacklist_token_contract e2e-block-building: - DO +E2E_TEST --test=./src/e2e_block_building.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_block_building.test.ts e2e-bot: - DO +E2E_TEST --test=./src/e2e_bot.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_bot.test.ts e2e-card-game: - DO +E2E_TEST --test=./src/e2e_card_game.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_card_game.test.ts e2e-cheat-codes: - DO +E2E_TEST --test=./src/e2e_cheat_codes.test.ts - -e2e-counter-contract: - DO +E2E_TEST --test=./src/e2e_counter_contract.test.ts - -e2e-cross-chain-messaging: - DO +E2E_TEST --test=./src/e2e_cross_chain_messaging.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_cheat_codes.test.ts e2e-crowdfunding-and-claim: - DO +E2E_TEST --test=./src/e2e_crowdfunding_and_claim.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_crowdfunding_and_claim.test.ts e2e-delegate-calls: - DO +E2E_TEST --test=./src/e2e_delegate_calls + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_delegate_calls e2e-deploy-contract: - DO +E2E_TEST --test=./src/e2e_deploy_contract + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_deploy_contract e2e-encryption: - DO +E2E_TEST --test=./src/e2e_encryption.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_encryption.test.ts e2e-escrow-contract: - DO +E2E_TEST --test=./src/e2e_escrow_contract.test.ts - -e2e-key-registry: - DO +E2E_TEST --test=./src/e2e_key_registry.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_escrow_contract.test.ts e2e-keys: - DO +E2E_TEST --test=./src/e2e_keys.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_keys.test.ts e2e-lending-contract: - DO +E2E_TEST --test=./src/e2e_lending_contract.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_lending_contract.test.ts e2e-max-block-number: - DO +E2E_TEST --test=./src/e2e_max_block_number.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_max_block_number.test.ts e2e-multiple-accounts-1-enc-key: - DO +E2E_TEST --test=./src/e2e_multiple_accounts_1_enc_key.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_multiple_accounts_1_enc_key.test.ts e2e-nested-contract: - DO +E2E_TEST --test=./src/e2e_nested_contract + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_nested_contract e2e-non-contract-account: - DO +E2E_TEST --test=./src/e2e_non_contract_account.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_non_contract_account.test.ts e2e-note-getter: - DO +E2E_TEST --test=./src/e2e_note_getter.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_note_getter.test.ts e2e-ordering: - DO +E2E_TEST --test=./src/e2e_ordering.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_ordering.test.ts e2e-outbox: - DO +E2E_TEST --test=./src/e2e_outbox.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_outbox.test.ts e2e-pending-note-hashes-contract: - DO +E2E_TEST --test=./src/e2e_pending_note_hashes_contract.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_pending_note_hashes_contract.test.ts e2e-private-voting-contract: - DO +E2E_TEST --test=./src/e2e_private_voting_contract.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_private_voting_contract.test.ts e2e-prover-node: - DO +E2E_TEST --test=./src/e2e_prover_node.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_prover_node.test.ts e2e-fees-private-payments: - DO +E2E_TEST --test=./src/e2e_fees/private_payments.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_fees/private_payments.test.ts e2e-fees-private-refunds: - DO +E2E_TEST --test=./src/e2e_fees/private_refunds.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_fees/private_refunds.test.ts e2e-fees-gas-estimation: - DO +E2E_TEST --test=./src/e2e_fees/gas_estimation.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_fees/gas_estimation.test.ts e2e-fees-dapp-subscription: - DO +E2E_TEST --test=./src/e2e_fees/dapp_subscription.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_fees/dapp_subscription.test.ts -e2e-fees-failures: - DO +E2E_TEST --test=./src/e2e_fees/failures.test.ts +# e2e-fees-failures: +# LOCALLY +# RUN ./scripts/e2e_test.sh ./src/e2e_fees/failures.test.ts e2e-fees-fee-juice-payments: - DO +E2E_TEST --test=./src/e2e_fees/fee_juice_payments.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_fees/fee_juice_payments.test.ts e2e-fees-account-init: - DO +E2E_TEST --test=./src/e2e_fees/account_init.test.ts - -e2e-public-cross-chain-messaging: - DO +E2E_TEST --test=./src/e2e_public_cross_chain_messaging + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_fees/account_init.test.ts -e2e-public-to-private-messaging: - DO +E2E_TEST --test=./src/e2e_public_to_private_messaging.test.ts +e2e-cross-chain-messaging: + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_cross_chain_messaging e2e-state-vars: - DO +E2E_TEST --test=./src/e2e_state_vars.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_state_vars.test.ts e2e-logs: - DO +E2E_TEST --test=./src/e2e_event_logs.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_event_logs.test.ts e2e-static-calls: - DO +E2E_TEST --test=./src/e2e_static_calls.test.ts + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_static_calls.test.ts e2e-token-contract: - DO +E2E_TEST --test=./src/e2e_token_contract + LOCALLY + RUN ./scripts/e2e_test.sh ./src/e2e_token_contract e2e-public-testnet: ARG L1_CHAIN_ID="31337" + # automatically exported as ENV variables for below ARG ETHEREUM_HOST ARG SEQ_PUBLISHER_PRIVATE_KEY ARG PROVER_PUBLISHER_PRIVATE_KEY - DO +E2E_TEST_PUBLIC_TESTNET --test=./src/public-testnet --seq_private_key=${SEQ_PUBLISHER_PRIVATE_KEY:-} --prover_private_key=${PROVER_PUBLISHER_PRIVATE_KEY:-} --ethereum_host=${ETHEREUM_HOST:-} --l1_chain_id=${L1_CHAIN_ID:-} + LOCALLY + RUN ./scripts/e2e_test_public_testnet.sh ./src/public-testnet flakey-e2e-tests: - DO +E2E_TEST --test=./src/flakey --allow_fail=true + LOCALLY + RUN ./scripts/e2e_test.sh ./src/flakey || true e2e-sandbox-example: - DO +E2E_COMPOSE_TEST --test=e2e_sandbox_example.test.ts + LOCALLY + RUN ./scripts/e2e_compose_test.sh e2e_sandbox_example.test.ts uniswap-trade-on-l1-from-l2: - DO +E2E_COMPOSE_TEST --test=uniswap_trade_on_l1_from_l2.test.ts + LOCALLY + RUN ./scripts/e2e_compose_test.sh uniswap_trade_on_l1_from_l2.test.ts integration-l1-publisher: - DO +E2E_COMPOSE_TEST --test=integration_l1_publisher.test.ts + LOCALLY + RUN ./scripts/e2e_compose_test.sh integration_l1_publisher.test.ts # Disabled, TODO https://github.com/AztecProtocol/aztec-packages/issues/6624 # integration-proof-verification: -# DO +E2E_COMPOSE_TEST --compose_file=./scripts/docker-compose-no-sandbox.yml --test=integration_proof_verification.test.ts +# LOCALLY +# RUN COMPOSE_FILE=./scripts/docker-compose-no-sandbox.yml ./scripts/e2e_compose_test.sh integration_proof_verification.test.ts e2e-browser: - DO +E2E_COMPOSE_TEST --test=e2e_aztec_js_browser.test.ts + LOCALLY + RUN ./scripts/e2e_compose_test.sh e2e_aztec_js_browser.test.ts pxe: - DO +E2E_COMPOSE_TEST --test=pxe.test.ts + LOCALLY + RUN ./scripts/e2e_compose_test.sh pxe.test.ts e2e-docs-examples: - DO +E2E_COMPOSE_TEST --test=docs_examples.test.ts + LOCALLY + RUN ./scripts/e2e_compose_test.sh docs_examples.test.ts guides-writing-an-account-contract: - DO +E2E_COMPOSE_TEST --test=guides/writing_an_account_contract.test.ts + LOCALLY + RUN ./scripts/e2e_compose_test.sh guides/writing_an_account_contract.test.ts guides-dapp-testing: - DO +E2E_COMPOSE_TEST --test=guides/dapp_testing.test.ts + LOCALLY + RUN ./scripts/e2e_compose_test.sh guides/dapp_testing.test.ts # TODO intermittent failure # guides-sample-dapp: -# DO +E2E_COMPOSE_TEST --test=sample-dapp +# LOCALLY +# RUN ./scripts/e2e_compose_test.sh sample-dapp # TODO currently hangs for hour+ # guides-up-quick-start: -# DO +E2E_COMPOSE_TEST --test=guides/up_quick_start.test.ts +# LOCALLY +# RUN ./scripts/e2e_compose_test.sh guides/up_quick_start.test.ts bench-publish-rollup: - ARG PULL_REQUEST - ARG BRANCH - ARG COMMIT_HASH - DO +E2E_COMPOSE_TEST --test=benchmarks/bench_publish_rollup.test.ts --debug="aztec:benchmarks:*,aztec:sequencer,aztec:sequencer:*,aztec:world_state,aztec:merkle_trees" --compose_file=./scripts/docker-compose-no-sandbox.yml + LOCALLY + ENV COMPOSE_FILE=scripts/docker-compose-no-sandbox.yml + ENV DEBUG="aztec:benchmarks:*,aztec:sequencer,aztec:sequencer:*,aztec:world_state,aztec:merkle_trees" + ENV HARDWARE_CONCURRENCY=${HARDWARE_CONCURRENCY:-32} + # redundant, but just to be explicit: + ENV PULL_REQUEST=$PULL_REQUEST + ENV BRANCH=$BRANCH + ENV COMMIT_HASH=$COMMIT_HASH + RUN ./scripts/e2e_compose_test.sh benchmarks/bench_publish_rollup.test.ts DO ../../+UPLOAD_LOGS --PULL_REQUEST=$PULL_REQUEST --BRANCH=$BRANCH --COMMIT_HASH=$COMMIT_HASH bench-process-history: - ARG PULL_REQUEST - ARG BRANCH - ARG COMMIT_HASH - DO +E2E_COMPOSE_TEST --test=benchmarks/bench_process_history.test.ts --debug="aztec:benchmarks:*,aztec:sequencer,aztec:sequencer:*,aztec:world_state,aztec:merkle_trees" --compose_file=./scripts/docker-compose-no-sandbox.yml + LOCALLY + ENV COMPOSE_FILE=scripts/docker-compose-no-sandbox.yml + ENV DEBUG="aztec:benchmarks:*,aztec:sequencer,aztec:sequencer:*,aztec:world_state,aztec:merkle_trees" + ENV HARDWARE_CONCURRENCY=${HARDWARE_CONCURRENCY:-32} + # redundant, but just to be explicit: + ENV PULL_REQUEST=$PULL_REQUEST + ENV BRANCH=$BRANCH + ENV COMMIT_HASH=$COMMIT_HASH + RUN ./scripts/e2e_compose_test.sh benchmarks/bench_process_history.test.ts DO ../../+UPLOAD_LOGS --PULL_REQUEST=$PULL_REQUEST --BRANCH=$BRANCH --COMMIT_HASH=$COMMIT_HASH bench-tx-size: - ARG PULL_REQUEST - ARG BRANCH - ARG COMMIT_HASH - DO +E2E_COMPOSE_TEST --test=benchmarks/bench_tx_size_fees.test.ts --debug="aztec:benchmarks:*,aztec:sequencer,aztec:sequencer:*,aztec:world_state,aztec:merkle_trees" --enable_gas=1 --compose_file=./scripts/docker-compose-no-sandbox.yml + LOCALLY + ENV COMPOSE_FILE=scripts/docker-compose-no-sandbox.yml + ENV DEBUG="aztec:benchmarks:*,aztec:sequencer,aztec:sequencer:*,aztec:world_state,aztec:merkle_trees" + ENV HARDWARE_CONCURRENCY=${HARDWARE_CONCURRENCY:-32} + # redundant, but just to be explicit: + ENV PULL_REQUEST=$PULL_REQUEST + ENV BRANCH=$BRANCH + ENV COMMIT_HASH=$COMMIT_HASH + RUN ./scripts/e2e_compose_test.sh benchmarks/bench_tx_size_fees.test.ts DO ../../+UPLOAD_LOGS --PULL_REQUEST=$PULL_REQUEST --BRANCH=$BRANCH --COMMIT_HASH=$COMMIT_HASH bench-prover: - ARG PULL_REQUEST - ARG BRANCH - ARG COMMIT_HASH - DO +E2E_COMPOSE_TEST --test=bench_prover --debug="aztec:benchmarks:*,aztec:prover*,aztec:bb*,aztec:pxe*" --enable_gas=1 --compose_file=./scripts/docker-compose-no-sandbox.yml --hardware_concurrency=${HARDWARE_CONCURRENCY:-32} + LOCALLY + ENV COMPOSE_FILE=scripts/docker-compose-no-sandbox.yml + ENV DEBUG="aztec:benchmarks:*,aztec:sequencer,aztec:sequencer:*,aztec:world_state,aztec:merkle_trees" + ENV HARDWARE_CONCURRENCY=${HARDWARE_CONCURRENCY:-32} + # redundant, but just to be explicit: + ENV PULL_REQUEST=$PULL_REQUEST + ENV BRANCH=$BRANCH + ENV COMMIT_HASH=$COMMIT_HASH + RUN ./scripts/e2e_compose_test.sh bench_prover DO ../../+UPLOAD_LOGS --PULL_REQUEST=$PULL_REQUEST --BRANCH=$BRANCH --COMMIT_HASH=$COMMIT_HASH e2e-devnet-smoke: - DO +E2E_COMPOSE_TEST --test=devnet/e2e_smoke.test.ts --compose_file=scripts/docker-compose-devnet.yml + LOCALLY + RUN COMPOSE_FILE=scripts/docker-compose-devnet.yml ./scripts/e2e_compose_test.sh devnet/e2e_smoke.test.ts e2e-cli-wallet: - DO +E2E_COMPOSE_TEST --test=e2e_cli_wallet --compose_file=scripts/docker-compose-wallet.yml + LOCALLY + RUN COMPOSE_FILE=scripts/docker-compose-wallet.yml ./scripts/e2e_compose_test.sh e2e_cli_wallet network-smoke: - ARG force_build - ARG values_file="default.yaml" - DO +NETWORK_TEST --test=./src/spartan/smoke.test.ts --namespace=smoke --fresh_install=true --force_build=$force_build --values_file=$values_file + LOCALLY + RUN NAMESPACE=smoke FRESH_INSTALL=true FORCE_BUILD=$force_build VALUES_FILE=${values_file:-default.yaml} ./scripts/network_test.sh ./src/spartan/smoke.test.ts network-transfer: - ARG force_build - ARG values_file="default.yaml" - DO +NETWORK_TEST --test=./src/spartan/transfer.test.ts --namespace=transfer --fresh_install=true --force_build=$force_build --values_file=$values_file + LOCALLY + RUN NAMESPACE=transfer FRESH_INSTALL=true FORCE_BUILD=$force_build VALUES_FILE=${values_file:-default.yaml} ./scripts/network_test.sh ./src/spartan/transfer.test.ts diff --git a/yarn-project/end-to-end/package.local.json b/yarn-project/end-to-end/package.local.json index 62f136fa45d..a5214893419 100644 --- a/yarn-project/end-to-end/package.local.json +++ b/yarn-project/end-to-end/package.local.json @@ -5,4 +5,4 @@ "test": "LOG_LEVEL=${LOG_LEVEL:-verbose} DEBUG_COLORS=1 NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --testTimeout=300000 --forceExit", "test:unit": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest src/fixtures" } -} \ No newline at end of file +} diff --git a/yarn-project/end-to-end/scripts/build_images.sh b/yarn-project/end-to-end/scripts/build_images.sh old mode 100644 new mode 100755 diff --git a/yarn-project/end-to-end/scripts/e2e_compose_test.sh b/yarn-project/end-to-end/scripts/e2e_compose_test.sh new file mode 100755 index 00000000000..c82338c9b8b --- /dev/null +++ b/yarn-project/end-to-end/scripts/e2e_compose_test.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +# Usage: ./e2e_compose_test.sh +# Optional environment variables: +# COMPOSE_FILE (default: ./scripts/docker-compose.yml) +# DEBUG (default: "aztec:*") +# HARDWARE_CONCURRENCY (default: "") +# ENABLE_GAS (default: "") +# AZTEC_DOCKER_TAG (default: current git commit) + +set -eu + +# Note: We export variables to make them available to the docker compose file + +# Main positional parameter +export TEST="$1" +# Variables with defaults +COMPOSE_FILE="${COMPOSE_FILE:-./scripts/docker-compose.yml}" +export DEBUG="${DEBUG:-aztec:*}" +export HARDWARE_CONCURRENCY="${HARDWARE_CONCURRENCY:-}" +export AZTEC_DOCKER_TAG="${AZTEC_DOCKER_TAG:-$(git rev-parse HEAD)}" +FORCE_BUILD="${FORCE_BUILD:-true}" + +# Compute project_name +export JOB_NAME=$(echo "$TEST" | sed 's/\./_/g' | sed 's/\//_/g') + +# Determine CMD +if docker compose > /dev/null 2>&1; then + CMD="docker compose" +else + CMD="docker-compose" +fi + +# Optimize image building +if ! docker image ls --format '{{.Repository}}:{{.Tag}}' | grep -q "aztecprotocol/aztec:$AZTEC_DOCKER_TAG" || \ + ! docker image ls --format '{{.Repository}}:{{.Tag}}' | grep -q "aztecprotocol/end-to-end:$AZTEC_DOCKER_TAG"; then + echo "Docker images not found. They need to be built with 'earthly ./yarn-project/+export-test-images' or otherwise tagged with aztecprotocol/aztec:$AZTEC_DOCKER_TAG and aztecprotocol/end-to-end:$AZTEC_DOCKER_TAG." + exit 1 +fi + +# Run docker compose +$CMD -p "$JOB_NAME" -f "$COMPOSE_FILE" up --exit-code-from=end-to-end --force-recreate diff --git a/yarn-project/end-to-end/scripts/e2e_test.sh b/yarn-project/end-to-end/scripts/e2e_test.sh new file mode 100755 index 00000000000..5faec984d16 --- /dev/null +++ b/yarn-project/end-to-end/scripts/e2e_test.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# Usage: ./e2e_test.sh +# Optional environment variables: +# HARDWARE_CONCURRENCY (default: "") + +set -eu + +# Main positional parameter +TEST="$1" +# Default values for environment variables +HARDWARE_CONCURRENCY="${HARDWARE_CONCURRENCY:-}" +AZTEC_DOCKER_TAG=$(git rev-parse HEAD) + +if ! docker image ls --format '{{.Repository}}:{{.Tag}}' | grep -q "aztecprotocol/end-to-end:$AZTEC_DOCKER_TAG"; then + echo "Docker images not found. They need to be built with 'earthly ./yarn-project/+export-end-to-end' or otherwise tagged with aztecprotocol/end-to-end:$AZTEC_DOCKER_TAG." + exit 1 +fi + +docker run -e HARDWARE_CONCURRENCY="$HARDWARE_CONCURRENCY" --rm aztecprotocol/end-to-end:$AZTEC_DOCKER_TAG "$TEST" diff --git a/yarn-project/end-to-end/scripts/e2e_test_public_testnet.sh b/yarn-project/end-to-end/scripts/e2e_test_public_testnet.sh new file mode 100755 index 00000000000..6516d089cba --- /dev/null +++ b/yarn-project/end-to-end/scripts/e2e_test_public_testnet.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +# Usage: ./e2e_test_public_testnet.sh +# Optional environment variables: +# SEQ_PUBLISHER_PRIVATE_KEY +# PROVER_PUBLISHER_PRIVATE_KEY +# ETHEREUM_HOST +# HARDWARE_CONCURRENCY (default: "") +# ALLOW_FAIL (default: false) +# L1_CHAIN_ID (default: "31337") +# AZTEC_DOCKER_TAG (default: current git commit) + +set -eu + +# Main positional parameter +TEST="$1" + +# Variables with defaults +HARDWARE_CONCURRENCY="${HARDWARE_CONCURRENCY:-}" +L1_CHAIN_ID="${L1_CHAIN_ID:-31337}" +AZTEC_DOCKER_TAG="${AZTEC_DOCKER_TAG:-$(git rev-parse HEAD)}" + +# Check if the image exists +if ! docker image ls --format '{{.Repository}}:{{.Tag}}' | grep -q "aztecprotocol/end-to-end:$AZTEC_DOCKER_TAG"; then + echo "Building end-to-end Docker image..." + echo "Docker images not found. They need to be built with 'earthly ./yarn-project/+export-end-to-end' or otherwise tagged with aztecprotocol/end-to-end:$AZTEC_DOCKER_TAG." + exit 1 +fi + +# Run the test +docker run \ + -e L1_CHAIN_ID="$L1_CHAIN_ID" \ + -e ETHEREUM_HOST="${ETHEREUM_HOST:-}" \ + -e SEQ_PUBLISHER_PRIVATE_KEY="${SEQ_PUBLISHER_PRIVATE_KEY:-}" \ + -e PROVER_PUBLISHER_PRIVATE_KEY="${PROVER_PUBLISHER_PRIVATE_KEY:-}" \ + -e HARDWARE_CONCURRENCY="$HARDWARE_CONCURRENCY" \ + --rm aztecprotocol/end-to-end:$AZTEC_DOCKER_TAG "$TEST" diff --git a/yarn-project/end-to-end/scripts/network_test.sh b/yarn-project/end-to-end/scripts/network_test.sh new file mode 100755 index 00000000000..77f92f0b14e --- /dev/null +++ b/yarn-project/end-to-end/scripts/network_test.sh @@ -0,0 +1,58 @@ +#!/bin/bash + +# Usage: ./network_test.sh +# Required environment variables: +# NAMESPACE +# Optional environment variables: +# VALUES_FILE (default: "default.yaml") +# CHAOS_VALUES (default: "") +# FRESH_INSTALL (default: "false") +# AZTEC_DOCKER_TAG (default: current git commit) + +set -eu + +# Main positional parameter +TEST="$1" + +# Default values for environment variables +VALUES_FILE="${VALUES_FILE:-default.yaml}" +CHAOS_VALUES="${CHAOS_VALUES:-}" +FRESH_INSTALL="${FRESH_INSTALL:-false}" +AZTEC_DOCKER_TAG=${AZTEC_DOCKER_TAG:-$(git rev-parse HEAD)} + +# Check required environment variable +if [ -z "${NAMESPACE:-}" ]; then + echo "Environment variable NAMESPACE is required." + exit 1 +fi + +if ! docker image ls --format '{{.Repository}}:{{.Tag}}' | grep -q "aztecprotocol/aztec:$AZTEC_DOCKER_TAG" || \ + ! docker image ls --format '{{.Repository}}:{{.Tag}}' | grep -q "aztecprotocol/end-to-end:$AZTEC_DOCKER_TAG"; then + echo "Docker images not found. They need to be built with 'earthly ./yarn-project/+export-test-images' or otherwise tagged with aztecprotocol/aztec:$AZTEC_DOCKER_TAG and aztecprotocol/end-to-end:$AZTEC_DOCKER_TAG." + exit 1 +fi + +# Load the Docker images into kind +kind load docker-image aztecprotocol/end-to-end:$AZTEC_DOCKER_TAG +kind load docker-image aztecprotocol/aztec:$AZTEC_DOCKER_TAG + +# If FRESH_INSTALL is true, delete the namespace +if [ "$FRESH_INSTALL" = "true" ]; then + kubectl delete namespace "$NAMESPACE" --ignore-not-found=true --wait=true --now --timeout=10m +fi + +# Install the Helm chart +helm install spartan spartan/aztec-network/ \ + --namespace "$NAMESPACE" \ + --create-namespace \ + --values "$(git rev-parse --show-toplevel)/spartan/aztec-network/values/$VALUES_FILE" \ + --set images.test.image="aztecprotocol/end-to-end:$AZTEC_DOCKER_TAG" \ + --set images.aztec.image="aztecprotocol/aztec:$AZTEC_DOCKER_TAG" \ + --set test="$TEST" \ + --wait \ + --wait-for-jobs=true \ + --timeout=10m + +kubectl wait pod -l app==pxe --for=condition=Ready -n "$NAMESPACE" --timeout=10m + +helm test spartan --namespace "$NAMESPACE" --timeout 30m diff --git a/yarn-project/end-to-end/src/composed/integration_l1_publisher.test.ts b/yarn-project/end-to-end/src/composed/integration_l1_publisher.test.ts index b8911b0ccd9..06709cf7028 100644 --- a/yarn-project/end-to-end/src/composed/integration_l1_publisher.test.ts +++ b/yarn-project/end-to-end/src/composed/integration_l1_publisher.test.ts @@ -11,7 +11,7 @@ import { } from '@aztec/aztec.js'; // eslint-disable-next-line no-restricted-imports import { - type BlockProver, + type BlockSimulator, PROVING_STATUS, type ProcessedTx, makeEmptyProcessedTx as makeEmptyProcessedTxFromHistoricalTreeRoots, @@ -40,7 +40,6 @@ import { openTmpStore } from '@aztec/kv-store/utils'; import { OutboxAbi, RollupAbi } from '@aztec/l1-artifacts'; import { SHA256Trunc, StandardTree } from '@aztec/merkle-tree'; import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types'; -import { TxProver } from '@aztec/prover-client'; import { L1Publisher } from '@aztec/sequencer-client'; import { NoopTelemetryClient } from '@aztec/telemetry-client/noop'; import { MerkleTrees, ServerWorldStateSynchronizer, type WorldStateConfig } from '@aztec/world-state'; @@ -63,6 +62,7 @@ import { } from 'viem'; import { type PrivateKeyAccount, privateKeyToAccount } from 'viem/accounts'; +import { LightweightBlockBuilder } from '../../../sequencer-client/src/block_builder/light.js'; import { sendL1ToL2Message } from '../fixtures/l1_to_l2_messaging.js'; import { setupL1Contracts } from '../fixtures/utils.js'; @@ -90,9 +90,8 @@ describe('L1Publisher integration', () => { let publisher: L1Publisher; - let builder: TxProver; + let builder: BlockSimulator; let builderDb: MerkleTrees; - let prover: BlockProver; // The header of the last block let prevHeader: Header; @@ -157,8 +156,7 @@ describe('L1Publisher integration', () => { }; worldStateSynchronizer = new ServerWorldStateSynchronizer(tmpStore, builderDb, blockSource, worldStateConfig); await worldStateSynchronizer.start(); - builder = await TxProver.new(config, new NoopTelemetryClient()); - prover = builder.createBlockProver(builderDb.asLatest()); + builder = new LightweightBlockBuilder(builderDb.asLatest(), new NoopTelemetryClient()); publisher = new L1Publisher( { @@ -314,9 +312,9 @@ describe('L1Publisher integration', () => { }; const buildBlock = async (globalVariables: GlobalVariables, txs: ProcessedTx[], l1ToL2Messages: Fr[]) => { - const blockTicket = await prover.startNewBlock(txs.length, globalVariables, l1ToL2Messages); + const blockTicket = await builder.startNewBlock(txs.length, globalVariables, l1ToL2Messages); for (const tx of txs) { - await prover.addNewTx(tx); + await builder.addNewTx(tx); } return blockTicket; }; @@ -368,7 +366,7 @@ describe('L1Publisher integration', () => { const ticket = await buildBlock(globalVariables, txs, currentL1ToL2Messages); const result = await ticket.provingPromise; expect(result.status).toBe(PROVING_STATUS.SUCCESS); - const blockResult = await prover.finaliseBlock(); + const blockResult = await builder.finaliseBlock(); const block = blockResult.block; prevHeader = block.header; blockSource.getL1ToL2Messages.mockResolvedValueOnce(currentL1ToL2Messages); @@ -474,10 +472,10 @@ describe('L1Publisher integration', () => { GasFees.empty(), ); const blockTicket = await buildBlock(globalVariables, txs, l1ToL2Messages); - await prover.setBlockCompleted(); + await builder.setBlockCompleted(); const result = await blockTicket.provingPromise; expect(result.status).toBe(PROVING_STATUS.SUCCESS); - const blockResult = await prover.finaliseBlock(); + const blockResult = await builder.finaliseBlock(); const block = blockResult.block; prevHeader = block.header; blockSource.getL1ToL2Messages.mockResolvedValueOnce(l1ToL2Messages); diff --git a/yarn-project/end-to-end/src/composed/integration_proof_verification.test.ts b/yarn-project/end-to-end/src/composed/integration_proof_verification.test.ts index 594272d005b..402cfe3fe81 100644 --- a/yarn-project/end-to-end/src/composed/integration_proof_verification.test.ts +++ b/yarn-project/end-to-end/src/composed/integration_proof_verification.test.ts @@ -74,7 +74,10 @@ describe('proof_verification', () => { acvmTeardown = acvm!.cleanup; logger.info('bb, acvm done'); - const content = await circuitVerifier.generateSolidityContract('BlockRootRollupArtifact', 'UltraHonkVerifier.sol'); + const content = await circuitVerifier.generateSolidityContract( + 'BlockRootRollupFinalArtifact', + 'UltraHonkVerifier.sol', + ); logger.info('generated contract'); const input = { @@ -137,7 +140,9 @@ describe('proof_verification', () => { describe('bb', () => { it('verifies proof', async () => { - await expect(circuitVerifier.verifyProofForCircuit('BlockRootRollupArtifact', proof)).resolves.toBeUndefined(); + await expect( + circuitVerifier.verifyProofForCircuit('BlockRootRollupFinalArtifact', proof), + ).resolves.toBeUndefined(); }); }); diff --git a/yarn-project/end-to-end/src/devnet/e2e_smoke.test.ts b/yarn-project/end-to-end/src/devnet/e2e_smoke.test.ts index 4e318b416c4..848f09e9b00 100644 --- a/yarn-project/end-to-end/src/devnet/e2e_smoke.test.ts +++ b/yarn-project/end-to-end/src/devnet/e2e_smoke.test.ts @@ -101,7 +101,6 @@ describe('End-to-end tests for devnet', () => { pxeInfo.protocolContractAddresses.instanceDeployer, ); expect(nodeInfo.protocolContractAddresses.feeJuice).toEqual(pxeInfo.protocolContractAddresses.feeJuice); - expect(nodeInfo.protocolContractAddresses.keyRegistry).toEqual(pxeInfo.protocolContractAddresses.keyRegistry); expect(nodeInfo.protocolContractAddresses.multiCallEntrypoint).toEqual( pxeInfo.protocolContractAddresses.multiCallEntrypoint, ); diff --git a/yarn-project/end-to-end/src/e2e_auth_contract.test.ts b/yarn-project/end-to-end/src/e2e_auth_contract.test.ts deleted file mode 100644 index 262590cc81b..00000000000 --- a/yarn-project/end-to-end/src/e2e_auth_contract.test.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { type AccountWallet, AztecAddress, Fr, type PXE } from '@aztec/aztec.js'; -import { AuthContract } from '@aztec/noir-contracts.js'; - -import { jest } from '@jest/globals'; - -import { publicDeployAccounts, setup } from './fixtures/utils.js'; - -describe('e2e_auth_contract', () => { - const TIMEOUT = 120_000; - jest.setTimeout(TIMEOUT); - - let teardown: () => Promise; - - let admin: AccountWallet; - let authorized: AccountWallet; - let other: AccountWallet; - - let pxe: PXE; - - let contract: AuthContract; - - const DELAY = 5; - - beforeAll(async () => { - ({ - teardown, - wallets: [admin, authorized, other], - pxe, - } = await setup(3)); - - await publicDeployAccounts(admin, [admin, authorized, other]); - - const deployTx = AuthContract.deploy(admin, admin.getAddress()).send({}); - const receipt = await deployTx.wait(); - contract = receipt.contract; - }); - - afterAll(() => teardown()); - - async function mineBlock() { - await contract.methods.get_authorized().send().wait(); - } - - async function mineBlocks(amount: number) { - for (let i = 0; i < amount; ++i) { - await mineBlock(); - } - } - - it('authorized is unset initially', async () => { - expect(await contract.methods.get_authorized().simulate()).toEqual(AztecAddress.ZERO); - }); - - it('non-admin cannot set authorized', async () => { - await expect(contract.withWallet(other).methods.set_authorized(authorized.getAddress()).prove()).rejects.toThrow( - 'caller is not admin', - ); - }); - - it('admin sets authorized', async () => { - await contract.withWallet(admin).methods.set_authorized(authorized.getAddress()).send().wait(); - - expect(await contract.methods.get_scheduled_authorized().simulate()).toEqual(authorized.getAddress()); - }); - - it('authorized is not yet set, cannot use permission', async () => { - expect(await contract.methods.get_authorized().simulate()).toEqual(AztecAddress.ZERO); - - await expect(contract.withWallet(authorized).methods.do_private_authorized_thing().prove()).rejects.toThrow( - 'caller is not authorized', - ); - }); - - it('after a while the scheduled change is effective and can be used with max block restriction', async () => { - await mineBlocks(DELAY); // This gets us past the block of change - - // docs:start:simulate_public_getter - expect(await contract.methods.get_authorized().simulate()).toEqual(authorized.getAddress()); - // docs:end:simulate_public_getter - - const interaction = contract.withWallet(authorized).methods.do_private_authorized_thing(); - - const tx = await interaction.prove(); - - const lastBlockNumber = await pxe.getBlockNumber(); - // In the last block there was no scheduled value change, so the earliest one could be scheduled is in the next - // block. Because of the delay, the block of change would be lastBlockNumber + 1 + DELAY. Therefore the block - // horizon should be the block preceding that one. - const expectedMaxBlockNumber = lastBlockNumber + DELAY; - - expect(tx.data.forRollup!.rollupValidationRequests.maxBlockNumber.isSome).toEqual(true); - expect(tx.data.forRollup!.rollupValidationRequests.maxBlockNumber.value).toEqual(new Fr(expectedMaxBlockNumber)); - - expect((await interaction.send().wait()).status).toEqual('success'); - }); - - it('a new authorized address is set but not immediately effective, the previous one retains permissions', async () => { - await contract.withWallet(admin).methods.set_authorized(other.getAddress()).send().wait(); - - expect(await contract.methods.get_authorized().simulate()).toEqual(authorized.getAddress()); - - expect(await contract.methods.get_scheduled_authorized().simulate()).toEqual(other.getAddress()); - - await expect(contract.withWallet(other).methods.do_private_authorized_thing().prove()).rejects.toThrow( - 'caller is not authorized', - ); - - expect((await contract.withWallet(authorized).methods.do_private_authorized_thing().send().wait()).status).toEqual( - 'success', - ); - }); - - it('after some time the scheduled change is made effective', async () => { - await mineBlocks(DELAY); // This gets us past the block of change - - expect(await contract.methods.get_authorized().simulate()).toEqual(other.getAddress()); - - await expect(contract.withWallet(authorized).methods.do_private_authorized_thing().prove()).rejects.toThrow( - 'caller is not authorized', - ); - - expect((await contract.withWallet(other).methods.do_private_authorized_thing().send().wait()).status).toEqual( - 'success', - ); - }); -}); diff --git a/yarn-project/end-to-end/src/e2e_block_building.test.ts b/yarn-project/end-to-end/src/e2e_block_building.test.ts index cb4655f5561..0cb5ea031b5 100644 --- a/yarn-project/end-to-end/src/e2e_block_building.test.ts +++ b/yarn-project/end-to-end/src/e2e_block_building.test.ts @@ -12,10 +12,11 @@ import { type Wallet, deriveKeys, retryUntil, + sleep, } from '@aztec/aztec.js'; import { times } from '@aztec/foundation/collection'; import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto'; -import { StatefulTestContractArtifact } from '@aztec/noir-contracts.js'; +import { StatefulTestContract, StatefulTestContractArtifact } from '@aztec/noir-contracts.js'; import { TestContract } from '@aztec/noir-contracts.js/Test'; import { TokenContract } from '@aztec/noir-contracts.js/Token'; @@ -88,7 +89,35 @@ describe('e2e_block_building', () => { expect(areDeployed).toEqual(times(TX_COUNT, () => true)); }); - it.skip('can call public function from different tx in same block', async () => { + it('assembles a block with multiple txs with public fns', async () => { + // First deploy the contract + const ownerAddress = owner.getCompleteAddress().address; + const contract = await StatefulTestContract.deploy(owner, ownerAddress, ownerAddress, 1).send().deployed(); + + // Assemble N contract deployment txs + // We need to create them sequentially since we cannot have parallel calls to a circuit + const TX_COUNT = 8; + await aztecNode.setConfig({ minTxsPerBlock: TX_COUNT }); + + const methods = times(TX_COUNT, i => contract.methods.increment_public_value(ownerAddress, i)); + for (let i = 0; i < TX_COUNT; i++) { + await methods[i].create({}); + await methods[i].prove({}); + } + + // Send them simultaneously to be picked up by the sequencer + const txs = await Promise.all(methods.map(method => method.send())); + logger.info(`Txs sent with hashes: `); + for (const tx of txs) { + logger.info(` ${await tx.getTxHash()}`); + } + + // Await txs to be mined and assert they are all mined on the same block + const receipts = await Promise.all(txs.map(tx => tx.wait())); + expect(receipts.map(r => r.blockNumber)).toEqual(times(TX_COUNT, () => receipts[0].blockNumber)); + }); + + it.skip('can call public function from different tx in same block as deployed', async () => { // Ensure both txs will land on the same block await aztecNode.setConfig({ minTxsPerBlock: 2 }); @@ -333,6 +362,7 @@ describe('e2e_block_building', () => { minTxsPerBlock: 0, skipProtocolContracts: true, })); + await sleep(1000); const account = getSchnorrAccount(pxe, Fr.random(), Fq.random(), Fr.random()); await account.waitSetup(); diff --git a/yarn-project/end-to-end/src/e2e_bot.test.ts b/yarn-project/end-to-end/src/e2e_bot.test.ts index 1f1c26a24e2..5446f6f31c6 100644 --- a/yarn-project/end-to-end/src/e2e_bot.test.ts +++ b/yarn-project/end-to-end/src/e2e_bot.test.ts @@ -1,7 +1,7 @@ import { Fr, type PXE } from '@aztec/aztec.js'; import { Bot, type BotConfig } from '@aztec/bot'; +import { SupportedTokenContracts, getBotDefaultConfig } from '@aztec/bot'; -import { getBotDefaultConfig } from '../../bot/src/config.js'; import { setup } from './fixtures/utils.js'; describe('e2e_bot', () => { @@ -49,4 +49,20 @@ describe('e2e_bot', () => { expect(bot2.token.address.toString()).toEqual(token.address.toString()); expect(bot2.recipient.toString()).toEqual(recipient.toString()); }); + + it('sends token from the bot using EasyPrivateToken', async () => { + const easyBot = await Bot.create( + { + ...config, + contract: SupportedTokenContracts.EasyPrivateTokenContract, + }, + { pxe }, + ); + const { recipient: recipientBefore } = await easyBot.getBalances(); + + await easyBot.run(); + const { recipient: recipientAfter } = await easyBot.getBalances(); + expect(recipientAfter.privateBalance - recipientBefore.privateBalance).toEqual(1n); + expect(recipientAfter.publicBalance - recipientBefore.publicBalance).toEqual(0n); + }); }); diff --git a/yarn-project/end-to-end/src/e2e_cheat_codes.test.ts b/yarn-project/end-to-end/src/e2e_cheat_codes.test.ts index 27d7124d6c5..86d78c83674 100644 --- a/yarn-project/end-to-end/src/e2e_cheat_codes.test.ts +++ b/yarn-project/end-to-end/src/e2e_cheat_codes.test.ts @@ -9,9 +9,20 @@ import { type Wallet, computeSecretHash, } from '@aztec/aztec.js'; +import { RollupAbi } from '@aztec/l1-artifacts'; import { TokenContract } from '@aztec/noir-contracts.js'; -import { type Account, type Chain, type HttpTransport, type PublicClient, type WalletClient, parseEther } from 'viem'; +import { + type Account, + type Chain, + type GetContractReturnType, + type HttpTransport, + type PublicClient, + type WalletClient, + getContract, + parseEther, +} from 'viem'; +import type * as chains from 'viem/chains'; import { setup } from './fixtures/utils.js'; @@ -22,6 +33,7 @@ describe('e2e_cheat_codes', () => { let pxe: PXE; let teardown: () => Promise; + let rollup: GetContractReturnType>; let walletClient: WalletClient; let publicClient: PublicClient; let token: TokenContract; @@ -34,9 +46,19 @@ describe('e2e_cheat_codes', () => { publicClient = deployL1ContractsValues.publicClient; admin = wallet.getCompleteAddress(); + rollup = getContract({ + address: deployL1ContractsValues.l1ContractAddresses.rollupAddress.toString(), + abi: RollupAbi, + client: deployL1ContractsValues.walletClient, + }); + token = await TokenContract.deploy(wallet, admin, 'TokenName', 'TokenSymbol', 18).send().deployed(); }); + beforeEach(async () => { + await rollup.write.setAssumeProvenThroughBlockNumber([(await rollup.read.getPendingBlockNumber()) + 1n]); + }); + afterAll(() => teardown()); describe('L1 cheatcodes', () => { diff --git a/yarn-project/end-to-end/src/e2e_counter_contract.test.ts b/yarn-project/end-to-end/src/e2e_counter_contract.test.ts deleted file mode 100644 index c885a74bb8c..00000000000 --- a/yarn-project/end-to-end/src/e2e_counter_contract.test.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { type AccountWallet, type AztecAddress, type DebugLogger } from '@aztec/aztec.js'; -import { CounterContract } from '@aztec/noir-contracts.js/Counter'; - -import { setup } from './fixtures/utils.js'; - -describe('e2e_counter_contract', () => { - let wallet: AccountWallet; - let logger: DebugLogger; - let teardown: () => Promise; - - let counterContract: CounterContract; - let owner: AztecAddress; - let outgoingViewer: AztecAddress; - - beforeAll(async () => { - // Setup environment - ({ teardown, wallet, logger } = await setup(1)); - owner = wallet.getAddress(); - // Setting the outgoing viewer to owner to not have to bother with setting up another account. - outgoingViewer = owner; - - counterContract = await CounterContract.deploy(wallet, 0, owner, outgoingViewer).send().deployed(); - - logger.info(`Counter contract deployed at ${counterContract.address}`); - }); - - afterAll(() => teardown()); - - describe('increments', () => { - it('counts', async () => { - const receipt = await counterContract.methods.increment(owner, outgoingViewer).send().wait(); - expect(await counterContract.methods.get_counter(owner).simulate()).toBe(1n); - expect(receipt.transactionFee).toBeGreaterThan(0n); - }); - }); -}); diff --git a/yarn-project/end-to-end/src/e2e_public_cross_chain_messaging/public_cross_chain_messaging_contract_test.ts b/yarn-project/end-to-end/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts similarity index 94% rename from yarn-project/end-to-end/src/e2e_public_cross_chain_messaging/public_cross_chain_messaging_contract_test.ts rename to yarn-project/end-to-end/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts index 9771c8403cd..6f0f889e4eb 100644 --- a/yarn-project/end-to-end/src/e2e_public_cross_chain_messaging/public_cross_chain_messaging_contract_test.ts +++ b/yarn-project/end-to-end/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts @@ -28,7 +28,7 @@ import { CrossChainTestHarness } from '../shared/cross_chain_test_harness.js'; const { E2E_DATA_PATH: dataPath } = process.env; -export class PublicCrossChainMessagingContractTest { +export class CrossChainMessagingTest { private snapshotManager: ISnapshotManager; logger: DebugLogger; wallets: AccountWallet[] = []; @@ -52,12 +52,12 @@ export class PublicCrossChainMessagingContractTest { outbox!: any; // GetContractReturnType | undefined; constructor(testName: string) { - this.logger = createDebugLogger(`aztec:e2e_public_cross_chain_messaging:${testName}`); - this.snapshotManager = createSnapshotManager(`e2e_public_cross_chain_messaging/${testName}`, dataPath); + this.logger = createDebugLogger(`aztec:e2e_cross_chain_messaging:${testName}`); + this.snapshotManager = createSnapshotManager(`e2e_cross_chain_messaging/${testName}`, dataPath); } async assumeProven() { - await this.rollup.write.setAssumeProvenUntilBlockNumber([await this.rollup.read.pendingBlockCount()]); + await this.rollup.write.setAssumeProvenThroughBlockNumber([await this.rollup.read.getPendingBlockNumber()]); } async setup() { @@ -106,7 +106,7 @@ export class PublicCrossChainMessagingContractTest { ); await this.snapshotManager.snapshot( - 'e2e_public_cross_chain_messaging', + 'e2e_cross_chain_messaging', async () => { // Create the token contract state. // Move this account thing to addAccounts above? diff --git a/yarn-project/end-to-end/src/e2e_public_cross_chain_messaging/l1_to_l2.test.ts b/yarn-project/end-to-end/src/e2e_cross_chain_messaging/l1_to_l2.test.ts similarity index 93% rename from yarn-project/end-to-end/src/e2e_public_cross_chain_messaging/l1_to_l2.test.ts rename to yarn-project/end-to-end/src/e2e_cross_chain_messaging/l1_to_l2.test.ts index 615ea99c97b..e285e94b43f 100644 --- a/yarn-project/end-to-end/src/e2e_public_cross_chain_messaging/l1_to_l2.test.ts +++ b/yarn-project/end-to-end/src/e2e_cross_chain_messaging/l1_to_l2.test.ts @@ -10,10 +10,10 @@ import { import { TestContract } from '@aztec/noir-contracts.js'; import { sendL1ToL2Message } from '../fixtures/l1_to_l2_messaging.js'; -import { PublicCrossChainMessagingContractTest } from './public_cross_chain_messaging_contract_test.js'; +import { CrossChainMessagingTest } from './cross_chain_messaging_test.js'; -describe('e2e_public_cross_chain_messaging l1_to_l2', () => { - const t = new PublicCrossChainMessagingContractTest('l1_to_l2'); +describe('e2e_cross_chain_messaging l1_to_l2', () => { + const t = new CrossChainMessagingTest('l1_to_l2'); let { crossChainTestHarness, aztecNode, user1Wallet } = t; diff --git a/yarn-project/end-to-end/src/e2e_public_cross_chain_messaging/l2_to_l1.test.ts b/yarn-project/end-to-end/src/e2e_cross_chain_messaging/l2_to_l1.test.ts similarity index 94% rename from yarn-project/end-to-end/src/e2e_public_cross_chain_messaging/l2_to_l1.test.ts rename to yarn-project/end-to-end/src/e2e_cross_chain_messaging/l2_to_l1.test.ts index 73d8b435ac3..782df6f0e9c 100644 --- a/yarn-project/end-to-end/src/e2e_public_cross_chain_messaging/l2_to_l1.test.ts +++ b/yarn-project/end-to-end/src/e2e_cross_chain_messaging/l2_to_l1.test.ts @@ -5,10 +5,10 @@ import { TestContract } from '@aztec/noir-contracts.js'; import { type Hex, decodeEventLog } from 'viem'; -import { PublicCrossChainMessagingContractTest } from './public_cross_chain_messaging_contract_test.js'; +import { CrossChainMessagingTest } from './cross_chain_messaging_test.js'; -describe('e2e_public_cross_chain_messaging l2_to_l1', () => { - const t = new PublicCrossChainMessagingContractTest('l2_to_l1'); +describe('e2e_cross_chain_messaging l2_to_l1', () => { + const t = new CrossChainMessagingTest('l2_to_l1'); let { crossChainTestHarness, aztecNode, user1Wallet, outbox } = t; diff --git a/yarn-project/end-to-end/src/e2e_public_cross_chain_messaging/failure_cases.test.ts b/yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_failure_cases.test.ts similarity index 55% rename from yarn-project/end-to-end/src/e2e_public_cross_chain_messaging/failure_cases.test.ts rename to yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_failure_cases.test.ts index 7ec54101628..afc868a2086 100644 --- a/yarn-project/end-to-end/src/e2e_public_cross_chain_messaging/failure_cases.test.ts +++ b/yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_failure_cases.test.ts @@ -3,12 +3,13 @@ import { sha256ToField } from '@aztec/foundation/crypto'; import { toFunctionSelector } from 'viem'; -import { PublicCrossChainMessagingContractTest } from './public_cross_chain_messaging_contract_test.js'; +import { NO_L1_TO_L2_MSG_ERROR } from '../fixtures/fixtures.js'; +import { CrossChainMessagingTest } from './cross_chain_messaging_test.js'; -describe('e2e_public_cross_chain_messaging failures', () => { - const t = new PublicCrossChainMessagingContractTest('failures'); +describe('e2e_cross_chain_messaging token_bridge_failure_cases', () => { + const t = new CrossChainMessagingTest('token_bridge_failure_cases'); - let { crossChainTestHarness, ethAccount, l2Bridge, user1Wallet, user2Wallet } = t; + let { crossChainTestHarness, ethAccount, l2Bridge, user1Wallet, user2Wallet, aztecNode, ownerAddress } = t; beforeAll(async () => { await t.applyBaseSnapshots(); @@ -17,6 +18,8 @@ describe('e2e_public_cross_chain_messaging failures', () => { ({ crossChainTestHarness, user1Wallet, user2Wallet } = t); ethAccount = crossChainTestHarness.ethAccount; l2Bridge = crossChainTestHarness.l2Bridge; + aztecNode = crossChainTestHarness.aztecNode; + ownerAddress = crossChainTestHarness.ownerAddress; }, 300_000); afterAll(async () => { @@ -38,7 +41,7 @@ describe('e2e_public_cross_chain_messaging failures', () => { ).rejects.toThrow(/unauthorized/); }, 60_000); - it("can't claim funds privately which were intended for public deposit from the token portal", async () => { + it("Can't claim funds privately which were intended for public deposit from the token portal", async () => { const bridgeAmount = 100n; const [secret, secretHash] = crossChainTestHarness.generateClaimSecret(); @@ -65,4 +68,37 @@ describe('e2e_public_cross_chain_messaging failures', () => { l2Bridge.withWallet(user2Wallet).methods.claim_private(secretHash, bridgeAmount, secret).prove(), ).rejects.toThrow(`No non-nullified L1 to L2 message found for message hash ${wrongMessage.hash().toString()}`); }, 60_000); + + it("Can't claim funds publicly which were intended for private deposit from the token portal", async () => { + // 1. Mint tokens on L1 + const bridgeAmount = 100n; + await crossChainTestHarness.mintTokensOnL1(bridgeAmount); + + // 2. Deposit tokens to the TokenPortal privately + const [secretForL2MessageConsumption, secretHashForL2MessageConsumption] = + crossChainTestHarness.generateClaimSecret(); + + const msgHash = await crossChainTestHarness.sendTokensToPortalPrivate( + Fr.random(), + bridgeAmount, + secretHashForL2MessageConsumption, + ); + expect(await crossChainTestHarness.getL1BalanceOf(ethAccount)).toBe(0n); + + // Wait for the message to be available for consumption + await crossChainTestHarness.makeMessageConsumable(msgHash); + + // get message leaf index, needed for claiming in public + const maybeIndexAndPath = await aztecNode.getL1ToL2MessageMembershipWitness('latest', msgHash, 0n); + expect(maybeIndexAndPath).toBeDefined(); + const messageLeafIndex = maybeIndexAndPath![0]; + + // 3. Consume L1 -> L2 message and try to mint publicly on L2 - should fail + await expect( + l2Bridge + .withWallet(user2Wallet) + .methods.claim_public(ownerAddress, bridgeAmount, secretForL2MessageConsumption, messageLeafIndex) + .prove(), + ).rejects.toThrow(NO_L1_TO_L2_MSG_ERROR); + }); }); diff --git a/yarn-project/end-to-end/src/e2e_cross_chain_messaging.test.ts b/yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_private.test.ts similarity index 59% rename from yarn-project/end-to-end/src/e2e_cross_chain_messaging.test.ts rename to yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_private.test.ts index 8ff1dca5857..e9a525a3da4 100644 --- a/yarn-project/end-to-end/src/e2e_cross_chain_messaging.test.ts +++ b/yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_private.test.ts @@ -1,81 +1,51 @@ -import { - type AccountWallet, - type AztecAddress, - type AztecNode, - type DebugLogger, - EthAddress, - Fr, - L1Actor, - L1ToL2Message, - L2Actor, - computeAuthWitMessageHash, -} from '@aztec/aztec.js'; +import { Fr, L1Actor, L1ToL2Message, L2Actor } from '@aztec/aztec.js'; import { sha256ToField } from '@aztec/foundation/crypto'; import { RollupAbi } from '@aztec/l1-artifacts'; -import { type TokenBridgeContract, type TokenContract } from '@aztec/noir-contracts.js'; import { getContract } from 'viem'; import { toFunctionSelector } from 'viem/utils'; -import { NO_L1_TO_L2_MSG_ERROR } from './fixtures/fixtures.js'; -import { setup } from './fixtures/utils.js'; -import { CrossChainTestHarness } from './shared/cross_chain_test_harness.js'; +import { CrossChainMessagingTest } from './cross_chain_messaging_test.js'; -describe('e2e_cross_chain_messaging', () => { - let aztecNode: AztecNode; - let logger: DebugLogger; - let teardown: () => Promise; +describe('e2e_cross_chain_messaging token_bridge_private', () => { + const t = new CrossChainMessagingTest('token_bridge_private'); - let user1Wallet: AccountWallet; - let user2Wallet: AccountWallet; - let ethAccount: EthAddress; - let ownerAddress: AztecAddress; - - let crossChainTestHarness: CrossChainTestHarness; - let l2Token: TokenContract; - let l2Bridge: TokenBridgeContract; - let rollup: any; + let { + crossChainTestHarness, + ethAccount, + aztecNode, + logger, + ownerAddress, + l2Bridge, + l2Token, + user1Wallet, + user2Wallet, + rollup, + } = t; beforeEach(async () => { - const { - aztecNode: aztecNode_, - pxe, - deployL1ContractsValues, - wallets, - logger: logger_, - teardown: teardown_, - } = await setup(2); - - crossChainTestHarness = await CrossChainTestHarness.new( - aztecNode_, - pxe, - deployL1ContractsValues.publicClient, - deployL1ContractsValues.walletClient, - wallets[0], - logger_, - ); + await t.applyBaseSnapshots(); + await t.setup(); + // Have to destructure again to ensure we have latest refs. + ({ crossChainTestHarness, user1Wallet, user2Wallet } = t); + ethAccount = crossChainTestHarness.ethAccount; + aztecNode = crossChainTestHarness.aztecNode; + logger = crossChainTestHarness.logger; + ownerAddress = crossChainTestHarness.ownerAddress; + l2Bridge = crossChainTestHarness.l2Bridge; + l2Token = crossChainTestHarness.l2Token; rollup = getContract({ - address: deployL1ContractsValues.l1ContractAddresses.rollupAddress.toString(), + address: crossChainTestHarness.l1ContractAddresses.rollupAddress.toString(), abi: RollupAbi, - client: deployL1ContractsValues.walletClient, + client: crossChainTestHarness.walletClient, }); - - l2Token = crossChainTestHarness.l2Token; - l2Bridge = crossChainTestHarness.l2Bridge; - ethAccount = crossChainTestHarness.ethAccount; - ownerAddress = crossChainTestHarness.ownerAddress; - user1Wallet = wallets[0]; - user2Wallet = wallets[1]; - logger = logger_; - aztecNode = aztecNode_; - teardown = teardown_; - logger.info('Successfully deployed contracts and initialized portal'); - }); + }, 300_000); afterEach(async () => { - await teardown(); + await t.teardown(); }); + // docs:start:e2e_private_cross_chain it('Privately deposit funds from L1 -> L2 and withdraw back to L1', async () => { // Generate a claim secret using pedersen @@ -134,7 +104,7 @@ describe('e2e_cross_chain_messaging', () => { ); // Since the outbox is only consumable when the block is proven, we need to set the block to be proven - await rollup.write.setAssumeProvenUntilBlockNumber([await rollup.read.pendingBlockCount()]); + await rollup.write.setAssumeProvenThroughBlockNumber([await rollup.read.getPendingBlockNumber()]); // Check balance before and after exit. expect(await crossChainTestHarness.getL1BalanceOf(ethAccount)).toBe(l1TokenBalance - bridgeAmount); @@ -148,7 +118,6 @@ describe('e2e_cross_chain_messaging', () => { }); // docs:end:e2e_private_cross_chain - // Unit tests for TokenBridge's private methods. it('Someone else can mint funds to me on my behalf (privately)', async () => { const l1TokenBalance = 1000000n; const bridgeAmount = 100n; @@ -204,60 +173,6 @@ describe('e2e_cross_chain_messaging', () => { ); await crossChainTestHarness.redeemShieldPrivatelyOnL2(bridgeAmount, secretForRedeemingMintedNotes); await crossChainTestHarness.expectPrivateBalanceOnL2(ownerAddress, bridgeAmount); - }); - - it("Bridge can't withdraw my funds if I don't give approval", async () => { - const mintAmountToUser1 = 100n; - await crossChainTestHarness.mintTokensPublicOnL2(mintAmountToUser1); - - const withdrawAmount = 9n; - const nonce = Fr.random(); - const expectedBurnMessageHash = computeAuthWitMessageHash( - { - caller: l2Bridge.address, - action: l2Token.methods.burn(user1Wallet.getAddress(), withdrawAmount, nonce).request(), - }, - { chainId: user1Wallet.getChainId(), version: user1Wallet.getVersion() }, - ); - // Should fail as owner has not given approval to bridge burn their funds. - await expect( - l2Bridge - .withWallet(user1Wallet) - .methods.exit_to_l1_private(l2Token.address, ethAccount, withdrawAmount, EthAddress.ZERO, nonce) - .prove(), - ).rejects.toThrow(`Unknown auth witness for message hash ${expectedBurnMessageHash.toString()}`); - }); - - it("Can't claim funds publicly if they were deposited privately", async () => { - // 1. Mint tokens on L1 - const bridgeAmount = 100n; - await crossChainTestHarness.mintTokensOnL1(bridgeAmount); - - // 2. Deposit tokens to the TokenPortal privately - const [secretForL2MessageConsumption, secretHashForL2MessageConsumption] = - crossChainTestHarness.generateClaimSecret(); - - const msgHash = await crossChainTestHarness.sendTokensToPortalPrivate( - Fr.random(), - bridgeAmount, - secretHashForL2MessageConsumption, - ); - expect(await crossChainTestHarness.getL1BalanceOf(ethAccount)).toBe(0n); - - // Wait for the message to be available for consumption - await crossChainTestHarness.makeMessageConsumable(msgHash); - - // get message leaf index, needed for claiming in public - const maybeIndexAndPath = await aztecNode.getL1ToL2MessageMembershipWitness('latest', msgHash, 0n); - expect(maybeIndexAndPath).toBeDefined(); - const messageLeafIndex = maybeIndexAndPath![0]; - - // 3. Consume L1 -> L2 message and try to mint publicly on L2 - should fail - await expect( - l2Bridge - .withWallet(user2Wallet) - .methods.claim_public(ownerAddress, bridgeAmount, secretForL2MessageConsumption, messageLeafIndex) - .prove(), - ).rejects.toThrow(NO_L1_TO_L2_MSG_ERROR); - }); + }), + 90_000; }); diff --git a/yarn-project/end-to-end/src/e2e_public_cross_chain_messaging/deposits.test.ts b/yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_public.test.ts similarity index 96% rename from yarn-project/end-to-end/src/e2e_public_cross_chain_messaging/deposits.test.ts rename to yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_public.test.ts index c3ca23206f4..22d44a573e9 100644 --- a/yarn-project/end-to-end/src/e2e_public_cross_chain_messaging/deposits.test.ts +++ b/yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_public.test.ts @@ -1,10 +1,10 @@ import { Fr } from '@aztec/aztec.js'; import { NO_L1_TO_L2_MSG_ERROR } from '../fixtures/fixtures.js'; -import { PublicCrossChainMessagingContractTest } from './public_cross_chain_messaging_contract_test.js'; +import { CrossChainMessagingTest } from './cross_chain_messaging_test.js'; -describe('e2e_public_cross_chain_messaging deposits', () => { - const t = new PublicCrossChainMessagingContractTest('deposits'); +describe('e2e_cross_chain_messaging token_bridge_public', () => { + const t = new CrossChainMessagingTest('token_bridge_public'); let { crossChainTestHarness, diff --git a/yarn-project/end-to-end/src/e2e_public_to_private_messaging.test.ts b/yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_public_to_private.test.ts similarity index 68% rename from yarn-project/end-to-end/src/e2e_public_to_private_messaging.test.ts rename to yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_public_to_private.test.ts index 6b7ac9451ae..5b1086c095c 100644 --- a/yarn-project/end-to-end/src/e2e_public_to_private_messaging.test.ts +++ b/yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_public_to_private.test.ts @@ -1,50 +1,28 @@ -import { type AztecAddress, type AztecNode, type DebugLogger, type EthAddress } from '@aztec/aztec.js'; +import { CrossChainMessagingTest } from './cross_chain_messaging_test.js'; -import { setup } from './fixtures/utils.js'; -import { CrossChainTestHarness } from './shared/cross_chain_test_harness.js'; +describe('e2e_cross_chain_messaging token_bridge_public_to_private', () => { + const t = new CrossChainMessagingTest('token_bridge_public_to_private'); -describe('e2e_public_to_private_messaging', () => { - let logger: DebugLogger; - let teardown: () => Promise; - - let aztecNode: AztecNode; - let ethAccount: EthAddress; + let { crossChainTestHarness, ethAccount, aztecNode, ownerAddress } = t; let underlyingERC20: any; - let ownerAddress: AztecAddress; - let crossChainTestHarness: CrossChainTestHarness; beforeEach(async () => { - const { - aztecNode: aztecNode_, - pxe, - deployL1ContractsValues, - wallet, - logger: logger_, - teardown: teardown_, - } = await setup(2); - crossChainTestHarness = await CrossChainTestHarness.new( - aztecNode_, - pxe, - deployL1ContractsValues.publicClient, - deployL1ContractsValues.walletClient, - wallet, - logger_, - ); + await t.applyBaseSnapshots(); + await t.setup(); + // Have to destructure again to ensure we have latest refs. + ({ crossChainTestHarness } = t); - aztecNode = crossChainTestHarness.aztecNode; ethAccount = crossChainTestHarness.ethAccount; + aztecNode = crossChainTestHarness.aztecNode; ownerAddress = crossChainTestHarness.ownerAddress; underlyingERC20 = crossChainTestHarness.underlyingERC20; - - teardown = teardown_; - logger = logger_; - logger.info('Successfully deployed contracts and initialized portal'); - }); + }, 300_000); afterEach(async () => { - await teardown(); + await t.teardown(); }); + // Moved from e2e_public_to_private_messaging.test.ts it('Milestone 5.4: Should be able to create a commitment in a public function and spend in a private function', async () => { // Generate a claim secret using pedersen const l1TokenBalance = 1000000n; diff --git a/yarn-project/end-to-end/src/e2e_deploy_contract/deploy_method.test.ts b/yarn-project/end-to-end/src/e2e_deploy_contract/deploy_method.test.ts index 5daa7a72611..cebc961785b 100644 --- a/yarn-project/end-to-end/src/e2e_deploy_contract/deploy_method.test.ts +++ b/yarn-project/end-to-end/src/e2e_deploy_contract/deploy_method.test.ts @@ -1,4 +1,5 @@ -import { AztecAddress, type DebugLogger, type PXE, type Wallet } from '@aztec/aztec.js'; +import { getDeployedTestAccountsWallets } from '@aztec/accounts/testing'; +import { AztecAddress, type DebugLogger, type PXE, type Wallet, createPXEClient, makeFetch } from '@aztec/aztec.js'; import { CounterContract, StatefulTestContract } from '@aztec/noir-contracts.js'; import { TestContract } from '@aztec/noir-contracts.js/Test'; import { TokenContract } from '@aztec/noir-contracts.js/Token'; @@ -98,4 +99,18 @@ describe('e2e_deploy_contract deploy method', () => { it.skip('publicly deploys and calls a public function in a tx in the same block', async () => { // TODO(@spalladino): Requires being able to read a nullifier on the same block it was emitted. }); + + describe('regressions', () => { + it('fails properly when trying to deploy a contract with a failing constructor with a pxe client with retries', async () => { + const { PXE_URL } = process.env; + if (!PXE_URL) { + return; + } + const pxeClient = createPXEClient(PXE_URL, makeFetch([1, 2, 3], false)); + const [wallet] = await getDeployedTestAccountsWallets(pxeClient); + await expect( + StatefulTestContract.deployWithOpts({ wallet, method: 'wrong_constructor' }).send().deployed(), + ).rejects.toThrow(/Unknown function/); + }); + }); }); diff --git a/yarn-project/end-to-end/src/e2e_deploy_contract/regressions.test.ts b/yarn-project/end-to-end/src/e2e_deploy_contract/regressions.test.ts deleted file mode 100644 index 729ed976450..00000000000 --- a/yarn-project/end-to-end/src/e2e_deploy_contract/regressions.test.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { getDeployedTestAccountsWallets } from '@aztec/accounts/testing'; -import { createPXEClient, makeFetch } from '@aztec/aztec.js'; -import { StatefulTestContract } from '@aztec/noir-contracts.js'; - -import { DeployTest } from './deploy_test.js'; - -describe('e2e_deploy_contract regressions', () => { - const t = new DeployTest('regressions'); - - beforeAll(async () => { - await t.setup(); - }); - - afterAll(() => t.teardown()); - - it('fails properly when trying to deploy a contract with a failing constructor with a pxe client with retries', async () => { - const { PXE_URL } = process.env; - if (!PXE_URL) { - return; - } - const pxeClient = createPXEClient(PXE_URL, makeFetch([1, 2, 3], false)); - const [wallet] = await getDeployedTestAccountsWallets(pxeClient); - await expect( - StatefulTestContract.deployWithOpts({ wallet, method: 'wrong_constructor' }).send().deployed(), - ).rejects.toThrow(/Unknown function/); - }); -}); diff --git a/yarn-project/end-to-end/src/e2e_event_logs.test.ts b/yarn-project/end-to-end/src/e2e_event_logs.test.ts index 576a8f2da17..f436552613f 100644 --- a/yarn-project/end-to-end/src/e2e_event_logs.test.ts +++ b/yarn-project/end-to-end/src/e2e_event_logs.test.ts @@ -65,15 +65,15 @@ describe('Logs', () => { expect(decryptedLog0?.payload.contractAddress).toStrictEqual(testLogContract.address); expect(decryptedLog0?.payload.randomness).toStrictEqual(randomness[0]); expect(decryptedLog0?.payload.eventTypeId).toStrictEqual( - EventSelector.fromField(new Fr(0x00000000000000000000000000000000000000000000000000000000aa533f60)), + EventSelector.fromSignature('ExampleEvent0(Field,Field)'), ); // We decode our event into the event type const event0 = TestLogContract.events.ExampleEvent0.decode(decryptedLog0!.payload); // We check that the event was decoded correctly - expect(event0?.value0).toStrictEqual(preimage[0]); - expect(event0?.value1).toStrictEqual(preimage[1]); + expect(event0?.value0).toStrictEqual(preimage[0].toBigInt()); + expect(event0?.value1).toStrictEqual(preimage[1].toBigInt()); // We check that an event that does not match, is not decoded correctly due to an event type id mismatch const badEvent0 = TestLogContract.events.ExampleEvent1.decode(decryptedLog0!.payload); @@ -89,7 +89,7 @@ describe('Logs', () => { expect(decryptedLog1?.payload.contractAddress).toStrictEqual(testLogContract.address); expect(decryptedLog1?.payload.randomness).toStrictEqual(randomness[1]); expect(decryptedLog1?.payload.eventTypeId).toStrictEqual( - EventSelector.fromField(new Fr(0x00000000000000000000000000000000000000000000000000000000d1be0447)), + EventSelector.fromSignature('ExampleEvent1((Field),u8)'), ); // We check our second event, which is a different type @@ -98,7 +98,7 @@ describe('Logs', () => { // We expect the fields to have been populated correctly expect(event1?.value2).toStrictEqual(preimage[2]); // We get the last byte here because value3 is of type u8 - expect(event1?.value3).toStrictEqual(new Fr(preimage[3].toBuffer().subarray(31))); + expect(event1?.value3).toStrictEqual(BigInt(preimage[3].toBuffer().subarray(31).readUint8())); // Again, trying to decode another event with mismatching data does not yield anything const badEvent1 = TestLogContract.events.ExampleEvent0.decode(decryptedLog1!.payload); @@ -177,11 +177,15 @@ describe('Logs', () => { const exampleEvent0Sort = (a: ExampleEvent0, b: ExampleEvent0) => (a.value0 > b.value0 ? 1 : -1); expect(collectedEvent0sWithIncoming.sort(exampleEvent0Sort)).toStrictEqual( - preimage.map(preimage => ({ value0: preimage[0], value1: preimage[1] })).sort(exampleEvent0Sort), + preimage + .map(preimage => ({ value0: preimage[0].toBigInt(), value1: preimage[1].toBigInt() })) + .sort(exampleEvent0Sort), ); expect(collectedEvent0sWithOutgoing.sort(exampleEvent0Sort)).toStrictEqual( - preimage.map(preimage => ({ value0: preimage[0], value1: preimage[1] })).sort(exampleEvent0Sort), + preimage + .map(preimage => ({ value0: preimage[0].toBigInt(), value1: preimage[1].toBigInt() })) + .sort(exampleEvent0Sort), ); expect([...collectedEvent0sWithIncoming, ...collectedEvent0sWithOutgoing].sort(exampleEvent0Sort)).toStrictEqual( @@ -194,7 +198,7 @@ describe('Logs', () => { .map(preimage => ({ value2: preimage[2], // We get the last byte here because value3 is of type u8 - value3: new Fr(preimage[3].toBuffer().subarray(31)), + value3: BigInt(preimage[3].toBuffer().subarray(31).readUint8()), })) .sort(exampleEvent1Sort), ); @@ -229,7 +233,9 @@ describe('Logs', () => { const exampleEvent0Sort = (a: ExampleEvent0, b: ExampleEvent0) => (a.value0 > b.value0 ? 1 : -1); expect(collectedEvent0s.sort(exampleEvent0Sort)).toStrictEqual( - preimage.map(preimage => ({ value0: preimage[0], value1: preimage[1] })).sort(exampleEvent0Sort), + preimage + .map(preimage => ({ value0: preimage[0].toBigInt(), value1: preimage[1].toBigInt() })) + .sort(exampleEvent0Sort), ); const exampleEvent1Sort = (a: ExampleEvent1, b: ExampleEvent1) => (a.value2 > b.value2 ? 1 : -1); @@ -238,7 +244,7 @@ describe('Logs', () => { .map(preimage => ({ value2: preimage[2], // We get the last byte here because value3 is of type u8 - value3: new Fr(preimage[3].toBuffer().subarray(31)), + value3: BigInt(preimage[3].toBuffer().subarray(31).readUint8()), })) .sort(exampleEvent1Sort), ); diff --git a/yarn-project/end-to-end/src/e2e_fees/private_refunds.test.ts b/yarn-project/end-to-end/src/e2e_fees/private_refunds.test.ts index 33f8cafae20..2b6f84a92a2 100644 --- a/yarn-project/end-to-end/src/e2e_fees/private_refunds.test.ts +++ b/yarn-project/end-to-end/src/e2e_fees/private_refunds.test.ts @@ -87,7 +87,8 @@ describe('e2e_fees/private_refunds', () => { // the randomness. const refundNoteValue = t.gasSettings.getFeeLimit().sub(new Fr(transactionFee!)); const aliceNpkMHash = t.aliceWallet.getCompleteAddress().publicKeys.masterNullifierPublicKey.hash(); - const aliceRefundNote = new Note([refundNoteValue, aliceNpkMHash, aliceRandomness]); + // Amount has lo and hi limbs, hence the 0. + const aliceRefundNote = new Note([refundNoteValue, Fr.ZERO, aliceNpkMHash, aliceRandomness]); // 5. If the refund flow worked it should have added emitted a note hash of the note we constructed above and we // should be able to add the note to our PXE. Just calling `pxe.addNote(...)` is enough of a check that the note @@ -110,7 +111,8 @@ describe('e2e_fees/private_refunds', () => { // Note that FPC emits randomness as unencrypted log and the tx fee is publicly know so Bob is able to reconstruct // his note just from on-chain data. const bobNpkMHash = t.bobWallet.getCompleteAddress().publicKeys.masterNullifierPublicKey.hash(); - const bobFeeNote = new Note([new Fr(transactionFee!), bobNpkMHash, bobRandomness]); + // Amount has lo and hi limbs, hence the 0. + const bobFeeNote = new Note([new Fr(transactionFee!), Fr.ZERO, bobNpkMHash, bobRandomness]); // 7. Once again we add the note to PXE which computes the note hash and checks that it is in the note hash tree. // TODO(#8238): Implement proper note delivery diff --git a/yarn-project/end-to-end/src/e2e_key_registry.test.ts b/yarn-project/end-to-end/src/e2e_key_registry.test.ts deleted file mode 100644 index 82bd3303ee7..00000000000 --- a/yarn-project/end-to-end/src/e2e_key_registry.test.ts +++ /dev/null @@ -1,165 +0,0 @@ -import { type AccountWallet, AztecAddress, Fr, type PXE } from '@aztec/aztec.js'; -import { CompleteAddress, Point, PublicKeys } from '@aztec/circuits.js'; -import { KeyRegistryContract, TestContract } from '@aztec/noir-contracts.js'; -import { getCanonicalKeyRegistryAddress } from '@aztec/protocol-contracts/key-registry'; - -import { jest } from '@jest/globals'; - -import { publicDeployAccounts, setup } from './fixtures/utils.js'; - -const TIMEOUT = 120_000; - -describe('Key Registry', () => { - let keyRegistry: KeyRegistryContract; - - let pxe: PXE; - let testContract: TestContract; - jest.setTimeout(TIMEOUT); - - let wallets: AccountWallet[]; - - let teardown: () => Promise; - - const account = CompleteAddress.random(); - - beforeAll(async () => { - ({ teardown, pxe, wallets } = await setup(2)); - keyRegistry = await KeyRegistryContract.at(getCanonicalKeyRegistryAddress(), wallets[0]); - - testContract = await TestContract.deploy(wallets[0]).send().deployed(); - - await publicDeployAccounts(wallets[0], wallets.slice(0, 2)); - }); - - afterAll(() => teardown()); - - describe('failure cases', () => { - it('throws when address preimage check fails', async () => { - // First we get invalid keys by replacing any of the 8 fields of public keys with a random value - let invalidPublicKeys: PublicKeys; - { - // We call toBuffer and fromBuffer first to ensure that we get a deep copy - const publicKeysFields = PublicKeys.fromBuffer(account.publicKeys.toBuffer()).toFields(); - const nonIsInfiniteIndices = [0, 1, 3, 4, 6, 7, 9, 10]; - const randomIndex = nonIsInfiniteIndices[Math.floor(Math.random() * nonIsInfiniteIndices.length)]; - - publicKeysFields[randomIndex] = Fr.random(); - - invalidPublicKeys = PublicKeys.fromFields(publicKeysFields); - } - - await expect( - keyRegistry - .withWallet(wallets[0]) - .methods.register_initial_keys( - account, - account.partialAddress, - // TODO(#6337): Make calling `toNoirStruct()` unnecessary - invalidPublicKeys.toNoirStruct(), - ) - .send() - .wait(), - ).rejects.toThrow('Computed address does not match supplied address'); - }); - - it('should fail when we try to rotate keys for another address without authwit', async () => { - await expect( - keyRegistry - .withWallet(wallets[0]) - .methods.rotate_npk_m(wallets[1].getAddress(), Point.random().toWrappedNoirStruct(), Fr.ZERO) - .simulate(), - ).rejects.toThrow(/unauthorized/); - }); - - it('fresh key lib fails for non-existent account', async () => { - // Should fail as the contract is not registered in key registry - - const randomAddress = AztecAddress.random(); - const randomMasterNullifierPublicKey = Point.random(); - - await expect( - testContract.methods - .test_nullifier_key_freshness(randomAddress, randomMasterNullifierPublicKey.toNoirStruct()) - .send() - .wait(), - ).rejects.toThrow(/No public key registered for address/); - }); - }); - - it('fresh key lib succeeds for non-registered account available in PXE', async () => { - const newAccountCompleteAddress = CompleteAddress.random(); - await pxe.registerRecipient(newAccountCompleteAddress); - - // Should succeed as the account is now registered as a recipient in PXE - await testContract.methods - .test_nullifier_key_freshness( - newAccountCompleteAddress.address, - newAccountCompleteAddress.publicKeys.masterNullifierPublicKey.toNoirStruct(), - ) - .send() - .wait(); - }); - - describe('key registration flow', () => { - it('registers', async () => { - await keyRegistry - .withWallet(wallets[0]) - .methods.register_initial_keys( - account, - account.partialAddress, - // TODO(#6337): Make calling `toNoirStruct()` unnecessary - account.publicKeys.toNoirStruct(), - ) - .send() - .wait(); - - // Should succeed as the account is registered in key registry from tests before - await testContract.methods - .test_nullifier_key_freshness(account, account.publicKeys.masterNullifierPublicKey.toNoirStruct()) - .send() - .wait(); - }); - }); - - describe('key rotation flows', () => { - const firstNewMasterNullifierPublicKey = Point.random(); - const secondNewMasterNullifierPublicKey = Point.random(); - - it('rotates npk_m', async () => { - // docs:start:key-rotation - await keyRegistry - .withWallet(wallets[0]) - .methods.rotate_npk_m(wallets[0].getAddress(), firstNewMasterNullifierPublicKey.toWrappedNoirStruct(), Fr.ZERO) - .send() - .wait(); - // docs:end:key-rotation - - await testContract.methods - .test_nullifier_key_freshness(wallets[0].getAddress(), firstNewMasterNullifierPublicKey.toNoirStruct()) - .send() - .wait(); - }); - - it(`rotates npk_m with authwit`, async () => { - const action = keyRegistry - .withWallet(wallets[1]) - .methods.rotate_npk_m( - wallets[0].getAddress(), - secondNewMasterNullifierPublicKey.toWrappedNoirStruct(), - Fr.ZERO, - ); - - await wallets[0] - .setPublicAuthWit({ caller: wallets[1].getCompleteAddress().address, action }, true) - .send() - .wait(); - - await action.send().wait(); - - await testContract.methods - .test_nullifier_key_freshness(wallets[0].getAddress(), secondNewMasterNullifierPublicKey.toNoirStruct()) - .send() - .wait(); - }); - }); -}); diff --git a/yarn-project/end-to-end/src/e2e_key_rotation.test.ts b/yarn-project/end-to-end/src/e2e_key_rotation.test.ts deleted file mode 100644 index a6cbf6ad3e7..00000000000 --- a/yarn-project/end-to-end/src/e2e_key_rotation.test.ts +++ /dev/null @@ -1,236 +0,0 @@ -import { createAccounts } from '@aztec/accounts/testing'; -import { - type AztecAddress, - type AztecNode, - type DebugLogger, - ExtendedNote, - Fq, - Fr, - Note, - type PXE, - type TxHash, - type Wallet, - computeSecretHash, - retryUntil, -} from '@aztec/aztec.js'; -// docs:start:imports -import { type PublicKey, derivePublicKeyFromSecretKey } from '@aztec/circuits.js'; -import { TestContract, TokenContract } from '@aztec/noir-contracts.js'; - -// docs:end:imports -import { jest } from '@jest/globals'; - -import { expectsNumOfNoteEncryptedLogsInTheLastBlockToBe, setup, setupPXEService } from './fixtures/utils.js'; - -const TIMEOUT = 120_000; - -const SHARED_MUTABLE_DELAY = 5; - -describe('e2e_key_rotation', () => { - jest.setTimeout(TIMEOUT); - - let aztecNode: AztecNode; - let pxeA: PXE; - let pxeB: PXE; - let walletA: Wallet; - let walletB: Wallet; - let logger: DebugLogger; - let teardownA: () => Promise; - let teardownB: () => Promise; - - let testContract: TestContract; - let contractWithWalletA: TokenContract; - let contractWithWalletB: TokenContract; - - let tokenAddress: AztecAddress; - - const initialBalance = 987n; - - beforeAll(async () => { - ({ - aztecNode, - pxe: pxeA, - wallets: [walletA], - logger, - teardown: teardownA, - } = await setup(1)); - - ({ pxe: pxeB, teardown: teardownB } = await setupPXEService(aztecNode, {}, undefined, true)); - [walletB] = await createAccounts(pxeB, 1); - - // We deploy test and token contracts - testContract = await TestContract.deploy(walletA).send().deployed(); - const tokenInstance = await deployTokenContract(initialBalance, walletA.getAddress(), pxeA); - tokenAddress = tokenInstance.address; - - // Add account B to wallet A - await pxeA.registerRecipient(walletB.getCompleteAddress()); - // Add account A to wallet B - await pxeB.registerRecipient(walletA.getCompleteAddress()); - - // Add token to PXE B (PXE A already has it because it was deployed through it) - await pxeB.registerContract({ - artifact: TokenContract.artifact, - instance: tokenInstance, - }); - - contractWithWalletA = await TokenContract.at(tokenAddress, walletA); - contractWithWalletB = await TokenContract.at(tokenAddress, walletB); - }); - - afterEach(async () => { - await teardownB(); - await teardownA(); - }); - - const awaitUserSynchronized = async (wallet: Wallet, owner: AztecAddress) => { - const isUserSynchronized = async () => { - return await wallet.isAccountStateSynchronized(owner); - }; - await retryUntil(isUserSynchronized, `synch of user ${owner.toString()}`, 10); - }; - - const crossDelay = async () => { - for (let i = 0; i < SHARED_MUTABLE_DELAY; i++) { - // We send arbitrary tx to mine a block - await testContract.methods.emit_unencrypted(0).send().wait(); - } - }; - - const expectTokenBalance = async ( - wallet: Wallet, - tokenAddress: AztecAddress, - owner: AztecAddress, - expectedBalance: bigint, - checkIfSynchronized = true, - ) => { - if (checkIfSynchronized) { - // First wait until the corresponding PXE has synchronized the account - await awaitUserSynchronized(wallet, owner); - } - - // Then check the balance - const contractWithWallet = await TokenContract.at(tokenAddress, wallet); - const balance = await contractWithWallet.methods.balance_of_private(owner).simulate({ from: owner }); - logger.info(`Account ${owner} balance: ${balance}`); - expect(balance).toBe(expectedBalance); - }; - - const deployTokenContract = async (initialAdminBalance: bigint, admin: AztecAddress, pxe: PXE) => { - logger.info(`Deploying Token contract...`); - const contract = await TokenContract.deploy(walletA, admin, 'TokenName', 'TokenSymbol', 18).send().deployed(); - - if (initialAdminBalance > 0n) { - await mintTokens(contract, admin, initialAdminBalance, pxe); - } - - logger.info('L2 contract deployed'); - - return contract.instance; - }; - - const mintTokens = async (contract: TokenContract, recipient: AztecAddress, balance: bigint, pxe: PXE) => { - const secret = Fr.random(); - const secretHash = computeSecretHash(secret); - - const receipt = await contract.methods.mint_private(balance, secretHash).send().wait(); - - const note = new Note([new Fr(balance), secretHash]); - const extendedNote = new ExtendedNote( - note, - recipient, - contract.address, - TokenContract.storage.pending_shields.slot, - TokenContract.notes.TransparentNote.id, - receipt.txHash, - ); - await pxe.addNote(extendedNote); - - await contract.methods.redeem_shield(recipient, balance, secret).send().wait(); - }; - - it(`Rotates keys and uses them`, async () => { - // 1. We check that setup set initial balances as expected - await expectTokenBalance(walletA, tokenAddress, walletA.getAddress(), initialBalance); - await expectTokenBalance(walletB, tokenAddress, walletB.getAddress(), 0n); - - // 2. Transfer funds from A to B via PXE A - let txHashTransfer1: TxHash; - const transfer1Amount = 654n; - { - ({ txHash: txHashTransfer1 } = await contractWithWalletA.methods - .transfer(walletB.getAddress(), transfer1Amount) - .send() - .wait()); - - // Check balances and logs are as expected - await expectTokenBalance(walletA, tokenAddress, walletA.getAddress(), initialBalance - transfer1Amount); - await expectTokenBalance(walletB, tokenAddress, walletB.getAddress(), transfer1Amount); - await expectsNumOfNoteEncryptedLogsInTheLastBlockToBe(aztecNode, 2); - } - - // 3. Rotates B key - let newNpkM: PublicKey; - { - // docs:start:create_keys - const newNskM = Fq.random(); - newNpkM = derivePublicKeyFromSecretKey(newNskM); - // docs:end:create_keys - - // docs:start:rotateNullifierKeys - // This function saves the new nullifier secret key for the account in our PXE, - // and calls the key registry with the derived nullifier public key. - await walletB.rotateNullifierKeys(newNskM); - // docs:end:rotateNullifierKeys - await crossDelay(); - } - - // 4. Transfer funds from A to B via PXE A - let txHashTransfer2: TxHash; - const transfer2Amount = 321n; - { - ({ txHash: txHashTransfer2 } = await contractWithWalletA.methods - .transfer(walletB.getAddress(), transfer2Amount) - .send() - .wait()); - - await expectTokenBalance( - walletA, - tokenAddress, - walletA.getAddress(), - initialBalance - transfer1Amount - transfer2Amount, - ); - await expectTokenBalance(walletB, tokenAddress, walletB.getAddress(), transfer1Amount + transfer2Amount); - } - - // 5. Now we check that a correct nullifier keys were used in both transfers - { - await awaitUserSynchronized(walletB, walletB.getAddress()); - const transfer1Notes = await walletB.getIncomingNotes({ txHash: txHashTransfer1 }); - const transfer2Notes = await walletB.getIncomingNotes({ txHash: txHashTransfer2 }); - expect(transfer1Notes.length).toBe(1); - expect(transfer2Notes.length).toBe(1); - // Second field in the token note is the npk_m_hash - const noteNpkMHashTransfer1 = transfer1Notes[0].note.items[1]; - const noteNpkMHashTransfer2 = transfer2Notes[0].note.items[1]; - - // Now we check the note created in transfer 2 used the new npk_m_hash - expect(noteNpkMHashTransfer2.equals(newNpkM.hash())).toBe(true); - // We sanity check that the note created in transfer 1 had old npk_m_hash by checking it's different from the new - // one - expect(noteNpkMHashTransfer2.equals(noteNpkMHashTransfer1)).toBe(false); - } - - // 6. Finally we check that all the B notes are spendable by transferring full B balance to A - // --> this way we verify that it's possible to obtain both keys via oracles - { - await contractWithWalletB.methods - .transfer(walletA.getAddress(), transfer1Amount + transfer2Amount) - .send() - .wait(); - - await expectTokenBalance(walletA, tokenAddress, walletA.getAddress(), initialBalance); - await expectTokenBalance(walletB, tokenAddress, walletB.getAddress(), 0n); - } - }, 600_000); -}); diff --git a/yarn-project/end-to-end/src/e2e_keys.test.ts b/yarn-project/end-to-end/src/e2e_keys.test.ts index 70f74471fca..b8962a0d203 100644 --- a/yarn-project/end-to-end/src/e2e_keys.test.ts +++ b/yarn-project/end-to-end/src/e2e_keys.test.ts @@ -27,7 +27,7 @@ import { setup } from './fixtures/utils.js'; const TIMEOUT = 120_000; -describe('Key Registry', () => { +describe('Keys', () => { jest.setTimeout(TIMEOUT); let aztecNode: AztecNode; @@ -63,9 +63,8 @@ describe('Key Registry', () => { // There are some examples where the action is fully hidden though. One of those examples is shielding where you // instantly consume the note after creating it. In this case, the nullifier is never emitted and hence the action // is impossible to detect with this scheme. - // Another example is a withdraw is withdrawing from DeFi and then immediately spending the funds. In this case, - // we would need nsk_app and the contract address of the DeFi contract to detect the nullification of the initial - // note. + // Another example is withdrawing from DeFi and then immediately spending the funds. In this case, we would + // need nsk_app and the contract address of the DeFi contract to detect the nullification of the initial note. it('nsk_app and contract address are enough to detect note nullification', async () => { const masterNullifierSecretKey = deriveMasterNullifierSecretKey(secret); const nskApp = computeAppNullifierSecretKey(masterNullifierSecretKey, testContract.address); diff --git a/yarn-project/end-to-end/src/e2e_lending_contract.test.ts b/yarn-project/end-to-end/src/e2e_lending_contract.test.ts index 821d30fdd8c..9938cc6470b 100644 --- a/yarn-project/end-to-end/src/e2e_lending_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_lending_contract.test.ts @@ -11,7 +11,7 @@ import { import { RollupAbi } from '@aztec/l1-artifacts'; import { LendingContract, PriceFeedContract, TokenContract } from '@aztec/noir-contracts.js'; -import { jest } from '@jest/globals'; +import { afterAll, jest } from '@jest/globals'; import { getContract } from 'viem'; import { publicDeployAccounts, setup } from './fixtures/utils.js'; @@ -71,7 +71,7 @@ describe('e2e_lending_contract', () => { const rollup = getContract({ address: deployL1ContractsValues.l1ContractAddresses.rollupAddress.toString(), abi: RollupAbi, - client: deployL1ContractsValues.publicClient, + client: deployL1ContractsValues.walletClient, }); lendingAccount = new LendingAccount(wallet.getAddress(), new Fr(42)); diff --git a/yarn-project/end-to-end/src/e2e_nft.test.ts b/yarn-project/end-to-end/src/e2e_nft.test.ts new file mode 100644 index 00000000000..36cba60c70b --- /dev/null +++ b/yarn-project/end-to-end/src/e2e_nft.test.ts @@ -0,0 +1,164 @@ +import { type AccountWallet, AztecAddress, BatchCall, ExtendedNote, Fr, Note } from '@aztec/aztec.js'; +import { deriveStorageSlotInMap } from '@aztec/circuits.js/hash'; +import { pedersenHash } from '@aztec/foundation/crypto'; +import { NFTContract } from '@aztec/noir-contracts.js'; + +import { jest } from '@jest/globals'; + +import { setup } from './fixtures/utils.js'; + +const TIMEOUT = 120_000; + +// This is a very simple test checking only the happy path. More complete tests of the NFT are implemented with TXE. +// This test is only kept around to check that public data writes are squashed as expected. +describe('NFT', () => { + jest.setTimeout(TIMEOUT); + + let teardown: () => Promise; + + let adminWallet: AccountWallet; + let minterWallet: AccountWallet; + let user1Wallet: AccountWallet; + let user2Wallet: AccountWallet; + + let nftContractAddress: AztecAddress; + + // Arbitrary token id + const TOKEN_ID = Fr.random().toBigInt(); + const TRANSIENT_STORAGE_SLOT_PEDERSEN_INDEX = 3; + + beforeAll(async () => { + let wallets: AccountWallet[]; + ({ teardown, wallets } = await setup(4)); + [adminWallet, minterWallet, user1Wallet, user2Wallet] = wallets; + + const nftContract = await NFTContract.deploy(adminWallet, adminWallet.getAddress(), 'FROG', 'FRG') + .send() + .deployed(); + nftContractAddress = nftContract.address; + }); + + afterAll(() => teardown()); + + // NOTE: This test is sequential and each test case depends on the previous one + it('sets minter', async () => { + const nftContractAsAdmin = await NFTContract.at(nftContractAddress, adminWallet); + + await nftContractAsAdmin.methods.set_minter(minterWallet.getAddress(), true).send().wait(); + const isMinterAMinter = await nftContractAsAdmin.methods.is_minter(minterWallet.getAddress()).simulate(); + expect(isMinterAMinter).toBe(true); + }); + + it('minter mints to a user', async () => { + const nftContractAsMinter = await NFTContract.at(nftContractAddress, minterWallet); + + await nftContractAsMinter.methods.mint(user1Wallet.getAddress(), TOKEN_ID).send().wait(); + + const ownerAfterMint = await nftContractAsMinter.methods.owner_of(TOKEN_ID).simulate(); + expect(ownerAfterMint).toEqual(user1Wallet.getAddress()); + }); + + it('transfers to private', async () => { + const nftContractAsUser1 = await NFTContract.at(nftContractAddress, user1Wallet); + + // In a simple "shield" flow the sender and recipient are the same. In the "uniswap swap to private" flow + // it would be the uniswap contract. + const recipient = user1Wallet.getAddress(); + const sender = recipient; + const noteRandomness = Fr.random(); + const transientStorageSlotRandomness = Fr.random(); + const transferPreparerStorageSlotCommitment = pedersenHash( + [user1Wallet.getAddress(), transientStorageSlotRandomness], + TRANSIENT_STORAGE_SLOT_PEDERSEN_INDEX, + ); + + const { txHash, debugInfo } = await new BatchCall(user1Wallet, [ + nftContractAsUser1.methods + .prepare_transfer_to_private(sender, recipient, noteRandomness, transientStorageSlotRandomness) + .request(), + nftContractAsUser1.methods + .finalize_transfer_to_private(TOKEN_ID, transferPreparerStorageSlotCommitment) + .request(), + ]) + .send() + .wait({ debug: true }); + + const publicOwnerAfter = await nftContractAsUser1.methods.owner_of(TOKEN_ID).simulate(); + expect(publicOwnerAfter).toEqual(AztecAddress.ZERO); + + // TODO(#8238): Since we don't yet have a partial note delivery we have to manually add it to PXE + const nftNote = new Note([ + new Fr(TOKEN_ID), + user1Wallet.getCompleteAddress().publicKeys.masterNullifierPublicKey.hash(), + noteRandomness, + ]); + + await user1Wallet.addNote( + new ExtendedNote( + nftNote, + user1Wallet.getAddress(), + nftContractAsUser1.address, + deriveStorageSlotInMap(NFTContract.storage.private_nfts.slot, user1Wallet.getAddress()), + NFTContract.notes.NFTNote.id, + txHash, + ), + ); + + // We should get 4 data writes setting values to 0 - 3 for note hiding point and 1 for public owner (we transfer + // to private so public owner is set to 0). Ideally we would have here only 1 data write as the 4 values change + // from zero to non-zero to zero in the tx and hence no write could be committed. This makes public writes + // squashing too expensive for transient storage. This however probably does not matter as I assume we will want + // to implement a real transient storage anyway. (Informed Leila about the potential optimization.) + const publicDataWritesValues = debugInfo!.publicDataWrites!.map(write => write.newValue.toBigInt()); + expect(publicDataWritesValues).toEqual([0n, 0n, 0n, 0n]); + }); + + it('transfers in private', async () => { + const nftContractAsUser1 = await NFTContract.at(nftContractAddress, user1Wallet); + + await nftContractAsUser1.methods + .transfer_in_private(user1Wallet.getAddress(), user2Wallet.getAddress(), TOKEN_ID, 0) + .send() + .wait(); + + const user1Nfts = await getPrivateNfts(user1Wallet.getAddress()); + expect(user1Nfts).toEqual([]); + + const user2Nfts = await getPrivateNfts(user2Wallet.getAddress()); + expect(user2Nfts).toEqual([TOKEN_ID]); + }); + + it('transfers to public', async () => { + const nftContractAsUser2 = await NFTContract.at(nftContractAddress, user2Wallet); + + await nftContractAsUser2.methods + .transfer_to_public(user2Wallet.getAddress(), user2Wallet.getAddress(), TOKEN_ID, 0) + .send() + .wait(); + + const publicOwnerAfter = await nftContractAsUser2.methods.owner_of(TOKEN_ID).simulate(); + expect(publicOwnerAfter).toEqual(user2Wallet.getAddress()); + }); + + it('transfers in public', async () => { + const nftContractAsUser2 = await NFTContract.at(nftContractAddress, user2Wallet); + + await nftContractAsUser2.methods + .transfer_in_public(user2Wallet.getAddress(), user1Wallet.getAddress(), TOKEN_ID, 0) + .send() + .wait(); + + const publicOwnerAfter = await nftContractAsUser2.methods.owner_of(TOKEN_ID).simulate(); + expect(publicOwnerAfter).toEqual(user1Wallet.getAddress()); + }); + + const getPrivateNfts = async (owner: AztecAddress) => { + const nftContractAsUser1 = await NFTContract.at(nftContractAddress, user1Wallet); + const [nfts, pageLimitReached] = await nftContractAsUser1.methods.get_private_nfts(owner, 0).simulate(); + if (pageLimitReached) { + throw new Error('Page limit reached and pagination not implemented in test'); + } + // We prune placeholder values + return nfts.filter((tokenId: bigint) => tokenId !== 0n); + }; +}); diff --git a/yarn-project/end-to-end/src/e2e_outbox.test.ts b/yarn-project/end-to-end/src/e2e_outbox.test.ts index 2317447e9a9..a3eb8fb43a6 100644 --- a/yarn-project/end-to-end/src/e2e_outbox.test.ts +++ b/yarn-project/end-to-end/src/e2e_outbox.test.ts @@ -100,7 +100,7 @@ describe('E2E Outbox Tests', () => { // Outbox L1 tests // Since the outbox is only consumable when the block is proven, we need to set the block to be proven - await rollup.write.setAssumeProvenUntilBlockNumber([1 + (txReceipt.blockNumber ?? 0)]); + await rollup.write.setAssumeProvenThroughBlockNumber([txReceipt.blockNumber ?? 0]); // Check L1 has expected message tree const [l1Root, l1MinHeight] = await outbox.read.getRootData([txReceipt.blockNumber]); @@ -218,7 +218,7 @@ describe('E2E Outbox Tests', () => { // Outbox L1 tests // Since the outbox is only consumable when the block is proven, we need to set the block to be proven - await rollup.write.setAssumeProvenUntilBlockNumber([1 + (l2TxReceipt0.blockNumber ?? 0)]); + await rollup.write.setAssumeProvenThroughBlockNumber([l2TxReceipt0.blockNumber ?? 0]); // Check L1 has expected message tree const [l1Root, l1MinHeight] = await outbox.read.getRootData([l2TxReceipt0.blockNumber]); @@ -336,7 +336,7 @@ describe('E2E Outbox Tests', () => { // Outbox L1 tests // Since the outbox is only consumable when the block is proven, we need to set the block to be proven - await rollup.write.setAssumeProvenUntilBlockNumber([1 + (l2TxReceipt0.blockNumber ?? 0)]); + await rollup.write.setAssumeProvenThroughBlockNumber([l2TxReceipt0.blockNumber ?? 0]); // Check L1 has expected message tree const [l1Root, l1MinHeight] = await outbox.read.getRootData([l2TxReceipt0.blockNumber]); diff --git a/yarn-project/end-to-end/src/e2e_private_voting_contract.test.ts b/yarn-project/end-to-end/src/e2e_private_voting_contract.test.ts index 9345caef70f..d4f3702c4ef 100644 --- a/yarn-project/end-to-end/src/e2e_private_voting_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_private_voting_contract.test.ts @@ -1,18 +1,14 @@ import { type AccountWallet, type AztecAddress, type DebugLogger, Fr } from '@aztec/aztec.js'; -import { TestContract } from '@aztec/noir-contracts.js'; import { EasyPrivateVotingContract } from '@aztec/noir-contracts.js/EasyPrivateVoting'; import { setup } from './fixtures/utils.js'; -const SHARED_MUTABLE_DELAY = 5; - describe('e2e_voting_contract', () => { let wallet: AccountWallet; let logger: DebugLogger; let teardown: () => Promise; - let testContract: TestContract; let votingContract: EasyPrivateVotingContract; let owner: AztecAddress; @@ -21,7 +17,6 @@ describe('e2e_voting_contract', () => { ({ teardown, wallet, logger } = await setup(1)); owner = wallet.getAddress(); - testContract = await TestContract.deploy(wallet).send().deployed(); votingContract = await EasyPrivateVotingContract.deploy(wallet, owner).send().deployed(); logger.info(`Counter contract deployed at ${votingContract.address}`); @@ -29,26 +24,13 @@ describe('e2e_voting_contract', () => { afterAll(() => teardown()); - const crossDelay = async () => { - for (let i = 0; i < SHARED_MUTABLE_DELAY; i++) { - // We send arbitrary tx to mine a block - await testContract.methods.emit_unencrypted(0).send().wait(); - } - }; - describe('votes', () => { - it('votes, rotates nullifier keys, then tries to vote again', async () => { + it('votes, then tries to vote again', async () => { const candidate = new Fr(1); await votingContract.methods.cast_vote(candidate).send().wait(); expect(await votingContract.methods.get_vote(candidate).simulate()).toBe(1n); - // We rotate our nullifier keys - this should be ignored by the voting contract, since it should always use the - // same set of keys to prevent double spends. - await wallet.rotateNullifierKeys(); - await crossDelay(); - - // We try voting again, but our TX is dropped due to trying to emit duplicate nullifiers as the voting contract - // ignored our previous key rotation. + // We try voting again, but our TX is dropped due to trying to emit duplicate nullifiers await expect(votingContract.methods.cast_vote(candidate).send().wait()).rejects.toThrow( 'Reason: Tx dropped by P2P node.', ); diff --git a/yarn-project/end-to-end/src/e2e_prover/e2e_prover_test.ts b/yarn-project/end-to-end/src/e2e_prover/e2e_prover_test.ts index 48d87598c82..89a833ff216 100644 --- a/yarn-project/end-to-end/src/e2e_prover/e2e_prover_test.ts +++ b/yarn-project/end-to-end/src/e2e_prover/e2e_prover_test.ts @@ -16,7 +16,7 @@ import { createDebugLogger, deployL1Contract, } from '@aztec/aztec.js'; -import { BBCircuitVerifier } from '@aztec/bb-prover'; +import { BBCircuitVerifier, type ClientProtocolCircuitVerifier, TestCircuitVerifier } from '@aztec/bb-prover'; import { RollupAbi } from '@aztec/l1-artifacts'; import { TokenContract } from '@aztec/noir-contracts.js'; import { type ProverNode, type ProverNodeConfig, createProverNode } from '@aztec/prover-node'; @@ -73,14 +73,14 @@ export class FullProverTest { private provenComponents: ProvenSetup[] = []; private bbConfigCleanup?: () => Promise; private acvmConfigCleanup?: () => Promise; - circuitProofVerifier?: BBCircuitVerifier; + circuitProofVerifier?: ClientProtocolCircuitVerifier; provenAssets: TokenContract[] = []; private context!: SubsystemsContext; private proverNode!: ProverNode; private simulatedProverNode!: ProverNode; private l1Contracts!: DeployL1Contracts; - constructor(testName: string, private minNumberOfTxsPerBlock: number) { + constructor(testName: string, private minNumberOfTxsPerBlock: number, private realProofs = true) { this.logger = createDebugLogger(`aztec:full_prover_test:${testName}`); this.snapshotManager = createSnapshotManager(`full_prover_integration/${testName}`, dataPath); } @@ -133,7 +133,7 @@ export class FullProverTest { this.accounts.map(a => a.address), ); - expect(await this.fakeProofsAsset.methods.admin().simulate()).toBe(this.accounts[0].address.toBigInt()); + expect(await this.fakeProofsAsset.methods.get_admin().simulate()).toBe(this.accounts[0].address.toBigInt()); }, ); } @@ -149,25 +149,31 @@ export class FullProverTest { // Configure a full prover PXE - const [acvmConfig, bbConfig] = await Promise.all([getACVMConfig(this.logger), getBBConfig(this.logger)]); - if (!acvmConfig || !bbConfig) { - throw new Error('Missing ACVM or BB config'); - } + let acvmConfig: Awaited> | undefined; + let bbConfig: Awaited> | undefined; + if (this.realProofs) { + [acvmConfig, bbConfig] = await Promise.all([getACVMConfig(this.logger), getBBConfig(this.logger)]); + if (!acvmConfig || !bbConfig) { + throw new Error('Missing ACVM or BB config'); + } - this.acvmConfigCleanup = acvmConfig.cleanup; - this.bbConfigCleanup = bbConfig.cleanup; + this.acvmConfigCleanup = acvmConfig.cleanup; + this.bbConfigCleanup = bbConfig.cleanup; - if (!bbConfig?.bbWorkingDirectory || !bbConfig?.bbBinaryPath) { - throw new Error(`Test must be run with BB native configuration`); - } + if (!bbConfig?.bbWorkingDirectory || !bbConfig?.bbBinaryPath) { + throw new Error(`Test must be run with BB native configuration`); + } - this.circuitProofVerifier = await BBCircuitVerifier.new(bbConfig); + this.circuitProofVerifier = await BBCircuitVerifier.new(bbConfig); - this.logger.debug(`Configuring the node for real proofs...`); - await this.aztecNode.setConfig({ - realProofs: true, - minTxsPerBlock: this.minNumberOfTxsPerBlock, - }); + this.logger.debug(`Configuring the node for real proofs...`); + await this.aztecNode.setConfig({ + realProofs: true, + minTxsPerBlock: this.minNumberOfTxsPerBlock, + }); + } else { + this.circuitProofVerifier = new TestCircuitVerifier(); + } this.logger.debug(`Main setup completed, initializing full prover PXE, Node, and Prover Node...`); @@ -175,7 +181,7 @@ export class FullProverTest { const result = await setupPXEService( this.aztecNode, { - proverEnabled: true, + proverEnabled: this.realProofs, bbBinaryPath: bbConfig?.bbBinaryPath, bbWorkingDirectory: bbConfig?.bbWorkingDirectory, }, @@ -239,7 +245,7 @@ export class FullProverTest { txProviderNodeUrl: undefined, dataDirectory: undefined, proverId: new Fr(81), - realProofs: true, + realProofs: this.realProofs, proverAgentConcurrency: 2, publisherPrivateKey: `0x${proverNodePrivateKey!.toString('hex')}`, proverNodeMaxPendingJobs: 100, @@ -341,14 +347,18 @@ export class FullProverTest { } async deployVerifier() { + if (!this.realProofs) { + return; + } + if (!this.circuitProofVerifier) { throw new Error('No verifier'); } const { walletClient, publicClient, l1ContractAddresses } = this.context.deployL1ContractsValues; - const contract = await this.circuitProofVerifier.generateSolidityContract( - 'BlockRootRollupArtifact', + const contract = await (this.circuitProofVerifier as BBCircuitVerifier).generateSolidityContract( + 'BlockRootRollupFinalArtifact', 'UltraHonkVerifier.sol', ); diff --git a/yarn-project/end-to-end/src/e2e_prover/full.test.ts b/yarn-project/end-to-end/src/e2e_prover/full.test.ts index 0430ef690aa..f6d52aabb76 100644 --- a/yarn-project/end-to-end/src/e2e_prover/full.test.ts +++ b/yarn-project/end-to-end/src/e2e_prover/full.test.ts @@ -6,11 +6,10 @@ const TIMEOUT = 1_800_000; // This makes AVM proving throw if there's a failure. process.env.AVM_PROVING_STRICT = '1'; -// Enable proving the full lookup tables (no truncation). -process.env.AVM_ENABLE_FULL_PROVING = '1'; describe('full_prover', () => { - const t = new FullProverTest('full_prover', 2); + const realProofs = !['true', '1'].includes(process.env.FAKE_PROOFS ?? ''); + const t = new FullProverTest('full_prover', 2, realProofs); let { provenAssets, accounts, tokenSim, logger } = t; beforeAll(async () => { @@ -85,6 +84,11 @@ describe('full_prover', () => { ); it('rejects txs with invalid proofs', async () => { + if (!realProofs) { + t.logger.warn(`Skipping test with fake proofs`); + return; + } + const privateInteraction = t.fakeProofsAsset.methods.transfer(accounts[1].address, 1); const publicInteraction = t.fakeProofsAsset.methods.transfer_public(accounts[0].address, accounts[1].address, 1, 0); diff --git a/yarn-project/end-to-end/src/e2e_synching.test.ts b/yarn-project/end-to-end/src/e2e_synching.test.ts new file mode 100644 index 00000000000..a0f980bab34 --- /dev/null +++ b/yarn-project/end-to-end/src/e2e_synching.test.ts @@ -0,0 +1,494 @@ +/* + * @note The following test have two modes: + * - Setup where we are constructing blocks and saving for later usage + * - Execution where we will load and execute the blocks, then try a fresh + * sync. + * + * The split is made since constructing the number of blocks that we desire + * takes an eternity. Especially for complex transactions will building the + * block take a significant amount of time. + * With the current test configuration setup run for ~30-40 minutes. + * + * To run the Setup run with the `AZTEC_GENERATE_TEST_DATA=1` flag. Without + * this flag, we will run in execution. + * + * There is functionality to store the `stats` of a sync, but currently we + * will simply be writing it to the log instead. + * + * Notice that we are jumping far into the future such that the setup always + * happen at the same time, making it a lot simpler for us to construct + * blocks that we can replay. + * + * @dev Since the test is currently not having any limits on time, we don't gain + * much from running it in CI, and it is therefore skipped. + * + * + * Previous results. The `blockCount` is the number of blocks we will construct with `txCount` + * transactions of the `complexity` provided. + * The `numberOfBlocks` is the total number of blocks, including deployments of canonical contracts + * and setup before we start the "actual" test. + * blockCount: 10, txCount: 36, complexity: Deployment: {"numberOfBlocks":16, "syncTime":17.490706521987914} + * blockCount: 10, txCount: 36, complexity: PrivateTransfer: {"numberOfBlocks":19, "syncTime":20.846745924949644} + * blockCount: 10, txCount: 36, complexity: PublicTransfer: {"numberOfBlocks":18, "syncTime":21.340179460525512} + * blockCount: 10, txCount: 9, complexity: Spam: {"numberOfBlocks":17, "syncTime":49.40888188171387} + */ +import { getSchnorrAccount } from '@aztec/accounts/schnorr'; +import { AztecNodeService } from '@aztec/aztec-node'; +import { + type AccountWallet, + type AccountWalletWithSecretKey, + AnvilTestWatcher, + BatchCall, + type DebugLogger, + Fr, + GrumpkinScalar, + computeSecretHash, + createDebugLogger, +} from '@aztec/aztec.js'; +// eslint-disable-next-line no-restricted-imports +import { ExtendedNote, L2Block, Note, type TxHash } from '@aztec/circuit-types'; +import { type AztecAddress, ETHEREUM_SLOT_DURATION } from '@aztec/circuits.js'; +import { Timer } from '@aztec/foundation/timer'; +import { RollupAbi } from '@aztec/l1-artifacts'; +import { SpamContract, TokenContract } from '@aztec/noir-contracts.js'; +import { type PXEService } from '@aztec/pxe'; +import { L1Publisher } from '@aztec/sequencer-client'; +import { NoopTelemetryClient } from '@aztec/telemetry-client/noop'; + +import * as fs from 'fs'; +import { getContract } from 'viem'; + +import { addAccounts } from './fixtures/snapshot_manager.js'; +import { type EndToEndContext, getPrivateKeyFromIndex, setup, setupPXEService } from './fixtures/utils.js'; + +const SALT = 420; +const AZTEC_GENERATE_TEST_DATA = !!process.env.AZTEC_GENERATE_TEST_DATA; +const START_TIME = 1893456000; // 2030 01 01 00 00 + +const MINT_AMOUNT = 1000n; + +enum TxComplexity { + Deployment, + PrivateTransfer, + PublicTransfer, + Spam, +} + +/** + * Helper class that wraps a certain variant of test, provides functionality for + * setting up the test state (e.g., funding accounts etc) and to generate a list of transactions. + * + * Supports multiple complexities, any complexity beyond `Deployment` will be deploying accounts + * such that every tx in a block can be sent by a different account. + * The reason for this is that it allow us to not worry about trying to spend the same notes for + * multiple transactions created by the same account. + * + * + */ +class TestVariant { + private logger: DebugLogger = createDebugLogger(`test_variant`); + private pxe!: PXEService; + private token!: TokenContract; + private spam!: SpamContract; + + private wallets!: AccountWalletWithSecretKey[]; + + private seed = 0n; + + constructor(public blockCount: number, public txCount: number, public txComplexity: TxComplexity) {} + + setPXE(pxe: PXEService) { + this.pxe = pxe; + } + + setToken(token: TokenContract) { + this.token = token; + } + + setSpam(spam: SpamContract) { + this.spam = spam; + } + + toString() { + return this.description(); + } + + description() { + return `blockCount: ${this.blockCount}, txCount: ${this.txCount}, complexity: ${TxComplexity[this.txComplexity]}`; + } + + name() { + return `${this.blockCount}_${this.txCount}_${this.txComplexity}`; + } + + async setup() { + if (this.pxe === undefined) { + throw new Error('Undefined PXE'); + } + + if (this.txComplexity == TxComplexity.Deployment) { + return; + } + + // Create accounts such that we can send from many to not have colliding nullifiers + const { accountKeys } = await addAccounts(this.txCount, this.logger, false)({ pxe: this.pxe }); + const accountManagers = accountKeys.map(ak => getSchnorrAccount(this.pxe, ak[0], ak[1], 1)); + + this.wallets = await Promise.all( + accountManagers.map(async (a, i) => { + const partialAddress = a.getCompleteAddress().partialAddress; + await this.pxe.registerAccount(accountKeys[i][0], partialAddress); + const wallet = await a.getWallet(); + this.logger.verbose(`Wallet ${i} address: ${wallet.getAddress()} registered`); + return wallet; + }), + ); + + // Mint tokens publicly if needed + if (this.txComplexity == TxComplexity.PublicTransfer) { + await Promise.all( + this.wallets.map(w => + this.token.methods.mint_public(w.getAddress(), MINT_AMOUNT).send().wait({ timeout: 600 }), + ), + ); + } + + // Mint tokens privately if needed + if (this.txComplexity == TxComplexity.PrivateTransfer) { + const secrets: Fr[] = this.wallets.map(() => Fr.random()); + + const txs = await Promise.all( + this.wallets.map((w, i) => + this.token.methods.mint_private(MINT_AMOUNT, computeSecretHash(secrets[i])).send().wait({ timeout: 600 }), + ), + ); + + // We minted all of them and wait. Now we add them all. Do we need to wait for that to have happened? + await Promise.all( + this.wallets.map((wallet, i) => + this.addPendingShieldNoteToPXE({ + amount: MINT_AMOUNT, + secretHash: computeSecretHash(secrets[i]), + txHash: txs[i].txHash, + accountAddress: wallet.getAddress(), + assetAddress: this.token.address, + wallet: wallet, + }), + ), + ); + + await Promise.all( + this.wallets.map(async (w, i) => + (await TokenContract.at(this.token.address, w)).methods + .redeem_shield(w.getAddress(), MINT_AMOUNT, secrets[i]) + .send() + .wait({ timeout: 600 }), + ), + ); + } + } + + private async addPendingShieldNoteToPXE(args: { + amount: bigint; + secretHash: Fr; + txHash: TxHash; + accountAddress: AztecAddress; + assetAddress: AztecAddress; + wallet: AccountWallet; + }) { + const { accountAddress, assetAddress, amount, secretHash, txHash, wallet } = args; + const note = new Note([new Fr(amount), secretHash]); + const extendedNote = new ExtendedNote( + note, + accountAddress, + assetAddress, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, + txHash, + ); + await wallet.addNote(extendedNote); + } + + async createAndSendTxs() { + if (!this.pxe) { + throw new Error('Undefined PXE'); + } + + if (this.txComplexity == TxComplexity.Deployment) { + const txs = []; + for (let i = 0; i < this.txCount; i++) { + const accountManager = getSchnorrAccount(this.pxe, Fr.random(), GrumpkinScalar.random(), Fr.random()); + const deployMethod = await accountManager.getDeployMethod(); + await deployMethod.create({ + contractAddressSalt: accountManager.salt, + skipClassRegistration: true, + skipPublicDeployment: true, + universalDeploy: true, + }); + txs.push(deployMethod.send()); + } + return txs; + } else if (this.txComplexity == TxComplexity.PrivateTransfer) { + // To do a private transfer we need to a lot of accounts that all have funds. + const txs = []; + for (let i = 0; i < this.txCount; i++) { + const recipient = this.wallets[(i + 1) % this.txCount].getAddress(); + const tk = await TokenContract.at(this.token.address, this.wallets[i]); + txs.push(tk.methods.transfer(recipient, 1n).send()); + } + return txs; + } else if (this.txComplexity == TxComplexity.PublicTransfer) { + // Public transfer is simpler, we can just transfer to our-selves there. + const txs = []; + for (let i = 0; i < this.txCount; i++) { + const sender = this.wallets[i].getAddress(); + const recipient = this.wallets[(i + 1) % this.txCount].getAddress(); + const tk = await TokenContract.at(this.token.address, this.wallets[i]); + txs.push(tk.methods.transfer_public(sender, recipient, 1n, 0).send()); + } + return txs; + } else if (this.txComplexity == TxComplexity.Spam) { + // This one is slightly more painful. We need to setup a new contract that writes + // a metric ton of state changes. + + const txs = []; + for (let i = 0; i < this.txCount; i++) { + const batch = new BatchCall(this.wallets[i], [ + this.spam.methods.spam(this.seed, 16, false).request(), + this.spam.methods.spam(this.seed + 16n, 16, false).request(), + this.spam.methods.spam(this.seed + 32n, 16, false).request(), + this.spam.methods.spam(this.seed + 48n, 15, true).request(), + ]); + + this.seed += 100n; + txs.push(batch.send()); + } + return txs; + } else { + throw new Error('Incorrect tx complexity'); + } + } + + async writeBlocks(blocks: L2Block[]) { + await this.writeJson(`blocks`, { blocks: blocks.map(block => block.toString()) }); + } + + loadBlocks() { + const json = this.loadJson(`blocks`); + return (json['blocks'] as string[]).map(b => L2Block.fromString(b)); + } + + numberOfBlocksStored() { + const files = fs.readdirSync(this.dir()); + return files.filter(file => file.startsWith('block_')).length; + } + + private async writeJson(fileName: string, toSave: Record) { + const dir = this.dir(); + await fs.promises.mkdir(dir, { recursive: true }); + + const path = `${dir}/${fileName}.json`; + const output = JSON.stringify(toSave, null, 2); + fs.writeFileSync(path, output, 'utf8'); + } + + private loadJson(fileName: string): Record { + const path = `${this.dir()}/${fileName}.json`; + const data = fs.readFileSync(path, 'utf8'); + return JSON.parse(data); + } + + private dir(): string { + return `./src/fixtures/synching_blocks/${this.name()}`; + } +} + +/** + * Setting up the different variants we will be testing with. + * + * @note The `Spam` test have much fewer transactions than all others, this is + * because each transaction is LARGE, so the block size in kb is hit. + * I decided that 1/4 should be acceptable, and still small enough to work. + */ +const variants: TestVariant[] = [ + new TestVariant(10, 36, TxComplexity.Deployment), + new TestVariant(10, 36, TxComplexity.PrivateTransfer), + new TestVariant(10, 36, TxComplexity.PublicTransfer), + new TestVariant(10, 9, TxComplexity.Spam), +]; + +describe('e2e_synching', () => { + // WARNING: Running this with AZTEC_GENERATE_TEST_DATA is VERY slow, and will build a whole slew + // of fixtures including multiple blocks with many transaction in. + it.each(variants)( + `Add blocks to the pending chain - %s`, + async (variant: TestVariant) => { + if (!AZTEC_GENERATE_TEST_DATA) { + return; + } + + // The setup is in here and not at the `before` since we are doing different setups depending on what mode we are running in. + const { teardown, pxe, sequencer, aztecNode, wallet } = await setup(1, { salt: SALT, l1StartTime: START_TIME }); + variant.setPXE(pxe as PXEService); + + // Deploy a token, such that we could use it + const token = await TokenContract.deploy(wallet, wallet.getAddress(), 'TestToken', 'TST', 18n).send().deployed(); + const spam = await SpamContract.deploy(wallet).send().deployed(); + + variant.setToken(token); + variant.setSpam(spam); + + // Now we create all of our interesting blocks. + // Alter the block requirements for the sequencer such that we ensure blocks sizes as desired. + sequencer?.updateSequencerConfig({ minTxsPerBlock: variant.txCount, maxTxsPerBlock: variant.txCount }); + + // The setup will mint tokens (private and public) + await variant.setup(); + + for (let i = 0; i < variant.blockCount; i++) { + const txs = await variant.createAndSendTxs(); + if (txs) { + await Promise.all(txs.map(tx => tx.wait({ timeout: 1200 }))); + } + } + + const blocks = await aztecNode.getBlocks(0, await aztecNode.getBlockNumber()); + + await variant.writeBlocks(blocks); + await teardown(); + }, + 1_200_000, + ); + + const testTheVariant = async ( + variant: TestVariant, + beforeSync: (opts: Partial) => Promise = () => Promise.resolve(), + afterSync: (opts: Partial) => Promise = () => Promise.resolve(), + ) => { + if (AZTEC_GENERATE_TEST_DATA) { + return; + } + + const { teardown, logger, deployL1ContractsValues, config, cheatCodes, aztecNode, sequencer, watcher } = + await setup(0, { + salt: SALT, + l1StartTime: START_TIME, + skipProtocolContracts: true, + }); + + await (aztecNode as any).stop(); + await (sequencer as any).stop(); + await watcher?.stop(); + + const sequencerPK: `0x${string}` = `0x${getPrivateKeyFromIndex(0)!.toString('hex')}`; + const publisher = new L1Publisher( + { + l1RpcUrl: config.l1RpcUrl, + requiredConfirmations: 1, + l1Contracts: deployL1ContractsValues.l1ContractAddresses, + publisherPrivateKey: sequencerPK, + l1PublishRetryIntervalMS: 100, + l1ChainId: 31337, + }, + new NoopTelemetryClient(), + ); + + const blocks = variant.loadBlocks(); + + // For each of the blocks we progress time such that it land at the correct time + // We create blocks for every ethereum slot simply to make sure that the test is "closer" to + // a real world. + for (const block of blocks) { + const targetTime = block.header.globalVariables.timestamp.toNumber() - ETHEREUM_SLOT_DURATION; + while ((await cheatCodes.eth.timestamp()) < targetTime) { + await cheatCodes.eth.mine(); + } + await publisher.proposeL2Block(block); + } + + await beforeSync({ deployL1ContractsValues, cheatCodes, config, logger }); + + // All the blocks have been "re-played" and we are now to simply get a new node up to speed + const timer = new Timer(); + const freshNode = await AztecNodeService.createAndSync( + { ...config, disableSequencer: true, disableValidator: true }, + new NoopTelemetryClient(), + ); + const syncTime = timer.s(); + + const blockNumber = await freshNode.getBlockNumber(); + + logger.info( + `Stats: ${variant.description()}: ${JSON.stringify({ + numberOfBlocks: blockNumber, + syncTime, + })}`, + ); + + await afterSync({ deployL1ContractsValues, cheatCodes, config, logger }); + + await teardown(); + }; + + it.each(variants)('replay and then sync - %s', async (variant: TestVariant) => { + await testTheVariant(variant); + }); + + it('replay, then prune and only then perform an initial sync', async () => { + if (AZTEC_GENERATE_TEST_DATA) { + return; + } + + const variant = variants[0]; + + const beforeSync = async (opts: Partial) => { + const rollup = getContract({ + address: opts.deployL1ContractsValues!.l1ContractAddresses.rollupAddress.toString(), + abi: RollupAbi, + client: opts.deployL1ContractsValues!.walletClient, + }); + + const pendingBlockNumber = await rollup.read.getPendingBlockNumber(); + await rollup.write.setAssumeProvenThroughBlockNumber([pendingBlockNumber - BigInt(variant.blockCount) / 2n]); + + const timeliness = (await rollup.read.EPOCH_DURATION()) * 2n; + const [, , slot] = await rollup.read.blocks([(await rollup.read.getProvenBlockNumber()) + 1n]); + const timeJumpTo = await rollup.read.getTimestampForSlot([slot + timeliness]); + + await opts.cheatCodes!.eth.warp(Number(timeJumpTo)); + + await rollup.write.prune(); + }; + + // After we have synched the chain, we will publish a block. Here we are VERY interested in seeing the block number. + const afterSync = async (opts: Partial) => { + const watcher = new AnvilTestWatcher( + opts.cheatCodes!.eth, + opts.deployL1ContractsValues!.l1ContractAddresses.rollupAddress, + opts.deployL1ContractsValues!.publicClient, + ); + await watcher.start(); + + // The sync here could likely be avoided by using the node we just synched. + const aztecNode = await AztecNodeService.createAndSync(opts.config!, new NoopTelemetryClient()); + const sequencer = aztecNode.getSequencer(); + + const { pxe } = await setupPXEService(aztecNode!); + + variant.setPXE(pxe); + + const blockBefore = await aztecNode.getBlock(await aztecNode.getBlockNumber()); + + sequencer?.updateSequencerConfig({ minTxsPerBlock: variant.txCount, maxTxsPerBlock: variant.txCount }); + const txs = await variant.createAndSendTxs(); + await Promise.all(txs.map(tx => tx.wait({ timeout: 1200 }))); + + const blockAfter = await aztecNode.getBlock(await aztecNode.getBlockNumber()); + + expect(blockAfter!.number).toEqual(blockBefore!.number + 1); + expect(blockAfter!.header.lastArchive).toEqual(blockBefore!.archive); + }; + + await testTheVariant(variant, beforeSync, afterSync); + }); +}); diff --git a/yarn-project/end-to-end/src/e2e_token_contract/access_control.test.ts b/yarn-project/end-to-end/src/e2e_token_contract/access_control.test.ts index 8efc7d88277..f916d848441 100644 --- a/yarn-project/end-to-end/src/e2e_token_contract/access_control.test.ts +++ b/yarn-project/end-to-end/src/e2e_token_contract/access_control.test.ts @@ -18,7 +18,7 @@ describe('e2e_token_contract access control', () => { it('Set admin', async () => { await t.asset.methods.set_admin(t.accounts[1].address).send().wait(); - expect(await t.asset.methods.admin().simulate()).toBe(t.accounts[1].address.toBigInt()); + expect(await t.asset.methods.get_admin().simulate()).toBe(t.accounts[1].address.toBigInt()); }); it('Add minter as admin', async () => { diff --git a/yarn-project/end-to-end/src/e2e_token_contract/private_transfer_recursion.test.ts b/yarn-project/end-to-end/src/e2e_token_contract/private_transfer_recursion.test.ts index 25535f55b1f..cdb65ecca6a 100644 --- a/yarn-project/end-to-end/src/e2e_token_contract/private_transfer_recursion.test.ts +++ b/yarn-project/end-to-end/src/e2e_token_contract/private_transfer_recursion.test.ts @@ -1,4 +1,4 @@ -import { BatchCall, EventType, Fr } from '@aztec/aztec.js'; +import { BatchCall, EventType } from '@aztec/aztec.js'; import { TokenContract } from '@aztec/noir-contracts.js'; import { TokenContractTest } from './token_contract_test.js'; @@ -45,7 +45,7 @@ describe('e2e_token_contract private transfer recursion', () => { expect(events[0]).toEqual({ from: accounts[0].address, to: accounts[1].address, - amount: new Fr(totalBalance), + amount: totalBalance, }); }); @@ -71,7 +71,7 @@ describe('e2e_token_contract private transfer recursion', () => { expect(events[0]).toEqual({ from: accounts[0].address, to: accounts[1].address, - amount: new Fr(toSend), + amount: toSend, }); }); diff --git a/yarn-project/end-to-end/src/e2e_token_contract/token_contract_test.ts b/yarn-project/end-to-end/src/e2e_token_contract/token_contract_test.ts index ef34cc0403c..e6597c2745c 100644 --- a/yarn-project/end-to-end/src/e2e_token_contract/token_contract_test.ts +++ b/yarn-project/end-to-end/src/e2e_token_contract/token_contract_test.ts @@ -99,7 +99,7 @@ export class TokenContractTest { this.badAccount = await DocsExampleContract.at(badAccountAddress, this.wallets[0]); this.logger.verbose(`Bad account address: ${this.badAccount.address}`); - expect(await this.asset.methods.admin().simulate()).toBe(this.accounts[0].address.toBigInt()); + expect(await this.asset.methods.get_admin().simulate()).toBe(this.accounts[0].address.toBigInt()); }, ); diff --git a/yarn-project/end-to-end/src/e2e_token_contract/transfer_private.test.ts b/yarn-project/end-to-end/src/e2e_token_contract/transfer_private.test.ts index 170a5568153..5865ac3343a 100644 --- a/yarn-project/end-to-end/src/e2e_token_contract/transfer_private.test.ts +++ b/yarn-project/end-to-end/src/e2e_token_contract/transfer_private.test.ts @@ -46,7 +46,7 @@ describe('e2e_token_contract transfer private', () => { expect(events[0]).toEqual({ from: accounts[0].address, to: accounts[1].address, - amount: new Fr(amount), + amount: amount, }); }); diff --git a/yarn-project/end-to-end/src/fixtures/snapshot_manager.ts b/yarn-project/end-to-end/src/fixtures/snapshot_manager.ts index 4a5400f53eb..bb1af6a9da5 100644 --- a/yarn-project/end-to-end/src/fixtures/snapshot_manager.ts +++ b/yarn-project/end-to-end/src/fixtures/snapshot_manager.ts @@ -39,12 +39,7 @@ import { MNEMONIC } from './fixtures.js'; import { getACVMConfig } from './get_acvm_config.js'; import { getBBConfig } from './get_bb_config.js'; import { setupL1Contracts } from './setup_l1_contracts.js'; -import { - deployCanonicalAuthRegistry, - deployCanonicalKeyRegistry, - deployCanonicalRouter, - getPrivateKeyFromIndex, -} from './utils.js'; +import { deployCanonicalAuthRegistry, deployCanonicalRouter, getPrivateKeyFromIndex } from './utils.js'; export type SubsystemsContext = { anvil: Anvil; @@ -347,10 +342,6 @@ async function setupFromFresh( pxeConfig.dataDirectory = statePath; const pxe = await createPXEService(aztecNode, pxeConfig); - logger.verbose('Deploying key registry...'); - await deployCanonicalKeyRegistry( - new SignerlessWallet(pxe, new DefaultMultiCallEntrypoint(aztecNodeConfig.l1ChainId, aztecNodeConfig.version)), - ); logger.verbose('Deploying auth registry...'); await deployCanonicalAuthRegistry( new SignerlessWallet(pxe, new DefaultMultiCallEntrypoint(aztecNodeConfig.l1ChainId, aztecNodeConfig.version)), diff --git a/yarn-project/end-to-end/src/fixtures/synching_blocks/10_36_0/blocks.json b/yarn-project/end-to-end/src/fixtures/synching_blocks/10_36_0/blocks.json new file mode 100644 index 00000000000..ad179e54c1d --- /dev/null +++ b/yarn-project/end-to-end/src/fixtures/synching_blocks/10_36_0/blocks.json @@ -0,0 +1,20 @@ +{ + "blocks": [ + "1200a06aae1368abe36530b585bd7a4d2ba4de5037b82076412691a187d7621e000000010000000000000000000000000000000000000000000000000000000000000002009cc9b8058f4216c68055b6bbfe3c7a2b2b1c822b504f7f2d12851ea06c90ef00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000100b59baa35b9dc267744f0ccb4e3b0255c1fc512460d91130c6bc19fb2668568d000000802017ee9400c0a9e862c649aa34ced440252a06a2d70014ff616122d4b014e2c10000010023c08a6b1297210c5e24c76b9a936250a1ce2721576c26ea797c7ec35f9e46a9000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000070dbd8d40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000caf4380165237e03eae7115d6f44bb38e20d90fd37d3e29116bbbd758edb87cb43413c2000000010000000100000000000000000000000000000000000000000000000000000000000caf438000030077609615b0f3791407303443fa90714e46430609f1f437713dced591ae9e62188890eb3288ab5859e03bfc642af41fdc32194f209f34e88df2996dbd1ee5eb0f82ba823c27bf47b723dd674e43fa4fd37a8c4ce3af4bd7b9f785aa123ff467000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c5f0000000040000000000000004000000000009c5f40009c5f00009c4c405d15342d76e46e5be07d3cda0d753158431cdc5e39d29ce4e8fe1f5c070564a0009c4a0000000006999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f814c2d321b88ded0e008e23bcabfd7119e218f9964a2cf6496c6498c3ad2b9c06000000000000000000000000000000000000000000000000000000000000000127a4b26f0fae861600e17526b39adb2f13d4d6ffe9421310b7656e5b576830da0a43a7d0ff038f2492a51b4465c73f28c0644cdde523cb652668b167eab21b7a0000000000000000000000000000000000000000000000000000000000001e3d00000000026715c38900000a981f8b08000000000002ff95584d883447197ebb00aabbb7777776f6677a7a667aa7a7a7a7bb676677fb4bbe68e855c14348cc8f00f962cc17bc885e043d68503c091e3c7911c5430848902012056f060904f496006340104390e0c193474f2aa260f079aaba6b57b3fb810bd5fb56d5fb576fbd00f5d45b7357b4a71e111dbd287257f4d1081f89cf047f31da48247a3c93307a00227ae205f4a3276c1385e671e299e81933f18c6d5713f7a27b66e29e6d571300cf47cf9b89e76dbb9ab81fdd3713f76db313977040f425adfaf87e4a027c9f009410dfa76407dfa725baa4e95d7c3f2d7bf83e2bfb97b439c0f73939c0f7330032bca4b1437c3f2b47f8be20c797b472f2108c144fd2ec8b5c3496ef8d5bb300782d6369958e39a4fb218d21df0cf9fd900f214ffc7efc1aeb5d094553452200de6e3c97308e5fe8231bf70bdc9370478f7df1e271023a327432a6cc600c9900f1d8c88cbbd6cbece9047ce364027adfc84cc61c899331240f13482689914c00bad64b1ee89816624a0e0d3d893b5d903c7980e451ef1be863dd59b3964ddc00f0f1278f62d1f6ef40fa3f0646a6089337434c1e4dd11d9ce2a3e777c47b49009246be00abbb343dc8f0395ce07392536981702e19cec2eccd0add82dd95e90096e8aed82d4db742b764b762d7afd1add8ade5ae87599095c260bd6e55ba46006fad40e96b54abaa2524830749ea1b257b2aa68ea255e31512a26ce47bad4c00ab46be3f8086d3fa8ec8fb5237f2c3d62b177be22dfc0c432f4bf6942702ce00bc9157c099cf17187e43168dfca8f58a155dcafb40e4c625922bc510f90b90004b953dab11e91c2d6bbde5ca4cc387d5923d75d5534b78372b8d0c23594c5700adb72ac15580ab50982d96ad94a3c6fb3a26167467412fdf94ac9177e1ce02002da3e18a731517f56ba9b902a8cb548d6f9d57ad5725504a466d19d7607c5b00d68ed1c4cc3042244c6aa333216b42d6772ceba5c822d2802809221fa7d55f00e1e00662ac742a925665687501ff30908f17c3dee93ff4a15d30b43070b046001c292c6b13c74e4f2beb4dab7636e86d14a8c85189a3f61cb5efa8cc51078e001a3a6ae1a823471d3b2adff01c6c98199b2d7cfd976cbbd8d46a8befb6dab400de668d54a9912ab50f1ecfb33cd8188ce97aceb154b68d1720d6358621b2da0032e6e7d0bb3dbfc0fc402eba40d63690fef54002ebf599bac0f7627bdeaaf50039dd1baf11c1cd9ada279d457586dc59af1aef93c8d3baf1e603dadf80e37100d9345e6eed175c53708618730550ce186fcd8acfb8bdd4be5517265779cb5c00b4ded60564b36dbd7aa3fa5ecd39d7dbdee2bf9536fe4f8dffe085a75b730600e12d8feeb8c672aa1a59e53d66b30a4799a79201e33a187fef29c6f12b5c0300dad678cb3913c3e76c0cadf7b4559fb7def91916ed825d9f3760fc9c348eb100c1b7318c1009cf2e8cce33b29e91f58b9615ebdadc90e0c64aa7e20ceb41bb0028e01fd363bc19f64e7fb5db1ed9704f5ad13cb7c4c2ac35e0ad2533d0b8400037637761ba4493458726e8e2c0133a3410863e5e07dd0e6b0016ad1089c2c300b255a5c3177d8d02b62457f0af1dfc1b482d7a6cb63a499656e77f2bf930b500442b336ce702909a37deab48c065e3fd185a5581682e8bd51dd1af0b76fb2700ad9787382ca1bf446c5e976587ab08cacfc1399a87e0fcb6848df78bd6cb78006b05616bca1c0dbfe917c944858c02973d5285c9552eaa68bd5162a60136c900883d75d55323b838cb8d0c039d4d017f098ec52853443bcc66235c9c793082006b6fcb88ae3177467dec47c60192b9c2e00878187a546ed451419099c9ccac00fc391f3e4d6d91c6ad9502da473ac0f2033f878d7725a70d161f01eed3203000977ad0b5abe223c7151ee4b6f80878c1a303d478808c2d3e82a430c507e92200a1641e242c3e7248e6b991ccbb76557c58bec2141fa48b80f61388a2f8788000e491b1931b9bc79dcdce73eca98f22c2fb1b8b08d60f03561287218b88e0c300e9fd7fd514fef59ac2e52d06ab1a4584bd3d40e96b14b295f772404569a7080092245385c1b202972d296ea162b41420360688f9ab86c7649a36aa440aa7a700f11d51df94b8c1a5e5ad52ec76ea2302ea5c922ed9b34635e0cce629869f1600083eccdb9d2e657d2032976b8549277f6e322b35c9ce644a719226189ba84900ab26397beaaaa77278375b1919734ea72c3366e0ba2a350031b345a3438069004a77527a790ffba4be065ee85ff2fcf921e7c20073f725e8a03351c836780b00d9308652326acbe883f1f3e23b461c02ed1b468884716074c6648dc9fa25cb000a8c4d6fc05863a55311e3a0a1054bf8c7f3364e87bdd3dfe8439b32b42c2200cabec8b75b4b32eeb776c76d63e4a8cc517b8eda7754e2a803470d1d153aea00c851c78e0a2a16112cb0525662ea655789c5b6124b5960a1bc5ba16af7629f003caf5a1e6c0cc6743ce7d8af5096aad7106bc4bb80485133e6ee72543fb3f7000c0219df7009dbf2d7142d352eeb72636edd92b76e49edbfec2caa3572a72c001af51ef21429fce680f62b70fc51aa46bd65ed2fb9a6e08642ad526b6eefc6009648265761595836b880e05c7a71a5fa5ecc39d7ab6ff1df4a1bffa7c67ff000c2d3da9c4178cba33b8eb19c342ee1ecfb52da8488792a1930aec3c4ff4f8c00e3075c030b22e32de74c0cfffcbf055edc1578b90b76bc3903e35fe4cc319a00facc3042245c6f8dce3559d764fdbb65c5baaa1b12dc58e954e061c2e7cb160009fe01d3635c0d3ba7b5eab6472aee098a089e5b62618a3d203200c7d01dce007a449b5d43b4190f84818ad904479e057c32e1f335beedc90b8b33c159d3dd006ddae863e0dd9ce89d12bd7789de03a2f7a18133bde4793e9d41ee7199351a00119fa757477a787dc533a89c29e3ce29eece05da6c6eb53c4447e706194fa100eaa372dae88f3c0c33b8327073cef9223db05035c5fcc765da6dc24ce19ad500d30c9895ce3fc12108c8a94189f9b0d7f7989cda20ce690b2e9ac0240819bd00c135cc905948c520b166c7e206a8c851a9a3f61cb5efa85d471d386ae8a88100a38e1c75eca843bec207161a4fe0ef97e5a45bdf449de07b0208c4839e4e9f0090e904178d7e49e22ebd663704dbaec658c84e806327262409439270b7be2500337bec27d882841bd97a0be2f828447da6bf23cb46037308df198b447fc5b900158e98feae3d62a6f23477ee88cf5494600919b5650470e81f48e518cd3136008c10098bd2e86489382ac8fa8a65c562c21bce4a77b31b15857d269770f935005674e370d83bfdd3bea80c59541a5faed50fd862f3a8c60d287854ab91d50a002a2c59b5f10a5f9674e60de777618d2e91d6257ccf51e178854f9eb72c0f820086315d1028f5ef0094fa37880362b180c88260a90908d51aaf31fdb66cba45001637009d2d53cc9ba90218ac08dce5b8c0ea4a5345ff565676c76a1c9c023000f0579c9da2d1bf1fd03e37e69f5236fa3d6b3f2b6ff9b1a45416a60cac6e0c0050c3b26c7815f5012979cb94aaef159c73bdea16ffadb4f17f6afc072f3cad00ccf300de320dcc72eca3e01fdd72a4e0838101e33a4cfcff8d38fa73ae01ad00ea41b5600c7d6d6368bda7ad0220bdc6c592b860177c1cfbfb0ed1bbdbc330004224ac37550ffe05c1df1fb90bb4bcf5e70cab82970f5a9d35a62a2bcc3d6a009cc693c4268494dc934b2fd251b88f5f6f4351d10ee6d7d14ee3e3a58cf1a000f13f76c9df35038f4fb10855ce2386d83d80c06ee4477b13f1a2bd688fbfbd00e29ff9ed75cfb61ea7fd36da837844817d98db8f227603d3555114edb3bb0b00ebbb8d7ff188a7a191861fbe94e93bd377fe03f4b5032b5e1600007339c60b00000013911f8b08000000000002ffa55a7bac2d57595fb36666ef3db35fe79c00fd989933fb31fbfd9a73cfbdb4ccb5250d6a5bfa4014a231374ac1f88a901400d1941850c1d686aa69a8a689a4c4a046099646214609463426ea1fa241d1a20021f887d510d4f20718aa688cf1f7fbd6ccecede59cdb3f3cc99ab3d69a6f7d00efef5b6b7db3af2adbd2d7945d7b50a9abcaaefa78a8fa46e1af8ee62b55bb007ba82ab57b6af7bc01e3da3da6298d66f1c5fdb5fbe5c5fda69917d7b14ad900d709eae079af72f17c8daae0799faa5e27640dcf07947705e027af218207490013d4ad7a2674c186cab4ed7fdd9473f3d45565a97aa6eb32df28e61b98afa80046a61b7e42d4beaf2aaedfec2babe90f54c5f7dfa08c80d2846d20b29a5440000b0fbb4d744740621da3e79c9c29f54ae5a7ea1a10790d1fc3db957f9fa55400eabc452878133e3b40dee9726d0fac74c84a8f827438d5c7548f537d0ad22b00a69c62aaee702ac0549f5301a61a7d4e85980a381562aa15702ac254c8a988006a53a778e801c6a783186f22be89d5550b80e8463acef4694c9898c3f834d30051388098a7e0f734422fb233d5827c6f6e28dbb723829e9ea9ea1b5594aaef00cbac8e9f593d3bb38238b3c2c05776dc0acf94fdbc0a53f55678101431c0ca00413cf4e119f501f4f3c36a40fd90d901581a92a50187c7230cc9ab1a0987ec000ef4086f8ec6e88e47e34c8d12604bc613186c32018f9389186c9237311868003ca626d011f46f273a49d5bb323d1892e02105100442f4301c0b4176477a4c0082b2749c646a3c01c1493205c1e91404a7532138cd5b41f017d51404c1823d00d19354bd2fd3a301091e50c07bca6201a9a23c2aa1d100d082ae7e1554c2380021e9099c2b9dde0e37357fc7aaf89b9d29fd8c823c1fceac3115d14ac6a0fd009c1aa716ec304c320b3ab20642262e448d55e12ab17195c29942e34c1cce0b00479a73e82c309c73b810bdb03bd7985c2c333d5d62b4d4e8350e7a999e535e00f7562b1b17ae2c7a33e2803b1e8570f820557f07c5cc53f53988399f2c20f9004c2d52f5f770b5395c695ec794fa07b5a02b017294aa7f04e4a83d3f53d67f00292cfc4266c554841b168a084baf1ae99062cec5c116afb59528432da83b79003da2fd38d2fb914604e966206ba8c9b83582be0340c5808a194af1001133a600228e62f1fa11b8b1d4884c5e572aa9d90809755c7390e0aa3f8d5ce78a278c00b550257ec4911e0f7373160e34cc5d3477e071e9c01240a332806eb2b973680073482e4c6b4c8601cc4841028d5ee3a007111827eeb458393d5889c9298cd300a0df84fa92de0c2d1ec38c505a7d905ab7c338716a6550473c416ab01e476a00b0ee80d6429831ac0798ba4b05b91901f96a42b609f9dd84fc66b8ba98312e001461d2d750ec148b98e80e75206604a70a2619eecd38e448ef477a08ee9a03005923ca1733c2d8c3b1a629c63440a606516aff2d5e84642724976f56416abd001bec8468ccb5ce44849ae2dd0fa829251045222dd8d378925913c4e39080b6000144f85a0fab590938c3732680585249a68293611d27047d870185df84c66f00dc43bf112a398a047e8336451a78372d7514b60aa61f2b541b52b574cc8004000232fd3325d349ce34341740bac114a6998a699ecad75b23ccd9d336e77e83008a789ab2711a6d461917c03b5b2cf1fe036a99331e18c69d43c64d4a90b09f002d321d2e4859389e8614fb43466c2403d82a1ca5d69fc32f40f023c01fb4c900f767d434b57ed3d01f4fe91b4c5fb33c7dc13766a29bb964322a482fc5374000592d336b6654877c3d9d41dea92e4601df95a3d925fc9bd5c27f4bf8072c38009d89cf83db9b0cf0978706c8a830ca31a5a49f55b3d4fa2a65409b09b77c27003afcbcd1a1e19eb40224a7c51c4297ca0e162b00fe935a95802b3c570288250095f95270ce093a27e88b0614724d2f702893880d8a39e4415bc2a1be4a573d009ab60aa6bf969b474d69136cfac43f9a231b5bff8304ad116e31d88c17a4bd00e2bbd51ac9db51eb9ccd855ee3b91ead326b056b0c08681bc00d001b6a530200e2c0696f04104b2acbb5e05c13744dd0ae01853cf34be53128d6995ea02d6300f0c7c470346fe54ceb49b185ccb985304096dc719650189451e8766414330700c34be8375821405675184a5f318682223067afda9cbb4f2d53fd0ac8b6e43400da9a326e8177bddde1fd1d6a9733bebcc0c18465bdc373b7de82f12d291fad00c1f16a4decf7e414f5067bd23a4cf55b112020f800f02fdbe4fbed6a95ea6f0031f4e31503648300a1da819c01c2ee4a6fa84e625feb9d04080ff8bbcc5a8b00ac7a95e9d51af2ae74315af25d395a5fc2bf592dfcb7847fc09253d9dbc12d00e3ff680171e6f474fdb65c1cb5e06e4f85510e719a47d43ad54f5306b4b57000cb77a2c377191d1aee496bb9cdaced064297ca5e6e53003ea6d21230c5331500402ca96c76827343d00d417fce8042aed5050e255472141bc883b683433d4d003f3b5ab50aa6df6f3c3d532bda04fc601718cfe578477ffba0f137d900e84d00f4b650bcedd78cb7f1844ddf0d96a2c8505c6eef9724f19c2171c989c2e85f00820cfeaa79f282fe716064a217c5270b9c92f427d4dcf8d1620ccf5d4c12cc007d12a74bfb1c590654478be2b43a37a7550ed7181211bc89c343bfc2709b890013d96a2be78f1d86f42fa88e5ec7ee5663729722678a22357a8d835ea6b7f300e2fcb1dd9f3fcc4a9e3f76803286b8a43743db62333c42bcd737a9fe2282630096ea7fe1eec4adda7e13760ffda5ccdacc10c3b33aa6f497cd460848c4cdbf003518c64875f62b919ff54b9995ac8b3d66b5df6356e250b2c7cc44e1d3728f00999a8485d7e0612de94bef477a05ee9a1b5923266921c8e04cd62ad1725dc90074b2c23172b1927b08b9496074fbb834faf202a32ff69995f837680b9ee48e0069a1c53ef20ddc46fc898ebb59666ac3885b2dd7b8e2acd7b8e2acd772c55900e72dbfe2d81b05011a796e486d5cb016037a09226901327a33e27506eec3a300e051023f0b9309d6dda62646bb09ef399075467233dae20ed8c2be010d6323004ea64580af18e0f6abcb009f9a005f316e715a9a4f8b005f31c0edfbca009f009ae85c15013ed909ce1d417704fdb632c0671704b8b9bd1914f022fada04e1007043f2efac5530fdc6c25b66f4166a92bccc84e9ef2d99ce33e08cbcc02136003b78dbaebe05cc5bd4d6ec186bccd9bb36e71e53dbd47e18b26d398d9652c6002bc09b5e39c7fb47d479cef8f6828c8b9b907da6a9f7f3f40a18bf42ca47290038dea5c4fe9e9ca23ec3a69eae53fb437075107c1cf8b76df2fd1c62d27ec200d04f7674f733f80d5501e4f49b54e2eb8ceabc22e17a2eee0eca0ae9222dc3000fa10dddeb62b4e5bb72945ec2bf592dfcb7847fc09253096370cbc38d1c410066538af36c2e8e9a32b0a930ca2106fea84a53fbd394012d156ef94e74f8bb004687867bd2da5ec9ac2b6710ba54f6f6ca5500fe81ba5a025ec5f3aa00624900e5ec5c709e11f48ca07f6a4021d7ee0287122a398a33c883760e87fa34b3d900d1ae5530fdd7c62b911769934c35e4eaa1fd0eea433de40a07451929f738450005c8916c6b1735225b158525db149638f48ba292cf92d7995f5c083bfb0b2100bb9de242e85f7221ec90b4eb172bfd839598f45fe642b82f6338651903487100cbd01dc87564234bf752c7952a8853e566c83b46e5f3b86338ac2d95b744a70055de12a3d4390264c45b62e5b7714b743a99e5b036e51ed635c06728452eb90058f585a1aeb82d04545d1c354c0d2c62d18b23bd1fe910dc357bb2863a765a005166453d4039807234de3ae16d46b8ffb8f32e68943e1415168984ba2c04420015755fa92a57bfff5b7ff4856bbfb2f9c4ebeffdf8a38fde78687ddb3fdfff00cedf7bfb2fdcfdc24b4f7f9978fa99ee77b1a4abbbec61c9fc899f78fd7b9f007aef8f4cbff1c56f7fe8e73ff3678fd87ff5c84f3df437ef78f2ce2f7d6c7300e36bcf2ba9c7513ccdea660097816064a0230c186cf0a38075464dab753b5000518029d7d810bd5e47f80c04d8cb2c8fb83c2d4be8635eee6340e8c99bf8ee005eaec448895b48b194576f868d54538065af5cefff8e58508d60563beac3ac003754dfa4438fce4b8adaf66e351216045dab9f597d3bb7c273fffee0f30aac00576c2f02da1f52515e85a5619c420ce7400c4c3ac0785ce2766d99b74557af00a3c3b672c7a54c1de0761a2e1877eb1e28bc5379451dd3037a97501e87ade30082daf10135968b9ba2f36358e9d88603db9d2ef6dc6e177b6eb72b7b6e376f00f99eeb3c0937d58d9cc1d4793cd39e2bf558e729a23b6651f618cc547e497900a983a3b2eb1599c12d3343b3536406e315061dcddb1007e97433d5e90155af00db073ffd3ef8e9f7859f7ede0a7e3e4c276d302c7a1a61fbcbb047cecf478800ce96227107fc3ca63aa9f35be4c7f812e56e23e4baae8c85ee09c2a94736dc00ae4c3242fb5dd6207ae0a0770107644cb4d59377bdbce5657abbd2173c927a00fa8c574646b5bf7798fe69669d32526b66f29485f13e4ad7314add95e854b0009ee6ada0782afa88e45d94b782a2772a78a4527dca4a130b52be99e44d7378002ac5254cd6cda4d4a54e51a41d0f8175e809562f6f05454faaef437937cc9b00bc83756a1e012e5807efac34468eb2bc11cef3956ac3437fec8db0a6778b35006ea3c7353daee9487fdce3ca91d7c3ca688495a391ac1ce5ad58193422c245008cb950fa5e44fabd518495c35bac8c1b43ae1cf6d01f48bf37e4ca683484eb001ca961ea520db5a888ad5e195bd6b088ad61590f1deeeba187057d55b97d2c0055bae2ca3211ef371f0530394195675cd6821a073d9cc0f911c61d172bc707002bc7fc26b0aff55fd4db6f7acd72d36349092089874d0fe5a2fa28e5110be70065f71c4133b671fb727f12b72ff7152ce223c98ceb9cc2a9b9dcf4dc6f904d00af8ee9ef50f5d47d15f2a2546b7bc5979d5ef96567a82981d396ac5b974d8f0091524750885f6a1642192243bd1f3153ebe648d688a3b6987a9b80da1750b1009b35fdb472025faf939d3abe40b837f005c2fd31c002bf372e4aa311ef5bee009bca2ae3d85419a3bc34da1b17a5d188a551f707cbd2e8d8d435a37d69745c009446239646ddb795a5d1faad4ba3118e906396463df047b98eeaad82e91f570063a3da3a55cb3c792b4fa994fe512d7b51d973cb5ea7ec75cb5e50f6c2b2d7002f7b71d91b94bd535e5c1a2c158e5975733f58ea263182b166087fb246095c0025a913a6289ce2c301ee1509afb0ee1fe20aeb3e0b5db3143d3dac1e4aa9d600fd5859aa4d5ebe543b31a55adeeca6bcd9b9bf9fdfecf41cc7d40451fb02fc00142efc47fc46c752adfb455cf0dc3f36f4bdff6fa936d9176793af2bd5262f005faa9db0540b4e671283e096ae26e28c459c2f941755462515463944ff2f42008f159f32a095a5da4474f8959b4bb5495eaaed95ca4e58aa75fff3e6526d720053a996159e84b5a08a75cb52adb18b41517c39f3c09f1478784f12a62badb200544b9be05ec1b865963c2952ea891c57da189e70d81693b07ba2f99dbb89f4006537dbcd4cb519ebf5a687c4ee5db69980e24241b58d3a56d5753dad20ab9c00702baf9d48feaab0d216d96d00be56b5d34acaed1f22768c88ad43117326f0006cdb4d5c4e9a44052cddb4721d58bac73c64bc0a878cca9de73c10e0805171003ac2748bef5b4dbcff26d5cc157ea245946e2bb35a9d3b557e6a25faee511b000aebb689ef01d5310a6b930cb8137cfced4033ffed00d4238834261b756485005c566485b27752f6dcb2d7297bddb21794bdb0ecf5cb5e5cf60665efb4ceac0060d22e0f7d0f9b13a83024e7ac08f9b7de20d31e813c6c159547543d77a5f600057a36d2080526ff862749b2c124d9a0a1dea3da26c49b3db9985650a8727900406e7679d6ebf600f384eae56c785a8e863e0f7ae67c294038e657de678ef90060c3366c340fd930274a390062b1eef040e81f75c086dfb1b1fa199479848d001e76c40e8f9b60e3983fd8f068780f95a4fc94eec98197643b5d2cfc75d5cd00c91e5f20bd3909cb6194b76daf23643d92f58eb1faa3ead890e529d7e3a93b00b36c7e118cf86da7f2715c522b9fc5d513d71d472e99241c757cbcfba4f9150088dca419987e843b2a4eda565fbe081a401af14f4a2306b91109882595ae2f0038a9c3a84bd0bf30a0977c11142a390ae83040f31df02716e50729c3f4e7ca000f52bc460bd3c5c77f733d30b7ff0ef50c9518ace875cb5ec45a82edf3aeee00c7c0f8af2a2e25902fc5213225f469f5026c4e419d305f3130501f7f2412b4003157f5559c565ea246308d25360fcff690df2787f8705ef9eff2c3f945dfe100f25f87f0981223d1748662bb80b60b10ccd56a1ecc7a802b4b60a7d533f98e00586dc8774498a87a9bf2d36adbd0979f0fb983e2b3f7a0fceced6b9ede9da1007c011fc9e634e07116778652213e6e1081af8b51c077e528be847fb3da1cb300847fc082d358aa22e056aaa814271471ae15b929609d840aa31cd47ff53af40058fd4eca80265fc4a9c3803aacde657468b827ad80b714d46dfba5b283214e0043d57bcd694800e5b3b80062496530129c23828e08fa3a030ab9fc0bdcd0d800c5a0c08131461b38e04fbe23faad82e9efca1d42f9b409ef617e8497a7115f007e8f7929bf4bcae436567cf6971b9b8e374e7e113b62e10197ba7d79218790001f68f0271c38e406b8f685b1cc0fc0756cb8b60cd71f10ae87785660551dc100b2c33d365865807ad530a4d63425e30f418caf0de96bc301f87dd4fca429530043fe52eaba55b36bd819f050ba064b569fa855d3eacf82845d73d3ea33d7f900cb36d762faa941906bd2f19a58e0d59c1a0a7156cdaff9fc1d1dfec9efe87c00d38a8db6fafe9a6f319162411de4eab51a87ae0c75ad56ab73e881ba97569f00bc665158123e9745640a8baab52a875590ac91056d70d640d43be4101925c700203488546878078b6c2e32e3bae1a45ef38d5c0dcad5009926e56ad69a940b00ff44aea669a55cbf536b0ae758d0028b2d83cd972150d75a1c3640a591569f0035afaab5caf975157e2afcd4ff02e3b668efb6280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001242ab1a2bd6d07d8d61ea56d85861446349e52c6b7c0612b702cb1e6db6ad0b089000001000000000085864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631156eabf84e3ea50d40e3330224f2d2e81648fff8f1f7ec1bc6d2873cca6e959d0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000114c2d321b88ded0e008e23bcabfd7119e218f9964a2cf6496c6498c3ad2b9c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "165237e03eae7115d6f44bb38e20d90fd37d3e29116bbbd758edb87cb43413c200000002000000000000000000000000000000000000000000000000000000000000000200b77e0d97062e044b4427717c5d2bc1e262b03070e2d0d0224f8b2bd1e8c1a900089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000200b59baa35b9dc267744f0ccb4e3b0255c1fc512460d91130c6bc19fb2668568d000001001146c69f1152dd4510c6337af4ff0c84278e142f5c676660e81176c1c3cdcd0a0000018023c08a6b1297210c5e24c76b9a936250a1ce2721576c26ea797c7ec35f9e46a9000001800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000070dbd8f80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000caf43800a58c14d7a51d5224b54562d63c1f863616d907d4660b5b0707a7dda1c4d91cd000000020000000100000000000000000000000000000000000000000000000000000000000caf4380000318bb617074ee06e65fc97542b50e44f034b1d1b8b12c26e27292c70158ea8f3c1e160b0b73158f3bb4576f4fe7c1763304049e85517c02129493c9bc1f1a86d91e3c545786f2098a0ed6694f5f49fd407d1b60a50122e995fb37b7f1aaa3e14f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c5f0000000040000000000000004000000000009c5f40009c5f00009c4c405d15342d76e46e5be07d3cda0d753158431cdc5e39d29ce4e8fe1f5c070564a0009c4a0000000006999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f801f595d1e7be64f80c670849206be58b45246f44302c15435100d7eb653d645500000000000000000000000000000000000000000000000000000000000000012b2a7fc4bd74f07a2dcf4a5dcb8642b3aa7c16132e115c032a1b8d96a870683b1de9ccd83e9067a8f9f84960c8399af3bb72131b795aabb4888347390db8b8de0000000000000000000000000000000000000000000000000000000000000c7700000000064cbe507e000000fe1f8b08000000000002ff4d50d14a0331109c640093cd5e92f6b90f0a822054aa9e2f77e09360af3ef9e06ff7ab9cbd43e8c18400dd99cdec5c464888ef10bb0023449407ca11fc0aa1807ddd43ed6ce75ff67600de80480417165b5661d9b009336f41661f4db3f3f995f4fee2837ee0615d30004283f9c2c157b709a860d73006095ed648b2f5295a67d723abd257bef346dc00fd24da0c44232860474b940a6d85c6c1cb60a5be008fa8df01b883e63261d000139e2a4407d79e514f38be51536ed5563d54ccff79f24d1e92393145e24448009d0e49e83043dc7d1d11f83ba629a4fce154f6bff67116a2d9f63ccdd77e6e00912698a79971b81eae7fb4916d6790010000da4cf031000001bd1f8b0800000000000002ff3d523d4f1c410c7df3e119cfc721a50a4552a68874097b45769500160e8e86e24a7e00120542a247fc407e15cfb31c2bd96b7becf7c6f64c08ce00ef10f416981062a682fe063fa564feae7e22e95ef7478bed5781a7b8858708008b4522f53584fa06e92f0fcf1610f5706345074b9ee09cfe01be211e9c9125001f4916ca3ca8020a26179c99ea192c75f6b1d2ab9e96d469a4d861a3e9fb5d00242a03600e1aa51312ac48350ac9a0154eb493f217fa4a1942279b185b1f6c00668a67b0b7d957a284e669a536e28368f345d43f8936e4e831113ea910fe1f00e413dea55333c95c2f7493b932d8cc4c1694d11b79947de62d2e2b422e8d580047b42dae67a79c7cc87e541499d9c80f6ea1d80ec65dca69070c974c95f578005a9a9ece66689e91c305f19ae57054a9d7f4df32938dceee2c9d4c12497ebf00ae869b6b1af828e035da2e1fb956c17a7b0e83af44382db1621b546ef58cba001ac4c30ab1b656adb5c569500e948a7899394fcaf8333183ca166f8b5d591c00e9a044df0da36c5850346afd0ea755ab3d42fec623acabac4d12f0552bcbd5000a1ae99aaab9325cafaacddc42f6b2c5cbce05221af1c582f3f7f3f70f7dd500175f03030000dce235010000013f1f8b08000000000002ff3d90bb4e0331100045afedf8b17e8506290520da480196c62b101248846c9a14347c74be8a3bde00c06a67349ec73d638f304a3fc3842330c2d84087610b7e032df0ffbc850bfb00b0ff96f37e31689a92c21ce65e98175b0a13a76026695dd17fc1d21fe026e900f18f6cb93ac8d05138f71d76273e46b821a607e01a69567d25333416206b6100544649183593431ae1746e3a27a6924e4ddbd4d7ef1d85a1aea7d5e526ec4100a1550e219393b21da104a96cac446e51ff9095482bc8da91125acd642d4d2700aa98a219b9d2f31db4fe07d50b684d46cdb6cb67cabf208bfc0d9c8f5c3eec00f016f9ee4361ed036587f727d602475d2d593453eb4a86bbcb160b97c9e49b008e9e1dca672a784785139ca8f71647ef826fcaa7575cae2e824ade29a45ce900b3607f5064a821cb361336e7cdf917686dc2f811020000df27eb560000012b001f8b08000000000002ff3d50c14ec3300c7d49b6c47593f4ba03481cb8200d0028126aa571a4745c38ecb7f7553ca7d32ad975deb3df8b332238ff812067600044d82526c80bf80923f1f7fd88288b2c17c3962de019ce8855d646ac5b6cc400cc2984d95a77cc3fd8cfc6c637928375991df0d46cccb11b11bdb20a79027a0010ca185d7056f69e602e93d7c253f1aca434bc70c2d7bf1d653a46669040a5001a4411b350d3a15738edeb2bf08c7a766dd35069a466549b9195ea0956cae700bbd1be34bc190d77a37a331ae851459bbc50fe938b51fe0131f613ba74c4ac0008a92be4be508e38bd934b1c8db564d3d4a929055ec56eb1f91254997c6f4f00e324534122157e114dbdb544e6986472a22783d4d6b776db2369aeccd96c2f002836c407b4dbcc385c0fd77fa6b1e19cf5010000f73a3d03000005941f8b0800000000000002ff7556bdab244510afee9e8f9eeeed99e9d99dd9dd87a2a2890030efee9d1ef35003913beffc40e45203f15f3033500c3410414104ff0953110031301283c3ccc3ec82c3d0c8e4c040f457d533fbf6b873a17bbbaaabebe35700d5d5734646e92b64ec6b446764b21213d967093f8b51e2efdae354d8ebf6fa002de65d4f8334863ac7269973e664985fa51cf30d2a2e61b33e2768bd79830f00dd64612856d5246a0d5534696399651696012b1396052b6396854b8aeca46d00b6886649f48c0a3250017ea178932a4cc643c2b184a73365142f9d06d3afa0007b056aa5b1ca57c25fe1840e6f4123dc211c21c2060547853799239559774a00f41cb99b4ac0516e71c0919c5dac85236b6006d830182e9ba82a477ad99129002bc71a56a7a4fe2037d2b54965b068bc96635539a9327b8c8acc31ccac568600c00cb6f3987c267bd93c644fdcf470f36df2ece69322f134cffe19d1c466d900d372f614640d3230590bd980ac996c846c41364cb652111164cb64942879d9006a306307ec2fad27bdeec0ea7487a08f56936eb996f2f5727c7d741ccc758400540415f523575791e1f4cb69f941690791364c7a55a32a9a913e02c4ed481f008ba72be866b78c5903e7f7a81be9d349352d406a05a4cf12483883adcf21de00addb53ae63a8f86252a1668f39cb7ece323ce665ad9d5c0e4958f1a699b353004cca1f1c8f9e297d41691f50bec05e87460e8a68554faa6e1e14658fe36235001eac7a81193e15ba9874518b23883baf65939dd5e5a17e234916a944fd46e30011b3b72562fe9ecab97e4db9d8288f6c805942693ca86f8ed4bb83fa7256ef00a0be3411eaa340fa4b82940b876f5f9c6f1f9f7d1847cf4c071b06c3c794bb00df703ddaaa461e9ea27aa4df2735fb22272a37291751fdd14bf5fb792c37c300d798ea287b711eb207dfee515c428f4bc92778791912bc0f211b52e8fe216400bd208bfea082cda1fe2fca17f5f9a23e3f520f668ec44514b291143685f08b0007d5737d17b3fa7c561f81864ade0b48ca0848cd29dff86654c5f3e97a7c7b00ff8d3b6884a8cd8932731950b4a8b5226feaa54135170d8a978d342814a7f1009232be321e6d4e6d539b131169492dd773789159210160da55a83107ced513005427ef027bc73963e3c84c517af7c2d2c3c448c646b20e879ea58e0fe169a800adc1ab43e8ec782cd4df7837724a0d547a489ba13e3231e9d9a4679357679300da21719e2b0757a9e55bdca212d54be447f50e6e718bc186b382f78a0c7baf00503647e735abcd3adcdd02a555cae54b821b08be4e9b83e006f3460471a4700099e8742cea58f4561245306d0a263f0e46accc2a1c82c1c802fce3e8566dbd0038fdeed2915aee48dc7e36481a63401b495a6aa9606e7a68e841f51a2b7f5800b9c3aae8d9c19ed1ee07e87e9f8639964e0f9887b69f54bf4147ec50649d6500990f920c80040fed90795fd130aa0f81cd9ad91891311aa0370e5bec7f42db0039f0750a3c3b0e3cb9b3c5bc8dc3a4378344bce688d70cdb9709b649f725de008e7a54df493b565f4b3bee21f123f5a3fa26d90fdccef30198b05e1a04933e0085c4d16ec5da4e5a322cd10e115eb464c4bbbee8b36bde3b50fdfff89f4e0b00ecd50efe634478dacba3036fa528632d4f0d9cfd2195343a093f43008bf1ef0004ff9f18c7bb88016e04f176c77bbb3df67ea6fd9c9b41ef31ef3b78bedb220068163449f00482bfd2c941f004f38908e248b1dd8bce3d8bee59f44e12455c00fd230a523232abd84f7ac0d8a220ef4a7afa7a71fade5c10d4734ef095e27000af4b7480c2875aee35b7c220df0db05c36fc80fe49ed6cd93de25ea7f62a2f007fd9ccaf6129ada40cdc7aeea7d633e91a5d2cf007d3b9b2c6161e1f90055400e11553ffd87254ff429db1f9a89b73feaccc152c91c54dbb228b2ae04065f100d9b625659d75fce18a3ff97075692c6f830ed6e1b8e5031ee6bcb54ce6426a006bad67b282f56ad4fa8a32d0c8862f9fd3eef6eef67f1a47be96370b0000fc003cf9cb0000018a1f8b08000000000002ff3552cb4a2d410cac74fa91eebe5e00dce942776e84a3ce0199c19de0f1b17121082e44702ffea85f65a5e738904c0027935425353d41256ca1f6084c50cd7428e7e0536819b0bb5364dbd9ee85b100ed5643a0c9c28fd0c53391fe1ee992e98305c47b78f072773241a45c008788008fb2d2c479e02b222651f163094c469b90a5cea19a83049b43b269d47945e30031f467069e006bd0689d4d488d63a64232d40629b593f20c7d4f49d03d65c5004061583dec63023f564ff6464a5a2d9c266fb06dd01c13b16e9136b89ea5500014cd21d1a7a8b36839412ed9e571bd860d7998ce912e96973f3dcbdfb719c500d7d52be2252f54369ad61bafe430509fb9fd2353f3459ed645286d32e5ff4200b0e862bf51f784fdf4f43d7376759dc407cc49ffd3ab43bcae10eb6aeaab2d00626ab953e84c3cff45ef5636f820a61a97fd5e5ce424a48351f0ed38d4033600548bd68e20d6acf9fde06bdc8fb6daba2401bfacb1ddbca193ae9b7998461800ccac7b58c95e37f8dc8a12d189af161cff1cfffc024357b20c9e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001242ab1a2bd6d07d8d61ea56d85861446349e52c6b7c0612b702cb1e6db6ad0b089000001000000000085864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a63124877c50868f86712240eb535d90d1c97403d074805dd3758c3aecb02958f8d40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000101f595d1e7be64f80c670849206be58b45246f44302c15435100d7eb653d6455000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0a58c14d7a51d5224b54562d63c1f863616d907d4660b5b0707a7dda1c4d91cd00000003000000000000000000000000000000000000000000000000000000000000000200e94fe151ce814e7955fc77bbc767102129defd4ba80d686dcaa014732c52ed00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000300b59baa35b9dc267744f0ccb4e3b0255c1fc512460d91130c6bc19fb2668568d0000018003d4d915e8bec793966011e3efb4f8449f1caee01c99df21afdf1ce11f113d490000020023c08a6b1297210c5e24c76b9a936250a1ce2721576c26ea797c7ec35f9e46a9000002000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000070dbd91c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000caf43800287017e0470ae96de7dfeb425d173a9416447a1d2a9ed7c1e16ce269fc16de3000000030000000100000000000000000000000000000000000000000000000000000000000caf438000030c5c5313a6e274d0c3917527a5c36b42cd598fed71c33486e3e54e970e3b31a40c661c51495da9559f09271a89b5a5b33fc83574c737551a6c2576b5bd38ff6d22bc6ce50a3b301a4a69de618ab29d86ee1ce740fa682ea804ce54affbb7e567000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c5f0000000040000000000000004000000000009c5f40009c5f00009c4c405d15342d76e46e5be07d3cda0d753158431cdc5e39d29ce4e8fe1f5c070564a0009c4a0000000006999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f82f6bcc824014da6ffe5a5d9357672e71023705b12b4c0a46422b36b1f8e30fe800000000000000000000000000000000000000000000000000000000000000010a61b86c05c921bdc04ae78e1e19c5bdb1d8a9c2a0aafef4addccf8fdcba38841ff77dec4100baf62b87b9a1e824419d3979d0b2a4bc4d28b6dc5cdb155a53b900000000000000000000000000000000000000000000000000000000000004550000000002387e3048000002221f8b08000000000002ff7d523d8b1441107dfd0031ddbd3ddd3383885ee0ea9a08c2a86bd20b0626b71f81811c06829888a90800226222221a991898991a98f84fee57f9aa678ec5e406aa66fad5ab9ad755b5008651fa214c38006b18ebe910ee824fa079be4e9770611bb667826d2783a6a9002554d885dd1236ecc37e432acc46e2967e87867e0f779fd47e2fc90729bbaa00b56f8a5f44565ec47bc055c48312054a2d78bc0e2bc73b42b237e06ca0735600e8d6512d6391426fa702b4a0e284b5324a3e5b9dcef4ac3e5163fd65512dcf0026e85074682f32c331738a4e99f6ffcc10198b3a161d03339565a640e4512e006cd156b4a85c6a9a4106a1247d2494fd8847fc5e9904e34de6e5be218f785c0054f472dd18a19a68887f8619714a4c4f584bec23da110762a615ac4dc4de23008d7842cc26c192d47c2b359f126bb260b923f61add8867c4dc117b29d8731e00edc2f3f8025efa5c60dd8857d7a07cc346378d8c1acd6c75d4058d500a1c7f00fee6322663ce33e67d8df9d96acc528777739182c4cbbdbbc25aae617d391400b471c487023fbd225bf2e9b28a640aa5707c23beb0b2bc78b3afdc36deec410051c930df64e6e75cf3f36c359fd4efd2bb3f9cd12da3618ccf9d4c4abaf50300ddb49566d5717cb9eb09fe447fa8bbc155ebe9fbdc15d599236920e91786990014f4403f5452cfc6934f3d79a09e61a87a86d92ef4fcc6403d49a85dd11d17006f912681caa02e9108ace3fc3b099cd76c8393f393f37f5a578201d203000000fa3858e80000021f1f8b08000000000002ff7d52b18a1441107dddd5d3d3db00d33d3b281c1778ba0606c2a86bd21b9808eede1a1878208889988a2022262200a291898199a98189df725fe5ab9e39964b6ea0baa75ebfaa7e5d556b88b10f0021610fac21aee5827017fc02ade5f6e4043e6cc3f64cb1ed64b034730213760061b72107b2d103c7758786eb29fc7d72fa538dda6bbe554d7a53d74564ca4500bc075c47dc1bbdda9805dd233875ef28c991e47ca0382291ba6ea70274a0c00084b511a3bf9d4d67aac5d11225d58b8ae9e88bb3ae58d75d44ba43e4743a4500facb918ebe78eb8bf58e9126964a11441589586cf48ae752c304198492968d00506e476cf8bf92046925f349df91473c2a46d319e3234ce385f817c888c7c400ac28261db14fe8466c8949a75897887d401af194984b8a25cdf94e733e23d60064c5724fec0dfa11cf89f903f64ab11774e3a2a1fb128d56b7208611af8f980032de808f513bcbf74d563b3b530a022f7f7b159367c1f1ccb97ae666ab678e0017bb302729487cdcfb6b84038b1ad529e858848f056edac48ff8ac191b666c009a9ab1996dd6d528a5c0b3d05f995937beec1b5a7dd9836292305e32e373ae00f179b61a4fea0faddd5ff6e8965888b4b9d74e69b57ea29f6651563ddb97fb0025c15f58eeeb6c70d4965c97b92fa697036920e9378699e4ecc075a8a4250b004f3ef5e4817a86a1ea1966bbd0f30703f524a5f6c5f61cbc459a041a411d22001558dbf96f12388fd906c7e7c7e7ff01b796338dc1030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001242ab1a2bd6d07d8d61ea56d85861446349e52c6b7c0612b702cb1e6db6ad0b089000001000000000085864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a6311011feaa54609098a884322267ec754c637b280c15aa79c3be9f1394e2b29cd3000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012f6bcc824014da6ffe5a5d9357672e71023705b12b4c0a46422b36b1f8e30fe8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0287017e0470ae96de7dfeb425d173a9416447a1d2a9ed7c1e16ce269fc16de300000004000000000000000000000000000000000000000000000000000000000000000200980a89065e6db2026d984538375a7428471a9956f83b4d3d8334968dceee1d00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000400a8d036036e3d091657a5b77f57e4d58ccbf621ac4ebe703505da079b6213f9000000200248ddeeaa7efb12698a1ad49b8a2e67b9fec6bc190cfe754b2c426d4e1286eba0000028023c08a6b1297210c5e24c76b9a936250a1ce2721576c26ea797c7ec35f9e46a9000002800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000070dbd9400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000bebf730205e94af461368aa25e1e93f2a78969b775fe224ff72e46dd15b7f1015e441fc000000040000000100000000000000000000000000000000000000000000000000000000000bebf73001080142666da8040ea589e2df6131030df8843235758108a58b67750e69fe63ef0309c22608f462a90eaff8bc6bd48f2ac0a43c551ec7c7ca534b440b29059cbaa81332418dfae0a81b595597265c99172ce7058bcb49b780029d0d735644b654a525f2ea3cb4dc11b7d4601fbcb6e501e0547e25c325645d7821119f3c066ce9780000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d6a57dface76430ee83583f9ea81a6ec1a5769e242db7973edc3c1938454cc8f91583fbc362becc314de8d4ef1384d7a27f03e00814f5e888c90a92d242bb8f3649ef68ab2f869435d2f58e2fa1809176fe717be2730c024038d8375f43187c12a11b375dbefed6f9b59c379e06d9118a75f99878073ee33db2339b0025c5c61ac26f77bd31babf4669bc1783bd41478260b183f52dca817b83ab86f5e763bef1500fc7c07284fbe06cc21cfbddb61df09483d47a2da0bab94d65b8184a91a7b754b188fca59bb4af26b5eed15ec116b0f69511185996c0866c9c131633d34f0db2154dc920ea9a7403a66e9fa8b1f7552e15fcbf1868bde1742b77706e8d9d205d286679fac378d09db91720d7c51778bb3d2c6063522a953119ffba1c071fd40c0399326289958d7f55f68634e5f679a4e7a884c9d3e7ea6881d08750966848e08eb14e64b22635f0ce261018a513aca1594521afd77112f8d9345baf741e45b88a956c5cb29ee99d2e25b015b71748357bab7b1d0e20aab37ec4110813707459a8dd8d9d76b85febeae0479516d6fd670d296ef862ae2a2082ec966b3b1b143d7fb0a363e2f1d480daa0f1a7e5365958315ba035c3c6e613dc79c57c3fb000000004000000000000000400000000", + "205e94af461368aa25e1e93f2a78969b775fe224ff72e46dd15b7f1015e441fc000000050000000000000000000000000000000000000000000000000000000000000002008ec2e89a1bdbaae8590cb992a57ad94e31387e23eee8bed7db39a4b03809a100089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000500a8d036036e3d091657a5b77f57e4d58ccbf621ac4ebe703505da079b6213f9000000280197c790ed66995f8e1411a8b1ab9bba465cfa8a07c3b61e2af72c334c153f999000003002bb7f2372436ecbb2ebd34734a7fbce7e41962fc16f42b0c006b3b074082abe0000003000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000070dbd9640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000d7041742ce57be0597b93a4ef04f430167a7bdd73eacca04d958fab51e647d268884dc2000000050000000100000000000000000000000000000000000000000000000000000000000d7041740004174018cbe76d8c884ebb7ccde38480cb0dffa8c89695f6a3831d4dd6a93ec9bf11c58c442882343993398e172a90d153a03117964c6db38d5d1c970c01b6513c21f63c73e4e1371854d3bc0c98e4e384bd4999f0351106fac344a901692570a50197f7524573c252e11c7d7f54989b22ead74227ac8f5364934eaea5d197b8890008235a0e049ba8bb6c9d0f701af06f6e51e1f4309288a290316e060f65ac55bdf52cc15e121af87296376fbe9e430daffe956fb18568a3ab5a24ae2f093d889d5b1bd381376b2e6c58c2e85184140b613d585497881853c2701043115be9c08849000000000000000000000000000000000000000000000000000000000000000120ed40a6111e7ae05d50c04af2ba0d93dad4162836a8501b570ddc416045edea000000000000000000000000000000000000000000000000000000000000dead27ae04d5b6d1ef238fa8c4d12973c2e6d8105339df79a56d68f329d799dbe5af0054657374546f6b656e000000000000000000000000000000000000000000002f4163abb922603d27582a3d5004fc4e07e6d80070e68902d6d934a54f049400000000000000000000000000000000000000000000000000000000000000dead2012c332cbcc8309c8949e0f6a06fa032b51b9fb4bcad6e2bd4594db78fd44a4005453540000000000000000000000000000000000000000000000000000000010599e8ca29c168d65aece4bfe70338aefa3e64f00726bc5b48539d3d6280a27000000000000000000000000000000000000000000000000000000000000dead2b9ef2c0b331a05cbeb4e3941f3b87f25bfcec9a7ec8e69ac46583e26d026adf000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c5f0000000040000000000000004000000000009c5f80009c5f00009c4c405d15342d76e46e5be07d3cda0d753158431cdc5e39d29ce4e8fe1f5c070564a0009c4a0000000006999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f82b7fbd849f92417221e567c919124b68c52f08deee4ce6c5d7ad71ba349937f20000000000000000000000000000000000000000000000000000000000000001081b6fc6f0b0c08088062e4bbb563dc00ace0177a5fd345d8bc1c4afdb77b8a91e4ddd5e8fefe0a88ac60e5d36efc13bb4f937ee19a1f37669f20a186ba00b060000000000000000000000000000000000000000000000000000000000006d3b000000001310763932000005841f8b08000000000002ffed56cfab1d35143e49002633c9647ecfdc67174fa90882729f7d0fec3c5a14046bab42b5a5a50b572e00ddead22e0417e2c28d165110410495f70fb8d40a2ea4b81344415c8a4205a900b40b17eaf765eedc3e5f2bf40fe885e44ebe24e73b3939f9926d314aef887100a744b6c524192a710f097e0e25c3df93f74aea4eb81367899d988a6814b58b004e31bb4412d44f89457d52d247d0599ee4f053340493ca8fd1a0112fa3368e0090992103288950324309262949667cdfd06d49c5d0c47dd1c758fbc7677f3d004a8ea9cae7a272efb6441e84174ae4701cc8d5a1df98305b0cb2ad8ce2a7d300004301025d8eba2c0015ba18b52f62273a8cae4e2764400928e8902a97341800d2f98474c7263a7aedc6e810e2c9268cae28cb7d9400cb0acb417188519e2d00e5642e26cbe3ba8b2d51df8b5bcab3a3f2d304ec087acb51957e53529f715700b84db1c45d019c3954cec73ebf2ab18fa1a19717c4cf5e66b39719b6c13242008a9e6693a7a34eb3194a67c8a4842a4025a18a5049a8065411aa0955841a400035a106505e136a013584da18970ecd96cd2ec6859f2dc1ae870d941626f2b000948b884bc85bec4fd2212e97a55dca6ba36ab01326e81e759f0fa31a1aacbd000947e9ee7f7fff1cf8495f61effa01f1785306c6635392266c12d4b0d1874700d746d4da4ae3d0df0c1865ef88644192c50648de918d15898d240b90d8458800f62cc2db2f0027a1dfe4a7e6801e7d3d17980eb6e78860d7b37b245e6f03ec007e2c8176138ea59d8565c4109d4f11b136c710b52708e05e3c2c16a9d48c2a00f3d8ed74dab8d432e19182453d6f6cbdded808d97963ed7a6353409650ca330089a64eedb45197d1dd640576254bc17d5cd2a57c3daa1acc557d6bc8d4c110004a85a554351221b52dcf5759b558e6b7d2ae727664b29976f6a98d79c3cf4a00036cbb51371d5a1db248fb8e636f936395664fcc9b560f670c78314906949e00fa35aa763289b854535232699b78f6e855659a88f20c9485475827b44c44350065058f6f48b594ab71503415a7de32699406c253e11c2608d45fa3509c0c9a008e4d8a7239afb4dcb7522a873fcac3f0c070f12577e6a7d77ffde48577b74e005fd317feb6977e7c66effce64775fee5421ca50553bce6f0fcad577e29ab1700afff909cfff0e93f93d3e910defffde5573f38f7f08dedafce656f47715d0d0087fc520f8c9f4fba8ffcd177f40af248db18148dafbaa1afcd2c274d1ceba300af4ddcaf386d1d74af87e7a959cdbec0b78cc73ae89317912d77a372556c4700192c6ae413b340171164bad64532aae4ff948f6259a02adcd9f9b2703755d100245c6371738d93fafbe79e58493d3d65e2561243315d36a32a26f109a30ed3008c699f339caff01879c211380ab95416c265eeefc7b858831423cb94a500fb00013a870898410fbcf916a35eac9a77bfeee40bc13d3c50720628ad7a6352da0018dd0dd41b81174314d68d51d91efab2d163769a0eb8607a2453c5940cd95000d10455eb92a42bb5399cc2ee90d2ee7b07ed0ee9a8d28c376e07bb19ec76190075aba7087515b06e07e288cc66574b326a66287a12f5bcc73e938e36910394004e986aa9f75db0f1a08c31fde67c595d7553be345cb4e2a2db6101439fcb6200e55cd00bd48b362efab8ac148dc46d6141dcda1ee3bf907e22b6bc2a7091b600f15a21793f1c93590b49d231b21d49be994876b12267f06e14ed123cf7d45500bcfcac4c1b12c90302d07771ad2dd7da92f2bb15a51e20132def74be6b183e009ca9349455a48d672c3e27409bd50d26fe2ccd8ad6dd8676928c2844598d9b008c6a90152568b312af1df5dbf426a3a44034f9c4da55ceb83440495298ca3000e60f972dd5359833ce2eb5dee519b70a4ce2f0e4db891fbec404ef1297df2300cae52ee7cb187ff1659c4f6552942dfcb91cd31d2704d005e7d8b4b1a99d7300814d0f76bf54d777948145121fd99543570e5df917278e2385980b00001d2400add0000012341f8b08000000000002ffed5afbab6cd75d5f7bad3dfbec993d007b66ce99d79e39f37ecf9c3df761ccbe4df042e5a66962487b434a29da60b50025587cf58608ad8ada083785c6478812215483a025544d8a52ac14b43fa620006a5ba53586189558698bd5a631a2a4fd7cbe6bef3dd39b734aff800e77efbb00d6777dd7f7fdfdaec73e179471f44565fc3b95baa08c57c44b95d60abf129e00a252fe95bef2fcdbfcdbee41dfbfcd3e4ae3712e6150994b84b878bf4915f000be5d7978bf591de07d87f2cf01b17a3ba7de49a220ef9412210c3e2ad1a6f8003a907b23e882725429d1258107193c00dc5341a283e280a4edbb7c5959b95500194f88a94eb9a49cb05cdc2ab552c5373b4a8d8812969457088b2de514c39e00f2c2f01e81a68fe8c7c9e0e939155aa54aee35bcf4215eb523d0bb4585b1ba001984fc2044f70d2a24f9d8fd29e1e08ff9ae8378bdc1b94d485ea7e44dea5d0027a8055093a016f56e66203703955c82da00b5086a0314b4088a006a13140100546d13d4012822a8432bab2e25eda1dfed1d63a4c3916375c101229a1d7d9c00e8ee31718ed93dee26ba13f59401baf2ba1db43a265155e8f7eeb232a1e96c0095f709d589d5fd89533789d3ec244ebb9b3851bb0416d508945c9233bdad32005f5051ac7e1661056bf431bddf1dc00783521f467a50f569244adc875c03ca00d567f770886e9fdda188c9665f0f696b98d38c86a3440dc7a0361e4de0b5c90004824e26e2b549fa88d7c0e3613581a1607e33d6e358fd72a2fb0332dce7000086208816ba2361c8e6508fc850a68ec6891a4dc070329e82e1740a86d3a930009ca64fc6f0093505438860267a12abc7123dec93e11e078c53170744198046008de939205461ab3f0497a83b46acc593ef4754dbdfa1ca7ed3add21f5150e500638933a20daae311d83ead46b153499cc13871601ea72f1cba99965d95854a00d7864a164c910d2676675920cdd875e7e8ced89d8b49d89c6900e78b444f1600e82d345ac15e2bd133aa5af84e3383536766ad296920fe6a1102be1dabe760009359ac9e879ab3a339345faa79acfe19f1364314cd4a00a97f53734611308700b17a0998c3de6cab9cd71426fe47e274698842941922ca036aa8255267125b00f3bb8c1263a8396d27c343ba8e3dbdebe93ea42bb6650e2dd9ad0e61ef36b000bac0ea6a8c76fbc898110d51eb4ac00f214d410d29e425a5c6be4136a843df00453df49e47692c48108cb470257d24931e0d527766b13348a3338ddd511ebb00923bc33c776ef0b9bbef73682e426b00a336dc4845da1aad60af051598220500129aa48430d38634805d382760dc44fa8cd614cf640437c268a57eecbc01ce00e9c6cead3047f72882393e84aae05c86d522b8312ab501fa41d54edd08cc2b00c4ec11f34789793b427d988934d88934103f75454d3407ba2d6e848e0a2e1900ecdc38604fef7a7a00e98a7d9923c61737c2d98391a62b467440a2fa616cfe00110311c58928e5bb553b761e8238111ed65a9755a13b41563aef55536a208600444530d3ee247126c8c701118d4564685e53b31c5192431031c51b4f8526d300ba3b26ea072c2ae226b27153d88f1be1929218236ef04c51061ea28f6b51250013fa7a66da88a66560b6c9a03dc1d8236a92ca32d6e2e12e2cd78676fd095c003311d73c96ce77868099498fb03fa2211ea76e04e39952c739e84ee70b8cff00ae5aa482b7ade0eebee0b62448da4fe7898ee6e42c124f229af2296b4a140300f82a1ac6cedf202ec0f04f40bfdda3dc7faf26b1f371cb7f34616cb07c4dd300f285d8984ab8cea492899916121be0ac1689334d0b34e2740a7d273aebb5390096f7a667c86f678bfc55911fb8031a9f310f696f70c0e7f61d702b0d463d240068bea8a6b1f32a75c03315693926367cc1dad04a4f5e6d14a7f90c4ae7c66e00cf9740fc77b5cc1197782f051153bcd94268ce883a23ea7f5a54e8353925a0006c21b62466d007cf0201f52a43b536a96442ff7fea1e35a14fb0f293fe70c60002ad51a03562be0b31bb73f25e726cb9c298af56a99873bdc27b355c26ce1200dee813d158c435106b6a9d2362036ad6828829de62253457445d1135b2a8d0006776a63e96c42ad1733c8b2ee46361a8cd2a99d0f36c0999710961822cb8e2002c60307d92db76680d3383c00bd8b7bd44822c4b7094fe3eeb28180230b3ec001176975ac43a816e0b82f1aca8e30674579b138c5f5627a9e08b53024c4406006f654e561b08be21e7da0a122f57a47e47ca51afb126ada258ff0c12040cef0006fd458f723fa896b1be6af977974c9075c26d2f38ad2541d85cea35cd49ea002b7d2209c20dff49e2ac4457bd4cf472057d973aeb2d3896f75667c86f678b00fc55911fb89454d67648cbfcafcda1ce8c91ae1f48d55173aef63418f590a00079bf5ac5fa71ea806725d2724c6cf84bd686567af25a6c1267b386d2b9b117009b1888d7559c23c678c7828829defa4468ae89ba26eaaf5b54e8b53c25a084004b4a620d7df09c20a01e679cd596954ce8276ca4276a499f401e64c468263b003bc6dbefdb78930580d1c4688b24da3e6aa38d9b71c66e7b21868c24e476710049164f5b1667ec28acfd25c910af9a3b2fd81f1b46167a31fc788ef5457fca00ae2fc0182172e74763c0fe0abb4b7313aa0cb80ee7d946756637aaecaed02500214413bbfb7185ee269120326a23fb8f1374195f301da38ecd8d06f0244eb8003f8621355ac15e2bd11b96edc226db7f6cf6f61f006e4e80651d71466b8a07000bafae21df4beb587f19c9318df557b93a1d61f5303f8ed5437f2d71d653e400f0b404907ed92e84c044debc52661aa3d4995b509ff5ff26ce7895ad31cbdd001ab394809235662a069fe46bccc4162c0c438695942fbdebe925a42bae658e00b8a48a24433039cbb196934aa2c74b6c23e74b3982509a319c6e9ab9d317a700387dbeabaca4bfc633e74eee901e9aef32dfe2ad259e18b8eb45a2d6ccb8e5006285d3cd6a85d3cd6a25a79b55faa4a71bb3555020486b436cb0eecdfb8c1200c830af2019d6439e64103edc0ad6c688b3684c835fcaac3be61107ba4ec96e00caa1cbf08579272c8c85783c9190e1d80992d15cc9f37662936e89d27482dc009d11d158c42d10ef52db1c116702b315444cf136b1d08c891a13f55e8b0a1b004e4f49701b9f96844428a211e9f04ea9bfd34a26f4bb327da68c165a92c56600caaa64eecfab525a01a72c360888f509a2eda4b401ce4fab8d5d3156809993001e61d7d52636d7a0db86603c31753c07baf1b9f3187fbf3a9f0abe39a5e28a00c8fa3cdee7e37310fc1c39d762487c1293faafa61cf5168b7abc8acd5308750030fc10e86f7a94fb69e4a4f9b0e53f3e61b86f1137343b88336e62c9af2dcd00794ed2f5bc843b38abf38913e7e987d44671d5596fc3b1bc179f21bf9d2df20057457ee05252496348cbcd8d6c41a613aaf3c7a93a6ac2c4a6c1a88704cd9f00aa38369fa50e786291966362c34f5a1b5ae9c96b732e71ce6da1746eeccdb9000b40fcb4ba90235ec0fb8220628ab73d2f34b744dd12f5598b0abd4e4e092800e19292d8421f3ce711509f659cd54e2a99d0ff60231d75913e495420470fdc000de132a6895ae1263a94eb1e37bb01725576d5e3e6573d72b1d4b1174bec9a00ec52c9f0866c6b287837bb7bb2672836ebd9b1ce9c7aac4b749dac0bf584d300f0af2e33d9341ac03a56f5c01e2c4f6dedae31dcfc1a034423a018e855eba0004a3763b728673f37c8ce7edecd38fbb9380437f353a27bb4774a741b3966990098d8babbddecb0dfd91d793bf6c84bdddb72dfd5ca0ffbadc4e9f0d2eb98770060c71df6f4aea73b90aed89439b4b15b3d4e9ce326b05c60b91aa36e874b3500afe6e43ac0ed9e75c1e6ee5db0c1852e40859c73f3f866e55d78cf5b1e78f100e293eb3fbffaa64f7cf083efb86f75d397eef8c027dff7e89517bff1d8d7c4007837593bfecfad97419ee1dacacef6adbdb33d802d9ce1ddfc44efb6417df600f02f5ebdfe1bd7af4ddef8e57beffbcdbf7bf641f3b70ffeca7d9ffbb9476e00fdca33eb77bcfa7989a9aeb606aae362af217141abe9308b98702f62fc2b4d0025f7459c29c66cf0a293eb447a710a63d5c56c62a8fab7f7e422d685477f4400b9b612d6714b6bcaba9ce872fd3bf5843be89bb0eac2e3e5d42a1f7be5873e00af40d62bd77101ebfe647e018bc5cc2bdf9c8760fefbe60d3fe55730d9a74c00d7ac4c3de57ae51e811a34fcf22e8e9d9c8ae763dc630018265b394d3698c9008a0c20ef773daf91e886951d295da8cb202f7e75f36e664555496ed1ceaa09002d4cc0bbea72a909711e56cdec9eb499f190fc66f2d9fcb619c9665332b2c500db610456592e6edddf2ad15cf5ad2abca2eab18bed74592ca82587ab08e9a600281a7e377632b0536828d8935630d8a92c17e706762a9b1026099192501a1c00d0f60d304c13184d5eb59b509a82ec36359b6592009667a87bb38c7d86fb71006548dc559e2bc4fcb2dc80fb99057cde939733909b810e72ac830c141c64b500d0b7ee01c8cf2ed84d76c11e98d75db05759f6ccde053b8d6cf38a3768a810000d9be068153a02977ad0cd5dcabce8f04a0a6a45012ec89d76a900e59e53850054b9a607825ed8f6e029b8e60578aa5e45a92bbc801b16f75fe44b4603feaa0033d6c1f0c00aef15fc44fb06d5b39529d7ca9513d041a6dc41ae5c23b34a0300a00a10aa28bbafa28a368f1ae0f83ed588ddff4b9c166aae69bd3e149c1b430003d90c97b5104a5e2534fcf861907b0563738fb6f33321fcbd2503403fc4a200624310ad323ece98842e31943ab45273422813e83fed0976e12ab3044aa80200b38f252771c23cb1eafb615da6d920553d3002958cac01dfb7d0b2ab1c536600566c911585e90ea91a244e50977e8077502b264e11b95447fe9561c5d2515c00b888451add00dd22bbb057e991075e0a2beffac617dcb77de48eafbb777b8d00e077be7aede79fb877f3ca854fdf7bf0a862c2c38ba98ae55c45b005e1002400dca369e3177ec2bffa4f0f7de90f7ef8b7b777ffb77efb6b85c7be78e7536f00eb3d592dfd655315b124894c1adfbbea79ab14d07a41961cc15e09023040b0005418fc3e8caf5bb4b44bd7043bd7042286f5814cf368f482d077df7a90d676002f5dc40f601fc65b0bcb8d6e59296c4d2e254ea9257d7c353425b15cb8eb1f00b25f43a6d70eefc93e6c1c66070c800f03bc829a8cd5d227fd0267dcc34ce400c35ce4401fbee58d4aaaa02c4047e98214a6730f4f11944b5ba35a4b9c5aeb0007c8a785dd6b8bdfe5c65ce92abb958ecd0a97bf10c6700a056439a3d0a36d001cc5752ced7eaff5ddb460e191c76ae3b1be7dca6ee5c4c452539b5ee278b2008e60277710a2b4b443ccf61a5ec8cd2f6a12e3a879e455488205eb59d5480b00cd8837da5e1b7bc1c25fab28a72b9b588f37da0dd06d1440b701ba05bcc0c600e59a6c08bb882fbb086c0c355c326306346b21198564f4bc65844060c1e467005c16eda8cdcfb4ba91ad0f8dbdf501c0062879ac6cd8e9a03c85a83285afd800ba2f28ccad423d44f96adcaad2f0e50a5eaf35c0b8dec00a5b78d9aeb020c600b581f58cf6011656cad62d2a0d76f95a4c0b846281d7ac057020a9db0389de003f90d86c10cbc0d0ba4979c35a132cc3266aa15754757b506ca12635b979c0008637ff02e2d5b02c7948187c58725cf95a51e718375d5ecb167ed14eaa4157007692c82ef90262117d200e949f234a591244ae238d5068cad6be41d485453d00e30b882d9e9604bcd9c613ba90efdb2fe0bd9bf62ee0dd869c04f6be7dc26900f6b403601b8b889f2f27bb1d5b58df6980dd89779bdd9dc834596d4483767e005821ce5d1687e6c3aa1ef5087b0f0e94de5b611198af83291d2ecc6650e60b001f0abdb7e71f0aa3530ec9e987705e461b7c6f680f245ca8675df4fcb1544f00dd47b58b3ab1f7b07c54f6eee705638fdefd35ac74de7b2d7f973a15fad91200ddcf97e8bae6e74b77208bef504e4be0acf08dccec565a244e54d7592fe25800de3367c86f678bfc55919f47cbec1408696f70db87f7dd16d060d443ecff2800edf80c75c023e75ada30121b3e6e6d68a527af88dfff704fd5ca8d1d0df0d100dcfb3d35ca11e533a020628ad71f0acd21518744fda845dde554e1f57eb12400700366f0f41186cfc82d58bd9209fd676940a83a7d82c1c3b083c1c34e1783007fa1bad9d5ef7176ae3bde3bd71dafdd743359b387ab6ebef7eca4183c4f56007b89d3cbfe22e358e03d487d6ca576acd42f5ba9f1f6147cd081dafd1d355c00d4f75019fafc0ad8834f7bba07485fea449f75a2df83bccfa99e55a6cfbf0c00b9e4f8c6f702e4a187727380f117fd83d8fb57b0307e21f6be7e893b8882c30050f3a1c84569606760fca2effaa536442bf925fe8111fe933f302ad927bb7b00f4fecb2f61bacf0901d805becf6e41badaf7fd80dd22b81763efa58b0e952500e3f332894261d2817fc0ee0158fab6320a4d1f4c8bfb121621a1a5203c4854007814f726194eb2fdc04a12f825ab57997a95c126a45ea11f522ffc277a85f600c9f43aa8f8a1488e09158858b1d44ad20569bfc26e195ccaf181b14307be7700fe928a3e137de65bc2a1a82bb62500002ad355940000028c1f8b0800000000000002ff8d54cd8a143110aefc74524977273d20b8c2285e85597716b40717f400e2ba73f2b08fe0237810f4053c8a47ef820711bc8b4fb02fa5df97de1d614f0036245da9547d5fa5aa92ad38634fc5e95e642bce474ca28f049f6244fc5ede0097a0e77a7e49ddf932c462981d36c5eda8f1985f4987f942c2636c8e1734df0013e841436b737a7e839c30f2568cd12c266b3a16b923696f441efe33cf19d400997bf7963d44e7f2dc109c64d91a6728aa8532a7ad84d0cfb607b64b36cdb6004bdb66478b01a21d5f7bc25ef30f8c134e8218425288460684330e0594c75200ae294d01e548cac2a5ad58162e6b8b8062a1b24eb3558c32229ab891b32c2e00664f0407c0cfe237f2623623b2eaa24524cee7329b32ae258cf12902b9f5fd00b9f5892f12a26774fb25bab5f831aea9b4c0f0f1c901c41c5046c5fe58601500fe8ba492a44e20b994e99a2434920a925063c3034ef0156a1ffd9aa2a581c7009ee70143099e16311cbc3db20c11b86f24de5433229781b98c2d971483853200161472c92ca4ae347d61f6a7430d41c33ac804e0a83d2ad70f0af8b7683cc0007b86821a873ab0206923ef50909407987c906123ef4f1056a2451c7a42ebdc009a0237a0054371a052c36cc7c03a860108a103c247e9f62dc730e9307729cc0026e8d94d83f76c42a705b3f6b0ff243ded01c640d005cc5a44f82195fa8c5e0095c721c9049238ade0f4455674dae130ea704dc5aae7edfa868bd6d1c155bb00c2bc8a6cbb897de5d0236ee991af4b8fccb6e2fc9e0db933ea34f4b80f0150002cc57785fe07e09c761bf9bd63f49d019328d27cda8434c221a9d77c57705f0035f345c0afbd087919cb8b00c05f9ae1ae74e841d7ab72d9b5a555d59ecb040076a4e1e7a9714024f1c94e8eae8eaefe02fe35119f900400003940e9ee000000018b1f8b08000000000002ff5d52cd4a35310c3d6dda34edf573f381bab8ba001314ae3a17740611575e75abb810c1bdf8aabe949e7450d0423393bf9393a4000324c435c4ee8001123305f4183cca9b01bbd987dac6368fd46d335f44de3000d10999dc924e69d89a40a4db3b0fbcf580838ed365b9fec62cee1e104269080056f404f80fbd0f4e2004a3ba8334ab12d2c860a222757a856a72b56008f4f20037b9b1e840ec3ac6aa634ce64dd41135af70d820b916a25ea1ac7034b224b3004a2415d19ac7906dc906eb4527f7eb7cfe3928dbd0da19af67c64b24ab4b37004662947afe03127e50cce8374d5056e1080a39d2427a72e66c989e9d7e6237009a542e3d497c587d005be49f1a4b6ed0bc24675c4cb83244eb537fe202b2270088c446d9721aa3264ff64e73d16d4a75888719628c62a4e0d3998289e9826b0053e2f9989e8d637a21a61803de27ef2007c7b7e47dfb4ffdc7846ac9da2e5700d8acf913e1a73f9136dff98910f0cd1ad3cd13162cb730733577359ad9c2d500caea7585d77510227ae1b3097b1f7b1f5f7535f090a102000039f0420c00000001581f8b08000000000002ff3551cb4e03310c9cc489e3a4c005097a006e48002015babd64e1c0896d7b40487046fc70bf8af1ae58c9de8c1fe389334042dc0041ec000c9098e9a08fe0a7b40cd8fb2dd4269bbe896d5a0c9116462621a34700d233036723c8b43f78e1de0bee669ed997b77fcee2e901216843302d4fc02500ca31b880108cf00a698112526731599166794a981c2a86c02c8fc9835a0686006a8fb5f498cc2f513b6adee0be4172f5215b940d1e7a300a90122945b4e61e00b2759857cbd69337d0ac642b24d7a4f2eaba85965c8f9e914e1be95ed05c2400af5c4cb841449b9770e43eb23788c446dfb252927ab30fce255dd027a79816008a1e8512928b1d8389e98a5b54f2b9ea0fa3ea4f728ab1e077f4e5e5e0fc460081bbf950cfd9502d59bbe6469b357f31fee6176b8b2d2f46c21f6b6c376f580071dccacc619e6134b395c3cae97583af5d1032fae0ed88f5697dfa03e7248000b53002000041b90896000001b71f8b08000000000002ff6552b16e1531105c007b7df67a7dd09202100d05d241de53a43b404242f0f2a81125a2a48f94228a00943ecaafe5ab32e3cb35c949deb3e77667e676bd130d712f6a47919da8660400291f044fc1ca22f6f38d643bd8e137ce76589744acb0e0a3e84224219ecbf00009f0786422031983cd9d4ac5648e5a08e90629a0d4a10228112a280a52e6580012f1b4a526e05912f3df76773deab7cda95214a5a1b8042bfa51e4bde8aff000cc048e91066c35b00bf88aad11d40a7e2ca3274191e549ce5c345b77a3f010002aa8ff499ae4f31c0a3da7e8886e6d0eadbca3a1e4924b72247e17a78795e90047672a808f5226393f7d2d39c356aefd67a36f2ebddbe2b610f436c7a1d140001bc1d04630fc9191c43d65441c33e5fd2b2197b59959d34bc46ee4ef6624d100089d53dc29eeed0bab1a2b2952295229f27f155940678a5b22d112477c8969000f2cd0f6288ea6797d2279f128195b5965cf96606ab9a1db19546cc495a11100d7a0531b26b95b38c521709a863fd8f74d7d81826ac9fc1546ebe6bc9078f5000be9eb5a2f24086fcd516e2c68906b663c0efd18cdacf158a15e27b9d907050023854f1739b93fb97f00366f60c80f0300004d5d68750000058a1f8b0800000000000002ff8d55cfab1c4510aeee9e376f77767676a6677fccbee999dd0d78005036e645b41f18c5a0312f3e63241e3c0822a2a2282a41fc8128281e72118f00a207c18b8282f122e412050fa2e6e01fa0472f221e3c79d5af6a66dec6e0c10085eee9aeeafeaaaaebabda5d324a1f27d33b4bb44ba61f63a2e18d84df10230026eadd5351d83bd53b751efbdea96690c650acd8efed8b62bf191bc541ef40001407cd68147b8023b3c71801e67b690bf3690af7f8f236e633d4c37c1ff5f700f85684f97e1adc8cabd3d30c76961dabc53b99933b3b4f138cd12e29358c48008d86c951a28a927d45b4dc1c1f45140e47ac3bd2e810ad1a7941303422afb700869d68ab13855b9d28ec44db6127daee44bded4ed4eb44fd5e27ea77a2a8ef00281c44b731d4bf7f7f5ff7a351426124beded5f8ea2818448e851a18a3e8d6004310758832e8413f488ef05acea6ffc7540653696661ea806c6b2a4a1d0b61002aca52a0a66c3b482ca416aa20b57c28c736976d1e5360f37497423dc64413004c6a0ac827285dd323d0e636c0f6310ad6f4a8a729a48f7b1a379f345ed353009e26fc01da88c1b3942153bef4125f7a3666ab06db17c9ace97960407a011800cd27c8d7f43230f8833cc7530ee875b26b7acd533c5ed31b9e72fe40399e58007085c6e08a1da738f736a5fbf28c78598ba06d36623fe4112c2e8cac2cf9e9009328d5bc4cf83d1a291f4818e6bd0626902c002c4b2214172409a8b04a4185008ca990d2ae328a97994ecf73654418699bc9a55719d626d5a9d769c6248abd00a80d0ad2eb49caa2c04b791a188388eb5619cfa62132104d032e65880c1ee40033acd3598cf5ace093f3e3c80ed1ce51521f50b1a62fbd4a73afe2ffa08bba009e3e1423bc3885f7619e05083d0a32847e99b2b6a24cd4f911499cbc0c34840051e675de449d716430b67bf70b4f5efa35f9f0ddfc879ffef8f9f657df7af3009b2f1eba72ecc49fbfff76feabcbe9b714013028bb872baf7938084b87927200d839ed00961d7ff8e367fe32fa96933f3ef7c027fba79ffee5c4c5ecbbd5f7006756374dae98739f52e575d51ef77aec18da01ba646827d0a540b3c6d4e2f600024b8d16624abd7a10d58e73440b8c157722afcac378b2524e49e64ce0559000c95ea29fe371b9388c6c0185791520d14ba9a015774a415c759d12e25589a900cc4597b743745e0d4bafb6565e854b8ea1f6e2924167e41878b9d0f5b9932400afc6c491bb658bbf6c3c5f34fe965e97cd0d89c4007555ca5e9c9ca7a04626007b892ce04856c8fa6abac0cd21e2def27a118213a3017042bb1830d76de79300bdc6272b5c1f60d80dd717281493e8c4eb841f5bf1cda4b90962275d0fb55d000fe5d26d44934e349d80e6c55a95607831abc1ea0b54af15824c9c573661c2002600089d8de1fa20466b503734bd8e53cde53568ca8b9de5e54043185baf1d001bb61aab840d07b6abbb26305ec6d092c54346874f5a1daec665c760bb61b000955bac313b628cab52cfc4d24468c6c92a4862a41d8ee1f0911a7fc447549a008a12d9a38198688e68dd40f642f3a0f2aa92ff01272c72ede818e6a49d47a2008bdad1326cdb7ad5035cbf62f7c75dd0e36b821e0bc39236a3519355c1af3000c668271ba79b1be2941978c5cdb1dbcf796f36fb80f773a4693e8d7173db6b00d3f33aee83f5f11dd27f644e8e21bb359c5b4ad6cb1c297d85f2a68b836b6000bcc90bd449e93852d076e2c083dce165c39a3b874bf0ae6cb298950943307100dea1ba65c5127f69a6ccd1dbd4c5a6b76daaa4e42aa81d0301b7066e597343007459ed756d5b59bdc36d81595acc33b690b185f71b0b9e32662caa8b73bf7400dc9c5d05fd4754b5c6328d873455ce59955e80740625802bec282c1cd72eea003366b2e5339730440188cfa9e8822880eb0ac6bd743dae2bbc2a66c09dc140003003ae9b41013333af67712b9bed70d7e4b695cf2bb650f1bfc6d7b4d3045100f1bfcb1e15578babff00f4f196a84c0a00006bfd1d5b000004331f8b0800000000000002ff8d55cdaa253510aefc74773ae9a4d3dd171c611417a2083dcebd00a07d980bb3f2cebd20080e8222ba1797be80e0d647f0055cb8f5115ccdda8500e042d01770296ef4fb92d367aec3087320399daaa4beaaaf2a9573314a5f8800713722e7626c8749dc5b829fc3e8f0f7de2bd2ba2b77f598b2ab3a4463a8030094620e9458cc8fa4c17c2deddb50c66b6ebfa1219854fd560c1ae965d3c65100e436ae090791351419882c45068794186cb5fb565bb79e4b2b6ed3cebe4ad30075ee1f966f7e61781c55bd17e57b7b4fe40db1374ae435a92a7880c984dd6200907365143fad86300c00d071d3718068d0c3a6fd509450189d3ed8510206140092bcb4c159c0591301f74022e1e875dc312297da6319b9f405929f91429f10000e46b49bf4dd2ad75e4cd7d35535dc13f550fc2aef6f0a1062bc4646a08d9b008af6aeb4b6635698a6324a5620ee3c266f1fefb4d85d476a3cbcfcb892825d00ad7d178c3ef3fbe7991f7c0496ef70f233e9ea49db1607bc860d6fdf39195100272bad83be654599db549ce8863026d0dd8e9b1e13444983862615652265f900447724d5181974c723dd19ee7c2579a73bef18b9d09db0cc5ca602c9cf4c61009a40374626dd6195af4177e813987e53d22adf80e99a1a64188abca95c028d002fc253004f31d0b16fab63e0c9c6bb1482271b2228892dbc6c8387d8c60c5d00a60ea7a0cb2db0915578db6666f8789a6167cbfafaee7feb6bdaeb6bba555f00104e33029e8ff58508bf47c0a98f20de4e887a92b8ca0fa7a867cc73bf6c6a0079f1a867463d2ff0ee4759fe13f5cca8e7a751cf35ea529ed4c5d943e78f5100a3c25b5fa32e3b22936d59af3f893f466dfc1eb5bf554abc461daaa8dc0e8d00afa62b72169f5e4e55e48ff7648161ef1a5451631cccff8c4ea5681609304c008ec995ab5f0a5723b6fc2de32abf5a0632329011ecf77995dfb023971d7f7000c7eff79950ee98c652c26c34e3d346c3cfb1341a8f8c944b8efe62b2a71b7f005637ca16364b97fda67cb89463bfe1cdc8434a9853c0febf24703f6a9a8e00003811d88f81c06e0776b780217460279317d50138750d6aa093e604dc606e5200b7a9ce5deecf00af421a50dc2605380a63ae020772c4da21f8cca8e7e5014f002d18334126824c6738f4b29cf1d00155ea0c9e1c4113c74ba13ec2a3d1f0800059f419e633ded0792a90919071c6e9d7652e907ab16c1b2863c026c006de950098a7023bb1451076066c6049aafbb524019b9e034b984917f0803b9259fe6100c8800d993de15252859d009bd92ed889d96259b221a602cbce14093b02b61b0071ffd5a37aff01eb9f035bbb5de9491dba5f6476ba015dd6741eb75c7d586f00f9a6936565e3513828675c1b50142d4ca113ab4f5cb7aa4f61ceb866555f1e0098ab46f14975a8f78bf2d1471ce89d75fe2551ce3bcfb71c7fe52df775d497000106bf701ec71d0f04c005e7b86cca523be702973dd0fb557d7ea10c2c12f800fe41ee3cb9f3e45fd7763d2e4a080000713784f40000022e1f8b0800000000000002ff8d53b18e14310c75e2c4f138d96bb962413414a085db95600690ae6200d96bb94fa040821fa04494f4481408891ef125f753f09cd959094441a47826008efd9ee3bc6c8943dc11eb81684bcc0243e53e61144c21d217b74974affb6b00ac753f4f8a9861c226f1e49e04fb92f223b8dbc103dd3862d0b14331298d91008bbb7871315ca9bbd2e24a480a94fee997d97fa757d72d5f2e95b2932235b00051502e0f89ee51b90a44777b600f572361f5bd07f3de528dced56019cbd8c100d005da06ece2b73bcb006e4c566f11925836f4d4f0f143494a8e3500fa2395000d5d8e41d13c9668b0c6750c55d768a43cf1a6fe397efd35c8ce48c42ac00e0054bdce352595b53b23304c1e9f40c2094515fb5a1195ff8ba439495b81e41500ad8e24b9933490e4261d2f53278cee3644d81c81465a3b5554730fb0ec108800121304483680bf2673f0b480b50c45305af406bd2b2c08794768e5db0be41500942d49b25f848d5d7f4cd62fe2d8cd91ac8e51ab77bb3620d40684f7d4ae7a002710d2605bf186db7377e10208c45c867c06db8bfa30173552f6427057a51f00c5c9ad3ef3acea995d812091e4249f6692098253c69ba1a8c905ff05dacf9e00c0752617c8d492173314504a71cacf47ca5871fee2da99a053958ac727807200557e5594f30d70ac79433f27bfd51c5c8e0ab85dff1956481834a9dd82d04d00cd9f273ed7b3befb9c9f27007fa8215d3da182aeaafa32f76554d5eacb01ec00c386beef20f6d0892f263abf39bff90dffa2c02d1d0400007db8f44900001000c51f8b08000000000002ff8d5a79a82cd9593f754e55ddeaaa5e6e7757dfea00fb7aaddebb6fddb76432f5f4e9a0f026c92463e2244119d40719a324ff0c1800cd334a0c38222f18464c50440d89514190209a3f9409a2c820320ee24212110091c8b89081a818301b21cbeff79daaea7e33f70eb950fdcef29df3fdbef56c00efba328ebea14cf07aa5ae2be3d7f0a3c2adc25f88afa654707ba4fce0e1e000e137a31e3c6c3fa5f13937d1a9cc4db6b8f87d8df2f0fb5ae5e3f775ea08bf008fa8e02a085bafe5d0d773d2317f6af21b3ea42c07e1145d578e1386ca89c200dab95227aaf63a47a92949a250f95e543b514e2d1a2a3f8ade2cadc5274888001ad07d5547c969602ed5c42c4b15652ac5f0a01ea1ba501127cddc1f9179830094bf2d4cd93ae6b0768e9ac24c6d956bd36253074d6d3675d0e4b6cb26b76c006aba6ceaa2a9c3a62e9aea1d36c568eab2294653adcba61e9a6236f5a8697500821fdd47fda49fa0a7c79e445d774088624f27b93e494893b09a9ce4ba170f00953127c07bd243a9677255837cdf5f5726323d929e9c2bbfa17a997a6beeb400a2dc699bdce926b913774365925a0c1ad3c78f7b4a6d5f3957e6391567ea0e001c007a1960a24132840d86cd01d4f5a36a407511fb000887443860b53d427500c0ea4800b338d023f41cc3b2663c1ae76a34c16c93f114569b4e01793a15ab004d8b4fac061e77d5142a9b60d4444f32f564ae0743323ce4008698102554c700c290c5911e93a10c1d4f72359e82e1749282619a82619a0ac3b4f84a86bfa4005230040433d5d34c3d95ebd1800c0f38a09fb2389894fe6ad4843604410dba00fa3570899309594fe17059fa6a789dfd6babf26f76aef4d30af2fc56ee8ca90088da640cde1f55e34c7d3d778693dc818e9c81b0494a5113557a4e623da7f400add8fa16abf3d2afe6acba0b54e7ac2e442f2cce351a17cb5ca74bd4961aa500fa4129d773caebbdd2c8fa8523cbd28c73c03b1b31fcbf9ba9e7a19879a6fe001662cea70b487ea21699fa7b78de1cae346fa2497d4a2de84aa01c65ea33a0001cf5e7e7caf91f8581ff9c3b0915e1c5a522e2caab469a3eebcec5c1168f1a0025ca500bea4eba47b41f6b7a5fd303a0bbd29531d464521b41df5d5025a04a001859c9000134a6228e13f1fa1140febf1a11e44da52681b9c13c10b8485ffe00ab91c93cf184b116ae9c1f61a5c7c3c29ca5030d0b172d1c785c39b004d0a8000aa097d8dc3db4392417d01a8d711766a4205d8d52fda0041118275e5a8e4c000f46a2318571eaf49b585f529ae14bc6302394d61c64ce1ac64932670b752400d318c6790f528393416b31cc1837bbe74cb3ddc28ca07c1529fba47c13291f0084ab8b19935211369b0dc54e898889e25077c58c40aa6092e1de8c43d6f4be00a687407765206344f96246187b38d634c59806c8d5a09799e7d111134e4c94006f51ddcc7917e0c4f8987adda90895a2ef719552025124d282499369ee4c11008f43121a4b88f075dea66615e10cbf3321c4107f92ca9c0ceb6442d2775a5200f84d6cfdc63bf41be1524c3181dfe04bc7c0474b35e26609fa6ea9da98aaa5006376c9a04bd0efad404f0ad0d05c17d20db0b639a998e6178af1ce086d26ed00b3edc354c43dcac6667c33cab8c0bcb3c512fdbfac9605f0ae05ee1e02b7290041c27eb6c875bc20e7461788d32eadfe1b2a168e7a0e5b754799f317f00b3000fc08e6eff689fbaf549a391fb3fcc7297d83e96b56a42ff8c64c7433974c460005e9a5f80638ab65eeccacea90afd319e44d7559ebb2afaacd2ec16f470bfe009ae0072d90cec4e781f6250678f6d0005b2a8c72a434f0736a96399fa30cf8006682967da2c3bfb33ab4e8c9ab8be4b49843e84ad9ddc50a84ffa45615e10a00bf2b21c4107fbe943997245d92f4b3961472a5173894b58b9da24cc770a8cf00d1551b69b304fd79eb954805b409f60073a6dd39b2b1f30524687d8cb40b9800c982bc57ec5badd1f765b52e602ef41abfebd12a7756b0c68084c6126e40f8004db5a90837f8dd082186f8cbf5a29467b404a93eb2a490677e813cc2a5980200b270015a27c0c7c4d098370bd03a2e9790399710060819cca9307da5d2edc8002a660ec04be8b7bb4280ac9a30140267690324469b59f5d9764b2d334dd996006cc6b7a68c4c81ebed0efd99da15c09717389840d63bfceed65b00df9273630009c4ab2511df2c10eb0dd6a4659ce93b081030fc6eccbfec13f7dbd52ad3df0063f9272b06c806014285607206088b2bbda13ab7a2a69d040838ab5deeac450056bdcaf56a0d7957baac2dd957d5d697e0b7a3057f4df0837640e5736d075a00fa59630171e6f474fd44a140b5e06a4f85510e3a8d7e875a67fa1e65c0b71600b4ec131d3e697568d193d712c1b5dd40e84ad9cbed1908efaab38af00cbf6700428821fe6627736e48ba21e9fb2c29e45a5de050c2a598620379f0ede050f700189d8d55b304fd01ebe9b95ad126c08355603c97ed1dadf7216b3d5900e84d00f4b658bcedd7adb771c3cd8847cc5291b1b8dcde2fc9e2a396c5253b0aab7f0071ff79e1f8d03f3088e22754fc84483e5efad1640ccf9d4cb173d27f849d9300619601d7d1a2dcadceed6e95552ce78a7b637813ab877e85ea361727326a2b00fb8f1daaf42fa88e5ec7e256a37177869c298ad428d50f4ab9dececbfdc77600bfffb023b9ffd881ca1ae292d20cdf168b61638dfdc726d3ff82e09865fa5f00b93a71a9366fc1eaa1ff2d773633c4f0ac8926fd1f76210425e2e6bfea0c6300a43ab3457ed62fe6ce645dae31abfd1ab31287923566260a4fab3526b5090b00ddc0b096f4a5f735bd02ba2b1b1923a78c1a820ccee4ac265a8e2b30c80adb00c8c54ace21443381d18d5b197d7981d117fbcccaf937f816dcc9b597b9924e001c5a09dbd22d39b5f8c97295ab252360b35ae388b35ee388b35ecb11675d7c00c511c70c1504a8dbecb4c90cf6798b81f512dfe17ab35852b811cf34f021ee0007c5d9e2c91483d76a6a553ce1610702cf28d88c06398741ccf741cd588d27006919e52b46b979a08af2d446f98ac18b2dd33c2da37cc52837df5545796a4300745546f97497967bb5d594a4b7ab289fbd7294af70864cf1ed26c0274978d6002c413f56bacc8c2e437512cb4c40ff6005ba4883336281576c7670b95d730b009a3b6a6b978d35daccaecfb69f56dbcc3c01d9b66cc6774619cf31efd9f95500f4bf535d2d806f2f48bb1938651a7573f5ec1cc0cfc9b9b105e2dd96887faa0040acb33922649d99df84bf83e1cf60fe6d9fb87f5bed32f35ecb7fb2a3cf6700701eaa0293d379ce443719d5792e317b557c1e9cd5d5dc39ab6210f10dddeb00b2b6655f553bbb04bf1d2df86b821fb4407a26b10cb4dce1c83e649652591f002914a85246371546397634f0efa9b3cc3c4b19f09d095af6890effc0ead0a20027afed79ee9ce33832af94bd3dbf06c24fa86b15e135fc5e1342c2cdaeca9c00194933927ed29242aedd050e255c8a2932c883ef2a1cea59a6b4c6ae5982fe006beb95488eb449aeea72fed0510b77466d240c1717357205e496b742aea45c0053de1b19555e36197bd9c46aabbc686a49428ecaaba848ecc9624ba331c23900ca3f4744c7f6a487a5ba7e50ca75abb3bf8f70abfb081ea2bdcbe7bc7f92970097624e0cb91a06a9ba9d99afca01d07cad3c007a4fe30068be81fba61ee2a600d74493ab8bd301295d57287ba07c3b6ea7dca3dc71790de5f5cad36baf3abd00f675af3c2a26c551b1678f8a495fbafbb9c685196a7a5fd309d05d69cb18fe00b66b2e585c01551b546d0dbbb4930791f9deff738fddfb957bef9a7defe7df007ae783fff837ef36fff0ee9fbff3a9bb4fdffaef3fde3efe954f2bb970e39d009e3e55bc26eb9766e90b40999b3c05bedcdeb5fbb0b38b26af8277a50f56d7007fec4d3ff9c28d8f6d9f79ec357ffad4538fdfd93cf0e2233ffbc99ff8d0ed0017bef8abff27d679c01aeacbb71ec2f4f4695ef59c16573d60c6e2294efb0a00273ded56e77629a15da07472a7c3ebc28edc93604f5fb8dcb1ccd0919ed66d00516071e68e0b85b6b858e0c3365bf5318b158d8aeadc5f83458fc3362cfaa8006adb4c882665421de63aecbc524db8731b7f5c6bc337c242e08f7fe90d9f5600a0f3c3ce31a6fd61755c5cca62453b0a1facdcb7fafbe64bfe54d0c4e000a900cd7d42b91c3c54ee513864a3c61c41b88f01a79ae52840ff116d6b188a6111008a5093858c46def9fafe71ae8f6d7020a4bd9674f23258b7dfe81617d6a65000601b52983a6fadc32655f41eaba232bec32abef5617c578e84c6568737c6d000732897b9ee2f6291896a2d44ca1b552b73df9f3b212eb94da4992b8cd52305008dbe1d3d19e8293204f6410b0c7a0ae50add404fa189a092e80828fd2370400039c0dec1356d50b479e96e22290ab18b484231e414a0f20d656f87d814b8bf00a34c21f5e59a8588c7d62150f23ad2ce2ca9bbf729b5434f3d50aa87e93fa1003c4eef829d608d42e8b606e5fc0974d5aae162df4312cbdc6708006ae4ab0000de300480d51d1a430f003cd43c8d92ef49bb4700a602c067088f40e89bf588006f114dcaf75c259f24f1a84ae298aa48e29e70131bb1d143e4d4f199c822fd008c208530de5479998b1bcfc8aa4610d5704b6fc42cdf96f77bf47e8fc05eb000c06092489cc2a30dbd501c1d287d2f107379431669c4c0439f67b5e87aa4a0003b94a3e59925c4bc5f506169d04bf589847bcce5ccd528f9aeb4bb2fd7a75b00e9d3873efd661d3a7054bd30a8770471fdc0f7444d9e276ac2c38d5753cdcc000baef169a6098ab0c9771d2e56aab95fc1586cca0a16c0a702da27c042d30a008e30c3893a2ab6054ddc3f2873d40a7227886e954f4775467823c2b2de8a08006a6c416132028181a8b5962173d3fecef27adfc80b1099747067e46dec9d110036149edd50e8c30d850d72b9b465989b8eb0346469e80b0f58c746f047cc3d007013b2a4e14c1496ee15edddcb2a9feec584d1b91fca6d0b45484a964ec71300793d6b0c300fc93c24f3470be62a642421cdf01d2c6a9379bb23f23216e5c5008b179111affcbc1fb08b3ae46d5d20af8d6f59a8225c50b709236ac080266a002109796f2b1610dd8103b598ece0f73d6e0d7a9cfc1dd84478b844707bf8e400daff987dc74c864faa56215dac253727b8be3ac6a6a0236f5a969099e0ae7d00e21342d197106288df6dc99cf65695a4efb3a410a677c16eb0d81ec91410860037f12d17f8e4d6b0d72c417fa0dce6f4b8cd1106070f36309a5db7b98a63350009aa7565bfc2f4b8b6981661b508ebc32f93a085c73c88dab6f7f0a4f95d4b0003f5a1cdc47db6fd1972a0f7fbd4089a5bcc289c7748db0df1bae1fd61f5ba00115fb0a92f9ef0788316f13a7728eec2cbde9628eb9982a31ec0f7ba26f33e002bcf61de9ff356a44f13fd27d62bef2f2d7f97327983d27d0795fbb634df5c00dca1b8e9487677e0ac70b11f550ae1c365dcd2652d665f558b2ec16f470bfe009ae0e75618bb72d9b502edfd97bddebf1f5cf69aaf51619443f4ff22f4e87300870a1dba91a0659fe8f07fad0e2d7af28af96881c375a752763cc44b9ff7250035ae08e5ed420831c41f8c644ebeb5c603927ec392ee63ea3e372c5e3a650a00dccd45f8462ef0c9a99da125a0fda8308f6ad1267c548ee8a327bd049d6d950094f7557c9b39d9bfcdb078a293ad5b6c0a1bdc24e6ce897d81eec1390b0a790045c336b18fd8ec9ec03e89b4f7813ab1a81d8bfa51417d8a5f5f5dc178ecc1004ff7b39d62b78e403a854d4ff7fbf753c913a7cc13a77de07d95ea5b614ef900ba7dd3094c0001f1837483d4ee7f477094f9b7c0c2045ee6bfe1269ff2b1a800c099020872430ab50606d402370813400b8390ff8901ffc87f6208ed575e9800f88f042186071c10815d1404ac7a52d5411044acd6c0bd96f90fdd70282c19005f934104854147c111ab476019d8cc287306605a3b448885b19841787052e100513b186438c8d6238b240a422b579d72d5c1a641b91a418372e11f91ab61bf004aae1f0f1a821c039a80d8b4b38552c5d44193d53ab8d433ff876cd751e05f00bba9facff79fff165854cc721a2200007f020b80000002101f8b0800000000000002ff4d523d8f14310c75e27c389e64a6e40a4094202ddc6e33234ea2816500afa2404848f00728112d3d120542a247fca0fb553c278cc44af626cff67b1e00c74762e74fc4724b74240e198ee409e127b08cbf570f28c959ce6f0d3b0f23000f7316b8c8a5072ec346604315f166a901fe35c5cda2e919828b65995c17740065ed4a4c8556cf6210ef10030a1d1240c12041912359bd843d358cd423256200508487463d7c79d1cf7682294a5d50721aca53a2c7546edd682280468d26d800d5979db5d0d1218a6330b04ce08705b529a128e403ad4a9c43319a09ac5fa8001ce866758ad171f615be86b6baa68fac97ac94345724bea43ae493b7a173dd007ba85dd48eea01d6b6fadc706b1ea7d83adeaccdf94df8f77550210468067b006568b82c0c8d77c4a6719f52c204033a7b8f6e4b50c43e921ee8c33562055a00a9aa75e1d3de45faaf0b802962e4d13e3256304463ff34d87b0ac3035e5d4c003706a5b13c5ca63cc3e784fccf942c7fa56c8d604405e2b962020ecda756e700e7563adb07995283526e0b2abfd262951bde5118db4a787edba5ef58ab6805003cfb057ec91851b511e5a94037179bf4b731e9d5cf8a37b427db9cb0a4096b009f409591f34380ff041d4b3cd09fcd76343a289160c0a77e280d054582e83d0072a2a2b6fff8ebfbafc3c6fe83f0b728cac50a26c84d22768dfdea4564b26b00813a66f1ebe4188c267cbdd1d5ddd5dd5f034c7f3f970300009a397c3700000014391f8b08000000000002ff8d5a7bac6c57595f7bed79acd933b367cffbdc0033eff7cc997dee3917ccbeb40682d2f7a52fa0a52dbd2d7d016de9bba5144a00e95b6b08514c901863d4186385aa3544fe302841515225d51034244463941a000d81fec11fa88df1f7fbd6de7ba6b7e7364cb267edb5f65adff3f77d6bedb500f6a1721d7d42b9e619a50e95fbf305fc296fa5f0f370159432efeaa99c39cf009c7725eae63c7b298dcbe929c75c602e6071a1b990c545e62216179b8b595c00622e6171ca9c62f16ef36e16979a4b595c662e6371b9b99cc515e60a16579a002b59bcc7bc87c57bcd7b59bccfbc8fc555e62a16579bab59bcdfbc9fc535e6001a16d79a6b595c67ae63f101f30116d79beb599c36a759dc606e6071a3b99100c507cd0759dc646e6271b3b999c52de61616b79a5b59dc666e63f121f32116001f361f66f111f31116b79bdb59dc61ee6071a7b993c547cd4759dc65ee627100b7b99bc53de61e16f79a7b59dc67ee6371bfb99fc503e601160f9a07593c64001e62f131f331160f9b87597cdc7c9cc523e611169f309f60f149f349168f9a0047597cca7c8ac563e631169f369f66f1b8799cc513e609164f9a27593c659e0062f1b479fa24bcaadc93746506ffe7ab2c217081cac1fb034260588c0400ae002aaa43c77578ebe9e2490528609c2a1a8c5305933d0e1cdc1a292f4702b7a9003c091449a09010286c112860505e081484407143200f399e5686d5fb2e20d2009e21064115b7f93288e74dd69836e4c78f88c44f1069ec6511b9afd4bdc63800e8ce0185938e29981cab19a96a93330556f34a9b7ca86e3b80a84e00512b1400355091762b6f68ca9cd974a81c15443a90f66ad25e457b4e55235dadf4293b009fe6eb785ae3d3ba9881b7355d7f2785c520558f9c1a07577425d295da9bd500c8ab9ef0aa33589d06aa75561b0a7d1bb86be846a41becab1ac2aa85ff56a3001d39ed66a46b22702bd22df26d6be5b6753bd2ed9aa772cd6a1b6a394df4d0003bf8cb1cc39fbbbbaf9c826a87ea050ce88056477722dd1161bae0ce26d5a50030b91eaa5d567ba2296fbb1a8dbd3e2c0283b87dfd53dc45badb012b3bba8b005a2d520df0ff2658646b25485cebc2c9ffa9baa1fabbc8a9b7159b2a3efe2b007cf00faa7ba1a3e0b40a54ecd038752d46141b74a42e635a8979eb5a9cb2d3008d9c6e5beac27cb71739bd9ad47bf8ef1deb474e1f2a3701ec8e17a90a22a4005d8a54ad1ca9ae1f021e4e07242b20539701ed3e84eaf50710ea5535a050b400d2002af4074334fe580dd9288a0ef13fec0f2267d0a39e5dead965a7ffb59d00102a35e3321872268310c9ff05a225abacdd64701bb6ea75ad623446ad07cf00e554cf1aa3df81a0b462a402c85f85fc55c85f85fc55c85fa5fce85f5305f6001f512a6601a79600acc6c8a8b3a99200bac2c8a8254d99a429c8b0a99300b500a3180f67c00510edb0691b32f8ef137bd4a63f1ce009ada806022631a81e40009101fb0c581df4a9711720ed7755ae0fe5dd9e2b6071cea5fd5c7f5fe5bfa000a0dadbe1121fde2ec1451ebcdcf1908b1a5d44abe3eeabcc1f014bcef9302e0054ef6164cfeb7bcae907b4e025d68289b0fd54d8ead112e24920fe180c2335001881da68386e29673c868ce33113961ac7579cb09cd36a0c1bc1e8ee488f4200e72aa8454b38db1cc010041515574361c8db811e92a10c1d8e22351c83e178003401c3c9040c2713613889af84e17d6a028610c11deb71e8dc1e69819db3c50001cfa98b03a28afa0013701a3a3460ab47c1a5eb8d7e06d9cefeaa2af98d2900cf04960da7fbca7d50419f2723674843344600b4f3ac1a86cef7114a23807d0088101b24d8e8a5a944d0d3b5e861d54b90e3497596cc2c335633735467acce00c52ebc9d6934ce17919e2e505b68dc55b7ee223d93307bb391d5234726776300d240c4b5900c032f74fe04869985ce97a1e66c32df57faffd43c74be1239de000c509a056872fe4ccd25185563103a5f45cfc1ee0c3dbfa330f06b40250d9100ed2486e8a4a81a68c64a6626009b9fc27c4863a8396d278f07f41f6b7a5343006444bae9c91849670d261780bfd7d5496665c40c698880f9a6d745a672be67003315f2cdc8e69bea76be11644bf40d48dfc335ecc7ee4c00d48f211a03789800025802689006d0193ecf6cfb3c9d3e3a926bf5d4ae1e7057ddba830a7dc9960018398d0961246fa750506122d1d574ce3aea6e8c6b3a841b61b4a017629e55008d71a8ab8ca20966137d2352036654a78794e174020f4d3bca8bdd8847bb8c0084dd0e9a216888d9ce190e1291fa1b91fae2a7aea82929db133776b9c886ed00366ee41cb37123125c1fd2357b9b342f6e049bfe50d315433a00536c3bccbc0088071d8ad3a194e72a2fd4d7421c4ca6438f8c991abae3099ebd534de289c700d3480beea43b8e9c31e2b1cf8eaeed88f0d517a969da51ac2a1d3124379a08004d867577c4ae57d8aec04dc7e226bb8d1be11293180137b82643c8471fb73a007e22f4e9c4b41d9a96c0a4426379768b7d2649523000df391d4cb63d0faef10002fae00ed591f1003a33bcf8e529fae56ee8d6b1f81f4ca9e31c74a7f3059e003fa416af173cb32db84d0912f6d339f03627e75617127b5daafdb8551bc980000b9741a87f0fb800c36740bfb34bb9bf4447fca2e52f8ec8ce12b8ce52b87a007a26994c90bb106c80b35a44ce06f9de94b3974e6a1d3e4b6bd3b3c86f478b00fc0d911f7dfb09e6212da7005167dca5b1fe2036a0ea320a6830eae151d33f0056d350bf4c1d704d455a3e131bfea9b5a1959ebc3a484ef319944e8ddd992f00d1f1cfd532edb8c4ff523a62486eb6109a33769db1eb5fdbaed0cb3b02503600115b1233e8836b0140bdccc06e797e22f4b763f7288f3e81fd487f306382fe002e12b4fe09d22ec4eccec97bc967cb159efd8b5ac562ce35de84ddd5601939004b78a3c78eaeedb8878effa1f6d28e7bf8df938e18925bac84e68a5d57ecfa0023db15faccceaa8f25b18af41cd70231f0132686d6cc4f847e2d9942669c420018200bce380b18ccd5a96d07d6303308bc807dbd25026419c0516ec13a0a8600409bbbdc65db582d42b70cdd166cc6b5a28e6bd05dad433c6fa830167c710400c044641de23f5cad21f89a9c5b2b48bc5c91fa20e6a8f73027ad3aa17b3e0200040ca7a0bfd8a5dca7d4327417967f77c900d94380d0ec20ce00e1ed52efd1009ca4bed2a1040838ab307256a2ab5e467ab982be4b9dd4167c96d6566791df008e16f91b223ffa525299db212de3bf35873a3322ddbd385647cd39dbd360d40083a0712f57abd0bd9b3ae05a89b47c2636bccadad04a4f5e8b75e4acf7a074006aecc57a1f1d4fabfdb42356ffeebe74c490dc5e2834f7d8758f5d6fb35da100d7f20840099798c41ef4c11576211f71d65afa89d0f75ba4476a499f401ecc0002c3992cef8037f7118b37992e8926a2ad2b687bcca28d8b7162b7b31043760005721b5c92c5b396c5595614d6fe1264c0abe6ca6bc9595496b462f8d11cab0024f757d5cce2683e0472e79311da7e0dabcb0ce74f701dcc93d5eaccae5659005d45f22ee3024dac6ee30ad575242072d55ad61f21aac4174c47d4f176add10018ee23bf882135eeaa5b77915e336d67a7c9c8e9d648344e43f4b28e38cbdd0018d71a93610bf11eec85eed7111cd3d0fd2bce4e93315e4dce51e3d0fd9bc800d9c33ce04c03ccdeeedfdad91b3d1137df2a318c215e26003bf7ef2367b44a00e698e5668e590aa0648e998ac127e91c33b1090b8f21c34ad297ded4f412d20035f7648cb8a4812003989ce548cbeb4aa4474b2c23e74b790fa134233afd0700a9d31747387dbec9aca4bf876bce955c951e9a6f22dff6db133c11b87b8b4800ed31e2968b155e71562bbce2ac56f28ab38aaff81527935150a01ae786d07d000d1c7a44092269ee2218f6067c9d017c640932e212644483fb6a6cad3be27b000e7465a25a4e61f84c434dc2cc5b6161c4c9689204f892019ed94d037c6203007cc9b8c56a693649027cc900cf8cd3009fd8e85c26013e0e8566c8ae21bbee00a5013e3d22c0eddb9b2501144d882684c35b25ff4efd44e893095aa6440b2d004959a622f4db53a1e30c388d85de0b81b63058a3cf796a6d678c15dadc7097006da7d53acc5c04ddd66cc6b54f1d0f4077ffe010cf2f5787b1e0eb23322eee00dce3fa10ff87fb0710fa809c5bfb9038dc27f5eb628efa3826f5fd5598791c005007c31b417fbd4bb99f556198b9d9f21f8584fb71e086a60071e2665fe2eb0038cd7920e17a2870e7d6e261e4eca7e187d086ed75525bf3595adb3f8bfc7600b4c8df10f9d197924a18435a2e6e5a63a8331d539da76375d498814d83510f0071f02fa9fd30f33c75c0b52fd2f299d8f097ad0dadf4e4b53e889c83e3503a0035f6fae0043a7e419d483b9ec0ff09e98821b9e38742f338bb1e67d7dfb25d00a1577804a0844b4ce238f4c17508403dcf6cd60afd44e8172c2a9117e9136c001dc9ab87f6eb912ed5902b32d84eac202e0bb2e79389e408012694945b4a36008a4a2ad95d2ad9dd2556fd6467c99784ccbd4e7fb373ca5b5fa3b18e5574ae00cc5dc8b3bc15fa85cdce849bee4cf0253a7b769aaf27f2c63bbe86fa50ae550042aaae85997f052aeb61e6df60ddfa0e779a8e61a729f30ab755113ceda00e005bfd97aac7a97a27ccfc003d7776dbfb2af72af653333f8a9c4c9b2255922d00b68a88c4dbb6a6f132be6c3e9604bbdc2bc6f655fd18da8ee963913e56674d006f6aba0ee99a76c39236ce348e45ce31ec48d633e895d1789aa9639fb75c830068d982150df562b53ca47db8075cacd56bca29d76be85151b5b847b68a8d0400a719b0b56e5b45a52c9add9d0655fa2e54ca72d7d8ddda314cd4c1062b761f00a1524efb3062baa59db5bbafd455972f85ccdcb2260244db3238d7aa90d8a9000759705ea96cccb91966d7e0dc6c4091dcd7553dcc1e7fc35e65b59e6cd9d700d28dfd9a1dfb361e5104f04633a89cc0162010013abfab2a61961b85e98e6600e2144a97ec66964529ab011acb0003f650b9d72ca44f895895b7a8dccffefa004b469541f7b3a47b39e8da41847ba9518c9c227d51af56a0d9d5aab2d1ec1a00abd95b88e07f7e41e179ee61aa78bd7d7c43aaf88d6cbde92c8a9713c5cb5b008adf293a53a89f53e5307b77a26c908c0f4459866110872194e56dc046bf0c00eab88258d9474594c02a9b1723ae5510661f075d3ba88cff7203b02d5965b100c59cfd05156c947d2ed5a6416d3e635b3f9bb4665f63ebaf9ca12365dc72ec00e654058d010056c5558b65fc4d2155b3321614057845d5c2ecef507719242900a081f79fb29591207f3e0539487c3195e6654af387c86d26a6fea2a58e475f0021d12fcba98ffb0ef93f40bf26cc9b2b60733457ad0514bb9a885ddd121b8d005544435d1266853eaac096d96f283f4eecb190cd0a4e17aae726fbad3471b3005545626e8a61bf9518b64ac9c81df6ca05e262615cdf30b65149c6b055c59700e44bc63ec091fd9e2ac78cebd6834dec9dfb1bc6b52dc6d4fddf136b91f11700695832f7c9dc2f9fc351658abb6152c2a01faad2ebcf35f4f65c246c6dac8000b90e7c611990a564a1ff8e59ea323c11d0cfa22fac9d0f44693f01497d031200ab34410210d7ca122694a70c79729e95c7665ce14b4804a234482a2b814f09007c583b574baced13b089b5fd7a90a48bfa265d58c671baa894642224e35211008446aa98322ee2bfd864bc94cf4dedb6a53a437765bd63d57e8ea146e66532002f97c4da258edc589b4cde6a99c0dac111d6167d63e6b076d93f83e53b629600ba145bfb514c2841b32c1d68bcf3adf1d05a6e95d0da2a93e9c5962944a43400b29554f20a7870993d650297bce6e2a050c24b9c57841e45e85e2b6654ae5400c4835cb9508c74b11eb715fd42a40b167d05f22e90cbe9988b2a30c3253030003448b95e7a536f80788d47d54e91862a62b72e7757bacb58b7bb8c4da6ea8d00374ac25d3417d83c64350731e6e6040631e362c2b8b8c5188d452c252a9e1c006c90b1d8e4e9d426756b93a6d844181753c645322e92f16712c645ce199c5e00c8bc44e6a5e239c9a8f2066bd4eef3563bc0a072040c0400b1d6006a795b57004e43bf1d4f53f488e87b4a60504971f2fb162768ad087a5a15b67e29468f2300096e40690241fe8b29f273167c81201f7a9471965a2bc3e541190f7295622000b38e530bd8e61314b52d7b301ebf96c423edf1b6c411351b8f472cb1ea6cac0000edeeebb35feee523b35f451c5139231e69957f4a266f06c61a8c7770869c0073db728ecee5667bb3dc947367596e62a59c95b99727da3b35127ac512b2cb003fae157678405d17c6905835d1b6d3425e75779a9c317f982c2e9b5c89c172006d926af3d18f3151e5eb5c60e2aacb5292cf7c62e07fce44f88ee81739057600746d47ec05e7b5dd0b968e7260221d3dfac3139a9caa762aecead9aec055fb0088170bbb84b624649ec31e7406f2893e6d3f163adf4ef46973b14c59bc64b100ee6d2dd63d6ee6227ed2339c3617f69a0705f50e8e6cf273fb0180749643a4007ac71efbd620bce307ecb31f7f24e094d0e6fabb6cbb00473df913b003d42c00614889c7356e9f3b5e3cc3cfbf2d3d19f38f782b8c8f7fb9fbdaed73935d7600a2395f7468f6fcbbe2a30ddd4312f34b61fe762c21fc307f5189fc69c47b700050913f65f967e465e5880f2a3a9ae77599be1c8e0de4cd009cd58087dae9c700193814f13b3aa9f97c96d6ba6791df8e16f91b7d7b48d081a45d79e381b4840081a8531775ee4a4e6a7cbe03d160d443ecff00edf839ea804b8ebc68435f6c00f888b5a1959ebc7c1e786163a6901adbefe39438ffc499df4648470cc9f5060042939f51f8fc8c22ff5cfa85c451274fd62f96c4804734f000c0f739c2434e009eacd09f8f01a13af40991d9a6b23b5cabe47fc3e65ac2cc4bde582d24edcc00e9ad327685a05af640af64a1ca979db80743a0c1335a78a38334d7f5a4bdb70039de70acd4ff68bfebc07f0e5ed590d9e96fa8f18b0778b1dfa5d53435e349006f5fbefae0d726ed7e0ff27e35feea43f5f929c449c7b8265754f8e3374f7800fe97261fe6bf0116aec986f9ef9ce4475459473eb4ca245f5c15f8c555c164008cc72fae3ce3f18b2b14f2c59567af64b32dff6de3d92fae0aa6087645fb01005656aada185364b500ee8530ffcd130e9525e3031944a130286ff2f25d1658001a3b35094d03a6856d093139c6148407890a8fc2d62097836cbd6825291acf00ea55a25e25b02953afb229532f14a257d95ea95eaf9ab2488e013e44f42d35004faa206d7c564be08208f9be7d9437b983936ae7a59d97fe1f25258d5f59290000009e029ef9000001571f8b08000000000002ff3551cb4e03310c9cc489e300a4c005097a006e482015babd64e1c0896d7b40487046fc70bf8af1ae58c9de008c1fe389334042dc41ec000c9098e9a08fe0a7b40cd8fb2dd4269bbe896d5a000c9116462621a347d233036723c8b43f78e1de0bee669ed997b77fcee2e90100216843302d4fc025ca31b880108cf00a698112526731599166794a981c2a8600c02c8fc9835a06866a8fb5f498cc2f513b6adee0be4172f5215b940d1e7a30000a90122945b4e61eb2759857cbd69337d0ac6433926b527975dd424bae47cf0048a78d742f682e92572e26dc20a2cd4b38721fd91b4462a36f592949bdd90700e7922ee893534c0b458f4209c9c58ec1c474c52d2af95cf58751f52739c55800f03bfaf272707e17b89b0ff59c0dd592b56b6eb459f317e36f7eb1b6d8f2620024fcb1c676f38615c7adcc1ce61946335b39ac9c5e37f8da0521a30fde8e58009fd6a73f25879a5d30020000b09b434a0000019d1f8b08000000000002ff3500524d6f54310c1cc7f97012ca09a93d0077c442df5ede03214e2cdd13423d5700eaa1aad47bd55fd95fd571b2bb92bdb19dcc8cedb74025eca1760416a8663a00942fe0afd032607f3e21dbc10eb78ced300d81261b8bd0cd3391fe2fd277a6002f3610efe6c6afbb93cf036d78fb7d46365a5d20620d52ad7c033ea01cc56500885486978833cca1ba345b8148683e5d44c58f313069650d95905a024fa92c00e38a171b8fa1ff8b273aa76db44e48a4865c5224192a15c4da49f9157d52aa00d4335bc54061583dec83dc8fd593bd9192562385e41d7e3468b644ac23d20e00bf5689531a27e9855552fc881ccbed7910e53c4da68bd1591cb578b2515b1100bd53bd265ee29dacdc4dd1fad36f520cd435b777e468dec8ffd90837914cb9005e048bbe9b7bae29e1a49ebe676a579f93241798f43dbd3ac4dd8498ada9b700b689a9e5cee566e2f9c61eacecf0484c3536fbb2f9a093900e46e9fb71a817007c502d5abb04976dcd3f27fe8dcfa94d9b4d12f0d91a9f9b3fe8a4eb661ea600110633eb1e56b2d71d9ef6a24474e2eb0d57af57af6f25fedec1cd020000b000e964d5000010961f8b08000000000002ff8d5a6ba835d7595eb3d6ccecd9b30067cfbecc3e73f6d967dfcede7bf6e59c395fbecfa4f335977a4b1a6383a5510091a0a452f1021a342dd520464825a65002b6847841d1828856d35afd21d51f00d21f825a100d49a94154224a9578a3681a4b519fe75d33b377d2f3951e323b006bad79d77b79decb5ab3d6775d1947df50267840a9ebca78017e5473a7f0d700c413e0bf7b27ca0fee0bee7b88fdfbeca3341ee7265e2a7393232e7edfae3c00fcdeaf7cfc7e8b6a5c03497c3f273d407660ec340b610909aad026f88a21f700cd43d795a39a856eca78588d8718f75558e8309892b5fd6dbd4d598d550b4f0084a94e2b544ed40a2e95da402547a93949a250f95e14a4ca09a2b1f2a3e82100192d1fb18c2888cc36e6dea1a25c5dc7a44618a17bbb8ac82a777f44b835ce00f81b8351dce18c2eb48ca9659736c61cea61a8cba11e6dec56436e35d4743900d4c7508f437d0c853d0e2518ea7328c150d0e7d0004309870644541de1471f00a37f749ce2cd806f5275dd01219a039d16fa28254dca6e7a54e8413256c61c0041dfa3015a0353a800f6bd3b52263203921e5d2aef7fd52057df5738715438005d5338fdb470927ea84c1a24a0718f09ef102d7372a9cce75492ab471146c000650446a3f414c89f364780ebbd6a44b8a8fb081a9e52c311bbbd31ba2376c700a2309b233dc69bee04cdc97852a8f114dca693197c359b41e5d94c7c352b1f00f115643ca566800c5160a67a9aab270a3d3aa5c0430910088668a13b11816c008ef5840265ea645aa8c90c0267d33904cee710389f8bc079f954027f51cd2100102a98999ee5eac3851e8f28f04002ded316074c15ed5153fa100401b0fa75004849d2e91d0863fbd753d5df0cb19dcfa9d4d9a5d2bfac60cfc70a6742208200e904b23fae26b903b79c4e0b07183923119356a6a6aa8a9cd4464e155b898d002d7617555c2dd87597e82ed85d0a2e6c2e340697ab42cf57e8ad345ae141ab00d00bdaeb7db599e19533abd68c3c109ded04f1dfcfd5cb006691abbf81998b00b3252ccfd432577f87c85b2094164d0ca97f504b861228c7b9fa47508e4f160097caf9b2c2c4cf174e4a20bca40222a9a36aac2566171260cb078d1230d49200d8c9eb31fdc79edef7f408da0dfb328748a6c11878f74195822a6566a5986e002604a29b4ad48fa10d828d4ade546a1a981bccf0c04529f43354454f2261a200452af923adf4e4b474671540a7658896013ca9035812685c27d09b7cee1efa001c968bd21a83491f6ea4217d8d5678d08209cc136f5ecd9c1fccc4e01cce0900193789be456b86279dc08d00ad39ca9d02ce99e7ce5b01c7fc6c06389e56b300dcb91ba8257063d2ec63e81b54bf74639a3bdf04caf424c1f0232822ce7d08007571635a0161abd9a9f8291533d13cd57d7123345570c9e9de8da7ece97d4f009f42bbe148e608f8e24638fb74a2e98a091d50a8d120372fe3454275126af9001ed5cf9d27a14e8287a5d76569486773bcfb2135a7050224ca8299a7b3c29900211f4f49682c21d2d7f931755613629d3067428829fe742e3ce7249d93f471004b8ab8496cdc788771636b9b6581d2d3c733451978929e6a2771a5f45315b40009a1ad02739e12df0fa9a4d465aac57f73d474ea53ba2605cd47542af30104006a7d72c2b1df56e0f51c6c4b39cc1ca08d4bf0ed2f5778ff2b6a552a9e5ac500dd43c56d4990b4ef2f112f4b4a6ef7a171d227f7df2c25ea057cd51fe7ce5f00d8b878be8e8b171917bf6be54f98c8de61f9426cf425181752c904e995c4060024ab15ea471dabc803274d74d54bf9aeeef56fa1bf9d2dfa07a23f68a9a9c4003cb4a5f7db3398339fd19c174a73d48c59f08680fa1c03eab5c3802286a96000f8b71643ab3d65a5284ecb451550963003e13fa9ac26ccf09b0921a6f88b9500f05c907441d27fb3a4b708285b882d8b05ecc1b34240bdf6a680fad261403d008f3d00f98f172cd028a0b946f860ba932e293be3bb6c8d77be5a976a2ef51a00bfeb71563819bc3122a1b1841b10c66a53136ef0bb11424cf1576be1b922e9008aa4a925853d8b2bec1129250b2c2d5c80d629f46361682fe24ae965b5842c00b88430412860b102607a57633bb6c02ca0f00af8f6332448d684a3f475eb2800008131939d70ec5bd52ad777c0b61587f1ac69e3167cd7db1ddedfad76a5e200ab2b024c54866c6576eb2d14df52727b058db31535bebfd4586fb026ad925c003f8a0481c007c17f7542bddfa7b25cbfd3ca4f3326c806094240c09c09c26600a63784732b30ed24412059ed0a672db6eaacd0d91af666baeaadf8aeeead6f00a1bf9d2dfa07a23f6847049f6b3bb465feb7973067c148d78f9500aa25577b0002463b24687e42ad73fd1c6dc0b3166df94e307cc26268b5a7acd5b670b61b00185d83bdda9e83f029755e139ee3f75c0831c5dfec84e78ea43b923e634961005776454059bf58163bd8836783807a8e79d3cee24ae95fb2915ea88c3e813e005805260bd9ded17b1fb5deb3890d74196d8944db6fd868e3869bb9d85f0990008984dc3e2e29e2e356c42d7614167f09ff4519f8c0df99b0142e25f2978b2900b8fc919a96857612567bac3f460a9baf439581d4f1b2daad2eec6e95dd35ba005c7a104dec1ec615badb4282c8a8adec3f76e832bed44ea28ecdadc6e0ee1c00fb0f0152a3151eb40abd5d54fb8fed7eff616772ff01d04371b7be456b8667003b45a8adb1ffd8e4fa5f64ffa15fadf61fe63dd87fe87f2f9ccd1972f8ac8900d55b7fc1aedea044defc57c434c6026cdeaace72fdc5c299aeab3526dbaf3100990494ac316702f8bc5e63e6b660e13574584bf9d2fb9ecea0dd7023736411000f90646b046e36d5f2b982853cc3367299c97708b599c2e926a99dbebac2e900cb7d6525ff0d9e257772bd15d4e64bd477aa6de956642d71b2ca0ab5da40c800265be31367bdc627ce7a2d9f38ebf2293f71cc858201a1cd824d6eb0ee2d4700364a7c87ebcd7245e3c6fca6410cc9aa3ee5aa3e25ea58ff2cc4537eecc0e000331a7606f4cd3d6a9e9bef01cc6778e6559667cc72f3cd7596cf6d96674c5e00ac318b7995e519b3dcbca3cef2b94dd1accaf2d96e5eedd5b21949bfbdcef200b32bb2dc069265816fc8399edd14fa49113e8b2ba5bfb70a9933860ce1a42e007351fa076aa5cb32382f95deec1072bbe616348faaad5d36d61833bb138efd00acdae6e631d8b6e5309e73da9883ef797e89f78fabcb52f1ed1565f702922e00343e8acce5795ef023147cdb5b68bcdbd2033f537a405f6065dfae73f35b88007708fc20f86f4fa8f727d42e371fb2f2a73bc6fc05828750803983e75cb0b900209cb9e4eca5c43c24abcbc239af7310f90dec75d5dbf25ddd3bbf85fe76b600e81f88fea085a6e792cbd0f6605f45b09e2f01e4be4abf4ac06807cbb8f97d00759e9b1768039e73d196ef04c34f590cadf694b5cd0b27bf80d135d8dbfc1a00083fadaed58450d25c13424cf12f2e85e725492f49fa67961476edae0828eb0017cbe212f6e0b94040bdc092d6dec595d29fb55189e2489f142a94ef0f1dc5003833eaa260b838a8912320b73a15725575bae4dad325764d75b264a41b156c00e3bf8827649711154fabf328fb21c5668c8f579562d71b5df96d57e898a2bd00a89a191dccc46084a53db4df8857b6f6a71a6e7daa6137dc3a865d6dd8d73400b91bc846df0dab8dbef7d3d8e8bbedc23103e4cda08921b767bf592ca56ca5004f06a0fc4e9c4ec130c74dab2ffec1febb7760bf7b697b5fcec07af5177faf0070063c2c3bd6c7853e1eb0a7f73d3d8076432373f86b02172286a032a032da00c037724066aa433773ec56b2dd834337b0313cd2d3f4d4c085930c863cf65c00be1cba6f51fef5ef7fe7fb5eb9f1d1dda7def5f63ff8c0071e7e647bfb3f3f00f0937ff8d847ee7de5bf9ffd4f89c4db2d8e5fbceb6d60cf70a52b8ff7aeb40096d0953d086490f4b4b4c07df5c127def5f4cf3dfddec537befa1d8f7cf885003f7fbff9abf73ff9c88b3ffecc5dfffac9ddc3afbf249ffbc7ba27fa7671c60047ff77353f2174a70aaa8e88e9ca9bf8dea3f2984abeb94b40632e16783a740036b81cf12452e394f1a8fbc61e3cda69e160d1fd6e75642b6117734c07c27400a7fbd57a221d27baa6151c15ce51a744e5775e7bc74b0a6cfd4eb705b63fac005ae5a12c5634bff5963a04ebbfff7bd39f6ac4ca6f355c4c7e4cb99c3c56ae00df1a73508347a3b58f63a7e6e20778efc31b104297c455c6c58295848dc660000cdd5bb5155e47c6793eacbbdfe696c7d471091cad884303884cb30b759e5600ddeac4b45bb19774bfda3318ecf478625ce8ae3dcc759fc52213051d64cad700ab4eeefe3c72ca66af6814106103434dfcb5e0d48979b44dc57ecd2a069c8c003def064ea6130392d88796bedf893112373aa0e87441d18de9a0589a42ec7600359b862c4005e781a06ba0a9fb49d529ad369dcaeace01a8a599ad3acebd9e008cb354e97e0d6aa78cd23e2587bc0068353db0ffb4f2c8de85381f371b7edc00ec5aacfe44b08a81d546c5b9fba7d50d44abba8130da2be43604955ef461b300c9410f1521c4d36c59562f09ab10c1e136c1afa7c2dcfdeb82b710ca84da5300bc5fc159ba91200bbf16ec3d601f7a06fabfa24c897d2b1c731040b6bc10d800877e8bd87b2146c286070a4f281abce668ec895d21f05c10b8a0c20410842e00c1f9420d4ee80348bfe186d6a2d7c42226d897542b77ffe736de97505cb3d50020327e05942fc8489a72d0f7808c47283dde2b78c832af61b34c48a414465e00e178fe5d9256bc48c158d4f6b144467e03f41dd5b0b5dfa7228491c23d0af700cc9dc288b7547b21f4e1898acbc539b48bb33e5c9ccbf4642a40b86e7a223200a4c8901e5ba9a6dd34197834a4472912f40862a6bb6e564b62f36049c4601300dcba07f6c263de1dd663422282c5dee65dd5dd5a4b843729bc0984bd7b6c090003334625c28409127519abddde9dd52581dc1ef529a4cf35f37ebb40c2dece0015f6da5c91a53dc2616fb72f223b14c984f61eb2095de81e0a47878503956100c0657640e60f6341f61ec71a8895d29505b5c3771d02fd6e0bb4ec1a0486b40053381d9cb0f512496121c47599f783f6ba4c0823ca174262da8fed224dd23e00497fd492c298c1153bab72ff212cfa729a87ed04f49313ab415c29fd53d5960061c02d830838b8fc80d3ec4e07837d6cb61a962b5a9dba3588a5b253ad986a003df31516c4b81883a9c61e9c92e6594bc385540e4e39f63cee0dbd5f20221800c6942ef763e694be3bc54d81f7abf54d4172c506b9bc0ee36954c403479e8000c7723217f364cefb587932a747a8854937f7fe52ae96bc4ff084e1842efa2c00ea99f77b56be4b9b3cde1f44e5fd019088c462de5fb8e41ee9b1ec942059e100903caa01e1256082d25ef612beab7bd12df4b7b345ff40f4e7b6125b4ed9010042db371e347a2f1e1c34a2fa0030da21f8bf4c1c5fa70d78644f4b0c13c1f000ef2d86567bca4a7801800fd55e0d76728a5b33eff36a5213ca3d8010628a3f001a0b4fde5b262392fe8725855df1156158de1a0a0b9c734578c608c3d7e50b00388e2ba5bf5c06848ae9136e8422c6e8d100a7c4beb6a7c4722f0b971cedf7007476cb94eeb89c6133a9dadc7061db633796dca396147223755c38dcc5f6b100314a52193fde1f633b56eb7b44eb217e7d7582f9278533dc6fcc86d8f922910086f0e970bf171e4a9d18b24e0c8fa1ef521d5b6386bc29bee90426c0a2831f00941b946a7f173472ff02224ce0e5fedd37b9167b0ecb6d00436e48a3d9c6840066e006e131540b8390ffac00ff937f5610daa73a7cf0ef0c424c0f38a1057100ad2060d793ae0e82a0c56e13d29bb97fed86436329f8369944a530a91134d8006d4064602ba3f00c20b479a8216a71c9416490a9c8681e4c329c64fb2dab49002b08ad5d11ed8a20a64dbbda419b76e17f6257db3eb55ddf15b445734c88a100626cb985d205eb206637829428f71fb4af1a817fdb4d35fcccf033ff0f50f8007382ac210000c1095e76000001611f8b08000000000002ff35514d4b04310c007d6dda34edaa17413dacde0485d59df5d041c493fb011e44f12efedefd55be00cce040327d69f2f2920e90103710db030324663ae83df8292d03f6760db5ad006dbf886d3b1b222d8cbc848c1e498f0c9c8c20d36eef893b4fb89978265f5e00ff398b5f0f08411b82697900ce510ec10584608417483394903a93c98a34c90053c2e4503104def2983ca86560a8f6584b8fc97c88da51f30ab70d92ab3779004259e1ae07a300299152446bee21db923aca922495a76a1de6c5b2ee73382b00c92b7b695279f63184965c9e9e905d1bd95fd05c3337504cb850449b76f2ce00f5642f10898dbe65a542f562d7914b3aa34f4e7198297a144a48ae7d0c26a6000b2e55c9e7437c1887f824a718137e47df650ece6f14b8990ef59405d592b5004b0ed6acf903f2373d609b6d7e4012fe5863b979c182ed16660ef304a3992d001c5676af2b7c6f8290d11baf475c1daf8e7f2d935b133f020000d6421a4e00000001ba1f8b08000000000002ff5d52c16e15310c9c6c126792d09e90dac383003b62a1fb24d805214e3cda13485cf800240e08893be20ffb5330ced24a10c900ded89bccd8132f88613a22f2065810a3c9a13c81569119c0778f603cf1f44900314fbb6192854d3f1137cf24f9f7c8cf953edb20bceb6b3fee2e3c1e68c3f300ed1d32657541086c0895e519f010e52678194a2abc40da43337a69750592a00051b184187c9b26256b59270a329649bb5c9671c47f366da7fe2139d55fda2600eb82446eb09293c8e0152476513e45df2963e01d1b3150d65172441fe4bea500277b13a58c4985d88c570dd1aa97ff119cf16615f2383b0aacb6064b0758aa002f5ddb7fd7efff16780edba539edd21c90523d78721206eb8b7b90708f223e00aba924b597d4b5b1aab4e43ac52baf46d72dc39b8faffd7c9465efb83d50e900cd65f8bccba07724a386036acf5ff6ab1e39fb852841e4bb8dee875c0a8df9005c3e3bc4971d629da2d8b30bb305465a9716263c6fea1bcb8cefc28ccc337e006d3e1539383ea5fc716cea992e5426b60b6854d87c18f519c3d876db875180003fd9749d7ea18bae931ee6114e24bb8755ec75c68f63884274e2ab0d97b79700b77f00e0c142bd0b030000eebbc347000002cc1f8b08000000000002ff8d5400bb8a154110ad9eaeeea9a9eeb9a9062a468278d55dd07b513072dd05416153007f600353633fc140d01f30144373c16ccd050311ccc54fd0737a66aeb2183800503dddd555e7549f7eec490cddbe443b12d993a83d1ab1ab82cf603d7ef72f004ab6033b38a6ef6032e960618b49895b7a14ed0349680f25dfc0e478c8f023000201320c9b061865904d178daeb8b8225cda5cbab814494174f1ff15ba27590022212eb51a5b3bdc5bea1d608ed430b8041fecbac8155411442e33c4a77097003ccd5d9be6b8e601c01d52632c0b5991bd1003bbd6c159eaa6f38a51edd04b00b5f92b32baf191cedc0556b97a50949850445212dddb11850478257ce2b033000c1387d6d8d84d749a6391b0044d867e2d0f5d623fb0c040c08fe26b79bc09003a25385a1fca2614bd2059fdb8ad76b6b657707b4293b4cde96c6d8e822580003e115daad4a52c6d55fa52b4b72ad9553abda04a98a6a9ca9356a5424b8d00007c27ba96a71b883025ecaa9c2ab98dbd3cf3fd3af389afb89e02b0675258dd0005d1342db20386ebad1d48d8a124c37c2a88caff4552495247903c977126c9008da48224576d78c0c95ee15675cac939ad6e54160bcc253b2334efb29d272d002b705f4cd22a638953f3acd8cba65846c86bc96b797513793d2362d645f9fc00477976f3a27c2adcaa5281502a10de483d6a2220a41dd49e5afbdde5307017007ad3155a75c4bf1567fc469485709b48ce45442f77643ecfedcc45924492bc009f48b680b38897433a535ef82fb8fb8909b1cce4b8a61ecf507e9829bb922600da139c61aad9272a986aa3e5154aa41d493bae90f8495633adff8376ba962b00b4ab7e843063a34da44da4fdbcd0561cecc4ebb40d162d17dce10ca81e315f000dfe6f808b96d6f273cb272505308941b8fdd61946240ca6e6e724989bf36d00c4afbd8d3ed974a700f8c31ce9c68402ba62c6616ac3cecc0a8703d887b57c00df0f118824beb995f3a7e74f7f03d71cc7f99a050000f851a440000001571f008b08000000000002ff3551cb4e03310c9cc489e3a4c005097a006e482015ba00bd64e1c0896d7b40487046fc70bf8af1ae58c9de8c1fe389334042dc41ec00000c9098e9a08fe0a7b40cd8fb2dd4269bbe896d5a0c9116462621a347d23303006723c8b43f78e1de0bee669ed997b77fcee2e901216843302d4fc025ca31b80080108cf00a698112526731599166794a981c2a86c02c8fc9835a06866a8fb500f498cc2f513b6adee0be4172f5215b940d1e7a300a90122945b4e61eb275980057cbd69337d0ac6473724d2aafae5b68c9f5e819e9b491ee05cd45f2cac584001b44b4790947ee237b83486cf42d2b25a937fbe05cd2057d728a69a1e851280021b9d8319898aeb845259fabfe30aafe24a7180b7e475f5e0ece6f14b89b0f00f59c0dd592b56b6eb459f317e36f7eb1b6d8f26224fcb1c676f38615c7adcc001ce61946335b39ac9c5e37f8da0521a30fde8e589fd6a73f333071da30020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001242ab1a2bd6d07d8d61ea56d85861446349e52c6b7c0612b702cb1e6db6ad0b089000001000000000085864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a6310c7d63f01ff58eb56c7f9d691a4752db691e1ef35c74221e1b6c91c1a8789880000000000000000000000000000000000000000000000000000000000000000120ae34c07013ba1224ac06ae4bb0132883604d02138932b53ce80f14c35222422b7fbd849f92417221e567c919124b68c52f08deee4ce6c5d7ad71ba349937f215b1eef3aa22ec26d64a5f467ab74f0e1ad3966cbd9bcb2e52c72cbaf76050e800000000000000000000000000000000000000000000000000000000000000002cc15e121af87296376fbe9e430daffe956fb18568a3ab5a24ae2f093d889d5b00000000", + "2ce57be0597b93a4ef04f430167a7bdd73eacca04d958fab51e647d268884dc2000000060000000000000000000000000000000000000000000000000000000000000002006dc34cdf3464467a21517c3596657ffffcb8e2e5beb93a5f1b90647212a6b700089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000600a8d036036e3d091657a5b77f57e4d58ccbf621ac4ebe703505da079b6213f900000030015cd5ce4f607fcdcc9e8abdfbbc33273955552c0748de3cbb748e5f27f23972e000003802bb7f2372436ecbb2ebd34734a7fbce7e41962fc16f42b0c006b3b074082abe0000003800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000070dbd9880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000caf43802d8529948fd5292aac0ecd93650d6e14da76a8ba37b5224e6bdfd88987330dab000000060000000100000000000000000000000000000000000000000000000000000000000caf4380000315647e1769c273e8c51a77e916a53728f0d236b632ddb3f26764a60cabc7eed3129ae734059c90ea1aaaa58007a2f1c92adaead59be5fd3f57b6af2fe8d64824104c4ecab81952ccb4744fe3b8f58f7c6d18258128d8834371989ab0ccd892d7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c5f0000000040000000000000004000000000009c5f40009c5f00009c4c405d15342d76e46e5be07d3cda0d753158431cdc5e39d29ce4e8fe1f5c070564a0009c4a0000000006999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f82b342271eae42d0afb6182a99d3ad876530841583fdc0845907de3159809bc83000000000000000000000000000000000000000000000000000000000000000100bf8896e9ee636b27cf5478406ee1322588136d3eb980d0bcd4927f541093a407c2dd7990f8f46e2c2d6369734265adfc029f4d5cf8ba41ee15e0e277a76a4f00000000000000000000000000000000000000000000000000000000000002840000000001e7b86ba1000002781f8b08000000000002ff5d533b8ed440107dfd00b3abddedb6bd02b1c1ec0140033b2b812d206476362220e500044804880b1000224272240284448e38c45e0a5eb597115a4bddeeaeae7af5eab78333f6024e00ae801d9c6fb941ee839f70b5fcbd3843237bd9bf52d97e5db05ce68c76977200a9bf831c16aac22dfaeeb95f22703fa07944d5e1a0c6570a3b23b45b4c19ae006dc243e02ec21677ce37685a4fe74e669082b2c0ce38a347672994b84363bb00d97691a268e36c7dac6cab46e2d1e697fe86387590b8328de03a34d111dd200077303e27fa7d8074656ad026d1a5579749afb69fabad435f19e831a9b02fb300755cc9930d492f1d5c10756c7a027e46dae2f96cfcca2f405fcb6c8a676c3e003e21915bdf9f5b1f4221d15008b64751761b781f372ab4c408f1f111c41c5100bcf0dd174da0e6c38da43f28fdb1d2d7e360291c27e66ee26db23cc5a9ca27000df8e498b6918b0f3861c6461799ac981de9bc865b93d5980c342193948f6100a347328b399044d0c89ba2625255d68530254402bc415400cfbb67669a1c3400894cd85b2631c940950f18b67847566d9f0bf75aa5f76b9566646d1a6226c600d38c43a9e5fe1769fe2f520a33bbc4775a978e6d963a25f0712550556a81520037f3f9998a18128a56b93a4e590bf0692d00c19424ab9a34586a31aae1a95a000d6aa54e463a09e344a32f98d46861ff88e354c18ad7f6ffc6490858f9d50a008471b665d40ee9135d86a42ebfdeb8b4037393b4c116234e9ac4f96a08d55200e7bb300f3f08e7b4037f2f5ab76074608435bca887d8d3208a97ee1e8c74d200e900f35707b85bd73ac004fc251dcd450d12dd2511bd867ab52292f41ae93d006ef1f382e368aae3f305a7d7a7d77f01e11697143f040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001242ab1a2bd6d07d8d61ea56d85861446349e52c6b7c0612b702cb1e6db6ad0b089000001000000000085864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a63100a88f76fcc789690f2c8d407adc76bcfe4bd88f9ad12d2b7ca8254de7be7d920000000000000000000000000000000000000000000000000000000000000001068c57719ff85ca7dd0a30ce50c71d50ead413f1cd124144ce12b13dc0e3e47d2b342271eae42d0afb6182a99d3ad876530841583fdc0845907de3159809bc83000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cc15e121af87296376fbe9e430daffe956fb18568a3ab5a24ae2f093d889d5b", + "2d8529948fd5292aac0ecd93650d6e14da76a8ba37b5224e6bdfd88987330dab0000000700000000000000000000000000000000000000000000000000000000000000240097315a7b3d7658ea2ef3f4217b4ad93dc9b49e61eaecd50d35810b2816241700089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000700f531fb82e2e88b42fc40d6792e6dae3fae4c4c898ca6162a5d7f5c8cbc2316300000c003056b6ca537d3b7d08b478c0b138723107067a6b5217d70eaa0a4fc15705515c00000c802bb7f2372436ecbb2ebd34734a7fbce7e41962fc16f42b0c006b3b074082abe000000c800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000070dbd9ac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad2ec2c02ea066fa1d6c3532ce5e957313125db8aa706b696d99fc4ca2487b1d2fbd88f3000000070000002400000000000000000000000000000000000000000000000000000000000bebf73001219fc0695ea1bee973abfc7ee29392e77dcd9fac024b6038dfe9d19b2229646903007f3699970eb4af7dfa5ff0a6bdb1167a6f7b76d71ab9e007f3a092b4b0692127b521d214d37bf5ddf002259efbf11c433cfc6a26b7ef76977e52441379d9af2bbafa25cd26eaadd76fd03dcfbbd06071557f73a8f61bd3b171a09d7182ee070000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ea9daa92cee074e653825167f469f230de7e31df2f065ce6466ac8e211d268b0de26f0ab8476bb618a44b3b1e820a57f4ef34547cc71c76b77f17e7b1d4842105a1108db06b630ed459a6dda9012edac23fd90b31a088372028802ac3e2c706b927281c1c437739ea6c0cb1cf1f25f012d496b9242c6718b51d8138b01f11a261f71be4980a0a6968023d9b9e994fa08126015fefc38d457fe4f52a2b754e1c25903aac179b715a81a3995ceba3d7f849e81537197c1c28467ccce64a34d79899f9bf48f3d385ec6a9287891181f4faee4f1b1bc67e2f7174384fab405c52a6fa501f690bff8698e90455057553b025aaba4d9b482f914eb673685a01e980d3c4cf3c8ff88c72e971b54b23d02efaf2b93fd966d0c6e2ff8fd755d77e01b3fc43ce5f173e82c6948a098b997769e3224c0e16e25d2040a839cb01ef6b3e348a10bc15b3e5dd8cec2635d496ecbd803e9e25e00bb4e648a4a971981db8d5c89456144ee20bd337b30548204d16a5d0548613cd6ca1964a9eae60b0862d9a6175620bd08e3ebcb78adb3d201c968ddc4943ad60d4cc6736fdd45a9aff0786fdb5131fb39ae0b93a02882f438986cb81e793844bf57bcba94a5ccffcdfc5ea3bae0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300100e66cf6e154006a5e1d90e8b398bce95854303d75863b8b87e724c347741f7603008b960e962854ca18fe3be0dc913ff173e98f5e87e6d00c14f5d939b4a0b07d1479932958ab64563ccc61debc9177922d24c869fb0ea6efe3330abe57ff0e54076e718b5ae96b564951b62eed353da04d3db8eb3688376dd35a769439777f580000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c5bae81d146fc3d6718b02af2c8a05aec49726d455993cf0ff0651d603b0b5653fc78ed7f8e8b4e62e7c0140e1ca66422a961c5e36469ed956e8e417e3cc7966fafc0e6ba3d9284bafff4f0e14e289a287c89eea164bb2da52f255b64f414d2eeb455ed765b7493e4d9c7063d77b17465c0a80ab32491c0546d05227e0d22600a5659bd7b91804e4645257cca6f37f93547757473d0edb298830b867d030d46cab84cd3238599b96f3e161c0b1ab4db9d59df1ba3c3c0a8fa9488c1e61f28801fc2985d590c5ac4ac265844e20846649d15274bdff0ff754e4e5469cb75dabb211368b85ae3f3150b08991295603ef50da8b335ce7ff9d45cddd6ed58f267a4d10ecba297c8a87c6e9cdc8358c9ded449e29b997c831428c8fc9bc32ae199d4b5cc104ff4ddf9a34ac44a03319b5963947b35fa37f684ab6b6c9d3c918e0a06e82700a2f23df4abc588b916e9f9f57eb75fc7c3e560681df854501635379a9293bc8ac3ee0bf62b71fc5e9a2b9bd3e406e9405591dd0dcad7e7e9048346677f4e427223b3fc264f4c463ac26e6148a67b764d2b9ff2c44e22bf6e0c8c6ac1f91b5ff35db793f85dab3b357be3bd7b7c285f2eb72d5a61e0172ae9500067c3b90000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300108cd59553797fd271d041425c123c29cb673a9ad8d89f0c71b475975e5afc1c30302a1a4ee4e2aa3990bb74ddcbbd5a6e6fcc03359b32e865e0e9dce3c20c559f20483bb77f7a6c0e092a07ff380a15a6c77f0f8d4e8b848396080bded1c9c480a1f7239537a4ac93afdd5cadfe3fabeb74ecf67d4a6a0745c4c3d514ca8a30f06000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057e5130f102719784d054f274e352fb9341af894ddd155e843fab459b036f218e4773ebb12822bbcd4dda0dfe170159ec141c9c89d3c5cc4a205974de08de21bb651ac789b468a874abf125e20860ab7df87d861bddd859535a6cbcd2153232eab83c8b47e275ec1e5a11a60730a327f9ffdc4344e621f05cc4468b731b40a7981df5c2ce91891314e3e398e2dfc2f066e9b1360b1378635f6c810e94fea3d8a90e082081df261d61ccaecc0a7601c8e8d23e75023364a1a2d272bafddb598d5071e47f7f1eb59aec7e61f6967abe8fc225343a37b1a8010fcb42f63b123530422c5127475f2483a6805f442f3e129d8218355b5970d6321c42e7c515dc05d4531c568fd1cadb8e92c6e924ab3b7f7f2f20ba9d19bc782bc44e7e70cf2f0dce1095165dee70172756f852ce2ce332715d8ea407c6eb9f8635b1e0a2aa4087f17666d1bb27c8f3e2696e5b62597212ca0670ff62bbdc1c5aafa07ff815d7b3a325c7ead2f473aa4e8e4381b488dc3e500684226962083376f1fe61d176ea86035fc8662ff2cb58d3127ac476fc14acee79799579c7d27c50738a4cb1eab6552cf6f3e3fb0b167070f823c92a8941d9235639a10e798f36ffc60b9309317862aa0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010d245b9bfdec45634a3f1a28bdeed6fc9f63c5e880b967c8faf3c973450557250302b807e0000f106450e5a39210f5916f19332fa53bffbee2fddafe9571fc70032d7a9958e6e91618336dfb7d8b41c1fc496569130b8a905d9543f985e6294a3907fdd5da1413f029ecec874ffc4ea600c2a4192b27573e195ebab76120f200a50000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a2c3e734c900bbe308492bb13baecd89dbc05db4977671430b4dabfd249b4a7b0d1a85f32ad0e6b1f9a5f8384e8ca6d7eea1d61ed896296da539e4d6fc8e800ba1fc4fe902fbbab8e8e7a90de7710156fb8e29549318b5709977b00955f48774556d9adcf6bf2e29f36eb4faf3ec4706e0d0181cb4a0de97e5faac477db17de82e8f9853daf3b72dae5d142aad9f616114d79f687027d8346b7ab14ab86b44e71025517fe72d0c86cf01fd8909670c7af3491e13938d06df22f0dad7c33d397d8ca43afc0c128ae7cf75f41eb84525813104e5e4c781cb3fd4154fbd5b94154105e81d1fa6aa88c96ebafeb4af64a0e18318e22cf634c2273f75e3f14d418dab4c01d81109d84dbfd3df999dd82db754cd10d22b1113e99faeedf29cdb9e0d6b3ea5ee6cd71574806db550b0b6b6d7e0009d723f1511b1b078cf553cfda33ef1e1396710308073edd317aa15bc16e6fadf441013c8e7ceaaf4f940e70fa5d960a32cd5a526805b08c647d8cbdf37140a0c020773f94f7dcecfd3ff2e7f288b866bbeea5ce669a2893a1bb21ccbac00c3f72b2618691b18dd2190d162a8be86f748f573f30017b3627b0b8d359292435029030c70350e6f1762bb4a79120ba5b0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001209cf5658bc80defd67701dc1239746298903290a2113cd4d1e036431986f81803046191054629ef6f736e3682e51f7b6af67a4a6a79d74a229f041406f6deea4a0a7cdeac14870743a5d98b01139c5113f17476c13aebd685585785d1a4fc8a0522aa0c26db4b5fadf000cac8bb04d180a1eb4f887842f5039c4c3efc8396e32a0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a101c3d7b0045ea87e8232a881b8cced09bc2b21bd28e703769cac3ba9316ba6332b3d4ecb6e4cfb0a274f124e6fbf3c9d06599f8dc1a89ea33d55bca6ed11aa2f924a2a537206f03b8b0cb407d3b6590dff6c7c4860b95b3e3f3c70f017ad48776ecf62b0972fb654d97e0399d35611439963ee548025bf9e118afbc2036f5d5900d6aec04beb8fbd714d79658de6d36c5ff437ae1090d4eb5f4bc8eb96a316a1849884b5455debf03729087161b22210ac680d03efc11d2b7c2b6bd4752047b3708960bea48fa239bd1e40e9c005d27fe8b1adb32c487684665c47fcaade79f442b5d581c9b2bbdb5f8bf8400b11c29a6fc6438d43ef3eafa8298a349fbc169027637b32fdb55eb4a171cb3a8bee15e58b21c19459d4edf1826b3401bda8f50036c324b364fac09febc947d5d09e24b57972ac0f989db9b9bdc6bb9c307c2c1945297cef0875457ce995287fb4dd766f7757300d031a1e519f0733fe8328c0239cdbe290f6df2c0108e54f58fd4fa6a3d99f07af25b58190a727d0c7995725e14bf81031ff3604193c6031e59f4e8a196d23f4b3375c563ee6ca2c27bcbf6cdefbc7867d4e5149536d04cd76b4c6d0e55dd71c60bbb62f5153a1838b8dd360000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010209ed6939ff5275981ada985ed9a9f418de0a3296520216b7a2efbc812e0ae80304a7ec2b770006437b5b2a7e62c672762685d6de440104a1e43ca9f5446ebbc610332fbdc17f0672f3e22c7866fe469ed653d0159defaaead0a4b967e06dc5c31c2dc8df2de6d2dd2742be6e6b3c5fe0c8ecd140f90d7fef96ea4cd04d4a294c00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092feca17b1d6650d6127142d9560f72218b2fd688277054875996df0bc4736242e385b324b064c19fd7032df7a78c04911b29a0126a9d43de911bba6cfe086ac7b4e6edfcd466cbf506efdaf53f1d5057ffddc852e4031a2bb04022ab9960241fcc32324a97c958db441e637bc2d68996ba4014166d240715e06b16b1ea3b842760fb0f0046b42f15a6591cdb8d61bb6ceba754d12bca07c958233a6bad598388bdfff500f00c5fb8c70a9aca0b0acbf61b65a7391a93bd2a409b20c09225333e205decfa1568c8c516bc678e2a381739cc7bfe73d8999ab3aeb7315f95cfe61cd3c2d0d0856913812c94118e2b2372ba93908f276c50b4bf693f8a5c931eb88e7554ec57446be2e65c247beed26776bc193be8fdcd903aafffa7000ad2896ff6ed276c0d62ec97e5bebe63db8e2a672202e9b834502d379632d5a23429c222743eac901d5b9f4676d12eaca33be1fa739b376a8f19f280e1043f0cad07a1a730761c7b9bf827a16cbfca024a2d5e068ead50bf2c0c53dac581125dd380dbc08d29395013abff34562d91d3ba83b1ed3ec9884392f48e17f4131338d967064160daaa8b77ed686bd848171917075829543fbe934c611cedd601c9095a8a233470000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001268fa96300721af38d4b6e4762bf385715c13a77329168c1c4aec0e8d4f79a2103062cd287ea400c5dd0825ebaad26d7d60184058010dabbe8a8dcf10633ae9c9c2ceec3f7b28f2505c2d5f73750477a59d9d0bded7486ef44c133bfebab77f8831588576580626971181cf04d7ac3cd98dec5dfc966ca80438137be66d2ff1fa50000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bf52ccfbb5ee4a0e61ecbdfb2e9b7e52c3db58397c6ee423de378f6a26ac9fd57b3ceaff802b33c3ca42137ccd27d410410610da50a2457318e238c3f74777082a07b26a10c8231a6ecfb5e25e02653ae1a284e426bd6043e37938d0b31f79c32bd4e27c7f31ee572a1df2f1c69f045b6780ecb66a5e4268786e2da9431ea3115011786bb380eefc9fac9e0fdbfc83a999190517f24c4a067731cd159949d8d53131ebfc0bd42b05cd61c265aaf9df518b5abe40beb8e96d2c047bde78cbfa17ed8b52af83a06d152f623835d06407aa3de365b8108bf93276812969f7630f00a0a2095f56472b8629ee24e0c49b07de3e627a84cc2339b34fb6f38343ff6cf17884457e3b0d6f6d92b69bd1f4c2a8ef5525657024acb72e2b7cb728387674616461437dfe4fb725c853652a8e47b1172208c557fb3f18e135b3cffb6430993987d94ba2163338c801dcc275cc385cf03650a269ce96536c1d337cdddff8383d967df93942d1084339081cf38827b648516f89b7f604c88bc4838ddb73b4775fabdbd655f35bf02fc3478f7763e432c8c8cd26fec8dfaf329aa7bd57ac4d7879d0c06dba8ad9173fa546bcbd5e23e3819b17ea1f5bcddd0042279ae6e47c5240000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300113b0d2d74a6090ac3ee5843b8f5f15a4dc031ddac398887be461538c5dc248ec0307b4d7406a3d602bb5e238d493526eb60c82153732df6fe595823a19eb886c9f2365af097d8ad7d92bd8cb16122d91499ae0e4a36ea2373109bc580dc37817780ef0e64114305190476815ed7806eeceb3f9f6f1732aa8ab58c89525eee108fb00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029c66e4634f1106cac06f675b642fe187cf4cd179393900287c3c6949d2b70e40ed0aba7c01adf4da8b028112feb95109895ead6158135133be939fb6e76cd05006e0c8a2189eeb490c561ffdb3336f9e1f40d56662762cf1bda01a04d6ac25df9e1c9edc144a816707315b783c268dcb880eac6cd7527e931fc4a1685efc6bf7fb8217af3b98f82c53b212e9f56b0c212195d45e2c5108435bfbf77b33d9e0aedbe0754d06083e77e0bbd7637313bed09aea1dec050fb13fdcee4a44a65bde26e599009ae2855b3200d5f0e136da399c04c3c85d20e1954b5b3cab8452ad84dd44372c512cc0c12040c470139a055926b5a4a5ccbe9672cd4d829683c99b67213f132550fa11d30d0d6df38ce51f72f0e35c2a8ed5add2d20f07cd26884a772097e181afd94d46129cc7c66db2e6c014442b5b5ee103e99f3d834dae44dfe6cbd95ac0cb65ea2f661aeed6fcd3a71f428afe5f41e287169a209e0d83c6ec024bf198fa353850d45e8ce7a50b812f2d3466bb67f5a1fa3fa61400082a536686af27cd642165299c58f87df0b89dc1a65c6dd3d13cc232571ec334ddc0172530fb85df95855e55765ee9d9d297286fbd3e949427f4304db4c51b1b97165dc67da0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300122e87930d698ee5f39eabcc3f7535252b9e7ebe3e3e9473843ff20430189410003097057a1bd486f7006b363c07638d5a1bd5e8b9cde54c85b7633f1136010d6822b32b3dbd4864fbf5d1e567a4858e95c015af1640032972bf50eeab31d5ea4ca0ddaa3e19f0b2a870c7ff5a2c15584fc822d0572fc15fe019ec39398a8793172000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000914c46227ec4cf26a5f5c47f1d984bc3c6ada1ff99b9591fdae1bc9fed13259143cf1fe75c99408fb3c2e4dfdec9b7163862172ce81efd38578849f302e1805ee932f252363b3d8cf722b7f1673273af9c3a412d8580277b3beb72a2bca2775a4ae2d15fbc9ce73a063f4884f4d413412e206e6c9bb208465649a049c13c5cc7e891b858d48e371f510088b23b736efd7f99f49ea1f1fff6ba50c8ee318ac4fe72d3bfdf349ed9f43db26483cae50369608eac1387a1b9605cb6eb4d8b63f90268cb98814eda68cfcea1a4265262e5f22b66742061e7c10b99c7dab7a6935d79972b7c22ead9e1cdc095898621363822ceffdb3051571782f01594827d8e0f42edd786adfcf6877c2755ec2ba338ce397c981118eb52ec11395aa72e9eb0595fcedbab992c160fdd8668a528e76dec9f80da7f6b58c9cf497f0d51375bd1ecb40fd7de15d0b8f654229339c0768f07a8b38f9ecafabc26a399244e242cb8826aba204b302953693cdd1771176a0fcd11b8dd3333567b2bb4b5f009367b61265c0a5699ce460fb5ea871a1b164026d33c947a84c7099463c654244079fc8e4626744bc9dcd0c795b7d4fc553d28ae63ea3ba5727d1121a630448ea5f008e2e11d0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011db2808caef54643ad06e4c06282f846bd86ab463e4583bdcadfee10a352d428030b01060819074004832193ed063eba1b6c73014ad3938d43b387a96c26a0692720c6e32e23c74a3aafbd056e68679e84fb65de8a8c9336413056437dce24cd88223b9b4be1e00c1091d280d0ea769f42504e49af65bb966123029b18deba93ae0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008311f99dc72abf71f73b254ce8cb7b53e771a58bc6d7e45039610334566a57a1654e6c383dc263c3cdb1431596deeb5dd52e693b3ed62e09341992ce037c29ef0c24d32669c1e12b95b23aa4a08edc30e3d29ceb9a2bedc34745f984e43081b66314c0e3f690e3cdb1cdbc075924e212cdfa03c9a153e5b81627216c9df177af98529591ff678527719af7971b5fa8dc24bc8c8df8609c0be2b91fe0f95ee45c9e7e474e47a20bed56d82dced7e4b681d773de1eb48d24d873b97fceede4cfd8455bc9cd7361c47739140b7139af8e5c799c32ffb67a627f498a2cd2a881c7503855c0e6d33a5b4b2b6f9fd69afeb0bf3bd481661047640055f8a7fc41036285b452486332af55e5758cca29396365941dbe5878af032c9870dd1a58445ca8a5e8e1ce0d25aad3ec1dc193b3a0d06ccb3d808cbb0e25843949186f6ee38ee6fd1f9c9536988b096614460b0171bc9053eac4a3b475ee01a97d7b12dbc226b5084ab580eb40e2142d0d28dcc16df814d11dbb974b5eabf5181462f2aeb635e4252dbbae1a51ee8d6b811fa84d2892633286ef1c30de4babff634279d662fe17492bc24a1912f7b3df3207a4ba6040f8a171ed690f7f24d0da1e6d2cd4a678c6fe0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011d15afb0eb861bd1f8410d2b6ba0ab52003b23798e3055852c8e7579a1729251030cffb63656a7adbf0e27e71c7088455a6200e9c42ec8d39102eab4f9349e6d641fca76b6025dfc584665af5a9e03df55447ac252ae3b5e9c13099dbaf1fede1112f0635bdf812537853c313045923c2fd413d610541ddc1cf95999c0a3a13a02000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a051256f8c78fce03aede09ff196b796d14c422f6a59eec33c5f67c916ce3644b398611d246c8b7d421558242ee90ee8c99fd7d6220d007ffe5f233053e7ee649da7b193951c1bd9f09ab6996a97e7264fba26064e23433bf7f5f046d54460677a2bda390297e96080a3c3540e63a829705220c6add0d50e90d7f9cce3c0653494e632aaa847615df4b23d9b437b793e87a3ba83b948a5cd5fadc2033f20187532d50c4aa7d981290f17e89e7e2075fd40a5c6eccf6bc5f5019e594557ceca32ad567b438f6b7f2b9c38487d0ccaabc5301c88e2dae0a9d6d2e003ee554281f2680085e31d816f6d44f28080ebb9415e4158d65e061b68e0ff51d888f2c84bf0b11dca4a0a050b54a3f1d7ef4654877e76b589f6dc1a61d5b40f5b81c8a6e981e9bd19c54e55d546a1693f950c89e913cb437fe375284778b46a8c46c42554ecd5a62ca8296f3158c1883d82c2219862e1f3cede4d895c909ceb9789c9aa522fb4a8d7fd0bc86abcdd969a4906e96b59fcacd1f509206c430f69cd266e5852e52775db8d00410a2e0215d90ad95006495337a62bcab274af35687f0a322fb86769b15c1ac7a5213a5a95e753cc9a6a63a899e701b1271b427a7ecd3dbad1d6620000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300125836c1741478bcfd9d1f62adc3377a853f353caca50cfa7635347368441d086030d40a3d5adfd80e96c86b328c2efa4dbd0bd284aebe7dd24ede0074ff9330f731f1000390d807f853fd3aed9a6c34c488e8930824f59fcb2a7d2abde3bc6260f0be3006f2014b90aae9563ebf83e6929245a8ef3a05cfb4335347acd8f8823d00000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dfeffb903772e2e70224a6a700cfb05bb87a00de60e596267ed7d3b4e2f9b34dad2f1977550b8ffd1815f5a47dff4b0be8715db8a64de33783c2644d14ee7e2f61b44667532ffdf64e598408f9e3c5231629f930c6766340b1f2a3671ada4e4bf3f3affbd9e68e44a39a2e628433a8ebd4287b9727a828f297935f67290e74606cc2344fa62db3d454cafdb5b2e3d05c8f67b562e6750f8b4cd1f1c70fc086ce041af9661f5b23c71e8fc0d71bd1bef8b05a77611d86f86f59a55a79ddf275a81d2d9a09272020e566a5a836b8dfa67ed3d9f262dd7984223b068c7491aa715b070ca32ff5bb99c1d232b41f5ff712c7ee2164fdad37cfeadb72740dafe490ad37c412b938f223f517e243e0bf3bbee82f1bcccfcac44cc39df686e4bce8dfa656c19099a3a15ec114ef0f4ce8f11c5d4df06426032c5336f73513e04088ca2987205f087a0af9af3e99e377e7c45f361b99a64090229b951e10f138325419b85fbb7010ec718e58201252d0623e35e9a7a19d74576d99d43d29d626164a5a66e5490b77530bf2749f21c3c2c04aa0d9879cbc873a890734250604ce005432728ff92acaf87234c8b50e29b39b8a7ccad8575cdbec6035e763734f339e318590000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300101d3b6610529117b5ec68e54a5dbf0207de331a718b95107dfe4a344cc350f7103109fe30aa480889d0976719d90a75c8b215bee49b94c4e05ac40f847ae04ad6015acb532ad427c99fbe93758c8ab8d937244e0daf0708d51f20c18e299f2c48622c69983157fb7c3c58d6fe7f5ec8efe0a27bf9a858fe1cb1873d56c79c64c9e0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d1cfa5e527893bda38ff815afb8a91caa32640bb44a1a524201490f2c7e6b6263e5601b91ea4c3456822e0d2cf17389c0b7d78c1211dd1a7da0666982c5772250c0a914dfe4931dc6bec51eae83e24bfb2f3fbf227fff6cf7d3dd958fcd4607f2d7a7d9df4fd77716e5222a50dfca0db25c278fcc0ac29fe2c07a4038e14cd719a47bca5c7a6ec250b0ab62ab25fae2ac719bf42a0d67d8623f48de103630b47bfae13ce45e9c45c1ed2d81e42c7112f7a3259151de06eb8903b609b46986d1f93ada1ea92eab3d09f7932855cd003f7f45f77529fe26bbb69ec95570dd080c0aa68a5d67124bd4d891ed31d6b13a02f0b0dae7eed0d4f510b4b141f7132430600612a9fe69a28549687d187edcf1be5bc7de1aad1ad44b1cb17fdc282024bbc8769c811414a8fa7378abad8c27b0bb09741f34149b02864404534bf8be5abd8a3f7618e88bc8958ff440380973a87097bef03ac21fdb1e05ac46017cfdd54e0d1c45e50b761b571cb16a74d98ae61a96ce60724857d8b0921d509641930108d6ddde970bc52ad8cb2d7e0e24c18f04377c1bcb4e365312f797f3a87987fe4d993014b90411c1941ffc4c53c49707224510676455c97c55a092a430ad6e26ee0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011ae5b21ff64649b7e904b96b1f7909ae7a49c186150c43589ef0720e6054786d0311ece110249b758e0c6fe94668f3bc94727c34dfbcca2a4b3ceabf81546945e31c6ee9f0ffe1b5e4311bd060c0a19d542300abb77b859aa86d8a28b8513148ea05289441f8a6bc48c6b88c80079511c2518105abf905f7f97c954f2b357059f800000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088feb296eba2471f273dd2cabc86029d583450b5bd491035e2aab318416a9acc41d34e715dff2eab60b5ca0fa83dfa6a59678cd912f2f9f7fd8e12af523180fbaaaaa2f2d9deb01f57ab1c296137ec13667ec0625a841d780ec34c77cf739d029b37b67db24e5c37daf35b4696594374eb6543077cadca76585703688aa01095f51c14d555f3683f823a2204f6ab9ae6851d87cd2cb09a1bc1f31254ba8f7bbcdc22ee3218dd7b484ba1ff2c5102c84d26b1c248def6b591e8df18d18a18f1192a7d9d69b2549c0e7284c17231ad3277d799bea78c1927a4ae104efcaf524f14e139a7628d9319fe0ee7cb08e2eec82c7ffdf3544a716e8e829344c6082fefcc1ef148bb9f5a4b61ebd6b9444783802b44072463bae99ee72ded0a4b78fb7e2b722939c2b817881881f456855a1f98481ea5e5873296165bd27ea21011006bc9fdcaea7227f50073323381f3152c43c8bd27a9b949756fccde1e7c2b82f562400959a75e99c5e713acd7ca9b5c09087d86c0a6da0a0729b298c8b58a61752d21e8681051bcd31a123e0e0f457e0c8fbc89585a6a7089494bb3e92534a90e6012bba5d126920d673f461e9ae3f3e690c0e8aa9c7510c57a7e7c64d5bb5fe25e720000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010b9f71712c33043a181bc8f63cd0626e5fee93a485a52625c38c6da30c84da590313e300b849ba845fe6f2ee855e2224d709c31fb39842e8033cbd6c007b557bd60cd1dfbec49886520d4b32e49f86838f446d5182cc37420103eb930f3b5773e0167636066257ac74c391cb927189b4b9d2f371fe84183a2cf820477d1993f6d10000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002eee43c900ebf03fb7d8a4090ddb3234144f65ceada48ed080690f8fd182c5bb3325538aa45299fd22ba664e0303f72d19be53b8ec194d6f1cd092e74fbd0a3b4b6bdd5fa33e4d02f47c4e2ebf0b667a693586b456d454f80a6d34101aef8375f2f7fa6895188664fac3e4b2b19d933d8af8cf7538c75f8493998280f54e5b44e295e4341fb595b6015ead34ba7301e85ed61e590aee4b3178d053d78526b153fe5a0638c6c237a1b2ed908b40ae982f5bc19c128462c6cde3f0230d2974e37f0ea94fff82f9178eb5b5b9dba655f8b596792ce87799ab9be9282cc0b5c300097c80a27773d51cf7de873b3f4147804975b9b301379eb34505ff146de4885b82385d0745ec24905917e373c43026263da157b1842ebb27e516164b10c16f0bf3c87eb26488f8a017c7924bfb6284df39164b529d5cb51e683bfb9a495c3975ae8e99bfb009b58b88d738968acf7ccd87b80050545257def8c368b1e3439462f2c60611cbc9d0e23d1bd884459079aea9493c55100a0435824cff76bd1ac8d66689ef705c71ff96e41059cd02b0bb5df7c5c3b3757f4bc7e1cbe6eae7d8618c72cbd14b5e0ce0362981183c432e9d56d403fe9c3105814ae4532e9720ab8c3ae20000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001000e42a47ee1940ad0c1eaf0acb5ad20557495acf89a1a48f6a07209138e03100315ca716cbfa51b9bbb464df402af77d5642515a8e9d179412445cee78ca202751276dde89c63891d00f959e047a0f5c776aa6f7f0a0538b5d03e7e10597dd15424401385c4ac7e4b4197dfcabe71dd2d57f0b4d5a11dee0a20994dccb022059900000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013e89d5e50e0c005160ab5fde80c697fd0e232762eee0326dfc92c4d8c81c859d886de6e69d1f5d69815a42acbc6cda81e5562ac7adbc6e2debfcec255b1940a12ef903148aae3b1d88b395edb6dbaa7f82050386441fad7613431e01c9c3358da0990810fd531f0f24d918f84eff82e778443d64cf1d1a8bf8094c1f80d546d6c4406e40076dacfdc1e33b4736832963f3ddc27fa71b4407abe7dae5756ed693a2a7403a71d16deee2a9e04f7f56355612ac4e66f97e62d17a8b46658812c9cc07096b22afb4265e2a2941c79183db688281fbb99ca2bf88a304e2cbebede99bac64a3ff2bca210c3b110b3d9642a41964248967862e1b4b443b27130daac5b74c5cc3d92b3b8b4c9ef2af2e48cf1b8f7d2e132c319a87e2f13fdb86c7cc07c33881982faa75880f08b372f13375f66bd9447b9d1e85679b451b07fc907302fc63644beb992546f1ef79bb7ab9009046ca97473c2a8d57622568651f9760c7b5d968ddb7b99f282926aad95721458b43a900c8f23810d0bee55855c4176ae428e9cc25ecfe08834454f4b4c0676244b7905f0386050420ceec55d91c20b9f9b8a59b4158db24bbf59f0403f2bcef678816cc9859cfc577b467b56c00a7f45c40000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300100ea987e8154e2ee69a99aef7ad36f6dc771494b8527708bbdb644ef50161be3031689d708de8c3de4ca6488f37b08f78cd186ca479c96d85c1cf70b5c18910c8f29548e24ead9dbc74172eedac055ccf0a93c7e5d057141f2e25be3e81aeb644922ab7a0726659359dc31ed37e9c254d50470b48f2ef2aae0665062dca2f47095000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a11b5bbe8552152031b50211c047bc7b7d2299eec7f1b2c5571ccd9af99de7f472ad7e38fe86ed72edd4a553a760f219e01336a0a6653b52bd2b196184e1e28da96d6ae50569b668c34a460494fa83482896b1fc9ff255d47a99273d8916d939c897371729020fc256afd61ffa940d0e23bbbf79315d78d96397f00f3aff782a01f400f7bdca5d9a8419b5e1761a3ef1ef6123621234de628c4e010b1ecdd99895890e2766cae54fc5dd253e96ea545a21eecc3a9ff9cefcee7bc606832d73631b53eeffb825ef5c5cb47ca753878e8ca7c50791d5b74385d8e74080cba3d7dd42907e4cfd10c8c3b9f5c6ade3c6f9db691d1dd27439f8f1a5b5ec0d4e7fb3a26849af6f99dc0e0583cf8a841dea6f86e4b519582d7ea1ed8eac8f8232fe9e4eb2e828121f6828c79f89deab8753276088271b56291a1151e7a1cbf918a9fb1b458358c9bf62060c581a35527f77e28f2f8cdfce688506e7730eb9efac2d7a40780bfdb5eb96b4fc0c1e118ced7519ad17a0622982c3aa3ae76b09fde3c7657c9d93cfd3f493f99eea44c061796990bea4af759165d81306cba9cc53fef62ba1d214f7c093db2619b99919ff569b897c28ee9f9776d35f0372d3571c5a1319250000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001080eacd0965e6fbf1a3bf0017e1b7b02b1ce2c47159c6483c257d4b5f22202030318667acd38b6f91f403b60940610e656aab16a1675704cef1058529c25ac7d7f1b4e673c693007a0c9fd6d4161f9c1e24365ae6b7446dde03763733619b365d6179bb3294d8240d615acf109d9b77494849a05da2941638af6e9845b8e0e168a000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102b3eb7e510098c92e70c005e46fecefccc2ec17726c249fd05883874ce7b5fe4bf3a3190dd9142e56d0aedee8d8be1e88fe497e79ac67020b3f5ffc6457268e2dbce89bef0817575ad4e11c2683043ab3a5954c7668d4324477131ca8227d87ebe8f9a25d7820c4592dce9f2b0dd4b0c01a4f9734595668c2515b8e51f65f2d3eaa5a671740b5ad2a317d85e452a27686348878b02829416980694d38f5fdbc3dd6d8041d577dc00c21b248b3e48f54ee88db84358895a39c74f1e38d39db9b97c57fff3ad3ffce47c4e8bad595ab136b50e95313d229f0f348ed1b43d9548ff61bd232689bc0ac8ca8423154c4a7be921f04010f1007614d3c71e7d3fd0b4d79591a28ee78ad35f21ee612cc9d524163752823dcd3693d4da5589017ea4478326f18ddba4b918a79c9bc307f273e0e19b2bec48d6625fa5b9587507439f0c6734036b26c5fd2123a7506c096753a1a96d86d9c659d7b9eb761f0ab23b644cb1f50959da9458a9f7df7126eeffac71a4eaae8a5486c8237dcea4ff97c26dbc904eb2ad7502a2c6c65e7b91698f357eddd5ca98fd62c25045de48b8db4b87991b5da3e7a8f8589994aeb815ef2148fb36b3917fc7eca9061890bb327325982e0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010e5718ccc3bb19201795023cc28a80d064d0f454810f4860190b8b179e1f6bd50318b2156f55fca3a647b9508dffe1122e66b0e1c9eed57fcab4f704b1c4e01d1c210a7c2a54f5e9d5028957ee14a8bd0826e3c19831743f736c0745f48e5eda5c188c1e6c2f1900f52dcb681cc36f1276243855d9d8c9f81783690f7657b5370e0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008517d5e58d4ba5622aff691d8b3132db4fd1c76ff49304660c5293b98af15372b2a91f1913641fcef9dca4b4afa2aab39ae688df4f6e4ee60d390ce800726ea7c7d22540281cf100f4a9864162838f32bfae59f0a7166a358af9f6117f8e490a0ff99006ea8ba5d2260d2eeca4b1a1c0fdac80c8561a116062f715927f2cda4df6207886ae3dcaf407044cb7350671772ddd9144860502078199e7bc0a14a5ce3d497a4c2028a521cb7e99051946b81983ddbe8f1e8e5bdf5f6c734a725d63d8fc0172c6d275ad10fbe9d2c448fb91c37df6a1334a08963ee5918a815bf26c95161438b8f3a360da57f8ef0c352f13b2e06c411b4826aafca1a83f4e03fdbedae94f878e1d0d8ceac2123365b973ec6b2293cf9ee2a0deaf10e01d2cc139a804714e3453fb335caecd49c66913ec23dea6ec887941014a6ef89fa7013cea902d9a713f9bf3b2ebead1ef66107aaac12b2100fe39efb7698f3b5b7f25c88f9bb870fddeac98aeb6530b36c452073e9dbe982ada23f0b10486d010db9c201cfedd831d5f4a834648328bef5f8031a01a8266b8afd9067a7f9184259a50493f30239a76c4481efc5b8eca0aa6a9e3f0a3373b1f98d4d455f275d56b557934343bf60000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300114794fe1e97575890b90735bbdbd775aaa5d03d7944cc3cf4f61f110f53e0b5b03191c6e65b7f976391d8dd9f851898b314b002864a8e5a00ef1c2119270417f2a169b8572792ffb7a58e29c179475db2d4c775b2decc0a8cd518b94179fa0ca2e0c85a2627ed063d44fa768bc0256761e47a094345c4ab11fe7763fd9ce16ea5c00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081fa7d9422eb9a2bbc98f30f2972efac6b24c6700a28ed0e13c81ffc2eed4cc199e4c1d4e26e3a4c679d3551f00ff451edadc333928cf835ccb063244886855f46d1bdfc85bc91a8c19999c057888673d4ef4b0d8cb18e26c7e90c28d1bab743e9010c9f37d1a445cb621e41265ae1e6c35533ef657cf04ba932df1aa53455bc332258958c3a57f4d822200944966183869bc71e650fda1a9209b4d4e5cbfb2e4d7b7479f618f29c8e4258129d34927f97a0eb0d51de45d5015ed03a40f38d7ee588e4af59c83901ce6e5bc58d4e9dbf323042992869129202db9388571781987ce05cc8bff1dc5382458e05a1b15998a928070438c5374605e096e5abf8b37bfe0c26674deb925c44326207889bc23fadd484156f3e5764ff3b1351bd874972c586bae0514938e52f252a7561625d775e6af1ec56a46a987f1258dc786b6add633bed3a0925545fe5f81290ca888433a3461f3e5822ca8152492ef206e7d4f77d4a61241e5a9cc1c9a71833ddd73c13fb8f70349597691bac123f9bb09f7cff9b807037ae63c8f04b939a463bd82d3ed2ccf661aa4570d3c4ff76bfb81191e2554d7db2b36eeef3aa2be586fdcdac43ac87462b16059a8a9d8d074d9e58fbde0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011a289e862f9b4655689f656f075fba21c60cd1f5761afa4100f8be856c1a7076031b9e376588194b45202f45f7e5c5d5b948a85b07106c01f4761be3e2e9bbfa540616a315f22479b19d2d7f10cc6b3982c42df5bedbd402fcb3569df4558126980460f36232b500e8f5acfca77e017c2598fee2dc205f0e9ebcbc97bca9a9ba420000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b6587b61c66d8d11552d81b5c0ae255b548031c83206e2b3ea4e210eda73810b8ff2f9071935fcd94e9f0216b3cd4034b23058dbe480358688ee03eb9761ada65869a54fd9146a1d3e116d2c951a9ecd9d2588c365cd8a4398e0c579ab2cfa814ebb6d7169503d21e00f329d9cb433caa1eaf5b8890929f2a1687c1cd53373bb582b04c65b8b25aa4df8a9e6951b00ca459483d869629928666bff49a62bb5c81435c64b74ecb5bc3f3e0d5df219535e35f72b9faa2b40af4c229838cfd6f1f41e622616ed2b893e4575b960ea845dba6aaa5b0fb0e92a85d7b2c12b39d898ef4bcf14a122cfc181c3fd36f624ee914d2443c0dda8f56e3db12817580bdde0303e4453dc31ce4ccbe02ea0a799ae81ea22bf65a9330d5ef4ef7daf36f7b0752c9caa194edb2b2c9a04d7a4c54be227dd00d931075775dd2d586061107cb75c0f1238c6ed92c88ea9af3704390b5bec6d0fc2f619f14b6a50832549419b65cb8c79f2f3ab9fdc25a34a80a5a51fee50f3ce2ba4076706bc7f98c7e503c6c10db7658e6c6a7a1eef2d179fa65d26d4e5a49addeb0d99dbc67d833cc523f0085cf91ccf988f1904b6ffa53462c2060ea643dd0c36b457f09faa9bacddc6055174b0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010c6b939b741361cabe6f1505d19031c8e64ee3e4761831ffb38f9c7c6d929b3c031c6bf0737332b3e9c0e019ef56bcf6a92716ec02ca38a0772ea7ccc7cba9d3f62a5d418fbf6e80868447eb7f85f5ed6d9f69de2ef60b9886b5569efe2a94fa860f62d03b82e06995aba02aa5d4357bac1488e2c159349ebe67d82fbcc885de0a00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081592d507e81fc850ed05d7a70f467db9d546a26bfbcfb905bd5dd03ad14c3435482e35704c7e7bbc99675d8e71bc36eaff6ee585bec7b3f8ce3a338739c6d968b0af546926940d8be4fe4f8dadbea53393341152837ef7ad82f576864ae77853496a7182f9767064471dbbf776a41354649623c7555073d228caef4aac38d75043eea8b03797127b4a675a2b8f2d49a6c9e02af24f2311794cc0d30c643e86bdab7d6ce3c4e5f2f63fd8efc0531ab865f210b23c4979d96f94fae64430a24ea69f1ad05466e4e3f509b49c0b29043a416c1c7643bf4633924d85f5f07ed5890caaf2133650397f1c68510b27f9aeb39ef86cc913b63a2223f3388834ebdc68a381b56723da8fa08519b40a50132386d8bcad43e5a54df3b72cb62fcb11e7621cc74c908f225a5a9fb5eb9f6c4c9defb4c7982f86efa2b94373654c1c73f55d6be68a130eff6f052c407b92f58867139ca997880324f77d4c917c3d423d2134ea51cad3f6f577215637110e7670e3f3c099af6c3559728a28f76a0a0d71a6f1c7a8513fb2a81f662c44c239cde38753d1141c62a5c49dc19d25a8d648e4b342bcbfbfe2775da964d24d06145520ccd8245fb90a213fc05dd750751a2008f2d340000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300103cbededf5acd275ee7bc8490bf2e0d96eb122c3a88711fdbd3c53d5114420e1031e4906ed029f56cb37a961d808718e03e80c8e4fa9a37335f331f7dfc327f71a04a617a225106bcc831a3e8c4ee2ff7c0212772252ed79b30a1ba07be6c7874216c61b4cf64eb4807c52b2685f146fd52d2508a623e060ebde1eb76143019a4b00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087c45d75541a55ab524de3bcc601926e0ad35b68476db5283ea40d77a11655103c8a02f28898ed1ff945c23186613a2dd165b3504934d7559cfa6fb4c83566c1bb55e37b5bfd9670922fedec80d83268ead0980941c6b183049da6b1f42ef141ddfa7c9ffd0f9bbd70ba1cb9d23e1fcf5bf573c5b2332e3dd0467ce1aca2c78126debf59c06c902206ba39b43400b6418a1cc31c7ada8eb4f3ba38681e1e4cfd4fcd0b05b52819a8b006668a9addfb6818c188fe3679972ffadaf50f526828058e6e57339865194415c19f44bc07c1373bb788775b4b2ba2f6992cde0f030bfedfd498c48d7252c7d85224d3f37a1a703d8200e3de6c0409b5a03477729f10a1950975bafcbfd09a482e15c3a1e6ac57cd30c45a7aa118125360771548f3182626e9dfd1d4c2e8a19fad509dd3c00a01b4e12fd1b0c46ccf04bad6e8f374fb9e9189e9e910ce89d8a968903aaa4e1b20a52cdb23ebd447d281a4428ee33912f3f38b78fef1c638f55c8d3f4a8e1b5676954d433ddc754879c2102140b8c278f68b6087a18cf4fe9ee3c131ce6a0bd92f13340c0564f61ffa615b0987693fdb1b8bfbb301f85da42b077ca0d69bf15a653684f332b5d0dc7d4347fd4f4e1ba70d0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300114d66c3e2a8339c0a290daff3150709f78f140aa52e7afcabf7c1babf10100050320a9dbd196a5a9730d46240ee1391f54c6e043d5d091c28211f12406e893faf8276504c6d012131779a0618859955d3a17063807f959411b72af37a2b9111ab9137c9018ac6abaa904257a79143cb5323c37fc709b24a10290be0c6efe6056360000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a948c1249e14b64a435d7c7574b645df723bf3738196cb00cc137314f68636da6e3fb8283f10dd4e0861d6bcb83762e00035a9a031aac8d3923f2490f08ea017caa8217a7b4b216c6cee8e24286a8ba27d5bba612a78c99a30f34ea63e31910127618e982128a6e11e237228db003af091ac58d2239f98a2d6de38199b3911ccdd03bcb458fcf261e4a01a89d2c96f4e6bd13e3f461ab6c0934f7f906fdb7d20e23ef8bf9c9695c820b92075de246e0337eed91c92f588a03fbf8c7c02cacacbb1451f5768f29f163787e13a5f4370e418115d3b01e2b216e289fc2c85b524967b561a1e2d047e11019ca4b7ff665db3135f5ebd29a10dc64203da2bc53ef0630c65d54c792f9ba8a2ff556313d52bc471561848734f96a04b30940fd48c70caafb9ae6f8ddf95814b2e44e4dc5cf4fba723a4580cac83fbf43969c35185d32f3511907ca50062d5fee93fdad02aa09201e4737915eb23db1a5d783f8583d6b762d1937b821d099a5f8f673dc67206f21af318c703c04d7388ac90738e6d2d1e4e307a20010ef85bb886d37d691006c9ac72f2d8a7cb63998c5b9bf014db9f766ec11d67ab557b5678e9784d7720edfc97cdf093a72f7e3f869cf9f55d418c20000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010046bafdced7f3454fb37b01fdab3860f646f82b564bea1649f096a729e10f450322a3d7119d0829b3e1b69eb233878ac6ce156d318f53d4175b688010fa5f57a129a8b96d534c6b4f5653036310ebb49448e9634823134a532bc415562a26a3001cc3a86b8efac0b9180860e93e625b6d9857bc374f59bfaf071116ec5465d01a000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000136551b03e874c3dcc598783866849bec00f073a3657b52a97b81a81c4e993a77c184410deae7202135b85ec37d3368e37491dbbc2dccfaea1bbfc13b9d3409ccc6f20ce66057d53cba4af2f58aa6808fe3e3779ca1385559931a89fca8dd9a5351fb728d5e6a61d92a8a2f73b46195baab04b1d0167a4a6ff9e30920f6c6100a4556501c41e6ff65ec6c31e86ca1edb1345b1de7fbc6a74e8e74585ee4c9d21ee8782115ab2ca52ba396c53b093137d9daa1555924a89d44bd410e3cb3b24075ab2ed1177fffc4cc8704aef92d2369692b2b53b5af9d448bacf0bb84e834ae48efcfc605ee86c9d772ca998695dcfb2b08bc74a44195f56054b274533ac21609daff11fbfa5cc13334d2a2bf7c09e17d7427a047aebf9f7f7309d9191da427fbdd9b326f8b14bf7f990ca2be7eb77968f08c1b37a842d247fcff4359132f91c687fe7ea5a176e23963a400d4659cd8d63b0cd153e8ab785f8f6aa7b552b79083d891dfadd0cf29a803ba796a2cf60c6bb8f650bde925f171290fe31a42dde7ddcbda84c50913291ee659a90e29afd6fafd851390c0eabee35e3867d57cf0794c593f872d610784c5bf2c8e1c5506dc55030b6257301d2dca6ef52d164f94c020000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300127354acb0da09f20b90a63c5a729b572d96df167eff90c1df41f9b9d0cb788480323b4510ea513f83e4ece1fc641bdd2490aacde03957c35a5f0baa3e9040d82fc26e2b8be9b654988aa80b0893c59416fb8a66d1663bbfaf8d96d29390a8d14391a531affc14bc7705e8c409f915cece7962180da440b9a6d4a104cd8efbe82080000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000efa96ac62f475541ca36a9b0b40bd16f54fc0ff5767a08b40ef4d3d0bcf2310d575dd18f29b68da550f1b8fc32af4a737a11ced8972458f9093e186249335797418e1baca46d2f952329fc5578aa75c090e11fe7d98a9bfc217901e1e8257dc4409241c31c57bd83e0295b9b0f94a6f513d89f7bf361061f83e31c0fcac7f22b22b2fd9acbbf88989c28f7989023247c8869eacfaf2bcfceafa32d6b9e4015baaa9331cff12987fc64ba4a74ee0ca8283df9e25bf569e76c609b19e54c7d20d6f652221adf28547643f07f44d328393171e28591189e7cf87955356cfa5e1b3b117a859c11e24a26278b0ebe7e7530ff18e29f95208379c003fd3b9361fb54d4abc2e430bc1d9e18b1f5eab408c6b899292286af1035386aa5edad0038ac98458b84d048021ef6ecc5a238e5fb669968beeca665f570ecd971482dd12c152a623258a40619a739e0ca9c9c7fff62e8361b4212eaa64f197480e87a572560594952853794b2deb7eadaa6a3439b31c20eca251e74a896366c80db86937592e6eee5b98b44e3f7a6cbbe79d7544dd923d2fc8dc8b5f86680c539f1173b7b12fc0fcf03fe0d9a4c3aad0281aaa96d29cb8f929196cc6c010ba587bb13ca35f2d400000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011e6744e4b0da8b85833b46625beec47d2ff91a0b4d18d2a6f10c070dce0b71eb03241d7df287b2ba85d82738a0af84c1ed7a9c134d6f0f2df74ce1ee3ca2b285152568903b9fbad4bc374dc4fabb14c51261989c42ae7b572b1c8b6e3221954e85163e77bbd88c35f7783d914128836f5d76718143d258f003a2b116da6d51fbff0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f2e78b1351ea7f6b94e28bb9b6d6bfcf6425047e3ba1447c41b4fd8a0dfe3e3f2b22d3aba48a449eed12c2571134113748fd11e00e77a30438f4d1bd138e8429980bdd399584eb7938390807401e2c8d5dca6c91cc58e34afcb8d34f306a50c0c8794f621160b738e5e54f335b6d8c1751b9ad130d9376511d92ece293fc7d1f2c87f30333a8091458a5910fcec5ba7edb8a372ba6b66ab60e5deda8ba5a9530fd6f597ee650fa0bc0de4c9e42a6c1a2ddbc26ae72e298fabde83b111d3dcdf03b1ec2a2bdab190eb3adcb4e1930996c7f840a0d625f821873934752cee25297617ff0e443a12f43794e1828ab0f5900dc9cd334c0ff4129f858d34e0174f9e8db2ee36497d51ad7ed20d2a912ed34db4f48ccd4b2746707a63e71b7a725e7194030faf3f761ba87e49507c073b1323ec315c2e7a980d78c3ae582142f0870f4fabbe85b4ecb9c5d7b2419505af74bf51ec2c76686957624c3732feadf600f0c44d47f47697d128ce44f3974a83190fa0a63cbe5f824cd223ad3268dcca1c0de138cfce8afc413aa013c078146aada15f3fb4b8af5b28735a1f4675bfa89263d807af3397075184e489891f3ffc5ecbe38082c22244a6fdd985b8585ce162830000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300110598980661222c8e3737ef512720f9059e0be40720f8e3c40abf6b0fb5010f003254ad4d26f9235d68233368756ebae9450be76144c1847c222f63821ea748556047e540e1ffc1177a96c7b9367c104c3202f6e9a20760f8798867bfd9676e7cb04190c1f14893e19199362ca8c11d6fe155e0d2227ab1416ac5f7bb45fd76008000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7e830c460b73bb117c79abeed1ee2a87a6376251cdfa955a3c37a700546ce5e63bb308245d4c303c875a0c9153d33dda081bb0e12bd153f40ec3f6677f2444a69573ef9496ef01087cc02d296c314cdf63e37b66101f56cc1782b6d55caadff63ff3dbe83345c86d6a38a1eb0fb183b9c360d98b920f7bb729653f425c75d9f9dea148aa45f2816519fc231ed6c3718e57ace4875bc079697f767581d287e087e997bb154eebee4b94f3a555f4ac5dc3ea35265a65c7d9324ae3dda65a78b5dad8d1ffb29b946aa5467396c084cf039ecb542a5e0372fab3d61a655ddb505e3a8cd80a40a5cec86e474558bf30373a793c1554db58a5eb01cf97ae240a321c917831cf972a39da1ceb64bb08ac583d3cf5ac727c59426cfd89e9a475a1d81fcffaa562b35fe9e593bb27164ef4e2f7acb03a3cc71d0a1d7ff5103b40c0730608a2913886f78737e944d0139be9624e2e755d81406cfdac7a1150760a6230ae538e9aabf69f54f62341bf4089d4ab871c53b238fe7ef6022229abdf363dab868c6a90ff26e8211249ef5db69da62cb11ae477e35e2933bd019f02b544a1a6a6d6ad042d1bc81f5de427f2609f6a2218638e5e31c4c1b04445b5aec3fe391d2590000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011d758ee61eb28fe96e0a232914f19dcf8d2b202bb16a218b086cebfe1cf0e23c0326d7c5ead604bde1210ac86c30de13539231ff29c80ce174374b89b92356388903727e0c878ee122fb77db5edcd0ed01c12f037f1f4ce5190d4de4eb213b59c423886cf83f899c5c04e451c970f4b6e17703acd78bdce958c9c9d901c9842f330000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e4552e0a1066ca1439ffcc166277f833be5e7c0b4a1fc3559b6f6d4c933e6fe8bdb7605c860ef77a559e6eeb5cf0a3f31bc16e2640b2a62781f9ad930f1b25682f596056a942afe21e94d750f684d0322236bfc2ed77134864ae4c2e5e1b80cacf312b2f08bfef259446bf53685fe6bd1b4559f366421edfffdb3754a5bd9919fc9b936aca6537455ddde2a6ab29babcb5295a3d2f982c0d5e47dad5057b27c022d901bd3ea0688a3bf7f3ba87c15bb6d2cd2139db4c2295000ae798391b65f62e83fbfeba0216a5d563a5c4861632402eb27f6090d8dd657ea85ee68df28434b46e3c1b0f28b2600c1b5cf0cffd537982bd98e61af8a02e38ee15e39e7ed2e664e89d780fec72cbd0af42466b06caa2574b7756d4bb7c0b92607178c94fac72516b0f5c3f4bb4bff0559ed48b205658a4aba6464e5030bb5f418fa88e762f391389a4e2860656ec082d1b62e81fdb19a93d34de07e122835ccca14d35eaa723a08c678ffa458864d9a924520266a8b76bb3a1573b043faeda152692576354678061c4b07c26cf56f5dd601cf06fb39f88cdd5a9720782a6f2d9d17bce6c9c47976ec0e93148f1577e85ab48b30de6aa77b3fa9a0783107021dbb9826564b590000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001009a434b8b2c9d49cba2916a96df39c3a1c07eeda1292e06828bdfc8fa54f7e303274a2b12b14a4d5e461c3cf98aebb5f0cc107b62f99015c6df8b54f1726796a91678d958111dd5cd1edcf36fbc662f8debb6337961e9b82b97ed19f7238d190e23de5a94e169878229fc9d933bd87a18ad9e2212ae337e52a97d9e1c20b73bd1000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ada9abad09fb7ab33fdb01f6d6fd66ff570c2cff306e2ccc7fa375204eedb2e67338633055968f362e1fe96645e1e4571a1fc0ee5bc3e2aa71242dc40c1bda7a7c35746b4a0a1eb47181e2d59c1ef43180917c0f7818eae12c6ddd9cd22e9fed384d6c0effbb6519aa9ab203326a92856cabdc41a100a711bb6756a26b144f703be384f96cbcfbd798264394dbb742eef3a755885c34cc6bcee363d6b20acf81d3544d1881906538eabd231ca58afc4e7fd6ad50d964f63ec106ef48cbaf668af6045c190d7300b58d832994ed02bf136d011dca532c2d8fb1dfedd693202a775d133ff19b24c382b3416c475f5bf63f80186194bef48ea4590ca0aea271a795c20311e66061bab9cb43404bdc8d24ee1ef5f3165cd35493eb1ad57ccefd59a350fed9be6c4999f3f6967b5f0fa8cf7926d0c543d6d3ce4d855a8b9d7fd64e88e4c82e75f59179258c1879c4f3f8594ee4580d7cc192e556bcb0062a80dcfc65cb349af1d3c12fe395bf2e9a0a31fda075db35665216684516756eea53b2151a94b2b1b23604fdd7f1da1bf3acf2fe6d085879a7b421c658135ec062baac02ae3d334bc1db5aa370b582e245b069bb7e00e391e0253df83516226f97cae9aa8e0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011574ff36f0cb271fc8aba2035123568e2f2d7ea848cf336f9261aa610c2471a60327ecce4eedc46b3558b882f9c16537231db73f8559c6f73004578d0c4317bc812d0bb554cc485dc26013764858832a6d35063f940f9760c3cb311b971248e2700d68fcbf0da250c6aad81a3fed34072e6d3fc458d69ad921eef2eb4c009e540d0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c3d311ce4d0824e954f9ca1378a14460f0feafe97d571a99fe646ce8edd330e409d3153135e8efd49fb896bb5c32c2d91691a14b84ddfe7998aa23c2ebd8e2fdbd3d0806f7ef4ddfd458b3932d1e584a5f0b377b091ab343daa9de8841e690b6139f735f06695998f7e0ce5b64f488c6ae59d4ffb9ea02bbf60e752581e4eee26d966e2a13585af1747ed03ae287121d5aca509057b9c3047dac0353dba3bb35ffcd80fc8c5177a9c2c1b24bf171061f59f8a614ab9cc95e3b64d11a23266ea88776e5a7e25712a7d44d10e0f527efd49dd17877bdd7e21b50dfb0ce4ffcd5a7433ab2f543ac1f61aca2fd55af503b6b9c272185e85cc8f73f482cde231b7617a0a97abd920fa285ae9414b6d0fae8c9889c812b99bce47157ccfd02957c46c49c1fcc64f1835f703c5ec2bca3e2ad916df277254729fff562fdc2f2c9e7e5b1551220578502e88eabbba47f1ed52f61a04eaaa66a07a390e10bfcc6103cb809bbb2df0677c4ffa3f88685985496a15d656bf57dbc9414aeda064f17b3bb7080446e8a5352ff0001eead9c5e365080845972632b500bf9bd371e3cdd6ffc51e0fe15435f932d61e9c50cfb683e8961e6d3b3e40f62e88408cc575a8e50d50c10000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011a4fa7faab3b243f9e750beaf0b8dc469a1f993635fac9641d4be38c97d27aec0329ebe30e961235905eb362878a2748f7a51d648ec3db791c504e0fde132aeb311ccfbb6072ca2ab529138cfdb5c14cb3e11c742d1243cafb731fe5feb43dc4d20f23e2681cb08b733d684dbfd0c0ec6ac24b60bcdcb20e44c06757d3f09284b20000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cc27067987732495811b40e1dd07a1987f32cfae3e43f27017eaa6d6ed831106a70a8632933b68dfce571fa0e50e34a4e2a07584f503790cb5aab213279c9322069847e5628856a6e1ef158d9e118a46952c9ec57e3a6c77089029bd29716433e7a77ee190c4af722642a37657303833667cf209fd138cae96587f104e8748eb96d2932635744b06d3241045029d65d5461b885a314b623a4606f7cda163fe46fe36a26f39bedd8cc6e787f2ab8520b6e3c2cd3d28d657f70bfea32817d0242c72f38a002d60cdf4b602d896893c16b7871046bbba9ef202c708942b8ee85000b4b69274066e6ac96e8d96bbb93fe86102dfe30107885d380a83fbab8074dfc2e88ef8883b8c88514e3ded5c8e54b8b3d5def2ef3354ed0956c87658e48dce64e2c380b70cbb683036a11bf82f9801b509725789690ac3e92d74c7fe6e2466f355afbba9cad5a5223c001eb0a80ffbfec13f113b876dd716961a950e3e90256e8f2c2810e2dfab37c3542655c860e5de3330e9215a6106b88d104106da0f1e4b31eacaf776dfcf44efe6cd36c32f4d4f85387d5c875747a6e8d6986536a7b3e1653bcee7fe01e5299fc9d4accf64e27f4452979004a41d67d041cd77fafbe670000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011e1d1c2be592d8330456ab609cf3f4b84e3284620b5a05869fdf595e3bc524b7032b7ab782d974f0b55896ab965e2791dc7e6fa98a338c57f3d0fa3c801ccb236809184ce5ad2796aa324956631ed44e424b63c4930805ce52c0a887dc59d208c71017d68ffca37532356ed3d68a61fc8e0057ccbfe6892de02d472e8aa7fef0880000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008fd74a86da050eb11a57e859d0db9ffe0c7dc357202e5935da49b0a01fb1dd35313435decd0490a39cc2f699f688362d029cdcc9590216a82275a2a88d4f2430c17fe4d99f540cf5e6ceda05c552ff217e4db265c1998cb01780a6d7c87342c49b655aca73846c0bea043b0c9d6cc896e68a8488ea10c71a1ad3182decd03d31a89a947685cbb89273c0b8ee518b5657c9801ab956d252281739471ab813b06c834b3a8e820e9387616818e90ffbd48697500ba2400c003fc14578220691ae25ecca56e59adf1ed5a17bd10ea9207e1eb542e8b25aeefd50f6169063af92e703160c2916bf53cba3b8091b5a6033744b88e9aedb0c9283cde9d902b0b9fa0774bbdef9296806a31abc4cf23b1532303f9b5a7dfaa2b629a66fcac6ef47a2b73841f3a2247554240851a80add7e001875da945c23b77e115111e488e389e7c1acaa8215a3635ca89d335acba27c8366450724da333ad0ea556879d713efaeb270d846d40596d3a212c48c07dd41ff1c48e067dd73120ba8b1e95518ca791400d7c426aa2098226dbcf4a4dedf88a150bbe4e386a614c93fa595e45f6c35242cd45ee1f26d243c9728d29bc1aa86c23fe83ee87349ba9a011fbefe6d1a352c7da10000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300109ebbbb0dd13415cf45f2d81bfa503e1dd76f70f0956f34eab6cd2e98741ed13032c7fc24cb5fb9aeb0afe341a6439bcee13e7e2a1b6fcf094b6bf461f6620c78102f9183ac5d9c49c854f0997059c0d1b77b86c90457bbc42470bf4cf2332906a1b752abd701da0e694e13a9b16323725d397c259f2ed938307eeda1af44719180000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bd4fe1c3222a219b10b84c6456f2fdff2dd7db1bd7d183e3ac4a0e0e1bb8dc4dda2f3074dcc6b24d0a3c48174f6e5b82ea1463cc4863a416ee8e52b288cd1b02d06074565291eb9f3f7da408680de8c871e07ea055745dde4423f531cf7fe2eea59d4822b2d2aeddd786c1206e7d4421cd10a3712279610525f8116305298806fb5595769a9f6efc7cd1997f1db5c9ae2dc22c492df497112541c57787fe5c132c6a23627f8529cf5735663bed61b0de11e648d61c4941b3e0c9e3b1789f3a26a288fbb4d02e79b3168c7dbebad51e0a2c9a32683daebe4d165d520cbae95ec315785514ef329a0e5bc1dfb93abe8325cbc70726762e6db3b436bcd86dfda48af8989dea295c5888eefdf9eca483e12317a7bb304f91b6a8a41081e8f46c4d69e45f08f24c6d321a8c0f2fb33432995e20457abe70fdf765ce7af43d1d8503e3b9348a015f85c135eb8b25f3a26c0ddfba3295878f835a6bc3661f12cf1c445a85d9087790e0ad7c1fc128af84053d893f0eb40a20b9b0a6297fef0f27fd95bb4561eb2beffc86b594527837a6b7058bed7e29d84706866e3fe1521dc9d9d43fe82bda922c49171376c304d03f173869a18ada2250897855731737f687e205d0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300126a6cf0926ca50fd083f5373b5234f80df97cef622d7a3a63c827388cfdc1e25032e7d62c0b3d2d08fe332ed0900beeef3e5ee636790d961874f2b51df2f990c900514bcdbb26afb13289005bbb5a0d693829b1c8fdba35ff31c9087e5f02a5676136994a5e4b372c8f9507c831a64757fae0146062d7b01961c8bd0dd51b67a220000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008aa0567ee943d43258160fe1cecba5bff2071dfa7a5ffe76f3be5766cb2944e6cbd4bad67038bc488232f17f7408a7b2739e090bdefa7e6c891d9ec915e1f0afd9bbdc31b3bce8de9376633e761d02643ff12f9e41d8089524025956fd989f643d5e8aa5587872a89bedf48df030c7848c92224d4c16564d0c6e20d0681d77fe19d097d361b603675a3972be6bf8caba1196760c109170f0b23c7edf9db7030ce0fbdd99bd466f52239fe67e2e8c1ac3daf02f2ba9dc004239d7f822951b3415cf0b6e3ab93f4c6265512e51091f11fa82ec9fc223716ad91b8bb276fabde36f12c6546e2942d14df067f7b03a2a9279e399e7447797381778d1e2fd6f1b1ab289c71976e1b8d14603c64aa0a17b52205d5773ee61fbbb8065fcf55796cb13760ec99dbc2f0467db1d9a69fec9cce01be39e8af0c974a2cd658c5e4ac0fc2e36897391f388918d935ef0256abf6ad2bb4fff0f9e4b15804c528f0f5daba14d9aa036a21d9ea6f36bfe52587a0bb1d9f6e860ea4c0b7fac394fe398ab1c1b7c74ecd5edd918bf5d3afb0d80c89cec5d58326488ac9748cb62ee6ab4a4d58c8e41aae7971bd0705d79b9690262de222aa2b2be23627c543c2949d889af0e8de43a0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012d7b500eb9435e626755844a8a27ef65f3db9e786c7f729bd1da99d3744050b0032f7d7ace3ad0928e9cdec9eec2d73e3b10d8882b44c4f6429ddb440e685a468221e686db478e84c58767ef1594e60003de2c867902b314e987707e0852c65c5d1a58751e41c94e83e49360cbe34d597e2171a52c5c7ec389d0756987195af3fb0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dd5d8b6601d5241110d44031110630cdce4e91df2541bb2bf7feafa50fac9b4db93626b2fcf7fc546056d912712d3816fa6fcdeed2f8f57a467c6c771571da7d1dc008e2bf7d342d35e6a4ee887e4cf447fa308113b4967d629fd498e70ed823424bedd2a313f8c30efaf4a6c4127492728bd8ae2c21befdc27cb47539f127f0c5611c771ea0753a8e23b9265746e091e6c5b5190464bf010cf6a31db3e781bf1cfd12b8a2bdfec9807589531e8472a530ff4a76d07391c16ff58ec98f5d76b2b4cc6e1f19cf0290d2a99c75975758002ccb260f8a825a92574f739c4aeb9f50478137d7eda57dc9776127747060fe47177a08203a9ab00cd7eee8a86b9297a10c68a13bca5923acd6b3b5d37048b94f74760fcdd47ef205ad47856c4714dffbf9cdd399daaf1fe0edbd753428a980aeba689b508d775751d4e7dfe53e791ac5821ab7c2f5633b92b89f0923541438e7707683003f898527bd36fbce06230ecef5ab219cae7e7b981556d71fe593fc745d70af547d51608fb21c5560dd0e72adf3cee1c2139e5abdfd3c872056fdddd55b3b29de187ba17c8abedc435ef29002d266e58a43ea96142a96549a0525096245f269760a831852d110f0bac6d02ce00000004000000000000000400000000", + "2ea066fa1d6c3532ce5e957313125db8aa706b696d99fc4ca2487b1d2fbd88f300000008000000000000000000000000000000000000000000000000000000000000002400411982ffc7302fe7f66e46a999228f91a3479fa5449f72db446953267338ef00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb300000080185860460227c2fd88b2c9b52e5019dee1ddfb12bdf497766562fd2322a1b152000015001b70161e08b014c925ea4b88fd997100a7adcd9f8a835f5cc1e11cd56ab99408000015802bb7f2372436ecbb2ebd34734a7fbce7e41962fc16f42b0c006b3b074082abe0000015800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000070dbd9d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad2ec2c02c5c5610692f32c3c9e2b7bcca8b8a5b333ab4f6c5972e340a29d75b1eba7708000000080000002400000000000000000000000000000000000000000000000000000000000bebf730012efb9b60392221d8cf0dae393daf118de4a9f5ea41274d249e673a31825758ab030009e9f0cac761bd6b5e8880125d55e261e1c1454e57337d9257e82fed9764e3094bd5a861f41e75e177074214eba7533a3cdcb0939b328b3756aad3eb1432a80f6a3319fd84cdbef87bbe6cddd5be398489131e9e5f8519e8d4b0ac681a79b6000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093ee6e37c86ad493c2fb69f23a5c2a59ff9a97fa5c3b0ead82479870dbd2f03f8cf3c60b8d69f81a9123bcb153d88305f2b18fb214cfa101214463cc94f23802a715b42917aabf38f118b9c8d49e49a2f01c34d0ab5c4c37d609395539cfbba6c1c291b99a5aa4a957bf43b327939e8af13710ddc00a2e525e5824ac8b76367fd389f1fd13c42c6f14a08d7099ce6162d98f540b0c738ad3fa5031cff93f1a44a93724dfcbe6390ce766ef066bc6648df315517bfa1f49c1d4f88e242795eee769ef75dd4f738a50f8333a5519fe2b2e3b0f202eecb8bf56bea1c3cdce6d2d138a5249ccea2ce93e2e2a7889a3a9cee4dd5145e57a882406a9c1e158b7e1db3e50b0c9cd39cd54dc035677dad802a3dafd3d8295eda37977f1734fe0a17f190430d520640c2d00b4178d0e6b9b4c69c8ae02e35c695434b8ec8a8b812b30a06f5ceda29e131aa891e02c48afef8c47ed30b131a4afebbda5a491ce2dbd0880d748cf7b0e49eb143891b60b5259bff12c56c9e5ede03f4206057151fd6318b5a1474cffa5585cf48435ee77e2ef0c59f848a5f729ff078389a0febd0d5ff6dabb955143186965d9a747f0d1ec191ad9bde032bdfa9a4e8cf61bec128848cfa4b0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300113781b01a0e61ad1b42fcf7735a140d697270ef15c60fa5d1e4f0b7e971545320302cc1d76c4f920155fa471264292ba0c2018b9b0672de6038739753e021c626627c2ed2faa0d9b27119b45bd52f42e66b3d817874450406bcf4ca77de54eb0341b7eecc1a0b65dbfc2bf759b81f0cec42cd779f73db2a382059b39d9461784bc000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000922ecdbe636215987977f997dde1325a5c04a44e9453f630dcdbb25fa874b21d7d7e445ab066955438a90d15cc7a24b19a81871c02a19d823fc815192728fc755c540b47dde754e448f51022ff4a8b66e3a7a1e83783b703240652158e29deb58ab65c5bfbe534b49f42b905cc0c13534025eadf47dce98cb916944a00424e27850460753ca8b664bfc723543d4410b9aaa215df8b8088e11f07f9f7c9cbdc222beb3c7790a7a127438021cb3f48bf6097c88d96a31583b7d7cee1ef3dbc4b1919f3eee24c73437260d1acc266652608b7f3339f38876b081756faf0bb18a96aa4cf3a5f2eee8c78f5d4b4e3694c58a1f8ab524333251eaa3aa8e63a60cd303c0dc32038c624ecdc709f0b67ce71b407da19f50dacbf165a901f947dd851c693636cbfed0390710c341db771e26628e2ff3a14e40b11fe4cfff9e092437f98bacb89e68c8dae45f9ce76d4f262618fd693e2c72e524f8812928cc7ae64f83d2a0dbcb08b9f3d911d09edfcb22e3fe576d930f072b37808f810bc0556bff5aa7f48e23ab7eba1259737d72338852cdc52051df37b7ae68b9c55871b54b0d064548972c50ba9995da81d7bd7ea7334db01d082dbfeb422c8a37d4aff1aa8c1e58d0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300100826485460aed34589b8a8e35e2aa79ce307c0b5fe3ea0d4cafe955330370760302cec398d4116e4bb1b8cc63fb49ad26ea84c33a6bc84efe53d61d70c0fe34581481b77dbd08bd2c66949dc492c88ee16e6087d05a41fb6bd98cc7535ae81f302f4e37eca9fd23af53bc3659e045d6a0fe7f46eae9ccb7aef52b6a4e989f79bb00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016be769f0454fe7f0815c6cd4be7c706de368e0f8736cb83391b7af0df424c23f56380e28b005a251ecc9e38cb25a6f6fb0f49599057b917de53fc318b5ada8026ada56c5f31d8be79f26b2947915309b9c4bdce5e0d03cf6f2800d1c9c9dd9976d1b5951edc4ab40fe9e1705c9cf5f3adc6a27e86169e5b550651f3f321db96e7583bad3ef95833ea4f3b198d1dbf0082312e41442d08bb24827f2d9b594a72f2e5812a2c2c27ade1f8847e418dc39034769eb8b38e4643bd607bf5a60856b7ed76fd6bdd2b83b8c7c4425e0b1d5b78711812c22f8f2ff7d8f7bdbb1e7f78e8834b8bdf5411c05429f547a2773dc03040d759039e60306377822684e5ad7f8b4e7268d8ecf2bf3ebd25f8fd60464ff2913a9b8796c79740dadfe364faf68adf0adc52765978ca27f6e97ca05ef84abe4148ac3aba4db8fd35dee2ae8183b0320fcf24425e633108171c3591b748c9ac6578cb5320233396113df63ecf4cd836d90e5bf4716e163dc4bf2f3864a0e2cc67a82c159f3439e4a7f325d2f2d035d8ee41a5970d15db8d7c388086aa7bfa755609140784f5aaaecb3c6ca34b790fd7c105ba0cb6b59c34fdee4ecbc97a0eddb17104c1dd2a038a73e902baffe4859a0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001070a4268cf6125f24ebb0c5db0249fb5118d67b1db58570ad7088e1c5160bc4b0302def5a1144d3097062af2c7858a37ae64db06211502f3f68a00218fe741d181248ec3d53d3eb0a35ca66e4cf6a28a408226541b6129b57d4b51ec2318fbdbe2121bcfdd4c1b7c66b2eae57113993b9fb8ee0dfca6ba7b81bac355d066ccd026000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aef9ea3ff70522126da25bd0f5edad113f44107433a08b90e6ce6d1353b6e3a993fd1b27797358482c8489558362a757cf42f245253d7cec761171b74fbc428f3bf3f1659ef97fb2f3be6a5f2e25f77bdc80b1c3e9ab54215ed828d0609481dce1eb31378ea6c25f6f02074936f4fc046045b04bfcf9c49d1313ef300e30c5f32b427b43d6dd72d6f658a1a72316e4b7d4f32f89bff680ef9dd8399c86f383c07b7bb87d1431030ab962f822449d3b1e1867e491d0ad6064be06e31db739f5c499ba44c02f311be656fde9facc12b39fbc78f42fe97b46dee1ee17f8c7ca7a3d1b3a832f6ae6e5ed76bbc14df259f5d02ae4c92c680676de1da652b0fd2a5afea61c526ec6e6f168871f76a57e8580f8c490e14488a98606a487e6db2a60a54fca6bacee7e0c25eea1bbd1725c2453a5c3083a1aabe2216fdb3d57db1c2e4cfefaaa8a4247c3641b57cf049cd158898c270434d0ddfda8f2fba6963399453d5d8459be976f28f50c1c422d9a38a4518fc8ef661c51afcf502ea61e722943be3bc4c295a93574cca54b8ecd576981f4e9445cf4de5dd3519eff7452d407a968b4066f803a96289612f9c1b5e1fe4961027873e7331587a9698a461b8b9296b0a70000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011f61914695a95bb1b4c5bc26e0d4949e9262f2fc41caf3055b3c0cd5de6885200304d786e67cdbbe778b49fe6dce9e07b22a7f26c63f43af4459b897a847e756bd0fc60434cc1dc69a58eff13556af024e9b0c40c3dc58ba77486617f01c3562442c315e8cf471c77da6115af50efa9dc6c165e5460aa8662137463b93cc7b8e05000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2310825a3c86cf66e230cc585dd046e44071cab57175e4590b1a43f68965e4e03afea0335dcf0e23b1769d5bb49baaef661b27e7487028df7849ab0ba4ef81c943a0091fbec2d5f9cce140aa2c93fa07c3b3b58ca757c621cc78352806795a8bb58f29046c60701b863a6ec786c1d9030b8ccc7e56d0a926635b1cd6c186529bf95276bf475c5deccb32878389592f4d4618749d20d22c993d5cdafabdfd78c3ee6ffae166717b06bd5e5cf8123e85a2feb01573e2a8f4409821b8a10b074e57d57a89a385cd02278e53a180ead886e8181f23a8401342aefa0e22ab2714a602b4000c6714baf63f1ecdd18e9284b7101101041d6d401bc19821587298224ca4b152f34a219e4f8383877aef343978ea5b1c7b74ae3062237027da01f10d57ef003f228cfee7421f580ce6c089da393b5f3abfafd3060339fd6347eb0ec6e2f4365cfd08d441991b846a73c5488a11826f32f6bde16db1f52364b6c5456a48ea4054cf00b8ea1a95dc25573ec657dc522679c88f238b413214519a2b62d8677edc53db574e69ff4e118097d7b9658c9205d11a2165bf6f7b03b63e2628418a103b07b95ee52fa5b6aa0e56cac6d2af5b02f792eb3a7fd4294c251294b46f76d0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001145aaf71563c9f9dadb9cc2921fa7b144c40a43d1b5ff1812cd9607ba3c9a38f03058b1bec487f8393b4164cf94fcd572e15876002c57fb169e719023d5ffba2a70ee98d243c8dcb052553b2ddc28aadfcc06825cbd3c0064e3c09948f4d4d78ae199daa080cb5974b75798f8a7673ff484c0f1191e7874d66ffdfdcb29354d9050000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b209a41d2ab8af6d7e2dc3747f2229e5b1b58e82f529e023681cd00f084c7f92d154ec0e328ee86e90ca1d2e5a7a5d6cb387e0a6bf4022b1f7ab3d5d3dcb748e6fb22821cb1bfb375f118ecf4884231905f023de75ee1aa11e134eb129304834281d03be7ba58d4b062ff483aaa39a650fd3805ac49ab9fc9c70f6a7bb4be63bcf382f84effda6c3097d79fa498f9f33965019ca396c584847c3a739b5556c81e4a3f854516e7dea0cf3a3aca88353e408e5596b6189672839dad098a640dd16668e1a47f580f6badfff7160fab011c92bb1a23bb0b0d81c44d905136e4f8acef62955e1cf3da9914036a818068255eb02fce98d29d592a80e4d85b5a6c59f5fc9cba7e57793a11361265d7656f32397f028a1ca9560de93b933e62818d69fa385d0d5b8ee7851d11c64e8b58cc25465aa23b959e07910badadab77e7f26d98e9e6dba41de789c5782a0a4709b33cbcb0fda78b149b40f02a1d5d688ea0a27703fbe76238504a2995b7c612eb759b673b4efb15cd332022d8985ec5907da942530a74cfbea3a163c1d5afc9d23d65959c69c2abe3f635a167a8bb6954b861b130bdf20aa7ab60a6ef5bd8085373349e59eb2ab74ebb795c0dc9905d414f90e50000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001121319ca9707d3bb5c169ff232a80ec6dc70e4876899b2178c60eb8abe8054f80306099d0c5fa885c358667c23683aeb3a155fb28c22b75601c56cb4d56697ee8e299612fa3b3931e17158f089510015bc9a08be78f86d966872ff1f61d4ae5a300831fe490a1e747c7052a37e15357766e1fa195ea8ebadb40c6063c0614700d4000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aae2905e4904f7ad991193ca189b0e15ba5fb393c8540e4e06f633c9a096eec9bdac7e5dbf0825c23e063b84d219b281c53a7afc500fcacd988d7b6da6022f65bd2f577401b11978d64c013a49fe604190e7074d54a1533099ffc15b092697b73f953cd688e63f6b521aeee0bdef1801dbb7fc7ea28ac5b59ced9141ef31deaee4240757883164351a13716358256c572566a4791111caf3d11cd58188f2d15e797353e9670d68106ea278e073ed412212fcb84a60d29c495bfa5941199cd8989b9c2f41e98a2ec4f4e0ced3ecdda24648f44092eecf9fb8a7da1d6816f23ba2041ff7039838e1abf8768b1fe844e5d61eef527bc80129dba89d6c9d9f3e4a44cf6f7e17f22133d156a7241c6383c7dd35908ff7bf50a001ada9c47dbc6268d90dd4ca0b1accb2db763148c7b8fffadb138f91af47fd343533a64a511760e91c55a125e82711afef986e3db307fb3051e7b1dccad5afe3597159ebb67720c09b11f7565fbcfea1fc63bd670cd418bba65890a32493963b6014c3f6b8c9e3084beef292e75ff57bdf5ae9c607c2aa8834f8f745f498d62e59d6aa3a6124e92be3377102a70e7f6b4bb1eda94012b721b0cecc4804a64685dbfcf8dcd42bba91040000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012b6d1c42ef13bc58accf459dad60cb33bd3bdf5981bb155f1073fcaf304a5ba70306b5b7163fa1600e972eb883230636e93509c6b42a1c8d91822a7fe4577e68d90c5d5ab8855eb4af19632eb99a563670a16545aa27e76dcc27799d0032859b7907d0dfc09d4f9772a3a2d8eaa8e14b0e491504b5a031bfad0a86a1fc32d4047000000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ee8fbebb5a6aef0b7f08b12b04a85bd29bc5b3c0bb0aaa947bc478add091d5f670f054284815e40d41e7773d448904d795379948f242bf332453668d96f5b9c22a5d5ac46317bb22caedeb02ffe91708389cf89eaa1f2e19774982401ceca227230a3cf48d946ec214c32cdcba4520d3825c7f3f1dbb2e882cadac572c3db2fcf3cb0500fe7f7134ebe4b1f5e0ecb08488b2b5566c0266de5401004fc5435c6f016628256559945624b3c2204975bc5aadabe7d630b81922cb892dd474b25a91d9dc2bb0d75df1bd00f60de46d0ee6a04dfcfd8c9ac4a2379307db801e856f6027a27eaf2c1e78ae4076ad9eab7a1ac9299aa155a29f3486bd5137f0a8ca54821d109ae15864c015157ee0b9d0b5f14479e772b5f6a34661c8545bb496613765e934aff21949d62ce326a424880035e242cb8e2762a009d78cd066231a6dad950a18ec4f57adaf2ec352ac716e5da6682a0c0d3ef4ba59accb53624c37c787d4d06db2d4494622adc262fbfa09259acee9a8f9ad65de976c77870a3ce006b3841a93fe61996aa63fd6ab550b1af8f598000bda7a40190eb227664aaba09692851c594e2bf0ce95804bd991ddc41356d0ae960cc4de28e2ef1b1f976d3086170000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300126e348d50b6d178dcf5bfb60f156a05e11842d1efeb778161539e3be1723bb260306f6849e3872d89e9d5abe82cf168ee7e4ce35def0d23d5f2fe739f08c74b5b51f771efdb3fb0a04a508cf1f323b4a168edd985af7b83a1107e87385a85aac9c17698d8c602484ce54eb7f61f51ee33b7f0a2e1ca3739848a64a1985f45711a400000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004c35e35b86a7f674a627b23cd57d9aec397d62c9426ee1ec8fc729a3febe6cd751cb9c44f02f7d2d92f10679d038e12bc23c19a24c1eca4244f9ed363aee5361e0e0aa942035bf2e322dadc7e51a471c97ef6cea06e84165e3cd369770511774aa1a431c4fec63defdbb6715450418e4e5a5f4a2a82540fc0c338c72c20ace62ec73441ba3b071edd6b8cb29f517377dfb6b0c4b120172de86e5073c8abd98af068f7ae67dc4cebe32b5e24a4d134f270ebc3c67b0be81de3fb17d7fa56c9c045cb189f9fa4e2c2d1d51b3c7cda67a45710e4bcc056cd578a5159e3d707ff324a3fc7ea3d97337e5e5163ef373aff37634531ea3ceec6c4d88874ace804e84b71f9d00d7b653b61370a1d3f492d509f457456f315971573f80bee0d1b65e31a681cba7a9806e2c6a09a1567264a4a99f82f19fca9a2761bdae5ff681db44fa410dcb5397bc971388e8ba85071f3f1a8e34b10c4fcddee0fce490b431e50434afa4ed8212e28fde326b23b041af2b568ca54c4345d1bcffc731e3ee13b87af238ee8f55b4a3cc898a6b35b8c0becae74948291279f39450b14ff8404a7e38f3826bae3a58a57a53c2996f83bab11197bffa15055841e7d8d208c7ba82e444b610000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010f8ec61a3b5388bdde248bd30a2791e4d42634fdd5b6349164347a76b299a10a03088e4177375076972ce1cd98cc37afdedf2195d4bfeefc2be7abe8959913624b043d7158debce9118bbecf662d789c5eefed6718434d6ffe2a1d1aa400d7a9641a814eab0f7ad13edccdd8a5225207017849e1663397b0a8488bcdd7c18de828000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099e6b79225b2aec31e8ff2d7daec4fc3565515aeae11a850732abed4cf56671504dc59f4962030731d3fb761fe6c6f7b4419fd7e573e797b99dbcaa1ce7bae07c62429d5373e327ed39c07797b630688fd9cc06a0427cde0dcb591b6122d8c965e3e7b2db3e41868ffa5020e9707e7b08a2edfa8e2083fdc88588195d0dde3abe97aa8634c93e9b821c8f80fac30c940c8a8d9ab1e65a08481983efbb053ecb06086b9952ec3cd6886a269a47d4637c84d4654880b8258afbbc06c23e213b6a50893d80987f260f4fcfc57a17885d80f2201d23e284ea2d2a778f610119c8c831e4f52af7c292faaaa498b328872a0c81e7532e509e04a233076afcdfaf172c5aa3ced47de3312a8c1031d57ccd3528e75adf494e3b97924b26db80e23f53c7c8b0816e2dafa24c4e82163e43492fea02d50cfd4a2c2992260a3f761f3da26cb54c16f4ed7983a0f95335e881d969958060eb60b9340abda7a7063bcef5f983bfe49703209f2b3edfe493987793d6365acba215c82e458d91bb0eff8c627a7100ef45477dec4f44b281f9a7f701629bc905ce4fa216ccf99ec11644aaac470bc735668374ffc5e215beff79f0d812ab1a4cedd123003d6c431b71ec9a6836630000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010c0d87ebe50b7a731cc802f7c33f92b9b38fb6318cd21cea551d88bfa91ad61c0309acf7b713febffd0d221bb0e2a305c7f2764d71992a5d689b2efcbd954b17cd171f1113005910c95de4b01a57eb3d6e90f74eb02a51273f4d02c3c6d3cbe4e71f86da2b6586e8abf9655a1cd0c47225d0def21b07534c63a3b5472d5fb69d0000000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006fc9b56e016423f13684d8837c96ffef6c507da9edaf54dffdd4e1dbd73ccce59941205d2d4c731399af1a0387e62c96796dfa860aee9f585222f2a824bcecb6f6b54ded222896f449e476bb657f3cba40837f8c90cc07e8abd75c045f30fd431cd4ad655de86f4b6572f95ea6ec868354d985185f62886db24a270053ac818ad76b8b3fac672f52d9c12c8c831ae717b6bea476adace0c6182da4f022766d2c13070817e17b7d4eae7c12aa7007580888727f334a803eb346ba278a0dcd6261cf8759eaaa641e0ed8cf6e802309adf007199af0a699f33b44cb004ac8f7c7464a55b513d9be3e868214c0704d4a5668ef619b99cdc9e1b449ba73a26cf22b7711305078ee801773e2715989a12f710962b94e8201b769258f643376af2a7df24e46c802da25e4c6650d36f7a943a1511bf9b3f03ce303c907652671ca13e8cdb8b67410a267c8cad30d67a7733f25ca125eb63b9392707226e748138dea613493ae329e7f02dd032afc429e194f9234bcd2169e84196b316ea0bdbb8195cd6807bd8ac201e62f50590745902ab5173d573d79335d30d3e96fdf27a9eb27814f273833bde7fc903708e8d829e1d8e39e2ae9724771c3ec97df72e61988d7e890000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010987a9bd2758fe027a6fc3d3444e2f0e0de216111b4eb040c9843ce653b6d7670309f8f6b2a1e15a967fc5734a8c9beb387f681514984afb25385af52e5f661ce827411b9e6aed898c749bdf8b24a60a384361c28def101b60e06017464bb9b5f510bc21cb6b7ba7e0a737c28681ad049cc4e5da04d0c1490d1ba6ca8d5855f928000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9dc30bc91f240f16f5e1a0ff8f198eb0ea067221f10a8fc89793138512d874c08cb23829a39429868767d8eac6b37ae591e3c1b63c997cbe189128cfa67a7465aabfa6f363a713023b65c341e73f968ac3eba38165bc41efc2e015efba6af2a7871b447a3a94c7d2fa52a4678d12a80edee02e1750ff5da3e2b737efe3705a7e35f2bd9b007fb0c1f55474ed7af1a75fbd59c399fe9fb137968cac1acfa2756d4cb9972655a6e33d00af4d16016fc075d360d2112b18b8626464cb610c516dfadc12a9d93db1e7a2ea6887e947b234920c0f79032d23b760089e67cf4162831e03367361976f60a9b3bbb7b7fd652d5a5ab1652aaaca51380ab258b1f4c7ead48906de9aeda04b2e1d73aed02e65b9be83aaade2a7f426a37f7eab1f4f651f96f4f248d02f6b2973199027ad6ebf8e6ee1f128fb181515c6b7eadca93defb340dbfa7954d69574e66682f40f5553692aa1ee5e9624ea9e50ac81a7a4d8ee93a0ca2366766a50a20e0d08d447ce43579789ba9d73e0920d7b0e03c5e1a439f15be53863d876c9d6cb0f9ccc0a9bc3560361e1e423a42a8753cd618a3badc6b65119c77c76f28c923a94b6e805ac69adb5e7884443c1b3dfdc2931539405d89c70000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300106da23aa082499d73a58966e972e6e716f2080be0e1fbb87d8b67187e8699098030c5a891ebed6a1bac80ad02c7569af94f5705e591b594a4f92544c102d7180fe23641fad87a57ca6ee49a5cf5fa24f8cbe514fbcee74ee9060ab187d8673b536130233d3fda46bab47ecdc22a4ab07ee52294eb997e10651bd91279fbe972d010000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cdb55fffdf276ddbfab800c1529bdef561eacd7b85e4426752d18d4669b0975484f016b6302453d4ef33decdec5d324ac16e81755f9bf0fe4029aa0c343ef569948be53f948b5c381fc7c740ae3c06bba9ec5487ff040b0dc906aeb5260ddf2b515e6563f64ae75f3288d9ec1a7b05a7e087fb2948b7547ceff7b754113bfe2496e61db8c80910ce45c328da1203049902ca99ad5b7c58f226cb92ced0dd30979b18663282785c4dd0cb215a5af106d7fc0311c2ecca00689f77d5ee001c820db6f8a6dc5e9f13bcc7fae0db59db6729e29bdff8bc1ed07e495906bb1c67979910919d3f04601fc3dccca5cfd52ef406a172b76ba1502dd4a406b2332a293ed88cb121872e4f15dd0e4491eba2ace126fc465a0345b963dbe60c9ccb78fc24d72791051b670cea7d444ed3ca26cbb9f80aed53a158b2b58a9be32ab68d25ebf8b8a62e2ab75d87b1d6e760180a6a7029f360a7ac75e90c936ae10c6d9a1d9f6b8f418e344e180a4f8cba73c053b77677feca15429542000f1ddca05e0029822613026b3e3cdc50857167b28152f97b440b1a5673ee6e7ee7ff14e78cf6e5bda864dd1d9043975d2aff17790a791ba6e3f42cab3915c2004b8162a08bc8d6fbf0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300117456186c796256c7eb78c814fb2fc7d221742835220ca2afbd54460482e0fd0030cbf02b66f52b632b3b950a72ef64ad793d408b32056ee00630b6d525413107a24b1c98e7394c6043c55cc258159d8311d7dfca4cb387843e4d74ea73f96d41f1e5eb90731c278284115f1c81a5517789eb42ab17f04239f88352313e68f7f63000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a732e359ea2f4cbc978f9917965fbf900ef5b6ce40e4e056856dacd70276dfd29d544514d148e4e86e0943abb39ecb9ec634b63e23ae14e43ed9978bf9437a69d42688ff983e94d39d204906823cb6ef369fd1bec2c611988a378278376d6754fd2a2a6614125c37c94f1e50eb6cddd16503f7e4a013cfea1809139fc40df285d1bc8aa9461448e11aa84492e94fa25f1b07cfa23b5a7b4baad0aa6eec030ba5046800ba3d66197c2519cdd2c15ac691eaaa94beb05ce3dd2202a83f8aaef92a4cb217159d27f7b8e3445071861bfd46838e7d61a946ac9f05eeed07c00868d8140c053fb17bc3f04788c0df32e5cdd27cf33da02b08cf902b7409ace6839f9edb528983f02545c138866668b69b50acae562e335dcdf7faf2a6c051a8337665a7afe9801f40aa16b6a5146801ace09c692b933b02272e57e65f1aab839df8bff4b5fac7edb0af422b74d37ab8fc85e9a661e787dc7a8166165596257441949c76539901455d372a83ab046ee656008a0d4e472a117a0334e42f4be053d0355f1b9587fd8cb29944c9aa8d81bc280fab7911dfba01bce4a58244971bab7029856c678ed83b3bbf55d8aff09dc59e2b78659b7652e8498216f9bc4aa2517cab1f0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012d645056c0fe86d5bdc42bcf8b54a5e392e10c0001c8af5f2ed96edfab2ad8500313d99f7e616b674b03f35094f3ad329469182562ae2c6fada9bca726a70537cd11903ab157cca62acbf86d7937a2eba8649705635055329d47f34cfca1d1994622e244530c08ee8b3473cd1b55b975d3ee7dd0767acd07c5b0bf5fbddbc1d7bf000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000247377b7aadede345c90e6e93ca7d3c1dbaa019a1245d149fa400309ed836ad4004491cf11251300503db8fba37999bbde65d40878fa624289b7f982f8ee2321d6c05e7f067ef28f586e53af43f7180086df9c38796912ded7e537a91281a5c5ae870aea6409853c273bfb07033edd11f39108d029d24b8ed5426e5f9193b16de8b4c31e3d3e749b4095fd463b703f66d8a9a9ba0e80d1b4e8724fb3f67c81ddeec03d3ed85839e13cf076d1d8ce5873f9c9deb76ae3caee1c1418a60e71799adbdd62e1aaf4561037e79fc7729d8bdadeba00787b54f4992c63d040e4b69ae1f7cd3fa256cd7de16203e3bfecd0bc8071934f8a887d97b97aabb5131e99cad15b7d33a5a2d3be0509dcad8250949729e3ec7ddd5c7919836d32d1c7996b17342561c89a8643c57efd289f294ddb49ef778bc5e9f1f2daa223b8a46f4d9bbde7d776a9636241929cb349bf366c7331dd7d8dfe620b68e756fe09c5d61f8b83673be84390c0e88e6ab365c75e9399345d3e2c32b2a46865fb0401a3bc3cced650052fc719868308cfd166869b222b78acf1ed88fbc4f952c4d7ec2238f8c740985388169ade0a92a7d52d4c8fea380bd1836775ebf74b8ae5cb90b9047b4f36e40000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001116f202d35b56088f0c05fbd75c2983070c9f8a0ae19b7977113a0b0483ee340031778a50d8ade6b670c95773d7262bb99de517efa4623a9ac2715376aefd2e47a24c49f9c3f7e110128fe2682f6ed5f785f0f7ea427e41e5698070eb9426df0e92c5611c5e57d529f763ae50bc8924478ff7486fb4f520978643cf9faf120c9800000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b870b058efe8850491b37838f8f9a5b99174983f969434b6f8fdb8020899c989ba989c45eeb6d29642e020e927a4e547b39df72184ef781a3ab094bb11e2b0becf52461ecaef8a6782a0d8fb10318d4d95d6a6e4950af202f4781e41c5b5dbb8f4f8a04bf16fa4bdbc15b3d624d7fc4f15406e86b9c668f56c999ead4bcc8efecf4640a255a407face2b8ad44925667494e36ba080f026f6c72ae2948403b2df1d8cf518768f7cf37c1a88b53a42c11bc09305820e3103a0395149f307a44280b7342238094f4acd061e64ca5ecb7471ff2dce129f81221a841c65f4e4c46a4b74a6fceee529d7234b8ea5f292a2aedffd6f47f06a51a5464ce509b6575b78e00ddd9f8f465a43ef7e07b9d4c2748b1c5029496c4f178c67aa8a34e292ce1570f822380475dcfa85ef0241ce98e997494206bbeaecb868e0dd0ccf4cd6232c2e0b65889f2a8e15b57756a539722a7f1e3af8e04d473fb8d338797ba5180caf922090a832a744dbeaf9189b9dcd473f1a56ae11c3ce55346f248b9bea9725d6efc9fd6e539fbd31ee62c1c2aec486466c6697b58374f21c4d7559af797e280a549c726767af2071b62bb8d477ea87b2d85b49f6929c7dbae79ee066050020de20000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001216804a95335da1ccd0c9185c994450c716365369b0025506e77b06eb7ed95d9031962b92f5cec06d5863b88c8537b15525c1799b5264df2ddfef3deb9c79326a025e42ae50cb51ebea5ebe3d7727f547799115d89901dd9b658adcfa0ef0437d2299ba2bf501c6e5314fef5ed2ddfa7f15bbc73eddbc8d686fe3a1d028e9267050000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d51ba898999fcdeaa21b21a81a47d536496109c8913891eea8ce7a2e2e2323a5677ef1f9638fc12302d122b0afa1326c87231c41ab8bc93d71ddca28fe839c622a9aa8c9bdb49c4d997d983fd0c46f2efcfb182a0bdfba1a84e2c92a5d76668dd183004897c1ba510a1edd48f53d4bb16f64d10a7f0979869a6c8d7c16557b11c51406737c621e6c61f746c96515237ec26fefca522245c1f1831cbd07a9d2c763f66a85de53086364329f7eaaa92cdbd762aa6f8f89b46d4e43e63ed98c2e77d96dd74902aa3b07b7f671fdd227b89c8c5063aed529b73c31fb6cacb388a9ceb41ab2027898770599663d4763fff6f77ec6ea8427b683f7ae5f9dedbe18af1a85496baf2b2de7e5f4fe6eaed6d6d7f50101033eace9e135ecffa2ee65b8885de5216562bcd4e140f55ded04454ae5283246170f9afa3ba39d9cf0c80b3a3b2f0628db86388a5a654816f79e78b2ec3a2da91d84960e18df4948f176296cfc1ad573cf0f2a9b070abd6f34ac63da68a48b84fc8325db0a9a29f0a209deb58fff5c19e79d196f4e1a240ff7fb4fdbe61b4767d55d305efe7d8122bcf36c87213f9439c3eb1f740d7c8986ef21114271de9e995472f202fea3e71f3bf7f8c8b0c0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012ad843f2cf201abccbebeeded68e3cc1d562129288924b1ac7ce2fa2c5fd4b5a0319745a22c9b35b76a68091a83555ac5d5f8d3a109cd2caedc36eb13fcf56463d120939c1e16ab3a5cc89054aed785c6b04660790f5ea6708da96f40f11442b8430076ccef67caaa1be3c5a2229080416d9f520e4c9d0577f4625c1c68419e4eb0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008361142ca2175139eeb4e34fd31a5f835664f6cf9c3be3bf98a477612f1a1ff6f4953ac332303f3b2d2299b0e28d97bd0f8c8ee63e759a7e38a5dda34a9f7c31e4d61b85c50e74668fbe1d26a9f6bd32ee8b5fa721e85968aff417f0f9e8efb750974e1d6177cde3b4dc0afb4ccdb5596f503fabc6e218c0de635c4652c88a1f135d84e6b6ed42a4a772179f8d4c87fd4c7e982c388a105c57dedadfb94f3c170dadfe374750e0f5b944ecd3a6dead62e09250aee46037b8d114190a1ad50455fda1a7be5a634ba15fddc932c4396f6d167221b3d98e6c7749957022c1a77c32019c940d073d49d7d29d3f8dded72fccb6cf0d7504722dd9978f6b803641fbbc03971d55a3254ecbe35ca0d121369b8307928246e0a5c9a97c9199140b067667f567e8c7345f3797e1f0099b7e6f5c8ba44b5c902f410ac3fdf3e88b9d07e1e3f3f73a7c232385bccd82864e68a3d2a4315c7c760ad39ae10877e3c5206f91bea20b946213e6c93c7fd68cdf0f5f6f4d89b1868636c6634565e8f711d91e13aadf758db13c4f1cc268acb854317e74d81a81113e9f316baecf63a0cc6ca78e17e51a48ecbd1ae410b33c809aabe3c844becfc0e5ae71ea407369f52400f514eb0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300122aa7fddc0b174230e371644b2d4c3e79c9340d016b8fb3e89a84c7080296fce031a99c8eeb1a4b6b713563bcd629f621ffc241a7971742bbf03736dfcac982d0a1ef12ee7ee8fa9e58f98ad93c27ea91418e5fee425a8f17cee596c4737391fa924488194593e699faf392779873dba222a4e2ea11b6721ef57354cb3bcdb62ff000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000885d5baf2cbb21ffe0729245cfaee8a80ee3852d1faeeb1294c6b4eef4262b672198f7809660c550e75a3bee352289cd14d0571e341d9010f1cddeba3a33bfbeb30b4f53d46cf5958381679e634eb628582a50e113f8bf01e5aa6ea158ed0ee1fd22ec197791a1987bed5a377f6d56547fd0aede936fdfbb916bc5f7e2423e88acb3f31b266b2b74a843f45c170b2f7221595b51aad4bfd624cbd17c9a00d0814805b98ba8ccd600f4db8f5b3b60dd1dd7677303d1e512a0763ba6aa3cfd9a5c34476eeda4bc5bf6d90052a47fbba8539f9fa0399993b377f71eb6245bdfd7d3736f271c8e1cd3e471ae9734c9121ee45cc416df868ff20b3d13a71812390d87b2bd98665524d3523b7a7733014a7227c5d5fd1f2c50e6b1ba87ebd1a5bfcd3005cc80f03442e0367002d3a2153927909464852210b23c5ffbd149c2f5719f9321d26409ed4983cde64c7c7787b896ece10b48d9b3cc25ead68e6d5cc9cd07ef68b17e42569820e6408018ba51cebc98cdfcff8ca0fbfee4a6fb847ea69c2a18f3623e981266da1e5f16c3a2c44f7d36b760b1060896fab7519cab917c5874423197ed5181892435f58d203d22552ad21816642fb9067f4ebd5d8c10cf68b0730000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300113104aa580c3154822166230f85ef57f5440b2c1ddc18bb1f43339a5762534cc031b422e1bbea65e021d4ead68b28095b1ceff1afdb3ddb7356336bf14898b1ab127dce75b0dc51504a7f23a60f42f2e7d9dda2b9645d146239e0ff93a3713ef6f02af94e36fe9de83f51d159fe2bcb1b141a274c7dbc2eb2868b07469fc3eb0c1000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000112ebfad001760ea9628f4d773bc52086768594488b810180d8fbda86883177427129c1f4bfb45ce19e86d93b73ef13b76b677eb396cebbc56f601ef6aff4fc50531c10b12226318c901f621b0373728e3d2bf9a7862c4a01ff42343c79b027b3ccf09a4b188471a1b33dbf32a0dc648dc55c9853ff5737d0150589e98f50424d888846ef25440b77dc2c8250d2b739eccb80f71fa2ce345efbecb7c0bce8fbc5d38bb8f62d858550282268b1e4dd4009d88d34931078596482cccb168a6da5489ebcbf10c66b235f0d5a66dcc1c96f9dfed254f5601f35ad83d48542aa841e66428605d383ca5f9872740906921f03a41ff9bc2bc5e1ab07682f8a5f97dca8a86c4ba46b1852066aba5cb6a0c0fb6a4ae767cca3a658615184160821ed7cdf4fbe99d895bb7785e8f7f137f559fbc38676ef16866745eaddd38280f4c690f0426442754470b69e2cf3ea7b04eb8d830e044834a1d884f25718afc82744462e658737fd14bea888c319b92897c9a571ffb01694d3f2a8c8697450265f1f8ac1b150cae6335e9217755c7e96954adc2b77f63456373ee7ce8de327ec1f185738763d6955c36e152cc150086ae63b08a366bfbe9a521df8b79aed8a502d8073c120000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001049d6a3d6e6cb2c2af2aa5f7a2129d453e489a55e1ec64bcc307d3a88e439033031c7b2ac2297a1bdbc1461c61f2baa9eb2f310bee160a57c8500540b39603f3ea04fa21a2e9116cdeae931f24ce27f6c81b98967196d9c2fdf7f78c4c05b709e21bd4af0ffbf2e2a1f30575a7927c57d2b7bcddbee22aa8b0ef437502b236def10000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000439eb8065ae6ce7c9f1ac21409537ebc1a7f6bffe5b1d233a9360d77b3e136cf3d8954d3b8aa0f57b805681c35adce7026a48e256aa215524c5cb1381fea4c7e0193c1eb3e01b80b8bf8a8500031d20221ea4e66bb1a0f5141b05cb0ebd74ce3cae76917fb1604c0695457b04c75a37e244b09f603a53dc56fd727edb1417654b3a367a941396a847ae495afa4886fda8dc17c777bd5d8c2f985bb28904257edd25de9d1da836e2b8bdec6ce0081c8221451eeab49d8e47bc40fb171d968ec68414f7a748d6e1adfe0db23a8bbf577242507cd4564054f1e05ee61f30c2f806ad8c85ae0562886b5d7ad1e0815536eca0e1af186eb50317ae0b004744b5b97e10caf278a90fa883593f94ff134ddcd689fb84b7d8491936999dd6f2bad6314d35af7a2d66a992c7976c416fb36f362e60a70a4f52a5235a79264b69aebab13bcc44003e7f4407c363484d45d8c7fd9b953a1c0294848bb3e5d34cdce02e607631eae5775c54b7da598e9bf11e50fd0d59ac0f0dfb731020a87be9e0d586b5bce916fd68105879316b330326c5a8d7d498ace9836ff50dd52cb4ce2f76772868c727106ca7d73ac3770325fa1f0303e82d0de953775c90cc6e97e6431c6ee3620000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300121f004f7ffdb4631229c19ebaea3e7f2d98b95cfe12768b4573392e0f4fa7879031d86853421fa444a78e286c462df2a2363ffbae293c9bdad38f9d487d91c844c0f1630dee683a3c3c186447f060bc92bdc6af28e560ba79a38ecc70d976ac2a10086d1ae137bfe657f3ba7bcd907cc65cf2c4782dc01999122a07ee86d67d2ef0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002330f943eb987015ec3e20ecb9e5b5078346ce6d1d88c1c473a074ed766dfcb7b6eecd852898e8df29f5c8da1b3e48a940ee01f57ae67927e70b53d4fbbce440a05ff442b8138731cf34e8ad65be50088cd9fb3e1465ebe2cbd07addc1624c4de359c6ece7eed540e7c214b08386cb26ccf2a893e79029b6cb0da6b0de30c74de06893aa2482f41a8d3be95788f0291a84c0afa94c56311ab49bf66cdb2aafec471ec6abceeff0a841309847a819dc61a0638a4f8ac2511206be0beb5729d454cf761eab8491561d48d362b921652467fb3c2f6b8783e2c7babdbc3bec5508ef2d34cc2712f3874fb1487ad78d885b00c4824c12a382e6e1402dc24b9e46393ed77fd5350b349c5ba023b47c1e8a1c8727a757aa1833891a686ece7a0ee2f5953f24839fa6e09b7bc9328dbc5b2da780f5e140a4b5df9879d716de4b62687a32d1f1a5eba474c8e07f341e0430341783cbf29f680711471c088051397f8535cf8dab51c61ae95416ecf7ccddb38d4b4d5cf99fd60000d85973a1b6748c81e74a599a204209c2d841330521ebe4c1d82546190259a7d7f82cf889b1017f1486745c593d18e9d237b20de8cf405a9eda76507d0e785fc5b32b78985c730f5cbab60000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010db216b02fb9dc4034fffaca71e34fd7257fe8d616f19ab1c70eea2b8b74debc031fb8aa5033b664a75f32fd851fb7b4a2d9686dc3d9843d5acde0badbd3283b1a04793a31c2226f85d44db6212c4539829f1c0b0820f5d61a9e699eb021ad6e090de1252a18353decc394c0ba7025121d9275cffde8cf0d8effced183c0dd88360000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b961d88d0073afbd977ebc7b52daf7951a0b72adac8a90cbcf91b905e4fa056be42ad9376257843267184e012b781c289ffa0fabf3fc9969fe4a3268867b4949f2c9719bb37af554f6dbd09ac8d597fd335af73f427418e0b1d13535b7d99b113baefde0d1309bd715c868aa60a8819d9e60d0ca8ad26efc0c4e6b00ba80be76e33215ba008fc3ec97d72ec3be72642e71f9e1b93b4656bcf682aefbe7e28b3f69b694fd2807d4ea9b1d729248159f773fd31125e359bd903170b6984cd2abf9b792807825041c2a3ce37a2c3467c248ec1a597be7226d3d54b2524f16e5d89f4a875217028b2e95c93e4580703b0b2026819da1e57855933867155182ccf1b6be8a35bf5a317f7a685eb4c21b32e98f61c2d33c38463924c6610920abb04f729a31525c3ff83432768c2db7ba39f81e6e8a8e292fa345c3fa839d46f9635b5a2899686c411d278578938ec099f0b285527136a8bb6b591749e3f7ab42b96efa94ead775856dce82b995b8a5db0bb3146150071d4b69d40aaf78741890d22324d36709af75ce03c537b3b15bbae8e6d058da37c4e533f58850ca4e27431a7e0c255a8a10c9229810bdadab3ca65e354027fe622ebd5cbed92f27e03c6c8ba300000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300120c36578ff910ed53e2b145d9f3f126fd65576416e62b176f5edd22812af4c9103211f4bd68ab5fbddf19881af0b97a21fef2897fc200998d878e2004694b8d04e0b97f9027a0cda3db7d903fd60d9d9166f11a86b7144520da9bf9277f9773da2250b0d4a8f08e11f002690d92c9297436d90ff693464db7b6ccabf67e22c773000000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097e52b1c75fa4bfe45a7049176fcb1a83a98337d91594da5e52a9adaacdea06104ef2393dd6af1065993d6fa42888c0c440ddd7de58caeae9cb441bcca14cc7fd8da257a019fb4e88d4dbae8af14e6a1491ad458b8b9323d208876fdc49211f828d44dfc40ba59f4bcee28414d49bb87c784633d1b9808fac536e0c98ed6704db20db4399bc023988243b9d8ef9f8a5ebe6a626f6a33f6dc55cf9c97936f8d050ed8585b1dab06f0c07ed9cc29aadf3364a2b4530545adac9a233a3f896cf56499ab03879a03606055512ada53922d6bb97459cee27b116a0fcf55107676e71de70bdc0061232b7d61f3af13998d71452528407bfc7dd37a261ee43b1bc2d0dbe6607741228a23a2afc2a9d9384a13e72b2593e0bd92d68fc8ee70ffbcc9a4c9564c33b950c796f11fe70d7b6b1c05d19e44ce7f4fe6f4b7efe8af22f1fc87e0505ff6d588f43855a534682012eccd1e8c9b3b2675e53b239165f98c013f1843ac29e3ffebf191b1dd668dcea09e43602fe5e0822f9304af60da7b98fbcad84c184e0cadb13c9ce398c1eabfd37131713caaa8ab5c846879ee721e93c597f1d0646a5349411c64903bf16bd719c12f7230a8ed008a47c43844ea4acf2c4ab9850000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001107b9072b12f824cb14d31880085a1efbb6d03b5dbcc195ef10406ce5be85c3a032340a7a4ddeabb2748a67e6272377f542d327e667bafcca3eea6e46c360dd9122222fc781e2f0efea526705125cdbeb2ae5964b7df7e427ca64a469e934d001f1e6bcfbd262e7805ada114fe42b771b59780fadda1d9a9aa21285e71a3bc857100000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019b6d1a962585ff0acdbc10254c8dbad002b295394fad5facf61955ebc31d682f3e8fbb776471513004234e29947e35a349a7334f665c3bc7d3f2365db9a0d9f549d34929dc4ebfa092999fd391f68290539b014da3d3a9f47aa982d3e57676d3a627ad9a25c456df5c196ce8f9646b5749a3aaa23085d5028130fdd4a343e7d65b8d62a18457e575f837860fafb8c32a98cd331e774295707afc5c47f5d91916ae6269a5fdc5b0527daeff7c1ba01a8f5fc4bcc0a3ead3962dd00b48eeee08cb2ef41741ad38c4b2666c7a4004252bf70857bb0cc41352c9baf8554379e255bb8dc7b579950c1ce36fb110cd7fd83e34493acc187fcd0aeeb339afc4e80be4f902cb69b0d8e6686e02a78a06f7b9bdef4f81d40ddce96d2126bc746952e8817618850f5ce5ccb183489372bd5291d85dd9794d47c6e3004ee502a51723d23a326e8b877b88a119961e8dd83d5ae70f9fa8faa316d6544bcf7a1526b0182c4f1b77c6438ba467dd42e1b7b8cddaea993d361ec09ffe9395ee67c7731324c28c80e667790faef84a0b6d82a612a8da20ff398f8c30c8e1aab9d1ace03e69c5aadbbc2b97a6e6fe279f2891d130e0a2f586d4a35bf12c814f79c0bebb2ef4299c00000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010c0cfe7c8a15aefce26d6588c2c15ed49761f6310c0805810ba4e70b1097beae032378dd5e37e12665b425ddf5127d70434c7ebaf6b5053337b52eedf769cecbe313a66a23110c46dc9d0237289de83cf9965072b8b012d0e698b85f897e41e67d2fa550380b05ec856d5d8255b979f3fa5f4f03871247be52d65271801785b248000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a704ef525d9a3f5dc033c3e1869f10524bca7d7ac4562186d4f3fbd548a4f7e2d8276367bee2b20c6d2f165d0c929bba18c2650cbcb30f07ec3c99430bb403fb1d20ecd2fb50664c3df1f5e55c0c5a546376bfa2c56319c69458a0db1344f2cc21f452e11d1a269daea2b2929f5593ebe67939a9c7c20c8864b16297e7469fa1da67ae61a966d0ee7ae2056d6eeb7c43f9d08e707878a8f32e0590d70b972b137e72b4fba73ab7faf01292c8c256067349d07662762fb45564e6643020709e3b9a10b2d2b3f36bb870a6a9e44f6dd1a765fb6ef9151fbd0eb0649796020b98a8955bc9cce8925251e835233410a3a0ba1d5b36cc752a696c2ffddf9914e2104ef475d5f7bde0ddd1bad51c745e5a8d99fab040b1de9d3f4a8f414a1f15b9328c973706831bee47f0aac94b8ef45a65d2a2ac21b5f9aaeb957d63f2cc1677f8971a7aa6d977570606da5274b3fa30c5187629c08b24f1314e000364ca3ff66e58c4f0dfb0fcc27e5c791f891d53ae71970974449b3ab5f0fab478591c808247965d752122bb1990619c9514f442dc56b2011c12e3e4ad61d97c10af843d96dbf815f9130b95b502f9760f31d710b1237cfdfc338e6daab56270acc97c126e81ac0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012ed1caf1aa6652827f6f2955cb6e8e572ecd865cf06db073d1d0519310471d6303239755a76185edb8e8c0a7b8c35513f0221d873cfd0ad06a1916caf3b083437c09dc388165b0757d77804c7c0b7dea5322c7f1b95feb1104e370984e15a07ab110b065c61c6f8bb1b5db0cfe151567ebd0cf71d7f945ac65e67a356ab4179d36000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adf0b1c9fb204b3e899fb7fa5cb29a9a1a43af5c346a0c5ac3d1a4c27555b2668d9f607b1581d9f846d57d29a1040d6960fcc844460a0275d3d5f4e68eafcb4f0e47e9bc3cab4efce30e51168153f644ebc407dd4ecb322e89dba26cf9462a84694aa20cf9ea597e49202c55bfaf7d225fc80de95843abe3e630c42f3feba5c89ef194ba77a5654137613e9cd5b7ce7e878bdb51fe580196b413caf3c7f6f11bbb78c6d90a527b12d314f1ecfcdd99afc535957be42645b364ee06f187e0ebd9f46cc9a9b22c576a559d06fcaed69997849c2b941568590cd50f6be19662157708c67c5b45bd9c626249b9fd209ea230a716431206c81374d6e04d9b9a79aae0848c1167573b78fae379342be516960ee3bf78f5044133daa7ba3822b68c8d530395c0b69e261aaae01abcc281ac0b18b483a855e33d44ccd9246a14656f774972850e7264b1aba9a84180d2f62553dcd599b297b39fb32fe783503ea919f4e6dd3007ba6d9def9267028af7a880dfdee1fe763f8600f6a8f07ca08df8b9ec0a4552676aa5931a3470727cd896913bcc245cec6502a2e5ce50503da95fa8194806a6ac40b8f0e2ab05deb97aeacea3f0ac2e4dc6266bb8f68b7b9d013c27c5f60000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001231bbf8273bdd0b3fbcc3117398c91c3bdd5b1d8a0768bb96d6e97348295c45903252907f564d74271427fd7de38bc44c7cd73f97384ae0c1908dd029eddbb65ea0dd28965f9658ff42749f66b1579c1be34b4f77d21d3c506d93260404f4c009c2ad009d355441f575e8d0aac0af6816e7b44487a07679b1e40251ad54dfb3c8d00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094f1882c928531ccef5a549f2ad4a1cd475585beb54b4a8480cd1c05b720929fb71bdc9466e71943df470e12fc8ee45612e58746c5ea29b9d23b99185944e2980b76f5e308f9499fb865d8b12ab3cef13af88b04b724ae2683570831657035f5850fdb883021feb5f7234b7bb3af42e96b985928afb8528841453095c706c65ca7e3ac1883a84b59e7047be88d1039c7229bc8caae4a4ee09ff4fd05b21944225c3202e24dca9b89c738525afb22686ba226b803e3dbc1393fa48e0cde612018fbb36dd4246a5c8b202504f3459f88f07d26b45a205b013a8408ac546647b011299aa150dab7c05c82a3cfa20eb736c08bfb3cca4814ff68722a9c8b239efaca8f562bf52bf1d8cf2d2ae21a58646b79dba86a85c398e2568a58e0c3f62fba6f50809af82e1187418b79c7eaf778019da322146b43ed6557d7e3ee7fa851999201f2a9b7a9864391de442d098424bd0ee72d4bfc82b4f14f29fb61bab8753684a0a89a8612030a52ca14612a86b400df718b6fac720c7844209d9f8e9a0d3520d99f35c0d8948050d45d248790d0d932dddf01c0fbff73007ad34247b2fcd75f924209c27cb5d23931da69b12cbcd106b6dcd7be314ae21c465fe561ac15fa790000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012970489b88c0c321c86c665e91e8cdbc8c2282bba9d2c0b4668c276609de6ed4032640c3ffe52c2dbacacc015afef518f46305a4991800deb16c2d3aad106027521501b84ccad55261d3b7f280bf079825dd9145a053be5f75d62b1b0c2e0a2bd22373b59f15cc392aff37a05e5e860c9553ae509a58be9666f9664402485793b3000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3b648c59f9013257ad7466730131ed1f3e6deccf72be8b3b3ecc9922be2f4f6e3fa568f7cacabfbd4f4edab92b7c9c1e0ded06061804a95008d1195a5c1947dd2d373c551fbc2342672912f405f044d8bd81c32df2b2bdf7d16453d7e49559f0deba3073d5cd44c7b8102f128a05d2a4668b58c9ed707acd304e1e30300089581dc9fd342a6278269e0cc73a7fc5dcc8cab38926474a20e9afa0ca4449b54f8fe345c1d9068aa2ab30522553ade01a0777a3ead53d16fb5a37636598abf610f22b8382427736dd2cf9943f9c67b88d3c223e2fecab0e7abeb7ab1af0b52c470654b874b018014846e21606136ebf18f95af5aab1fbd968b8c24e3d887e3204b1ae7fab6494aed49e5cbe0fcbebe7bb0bface3603eb39fbc94de59d1c909d3d668c59b8826916980d27494ce7ace82faea83f66e945377765721a5a9c69a2cb55d4658b855b2b30873ea11e2b0945ec350f9a45e14dc6c05f39924017993c06a33366839e789ac906848f628c5d8aba684cd5a5812b1e0618470027582b431daecf4dc5520d52e966f508027526d56800eaf070590111f8b64cd9155ef1e23b63ded68fa4f48e35f4a88d693e09ad3dde1d4f792c56b4f558b8877976916f6470000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001157e8a26e776b04bdf429fc0a480ec7765a0e82249627a3fba531e98b34acf14032767ae8867f4b6a42f4ffc1bf47cf4d63d9b3a48f65ab7aa19eaeef7cdbf31d21ec28676f561c328487262df86720a53475cfb4b7da0925aa728b6ec0e1fd5da2bef72517182c5d68745d0cfb309c869fb4593ea1bfaac9ef3ddc0061634c4e7000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089ebce1490c039db58739398d905e7b27ccfa3bf0bcea24168581b572d6000c9af07f711430751c81b383ede797e7bf5623b301530c664e8a4dfc7ee259614b0addb8e719bef17682498a09b84b5ee9cba123cbf2089c1205917c4e51f891cce13ee5e1f4a3fadb51c2bfc95d9c97180d0a927b1ab728b440712ae982f98939dcafba75c9cd7b63eb8a3e95c9e124ebd1a40bed39bd78bbba3f98c4020c5e224c6b388eef2827d52a2a0a8a648c80784587e762e33007d8e3f24e383e07c6f99e98f9c956439dc41eb7325d5c7cd3484f8db278c888cbcbfd0af90eec6eef9ff8faf272ba575766fc86d088303dc2de66de531001c94b2f6d3185dde35b0ab97e6a5a113adc97d088fcda25153daa9c653bd37473f8176d234c05d976ca676628fc760664330fef830bfd95277b37d9ce967c8a95a0e0fe553e81f0e1949038fdb29331a1ef2739eafb9c4b941393a8d34d7143d8ee2c6ac457885935a56b164923d8d6e29e19f7fd269845c68601c53bab4bb07f1328eccc7afb8abdb5acb2ffa056bb9c8280d5f69024686a5b36d4bce1e63523edb35ff28698299a74005155032caaa5805a5bb3521a59ee26850aac5c0e57f3478250428d326d9ae30e8e0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010f416cf75cd8b0057ba6900809b33d4cfe81fedb6f54d944ed3c123e68b7e62303279711fe14abc8d98aac2cb9bae305b54efebba2913f7ddf7a5b50680fb7b50603f602a06181a18ffa9afb52e13f89de975cec7de044421a0ae396698467539419bd7d68ae6ebbffe4c6963431bd3222fd492576205deb2c2dc4e59fe8d10274000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000196274f6746571772682e79cf0c610a90a0793ba40a6c11688e7f8090b5dc67ff04de6a8cd36426216c9589dee392354eb324b6700a4f3c075cabad126c66f295817d4cb9915c1d0a2526a37849dbebd4fc0c0e1fe64225503c7a13856063ba6f0aab7a72ed821d80d27040bcc1b7ecdfa8bb26fe6a0e677a0a02f44d351eb94b4f37ef5b1731681db7842a8563e93f94aaf433ddf7c8520ccbe902dac812ac5cae12fa37174f18df5b091a5912a9e5e06e4f2be7d3bd98a9d56701953c48a02c1ae5ec8e0c3d705f894588fd0f376220f7fda99098b3741bbaa69f80689716c14af22489187abe6734f73daee56a1d438f8b3508844fe4a80990b81a0b58233cb05a9bc0160ca73104f5cf9fd28f590630116009d10f6e6ee8f33baa32e026aa3a9e7b5f5ed06c7f99e4724d1cedb8c508797e79c7e3584d0cc60f6f16c31e2991a0939e679267b61c7fe05f3ac2450ce7f9bccb2313f28d8b951c7665f83ce7a57288c6f52525efe828ed133bd4bf505b08c477795f1ea7766ca700284e4580aded4562e6d330f76a32e920557d0424109a9274cc93c1b5e68bfccb3ed2dde2dce96c1c30cef2dba3a1ff7ffb579795924503dc23c768fe2904ef219bf10050000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300126b7191f2325138affb13181d94d45a8da24f507aef77d606a4d1abd39f0e77b0329896884d92f9fef2f607d543f2079b7da54da890a59a577eaf4536c0dfd745606166f2d7aef52724e81d360fb330110e7a9b3ffa3a7afde65edc314428a94040bb33dd7d54464a135a442f9e58f90bb479a548033c0b7c2e18f0ab7588cd14800000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094bf2699eedcdd0e3ae4fd5f342412dcaa1d5dfb636e30452da5cf2611ee670a3344f47008dd215474838e30d36f5c4f9d630beafa0188f58c669a4c387165d6535b2552659b7b81c1f6660652456b29a744d9ed60bf2747523faaac4531a2ba1fa5d1a5d6d77f5163d35a0471e257ab52009acf7fbfde39e1956ca8f9c14925fddc8f274c380d4d1f7ab14099c7780c6c741f0973ffa8a910b080f47de4669a6c9406005a7e5e5761d873e1109f9795e1f25dff6cd5aaec565aa238416703e1ce9167b43d64752673eabe599ca37d7d572c49f097a330bb0ecbe3240b166621fe55f39d0779e87b9e0abb4d724d4de6f178e39716af28dc21708f2d52f0ab71c77d4251efb9c3ff6ddb151eafc0d6f1c580a4c6a581ba9ec5b12eb56362edf3a7f44ea5bacb4f3da57201217003a716f3df1e74f64ce4049a5dccb3dd1d7d7d07d21a92aff0afb6ec93111f6b815f94a4f97ffed43f07d56d5667f29a34a8c72a7cab534767ebac25ca68802930dc1175138da1e9fa9ad48126bb90f9480a4858422f3126db0d497c3011606c90e157c8921c222461a9012f2a7f418d892e28965055b6555dbeeece13891b611780ce859d45b3faee7e983155667dabd36d710000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010bafd28887454b16dc942599d764501208dbae791174e8dcb347b5de5e2376780329a488b24c5234d15914575dbd5d75082dabc7cbd1f4acb673b68c99e6e4a3392817d30ec7424f6be14f28ab45d57b0121ea72fd1bb0c9f649cc55e355edf59d0ab9e7409bb5ff2581d64f5fc4ea88a0e5cd85dc03410e440e539d45ad2474770000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e48bcdf9658b941645dc43932fd34591b54bfed3b2b50a1c2c576413582810f8100ed556f379951c324e9e36929a773a1b4e13af335e2b383b4d73f4edf67a7f0df7ca0728fa251c6d22a931e365d66c7cee9bee5e2abdcb00c155b96a62a35c995e902b7e42d107c646319838050ad54205824b5d02ec73cae773e73691349d5c9e8a49990b0c4c581e9b9401da81aac5cb94c11fa96eb54a7e4cbfb3eb87801a0461a8fcbd5e155e05b1df8d9a19d8bab83b07550d1b84b6af899a8580d475e4d0b284404bf5c2f3117fdc2a2b1ce38da916531a184527b54211a25bb25eacc4ed1852b8c3d3926c54fcdb17baf904dabf1e5746c297772d149b71ef184f585e5801102e837be8e9a26e55c127ec07d77cf92fccda286684f131d7cdac1a685a911f1c8a3fe0630786310eec775a6264136e9677a1f629138a0cb7ce472f29ee0e4f66305d300ba9f25e72c0f1feb1f5641d1d53c2983d3ff496a75727b0157386c91548ff1e20bc21c3a155f7d9e1d5444fd42c9c4df89f7ddc623e77081499e6f26ce3258d2c651299f9934297ed7c96ad06c786dec4494f0b6cf723b348a5549ea8659ac3cb6764f3e6d6718cb762d8213c68ea75601197f95e0451aa20000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300115606f5958a40c93c86038f29bd150dcaef4ea6f879561c85062c4b3cf6d437b032a013ea5fecd9916af52399a5fa6de28fa3bec56f253b6d61b052996e3bd241d0cd2a44a0c8c2d1625a86947bcd8c7ac42bedb73b2863ec10dd73e483b4db1672c55ca4a63002896daa6443c3a4bd03ceae69b3b32c77398c8636bd2b6fa15dd0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bb2615ff016256ae3c52ad50cc8d4cb615e0fc1d174dab843adda6f7e8c3bbf4d585203fc3b86c5615ddd8b87047494e767d39874ad55a330c0ce605c28970a27e50213d08bf8e51d14e6c20d66779a650959b8cc2121d193d725bb6d707f27d2c5d53ff969944df70a03927de6b880226f95db7130cca87a0197a5ff4e46b042f7cc886bbe26d2964f8497fb8f836ff670d5fe622fb6c5d730f33fc770e27c5cce374a0184310fd2f2a28bb3ec97269546502d70b81fd7cd2a23a6c75bf38b3000e80b4028aa649956da268c7b9f7264f543c2a1113d27f77aad22539827aee42f74f9b804fbdcf8326efbbab216ec04b124df1fb273ca3ab37e124622a4d3af9d54577aad1431e8e422776c726ead10979adb8d7984e73ca60946ab102341c86281a261672355010670baf3b4693949e157739b78e173b512b5b5738b47c840884d69456acd6e793ddfb3a8051e835db1d49e60da8aca76024764cdfcc89e4c57cb07814621f4e2563ee047f8ee6d7c631aae23ddb1f0b4438000d58ff233ca644da0f1e51a193a95cf413313e8af913e7207ede9d6b2dde6a131678b36470e3bf3b57a02cc51f61dfdd822710dc00708e363b7ffdcde0543d2fa80f64c570000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300125c102784c5607b6c419e0bcbe619d5f15dcc9c145d52829906decd304bf7c52032b3b9f9f3b53f258dcd114c1187ccd808b67486c09157a7770ba4e09db42894d0b594e487d4c1bd9d2fa0fbbbb709f9d5d455ed20ccd5187b8f39e6431cd88e3254b2829b75fff8cfadb50efeadae923e34749a865b8587c1e74f3c6a5dea6dc000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000826590971fbed0fee7d4f6b7e587586db3a7a0c3ad581d513998b4d8318bbb02e70923e103e86aabfcbfeaa30a372b2dd29fb2d20c250f085cc8146cc3ac8a576c1ba3ae09e07167c3d4c721f9e1e2a15f994b4e2eb1d9a525e554d3f636ec51cf5167abcf5eed70d6d25a2e94669d57d799180262663fd8e425d6eb9e76073b3d51c5202e94458770552795460ac96b28835d0258b53c549ba2a0b0bd97718f015614d300eeb29c83a15b2bf8d8f85e00716e8a86c93c1e39d647a0f37424a8c782c27ba08b8406904808c8d838b8dcbcc71d985413b910ceabddfc60ee36255f15949a1cfd2f8706a176e36031147b473b1ca8485fa576d6b943244b74c12cdd3550effefd8f1947a284bf172199315f0e8df03f03bc0869f9c4a47eac1f844555f8b80f464a13f68fc3b056d39ff98e27fe9aad13e27068a172121937667e357f0e6ebb686b5c4867f82944998ba81a8d8bc601658d5d34149a2eca8ab4b2e22b2e7815ae995378b9f1c476780f870b3a6a8de76233bf809f7897acd0ed82eb978d70d93d245ba924549ee99e8dec99a0e39c1906226d31c43ee58de9cb71ebc120703adf07be205cb892f240d11ad45242c8ccaaa13707eaf6febe9c53500000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300104bed61a37320ed0167edfcca1cd39e1e3231f2dd1849e650ff9bc74ce5da888032baaf570c22578b222e63ab8acc9da504acceb87bfa19b86f721e1fe4d48f29d1d950350598871048c99e9e9c0b00a6caac5e27f0bd71e881ef32959c3b6c1ba147e19429a7cd877f7274e2c30ea317f9363bd6ae98db755d49c8f4ced73a3f4000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a03b8e2e5fefb0d012a9543e0cebe7688e09cb5b5b569f81539c5255de566c2d54886d742a420d43dce592f3138a776c6ca3d779b0251df79640a124a629b72e5bf8e7e3c62e75061a848fea75cb01c038319253ba0b53893690d3c450be1374824950629eb7036b52a960f202efa7158eb3d8bade7c450fd8321fec70b24a8d9a47dc6c1b5b17c457f564255f7769f2550c2d37b9e5212438b29b036f70fb9e76d6369e204ee6def2bf0800ab0d3f95f30837d93a5cf72fe1ab63552b3e339a16337d0b280b360458651df7915914ceeb3dfd829a45231a91f3f6abb66d26ad5d059f2679b45f21a888e4818e890dffab587ba92c1686b92a1e1f75a61edd941b5c67e6b0936af929a8851096c6c843b13f6b73c3b79a976404922e2f47bdcdd185f8b7cdee55a040fcd25d3b07d62d1868a5c5ad0c022a5d91d26480e563cd9aed33b04063b6a10fa2369495aaff51fe4150c93fcce0393722c9ec5234d6d8d7edf1be121d602c5a3a2556f2972e364d28fbfb9f458a3a395796cb339fa3ad5e3d394fdca8c3fbe5a294c8020ca0559dbc1f6301c4cf7736b0053ff3b16496e06855b7b62ed033ae92d4dbad776c6020d53f8f7b7227bf82afc83dc8462e5f00000004000000000000000400000000", + "2c5c5610692f32c3c9e2b7bcca8b8a5b333ab4f6c5972e340a29d75b1eba7708000000090000000000000000000000000000000000000000000000000000000000000024009e3d9b887af68cc0ad8e6a293e9a597a10f4630df4d54081d4bce6c5a769e700089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb30000009003d732429a15f3eb66bdcea52d6d34b9211084234bbf0f998e1de53c67b68c2300001e001a8cfa141aa0ba87835e1f8b987795ff825e40e49709ac0dce08825c4f0670a700001e802bb7f2372436ecbb2ebd34734a7fbce7e41962fc16f42b0c006b3b074082abe000001e800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000070dbd9f4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad2ec2c0130f67668a3d49f6a16e89771fea5c5185b7b10098b7a77981e749240533b247000000090000002400000000000000000000000000000000000000000000000000000000000bebf730011dee3fe8ab500cbf83665df763e23ade7d4d95e8de5d497096b367e79273e1a90300c26f4d9ed5fa9e774a4c1e8d5b8cafd410633a65395c712b01a8f8d24bfdec2aa67b4492c3fadfae2d1806e76c0c0bca0763b4b7b7550975ed06c237e46f17125bf87d001b0d597d2fc3c93606c96166d6d2e41ed90b408b0f1e7255c9c127000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a53d4cca2c1d3176de0531a67f91d388c0da8047057df6dcd27ba56f1a614e1c31cedc0ddad205d35e342354cb5b41475d96a52d4c29d3fdfb3679bd331fd7c4671f726634c66e8bedebf42e080a456a85c7d1beece1046092ab1b3529a379d168f017e07f13e5b77357ff06a2d6b58fe36d17eb84e4dbfd19f0a87496eda38339dcbdf8b2ad3b5d254ee31304038acf7855dabd0a41a27cb406c8c4f2bf459a489e13790a564ad017f7e375ccc9d95d17c0347f1d8d63bee04f61f9c388807639310c9e38af4835d6f536bd89b511f889891b76aa0f56f76595dc105b740a4df13021e0f0cd6a2231e115f0f6d7c8301d86ede2414f7ab281e2f08608f038487f0ca3eee31a1b028b228ce3c014030e871cc8c0341721fa0ae1abf3755e7faea9338810cebee538a5e90fb68e7c57840651b566a756dbbe79f07b6ad0315baf8fbdbfc3894d1e42f6fb2b027f813c523336077f5087cc5d68c0bfde66e7f0373ee2e1c80c2abfa1e2a30cc59ce4a0b911659ee3ee79fb7adc39415d1886ccf9e57a40be7859582a9fcc5eac3d43543cfdd20d4859b146ebce3b2db4e00fa7426f4530dc04851d4a9640fa2362c43ed0dd3b390af4145e932759aa8a4a2289a20000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012dd332bb449f3486f6b9e91eac004430c66225ec4b5726deecbef819464505ed0301509cc6fc095188f976ab4ff6ffc038d0f1c31fdcd8df67eb78e86e66a7edcb2a2a2bd65ad15e7858065413afc3e8888492f46166dcba5310b0c4ba5f4aa5e200d350be427bf27b4f0466a5732fcae811b446893351569223a3eff023e053c9000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000986fa76780f354d12dd5817a67008fba0fa391d7f0f4f78efab4294719eae49d7f1a71ba3a5b7bf53f9129068273ad441e03fa27485f7b4ae10b66cf1e8a3fdd29bf4ab748b8fb1fbf0fb2a925c7dd8e4c06069831e83cca3ad01532f49a361fcdd89d73a59d740107bb88fb1f1bfc8e4dce089d79b2bb85bcebcd84ec5a7bfec0d0a7d854976e9eb9f2a5ff34427830c16aa8ba012cb27c018726bc72e973373f962f25882591d16a25c4e785d938f36644b4ee08e6a71c614a608041d2c9b4fc44270bc3649eb70d5ef777cf52f7c70694faf4ad9e0a04b0170c8f4a59d407868a6e0a2cfced65692f42e39f987cf0d428bdc11ec617a61fa563b93344d0d91e456fdfe3e943a2f6f1af7ca8199d6967978b9bc1d7894e78fe127b565b332e915ea23fdb68ff4ca5a8e27bbad4904fb1df22792e4382321f62b6a2e6936670ba6ec72fdc1265891d837088f6500cbe81c12a81c3d530717ea3fb17f371c3ba8eece25252173e9ea6833ef90e30a494be3949f20d2476225dfe2340a813b5d6caeda9f16f187276826bf48f330f75a80d3ca416a2b6ab93d17cda205e0f75447848934f78270ea58e5d3e4a4e05da8f586e934f0c6c2575bdaab83e16df976b0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300125ba9b1b10ed4aab3d010474613416a2c829128648c38cb4468703fb4798c3ff0301f4a8dfe0cc4d7847b0c7cfedee6501d99be60a67a6e60ea7cb57a6eb3045ed0ed4ecf087de57720d953f960417c58cda88118e1fc42c354fef79b353b5ebf91aec17c7b9ca31456493cbac951461c6f6ce2371e9be672617a28b976a77ea420000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b83b780bebad8d68b4f8e3188c6265529930b7e15036caf32ff45f23a4aeeb97a0ac158f28a33366c9a3702ca117af096d2eb80a0d8661884ecfd550f545eb2fb3ec898aff64243ad0dc19320097d63e08bb2911d0a20b5d47a59ced100a42220059da3300462a11d9392921c858781bdb4c7ef25c4ae76862e2f447d5eadc28e27bfe886737cbef93276e630e0c06c13162531d83e14d97ec86657bdb07095bbac489ca5f17e36a00a10dce55dddbc890ffa4a77328bda706b9ce9ac1d014de0d3bd3eb43169560314db7888f4cadb274937955ce8c2312d8eeff5601bc580f2a54201d6ed1a1a221c32d87918ddac54d6e972049bf208e32a7703c308334509b753fb40f3fcc11f5c07b8e25c039f7867b293d851abe822f04ebaba5caca1f5b9439caf627ccb4a4f6cad16e2bda94e869c228734cb093d40f3c024a60cec0cd3724ec83f0acf648c7fdb65564d72002c39c9761ee063027f7286883830db3d2d35124e2f90cb481a157d9ba17f077afba4e5dfc10c71a009f34745a6941358dc6d365e9c70644741673f3152329031a60fdd6e5c49d27025aa2f498cb8da36f2d41c0d1dacf890d71da215ec738858ec721db31bcc9b61a96b3ea751bd760000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012f65bc73860fc103ddceb8a066d0a3951557020867681e3219ca70440959656f030318ec6ffecfcdbc10f0b68b89dc2cdb013444dd5b42674d8826de0fa73f2be823cc170fe77ca47e220ace7ddd87de6464184267630dbe9caa6bb296231c80550a443e7d2c7ba0b62677d24766fee2f8e6088281a1b1eea0565f3ce7f1b1d5850000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a40db798108edf6d893acd5c97439b4b2b9151f02113dd2a406f40022a22199a70bd3dbf17255040edc7db28df0072c69ac78ac8ececc607e562f2008d8d5a07f75c51224eb29fcc67e79d6eccffd28eda59d2c851913f286a05e7249475821e80db18ef358e13e78fd7d6b96f35dcbcf407c03671cbfc47c78e142276f3b4f79df4116176027bbcfef205fcfaef7f3e7171b9e8820d1cb1beda5420ea0ebab0705ff702a1d631446afae0ec7d0f08e2dd04348edb27e972fe30589971233adb8c7480a4396ff08a89701d76a49dec9e46934e097212ef47de9d81e0c99b3d6fca9c2f03512f9454f4164c6762bddf3809791408e2102152d95e980e92fd298f3bc080a0b7f0c14ddb30cb66b3f39164292f75cc4eaf3b2bb4c8ff2c94ede44af719e3bc116c4b8e15bbbef5ec169a5f81e6c9750d1543896d9a9a580b03ef619f600ff05361f773ff70b2ffc059f07a06f66f1fb439aa516b939c2a40f538fb0557b720127afc503ac140b4713a26335605fded0717aff5896c2ad0338b13ca6dbe03e8efc87b5f5f8753ac817976ed0ebfdaa50559cddcc40c50e07659e51c75d1ff824cc18d1a734b79bbbcff05e6d8d689eda7bb8cad396afc3ce413d0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300105e2554dacabf18ceb148d61bf5ca6e108279eed2196a3ab50fe91eefaca13fd0306005ea9c3fba70a31618111c988ab1c3f092c08e5e1fe17b80c4c008b8d0e732a787f16c8092f76a2b2c1b13e0ef1567e163cb1572fde4e3666785d345eb7c61001f75e18b1f5988ee88f98177a9cc1e6d50f36acadff26f10c2fce4ec67bbe00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098954d9a6a5050b44aa00893b9b736803a4e43e1d724aaa78ac273df8c8ee52418c66b7dab4bb39f2e692b0ff2721f8a2999b65be77db2ebb8f7dc7d36c86088957b78eb7502b7549c827a22f6ac6215a5d7aace448dd0062d91d451e5a39d51adf662bcb020977f075181f963a6b2585209ba9862a90d71e75eb4d33dcd7da1bddc9be4af2d6463548900b31f2f815eb305a7997102b59b5241304619e1d1eb19f1b851a68b7301bc61d8ea57f9d6b1aa8456400e85bce39e3cbc9c28bdfa9776d16092ce44a6d97b36c81302d2a4c068cab2e71e2936ed40fe24933aa481bbef43c28b731ae1ada36418642993d9a00cccab6fe5f5fe4885c6a54903cef306d4beeb95b64ebc295c6b6a0e31cc06b334b91acf722d64969c0d57c2d01b1ac9825306ac3df3c70b605f45f06c0b81bd6634c9f616ea3c82db69287e35941099eed095d0d1d92a04ff8e2e56cdd5a96d743e97cbf7bcaca77a694e1275a2e5dae88271035870373c34e3b122260dfb453aa9e57a3df18b493ae4dc823af95bbf6256e7826a4afd537a94302a358cb5c5f7f9c05f6c342c072392bb2fa5c947a719111670c567dfc7f8932dff4a33db5c181cb7f84fd66135e6e8f3b26c7efbd70000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010339fcc1364a1295bad4f58b046a5006367cb50677a346d056f4aa93a593014603065d26cd148a59cc7d3dd37026767f52d4d62e18ef724c4aab58f3f410bd3e670943c8d084c5c76c8649548e2e75d5c36acb7c4b4dc4a3cd0b502f6a25a7baac2b38966e7f54ce95fab071432f96d243b3d8060db6860db38fbac2fded288e930000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d5040a8d190ae571a59675645b032d1582589c2f650611a80f73fa14e1a1837b08a74382dab586d99bb31c8b2c47d524425c802d8b2e12f7d48f0d1c6f0d51f966c6755a2658316a24b30a82b3509a06b187a00e9cb56ca6da5abc0c879e47756b8d8007804454ec559a02e784e2ab6fe6ffb5f41e33c1da4dc63e34bc3df9b5e3e4a188c0eb80bd3c6277f3943f5ed3ab8a890a26ce619c2703930e5db70d199ee18dcd87421bb5b9cefad02c1f3a47f42957f3dc69d13cbf192eeecaa3a44a4445ddca127ca581efdaefe51f84b29ae19f8e512c9accd77acd1f75df7144740d6025c9c8e18dcdfa72ad9f2c9a8bd7845c6ae356a05b42de85109a62e4fbc0ad3911bab29fc740e2ea635d1a92db142dcd15435b433732d300c63154861c7603de19109367c28f138995e8730efb4325a796e59f9335523587f0ee0e118ed93b419f432a579c7e2aa72629f2d8ddf4a333a64139544a34cd160bd2d045a7ab9bcfc6e60b1032c4c5f4dca681d10a4c7efe4f17a459d3f761a932a791611961075647b093a58da3ed7064141399f3e1a88c1472ef9d0ff336b470c0115b658f4169b5e1f7ae49c22faa189b6689c1be9bccc5be9d44c0f9b123c7c4b78eea20000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012a147056fbfc105266e4e3670a2ab8988a9ebfef6a0b883167fcf77f69dd885e03081d71894d41fb4901e966fdfb7e8395d0d0762f1bd4ac41047ee0e2cabd39b00423f91c1c918db18132faaa8e51cfd579c58c420faaf367587ac5484215626d1af73b5d624490e7ab5d86fc03430a55d4c9264d49fb326fa59bb6cd9135dd840000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008bca6c52c36cea643722fcb116efe709c146db4f4af8d296e51d7f4a6f6cbef27892f0e9828409d4a2d5067b714a40c8d82e78a8d41d0c36700e5bfd2ba75bfdedd88bc40379ff65c7b64f6e35289689112ada40db1e23806be23579932a8f32b5da2a22164c84987f2758aa61268e7c73ee7c235bf8f2b9989fbb12e12b2aaa74443d65d6d51b1a0a968a2267b919eced7ff4dfdf13ed484288b749adc8c07f79ee53f21cf99770eaf4e23af91345636281e7e6417e9fe271d1795f8f01d400c6eb61aaee89626239cca7fda2db5717a017e2e76714a20e9c3d25bef958e044d4d7d94d7c5c09efd028f08b8d7195d179c3256f4fe9ccddc7dddf1f60cbf2d40e2375a710a8319b435900022c49cbba24f93b23c45b48ab0430fb4424919bb2c7168e475a7cb4e0b8f7231cc5249b061d65207c0f630293b8b53530615a41bad7b6b67c4a26bedb61c0b947e068726be0f74f16b800ac1ad18108540d49e5b7e34eecdb254d1cb59856df18ff67b703bb85b3ae76848de9bd94352e832e996965e6078f80042f075212dceed3c20a1789592a4f0920c85edaf41986d99d08e5bb939055f546c7ea814485ad962c0d6f8010a43cc8827f85c0da2f80bd30647b0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012aabfc334d0768898f3759d923d6abdada65e68b9bcde2982f92ef278d418ac703086c21c71f0769a54a8db4398743926f913b398058b6c8205c2153294acf3bb30363e579f304f37b4d4a92b82419fd233c2093d7235879b8251df57a7ad2c3002f72bad74329b3920ec06cc00617a539b02e72e75ef2a27c0365fb825b041baa0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000df9cb3923d0cf77a768f2a04089717165f5e1ef5b624cbb51fc05f1ddeef4b44fdf203a38dfb547ad4c9988a24f287e48cb9d031091bc1685c9a7acd0efeb104163956b50486f66d81c67e95d59528a7ebeae2bcbbf3e72e52ebccc2c7cf2d7147d5cf1eb158d6276f44b3630da90b322fea1fc68fb28c4f6aed12c17140771aa3de73d4b7df7124a20246b986eea34d3343972ad3f2968ed26827f0a6b26a037d3044e59493d8d77dfc6f390f80ef38bfb80bd3fd888997644b7ef8a475b3fe1da6a953ff03ee08035088401bd367b0f346b583da1a5ffa60294f15d85ddef8efe8b2316c583aed91db0ee7fa003c679a314c09954626b82558f3076bcb81d13edbb2ab95116024774c883150c146e6252ba7fe10b618a6db2b15bec48c8ace15c6d064e3feecb3a94e0301459fe5e360ede7a928d823ed3b7ce307d1db461c2519072d44b15061693a3cdb1db6b6e5c42ecdf69a4fa0aa30d13dd305deff4d6fa6a7696745364f094531723a14e0eac5136f2083eed5fa835c4e2846472d62fd8f416ffde6aa990dd536801079a33402b1841f25025e1805ed24cd09d3083db15913c74516881f43d2e8c435da1d2998492cf61dfa200e14c27f360689bfd0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300107770e8da260bae0a569ceee2d48958b1b4a484973db6b89a4e819337c36d60e0308b8f9219eb9124975a84819977a4fe2e37ea6747bab87167a68e0515743ab1521383d73ad83f7abbb4af2eaef5a1bd8030fba86cd42f76f5c07a7e607e83ed62c5750dc1c912be73e3b278437b70597035a3c87a0ec2c47ac4443e665791ea600000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099e4aff2075f159facda6486fd33f66b5560e2c2aa584fab80ab5a00e82599d1d555ebb7245eb5adf7d91de86dc96eb7d5ef543fb3c3ca152f0e543de2af894b26c7445091be9022e0c747b6431fc6717a46c9d0e06ccd8c8ec665a4aa3661576b44f8d89f724f4432de1ff01fd2ecc97bc510fe214661d086e72bfd23445ae596d1edeb2207a4bdacd7efd40d8fe40cb92e7f16c2193cb8869f135cef57fcf4cf3afbb8f0b5ce5647c55f0ee80ac6e25e38fb0910c25d91703a44f0e7d2f3cf9cce01890f839be070b54f1623bc4dbbfa1b331605d6897ee833709e067d3b1afe22ddbc5860f5c16ed4c054f86fb3b569d184ad86517a82c6ffc3da0687aada5c5cca79575086a7013f939a41c69c7a88dcbaece2284fb63bfbb5686b468268a16902138c249e80b2461cadab96c30c84bea554c4653eb7b668c4ec4500f520f56aa6219076fecf6b4820b3b1139b38026a2d1a9f64116bbd8c73476c11b4c0a2d6c9377f20eb99524e2fced042df6ea1f738389db52544dc3606d2442645255293ee3c284b5c84776b79c5d7d2662db5b65aa630d9ef17394b24788b93653f2c9e03a40db6c340c37d1cbc112dcee0f4015e1489064382aef2e50c57aaa5920000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300110368f662a476229ac2a590b532c94511f5d571aa612d387a063aa90c7b812b5030938621ffc6edc4ac7f3bf19229cb324d74b238ee8828548133b87a9a55fd2e4174b386178bf2dcf2e8b116eb96c5eff9c6edffee1ab82be29ea35ca64765be906dfbce99a879e9be374adedc16f33cddccde83ec69a3a9f36d8f4d7aa04e46e000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3f7ec860f17953dadd8c4b24c43b08cace667083ac2c3a29aa9cd41204973fd1c259d184b151d3961523ed18fe78463381d77bf52ed217ec4eab854fe252956e7fd0b13e102cf0a03c94ec721674857252f05cff751de9c762eaf763ea950fc04690a0685f3b01950532cb907b1974b7359b3c68716f755abc858ad48f01f4e35dfff96a4683dfdf464ad71b79b18f92198c9a632b69144f036ae61527cf2ac3f60b30980e46c06f4313badbf82c9f3fbf835f019bc6b480af508697a6f56743ff8d6dcef32fe05f70428ffd78ca8e694ecffc7d76fddde035af1cceeb3e1743585fcbd986bce42dcca215833cfd18565916e8625ac0096da52bfe1eac9a151b8d21c549399dd103d3ba72dd6ffbc13f9b26b2402418d19b7afbce7a235041700ab8ed870cfec684f315cf1a1db117fb79a9940288896265e3fd0482f3a4356faf512aa1319d7b78f4834021aa1ce3a2556251964e024ef5d8e2364a3fd632831459556378494dc951a7d090b1e1ac443957812817d4db944b47ab46b6fe22f381c22b29a04fef8232992d8a97e5eec5a12940bb5931d0ea7e549f7c549bec8b99414825debad6ca69396554538e97ca204fb923480c281c5fe6e7eb72b485d0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011083f105ea8d0a5c2455b45aca3bd6f4b14c32c1ba866190a830314fadbe1ab9030fc849dc8b8ec3956e39fdf7ee2bb7ef2ba42badc70f8dd99bd272ce0903fb09251b48d0b26a9e550ce17a8cf31a63cb66c52ed6a39ea9325e6efec7120bd11716497863610e04c74713f913876433b6857c1a5fcae64f65159e8555b620956b0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000520753ab9050cf7f608cd92aa7e8eb0131f6c08f3506ace796578a8bcddfcd73a31b6f92e4fee867488e498b7e4ff4945e1e1929fd932533e0cb7ebc557dd7e73bfed80290a3db58dda490b6c8bccb87a21b821a721d74ab4a45ea2c97d4ca4b65bb855f05d2314a74e6cc0ca97dc9e61637cdc574dae85627841ad719c495b4633617aec1b51e69776efba28160d86978327d3254efa30546d9b3e835629212091a00454f90c36d8ce0c82158d008e28f6a540e12811a3880d3c7b63ce872ffb5a869dd644abff05b4e90e8c9687d39026008ca8f4a4483df5507d44ffd59294c799c80ce329239317e8cdedbf5bf55f0435979812e2c2cfd658be5aeae734da70e8864a2ab9a96aa71f20dfd506a3dcf37d8f3152502cc1b2ac4145592fd2724841e9f07c4d7702b70f4656c38ee3708996298d514788821504370af1e59aea04ddad0bd256f9149b8036c38ae3feab0f4b2b08774b01647ad910b9f9733c3976df811ebebf8335bd34719efb3f6802da931d6a87adb9da4df71b97780eb1d905a4ad4adcc69659b874933007e4c5a181e559156d555a2fdf35f43eecf4b77a11e37c09eb4d36f0bc4216c3fa29370a0a0854a76a25dc61aade1f9b9668840000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011690e0b3c8b70423bcfdfcecdd3aeb6e588e7b0e34fa0efdbd49beda36de87c7031010d5d48a7ba5cb742f445c8f0bb5d5a1a8dc5e8a35cc94f9fbe16d5af78d1b0cd8574de7f510083ca0b0826abd5ce6610f3e5d26ace717f0666a51c7fee948089f732e5a63c0bac198021fcf1af5bb6c2ca8da1f001af76ffa34f4c7ed51160000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f8fcf608404a32f4027be0f3546bc61918e8fa0200d9de8bd92263df3f157260326b0ab0017d40780a9a9d5197a79e80c0e3a5f8fb9cb4a56c20ef699724a158216647bfa9182a9a7774a153b604fc6dd52107bf8855c2731dba898e23abfd4acaa098729d01eb332618d9557cab8b4a9eb90eaa23ba0e7061dc0a727f870520edf4f6d2a3177dcd5614848ffb4945c462e168d8b5304dabcf477e5e819a2c50db91b8977c18ea2b30856b8b132b817cd0930e28ffe293d3863bb0ee356a78753c0232baf602a71caa460993ae117d91b1643feff33564a9eb8e6bc953a4262a5ea954071316fb6c708d362a0ac6884fdc97dc593efc2a51cb6d77bc57ea79541bfcfcb5a725e80dd741bb63884a45557a69306cd8be8754385fb5c21e0ae2b245014abf7979d66e7594dae2a469c2f54343169410a3a6057e9013f53693e36b65f0a5d23ab11f37366eb3ec17fbd731ebebb2d021e3d89ed0267b0fb18f1994a0eefd3384e018fbcae35576890b2f8f4c79199217d29f37ae5e1d34a562c57ecbb751de8c414f32913fc0688ed6047486b2e42f9c6a5fe91df5d89c48d73ae4cc2ab2f53dfc57f06e7a4480ea8a3f15b1d165913bfdabe4c59cc40534c6f5a0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300118889b940b43d5758e7782ecddd6739072fb6023a4a36f201da4ac901034854f031213b429d7b4a4b9f2366aefa75d305d75a1614ddac709e5b977340083d8480028d68dd3e1750b81bfba6884180ef5af4691cd7d5e773ce111c2ee93fe5afbbb125ee8ca699408231a3cebfb662f912bba19ec79d186d7072601580404da871e000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af1faff10e0d1207d9bdb75a9dddcf1f3a46c68f5889ed8c3e6b680c7dc73d82a38ce37c979e6a28708a47c2f1419fd154acec52fb8e05aac13ca71c133e7df977603ac4f960dd6d5f31b4b80e6be9614fc976364d643702bccc4d8a07cfb40f375f5ca685675e80538aef8fc1796a978beee33cb4694b24c4aa9d784763d50ce5866abf6aa179ab75028df7d02e91db47b5ff2b733fd0013be0fcc2e23c5a9edf104adb0103664618667431612eb0aae5ce393074421975c1f2e1c8c86a1619fc93a3ea7b363891c8ef9d8bd117cd3875c3401c715f5acf254fcaa3c72b2884a4ab52e55a6bbf75453810d9b6c895163fe3483be292bdd2de97b16d99c97da07523783fc0e8fe88c78281bd4889ed13d6af59d0d23b8a37d8164206e3c24372333de2a39f63abfb9a3b7cf3936cd2b4f7359924bbf3c48eba77c66ae61109a2ed8eb9724af52289d6b77841857b4f911e51e9894f5151209ba57304102398e3b9f37b23afaac5809fd601a2e5a25d6ec5384f31fdb6a0bc94c3ba02ad4c85c961eb006903f1ded95ebd6c31fc9da18ecb0d136bd86654adb449e31cff3b99e6cc57881155e73140bfbf487e1d5385127824bb5df3ece3465e42804de14f08dd0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010f1ffbf10ec31496717d282a7d10e4ac4fe443a7c3f11fd26be714f9804dee8d0313e23e761da4bdd0df0812c9aa1541c2fd004775f0265f6243d7e4087fca70c0038ffc1515ee6dc6645d706bf22a9fbeae7d557fecdc49ea6495d35522544c1d0badf5eee9a961d2cc67b108e09d645e9586583a9ae8f2f0aea1d98ee46bd4ad00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027b5cc9913786979bcab1395232c8a39646b6cb4a25399b865f20eb1379ba6c2833514f24a052a30624b998927387b10a2b42ea233d3c13f5158f0c01deaed8296f48b4f7f5a95b91b9fcb8e3e4cc7c01877fdc628754122b08925d22740a1d23ad45f63b24b6daa170865d3b0cf35144900dd4ea74e6b557aa3bf2926fa516530847b2eb337d5f09a614ac83176dc387d91773583d3412449cb170844e162ea96f535d1b3735ec98985831a4631fcc0b6729e26fa5df133cec42fd90e939aebac19387b7c6e1a2ecf0b27a3f4df376ffd9cce94530838d011c10bae82d3ae6326d8462b654d8298878a384faeb12b15d183b7936116313a85b75fa9f7d5f8530a08ba5602af4547bf4b1cd3d3d4eb3bfeab424fd106f019099ea4fc0af5d15f857efc1c1a9252651dfa76615deff233b110f18922243f5fdc78f1c7643e8fc5973a5f5430d0a56da084aeb60665a4a12f4c9d63aa5a9ddbef52fac4593a0e0cdd8a96c553cf4a78a9fb4f5885c6ad873547fb0f30b8e7d61ad63923a74aa40365c55afe35828abfbeab38b5dd56cfcd1ab9a87f6a39d290513a5055dd823e7ad9bd5199787b5901d5b449d6f889e42d489c6255cca626ae3b12e4037893dfc60000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011337406363124a69a74b29027f74acd8bb3acbaaa4b1ed54823656789894b32403151d99091dce8064eddacfadb1b58b628d8c4c84946715b6714dff9e947e8de0074e758060e4173894b456ab94992a377e94527fa602a0e4b908c5288954c1191792b7b1347f6da21c6a097d194c1299614545647e8860dd8d06ea10e2d863850000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f597d56a10b4672bfe75b68e05ff0611456e36133a89c1de2ebc820872866860e1c5e51cd4407bfea4855f2bbe536b03830aa52e8ddfc287c327c504bee30d977dbed0485ae80701d30efe9745f144083d99dbbab4c932c4715fa457cc21fec3f24ad1f68c27bcff991236e89086177a215c4c7eb1b8f42fe12b2c945edcb6da5b1b18ae0e41ca55f9cafafe1bc9ed2adacf77e7a2ff2ec2489bd5cbdc54e5d1b2070421e418dfbdb0ca7899d710f93303587a31ee1a5b49c10c4a87eae38459c382219e347d95b43fc94c638168f607e63cb11c3a3cdf5715f13d137950776f8e568fe8f8a9c0a22be03a861b4b7ad7bb7e93630be997d8e53e05fa0179e6cd626f296bd2f784d07e8b3292e165933819af31be494752a58b07e75866539c4ba4e30fc2f1e0a6b3c1fce44520b16f745fd00f799b2a5d8e347080e123f96062b8c4aa6984de992c123b68d0a03d786bb963897451540215017d9d5a8040052d842512a8137c72ea5e2b208b84d3ffd2a71ff37933f2055f59507ea8e09afc3aad04dad8846a97a6918dfea248d3bda77bbccb0859e9d9183673ead4fc0999f8c32084c87f04da1bf71443d84d0063bc156800aa13bf228451574e376139db70000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300113e848ae7098a1d2db2610286e4d86b231aceb588ebf1d65e9b4d0a17e8472d3031898858f888b6bb56645d2a7f81e856aebdeb09e99964b611749e33db69f8e3327999a6a13ec7e46eb599e2211cc8a44d9f9c7771960bd847b056072dd64f4f41b257e5338006390c46f8804d3be8e4d76ad99dfabe6b8b12b2d0c1e7cf30997000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab3fa5754472de6b072d4054df08a3cb84243f92cdb791cf82e333ca8c7007716a24edca05449fa1c4dbe52f1fbb90f789c75dec9c6928bda15f562e27058030c69f4470d800b242de6599986e5b23fce240996c6c5980c214d99bb6fc2198f40517d28cbdd2a11256454490b837c88cec3bf6640ce42b3b2a3691439fafc2b8067455f17b7976ce9b2e5f7a69fd67b6f4548be7891297ee2f2647fc8bd7845237f57f49d1339b4078a89217c242632a50fe8d2462685de4e308945ce0af4eec546feb930a81493de8ca54067dbd18479e1eae5083fa449af0b25f149492524e336cf7b3f443bc9a6b00086c473aa12d41a3e56e937398c420b4cf53b5fecbc35f1738d484166dc0412bf10cd02d10bf3db4df991ddfc57694adb914244aac0a2704750b48ecc15dade200d98e806a460238160c3e30585bae451ab0fbeeb6297ef56b73516bd3ff9f912c18c221cc1fcb587d67c17865b8a3d1f8fe26c2374407f7b1bc95837f18cf83ab4372b7e5a1f65fe0286dd180636efb8a535e69869a82f2ec6a438a95ec480e9f53b591d721c48a734f91aaefa76fc07cc99671c125d11adda5dfbe716f108630e2d3e2da7d3b415669302b434283ca27cf56e5d0ee0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300109c0e188f862f364e9a57bc9930743dc4b6a375f897979d3b28481820abef9fd0318afe9ba8c3d9fee635ffc21a9aef21c329051e66a61f992c126d8baafd6a3b629be9209a19a9ae9127253bfb826582a65a4f8c4ac449adbf6e1590f10c0fdbb2a11e17eb94fa2618bc64fa50d36be02ab4eb1c22fedf4011378af3425876c70000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a55c5134b84f4fec149ff667eee739c2eb6326206530ff26813f842c1a1fd46b4a52d9beee32b76e9c3661d7a4abc6a7fe4ef9cde5641655c57faaf7298c6567327d0d32a34b6e59b02da24bf725888b310898a6f407f84c39f2355a86dbaf909cc3a1aed6589fd65799575a85c8395608e77c26a236ff61f1bac0331af07df4b1bde5ece81b49b003ce5cde5a26764661cbc9f4592503cda2d27d541da58a5aa07d3acd5f679a27b26d327c952db79171a647fbdec54e113a40dfc69c5fd493b2dd46cb06d07fdf83dd7af6fe3189349ab0ca5d32282369231561cbec23859697495e912d14e879a2510a4e1a2da134d7aa01b66c6a96cbc49ab00346305c66d4518912300e745c09f90308ddd1bb62d2b39d5a30c25ec18f85ab7e4d27ec65ced5ecf138674b148297bb8572fbecc9f05ae0475f947e31836881a7a14de587d83c9b69f5ed71a5465214c0dc73b2221609aeb1571933c6a377e6a6684d18b739d8c7ac326549375fc818781fcd72e1bea00cf96c560b2b4dcaea9e6f0a9471e76922aa8097b7d075d99410f01f0fb70c34cface80468978f3709ad2979d88630466094f08bd0bf0f5cf3ee939789d4897092103247335bf191500d094195870000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300109beffda2dafb7d808325f2735b3b15aed3eadb61d328abd2e37cd0bdf9f907a031ac972c8ac0960687aa151e12ccfabc357cb8fec9fb451f8e15e647d44ba38721857787ad18bde2e3081268b8867d40d1ba182385d8210f8273f44e816361866016cd1c061ea3a0bc191c0c514971e8c11ec137e0bd55d8e67abd453784f52150000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cb4da21f036fc7ebc5b429d1e607164c3a0729067c9f6fc75d12388a6262dcb1e2b9d919eda6bc222b317e5c7dfe3356be8fc66b0124fa8a75bb1262144e76511a758e9a5fcaa2a1bfbcbec26d58413075e797d4a8f2c5300c981842b9f11f73991cdb53bd1b8345cb9d5dfdb54e5e0af05252b046b1bfe51a50ffd5d98043ec0490f7f31046dd6d0fd1bb0c730409c2e8fcf2398071c2431c58821a88de4e1bd26345ee0ced9b1a62ecb05d67ff10cdb5b3653672067b81f3e4a8e16aa0831ff60292d4eda511f126196e4af8eebb07e0a2ad2d2d23b78c852d442a3fd0cb64be48b2a54651b7340add024977f0cbde3179a95c40f555fae192d03823c253c0497a14d1a1f0ff8f55f87b2deb2ebfa0d44e72a957f5bd9b8976e7afc7483a6754e39b1d0190536e030c63be040d5d97d5fa446866e2916f94f018fb5a6b2d02cad3d1e2d2801c7d292ed6f38e0a77a6efb530fcd0ce0d31f769db69807a88717fe34bfbab3aaf75837efd78d81278bf99750479c362d61fa5ac0bee0a8e1cae69bd567e33c60559b5ae8d9b9b988b8d88d0056e0698a81a46446718cc265e05c330e05211fc9148e9f7565217c466c3679c5047e1ad484aa5537ae16d720d80000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010df42f64b9a27ddb3e0ce07d424e3a735634357ca3f24b24985fbd484d618f80031c950307b14a6c5dc83cb553983bea166c711014f2775f072e752d8b884264fe220378fc4b5ddc63300bb37ab2a32c762e8292f37bac85f7c22fcf3245ec245e0e3c383dcfe569e8a166800d148ec5a2a7b8c92c9f70b08e5bd5cbbda918daf20000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002db94b9a5437a6bc555e22d916c94a72c8363b451da6efd473fe010d660911da06495f66b592a842be6a5863285bb1b017ec15b6f184d511d587c1732fc6b7c3c1218d65b329bced222b91f1bed2dc6e26b1d97cc225c6a663f171ce97c87fc62d69e4cd0d0435be6df13e96a8a7bc208044b1285c6d3579b5a7bedc04a92cbfef40c30b49d33fd93afd144816b35c265fe849929382a28cb1e8a23accceb7a3dcef28cb8c81e136b0b9aa32c65342376422c848f0c1641cc515763addbf680bf4dd67072663dda3c8f38f9c37c78b22aaa94ce4d79ae698c9ab54f4ec99f1d616dbf759651525e17b9d74b5c996b9f0d69129e6071e2d77174181cdd2bf7c8a136fd47c5b39d9d9b70db0f7966f83bcc44b3d0d7f6661ca200b81ac5b2867cc477a01da16e65c8f3796ca48f2705a4067a95f766ac354786cc1a17463d262f77e890c80420ccf72b242f5957b3846db93ee1dcff78c6c9bddcfc105355b1cbc165a1c1388fe038ab9dcab8f125a739ab90f76acbe444ed8cc4855a70a7c4d5d86c65f97a1cdaae1e32b17eeaa4ef874e2ea48c4dc0626d4f901005fbbc08adf37b581114049428744c26f73781895450cc459ae64543644575f067243ea29060000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012fba90924e70782b6433ab3e8f68506abeb6e4d1c451a370b95371007a3c49d0031ce93086db88074ab2f7dd60411dd27e3726af57462ec35ff8e4334a3e114c65055fefcceb8f394f091c7621e5417b3612401b2e728e289147ea087beb90a21d20e355b4ac6a57606fb1c79299307577e32da906a5ebdf6b0bbc6d3bc5e219ce00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082912fc312beaf893d8c8e3f99f15a26969e602b3979bd768e134ebf28f166d57539bcf2f615d1d30cc086aa3b2700310591e54a6e28145958878309a3fb8be09341d663ca8a2742caaa754461c9cfa9e3f40e45b50802f8f725cf946a5ce6892263598b12faae5554034684dab5dd2a22923afbeb553b9e920e066bf54b2e50124b22c3eb0d11fa9453ef5008f6dd937a51613aa648dd29f5d18b69920abd36d076b481092f9e06a5775c623ac3e28663a7a79785c5fc2fd288d5f953b3879fce46248dc2cc4d8a24df6daff6a02681fc08e81c1baa0a544a8ef77841a9a3de73309811baf9444ab1bb31f594a5ad8f376a5e656f1030d4b399570d5a293ac0022e9100f11095ee00752433cc57bc6b8d04f2ef1deb17981a356b4e808e1b16be148162c2f6af80d3a9e44a60c58e7f0c848a117100659e90834935202e3f6666a705a22a6b443083c5f56856280b412d6aa08bf360e08b60bf425035856b0398fa0b85504bd3a69d40d0d3afa3f4bdc0eb512f7d79df89686aff956a229765996ed1dfcff9f0de81f68693a27ce7191229453e74b8f3fcc6ceae100d3e888ff707b0c29fd388ab4c8f57edd4fc7f69f7b1f80653c82aebc0788bbebefc02dd0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011b6be2813c7427134646bee93c6a8d359bc11abaa36e5cd50dae82739b885e75031f01323990f553a7d6081f760ad8d07294fa63bd8e02575eaaf3d673bdc9bac21cfa5bbb77886a4cf543ee1e2d68e78dd3622561f992a05109247e04a9375c31277507eec79195d92f294e0b93848d6dffd6b11439ce74d05c9e80f57aa51b460000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c64186b2f3a057d05e0d9db99e90c35e5a9bb11a8761d24e68ff4509d064f0d686df66ba09057b0f8eca2393b73c89c3ba759000a4eb030dcafea5bea9b3c5d17108e1243b741ca5bbf265e2135c042ea0fd554a5f425b08f9dc38593886a260ffde31fb3c7d318dc4abe70960358984653b2aa8135b4523e784e32d7a403dd3e1faddec682a9f7adb5ec4ce12268ebdbf861f2729ece96081e308c48ea8ee5d1d355fc5a57c31aea0b9ab6c0b8543c3a08876b9d855c46495a8eadac362e138e86732d15812020666350ecde84cfe3863654635535ea53758fdf5bcefe06362d5c45c9448c4fc86c6c775ba9e841b3ca0ad3f7a08298b110e263df006ff8ff0eb58d6e76f1817bc6179f92db79b045f53db785285b379e29ff34d0c783ca7fb8346ed95298f24bcae7043df6df3325c2c191535e17faadf3d56a643086df2b893f22930f79aad66acd08a7a14e1eecbc0fe57a649784d3b1f6299871545b292fd22b8f542462ad4a33b9b3f2c2b87788235d2cfc592ccd5fac96b5a4f781ae1e5063391728e9f58c1be2bee670d2d68067ff4e4aeae510bdef13cf99e977cda995f06152b66135ac6a8c00504fdac0f11b1273c81fe26316dcc57a2634f8ab0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001090a09789b39154b22a4f841941b01dca0f1e64dfff6e27c3139c0d84cc4703f031f6f3617217f0da4570102f9040e44387bdcaf069908b8cfb2ea495a744c37560c06e1b8dad5bd3ede6d12c9b0cb8042857dd8e512e4ac86c628a37aa84a73041425f2fb9a410f87a906c9a0b8fddd09458b0aaa1f063adc5a868f362e65e7df00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b347bcda01c277801f044566b830c58f790683cef13517194d0faf96cab31702db8152fa78faeef02f577515873505fa6db9460093eb5404b1d466dd68d9c1ce6a79560b4f85db87eee39590fe49434aa81b0710078df20017600f351474265eac6b3234363f2163376eef3aab86b7334e642aa78a5ba0f11469178e04ffe58ff037e308daa24b6a03c82bd69ba80b9cb02fcdf505eaff4e7e39d1fba5cc19b7767a88a023c5844194e6d7313622f8e9ef38cb59470be2e1ad628bef5ac7e85116f8aa0b507ad6a0dc660449ec62de3a0f05df9d16fd5492d2ac470f34a8ab94d3dfd760cf2846c2a8268b7f80df1ac8f63161072242cd8e03552da33168305fea5d1fe2e017a07318fca3a3c423e43b8e5512effef8d88869c40bc1b71abf2db556e71d020bb8a4be35febecb57b8b08442c2d574ebed6d3819829e8d9979ce85a7a3185d908bc2531fe4bd1201415582fb3f0f6c0c7f1f72c148216945569ffde2e633f05d865209be35bc41967e43aa69ce8fb789d988c6a329498eabf76c25897bb0eb843547d81b2708b4193890e60ed13d3ce89b20e0930222edf087bdef77e0d08a60313b18dc29abb74dc1b19165765b80c6bd95021875a19a38d10000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300107f2a576305f9830c88008759452eee41ef9a4613c5f2d08dc1a16408da9dbd7031f7e651133a1ec6c1fe75cb8ff2110bf5546e7db94c5fa7a1d9545ac3dd577bc249bcb3aa28424683248eea696368cdfde3c592566eb687722d34c5b4c0cb240048b0b406abff78641ca5bfc752731441d8790794aa215c022be68a897e4b3cc0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009dffe1b5ff8c6dac394aec8215ce2fd8b555b2ee99d46695cb6b436a07cfc08c6cac64d273971ec96a1f8c5142f648779fc4c4cc17f2151cece69bc16b085f1e2540e18ce235a2a000931beb35eb7ae568165252aecd878352119e7e84240b55c5dd2a228bce75b448ba7fc11ea638e5b23dec76141642cc99e74849ddee1b57f97c05288d6dbb6f2b24c9b49cd72f46a772c64023da69477858a2f8ece3cb06af9905110d70af623f6874633d8a96d5f668b46664a25a3369228158d661e3e904af8643210809dae9545a31e7772edfbe759b6258e35717652fe6bb3e3e4d670352f60fc818b4fddb275845c6c2f147f84ed7c4d9091a51afa5c7c6586ef913bab1695981bba1853f1dcb8aa9dea903533bf9b477fcd74cf9bb87b9e9f3602d107a26ffd1a852a26316cc9ba4ef5dea6ff840233ee510d3911f91ab32e1790f5732d6532e789a390ffe728a9e3df126101c987c5ab1bf1dde18963a0ad3169df5cc894e5023a9fc4057fe3bd62974994c8e662df60103b1f396f271cbca8e5159b39de2fc1e3e548f7bf2413dfbef852cc0005959d5129c03db7e02b87b8a23f088d98ff475f5f6de99c7ba9d53cd5f331f7b717c74fba97dd97cabe10c764d0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300103b9ea85c2ba3469d4304ace7db940f8a02adc38efba802125b51198a7b2de6003218f68eabe2ef50c7a6718761f9976f20eb3eb350946770c8d5b084f9076630b22d68513732ddd0e395b2eaa465ae9dba125b05ab793152798008efbc12b37dc2fd6a88c3b0e684e91351c7cf4bb35f09cccdafccbb4f651c22654ebd846fa860000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e9fbf7533f263ed90727d99ee19f7533892a03b39defefd3e01e6c249589dcb9cb3a3d7e8ed1261c54bd3f22808850099f3072d324358705644eb2be08ebb2db7e8e7360830957f7ba3ab24977743f9a635480cd2d1aeb4548a9cbda09dce4e0fe2b2c42662746179e034d71854b3a60083a8d6533c1f54016e9723f95ce784950f2cb971e4d588e13d3cdc59176299361135b11c15c2fbf63d365c6e9d3a31b070e2bb87252678117c62d8072f9f695a6f586c51fd6f4f2cc90245254968b5e56bb9354c6229b4e1e1d05985069a67f5681b0d8e53c30c0767fc4cf76f3247266f8022fbc5b34a8ce6347a9e6d5ebcf66db22d3e68de2f3b2ac24ec86fdaf82aedb24a732b3c1f6119a283aea802d15fc52789eb43cb092b33c4bda9e4627e4628e8f8480e91d014b99a666e526385f231b8db6147b1a90b24316f2fc676dde648198342963fa1e5dc9f12d588a756c6c5f4ddf72f3f2b42b47c7ecf52034461027656dc85d2bdb161e8ace1377843e80a128510461b59220a078f4dee3e30438ce7fcb0bc351f4116e1c0cd20f5a57f0219dcc5531d8740bc39e7ad0e92dc64cac11b180adf9abec978a5eaed37a4adf357d934bc64ed0b83b659833e23840000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011fd3720125f02f681217fcfd7a376aa1239add1d5b64eaa749c8ce0c0c2a821b0321b254840f8e29320adf5d690b21656d3a22491525c398edb0c840d229d7a7711f63320254b8c7e95dcbb49d4996cdb76e051b6513d3e8527505947a591dbd4a0c109ec2b2e56d3a4a33ea82ddf92f350262d09a9da05e2e572f8d2f93a576e4000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab4361cb0d814359bb63b4622aa53ccc2a33745e36b9467af79b57fd2e77d6f25065c8630f376572afa08ecfb0b3a59f49dcd81c99cbb881418d6f98544342ad86c5f4199a19175f3d696484a680a96ab1914dc8e26122d7cabd07adae8a9934a78b662be38889631af6ea00815b87a0f10cb3425028fb7dc783da363cef5f060e04ded838f9438fcdf7b90b3077bb885e26abd93b9cdacb4a39ab94d70a79e3a14bda0d989332ed750c411a041eaa93a3a9f9083f641996d135e59c7e07dd8cf6e7cbda0a4f939c28c385b5b2fd087146d5e3546e32dfb48ed1d0799c83540c080d563aeb1b7c0925d874b493ea4184aacd922a02e1dbf80ed2887bfccd739e57957b13683262cb9cb7bf2b5447395803db0cc4712b08f2e457ecd8997b0e965394260d444dbcdf2543d48d9fd67fae9ef1c1cc29bb759acc21ddf50eb061588335fce3e23703f1309c18790fb8f363cea4125e176a496bd1d3173b71729e2b53320215d8c8fbc0f26bf51477ead3778ab8ae1149581f55c8faf4b333fd20f343d466dbc6b13cde002761c078d3ac7922e0ec92eef22be7deaa185d19db32ec7db28fa527c502eabebe5001aa6fdfaa83c5ea72f6187e53e81e00e700f89bd20000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300117bbf1d29e004c95d4ca9b7eaa9d47470ba1e64276cdb762aee9bce371ddbe690322489ebdc84047aec2f446aa3de7c30515aa3c8b51c582cb119be2f6741f1ed020d3906f134e4940d5c18b3ae858da3ff0dacd9e91aca2e367bd6bd8bb8910ce0abd5ff4a1a2c9fa069ce71bd5be512eee7b79ec4ea00855204ece043e16c2860000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b4261f9d9ff36b741935392d680650f6c7e0c047b64dde35f8c72a22247869dfdb045c43f7cdcb2f6982cbb4c734849fc60b0f6f0f361f89d71fb75f865b0a78365899d72916ba26a87ee81e8d9f517974c2658570da5690451785f4d107ba2bb9dbcefc8d821439db40d16c1dff9c175474c6031582d0c46fab663ab31b3c8e1e63d4b1142dd4a6d91de3035c5e9ca6c020334627d7ecdf145bc1b73f533e52e64a427a349495f3a921e4beb48e80fe679ecfc3ab27b34b5e61750376a42ae24b49fd588b18ee96aa3cc8e73890a8b3bc9f7b3a7aa6157c63e59a4300c9e3ca8227abc05318c3c6fef2acb6f569f64a9230b25e7b2777eca2a9d2dcb76a107e244e67179a8d5b4f12924caec414cb864fe5d051a1887f974a645c24f79b62f9b8aecb77bda972b260a00b616412e75590ae8ae185643d076779185301dfd75083c5b2f98dc2a756b2ec66c915da6ec9ed6ef099ef185362a5134bf33a410ec7408cb6463e66e994e0368ade5d7cb698104b79728d28ab9865752cd823786a66e90f39ef9e52dad8880482a7f878aa7c5bed04b2fa0a60dd2a2d0bf9245ee6d57f37119d9fba1c7191b288d8624cc92ea87a1b5540dcd96003e4b1c6b8c82050000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001138d564f16849395bb5e546eef380d6b9b8f7cde7a88450951b73acbcdd2dcfd032636c82691795c771f153136c49190fb645641570c7a1144182f83ac4094eb702f63d3da4defd51b8f88075e57fabdfe54afd8d7a47bf7b230c14987e46b123a0ff371d30765beeb1ccd03da1ffa7755a42529118f08efa2af4491d63f98afb300000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029dcd85e6570add988764a30be42dc46d391b9333beac0e6ef8264140f2d4d4b74baa45fcf7bb1b25aa49f6e9ede7c6e12e73eaa9aa1b23684229b211676fa861b539e22d354ef3057181569009c7b051234102e4e67af8a9a514453ad260b5db30466c8326c3b16ab223dd39fbf58fcf0ac6e15e161cdbff527ac4bd82f47dd0915fe6592023b2bf5fa7927eb2a22071c0bfae74d29891a9d82a5694b15f2d8481af71d3887a0b5e16f9b007cf1396b811819c61cff8d13b0759e9c426cf893eeb841c9e4a40d6764c6d703974cb82449dc8d534853115d92e5c80712c70dfa898304d709f8129480a15a261e7f7839b7ff65df7852558ee8fe4d4cd3ee2901f63a840704a432eed50cac39ac40b422dc9f9e4e58714c6fb0032d0441532c44c6871648be5ac75bbc22364cf6feebc9349c50bdfe2e2510b337832f6d4443222674cc1ad9d0b1c2ba7db5380d3377ed6c82d89e9a705e7a06d99ed006025a30ca15dfd3ff937e95f2acf4705b4c5c3dffbafb285875a110fe119ecdc7c6e193bab94c00be8e8ebfe2b42b45f15b34d90de42501537c0380ca6f3a2c05873b399ee175d1522eae9ccc4decdc3618feb2019f2d0f281f7e97a287536b4d3077ec0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011f5d72501050696ac978a63d30fd93e1bd18cc65d74cc342591b8eb05e6579310327d874ef29c3829e9f0c6dedeccdb90f9af67c49d2004ea51809fb42fce6944d2d276a2d763da53c97b7a96d332661d9908f9d5062ba64074dd400a18d206e3018de96406eba8a779b36401e6ec546d1bd30edb7768d39a099400ae17eecf611000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060a22c66fdea8d9470452cd07c4b3f36db2ad75ca3b685f0fb8007bfc44fb1663dc9aeb3b42de4e70be37e4f69deeb6bee01a956a26aeefc8b5d4995d6be5c76aae582bbb694e8c2babedb97d9d88d72747fe4f97815bf70e50d62028a99cfadbfa5865c5b2dfbda9b63dba2eb0016c2c82479856fb3a18053ba44b244f3580cb0bbef8d32d3ed5269522990d986d75d7b07efcdfe1b25b2f93d5de63ec2249cf053737052c45cd0b32eaf8af6574a54417b1e060087ec881a209396d6dae3574a379df726fdcadae26faf9005906ee81732c128f4c87ba326f643e7b2c2fb74d00dbb8a9281a7d3a5cb2e552a6d16cd640235f1ccbc9deb3cc0744e469d4b0f4c82279d578554c10f55538f6b07917dad0552561e2d6ef7aaa623bfbbd9dd21cf33273af08d2eb577ef068101c63cb0bc089693c9a0e4dbbf36bc68a16e6dee67648022d790b9d4b6e67127d797037a816f52f5bc861b252c309583a5113c26f3b42d7f9e1dd31be4705df442a07b3eba511b7da4dc856cd2cde73838422f55108595171c1423043228dc432465bea6ca3ff32e8359b17e71201f1211b9204cea92b39c0f1e8c9a35d14ff9dec0d43d0425fdfbfb630482548889fcc34e9d20000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012adfd15e3da448f6c62dcb9da243ac04294c5f4590da78e4c949e614c94033610328e05a971aeba0b6f9e98d0290956abc0d685fae4bbbadcd00f9663fc43d2a0a23caa436c86c634e48ab16444d524ce10960fa26814c9209d50c0bc27534f8cc06761e4fafd0224a1cce6d85fd98ee54c345733a337f72182118da6aeff369160000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc07a9bbbdabe88f767bc655c4e8085e40067e4ab1049695aa5ea3492120f840109e9dc8227f60ca46d8c17c180b74efafea5be5fad89e337e5487303d48b67a30895a65d9bbe8bf4d040d1bb0150b03ded27c7ac172b885f7d464765f3215c21548fb2fc02a6cea4b9d348c836f9c6afbd8a8dd3be652dbe6f4a4efe551508d72e82624fa5964da224275c16be58bd24a3dc4aacc7a552dda8b195c3bc2538bd734f4aa95b1840b1fb94c8a62d83b1b4eeab4dd9ca411d5b6702f154ddb0eaab24dd7eaeead73f7c58b95ff51b8edfc43b9d1bc69726b7216f0b3643db95c6d188d7abee642bd3953357fd5b8f1ac01f6e9fdbb54174b2e0c143873104ecf613b4d2e4f8a0c0cf2ff0249fbf2dd80b745b64cf4aecbed018cc069d9819db381506adcfac43663c9a0d7d8dc3c8a4c75813047b3a5148f386485dda501ec14d6cfe87449aaf6673ad8d7aad3eeb03f86ccdbd6796f645ae13318f3744a6c4eec1b9c2f68b8cfd7615f63611ca3fcae841f2352492c645b4bdd091e0ca6cb547943c79833161ed09a50ed06d53a15f8625b84986141d8ee40f08d85224b6cc6f87778a2129f3898f3e2615abeb805080dd6ada343f5d38ce61990e431c73191e0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001015a858dec882d7eaf084d5829eb484d853647c1c184c8872c27094df442140d03291274fac6a26b67e5c99ef56fc55146e54fe446bb620f2075c23a7018e6c0592f422ab9c46d6e20892c9e684e63aafcb1deba36910170b9fe7c67a6cc940a9200ca2a7f7ec21e30e9eabf17f90f2adb6ac6336368bdf177ac29d74a5db0d2010000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c8f95b7fa603d6063c74de0addd46a23c483b293591618b6212d4cad77e22673c98bb3e25120cd2597e849b8a0729cf69f00fdd8a2891144c9c9692094b319aec9f02c210a6f076d35ef8fa1e51a6c5e69d53614106af51234c3316b400fff9204c4cbb14ecfcdef6613f6a7eaa02d9ff8beabf877a6ba255493e83892d14328773e3f628782e5c99651ca86491062a733cab4e9ac58bc9c55e94f9f3ee0a0484958dc9a16acb5ef4d4e94dee2b35cc2bb52df81db659ccc29dd78fd1b30b58255f82a21c4c1b5ef07e35182db2e639836b51e5efb486c5ed114dc865d707d6036939f17d19df5455efb9c208f89059d0494dac513ba8ca4d6dc2ba4bdaa68baa9ec9a8ee9c75fbdc96bbde69c3d75882b390594a4cbb627815c8b2cfbc4c67faad6cfaec3474f13c1603cafdabfdf97d6a6012f11d22f0586850231a90ad25d862e0057ce22119fb5241ed18aa0ca84c6ab8f2789bcb59dcf7b491fd986b2a0a0be07526160841e036ac49e0ce2689614cee2cbd157d82834897f0efef8eaa71c2566a6b5551dc33da4d84c8e86578894949ee7d1110416f72be0cb26573b1f31b7d272cb917f74aad65b9b4d08c82f4da2ef0c870c60e5b26fb42cc7f35fe0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001129f34f484ee7405d167efcceec6c23a03ceb505c37f2a3542fda10e16387513032a095efe01c79b56309329d80821acffad6bf1e0c1716c06ba0c87eb22673d180b53ed545bc91e49a702a454a4e42b15863435eb165921f046e460a75b4ac2db1761588d4cdbfe5105894a7db25df0416f0f5fb213fce7604180f3a71009ed0f0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c2fdb6da6b596cde3bd3db8d3042872816062b6f6dc1e3f7f415dca8797ea205628476d39483c017efef58f7e2aa98ee5061cea483f5ebf3e078e75b8c62ec38bef9c4ee67e7669a094a531cffb7a8cd60bc70ac4cac405a3ba43f6d36544fad39e2782886256e34df5370a5c86bc732fd4b6595ece2150f108decb2710fdfc68860c5917a829e47b65ddd66bd6b84228be2e4175b81edf0e1d3a4f05cb0e4a54b1c4d197072ce6f9058c7501d1f2b78e3219ed671ca5aad5c719f97a13565531815ec602d6c5f397dee475abafd47d26080c086be6d31e361d47847a98854f3e3403b72a0c450ff020de2c0bbd7532c7716e31f77577a7d2555c7ce920d67b738d6596f8d1ff188b2b59abd0eb8c4ca036d3ac54dd76d3360259f5bc4b7aa4516cbce2fc1660aa714431fb1e3c79207fb1116a8f43d79f88ba3a6b9a3149ecf9bdbee0d573c45d577b0dee0e61c0f4288656a13ba19dd2fc479730be54aeb8f88e11091b5769ebb6329b28d1b130f008709d33640716aa99b191af1d1118ba0fe0067ad1ad325b95141215216e0c23e1fead42005cb49d71e76c18068e648ba6d14aca7b3551d03a01dc1ed3ffaadbd4b6b53e0b1d5af1bba08f0c703a7a480000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300111e1efc170f9c23e8dcb87d87428698dad0a1a78aeced9e75c9679bb61062be2032af7f55bb7a174e6f8134574667b53ff24099863e00265a2e76b9f71b2b08df626416796bd9a36d3d6ba5e1bdd173efd6de1ac07656b045f1253a5425d0acd431e1f71a9ca873b09dd01bfd0dfeacd7cd0f8cf7375412ecaaf316c69642a1057000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000237a70ec3b6ed274127665969d79936b5bb1fabd453b696e1ba3a5936b4778c37ade214b50b6cc70c788892d825a53fa2549b5f7ba8e9c44e85462a30210713d1068e41c27601e962bd45f16b4473ecbe61fc80fc056bde8a8898741f1b7bc952bc4cd6177c5cadc6c7c0d3725c9c3972522e5982b62ae74713808653f5f0c623533a09d4b1a0d32ea558f5418ae90bfd9c04e56f44753dacb8867c510bbc306e4df094ed48ade4f7319301791ca2f27ae7795cb99c7fa27d4b7412cb292e433977a51d614b24ec03ef3da87e38f546b9dd4d138153108e9af0359b1bd678c2f27b0ad5c53992d632e0ca1bd2baaad3d75004c99946bb87ab89bc4094b40999c236cf97d82eeee2ac8cbf07fb51208965e36013c0d2f434545d82f1d619c1f8dac6818fe887c7cb2fef31cb8cae2b8fb53b5e727ce9d72e4fd70bc1405e7b2e175c313061b0d2c31731b351f27be3f2a365051ade0e400e24e64655e86ce3b0fbef897bcfe1f97866c691a3e267d926d1e5b5a705905d558deda58e1c5b53bcb28d2a1f9a0078fa340887d158fc12081c8fd31e74143a29aed511d67428ff17f208c4198feadba378a1ef0e26a633bc92f20e67beccd2f65fa5e1f73d1f3163f0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300110ba2e5a5f9f033eff44fcecdd9c3f270b9a02f24fb712dab91a4c100f5a7b83032b180805e88e64a1c9074e68636a4ef4c0c1e88670085f2484eb6bb2542e964524d49e846425fe48c8782302b50a3f55a3700c439e688eb09159127e47590f2103739f96a436cbc3c6e4549cdc824c77ca2dacf15f7061994af4e4b49088a87e0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cc5fcae83b395cfa81fc9899035a9483c166c385844db4949ed46705d665a6ee3c555da942aab59ee2ea1fa428794c0b78e88a6f5a5a937736284e3eb866b87d57d814209a22a298570463a99173c30e266d628c96b9f26b18607f79ed8e9539dc4f13a12f5cc8a9488a2db17da3a3ca62f3308cb4ab664179432f8c1003bf11b7093620d828e54928639477def94c068df6cf06dc3d0e76f72b763d0ecff64d4d15a3e98e618166f73cfdbe0ffb8093b44b31f286ed9e9ac3b9f6eda36e1af97c9e81246630e1e5f069b0f2c6cfc073a5fbb9b477f5f49c2f2374381da494764d2ef1e8d1c5284bc9eb8456497b798c3d96ea916400acf94613cb77c1e9c8f047c8411f4577e58f3610ca050eb22befc235398895424a59a4967682448ff0cc2b9c76fb441ff964a7da901746ab8e29f43edeaa31cb31052c27eb0d7edddb448c52480dcb750cc60a2040ed5e20361cfe988d925698f716be1a6102549083b42c8fc62de02e6d2d42d345ab191eb70bfc2aad02efb8938a426aba3bf642141791468d68917e328fb4b967b6472549568208661d9dd693bc72ac46ac23d958d1e52e8cbf4f79db654c9bd7c86de8aadd7c7e91d1973440829eee3dd6391ed0c0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300125924b25a6eba38f7d01de81cb280d888eb60dec63936b476409ce38287c0725032d73f919fd82fa47dcf66d96edaa3946f9cf2548a53a0e4f512a56e41b2c6ff126919b6b103a499172fbc149a1b7bd71dce2613835c3524ffb75d35365aa64192555778030c094e1eb6b88df6c4d6786276dfdf6fe3c9feb81a1c5b407bf7f73000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aaa9db7750143c629ca8ecde4bdee4c07b8c0dd8c9108a6a3bb8570ae339c8ae56c2e7fbe1911bed130b0fcbc1f17962757e50c7527aa66bf221dfc861eb036aefc12ee803ae53dc4466b50b09ce94e261e3529d72c4e6b7fa47e5001d1d005f08e1211a1ace30ef33dba2a0a642aa06c775f45ca5ad174b93e2fe330f791327b5284d378b53b8f94d989842ebb5ec40bee1fbf26467c6186d01ea1808bdc416fb0bedc58485091f951706a52566a2668aae3d554ae160e82d7660cd620abc20d5921fe566ea319d2ceded78df64deeadcea27539654c5042da13cb61233c8dcca59b28400231761444922d3afc89a1d91bf6384e8b6d023e519c2700945fffba1855c608ab8e77be1c10a96a39d68789632609c6f407fb41a9ae0061e9c009233a65201b9a670987aeb38a70717cf22af540f567f2a02dc633d6ee066561061b79880ddfab504a9df5f1293499a0b1647a105e5e94c9d1281eefc3a9e25ca33ba583a5a497fc3ac538eea1f14db1cd7ad78c3c2ee0939547dd122ba4660cc873e9faaf1a373d3a9953007e91c6f5b871389817157aa6b5e55a46d8542ae54b28676e45fb7071f250dac66dff2478031365d8f7e90f467d247ccf3f3f416606e0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012be24b9b574f7f2129d910eb25f57952e50cbd0d6819b0f9b98245350f211844032ed379258090e5442cb00ab793268c55dc00228252591cf847709e3ca182a5bc1e5c1b79d47e82d27b79db5331e555b18458289b33486688677ea5fc453a67aa10965a1e435a5345cbea1a3b42f9e9c5dbba139bbc5891d9d3e9a3a8dec7fb3b0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000407c54e7e2bce94fa74ac05b14149bbee327c98a072cf8f3c3b1e73b18b09ab3f9df9a4622f9f37bd3e22c04791ce1fe163fec41b45dff8d75e1d2f2e1f39324223ac50a7525acfda52e39d792c033212e05b447a79de553e525aeecf0b21c92166c64012295e0932069130a4178bc0fd25a2a6db5e342ca3353b2f38105310ecc17b48583b4584b4cfe58ca5cf6d58eb03256c1384d920ebe6c61b7b59eb7e2b21936c434ec5f4e33df4daeabbff90ec5d8a074e76a6cdcf401480f02e3a753a4a23e41053921af9c897a82e2c26de63d0a10692823f824a69d08becaafecf2adc901e19801e298757bdeae167fb599869063aef5d21218a206cc4f9fc4b5a01f48c49d30fa4a52ed61693fe9188049d2d1c93d23bc2adb3c49f28f5d8dd98b0c3e634d5296185b48e9d24a130f48d22462e287f5c15cac98a9e12b36902dce7cf45d7c3b25bc73c93011793b66af2e449b664badda278c55a4cb0ba01b4495048636c4fc6dd6ba2e74969f27f74d6d1d54e165395854f88e0b38d2a2a6e9b17bd248d54f72c11732b649cc0605822649566ee05d6ebaa7a6547ac1684d4a16b406b7b534f1fef84ebd6f06caafa8203f45c0d1766aefa47bf20ef3633a04a0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011bd57b50bd6c003c6368142d9684a886adee5a2e84791e54e94cb091d12b7069032f3cd2460b60833b49e04d4793ba13f5fc81135c4b6b953884deb9443b4469972ffd1e271f3a17885dd11519a475a555af956ae216147d3620d036cb3c73ed1f1752b96a474b3c94711c02a7decf1441b46f6b519821db5d8023b451ac69436900000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028ac153808fc71c84f098db7c5ab36bdfebe584ceaca495cba9bc486001895e5f76dcf2c6ab3dcc79163ec201f342eaf206805b487f8b87f6cc60894542f2ebb06944fa1cbe4cb97dd3603e32dd9255860232c3ff8ad764a307f24ff7457a8406d39f3eae33dd4af03da0207d151d90d1c55d4396c571e9563c1d6628ce5fd0d103384dd7ed0aa3e1d7b9c819f8bf3d962ce1f7036e42fd804d4f5815dd6c78cb65dfb365521d9e448483fa9c20ac6dd20e52512c49d0b2337312a99d9972c1d6b788095e7bbaa393aacb41182b3deb34dbb4367ffbe211a7a3c7deb13fafc3dc72647b531757997086fc47b44e1c68315420d7d5225e22730d2bc85bed122c02d0269063d7657132f8165fca4794510e6d074a50e6c1f558733ed57995681918cbc301c135abbeab22ddb9eb9bb1eb7293fcd361f84c7f202373e67cf14f17325c62b1e1775f606fce62f116cfc2805879c59f5834689c28d5f8bb7321fd28b8ff68676c61b85133700d372cb00224e87eaa8de96bd6e713e4b60a649bb45497b7cbc6a32bd1c6ec61bfda292858e149e6a3845a7569decb1e99aa17e88284f35f581f5535a1b3191ba68762d2f0d01f788a22b0c3821ac562b8b216c17675900000004000000000000000400000000", + "130f67668a3d49f6a16e89771fea5c5185b7b10098b7a77981e749240533b2470000000a0000000000000000000000000000000000000000000000000000000000000024003f4d35d58e6c0ac9992b7e7c260f026058320674301b177dd15a8810ab214900089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000a01e3f70532a185adfe1a069c03cad965745e2d41641f8fd14ba3c3d916e8dde5b000027000e539138786e36a37151757ca255241010b77005dff1f48d425615033b749dfc000027802bb7f2372436ecbb2ebd34734a7fbce7e41962fc16f42b0c006b3b074082abe0000027800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000070dbda18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad2ec2c020d80a56d67df731a368e243d1f5841390607d434319df5abea408ad9817e0460000000a0000002400000000000000000000000000000000000000000000000000000000000bebf7300118b43af0409ff31e5faab8842c9a245d4c1595ddabdd8a256550043cbdb9556a0300651967c45e96144110966b50103302c34a6ed29e99395a3f5733c447e77cc00773d3489aa1fdf18ab9af389885068fb828606b3e087dc165f33d6b4aa4028e208cd21c62302c46847281f25a89d25e6bc897b35ac3e8ea7a7a542ab21ba02400000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086954355c8b75dcea4afeb9b208720830ea4b9bf4bf29c10c092030347652f93c0afe2c6f65030d2f28591b57cf362d23d4390a29094c91e930a7fa773c5826789cdb41c379482a8628d3d4ea9f4275e189eb7f6f51c9ec964b27354c70ee521767f9557a519851503ae86f4808cc9aa7e2ffa9fe103d38c7ef96c60a8558aa5a87977acb6f5c78cc0532fbf347014fcf5d55b7e9c3dab6e9563c642a0b07e00e92e73b32ce40b5b5cbdb91175029026fbc403ce1574567d242a90567711601ad800b5d1af1c44274167518cb252f255f04fc93c49815f25b6ae98de38b1345ae3561dc1fa062a453ca8c5fe5763dd7c2d4fe79b252c0f71286a3b5a38ecd6cb50ad245dcb142ae089f65cb9f02df921d6799c3caa8bffda3001621b069156aee75d205d9ae200fd58c1d85077a94501d28a0d916943b2b0c0333117b1fd149523084a11109f87600288639971c512048ccce9cda2b56f2976486ba9fe9d6988fc8e002d3567e3a12baf452f4f9de9909de89dc12e7b2bdc26be83b6692905825b5d847e3533385c0a66c1a5ad687a7d891168ff3d987fdb7472bd5e7d6fb8043ccd7e782c69d6a86946858ee1f1ba88e92cdacb10c7600a668ba740673b22fb0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300128ce8619e4554d3badedcbaf4e4522f1e6c6797a04234a05a2997348b4518024030376f95c0abdef04217d7b17166108db68e7a45e07daca62eec31de2fd1502f608528bfcba0869cb785215ace69591a234cc38d3ac989eed39d9c6eaba5b98dc19eb8cdc2627d0c33d1444465458a9e2928808b1b436d1d291fa1ce596c35aa400000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012b2780c21e7522641c80f70d3a76561efc71f1030094e0de9f79a23568a193e05fca76c81e68be64abe38dc0282e6960419656771cebb486f789bc1a0cb77bdbdf42bdad1c24bfd0b9584b07f0d78b51f690ab2ae36cf9d1fac418fa27d317fa5d7a8b88bc955c593d81937ec86096213e929493f8afa8b6844080d2b3c22deef2183ddf7fcffb18ffa167a0e7a3e3f6f5bf95b0f4a853f09cc9e4550824b9ba1ab6f9332c7b389e733b5b87ddee39d5be4ccbc11e1fc2e5da577c392472b8e41dda217c48c4c62e45c7a907b8c2b1e80289bf135c53f5b2a893c93faeeb1c9f5dff12540d6b9f22568e97d0be1d4f9df8edd28aa8bc6ebda9f369f8fc93c17a1e673f3ae4a45115c19d3518e84821248a52c32ac73256954ad6fe9ae055570299ec1eaa04d7df0557a8ed65abfd4aa810b086516a0348c0ff5fe8468fb2a3a071da3f6ec288a2f99e52913b8299d96f9dcc8f5de154c78654ea983791bc77f420529f1e8ce7be0fffd8eb61290b00abe2fea33648568d8693b9e024e2893a81b9138bf25e04d5b3deefcf321f3719addd4b0e20eed55f139ff739cc73f523a4fd591efa29f61ed54d59aad1e6771c246de625c11e72970cdb102005d1e43470000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012b2686796547bf49838a941d00d28b21633d7947e930ce962908d68af29bb83e0303e7e195bff4a15f5d15c70a8e17a26bf9017d73e78b0e9231b52497535757d809c9212cecc5620f30d71c175221908734ca99423f618cec669b893d1b93870724c103c5a8c2f34025374b222f3a86e03c6c7fd3e99b893cd1db2e847705b93500000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083deff787df72eb376e29dd7265850dbc86b5e74e7adb6c349c25ef624c9af8faa2d0213fc3a5557e7257152edc96a38c5dd09b18388b4fad147bcc16c064b71cccef5f1282664d65e8bd7de37dce490e9365f0a1bb4389c3f88782803792b4987c599567d9d5e4f81c7805412080a54a8c13a315a2a69af3775172ccf4af4ecce9192ca016755554792062dc483a648213a977fbd71cf708c35fdabed0e99e2aa9b556c93cb2a2fc085680c8a443a707067508caeaaac44c0f9c5a6e9a6b8ceb6543fac40bc27e9ac5a3a9a4906d8e8739fe59c66b043dba523b46b0abe4842828a946d9c55a6190b38aa5413dbdcf49d534fe93359cb2aacc8eea3b71ae6803f7417cbfb7157f859b06b4e35f2d5f794598eedce765905e07f6eda42dc26a446a44f7dddcbed435823167c846ba8aa39f65873bd86ff12a01f4e6b38016dda9f490913ad5fb2417ec56883255e305389f1a7d51f26ff8d6bd21a943a1109d0ffcd2334311501138fde8027dacd1ba57f5d3821468393cdea005ef6ccfb18eb4ae1f753cbce5997f5e98e081ac5b09e2e59ff869cc3500b68943f6c730e654616f89d159e37e32ade9f6808b34b1ea3004b80d8069895538ec21fc58406a8e80000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300117d213f3a0c8aeb0d8cf6d512c347c7cf14e3810cac75898af1373f0da584d0403041d79b3ad74948ff6c188a88fa99be6bf9dc5faec17b1505bd6deb0eae5146f0e998d1fb88e3c0785db6dc4e78855bca8251bb1ba93fc0138276ca5d303bf5508e70302a0a05ea71d4a25eb9353756ae317866a7c9cc384e3197940a4d8793e0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a47a7a4c95ada6118a4ea9e811214c431057f5f7e547a61a75058fa79f61c44e4c2783360b7e0540d4fde1ddfc1c186dd613514d5e61803bb6ea897cc7d2ab9f867e8d16bff77abab9710f9bbdb63f124d89f4a769ba1f72de4b6a4dfdc88f60b70394901b0659b0838ff92518aaa22e3b0ffcd72570c2dcfa7201b203f9febbe21f31fa8548e906f33a498fad80bdbb476ab1b4a29467225780b5b373711fbc89e1b76aa90e03d76bc7670e87b7cb49e7479e9cc8e6c5a8b22ffcc788ae21b26156b5a300be11fd1e1d1fec73989283982cfc62b887795220866fe97c87a8c2bee37f00e19c99e39b7f4c74bc37ca0bb5abcce7f8a50b36f5fad4d3b4bff9f7141b4a13272981cd842109e7346d4b273eb3df1416518f48743c0124929606a99fdc6011dcca1c5e68ea7c02cdbd1753b314c0720b8f2525c02627a5511ab74fe570f11d881a0092ee330b6e9f6304b7ec4385bafe4f3303b59bb0ff673c01afd96db3c95a3281e492bd28bacb358ab9c534ca699d4569a507a3c4e330db80b5d993f50028f2415cdfbdf314ad352809d68705b10b8a0f99e16ff16daede3d7d53d9cec1597a49f52176952b0a8c5d42dc9f67af4c674e18b58b4afdc6816fb0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010a10d6e88e1ac674ae1d8cc561fe9d3cc0e8a36efe502e419e7765fd23859b3203067d2a72bacec98656fa8d3da699b32340ad7e14e0d6025609a645356bb10b38163c0a19d4490f5aa17d43f8a427db95a086d4e62894c512179415ae9949f0ef2368634c404589669a9ad45be76d06eb7456fecf37e324355b886fb8e248d50400000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097d7ed01a61a1aa0c861e2ef9eb33a9f17bb86f42f932f2d74a141b90f189d1362547797dbec608b7f2b9d911b94b7599f6a4e26bbfabd19e4beb17ba7b7799366ecbc0362dfd078b5f3af5fed840c555253b13d8690d3aa579f5e69023ee267210648c9a1c9875154aa52e9368337a64b96fde5729a2d52ef8627c78aa472d27ef04a626523cc1bcf869c712c623ca11cdac60f4c3a33d40206710ad249b58e88b32d3b99b769787c44af367b04a420d66d8edd190332f9b3170c6d9714024ee9bc9b067d39c50172260b832824edf6877dc0fa45d9652b335f63e73cdf39b64f2cfb728e58c48a62473e34b2952155c4e54840b658cb597f4f8e0fb737030cd0532cec47160611cd0ba85e9ac871a7a1ddbf1368a1e6f3fdd6628da0cc45dfa74839e2fb3af7f4525e7d8e8490dc503c86cbca0710c31ce2e0598ddfbdc292363db130192525ef00177919a8bc9bf574d78a45e3113d449552db21f1f0c408b6b037421f0bd90c5acd4fa0e0babcc1a89e8890ed0b19430a03822870554c91452d39f4445a472bb4073d8acdd03c6e84578e31af0ff31531501a6b751271f1f264887e32f30254a8ac24d8a1cd8618b217f6196c42ba5de548c662e568097a0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010eb548a7e7d01a4e1412853a0fcd25acee7752bbdb5c7709e34950d0fff6ab720306f0386b9d8657eb5a32da133db26f008fbf2d940a6cc8a5b379d9b76d4ce9571e8daed2dfced20c943167e2f47bc20fa07c2312ee24a42cf5ccaaa206399a132a56199dcd3fc460124294364272c0efa0c67a383733a12b622cce73babe468d00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017ad66407754840b20909a5bd1bc183b92e258dfe27e4d53db7be2054f5549d7fdcf76e3689656bde802431347cf20888c2ed0488db994c687086f4fc368e8eea35a365aa0e7c5a3c0af08205dd7144bcf6f79babd202fe5adea7f1587589f3bf4c1bb9ee382ab8e0f91165d6533eed3f9eea943b68a438a95c6e016458e8facf22fc850f21adb3c93c3eba5e34e3c8a371c76d9a33248cb06e07fab67c12c7748221225b4fecbc2921df63b55ac4af413f2a40f7502fad75baa433dee57f37c364381a6b23dd057845ffbfc4ab655f015e82fe5e5c09eb5906df3b804d88010d1013c0fd0ace9798d0aed0deb211abaed21ab674da90cf6d67d4120a2877e54bf7bb3f8ec6945c3a3294f2514a6ab7c5473e7385756e4d390e0b2925f0f64168ab5c5780a2f0762d64488cf84b07719ffb72db8dbf2d59f0e858182afec8b2fed21915cd1ace2c719f8126b6bad478e9ae6d8d29cd8e0bda1c65f4a312a09ce46271ef7257386793e70acd45285b614e76e60435e6ffd69a82e3c692b3558bf8a3f297cd2d56e5714dffe345d554d37561911299c397f5216c9363230bcabfc8b58858318db07d49ec761b4aa293c08bbd1e06476757d31ac746d6afa83c3e40000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300111c34eb063d3f851ca2f58b177848710dd31dfe21e9e16844764f22154cde62d03072d21fb4ab133fe016fb15f95f29d440713c56b734c2dcc84b8f1fc157e640d036dfaa459c168fcdde66688d2b3530ce710ae19d8dac7e5748ce57bcd92d8f22adac6fbebdf79c75f6b373f6e4a0c5a20759bbb8846be78327ca8f6ea47253000000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088f7f146e37d48a00557ef8b8ca5daf6c6c6ebe3b1eea916bd606057f8e758ad34f410efcb0e28479b183d6eb706625f218de61425488c826fdf4265cc9f91cad61eb2a031fd63ce4a2aaed6e76c01b049fa629b5513aa62e67d75a6580b9091380e75cf9fc69ccf5dfa02c0893792274f9a7010b0d7d7771f4a79ca5da0f2d9c0de6105b57ddcf434ddd6f63f6081cd79ad62ac4b07408c3203b0a21dec87d18967acb538d4e19a80741b3edff957f0fb61f26831d65faab76a264e599050524409c44035c8974f7a9162dcc4be9a0566467d037761038d2e1f900bfc6f3300f28f494a060497df41bef0568098b04546ccfeed83b3343fd66151810dd25a94d0819045ed980ae3c6abada7b564760daa3ad5d7da145415f0a3f251f2d4e40f49da8b0d147b7cf271163ee51358834f2eceda0254d4f2729b49f6e1182d10ff99f43662d475923e6a3b04771271929a76ee164b89eca1aa382c1467ce3361d200d0fcf465185d34a830c4a909acf25ee6f5deab0ba2bf89fb79be5c3262762a230379d09997c90372862e5debb7647b9e34aa3c0466adc9f80b6ad9acf8b2643a7f3a2bcfdd4cb6c9a8135f3ec415e5878458d3fd53adc5deef271da9c082370000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300128b3d59957c5eef24f6672bac24f21647b930e84d98324c087b665a5b046fd2c03093436ff3d98986692a6c16906f10aa9308f5d46d29628892ce4d57c176483e3222f6acfdf355cf1a1d51757ed82b36b67889bf90421e45ddb664572718137eb1a9494f1b00250ff82e72ebd693bf267d872d1cb38f04ab60c3d7d9f858ee101000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000989343c0c741b91ea75147c10c361edf2f843bf45b56ebb9c5ba004c4f1d8d00d673ca5c6503fb0c188feffa6cc72d5b010bfa8313efad87066e70f6fec988197d3585487326ce5b344f1cbeb760a872efdf302b3bd4c328b4d8a9778dae602122ef3ef06a0e2cfb331a11350babcc2aaed22204c46e8e4059793db4364bae38cf132faf82d23801ec8b4cbc270be31ffe90c0dac728a9bec2649e3143d352a94b4a4cbd9ac29db3a730326cddaf844da3648262adaf49fab1f39728bcdb2b4a953d0f9b3811dd1f10fe3db6e071200fb0ab3098a839f1fcd554dc9c0ee8a7ba30ddc9a5db2d3d67504fed02fd3fa74b710851fd525f5c8523d5167299443617dfda3a566663b4d9cfe3f63d2ce5f0b402bc9c1582a44b897847344e516443775385746c8035f47e8c0029455a2cc5609145c9ab2b74ff342b51d5c90c0873ad1299ef543d81bde0b6ca7c38f6e15c83de2b766bbd6771fa8143f075162e41bc2a66d629a3aa141c2ff58ab411d684375c8cef4274c2d6f2578f2c97a9bdaefd6274e45ddbce8cb217568fcb9b933c4f2cb45bf886054dfa65b8981811ec313034161316e5b4b8386072d70d85f9528a35a2f87b014375dfdfe3853df90269ec0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011f535e30dad4495d43afdf3983d0e8e465638ddfff206849dc4bae47af62c440030d40b40dc6a3d08af41abcd5c95048883e68fcc31e9ada0d1be6289c3f9a05c62764c7ba56ca441d915cf54bd8e8b51c5c47c8b96df52f1f1f1e6a93a8905af311475d473d1cfc77c6254b9d567fb8725721bb866ade6e7ef0e5bdde0fc7ac88000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000235dce291e7fde48d90e5e1390dfe651dc5fb9fddcdd54e3769b3e9c20f86068341d8c531273de60c0340f258236eb5b997d03a2aefe7ef6f3910334c12c1307e46d313d0ae3bc69ad140d9c6879f5116c2a17c57c2668334bff248f3e23207122d6c52c732f799c32a1650dcb79ce6a88827a2bb7800e75477c9e8dcd8c871515c992815f5c1e3b9d7012859b180dc18f592f1d6048b81b7f1ebd11cef1dc925b81e71a4ec74984b5bdb58d8ce524022d7e6ff72261fdff02aa16919e698593a1d38decbb33471d6ee31682d08446f01ad65686932f865473792bdb13f21bb2e4ac3fe9af5f0a3ddd22539fc1dc476168db55881a31a56adb775c41640018e555ae8fdfc5d2ce07cd77d5f048e43a19d10f642f7cdd5dc47023a7a68e21354c74c9648ed2ff4dd8b69bfe6be238045bf6a014bb12b3a94ac37725ea275d922afee48f222a0d10529605c541afe6306b0ad1a6e91c30dd82dc074412c6619920523c222b68ffe797027b940297b673674bd15efc67781c17d30142fc2e67beedef4a04d04efa4c35d0d0c4cba7e8aee888cc2edf52872e4086c3b5706f231ee7079001fc304f99fc15612a2f5e7a99367a3026ce311cb5948f6c4c96ccdebdec0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010e4fbc13e6541477be8696e16a30e4ea333109059512d5ae80e46435d3028f6a030d8c5d8ab91dbe1bf5880a3deca29c4f03f554bcca50bbdf35d23f8941de08df20b1ddaec8c2d0f4bcde6feafcd920e22f8b6f10473c200565c212f0ea659b2623a952dd124ce039094c65548e495b943e137ef672baa593855f3d24654f3c9b00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015591caaac1515ea4e6bd70013c1f0b452a8a4fb8adebdb6b8d48c5f431e689c2d3e51cfc82c7097644d5989061f77131503a88e0471d2dcaa8bce6dce13fa268eac8caf6fc679aa1005be18cf1038cd38f809b0f4fbaadf6ec1a872f37de736f20044de853aa44d47e0ed0e7eaf9902fcdd4343737daa2b7d4ed0ed4ca7f3a53f34f70430268866e48b82733b2bfecd58d7cb1cf19360dbf0d83eb13b3e74d1ce8e1b0b1887f067be717d2ffeef4aec087c2057ab51273cefe3fb9953a12ef91c168c0f12eed6d371424dbb83c7f02673118e06fd003f1a38a3c72e85e988aba94969315b9fe62b870bcb83cd04c93aa3a29eb95b04d251222ad06e1353e43405cd977829e0607fe7ae3f1e96ba2ada437061db81c716b28e30d24851b38d8a82ffee6288b0f10a4c1ca11ffa822f2c3107a04b88ecbc6f4fd1d2b086ded6ea5bf932b7e7340a51830bf2cd5593a15479e89e5cb76e427df75f4067cea858483b1f83dcdc3565df48f6c71589e67b411b678847cda19153458ca6b6965435c2dd607c307ac2096121b13a09d1545c40fff1da50faa936a516f46502b65ebe21d74b2a048bf8e0d9d9624aae4e8e92c6ee949dc747c96b02a45f6df9ca0451220000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300129b92e92f5cb9616e394ca712262bdadd0d636580be852bfcf1d32c6fd4c46f2031102a04daec97ac60510c02d0c7b3be4bc8a037f809eb90cce0be38c106d42f623079aec57f8b21ea9e06bb98013fb5b31b5f06c9ad853a154fb133f082e92ee220123dd5dc628693d56f7a0be29024cf1bc866e0c94598198ff81dcdf06e2f00000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c43da2082cbf3dc90a3960314097b8d47839b585b6b56cef6d7df44ae19876e4d99b8f1f3964aaa338de1e5886d64b95f5169bae2ff453844dc560dfb25bcef21e96396a37f0b994bbf27d7b52e4a3e0aa2d7c855e8bc88087a4d19d8a721553a6dc9bf5281977171aa3bfc63d7f5c83d5d69ccd9db4c0929f6df331904536f5e853012438818f4924437e52a6006819e5c082d66700b999ab95d33d904cea399d0f35cfd386ba70b8fc4e1395fa425002e1596fb6e173071ac76c2351a73378b592d36a8dcbe686711bc0395c1121508e6f9c4620186012b1a052f865baf36819f1a223dfbd86718b106f9b4fe5b067e254d0c05c3126ab4a762a539b7945e57e852e041adea5e5e1077c39a3030fb860c8cb5ea1fc8a5cae6a063e66e899a321ba6c4897813b46e4b5fc25e40c7751a572854bd74f24a779b041ae50bd64334db931809d7e607a22a759dcae6376301a28416931b1901161273f62949703a322674b68cf701f7668f4f4db0cb378fd65cc52ebb3b1995134b693412c585526d747abaf63c2752ca5b10fbf0ac9bcb7518aea2244bf8d882e3e40b4831db0226ca7294f8b887342b7a8ed94379da587aa63f49d1e08ed01baf81f5adb5b4ee0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300117f2bd02b5166ea56160b4947e31b503e68f493b511f8de7823b999cfb1749990311ce4a0585681863493c1fbae23e632ee0c38f88ecbacf72231a220b94268fc50e50fda6a7f6a31404b5b1574a3821adf28466683da805edc4d79455a49e6283091bf09dd0a3ca76937d76624913f446b60da55184363b2824c89e70d5865fb2000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a807b9d23dffafc64840a28c834c93dfd3d4727af5206681980a5e3a72cb5d1749d15882c144c239c5b88ae9fc49a45db0eaa323378d4c8240f15ce3a797e2b59dd4e226a66e45b29764a79c192f57af32ab85e65a834ff9082a0d763dea1416e3a4d83f6ef58b5feb0ff4a3bcb1c9e9a7473b38e3d81d622f9e65c622611463d222781191d5553c33a92861f154d1d1720fcd95b0bfe978ea1eb4c408d606220cb9fd697aa2b81239e06d8489e714a3476465e5ffd82bafb7d91fb40921927798e0ebfd9e1d7626bbe0e643ed4ecfc0a51688c8c2123bf7d820d07ba3f323f0fdf6a0160e2e19565214b3000e21f1ef45e3d86798da5a10e6748d1d32f808386abdb175bd838baf31183117194f1291edc774c56c4a25dedf6073c8557b716652c83f39fae312790d42f326841aa441727d6a9ad2ea6342c4fb283a21914156550197768f74f4c41fd12ee305a0c337ebeac8b43c5b21d53900eaee6fdc11b50cde5bab29c61d53d560d5cb26091e82bcbf3f74f8aa19627db9d56b8fbcc2b7da76a15c90c7626879b44a6007eeede68418c20e245672ee3ecd01b1cbf39f3d31f025c034c168199325e4ec07f64a38ca848c576db97cc7b5e1a9d390eb04fb0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300113d811bb319c1048c0dcb0a657037ef7f5a2a0db142548787d2665a9781490460312844c6bddef1eac5b67c368aeaa9cd35eb24fb5c18bc5e0fd896f29810617a4165c1358c83f0795c8113018f431c576b60b9f93c08837532b4f097bd2eb44fd0c5853fc936f51b438e292912960a1e9c73a4540ddb0b6334a3eab4b8667e5380000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e4073714e83dcb027f5a5fee3c6f0091dc855b9f65d7fc4486901cf0d8960219366adc7c68cc521d91ed329ed02373527a544807955bfa8326f9e372f2ae7068bb73ff21e704860427e1c2749b614c82a26313267a78a98381f64217f0538d7306ab58b750de931a237172e94a67f2e51e230d51b6fe625bed8706b5eae46206cb1af1204c7cef49998c4e839edde0d784a23e3d8f83eacf3cfea07bcff4f77702afd337498bfd1d62e135eec8cba4547a2e0957ce9e42bec6f5228a7232e7a7cf4cbc5e26dac0df203055f57a1ca6fec4871c9572cabf4dfcda80dfc9ee87a0881a9c128f0b6693eebbb17e8f89a7ef444174a696efb902d845a1d86d1b043917170eaa3d7866a3f98d7f75505d4b8c15723bd5f87727f50fc28a6712a825f8f57591818acb2c06e64486f98e21f98affebc03b4a8fe57dd702f287daf8d9f4aff625e6d5d6f35f946a6a5a605c8ae2a100e74567d007026de86145bf5be5da5a6be9655baff5b4b497b11553e9a89888135dfa1a4c9ebef011f50e16e49fc434960a7829f56f4367c3d63e9a1561761c1f0560111c64c4827043c1e60c0d53badfd06bdbf4f1d0e9e6cc1c593f87d159697535b26d65c17de600a4096490d0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001007a69671968a411abc60b701d88d6b3d6c2e75e5f292361b56c69bf2063ba360312a2db6dc647f7220b79983f0b06474d67917cc658d3c605a2fbfcc76fe8dad423dfc19e4080beb62d4c38b956c95658a939304f05152647f9429db94647da9c109ac3f6eb960b1aede20afdddee5dd70650647777af6dfcc1888de7c3b3439b0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000525f6845cdf0b6487cb8f03b8213dd8240cc6d3813730ed0f6621daa6896d38105627176991d9ea6a3a9e974ffcda3338c56787b5d8e5d18d0a1ee9a4fd30455f6f7a3c80848c5b9083364d909adb151d04d3e5eebfeebb14d77be57106d7bf4e20213a66252259a11a71a5eb7736d49f12eb4b46038fe3af9fc5036ca7ca4bf46736ffb7ed9442d3de05177565fff6bbbd6b9ec45534e0673bfbd76eea26c6b792964f8eaf7613eeb51dda425078dd9f8e11e38ee5c0786c0aa8d7857c5dd4e92d6d3baf61e508a43113b95a053b5557f94015ed56e5247e2e5b2c02d857f7b6a4ff5c6a9c89c5ade3b1df61395b424ebff99ddd4edde653f2aba93dbe7f45e56b5b07d278c0ab33992c28134a045937b4b89998c2353d482e6adf0245c734582ad87f20ca505a5953880e42ffd355b29c31390166a91b8624f0a7cb01ce4b90767bf4261015d6e1677c30a035daf58bb6245d62947f98a4da0164ae87680b6a3d5ba5cd214b4975b3a1e58ae0fdf6ab0305c5268e404fe0b92d968edf4accd3f3b737b9e1595d2974dea46e90b77aa0b183b9abc59cc7a9d97504d2d62e0a8bd84920db354f82ba73d63e2d5590fe3e0e442aa3fd23619a68728a9ae7da840000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300104bc964d97038944d18474846ee59f8eaee361eac8c214d335eef90f4ee0693a0313552287bf0d6a6f842a8c0ad44006745a981e8e218d1951bf7c5531dee767cf20190eb72947849335f9f9edeea2e66d2bdec9f5a12653970b5673228170c8fa05d658483a6f49d2f86b2d723bad651366778b59c52cac2d1db6734c306a2c760000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000476c1e4f03d29e4dced86022c12099ecc13321b3644e9afdb7459c1da16f200a7d81c9a9969d059dba17513ff1c688fafdb1a0cd8c3133337ab0206c7139be2d27b849807fa7c8c19515c7186f1fa8e20e194e0741ab900ab8972f2ea4a4e1cf7fbc9cd25f7afd2ca2dacdd6b92f60940aa1436ff2e8eccb5f4c6f886fa8c946c9428ffe29384aa77c054b7782523bb0738cb6fb99d99a401b25a1f53c314ebe6575f7244d0a0b2d115c11c6d3cd2c799148e4074662cba827174b49708a1225e23e11cec94446356ee4c11a2aec1c4838ca88a351466f9e1ae03bbfbfd7ebab3f863cdc057cb69f69e522b53c3915c5423044e07eb9c5c17d984b2bbba8c3984848fd3c853ecbed234f4e18850a103e404687b2ddd44fcb005c488ffc2b22de2d64023bc004b2d9541c10c183ce901eaaefed86b7add2daea93731d7bad0a619b6c8f16782bbf9f5f5ee9170f0c6d38565dfa9327b1149f8898c9f658bbc4e39685247abd73d59fc5794a1adbd3615d0c0cebc6d656d4376f7141b4e02c44046325b4587a695cb0bfbc0d83d1a7c5f672109c47c5ff9d365e12113af037b97d62a7027a72d0b88367f730181ee4081f3ad9be7597582a3c97c2360ea70b6d30000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010b6be7fb12e7153ba24c857936886032e1303df0827808551a036ea7dfe56d400313fbbe7e2fd30cab90de6ca0a2ae1995891d3f647ec50ad07df5c736d883c6051beef09f64e454624261a637111cdb3d38f7d4c8c46f2b98a90cbc003c048038282618f3875bc33b9a2ff2bc4a15d6cf192d083d0c5471367b4b271819ec438100000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ef8e6f706ea106ba05b0dd1f695f754cdf304a86b89fcb7ea6dce35332e0b3be06723e91b8f6829d2d1126f402f5515e09ff493eb0378860f56fbced1a7b81f9caaf2efed836072e6ac95d523fe8e3721ab34b91db4e6ac69b06ec8e0edbfaf51c5b9a452fa144bb8d0d38e330c498f4fd06dfeba53c3b6ed68d4fac4c3e644a2b9ae5bfc86e23cdd756fc15d3b581a8df4355087b3c3f5e34b031e770f194fa69f69a71ce7318b331266590e15a5cd9cc19213e4ff387811bd2d4a424b0f3525f109a452a9441edeebafe3b46c056e8234e5215b0ddc0d42d0d7660cbc083c1c38e6c94e474fe358ca01337e649163612718db5f0d96cd1b10d5b66a6bbba191b85dc2074295192489ac241024da34efae275592af30d346e6e1b24d4451f1285895f1740838ff5f482cbac5be963c8cf9097b40212e725c85911fe48a374138aa41ce42a155c3724b587db745f5292c6be6899e73eced916415fda381228d4170f3c3878f080f22e8bdaa0e7b98453029c2fa3bb98805a35b607ec6fa82d2c500e638e881688f2450ece94a12d70dc3b267f6a38df799d54586f3b4405e655d7cf9c962c988a0921104f6e6cac2f97ad791090c1996c610f4667178e1eaa0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010cf18657018d0980269efbfa12570f4da97b0f6ee69356a2ac2c4b1114a061b50314fcb7496f7cbe4879dfed35541f0ed210591df551a95d63a6f3d53ee52e4aad2424ea0cdc30d84e22e401126e637c442cb63c5d5e0ebea130a67e030d861acf2f43bcad2ae36bd5e0732abea06e2efd3b0a8e78c8e1db9fcd367d2d9c7e7c6200000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023d275cf47c0c3284f1510b76d5b01478993a7787bc4c33939140c32133d5fc20f9776032befb0a372e75402efab39bd8a39af92b91ae89452a755c0548eda9e2a549a1febb063e56c3493f6ff53a35c20fb40007e1ee7ddee6e23ab9422a515d0ef3f848ad3b8a3ccc2e40c92124ca5a2a5183aa2026bf85da4fb31e5b8de94bbe6cf0c07a16a407c687478368b23000c0ecc8400bc4d2e83d18423adc0f601cdc021cb35c0ffa7a5a4b5c1af22b6c76a1fe126e28d2c39926d777658d2024893e4a2d3a49f940c020332603ac6465a0a0c13c411be1ba24eaa78c9d31680c68f10c80a5954afad688171f9276c022aeb915bce65d875c809438a2f74743bed8181a0ff1e0da39bf2600fa6d01039f39dfbd1af0ef706eb32cfe43f255f15ea66ca4b330f90ef32c15fc46ee1791f810e1cb82e66fbbb1274f676041a9adc8f4f6002b0da0a425d3f5b996f74de53c63f1c45fe99add316554bd03e3b603c812ce48ae877972f7701069acad1b9330a0e463ebdd5dec28f7160d4d72a5eb03c0ffb4c0573d77c4b96c30255545a285ee61a069dbc3e91969dd74da6f3295568801e70db9fde37dbf7435fe1559ac6ac6a7c356b47ca47ce8bc366a6dfba91710000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012e4e5ef89d1b6f012f832cd5baeca8990007d1243e890b851e886574d684a309031552972f25661ea2a4369ad8d121e10b0f42a327cd3a24d0510f4f69bf157a9105a76520f1c01832a8ae3171b12acc3ab38755a6a80ecfbcb12a58cab156ad8922cdca3f9625c2340ac224fb5856d15124f7964a2ba6d295bef3671db8958735000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000850bbcb43599ef9577f799b51149bd6d1c9b0a8f86cee74575ee23fe2ed1fa2400e3af6b99172502f2cb9ca29dea1f10e7a0994fd4749af096b5591c83fba5bb1332cfb894f4d0f99ca971065b4d149a7747cb39159d410cac4fa3469737a0f38e854010a0bd72cafdc3b663c600f6d374ca832d8ec73f339200b14cf9e81a931367772c7907ba436b2fdb5432989d317ad7c2e8f7a1728646f981bed2632783be5f5775cc9232cc246237b4fc0033d5d8b09d825c29735051f860c6c9b575ef92bf1aea09fed548fdbba9e19017f20c3327e7d5483a80046bd95bf41fff33e929b087bead94c54f8e598645eae3f54cb1c8f5d648d7c882ea2d2655a440a36c2bbcd3d912858f8a702642854231ad91919888a92c033c50c722f4d92843de8b1865b4985dcb704659f4ebfaa7575c591b5b2c3ddb9df1abdaec7122ad853e2ad2e499d4a9156dc03ba6c34b64f00ee6e2b3e2b83e52856d9e9296511f23b9fbc61186ce25a0e59d8a07cf68a03744a86eb25ba81240b3a72585e7231b5a93d1987c8dfeeddbc0d3c9a9d585bfb8e3b971edfb20b39a7455d1b7b9f2cf851d22c057a136e5d623e9f749c3048b8e4d6f0c92e3e934917c61a6a519225fd92bb50000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012ae9e9f9b128394136a04280c9f0cc3dc5a769e8a608f7dd9561ef62883e869c0318446dc7e77b654fc6b4fb4345c21e3741d6719407846ccbb1cbf436173d236c0a066e90441598f08ed3fe3bed92df126e73dc5727f64de5eff4e272e713b0240568eed5b8c9da3172f9f20a864ab96134b838c61d5c819359efef9121c8a149000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814ccaf6d9980a06072fa50e46dd9eb62c4388003fe627fa229f67385d329f3a282687c5dcee08d0bdc8ae2df89cc08b05437b3372b8a1104cb488719f6858a65b22027111016d72483e931cf9934d504eb98edbfc42876e76a736ae0ac241a47989aafdd04f8822c4a9b7d8e94eb8b106397a4f1089c2ca3139df430871eaa93950eee372ee385cc959e238fac010526f6b611854a06aa51650e4d567b0541e9c3980883731a28711cc5e56713e9d62f176babd84d66a0666ba0b6a70a9a365defaaa4b4c83b8686a554317e6a3f24b0074e07884f6f7e64425e1342b6ad608c5edf5743d4b80b7e0f51d615d45405698a8cd8c38679e47d91e051e6458c83b70863953033ba5567aed4ef3228f66942954b827c090c7409b8d78a1e5b83312781e5b45d19d95b3242797802f643e233b60989c91e43a4cb4e9bdddfb4e9e2ffb65c609c0f38d0e27c26f7281f910ef4f65fedb8181e5b392b9cedd09d6a355f5a6900888a5e31feb9ecdc26993240c99ae5762f2e3e9c1fe710fb44b70b847dbbc9b89696d10428e79114f6199768af516fd1ff0b3e8ac5505f71df9dc090cd86f5bb49d861bd5c10e04ad95383c54b3143c50386fb38543034e2a0b9fea900000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010845c9f99101c1fed93ca4f6d2c1f7e51c8e98107a6cf06fa1ea4dd23d3690a403187c5a791ac6c3eacebd58ccfc779cd34ed25bc3190efbb702fea1c88b593221141e3d2ed35939a080e01fca49770ff0e3519d3027ff434f85e5041bb2683e3b27da4dfcb3d6aaaa15321a6ab00246eee87eab7e896b3f59a7ffc05b05586b630000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f52ac9a7e505eb8947f0f0d0157517b6be01e13bac7fb98c0ea0542ac3e9eb08a7d9c74c04873e44c8eaf7b974425b26c9d254b6be40ebc51abcd002cc610fd12fb3b87ba4d978aa41b6716934f155eebb6f48b603f83107e9cc2327ce035ba0298d7aebb68b4ff948dab85975227d1ddab01c14ccf061b168d3548cae708c83556217dd3f0be65490b6717bc5f3b3b38b69cba381abb209c8cc50715a8454ab3fd4248e67305aac553fb466f7cbd53ff7ddc9e44e24440e9185ebf550345325fbbe70fa20a97ba1c4780bc384b8fd6d31bca3bbfbd35c29242e97813bfbf23bd8c7a5d35e365a453d0f72ce40a24406c3f39fcf2bd861a14e389e4e84f6ce18ce2e9f492b1505676dc71028046c99f88a52fd6b5a9629b8b541ed5fc0325b7a126e605da624a38aadcdd503391ccebc49c28e8b6922ec2d760481231e103c930cf87c14357d8db0cf2b94a031dc97a3ab3a11ca779167f47c85ad6a314e2060b8c8101bce2dd06b67eab7ea85a6b178ff28d1c17bc35c0dff03a52f9f946d14f5430beae028fe53f11427d0251f5fb981221db825f60658b3c236121767fe7ea7d9023b65fa2fd1d519c24af05eb9913ff35a9974693b423c313814df390440000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300107af7a138e32429fd2cbfcd92d1b82b8cce5ad3b07d5cf2ca1bac3d9dc28b62e031bdd56a4b810bed9afc92661d0f30456993aeca93811675c11ada8ae6d4e945b19c8fdc843fd4f588598165038ed54d451eae6e4529f5ba0bc5f7ede5cead7c8207aee284838e99403d10b102a648c87d2b3a42471ec7f69730b87c0bd0b163600000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006bacb5c7ee6935649444dc88a66eda4114571b8c9a33501be9ca0af62ab42bf4628d04171e01f1b93325902fb8538a87aa9011af7a798bf0639a40386d8a42661eb0652f74ff6283042a3410b73330f1b8f01037f6897b6ab089c1479079878c09695427922d31a958680a8d9876f3f91c75324adba022f23ddec57dfdfbd231cdc641106a4c5374b382806b3a4fc8f821ce669bf7b38fe8ad506e2d39520ad4973bdefb08e6bef429eab8278504a3a0976fc6b5cb88bf3bbacc86bc8723906321181d9839dd75ec579e33615a16a73a6e3163a2bf53b48d8ea9fcfbc0b08b6c73c19caa0101c461d103696ee8ad2382d045f058ee24fdb8256092d8a77efec72301acaf2c0f04c035e7e25358bbf9b4ef12285a1ba34674e90b777579cdf50f6be2619b72addad9a036f715db9eb823d4f189cb411ee706b82b3220d3e874194eb8de9c16bc57ecf0c8a0248944e2aa19510e3269dead7d086fd09b8e2414bde042e4188910b8ec966a3c2e17af928a44ceebf64fa72f5b4898f122e2c56a9506f89eb13445f94580faf1a261c88fb806bf87152feab16cd823dab84e848e2174af05f7750e6ba03077306c8226d4a4620f8a170c99f09efc9492d5d4fe4300000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010f5d9e5a829ec4baaa4f2c5efa067fd964605eb146d4d99d21c6c343c8a1a56e031e1df4c285e44933b8bf974448d4461b5607b9d97cc165c18506c8fc10c184c211756bafbe1e216d94f98766da686dddedff5e71f90e4c6eb04aea58d7f1b89204a0eb240743956d5ef0e20efa2781e847a7fb3c1a0063a79e5b433d8d024c6e000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000286d7d64600208a699e103e57cfe09e56e3ca47aa548b6822949b7304d6969c6c7c743261c457d047b21f6d03d9bc83d9abc145987ba6bd24825ca1a098abc785c8aabf63152edd2619ddcaff883defb4aca3e1823a8b67e9864177cb7bf1da1ea996c93ff4a635d0c476f3731d818e4047d22902e78fc90cc44017c564d1243cc83d42d1171d6458f76380c0b063bd0ee651cbae6bdf8dd39e040bb38e8de3e12f0f39f3406eac91ef0b883d23d8e2bf3b47c7710d3ed5080059ab98d6684aeb2b82f6757a219f74e7b023b92475eb079171f990980f6b27b5530b38f7a81f51738016daaa17cbdc88a7ad38afef1ee12a645a468839ee9dd49cf1924dcc5e31168e6342e7c42e33ef157234350dc4b613813868db23760098af1600851b812201867f921455f52fb5722476dc0504ed0f50479048a6657ccda5fc24c4d2eadbaa24890a847fc1982f82272c671e96c371a39f05f5b496432ed6ead5f0253e4625cc13cb1e4073436d7d53949c699b0868511475dbf45a3e1615b1bb585be51cd26501f558c9f80dc852dbb817b85860ac1564afaf105d91aaf6cfea79b05796a60a2d216f8b18ee41027d152dc9e279521f6d54741a31dbc534d7f706314630000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012c64042b2b4e36d425d88cb472aba22236646cb1cc455fe27014e01828a7959b032199e638b731a533c5928a49ff42faa1f59ffb75602138f29b2c429f0101f3462cbea6561462dd09ac9077a39309cb0ef9029648d2b55e3ceeac5158213355d90bb36939331fc4e01986e668caf622a702295d845d9f182bafc9fef3d67218a00000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e546ea66ba34358118da19fd6b52053ca7a817538b4a5de8e1b55bc5492e9b36dcafe2ece03af0a5e0e067997251d5d39413695867cf808fcf9535fa256695429dfaaf09730b696f11529b08a9c20a43661765dae9e6b3f6493983a97a4ce88bdb666bff0814f4b3c2d46bcb6f6fc78f2951185dd1a05569aff346e522f50eb96d3d0eeaf52fad6e8140a9523738f9cacf8f5d04871391372b4d100a1103f17bd66c49934226816a2372dac8574bd27dbf0b2f50dd4e68770d0daf8f7c570615353923c3deca146fc61192b7d5f570b9021ff0de3b0e33409b99a1d0b4d123b8e1badc1bf7b78405f2610c4fca7b6e45ff8312265e842267716dc50cc9450e11609e7a1428eb0fa31bf84e40ea64df4eaf02f7f5764bc1600e4ca49bcd8300bb9fe2ca7eed9e70aa67fa93b59f8efc3333d9928e15f3b3fee3a06d8c26374c8165c8d35592c393bae2b75e316b36b236efacc56fef1f9424c3afbdcfa27b8bec7c48c2bb983c814723f4950b5b6b7fb3e6429506e68684a7f520533707dd661a3e72e9459cbb929288f1395699cd1b721d15316755ca5c38b7182caf13306253db1f454f6dce5cc49ed4b446da4118efc51593c83a13dbff5bd84f0c38652820000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300109dbadada6464513423e6fb6c4f0258d36b347b216bd4c42e1111f8c03280dc103246c26979871fdab4d36db0c5f4097170f73d6ad9b58c285c353c71d7851096c2fe4951df5cbaf5b4569a528b0766fbb37cb595abcf4acd5c8bcd47a58884f6311f3c79f6b83fee00fb25c962ebc43f1a851265a9a3ef204dca16b8c98c6aa930000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009698006c725bc5317938dbebca78a5422b2621c554e63645e4d0ade1b8428bb09d1166e221f61f6f5721eccf25d6c4575dc4c32d8f75942e935190ac413ce5a568437e284e447e3ffa2bac77bb459b51cea50a56cc36f7fe65014aa68bad4d1ec09f8522260d0f51f37b7ff0ac5fd2df48304d0a6a33859b9f5b6e092ec95f5f8bf39c02b8572ba1cb0248c3b311f07ae3e4fe1e12020c774456a206ccf86f83c15d34758d085d33acfc12699972dfe11ff17276fd1f166336f8feb9ee3cf96f2f406561a5ed64db0fdffacb207d8368fd052fc15b1ee638a0c2c77f4a6915dfe346faef7d90d542e48ab1aa9ba74ba78a98f22564ab925673069a941a3148db32ee066b3499723004c1daa1a2986fa5d1dfee7cf8e99868600311eb54862cc8d1e290e2836d79247ff56178847d981d5de54d17cf5d94208d6322387ba60d403b553c6f429065d1106d6d33357de4f5e64ed45166ff392858f5f2433339cc3ffda9ed70efefb5d5b2aec8c87f94fc41ebe861522f24a65d69ab4a7477e502786907d9323cb06342e958793f68ec20570e26350157770736d465420a4e7d3bb72e59e800c0c44a9a9d766aa32bf6e29b5137d28ab29b416cbff4f4fc8b5b1fec0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300123d9130e3423364851997289486fc679f764a3ee633e035d2a5e3318d724f8410324a0a71fa2645c6b6f8f0136aca6f0487610bd7851d5d6f9085f54ff66933a880abf1c759d1fd376a623e36860e98e9afb70924b3878b780c389f9b8ed88faa321db92310a9268960b111157bbe9a51e4ee17fe5e3f4f61c176a25d046dc55ce0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c30e86f4ac4b26a027908f536c2c24965113ecac4c47c6d83e3729ca906e9d5dc6d3a044fac641751dc3f4dd67c712379ab2d1f293c71b8b191fa475b0dee29e45f6d4567c9c3e67138d9efab584044cc5cf60ad9b617fd190cceedbf18836a044248b59abe88c1aa09693678f95aea8439ed84ea2140421d59badaa0c23844a1423640f2f863aed6a6e18b496f362335febf4bfca6e54f6ecb97fcc233ebd685725ad2a1cec8ba1203aee7e5c980bb2a7ca537fa9802f540374489abf0e6c8fcd42b38ed3f2ae85a0c002ea100656c4782d2e26f2b2385e778cbf8e3b5845cc043a3295ce68e79258a30e2e14f214b7973695e8e0bb0b2ba42fec5f8368c745b8f7740aeb6e9e47309abeb2e65165c55d151a28c5b8341adea67a9d73a0ccabb39e14c6e4d11420b80c8ae2c36e893438895e024adb6f29b87e44f5a8c768b95e9d5c63d2976f78fead8b463071800668aec91c8370ccb395efb99d7f9470d7dfd9444c81a036dfe34f7b9bd22ef200cb5acbd856e62d8dd4a757169412d8f758b25f101a06429a37171f91739b4beaebe9dc12de112b2208d324bc1d3ccafe36d0ef360a84652ede536fc34f79a8d9d842d9edc792538d870aa689b7a89cc0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001226ad7dd22bb5a988e524d6727eae8bb382d9451daaac38d9656ba2eef0fc6760324b066e47ebc489e72790da13df278f8773aeba38725bcf8f1bd032ba8370f741fdd9dc2ceae712a4c1d355e57107da44c533d5fcc847b9c387169e0905413ba03f1434a9f59aa8927f7bf93a41f9b79c4c2f222c77eabfc5c3eb35406ca85c900000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092b9c62128f5e7c9aea27fa4b42dc9733d88464d03832360e7261fbf4edf2fcd9b14ec054d13fc043e69c189a1a52635e1f270618be4418bc35d6b7ffa339b8c0bc8ebb210cab3de89e03be5ac7f849d593f4d6335e950b4f1db8f8d63a1ecef0e564a828bbf8b3b5e12ac5320820a0c145c89c4835bf57d6c29cd388c8640c2e618488b111f176aa0cdbfea3640be28c085a046995cf8739cab5f4bc62e976c9752165dc6a074ecfe2b85d903ec88c6c9b15969176a6d78b467ae86de9c3d1b2fd6135bb76fdda4839e96c4799acc4d08638d5c25320a156c286522f3dfa314b63b5cfdffc5954de767018db3abe8d9e33b00a2ba786204c1a3a85014945829b33d52e2fd6e40c7adf945157a5e3111818ae789e377f2906169544b3c173bcc159d70c9809ab7a19f1793a64f5a55a5c8ab5374fb79218d71d3ce5343777d6277b657a36c0f6d5e2e6d40f494f8890c1955ba809078798b9388e6cb04b3c6f18701d04acc5ecfd2c3ead5bfaa33ed3f283bfca820c1574aea3fe13d831844e51e3cec8a6d55b20a8d373749bdab6adfcec2b1f5eb7399fc115109026486e59f9387a2416db3fc2b8948f03211dac5a8c58f77bf27166167856d60508d8b9ee20000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300118afb89437d9ad1d29d6af447bbabff51a8153a09a4f43bdb01f874a4446c01303260f3614d812ceffc48ccace9da8b445ef5ef6fc8d6e8c0e206fa4e8faadc35d2420b09d238715a298ca0eeca1e2f843872756e244768774c09575478d403b6c011f5b0e969d61e0267e5d7f630f95e519f5e1ca7b7f713f95c8573061fdc39600000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088163742ebf6edc235ba39a25c9114e07d92b9e74c07f911bdb2aad0f4409e48a40d432240a171898af8296946efd9f1100368caa633bd2e00b570ca1cef805f83b34944e24c6fbd11097aad464c06893134ad0a19d509503ffb8e77705c8cf054dc04ebfda7d5db332dd141f6990d4b49f40fffef334635f7f45e05d2eeded227438d33bd590d7ec2cbdd9229c4baf93dbcf6738eb47a0bfa3fdff2629bafe2bf1acf7cae6895d16fd7b04c0cd5df611554fe44cc63254a50da4ec07afdc3cddf2bb963e65ccbe35deb87f331f5b14c69eb2216df9d7b5929ff8a94e833aa0c19f73161eaeaeac8bc0dd67ad5217ab24111b5d699440a0084652a7916df5e61f556bde32c23b6ec0e7efba1dcd182a6469f8477fece1e8b63f0643d28b9771ed41392d01563fde7f90515d54c831b688e4bf4a61b05836bfc50063c055bb6064d60f3d230172201578628a952cc914b746f217907ebb542c0fbf0a50c5416d3db1413a1e12c4c0684d8dc2fd089685f3240c891270f6473c0013f44f4065ace8bae4a89e66993a144741f88d4806eb3671209b0c24f0340de37b7a1c410606b05a421b285ccf9d668319fa55445d84bf7ef657864b639b2fe12d8403140c0150000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300109dbb2ed9002f0e3252a1a05c3fa045244ef95b4c91fcec7fd360a828e19496c0326f0d21c21a6f57d706b0d11b5820a2da9e72c3dea932da56f5cb5c8092e0f562c0ef6906d74264d6944fe3b5e011c60e2d3c1b4a09d8603a420a74eb3f5e6241c812012a67f3b4052414e86a387257fdcdf8f08c10fdba5d7beeb2b50c081180000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009df6606b9ed2988e82aaeb94334a094fa178964830cb47ff35f2935406f0ca92bcb977c018faa287dd63a66680df31df67cf19e1a49ad582dae124d0677ae9abf339770aea7557911cf5d426e80a0fcdd3c3a30c15fc4ccb879281ff86266bb50ca9abf8939090b7f8f90d0fa5a06a8336759da656c230c80c212ea315fa61685954fc0619f511fd4240e9dc964482f4eb6d33d091f317ef5e1ab1bdd48f779bb44841a9aa27fa66143bcd26735727f45228fdd0cfa0b969cda988bffaf42c5588a6e1a11c227cabbb4f83e91f7b510ab42f49e27e84eddcecc097ae058594ea258fb99bf675f148045ddfcdb22504211b9c83875f02a83b786cd0c93e377e4cefa7b9b1f69b09b9b97a9ff0e9484a7c57e151642a82959742c3426624def1950cb3be66bd9a013d041eb6cecaf9ed55f6e178d0e071585dc8f484a3520740980a5c44dbebd6c7a016c1a9103e1fbe00e92adbf72502fcfe2370c811e83e04be4244f6aa96e4c451dff501c45eb11b6f7e1667e6f5e537867ca6406780b21d8363970f9ea789b0ef2c257d84b350412af514e3a0b6b9880c11c0d5b4c89e30a6956d73c646150e2e13feefdcb1231fc2226aa29b68fa2a61d47a2724d86b29900000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300100c23f15cd6d14339cb0423758bb8eb948fa01e28a2988557d64a5049942cd260328b51cff1812e6539820422910bcb3c99a285e0e757ccac1ba3dca2eccc1b35d1d69de533951f0ab8102dc9c301925c945283bb974ad2f22e695c29b819cff7c0808aad5902d4c7b8443c267c6416c23726a63c9064aaf9b597fa1b9ce7b6421000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000998bda17b832f4c1b026f2578c9d6f272d7251b638255845c33d005dd85e16979a895d919a1db3f623a1625626e2289f991633b9541655ceb8b26505af108307613dfcc25f0424c72402fc97ddd322ca60365f2b01615612ca24d93213ce8e7c0c71f026b55629747fa6da49b1828d1c5a067b7b6110b470947cb412a05c27c54f9b4ae50ce490f7fc2e7ddad96cd512273aecfe67e00fd4c4b7a2ed24963a22f7e256741e08e171ff49fc3efc158cba8adaa0345c3e64059429c9796341f2b714848101a01b6e61e240c4eb1bd6bd55f4b704472bfadb57dbcf4fe00598b21dd249a54b04a9e9feb6e38aeb1e736a411d72a97458afd3176bbd9604a3bd939ddae23f614165273714181789f590e28883bd7cfc22eae434c913be999acc44dbefcd96d915c9aa1a4086e71ffcbd9ac30a122d991596655e933924acc1fbdf4613af37a8d14cdc42cc1690b91b3f0c55dff554f92f73821dee471a99b2e0e0fba14471dbace7eadea950ba9af87d5a81c7ea93d856c71a488cd38721652aaa4bd8505f10f3acfdc7d0c976dc4c66673ae5f5bdffbdc24d40add02e66ed4dc4624099bd380e1f0ecf9c2eddd13a3e9958ac3e7d93ec7148c9dcb87e20d3651b8f0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300119745bef09d3af0efb0f940f3f69e73c5662cd16ea0e1b983cec38002c91c9d303294c0570b9a04fb4c236d4c9c485a79a037162f65e470ac70df13ef280acc247287600d4f33a55ba96a6d69253e26009aa3905310d4cfc43097964cd9666d5a72aa52704236c41ddcafee50981d5900e7cfee413026b61945b1a698a65d90eca0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001841c4c7f765449e09e0bcf04867dcebabe0d598a38fa6b3dbb4ae2f758e7cf90c2b19f7d2f79fef5d7c1c9abee0178bbffa864a47b12ddeb74d7d8956278fd08b50ac28c8c62adcbffa4b18c088dd505f36f71eda5664865b8c955fb6c8bffaeb2b70b15486dde1ba758468fb482210bdbfa242f0cae9d17fed2a774626d1fc23840bba24402403203da885f99184a51a5db31b9df6b74d05f1bc97d497cdc8b32d48f3f4146bfc81e09d824465fa58bd513d42b2d6f2e4cddfe6975caf77ac5b4360016bd9c3de021f86d4a7f631e12319dade8c5c4639e88070a05d02082e39c8aec83ee2922929cb69d6a463c45d510f87fd4a1b0ea5cd92eac99d292090313c9778a9235add6bc8a15c6276ddd3d8a1bdeba21acecb4f3426be26ad984f3ef6ee0e78b9ff10c3bc7d811397e39cf36fe66702260f7d42f784923dd1ac5fe17bd4578caeffd6ef39c5cfcfad0f1fa3ba5ffaf3c46c5c6947605cb0e388dd69b9904042ff2330b6665762342545f7fd99909a7fb76d2e5e02c56b460e32f7487a8b56d5049458c9858d6350ced69a2485ee8f809a3c8d6602dc500e5ed337ab4886c1f8fed4fbf2c60659b08708c134119ce881717e2f7b53f7f4fcb476330000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011334a8f7380bf97d92cf359c3386436b4f0fee3070b3788090c1b648dab0b02d0329ac06b31477922226941bffd4404fcdafe3bbeee8e850637e0a37ef2e3e59f52a154e56a91baeedfbd253855464a97baa752af8772543984ddfb95e1321555822b93f2fcbc1334907141e35b32d3ed7e1bd54410aade83e3fcc902fa42c6069000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105154698b74315a15f67aa84d069cde36289e888ee23a3fbaac7c8a86c45f29dc5943196de7b50aac7ba38a4dc8064e38239f854617687fb54ca02927b95e1a439e53862f7dd55da4140d8b41ab6ff1346dfe15a35568ff87a0b01c0a00489ce9881d842b609e36b31752bcdad16cdefbc3bc29bf3f74968bb7c019a10fd74bfafd31af807db4216005bdbe8f744e8f913bbf221bec0b761fe0934b89b680ea50bd7aa520b264b16b61914866a7a076716c11f0b3fc07359bda2413b680d1c5c57491576a62acbc9ddfe42000e23a80095cc35b8c5d65a3f4252eb6a19cab87010fc20d401931ae77775f144cc33a53a6ebe7401f87f201aa3c74c9c272ab95cd79c10fbb72b9c557e429fb5dadd63390cbc0a433df13240c6c1ed76bd63016746e04bb18a0f772b557afa70fd6f6a219fda8ffabfd9754821d3189ee267c00e2027bcd51675dc5de9b65f76313298ad8704189af8a0bb05262ff0218921cc4b5bfff23a6bfec6213ef23d3b4b42e2238dc8d559f4c5e16cfc2d8ad931cb2f8229f4c06dd1d3eae0badfedc7bf6fd5cde9abdd08c7ee3a6ba005c96eabdb49e9170a36b6398155e613b2ca407266631cb08ce47e14786f7cebbe2e4af07db5b0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300116247729bcf1760899cfc6e3e89a7a5039d2456c113873dd4f0903b206f7e3780329b0315a77bd02700d318cf6c404f415f1c1f9e09b9414ec3d8b9a7db98fbeb8179b03ef060bbd215001186a8a43c91e7f634e0d17dbbdf56e8ffdc229b8277d02c6e0c6446bc0977e91f17a322be4a0c0101c69c74d3a8390d186022b3346280000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b2c6b398139d10e4024192d910d600ed1a68ec372157223f7c0a1fbf0b92cada11b99925f3af9671bfca3134b5ce139439b95d27484529ca10161582b52375b96aeb2819907fa62c8b60b8947d194a84f2558b5bb199dc4339555dcef1c374d454e25e2fb3f090a93f97667a6efcf37c9eb2c91df5f30a91a9861b4063b90ca09762a29c7b7a64095e2df9c579d9d870924ee1166acb6259468fc63a11afd170b942056a327eb7183f0969413a4b003de7d87e2bdd67e9ffcaa19e09f20792ffbd8877f3d7e2f40f42aa84ab166a851ae3e07cc53d5213b2c59306413eb2691108db71bf0a41c0b379f10020d9bea49bd19a5aa724a2ee35cbc0ef663fcfa4c662c20ac4de8ec47c4b1449a7224b0085e53b8bc0a610894a271890b6d51cc21b53e0635ecc5add3bb4cb1085d441372ef5124cb80d5f405f7d697d706c94dfbcce84fcddbb55fbbdf3a8c0af6d993103f840c0658c59f619605fdcf2100131b16317b4864695eff8da34945bf44c3dea044bbcce141738bdfc6f7a221cac0250b084154a4adc1d8cb6cde718d73e31f61a8b695d40ccbcfe524f4b0a2dc716f68392195d975538dc9bd08cf1a5a6ef5d77c22ef5d86d7df1d19e2cb48c5e6210000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012785c4c04599f4ca176fa7dfc420466df7250240844bbc363323e42d4638fc81032a0dd1d6461f85da0b1a21471d5b77281ac5f7f311a48923662b2eafda321c9d007cfda768e3533165bee78d4406cf08c6a8389e5c902d5ef5e3edbc93537ec7105dc17c1165424c3ae8eabc804edec773316f3af5e8801dba9bc8049ff0717c00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d7b0f70a602289b83ed13b776288b3ce649d4350bb9433437843ef04727929938cd9d6c3627ff4cefcc51b562265e9f739ce489a955dd30d1a84aa1ff33a23a822f5a4df320da0ac6a10041f774fbdea2ec7ce359450a341bbb9560161d98442f67ac38c809f178eb5a32f12ba955dd178ebcc63d6a3452839321d3f84814d53b523c19c787ec661e975d0a4e9a5fdb1a8c7a98d24f27683dd76026ca7e24de23735d086f7093974da9033df1d6195ec20d15c759ddc2f342af851b86a772e47584e56d6f3ebc6698ebfa0269be3c48b0ead672e0b718faa07d24a9edddbf96036f1fe5f0cf781836d137c28a603fe3735f9d97cc52ecf94c90fb195bdd2bf9db7d9d928cc19a356f26b17d091ef2dfd65b9cbe5f11b28dae4b5daf1af02314f0176e2b406da9abb60034933601c9f10103c8fdafc37942f4fc1a78177e06e2a16610c1a202407f7c802b7ceee3d8ce9aebe3c992fa99d6c5fd1c5cd08efbbd5bfcde5442938997d04e0a100bf72db08f659d696eebfd137c17b182b8b8b721a4d2a0b98ad8e4ba49d907dd288d3b3b02df3fed5b3ad10ecd270de2339df7f389dfea447e56c77b748c9beb8febdc97ffd3913c72976632d61ba014c2930010000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010c56ec7bb93d7cad281bd07d7676d95ef5fdf85541598ec5d43f956c56f551db032c28eb4b654ae83fe9139c7547404d6e50b24eb7e392bb78fb295839e5a1111a063c07665b387b310e076428f8208704994430c90038146053577939b8f58ee911ca71e7fff62d4598043860e01364930473e4aeff95b26c3f8faadb2a53b724000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0490d8606a819e4f799c310a1fcdef95db464103816a1063484845fdfbef55b6c38f09aa24fa6e74fd32ca1ebe26e8d283fbb2be2a6d5db1c1840d3bccc82010e9fec08e30f535899f3faaf660adba3a476e874808eaa65a74fe608184ecf268a34ac7b24531c8f7bc37655b7d29bb53629cfd3ea64a5ecebb30889861120904c2ac89b040c8efb4417ced2d980f1c71cae53ac5dba81145b26628b55ef7dc9e2f679805ca689d1cfe6b2e02ed6a4038b03210db018687c69ebfc0bf1dc03f95a1747d4f5be85b7660180bcfd5fe1704c2708c407a4b8cb41c71101244ed9a819f16758e9c558366e5d6e2be292181b87982fc440095db51f603ee65afae8f1e401f5f91b69f8828227b55cd3eb2eec3ec36738459f7b7542bfda1aff8111349960cf33fb102672d1ab8ce65a2628c6d49bc2d6f5ba28201af87b2c8c11e68d616b5d4ef69e226cdbbea86588bf9453fc65c131dc824c7027f684ed7a49e3b2f4282cce91e5b8c0c00824ec28053f0a38b894077c211a695c18a455df25f7da69130d58fd08679c53d3febdd86d14850fcfb176a5becf0dd40c6652a77d6d1a3d3b4db159cf98268b27eb29c1b483b7c62cca959e6177472ed25addfa3499430000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010de740a60dc516ae253ed71d51192d8bef5c1890e4142ef0ce864e688d0f1eef032d70370cfb805436a057b0b5f6ba07ebc3daa30d5b1848527f20502e8a9e3a6f2270e68e486793e970426d50e2647fca9c205f8fd2ec0e36956b12c956af35730384f03384cbeeb2e1ede2ebbb94135ed2690c19afee71b8bb785b1e3896db0d00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013165fdfdd607173c57a049681957fc5dabec201760b9c7eca3e8ab9b4f9a73c06858a8bfc9e8ed5dcb926382abb4ec92495c938c99247038f835a30b4e354218d1910cffdd7a0650c25c1d76f4e28851b367fcdcf92f5391b4766e94bf869b4c549cde993503af155f5897991bcfb07bd48ead5d67452d437efcbf2fcd8cf3034bbb4a38be384fa2f1149c57054e0528c04efec9089a26bc6d6583b803bc9d1951e9d2de9725792907f91310c5c97af3a21cb7fdacf06652b2adb8de6135e55bf9142feb09949d35ff243b7f868097570111ef043057d2477b898c7c1b2fd941249e3b502eff596f81719428f382a0f84df278f60e0946354640339279d8ea98256e385e39446a5ec4b6d05357dd8ce05646ad0f8c5e3289c10a9e9ca4ca656bf14199c205acf74f316a13d9250d84a6c111e33d8c2b3e7ca0c28b050e3cc6ad387129c38d2cf467948f432d5af967046a55075b1bceb631e551f3823e2272b4d9e3b11865998cf8d601039ce8f6a3ba431718c072ce184a41271dba750bffc18d7f906c1632297370fa9e1cd8dd85258828ac75d7739bb777f40c2ad196498bd8d2260e7d0e1ae76be1e4edcc2bb3a8fd399380ca12c83ca085562218a029b0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010a004129931edeadd16de29458c0d0b7be4bd78f7ea222ca3b16fc6802e80acc032fe2a1e4b0f660e02dbe951b7cc846a5154d4acaa74715e75d8c1a4c09524de01942f4c0c9cfbb16c58850c0beae817f4a9c5b9498dd5f939b7412b5a741260708725f8f412b198f1da9d27b3fb6fca3040654c363f9829b16eabc6b0375bd980000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b4f36ebf19e9346cde1644896d2a9f392552ae9aaa91b0af85aed8d0db66509cafdd5551ca7bf369adcd3e6d961f484cb0184f80ff012f69c42ffbee36d0d05ac9fd56d90df0f15ce1be3edbd96f1bed4eb18766e568364f9a66caf413906fe01cdf7c871315670480407a146dd1a903c3d51b1512f8220688f0c8a16d6126df27df81492dac6ca4cff5e0830c96af76fa45219ea7aad0c42536f2a359955b7aa0724683374f116f96d2a002375173b7145e00b7dfe4af6617d569adb9b76645c543526441c71c93de3caf619fdd173c43110e72337edac82fc92a8cdbfe4e382ffae0f2b491fea9bf507c232c66429d23b9f6bd3a05c478743d3c9751cd45650bc0795392464ba879c2b8c1fd21a8d27f709a36c4b9608b33183c1c19e2004ff17751b566b80d1d6c5ca8c9598a26c5277c1d93f2594e20608d177b74d32203b4b60010b5f7e1069ff7be3a3741f50fecb9c1197fa1d4019c43924ca706aa58a1e763193589d275651b69e30b4ace93cbf0a6004a4680b6011e86ddff129406e4f25bf896d1b2649d3a6eba404ef7dc42ad70ece9d9c91e916f67f7646b6e4f02d467322cc8886a892a34fee6270db08032fdcaa3200593f00a6818730b39900000004000000000000000400000000", + "20d80a56d67df731a368e243d1f5841390607d434319df5abea408ad9817e0460000000b000000000000000000000000000000000000000000000000000000000000002400c05d345a8bf93c9694a50e0cf133a44f60a15736f7fdee4f2559b13015261600089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000b011f24747c21855854990b5e7e73b5d2320acd03fb1e65a713968b3eb5e5b11440000300022e25b491978c90a2bdff6cfe4bc25b0d3d7ec1769a0da37ed94214622f173e4000030802bb7f2372436ecbb2ebd34734a7fbce7e41962fc16f42b0c006b3b074082abe0000030800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000070dbda3c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad2ec2c0068648e7b75f57925c209bfc04cb536e7e1187ce8f743a795105028f1f17147c0000000b0000002400000000000000000000000000000000000000000000000000000000000bebf730011045d86ba5621d83aad98610ce4c74f65e908d122f34581c0c574a7d60b13d9b0302579cba440bbcdc8dae1d5405c6d3e43e7ce9bfaf087853855282c895409d41168ee63997551ae601d9d872ffd099090a58a164cdf1ab4ef5db9c6c1a6fc2ba25534f846325cbb065db38acc788749eb0069ffae789e32545af5135a4474ddb0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e49a192fd1b6e234a76c350e7f2f7032c8873394655df0e357717872b93273ce31a90ff666ae90fedc19216da357b3c7ad50e24dc0ffeebb01450516a6e005c33b05ef80f1c4c61eef72d2bc7d889a29c06f64c33723d1da55d1ff8577d9694e57ea8a41cd1c9ba8f4434a0cf7cfd670be0f341c53fb9a9ab10bfe4ddaad34843c98d19c568406fc7b2cb73a37b87999b2ab912b5c1fab97b0a2cbc6372b70c238a63e48f7ff15793d4c2f0ec779558373e7e6fce68c31f0fe9695e54ba879b9c340524e579da392d8c6a1e4b68e3fc3708cf65a8e2808364bbdd5eb28efe4189496388397d8b1b5aa38131e445c933cb57198b7454bc42ff15bf2a9644ca8fda2e1c68c4663c635164a6ad7b6fb073695812053e69bbb011613e4f1c4d463a95b9de169a56bfc7b7b4bed49aa37bb6c58557e99bcf34ac8a2cfd11d3d6a3d470a46060c7340590c19505bb3c0a13cd0bdddb4c29145d164f14aaf2609a7688a98a1b24c132ac34fd04b0473232d06d05f964d3471f87dac9048f45b5353c29717f706d5cacf70046cf70e2ba107af52f4dc7e9062a4390554e8ade8a56d81eaac40f367d3ef9838cb0f0861695d93ef099c487c88aa6237ee83cf96ec4a56b0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300103c6771ab3285506ac87d491c5d4f035f031c417067837317a0b8c8a257d4c3703049ffaa45693f84e9e77b5b62d6a1a287368c93c17a2417fe8a5a71d63b3eec30a754110bc7e4e0b6cca24ea28790afee27f0b4cb6db8bcce973f5129bc6d9930517e01141ae93aa9964d9f6dbfbef4d5bf0a7339c5d5168a4936d681d71022800000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099dadb520600ffc19357f37e1055bf83908f569f2a54cb1e6527aa944541c1096e1e0c6ddd374655b7529dd27ec1d32dfb5d3c176d1448f8bbf7ec6ffe249286fd76eccb7c47c89839e7f9c0745296e395b5c86b811bf5495f85bd3c58ac4cbe8b792fa7061a5c16d5ec1114053870b43f63a251b835ed03751332a21aaf8a1e7f9a460c3a1f2f8588411c28215e462ca9035aababcb9f65b5cc24e7000365c120d89fbb7da89bfd9aa8c5981ded366c78b9635bf6c2d58ae742ed86acc43f387acf373f1c03bc737459a1d1d7a825ced33df9edbc11ce1beed604ad860139aed7044e1aebf98ace68bc131b6cc59415cf1ee5848f99435335ec51f55e068c6d6be51b36c15cc0e350b4185ea6f1a680036bbbd4da82d6cfaa811704274d507b21b082c31ea35e38169e7cc57229b36ce47e9150e5629af1df205a3063bff9c942d9068468bdac904a4621d22eb84b3e84fbe435d188f37515e4bada1146981bcc0507025c15d85b4156d6a539d6e27842e2375e6ebd49c20acd5e16561a2bf3d33feb3022c73cb605104731037e914b153d0ede7e12605a64bd4294d954ec1c3f0054d3bbcd156a882bf3801ee1c5913d7eb590a279e4c99440e5e61d1d902a0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300120c1ae75e05978b92d33010e2858d6a13cf52f88e867d3fc3ee20c8c15975e9103055417b80e17fa863513876de61eb1f3e8a5d3523bc39517f31e3c2c2bb7666e1c3737287b627fb20619cafb7b0dbf634d58844edce5a8e92675a58bc59179a328e0c33e861c1918db1cff10c2fd1c5486cd3d05f631c62da5caa9b5951ec70d0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ce9fa8603a5678b9aec215ab506035ac8be1a875a1758d211f91074b003bd2fbb8b809d97af9f35d4e343d0ebb5231195fcc030afc37c2bc87f5c627cc895cf45f5fe31209440827320e8ed1e15d5065f3bbfe129d84735d2eb84b1fab023c8696ef79c33cf6b1640a3ed3141583a513e668c589e145deebed3955ac88023a405e2b9721d7d3ae40876370c5825e1d73d1c28f3c3ed006e36835be27a9c380ab0bafe5393eb04ff47277b54c64b9c7469855c719101aa9b0d23a44500d5920cc02478442ffec170eef43f216354c4a885df666d39621503b4b90587e1967cef43ffcf9ba17585eff741d59d776437446ce59b22dc9893a22d28a9e53b2b39957755482552d892af7b857c386b8ae02fc0212f48b8a9cbf558318b4678421fadfddeab952ff7e35d8790ffb9362fd6fde1cd6c16b1e3b59447141f6e3a72611ed19084472125c8fe9fa0052394573f8440c5345352bb91b230c9803db5f11580891d85016cc2d3c13fea7c8abea18b4b7114deb615c6d6e5087d0f16b211bddafba521e4c9e2cf116a4b78d27a1d45d53023d2500fba7cd918bf6df44db20ff5275a2a33613862152ad409e0640ae28f11f15e3fa2347dc8bb7f36d10f32e6f50000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011d0ef933a6ac860048005818c7fec31c2d5d1d98113784f5dafb5191421ba0b80309a976e580b152d75044652c34f2aca7a15a7b740ee6a20e73747d87122f29331e92fa0e6f81dea9f29bd0d707e600f62250e8afd7fd699e4e52a4314149673b270fa3432a76e70dff53c7d2126140a3dc203c1fd275493bddfd827c66aae7af000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac62464ee5c2fcc053b1114d61b7a4daf7b80bc0b2a1fcd60e094ce5455961424f9d95c4b5fcb25ba25a8265332d387a167a6e4227ba5cdd30b908a932745880c9b1a563ed5c8e4e6ea44a4f02a0a1c5ce184d526a028d6aa8a51f5fa04ddcc44992ba41837e58f07e797b101e89b82135a445fd0ea50daae571126f9e27e4345409c77b1994b027046c7b6d8f2534ec508967b000f1976465b3356dcb7fd460413d690503f40e1e3b815ed71064aaeb2c62275a1fe8c1af423e723e0549188267cd36b62054e06fbf8c2da259a264d1203bbf0e1f3b0d3b6af757fee0dd4d681c0fd87978368ebb4925d197477ccbcea1b3e981f822392f3ddb22b90d95379b7b8cbe09cf892b13e6e02f2b981c573f114b837f75b26ad0162829ab0f115c3472559b03c0739ff69d99145ddd86e964947f5c36b3fb7ca68c42186e8df4a1c2367d09921cec166c3cd7323010e0e42f160e2863d722ee3cc94ebccbfdba6a96e9868f03a36c6825edd72642884438370cb4a2f2f4ff5c2b9bf210dc7a863f389071954e0f1a6caf40ee79d45c2ff33b8e1ea34e873cc0a718ca1ac7efa8011d90bb18c60b0197e257c58bacaaae5fbfb94bf45b8b762ab6e720f62a8b774ff80000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011738067d67340a770d979af5534938cc671cf725d667ed60c67be8944cb5d9a8030daa9b64c6cd8bb5bbd3adf15017556cd29dcbf2842baa3fd8894bd9aebad614268eb4192d198efbc808210d09ce762b9c95dfeb99d69e26db25cb140fcddbc41ee3056032082c85343ec9a260b4509c1c25080a78b65c6c1df94cca960b61960000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002662235d23ea1f0e83a804dbbd331adec2171dd31b7a818ff3d85905da5c59f23e37087aed09c94921103b8a610494615b498e5bdd542d4e263196280f8a1770745f74b293226b50103f4574e4fdaf9e7bbfa67fc35f60559d4b971d5356e05d7d36018d08737d69cbd6c4f94c00ae90485c1ebe25afebba6b9715d336992eeae4cf30ac208a9b3ebc4aec116f5c7e01bf7ee829c37c4b356ff3559f98dc28afb85b4b1fbec81ef7bfbb4f180c5303d7cdafe416d067686d7e8aa7ca052a96ad169bbc2ac3cf2abad827e9f3dd24cec551dce975dc866a15bb7139127472d1e4197ec54b6106ec2d2dedf1992060c2c10a87b5a223ea714249606960c0abc28903dde8d27e12f62cb21085151e528cacea8034bfb81e5b25bddb302745072d75f58f0a688e1e9ac3e8a1871c740229a04386b660c7da2c8a1c503d701b4d9d8582efdbbef544af82ae41f3953af6fa1c7e23b93b514f38e1f9d13639384d0bcc698977e78282983e70f4d03f0a67326de48c3a34e2695e2222f7b3248e7b61c324699a352c1b6bfe6d5d2bcebd87ff4bbda8a551a21a939a6e28a6eccc9318c26b3debbf123bf8c1fc89c5d61165489a85e61e68d1570d41cc27b9aaeaf580d50000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730013009358b3f6fa4fd3483b5ed4f95e0db7f04082b817f82723034dfd7597b0ea2030e8363084958236048d2aef0fb00bf08d96b27273ec9a97e52ec6afc507c67252fcf768b02396566736241fb397c1c17aaed7bce1646ad750b98930625fa1a510c26e519985444d5fc485df270a34ddd3867d1985d26c1e3b7d37862d5dca6bd00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bb6d2ac1c3b76800f47d6042f32535ff53644f04de4c450a3a2721100cf2fb6661e4225d80dad1e8ab590203442001a60c70bb917920c9daae25507d065015ecf06be9c61e03b1d948d8be572d577aede8c14e9000f4dd7640fa4335ef92d58c9e2d17f5c81d074d0fef2420e443b21bd1b75b68b63c3a803c15737931e960f486f312f63dd34a86604e33f035da908728c8e4f745cab2fc66cb0573bc2e7cbb7b560e6faeeb7694a45c7e5f406d3e1896aaf7ad21dbf845d01449507fe9db169dcbb1256f3c09d91acafcc0b76d56456cca4f8eaf34c0b45c7b42dee68ca3dceee14f9d78884281449e193a66020265850777a0d2c55196af2b09f42727079a77593de7184437281f7855dca0f746fca4fb96482ad2f66673ed2dc5ca21bf4e16e57064115210e2e3d2f1f53a169e569e61d52f09baae78ab3fba925470539f0db41db879017fcb4c0b54719bd47787364ebd505be68f5b5f7751d444c9004fca6a6317aaf04bced317b88224c4cf4875d2e428ef9368f75da0a3400c7f8d6af0f2b19d7521b889ba9fcf279d7b7fac7b5ace905e4c132e9537a2d001628ccbced44e603e7331272903c1c9166ce2509676a26880a7130d9ad01577722a170000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010f5d2cf1a49cc307a51ab596abaaaaafff08c1f651c46a1c63d762bb0a8c1823031454154cd56571e0ca0424895a44e63eb82a2cda17ef1086fdab101a9282b8640053bdb2305655c91d063632554ebb54cc8908b4cbc4642f14900db5ba43af5a0c4bead34b67063114a9a020454ce9602db9dd3b60fef8ebd01e88011548f087000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090e5aaf27dca68b4791e0684b0a782108bc0e3766251f2d8da48622339bd56607846b912da41a7649abbb84eb383c9185fff83ed4de00d922363f0c1dac209fa3da740aa8627e9766039a955da963d3a0cddb31be52d055d81a5f423fbe4ddeba8112885900dc8554104ce2c39b4d55cfcd01dab325613a6d4c01179f2833d69955d5cfd80e9296048ae13860435f76f223f40a56f05bc4304af50fb119cc72573a0039193b09e09d0def306e90fb8963865b45046342c790cc6c4b8bff4e175216106455a7eee3ba22b2a05c49eaa9c5789a81eb78c925ae2c199888d3730cf2925249f0bcf266c3459300f99581cafe61bd3b3860f8f465df72efb34c33952a5f2515bcead08b7e71dfba99d79b96f56fc7ff2ff1355857d47dcb29364c44c54e4f1a090b347fd948635bf099c34bcfdb917d78af150ff816dc16eb851c9d4e865301d9a18a99c4b9797bd556747d4becca59f2b3cf4187508bc4e6b9499415b9828f121ffa2dbcbc83b1f25aa1d755e1c1989f0f6f2068584061b5e12f36107eb4af9e8acb60aa6f62df1463e81bacc587f1b69335fef8edbdff053c580aceb251484f1a115afed4f25e265526974283553b566202b2bf51ec67e0d7ebf40000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300125f344d6a6602edbdaf75321bea63dd8210ea5fb1d6018541942757960b27669031454eebe6030b59a23acb9f95bf1e04bb1558ba7a3ef1e33e6a7976578984f541c2ae9e0392ed22487da3000c1c0cf2a66b420da999a05a410c7b2b33a4d3165259f5bc3bab9cc11ea9c5fdb0a0535c4a6d777994525fd9f20f4e90c41d496d40000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002faeb096839faf8084a2a1667f997bb08d00a358aaaa349676e3da2f598dffe6f3df5f402eebf43be874d789263e004d6c82258dd0d75095149d69755e58c24bd37609d073e8afeb29563f1521cc079339d26ee2096a608f100999403ab62fae4d421c0e49505503698b2119d21d1ab520f8e044f4bff0321eaf4de28b4dd50e45463a7d5d20a59aad680da7d4a53f29622de56ea59678fad314b65517da6df704c304d7bcb7d0fb05730d5a4186a2660f4637e64f20f47811d76704b58a472a21c8145acad9c5bc98f9f1d7f8b83c5f18a11f6ddaf9a52ab26c8df0c661620914b55e05b3ef2b354a79c66f3b9235d3b559f5345a7aeb6ce66e20521ba46920d4d4b445a5da90f59d3861158bae5a99be2161a851337e792ed904c42c51750df0c6b6aeaf9cfe3bb1bd98cd9156cdc500fd4cad06ca043f50bc96ee070911ce581f7ebff9b8a74ef29228754f8590b58cf4dc64a6d7fcdfd1faf651cf82e731bc090d86409219d630ca94ebca10ec9e26466d04cecdcf9cfcd3af4d0bd3c5f46843703c02fb4b60186c1c983b0e8b8d6ea5714b616dec4bbe6e261bebab849769adcd34dfad7748882acf8ccb170175778e82eafd550784d7c62e7a136df1f20000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300129d763e911da2e2ea6c09de964fc0d18fa8f9b84701bc62339acb7128d56574d03169e82b5be3bcf25058232d62dc576f87ce9553efad5e52c70cb1e64c4c5f21828656d7f0a2f1f402505a85f7392803daa13bc5904ff2bccb3ce758b16b839282d296e84de60c057a81a8bd5e0a7abb8840746098394f9106ab73a3cc822bc2200000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010da372259bf568bb883e56fc7f56449ff82fb744ad6779bd2adb480a0afb91c8abed49fbbc94dee2ed8bf7b8dfb7916d7fb6f218a0a109385b734c3b5ae3cf63119be9c46aff1c415042940523f0da6f1755dbf3be304c7d99b9702601071d995063defeaa9064e97f462938e1a028415831a72ab7ce1e5699038c39a32157576db662ecb7348def705afd1e330815f13e3043f5d856cca99d860d2c2648c2ec2403f28eac408b938a0813b613cf0e7526d3446a7c8af6d638f4a2a9b9ae0da5766fc3d2404a94a2dda0e254bd9f3a6ef18b883a3913255f4d9ce4efee4476a7f5a200018c6e09994552f2451eaf98fe39bc95a7ddb5cc0f2f7531b07860244541041aa03e92d003828b87b90b6a5d010f4b832741f82ea3082195dc8ab24b2194eb0e331ba0b1f37006370f2f55dbe8664a9ed258b2b77709d19f95dcabeb1baa7e7440eda1133f708cae3aa2111e0f0e712f9becbd2b12c5a594a70660b32a7f14d77da44c980e91650660f2cb2b4bdd796b617ccdaae1f1538c643fddd131df3430653366d8edd4f3d8767f8c6c898ad903b83587ed1fe0b0a39d846b22b20c1250394d42b3174bca72711f08d8b122aebd4635874d2d9655a678097751d0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011cfe3669446a208b30071c523615879b41f3780042e160e72121161b8d143ee50316caab332ff352aa93031b5fe3a13ceed518f399917d33106968293c4f39308b1aa8736a0a24d10c1b585eeabc22daa0da01fd88cf094d12361d3efcef7a37fa033ed1cb4b628b44fb4b44bc50a5fe5658be79cdd0ae251b6f70e10d6352945100000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019ceca1c6014ac84a29c8cdee16d97fc9c8470482e9ab80fa0f10d12be348b0a3357cd394565430511b18b813e711a4c62fa89637b4e5cdb03e2e4d1e24b2ecd90e01fa33c70fcada27057fc8a9ebd535684eb90d33fdea49cb1fd5ec29f148dd79c0316d395ed408085196531459e6fee3933048a6c060eb88ae352b3f738f18da68b125a13ea71ee5e9530d2a096e3c7afb13dc309f166f737d8f8dda87fd887d5cafcfcee60becdd35c0caae70a725f1dfd87797fd109a5b3b4ceaf9fdb032afb16a9fff9f47c9cde40d2319a5c233761e985c9b3a3afe685673a71a04d213ac2786408be1a016fc209000698e0af0448c982d8a1c62dea03f5a8f52f4aa002db4179af968d88df468b1353681016de80024f1db20afb46039c6cc6920bd3f3e7f344df16b175c2350636c48c70cf19501853c3478d6c0e57023558a2161920e6913cf775bb41f2d28f2ca1eef910c50299fd20053227cdd38a0507945798925c9844a29cf0675fba003d699a5fdbdcf64e1eeffaf43753a381353fdd02d6b757cd660e1cc816164a037cd7f4ad1c222c0e818305f9299ce34ad43f9212de25d596506ec963257ab091208233ccfb1c221e1d41c6cf7f9417fc79aa0f0f3a0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300125dca4a30b514f282b662a32025cb71e1f6984f004ae1f646cffed811705d03403185bc234c8aa3c4df4a9f389d82fb7559b8f54023c572f7e5f34934e8bac9a420662ee884e612764f58189cefa675e682b4fbf9eacd5356168641a64cc749ed9244843e4f68b8e6f2fab13f956b12690310810d0a850731f6201a0676e46ad8600000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017b055cc6302feb5992890ba5ae8382526a273f2621742dba6e8b133c9298e348b9c1fdb1d7d511c228b07295ac8f5ef363279102d87209acc6d9719e24035bbf0ef6f3576c4c5313d7fdc2803995764891170954372513ae7da1bb1707ff92381fce9ceb78830e95cddb536d3e371af25343eccb17ea5e5299375668c20df726449ac3b792a4ed9f06be1fc2e69fe7efc3220388ceb805313782ad5cc110c4553a2eb02d98ae95d606da39aedebb69ca04d4101c74b76108b83edfe7716ec0a43dc6bd06f5bddf87fb12b80d81ffadf2c8ecdab8dceea9492dc334ea586a0723900971f589aac235800c07605cd2cd76056070d983566d9c95918bc17a7911d2500c7c7ffe82efd2cfec950ba3fe0ce5adedbeb6677326bf512879df72d49a75e78ecbd595206bbe513e86912e0fd3c664c261c6276a310a49256f716aeed31b50c667684d57daf34d1ee17dbc5287c7180af04721c9afaed96a3a1503afeb83c0bb9de29bad7c188ad5f4345125a124b018f0f2a112028b2b868e2fbcbff80411b0dd87cce68b375db9001680def299eae90fc7d25c0cbe2622453d80504653c0841b108a1f0847a7f1150d3b8787dd909d65c9674d626f301fe9ba85fa59d0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011f93fa05387beafc9d186ee5867c3390c4aac9a1e9febb06d433e3d80b88c8e0031a00024cf9e6fb49e67215a3b853d9c5be880690e1ae4739cc7ae42f2d1c9d3709e85d3b6744507dde595b89c2e435559cceca23b68a74dc7c89f987b0c8c999026b972d84371bb5053256df63c787eec46b221347ff0aa851b54949d69b775300000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087faea3de1e22751d5fc49d67d8ef94b3a6df52a0dbface66d8cc2f25c9440cb9b07a23d5e24b60a9db7375ef8878abd724e6655ae3014dc57505c4a18b6ff0d5129b7d09982e45467491126890a7eed196376faa1d1251d1028c55ddebe90c6ab89f0dd5bc4ed61bdb884d29ae678c3078633eb874bc8d09f7d21a43997e9c3deabd3021977d385d3fe7a32b433d54231c8241b81b0d511875cf4cbfc184bd1ea19070eb1cac92ae0dbc7c357f88dbd9558c6f427d92a105c5ffb6a55253977d9badf9f83ba7057a2780d154e7581d4618f7033a5d929f0a6df76fe326123f1953e8ef509ac8012de4424cd0286444d5d169e80d4e1738c35c22df7e83dacdafeedf60b8d7554c390245c4b61e3b92a01c1ab11ae168cb653aa7f166afed103b0d0297c86e483532bdeaf7d565e53d8cd4d1c40315a2f3e013f43d4d89d90b54175bea34029af41b53996306e78b2d877e645d0237b223b6abd199a45f8fc2107a239b1d373180b5a17e8b5b635ecfce819620238121980aa7173dbf41d41ed30e98ef47996549737165d45ee70111a8ed7d35994339d5b789f398b69655d20e65a99672e669a443a1f820162f74880300844ab7bd4d2f2260ecf1c7f5d627d0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012d6ff2b83629ceea5e54e2cba9c931e47ac34997fde0b1ce528c4fee27d804e9031a9dcad5e56a395b8b6b09595535923a36de438e078ba5b31a708f37c4b308672e0aeff00d53620919d9b0057d793b11eda8d9eb98dd6639f8e150ae6643ef8c2fb7e42499795d46c884e7fc8fce485635afe7f53698a8d0ee99c05ce45e97fd0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b3479b09277eb844cdc72e4414c01a84367c2cb72dff7dc6c4f4b16bb1eba3f1e8398ea0fe6f8da5fec66ade94469808b3d47089aee9d210d22e041edb6f5fc079256ae3d6dbddc3cf2559750317b8ed5d406aed43afe83fdc3b10b29add15f1a8c8464bc496d83dc3cf20b10ae0e7516d074851989c51598bedf962dcdaa8bb6ba6415c602a5abb05bbfa07da9b6794b3a0252c1ff1b6be7e203c49229a18c09b181b969a972e1a64d6a20516f143b249c32ef6a97a6c5cc67bcc89041b6b52ebe4f5d091d01bd0c197bf8210f12e06478410233f9637fe203c79b339f61e7517abbdd358750fbf205bd3ac3ee2b2d6e96bc4ac8e3c23540eb8c25c0863af07e25b61a70357b5be74c01319106acce6f8ff7fc064fc8cadfaaff184679c67514f5f76e92a179cd56da343b56859a7d31c3c5d55e32b07659263c13ac51d2094719e4ae2c9c885ac81cbea1d10785706d2e0c3aa52b72f4f05ea39ea24b6f82bb5599938ae473319eaa77d8fc42971acc758dfe1eef792dc230d99d4da8b95802397b100121d63ad88b8fabe68bea6df2570d04a4c889ec23942e5d9bc9b1b0d7fdc63b3d7e3bb7ae5856d623f89057b79320db1e613a89bea5757e6528e5640000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300115d407302a824f0ee37014e33c4a259ab49529e691b5a4ae4ae5042a57f6ed4e031aa27f242dc3e56462038d18b45bada04f909e647ec0d3ace9716bd7bae3e3d227d32aa4a6a1e31521414fa9dde5187d755448291b177c1a0278af16c1ae59da065fbf1e92f8b1ed3ece9651837e3e3b5e498bfec7222ff620b61091d3295e4c0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cebecc297370d90ae8c7f99b020a556bf47b1f2084b02e5087f3181545f9469bbd4e2b4fd97aef5ae7b78b9b837472aac7bd58b9ee4cfb942d91170cf32851a78c31fb2afc061c563b57961106a8cf407ec5f88caf4b1ad69ddab3794b84c90262162a5f56f2bb28b041c1c7ae359a81bb38ca923ae9e0761588b64cec72dc7d2307a7724ad2bb4dd9a7879e8de46d2c61a979aabb964681191d434ac0843828fdc65ca8e98d5d17eb57d44de8d982ccbb8f0849d6a24173cbb862d1e85028e29c8048109773f945694034f86a464837d7d863f989dc3051081b2a2c8adcc3cd8c08ebd0ae8e2bc3d3d6d5a7d9d6ba7c7d4d4a0e445cad71635d0a8475be6338a85dee91fd96806b8b091e3bdb4db5be012d74d07a9647e1c18623875830ac38afd0b325c6fb79d96cdff451af0602cb88cbfd23df20182a50ab68171dfbfc891f6e7337f47a465b77d75faa8098a9f6bd170d7a81e5c7090e86445698c6f3c95fa46aa91ab45f82dcd50a8cbec69585a3efa2aab6f2192c9656b1287b6812e7be10b5f83a0b1c0dbc137b794cc282f9b8f605397ac1786e9fc22b6a7ad151df791226ce4109c3b876e611bbb2d28ef90923904deb9051edb1899bbed62bfd90000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011971507f04c51edb2181d2a999946a19d13b8d8b703b04c7a3df6b854298b6f2031b282c7414f48c42dc2be6d044eea1ebac2f5a14c75ed52e4ba99cc382caf2d62ed43494b999e62a4ef3c098458772c1071a0ea3482289885cd32fe0f313ac232bbf576439c400e0f95013d0fe81ada2d86b011f8cb27a2e1b301b84fe7ed06400000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094828d56fd76176223fe88bbd8f7dd6c7a773f7f02816d9694105dae6c68d44d5dbcfc9890d28d90ba5487726d4338a86fb725a2345f9e10363ff5d469dcc6d65eb3fc118f0cdc29045d4d1d72ac7296c20b22642f3b418c91a75aedb0207f9b2a237aef4423a9b9777426a17cf01c86a1b4272b367e3b6a4b59a91abe9f8437c8f1dd2e3b7e868088d026453031b28b75ae79f62c74bb4c9e41a18c8983edf955fb2090b3f2224b5d2d2f373e08e31938666538e91de1b1184a404ee1d149dfe7a1df70737d2b61128d8b3e8995471e998aa07df7e78e430cc35282aa100806f6c7f03e4f658e454349b0295d7604161e97859e51a461d7eb1dadfee0e1e4a6e0cf5b61a01b33d5fc05d363b8e5121d847d6aa206ec968ff05812cbc07c9bad8036c0e267f73a52f7bf9408ad386e5237bc1f4fa9e7217a728964a70cb9151ac2031e35e7fc1fd75901d8b430d99368bfd1e76fb200bb84d51cd8351c6c499c54b459af9501fa3780b9976f6d368726b94b4b19cf7553385c5025f75381f2dd5f951a8842e3852211dd9677d3f6f4d612add2187ca1f34083db2b1aa3fe38e56ea8cf2f2783bdb8372bf1975afe418b7a0679c84d29f1eb288499fd1cf771aa0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001135d64a738b0b6db2f1e9b20c87b0ea5bcd4be6f998d39cfcb03eb6c423f264e031b4cac1b62fe1f7033c4106dabe4e04c62f99921f3c7af0c4aea2ecb76b8297b17fcd53c04ffc9f7886b26e266b117c08e215e6d744c2e65348299792be037d6284d03a2ec2b2445d6761fb7c7836ed6ed542d43c73f6bbff4fc03d5269f95d500000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023e37880e392732c2d8ab068160484893a5220cf65dfc8c0a2770d16adc751e81f5e269be2eb55e6f16573658465b6a2108e503bd6d7c6b54dff122822d81a501e7d232966a32457c319467eaa32826e3fbd21530ca2efbcc8d39f2a7c00676440c688f8ecb18306edb44d05450a23f4b586eed21283852a366b0563ad09dfc6528c74a4cf5623caac82c050445d1d1f88be2ba29634a3704687862052419be8143e82bcb89548de494650575a54df90412498f8b57307294078d4bcc002944ccb9e607600feac405b23f6fb473bd31f755b99eebdef975fbba3910b38e8e6b7a930b38b1157f116978b802c588d1e38e5ed8e3c558334ea46a15bab6e220e71ff93e4316672d5f50017d80a7e2f57db908816e3949cc3862d9e5a792713d57ac29676cb54e9d2c10c4957d488f7999d3223c7f76a490de947b852409d50ac87d9eceaaf82c30b034b2b473f63cc64a32ddb044b8a7f673d8d5cf3babac8f4106bc78a7184c0d25093d2e66c4fb1f5eae6b8aaa090713e84d0fd163a3bf13ff0ed55c3ceb6f3048c146a7370b560fd04f5a272e0feb9b354dbf509502d4b7ced7f4f158bd302d61ad80e9228e2a053ff0913598c548013663a88aa4a0c79495c0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001128b5e4750cfb82b8b803044f983a33fb62a8c73d6ee2f26b393e18d6e4e7bf5031b6c7bf53c9e21e8589fa2f3aa40635759f1bb54f5ae45fb5f20824922aa06370f56272322db2a949c5cd495dd0da93c5428f887a1ed75f0f7e4381cb47f965f24a46578afe3ebaab1645c1213afd46ceac39f38520f0e1e837de6e3b8b56d3e000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000846e7d68bcbd2887c143459890f18a0be5e67406799a851f00a44ffc5a7785445ba7a02f6ef43d2ce718dd88e341802c514ab80a60a581b2ab1dcb7ca208f3defe16542e580fef088de871371d48a4830064c2c70292a5ac4ebb45b4d7f8b71a5b77c5103d1612b2442284b2c7a15aa8d1a11601c2a0b612190cd993105dc45fc34ac3f2924cbe0aaf282679363b5a72b1aade121f2e4e1e9bae8f1db2986aef72d5e73261907567cbd13ef5efee138391fbcdb84124728d016a65ac647ecb1b59d2850299904f439c6265f4bb873cf8b45bddb44408c9328b25f1ce474c67198669f984a22784e82159f4ff32d6ba78f1f5e649123ad435c85f13f1b8674c4d77c376b9d0c6d7ef026bbcf18bd4e34543321f34c2a18440bf598b29b8bc9c6b0778307dbc551442838736ef0e1adf40295a82fbec3dc2b290a47996e701c46a5ceb119da4c4dec4d7da7b384bf4c96c80769d14b5076c0e4df7bbea5360a1c82d34c7accb24aa71d03612fc2064cc8ff8031bbff06ee7df83f0fd21f36a5b837adcee96b2d56e327caa80fb87ce520cdf7f654d061ce9a054c16e4d5188a33f42cdd1cc571843d52a1de9620096256aed9f2dc1228c3ce3953df0f3477705900000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300128f0237b6afe2e9d50c5bc34516bcd06e7e0d0c69646feca6ed6702b17cdbfc5031cd2cf6351d86ebb54452c50904badc493eb57fb32481afd1279661b689412370ee0fc0236e9e993af313b77d829157b5fe2a02378835446bce8c8ca45a41ff90e846491958b1005d939179324d95bba9c716baa72f95ff2a1fdf05a7e789699000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000845e03b7a9552657773eddedb8ab675bf0db9bd1ac655fdc952aa2b38ff5cb3dec65834b741ecec509877b9252ae812eced894fb9e4cdcafccddbc221bbb49e0112463765d9c2c4932807ab9cef066791a3543e1b46cd95309235fbddc268052b9638274120cdcb5e54c2f5ae47603cef0c5897e5d089965086a438639de2f2b8bb8c84827358ee69e69ec973ff04a4a03fbad13bc36bb877a0acd77ad50315a3b4c68072ebabe0f21b0d98311754a0108d57291b94b3f5cb99351547046536a263192ddb45c5e30b047b3c5d9d12464ba187eaa56e84d8286b99d8c2d42ebf6093b44349a8732e4fe56b0a49d560127dcc00966ce4abd98f9c6bd7fffa809ee3d8d110935c14b06278bc06f9d66c9daecd66489ed828ac072afb5495b55bffd60f89eab03284480c74113ca6aafa014da25eb2f3aa58a2f5d621f5655c1346de25d64d8717e752b9663c5aecdc70b17b41476a72af5d90c081cf419d13cb6dca08aeaddaf2d18d73379b10ee15262ac93f4ad725ab3ce1133d74975457f5e51e275269dfdb79806d84d08525327ad08026d990b30463d291f81a14c7ceb880e568da57c2e27a0b27a217da281adde3167c57f6234a5dac70ea518cb5d0a22780000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300100a23e6d95148edf3b2801d2e8f10243621f7547be4066b1163b120452ece162031e5050ab695ac9d071892080e2504d6e337af1a7232196c47d14ff8d1be695ef1ab567a0449d1e9699d4f27c19b22e79482d594d3d80e190297f7fb5d15c0d7c13f59af6a50d8cda6aff3fb19f7b6cff884e06f2cea4ccf3714129885e478258000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a855fa705bc116e48c915c4d819618be36c471087a2884bd7e95e1a7420fbfa391ebb52a9e5cb201fab566ed39cc6cd1ab9ed3849ebc6c21274feee742e49a96ad3021c99a0b5eac939bc94729bedd3140ebbe6e7c3743b489758c2fee2be5e9d03dec0b7083cc8611afdf116473f992c63fc120490c9052e087e52bbc6cf84c576b146c8df9ac59202046ba80f2e5307d5ca8562013dd7d3dd91d82ab324960a66c242d985fefa9e8011d00193ba856ad7f23f72c1dff415deda264e9c061f3cadeee3c8f0a8ab7e7b60329a6e4d40ba58286c0b31d5a0ba50a4f9e70f1778a12f058cf955bd0aeb31147eb7a4820b2bb61036f55c1afe77921d20af1ec89fda6f32cae89638ce22ea22aaba2e02c2981e909017b33f3fb72c0776aed96a8cf36ac286f9621c8f467a4a2d7abf0d7b0991bd372632af8eeb4652fed2c37ac917b4ea77f7733d3442fd61a9baa6aa08a4f0e51cb1b06b4a8f196f9d9349d0fc05cecbf610b469e2319dcb9121d44659c2ea0ec3c2330fa503278591b91bbca2413ffa3994727593049a1c191b7ab40a4afe47fb98249e29094e33d9d52a582db970a16aba981c4741ee8d159183eeab32d8caa2954e32dc1b3f0cb9200b0ccc70000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300125c195244cbde4958a7bc68b0d1fc96e3cae8ec079650d18de4d24d8d24674300320598815161678fb904786492e8d602e54f5e207fc3a6d5ad790908a74589af91c5c0ab12ab7da50365f062c8005d2bbe7cc016314611f1a913c00313509cd612d5514ec49bf0aefa940053d947ea4af10e7131a8c8046f0ecd730b550937aa100000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024123958628c5112c495aaba7e371a50f51eba2d3904c9ce62925fbeb31be901b4b5c014358948ca145dbf6953ed793270af223eff3131e6dda08b352beb8401590df838beec2acb5fdfcc39f21909dd61c1206944956b66b238783904c5f2802e411b01ebd1ca4921d7f5873674b28988b7d6bab3e9ad7e6bb0e1ed4573c7d9398e2a7b14bc4ecbd6fc9022e67e6f14528218c85a7f0663b33824f2dc18d1d53aafd6356e2a3f55010660a6dc0edacfe140fd0905c21d58bdd5ead5c6df520a52f76b0b8aa841f38e81ff43dbd81528281daa90e7ed828d48ce80f60b6348df8aa4f14fa783baaff970df09de15bccc3317bfbdaedbfb55913b6bcf76ff8eaae818f0d4d025975ed29fed4912c4559c698a13844eb9aadbfd42f4eafd3d5345b4cf3bfae36ea0ed5adea62bf07c29e459d8994e8285382c29232ac25e9cc4ab6769259526c5c3443987e7bdfef8447dc05c29f46bbabc132224bca62323ef756b6734f232c818771cacb04bb063a36ed936fabce31567f19181900093305b8756c3ee5c2386524e955c6eb2b74647c67aedabac32c790a669f1e2d5254e4383265d5f798d45609692016508f6619b5824fa97f962c64f5098f84fa436e324c30000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011dd950dc1d3439ebc4ed2acac5c3bf648df8584044ed4a020a402f7af36e706303215e425a461cd0e0f3187fa5cf25bea6c068e86483b1aed4eebe8f32a66d17ce0354c4bc6dae1d8919dfd7110cf4c0d72b9de7e3607c6977b4e16039994f296a19d75d158f9253db5102f77638f5f64444b149038c5f46aeda800749aeb2554100000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007048b89b30f27192ed414820deba94f352abbaf45b836caaa77cbbae4b0d31dfc4db6bf3a4d2726240fffeee036c69279ff0615ed5a03af88f12c4951035c1183f2b31139b5c0f761b2d5235c10abf1525223eefed7ab63c5b0b54467e5f7720319f5a90a6bb32cf26a42a55adc3b551ab214aacebb235127035f0bf111f793b205ec0979d4c20d9a2962f3034d092053583bca3032c6d5bbe349edf52ed02aea8eaf434f3ecb46149c29fa96c86b8ee5cf9debc5873388a536510177500caad8069a6b56273c7519eac819cb8496d3b063ca2946ff159e0d4b672ceff9553e27ad0257ed53ff7cab7199a7c2447428772333792bfaeee0c05d80c55c2b618034d75f3b45acc7387c4cea3adb3084f16fb600f104cecce984a295d8b7b74d956feb2a781fde94b6db3fed1ea36ad743404ed30d473ad3c5d7be5611b1179e6c934b9ba9dd7f27cbc0c7f66df52467303aaef6dc834ee06f1f44d998bdc6cb09d7450020fd0e27d286b1cdccad228d987f940d410755cabe5bd4ecedaaaebbf72c9671299b7120b0a77fec6f41d2c0fb3120d2c55cde88a26e355231dadeb1b77c6d3995e23b6d67c94e86bd1c1c5ecd7743490ee0eeccb544bbd1e98dcfe2e40000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001146d382325da997bfe8cb356ef76cded65c96de65fe66a34b5d8a843f0c8447d0322319e5165b559f812efa3199d360433b12c5b076fc4e248a23145e2b30e7a94071e457592c6324ed8d2fae4f3c7ca7282df442db9ed983c92b39b1d1c2466332369b82747bfcc2b19a4dbbd4a43fa3dc53eabd45f74a8d5710c4b04eaf3079900000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b64f90b0f0d36da21027a3700b2362f92bca9debbbbc194248ddc0d04e4c568faf4f5b58cbc7978abab4e10ee2bbdba6010a661360d2e62be9a936b71a4b6247e64332a99b98ac9264dd95bf4b3dc560ffbd259d61b13a19babd8a93feb723f4505056b89cf4af76a0a45d3577a26f7e05d018b92a726a9700e3ef0f75aeb52c7a7433630333fe3e9a12b9888d9ac30d2a44e95fa4f01f67109fbc4266405d2109c9fa632303525018bc3b4c488bae41540d1c66f496ccc5cdfd0e1bfda9c5a2c767723473b8aa019473e7e0505277a632947965f45a1e4671f506cc047ca00a361cf37b1adcd3155896ec2cac1a1009da418bef8a7c29456d8a7f7017c79313f4bda27eaa8039e467fb30648cff5d3102983c61576548ee70bafaab583ad4b659e9e8fe3d675bcdf3a49009c8127a23702dcd2e70aae713af6a29b635fbbb491a020ca2761357c430906da51d02fa64091456620e8b127750eedd7a4498c3481c949619c72247ec72cf39ce1c7093c5ff963764164fe298f0e543fa5ff0c3b116e1a0489e09f2f9aef484a4390c7403c87e80116898384b304308845c13c6de70ee9158ef4a624dee774277556144fd64d679e616cd5737deb319beb83d820000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300106ccdb44ef660445f036f01dc03d57f0e4969e5281260e2dd610018b06657640032233529c66fa2420f49b5c0000a91ae8451454d48f0a0aab1516c93f445a90f4158a2ae6f56513e6499a644b6098e16096aa270bf8534b479e3e1190942f35152563f346f86d1a8eb5712485522e6e7f7b22c40a11dd715c7c5d0e73aa6a38530000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c4ab8bea859a7fed8aebee7a0e9ce68b8ab2889a36fd09c8756cd07d3e524bac5ee384263b890d76fa31c371fdb13efaabe037ecce2c6179d23d6b55de72e25227254a05d0effdac71ed6b43aefd8112854f9f2500c3d62442326922f753ba98a8459f373590379123982f1d30c2a2e53f9facb000ff0489e4547886e63b898ebf3129ccedd52349059ae41a8bb8b0f778ad56561c737a226b49134a93482a8e00f2e618e141fd66264f396a1a177f334ce249ffd7b4f955997fca5f0617a9ed0d3553a3134c7c4dfaae7b3fe7da00c0e4ef846e1b879dbf1cd9d2e0efd076d5d1305260084274e966a2d47f03951d58b2f574d5d7532a46a629a5fce512c2409ac570735419ea51d24a538f48630111c518d260d6313f8043b6d281732433006e31d310ad315c546a9e3194dd2de7987e4970cbfd03ac4387459f90729dade8a9434576236337daaa81050b22565d4def7c977503479d95602e43b33eae256016878c94898570117c06bf3a05b7fad4a2d02bc5615c2fddfc4d150358d1ccc23141ce54ae9fbfb17a6861a514d88103ff659fcb5d5e102d16210a922650fb9f115dfa73ed630cbb588d897de8dabba6b5ec9d780e5208b06b96f646cdff52c0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300123f864f93d8cef5abb2bccc663e586436bc42825caef1604bf448050a713516e032277fc1fd08241ade927f19fece9180b93f2bd65170ec9a88b9cbcc6d19076f120e0d3bfc1dde495568640cdd53b44368a96f87304b541395cae6833835332630dcbb0a0a4005de587990dd383c4bf341cde5a80d5ff502c47a5749e6b4072c900000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091135809e6c87d15947f7454b4e616257e436e8908e8d12f199a32a903c607294e8a757c04ccc58c807cf068061884f14d4f4d27a6142c55a9c2a9d4b8602a7865d9337fa714015eb41c4b57256b7879c9575aaf56ed8f90ace83e7cf301bba4a575979b3fa7cc86b05644b58fffdb47510823f901b9c46fcafc01adee157b617c3ed6c108b0161a349973a8a9153eba60319ec8dae814c7f21c39ef1d319aa46fc79156a022e94feb61ed2f9de699d59b1eb1f7463b6846a06855d465d8daaea442b8265885eab6aabbe23c67e20e230380d2c9d2592b177052aba216746fb9d9ec596b9a8100f08fd2dd85fac8d059fa9bd6c31ccd5b58d44cdf8593d96e05402ca7fc2364e0ae0735aef8b6d22240195424c195ac5debf36a5b8a3cbb6d9c3a1030cf349fb2e26fd5f394d187ed0817d3586bd8577a9e513977d62e442ed8200f4d30f44335842b2dde688bbb2401ef098f90a4534c2d4612f12b13f9828b884953568399e6d63a326760c89fb48f6544f1736c97e5fdb695e68ac5ea5c79ade19f9f192707af317b9d40b7ad197dbcaf355f609298da503f66c03dc506383f866c51ca82281b0444fe9112d793fc2cf4dac7230cb48b8fd45f2501af8ef70000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010e8e4cb6d2c9ffe104ae56c10ff78d01d8099af17a573087e02e3d4d62b7c60503231570f4c26ba5b620e20044cebb46e76c010c43c0c13e7b13936afb6f3d9ec0129b7b2909ea39c1ad58e7d5c7ff2758c8d97b3f7ebd7d936779fdf2de106fe0081bbc9ef33a2eaa8a53448af431042c36e1765392983f54417ceb6f612d717e0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008835139a9deaf58bdd829b33d47266ebcbb87c363a611f3d857797e04dbcdbabe136c730eeae450a2d396310f1346034d9da831bf6c5e7b4a46f98791e59b5c22ceaa7990a2d5ea286436bf29b8682aa5d66cad20ef006ae19a2b32b293700428fcff29a3b2dbcebebcc003ef90b3f9890f781791daa8c0528fc636919196a4574b4a77a4bf0e648234a6a24e8433ebc463908ac4e190820065b990f7ab7d446968142930f26d79ffffe026e10aec8e8c566cd5e7967cfcfede201625933a32fb16a526241994e1435409d2339562824f08ea52a77e9e67a9dd26a0363efd4a3f419e54ed915fc4c27f1d0a9d19e0372ddc8b920cb7500c38b69de980117243dc148412af6bc4ad1a9906af744135fdfc9d62d72c1ce688a7dca0f90f4508ff9427e7447012e78836c35a17a21db4581b4eaf29dbdb2299310023e70a00a9cee17d8860713165a5ec8cce245511b7ba51a3669338d7a8c2d0cecdac6126f7a0e0577b05e8af148d7c98e66cce86610990d4761b5afb6838bc846a37e3a784569a83537e1575f5ad1cde511ac207daa215239fc2f65dc165357022dfd7b667640e52beba22d1c6866d0cfd45df917afd8ab5e90ebc0c6456d0800b8e2ad26aa060000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010982a44f4ebd40bad06c6b2eac7df09ecbdf3aa9f6f0ced88caa8ffa910a65a203258f1989b575f59426711cfdd329e0b47a3b485a046afefad0759c8758c9bdee28910f8a8c63258458742cc16424c6bf4fb4da690901522ad8256045c0a2d7930b7451fc9881d4531ff797e3bca5cec98e517e209919bfdc2ee94e839f98a4d30000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fb8b433a12258a1c7fb07503f04e8a88750eaa881375f9ded482657158a1c8513091dfc32c9a3ce921146c57268452c3c0f9161166a8295a52c7f6c63d6548e96e7d9af1ee660b531e624094e4480c2dc9c167fade7defdf56da0128f94ffba9f069c79747afe6193d00d20f1b7f89bbf54450f635ba78d9a5456a4585e890fd2ab8306d8c7039de82da10f98a989f6ac5aab4815f13de9d515c6929fd0c26314b87ee655eb1d80218a9e969fae911bc33a6e4cebbec61e96cb8b451feadb30953f68794522c3a9a86c22b5a6555ae6a428deab05ae4a1e79c6785135e083d86b758e989c384ff26041d4a929f88e70fd7c5aa4529de948ffc4d9f652bc3adedcd640c007bc8594e0b9d9ca24c88534cde9fcf637633293e3571d72f5312a91d4cc1a6af16c92264ea819e3b2d942c04f2bf199581e864043c651fe79ca5cf74bcff9b93ff90111fb7d1ce8aaf72a53f4cade4f93ae3f9468381da07ba04cc53e227b26809b8f5a04bf0d1947dc83224dc9bb0b7b29b5b0037cf112d31f0d4e4c34639c41deab6aaa6aa647eae7249b739173a9c5f04c833a4a91e47e61c4861b91209e1723c8f7170b0893d4548c774f00184b96c4a6c2ae76609a9b5268790000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300100f26bdd1c5a4069c86991bf706b9e0199ab182ded3eb20b04deecccd57cd0560325f9c3380e06af237ee6980876a129489d9fa22263f68a9f383b00149543d37d2b33e6d39e4a7a7792c7aeee9ea233723c425bfd24f9dfeacde72cc7cf077fa00e0890d314f9a42980552027027af69cf56e73e92576691872e8792ea1ae18ba000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000109edcbd79d043106fd0e774866322c8f994a0383bacfc3caeab5844a649547c2c74fd27b1714d658969ca6752a6ab1d744a811bb83832f7cff91db735159c19ab3f13d759abafb45a42ed2501073944f8353626c785777d5491db2c65c6f688b3aa12e764c212d76ff59374fb671b1e464b4f65d1884a2dd8ebf6f3d5cb454b5d0461ddd229db75856a1e761d5a07a71e05c214052251bf7843a3b3afcc927c58672324c4c0f43240ded14512b1e48a21ebb29cd23ac5381ba48ca2d65b78aa1e49b801001c29c60705528bbb81d5ec213aae08e208efa16682761d359629461ba1ababeb7c361019070bf4acd0f2346b36feb60835a8e96bad2f7e72e96b989c3f72a298ec306c45cb3f5ab5b6fff1ed4de1024ff4d04b4a83101256f8e402b26aefabf0d178a8833ae876843a702da76288ea7ce9fb7e8f5ba106eb382fb149740dfbddf5cc0733536c359e8fca2b912c1c655cc44b585cf99d11a8ea3ba1dda19171a120623c1d11b6b02e4b30669d3b2c8453bd1de036b934dc6aa90fbd754380302a574e7437959667f0b7fd65523e498a22878f48dfef799fbca2c97b11b1c30dde2228c125358525df36ad95ef015bf114093b14840af461e5882d220000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010374f30bebf2df427fed209f95ba8a8d17a4dd4877be420d876e61eb385fda0c0326c86f6757ccdf38e860c09afedd0a4544c3aad87d1e8c001cc11980cacef6f42440b572dfbb40166cc0ba9ac11e231a361ab51c1877aa98b857e138839b2e5106a261e4ca6dca4f576d58c3cf52ac312ae71c789e7557aa9fe5107ec59da0d0000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000905348141c465a5e706d1364889296dbc44683412db7575ac4d2cda46cabc4a4291b46138556ac1aae3390495c78e33d443f0067c9e290a2440088ad0d3449f44b371abada6cb5164add3b4a0609bfe9bbc6ac6559d4e90f4960096e1085226f713685d21fd64099d1ee08d0cfe88d5aa66b7f36bf63c87c923c0389b10a3a0d8b57f0586ee036d7173c183bb87d0d75d12af38dd031533750c17905153a405da03004cc7fef66f1665cfde935cc33a8a1bdf352e31da1f78906436e1158b52468fe30238b7801768a6a0d689e62b50f40a10005624dde9429c65368f72377253cc30673b7cc16f8820381a5d4bec8876f0a0b1d57d9a5d3cee1b2af4e77d39df93f5547e50960ac29b32a7d9c0cdbdc68bbab0b8f01004ee358fb3dfea1f3a4d6f027973a7a15b9dd3379445f32c99b3bc726bdab9eec0cec4c3ab41ba56a6f11b20e858f56db66551f166cce766817f4b5d0b18af6eae594621d8792d76cd514fa65ec13f8a117016d59c6480d0fe1f834f402bd69c8bf6044a431d051080d84cc26831d444a307b620796f796b8d901f34a5ff43841c792a66e3e0b3e85c10b60e210da43cecb6fef2a7fdbf98768fcdbc76ae9396a65361014715eea5ee40000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730013063b7847075b36d440ea05674410e907ba7dc8e62d46e555187d079922b290203279f6a75c26d08ebdae4dd06411497c041a272d08f89bdc788b5506c2b994bc40aa5078fb69b01d3614ec85057ee4201b3b31798daa54cfedb8bdec76325a04f2e6760c131d00a1bb3b15ac5a90f92647db557318cfd1314a644d6e9e4e3a84300000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012e813a31c8fb4c71a61b55a2a3ceab54eae2c7856d765ee89c94caebdb97057351e0c3c7758f4f108185a2e11d5bee0be3310a775fb04a0e0521f1e456569f088115aef7d640083165eca3b9db126db0a7bc3c461c7bdd81f5fdeca71bb2239bb1fc1c371442005dfcb95ecdd9f5c68f332130fed70c82544534a47cfdeace28b88653e5cbc6af121f7adb093a0d0baa749a281b5bd813408b5d507df0d8e300d6df675aef5b83ee5dcf4aef007e3fd48d24f6ed027b192d3ec43caaa8a54451c2099b2e00cbabf75113dddaff95d18c7d1f7870af57f355f4e23f041f484dc802adcb3889cba6aa1bcb984b59cf515c421407025cf598ccb0e642af4b630fda10989c08935a6eb0d9cfdd405ebb09d9c3f071fcacf34b8b0700740c8df29c7cc1fd15152e04bbb0767f89659cae9182ac45e9e8532a30e445c2efdf49dae3278b97e9dc73f915f73590af6918d28eacb7d01b9a47fea087d4b4418fafb6a86bbdd667c237000dd161599b3afd69881c85f1a3e9e7178ed3c19ff67095a0ebfccdc08fd3657d154dc22e777b1b1e59c62f8e00295882fdf3ad39460eaf6f232b86755b6e5024f1fe52237bacd2c94c64b4ed2eef225640697bbe971622884970000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300116eb9d72f731ee5ce8b0e1da1daf38e02a6c063c332804c5866650d3f8e4f0ad0327ff221b017c8bc04a08d29a235cfaa349b29c5a79af13b4c1cbfc4b30f34c66224bec242ae6ac78bcf1e3e3fbf4d9e8b48bcd09790ddefe683d1867e85cba31267a8998e15d3a6a6a5c6b5bd80671c301edc0520fef2fd8a998415d0102c1b10000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c78dea7fa1dae6ceaf83369feb71cb23461784fb2956db25ade085c94b5dfe7efbf69c6f5f4a9fdf5d6f6fbe42ec685772489a729a45f13f407aecbce20fae885f622ca925c2c44b1f8590b01e546e5578a86753bceb693fcb18e93cfc54b08e2d4e766a2eb935d062cb21402fe22322118e151f7435ee50894c950d242641c8a61ced99f22fd25b3569b18ba83dd2dda07992d0d967ae0b95eb57d32427e2e0fe62580e11fac025b2a545fede470ab8f835d0339228843914ae843e6d45dd105e0ab3634d04304e01803328ebd1b554ab382ae703ae1b7a26da6842de677db981c549bd64135a252b902d57560abf1eab13c0945c7992e4498c3efa5d41554ae01b0c97a3bc01c6ea5a67a86155ebbc2b47188070163fd9190d1d881fe6d8f245804c633c1d778d59f3b3fe38254b12b87748412ea536aeb0167abf4dba0403cfd1c4dcab9055a54c6ef4813d316fecf860995d4bb5a76adc1dcda5d18f0d03515b307cedea83c2f2f7476be060ad0db322d0cd662b7aad6c120bbd5e51e53a39bd0941b206e05fcffe9469161e63545a66697e30c967d88bcc11bf96ce889441673d314d49f4f447fe5b21ed1e8ea13fef471cbfb56ff6186465ad62e56490000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300106417ed0cd56968da017e5c16902de190cf3db7208e4739311da8ae974929d880328c2fc71136405ee40e4dbdd49212bac0ef9ae7c380396aa6e96089104efb8bb0956430162ff2453602318202a0212e3a879e94f4cf9d117ffa9bebf0fbf4d0f1b0ae9cd1c752b3611e523bcd185414d8fde833632047d30d876bf230b7a53290000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ef6baa49d0fa6f06d5e14c7c9af525002706a855cc2f6c3225d15a144520198dcfebd1191972d4a48e763391314289b10b3d9c94444217b1599f2fd93395c19fc2d3fcd67f2c748b2dfac3a3b90580a4b84f9dda76f3d06ffd5797b5e75db7380a7faf44dd0b9b6eb999f7c473b3d6dd5281ccd9bad39ac55637650623f529884fc69be9a434f8fc0c7b585a0e3af1b9ed3da02d2a470efa24a3b6752bad0fff518542214d0c67b4d372fac1beb5aa1fb76679c779cae7d09f57f0bb3614fe6d8705d1fa66425857c11c573be865ccfc2850d0e634d35b6003210022ed733ac4f793a028998496de7285a6db3a92f149f4663c0726c151b739cd1aa5c5d455e95605e159b26d7ffcab64adcd8dd7a1679f6fc8c92792e042099c62985131a7b0fb10afa473ad828e3f71246687e24d0024bc5f09bb5b347a8d53f3dd8585f35269b78eb41a3cdd4d74cce8466981ea9d8f0cb22adee6abebf5863d58147f13b36be18a793fc696d66c8ce2d7d1b46ce8b65e24a8bda31a5a3865c884bb55991439c5b72de3c691fa78bea9dd72e3227706172762aadebc8379406033be15b24ca701d1675a07a7fb214df7dacbdc206d958a75564562db7b58b02c4a2228f720000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012f757f4c7a4502c1862a1a295fea7433dd965c7fa8fb002ededa3dc299a9b1c30328ef19ccee127d2c5c0c917e0e4a95f84265ee2bad92a1b6734a1c1efe0184e523e3fa0f6e4b1f053ab91a8ff972c91b636e9f463d14f5e54f19aa3c02be4ed70aa797e4e8184d28eb0158f83037ccb10538762a687c15f726494b4d94eb550f000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000178b50cf53f85e12393f8accad8c06795421137451c9bec53ef293d6fb28cf2eaffe435ebc1d79c9ba0ce81045cfcbb2760ec612805a1b1cc884c478aa1dcc99223ad55e857ef873a153231d90fea812f3b2d9918533b9f176d1bb868250a7b1dc3363c07d70faadb4d8d9fa964685676ae59e1b11223f73f52e66bb9df1824cf6089b4444a57087161750b8bac1ec377987dcbb3f8e1dcc5bd435347786f2b97ab80e60eaa7402765975d55e4f7b8c9c1eb404e708c6b1738c4fc1d0e115491aa984104119500d6a1c80bd409884848344c59c0b8c1278dff1bbf3eaed5d2b1e670ca4f9169effe3f209823085c51b27e73458557507cab3a39d10b371a7ba8450e07eb43d836f3d7cab4a57d7c4f4ede88a38f38889fcf53a5fb21a3d767d328f47af4715748f684a3848ed55cbac93cc37601ba3d9cd5c1dcd61236c2046d64f953d0f87ee2b3f5109620664484e49287dff0c8f6942dc9a82f7b65af2066470aa88c74c2ea12f56ede91822a46524094537ee9bd716a1434c8290500bbf2896d28e6382093e80bc17ede3496b1d556b1405c8afe94005763194219cb3a404eee8235809682a14ef6ff871a34cd83fa23bba4fcc19a4d73d6cc8813a7fa0c0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011aa3883d27eaa64eecf9646934a6ee6a4f58b3afd0b39cdf05a478d4801227c5032a731e88cd76c53b4dec292f31085e1c044fb2d3827b8d56b2ed67539987e06707e170902fe74006f4b0b49c0a490ba6bba56754d13cbfa72886ff60bc3e0f741171e030bfc7e4bd50a6600f226dc5fa3043b3d79b21493b0677754df63ea1f30000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cae9f187f0eba01c6a56f69b6cdb24f07b20c8cc9caa9814a3936771464b8caac171803b2485487848a2064cd52a4203446077c7f53c2b68dbc94f68387af292f0f0738c3f1d2047916afa492cd048796b0ca5bf79bfe4f591b55c711f475f223463d8481c105a467f2c8aba91ede354f85281f4eea80629c0ea449b3e94dcdbe84bb3737fe07881f9fa92391e23de44ef5c73d472e491bfc42b9044d2a131e042de5dda0f4a547571076ee1662fd70580c16062d9de5603f63240fca6390e20bfc5fcd9e52d43f0ff0febc48e92f2c9b1cd1fc1f73f876fc4c680a07661c5167e7dbd8a79c12137ba0877ead6ecffd9c046a9cf5b07e2237e5ab0322e0a22f6a8d7e5a60c511d2c3153b81ba30bbc2ad28cb6ce35ff9b60e13f869264c06c959b912bedb59a704186378243426c6c0b4b63788608247bd3aebbcf38413b61ffb84317aa77f9479a5f05dc7fb9868e7ee59afbb6cd1bc924c4abf9268fde4d63933c8112e9ade2326db0ae1fb3d71d3e23bcd8a81e099d6d4b8d747692f32fb5c763976260ba07edf57148cacf4f6f11ba3b78042dace650ed195ab19d55633315aef280df8bcb457ad44d661ef8e5e952598b8aedc9f47cb060e5c75e27fe20000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300100c416bee4d079d00bb95ea8133eccf224e2fb1fb341d6f843ef57f7f425a7a6032cc861254c59a5ba1845ac3f8db0615d2a5b9ea7bfedd5f8d25ff7ad0bdbfeb81ae066b850add4d7c094f2455e445a5e1f287358183212ef93ea99c2d06fcb170492c819e89a0f0b2b7700605795cb214bb241f732602201a037ff9f982244db0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cef930c07464cbf8988a965c87160d13397af59453debba8006e8f484e17a95e738275389b52131ac8f885d5577c14c37424617fa7332115d5bf5fc58bb5986d32c3c677fc82d34afd1638c3b9ae524dca18d626bae66cdbf4902b6efb40bccf11c6c60c68be874b607f2e4601c1d9a2e47a565664e5162c8d1994092e4548e5ad013562ea73e58a51198b98159d6a77da6e4046c0f7db9d8d0883db2e15a44e603e41bac189342c3b656c9ff92c2efc3d12f8bf0a7191b395aa5912329ab5e5b435a729e6fb3b6d807dee02a9d0e964481092fae41764e5a10789035595548acb95bf59f4cfdc61e8272ed5e5b51bfd065bcf053337500454e8de15c67225a5134b4d9316cb9bd997d514f46accd81733909f1ace2d98d103176b25fc2987953d3a59a2848bf23a8ed46dfdfae694dc02c45de8c2940789653f66870e98fb765a3ee96d6cc6b3e9a8e9bdc4e651b0db212de527d8b01c16ef34956cb9f9dd996896c4d8a6da6f92c32d9449e996c8112c0d3dcd85484f3392850e7f3914804fa43b30ee678e55e5cabfffb42593ff29c2958a9df69fdab85a8dec7aee3038d43d7dbc9430fd7cfe211ad68fb659cb63f0488a67e85d1c714527d05407189f40000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001167e82d75be9268f5fc9781a687f02193ceceb5cca923f4b763ae505646f00d2032f15690b8e8147b0e15ce1b06af75d865e51d9f25e37f657fa483583d44ea52d18ed44b6af5073bd249afda9f91942f996268f811deebd1c799ec216bd8b61d10e7b55958b50f13063a2da8a0d0484a7324bf11d3efa0171c5e553b44269051b000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9a2682ea0e71522ffd09287b1235a0f5a093802fe7c8625ff762454cf37e96c6d1decf7c97fa44cdd3405fec987f1beda6922b56225bf023ac6aa58ecbe5dc48542ead8e61979214b59760fd8f697eb46197cca45cf5c967e93de71c6da1e76366e66325ddc187a188e139e1ba96b9cc47f8abd3fb9933c8d24ce16045861a55b8627e715547731e583822d0f14712cdb2d81e9aebb6127cc5014f0e661c1cb197cfa8a7367999a93b64900c83b13e2d69a518379646722e1143fd0caa912c7abc41cc930da03deae73d8cb8f32c5c020afe54691e0745ab50365b03251d31fa7ff4e0bbca2827b2c3e6ac9a9f33018bb47eb62b49e5bbaba026b0ab107fcbcb30bc23b8cf7196b3db472ecfa2c1ca7c3e22c72b13bf1b464b87af895e98e1ebb77919d963e5e7d98f2eca9cc00ddd18d962375e5f5ac5a1c2bcf343700ceef8926da4931687fbd64aaf9f8f654466793c890a72685bbe61b35a6713a9d20e7a1a9c0d5742ccfc707ede516dada1d01923137cda76ad4518bb6ef716379aacab81789ef80ecaf144c62e1da42d82ab21601727a680302654d1d3a362b5efc964f896f5c3532002e2f601d3875970543f8d7482682b2403a69cc8f4dc6c410ea0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300112d75cd71e78f2d23acbc46ed70caed4623d6df5541fcaf6d782065fe37436f0033001f158a38a4b6efda97c63cc9b9bd70bb4ffa9bd82a63f916bda4520180a341347fa27fb16215ff8309ad60f17487d4ee4fae4845afd2752aa79e91051eb7c1328a5459776368ecff40714ce7c7ce5acd2ac85e720d733a96ca41029da6a9900000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014b20a3c68c5873a375fab916703baf9b3fb032abcb434c139396abf0a42d8beca022c45afeb9c8cdc1e815a2cb437edc2520d7d48f5f21e27cc74dae174e19c0e5ec0adf03cc75be4c9d7603e3fbf552fbee7cc223357f4ad082611056e75ff974caedcc834bfa71309fd5f833418efce05fe7ba85d3a4d8f11a642b26b3a1f753715888539d865ef244d78b0a76fd428bab947ec65422e4213f2014f1efa281b89ff85b58871b61742657c32b678d1382a635c04d336acb4b0b1e36fece184da65e66831bd7d3d01a5154806ded0c043073f1fbdd5a9b31aec6d0c02e161effbe315847c6804dc7f1c80d6fe5f6e18fef956c0018799a5d5067de525fe00940473a67a7b4f790fa3597d389e8c9c52b9e5487e66a1f75ad74cc215fdef620cb248d08db7f9862148a1a7b5ab62e787b5764647e71df03900c632a6c0f063c683ff36c10ddd86391b8c851395f757755a27f51bb2cd188d2fd6c74535aaec610315dcdebec149dabe26ec3f8a39bbf1fb903a398f5307de16f7cdf156c8723c24b12dad65b3dd84d5603bd53227c033437750fc68254eda038c4e6fac5cec9459842dbae0ce6352d927d3f775091322638c9e0de93632fdd851e688a6dd063c00000004000000000000000400000000", + "068648e7b75f57925c209bfc04cb536e7e1187ce8f743a795105028f1f17147c0000000c00000000000000000000000000000000000000000000000000000000000000240084d23846567e217326c3de929872d73d5b3300d4d902bca4ed5f14bdb599a000089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000c02d3791340a0ad04ad44a2477ad3f3d9cd1167816daa30c23f6cfd5c241c02ed90000390000f790a96dc40f4bb065a515a52c58b820f08181cb1c1f87bc6292295f8f348d000039802bb7f2372436ecbb2ebd34734a7fbce7e41962fc16f42b0c006b3b074082abe0000039800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000070dbda60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad2ec2c023a37f67b98ba9af031950c580213c29af850d3e3c09e19999ac079fd708859a0000000c0000002400000000000000000000000000000000000000000000000000000000000bebf73001109f5bdbe52528bf6afd2b01e3af29901ba417211785adccc42d9921f0dc39260300634e17fefe07b348601ce7588001b0d0b19b3810d03589d94726d605e999112dcff98762bbe92b1dbfc366b7588298d10fc270fa28ef608268a62263bd6a3519c4092c242991f26845985878adad5469e20924e05ae9d520a8453c0cfbd7de00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091ec91987e7efe20806ddbe805257191b05b3eb6647fd0961c21d11c4919bcec1322cbc3ad75917c7dc518deddb4d582a332964c493a2e121ac9f24954bb48b8316ff8e09ca40bf7daae128243ec17c52e5b941acfa25bbd4617e77b8e49f1049ddb2b3a01d2ad1e368642654553f3f609d0d6d5a0f1499d86f4a67f3c804d603d285cb78790f79717dedf2d98b6017f58c8eaaa9ecc4b63c8f82be60b60836b03c0b65892d6a8f7a0c67a0ca3f58d5e9e2f53058490a21994989b3bcce8e7a6e7a7ac561b131ddd0ff27719c4fa82ee32b2bd1718cb5f9e77a8232d0b6b74b7562d1f7cbeac5b1e8e36d3245398fd47f7a61d56bcb3521adf3db5fbf11b9a2ffd8ae52f10c95760c86cb0a3953499f9cca7a45d42ac2687d68a5498acaf12fd767e95ade7707bd8603c38e50582c3de0c24001c6034aa68c436c6a63e579efc0f84e8fc9b8cb96fef91fa388a9ad9a929f171be0154229e2e975be51c10cd754872d0255e79ceb46f475d368b7c22a45a7ea727662ffd5da0c47faba1d36f8f572e07dc025b611af088b94b579c8abcecdd947fe39fa15630b1a4da67d62b8cd4ed19f6cf244c2767fb399b4eb2fc36e6d07f897064596f7ee9ed276c1190920000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001249a1fd2adea3dca0eeeed4cad09f5f0871d976711607502ef080b01f055fb770300ee024ee2ddcaad803764a640eb98e842fcd4e7013c6ae1128d2efd197ba12228356f54e586f4395f48862506e13d21d5eacbc4fe09135127fb3ca9ba674e751e108f2cb996aa46891f3be2db6508579eb0b5c40d8f4d42a00308bf1ca990020000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c2b40acfd0f2f53d72ff9179390324c3ebe979fb45db381f6887a8c60a3ec11c9984862ea0f4d4a3ad38933482377705427287ba10f99cc2e8c060c448a75efeaa59a080da9c8d3fb7e8f4255f541ab67fd6ad08a39d3c3e813aa405dd25114f3c2b02971ff193fcb4e3c720df667ad4dc6c09f4f4f00bf6da018aa179a3cd63da0e2f04952338e751b4f43b4e1c2e06af76746209bee514af9316e2768500cd1b2626f1d1fa84edbe2b6b1272cd5c7c2ac6545ce5ca5d1acf0904be5de3e83063d0358ea6cc65c331eb8a90cdc2ae85074e98e7610d535c527a771e3a6821ef3aa77e57c9b4b205fb52e7d798ac9acf74d06278c168bd61e94428b9df3546554a0c7789fe487d0060f8bf6d18f461a5b2fd8ea053713d8828d649e9158335a21be52ba622a0982dd8ef7fbbbf2ca9c6d0985fc8dccfe107d4e1782d2d08d5f8e53a0fbfb2e50930198086deb215d5a9b626a6713bdddf8528dfdc39c1451b93afa43bc3501267073c0d84f77f977f9e6e0c8bfde4b43e17bee3c1ced655d40cbcb91a9736e6c078c7c3708a412479466a7de948897e192bf106d251e8c968236f3181c8c3afac418ef24d4f5ba6812df4e49c3fc24034219139fbecc143b140000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012a833f54bf30b81aae607dbd6e035c7e1518748bb439537ac15130eda60bf4680303689519a0491539a6dbac924b1b99f4a9997ef385abfcb72335862e23b6ed523014841c0357ccc407e884e44bf4e6c0b79f2d7ab721546438e3cbb4da1f10d110943a9fbacf20c8af2b2899e522e4a7a7f38fd84b2433e56e20376b5d4a94c20000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a4e69e810c2f491a85631bff74ab04dcb80b23579af3edf8dacaa793f506f49ae27735b40ba69b603763cd259c3706184a6c032d6abe157ae33bb7e8c25b93eb1f8b14d9cf27b34a2a0ce82f3e2bcde266feb3fb1eee1f215ddb074b58b45b02329213c9a5063cb9a78c1c2f5ee6a50e31d7473cdc5e294497774c192b29eb59805d0e9b487c9f098c36419c94b30b792bef51fad2b41965c6ee12557b16c9e8c81a325f918dc62697dac3435de13d237207636952a7371fb71d89bc7f35d37c17dbabffa7bdfe504af15cdc68bcd2b9275bb78c4ab6dc625a5bbdba6987c52fb0e9a5bc5aaccae58ae5c1beca559b78f521a60cfb3ea39aaa1b243ef3b23ce78757b6ff412ecc2c8a64f480b28ce5d2306869a8f71a2c76bc93b0a4f635d007af77921486baa248bb58448a8c54a79aed132cbbdb25587dcc8805f2be1f8a489d6f41393e430c52535cdcb02a587f1382eb242b3451de45f47eacd54c835b7a07ef06f03b99547af27ffef4355d9c81c2d0e48ff9c0711d9d797f4c38b01fb85175f045de6c8ea9b59aca177a6a004aa8efc17abe8b9fdfc32205ec3b5d880174dc8b8e100e98692bdecd12f14cd7bf05bb0f779b904d75a8c468ebed89c040000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012dd91dcc9affbc6c905a4904ae668a77184865d32420a2cf2784c8dc711fd0be03040de637a00e144f0baace4a3cc4e438403432d994f2e96856eea4be67ee97162b8940c3911b4af183b4cd746771dac7e89c15dbaa26e8955bb7064d46d2d67b1376b93734f9c37b300aa98b219453d18f31d8449e6f757784bf274535e553d4000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac9e26771691283b6595f47b4601d675f1273e759e773410082d3497c787051f7c7ce0d0b6e35ea000b08d0a9ae77fc02ae6f6d5c40f6191c31f7daafe035838702bb8c9e6b8e4e5e0e793c7660efeb2de5c2167c097c2dc21b21da8f3c8c999f688f22673650af0f1396eb49eeabe017093f3ef59cec68d7810046911d5657562fe844479dc2c5de4c2a7a733ac806a9c82e974dcab799910524277e92633b4022192663b6cdf09f99f5c506b71aca34704e21c028e7ef8cc2023ab953a3f8bb611112050950009d91cba82acc67f5e8c198b0dd344237ecd82ddd232b403d9809db6322104e9458baa733697613d735bda8ee098230129d86658e962fd11825faeff905faff7386f35a072623c2683bf02c4f678923af4058274a1927941bcc1b1f218dc2e21dd204bbc6d7c6fc1c6a99b452030dd6edfbf419761a0d9fc51451f988fd0af7905327eb99970ea76e87572d179ec4d1cfa244e7e5e58e72bfd799059f4dabd098d7af7284ac8114ca962dded0e9d7a18c8e49cf3f699e288d3a4e0cbc10c1905810ca696d4a89814a163761b1c309bb28ca1e5aa3e10a198aebdae1220cffd25ad1f2ed80c577030548c0c04d87a3827a8be426872be5325690000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001168b30d6288b569cb7c3ac2b7a3cbbafc6cc50ea86dd0c3ae16b822972bc72e403041f67de75be35369c43207e61ba6b9eac99e2ac0d8b1a8d060feaf1e52a3d9c282457ec711c72fba65048b1a1ab5e6631a8902c76fe0215c93db2cbd76d35b216266461edd585d8a2680ef766e6a46a3af6a720d8973e96d2c69d3b2e25f03000000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003cedfa8d20373a5783fbeb5b81693e938540bcd2cb44cf5cd5b7045d3d11fe558db5d2fde098043d25592d6414048560a3f02669eededfda3bb5b0b7838f5213937123797a459c8f758e014debb13ad75265897a5907aa44d571e3903b895dbd21956a4c8f1a7ccd1ccc5b9c57348021bc5812b018001bf1ed4d2b702333d2eda203a28914ce2c12eed9b456fd1f10738b1c234de67c939aae7ee4089accd1f8a701a7ef98f7b4594b507e072e9702c6e8d9b5760ae015f92db2c27a5eeab17b993ac6ed03c0835f097510834b852ded4e8c1caf6bb00e45c863758ab48fb1d3417668659320d604d92e167e74fd87748872bab4e58587d352bf22130ebdfad3a4b1f408bec758b2845153cc0d6ffed9263f3a7641c76eb437a3a46de223762ab0a7c733763fb97ce7650bfa91e149dffee3e82ce102d3f7e466f81b0f1b2375ba15a82d82cc2293deba616854d68c0ba7caff556d801b70287b436d0e115e103a480fe5b4fcddb82921230e94207d317379e0db3aaff5c0249d17289d4af47bbcf9c550565b320eba651748798c73dbbe5e2b1e9f915ccf2ea4208f898c16957e35084f515de18408bb1f532c711c8f4e9d828d756a20afa4357a2fbd535680000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001161205e22a14f73f1ed8bb7487228b82400577921a33a8998380932d694f90ac030833a535edb71ab8d35fa3e4e24f8aca7da2e3a2317c892c32864a947fda973220ffd3fe74cff400e6793efc75c597d13a8a7d3f66e55ee519d087d5b0cb42f91f274dc7b7c344309f12acf62318fc5207d918e4b2e3cd62a2d697cc23b2d34a0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003048031384716ae1c078b93e734b0a7167ac54d12417ca693a2d161eae58d52d7dc2dfb51e6213b9dd11cec4bca112cd43dd4d907ec378fd08bfd09ff1b6ae02bdf65bb617009b9edd3cd6aafbfc3c37696023eca2371c1f784f914319acdd9fc11f26f4743effb07fbb18c6f623393077140d3077ec9ca300725b53c3b812eb0ce7759df88a253962836e3159e2cf7fc409080c1eb7ff628c05d26b227a14cb1d89c5892197655aa15d9c8c4f738e5c7b40b5b75e24a9077b31928e9f12326cbb65aa2b34a61605aec57e1589c4e1adba36acd7b64a7d164567e198b369ac26b9581b647ec7b8e583ffa2e31459143314cb7e922d73f13b16a22bfe3c29c54cbf9afed05afc0f82e969284cd7cd7c862a2a6237194ec99ec2d1d7d8e2721eba796e33056d0c060ece89cebc20639ad55b3d019f046396fc225fb38375c1a9d9528232fb19fc474de5374ec713f91c0a9b012a21dc9e0a51b8648999fc1721459f136fa687c72febc5f1e92e83acf7dd82bf8beee33798c354528e58d9f9898b28ebfb435bfb0b2bfaae17ca5b51f55f02e888a740540a766aa0caf4965bfb76ad66278a4ccea58f1987a4b24da0a64fb4a3f5112c3a219e275fe43cfaebd8720000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011bdb155682b63dd67d5e1047d1f4356c900a3b9e255e3e36a459136ce6e509a00309cbaf9ab103001e093d0425e5af537fc3f79fbb5cf3f985589c501e5d6737f7113c12ac78c248a7a3ddbcb05d202a9afab2a1eab80448e0a72aec53a0c9e43507da19e25297f35172c99ca1ecc2f0754d70b4d64c6e2d06cda2790fcda1dae30000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e337a92341a3015b4836f2db262fdacc5308952624c2f1ecaca72ab041bb86ba1a328ae590dfd8fc0ca83f53b840f6200fa08398a6b7734f2a2d1b1a7e262bd170c4bbe82300637fa4d28c64ccb0acc950e8645c2d51d934e58e44577726d89243f8df1f5f85160a256b54ca97521bc06e5be8c16b3dc9ddb5b96d5a7862f62ed2eb73560ca67198611873cdd5436d31f8ceae6c8cbd76ad6f77e90a7c9f81457fad188049823cf6355d6593e811525694f3a1b7cc51a4ec752d64f7b8aac8a5372b34362b2c358e1e105d4618907dcdf2fcc3d48847dd4a16f8eb64c9eeefe2c172e25617dd19ab3567b262336c6f28b4878324f1060d5dbd41e78b71f5d1477187ac2b32d4b07623e99fe006cf38c150131d15583dfa2b491398501544216c6d3475c731d71a78dcbce4ab37e856e8f9a945cce570f4d8123eb3864bdd1436ededebe3cc168a12af201707d9b6d8b87c840e13be0e1e30f045e1a5d95847c1fdaae452ba4b11e66e37f0d4e9f82b1ef322d12cfb864a5c83752291d6daa71a22949c22ffe5fcdf519fc50199d254a3c81a6de3c39557b457cc64325a9605730a62d12b87249d40ae59b47c8612308098376b450279947ef1f93feec594c1a0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300110b75e3afc6c8d879d9071b89e0ed8dc58be91828b316557fc5cdc209a573d91030c5c426ae149705829d8e24971a351c772e9e60a36072f64df2124211bc4fee7148a1c6e856e86ffc8bf19dca0aa8436594dd548afb331ccc32d5014112a377a18e278d20d28be947c2feb602ee50213ba76e7c845e9cea9bdf9a0728d55a5630000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a4afc3b5bc31d4d7e043b24ed2e2475bc9596100e1213ce54ed328f62c13e058a81d7053d217808eae18da636356cc11bbfd1747c699936e0ef75f74a041560d9d07bbcc4ac4aff6c1aa72ee71d92c041d82bf764af862ccb89e2fd70b5c690e18b2db75830a35d6b2994d3916d74f991049c2d7f1afa35a42693cefeb0a2014038566a709c91398f514c3902d70d03ffbb7efc4139f44d52e480325b70039f4c7a17074bcb5ebe6bab0d29bd9e2685bc297dc74b9e9f2dcb93d625b20a55aaa759260f373408f97bc11e0f6f2f8722b3fc383f5624abe8c7e858baaf0b262b8721e8e65be466437127a5d0718b6ca83b97c0ddc224bd4bd64c2b73bcc8ef0d4225301115a4afe32d9a1e9cc45b77e6c2495fc106b181e7d971d9eb2c0dbe3a94d2ba06c730910bcb0361fc9ff85acb959469f0e6c788b8141e16ca1fb4eac3c2399c6c41a2ba9afbd06ebd8732904505779b01f402546bf7c157a1807d6c085c07cf345a7a39541b2c61bc00571f6877e55489a392e952dcd2d4660b551d8635670f6086f75d42ab1a9f37495c6556dfa7e8f75dc9ea97fc7cf2a0078276978849bf160a4e53cb014ff67e10e5430ec1dce845b7adce788b30134347f5369e0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012215f31108554e8384f2d4dcc271ffaaea604a24ad3348d34fcccd05483b5c63030d6d78d961f5c8fbae326b0b610663099858022042ae407a9d8e80b320b77f0f279d1a36bb2e8121b3c253626739b88b1973ec3250f6791a1a2c3205884f05812520724897e91056337840665f7f2cad3147a5001d80539c7dc1e2e7eeacd50e000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a56298d2642afd89993c062398e30533a4d53ab73a549b771e69698826cc8c921d499b242e4ef949ad88470aeea57b701f59c05a80e2620e394588d3c54ff5e1e88350991fc96512144d9f0681dc56479a3af2335871998501681656b90469ce8fca8414708270fdd991d48da2c7b68069228eb8d52e7857e2115ece8733e9e7a981ce29f97b94e93355c021f902baed30d29fa24b555fa99817f8ea18c148bc42cf047a5fddb0f86caf4d99a496be4f23298a41e8fbc317c9298a287c57e2540f9c0d425701af0ebef127ed2fdbf11e582c8183756263ecb5f9203b820db1f85782af854d7ea740d1fa4b77c89acff69191fc2e187a192829c01c528c24b8ba62216b1ed8569e30940f2220daf0f8aae00cb4993c48b0472ccad61c7f10e1becc28b624daa5431f8a32bc39e063b8bca035556b2edce2b57f8b638acb2c2df5c4fab5b31b386c50999764c47aec0706818e619b5f8e42a8f8dc94fe8c33c881ebee0efa6abbeac73621a8617dce170b537f739ad383ae2b7e8354d2a9287dd7c9d8df458dae17e4ada249fd56c6042ca933dc9c0cd33311a5b6ec886dca5b037faeebed5127e050d71d0300eeda138d6d8713ebcf29746e1dc1e5da4cefa0390000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012da40a26c7cc8d7de026a0cf5023fda46892e2a13cd2e0c974622187f88875c6030f28c5c79ea1291d027c026fef798c9b8424cb34377a0c37e662e01df16e28073024e648dde59c9cd5f9dd4adcc698597c92291823099c35f14070004fb89af0105c2f79abea0a8a596b2ded56c3a300c538e104bdefbfa5054133b8712fec9600000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018e80933b1ce1775a725d1b683ce424d9fef1a5898bee4871db95b13709f375d31522a4d6e730a2221672ba751a521f4792a9a9bde746cbe4f1c084c3d4f2a4c35030f2123acc999d19a7936af5641161b8161b8343330ad339631d25d25ab87cd2d4631b68edbffe095ece066cceaef3d57a9a1815f6fc9cd1cdbeee952dc52bd77629bd6ad3a540f99ca9a0ba8335bc1b782cb77ffd3a428bf78b494ae987908be0ced5d83e155dd18f853463ccfcd4c453ecd72d9723818c885ba308fbcc86ab9dbb529e15b4f01d05318a67c57f53369ff8a4646b544ad0b5525b388539a789d04d963eaa1ee997a37bd0f66ea4fe1e75519565cae04f35661c4dfd676e4385fb14f54bc97e2ae6aed21a5a5f755c0131d206de5e3a7b6b689703d98a5d6e2407a62754e5dac0170881246eaf4544574ddb3735c6d4d49ee95ebe8ba553a3fd8a8fa06469fa5b1e4f758de78a352c3df36f22d9f2a6a54be201adff3d0349e11ae0452a21a26dedad7d06bb81b447fcf6bb709b1c15893f47c94c587cbcee00ef4a62027f1ab530e82e4271cad5aa32558c5e980e7171434183a39e7c65a265b0a4585080d3df717f6577e74e5a79eb50a5b22362b2e6c4eca50037dab580000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010c4bfe10a39915b33e0ce39ef8ebf090b9f49eea04052f7946520a73465d54df030f3ab21716a3399a24aab2dc9be2423838bca773c5fc477b1944309ad7212deb29e4b6b30455ef74c85ba4a7d7ec563cb9c9cdbe1d297dd9b00d68dbfc194006171d6599395838f435ec8ad31af6c874091c24e2f99334a243c5ae4bf466841400000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029ff0e73a231da02e3430046aa2b5af164414a4bc28b73685fc8421b5a937c0d26addefc3b84096eec1c4efb8364c5b0016bb674e5b7362e6d5cb49fb553f10e5faec5f85a7b490192d86a7ad4278bbf883fe56ca9bac2c5fe423033533adc7ee2b0398ee0dff4235ac5ac342acaf07466b159b322dfe77c4331ba4794efa4bbf68d000855ecef932ab3ef420b1370ac95bf0e0aa574863f48430525859324b89e33dd7cee1619c8cceb3423485b6a6579b6aa463055029f6dabe6cdd9a742278e410b862ec9f020cc3c3a52b92e50a238bb4c1daf2697d995ec8fc74c619ec6783837deaedcd9859aff41eb07f0b77144c0701ca51f0a640027696665400158a1148beac3cd856803c165f491d6c041552385557f4269560298f1606710342e931437991e28a6338fc70cc7a31079c142892321f0e6edb3e1dcaf86d1916f253f27f03c5f8f90f4499eeacaea28b408bdb5d9c447ce79c1d1cd9a53f6dd0aa39dc48fdd52760ee5d0117a8501805f89b75198956c7e06bdaa44487ff21e337afe45ec5674b1b7cba482a21254e443a45691a9cfae50ecd56c670c5176b13c0636ce1ab3d22eb3c8d8713bc77e9e220f2b64864d2c8b77be01fc9be4b5db8c2f0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012fbc65a9e42e13cdda984d2f865b38b32de8c778ef402dbebf906dcfadd1acab0310a98179a9a3866c666dc60c9a297e9062cce5ea7a91ac4724c56626d350c1391c9a6485fcfb8fe9c1614a5dda9b1d9f95aaf550f8f49090808929dd02ec3f2514c7d0041c32c2356fb87aac36ab770bd0e6e1c5b2aa2c0cd8b9caf546a8831100000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084edb508d64b78828176af8220b134219fd45b472657f0c7ebe63dbbf1fa16ecb36a74852b1aec343af95c8b688b3a2e4873a7d5637ca7be72abfa805be6cac4948337e004471a37b745586500f029c7832268bcac1704b80b7a1c4245d76022c78fcc2475b173b8b57b2f7c9c5ebb829697cadda8ad1bdd8f6de4e82f36f36a861a8382ab31c272e0f1583230a432a974a169b0a00e1a1ccf113b45b70ad6c717bcfb8594f220daa67552fd84a2f4f45c82cd329f5656fe76c9acec66a7adcd02f090039726969d332dcf3bc8c09b852f94c60f35ba8ebb5f8e9ed7b096e116d1707bfb661aac4899a00f13439575160449a318717e5f27cac5100c1f2baefe9f3dcd0d46ac278012e64042a81917b7b2f5ee465540bb2c13bdf1c5b29fb99ba07c715caf1c11f8fee65832a0411c8868a68d6647c748d96c0510a90e0111a358dc5341622c53a0905c36372bda45e53ebcd3088351282481fa6d0126a8664c30dd5d85a9435a4b9eed9a29326d3aaf0aff8f990a02517335c3f0e410d44f0c4522109e12b9837ecc8234b8629d497bad98650780310216b55b02328497ccc5f653b6a36aa60e7b74cabff18564e49c580bb7c99c90822538a21bde827999c60000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012e95c74d7d6f00ebfb0f9e13d1b96591da3e2c138a7a16e497c9296f19e728790313cf68d6fd1c5cfe103c0c6e96becd71b15c1c4fe270702b52d5295e35ce46ea187bdc4144498680315e49a0721a3c247e7d94479d28cde479e18f8362adb6270896d1c43027b444ace0a45c696cc7dd27dc45a3823b77324fb802929b8b15570000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000145fdf4478e283affc2a9627149e69f340c852270d4bece949c8d334743c2de47527eeb6e5b75ce7aa28662c34f7d5523472b45e5528de2ded86570ea14c928438f5e4f94655f6060c4eb3ee8b7f2f83b9ed4fcbba7e14adaac2d7bc5b9a81c22c7c250a5f94680952e662791126be21475e15c62053ab3b3db84fb1851abd2bb8a4d391f236e224bc5ed3bb6891c8eafc3e8bdb0342f72ea561b2ce2522b503eed53e11fa872e461eecdb7a6cdaef12779c49077d2a126ad06be7e4348fb11769f93e87c5dc0ed7d93c5269295934684926e31483c129e7344008e225cbe589bae228ae5065193dc302c8e68dac0ab9ae375e6659cbf82a66849d20e4aac08d7c888b8d0f51a4a19dbe99e8b29db597b2d4effbf7572442af212387ad106bbc616779aff870037c51dd00f74dcf341a41639619dbbd3a00c19b3b0fb7ab7289be511d7a95d7772ea7ab34473fc3326b530ca7bae83597c22c0707c3855e5d844b9ed9af02cd4f72c458bb31d6e3bcd51d5fa4685133fa920bc51ffef4ed6ca43c1b90ac07cd2650448cd4c6e53a2f216513c97ae95b5e817816cc577445db6943e9c725951d0c67a5ad60af04b6ccd64b15478bed9fd2b8798492178654b440000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300111d506456aaa96542538c05b423523c977c92a683243fc583edf5953150a41ce03165afcff7c2d6032a16d7a4901ab36b59ce39b86c209989e0f4374d39eb1b7aa120fbc952622725183943af0b2f91f38d99c9cded445d0e6e4c49b1407695da41796623ccc9ec86665416a10df46203bebac81b336b0ec7eb1ce6697c8fb9c76000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000222f55f93b55df1c1215f8f7130bbd61e738565b79627347e0305cc71d364c330ae08d877aa779d2a2f7ca638d947bf4141316bf8973b0e254249f2ebe2d394cdc41a099839f94f9849e2d9d1a87a696fc083a26ad2b66f0597c7594d59ca21cb55e8c3e8a5c2e5f1b66d879f92cadde26b58912298d4e71d94c3dc84e2f262bff0933859036326e791f7c06670734651647c34a8be3188a1fd036ad3b14f6522cfc17e659488bfdf67dfd6bc5ab118ba4162f3a2ab73f7199c18379af9e891e62f2fc3a4178acd0ecd632c4a3154551005a09af3db9a703a58c22f7fe118fb8de30ccae040f952a1b20e5f20da4324d43fcd232cbc2fd3a9956909347721d8846dba05b14013b522ee38a8a5951284f3b7ac978271e8b46ba2fbde8561fd7f681e7b0260877f361ab4d8f0f6cd5b32c8438bfe4a5ae1bc78d2b41667e11d3dd3011826104dae0760a864e7ffe3713ddaef3febae8d70190ba691f68151fba61880c846a323faf3e7eb2895db2ee8e9065d35dd4e032c5cdd7ece847044b95758d5b7f805faa937042123312d4af9f32f103171119ee3d9477be1dd94bc9b5b21cd12068f9c54296394e4f762512148ea339abd0ef8edc1956f7f4203a57112d0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300102677d019594229b07340b761f3de7854649945582e489987748c773a47a20d60316adebb0e04fb454a247947edf2af414ad90e22e04d76d274a084bae6ac9359605d1b74dd7ec0e3829ea0d1ba8df672780d602466eacc15dcd4e62975f34895d26763a13149bd6c138a3d50b84709475d470219f46cff5d9e5b0c317441e809c000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a32e49fe3480eb499ecc12f177c8e80ff12ce757273045dce0ea7d9c5ba5da8afbe050d71503de7a8037473663558759865391d4f1a4484934c20fb505da1e729c9f01b76a8388d360e877ab79fca0e3ab789aa79ad607e62551d695824fbd55daf3f83478b59b7cdb6ba9f76ffa82be12f19a784dd4b919eaaf9da8a1afbf6cbc835fb2d8e9232a8c0a2d44cf80cac3d8db39643e231f514e2f7050b906b59815798e6d5d5a409045f3404c89988769ae5ff044ebd8f46ee8f2f797378636d79311911635ad839ccc081ed1b8608bd9b46cfd984d2746d725c00a547b7c811a04702691470cdabe75c85f61beb1b079eb414c09185481c7bafc57407eb004ba4f668184f7f35920f4e4a6134680bb4a40abe27597229376037cd17603841494e5bc17d3a880d16d55a17caff20560707290a995d69e11bd192cf7002a8fefbe2a204f935165f469fd3b8c12515fbea8be74050310eefd9282fe0ee3ef784d780335db011d8004ec66f81a3cdfc51a14e05873f2ae76033f790013dfd308d762483ee1cd375c2a07181d2fa5b57ba6995515eed9650548fda899939af146c1fada73b70a477e011dffe688448825141bf08c1c5267bd04669a79a41119c399b00000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001133e4be1d15383cbfae66d2ae027ee145bfbc52acca742487e1ea99e262ccb8903175d0362e57627c8f0c7bd8658797e1081747ef3b2c286a6403c2c9a7e05f9ea1b27ee7d3c88de2faa5def9d11b0786ed85d51cff2e2bc5d120955aada0050651a1b123a2774ccf1696f4cecfa4ebbbb4fc75090fcbb2165bd0bed47003a0e2d000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000924eb76dfe694c6e15331d312d74fd2764cf9b55d1e3c87a774f95f012128af99d69295ee36283b84bdb246fe1d588ec7d03e0bdc74ecc80d774d42734fa1dc09e782626c38fc273f2b1faebf000c6d1310f74c72b0c2c82843f0ef8745b9274171f8eefeeb1ed128efa0115288b607c0dfe3fdd92447de64b6654701b38dfa1dc918dcf116584abbac985146c4473a7f025cb7c8481923d3011f2f8d5bbd54fdecd697dbfb74ce345d24d07994267d3304490ebbfbc1ef29d74048d821512a806fee9e2951b9b46172fe0ed9db5195906ab5ee31388f040018668f13b61ae25e1ca9f433c7e8773b746a6699ea636391d13cc4d2e8aebde165f1e31b02f2c882c34eae1524f2b9d828bc161317d237a8c66468a76195ee84f6ce6438a08290cade2f280dcadfa64292c2e5985865fd0b370d7714b450e9f2cee961fe0e534d3e59818b4273e3faeceb182d541293faded1486dd783e9d64ef9200852793a3bced705bf8c6f7251d944df39f56f149f14a9eb170bbddd5bfc3b85ccbb45a754bc99073eee754e8628bd0ce9ffbacb301bb9b69e6db3574114e46d8f145bfc202d0dd58e1690bcd9a6040faa370ff4811c3364a9d7555d7241c113a171b67d3390000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010f4d0865d91833d02bc634ec5124a3c9fac54b3af54ecd197931df0f8ed601ca031add1f8db2997142dde316263421657492de4f27d4a4f1625326c08aee424f182b6ad9ec1e89b0c886e4c530af48d80cae8da68ab9b068b503f772f8d37d9c6b0e6bd48b202e35484d7e4cff3f8569b4cf276eb35e66a00a710fbb949c2bde9d0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000520702b21c354ef0be3493de9fa034feaffe20b928ad1006793b26e98c6a959f6e0be3bea7734a89d83c8b76e839eb0358e6ea518473c67935bb302bcfa2b45fea875653a35d2c4543c3898bb4b5fff76b19caf8e713d4fd0bfcc755155c5e4dce7ef574e3c46b0412e5eab0dd0b3e5c59088b95f161819e1e9f2cf2e83a66e6caec43be9adef79514673dab92b5f434ca545a3482c6c2314466fa25ab5f3b86d5814fe7982c3e1a9bade0e3e8973a56806d9663dfb46e7822822f2e98390ec93fa6e97b17d3870811e16bd821a6ce2f99b9b2e5b0a4d940c7edf7aa93a966eb9a78435cbc3dc5b793c6d10222ac81e4f3779e1bfa33c5dbed4f595c5c591ed17df85149e923ba4220d496d9a3019754a43b08f8df942f576d823f210068df3bec2212c83994f95fb638a734e8b5ad7e19fd74ed38c66ff05bd47c30418d8fc168efa7b3e169aead6b3b02f0e7546431f874ef46fc0c7eea3d027d4abad863f86f7d720993b7a8100af796b390ff2bf2390e61877fb7e36482e819a21f01a1ee641ca685f34604e5cd5fa4ec6f9d2291767a0f45ea32312b338daa9558f4d29ec5c2e4b6ab06b235ad5e4eb452ee0ad8e44ea59f4d51efc6b9eae0f7e042fcb0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010309bfa1575cf5f8ebb96d9e722db05d2a4d49f2c0c3c75eab4e8c7b01e01578031b2db8ffae4e2535ef59dcbddcbe0d4b95f85034b04ce0512258bc9eabae9081088a34c059c9a9ef25c446a7d224ea2a87db588e4dd03dd6af5318cbe9758a031eabc3a3fb87d8f9400adb03e94d355d9b650ae1b941e3ce96fdd8c927315703000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000118321529182071ad77457ebd478c3acbdc0826ff16dca372500021870a4eed816fceb340c07511a308996697bda6555d34190becd3a1217b0e227882fe16131f9bb7d83198a9bbd4aa396335843ae29e4d7ab8a1f28b696e7bd8b247f797745e29553394cca9ad68ab1ba777349f677059ee34b6bf97fee7d0624d8d95ac8c6a20703a482f8852034c2045edabac204abf59bb1dfaba6ddaa09fe94c89b37ab7bd8b15f35146b71652da6f2e30d77e85dacd885523134a66fd62b30eea34eb1fdd356488b7d5decf3648cc28a32ebad4a0038b2a910f7253184a2e18248f77f419124f09cf450689853a8ec89e134916230286a33bd001494fd222945d4b687aa68980df5e7f542f6b4f358cc6fe11e11bcc828fe211c2685bf51367dd49851604eaf99a9ae7ed6734c003f4e6e397b6e250ed6f5ae33c906da05d7e776f72afd138aea6eeacc85f4c2cedfae0ecc12750cf36fe892c496c2b87d8e18dfd01a8562c39ddface5e92f5e455d3aad36377d0a0cd89e64b235db4cca13dc2d2b3fe25cddbad98ad06c994d3823fee0950635524506551bd6c29336082d6dad52fe947d2445d2aba038f6e6078ca00541f4ac23838e384fdf3b1b06b70ebd04605d0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300101cf2b6812bf6ac74f96a55c32c26aef9386383dfc39989ffcb0d635be551337031bf830bc47a3c4e816f6e6f5753511f33616941028941958cf1c376a3b999c78288c644f8d212879d0a238788486c319e4a4d22cb63ee1cc5d9d73377264363b201c3215763040c8cc5f6e63050fd56370e2b5b77313a298eaae1ca878fda02d0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1943d8424528cdce3f9f219a9c7e8e7c74db5c3e40441fec23e89b974f90b89a933b539f9b843268040048f596161757269e2f79154b09ac2461b2dd482885d441346dbdf01384558dd5652000334b3c8ef144da4cb125e9eccaf57f030299d2eb9c44c932b2d694f68bb8119149efaa7e25c07259961f68c745c900f68faebc49ae20ba4ec8c9245cee6f2014f7dfb10fdc55e45cd1dbc5f0081f3f5b9ae5975b13a6cfdedb296a1f1eac0491f377a89fb65248c801bc31a1e72578810c686483e1c1852b88965f311860735d42104ad088b05e244a90f9e8068cdb5a52e2458f11a0f1b34326d0f11c1fd9ce3c836fa6a8bea1a7d31ba93268d5e497f251716b94f1a6a8507630d7aa0993a32d11d6e865be1f0dc31714dfd1ebb12d9b7ac8acda7fbf1ed1b59db05f77f2cf2318f54303a0803a3d4b0151c3fa9813b5f7a63eb22a4f66211df310f91561d57e4702d26bb342c31fd8b6dfcdfbdb491774eadff52b55c3d6a4f4ef2ebf13653fa8067eb8bc238ecfff5e5afc1112324e176bb6813a64f6d42d8fb1962c7aa4164ef9f840eed5cd4984f5a70f1bff6ae10f7775221fbd1d001404835c28524d349de7d97ea168bf36076515782767a348330000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010c43ae20d7411d6773d605b4a6df678e2f49ebf7624ddf28e661d71989e899f8031cf68664da1e6b654fc00b72174e752e754144d8f83f9d77461cf4bd6da4eed0172893090d2f08b6ba83901599b2c87f7b7a9b60efc1b98ecff54539e89e4d9e261b908706756a4a7a46d04b7ab22f5fde3d78d129f40eeb61cfff52566f9eae0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f8b28499bad89efd4e3b134288e1dbeb48ebc9581064739b3682cb3433e1ad530c9327db86997e12eadad0c2751078b8f3742e015ea17508ac282a35f387e8fe156d021d3dc611f7762f3f011deaf3dd689c8b17a6c5dd93b0c4d72b72ed353f229e1f7dab999448e01f647c4640358a76fe093c71cd1c351d2ab5e53cd46edabbb3ce64f824224f2547087a3db832f15488b1bfe20086b207b675d162ad352615474270b54c9dbc7455bbf13e56dd42f037c9e8110d01ddcf4ab9008b18b5354c09d8117bd8bc0597779e1786c4a2ebf7b4cea791f2d85833122eef8c2675e7e2d11f39ed89716e460045ca9545b67d0f5f62ec45daf38ef47cf368d587c2b3c28af887a527e2242384cfb287b603cfbbf9c419e7651d78a33d19c8d4fc43d6ecaf89faa8ff26eeba522f75197558987cbdd89b21dcd4fade9560226fbef65f473b78b85764a892f3675f59b7a2fd10630c9622b93f35d70d7b8c7a1d5a48a7abc6bc1b4e968db8b837b17201e488ad7d1fdd7e12dc6fb4a90ae22e2acbe65446e9dc2e15b73bfbb37f7044bbfc351111f14f06baf30a4fd156183c41d9f6171cf5fc1cfa69bdf450e3634181f8d6d3a6ba9604a62413d4ccae3a37c0a19f90000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011fc5d904996ac2911b12a76912f87d421c9d63b9f89acfd45b3767ef76c0d414031e60613ca55dd432c2e62cc1da92243aba52bd44bfc1d76a50a10eadb076fac71ac7d0956d0974a6a8b78a9c35997d62191b9115826e2f7c9b9663ba1b307f5c0fc2b8c6a8d654e98db0717e054a52e2e0964efd708bd811e2ff9ae908c67ebd00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022ebb730f826a8a7208bd0a8d1cfc940ae57b4d44952d356e77b535b63c68c22f6136cdcc8a6cbc88cdaa66de576deade5f4ca6ba271174ae23bd6348959a61763855f3bc8b46d62d688130a73ae113cb5dd7775b34c20bef21999e416e431fc3e2bc4842d7d858df70f531e3fff8ca335ecbc5394c5a57c9a4cd99b2fdf1ae0eb68b59bb35d076099e5b3116f9214166eab2f4ec00c936ff84b84e797f30ed2cd0e350eb29298eede0fb51768f4dc061e9f21994219960ba36898b70e48ed8360ee7f52b0e348887e1e7c257bf9a01a0d95944a00888404ad42320319a5867c849c809e52ae81d755fa1db943b8d84d90b06644c00dbd5f8c68cda46962621d2ecaa4ace96f2b55b63f571fd56444a588d1fd3c6fc4433c7694d46c620ba134bfc0d8e086a6d4dbf0d3cdbb1d40f05680259b6f01f17ac9180c02c42d9bdf7c988472ce198421343edf5aeb86d88c7b301753872631aab632c78a7ecfffab51f7d166a731f309bb861e62030dfaa7edf5fa934e2045c9fe48396e5faceef0360332dcbb44f0a5910ab3bb73c73d188c9b17126f041ad93f6dd05df2aecf2f3d5135241058881864808eb8580b8633667eaec263cf5c32630058c094ccd9401c0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300107012d99114754fed5c79de4683f002f27e652e43a6738ddec1436f318646a1e031eb3b2fda5a40bba6b70e7b71d3c381ba69e5de0d0fb157bbfb7c72dc32e957e1c7feb254c550e05bd53555ef7396bd0db8cc3403285e8e05934b8df0f3b1edc17cf3d10c2bff4dc04c978034973aa8ce6448296a6e8bfaf904c1ed61b08c8d5000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a91253e9ebe7ad217fcf2992a8a7ac88b1e67bf93ab9c50f99f361cbac03af3217e69097d4151357c319bfbdac8914497d963f458bb3d3756d87a9465f4eaffd7b9012a29d750ddee9c475f7d4a141cd5178e606dcedbfb5e79426f2b20b6248562081d34de81bfe84ece489bcac7c48c5bbf07f808e8379cf30c4ebced958197e62c4eed39e1bcf1d316234238df32dff7c312c7b1c1ed577891a7d77c386c48dc10402a6564af423bbd167e66731accae42e995d10bc9464514660b7e3f352480110ef40893c4aef6aa7b9d0255f663c3dc64832a18adc46af716090ca3ee4c6f3ae2001eda126efd30cf7c09e42fa7c4d9a6f1ed984000480315c449df1703140e4f867497fe0c8875df8bf8b642c6c08db169cf549b6abc01c7083794fa4bd6943ec2a0b93b1b2ad57807d44e005eaf672188a53e83b3f948bcae7615f53d1d2512231712766ae0aece802d104f8d47946265669f0ebd8c344f243d312e2e20ba063c1644617d5321c5a5a9da6e4c9d8388b91b45762a76d2d31cb34ef092daa7c89e758e701daeb873727c7a02ca11e52f56237dab34f5718963bacf6807f3da9a0e7777c794d104c2ed6f76368d926250d522bc10ee0116425da2dd7560000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011f4a7d6e4e34335ebc46017cc6aca0d5a699ba0b8307e76da7edd14335f9c28203209ce0a167ded87d6ee08f67c274d6ed0152f24253121662a42af524a852634e2c1b7f4be01755a1351bbbbf3ebb14c3735726e855949b66d640577d8410cf120ec25412ceeff89986d623ef31e32c4532c0bf628bcaeb968cbe558e36996ab4000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af5b030f26af40f672d509039bb69ea7166717e9112ac7fd5ec0749fc2fb2f4b09e580581014aff6464192072d9c84d6a2b5231141afbdaf83e2e22e482bcaac4556c417f9c805804e09251a5af127e6a732ed8310c242ed52a1e077353ffc86b906448ce8bab5cece518c3e91cadcfb2a3cd5c624441280b777a8be0228d18f9211bcad18ef4995e55140844ab107094aea39eb2c77b4fbebf83faf7046c445804f7445236e89ae7ca28cc44bfc928ce05b6b4d78ddd4e4ed7fe4ee980b37fab105a0ab2d0f4c5ee63507287958f8d27ba8d902e90a4e2af6e3578d68c2b0ee8cb6a5fd99c6d77794b5fcf194589924d94b24d52cdf40b08a5119ea371ccf9908176505f60ad6af976662863f350bb0473e96d65aea91952e5ca23c38bd7d8f53b18499aaf4d96facdcb67a26ff60a0c2eaba7121b5a55cc8fe5484e4e2206cf005a4258f18e5b18bd2831a7f52c95c03f9558a57ad2e4ff9edb984a8be918034da5c6d507d59b4beee5eb3891b7c3d21716db09a9b63ae9472e96906687160992b3c8facfca160f1431990ffb726a67cea56bc2e2edee99f9aae35468341b29bcdc48cd204e728ee4daadf02b8402e470fafd02f6ecce8a5fa6f66aa24ecdd0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011033bc13d48d01b8fb3dc6dc9e49865bb6cceef107b5c8b24afa8adb6f61a38c0321ac0ee36db633578b0e15c9f5fe9f2e0e17d9f725360030d330d6353d9385c014411f3323a6fb4eb66bcf5873849e2df5986391b60abadc8b1eda3bc0821c3a16790b659218bedcd23bb15eb1ca36af6132eb3c909f95d7fbea909caa5dbd8400000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097bc83e330b16c8f566c4e4373fe4bd571bfeef3d0d689174a70aa89c4690e7da707b6c96696874eb40f00b5eb4b720bb374954af9b5808019e22348eb58e0993abfefca8e1510552adcb8ae1de297d378e3279b05af2985f2077f7f43322d2e9efe4423aee5459cdd609ecc17069ffa7c7912b302ca158aacd18eb5d884311ce546b9e91fb2a7416913c490dd8ad34ca529fccd190a517009824802b7197944e623e8135604dede653db1452d27059b5e86f7d446d3792c2abfc0148586ade17a0cfe8fabe649cd9037754a680d0a77c42498cd96fcbc7788c5c41037d4313ef2cb50ce16e9e763e4b5673aa6923cf4c2b9e1d1fdcfeb19dce69e4b9a2217816cc94c5af8e87322ac886213720495788891a088915b201a0a87dcdd344d3f6f9ad5a05dbf18f9851f9cfdc0de3e750f2e435a27022aaeb11e7fae862c828e06002451860ca1e5a50823a36ab17bc94cc9917bdf124db3b5e8a0efc3140a3bebf0aa4c016be27a5814b11b35cfa01c0815e77184b71c277f3bbd20091b89679768d2931cde84bbdcca37ae377a5115ae553a8d802370685f2c94451bad9435a945d711d3d59fea502800a39d4410a07d340699941f63883a12de9c8f7aaa66270000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012f83ffc0e5c9a5a071b2ceaa3a897d0483614430bb3d6725db5e6a2aedcb97180324803bf4b1b2577f4d8f01e2e42db7b09cb80ac50174f1bd5250c6647eb4a7e42e68b64422760fc3374bfebb91ea09b557b6d06233989f2c224d15f7f2ac94550a9d89e71539b467a60b6edd17a400b8e60aba0b64102a3eed90dd6e1c2138560000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c23e09a5a82531826b217fc57cc580e41bd120278aa09d6dbb8f8b1d56cda464be809389477706ce9cf42d6fb651dc6da9222b63bd00e947eb89a152d6f26fde7159b673c88964c0bf1da99b29942f20caba1e2468b3ce8064aceafe48e2da296c6d8b2b5de6f5ab6a063ecafa574162db49bb42a170f01508486ee574438f4f619b4638d72be959101e3250dd4e452ae4d02c894c2eeea795a02e892f03c7f3d7dc5e1b803663c6cec52c71b3c5b568963b7f7ed7d1eb4d81d356b2c476fd9779da0a27ad4d750b14735b2d29314d87a6a036b1b2d933e7fe94953dc41d28736d136e61c095787f16ddcfb0c52fb18b125e90f1b574b6bd50c1e7e9420d156ae6ed82678c4a60f3d7ecacac3bffdca25136d6cf5cc53273b0d1c4ad49e5e769a492127d305897994ae0d02af3f7aa56a50991c9c3b44ddffa51a7e7b3beaca35c34446f22e69c278ff0af89841c527fd735766e5ab324ebb19de8cb810509539655630770db9f179df6e9ee80a6b7dee6452bc68ac823251f7b3db13d2a54d71e831063a25d7dc35dc7b2dba9022793579811c68ab52560425a7466e1cfc1e512b49dae1d36b4240355b0d964a02e720f02b1530f2aaa2d05d173e13e0ba110000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001045eb2a6cbf94b7647107af0949c63f77b87bf0489eac55ef3b34019539592e303248b76c43eff17b28a6674e8bfda817e93ab958a56fa220f86a20b9ec5710d0207339134b2b1754e86cfcc7a8339de6f82cee8eda42a42e8cbb1cc9ab36b0e8d155de324ce78b0e4ed477eed074ee6bfaf0ce1e64569f31856d2d24a0c955af900000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011f35c15e7d57e99742592f3f2d7774d5f4ed66094c5861fc1dfbde6e9e1992a0d0955dccc338f10c81662c000c3d8f6095a956ec4e1e2c51675764017971788f325b383083ed2f25de1a10d9e7d824f528854f4a85440f763e3d5150ae029db1d70001531d584606f31d92282e08c2f5ae780e44f63420ef97e2a3ff0f48b6249826777182c29aa247b334b451d46779c10d8335e24b81f3654302e5e3e010bfa4b39ef0d9de75e1c1fd3714cb707a4f86e1c295ee49efb8305e78c8142636f3ecf269dd47a90376f5c0278be110e7508d9d6f1253aa280c91a4cdd7b5b8289289226e3b0b89115e49772a4692cbdee6d86b0e5ed46273814fa299c394ccf108b8178db26e6bb53ca3973622b045edab66bdc0d689c242a736065774a25cc4779720813d6831fe3ccec31866c06063a0c4c8c7b7d4f125f0ed7d1b37b01b8a956b9f44d0b1b7980a4cdf2b91e57f4fae1bb0cafef6b1eb477cc1348a662b5e857b4c53578c582ebbe4afc32abdc3e90b5b68bcc1601ca8e585d98894e84a592dfc862bdddfe6ad2f03714890a9a183fd05fee40d4fe3bf89a4e3c29d95cf46f669dfa14e381b983de202cb6b04380ace6988fc3616ade5a623d4764e6a43a800000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010f00f9c42430889fa0e01f6130fcfff2cc9a6f4fa37a2683ef9e7296ea53e4e30329f2b27fccc7822cb5ae36c51d157076e6fafbb80083ced2c3d64c0ccd0f87fe2360b7e4311eab14da27c9bdcf3a26f8463a3259644ded56c004020220786b5725ef287ae6dbfb138c481bb7603154835e248d1ede029b0486706bd99c7a19ff00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016e033385dcfb3170279a353c259ed9a8f4ad825b535da3fe54c1fc8fceb442d4e506911b4d6c3a6dc8c41ee3a32eb480d58bcb35791d5f76ce77cc7b57d506fd9585f25432d6193661f28ee91d6562a0500d691a1eb0c802968f225b7153f3cd563cf173dc2dbc9fc0898dc4cae8efa7b198847564630b7dc232f9cf061c4f4512c819751302eadbeb97fa595f2cdc1d805fd19c4769910187db8ba5678f3be35c8cfa19ac9530d4296fbfcbe82231b9b3bfcd4d9c5ded37634d9d423de554b58f7e7370748b97415757dc2b9a6ab1a11db23228a3699a9326dabd151893337451a4054c1f97cde394ce5ddfc4c260f5102446812f90a9dae5b8c301a31a2a61c5d5373986c0944a9157dfe2eb5d5e3c8c87cfe94800828b05a318ca9486f613dbab904a2bffa4420d57413002444a9488b42dc95d9b7b035bedca341559b5c8938949a0ab56d8fe2239c0c5dda222c9466bff95fe2120f1d3d171b70778a51711b123cdadaa202c0c4c266242fafca4bfbacaf701031917f0f78a8971c39ef2c603a86e62bc55ae4b30713a78ea6a8a920a3b16289d4ae0ac2d7d26037e3ec229ab46abac013e2d17574743e8bbbbf7506d394e75857577ba8e874d2748d4d0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012c8633303b1db80f60f5e7d3d4ab4f08427acb978b65fdcbbbd20a0529203b24032a32f7cd98ed3612b1eb8d083fca75e9a16bbe11283681c3843643cf0418ed78074f2113318517b9afcd31735e370bd6c018e523b7c00fedce05ee326fe758020dbaaf141a61fe7c1939ea39bc8e991d7b5618a8339fe7d392d5a544c06623f40000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002492f289050c26eecc6e9c7afa38e0739eba82b02004584951f7ccb9947f932bca5630c4d3cec4f0c25eab10de106d6ae80cf34ca71e6c4750e81cdf9da7b25d4b68bfd44dbacd76a227f0a51c314b6dd5332f4f35ba95f6275c2137274e7c87ed1c023c62a57373230540e7fb36eeb9820e561322ce7d233e63335c28edb44f3fc9a083e49f576cb364588c9b303b9aba532e931c59f75676b48eebdebe7ae9e39d421a5d6b19a8d5e84417dfdc11f45e2f3c6c5c70997a327d38a7f6c75e586e9a08e8ebd5decac3e404653917ef465d2fa6115d0f6e69af6b498f37d7d64ba26038cee35aeab83cc5c410ba581885238e8a13ff503530361bffeb3b1f41401a4051c0eaab65d3521a4533f66d889b2a24795651981dec09a3df63c1c4b631a43fdc5754a6e2b9ae0de0b0df89475c9db6835e3a475140f7aac5f87a6af91c9f65124d968e7b1cf0a7458fbd07c53d34dbd96ea4a5b7722cb4d6c83f3e440117fe526212942277611b5ddd0c7ec8c8ea4c42d07100ea34ade08c1ac9c11c5833deb9270f5e760855ec493498ba44222f507ca30163b8cd9e68fdc992a7b42ca7f286cfada6cddac1f165210a93aedfa61560791471674d8d99afcb82fd2b240000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300120f46cf1fed376a644decc505591bd4ef0dea9ed17e2e142fae0a3761a87d12e032a5734ec1ae0ca6faa46bb157ca196db26b18c921ee65e0251dd653a861356e724f884b3f359547a8b7f6981a0eae953703ba35b4ca214a85903d30bb7e8a4bc0a8fe0db964f154c624e120e2d1d98546d16fa9910e607267c9f1695a816c81d0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e8165d1f570e8ce44cb2959e682468214c50c94df532cb9025c0e36492c785f5d0a512e681e5e188f38f947fb1178f0bcd17952fd8155b03aabf111a7746a9314a8969b8ce459e49aff0fff52cd14f2919967fe3791f2001c41ac5a93109d58cde1eb0fdade02eeec7115718f823ae22f3a2e4c97944398c466a7c43664a8068f98b0c0957d28ba7a81de3258d3eaedfe04e5a16d44471faada298e404e94d84d005e28154e22f05cb80b3210c58d6392df9d198bdc86085eebab74cf8ceba1720ccb672de61eb9924ebef021165e9f8cb49abd5d2546e6dabf69f34f29deab9dfecbf5cc8f1c015bd0db60fb842f7b498648866cd61800c822b906240700a411c731919694f701af7ddd0180d02838c6a60596e85de326e02356f80ef1be74c32c317d38b0fcb5af475d9def082a981b4fa430cd24630ff6c7788d5c9f6c72fd849e80c5cd9f41c1d66218ec2c24e270831c0c4d48e7437077537ed059da1c07edc4dfa6ee939018a11884c8146e1ac59c2207a11a8e2bc12be9be4a80e10a59bbf51c501ff8defe9052fc1666b98c065516073f2e97acd7ff5625fa2187a20d9f2522660ca581b2bc00fa61b6ac713c613735cf33e1dc826858598f58aa470000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001089611c5e415e5be755270d77186d90784fcb6f711a4a6fb66d3e1c2bdc7209f032abdb22d12d270feb9a16e82ac645ec0f6a1d35b9792cb27b25f49c55e8fc67c15a254b1094b1a54dd4d657d0f9c00995fd6d7ff4d1ed3fdf3285a843cb2ce0d23fb4e043303b3c57f3bd402862aa6dc0ef173ffd3c4c94066dfbb6d7351ce15000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000acd8829fc2cf847c54f323773ef28da36b40dbeddfa8230a359c8e784b4a02251b9f9af0732ac0ef7053e825d2882242e220a1ea1c9d9ef6a55675f9c3e3c692e62f715a6d3c7e4f28833773bfdd52a4c80d398569abc246c8f0bf26e14de63acd6fec8a7830a4fc5a776c833ba78e1699fa306bf08e3da1f076427bbeabf392683c6e42d78fc563b7a9293ed0493cda2620838424494123b6e56a8e1c991c9ef647a64c2d7ff7a93eae5666cc23fc98974abe479d4fb5d66935f84f41371641393d48e48b743c55b4f1c111dbe5f43c1d272ea679e46164fdfb8f8b7f6279ebd25b7868bd192eea5d4d96149725aef83d60b98ab30c8c2f0bbe09024878cdc3f236020d7c2922d10020ff2fdf90da1e798bbcd568f11e9e2cce01228760e2c34479781e838fa0b82e10081d54e6b0f42cb3704d45cdce71439087a10fcd59ba72447fd1ef28ae6f42dad295b5e96cafea7028ed325496d5e2dda26b6509fa7f096df79fc29246fe328bea281410a9305a8ce9bebabe62198647c8a3b4a18aa1255f1124d5bea755ac5166365508e5674ae820070607a7f83105de1c546c64590d61e964c80b8c2da8ff1f07d438341e8b34f53a39097ce7d0cf9ed15024a83f0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011277eb0e924ce95d5a72fedd15b59a7d40707d34f9ce9ae7ba304219d50a5733032bdbc3f1b17142bb76314cbc98bb903a68784213ccaae22980b78c09afef63ca1a571e1131eb5bf19ee4884d8daeae890e725ed838df8201933951a99e5e1c3b280730926e986db4ca4fb3eecd9a90e7dc6c05c0e96af961698b6ab8aba263ed00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085c10f166fb39411c658b9836af3422f53d3c03daa7dc313059deb899f703bc1fdda66990a2767c7edcc1e477d547322f57e3c8ac86aedc8589f3eebd51abe0dd3d47615626a5b0c01fb00a69a1b87740ee9de6ff7c6370148c96644fa90f3be943642e0fbc18d7467099e28240167289cd98a0a0fcec877d70b90b9f54eee06374d1c5d8d4115c794494ce8e56821efa80dcfd0236dedc6379542a9beeb4d4b4a2d32db44b5c6fbd520ad717e7df91e1f2b46f2817418cc199bd331cc6c20c85e4a2e5d65637d5ca2a8350203c54495f47bf902e8404e49af56273a2f551fab8968be3120aae41f88f4a901b296410ce07e9b32e7f5ddb10f8c69adb261f3ac4e60f6d3f3d403efd2a483ea4ccd5eb074ce05220c897bd1ac67a39666aee9a227a8905457ff12dfcde197f0cadd8bc50d1fe960da07bc4a2303837d3aa3de91cd3e503dad857657c46b8b29b8d623784fff2be6647a145ad07dc4ec6e4296607eb576d5e65e007fdb9264a0ffa3455ec384d85f28bb3f79e48e913abad8cb200c5d02b869d939f3a0a3a770d113036da5bc9cd97d5c337e172c83669c072361124aaa398aeee9d22707117130e88d23aba72aa6cfcdc45ee0499d24635115fe0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012ebc804a57877859c1bf704f00c0ef96c46dce4bf995d45ce456cdc0e88f1bd9032c1c8064b1f50dd2651b355ba56950b11143484312b60b3a7e10eda572bdefff2e24724ec4b94fc366ed681ccab546e7caec1192f44f174049f1ee32394a47490d0ddbf9f0d74fd942c045c867879cdd32451169aadacab3df17bb3f9d25e1e6000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a98a3dd43470504b615e11184d6c2d301f807bf62fcedcacfc1da471e4421855d2c189c510e8fb01ec46c6f89e67a7ce84a997697dc8047dfd63ff61374b55571a71b0a9ee157b2af743d027c8f560e8e833c4b0104905a9d6f3df77c06ee58dd29bd1d7021e3a344d5eb12693917068d25cf2d61e9996c46082e0cd3b0bf8a894d062df205296e1b8cb0bbd493f80fe51f015253b17be11fc079fc41274bcb36f64262b078c618ce9633b39df65ab2bb6558a446870534b3073b30d10daef0bfc9d0d849f80b0434a7606c090a6440dc4c2d7bfe450eff1e41066a1fdfc4161d70369c230bc3a0d73fa0aac681813db0c63591660cf8a91f2b2321e29644984579b1528ae72b99e5de8186a7348d16c3ac0fe3061ad7655b7404674d5accb3595c8beb88ad4aac995e6ffdc15c120ef9bca8ecd2a6052def414f533b63dc131cc39909efce18ce16687ff33754f19d899d6e2d0d6e82028fca9188c9820fa23232358efc19b7415eec9d4f3785df7921cd33687d166c3bb1cf4d5f44e9fbc8001e62caabe7d35c7e3a79b5b69f95cd67ff25e18e6252163084d401e6dfbb0da3c0ded471692ae68758fe66ee5fe0998af2ba9949da750b54820433ef9ebe0c50000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300108256b16fab86cf3f7201373ea117d95d40511ee204ac5779eee30a5ad87012b032ca704a8d73fe6db29311342fcadeb2c9bf363f494935b3461e018d5ff1410f32b2f9c2697bf4d3e83509330b2980d7933b1e9bfc79440e6853c291d490bc3641ca207db2c8906a5b5bb1f390acc362b90df070ac514f5ed3de20fb83dc87de4000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000809cb3c58ca8f7c81bd82e8521ce8425df66abf111280cf03b449860cc510ec0524ea3424ed41db90df238cd4e2a9eec5e954942dcc2f78e49cf75de428c24cde917d30204a9c336fb002278a7e34f3db015c2891c83c7e179b0c66183398f9af21b97012cf922efcefd68c4e62d3ef5c636b1f884eb1faafe77420f5acf09e7b33c22dc32f033ea5521176ce18d53174a1326b00b4cec5cccdeb96244ee30bb3bba11ae63907019f7ceaea9456d5f7ec0557517466056e2b74c2104c270ddae3cdb67a0d9a3070799a7ce684fd801045604d7af6f652b15ce11d524b2c777a021251f1561734adcc2bc69186796310d535491fbd464dcb79d17743797207b32f98dccd32c547031d92c069ad82555471cd110cae91883c252f8ee8b5de2a3df98676c184a7227c900aa5124f4533801023af6f6ace9d6d95cbd4f42e40a0658abf22d95adff241fe98395541d11b3e5766763c14eea62263605cf6800de7f27495e592e5b79810c3d295d888a9ce5ac262d3471b8814d92bb0b8eae5879f640c8cf0f5d26811f5340d35f274fcb179581cb6ce5484a2ee1fef4c31a45472943416b095be4c8f32ff84d33cfd0293a35773535d0846785fb615e75a48fadb4ee0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011c09947b734079afe2d9fa0149a922d67d3ea4ff0a01e2ca282af4e26b38a303032cc090eba74e7bff844265bbd984f3ed2e718dfb534277b9c83c8362842ffd662350da453de4e49a54c993de86ee85b3ae6515d235058a66a6f93b1e4a0058a20f0c795c2301cb5b85aa793adb809f07daf45035cee07d3654bd5f35a514295a0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001268db8151a7c89254dcdcf7aaab60fad05cf5cdaf38723b3c7a005d617aba286ff6fe0936ea733313eddbacf3015e9f1d057c8f2900c40d3ce8ac25ef9508152a1dde9554ce743e6f4844be91750f400abe46e935c8a9a074cd4c26d709aa962b33b0e240c8fc2939a9cc7f0a41c5243af7fda6c86e6c8c78a3337171c07772b75dc6da26619b547608f3ef69c6d46cf84af77b0f4a82759b824ede4493a576140f4e90ebbd84f22a7a8c791465e458037b8a154fb436b1a8d745fee5cb343680ef11d4db194a6edae0c65a46285bdae83ae3b8843c1e2672999a0126d4d4a66838b4cea1e6d25d5889b060c872e278832b2b2a65a26374cce883a2a108ae21c94e85b330e50dcd99f973e392bd0151a00c43ad3e046251de6a3070154983851737d913e2c70ae739d521f9d57b86c4e6a1573675da7fd069649b2bdeaed96b247bb5996d3d444a602c95c71e2c1f8e908437b46286cc24def0d6817bde69b4153e154485d0587d04ac86bf8158c4c0af8b1a3f56a4f0837e4a8e4992d0cd22b28929dd44cafe32d12a746bf24355dd60231234fded1d97750ebad1446c3a310388274fb81e891e897796069ccf176b710bf1f8dfe9bda6383d58e60b02d7470000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300118c7140fc810c1f4da69d28583700454e815ff2b8667dcfd8ccc761ee08a177b032fb599cc9a369b44bde51d237b76712a0a4d9c8dbe3a794a7c9d2e3acfa91d5f24cdc4f4386bc652101648b4e45f89e9280507db62a9d3134e92afa3f13275bb2e536116ec3626e056bab069329dfe3bbd3d7ec1ac148683868118c3e8b1bccb0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f6549c824fb1afd14d500d0ae7967722b2751c7ac4d0956b2615db561432bae36042ea1a0afaceb7e5f566f5de02da2d6e8bd27a14dd4fc4754155e964a9c2a4091880d218a82101d9d35faf8eb75a23bf434d495d7ecacd74e9f3394e8bcc2c909b69a03b6e5e612a12b1e13a52023264e5e801d1f2f17eacf19d1cab92b0a85960cc8327123c3772cdeb347cd9c29ab1c5a7943ab35a59fe9215abc64a7c8a8b3aef4309919a4f04d43bb8ebd6a44ac223b3839a73f01e57076dec8df1965e1d5513127784678f30600c42c6e162d050ad46f4c684d10b37c1a6ff6604e1e629a2750cceff1995b44c4c5b569d059d2a72c8a56f01fac39eba2eb1e06ccba1266babffd5e04ad504872ee273835323d37190f52fe05a3a9c9b8db6d571cba78a549d2540d8fed590ad19b1062719af138d034bae68e82ddbd55ce2170f050917296286cb707e59b9cb2160382ee07787899d48606655e66be932867f2ab1d01b58928446e2b4b22fc2b9b3d8453db2444cb78eeb91c92605bb46d7225b73d7993aded07be963efd0e7ba122ae5e7ef9a1de71a9a6e70f0de7ed1b62a488b27587d27d48878ebbebee1efd46613b961ae1adedd96dbe012bff4453149329c80000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300115ba72cf620dc54ddf7ea23892e322478162f3bf407f95a72f945bcc63371c1e032fc5048940498f71d387b8a7c32248ba84e07accddc8aac06d2584903e4a65e809dd7ae45f1431db364a69cb9c45b74a0eb4b4cc9e0a22c238959560cfadd07012b8663653e76e991c9045c50d917fc4c4aaf8cd513a941328739524c82be96a000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000900f46976d078f003b73886b37834b2485e318338965d73b0bded4998b60b2be938b100f882e7f496ed4dc202b9f085d86bf29786566c93010aaa58e1c66b5d41c5fde7668c3e6b2a6c369103ed60dd7294e4fd895c38062ff0e410fbf49f7fcda46d2d2651e5e27d1602ecebeca69c211afb9e8c938a1238c3d59f7bea84d4f628a4295b0cf745a792eed84b87896bce8ec8a096e75da426ebc4be1506cf2c60af88b2a0a39e8e6e5eb689ffe655440c1976c88f8387b9d35890d47902fbccd8152c97b73e8246345ac898cf12c7673231bd03c36edfc77f5a2654eb81a9d33322f84957ab03a2e948df3b03cdd8f49b1825bed577f2e2cbbad9d63061acade42fd661c4ca2e981826406c9e43dc754d3b94688e081e6100b75b46a8b8414511029c762e0c3bae2e2f5df7967336616e08dcfaf61465d178e74c3fc1878c76256f408677f91f555fba53e39564cc7465c99b20d84071d3af2df99710143e3fa2e8031d2bdd50eb3dbac8e01d3c17475a12fef6f6e24b9d3456f1dd6be614faf02d21b5ef436edd89fa1a46816e46aa5289b77ce0e1692a6b2c39e0b71758b6776c08eb6971fae42f9871efa3a76bdad7b9dc1bcfb311b1ec4e897f6006488d100000004000000000000000400000000", + "23a37f67b98ba9af031950c580213c29af850d3e3c09e19999ac079fd708859a0000000d000000000000000000000000000000000000000000000000000000000000002400bdf09e7461031a9de773b8ad1ed046717b5ead5c7bdd1026c6a101afb7f95a00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000d005f6d7c314c273f16a12a87d93cc6ae2ea671e8fa5d6723f4d4095e8dc25b4f3000042002b8956dbef7d56c938ca8f60879586843ac8edacbd852abaff2895936f28caf5000042802bb7f2372436ecbb2ebd34734a7fbce7e41962fc16f42b0c006b3b074082abe0000042800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000070dbda84000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad2ec2c01c3837c2fd6ed3b00d0add984b599693e59a92965243e004450e84398a1b8ef20000000d0000002400000000000000000000000000000000000000000000000000000000000bebf730010c29fa508687f30ddbce88d183b0cd8a656eea96a7ba6fd49aded7728dc49b3a030060b290e964fc88677cddbde278bcf756dd0fcb55bf31e01ea509b300b6fc332a281c7c1697e4fe348cdd24ed29b8cd54c164cfae293115d1af91dbe03e8fc01ca5020dd270380286fbfbd5eea4ac634a1c4e5ecf6c77dcfab20a218f3abafc0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c318bd201b5b679349bbe9e2017681c8f68cced9cc72b52c5d00e4b5f79acd5ba8e212c37688d860a4acf8e2cdb779ae8017edd38d666e9a1576d481c07e84694c4692e7799aeefbfb6412604827cddf78dd7c7f2db74f08b6865498a9bc1d90a6a2d637f3b0b977bc243e45eb3250b77c16305dcff68165cf42b1319436e0b5cfb331955d3b42445afbf62b89a1458021007930bd1dd8c98f76e403584700c0ade68df814d97977a0ee51b546dfb3f573fc9b874f19f724492b6ab4411823ebf8fe8fdc0e33512bf46140e0b998797c41592988908d081be7e15e08f13e3c0df05d69d2cf002824d6205623916225555ef9fbbcc02ad40c0212221db23d3cb467b6d8e7deabd25a7ad644b411e9b8207cd1dd1eab31c83e93eb324a4332fd26817c0cc824aba0ca8e96211387dc6863a1250bb0d411114300e8eba8d83e20ed80c19c5cd3d42610cde94e5f707cbc883c84c6754e48d459b1014568dd0afb1f9e46eb759932a785b52e94aa4a67e831f5af50ad7fda0be8c71abb6dfbe46be1849c6f72891bb135fe0fbcafd062804d9c30c52e03b35080bc59481fcc5b956f8348e2bf8c2ea267f4eda416a94ed7586e57a9cc6768715aafba9a90b58171a0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001175b03cf52183a9a22d2404bfda4ae980d01e0f6aba01bf129e75ce099d989dd0302f4b1541b09e35c6db81dfb3d444cc46ec0879bff9dd7a3556867bc5a3d9472204c7d144f71a35b41525687ecd3932ba2ea5df3655c94f3f913f87e7eb502ad177fa027beab84cae203a75f7c79582031a3a3d319e4474152f30f493a96acd70000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c0720c666169d10fbb2b5a87561048a60f2a003ac1f31a9e790440f05e25bac5432139c3f55706937d8570a17880329d7a190186da11f5daba1bdea80a99b20ce02b2d0a5a715536c57d31878ebfecb316e5fce90e5fdf1856b2f6ea8e6e71a1762ff20f7843b6eb275ba045e0aeb09c40c75580888b2e4d2fa8c17ab0a2deeada4265f672fdd6d202fc01812d8e8c8088f5d96f34ba26fd737304cf848fcf4d96e51541b77cc34e6abc499e4c11c8e491a455c5d22c744f2f87b429bd535b7371ae759f2d1e41db7e0df69135461492ae33365b320f9d57cc346d351076475180aefb30b8e7b916cc7292f52ccca9a52a5e950ebe51f1dab1fa2020efe807409a78b0581bb54b99f7e56cab699c1689b4b52ae712f78fdb88c6b101b3fbf2ec1964278768cec6ed15eb56e3d9112e4ea0290a407a2e5fa731764ecfe91eb82950ebcf13e84af55230fd47d51429486dff0da659d6fa13108ff37c73147c8a446d46a636ac689e751657ca4315f0cfd9b2f6bb5cb9da0f3e3eeae9694645bb471cb0b642b2b619a755ff3f8ff46e7a23c76d22d58c03732f4ddadbef6594c4f97b1a59ee7b330903819c0dbb2419cae068f4bc70e95ef9f549d7f69792376630000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300129d571f0f5b1c7b0a5f76235f70d3cd99b2f380da172b0db9c01c7f08b9701860303cbf260d556190a2e9e63c639d6cf26386f7a644eeff0b23dfdd3660b4805a32bd69367e2b0d29ae93970e3d2c0b0639a7fab4852284232497152bf76509ae428f41090642059464b400aa815de0869d0b49b6334d7362c5d252fbef7c9836300000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080dd4db8caa0f56f0441a94e75c6d7b22c55887b97d9bc64a71925cbdd41c8c8040b0f0bbb65537de3b2ad7c2420822ab622005093a3a3e45b9bb42d3a2c3089398fc5a34b705a143d784faf26f114b833beb04c95b4f4ca60c5b32b52cb5a39c43fc6a69985ac46ba73e3d5c76197587237bd2b5c35f33392130a7e8363b270cd0c0f9389add7de5f315dc1bf19db8ffcef1ff9d88ee4dd45baea514f40404932a8b009f4f2d442fab2f6f193cd828d9e6dbc3a778bf3a53a5ab8fcc9535d3c585b58aff0db793543fcf812cfa01b0785c98d1941c50d6820a9d1eeb4e852427f4b29eeaa819baad17165e7e71a2e353ef531ee3a8e8a7edd592dec33f1cb7fe38f909da26580a99ea952356afbc19b7b2bf689e8e6811b3993127f6e26efc7e6f9983b8f031e270f1509d4d623fb216ef915776f297f7df022e849e1ba07c6a049daf917a2e52c9329ef573990df628c9a30630a3995c46bc07983dcc87d303e980d943160a39ddc8f4f70cef741a37108956b46d824ffd8e8ecc5a14671e7a114dff9a195d6160fe626726300a7875ea17c66895db0d904abed1ac96111eb5acb74f6252f39b7ca107589350ffb0deeec4061ba765432dabf167c882ac7420000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300109e3471e728bb6da5a0e744d2c4db562faafc42f91d8b4da1405ff5f9eb40eb603051c57abfd5327d42778b7f027b4f6051fb264d45290e56169d24dd4a68413880461ffcfe93ffe3ea6f1e7a89ae883141e503da89274726d24be02b92ee7211c0c123cb9acf0deb5eba66b1c264ee4a9fb16af5b52930c9f812fb2fd57be080e000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000962bef1e78bff71aad9cc21c20ecce1dc913d9b667c34186d7bfcfc05c795b17dd58aa92b6140bf8deb5fafed9dbbb59991c0575c2b8c35398f8e1de15039ad2292ccdd186d56d0621035ff212ab0cb218a5ba10e22b9af351a49a5d6abd24e635399cbede6e77e81f53a9a160b7c02f3d93d14cf7f91fd5555ceb53beb8f5168c4120e277b96d967b96e5a502b2e78409674fcbb75b2c6c5e713a6c58ceca1ee7a77367105433ba1a5fbcc55120e3cb5d6f3c7299df1760d3b7002150f7f37b3f72b27a9173e6de9c0e039d9bde3b587542ba3d363b267d13eeba5f2e77bf23f641cafc47e98a9d389a5bed3922b6b2384de11ad3308b4a0fea5d26b2b02fec809f85925e7127c7e482428d07439c37afad3192480de06f3d228a9da67e475975f7094cc61b25dbcd9a9c838482713e5abebecd81ef61855681dc6290c71c54a71551e5a59d881557f950ab171dab0c3698362316a9b0d3cf4fcd322b6f7c9e9c18af1d8960f9b0dea8fcec23daeced8933148957f884a09a1f00056a1251a3be77a1302fd377f5e4624fade01e4ed327d203da65b3549c3109ffe8fe45b1b00863c9450e7504c0932180cb553d2f75662650d2e2f3419f187c9dc54cf26c700000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011c242c741552d23133d78fce96b6fb278a7d57375db4a7084aeb239ef85440ce03055842768e18155f5b149e225481c5b6e576836ee01891050969ea5404f8046f1f26b95d1f2ecb859d27c090ffa3721145c3d3fb575a5c17b497e2e0b111fe381cc50438757d61df09d16c0c1939889c2067568f2ba5bb54d7a71f8f10103f9c0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ab66dce0c400e449ee653641fabd420642d7565c7a52afab9db75761e7b48faea68b331cc1a62e3fa783a22dc5da7e317416e48dcf61cf055d76c02e86351770aaee2c3aa939cc28357e7bfaf0812bacecbda870d489f90c4046ed1ebd177ba6cd7947a8304f6ae96c85717bcda4b53fcfde0ff0f814d02ff574017db8ff653e0e9bf17d2db342452ddef07b0dd3c79fb03d041584a786581d8eefc5d994542d37353030f83047cceca256eddc7ec443fea5260ea841766b5238502f514bd6c801f85cc6f6d41e2ee640248456440f447d13f455f85e06bc81429a5ebd42d06bff8932ed4b13bb5fa043c7e0297aaa6ca1d0d9f392e01b2ef7ef54767c1340affd4b2bd0722c923d7efa86f4832828640b7e1b97de7b7ffc603d75352b90713853991e7e85d4298cdd4c1e570030c0e525a1a68e82fa232ac43b3290634a11a3c7d62a3ce394574e9431bdec0d6b5af168db500393f4790a35d74adcc031f4a4cc211915579fca6365ca8b3a6bee8fee92efc46cc03b42cbe734dc9555fe4822b8ebeb491eb280ec7dcf5ccacd6d400dc66bd239bd8f0efc5b73a8c396fd017e9a37f3e13a1b629c26410265c02918ce0acfce17a4d0918f81933b1250f27a30000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012569cac1f02dd020357fd87c50264d975daff58de2bd158bf2458776f960fc12030908c7a22c9f59f305df6c61e9fa59e4682f32f39aefc3913215be6bd8c3acd30ba4adf2a58298078ad408b77b97f2053390f38238efbbfee4aa46dc1ee27e88274cdf817f634439b1313713760aac97b1dad29c1aaa3f128221a2b9005f137f00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025d31fe3d2023adc8275acbb23bbb36da05b526f0b16c074b948b66a0332450774c3054efdb65b774e93e8ff54a84a36993443126a6714782d09f8338090942ad07f5904c4ddb3fd7d1aa4d2abf57aa868665c2c485601b8b9b53a9172cd51ccf15d8e6d8def6cc4d364e6120ee3f5ca01e27b745eff438203e0f4de52ffb9b2f86995d37eb4f49de98910b69544df13b1b27e1cb16d449bf92b5a51d3cbea1115b77f31f8231c96153fa182a2a5ff3688db8f6fc082c1bdc2faa8d413df13ee87ae5bf33badf8482955d523f659dccde3a3c4be9c4047df110faf1eb6c1eb12d70e24ee1c2d804339ed35e4dd994801c89ec845dfffd9b75fa4e1aa1717f43fa11108932b0132aa5ba225cc8ffe546efc690491500ccb764eae294664247b11c3d6042db42dece34d284b0f0fbff527d58f83d0e76ca7f5dfc2442f67fae77d4798ff972c601c0c7d7b18542fbf6442f8f6af076ca38c319b959d52d526605fe40245e741052383c318538363cf91e52d548007c0cf46dffd81182b74dd59a1e8639f41404769a683b6c4f93a907b4e9cfb23e47c6332e2707a68ed3a339a6a326e6df6a31a735aa2f029bd0cff9511e040f9d39d8ac32eb81060d733e7ce0a0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300106e686ceb6fa292f6f4ae9b7100d3bccce1cbfca2debbf0ed06d27ae8c05ac66030aa5364e876dbf55963db8906dfe3f28872a039e2c9dc9be310b22cf6fe287ea0cd4bf8d864a09b919cea17e932d35faa1b98c0c068914f84c6fecc862a3b4db2184415e5a6a2dbf88bf826768c05ddba49c1c145b00cbfc5b101ae7c73873220000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b541b622606fa1b1cf247d5853e4f62e7c6c9192582521f79774d9014268d488d5557b97b15d33593b163bc3c5e5eb294279f988864021ee03c4d3ff6331cddb0244df771eb09f1d9e3683c5452bc03c9679a8a2c356a53ca4caf3fc3f0eb8e2923a3cd7297a50f6c0f82455eaec90f0b6cfea6352db8124881516839d8258cd2175b7ce763edb5f42a39ca10362968f343a47c52846b708a9feb69b789c334e727ff497fe9bfc8831531393b0f476a868193e29d1a6119d8adc6e7a967bef7687ef251a77e28e6f7522993f32be40fe37f6b3b3cae2baa40d6cd447c02d8c8aee02c744d7e08ddd5d07efae3df1f3c98e8cfa5a662ab8ea8c8e3bb948d0f74893729edbc1ccef10732ec5ec59d372eabb8431317d3dfe6ed1f0c25e3c15f1dec98b41c2e59574680adfcbc8afa1681778653a7d2afe1be45fa43043fb7ebe05cd85933c45fe8084bfdbc7ff4bc125e4129c662f282045ec8d9a1a9bfa8f12f7b411c740db1db91a40b5589c4ee4dc6d25fde61d9cf990de29f021e59146c1b2be32252eff1f3f7ede7291463bdea41d7fc9b465e64a77a9ce149227ac751094e5a2f600a31df4c457b90c69a53003a578775dbca88a80731d4f538fab3d8c60000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012c2e29a2f3e6a17577d1ba8152a81ddc516921339c6cf90e425e229cb68608ed030accae8252014e9797242c68d0af4c2abacae3b6c4001666f4c7444165a2bb940b3374fb311f64569dda8dc30dc1c2c28c291015fc5a3d5b65dc9955edbab83c199390c7b97a8b66301e48c5abd8f1810d80469e799d69fae97b4997ccfef786000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000871cab695cd1184521c521eca7ef1a7d2f3b972df17192412ac8ed30f4a380d2764bdd8ed1c42032e74bba547f126fe2661ab2e4e847226fae7ced9c5f075a41aa8e7f0843d51c5598dd11288274206628f4e60f6f5de0ffc59d0eec63e272486e6d607d346fd4c0fc6b825057745cce218fc731d9b6b1db5b057e42be6dafdcc985ca30efe2512185a886a4a3de93192bc9361473129e6ccfe47f2f873b058ac03fa62e5bcc26d24b4b3d2875ed7eb78cf1568095e24b186a1c899bd8e6efbd6a76e122a6e63bf5f8ca4388874fe5d5b0131bc18390eaccd5529a7a78ad9d27268b22addb9dbebaf6a849f90fd76e992295bbe780f774dcc075fc47db916b18b3547aac6d14465f0156236cb76e6178d14c952f75d94cda67c372b0be872052a018328f224c1074b2a87cfe0f9e6e1aa9a7cd28474d575415d151505272b36e037a00d642d91cf791ebfbea34ee418e5c3ca1835d43e50ceb34de76a1bd1c7397567cc97901448df0095313f17a981dd0def97acc7022649c8a7af6ae65bd8daf7323fd3803cdf82d693201b88b1daf54ec0178cf9d45fa368fba6440bee8fe11741817fda4b5d26200a3a68678335816c9727cad6ee75d11709ba8e2374de50000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001159d89dbe387558aebf74f3d620d5d77fe319570ec3feadfb419dcfb350891f5030c9458ddd2e948605547119d321c6393e42da3ce4e6bb643af90238f7d312c371f31fb628aa56457ef30dd9ac3b6d1fc11b57c09b2571641ef635b3dc24f00cf2523688658ea85c2bbb1f16e3770b113751b4a1d74bedf1929137c7866706740000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6e01e2bf0d0bf738d561cb922bc5bafc1cd19ccf33ca2f33ca215d20982035fe7fe338a3ae8537856bc9bb62871038e2513633bc659d0d35321c758f297c5afe8613de3f9287604039a97fb7728b880c400871566504c461dde955b10e19741b58b688fa4b1a915f87f8dbd5ebc98ed8631e5fbd044926b0656f1a3596364a601e9446e976842b589c16519718528ac26d8fd5e07a76cc2d13ca60607886dbb6d76225e4deb2e646eb811e09d545b0e007d5980c5069cf1f582db6bb55828a57676fb623c62ed7208f3c6facfefe4466929b25ad9592f4c8604a604138c469d04e615e2ce74da7d8854c7105b74278c1222970af63562b30e2dc573befcf4d98aa9469485a604ea479562f2eb9551721dac24b69d462b446c0a1146dd94f5e5e4853b843fa9c95160d68ba3bc45c6ec0cf4bb7d9eac571435f543ee58bd96ed3646ae2b99a32dfe67c5efa46f0f13456490adb600a4605762a826dc67764f535d738fa9663d56509a61825defe2d23b0bebbc34493fe2c5d8850811dbfa341f80c99b83645fb316e8884d70f81385921bd5d4ac933faa582033084aee88f6782c3f0159ca70cd2d99374c282374db0e96e77f2898cd3bd63f02bf80ec68f9360000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010a3c00f7ab93b85b2e585ae468b950b9f4ca818e8912649e0e191effe83c64ad030fdf9e7f2466d2cae13ce5c18b97d1a1817baa4617b43fc36f75b82e3b126ba806112c41d6ea2635ceb51c1dcd0e9b33682c0fca41de2b76715dfb973a7c6b1c0250bff6227fc8c4c91f57123e4906698b27bffaed1406964a8b86067e40ef93000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047263dea6dce5e39c02fc0bd36859366a312d9ff37b15e26faedc34f516951cba150d04d923ec3167ee9d74c01807234ec9fc92787e9d225fb51c0b6099ced173beab149870e87c8b8e47be42576d6a2ff1ce91133b3ae85aa7a55dcac01e92de36854eb18af6d8e74e6e15e425d97f2796de1765743ce76e4175c6da30a6c21b64a3a8dc38ef4f1d72dd1a2c25699608ec32f54753da1e964768ce5689dc3bf55211e1bc8f8cefe4bef8099972153b37eff3c98eaea141b578d48771486599923cee877d2d6c967068895370378515433fd7048da04a4171e280876fd1a65698a66da869477e66bd26fb29ca47c21b14388bc7637be9fdcec33256c3a2a44d420117658911795e836de31b613f82de63def20f967d54f06d395b233dc5564a1079c415eb70ec69e7a596d444a26cc16b5a519ddbdc3ff9144e16712266f0fe252cce692687b9b1a2a0e720df0aed6e0b70b69f766e5e8a1dbaeb5fcd3b0c7f3c9a90a2653dd5b4d2f7abef8d69e5ed72b4291150426a73eda2e8b3668d18023c18a92a0d3b1d794fed3e41c76e415f3ae914154c452ccf8b82e3659118e2f955bdfd407ba8bf5d34b79f4faf877d146c78ba20a66cfff8ce4a30a5aa6e54b50000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010c2a344b73d9088f880ac14c37465f777bb6a2570affdf68b97b6de6dd2da00e0311489acd0059038064e7a3b273cf6124b6ef950fbb086313f5571eaaa40635840f8a5a13ccf9f97212510366f9c60943877bc2531e072bf2a3d777bd242e54ea02ea7eb13630ec0268c8c5b2418a6ba1e80a792f3065c951ab06688bda542b4c00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000de341b5af5eac6145e3c584df82d6c2625ee9bf69c92f0dda3d241066da6cc7c52c007f84b0a07334d86de8b9060870cc96b46e64774e345b53e701f4223378b5da5ba86b691fe36edf772aafecbab439c6637d088540a36edc266ce436014004eed8c550d2f922bab06f449957f4c2bd4a68e2c53f9d5beeee014b07433515e37a17be26c4455b230ba183dd11cd5a2a505146bc77252655afff75b480364d56410adf4470b505154db086f5b79bae19704d7df685d2f07a74ee5b5bc68825603b5fbd808844447355d60daa98cad690e6b4c57e5e7070cdf9af832f3aa0a1ec1136048a1ef8bcd94a3facaa72e1d9fbcf28ffeb9748e179d2b681f3eb70f69d5bc0d5326f7725eb58fe2c684a19046351d4668e7e08536548c7655f37f179581c02ea1aaa7ac1f8e28b5e50ceba248be1c18490d72eb04b59f532ca51a2625a6ce0407516e1fd375053f3968555d232126c177c8ebf123dffedca5c8dcae4c0bad5f1a0be7bc5343b0866f65152b45a2ca3f96456e220bb0126d6061c70b33a2f86b73a619a1e74dd9a98c4c358f37790092620335132b96ee00a75b060a9567f4eca7e3ffbf6b760e0f29ca193aa4d4a86b89b15a2f9e82ce17ebbffc7d0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001138841fd08726a08a2b18292d2e5b2b27ffcfc02b16282a80379b5dc8b53031f031181ecd3d1d909b4847c1e499dce43be02de20d91fcaea1a22d80e78c2319a520bbbfd36dcf6ab2cbbc63e48d372d506f1a49844350533e12ef55fc05b66c88c1e2457087eb0c31c23ab246a50fd5ec1c8eee3be136e9834e6f229f3e9c5af5f0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab2e4ca6bdd21264e1005e170c5be79d0c683bfd79517a30be45d9d5851f14b9ade43f48b89bc6edcae27732ff86eac6e6ee779a55fbb5b5d3a7db5d0f7bc7fead190a601e131fde42b53991950edddbe6d4d209bdf234e19f613c016ad7e97741408c33210528366400145213228ba8acc6fcdc34dac2ab778166be9ff47d8448e5fcc68e10fa75413c189a3c4920503122fcbcf8d86c0051b7e0aa13610926fd929e987a5e1d341c0ad03c2dd91495d7788c208dbb47db740731dd68f5bcb03d0a888ee7c20064f1661f58533f62f3a68b91d1c3eaeb3bdff7453d95415ec2d99aa41518793c1d99167cee1ec5b5bf172e446aaf9a22f8c69952d4412b0288c976ab90792dba5e7167b932cd69d5f5b45d4c817dd50a93b804d71d5c4c463c6718d9ca25749136b20a2472f2e99e0e74fe0cd0be93808f3f3ecd88a41842adff41aa9379d9436900d4522bcca1c2a9acbb3e4783a74495af46fda8911deb6e58d4c55e24e450e793dcc80b0c8cd07022774e79b8b03b8cd86aa9e1ab66734dfdba8a9a28385aab1234c9cae7143c2841a04cacc70ac4e94b47d53d386f29ce1d32b8b8193b6717c1336bda061a5e3dd6a7f4be02339949aad048b85a424150000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001008e3aebd0c610632ef0296df5658aa1bbd6900e0282f9ca36f2d5784c1c71d603129c5dcbaf07fa1a1875d480739d5330df2bba1045443edb729901be68434a500f1d0de962e100496ec8a9ccda0350b224cb8550daba2a6211fa7a9f80dfc02a21f829535638c1f3089e8607916ca705e78ad63de33a5a15b7b99dd7ad7f1ec400000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094305a4f8c3d8a1c668663890d35716cd9b7e9acbd26b3822bbb63921935c5acc67353ebf223839ec8f8ba22c4b7099c894da558dc16e282871e54c611279defe7a9693236e65a288cd91836839fd96637b58127cc1de7df3b741927c51c82f13b57fd38a037be76056195b22728f07714fd45472e8379e4fad7400bae321a3a694474d8919564551433fee480e77062f7880964319e186d8a61f0366c0807f41d1525c323644c0ffeb7567f9cf2d3304f6386b388d67ca5b253cb8fa800992746540e0213af1f477119deaeeccc57ebe659691bb7c7b686e7b4becf0082e3460fe42281da66f69abd25ff99f061c0caeecc56c8f01b4f047b4f6ad0e33a231d3ff202ddbb3d691d554ed665a4076b9b474cfb382b6adda4395316f57f2a0326d444c985b10c95c38881b65d784163d76c0694597a6b58c79ce04814946b338d231739ebe3315ff32af25a90590ba7e42898f5758e110e346db7eef4e93272bd3784fbbb7dbf969157446728377d08dcfa371f27d07c9e3e77132f0aefd86ac00c36e49fcc47259dbf8e93cad1b16dc6dc5bee46bc060f7688a5f3c9522120efaa2628e91987ab476085ab7d38825e1cdf172ca042a56080aefa17fb2e7a230f0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001035eb600f5d1b4db2488f194f4bd3a8d6de256dabcfd9e13494072f3598b7a4a0316d6de1848bed1e40229a1b591c8f0a5b72527d3ef27a38ef82ad6de5a2414b723e75e5d0a73ad0714a71e5e2279d651c7976a8313c7a5f6a2b7d505d536215b09293286a01131e4cd5f9be060b6fc45b71341ccf8438d176dcaf039af9702520000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008184d313374822de321bad51d1313874e6284048cc14769d0ad57e33c2673c6af181199182b963001b24e1c695cbce1951ebc7374d356370ee73e1a9036a72bb82ee618ae47e66eb7df6ce01ca72009d42dd827d30bd3e76c333aa6f3e0a2cbb2d48fa355a35a08b7b791d01ed59930d326cc326ede78c77005a869b22de23d5cbbc75a202ceb1e54365b3749322dae3391f4ddca0c133a8792e7923c4aa2944650a4bdcf9b9c8eb041a511cd84838cab86ec5bdc46100f9dfacc8ef0abafcddd75dd6511cdbdaf51c557d269f0ed3457c2426862e870ce62d871d0cac47443247be7ef994b5e592562853df091bdd074fdbea7be99ea465a8c00e5e154a284b3d0895a2c36aff6d74353a929e9b42f1f2957d94a5d73e326229178d652da96be205052b073c055015fa439a93766b0b0fe8a49da600b240a966ba90380bb13df93b852230a66cc7836f0e9054d17845afbe9ec853f35285c54eb9df0f396118aefd21640b33a99b4d6cfdb4e8b07183386219396fbf9876a9a1a24994d06c7b30653558855e6332ec6c26eadffd359caabcfd43a34aaf74556ceaad8e35eb19bfa5b959ccded8f9dddde7ff5b440ac1feb79f6478c4e8f11c7e6de3035f21db0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001103eb6077fc1958eb157f5d454b434d5331f95a6ca61efc7504732da0550deba0318db4f3375e36509d5aaa831a0047b9533adec40a3a3b6548532c976b05eb34d0291a1a8c7b5485c7a576522e98333d6803a8c3eb82583bcc6955a19d442838d16dd81aac610abc98ecb2b08f45ac714c75fe35b76bdf84eafd8cb3fce86e8900000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bdb6a318755cb31a116f71358ac50d459427614bbf54125be6dd605081f1670b68b9f7d1bac790fd8e685c58fd62446b2ca1b61fd41b02ddd3237b6dbefd398931f5c55e16eae282595d00937bf4cabc7392a682633fb9423da60699eb26db8a1d011e514720b5a72f2489ae3bb3e56069130d1f98c506526cb8ae18a6094f7e1aeef8e3cb88b603ed83a533943d74f5c6df999c647a157bbd188c4ffeab2910bf5a426c621366f90d41cdd2f4f31bd8bbf342bd37c37bbc7731bc1b1e96c8feb969c9e176545155f913b3fd78ee713b9bcbb9de4465f08f252d85e8ef03c204e5443e3ccb3364411c9416315b584dc2fadcc82ed1c2f862dc92558ba2246b9f86202a415a279ffbac20332c01740af93f26d991418bfbc46a6d3e70d997d7fffbf037ffd859cd1680fd916be894723b32c333838f7f17900cc9a790f84c2465f092965ff3b9e9427d60ed82e1b6e5cb3afffc358ee7ef876c2885ddd55e2bc8fc7a17774e82bb954183ac3c23831fe937e4a91dc559df3221398383a55f14bfdaeb73be1f444efdd915b01781bd40dd468f916de7b79aaa6426e84f4f63b0a18e8c3720fd1dda7e87941b802b82880461cf594043db0307d14ee0bcc2960400000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010a5df0cbe041a41afe4adf0bc8f014a1399332405f3affb29ae7ba9ad7f5806d031bf864ee6c1bec36518bfe4cb45b0bc807426e9a2ec73d51717644fcee1fca352261fef0801b6d0033d1dd6cf050c7f77f7f3fb07f12ce38823d604c9494a8092394e992422e23b7d425bd77d933fa78bb97c97372f3ed8ee30a0d0eedb4df0e0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c06ac2a9e46f032d74eb2390da9e96d453bde7b11adf03608d61c8e34619d301fc4b13591f0c6d1de45706c3b2b2c77e12512db499408093a2a4b03d00f2fa7c7f4a5c3931e16d7fcf937066f3d015c161cc786b05ff485bb2f680a6bcb7830055ef76653bdf804f753dde4f80943f8e89cb47d8cad581c1518a4da162b35f4d89813e63bd0065e5dfbb747fc1cf21de2e5bbf803255330c77c327ea91555a9fbf345ebeb82f09ff71029bc6ddd99098593687b9c8ec5dde34733669a3979625462c1b595973b036ba1d89016e82c1e3f39fbf9ac6b8ebc51db672698166c1d7b05c109ca3b4d6cfb50c832cb1f4ab645a4c72ea6f8207095746090e20d2e1d668fa8625a1030e8e20a54a543410a073dad1f16170df739b78136b0ae21370610ce1bafe1d2611f54fd6d27e38476965b9d10c40277d56e07e9b39cd384ab3536e0d32e28587940344f8903e71b8182cfdff7a1bea32f3926ac815d26f403dfa35007640654a7620263bb9c57f0b8d210150c2e8e4220c75f3bcff5848dfdd1ff5de0f37915d5f3e9db6dfe7cac5313c7d903b88930b12350b15d86228ca540ed86284ec95b6f75031a85deef51844457cbf6881fc49d87f1ff191386312c3c0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300125931c522042160cb1521bf5f1de65b75000b30c54c342d64b7352732fa14548031bff2f6559356f85232c609774250206804ae57df50b95f9f95bd62dfae253c92d4f9b9a8a94f57a5e17f7e09b2c9a7810afa72cf876ea0e28f01dca29424ae827585d200967fa19b6f19ad329a85e9d4ba68df713790e12190a7764bb77c0110000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a7caa995ff0a526cb2c1d660d051112b2f9a8318d4443a53302984a6efedcaee53abecbcf2f09c52b6d0cbff5cf16210285c69ed7c0c28fa702190b51d2d06b87dbc4fd9a76b2da9dda1cf8e6d829650524e0ec47de39b0357070ac3a60f3ba9164f5520c2003d512420f59bfadc0abd13ea02b0f23f2abd66359d9d7d018251e9b26ea6851e693681ed82427776e66f7be85c882a1eb0ef82034f371da09ab54e63011ef14ad5fd3fff115173dc08f1b16bbc085aa0e5d396141c6e73e88f65522f8969372f477032011ff6db11a82cae1608d3295d1991f7f97251442b3041ac228d3f4f34978e0e7afd32f5c0090e5d03afd4d10ab306388585b686b563b54c99cf6af27384975d59ce3ab41673bc70326b7c60c8b6a4469154bfc31fe2bf8ff0b50ae7f86b42cb367525b7eef772e139910d57920c4ee490ddb7abe4a8f657f8098fab428f83874d7f34cb7218353bd190b5b8a996ccb185ca90183a210da6025f24eb0b6b25f86f255fda85fddc57cf7e7d88fece45369451aa68dbd18960099e68862f45efebbc12ef7f7246952d3756af5ee55d3143c1c3d2232a1252161cde509c211528af126f2d864f755eef10eacfcae6b02d8a5947710f0f97f0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010500e4e56b577e1ca493ec68c2764eb5b1daaa3d874f5f1f05af0cdf521b6686031cdfe278845fdeff4077e0197232dc5d960ef233769e963becf20f40aefbd6021075db98ac12bb1492bc007662803e9efe93a8b27cf2378ae59949c10e9e5a331f2fc089c39bcc094f00825c37fcc6d5ccbe462b70860bb926b819d780e4b87c000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af98bb30d5de44b9c0354ffc828a9d6a993f4695a79835391639ad5888ab3646be66085dd12427f0dc9150924e7459f81b37c5b216d7a242a5f091e1076d7ca7f9f54a09d5bf9a6bc272e314b18b46057713e68d272e118eb0257059baa675e936f437a000d76cf7e79f9bdcb3c59e1cbc125d906b626ac4e6d1fdc05137caf39c66d2b45318e3e69911f9bfec7fcff3f1d9e084ed02645b2236bd6df1256989617b944c82319678b4aa1f92f752c1f59fec21f05cccb157c4ee62d4dd15b67e88bc2e823e9b90dcdfee4cc319d5abae1e10cef25f1c7bda1bebba4d0f9dd8b1ea32efc1b7a322cba321a3a6f04384ffed9cfda390ea82e28e819a205c6b3b448d6f3cd46b57794fcbe790b1835dad4ca47e2090c058b2dfb564302d1d5696ea3956ecdd75d559aca39e95ebac2864728775046cdf7d63140ab721f9664531b8d65b9c570b246cfdf121efd9696f304f34449e9cd1658551556a2ff6378c6d1f2efe44313bccaabcf1b654f1603ada46bbdc3d184e4a05612e2e36930c101c106a01344a25cdfb9870c33f8e525e1f762b75365fb72f1f637ff9f256b36282e7a4fd1968b23a2e683277557aede308bf9cf4fdc19fc276560ff5fae6f0f2cf000000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010c8cb6d667f15f7f006f928c3636b9f4bd543797617c3e11763a8f9967791a4d031cfb71d4ab57ff8d39043cc832a40ba5f9fba2dc8eae4cf2b7acce31916a6cf62ae3e424dd5082efde9a169ffc03f8a19baa6c7b10e7bfc170f875a059649e9f02243441423124b66de4b174298df038adf56a9440482dcab2e66582efb88c60000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3a7c9d1c78b6e469f477f009050045739a52d9c658d0db7e9da3ac90f323c12b03095d2712e89127e34c11e6a412450269a4318a15ec02c5678e5ee4566f16e66556034c6a277df9ee557d248682a8e7c69b1a40f046310fc0957fee10be098a72aa1d0ff852ea679c62296eb792f9aa4f62ddeced1f7d33797eac1325a75dad16d3bd3ac3f04ee937beaa90001d1ef9567cf69c40cde2b408ab2b23bc34de56239282ed865217e07739f8a4be61582f940f5534c709eb8f6b816de30dd31938d91c2e6022178889cea1a55851e89c91ac34cd04e58a6649497f590822e20c690735ff3fe26f038dd6ca6f0eeff7e32f2508ef22d0c997f4e135db50eec2ba745a66f6233fbb552885d57181b24f1b2227e1cceb5bb15afb34e7fc2d6cb646166838745f54859c6385f5e25c4777275d3b788197a63d39787b2a52575763adfda8c17eeab8069ded56993a4a6b368755ac1bf46b7d431cec20b2d74cbd192b8e1d827d6de2ddceb9de1fcfa1b48c3cffa6e21c29f3a40a2bb1931e75e180e48f98e8eb65c00fd581a3fd4bfa7b5d580f7bdda5983bd638bf136600863641644707bb59b364e2322b700b2f8b6719769c5ef094d2632e79cf7d0d0e9709dab280000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300122b7d45070149c9f3fbc600fd5907337b20135f1c7eead45495654db8ebc3609031d1e100e3f292d5bedc107775c208df2e1d981d41fe79c6e77df201282c72d480a0814db5888d515400b16cfeb57a2a6a0d1580010fb8f280a97c187ba03635a0a43d331e81421f3ca5cedfa4f83c13afd766ff3761d467961821b8cb0fdaddf0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b55a51975f1d7f578de6250ad25fc935923ba55e71b9aa9f8d085705aab404956f2dcc581eea8aed47fe7656aa5ee46b3c6d22f539c657f0b51a91636654d9c1aefbbd861b4436853bb29c69a2b6bb5ef37a35fd4ef00aed179902317d9b5b438e0100f3d6c95cb391f5035c6d900d0f981068b8a9e7c966d96a9d86ede29da26404088b69384951feb2765c12744dbc762ac031b21d13edbef9520eb92b68ae9e4236d9e029c47e15d6e472625b521041aae0186a731518d2fb2184ab91032eccb0ec1a746efcfcd8ac6fec7ba8ff76c631495df799429c107a6ab1bfebf0ed24f49217161228ebcb242abb267b34312622bdf0d9755d1e28c72554175c284979d7f6a34f856c8825c7813f4e51fc2f9d9bac95a3e917f1cc9069f56c304ad81980b6062df0952d41a8ff83ef758baf6922cf69d2bcc81df623a90a71f7d94d649d70fc0dc8efbc79376cdd2620e23d922f07932afe412cc1b7f9026dcfb1525a2f0103f4dc7868d068beaa2d7f5c8677ebcd2a819b11722fc7c02a1772fedb93a6b2a6f61b71abc13dd5bc5e071f19e47107793954c7c69d903e67c4b139c8b7351d4f11c5ee76716227f3963ee54518ecdad1658ec25b8b007c2314ac1d20000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300104179853414cbfda7a60a0f8867b0077932f68349f8273524b4c550cb9870bbd031f2c099bad8fbcc7456bcd4e0ddba54da3b25808c91aa828e82dc57c83ade32b07de7ad10d35762133445a2cdbf50ff6dffdb684f8ca4a4385ab791f8db7c5111eeece30cb3210eb6b55ece38ef999bde86b6b75c9565f245cec7631ee50b62b000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b05143cf11b7146b925c7e2ec6f4d55a0fd232be72fdf8026ed72c62a273e41c1ce1961856b55f5e20fcf19d66440adc38204475b912ea89829ee7dc694e8a66403aef09958cdaa1b1f65ffe93cc63f8eeda5df2885f77a47c9220f3bc0bd967706c67fe54de65e3d13a8e7bd0b26d986c613a4e49b6d717eba0a07fc2624345074cc98e2e353309ab12af63436e36b62c8633c77af85ef0d2590d07d8e464bfe3e3f7fe18df6d23063f4b7ca3b69949cf48aaa4de853cc0c76397ba3a50a2392e340c5c60054c10a9e197055967539752f24fe34282c8978a71238b2c664f3a83dc84ea40ea2d5b994316bd7394d63d9c239231dd05199ab96c3656b2c4e1b82d8e765a96d5923422ab58846703bdcb02fba47497ac672d1e8121429421f0681e9cf17010a2397f81e0c8e3be4a09eb0d2cdc96c5bfcc8ad2feb1df5d4675b96a08b0e5b8aa9a93bf13c6a47638f6e3f78b96c75efe07eb3addb9d4f24751229266f3bc85bb9f916ffa47a517dd6ce303b5cbddade2d36c53ff3b40150d7bdc635f6e42b259a2bca4b42d0b8bb13114d45d7fa0689661611050548f9b7e3e1f043f7013199f2c901b88c96c2bea672724b36f49e63563bac486e06dd040970c0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001305e7101e15852fddbfc7461564392f6f6ede88edfa37854c02df587a41c3be70320b83c5b8488fc560d0fa18ec893f2827b8260839ad2554e255c74a0c057b3a20e8ed8aac3dbf317c8586e824e12d526717ca669977144adfb4c4101084ff84909f3121481b6657c952e91dc01128ea730d2530a935f534443c2622dd3e216ee000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000826aa475551f74327344aeb7964ba10cbd4337dea9817561106504498efd2796c29190af74e0c589cef766ccbc42bb06ae9d362e3bb20b69f130a55052074987e729cd2ee544d646e4cceaab73ae28f707d32996443dce406996204a585972d336b3660f4b5906ea2b9d151f8e814260521950e14ab412c60b01ee0b417e33a88defea65f268d6fc6c80b7217b696cf7e74ce0773ab913fe8c1b12d40a0a0e81a52734b72886bfba0b9590d49a560a844c0a595f7dbba765d46139698e1ce923478fb486b7d5a1d6719782993d1b49d81688d33f35fd71a0969554f44c270adeca970050b7a9c8cd6145b4320412ae039a6fae343468a85ae7b0d863dc5dff93196d2e8a512822d8a2ce42458896d71285b4a939ecb6601fc51b93456042261b8b5a5e92b8d4fc6f55b51fce78f79ef34ddc26fbebb86b7ae3f7df2df4c5c069550931f4170a38f62a59eb50c2b5b6db0ab70da8f2b0c6873c9f3d0335861fdc7af1ecbf2582fc25f79b15d174bef7d1b1f7f73e062a893d8c8d180adf2208773089a5009c6e96208a83dc20d7f95db66e096b7987ef052c5b159e7177ceb8401691892151ad881faca402da9ef57039b8bb49b23dc18fa0de0870c1416c25820000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001082e6348ea24acca6b0de6150c2a2cafe99d12b3f2dca1e53e25652abe51bd1203210f39142688a89fb7042fb846d449071c909ce400499dd8708585483167a2f20e3dba536fabbbf7484aff4759ce2240318de13bc68e17b22fa8e40764bdd2681bd1211a51a240dbbc17bd58819bc3a195b61047f98d44c4411aabc8bc171f2500000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006d1c803bf562579ef9de5745ebcc5bec617f9454b149af207834cf34b934366b112d2c92730d236c4bbe56563c3345ce607edb3521511e94e61ad905743c1f5dd30fed1a2f768470330eb602ee1fd89236ecb2c3ed0dd0190eba2608965ff56f57f51de1fe08f543be1f06cd4bdf53a474aafdc305a8a6126aba631c7364ea0aa235243ec0d1483a7636aabee3f53ae8810c36a4afcc9c69ca7048a5df65a083daa038be3466cd6eea485fc4398498830c1fa3947d9a313694687d454b619bb6a935198990d2f03ad3e96c5b1df5c2335158c4907a1754122105b546907b72d261a8b0ed928ab3d92f93413829a706193dccdb399da3aaa25b76153b615fcfca6a37ea9e7687e5274d94789e35fb32dad6c21199d7717a8428311efcdc0b4f7b579fcf5d673d3eb53fd230be1555f39867109ffde71601f3b01886509ea99dc9e21d8fe5b268fb2cd2ea1ade6933cbab2228dbfe1a36e00809b7966cd0ea13e305989a1e913487b2ee8ea096f0c0120991a40c5fd9100791f53a0c0eb2e6fd06c3e03ec250cd6dc0858fc475c19a0cdb7b585d5454fd203528aedb4b3ac084fabe955699040749477078c8b9a1fa8f86599a4bba8ce1536ae69e9924ad073ad0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012d060fb3b82f2d9442ef3b5a40a04d29323a3e37719fcc6e12d9c42be4d8a06103219020f07f5b5ddcb82f2b5a0e2199c3c27ee21ab3b5e3a5819f8f079cb770cd2fdd395a7f9ed0e8a815e66f76b4578688886245b5feff2d2d9ba19dcce5463d248c4f423ca10c6966db5b648f266d3a87b91099646e2464952183af840bdf7f00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096a18c0787c5b10fd702f05afd10222e78e4c0a1ddb265688919c676b0cc6288989bc46921411b17902616c6458a7a15b8d94add3926339e78c7e19693ad66166fe5469507db63a2cd4b9422b88fa8d409a1e339a98eb4b10d261f735d713d8b2876cabd88e21be69f093229a5a741e55eed17b731254aadd8b8969789d03e68c4e6a250b292cf7ca2f7d6b6bf861e36b4b11831e50b311a1ed9dd9547b34d658ebd9b6246de0dd682e1d10bf53371bcd091111d5e9f426b2e78ff752b95eef15499b221e4c76d4afc0d005f618c302cdc0fa2e2837921d98b711b18959f83f9ef952cc8887eef05812f9f4928734413bcb651c56085fc1656584bd5011038922d7b4ca5b261d978bd94bc9148e6d01e0906e8e8674ea23f17eee2cff08557dba328c498122dfd3f7bea2ba59f9c6272b3886b2dbb28b8e2f2c4c5d0962bc210c4ff437587ce9abf8535887725f7cbf8335c3b641b660664527c5a27c72b405caeb18b28179ad71d540d44d59424b470c08efa5e31d0b7a880f5140d5d2ed7e3a0ed53e5abef142b2c5e18df4dd039d0e8a0d2b022f93180c776e83a8c9959f1d3c683901044c3e6a4064cb6cb0afdcc511c7245792fd0c38119183c88886c140000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010502f879ee7a2a08231e76804f57165a8de29b9d239efa7ea8e8a361f4eb9c2503227c499f6cf235484bc59efa8e31532b242d4fb3315f031bb4d51df2de771d9e14e453c0a97dc7679a0cf1fd03ef52f1335b76f9de83c6340e1fe0c9d047d39917bdee24145e5eb42c8a9697673912ee8ec21c736daded48f274b1f7c213021c00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bc1e9d030b286f2b30aa6882c6388dab07708fd3a9d02fb6855620c0f2f8213875891bfe244a2184ddc6aff930baacb2f1634ac7145da6ba25ee1c9fff8e8016d1d5331e358a6cc7f1524f5da06b2f14730f3d67760032e107a9e6fc0e397a88875fb3cdc8eec598c93711c5f9a0864aee97d6b47469792ed8a687c8c79c1997d70e423615de99ed7a8b379fcbf7577a132a60936e46464660b8022d7e82d6ce49234e7a8ee907d040fe0984d63b7abfef643e246a8074d4dfda583b077d18062aad8d4b9e658f5914133ff2b2825d3267610d284fbb00372136fae0af07fcfc1035c101a5ae6653ecffaadf03c1c6c3a40174ffbe1aae52fa421c152930ef0d72c7a27a13b1c827b6b50f725c9b6552ab9fc3b6a3792f809dc768305e03c1be03990950454613bb43e3343c4505f41fe937628b6b93c5d60c0ccb90903b06643698d23ba42b95f00e601dea85a2a17ec423e4d3d4f20e585c7d6345a3fd79557b1bb77440a2747cf622c9bd83d71c2116c97a79e54fcf5478c04c9e760a2254b4e410b6681772b75867464f83348e1d7e4a3b9d89f55251ec97b2cee9d4a28321be353cf62b392540b88ac58e1c9c6518bb6c5e1c8b17be79248e2b735fe00000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300129fc98d6741384d1c1cf4ced415379bb9eb62f31b3e1f2eb51041363ff80eb8d03227f95c02b34930d4628371a42da54da17a1ddd841ac4b61f3b45c1623cdb36605f4d204bcdd1248687c0aef405d4dc949add735d6a311a5dd05d23477d69cee2be7f83487f16d6796fcb51a1189116e712a58a2862a103b5662508c05b944b90000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cec27c0b954b1cdcf9c6a657477adf8626c76bd3a73caa502b6c7f4f79bffea908f03758e0e570c5ad5ae20732948f521f8d19ac11d7eee969a4e97103cd0e3aa3fc9233e45f5f80a35ba1ff8285858640f39fa2bd5189d436b279cb75b937843967e771afe42053920a6e9bc37006e296aad65a8a7e175eb0654079241f5196860a5d6ecd0163780dfe6a9b19f12a4baab9a6786e8545780afd5e3e4772e1720de4f7044022140e3ffc53ba54a4cd29456664d090ea49de9ac242e8fa18cea6fe1027d9caf7fb75f0985cbefa0997b7660d8881d33adc42f3312240b6a0158a3d29c98256b12167aa0bc05581f762d0ae535de8681141f5466a86d416f32d0a3642e7dc6c987dd14cfd85785fbe77d2188e95916ed31d1f15a742dd1f0dd2f29d25fed4be06b0fe942cb7b7546d7953b16d49bb4e554f4a32deb8d2a2a1d87bc869cbf53ef8811ec21788c18474bf4550672dad0fb222c84dfd9f7f019c6b0d8d8e0ae839f48f63c407567dbbb720ee15a942a3c12fc9904679ee50b535fa26d8140fec4c0646158dc009ee4876b5c62aa213801692d9f4fd934a2df4b5e27fe6d64eebb6c64716bbe8dad5498fa3ad9990b1f52a67de9f0bd6128a9c49eae0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011f82243d68107b435dfbdaded2cf26d0e222252d18a09738017b663845bc06c70325ec6b721607215f676e4f02434c926e2dcbc25d66f1eff5886011b0986fb1f92a6ceb754327fc53f3b97f5ba766ba1d5165fcf4b8368fd49dbabc9ac2bb617300c28b1b1aa8894003d0fa639a9017ca44af90bb6b275222c27ef028d2e73c4900000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023a9693c3ad22dd01501f0732ce8c079c1c76980ea112588a871071c9e72d71754381c6aad97e6e660219ca6bc1d61ee59f5ed602a040bd142c9a9ef3135bd7053db1efcad79238ea475409401c026c5b08f34361cdcd55efb72ae953596848970685fdbca4ec9248dc1ed8ba9a0425b1730c83243161f28e22c7fe5b1b472655708bfdc5847bf068c2707fb537aba76a89b4be7a1d32d4ab3243ef1f38efaf271b4d671ea4889dcf35ff0b84645b20ba3301556061abb8071e2e4520d72a2bed1826ae37f2a2257047fba9586543fe3a63d85d41493c5fa0c6f92cddc54ea1bd547ea2b171d9391413d537008c8904bf3c4618bcc38ef0ca81d90cfe7d89cd8c99b8ab64ef3459c6c02bcbe4d790bee30140e21e9134125750677d7755acec9d6e489e7a18829cb35994712ef4500b8ad9b33e1fbb976b3f00bab6db4852223df5192092c4e7118c576d9cffe50879d6057cb4bfb3938f0e038b69a2e97c3be99a1333420241b2aa14fa4dd5d962f73063644a70db03ccff27f860691203547938e0da0b8a9b1d207aab4883b484cb8cdefabbdb87318732e714890b7d545d9647640ce2ca898506c8b84ffad0f9d0abf66329b665082a7d50d4a3268d66c2e0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300129f1a6fd8e5a719b5b26ca54a53314cf59b1a197d9a7d676e8d43777916b66180326e904d2087e45b384dcea5a485d21d639188760c476f27ff882fd8c065c602217154163ee354ed56fbb5c94242e0a5ef00dfee7b88dbc45b839598537b7c59f2d283ea01d3a1d90f5bea17ba576a74ecca07f30e3647c7710a04bfbb1cea880000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000159755e47e94914dc37aa976e054a06c94f55bfa1d08236c8e5f7d2efc60fe15c88faede73ea9bcde79f2e22f4d24cb8576eaa4c825b1de680fce8caf70fe9df0538ad5233ff9f2af9af77a09d252392b7fb2b98117005d0d55383305a0eef93c3da08daf79aa138949120f62ed6b9c64b8c8f19729ca07354b3faa35242b8c597df9ffcf34d3f15d57ba6d126dee7a21bd40e31cbda0cb4be5eb209fbba659477932dde794392190ecccab0595da042cb48c77877c0a5c76e0137f2647169881aab56cfe97cf9e0d722408db21e3a11277249d24e93bd043f5bcd77dfbf4c82f893279c01ee0d2b5c4031b18b2ec2ebee90a2be747157bebda5aab100b37be902bd62a91d6e6cc64ab7446521086c93576dc9202c3fd6dca53c2229d162acf36b72f591cdb468fce8c3c7b199295496f35c8980ffb57527e924a3caafdde38f9117e5145ce505bbfaaf0f9fd6d2ded298a1042c1273b77d1876a71414ba62a339506593d351f1c296ea5c03a06067b2541c2218dced07d2015e8f00898803e0c65f38e7e05a78bb2d3fe66a032e049033512d1689054ada515302c4701875d0893e853a006e283dd729a701225cccff8b5dc33ceaa70321466fca2288e0507a0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010c96b442dc8475fcf786ae76ebe105e0f33c17573419a6930f5c0e71d624cba6032759f89690e4ea77f6aa58ca336febbe12ed0fd197cd99103fd5f452923106c801ef29b8df4d298a6d0c401bb7d559499753257644677962fc6444817d7b3ee80e249fc8f7c050a7651c5bc24ca6e3d9e31e8a3cd5cc336264c93648e127f7a5000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2c1b47571aeaaea592a97ac84c9107b8dd6d59a6bfbb623962f06a8e2d5ac455bfbdc7391628ba2da324fb0b6272cf33416fe013fb09e0c83b9d855f53ee970f2cd3dc0ea146593e2c0364d3a45110a93ded76c4708dc3ba7fb08ae59fe2f5b4c12b00fbba9b32846570faed22e0a0dbd88d84a441d59ab2699d4a2d064634abebb578ed80bfad884357f0d3723895b65b8a099aa0360ad5806d327c1e8da421f440cfb3119fadae9f3f9ee75cf3f7c0c495e7aaa411463129bd1893bfed7e22a14def377a9aa1ff9eb9f0d3821d6563b89c8e8b90e4619d7134302ccf982d48ad4512155b188356b3e0df246e051ec6f757f29e80f7f72cf1e6e4212655a22747ae49618ec388bf137d14ed2d46f57b70ae64528db39bc82f190775d405c748df3d246a0ca46639207bf35fabfd027daf3cfddb646b0cf679ab93f1e7ab4aa61a52f0af9f4203bb6007c0c351a5c45be7555f643fb5b3b0ea7b7e66fff0ad551fc2ac67873d87efdfc598c2eb88a11c8bf0bcbf80262090ab594256298ca5d71badf7b29f4b6c790d6bf7932f570369bd22671b0b0cbc542ab8b1ec9dbfc2c05ddb5173ef83a88e1535641cf13344c86e188f8da9fd7d90fa72c5f30679fe50000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300104c48d3c933ee90d307a7ddc8642a137eb4f131f9727cbb1c3bfdbec3cf1616d032b2818725f0f2c58bdb7db28b0186e93a646fa42e9a6756360fceedbd8177f4516a8667a98ae319862e96225973d6c9bb30f5c104d74e2592c667ce906a0483023f54ec0d69906ee56ef7b3977c54171a1ec661090cc961161c16f9658d16ca40000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d3d071168a3e1cd6768e8b16bd476f6abcae6fddd09af2e6071d415b08d48bed5fb8b55fdb47cde85ed83432837453e81b1422c66c4d0d36e76e3370ed3d95086667e919ab3a6d0aa9abd3ea809df057760f8ca3e541ffa45dc44f2fea4e053afaca840e3e7a33908deaa22697c7e13e6efb436046961de1f25b0b457e5ca5cb18eb994ef7b772f4ba81aadacefe03b9befad8ac4577eea23ee5141ce053ab34e54821bc571e3abccf4bc96ede573f7b71e319ec207993910f8b8ba15e2591bc9451f9ee2bd6184b4eba4cf8eedeb78424e70f9d034289a00074bf6b8deee1c3a0a75a18c38052aa6d9c737ac556c4a3108a54a40054eedfb3a06ecbe45cd4c93a4ac3a5a5183970ec74c95bef62e51aa644ae9a8d4e4aabe61ed8bbb63e7dbe18146b271eb9b00b88bdae587ce653b86dfca8af04a8c2b8a918981a2375e01887de3b4404aeb278fe36bd8f01e0959974e8a46f574456031fdd8e1394316320b802d791de2cac162bf21534d6d229f8db92261c9a623050d43af155c927907f3ce25bb9d70f76f0cfcb64022438a79a2efbf41b85ec66fedd8ac13e608491e80e6c221a78bf74927539751a0d3583b20fc6cdc5601829baf15ec56d93c100a0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010bd53fd9ba9c4a4bd6ef72c91f9f3051cad39195251bb40f45cd3e260a8bd83f032c07435122b545256075d33b72c259a93163269f73a110b5751a50cfb892684615c5e27dbf2348f3076b78011719ae5124a8b1acd94604d1b1bf905d38047de92cbb38b7ddce5c5c3dadb0edb592068a64c4312bbc4d91f1c33a9ca8878cb31e0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d20821ddc4ee36a730d52e1f2ac31e1c204f320d307953f97f489443f668ae25cba1e9ea47cda00da53d82b933a497da8242007737a22b5c563d44e8a8129ecf9e641adb3b4650ec0a31c05e9e6512e3ca2556389d7e4cc8913085804f0dcfbd8a521c1fcfa8b014d7e341382f98e7486d18b47625a0105f354dcf50764c885b90a1f151bfd36b4c069bebafb0d8c1fe16aafa2ed29dede87e77d01a42b3c0b836661e1bb0c3d169ef9b6d7d6265ab5fff8c303f7ade5fb8cf6c784b281e88916eb0186b555286169b5e52bb7a00b2588fdf907f96b836fdc566226770525ce3890e8680b8bca8297ecac52c223e6b2367437d0084423d341f0c746f0a7e0ec1cf2662ed5f4737e74c904febde685e1f33d7f5020728cf1b8499e90fe4e8d51e7ef746b3b268e26e4e026a3872740bae5d4f5ab3e5e154f682a0547c85873b6769e39e16d8b40d0675de834b4274e5f8779c0a31094c683d353a44a2b1c3386a69604aadd520891c94c43dfb8486f992959f0c4f272ac40cdaab194776248ae49f15fe2851798aa3001620005ce72d53a4b44e632654b6010d43929a50146aaa315bb08a8e81b54971db6d9fed980df517bf376942f772b411085dd541586c20000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012628a4085efd49998fd09090ec5ae866d31fa2589f955597bf80d71b7e70522c032ce1077f79b1fb59b3e36692ed749d1dfcc528e009347e898050b98f6ce6541609729bbaa14d4549a04b60c4b72e04ef7cb6e37077ff94ab6c927ab247256c6e1940d34d11ea5e8eb216a084a039ea12974d8bf1f3ec42a1c9a0b24200d25bc50000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009924d26be953e029d3e36ff1bb3444210a64423f0b3e381eac0ce2aa56ab2a631180d0f97ca22e67fc2119243e319d1159c68042033775308027d4edac1bc0fe5060803ab58e6fe9972f8ed41f25a22f2ae77f099fd2a0caa8bfd57bc2ab4303cf7aa8e8dfcbd163daecca1004d5f41a63741126b8d1632eacddb3e53691e299c972ee404f88187994517b6018f3c6ad6c275612bdb873cd447ab01bd3ceff82f04e04a3ec05793fb566e6de6caac62161bc840faa36d6320458edcc0a33761a5db6014e7dfa7abca7fd7942f83bcbe80d1efa32a384e6d9f1a86dbf508ce61f6e65edafc9b0046d7fcae4985bce7b88795c0aae397d0641607793ae8a0cd4e58aee822c3c8a35f7eed557a6cec9c9b9f0ddde8b44cc4faf4daa609868814e6122b9f29e5d84ff2cf2c407dca8c2aa76f9608c2b4b4f4c1706a2d0baada058d901b5ff8ba9b462f020dd0e6e1f35477194c27878d526fe1098db33485919eaee23bc5ae3da0c0215074e5a305c3ca566e05d0d70b7fbbd28e8dd69a88e3dbfa8bf001cb7cec793ce381f7a0f21d0bccbe641be2a28d825ab9cc8aa5211a6b540d11b7f54fb5a61604d6564caa4b8dc3aa782ad70b048996a1d898d86fa6000ca0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011d7ae415f1d4a4438b8e754ef09c7ba3e4bd019283d29a1fffb07a2582f74263032d41cd6023d498782b3c0d223dd4c6a03749f8398bdedac3e672dc0eea3303e71365a8f83bc1bdb3a192ee3ffd99ccb88ef152ed7f81e40458bb813070dd56c31e4986aa549bb84c65d6100c439689b8bfab1c609750a64e15b6f52b2716163400000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020bbad95b1bffa5855c05fb9260482c3330f841555ad6dad295ad5e7845f73d3e2d510633b15934124686e2a80bb3eb652ed8b2f3f4009fc0c2affefe1ec1edcc2a1b313b64014f61c1185714baabf7049d4714b934574c102f3902a063d5f3d35d27a9076a2dcc9d0495dedf78dc196904e5757f4b51716842a2e87c7041f555bf5e022388b11d24687e8bfd59167576cef9c152f98bfd7b4311ffa9005170b26a028c914ab01dc53994f0f9b8c7aacbfc872c0006db9ce900b086f1ef8cb781966014b34efc81e4f3c0923ae7f276eecd560350273c8b6b450e485cc9515191c80083c289763b5b35d97f3c428483a447ca194c18dab7b120da72003017ebcd373d1d837359232c85e46f962bf6f12fdb0b6ff8388eeaa2ed5c2aeef0451f5c9c5b1c100001613d1c9c62aafd56096d610ada74ee316a7faf222ba837ae4aae349122220c2e3e6bb700d81a857eec9e55a2e3390d0f2576032f8e85f5230f6e9ee3f7072f62fdbd2cbe3efe9f9068e7d0a61bffbfcd17dfd536f2b178d57d0899e8b85116fa8d91cf10627e91c403d86ae403dea59b3545fd4c60fa6018781410de0203bc9dc21751c5fedf4f3209fc484edc3ea0110c16bf148b00c9989100000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010bde42d58a0bbe2dda0c30637cf91237efd83f787142a5a6c09bdd8acec5883e032d5421bd246e67fb3ff35c785d87cb30a201337f60257b4946147765c6ecafff10c68e69fa45f5ee55621f009a943b5bea5ca1fb90df974d7c1500779e49da6e109a8b5e19d2728af65682c3b152ae256a6846586020fb431b6a99060d1957c90000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e9cbbb9f44c818b0abb66c3b42782039e08f40d8a2037c17a8d2cdc330dd14b92e67ce2c5835bca5071f279f3c5337878842c19d0646befd5785c6f64970e0cef7e61f2d1c85430688b2b84efedeadb4da248a34a1e1976d1630fc5eab2f891a9c3a483435888db31ddea2ca1b4ca3d2e23cb84789fece91f35116171815ff42e596fa04a10326302c1cc0e58b619609700ad742b1323bb7d1527adf2c3da24cf05246bc4fff72d493062682ae6262831ff84afbe91f5471680d033b9c45fe59d258c4d65402425cce1be8864e3a3b570ae645a7c9795da3672d9a58b9e9916ecd106776e7e521f147b952a68741139c528497ed209b32e5c572a0785c79f717f3f9378aa5c3f6e8b11bd27dc4f967f0cf9b5b8b01334cf504f433355a925753cd67a6b96db460244ad6ace5036870f84575250276904399addc7b8fb1eb1c80f6aeee8a5c1cc058c21222f18d4162284bdd0cedb6713c85dbc5cd5362fd3d2f982918c99b0df1358283c3a7d1dd9c133a817a9f7ebda10f6bcd14c478b52189c95100a5fc5a6fae57e317b02233edc39e844e01dcf4689274c6596593c0cc52eae511a1ba6742318dd5fa5f71e7ace34a84b499d33ecb74bd93ebb9e95ba0d0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011834e2bf3475d9aab21c68d9254cce6c232c7fd0784943aeb1c0719d82f86bc8032d8bf82c0525afa5cddf5af47c7c990a93c15dea7439f9bd59a16bbf9180b9a222250bee97cf00c7ee8cf5bc7a06c583e80e1621b795385e93f0d062f09363eb2e732fc2f43ac8867a3a07b00dabcbfb57928529560bd9af255ccabc3a0b302d0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002dac1fc1d261e5d47db4bb63576eb551c2ada043bff897d20842aec2d89efa71ff6fba7248ff68edae429625850941d7926b8cbf0764a022bc7d8aa3a4437eb07cbae1513bc257848f71fff823cec405ad9a87b5d1b72eb00c49bfcafbe48022a5a058debb25b8dd101dc4fd7625de8da01a108ff4e3aac97e4f6b1e8546fb9948349ecb76322e7a42a80c705694a5109ab4d5e0d3f8c424f2ce47d1887e331e13f19b2e647c0ef4ec6b39cac770a6923da9917db617f7a7418cb834f8a6ab968fa8d10fef8cf4aafdba5bced445d785f0af26f377650aa5499ee32d78b4a5af0eee5af9f7c46bbb5ce2962b4214779ec491d77d6e932d5d39c7bcbb7f09aacabc42ad86b55ed7b0c85c607f435ad9f9894d8f036243c1a89c98686944b77cff9496d1571544cdfe5d06130e048fc11ee08cf445c9db0e49a8bff6a3ae921525678c8209b935054f1a8918fe55ca425b904ac4005da9a80c884ce9443611a0c36944fc58b41a94488f9650782f58ff3469c4163c8be8d1d0810bdd0216903730843a59ceb034fcb6fd6843ef444d72d2fdee600e813d1826b52e1c4e8e612f4246c94f2fa0dd7f45d6f129d8aacaa1db50604a9e70a75f965a2d761767a603a30000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300100fddd5994a8b1f4b8849fe2f068042d1986aead02524a257639328b1e344400032e4d18c4db866814c91614b300626c58c32ee2f2f12a9b0975a71f8f9a0a3be420b7d07969b5990905126728b77e0885b41530003b2c27c5cbc35ec370dea8380b866a2ab8f9d29c761c085d50ad38e02158115a781db91998f7c134021b443b0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d0da0c8f247f58ce22f74d035959653081bf22c270fb4dcedab0752ba237f9ed1d9f4c628ae69f7694b180b491fdc84132077b22f81d3093b5b413508779df05f53815725367711a110cc4368884565f6652192fd223b44d0996caba136a21a70d344c897bb7baa5986bf37f6cb7cdf0467b647d580bdad5a9d866f1e5e3466558f02e2512dedf4b5e2b91579e3944b2e5f377371c2c57205c861ed6e85e2407555b55585d72ed2840b257892797398ffc3ada0af17787b1e662c440c54b2b3b2cce23ac6d31d9a3ae12d4ce0c1a724d4b2f786643eafe48f2b7597834bba1603a1d4c71aa00ef89e77b0c924616d0699e5a8e28044cf3b3d5e4328f5814aa17c84753649d45b8df1fa095f3fe49ee194a1a34f3cdee94dee2ffdd512e78bae5c53b17e2e20eceb2108a5f9bf170655fa8cd9715de9816a0dfe088dff8b01bd539df9e32bde0de57b1d7850c63bd48515263b03e20e143d632bf78e2c638bea355c3c9c638a2fba72637635cfc95823086b5ab2d94f15cb7b961d44551d63f5c8452d8d6a6e42ad4bb2625da12a3d3a30611779f25757a48fc9bc6b58a65e4d3bd57d88729e245c7b69ae2bffd358bd9a6dd9f0960f04feec7b7d97ec56b37a00000004000000000000000400000000", + "1c3837c2fd6ed3b00d0add984b599693e59a92965243e004450e84398a1b8ef20000000e000000000000000000000000000000000000000000000000000000000000002400c4309c2c162da46da5b36613a4a7bd2e3dae18eb7a5612e929cbbc73cd8c5200089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000e00748bc0c36dba2edd185a2542e8f54ab1be4ceeaea1791ab0d334a88b854f16f00004b00250189f7033d300d126bca88a8942ecf5c320d59ab354a0c3df41e977339087b00004b802bb7f2372436ecbb2ebd34734a7fbce7e41962fc16f42b0c006b3b074082abe000004b800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000070dbdaa8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad2ec2c0268917bec93cf395d14dc7e81da2be7cca9ce70ed9e63178c4c5a43c732cbde30000000e0000002400000000000000000000000000000000000000000000000000000000000bebf730011b4ee943ba8f66b749f77ea3339eb9c4a6598ca0906ae73fcf7b5ca6df4615f603018974a45ff90670452bd971543c4951ba011da25b88fb2bd4e9bd755c1547d104687fc049c5b5e53b8156f0552f65ffa4a66171585159ce9062d4a256ca5492185c5df343d856e7c0ffb7aa61c0d2187198cb35f49c44baccb5e263dc7b14c1000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105df1851a77de9d2b253b74e6410f82338c376d5b18c8fc5237e0a7a0558be428a35efadfc7a7aafa344b38f892c876b5e2264705f3bc5e7d1a586c9d72a6009f46bc96ed250f57d115bb7c0527feab314d96c10cc0b573c00fe5e5999a694455acd10a78a46cf26b11f8722b0da57a5c26ffdebcf411a15c29097868ae651d62e6d80363675afe03623e528a08129761b6557bcbaad660b1f299044d7214a35ec564bccec4a8ac6a86dd47c1f4129827b82ecd5a43791d1ecae4b7e115f94535e864316f24dd3f38ccab017432f02cb68d88a97f0ac2f94cc742b7076a78ad9cc19308b34fe8928c519a05c264d1f5d11be4f599c702c3b882af10575681d5a7f9d0f80c890543ad545cd06840d989d1aca07805bd1c1ab7a5802da7cc9be8fe7219d41e542373d000509312115e7ab60fd4f5e70feb9f288bb20b4ee62a7664d433fcfdf5512087f07723f60e0935348536b12132dcff9e56d5f6b95c07da6505761aca765bf7eaa53ced852dcb68e52b62fc21eb56ddb3eaf9ba7fe882fa052b69510acfcc84320c36a025f2a91fd69374b2a99f4f6bb57b52763d122aaa4fd2ce0a766c7ce95dd72929e81aaadf6dbb390a88dab89c8943232834a4e1770000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300129c6499f2e10674423eadec798f7b139219532f81281ca52d82a1d79b2d7cb310304675871edc6d87be7180b87f4c01022fb26cac28ab21c1e602cbeec65d6a67f23ca380e8225ad91126211365df943eb0a0de4d83aca3ce3c8e5d0a992d370d60d820d6d3fdf9bf8fa57a9669e71b276c209178eea571ca96db71428f4e5cf2800000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089e17db631cc4fa20d752d1cc35fdf37ec45ef16d6012014d75a1a0ac0e28251969b151919ab6ef050eebac990087af5792d68d83d289b4a69309ca4fc65540f7fd048c48be2e1637fde2b2d462d6e37c046bad034593fb1bffc07bff03003444fb0a430658c1644239c6477157f580ff2853dbb12c45775e2969f7319a7a0a87614d118bc8b8eddef2b72743fd449f7b46b697162f165e09a735c6937edbd100a60f0923fcb1b045ee595d1de8047fe84b17f864dc869ab8e498a7f4b4aca2414c0163d31c6b491ab8530b86cf96e74740a1a20c046c5f90e432302e9eafec642da7327e82874dff62016b5c285771164f4b148d4afff484475ad9d98e35378a3fcd4420956f22ab59c68b7b581d6846fe971ee2d46b5dd51ffb5cc1d2bd28b07ac1659546d11251d87ab7b05983dfa090a91a105601f2d8c1066d770a31e6ea693157790f304c1088b53f737f590daf18784fa204d145ab2347fde7c3e5455cde77e4bbcc57bfcb6a535805501e2ecc98d78516a8a2fcfe9f1ee3f4e16e3f3fbefc674d9e84a26ce03724a70af86bdbe616ce8556e0f2a48802a1bb685053c55ba03f969cf193700e42a2b3e02b412e56478d6ec215ee9ad60368ec9a4d5810000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012ea7b23fde48695a04d68bf996550f15f1b21b462b04b36dd02753d7002a71750305d690d82ce2cc6b682f74ede8a3c45e7dc306fdf7801170b0ac9712c156da77233b576b01b0f32437eaa58a93dbb2676a0070b2d5eccf99c1608037f5baafda0db6dae7b607ea1fa40603f33c969441a38ab8fbe6aa0d8d09d869a52e70a16700000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009948b630d37230191cca001f200aa7cc6b38d84bbcb2ad5660741ad1999b7d946f1f73b010e375f79dce8a5f0a030d5ef8a102e04fd30b64d030e66788c26391020e4a38a371d73d4c5b54ad122db9789276d2235d6f12e2d85c47505356c8acbdaee45f92a75b758df61c69dd2264f6253612279e6ed235629b0c36920ed27f1f79c6a6c1153a249ef35c21290895821b08360370e105fa85a8fb8b3772c2c438e84887a217b5b92b0164e03db45363e584be9d64d39d5439984ba3531994b42af2cc33f32151b03dd459318ff9282e57dbb7a77f3e9846efc66d1d54faca56a77c5ae80826781315626086ac3c43ca9c4820d89e844d373424daa5edd16dcecdb809cb09eb489e03211570bc055017dcf51913d0e2f2d31c0da3bfcb1da62d45aadc70a52307d1d082c6d064bd03e0f79d95d08d60ab43fbb4899b17b08f03649abc3806af39476883340e9e786e7927ecfee8c637bfa316ecb16e3b31bd03dab115db1ddb1b05923866de783eec82b63d94283ee79b0a0d072ab7aee5d8988ebe90c469ad98fe0111d85d8f34d8b67dac994e1cb668b1ebee26e00e990086b901f87accd670ab7cff410e6a8fb9807e17cf921c7d8de3ac573a9dd428c3a0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001283b940ccfa9148f15bd6298c41eda971579c698315e6d4dbd069b10431c4a6c0306b5b02ac9d83af6b7aaeac57e82b656c05a0cecc577b7a72da548420788455d099513d00441efec47b1a18be4b924cee80c70a16645904b5d961de7430aa0a30bf7f6767d3624c7a3f5ead2658848af5fa007cd13a99c3bb794ca4fc26361b000000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095f79bdd1bc0d2bd7dbca6b114c5835ffef6785fc5778a723e1c832e6af02ad6aeb176198ff7a93ab90a672f9a4b84facd1b165000446c69479b4566e63397270cecb01ed6b4785e865fa94f1ae8d39e6aed0920115a472f5a310582293e8287f0588a93867b0e09d0abd659b79a3658b8b67940701db16178e0d243607093746423f6a4392699b52166203327b01def1d527bd5ede0521936b454efeb5559df865195294c12dd4d584642d60d4e2e35fb4f75533e9b4f43f14715d02b21eb70ed35a64ec96ef44def5bbc9b40fe0eeb6c51951618cf0ae03e57dd2bf297f22d6d88c0ebf006b84e09a4ab8ef3a2b266210ac44497c7ed72a3215d14d9f3c472e2793541dd1da57ba966d221b776556efb45479587716ed78f90b1922cf97813aae3fe5ea6a5ad5590ffeb7994c2287d9b7024db5c9ba1c4a9c80eec0176f66faeceba509faeeeed7ea7d8f57883af83bcc94f496067abb045a0b09c1b5d68064e6df906ff8b1b5e6503d7168d4d671ad511dd1aa15b7294d7f28629082155a3e6cfa7ae0361e5b67926cd070b1d8a6cd8fda53a2b6f1ed30dd335ab14a9e47e34c5151a558bc8aef576dd3d77dbd9ffca57ec8688e527aa02bc30e76ace4e430000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010fd87b738846a2785e83905a251719410f5b9a7e9fb7c48ef7051a9742f39b3b030a0486538fc8a181787d5d177db5fad8ee74e920232c051a7b68a58423596b300b770ee5f9f13fadae4a8e2d07fc90eefbbbd872bec642fb16f5b7b6953d68ab256219d469c4ea32ac36cb25ade0769fe9752f86d984463745a6ab17af59431400000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022d9482ce70ec140d5b76df8bdbc8cf58e36710fa5b49a84638cc52b9ab04e91729aad290d10050d41166b454a24930c57af6c6adec2c8779dacd56bd56968e3879dcd56f0aa049ffd6fd6b3ec7d1d3ef4a50a5e85285b3fdf1f9eb1f5c2c2c2d5f50c02f84098d52593d9943d0a3c971af2be7b07dd4fabdcb57ebde724a6b0ca595775f9a70f7527f4645e718320da846186a67ccaf6052960f44d428aa778333306282daf73dcdf2f42f21befa6c9f56b11355449e94be46d5f52577388668c88cb5774681bcfc7207e59b9b89af08656e74cec32c070802271342bad6bcf2deb5aa218d87ffbcc2603b6a5b1616daedb06f24d623433afb27aefeb5cecac281a0a0d8b1217ae7008e00a8bbd85e1f9bbe57be4cf6aa046a8bf3103e63052e52a5862141b1f25bbbea0ed2c3ef647a1a9f34677f5672c291f5b18a24187f537f5d3ac47686e88a1d6f14f6f3e2c5703022fb212bb03314b7e29eeb8abb30ef9b5262a788fc8c0929e9bf63464d17456a7f9d57cae7bac4e591e88ad74f489a4bdb0053d362bcf0f85f2d3a3d2717fc737a2574742abce4a5ed2d29ccb17f676400026a199e20ec4faa9b043dc20c2fd69162ee1458e27d26764df78868c9e0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300110a0d1d8fe29d15ee0dac4f8cd1e0290ce9565836f129b3708b3c19e64c96faa030a424114ff74a2fcf94e568e31e1fce6386a267d50c7bf443b129454161af16327f54cf68cd1a456935393da4a80cadc0b9a938b6eb5484e547a56c1680482b20058e294a2359ecadd5b71682c89d9d54f7bacd8a2afb1af7b7d554f3250a046000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000affa69337fd25bdb2c03b005ae1eb8d78a3da48a062c27b5ad98a1dd1f1acbd6992a0d858091d2472eacc56f9b0fd56f5688c2d05f0cf27f0e34878c86db75c02d157c1ff593fadb4b6967a8fbfcb1853eac27e025128218c59a20d3bc82370d1ebdcf4c56ca4eb80ab08ca957cfd8a502245bf63786fcc17fce6dcb5e1b6959685841a1224ab93af4d8e2768a6c715e97969f8edcab5584a8728b427e9aca1aa7fa3b9688ff85ffa166feeee1fa168700d80910da417ac3844b40d66e73aea5fca0c98798c52a7c8aa38478d4b1efc407d79012c07e4990e50e887be2d584f2ccf02fab01ced98228fbb5fc92739a91efb0b090d527c90798f775e54de5998aeecdb57909cdaea88713c35862bbb8e508ccaca430adb6fc66ec72b254e5ad753c5374aaa5a2e585e2df8b01f359837f0d73da02c1bf5539d2f3e50881f260cb24ed6fbb503301853f149e002549eb3638b6d5087dbbaa10df233996660fe7f62ba2b73cf05c05befa5425851a3e172f29e59bb1c67a4a1e0ce03e9007ffc6c87f965e80478adfcd3baf95a00ec0580f204c0672fa86a43a2998c4e8e48f1266ed9a5123d3609b54b748dd90c505eb6f888d72d18386f6486d514e50c1e3abdb0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010076a44252a8094d22995b47b37f0fc5537dd95a314d74ccc4be4e6453f663b0030e7b6225702043b692d7f370d05fb13a033490495d2916daf00674c1d2d9ebdf1fd4565f5db46603e34c207c3b264064eef22e23635096683e6081642c0b27112cc69c74960511d45beacb888402603978eb8ef0caf17f14ef7df3d1470ae1fa0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ab556b7c46b59a66c04e7ce0cb65dfb1ab2d78ceea3993b4513ab832a0a8e233fc19f15cd6c7923d43c09c8dced650741d6465338556c0af1a2b57c56d7a4ad08b5ce875e093f3f873934070321d1e1a5ebb074764caf0ade261bf2adb5296b3943c92e73fade2f2765b190199524e2c6e56e676b56382928b261444d090e60b219bb47bf5d40b01d5ece7b41f3efa790b6d892e250fa878d276eb1b6d6c1a83ec584ffa6ded43fcf939c77610076ba6e82911471570e2fd7abcf8d9c59f1b9bb4cd432441620b72489d7a97d0f11c60f2783fece0c1714ca830e0a63ecffca7145af2f25ae3812641acf4eab717469e070e995eb1d5e201a31a6f4a5944ec66015b11b25c14b7d55beacebc0d39033e54a186c73f8a5ae0d6774fa6f33e7384337ddbf24eb4e67c88a4d87593fccc509a42879aa65760ff48cec1d7d074cbbbf8ac9c6091994b375f9357a779226b3afcda8019b4d2e926ea481d12a7cbffd24df467fa2af1e644723a2f31ae1322ebbe0192b83d02a2dc2022675864a9e90a66092ff7edb867e3ffe2d9550b2d4c9a906d4f6b57c94fa4c1316153047b4519126a0bacba9914f2d310d7bd06bbe3f3012fec72396562844bd716dcddee44a0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300106c966723507186256c2c7cbe2389ee37aacb294e3d4cfc1b52399219374803303107ffd3d55cc966074e76257c0dd58d4d2e99657d5800f64bd85b24e49eac27118593e9a8236900c9a300fbc011b6bf3b0e89e685721eec6a8d1d7cbe87452b722db99ae9e783bca1bb286f0823e82f53db8d240f4f4382befa3fe10adb939820000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002121583e4a5a288941029a975dbbf03cbd3daf2ea479d49408b1d581ff4660b0feff297ca8b2b380f0e8c102b5d4981ecf7b807dd2de8faeef4d3ce881481f3e1315c098d4c123de4f2abde2b20d1f6b7aa51d7a82ddd4ba7ae7f425e74607bd76a5974746fa3f6949e08f9c71b6159f10132ab47cc3da900b6845a0d2d1fb73382f937f24405c72b5ffd39a94df9e7c3c467036798902f2ca56f208dc2a1fc28e768df0f71de26d11a8d3b19d4295933ddd389ba7de33d739a7d77f854d25f800d1b04b06e9d625248e8cb31cf3d295f38176a2b6b548037d0edb4f2e9f708fd79ef2ff0adfbac92cf2505f336328faf5a3dfd20b606cb736f18f3c002bdec4135b892d52a72b8f50473e7f8f716c2a99824a865642d247f4194f8d2a503164afa97dbc545c59fe82c51ea1af97054ca508da501b46edf33193ff1c1d3c1ac4e8c211929c4c5151b668834759d3ee93bbaf37827cf047705cca5868cde1c856662d10d79bd9168b4c4d9e4f6a3a5f45b455fe72c54e6dd1e3a35b8be2a77f2e30a4f7460cc807ceed2c5155d30a417bb384fbf27b2bc07f34585f92d54673d1174dd8167e4a0db98dde7bec84ac84a8f2d84f5414e4c188dcf47289e891d46f0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012b69635137af78c4cc687072795b59e0d4d3070ca75c387de228fb1060546659031129b014909496aa51206266ed02be6c5c4ac351f5620172f3cb3039525999ac1fd30a51cbf69c26c41943849e8fc5821f30c5d3be7dacf30a863cc293a373560c1daa67495d40a6c1a83455600eb261316f8babc09752ccbe28b27f7b9d08b9000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000305767731a3ae391443728527d51f71af7a649dc6a2a479d9983b735aff968d1cdea1ecaf8c2fa8020098f1a52ee859304da2f31792bfb790523ad3ca0d4facd6a3697f62d53a2a27aee759bceeb447037132af2d13f68e97c3cb7124f036a2bf588774925f0a0821371698e06a4aefdebd9027edbc70fc1b3b99b8df6b75812a5b023c87f8ea9b2bd71b0780d97413c6d69b5344deaac9c6f8d7348c28f3d70636c5ac729bbe5f6e0156af61bea6bddb3de94823124ecec7222c22d974eaa2becca1341f7ad40f40cab335e0d1ac0bce065390b37d31540815e5e8030d59bc1bd4a81174a8e78f3c311680aad90b64ac4596a8f48920b97379af6171db427a1e419ca03663f154442a69b58d24cc40af973a84743f2242e11b7940cb28eb8aa8f1bc837b36fd2f3ec37fff2276a54cb0d693baa4fca88cec76c62cf54e624b3ab4a73ae4c7313552786aecae792e45626760ee8d9ffa5e548bb0b101d72b2602128027e005a438da93eb28fc7fc1e3db73d07ac8302ece332a1af4f140e4d2eac8f92d4e20b3c1f130c42a2451becb91e6ea899dfd30628ab0be6023eae5ccb042293c35e4b104739c01663615cd33f75a4a040e9ea16e70aee5f0b815054530000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300114c62993f374c296ecccda8e5804addecd052377893c8292db8386da5da357cd0311bda586ba5b160c4a82e579ddc1529f41bdef1093a754b0fbb8fdb13f3c6cab22b987276799e57d9f287de24d5f15cb68899fdb62ef8c02ba54e7dae0e15a971fb607ba256a408b7df8d2a52851b83c9016375d16b8e91b2f7e4679987a08400000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e7a0e0fe9493167384094d24dd3300ab62299def0603c6c1aa60f7e2053e355c4e9877ab35f701cc5ddbf8d4de671eda245bf43b2e165b9d38c5734cb4b99f9272c870aa2e944268f1db6fd666e8c37157dce40736f66f9e2b9521c557621eb7eb121f32af0b0a4e95f3570e6f3dc6903457ab6b0f75acce2b4cef649b122b64582206e2bfeb9a736852f964f8f4783f7a118411a52c9b36456ebb19644f7816463be9ce5f98371ee695ab3c566601dbf7ed9ead1e942eb74c8eae4d0084c9dc60dac6eba0d172bf118a168779521f511dd6f64a6e943d1bb2f4bec23dcb0882b109d4c1473ebd2944586062172091076c4e8c6a74e705214c7d72f98cbe8d61f65cda879a36f37c055772e7cd7abee935d97b5e97fe4d78dcfb58707afc06b88305ad9172bbb7f190b5d96f2be78deef4b445ab6fda95d86c834ec74b2c4cd40c534d11fd75ca41f3022e1f4e73c273c390ea691a68f38edd3f230245685e58995ed2000e9340a2ca47b58a8b35ac1b846ae4e1355f339d92c1d3d49b277fa8f2c16fb3bf31fab042acc10c5bf7eb8861b97c1b5c46b948eb6ac5cf2422e3b2e9aa0c5912a66c3d4db9335edd1ddcfdeeebaad306359e8644042453a18f31e0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011eb04999acfc73c70835eb73c0b87c5dfb2b9f1b452d2daecb1594fa5d94ed5e03125ea4bcc7dfb7faec6b8352c15ad6313e5763b95c92eb3cafaa2ca1a9e0fd5e2438e44a04b2e723a443a9ed9ed6b5280fc721d6b52d57717021b21e2f0288112b9c0278c4756d3a918fb6a907473e32c5c248be76797a370b128db43e58f30d0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a6bb7d4ff76d45398d9e813f63afe880b657e37d5bda6e9916e6903643fb45322f931d2f7ee802c803ea64b3a96d818a781b1eeab09cbc6a44ca5a31dfbaa89563ba4fcf4457c228a8df6b4c24ad704bd06c32cd05c11ca1823e9e3cdc67a9c58190ce54b12dcdddfda7dd14fc877e67f2c288a6edcdc6a51b04e9e89bb99fe9e8030ad8a369ea7b6f35a2838c85a049522e04384e5490a7e9a128141eb3c3f245562c44a73b513fe5491a92904062b016b4017ca27d6b1e6c8729508b618e285771c08c7647016551dce44124db7bfe35d2ea1b8a13af4c1efd5b2c634f5493a492fc3be45ac2ebc9e4ede2e9eec0adfebe21773ed37c2b9ec7aa0c63f43cb59a896155c8e2a472f13acebafb11d7aaeb1f2085ca47f136a16e6b290a80c78a2338bb019bd3185d0035c331b0753c874c2f0052c51be7c00cf78e192e096d69bd5d41c58e94a7a5119eb1d67f4edbbd76ce976fb542e1cdcf939d1a4db351c834d2b6db9f1bd9b8cc1bfbf6414cbcdb9184594f304b60bdc965999c81b57c9a5051c4e468663f297c8a98add9ec949a783c0eead09fc1269216f017645efe98e774a84d05299cf0859b5cf3c7251a826097f08bda225a8514e89c58ea220250000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300128dd00db5bca306fa488c849a9204d3982423fe282d985b7259d07ac4f2cfdad0313dc2fdbf6a17cd5369a0fe430bb4e551af72f78520220eed33d2bc9c9e144ce26bc5aa196bd598893d7f3b94bf3cd87be14d43a7cd209ed721955ec119ab2ca247f5fc035bbb2fdf7a62be3345d08133a884194e6036c05095c0dc6e0fdf40f0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d4240cd2bc9ecb6e2f5d80950212b81fc9fe6729971e7df9c470f58216cd80a6d7470564d46edcc28786894d486585455d2bb8dc3db44b4829753abcf08f036442e3f7f92387efe978dbb94a66c62df4b3430f9f0d28171e90d149e1276e7c65ef12ca88e903002dfbb953e6f9001df4513fad1575e38dbcdda68ea9462b4312fff9e4862e818077dfdf71254069466bb87cb82d50c5fb4cf3d16574aea678e8d84d168f599032a339baa013d88ca730501536c8f7508208b37bc41a1bb461ef029eaf670555ba6d50f6a5f6f38283aed03eb00a0068225dbfc40fbfdd447d0cca5a19af4cee7cd3385f2ad0be6f011169dc7b00e7885bcc4bd24bc5eee19b3c989896110db94e6c7c96701b0ab7d73ad14d8c73c6a63c7e9abec818e0d3b0cd2750088ec7d558d723e599edd4dcad6b690f7464d640b85465ee4924543c5825a1d2ab60f1a3b077911390070938c0da554d189275d3ad93d471392a1fce95f5bd0db05f33e232aef35a4c3b4c85b1eda2c5b2c4fd5e554fc976abf15a105beab988ce722437c6299473a23212f780a686bede8a052ea5a8944650252b068f51b3525e224dbc97f99799ae8761522cd2d95b8e1e899ad4206cdab9e66065bdf0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010e6b5ed35d7ff8a61a76587804448ee9d88a7eff2117bf07367f1c87eca1f5df03148e985bdce11c8ebc41834fc04cfeb05f2b933f5c2e69a3cc8ffc3beb4a7b5d0df0b8b67afec852417cbf14c40066f534b98c0a7ff3da125fa89d5080b9e0e9153508689ec1d68244f30b255dccf489c7f2540228069a0a28eb41d0bd1fce3500000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011e6dd32f30e2cb6c761cf224591da6c80db7809d45661bce119be61378a3bb934bea52d4b99cd69dacb39e6277312ed2343afadf62406d69a16f9555c77335c4a3f48f05f4906e35c0dacd654fd0e73f3ef1fbf8833b09422ee2531e6ed3a3dffc84f86fe04a62d02bd781e841918caf667fc3fdf5472b04d0f79768161a741ecc89251918cf68b31e5482db6379c140791841401bb09814cf4aa1ea1bc441126da0dcf9d8fb5b0c4cd7ffb145ff82055b31b2172a9da6a17634a796dd12687aa4db4e73a9134afa06cb02bb2bac5a4e459314484c86bce4907a9ac6b93efcd037355d24a86b5e66b18737b84e4c2959f5b7f5ffbe4f3dfd09a9bce5630ee802ff75996c2de6557a43c49e52c455fea7e4862b8576a1b431e28f5283be0d51fe067b83b5574438c23ec1772f48d515abb632c40e28700525a26771dd2eed1b6afb9574d8a609e904458af40cefe9a5d183ae44683da68b168fc97d6a2361b1693c0669ae7803b1524d6a887d9db36f37a0c3c25c4f37678357a3f25e05ce7d016dd96840df45de86db633cfefe10c584393d59406fc854a790d8266b2bd2a29bbd3279951e3e7dbf38b851a573ad3e8c0431901758b9e3a8267041d8c90ce160000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001192fc9db8c738533d165ce1ddad4ffb62ed770190235b7ebbab01de805e4b54803156493133f7ae25e6f6c26147e9073d40f688826ce6f0886543ad2370a245e350511fa3d4d9e7e9fc62f6450eab63c289d681e0f435a4de121e196b7e068d8ab273f56a78a364e2a3815fb463fc1dbfb8ba50bcd83b45a4ffdca0134f8ba992f00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013bceb7da286cc8e057ebafa17459604ee1b36fb581a714f805be39e82d67ef98373bb9a349ef62f6c022c547ef284974b7398c8aff16d6d03587fa2f8299c8e8ba4d9e680c5408fa6bcb07696e88f232c114dde8f424ee32208a7710bbd438c43bf5b10e15e5f57c4847bccf5301a99b0fbb04e6635b2adfeed7f8f02ff83c0e942efbc0dcc8caf893ccd75b5567afd7da364f806b561e4627ef75c6e7f95425534cf5f7dd9db002d3a79c66734a822a079526789da1ead3e101e4c227de35303c6e337268608411e98ac95ea22689640adb39c47f66a241a1f9c777a9ce1572e323bbf69336e615c0e893e52b9360362266b408d1e46cada0d1e9afe7b7ae2e90d6519cf3bf49b4ebda96b900413e22ea142c8922371a01f8dde57ca55dfe8996ced0f3699b5ed570d05640666e2d072e8a89e4215a2b5be470d648af393e9ad523dc6cd16e316151c40d8828c2bb63a36a8a96f1a693d73d2b7cefaa9973431cf3e82bdaf68b9cffc269f4c3a5e33b12ad4fd9a20f1acc72d50399e5b78e03e8b7893caf7bf7a3d693afc0b26bca57cc54c1155558ce375e8a4a9b06797f6d796c3a1b67e1790f77c6e6e2b6bc82eb6938c5c6dab79706661637940c400cb0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300115e8023d956dc89f2589c2db798654ee7c25ae7a61fd735c0589f19119166cd00317c650685b73dfe1dfb7f92d2fdb33600a0f8f517ff92e68bafd0f7825cb31ff13afec9e223818a5347580154ab7b0388ab9cca11cf92c5b8574b836d78d78e902cd8ff6d93f40f6deed18938b298f493a46afd5d4ba562321a5d7a92e46667c000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a45861b77d47261f46dd58ec0ba31d25d261f3b3d97e24cee9c40d06d3e186ba002e42dbdf33656a98329d17890702dedb3675b487008de6da28b722c69fdf4744e60593c3aaf53fb23afe159ac6e6a97024a77c0ddcab714c7fb4e13122fb1c64e6fde0a7dda70c8a8518d1350c6519df337a47c1e43dc5106febfe762a2a8a0a4d92c38ac6d584f3a40ba01efb71c8e6560a1387c98e810ae5f716ef654bb1bd4733c050582380dda222f12ab0c8d4ef03404a9c83b86c642530a18c71723729dd46b3cf596fab8475d808c308fc7d426f3de2a462484f73ee2af62bbc429c19eb0aac33b672fc966dcbf812e78d5942fc93c9fb91f84b161b9b8bf7c633362772bce4dd5796bb62cd73f95f13654f8b78a24cb9a1c26edc00844325ed955a5f6477cf4d9bc94773389eb3cd9c5770b5ae2384e467705336b88e1b8aa8e1e4af3392f663c8549f2092392bdd9aad71498fe5e139b45c9af63042b0a19b3ba942806341187da72173859e400b56b50bfecbeb0c55272055e27da87c433a19bd91e6aa4eba2f26ea2fb899b4bb701ca938dc3b65e1355b3db6cdbe2c4f883e78f2615902adac237d83850e61428d609fd713f30ab468880c194ed930cbc640ba0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011a1df2fcdc2fb74f80313ad5a00cc78429d1fc255be5cc417ac73d9b71e278790318e2e02437c3590fbbee4b764abab0695fc9d9bfa6b8ec1b447013331c38be251dbc6c1ab8109bdaab6d5db079dce0d559d7ed74d15493a5279d788f164a1f282f20fd619071f04fd883178035c9cd1ad5c207419eb3e8d12f2e79023af0c1ba000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000abaa4855d567da461c52865dc6cee97b1f6db1b6b592bf05df8293d33ced2cd5d6d84b78605e753500e756b2b5b30f287a2cbc05d11421dbadba8a4e8214ce50990935392feb278d5078dca53b5b1b367065453bb0744e18ea2e6e2b170f17aafd5c33fa782e2fc995f203c98b0598f6aadb25762062068b2e1db263ebeb2de5b8ec3d9cb2cd1cf6317c084e7a94c86fe80f3ef9e18aee5d7b8209b02d1892abba903419f0391c066f3061737c1c89fab0e4a6bce38298b605d7b2e2355e886788ad813945cb27c4061d9950205da8d2e5b5aa1a153c65202563e3bbf5ffc0bdbc30173fb1c9e39a1c5dc4b3bb2b33449ef2aef7dfe50464816b5ad5922eeaab4e06a58d641ea0c78e96f3187c208ca78e6ae2525757578e28642723dfd281a1bc91bffc982f9cf03c9b4aa0049ea1be5c300ab3b5ac298b5c8ddfcde45df99bfd78bb8caf5f6d1ea774ff84ce0571c465047e2204259ab23127eb53ae7613aa79f761ea4ab05364dbe624f848c35901e42ef8854929aec5b7fb6afc76dc413a16a34090f1f51578aa18ffbb3b7d7d14d36eab3e2dc215d4979e46639b1890c662c2d6ae8dc1db39f6c49c3729b18c17b41689861ef3eb2364e6ad15c9e7dd0c0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010e6933a68f75e1cca58b4dd5940e2466eb2b7ead45185433e14aedeae090d55503194edd6825f97f7652fbd98cb013879840d6f5750fb278f634186177645e6ddb0b59ac88737e412c6803b7590839e13f43ac9346fdeb00de611033ad6dbb59da055c8826d807cd5e15fe57024b6db04996bc57bbb92f2100dfff90d6ac5f146b0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c1ec713947f18fe74c5e36f3d6ec0d168108eb47bca35cff30ce14f465223f93ac1ddd0ea04472593b8e99633ac1876f505c94dd4e169d9726bcdd9c56846faa8c26b81102b4c15a14ba3ea7d1ba938d45c429179d14a6930efe81e2fbd8d23bcffb585217aa930d5e39dd48962dd57b07fdf9938a12842096a6f3ba79b109b8683ccc3f9eea387ac2e6c1b0d398ee3df21c35c1c8ff46fc6a0510e1e8b6964845880c15dc7a16e84132038026cde440dcdb96e105b59e6e7fca5a3dc669ee26e0013bcb26f57f2eba4dad91e8e73533953296044a19c925b0469885a8afe4e58f23e0225e254b03eafb68a5d4f97023cda23384230815bcadba48d17c225baf2eb44c0bd3b006d747edad74dd295b5af475c9021a85cb2f517410d071bf080732a5f89a1d37b642f13beb6e79bab70168f398ecdab77bc81177a99d993f6694878d81531fdaf6f963c76318d8ececece40768991bbf016c4d2f200fc697049ed834faa818c768b5508e7c4dc12f2c8f88728fd66e6e05e8998bf66bd07ce00c1a657017a0a8258c088b0735ae512ff647e5d7e43af23dc591a9708254b7b88a71900244e32f38c499734278b8ec2ba316b102c728d2b6fc216eb6ccc5eece20000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012172cfd1e4c684806e135f031618a0e56f3af319c5e6e23c3dece97504dc6252031b4fe92f218c6669bc071434667cf989597df84ea98c1711808808f91113173015c4d90df572c6c0b0f29f9e8a4c56b7db7f2067ea5d1206a057c66cbe3030a2109e873566fb61625fdb6d5b8a47faed20e9770f06febfc5dad3082371f1db8800000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021f8b1dfbe46545d44c7a9ad4932c55289352b7cbc0344ff7d631680f20d393db3a6783388632bc3a3f1c96f0011e5fe2cf4ad3cf04cde5452812b8baab73821f5e9076b4ea9231908ba9fbc890584c8b2214de4851fc6a7213e9914dd71c820f4e1af9db2195dfd50a24ee65eb4ddf8a393ad174ad94219ac80b94008801a77998ac98164c5e97e5ac7f9ef58a950e265ffda72489658c4127a274bfed9012c46cefca31dda0677a95725a6e081c68395057a9c3e2d42d44d6e6c1748a2230589b32a67280105b215132e0da3c7d66f1a4a25be5095b9c5f8c44c2eaa1ea8e26b05c0189bafaee88c9572f891c3236db412268af0508fdeb4eb752dd79862718a047447132c74826dbf452def1f328227ce01f76fb26a6756a91f575907edb65347a1e9ab1e020b9f9c38b41a18284fdbf9b59c9ae34c8f122b8e4884d16552dec9a97949faa67670c789fc92ab44bebab0f549dc9b155f1b2a4418a432b52d27899afeb28cd42665499715d16c3c101b2345ec5f4e5649eff6d406f5d8e84bfb1b3bd9db1a803e452df78172f9d7f659937f28faee1b605e4b754e15c3dfe64f2bcaf455e5733388db263ae5f08e14685cfee156ac1acccb023c23e82eaf130000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300112b4583434ff4b29421a07cfacfdbe2ca9cd1db4d63006f2481e77984681b2d4031d94528e765ec5c2bbc8602270c3fba7576e65e842437e89a43c58d772109e01001c69f611785e6b95f51f078f605285f636c6a96de4f2926c38aed840baa0db1a28bac3a5e5582d89bc9f50ac2a940d4de4c853ee2fc0c27c6412b8f7bb926d00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016e70f9d9e326028e85402e56e70ff2122a1fbde26061e22b2327b93ec7b9050194e6c27e9ae3da3a426f6f4394de76b5c135c1584e28d2b5d2a3162db20e38c76bc92da6fe5924e0e21a18f684eca6f1c7b7dadb6464a266d5fe113f5ab8744b2594482a463b60312b52420b9b62397159459701d90b3007fbcd1d686977aa2663cdb66ba5c0f6b8f17d07f7da6eef8521ec05e10cf22d31407d3bfbfe05b9325236b0d1bd9e8f3fce4ae2a35c8a4ff92d3575824723b3198d81877616819ff8d821cf76f6bd26efd76b46ae93711e49f79c10026f4dfcbc8e5d2ba6ae4ba7f66b35aaf23182734a2b7002c26bd957bb8d5460b3a45b28f72e921ac748f86a909772bb3b974139b3f328eb9ea22024ac25d51796b8ad1c65f361baed4fa47db13eb3da6856d62431f783b6d19be2599fd379acf531aa66fa54b990df530c6916de64d5aab67edde3be554965e3dcde2fcac2aa7a6b4be8026f62fdebc9f2a453fb61a98c26bf90d57ba110c8b653c7c2eb5edd778368571dc4768a47d3ceea4cf639047d86305ee3ea0039bb3ed45824d6ce313a1428a5b61131dcc2f049115af9a13295ba8cec0f99e0cbe20593331a4d96a48cfec4c17615437ae17a1a1150000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300118ae8906403303e4102a82719bb6939239b24d0ecce990d2843e7a667cadb38a031ece9879cd1e6fe01dbd1b728463382555eff3a7fb4c67ded53d1f70e12553422e1f51f5a5d370afdb1b72e4d349dc8be0f8fb95cd3444bd684ac2ee29e97aa01348a43404d9c576b8ce4e7a721b41fbf1e55d4198c8020fcbad2d3582fa3ca000000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096e2a4cec4dd6296949e6386102c84f5de47529a8d5822647cc1fd49e9340a4a0ced129a950bce40ddb7863e91284f79cc3929ca711ea4d31824b61e4800b3a026c6a65f2d2e4df8c873d022ba2cbd68ec8b3cc5f334a079797a181c08abd5f17ada1d55af9be33182b668aa73eefb83bb4dcfe71be8881d95ad37b75b21756abbcdeff93fec963c1ea7f2ca79630bc14b5af2128b69cbd1137397e88d3aa25724d35b435c57aca92c485553ec15ab24613c2bdf28576698ef28555a891b6e06abd711e28edc5473602d9e9ab09a7ff7eccbb7bba6070812ea6d01fa8bf32084a6718f8362c1492f4c33199387e529e0254ea392173dcf8eace2156d765ab5ab8a7a39a2c1206e706389dfb8b9e9995dc4c6c145d17fcbcd35787908fb43f774dfc37ac0e417475c7552536698b51772f6e6aa10091c13234bc941e35a65241ca3ea867c2a1d776fe6d09565a0004468ef5bcbdbf75da74b65a9ac3e7cedd60dc5fd3fdbc8e354dd3300c7ac9796db70fe6c3a4ef191ecd90657623226a3764ba13b6f300e4b83ee478b9aa1abe535d9b2579ef25bcc0cbe7332d93859191525d99d83f106545371f4b4a280be3e5a91739e0c90170b4abea788280972148b3c0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300107a445afc36445d7706612b1fe7ccfd43b3880cfaf112c35ac399e4ecd42c78303203512bfceadbe50b565a7da512502af9c930507bb5e70c4ace6fa94277239dd16eb563500dfa616934470ea49b60cf436bcd76a1f8d8f04041507f80152df9d15c8d227aa584f7cbfe0d5a6ba94691ded5026592ea62aec83d5b8770f80a0c90000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d5cca100b7dc09eb22edb434c165ce32e1c0f85589c712e6e79a4804a55ff48c731cf3e53864efbca17cd3aed547ccd916ff6a749554a4e94f17c22ebc6e2d53b85fd2936e8a50ee928dd5b712ca362949274921db607cd8eb9bbe0158ebb584e4da2b6fd4756fbaaf536855c9c7a7d015b8b7db0209ed4e597cbc0182a0b0dfb70b88ec6c5769d7073c19e5894dc353a688e7cf9ee1352c5f7c41846d478cf874053d73f73e84b51a349e12fb7380db5a307c8fde923d8c0dfeea6f32fd59a01fc3d324d45f1289f482f5568d0f85a2e68e016be1ac995602f6a3d61cd52989faac5ab97dc50a890c97a5eb1c72c633c99433c30b5328d554bdc68d1cca7076700e29fe268bd4979ebd583ab37efa55c1190766d2946faaa1fa9825faa5376925ce03d765165a9288feab04b2e9e0318ac81baa5753f5424025d2fa399e564ce0f35480be1106ff0b4bf32a630eb18b8491220573210b37cf99ef563e058a206a1a32a489ce324e4c186b6d2f47c3acd63da537b105e3fbdfa7f068798f4f7f1a8b85b8526bbc98b212231841b94d0cf388e74dccd5e1e4724bca72dcf3cfc28ce7a81a387fdfad3cd38366f9c25c0a68785b0a313ac1b982488dac756fb1e0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300116c9281cfea032355fa1bb080f278b0165f878e9eeda625831a920af06eb7caf032142fcf2bdbbc47f3089dad0cf823464976d13f421e0e2dd9a3d5c0770e4aff123ec3b4cb2b1e35432cfa50307032e7dd4303c1a55b6b3f230fff1ffbba969c528e954ab1924606775c6030927ea072b25e946ef182e6bccbfc6cb6548b34c6c00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024a7e2fac26c2682543bf6a19c2e159aa070a33859d24245318d614ccb6f59fdae9c30610dba4c7fc38492ed703da7657cdeddd10406ec5ab97381433eb632d55bc5cb50850ae5bf140daabb247b60633effb410a63981c9e516f11d01a5a45ea011da9bcb171267eed870b862af6b5498c6bf5e1cd7b8a71ec1978d72db29c9fb3afa747ae4bd449a7cf97394f059f7da882192171fef9173ae180e5b983142c6608e7d028708d4942c2de75b119f3888b9938a9111fb4e5edbabcab85dcd5c41ac6678b82e77d30f8f31e51a24b401fbc1b01d7c7e98e1ac7ab6c183c908e0deb700a743bd4a4f38907f5aecb16d11b691ff442a25eadb6c14da5ca24b261a951c2caacfd2fd4353b117f109aaa0a92f8cd9e144fff6da793eef77738e7de3689a69cbc9d50c34859523ab37d1410a198b7a227307e6fdbc4ca7b3feb21ab5765387e535d52e16ed700c67b27d7fc2da487250c9661c45a712bb74cea34b92ca1990c09c5f1595d1066930981152f3e3b8f992543f816b8b6c59cb6d0151930cee25fb582274303c73b58d29a183094f545e2c1c046d42c4c4943f15328c4248b4f609db715f4a745f59976a9404b0614605df63d257511b81c172aba0e82b0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300103f78818c3a857e10d16a84e3c2d778edf8e4b95d38714f87732b4d39cf7dc130322b86d95fbcf60a5616bfde4c0f2c444aed680668b67d1be74a5f6510bfb6eb71a7e44950643b3feb248409d4c398d68b2c96e0f8db9ae1f125a2dc16bd5453b0aebf28c68de083a160fe8020c82a3fc194afe6a5735649eac3caf2459072f84000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000acd063a0ae96d2280160f260d95ff78bc23b4f98aa98b474cf22eec5b5ec60d5cd84003f6a83a3dd412faf912575bd61aa860cd2e9e788c5e1b8c3370509d3c38e4a69ca86045c9ef2614e8850d918d40d8ed32b451e96626cfc1bd5b3bf1e59f5cb116fcd9752d0f762355f70bdbe886fb0a7f6acbc0b6995897751eace3055fe8a9b115073d5cc8bd9ace9c9c0177099219c1c9cade5c208a4618743d990792875ca4a3e25962d7dcf81ea50d50c2082e47a9a9e5ae50d705adf7c1fdb7cdd7f1c155f105a7193d2462a851715b83f10aee3c22d45998730af333cf8d82ef4423fd01f72d7295c8f66d62e356d6f8498387c5b398e700eb36acf348f4af6c96d37f1b8fc1b8c4bbca23d432dd4ca830d22d263144729a7abc53d506b97e2638709fdc8aa44f0b6912e34d3944a29b4b4b0499bed2479bdfaff2ef29f25b9b44b1214b77d7e1d1a91647188b79a84dec086f54316ac97032eee8a82795940936fae2af22c0e349981cdbd67fcefa2f37c841fcecb1f3305dacc476c2fb9081808cb400298cff6cc98bb00c6890db9ebb0c81b24a266b8bcddf6b0d39fbb346c4e60599f208a0bea438da0166dcfc71623d07efd03cd3a10d1bc6e1b22e508d70000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300117669ba29fe420027f8a97d2b07dc5a93f4b0b569418aad1267c3d6f6743928f03241b686648b2b4b57da941325c8ef959005c8a7b8c9bb907a178eaf9aba72c3c2c98e939ac8f4a47f885672756dd7002c84bbaecc896e3ce57a0020eb4bfb2b00db02d3311b7f2fb4e885bbdd49935a5e9e0ecd53d619124891fad21042c390e00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c982e8087ed1433d7aec93f2743065add8dcd408b99a5556e28209ea6104f6ad774fd76a55bd391b4756784f706c8a768a1a22a463bc646511533af87c94fc316797569a8be1a40500fd8420b4182f2d2b2759a3e05de32bd584789b425a7680cc64ce70d5bd6aea4efbecba1a4e0d6ad428fd9b8880334a26a29fd286a9e0e92373af1c43e98679e0f7e049bd4fc41c75e88bc037be03a3ee8a1166e053b11a727035eb60ac1cf84e6548fbd9d6106c2f778375a685a2c124ea1b0904b3c79bad2f554476c2be4ab51dea5cd199f9cc7a3b798e72c9efc14aa4b1e2bc3ead0b852e314a00f939604bf7e7040d38152a0898d3f33a948bea8bed06fc5351591287e834e96f44f80990434d867d398211405a93c6062a5b0f154d0475ad3ad4ec03eb75d960fe8e1044325ac588f879852aeed6d9797c4abb121249f5a3d4da859ae5b8806650d7b9accf00cafb91ab9f5a19fa9ae462b2a69f7cd6ae397a8012eea646fcc7bb21a50ecb661df16df6d9727895d72d29c668e1b962523bdd7692b11879dcc80a25311e825a44e16e1c8a29d753cb3a41d6beda0debd41d904f4a44b4b645cba4631f4fbbbfa8844561a03bd9a62e02da1363c436bfb49470350000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011f732f613694e3b9b22b76025f94425e32cbede156a5a08f86f727ef03f7f4700324b22d38d9ca0a693ee2ee6cadb333296f444747b11a7be7bd63fcd7edc7309706852afacedbf9afe44ed373112cd39856f64fa6ff52e650236affcf1ec5b75606e886aeaa3e01a411ad6f5a4b9f2080ae6f919c9944a17d6515500815c57e3d0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bd6a9131ca8da75203d32a832a0059f5a229fb6b9c96a206373e0b5019baae34a9990559b95c2661a1f666d1e8f135a8dfe734013adfb26bdaf6bf08bb4d2061c4eee95df5282ac0b23f7e550eded1169571a27ea9676ade3ebb5be50cd75755050c959942842cd2de4ff1e9c9ce4d29810112519b31eaf8f38edf1c6e6f29b580e59d82ddaf9a3ab0ffd77f1f62526b1ee86cf8c6be4c2a9c4624e12e9e540abef2dd0da9ef82d6aa6d00fca0423d723b2c74c418db2094b34d51ebfe72cf875b18aa59595aeba86da751948d494f0a992975a9dd2d4c9535222733614a03193b2df277ab2cf7ff8e988b184d3faa29e7c510caeb244d9008a100a796a4560d67e82a6a16305da3a6f050c3f783c81f9d2a547a928504845be8a9773585209071f91c78493fba221972deb2e94857def3a306e37fc6451ec363d61ea1317f2775d0108a236bf742193458b88ac1f1f35293740ac388a1d65680a7ba9969c02fc0ee826832820d4a21fd0803f476d97413955302f4022401d2a5fc65781c68b7d36593b09818e63278b280c1779b639d4728ba2d3eecdcd2c925e61b1b0c6fda9d9a4ebcf6f517dde6986431d9a1a2ea05c0dd0f1a1fc13989347721f9c5dd00000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012f488668cd61af629db7180cf67e7335cbcf75bee96784032d9e0da36ff1a0030324cf81c1f4a2711e42af03906294aba25c60960de3f16c38425c44e5223f5219305106c3b3adbba24193412200021c2c5864db0b6e263c85e359bbefb4fe09e6069152459384114cff2db640c5e265313699af6fedf0ea96d4a0a8599250374100000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025bb294966a7a8a2493bd5a76540fdea5952731b4f563ecb35133fdaabc5e03d3d652347ea6767e0084f13239b7e6819f1a4a941548316a35c62dc2771595d38433ae86ff6be9fcecbda9a36ca1cb36b11122e297c0a4180c15d4af646bbeea1ea6e5f2b77a0c90a5b48cb36b8bd3a4c1e57cbc021b1f96b70b8bbf92f67c93e96f3cdf1090967a401fa96f555db084fbf4d827a5268f485aed59e0acad6627925488f079917a50559fafd292f8e25326d007517276ad60b8a576b1a5b9a7a81a15dd1c43502a07d8f9e2444950c77ef4086dba8b774690b37ac920b16a94ea073eb7b55775ee8d339e004fedea03407f8b81032061c1c0ccf4e8017ca587880de585b8980dfe8b2c2b640e57cf82a780519310833fcad451798cefe9854deffa2aa9fa62f1a65af5d593a5aceeb92d9cb73b5ec5feb93b4795d1fcdee06f8dccedcaca1e59328b1f91fd731ffc50452ddad5742d7778e2b714cca6793dda9cc31a6b7b970b47862fa28273807ce5caed1506307804adcf2d93b71697f820192e3382aba6abbf794f98f72804f603c36983c5f1374701a72bd6729fb9b059abb4be242735673a89588a7f148cc7f8220178386c231d7b9a5b7683360954011b90000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300105b69cec76cdac9c637842130bfaffe817b83cee5e3a63bd1c8bdcf4bc00d5a0032659fa21c8d5cb886f348ad7a5c0a40317dc29e67ca63c4bf065f998e4d2b4eb1b6346c4757aac9fde8105c44600a7e5ce9dd702aa0ae6004c3c7fbfaf20239b0b871a5127853d3714b36b8ddb0a00d49f7217dbf9ad5d5d5c7029b84912d7f20000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002578a17e190ed05733f3d6bf778825a463ba49ce1cf9fd3d4255f1bd70be724adc08dad248b1c0cfeb5cbe895033dd2b57684d5553434af1428488df757ca5ad9a185a00e64a47dbf79673789324299901affaaacbafc4938a17f1e766270b61abcab81b88a4e12fd0c9ee2d29afe524ca55726659c5a3c364faae3ec20e2207bc97748b824b5e5b55ca3e1f8fbdf722e1e89f48297f37097c8d50f094a7798c2c8f610d4215820da759df4b7563e3ee16e2f6bdfca60318121dadd546fc31cc3600568bb433da4f0e9323a77abf51fbc08a1a60623aa09bf6c5c7343731940a7588f877ea004f26f42e0208c494ff11b3dcf432b3393d1ba715f1da26d964164dd4827e0398972050969b6f9ccb05e32ef1332bea5bb24f198bc96fe5ecd65fcb5f5e4e4a468e0d72408aafad8d0ef81154776d9e96d8aec753789b9df2e82791e84c3b62d2ae9b4d89a0bbcdd754ce9b6a4f186c8c266df1600480c92131325caea76b24db62e7ffa4a9e6f4d6c6f6d1f04b550bc69282819422fd91dc90217caf44b5b86666e74013357e3810144ec0e95bce5d47119fe2419fc7a3e2660d746754fd1feb4b2026745203e1eb242a3e8a2a589ccaaebebf3a8dab378d75d80000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010851f5f520c5a85e10752cd8de4a6f1f1819072151fe0f07b34f94dbb8e03e200328a5cda359f7d87a97cb63fe5013271f38dca2b9547bbeeed7f3f9d25c5ba60a0f4b4eb9591c0cb09dbfb93fd6ecfdee4496482aa644e511ab2973dd59565f0b186a54004efb1188538294faa36a3fd14e80a8ab4374728470cca5e8683137b30000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008db21bf668342ef21a52e3b9e7051c4dec312ee5b151f4b534827d3ffa97095e36855bf9265e0c231d444c7a57758084965370ee94212f5b5ff4025e689cfe04ed0be36bf1ba54f67f7a51b98011b03db474545151638f79dbaa89e495811bf8947728b9ec9c6f62d1d573287651f4140d34f358e3e1d7ced8204ab96593e19183abdec6897ff22d23ed429b7f02301402996471f46badc2d5178e27c68992909a530b76278290cc7ae436058b785e3988cd7e5117a6627c4888349f3c43939cca929b19d60c9477a8c7e5fde8443af9be3022b034dc906d746aad1c33bb2de16ee7cc08bf883b504f61b1ac8f42c5d5d871c98dfe6c480507cdc5a7d798fbeeb8b355c6e719aef8a8f4b868513329476e3ae55827d6cd730880c6d269d7ca5ae480298c1d6d398d3b94e5f26f3dc9616819ee2b737bc37816dea6e4c814f62449e6d3a9d0351ef87c93a286428b96074c411d4890cdbe85857e8b94ba8081eb96ddbc73d1717fcb5b36786abb1b84c06e12ffa74f5cbcd8ce2ac97d49628f391fea1feedb85d001a6f114d6f54f8ced3b300375e682ac1ea9df5694cd5132f2138ab0ab979d6d95664fa63f774095760dc6b212d4b2962d804d04f8cee3ab290000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001183ef771995c2623f6342bb890ffaed841a93f840e07610550b96890115bd6c30328e73ceacffded87d4177d8a12cb3a8bd4d1ab82dc58403c5923281f1e1094030ccf2787cd632d09e3e81c624902f4d3149b9b5171b1e2b71b10c64a2251343406a48a49aa899890289150e10aaa94b287709e0ba061fc8b618ef07fefa09ae7000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916de31a521f6a52fe32ab736407b4efbbf892dcab60f79ba140e664d013f03cd44646c86f95b20a3d0eadf28d5829e7d7f663323dc132365be76d54a29f51ee22d95bd6ff50d3bb6b4302ccd0698216c2aa3e7ac2a7b74e5bb710236ebe61369cbfa4bb8974174007e95cb39d1557ffca8d216b572cbcd99a10242cc6b69f97d593157218ec90133fd9cb3c16cd0c6e883316cbf2e553e5986420d0f778fb065977333ce3e489e5cd46119a1defc9800a610d140548d9cf06d63a20c0c40c415f5c2a1cce97765a7ed99f44479357c8b80e68db6e6d74ecaf4a42077a2acdddf1198cad5f3f522cd395a56f533cdcfc87a6ee3af83432ea1fd904acb3a18eca19a7f147572d1752b4066506a4290406834f1c6700b42a300e461fbdbe39c57963375d93e83097a85d15325224e6486356f5d55c6928cf31d79188e282df829d2671ffbcac3c745fb2034bd5a3cebca7b35fc1bc99df323acef177dc291964fa0e884c2316871d578a9f9bbae350d7f3a823ecd9178cf672fe7e6c8d56491175902c1aad8a4a0a8172057a3c93ac963bd4e3ce71ed624b9c4216102764cae55baff65e66105a87acb3f1ad2878cd49436617024c21bfbdf639e3dd0412ff21ec0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001154f487500871e4426f5a96aef7d5090dfe820f3640ae5617d7aee3b7118cc3a0329377d7b1806ebe98fc936d0571d6cbff1d600756b926f84e1fead232e7361e41133cef24cdf0b5f0c1b44de27d89c5d91225d935e510aff729bd21b2322e5281674552a2a9673c1fc392ce9766fbc93c88d46df71787529c6333be7a5ca39820000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b3d70767d71cd2302c83c9b0f18caf9cd23e974f9e81308daf675d8a6a4d8607200eb34b48aaab2957f35c0f6191ca37e70a6573ec129fe9d7786e626f895ad382d0ea9a3f80f997235b97b25bd3e1a816b87b52a6b31e20845fd27ce3ae39a9f7f91d6b4d362f0b325256ff2525be96f88cbdd687cf78a90e688cc72ccd52e85bdd6a32dea9595f74b838ad3e67de03b637b32e2b7044a0e818d9a9f4ebef1444533d73ac49914fefdaa4734d67da6286bbe635f0dd727c3d45ea7d9a535e26401542f6e7a74cf1521c8bd85cc79abe2dda1b36281e0b14c5dc99029ea65164dacbaf52d3b8a657d220a80311fc1cc3e3e85431e6a337c7c02d8a1f175fa7f35be7a9f7ae0c1d85268267f391c774d6fcbeca5e89b494a55c3913929610423e93c6317389667c5f1665e6cd9201419064ddb25fd1db3841dd4b4980e1a885b2188b155fe962bf97bc0fa5103dfd75ab2dbf6794ac11ca7669b27be84ac9eabe7cdb846ec6ec58d016d550536a8089d86f8123c915148603c121aba9c790cca7d3d5a5d059bbe1066ae11b72436b26918133fb9243e757a8323ec419d50019cb497d895cbbf2d5c32de1a263276298532ee8751ecda3fdf90387dafae0cfd570000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001241145e8fc93ce391b209d0a4c8b83f894690261f1d4f9f345f6649d0dc2951d03298db1f3d3b0e00283b0abd4eccf1e761f6d25d9e9973e5170b2f32110aa72471bfe0b1e5aeda42d6edd2f528f858374805a7b4cfb303014a81355044cc505282dfcc1a4f205307c486fe97827212affe0e31b99360f1d693b568b5dc49685180000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e37163a7d49a9de917f1f0a57ab079ef9ba8ae00143b51b7b7916f4dec5f06d08c5fda69ec1f7b07127e6613431187d8cc3949d4462e87fac07ae0899469a73c345b8d73a9c5b40eaa514bbc29e81f488ef7c40843b8e361a78c91387fa28f097ee0aebf8114d9daaf072e8ed0dbe53cfea78cda86d7c60cd44ca812f89e374a625fc9a058d95056b25b67483d59865657635b3fc40b4200ec34f446cbf9908a1dc315ded706bf184cc577547ef913f1164c8729697d842332ee39e383968bf848fb047c5abb3746315a7ebac2cde3f42fb5de7514e36af3096f012feee3ecb1e4e358e61d2695248380a07053de020e45a82100fb0756bcbd61e030422252733f64b5b871bf5ac42b86555a8594d15206249d227fe069654d19e4b2a6fed05354a5d129687e716d364942da9a9cc6d1d193330062233080b8494b99673d02935087383af7e2849ec973277473818702b61ff52d28104487dfa5ba8343a564ea9ed33fb974a963c4f8fec2598878fb0a95a0588a898ea7136741d5f835929742a18ca69eca6159dd3be0ac69771a6d525bb8b32be7a85e78d63b1fc72a21e42563217ed1cbe4b20eaa110a9117f6ba65d55f081a29584aed4b85ffa742715920000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011ecabc3df50e244067394a325d9657a6ff5dc111d4e7c12a9dd949b892e7bb78032a97213cfad06940f3b7713e3051b9659f5d3815a469f718d04520eafbe657350f9eaba05fb8193042d51b578de0109cdfcc0a84dbcda72b2e2dcb38f201412c0596962fa296ec735070ebb691f17f96a9a3f72deb5b095be9350b6881d7f8b70000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008823d26ed5fe2a5df458bd84cac28f1615095bd2446e164984c5f95d6aae10acd1c888f90e9cbf677e9dc9705b3f52493fcbfb52328a0589a8f476485089ca20ce410e72a12ef23e77a4ec5efb9015976fc158cbe5da2818ef0706f4cc2b692af05b890846516592f25f03847d2576af68a66d20d0be249c880da36e7cceb136ba1573a0a5650643c63ba4fb7aa7ab653b5f1476c8770c96aedb45c5897daa69970867e494f8cab74cc7c03ddd984d1460d100ae5390dfd2dca7f0aaf28d2bef8a5f08cd37ad4a59543e4ec259f35c3e00afb8791f4ea70ecb707196abd711238575c9a56876db4d10c48e1740810bdf6582c389ce5a40fa23a8bed9d38257b58804e3fd723547b3ec825b2c4fe8005513e93dff7bd8f39ab305265511af7cda22ac50b500a4d2bf3615f0e788e145fab3ee1f2bd1f2e4d78e58434cf82a316257cb3fe72921e428f4a3868efea2733e1672dca682b15a15fa2b868bc80c47763951f9213d3fc59f413c83b659a4d82af9abbaf87ae80177d3d249043d0a8cd2ff7a7f2fdbd78901a334268957e0e6bb6d917e71f68e1aba09fd66add33b33d832910b12292efdffb9c7e2a30ddf2d45bb84b0a02af3280763ee4309a8a3b9ec0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001088fd587e11c2fccc8d0a33249d294607bc99cb5bb242c26a2dcf40c1608199c032b912efd9cacce5ca4d1ed3324c38d1658b6855633cfb9b04151b7bdca72459827215104e867c8e3bbb2007012940f70ccbf36fb40d806e3360b75017c179da703ebe9c4e7c2d94d53d7ee8f0a9b8177edd5da8062161c26f4ed79a543812d69000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021c5265db203d334c4cc7b38d585e746728e58810d9b2f769ae7f0b7cec1574fd51adafc043912e9de9c207048f71332a23026506f0c1789fab5ff7e2936e9150cf151ae0093cce3d85cc792454b17e80c59e9b867efb196dc9d4df25d8f93fb4cda5d31caf324091d893bcf1d420f4093342b5d452f65fcf5ac98eb3a8abfc0283938e11a444ec792b724159bf9ced6968c4368b6c9a194191366d30e7c5eff13b303c30aacdb6ced2648d119bc6511c4f37c236e23e18b4020b04723caeaef39b3f7f73b9b2789a21b9ec622526cf11d59c69a483326fe15adb1e700c71691093c15320d747781544a6d94ee5ad3119348aff48090c70d73f4a3ee55388db105cda16acf3a7e5dc80549167b0ffa626483910d8d02acfb81e0cf1c2de7243f5f78f2f66096e49ad316414d384b4aef028431a4baf37caea5b9d30321d6db45abc4d4ab512e8fd29e50c10a1429ed31cb3822d415ac69fd3dc763e9fab4a4ba64ea65a42d95f674ceac9e551e7e8f25c7e003ec3da677ceb52ba414fefcc820895fefa9ac81b2acb4b55d66fafb79fa51f4f03bb13d0baa579c5330e7fe592797aa4622756ec2fac8de06c24f3bbd0c5fb4aa8b0ab931c7e0900fbb41b8b0e0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011b399ba2d74eee4d5b41a408185c810e1fe5338440ecad31f052a6877b092f6b032d1510278231a7a742859bdbb6f3833eb7500190f8a3075fb5f94997ce9fc91b1ac438893620a835abccd3a87417cc7d31a12c937ced31cd2b07263c850f19cf1d9b1a64c4bc98dc415293a6ef92b6b380e1e814142a5f7151612b5831fbd1e80000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a8fa51a5c94ef103c3e8c4bed04a1b5bb71cb92efbbeba09087ed68c1de7721cb46ed9a88e16c2fcfc526ec00f4a0ce9e32b69ca0785c83516c1c25a61090b3ff8e24c7911115ede3449b54fda20ae2e1a35d6a32886b9b3d6d3d6a0cfa1b55e5ae0080c4d5027bc229031e3fdcbeb4b320128023193b0bf5c7a223f73e42e4dfeb7e7cc89d39fe3b481d520b15e8726e28fc668c5d559ca6670b42e645d9256d0ad0cc288969d84de950e78f4694fc4dc7b3bd6037b0ca7277e48c84552f19fbe450068d33f410209fcb66765106fc1d167151f1980b81da16de49809dff34ac3a26dfe2a6194b0c215429bc95bad4e648db6f5b4c9375f052747aad9e3b33415a000b537fb5f32832a80d280e15f389a7baa8710b1ce1fa22c3c4280a30ff5e0e1e99485f8018ca75f647badee7c8530fa7a99dcd369022c2d2e2e691aefc2ae0f8edb7d1635c229d80402137ee65f2bac03dd66b6a460441ee20a3688623ce18aabe4039a5d448b41ed9cdcdf5ba832946cbd03a4fdc2cc59f76311e066197f2139a5279b1852d04cf010e80910be51fec376ad1f3ce03340dc13165f1711bd178b38165aaf1f757f7012fb727c4d2b87e13c20bb12e6ec43f498e03cf2c0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300123148e669149e3354d1bdb2baadb7f33e3773aaf50ee7eac7b27ea62cd72ecaa032dfa50f849f344e75b507c17dea8c2a6c3835db6ac85bf4fab9b80e43d7c30820d513a0a13608bfe161ed250efcfffb571e8a4bc6d47809388fddc8be97050bb09e30d7875dc83149a9f1a1c4d4449b361823961f52ff23d98aafebe3912d19b0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fde569b687303b48b07b1737f0555f15d10ca784665c0ac52e1d5176235845eb1e976a4da58ea7e824abd3314fc7b283f6d62b0026a625583960ed69755eb4a42af5cb5966dd95dada6fc0c1bfd9b3ee07c042badfbfa75580a62d5e1618014a1a2b35128af2d2cb6c712611fdb2c67766de5ec990b863dae4800bf4778adc24a37a8cd2039a3db08712403da17c3950fd882a606ce919ffc77103e8e15aa2994ac38c9084be5854fcb1041833e83216eae02b5ade62d188c92db77d2c720febe1be19a719b19f3e7e6b57111b431d32515a51e28844df5f07b82787a9f4cdab72c0ac92444db131066fe11373835384ada9380d6d23ee303b8b2534a29bedff14ad22a4323deee5fa32d9c798626cdc97cf10127e90997bff5db4b89102c630fd32a8c66bbc3716e304be1fe5e6bd159189f03f7fcf3f251d11720482db3b03b06d1e6bc57423f27d042fcc3a06d8a9d09a5bd6bbeb5f9ceea23d87358489ed6601a74fce1d4bb9a662764fea4f1dac355240d66fa9306e867d4a31986687f9ce9ee59dbdecca99e9f2eb9fc0e74a259c43d9c4c4f14a3b31fcbe4938458e7663481f6a7c5ef7b1fe9aa503c94d2c9acc6e699a8969997c047e031a27fd3e80000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012c79522e44c685741a276d643319d60d02d24e4bc804581a3e2063b1d20f6478032e4001b735a78c5bec69964aba3bb30607d4b8aeaf447fc58cea049a67f25d7710d59a9c71de16858368e53ba467e12d6f4aac2fc4bf2084accf0a51f0651b62020e6bdcb8a76adcbb96886331c0b89352cde414ec5636a837aa2106d1fcdb690000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002395e802a96997bb6cd3d3fb02cf50bb17f2c512afa9857d9cd1164b6d317c36c9e1e7af4685f8a88f02a03a23367913befe45cee10faa78f3f78f897e8b3546d7e20fe547302c787b2ef4f1c6690a9aac1b693e07010aa611d49b857fb66561cdeed21a2bb8a97d58fbdab67e6da4b8a65e6d2cf148739c2e4d49b4e1c6927dd5f8f1d06c014374a93698c0b525b8fe654cbcb354a289999953ef4c69ae55eb6823f1a8ddcc5f0dc01651df1fddc47af293f10a53574dbc476dd2bb1257077c0553adfec95593c37b247447b2c715ff3be79fd32fe909d5181387bbb6468bfa424caf23f30eb67f082d4584a4935d522bbe88e969845e12caeb3bf59128842fc39c5edc351561961a6cc4d18109a600dca173c2667a2ed8d8216a1cc8de4221ba68849758eb348d496c6b588d6bfcb3580b3018a03a2dbce9544656774a9f5245b374d1a215b868a4a1ab802cb127e4ec336b15a6cc8a75d1c816e9a7a0a63f29b968cb62afeb5e592b6cab41bf11ba9f0dd4fba07c2ebd518b28eb21afc578a68a22a76eca1f33962784cc2a911408f719846b98bc8bcf6c60107dc222cdbaf252bf5394d2b814cd50fdb9f22b94e780ffca3de28382f028951af9ff92ad6500000004000000000000000400000000", + "268917bec93cf395d14dc7e81da2be7cca9ce70ed9e63178c4c5a43c732cbde30000000f0000000000000000000000000000000000000000000000000000000000000024007bee053f601c8643b42ceeb2a0510b53afc1a9844ec35a837821a74bd63e2000089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000f0032e15d21044662c77a60e70eca588277f442bb50928b35d14d40f16da9d4ef700005400150306ebcc38fe0ef1eafccc489989e16e4de4acedff79ee5c302adf76845964000054802bb7f2372436ecbb2ebd34734a7fbce7e41962fc16f42b0c006b3b074082abe0000054800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000070dbdacc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad2ec2c024faa2d29c006fb45b0d2884240a90031618385c7c2efd4a2cfc8f34c44459ec0000000f0000002400000000000000000000000000000000000000000000000000000000000bebf73001030a5dbccece2742398a9b8bce46ce2ddbf13c47867f275506ae346d0b01d1cd03000cf3f495288eac970b1bf91b0836144286cc7e0ae2a522f770494f0713b3752bcfde826bf6052f0d9ffd4379512a9e479c9d912023aa2b7f3098a4e5a3a67e097f67f6ef2f0a4fdff12a9d86cc1b0d0e8bc0654357c58b4e4d48fff3f111cd0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001975bd84ad66d9a71c23c0baf7c3b84599156752e33a98325d5f3c861be220526ce03455209cb59290f070f692e909b9e1f139ed314ef4fdca03d5262866cd9cb8825279a173b77c52dff5a6471b96532e509ef66cc866c2e7737f83fd3d2e357cd504af7c032c519a5a0888e4341c221f29689f52a2b7d6111b3e447b72c68e9c1742a0f048e461cddb151b381e444c0ca2e8b33bc811fad69208d7c659f84c1a14650b018751213a3f3bd302c004c2f47668517d6f81f90a0a260bde3c71f6e10b3d100dcbb545382bee0f5fc6278c46f80a0823535001a965a9e34f54b171991fdf6c8b0e3b770aeb2f5f26f5ef5e531f608940a955f57f3cd5428a3ed100674309d88beae8ff59e1e71aab10021b427738542a34943de7bdbef92bbdf57ef1a9981e340c05d8551c59118031885a34ef4b1529e3612b03c09357e829ef45e6756698b60891cf32abdbd8b6f64f85f6d4f91a0483d970f1be378185e36e469895b93ddc345280b3e042a2934733317930218186c51077c26a1e207d0be49dd28e63ae6e14ff488acc7e9df825d22bc35128270f2beac92d342b98bc7ed9832e99134ba5834b999491d4a949ddf6a7c5056dbbd4c37e15696933f7b7ae1d160000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011140f2fc3c5fa746e7144231a8569e47a93d1a8c3ff00825d132a1b6328e54a203005c1679a6334b3f5df5fb0735e59365412c76788be156cb68231df158972dd8094e82a2849f171756cb4b615e28821a5c61696f38f89f09763ff7f3fb38a1611bf38f2ea699738d8e41aa298f1762e11db7dc8a1684bdc51a8b2786cc613a2e0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bc0495bbf1623116d48a9e9c6f38bcb5bf67ab592a4fffbeb25512144b3eac9b9e1b880a591d26ac7da78ad34359477fa99bf5722699e440886a72c5907aaccc0f3709e01ed9588e85611c11f3f868682066e195b691b1da8c149dc7f99ba06f254724ea7f5bf5073a563a7c15090ff3beedd2393f4a5e3b3add4e4a8490f6ddac2a888d4708d3e39b12b8ba7fa35281a64beeb37f171818ecb517ed8cd784e0e65fac491c2322555baa0c7ae49305f17418c9db2ba08a1f8d15c19c89095210c6aebb843205c99a3ccac9b6e37cb383a83bce5a51e7c590807819d811f088cac76ce57a163c4af766de381669d8678a70eddbb55936d3f9cf0b6e6c62e3e8d422bf5b334aafc67cde8a6aac96838c249adc8577cebb99a176dff3ffc6895d3fe4a4178cc9aec2d4414e07f16d44af6c4ad84c522646cd0b30003c66f4ff891a186278e7d3c638fbaac7f611e2858228604d03c93cd8274ac95ebd22563d09d6263979e07ec2f5e469f7c3b3dfee5099f8b544aea6690e3c8a067e9d484e129c52e539e89f490cdc8400650a86dab8dda98e51021c353e9376c78080e7e67a679fc623af09d4c7862cd4a69de0c444b62aca77a847b4a921d879e553fb2bd3a0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001080260e25ba5c4119f46a39a60e66fe7f1aec236974742799aa1444a3d4fd87f03005ee3acfbd488b3ae3b115e95379de086d9d1ff333014ce3817ef42b4b8a7b41cfcab2a69184ce5fd7634539115b83d31c52daa16a7943ee0b284e76bd2739d047f184e2d53d507a75e58341e739170ea32639f57a56aba899b9ccaff8325aa000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa0e9844524a0fcebea3ba26306e6fa304406ced4d9e5b868bacd81eefd3cf05046dafa2f3d521aaf89001bdf155310df3d0706eca8c4adae66364afb24fea4cc4c58f365cd79eae6e2279a6d554fb7f1d56af408c4a72bd26a9b3344dc71e662c1dc44f002adb02a2af7fc9c87173760d60dcaab20a94bf11ad320356ce16ed90dc1df3432de8ba82a0cafe3679b76a20fbf062070606d8b0decdce67ace323dc6091485416a5b1b6619362a5bb43531f6e31d2f934e7b0c971f1bf09180abfacb1a15301d3199d5668c2a4d5d6c3d933ec79d6ba28aa4b4eb793a6b57aa300561b6991da0f4ee5f49598d0e93039caa3ddcea2ffd23e16823cb8bddeb6fda32329f23722e18e1ee9830f87855fa040ad105d61401b426ad75e5075b0a24a3337c3d29461d6a09e4433cf9bbdda54fa95f6addad93ac4792b5fcad1df4b796c573b57c918b088017c8b85c8a4370422296c42b8eb1654a0cd9ae76299f28b13888bc13f71614be53c4283ce7d64721865ca774d8d7f297db416cbcebab9773a9047778ea2b2dd194b02011a26abaa351092a24cff7d1329ea0f3dcadd10b1303bef22461f1ca22addfd4de642e74ef463c1ac337a62baf3d6c615dbc64476860000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010e7100108bb80bf52f1439fa95a9ad46f6ef05dfa8df009879509d6ed0baa58203055587f09b12c55fd211787cde91b3456254a986baf450481b08ed37cb1ad745237573fbb00e155fbbe29bc65bbbfc5588fd59904980e685901df0e622e3d473237576bf3b741cf11065a431ecc2137deb86fd90a0cc747465c70ba4c1afeb2800000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089b3f08571ffc3eee580edae07b6dc5d0c436ee764f1102600b96457d3bb7fa87980ba7100f6131331b0727eda23f5a13a64523833a368c0c57d6989ad77b2d7ccbbfeeff12e4f408e795da8fd677a60da552d38b075f42fbc0e5a5485781d49b259eb6c916f7cf2368eb1923f3b90cec954ec4eb5ce8c9f410f0b275549f481b1e43e99b41b22d76dbe7e81742ed1a5082736987724743ee275a0556d0ce48801c3ab7d13906fa1ea5cacbb5bf6691b8ee3e9050c7c9390e89541db55c8b4eb7e918b36cbeb8832a4623bdc0b552926a3c192b62e5d2516f3b2137b32687aca482c5c3ad65cf5c03caac198f216efc6119ae5296e4ed86c96dd2322a1f150ce1036fad1409e7d48ef6ff41514daba4b1812fc45bc8c5ba03b77788db73a1296e3b8d5f9afbe29c83bcbf6f2bcf1b3cb86bff275fb16aa3ad0c13b7c1d92eaddf172f904d386db03c8a2dfb0e36448d615c56d4ffe2a8bb18bf0c4ee48dfc08eed8e5841522da2b912fae3f97af617d68c311983ebabb5d2e0e1978fb918715d85c4af118f47ff0c5fc74275d9985039a632e2e607e0d2f5fce7711601590e583caa0f03d8100cdbb0aa1c418ccb516e3a8855a59b10c3bdea19ca19507b53480000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012073877663e15a9cc92cbaedde3e02d1798fef36386d5812bbf16a0d7c375a5e0309060739bee6437d08ff5ba4ebdf3e6364ca7d8ea3bd73d21bc7f7068cbef7612ac3c4b4089f10ac955ff5db68b6b4ab3b228e2e990b07b29d789a265d679e6a2a1663f34e908e2b435b0f4fe9e9243cfe66414d9af5c3ce1914f0ef0f0ff99100000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098cbb0730f01849656f33f66536670183e1b4aa3cc2c3eee692cbac0a11f982d5872eb71ba84a1b3c8db4d96413b8612449fe7c99ac8fdaef3b89d39f5330142479c4c0e7f16fb1a0bdb5b89358dfcb7edb81bb05116a0acb0b7fa78663b23ccc9135a165615c5dc5a374e3f22364496d86e21da132d86ea872574a875d5a3420549ed84297019ca763a26ef61fcf01579ac907b778971f3e3f02036a0ff36251d1fa2052bfbf12b99f831ba3db398c99403b69f7ee8a6ce53d25443607871ffee90ce56e79407914d5618477086f66be9be7d36b3dbbfdb06b081745d58dfeb73357ad1a27ca36e0408be608dddb554d677b25ba93b61c9eede95e9b2a2eeac79811960911b2038b169d2484d7a8ebf48a4b4e05bc659bac83e8eb036f7d1449cd5eb385edecd16cdd1ddabd5afb8e04315bb726d31dfba814e35b9a9615bb4c79a49919e2e021a0ea005d4c59d7804b6beae9f67b1f95ce2f9cb33dbfefaddb3fcc2fe714a07ce0ea3906832d4d1cf304f4b9c3cadece8db610fff162c06a988dd7670344c6f5524969ec17a1c51445556d6effc456f582c9fc56a58542a510c5d21d49e27f0fdb5e4a9db781fb33a144e0aae16b5d0e4e3a5f0fd180b57520000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010d148879966d16d039e62e49a4cc0195fa977c78cc0dbee81d423fd59bdf6bfc0309265db4691316207536a97354f5eb02cbfd3aea42927dd0c19d7e42abeaac5d171619ab4678cca51ce65b6b0d99b7baed16d4d2702c931e70459801ebb3289b008e13e610c6cc90fe785897c1c6740c8678283da3c559e2544ec7eb2a126a11000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aaed8f32a620be37067366dc686ffd44368584690f3c71d336d5598744bcfcf392f10b7b5b9f1e44394648392034697d25ce68f4cd3c419e2677d292949a906539ad5fe36aa58a3c04245bbfa2fd56c54534a984bbeeb972ba321f91e47390c91c25b050df79f4e02ae0a02c6c1eec1ff15cc26a9b1567f9952fb35e231b422050edb9765e7654ae2f4f03e6684d6aba9e83244a38590e1d770ceb770989fa819fd8ca0a9b8620b2cc6d282c96ab410ee11b1ec1e1469808be65991355ca0837b80b7ec30900c86cce44a310f8c609f662af4500ac693b4ddc770242d1a799472c3b3ccab99f5af1c7d5c9102b5333f02eff76af4fa21d99897e4f19e16a9df245c1e5518329c1fae210539078b92c6ca87395b6f6ef3ac28b079c57e58b62e4a891850edc9e2731978fbbfefe073df20945de5576a58f52f223abdbe684ef2effa47da00f0620425ae158e5f24972500c61b931182663dd9c707b40face46432c50fa39eb372995611c11683be872395f1fc9bfd71f6d7a88c7b3ccbc278b7cb4e7abf36261ae3c751209178fa561c08cf83273e1c349aba3406aaf515e34b7317a291582b84a35ad3a6fa95388f87980c6a91b0cd91cba094c9400a4b26c4f0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011cb67ab7755d171b5346211a1e4fb0ecf5e591364b86605791d5263096a39a1e0309abc9f67848056913fac195c1bfa1e15dddeafe5c0c6640d2afbca76b1e185f0c12cb273398a12bc7546ed8a25ef481106ef89ae4c76ff4497224a808759a4b2c178ddb66c4e22bbb0e7f243728874e4196d5863107426f2f1a59845b3b636700000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003013331048de52eb6bde6a6e8dc84efd0e4a5920d5dda175ec10f7c3c713d25125aa8b1ded9e406afb5557f481efbd0b6f8997232d9fe3a2a8b77ea5d5ba05b9ed79fa16090dc78fee0289ad227a3b8891c4a457792c31b0cf86ee80a17f75a99b0e4f5fde59a6909e9a1439e92bec537b3fbfdd7d0f2032465797e8d3614804ce88ebb57cd3c1fba3341711ed2e3c1a6b6d1b8c95dfb62c7829b2cc3b3f6072b7cc35593629d8f970512477829cccb587b3e20dad9c8d0db214af0da6c7b20a1b92d4e38e4f053493e9b62e4a11706c2b89829c06ac857c0afe20619dca1756b903ab713417542fe2a38debbad9dcb4d51350b107573af164397ee15cb148322abd18af0f9acbcd247896fc54a558856141060911a6db8a0d88ed451e04cef0ca36cb42c086bda89c9db4a6308b449c0be49712d0b2425ef0c3043e10d0fb317937cc66de170b4fc876aa0f714906ff4165a81bfe566e2aad16715952d54b03b39f0a34bc0bd7246ca182600ebde54231e127680ac735772a6d490544eac8080f33c0bc98e615b71bac863ef32f43345955d8649f266d34e25db67e1c70fbb071ff0d94fe5290e193c265d83dc4590d4dad2a6c2b90b77406a4d5d0e53fa590000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001132951142cfb65c86162fa03a0a5592c324f88d95aae1554183500aeedaae594030abf591859ba3c55867bc72c4e02c316d725e5026879d8bfbe2e55f115cdb17b04d25dec44ee988745a8e0b5313418a1f5c640e46e4c2fd5defc5eb1033e230a2d6504d0dda9348a49d3b91d429fdb02e51c569dac0d126ff4ce097e0cd879a000000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091be78d731b465458f12f31a4c1ec80643dfafb5421d60b048a76a7984ca5b8d7a5975dcb51f34e5416a8fd34f43464f2d7c5dcff15ad8d1be207de8833704a877a8dceb9c43e72b1273ea606a541a883dd87324f5e3f079af366baf3236bce886b940a9a40bb0fa85f09d7ba03e055ed169c360ba5f57908cd2bc60909c207105b5f4881a6261e82842adfb98738adc62b3fa795e4a34548cb031246115de61a248654acfa6db242b1bc979a29975aeb5648827893e368308027d60f3b709b0e6749376513dd1964255fa39214c1ab938879de80e07b2787e9ab11d8e0854bfe6becba98be142dc49b240645a89b597779afd640c5b61a8f6eae5b7803e942b428f320588171bb23d62815e8f8b6c854cf4729146bf4690f3ed39f1b2857b052933731eb7b18d0f2b78ceb9034d2b67cdfcf8c839cd18090f29b965a52b10b07b745123e7092420b17a1d5ae89f802643689fcb8caca8a91d4ab781388d62a296e1efc6a8fce20c7581cfc08b5ab6621ea1d4860f878bd2fd52e49f21521d2fff82de3eb4c595c6667d968e3b34f9393ae4fd659e75d1c452007b79419815000ee07909fa840d5496d4599b5e6d105539a8bddb39d44507fbc0f51f34cbf2c60000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001054cccab09690fd62f9314c7c5ec8f4d2235adb454ef08bfa8f61ecde4f84382030b3de8f8a9fe93d9ae322f06aa5f0d07b9a02e283f440a528ab1fd7555087e1d2de91bb728cfdbd6bbf4b5bf1cc599348ed6f598ff658b205fac48b6e5ccb86819a4561f4c85e1838da59ee6048ccbd45c23fa5266ec72dcc651d992347e732c00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e87eae83d846b07a7c5dfa1556b12a115ada5d03d5a3d6df907a408b50269a24bb609fe2b4042e5698c7f9dafb7a09e94bc3d61a4f1107d0e078d775be762aa9a8cf2da5bd3babef73b559bc5d2c5c3c244707ccf4c2567f0919692a85b980979c4ef1df3f3e2a8b72410bbb83cb82d9cc85d19646499ab0824fab58c244ddaac2dd6cf104c175de328b5b913e09524ac8c62502b9a70eefb70fb0e2064e0b9c098ae62a76d10277063f644b67753bb79a5ff8a2e30255adc087e5dfc7249fd640d31da1a43494bae4c1491ff94f55e4ac1a060906c3bbd63b9308b02842cda51869e6252be4521dc221ce0df9c691b38e846092fa342f7bd82563bcfde1c1146f94563104623fb084a04e5bfb4831e17b1d729dec6a37e4af32ea642e0faaac1c02817ced59b58fed1c17670f0438dcc38e255ef6d8730802fda78026120e338c8e37d7552e0623eaa2d2ed237b50e95d16703884ac3430ae0f82e0f8d9504726deacb828ea35743de8755a26655dc19284ea8b58448f412bd280963daf8a4bd9613eb5148a35654420f65eda869ebde90c5262e9a011e333655b102c2b887a7febb62d81895993baeae1ff4e3c9815ecdfa3024b76760f76f710205118c30000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012a84ce618d8f8528e82d0956b690559e88a2be8ab79024928201cddcafdd5aab030fdc4d80b048b1666d2d43aa374dbe73ab75a24217e55f03db9480b748ef2843261ef97840fef16c1cf126ae53c2bbdd070b8fa5ed46fd20f7f55d7cc4af092b163cd205bdc7397e6612feffa60fcc599d14f4e868daba7dce31da3a4b678f5b0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ad4a1a73ccba8bdf9a4071bbe556f6251a1c8be6af9cf441f3c0f07b335005d45f129e77fd99fadf2137d511e3202e33d6350889c3ff0112ec27cdef4f1fad354ec002977eea68dc36f6546bacc5b1930a678e97d91ae5a232915f6623764fda57194ccfe1fcfa16000c87d69e9b59c17e147410938a78a1037fe1e06d1aa9ac1427bf7a73720e1eaa8af135dfd6ab5597dfdae98b56b7498a8132f1fac7f08e27f3b11ca4d236a645d359652f813658fec5746d0304a29efe8ede7123dfcc2869e06efc9c0c7503b134215361e7eab0dffb2b22eaa3b6386f567d72f60491688dd5de707f7d7402e9167d11cc5b5e905c0ce61874def97d0fddb22b1d0bd5d3ee5917c36bd9c2a403853908b42115cd7c1d49d1bbd8ea35af4b6988eb4806fa26110d4a80b45d4d4807da80e21c51ca9ff5e61daed58921e5345ecb5112c779ab4baa4c0b3aea6d4996b5eee40fd22c0cd47c2e8979890e3e4f4194909443c44a28f22cbeeb51a7976432e4c15c157980ed79aba667683afee032aa26133e87d43bcef3a5eb29c60ff217618d8955674452063725109cb760c5007fee483548cd9f9bdc203c76d45cae414bfef51a08e0e9090c2dcb70b1093d3c891d5140f0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300125352e9420611063bd7fe29b3e79a3639a468616a442eea6ef48bf6f2010488003100031df0b8377f67282a66909c58675c2984841b36adb9912e388f5e47d72cf1746fcd80224e927ae63a3b5170975743255114981986ef38af9ef987dbc80f81d523829fa49e0bd6189aa81ae3a8a7a5d11ae0b4d800dd45f8cd31294657e2500000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004ac251317d0e2c9b279a3d57b535e5a3bee2bc87c08ad2bacef5e4872ebb973d759bc538c85a31f7932e4dedcb165baebb39387b8e81537b4dad01bda509714f247f7e08b8000d5b3c56c1ca421d2d7636413d9d3df32e43fe7bebd5b00014702d23ca30e5296a95f3b4493625cc6632139d0245ffadb2ecb75f538e98862de2e8011945744ae8fa24df3557d0de10b886862361188e04b30827b2dd3705ebf694448a39e4bfbb9ff5aa271e46e8823c9028baf8ee9ac65b4e5b463e8815a98b181e7a918f8b6a2f75296ea29771a5a0b66d80f46c6dbaa835173b2f7ce8decc98eec1ca283eb92e7034f7e563d4d529110f4bd0ea21894266b8471dc29b33d26ba011550932559714a8e936f51200ffef3340ae216a5e60ba1f601a01ca59d6f62987f2099f1fee8e1f75f729f6f8bdb0ceb653474aef4e6ab41a28d576ccf72b0bda6af44ce3dbcc2a497c92e4a3d37b59b8d91b34b6b824e6c89b55733161aeacce69886d2ab78121cd4a0791b80bd8aa937bff5faad16ec08e5fe7e3d20c376557ef1c5b1dc0cf335d7fda94c9c599c25610a077c75086e76232957c3a323981c730ab6c81cc1372ca6dcea3f72bcb4a8bda0c05a056d3fb7514087dd8c0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001240df177877ebbf5b7d7b120421346055b73d78cece90ac47a8de3b46161d2b60311719598e44e11dd6397130ca2a0ebd7daf9cec57b6090a255070fba9f5036b91bffcc72c3c74f3b0fee6b224e40d0e7cc0d5dd0024c59cd36131b67d7035a590fe2ffb52d32700c371aec5333efad7d8b74f925955413be36c9b3eaaf24430d000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a85f45bc7555a291fb8d1d3d822caa296ebded4597922e0dd688beaa3d7436109d55aef5982f79197f64c857d2bba980c82041adab955315ef87fc3a737b8ad894f14a4b60de1e7cac4febb14bc7e7d4caff9e02bd7baba05984df58c2b13fa7f8db98c7caedb374a4e0cbb14fff67c67c730aa91fd7ec360ad64233320eca800a93894db76f361ab673ae23183686758602469380a46c7b7ec61679e93000f45d4374c888d9cf522ef2f806aceeed360f1cd22a7b3c22a7b2656178e4df5a3963f00721fc82edea8cce64dd9db8a85b4f4c09447a44ec9dc78d116a7a96af5d9537d592c19f973424d7234ee8476b077c8dfd9bb1a2a2a0a944c502c319a4c3d5add79accba4b63e97e6f0d73d5f20f9b2e8d562582bea3536cc0c45cea9cf0d99453ecdb63c0f63cd4d06fcf9ea52b476367eb41ef6a3cf598a53b21785a622692f90e41d3dcb3cde6e4077134b1fb8813b3cf7eef185e8379d657a27f1d97a035c8cb145ea355a5eb46df58c99698373579051126cca1b55eb1b4169e89adcf215fb9ea056f1cdbf775e3a786b9f9b82de3ffcdbaf870715fdfc075cc0fa1e94625a6b4320947d57923387ba7cd21d35b5ab57d17ab93f687a6954d95e0420000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300114dd1e5bdcaa155fe803f22262de13680e213bf81f5f273527623d387f10b98e0313b057859a4af33dc760fc904ab3210f9e6ae84dbfb513a83edc9117bd07477507398273c255dbf0ad86988c8880d570cd77092b5ec998bccc0ee33872072216237e1f22ffb168b00e702e9a78818e22e6188b38348fe875b817017e8d1d33b20000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009513964bd213d03f80eb663f3edc9ad6e02276427a21397f5e18bae4d7e6182476b6018deb9ddf53cdeb9b4ae0c4330375fb6b0001a5d9167fa6a270bc19e18bc06026ad7116fe9a867a9923297a9272d7659f5df39261e028a8bb35460ad6129e524d0419317e3201fb552d79dc63b72de7d3cc61084d5b19b5194dfc43878cea0485c2bbca0efd1a3bcbf3b5b25c907fc573da3a40dfe2b6d8723a0e51fb0ffe94866175073490843cefa1f837cd161b4ca604002bc41bb2ed7358107cb59ac763f9a5635f788524578af65320581bb0d3d3ba32063eb5496874f44d0948389fa2985805f016a7e891a1b6841c2dd720473a3be6b82e950f900bb7704d243503556224e8844c67e714c52eef59bd45f00937aa2d592be1bd0598141a94d698ded2a1a30149d45bb06ed196f8cb82113b9dbe96ae8d5f5be632ce25fb62a2319f05fd1cb12b3710f6e37148a23694db942ebda31c8e6a92ceef4df6e8dd3898b96eea996f7fcc5efe28dfd8c55d52085ec80eece55b5d76a8e21578b5b75da37cac0d419f213138cf36d92865a7476bc87e23e8631203e7927639ed39297d137a55ee91a610c7c133aee7273c437ef92667f1a38ba5b57d22562e50a5e2e6600000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011f7d79eb1d6823573f0ee3eed7147b4fb4cd725b8b12ae7f2eacdce551d58f5503148b22711a6442847dfecfd3cdf4aaf0ceb0ed12621a3588471bca3da07cae742ffc7936643f78c11caa550eee5d6a9e287f5198b36959553f2d637903d5f2ec179d1bd0a79fd0a2b52908c8dbef56a984cf49c55daea8685fd7bf378b6b1ff70000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c7899b22cee6046438a1e0ecd277e375eeae74d58000c505c59b043fdd190dc0c4987281616235400c00438fd0978d5c80f3334c5fed78cfb7208fb5c04ebd0a768b38d51d0e1bad2df1f44df5f2d95c7a06485f68d2f779396926675525df66f61db768c92222ba85529894307fd98aa1bab8e7a1fa28d582d40b0e14bc91c3e81c135308a4d0ad972a4ccf3d30911127baa6854f52f12fbdd452c1607bf0169e1650af1302d59220a43ecb8c1ad0e97cb98509aef2dd364aa169021799aa8afab2bbc562663c496a42318db43c77d1aa1de367af2ae69316baeed071d3f03eaf51d8ae743cbd09777fc5ef5e89010c2cae3d8184d2e08783ba95acf3ba32311dec0688af5efdf6b96494a5e1261ac5b621e6e6a3f35e1d361fbc819d614e99555dd2b623a13e97f2d89849fc045be97fc8cb706a77fddfa8aaef24d04c6cbfee347926daa7e0b4623f12dd7ff331066556dacce06e38943bf6764e5e55f76643b32ed5f3ed9a97b3e1d3779d36745b41400db4272d5fb1a30a312923e8eddb067f597fc05c12a74a9c0e0e82bace303ed7dba09f13058cf43fcbd4d278248fd5b6d374db58248aef88bddf8579fe2bab0ff4c57bb9ac3ce0e367e4397e0e50000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012b189f020b87879b896ec74c713d03bfa8692138c4100b8b41bf21e8201e67ef0314fad8876c884a2b16a3d4210a7c4f2a6818cf5edf1e430843ac4d485903c0c1268e11132b43b69bf8422508bec4cfabf3c73af0b19420086ad77d7d5210867329b733723a5c2d92e4d0dab30e38a3441b17ff479bcee3cf7c502ac4aba56e3c00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015e98c19ea29d06077d816aa97dccb710f558fe62442e5c5c4dc1557809a168d8687d212cac59368882d19d1cb74fca095bf343cd0e4631e3b7109f6fbd418e7c01b14111a640a0a798833b90684414f28366e14a4c35fa4d173d75719986a5b7bf95eff545cf74824995712b77e3c5ba33d83be02e00d7d819251ce4bb5c21b64c9d51976f56b66cddc293ee9787eb974d312304d79d9fd21e58e2150ff62ac40f8d7eea8dcda80a51440839ab511a75cbeed302254236937fa3ba64fd4e70245327278f7197ea20bed3ec391be26a2ba8e9f3db39d066121b1932d0d590e09f08a544fc8d9de1549574f4f4cfea0c24496ac224da07e55fe0a7104df2d87384167f97d62f17f67773995708664e876dfa78b6d6628568b65299f718f51bc8aa29c6c7409037eaed75b8f7ac64e5531a4e4a404bc7c652ff3623c3ff476729ee18445b63382eb923d6ce510e8a8b7ab0736364c21aef7a5da13f271387297e9bcd861cf56096c5ff4c66c9389b57e15c5884b028bca93ebee08951d65f3d401cb902ee184bf9070d8422b210f663dad4c6de1191d6b3837258eed49e03a50dc1125d071f1cac70db3566295d47f495aaa6a79fd2e2daa25f05c3b669be5212a0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001047beaef6044853295652211d073a5d00d78a0d9c9203f8f12f3aa03d65e3f0a03154fcc259f7ad58701ece3ed3e58df31881a596e173f58f85a3378405394072a29b4a4f4b11e69c873ee2849461c47bbf027a5fc044ed7640c20aa34bceb3eb1143fffb593985b475450fc78c47058a2e4ed02d8186898c3c43059eb02dabc2c0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d3f43cbc127aab8c129fca3a0adfde2da34403601fc264e75b3073d8367edb844fd972a88a1716f067cdd143c0a9b6f8f76ca0f112fa600ed570bb65c1e2c7be602defc4c8b0ee75187ce433c08fc18d2e6a2359d4b7128212c871e1368c10ff55a6428c889813885b3e01906b410e62c9ca805f78beced91b41e99fa156207e2567e3063e25e04493812eba02628be9270cae34d915ae16954b7bb8a0f6f5f30738c99841156da81605e385e734413c593890463f0e4732bbd1364283f90e1b25968c81393e57f6e23a88e77bfc050790f09d4c451294134d0190c2793ec723b162d10db77df351091dee40fa2276ee53b34a958b7fc9f1e0e3ea922206095487bfc3750d3b4f6d07a3a409c4139fcfd201edde12b71f0f16a9d39cdd0fd0f7dd1c120a54251437a241359513983ff86de19ed43332ddb904dd065e605b002cfc6d830f264368fb81bc4c4f2ed91cf06f1d8d0baabcf7c33de818bc0d40cfe61ce7a6584a1f207851de5a3585304be89254f786b370fbf8b5d14ad1ceb850297c136b97426578608daec6a4ac935eb7cb6ed739b03cf3f5be26c578ed7df508ec3797ac0f14e0814a148c9169da3b9681a47b5587678e95695bc58a7c507ee0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012512b16e659a79c04620fa509c2bc96427967d4500a53bd74e59fb4f6b12154a0315c2f08a0fa21f222e7695413cbebce7508bb474de87fb8455e8615c5fdb2e520c51876f550aec65cf82d42155b7921374714557fea317e820e2f29b14c3e5f42ea08256618b3a06597ec5106d553c1bd14d40b949657937e489c2b9d5b7d8160000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e28d8406c0dfdeb91caaefadee3865ebd7480d40a178bad9172bb1ddc5185c3697ad19e9b47eefb15f3c91b2aaa4fae10d14d7833c9d53a97c65d64dca5c246fa812d93d9eea92d631d83153e27c8087f6a5ef9bf3bc40973df7f8518662d8c1378ddbfe4b3ed063aabfa80f3838fb339253d875b6e15d31f9cdf8af179d659e3a68126529e253360642ee27c42faf8d869f995179b25df0f5f0d0c2c08818193c55b5f54fde412bfdaa41d684a481305fe7caef417beb8bb3d03ddd8adf18a51f97367dd44d949e948c62cb577be22fa8e945ff8975e6ce5f2ae7517622cd846415c7852500806a768bd9e584d0d952edc675aa0ab0d43e1c6a5b7d1387b9a26a0eb7e4bf2d0ec75b6d5ca838a25a48ca1e1aacb6d09cb6a8625609074a048a77723e6a1b63710f85241f36272c7ecce47330c8b47698b0dd2285c1f315b5f3b2f3260670bef1d2801b60ab90f17e850c160f77bc50e037651f2443f0238a82939b965db2e15b45b2e2c6786a030d7aa96062930645c5a0ecf376c8c55d17f6fcd215c10c026e670eb3661d8f0249b91ee749b254eecc10702c462c5c09ab447a62a0d97e1ad0294b00d721e3203b73cfe070c607042286a1dc1c4bc7c1b520000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012e8a17088c861878e2cfbe25b27ddef98d9a7f17a2b478fa0e4842b7a2b2e79c03160d08e2272239e96b475d36c07993ff5d218f255e8ca5be3da5a5029cfeefe11626a8452e440b6092e14cf79194c850ba4a64f8bc9ea5d54d5a97bf99d0495c246300720aefffe5a586938ec31b5c36f6ef0ccd0b89bcaf2a6d2b34bfbfcbc4000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000261208d9d7920f7869d8c8cff765274ae40c34e6207d20bdd87b3e8510f3836f142d1f3ad089c4fd93e1bd8af1f0b2e2fb1fde3b5ea53d0e3aa974d6af28a815a1ce884e298737748bdf72029063d3391373aec0b4ea390b11279c43266ae4c6646aaa2af97bd8cfdbd21931280c201a4d25d884e092247e6a5cd25f7e3e23f71ab7eac19d8dc387c6781ed17b7483879804a52a797089d7d95c75821f644d95800c8721e371d7eaa2206554c82fad98d1b298508cdadcd7b56ce31c13df0290dc50502e0a70d26585014520ea7efaef05316e2fca3f4db236680e38d988ed4b78ff0cbe100dee8d7a831f343c2696e4bce03f5296dce537e5dc77fc990d0bfd9ffe68a03b2abdf569bf329d74aaecc2d204761cda8e289c9688bd41df32fb2afa80885ef280dd58960b52233c199f12645e4e90d2a3f40eede61b5a6528a8c6c165d41ae5eedb2992cb1f8aef6052b1c1d69fbf461f05d26d7f3600d2e540ed20558f8d884c823569af424066070b09fe1a53d29063ecc1b492bced074eb7d6b040e64758d9586c9c87bc904dee7fb677358f401405d01738f139d99b0fe8672c4189e329722f731f451ed12ab4dbec4f32b7396ec9c45060394d84635ed1d70000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011e9914fc45f9ae4a535acbc94343ce8f1802560f0fc1f6191039b53d0abe7fb3031771a33dece40baf8fb42cb335eb26d8f87d08e320b3259f84026c72fbcae3e829ebcd5ca44de229341c55df0599adad06449dea37869a446b910db3d2eb8c881eb1d7b7890b93896930a3d286b4c43c4117ddb1466dadcb205709d9eb7c9c7900000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026bfe68169ca5520e7cdd4c5ffac6671a84d0588a3d0a481122647f37d91f775359b8018a945699a562bc637cec3159ca94ef9cf1501a1192d3a8ae97e0812a4c7f1eab09b906f3ac800e5fa35a39b1c3dbaed6476838580fe669b6d108e7478a779a6bb2403bd0f84498a2b32fde98bfe43a1108758e0f9185d6fa48116e5ba89faa298ac3d8347246163b484966fcc459fc5d01502c6afbfd216127745557e642927a121dce6523567ba1bac245460549c2a28c1967caf0fbf786d3832dc835210bbd7d24bdbbaeff0457e835e3ac1733601299619d28a387c42272eb930beeea45e02d0c8af574b70977a8bb5100c0e6fdd6372aa8c97dcf93e45cd57b2b414bc7b4f73e15b3b73a583cfc25825bac6ca99cd39aa4e29644367e03dfe42782432d0dd9c13f642299d523fd6bff855c7fb7b2d7755dec9d664424fd1b883d517572b8e0e087f4c255cbbf18993f59fc87e0cacc24c810ff478b93a69d1258b29aef4fd376a34c0684e78bb53b0bef80fb6382f1d098400e4cf61c1c8d2bce7fc96cead7d555d6fb5ea83d86f545a4d2b8806d2cc4c1e9e60cb071afcd9cb34cf9c2ffdf713d7ea2b8ca4c87513374aa2beb57024b28b97bb7a58b4c402cd620000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012fb44e2d35496c8fe42f8109f4f820eae6ce17cd1965ef90620c337b48a918a303198ab36a4a0254fc3cf449fca4601a02329fa1de6493f1f3772dbf22e363f4d52fafbb781e414d52567a1bb73df77bed97f24d7243e8a40ec20877157ba1e5052904a94dcb756d6bfcfcfe422e923ac5b6919265f33afbac94ac101545a0ec940000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009aa12fcb228dd0b09e9b53c11df91af8310a9ee8cb81122b312b0b409d8d334f7e4819287a6047af7128cba8b87c90d74c31e271cc4e3348729773fd10779baff0f800b33227a12ea1449c6ef036221a7e7b7339be2ade41141cd858b60a831f3d9d7bb9a060eb98924b88a7635bdaf1c8291aed6c4efcae6f92f4d9a852cc93490d025b721a7ff2c4b294327c7420cddade693491bac2b4ea1a5a78b163105ede91d4b593d80ecbf79a883ad7ddf5fb9a18ef644dd7e01c14a1dd2ab298341b0680b24c06346c52528f0ca43c1938bcb6ed3988e60ad52e1dfb4a346eb2595529d3647e8fdcf16b4021df2e835cb10f1002a0985b9455683f91d95c1800b08783fa7c578c95299ce062ecf73357bd833d82a04771da580f54ef676d0530eb29b8f02a2ce96e9e9e2e4ec8c775c5b4c8d177de8993d6d3b27541b4b8bd803c0fdee816f2fcffbb5d9c85cdba33c5a0f07ad09524966f0b07311762f755aeea57d2611b159b10805c82b111fb4ecc9f720b77965aaec38caa79b426cbc7ab7b71c8b74ff4275e73f30585b5b7a5a756f6e61f845b917a53fdfe59c8d68c3661e73548c6f7610fb0ae2554546ab32ec6c1eb3f37aff4b577482e602fdc4997ac3b0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010f428957d4dc5c37055509ac53eeb7d6b4005f9dc50ba8f8c8a8fb576ee9ded9031c853c1f562b059e6d79de4869154b06d97647583d84523530c8fab5249e0c87240fd5f664bd638ec896a3dcc38122a8ea7bc93bdf6b4b746b6a56499445796a2be21ffd5a8eb0527d2ca1291615e110c356dc126e5b666e718a316661bffd920000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f8c64817af7308c9c8505ad6aeaf748091c2d2fd709114aaa71055597f4899b1fa01b291a0581773adbee739a933e55925c79e8ac515d5c075e7e7d765caaf13ddc5e1170ee692f43ab9bcd097d3d5e8c51d78b6da6379f800a96650787652ab4f49580de80f70a1dd2c9fe72ee896d40092f5594129f644f570f9912e712e52102c51305ec3fb30e8bd4d87680b56cfe10346d400018e9ea2e917ce124c52e27c5e4bfe0ed293e2c71d139587314be45efc7e6431d8e4925cfc7203657b932c809b6196b48abec7b2b7b64dc4d204583ab8253b4a6620d33ab8bf40890509253befe13923e637ed880647fbc0c5ff667fc1e377d350161077b4ee40e531dad5dba82032b7662faafa963d5455ab19be91d920a7dcef4c3c56b6baa87c3ecf08120ee6734da33cb201d589a5d94089daa89f7eb4da0c975ab0c21abe55f066ce7aadbdd6cf435a80d0785aa4a863a32c46140cf0376725b1c83daa28b3da483893a45965638a762703c9b3eb6d6148a7a1eb913f75e4ae0f060a9abf775f403fe19f6cb78d667eb0dbed1773529e2c80e4d5d36b84a270dabc1faad30ad996645be8d03db71c00abf66c43a64a1d559c37d7e18cd5aa572c3a49a5818abcda70000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001076ce99376f8fdb050b707585e5f1372d0f763506e5927d30c1a6315e88a9df3031ebdc8d54cbab6a8b63fb34eaecbbd01727d009d487a27cdfcec7f0b0a68b2b71f1d1bc5aac846baa1cba010e43c541d7b31ba2d7a3620f8585f9ae43d167d1f1d958749022a20334ad9aeb79f6c5ea5d51b679c022f8200f0f103df4e770725000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a697d02b149f53df4c3c5ce4d52bbcaeac5aff5773b3bc6b75a7a5b74c198b1ab90e16960c84b1b6d024ae92af1bbb1d33442954427819de672d75c68238d5e7baf7873b6cca8a6d7fd42eaec84b3de6ef150ff0aa60be8e3def086cd4c96633f76d9a94c2eb8d3f579fa47e6f6ce2f748e141d4717cf577f6ffc47591d39ca8f822a1f622b6116b2f13034550adf90baeccb4762060a6aab91c29e11061b0ce58dfe0e9d831d321cdc3822673d548529dcc6e0f239321ab7cfd092cb3da2cc0aa391d4c7b1d4fca72ad9a81949c42f9a86f34c2fa5bc79bf11a4dee37dc8e0f2729f1b7bc157e0f4220f87472778431f6b9fbeb40ab8cd696c550891604e3cfc592d8ca13ebf03bf6b9bd54eec444fc98a5dc595b90a2b12f9d78ee40fde1e8e64317ef706767aa52f883ccc6de4a76665de7176e394c9ace6eb883b7db75eca79c0e6b98a13eeda4ebbebe8bc4642caee6509ccd3616a5eabebc03b95cdb0423f5956b764a590ba0a8fa3862ca52926318a106c9a99c931fa0ef8a9237d407c7aeeaeb45d0a651efe964b23dd20bd8554a072cd434f5e71e1c4711e6f4f6b97a6d3d6e600551c6344ae4b8b5785f925a89985a8dbabca7bc6f645212483c340000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012ada379c1c71a38f6f7af585199d513c9e2cc71632733af72b5b5bac500b8be6031fd66069c931cd8af69a09ee5da30e815cb8eea194b7e2b2671631bc29ea35ac17802f8046090204a7bdf1dbc8a2232e066e37c943c993cd0ab9c8057cf0f882291c4f70c3f290ce7d280f9ba221e0185559fef663572dea9965452f1d142bb90000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008aab2cc2f84f3b2b959ac949c9763e4e60a33e5768a3ddde620562b111db901f47533db82d1f0813245f7ce28dce2ab40c172aa3de7f39e28167b3ab5c56b0a5c1c5069cf1b69c3ca82a83967da39b6e01df0450fb06541ef86f553ac26b36eba5c7aef7b4fa58a527ba5a576682f395ebf66970f15b392f19b3fb3a719acdc45e0837e6462a252997b7baa69614ac48fd994a71c0e7fe017974429ef443724fe78b56beb7a66a35f27d97b86cbd749ad235fc2f5c09cefe868c6e72f5d03933eca3026b5abadca52ea6cf33823bf766e89eee7685700965cdf0702361512d5296feb70c01a42aac71fb857b2f909cf035721025def087bb99b4c6f1265662687e7dad550a9befd53a6a8a81216e46eba84d493b58b1b2709d44cb2de91836b4a83cf660fdd46b5ec07dc6ea4014fef091f8ee278f84708dd8f1d75d011453c2896cae25244bcd7ed180317e0e949dbfd88c2a0484fda7b96bdcb124512ef48f4e136b211b0f71d7439a6dac138d23336797d2fb25f1748a66af4d7975b89977d5131c3ef5b517d50ae015588dc14324a149744853a399ce070efdb0f7ffa4ffe459b17cceb478640fc7e3ca24218fbf852eeb05d48f04153b527fed377cae970000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001149be88f4595f69b046f7ab7a97aca8a3068fcae8987f865aa93faf8b3ef6d0b0322c5add1db028212a27396981d0681acaa332da5169e1bc159e11ad6b902761d163c236f1096367f87beb1d1f8d361e42d0b63a9c6ef7bf2d5b3b16da29d8f040fb946d3d150ada64e4c7a99809406792bd381805c4ceae222659ffaee75e2f7000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000828f3807c51bb811882cfa81f9181905dbab5a4d8b54d9e3ac52deb35abcb13a34c2bc58010a882d66eac6e718d3a0d51e1157fef917d00670cee83773f2fa54c6d09551370e16b40db82072ea2b190ec104e4d24ca24dd39280e5e5337d5917c3a3749f9b69df0d103deda1287bc3a3ae18e1bc8b9a0b9d0f7c85d826b9cd0f68ddd7d4f6ea6de0862685a6ec3c5686a3a390adcfb3f836fbe968a6f7763cddaf363ccf44ac69a6e1bc2ca7e83c84366b841f55715625c3f4dc6166d568045c17a2b44cfbbfadf4fb68fe976c05dff805295da335fa334959fc5837179c765107a477bd06506a8750bbbaa6d365573fafc1863f7e69298857f7259c7e253ae268935064b057a9aa04838adb1cdb0cbd2f62a39c80832f40bc330d0166638975255ebc30f713216040c00400e6df88716f02b28122a23be70f0b96c9118635e5f5937b9d8badbe03f1513d83b817de6e9dcf22b67e5b10ea0d2ff827b90aac4c0ccf3210f2c0393bc8982208455e82670f1a4db52088bbfbf9230e58304c4f6d03ec59b4d4e28dc675edd29238a8b89f8d390263c92159073332bde46a7b0358d9f7c62e5dc31cb53dd7b34a4ce77e1d28441531bbabb6e711c7a5b6d22af9900000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001098f7eb3e0318c325fcf7fa4315c3e1ba21399fa39a8a66cd4e5e16b610171540323c8ceac928f996d1003037f310e95f157269eec5dabf7bd53753080b4ccd90a18ba474acee8616cc895403787aa6d3bf3cf39a1ce15efd70d660dc71d59a7a01360e87a250ed1039f206d2b8e2290541abfb333a14886869519f772611943f900000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090d38c4706fa33074b51b60870c8da1c25898bc536bd248f18194367bb5853ab7c2b04445b330e705d5bf86ab0e15e8a0475ef6ce05dd9e418a07629a2b0bf57cbe4ac0d2c1b896020a7a055cffdc4f399b3bf3b35783324b5f1a056e2302191a99b888f6c13783b6d77b07afa6b318baf7102ff20e5b7ad48c042c0c8de7780125f43b993451631bedd01484d072b71d4b41a9e62ba192dc70c431588f57fabbcf0e7310f0fc9e37d9c53d3fbae03eacffbd4883c8a048864f27d56e949291a5b02ceb79c6ca8f678a1622db05f3297bec5b0c389a5109af49eb9e8265cf3e291e6523e421679514fffa1ecd10f3c66df6e3c51d61b9295cb39d25713fd6d7d3cb0431e9340128d59b69d6abec50334626deeac92dee6fcf3c3bff79fd3f760c4875c511f454d567855f5bb13c9335d95dd6df5d900d2a39a43c97b529541051dff2d8fae6fa2db5fc016ab8d52b156231148a809384fc3ff65aa49bf9f6c1c4f35f23d392647e937363796074c649194cab23ad9be102843f91ddcd09f70f59b79cb42e0fe92c19306754b8f34e7669400b7bb373c1a79e152dd757946d6393e3792827b556a8779a54e5292b2f7e4915075d6c855857dcb6cf3dcb94b10bf0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010028e89ec9de05ce5ce321f63a34056c2af3fb1e51f3db41bfefe9c4ac17075a0324a7f0efc428793092a22be3e0f377021d92021dc6df3d1a01bad9eba3d552621cf7f5c63e1fc1401c814582bc276153e264c72ad9997102ee7a0983c90a4fa315de6cbab1ef1c61fc7161e2e3904853de4a1b7edd30d76c35f7a6ada89da3ec0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d68378dc1316e929938c20584bbed6895eedb0d854983cd254173f7aa30d68a74c148f9d48674731360e4809d2828c7704de60cc7266ec6673be8a98dde9e93b8ef9f3c49b4a6b8a507fe2bcbc63e13aab164dc87424960940712e9184a590a1224435a70a223529256eab0415dfb34ae0ede6571d3563023a459e68555a9d0ee29561cfb9d9fcb6ded6fd89ba8e57f5479a595976279b3ce0fcdc0c169fd09cf27123455463ba4323e86df94a47acc67f662806b5639c04df76fc9479d33fdbed4cab5163d851bc0d40b6540156e5577f1d8d0840b8e15d9ac300939d2e37ee1fca9928fc8c715906e32757421d11500c457f043bda652108eec4dd1d9419444422b9e0a1c22c69e9c0b3c0ac36432b784fdc624a0e6e4e1992bd05d5a6c3191143dab487977a7b47c75c9aae580ca11c0bdf448ca9c93014e255444bffdd7f08342086f60eaa610e90a237b41374b7177db53a9f0598096520687c028d1c2f28499b58cc96c1582e259f4a378f27fdb2cc102cbb95a657144764589d473ee1bd717714bdd4dc175b6b1352f3ecdb51a27c863722442d028e6bfa2b537427b8ea07ffa754406248094a64a0baeb1b594e32a817b21df2cdcc31d83ef523dce0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300111cf492664197cb7795c8dd28b247584e86f8828edb5d6887dd2e83fe15d4c0f03257c7138e12fcf0065ccb02875833d7dbbf237bef07fa426e51159d54a4699361c1374bd00d9be448d6734ee02e9941712f17e17d5f9b1c71c6866e080c2b2622a777120a596e09d13640b8f1e5db75764740d870ef7d8e11c674031e9de2226000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a31dfa6713ce3391f51710f09ef6a3c718e89f7f2dd78fb26fc8157ed5b47277dd7c9a6af1c4a758973c42683484351273c4cc30a86aa6619f2d14653ae89f46d4b881667df073e0ad677384373ce44e75a0a48879d3cc318608909d3998984a14c1ac87bac16a60ea29e8588c837521ab4e3c9c6b1ff666d88fb31e9642ba72e91756fc171035f39e509c1885e92e470d40778f97c5cb6fdcf6e4f5da8506c592b6760ce7cf4f2235f00bf65ea04622e5155965a5a7de23dd4c174db8a4db4e5c9da04dd181c7081f8b309c37fe5cdc5579284ef3446616494f4db61f7a7b4485c694861c8abf89b56826d10068b694c3be59e1af734164fe3a6001b0b98b102435c91768cc46531444d75ac7d319be8b55e2c634860ea56092601d6a9ab2d158edbbcce4f878ad658357a45a1a40e201ef2b4e11d426014e648c5b01dbe6b31169f0f400e9b1af6741d50aec195b3f1975052935fb904b3904a2f5df7b6e82ca8ed4855e3f192ef8a71bdf030e5d5ca182d90a3fb158e839f1c03dc13ef4d0d078ee4b99d39d034c8d3c845dd421d2dda4bf7df63ddb2f065f708995808fe7cde1f176431b906476684f09f613597439813cee6040eb447e7c9e844ff8aefd0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001302729a00b321453bcaf889da9eed806b1c12acf03374227bc8c8e6d32de63f70325b2ef58eeca71021556abed51fc1ca1d7003c53905828d84e8117eb65aadd632ecc3a9fd2b1c05fda4ba8255beb082de0c47cca53bf39c3ab635d14a044c52311f9fdc2da8c32f7d51634adf18bc964fe68dfb440b17eba678b1dff0aecb8100000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d8f1b3f879951698fd98dfe77fdf49461cd66fc328c8bfa5867e1f6f68d5872ce7f14b642989c4cfa3f7464538e9dd9e87d5b7bb7a6d452df6b8eee37f5a78881cef99982af56c4fa38a78b192b2669fb2fe1169337f8d64950785d1455a2b30ea2431a236d7c3d8c6e1e563145485a9663d85571461bf8ece8e462936a524ffb43f2867b4bc0087d13f1d433e532a32eab2aabe4db8303576cd8405c30b1a1b4147363cbe3583ed25a5d341e8a6bfc239c102c99108e3cb8b51169339372816c41179f9358e1c3c4fdc07f04cc46101697442d3dfe10b43dd5d10a6a6652fd0424a4ea06ab6d73e5c64b18c760a3af29032fc91c16cfde2e554f6abbbb709e5823e20c9adcb94c1032d87bc17e9fb258b0db53440573ece7dca9d45cd04aaeedd30f55d3c55531069f87bab045cbd6dcca246a11bcddb9cef280e36ceb81cde9bd529caf390241e4500b892f4769c133d46413c3db3fa7dad89233bf4fbec14ad699cee525d580c0f94e49185f44902b3561c7f64e886678609adf374c896eca9e155c9daeb3fe555a41216c828f8e5ff3b83558a4c5b0669f0e5a75f466abfe728314c4bb9928e8082a9c7848a092e423883f4797d4f538c390abdf3191c00000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001102670facd2450299d8b2db576734b1775a9ec5bd454dfd96f544781477d116e032636d153a65ea075811726b0c829318e5956c820b0a9cb81eb470d29f931c4532afda550af621a51c020f167d120a28bc38c97d53da6dea48378ae3c7c78e23e1314ffbf95855e0041ea096d6748457517e3af33797922fb6c1038cd73850b2a0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001699218f97fd1067d428aa3138f4e07f05f76bb19dc04a485f840267d3d3bdc8e8f8aa7b3946f260ab4c88cb74fbbdd8ceb06a83553320aee417173ceeb3a7d0b817117b79758dc0119018271dd0324034d0de892d44ac6224a9556cd2ce630d0ce189ac300d1516afdca97836215cfb73535ea73659b587abaae9f2b7a085c093b421465b22bd65847714eb87b866780a8bd348f3a23f31c26899dd01408eb217f105fd1e300e04156fa7c22c26abd081dae1d2368dea51eed9288e51539a2ee5d517a59dea09821def63653814f42a36610bb9626e1f0f6830c22b7ca91d6816ce0b63473458dc10f4adcaef7e06b5f629b59006321d3d80b99c09c5cdaaa0fc7044f2e544639559f2c5edb3b9a7798925fc2be19435db244f0e89b8ee1da6951b63e4da3c717a286fd90db991fb567043f5aa307a5629db3b1a3ee73affd0abac17e6cc184ff139ca576c4f29fc05fe302ab8832577a50c76dd362a493fb32b5a0ecaac9b7d3e83d6717710df1ec29feba81ffc774176ea8dcd3085f2aa03b7da3fe4f954e4d566f8da2a991a3f88877e45b0d2e45d670f5aa94effc7defee5c651a5858e2b6955eb1696b8c82c76bed466bacae5bc6c573f750295ff37530000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011f2c44885b270a6fcc88410a751d5f2eab6d7764415d27ba11e9b9fe21fc70860326fc306788868b1e4ed60365ef6d477c28bba1121a8a24bb11c9dc1b7564889d2679ff9db922858c21524446cae391e0c4e5b87df209f8a8a7a35500b97507552a9a8834d9533036e0b3a60ad0ab90f2a7b18d25062282d9b6baaf82a751a27e000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000887e0f4d407810dd19793ea32b11d6c974864e8be51f9503eab3fa5cc4091617da24cb79fbf3dab030555401f329552ced775c6118b106fcc72167bc2c429f098f227c980902ff6ffadd9ad9351d622a63a7c21bd4b546618bf6cb43175b2d4fb611da4affb04afe528273f285ff12b65437c4277d8d22d7b3eb96b0013d347d4dc5050d01ca179545a4e5d07685e5c96aafb70d6c27b006651e0e72dd57149b2baed72de9177e78bbe2a0beabf06206a5ec7fb451001fb3747580bf8a33a0e8145190bf80f0c27cbf3c32f0090a6f74c7e80889e3a5017c1caf12499fc74ba72257ebf09f15a48f3c1dc15db8eedd78ba28f6c8ebb09918f642186b4ffae42e69dd9c7cdfcca4156ac483a0703004dead52e6b969e25aa02bb695e632185ee58d3233582c3ea857315da1e2b1efb384f036b8a61c070af02d94082b741231a7addebffc3723d4562df6916db82861ccb58ace85e06532d04e67fee44232359f70cd021625bbc9b14a183c46e5c3147657e2c6ccf95236a3a5abdefb6cb418bafd08a64e8d03928c1a02d5efc4ef6f86500d47abe0a5a264f80e34a4c5a95bd72b3a04a9e2c5ee382a41d3a10b1d61bc8a280023ecfedf3829779d9bd54d5b640000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300118d40c6da3b70c2a4279d2c19b7be6c8cb46da4d76cb8d470c167f3a7b82711d0327f067361b12aa1abd36e25471cf1df72a04f9f417e8a7310a636b0e58a82eb2020cb439c756884dda5e8a43ad4c16d80a92d27a9d6cc6cf4094dfc450ca446319b7dc6d5ffff202afa4ff3e3c8ae850758de5e2d35007c402c7d58933b260350000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008179d3adaf577df6f9855d78f773acbbc3bcbaaac4043639bc2d67bc801f9dd16e55c7ef93aa02de0aa994bc7ffe6b1d91247c508495342fee8a6425cb990ffd348bc34dc2962f94e3b5067eeb53b856dece7e95a26f17bad43d3104fbefbe5e23b829f204960cec7ddb5b957b2cce7774637b7576e481c25a6d7027d2a26c30adc05e2c5d75d4f2bf1f630387ca282cb5a5b0c3ed737f4f133ccbf97f39767a83616bb4919d854f557a3d8d4904bc83ebda85042c9ec2fa95c3f59318fb6956873a294a310327edd2cb693aed7ead444dd570ecf1f4fe27ef47a4f199e429cd01747bfc0d7d698339fc5bffdd177fe24577a8f7976a54826bb6a7a63ca945269b8bbc4715ddf8d1b969c40f1c3aef60f60625ac5bf08b5cb8c905c85f6ed60560f2645ad43b582de29f648681bb117a2ec18ba3bc1a4e4591827c7b456870b863ec1679bda5ddccabd44c67da69ce3622918937cbe68ae26810761c2b223930a32d323ddbdd8b51a76efe6267171b0c558e55eb0c9d4dc02bb636e27c1b570949ca4ddb5e3211c1b0d82b5ddc011855da40d82eb01aad8599940159740911c399d8e13e66b0cd47fdb4564937170eb255cf34aa1dbea703ab774bdc1e43afa10000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001241f8fc680adc3ccd89c008c55ce8853a299f0688428b47cfa91ef4f608aa56b0329780c476aa8354e4ce7e45969b2e9a52bb8b6cb19fd9be8f67a609ccb8af1d401bcf53a2e650cfe9dd714841a0312814b62a4a53bb2310891765eb85c6bd24d27aa105ea9b219c4157008b267f58b336a6d934e5c7c49cb44e99b6153052cac00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088f0a55dfa51da43a7cdc5b38eb0ce8166bd2c566a63359bbfe38f96bf0bdeea8f5a1471c443af11f9356e981172c641334892913ec744b6922bb9133bea717ea74905bd4be283a85d68df552adadc3206dfcf8d6c39bb595b9d85b58fde9bac3144392c9899baabc25bf3edf5ff93d8dd7d92c5da0ae81dfd1b2ca4c84cc18cd9287bcbce545d90cf3d63db7580d5f3f18bc2a9c4fa234f516f311a9674d853c8e58662f43fbb1762d9782914ac622c42e62584c84390c2920aa4a0bc55eae20df917f46bc0c9c4b4a192de993a42a5e7506ff6b76435566e92826c6dca18fe38708a6ba462de2694694309af5dc953f1d3ec75e0d6cad30b7abc1e6c585b849b6daad34c7ccecb31295f82e7384feff7b70ae3798a85cb54c8748ac8502325dbb921160a8e8b2493e56ab13f109e86a898a1c8f5d46dfca8808daa7221f013764f4331c8f5949e56e797909f297d609476448480d2bfd8e8e9c116c27299138745a6a6a4e6ba468739eea0ca6cc42c2a9edbd6553f4e716aa8017279a2f81a58924d51f3fe4a038f89687173b9657cdeff697287e73fa8da998297d306be075bdb01cb0f28c0f45766afb63451a5f786fb0cc1f58279e3ad314f6a45b3d73b0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011cdd885f3da4757d9a9c11267db6df619a9d9202e3b641a38ddabb711a618e43032b58fa86dac48b1ddb5a819bdca7a7a1548baa62aabc2c9bf5d8381f4ac8df59158c21e3be7af3239e3af14ab440b873bc4002f08a3dcfc3eca65587b853fc6c08e1602e42626f957b0d9941b8e3a837e4cc0a7e47dae97578afde4a058eb130000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000805567d5ad585a9a0d95e820b79426047c86ca2398ae825ff5f4e33f37e2745c43ca3d70962a69a65245ac3e5cf70ba4459da9f1b50f8006ff656bcebe6fec1bf848f7867b6ed71c858617925d64118f3e36387cd85fb36c2f45881779cfea5b6feb0c7168848b961e96c9e54baed454211fdd205055c78ecf85be592809817313e06aa9759e49294ccf216149c8f09b15d8cb17154450c1c4ad97926df5f13d117af8278d76b42f87b6411f11d4d4dfba2035943685c1d1c3953d0e53162c46397d20eeff7cb06453679bc01b7c4f8845bcc798c0446606102d49883eed755ca7be4712793cc3fdee41def1886891c7b89589cdd951dedade9a52742e63a861d1ddedc408ab09e762704f22a31a1d487c764cd8f91a25f5528c63453aa1f43a9b8dc3d8303472d75fbe0669de329ab39e03809764e07c8abeed8d30e6cc2a4d487004d59b8da35970c7c3dabb26e3164918ee314dacd19469594c519214964b020f483aeb34781680a354c72ce60f599d0bc086815c9e9424a7822d61de308808f84ba8000854fb9e2de4542a0b01004c55de35fff992a1bbefaf25528b3a9862452ef656a1af5b14998c592081af81a2ff6532dd078a6bddae173488c64dcf0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001064f7cde4e096b900ebcd87e32bd080d12663e5e86f993d540d1405e48dd22fe032c94b0e98fc59a2fb99a0f183cf811fc424e989e3a7559ad5c3d100504e6cd6d07ab0180276947bfa59c016ae77760dd3d5da914e61f3ae32a3e8adadd0ee89f03f1ea6f09146249423b4bb6088114f5969d999beb2ca6f216d5bfd73949b6ad000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a387ee67e1b56647ca29079e81442a77ba39bf1885784b57ec1951ca32729ed5d38683da2c90c36c113584f06070ee0c5882416f9954b4d66c4508311e74b3b83625b517f26a5ed88b368302f93f64dfe8cb0e0e7ffab6cb28103064840b02cc665ba48e44218031accc900742b716d11efbf530b239d1127c18938c44680fd5fdb18f6ea275fdb20ac10ba6a4c9f7ade8281472e746511d1495aa68df47b6f8049d83e0bdc6c522d86b30c54feb19a144d8b76001c40cb64951f674d85503b6f5e037c2c12861553ebc690e370f60ae524b83a104456b1298b80fad29123276a4f63a4d31c58b2f7246c186bb1c9cda1bb1d89012659eaa4757682c72c7241ed3c358666e121ab0a0fc3824984f295d51796a9fe04eb277d72e26f55dd8617f9a7a09b1be7b2e153efc0745c0468183c89b58d2ed578cb16762fe5f85a310c4e70f92e3d95a31d3aef142eb52d287dd472f11ff5fa5414032438a9f0f2f61bc1df018a7773930781cefab20e84bebc846ea606f1f85742b677ab126893e484a59ceee407483f34654dd9d8f8790b179091aa9164da883864e43767aae27fae64f7daf3fdd048926c23b571bea930b188875e66856179856dd7d4d0c653043ad0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011587a81420c4840b0d2308a2dc2ddf5ee9afafa58d41a1b53df5660b8857cde5032d18a626da592636a9ea14e8114baa0feb2359c3241383bf39ce1ae5a4d06850204792dd5649c63f78b4d497de0a27651823626efdee085cff4a9617d0da9c901cd33d0b9141f0b3ac219092524a88eb200314ff1786505e6c321516c519ee0f0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110fcf497abdeab02d34a88e57dfbcdfca05286eb71ebf72640734f4ea1961be762436769c21ba7ccaf9618525aab7cd294fc6744b6500667fa61f71d794c1abe227632190fbff977e39fa71edb2a3e920635690667f8f19e0fbff8f046baeeb0d7db4520d3cae4cbb98362d576b0f6e86ef8ff7868300f8c480cda70c111216cc551db101b483418084489d48aa54e7e2ed5997feb535f1afbe4669555d1819b810dd79341693ab4502b6c72d8b58900ad3d2a3f0ae08c2538bf8258c27c0fcd94a78aab1258749159b23ffc8478fdd4d4d1ca6d57b5174999c2eeab40db609d92fecbc172e2bdfa8af51ca1f23791687c7a95235f333ae51b356194bafc3536c465560f98b5d5db24bf3e7dace343b34c41fe96b53c4880047a789ca99f8d7ee07dbc225bf385cc5ed59c9c587dc02cc72df40ccd6d099479819ee1c482b34f151e8be7bbfb802af0da942559298e3b69cd5eca8ea8669a0b392c45efad6d432289d26a7e800e4f7eb48673321d07110ce3a9e760afe9e546024e6e32e177cf667be581db499e9ce0836189c7655901ce3ce4972ad3d3a350bed5f8bbe3f54ddaf15259c0709225de469ffadd5cce1eac53c7c7495a5c5d9f8d71b19e4fb90000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011d2d09fc03d63b360737bcbf1bf4b49462e8b9783b7da2abee4937dd54803a3e032db82c608291cb56aafae98cfe9a1907268aa8ee5f1660b088fd017e534099dd2e9bcc3533f9157e5a00aa25e4033f8b4157cabe4c66ed16bb723b4b7878dfbb2d773df876728462ae12c8fca7b354a7460913bceb5466b914276773604d454e000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8379c09bdd703f2573c6f7888a3fb2f15f95f47724ca4901d25ca0484ce7652c6a36e9911a6c0b955d3653d482676d533ae1f5f184f3c71ad9969541c3b7c08733305d1d2df21d55e4d29025a2efd255c384a08d40d9d72d1f521d5a38e9e356d8c07fecd220f79a18198bce884b84c185e871ac9d7af5ce9937eccd1010eceec1058543f0a4e64b588a671f16f52c902f05edb618346d83a2a6f12b92869e3a044717fd66e1c88366542b73f8c32b39247bfd461052f9e23322e46ca74fc7f96f3ee30e4e08ab61f74162cadb2a0f1780e3b1e139e3688d9738f730b70a89fd5b1b5d0b29e0028342ec416f0f574eca97325083f745f74692fe97c6848317b08fe277bec9b92aab9c7e3231085e7a4f1355003577cbe6c9274a847ab75160c23c39f26e66d0771604c88864c2013e5a49d16252eb4d0422e24054de43b9caa249ee46d902c6468777a9a27706bd1ccb1df7539e603961dfc1e9708b50674a711bdf28407ce057ee50a5bc2b3ff0842fa12e5fbb8cf2aefdb0b3419652986df486f36a9b63f3389a1aa803d4b7222054b2d2d4211e3ab7e29d09f3b545a8829bf41c2fecc5cc397c057279e44ad417bab8a20bd1dae70ad20a7e0f166d894e400000004000000000000000400000000", + "24faa2d29c006fb45b0d2884240a90031618385c7c2efd4a2cfc8f34c44459ec00000010000000000000000000000000000000000000000000000000000000000000002400e6f1f4738394b2227c876e94115f6fbee93fb56dfbcf8c8809e48e92eed5d700089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000001002be2de73bd48e75c2b8efea40082032e37903587c30ab89a52dd5dd24b2ad6be00005d00074ae2fd69dc7e061edbd24afafe57c86ce52971bb46a1a83b61d1a95f437f0d00005d802bb7f2372436ecbb2ebd34734a7fbce7e41962fc16f42b0c006b3b074082abe000005d800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000070dbdaf0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad2ec2c01a528b583e1fd5cb3ca5bf5beda4c852dc2b13b7ffd1c10ab989f351a64a76f6000000100000002400000000000000000000000000000000000000000000000000000000000bebf730010699074d305b465baf9d29a594436dbdd4d3d4cdd5b14e9193a4c82591fc1da5030237cfeafe987f7c48c33f21024bd82ba1cc734413546e0593c1117003ca0ad1170eeed6c13849db21d16d12e877952bbe4b983f56b9627342c77c426e95c93a2abaea112dc564081e4ded65fb1ef8ff53901f016bf1c73a66ff087a7e42466a000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000073199d1fc26e52050d7a2fc5d1f5f79e42c8130875e4fc6b607ca0af1bcb2366e256d6cebf1ab3f807b490da0bb4d9e5a4696718a9a30ed705aefcf38c587a3c31614762b9731e082d86f427b0e2f85dbd4c625671c3562c6de70ab0d527ea5696f8be7f2b51cfa750016d09a9564cd3b6e1784bad23475052ced2b559eef622e419a0ddba255cb54329b1f4370e17f243c4bcfa39a30ac655c32089b5e611a741a1416c37aa61b1178269418a8f2446738d3d4f98c2a8f0ba452f988210c6a35e6c80e32595bdd30b20c9c2068d5a1e60efa721a3ba503a5061029cf3ed62660ed61147a51fd2a11ec8df6b0baf7e08fc4bcad826bcc4d093f6aa4912982b6ba1864a8c70ca2b1081befd939c36ccf92fdd09103ee23e7a626c83979cbf5ac988fdd1c220390259a970375af902803b1179a84b6c9cdbf67dd875bfa7397cfec23d3d41171e361b40380122a846ad39dd66f8f55ceb3670155b506bf7d6a94036d9fd35295d222455ddaa2583f9d16962ae8f3331ccc815662b417d75fa24812f8e0cbbd00f81ab4bc0cc103ebfd14abe14138532bad81c28c9bcb6d4179340b85fd7ec6481cd50157b6fdb44cb7442fc95fade95b26df1eeff7660c0834aa0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011ae56baaa997fe594be7c1a40fa12bb94889e3e1d2d9fcd6defb89bc2f6ff0b80302ec2afdee59dd0841b501650908241ddc077bb7bb19b9847a1748e9e93a24242467ac65d63562700d3d4037c7d5243e4ce1623b03f36ed15b49e06a856383680bfed8c653a5cc40c92ba0ac5edd544de6c99abe3c0091daf74cb44260311f710000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6d37f70b7cf09b9ae59919bcc70b8706602195ec81d158dcdbdedf9dfe48e558c19fb04d68517d313df8664e70864fa82ac150f637e6bb4a9677e8e8721e835761248ebdfab05aa26fdb88302d6d3c121f497136a5e9b83a10842d764d15a9dd4904a3ead6cdd09194f77ec89437f28212d65eb385fb2d16a5b7eea6383a5f9b1402433b67a1275284b7e67d87055ac39e0e937eedfe223cebb2fca35cc89b3fa090d519b040f5d4c3d8db39fa5ac58095e1831ffff378c8ef4913a9afdb1362b82e9210d7e9cbeda0f6f221d94b53cae02bd67faa1863575bb7c391684cfee617a17159220cd92544007a474d124e3680b48b64888695bdb415afbc4a371b2721761665a03bbc17502e250ebd2a51b20027752f182235a1c1074f61fd3a82244d187d69b7866de346d5d918eb11f42f7eef6988292b80889f197094951c9d341b3843eb2bc5c196a1e3181637ac181634712804ac1c5690306b0a331e15150979b6791bd6cbb8a5e1dad8770b410048da642ae37e120313ab91bcb7862a96f7217934d712e17a78af156ffaf7df18bc46899d3026d48442ee48c913e7af1822366f48f548dcc63e71a8796df70fce8313d3642cdd0602655c91aabd257f990000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010c5f5d6efa76de2f6e696118d0c2709d5b075b5a0327d25bff59fab4252e448103052ac4100d5929cc45895cb3fd36ee42d763c39cc3aab243ebb6631f405c28cb0facef68d958ef9e232a31220482d4ec1134e04342be7c492c304e58455248af0c6ad62791c331c1e8a105c24490a679d145f1695f541165acc77544d526f7560000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f4f659269e00975300d604afc0928bef4f7b11b8932dad51dd434bd4bdfc33796152fc5f14f42506f9a009b3d6f3e0d62eb412796beb540d486560fc3ab39ea570ea353f31e69e30948ba08bb7d5463682f56f674becc52eb7994ecd2f13f24fe00f420d4f7423bd622b7397c6d4e2c83fcf196f2a19fab1fabb453a54374336420299029631cb5eb8753872f4e873ba8d556b989243123e3fe9b4911f034e783d1de1b4416424e3c64908f9df82fe609838d79f873ad7337a2d736f663e45f15f115180b0f27affed669680b12b63d67c04dc675f082bc4dfa994c7e55a201c05c0a608b588038cde8b918f23dd205461349237062235e751dbf4546005d7fc913e625e54f2b189e73a5787f5b61ab7e29444f83841a1f4ecbee1b9eb3b3f97a65c246800a6f1dd9a847a09256943b0e8bd80ead3cadae6376c8ddd6ca9b3602f0cd1cfabef47df26908ff89a442fb21de416a48b9eaa9734043282d9f82325f5e7c6d7df8febc29745cec5c46c64ec1a697741fac508544d4f6a7079b562042776408b8fe99459d24db1d879bd7c5c14b9af644bcec2a6158535af901526e202baf137ea2592af58b0d270eaad6a312a946f0d3f3440b84a53784ebef12540000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011949cb5a5adfed745d71fcbb27dfd1ed4e6b72c226d4024907ee59ab17ad944b030565cabd8d656d66e21484a05da069720102fdc1312952b92aa6f25697110c65114815cef2123837afa58a612ac658d4d0b9a40b4f00718f17915e58b4702d71213cc78cbda2d5566a1796be87aba63cb8bf0cc07d0e6bfba7d34ba524789c6b000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000972601e5147811ee0e789a4f25c17c76794a98b99efeb63289de2f9a7db5b074fb3d6e2d2685ad143b256334e3e8e4115a5d27f40d7d755c9064fdff08a69466953de41f89d1a42bbadce0e3b6e8ddbedb3bd968e71eaea74a482ef64d2ef0ff8bcc72ddd8d99a5b1dd9bf93f21698db00e76ed9221126adc3d49144c23cf47f54b1c594327e1fa75dd9bc2a035f8c1a453a92936b8922071cf2b11a8811d3739c1a2164d402243a7b1e1046534479214bc1661c7a87daee6bf7e81bfb46b4bcec83f03260e6c71df71a95a7df5d794dcc4d86143d9c3cc49c99c57b36b4743362e539ad959c299e6af198cd6dd7c16eda428d82735731f2deb2b8aa96b83d7cd01831a63caf2a05d87657509074ad8514fd01f3a56ba82c9c1a40a981c8d26c0b523c3146aff0651bb720a071a3c003585f1c6b81eeb69d317f7b20b6aa6e25f6199e99158f76855231c6d6f14399949a1a2224ab7d119c48135a4729cbded4fec9a454d41e981e6cb5bfef1184cc04a5465b3ed0bcac47a39828a5fcc87f26b71217cbd8dc3815de954519cdf514c1d13725e903479d09fc3f8f6a5f860e055a10781e433782f0d7d6b64bec7c1c638bf27165532a98c190be82debbc18f6d0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300125aee49563895dda5bf40a41eddbbae3e17b06d8615aafb578d31873c5fd392203069b129d436296909302636220b6d41fe1afc39b0d2f8ce8e7449f78c97a03eb2410d05b1bcd241f17310276597dec9f62ea2611a1abe5ba19833ca13d885b5525929fbf7b2e1c02056803f4f2ab6907cdb2ae32b028c6ff09538e1f6b7d67fc0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009df27b096f67cdd7892c8c80886e69163501ea62173cf5100ffa595fbe78b0a23ddc38dd1c55940ee49b32ef8f36286c2b5f8435ba5d0b47bf90d2bbd19875a4a1e6195e1a0512b83b76c0bce89b6c1dcac7aa830373a7ade5472bc1b7360ee4f5e5a729b1cf72720228d75ede00576be623760f58ef518d1c5abe7c9745d705e21329f670a960919bbc16a91979585b9c68a37f37eef8886c4de4abb8e2a6da0725c83dd788ce027a3fc92297372116c63f384c242b987d7199281d4f7948e43b206d18612298c3347358702cad20e1dcb742fc08a538f14cd64dbd1ed52f9827f21c06508433936976f6597a9a50711afc8f01447c276a04b02c00f44c005b8d985401d05763a9c33a5f4b3aab858e720e54a86194cf4701f76a7491b1bf1a5b699120b3e79f66e175bbe4ed49a57d8f680bb2b84345a4fe902d9ff6ac577f81ef5049ff0fdd014d94b148c7440c7430afae40c555bd9d4f56b4622e4f86fdc7450595bb6f0a701d0136a46275fdfce988fc008f596dbc2282bbf5761689c72e408c88bb746c64924ab4d944606353123cf935b26e20988a620b9e3f595a5d2a9109ec2ca05d848dd7b908e931261d944ae81fa5d85c10175573537232dfb30000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011701c52309458e0f709f35816509b13fca3ef77266e6700ec71119723ca59c3003078f87f010e23e532c2e2c59ada51aef527a371e9088a3d00a49f0664b1022ce0e82502badd808cc63317d8a90774e4f42e99b7f2c5187ea7371bec21092284e085ebf13376db215e07cd87d4847955596b74ead1b4f85d4e77559d82748b9490000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1aa53d97a6191061687ad4a66836f4cac8a02cd7cd3292091d6a799c8fb70684013de253faceb7f78f52dc59c0cc8165ec7c969edd381b9a72b80017e07c8a9b3767fad4da213aa3484bbd722a2de35f7e9b693f16b60b9ebc41be54e13d7b606adda3f2bc89aa033c190d7ca24bfa02f485c8b24bfb11bb9c1a5eda9e9ba04ac56c1b48b88fbcd1eebb39d52e55a1256067614b7c43fdf8152a23b1e3ff7036e9f509d9422c3c8780c40b41948519c8a647331461214d8ee9acc166240cd225102ab1fc78bc4f6551ff73e17dc4ad6998e87a9411e811851297000fea8b03cd707538c5c050d6ef289c32ba4cbd1325d1a539cb2afcb5d0f099d2b714db660a27f77a05e20c93fe0fc947b32febef24359a15a8065b71d3d4b17020ca18a675a4e8c3991bd0d7ebcfff99f2c4af544ae199663ed7c962a7af77addbb32f998f4b2513c493208e773ac9c4e45029ecbf2acdc50b1eef3a1b5332f2c92bd4b7618e17f5fd93bbe09787a8a3a23e1a65b52569307c8baad51c3504769bb998d579a269cf0411e48797cdbe292bc348d892785925d25aabc4acc87680252287e168d560c50db3975c62dd346119a43ae73a6f1fc69ea4572964935aa7c300d16e0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300123ec85332be85925d62b130946eaffe82eb4c41b6c26a95448d0583a446043650307db5b82bf95d185e9e1397dd19f887df260e3eefc72281a400c9e6394152d3c1f22a2641e72ccb2160842a04c688e39a798f5e2c10072c5f6fc514203b558462b824e2696f07a8c96fa971886bf253968ede9f4419244df445d38c32b8db23200000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a69a7f8caa53c54f5801a7621937d5b4525af23d67b54dc0c98797e005e8c7740459d1f4137cdf3ac89486967b9b7379267e169132d03a154befeebeea532f5b6dbfdba59014607176629823855f4cd93d488246f69f410c626d538f17cf7497a5bb33044c125602e9588357684794aa02ebcaf6243bdbe45e73cd728c191bedc88f0455167145013bc88f4c1699ea677991d89e2472f21104068f2d077e67f1f82ab947bb3a12b674591bc2c41a0d438172b4525eef36a7d9b5fec08b72af79f6ed04dbe2fa770af818904b86844e3832dfe6828227b6ef5e42825025cc2e3e708d3cc05ef78b36b55a42b0ff6fae902e19d849d29430bf30b98bed809f59b7031b2f387241b316607587b7132642e2e5f2d5d29a681687593752b151800701cb9dd31118f0ef35bf42c1c4274b268e42763f04b0165dfeddbdb8f874022a066bead7a67b9406afaa3646824a4725c62c1f893563fe71cfad9efb5db32850a0c54ba8131220882d08a82cc732b565fddb76ef21a5d04041262f1940d92fbfcf0f618e9b5813985060f570c28e603d1e5835e348785a9d4377ebd775af637bbab058b98ef4f2fe015b8cb98fe75e23bb05e031ff57ef3253ae085d979aaa6b0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012f382181497c8559c4189047b1d587f4516fd70f3fcb45f700ff37851d3b4ee80308cf1f752366e632bfa2cef543993f7568d0c836b684ee36eb99e704c6cd4c7f19cd306774fcf97e0a2926bd3a6b63d9e71c00e6cfeaaf3318fa2decb10a3ed229bc82cd3cc825cc543d909fa47c4bf4998bf886afdf2d2e60b1cbc7e6aff4a00000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a634b1b79394a6caa61c8858aecaa0e14aed06d69049202d58eff6372566c6c409be9ef9f99674e7f5b08815bc629efc48e12103e54a3743130ac5607572b4961888441d2893fba8b813fa1fff612452f79befe8f51f15e361d95f91ce42e787eaeab395af02945b3109ab100578140a4a90322c74b7af417dcda83aa0b3c9bd67722f89113626c91d4d3e8c4e70d7758e6f4894e731fb86b30a5a0382dc77c8895e968a89e48f6ab0677d2149725dd60c86b07cef3ffd71ddf4f020c59a602c805498df32924773eb2388765b1c5e4c3c1872b5807cf2a48b7d4e7b2d9c00b1c494623c42250c4854e3bc25b4b738324add9376cf2b16486dbd3382c97a1e76027b47eb06638669fe8e0ea1f3f7855fca64fbbf8656099678a137ac0171b8e5890bfe6665825c1e363129be69ac55e1296568441a51f476b5e1e31ce2c3d13b827c74b51d0dd087cdc4bb3609b30d26de708fa73b397c0b1de5f4329d1af46276432f42fa88186b41513c74a9eb336b07976bcf8eca1f2ad8a7e0141eb8609d201cc49a3a814705c9a540552001d83d17bebaabbfa7a8b92314f0b9451bdec683d3671775e3e585b29285422f77858c3cb11ab5ea82c721e0d898b0ed5fb710000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300108fc37964693b7a09249035a023180d3e2bef573ee2c536c8009691eb93d9553030a457a2effeb25d151306559c827649c5c2a89dcb35c9883e4bf7d7194a188bd2ea4df006cbf2a1af66a45487784397856a4dda6030a49eae3c46612c2bed2fa1d3eb2150c67e2d5caaa7f4ea3f946280e8736b0735e4c5faf6d4ae312bd1fe7000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000273b2a714c892dfdf9bf8c603b6347373eaecf34f17236783c2bf570acd7a78f49c81e8dd8833a327494bb35dbd2c3b62867eeff107e86850f8b04ffd8d8b9e22f3c4e718ed349d9fc5a38e47439dd65d99309ba26aa2cc7cbe967adc14cf0fbc46ece4d02e2ffceee74c800b95817c35725330986ff95407bbf393e111d02348d1cfaebf02b9e153e787f1b389a8a10e2aa6c805af20a7d8ee9048526bf04641094ff0ac2cddcfc266fd88019a592bec1e8aa964b834fb71385aa01fdfee2fbef7a3eb987b8262c9c753b09238fc08bdd7c489d4d004e1ddae6e3d77c01df68cb32a3bb8c88817f1b7d4000f645da426bddb527b695f3d84ac64b92d62acbef7bc669f932e8ab792c70a360eaa5c573c179710c9a79a56d433f293e3c422b0de5bdde9d3ba50899315a9128f41ed6cf87837bf18d1711be4054da033580323e3e907fe54f160b9b6d29c81a0affdf230e13dd8ca37774f18b80c4921f530e0eaf89b99030f4555db8491fc9a2f41d0eae18c1b26d22c91f1c77545f6a9f1bcaf3a30ca1130876a33cc0def3ab6e8a7ac74cf72d981700747972fd042446a9a32378c7935ad53cb90dd804bdda04eadfe0066437da48d4797a72a615604f13c30000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012d31c9e8c7f1cae7739c745a8cca96bfef88334ddca72a11e298438db736f8d6030b6369972a1389704c5ecc15af14b9ca0732c76b60da9f940e87402a970a2c5c0800fe13ee44d9285455b47638cec4930eff20269addbf420df340ef03d3a02221454ad2cd1af0f8b9a86c334ddaba782f4c87229696efdbb18b3a590ae94ff9000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000838a7b58b3084804f28961c9c2f83584587c699f4e3e9b5cea46df98a872bf176961966ff3bfcd7fb4615f3c43ac6172e6cee5ea4bbec6a76ac27d4a1487e209c5ea0bac80b1ea39ef2278b50a6878402750722f854e028d0139607c4e9ddc84431800a640e4cc0aea0ddd3c04b758b5d2d817642a240c670e355ad0028868b32512ff24fe6fc1f6a2c3aeec8cc58f8f6920c4dfac1f8d9182c6964e81a53ebf4ee3f22a4cec1344a057bc8a4f65dc2d0e8acaebfadb95a82b9e2df9bf7ccb977477ff5b956f11978f3bafe4d2afe1cab4ca1264183375d0c2df4b4fbee8d2f2987c23c78726f882205521327d778a3bdd1e0a6671e0d8ac54811df609142d271ffbf5759689aa8754eb83785b6bb2334bb65c502b71dba3b5c3c85333a874d64ae4e356337993c6c3a0b4c37bff3fd5b2b4a1d08ff5d8638415b34c9a00f769bcd52622564e20c66ea6619163433d1af1276d9a138ce34c64f5158040d1c3917915f0f11f8ccbc556b2277016abc4e7ee379a1e24c593a1a4640cb4d772f1bbf102f01d2f589f6155844d09cae3aded9a044b040bdd4efc089a696182a616b179c6f5e2e6ee5e3042e53b93511417473e80dfce931ec204909aa2450c5471110000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010b1314edb177dbe30d1b836dab7724792ae0814b51e5d27d2ebe0f1d7999c33d030d73c9d50decd182ff3a80ea3865a14e0c3570950924e3ea74dff2f42456bf942816a96c05e0aa761f88042cdf106dcb5346060f0f727bb8c2188e2d12b96a1a2cedbdbf75e9f3b741a9a07c36a7f896c79e881d7cfb897faae33020837c75c900000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003243b08584c773193fdc6319da8c3c430384333de090d490baef4f6e4fedecdd68d64b87c1052922a85465aa530fc97f02ad93738777841008ef21fe4b7bbe8bde66bcf63012c1356ee152ce3ce1cd676cbae5b754c6d1c7e781261be86d3031f03ddba11a3ecd0b215297c48106b8cc1dcd990a5653e489dc4e3a78b0df1f44dc3d7ab96a71bdc375d95d1de0e23b3c8e7d4e0860388e88f15546bf30ce30d6d2183a15d97ac8ef2531f37c7b2a2797af9eb53af0f90c5b0505e0df46c36b667209a2a678f7960f5a6fadf1d5285abcf9b1ddc2e775bdb851ab520b36d93e9e87cfbe10734c745382d9049807ff2092abf103d51f8860e484da3734b482a6be3b6f12814be992b1928fd65e54fbfa4189ce69761e12f4a0771dc2a0fa6ed74b1d0261c657a5b360f6d958ef0a1235a83a8c09a2d43a775643fc6a14d01964419c7d7429012ae31426776f1136b173cead6b248fbb6bc45f1ba085e27d9e65259a53ca1d19aadc13e0c2d107a34f9f9e5090b387e00d2ed629b987dd105a1b59cb0408a344eab3226aa7ad2cf906d37dbc39d480372927257b23a11232fbae4dbd6ff76a37789393bd8731bff0f99106731df8d0506a539d4d267b72d8978d40000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300120c1bad53789c4d2b543e02d4235316b066dab9d5ae5f7ec589f34fb1276c329030d8a16cb237e6da7b2e4072b398a8c3979c03c020af7e0066c01f4a08a004d471626324dd7b7f52efd6ac5564d7992dddf4c6a48ac59a2c8016bf4e91523d08f039fc6a0320a81803528bce7feeedeaaae81e4a7e5a0ec8626d7b45e876dfc25000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4f5aa8fbd2ba0a7a3f1d869e03fa46fce0e13cd158eba23e7f38c6fe5481d1ab2117924d39d666caaeda1f733f0db8414c2dbb4a43dbee1d555590029dcada2e9fd46c589c6f86c2ce91a3a7e33a816c83f13da2e610abf38fde8661d2ee06ed12190aace57a6b35505b3c5cbb59313348ab620e8893bf66d7985de80d3450e5a6912238f84aa8ce591bc06dd48f11ab3c8a226bee77e3258f91c9dcaac537b7c45d72dffcc816336b01cc014ce451960cbe57b7fd6737acea27c78ea71971e7d38321c1c4353b38559bd48d555b042f2050572c3f93962c3583a28fa5f4b6a71f7ea3d2aba052d38253a5e7e1c1df9fc64902c06bb4e8fef2930ba700db7182302da2a526f3429330e559c3657ac47b640433091afc2032f2cd7f12e276f01b702012b75adce8b1b0d32981f0cbcfc70811a46f9c6ceeda26db7df55ccfd2d583a97262a1e5ef30201216a27269204010742d8feeb906de15b3c3b9c936c42ad62cf97b755524c582961fdaf8edc4ef3de058fc2fdf7307bded73c2f1cbdfe6a8eafcbf0dc551024c384d0ea2eae091ddb2d66f049c6886bc4df9808ae9368b7da6fd9934dc52eaba4fd5c24fc11928862088ab7dfc26cab2082657d0614150000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010bb2ce02e70ede28d84ea7407791dc352494aa4d580295380ec2a791fca02d50030eca2929f63601efcf71f5663c3eda29996d2fedfe486acc4e1926bb428ba2de021c3e44c6d76abcdd4e7e353c9d0615d8e90ac7773d5ab09a5312ae93613a8d1e15571802a18b5e22ca221589db1106882930b1e730990e9d8736f01864b4bd000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4bfd2a43462d5c420d24b9bae0836f9ad4df5b8d53e5bde2d8f883fa4650549d744bed6db35a6d611c5dd9b56205b8e885ebff5f6b137ecc11e55b927e78a37c2f0b513177497c08dfdd7479f2aba15f1fec47b44fb69e75a79a6b0f8338de55d8729b50d06795263ff92c2b9d300880f8c5137f8c65ca990c87396124174167c0e55d7c7ad17c5a51ab676f0d1df5179a331213d49840d40dd2ccd2804a90e5bff9d98de48e0a345b48666916699bf3cdf4c71b59df63745b022c3ff160a8d6bac6b249683601322579eac0ef017af2258dd288998590f65b12691b9e756ff2d2cb29eb5a5c4a6df50d574750b120909a0355398484f80a2f44e8595aecbb0fba2d53d41576ad230cda226da5aea40fcb35368eb57e39e82b7865fb5173461e387f916f3b12baafb6b21c9300de67f4442ea403f47c89830cb704657bc2d14d86cdfd00ae2abf9fee7a62d76c36a97bb0fa1e31ca17eea89808673416a677ed70c0b6667e3370b0b58debb97e301e64ea78ccbbcabce4629a819954f61ebbc393be91f6521c391534ca0c83ff9edb99614f7e965c536fa95c3f61f3afc593c124fac793b66aae3c575aa8b7a5554e52d6b060c9c7cacccc89b4e76ffcf7d1c0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300108f8cc8a8aafa8defe9c24d4e4289484b3a05a705341893fa5fdc62d56bba4cd0311279c7880fb335dbf9855e254041f49a9f63914172884e87ceb378629581e471e4382ff62e27c78af45da15b28a29de9fb1737264c1d8fe7c8e4878bdf754f301004b8f9123c0d82875986b643edf4e3522eb419ad59652bc9f1acdc71716bd000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000934666af4745c57d3d1f4bd74e680342df6f1296646c77e27a45e3e3205532df90a73cab6c440286d50a2f26510bb88964b9b66a69d6d1ea4f101712e7b366def131e8b353d1c6aeceb90c2d595fb0dbbe37cc1c885d91c7cb0b540a571da12e7527fb2bc1c0e90a4b591adcf0e1308205d6f12a91924e034d23ecdbc0dd0971ff5ccd35acbf772b002675f14bbaae146a9a7eacd299ef50600009bcd7a8a2b66cf27e19f7fe0f4acf38989c93e205f59a948d3ea98be9607c79b86f7c5651972b5da8e2d163a64bf7ff62642985cc2ffeb966299d4aac33e68dd4194a3a50e079e7738bccac7fc1ba5f1c825a9b666912977a6fd948134321ef501661dfea551dea7cfdb648574f01cc2d20ca865cf6b5051f4b38056b15699ded38bb5da12dabc13d1721c2af5864567f4780f535e7eba8568762df206283002b5217879ae234c581fe8ef0e223447b17fef8385833450683aa47b262742c63abfc3ce7f3ddb4130b5cf58f04baf11782cb5926f9049b1844ac0c1f534a65821836a3abad18e77c85c7d0b3fb6f77a56cd718b414140f0cefc81f17d7a2ca8210287ab84d6087866e3f7bde512b036a3b99876535d70af2efee3e7c105b55edfd8d10ccd0e70000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300117a666f9c3f8914d53deca3cfa45393294130b1cae9eec8519266dec565ccc0c031284cf3d476bb945503e253f271379f1625c71312ad2e42ffa0e5d9e48a7ae76101c29e9e5974fe23074953601b201e9ca15b89e81e667ca868d1a8b03565ea40450574eeba5b59fc141e5c733fdd6dd54694f57b9730ad41ca968bf44284fcd0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001af1b1c6ae8620f06b5f1dad759ed6b34d63a51375fc7fd0a18cf54968a1874ae69a4c96d4e32ffec142faf9ac0cc60bff3cdfaf91dd19b67ce49e8fdb8d718419f940954978bdec19981f78ea144bd7a02dbaae00956e80fed4e0109cd4aa0fb9c3660e979b91066e45ecb772a7f09fc270582ae79f91278fb84a0800d9337c1389eae4e0b73ec0d1ea153cc3f13f45df39627e1b3004a6154f769072a2a9d47e2128d93dc6894a318692c7417c82f08c4c484f7bd8e21f62e2c9d93b16169b9c5aadb0ed8e9af9f3222876a96110afb17888282a6d622dd69f6c96ebbc14c32e97292ec3dd2b94de86d5693c2ee7b3570f9bb1e0a8dbd9d1e8e680b7ff5f15cb312396c6a7835de6e13fb24ce15420cf95ee0ad9ddd0db201bcd80af82063b198de51ea73cd945a4bf5e4c77438245a8a0dd2e0891dc5a2442c15743c98d260d6e5aabe57785452cd9320590353400a3c5ee2bdb9cb58320c6b6d673f28db878ce0572fe1adb525ed29670a51e4c85c54dd7526b66c60d5b72784cacf3c9c3b13bdaecc3cb87700a3bf17dc56ef776161d9255ab8fdd8e3eb812e9a78940ab125f6b922a7dfb53ba6454235008887db20dd620da090d08951e1040b39687ad0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001107320b0f430f3f638dfa357beee6e2da5708ad31826468588f01b36d4d2567303153f86700f5e0dedf420ed7a96ec3691ab8a4e70a998c772f16f55f2a9f89a2f0404264eaaf46bb5a829be83b203449f9a15ec2b387792b761bee019670c56883043c61c476e2e0f3b69d31b5190713c03cceec177320591afb5e58094a8e755000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000952476f0f4624b81bba4b27bd1f72d294002b743b0672155c28bd0368c5e4bf71d34b7c7e88ded64bdce97588c427b31ffcee082426df5578d22c4685edca89c4f20f5b34abd8eb9bc55ace3f13510d933f1a34b16058b498cea53ec25705b30d52a7ecf009fd677527ad5735596efbabf8b21a4d5329bc7a555f8d831f2511ea045c559d90e774bd9e51c8b86403c359eec3a2e1da017760f7127e338633f6c280e69beeb11d07cf9ae04e4d64a3c969a7ec154d9d9d68e25984efcb2ad7c6b67960e837e07c477013d4a87ef274a613cc52f3ebdc23fb39d2dd4a0896e4e3391930c6de775e234ec3e6fd3a3987e85fdc83ec951feabab7d4465e1b7cbd61b9535ed2e6df52afa14c3e4b2fb697dfece13d000d652a7dbe4ff5e48915b48a4a88c2e1c0ae0396430441ef019c88eb1769f2830cd71583cb4562424d603050b76849f3e2c04e13c8853ac5fda1a993c32727bd04e51aaa45bf9fac135c3cf08166c253da120c05cd9414b9a44604f6b6ad9ded5d5b48bcc056e8685c37373ac699994d7c5588a44381527072653ba3da044eabb8b088d58d64114a082df58817b61f5fff3d23e7c2a954d2c410b7b35a75adc5c3658030ff9b48f4789b5b0a30000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010694537d1efbfd8c5e20b380d9ec0c206c108f4739b88c5e7d2df43b119faba00315ab851ac2bfba2237539e1da14ede756aa88864ca6dd8457ebb06f2f5189dad0693336e8b6d33f0f648570f071a024b569c05a0461537595295dcee164fab1c1d26d37f44dc7a27b62e2fcae01cd74b0ad6fc4c8ea7bad5be2e2e2db53e98c600000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006c17cfc004cda6a076b1028b9677e0bd463409b6bcbd1d993e6ee1844342e1af2675096db7d657a70f2f31d0398e78e051aca36c2120403f7a40aedef7de4fd1ef7e7c78d07816c9977560845e2a559c6c2bc123ed7f185c751e71054cbcf456f61351be8d83adea5ae7cd60590cf76f97c57ae43aea7f3b43169a5518836b992f4d2dce5efce03dac5909c7e93e71d99fd246922fbedbfba92faf4c3155acdff0ab6f10434152b399d6c8e389b342c43c4799694dc209a00d48d64c2380f97379f9e8e08fe921d1f39b2a59f343b7a79d2c9c2e6555b05b59dc58dde99058075bc5fe2684ca36622221317af9bb338e83354e9d8381ce034658d19a61b8a4bdb570c62a375815b9f57656d481a7896a0081757209ec8415a3ee42fb597b7d643148fa398a330e05e00c9d57225476177bb013a0a6d763609482fc67c2653972f5e27cf59dfbd46f6dd761bbb80a7da3036b26cda5a52f43841e6927cd8038526a35d21af0d965f96f46d8daf02e8b8d8240f46f388f104cc9b85f593609fcf133777075a362c6ccd134fd95cfcd6dceed2d5cce23ba67c4d1cb5169b57df5d190b13fa15d5cdc4ee4ac150a1bb9e66fa60fe12676dc15a670e5e51c822891e0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010806cdb9bfb6d1bb939f5c82e35b91fa38933f3a4f33064f4aec5d6bb3f25fd9031618d5fdbd6de02727ebe9e1a8666d5a883f65325ed83e69cf58009173231282289b460fc736ab920388f7fe9ed89304051be313fa8b58947978821099bcf5ab289b2325460b813d950bc2c3d35df8a862d31209b562ce3202ab64e4afebfcff000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5ef00589b15a9ac7671ee538ea95d2849a6901353eda50098ac858f19099680ae6721d1cef830d43146a50a41a718c5bd1a1c170898d15de412554506fc93def7236e9331f345592d210a95f0e520cb268a43b296407294ac7e1a50bc649efa0ec0ed21c0ceb0d0363b5f03c321b965cb94e4a7f553e95a65ec40f06beb58204801ad7454516b97e20eafd3fdbeabdff0ecdd430a3a0832125e7f8bed78b2e0ed28b074b82c2730c7d8618b8127c0e384ba0a2b1ba76fb980bb2ab22c4f2f5e9216e9a758a9194642842cebb97f90d08b135a2fd63701d2493d06669cf6ed837bbeb6ef37871fe1a4fe32414732b8acfd9a483c058e5bda10043f488de74c949dbdde5ccfd1946ae8e5ccfbdd15fa8435b6ec7adc724a04e1aeee75f070553799cafd4e787ff15e5469291aae772a8103cde1c17d2d96c88aa723ac40fbd63115cab060e02600973d532df710214b5858ac3fb45080aaba1b1848f851dcde3d1b752a4d8ecc1adc96dfbaed4c7845394e7f028be33aee9c9cc65242ecaf26dfeb99481cd05d208e0b2022db3f04202704b558d21f633210fd417dd91584c4975f49015b7e53da713a31fb209cdd53224d014cf8630c83a3cb06bc3ed13703e30000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011b22b1e56eaf160b1ff3984795cca6f4fe4736bbde6de774163477dc84833c7c0316bc9c7c0124ee40085db3fbb70c368f68090aca3a8ee15cd138b803ce84fa0406b704c51883ecd50da9d6d3f92c9bae601ddd0b0ee0f8da9afbe2b77ee867000ed34073d5a58f8c6a8aac99f28fa31258d5d42e30ecdbb5aaad8a7301564f0700000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092ca998eb21587b575ec5a43203d9d697a639093cce449a0dde0a4554362e6f812e5f8acf2671bcee89178d9dc92a49abbe69cb4e3eda07b160fe3d3daee9cfe72e39460175c136693012fa0a2ff3b684a7781b8ae1b2ba773e23d60f8d1c02aa6012676e588a72a6c50c3b3410c109191b3f188a2b9d5ba08cc02578832df2fc46adf971fbb0da8dbae6effc013937917b80fd499b1c98f5345eff35babfc512d9924bc20381c430f53d3a9943e45295887cf00d267a3f1b9bb61d45bdc26ebb7bef7f844ec90b5cbd87e4375a7161ff4ed7ebdec56f1d1b74c043807452ebf493411070cb5a81300edd806c6fe7ed75a4325f9d315ad6d47d3a4b0ffe0a630330614bb4d2aa3ca50cc9d48f17741913d8b63d3011f88531172bfd21b91903f29401c0728155d12a7bd3811cfcdf378cbaf4022fbfbcf11071a681ca1a7ce3fc65406ad51b6cdb14cb8fd83b3078da785403079fe1dde542839fe1f7d7c381ed992a199db15041539075e9f9fef80274ddbeb896d4ddc98d822ce05eec35d4661b5a2063e3fe6dd592bb80d02a4f80f4c16a90a779f3a7ff9df050e0d3cbe1d32775236323ecdd9262fce7c473b34700a3f93010210fbcf6911ef4ffb39bde80000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300121e4a3750ddd42c5e196f63d6af22f9bd70e066992663a324e2239f617bbb0b6031867caca7c7ac94f4efa55b48ef2023d39e2c4cbf57bc8aa5e4a501b234184d52b54d645056a39d211f79769e15d89b3fb37278d2d01ddd8eab26a56473f83281d2d6ed2bac7a5456d5a3bf268334b704aa4cee8124778aa39141ae3f0897797000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a07c54b1ded181e7fda50f9f57abe61eb456ef4fe8c145a31757216836e986c60fa9eef1ecc50290bd2ee70089de998cc6a994a52773cd4a05d005566da24276992a3ed451ff034d73974bb79b440cc226f79ead70e1ff97e91236c7839eece56c0e866ee1450b9a963946f17b65dc0a3a9ac6883f0791a12f380c623495416a2071e21667464f1d2e035097e758f244e480fb4a1ef1554fe78e44f5382b783c11c8a6d55933a7aed062908ed504c15b51d8569a535e188a2a10408343b1dfb75bee244bcb87c4a3492e66318844671966452580428e4feb95a39945eb183735d9f1a03dd490ef47700a9f95067d24a1c576fce6cc1183a4f4e4a8807acefd33612efd4121c7f5d2d907881b295fa638520ad07d0f872528abb19fdade8ed152402bcab7eaac2a8e8f038ac9becdb6d8b2efc1c107000797866a9f8bc33e5b199d183e044d3502101b40ecc6b81b983cf2bbfd00def9e964c752a8e8ff0bbd3f4d93035baac9458c89bcb4c929e4d7dcb393193e705d38e850fda3b3935b13434cce4c5b222ff2d4a14ed27efc5916129b8889e6f9830a84fbbf85bbd2b1363577c459bd6285f5cc2d7fb520cf6f1145687712c2ec779e8bb8221966a9358ecf0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300114d9b880a92260ee58da74e6e7c00131bd252594d755a74c2b265b4937b4536503198ffd656eb92994a0e2244e9249fa27b602105f5a560655269892841ce24ae10c7b214c79397176186c83916201c43d71fda098669202c8ee4fdcca979b173716dc64f53260179a9ae4eaa3d684af6f54b1affe991e5dd3788c3a674dccdb12000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab5a968a99daae9f384b6f792ecf56c041ff840c1ba8004ff5dcdc4f4ada609717327fb77e8357ef5728204792b86d992c79cea48b83e4c167db087725ed6d42fa14fede4c042e2da337e08aa36262ba20fa860367d1c6d35caac9425209b1a61974bb7275a8ebedff03dd87fcb97ff318510d7d11dadd2e9ff005908d885fdd4546a79378ffdca2cb20ea2df7d500d13d88d1861213ff88929365cdfe9ff1ca20a181fa59590e1b149bd60f787265c1a012f3c02df530006f8ac99d6b2e8dc1f4286f8e906f5930bfca61a2f6d67f786f14728724ccb89c169588ae72354f17265a0b59f51723a4e7441a0576767cb0ade66f4d434b350d268c864a3be050279e8ab7000892e671d1e85d40367a81ebc30d8b45343152260a24e5c655b25426b58c45dee85f26885b96bf2e5d612680c1c215dec019f354eb857a90770584f00e9d3ae8602ba5d0b543a9ca4154dad4c86f89cad17057cbe77f1fd27f71ecaee3a59d93b47621e1b5cea4d1eca9b3f9de3e2120cd7816febdde1c7144e60f205e8251e56d9765dbed77ac99d7bb92b6ea5a2e3fe9424c16fa1347f64fe6709080b395d435a4098ae7fbda2b7ddedb218ce2ded5405c0d3682918826e39672e60000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300100a91ef9547e5030fc848c1c16a8ed9edd5726a43b5deef8c55f7984cf9b4319031c1080806fefa7c5ef592500156682adc11d7d0d77ac01137bcb6e7520d1c415089f453a4736efbcc8364f7bd78c25aee607b886f7b8a09e41d58e1d84e58db918fa6d085303ee227bd7658ccc8c7e8a538e35c10d009328f575e892194325c70000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000694bc590481fc6c565845871e5479d57132560bb15164208c10d7463788fc024df181bbbb16c5fab35d11f38cde97a192135bad32b8251a6b9db334cb31adebf276de787ef5015257703dfe3b16a032551ba412117bfda40e0182394fbe76be8a1d09417f60e17518b151a4e38d22c18e255f2e3aa3fd28e15cae0cb728e1775916211cb699f4d4267fa1243ed1dc22e2dbc28801bd27144c2bd1cf3c2b896011a22e5cccddceab0f9ce032a7830c17a10f870a63598ee0d17a2c13e714f2dc5eaa1c9b895608ae8a9bac0c717115e2563b46219765ed6bd117893704b36c2837d642f46d34a08f6962921744329a2ea0b757154b59dfd97fa272deca7fd6d350f1e55d888a934fa560f213e61fc882813f17a21c992d8c7c1cad0279641b7ac92ddf5a0b9e39eeb1faf065e8364caaaa52309f4d329a57aabd31618825e243bee0164304c7aef001ab71d5d42e0f341be4f08a783edfe0eb7c78f443c732eb3280b5da18a638b0b5b6d2573b230ee00f65573dd5ebebf57ec941a1f52d5e88a6e3f4f72e0bafd88237073ab8dfe81a173d2dcce4c441759b9b9347a928ebe702274cc1e37ab3fe2da45cc08e05e38cc8066e0c8cb2dc8a38b57aafa46bead70000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001246f53b4758defca4060dd139c5e962ec9d1413d13c21e5c6f7e24f46d81224c031da965405d88c352fe9b6a87ba3dde08da8f08ca549d3943a32c0c26b7791a8122fff86b7f9d203bd447256edf056fd3a505eb49569431fa03bc5bce589ad354181350e15fc4bad9ead25f067704be6657df5a5b393a0ef3aa24c3ca36a9bdf9000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad117ea9c698482b02a835090bf079f5687144618082c7a3e5cf9c751cf917fadac7cb71ba336dd938b17acac32dc247a5e68976b0581625738ee06b7248e818a03b11d7cc84219523d9a925dd92f51fbc1beb47564b4e68b66004e0ad744a2ae6b2eab0d69b5fc61567ca9d6ac2499353f983015174cdcdfb3df5cf62f497e43c7c842efb61580447e45f96eab876325e7355e5ec0c80076b0b405590e4553b91b7e9ed43f80eaaafb3a15258395684974dfbf669b10d15090fd7176720b1e78053495221de325e24ffe33544f640c14c7dea811b96d2084f84e1e3da1b2c6058eff6ceaed5aa924a41fdc4c5505a81683e6be2cdee506f55e02987bfe477550b7a1081486461fbca1d171540521c4e4c9db0b54c74848855097a8b5dd80187af86127ce76ebe96b135fa4931ac39228bc063f1aba1ab14e036947cea17bbe7a8cad8d6d72a86407413da4f03f0cfc576aa9b4ab31ec8c80a26e913853ca8545f6bce0bf0509715d3793567d904572a12b85ecf77a15f9d1e81606dbcf5a1546c8d6c6c04f69d234d8d52d416a263ef9ed0206e47ce59b71b413251d58a30fa789041506cd4a768c0704e1a16cb064c3f52d8c90353fe994c9506e2c11684660000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001054ab79aaeadbfedcd57d44fbbb62c9a65b4bda34c1da7a6a5c978093c3546ce031feda4695f5deebb95172b55b8f2b4f53a2c580c04abf0f3cc88f0d72d609c42013ddb009456b6b55c3eec7f3519bf03267f7d92b16d317aa1c2d5559227e1ea0931eb725562ddfa8433e2d208049d12e7f2ed3a6c796fe009a648fad6012c3f0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e75d4d61ee9573c71dc299789ba29a625a506f80b4b911c37048086853b04626b55cd22d4e52cbf879765eebcf41f4fa80e3223a2175ce6f3c006ef9c0e7edd855add9b675b1bc1362cb31e2cd9b0076719735e67bcbf1279b191d541c1afd921115a521ad165e3d98e9263f28f0c606faf383cc833347a6d921174fbf3b3206bf43a9448a0a0507ed8fdc06315cd81381acca1b9d684013953a27ae13ff5f50d4d20c96f273d8fd583e085798d3a3423bf7ee6ac91cce1b769ba1caf47be22ff5935b7291136903372806b6225a8c4a744fbdae66f7301049ee9e35eeded5a003a68501f92b9a65514a44fe3b802ea8baf170782dc5d1ab45fa7c84c1a9f232a62ca0f9a5f20837d1eef5423ddb251d89f856ad718aa9209366d31ceef72ddb3247c8dd06b407f5f56ed682ec1fc6abcdb1e042dd722eb372a2c03268c9c3537a50c6ebe67faa903af2244d5be612db80eff5a529257ec71865b809db9841652845e022adf251f5ecf6879e7ab645c11e0fd2509fdfd5e42747baf8d43048ea6f4dec0ed3861f01253ab13d1de9822381e911161ccd2853c981930b60038552f022798371771b9ee607a5096335c7f24fb39353f19a9c0158047befd7259d40000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300101aba87ce3da883566e0cc940582d652b59f0b5860992b039aff40c8d38b8cd30320cd4c0192a7672869f49f92abbe743b381b0a088c00632d7ef44fe1e4acd0f7128b7d369e5fb68a3031af0845118c105c97fc90cfdc54fb4fa610a83ebdf5431f791804241a712d0f3ad0fe4c6c3bb97bb88cbe554d4151e9ebb0852554eb4300000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088004635fe4ace7a5291d76773e29df2258c96dd48ce2b0be73d4fddccbee667218b11d4f5a9070ce30ecf5a93168f78e638e769e47955775bdcc9b1779a6721eb1610a97add9874e2a2170992283e607d0612a91b78665fdfc2d151e32cd29cbeddd2c518eeb8e37d7dba4512d11ebc13044f28440169c68f48fe6fe50ee19154459f5da6c9d1dcd0a058dc3cbf7ad403c02c9bef6bb7550e401a49ca7c950eb46c0c25858e82b2bed3f5d395c31e3e01a79463b024b0b399597fd928b0face716fcb929ddb74c6e775983b1e783a7f1e31025add4555bf38029c90d1dfcbe40bb4cf7073dfe241028623e6a7fde9e2e46720e8bf836b0f63e088e384b03b36ab8a179871f25541550a0a7131fe5d5d23cd9994baf63f9bb7cf9cff59025804ebf3ff7e5b3e3e680f3f80827ee1e4ead0b22955a8380814d665e890acdfaa4f2d78221f7e0e41db4513916fbf08b4f5b0649b76cc24235f5141a372c73922b7b00fe53b46b8b60d0862a37efe445423817c133a17f4b8c082c34fd3e01961d1c5d2722243f289a3c22d3fa041c0f0798630df19710df9cbfb83ab88a9941cec9c7e0068f00b823017a5a268628671835edfc09b4f2193072e77d5d30c3961d00000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300110809ff917987784ac2eacea56b97200cea99c54de654165172ca500aae6df2d03228a30f490dd5b9b409ddc246f0a93ab44690fea36b41081ec7051112abf42db1f7770a8191f3a0c37656ee45ea5a5ee97ef3fddbea67d5bf52cef3701c2eb2c25f8bb65eefd5c35bf13028553c8d2af844131574f0be361972d517a7141693b0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1d5938488150060f138fe154d438264f81a74d1589d7d24c8b0acdb4d560737db20ca1a187f4a7101d807ab78d71fcdbe0effb691ec775f9cd6bf4ddcc8b4bc99985079d907f34ad4db637b714ad891e24ceaa54d5cd62ddf024f71155e821cadca3b4bd71113c0627685e6cd6e53527bc494dcf25418917fd33970757de1d5d694e15d7c1de9b0e408808bbedd3f8b653000b08f0893bb04a6279c0e14e4cc4e37bac0b1247cef48d04b4c70f6f51499d7a114f394fd88e79dd234eef3c7cdd5be0bfcfbe0ccd8a4a79407fa9cf22bee54f0ff7dac0dc6af78b3d7619ce705ea9a22c017438269d05f6a42936f2bd6c71ab59bed0c7d18e1b18874a5acbedd765cca92cadfd2c8368563b2020be0b4b32a78a2faa926e96e6b7edd2d8ad0c232e11fa01202c57f679de5a904fe49cae28013acd6711e06fd510de60499846f465d4720692c3922aa3c96bee0b10a11b91327eb157e1e6cd2e03f8bc4c91687d25db9757f182254925b101a69ef1641c0c3334113fb7de36c15edb5991760942a1423c296d8fecfb6828fc09181ef73e47b897aa9a853ca1eb8b99df1cbffc3127299172b2bb4d96e2cf271c84125a298dd03e06bafbdea144b2279c9d61f00000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011a118107ed26d1ec66589a38a0e1a5da408fd00b7e8a367b22217a69a84b1775032319ef9a5399870cffc13037da06be56f5fee80588a767efcdfa9acbd61a32f50c09140147e0a3c59d9e5f36b701738612b2176a1a731ed30b40da6e45628f6f1e95a59b16abb6c68a4c477a9fefbd27b3f4cbe7af127aeb441f8eaa4f8bed8c00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087ea16bd08f3302e2ccc2dd100b07cb8f6f1752a08e95a5d1a163195029c5d1bf664b97e32dfad955efc26a10cc593f141c4477cfbb98ae8cfcf75e49fc731dae5fc6d66b839358a927071c2b44affd058dd6434e3dc8ea9dc5d3808bb97ada7253514335354ef52760f81b2a08cdb8c685062a0b4881a7b58bb9634fb33ce8f72becb1bad888a9fe5b3c9cbe1c33aa557c73cd2e6e0eb917b496778646e33c81eddf1b11d811da16149345364cd44e8240a9c64bc1fce4556b94bf8f059c46ec3d06161875060217572913810ceb23b0a1d8504fed15b2816b68b11a8be2ede26ec7adbbdff8f66c6bf70c8e33d96883537f1d1083fb7e4a8558affcbc822f2fc12b861b3e47f1951438f94e718dd9ed72c43215bdbf28cd5cac61cc9c875bdd93cfbf40518d93a5157e550a79758781bcf77ab05d2811e5e1c2e0a81594fcacd746a724d3a6a4bf49b7af90a7f81ec4aa497ad2fc9681cfdd715f3564fdb4b503155a599cc5186716b34d0c08d3372feb5c34c801a5ad2b20b56b0bd52b90cb4557660356726b179e0ca5777dbc36bb3a408b466067a93e668e8426dcfa22e21f59acc3c66d51a2eeb4cac69067482562cc4643dae493a0acfa2c1648257330000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012079be9cb93ff2dec24f5adb076bc689d34f9af48ba526559f797a65c2004fd3032337f0c3f751aa89d35062e9acf746addfefc03977252960606ce5ba330a6714115ab9515dfdeda081246079bb4e512939239350374926b9fe14fb3a291f40c81c608bd1482f30a81cfe33cc6b69d99e15b6fa5363dec17186e0f0dfe4a05bd900000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c8750001caccc8a6d9a4d33aaa0c1f2caa2b6aad1f5d23ebed8d5cbb42459812900c6519ac47a82c3b514b3cf2dafe250b99a4c8271b7c3b6c6de2a0dac71259a48e83125cb5ac7e13f2c0561464af81728595a9c32a09fa4d3778643c908e8d73d5a9b5797df6f8a9ce310534a7162aa8a312f62475289a1c1eaba7193fcee84c95ba2f8bb196d194e5771aa11e98e51c421f661d284a86902035e551b95a53ac16ce9cc3c10d7afb0a343663bb43e815599cb021809a6171bac6e8382e43e14d83ff492813cb1b0da72097919a19bf987b8233c7034947be31681b06368a9a0b29d6f929cf0c778311390281796f13ccc91ad5c63d888ec5e1179c840ebd34579f01b0fbd3d05c7db497d9bccd0a40a536a73ef594b4769a09c49f4b0d8848219766f00f4c164163a2be01b2f46683c9f4f08656f7a637d1bd63afe6c3e8fcd1322254a72bb423d8bc3360a6c6740e001e72301f2874ac5721adce5aeb9602863d95250ab552bf63140a5c4742e13c6e1fad60ab429939f666c731f1d253673b78e9168a443b8b6896108b53f461e763ef5719b3b8b9909fccedf7e170b6c79a03768ff47651988effc57a201ced8b9839dfd33b9d3f9c703dd0ea2f787c0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001239922e0395d0d848ae2281c493128db41d63dc0d730419a61e4185dda0aec1403256704693a5bb5b4d5540b148be0266d41c821509870f0c746420e6b1323ffc5178bfb6dbed259f7883801ccf02203ee6eb963652ff91fa14ccd977f839cbedd1fa98e0b4707d09753fb2d296eef039f02d651498ee7bd96234092a0ea2561b8000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000abfe370aed8f5e4106bc7276094e27e4e4dd043c2bd70f55d0a251fc3ff74bba4377788d1eca8e623e87eb211e9f76b6a74fce2a94fcac47ef0d0f18a159464036213256c2ed134f7eae782e311060f5dd1e2c384a41b42b2a352f47deb502e4e928fb924bf94e331393bc4d43e25da13329a013582aefc24c788504b8aa15a42b1e3659410841cd0e378e22c470c57dcda6436a470128c8a12adb4df1231967a0610330ef25ea3abb2419ff5d94de1bcc34797c60062536f59b6495b0708023194fde2ea4f92b7824440d2e2136be0f1ab8c69352fb3c5d31b1e6761af78233386f80f6a48083b47e721dbae93b193a57da22800417752860ea3b814480c496d37f66124568f95844f22eb34c58a0285f02fa7efb0dd6b1e0f2d38b8eef43b6a0e0643f1be9c5823be5b4a6d3eae4ec287549bbbdd01221c768f225387adb8c441d6a9ab11a7eeca916ecb209e75971d79d2bfbcb7fb45990a19245e95eb23432375eb24c89a0b23553b43c8335e1144bb13ef0f4039f7750c8d3cd1db18ef9c94293254f3959f60398ea97c0ae19e200f475cacba0e6bc2a58f44379aadb5e78c2c5459c70b73586d7aa169376a77b97a2f4239d57e94a210c78158acf91740000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001037b40cf91fd3b1a53a72cad86fa5d511282af52647aa3d00d281e5b2dd6ccae0326c6d3b206eaf6ae98fdc2a6de4e079994650cf536c01f11d1f83488140e6d4a2e79603aff0e2992002a75f4deefe3ef6c25c0a8c5cc4fe74aeb7c4b77f50aa72fabf262ff215f5bc10eda501089cd73b0bc4bee95876489f0b2de084d6f9f7f0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ac04c2daf50be4066ce028f8c406711416a0f6e8c9641b9353a9dc69bff0d9a8441ba48b2af98e4e1f7e1937949e8c75e72e057986d600fbf640f317b9b90d478812c438ae5a752f5427f5ab14aeb2ecbc0d1e295375030e48e0aeb287114427a3e7e00b7b171718ee9f83a29969fe836fd558d1b112c9404f0f6c9e4f154717350519d394214833b10719b746d694dd032a701b79028abc9b1cd426ca4a93a571e4b9560b0045dc2ae31df5be7995f369b91c014aee86596940d352e3600a06ea0e43ed01452fb6bc99f66c0df59207c505b199acb7894a534853b5b05db3fc23a39efd3e7cd7bde631f9f6ef61890e01615e89c7162dcb62679b9e32ce6034faea43069378efbad51903626b6a2cef25676a22794b9b364a67c577cc223d0aba142425fc1556156bc64c0fd5fcf6f99cb38eb1a66b7f6347dd84837988c43a0b4e6f703ed36cb4a1351fceff760f2cb5c8a676ea23bf0cc4324c8d3bd5078d3cf35c1726fff8f7c806da7634a3af1eb9c8df781a2b25790b700b8c80411169b17c1dfbadaf3ec4a3c5aeec4628d67cecbe63fd1cd88573b7f114f754ab9725eb7619a3fc9f624e272d422d45547913679b55a884851ef9e0da39167bb451b0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300108f747c1456ce3218efc17789260e502ff1c95918efb7c1865fec007705721550327430cc2a07de5a908e333a14e930baf83d6ac69810d44e940d22df38f773c3400152e4231641ac6ef3ecb63cbccd26d76531e9208a91282569d6e13ec30652025de55ac774b5c399f855c526b8e8a4aba19e0f3a3a46523e3a59f2fdc046eca0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002214be85153e5fd9abdc93b843f9dc89037d60748e7aa680e3b2763571ab6e121ac8e165d5069608b7de7ca88ac9cc2acd7d6e453833157a01d539826c63be03a40ed52b6f126b84c43dfebf82e56450e10fad862e6093c8d2652dd2358d92aee9375eb084ea688ee890c45daf67953ff89b99a4a6e1cfafcddc01117eacc47fa8d9c1e78090bb5b0ec6195b1eb01977bb3f777bdbf183134a9ad4d213fe38c0ae272bf4d52c903540bc2ea2157f31b3e1b6ae4c06bb1a7322368cecc7e21b5ff11e2df2da5527df21880ee92d0b8c628f005e700fbca899b743262d74f867f540875073678ef0e51f8e0fe54f65e16d126238ed24a4bc726c5de82662e334a82eea84d97be8899a3fad6c547026b38a6109bd0c730ec2aca2a2d97ba0298a7ca701672a0344f5eb7b2e7c99627f7692e824ea685496a4fc725013d041d091efee85baeb565a362b143427cc465f243d9d69ee519b3f6ab606d7d1b3a666c3b7e11d8f4798a20ebf6d2ac97eac5000635dd259be31a2fe0891d248caba980d696ec14decb55d8d6510ea6a7964db1855b0a8e399f11295c50083789f52ce5fa7223c1793c8e7b7077b9bef56db2343955b87625f32fd65aa856b095d8492ac510000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012539b6681b8c37cb89048864fa3565cdc332aa62734008a1e159728f054a4a87032a08621bbd4aff49c18c106c9f3c2ba281c8dcb71c5ea5aafb6328e2d009ef84109ad1447b528002f8e7f47fe8011d289127c49f17d36edabf41e2d66a634d84098216d546f0a5ba27ba68ffcb57529d0e2f2cd7c87f434fa73d3ae30cf900220000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008163974c03138be17b1806d59abf508bd22da5a311934e7a6dce3efc8191cb25ee75123a03349da2017c264ea029efe317284ab60ebdb3246cfffb631f771a09ba2b4d8fddaae9f71235581befcaca75f5223fa5224b8604fadeb9799565ab71e43512aef1829c90968b257c12a3aadb3f04daf68a2dcc6dde8aeeb5cf9bb91fa57de4f04820b03dcb448b467215c4a627d1a01980b15f0c5bf52feb46bde422e233a9f141944309bd46f4e13f6e592d8061a41d41d32647570c2aa32c93dbfd9bb7d49958a22330c621c780a01541782347c553cb4352caebf5f656ae873096654cefa2f4327b15f16925bfebfcd6ae029ad805a185f76196e9fa7d71ebed240d554d2b40f30f22e3669ab8694b9a07193030aec9069d0fc3a9cff36744bc854451083f516b6a56114a397b6c0b4cbd362789287e96d8db681eebaf15e05b723ab3ffbc94e307a609ed1b9764ea57063a416b8be3cbff1d431eaab1ebf00f52fdf4de88a5efd388df614a24c1d465ee460cc5e072857e79ea1fe30a4aa1eb4173d85283a3f80c558c8e1403aff0dc4ffbf11a676d5f8501f843bcc53e8d47cecfff68d4b847fe5ddf06df7ccb072ee1e7aac2d000c2f71053b588f0284439d40000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300108c0ea82c7afe2ba7c7d440627a89967b1410dcf9353d3e77ef669ba060ffd4b032a0e707239eb81b72a6c70d7138450e544bc0e42eec5f4a4f76a62d672fa040527b3bf78eecfcbba887ef75b5cab19a07ebfddbbb5738c218ec20d2c1d51c2f51dbebb4cf36db67284c5e3c6124fe262fdeb7d7af6c73388f32f7fd4e0dcf79900000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018a365b74798745a04147dc8d7ab9a6abd9a6470987dc27e70875a86cb5ae38289335ef75b5ad2cbcde11e087a3f8fae94a3a57354870a17319af6d8cb1c9e26c452a473fe44df99f3af470a4a7e17ed020bcae0d6ce7b6cec69af49e56ebdf0eeb1dace148ea83ca78d8c74982b52178be482288d02b47d39ca0aa6bd506207c6c6358aa7eeeac9b0f75f9d75d3c0e30ba59564d7f497306f2fbc60f9facb643b8ff4637fc57f1566bf2c85b4d7a47c0c0931811738d61aa63216127101a950626016fe59ff8f3cf8396a7384f2bf444eaba24b29bebdf298627e533c8aee634912cbb12a0fc441d21edcffa60acdba9d5a31207fde681aba3456126c2a7aa00397a7778ea4419232a7a5c813a6239ffe2adecb1f8cdb56abf0636a8fa7e7ae854010771589773746f0a26cf63c9e6354b1ab001d9fdd3144e9ebaa10279a978cba77d06ade58f2900414e5e2d95186688a3fbba86789f449ef1a02e72e798f20f9981e4018551c764a4cbbd27fa3ceb28f8ef46111c24edb8e48d44ca90446515fa1d2b1fac6807528433d26cd2b6cecff481576541f76ff8cb097b30f2629f12930488bd4d3e9adfebb901e26685f49d8165e75d09559822821251dcfa8070000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300114d6b21e2ac70ef8f905df3c8b860a2d6a526c5bb782064cd1123c4b01066caa032b1a3e2ed9b61d7993c668e20bf36a0b811ded190f08fc73e9de32a6f666efd51eb507f6edd62e6d189b72ff9a127061c4972242cc1aeb74cdb4aa8514dc29f424668cfb41169e9b30f04aea0742c9168f10b7fcbef49169c2c80f473407db550000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c81e17a18a0f845b149ec59b9dbb0ff3ffddd386419ee4da6722a818009764d82a99c82a912e5072499c4c0a236c5435e90a204517de022c1509d3a3b5c573ab4d7d481ff7799c5e5be2eb9989cbc7adb8acfbfe6db22057bf2ad809e4878c2dd93946c0c95f89ce2db6d63dc89dabaabdbed395a2f76255ee2c0d9456f781d7e948adcd00d8f1f0631958f7c6dd773c269d297169f0fde3e0f5a8dcffba5548465215c58c1cb328adb13323c6f4257ae1a826a2bb88cef084dbd55fc457962960c15dc26b4feaaa0342ecfb78e966ec565a20e003003b58838faa3268dae6b1d80cec33a3b4b155ca0b3aee687e89d6f74784a6e22502f0eabbe37bd1af169d0ad761bf8dd3f9951ea5524c36d40931adf27356aff072b6c253ff5a3e084faf26b61fe5d00fe3113ca1dd6edd2192bc3703ec174364e2c26c9e8d0b5d1b8a6cd9d0e4f6224d94e2da7bf260e97b65e49f0560276fd868a6c8a0ea74df9d5360ebd50dafa6dffa3ceeae0c0972aad1f3bb3badd08709aee30ed6f6aea196a43205ba51c65fd808ccf71a136d61c16aecc71267d3589da44a33b793d3c2b528b533b484de52f7cdb8865eb56f7ef834ff58ec8edfcbe4ded758d830618b990710000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011db84ebf31d5d1197906baf190077f6e7d0a36bbfaf7554af0c8b92a2821718f032f4072da10323aee3f6a6f8da4d086299ec00ec66d615a9901193c9009856dfb19425bca10e220e7e61297d21f3e5c227bde9977014b8b7eb9764d15f87499a712276deab2c943702d485421de43db8c5475c0396ad8ba988c437c6146714d4f00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022a6bc3df1078ae9c80f2412136d5912dd4c2d005297c3917f395d0ffbcc0d11769c54906d3a397699070ed0ffc74111cd90a72f886903c7951718886114aebb2974bd21eb3997724a51980908c307ef7669543881ccf5dfdfe0c0c7e60ab272827f85b682c1184ba5bc9b573d5acfe16e35f0979909f46b4e1f0c540feffd3b80aff2c6d5cad51aa48873b2b134255095d38ff1274f314454f228cf6d6bb1daa7a48bf7ee8d2c0571d5d04a1c98946e2354f7ab244fa3a56b7df417a7f43255de82192ccf6bfb395db9b234117d86716f7213ce7c2f4034b4489cacd53bfdb1a8f088c71ba0df0f66faee1bbe48832a28b2fd071803618deb7c12fbeeaef05dc5cf9c87b4c86529ab3dc2dc5fe1bc5aa9060b0105a46a00f63fcea43e962e0b057fdfc408ca8c37ebd823491d4a83a84aba9c3b28d4f64d8e33f4145a16097c96493d75cff6825b82ca8bb94067c4bb33a7e7065d1465202da2b2cd0f8d288535a49acab4c5a3d6a548d4642346aaa3fe3f21970ad0858ca45142ed381df3f8edaa774fc3b516b3cea2542720becd3d185ea607522c58ac9a6f9ffb9225700ce57024d68ccfecbab6368d9d0794df56da7e4a8410aa6dbac315dc90098289bb0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001264eb5cdead65857c8a78c03795f9fd870c857a8a2bc39897568853c0e57912f032f4b44f8dbb124a1acacef3b67163b686838126c7301a3d92a3c2beef709dc222b912da891c26da410bf6e70b45492e639e46ed01a14d4b0fed32dc85529f64e1f14728a45b4cb5cb20c13d6a89cbd64f356ff5535ccf2041e8f8af5624c7f510000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008321f439e725641dd84fed683f66f08366a2faa7b4fd0e2edde6e7bb349708105759ca2a1887da2716af39cb47e7155f43bcb6b55c79dacc39865227801ecb234a470461a80340093bfc6e79c8cd190e136700f27256dc2bedc637a725f095e7e13ae014ea10677d6e986e0542e8677d20baa6fa0ca2808fa9d04bc7c495c50f9624506d17bb496c2e1df50c5b1997c063d249c343492c11ed76a740166bc842d00c36a7731f3f90d6f329138a2837ed44f512c4e9e5eb8c0945452a721898aa1878d69d88977a23a54e5deb6f381472088c152bbf3ddcd92f7f5af9f776521e3502eab388e1b523c8ae2c81c07c19610f1f07bec12ec5b96a812f9a70b24f67e64364807cd99e8c6086c17e06431970900d592b0606d3486cd08fcf567f04c94e6ea835f005cea7f5e1492e368c5293f1bc5886cb9a9614ec5edd1deb978c41818397be2bdd29ebfe5b7c214d1d79c2cc0e0a702475b1f47f5144972216db821334c8ff5fc06672885cfe06c3fd09106f25ff77eadc34fab38d09329cef2cb87c1eea454dc0dc046d3271d31c9b141b6ce9e444378d6058b299c58cbe26cf0ce708b37c9e972e89d0b58eeeeb9082864abd8e6e6cf7b4b27402b4d32b02ec7600000004000000000000000400000000" + ] +} diff --git a/yarn-project/end-to-end/src/fixtures/synching_blocks/10_36_1/blocks.json b/yarn-project/end-to-end/src/fixtures/synching_blocks/10_36_1/blocks.json new file mode 100644 index 00000000000..eee52bf8ba0 --- /dev/null +++ b/yarn-project/end-to-end/src/fixtures/synching_blocks/10_36_1/blocks.json @@ -0,0 +1,23 @@ +{ + "blocks": [ + "1200a06aae1368abe36530b585bd7a4d2ba4de5037b82076412691a187d7621e000000010000000000000000000000000000000000000000000000000000000000000002000e73c1bde1ab363089fd186e7f70614a73449c1c46c67d01de097799565b9800089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000100b59baa35b9dc267744f0ccb4e3b0255c1fc512460d91130c6bc19fb2668568d0000008027ec6e434b56740daf1130639487fdcb64140673d107cfdd275c76fcf25608ef0000010023c08a6b1297210c5e24c76b9a936250a1ce2721576c26ea797c7ec35f9e46a9000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000070dbd8d40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000caf43802af38fa06ffef34d3a3b16629594f4b14beb4969f4e35e43ea395e87c5b16884000000010000000100000000000000000000000000000000000000000000000000000000000caf4380000317fffca5bc072ec0d7e26721ef4e5f67d23b1d50e36b6e7e3d1e8b2216d67bf6188890eb3288ab5859e03bfc642af41fdc32194f209f34e88df2996dbd1ee5eb0f82ba823c27bf47b723dd674e43fa4fd37a8c4ce3af4bd7b9f785aa123ff467000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c5f0000000040000000000000004000000000009c5f40009c5f00009c4c405d15342d76e46e5be07d3cda0d753158431cdc5e39d29ce4e8fe1f5c070564a0009c4a0000000006999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f814c2d321b88ded0e008e23bcabfd7119e218f9964a2cf6496c6498c3ad2b9c06000000000000000000000000000000000000000000000000000000000000000127a4b26f0fae861600e17526b39adb2f13d4d6ffe9421310b7656e5b576830da0a43a7d0ff038f2492a51b4465c73f28c0644cdde523cb652668b167eab21b7a0000000000000000000000000000000000000000000000000000000000001e3d00000000026715c38900000a981f8b08000000000002ff95584d883447197ebb00aabbb7777776f6677a7a667aa7a7a7a7bb676677fb4bbe68e855c14348cc8f00f962cc17bc885e043d68503c091e3c7911c5430848902012056f060904f496006340104390e0c193474f2aa260f079aaba6b57b3fb810bd5fb56d5fb576fbd00f5d45b7357b4a71e111dbd287257f4d1081f89cf047f31da48247a3c93307a00227ae205f4a3276c1385e671e299e81933f18c6d5713f7a27b66e29e6d571300cf47cf9b89e76dbb9ab81fdd3713f76db313977040f425adfaf87e4a027c9f009410dfa76407dfa725baa4e95d7c3f2d7bf83e2bfb97b439c0f73939c0f7330032bca4b1437c3f2b47f8be20c797b472f2108c144fd2ec8b5c3496ef8d5bb300782d6369958e39a4fb218d21df0cf9fd900f214ffc7efc1aeb5d094553452200de6e3c97308e5fe8231bf70bdc9370478f7df1e271023a327432a6cc600c9900f1d8c88cbbd6cbece9047ce364027adfc84cc61c899331240f13482689914c00bad64b1ee89816624a0e0d3d893b5d903c7980e451ef1be863dd59b3964ddc00f0f1278f62d1f6ef40fa3f0646a6089337434c1e4dd11d9ce2a3e777c47b49009246be00abbb343dc8f0395ce07392536981702e19cec2eccd0add82dd95e90096e8aed82d4db742b764b762d7afd1add8ade5ae87599095c260bd6e55ba46006fad40e96b54abaa2524830749ea1b257b2aa68ea255e31512a26ce47bad4c00ab46be3f8086d3fa8ec8fb5237f2c3d62b177be22dfc0c432f4bf6942702ce00bc9157c099cf17187e43168dfca8f58a155dcafb40e4c625922bc510f90b90004b953dab11e91c2d6bbde5ca4cc387d5923d75d5534b78372b8d0c23594c5700adb72ac15580ab50982d96ad94a3c6fb3a26167467412fdf94ac9177e1ce02002da3e18a731517f56ba9b902a8cb548d6f9d57ad5725504a466d19d7607c5b00d68ed1c4cc3042244c6aa333216b42d6772ceba5c822d2802809221fa7d55f00e1e00662ac742a925665687501ff30908f17c3dee93ff4a15d30b43070b046001c292c6b13c74e4f2beb4dab7636e86d14a8c85189a3f61cb5efa8cc51078e001a3a6ae1a823471d3b2adff01c6c98199b2d7cfd976cbbd8d46a8befb6dab400de668d54a9912ab50f1ecfb33cd8188ce97aceb154b68d1720d6358621b2da0032e6e7d0bb3dbfc0fc402eba40d63690fef54002ebf599bac0f7627bdeaaf50039dd1baf11c1cd9ada279d457586dc59af1aef93c8d3baf1e603dadf80e37100d9345e6eed175c53708618730550ce186fcd8acfb8bdd4be5517265779cb5c00b4ded60564b36dbd7aa3fa5ecd39d7dbdee2bf9536fe4f8dffe085a75b730600e12d8feeb8c672aa1a59e53d66b30a4799a79201e33a187fef29c6f12b5c0300dad678cb3913c3e76c0cadf7b4559fb7def91916ed825d9f3760fc9c348eb100c1b7318c1009cf2e8cce33b29e91f58b9615ebdadc90e0c64aa7e20ceb41bb0028e01fd363bc19f64e7fb5db1ed9704f5ad13cb7c4c2ac35e0ad2533d0b8400037637761ba4493458726e8e2c0133a3410863e5e07dd0e6b0016ad1089c2c300b255a5c3177d8d02b62457f0af1dfc1b482d7a6cb63a499656e77f2bf930b500442b336ce702909a37deab48c065e3fd185a5581682e8bd51dd1af0b76fb2700ad9787382ca1bf446c5e976587ab08cacfc1399a87e0fcb6848df78bd6cb78006b05616bca1c0dbfe917c944858c02973d5285c9552eaa68bd5162a60136c900883d75d55323b838cb8d0c039d4d017f098ec52853443bcc66235c9c793082006b6fcb88ae3177467dec47c60192b9c2e00878187a546ed451419099c9ccac00fc391f3e4d6d91c6ad9502da473ac0f2033f878d7725a70d161f01eed3203000977ad0b5abe223c7151ee4b6f80878c1a303d478808c2d3e82a430c507e92200a1641e242c3e7248e6b991ccbb76557c58bec2141fa48b80f61388a2f8788000e491b1931b9bc79dcdce73eca98f22c2fb1b8b08d60f03561287218b88e0c300e9fd7fd514fef59ac2e52d06ab1a4584bd3d40e96b14b295f772404569a7080092245385c1b202972d296ea162b41420360688f9ab86c7649a36aa440aa7a700f11d51df94b8c1a5e5ad52ec76ea2302ea5c922ed9b34635e0cce629869f1600083eccdb9d2e657d2032976b8549277f6e322b35c9ce644a719226189ba84900ab26397beaaaa77278375b1919734ea72c3366e0ba2a350031b345a3438069004a77527a790ffba4be065ee85ff2fcf921e7c20073f725e8a03351c836780b00d9308652326acbe883f1f3e23b461c02ed1b468884716074c6648dc9fa25cb000a8c4d6fc05863a55311e3a0a1054bf8c7f3364e87bdd3dfe8439b32b42c2200cabec8b75b4b32eeb776c76d63e4a8cc517b8eda7754e2a803470d1d153aea00c851c78e0a2a16112cb0525662ea655789c5b6124b5960a1bc5ba16af7629f003caf5a1e6c0cc6743ce7d8af5096aad7106bc4bb80485133e6ee72543fb3f7000c0219df7009dbf2d7142d352eeb72636edd92b76e49edbfec2caa3572a72c001af51ef21429fce680f62b70fc51aa46bd65ed2fb9a6e08642ad526b6eefc6009648265761595836b880e05c7a71a5fa5ecc39d7ab6ff1df4a1bffa7c67ff000c2d3da9c4178cba33b8eb19c342ee1ecfb52da8488792a1930aec3c4ff4f8c00e3075c030b22e32de74c0cfffcbf055edc1578b90b76bc3903e35fe4cc319a00facc3042245c6f8dce3559d764fdbb65c5baaa1b12dc58e954e061c2e7cb160009fe01d3635c0d3ba7b5eab6472aee098a089e5b62618a3d203200c7d01dce007a449b5d43b4190f84818ad904479e057c32e1f335beedc90b8b33c159d3dd006ddae863e0dd9ce89d12bd7789de03a2f7a18133bde4793e9d41ee7199351a00119fa757477a787dc533a89c29e3ce29eece05da6c6eb53c4447e706194fa100eaa372dae88f3c0c33b8327073cef9223db05035c5fcc765da6dc24ce19ad500d30c9895ce3fc12108c8a94189f9b0d7f7989cda20ce690b2e9ac0240819bd00c135cc905948c520b166c7e206a8c851a9a3f61cb5efa85d471d386ae8a88100a38e1c75eca843bec207161a4fe0ef97e5a45bdf449de07b0208c4839e4e9f0090e904178d7e49e22ebd663704dbaec658c84e806327262409439270b7be2500337bec27d882841bd97a0be2f828447da6bf23cb46037308df198b447fc5b900158e98feae3d62a6f23477ee88cf5494600919b5650470e81f48e518cd3136008c10098bd2e86489382ac8fa8a65c562c21bce4a77b31b15857d269770f935005674e370d83bfdd3bea80c59541a5faed50fd862f3a8c60d287854ab91d50a002a2c59b5f10a5f9674e60de777618d2e91d6257ccf51e178854f9eb72c0f820086315d1028f5ef0094fa37880362b180c88260a90908d51aaf31fdb66cba45001637009d2d53cc9ba90218ac08dce5b8c0ea4a5345ff565676c76a1c9c023000f0579c9da2d1bf1fd03e37e69f5236fa3d6b3f2b6ff9b1a45416a60cac6e0c0050c3b26c7815f5012979cb94aaef159c73bdea16ffadb4f17f6afc072f3cad00ccf300de320dcc72eca3e01fdd72a4e0838101e33a4cfcff8d38fa73ae01ad00ea41b5600c7d6d6368bda7ad0220bdc6c592b860177c1cfbfb0ed1bbdbc330004224ac37550ffe05c1df1fb90bb4bcf5e70cab82970f5a9d35a62a2bcc3d6a009cc693c4268494dc934b2fd251b88f5f6f4351d10ee6d7d14ee3e3a58cf1a000f13f76c9df35038f4fb10855ce2386d83d80c06ee4477b13f1a2bd688fbfbd00e29ff9ed75cfb61ea7fd36da837844817d98db8f227603d3555114edb3bb0b00ebbb8d7ff188a7a191861fbe94e93bd377fe03f4b5032b5e1600007339c60b00000013911f8b08000000000002ffa55a7bac2d57595fb36666ef3db35fe79c00fd989933fb31fbfd9a73cfbdb4ccb5250d6a5bfa4014a231374ac1f88a901400d1941850c1d686aa69a8a689a4c4a046099646214609463426ea1fa241d1a20021f887d510d4f20718aa688cf1f7fbd6ccecede59cdb3f3cc99ab3d69a6f7d00efef5b6b7db3af2adbd2d7945d7b50a9abcaaefa78a8fa46e1af8ee62b55bb007ba82ab57b6af7bc01e3da3da6298d66f1c5fdb5fbe5c5fda69917d7b14ad900d709eae079af72f17c8daae0799faa5e27640dcf07947705e027af218207490013d4ad7a2674c186cab4ed7fdd9473f3d45565a97aa6eb32df28e61b98afa80046a61b7e42d4beaf2aaedfec2babe90f54c5f7dfa08c80d2846d20b29a5440000b0fbb4d744740621da3e79c9c29f54ae5a7ea1a10790d1fc3db957f9fa55400eabc452878133e3b40dee9726d0fac74c84a8f827438d5c7548f537d0ad22b00a69c62aaee702ac0549f5301a61a7d4e85980a381562aa15702ac254c8a988006a53a778e801c6a783186f22be89d5550b80e8463acef4694c9898c3f834d30051388098a7e0f734422fb233d5827c6f6e28dbb723829e9ea9ea1b5594aaef00cbac8e9f593d3bb38238b3c2c05776dc0acf94fdbc0a53f55678101431c0ca00413cf4e119f501f4f3c36a40fd90d901581a92a50187c7230cc9ab1a0987ec000ef4086f8ec6e88e47e34c8d12604bc613186c32018f9389186c9237311868003ca626d011f46f273a49d5bb323d1892e02105100442f4301c0b4176477a4c0082b2749c646a3c01c1493205c1e91404a7532138cd5b41f017d51404c1823d00d19354bd2fd3a301091e50c07bca6201a9a23c2aa1d100d082ae7e1554c2380021e9099c2b9dde0e37357fc7aaf89b9d29fd8c823c1fceac3115d14ac6a0fd009c1aa716ec304c320b3ab20642262e448d55e12ab17195c29942e34c1cce0b00479a73e82c309c73b810bdb03bd7985c2c333d5d62b4d4e8350e7a999e535e00f7562b1b17ae2c7a33e2803b1e8570f820557f07c5cc53f53988399f2c20f9004c2d52f5f770b5395c695ec794fa07b5a02b017294aa7f04e4a83d3f53d67f00292cfc4266c554841b168a084baf1ae99062cec5c116afb59528432da83b79003da2fd38d2fb914604e966206ba8c9b83582be0340c5808a194af1001133a600228e62f1fa11b8b1d4884c5e572aa9d90809755c7390e0aa3f8d5ce78a278c00b550257ec4911e0f7373160e34cc5d3477e071e9c01240a332806eb2b973680073482e4c6b4c8601cc4841028d5ee3a007111827eeb458393d5889c9298cd300a0df84fa92de0c2d1ec38c505a7d905ab7c338716a6550473c416ab01e476a00b0ee80d6429831ac0798ba4b05b91901f96a42b609f9dd84fc66b8ba98312e001461d2d750ec148b98e80e75206604a70a2619eecd38e448ef477a08ee9a03005923ca1733c2d8c3b1a629c63440a606516aff2d5e84642724976f56416abd001bec8468ccb5ce44849ae2dd0fa829251045222dd8d378925913c4e39080b6000144f85a0fab590938c3732680585249a68293611d27047d870185df84c66f00dc43bf112a398a047e8336451a78372d7514b60aa61f2b541b52b574cc8004000232fd3325d349ce34341740bac114a6998a699ecad75b23ccd9d336e77e83008a789ab2711a6d461917c03b5b2cf1fe036a99331e18c69d43c64d4a90b09f002d321d2e4859389e8614fb43466c2403d82a1ca5d69fc32f40f023c01fb4c900f767d434b57ed3d01f4fe91b4c5fb33c7dc13766a29bb964322a482fc5374000592d336b6654877c3d9d41dea92e4601df95a3d925fc9bd5c27f4bf8072c38009d89cf83db9b0cf0978706c8a830ca31a5a49f55b3d4fa2a65409b09b77c27003afcbcd1a1e19eb40224a7c51c4297ca0e162b00fe935a95802b3c570288250095f95270ce093a27e88b0614724d2f702893880d8a39e4415bc2a1be4a573d009ab60aa6bf969b474d69136cfac43f9a231b5bff8304ad116e31d88c17a4bd00e2bbd51ac9db51eb9ccd855ee3b91ead326b056b0c08681bc00d001b6a530200e2c0696f04104b2acbb5e05c13744dd0ae01853cf34be53128d6995ea02d6300f0c7c470346fe54ceb49b185ccb985304096dc719650189451e8766414330700c34be8375821405675184a5f318682223067afda9cbb4f2d53fd0ac8b6e43400da9a326e8177bddde1fd1d6a9733bebcc0c18465bdc373b7de82f12d291fad00c1f16a4decf7e414f5067bd23a4cf55b112020f800f02fdbe4fbed6a95ea6f0031f4e31503648300a1da819c01c2ee4a6fa84e625feb9d04080ff8bbcc5a8b00ac7a95e9d51af2ae74315af25d395a5fc2bf592dfcb7847fc09253d9dbc12d00e3ff680171e6f474fdb65c1cb5e06e4f85510e719a47d43ad54f5306b4b57000cb77a2c377191d1aee496bb9cdaced064297ca5e6e53003ea6d21230c5331500402ca96c76827343d00d417fce8042aed5050e255472141bc883b683433d4d003f3b5ab50aa6df6f3c3d532bda04fc601718cfe578477ffba0f137d900e84d00f4b650bcedd78cb7f1844ddf0d96a2c8505c6eef9724f19c2171c989c2e85f00820cfeaa79f282fe716064a217c5270b9c92f427d4dcf8d1620ccf5d4c12cc007d12a74bfb1c590654478be2b43a37a7550ed7181211bc89c343bfc2709b890013d96a2be78f1d86f42fa88e5ec7ee5663729722678a22357a8d835ea6b7f300e2fcb1dd9f3fcc4a9e3f76803286b8a43743db62333c42bcd737a9fe2282630096ea7fe1eec4adda7e13760ffda5ccdacc10c3b33aa6f497cd460848c4cdbf003518c64875f62b919ff54b9995ac8b3d66b5df6356e250b2c7cc44e1d3728f00999a8485d7e0612de94bef477a05ee9a1b5923266921c8e04cd62ad1725dc90074b2c23172b1927b08b9496074fbb834faf202a32ff69995f837680b9ee48e0069a1c53ef20ddc46fc898ebb59666ac3885b2dd7b8e2acd7b8e2acd772c55900e72dbfe2d81b05011a796e486d5cb016037a09226901327a33e27506eec3a300e051023f0b9309d6dda62646bb09ef399075467233dae20ed8c2be010d6323004ea64580af18e0f6abcb009f9a005f316e715a9a4f8b005f31c0edfbca009f009ae85c15013ed909ce1d417704fdb632c0671704b8b9bd1914f022fada04e1007043f2efac5530fdc6c25b66f4166a92bccc84e9ef2d99ce33e08cbcc02136003b78dbaebe05cc5bd4d6ec186bccd9bb36e71e53dbd47e18b26d398d9652c6002bc09b5e39c7fb47d479cef8f6828c8b9b907da6a9f7f3f40a18bf42ca47290038dea5c4fe9e9ca23ec3a69eae53fb437075107c1cf8b76df2fd1c62d27ec200d04f7674f733f80d5501e4f49b54e2eb8ceabc22e17a2eee0eca0ae9222dc3000fa10dddeb62b4e5bb72945ec2bf592dfcb7847fc09253096370cbc38d1c410066538af36c2e8e9a32b0a930ca2106fea84a53fbd394012d156ef94e74f8bb004687867bd2da5ec9ac2b6710ba54f6f6ca5500fe81ba5a025ec5f3aa00624900e5ec5c709e11f48ca07f6a4021d7ee0287122a398a33c883760e87fa34b3d900d1ae5530fdd7c62b911769934c35e4eaa1fd0eea433de40a07451929f738450005c8916c6b1735225b158525db149638f48ba292cf92d7995f5c083bfb0b2100bb9de242e85f7221ec90b4eb172bfd839598f45fe642b82f6338651903487100cbd01dc87564234bf752c7952a8853e566c83b46e5f3b86338ac2d95b744a70055de12a3d4390264c45b62e5b7714b743a99e5b036e51ed635c06728452eb90058f585a1aeb82d04545d1c354c0d2c62d18b23bd1fe910dc357bb2863a765a005166453d4039807234de3ae16d46b8ffb8f32e68943e1415168984ba2c04420015755fa92a57bfff5b7ff4856bbfb2f9c4ebeffdf8a38fde78687ddb3fdfff00cedf7bfb2fdcfdc24b4f7f9978fa99ee77b1a4abbbec61c9fc899f78fd7b9f007aef8f4cbff1c56f7fe8e73ff3678fd87ff5c84f3df437ef78f2ce2f7d6c7300e36bcf2ba9c7513ccdea660097816064a0230c186cf0a38075464dab753b5000518029d7d810bd5e47f80c04d8cb2c8fb83c2d4be8635eee6340e8c99bf8ee005eaec448895b48b194576f868d54538065af5cefff8e58508d60563beac3ac003754dfa4438fce4b8adaf66e351216045dab9f597d3bb7c273fffee0f30aac00576c2f02da1f52515e85a5619c420ce7400c4c3ac0785ce2766d99b74557af00a3c3b672c7a54c1de0761a2e1877eb1e28bc5379451dd3037a97501e87ade30082daf10135968b9ba2f36358e9d88603db9d2ef6dc6e177b6eb72b7b6e376f00f99eeb3c0937d58d9cc1d4793cd39e2bf558e729a23b6651f618cc547e497900a983a3b2eb1599c12d3343b3536406e315061dcddb1007e97433d5e90155af00db073ffd3ef8e9f7859f7ede0a7e3e4c276d302c7a1a61fbcbb047cecf478800ce96227107fc3ca63aa9f35be4c7f812e56e23e4baae8c85ee09c2a94736dc00ae4c3242fb5dd6207ae0a0770107644cb4d59377bdbce5657abbd2173c927a00fa8c574646b5bf7798fe69669d32526b66f29485f13e4ad7314add95e854b0009ee6ada0782afa88e45d94b782a2772a78a4527dca4a130b52be99e44d7378002ac5254cd6cda4d4a54e51a41d0f8175e809562f6f05454faaef437937cc9b00bc83756a1e012e5807efac34468eb2bc11cef3956ac3437fec8db0a6778b35006ea3c7353daee9487fdce3ca91d7c3ca688495a391ac1ce5ad58193422c245008cb950fa5e44fabd518495c35bac8c1b43ae1cf6d01f48bf37e4ca683484eb001ca961ea520db5a888ad5e195bd6b088ad61590f1deeeba187057d55b97d2c0055bae2ca3211ef371f0530394195675cd6821a073d9cc0f911c61d172bc707002bc7fc26b0aff55fd4db6f7acd72d36349092089874d0fe5a2fa28e5110be70065f71c4133b671fb727f12b72ff7152ce223c98ceb9cc2a9b9dcf4dc6f904d00af8ee9ef50f5d47d15f2a2546b7bc5979d5ef96567a82981d396ac5b974d8f0091524750885f6a1642192243bd1f3153ebe648d688a3b6987a9b80da1750b1009b35fdb472025faf939d3abe40b837f005c2fd31c002bf372e4aa311ef5bee009bca2ae3d85419a3bc34da1b17a5d188a551f707cbd2e8d8d435a37d69745c009446239646ddb795a5d1faad4ba3118e906396463df047b98eeaad82e91f570063a3da3a55cb3c792b4fa994fe512d7b51d973cb5ea7ec75cb5e50f6c2b2d7002f7b71d91b94bd535e5c1a2c158e5975733f58ea263182b166087fb246095c0025a913a6289ce2c301ee1509afb0ee1fe20aeb3e0b5db3143d3dac1e4aa9d600fd5859aa4d5ebe543b31a55adeeca6bcd9b9bf9fdfecf41cc7d40451fb02fc00142efc47fc46c752adfb455cf0dc3f36f4bdff6fa936d9176793af2bd5262f005faa9db0540b4e671283e096ae26e28c459c2f941755462515463944ff2f42008f159f32a095a5da4474f8959b4bb5495eaaed95ca4e58aa75fff3e6526d720053a996159e84b5a08a75cb52adb18b41517c39f3c09f1478784f12a62badb200544b9be05ec1b865963c2952ea891c57da189e70d81693b07ba2f99dbb89f4006537dbcd4cb519ebf5a687c4ee5db69980e24241b58d3a56d5753dad20ab9c00702baf9d48feaab0d216d96d00be56b5d34acaed1f22768c88ad43117326f0006cdb4d5c4e9a44052cddb4721d58bac73c64bc0a878cca9de73c10e0805171003ac2748bef5b4dbcff26d5cc157ea245946e2bb35a9d3b557e6a25faee511b000aebb689ef01d5310a6b930cb8137cfced4033ffed00d4238834261b756485005c566485b27752f6dcb2d7297bddb21794bdb0ecf5cb5e5cf60665efb4ceac0060d22e0f7d0f9b13a83024e7ac08f9b7de20d31e813c6c159547543d77a5f600057a36d2080526ff862749b2c124d9a0a1dea3da26c49b3db9985650a8727900406e7679d6ebf600f384eae56c785a8e863e0f7ae67c294038e657de678ef90060c3366c340fd930274a390062b1eef040e81f75c086dfb1b1fa199479848d001e76c40e8f9b60e3983fd8f068780f95a4fc94eec98197643b5d2cfc75d5cd00c91e5f20bd3909cb6194b76daf23643d92f58eb1faa3ead890e529d7e3a93b00b36c7e118cf86da7f2715c522b9fc5d513d71d472e99241c757cbcfba4f9150088dca419987e843b2a4eda565fbe081a401af14f4a2306b91109882595ae2f0038a9c3a84bd0bf30a0977c11142a390ae83040f31df02716e50729c3f4e7ca000f52bc460bd3c5c77f733d30b7ff0ef50c9518ace875cb5ec45a82edf3aeee00c7c0f8af2a2e25902fc5213225f469f5026c4e419d305f3130501f7f2412b4003157f5559c565ea246308d25360fcff690df2787f8705ef9eff2c3f945dfe100f25f87f0981223d1748662bb80b60b10ccd56a1ecc7a802b4b60a7d533f98e00586dc8774498a87a9bf2d36adbd0979f0fb983e2b3f7a0fceced6b9ede9da1007c011fc9e634e07116778652213e6e1081af8b51c077e528be847fb3da1cb300847fc082d358aa22e056aaa814271471ae15b929609d840aa31cd47ff53af40058fd4eca80265fc4a9c3803aacde657468b827ad80b714d46dfba5b283214e0043d57bcd694800e5b3b80062496530129c23828e08fa3a030ab9fc0bdcd0d800c5a0c08131461b38e04fbe23faad82e9efca1d42f9b409ef617e8497a7115f007e8f7929bf4bcae436567cf6971b9b8e374e7e113b62e10197ba7d79218790001f68f0271c38e406b8f685b1cc0fc0756cb8b60cd71f10ae87785660551dc100b2c33d365865807ad530a4d63425e30f418caf0de96bc301f87dd4fca429530043fe52eaba55b36bd819f050ba064b569fa855d3eacf82845d73d3ea33d7f900cb36d762faa941906bd2f19a58e0d59c1a0a7156cdaff9fc1d1dfec9efe87c00d38a8db6fafe9a6f319162411de4eab51a87ae0c75ad56ab73e881ba97569f00bc665158123e9745640a8baab52a875590ac91056d70d640d43be4101925c700203488546878078b6c2e32e3bae1a45ef38d5c0dcad5009926e56ad69a940b00ff44aea669a55cbf536b0ae758d0028b2d83cd972150d75a1c3640a591569f0035afaab5caf975157e2afcd4ff02e3b668efb6280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001242ab1a2bd6d07d8d61ea56d85861446349e52c6b7c0612b702cb1e6db6ad0b089000001000000000085864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631156eabf84e3ea50d40e3330224f2d2e81648fff8f1f7ec1bc6d2873cca6e959d0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000114c2d321b88ded0e008e23bcabfd7119e218f9964a2cf6496c6498c3ad2b9c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "2af38fa06ffef34d3a3b16629594f4b14beb4969f4e35e43ea395e87c5b1688400000002000000000000000000000000000000000000000000000000000000000000000200b4bd6723dcbe8773b98c4300516c819d961b48bdbf6683941f35505501cfc800089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000200b59baa35b9dc267744f0ccb4e3b0255c1fc512460d91130c6bc19fb2668568d0000010001dbba12858d7d218b4e1cc839f77a6e6285ee64744457bf04642eb7178658de0000018023c08a6b1297210c5e24c76b9a936250a1ce2721576c26ea797c7ec35f9e46a9000001800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000070dbd8f80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000caf438012b34d8b04b61fcf58031221017668557c93080db65823f4e467fd64f9e3b47d000000020000000100000000000000000000000000000000000000000000000000000000000caf4380000316fd83165eee0a36df163ee635d12f7f238b11b5003f5874bef482cbf19503361e160b0b73158f3bb4576f4fe7c1763304049e85517c02129493c9bc1f1a86d91e3c545786f2098a0ed6694f5f49fd407d1b60a50122e995fb37b7f1aaa3e14f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c5f0000000040000000000000004000000000009c5f40009c5f00009c4c405d15342d76e46e5be07d3cda0d753158431cdc5e39d29ce4e8fe1f5c070564a0009c4a0000000006999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f801f595d1e7be64f80c670849206be58b45246f44302c15435100d7eb653d645500000000000000000000000000000000000000000000000000000000000000012b2a7fc4bd74f07a2dcf4a5dcb8642b3aa7c16132e115c032a1b8d96a870683b1de9ccd83e9067a8f9f84960c8399af3bb72131b795aabb4888347390db8b8de0000000000000000000000000000000000000000000000000000000000000c7700000000064cbe507e000000fe1f8b08000000000002ff4d50d14a0331109c640093cd5e92f6b90f0a822054aa9e2f77e09360af3ef9e06ff7ab9cbd43e8c18400dd99cdec5c464888ef10bb0023449407ca11fc0aa1807ddd43ed6ce75ff67600de80480417165b5661d9b009336f41661f4db3f3f995f4fee2837ee0615d30004283f9c2c157b709a860d73006095ed648b2f5295a67d723abd257bef346dc00fd24da0c44232860474b940a6d85c6c1cb60a5be008fa8df01b883e63261d000139e2a4407d79e514f38be51536ed5563d54ccff79f24d1e92393145e24448009d0e49e83043dc7d1d11f83ba629a4fce154f6bff67116a2d9f63ccdd77e6e00912698a79971b81eae7fb4916d6790010000da4cf031000001bd1f8b0800000000000002ff3d523d4f1c410c7df3e119cfc721a50a4552a68874097b45769500160e8e86e24a7e00120542a247fc407e15cfb31c2bd96b7becf7c6f64c08ce00ef10f416981062a682fe063fa564feae7e22e95ef7478bed5781a7b8858708008b4522f53584fa06e92f0fcf1610f5706345074b9ee09cfe01be211e9c9125001f4916ca3ca8020a26179c99ea192c75f6b1d2ab9e96d469a4d861a3e9fb5d00242a03600e1aa51312ac48350ac9a0154eb493f217fa4a1942279b185b1f6c00668a67b0b7d957a284e669a536e28368f345d43f8936e4e831113ea910fe1f00e413dea55333c95c2f7493b932d8cc4c1694d11b79947de62d2e2b422e8d580047b42dae67a79c7cc87e541499d9c80f6ea1d80ec65dca69070c974c95f578005a9a9ece66689e91c305f19ae57054a9d7f4df32938dceee2c9d4c12497ebf00ae869b6b1af828e035da2e1fb956c17a7b0e83af44382db1621b546ef58cba001ac4c30ab1b656adb5c569500e948a7899394fcaf8333183ca166f8b5d591c00e9a044df0da36c5850346afd0ea755ab3d42fec623acabac4d12f0552bcbd5000a1ae99aaab9325cafaacddc42f6b2c5cbce05221af1c582f3f7f3f70f7dd500175f03030000dce235010000013f1f8b08000000000002ff3d90bb4e0331100045afedf8b17e8506290520da480196c62b101248846c9a14347c74be8a3bde00c06a67349ec73d638f304a3fc3842330c2d84087610b7e032df0ffbc850bfb00b0ff96f37e31689a92c21ce65e98175b0a13a76026695dd17fc1d21fe026e900f18f6cb93ac8d05138f71d76273e46b821a607e01a69567d25333416206b6100544649183593431ae1746e3a27a6924e4ddbd4d7ef1d85a1aea7d5e526ec4100a1550e219393b21da104a96cac446e51ff9095482bc8da91125acd642d4d2700aa98a219b9d2f31db4fe07d50b684d46cdb6cb67cabf208bfc0d9c8f5c3eec00f016f9ee4361ed036587f727d602475d2d593453eb4a86bbcb160b97c9e49b008e9e1dca672a784785139ca8f71647ef826fcaa7575cae2e824ade29a45ce900b3607f5064a821cb361336e7cdf917686dc2f811020000df27eb560000012b001f8b08000000000002ff3d50c14ec3300c7d49b6c47593f4ba03481cb8200d0028126aa571a4745c38ecb7f7553ca7d32ad975deb3df8b332238ff812067600044d82526c80bf80923f1f7fd88288b2c17c3962de019ce8855d646ac5b6cc400cc2984d95a77cc3fd8cfc6c637928375991df0d46cccb11b11bdb20a79027a0010ca185d7056f69e602e93d7c253f1aca434bc70c2d7bf1d653a46669040a5001a4411b350d3a15738edeb2bf08c7a766dd35069a466549b9195ea0956cae700bbd1be34bc190d77a37a331ae851459bbc50fe938b51fe0131f613ba74c4ac0008a92be4be508e38bd934b1c8db564d3d4a929055ec56eb1f91254997c6f4f00e324534122157e114dbdb544e6986472a22783d4d6b776db2369aeccd96c2f002836c407b4dbcc385c0fd77fa6b1e19cf5010000f73a3d03000005941f8b0800000000000002ff7556bdab244510afee9e8f9eeeed99e9d99dd9dd87a2a2890030efee9d1ef35003913beffc40e45203f15f3033500c3410414104ff0953110031301283c3ccc3ec82c3d0c8e4c040f457d533fbf6b873a17bbbaaabebe35700d5d5734646e92b64ec6b446764b21213d967093f8b51e2efdae354d8ebf6fa002de65d4f8334863ac7269973e664985fa51cf30d2a2e61b33e2768bd79830f00dd64612856d5246a0d5534696399651696012b1396052b6396854b8aeca46d00b6886649f48c0a3250017ea178932a4cc643c2b184a73365142f9d06d3afa0007b056aa5b1ca57c25fe1840e6f4123dc211c21c2060547853799239559774a00f41cb99b4ac0516e71c0919c5dac85236b6006d830182e9ba82a477ad99129002bc71a56a7a4fe2037d2b54965b068bc96635539a9327b8c8acc31ccac568600c00cb6f3987c267bd93c644fdcf470f36df2ece69322f134cffe19d1c466d900d372f614640d3230590bd980ac996c846c41364cb652111164cb64942879d9006a306307ec2fad27bdeec0ea7487a08f56936eb996f2f5727c7d741ccc758400540415f523575791e1f4cb69f941690791364c7a55a32a9a913e02c4ed481f008ba72be866b78c5903e7f7a81be9d349352d406a05a4cf12483883adcf21de00addb53ae63a8f86252a1668f39cb7ece323ce665ad9d5c0e4958f1a699b353004cca1f1c8f9e297d41691f50bec05e87460e8a68554faa6e1e14658fe36235001eac7a81193e15ba9874518b23883baf65939dd5e5a17e234916a944fd46e30011b3b72562fe9ecab97e4db9d8288f6c805942693ca86f8ed4bb83fa7256ef00a0be3411eaa340fa4b82940b876f5f9c6f1f9f7d1847cf4c071b06c3c794bb00df703ddaaa461e9ea27aa4df2735fb22272a37291751fdd14bf5fb792c37c300d798ea287b711eb207dfee515c428f4bc92778791912bc0f211b52e8fe216400bd208bfea082cda1fe2fca17f5f9a23e3f520f668ec44514b291143685f08b0007d5737d17b3fa7c561f81864ade0b48ca0848cd29dff86654c5f3e97a7c7b00ff8d3b6884a8cd8932731950b4a8b5226feaa54135170d8a978d342814a7f1009232be321e6d4e6d539b131169492dd773789159210160da55a83107ced513005427ef027bc73963e3c84c517af7c2d2c3c448c646b20e879ea58e0fe169a800adc1ab43e8ec782cd4df7837724a0d547a489ba13e3231e9d9a4679357679300da21719e2b0757a9e55bdca212d54be447f50e6e718bc186b382f78a0c7baf00503647e735abcd3adcdd02a555cae54b821b08be4e9b83e006f3460471a4700099e8742cea58f4561245306d0a263f0e46accc2a1c82c1c802fce3e8566dbd0038fdeed2915aee48dc7e36481a63401b495a6aa9606e7a68e841f51a2b7f5800b9c3aae8d9c19ed1ee07e87e9f8639964e0f9887b69f54bf4147ec50649d6500990f920c80040fed90795fd130aa0f81cd9ad91891311aa0370e5bec7f42db0039f0750a3c3b0e3cb9b3c5bc8dc3a4378344bce688d70cdb9709b649f725de008e7a54df493b565f4b3bee21f123f5a3fa26d90fdccef30198b05e1a04933e0085c4d16ec5da4e5a322cd10e115eb464c4bbbee8b36bde3b50fdfff89f4e0b00ecd50efe634478dacba3036fa528632d4f0d9cfd2195343a093f43008bf1ef0004ff9f18c7bb88016e04f176c77bbb3df67ea6fd9c9b41ef31ef3b78bedb220068163449f00482bfd2c941f004f38908e248b1dd8bce3d8bee59f44e12455c00fd230a523232abd84f7ac0d8a220ef4a7afa7a71fade5c10d4734ef095e27000af4b7480c2875aee35b7c220df0db05c36fc80fe49ed6cd93de25ea7f62a2f007fd9ccaf6129ada40cdc7aeea7d633e91a5d2cf007d3b9b2c6161e1f90055400e11553ffd87254ff429db1f9a89b73feaccc152c91c54dbb228b2ae04065f100d9b625659d75fce18a3ff97075692c6f830ed6e1b8e5031ee6bcb54ce6426a006bad67b282f56ad4fa8a32d0c8862f9fd3eef6eef67f1a47be96370b0000fc003cf9cb0000018a1f8b08000000000002ff3552cb4a2d410cac74fa91eebe5e00dce942776e84a3ce0199c19de0f1b17121082e44702ffea85f65a5e738904c0027935425353d41256ca1f6084c50cd7428e7e0536819b0bb5364dbd9ee85b100ed5643a0c9c28fd0c53391fe1ee992e98305c47b78f072773241a45c008788008fb2d2c479e02b222651f163094c469b90a5cea19a83049b43b269d47945e30031f467069e006bd0689d4d488d63a64232d40629b593f20c7d4f49d03d65c5004061583dec63023f564ff6464a5a2d9c266fb06dd01c13b16e9136b89ea5500014cd21d1a7a8b36839412ed9e571bd860d7998ce912e96973f3dcbdfb719c500d7d52be2252f54369ad61bafe430509fb9fd2353f3459ed645286d32e5ff4200b0e862bf51f784fdf4f43d7376759dc407cc49ffd3ab43bcae10eb6aeaab2d00626ab953e84c3cff45ef5636f820a61a97fd5e5ce424a48351f0ed38d4033600548bd68e20d6acf9fde06bdc8fb6daba2401bfacb1ddbca193ae9b7998461800ccac7b58c95e37f8dc8a12d189af161cff1cfffc024357b20c9e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001242ab1a2bd6d07d8d61ea56d85861446349e52c6b7c0612b702cb1e6db6ad0b089000001000000000085864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a63124877c50868f86712240eb535d90d1c97403d074805dd3758c3aecb02958f8d40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000101f595d1e7be64f80c670849206be58b45246f44302c15435100d7eb653d6455000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "12b34d8b04b61fcf58031221017668557c93080db65823f4e467fd64f9e3b47d00000003000000000000000000000000000000000000000000000000000000000000000200de0e5d0089a09386d6403346631e61b367c28d86587296d1cccd77fdf691c900089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000300b59baa35b9dc267744f0ccb4e3b0255c1fc512460d91130c6bc19fb2668568d000001802efe30100bdbbf22116041e365d1a73197a37fe590eb0aec8e582ac0e5cbb8b70000020023c08a6b1297210c5e24c76b9a936250a1ce2721576c26ea797c7ec35f9e46a9000002000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000070dbd91c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000caf43801736540b42de3ea4d9ea53cd1f8efce1833e4751c9174820e0ba578bd63f5d05000000030000000100000000000000000000000000000000000000000000000000000000000caf438000030ccbcc6043c77497ffdda88bc7fa35e0945b93589515e3a8a556388f1231812c0c661c51495da9559f09271a89b5a5b33fc83574c737551a6c2576b5bd38ff6d22bc6ce50a3b301a4a69de618ab29d86ee1ce740fa682ea804ce54affbb7e567000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c5f0000000040000000000000004000000000009c5f40009c5f00009c4c405d15342d76e46e5be07d3cda0d753158431cdc5e39d29ce4e8fe1f5c070564a0009c4a0000000006999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f82f6bcc824014da6ffe5a5d9357672e71023705b12b4c0a46422b36b1f8e30fe800000000000000000000000000000000000000000000000000000000000000010a61b86c05c921bdc04ae78e1e19c5bdb1d8a9c2a0aafef4addccf8fdcba38841ff77dec4100baf62b87b9a1e824419d3979d0b2a4bc4d28b6dc5cdb155a53b900000000000000000000000000000000000000000000000000000000000004550000000002387e3048000002221f8b08000000000002ff7d523d8b1441107dfd0031ddbd3ddd3383885ee0ea9a08c2a86bd20b0626b71f81811c06829888a90800226222221a991898991a98f84fee57f9aa678ec5e406aa66fad5ab9ad755b5008651fa214c38006b18ebe910ee824fa079be4e9770611bb667826d2783a6a9002554d885dd1236ecc37e432acc46e2967e87867e0f779fd47e2fc90729bbaa00b56f8a5f44565ec47bc055c48312054a2d78bc0e2bc73b42b237e06ca0735600e8d6512d6391426fa702b4a0e284b5324a3e5b9dcef4ac3e5163fd65512dcf0026e85074682f32c331738a4e99f6ffcc10198b3a161d03339565a640e4512e006cd156b4a85c6a9a4106a1247d2494fd8847fc5e9904e34de6e5be218f785c0054f472dd18a19a68887f8619714a4c4f584bec23da110762a615ac4dc4de23008d7842cc26c192d47c2b359f126bb260b923f61add8867c4dc117b29d8731e00edc2f3f8025efa5c60dd8857d7a07cc346378d8c1acd6c75d4058d500a1c7f00fee6322663ce33e67d8df9d96acc528777739182c4cbbdbbc25aae617d391400b471c487023fbd225bf2e9b28a640aa5707c23beb0b2bc78b3afdc36deec410051c930df64e6e75cf3f36c359fd4efd2bb3f9cd12da3618ccf9d4c4abaf50300ddb49566d5717cb9eb09fe447fa8bbc155ebe9fbdc15d599236920e91786990014f4403f5452cfc6934f3d79a09e61a87a86d92ef4fcc6403d49a85dd11d17006f912681caa02e9108ace3fc3b099cd76c8393f393f37f5a578201d203000000fa3858e80000021f1f8b08000000000002ff7d52b18a1441107dddd5d3d3db00d33d3b281c1778ba0606c2a86bd21b9808eede1a1878208889988a2022262200a291898199a98189df725fe5ab9e39964b6ea0baa75ebfaa7e5d556b88b10f0021610fac21aee5827017fc02ade5f6e4043e6cc3f64cb1ed64b034730213760061b72107b2d103c7758786eb29fc7d72fa538dda6bbe554d7a53d74564ca4500bc075c47dc1bbdda9805dd233875ef28c991e47ca0382291ba6ea70274a0c00084b511a3bf9d4d67aac5d11225d58b8ae9e88bb3ae58d75d44ba43e4743a4500facb918ebe78eb8bf58e9126964a11441589586cf48ae752c304198492968d00506e476cf8bf92046925f349df91473c2a46d319e3234ce385f817c888c7c400ac28261db14fe8466c8949a75897887d401af194984b8a25cdf94e733e23d60064c5724fec0dfa11cf89f903f64ab11774e3a2a1fb128d56b7208611af8f980032de808f513bcbf74d563b3b530a022f7f7b159367c1f1ccb97ae666ab678e0017bb302729487cdcfb6b84038b1ad529e858848f056edac48ff8ac191b666c009a9ab1996dd6d528a5c0b3d05f995937beec1b5a7dd9836292305e32e373ae00f179b61a4fea0faddd5ff6e8965888b4b9d74e69b57ea29f6651563ddb97fb0025c15f58eeeb6c70d4965c97b92fa697036920e9378699e4ecc075a8a4250b004f3ef5e4817a86a1ea1966bbd0f30703f524a5f6c5f61cbc459a041a411d22001558dbf96f12388fd906c7e7c7e7ff01b796338dc1030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001242ab1a2bd6d07d8d61ea56d85861446349e52c6b7c0612b702cb1e6db6ad0b089000001000000000085864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a6311011feaa54609098a884322267ec754c637b280c15aa79c3be9f1394e2b29cd3000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012f6bcc824014da6ffe5a5d9357672e71023705b12b4c0a46422b36b1f8e30fe8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "1736540b42de3ea4d9ea53cd1f8efce1833e4751c9174820e0ba578bd63f5d05000000040000000000000000000000000000000000000000000000000000000000000002004e4f54bf092545092ab4c7b62f785e531a69260e96ad1afef3b1750b683d2600089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb30000004005c09d13a998cb242b57ffffa79d75aaf2a3d081c22ff85897e7ef9a5fcb8c250000020011356c3cf93715d33891b70ead7db65ea38c5521486c665e78efdcd84aa512bb0000028023c08a6b1297210c5e24c76b9a936250a1ce2721576c26ea797c7ec35f9e46a9000002800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000070dbd9400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000bebf7300e5bd8eba51b33ff9abfa451366593545ab4372e33cb9775708746c5d5419224000000040000000100000000000000000000000000000000000000000000000000000000000bebf730012f05ef70d10428ff54d8183da77e7b175f2761b223f2acc43a03f7d03b905e430308832686b1fbe435e789f38eac425a0a466170c645e85dd6b603a49aed8f737b087bd5e70a3e29f3d820cd4479bad39d2d37959baed85f7b2a40df1172a3f2cf24a82ee4283b878f65b8624d8254f084ff0caf97a9b69159ce0bcf67e7e08fe800000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083cba3d59e1c2f45f74068a4afc046e8452333ecfb52762a527546cf46245d80a535bc78b53f0a524f7d0c63924452b2f99a4d14c224e1abb5d88dfd711ec72a81312a84a71db7c32aca5f1be712b12fc4e1629400d662447eec93f2300f0eb43eef7af66c5f346f2a1057f2241168a310e5b0b697821f030b5da2c1410687ebbdab973c42341f06f884be94a00330a3417151a94e73e1105526fe4dab22b61d39860d573250a7df2e7ad78b7900a1ad7cdcbcb59f0bcb8244f51113a0fbbffaed4f79366e4324ed6e9db4072b5f3466e269d48aa2df9e917b4eb07d76c8371a9f2c1daaabd23df6d82ba2869a743142986a98cd9da85085bca6fd7ccbfb204c4f38599de4a8033895ede4e994e6aae7efe8af45bdbc2256c37fc615269cb3e6bdf8c24746e358458b011c2467e3eb1e49d62f477ab3bf3090e6218db9c5bdf074e53180a2ccf418766ce8909f786d6b5f7dfe4c4898f9c5409c9fdebfb345680dd3403bd771a8efc441cfb468a036b6bf9cf4579517f2aeb98ddbf3cc451f5d13ef7834501aae69994290c11fb2c100b70704d4d2ab111262ebcacefd2d4daa5641740fe44b7515be1dbab97e4fdbfe9f6095cdc7f62141960592f3792a146c00000004000000000000000400000000", + "0e5bd8eba51b33ff9abfa451366593545ab4372e33cb9775708746c5d541922400000005000000000000000000000000000000000000000000000000000000000000000200e58a4b3184f9301b46c8e34303d38975236a11e9d028609785f1935c42ea6900089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb30000005005c09d13a998cb242b57ffffa79d75aaf2a3d081c22ff85897e7ef9a5fcb8c25000002800dc73dc6fb7c4c43a28a1ab50883583352fea868adba8e9b6211f16255e700270000030017ac40ebf9733f6e07e35d5d086b61347430f109e37e19a281d9be6a97793550000003000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000070dbd9640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000d70417413b17ddf4a3709b147c1417b1622ef4cc79a06616bd9ddb158f11ab563d391fc000000050000000100000000000000000000000000000000000000000000000000000000000d70417400042ac8c03d05178560b528b3ac02be163fef046bd10793f7b39a5afe811e21678f11c58c442882343993398e172a90d153a03117964c6db38d5d1c970c01b6513c235fd61a2ac7f55ddce86a2cc62dd5347cbcf836135eaa436fa7f4752f80bee8202ddbc296d1d8765bafcf9f175eb3be77f37c81c4c93559ff7023fe2495dc5e00082341f495992e20779a83780b54b78cfaab4d39b08b10ffa1907cfb8cd42035ec02b1f6aa32fe7f19e158e57710447737f502f846e394cf5333f0e02323d0317f1a17d85963452ec3575a3fbd15f7daafa11c0c1b4e4801b8bede6fda3cf67d1900000000000000000000000000000000000000000000000000000000000000011cedfb6167cca7ac71218cb23f0d1f6ee7f4c3a408a45eaf5830d091dbed4c24000000000000000000000000000000000000000000000000000000000000dead22319ec11d7c77892dbbc3f81dcdf88897830d0c0585779f9e0ebe5f4065884f0054657374546f6b656e00000000000000000000000000000000000000000000099168297a5169bd09fea3fa7c996b98883583956c5de90ef5bc3664f01a5453000000000000000000000000000000000000000000000000000000000000dead174c9ac876981bfeabd404b8a2990efd8cfb820501a49c80bf8bba976780b601005453540000000000000000000000000000000000000000000000000000000003970ab2dc2c225a9febe92d91b7d6c881878a77c94631d9db2b1dfbcfdb2037000000000000000000000000000000000000000000000000000000000000dead2a859ac399e31702cd6fe7a2d6d2194a3124fb1e1b4b0c70fdc7ab800ece92c3000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c5f0000000040000000000000004000000000009c5f80009c5f00009c4c405d15342d76e46e5be07d3cda0d753158431cdc5e39d29ce4e8fe1f5c070564a0009c4a0000000006999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f82b7fbd849f92417221e567c919124b68c52f08deee4ce6c5d7ad71ba349937f20000000000000000000000000000000000000000000000000000000000000001081b6fc6f0b0c08088062e4bbb563dc00ace0177a5fd345d8bc1c4afdb77b8a91e4ddd5e8fefe0a88ac60e5d36efc13bb4f937ee19a1f37669f20a186ba00b060000000000000000000000000000000000000000000000000000000000006d3b000000001310763932000005841f8b08000000000002ffed56cfab1d35143e49002633c9647ecfdc67174fa90882729f7d0fec3c5a14046bab42b5a5a50b572e00ddead22e0417e2c28d165110410495f70fb8d40a2ea4b81344415c8a4205a900b40b17eaf765eedc3e5f2bf40fe885e44ebe24e73b3939f9926d314aef887100a744b6c524192a710f097e0e25c3df93f74aea4eb81367899d988a6814b58b004e31bb4412d44f89457d52d247d0599ee4f053340493ca8fd1a0112fa3368e0090992103288950324309262949667cdfd06d49c5d0c47dd1c758fbc7677f3d004a8ea9cae7a272efb6441e84174ae4701cc8d5a1df98305b0cb2ad8ce2a7d300004301025d8eba2c0015ba18b52f62273a8cae4e2764400928e8902a97341800d2f98474c7263a7aedc6e810e2c9268cae28cb7d9400cb0acb417188519e2d00e5642e26cbe3ba8b2d51df8b5bcab3a3f2d304ec087acb51957e53529f715700b84db1c45d019c3954cec73ebf2ab18fa1a19717c4cf5e66b39719b6c13242008a9e6693a7a34eb3194a67c8a4842a4025a18a5049a8065411aa0955841a400035a106505e136a013584da18970ecd96cd2ec6859f2dc1ae870d941626f2b000948b884bc85bec4fd2212e97a55dca6ba36ab01326e81e759f0fa31a1aacbd000947e9ee7f7fff1cf8495f61effa01f1785306c6635392266c12d4b0d1874700d746d4da4ae3d0df0c1865ef88644192c50648de918d15898d240b90d8458800f62cc2db2f0027a1dfe4a7e6801e7d3d17980eb6e78860d7b37b245e6f03ec007e2c8176138ea59d8565c4109d4f11b136c710b52708e05e3c2c16a9d48c2a00f3d8ed74dab8d432e19182453d6f6cbdded808d97963ed7a6353409650ca330089a64eedb45197d1dd640576254bc17d5cd2a57c3daa1acc557d6bc8d4c110004a85a554351221b52dcf5759b558e6b7d2ae727664b29976f6a98d79c3cf4a00036cbb51371d5a1db248fb8e636f936395664fcc9b560f670c78314906949e00fa35aa763289b854535232699b78f6e855659a88f20c9485475827b44c44350065058f6f48b594ab71503415a7de32699406c253e11c2608d45fa3509c0c9a008e4d8a7239afb4dcb7522a873fcac3f0c070f12577e6a7d77ffde48577b74e005fd317feb6977e7c66effce64775fee5421ca50553bce6f0fcad577e29ab1700afff909cfff0e93f93d3e910defffde5573f38f7f08dedafce656f47715d0d0087fc520f8c9f4fba8ffcd177f40af248db18148dafbaa1afcd2c274d1ceba300af4ddcaf386d1d74af87e7a959cdbec0b78cc73ae89317912d77a372556c4700192c6ae413b340171164bad64532aae4ff948f6259a02adcd9f9b2703755d100245c6371738d93fafbe79e58493d3d65e2561243315d36a32a26f109a30ed3008c699f339caff01879c211380ab95416c265eeefc7b858831423cb94a500fb00013a870898410fbcf916a35eac9a77bfeee40bc13d3c50720628ad7a6352da0018dd0dd41b81174314d68d51d91efab2d163769a0eb8607a2453c5940cd95000d10455eb92a42bb5399cc2ee90d2ee7b07ed0ee9a8d28c376e07bb19ec76190075aba7087515b06e07e288cc66574b326a66287a12f5bcc73e938e36910394004e986aa9f75db0f1a08c31fde67c595d7553be345cb4e2a2db6101439fcb6200e55cd00bd48b362efab8ac148dc46d6141dcda1ee3bf907e22b6bc2a7091b600f15a21793f1c93590b49d231b21d49be994876b12267f06e14ed123cf7d45500bcfcac4c1b12c90302d07771ad2dd7da92f2bb15a51e20132def74be6b183e009ca9349455a48d672c3e27409bd50d26fe2ccd8ad6dd8676928c2844598d9b008c6a90152568b312af1df5dbf426a3a44034f9c4da55ceb83440495298ca3000e60f972dd5359833ce2eb5dee519b70a4ce2f0e4db891fbec404ef1297df2300cae52ee7cb187ff1659c4f6552942dfcb91cd31d2704d005e7d8b4b1a99d7300814d0f76bf54d777948145121fd99543570e5df917278e2385980b00001d2400add0000012341f8b08000000000002ffed5afbab6cd75d5f7bad3dfbec993d007b66ce99d79e39f37ecf9c3df761ccbe4df042e5a66962487b434a29da60b50025587cf58608ad8ada083785c6478812215483a025544d8a52ac14b43fa620006a5ba53586189558698bd5a631a2a4fd7cbe6bef3dd39b734aff800e77efbb00d6777dd7f7fdfdaec73e179471f44565fc3b95baa08c57c44b95d60abf129e00a252fe95bef2fcdbfcdbee41dfbfcd3e4ae3712e6150994b84b878bf4915f000be5d7978bf591de07d87f2cf01b17a3ba7de49a220ef9412210c3e2ad1a6f8003a907b23e882725429d1258107193c00dc5341a283e280a4edbb7c5959b95500194f88a94eb9a49cb05cdc2ab552c5373b4a8d8812969457088b2de514c39e00f2c2f01e81a68fe8c7c9e0e939155aa54aee35bcf4215eb523d0bb4585b1ba001984fc2044f70d2a24f9d8fd29e1e08ff9ae8378bdc1b94d485ea7e44dea5d0027a8055093a016f56e66203703955c82da00b5086a0314b4088a006a13140100546d13d4012822a8432bab2e25eda1dfed1d63a4c3916375c101229a1d7d9c00e8ee31718ed93dee26ba13f59401baf2ba1db43a265155e8f7eeb232a1e96c0095f709d589d5fd89533789d3ec244ebb9b3851bb0416d508945c9233bdad32005f5051ac7e1661056bf431bddf1dc00783521f467a50f569244adc875c03ca00d567f770886e9fdda188c9665f0f696b98d38c86a3440dc7a0361e4de0b5c90004824e26e2b549fa88d7c0e3613581a1607e33d6e358fd72a2fb0332dce7000086208816ba2361c8e6508fc850a68ec6891a4dc070329e82e1740a86d3a930009ca64fc6f0093505438860267a12abc7123dec93e11e078c53170744198046008de939205461ab3f0497a83b46acc593ef4754dbdfa1ca7ed3add21f5150e500638933a20daae311d83ead46b153499cc13871601ea72f1cba99965d95854a00d7864a164c910d2676675920cdd875e7e8ced89d8b49d89c6900e78b444f1600e82d345ac15e2bd133aa5af84e3383536766ad296920fe6a1102be1dabe760009359ac9e879ab3a339345faa79acfe19f1364314cd4a00a97f53734611308700b17a0998c3de6cab9cd71426fe47e274698842941922ca036aa8255267125b00f3bb8c1263a8396d27c343ba8e3dbdebe93ea42bb6650e2dd9ad0e61ef36b000bac0ea6a8c76fbc898110d51eb4ac00f214d410d29e425a5c6be4136a843df00453df49e47692c48108cb470257d24931e0d527766b13348a3338ddd511ebb00923bc33c776ef0b9bbef73682e426b00a336dc4845da1aad60af051598220500129aa48430d38634805d382760dc44fa8cd614cf640437c268a57eecbc01ce00e9c6cead3047f72882393e84aae05c86d522b8312ab501fa41d54edd08cc2b00c4ec11f34789793b427d988934d88934103f75454d3407ba2d6e848e0a2e1900ecdc38604fef7a7a00e98a7d9923c61737c2d98391a62b467440a2fa616cfe00110311c58928e5bb553b761e8238111ed65a9755a13b41563aef55536a208600444530d3ee247126c8c701118d4564685e53b31c5192431031c51b4f8526d300ba3b26ea072c2ae226b27153d88f1be1929218236ef04c51061ea28f6b51250013fa7a66da88a66560b6c9a03dc1d8236a92ca32d6e2e12e2cd78676fd095c003311d73c96ce77868099498fb03fa2211ea76e04e39952c739e84ee70b8cff00ae5aa482b7ade0eebee0b62448da4fe7898ee6e42c124f229af2296b4a140300f82a1ac6cedf202ec0f04f40bfdda3dc7faf26b1f371cb7f34616cb07c4dd300f285d8984ab8cea492899916121be0ac1689334d0b34e2740a7d273aebb5390096f7a667c86f678bfc55911fb8031a9f310f696f70c0e7f61d702b0d463d240068bea8a6b1f32a75c03315693926367cc1dad04a4f5e6d14a7f90c4ae7c66e00cf9740fc77b5cc1197782f051153bcd94268ce883a23ea7f5a54e8353925a0006c21b62466d007cf0201f52a43b536a96442ff7fea1e35a14fb0f293fe70c60002ad51a03562be0b31bb73f25e726cb9c298af56a99873bdc27b355c26ce1200dee813d158c435106b6a9d2362036ad6828829de62253457445d1135b2a8d0006776a63e96c42ad1733c8b2ee46361a8cd2a99d0f36c0999710961822cb8e2002c60307d92db76680d3383c00bd8b7bd44822c4b7094fe3eeb28180230b3ec001176975ac43a816e0b82f1aca8e30674579b138c5f5627a9e08b53024c4406006f654e561b08be21e7da0a122f57a47e47ca51afb126ada258ff0c12040cef0006fd458f723fa896b1be6af977974c9075c26d2f38ad2541d85cea35cd49ea002b7d2209c20dff49e2ac4457bd4cf472057d973aeb2d3896f75667c86f678b00fc55911fb89454d67648cbfcafcda1ce8c91ae1f48d55173aef63418f590a00079bf5ac5fa71ea806725d2724c6cf84bd686567af25a6c1267b386d2b9b117009b1888d7559c23c678c7828829defa4468ae89ba26eaaf5b54e8b53c25a084004b4a620d7df09c20a01e679cd596954ce8276ca4276a499f401e64c468263b003bc6dbefdb78930580d1c4688b24da3e6aa38d9b71c66e7b21868c24e476710049164f5b1667ec28acfd25c910af9a3b2fd81f1b46167a31fc788ef5457fca00ae2fc0182172e74763c0fe0abb4b7313aa0cb80ee7d946756637aaecaed02500214413bbfb7185ee269120326a23fb8f1374195f301da38ecd8d06f0244eb8003f8621355ac15e2bd11b96edc226db7f6cf6f61f006e4e80651d71466b8a07000bafae21df4beb587f19c9318df557b93a1d61f5303f8ed5437f2d71d653e400f0b404907ed92e84c044debc52661aa3d4995b509ff5ff26ce7895ad31cbdd001ab394809235662a069fe46bccc4162c0c438695942fbdebe925a42bae658e00b8a48a24433039cbb196934aa2c74b6c23e74b3982509a319c6e9ab9d317a700387dbeabaca4bfc633e74eee901e9aef32dfe2ad259e18b8eb45a2d6ccb8e5006285d3cd6a85d3cd6a25a79b55faa4a71bb3555020486b436cb0eecdfb8c1200c830af2019d6439e64103edc0ad6c688b3684c835fcaac3be61107ba4ec96e00caa1cbf08579272c8c85783c9190e1d80992d15cc9f37662936e89d27482dc009d11d158c42d10ef52db1c116702b315444cf136b1d08c891a13f55e8b0a1b004e4f49701b9f96844428a211e9f04ea9bfd34a26f4bb327da68c165a92c56600caaa64eecfab525a01a72c360888f509a2eda4b401ce4fab8d5d3156809993001e61d7d52636d7a0db86603c31753c07baf1b9f3187fbf3a9f0abe39a5e28a00c8fa3cdee7e37310fc1c39d762487c1293faafa61cf5168b7abc8acd5308750030fc10e86f7a94fb69e4a4f9b0e53f3e61b86f1137343b88336e62c9af2dcd00794ed2f5bc843b38abf38913e7e987d44671d5596fc3b1bc179f21bf9d2df20057457ee05252496348cbcd8d6c41a613aaf3c7a93a6ac2c4a6c1a88704cd9f00aa38369fa50e786291966362c34f5a1b5ae9c96b732e71ce6da1746eeccdb9000b40fcb4ba90235ec0fb8220628ab73d2f34b744dd12f5598b0abd4e4e092800e19292d8421f3ce711509f659cd54e2a99d0ff60231d75913e495420470fdc000de132a6895ae1263a94eb1e37bb01725576d5e3e6573d72b1d4b1174bec9a00ec52c9f0866c6b287837bb7bb2672836ebd9b1ce9c7aac4b749dac0bf584d300f0af2e33d9341ac03a56f5c01e2c4f6dedae31dcfc1a034423a018e855eba0004a3763b728673f37c8ce7edecd38fbb9380437f353a27bb4774a741b3966990098d8babbddecb0dfd91d793bf6c84bdddb72dfd5ca0ffbadc4e9f0d2eb98770060c71df6f4aea73b90aed89439b4b15b3d4e9ce326b05c60b91aa36e874b3500afe6e43ac0ed9e75c1e6ee5db0c1852e40859c73f3f866e55d78cf5b1e78f100e293eb3fbffaa64f7cf083efb86f75d397eef8c027dff7e89517bff1d8d7c4007837593bfecfad97419ee1dacacef6adbdb33d802d9ce1ddfc44efb6417df600f02f5ebdfe1bd7af4ddef8e57beffbcdbf7bf641f3b70ffeca7d9ffbb9476e00fdca33eb77bcfa7989a9aeb606aae362af217141abe9308b98702f62fc2b4d0025f7459c29c66cf0a293eb447a710a63d5c56c62a8fab7f7e422d685477f4400b9b612d6714b6bcaba9ce872fd3bf5843be89bb0eac2e3e5d42a1f7be5873e00af40d62bd77101ebfe647e018bc5cc2bdf9c8760fefbe60d3fe55730d9a74c00d7ac4c3de57ae51e811a34fcf22e8e9d9c8ae763dc630018265b394d3698c9008a0c20ef773daf91e886951d295da8cb202f7e75f36e664555496ed1ceaa09002d4cc0bbea72a909711e56cdec9eb499f190fc66f2d9fcb619c9665332b2c500db610456592e6edddf2ad15cf5ad2abca2eab18bed74592ca82587ab08e9a600281a7e377632b0536828d8935630d8a92c17e706762a9b1026099192501a1c00d0f60d304c13184d5eb59b509a82ec36359b6592009667a87bb38c7d86fb71006548dc559e2bc4fcb2dc80fb99057cde939733909b810e72ac830c141c64b500d0b7ee01c8cf2ed84d76c11e98d75db05759f6ccde053b8d6cf38a3768a810000d9be068153a02977ad0cd5dcabce8f04a0a6a45012ec89d76a900e59e53850054b9a607825ed8f6e029b8e60578aa5e45a92bbc801b16f75fe44b4603feaa0033d6c1f0c00aef15fc44fb06d5b39529d7ca9513d041a6dc41ae5c23b34a0300a00a10aa28bbafa28a368f1ae0f83ed588ddff4b9c166aae69bd3e149c1b430003d90c97b5104a5e2534fcf861907b0563738fb6f33321fcbd2503403fc4a200624310ad323ece98842e31943ab45273422813e83fed0976e12ab3044aa80200b38f252771c23cb1eafb615da6d920553d3002958cac01dfb7d0b2ab1c536600566c911585e90ea91a244e50977e8077502b264e11b95447fe9561c5d2515c00b888451add00dd22bbb057e991075e0a2beffac617dcb77de48eafbb777b8d00e077be7aede79fb877f3ca854fdf7bf0a862c2c38ba98ae55c45b005e1002400dca369e3177ec2bffa4f0f7de90f7ef8b7b777ffb77efb6b85c7be78e7536f00eb3d592dfd655315b124894c1adfbbea79ab14d07a41961cc15e09023040b0005418fc3e8caf5bb4b44bd7043bd7042286f5814cf368f482d077df7a90d676002f5dc40f601fc65b0bcb8d6e59296c4d2e254ea9257d7c353425b15cb8eb1f00b25f43a6d70eefc93e6c1c66070c800f03bc829a8cd5d227fd0267dcc34ce400c35ce4401fbee58d4aaaa02c4047e98214a6730f4f11944b5ba35a4b9c5aeb0007c8a785dd6b8bdfe5c65ce92abb958ecd0a97bf10c6700a056439a3d0a36d001cc5752ced7eaff5ddb460e191c76ae3b1be7dca6ee5c4c452539b5ee278b2008e60277710a2b4b443ccf61a5ec8cd2f6a12e3a879e455488205eb59d5480b00cd8837da5e1b7bc1c25fab28a72b9b588f37da0dd06d1440b701ba05bcc0c600e59a6c08bb882fbb086c0c355c326306346b21198564f4bc65844060c1e467005c16eda8cdcfb4ba91ad0f8dbdf501c0062879ac6cd8e9a03c85a83285afd800ba2f28ccad423d44f96adcaad2f0e50a5eaf35c0b8dec00a5b78d9aeb020c600b581f58cf6011656cad62d2a0d76f95a4c0b846281d7ac057020a9db0389de003f90d86c10cbc0d0ba4979c35a132cc3266aa15754757b506ca12635b979c0008637ff02e2d5b02c7948187c58725cf95a51e718375d5ecb167ed14eaa4157007692c82ef90262117d200e949f234a591244ae238d5068cad6be41d485453d00e30b882d9e9604bcd9c613ba90efdb2fe0bd9bf62ee0dd869c04f6be7dc26900f6b403601b8b889f2f27bb1d5b58df6980dd89779bdd9dc834596d4483767e005821ce5d1687e6c3aa1ef5087b0f0e94de5b611198af83291d2ecc6650e60b001f0abdb7e71f0aa3530ec9e987705e461b7c6f680f245ca8675df4fcb1544f00dd47b58b3ab1f7b07c54f6eee705638fdefd35ac74de7b2d7f973a15fad91200ddcf97e8bae6e74b77208bef504e4be0acf08dccec565a244e54d7592fe25800de3367c86f678bfc55919f47cbec1408696f70db87f7dd16d060d443ecff2800edf80c75c023e75ada30121b3e6e6d68a527af88dfff704fd5ca8d1d0df0d100dcfb3d35ca11e533a020628ad71f0acd21518744fda845dde554e1f57eb12400700366f0f41186cfc82d58bd9209fd676940a83a7d82c1c3b083c1c34e1783007fa1bad9d5ef7176ae3bde3bd71dafdd743359b387ab6ebef7eca4183c4f56007b89d3cbfe22e358e03d487d6ca576acd42f5ba9f1f6147cd081dafd1d355c00d4f75019fafc0ad8834f7bba07485fea449f75a2df83bccfa99e55a6cfbf0c00b9e4f8c6f702e4a187727380f117fd83d8fb57b0307e21f6be7e893b8882c30050f3a1c84569606760fca2effaa536442bf925fe8111fe933f302ad927bb7b00f4fecb2f61bacf0901d805becf6e41badaf7fd80dd22b81763efa58b0e952500e3f332894261d2817fc0ee0158fab6320a4d1f4c8bfb121621a1a5203c4854007814f726194eb2fdc04a12f825ab57997a95c126a45ea11f522ffc277a85f600c9f43aa8f8a1488e09158858b1d44ad20569bfc26e195ccaf181b14307be7700fe928a3e137de65bc2a1a82bb62500002ad355940000028c1f8b0800000000000002ff8d54cd8a143110aefc74524977273d20b8c2285e85597716b40717f400e2ba73f2b08fe0237810f4053c8a47ef820711bc8b4fb02fa5df97de1d614f0036245da9547d5fa5aa92ad38634fc5e95e642bce474ca28f049f6244fc5ede0097a0e77a7e49ddf932c462981d36c5eda8f1985f4987f942c2636c8e1734df0013e841436b737a7e839c30f2568cd12c266b3a16b923696f441efe33cf19d400997bf7963d44e7f2dc109c64d91a6728aa8532a7ad84d0cfb607b64b36cdb6004bdb66478b01a21d5f7bc25ef30f8c134e8218425288460684330e0594c75200ae294d01e548cac2a5ad58162e6b8b8062a1b24eb3558c32229ab891b32c2e00664f0407c0cfe237f2623623b2eaa24524cee7329b32ae258cf12902b9f5fd00b9f5892f12a26774fb25bab5f831aea9b4c0f0f1c901c41c5046c5fe58601500fe8ba492a44e20b994e99a2434920a925063c3034ef0156a1ffd9aa2a581c7009ee70143099e16311cbc3db20c11b86f24de5433229781b98c2d971483853200161472c92ca4ae347d61f6a7430d41c33ac804e0a83d2ad70f0af8b7683cc0007b86821a873ab0206923ef50909407987c906123ef4f1056a2451c7a42ebdc009a0237a0054371a052c36cc7c03a860108a103c247e9f62dc730e9307729cc0026e8d94d83f76c42a705b3f6b0ff243ded01c640d005cc5a44f82195fa8c5e0095c721c9049238ade0f4455674dae130ea704dc5aae7edfa868bd6d1c155bb00c2bc8a6cbb897de5d0236ee991af4b8fccb6e2fc9e0db933ea34f4b80f0150002cc57785fe07e09c761bf9bd63f49d019328d27cda8434c221a9d77c57705f0035f345c0afbd087919cb8b00c05f9ae1ae74e841d7ab72d9b5a555d59ecb040076a4e1e7a9714024f1c94e8eae8eaefe02fe35119f900400003940e9ee000000018b1f8b08000000000002ff5d52cd4a35310c3d6dda34edf573f381bab8ba001314ae3a17740611575e75abb810c1bdf8aabe949e7450d0423393bf9393a4000324c435c4ee8001123305f4183cca9b01bbd987dac6368fd46d335f44de3000d10999dc924e69d89a40a4db3b0fbcf580838ed365b9fec62cee1e104269080056f404f80fbd0f4e2004a3ba8334ab12d2c860a222757a856a72b56008f4f20037b9b1e840ec3ac6aa634ce64dd41135af70d820b916a25ea1ac7034b224b3004a2415d19ac7906dc906eb4527f7eb7cfe3928dbd0da19af67c64b24ab4b37004662947afe03127e50cce8374d5056e1080a39d2427a72e66c989e9d7e6237009a542e3d497c587d005be49f1a4b6ed0bc24675c4cb83244eb537fe202b2270088c446d9721aa3264ff64e73d16d4a75888719628c62a4e0d3998289e9826b0053e2f9989e8d637a21a61803de27ef2007c7b7e47dfb4ffdc7846ac9da2e5700d8acf913e1a73f9136dff98910f0cd1ad3cd13162cb730733577359ad9c2d500caea7585d77510227ae1b3097b1f7b1f5f7535f090a102000039f0420c00000001581f8b08000000000002ff3551cb4e03310c9cc489e3a4c005097a006e48002015babd64e1c0896d7b40487046fc70bf8af1ae58c9de8c1fe389334042dc0041ec000c9098e9a08fe0a7b40cd8fb2dd4269bbe896d5a0c9116462621a34700d233036723c8b43f78e1de0bee669ed997b77fcee2e901216843302d4fc02500ca31b880108cf00a698112526731599166794a981c2a86c02c8fc9835a0686006a8fb5f498cc2f513b6adee0be4172f5215b940d1e7a300a90122945b4e61e00b2759857cbd69337d0ac642b24d7a4f2eaba85965c8f9e914e1be95ed05c2400af5c4cb841449b9770e43eb23788c446dfb252927ab30fce255dd027a79816008a1e8512928b1d8389e98a5b54f2b9ea0fa3ea4f728ab1e077f4e5e5e0fc460081bbf950cfd9502d59bbe6469b357f31fee6176b8b2d2f46c21f6b6c376f580071dccacc619e6134b395c3cae97583af5d1032fae0ed88f5697dfa03e7248000b53002000041b90896000001b71f8b08000000000002ff6552b16e1531105c007b7df67a7dd09202100d05d241de53a43b404242f0f2a81125a2a48f94228a00943ecaafe5ab32e3cb35c949deb3e77667e676bd130d712f6a47919da8660400291f044fc1ca22f6f38d643bd8e137ce76589744acb0e0a3e84224219ecbf00009f0786422031983cd9d4ac5648e5a08e90629a0d4a10228112a280a52e6580012f1b4a526e05912f3df76773deab7cda95214a5a1b8042bfa51e4bde8aff000cc048e91066c35b00bf88aad11d40a7e2ca3274191e549ce5c345b77a3f010002aa8ff499ae4f31c0a3da7e8886e6d0eadbca3a1e4924b72247e17a78795e90047672a808f5226393f7d2d39c356aefd67a36f2ebddbe2b610f436c7a1d140001bc1d04630fc9191c43d65441c33e5fd2b2197b59959d34bc46ee4ef6624d100089d53dc29eeed0bab1a2b2952295229f27f155940678a5b22d112477c8969000f2cd0f6288ea6797d2279f128195b5965cf96606ab9a1db19546cc495a11100d7a0531b26b95b38c521709a863fd8f74d7d81826ac9fc1546ebe6bc9078f5000be9eb5a2f24086fcd516e2c68906b663c0efd18cdacf158a15e27b9d907050023854f1739b93fb97f00366f60c80f0300004d5d68750000058a1f8b0800000000000002ff8d55cfab1c4510aeee9e376f77767676a6677fccbee999dd0d78005036e645b41f18c5a0312f3e63241e3c0822a2a2282a41fc8128281e72118f00a207c18b8282f122e412050fa2e6e01fa0472f221e3c79d5af6a66dec6e0c10085eee9aeeafeaaaaebabda5d324a1f27d33b4bb44ba61f63a2e18d84df10230026eadd5351d83bd53b751efbdea96690c650acd8efed8b62bf191bc541ef40001407cd68147b8023b3c71801e67b690bf3690af7f8f236e633d4c37c1ff5f700f85684f97e1adc8cabd3d30c76961dabc53b99933b3b4f138cd12e29358c48008d86c951a28a927d45b4dc1c1f45140e47ac3bd2e810ad1a7941303422afb700869d68ab13855b9d28ec44db6127daee44bded4ed4eb44fd5e27ea77a2a8ef00281c44b731d4bf7f7f5ff7a351426124beded5f8ea2818448e851a18a3e8d6004310758832e8413f488ef05acea6ffc7540653696661ea806c6b2a4a1d0b61002aca52a0a66c3b482ca416aa20b57c28c736976d1e5360f37497423dc64413004c6a0ac827285dd323d0e636c0f6310ad6f4a8a729a48f7b1a379f345ed353009e26fc01da88c1b3942153bef4125f7a3666ab06db17c9ace97960407a011800cd27c8d7f43230f8833cc7530ee875b26b7acd533c5ed31b9e72fe40399e58007085c6e08a1da738f736a5fbf28c78598ba06d36623fe4112c2e8cac2cf9e9009328d5bc4cf83d1a291f4818e6bd0626902c002c4b2214172409a8b04a4185008ca990d2ae328a97994ecf73654418699bc9a55719d626d5a9d769c6248abd00a80d0ad2eb49caa2c04b791a188388eb5619cfa62132104d032e65880c1ee40033acd3598cf5ace093f3e3c80ed1ce51521f50b1a62fbd4a73afe2ffa08bba009e3e1423bc3885f7619e05083d0a32847e99b2b6a24cd4f911499cbc0c34840051e675de449d716430b67bf70b4f5efa35f9f0ddfc879ffef8f9f657df7af3009b2f1eba72ecc49fbfff76feabcbe9b714013028bb872baf7938084b87927200d839ed00961d7ff8e367fe32fa96933f3ef7c027fba79ffee5c4c5ecbbd5f7006756374dae98739f52e575d51ef77aec18da01ba646827d0a540b3c6d4e2f600024b8d16624abd7a10d58e73440b8c157722afcac378b2524e49e64ce0559000c95ea29fe371b9388c6c0185791520d14ba9a015774a415c759d12e25589a900cc4597b743745e0d4bafb6565e854b8ea1f6e2924167e41878b9d0f5b9932400afc6c491bb658bbf6c3c5f34fe965e97cd0d89c4007555ca5e9c9ca7a04626007b892ce04856c8fa6abac0cd21e2def27a118213a3017042bb1830d76de79300bdc6272b5c1f60d80dd717281493e8c4eb841f5bf1cda4b90962275d0fb55d000fe5d26d44934e349d80e6c55a95607831abc1ea0b54af15824c9c573661c2002600089d8de1fa20466b503734bd8e53cde53568ca8b9de5e54043185baf1d001bb61aab840d07b6abbb26305ec6d092c54346874f5a1daec665c760bb61b000955bac313b628cab52cfc4d24468c6c92a4862a41d8ee1f0911a7fc447549a008a12d9a38198688e68dd40f642f3a0f2aa92ff01272c72ede818e6a49d47a2008bdad1326cdb7ad5035cbf62f7c75dd0e36b821e0bc39236a3519355c1af3000c668271ba79b1be2941978c5cdb1dbcf796f36fb80f773a4693e8d7173db6b00d3f33aee83f5f11dd27f644e8e21bb359c5b4ad6cb1c297d85f2a68b836b6000bcc90bd449e93852d076e2c083dce165c39a3b874bf0ae6cb298950943307100dea1ba65c5127f69a6ccd1dbd4c5a6b76daaa4e42aa81d0301b7066e597343007459ed756d5b59bdc36d81595acc33b690b185f71b0b9e32662caa8b73bf7400dc9c5d05fd4754b5c6328d873455ce59955e80740625802bec282c1cd72eea003366b2e5339730440188cfa9e8822880eb0ac6bd743dae2bbc2a66c09dc140003003ae9b41013333af67712b9bed70d7e4b695cf2bb650f1bfc6d7b4d3045100f1bfcb1e15578babff00f4f196a84c0a00006bfd1d5b000004331f8b0800000000000002ff8d55cdaa253510aefc74773ae9a4d3dd171c611417a2083dcebd00a07d980bb3f2cebd20080e8222ba1797be80e0d647f0055cb8f5115ccdda8500e042d01770296ef4fb92d367aec3087320399daaa4beaaaf2a9573314a5f8800713722e7626c8749dc5b829fc3e8f0f7de2bd2ba2b77f598b2ab3a4463a8030094620e9458cc8fa4c17c2deddb50c66b6ebfa1219854fd560c1ae965d3c65100e436ae090791351419882c45068794186cb5fb565bb79e4b2b6ed3cebe4ad30075ee1f966f7e61781c55bd17e57b7b4fe40db1374ae435a92a7880c984dd6200907365143fad86300c00d071d3718068d0c3a6fd509450189d3ed8510206140092bcb4c159c0591301f74022e1e875dc312297da6319b9f405929f91429f10000e46b49bf4dd2ad75e4cd7d35535dc13f550fc2aef6f0a1062bc4646a08d9b008af6aeb4b6635698a6324a5620ee3c266f1fefb4d85d476a3cbcfcb892825d00ad7d178c3ef3fbe7991f7c0496ef70f233e9ea49db1607bc860d6fdf39195100272bad83be654599db549ce8863026d0dd8e9b1e13444983862615652265f900447724d5181974c723dd19ee7c2579a73bef18b9d09db0cc5ca602c9cf4c61009a40374626dd6195af4177e813987e53d22adf80e99a1a64188abca95c028d002fc253004f31d0b16fab63e0c9c6bb1482271b2228892dbc6c8387d8c60c5d00a60ea7a0cb2db0915578db6666f8789a6167cbfafaee7feb6bdaeb6bba555f00104e33029e8ff58508bf47c0a98f20de4e887a92b8ca0fa7a867cc73bf6c6a0079f1a867463d2ff0ee4759fe13f5cca8e7a751cf35ea529ed4c5d943e78f5100a3c25b5fa32e3b22936d59af3f893f466dfc1eb5bf554abc461daaa8dc0e8d00afa62b72169f5e4e55e48ff7648161ef1a5451631cccff8c4ea5681609304c008ec995ab5f0a5723b6fc2de32abf5a0632329011ecf77995dfb023971d7f7000c7eff79950ee98c652c26c34e3d346c3cfb1341a8f8c944b8efe62b2a71b7f005637ca16364b97fda67cb89463bfe1cdc8434a9853c0febf24703f6a9a8e00003811d88f81c06e0776b780217460279317d50138750d6aa093e604dc606e5200b7a9ce5deecf00af421a50dc2605380a63ae020772c4da21f8cca8e7e5014f002d18334126824c6738f4b29cf1d00155ea0c9e1c4113c74ba13ec2a3d1f0800059f419e633ded0792a90919071c6e9d7652e907ab16c1b2863c026c006de950098a7023bb1451076066c6049aafbb524019b9e034b984917f0803b9259fe6100c8800d993de15252859d009bd92ed889d96259b221a602cbce14093b02b61b0071ffd5a37aff01eb9f035bbb5de9491dba5f6476ba015dd6741eb75c7d586f00f9a6936565e3513828675c1b50142d4ca113ab4f5cb7aa4f61ceb866555f1e0098ab46f14975a8f78bf2d1471ce89d75fe2551ce3bcfb71c7fe52df775d497000106bf701ec71d0f04c005e7b86cca523be702973dd0fb557d7ea10c2c12f800fe41ee3cb9f3e45fd7763d2e4a080000713784f40000022e1f8b0800000000000002ff8d53b18e14310c75e2c4f138d96bb962413414a085db95600690ae6200d96bb94fa040821fa04494f4481408891ef125f753f09cd959094441a47826008efd9ee3bc6c8943dc11eb81684bcc0243e53e61144c21d217b74974affb6b00ac753f4f8a9861c226f1e49e04fb92f223b8dbc103dd3862d0b14331298d91008bbb7871315ca9bbd2e24a480a94fee997d97fa757d72d5f2e95b2932235b00051502e0f89ee51b90a44777b600f572361f5bd07f3de528dced56019cbd8c100d005da06ece2b73bcb006e4c566f11925836f4d4f0f143494a8e3500fa2395000d5d8e41d13c9668b0c6750c55d768a43cf1a6fe397efd35c8ce48c42ac00e0054bdce352595b53b23304c1e9f40c2094515fb5a1195ff8ba439495b81e41500ad8e24b9933490e4261d2f53278cee3644d81c81465a3b5554730fb0ec108800121304483680bf2673f0b480b50c45305af406bd2b2c08794768e5db0be41500942d49b25f848d5d7f4cd62fe2d8cd91ac8e51ab77bb3620d40684f7d4ae7a002710d2605bf186db7377e10208c45c867c06db8bfa30173552f6427057a51f00c5c9ad3ef3acea995d812091e4249f6692098253c69ba1a8c905ff05dacf9e00c0752617c8d492173314504a71cacf47ca5871fee2da99a053958ac727807200557e5594f30d70ac79433f27bfd51c5c8e0ab85dff1956481834a9dd82d04d00cd9f273ed7b3befb9c9f27007fa8215d3da182aeaafa32f76554d5eacb01ec00c386beef20f6d0892f263abf39bff90dffa2c02d1d0400007db8f44900001000c51f8b08000000000002ff8d5a79a82cd9593f754e55ddeaaa5e6e7757dfea00fb7aaddebb6fddb76432f5f4e9a0f026c92463e2244119d40719a324ff0c1800cd334a0c38222f18464c50440d89514190209a3f9409a2c820320ee24212110091c8b89081a818301b21cbeff79daaea7e33f70eb950fdcef29df3fdbef56c00efba328ebea14cf07aa5ae2be3d7f0a3c2adc25f88afa654707ba4fce0e1e000e137a31e3c6c3fa5f13937d1a9cc4db6b8f87d8df2f0fb5ae5e3f775ea08bf008fa8e02a085bafe5d0d773d2317f6af21b3ea42c07e1145d578e1386ca89c200dab95227aaf63a47a92949a250f95e543b514e2d1a2a3f8ade2cadc5274888001ad07d5547c969602ed5c42c4b15652ac5f0a01ea1ba501127cddc1f9179830094bf2d4cd93ae6b0768e9ac24c6d956bd36253074d6d3675d0e4b6cb26b76c006aba6ceaa2a9c3a62e9aea1d36c568eab2294653adcba61e9a6236f5a8697500821fdd47fda49fa0a7c79e445d774088624f27b93e494893b09a9ce4ba170f00953127c07bd243a9677255837cdf5f5726323d929e9c2bbfa17a997a6beeb400a2dc699bdce926b913774365925a0c1ad3c78f7b4a6d5f3957e6391567ea0e001c007a1960a24132840d86cd01d4f5a36a407511fb000887443860b53d427500c0ea4800b338d023f41cc3b2663c1ae76a34c16c93f114569b4e01793a15ab004d8b4fac061e77d5142a9b60d4444f32f564ae0743323ce4008698102554c700c290c5911e93a10c1d4f72359e82e1749282619a82619a0ac3b4f84a86bfa4005230040433d5d34c3d95ebd1800c0f38a09fb2389894fe6ad4843604410dba00fa3570899309594fe17059fa6a789dfd6babf26f76aef4d30af2fc56ee8ca90088da640cde1f55e34c7d3d778693dc818e9c81b0494a5113557a4e623da7f400add8fa16abf3d2afe6acba0b54e7ac2e442f2cce351a17cb5ca74bd4961aa500fa4129d773caebbdd2c8fa8523cbd28c73c03b1b31fcbf9ba9e7a19879a6fe001662cea70b487ea21699fa7b78de1cae346fa2497d4a2de84aa01c65ea33a0001cf5e7e7caf91f8581ff9c3b0915e1c5a522e2caab469a3eebcec5c1168f1a0025ca500bea4eba47b41f6b7a5fd303a0bbd29531d464521b41df5d5025a04a001859c9000134a6228e13f1fa1140febf1a11e44da52681b9c13c10b8485ffe00ab91c93cf184b116ae9c1f61a5c7c3c29ca5030d0b172d1c785c39b004d0a8000aa097d8dc3db4392417d01a8d711766a4205d8d52fda0041118275e5a8e4c000f46a2318571eaf49b585f529ae14bc6302394d61c64ce1ac64932670b752400d318c6790f528393416b31cc1837bbe74cb3ddc28ca07c1529fba47c13291f0084ab8b19935211369b0dc54e898889e25077c58c40aa6092e1de8c43d6f4be00a687407765206344f96246187b38d634c59806c8d5a09799e7d111134e4c94006f51ddcc7917e0c4f8987adda90895a2ef719552025124d282499369ee4c11008f43121a4b88f075dea66615e10cbf3321c4107f92ca9c0ceb6442d2775a5200f84d6cfdc63bf41be1524c3181dfe04bc7c0474b35e26609fa6ea9da98aaa5006376c9a04bd0efad404f0ad0d05c17d20db0b639a998e6178af1ce086d26ed00b3edc354c43dcac6667c33cab8c0bcb3c512fdbfac9605f0ae05ee1e02b7290041c27eb6c875bc20e7461788d32eadfe1b2a168e7a0e5b754799f317f00b3000fc08e6eff689fbaf549a391fb3fcc7297d83e96b56a42ff8c64c7433974c460005e9a5f80638ab65eeccacea90afd319e44d7559ebb2afaacd2ec16f470bfe009ae0072d90cec4e781f6250678f6d0005b2a8c72a434f0736a96399fa30cf8006682967da2c3bfb33ab4e8c9ab8be4b49843e84ad9ddc50a84ffa45615e10a00bf2b21c4107fbe943997245d92f4b3961472a5173894b58b9da24cc770a8cf00d1551b69b304fd79eb954805b409f60073a6dd39b2b1f30524687d8cb40b9800c982bc57ec5badd1f765b52e602ef41abfebd12a7756b0c68084c6126e40f8004db5a90837f8dd082186f8cbf5a29467b404a93eb2a490677e813cc2a5980200b270015a27c0c7c4d098370bd03a2e9790399710060819cca9307da5d2edc8002a660ec04be8b7bb4280ac9a30140267690324469b59f5d9764b2d334dd996006cc6b7a68c4c81ebed0efd99da15c09717389840d63bfceed65b00df9273630009c4ab2511df2c10eb0dd6a4659ce93b081030fc6eccbfec13f7dbd52ad3df0063f9272b06c806014285607206088b2bbda13ab7a2a69d040838ab5deeac450056bdcaf56a0d7957baac2dd957d5d697e0b7a3057f4df0837640e5736d075a00fa59630171e6f474fd44a140b5e06a4f85510e3a8d7e875a67fa1e65c0b71600b4ec131d3e697568d193d712c1b5dd40e84ad9cbed1908efaab38af00cbf6700428821fe6627736e48ba21e9fb2c29e45a5de050c2a598620379f0ede050f700189d8d55b304fd01ebe9b95ad126c08355603c97ed1dadf7216b3d5900e84d00f4b658bcedd7adb771c3cd8847cc5291b1b8dcde2fc9e2a396c5253b0aab7f0071ff79e1f8d03f3088e22754fc84483e5efad1640ccf9d4cb173d27f849d9300619601d7d1a2dcadceed6e95552ce78a7b637813ab877e85ea361727326a2b00fb8f1daaf42fa88e5ec7e256a37177869c298ad428d50f4ab9dececbfdc77600bfffb023b9ffd881ca1ae292d20cdf168b61638dfdc726d3ff82e09865fa5f00b93a71a9366fc1eaa1ff2d773633c4f0ac8926fd1f76210425e2e6bfea0c6300a43ab3457ed62fe6ce645dae31abfd1ab31287923566260a4fab3526b5090b00ddc0b096f4a5f735bd02ba2b1b1923a78c1a820ccee4ac265a8e2b30c80adb00c8c54ace21443381d18d5b197d7981d117fbcccaf937f816dcc9b597b9924e001c5a09dbd22d39b5f8c97295ab252360b35ae388b35ee388b35ecb11675d7c00c511c70c1504a8dbecb4c90cf6798b81f512dfe17ab35852b811cf34f021ee0007c5d9e2c91483d76a6a553ce1610702cf28d88c06398741ccf741cd588d27006919e52b46b979a08af2d446f98ac18b2dd33c2da37cc52837df5545796a4300745546f97497967bb5d594a4b7ab289fbd7294af70864cf1ed26c0274978d6002c413f56bacc8c2e437512cb4c40ff6005ba4883336281576c7670b95d730b009a3b6a6b978d35daccaecfb69f56dbcc3c01d9b66cc6774619cf31efd9f95500f4bf535d2d806f2f48bb1938651a7573f5ec1cc0cfc9b9b105e2dd96887faa0040acb33922649d99df84bf83e1cf60fe6d9fb87f5bed32f35ecb7fb2a3cf6700701eaa0293d379ce443719d5792e317b557c1e9cd5d5dc39ab6210f10dddeb00b2b6655f553bbb04bf1d2df86b821fb4407a26b10cb4dce1c83e649652591f002914a85246371546397634f0efa9b3cc3c4b19f09d095af6890effc0ead0a20027afed79ee9ce33832af94bd3dbf06c24fa86b15e135fc5e1342c2cdaeca9c00194933927ed29242aedd050e255c8a2932c883ef2a1cea59a6b4c6ae5982fe006beb95488eb449aeea72fed0510b77466d240c1717357205e496b742aea45c0053de1b19555e36197bd9c46aabbc686a49428ecaaba848ecc9624ba331c23900ca3f4744c7f6a487a5ba7e50ca75abb3bf8f70abfb081ea2bdcbe7bc7f92970097624e0cb91a06a9ba9d99afca01d07cad3c007a4fe30068be81fba61ee2a600d74493ab8bd301295d57287ba07c3b6ea7dca3dc71790de5f5cad36baf3abd00f675af3c2a26c551b1678f8a495fbafbb9c685196a7a5fd309d05d69cb18fe00b66b2e585c01551b546d0dbbb4930791f9deff738fddfb957bef9a7defe7df007ae783fff837ef36fff0ee9fbff3a9bb4fdffaef3fde3efe954f2bb970e39d009e3e55bc26eb9766e90b40999b3c05bedcdeb5fbb0b38b26af8277a50f56d7007fec4d3ff9c28d8f6d9f79ec357ffad4538fdfd93cf0e2233ffbc99ff8d0ed0017bef8abff27d679c01aeacbb71ec2f4f4695ef59c16573d60c6e2294efb0a00273ded56e77629a15da07472a7c3ebc28edc93604f5fb8dcb1ccd0919ed66d00516071e68e0b85b6b858e0c3365bf5318b158d8aeadc5f83458fc3362cfaa8006adb4c882665421de63aecbc524db8731b7f5c6bc337c242e08f7fe90d9f5600a0f3c3ce31a6fd61755c5cca62453b0a1facdcb7fafbe64bfe54d0c4e000a900cd7d42b91c3c54ee513864a3c61c41b88f01a79ae52840ff116d6b188a6111008a5093858c46def9fafe71ae8f6d7020a4bd9674f23258b7dfe81617d6a65000601b52983a6fadc32655f41eaba232bec32abef5617c578e84c6568737c6d000732897b9ee2f6291896a2d44ca1b552b73df9f3b212eb94da4992b8cd52305008dbe1d3d19e8293204f6410b0c7a0ae50add404fa189a092e80828fd2370400039c0dec1356d50b479e96e22290ab18b484231e414a0f20d656f87d814b8bf00a34c21f5e59a8588c7d62150f23ad2ce2ca9bbf729b5434f3d50aa87e93fa1003c4eef829d608d42e8b606e5fc0974d5aae162df4312cbdc6708006ae4ab0000de300480d51d1a430f003cd43c8d92ef49bb4700a602c067088f40e89bf588006f114dcaf75c259f24f1a84ae298aa48e29e70131bb1d143e4d4f199c822fd008c208530de5479998b1bcfc8aa4610d5704b6fc42cdf96f77bf47e8fc05eb000c06092489cc2a30dbd501c1d287d2f107379431669c4c0439f67b5e87aa4a0003b94a3e59925c4bc5f506169d04bf589847bcce5ccd528f9aeb4bb2fd7a75b00e9d3873efd661d3a7054bd30a8770471fdc0f7444d9e276ac2c38d5753cdcc000baef169a6098ab0c9771d2e56aab95fc1586cca0a16c0a702da27c042d30a008e30c3893a2ab6054ddc3f2873d40a7227886e954f4775467823c2b2de8a08006a6c416132028181a8b5962173d3fecef27adfc80b1099747067e46dec9d110036149edd50e8c30d850d72b9b465989b8eb0346469e80b0f58c746f047cc3d007013b2a4e14c1496ee15edddcb2a9feec584d1b91fca6d0b45484a964ec71300793d6b0c300fc93c24f3470be62a642421cdf01d2c6a9379bb23f23216e5c5008b179111affcbc1fb08b3ae46d5d20af8d6f59a8225c50b709236ac080266a002109796f2b1610dd8103b598ece0f73d6e0d7a9cfc1dd84478b844707bf8e400daff987dc74c864faa56215dac253727b8be3ac6a6a0236f5a969099e0ae7d00e21342d197106288df6dc99cf65695a4efb3a410a677c16eb0d81ec91410860037f12d17f8e4d6b0d72c417fa0dce6f4b8cd1106070f36309a5db7b98a63350009aa7565bfc2f4b8b6981661b508ebc32f93a085c73c88dab6f7f0a4f95d4b0003f5a1cdc47db6fd1972a0f7fbd4089a5bcc289c7748db0df1bae1fd61f5ba00115fb0a92f9ef0788316f13a7728eec2cbde9628eb9982a31ec0f7ba26f33e002bcf61de9ff356a44f13fd27d62bef2f2d7f97327983d27d0795fbb634df5c00dca1b8e9487677e0ac70b11f550ae1c365dcd2652d665f558b2ec16f470bfe009ae0e75618bb72d9b502edfd97bddebf1f5cf69aaf51619443f4ff22f4e87300870a1dba91a0659fe8f07fad0e2d7af28af96881c375a752763cc44b9ff7250035ae08e5ed420831c41f8c644ebeb5c603927ec392ee63ea3e372c5e3a650a00dccd45f8462ef0c9a99da125a0fda8308f6ad1267c548ee8a327bd049d6d950094f7557c9b39d9bfcdb078a293ad5b6c0a1bdc24e6ce897d81eec1390b0a790045c336b18fd8ec9ec03e89b4f7813ab1a81d8bfa51417d8a5f5f5dc178ecc1004ff7b39d62b78e403a854d4ff7fbf753c913a7cc13a77de07d95ea5b614ef900ba7dd3094c0001f1837483d4ee7f477094f9b7c0c2045ee6bfe1269ff2b1a800c099020872430ab50606d402370813400b8390ff8901ffc87f6208ed575e9800f88f042186071c10815d1404ac7a52d5411044acd6c0bd96f90fdd70282c19005f934104854147c111ab476019d8cc287306605a3b448885b19841787052e100513b186438c8d6238b240a422b579d72d5c1a641b91a418372e11f91ab61bf004aae1f0f1a821c039a80d8b4b38552c5d44193d53ab8d433ff876cd751e05f00bba9facff79fff165854cc721a2200007f020b80000002101f8b0800000000000002ff4d523d8f14310c75e27c389e64a6e40a4094202ddc6e33234ea2816500afa2404848f00728112d3d120542a247fca0fb553c278cc44af626cff67b1e00c74762e74fc4724b74240e198ee409e127b08cbf570f28c959ce6f0d3b0f23000f7316b8c8a5072ec346604315f166a901fe35c5cda2e919828b65995c17740065ed4a4c8556cf6210ef10030a1d1240c12041912359bd843d358cd423256200508487463d7c79d1cf7682294a5d50721aca53a2c7546edd682280468d26d800d5979db5d0d1218a6330b04ce08705b529a128e403ad4a9c43319a09ac5fa8001ce866758ad171f615be86b6baa68fac97ac94345724bea43ae493b7a173dd007ba85dd48eea01d6b6fadc706b1ea7d83adeaccdf94df8f77550210468067b006568b82c0c8d77c4a6719f52c204033a7b8f6e4b50c43e921ee8c33562055a00a9aa75e1d3de45faaf0b802962e4d13e3256304463ff34d87b0ac3035e5d4c003706a5b13c5ca63cc3e784fccf942c7fa56c8d604405e2b962020ecda756e700e7563adb07995283526e0b2abfd262951bde5118db4a787edba5ef58ab6805003cfb057ec91851b511e5a94037179bf4b731e9d5cf8a37b427db9cb0a4096b009f409591f34380ff041d4b3cd09fcd76343a289160c0a77e280d054582e83d0072a2a2b6fff8ebfbafc3c6fe83f0b728cac50a26c84d22768dfdea4564b26b00813a66f1ebe4188c267cbdd1d5ddd5dd5f034c7f3f970300009a397c3700000014391f8b08000000000002ff8d5a7bac6c57595f7bed79acd933b367cffbdc0033eff7cc997dee3917ccbeb40682d2f7a52fa0a52dbd2d7d016de9bba5144a00e95b6b08514c901863d4186385aa3544fe302841515225d51034244463941a000d81fec11fa88df1f7fbd6de7ba6b7e7364cb267edb5f65adff3f77d6bedb500f6a1721d7d42b9e619a50e95fbf305fc296fa5f0f370159432efeaa99c39cf009c7725eae63c7b298dcbe929c75c602e6071a1b990c545e62216179b8b595c00622e6171ca9c62f16ef36e16979a4b595c662e6371b9b99cc515e60a16579a002b59bcc7bc87c57bcd7b59bccfbc8fc555e62a16579bab59bcdfbc9fc535e6001a16d79a6b595c67ae63f101f30116d79beb599c36a759dc606e6071a3b99100c507cd0759dc646e6271b3b999c52de61616b79a5b59dc666e63f121f32116001f361f66f111f31116b79bdb59dc61ee6071a7b993c547cd4759dc65ee627100b7b99bc53de61e16f79a7b59dc67ee6371bfb99fc503e601160f9a07593c64001e62f131f331160f9b87597cdc7c9cc523e611169f309f60f149f349168f9a0047597cca7c8ac563e631169f369f66f1b8799cc513e609164f9a27593c659e0062f1b479fa24bcaadc93746506ffe7ab2c217081cac1fb034260588c0400ae002aaa43c77578ebe9e2490528609c2a1a8c5305933d0e1cdc1a292f4702b7a9003c091449a09010286c112860505e081484407143200f399e5686d5fb2e20d2009e21064115b7f93288e74dd69836e4c78f88c44f1069ec6511b9afd4bdc63800e8ce0185938e29981cab19a96a93330556f34a9b7ca86e3b80a84e00512b1400355091762b6f68ca9cd974a81c15443a90f66ad25e457b4e55235dadf4293b009fe6eb785ae3d3ba9881b7355d7f2785c520558f9c1a07577425d295da9bd500c8ab9ef0aa33589d06aa75561b0a7d1bb86be846a41becab1ac2aa85ff56a3001d39ed66a46b22702bd22df26d6be5b6753bd2ed9aa772cd6a1b6a394df4d0003bf8cb1cc39fbbbbaf9c826a87ea050ce88056477722dd1161bae0ce26d5a50030b91eaa5d567ba2296fbb1a8dbd3e2c0283b87dfd53dc45badb012b3bba8b005a2d520df0ff2658646b25485cebc2c9ffa9baa1fabbc8a9b7159b2a3efe2b007cf00faa7ba1a3e0b40a54ecd038752d46141b74a42e635a8979eb5a9cb2d3008d9c6e5beac27cb71739bd9ad47bf8ef1deb474e1f2a3701ec8e17a90a22a4005d8a54ad1ca9ae1f021e4e07242b20539701ed3e84eaf50710ea5535a050b400d2002af4074334fe580dd9288a0ef13fec0f2267d0a39e5dead965a7ffb59d00102a35e3321872268310c9ff05a225abacdd64701bb6ea75ad623446ad07cf00e554cf1aa3df81a0b462a402c85f85fc55c85f85fc55c85fa5fce85f5305f6001f512a6601a79600acc6c8a8b3a99200bac2c8a8254d99a429c8b0a99300b500a3180f67c00510edb0691b32f8ef137bd4a63f1ce009ada806022631a81e40009101fb0c581df4a9711720ed7755ae0fe5dd9e2b6071cea5fd5c7f5fe5bfa000a0dadbe1121fde2ec1451ebcdcf1908b1a5d44abe3eeabcc1f014bcef9302e0054ef6164cfeb7bcae907b4e025d68289b0fd54d8ead112e24920fe180c2335001881da68386e29673c868ce33113961ac7579cb09cd36a0c1bc1e8ee488f4200e72aa8454b38db1cc010041515574361c8db811e92a10c1d8e22351c83e178003401c3c9040c2713613889af84e17d6a028610c11deb71e8dc1e69819db3c50001cfa98b03a28afa0013701a3a3460ab47c1a5eb8d7e06d9cefeaa2af98d2900cf04960da7fbca7d50419f2723674843344600b4f3ac1a86cef7114a23807d0088101b24d8e8a5a944d0d3b5e861d54b90e3497596cc2c335633735467acce00c52ebc9d6934ce17919e2e505b68dc55b7ee223d93307bb391d5234726776300d240c4b5900c032f74fe04869985ce97a1e66c32df57faffd43c74be1239de000c509a056872fe4ccd25185563103a5f45cfc1ee0c3dbfa330f06b40250d9100ed2486e8a4a81a68c64a6626009b9fc27c4863a8396d278f07f41f6b7a5343006444bae9c91849670d261780bfd7d5496665c40c698880f9a6d745a672be67003315f2cdc8e69bea76be11644bf40d48dfc335ecc7ee4c00d48f211a03789800025802689006d0193ecf6cfb3c9d3e3a926bf5d4ae1e7057ddba830a7dc9960018398d0961246fa750506122d1d574ce3aea6e8c6b3a841b61b4a017629e55008d71a8ab8ca20966137d2352036654a78794e174020f4d3bca8bdd8847bb8c0084dd0e9a216888d9ce190e1291fa1b91fae2a7aea82929db133776b9c886ed00366ee41cb37123125c1fd2357b9b342f6e049bfe50d315433a00536c3bccbc0088071d8ad3a194e72a2fd4d7421c4ca6438f8c991abae3099ebd534de289c700d3480beea43b8e9c31e2b1cf8eaeed88f0d517a969da51ac2a1d3124379a08004d867577c4ae57d8aec04dc7e226bb8d1be11293180137b82643c8471fb73a007e22f4e9c4b41d9a96c0a4426379768b7d2649523000df391d4cb63d0faef10002fae00ed591f1003a33bcf8e529fae56ee8d6b1f81f4ca9e31c74a7f3059e003fa416af173cb32db84d0912f6d339f03627e75617127b5daafdb8551bc980000b9741a87f0fb800c36740bfb34bb9bf4447fca2e52f8ec8ce12b8ce52b87a007a26994c90bb106c80b35a44ce06f9de94b3974e6a1d3e4b6bd3b3c86f478b00fc0d911f7dfb09e6212da7005167dca5b1fe2036a0ea320a6830eae151d33f0056d350bf4c1d704d455a3e131bfea9b5a1959ebc3a484ef319944e8ddd992f00d1f1cfd532edb8c4ff523a62486eb6109a33769db1eb5fdbaed0cb3b02503600115b1233e8836b0140bdccc06e797e22f4b763f7288f3e81fd487f306382fe002e12b4fe09d22ec4eccec97bc967cb159efd8b5ac562ce35de84ddd5601939004b78a3c78eaeedb8878effa1f6d28e7bf8df938e18925bac84e68a5d57ecfa0023db15faccceaa8f25b18af41cd70231f0132686d6cc4f847e2d9942669c420018200bce380b18ccd5a96d07d6303308bc807dbd25026419c0516ec13a0a8600409bbbdc65db582d42b70cdd166cc6b5a28e6bd05dad433c6fa830167c710400c044641de23f5cad21f89a9c5b2b48bc5c91fa20e6a8f73027ad3aa17b3e0200040ca7a0bfd8a5dca7d4327417967f77c900d94380d0ec20ce00e1ed52efd1009ca4bed2a1040838ab307256a2ab5e467ab982be4b9dd4167c96d6566791df008e16f91b223ffa525299db212de3bf35873a3322ddbd385647cd39dbd360d40083a0712f57abd0bd9b3ae05a89b47c2636bccadad04a4f5e8b75e4acf7a074006aecc57a1f1d4fabfdb42356ffeebe74c490dc5e2834f7d8758f5d6fb35da100d7f20840099798c41ef4c11576211f71d65afa89d0f75ba4476a499f401ecc0002c3992cef8037f7118b37992e8926a2ad2b687bcca28d8b7162b7b31043760005721b5c92c5b396c5595614d6fe1264c0abe6ca6bc9595496b462f8d11cab0024f757d5cce2683e0472e79311da7e0dabcb0ce74f701dcc93d5eaccae5659005d45f22ee3024dac6ee30ad575242072d55ad61f21aac4174c47d4f176add10018ee23bf882135eeaa5b77915e336d67a7c9c8e9d648344e43f4b28e38cbdd0018d71a93610bf11eec85eed7111cd3d0fd2bce4e93315e4dce51e3d0fd9bc800d9c33ce04c03ccdeeedfdad91b3d1137df2a318c215e26003bf7ef2367b44a00e698e5668e590aa0648e998ac127e91c33b1090b8f21c34ad297ded4f412d20035f7648cb8a4812003989ce548cbeb4aa4474b2c23e74b790fa134233afd0700a9d31747387dbec9aca4bf876bce955c951e9a6f22dff6db133c11b87b8b4800ed31e2968b155e71562bbce2ac56f28ab38aaff81527935150a01ae786d07d000d1c7a44092269ee2218f6067c9d017c640932e212644483fb6a6cad3be27b000e7465a25a4e61f84c434dc2cc5b6161c4c9689204f892019ed94d037c6203007cc9b8c56a693649027cc900cf8cd3009fd8e85c26013e0e8566c8ae21bbee00a5013e3d22c0eddb9b2501144d882684c35b25ff4efd44e893095aa6440b2d004959a622f4db53a1e30c388d85de0b81b63058a3cf796a6d678c15dadc7097006da7d53acc5c04ddd66cc6b54f1d0f4077ffe010cf2f5787b1e0eb23322eee00dce3fa10ff87fb0710fa809c5bfb9038dc27f5eb628efa3826f5fd5598791c005007c31b417fbd4bb99f556198b9d9f21f8584fb71e086a60071e2665fe2eb0038cd7920e17a2870e7d6e261e4eca7e187d086ed75525bf3595adb3f8bfc7600b4c8df10f9d197924a18435a2e6e5a63a8331d539da76375d498814d83510f0071f02fa9fd30f33c75c0b52fd2f299d8f097ad0dadf4e4b53e889c83e3503a0035f6fae0043a7e419d483b9ec0ff09e98821b9e38742f338bb1e67d7dfb25d00a1577804a0844b4ce238f4c17508403dcf6cd60afd44e8172c2a9117e9136c001dc9ab87f6eb912ed5902b32d84eac202e0bb2e79389e408012694945b4a36008a4a2ad95d2ad9dd2556fd6467c99784ccbd4e7fb373ca5b5fa3b18e5574ae00cc5dc8b3bc15fa85cdce849bee4cf0253a7b769aaf27f2c63bbe86fa50ae550042aaae85997f052aeb61e6df60ddfa0e779a8e61a729f30ab755113ceda00e005bfd97aac7a97a27ccfc003d7776dbfb2af72af653333f8a9c4c9b2255922d00b68a88c4dbb6a6f132be6c3e9604bbdc2bc6f655fd18da8ee963913e56674d006f6aba0ee99a76c39236ce348e45ce31ec48d633e895d1789aa9639fb75c830068d982150df562b53ca47db8075cacd56bca29d76be85151b5b847b68a8d0400a719b0b56e5b45a52c9add9d0655fa2e54ca72d7d8ddda314cd4c1062b761f00a1524efb3062baa59db5bbafd455972f85ccdcb2260244db3238d7aa90d8a9000759705ea96cccb91966d7e0dc6c4091dcd7553dcc1e7fc35e65b59e6cd9d700d28dfd9a1dfb361e5104f04633a89cc0162010013abfab2a61961b85e98e6600e2144a97ec66964529ab011acb0003f650b9d72ca44f895895b7a8dccffefa004b469541f7b3a47b39e8da41847ba9518c9c227d51af56a0d9d5aab2d1ec1a00abd95b88e07f7e41e179ee61aa78bd7d7c43aaf88d6cbde92c8a9713c5cb5b008adf293a53a89f53e5307b77a26c908c0f4459866110872194e56dc046bf0c00eab88258d9474594c02a9b1723ae5510661f075d3ba88cff7203b02d5965b100c59cfd05156c947d2ed5a6416d3e635b3f9bb4665f63ebaf9ca12365dc72ec00e654058d010056c5558b65fc4d2155b3321614057845d5c2ecef507719242900a081f79fb29591207f3e0539487c3195e6654af387c86d26a6fea2a58e475f0021d12fcba98ffb0ef93f40bf26cc9b2b60733457ad0514bb9a885ddd121b8d005544435d1266853eaac096d96f283f4eecb190cd0a4e17aae726fbad3471b3005545626e8a61bf9518b64ac9c81df6ca05e262615cdf30b65149c6b055c59700e44bc63ec091fd9e2ac78cebd6834dec9dfb1bc6b52dc6d4fddf136b91f11700695832f7c9dc2f9fc351658abb6152c2a01faad2ebcf35f4f65c246c6dac8000b90e7c611990a564a1ff8e59ea323c11d0cfa22fac9d0f44693f01497d031200ab34410210d7ca122694a70c79729e95c7665ce14b4804a234482a2b814f09007c583b574baced13b089b5fd7a90a48bfa265d58c671baa894642224e35211008446aa98322ee2bfd864bc94cf4dedb6a53a437765bd63d57e8ea146e66532002f97c4da258edc589b4cde6a99c0dac111d6167d63e6b076d93f83e53b629600ba145bfb514c2841b32c1d68bcf3adf1d05a6e95d0da2a93e9c5962944a43400b29554f20a7870993d650297bce6e2a050c24b9c57841e45e85e2b6654ae5400c4835cb9508c74b11eb715fd42a40b167d05f22e90cbe9988b2a30c3253030003448b95e7a536f80788d47d54e91862a62b72e7757bacb58b7bb8c4da6ea8d00374ac25d3417d83c64350731e6e6040631e362c2b8b8c5188d452c252a9e1c006c90b1d8e4e9d426756b93a6d844181753c645322e92f16712c645ce199c5e00c8bc44e6a5e239c9a8f2066bd4eef3563bc0a072040c0400b1d6006a795b57004e43bf1d4f53f488e87b4a60504971f2fb162768ad087a5a15b67e29468f2300096e40690241fe8b29f273167c81201f7a9471965a2bc3e541190f7295622000b38e530bd8e61314b52d7b301ebf96c423edf1b6c411351b8f472cb1ea6cac0000edeeebb35feee523b35f451c5139231e69957f4a266f06c61a8c7770869c0073db728ecee5667bb3dc947367596e62a59c95b99727da3b35127ac512b2cb003fae157678405d17c6905835d1b6d3425e75779a9c317f982c2e9b5c89c172006d926af3d18f3151e5eb5c60e2aacb5292cf7c62e07fce44f88ee81739057600746d47ec05e7b5dd0b968e7260221d3dfac3139a9caa762aecead9aec055fb0088170bbb84b624649ec31e7406f2893e6d3f163adf4ef46973b14c59bc64b100ee6d2dd63d6ee6227ed2339c3617f69a0705f50e8e6cf273fb0180749643a4007ac71efbd620bce307ecb31f7f24e094d0e6fabb6cbb00473df913b003d42c00614889c7356e9f3b5e3cc3cfbf2d3d19f38f782b8c8f7fb9fbdaed73935d7600a2395f7468f6fcbbe2a30ddd4312f34b61fe762c21fc307f5189fc69c47b700050913f65f967e465e5880f2a3a9ae77599be1c8e0de4cd009cd58087dae9c700193814f13b3aa9f97c96d6ba6791df8e16f91b7d7b48d081a45d79e381b4840081a8531775ee4a4e6a7cbe03d160d443ecff00edf839ea804b8ebc68435f6c00f888b5a1959ebc7c1e786163a6901adbefe39438ffc499df4648470cc9f5060042939f51f8fc8c22ff5cfa85c451274fd62f96c4804734f000c0f739c2434e009eacd09f8f01a13af40991d9a6b23b5cabe47fc3e65ac2cc4bde582d24edcc00e9ad327685a05af640af64a1ca979db80743a0c1335a78a38334d7f5a4bdb70039de70acd4ff68bfebc07f0e5ed590d9e96fa8f18b0778b1dfa5d53435e349006f5fbefae0d726ed7e0ff27e35feea43f5f929c449c7b8265754f8e3374f7800fe97261fe6bf0116aec986f9ef9ce4475459473eb4ca245f5c15f8c555c164008cc72fae3ce3f18b2b14f2c59567af64b32dff6de3d92fae0aa6087645fb01005656aada185364b500ee8530ffcd130e9525e3031944a130286ff2f25d1658001a3b35094d03a6856d093139c6148407890a8fc2d62097836cbd6825291acf00ea55a25e25b02953afb229532f14a257d95ea95eaf9ab2488e013e44f42d35004faa206d7c564be08208f9be7d9437b983936ae7a59d97fe1f25258d5f59290000009e029ef9000001571f8b08000000000002ff3551cb4e03310c9cc489e300a4c005097a006e482015babd64e1c0896d7b40487046fc70bf8af1ae58c9de008c1fe389334042dc41ec000c9098e9a08fe0a7b40cd8fb2dd4269bbe896d5a000c9116462621a347d233036723c8b43f78e1de0bee669ed997b77fcee2e90100216843302d4fc025ca31b880108cf00a698112526731599166794a981c2a8600c02c8fc9835a06866a8fb5f498cc2f513b6adee0be4172f5215b940d1e7a30000a90122945b4e61eb2759857cbd69337d0ac6433926b527975dd424bae47cf0048a78d742f682e92572e26dc20a2cd4b38721fd91b4462a36f592949bdd90700e7922ee893534c0b458f4209c9c58ec1c474c52d2af95cf58751f52739c55800f03bfaf272707e17b89b0ff59c0dd592b56b6eb459f317e36f7eb1b6d8f2620024fcb1c676f38615c7adcc1ce61946335b39ac9c5e37f8da0521a30fde8e58009fd6a73f25879a5d30020000b09b434a0000019d1f8b08000000000002ff3500524d6f54310c1cc7f97012ca09a93d0077c442df5ede03214e2cdd13423d5700eaa1aad47bd55fd95fd571b2bb92bdb19dcc8cedb74025eca1760416a8663a00942fe0afd032607f3e21dbc10eb78ced300d81261b8bd0cd3391fe2fd277a6002f3610efe6c6afbb93cf036d78fb7d46365a5d20620d52ad7c033ea01cc56500885486978833cca1ba345b8148683e5d44c58f313069650d95905a024fa92c00e38a171b8fa1ff8b273aa76db44e48a4865c5224192a15c4da49f9157d52aa00d4335bc54061583dec83dc8fd593bd9192562385e41d7e3468b644ac23d20e00bf5689531a27e9855552fc881ccbed7910e53c4da68bd1591cb578b2515b1100bd53bd265ee29dacdc4dd1fad36f520cd435b777e468dec8ffd90837914cb9005e048bbe9b7bae29e1a49ebe676a579f93241798f43dbd3ac4dd8498ada9b700b689a9e5cee566e2f9c61eacecf0484c3536fbb2f9a093900e46e9fb71a817007c502d5abb04976dcd3f27fe8dcfa94d9b4d12f0d91a9f9b3fe8a4eb661ea600110633eb1e56b2d71d9ef6a24474e2eb0d57af57af6f25fedec1cd020000b000e964d5000010961f8b08000000000002ff8d5a6ba835d7595eb3d6ccecd9b30067cfbecc3e73f6d967dfcede7bf6e59c395fbecfa4f335977a4b1a6383a5510091a0a452f1021a342dd520464825a65002b6847841d1828856d35afd21d51f00d21f825a100d49a94154224a9578a3681a4b519fe75d33b377d2f3951e323b006bad79d77b79decb5ab3d6775d1947df50267840a9ebca78017e5473a7f0d700c413e0bf7b27ca0fee0bee7b88fdfbeca3341ee7265e2a7393232e7edfae3c00fcdeaf7cfc7e8b6a5c03497c3f273d407660ec340b610909aad026f88a21f700cd43d795a39a856eca78588d8718f75558e8309892b5fd6dbd4d598d550b4f0084a94e2b544ed40a2e95da402547a93949a250f95e14a4ca09a2b1f2a3e82100192d1fb18c2888cc36e6dea1a25c5dc7a44618a17bbb8ac82a777f44b835ce00f81b8351dce18c2eb48ca9659736c61cea61a8cba11e6dec56436e35d4743900d4c7508f437d0c853d0e2518ea7328c150d0e7d0004309870644541de1471f00a37f749ce2cd806f5275dd01219a039d16fa28254dca6e7a54e8413256c61c0041dfa3015a0353a800f6bd3b52263203921e5d2aef7fd52057df5738715438005d5338fdb470927ea84c1a24a0718f09ef102d7372a9cce75492ab471146c000650446a3f414c89f364780ebbd6a44b8a8fb081a9e52c311bbbd31ba2376c700a2309b233dc69bee04cdc97852a8f114dca693197c359b41e5d94c7c352b1f00f115643ca566800c5160a67a9aab270a3d3aa5c0430910088668a13b11816c008ef5840265ea645aa8c90c0267d33904cee710389f8bc079f954027f51cd2100102a98999ee5eac3851e8f28f04002ded316074c15ed5153fa100401b0fa75004849d2e91d0863fbd753d5df0cb19dcfa9d4d9a5d2bfac60cfc70a6742208200e904b23fae26b903b79c4e0b07183923119356a6a6aa8a9cd4464e155b898d002d7617555c2dd87597e82ed85d0a2e6c2e340697ab42cf57e8ad345ae141ab00d00bdaeb7db599e19533abd68c3c109ded04f1dfcfd5cb006691abbf81998b00b3252ccfd432577f87c85b2094164d0ca97f504b861228c7b9fa47508e4f160097caf9b2c2c4cf174e4a20bca40222a9a36aac2566171260cb078d1230d49200d8c9eb31fdc79edef7f408da0dfb328748a6c11878f74195822a6566a5986e002604a29b4ad48fa10d828d4ade546a1a981bccf0c04529f43354454f2261a200452af923adf4e4b474671540a7658896013ca9035812685c27d09b7cee1efa001c968bd21a83491f6ea4217d8d5678d08209cc136f5ecd9c1fccc4e01cce0900193789be456b86279dc08d00ad39ca9d02ce99e7ce5b01c7fc6c06389e56b300dcb91ba8257063d2ec63e81b54bf74639a3bdf04caf424c1f0232822ce7d08007571635a0161abd9a9f8291533d13cd57d7123345570c9e9de8da7ece97d4f009f42bbe148e608f8e24638fb74a2e98a091d50a8d120372fe3454275126af9001ed5cf9d27a14e8287a5d76569486773bcfb2135a7050224ca8299a7b3c29900211f4f49682c21d2d7f931755613629d3067428829fe742e3ce7249d93f471004b8ab8496cdc788771636b9b6581d2d3c733451978929e6a2771a5f45315b40009a1ad02739e12df0fa9a4d465aac57f73d474ea53ba2605cd47542af30104006a7d72c2b1df56e0f51c6c4b39cc1ca08d4bf0ed2f5778ff2b6a552a9e5ac500dd43c56d4990b4ef2f112f4b4a6ef7a171d227f7df2c25ea057cd51fe7ce5f00d8b878be8e8b171917bf6be54f98c8de61f9426cf425181752c904e995c4060024ab15ea471dabc803274d74d54bf9aeeef56fa1bf9d2dfa07a23f68a9a9c4003cb4a5f7db3398339fd19c174a73d48c59f08680fa1c03eab5c3802286a96000f8b71643ab3d65a5284ecb451550963003e13fa9ac26ccf09b0921a6f88b9500f05c907441d27fb3a4b708285b882d8b05ecc1b34240bdf6a680fad261403d008f3d00f98f172cd028a0b946f860ba932e293be3bb6c8d77be5a976a2ef51a00bfeb71563819bc3122a1b1841b10c66a53136ef0bb11424cf1576be1b922e9008aa4a925853d8b2bec1129250b2c2d5c80d629f46361682fe24ae965b5842c00b88430412860b102607a57633bb6c02ca0f00af8f6332448d684a3f475eb2800008131939d70ec5bd52ad777c0b61587f1ac69e3167cd7db1ddedfad76a5e200ab2b024c54866c6576eb2d14df52727b058db31535bebfd4586fb026ad925c003f8a0481c007c17f7542bddfa7b25cbfd3ca4f3326c806094240c09c09c26600a63784732b30ed24412059ed0a672db6eaacd0d91af666baeaadf8aeeead6f00a1bf9d2dfa07a23f6847049f6b3bb465feb7973067c148d78f9500aa25577b0002463b24687e42ad73fd1c6dc0b3166df94e307cc26268b5a7acd5b670b61b00185d83bdda9e83f029755e139ee3f75c0831c5dfec84e78ea43b923e634961005776454059bf58163bd8836783807a8e79d3cee24ae95fb2915ea88c3e813e005805260bd9ded17b1fb5deb3890d74196d8944db6fd868e3869bb9d85f0990008984dc3e2e29e2e356c42d7614167f09ff4519f8c0df99b0142e25f2978b2900b8fc919a96857612567bac3f460a9baf439581d4f1b2daad2eec6e95dd35ba005c7a104dec1ec615badb4282c8a8adec3f76e832bed44ea28ecdadc6e0ee1c00fb0f0152a3151eb40abd5d54fb8fed7eff616772ff01d04371b7be456b8667003b45a8adb1ffd8e4fa5f64ffa15fadf61fe63dd87fe87f2f9ccd1972f8ac8900d55b7fc1aedea044defc57c434c6026cdeaace72fdc5c299aeab3526dbaf3100990494ac316702f8bc5e63e6b660e13574584bf9d2fb9ecea0dd7023736411000f90646b046e36d5f2b982853cc3367299c97708b599c2e926a99dbebac2e900cb7d6525ff0d9e257772bd15d4e64bd477aa6de956642d71b2ca0ab5da40c800265be31367bdc627ce7a2d9f38ebf2293f71cc858201a1cd824d6eb0ee2d4700364a7c87ebcd7245e3c6fca6410cc9aa3ee5aa3e25ea58ff2cc4537eecc0e000331a7606f4cd3d6a9e9bef01cc6778e6559667cc72f3cd7596cf6d96674c5e00ac318b7995e519b3dcbca3cef2b94dd1accaf2d96e5eedd5b21949bfbdcef200b32bb2dc069265816fc8399edd14fa49113e8b2ba5bfb70a9933860ce1a42e007351fa076aa5cb32382f95deec1072bbe616348faaad5d36d61833bb138efd00acdae6e631d8b6e5309e73da9883ef797e89f78fabcb52f1ed1565f702922e00343e8acce5795ef023147cdb5b68bcdbd2033f537a405f6065dfae73f35b88007708fc20f86f4fa8f727d42e371fb2f2a73bc6fc05828750803983e75cb0b900209cb9e4eca5c43c24abcbc239af7310f90dec75d5dbf25ddd3bbf85fe76b600e81f88fea085a6e792cbd0f6605f45b09e2f01e4be4abf4ac06807cbb8f97d00759e9b1768039e73d196ef04c34f590cadf694b5cd0b27bf80d135d8dbfc1a00083fadaed58450d25c13424cf12f2e85e725492f49fa67961476edae0828eb0017cbe212f6e0b94040bdc092d6dec595d29fb55189e2489f142a94ef0f1dc5003833eaa260b838a8912320b73a15725575bae4dad325764d75b264a41b156c00e3bf8827649711154fabf328fb21c5668c8f579562d71b5df96d57e898a2bd00a89a191dccc46084a53db4df8857b6f6a71a6e7daa6137dc3a865d6dd8d73400b91bc846df0dab8dbef7d3d8e8bbedc23103e4cda08921b767bf592ca56ca5004f06a0fc4e9c4ec130c74dab2ffec1febb7760bf7b697b5fcec07af5177faf0070063c2c3bd6c7853e1eb0a7f73d3d8076432373f86b02172286a032a032da00c037724066aa433773ec56b2dd834337b0313cd2d3f4d4c085930c863cf65c00be1cba6f51fef5ef7fe7fb5eb9f1d1dda7def5f63ff8c0071e7e647bfb3f3f00f0937ff8d847ee7de5bf9ffd4f89c4db2d8e5fbceb6d60cf70a52b8ff7aeb40096d0953d086490f4b4b4c07df5c127def5f4cf3dfddec537befa1d8f7cf885003f7fbff9abf73ff9c88b3ffecc5dfffac9ddc3afbf249ffbc7ba27fa7671c60047ff77353f2174a70aaa8e88e9ca9bf8dea3f2984abeb94b40632e16783a740036b81cf12452e394f1a8fbc61e3cda69e160d1fd6e75642b6117734c07c27400a7fbd57a221d27baa6151c15ce51a744e5775e7bc74b0a6cfd4eb705b63fac005ae5a12c5634bff5963a04ebbfff7bd39f6ac4ca6f355c4c7e4cb99c3c56ae00df1a73508347a3b58f63a7e6e20778efc31b104297c455c6c58295848dc660000cdd5bb5155e47c6793eacbbdfe696c7d471091cad884303884cb30b759e5600ddeac4b45bb19774bfda3318ecf478625ce8ae3dcc759fc52213051d64cad700ab4eeefe3c72ca66af6814106103434dfcb5e0d48979b44dc57ecd2a069c8c003def064ea6130392d88796bedf893112373aa0e87441d18de9a0589a42ec7600359b862c4005e781a06ba0a9fb49d529ad369dcaeace01a8a599ad3acebd9e008cb354e97e0d6aa78cd23e2587bc0068353db0ffb4f2c8de85381f371b7edc00ec5aacfe44b08a81d546c5b9fba7d50d44abba8130da2be43604955ef461b300c9410f1521c4d36c59562f09ab10c1e136c1afa7c2dcfdeb82b710ca84da5300bc5fc159ba91200bbf16ec3d601f7a06fabfa24c897d2b1c731040b6bc10d800877e8bd87b2146c286070a4f281abce668ec895d21f05c10b8a0c20410842e00c1f9420d4ee80348bfe186d6a2d7c42226d897542b77ffe736de97505cb3d50020327e05942fc8489a72d0f7808c47283dde2b78c832af61b34c48a414465e00e178fe5d9256bc48c158d4f6b144467e03f41dd5b0b5dfa7228491c23d0af700cc9dc288b7547b21f4e1898acbc539b48bb33e5c9ccbf4642a40b86e7a223200a4c8901e5ba9a6dd34197834a4472912f40862a6bb6e564b62f36049c4601300dcba07f6c263de1dd663422282c5dee65dd5dd5a4b843729bc0984bd7b6c090003334625c28409127519abddde9dd52581dc1ef529a4cf35f37ebb40c2dece0015f6da5c91a53dc2616fb72f223b14c984f61eb2095de81e0a47878503956100c0657640e60f6341f61ec71a8895d29505b5c3771d02fd6e0bb4ec1a0486b40053381d9cb0f512496121c47599f783f6ba4c0823ca174262da8fed224dd23e00497fd492c298c1153bab72ff212cfa729a87ed04f49313ab415c29fd53d5960061c02d830838b8fc80d3ec4e07837d6cb61a962b5a9dba3588a5b253ad986a003df31516c4b81883a9c61e9c92e6594bc385540e4e39f63cee0dbd5f20221800c6942ef763e694be3bc54d81f7abf54d4172c506b9bc0ee36954c403479e8000c7723217f364cefb587932a747a8854937f7fe52ae96bc4ff084e1842efa2c00ea99f77b56be4b9b3cde1f44e5fd019088c462de5fb8e41ee9b1ec942059e100903caa01e1256082d25ef612beab7bd12df4b7b345ff40f4e7b6125b4ed9010042db371e347a2f1e1c34a2fa0030da21f8bf4c1c5fa70d78644f4b0c13c1f000ef2d86567bca4a7801800fd55e0d76728a5b33eff36a5213ca3d8010628a3f001a0b4fde5b262392fe8725855df1156158de1a0a0b9c734578c608c3d7e50b00388e2ba5bf5c06848ae9136e8422c6e8d100a7c4beb6a7c4722f0b971cedf7007476cb94eeb89c6133a9dadc7061db633796dca396147223755c38dcc5f6b100314a52193fde1f633b56eb7b44eb217e7d7582f9278533dc6fcc86d8f922910086f0e970bf171e4a9d18b24e0c8fa1ef521d5b6386bc29bee90426c0a2831f00941b946a7f173472ff02224ce0e5fedd37b9167b0ecb6d00436e48a3d9c6840066e006e131540b8390ffac00ff937f5610daa73a7cf0ef0c424c0f38a1057100ad2060d793ae0e82a0c56e13d29bb97fed86436329f8369944a530a91134d8006d4064602ba3f00c20b479a8216a71c9416490a9c8681e4c329c64fb2dab49002b08ad5d11ed8a20a64dbbda419b76e17f6257db3eb55ddf15b445734c88a100626cb985d205eb206637829428f71fb4af1a817fdb4d35fcccf033ff0f50f8007382ac210000c1095e76000001611f8b08000000000002ff35514d4b04310c007d6dda34edaa17413dacde0485d59df5d041c493fb011e44f12efedefd55be00cce040327d69f2f2920e90103710db030324663ae83df8292d03f6760db5ad006dbf886d3b1b222d8cbc848c1e498f0c9c8c20d36eef893b4fb89978265f5e00ff398b5f0f08411b82697900ce510ec10584608417483394903a93c98a34c90053c2e4503104def2983ca86560a8f6584b8fc97c88da51f30ab70d92ab3779004259e1ae07a300299152446bee21db923aca922495a76a1de6c5b2ee73382b00c92b7b695279f63184965c9e9e905d1bd95fd05c3337504cb850449b76f2ce00f5642f10898dbe65a542f562d7914b3aa34f4e7198297a144a48ae7d0c26a6000b2e55c9e7437c1887f824a718137e47df650ece6f14b8990ef59405d592b5004b0ed6acf903f2373d609b6d7e4012fe5863b979c182ed16660ef304a3992d001c5676af2b7c6f8290d11baf475c1daf8e7f2d935b133f020000d6421a4e00000001ba1f8b08000000000002ff5d52c16e15310c9c6c126792d09e90dac383003b62a1fb24d805214e3cda13485cf800240e08893be20ffb5330ced24a10c900ded89bccd8132f88613a22f2065810a3c9a13c81569119c0778f603cf1f44900314fbb6192854d3f1137cf24f9f7c8cf953edb20bceb6b3fee2e3c1e68c3f300ed1d32657541086c0895e519f010e52678194a2abc40da43337a69750592a00051b184187c9b26256b59270a329649bb5c9671c47f366da7fe2139d55fda2600eb82446eb09293c8e0152476513e45df2963e01d1b3150d65172441fe4bea500277b13a58c4985d88c570dd1aa97ff119cf16615f2383b0aacb6064b0758aa002f5ddb7fd7efff16780edba539edd21c90523d78721206eb8b7b90708f223e00aba924b597d4b5b1aab4e43ac52baf46d72dc39b8faffd7c9465efb83d50e900cd65f8bccba07724a386036acf5ff6ab1e39fb852841e4bb8dee875c0a8df9005c3e3bc4971d629da2d8b30bb305465a9716263c6fea1bcb8cefc28ccc337e006d3e1539383ea5fc716cea992e5426b60b6854d87c18f519c3d876db875180003fd9749d7ea18bae931ee6114e24bb8755ec75c68f63884274e2ab0d97b79700b77f00e0c142bd0b030000eebbc347000002cc1f8b08000000000002ff8d5400bb8a154110ad9eaeeea9a9eeb9a9062a468278d55dd07b513072dd05416153007f600353633fc140d01f30144373c16ccd050311ccc54fd0737a66aeb2183800503dddd555e7549f7eec490cddbe443b12d993a83d1ab1ab82cf603d7ef72f004ab6033b38a6ef6032e960618b49895b7a14ed0349680f25dfc0e478c8f023000201320c9b061865904d178daeb8b8225cda5cbab814494174f1ff15ba27590022212eb51a5b3bdc5bea1d608ed430b8041fecbac8155411442e33c4a77097003ccd5d9be6b8e601c01d52632c0b5991bd1003bbd6c159eaa6f38a51edd04b00b5f92b32baf191cedc0556b97a50949850445212dddb11850478257ce2b033000c1387d6d8d84d749a6391b0044d867e2d0f5d623fb0c040c08fe26b79bc09003a25385a1fca2614bd2059fdb8ad76b6b657707b4293b4cde96c6d8e822580003e115daad4a52c6d55fa52b4b72ad9553abda04a98a6a9ca9356a5424b8d00007c27ba96a71b883025ecaa9c2ab98dbd3cf3fd3af389afb89e02b0675258dd0005d1342db20386ebad1d48d8a124c37c2a88caff4552495247903c977126c9008da48224576d78c0c95ee15675cac939ad6e54160bcc253b2334efb29d272d002b705f4cd22a638953f3acd8cba65846c86bc96b797513793d2362d645f9fc00477976f3a27c2adcaa5281502a10de483d6a2220a41dd49e5afbdde5307017007ad3155a75c4bf1567fc469485709b48ce45442f77643ecfedcc45924492bc009f48b680b38897433a535ef82fb8fb8909b1cce4b8a61ecf507e9829bb922600da139c61aad9272a986aa3e5154aa41d493bae90f8495633adff8376ba962b00b4ab7e843063a34da44da4fdbcd0561cecc4ebb40d162d17dce10ca81e315f000dfe6f808b96d6f273cb272505308941b8fdd61946240ca6e6e724989bf36d00c4afbd8d3ed974a700f8c31ce9c68402ba62c6616ac3cecc0a8703d887b57c00df0f118824beb995f3a7e74f7f03d71cc7f99a050000f851a440000001571f008b08000000000002ff3551cb4e03310c9cc489e3a4c005097a006e482015ba00bd64e1c0896d7b40487046fc70bf8af1ae58c9de8c1fe389334042dc41ec00000c9098e9a08fe0a7b40cd8fb2dd4269bbe896d5a0c9116462621a347d23303006723c8b43f78e1de0bee669ed997b77fcee2e901216843302d4fc025ca31b80080108cf00a698112526731599166794a981c2a86c02c8fc9835a06866a8fb500f498cc2f513b6adee0be4172f5215b940d1e7a300a90122945b4e61eb275980057cbd69337d0ac6473724d2aafae5b68c9f5e819e9b491ee05cd45f2cac584001b44b4790947ee237b83486cf42d2b25a937fbe05cd2057d728a69a1e851280021b9d8319898aeb845259fabfe30aafe24a7180b7e475f5e0ece6f14b89b0f00f59c0dd592b56b6eb459f317e36f7eb1b6d8f26224fcb1c676f38615c7adcc001ce61946335b39ac9c5e37f8da0521a30fde8e589fd6a73f333071da30020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001242ab1a2bd6d07d8d61ea56d85861446349e52c6b7c0612b702cb1e6db6ad0b089000001000000000085864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a6312e1f4ce0bebfb68ed9ff8efee9b19306213260751a4d2a2f557be6f5e765d4360000000000000000000000000000000000000000000000000000000000000001181f056b799b412069176d9aea82249cf1095821c6371bebd35aac351b9253232b7fbd849f92417221e567c919124b68c52f08deee4ce6c5d7ad71ba349937f20f38ff6e186556c8b618142d34a1a6358c33d48e989c264702fb21a36b3066ed000000000000000000000000000000000000000000000000000000000000000002b1f6aa32fe7f19e158e57710447737f502f846e394cf5333f0e02323d0317f00000000", + "13b17ddf4a3709b147c1417b1622ef4cc79a06616bd9ddb158f11ab563d391fc0000000600000000000000000000000000000000000000000000000000000000000000020077f77be9c9d3dc51cf83530ef80fe5b31a9fe22a9137acbdba17f2525635ae00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb30000006005c09d13a998cb242b57ffffa79d75aaf2a3d081c22ff85897e7ef9a5fcb8c2500000300177fff32c72f88b411cea8ef489d821589b24a0f219ce7c0e6f7cadde418540c0000038017ac40ebf9733f6e07e35d5d086b61347430f109e37e19a281d9be6a97793550000003800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000070dbd9880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000caf43802040e82dd5266aebcc7921e1c5244e3260ca8f1dfd8523f838226e43536eb73f000000060000000100000000000000000000000000000000000000000000000000000000000caf4380000328e73bb1e2c01a1559fbe837ae5424fa29dc62369b3a651436a248b23edfd385129ae734059c90ea1aaaa58007a2f1c92adaead59be5fd3f57b6af2fe8d648243056906b9bfc3b3c5e62ee221aed10f8163dc1ec55d1ccc6b295a2e1599bd369000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c5f0000000040000000000000004000000000009c5f40009c5f00009c4c405d15342d76e46e5be07d3cda0d753158431cdc5e39d29ce4e8fe1f5c070564a0009c4a0000000006999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f82b342271eae42d0afb6182a99d3ad876530841583fdc0845907de3159809bc83000000000000000000000000000000000000000000000000000000000000000100bf8896e9ee636b27cf5478406ee1322588136d3eb980d0bcd4927f541093a407c2dd7990f8f46e2c2d6369734265adfc029f4d5cf8ba41ee15e0e277a76a4f00000000000000000000000000000000000000000000000000000000000002840000000001e7b86ba1000002781f8b08000000000002ff5d533b8ed440107dfd00b3abddedb6bd02b1c1ec0140033b2b812d206476362220e500044804880b1000224272240284448e38c45e0a5eb597115a4bddeeaeae7af5eab78333f6024e00ae801d9c6fb941ee839f70b5fcbd3843237bd9bf52d97e5db05ce68c76977200a9bf831c16aac22dfaeeb95f22703fa07944d5e1a0c6570a3b23b45b4c19ae006dc243e02ec21677ce37685a4fe74e669082b2c0ce38a347672994b84363bb00d97691a268e36c7dac6cab46e2d1e697fe86387590b8328de03a34d111dd200077303e27fa7d8074656ad026d1a5579749afb69fabad435f19e831a9b02fb300755cc9930d492f1d5c10756c7a027e46dae2f96cfcca2f405fcb6c8a676c3e003e21915bdf9f5b1f4221d15008b64751761b781f372ab4c408f1f111c41c5100bcf0dd174da0e6c38da43f28fdb1d2d7e360291c27e66ee26db23cc5a9ca27000df8e498b6918b0f3861c6461799ac981de9bc865b93d5980c342193948f6100a347328b399044d0c89ba2625255d68530254402bc415400cfbb67669a1c3400894cd85b2631c940950f18b67847566d9f0bf75aa5f76b9566646d1a6226c600d38c43a9e5fe1769fe2f520a33bbc4775a978e6d963a25f0712550556a81520037f3f9998a18128a56b93a4e590bf0692d00c19424ab9a34586a31aae1a95a000d6aa54e463a09e344a32f98d46861ff88e354c18ad7f6ffc6490858f9d50a008471b665d40ee9135d86a42ebfdeb8b4037393b4c116234e9ac4f96a08d55200e7bb300f3f08e7b4037f2f5ab76074608435bca887d8d3208a97ee1e8c74d200e900f35707b85bd73ac004fc251dcd450d12dd2511bd867ab52292f41ae93d006ef1f382e368aae3f305a7d7a7d77f01e11697143f040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001242ab1a2bd6d07d8d61ea56d85861446349e52c6b7c0612b702cb1e6db6ad0b089000001000000000085864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a6310d591aa2fe80d90f03d827a459509800620a76fc0b660dc8e2b5679021ee159c0000000000000000000000000000000000000000000000000000000000000001058510d75fff931b096071fa420119e84ce188e279ed346f1b72e34a151c874b2b342271eae42d0afb6182a99d3ad876530841583fdc0845907de3159809bc830000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b1f6aa32fe7f19e158e57710447737f502f846e394cf5333f0e02323d0317f", + "2040e82dd5266aebcc7921e1c5244e3260ca8f1dfd8523f838226e43536eb73f00000007000000000000000000000000000000000000000000000000000000000000002400a260a24e741dee0779f46a4dbe9ce165679538b19bd479dc273fd36c1d01d200089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb300000070267c9d8e39fb76d9818e035d50275240f19af4f8e26f554c72850ab89ccb1bbb00000c0003dfb6521add64ebe0aba3fa170a1df8486528e97c76d9a53185d7bd4223033700000c8017ac40ebf9733f6e07e35d5d086b61347430f109e37e19a281d9be6a9779355000000c800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000070dbd9ac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad2ec2c017f349a87e050baec1f852d9861e73bf3642bc147e66e2e0ef4f4e935f6b334a000000070000002400000000000000000000000000000000000000000000000000000000000bebf73001058375bca6a9d113ba2e3b2b9a508dd2f7f8d7e7e49d3bcf2248153ffd4fe880030481055310681e2da2779832bb923af077913af6c50d7e407f58f6a12dadca88141571120156dfb289be1451d6326ba604b7031e638da05b352ca3255bef23ae1f937e8a427d6b90ed1573fb1917c967d5072b18ad4076754ddfb3496f01a2ec000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae81d94d3e364be1c101722e9427866d16ee61b7cb671afd7ddff4f3af18ea87e127c9afe2cd368650f08d0fd6ab54aca59eca12e47ebc453b81b8eaacecfb5199c81c3e053656a1c19cd40e006bec24248cf9a9d91ce8ee2b0f95ea33e7d6fe769b2c5d7c11f624a1e6f33d28456255e87ac100d3ad8ef0ce7ac5f6f00228f05aae1cf3dc2fc13e0774ecbcb4741dd9830ca531881d8c22c5af56f2967962a9d810d9c00e5bd66d6a4ebde472103d7d4ad144f8d0943aa217579ef5e4e00c3361e9bc12280b733c325d6cb9fec7dd0968fe4978b343fba87a75950db47e520e43103f40ed057d44a26989a3a85018a2f923f95d10b85b0b1158db6d7b0c6cc4947f7bc2a2a8ad6c66e792decc43f666b829ddcf96bcc11194bd169baed323298261374a118bae8ded1eebba9009549aea5b2340c435731d91203d7b5be18c68cffe31632a3b57d7dc0797f0b30c5091502596da100d27aa7ae49f8ef057dccd50f253307d9c91d9fce0093e40a0f40950902e84f6a480b85b37d61f55ee5949a3c6987eee35f693de711bcad4e5e927678634c779d2f1d6a0665e6763f7c9bad3dffe59b0744c7b232d367fef3dbbb08ebb339b837da75a718834ceb0ff823e0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010e042e1f063bb38812b430d630599d195b7b4ebe6f2d8a0de1b3017f07c3e63d03048fa00aceca888fff1cc39fac455f84559fc5213cf794c77bd3592097d7463c118c8cd1773ae3f32f4a3a7d90d3382903ab3b6931b6672ebd08cedc3c61b0eb00d9c78281d640cc0ac5ebbfd5d9d48f09456256ced54beca73d73317fced1800000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c765dca33bce4a239b731ec479172977d25a0ebf047fb38a5696c6ac980ef33be9d2c2d786dc5561edfab595c4d72530b8b2ec813c6b9a4db934e2203e3491a1474abb040204c97fec497962a33e5de0efa2a25747545fcc8d2287432d1c060293edc7ed6ef89c8565bf108ac75a651f08e1fcc913d845cac199f98dce66b796daee32ca7bf576f32e078f71a46451eaeb225668e85efec35cd08300cfb0480dd72aacf99b97ac3e003ba9f414caab9c29234f810a4e0aad4bae77254d53f84283286c079fd248c156c81225cf88070348ff8c7dfd33845a8ed4797773ceaa668334f5ba28267b8292beaa8340b1300677984aeaffb17aa250429a9fa6d574f7668401ceff5ec377d86cb3d757c8ea2b947c98d5b60d497544cfa280d70f2bfb90a0b9ffbf7fa73be7eb956d38fceac9aa9783d2a3003bfc959848423880d755cf75b68179fe79d594962be22798e6da14cbbf278e63441edea91e236b27187eb880f5dee3a449cab52e0a51f1f9afc9a0441da0f32be31cdd62c2d3d5fc7d6ed98c1ca10113551de4401e1a50d44710b7b87358b42629560f5e3e88e4d16f6fa2d9e2e6949b0f5c70ed5c03b88fa474b51af2c4c2884f8ab746949045bede60000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001109a263e790619ca8e1c37b1d442edc25ee5fde01a85ff44b823556ec3ea15ec03072548e4f58c0433fe28035a3431a3342a076daf3c1b3ef319bd509fd54fe45030454b8279256d02a496db826d0295f5ac89a6a5a305b581382a461283734dfb2c9c7d41760063d52eff8adcd06f1567f7aeae8830640dda01f8a94cba5879d40000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f9d6502fcd0fc2747b1b187a54dbfc21a5ec707800e11a7956b4cf5aa36633e3148bed074ae80cf7897642d582d2b50bb4198132b5af4ceae59cd34d4e4221c06a0c03330dd2988eb420f88f342ba4607e11349e5a50aa6449b2a648afab1d8cc71b977914e0a500138c6227e9266a1656b44aa168c6b79ed375dd9245a089041b96a6d345283929194337d7744d071fc61c3858655f6a381061ee3e2580c77cf8e0b937ffe4f7c5ce2f86a4d596b4ddacea912be832b43edd0f183cf9189284aea5c1f7f45d783ce4c34472c1e0bfa21da0ab826751cd2e2b9f4ed16076f6062bc909fd90de26f0a61bd02a054c1bc4cc9862ed512e9234a93abff324202eb53e0ccb7d19330aa6e6cccfb3e5ca9c605c1ba530926165da06f9c9d20a934e6668f2b8162da244320166345d74dac4d6591068937be640394c11f01bca657fb4dfd46bee872f169e391e00874fb256d77c8199ea0e1ac2d0459f2f5e054fdeb4966edc2e2f0e2f88971f27ddc083e976a1ba121a947255e7eeac8266549be1815b56252dcec1a821881f370e88147107a56562a0da3b6347ea2954b0afe1b287c94e3961d921d0d7afdf4d66dee669d7640cc811f6f1dd68d723855786506460000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001014f9761fcd38005be14f1abb0d365aea66809e084988fa0227dffd54418d78f0307affd338908a4d76dd8f5efea6cc527870a2e5deadfe633faf156ca1bd6cf4c17da25d153219eca78eeb29c0a48f2d7c046fadd610eb12088b36e5c2bc437722d5bfa6b461ce8a65335830351bca32d788af64ef7aab2fac75663c358f11d43000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000856b06d530448c3d37315fa461909eff26f3ccde4fb0cce73588c583e467752d98ff77cd41bd01d0f635fdb3834af3043f6cfef6084c1ecfbc7a99d5c66a9eec79111554a7a34f2d3bcfbda81dc422e5a1a32c58a3cfb5fc5d4aa04ac2ea517bb6c26fc35eb6c61729f5ac884b574c0d1702684030c4448dd19708d518f3368b4b55a527fb0a1f110789afdee23ec7ae62b284c5d6e466c960d768857292b1007031014d8e18cb5429223abc59dadf8f6717c6dfd481771f07eb2564d7d18801bc289a2e5e6849d3d6044be32f272c97f641f5c528926bf2045162eb40bf5d1abf035f790b405c51d9dbd4221f1b5b45afef3a6cebc87b31bbbda467aa33e961321446379e205aa85a6fa68cb3c418a9819329745146d8b7f7314aee8e1b28904b85794d83e99120a1c3ad5a110ad19a84263f3473c6dcf046f0f0465469bc07a6e40beda30fdf6924b27b5fa2e1f83ada8374e0967b00e95c072d7b49586f142057570bdcf31e67613062b2656bce0cb93204e30ea1f38e00d2aaa55d8debc757de657ed6b67997141c0329546711a4103b8e03e04a5aa846c7a5dfaead613da6f8c48ba29d3bafe7976016cde23c92d70d2b138298169b5c529f3f88cd0d290000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300112c02f3aaec8a710a5bc027d6ff0b848b6ffe5d369a04e144868c942738ca75c0307f54070a6bf248e3541031cc61bbcb1dfaea93e5371036d3e114cadb6cd47241430d179fcc9fb18cc9e912347eabefa6479dd7c5633ad8c9cb0a5b57c4e1852173f151c891ed403ea29d62c5bd38c62f78cd266fb89d3dda5a4f029bb90ecc5000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afca58f7f354527e902a1ca1193f20e16e8049c636c5e19a0f4e3dd2dd3b5ab61f91bd4fe0a030f2aa7f940fc55c9330536b5a5bdaa6df1373f2a7be417331590a0093bea3be4fc64d054af6f6ea01bf6b2e78ac4e2d732d04e160294f6166f7909947faefae01bfe8ec4578c72ed7477fbe9d1db1ae8f2741485c4e4853e5a8a657696ffd9479d47e1d7b11c82d2fb8b57e40bcc72c7257baff8b2c44faec3a07664f1d9beb879fdc502df4770e47cc3008f21543898cff594e09a11a294a78600d9e3f19246895db7f0e072aa1f71e238e0033dcbd90663f3fdc4229308f629d68490a59e3fa8f8143e2595cdb8ae39fce571b63014af62c1de0a6d9931912ac37d44d4f1635f65073fe94538210387e0d2b0bae8d2683beba1ff0ec52ba35f1017e1369c94153dea4bf2ed1eac6382abdef0d0fcf1b98d245e846e309e1e074fbb4248d0e0af98071fcbd2d9b870840693729ac6ab7e08182013a9cf344f794456bf773a39792b17044e46904efad30cb476445e2f54cc141163f4a2518c42918cb51c58d9a083536eaf63a39a0875d58ea9087fe827e96abc80e02b4999f95798553155cc9c9b1db72f798f7b82812359889b352028842b7af000d7d77dc0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300121c358c76ff40cbe81043f94003fe6ba1495cd5ddbc987b60ede4f251b0c898d0309487ca7a545bcba354a8d7f053bdb6c9aa1e5bb70f07d2674c7c361aed4e13405a83cca4809011bc1113a21a983a2682e8cbda81b0691d7d848e45222a04d38002d7310bde1795eb47b4f4ce375fd4c5ba88ee4f1251c462d7a4f78f6f4622c000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6f959ce24a7fe36616c9f98e2008f963e1acd43d1c0345dcdef786171b7fb12e37abc34b8cf1d29b5c0730b17bba5210400b1a79989977d59dac54ef1432005b41c46280d6b2fce26f36f671c9c81d39681cfac94370d2896a18bd5e9c0fa6495257c3a79b2aedf482ce2ab4b0324cff23dfa584a92f3be893a5c7b0d30fbe0419b4c855c1fea67efe60dfc6c23664c9306490ae20678c768f0c45b25d41dad773986cd15c591af3dc4c40dfc01d12efb18185362195b401a10cc8248a3853e189e378305ea21428f5bec90055692f80a3f92e777ba7a2ecf2f760e9bf1114c65b1a48ec76df91847c80a26dd0de1b7c630ac21ecee6e4068d7898bb004a8a982175b342d566e72bc0c8a7cd4d03c5f514249b12a5cb307f98644748e87eabd2b6904c3df93a5289e20e113bc5e5881886e4ffcf62596be809eae3202733e9a565e32bdbc4aff7b33dc15ea7266da1f9498ed22328a556b6f5bc2436a3c3dbb6a404e757ad6deb0056f19c83d9bfde27a36ea964e61ca537a074e070ec74698dcdbd9f22193bc4042a4f483d4dc9f4c858b2e0f4636ff60c28a9c57ca948e7d3122310852bdb97a9f0dfc17bafbd7557bba97839eab8fc5490f9247c3d6ca2d0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010ec60a8793dc8eec30ef3ed63db5ac88ca13b3e48343ad4829b8afd81dc7ff52030a478aafa957f485a71e5e762759f39ecf75e7f839ebe81673b1a5120e1dc02a1793173668766e77f63b21debe7594fc397d54314225201474a326fea8f194771fb93079a8c789217e27b3a799e524e8799046a7aa09f2aad6848d48449562d20000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b047ecea93dea8b89ea31fb6c7467173dc697052cb50c8cb40dadd6054fc5a5d64dbfc2958fd919dbfad7f37fa7231c70837e83077b9600a685bd8f08f15795de09d755b22bd73cc0a4755096414e51a427b9fd299a992800d01e774011d05657d0bb06ed60ddb8779ab31da99b5bda37f48549ecad8f76b07518871d26fc589e644f709bf25117935b3050b692b83b7e72fa8fa92f5bf040cfff6e4d4c568d66b7d90b0ae527e2adcf1c5754db4a027617a547b4ae00f4ecfdda7543550db3c549d93066260c438db86a7ec852932cfd5dcddc4517d601218f5d1b34b7e3095c3df2497a725a87c4db2b7fb16afbf6b4b5b3a8bbcbc420e806008ca1a43de7b9dd657a8b389d900ae1a68665650cf42866ae69af6603525f0841127228158320ed2b33e271400499e1735e4c402d037d2b571873de2d5eda07afd5b010bb7e66528416ead86e250eac92cf4991971fffcbe23ad6664847311d13eb1b70f87b0c1252ebc3b17a0cab01eb14c5c71bfbdadfc4faca7695fa7d1d23b75249c461e2c94bbe58be523fe0ad25e8d2bcb999f718b928d37af34b0361fd94f2f9c4cf73fcd1e14514539a606232b4a55b936f06399e2c479d27aaa484717ac61a71b10000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010a4944980af9d255e98ee81c66b7ca7b9726ece898ef89c30c2acc91855f4c95030c3e055ef27aec23d99660e56d67c06102004cb20f34576ab95d86c6b8d167352b9449bbbab26821e98364eb6586a8884e94addf42e843fedc31a9fbd7993f66098897e3995d39c989d48b745afe2fe655a22aadf6d01d2dba52f1ec0f0feb9a000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a613ce036feb754534570fcd7b5963fd3facf5095565dcc3226f6442fc53f88b103a501e4e3a2db9a24ddb19953ba61fd44315ee3317031fe74b6a8cdd03c86cb34425fdef06001de740722275f17491fa020a6a288617afa264d64af40c0dd516d2102e5fd4cee1c80778f5edd401b7f6e134388abbb90c5cc45917023f23829678a48961626220defc63b49cc44c279b4730dd1602e0f319efc9c3a40833abe5d424b52f4c8baf0ec4bd8e2e2b27a8b3e08b547cd1f05f6b9072053e0fc7d31088b08662a4876995b899558838017a6f8f8d43643d3dfd5a4ea8510a494ec9746e37c27f0a4b831e5b598b110f4f176edbf5ac7f337dbe0f9bc302aef7dd351aafe7c74a7015cef1b6a7eba90311ebc143de65001709f5fadf695f7f2fe4ee4c994d64a6c1bda88e91af4789024448edb5502de6893dcd5ae1a170646695ba356fa202c502bc76bf4fa341c091b4adf951ccd21614d78a5b39f9b71867f2c2a9f12a0f3212b2342ab819155654710338b642cd03f627f6445f0f4418025944c0fd8d9fe27311afe698dc6bef6eefc80b007ba015a6b1d3029970f2ecc81da9e859e2147febcd14f770cb80d9b36c95683f3c22e164aeff79f15f448f56bb480000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011c94158e554bb2dc75e4572ce31654b02d474acff0334ae9d17c182c2fdc4fff030d04bd2d838776b6016ec20e6e61c3054b9b7cf5e38abfa39c8d3b4bb8ecbe920a951a5b269263d5b7868547ec8d89b7b10ea31e5948d38de6e8a3ddfa7074e51a5f5a58cf1d1efdfadfe1911a9b673d244d9467eb1b2f912c8e03c5dbf1f9b500000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007cdcddca3d7807121e25c121ece512ec0d32e6056f920c4ce7aef8bfab52689f2cce63c6326b121a289498df2e16145163159fdcf91e21132c7b6c6d00e631ed14aea3b9478fddca9df22c18098c56982ea7d344298c5832eb1bb2c35302ebad159b7ba9d854517304407d8c5b25e60b288a106e10777ae74a21a5107a5e4ccbbaa3430554a9bd8d2e68f7ae3762480ee63fa95cd645f0595182d62e367ee76cd8f8f5a7c24a3d99a8d292f63aee9b08e8a68b01dc2122a7879acf248d11cccca27330b672e4185182324e41d7728962d0323adb367e636f9946728787a39b7758405e5afb6e8e3c001c89dcab2f8c4ab0fd1f6925bcad2d22146a2b5450114baea182c6cd517fb809e31d804fa0af1085994ab17a8ce9d7b43fd6ce2f3cd408e36e00550e869bd100645a0d25a40bb71de1d0ea0e11f27a5301ba28cd27ebf83d298fec8660e3401b868170b184083e09d554766f2e0030e39791b2cb5032a74f33f6c47cab511c71000fd78fa7a9e1feabea60221aa4985c8f1889e4de0e282b3bc6ddd68c8de226e13b99cffb4e26f63777b8f538c4ad82122f8802d92b370a7fb2fc9d76cde968ef311a80809dd5d9ec050d59ac3cfb0bf43b830caf6030000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300102fe217fdd175b05c861c3e78ccb9f154b324493f4da62223a8f5b5642df9975030d064572208dc60c7c2a2b6e4123dfde2fa05bb0cca1414ff58ea86eea45c7ff2232f4a387e35cf346dc3d5fb49b3e9c5aeae982ef15554a65699eeaaff4a9b40d47a1106ff1ef3ea124a9769d129551eeee1c0c45976a70b1710b9457469a000000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f6f19f3d73f76f24d44853983ff21e30d3c3e19272925697bd57690ef44839d842310d358f968a69336a0b685d9d0aad19c990a17502a3f3e492612ea6e6c76f19ce3c7db3c63ae0770e535e1f5af698a07cf6912d30c79530fd96d53aade0fa7dde71f01712ff88428548c366c06186c6d06e58f2e9f752f578199c34cf596d07ad08eb5e83b86a1af71d5e3e604b924776b86bc88bf61fc9498720f8ba564fc819ca4e761f8bcc888442fa89b7244817770350ec7232f4f114f6945131b53c1e1dd15be51ec1d4186b971f5e0bb1a9dc7f101f1aa4948aa81f115c60c8c19e279b4c61c1bc89818e77d344c664e933a70891b19a7ab41a951c7ee01dcbd0e7014d4e8f288581efdb7fa13ab8134cd7da6ce8fc73430187d04316eb60e63f486496e0d5fead8b73626bc24c7a9e131ec67e1f74c32065b4d52ea96907462175eb0cdd78ecf1ef659d5f77855da23d115b0184fa04bda785dbcbfa6d49125b73041108582df853f3695c6bdac0838e1eb08c6f5cd6839846fae3dd329269a154033dbc274e8eadaa5e2f495aca4f62c4b96fe07d67f5127ce68307a184fd58132e69d4f49a728c7ede1c15e16e62222226a75b48bd30b7709e1867f38c7adc60000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011218ff454158102c2c3d65843e5b5b60661a4884b88bff57b642dd02ef1e6b8f030e220011efcc1de332fc6f1e7184bc8736adacb495a45a2f7ac453577595f4f82514ce64e8f7e303b18b71b2273830e5c0cc9a4c3133454e56f557272735f53b17750fb59fade2591d4541a1e1924d7ecc33e8f40dbb1552757b4773e4039a710000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008af26c7d2ee3a5e21dfbcb9cb27c03425a35da43b550f62857826022bb8c69db0a56c92276d98a8858edcb001bba2666e2c35d0a1e46c70b5769af83d01d5d36ae3c08c2096a48ac5f7b20615d0090e8309b895a0b35b7994435c11621c33dcf3a9ec396c432975541470cc7a5f45a4008e0c85f4393d3451eebcde8a5a507e3f2ca024985023419d72b6b243c9b903cdb6400e5d916a7c013cac3d800f87ee6c160ca4e3f5c031169a7cb2b73942c53d7021c87ac5ae14138c02ea0a789851c85a4b1eb9634e172b98b95a9f2392a766d51f91e4882980c1b0c44d85ac985a5e31ed96605e82d74c7d71ff6de6fb47a609440ba0bffac3d78677b4c2d03e160526500a8291848c8d9b019c502c2a590f0f1f87ce6c141cdaf381a28421678c9a98d5b456bedca987288b52e08f060d5d754a631f94799750b024bdf803f55c0bd4dce7c600339a7cca6ba9d0b88e0726f7723f7c85a2825fa2321ae800f084701834b889aacd17e61fd4426cd94463352c20602810745c7cc86ea8294323880d7c544897fe602936136cbb7d0f9054ec7bf5872f3cf80b129c19f6f4c179241b3deb399c271d69197c1fbdf392fab608475eaf2484d01043f811ad69a2437f20000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011992df5e08d449e5e71d9f47289dab8b5cc469e173ca2243ed7431ade07ab411030e27958f38a3c36765424149b5a3bf330ba7ae5a8af7f81af05410b629ed9fc20d89f0e3662891cf64c1e47c93b0300b5d67d5e1b1f48ffe2432006ac01ef7422947ff55037d1cb00791c177cf99eea68045b1ac64488366b38d381d8d24a6b8000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae0b0ffc310d0160a7a2f3a63cd5702e1ea70d9bba82183d196a4b33b9ada0d6dc690232eb8eaf4d0e2e50bc00443a2ccb552d754223d2facb4e4e13f430e8a9bd568f876971c964e516c133919e0c577c3e6942032d90b1469ce5285c6481e54fcf4cb888663205b72bae05409074d5ac3763fafc3b9e1c7f6519756f35136bc5558c4dd06461c9e48da40e3c39e332974441841d65a7bcc7f7fd0ecdf6d3bbc66c74895f609aab00a2cd869a338aa3ea1c429ae9975a494d141195f13974b6cb6d7adcffc2b8f675df5fab6c94a00fad3006a1a85a1c84bc607ebcad89d1712926494a1e59a4f660d6d018977bfbb0bdfa69122b09101c8f88a25a9e1e7dd81bd6d38ecafd79f5a050c86cbe109875ab59f6982b3ad0d34bd00b52c75f3f0d894241e5ed885a36191a5849731a7ea471f7dd2f6249c5fa158740edb5a4e161b733b01131c6763dccfbda8dec41ec9b85f57acda40799bd64412a3bcf1a02ab2c70a4705bf18d73c98c21a2c92e9dc277f03eb98c2f1c0e7fb020429f612a5a34e73f3f857f4c7986fc526a6ed083e9897fc06eb4a1f240cc53a543b30b6b4f5cd3ed2ed15d3880db3833afaf9b5fbc3cd89f0b7b8dbe6a7e88745b47e75d420000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010ed197a6fb65ea2fb488f74be042abeff45f8002c336388a7b05e260e9accdd6030f62d4c70c6601ca731742c126b3c9c51e2adcc99bd46764a3f9a1d213d17d3d22ecd7f66bf6a0092781165bc44814ed8fcbdc975231c7a036e039506e024a6d1909e8e49c045418061c6d8c42f8383933794e6e67f1e6671fb59c89dd046ba00000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2b872e617e66f16a4ed02e4778fded3fae538dfe63c876a2a4799f44b5a334ceeb77caa2796b460b4ad6e00e73f5dec055589a1bf41e4ad85bc45e4e70122f6120242db5ddcfbe6f675dd2aec5063a694932186684ad245ffdc3e26dd1f4f1c41ef0b20a7e7c9f26235cfb5e0e174f1dd1250528a0d323260fa9c88e74691409c6267c37e23dbd9e486fcc4140c48265b95c88d370e8dac6e2c8efa0957f844fbc5cfaf470b5f77927987b1bcb726b07c67da222a2dd9a5da266c8acc41d129d2cafeb3b952fbeaf2b1692341541fcfcdc4cc51408db9f56db1cad3cf999724dcc17f77d84ab7fb345be11dc1bd51468e10d5585f3128c099057f25b347a76adb548cd7509cb8ffb02107f7bf2ad8d183ab238d8c0943f8b97dcff3ad41d00fbfaccace791947837190f652444f2bd8dc4ca56b36dad31e15108a8606930cf5af2c779138fb6541053efd35a7a4071997bebc73b2c6d318dae6ec1c0fd6209dec51c4bf487d41fa74174bea61413145ce263ed52ac2b07cf2874777e6daf3afd5ba8f555d737b76dcd26e687b6a9a4ed704b6e3718726d09fd6a45d581fe3b7a89d839e2feed6edecafd90661348ba0667a80332b4c8263cee4002a7310a850000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012670f7d093f08bf0654621ffbb9f39f92af9c66e1d6af24b1a911d48ad505703030faa82142f3eef4f07390f7d6a4b98c9c7f2cd4b688ae71a8b95408ccc6402ce0866857f1af17784e2c206b6502c9796c8c00a6c0440c94144f63df7f354181e0eac875b03c3f82d55e6deecf6044129f46091bf904e0209a741d7234cbcae950000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8f18d5399ee1c98873dd7c325cc11d5095a356ab407dd2c31adf7924105d24856e93ef4524d5f9354f30f67c12cdd4609406d1689389ee2883661107d281be212aefeea4b340d72347dc9849be08e1e54787d7c76888f0ce6955b11dedb0d40bb4b53887c2697ec29f8dbc4c60b10e6fc87ae54205cee7a1dd7e25fbbc797c3debf8eacbb2dbc8c930155973d42941852a0912c23b644680bd13212fdf5cd24e649ea81afb40b94481b58bfd3a1b4df3b0493b1a92d134740dc88504d36dde409de4eced36d7619adf9f1670134703efdc5ecee28a3468eb0e61076eff577ad0c6a5bbae566c3bead2b3fab1faef367eea3520eab649a81a7bc66b9202bee41b5af31216f6ae4221ae06563b856e34f84b0126a7cb8ad24320ff0986f494be42da718c6aeff23e702ea41a23218298157cf6fb12d31f972f196ca2ec3280958e62ffb6b9558c69564295f13f65ac1382d4d90556500f1f8ee4e1c4c12f361a5c21b36df371b21ee01656009cd029fbdb842fd3d3b3140e7973c0aa8dbaaba8620177c8f89d7e5964a1066c433f6be259ce7ff73705470072c209a499b8eca98b789f807a95d8e594ff5049fcd3516eca0cfb3e7b929a6e77540c8e9c997b770000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012dbd37063dc984b2edddf9778235ea43d3a00778ef47b683be54dbabbb1e52b3030fdd9066293c4563caad7b084563b077267c7ae8bb3c148ecf6afc4c02ba37c729326f58d4f776dc433073b7218e76dba2b9d5a475a26fc71bbaecf33128b62a276159ef071c2d5e5caaa0f94cc963bf9b964edf9b3625854cdf681fd88e4a510000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c1be9888a1f045605d653f0c82e1136dd897f0d80aea82ffda2f2d26a597491a17cdb9d584c7cceeab32f9eb4048b8e3a5810d92fcf40a1c7b914612490e66af1209f4e48520f6f5c2d482a7b7e616318ddaa18330c49d293242a5806f66e5481115703cf074ccb0c96b360cb2062aa14dfc1fb65d2cdc803593256431aa5f5e4ff3d8f203db611a38139d95b842685d792d8a82497a0b3fdd7bd4471bd1b6c3e2e90992328886d4283f0b032872ed44691724fd5b8f53088ceadffde4fac9c43b7754886beba70bb3aed0288decd585cb18da92d90a417dcb638d1e8590aa77124de845b0caf15b5332798afcaf25fe0576b85d0e068577a4949484c3eec9cd15ae1284a44e255074eb4e8a5c913674bfc7a1d878c4be655ec94799c68ece038138ef1f6c5145f6e4b48b89cca0357d5d1e2193b1c87cc8085828de85d4abdc3a38f3f2133a21b91ee38e115b6c17851d19935f7b9386402eb3162cec9be7c44f87848b28c7292dcf3196f0ed12f277595e2d1965b3d9a8eabb7988e2f5da8d3a9829aacaf9d71329b6a0f57b952b4252f339a0324e50509923e178f4a29062b35d0920e393663756edc29e578537cacfea869cb337b0d289a3674c8604f960000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011c24de2c9c6cac6e66bd779089c7c5626c14f50aae4485c6c08f95ad1c16e2f8031086d8bfbfc419ae72e96553df452510f4caac82089d9be46d0faccadded0bfd1f5479241fe59d50159c0618ef6ac008f4976665762efdd7b6c1b500abade723064ae7b06650640c98797a9fdbbb0ca0c8c06d465a6ee79a212f805278e3ac71000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000375b8bce68e313a95bea825366f05d1adc4507c44c0e6bc9b4fdcf88b6c8cb8254ad7ea159561a1d806778f00fafa814ef90d767d8d0a94421006f30a4d6caa1284546c674e3e819e32bcb36cb38dab34c8a773fa305f23d1616d906a60108e7f56c2efa4a67a19e8930a69a8944b7bf3dcc82fc992858257d732fa542997c0b04f62b63421afd4aa54f671567cffcbea5fdffc684576e8f8d023b019b588855a5e96a5e9b932ac77339590350a42c20b9f02600a8b1da6d8d81f8f153893c4490e7c5c8534522bf7cceff94ddc52cba560db99d664c9007a0cbc66dee5a06be1ccd5c727074df678f3cab97c9c885cfc6f71a273606866a7d8fd83d88cbcf1b2bb6787162af5edf8ab66c4f8c53b52f9178094d3108703fb240eaa39c1bddfce6b4b99da47da1d43710a5457f96f42db4e09e2b8f0e0416cd21855f7e6e8e0f0fbd535dca599e2ee960ce44d2f2b2414734019c8c4ae89bff67cb6a7fa1be6db8315faa6189baef53dde7cef31673466e495f6b96074230c45940302f7d107e97cc0073258ed85bd4ee77d8a1d3b860551f460356db56d5f9785bc8df49d9904a739bbd989827207749d9b88c5881059cd63f64276d7bd7b33cbc318b5560000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001170c4dde649d636c35f35b62c3ed7568b1adaf4f5b0cb47d02c0f6e4a18fa2230310b60115244a228369d7fc553f9cdc8704aeb531a230b112c787999b6a8cac07105261740591fab93f892d344a2516d896cd3d0d3985137368277fc3bd53761e133f3a39c01a89cb573abdf12c3be1c0f961776be425ae58ed43183875e42e20000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000906163b4acad216e7d005f2f94b44f6ad7d1dc83dd843d8bf570922fd374c067f3734c3d1bfa8a5d7486897eb1d1bcdf988a7c2c6d52c1a51b9dd0dbabea825d2e84df3a50da5c4fc7a5f39242dffb43ece1a97f9cbed4da0573f894a2924dce13853ab1e9597d7dec12e248a03e82d462dd8d47eca028be129dc1bcfbbf148ce99b7354e129f53e739a0fef84ed9dcbece04cccfc9b5e4ff9f2e97794ccbed36b608f7ce1eef6dba6cb277d9680281167316bd6432cd8dd87c26e7c68c0ffbc5402b2f700ac2a7fd4d59a47a0da9428ff25bf145ee5759571a33802c5835e0e622dd0d86effcf409b032df0e08137ad08f03ebb4204b2100da59224609564cd263f48c185763e80da929201ae3a6833caf716cf70fc8b964c0011a0ee31100c2fce38864eba1410a5dc353bebaa4349bbbcda390daa3b80e984815142b7ae01e8e076c3f8dc448cbd26f8ed612407a79fb3667da682480c76ba312e3dddb712f464e0b9390c5a584fe88aa459377b01743f8c2821e33990f62dbd99fb1ce43bf1a3dd5ca72bc295592f638957fc01108eb6cc42eb73309a7bef59a3036da47f98dcd4da110635626ea2b71350ca991f910ddc6362dd5625fe7f7a9c40b260fa0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010efb0ddd8dd41347b82c00c0f34ede9eaed733308c2c3d2e60111eae67033c6a03138760f5e88ba59ca5cb388655644e1b8c089917b616aeedf294baadb3ab52ac0513343e1c49ab1a81d8ea230a87f446e7d1d1aa93c9c5727cd8370a0abc109d1cc85233f3e40f99d5e55f711cf3488bdd7fa378133d4b98cb070421ae672ca90000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c4236687295655c9947d4ea807258ac641c85ace6d5edec51941a59ef56568408e28cb3e901ae4ef1f9a3a6fdd1484a663e95d20cbe5bc07b16184288c3442a4df9b4d3e9d5b42632757d7cec38b871e639e500d2d392ab332cc7fca3dd2ac07552a205b3a8582af872bbcef29b362aa7c51e9583646a69b255be0b5fda293b68121b94b082a406428cd5d2dc2031ac4a01a5cccdfa5759a18577d6d51db097589de5bc3f742c7d64f1330574625dc9e9a2d214eb1a9f2b8b31e9d5bb18590750b6496d1e8641677d16cbf6ad72a9f529c40e8d286fa04dde74df8d7a638caa410611548b5a0172e4b464a4d384615730cb8e74ec73c2e49624ad31cc965b284fb50f18e171ce35a7b2d2d835f632079f524e0c2bf6ffacad045a28de68659cf1ea21913bb38a9bdba71e63686baaf9bd4285d024eb4925de11a81789603c340aa148057b24f702a201f8c3d8898ca495e73fd948eee8e3093ef8bff630b1c749b1a976d1644d6f055ef5e8b788532ddc948ec9980dfaa33b4576a85e41899f22a3c1502f45a1eb647dfccd5d3f0b2c81a5790090db87daf65a3ac5c37e80a742202ca41a17d1647f1686d8b9fd8953fe83bc84059774125104958b4a6d19b10000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001275c5a0dd537d97b35f4063ea647280b9f9cd82eab305cf5bd1102eb2182c4650313da0c4c1debb779bf39ed5037ba1f5e2e2a873c190fdaf3a6510ee7be713c4c0046b43b0695964d993679582dca8dc82e2d8c43451bcca518167b1bfc413d68183aa97af7b4ed087abfd8953f4e2fdd060177724d37b0a420157efad5cbc7d5000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000807d266b692c511b43b8ee53f50147b81127a67732cdf0a206aa8e8b5e9f9473d906e965f3acb6853ce33837ee9e821a13275344f51215a89747decb9c6bbcc8f04618f763304210bc83990269c38a929b95a3a469e3bafe5e323d7acc3c8bb6faaea28087652ab626ba90a09e8be41fb9ed58627d9106ecc15687ff49273e1a8d22289426ea515af201e1e5ef5b53e15c63a6c586269572f84c6c2a2ea748c9efb12f7371c016f9e274bbd679b54de3ade9f27e804a4b4dee79c989aa33dd1eadf522927495997bf46d3f3244ad64368c3f2ec8364d96023921f0ec91efeeac91b7eb311f37df0910f948bc2b82e3574943ba4a11e337ee4ea4ad60453bbeedcee25544fb7f8259ae95676d08badfe799efb4b3b869cbd6706f806bce057c5a25c0a7a3afac0a9a705898e47cc659212cb81ff9e112d9f6099751d24790ddd9a507476450748565dbbd8a27e103911ccd6d4ca3ef07450dc465c77cc950149b4c89a146665495b86bcbb15ecd0dd906f140a82ad411ae6c80cd026e6397d680d47de851c0407eed3660609c652fe3ca57d359012df405777d84077f22cb6212f58a15b71238c6c86414bbd9393a2a88aebb08b6717022cb6fd8280e9e6c493a0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001112ca2db0ea581b1a668eac0028eb72b1ae3a6d1ca91cc7c893d4a6dd4c993350314ea4aff7d70a6adcfdf894ba8bc6d358c09905237fc96bc7c78f8dbe5a97a1c072d54c0d35f2a464d8c59f35e4d4e7fdc1dd2caaee719f808df661e4417790b2a297d8f1aceb1e69556ce49fd301ca4c59ca7fbdf1413913d239ff24d8a3f140000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c50292e6bcec15e72df5a19beafb8d26300c7147cb9f632436db04c12831068ff2209d7bf7a02244d56acfccf075f98af8930541798ab094fbfc62ec99e05ad97cc99366b009a4ea071e4e1658b67dfdf56811c20a764713f5250fc829d3dfbd48eb9b0c3318205541f042de76ae64aa6ad19f6e7234dbe86a42e2cef45a3ed29858c5462c3a7a09e1aea7cf2753435e976533f23fba6295a031760cf6e2a3eb4cb0acf9017a1a2512f056723fb09a7a53c18d0467921a7da5b25655d84f1399a0c82dc75eb88e2f70a0c7ca22f8008ed6b4faf00a7951c219190aa4b6885b1ca296e7d96d7bcfb4bead2af93f9df536f8ab60202a6e999c9492eacecc1c3adb4dc2b5d0a87818215c18d1a2d429beef369c3be304ef61d1cd52235c767dfd264524c597a04939c0d849cd17bb9daa71589468fb16b77eb9f1e8392980878b93baad08c120d95d20d02738d8745e78caa6f7a49552fb379d6a1332e9630ea390e019e4d4a958fd0667fff15b5cfa69e15394da430d5e1dea66ef799b9681803de81e7cdc748019bf135fb96b7690cf3b8053ac961138e5e9bdc940035a18253a3d69d8b4ae7ee0ec789589f950ff2522759b5243de794759dabeebf0c274a1c0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010ddd08bd81a3a5a78376f52dfe9501551e7bf92766dd4e4e4cee2ef99f79fae903191cfcdb5c51da28af6268ee4feedda84a2bf351d52c14146197e8e152b379af03734295bfebc31facff1caff996d43aa2ce73bb0ba2a8cd4a43a681e95fa22e1a630c20f759bd0e14c3e2af33d60325d8277f502219b3a198947c3e47ba53740000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009da19eb2ad58b60dafa9a043b22027318b2e3605f66f474d58e2fd45958e45c21795df279c563bd913c45445ebcf7585e365996557c46591e75d78a3ae166b69ba80ad6a931dade7a274d2d466f46aec7a882db08c4297e945df9e864617d1d8e44b96cc2a841d63d4cfbdb053d0b253e46ca0254fd07d9d119a00607cb4316a2f01d42950a4e0b9a69cb032ef773b140d692630f714216e349a7875b086a74863d64a0111c8baf424e30afcfeb78a082ce43424abf73e74c5f48b82435d27fa56ef6b1482aa12137e398627a38fd1e308267bbab85678110a070228be2cbf8fdcef2e374ef5f12b46e4a57bc6ebe83ef2819833d7a0a93a68aaa4137b5b16592327bdf446761588dc6b4c010ee67acca71f71ddbecc9e4127ad9bcdc89c0c69319694f9f999259a74abdaf7b5cd42f103ddf405848ab90f030718971749f80d38b597850c0cfb1abcae9d89a1496215294c8629a7a5a156ebd7d5a39ef99d4de313fd4abcefc9279b5e82d65112b63ad66757246041e00ed2b99a4b99f36ae82aa2e249c85960b685df7640487797f989fd6b62e0a57071efd77abf75fab33efbce8ffe47fcda143dfca4bd2d6ae8d9c0329f11681d0d236c76d8c5445f9eda0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010f01eaa2c9ccf0b96913d7c8d3136159b839ddb1c933fb60506150bb32ab243b031a2ce46b8fef0b2da3c23bf81008e0a65374111b7b550035d653a94c635f6a811faa8b9fba2cbae1d5e06c097255b6cf6decb682a54dd8788fb4cb90f2aa9817003cc8fae169e97dfa8748d77c7dd0e8972ee57979e7c8f8c226acfab85ee5ff0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f20ed70035ca6627d36c50464ea3691e83d5046c13606c7169f0ae2238b22585465957ef2f4ec4f28b3e4fd7381cba67bc2e0e4f5f163d2691e1378f8b5df04421fca9a5cace16099826984ff40dab43ca1f41493e46f09293813641da30702ddb548c423dc09aca224753123b870d585ef9de4e1f77003a0c69769c2048554703d743ccaea204e24bd10018b3ac3e4535a13ceb318acf997a171031b3c7e2ee9a0aa79b7cd501eeed3aa6d54d9617716a2bd8a57518e89341907383c4a1e843bcb7fbad177300650acd50a89b3f3c1381dd9bfb1ed3325d16f7c4b5da675bbd9e643741fcdb8e2959c9ad19dae9f346f8fea8d09f4c52da6bd5179cb965f27869006582e9dcde2b92e39b99cb77f15c3c6095866ee841e40348b543bda8c867f675878d661b0601925015ced944b629833271b11e4e4d7157c45c725aafa4ac9fd31da0186aa95f53b11e3be215aef799146a6f5623b11cd53de49eb9f610db49221ebd0d1c2140eaa0803e9ca50fabd292911e4b6a9c3a46c6c9d875930207fa94c17fa7b177260c15c069bfacde78e2ad7252fa8be7b799fd465c238f9ede9ceee3552accae627d3c94eb03eb5faf7e3506419aef4fea2f7c7b9200cce410000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010e1e871df04ac042a5381227f927200f3b8850dbb21eba79d16b4ce771397aea031b05a6028f15e2de33f69f2ba30ae1ab0397eb231b1ec4964de55bfa3b7d946122cb20cfae0019934d228d7cc3edd771dbe93963e1326a3cd7b6f895bab3527c18544491cbc5366bdee705a387820139ab71485b25a2df2f43af6e1a699a2faa000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a6b6f5ccc94aebb50987b40d132cda4076ed3c09195ec2f2405bb37bbfa7012ffa5b9076070ec87c23a49ef8b48adc950ca51e35aaaf61d94ac3f608059f4a3605d93c581c3a6ad1991c0dffd5f01f32ddeee2bb0a8fc5e184afebe4bc6fdfbb54ddf54f4e8a8834081350ee179ad79f2a4826679ff665de86425f862d4d12983e6c3d8df240f01510fb2c66f5951ce7399c889513dce694efca8e4e6d765a0e5a8a0d8aa11feda873381b2f1c6eb5abd5a48e2d1ac488309a479495db5afd180643edb34ac92b82a2097698e9b9022ce788d9ffa387ddff7485f461ba3ab8132bfb548b1da73c5aeca84aefad4d8173c77d6429b04864b52b83250223c37cb2f3ed7457d6ca99366f1a43dc5d2e965b8170411056107fbe520dc3fa20fc5fe76cb024c66d566b79adca9ffbed11eb764422fbdcceda9e96703de500173303447ae367f4495817c19c0de9b8b5cc70e87679b2e57c9106d2809aff9c42402e982184e80b3da8dbeb2ee90e331b407e39dbe5769a4f6da02c0c2f67beb73d99420bb7d05caeda7d69268e0bc87455dccbf4258bdf193b3b2121a5a038b00a0ec170bdc60fc5e542242569527d7818ab0bbbd2a2ed74764b15a54390abb3b0c0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010a6a4c17698ea8b486e0ec3256b0101f446144016ac5e4c805374b0d5b072d48031b2a5ee417f467b885f4abf91cd5bc63ea6d4a1bb5746b35893d2d5542d27e2f264b67e39e3b5664fe2ae5f1ebbd5efc44f6455b5e7c3a001fb7ccee85ed818b2db035e4a437b03a2a789bb7472a85ef2560ba7f16c7eeb2f896feadbccc791b0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009054f3f6939b782097697772e135129a5fcd01addd641ee3f4d7db95a9412f9a1ce62f4fef55a430e24bd5546891f117ef3b139610ee7b95a80e81fff9f547f1c7a80a161db98aa9b89a4a5780681e0054ef6d84fec44db848d66e4c6ddff934c86fa2f75210a371033109d3e0663d1b482be53bbf4fefaa27d4a1a14bd50cdd012cf5ded67fa69ce407437c98322063f014849ef1647d795ef787f6e069ebde6a1c997afb82bf9aa58bc4aaf8c3f0197a8db333a0a80e92e7dd9362fb284200606b17b85d122a5abbcd36aaf07952137eb9a714b97c69c69812825ede29607e80f7a8871ea7f136981c753096f1aeb341be013fa2fe80c8708940f88f84c16673cea106aa7bffe3c842d82bd2bed1562840f5c8153af2df3b6337f1d00411bb4c8eb697420d3fc554b876e86e04a5d5721c668e06259bc1436ba764ba67ace083989a9a2034846da6b98fa9dc41a028cb677a7d98b3de6f78ef0edeb6ad9ed15c7828a37dd405c240718ba9e74583fe5a82909ecb1558bc53c9a5361fc5c3170567ad8f1cd988b50aba0a182f4221419c24ce3d9cfa053cc33d4f75701fad85d45209799d39659b2f648a01fd361d0e79b837a31ff3ecaeebf7eb72f35545760000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300102fc4a87e6a7e61c96512b7cbda1d4596237b7f8db367292f6879004ba1727bf031bd0b52fab26d4b12e1e4961f3b11f10c32c01270835563d6e83e72a31285b7c1369eb946ca8bcbf9bf426932b6bd127de9b059696e2e611a79e27d2ae0bb7211b630917f2882cf1a31299e1eeb6175c1f90019a15ad84a25df01a209fa0df55000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000962910149c12d56b8f92d3342edce2559f32cc6c13499dfbe9d9a96ea7b78e887064a183019ec70c427c3d374fe903ead59647b88ac08cd8b1bcd6242690f5dffcbcf13498ebcced7e11d9a42f1e6ffa678bc1926a9ec017a76c57e6dfb14979c6703255d30750b546ae99fcb9fc06033f52c46f18fa425922196663690638f72172c5bb743901ad77f4db001b60a5b184b06d5218e1571c5cc5528ef1b27205c543f0e8a8fac31793763c03b35dd4b988458d00295cbf07f1a0ae1a8faa5cc44772bc03404a2edc99c6397aa708e7e73244f797da8651ee7a384ad3275669d2355fa7a2c80dba5b4dcbeb373153e7f6d0acf123dac8706fb0c147ac3214736ba96c948dd57b30a2308fa769d78f263d29819b5a0b6f15ac8bde01c10392893db113342cc7e0aabf5fcaa3ad6ea7a8804206206a92ab82ad580159c01138d8ab881f2e751e6225ac84471aa59ce99f844ec19bb203eb54699d774570ab7b6a8a4b308b06101558b2dc186a4f5963f1a0ce7dc9ff06504451758d3ddcac5a00e2aaa264db9c64e213c3ca8550f74ba006966822a3cc057236e7e475990439c99d01b482aa239b5bdffcbaf43c76a1f0ea271f0357e133d4788e7fa3ef851e229f0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001016b3f2539d046213bf758229c816b6921980f5357e6371d05468964b5874d52031d991ffaaf1fe82dffacd73cdc03421e88b015d17b9a44d383d99e22ff8ced3f23f90916a35090167554f4cd3592b91dcf7e016d4e016d4deaa6c19f5dd6e7b5302863ab58438111c15b70f4aa7f9e09a566311cbce5e0857adbbba7430018a3000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a901f5d01463aad00be9bf72d7d4580cc4625d007fdd85189eabfc08dc9fbaaa5e0a287efdf5604974f1b266194b2013366c3a0ec54a4c4236327fb789223267ae95c847c3f65a3b0d2a19c32e2bba61e7b0784e337d4146fdac653a15eb22a2e2d96e7545c24ad5b2f0da909ea3142579a726f7ed20f16cf4fe9d477b89ce6694ad57ec26d334571c1cec61856cbbab617ae3e14eff69890b0b81e36fadbc8ae56aa75a2b29bc4357324038c5108ed106ef881fd5518c499e56507d31319908185e2d42f581a890b7f1d085fd6923428e52d1401648c5b7ac5d26ef74a1045bf2d11c534668d597151ca89b09c8b16ddd0e5ab95f99858de3d6243d6f8164bb92e94b3f92f399b470a76174398b1746cd1e659b1210891e3e6e6d07e7446170ed4de69457c8aa26ecc412ef4c63f900f02c3d01bb6a10eef13ea6ed18be872781d6d9e5fa43f870211c6aeb45be8539f36b192b6fe66967379c2b025c24c335c417bf887c33767823776d6a4b3d53cbe490bc793497b18cafc9c0c3010bbe3755ffeb8eb21f5f9b82d34f2ff3b138450495e31431bd86b12751eb554817cf550eb6df57e93f2f80e8173aec946314e09b1dedbb9b051f822796c54593df8a720000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011f2750ca65fdb442984d5dc4e042f0466af11c58bc4c7ff5e3680bd62271b49e03257e3a2e68d86e04263cfc2e8802347c0cbed631550150b76dc4d8ad8c265ea4305789bc0794f842460da247c9c6a0a12d1947114255eedfc75bb1bacc09ef0f1b6e45ac803a6224ece280116026910b703b6ba1c3015eb17f8ef8f1307a3bd300000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083e20d8d088d784913f7fac4d02e52a8ef2e01a461063ce4712a43916a384cb84f219921ad7d1fda5cb3cdf3bde09dc87ba0a37b16db2d927e8ea8c51f8fcc8f63f56e0cfc08bf9cd3ada260fac5b15e00725e828db86b4304fac6e9c3b57afbc779763743e97496287fe6aaf5b6aeb920496f0d5418ff5915649e3f9d50839a01f067ddaaa66a5d1cc714cf58d66a8fb52988f5e97654019f3ead6206bad63a18aeeb9054c0d8c2d4f440b1bd851dda4f8912b23bf049e151fb984a718d77d25f18ea26a29800381dac5c469a81fb991635dd39deabca67c77c899e2bcded1717d989fc7803b6fc8a65f0d82d6c5774ffd981dd510e1a4534f198ef63e137dafb03fead97411cbb21ae5d730015010faa176d8aefec8d2a2f0bbaf1dd5ceb6cc03bf23523b0ac7931e11d9ed9241be3d1a7a268951befdc20e753c8bbcdc504ba27e3fa522836e28d416457f86172158bba0e2f6aecefbddcc443f2473e382562bafabf625a65e0be3e72960ece273720fa4f22464d88b2e58a3135f7471512f25894a33b0f83780d212b6e08950899c71f7d561c3313411690d96e8877ee389cb4b8a31ddd9cc622b9d776725d5682b800c41aec07c36f5d23970e30dd787a0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011ac11f8fbde5c0a6906aa464eb4968505f95b3e2acac579b748b77ec9712cf610326759ab17942d5482e0fb5031456e08b12686f4a508adc1a232283163222e45900e24e080509a7cdf1853d94ed3cf16c5d1c4e08f973be377d26f66b06b4595c213191ebf195c28ceea33583b77a6e6889e4595b391ac41f5398970b676e136d00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e6adfb43401bea5675291ba380f11f4381a26cca5b117d1559e8cb76628bc41c01de165c05dfb3db7ba2f6c5fc004ee2069fe7909912563a584da1b801286151d71a44f0b45a1c568aaafa2fb7e3a684de78f30de41e9f61f41f7f566bdef15ffda1684697bd1183a4a2e58b8e10986f02c966426eecc0c2df1d681e26eabbfb373e418224ad88d48cc55f7900079a443d3d2f3a732428e6ad7a251bc29df51e6c838e1413a64e9d30af34089ee7070286fd524db48f2dad5f82e9d0d7fa8b0fc71476c366e370cf8469a9c4d1ee64212a0500fa6490122e4436abbde66ba969ab82a6a01781cafeacc11630a12fb51d441ac1f1e60dce0dbf8c47a7255b4605db2bfc8cadf7ee9b80bc76db01fed60e7046ef6ee2b52c3bfcdcc2b78e0f1fb1cd6c990cd27839fe84447a7e9290b114b75e88d161ff73d91cd1e54f8156701566ad38b4bbcf18e03862fb810f1793809db556a29458ee2701c69486af641ba7bb49d7aadb34ab3cf80c05b7d5da7ca8e6d393b7ac1dad4481c7498bdcb01d43e16e2303242cb552768a481929454c3b4d334d30f20f35ae59d751af276ebb60e574fd2e565a82697ee9bf91bee47442f0d8c2cbb2392cd81d1f6621c6b4870000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300110d424bfcd43d4d3281e6a5281c8f4e4faca25d2ab6d15dba4ca1da698e5c09a0327892f02b26a32e7709e598218c97f2289e6cfbbe28a20c2b02bec31293ea3a32790f23903f5395cffac91f85ec6812c8af0acb60413ab3876149be6afb6928b15b8003f6138afd8445c811b5532f872a3597a95e20320804e657f975583c2ce000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a72f28afa5b29a5bc796e18e2d2b32f10da4dee917fde777e93a4e4e75971489c0c2ac881638a7b20618f4cb93edc748ddbb3d607ef65b5963a3f98ad062f2cdcf86d4de9868338e5fb4295760815d922452405b5de1db8351740e7a4e8a0fd4880cc3d450de9bd8c48b4017d8ddbd0cd202960602f5667f2294ebc38a95c8c521601b96d503adb6d49a5f200be6ed3d072133d5b902da444e837c4e3ced1f301a99d02cb3a47242974f7edb77afd22461490b22ecf7ae1502e99ae6562d8045bcbefad38eb4cdc09f3f2434f4caafe22388542c9e863997f95eeb4f09d24ca56880caab2ddab0f32bd5c96d8f7edb83c3b5e35b085c92c36bd3a07e314b854de2f42b44b0c5e89164bba1a540ccd0633ccc7fa3c95ca6f704a2326ca390f4104832fd5578d8d0a5367ea10624e45f35700f6f51fae61a8614533b1029be189c4e8bf2310fb9b5c7cf547f760a96e9067261cf5af3102221113ec7474c3711ab023b24305ffc31411c010f2b330cf13699005b0e88afea127c2dd7ecc985cae1a01d6a6cdd47c8ab286134bd42b29fac1c76b26009b7678fba98f117a7a503e93232e770dbfd8b77bc276d9a35fd7ad5bd3b88855f67d318dda79cfe4d1130bb0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012aba9c14c53b55b96337c76b52de1c2a709ecf0b84f2486013840318ed69eeff0328021a73f588bf8fe8a24db46deb553bbe2eced367a6cf8393027284fe5ac55e11b56d871f1ccf01d7a5fa730d3225e8204cb4bee458238ff99ece8084b555d507bc32c1064c042281ebf823521251b7dae74e84a470e254fa4fb4a2fb291eaf000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a766f92c2916d6ca8c11f568a3be1faa2ddef1da89e10c8f96ce9c0872651e8c971b5880e1cf88d2416543c7da7c60f7d3d0d436f7b321bd2e14e512298460964e36ac6e41b0a06368eb38262d7da7993b29cd8b0bfd50a1c1ab671ce255633e3b8ea9ff68d5ad8d093521e92038d026604a9987ab9b2dfd1b90b95d691015eb379563b18d298be77c5fe0bc4e3ac463664cf2fc2b91b2f5b2aa2cbe60408106542163f7d42ee03be5ace013e22701a8374a674a77ff20b989025f66ca010ab6a5de8a60f685b6caf3a4452408cc6e1e40b366c2bf7f7a308b73b066821db73e9facbaf29068516fe70d8427d4693c292ac9011e298133e3b965491866cccdc7500516810ba62ae3147d0cd43d892d6e0e1f15c70af8972293a3d1776ab2df8299e360310857e5207e351e04519510d25367186fd0efc5d84278a4845f45466c1adde2988043a3f9664924ce80fc960635113ff3f3ffba33aca9047c9c87ca58b04571388369ee2a117faa98cfb1f4b2e96505c8bae979b5386c5a745cb93899d20def7caae0589a34519e255fa11809495166d659270c5f362d390b0634228f2e6ed7f8ab158ca59405ddedb5a38cc90fe008a8bc9f9752b744b0bdea7ec1200000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010b51b0bbab051682a2a1d815a806d4f02a4f210dca34fec099ce39b73dfd4e5e03280a0531a1760df60083d3c507ac04b5162444af81f7c4cd8fc331a246ce43db2f44a4bfd6fa09d243db4cfa7c690266eaba10d9742865ff7f6768d1ac50d3c0189183e6771347911372d1929f12d20a558f0856575747ed49948c7d0ef436e400000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093713c5e18832b926cac277e93655077194aa79ee50b6b30eb025ded3bd2d8e2dae24823390cf621a5533acc36d47dca472ca0cdd6d7597190939272ec7e14f76b08793c31a7720c6a205e34a36e6067c8dc0ca67db8ea5219e2a0c5516e58eb5345d03c217c3fd057452ff8bbcca9ba99eab2cfa1903eceb0eaeef5319407a749c1db2c8e333733154252b41249aa958d8e13c8e7a893f73036472e99d3e83ca0f4db4e3ed95e97a8a0fb961c43d118b8348001062206f983c8c47e79c891771c7ff5732dafaebf506051ac648243669ba64ca876ea07e69c10a2e986cde1fcbf7bbda4ff9c6e6f8d310e25fc47c0fb1aac4ea40f88922cdf46d9d405c6c8303fd056f59e7012758d17da965f05915af95dc92d188929ac7a7eddafbbede874ab159f3d4b06f39b4584415f960d723f2f989c75bbc3d0a4acd2ef04bdc0dfdd7a2bf2c70d84fdb40c28148f02aa4b2a151a5f975ae37fb8648b6bd5a8a3b647bcb3298ecb330690e5eb092e94bbc963935562e11a2b93e60b01609524e92eda24a4f301b49f6bd2d75a8beaca2272b797a02175d9496d6fcc347914d96594c3b21a7057b8714d2a2df34b2863ee9269518f16af673360d31a42604b600a59ea0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012672bdb5f9580a976451eb0fcd0c06e79da7daa310799b5e221224fd08018953032bd969fae7ec9f16ba1a7de7f0f8fc3be349fb75c5e9718823caafa69ec77b2d146fe2cb2be98398becb3a1c903d3024f8acf53df69df5c871bbd235f399aedc22c310255c70b8c6f7a4afc88743516337610ce278e7146ceb3de1d783d3eda8000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000076b33b2ea134da01ece72ed160c06b4adb8dde56b24b6b1709288f999cd4513984c31d0b4b7bbc2075df5f3eeab4cfcb442d275d1ab57e03dd2c26fb44d7da1469c58fa392c2c104e430001cb497e3dd216dfc0eb9a7b66a01ba012288853aadb74ea6169134dd633d61ccc33bbd2be1b894df6562e12187974b4b612a961228b7f29ee8d287c53213602f438342336f9aa79df399a7cd56ded251295e9c38a64fbc8b21f5661d37549032191a4c23d6d4f84b710aeb9a06d28152078779cf212d139d553ad8fb0e6b120ec24d147914f04fa5dbbc1b3596690a123451b6f57f0136625385788d6623ba91852f7233b4d5adaeb5df10e297ecb7414ba694be633582179a1f4330311cb0d7f30f49964c6780019b5054a165184d6a397908b8a087a93d72e5415f3594d1b7f8ac369c245b398e57e39d7376324d58d6321378b32bee7e40198f68de3ea49c0044707f5a5a04945cce792ddf331ee612979addb97eae4e9c415ad993139f38eb4fdf6ab63e5c4f55c110d70c44d6f0d5ad787a986b17c31583b115fdc7334dfe7d7b39831af462e7bd6d2d828a1d37986c1799c159a5fefc9356f215c5e5ec5d781998080c1673765441058de569601b30c08160000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010555f251552cf0cf5f747da0f66ef2374539f8696bc7e98875be7bef6bfd349c032cf23027b783178c21a8e4b2294a873cfb0b13a3a6fa391d758617000edcbdb12c06ab533dd641cdb128d93dc1120a5c012e37e01aabfd6c7aaa8d34a7da294e25a128e5b552484c15abe3dc80eb691dd13ad233ea8f9bd9fbfa293847954bd3000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa357de71a7c09b8650964edfc4507a188de28de00da6e64cdf0fee8c49c2166c276679f6a0ec6d009f03875b34120e5c344bd79b23a9eb7cb2f7521698816c83d3cfe6151c78934937a6adff4a5ab20326b655c48fb5d7d05b90236ecc1a966be258cad79acc240b7381c1eaa9f5a70c36af24db1eaf365893119d0ffd42606188ace5249655202ae181b701d0c8f4bbd89d0eaef4d44735f9d143614f6d2b097ee874615689e34eda0aa8ac6909beb615bfc6a2dd8611706b01c782bb6c94c825263c091d0fc7b9a33c37068d4ef10dfcc8d6b9a6545f8bf5367737c0166b2acd5e74fc58122c644d980ffc4b62001ccb7dc29e9c33a976fd4a480846e1f30d0e69eb4edb7deb24909557ae76ff6f83c2921304e1e468939c0b17f638185f8cb5a409b3bb05933e67d7d2439d483ca4b58e78f0fee1cab59b4a289ae073446a643c3e9d8a04267a5019cff035e8d1404db07deb397510c1a164b62674d534b8d3b2ea30bcabbd7fe22dbbfed597a850faebf1c2235343e63e6929d708d1ba82a77ab5ec9bac92b46796567a4ee1a2817cb2c42dcbebf70d70fb5a167566e73a870d4d06d5f45720cb55585e228517b66dada2b95e7c9f039e307d5f0a672ad0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011c7ff3e834747b9305ab943f6bf065f6c05153f51d894307d50773cb504406c2032d9f571a17fe538f5e6fec3fee404cd251028fb461d5d80d2e80ed8f144d79241388af03d072fd5e0fc7238d83c632391e7cd75efd2bd8dff48d652da32620991b4b16069b7650874a63cb67107221e85e6facc827cae5a714acd95f1b5fba0300000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015de52aee2de6f8d8f4c257f938b68db5367cca94ee37441e4e32053d0c736a23b54a13a0b2f5b81f105e1ed711ce717d41b2bab9c5a606f53b867f3198561597c4a57269bc9d40cf04b69a65e76131ffe6a3af8daf0a56b6a376dbfc9840f986e3f50109449014d934131b46a0d58142105b158ea1a243732a4e6850a9021ce79c940cd9b531acc039768ebde85b2979aeda252eefc48ed789d1c5be020911bc08ae47570df2293adf6a4b54e76f9b62ccbbd9b9ee5f7daf2e1d3a1e4db21933b3531606d432a74e1a5212ca564bc8e223ade497a2af7aa5bc9c5add4d73c5d3aa3f495a7707de8d44ee80870749356632986f80cce4eb227e563f3301d1c506aa27d9ab0ae64756be3742ec7f458df44a82418a9a924cb439d6835ab684fcf56f09c5bc0cb02f75d954b508462939e4e597243665f31a340f8c0bcadfcd877421d51066b03780a6d963950a0ecaf2d3ea7fda0ab61c693e5fd84174bcf9ba31dd1a720a58d831f488bc80725d468e4bcaa771f968fd426968c271edc4900933e798ace20a509340dcb9a73f1c2875b5063f4b2659d888ee251ec6f2708bcb06193f81cf2b3fcea95d82dfe45e6580cf98758433063bb71a7bb165205d3370b0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011a64987efc340c75f57a809f5d138b0c426ce7b2f498440078d353e61a43a89d032e7631466d251cf09f1d7de1bd7bdd6c442869fae1f97d856502de2f2131753e0be8773aa2c27d6ec1867031e32f7275534f21483005af20cc25f81dba4f4f7b1ff6ae4344cfe45295c23aae7df2e57316bd7712f8fadabf33c81d4cf5027c960000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000df0e0b40df4d5f79b83aa5560c4c6ff6ac532aa86cb197b4e5835a38a390b2dfc74bcbeeba6d20e936b91a6085648d46cd2c785353b44b78cada18c0610abc057edea5918f9f02bf240a0ddee24819d53de71d6b0025307dd1bc08e6d9fdad3260ae8e1a5133b23ce6fb1edf9d33778835972ce8afe5d51057b6295d4e545d478cc843f4cc6dbcae9e40a66e105e485cb3d7d2003acdf9d5f8f96e335787642c9d6f855a97e7a498eefc1ea8f9cedee35306525edf05f0f1d365d2763b08aac36c31868fed792251d7a2e161069bef75477a1ab95dc1b99dc73ef806399368c033c1db741176459363973d6e35634e4255e4c3b893f22072f27a84199d08ec4138874abf0fdd4065c3cd9b1a5a94989f89aca3e6cb6537085f20d319145fbf403907ebee57ac249dbff6ded0c50d4254b033cf9b0028a67d5298c974329bace2bc42c3b66bfb5ab4b4743da05234c20786068ad4d4c38729b838d045506fa6d68f492867c11e3b7bdb8b664466a2d628d1518c30d436503570d6d3baa104cbe9e28fee0e1b96b45e0c551b8c8aae4b1a51edbb2d51a1732036c17ba84b44213bcaa548c3467128f99e209c3523ef8722c63b07bf403404e44d20d33cf0a2f7c0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012917abb8ef536def8328cd6bbd1705214d252fe6645d2ea024069a807c43b994032f6fbe3e7c34c4163d0fc2c3cdd66b62660ea9f4dd52fc78fa73fe406004355c067d5f88308be753cdf5568b3083a01fd2befa73fdb4784f59c643af1e78c38e0b0d378b2775b5b821527478794e5811687bcb8918b08fe1e32c7fed88ac13880000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ca4c06e99c747a546ad2c656b0bf74ea8d50bd85a5b6c6a2ed5bbb16c059261ad3d48273690ad2f718b33fa371609d6969682333a1bc56b61f34fcb99fb2755546684f5e0af3c77575596ab7aca75b5f6ec929b45d756b886a1bf502a44a3eca3aadaca3b998d41b7d5b8e45eceb4a5b6ebad22c61b2a5ffdbf0beffedf4b6dafcea4847e7c3e67169054b2e53ff991bff75c9d17581b3aa15164e9d444d3b03b2b981c19049b89c1facd06a7a73bd1c7b1027e6e49be9e044782fdc2e9da1640c6189f797cbbe3ce2ab49d0fe587080302076506031719b8dfd374ea747fd0d48a46d4518727930e18a9cdb6d3e82a5c5dd2269cd656df31f9d69d16780f804ad6316c6669e36729328c8685d39929b56dfc395407fd15d5f7a93d42f8115215b84411561434457aec10ddf69e18f12a61e7ffa9e4b09ba87f19117c358ccf13e3446e80f7f332cefcc0dea36da315d1de0b9655164a8bd58183e05d084b633b8d79bd7f95ce05571d2d49c8fd801760b49272de6debba3bff9ab4e0326c471ecc0a88efd1070901d7dca560325d8fae8b3f95d7a5e916b5c89143ffad25a7ace53b6a9210905e7a5ad40621439bfad47e40e1b3da081f6fb6359ec101497d00000004000000000000000400000000", + "17f349a87e050baec1f852d9861e73bf3642bc147e66e2e0ef4f4e935f6b334a00000008000000000000000000000000000000000000000000000000000000000000002400c5443987df6edf422ed495d2ee15668ecb23d54c5007fddd7e4ae35f5a347800089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000800606debe3fe32ab13af089a1674b07bc552bc10553619ebfac0e9fa73acbaac3000015001777e4620b2412a766bb7345a574398dd2ebe6399f5f0ac868d020576024994c000015800825bed0f04513688a20a73113b41d525a804966b3e35ccf0894be7867dd9f59000015800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000070dbd9d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ae7004301e67fe9f13a03b1fcbf795811303fc0bcd6fc2ee6377e25279ca7932cba7cd8b000000080000002400000000000000000000000000000000000000000000000000000000000bf4e3ac01014300681cdf04ea1d4d0ae99be07f13a5185b9922eb75e3db606c8ec8cb05b20100364bddab85930feda367f13089642bca51604e83a3198b6222fb9a612de78800011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac012b8e2a294ea5f1cd53b8265c578d3fc1f2a19c13fb4aacb4b1180776754bfa0d01005c28d4a02307dabe290106c0362cdfbf7db5991ec20172e127b681aee1987f00011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e00000000000000000000000000000000000000000000000000000000000007d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac0105c748ea410ff723ebf5cf72073e28966c3b358907d2a513005ce669f2ed4df20101caf34e17f614d1ac175dabaf41ba5e0a6bc54f5d24443241dc22d5735fc2c300011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e0000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac011e9ce34ff85e03878ffaf6aa03ecb56e6bc62e1af1996475eb0a46ec258e6f8501022aab9979bb6b16dde02b6d5963f98e599348c0ea19b75d7b13aa4e58b3fc4c00011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e0000000000000000000000000000000000000000000000000000000000000fa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac0123d61639267141b2a139cb361e63c88e8cfa1896769ff8ce3c8109a20a3956010102ae614bf85e7dab4fd9f56a99ceceeadfd15513ca564912bdb655f9d9cc6ed200011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e00000000000000000000000000000000000000000000000000000000000013880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac010079d5012baf3e97c561fbbb1b792e64182abca1e426876af96865b0344f524e0102eabaa1ed18c7aff048fc5ca4c8a4eb641d580d59cd6905b7b2ec56dbaeb13600011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e00000000000000000000000000000000000000000000000000000000000017700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac012a148fdb174c0f93c3c3ee6a43455cf57b5f1dce7ed31cd8011a656dca3e280b01054dd68f8ac123cab07eab6e5892e4bf28094709fe09082e74db5c94eaaea4df00011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e0000000000000000000000000000000000000000000000000000000000001b580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac011dd0145b152ab9b544fa73eef9be7a07452632879cca4fc5d879628d54f2ca120106068461c988a5fd55e96667615aff05ff14ecb1b14acb452f4b0e19a8b76ae000011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e0000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac010ecc7cd250df68a974bbff3895d8e3f224be5bc88c96496d810d92a9ff1dbc0b010bdbb7da89190ef7fe48c95e03b56f53a8b84a8c4735bbb870e89e4c8d938ad200011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e00000000000000000000000000000000000000000000000000000000000023280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac0127d2ac80a0155074efb0c4f806f05fab46ea93bd594311d8dc5e86330d11926e010c226b9feee5fb956f6993f8a3c3c6b9e954723375e1140029d6da89304af1df00011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e00000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac01300d642f138c5b01664059ded18a1a6c1b816dd5f2ec7aec235b31c0d0ee684a010dd8b695d2d548be55da79143870dff60b95be6d0b57de8ae667b77a447fa57b00011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e0000000000000000000000000000000000000000000000000000000000002af80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac011f7562a4e93900cacf308a07c2d99e602eeb8d6cfcf67bc6ca7bd43ed9388e9b010dfa58b3c5b941459e3db139a0b1f86bca078a032ba45d6ddb4cefb2e740976300011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e0000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac0128fa21785566a718bbe11a672c3a893587882c1e4b031cb246ead21f2ea3823b0112a82f55a270b1d1d32b9993a305c6c013f0cb33a42675943f84e0fd8d7b987800011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e00000000000000000000000000000000000000000000000000000000000032c80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac010ccdf5162abaf0ae27e19417ec9816689aa1b675c7b54d3c618b9b862019a6040113ddb3c4db34fc3baecced77d9ceaa56fef43c73913043c2a1c94143adb5d15a00011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e00000000000000000000000000000000000000000000000000000000000036b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac011783efb59d6cc19e7790ead8403bb74548087013d5baaac97fc88285d38a9ec90115a0ae1010df693b6586610cc31ecc8e0f98bee0d54798dd230afe7d2440834d00011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e0000000000000000000000000000000000000000000000000000000000003a980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac01261aeb0fd79e4af3f2cb422b059fe7b7d7f547121d1d58e59a5fcbf8f3b3c3a60115cfbcd63910cfc5560c78f855b0f747aa6b43b701d967a60b271ca6d3e742eb00011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e0000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac012c7c8211350a3c492ecc78d754f200f0882b68d6a4ae9a4ff85ce38afe0a56770119dc75def24fb3533429c8940660baf15945b07c9693261b7539c0f98cc73a4500011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e00000000000000000000000000000000000000000000000000000000000042680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac010ab3bcb6cd1fb16cd44013fa5911003a48fce66ae3d4bf259c78b4725fd697c4011ab5cf62eecc8f1605a6af38fc4f9241c10998d78aece3e6a80522434f06a44800011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e00000000000000000000000000000000000000000000000000000000000046500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac011d400a7c37b7b6c9560d47284c132589a8c3ee76cc16742df80684b6fb3c22e8011db10779874ef15ed7f50e19c4eb3199214c02faced2bcd616ee677964acfd3800011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e0000000000000000000000000000000000000000000000000000000000004a380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac012382f7ad454afae362c3a6ba585069dc225ddce8a3a2c7d657adc596a0e6a5f6011eaf206d9a8dcf1efc717d54652726672afc88495a44d8a76502c546f8c812b100011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e0000000000000000000000000000000000000000000000000000000000004e200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac0127c6c126fba4d0c3b95ae2dcbaccd2e502fcfb97672bf4e7ffa8497db9100ff4011fa2acfd3cdaf51fc7a49978afc278628996d75229529871d8990b6238692c4700011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e00000000000000000000000000000000000000000000000000000000000052080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac012e7777b5ad106d0eca5cf2da9970fca482578738c8180d7095cc55e54bb1497c01217e9c729ce7fd2d354303f83747d1059902ee63616630760289f1e50dd95df000011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e00000000000000000000000000000000000000000000000000000000000055f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac010bef1b237e7f2c0f962e4cf56d16c3f913ee42e469587cdcf0660358953437ec012264fc8f8f64df13ab66be52270ec2fcd46f41e22f1d6b6d7fbb4e665b329a3f00011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e00000000000000000000000000000000000000000000000000000000000059d80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac0100b47120029d6414b905ceaf0c1ce123ddead869e29c34bb4cd609a5b571b9e801231f611c2256ab305db21ee558d85379557236e7578047f85bfa9f85b549ef2b00011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e0000000000000000000000000000000000000000000000000000000000005dc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac0118f895327fb19c1be92640e0e2e987252b25b33438e0b0d771b347d18b6fc55c012501ae4c19b208753fb1bb0697c0872ef68b3be812256c20238c86216baaa68600011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e00000000000000000000000000000000000000000000000000000000000061a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac010bc0507c268de47c2f0e10e2209e79d4d0e3002d37441bdda5ac4ad9e2d5eb5e0127897f79cbebbd61fa302bfa36aed0af7b589edbcbb93974c63d63a3f2cb630400011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e00000000000000000000000000000000000000000000000000000000000065900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac010f3ac06bc350dd1f8a1abb7ec142fe7f69a2206db1b1463a7dc8ef18e4387faa0127f8037e076b7dedca7fda14b04ea399027a15186ed8453d8192d626ef8824ce00011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e00000000000000000000000000000000000000000000000000000000000069780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac010009e36ab6bf99312e4962b1f5737194e0f4cb3124a0278e92a53aa3f547fb1201285c60f2a79fa16f6e7195593baec520f35bf4bbef8bd5839b0757ecd566a12b00011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e0000000000000000000000000000000000000000000000000000000000006d600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac01135e1732ad5d59ab29eda2f80b9e722a1b34a337f23cb7789c503975b6fa7bca0129ee62d9bb35fd9796f313f545ce4d68c3ca9f889a802384cc6e3e03054cfc7800011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e00000000000000000000000000000000000000000000000000000000000071480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac011a155e7d8925288be8ebcaa84458ae3d922a2947db7a335c9b05d38db2d414c4012bf3f77b341b549017e9100426de7f1ac8231b2d1a60fb1d22461e757a06e44300011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e00000000000000000000000000000000000000000000000000000000000075300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac012227402967d9bdac0512dd8a6147c4b2c91adfc0468bde21df9ffebcf215f5fa012bff7e983b91fc305b288c2c8b7b494a762c25eec100093e05374356ae46b17500011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e00000000000000000000000000000000000000000000000000000000000079180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac0116622a58cd660cd9fd4cf2ed0d7745bd8a968655153f609b4e08553081a315eb012c2b87fe5dec81b39c95c024403f10b3fa622ac8cbde9529178952af3d6f6ad600011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e0000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac01145e98b12716c507518ac8316c8a3bfbbccb6ef9ffffef4f347ceb42e7d7cda6012ddd687c5fce6f7bffb6190b6f69cef53f3a01b8e26e6d7d5575fbd06d9d2ecb00011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e00000000000000000000000000000000000000000000000000000000000080e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac0110999fabdd197db7270206bab6d89572bed1f66437d9c1df723e635e39630682012de0854f6ca9baf18f68fa01ebf8c62980ef0b65e08b6e10ca8a2a928d5b7d9f00011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e00000000000000000000000000000000000000000000000000000000000084d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac011f160727c8532a3f6de5d72d1e7c77c9dee1192956d517ecc6b5983cae4eb4a8012fcad2b16a394b9cd1792e33c1ffcaa0fc709c7c85de402897ebf53f376e055300011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e00000000000000000000000000000000000000000000000000000000000088b80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bf4e3ac0116e47866c1946af8a9df06ab578c2146f3ff4aca9557b0cc4209650e559099bb0130259868bf07d566d61602fc11995a2a7d0daa84c45ea95df0eda53a1590c95700011b78d5037d52acec9e096124e05a45508d91bc537e2c017240ffdad916532e2e0000000000000000000000000000000000000000000000000000000000008ca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000400000000000000080000000000000000", + "1e67fe9f13a03b1fcbf795811303fc0bcd6fc2ee6377e25279ca7932cba7cd8b00000009000000000000000000000000000000000000000000000000000000000000002400438a472347e296cb881e76b7c92fa1241d7ed5e861de86b9a0b4412446b2e200089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000900ef2c4291be4a44026d49d9b40dff77da22b90ebcf5df4ea4e791bc4b27f2b5800001e002fcfd40399aa2f168be30449f7051f99acaef01425cde48319a355c270690eaa00001e800825bed0f04513688a20a73113b41d525a804966b3e35ccf0894be7867dd9f5900001e800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000070dbd9f4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad2e71c00495ae5d183ec54d23ce35c4e5648d95264badb3a8b7993adb5d13a789ed1703000000090000002400000000000000000000000000000000000000000000000000000000000bebf4f0010bcf5be5961204e932fe11398698849eb10fe7869de16fcf4efe8f50083b83c7020062c6ec429fa1cacda661c7f0dc3cfa769269afb7d41af95df45748c7f28bdf17b8990f636be436ff6ae31a41eb56612d8378dc5bfca4067f1527c1f24872fd0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e2311fe32916bc4b61c7d08074375c16027af69bd9f565751626e762a26bcaf8b59e5471163f0a7e040437ba718f6aa75725ec2fd652e5682cfd704b90c614f9d797176e189f1375db5b163ffa9e71315cb476987cd594d37e5b8d3711ee2e2aaeb29bc0d76ef864478a4f002c1b9f7fc0c96f557ff5810ab4283725d33bfecf1b2820c473dd3a9c14ab91121c38f057af5119d9b79445a4ecfa2b0ea4812d1c328fedde830dae86b509f651a2856aaa4585c4d53cec49e0553e7367ba93f4e2ff4f07a00b6a119ea6987517b70a8497ac56eebe4dfa6de1aac4ec0717ae56c4dc480532214ca3d8fbf559f1be8016ae395b7115018b1e566cce7444ca5866b682db7a1f77f12636bdb96a99f25063f4985f4fe5fe331b6d156a83afab1dd78f773e25fe957f78a13bafa08d77c423dbd47b9de067fe857b3b4fc3e93e27673eb0e08290027c8ea6d1a28dafd4109ef6f32c255ca90786d9a6f1616909c8ce3ff52cfb40f1c77d9a9dcffcdd118f2f4764ca1e4c226e6ad16b68ad710a24327073441b4d06684c3037d790682596e645b8de6f52a062a03119041f55990e4409386d7c9fb105f7f3e050fe7585dc5bb5342a7b32078352d0614c87c02f71da60000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f0012696eb4fb41fc017d8b63ff8d23931a4500c414f3e440693d86f89686513bc7402008764a42331789bf65042d9201e2d7eba3ad2d4d4e57cf43c8c56e8cf25f5c0035f5b9755f587ae48a37589d612fc678209711d7359b5d2ba89d087880fd4dc0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ed6a383ed016901542be2b1969774db06b7c31b68e6c8c7fa87eef6b29048c5d87730b293666d7a379843edf30fd3a2d039fde97f2425c8a34b82ef854499db7fb0b1ce90f59fd1ad1b664667a812bc829e43c2f05ae563baeafff1acee92e64d5579194352681ed5f74fc48430d5b3a543c7808808ddfc2b08423dd6f8561ece58f7c98374aaa387f8a012f49e65ef3a8019ed9310465477a054bf2c19f863d0af5857ba3159d1f279dbaa303ec1f9af2f503cfe24f0b0a587c060ba23a17bd695e24eca25f05b41ffbbe9ec69de5b9291db1a2760bbe562676786286fd7dbfe313d207e1b806c363b271b4d33ee839fb7f76a359a7b6d5bfe3c87ef06a181f5e04257e32b366d7721a7cbb417b7e7625663ce2c694d16087ed09ce08001b41d529174d4f3820fe097bbfeb21ee4ef9e279cb2e08fb5cf108a907692eb93a102437d201f77c5bcef37c73f24c85a0f9ec690866c3a07ef1ee540c5c2a728335b93704bfb0d10afd09494b9027e22cb28bc5352634f11a376c395d8ebbc0a96f7eb73bf2fd5b6eb34fe1447cb6886f46b6c00b1ce416dba56e7f228075daf158d6aa42980d387010a938995ce5e2272edbc87aa2dbc225455031098095fb7710000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f0011eaea04530d79742806b112c3d2c2682791714a354544eec887b7fd5d11e500802015cfd1d505963aa093aa2da16a06f46bc569ec4a65ba844a9d521bfe0076e44032c3296e39361a7cd0b491eac1927611ccede5675ff710488852abfc654dbcc000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4a47fd6dd130d805b0cf45738dfc7d82358a1e75ea0ff3e0eec43265f8986b17e10a86ce2ccb75e8e6a8cd9c120980c1cdfb6921c1d31cb2192171bb806aa42a5e1602091a5b547e729e561329bd9e811dcf876bb67315584671196df1bc82974b77bbfce46bc8cd897d6ac25569a595e4f67b3aa2b79b35ce80b8a2f8f9864e316514ebb5b1839db078f931818e5b2f20803ebbb212cab20a77da530fa6e72b373d0c780d4a49dfdd52d56bbcf8a619b4094642de3d2c5fdb473b8bb674296cece746f6fe384c00c214e9b0193cedf5e7d5d92b45a01afc4f631f21128ab4f6e2e93dac908a13beafa5f7630a96821a65726d1237f886e74bfb60a29cff0ab495736e981f6b3c39a6b88582a81acc6c7cbae2b0cac0d1055e703a658f291f8f893781fc8ec7c18dc05b824e02798f63df3531f272bcbcc2de54ac821908ddce24b2168effccbe8232b53edae9316097958b17094565cd1b5be1f64e6708a08d2f86263d6094c47504abac5c0beafb425ec0d46e112e69454a54f81a5b8e9e88b0f6ccf9adfaf7daa303815ddae4fee65a47c4238307a0e83a1cbaa4ab2874b2dcc5abb864fcd995ec2b3c8ca5462d94fab4ac23f1caa6470d6247a57f2326c0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f0010044710caf1277a8ffacce00bb134ba0645eba19f426aae0edbf2f25d6d302c5020197fc7256b0a759a22b8eb2f5eb5f012a866fa3170d4cbced7d3c2df759188e0ad4674924c7c3197641dd4d0362442ebb17f79f789c255af15140e4d3e3c3640000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c4cebf3294cea1fa4a797715d92f17c9d2b09acea63341a823896dbbd3b777eb3fbd37ebe753816ae6b6d6d8a4589457f6fb09dcb287a009f30b6b5bf1fc1145fea667d9b98821ee25f7d6e2721fe16020a6805cd890cc1b5cdab69c1a15739aec7162671f6bd5270012827933822ce8efd583e84ec2b20a8aaf3c14234995299a552553ad7e3c835957f7ad5610ac985c72c1920fa3369227d022bf4c43ecd92ac51f6e7a0b3aeaae80ea947be6b89b2a77fb2b01f575a04987732fca5c6a06163009f6cdfad36ffaf815febf58e4bd76d895f16434c9cd55693f66e527ab25454c4e3eb25687736a4a51541114c6832ff19f07171a919387424e52abc9ca132ea489bd41e55bf2c3710124aa5fa90827d82d0a7cb1a71d0ab7a14d88b3f47e7abbd8b3f0c721db9005cc0d48917686ae852319da0f8bd3c853b93acfcdfcc287ee398f8f01f806c5dbecc37abca5fbfb74318384e5a876ab6fa5e876fa0d4f923347b201a568b5f62f6c37c4a63f95af49643aa503a0c1b2d984c11f1e43875cac19cb08973714222ded102a0e66fe62e2c998b747bef71e70d9a1b94b3d0ed4de360bf7ae5dde569218cca90f0cdc601e91dda4b6c1d9cbda682855f604b0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f001101b78df5f1239e0ddad3133517721e2ae335519d432a0f8528fa9790b27fd2902019d91b6fb876d99da99c21f86464fd96de9bb5faadf2138f1b056acf153b78911d141323654a00e554851827e1df5cdb9e9f5d9195ddd61289c17adaf58f4cd00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016708e82827f5a9bfab2f82f10fc25311aee4bba269fadab661deeae4449648a1748107c3e7936e9d9c2986b5e83811c6e711e14dff2abb7276cf9dd6d8eef22fd8ec8110b8d2c1ceb01c162f3330dc22c7cd63e213a5841bd529a1f39604ec17a056095805e28ad4bb6947972fd35604c79f0a05e94d99abc33d61076a8d8cc03f48b35583a398ff71b41377e8a4f40b5715cbc5bfce531732c3d4c3b24162ae5f5ddf2baa89246997c25b5b2020f821aeaf2c6ba13e41a5241d24be2090d20de4a593d08a3de96227a62a3c09e753e23fbe21c93441a5239dcf8788b2194785f33dc3927cd3059368aec35ac168f8126723de360a42fe27ba682b0cf72d6ad53ea4949f20656930922016e3540e886b28ffe1961a557b7620bf4ada476dc118d82086c43ea3ca18755d817b15d9800e691311c7ba93677ab6f4616c7d3679c6a359700b02e02e10b5a43e8b7e8dad29b0df17f8881701971c10ad6c3390719e93c7020cd76de83259ba0b900f1be58274b08287be3719ea44bb8c65d71052b240163c7b0dc64fc12f2bcf5dffd59e65660e1e9ef8339c63dac278c63a24975a89b078771a52c10290de99bd9846e097c10fab8938654070e9521da3d7d753b0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f00127ecd2cf3737644fbe2f8229e79503c4d39c44cf19854e99ec57bda72c4854170201d1b32678e85b6fc6ffd57b32f727572315dff68891b138b982baa74c3f33171a0b60c8de430b7aed95a6719c47fd74e752675b5c8036a18a43ec622cde63c60000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f922a523c2ba983ca5cd8c7e6ba042de026cec66fef70b564163dcdf63b7d3fdf665d10f5753517221df23e5441009577909f19bc5a00bf409d13eda506747961b5c3fc9863b292469c20e646e2562ca787df667d8768af6c1da3fcbff8dfe0939bb2eb7595fe6f78386f16a89b9723cff5cd496a47326958c0da0825ba2fea0b8fd33db6fc04df587aca3d6fb9ea8150c182f82d3d0fb7c6818afe2d4151f07fb214441a85d2db0f78dd4a44721a2456135c9dd6c32477cc193c1a77f22f2e2deecc626e6e3c703797dd56542b82e7af0df1570518242ec0b36d3223a9e88086bc99ea058d28b31497a4bfc2756bc2c55231916fe696d2fe1e48af42a854cc6bfad7a9365cc54128c2dc40fd28fe8eaf20069f3e6526f697812aaaed373f7878b99f3f4c4ecb8443546e00cddd63640231fe66463ed01e45cb058fb656af2568a946f7607fbe2960f7358ab66f496e54f71e8e8507290ea6b46dd0ac40dd97ba3aba864f40a8fb2ca2237f31692122589627c8a95a9fbb359c6dae79624872b617bfd2396c14cae448640c37467f6996593f0e43c28f5a4a3ae7dfe71668582f4ec588f468d17c5ba07ddf4a77f5df518496684a56dc85aa186b983a2081040000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f0011c39a8afca366afd7959d0eaad4fc6d8922517ebbc761ce9fff335226dedff53020299e4642007e120acafddc49179c60330eb536daa752ec7d5cc83a08e3374740e8e106e17cf484f334e1beb9df55d69e01793acfc2971e701e1e06deb69c2b60000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c2f4b534130400bd14cf01b039360e50ed5a3cac15a8a0da8ce3dd73e3280b34b2fd6f7de35469b74582873201ef923bb55caa216af609551b748ef68da64718dcd7545cce388b70316dee44062442d3ab5fea46123fd60ce9e9976460ead5c417c7b323172c714baf743e79a55855de40a145691026032c46215ca625a0b3bc3a2274064c8d82c0d4e770d50fa97ef8fc66e53c811c6ba51179240a123c23cca37338645b82e8ea466bcf6b1b5900b5ddaafadb8b93645b0a582de983c56e15d967061e6493ee046a567ec2aea7fda6082b00c46710179f85d1c39730970fa8ea10e3125493d2443fac777282cae0aba4fec1d580f1ee7ba230c7e203b0153aee31e7d6bb8f0dd8061a89b21a87ec24abb499351c13ba82e03b2839dff5bd5a90bb667cfeec8bdccb51ada71a1de89cc983da50c4be546e8a4500ed558a3ae55b702dc6b696ef17a5244726686ea4328a21070256db057e7831a55626e06e00cf742cbf9681c12a2ede8de8d6ac119baef5d0a41f128572afa6024a792fcd106428294d04ba9537d9c4e85e027e14deac99f8147c493941a5ea7c251e0dff4ba1e2a4502134bcba80685a090b0a76c1d8bd7f3764c2f683855612fa884e9200000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f00125abaa0efd26812074db07a5d2174970be8a34b68b4761eccf29c3b46768c0650203660f4a676b8c13dc5d4cd88a1f62ed2422eb375fe4599083ff6a379069e2a804c17b0acea8e48756f41ac94a03b0d27a3379002ce65c134b466d6149cfba5f0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a7729ee019c89fbf69031834b97e22b8a07c5d7f70c2685194fd8f14dd37ac322d6e753c5430e1b0608e89549bb6cb86ace06c426c48e36eb9e709f9d4c7415b8d52fc4cc76d6b95fe87c27e1219cf793503659081f1e2022adf590581f64c7843621ad2ec837ecb55289f731eb4662a23af9bde0dbc705d22d661847f465c3f84742b9653949a3751fd049a37efe2300b07f59b2028b3fda11a0dbc94eab61811ee6e760a304d6fc613c472356953bad9e4cfe642e05474cef32c7212bd3d8ad956fba8c5b755557d303eb92b3ffde7a94369c5c1cf0161e5847e9cb134bae780365532ad340995709111431dede8cd7c8d9b0c79ebe9cf1bfe26f7bebd42a7248e201a62303e809a682b4d90c31131e7837cd7b4705df95116fd27b5003e2f46a8e874faca6bce06f1813aac22bfbd7653235474cbcc9dd303e65e473d6a684dd8a088290940073ab30ce926539e3c7e17a29fc2031453e44060ea380f1752fe8ac23cce65f79e8746e8692b4380540c21f2d19ffd4192fd6d30cd904a1548d9936b1278acfa7c1a7ae104ad8387f741a9b85dbd47528b92362660e82c42aa3b5b2930aa1900d2d71043b8e438b2c2536a6a1fa57de116948f57ef1678e8c0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f0010cf4ac9ae104448b268522c4557e83c76af7c7b7442a4b23e7f91fb86c0f35d40203f2825026b01b734aa3fd917f1ea813449cd82a84659a94b1efe54ceefacd5530205ceb07cb3d278ef2f8ac46f1b918080daa31a12577837e5c65748ab2bc4f0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fc188580376b6b57543efd2ff36199125d8d729e554bb4d3dfcb581969be21d938f4aacd1b2d2378ba4b0b66dc0b15ad4e70f9067c6fa90a21c84e5f398c507c4436367f025b1c5330ee1a5b3dfba3033d4cefdb9a036d02224f233591a1f80f75b654bc684f490afd1a9e1f596415515cd4c1c47a62b0ad88566a13396db0b0042cd9276954d3a9849488397b7f98662436c911cb5249584e8fdf0c9ad7cd3e4f2f1702bea0f4de40990a71ba1f10c2454aeeb075f9e8ca7a8ceb06fddf81cd65e96e2cc33b321749766a845cb66da6710d062e344659ef83180c55f373488d73ad3f44c72fc955c7cf7cdab2d58ca087ea8e95fcd70afca98776b35268a235f7ecd9b648139f6bdd8a931bd79025b8dfb6917be3ada1cb77dc05bcfae067f721a118b72c8fdf6f04a602d3888d862662ff92afbef3e6aa28cb74fe86d7b468b47584056f41d7ead4e9495ea9bd464a186b5d688773030e20fce7a9d4a30afa4c0564fe749b41cc229db667061b7e1ad8157fb9c2b33d4c46eeaffe46535aa5c10c4753ef26d6e8cadd7e92f7c469a7eb936485a298b7b9396d82896dff4d584492db6c98a1d056b5b1cd1e2b99c8040329b94b314cfbd7bc77192e45383260000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f001121ba74ced73273be67d0a0865211c974ee9d003633e23c4d2076f0f9ff0ce6e0205ddf9116eebeea68e9d464eeeb7a2b7af29b9e9793b3437ee29616d92d6f11e079d486378fffe835907552bc365221caed8f38cfd3c44a1ae46bf0bcdd650e300000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013f16c67b6479a47187f177cdb70b88a7ab4fb901b9e8b76d41e6cb063e9aff62b9b183ea23188148ce6e24b5036008e03769ace8e558ba42b64a3cbeef16cb2e5ac6434120f20a6cada0c2cc103f2c13595cd315761c0df4e4b4840f6d190d88316703df1d82b17812cd18b0e00cebf68d954660dd601e8436d2433de6fcb978f2a299a8c58e06db069d0e0fabe3a0abc90b20ec84d55f38a015d30defe7c7bc0b3d509b79e20d6dd9a42546cf4de55316d1166b6b200082844639ea158e51ec7f774b5014b620e791632e76e7de7ab2e1f1bef03736e6af6a21706d3a18e62297a99aa27403d515ef2cdc6d3838754919a719118ae4e16d0b0a59235552d0ab69d30fdbb1bb2b22e7bf2c82e3b75735da3ad458bad0e1433ee138d3d30947f6e239647e60ba407e066236070dda0cbff5c991eccd5210680e9b3029890bf63158c03d0514f5e089b3b9e148bbba8ab64ea43e6787aae74fafc08648138656435c2f248d4cb2b816df59da3e25c8435f681cf2b48a8aa9d3b07960b8af24ebbd02c7fb0f68537159d5eee02fedbda1dead577acac3db83881e1d4d08b299fda0bbbbfda6efbd393bad3b45649098f13bdbf789391e6bf87ff5f9e9300368d5c0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f00114761cd7e67cf22e6570d7c4593826478d597a1d64563d057c037be84d7fe7cb020698cacabd5f66c1049d01658ee1e340249d472ae7a69f423e255e1e34014cc104c41302ba02e737c2e7661a7ba6ee6a3c64b1aeabdff31b5246ee171b5a0f56000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000258a42507c02fb0e1bbccf263b232353f4cc175cf5a8269d4b83a5a9b8469fbe805a1d27fe2042abc5d72846ab21cbf8c2f6475905c79f73acfef3d474bb89250bcecbec43dd3c49eda7564a56a63de85296f4d4a3afcf05a00e50bf05f2c4fa279474b35d74c186d68a61eae4c305de750300410084a84ae309b3ee59b7cc284d1cf9ae70dcc30d1a79f14bfda31768ebb24b2527ac79a43fda241673418bb3f7de1414f14cab20d9e832442ae55790e25eb235756f7c9143d35bd834c59056a95a84f098f89a490d6e9d880de8921ecfa4c3c8d7c702c0bf91a0719f3bd5cb65f2c866f667ae357bc8f9f14e0f15235ae6ca0c6880fa551b5ddd7415d89e099b8ea741a393f640d546eb720f0a68bf95ee87e1c4a0561826c46ec9bc40b36158b253c81d66f5b18ba14d306a49e7c7808cf2259dc45eafeb457d15e07f60c2ce5a953ce1a6e25c35f1be53fa8f31a704278cb42d8860227364eebaa4bd179288251f472c3ce1101c6ff3c746f8594b2af178a886a860b7d2ade635ab9ad51ec0ff38fb8e5fb8f08ca24e4df62e3fd4a123a55a37a58f5bb61325ca2f024839942bb901fc96b2f01adab000ed45cfbb38b3270502a1cd51a206eb20fcbb9b5f0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f0011dbb2c62360c45aec5625a5d548592e44273f1e038a4130c8b9300c3e7d2f5b602079b7f15aeb03c1021672520c50d280565af15934ece38f0da176ce2d483dbb22aec693d44ab4c6f5c138f493649577aa15eb6a30caab16f63574b0bd7bd347f00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002209d493900f83f9d32d148f66cabab2c930f910ebe8de6bdd60f289d55f793f73a6a5acf0ae940b1195274d0584b9116f4a8bab9ad2d4da15fe1f2acaea128daf7c65f508fabd60e2a5e2f10dd893318db00c71fd5997f7a33c8e998b7a886164af4eff0f33acf1c966a9f266210c8e00ecc3272a0f195d54b3de72332c6ecf2c9dc7208567c6ced779168d208e2c696120145f0e58f47330b705990dd39f92869d6cc0505124b45f7442c06f33c9162273d555f613e2e0791669756a7dc8606b9d5870f684a1ddfe9b3b7a5ac49803d07232c6d3142e3f631ec698ead28969b3bb967a4a30e7fe23bf571c45db65608698fd8f109d881bd16b1d5508aa8077bad5501a0bcf026b079d21635b68a972192b8a3925cf48c81f3bbb8c2258d84d85559f958addc7190a8492b1f22670649c5a0813ac8772e13c3fa74b228a72c2841804dd8cebda5c4f667e596f4de08d75af1bfca7d954704392e81b310e5db8bf7816ce3dcc3c67d3c25acac36c07342065973ca1e85b3d8b9af4383ac21b9c6d35ac3c57bafd9f2754fd666644d6ccd60c6299b2414e11e73b5daa512d10539ad09b53201e9e176715226eb88f79cd6aa620ee4ec04ee47dec8e4306f01520000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f0011a5fa7813f9ae215710500a5cefbb0dfa3aea0f2e7de5cf6a7cd3d9aa0f1fb260208204127b1890ed369f26299bbcd1f05846c851e80b74f6786726e0152e23afe024bbbe15f410487ae57ba2c16449b8caa4bdcf9885248f37f1db06a933709a8000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000892d5c3c3338fc733411fa281e8c06e03fbcd6f05727215e0d2b4516735c6fc7246a03801d167f3f1c5678a4badda8d4f47d890acc7e4bf9beebceb044c52051ec4dcff0c38a4be9dc8cdf1b9f2391d268271c8660825bcc76e856c22bc5835b111fb6b4a0a0f81db062f96095a7b87387ec86cd7a4effa2747017a980dae4b66a5da7d2eab3d752cfbe3e19406575db6f2ecdca61013b4d8570633ea07fd1d9a9a9bc5909e91d4e7bdaf1f1c07345ffa4bdf0b509146af35e9ef8be317f603807059933824c6874a36e788e335b5b0a0bb49eaa75c10bc75c750a7e11ca33c6f66c987f53be7bc1fa2e71efc9f7a65b64000ae8c6ee1c5ec75a852de3aee1e8020bb606474398cd92b36dc295d93180c95da49a2d1782c3a775d39fcd863601cbd07c4d41009ac33e578a27ed716903adba5e9dda1ffce53fe28eef25d5ce1116fccda83d3ecbac01e406cbbf8aee72985d092154ffc326d0b511c139bcab190ab905f1be9515274f78705225fc0ee0398a545dc78ea0a1be0980dfba80dffe9c788ff869f3c3ae5ff39edca62bc3332d3a2310c97387ba41042b93a08abc52dfce29a9a27ed643e0157a3d54efa670eb61e8690e3a75c93124b0a70012b0820000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f0010ca2333043b34c21ad2fe8dc5af1710837c545e4753d1836f81ea0feebf0e50402090938b8b66ba314c01afa9b8850c309ef83c6ed924e31be73937f823a92fac620c4195494a034e8af901b706b80128a019876c3114ce7262a4f78570aadde2d000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d4a92f386ca314ab758f79e7d54561d33e812119ff3621291276819c1b2011d44ad7143f33a8b96bdcaeba4675de7a8cf75ef3370b0773639470eaac90a36977c0631da0cc075f3902d85503231f3e5f67dca673b6ec7cad9eaa4e4ae3b690f99e339449beb152c660a37eff7bc2332b63e3b7cf272233916a2068d1c21668a6c64baca07202a1e85ef2a9a5c7fbd779b0d50be0026a39ead61e80e45e5caaad804c74612c9353a71f62a33aad3dea888dcd639808920568233e20d6f3e33374617f7a4f8a7ce1df92383b52dff581892c7910f6e2c98c804a00dd7455d21a6fa0fcdcb5a01a7efde78251ca0832445946d6c5e02b4fac0ecb35d91c9cb1dd55498f8f0ecf186d847148175f773faf1dfbefdeaee826527a96d59ac207ae3b703c626afe764f3b0226fbea03374a175540224e2f8893f05d064b73c13676338c49cc38f5bc6151b0ec09cf4f0d373cd0efbd75ea1c8196dca486344065c3c0e48d7a3d24a4b1dbfa1dc78531ac885996494b9912cb31adf7606485be42d995ae2c4f751ecce6a8bea90f2d3d6c876e997ed96280b8ba4740fc8e06995b105ecaf3423158f4d919153098014f40f40ea0726507863e3cb07252f0afcc9f1940000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f0011f2c1f0bb9993dd46dfe6115d51cc609ac00a12f047c987874d4da220717cc4c020c57c662f66c688e4d53186873db2b7e01b270fc880894b8ae6ae6f6fa02385310eb96e72ec0da8168efb38d300c2fff5793d4eb92610b2a9595d65682c3e8c000000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088efa4006551103f7d9ac3334ffa5c692d529c1b5356511dd36d7eddafe5743c545df06ea58f2a8e9d8dcd8d884d93fdf4c6b67ad3ea01492a4eb066863d12343ce9ea43625ea38c6c7706e24d0df150730931e54e9f2a7eb2bd0e47c8096d399b5ca771cd535c16ad9a4d10923ba1b4e8a4fad6aabdd22850a7b7bd472f0928da6b501e9997427af102fec2c57f9cb1395812c9b014a9321e6b59f1cf3f953d80cc49ea54ea13c4c5498e823873a8aaa0d5135bae9fc71202b006c5704c7ade26993c9b854fe0091d5f28fac9d0863882a48bf8117b130085ed6eab42eabfee4ec224bda79866c62b0527056cf568e4860e396a4bb1e18c0691e768b959b3f0c0e0643a21648efd24a94efd254c7f39c84f72666ba13d504dbae47065aea43ddd7dbd657bb68fee2e35185b89b1a410c7499cac9a5b3fb2a2fbf4e9595b4b68f697e2edd13082bcc0c7953a946c9f1b1d664e508db35fb23de7f3ae3f69f1fa498402a903c233d1c361593b0e0f5259344c9d0620f84c764d44ec2b588c65f976d41de803504e609236bb2f1fe152e9a19d99f1a42a391ac4c49e3aadf807aa3dd4f6a6bd0d639c76cc249f20e3cc13819e53d8ced3e68ab009e114c589fc2b0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f0012e15379d8a465a0eba09a91c70a67d5313189532268a4e9f6e97cd2f96b3c922020e6438bea559562dd658ad17b496432bf91845d6e62b146131b4f5a5e3fa493d254ddeefd5c1a33eb934b90051e4332501f3e0d722a494afaaa4c61584d8200f00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023c08e433287dc6bd1d682825207a6790e03e5a85112249a5888eec87c832ae9bedc374c7e0efe73e0adbe54efba1b5ae03d4a63527d7827c8472ebe637bae0517f31571ee2052ccf42be610746a956f3fe5e5a3771aa2934d73cf832dc25cf1937bb6d25dda15449e6d09d37d76db0a29ab36146bfcb066b8c5935bbdca11720ab934ffab2d1ad118dc350566eaecda6ba2d85acff0d6d25bea5fce6ceb4dbb4b05cb2ff6a4e74891d19385fd9246ddfb0e914a8f3fafcfe4b971909b34af0ed289aebfba62fc520020d88d00228e01a3a22a4e0018a27febce7f82977691e483b0759ca008ef2923dd29e3f4ef2cd8eba2b2d028765a082754784b7f0cd00af8b7963d3fc679e7ffbe2e60903aa5ab5f040443a4d87f36c21adc1b9000df71c9b58fccfa267dda942a8489b9b36d856173da1debbb637d33466cefa8f4ccd68f102207ec294009c651998c0c273a5c152123f2cbeaba5970276f8e35f1807e784a1f89c31231dc6b1b3fa1d6ba011e32e3db52437b2fd47e0fcb3bce27deb248cd5f3386d9db66e3e23717c50b585d51008ef8ce660fbe12987cb7bc48dfce938c6f39fe5f2d709f0d78c3a28ab457d861ba25be490aa65219c84c8c36bc7a0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f0012e24256108e422e3b44b7cae0b99a141316fd4b7faa62be2b23d4fe150a66161020f64d36e163915403a9cde92907090b1b2a4af17a1fd0b705d4d512b7984e74809f4589526ae8af56d7ed587af47799b1970815b58ada4b88ba3083797c3092c0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c6248a6bc0a0dc4483c8d8f96ea81fd5891fe14cbd5138ec9855becfa178aa09e92f8cd443bf8e4c3df7672f6239a699f99e1d966cadd94999dcc60f16b01153a054325a9f7deec893df9407ad8489b3475d9c9a9ccb8c16f34e66d81c3fafef8da3517dfa9d834fa146414fad194ede86acc8654384e0255a4e34c5ad74d15952cb89d239adc22a818f084e3465ec3da8f25251d36c283948a5052805bd405ef77a1481b2b3681b0b59966b565686a1dca317f65dee782f47d89e997fa43ff1ddbe2af5500741e252018fc57d6ae5542ec4a6623b6edd5ef388da7032818a08527fa4ddc91ddb083ca959a1837d7a922b5a4a5a7bac59d05ae1b1e71068612560bb99e0e5a5dbb055b0b3f577ff30150ad0719adf692720b0788b87416b848be182bd5e798a8efab86801b8df7bf27cfbb6efea58756b004dc37e5a789801b32e410c91cb66b7242fd0324b9e283334cab6c0961f78b009a2ca1937da84b110ae7e808f2c9b82e5f358343f90427e8fce3a468a55efde51ba1169f4dfaf6e7abd200b162778bf8fe405bccb4fa1b85dae19a0c26c4417108361900d33fa2df6cebac5a8a154d3e0a32c1eae901b4ad98ebd49544e15fe8dcd1dd7cc75beb810000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f001009404d6d81382283b0c13d63b44aa9c3b23d321f0516a22d6e3beee46555b1e02120e6216d686af5fac18999279c8ba1a1a60c821216c61da666067c2cb384177239911b55e6d3ab6190915bfed857ff437d4d6aa35b9fa4be554d739ad135b5700000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029ae5e727bd19f8a4da342194af17c4c678fd072a32c3badbcd7a600813f00c6c37f20d77537b48b2a6de6977f66f2a199b5ec8bea7ff685598320603823e121c304b4f4f6681dcc259e81e229b63f1ae4e1224e8cd57ecfa616d9f82c0e44be79f25f63bdfd1691a44a5d0f4da7a6dcd2594eb8bfcd54cabe7ce124f05552e758169fd45a5d63059e9060253ed80fdf460ba5dba39a576a3a0084c93656c81477638df43a81c07372ae6467ba9d1fabe296743393fdafd46754851bc5caf64ba38ecae7323be28f724d1f5534466cc24467f0c7faa5a6e024e83980610d79b1c7e2e1f7ea7f32845002a60694c228fd15a909131a8b6bd04d715aee01a70ac1a0f5a7106d20a3aa6d452585a2094d29d8cf9fe583b1c7f30fee1beb4efa627bbc8584bfbf050d1c2e824314951a23f00a574caf571d6be9ba54ac699267cb34b72f3f9467b97f5a5c01ab5220bee120beb434304b8eaec6a9fa023785ec01589eb0250a9978256ac6d6288b94400dcd9d8978476a5f33e0bc77a3d62d80dba1e20ae280be3aa903eeaab1cdbea3beed26749b3f3f39cd4852237f619c0d599b0184e727187e8074275690a0ab049ede4924f13efbdd280627fcaa9a317620490000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f0011235512df1abc12d076e521758d9067d8663d086c619074b8be3df2c2a82cc9e02121f9992f32112def31b9c5ccec0ffbcc4d157d27b6158f9644bdfb569f238811bdb964d474071bbd043c370bf764129be9fdb8c763966ad561c257ecbb880e80000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d416f24b37aaf0d57cdcfff753fb5b92cfd9c09dac79aea4c98515a8fcadd3462b24febe6bd7f427bee3c0ceb858fdf2a9af8c8ed7d83dd18f604044905adf0d1aeea54a19a3e308193f509ce7948a015bffe7bd1457c963676beaae9418586971a370fe2a3c323d1048d97c0b26ec381773e8f88251846b02bd8e63c83f129ba291a00d5ffc956d33726885a97151941747619442619d34636826bd6df14b4fa434057826b1524757242d4649b58346bf8459d8cdb7c2ba0d012b3849a7f274f9d5213c3fda8d32740b080a6a7f6006cfb5643df0e767454887d5c237c1d67c802598ef3572ec6fb0697107d8e388b136cf04dc10d18eea48d4714d55b46abe19d09114e7b10d5740be41e0c0f11a173e4f9c44e0a3c69d5b59798ae9a5487fa1e69e4f8ee7b47c416ff3fb643955fc74bc5ea562fe2c6ce7cb7067066485931bc1d377bdd6813add443e65f2246f6a23dd396dbb08cccd31f03ae0a9ad7b6840d3f7514d031445b31b6e6c77c49124d8f2f6b754757f9a1d3464ba60c7670cf06b428f88882c54d836064ee57538aab0f24dd7257de63f9e35cf723b9cdf1a084a1e136674681f508fd3996cc4fc309f223954dfb5196d5c8bc6acc66f5040000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f0011571f1d935685023ed3eff31c9a7fdd2d4eaf49aab495940ece5e1fbe368ab3c02134aad4982f5a568840ca18e4e38deb735cc6109ae97c28cfb6989842cf4c18a0f5dd693a0f740fbc70eca18147693f58286aebf24edfdbda38bff0fac4caebf0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dc44e908f122a8a5cd69cddbaf71171a59e990b7a279af4af2064ce536eb1cf4333ae8662428d37785d77717c7dea1ff2cfcce23ba0e894142827e6389acf9cd1c9330bba1ceab14d4af5bf6315b54d2a59c9343616c826f56485ca0ffd9165e276db257890de7f77cbcf219c4d02c546f3f458088ffaf5fe8a62c32d423d462b5b57bc7e4787c47df98c5e270fde63613c2bdcdf28ba5dba26963004d2989b99566cab4ec718a1ae9693aa9c5ef0fade76b0ea4ed718e028d72be19ff27a49cf1ae53cfab5f6f8c202390acfb5365dbda7b69510cc4453a582c91f0b77614f2f65178056abc9a972c72e3d90c5bdf64f27b53fb61ed5b720458ce815bf05bb251670c0337e925ee5f02abe6798710cf96a2dfc4cc608356025f6b366e13e835e1433db73326643c2157281caecd5b2e447fc59b0f2bef8c53942dd7cb2b289675a6caac2fe18286fdfb940f244a42264f4852b380450bcce9ebaf3df1db6ba9b25a40f8ed1b60170a37ef758a62e119c60e94d2670b2a61fb766e01f3142819a8ef524a0bdbd2f5a5ae80ed3179f5baf6a365cb75ce9dc56c99138dbbc445c4193b79ab4d8c0c4cf535f00a148e7a060cbfb6d5922f46c47838ba63875c1c10000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f00123e5fc7826bd72b90104d1ef7b719f1dd907228765bfb449191a030abe63ab9902137268a532df25d08b9ea35357752030c69a3f8a25fbc9af61c1171fd25b72a91765c3090b4380f03f021079ff515d059867700350353bd858c88bfa73e243a1000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041d56fa048011ac70973a6b638fa078564cd8bc92320698f7550ed24cc99d65b45cf16e91ed9046c8bf736915f275abff74e2f178a2f329ae1ce7e99fff98c74f45cfc60edc4e1dc42ad8f2fdab5457bd35178190219a55a8f642dd9211840ed9fb04a67f6cced0243d242588d88c7c2237af3c135e2363c67ddd237002ad6f146738a1fb06dabf12133d4b973b5c5ad7800905e8d00a5fff3a2e4bbadc547c84a3fa02d70e152308d56cc5f845a4b90b5c03cc2d2bb1ad684a5e34f11298a97c325d2077dc3306473193e719e47f39139864ec688c01415909b7ac573d71667e880fbe8d009ebbeee2d30894f6d597fa690fbe2669fb21bb5502c9d81870f3bd45f1d18b0a5c8f951dba6ddc4395613ac378b18a71336b360543bb29e559c56687c7633210ecc3f9a7ce98226458332783dbf41e5cd050e796957de816f2f42673178afb1c1120ab8f081ac896871a31816bcf5e098fe6ab1a05a4cd793064c1133795a9227caf9e48b08d4a1b17487bc80d9445b246e2c68d8ce89b5236e542af613a11875231d4723762829a5c623446d0c4fc88b5d31f31e4c263e5b7948f043309ca1b3e46a1af5325762c8287edc330b6f06c097d95a43155d56dba740000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f0012bcca05d85812fd5c4a529b24f9f5a1137dad319fb3b54fdf68f696f739662920213eb72e67b9904c827ace91a47eaf4647bc67612454cf71c488037caa847e19f27d3d85c302773ffb0930a194d497391b913ecdc6cceefaf11af9f2fd44c528c0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009586e2e3e7fca3ea3bb566bbeef7b0271b71887551f855549e90ecbefe7fcaab2732c95f1e760f458a48c4ee7378ba9b81b2497cc554a02ee68c194136751389f355d342dac9a5a923d9f0af95fde9bac08dceddbc77bf20b0a80ca2899dc2144a3535ec98a6d2172cf75c21f9d72af439c84959a4e0ef38e17510853321e376a69e06e415f0e810f79dca4b39b2f350effcedca9d22759bb5a672e0f82221b0851627fe97ccf2e65d996964170e509dae23493e44f087a1923b72a860a9847c9bc3c2fe2ebd20b4d793cc7574bed86c98924a61457cf6c029ddfd2176df27bdf19dabe5876a274dd898327269e35f975fe1f081f929c83978d9f841d9ab72eb86f909e0e921758657dad9c216f9b5dec9c0889203ba110d79795ec1c5634bb5ea1e73c78a17e699a72b71b36fb6f84088a7c949316872ba74aa48dd8a96e0603b42f4916050257b7c4624401f804ca167ef44b889078ee1f91bedf67f3cfdccc7e421245c00b2dd43d018fb2f7c0d19450abc9c9aebbd8a505ae68c212eb75e4d2310515ee2b19e776d99fe987848d999aac3dae841db1aa9986324b97f8b519ad83e693ef7dd4cc890c5ad302900d8eafcef48c53ca2fd576cabc2e36148360000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f001262d47a4b72062055e318f7b8ff8be5304003166f4257d39e58bc1559d415ff7021523ac12e6c8b73dc829197a4099e1a091ef9fff3a67c56513018917e422c8d80fafaae9011ee9f3a5e2132aaf20d150d5537ac4d9896c3892d6c984a4c6a625000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000116577a689a1a29cd84fdc52f58dfc4b78c3e598c9c447d5892f8495643bc8b91c0930d87c8d698a63488c3b8b80bd52e65597ddde85513e77b6137ab1b018e1eaaa7e3acb0dec663c190410eb2b13d49ad8d57977d8684686ab26e3d12d7afc19ed66ce0cfd57da431161b358415a8bce5f42c730c716d194d040e6f4516d765b564ff66fd17d9e7392e9ea744585bd58d1d6a5f104f401bf4b0fe0610134f31c70aa489ea435042c2fd320697283062942943a80d2e1f1e14f6b7b3321078c3565485b90dd5b246ecd7493937e4cc9135d92f6c2bb2220ab7390de6943870f1b2ee10dc558547e38ed84f649e0e3716653ea08d04f517e583ea69b0b1c6c40a5fb2c2fd96ab1a2182623b06a32c5d3fe13546a6415e1af7f4d5f9f64ec4c6f974013686958fa59fbad1bcfcbecc0dad842f2c13cd12510df9043e24d4511be59961620f6ca61fdae06c490a277e407aba26457c551452c6739ea14f3f4ecd1f8c47dbbb96dd4889ce044850ea43d3385ebe1b1c5ee9967fa0fec7add1b848dac178eb0573dc8f918e1271d77459ac4bf968729b45fad65870eb7f9c246a649bb6d53010e8959822ad7e779007d3a79ac78c5a107c19aab9667fbdd0b9808850000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f001273b40a6641addde37307db180b328e09b0ea17e8d8a299de33a7562412bbe670219a950e2031773ab3aae4d55050585df2e06b9f71ad001538801b3de26a9a5241b0b3c6e8a5a06b2c66356546499b48423e5ac54ec7fe2d65416681e3c6f508f00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019d2fdafd46302d514a566789c86e883359700c2c6f348420af598d97609b02a692aa92ae2445f41696bddb56ae79c2c8ccfe080e2b93169f712ecc33555103736f485ba881aa0180c2a7d6ffd701a5788e02109a07ff994b56c695563ba6b580b5cf39658c194001d42bd8828efdf4a2e52aca08f9cb674370ff233234ba7d5ed728edfd2786cffacebda701c50c33270c77c187def0ea86fb9c35c10bbbdba119e1b8df49e9a1821f9cb159159c5eb184bf985ab58e8803ef70a4e368de4692c98975e5107a68d43a6366221f12e6956f7742f995464f3940cac6c5dc2d3648f24c7cb8ed54985167df2224d84d75de089ab360b251f11f1e2eb5078153cbf1510e7f386a2a4d1380d38977d5ef591dd89a3afa7cbf87b903b9c849ba4e8e211b9c615be56b49b8e35d6a1908d40e75e58116a8689dc8f008ad391d6f4a12af08568b4cb42ca6bbe373581ef1b834ec349d7b48542debe3ef79952c18e18fbfe3c4b046f07591318cf7205fe576d1ef64ab505570c66890abdb55b64f507f1c52302746184c7307d42eab9fc71290902ea5ef488110b38e65b6823d27450ffe2aa3676d004cabf38da276f965012630ee6eeceafdd897ae82bd7bb5e8d82620000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f00116b3908e5debe72daa5bc557a05f8472f7edc7d368a1d0efc4c9b43fa6d63056021c1b3201d2b648682f0c89166dfd7a11ddd058610481b6084a94384757a21189270e4596fffeef6d92ec5eeafea0776c1233d2ba285d97929035c5f9e384892800000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095baa15f24218bb342cf93657bbcd7da041d2269da720c010756a2c8d758a91b9af2e49e97453195d13c15f98e0c2525d877a7efb78c89fbb2d557f6d85b68190713b47f05fdbd0e0ba9445634923d3b79ccb6bae6f6cba4efee9969f2b54d07e030b17961395d6c977bd306f1026f698c09cfebea27937a7255829b3bf6c252ad162ddf59cd33de4018abfa7f758cb4a68a39596cc381b3790e957fa7c7b3cad27c4dc9c787663608a5529224c2fd2ed6be1790eb6ac7a20fa65b95c3e7ec229302e9f20be4cc850621167b0db9f318bf28ddbb5cb5b0fb8e1f40284d6478811de0b73a7adb9f1ce026e1b045162032021985dcebc47d8ab9e8719e60080b239eacf5a2d211ec33be632ea97ad5f7ada43492065f55d8196d329f4ee028814c100ee63786b1667afb3e09bdef0ad1821626c7d3ac51772a5eeed516266e37411f78e3b44829084b16066477ba9212b73d2cd34de0681d09f6cab3feefa3ab3618144f2493794555c1e60ddb7d4f861b5aadb7a7280944900dcc7c1602367004be552a2066ee38bd19298b290f1bf22bfcb263caf287f1e16f2370293bcfcf2ceb1354dffdba865a752968de2a93e437d1e4a2d1681af00b0c386eb0060923260000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f00100647789edfcb308a388aa9889ffd95b08e0a6972305921479c1731cb5606fe8021dc5c78dfefb4eea34433dd327f123de3302f45c0e8f9af1e432f8223537c1aa18548ff76f8aa0fbe499b42bf6a50fefae3f2c621af99e86435c3c8575b71693000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b036d872fed52eea328435602e8e2b9180f2597a328f1f3ebe7712f447cb44e9737c01dfe348aa86539ffdecf28d7f0ed0ca108433f8371d2f22e436c3f396a303ed29e9075827432a0996b568cc1bd99c203c6ccbc4723e11ddeb0b19bf77babfc8ac320b52e6d7b91e947fe64c9a274af881324c72746f3564903f58999133df0fb979abc10f8a81271bccbfcb322b9eba07c6fedeefb120a2ca0af2a4352ab91c6c28332c056cd6e9d487ee38d8b6e39ae37c6ed7f7c7f4c3f7b9db9866c4bb1284ffa1b454e6f3490f07115c05af937b6e717e70e542d3783307461d69324834987bde17a82ba6601cafe66eddc054286d13ab910ca1d3ac040b29cb19c7ca0891332827d7dc0439ac1435e6a60f788e1d135e383d15d70342257e2d443bb04be9959cd72070ab154e80b6179985174317331065397005a04ca370b2fde0c3960eee944036b55c13e7dec1d36a8b91f4051e30fdf3342ba65b30558fc69164d06219dd4f6eeac0a2e469955e3f0aa1732a7e71f783b0cdcf72dcc9077eebbabb3dbb4bfe99472774b651481ee59768523be15bf692f75ce1706313a5ac5cc311a2a971bbdf071a46bc3a37a969698e98aef6007e6aad00880871284478280000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f001064b64aca500b0924893cd890e019511ebbc3969a4cf3f6e56f729c285e6cfdf021ddbcd52bd1e222b6fb4b37ff00451c0fffc4e2e09f570bb48738bcef55b09b00412aa24824856efcac804de33af6dd9723dbe05cb949faf4b8f06441189d9cf000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab873046042ebd769f50dfec378f0e45cd5a1107645516cba6fd020c5013d535197f3486e17a5eeb62ed1d5b6f5621e483a410c6a9c14555360049014db5f52850815171e1d404ea75048afdfa708ab6d8e1929939dd10ccef7bde7be9c6a3dc3f4213dc60cfa6e2fb315020bfbcfac23ce0d7621cd2be59ed3efeccbc888dc4452286ced12d2de1d4878d93dd09e84796d48fcbcdaa717224976a518b70eba24b0f3b225babfb9aee294cc9ac46d85f016a078c1235b6dc081b1a61c3836eea48e014378f957751cd78edd30ce797189d0813156e4f9fcea1b7f6603bdcbffe113f0080181c2a445ff048921f9ea4f6fe6232916a104bf214aba8f3faa82f2454f64018f395c72fba51d12b12c13bb20d0c14c172828ed6e46008629b98318e4b6f5265496ead09d40fbbd0d8780d45973044f4bc053b53115addf8d7db46731930c8384a68c4f5a1d7ed6966134b3ba145d957106fdfb5d6247db72706e92639166e45d4f45786687bb2cfdc84e3c3920fbaff494d3d791a9947eed23e2333a148f0aa71832a1a3bdabefa4f0d5f523f8ef3ab4c31d1695743d970fafca180b04015d2f18a64ce5bb11b612ca552593711218c4e222b70f7a1a50351d41a830000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f00127ac23152ff5494f7562b3993b0e1a0b90567500b5277d4f96798dc02c209025021e00f702a5ab9d1ce5925bad432f7a826c8b9b89860f36062933f20839cea3990f1aaffd05a44326e7efdd4ac92c5d83c94428c64f12d439279a054e9732375e0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f2bfd646b2ce7298101d70dd05bd06174a40b46cba4ca50798dbc182d1e808698b5cc39cd4021e7245e706351208e686a7d2e060c2b9d27666e73c4433dd031275c2f2b1ae0c02c791a8e0e4e3ec325e87b4fce5c5dd8b776fc17aea52c7561490eea5ff69a9920afeb0367c924feb6e1720a087c6112187c61f6d8e3a4203b3b8b38064f2524c26d5ae4825b732091cfdd7b1cc61ea5b365fbd7c86cc0d1d7402b2b59268621117c0dcb9e24139177273713b0ba4fb6d38491f43cd514cb6bfcfa9bae8c113f24dc60d18eb55d34c64da8678f08c8c1f3b7c6a790e4aa074639926b3294a23271fe80fe0910bd195862a1146acc33811f0825cc8628df3b52b64ec5527865210f84e156190c3cc3563efd4f2a466e433825b41a3fb08c3c61d14375f97dac8fec7dfb681f0b10ec43bf2b3b693971e8a2a6a5d62e050e2382ef2b3021816bf0bbd3c51b760895d00550e0059fc6514b6da4e124bd4bcc4c2afa815c88a431ff3164f5c17c5ec842da9a7a67891a0a2c0aad7685635ecee32649e2d0b7418ec81de73b62b8fd72889a50e3b873daf9a4a09e8ba2d003042255a17075e20581a9fa803aa62bdf6ee4ff97e25f797128c5d7c7a6fbdb720917020000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f0011c520333f92fa280e4fd0535285eef8de46bae254c618cb5383c4189e4c5629a021f587c6d668717043a5013dd4a5a375e7ca66ff0a07a48ce0c75ed72e1bfdb281d3b7a5e0025db2d8da91ffca5f6a797a75b9b843c5de5d2415ace02f71466a70000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008830b6517427402a378c8037f2b0208e389d44f69c020ecd433b4f6c8d087543c16fa1faf2003856dba475e8beca24bdb56e536eb114242aefd0c126e8b95b3ba6c43e6a24009f5bc888f49b2846c8b0069bac4244a50cbbb729130df16fb9913c36e7d246c43cc4f49f6d86ad1195ba75c24d9db452262d1d02ecc3c5eae9d2d42b9997f31f9f77531af89feea7c080be503920eb4b3ebafc07b5d04e9545046fc94ce1a382623b5d12dc239b4fcafe59daea1fc7adf74fad71d96c60c625ac978e416542b08c5b93c264dab072c631d0f0d28646f5036ad7e89f29e9e976913264aea5741b3b064c0e22b324db2c4ec97a581d87bced221e1c565fc4fdad276624a080ae30a7bc46321a1a286aa1485dbfd72b0ebb71bf677b3fdcf69b40db6149d51b1f0cf99eb84ff717f399d66d8a7039dcb4dbc70f0af8e6518705422da02ae197d63658e80bb01ee2a94130489da36c8af9901d481b3b80a9d4610561e58a9a156b8a050001db2ed05096c92c7b967df5021523248d12c6e4e6871840cdf978fd3a0d4b863fa226b062203c41c0d1852a41cee2b35f07ba3062eedd7f1b576c3fc880709d3032549a89b5bcb0b25f6fa10c23cf860747d247293bede30000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f0011e1dadbbb7b9b759f7d1c9eacb895cebdbfb68f47372519b93669116c5baaffb0221e18fccbb5f4ea08901327b6b9c1dd078f634f4fcfd83d7f95e356898935c4914df72675ae6b68d8c9cbb8cc95ac82c8b30debf845cf2174685141ebe2313fb00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082966903b5ba248b6368df0b20f181adaa67aa9ea26f3b8338bfa728b487b5235428cdd959fd9185c866a6c1a2dcf32ce067e04a9ace7a493fd9d7b594c5fb314deb933ab85fd9e93a8e766103fc956601c4a8bf1e2468b6fc251e048b9f02021173b014911bdb8fd8af9dc9e8a548d3bcc63964efdd939c743bd572f09908c8df89691784181b730870bd0c42d4993bdf0c5ae5c20ed8facb707bdf8bcb42110bcd16f306a588b654bd741e64e22e569722ceb38c4b7926ca5d0f679ecdd1d606bf12212e57fb4cd3b03466b8c88beabfb32675df63769f93a0233191029840ed3578ed97f3c23013f32c4711cbd2c2e765a6b5c07dd2d6101ba12ef34a27d1de8d79098145e48c0a6dbd37273fa6fdfb4088abc08483ce7c7dcaffe6ef540d4c9fb8891266b0487c4e55f90e6b7b8d6829c53ca48192e640aabd6128b4aae50f349015d26978294789083cf958d9bf49188cde510e25989421d46618bb01dea9a5321ed82a6fccb92b644755b95ae7f0884f9b3fb2865e0ef727a3c4b0ad7aa4a7ac16c7c13ccae735a223024819a30f33d63a6e9e019059402e08a8851a79cbdc8bd9dbc71d99311bf6a2304c40c49475666106ad0cbb7a49cda5f1c990180000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f0012d4d042897103c9d966f7037bdcffe56f0cd11716ff5cebeca92d17cd05ee4da0222b8e5f82a658c3f35adcedc91d8b5a871933ed175b2d5909e07670e49d2ae1d2df11234fabfa16a8ab3180614a8d717670c39683b0ecf24032e954a104a6317000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f978ec34eafd57b62919c0b0ae5b81e8b58b508559897653edbb6549cbf5b590aa07ee63d0e3bc8faf6d7ee14d71d4bec030f5aa123432ac871a1d0601a769792331a5a248ecf97783253faeabc08fa856f3ca10d5bae20ceea9ee6cf9c745389ef4a2296c2e1772ca1b8e29263426c795269bb4f8c8c29ba38fd1c40ba2f10ffbe9563d43b63e270d752af64389653937abebf9bb6968ab111d89608776a646df9b51e7b88c5aa3ec4e932a05b8a088337daa120ea8ff0f91e8909d2a2f12fa10d72d1c9987def564fee0ba78b626f737d798f968c5c6fc7f2ea31be8b532a698589418173aa3c9952ee5313e30b2006367a1ec328217b7f0f25567d3cb05899ba4c2a456c0278ca3895393fc00f1c01f0e08c6fb0a32ddc01a66590196c54730b02860ff577cc8a14f3bbf216fea76dc5bae9db8c52bc8b3e5b4013db83a2c2f49317c5f0012a01347ac21f72d55d0f096a03c10f03250a974e3b0653887de43adee7550d27cc8c2804c3e0a35c2957123aeaee9092ffb929f10d423db9a4be7b4e2200acdcc2b626b5223a28af75d70483915454a5e8c2ecc89eb0a544cd383c98960968c9178329b247a8aef9b39c2b3736924d07d08ef0947c21634f0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f0012e3c084e8f7195ba938cbd6605d0641ae947a648f01ce2ba07a007c6977c084d0222c46d29206b1a43a803067749823f8ced1a2f036a07c3994476d15bf937422a23bb5938b7879113e8bb8d62e31a310b420f2840e1c68f8f2be23203fe41a5360000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002dd89c0d904e37074a0a91061752f4dee4aedef5f8ca51fbb4722f332c4d3ad2a60fcab94da3535cd6649a9ab19ccbc654c855e50ed4da87fa4136691c61c6c214e258bf4c57ef6abafe76c96b2d4afc098b251b88040f5a46655c23c4783757acfdc7fdca762a886b74c8b72a3664a35cc50d01e3466ce65fc78f5ae27644e9691ddec2670b4d6db7b5b600406470137290325caf731f6b79d377eed2af4632fbe1b67015557f6518a842e1de64a0d04e9fb0794311fc3a7560c429f7aa06b94c4c0aec7cbfd641280556fdec801bd80e94d76defbc7ddf57a1d8a8f59bf0514a7b26c8b8f427dee9baa36007da223ebbfad46633f599d35e8a246ffdf41d69fd1ef0ab2eb5589348fbf6d4ca15300d30d9c9b9b42ecd45ae2d5e5142354f0561d0f73c881d18d5934f5c15d13aa051ade90d2e996fe2377372670cbf3e8faa9ba0b368e7f603c29d19c37c88f7d19208809921df7a7c210d8c6d4f732523b28fc1c9efba81672c44bf14b841af9988e9de96c75430fd87810b30c3b8b1aad3b8f03cf07a5fa97612c01d12ba74a34097cae6655739e5748000ef824756a729c3d1b69ddca4d1c148e5e1e2f064d5dca41a46f074de81e156c27fc6b0df1ffc0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f0010bea43a52bb7859572d5b9f92c779e14a4cbd9d67b12aa463c59f17ecbebeefe0223cc1736352ccac7b4ca0ca2ff37d4caa220e0accbe4856cc0fadf0034550b9c05227cb2dd59c477f447242bd38efbf773977405b6de51516a80eba9581db2f50000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fed42a861c872224f672dd9424355625b235d0536e148d506cb7830d25e52039203e35e61e83d0985f33c308ae05c60285bd56e60b68a056667bf88b4b7d5ad4487b418ca024ca8e97b6761268b1726aba15b3643437eb77f86089f69299dde250fab2367b786fea632799e9a15cb2394c422168e0fbaa70a33125362bad91cea19a088d26ef7dac6033aaf0297761eb35b868610d4050120e9700c18a24cf4367f32cc78d749ba7730f948b1f0d8b0eec2ff3293efdd4cd4b5b4a3f68811404e09ad3c4839fb8af1e96ca21f902e533294bc2b85e9807f75188f53380ffbc445fccad49aef18a53edb1db61b8dca0ce85feed3962b59021aafeb6e5db8cdc8a01925b1f97c2a7f77bf02e3a7d164b3be569c90656057dab79187d2bd71ddcc58db1a926729daab06dd26cd8908f483fc7ab2bf012039ca11ae6c1093d84f8a4180c0b2357a616ff8da23ed11a6513df2ea18b219edd8dbcaa8a1b94e4a664c18c120193936dd916d24ebfb02530a52892b5664edd3002d0018bbe316b63e7e404c4dbaa4818fdab1750346acdd8e9d288adfb5b0a41c479bedb57cca4dfaac82374f526e5e3e993336463da56de673fa2f0e73c959d44ef64a6b43798238130000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f001035d0380aad4ae4ea5d5c94b2b92a9357f9fbbaac818791135a8320eef062c9802260870b39e6a5184dea4fe9f9a060c1efdc8900572aa44da8757b74657179d0a2a335bc9f39057e4f4474b23a2c71945979092d435a411f88fb97e6c2ac5cfe30000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a3639a7491c81d37e32a28bab441b92a18c0abc1a8ae712c286d08d6248bb1ab0fb883d66d7000533f6ed0bad140692a45f509c303f91c9ba8ef47ffa810e6e2b8f84ab627f056e899e63ffc1885ad1720d8874e4c5f7bf000bfd3868153928f89033082dd1abb18e16a2002f60ffe29afbd8726d505048cd241e2d0cca269a15c0b29245fea3bc61531258db0b00e8e7145fc5f49dee2b56f70d948352cb5f973605f4ddaaa15810454e9b0459a34b935eaf51fc7525881f4a653a825df28d10dedb36dad8abb8bde1554717c138ca1cd03721d5c3f790a776f2edf6195461184ee67ebed68cc6ea8a72c19ad0c785baaaa24b79cb22cbfbb67a4d5416930a0aa3bf7fb20c0b6166016f6422bc65dea55a489c1be2e535dad6e3cde284fbe49a7992bfa83c5321d9e7b89833cdce21dcdbcad2d3f4a25fcf6a16d0a0d2ae0a461136c68b9c31b8ecc1957e64725af5622ef2ad74b3d140404a4cf0d9c56c4a976cc316718a3f92da294c07ace02e88bd5d4f0306302461e2be6dfef1bef16e1b3fc5e3630c19fcea0897495c4d994bc4fac90c8e839f190e72a388bcf17bfc0e2b0a1343ebac32e46937368f0cd81354da66da87b1adae0bd90a837f145a470000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f0011ed891ff599f1f4e381d894ccb08046469dbce0131d9c98c5649c06a196eb1f80227b53ae3fec49b686083e8ae6e11c5e3882bc530412a8b99352c5c258792359b089c1f340c95c2e89cf48cff1529ecfb51920202f1cfe4cf48538488f7431f7900000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ed43930f5cd191389e4b78e8dc5db47db29614111c1c6171bd4e92e1dff1e1edf353ac000b1ef3c44fe183c65f1990a43827a6cf9f8e6c5b61e9e6eb1952c66af9a1b15cbc84b64f5b8cf89017444a3f36b1a541587e4871495e4af321feeb6b6aa195826c69f5654c79362a9659db0b311c5cef5be72345ea8ad60e793f6ec342db541ab4de3d4ddc69d751e4d95436e379d80584a239e0fb179aa9b461e24aa77f2a19adfac9e2f6ad0bca8c35647ce7d2e757ac09acd944fad4206a677c63fa551f562c3b580376a9fe46e9c72a4cd817ed00fcc032ab04a6000dd1631aa33e543cabdae3201464e4c2ddcc8aa1700a6435f2e270b32a9d7914ad5c9154bfb4dcf073c36e3a4da77d84a453026b0ac039053e80061c8d49e2ad51f863cd9f8386b06df804f1996979645753c7675405110c20030ce648f5cedab5c013caa9bdc24aa5ffaeda7e991b1232350070b651ba4ddf2f4c40c6622240825e4ec24e7624fd9c3e628bbce3951a24a8315a09d6bc83cadeb7432c2b270821c7a43065c4f310f778ee614a6eafd91b46e5f4b3b5978c1acb5fd39136e3bde1c1be9c2bbbac832aea0c123551232d663a37fe08754d8cfe5a480c0f10f35d55bfd7c90000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf4f0012057532aec1a58570291f83a52e7e612750ef07a816405818a5086239317dab60228e1bc4fe384f385013f8b09cea81c81af6c5168d31fc89db2a3b47e50ee1716278640445b05a43eeae0c8b6756e2d32828162f8df941409906facfc4d90b759000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000908cf480cf4db7d8573e7170637fd66b075c2ba05c32b5ecf63a755a3e4ebe4a249471d790992ed8df0f573196a291ee720f44d95ba558f73b4378b65f9b3fcc24ad5dff98db676c47bfaf30d4421c87d065cf7c685701e7b32ad362452c990693881329c8ea31dd96b101f60ebb135726dcf0e0aeebcfb9795c5bc160dcb6c50e9e69e99eab66d479fc8f7a5b9739fc7f9e64047309129a6cf4cb764a5baf00edac22e66cb103267b4d23118c36973090e1c866e5a163da26f4fd71878280c44b4f04f6696a37aeedb02d8408f953da751f7ab3fa93c4a843405f1d746133755342a01f9380512b45f43b7f2b2c69582a2471a46bd0a4cd919f1450501515c065ac8ad817cc822ff89b3bd3d8f7587cfd3758f0b85d5290c667d5c6ece56d019923807da762497fda11b44db9421532bc2dca1091f417c2d361bc39e64c74ee195d89f36a2f2d8ce61d1f4b94a3ac54a32374c1f467aec2aa5101fc51b5acfafe845845cc211d0a052f3aaa99d5ea8399ee4d1897ce7f56df5c7fc2eb49ca3a4c063b065676e6cff431c5a28e7c0490f26198066ca7926a5ebe50cf8a7a1e5c42a896b1e5560b89666972355a5559c4c93267b2ed3656522958a05b57292d2700000004000000000000000400000000", + "0495ae5d183ec54d23ce35c4e5648d95264badb3a8b7993adb5d13a789ed17030000000a0000000000000000000000000000000000000000000000000000000000000024006e803b6f5d5c031fc4c53213841afac14b57c01dcc6f5f43f61ce1455f430300089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000a02b0e1d4ac3238bdeac405b1e324049f3cd49412171a933c03e18fb283a56754c000027000aee73f4890139b83a993bb3073beeeb09a0bf42b90cab414a4d23e1f71edcd3000027800825bed0f04513688a20a73113b41d525a804966b3e35ccf0894be7867dd9f59000027800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000070dbda18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad3a14c02c335e1066cc91e2e1b59e0d212e7b0a2097c808e9ce1f19aadb4f9b5b23af5d0000000a0000002400000000000000000000000000000000000000000000000000000000000bec47b0022972972d050ac91c21200fbf80a5f768b4bd958c7bd85f987a4a581ebfcef46e226c2fb0990e95071fce4d335bd70cd2be4d5af93cba00fc7e7a961ff87dd3a80202f238e9c0279431f9d8d15fe69595f5f442b59900063ac8b2adf5771b4669d21626912025ae2856a284286f665c8522c2db9d540466098f32b8e79dfb48f3d000000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e0fd46211af9325b20b0a4c76ebaac4fbc41fed833dbeb893d83f231826a75c94b6d4e7b61673269496431a26eaac71714a49a3609b239ab1117398b75daca5f3df43ff215f2bec68191edfbea386db45b63560a3a33d44b54395e640aec099090bcc6e0caaa58e031ff5447bc429ff9313c001c756f9848988a27058a48f5a9de0035e62ece50b542829cd94d6ab471447c423f70ceb0b65a4e82306c7fcdf58b72ceb149b5ccda9f34de5c77bcc40a8cec71d27d4e37e9f16de2e3a8d888bb6de127d3ac8c4c7afdec96dbabbbf0e61d48be3369c3dfaecd0e75bbbc580b3075734403d9f8caabc0aef22e7a3cb33455f9a5868312971270a6589db7a78bafd3a9de502be21492c6473f745bea2c32e771c0fdac1dcd5c19e031cfe0a2786ee498bec6cdca4162bb924af9972181b4c4b3fe4fb62036c5b26e528cb0655850385fbf74b4a3e599b03d2a063795dda5682e4ad7cae8eccfd9ab32b4c7578575f70cca30484ccaf80966c47945f009a9fbaf5f6b34bc5ff0cde4286b168083e13e873b155cf4c31613489a21cb4bc3bdc9d89c8bd89f5a755277dcee7f231fa4ab590407369f46bcd2a31ef3036786c1b4fc1c5beed76c808cd356aa16f08ce00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b763645f1df1dbd2c8090e72336e4c8c497d5209c16661bc5a4f52c45387873c091991897f44450426cfb667a49276fb9fed8299a1473207ba68fc78675e3111927a4257708fde086a8d7be5b02d95a79312652298bb6ff7e9ca15c9a1b02922d86f233f2bf1c0a195af75e68d8499e8840b2d51811df22013767e876522e51879f55db841f45588edb5fe465d5d1afc3f774c1cd156ec085108f65cbf7255fbcb15fe07c289add84aee01f730f3ac2264f0b61912ff8aaef53e878ce0b8e5cec5790b6a2f644f351fe734450cc350257828f47a61dc6678ce2187963e46fd2be870b0a8bf8f12fcdcac190225614681b72cfdfe8575ccbb8c3d6b0fae26127723a598e73a3ff483f7bdc24a87e7966ee4775c2d357dda7001373ea88b9e0b495dfb5791b4c6e365d334600da01a67e071b4a1a45b34728fb5104d876750dae2eaa88217015a5b6f56d11ed789889ba0ada894eed7f204ade03872926da580ffea65e95c3a93d1934888cc92b49479bf9c379f8774187918a55c1f2e39ee996c88fc3a50b3a99ebcd3a80ffce335b681ab661a727a216592c4c6436d7d8c6939c14e4f21cb815b6efdce2f0230fc403875298ae0eb9b8839970277ad3ff2afa0000022800000224000002202d6346239ce3ceba280186d8a907927a3cb4da40c4856ea682db8a9433c9b4590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001421135213ff0b36c682a378beb4410429dbff431aa47910d9395622067baea3ca00a2770a6b55c6f4277030d6b0f6ef49048b32e9fe5d0b67dbed9f49a24e824ecfd2e0aedfb9232eaf7b281245d746814e6b260968363c5ba24831151661cd53f0030a129232fd1e248a064614f8f87e4d63d3ef97c7bf70cd9777b43611de12d0038d725dcb01860882c2189bd1da2a297e9b782a2ecd49e173caac6d83b19405ab2d78d1c7605d3e53e1d785313d712690d5751d272c9145da8bd630c696598ca861e5c4597ecf4124643872a7bd0e9c3859a8b3a8ac16b0f49c221fe9738844131fc68e6f82377eee1547dd36b08e4a79309a1f732b7329652033f3f1d75f116fcca061875eae89369efc304104b5db1648cffea538615fecc6775410c82059b2bee59edb20c43ee40475174d84f6bb231bc05088ae1837624a5d25706ac3c7dce9ae86b1f0d4e5ea33105d752d5be93a90bf736ea0c950e8b8a6c3de0f9e7dcb3079f5b50d154de0d48fda7f3cf02976852c4919f8d80dd7c0e916317140027ef801e74992aabcc00f85e0b9ac348dfe57a4c3b5cf70ca10255d2f07099021d1682a8791021e194ce88cbaa32bb76185c38d8ee47c6e0e9b9275d9e9d000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00211eb8f3c8e578f1741cd429ab7bff5fff149194cbc0fc56d163ceb32c6319c6b12e64b6c81f38dce216e77414b8c7ab9f1f6b00c269f7376cf345fd1470729aa020394c6e60dd4749701680973d0dc4f5703ee0a4d666b2de21d751ddb6c7fbd1f160419cf245dd92d289c6baa3ca4c2b42b8391235776c2e2926a1d8e54c798ab00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af9ed3e3b09bedcb368b31610bca8b86be319c75136827c45fda49a9c379fb24df0cd62fc2e708621a37eb00066fb32401d96479519000d3a0c1cb4c29c0928576a00778bff4ef64036ed0e09836a46c2f28eec90819861f7e288e8ce20bd771cf3f3033c1b2e34bdf0071e4e7cebc75f8a3d81cc58722d23fc07b1022fb0ccb17c3f952e9019c1499885f7cf337d4f0d1b72a8ba8a0ede3e4e8a0f486583b019dbba904e9cde3470fd21474070ee53356f7b95a577fad49aec99b7bdb24ae979263e1e0d4972c5db654fb3ed7d3e2ec20c4fc75f4ef752a19308a7147b6c6b06205c826dbd7768b99bfe71a4653a35c951d0b51a0cd93eea5473d42cc1d11c46bdd22d34c46fe8f4077b0a333b1782800a8578f40fc322df2994aca39d3825346e375667309a90562e15e1e7d83fc4323747620fb58a1378867d5de36fd70efa87377c985b64489cb47d7f81385c978399f283a9b1d32db7e391517fed5c003df07e73035e71dc930a3e07dea2281e45ecdcf35559f1eef5780dce22dfb02464d26f59c5ada8d1e9c23c08f5292f6268260ef3f0e9d0f0e9e05a426b9c8915022720d5e38d5272b13290aba0c3e3edd6d9a75781d4e7e5d486fbeae1ba5289b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018844f25b9051c02d86dd2b7c4f8a31fbd7e0a4f09871a788991d40b214534f9f96e08194fbed712101d506c5c70ed7f53ca4511c2ee2907cb00ea2701c465d1fe4031b7c450e86af72fa22af13dd0a3d93beb8b5f9ffdc00873a0de927b0a7ebcef487c886c5a5d157ff9e71053bf907730e5dd07172c27dbe1fb7c5ee59bf7f6fbe547a33ffe0de6ef68137943310ee29a220b1217287b92c4bdba455b0eba4146c6cdbe24d1a82c64292fb1a25327f3d4085e5633c2bed38fec1e19316c19c8351f10bbae3d58f5baab1e43f37cdc0d941ef447c7640ab9c9b0e495e80395e047133857cdd55939c9d91d487b9cd674fae8fb45d05f44bf71adb81423cfd14db61fd9319d707ce0b0bcc8ba3be10028b69250eeddf8a3bf54a147b3d6d4dc0128af5fc08314a4ee77b7e6619a50aae3bac28a812af1fd262dc032a6a3259488abfb309573083ea2f3a8a06f7ac930f4ef450f6f1e61439f9e623f111d2564bf7324824db6aba956903cfb0400e96f864c99510e31d84ed95752a6d868d07ca6b9a278fe7cc8b1ee4488bdd5a8e5a8e8f228489810b8690f9e29d6db7f0d5e5368f9e46c8df1439e93f3a3789d4427d6c8a1cd65fc6b0e62f6a9df0786aecc0000022800000224000002201b184ff31d739c7613f6cf57663248abddf7c879498efaf23c4705ca42a88f5800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000849906013eb33e18b8a4e7587ae7173d607bf37a0fa38d43ac92254f633d343d679c58fd41cb763ad45fe533a32d0ad73bf81330c42835e64b3b68422659926337b53e06c314bd3d5389c0826e9f9566c7b0f6ef4d0484737573d8d34ad5f5f5b69f517cf9fd8792d4ca8fd7cfbaee2b158551a534db562d26d19029fe9912f9ee035ef454a7fb503d081a459b717fffee00bb13d0e1bb6f8ad2ed10834c6b8f93c6a2b831e204b4b9a9607e791b045f4e0475aba0e15ffca762b0ef1d5f8c1f0a5df9a965581f8a9ff32efa027b58964c91a2d92787607d4c93dd2b7d38013b899ac860eebe994ef909c46c6383a8507fc2c3e0ba97c2a64a791d2d68594b32ef1d8b9a3dad0b83968d01968d014882c1fbbf8ed71cca4b08a8309e0fbdcf8f779be199eb2bdf4993361e7640217d50648a660dfa27b9dda0d97a5b67bf6ab745bfdfc4d84088d2ceb7347d61e5b5bcb2dc3c7a9e71099db2ffb3a882a816fc1f2aee721f44144fb76de116ae129530e7abd1a357efa1b7afe177418c58d97ab8d7cb3ab68c02967ddf59eb76412666b1a3dfd8d859b25c408d7f687776a9efd44116ad2a526caf40663c2352d1d8ab343669a63f6fd4f177e049b00046c4e1000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00226aad16132b04355cfd126603b07ef62be4d086ba380d38958bc4ca4bdce21342261f3789b4acda7f5a75dbc5ab6e73113c3eab7a30e002b6c0264808b439f3802052cc1725cd4a4702c4fdf44acf916e5f62eae8432e820da86ce39286710bfaf2cc7f189af40326e486c3e6e6a14db43095a1a0410762f4f65c125394029594800000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cee945711dfdc584d7de8d0c0ef3233f4df535b1b8ffc799095f5a53c232a7c36fec007d65ceed41f53c6e596a6fb65a9ec6b235375a6651888f96fe32310a705ce65e566bee3a4e710be6a90a4298033504f9f5bb3230a2386e31e544e4d3e624ee2e7f6af57867a3903a0f5b942bd0a0728c37ead84aaa846c8e90c09c4276f95047e6521a446b862118449b2f9db650405b8aaea17a1cbb50996b90f3f29d157fe5fddf8dde8a2e3129fdbad8d7526b147e003fbdc538a0c83567d96bb2660f4bd4853bd62512755c4f588662dc50d5a831552a718bb3ff5bebee7c8a8651791e55bfd00cc8abbfe336f31a475605031fc4ef92fdefcffb52b87163fa0a85b4659687db6ae5c6040a1eb521731502cfc4e1477feefe73965ffde1e7be81127a3db612a37dd3c3fb4f4a2fe0c30d0d3f6296e0e3cafae47aae6ebdf626cd1b7703b046f66b834e3256b1d3d88e831bec30464f788cb36470effbc9539ab042481c9b8c2e14e8c4cc2e63dc0fdbe38b2eb217ed498963a738821b0e77958f4506238b0770e1dcdb6c416c87558d4082db57d38a7915fa9fde8439e4eb427af698c2c1603d51516764462dd8b82f3b4488454c643a9832e5c3e42268501527e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0e8c8e461c0be8bc9b09d570c40b6e5bd71a3a6dc79f5b3bb4dad0be6a15b0ca9e373432feab6e98b81b1bd4249ef38a8ce8580e22c067d732004af9026969400db325395e98a4efff013f215aa02483a2fe5ea52cc2aa772520bc22c3f22c19acbc4a9f34801c170f848230e589a8756ea459a5eeaaf523a495abcbbdae94344fc8cd53fbedbb6078934c83b7269e021f0255af102c816803ce811cdc65c4fb6fa70b3b485ff1985d881d7425537bde16526a43e51e725cd255895e02c10b1da13c23bec3a7c9e3ce51027d243a65533bbf4f1af1dcd0f62e34bccba66eef50ec7cf42ddc94dd812b0fc0dc43cdac155168aff8791ec78065611a9f5d87fe1e2a4ca020f3e8717a029c61abe11fe4fb2b7634517f7dca85c04dc0e1e2f7eca78d667a83e4308f6ac3d223d3e98aa2f4d401e36c3f0341993d1ece37f34cf3a1700fa784a4c392f6afefb0c42a5d62bbf4d96d55857cfb4e6fcda9ae68ffd188ccd812f857ec737e878cbe64856ac23ddf224e9cd8cfa8c29584f33edb5f48a85c10a59e0f83d5b95eb8262087f978cb082d07b2c0a5a2aa78f557d0fd825663310e008423d9edb887a371867578e3813cb6c6c283627693bd420bd6f463970000022800000224000002201936b24f2a7c8594a6a5e5b0e22fe9f1e85fad154f05f169573828f8146beb96000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d68c50728aa9d45c1069645723784876aa6f014ad6f79b8f612431384d986dddf47f09398f8041c5d75038cc3ca030d23b8847330bedb20204b497729782253380f60cb22805916eb499fdfdd033b6b158e79ed012df5897826e137ae754fb922c6f19b96ad742b3c76856e9e5a5456b70fe1dc7216eec16db6fdb76390bda1223de52bc626e8a45e8a6dbeb4233c303c888b1c4713abce2b25010aaddcd2c32c39ff8513d41e3834341a3947cc5b0cef55fda800416a512ddbbb301eef799063aa86e48df79ff8eaafc5fb1b340791cd1485113b2fb824527ded704e672ed519b1cb10e644aadb90b42a09ceb3b1d1bfdabbd97a8038eb8594d071278116c2a5017cee01d783445947ddf20d1929b721fa6a00d69110f5d165e8cc78de37eb14d4c7a55fee0b944f90d69f14727775e8d4c44645c6ac09b09d8c256a9e91bab4a58780d26d8edb9fee4919839148dcf60da6814e494fe18e898c94ccd2ef28f4058894ab6713f51d9edcc81dd0a6ecf0c3824238eb528356ef6833384ed3937f1b066f3cdad8953579c7fcef4b00d79a96682c9cab8c09190942378c80a588a441cc4528b5f1997d3f282eb86859b9508570d509feba1612d53f69704c8bfb000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020afa7976a2ee023ca609e17438d9908549ee279c8894d3009d1c3ab48b0824db2c3a2db7574ca33ab5c8fe33a98db530f91d8a2bf4792ee87d5b5bee7142843402052ed35d66be744ea27336d4cf1dc631144767ee0d125c0f5d28e508d7a306fa253558b18be1df9b6a6195f60aea138a3cd0023418134b2f910be63c648e0b2c00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088eea374e578b01216da2ac5bcd2ce4ebd38168f7f45a0516e6fdcd18e4494532cc429f4a740ea648809ae8db651aa25cf5db76fe9f8de7abd62ddaa8b1f79dce30aaa88ec1aceddff60d86a22608f2042071f7cdf6eba0039a9b9efd7ab42ccc41e52e162c8f99c451966c6ff6c0d8b598dfa84519fbf827ff73de87866c29bf8b03e7b01ecea7e0a70e76cc58f934f31ee532f94351e8ee2e4f973700f1f858d7f4b2ad3fb949e1607e26480235e13e3ddd354e76e85719d4904effbb51adb1cb497d253394caf1ed49c5bf3bf08e85e0c97959ba35c887b4820d07c6c837311a412b3b6ecee0c4118baa2439b6b05c28909e631a73518928c6bc2a13cfe5d11d6af04976ed9d9dad566bfb7d8a414727c435f9760809f8af314bdf9076136419d44af96b5ebbfdd7a318e68b19563ed79dba59c27efa702961b55282d9b5046d818f2f7731eb2b9d9a5f0007102915ec60338e3db14125fbe8a01c04ce0860fd2906b3059bfac680310b0462d3d406506d655ea98a25a7a494e452117565ae4af619a46648f8bed8ed951b55a02a635f272f559831e6a1b107fc2377b8421ef169887b3e2bf910f180cc3f6b49883237d03dc99b32919e8d0acb829580e0600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002936e9fab8a1b9eb6bc4ebd45b99b693895c2405bafbda815427292567335a28f0394e073b77e2423125f1d6ea6a483bb7c7b0c78f83895629ef2f086452b41e1e24b3964787a7e06a7846aa7b4f3aed063f30b2b1dab41ecefbd736b01527390742edad6202b8a756e8a21c6950a72ae937e1f9ef8ca08d9b6a20f300863ba8dfa6945bc325dbc5e6584ad2ca1b3bc7d2998f80ba92fb638ff1d6b8a49ad2dd990938c958be478bbfef463d73cc8871276e1597d5b4af1ed2de95cc9c3e7d07c0bed9809ff57f0c888a004590c75793a3821a2027474906395046d60ea6900b2864d71a875fb558ceebbc4509df21d8c34eacfdc2dfad0bbeaf6ffe7f203281fc3124a22de8f7a123475380ca5b1016bc3e2c103cce4f889a7cacd93d7b915d2d23c7242e9604e6ee19867d4493315ab5b91e3fa2ae94a54f7b3a83dfa46efa377a30d32aaa49a7c0e13e6870eb7d24482f33f0e5e3eaa3c10fa6f964f3a27dcceea0131e949ab284607c46acc61b32bedb512c7c341c2eab0d02d8e176e215bfcad648cb3d9687adc3e14b7ad993c000e6883c6fac6727840dbc98899ec8d74955777cd7f974fa75db43b475bdfef2bbe545e254b10f5c3b342e9ee407f0650000022800000224000002200569174c2e8aa3d2fe744a332d03309138f86c483ff291b8e186fa0427aa140500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000936cc3cae55d9232e099c924219d991242e262a1ba765763d0ea80a5c6ec4118a035b9bf06fdcddc43c1a7f46f41387b926a3b5c85a68169aa38a54328401891eeb23b623a6f8253e974d0e2ca6c3853a3b87508989780ade6b44afb1c7c8fe001a21a681d4fef38c40421720c20d0bcd0cef63616327579d5042f2abc0e7ec9ed6162aefc090b9e6b3c95e07db97cd9829fc192d4babd12bb2c65a6d914ed202387bed632b4f3ebf37cbef3e7cc7b7157b7edbd2197cd93224634b05311d8be6d5252cc2053a58d375a24664259da79c749f3a2e3b7686561d3a0c0a09bb3953a1d4f319f6851eede186067296c02af7313159bad7d6b5fcfda4b2d23920b1a22971b10fd477ba8669f5e14de8f94ebbc855a2f173bffe05a21cf9cedc5c4792d3041a73b2a317bb2549fba2d0bcb13e97ebb47dafd4d814d523a478259fc8c3701ce35b7cafc511861c721cba7c195a61e26d793eaa714f702f7ebecd4c9d562ccb4b64ecf5316d3ca41330750356d90ef38c2091443a7c6130f37c37a37731668e6cdb7601008e3d1c6f80b86d1d87b727db48bde8ea212ef2d7351856ddb8fe9dbd57da161125a9d104f43062105bc9e50180f2e4aeed8242f27eb7d7480000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00211b2d32a02c7377c7156cd36022f97647154ca6c15cedad2e1625d4622e882c727a1217e1354b0536b68a744504e749bf0af721b7b6e841eb5b4c918684592ee0205aa7fbcebcc8d676baa9decdf6f31fed53c92e025cd4ecec936d5965e7a61ca08164c7a8acbd78b706a06dddf54c61b624ac3546ee40d3dbf9e5671c06c9ea400000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d00e6652f74727505f9c9644388f5dc299d2bd7513e9e5d51dba745b65d6eac9c9d6371fbca137df6ddbe0a91bb91e7d59bbe1437b6d7e5b753d671e5a63e3c26873d9dff5c665211cf1ff3174e63a7445ecdb69c8402b3007f3e1de311ef904ec437501fb629ec1a2d769c123d199550bbfa54a92db06b285ff69657935435311464d6449fb596c2183f5c1808aa0637dc260619adb8bd95c310c303ddb1da667ad4df2956241f063d734a5aedbc2c10bd66dcc1d117a50409f24881f0184eb6e0ac3450fee7064b5bbaaf095745b407defd3f5b3bdf1298fc56dc7d96e7283a7d024f724f9d1734ff1f6cc793ff714a99187d4df76deb01fd73993996abab258a35b2d7315aacf116c2b112929c2e94f4a56197f4804df438584ef13f2f5af834f787d37b07c69793615d45a84d76d37d16f838adb1a8aedd2423c8327b5923857ce31a0e7a58099032313bbe260bcef816099178e3003ea664201d866cf54a1ed40109bfded8d7a9949d4b4c11349b97427876b029497dc2a9b19a4cf8833b09cfb27ce751dfb5865dba68fa124e055326a6fd22a0c7c3f20e03cc0206f902c55ca7e53c09de30e1b42fc9684912c284111033e31d223dc02cb2f6e0870000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ba48aaa89c0c7b7eb032860a1db9567681ab02b05be452a67c36288becfd538c29592ec604ddf9e345ebdbb1fbe1c602754868541b9dd9c78d9d519287c526bd40238f164291ab6016dbb2463d6b4270a0465e110ae83233c4f42a4143f8c7380c875db44fb9d3cba54bd87fe15e2ff9c2a4f0bce455646e3a325d774a430fe59fedd5932f9021a5ce17492257396a1394f9065b947a1737c6bcb2e469beb0a66bda08df1e72c3f1b6cc68f0f476f27c3dc772e75010614dc7937693e70bd26dd715bc31f9db3e76ee158dbe9ac1d434222b3b35d67955d3b541e46774a998c186fdb82af3eea64100aaa78c675d09d3f1a35e2dfeb3de21fe0ed8f2d14425d7e018e306aa59a2420ebf2803d5595b7db78f203d3f0fc8fb9439277e7b38f287224f6ec87d527be9d829b7017ff6d57d2414e38add511d392215fafa1cbb66c56e81c659012e67b8bf9978d0ce44915f62854036d457d932b7e476efca59271a5df6854efb4c45026a910660750a28469976068cefdde1749f0b95ecbf8d6a65f772d03bbe4730351238cc8efa776e61e25c96cd91eb6a2ea372056d6e1137639f2b2112499180e5d6b6dfbdf79506d9daa8b365d0e6b6291920ccb7f1606e40000022800000224000002200459b3cd85b48d19a18cd2c16431cf9e73d1299ba539400f12259f72fd89dd450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093d5f5f96569a50911641c2f48e2eac6db45620ebab1f3c91a4701eb96ec3b3ab472a6c43a1327a06615baf54c47dc583703cb60a9b4fcf0291e94afaa7a7f63376099304bbdc318320213c76eaee04c04073703c55e903de2169dc794fd7f46fdadc0edb41163c94996a47b34629d1a17c889fcf44eb3a26182881e6b5b3a653720a763d8821d189a99769734e8eaeb3c7b6df1d39dd063ace1d24eed832d88bf15b0d1277cac1792452f5225e82cebb3576449a3570c83afa3dfba18af157adb8c08ba38414d558bc1342abbf4310d5acc469e32abea9fc1b3b7594aad08e802dadca3e0002231a4080ec7b76d98b314a052b36a42735f079dbfbdf0343365ab3d4f9ffed0f853b9a37fa03c28a90152cf155c0df225170aacb4256bdb4939d092407fcfb50aa867d53134affa1832acc6c9bcdb822090acbbf2310756cb177396e3713eae6ecbd3e7d7ff54491e3500b0456d6fff853680bea92d891b2fcd8c3835eeea2b4ebf89997882af1e3bc3ab1d30f52415d51ebb96526cb93510f59530fca3a7454bb672ced17f18f11d1b7617dd261c7937c2b5afaf8e16694df2da2a222cdf8567826fec68f509fe81529529b8011b99449cf711f1c62e67e2d7000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0022f52729edf85d04bd5292ce06a7514ab68e1f7531ab0f7218f9d426b5a0b2446286f805fc3c2c66d719ce21e60e525484d22ed888d680d6e155b3bfe9d62422602066491d0dc723218057d5406cbec87df03c9704f222ff700c22ce9835a85abed16c31e92582d640063d5160ce8b91507ee06cda4bdba0ccfc1e28a39e904047100000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ebdba9a36ebad27c17424bdc8236835fd64a78602a445379494eadad0d5cd08218792240182f7ac0635c8b9ac3407bd3d506fc1e0b42e2c01087c8c2df94712db649d25c6a2f4ac6a1832edb526e9eec75e1396dbc741cd25428580d1ef48bc8b4e6f97c952c8f44f8a2fe31a8cb7961c6c2fca5388e54aade296e0838fa99ee2ed2cc7ed6aedaf62f0f644a88dba47851bafcd1de37a80dda93d73cf440068baabc1ab40fa76881c62e813c8867006e882137334a4514587a3b26926d1c18f65daf8a0f51183d879e46a11af8fa37703b354fce970945210c17e510981c6d97941809b664cd20d427531e773b44a8dff8a58e25b437b41fdd869a7549e6b93109169783c985d04cb0b1793db36114c4df297efdb3ea6a0d234b2ae161287e54a84e371eb48fc08ebd96cd901a6ad044da07e644ec64b59c9f2f85f0e25d9697f758edcd4b79f40736060e7b71b0082533f46f28190f1454d783448a6edf9db3b8cee30d01ea4c3202bb323ef2f495f84a1f14e7d0b19c45442f437592be6c4bd1cf1249ac43109569197454749ff70c78aea27c3d279a458d19f0f4d9be90d3392a06fd91442f115986d69448f5ca4cde3bf2bc497294ecafbe008011dfb1d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a57831ff9efa47b68c06bd5d680c5774b49b66a8015dac918b57d1564423a8feaa7e4b9cd0be433c84596bdb19c826b810d68186377e06771fabe8f617f59fb999272d936a2c683f003575d1faaa70af9a4499795ed6823f621f0a653012c0a3227f3bc4ce049f939757b50d3632f13ba431de631976f05ab8bd33fce6a58e2eccff144cb80753b3cc7f77773510883fc114c6825f4efd42cfd3cff64df529e4716f3057f37d1c94eff70fe5222a1e082b023acb61c974760c9757e3aa675da80df4d225eff4fa8842eec046ca641e8f4be9956cbe39c5b42a54d140819d18c3d78d0159b3f0554d2cabca8619d840aea7da5517ad3e2743046bf8eeb4a76feef98475f85ffb2abc8a454c488ea59189461d3861d65f4ef09d9740d11849d325a195f2cb6f2da63e552804fb5d8953307b26b33193c2b28a207ceb0214bd39f17edcb2d5ca7d708ce7de45ad57eb40a988c351de8f0d87554b5c92af94ce8e44f0e93f5cd32ae4917ab09c19a645de857f1cf454ccc07a7cab924b34d836a6d1d1fa4b9ee09fd153aa33af871fb3110a860bd46f1a132663bf6b58bf15dce02c67da0941aa57474e6494042e3903b9b1db174c7de534c20edf6d7e3bbd44a73800000228000002240000022019ab080af75dd06f7f9b07db635f59e1b3374c1f7b8ae25cf17a469a380d385100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000abd7d785783fd2b5f1a365399d8bf055d76eba994983fcaba9ae33eb907b61d3c8d44e3f5602e888eb590a047809f354270088313a5b3504a61dd2fc148d9527136d32bdb3473fdee10d5daec195934ec4000f8bd1759d78182e3a4a3d845fc4f2a2a1cffb897295e600ddf20bd8ccb7fcda967db90090b9551773628e88824ee7ab584e255ade87349e160fcd5eb0b74b015040c9aa23470dc37c77de06d4bf79958eae346093ec7ddb6b647a6c2598e33ee3c36011fb8305900c1ff038b3d8db12b730f36333ac1a99456d34d4c9a982a969cc76d748bde38ecb57016c55016804d1dff11c824c25e180163fe48ae1b82c4de629afd9bf8654bdf18be564d55ac356184450ba5c5eac3c0404aacf5c829b4c19b2edd70d321c7fe8a14cdffa85cab7ba3d24b65936575db71b9a9314f135bc058d32ba0dd71b5774f4f213248309bc799a8571f82c36885d29e708d1878c4c6c4e6de2d0bbf3eefa1d4363393b2212503dfb0ed5f3311ae5c4945747f880ca7febc57469bb362835d12216debab723b5911237aeeb3e746542e4805f615e3f70c0951dd94147867b0983e0ec9932a952274aed63ffe44b284df34dbe968688bfa03b044247d812c55d88c2d1000000040000000000000000000000000000000000000000000000000000000000000000000bec47b002068a1daf3ba05f7be7d2a66c99e280ff376ab6ddd192773ac024c45a3a9dc569035764a1b6d53ac709c9ac62fbe67e11fa85a3b42a820ee00f0683a55ed302e402088090dd1237e1d2ed451976f4681b16257261be4d82a87665b8e6a669500e590638bcee4c9959bc2ec2440b370cbd72d3c428251d327ec888b2c44c8b688b9500000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081a29e54f405ddcea7b172c4922c6dc571c2f32233ce293a2712609bc650d2b107c2fa0837f4bab324dc67dd59b26fc9cb3644ad3253ae11bdaa384fc7892cbb11a08228f81f5a53532c3d607d0c9c1111e37358a8a09865a5ded97413eccfcf6c281b7e94ff46400809a2264c66a2fa4b3daf3b9d61a39a1b6f0b5dae30183b21e0826c2ea4d218e3e2c32efeb466af2fe597e4c8aa71db813661d5e5a38fd237c3304dd2e0c628a4297230da62ee64ea285808e0e7fd1d517e7a0bc45b3e835e1cd0f06ab6d78ab229a79a06b37eb8c3becd13a3930117a1e61a3d4a50db91148ce4d0449e6541c13ee5d4aa16961b9b4b8480a11b0f6aa3208a125fe53dde60b1668b049081ffa2676a87c1b15df72e288ae2b1376653a5ee7352d02f362828f836c440f7297536376f7019e97a689c0818448929e138ff583f2897cad60386191d83ec124268d828db32dd832310c17228b013d72b70628aa4b278a972ab9c02f41265cf7013bc89f0d5f2ed4cc5a77b79f6ca4befa5790d60e25edae0aa457116b309d93d9a6df1d2577affbb1b78b407432074d496e600cb7ab2fdd7c9cf17d48457f11f1c0dd007d56ad2ef4af26194a956b3b7081b04a4bf10b1871b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f87e19169818a0f3079622a3d95aa0e134ba1fe0fd5d311e052f0bf11bbc7b62b330d69c6b772cb34eb42df6f53fcd4fa4d955223c48146ef23079fb9996c529bf2f13a2ce066a513a4bbeeb8919c92174c8ba46efcfce9be1d91ab9546749ed931378ce628c349bfbe2ceb3f92bee1e0a2e79afe9cd97fa566c9171faf57131aa08eaa31db203a94d966bc864359abe6da44086b4c7e17f8f1dbc7c01831d1bc5a56b568735faf0803d3f21bc3bc4d4ba172c0e1d180454243a6fda096d61cdae98198b7d9a337707dea34e3be2be83471cffb284da9a8b9d6a1e6ce9820cf5eec2e944f4275e46362df4131a129f2d51873456ff00333cbb76c262d021e29d378ba84c0a7dd339f9d4de15e0b41f323c19da35035af2381adef7d41cbce167a3406ee66d0a2762dad5ae9430244828403c4325b2091c8a5aa861478fa9c202a5580b23a85cb940a1c1b9664599266f2697afb025a507d63d188306779f41bf9749152ec52d33038761e74a0208224787c680fd636c9627f469dc348477899d953a8198ddf02e2016efe8bf5a980becb4e51a868d650bc6ca55f46efc7eb5797cadbb1cd6c811fa7760983af678c0cb92dcd46557ba794d0ed45764b8fd77900000228000002240000022005fa6cc5981b462dfef025600a2133adc30ae6b120209d994f6b06590f8e834e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f8817997c17ae6765390199c18d75a4b3069ec3098aee153072dab018d1bfd4220c57f1a0835bc0b2f9d38725c9d01e85f751b9c07f3b317df571e2a8dd33650397ba3ac0b6aa85b30b0b14ec41298f8ab297d94807c527de38389149444254abb17cd1276f9fa3f3566b2d3941a1708727f73e8967946d98bc790d31d4ad90eea1f8605caed989b7e1cff967212fceda3b365f5fcd89311aeb493335ba2c34d805c8aeea71ec1b365c7a7cf790b43b0e89c306161028c747af12d4c1cfc971d2c0a9e8f21451ff8d8a30c77b8cf05b53b6c7403be86621e51aa43e7151468dd66461489d39ef091e2f63aba4400d06ecdb9a183e0a472e0fa5b11e3e5d67b4b68594da8fcd1fb0a42fe9979905d023cb8e5574dbf1e349bfdea1899e7cc5b0ea1efee4250cdcc660f19229fdf646139daa658f5285c5d01ad52ec8d7c37ab2619bd26f61c64a4143ecf46e305ee0484d02aed75258bf52edaad31213b173bddfd792ab18f2454bf897e3c31034def4193ed9df7ef94c009e3bdbad55b6a0476737b64b3030898596813391d5f227ec02cd1f95d8a88b307abd95496518e806da193082068902f19e1d5b726ba0ebd336c151838f79a53accfb44fef8f94a91000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020e11aa71864460bcc06e38e67419271d9b3e609ad1c69da6ee2dc7a98cdd2aad2da03bbf3c2ff945cb0da9f8ce7511adb10562656a1977f7a0e356e2c5e250ea02091447fb47a6ce3f77aabe8a2f0771962adf4e3b917c3b7edb553fff5cd282e212a11f913ff09725151e4cf46e64c4ec4408747786527c0350279a872d0615fd00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f0376c05b11c19d6ba180b5071d50f94f627238574a53895880c639630fe10c360655ca220b87c48dbf73962495620289911a47042737446a0d7e61c2901c182c147161baa9a3d66a60922d6eeaa125cdcb70cd0e0d79eb6e3925df073fb5a0f4538181d55c36f9ab6884e3edc294f95b8b4375c9e0b13fc20cf766737b8157b4f930c51e3d0e8b91c28029fca251b77c59b7ad914f914a56e5513a5dcaebb430711b2acc8d766064058a5350f48b6f89946adcead639166f8b78b29e89448a168a230377cc2f91ce808e2b8b5ebc4a773e6c461bfe058d39b9d9c17185f1ffb2ce92d367efe9a737697ddd4c1c0daf7650c2c3cbb90576e13fe4347f336fa5e06307e7fecb292c04b0f8e404d70c47a7863e54a9133c171a69739d62c05271a6d514881637a20cf392054713a9339f0ed0a1afe1003a4be0a5bf6f58d4fad8c7277254232fe1b1a7a3478b13204be4917902ca90e8ccd5b460d160b93552365aa242911eb024623a813c3b6c7b010a7fc4d8d854066070a5058b6ffaf0347486b9188b5ecf875d065f4154acf7ab3d12367926c30f3d85f498f68b04e1d4d7038f53e5965288cc78a648a3956839d34d6be38f984dd8ee8f6e0df7c7a0a81b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7e587ff410cfc1a059d7af54f167e6da8cddbd43c0c3e2a2193657f7936604a3f469e231faa38c2f9861a241880aeb126fa9224a65c39b4d2bcc60cc8518a66d48c68776c8617dca939c63ee2539bf9576939374e76fe6ef5a858f11c9c004c1aa13d6c0d12ae6cdeaac1b03db6c668945ff8ce2480323f9e9386092bd0e11e52b0e93ca76d42639af526e05f44b72a8e3194230e1c415dceaac5522c493cf3e697a03e5887f2bc9578afe96a172ebe2941d239477666c8592155e21cd53fea5c9c20cd744a7a7f5e5e5573f6f5c5aee0009ebf3b9bc3e81831bc22ce08669300d7eb879bac026c01343b1b2f3b5af68be4e61f31ba7672abf336d8ed3647004a0a9073b68e045e03c68a5a1e0e71b6c3d9f6c92b9c6ad64945a7280c63e025442e333b8f0cff5f3c7545666405aece369434c7cb899ba65baddb13aaaa6d07c521577bbc8ec8488b5b7b8c03e96e9b52a14b3049f1c3889490bbf4720acdb02affe1e8537a5e95ffdbeeecbae9130e777db42a8ba558cb126e6478e41222d61e82266c1c694cf7b8f722aace4e0298a8b3789d73d846c01f90d60c3e297799ecc0223751f2d6824c68e7b88b69be462468a39d7828dec38711dcb5dd55f8110000022800000224000002200093b50cc766d641b9dc18a05c8904d509698ba8febf445a0525e0373993ed4800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000841c20330772bf489d11f53780dd81331ee4765eb4ada1b166fb447cab9f6724faadc6b9307c389dbfc34fe05f9bec75a7712bac1355be87765604518e726636fe2f1bc951c259bc2ca486cf36eef3d4fb81c15e1cb9332a2ea6b5e2c7651c9f0d17eaa74e8624dffde13066cd4a7246b9cfd7b308c0ce294d56238fad412c0a6af1cbf76b2161742e0b57630703df2eaec581eac291f3c143fb41e69ad9aff3a8b7b1cbd3ab31a1fe7673098ff78c014f69f9f6f9f0de373ac61bdd3d5d2b97ec76f7ee22821ba1750ff416d33986cc32c3ccf3f79788c5c7c1f730e5cb8cf0d40cbe1bfc5682b455a7d2182a362b00b333b2a98ccf331ab0a7561aa8aea3910a6ce6f05f78e25f5783e128cba56a049d959e29a84f4d76351ca474b3c5e7e4341aca3243b1b9bba283af85a3a3bbcb2698469e523988e773206b9069a5c4d6eda3fe1a99253734fe849e36b80cbd611689ba0888b96f86ae49a8850003c6019614ef0aa030e3e968ce9fe4d9a1dcb0be9630e727127820cea1e23000d02b730a9a746a42947c7d20b140f0fe2dce1ea9771efcbe4aa13c0f27efc4c9c838391850541c05ff85d6b4567bbacc88002235055c8c04b0ed26a0546c0fa7662940000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0022ca932aed3ad7dc2d5a3dddafd491d1280f7dcb8d13abca1e66124b26118056f02e5378435ffb46a5288e25e0028ca95a4f7f161fb06c0f706273b16a4281adb020a5646782b1b458ab11cd1694a4ba2f397a04b218499baebbe8af92b41a84f0a1dc6f070e7d0b5ac74fdeb0d7acf55600b516ee2acd3ad6c432c6b1719ed51b000000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b04b27bade4205af2b6491c67ee48164d1bbfc6b994203004a5da072a68225fb3cf76a397a667ae8548671016f7098140d5bd989b0814104e58906ff7ab97e19d159a61e20a3b7a1c3602a5faf3f9f5e52537874a53b49b2cd617dfab88ae25a13214e72a6cd1c1b557879f42cacdfaccb7d9ea14f3c4e75be3085ebbdd2ed91974ee7d8f4fb885c6e17981ba84438796ab3bf5d0a6f9db2950a8b8124e68c633d8f70b6b95a5b0f5c32001212515442089245bc733774e96f38791620058dfeffa3a69df0a214dbb6b018c0e4970f9fe1c0e43b3f6b347a09cfd25243f82dd60828fd0f3555fd99b3a0ae63cb5f65182fa3bd2a0b302821e3477ee90cf6089a5fb00e8d784fe0a79e2e3bb66a2cf281dc07c0299966ee5089a317d5b27bfa196f3f96efbb3c69d8b756b3c230b2f3365514405ac828b080de749794793a59cecbedd8e9e6156516767352c5c25c8275bb3ed9c3bd847d388ea90378d40947c1069cc46b10a75f641679fcea33ef7c9e52f840932170f462a98f28629d72a0802ab71b8a4371e97cb0936ad63774abdd3b0d2e5fb71f4cafeb422ebbcd973113ae601b3c4ef9ecec4b310b2fc12f5e88f040663a857f9f1c1862ba355bb7d365000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087bec6fe90b613e90e1edaca2b73e86528b1f9c7a07a28a45b6d7b25d769c52ddb6d92644b76748e1fad810f86065b04b0164ca901544f6d2468b1c4012f4058d3dea9473088d45fee84987c309a8644f2d7a1074061af8f67fb965865e0d963cd9dfc3512906beb487982e835dd3d484f3c0f39afd997ec32c37610421d24aba0b10897b046d4441cea47a469384a0795ff5e38b19ba46ab1014b0de55235b69c0ee4ab3de1a406b34cf4824d71fe04b8ca1bec0b1755a5e0b6fabea38220cb12d473d92d8048d998432c34db5f4bafc552bc7f9c6f6d7fb90956545d78c587b876a015dc34aeeddd9e7729928b1026d6eacf44ca5d0120e58800ed3b762716fe972dcbe898b9cb39f9449679f942ee24169a0a0d3ed04ef4d90041f17334f8985255bbc99357694cbbf6f4feed967f83668c297dd174318defa334fffea45f7fcc3f1cf77fc96d610807cd94483cf56cc3ce6a443c798078dd62d426123087eb6f84f337db65d566e67d50bc0340d70b382b15d3ed5c2bab89e4ec8eac89ffbc9535786ee0b8d44cf3c0c4684f102ff542c57c85cde47d46130799b93d8f8a0bbca51d33593ec7b4088aa8266a381e9f7942e1344ad40d122015309ac6d8930000022800000224000002202ba37a24d5313d3be14cd82eb1449260273e153cc17041c3c801b7432e9358bf0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087fde2c9357adc7e3d52c038a4152aee59ca31493eb4c7b2d076e38a0f42badc387880d35e2c2ade321acb7839e8c755f7d63d4caabf37b81f1c9ac2f28156b9eb3d8eeb681acbf1881a647e1769aa6de388c254b6868f5bceae063bc7b1ae68ddad480b181e896f7c48a763d27f77b84ba9010e43315e4ef93ff2c1ad31fe049908cf975bda01ff242b9fcfec097e4abebb7efdb4c6f6f68ee7e2239798f9c650d673a6b109620d6827003cda974c2d9dda4c3ba3683eb96155b2e2dc5906cb2ea9520660a5a434dca6e88d3ee0618aeb257a3bc2c280871e143a0e96b1a56556fef08e8903de194564ca61e771d5d0a656ca17e2347127aec5dc15e79df35ca3630eadd96db1000abbeeddf63b0037a97dc82cd70d4ef2823f000acab951ee1e0ef4474540c46691e0e6140bc0f5d196ee3421be55bbf8bfcad2c65bcd03c6bc0fb704c3883fa866d871812082538bfb81855efd8d39dc0fffb233b650ce2a1749d7efc824027943d3cf972445c1911307c61d80ca846c1da2491751df9e8e123beda6375aa97de140c36506dd2ab3bcf1dfc66fef4762f88a81b3b1af7092283ebea972fd01797e4619909d13bf26c9e7bb36f8c3a0c318f1d562cea52445000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00228a2004b810fce1cd28941651d91d07193029ee98823f068d18ca284ffbc170503f3dbbb5f33e4f21139f83bbdeb9785ab292515301646136a147e19b8e53212020ba5730ad479334626a4c92c842fac7fe0ef96a733aafae62ad576df99aa585f07fd587777c329980b339e4da83002e8a1c1c815621144fdedaabe0c11c8575500000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088150b1c6ea1ffd5bffada55deea0e49f150439239fb702710810a2880747c62c20da0bba29dd513714bb435b9ca63d03e1357ec2d6c99ab2e820ec264e30c12a10d738fed7767a8c438f9bc62e4dfc03ad4d4e72d86549c860505701641b756810d61cc976fae7f105151022f2ce0dcb4e8234a7e43170ceeb410e271a3255841600f3c051ad9d2a8e7bac8ad8f71d71a9933a5e1cadc73a8fb3ad61f1dc1af4827546f13342eab8e3829d431597f010f5c70b29c047a97f317c9eae3b4b8c831cdd92e81297f647b83127078b10ffd807e029d59459d772f75d534568865af3bb675628a89e629a640f3e85d14fe796fc4de5189a0b465e88d4889576ce4a7af1bcef4b8fb78d098d94a8d2da5366a3c5a7d8a990cb93b0f85c4939099c130dc017ec3ff2addd2bf8d0cbf7ba4e7515b7507aafcb5db6f7b032c18f30a8abe14ee8ea926f6322cc0c692deef0bb72ede864aa4adb1803b6756de8bd64278a38986b081a86e5c3811d543af9f7af9ac5cd238b6774edbaaf9a43a619e022df280aba768159e84863c98afbbf472215d465ca34dac7f49909e8d651c612a717947ae63805eb6744e5a501e3f0687c59307aded5a9210be92da6eb979dee0021d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e97de4a38b6cba011f23c641750d0f68fa611c7d23b4d3d5a3104b549a1b79e49ea36e3b4ba5ce8667baf390b8fd3325f432eae2fc22be11afa514eea5135b2675fae4137fd0cbe552fc36be6fa5e36ad7a9dc1c3821ebd53f8fe7cc6cf458fc8f5edcfcce1a87f731b78737ed0c4152af99fc76cc725b4d7ed59a8c7c81d8bb3f0ef45ee368f26700d6fcd131f1bf9cac36e4c963470657248ecfa028c5566295eb1225c77005940427ab53445ae56646d5df2900458f5ed4f7428f2e76bcf3a0d330e2d8e6f38b81dc5a2f3211cf1db73f6e19a3dd0300ca1c799f59e300113830617e8cec86291f610cebe678cbd1367a7cb302754a01d44e45b6210713c3d1b8a323a46e0a44dbac205c92bb715f287bc479d39551ee96a6e305710c25d5da92015bf93ecc164e5f3b9753786e7718d10d0567bc21b0e3676a853886ca35b07e7ef452e65e3b956c74a93f5687ac4abdd674e51ad9417a938dc9abac353f347510b70043f15ad465b60a3b1b498210b6751f4c40d02279be72847811c2fdd7cf50bfac57553a65a706c745ef49532e2292f2f36e6d0c5f1546d7e56c9f7542593ae94a145230ebae11af1b0534b74a33c3e714a2a9ddb4a0cc9956161600000228000002240000022015c7761a3f503ae26be410442e423022cf3c2ff5fdf7492d5f1e67a0a4f488810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025af434df9d7c0413b2e3af2f53befc89b58ae8f1b533faaf94737d2890ef0e90564a07bc4689e9620cbbcd48a2fe016b869861dce0e9d36b7ca5e413f1fa10168b8d78e7c1ef85688859425e378f1e99c8883aece62b951645cf9a77ddacf6d0dd7bc501760f75e2daaf7a3c500db8bc6f2e304c62267bed33c966287806d4499011fdb8f513559b372a4fe1d7d41850b7d16aab6de1bd8c960db180508da100b7d468da798bd295208a61f2964052c289d74d2ef8e181578609f8f352f1a77e7b47e966e6464b263c45857efff9c6a2255876f4eb9a8fbff6de7116fb63f6d7e59ca33dd094204557014e91723e63b9bc99f1f646a0f4b90104a1d372f1752389af58810452f5431004340492cc322531f21ee0d6c2fc27222299859345e0a7052e1c7bd34fd4c842127e6db73fe4be4b7f736afe1ddd0907ccaf858aac758183a1b8bd740f51a9144f41fceeadeb27ec8907da4e59a22d3ab2566769b7c43e15b2c7258ca1e4e3aa8fe27ef95ccb75213e5662187eda97254a563ad8d6074a2647940e0942d819ad98cc5083b51881d6fb2fcd761361cb6c20f3c76115596f158d033baf0cf4ac4f5ff5134c4add8f167d6c4f05ceba58ec270401b2feae4000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00209de581711a35cc6288f83be98deb3dbb591025387eedc8e8f3276aaef109e2a13c994f3e0e12b4ec0e7e677c156109c1b14c450d4795b6abdb3fd59ab8fd88b020baaa95ebb750e2844f13140389c352ffd70e80df6c64d712a46512ed5d0859d1b6a892b1ed5069b3572d08c4066db606940318496e18e6cb74adf5130acb33300000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090a36fc3e9a38250805136a346aab458af6b3028507f89ed500edf5e2f42b1e978f098c0093c84afedfeb70c8854aae98c6ca43fc94badca16f47791d02f4c0524be1f575e2d50ce693b5f96bac1d9f53b5fe59bc0a37519fdff5d48dfc8bb1c67cdf890f838f8fe95352a87e3d9b596a098145f0768b0b6b58aa7313528d5b9e81d103f45f188d638b6eeb2acac0cb74a1722dba2295903ec8e462c1ead476bbc8b9fe530e8d09f38ccb7bb077d201e19f8edf79bb885b449b56f785b1223dd595a16d4e4f083e1a7b3d28ec219ea3ae34befd60ac4a1561fde055df9999d9ee7988b1ac8dbfd724762e4d78ca8d134354ac3d469b3c422eb079eed1b93571ae9577a392357182d2d73bfba5901e5ba63f793d9c86b7684e885109018d5c549741f1ad75042591a998ba7f1092b58fcf8c1ed438419ed6b19e799d51bd71a37c631a5fbb9eb967fd1357888904584f5a49f89ca677ff3e4c617eaf360e82be49fc2adc9e25c275c90c4af466cd3c494dd7f1150d66d9c8ab22b5519ca361e16de2494c6617af13d655b780a1e8bd3396e7bb35981c120269ed732f1987c387c568a3b1c8f86131b592e88ee2ef39a3f768d841cbbea7448d7c4b41a2c7c5187000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029952378f189660ee6aa9d63a05307e72f076d81de7ed2464ef47f5063bfaab6fe01b18fbd104fd1e6c7ee18c377fe487d2d9c450f838a3ec82781551b34ddadae8bb3fb61af15b69a466e10e581b8374b0b8d292ddd041382cf57107a91bdf9b6d7326ee3a24a6c061835beddaac8b85d8d6a45624e1672fba23573b53a9271bab72d849de7e3479dc64dfa88e597c51f791a30f0e1a6b9a960374cddc86f52062fa441fdae09da7b30751983630144ce825f54fa347615a911e4d3b1abe782df271fde1c30d25e574648bf262042c11dbc0fceece8fd3d84390e931da1084fb6ca51ab75b8e315da18b85672d9621f2c356aeed14930927e382e4a051bed3e4253beed13cb713dd97972bf18017a0796b31a56d89c288c32129ad0b09c223851db3e1470fa505574965065d15b153f74cafdb712c2b1f16c358f7cce783a1ca3fed9954c1af22b502cc64843634ad5395b3e35d65c5b6a6e4f8f6e67deec8b4547619fb1207c4f6120a598d4ae3082ba14ed0d51668f7f4f81622c4ba924f000a4d437708995210b936a31aa465bedd25a34786673bc2171c40c68423bda2a1c5b3943e3d9cf17fa33f94f32c161eb51f2923f520bfab3f4ed5fc2889a128500000228000002240000022007d5c814c236486923f7cb1bd76b91f8fe0c0a8e797e0257fb8fe40750c7fadc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e054d4ddd06abdec5fcfacda30e30ed421216b12269afa63cb60ff57a6949285de6a2f008eb31700839f7e654dcb2801269c95a1fe13115e56a8ca088a7eb764cef6ba99951d90e78ac512181cde549426da5190be770403d4c6b0392dbc41e0030adcdd204cd6d1fd3b5a80b78335e103b3b76afb4b2d2a63085ba147441b36d0b6f000c6df48ddcebeb33bc978e597dda8af67c5bd1be366193c1b304d95f621d933024611e572edec654c8cfd89d382a9f14c8b570cc3cdec9f08796a0e1ab0cbae1a4afe2cd0ed2b14a2e439c165fb8c19af0ebaffcbe6a3bfa2e463deb63f90d099017cdf63a46227d5cb1dd62d5ef9588c4794823fee5374579997eb2f946ef48f366793b17e49580d718eeb5dd507cc14b9bfc9a5fcde743be03f8c5b7c8393b3d8d6dea2bfccaf12cd894e71bf64d9b57cbc4d6c7e507ea52fbaa3f3a432ee9142eccc14ca8a50c6187654802ac0689fa744e6f26fcfb9b6f6ead1e98164190d6f11ebec642094920a284be3a6d54c5b3d6030ce53c4514044f6ccb6a7cce00ebfa28cf9a66b16685bea7511d0d64d017efd83ec34369b8f03e6f3034694d3431da0cb9ade59ee885adb6a4a354ee2826ccfdd30eb106a01884af9000000040000000000000000000000000000000000000000000000000000000000000000000bec47b002173bece10111dbe07e9deff2e407dd58bf669266cc0e9562111847f50f6003c904f0c9f9de96f5a5a18a0b54cf692bfcb1cd686cb63b45883fbcfc5966b178c8020d0a8cf56644480196db64730755119c810390ad716fa2d24d5c07c487db814e0c8a93d4441e4ecfa2a2f2f6199e3346c8421dd0ffb866c57ce61bb244f65f8000000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e343e13f2855e0e7ee0b188ab7755f8d2533ba663db5a4a35dd2f496297b057a986e4f8eae4780927c5c6fe4519a7a2d4aa9c90714d1b3b5a123f66ba3258a94fe52c1e96182d60bfdbd00c585e1200d2e1de8eb73513aaabb377fe03ff7f5916329d64a1f7bc611852a1485e7ab90a462d8a676d6ec9bdc0fbbf500382a4db99b3e5288ee9b82975c2bb6e62c81683336af75aaa72a54b401a9e3c29e119f13472d3a60b4bb042de59c86c68b6233c5fad20a90e856fefbcc3fc320d7ca4f98782c644d400e2f69794bd6e789308ee6cc03502531c3425b502fa42198334b47d60bbd0629d51b586dcf89fa2d7ccc8c9a94cf5b12831fe006ae022649343f1b6d8af5a505c5ff421f671da521389d6468df20ed915b95b006a955dba2e7e3466e1a7259b9077cda0635105d9df4d0ca826b976b0ee1f3c3326b6ebe1f196a6e976cad02b27b76d92ebacbf0b2ee2d55ad97d9204e8f0426deabd737518e1430c9c575e297d73b70bcf35d092ac8178aafb14753fca5ada7e3bbf148e9e6094b5400cc1df106b51d617e7a83b77a680d3d088ba6e3ee5eacb5a0585d57b213d831b36471c4ecd0ba84f0cc7722ec25eabb34a20afb278066fb69af492fd9a1a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e5ce08d570673e39d79cf8c1dac38b40d917fee2ad71e178f4d53ddfde7b6856550c2dc2a919b1eb52f58367d6083b0291b76a659baeb00c077e2b6503df0bab82ef23c945c66ec0b4a9b052a80914d735a878b6e890d924b4a126a9c93fecde43208d5ade1a2234298988d11848b9b46e41dd2248d1876a09edb5773b18c659c967708894da5059fa29353d57db9c937477f464c10d90dba8b15c40cbce2df6734e8f697b634945fc422f23c2601ed8d1110a0bc3a46dd6930fd9ddefccfb8f540667a03b83ddfe11edc4158aa4dae51b7df1b627a9ddeb67cb99392e270e66814dec7eaf264e87fbc79174148058468d831557c06c9358afe0b5f6e2e05ba7e4e4472970d855769a1e481a341674ec509b0af2ef27cd34af7a023961b64638339a551ce51457e6d8783bf75f58afcab0fe6e9d0a2db99a19e881d9cbdfe96f4f3e332ce81e87f3a116735b705bc80cb89d7e2b9b421f71b6d3fe6416ab2666710289bf6d1146b6f6b9906fc521cc0270b111bf6c5105a07eb86059b23b275b5de7af60a7056ecbfe6c13dd0c9c33988a66d4b0ee8ec77c01e0caffb5a157ee0c98b268683f22bab985348bcbaf6ace6f667a93dd31d97ca705f644ee19f910000022800000224000002201a5ad8d6d6d39b616500859fccccd45b95bb859a6a9cdb2558f467c68545311a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000254613ed98d663c733400a89a8d1c89bc8d6dcc9b090057025bb1163f5cbb8764fc9d6b7285774665b02c3659fae067bce7b2e5db56424a07fb61f9600aabe9d9597e07297c2138d046b34a240d2d96fef1fd8b15371337921c98639e3147f39f50e37313ecef18fce76d90ff71168209b7a82434595a1a9df5197a6b58559d04f038c54e1bfb6a1612cd501aa97d6d6ad2f731f789a1d0f9aec7e3061c0f1c1e50e80f96431b4cfa39e971d4073670934e6a9c70df726d5ca7ec596f54235b31c5546ffc729e457e2b97f03bb816cc784015ac4835cdc926c3748ca736c56a23ca280704515eb0d5fffc90e4d1a5ba8b104c76f178c49ce06bc872201f27fe9ae0fe0c5bd86bae48bc7d8c5e88595cde4cd75f14f707210ad0ae4700cfbfb79d4a4ab8c1112d14fc4f984772078075635633fb68061e153028552cb6dc853d7464a7b0820829205f0cfbad2cbea28fbf66edc85b7aae0804d21ee011b93c4baff6e7b868b75233015b416559ce969d94207027a80772346b8c40af8f8b47db1e57d75d5d8c6f36ded8ea625d70c80ed48b5f614e89dc1c1bf8a73cf19a30d438d7ec432a0a7425eda6cb4a5f9e544a42ae820ca3e3b0918af5cf9414bfebed8000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020791f458eab2fb4de3319a14ebd28873073e4bcc691e8c1616abcc0872b44bac1639aa0b17a7f8c6ffb7650c532271e7fd6b100d046cdc7c9868824e5c11560c020d41483e0c3b05c5cffe486cb9c3421f46ac294cc9345d85556453042292b26d273ec1b47b60820fe4f4014d2bfd65799637ebd5929b841b8ecfe115a61070a700000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bc4315e62750f1e9297bbcb83181d4c0b9f3363caa055aa3fe4e3dc68a361b56dfdf0b5c214c306aee01d0b9ddc43879eac3e71ab458979c8e0bccdd53c6323e362934c34bdb6788f0ff64fd2b7602337701dab08183089d04c74dd5ed5a4e5a47bb75bf0346924ff649151b97ba14941c46da4c8493d9670519633f731eddcfdbc570bd9dde5a8717d43b54788eac5e6b379e7f186058c8a8ba16128f56a610062d2c985fc3a563d7d165a875e605fafdf36cf1b61bb324d6e96def1f77a3eaadfce4e7f69362b975aa4c16a7cadd269c8725f8bac67c0333d5a02422be1398760c3d347fa061131e8af32a808ddfc064b2003aef167312b1317cc9b2c278ee8dff7b872dd9ba4773d4ff280b0e919230ca60e5a326e4132ffe7e3bd87646631cb1b2f1c8c287c6b93e4c00495ea72f166fa4f478313e1a042d7e71d2f0778e7ea9ff545bf5b3a78f77855206e8011ffe07a681a9f001d4aa1a3f43c883bf171a3229f681f046e5e4bc1aa8f7e5e8daf7b400cc315b104df980cd80d2f400579986485084ae483626ab09fcace73066f946407b55a0d3fb73b68610db699482b4a256f88474434a433be522c6098e9dabef691433f8f8dcb879edb9b3ab1060000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000972b473fd720e1207433f823767c7678c953a157c395e98db666fb1b78d551da51354566972cc22093323658b17b31f6ba2adba4d847123ce651258afa67b8f8c52755ed25b7e7635924af590f6340f55a05efc5a5dec5307d0616ee26d01ad152881a0c2fb1fbbd83e3f946493515843da3c8a68cc90428932a75abe48fe9c8f8e16031a18fb21d9af3fe9ce6aea8bffc3cee035b091c177fea0b8508499c82409dfe4e2f0a45006a020517b2447b12b5ea2168ceced19154f7cf0e78d2fba227deab687c51078894f8e48e16d3a94ccd707ed8b29651d64f0ea450c69be0bca19b8aeb81809af1d254f21bd576e32cc73ff0422e1f48ce80ab7549cdd031f501c573d4e4d6c0abae517281469133af290ecf7c3e0b599f74ee1d68f1c79460856678c6fae3d36a062467b5a4e9bb5c393476e90717a9df8f63c324de285e870e8f42157bd410425c853e12f0d50dfc5a0d9539dbecbf1ffb5d7d3d97df1a470d9de8fbb72c05159fa8dba4c4aa2efee148158f210540b65fc54c689808bb292fa82c265b89b94e04fe215d982e37518eb25cae6a75497432950a0c35841195ab4874921d5d4654916cb29a9bd87459966b7131065e54a13cd35be44b8109de0000022800000224000002202313eeb7b1a5d328fd324b0f7e3edde4072135bc7de94ee2cf6b9fd745c97d920000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003491d55af0a1e94b1c7b2756c4742d62d5d4aa24139d2b0370af7489d1f1d16071d49668282c358e2aaafdb1e896dae1107f5700dc77fa696e2f1ac3bcf8caf197c94aa56b2f697a70e62d4d48b8cb247645d1f5fd99ef3121c6dbbd4bef35e4980cd3c25c86ba5063e300b42a04cea2283ee29b5ed0fc4572337195b2cd33ac4710b66b6e26f7c687b3dcb6a67bd4ac544aca8d8347b9b0e34cdb60a495a8804eb000c43fdd29e3dc9cca0ecc09883bb5f44d392432076f7cd099da99bfd5f44a563146acc0be51e675db51b9553485f2c0365c2b925a27fcf82faf0a41ee79eb7b85daa360993787a4c05500710b10df723eef82a96fcb620971a0dd01ea3586c7c4e91f5d0f1f5852204565cc6f6e1c55f63def5e05c7da673b592804784189d93d0a7a716c899950629200f483b11fd49afda6b4bb54c8f491e23948485afcde3278207f7d8c180f9f0f05fa8f6cee4d434f7488a1cfa6abed1295df8718702a65f04e75560c689f6bc3bdbd397bc8ae371c130789ccdc019c687feeb2f8594b2ff8f3e866d5514ff29cb48a6b785b3c85c8b6f466adbcac69e31b2d4d6160cd24b2eca7355af332c388a35c00987af39f7b8739e4291bad18bade6e2c8000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00207aad6b323bb0d4ce75dff00d506ab7c3ecd4da81e592ad63aef1b3df835c42624961110e9b59d6bab03d1646a1208fd623a59a8754f7ea96eda6963608177e5020e90be5dd7728e7eadca177b982366855919509757eb3fd17fc42f0993a029fb1c99911f11a662f6f2a8568dee9fd6e980086b2bb74a5ef0e91d1fe42cc3e09a00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae6d0ec908059810b9712bf2d84a8a8a23f61c41d1110ab36fdcba4f9eb5663a1935192171d4003de69abac72caac696bdefcf6a3816bf3f83221d8de1382b0d300d4c74758249588c55f6d87ccefd440390db68bbe75e040d980c44eeb02c6d5c3886e8c16b061e905a6545906be1916af7c056f4b1cb83be53d5f3d50afbc67c12f25cf44e5194695de5b45cfba98334337247085c503bef72a015a9897a3bbc08968a7c3051a036c2376b4849f25d5cc47a0dbd5f663c30ffb174a862f19d22c51261d1b1939428d26166efb8ac09b675556499eba0c51e5811449517e164106c3efcee9ab37f36e16d241622bf5c0d34d7fad780e427f85770aa6d4f70b5c08c7577aa3d6af563fb46e07966d773bbfa58bd80bae2d1b00063c5635498c5ec0cdd18e1e23097cbe4c22a13d7c59ab6644226c4d3f7a26628ed338940228883380a63807f83a9aefa09b257c96aad98c0e6fb88e9f089e71f43575fd28066d993c51eac12db9cd06d4a56bedc64b6a7b50bc12df15c7ffc4d977671ebe894ee759db6a599f82945d6bd0ffd3aaffe2af6631cd1e2ae5b6085b90db2095fc4d2b9d076ed299cfdd67b3830adfb52f98cc657eb4c6af2a7264ad327712555d100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c2bb94f4dcbc3689338c7622967a48faa0110e6b5a04d23b0ffab08ccb2a5d788f8a9bebc92c98e377bd8ee65d15f06ee8e390fbeb7806c6ddf3025e967ff8da27cf8ab4ac8fb28edec7168ce0545f5c7466ad8eeeb9fa4e9d322f5fd3f2d0ecc44f87883389671a221e87f1e1ad124faf47ce880f3f6910639e8c7971e5af2535e388e0c00c8284d8b489ae4716fd76b324e2f7d90c7230f23c7e6b4a965cbfb45335643a5479e918074b7fc217e69025625e7cf432361c63a7b0c6083cb32fbea32d94f27c6ee117060678033a9d298047e595e82576fc1f1283d48389ccb4c42022d1c8925bc6e519844fbd05a727290aa1524291535e3389271bbcdf319581245c19b0d411d8a9190b95a70221889d7b3d5e4cef5e0ac45505c0922a2d9df125a068b479b978814c47f88a36c39363581d5d52908364caf17d547077c2faa2a6c63fad0bea80b53598aaf922d23f4210a3ecd29ab348837636a618784435de800401ca4063f67e07a0b42e5857ff74b57af3161c70dbb3ab398791ecc6c26d1c2ccdf47041ee40e4b3ed07958b2475f4b64abe4c266f35750a07d2b5d341d3c9d2fb32fd96fc100b4121edc41ea292edf54bfef983d38639ca493a506a60000022800000224000002202c2c578cee18f0b7a33d2575213cdcec2d2a517ef656c23cc29e28d55c30f28a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000236c327605231fa66b865584a9275d59ff80a4192b1881cd78085617be7fb24b2ff660ca64b0e29cf8f60fa2a8f614514d5c84cc257ff0c443e807bb692331bebf39373b08bf5a3667759ed26a20417e2c96efab18d29fe28fa0d942b93c30eab84b962267f7112912007c2ba855bf715f16426c397eac13c1842a9af6f1c3e6e951c2077f4571122d8d9f3df79a15e77cde7dcf36e8628531f48c5692fb7c1a6320a4488fa2ea3f31e5bf59f450f23a50e4683b50b0133ea1308c918d304eeb5deb669800177b6d7e8ec3d7f86e9a8aec58e4b2b3b4ce3b9fa5c23d8e6b4936c1d7529fcdd7ceca178b7ec36b149e7ca726a3520a776c3dfa5b7061bdd0f96a4537504946ca2ba78e9c7a03ee723953ee6f0f5c9dab1ec7347c18ee998c306c881473cb2c97a079746a825355019ef5323bf041774aba5fc45e44810e06c7ee00b1d9c79c835bd1b9b8d3c14ae0be52e1059a652aff54ee2f70f44e1eedd260b5901a5d38fbe1215782d7ffb4ef90e6a7dba73cc9eb71c003b9d61ad43588958efad783bca460bea6c2ffad607a1af504bf4c3d9d4a0af8ee1a103e85e9c9f2252894726d3a1bf1c5f191ea7be5c3b78d84222f4db588c48e0b0cf3ac8b312d000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00220fcb923d21efe7900df4cbf00bf8f1bcca313254779a4100faf03469eac1c9c1be46e64bda38209fecdd7fa37a003d777d5ff3ff46e94c7ff2c0d4af0eebc47020f761233657a1ad3f6d409bba1f9d8dcb2fee73efeebcc1318bc716f6b0c32d525af44376e4d4ce061bbb0188f8854eca1c9098b07f4f0fdc513bf2b73bb3c5c00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e9b880a036e1931f941b482c592480edeae81cb6742fe581a5be74d77e099db2726b91220c97099900347cbc591df6279ae8cccf584ca4209928739c69341444e1f4cf8d47e79dde2f9dc5a81646a9e0d7190be62b4274cfd3c966e4b1c245457ab2b15f46ba75e59abcd145c31dbf373c459b038ffcc7dc3408600128209087e389c7c73e174533c3ca65d9144856a711b4ef84f4534850e655596234d08802af0fa9dabbdf916e3c912892986bc25c4f129cc5c81d1964f60eed5b875427fcdbe4427d13467878a6cc1f2d460103aae8dfe08d5bb38292e27ad60ab03770c514024429813a71c93e314679dfac0d0380ea4701ae06270bb9dd0a80ba77713e420c67da6b5d1eb8714bfb2c749b05cfccef483066cca09bcf6880e863ee48e7a2b4d4cd80a38f53d233ebb74ce3c4c04bd6948b91ac0ac00a2330933b24dd270bd61fde39f11adeb7c42cb983752cf2f46bd71cc7052fee45fa0a2ae5f45ab311afdd72a7aeed7b8d553fd3af8d5dc15199689fcd52d1e2ea0bac8a5d586f8f2280dce23def61d536a71b27e1d9c5c509a82e3e74fad1f07bf38e96058d0120f7a5a3233530e2e95efb07e6c28ffca4191586dd4b6ec3bc69630aca5bdd3be0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000281d5b70f9a1bb8d225b0dff051fcf3d1f0620a5dee80e588b4ed09885f72327ec9195dc952d9619a66a036d91ccadc7f8cbad7244ca8d10843e83620d1157d2c93fd9cf63df4c4fb8d4062559ef55e5dec4e2a8699d87757bf0930454e7ff229182f7b119070526da3d56cd2eda90a2451c8473e9e9be62e905a783799b258887797471b2cc50056559c43b500e22c491345528c592317c2a066c38c41a1c0279ea2cd972e3b2383753ab040e992af1a62b418e18c4f58da44d685a56ee90dbe0068d6921fb35db196f56e2113ce497c618e4d0aa6258f52a634d15dca6bada497634cc410a96f31d06548c4698a13e745f6becaedfc47e4b0490b9b561cb55fc32260759b92585af2e3bd412cca972e12638d781c4f3829bbad556cb7b5d86a7876e2ac3f7b071b26a42ab10be29db5f4584b3c55d758d94082ca08396d8266f68748403e7b9f2403d82cebbe9e221cc08411d3a1a8da34fd83ad923a6bcd6d9169ee79965bcc213476fdb0a893089a783240416f1d05da5064c0fd3a506b8c7173b38cf1ce6e9ee143e41ff80c326b5bb3fe5c617e789f8e4b87637061a1b2a1ab72f6666522b5e3dacfbf3c6f3add4b4f0617b901d45e6ee3225e63d0cbf0000022800000224000002202c469d5e1184aca2323182e28ed57caf9a336613380dfbddc450446f0763623a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087ff5f1b286a53827a612d0013d551d6ba9282ef1df8ca00803486d9d04ab7ee5879c59eeb4ff15edc1c27521332077e8d0f1aa3c1c80d0e4b77f2d451695e0bd7472a29d3fff917591b53467890fa0a8ffd31e77cbaab531a1a05027ad21be10460912c939a9efd57cdf15a73e9ad0aab8a663fc73dbece63c3cc8a90b632cb0806701abfe3fe017f5f35fd6027c52d88714df297cf2f7a9d85735c8d3a4595fab943cf0753b858f68dd1578fc084941edbea351c71e1a16a15dd0ab93f628863c70277fca2ed6b8e7e5a5ee6aa632edc1236d06cbc1e1f6c1e0835e4e340a4849df2f5893b4d217a64934239df1fcf805125a0cf2c041899ef9d6affb476b8b0d3087a57362f4a7686a1a8529c675acc9d223d5992a4fce7ec83fc3c0ebe8ec347bd84276bf6860972cc56a8beab7dcd7d7b23b2043851933893440c1d086778d096ae906cdec38ce206c4985e550a24aed8d2c6cd025df9ca2d174b3dae6c891cbf75929e37b899970c68895312dd74e7776f07171594c80431fe078400ef0bf00ca9ab0e39753ea2150807e3182b196b352ec8b9ec022932b5533dff5b4c73f854a247133b2b2d9821f758f1b24e05b1d16b6845d85d3a062a70ab9c2dd8000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00201a4dfc12b8266ad06e867de507ca803f2e25097d463de8c0462a82d5b54cf5322e3808db57ccca8859a62343ad8646ac08f7cda5a1adb9f9b75eeb1e3dd24e7021087569c52562ac7885b22d442ad4cafb666392ab1b581f2838d5e7b2a606aaf0e76b0916f040e84dd475f64a0669b86a2cf2f3c23415fc42b5810434191407b00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006850180f7d68449dbbdbfd1facda9b63340596fb9f0130bcd02de37fc712159bc50ab7d342b6d4e91ec3d3415c14532b966ee5b7a9e6cd60bbe50b842198b2d8dfc458641623c8c80207d032a80626e90e66382db150c17d7bcb4142a90bd6514ee9f92f9181d54214435e4b0efee0c5402c7f50d9858c8976989d54771769fcced8866eb32eeec79d014a7f49f5bb3e7e61b533533ead411ffc6fae735892be4cb5a9b90de113b8769ae9cbdb2c31adfa68599170de0c504042b0883586a0a3c06fd8f68665404b84ffc85b4ddda7b61285b9edf2d90dfc044e07909e7c1bd388fe26a8acdd0c8b8277e2b6b4bac01d9a853fe0659b47979e429061957a2bcb73ec847267696879fa12b9b04ff83721b1a75a46dc90e4adece522ed3f982683e398ba1434db8c2f36d0f4d76a99fda14424e9c41ffc64e42a25516ad016149e67f650d30103c94cb9f6e7013deba2404e57b110eb87bd67cf402414339c86e403e95eb6ff38da5f9a20b6bca2bdc4f92ca4ee3c560702854c9b139e37b089df880f81fefcd4260875ea1463ca44502d3f7f474bb8b0a137c92f91a8cd976ce40954209bd24c1a3b9f6d89f107f6a903148584b3e379c3b3b11410bde6027810000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000885dc17e50fb58b6744241860aa5b36aa335f222fb067d124c5510ef078a23689a194500b140af649d3643011323ab464da9d831473466a1d93717e9cd20c1c78684eae92a5e5671334fd9e272901b214cd9b3761265e9a9cacbd2f942c4b92f6e4e1685d7a02de665cc8c4e0655d84d4316cd169fb0dd6de97ac4b00c49b94942861965bb8b3adcdc2f3abb341ecfac378effcab912cab97924f95edce78b3598fdc645e1cc3d58023b48f7bab66a7d06c7d5ece38a83eaa80df8311ad749a4ed979b5ca01c7b2310e993d0855da2cc3e84c92d8639dcf7979bb79695cee73e3b0c2332c647ba6da3335c580c21bc6eec022387fa41995554faca2c5ba640d23d9d3f7a06bc298fe7faec0a9bdfeb2995a873af19e1a306081f60971c12a380a67bfdead37b6cf329cb2482921923d7bc7b15baf974e2ecb54a2a4076f845baf846185999ac926f6a7cc72d803ae9a3d4f9effea942dda3c2c0d83d1d73da1aedcf1dd12781f8c8df3e588b11bc05220f260ee2654967fd57068be17dca9bca04280093f18b15a953151a908035d1f4c1ae4107a75ed226016659165f99642a9387fb13047ac5c9417dda6f4d873b563c1d473d9ae61b91909307a8001b8c26000002280000022400000220027df2f55f5b94a26f2de672c000e96e920396780de05596b1d7828e7abb527e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6230742c265bebba90e3a6fb515dabef8bfe926b93171fc0876da4dbe51fa3015c161eb9eaf664920430cc77083872e911517a9694c7255ae94136dc6a677910ccad1694db1663b9d7827b484562acf732ee0a94f8eda794bce39c9df3dbe8ab032170bf778e1a2f6e0f91deb3148ecda2c0beab08bf7a10a144ba6eff6f4e7c0c5279880c55195cca7a014677006487945fecf2c90677ed93291372f5b808dc9b6619227b472b5a204870cc835f369a18d78dc74ce26a52f50294afd0a7441cb41a9d08cecb41a776cb78aefcf5aac7b44faf58500c98df60474bdfa2a88400de1c5729c4b5de5bbe1615b1e2712e491a45d77792ef55a4db8024051c07893247abd6c771bc6c94e1f24b1850db0a492ae90626bf0cd8110a3ae68ee3b8e59cc0e3e6e853abe00cad88d02c3cef3676474120782982f386e20d621e605d08d1683a7da5876d20a42d11cefe28d2a9fa6405549c17d76d2106b2a9526be1ee0be550f2bfd4d3494c25c049ded8a0a1849ab8dbbb5d2a83734078a49c5f465e94bee72f035441e6db8f1f7a31afd7de5d2e50a06385fa52df6bb2925405e6442b329ad3e9b152a5762a5fef52d9dc0cbdfecec7a0fa91e8375a7b71d1a06e35c000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0021a359f7e41ff993bafe2ab81732a86b1ae1003a4ae95453ccb95488805f0321f1ff4d065f3cad25a1835226a0c0110d6cf9304d22436faa4e02fed2b533ed90802134cbf7ec0fb914f1b287337404e493ddafb60a46ae72bcba6d000df94c54bb329b5d79a901115b383237dc03c9ea62536a59c599baaa627a62d68e6f4fcb8bf00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020bd4b83c5f9a64e1865383d2db1ebc70964e434cabecb373e9897dcad58e1bcf3cc9113c8818017f1af69340e5d0779cdb833f350483914157b1ab8230500d3073e81434c54f8e370b8ce699a4204ed03ffd82a81eae1338b9ed92d7198eac4c95075d2407a6f157093c471ef14471a86998b3fcee1c780e70f346ab9097ec93d0233ff1b8df97cf56cd98b5225a041f4aaa600ff405475b918fc96268dc53b280442da984bb29d0ab5089970b719db9653ca2648b42e726900e325ff64e6bc9564d3c89f180e644c93d2289aebddfea31ba7bd538b6ce45965f13b86d96e40ac6a66a647bd6766fbb84abd8b8e1889e645eaf5e1d16463666d7f96cdfabfdcd40ccbf5702423035ce7548e8bea026894a478c2173157db250a75ab9dab7632296cb9482468b84f5a25f4629a7a81272cb1d7b35d14aa8a9ba6c02d5b93019b900de2f46efdbd3604bfbb0be7494eb63858286648c385da92dba9b63ac7863ea31e0c0b5d62d6800c0daaae8a45aa113dc45adb9e033de532cefc83a90e90b0ee8a6a043b1c8736a620aa5e4f4ffac541ed68719ec96cc7ee25157f3e1c48cf793ffc09989ff3390e0250af88c4dd8232104beb33a71e3f7c361a567f68ff200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c3c489c20e8d775b3452fd54fb61671b3efbfe015d0ee4041c68cea0ea03a75533d21522e55fe4b43fd46fc349674affcfd77d68435b5af9989c107080f5c8c78d83775466f5d8918b7d7c2939cc4e455d402c549e99f8ef094aeb5bf3ab6c5813d5ec8edf415e8419b03cbbe1951b3d2de23c1a96b341f6c5370a6fa9920c2e095b0ba6f09e57db2225fbf6f42b482f4d8d744e38771cb39d0053d9947136042e5f6215070972010a68fc5909236f11b88010b276d0c8bdf0a9f61572f860924ac2cb48c0eb395713df7163633257622ff62734debb92a273109e57527cb4d7c476d1c847ce6a84baf952f6a0d5c57e1e4fc62816c2ea736637d858b1c0e81a20bc8483e6fe67b4b5159313cc5bbc4ea3626139fc435fec633db9f1aebd1a2f5cbf13edcc593c5ad8b98fbe0f50ed07c7d58a6939d28b5da63808be84ea457b2bf4397a5c6bca9f659f091a605a732390ffb32211ea07f9bf1f7489a58a4ea14a0788b0b9ddee209846009a1dd49956419c36ddfd971a8e4a20fc705ee5c9f998377a700d1f901645178519cc5a1cc4a973e3b2aacdc0bdc896eaa8d6eee8f810ef55e5e3296198791d6ce9350f0d862ae77b9aefd1b50b5d1d101f78be34f0000022800000224000002201d92f94cb2eefe84f185313373e083cbad8cbc108f5e9a978de897c671c440cf000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b110a2fe25c7fbe63d8bab12c2dbe9c729c57f6ff10a85f24cb94493c8d9914418b25f6b1cb9742a3e7a21b61850b180364403ff3cf21198196c5bbce3f96e1cb43a4d109a02cf08683890fce91cdc30a9704dc1e34e3de5daa78450498bc1d7f2a8adf9f48ad8e8caf374a3dacdbb5a84a7d4fcf73bc02a81e9e938e2c5cd8edc9255cf71905d77a767344e1e436a98ae8f44107d187733aa382bbbf22f1e78efdb2b3af1198fe1d644c03fde380cbee80926d36856e93ae5125be9a311074ae4dbb9805e19a07c7c238881f4b35ab1969fcef7be43bf9c4386c111d3d119547bdc483e9fe82660a57395c97f30bd3ffcfa89a2e4febaf175bc2059b81a9d0f01e918db770e347631cb604fb5dbff1bea20a26721ecbb50da07102d9f85b343712144e7fcc71af052cac0ebda6d348ce5b51705fe1989ab9570e5da220f06763e2ada77563064a989817de0ebf7501aa9e96b4baea04f16eef1dce17842bc0068ad15dded138995f8bccd8a52ad39b634461f80bd3eb45404ff9e42b3524f71de62fc79dab82b2a79341e6159dbe19711945e078875b6779755cd3c7f3661268ae932fb07d6a3779feb633c080c5f180750c0cf8669e014d1f7cab0d53e839000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00208fbb7df19c681fb649b7149ec62f68d0cc6f0fa57c7d2a4e7720f67e62a210d01c8ff747e2a6162be2009ad05853a36bb01e3eb8d7998be3ab4cd5bb8802e100214d02c315e7669d54497610eb2aa5695f06155b2f19039e6e46711a0a6ac75fc291c8803067cfbdff58b29a59715fa5f7a21fe45df9e5b44f4d51250d7821c1b00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b33ce99a3dc4d737538b9465289602a5af29e0bd9e36b71eb3e74fb2e86f8872c662cd0a87c63f378dae961555a301c082d4c4a2ac1d784c887d678f170a312540eb570b03372afd6db25293f7eab159bd73150e33335b0a81daf9bc886237cadd99bad125f7041709e24838e014fadc281687fb60dbee5f84185d4514c674cdce1f7db9c3eeb168ccd0041c55b6950b10d54e786bea80393de378a491abc504acd7f3c6a27a818106e3993730c4ec4dab04841c15ebec117b3872b37473d5db3bb7220984a6d4791408f99af9ee4d72c9f7363563041ab09b3057c93f5c89b92e480e881d7f947459661be7ce1abc9867b271f01f72cdc1425cc3a1e539dfee02a7c77cae5f029a5a0e4fa1cf26f3fcee26428530c7a79a8cd51850978bc6a6ccc7f65ae5694d8e2ca0b06221c78137ff77682356e6d1acc783da09da84a239d31c9cded99a70ab5a69e4d87d80a657dbd7cca18836e11e280d54f953a31c64cff23417247a58e0e645776b8b277e42a89de1f591f93f05672c2bf023c10b21e25c9008d8ca8af70813b3b45c2d5408b6884895336b7ae770c07e454e36976388dabf343ff1223d9940be276a84b0f61067b0604b01d63e92f38445f957ddd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8203d60d9770e253928173854721452462a61017fd004eae0415be70631aa08dfe087e1f46442ca26878b7e93f3b90d40593cc101326c3af10d68ce53068dc85a77c76394addbf790b006fc850f51a726f4aed461599f42f032322013ce1095c1ac1f8abacd58390e2da0ac76d0d41469e9376f2178d7805c151621a1c3879342c763c17c39a3cd122fd1bb3ca821f57b4cdf057222bcf8f1163e1af0f12cd7e7d4af1025c0db5e0295d2746014b50d7ab02728f26b01e28c347ac888c2456110f05df2a1e26b6fa64ba7dbab505c7b53887b70b8a8cff11a0a5a1664548451f98d6a93a1c7358a415721c49aa5fb7b53f5dfc5f4920fa6252334b6bd6cd15a453209f908d27178c335ad208eca3f1a750c98cefff77d5ee4d8e3f78edce89e6b23551a560fb700c6200220295f85fe3201c1cf39ea0e9b76e682f1cffb811f2f10783d4480f2cfa74a3138e4890c05dc2e99d2b173357f9306e0731ee31dab5c7ce51fdc102d5516e2d63e8e86ed5c599bbc7a78afa61e32fc35713b57b9c943cdbbd1b9fe9678709c87530e1468c3c15b4555096b6b32de842960f6a97991f6b30214ff93bd1282151baf09f45171b177018bcab552f4a52e983ce8a178ea0000022800000224000002200b354528246be820e8a15880a451d91336575d3961d645e37055b87cebf73009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b8512aa8f633de2693ca527f10605617d254fa00e9dce7eaa0d264a70205f4e0c799cd6e8138d0045af3b7126a458a60da6cae7d1c70c6f74979d4167ae44e8339ac8a9ef03a0de2a46386d40778408267178cb1487f89920a1907e5c038a4dd750f16fd835d1cc08eef7b80d33c2146a6943a266f65d5864053c526dfd2e4a0a9b557ae68b134772da7a02b2da290dc22582d0b958eac3972365c3301f9f925b743c9825331d1a2793b96171ba941f736033791c4a595d19cf905038e923f8767e5e0dd3df0fe8dbdf4d91ea1465e8bcdcbacf8f6c47bfcd532c1de1e3fb869ab1925b2c1342adb799778d7157c09008d5ea91b4621c5b8c33a8960a7920b9fbc8bb8f96459f5ec8dafd2e4b624959fff28e6b369f4638e77c04a44c832fce43758fd3d1e58f8799bbd06e452a37a87731f64edb9eb5a92b50d7960b12c8449e9d8de679902d4727f1e5b8e5d45f079aea9e0a438759e5c4851785565aa3c7aeee5ce2886a5c464c5e6ebe2bd33648f7d2dad3b7999bfd55056a9f0e1efbc21f4f28e33f4fa5b7ffdb525ddb3bd2aadcd5de4670ff56628d24543a085ddcfb2da2fb68eaea79d995ed663bc920ad8cbd27a579ed470554e1475b0d15055b22000000040000000000000000000000000000000000000000000000000000000000000000000bec47b002072c794daa38d020ceef9b893c068d62fa76f6a0b8a61482e8f4cd811a4323570f9877b693d3c45857ee8dd1c83a487b6eb385a12f60b47d4b068de723e1673b0216808a4e4d1989e36d4b98618029eedca2f3aa40a5332cca69c6c4ffb64ca5fc130be66498c9f658716431eb551696edc35de1ce918a1668750e8dee707583c200000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d10c132d7d9d37f5a98f49c4de512c2a65d8a821e3056a3f7708751c00a2ca23bce955e05b5c7f09d2970814fbe67964d5f79da77b87907617a0702cfac5dbe51866301cf7a58189b388f88c66d5a62a2c50de52fe24d5dd7285f3c2ffd06f18b623e096e6901cb8d20c78604227d751b4479249ee415e9054cac8c8c54ecd44beacddb1b9bccdd300987b2e5911cae84086b6d651d8ab5f4712a99e458d5f24d309bcead8d8e36326ecb7f0dd2a308c328b379155e4d381e63859e8ab3e013f180c28c423902cbced550a9e5dd4230f9ae95bc758087392a1a3531d622a77190a82375b48f085905c85bdc9b9eaf87f183f791e5d12ff57c1cf8904fb4403848f6a57177dfb2233f420f7eadca694707e582992695c161e79979fbe3703b7a4571287a84663dd3f6b78eca694c18142a6a3b835a104c90b6a74c8662f10641e0f0dde1b24e219e279e52419e212e8ad5cecb1da0bb68d525a3da43a73e2102f53cbf531cc2ba224500c06c3922cd91d048cdda87117f851eaf5b833083729c7705517fb9ecacda7c593ae917e42495a3514daf31863c0dd91797bd8310d2bfaf55dc35719798deba4c81257ba6fcdbc1c231cc69af5f58681ed92d742208970000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000232f69cfb0532b42a48ac7bbc11b7837f2570a72ddacdbea922ca828346f31a1b71f39a1ccb52ab3ecb478c063eda755bcc00fe35c8ba0ab2bcea7cc85fa2fa6113154fe4ee850c259697a451d37501cfca8ab43a3ebdb9d81871c9d71e8a1c430bdced55f4ec14bb8f3174b95fd683ade1fcf79f8b33710162510eaf7dcc2eb603bb5d03117282ef2dd2cb8b6cc01c5cf3c0372e973300366032cbcce90c0a61431a439fec53fc97d07c7f88939be1a1990a46e6103912225ccbb3c3c65db25ff068a253c6e8f7b8766e0a55769ea5143ef8b0cb4509bcacea794f786735eceedf23a05c8812df9334dec1af6d6f978a1d6188a6821afd0cb03d72b8c7db15c3640dd40b092c5e4e22441ee7298bdc2e7186b4be11128e6803909c289abb4078ad44924b2d1ca46bf74bd3322adbbcd2fbca0d278eb71df46f66a3430fb62b66269d6b9eafd0a2701b0d7d4500f61845c8c329048080d65736aa56dbd7648fa64bcd159630fc6bde4edd03d695e01f2c359b819db62fbaa88918fbe73e155bf745d9035c65c7eafa2020fb227349065ab19f068f36f96af805f574fa4dbe690a34d7da3754074b4987cb6a7b6377352acf093bcf6f821f809a751ea9a0a9a2b0000022800000224000002201d211e5bf105d24427eb8b56bb59685b040ee6cef559bc559c2af96e425ec83400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000858638cf65bfaf2639ce212d9c0bda869556aad78b89dc477548a261a520f89f38eaf634624bfc76a93774e59ce5de7a26440f52f7cdb4e4fe98a5fc64b7901775b751aec1892c9b04772a1a7301acc6bd5b3d0f96328baae5f3e55088cb281a527d5020d3f9948ca98a3b845e7cbaf4f14b392d58d17fea5ec4f7432ef8797bd1ef50ae48d0bafc516b1bdf44e1f149da1cd21592d430ce25bb27fd5b87f613e393419ae6f90d8dd7093c0507d31973dd54da5451d300c580344bcc876069b052cc43c2189afa5d142b68a4cc138dea04ad4977df2db53e2bc6b4aef95a186732954e6ab17e27707ad183d37d0737436b47fd3077ac6f6328d7667148dfaef00d865aed4dbebb6f4c92d060aee483b9111cf4f5061ccf443d481fa375c291e3c0569732a50bc62e2c2510c1f46044f32fdeb2ac463a1dc68bb04a07442e4dec5446ceb82140b0b87ab44e31089fa2f3e1e89de61a664a7b375a0cce65e3388598077a325f88adaec3f6b89458cae2253a3be509c83738ee7fbce6e963dd77dfc51e71464bd60a40eadeade6cf932cb44eecf7392a167eb40b3716caf1d0a7f1a2b3e7da7ebfab2bf550e12480984d6222feb2294cfe58b0470507dc3aa8df26000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0022b89b66ef22495d88aced2e90aedfa477d8b18e569826884bc5f74a729ddab712894f6579d6c591f613947da655e9fde185eb1e6c49e1db402a3e6e56feab8c30216e76fd31160a18fb9ffe9e717b576f6ebcc9abbfaa249b9ee8a862aaa415a2d1acec874d79437a5a6746ffb956c5a294fe02f3156918e2f25e6ec59d272679700000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092b34683019bda4f2fd6afe59976786fd93a49fb01abb1abf0583a1f89ca09dc7ad05ede8eec0ac324f79c23312ed8a5e84bed3f634f4f51c26c27b7203dee1c8275ee00dd79ce2346dc59da65cb96ad15ff99b94961fa15d4197ca2866cbde077705329ea6eeef19e418bc1033a4037de606867db41ce523291a178801b7fe6ef05ef93b2b607678c429d645bef3785459ffc37c6ba330f627f85f65b7f050e449cc7ff814b717eaf10e9dc580e5fbb700cfba09b83ad3a347419d1fcd62f9fa360ef75345910b6988f0ca350b3433c5c6c2bf372e28349d0225e86e02b2ae7bc32eb0657988a4f08fd6dbfa45ce764ff674930a2f2bc9a21b27d5d951daa60e2b686e6b844f2ebc1f11cb3b5574592000de6c4f20546cf89b7bdf13b8dcd8d54cff70ffb976975abc3a772a37198337f18e03cf5eea5c5ddf7a39c1e3c5bc90374ce4e723cf83cbde2e24d71f88f8ebc9f32550d614b77797f645635bfe628e929851e8c9fd7090f8c524b65764f5b3e8292f653e9799cabc75fc4ebc53f0dd6189b49ca18803dc67e21fdec0ded9e017d1c2ef8117bfd79dace91df2a8a7ec548c2bb9b26a092d8fb110f371e24bb58c527485e1ae803ca724286c26f25300000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000079ed26a02d7f5aced43790f18e3429f1c0adf08ffa656404c41c94b4e97f64a48a3dd267c2bf359099903614e35a4bb8a27d9273df070d4bc4b3b6e3a5266f7a0cb3c008a4300cdb0df05204462c3bf0d2e66c75b524f8a0716f757b2756a0f9666dac6aaccf9c7ff8d19980e6dab79d28fed2fd9442d8b3550d46a95e40a2319573ea3e4782e973f50b82e2ebfd2caeb4954055a2ff0cbb9160a58502e558d35ace21d273555d8427252d515da960dc6862f3254b86c883800b6d933849a796f79bc244c134d76071a8b8c4013589fc03d2db852730f9fd5911df778ca9fbdabf17bc33c68156cf91f1d019a343aa51cebe7d55b3a1ca51acb2279cb68c2f693e7016dbc96670e6e7cbbab9770be2387e6ebfda9f1c3e84ea5fa803a91deec25b1c1705169c9c0087edf157a7109794df36d9595af367a059414428ef207442fb78e67fff54a42d04a10027ec07aeb522d2125254d2be0fff61cd1a5a20d08b343ccab2b7e47c1231a854ca5218ed08f972b62358050681d281afb29cb6bef0e09f7a273f03dc8e3275ac4ff00e90b4622a6d515815870e849adb5c09add007a40b52caf960933e627e7eeb450da063dedc7ff04e7328bbbeba75522ddf5870000022800000224000002202f542c6de23e2b8fea3bcb76c3795ca8a97cb2fe304de8137622cb3167af13f1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009379629140f8d61512558e0de1cee53590f1468d098209d4648c6c95083171590a0a9f43132d1ef014a0b2309255dfc8a0231aa969177ebdb468bd42b543b2ca23826eb1383484b1f7a6939cc70437f7928e8048428dd20034f57d73cabde7ba66ae2a6e46a8c17e5abf458f52161fb8119bfcf5d713f0bda925062efbaf1e305748ad22692d10ad1c61c25a762ec0028e235b2c460a4aebdd1b4f528ea85fba959574453ba8ef6d5be84b704b24fb739fec2e4226f35b1911609f6edf39420813a763d11b3347bba23f0c6a7e647099a39b7ac06b0419f0834af49a7e370ff879cba27f02769fec8d6a8a2929cdfce3dacdc4dc870322c86546d807a1716f526bad905b72acba7ded5c2ce56c332c5798d2a4f0708ea1a089d7e56f2c28e074dd421929ed0f1c641d8f2173302fda01cd6d05b4601d664e43b710fdd58d39a8d82f5cb0c2de207253123909c91f4f8d0b544f260e4e4478491a13d1454831b2a6be8745d8d51b685f02a68d5b43271f00751234df2b483c5637f10888255bc95b71f7083ebd81c4f5f295e03f7ff20a7092ecfad2e0ddc87ad45689ef2bb4f50dd20b5c5f88dd6c6197884861e2164a32e736993e2a9f0cffcdef4511bc91a7000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0021ca40ee40876dd89f5ac49fd68b4285df2549bade660ddfe6ac9cad5e16aa2fd0f2c2b933d21bcf6f2b109c871af7ed6d63816348e57bb41e01e3e8bf9c3f6380219ddc28c0630c41e7d647f356bb7e6182eaf14b90d6563fd988c7fd31b4edf79250587084742884163c02ed5c0a68aa7dfac8c3571dc84c570f7b8c2eca03bf500000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090d9762518eca9c6bf5a0f49c0ef94d8ec805dd38ef8653b31f299646b89a7b06dc28e638b0e85e01e2e8ff65a24dd1f1edc1e7eadc21063b7b08d9d956ec12f20d8defecad7d4abe09bbee3581ad7da450db7772fef5985ed0fd9560d2b0c7bbe202490738b3c0fa6b805c016d6cb39413643773bf11394f7ca18aef535f5547cb32ba46eb68aaef03cd56c7c5650655a31ffdc6f694c2b633f45cd44f568a950450c087a97fbaff51d4e3e96e7b8ea899aa1b029bb1023c28e7fa08c2c753d591f12823ea6f45d5805ca6e09981017e2630667eed6b36a3bb49853d18c0429f29d7515a1878d5b8fee0f6d7bca62b2b5a89172e2d54ff4ded094e285d8d56c5268599d151ece60fa295553d1abcd97c143b7b4ede58b9b5526514a06f1e691cb18179c5abe010ff521f2200d4a1575f3141c3271b57d54180e19fa4e0913afebb826a876a618764a590d8f0b3e86d0608048f6613bb29a32b5ad161720d2c2858ed5f003c4c9c4a52f3f3879810f0ac47a0cf477f9fece8ce4bab69ef16e6db9f0cd057503262ebe352c1a063e736b1f9d04cce6fc53cb037200018f08ce3434fde5ac89ee51b7c5caf839cce1f46a8afe6b5c04d04ddb23727cf44ad73f550000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5c2f334b7091d548532f94a1b914bfb4f0456be733ad1ddc403e8e888ecb8fba8b28840749c5126f11863c714a9ad1de9979c755f44d88500da013e0f6cbdd960c8010c4c3ddf575190779fe197960cea9a69061223990d1fabbd5fd0184080bd5817d94b5a3faa81f08ba42b5deb42d0cf23c6f4f6c26b32b423bbcb7922a0b98ee681c642d4d6cb946ed54a04c743e72bd93ce7083aebf73e88d43daeec9172c03840478f7d8a4062bb05f73e42e75bcf383aaf8e401fb8c4d404312e8cb29d4a6ce8aea36a0bc9f117ecec64d91b66313ae6a5179c5bef68c3cec336b917b90434caf1cf9eace70c1699ef9f65216c92fb2f346f893aaeab1e6afc65e7769d044a5c69368b39dd92658869f122adef167f5e089e173a6478ff11d0322d73d79a6ee56d582020f2a869096ce2a6032ab54c5936207757ef627cb318444e5b96afb051e8cba2aae630db44db533ad558b9a2c88f021b6691b802acd99c7503da1e3c16558d5d8e0c0dea71a816d4a54ebddf1ed22338e38e04d1a9d3458494787173eda2e352532a39d42bd0516f1c20c12119f78932006e7029875095faa8d4d7f3130b3e1b4538dd2a0fc81370f56255d4bf1c66ed816f5ca751f9c6fb59000002280000022400000220025bd1717be76f366d6d5e15ee9a6c98a28d66a77f4d5517d3165c00162721700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025eb5f60662696f5ce97ab33b513c1b4186fa48e40372d67d81347a8c1d411637a66f862849d31ee135b4a6c6529c49975d747958c0477ee14c114968aae70e155683582fff78f0c53b5975637eeff109516e75f2916a00eeb057ace6f97c308a4418e5c06656c482cf2bdd1a39d84d7e59ec9c01ee9cc3308bb04994996c9944e153f4f603be6052657b82e7e1036af2a30f48a1fc9371b033b502cde85d46f0d81a4d85466cd1cedc2243771d10d3c59ecc31da054085c4d84f7fd65e02433610b24ed72326ee228fa8e273a66abaf3f825dcae16a40ada16092505cc9397027090e72f98ecd60975f6ba2fa8148563a9903ca119f48d5d7c05c4a9f474e9b423663bd8a2f063bc9078b205166d3856c8f30b41929a922f2e521204fddb065f1d9707090a616bec5e0f7426603f8e0c85a291a67b81e92f85b1cc513d96b3547a587c44bd4ebe3df97110033d1a372c2f8554f45a5c75502fd0a8494210e793f92c15f5330ad45d2caf42a64ed6599337ae65998fbf4dbd3e9f26531929e81a208a3c1ffc56af008304872c466866187de62538830d94fc6e8d29de7a68e67a894d359b56a99636b5651f0be8bd9135fc748d98c95ffaa9945ff7646606cb6000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00208c76cddc3cba80bf145643e0acf687cb7de1d7023334bf18b9a91b90d7d867808c6a6366e71c0e2909fbb906f28008202a8281dd935a3ad8d6388b6139ffeb3021b16c0de06bcc495ae78c938a39e640cc21bb0c8eaee1f202e85a7a224a4c932072be088e28c533e0602ae216284b85f3ba08b30181886c0c554d911c79439ef00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d48b81ce42d3d248f0c8dd6c0ac89ee9c37482912843961340d704adba12e4d87c2da619884021448df43df53cee99c347a3c5c52e3b89434a73f64fc3d880bee176fd66a359be1720f024e3348f11eb4d05c0f6e31475bb28cb30a53f091b99a85c8f296daceccfef07429cf8fed6e6d4533c0b4408ce08f51e13296a742ff478e5c4faf8c3c8194b707f181336be1448a9f4594822b3e4e905da168eeff87c157579754dce80d6974f9ef68b1518e3fdec283926b719ebdaf3a51176e84e0dbd085fca2e9487a68aa59e6e9c09cd01ca5c140891e3c67a12a2aaaf7b5c390f58ce163d7dd5a0190ce8260e426c78ce31e3667668e76863ae39ee2f6da1d167508dfb97233d3e5d86a11d4332630f9d834d91bce532a9eb7ad7380799f27cb6daee6d6ae9a94c22fb64b2520977226b4ce45c3fa40812b27f358fd9200df90a86df6537fc04ea43e5d691361633994d2d964a6aad1e5b2376bd660c7b939421d5e4c978f40d10445adb72c927c07b6fb9b818cc1f50d480ed3d311771546b1e1beb9a7cb9d1d5c8bea6e1ec1ec86cf799e9e8790f87d2127ded6a81fff5ce729f79950b8bbe6e577ff24f881cd51e49f47afc1bf4f63ceccd80d1f3d446eed0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000979c142c2ffa898a1361470535661d606285250431ab5ea05bf280ac1bef2967ec291725472114e99cb2be5b3a55c57e5211e5e0623c744e603efc8388261c5e4367c3d0c27519da18804248d71a0773f276c81e353673f09e55805b7e62c9f053623d2d687f0cb5d2602447ea9a02a9ab1b6501d20953b79348df3880d5381b4937c65c29a0aee26c010bc06f3ff879c7bbfeb2ccc466c3dddfac61e958f02953ec0ffab6835b29fadbb5555c56956238224be00872726e0484043cd599c8f19606926bceb321326b8ea7cf12ad9d119f0d57704fbf0bd391c1a76d54cf0a5f15a9893979fe1c5765c3b49d99ac099a0c8246d4735686f07de79109ff3bcaaaed1d91d53930150085ede8eb5ce5ac53dea766e075a723330b59e2304a6e1a030028a63a2703627a3098a7e3bf92e3f16f3fc73151cf53fb5b8727c9388773b15bf02c84cf45945996a5e97fc6740884941d5f008a47dccd5d64bb5a30e3a81f7b73ea86aa53854e29c127e5f947d1c73a83123c55f258ad2adb2999f6ceaff79c093ac9154f2a31de64ca3535b71fc9f64a2439d4227a5864ad8cf02093fee8f35a45eacda26179ef909f4b7b886dbfe7f55ebe6c885b43746a56e38657b7980000022800000224000002202d440e212fa25791c5596fda799acddac5a282f57707fe169aa70a148829279d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e374c6c9c5d224580108d911f7744d10d80d531a72f08a08f5956760c40146bc9fbaa038273aac325b4abb671c6dc3b2b8f1cf6b49adb83e2228b3713447d20769e98217c2da6ec9b7b85ebbaeee271023298b3182c807692f25cb34c2e2f366c3ba3ebc54f17fb0b98acdcd65607f513de8e97dfae25527ec52c7ee64107ea5530a1133e274e5f6df255c11ba7d0d1277a0c9061c370b726ed4660f08b62fbd77169e7f937d8e63e183c6c2796b8e4a36a4084f46ba9b12cd209bf1cd1952272285590f008cb206123c9825d806050b9c2d390d3222bdc62d7cc1426babae0cf2a9893b85f810ba75cd60dbd9e0f6a995061b0edd55eb43ce9c3e027c233f77af76e644d3bda81a179a6cc43fbc133469b5a0663bb8f7f733539318e08658ec51d6f69a5db1cdfb0e7419ccd48fb5d420d68817278031a3ad0c370817767fab2015f04721ea949803aed3128172ccc70a979b4b97436423d248b6815e2927f4f694089a7cbdd11572cbe11a59e35977c3a3a598b45d7a4668f0a915d03b651a458a71d4d99b917a78fa20f9085b0f8aeb2183fd081e5ada25e6848f84f9cf4b9d0aaa920e09ee3a54910ee6d556e3b41591d94e3aa336126a2628718d05b42000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0022ed517334f78236f2814dc876b9a848765d299dc7e39113b448ee027db4df75e1e0eb0b00c16f3e1e2e45f6a03c4a89d4cfef0c888dae3b57b8103d5c718a82b021b21db8a95200b5babdab31c5a8bbdd5fd6ad88be609251f9654fe9bd8a7cc1e1dd2fa8162d72c6141a44db4f76daccb0811bd186ac35b159d115c74a625aee500000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cd99673238e7b9db8549ef1c2062c7ee7d4cd98ceefa9acc2fd1732ec60b42a42d3d033975ed112edd4e4c08007335d03a3479ab4d7a0b5ee4a78b49f15b1e2b548951be386c6f69b45338328d5e06cf1342a31a28a14a09c25fbf13374e1c33d441f8e08e22e2d89a1131fef2b2a0550b19e290390c850c7f3da73ca370d79219d66b402944d69221d7bd465a0bf927743ec1686c78f5bfc0d275062559fc8817f3b8d50a9ebd802309679bac21e4256573c0b520ede7b5a62035c7962a6633dcd7d0a4d3f5534f16144585269485b02d3d60ebf72f029dfee1bc2b194c2ae2ca2b7e232bd22f0625035ff54a824be3a9c28305ee0a9327a8b865b3000c05705f5010cbf2d18f0b187f22f9c3907cb7cb04dc8e4cbd48e903ab85fa7588d2a2f76edd74545de6989bbe774a766f538b68394b8d2ff729c790f894b66d28b87f25cda530bcbaf70456d2eaf64a1d0bd1f0abae5f4903cd53512635a0d2e2a110448d0912d53778518026b5359f968636d9d505b430b23504778e9c577df4aa9f3b8283ba405a920ef5c3d94c406f18061e035b8ff8a7ada9fcdead6316fb50e8684d29ff049bd03c2b62c929a68e284d3ed79e50182624f013b5b158d339e8e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088f0497c6bd6d0cf5d6ffb9ba10e3da51dd65cec3f1dc899d6c216be7e4bd47bb6a47b317909c18dd91c8ab9d29f21591f4acd7b4e5f3e50db71fcdb5f1e4668c5647fee1f2234a3ad2d440183127409b1efa06e012444a411b2cc1f12df17dc0aaf23a5bd491775a434cd2393ca2c597cf68249e391a346b636f008c7b0ce71d15203b2c605649df1ffd1a5f8b49060aebee5cd0448a840b2f7ce67be905e2a7716be5032aba704abb5956337106fe9118db5255d05965565416f850295b4aa788b47163dbcfaba571cd54d2b4c2e9c7d7cb57893fdd04795f3a5902d994efde57c339427ff69af1609e0688ffa0c9050fa15ee14b4d5197703497a81fafc0e1b6fe253cfe2bdb443ebd30de72786d363d509522b4562aa681ee99ba0fcea92194d2ac576d5175b5f847d66787752d8cf5573772eaa300fbe0f65a850d75a6d4094e4fcf81600447d5f7c224a2e2710eb6284af6c150c5d084f0072eb1ce8c52df24c077471c17fa970264d9bf7c74b0ceea054c8a33603bca0bc3642ae440df4cb20f3e360c66a85dcf7e36b4fdd0bb2ade9d716001a86d472c31be34960f2bbe186e00bb4c0c309e781024081ede3015f9f6af60967c4c9b5e14b1e6f34b500000228000002240000022016862eba71cfa067ba373675da0d6d632482305be5eb8d12e489b8fdf2e8895f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16fb037fdb2f7ed7fae2e230c0e305e62e279f68334f1c86f60a105ed7d1d68f3915b005b92cf144ca18b19087202a8fa42305fea24c7e74b4fbfcc16024e0fe66635bb2f0fa8e5d19294b14dc8b436c0502d915916f08b7b97e779f49d6f935dbd6cd3bd33c314d9ef736a62f9f1192ab9d746e8f00091963284a1332f5d7d1f938e149032d67f20139736a479d549d556ce6778e25305c2badcc6675ca9ea6f4189aeaaf0bb28b637fb11a7be12facc553d36ba5636ba1ebcb68fb6b2295db0e64884dc70ef2a9fef77bdb8bcca17d1e1e62e6748392476cb2069f79565e9361fa58da662a988161811c1366f67da5175465e96105df0850d842ba4fe2edaf7439a3b5d24bc75e5e3063df4bac5104f03b94e06626bcd793e774a8006525ec1988ba9d03d26c6a8de36eac39c9b4c62d1d319d8360051063a154851177e11a36f50e5e5327628106eed4c358801f9220dd8d0df9a77f3fee9aa02d8e47c3d8aab3f1fce958d8a9bcd97f0e5a48336555de1feedf29e8fbe62562b50721a5d21ea6f20da31863e3d097e1d9039d56a5cd1d897b8055f8a51c4f9c2232f752aa5b98bdac42542f76527c4d4780245ad475db8fd960f9f20d7403e3550148709000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0022ea1a786efecf2c3d8fe0fd34ee5a479a7f99b5454686ffbb2c8c9bd5871558f20c51512ec41a91a6cd7f589581e4ba434d4437c4f71bdabbd82e1dbfe64fad6021b2424be594bb00fcbe46e3f783168cff50375fb06f6267c3761689d13227605026dcf19563457dce21aa00327af482858ce68e51ddaa3c49a26a02ccfb9db4d00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000501a36b13b1bff947a0d599135905552fc48208cfaeacffa4ad7830e5d9be70242f1a3975c7573d19a25ad316b6776ba36e784e576fc0dbdca645a87ee7ad78d8b11b22f5391c2c69c85538d2a504ae99fa034f5cc3db4a7eed0d1fda43ae81228483d3ec93c31f86d54197a921ef553d4145c292c72deb947384934dfc2e17dd7403816960a30f0797a65f69bdfe36066c201ea2b32cb4ab0b9ee045db4ea87fffe30587788a8c4e9ff3d7217504fdefcd0a1b8c847368c27ae5defc497c2e4080cacb19848c5f1de232d6e529e82b0ca35172cddc3352a98b2b2d4b8f9fd2b2ec0556090af8663d02ef68cfe3fc635f452c208b4e6eab32e24a344aff6baa7f193e768b41922100d271b96b2c93577b9c38d5c2e55caeda3fe38d2be703cf4bb8b9025f0b1d218c01f10325cf3dd2518c7d234582d0613a0ea34cec7758dd200e5f49fdde28aefae1c88c79bf6dc295ff1161e7fb1e2856aed7ca5a731679deab991f1d96bcad3976ce50a3e179328b72259f75219668b10ea81da6eadaebba151f4e63f15615eae1539994a5b781029afbdefbdb4248e9bcfccdb516cb97c0ec2649f85d8578b411205285eb408997f830b5c1f7b4d984965bb5dd2401ab0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000069f6d8cde921124c2d0878f41681f4ec35ba34a8392c6664fb5b077f354c44600d14d07985553a8230d0f63518bfcd03b655ea711db762c732d82c9d11cf81880937abcd1fade85d395e43782e6927b04d3be84827701213e1c0f89dd55e598df99b8111df9f12b952fa56890eb4bf3ecdb8665762d69b74b8b491088b49e1ad2891b590d64ca8490a90748054252ecbf94779470fb2cecab33ed896cb29c408f0a574f718e78bac13e8501f46eaaed869e37ffeb8e8aeb6d430d902c76346914d18a2c89956731c7c26a4aaf95fc63f54ce6b2e1363804a8929b14a2485a5df09d6388a02fd019a9522bdd0bfd92163a98be4c4e522bead3e70fbd5df8bd84d399ea209d1dd1e676045383c23c52c4e9a457dfa834497d95ef92efaab6f3a8615dac4b90a4371370374ece194793da52ed4937131fe6732b00c5e402d0542d8fbdab3a2d491b1a4ff97994a7b21cfc3c0db53ad3657689a7bd6010dfb7c37236252ffa1c236315a2577ebad65438c8123d8345985f5c8613c78c9069e5085526b4c056bcffcca0ac7b8f15f03cc201bf1ce3dbaf44a0cac02d58f0ba04c1b1f25aac3a7c9b8b3524b3b95c1ce7a943c83cc166cd0202d6cc953a4c4e163b020000022800000224000002202188a07303177990545945ffbbcb747baa5d8ecb9114661450525b0e6a0488c60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c9b77403537cc302087600bdf8b8cae6a6887cc7ce7d58186d4c384676e2ab5a2d5d2b3db75e31f7747242d79871ff73fdd08e4f1e7ea31e0480a7e1ff0d2f6bdf35a170ea13ea1e056bb7615f523fd1b85a28e481087b2919a9b279e562d0bc8678c3c98d66924523a38fbfbdc1e082b7c54ed7228930028b06629dfc5d411a5d82de90fa7808537360df2f61b573a2bfee801f7c1443638488905beb1d05419379adfcc92ec4332778becd7c45e0e09aa89a27d23c72d9687e5b3eb781e9a9c8bc3d0135d1ef6c0ce68b79ff26839da5ba593dda54dfbf79d839a1d97ca1b30eb973179f1528f95d08ce0f0e6e6d7d1a352493f9528314e829998f84d6e0e51438ea051a74a4e8722b407cefea2c7862d1db64cd1b643e1776fcddd264c27cb1ce56f7c13b26b019030c798dd4f345664051ae62d30168682ede549985a10e10e362172c0585d3b778fb19efd5b9c66d42d66d251fb9b624cad1d2e520a586d98820a4ae1fadaff54371fe7f32ec01c7f403c050558a99c23e39990123ad7dff906945fa5233358eb45c38878eb8cd9e974cc18f1e70440c4b0a144ac668f7699771e200b240c58b2afb05adae5d844c67b5f861a160d7f7301c9fd2638e000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00209ed87ea4cade7f136d59d6f5bf944efa6e532edb4c649e500551a6d07e2fc0904cc917e076fe737aca24cac0dc2e47464f113cf1db6d9a2221f667f6e13725d021c183520f204d1948b82e64d1c9d3ce28fa0d7584c63a1e33abb06554a38ff2b2a2acf3d87a370f02301f770f4df78a6f2aabbb00e17123fb82cb7c351b2cee200000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c4f6c54491ab14631273e76d2db9d58829d39cd9d12d432f8a2d20d113be92f7925bad5f365453cb36b5970e3ec4a4b6f57a7d516e3c70573de839b1f191a51447515dfbfe5b4037b810721da20d9975b8f068f8962d2f803c763a1f188784a7480464a177d041ba8ee20b4142353a8e9c424db1a3f451d6d8f65a971bd826b7e7243dee11bc301c352b882663d3b83a9d6db8522498d5114a4fba71237455571dc23de3f48925f8382c0d3bcb3040e5f65c917db6e3017c5900d86b3534f1c3e0b22dd46333f072df81b2fa9e3625a5ec8fc1526023317a7b54dad8c3947a0d10707cae8b89cfd491676ef7856815ba03de202444aafd039c632d5c1c3b889a8ca1b3d46e7397a804fdccebb0a74f2b243d3b818ad7b5d7c578ac2e8aa9dbc72db83a16dfcbff697d84e25c905aaf52d553488c94f60ba96d01d2af40d45be443e7559195bdf3242ab8743bb7192ade6d2fa534fb2268986a8e822a2cfe59dacef02fc8ddb9d32fccf1aa556b9b2eabb5334f15b4dbc69d7bab209cebe36cbeb5fe9072041f55e5f9fd23c4804911ee3671f507834bff9593798d5ad0fbf5af7418f8d1ddfbfe1217322e3a845314c8156f8c8187529381881ba3111beef64000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017f5037576c8f4e9298108d97389ae0dc6e1e62f649fce44793e81d2948fe864941035ac3fc4c481ce143da96acb4c41f956e3f390c2fb59c955977ed9ebdeccd665250e25005352c5874d0f7d63c02dc1c54dbe16c98f60f7528a7ce0154fc12e35180f74f77db4473829610f7cc864048a0ffbf2d06fc00a0a1210d0bde4d7529b965556db9c14f552abc0af6d9f2d6587a638d5b4405a10fd44c576ec3fecd5e1f08f80cc6e49540c8d8b8c465771a2fe1deb5bafff37e7eef8d2f1d95df7c17402acc2d74f0f21423ffa09f4157a45c0a4172768736c5b254492c4411f08fba27d2100f88d997707ebabb514e61d813b2cc33639ae29463b1ef5dbd6d1bf7e5744a925541e3095e48ffbc954af0a6fbfbfb0a3343782c2ac2c65962289be148531c84139f5c0b835af2a33f45a3f6971d43a1106c4d5255e744039e627672844fdf57d35f5373f4f4628b850ad68f6fb8010cdc833ca596b4a27bd9f4e8b9f30bf719e03f65fbc1daed231c0750f9fecc8e954bbe9a5d6a8dc35f4cc857bf87de59df9f37f7c443bc313f6fb42219a4cc5a60f8b8bca6298eebf0c3cf06e9373de00266d5104a9d7a0b5585f395202974584eb333f7f3503713cce30f3b80000022800000224000002202c4875f4f1b6f011d074b2a936968edff4358c82372df9ac439f17feaee4396700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac6d7581db82e527315a220d9e355d7a27e025c57ff3118fa0bae7ae5173b1581c1e42347ce7dd42524bf28f09618f261d5631ce0b88b9e04a56d2cc3645dec6cfd3c36bf59756efb74e000c4df15403d877182fbfa337cf6cc80f0db7685a4b4ca007b20cff44f2b9ae766fb4af654cf45ce7d6f094133f90ad11552fc5712ec34cc2e47a70ed9fe842c1aeec19b4357e12e120a8c7133b87f1e6104f2c03904de5f2f7ce15ed276ea9cf91d9d9391b02cd605400ecc2f71531e570dbf15562d0125c86a993a4f7c2046fa92be45b804ae6629e00e87d3d85fa59afd4713c229fb41808a3632d22fa5190b0e51f5390c83a3c027f28791c74ac6b29f92f3906f69ef824ec45c032ff5e9c94b4752c88b2795b8ba528ab85b52856dc6d41acbe3ebd125f88af26d0b8b5bbbd21c053ddbf5fa18f6a35aa654a2ea586650d4963175853b43c46c8482d6730d1fbe8554121168309c9e49401dffdfc02d6dfddc30cfb54d0522eb8fd64abd15230d320bb1a0f7e4b528f81571a05eefc49533954a79cdb8ec081925c436f9e228d2d70d2bb3cd6376a9dc6b4c84fafc079047de1a7b7f42d1e76437c3e4f733c511064bd70c433aab5ba2c227b695a0f93fb0481000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020ad6113c8b10a98d81a98eec88ccd6b723624fefab8eed8463560e98c7ad0e211d69acfb56f761d5955a351f5df307f93c1011ca8141d70785de975cfbfc60c1021ef0835d8e9f2c6d67734ab061cd892b427f94e1a3403de420eed1e20281f2010857855a52755ee1feae5dc54f0df73c00e64ecb6f8b490c6d7cab779e8621e300000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016d2acc8966ca5316ff229377ac15dbfe15eca9b24cbc0cf95d0e53572262ebe0f30665b764846d9975ef753c967e93ddcf045a5f13a91e75c3a94a78483688e602cffe3932e4aecc1209bd3342a0f159b2916af0fb9188b695a3616e5661cbef887d47143b29a52f14c9b08022b602919f7d68c3084ca04859f068aa1f21d0f4232b498647436201066d10b9c7310d103902b3fea937f5ab076bcf2efe9a4c9045e6f1f3891d25ebf02b2e357b6bbb0a81a45a45209247ca7a59ae2334d58276eb234da598c2a84b3784d8c3ce974047faf7e3755341ebbfe89dcc95e3edc33d0ade065e6e0b9db36bab0075136ad56e32d1d2d214fe30a02a2c083dd25f1dd2f1717932e190f42db2512f711acce58c8d769ebf99b330092cc210775b05ed2613c90e72a03c43f5be1031b211d5a53be7ff12ed27d8174f130f4060f76637cd3c377e41e97bd15dbad4c91881ea7e47ea610c85f3bdc1e73c137b7c2b7609f68cce9b82eb31290c7a606346ff712bcbf83dec365c0a7847d9c5a8c3d48caad7d09d2ec1ab4e25a7b150c429e5b1fa2ce1bd5d82ecaf161ccfa0b2c3cd8ff271e7a28d06675028f90e9efe7708d6cf37bf085a3e651b28cfccaa6fad4bf7ee20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000983757d5e1af9b07c331b2a28e307f17140b9a7435508d6fd29f731d1ee717d19b9ab48defe9e9ce09a11d97e9b928e7d784f13d782e1929cf105d926eb0332d8e0b912578aaf3b4ede588cd52f9783fe8a5462cc99b931c4288640f6126ff611793ca4a02fc0ab50ca81aa21f5f6e62ce64fe575bcf22b3219364dac7300fd946c4391e1a1341be2da7bf2f56eb9e543e31275bdf380d3cde019ef48ef9df4ed85cabf8abe22a7125bae398e7ac016ddbcd5c47a6c33d5cd6eff3dbb006127217425076d6e21ff7b58af39e9645d5243612398a2d412d6c0eaddf38d00df6689f60c2b5fafce8429e79dabb8f5de6edfe797220ac6f5aa1cbe67748d11f4404ab7d00ca3f2c119f20f006076ecf864d459947df8528a13081bb3f15304c55e7d1994a6a77138aa30aae9d7614147370daf979c08481cf504b425167c6893f75cad82ab8a48e996f7a9e32925298a5deed9815b98598da34b4feffc30d36e6e99576a9f5ca56635d878d0ec32fc33bfd7863baae5748d2aa3ca2b84292eaacd23938159403323cd140b05eb677422f9bd1755f78f8a184f23e7dcdd2d91ecded95fb9938fcb926ed3006a0e858e368711be18fb32e60757fd6439d33810b7e4800000228000002240000022023fac0e643533fe789152ae64a11f7a99ce1c2cfb7428eefdce00268ace1234f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab373ca313a7d55e92aa7e2d1a5f4b4e55fc21f018823391bac1cb3d3dbe5d1c649f55400b40b03f040bb2584b1eb5d19cfe15a36bf5cffbf03caf6a75e2ab2b283cb791c86c81007a593dbdd6874e9637c5728236cc1351bcb375d07afbb0032c92fc4e2d5b68a7bc35ad160ce4e74bd0d3e3690db20266922a29730091314d5754e785d3579906db5671cd0d847f9e55fdb0e5163c162f75c7ac878210484b286a951621c65b13c44f1055c083792719e356ef8cfedd11aa901b0eae793ebe8350873e3b6e804c9ae71b39db5f8d20da1cdc967a2dcf7d028564a2e952540effa69d04c69254f9288873f4f54bf5a6ccbd63bca21a81a951180b0a3c8489880acae5a172066beb96497f3750c5b86d4a9ad9accec0f3682b925dd5d9ec3429d391a48c295270b163379f3aa0232edbe3a5446324424bcef4d6a79412de8332696356e4c22566ad1f050c4a01cc2ebcd6707bc9633b0b4f94baa311da83cbbf3588f1fe131653bf689dbbabc84d82b450e1ddbe0833c701cf78380e182d38858536f5c6ee567d769d02a2b1e4c542aedc8c067a52c134872d633c65acb017daeddce545b6b1bb41aecdacc0ad2af2ea772db41abcdf026ac876208d59fb8be7000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00225ae729bf94e9f7b58348c1a56fcbdd0ba6156b277109a366b4221d9946a57302855b8509e5b83fba146e25b12a4b87d0ae1bbcf0f80d5f2678dcfdcff431b17022305b6df7872973df10a30647a7f5facea72a0c2c8927841583fbb0419da5e861ba3070d4ae6a0c0df5c0157c5cf8a61062d08ee845f0f2b00092ed31cf2099800000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008eb2d3f12b634bd9cc9d9b886b3402737b9388147044671801f075ea846df700c0621adde4ae2693b27dae963745b46c737a8e74fa838ab2838d34bf7902ca96ea3dc5559368d965497d86a6b538f767c6665942c3835e5447627581ac769519e8fd075677446e114ee8fb8e80256ba2ec542bcd18caeddfe214237954c369be2a98957cfa0fd1e793896827360d2ec8ccee369a8de825e1f87feef19e87b1bb6e774e7d91533704245f71d0ee7882726e6b4053abe225b72e305e0ac0ebdeff37828e987b95a2ba5d8dba7603e6770a18dade0f88beda0c4795230fdc2c6d2c43e9ffef66f63b835b89c3392df38cee71d5ba4d1aa7feabafb6e52e160635fea6575993ceba0a140f5398d03c1d269082331b616113ec3939d3aa2c7e78548cbb6e96362af2a7bdc5d2bc331a021da1cf8df0354aa9c3b082c44a01b4d358d3e2719739928188028d49b7e9713e07168de8271db383ecf4c87ddbd00af537afaf2861e227f25f81826f49680d5c6ffb781413e429585370c3b258091448fea20fffe84cdbed81f1c9c0d34d051be201c9a434cd4f8476f9c0e87ced7d593965a8b7e37c196f06ee6186b9d4786ee2c4ba9c1ad748c7de7e1b3cad53f42fd8700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009571ba433a28bbbc841206422515c601054dcc8949d5fd89650bf58a53772f0cee88944802689b194d3ec6871d8362faec6231f695376c3e7e1805a58e793c74214c6214eeda79d0e3be6ed6ee44b26f5afd11b3a61729976a84eb76831653dd9697492ae2aef32a21a0fb601101997dce0bdde4562844f2cb05e2449391d6160ab1ddcce63dfa4fb31503e4fa876ff3c4f7f36691c203a6109c39d1e06a6a57b729925fc57e2ae7356fc0268b0ab555ffe824e6043018497fbe239f40ddbc1c06a6a297804b6294bf2ae87b49207375ffcb58c18b2cc3c71397cf70eda44300b39e2c9c86ebc36559d847f5e57d1750078f6b89adfe247056a7fcd3c9306a7894cf73e10c4d11d1da3b94eae4f8c28b39b2f1621898d5f9f3dc74b53879e59ab20d3d939219d4227ae4e18b61792f338385e0d34c5e4b120e2a6d2d2ec8097a3ea4f3c0c403e33e9d5fe1ba8737d52d3988a2f4d02e4b3a82a17c350650c9fda5be6cc773ee8a733429fe08dfa5865a6e3bf0ded54c0e7ac0b512570d596062e9275f7222788fb3636b79feefea79b636ac327c70f72c98f85528cb87d2b837292211eb2d6a62b27201f07c887c0a74032812356fd175953445f7145890f2b200000228000002240000022013b26a5323ae50e0b474c50dd9e5db075faa530adcadcede578f5d1ba6a4d61e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015c047a5ebbf44eef82b615b771ab9e4d81feba1dc4cf153412dbff98061e2bb9fc009773cd57c0394a9d3f9a6b5503a4effb720f823b0e1cccd2fa673bb611bbc92f61be42200e93fb8b0f0d271c73a9a17ff3785b42c8754fd52b7b5ceea70900d756538ce3073e694d22595fc88793d60fe06bfc62a587e3b0d6b6648b1ac4ac3d8764c3c526206820f1145976168ca34271d459c673231e22ccb04db1f53c4af245d5a1c35f4d5e3e7a3c07fad8579632de1f62e7431d1fcfb8e8ac27735892ab1668d77ff1fe81a7f7c2457847d223d583e5677f3ab82c386d53251ce1ee4f11c7570cf4f7489d7615d1abeb0b8f4f1daff612723d59839db43cee8b7c5095d8ede09ebecdd87846ac1e368bc63ee4f87865723913090e0c94a5791e8d32bf1ed6a58a273d1a4b1ce02e83857d2e486b247c75949c221d3467dc6f610881a62b322387ffea6f87de52494a41a80f454cbde1b4808a0032c90780c77b5e9eef5bf3bb3c31728d12ee74b4cdd776b12ba69bc84a74eb759b4b10466a0a0e3b21b5dc08037e74dbe6f72c51dbce6567ff7ee902842e40586533bce49b208f82e9cde8bec17e62ab62a98f8706f5855f29ce71fe9d4ebfb38ce4cac9e397ab0000000040000000000000000000000000000000000000000000000000000000000000000000bec47b002100911e6f0cc3711025aba6cff925c0ebc1e06e64b0074894cfcc26ebe45c1ba0a5f8d6f5707487c9a9a43c72e32a4e3b46190168537d35ce5b6e3e4765abbc9022449ab4f58563648f93cab42d7b9a0e10e3362dd159ea4cf7b1c730c02d82f4d1002b0e2a42f4094f9566a6ed72e9adbaba2de9f093058572c201f24392e366700000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099d45b791465cb0ba4ca15b5b2779ad93d6cbdd8489224149edfcd4198620fd6550bc0d5bb9c1d6e734ad858163423297fcccbcf1bbb97190b7f74679d3d0d37824b6b20716db7b6035147528ee086bd6418f7bc49d0b39789b11e7f23a9f4b86dd4ac833c8b843c47b84e0e5a98ed1a3f8c2c0c2ffc24a5141ff8b136dc60be2cfdb5a75e84de0f6bdfffbd3c37b7df3c8af86d2f9689f2f34dea97b705318707ef6cbf9b04d12cf5295e044d5613200de618b5ad09632227c37b019e3dc3b12f013f6f58afcd39bc50c53886c1d30b2c12f98f69ad2b14535f3ec7ae89d0a605457872e6a0aba4d6b962a4c6f4c3b52dc5f6428cb13ed0e26a24224ac5b97e929d0b282a6dbf96a89f4a5471306e8653942a730671feb8a192014a94fed19165c0d58b83fcb7b51a8f1516ad52ba68a1b79e9a313a4c78ea1e6bbf18c3806d1612231eb8fc11940cebfdf079089d4de684365e1010fe987e4feb738e644f8e21585623511a58b5c4f36fd26cca2efaaf4c8372329f6659a6965e28724590e67376199c717eb8b6f255f0ab157df353ed8abb0868df6ea78fb06067116bdf0bbb81838efc98fdb9ef8638445d37f79afbfc00d81a5c6fcf0d5a255cd53d94580000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af9e858dbddd2bce1f83c629792ccc3d43d046dc0751fc621271c4464e7c0cfa3c8fa82b47b25ac391fd2299d906850d7b2493ede54c8cd3df01eb700836c415aaea630c01d6031b42ae0a059ff72f17b7adefa63e6ab3c5b2124ddaf86ef50b1a1a728440631fb7a78957ec6b9a11a2af87f9ed081ffea929ee8613889d16353f47b919c3f07b6315bbb672fb9493bdbdab5a9997b12c96ecad3f7604ad6390f37e4236e03312e72480f0ee1e826fd4854920bc5b0a8bbca16d74f65ac77cc2b18a7d54b8c825d234dc1979ee2ed66e635fbee8703bd95593a01ed5617e3e485a533d86cb015d64db4f891f5721036cc8ee38a5760e84465a2e1253ef9e52ef65c979be801dad28c17676ac48ca5d3e70d84dd5d96b552419247bf2bcc4ca413e4e258362d8e2f461d31b5f5d68bc8ce827781bf52d48b24840ec94fd75c80c822623cb9c47589bcf8198101264e5b1f3848066f49840426ccb2a6189ccab0007c9ff27c40d331938dd9b9eb9d4c022ac44a7df38f72414cac3a09386aff6e2f6c156289869e477a2fbda68ac5b3fdcdf28cbc5dc9a38e31a028a2c9fa7ddaf442e7ef104e60fcf0c767c9e1185c33f1acfbdb06b75deaf263d24080c241cc70000022800000224000002202d66e63fdfc004f8d4b3a4d8dc80c95bb34613ad6cf3883c86be41fcdb0f4af6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a66548c8d53ae5a4d98ff750e51c44c3b52e6dd1f020084b1c26a3262d21b7325acc6b5d8682871f0bf903153ca0bf05483b4d19360a8febbd61cbf3353bccd76b64f5fbb2898338243bb55bad3da44db50ea5716ff2594c71b813e4c12de414ae7ee46230b2a3736e479f922f4fada1c62996816e6fe011174c2f19f7c93bd3566a29a34cca1da130d1e479efbc319de50c943d5e5a7606c5b0d57ceead8ad55b07782ca9aacb65ee3f815f68939b8ba33fd3454664dd4b87d4373753593e4f9e0c69c3d0bcf1fe6184abaaae9e8bf8eb5e291e72bcbc03a7c51750a024392b055814d341cb4393a9ba1a07ef6dcaa3baffa322acb42145b292d1984ac49527ef0ddcfb1854d7953418912c06e4fdc377e6d7a7ec90e51688341d6547d4591592cc2b51deeff4612f52451b7ef5f19fef4b178f7e0d7485251eed5f78c3f5b24dda961467b866f398521b228228961da4fec48cf88b28abb73726fe0c3a0b4433cfb4678d6086733a37d4deb4d30cf30b1abad5ecec845491cd84d3f1edeea404d32aa5d6de76b036cff0a814f6221d0769fb5b87d35e9ee7f38dfb917d5d55e745a6be5723783fea0f095c06cff52d1b07152e2b6b109ce3646b6b4b26ac4000000040000000000000000000000000000000000000000000000000000000000000000000bec47b002079e28b60ea0bbc75093ca84e314d8d207e295af51f532718b9b506cc7bd421f1dd201f897c200babebc9d3b8e6f5b4623f80cf1aaeb826931d0c107c565e7fc02256629e89e04a97a1b1d8256258bc88c925eb66eaaa19eb4168e94ff2beb41f702f61dc46870052e70e378df9884b05c1d3d263a7847b0691709aa54ed94632a00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ac9231e638fbabcd6f84b0a0c7a7dfeed8ea344dd55074def48556693c40a57b049d6e70d3dc2dcb83de2b8088b625548f4539a934465d0acc9dca8ac76579b93926c7d54d4aeca85cd926d76b612068e4b175030ae0b808d6b4d2166914ecd9321193d6a9da4f1bf42fdd72165416ae48e31bde5320724a3bfedde6fb1daeb434a516c782219a9acc8ac9fa7d655c997b430a3bf59bdede96a7aef7ac186e6eb19a5a386d05d6c49dedf71370ad0be4d5e7506b02123030c2bdce6c0b0789f08e2a937e335cfe50e3eb36fdfef4f8da488d068f7880a0087323a68c86d25fbc944749a5a1d95c8778bb7c91b6e5e2e45bd2ba586007e54d9f660d3c01230416d48fd7f449e44def13a8b59851240b5204ef68c9c2506925c37b0e1eb2abb8f801ff7f526fa759f39a5f4614f8bf4b5f51bb7abfcefa0f448ad3ccac4ce67876c96cdc0a5d1e5e2eb639f411db1feb6cb6f3e9ba7e8e1bca009e8559ccd12c26657c2cab833e64802f945ecd1c5c579f8f3274846e0f88ca07a027e836c386659bf3bd47c4574aa069949e3c7ad3bf17257ba2385d24ef06803116991158d18012465bab3261238917371bf43d6115f92b8773d4b079ffe64f4b77630470d1c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000163671086c45674a817199c88d79d6292c1141726ea02651caf0654468d557d0a7805fe4d8e286aca0d96432b85a05106eeaf4f53f197e9275c77c1ded9b0ef8ec883edf9c1ce99b3f94a8410e02899fd299fd8f5c10e2980113e0a2f3039bfd97c2391a56d4c96f24ded2a426fa67e6312526e02802f72990238b768f506d383d78d138d374e9818de35d3b5df54c942a001665ccec337ff84e1b4fdce630b62918fba914627bd97b1b817fd62836048ccdc88ca6a55271ba9b7f07dd260b6c06f04bae5f37eaa8e4464deeea9a8c670527482b3bdf4c6bd576a0ffde3b95cc955eb4f6ba858998303151707d5b7876cf54815fed6e991ba60b06dcaf121389eb00f676b4fce9ea0c18c7e84b4dc5339a9726ea1e57bdc3ba8b4df8b31f18a0d72ef7783483b7cb0943308159cc95e8dcaf52afbe6385aa481d1cec9ee7ecd45ddb717705e1c3d49a89a5ed02c072b070f23e32010a96875555fc2d513474baeb93e1fa4959901328046dccd3255973884e1b465d38b4b54e329a55038ada55df76d30cf13248cee6a3c5469f6b3351dad9e23f6be4b1d373529f175d2bf7817c3d0853f7ee184d2d0bc5720a5f90397c84b5bf6a9fb11854af9a22a45b85f5000002280000022400000220036557fc7ffbb6dd308b5de7e679bfc4a20bf6ed468825c238c93c78fe53999200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0137ff8b0225cdaa3b32f47b68b4db5afd7e81d4e2db149e4a8e35c795071dd71045c8bb6b9f63b073004daeed5e7ab3ebc41165a622e9ac4d702d16f87e999e28addc5b5e82aefc25264e6d44208cd17f939312a9fdc942b70e845284511ac4aa2f527555319bdaef74716e16495fbad6706d16e9c247b24957d8682fb493ca671fc680401e915182cfd96cce6e86accd7c68eadf2ba64ef9df99f712ccbedd73e6564ce7f28e283b011c4934af834035b512753148f0bf9e7f90865543bef55871f1c5bbf5c9de7f9036567f07eb128da32362742970010dec1c4c4d00a7ba0c9b70954ba20a0e3ed29703ed33c10ea092a0e1a010ce68d3c22ab3adfed68fb7c537d3bcfa67a312a1a6245c820f332725b2b741812eac318a9f1bda08f1ef972410635e1006a03a91d5e983ca07652cd1434f254dfc6f9d246f3a9d929027611f825ceac1b757056217a8bd37f64a733c845ed20ec13896dbab66366255806c72f96a23bfe30b991f8db38af19bd7662b7d42de233ce4da7ae5c202ae84a6054f65a9a10ba8e33a7b49e5557caeec6fb437c4b0bd1de439df0f0ef3d6b72f25f4e8d58524d1aab520d0a485bc27de6325446096abdaaad356a3ba00fe7d4000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020ef4087f801f6e5d0611c9b5da28fb986efee4dfdc26205e06a3b2c29a068580240bdcd58853637bb57d04ef6c02567573eee219b65ac015e48f7eddb3c0c1ac0225ed43b8fe7a203ac375994c1c321de2bc7a10f6c70f7aa433299e5c4b97ab8f1d910d8bbf114fab15167a6c9bf7e76cdc77cd0da0b46fd21a96f20fbbde3d5000000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001914da9a3a1105e1d7c3b1a2135034f0e90f1b2d11c1bd5f2ecc52859303e2d9314df193a85d37ccae71ed4851783d7fd7d45e88066e209dd83064c180f4631cbea4cf65fc299edea7d4858fc40835b1db8da86defe3fe43cfecb9bb56f89149b8c2a0b20e389d97f6c67e388740ad59fc901c6c55e00336364e2e05988f3e6e5cd85d295e07af264c76cc1f55593351fecfa07c344d3157ae179360a17d274ea9178766b3c9a27127a7d39265622164fa6f56cc8f3f76292fb8f2178f84a710d06d66116dcf69c09a16a207d66ba52bd35447a3d64ec3845a0833da1a15fdb0d7cbb33e1e6e9fb71367c0f5c79a3ca762ca2de4e1c37f96d8ec6bb58e6fc5fc7c02066e2e98170c1e794a438bfa84891a7209cc5494f8cc5451f23b3514741329015d06acc9c3f8cbe04176d0244a41020ef836a5af8dddfb1f228829255801aae829c5abf3504ffc72474292aaed831392fc520b3781c328033f9239a4215d5ee0a368b1f44c5faa8d1a3d558da71f250299ecdec962a0f09ea12c574eff3d087ae079e58449743c7459ee2e86efb642b73debb919d60b6f1c649c3162543e3e3972b660316ab311597f1a42e0cd2238ae160f18579dcd6d4416da087752dc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000831d0442260fe8464dc7743a5076d391229016f74e7b34f8d054a0b2619e7f4b19e255151b452135623a445777a09c173923225d5d8a15461fb1ad67fc9a73d306f0dbf375ca5d0a5982b4c48924ebb984a4a8354165886f8ed90e7c65f76ecafc407809d51632af7275a84281e795a66f7e25288b848129036e4e9c7e175b15c7176ec6c0036d1038d6322aaa1e6e7cc8a91fc804557f59eefda8d9242070c9bca243e04a1f828acf9e6aeacba7c4e517f2a828a71b28738757ca8bdf928d17b175d99be185bec795f96dc21b592bce2b8757e7662024acec55caff10e5ae635e4b91d9bb851a6a94542ab67194c420891c6d911f718fb486576e998ca80e1211f4a8e0cb91a777d31b5e207e8cd717631b5e2cf72ac271ed49da2236568b0b7570fe96dc7c9a41a4bb6ed104b5406460d9684c0a7e17aa88ee8576fb08a4fb9b8268ecd8e489cbb22623dd53fc369a91a2dfeaf565d945382f3b96f6764f7fb060c5e3611faf7868b18c12caa56b046fbe80288c441739836885b924ed0322263cafe8bf4391672a2acdb381361e2499221a9603dfbaeec6ee09c80942fba170251148aca59e898d6de79752261c632ae292210ddd8a08dcf18e590881b4b4000002280000022400000220300a996f0db23899f4f881f2168f66ea04c2398a87789af2de22b0ec730863600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d3eee97872cfd7b59b3814893baf110666aa3ae7b40fe1b76bebd7979639cac4d38ba99658f7d77282faa86452debb38107dd1c13b16164d9f07458b42c03219c2c2bfbb8af8038fb04b16227c23d8d3df23c255e84f26b7de5d42cf140dc11e6f0879855053eb360d1157f3700a08c69dbfefc908fb808a06df6fec6c7438feab9c522963548419178b8479928e71305a3e62f6c903164ab8e99123cd83975db3bce58e949418c49492850c54c711acce087b013718403ad6e3b96db7ed88c386dbe71d7c122e726650047dc5eaeac14670d80494cbc5eaa62a2fe9ac55b87942c0296cc75f8bdd58b6090a1e5ac78b1aace65d9a88a89e239bbc393df576670c632c369d77774e4ade8192a3fd288965a228a5d2e4fefaa56e683fc02f1e0c0910b9fe76161f0bdce003f91e17c876d871bc18f36dbb7065dbe7065546defa84f650655d812bac618b984ceb35e367f2df80013c1962a4f09a9e364c48f19b1ed4b89b6cbb9231d6412ceeeafab344b975ec5238cdb4ed3196deb67b8da3b68950bb64c4ed7059c26a91d022791cd36d6bc2a565913c459c308d17ef3a9a00ada3e097c954ae8449d8d5084c676d66afab0193a9e33b5108138ea9066991000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0022ec47f40af5631c04e33d612706531284c46f565834a2789ebbdae43d1f9dda926a8e7fa6f041e3df4f4ff603ec3ffdaf067fb2a5de0687781d00f55fd35ebba022764ccc0c91f3910eb5fc634e5c184d01aa80b1c77919043148a575dc678be910b32aacf30b0e1daa566c7a0e089e329d40ee8ee24529ef34920f716f077365200000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000293f6ec1ed8ff22db28362fab0485481483c3e90b3993eb7a5499994c4c1fdaf37307308ee810127d8011a6139220f6478593503160429a562a51e791884644cdb7d1241a65cff244f0709ba9005e7c9942b83ce8720b439e0a30578039efd613bb1ee3131da089b82360fb1c387c861c14d71f39ba46dbb92a8b4b9261bdaac60e777aaf2d7f324054649197f7db0f992a378311cff4c728f486ebfeb7ab8e1bc7d2d70fdc9064d23ac8efa11957a2bcabfc4803eda4db7f6a85f8ec55741355bad13a2305a3131ac868e3e484533909bfb24f0d56cf45a4bac93f76671b14d876303463962cdcbd51fd0bf5374577b6d9f5907555692ca90d9fb30067695a23569c3e51ac6c48ef6ad65b2928da34a4ae1f50da190f68600cd69bd015259073044fa85d1a67859b84c3d052d5b37743af5924db777f1944318f1c15db776055ecec1e6ee5fd359be47b42b09dbbbfc69346c9390a90d357549c8ffdfeed10806490d1db34d6fd41068d9679210e456148fedd8d6856efbf9b4e70353943e4cb4329f8d2b008d9832ffda8076d7263a98fbc72301db689ebbd3dd96195db566b0014f96d1b1529867c54b8667513703624d225365a7b4b5b450931a251346b60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000109410526e62f4ecb305009f43f8a5cc2dc7e05e377b8b23945ccd848fa47c6ad3a1018ef749d4ddace8ec915f5f88775026aaa499b246eddeb7cec792393ce277479c782d4de386dd2a08e333b42324c098458616dedcabce419723a79009d5dacf719fb93909aaa3ae4c9f5dbb23144a2785aa00c9e57755ff93057875bf8f8bdf795788765c0e075a063f79f492394038f7f1fa301d2149958cf84aee314af76b7650df6bb634e559c859bfa634f76c09424ead5e261d818742cab0163f3f0fb827178b41a060118d18c082f5cdf6a53336234c54c20d01ad27b706160773d6fb30ae9835e47970d61ad52f5c25a53dbc0a614e0895fc4fd34ed1d2c5bb41fd34d6471821b352f850e8f66ed65c00a6ce9e289800e1a805d392fe2d3e9c3932abb7ee217bfecdb32fbdd3c7612299400781dfec816e8fa0e81a6aee02a606a3e9b307c29deee5c752d52580d021e7b0eebfdb53a64d7903c94d4251da42c96f0ec5b7d0822577a58f99c4bf3ee870860524c25b9d37f3d868f0f6522a3e94bc596f9ae5ddd48151ced68199c31b23013ffc703c3a4e21989e5b342058fff04b43decc7b67388df6061f7ecf6717e2e2f644972f5bf2ab7e0ef5a0816ddd5e0000022800000224000002201f05eab8ea44f81ac409971cae2c49b79666f7f99a9a9abb4abfd62a8ec1b2a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000971e2b8b11637fe1ce313e864f4c2cf3fda98a519d9276d4eea5d043e0c8017cf555d5d713f145de881f95e4376337fd844f56d3c2ca1398547f079972926cdc8c2e46d1b14091b38d28dee6d962148eeea4548cbd398a94eae68f6f56429ef28f11577aa08c8acac8eae4d077b9eff94bd967bdb28f40f2a3a5644e58daf0769df73fe5ef8a1810a54794af4f4dc77133e7b73007f71733eb1286be0d9f749382bf8425b91166d7ec7bbe6b143a7be448abff031304c233746d83dac9b46634478a834a614ca68faf288da2a664769251e35b7cc864ae7cb0b8fba77de5862fee5b5dfa1c655c9d8deb7ff0fb6213d20ff6a2f6a369788a83aeed7ab37d85079f834ae8e9d29c6ded6ca64c28a9f4accce6aea6a271f37d092c376e8e5d0d50d2d79e6b91edeae4c8ccbe927a7b3880f33ee28eb1723a5a687162dbff62c73d91e215f9d2fc1ef34ef6589185207b23828f5a7db135845439cf7bbb3c7ea061e2072bd4d556d0f8780239d6dbf49c918e688ec25145e30ce85615a17aa958b9c6cc4e7976a578c8753ba7d4247028c6160b030aa75ddb6940c59cadf5796be1ead57fb1f02a241e8223204b058b44de66fbd49e57390a04de976487ebeb9d29000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00227ef9adc22a3f03c66d62655077d9011f5c584ceac000849020c4664c101296a258c945f18068f31cb78b7cfd552d6bfd4dc9483a9b2ab2ea3594712f27963ba0228bf5fe693549ec69dbac5ce7e5673e5d5c0024d622a30c7ee7a9e5c53b97fe129ceb844175a1bc27d6f77f43f92bcc3d51f65adc1fc8d92031c66f52e0d881900000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bef29a286aff6392252a5ec66148443af8aa2b5efaa195f3e3ead2c325779609880aa0c77d47b76c631d8092060a7b046ebace25c3d57a409a87a614de9f12f28c8b0186c48032b06ddefeb52549f8546030af362eab4bcb789843ea6d11cc2d60d1b7121bc21c2c89436acfb11deb6c230bd6a78996217f39fad32009177c089488f1d905a7169ef15d426c1fb75ea37ddd58d2a4679261743850bcca775846f095a275901593ecb87c8883e2d6d4295af2260b53e2bf1ca38938e5a3ee55919198d49b36e1bd8455e6b69ea840cd47374ce581f00bb3e61b429a66455ce8f1c08180e7b2b59cbea232df061c11904944bfb62e6565511e0a0fef4312bb179f8a905e379431503946c245a89edd4b9d90a0502955b1950a18e3f978d5040425ce59a6dcdeb77231e39c91b54b31316f1a00da18ec0ba39a6639f36fdd3e35cdc0d57f8fe219cbcf890030d4dd74e3e84eb9c226785e3dc7e7cc53edfe2401dffedf7dce6683dbd4a620fe83767faaaf13d6d2dded6ca8ca2f254d8b1ad5fb061f8b02c21087e979ee089893709f6776978e173a4757cb189e10df429c33f9501eba435d9e33aa754d1b97df1cf0806195b1191c86caa829a8110e96bb08bc4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085414b04388949eb557bc9a2689e8cc5b1a5e0c22ac757e07e27308eacd8aa4944cccae48c94c3479c02be61d8338a05830199ae7dbb53bfcc1a6cdbaa1b13d3abcc8710ed25dd37dee17ac3f1b7354cc7ee9c7608e87607ffd0e096157a8598ba5aad648d12e5e1aee9ad8db64614405c905b2d625b12d519a804347b0f18136bb383b4cf3ddc04c8313dc6f6d1f17c3706933717fb107daf53ec3d4dd4a11fefbe2615600584fc1f1423245b1ab61d2247a89f5ff49eafa1a7fd7e85692c02b5011e5d1405ce137a025db5963ae3d20cb49a16a4e2f9a1e87f7cf1f938109a882c97ee5f4533b93abec9e468976d9064d57dd39d4a2616862150fd510e24dc214bae4c20a9c575abad990ae2cd868511e785b8ef7ab299c561408ae7d1fa91221e3b8eaae33ddb97adf931cb982dacc3d65ca2db06d771bf2cf1f31a8bc8161ac5b23446c8c731496395b6d353eb3b6728fec67c239f3f41f635474da57b2eca3550af429593ce84087feefa8e9374da6068512b1384f463efc8e8e6dbb621247ac5f6949473c302eaa5356eed97426fdcb8adc094b02eb749ea8f6645a5ea569924bebf8f37ccd48de4e8e720d0dd398181851420302a2fab31adeb298ddf00000228000002240000022010b1345c688f5e4977170afff3dd4abe4e8aa1c308922a0a46fd6c3b0bead4fd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002710b66f53a4f29f9e888dced55d35a15feea2f01f6eaf41d000e0f0cc4fb7a3fbc75ee3a6231358929a66923481c9769fab4663e1990a7a201266464c304bbd166ac5f3655c28dbefc65aa95921f68bce0475d1121487ad4eeb4390b1c5b59914273a2e40d1fe58affd9f522eb9cd2f69bd752ead83de097dc3e0c565b79362e684ed432a47de78308a0056b97ebe2a902edb7b9073090f86e42a6988f9a1f2d40fe059ae575ab02c8772e323827660d912e33afffc5573b5b2bb6d391ad6ccb59ca3c6bab15db5529c5ff4ecb470c5654ae58c8f9c04855020626fe39570217ffbfd7954abad81d19d942f6e7148f845a21b3522b01552a5ee73586b77e2aa622e735174d79d832ce14f4a1f87d531c8c43382ecb21e4029cab198bc1369afc801f9a19fa11564dc1422c85c8c7a59d45b63eaee72d2d05b86b8f6428581bf6be2c52206a1a368881905080bbb106f8b1581acad00294b12a6927685ba7b0c37682e94ddf58f036b900f85587a6f06ffe450a3fbfcf68b367a7dd41cf3ad65027b1c61562f05bbc41cc0f89a427d429fa62d560ffa356cb8dd51ba775ba741be8f0ebb84e3d85960ce7d61807153ca53bf20f9dfa52e9eae947106fcb4c6cf000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00229dde085a5240e576a5a4e98cf2645eaa408e243b97d6fe1f264d1b5871e1fe22a9ce4c7ff0b971ebc4af8b3bd8ec256113c1249fd45bfa8f2112336bf01b3410229e2229dac3f0e87467829cbdfc26060c9326146b5d93e7bc7a4b391d6d900322caac35a9a52516f9b597a925833ee1835541b897472124c94447c4cde4da6f500000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000993d4b9082dba456f2554a656061c1b16bfff7c580b49b12413fc2b68345562a85b35765b2775b206e42e1b4668e124f64fae4017dc4ed23faac0ebeeeaeef9bce2523036dd2083bfb1c41439c7098c4463f459fa6e5f347b6219a7163646519392992a159888dff61a0351331f8f1e356a9b8fe2bbfd5d49f92c95718e80ad1ad857f57458d02b9705d316a96f053580a997ddcf138e1fb1999cd92ce0e95a24d1dd934afd711b7029f1712d9abac6e11386e324f3169ffacd430694463741c0f333f437c0d73f0026d7dea8c74c9c5febe3700d7a1fe4bb51de72dedf386c6ae728f5e1fb873afb956a9a73dda8ce85d2122719d7bb6ed44d802ad5eb6cd189229e71541270930f505d7ca75906aea4c0ab60a23ea6fb56d19649ca29e2668323b7526ef3956613b787689869aa43f1e083675efa65f3634b15833c7ad6609a1ac38b9f433367a4e2c833b1357d930f0ab3dfa465d6af8291fc74f3cd5ed7ea9249fe5bfd78ed5e6b60e2c5e488114f9af729cb31f40b1d84d4b86f20130f816384126d8d327fb59f098c692972662d56a04a4a7cde87dfe2996c914088b6364b44bdc6a63a61d5a9c0c865b9c4412894e1742a782853b08a459b5f5156916000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b7eeda35177064bfd3fae0f24f308658b8ee6f4e319b64eef2e9666d3610244ab84fad8f28e1a6d4dc0da9aec089225aa2301a4ff09de54db3b696ff48c27f0f2a1996236c91e6dfb114529c9cbea1b9a4460b71501f45cfe02e42a26b5511bd49254099bf9044e1ab6efaaf31addbae54dbbda5cf2c65eb2762a5247c98e20923dbd3cbd12aa523ab72534b010c7ac8b85faec733ea53255923aa3062be31d740ec19b4dda8a16fa5c6fcf3fb6f534820f6f13463f4433aed531bd91436d8c67a0c2958741bfd4e633d848ab3fb43db65f2b451707defb87fd2611b90f841fbfd7b2a891fa47ed57df5fd2dfa20521db125fca79c65d5f99001c85fc0f7cc05bd05e572ca679bfe9bed9aed4824d7763a7c89abb3b18f518ab946ddb7d10ec3b2a122b368b04e1d3b1ee9ca6582dde62ef757f5495d48b7b7cae18990efed015abeab706a31e5b7f23bec6fa5b53aa9b4ef81bbc8a04aed23e5e1ab42362dbc31c304ec21bcf86afa4f002d2189b5b56b16fdaaf1a84e76066af1704c55f0de06d6d5599235013a2e5138faa4f8f1b968adbb8e24d2fecf5baf78d8baf214e900d685b97c28c182bc7c22cae05bf8e685f061dbfaebf1f5907c439b8a313f000002280000022400000220305ae1b7d9f32a623131f24068d68bf612ae62b8b648a3f969e4eb0484ffce8700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097670f61479e873779fcd04b1112614779b5c4d4dada9f5817af5ed1e94c6e343a7b81373acd71280226939ed836a76349ed9fa4da64c9aecc7dad77c91ad3b0ab48c768d92d6e23c54c30bb829b5ebb03333ca9e136d66c50b0866ece905366828b9bcecef99791172d8fd4302b34ef545f4f905bd7c77c7d46163dd11c22e978c565465c5eae8313ed6d58e61efa091e35a1afaa8ce17540a08506a1981d6c33e7fa101a15ebe30e48bdf6514b5c7553d71b973b261dd095882248d10a2058b9aee9388630a2b52dfea478edd6f5fede355d907bc2e1fa78cb447b5867c6e7f3869f416794ce351a2261072296ebf9809373a7e9df25c28ef0a647acada3f824dfbdca9a8c3286d3700cf87edd6520354dd4c082ef5753accae40339e6521b4dcb5e964055037df84db81c60adf274c350959086d3bb963b4a0d6a09cab12854ce35c19327b6eddb3a0a90b3ae3fad9d336550df0f87051f0e48a00e2592d0bad0112ff69b1acb92a7cb51b6b30f0459cced7248065133599f7a4906ec05fb7b8490d69c66a39b7c06c369248cdcbd42ea0cc132af7ae0d321b7794cdbefba356c5c19c9947359b9a14860f5591a492fa504aa6ae32b3bed52e397fbad311000000040000000000000000000000000000000000000000000000000000000000000000000bec47b002237214ab8e116d281b6785b989a2e9277b48518dabde6fa53cfd01631d00dce90bb03409b823b3dc6612edbac6f73b6437ef17a9e9b0e9f9344f3a05aa6e63af022bc8e9a4b2e40b539642dbdacc41aeb8b62f1a7802fdace86ea11c144dd15c982b3f7262657b23f2528499335b485bf91ddd9fb84a781727a7da428803c0ff2f00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080294194c0f9fdb8edba9e9052b5f7f15d8dd066872defa9d53d9f15deb300607def71975fa96e7668d13e993f2ce6b4dc01ad01039a0b17c6fc2e0f382ccc67858cc2ba918bb2982d1655ac0e8f52fb3a79198320268133d8ac74c192b0e573e2c5d133b052d1187a7fa0b457d7768c4f63a21091ac5a00dd455beba0c685c7069290b3ac98d16e251beefd1c79a97436fea04abe5b39030620a92d80efa6db6dcebfb2d878d75686be55518494bf5e14105effd3ca3e56c17366bc59c42fbfaa2b77181794dca236fa7fd44fc83cd2076b11945d5f71851f7579f9137704b2f197069d8b4ec3f2756e0de13cd6daa3708c5ff59c0c76a07f2e1176329bedc81ebd5e95bbfe52fe7a87f534a4bafeefc716254b16d5f79d0a12fb1ec29809c3152ffbaa3736ec125194ec897105389efcff88ea7ba179b2727dd6a13f2fa28980d0183cf4ea94f1928934b592eea5c060f3209e2da34086c5f602579966b0617d2f701f1ae44900b86c5a924fa4a19beabdca3fce5a347830c19401544f9825e61e9eef4b87e1a47ba9cb0fe15a4eba38a02733e49833f4799a87e28c0f72053510a3b666fa3814f6b7d0456c5e867266a496e7ebcbca34cd4706cc002f05e1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011842e9186fbda27839e2c47a267947bbfa3b15eb05b421f14e06072707ee96d8d78603b0f4cef29b6a83099c82a904555397adb05d95f52cb1636d2fb0ab3058b5b98b81239c0138eeb21caba41f7755ab3c4428110bec70b909837a7de988a712a91ca3ce77d769c62ddd653f7d03f4c2ca72d49a4a41e542770840ee348d451639f514b4370dce89a4ce488352d43f325f906791939857c9847ba3c1e72625922c11019a12ec0dea87c829e4756f04be27910002585ba3808b44fee9df0156978da1ae40d1de47ba3f77e241c62292673f389e7bc9c2a439be3c21f4ba249f801443de81dda120362217886551fc6d2144d3bd69961b95800034012e8968c3a93275fea3be27b55a537ca1a486adc156ffdbab853a74c8ee354b8fb14342dab632b54d962ef22b8d7165db19b628ffa8a985d64564941788d637ad8dc82b287e0d45b67fbd5b11cef16920f7195c4e5f38a9da989c15d3874b6d99ff89eb6dd0be03ff094bf511abff50af7507505cfce433502cef77756ebbcc858e795ba31bc80d8c31e050fa0c98d84cf2f36ed623e609a053ca0548551e02f77502fa7eb4030fe994527a574c1b44dc10f562b2e16864cb8fefe07b29700db02d8441c00000228000002240000022013202ed8c05c320b1ee59df04a4645653e8360c7af90ed101bf3dedde79c4403000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f9b8d5b4ea6d6005f7b27535876dbd40a44b0e973bd844c964cc641dc7267d3ee7aa1aeb079d74491791c3dd70ef6715f939b864cd43b43bc7ba63fc00e7f8cf465b504b184f9e75b6f976b7af92513f7edcb99e825854fbefa94fbea5e1312b5f11ba73798143b42db6622cacc58275f4cbe842338ac14203666502bbbc90126e61a12253d87f6b18412c9cce05c126338cc1c43b3c6ad408c26b87a23d6b56f547d9d6df5c6d4c006f6c57e64061d01aed560ceac166f4022534ec8fa2141d97edffd69a911b9aca2aad3aafa0710dc6776e8a0ea43442390b6ceb55c3477eb1f933197ee3cab23addb89f1c0d28388054d10d5e57158ed64b1513e8001b265136895a62cbdf6df7e95f7d89ccc674e963533e80e8a46cf39bbcdd7959bb8880f6957a01b7107ae209c8a5db204236d0243a0f5a3c6cae41d35cc398a2732b150fa6bc9e8f39f470d523104ef22a416dbfd6a6d7c5032b9f15ce18cd4fc5c58efefaa84aad7fbd41cba3b0e1f2861bb1df56edc2141d92f9dc1350426ec7ca3c6537da8c469a09146d3e26b4fd0fa8f77be8cd1c1c671edd12074c7fa7be82d433fd7900590d92daeffb344f184b4c1027329cecb121453839b006080c609000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0021f42a8d0a2d98a2b560de592fda7dc2c1cee5cfa3d7a6557e497d58230404ae807a4870eb749084964b452657a9c68445e560aee8fce6fd057ce2b50b7730812022cd73dcc07d1679f552f7360a8415576954ab682e5a2ea722508290b908c5b9b20ea69eb9b1b78064dc8990d7851e8926c106068b52c9c273f98431f5d0e383200000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a34ad6c3fad47eea33d92b715c52d4703d12c91db760adbe5e776ac80fe8548c2ecef8f2c84df280475ef556536752c84b804c3cb7d88d48199d43baea9a36ebd78fbac869729e9f6d05799495aab1381343d603fc019b79888540a9fbdd526af23770f315bf8512bae411c49e8ad0c0c88c72f6c8fe3a61ef311b21f764bee4fbd630240ff769dca9e31d39ac34217e43e44b7a48d478a6bf8bbc3f1e6d41d803bb7b203fcd309d884fa0f7e8a5dbc099a2ad156a127063e001823f8785d83ed9f964f49bea06e39a37597206694f84e899119cc66015ff670aab09fbeda84f1620a0aecec320d81945839874f3985b613525633ed8f048fd4ed5042b9b400eca647fa1e6c020b4056b9a38642c95d120ee97d67f5c52f5a1430fd633258b74752e46cc3336c1a71f623bad9ea0c382cbe836d4d2fe447f46a089ba6a649de9fed49de5628b107815d175b9c1779e974f6fa763fece7f45900f3d00133516a79628dea615f1a2e8945fcb49b71c698108ece8bb28149243be47982ab24c28fef06cbc73b24a559a66065812450f74717f68af68da5c7907e99ae89d91088e4e2e7d042dde9537dbd3fa4b04f21fd37ba7b679c86789812e35c4b082f13c46000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022ca2d3552ab60ea3644012f36f7d4f84fcdd8d61febefbce73ff35e18fb22f0185bde9f302df52b405124fba9848307b424f84ca717cc9b01e3508f238b047abbd6d3724b82bb20e038ffcb7dcf5aea1b1fe100fd0714983dfc0159827cb70fabe7f1f949be8cb8fed218f41a35d5765be0e3d93f926283f0877fde8ee91068b2c02830fe09cd9ed63661246ac0fae26542bb49eb10d45e84b650116f7c84c964251cca1fbcacbb1da7f00d6c0c19dab9c12cd912a8738e1731dda849d2931e5680182baa676dbc23829f63d1e75f482c5dd04e487ea455ca9261ef35b290d59aef758745dff7f8d6b0d066d2c05aca0e824af7a992abcb0b7996306e85dc97808ff8ef9f6c6ee00f1a0103a71730a24bd4bc3fc7cff3f61bd745e5b1abbb0f7929652551fe09ba404aa33352fb2177aa91466ad26935cd0510de560b599586f7e10c3d1a745548cfdc38352a5dec6ac4b268b95c60de63da0266287adb30cb16d118fd12e69e15206fd720cd43bd9e845ad17b8bb0d3935d8508ebbe73836681d01d0fb68da681614439fe486d2d8ce05f0f7f5313e63edd4a1fe6cc7e1b076b3de7aabbe701b31f3137bc321f53f60a417b32b6aeeaeec6af093a2c3f3a85000002280000022400000220270318a8a8db5f98b5dfa7964096ae6fd2d1ea50584be7ed3f2f95365bb480bb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b5d53f253e4d00a6956504841e4569860febad3585908870c796585b07f3aef000173478c3950fde55aa6fd85371381d12e4b2f984a47e9f3d6bcec7972f225cb7a2facbe2b2b9e2b863d179bb88b16ad7450f717066c49c8ea5384588ff040047c90f40ace0ec7316f8bc372616bec2cf3632ade3b9910981593532cf5dac15ad8c1393f766d4107c152a8683393e26584d19aa513229c13418423620e305e17b368b3fc9bfd5c0479da665269283d8001677a7ea7090d32be0d8dffea9f5aa016bea97f37e7b25d132b673b346d1a3347c71356efe5470140781059d81ae38ce2c46610f554f61d5f3916bcab18d25f8380be33c0badf90ac8a0509ab8768c6a151f7c101d242eb5f607aa7c6ae1187d23b81c39f18a86a8bf3516e2b5164f3bff8288f4239787ce3d346277823630d81ee0f1532d9cac615811fc4a04351d0e5b318135afeb4050962e9f2c360ac117532e7e86dc82cbf9dd74ae450cf39e874f9b5fac843f6de3796d501c6cdd89c2a2a87416dbb8609831769480df627895e942e2e94a1fd86309e930c53a039c60c36bfb78be8f2b7886911a456b0fb7b26dd9f6200a2e2ad4ba59b768e1f4189b6dfd601a156ceb5f91d71760cf23b000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0022ccd5e635ae4253489c2d81ebc36b7e9886b09a77c00e30f3e94a2bd63e7d738299e5c2b36d30f0072772fe2a4802883936e2fbdbb8ac143bd6cfbdda1c92c77022dcdb73c6b1716615d6e6b094beab545b27b1fa5f0864c8e358e7ccb3f9d20f41a39066e7168c54371a19fdf68952e8c0014e55a0cba0ac2f33852dcb429460c00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d6a557c859bfcc78e7dc47fde281731dcdf8ad36a06be24910b7be05c0977717180142c935265bc70917ded48d2763b8a2634d2976e915dc72d95eb0e44f59b09e2bdd348e5f60ecec2ae4b259ddb31ca4f1eee65cb6b62ed5b8f5b44ddceb1e73e797636ded11d2b02f5b9eba40b2a944517b2eac5dc72fa2927ec0f50c2c99fe802b5bd89a72a5a3b81d6ec1cabfe292d930a879c4149332d0e84fd7f1cb24c052e216b4a828611cf1259da111afa2795f7f9e1ce8d02727c5f8cfe07b134d827a56cc9d95259fbd9c568f50d3d5246299ae2b728f761e0f2dd5236ea3db26b615554de1064cfa5c3f262291d1b35918489420cca0729e6c88df58b76058f033b30044f0e8fb1f24b0c95e0027f6e9cbdf9c6c5a850c00081fcb6c87ed154a1f9ba1a7c6b50533d7aed9d477c8afb23637361cd2ccf6a888765b914f143c7b70635debabbd53c028d9e3c02cc3d297c375f2bbca68e347e3f26be66c7a0ffb57a03452a841f6c967f4d1b6e6f9b26c2192124cd5d735db200f9e15f2d4d514cb345e252371f66098c311fb802df40c07735ea6d3a3a8b22597447df919df92af8c8e31c0a6ffcf46c2759640559bb01aae32703d3c8c931d527ce7d84bcf400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f46aacdde2a8ab630f72f0e4f6f4fb37869a5f6cbbd2b052c71e2bde7c92b96122f64ef034f5ac6d7bddce292a4d0ca3665172ce39b5d27d9dd918b7b8aa1e451f12fa8dbd8829b85c03264299163aa1e82e008b98498ff68b8c3cdac50a8460d7364f13c5d247e8b2046faa7cc6d4140598e91789d2d83021327e7ffb602c3dbb52c966f35ee6036ec6d5eba398bb73cfcf7b14bdcd8c192a1d1b4c007e879cef9c2e5f0dc9880c63e704a331cb97e7062d8c1616d5b8bbf04e0916f2ede33eadfe9ee4c5c7d40fd45fc77aec172e3e30494319d60d4bde0ceef448f066eb373b718c1c98683fa44d058a66cc5375e6cf055f001dde8078a7545a767e65fdbd5353bf17abe5a004a7e7ca9ee1551ea444cebd95cb871ca2848cc72eabfb45776e05227791f5d2b5b75a2dfd21318bcbb568a7eaab9c487bce0ad3768f2812bd4d6e324451ceac70c643b47df0a3c4d182d26d6db7538b6603281d926d5b11ae61e352c99984707c4776190e6c2732255888db684df80bbfcdfd58921c1f09dab7e12584747a1d42681e6e87dd28be1eb6cb6057c04b70b0a05368fb7daa9a710ed84d9891a96db7dfa2fa2c59a0fcbb2e3e953c92a3a5d1b2ebf15e049cb770000022800000224000002202af5a305872e7da228be5ba58daf0e55196757190cb76d593d648c96a823cbe300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000206de009c5bbff2f8a84e4bf3df2219ad09aacd394790a3986f18345a537ba4a27d457f1e29a799690dfb85d0cee6c2bfe243630a99b62e6ebf96924870011306aa120b413664122d28643b8db8ff80f48c51c239de5632f629a90098dd6790bd49a2053d8654bb40b1e452a47d38e4eca3a68ef6e60124ac40341b5569418d1d214275d4ad12732cd579c34b270859ef98eb101d0e77d5ac260880e3146044c2c74a6228abdcf0bcf81ea6425b34d3fc967f3b11f37be7e4d87d18a882aa16954f22ac4ee9ab708a19e882c1eb382dde62c858cca9b34492823888a94af9d2698c4988ebcc8d7b4de7e21c81a204ca35da9498c54a7718909ae6b9191406b6878205861a26b79090ee291805c3f9315d1e0172fe06556e42000093f537d71d9e6063664dfb899678796e6e72cf648bf8662db7b23d325d601e0cf0fb49793d6ecfb38cc2ac527c5d04200faaddae3a19255faeeba408be4edea9e6b71dd37fb148f6407ca9cae0ad4f04f4df59430d214f8babf68ba04ffb95cb731bbee42b188a54453cd60a89966e949be047688375002d619098c6d05ac8e35382706d192d5a9acb429caddd5aae2410ff84385455c0932df04996348b6c5401e0cfd851b0000000400000000", + "2c335e1066cc91e2e1b59e0d212e7b0a2097c808e9ce1f19aadb4f9b5b23af5d0000000b000000000000000000000000000000000000000000000000000000000000002400e093fc291f1578643b6261da66be1432aa6ab32b78c699ca99f38f4ef164f800089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000b00f1a6bccb2a9fe4b613529842c74a3c5352087924f5687fd497e4c250fb0f6c5000030001e1afe041ee86a8b9bcb2f7f1b46ec877b879675cf690bd610921a42bd7c2956000030800825bed0f04513688a20a73113b41d525a804966b3e35ccf0894be7867dd9f59000030800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000070dbda3c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad376dc0149c938e85d129a71522085a0b25ed7647ba15b9a58658ed37e53e63b9c0fefa0000000b0000002400000000000000000000000000000000000000000000000000000000000bec1d400120dd610c9a8e127aced0676f587ff72049b093a68b85d8f1578ad081e647ff690200dbb5bd0fe8b409bf802c286059081015d221cc265fcc8dd68b13b29369d3792295243affd9724c60f75a2f48cbf276cf99b4c17848ea53b101869e6733656d000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab4140587a5fd628ef3913b58fb1e3927ce688d0e64c119a4d8f74a3bebaaa94e7e8c462fae94e35b51ef20d4885fbca89f77b7fb2d6a3c379393670f1274ecd646053e240b3a969697ff21b8b9869c41051b13674a547bb4caed5e755a099063a6febadcf99bb92a278e5429472ee927d41ae5a9fd78fa1080fbe6857836d6b7c9a5592875ffcb9cd284c99c2a740e89aab682704d6fccd6650811a2d6acbf9bcb85a6231472eab5e871e4d1fcf53db26d67a5dd08f3ec200c294388b82ff2814b922f26d1afd50f499e8d50c19cff5189c1bb3b5664c86b21de29e9f3024c162d7dde1853b7afffd0360892af01e780f53d4fde66ca52aab2d0bb53488da05d5f95a62ac8fcf858e5c97a76fafd973e1ca11cd8ad735536971a548163a1d0310b0d70f08010b8c7e84627548c44a1fc02a521468ed207b5bbef38625c6a6c68da7e71a99ca9832387d71c5dcdadb91a47ae7b38ee15a9e4f4c01f76abb45c3278a633a717ad383d37eb20944c35dfc5dcc75869aac98542df5eea2b1760e3c8cf0dcdfed34618073639a5069a61c9b81e26ca74e1e30893fc781336479e6942b27ce535f2645d660f965f05d53f02deba6237fa01e4d9abef29a6ae62e67e00000022800000224000002202d3071c7548e2b8c4d96be385b7311b073575782faeb1a81bb820ec1b5d7652600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab3b931206dfbd2608b44543c300836bbc6fd17b8150e51305df8a295661d521eb3fef065bf2a1028b0527176d3bcca20636ec713ad1b9de5edb44077bb69872fdbc86bbf5b9717503ff2617c74bcf39eb1fbe281f03de8dc3ac8555842b0eef2079ef166266f24578824fccc703d966b9e30c1e296a37c0a42747b116607fd56fe4d2f866389eeffa89a7cdcf8a2b920ad6b19cd0cd7de507c15f4491b2e4953ea5d445630c66a46808b3aa9bad29035a167741d91c36f5565f9bff561a7331e22b45144e0d79a040e904f507f542bf7f8b94e425a8b39a76984bb17bfba149fe6fc3b9ac6e7a27178ed28ec13a3abaa660d5e8d549e8e3e1ab7621c7f0806a188e80e375fdcbd073914ab0b33a20251dd8900c845588fed669c869717e4feba7915e319b27c74a0c17065122bb8415b23ae6752fe1c6f5718561b456718031b6b831031edb3650ede36733ea17170f13a40b4b3b8c4116664afe7e1c678083da840508287ada00d26e7151cd60189e486074ef32e7c73afe482d45c444615588b2b766d5769fd9a7efe46fd2a965e44e4f25a0ee0d761a814ee299c5c185626eebffc8707808708ddcdd36ee53616281c0d1e158b3eb29705c235e149c1b86000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00214230464fd2d79b20781c54f3e8c96027b1d505a95f42e8ae040315952b6c40c1ca8c447183a00b1bdf5fd215c6a50c9c380461a1962352aa0d85436019996cc0201712fc48739a6de1457e26f6fc824fdd52ae9cf454280b129577bfd6269ceac238e148060d74ba03c99a291558142eb2c6fa6eccfde83c74a1e3281470c95be00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a5a457c8dbef49a182651ed795258b090b0237d836788f1ca51a09934c9b6574049672f329dd701c9ff6dd115d9aa8b690216d5fb2a23809a3361c34e70434ca7ffb53e2c16f6c90fcbc735da3fbe9c6bee1e236788bb9805932a3939682f60c3cd5ba482dc835942e91ae789978882d684f17dd036e593fa62dae90e810b8aae0aa9115fe665991cd2eb8a0c7b525bff97f5a8e8384ef587808cef4f00455e94732a52cf25cabecbd614541a370f8c6f5371af1a08b943d074b327e6c49fafdf492b496e7f91aa46b95b5ca5b4aecb63dce517f1f6c75f7b3922ce6ca8b50e1f627b161725d0ac10c1797816060f7f35b0cedc6b8d877dbdbb56054d513e96b91548326038fe084061907d6179e4596bd81f30c2d3813bc0793f4592118d672b3c924e74b961b6d206b226fb1a679ea16a1cd956890a0cfd956e8eb926494fa9b117bc22a4ecc46af77965d77f7a62faea6dad7c3c1f2726e31b13a2240cfafa3e4b0c90ce4766cac363a2cba4a8536c5bbfe049cf134c7dd685c1ed277e0eba42914c157529784205622b5a6b26491103ca4c19c9f5d0dc84f4330523d80b923f50e296d2c6e298f5c1c9ccc12e3ff680250b22fd35d5a4b6b708996efe4500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d44c85ace9a53b4068318e9fbccb936a3bd201dbbb04d8051fb569b61c93889d26f65830a24591ecccb9308bac5338c556ce1272e388aa34f631cdbc071e4952b8b140e39396a5e1a9354a271708c20aad4d40a971f8d648ae08bb326b470a5f78db71f7e3c7fa63e72bc50bab5ee6bf3e3978a67a3a9995803d90d02c09e1965e9e760b73be0442a018a530c94ae71faeb9603372d0d3a084cec942f5c86fe99162d6f2ecd3948c8510719bb2e9ebe3c59d9f346d9d840deabb8b29903518327b115a375885a4865bd34909652c5fca0f8604194412699a0082b103a23f41fb44e1f7bf47214c32870043c78b432dc5ff8ba6949fb73b2d47567b56790c8d5260aca9fa38451afffa1474fb556f135d65ad1d0cc638d46053d0b8e84353052f81e94ca40b485392e793fb8978396dfcbe91f4131ee96fd8d4ac47abfdd8fdb923892f916e8faa2a5f14f318371c8722e8946bba3e02ad3ada9f2daa54a8e7921c60f20ba4a7b1df445c1fc83f4d0d5fc0a480ac88c289b9217a10ae0dcf8bbb06d9fc65890078fa92de7811eb6056d8f0fb4d4cc8d046ac01230fc4133bd338cbf14bd0290b701c8f85dd9e7484d216cfeb0a9a4d1fb30de1442a46e20207b0000022800000224000002200d0dac8c26f532099fb0dc642cf418f1553857fb615bb71c16951f1a3385584200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000244a9ae3afb411079ece6eef0663da67b6f23b928b5d6c30ac8afa44527d9baa04eda1465b3f340ea668fbc12223af6ec507c789e075a3f893ce258715534ba2ebf95c4423f4ee9c5eb9c5fb3eb9112b25f6177c1e3dcb2de4e279ecfb41eb91f073d67b719e7469c2d2f10db85db3aebc29a85e98ac53f5f9cc59459fd89ade47d16e621ef6bb9ffdf4859feae51914bc1ddcb88d65573f0b61ef9fd263add8a47b38ea13f1fd273090d2b54e45047fdd681fccccd7ccc625454b4ea9e802d9adc07bc3a0f52651e42a56425bbf8bfba0fd907899b1809988739d3c7d914b9d17b30c0786490d12e31002e41bfc204b388c9ec93bd0aa52f696a6177ec434766cd3e42501828effcfdf8a963c7ad921960157cfc8f05935523700d05b95a42f72ed0d3a206b83df98c039ee45c09ae3eaff3106583ee32f44fe58acda7404eb2f8d3dfa35d6807a9da33141feb787b0373dd16e4b646e2bde07f567fb471532d099352d85ae4e86a9f3d84e582500795b6062bcfcdd48150859a26da2b35ec7b7feb7a1490bf933e397525c49c2eba94d4e6c386aec3ca7140a8c89bf7930fe19bad97e4a2feda5f4914e44f41a991695cd6c94d71062d8c39685baa19179c8000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001054566d5d55cb8bf3661e1eb015e64c42b75cac7abd671852684d39133d2415c020224c1ee5a0d43ddafed910bd2e6d4f8cfc30620116d42eb80de9a5e6b0cd6f42da67921c2f41550aca20b48a7ee7500541203dfb555c871ea640b152f4d5bb60000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a5d68228e774398c194b5bf9174dc87c8b761efb1b0f66ee672d6c3153caf9566359164fc169201a2dc96adca8d12b613b7c9317c867e391e3bf8696110489980034c934515f8e55b7316b387805c834a05c1aa6f2a424b2988de529ffcf198d1ad993688fea6bcfe2ac4df4ccdcb0ea3e36d244c9f83350fb09cb78428f77e8a49cf00ca4239b7fdd259b185fc3a1d2fe549fc3eacacfc2e19bd4345edd7c3c379b80bda0ad10b096b68c713152277b06f2490236c74f5d247676652c54fdddd0fd8ea7a4a206c14003773dfa1864bfda7384b04288790f21e23673986f04a2fba8c921cbeb5ebca3ecf1c967dfa7a2acc6090890a7785e9f791411c3557f8270f2128b6c7aeec536e17259f1c031438a585ec660324dd5e085d3358039caf674b3665953f4d1a7dc9da9d167156c1a02edc45e93406cab53a264b6aba3467aec5153df41c99c5918347913eb367c8999d5700475b9328b557d7f5074158e824355df80318c2b12ce36a231d3ce908575841642ebeac656aeb48d7e7612c8c3e0ef0294d3b04d83ca6c1aa082de9172e9b97c52b4ed52dd0c781710def21dd8d8e0c894fb5ff078b2b68d5a159d9e2cea7daf1fe3461a193faf228a4d5c4bf00000228000002240000022009f5b96fb1631a811487a72b43f407ad6723c44806f8d051e5ea624707736b38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002659e27854a1ed8ec83b1957d14e8ad6a8e0a0f48e38a9ff0d1ec67c242a247fc78a39a583a81edb37f3819cc647b315dec3b5468e5faccb0cdf5cc6005c15d59278af5be985d12784326d124057b123b45c92f2a1c625e3051c5e2bbe1310c606bdfa1540368833acca85cd6ce25b0fb97d42852bb4b0a1238bfe1686c1ef9bc44569008d4f4d904593400dea3cc46f4daa86dda24d0e90c6a9d3d7dce4273096e6698e173a931ef43069c82c960898f86bbe8400f5ff05028f3c18005e0b51837d63be5c8b4aada0e34fe3544b4b3cd947414f82ebde91d47a920b44952798dac3994776d3f02440885f4eb2cbf41fbd5f853ba99df16456228ded7b04c40b8fcd0e246727abd75fec4ea66744886b75a2deb604ccd3a7f3e9d724d6f58c2ca6f2ad1a3e9b5a2073ca9aed48e9a11c8f7e543c85ad0f4d283dfbea46d9a9d6b2a56c9b4789ca32fec9cbc264c1e5b604d00b8e544af716fe14e1e6e8f79ebbf7ec71053914818d06e10254dd25e678220e06ba56f79e1cb12305f770cff11d71e74db6cdd39356af149c28c18e313ac7084c92a62ea34fa782bf8429bbeee98fbbc0aaf3e514db0b59617420a03695e95c5fd208b6dc5f32d42009171b4f8e000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012ad2f95ae334d974c3e48562869115dd3fac821ed16fdd27b13ea18bfe9c052d0202ad50cde7fa284fab705ee5d75597e04e61a92b33c0bb5c13f4a52b37f8fbba2ba5e5cda399cbc13a69b423e7021a2e629145f8951bd065c4dc4a53226ac2c20000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009344f351432097c5ec16e4674be6cd65adc81715c84d064a7ad3bdb418bfcff8afb3881be0c3018ae9ac4e923f37c20aa6db3b7aa387d14c731c576260c24213adaebfcc3d83763026697101092bab5aae350ff30ae862a338b6845236a04774ed450235d8150517d1bc50dd31b8a08214522b68ab3aba5ae242fa0f955b3f8d75c5fda95db37fc12f8e1a5eb6a8751f9a84553f433e312da79a04e58929a3874a4dde9e39fd381b22406fac1342c50a99b9d4894bc1361e187446899b5a8defbda8ea6d58c170470c0bb53e5768de56cf6b32b0bf8a644f65bc6b80f268c590b7e00197cb28f5be0b9f5fc4280a0bc0d9986623bc9f6cea004eb25e69591a2f88dbc9b20f49aa9412bc6731b2ccfe365bbd4ac7abf38d72185fec6bb1a8959b4ea4d70b392be728ef8c3c2bc64359ad273efe0ab85343d6d69a78d0aaadf0922dea767fa3a0ba0b177ff0ecd24c43dd420538adebdc03b9125a305e82e1feecdff0d8ebcdad1a928bbc240d08a6a335dbcf4711c03975ee7bf5f8deebbfd1d8f9d272617b614e6e1589cd290d822c40964461d433a3b285055721af8f7cdd3b432661e20eed65bf22677db5e99c059d53bdc185e9b76d5529c6d09f75bb42bd00000228000002240000022014139ff2ac212eaf9e9da7b425457882e3a836023467b3f13f807558a1715ab1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c9b34f21e3d126e3cafbbb80687fa01912f349d37510209b43fa2fd8684452a1227d4ffeae9eb4f537e29ebc3282c19d055b8c5ddc709adfdaa3a2f8264ea131b1275e7d83251d1c27f48ff09708a03d7f1b173cd47f329c8281010d269d69ab4c06c3c2d73543b95775ab9ea74eec89dc236040f0fc30628e9d108a6c28e443f8172bb035f004b9dc2c6466eb4b16f30d5fe2428b411a03ce8b40472ca1b29cb562afedb57c078834b506851ef2d38106ac8a52b140f2751420d0fc4081f56fa2afc7ce62bb9baa4b55e2238de46e39ab75ed7cb93dcac16a1c60977b315dba21cdbccb55265052d7918b7ef5663a5436d125b996e8f8f816200fe0a059ce7eca6c8b5d2c370e4a379fb0b382edccaeae897b4a2c30d14ab501d572e40bb4dd97d3b5efb2dcd59cba1bca4bb35db7672834ec1d1e35be1b0b0cd7daf53b69c5b88a5212c2e2788adada0c80e17dc533c948a465db9aeed7d70f6607a12df4f8287fe3842a713632bca3c6c77a4d9bae2c17ab738b518c706192acdcec576c0314811fd16a02a96e9ff94dd7f9c15cf5895d280f9bf25523cc6c4807ac66390896a538c909f70d738e00cc0a098fa6a7b23d6ea6d6ecc10e997bd0e806adfa4000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020e382d41d95d2a3e557ef338106d4b5d10b1685cf4f53b59a5a6beb9e7619d471c84bb1e6fa99b7c915659c399f3f3710d638bf9304e08bf62dac1537cf847cc0202df153cb491bbd723a0dbe7b567de0d83ee5c220e70cdcddbb689993f27e8120eb61968468e540d9c6c78dfe783528938cfe44b7e9f53f95cdbfed30447358100000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083d7b5aa9afc3818d631a67742d5feff692d90f9dd3346470c84a2ad1e0ec8a2a557c69c0b8ff7e4bb6e28b898943410d6fa2bc3555e3b26929ad72de0ef93e48544dcb5421e820b9049452524e1b7a1e137b5335261c1d3dc5158d59b7eb123993a7104406cdb62303514be46e80f0cad1a004a47909914cb57c31c82c690c280480bf5a2fcd76b9b288c6c858e4a85b4b93698e1201aa0367fa1ceb15ab21334696697450148a01241a62f892f93a0d31f9f3e4fb3c31f4f378bc183f5c09ff0a0e3549d73a5935fe8cafbbc904c6cee4f1eb520736769a18c0f7a863b5ebc7104e69f2cfa885926d8eb326c298ee7d01a1f47dfb10fe33a59825a868afd392a3e8b9bb24537be4931c7e2999836e0f1fed1e8cfc045240e8165d61ac27d24bb58733a48d6f41c8832ea7c1b756bbd3896a76fbf974d3406d067265b8481eec34138d484eb139ba68529f224680024ecb771a224869de521779de9863741c449b9de78d6d400fab74753f75f3d6aec03d13daad815904d1bd4360b811d3ac978f1223ee18a8c4c5dd0d9327c555813ec7900583151a94aaed23467d87eec6f4af38253eeef987b4059c5ed9a245c43a476578779b8097c6f39664bd80ba2d50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000acff15c0623d72b152edd01a1e7dd02951a192bbc22909bea0c2bd1e97e12243b259d27071d4529c6078913930b421c46c8e7e3f5eab61e036b566d7545f0a7c9992967ba3cc122d0544788e12b63cd6d3363e4240a8b884a2a2f939bcba6e352367e23334fd3b942432cdc84d396563e96b44e2d026de4afffc8734cbc613ea0970c812fd61d0dc9bf96ead1dc56b36671bf79001e71135defe11d404d9a7195f86210c924d118b0099d1ba394e31e19265e3c95e77965f28271929dc01bd5914c5fd5368e5533bc10045ba7ba271fd9587b7a8b58436ba51ce7031a22a5a61b7252ba7508cafa81e5271bbc34fbf1c9771bd5232f31ba307490b2094f53d255f4bdc350fc99bf48f14d7c9075bdce7b70349d65138b3870ff7ddcb85284dceff8bd3c0d21cda96a306f92ae6066e8eda008003ffdbb0bcfddf28fcf92cd3193ea8cf88e11f30f3eaf677ff7e15037555f228ddf2383814a44e94dec06809b2e2347405dbdb5ce34c0bd9cdcbdf1b13254df6086017ddf8779a7484a7f3f6dcd87b473bd0d0a2b2a7b1420752d6ebefa56f364071788a4d313ede0afc8afea767ac1865fe91a4cb274465622e961c57dd33aac4ef0b65f1d53f22eafb8abd9200000228000002240000022028d979c83629fa92e61de1c27d01abbfafd7efaea6d6894b16cf36ae891859070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088e304a12c1ec0d13105909f4f7889e61d4a97f99b994c406487868d59b6eb2bcb3439408912bb6621156ac303a460070b2ad2fa9b3c18734052aae3eb236bd6af8d251815d969d137c39b82522bdcd6b9cbb1ceb6d92d7de0a4bea6bb6289d150af16c75c2ada0f5df4fc21595d45e9fcf91e66b190300c97debf3a199973a2fd724b129bad009635b8f4b97d64fec4f10d4f4883e8f8269533d3ac45a14a6d243c7ab6ececeab6c3b348b1b32c116b937e648089a11fb92e963f61ac0eb6c256c023295a8f09bb2823f9e59503f8c58838abdb835525c12e0d298ccb17767b94f0021231033619eb9c5deb2eac59d05471b476e6359207e9801c6c9447d61974217f84fdc028f4409f36084ac2e0316f37e33c3e650fe5196186dbefe723438c5c685c60a2febbf3bd1589b3968c8a9e1d71d2cac80eabce6709aeb8a231786e7bbd5863eebe8c8b2cffa4cadbc620a8cd84b412fa01a57babbb335b3d347b64405e8dd8ba592f736c51989c9454f1ad88e9f7d5f3bdd03dc04e835a612520ecdb5469fac27863af325b96024541fea1cce038da1b1ba0899bbaa0b48ea62770dd46891f075f224228de4b6b3d9a3917e256824f3e1ffcd7f2e9aff522c18b000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0021b9454ddac41a2511b51b947ab485cb23b8ea7b763449c96fc874cb3b570a4562967073e429ac92a703a2f0b1187ee4a131592105f619769312e0a198917cd3e0203e18402990a620139cbad3ed246026fdbce0bbafd71fb85a6b00c6fa2788266183a358438435be8bae71daee023ded280584df8aa35bd6f27392da74e592a6500000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bd3f0fbc0ff20e5a340c6df98f499276d7dcae822496f770472bdfccc9c0dd11a035987c2dced5343700425cb4878d0ec6c9852fcc81719c385056a916a84741540b6e7cf9d07cc40ae12537d033538484e51fd14f2c161a9f9553336631c7a7a0baf68f0b25f83e3b8ff6e9a6eab7c1bba2ada016d9f0c20d6021174f07f9b0592fa992c99205c63d040e0b7176009b118d3f6ae19d24935d0d39f4d065350a05bdb8a98ff4e77940d08f86cdd8f2632fd3fe97270def727e8da16d8569107b3def18d457050389d7fc0e84e807d8dcc6d4cd478956579e159da2082d28109d6bec4273108c59d5830a22b93527176ebc7612362812d3e8a6971536ceca5c557eeb510b81e80d9ec2a643cfa96c7ed2fff9b0e1289d0a8ca20453a1836db5d238a36e266efe081134003fe0df0a684755bbc33de496014bbb1e2e70f7438a9b6596e81c6d89340949e4d5509f9e79b6e698ac92f211d6afe4493ef0874e8d7596d9018d8cbeb10344e60cb641d85578a690e7ed42794e72b2b9b7415cf35b111730a2ce4afda270cdb2a237c07a84a81c5c1e2862e2c82eecfa9c1a769d5886faf50d436bdc9314c4761609493f65adb8b31e83346744f963ff3803e1223eb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a5a94702b9fd137995992f59492b4f4f6bf6c52cce9a39926cfa4a7ef966a63d8d487a225b9fc03ef1fba6add0bea0c3f988b724a5192ccb9e75ac83f2f6daf99ea595e6b86c809a35d8918e7dbe30fce4a22c5593130f0199b1f9ab38d06c1fc197924076ce7e9b03c05b418e8da59cdd3b61656bc8e95c6a16dc53ab88ce52da91474908f25ab9d8ac83d585d886dbeba8adaa6174ccc2f3852f726e8c46f2adcd9d36661ebb90a59bfaba6334926b4705a127a234701496767c0e94f1d132caf49a58b74c533e4a8d4e870ff41e29b5a9fb1580c331c8a127383c87f292b593698a611b1cfdb594afc47818a0efddf039871179d2efdb242fbe225aaf7ff3bb8324939b5a692fce2996a0aaccd863fdb7f825cec21e36584f2d487afa6f8c057d4fbdbef103d3188bf55a60a3c66f56e33fe9fd37927b194b404a1fefe8a66a22e991bb02b46897a945ac39d7489780367fefeb906ee5a18150944c29fdca0ded494313597d81723bb74d0a7919ac5ba942c8e620fc138fea365c8b13e38e3811592f8c87e821c28f6a8498795cd38fbb7fa033c0c17bcf08c8ac2440a90943d70c6cf67b41b1ba6b9cb38f0a805a8deefaced562605275efe261c7c35b30000022800000224000002202ebff58589500c87b324637a56ef0e171bda0b8143f47cd57abfa3d5059182a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000820e4954116cfa4609d43d4e8c609b7993d1c3e89e667b440ee74b2d1ecb219d73dd51809ba9641168aff642dfbdd4b715c6d04bd4737f1d138bd4d0692d8a35cea56e8747655876c54e753f103a6af23af61389ed417a144586b22b1c19212773c5c72935a696b89d1e0a6ecd8b37a0bf14cd9891e8054f676621068c2fd88f20c44cb3781a5ecbdd3439a74b42c59df6db04a76e3a126f6f34f17bd41b062d698c00af87d173dfe1f219aa7288210222eb105cfd428ebee00d926babe40b9270585ee39578d5dfaa2300eda07323e84a449823de08aa923204447ea9365f95081c42027379738e09318925d52180c827f1a0ef2942bcf67003360a1a2ece868d89c77cdef8e04773a241480649f4ab72962341b40001725705a8ad856f963c04032d5872d95c3eaa5f9d19891113e7e32442e18a21983e5408ba53a79a01dc2e57299fc62ba2e0f9e52df2c591c1e05367fdddc2426d73007b9957ba732f5b52461be4a34b4d0e5f8b33b996aa1c6cc9a52b4ff788e411d103cabd35cd1f27a4dfda6902d58c1c9f35d1bdda0ad4628ed8ce1f58f05e45382d35d2051a105ab72b648ed04b89d6c3c6607944cc0bee032555f6bea0b5c1678ae75519ab5b3b000000040000000000000000000000000000000000000000000000000000000000000000000bec47b002139ed9e0638339df686a314ce6e2d5d4784f19bfa1af0168e465699763e53a35206d300828bc5a1396e4130d82ca1f25e90453e4fafb656bae39a128e2ddf8e802060c6f5a6b58faa60f42773cbf9a5c351d3e573f315b13a1f0e502d4deeff0961200dd779eb252bdba6b283a762a9b1c1e8b99cd163d494b68a2c60849a9598100000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d5c6442b5f75cac2af550ec3d0be53e98ed15aefabfb3395d0bcedfde5d1cd54a92e9a1d273ee9ba0195123b37d5f2f68dc0a302a9a9939e482f43d0b0d0dc8026b86d93fe68932c24fcd6a830877fdfddb15752889e087787e354e22e01cfe0513a9f497db2d6773a193b4201f6a001226b9f79ad45e21b35f5cb924d535dd9b8da63d41a74be50a09cff1e75afbb7df085ea5a75fc597a48fa31fd1736dd59df8bf2146e9f9b602206a48cbeb5a503f536559739fc4c2c099b74f9a861dc022f78654ffe7fa85f5d8e383f9957953b8191bdbd7939b0cb291998706529d36b9c908b00d1632e3af530968b13be82b9a4da23843cee1aa11adc4ffcbba5b96f1d71afbdfb38fd9b5288ed5ba4b00bc046165d78823450a86609e314a90ab59d120619f4bd952e739f5947124940deeb3a708176b29b1533467fc1b11453f9703f2b3dcd85ea1223212b843e594a27f58e853555ed03e7dfce804cd79fe9ced60124bb1919fd9671ffda3965e1b58c3303f25990f748bbad89261a8353c314b8486b07278e870336362da07dc2cf9e68df123eeb36b1a571dfaf28d7d262d2b770dfae043466eba276eebd7aa17924fd4a07eddd69201b1144369d563f873a700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c400ad551afcc81ae462eabfdf1836e80cda379e9d254aea9c0c4f349dc894ad0059be696855bcb1c14e67e566d88842c3e12ba2e163820af505b20aab9c673640fe213458adb44495c3d8ba04c6b68b62c7425fb5ca1a0aacb41b3aa53733b1f9edb54d98c54d2fd25eb456ed0cc9c38bec9c83dfb93bb4a17fee21f05f496623e3b0bc327e609a06412e894254f75ccf73456f041810c35fe58af28a5d82e7e0c2060e546a935f419b308390524d1d363a5e28570dfd70ad1e750e274c66495e04ecb572d474baa3ee3ea3455e540ef9f307ff2934844d71b9b6a21d28be1d252751edf5f24886bce10b92c1215651ade88830c7c72362bb038786b6f4bdc8befa230093feebbb954502e1adcef9aedd9b775926114e7839035a762c1940432cad2665458dd591f3b40ef7e7c156fe78463af2b110bfa76d66ccb055313bb28d94814bfaa5ff35df820958be637361e9fc251d1e1a8f171fc9fffb2614e193273e4e8dcb42c8f32efd4f293fc7e9a9b06b8979d3b8e41b6c1826c3fbf3302f05ebc99e7a370c0e6b79c3101eb92e0c76efec54c712579fc1992c21cdbee818a18bc83e9d46f7bd927231f175883f1fd907c2fb1af6c1a9820cd60fc33ef5300000228000002240000022002a8fcacea4fa066791b608997cdb7d6307836c4fb56fa3c25365c8eabdf3d20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a515d1799221098f104d010c1cf022461d32c812b7e727106d1ea5e3337a8a7e1056bc33492fd8ca650928144264a2f646f86fd75b14182104421db82c7f683e6e530319f55c728b73633d80bf62ed039c2084ef0b090c514f5c92209c076613164f85ca84c54f6ba7d39a5f260a005affc54384aeaf80b38d6d45aa8938ee0105adec4668364c8860b9920014b2671866f6f94512a0bf021751bce546d26fb07bb94038af869e1b395fcb47d6bc65b5fd3acee9e7b9781ddfcc9d7b331b90e2a6474cc7d48d35e4ca20f6135f5ade626f48281e64e095408ea4f8447363ed469e8b675cdb11e8b1e1b69cd9e99a173879a13a41a7d695c546a4fd60ca696a5022a598c8ac97564acb36cdea06c5c91672c96389cd540557202f8fca31c53f9b1a8d8267e42a2ae7617b641cce5b314479c7c2cca391ac556ff02855c005e114b3acbd99a12c0598d1f45959b2218ffcc4893bcf927496352df151d4516194eb08adad6f5252d896349927ad7cdb892436977ee43ba8973a1fe004664ccb11a623b82776964d3857c7effdd218a406b99e9cf35079778f1c5273653a8692049fb225ce93ac99cfcf2139057b56054254dc4a5e49bcd271854b02badc5b12367000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020c4bd621db878ee7dabf725db4515c15709284961395ab0c690d30f41fb14add1eacd2f766f27be2d6f7dfbc50ef0bb51f27281ffeeee4613370d83a61b1c8d702070d85be8113678e5724f85bd426e0fe65b41fb728aa09503358777cc6d7de0e1148b002bdf96172bc015af502dd35a3891d4ba6032ac8f4167d435c95b92ab500000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000259f9af1cee0cc67c9a613123e7edd35f9fdfc4e81b440cdb0e8bc404d96bef6efd93ab7349cb380d553c3afaac6090f1ac88508b1d1877035e238b5ee8cce37faacb424a079f6c3cc3ff02d4e19a7bd811175f3b768fc6da52f83d642ff3720b0df4530d789db861a769f136b06aefd36fcb08d11347a23d413011a0187d2dc0bfb508bdef1454fbacbdb54f5969e456c6551ddb583be05383fd87975e774491993ba7ae2108f2d4ae3b8c1480b6d16e5a319fae80919f33a5da6243ea418951d1ecad91207bb39eb3bc8f12accb680c5f800b519b7e06c4fa3fe11537efb3bf1415f5dca70f6fdafb881f74d3bf6aa985396a76eb559895e946163def89a5441724aa38b26ccc7f6a5cd8ec570d6270376ed5244a12bfede46f0bfa884dfb64f2da144bc6f50299df028a0d5112646f8a11882197e48edc5ecb62478302a1d5ac3b8e7e3cc4f3bffce581d99c21a957d2b6dfd6b5e6374ba32226c52ad7fa64a910ef72326aba359fc5998b0c84af1c6a982ad32200a9539dec8bf1915885a04120722759e85a53a46563f6137f218926de9572fd1a989e48fee1c1d09bd5fb640cdd9cab84fc8bfca457b3d692f23f63739cf0ddf739c955dc07428ca40b8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001625e045d38236af59b7e52ec03fa83f37eac9b852360d93a5b11fe8df416290af9d8f34a1489145b2daa8d05ae4dd9bc93d852e8ba1c6a3b6d99414cc01b02c3bef7730631543d53cce69f0c63518cce230a4cda939b9a090ac998e6d568c55db0c991d81e05bbe62376b4d780e3ac1948be57b19d2e24cb30121db012ff7f170f8825c7d6e0d877c91d027c4ac2961ba52aa5b909dbed2ce8ba6596af70e6e444325fd3016562e7cb1cf1d9c68ca17490dc9d34ba3e3db4820111daafca0edd1e9726cfd23716c819830b52ee8d2857e2fcc4c23dfad368bc88ba0750ba45e45fe3f08f2bead2dfb1562e2093763f2bcc5e88d5eefe51680a9f1a12fb65422ad1925ae2ab4a4837485d6fe659c58c028a2566dc9b4b62858ccd7f420e562f1a3273ea28e37ae4d7c09f569d16779514f8dc22f532b79c0b9ce060377616840004e9576fad2a51f4c36c2b30abb1c0c6f221f65041d69f76c0289a3562837db35376438f21aecc402a81eaf13e87bac0fd084f00db54401e818a307ef9527476af7e806b93d7c86f061cabbf593a6b3b2c6c8d5ba637c212028626a396367782d41ef6b81d2a865f2a4f34db2e651daebd97bfc0562142247beefcaff524410000022800000224000002200605f3c06eed9c40c9d473f612604411cd4b24eae64633ffd364fd2e24cf2c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f858c2d6901c0d25a216052616f566a81ef1a30bf58daffe8f77267665b24f8446f9ff70ffef96297d821ff41ef0cae69ce5c87653d97a703b787f9b99303458f935374c3c990570a841bce0142dbf9e7a1ef4b32035064d52ccf697123a879225f0a572103e213d2ac73f08fa8465ba35cccc9ff07e331bdd4bfdf37c2f480b3277e4912be7543143924b636d61eb047fb749b81afa71aed0fa9cd3d448c8017a6a5777e84b0594060bde5895fdb9ce097bacd62b8123566deb8217e8a285e1a8621ad4b68c5b2113b60ec14e9b2e63a0930af5f6c623445e56a3327fc7a4b4ed47c8f0636ccb9b743a1c1c1c7869cd96ea507e7fbe9094f455607ed5a46947c210f5e961905efeb4f563b46cc7d2d850a8e2a5aa5db651db3cd22707d432ce5a7b01db099c9de0933b135526a77cb947ba3108e505975c2f9d0b1fe12f7f363a396980e39c392f7285bbf9f1fecda43743c067a6a2e6be8fecc8c433c7560403f7b4e6d0e40f03e3bc27d2b8e629001b34cb8fa9a658d458eaa1a16775bdd06a7a17552cea7ed1a0d7a6f339b0d8728c208704be9680987fd5f1577094bf162e444a332ed7050b405ccc7af29676cdcae3e06c98b82716bb637dedd566275000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00202d178edf91ef9ecfea297d6eb29d9771148a42e949425dccfbcee98e07203b72f039f433936e9a0bc8cf59f9ec79bcaa08617159d1a2bf0799ce96a64cf9884020722bc284dc88002d2df99dfd05a8abf374b0d19d92dec15fd9262a451c6a0b309b2906f6c46cf74c5413481a6120ff5b72f66548478d6c33363ecbccab1794600000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000929d011df2c53f78d36c1d2109cf6e44ebdd8f676cc1da3ab0910393ddb8de4c170a70f071e481a587425392a26c8a08e9368581b6801f733ae909f7957b08d93c25b7dddb800445705403285f45d1ed7de21d56da4c58a7bfb1b821b69e13a84334c11141269088f08f57a22be2f1ea9070940edae49fbccda69fceece4877d80e909b9da1b734c6ee979bfe50e7b703bf594b03e9533ca9e085d2b989b7105010825ce916abba6ad259202d1431089955a938c28975d70cfb7b86892b15efccfd9cf563a67a81d5cd1853eb9482ebda160560814216bc9f482cbfc47a6d7db7e6d5efde41ba24a814e74c24c83a283b107e60b41f9274dc60df1d40cb50d22cdf77abdae9c42dcbc0924683b64a391a2af76a6abcfeabaf5ee06887bc2c2e8b354f3fa435abbfae0c80e6848ab2164fcb74c8ab05795643693ca98cefdf7087dddc3d079035ada72263edd137bbfde3e8f6c2390b1f19fcda4506591c8e645464c7a6f867a9b295518d3f012a9f971f33f69206fdb7b9b9ebab34aefae56787492aeab491d051de7f5fcea641cc9e69db18d7e184ecfd1a4eaff8f9b108a8fb14e1cee21da99c15e0ddb9e7131dec23b6978e9ad8a63809a19cd51e06c95b000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001793a88e2a5225c98852823700085d3af495486bbfc3771c50de23b8b889208ea7c7d6e3946c48532117f628c9d40d45a620f485fc164763c219b7c4599dc5f1f06f33e5f189014e2ac672648936a4dfd0cc5a8c0c7746da02759389abb9d0ee302bda5ab2c4e7a431f922d02cc83b8de7f3f0586e89a78518773ee308573d893ae19e9e087acd07c07ddda0dc6d0601401512287a1081d6893607060297e9682999aaae0643478cd80de2da35a1e60ffd6afda4013c687441c479ba564f4c19a7b8312b35e2c2c6cd956f5d5cd0d086dc13a73daeae4b6283c85ea081cb9fcacfebbaf4a73983460bc2703ca29876dd7e2ecf00405acec74c5a271c343417f8c6d954742360c76d0c8c86e52cb5609a8a5b2ff3db152ef4fcf39b91bb8273221be1afb50ce5217f33c0175ceba161b503c66df9942025566ec4f8012ab1de7dd2ad75aee19106bd8cb4f659a1a3d5f8f20d48fe56c67321195b925e0d66756edc469a413d3783139d6be0d8fea112a4761e24de661aa265afeada37589fb35e0b4316e2125797e88734c8c4302a84dbf326ab5c53fb77982c4bfc7ed5618a72a22ac6e899d4ae4b9c0336b4756e7f5b027dfeb7ddf26169e6890589c78a7d6e0000022800000224000002202b487ae03aab97be3eb6d9d03c2e16a5d395b395ad8132d2e99ba3a232b12c1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000255c38dbd57936b4edd85833daeab44f95d61a9a4853f23434fd86068b1208ff05aa44d941b5138758b00369d9669d615163359161dd50a44e5979292f5cd3094e7ea1768c81b37bcf05c6b285dbe3465fd61aebedfcba2da26d34b9184d30e63bebd5167e0c409ac6b270258062a481898637129cc8faebc9901513fe8840cf3dca774db8017ca7726b09bc211716213d522bfc8dfe35bfc2fcce23478207c5771c96621f5d21955395ac60db6bd81db8d11d35c56eda9dce042ca07e452b88a3b939e7d4d2a552935087f9b5e3c92a2f6525073da005b7de84a2f7fad931cef8d7457de5d7e828e07d8e0ca6771ad9c7119a34b60526bf629aa4b3183f22999fe6ecb3da6c102866172da0e4fbeefbca6e33f61d28052668464cb5f2d474f4955dbcdee923226f021ee413a289991eeccfdf6e8fac5bf506ff0cf548f0cea1c0e23ecb0870a3941d2c307bfb725210156e8a6b40c18dad9dede4f2b0c70897683b609b82b9c4058b678c530c593250561e54d75243a7f3bd6560db908f945a29e6e408a129012b0139a796e695b0e5364b394004e45fa5ebdb2cfe2fd7a1025f729a238e3133a04f923a59a1a4e380fb9f901e5a1a9c03979ba793a5f92df0000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010e0081db041fcfa9fabc26642f324ba091bcd1a82961b6739c1cd8748e6ccfbf02085d8f8f64497484083872d5388afbaf7e5f979ed9ebca8891089afd67ed986312e5e081fd57b7133767ab57edc3e247e845519b807d63445110f2fee96b3b71000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000077c4f6a3e3ccb43dc402b00be99f8e72c10ff3bb9436a07ab0456be4a3e69e4ad409ac98fcf22d52567dca652c5fc35c076c64a2db5b6c477f469f459e905ac90aa5b3ce3250e7a1423abba5ddebf411857b29160f1337db7b5f9b75b508e0af9da71f69c7414c70d3d74be8711609d7a45ebb50aa2abe2bd3310eb990b1fc8fabe85cf34e9d24cdf99626f76f181a133e5c37085192396397777328ee5c079081ce660059428702eb5b9af0eb71a8ea7f4157c6d76be557471b66c6745809a2f6c8255fd4ec4065161de2dc53de908776dffe6e10d54d9cfef31a5de96b6d23e795f460c7ee8f65738cfc01f4f8f94b48c5bfd7dec1f9043b4383d22812d32f8c84c397579de835bf007b9791bdb6ade954a140f7cddb39bdd40bfd9cf47d0c8e2f99768fefb84e965a42c515de952dbc69754b9db9e9cac1d34de37d2c2b733dfe253a7e18902e5ac37d6115798e24aa57fdf3245f867f7e0bbf29b3a1d5aa28f2495ce56013f31d64e4ea631e66d9b9e75b46f364711b9e25fabf8f8370e9e6faeb61dfc514ef0b9d3576c75e7bea611c0c01f441f9c554ed3a8b032c7b980a6b579d63d701ab36bb9a1b6910efece1182e2b1b9f1799f523ba7c92f5cb300000228000002240000022018a02b044cf935c30a6076ea2296424983c75126890a045b7a64341d5d3ef448000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000893b792487612b270e4b1559e670d40b7512328dd0acc394c6e9c2ddd430353b7facbd3190be07159c0f0db6520f16f44c9c1049c99aa0883c216f019e8c86b927921abf1e704ac6bfa068e199edcd02aeada0fbd80b9d4e134359e7edbeba084999d76af177a6a769f8fcdd605d36a7502233738d089c0d29b3ca743ae07c32e111b3d0f0ae3cd9fb2ccdd529062aa25f397f87df84afa6ebe68a883ea7c8161c648b728084b6ba0fe6954d91590729f089d53851443b81d6fcdfcee183e141c99e1659a55c32cff982dcdc40dadb62075de46e6c44831717e81836fa45048e1ce79a08ff0633ff5af26c8795b4565eaa1baddfedec8b84973f679b4af2be0869be2a78e1d48a3bc81a6c6f461e118b091e345e8d4df8c956c450822df368492229112b6d4f0d5c93818174935f5d40a1d3a58ec606e197a8c0fcefe7872274f7dd01bff8dcac26092f2d4dcc8167f5dc46b41adab70f2e0c15b9b6341ab1278e84b2e273420264a87807041afb28ddc8c31617ad73c8a47102265414b0e47ddcbf7f03e757018544d7880523edb2b7daafccdce66c5bf90b2719e9009c3fdea38ba2d900b791a1881ad52b4f358b1a79eb87ff1886c5045969270cbda56c4000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0021f3b4e52a62d2c1fec4d840fea778aa09847ece244268e19d4abbd07a9d0e9520b173809673d185691f1205548dc061cfbbf2dd5d4568840b64278c24f6214f3020883b281a800d2bcebf09dfa66d02eef208144ca6679fe104f61e4185f4e70aa0a3855baba5166587b63e5731755eee4b6ceacf462bdd6c17f318df8a560a9d100000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000977d4a0ff25e489109aabf76895814e81e6f4074c78ebf3d7d8d4ee94baca3c70f354a00020a0ccb2d4fb59530c083fe7fba3050bc412bb7e7df589bd4fba373ee0cef436306c5f899dc69c83369771a5bc14d0fbc256095d1f9fcd2fb045242e30405a756187cdea9e49a3c19b8fa2d312a091f3e7ff4306e7b1a166e222458c37e4cc7358f5b65508adbc5f8f92dd3e05f94f314c2c8e7706a7cb1f625c64e667214033188171f0a3a31f1d90db253da29abdfafc58b1f05019188c185efc4afe21f525949bf762cc2f02a68383709d41eafda9af933ad778fcc12389f766455b534aa886b67d4b3aa929cfd026f3922e2eaa43f504d94fc60ab5964cedc7ea1b3988f6c6a82ad0afb3a43e5acd73bb662e8aa671d8a20280f6608170fb179e94f4f486bbef0b552d181d37f0d910b984f4fa40132ce4a7516953d56d9a8e9101cea950814244d72c2cce5be06c7b9e7e92a8f8b16aade0ae7fbcfdad95b109083c6307bf62086404230bfd5a21ce63c61d5b72173cc770bd50090fd974ad3c0b48cb44bc01925b469bb6e85d037a65fd8d1cadbdc8db8d3e16ccf412c952694e49bde9959029bd2d135ffcc4382ba2ebc4da21a9e26df5a49d6966fcd809d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d83050ade2865b1ae35bf8b060464c00b3ab743474f7bb8e388953c1e445de1a56e6af5738679c89ab11526ae05de326d36a3596e1e22793dd5fdc499d9c26fabd9f0715a9cdc7fc175be10fd2473489e8eb63ef27934962c9d6098798169ddb2c461bfd132c6c3ab4327f682c9557185544ae35b530ba8d813471a598769e3a7c2bd16eeff5096cf73e2a8e8011fc628dcd680b68a9d225bc5ebc5f4464cfb9dfdd874cb5b50b3e59476a1b7c1f19d0f1f5bdd72dffa9b4589962be32e7dffe38d6769b16a07f4863509e76e3deafe1ef331ee69b3d95d5c827118077e9b024cb77900ba32bfcee6480f4619948aa7d6bc76453e92033088f7d2ffc3ab6703aa21fa924543afa68453650ecbb9f35f639a298595e8848758840ed25262c0570bcbe7d71f13d27562a81704bcfe0f28a0b9e638387900230d9af577680dd5e2cec74cafd5c5c4eabf80f302d856837a45e6669aeda7145bc2f02a808ea2e431cc6c6d09e257f94e902018272457ad5bdf5bd66fec4281df38b20efaad8b7ce0e99022130ffef7acec1d4005d3ec4629415f27a4ca5252a9104a96ba6b8308d51dc5a655129879becadf45770ed8dc350d360a1efd1c2270111e04f623518edf00000228000002240000022010387bc8fac3743fea2ee2b2c402522c8ae5c28621b52d2a035604ff304d70ca00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac616458894e1ab696839ce27b75ff521d7129f6e923d6f1731baf3a45ce28a8da248fbdc3da6d540932c86cfea8389671c2e40fe6abe3a605ff753a089760989ccffe47d46318711c0ad3cb029e2ccbb19255def0b96ae2a6ff3517569dff01259a7493c7d2d7e06e2dfd3bd9b97aa097d61d330561c7a329b5ea93fe012924b2dc0316a86e6f565ba6460577151f7ffdefed029112f1659727521f0321a46a198ef678200ca53ad19816796c87261ec9603f2212a8bc8afca831676d26cb9076cd4602553566256ea64a2c70b0e034b785559343fc542e4bb5258cea1bf941e900afdc1f3f5a89e1967c63ee5ec9e573d001c91cfc6cfde1e1e48e2f5837a9b3230a641282dbf17d2abd1e1119261ffdb4eac9dd2308b11d56f7c70bc20eac68d6decf07fa2b95984da46bad2c79b3b95ac9a99ec8437239c6729cbcc33117fbde495e311a9d6af4d9f2ec700485389140c5aea17e926c79357718ae1ae5c43e74b9f8f723fd5ea62623b6fd8a452481eb12dea61bb1ba1e63b4122ed8076a16a2121ff85136c116b76a27ca344036558fc111523efa334594e6d03f3189dda887d714679b02582f30eb3223a13caf8f29766ce29a25e859c1612534a539b2000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400124b0f4f67708c6bf277b386c7e5f1f066f44f03b74ccbac42bbea48f5e089aa4020a468ad60291a6df5f0e905da10a085675ea9707177b00eb6e626288d58d054216a83b361d935928dbd27ff5e5b7268f132faa34b17d6547c6a2060d64e1e5b70000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008eaa6dcc49c38e588bf65a7ba3405e824c1982bfaca37bfde67e9d06580ef74db94ff2222b8706f6e3b44fe3276c444d673d1eec717e1997ad101593f35f5eb30bdb931cdb9feceeb3dc0fc0c941a8354a660ff6c87f14b539ec83e9dca246dcb826c555c17a2a0d38fd645e1753e70c9441853d8bfcc00f9a5494f84dda0926b9983b87e3b3e1dc734d04ff999ed5c136122959ad29394ee1f07dbfc585d616352414f4acf9d667b52a939cf95b3f3c2ac0f242e4327eb40f2b7f44c3c4e4e46c73d08c075c1e750a729ebebb50c02df635166fe825aabceb5ff83af9ecbefb7a5df83c726da8f40a0ecdf8c0b9d0936dbbdbfa815a71884ab943af29fddee5575675a3aa52144d61b9f2bb931f9d4830449dfe2d18fe1c70bc2f9950a745169ae7956f21f1a1c31199b0b6552c4dfb3643726596396aae8b660f948ed6c513b35a456964f53b6d754fc7c8370f85a9fd1824f35b5edc8035a2e9148d838c05919863a39118966e5eb38d9e43650bfc33f45784a33c4fffc145f0470ac722e46204f0d4a5aedbc3afe8af13707124495f65071c6e14405aedf3554f1d9e24d770f649bbe901e10f7d4bd365ba9512f3993ec16290388770238f4b03b3c195160000022800000224000002202ae32faff8380c0f47a1a9863a5363a6d328c6d4f61a1098bf31b37ef95f85890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020ccbbba0c52050c7911f6714c8f5eaf11f77b8be47d809f873bd1183b4156d28c5f3015b342a191d670f0f27a9a565f10d27e1bc08e26394421bc47869370f8af3dbdbd9abad857f8a25a452d35d01d4aafbca8b115be757a8b08551310748a4753f6ace04028aa8c13dc3782134b2f24dacd6c1d962cd266e9e890fdb9ae371f04d995b9cf8d309a6fe7155573f0e33ccbcb4d0b51dbcb56c14407cabfa10aaa027211f35c514ead7d492eb64670bf20ec18d273d14dcab5d883d29c3750be46eb1a119ad8d441a15c4c65ff66d0dc4a8e9e7cf3df5267843cbee51cb88ae254a597c68240f4f5b17714c87afa857d085be8a913bbb031645206571d3551a8561a92800ca756c17e2a136ad5f4985162ec34597a71c7f75670c2cbd54e3ef5bd7ab9bdab8bd1de26e7e2264fb38225c98d133c812f8d90f3bc3a7d94ce824dd0681e6eab22f41be3dc63465c735be9418928e891adebaee0a40451b592e1896e0b2ff4686ff7e32511fcb9f51ddf96a271a0560bdb8022e24e9f910f81b8f40563e7509a9aa376804eebb58461e8518e46e2f8c4a98a5f28ed9e2706c047aed1b9cc71208a1c1b23e922b02350e377a3e015a4ea49e302bfb372df6483a966000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0021400671182ed241fcb6766eb1d084dd2befb7ab9cf191a71582b06e7615424ed03a6d3dca54f86914895f5cabd0c5de1eeb6febe76f680e2ea18227d1d6df582020be37b5304f391f9df67e40ac169be801d3c616205718a7660f5b4d529b367930bb39f47fc7735fd31a5b473e6bf9bc8a2805d96d4402847117c91e368e58e8b00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a13124796de91c756c14364246a43766bd2c2a4c01e3624da6a8b7957eca9e39abfbc335327530de947d4975b456c4459810db4eec34d78f31ccb2fe64f36b0cfc75193710eaa366bbc18ac773a25a88321215826941783b09379b9b7819430449215bbdef4c3261e7873eff05088b16e87475cd1e8f48c5d6fcab33ad14adc146a01fa5002e114c8c50c1156c0b35f245ab4d336d59ed2d08de668fee80308bc4fd71922f1caf702e46b47919051eb8962a355fe6aff278b95774787aa0e3ea66d7059964fb44a395581c2bc82cc8c1f0b9d20e017a7b8b72986d006cfda6d65f27d8cde397b2268f5d76dd2d136804c0cf392faf6609ed976161353bdac55a644dd23670b55759902c6c3b47203bc35ceb5d5bfe5106cb69323bdde1bf9f6779f50b066a90065ca0ba80118ad3c12af04afb8422e141ff72bcd3fc740a723e0f253f57d9b9e7fbd6303c0541a85fac9e07f7e5630b5011d414d1dc1916926e26feeb9ac2a79193586a38e188764becd259a3e80955af5fba3c2bcc977b4eb0de43ce76c4115ee43f3d9dcf6d94d34dee7207e3367275f5d8bcdf957282303539331a3c6dd8cf534c8834cb9ffe85489e29ee543a672fb0792474195fe6aef00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23bffed48b2f197d015ac83cd0dd1fdaec5ed47fe7da547ae05e4d7b561a5a9dae2136629c7766b16ea111d1d6cab9742537058d55dfa7024ff9baa6fdb3ba7827eba0e31e523f79bc98a0789a0122d5398f90aff9762ba316d79d8b4c69742481cf55a5d40ec7347dd5694434e6c8fb679e74e82749b3f89e9301d541a38237936d869b07ad4ed2ee0377651322e34114088ec178f6b242f481d6d64665f3d74f45a143524c2142f106d7de15bfdd0ff62f02f923d6b90fdc8967fbadd161ebd07f73c851921a7736c702d6f11049c0a31096c851b158b48cf6ac1559a6554aa7f87eeaaa6ffc457d3cd7f40023194512f3f3aa634a6f862adaa2092058c9e1d4c2ccee6859c50c82d4a31ca20bd203c574dab40b458a8e34584e9305a1f986a49519fc95fcf05c11781ebf5c3cc1e63dbf256a709bee7a68b76ece783d574a31886103760d69a255e54cb17c59ce3cc2424f7d1d6f1b7f68749c96d958b51e740b91de31ccbd5dbf11c2f4da97ae684bb0f4cb3fce9c5fb9eb8a2df20f07bdc80e94cd1683783e10363b5b8e3dc05919ec3283e6f7ea916ccf2f841c7fa80f3710fb5755153d3c5ad2e977c11b7a2ac32e874752df475a92734d4605161a0000022800000224000002202c2c2dd591f70229d5771d0dbbd1b85462f3a96c1464899179ee041fb59a6982000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002339277884a079e7a41f2f1f3034dd7c87b5972b72a2cc354f30f9d8a0660c39709be548f53236020caee9130d80e604a4748fde86a9e8fa6e87354a657905b45da60c7068c6284233afe34c1b9d670125ff127afd43fd48cc3add367a9f05b94d69e5b93ea11b10fd383e8d9ad532d890ad32aa7157a5c3818575b7bfee49ca3fa5111ab6e72b314970eff20adc797d00b2c03b64f71dde564825e6de99769cdc8f162e2d9d3e2dd71091c72d0a59e44cb2d5574dfb11ea85efba316848103231d48f0f2b5651af1d00566d00eb4d7d3cab9e679f2694b67453a9be6040480a9ab42f61ca50774007a16d67b3f28887ea566b3a0652d353b85560ddc4b85b666e4ee0b12e35ae59ae082285afaa3fd6f0f79e389a3e3f345f7bbb052f4d6fd85a69afa8037c6f053a7b842a9abb50e6bebb0b89930378f2f36dbfaa61bf47d58376ca2b64524afd116b80ecac96a44310598dbde3b362c1c50859b017b35fb6a05cf2347f10154a5e4ed9cbb398e7883d3285f3fb633c19fed8212bddbbfe080ea9c5cad5192bcbc82766da494aeb48c503f4255a8fa60cb8c519fc767bdb9064c33c77ca1202c87726cc1e41f2ee350400790fa883452d0b65e48a26ec543c000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0021e03695a030c577d2200a34fd3b360a15cc6a44acb4177673c0e1707a9170acb22770bf29c34a968a8bf074a28eeca24fd3ff976f3ba5d4bd146c853fbeff103020c3c3b98cfd31d6a04d6e276b456be08b6cb6c083b5fe6b1434b5ca68c465878166ba90372fab79addc340deaa962a4c6aa50de97c7bc6ca06ed8c6a5b02055400000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008dbf8b0481a25a99fe4d21a776a592c74eff62230ff27b3d2cea7fbac1c8cdc2586171da2ea7adf38db806b8aa5db90ea36aedaca6379558fd86119b54ea4a39163fd2830591e96f7c080636327fdaa17d136700be9ebeeb025bfcf5cedf99ca513cb683cb57089c0060c6f6b457f1959a21fe2a7e2cb1ece67b3aa061012edd348d7f3906a28133e4139b49141dbad593213f5825aeb040f96905acb3054578009d9b01223f69b5e9a6502cc268bf78a6c57d83b3355f7cd07e52987a3583edf69f66009d3913899d9b50a19860e91a14afe5bf87b928a9c6a6952ae1123e660890a212ea506bfdaa4510056e472232af728650ccfadabc24b4ffea874ad7024d45ca0759ad784fc1ee0d2155c28f6dd9578ba1c6045a53174e90280c1157329a738dacf6611b716b243bdc2739f4c7cb408c59b112236f66eb194ce9cc8e5fc32dfb4d39754dde86e6e446923579151479a23552ac3b7d142d5cc23bbb7df7d3f8cfc0fb9740b22b5d35f6da791dc4120912d9d0a8307cb684bb7e89a3450c9791f1a294faf8b63c8c5efff0682b97e7da9bb033d78961973a3bf596ed8648305ea864d784209cb22986768dbece547cee18e97b647996d0fcb7795ffb0e9400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3103535cccc01e98fe71d49e693483fa5f0b4272f91052a9a8721c57bfeace5c65b667df46eb706258375c29746bac61da0b026f48cdaa0fc4930dccbbdcb1573053b4ad5831a73dd92d90e914c0115b23dec64bc68e85a041f5bb24e79cf4d6037653178831b3d8032dca335bd28089c94d41c59ee772dd2c21024655ce8273dc19dfd5d992d7cc5d399d0648e86e1f953c07ba2c18f80d9b911863ecf6272dcaeb9e74465d6a759ec800927f4f49d6b63a1e2c533f2164d97fee7f8000b22bd85df00131a1145dc79c38996fe6678eefcf227da5af24296d85163fb468147c1c063476eebfa0bc64049da62f307cae5e5ce59745f6a1c381a468f92f833e9b9c72427838d4d160707ea9c87e30058846d0d47092a2a642e6e1d575a6ab82d5e4d4f71e5e1be09d076ca0f3aa411a83f20bc8542c590fa72f3cd8e12e74c467f40fb687b510dce1c85ba65f6c9b969f356c3712dc23d0414a6d75b76742f27427093a85ddd2bd18dfd183bae7565a367368e7a8b9f6dee12ce1334c1eb52ff1f146e829c199df2c32bacc41e429721f8de77b5bd7f13271e68e526b5c791496a303c96767007dc3bd6e1eb1ebddca14854e57defb68f4c2c71498bece042300000228000002240000022028a9cb54fe7419e11cb0c2c09c668f7eeb64d3692e0047ba46c472abd5eceb8c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026d1998e4cb59b67676d655bb1590a9e0c04d871de0de1799745b74596ba71a52e796a818b8efb4c1cf2edfa18791d5965d5ab236ce7cdeb2a3fbc8a73e9ee85c376db8079a08dc95b08625114b95eae9506eea7f4c8e9df7a0b323dc3a89a348c054c60219880a5b087c56301ae56ec1ebf423661b57b7a204933244719d248130a6a992e7c22c1242ef925f855e72da5152465182a82771141a26bba91176bd4e9b87caa2fe4da6f682991b34198f37703f385bb9847c64d19e945a8b08ac4ff55fad02e538ec8355d2a7f5a47839fd75f05f828d205678dfaa35b3655b47627614a0011bf9bf32efb2b58cac06972781ce2db4b0cf6d4dcbbd543d01adf7561df4d9cd30000974a46f7314dc31ec9df54506a93d5bb4a3b060df08117edc83a253496ec6ccae13dc3a46465592320c2da44a906cfc366fd13069b5d1743d9eac5bb3dd97682509bcc0bab8c7ce8993084513e5d26edc7b1f15d92ebc5d6689395ba99dda5eb4c36068a5b859c5cca6cb924f89c09b3df7a9b4d942df45a3239e40b7a9fd616ae41aa30bc17461f959e75bc3963ab68115575e53c361b659ab7fe100c8fdfbf531b33fe89e25424b29ccd2ea5bfe80565b4a82a8bab42f3ac000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0022843e417492627668e86c5fc1539e19eeb6971198aaffde59d69f1b4531d30390e026338eba0bf485625cf6d68de10008ff625632e5660938291494774ef5bd3020f8d5641165e9d3e3b30068d87da9b01d6da197e794cb760ab736440b5f307af1f9aa42e5a786d3142d61a9ef68c494bf8e2e520b5d373d70e8943a3910904ba00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008937c77cad1e8b134235ec2bb6829aee6bcdb5ff4f07d2ebb1fdc997d496e021fa24b81d402bdaccaa1ead5505177fbfa88ad4d0418bf37d4c0eba44eef1e9711ca66e514be1fc6f487d8a81afdd4de5c374c6a240da960c026248e7d97d88d313598c7bb9de03453ff63f42ead6eff7871847c440773365df7b23b709f545a3d9bbee6fa7cd470fb492e420cf4032f5336400fdd317756e544a5dc01259b75214901c9492601638fa76a2937908beaad90c768c35856555c49fbc77cbe5be8d400bdbe44dc5c3458a9a1d63360264bd2fc1f5b9e3671d3a90aa86fae0a827e559e1c366aa1f33a4160902fabcb67a56506133d4fa0964e4350ec296909f3e70a1ab69b4e558ed7730bd157f8d4660f19feaabc0eb1f7a996bb96a10abc25c3b59011203e68056b1ef2fcfd03fcb169a3966c7457c677645ed679d23c4cf1a5cbec8218b18a66c1feb51a8fca363c8f76735c4193411436142f1183e07fd8e74a9c14b4296379ebe361d9658e50924358b51681f2c3deb617f5613466aefeb1a1119ece8be33f492b43f79128e751759d23f065555578b02830cc1563ed8ebfd18d529a7473c2455c15927bcd5385784f377a8a4f45dcd65398793b2fd1a2bb8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021b712f65a592b621dacfed99342ed112fcd17575aea0bcf41b87613cacf89b90e7cfb503fe34dfa130aa3b383735b3f7ec623da712276a44293deff6e7b631779e60e482f9a1d4cb8c7c9ec1b7ab3616d0d594af84a3358993571f732c48aa0612f5c9cd42fca5f739446832013735d6894956d3fbd8cd883a49100cca371df075404ebb3ceaeabd9fe1b4ecfc8bfa950d06e654e7aa4be94aa5ed3957a747dd3baa324a4b7400f2515fdf29b0f60c79f9e513eb7a9b9776d92dea0109393180bb2329b40b5b21673e5bf01efebe3d087234988e7a4632926e7e8191a2cbfe58f84373455a445657094cc9d60fd8dd7d806bdcaff835c45a4ae3e6588707f46b2a7c0505895ba635bae81914d2eb7ddaf2e1cef58bd153da82cb3737f9050af0defc4d0be32a9ca3e85f3b2844feeb8d10baac2df70db268ec02b65329912e8695c21dca8aa94824d1220cf6416918960fa1d484fa8a8d07c8b29ed81aa2ea037fa25d6abdd97df40745e1e802819f62f7f74ca6fadddf356e5854fac38f26ca67ef17815781aa8fd9cdbf47681535289b6c6cdabd8d2460b1982ea19a2eb486e5e338c258341e184ae9061f024c07db71fdb91528e23069685b9a7cc5b9be0000002280000022400000220286e87e419c8f905bca02863a9b9a7ed4e3b869a7662f3f9b056e1ee56ce466b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083553c6a7d6bda798155d83b95dd458c863e9b9c193b8746e0d76faeccbb352958d6f53228bd9d003be1a6f7471bc3083df79c10a69fbf8e36bce812410e8e6aa8f110441eace20c4909c8a39be0bafab12d766ae68ebabe05041a9df369f5ed81a7644a8e2fcf85441c64bdf391daf7ca3e7c32a814a7ebbee63b937e3bfddaeb3b18c9b1c8ae4c0b3d26234e7d336348ef49e22abc1d143fda49672015a349c13c6b4f9d3ef0d195ae9b02aa78b5a68e91d1d682aca3ccb2c2a84ae2f09d340e0188f5cdff734fa0e21cfcf79d66a3216ce6bbe9efb42872628a6af7d564e44edd3e24d672e7968232283520207ae63d32c824cc6492e275a908fe9c65c5c3439d2a00f969b3d6cc9f74a95752fcab135986c692c8e68cbab116801a3f83601b015bd0cd667bf74f24381ceff970fe8706ac416c9c58b8e108af0001842fa5882c3d0d789c837bd9578026fd7be111df93b656dd93c0ba72ba652c0bec527cf8afdf882d31e3eb63cc57c1b265dfd344b68aeadfacc7f8882c5942a293432c0bd4b0cc4d06f5b779df4e4ef4b7940b4a5e2838cb3e194ed46c544ff703ec0913aa16cd8ab02b44ac2321a488490c0fa7c4080044e6d0fa2a5b0d304f437897000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010c92a9b23799e90a07330780410b36942b393b330721b0f74b5d30ca0630c9b7020fa0e4fb6dc92e7e5d3a3511dfd31654c302c7b97df26f545a43c3eedfda703726656593f594729f89f25c4ffa2a06fb0398bddcc30024fc3ab28f7344c7c404000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9058b5fcf4373f50012bae9ddfb1755f14f5873f0b191380739fe4a9246480716feedacff4c37ee7284b3d4e1ed708ff199f39b4f928fd7c4c3a0a098f96948457940c408ee156643a4bd1b83e2879262ec771df4380bbb13d3dd07830f043f16aff0db921737ced12cc5328cdc1ea107aba0bc802dc1d2669088620f0a7e7e5687d95d8da27205c5538b0f7dff6e52a804070fed4b9ddda7e92a79cd1c4f8c9b99ba819ac2341531b9a31c1a26c86dcf4025337d037b447ce17a60fe8f79d5f0e83c45e2b685a42d63cafd37c1a882bbbe53978729d431f344ebc4b965edec10672e05444f958669a72614b08320e6f76728ddffe98cc4d8654586bfdc958f0c83315601b79eb683c9c90055533c50ff79ab9eaec06703a9c639f48de2680b363c6c525483e32dc7c95caf3cafc5dec7dbe1efdb9a053701d77b579715c9e1ca20e9c9015ec4d5b7e88302c0ee99c0185831b14dc7ce8b6f82fca6bd8d3bd37af8064a58f6f27a041e3b32b8137dc0c8a24761e2f2501e62f6ac26c6e35bd6515a89d531ed7515775ae3059fa73b6fe0803f144e0c2d359ce352cbf1f4bf171f92965fd275e1cf030466249606b04dba4f8ceceef0f0c44f119f9af87dc54f0000022800000224000002202baab78deaf8d71ebf6af1c263ef12a35bca335991922ea212f1b4b3ea46974000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac95c11e330ced4f7edda7d5b10d4c09e60e641bf1bcab437456ae68140e395b595e1bd774286b918b5759f8bdea900ae99891a0ebbd507cd35819003c4404205414947bdb69c7b45197e12cd2dee209916b0b30fa2594bcc8a9150b791bde9e0c96bacf0dc85ce81dfb2a7cca1756aa7757815c851b160469105ffc8984166c62e8861cb70944e8689ce958909325a362c5aaed96b570c643a2a674a38ad2f78eb6c31edf347fd705a0e4dc37c75c58dc4191dc98d84b89d5838a79e26dcab870bdf1fee254cd6183d369f5ff4bb39f46aeb424f996958a7db9506b78e2da3292cff4cdb8b4f3609fa97d647595085a4d4632781b8e2f92b86128db9d52f0ef6cbe1a5a1abc0dca1323f0d95f051e3ee7ff7e104771af69d8d8d73bd94630ddfacb60c3b49e2bcbe0d752d6556546eec1306881644cd63989498e3558054a7ddc7291a5684cb14d8e43d217b7b6022a4fa2ce37ea3be15ed803775f7c5c2e91caba7ae0aa834e0256529a00bc7f551eecd9a51ac23a8c77f47fb2a5838f2512d451f04509e494ec821c2c10d0f9afab66759725e479faf183c32f10b2f58125b3770f86c27e965b264a9e2772707a8960a11d6185c902c40851f33eed96528a000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012f8e0ec0aac2205bef2e7e5a232688d9f83561bd87012c866a530bcc5ea835b70212cbaf3c5616542e476eb738d6a676674642fa795eb945bbb12277e58164143710c125c524a39d1d06dc55a2c07e47dae5c81b46d6cde35799342d3254032ff40000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f0308b7b96bb8b6418aef318d90ffd4c94a9e7e217ea3f6c49007934a4c8dd1ef32e2970ea6f7113535352a7122fc6bbcc4e1dca5c6816ecc701e802ed5fe09f49ba2c621239c9dbc32e107a843efcf3a05885647cce763f4279ca3bb27d2d97a9e85e2cea42dee2918111e5a02cdc52e38f0d8dc5eeef4278d535c7032f4fab656aa1aadd0d59d203d9a5c472fe7fe323345a108949a98d868b42ee4b02edaafe8552e6b2d3c1f13ddc360caa712046ae55211e7233570bc3ae48e54244965c958b8d1c5c4b416d2da2ef605305a8e6a9a9f5478a473d0723a0c82915b0469f2ea00d7b77dbceaa07259f2baf9d7942eacb5cd676491b6a0f3e2619c8baf62387643c6e60d612148f7620e4bbc3cbf3197aba23aaa39d116e2625cbea02e00398a7880b9e1775ecce788e9354ac6883c766c6a291e6b669bd5a50a3f8a738f252a4b93a07d945308b8aa17a3f669c012d3241ea6ee9556fda69dfa9e16aecc704936021ea524f0e2faa3a899dc14784fb29a00bfd50f1d00eee6a2cf03e5a0987bda50e9a53a383f3571da9cf540f5d4e3ef10b198a4a008123edd0282edf2debb8bc14a0b1fbb5c2aa3208d38ca65128e3b790b03cf50cc2532b3d05ac25b00000228000002240000022023c0df99e08fddc92607c0820c51366ad1c97e4b025558d1fd2ecb23e9c30868000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008be99a1f043e3af7bf4f2b321c5a3d6f09a9289391eba5beb9207102c7bc4f9e24089e1c6dad28f1318b71d32d19f9bb38389968218435675dec697de6a8875cb74f3aa1850d768c44d0cb8b5f2f48afb5dd2f21129a72235e0cc6c4d78f11dac82a1f24cc681cd5891a8070aceb8b6f288e4bef1dcd494d4fcd8379db3761fec832afe61104733deb39a83541ceea87630d5a2cad4ab1f1314d1f04cabdfa0c1861d79b8c60752d13d5fdf7c83d0ac0a466c0c174c95eb5cfdab8d046e23607fc9638813c22888fb24eadf17a8c366b1989279736b524646181597a01d068c90144747d74400372b8654fb006559aa1099f6177137c178b81ceb3ad1eed29569619446ac8e84314e6b79fedd45276d8e9fa39f07d016efe4ed83f57fd0b0a5aa58d8bda2af4d658173fd8722124284c02e0df061e941227f20b93e67679d5f1472e9b71a2e9f0f4d705e423a576c9d08c53fd2bd4e308f83c74318624c8cfe4acd0d9647a38eb43a845d5f557cf9e9b30e550f8f771ed5d618fabe651a4111895dd24bb8af4a59dd01a99e1881e52d95246421d8e97cf049f8d13c989b9908aef9cd4ed98c81df7491c41a958f0054f1c62fbe94663824a70f4382d67c65a28000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020fd6ae75e93e42a2fe6bbf6c22e7ad1db2739873e103d752807dc8724dc7865910a770321e2b0162d335c10926c324d95722692545356d5af640cebd0d17eff10212da4e629e19486e41a3d343ce1dc44e46d59ca9e68f3bfeb89e47c1929ea4311da01f1a191f620a23b298dbe921061a5d84429176ba8cbc6125368d6a92d6ea00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008206e9bacb03a9026f45737f1f503e544f5990c64a76ca9fcd2f86770eb4d8073bc82a333589971c8ba5b5ea5469f7536d288bb51fbcb79c8c7934e38b3feff50b61aaebbb555351562dc68694852b77b2457718ce82784b006e6564170af207efbceeaa58b288359e685a5faad454ec2e9a9f4ff7de4f19b287d4b7ab529e9fd01c7b578a470e8863255897e81e8ef1e354314573424537d190350cc421990f8f28da513a799d996cf79bdeba8b22f3117f0059e228e37b0d678191f331734b7a57b9515135413d5aa3492af73e5117e1894d2ee2c6c0a3529d985fee5c980c5a7243ca08a7e320f6488204aec0fd9d75f77392f23590bf14a7e1dd87d3312b0ee33ff2ecef8088ead03ec905205164a325e12ee57e7fcf6fe7bf00a7314a1218109c14e2bbb0146716623e2795c24e901a3edd0a5d1a4ba94e3d99c93011b2769a0d4837dfd162cd7d69106cb1e83984f7b81c80c83a75b1bdf2ac9e06b5c3a369930ed802190fe286ac221986df34cf149e47ade4649339bb16b97c8c4d68041ed00f593fbc07581945342e3212b25d077c83a5cfd7b0572b7050531b95228fc3c2f9c6ed4cae2eabe93eb1c86fef61510621b9b66a2bf769c8b08c07ebbb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001303462ec259ea001ee7fe29fa76300fd1b7b9919c3c7fbc4bd3c78615b743913b22f7d08bf7c0e0f361da0a2ea35aa9205c6b1cf03acf012e10a6efa0ae8daa9c566377457ee6037ca7099ae4c7ef2d7899370bc3f4a666d7619907da4dcba9650a83853eb6bb6175900bf09055c5f5f7e9d88b90c11a2430e292d5b5945c42539d4ba324bdcfd6f5710cb4ea2e4c703ddd2897af1c679ca16440dd5be065a516c601b9d8be8ca3b6dd109ca1651be03b11ee1d603ac231b197371be21e64fc070d056ae230d9e51e81693d25037fcf7174480299ae61dd2498069e78ff42a4b053e844dd7ec997be631fdda6f2157fffa7b171832588f24acc1f29727b2807ae438ccdcc67aa9c1d7a5b234c29f7830c66cc731f8eb50b81d52c59a217d1ded0a82bc2c9bc3023dc08b3c327ec755a73c45bd9f8aabd84db66500060df26842ee9669485ddc0f82f30322680b7490aa98904cfe07698407e2cef28175097ac6a1f384247d501b0136b88ba0938e2cfb427db683ef9a88bc76887c09db6783238af03d20aaf6c3fc4e571a93a0d7708770e57a441bdd1bc969844c5c25fff07174af3fd6cc830bc48e83a31dfa42d745a0a4191b9b444dfbef8921953bb81b600000228000002240000022011a4fc9a895e9d61d99e7551c3174a0e02143b5e4c296ffffd1e33b2b0d38514000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ba6a5ca67cc5622125548df4be787038bd3f68cec13aa64656c17654d1cf4ff8ce9224c19e9a97152874c59ea500da7f3febb06cdde8a5adc068348fa3b01d7fc862c03dce7b0f8e13c1f677af4c0986f1d09eb8af8596f27710ef21b66eaef87ceccd1a2064ecc8f25361aa022f66b18e521e770fa565957a4acd36e15d6d498ab1b038c6fe6f7ab88fa764a2c5802c74c859e2abc7ad04a08a55ab44a60d320b2cca3c571720d186907d9af5d6aec0314483008540b218d615b496eafb2a8709255674f5a816ff1e079b843ae5652c20acc9646dca187257d502e32842b368d5c5dc6293714f515fba9ba70ed3915e327389df590a10b01adcd526f2981788b5a994f24a3161e4765358fcc2a0b4a4c34926a5f7ded97ed0161ad378b27ce64ce85a126b61a7f047d4e49e3b89a8e5ab4610bf7a61ceab1ce2e63d39f1a6075f060426871efe3e19b39897e2acbc1a0198549322656fae9f052b97ad286bad6da2bbe795035f457e1b10d96319363406561c0c781c008bfb4d1ebd9a3e3c1c1f8b26caa0efac6c43edeb7af1b52c2b4854230afa2f426beda94d82fadb9c915710de1a2d2fa3f3731a0186d4727d4511fe2b0117e103caa33af8a99143b91000000040000000000000000000000000000000000000000000000000000000000000000000bec47b002208e9c695d292ed466f617154d0413bebef7bd807b12c0d6a4a702ba5fce99bf0783ae74a025835fbf65fd6e013aa7881914c7d8bbef0708f42dda387e32901b0212f9e40214c2b0a96238ca0eaafc5b503e35c2779fd60b0ecbf7dbcb411f1c2b154b579a201a22e4d8fbbd6a57a551b592b2bbe01b147934eca2951a3a97fb3f00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f581bf9c00306f0fbcdb4a87662c1f19e0fdb27c683307d0c868bf84f584e010ddb8e465a4cec9d68ac077f3f8a27e4a5938e9f72ef5446207781a0b45e083a7add4a2e79038b6595bd304f30e645581ee60ac0890929097cca02c7983aa6c31dd39b187f92f80f395db184f4e9d3b9f59b87888fae1a9043a2cd4c228b5cc2a080727ffc4baf9f45ac22e03ff18d652ab7604e37fb6be13e2165d1b96ee1bb3c39fa3f3a481c8b2e3347a5ac96718c1ca8cbc2fa280c0a137758cbcf3aaa0cc46d339427ae3e82950fad2e18798f83162b1b9dd38fbdfc65c3017c9e10029fc76dc290fd420de846763051c64198f9e1ad6ce2934e94c9a9779b6fbc0c59f27c0448b490ea5087c8b8b24eafa749fddf51679f40411d1137b710cc86d55c931eafeabe86d97882babdcf2dce9d77f9f1433c3be9ddfdac5c4fb457dda21d96c0af0d3c093ba51537075b5a47ab00b5c908b338aeed23b6018385f7e3e592a6e3945b545acdf733a370a9812863258d6074d3fe45d54182ed59ef4e3b8c81a85c7a03f2d49518f2b4acf7239ad0e454efabcbd393a41e8651200cd01501b41c8747ed7badb57f1fe6f6787cde8f1ab964db4d9fc3937b58f6c8741705aeb12f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102b0f7a1311b9d76d375bfb7763782d42d12fa926f45f9fb1718721efa69c6948ee510ea5783fa960e54fc32e42c375a689e83c7068484bc8af0bfcb2c3ef5afddffd166946c7d0d344cf5b9512d491dfcc8d0ee0753a70395733ece1bda7172a76c9898e24b559243c605368641b644b9eb3ec6461fe1d42ec2cf698d2f9eec369af9aca56082c209d8184a47b3b9e3eba1cd11a2469e88568a79cb110d216d1e2cd6f10c95ddf5f021ca511d4ee76b426468890520338c0d042d3b1b21ff1e4315e869a1c6b57a4d33e4ff15a2f1c79bd4553b93e52230b565f844d57d0b2f646f5d2bc41629c83f3a55d296b182013e5fa2107ad8e6336f9cbaf2d442ea298acf3e20d00b1eefe3c3f6bb2a2320b3d97681d22ba57b39e4934acd52ba890f8978e782299245c3b4ef22470d1072dfad4c8fdcbaac2d1abbcd58f25d089f8e4f5a7b65c14c6186c7f75fdcd06dd77956437de3f929379f02096cc7c1ef90f157861ba02581441f581eea61df03c73c7847e4058969c7ed28a70d93cbd0d2204e9346e0c9daf79be746cd0e0537ca2c144907e33772ef180a5f27423ef585df24ba87378468a0233463d09c11defeb9d9cf6f934dc3ead8e92410972f37bee0000022800000224000002201898165af4ef9a75791b79f5f0226b3afe36a4cfad0e883fdef9caca195590810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086d8ef7351dd4578d3f14157f69203cae194d9fa9014094f36601bfa9c1d53e001a0cd64bac9761ff8278ea1296f4826f912ee24c1cba3d54e6c8c38c158e27adb5a7a7a81451b183b60bbc48f91997b116c1e07469ec613b3567054074c1928c51a6180baa82ff029d9edf67debdc3d0ab26dfd951caff67b79dd498a0604dfee659198d14878d20edfff09b2e156bb02fc4deb9391c664a5865a0b9dda3f96d90937eb97c19a56d07b528b1e8132d3b36965c81ead3a85003c07525465f294e885f1d304aece213ec463377a5b9e0953d117fcba01b85090f154e546d7d4c37be5b51e870240823bbaed435b36ad23119116097ae36412ed1613d47517446d24db669ddba69f3ade60725070ba6ef33093f38dbd6d8c1714513e869f00e2f61906a61253d9285a2774ee0eb9ad756c0516f9c59a9c72e03b7a09c46ccf2a3c0947c0c886631bd1b81ea45bcb00f63a1b09d058c8d194adb2c2c35273a55a28c7120e619f83f9ef86f96e5ae68fcbab658c86c171f7d7685bc6c0c1136e1206e31ce89f1b95b61584f1a2ee9dd6870d1a3dc19e28df8a8a7ecf6cd8aee8dbfb39c676bdbc467d8f7df365bf307b5c71ae097dafa7a093f81b4ec570661d7146000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0022d2bbd6af6af92651baf6cd6afdf3f220c5c4bb05d72c1f008d05e7c1c0ce05624fa0fb2f62d21a40f4ecda34ecbc64d40303afc6e71e71be110da341f50968502133791ce801457dc5865e2dd1dc52948fa27ca3130c05d97ceb869e13a4455862b35365f72166f47050d1a78b2e58b21ad686dd6edbb6e747b4a83c8c5964e9c00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026f32f865f9ea5d4fdc18ab9cdea0501365245bb2a2dc6899faecd7822b04db864f3e590ef83dfb1c5e6a9cfaec0ad7586a0ee3e5a31076be987f3cd12f0ab1291c0ac4ef42ac0c8316865edd7ee610be872f28a89ed6e8d4bd2b0a465ecb13274c090bf03df1fbb29a240d1e64faf0a1e713b593b9162df20ab9c1c04db2c98ba4a1a97c05ff513adee057cdc11ccd1f530b5c1ee229f3a287c330b428abef8ccb1f87d5d4350763b55768f22ee9597f7a7ac330a831d627a97670375191e479a37863cbcdd9545b220196d4b612fef6494059179333ee9da1964413534f46adfb7b00c19e4b94ccf16ccb3f4348cf7709182c4872bba1da101a9b481a0cb7af36f5db53a95dfdd5b04a7ed59b698d38f549746aa3847038af8fab6513bcb80605328f8299f9b579b9bdcfffb1adc3308b95bd2d329752a56c92f4f712857af32f853a9923fbdf6c13bc456e3f3b28239a695ac07f9cb404095c7d798e4135b3849d20ea440da2c9fedb4f79cb0c0d7866fce43038d966bead0ab2ef09fe24ac1733aaf8e701ee4adf31052ae09fcf9ff19a3f57c97b5d906a08349911c8a2ebb4d209ec7da618985f23d86b9510547ab3e5d0289b3bad786e11ad85607f6f00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000188429de143a31aa0038881fb69f706b8c65c91becbf35cde95dd3eb1831a5b5ed0fd8834565bd8d9a34b9b4f78ee2a7a2c9d41df46bb60f8dfc179698b60316904d815bd353b860d6ab90d8b3cb86103096ab99178fa4bb4cc2e257a309d90c92d7344bcb831af56e9d67347b8240c7fdc1430d5420a707033af8e595b730e9d2db7428f9cf77cb8091ad2db35e5e68a75d5d0b544ef53d6720f605003605810cd758df0b3b84af935052cd251b6496c09ac1952fc70928e102c3f0cb8270a223a06d619d37711b7873e98dae7566df2b2f9921c72ea57a98ca96ed0fc11a4c755b926a28a6496783eff406049b99b8a808f8406976d5d4421ec7c62472ace3a09561dde3506e39f15015e630c4ca805d84c6b054dfac8cae8104c8bc9b5e31bfa379ca9127b0ef90bc004570c5a273bcbd9a266799c323fb08e8f8d58ac4a0d5746a2c27fc091c9c8d902b31583145a5b2c39764287501e13d76fc1e3a4941f054c97db31b4e9f30100d1d87aa3d47aab8e985afab159f3fadf0c8ce1e8abdeb846278f706d1353f07ee9a4f2497a8af66fe9b3d74480c6ba7e03b47bbe993d19351000b3ef12769aa028ba427a93643944441cf8dc725b85729fbeb3bb8a7000002280000022400000220047b68e01fac71e5570b88ad7c2261eb26f02375d55adfadbb55136dc6515431000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e453805642dc5054b44ca8f3c2243a92c891a725963eeb4b1532ae78a756ad98fc97b3e48e5769c6f4f3822f39388828b823ada1e7ce6ed64f6d4438a2f596648ae40229ef8457cbd4eae60178d84635622c1716fd0fc5ccb7ed6cf8bedcb90caae8f7a7f88e66c9dc78bba3e4f3d5f6818ce12954614217df642e3bdb55d991af7b62a7d868f14a01007056720d91ab8eba29657ad65bff82d1710b50afab52aa5ce5a1db25aa9ef20bea4ce3cbf2a6b00b4eddef73c59d7b4526d4cdf908ea11cd8f16418334f8212882e02fbaa0b32fe03caf7cdfa6ae66d24f55db9d73238089243b727d0cafd1c02f6a1993ae1f593874dd58189d89b1e4639b567719995b185fc56c4d1adec52b7f765befc218c0c818299cfd72119e08211bc0df284cd0ad957bc54cf3f3746be19c67e4ebd6348ca2d8c74902eac138a685bcb772ef76a940fe79d71d2fd94c8703a445229300ac234c7153e9bcff9676657a69a71f49ce8a9e2d85c0c60114e32ac2ae5a4dddacd5789cda9723bfdea9ccd33ff837f559c977806ecce6cf98770c42037f467fc7923b094cfbbcf6ef23c5feb7a74447f54132f2e18c6fbbcd8f39d5c5ee278b7f3aa73fc4f37c26e29438d7d4722000000040000000000000000000000000000000000000000000000000000000000000000000bec47b002151330c2e9f9865aed3c22fb72f8be26b15dd3379d7ac75d0519e8b657381f3e0a01926eadaa79cb51dfa9d4afe61d2a2dd1ae54d8edf31e5902593c7aaeff4b0215322ac84c2016fb9a7f0644731630785ac7f3102f088380272918d630ca93f51947ada96a989623774fea86632e052396dd7c3ad75e884832c1d9a9538eee7e00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a94bbe63fa4d0cd695a2b098c756e49dbff1aa3789c58a9e54aee9a440e70bf48c4a9c73d13763c174414139ba7b6b69e89c9a3c7cbee2256fc60308a33fce1e52493119da64f5ddf8052d89973368a1f1dca08d816bbfedb064fb51844cbcf113220aec7d25e691b976ff1f7a2d72a1d2bf8259d309173408a175b9b93b359c0e9ceef25da44a0c638b30705e31094d3d30f62630d8500995b564bf9344a5c63b454babd56aa0a89f097506a215d49160d018e246665c3b1809e1ecabe3635fe9f38041e2e09244f7249cf846cfc35122c785d8a10c97f87cdc7bbaf04e953cabcb569ade2e51adf6c8f6bbcea6452cd343fd9296b66641c3e80ad44f62654319365af5a36d4d218c191793716cc4cd24226d5dccc0bb3bbe123e2f4804d19f554c9e1a6f5000d2863f67fba805b675a9e2a0eab3d350fdb96d284c53615c72fb1e172cfd5174f92013a28d78751990a0dbaecf2083f9aa3047e5fde4fe39d3653827f25a378d4ee18a48d2400275df15fd41c455b6b5944aeff12ff4d03fe9ad1cd94c099874ba3d0d02c7abca33fab9953208028349ec002ce0eab7ddb444778ccedf1eee9305aa2d40aaaa4d289c67925923022ac81c39bec76b63b683d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c3ea1f30b62a780dd93f6494fba61a92c99ea5f395fc2c537514504d3d02049fb89f2ce0b0bad411022760c3999d6645e5a31d751f898e7a0cd2ef44d743b9a89c35647c051b3db0694b982342a95c2eee11a460cd9d3ade65699f1da6c68afb0a6cd3d9fc6534e0ebadec074daf62ebf60627a573c15736d5ac2101601d399b328c9909c920ff5628c1b089af0b6dc79c9ba79d113be83e02fc09ac42b5217672e7a232e116797ebb42876e2d8c0f4211306ee1e3eb653e89c62201b9229d704a2b651bc4b01372c42f8bf82e2aba6a98c165b715b4f11ae90561dbf03601c15e97d8a862b73e24c903bf8390afcf4347d3cf489cfddcefa3ef8d45feca0bd8386cf571dba217ec75aa669fc5234620042008ba04a0d2d3c51b929951196f5fc3b1221ecf29e4ccecd152753b7d5002aea87ef97d81048e4f6a6f64a22964784e779e07f845279c34b18ec61bc612f2a1afe4c5858612339aed5b0ccc1e2dbf6f1151540b4f8f275dc6d44d91a86c95b3aabd162f2b33dd631e916de2045b38d0c8ed49820e96b2eaaef9442da449d3129e7f4ae9da104c595ef8cba3dd9ba61729d1007de4bf1c6ca861c3572b5e046119348eeb1741056132b216c01850600000228000002240000022012437d749d4e1b1a5be4608569a41ced40c801ee09affdd6c0a63154673de2aa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7d2ce9dbe5392fca67068314dd2a2fb86a668553d6e7ad35a08ffe3c21449078d995c3ebcbd8362443d30f4282debeb4a76a37a952e0d8af055aca6c547fa67a4165bd42003e1e39a9f12b8c0a7c7f6aef315a0a3ab716bb37056710efd23445a9c9cf37c951a6dc38828597949b9ded5371484ead84cab15137e1773945e1cf3f013776aeb64e96f555a85388747072afa1f4014b2c7963b27ed9c4fe916a03ae3397f3d122aff154142063fa1f000c3c65d97e9c245bfa2346dd399b760086b8e239e57b620294c09e9813e9b47e12782e7433d37bfb798227b54a78b95a8fc49680ececa22ca22fa9496afb148c4cdebd6e5c4d054e8978da4420c06fda657a5a3235586839728b6a016c0c6edc62f45c1fbb8f8dec80fad49eac535d4c94f2ffa95243315dd2fd93893a8918399a5b5191a329c4f653fd17b5a9e2c4ee72bb9d2d506db4c08b65fd120114af349636f9324e23fb28211ce32c9403b7b265bdd8f1101f5773f66946c4f95138e47d2b2eeda2852aa63dddb3690571265ae34f8b294e09526fb573f8506a556105e8bfff6f52b143cff4a8911bb17d45c19ad7d40ee6d4b4716bf84b99813d4b9c5ff01536e286d20ae1b4f072ca0368d16000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0022cd7dd3c21065d011ce4933028eec21beb3ea1571dc410ff9736db35fe43c0520e825d8d1430f22305ad937125ecb555fb3c183101507257a4f9279e58c8c5d002158e730d44cbc9d9ae979328ff818447442b16b79aca5272f2734fb16490ac660b5b039e6cb20e861b511305e6a65682c6e2f2f59eba2e35af51d7171a92f77c00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ef47689db0d172ed0984f7bf0cb401a69974265af2fdbcdebcdfd024802003dc47fb6f7aec18353f7b92240e2cbfd471dd2fdd8fbef7f62504dab0db35ae3eb4886c2eb8f1ff6e4f1ee12ad6880e3fe165f58d3f89d2fad66bd370b19c28d48c30d268767b99b756a724743168dbf86f43dd9459decc4d2591d9513228d07db3db75d08a34786ff43ccd241ceb266be226d8e06d3feaf0e0e0d747f1e0b7346df52e8d0c05f4f72b980939ce78ce7a205d0bc4d709cca4eb0faad2e4bc33ccd8612b352d60bdf55652d0ebeb2a22e084f1d35d7bc2361225161d7cd393d42e353ed8d432aae474e53434f99c5b20c8eba06ff7717ade8b6e90bffefeabc72bcfc34b4a8a3f033d0053b24045a1602d060859d77ea511f77d416aa7482f9ad082a4f83b8b924369181f39baba34b67664c3768de6b6f96583d7a66947799b6c8368fd4aadbc48cbc004c5d824bfcad06e889a020b085e3be5a08fa47bcfa2ef3e504647d4fc13a95978a413dbafa4dc4120991371d92274487c5b137edfd84ebfea70a1c1bcb472f202cbee0ce33d5efc1f3a7565ce8e6b577b40784afc8237cfe57daf19997a6d793f5de5424eb548ece9b6c4ae40bc395e7051fb93b128711000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090bbb76d3a41d28290db8fe59777d5752a41df942d7b640d9e2f265c754ec6a248f531a562ed4f422d8dcd24c695f464540d2f31c25f56584f901bf22ec6ea7152e45b5045c9d5778ede786274c1a008f605b3d601a604e6e6214e92bd326197474f12cfc441b48f7e8ada975ecb8fc92b5b4d006da8b26c6094c6f152cf3e2c265cf8df8f5358a26e95a5317cd0837ea6f8f34122601fec1fa933006154fd3265475cf1ec0facdc45c2f1ff543b87e47a2332872057a6961a4eed989d89ed47337556a52e9c2e87aa7c405bf7e350c32e4befaf2e9ca7e813bae798714bedf4303807009709b78e417be75b401075e270397df68316b8a28614f67e9146b7eee1f04fd643f9fbd66d7babd80b9756cf4f5ca89b4b158454087b94ceae249eb9f455b785ea161b52bbcc01741e512b28895f445fe1e283fcfa584d412ab0f80667f87a7a972b24ef3b4bf27347b214165bb2e33830c7b8c11cf5dc7fb1a336ff7c2c9fe4f8ba2b9835f5b90d9143b6fc411ae563cff60bbb77f6899a526cab68d965a2e537b69f5481613c2b47c7cb3a96745b0e2071774c9004383dc86eddc542aa33d6dec24b1ef35222519196da99d76b34d7946ac5d796a5f15574ce9ed4000002280000022400000220201e6e316633c3233e6a50d51d999157fc9fbd70e5215ab12024ad8b3a06a2d2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e4b65c7d316571f9ba9aead9ed0c3f21e9acaed7a821b210d979c60ad5e408f923617e51ddbc62c3ba5bb6ae6b6e545e6d5ab8ee20b77cbeba1861f2b74f82d304f47ed60ff9c516466e46af368e3af7f04fca0b3f9bf82197a1b3a3eb7b937fa7b2687ab60b4bc521ef6d6e6db5026f142c48f280f8691f858a79b46a2e1d2c8d4ca1d4006931dd1fdfdbb12bddf1f815b451f27acc8adf67d405ad2aae37ea3ab73a3db85a09c9ee82c6783029428dd23990d8c63234be069761384bfac1a5485f43b12327d0be7e53d05cd3a1618fc423a36d9c7dc85243802855b90ffbdfb14fc2402f9f26c7a711580f13fe44c5f875d87c2599b33c326b77d0c21d362dddf87a0ab1c4650c9e1209ea2b71f79e60cb0f5b6de6b867352915bfdd4fa0868bae24cbe3767995f18868fe33026d6c4933c91c55f12be914d8792c42732f86315c7a1d2765f3c54bf5570ee620ab5bc36fa5deeffbea66bdeee1d8c1a42c422068133f5f8590cfe4ce209b8a04b03209d9fa6e975e77eca8650b508f999d2932c1d97e6ccd0b417780a993be32aa0961e5c52c3c0284be590da23de3b59d71c8e9a41968aebfa71e35846164cd75310c48c536761017174ce68a925c4b8e4000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012330632eedb2f8789390862531ff4fccfdbfdc56f27807d1a2b5f4fd9afd95c902168240e246b09450c70cd1c5808dd6d9b6122f8c56169e7490cac336bf6414aa20c4f23a6ff540d4fa2633eb56977c322c423aa4826af8ce50b7fe94ed7d149a000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000166ce8dfc916c719382357002a0a4780f8fdac6eee53f845132a077483b7742f119533c67445476c2acbf5979173c0971d04aee90729ae56c5bff73b9c641a43fe0ed4be1d8d21a6562404971dbf39529856304cc3a4e095dacff6c6508f75c1f78a2fc5cfd9dbee326d788af0a260b56cb2913e1d490470dd997fb486ee6c6b7102e7716f3b65205c6a6ccb0ede3ec6199f2bee6a912ff344db2a751680eef141b00b6e443fa7b6c5cb8455a72f8d3b2749932d2b7a4cdec526a4a7d1e022705fa7ebf46333c4ce63cb2b4f497080c4dc35d01c3cddadbbbdea1b6b6745de995c698301427f59ccf090748e93e66e0787cdb07e3be4166814455a22951871cec61f654d66989a200044bb038337196dc212b6999fb42a168a21e20a3e81f2acf3fb9bfe18fdacd0597e0bef034caf7bd2bf3e13c850b231b21f4bcf1fb68701a46c78ba50d6ec09b22c0a48ec3954135dd4e404741441f7d337c9c1c0287b7ab3ef6525eb4a47a31dfa3b67b9046be9ea4bad280d4f367bc62ac2784bf06e9c4d4c74d4e0dc22e3122ab98d381b8b639f1920371801ba5e43e156ee7f3c8cd6162acde21ae7d9656da6f30f90a29987685a66a3515495220765335985f4c742000002280000022400000220183d9d302a9b289eb6bf463eab4d429f088614cbf2488e8f39f005a371ac73b900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000295cfe5fb4d3b9dfeda0aa702ab416534031a9244484987ccbdc68fa8b525b6f5c71dcaa7c9bb177739e5ef56356e8efdef7088ace43822b920b15a3e9ec64b731e42a4b311b63b687bddfe78d057a17963644e689e1e4fd6566ade90ab9a9c39c0b028ea02d8f26fb734e5a92a468c31921326cbe690934994f64519ed75d4c7f31cdee17dc1e8bc2f48aa2649c92280dfce3ad1997a85880f239d1935dee396184375b7cb0ca7d894c012ee009c55f3dbf6e3b1beaa1c915cc8c52d55da50d8f6d9f3840411590a2ea81273a98e31b03315d445e8113a4e6fcd062903bc0bc35bf39d9d850caf9955af0a5a5b83583a2d873205d69ae978e592773de1c1202e2436e344eb8c151bfaaa13dc3804a16bce528ec3137062c556bf080baa3ad5c14a1c885f6c86c0b21f3418a8ee2998564cb9d016f28fef2592f6d590a509492829ba9fbf9198a197cf195d2def6802926290cb436e4193662e19c110f6ab6a93663ed8d53cdb8d1c16d2ff3bd12ff9e75cb771c190c57c7dc41565c6edadd7e26847b68d2cde0bc0fbe926a67f46cf80d38a132a7a1d5f1da9101c857381731a9b704cbfa66f1c76c02b11b5d19277f337d199d12b92d1a747329ee8c012d2e000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400117a77e9ca7e768e206b44835b894a0bbd114fbbc1e1b4712974a641e182019c30216a49ccf14fb36bb186c24ff7b08d8079e2616cf0fa038e081917420c24f4bea21e0b96988c95a4e01504188cfb2793ebd42cd3227728251b2b8d9c025b2e7b80000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e70082843c3b317432d9ae4b8489259524ef7c062412b75fae0be9f66d675e1a5a43c17990b2ee9c9de5d58b54368fbf3dee61611108ee5c81b94d1a39511605bd4f94115a57bcdab404cbfd68b84e56aab6a58f1a195cb58fbb9e7d0babc20eb8d0eb0f642de6dfd6d33e5b7123175f28d4757284fc0a00131bfa68708b5a6cd1a818e245a7ecf6895a32019c1a974071716991d2891a76178a4cc8bcc4fe1759482657c4e5138f0ef27a6c655490bf62a043fa4a25e0ed3dfb9bc59333cf685f440745f9219d44b340ad87ede4b18b9ebc7a8df8bb99652bdb02a0fd43286c695a00a9e2ae23278c7e5d55b64765fa24bae99738f4957dc791b9d7e24c2a11a3c5659a3eb91bbaf48cfc2adb852b5a6169fe1398b7c2678ea63f842c745f3d758ae7039bad104cf8f95f7ebdbb2b677296cf4af8ef3f47716f2109a9b241f95360a83bcf777baed89d2fc32c77311dc770812a378f7cad1b31aacc6e70557be54bc2b7c3dfcda35f6d2aef5abff45e4183c942671dafa379fd51dac153453c9516e9bd42eaa8c238f445d9b709bdc0e0f12f437f88100fbfe3e6c2070c269ef925dd0e96f7be854ac2c35d670e2875ff102a69a7abdf0d01848597511eec900000228000002240000022006b595b714f34ebae4f9dd6c5af54d3bb305c5367cc0f4d871f8c0a856e6ebac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac4d1ae8e1703f54a7b6a9f3b6af3eea2ca00c85f8dcdf4b326bcfecc3a37c786a1762f66e312394626b315f531fbd93a58957c68623aefdfb3b2a3b1649258f8a19d305dd1bc81618053115cbfbcf82d84b9e02b3a2c70afb10d852acf54f111f18d26b68dcde6ee326c64cd2481b43dd3df7893c55293591cebcf7b96f2ba0eca8d30b1a58cb030ab2eb57fd5c18773b8a7a3bb2da842497dc564ec451363071bea47b9e53d62117c582cc6a7c1c11a3dcf17577f625bde097429317c875d9728734a0fc8f7f5f7a13dbfbde145c166cdc069f77a5bb639d517189ee6ab3f138d711c902a349f5a5e08b5dd2276a9ae9dae40e4210508c0ce45793dbd96a7d16639313891078481b912cd488450832f4d3369c96c7befc126c41ddba0fc62a1c1c16dc3f65f038e98c83c6b98cdec1788655edcbbeab0bdd2a1f1711549f3d7f957147468cd791723dfd5de875e9593d08ce2c53cc201cf2d5307dae7e87b4bbe283a51d03fd423791179791f93f291dd3b506d7ed0946c8a7fce5b7b3726c12065cdb740b351fd74b2d55478389604d946615bb4d5db48a3ec31499d55fd4545f4477a699d84a346b01e013b4bcb60881e7b30d7cc2555ed48801a2b05e2000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011b59a024ba2f7bc1ab0abe3415bf06b13184402f583e823a0d1a00303eec63030217bdab39fa09837df5ca3b6d4728ba840589eee9ae7364673fd16c332df5afbd1aca00ac66dbff69195ed25fd812f7d80d11895273466f486de0757e388784ce000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124bd35c8efb025b97430ef199dc6e62183628abcb04fb875926918f43dfc4b73914b24472021ec05563d7e56ff38c95aa51c7bd6d4f4b06ec906dfa93c31807842a2b3f52eca7e713317148fc918ff6d1269a9dd1e0dc2ec836b153362b108ffbba096342704f0a1716592230bf982a4ffc7b596df96dbfa7ebbd010ebf6a8823664c7b45d4c5d4725a779b5784316c5821bcd8930f18b322e4d08a2b3b0e74b4f8a61ea3299780a8baa969f593c74f1f694e6b6ed0ad6151e5161cdd5c150182f1e677b0353fef7d4fcaa5b21ce4b5b138df17e438cfba60ee79fd6a1e74f6580388de74733416089425fe0ca9ea3a9dd91e716f8243820290d2d95d71eccbe6142c78a39b0ca47d27ef978268951f13bdbbcbdcd4a9ffe7b130fa20d07e68dea278701eff790dab71d568a91bde687cc3807dec6de17425704a12cf4382f0bc1032cfbcf59569d9067f75ab207f44efe119c8135a6e0e24e987237e423067134fb9272f0fc138bc4e1646a3e6a5b782c3535483feb0cc06bb5c58efa7e422e5bf4fa51df578e4cf6418d5e0d5710b4eee75d502717cb1245771b51b372fb9c18d1a967324e6bc27e2002eab2fbdfe4c306fd985fe8c633068138e78df7da700000228000002240000022012fba9a490308ee0398449df77baea2288539464a19976f076a06bab7e57abc40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f54be6d3b23d9948941a791eaf697d4434bdd87f881aace7590b15dd80715db01e834417a61ba793b91402e90e0984e891213212688de4654b4c29b221b8aa121e58eb7f09e1a22c10c7a412f5a17818fdf5274b90ca0c9302d8d132cac7289e6187af33a119b8663db2afe8f5301400e72fbf44e022e054d061fe609090af4ac8d857a67b590b9f96cb789259a53913fc4b74858c9069b2b95ad29df994e9dadd342dc5b991eb19724be6274f5a1fa45486180bf80864a7d7ac19e401fed1643a4d383febfce2aa556bb176e712d40509f655f90cb2fbf890d8a7912bd3eb2f638515dec8add9f2252608aec998ae1bdb03d4dab909c177f0592a1348c79fcffe7254cb2e5c36c76dc3ecad1fbf1814f289f1d2289fe79aa1a23d9c4ffe22710dc05007956fa020fe202976d77129322a04feafe478bc7161d0effac7fb040038c305b7de455f99df814b8dbaa79b3fe12b237fee4df5f0b702babf6a473c64159a1c45a1f764ab72b9f2493c029e338e3d01dc96937f89c9e945fa0ca8c50397817db9bab5b9bae22c332e654b5ff63108e24217dcd804f486996436fa1d83b690e6587f26881bb6e4871002faf9b0bcaa0bb4a1e9f5dd50b16875cfcbd2000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011a409583f0c85c237dde8f807b1a19d4c61f37dc09eb2dd3b0f29ae3344c23fd021abb4286986b180855cf093c060676e6092a98d2a37e96bc1ca8c6b9d4d6d93e1d8772c3fc9fbb70c4f1840578dff8c660c0023c6034f0720318c51a44e65e16000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000986221cafdaf0e1465d55aacb27a12e18158696c2ec4e770197477fd914d23e5eabd91a5907c2ba7cd1a679d893f201a904e4c8bc7781008f486a9e4ac9b06e82c618d0cb20ab6cd932a4c7b117545098ed9398c45e1ab1d3c9c98314101466bb10d4546237da145d63c518e67658c7067f37ba2b09f360ed1f61e7cab0c4b32075ea7d2598b9f14570174bf278f0ef4635bd7a34d0106452dbca333f6db917d9af745814739e24b4ef97a8f1ad198026bf161459f91473e02c3b785f6819306a04d2bf209201e03fff6ff2e08164f703f121a2db0699a591fbbd223668b6b12be917ae058c9e115f8db3d5d2937c2299c471d3938ebec80c7cfdac4832daee6b9ccf02be9befb19ddb73525f9f664c06c15dc2df889a41298b9743514abf645342e510eb65b0821d9f3debd1acef128f7b00117149b47367c672a66736f144259d1c44aa29121d3c9603541cb169a70b38949571e08d93b148446fca2f301d65446c3ee84151574c49cc804031708dd0156e5c4cce54a5390eda23db71981be688731197907c5cf562813f95e5e789aab2ed581839a1547354e5b88a58494105f93dff959a9c16f4fa6b6e21648971794b59514514afb03b085a6f67ec5fbbd0000022800000224000002201df29bafbd72042c3f51f2b752e8d5a139fdc78e3d5c2620218e1fc49da6d4330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089d39acd1306f8e5d4c05356876a1c7404ce02fabe53a29b36760bb17df3d76840849117c9e796604ff435e28b7696d9f558e2b351a6912af1954aab93aedbf0253c512d69104fa81f10fe28afdd564734031066e4e15892a06625689f00fc28c315b15489d392d6aa4f70d9c843574b1c083194806e2b460bb0ee116789644cfad7ce5561dea579d5fc017e353457e891f04d10045c42836a15a647929594273ad97e36d362aeedef9cb2b02db51cb97ce0c186f034f1d17dc626e3989fdc747991968e7ee5c1713df8beeddd8db571bb2abfa969ceb8d105aab023894fcfd24968a246d4a2a2f7c774ea1ace3508873e62159acd1e3935544e4091afc4493312f388304dc5812c28cb31cbba27a573983cfd41ad4b34cbea9eda41faac703299bc487c3de995861b11ace6878225f4520ee11b714ed9e9624f67dc1582b3c1753bda3c0f63b1891876e2c1b5af8bcadbdc60d034868d3bde71dc1bc65df13d036d545cdf81ed2d10bcedf8eaa3e044ed4f4d87e87584683807ea461c691ee4034c7abd63f4a99f58f1d05b21c1aacac9bee3da064aa3152e7bd8592ba076cb87a7a61366648015b0a6e47869b4ada56cbd3e782188a8e978114ce843cb95ab000000040000000000000000000000000000000000000000000000000000000000000000000bec47b002275b12e271a8106626f139e3abd683201ba533d814af34dade7a6fcb2fb17bb6115c7dcbb364b323554512c81b0dc8fb970cd0bf49b9d5882c0d14d43dd9d2a8021ccd96288824c1b16e691188ee9d77a5213a900c817d4bf4d12f7f76f43d68df0101d9beeba388b7503bf39f587fbdc6a175b478fea6f5318c6f81ca4a959c7300000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008fd76d3b25cbfd1550dfc3e99490975ad49405ff823870a725d1712bf7413f95e89c5c91e8cde70a8fb620230eabcc0a0541bc3fb8ed9c8084ceb4042685af3544ac655dd41d8992820ca040cd1b730adf25b388647b5f82e34643fdab31ff51166ed189471679d6483a34613311c01944ff9dabaeef8cd5141458150b4ca7ff66f9d88d3a1f6f3088a697cd9558e7bb641d45bf47426ebc488fe1cc16d1bb838ddf41b87c4d927dd48cd36237a295dc6449ac663faeae6368d8c51b523351f14ca5ad617bc52bdcadf919095ded4cb18044bf47e4e11a5d213d67f0977389913e916306e243ac0e54517d393d4a4a741c897570ea76770622a331e6060f7ad80cdfbeeb85ea7c05b0ac93ae6c34d56f78dda1a8c2229038f244df767a2901f23a4b9fb6c20b51d9f09eb02eef1a7d2617eb1114551c4ac9734b05a5c88a87cf7139cfcb051efdc27d0900af7a99bcad207c648ba18b7cba61bff9da190fbd5c3f6975b1148f706caa7961cb6fc671be42f98a6a645662e8b2407454e9ebc325dc72b74c940d220e1a91c45847b7e77d20ae78e83a8eb964e42c04c784cd7ad9f277cf1eb07f32a758f75ccfebef179cc6929780141d2f41f7a577b65efb750100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a43ef0e8be6a62d55b2dc62e31af0cdccf8df7791022cd27750296e20ec44e53811e5e3dea80b339563f7ec65ed57b36617a23c28b26b5ed82227422f0d90174785c0a9497468cb0a1a9ef2ca2de80e420aafabaa0f1447f96032ff915b5664165de3e79a74c9745bb76b143822223ddc76a452b12bef8706297adc142d0930e63c375014ad5c7669519b929009727e00dd60a3fff67a63238d040944699c10224d4ce9e4a338a23220fd564d8bcd38a9675e0564817874837fc44da5b471e97197edcff49ee6db153f465dcf0f05dd001e47ceacccb14ea8eefbf73cfabfa5d9d8dfa045894d9a9eaee6519e27eb08afad5bff9c118486a3ab1f25aa7daff866b1cbcebdd9832e0ddfadd8b0e2fc9a45a6fd919642dbdc676678e6b44795a28c6b67242ff595552f676de4f21fd09f24ebc8508f8452092d7551831a8741f2f26845cdb01e1a3ee737838107b77f3cd675c3be8450c0f50bbf8a3284cafb98df9d27be456317fe17d939406aed1951a032f7cc61c0f048162f35fc3f35064f077cb2a2b2d2392958ffdf00494d75105c6e799be241a14b6130f2245b91ffc938d369757f6412c77ac7db8d88850722a08e37098c33bb60f028f649f761f80000000228000002240000022009421080ed321394f3b70723d2a1605efc4a886bd0b8f7239b48d512640e21d500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000282d027133ca544539a29893b6e3493b555c7e25e8fe984de7444397630c255846b85a81600cce7ee30b2fec2daf01c3faf1140b0166da2a577b01e1ee47950018441587092fde734b8950a600f22fdd9ca72c56ff653862285db1070ff5424298cd9ce778af17723b8730945b376a0ee486df166bf9c375230542c88c781d4a82a01f5fa2b1942db4ebdaec4b8cb6f3cad53b745c81795660d31ef4310691b9b58bdd33a9e51db84faa4d9f3bf765840af47526091cf16f17e5719c9297bd4bf8125d79a51d60234f271f114fbec61768b99c87baa8362f1ad865c20358e76423a131e50443ae216876ace560e56c3b4c8d2014821f0fc8ddcd8205deb320e31197a44624e0c0f42683995f1f518dcfa77824a05939187e215c2ecc22d132d8a7bd3d8e444a3601ad53ec7cfbbab9c52e738a7c92839d014b8aa5a9fdca5f90e557326cb3f7db4d60267e3c080a5bf8387eb517ff8b0fc77db651ddefcefb322062bd4fcd3955577ffe3c68092945a401b019534f543dba8a607204b0a45562f27e25f5ae2f3b63b66586221f5839b86562f25f3071687a8526134fb74bd48c06e6b5d82ae57a67dbe35a42f928404b3125c9ce8770f91c702f86e8472f8c27000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012ff8c8bdecf4e8fb5b7f91fe414f9c8bfd5a4fdf22f0506180913628b68d1f75021d9ef76651d2b6dc520718ae0e584b84e285d42be06a767f7861e043a1b24c3918756901990d525610176039cc7e69741d76c0c98531630e17e170b7aa7f836200000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095547d185d8445d34329f3a1b00333c4acc52ffe1347c86062dd2b9eca7d644048a3c02d1eb0db8d5244585657ffc3699a945eb071450840401b215d805338552df731e862a61cea4a20d0449caa1f427d3f9fe006835d7e0f19320ae98dbdd4e5156b84f487d001180d3be790410e8ab5d28e2891bc4ccc6e1864efa57930d7ff80b6c25d5c442e885660beac6fa0a1c7282b756e0a3f18fe32af44cb4fdf5d534aa5bfb90101d514c29774ef2290e822310703c6302156c199e907512349b6e43070a36110e86eaa5eb4bb654b6f5d38fe98bc30361f709f4c1e1642c05121bff829cc2f18d4938cd80dc9d7cdbd26b9535f1458c97cb374091797461def5e8522a258ba360ad0833798a122916f47fd32ef4eb63d14aafccecf2ac88c7eda47d1258af79cc45b0942ae198dad36a459e4c376e330db6ebba069bad0627c90dac2980384d897ff691713a42cb87ef85095496a2ddb023236c820a6a20126c3252e2b64a033f4acee3de116daf14a6f3f606dea9a7a1fc7c1450030829f0c6c435b5fcfcac7bd19baffdeb95ee3007d3c225b897f4652e8aaba0baaaa2ecc32d0a51acddc5f5c4ed9a28302927edb04c9e52bf3fd24fb05d69d37c00316d3b30000022800000224000002201ce963b5a85eb828d5388e2c3a1e60b9c25ad15371491c7ccc829815c8410641000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d9a435bb5d6827f9df079e0f3c14a9dc928e86794daec254d18d5054c0091419c00ac6af95923f339b789bd77588dca8fd28f4001353d14b15b23f23a00d761ffe8c443e073f67e4c4c2ad6dc5f9a9a83f77b49be241e77402fb5405d62505431fd48323e2cea5a627007d22eb1a43b01035050b0b6bfac9fadfaf9ba702a2017ead407475fb1f702db7385f43ef3ba961633b5c40e720b5bd2c20e342995892bf1953eb8fdc4702bc9203dd144eb742c0d0680f63ebf333eb9bb1bf1c4c2ec00efcfc83fb1b87dec4de9678d9726cc596f634bbf53140f3edfe4293f68e231da326b8bbe379d0f24ad3ae39513058f1e327627b44fb1582d727e258fbb2fa46c91b312d7a298a3fc6d1701b356e33655f115b3cbbc2bbac1a01be6f72888bdae0185fa33eb075c5cc0af9bbcea50a4aa6c530a2d23c3048f969fae97e4138319070dba09936809ff34de6bf3183c75ed07771f5884ce64b3b939b47430cbabe9c6bd91b32e9ec18692d23a804009fe6e703dd85b9c42ae39d23d8ed10a84d1b0299c8775a4df250d2cd79008940d44d6e61972b43caee9ebc2dad4577a2d5eee889517c18aea051fa75359174809cc0de40e813a84305d061dccc6cbd0dc9b000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00206dbbc6c26fc3947bdf9ca95ba3920ca6006950e5cd0758b4d75be7119315ed922cbdb054d07bd64aac29f22eb551ba2286c19fe5dc9f17ee7073ce1b3555ced021e3d1caa57ff357eda873adbb59546f874646f4b9308f914ac77fbe45655445c05ebdb1c6116dd04900e85502864724b456c2a8bb920a51a937fafbb5945901300000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000863e09fd1bca2e4b9270129d491cd2c7fb44379e615c7503ad1775f26ceb2f8621e1127b3ec0aec9861ac39e2d2343214025c96602ef72fd751bcf9ceb9b81e66c04960b83e8a660746d45419059840a7d6699fb87374c6a10b157b69a7a6fdb4f74ec7ce31d220be36812dded87ddae3d8164ac0a1f38ad7acada82f94863bed61bfcba6cb2ed764e13e3b1d52e71d73f5e9f7cff1bc9f8e5adb25bffde460c4e79ccf41ee40356885698e4f6728b10f8f794c3621aa706059f5cc89902d621906a20714488636546bb533943aab71dad590c8de1ba09b63821ffe8102c1045e6aac3368d8c1ec66f352ef29438b9fc1484b41b9ad6d052b609fbbf1423656df2fc6a2ce4ef1f9d89eb3496aefe5c5c7e02bf3463f860349fe965f718a39339fb96dbd1574e6e44cba37ec12dab57a56aeae21bbc2b0b1ea2392807219bb8f1716ddf210eb394913479603a3d5bc17e093eb4617d3b1796e7f412a0f1056e7654f11ed54071b626f83da585af4e0d907eb1f605893c4ec1dd5269f0acb037c24f18a7f908089f79e477a9c9decf74ca352547a83cd6d4f31d7904d444fbf205c379896d42a04c0067e126aec6fba34e5de1b283ee676e6dc595fcb2d18998d20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2723f86db232a8a8310db73e1c97e60f17792abac9852a88052b1f30c9b69746c0967fdfa74a5c30132c71167a2787cc70eba20bd386574f404703699ae75bde14c4445a0cc946bd32742bd3a03cc715ae16b99bfa4dae31d39bd1baac4556c8f9fb5a9ca042c6c42adb44380386e1281704dd7a9a65de2752e4efe1842ee631a8efbe1f14b65f2bbeb19e822b2d979c52f9228f118592f4b9719ccf0f2184f523ccd357d10f521181222dae3d667312bb9a23fab04825f1394460c1da4a31e1684e5d5e87b424a2251b51fbcb62ceb8dffcbc730e07d538da5763f0131737b6641778b90ef99e4206c75e167aa711c2c350bd52aa2844a5ec03e8c6a04d580f2d921256fa8fb08dccf99183d3b28f60504f3b49477103b1dbebb76d6d65df3086f5a16877be70d3f2edbe105555ac5bc98093a428b34509ccab4b78f0aff7878727de559a129bb046be9d786fb9a0871319fc0d867617a6a7abb3121267cf501f2b0886aa16cefb18bb9a0e8a9794bb997141393f827638b6f2b35ba41cdad213d3f0f489bd51e88b59d2b0e9c68b5e450ddc938b3f7710a0a8865b69706d970e7476a651e14c8ad9440fe99b3c874b6b9b8a349b0cc3b25eadfbf3ba870b60000022800000224000002200bd8fd595665a775606737b8e8669cb3f42fb867b548d69a5753ece4d25781550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005b6ea2344a5badc678f296a00b2cae93b5d9bf123ca2d97a820d45741b6577605c105b90adb23ff8af785da167bf4348f12d012580ec5923461369523c0614f7c3f39d45fd56e2fd8b3149bed58a475a1aed17f3d91b15ad6ab33c42fea60c1f72923522ea77d20812645ee89219d61acee47d0cb880cf56fe3c3560c9d9a35a157f1beb56cb67e130cf6e84d151b0dca749cc56738828b48190a64bde1f99ee155654e80fb9f21d453918431d439a1c084c0efc1f8cd69cc91b96d471203a129f936368e0d7e0838090318069a34dd613ccc3b3b083739f4454da4706b1b34808242cb8a47550ae192cc2c74e8fac0138a6c0b73a2cf8cf8f7a1bdff490d4a207cd6898056ab82910c75679dd365360590449ffefbe0611ce5b38c2b8d6187bbaa230098fdd489aa9aad132efd99dc7fe4043390d7b4693d659df8b3d1b405148a734d51fa6603658cb81e6503dcc89f172bb6a7fe94395abd01e44b4792c232a36368ef24d8d236ba601764c4a55270ccb2e9017c9282db07662d7fde558145c5ce6be514afcb5b8f5da1efb6ecb1931a7bddd65b14a090de69e8e9e78bbe731dd735cb2eef6d0acd93bb056b310816fb309ca4f9113f66ff0aae8a2f00ed000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001001f57887a1af574f0e2edb8008e37688c0bbeb15bb66fbde629981c864ab24502218f41670758f731361ecbe80e84e4ca45161cc328834a3e7630446227fc1253277acefff71b7268ed67da6c5dde7453b8b6d01f619a9be9783651761f2432500000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a82e9e60d14461313e91487c4b35fc7aa4961fa61e4a11d4fb139d20cbaea8adcca6e0ea273936892ee6ea630f386fa1304a53308da7301a43b9b9269e842a23d5e0111bf60529c16a3404635260a6e0ffa7dcc6e4e57f22cf2d9f5d7254a10882c69ab48192d87b3ae569af32d11932806c5090299e52ca1bfbee7ad580496b8fa3298537bf75e6c8ef3428e2e49e185a8627ba1eabb5062c7175c0fb0369f6c743e8a903d77c7c4198398c0f1539efe33348532435fb6ae21f11c8ae47b4003a4eab6b4936749e29b29ba7e9600e5a88b024cc1be3cbf03084c28a9b6d4488dc56dd9bb3f596cdca53a8d39aff0bfb5036fe86a4666bed9111832e4205f13e248be5b04e4906a844dd64590e5d62161281ac1c4368055215885321be23560c5331aa3643f44ff35a626811c662a976b0095e22271c25251a4c3ca43cf7c1e465b564e06e5eec1b5bf72a35066d5baed6ad6e66fa88b51c15bafcc1159789bda6b004cf832c79daf1a0f1029b999e163c853f16e45e91562b36e03abcedb8e8dd2c01f09c57e0fa3318d12fa829a85bfcc9e196cec949c54ba2106473537429863c373dc3b859383d7e46ff56e2f72b44553103c28d05fd29f13a37ed38bbd00000228000002240000022030550e70197a86233991474ac20966ff69528a6b1f3a3f6645aaedefb6bb0b6d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015a172c3fb575da8d2b63a9aea4fbb0339f3029552d42d52db2721b0cc4c729853060b9709032ad247d3553dba7d6bc7dfeb283ae4704ad752d13ee472d275a292d7526650ac4f957f522f48d6bde32871c970064f746ad6e46a26b8c974765481cf6dc5b9dbaa3fe10491eec0f3f01fb812f9f37a6940f05e3876017d30a732e1efdbdbf4e5eb47cf94672b2d66ea20d69ca8cac9361c4bb51805f1d47ac07c4e6b11085c3533b41978abc64d31e96799c872df7c245f3f572d9c5e8e86febd073bf1dfdb2ed244db5e6a69b2793b1f20df9c00b4bcf8184d6a1d064c8b9200fa485de2bd18b0aee7d51eceb34a49fbf5437ec2a0ac72e8f96d84a3fa422f68fff041e922014a991b67d11fdca2fd58ccc4155542ee9ff9a93829b183fb9eea29517c6896193b83e82863e884bf8ecfbaea689237ebda7bedfcabbc6b49f95419e62b84d4618cf77aedddb7c7e861f4bb0f3880eb2aaae240f8149fc5e6fdfc8b0415db22917173c13fa052250b9c7627df88371e1dfa5e976c0f05f1e1946e6f7ca944d7948ed4dda68262236e6791633fd50958c13d6121a1a35546a8cb7f0f6a0f629fc0e92c3db7354dcc8781fdc767db2aef3ca63fd88199b1d51dbab000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00211d5efd8c308eab5638e5f07d6ba34ab607ae8a0f9bb235b0f6ce42c32271ac8106b945cd82e0044503945c242fb8e985b947ff0813d6f4a68d3658dd703c4770224c3e7a4d1de651dfb2c0567121fbbd9d4d426b82dec7a3f94ebb8d36aec310221193365eca59796e1b608eb2c574cefdec4a63d0ce4bf1343b41c92f297f04000000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001848f79b5a4d5c200898ed0f8acef8ff72e804299ae4189aa3193af12ecb3567b47c208d59639a7b6fb2b44e1d6a16647253f34032d8c753d9bbd8e1e74c3d939521e55b288460fbede9660a71dc5941e3de079196441a07103980a6026ca13a979aaa054c846511285f8ff3986190b385c72e9e410cb8179c782603d5e2ed07ca8a18c7a17df99f245e2544b89eb119c4dcc807bd78103a3a01a0b31a77b514b494446524cef56a4dfc70f06328437549eedf46689627a411ccff4724321c5c4f5df68afd5be370b10494b4ccff2b07143963e8559afeacdf108b1ebfc6be5c7fd46c6542a57383e0de2c0dd75f687b0c8dad95621efc7a472b77ce9454fc1a2b9a52fdff6b5d7e5e46cad2068535346121c91169c31dc31d5cd8b065ec7e977c558cfa8398b64f58ff96732dc5850c48b80459485fb61b7a1e7ad61f50ca035a8b2eb4d3317a694bbcd3fc5db7e8aa9b37a9a889d16d537a8e1fc8539d3c1d7d1fd0a892ddc08bbe2e1b650da4b042d91a16b05565ef0d1d1a17ed2b43cbf7d571d233cfec232a20cb7f814a7a38d1832d2aa544d1418a98302d44cb0b800085a4e3654122d1e099b3e392c6a876807f761c8a8dc53834443f5dd709e86c1e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008bb9c921df64b8bb9d70098bad8386ec6d3c9a54ff7e65869388ad9f1ae2efe4d5015687e24759f864774f3506a0376cfaa6c4f483fee5c22f2e54010378ff72e5210557c1807c85313aeadad93b2df56aada25a75a77d0c27c703c95c2de18188ac4d5671955b09c6a3fe5e318bf21408ed37f9db7131072adcbd3193deb036f890b106a7e1b2bbbc932735ad5f2d103c740e444842b8a758ed963ebb19c4b2c64cd72ba5fda470d5572e2021f65a24cf51c537f2987f5528463014bfb9b0b17f357f82ede97d89ebef0f9ffaf0e0fe72572f2cc1870a788efb47841afd231166bc993222a0c6bc505fce1af419e4a8c4b8f14888364a115dfa827c4c33a009bc80445f28e93ad3d9916b762d023a6462c56928a5bc61f93916e0739cf6efa604fc1f642d810ffe9357fc113bd346b0cc2cf420016d9c8995d766f5922ff90048877a79f97e69a4d00f67349c88d2d573c0327b43dcb0ec7bde5982d49b8191e397f17d42ebf1deb53a08790d12bee75b5b0b906599de75847bbc89f0b192b850070d3d0052561b0277096f1c65ee01415baf06ba68b47c9f25a80a7b5fc9f3b1f528631ed49bab06f692ff61fbd48b9de8cac8e4ef6324e651dcf58592af600000228000002240000022010508d25003dfd22b3d109af4dbf2927e34f4dc499623fb07560a3f2b8c2ab8f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adb719b45088573ac6ce848eeddc87cb530f890c51e8a74be96c8bee8d0a7abe80b0a914bf1db95f6c9be252d24f2624d43919f37651e7e6f58d58668db6f2620950ae8a022858d85eba1bf7c56803c09a7db40bb526ccda1a94e76ad8074e9e4af1984dc7d8e26130e92462ac6550eb8dee7ff4f23bfbf3a179f53b40e365db60605f4e6b2077c4eb696f7f64559dad4e664b2f363535e21c5146e779e5eaeb40940e79c48d3721f43d33c7fa3d22dc6cb0b9340e890d5fae34ca1e8efd1c662aecb2ee9fcf9ee0a540c6164c7f3c4a5b029d31898153b33753b918e6d75468b497acc988ef1685b35f656f4c961032383b14b592a379a2706e4b55180989a1dfc7a7aa28d586ff0811dfe4b41492a1c8f362ce6f5bcd293a43cc18933b2a4eb676d5990e71b2985c1ccd0ab3a4d49f958fc2c1bf88cabf3b5dcdefb5e52b2a49b019b6d7b35d519bcc6808b0f5c9524c26215948901f3c05746366bbeb3dd2d5aeeb3ed2bdee023cfa37f39ba551820023536f043db2d199ce8ee9ba168305a7f4283cc5992e5708ff83cdb00395584b60667fdd0500cabab4e6caa6ec8ef8f411fe1e002f8be82b23c9cbacd11dd736b0916d2afe1c784b07a9a65fffcfe7000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400117af90a659b161e37adbae13d8a5ee4e6046f7001c5235105ccba1ca0494a8bc02263cff2591ed0eb8e3995558cc78221bcd7b82b25531d99e2341021a4d14732327985420c8996c03c800663a73d9668e437fc366c78aef0262fa1af5fbfc7ee00000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e2d84c6727462db0d86ab4c89d2ebefe4a18219df6017963915825bf9313f976d25a0886fbf68946ef5ac7cb4c292fb52587bfff7efc55bf3554bf2077589cc7811605821be421ca28bcc8646d55fa3e0eab845ed0829e377e2214cddd166439bc7bef65e60f4d325b23988f313a9242f54d03bbcf14df83ff93cf03abfd7af1f248a7ba40e0a191cc1a527ea4f497bba9f381de9d9b0047870e213b6f637e508001ed2c63e4e0bcb03e337bb4c8c3c508e85f67350f7c5d7e0526339b09daf1e00e051294820b96e61fca92c3e9145cb54faa52369603aae6a52c83f3bd627adb6dc93dd4810951ad15cd7308e565112d0ce1ec7fc73fc78976cef984232359f09d0727ed76870fba64df33681f06162ab3eb0f10d711256f1451a756d86eaca55b0733f27e647376ffef79aa2716afab7484009f3084c52c74930b1fc750e667a82c3129654d71971ee9a2b57aaba5ae76c95c84b047397bddbabe72cd8db04906b663cce336c627964c5a16d9cd0dc5ab4127ec6367750ad74d0d4337ed7eb791d292490dfc2c3f9d68bf7ed4c0af285eeb89ce9400b8641923dd7588fa957243039f279286b16a0e66d64d3d2c405cae86a0f86a052e8bb3b107baada0a0000022800000224000002201c14941b710a2f18edd20ab9bbc5dff1f5443110d886589e77d548cc67a7b27b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae8277c4a83cb373496385568fd4e7d5658a5d07226b3a6d8b0ad81df4c3464724f910ea7c9ed167179f96d2fa71a82d18c4c09274dbfa658396a52bee153639874a03c11726d01d20a23887d7811e00e0ebf0b8ce4c18af478cf61050ed9d6ad49136a0f58205e4bb53e1dec62f9308d7053fc5f07b7e0a6031d6686e9f49f63d01a3a91dc463d15173860a98f4adfc8b59c409ef85ba3c02814f0925b8c8595af4f36345c2c21bdbe511e484c21aad0a426a7375764a3b2498f5e125454acf369f1a258249fa2efa0030c8d82e31bf36f1a0c288a0a476ddb65779987f6053c14cfa79a2038d59cc6041afe1daa86008d535303a3d3a6fa2b955d58300eff6f09f1d761c861eb9040b55c4af557fddcfdbddce026f2b614a17f20659771787cb1b08e16386a23bd6dda9d360f8fc1f65119ede1f753dadd4ff6fbf505507466c7ad5179d4e921d84641169b7dcf09652a47bd6ca71331c7b1858800cb5e9bf2b37df493fe8fd779848f91b57b5b360236e07e8473c8f39a2e1b9ad0c77983ee3825831dd2e478007eaaee8f796c627209d6ba319e523af824c794ba9f9e8c7bef43ba9e83576f7c1398fa0c5b8f6ccc33646bcb129a8df3b05d712af767c91000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00220264a23f57179dcbdfaef82f7c1dc36a8f92b9fe041342ea43154cef0a03aa92b7e71a9d7e4a324fc97f9240407f2e8cd62681e60798ecaefa8655bce64a30002290c8a03a5223bd3c6aa7baf4fc5c35e0258b750cfa02a1ab32b332aa9878152169e461e400b6b617c2896eae847c8f237524d5fbf84dc8546627467163049d500000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004c8eba12bcb20b785ef1ac2e85677f070b6dc7c878d3b038cfaa304b6b211ec9bc24298cc2dbb34e26ea2d88676ba3ee6828d1df7cb183bd2103cddd47d95b84161d55875da51cf691d6101cfe24d6bf3c13276fe1f4c37e3fc74a9160ed0f36cc36b18025dbb0b0a4838daaad061c2d2ce99b873ce898de5a959c45ce76f7918d5ee1f5fc2afff50a3adba9e1d53e30db3d77fa8a05e990fa2ec796310b0e8a987116a4c81ad48020f960bafd654375d25f05a5a61e895c3e482d2044402e2279dcc7fe712b79f114dcdd4599e89ebe3b7ee84ffef3c120d3fd6355902ef07ed576feb5f588a734ee71344ebf2b2f60c1688158712a30e5a759092a10c29d94df1b9001f42c44b0c02fe78f40b5cafed441c16da0fdfcd8ffe073556835492897af7558c9979fd42e85b4e4adb796e8636c52863c1b1d78b2234e7d417db114500176a9d668a9c3a396421e537127cf2fda883a7f5eb539e25336b00c9c811b0ba2c517abe08bccf5aa0e39bc08269427244880e80004d33d682e6e46c85982d081060815ec390e628bcfaf5d11f20837ac6842d808bc114e33fba85cb663412a2fe8bc4a5250a879b2982e4d801448dd01f098b9de02ff2d83e4697b0f90f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c1a3b1e0fec29b212b00bdfc2a754f6b51a3da6e1cb7f5bc966359632ec3e308513359a0c40eec0c525e5c56308fd47335fd6f5cd506f3a2d6961e6a033c266555bb7d587ce103d70a1de8587c4b24c03edf0a5933f3e4c38e05ad33458d7b94c28c3ef9180a1353e04832d5ae34fe57e36c17aa6121bf16678d485e329ed789c6aac0c4c40320c2f1cf582b9c78ab659924fe57116dfa3cfc5033ab209f77fa8f3a8dbc29c763b26bff45344aa3556cd9af9ebb68199040cfde476a6801f408f128a9548a41610522f531b24ee8ef28b1158942168e3d549e6f180fc9875637e005f0111dee8fa56943c88a2c513afea34a08aadf4a1bdeb2d70b8650023f0f60eb53dd2e711d7e0b0594557c0b97444144020260811b71bc70d8ec7809f944618bceb4d0a39fba8a139d58f8cc971d94147dc04ce768358c26ef1a940d8c50fb77b6a3651b6ccd63fe8e98d0d71cb4084b2f54b433498dd47dc05c46a2fe726c23e6262d5761fee195e1a71062d48100531b838b5d79113dbc5a3ccbadc790ab9bc8f376546219cbbd6c7ee95b257d528e562ab14ea6fbcdc2584293107caf96ecc7cf59919a70c1d073c14ba2110cd72dc4f95ecd25ddecad8717210220c0000022800000224000002201e773b0a2c4ce11b5b6d7190692c9bb684fafa34db192f985a0928a58c1f7f58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ab339e05b375400c38a33529d62e211d32c5fa6f3ddc4037385fabf014b956e2d1909b2df99e0207eaf9f960c4783edf3858de6ad5e460762dfd30c13a0506a9b5143dd29e615e7ef55c2aef6355bf887b85d90b22a7e0335ccc7a9fd7b288302096f1954bdfb4c5cd61774456d3814c638a03c002c697150c82be9a2fdbdccd1894d8686b9f2ce4e4963ce159b195277e56760b588a7a00823f90ccaaf072085badde780c2907f9cb12f5fb1c1ec7f3fc9ac418c811f446c0f8ee6d3d817e4cbb173100e6853f0ab858504144788fbc9d500b1e2a2d03641daf9c8a7ad2e970370ff26220bd8e793d05128e22c9561a5c09277f0c606c20dc61533d04ed56e9d44f19d7cd96655b4d156b71a7be3d5605973e70df3687d001391a1caf41b9494bc27553e2b328f1b7461ab3e0a1cecaa755be0dabc91975f491456bfb0525dfbfe14d7ff0fc3d16c49dab37d20c672caa54d981b8c1c9255c1541ec9824cf303f637ad42c62413d5a8952c9baf5920782d5634a2932777683d067a50dfe0a395b84e1f8b31bcaeccf607d8b8c594a60c35dfb5a102a8a6cddda8923a08fccadd6effd27825ede9e38ff95ec530ab77c21737ae825627983c5f11c90725a839000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400103b14a88e64dd4256ffc7ce62b93f33d3494b3ed5710b0dfbbeaeea7eac2a604022b7c99b4f06c613be5d8232512d119bc8717b381aa3eaa3e5671882dfa0fae4521045ce29dbc84d37d48bdba2fe0cb498aef3f0619ccb24bac576c3f8fc51a63000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000844458aae871828a50a0a172d02f5c2713e4c4a954620e5860b707504a3b536c4dbb48c774c32481dcc17d2ec6d7f88c74323d0f21eb8622b8d646915abb5b9c0709d6b5e7392ae0f8f2be94aeb855b6abdbccec6afa702410813aec2702360dbb96825fb1155d85b81c76c1d56f56ad631ced29e4c86a8ca2b66c97c83cdf5c9fb70c7c50b22fa6319edf3b750f100520a885116ba83f2f6d5ebd05560800c86a432c19d3f0d8c4b8087b966def6923e95c5893d01461a934c871cf7ab195e4d577e433fda7997025595d1d0e7bea70658adcf9de6e14fa4d01fd93fdd1e161e0b0305c295fb7f211985f05842eba965ee924f8f98c1698548d1d7f2c71e9ad0f6accf16f0504141ab886b9aa84f37547bed2d2e1153a58042bd444621f0beda3526036c16c34e2c4451fa772fef9655d15ebdd65dde890f98cfeda8e357ad0bf45d2ce5e55ff370ddc1bc3f313478d586d8f6d6e408d2a1936a6f0ae76b225428b0578e0b01aae2d40e62596ec9313c6f59103109de35479097674145a5d664e7a5eaf30dca91d29f52442c6d93f994bb6ff8654f585cb1024d6544162009ff0d8ae21a04db943e4b16805463de0e386b940669c84f836aacb2d321b467deb00000228000002240000022003357d4a1dd6ebe0a9c64179ce1d51e5bdee7bbe44ffcdd051f170cbb93443fb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082aa066525700bf78f36aeed61e12e9a29d34c41110bcce5f6365156fb4aeecc04198d4074ba01025e4e863b3af8f9cbf7e8a538702ea3085ec69777037abf48dc54e68f3c67db58307eaf3fc79ba26e91ed5cd6bc22f5516b3362bddd59f514e9e219588a8faaf7b3be4d615e09e99473f4288ba7698197e57416f641478796e16f8fb43861e8a2a0bd7cf094108a8b7459d323a530c30d0121195fe3fac57526328c1f0fd678294be336f2b847bc605f415734f2a5bf964adeb0f3ffc26ac1f39d9100345d8c10554c16978af447907d7ebdd3cb6b9956bd46ad5601f130751b88c8ffce836a6007b6bc47266c13b3d1f480c9e72ea92d187903ba321e2755a2fddbf6330125ded99f6bc2db408eb7acffa4f154762edf94a8fdb97b20db3e31b44d66fb22ea22592686b0917dcb46aa5ebce4454d594fd8f7ba1dfcfd882f2f8c0f9fd5e0744b2a08d1f73cfb358ca55059076e7578991abb00f51b495c0264216d5d194d9cfde2e69ec89d58bff9b51d3665c8726e20170b224535a8c174ddb62f74194af2136b3dbe83b703decf2401ebfee460c723096b1e7d3f40681a3306477f3d956460038e7bba9fbf992b67c18c6501e816b91fbf3de5a5fa1be5000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010757f383bd1776d1f69f49b320d4c02a3143024a32e032435c823307958c759f022c532c7e011f5f55c624937d9c307b03a717d6f1127a87c8140a723f7546f210237e727cd34c7f738d70e14ed06871bb6e25312c34a6858030c3e9a7452d4fea0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f75751fb69be4a146eb4bdafc7154660bb95570addd37cb7c19a084753c8af0d9f42efc9e6202a026235dd91a9eebea9bd19921c5adf0439df46ada80450f10dc27dd56bd90c0d65237d92dc606ca65d75dced4ff18e24451e7eca621e596abbc54171053c9ddd1a9b6de14590bffad568713ddc24c16d5a103288c2e792039cefe25207bab8dd89613406f6b601481fa1715bb4b1f9cfc4c9101f1aa8627e4b445c095d3aa07c85a620295f82966c7bb32f855df56fd05afe2cc44b97b04949e65d6e6c6928dbdaae2ac48fd1297df71946a0ad1ce482945e342ef792eddf37c271ddaeb3c72bedf370a8ff09146f63e001c4b208b0a996fcb870c4b985728246ac54311e66df3df6dece4c9781a169262571a3ff1c6b8acc47f0ea5737cdacd9415c6f394cee42912184d92a9f8815957827f7b3be8ccce7a485442b9898fb7f6639d16c45e4dce4b68215e30e19755d389995fc62d1f8d0d96b1dd65426e4817a5c8ad0913553dca450e5d0f71c6bebd78ad279b58c3e36d8bc50b47a02f12886a584cbe1c52464738ac840a0bdc6ab230c997131370109ff1d50596df8e3fd7a3e115dd96862c7c22c292399b8f8cbbb4cb4466512106e621b0e4898a0b0000022800000224000002201a096c3c956fd8603c2edded29b2322a536ea7639a5d33b414e56d5d006ee0e50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015c85d498ae4a5672a05632aafecadfc77222156d07d5d3481cb942a29b2d929e78885729e83421218cec28c65a40e69c64e90be2c9d82b963cb7c10a681b2b941c8f4f9a829bcf78d8769eaf7fc092107a4cc49a7c629269b96a64cb3d0298544136c9533d740151d98912b49b57b1504157c65949a7bd078c2e68a6bd33b741a06d6f0a776e1438b48a285c587d4b490eb533474f5c226bc5d1d5ce59b2aa5b49491638295f47a405dd03fb3216c3408097ba84a8254c2c60ea334b420fbabd97743b7f4ccd161b9f61b320ae71214c363ca044ca5da155dbf615d3d793b7d8d954c32b37c1459a8827c78ccb62be20c94a23d83dcf49c82349a3e1fcf63f9155795257f24cff7a530c880bfd8c8defde7991cccab6fcd239df2e02df87672a284e489703c6e6e16ad2bc37c53039d0e6e7ee22ab4e466c79549fc5e9612dcb066b6ab2ed015fe0237db6f056176fae5198d17867a960b2fde35809427124aabea75ecbcbe6ed1b45825b73cc84f9c162bc0321cd3bfc820b13d396f501b7fe1942f93a8501e69b06ebca799b9ec9efcfe9352d861d6d04f6bf1cd232e82e790a8402fb6786e37de24879952553280d0ee6bb4e77b200f2be7d876a4e8f021000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0022a2619c3e7fb3568915c39624d440ee33063304f3ea491e46e31d379e865e1762f15c1078e27bb75f36e2de87122f217b8ddf203f90202da9a5c455e22ec0d8e022cf019441383faada65eaa0dad5c27b3fcf379bf768d7ba26b94b48e6a67ab8717248fd70e54c3ee5df7feeb554516362d4807bf0b15439ea43e5a73a826411100000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061f4ec9ec432b25ea9e84cbe6e326bf726eb720af24ed33c8c758fff5e8cdeb8f37423ccd1a9650cfeff573e196dc99a6848f03955351118e6c921717cc3c59385c5ebad81f97c924e6f68d5bcfc939647f59370e0b6078ce09e3320e9680a4c4adb514d27a1082524b6891893f7ed237e7490d01773a6ce1c7f43fe0c9f1224a11d7cd00fbc054e3097a4b866bf5a012d91efc8edd4b5b34e8f9c4dc940b30935ad4e0bef7f7e55964061b59666c110b69df06d981fd0e3121f62bb53ccc9264631c7fc6f61b0670b25f5d81bb9479adbac281a9f3b35b75a3c40adb40d339a22bba2f76e3fd1ce0af4158bff40ae43af862b281b949b31588ff1ddb1e9b8aad1463b290773f87f33f214b26ab5c3de8651b3fa313f3c2c67c5b9bc0610fee0b7c1fca140584279007a411ae8b8de74f734c648208c23034865051d83c68b5b239c08c42abd4e3972c99830737250e03d16bde2ad1996c866503783c7ea62d52842fce77239da564bc0c0a245b3d533bfcce7d9dbfcfb0a224cc4680c678eaa8f4daaa920d9270b7ae3a0a7a6b3c90a6b94cf64511cf61fa1b302abfaa2f4e42b2802c0ec5f583b79a1bd68c01c3b14adbb63725a5c341200a3ccb6e1097f200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001855620a3cfa40851213a2d78b68403fb5bdda5bef792c3e8d35ec3c3bcc21e97a0948494a3842e12fecbd9472ebddbf5256c068d0b3628ca2c5340e1fd3b5da6b8ec84f55e44870ce79eb8b81bd86797d4393af5af20dcd32f86533e9b155bb4e15cdec7a266b12f996672bb469f99dbda4a4f3cd41c289f5dd79fddfad7b273154faf80673d9a056c98b290d335427b4adf46a8b1afac73b2b0c9b9bedc16167f19205ec2b58003243080ef0f9ae6acfa3eaf1e7d44be1341b6bf4b8bd64dd3c10ef5a6c16e308b1a0d1fc6a502fa97ab7021f8a70074599f293e2498a6220a732720e989f414938376f32da3d9da7e004fc42da66050c095a14ba2d5f7b7b9f338f1c1401416b3cb71224966f4e9708cb0d1eb9ff60f7ef8bb78ac5ed3ac093339a1ec01eacb877a065c333cbefdeff376529de06d5e8b477a8f71bb10fa24c315a48f2ef25adf229665d1121606198b811847ac2b7480b7fa2bda61eda2192b04d14cbb0ef059b6eb1f60fb14464ed7f7458fccea3acf0c86194934f18158d74dc0f5ee28cc75f3e49b776b980486bb35c89beeee1efa51b156749d3b25c663f8e86edfaebe3fa4c28868572b84574fb92a6c3a102f07806b7516b1e48090000022800000224000002200964786bb3c6ef15f3c62f3c9dedda0e055f1de332ad3a4300e005fc7edf28c2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009fad2ec6b51a5baa0f4c010c2dbad01f50c1d49f3638de93d519f387c25e7a87a151c52e1a5da11fc1123534d3c572d8c7ff4400d0767d74339e8240750283a33a98c29796e4ab3ad86b8dbcb98b5153ace03f88624e9692a80766d056f8c00e9b8fa42bf6d67629fe2ea005681bccf75793d1f24250415d3575fbf29fc14f04779912371a49ad2bff882e1cc659427153f64d0f638fa3db9020f88b9c978ea206a2da6b550ad6de946929a741dae02be9de347918946763e014c664b2cf1674596e1d14ec1d4b820fad5d20820439235984d2e690c44d1a0ec595f00d84c19c1266785013e34bb1cbf03ddec93dea24ad698928b142e6f3559cfbc74c0adff1c9acfa00b5cae8bde8df8dad75847e8e8f37d8ada2bde9616d034b1875e6a6f1bfc034f1ef9d52f76508a8987c1b477bd38aea5eadf52c6575a15b7d5a89d7b2b72d1e44a98d8709af91629e39aa405c9da95029e20d60a1107aeede501ee3dcf6ba606ce2740961815a73bd39c0246117e54152d6854ea269678730fb37959c4aa431fe32555f3b0cb441285a541ab34d42d4db45dac9c9a0aa58ea4f07e2c7153f17da9468d4765dd1c5b697edf8f558455906d837d571e07129605216bdcf0000000400000000", + "149c938e85d129a71522085a0b25ed7647ba15b9a58658ed37e53e63b9c0fefa0000000c00000000000000000000000000000000000000000000000000000000000000240065acbdc75e1954fa71e2416c951b8cc03925148c37670aaca0da53629b531000089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000c01464b5853be5a2f481bcd261fd0f8a47648ed2cfd47834c042bd04b9e3667a7c0000390014c54b5f2bbeec675badd7e5f9c40ceeb13ae46533643ef0bb7ba7d48a309587000039800825bed0f04513688a20a73113b41d525a804966b3e35ccf0894be7867dd9f59000039800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000070dbda60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad36c400098fca4f64515a8cd575b3b6fd027ed1043f41ab4ee3c27fe8527d2e38d3a4480000000c0000002400000000000000000000000000000000000000000000000000000000000bec47b002048459a4750e0bfa74b5cf1d3c66450ab77b71b9dc2a16e58e15af6bc62deb5e2de5235a8c474fbf952e98fe86974b8de3a9df85ddab1e688a09fee83280e1050200af73a97ca1f03d73d712478647894cab4e53ab41301ebe01d9db62e837193a28a78797cc6ddec322519f73c7410cbd9fd1aecf7402cfb4593f6376306b4d2100000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f3806062ab9cb3967b50049e76f80b7b7bdefffbe7c380f6e63460b33f075334b9ff13901688292228bbe540871a0019e517e050cbc07a29889e92dbc66b83a0a8a1acd7755fb874f0f7e7245c5cd8dc34533bea78f09849f2fb47513919e6b7c328c24e4be9827254669a02b29bcb4a87c155924ad344447f867f747112f0262bf46948805b7e22a991b5a3d1e5e60ed19188559c57eb7ff9d6efaf26f8c1fd45a8e30753bcde258cf42cd34bab5a567fc6cd8c9ace675e373ba76e3a02d5a1905a0eab77d6f871a990cf88c8ed29f7160ec568681a912ab4c506274523223c58e4a2bc36bb0f95dde4f197f2b6f6929abd91864aa4973768c03587506b6886e4fac5bb5b14c2f8b9b448ad63daedf585998f83c84a27850877a33c227e88b25d226dd2b402bb59b49f0dd7af186cae597791e7ae62a58afa1c2bff98da7bb48cc4ca9b7d3e3d4faaa40c39ebfb7d880f19f8452cf34fed6d43fbfba52e4c671090bcd380a5ad0657a5cba1464d4884a3ec7f421e14e0419f0683f10526b66d28d06ffd4faed66f13fc1285c2764386e8369e993daef715271c47f5e9f0a88c29d7ae123f1b123b1f5d8df1852991d87f7989822ee3dbdf81aeb8af095a1a300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d25e520ceb79f9258115f85aee5f052e7ce32ef40b5942d2d3f949cded9b23d1ab14d9465514a3a69ef411e87bd5a3226d12e4b0f6df04269282f94708ec78d7248a7e856b3aeb8f8171529009fbad9084c0fb3445381bdcb0080bc3cffd438283afdb15617e5e08c9441c07d88edf91afb2520f12986a50650bb8c033bc8e08c6955a5dd326777fe46307b9ffee530857d8a51cc5e94f52cd88e8b8ab7dad6801ea0df9bfe2a1f1eaa569585bdc8332d799f05f540fdce5959a145933f1e9a02f7e7354e4cb3628336238ed68d04c1d85c860a446278086279492cca2e3d9c635f023a9ee770f9398f2f559eca1d9c2fd1e6e018cec14d81c28be8bec85981dab5724a7c9afc5acc002fd9969b45571e53c60526ed2b208e8b9ff2f78cf119146f3f1c88ce5ec945275d1c3ec455eecf88156493348d9e39774b460fd2b13b098ae87f596cf95f4fcf0c283d85e197deba34176844fc183da49b5eda90424c9d23b117afcccf721d3ef08d46397e1c1964443b41f8ebadbd0ea92d8873f0ece91ce6476cfd7fb53962ae9b5597cbe9c070d067e1a42ba453e8f3fd5ec9f024bfa441da924b7a576e271a48c06f49e2994ff2730a280c43aee1fa67f4032b74000002280000022400000220198e5c7c01c90942356d4277672de6b13d51dcce60c90df8f973179317c0dcd500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000989b9196d030486d842694aba00259092400d48f62487be77e09acb97c26c594deabfaff1960eef4c1e928bd9c35fe70355d047c1430cbe08890cda5a878280104975e1a4856622566cc67bc568f4cae053531509e5c6afc56e0ce218c520f3cf79dc3ef8810fc23cc79b12097e4d9d59961de4f1132e008bd6f444052b19060fa855637ba0cdca77af83e52c1b21d81c058908692e47483480b7f4297f28fa7b6c5f4b3bd21026dc16fb18d7c484a12f78fca01387afce95183c56714a9f40d8dd5e28b68d9f6fcb14a5ca57421067e56ac2b3938c81e4e58f513cc4a568c712f51318211ce867068dbf70c885dae22331588f8ec8d5865c650bceabdc219ffe96189ef0c5f51ed31e3d0db35d9ca32eef8a4cac0381858614427218be9744c89ccbec3cb141e85906992faf4c94c142410ed06039797890fed3005fbd1e4db2d63bc110b447c32419b349859ed4cdd2d3ce473db61069b8fedb281131ecd031c4469f8e8c39cf9ceb6003d54387bc9db6295d1c9a9c317df1c867cd37d2256b58313f6c27e46d2e8c6d10a7a49d50c54243432ec74874611687210c04245fd5d87e618f67ca6a9fde3388d466e8f7e7a6315c36020e53d2e82ac9f36bbe627000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012f1ca0d5cc28914bc26edc41a01a25aa94628854649fa8ff7669aedc00711e7b020623a0e2ce084bfdd2caba0be913e116619dd33b32e5c485b010642f3194e749191ee09edcf375b76bdd29e1d1c815cd83c7f7fd1ff8aa5e174d7e09246e537f00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081264100b0f0bc064cc81353311809d03bc758317008ea985b8f8e643205aba78a55f7dd653ee5aa8b9c398db1bc871e68a8afbb9f57f282329ea926aa591e22086ed9fd0f8fb5038049f7aed7dae458a83ddaf6300ffae329c4586b965e22146dcde381dfd01b3652b6e3faa5c157b3e47eebf1830b842439d34513330f464e14311ee0da63ea757cc3b2e2a793c4515a228fb07046f48405d63f0245a5119d7e481582190a1a6aa081f99380d039ccada94f5da2ca699596b08dd344d01fee49e50423d261c22b2f0f01c364ecf76cf5b63494453055a4e78846a4aeab1f48595edcff0cdf7fad42b613c61ddfce420fe228e0305e82bc3ee110952fb74e1f44cab32102aee8357605509b9fc08448a9253b40315723cb31dd5a052a6e4f688723b000f2b264b28044a62dfe1a6ea837267169cc44eecda98ade4eef35f5d260722afc935a694dd58d389becea3089c9ea80301df629a8460f524eb33d2c947ab7445e7d5035369cc1245b59aa67f3b91514c881c01e8d6b917ad6d917bedcce5cce7391cfb75f935e00687121f6653916627ad8547e86ec3166ad0c0d9f4ae1d69827356ecb7fb748d50f644213cd313fae829892ce170304fd7e0ab0e01e00000228000002240000022005832182def1b3652a6201c0441d4622b3e882b1f4f837df591028fa7b1e6b4200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab89a5568477b4863230608732290e5b402ca02dd229bda519b4902493578bb3d512126fad00e8a54bceae45a7bee0d8ad2e5bd9f5e6051cc2d2240ced57db2eecff928f36d594911df04f968ab8b70f17ae32bf5fc44ff9ec09674c12759a50bd1dd0ff95b154fdeaa8cd1c5da0867add40e0bfab01ff8f53ec46529408d8986fd66048aea961a48b8fc0d0dec1c1afdcc1dc5a4e84530e8a5975069ba8159a68b3d6a5385501db7ab7bd4c476ed891341a4b87a21029143c69e620a309b57d7b996321d75f1abdce034e0c689bd10b54c2635a34b9780efb7c48fca0cd65a1685f1fe3d612e870a1af5f3fff68978a12b617f3a3030c422bd28b59ca797c25e4a85fe769ecd04e86449dcc79b653e84d10ec4ede0249d0c81c981d36516c972702b5585a4e8c97f53d9e7f7c9dd386d7c62c090d1d01ec960e2cf83289beeddda6250eb22dbd1b41d22fb50a9f4bc1b7a8dd34227114306893b06bf8e9ce9adeda18f9db8e0bf5abcd73f91704e2bf0801d016a678b019f313470e8e4b3810fe43e147bd420aff3bf30e0a83d1353fa36cce504e371a33c7ea9d03ddbec490b476e55fb1b8a398aae224ee50cdc8a4d59cf6764131b3287b886d0a87444bf0000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00223580d7f600f9f54537808e6734b47c9f2e1319a47c7eed69f6112c3f24cb59303eda41a404a4d18ce63e27265074a5bb69c1529145ebb1de86c41833109bf3c020723df3df4a82a7befc15f007b4402a496faf467e4583849a0097541766308e20935c3697d64a9a01dd7f4470649a51a89ca1ff37cabba1bd01c9c842511f3e100000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089233cbced29b5ceaa6ba8098ac88f9d44d010399fbb36b83cb82a08a6916f2d1c80a9630fd8a7149ec0e9ed2842cfe6465b1591c587a29e15dbce5bb898c5f33a69c2f6287b79d2c86bbbb66912999d377768af5871472188325c998199b138b8cbab9ca6abe62f5d2eb595e71fb4759d3888a6a640d1f2e87b9089d2eee87e3790e68b1723c99bfc084ba19ee502a6c3e3384d4675cb22c9024372e16890072295648ff69d41f1df22b8cd9c1e78aeffd9693431db9ec4c34b5fe6ad83c92f01169b606229fcc869924970086ef4d0f341df6f3ed6458cfdfeb2b9a3f36b2c8fb367a19b573032ba1988476023b803137b38ce4ac901bc69b0e75b36bc95e8f4b9abc0b957a428fbcf632f2ae53f5b96ca050f26a7a8f3c89f45e45a0c9598106d75f733f75a0338e4ca2ae4a28dfec1feb1ece0d22e2f0b492f6d607120ab19960ea0174433f4fe6e093921bd53fddd96b342051bb0dbd3aa34cb8b501bbe2903e708c252d6670dcf91b16ed5fb1cf734c7dd2f2ee575ca46a3579d70462d2c2eb85551cbae80c4145dbe8326901a63871db6b05d7f05d609a061ea64c029ed34cb284c47796cc9179791dd6fdc6ac6ffed20238637c9b1747ccd31104ae00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001914df62dba7fc752c12c8c04d22ee670687d4c36be2da38285ecd8935fa3bf1b902d5c017f81568cc8bfd7f47e5ba6247704743280e2305dff695ea0df6b783c804b872cb8bd7d3db7944c0c4161668a8d6243be3392d99fd6e75d4717dfffe0b8843ea39f5c22769db4e95dfd9241112cb31f5eab80b0effd66a3ae297e2a4f901101f93cb02e6700499542271aa1160cd04e7cf3c9039cb2802559a9d2f0e1474c0421790f92b38beb68f506ebad89bc3be26d0bc259780ecf76ae99f5669c81d35ca4f583ab93562f95b58dd1741b5f3ea828a450be5f7f7a7f7eabca829bcd8b2f25b3de3a07ef42778b4992e91d851fa019e23a03396340f25346a2b6f17d72fb292faf61def610636ef3fac816c2851f373d53ecde919981dc75f16b623b96f1a6d5b0aa6b3c807a8e6e16046537b8234e8db247e5c64eedd8ada4373d1383dd17cc3dced1863972bc435a94bedbddbca1f6590e6256859e2a4490385d1a15a0f9d52c8e0728f2a9884dc71d230ea9cbfec89697f6c5e1459a444ca3a3f5af0ad163ee9da7bfd43e7b58c08f6da2bf1402afac03e7aaec994bc00ec735ad244be2caceb815dd9460aadf7fc34900caeed5f1602520c0794c8e998d6c60000022800000224000002202fdc052144bf4f5108d408f9fbdeb2b18719737de5f8d7c6f4fbf4af10950a680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092dcdcc97b29dea567a761de53baf74b5175e71e3d43f8221f39659be54d6ef710af2c0dfa53bf276daeddb4c8ce7fa9ce3abb189225ff86984e76bd4ba0d054b275b251bdc8cf75a24944ed3a33708cd06b75fa5800521a2c1c7bcaaed0e4eee718b2ec72dfdcf52c7497cfbaad02b49ae23919d8c3b5c2d1bd5cb43f9f6be1374de95f024a6405d73f2f585ad4e252eb99acfa26be7aa7dc98e71c3493dc49b7181e8cccb6f7bf834495e783f8e6c1550cfd5f4a0e991ae57937895be4dbbd9778eeda8b2f2fba701b2ada77810c438b93181f1eaf48ccadd2fb3df7797f2aa776748c963fb2a891ba4b6eb5a81790f0174f1cc930f7c4b34f51d8893364eba3e9c2fc279bdf54b3b620394c95a2cd0d7acf0d91f9240bad638adc30dd1b8393cc32a76a4bc0697f41b7171e143e9adfb71b85b2199647a7221004108f72dc0a99caa4b97b30a2d2185a3c30b550774fe27efdda6aaceeab3821a3c55e64adc1b593787ba6ab63aa57e84be8d590310a5902ab95256a9c410119f9a3ac24b7fb3e7a28cd459ca9daf2ab0580fadb2d9a1843d1fe092699f441f12de2d2ac63f7b8603840bbe1cd466855792f283b9bbc71b5234f671c3d1fce316296aa1d32000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400111f0f16c222c5da2b875ac3ef61f502868fed9c8cca3239dbbda32459530c0f80208515f34fc790b177c37d5d9152980928dfb8f555efb53dc986bdb3824bc992e104cb2e12c6435112d3355dcf4de87ef58eb88691703e0a9457ec504a95479f40000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f99cc9e97e68add1579d4871a32a382b9c52334c026bac1d72cfb11a2a612a678647a066c4f4d924e1a527f923d647581657ebda0bdccdea57c83183defcf90868e96618b07b6cd6cced5db2d4b3ae7e981524c3bab83583b39e46a039dd085e792763891ac6b3b592872e2fffe930f0e2a01cd0ce33eba0c6e37266ef11519145a6b811d2e7b4f7c684f67d35103e1d8e13d16f24aa33c6a56854c3207f730be489c27166d91be8ce0d67b8eb2099e69431d5711e7c3724066d588816390b7d64766020a4f17398acf55163d2d6e4603835b9dbb3e98a59e2fd913cab9634a5af9a6625ff37fe3ab182d000cd1ed19f4d41b16a4c6034c48fdd4dedcbe829d5a79b6e7b2056aff591f4dcad381f9ff34328c9497ab7224509176c5f9b52c7574b4a547ee03f4cbd0bad0ea51705fe81b459c266780ec3e0709473008bc2f9e89d889bd8fce597de4fecb11a817a1588b5a4b6556859dfdedae114d43d4e5378c82209388b13d163d6e3b77b2558f07b3d323fbcd13006968f71a8b2ac57dcea1f0ea5f69caa27edbff027933553acab229aaaaf3a7f44cf78ff4eedc37b3a025885b185a9baae67057337f5267bb1d1b55d22cabd59585695e7f5467cb17fe0000022800000224000002200149919311596e0d25160916c6ec4f00def8521672a46b94e1d85ee132df058c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d22b450da70af89480fa8f3ee3bd06ab6af2cef78f3abfea982c12e9d0575bd2567b7ecc029a618465dfa1d859da7d0481964789aa758541cce852c28a7bd7391fa3c634a5e333564009a26d1dfc0c502ccdbbd032656babe1d0285028ca62f9474a45e0cace7b8c01686c28742f9063a415a075bd3fbc901b8a26bbd10eef9041e2b0b3ac9b1034cf02c6cbbf8798888adca2dbd3610e10654376370921945315112c8be4aa58900d88e2c8bc824c8e286997b4ef002ee81f0a12f9bdf7bc9ab1b0bc999c1cebc5f17fc43a6594c66c928244625eb87bce560f35c31e4921f063aa924e0324abfd1ca0483ee547c5bd556eb2af0ce428299920dde93dbca1ec6be83aa2769ae59cba0e9ba039df77ecd42742296d04c53f95f297862306cb967a9bb69d182d0b7222e153cfba19dde0f8c7c92a104a35bcf088aa621992fc84837f296fc3876dcb72b0de247cac37db4c521075af69a5803c839124012a10f15dc9d823e0e4fdc945389adb7ba73c1b7179da1b80cbbed972e6efdeabb68d10c4a59153aa917153970019e740848663a18b2c39fe9724dbebdcd839c57e0d33bc5d22d4864d84e8fdc8ca19a2cebc949732de84708af73e254f6e34adb9c5000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012d0fa30cc5700d85209687049b6bf1fb4a3859a42b88020858fc6a05771362af02089e5c1caa5e5c349b619ca320c90021af5c5192ea90b8a106f8ba1483366ee22f194fd233b6ea96fed95440aa4c61d409798bfb55010e168e1c293a96d6ec830000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fad3db5d60a651148823c4cd00ef169455369785042dc208bd07ab846bb48b93a064e383211f3a12af02186899dd52508658071fb727b75344524151d7ecde994544bbb01df02d37fcd909027ca58040a7d852139c70dbf3b8cc708dda20d95ab5d489690661a3700bbf77becd9ca0ec64127ccfc43cf7ba5b3791c9a2145a2e96ca17243254ebe64350ed28ef97aee9abc179581ec292e980d1466d577e957cd49e52dfb922ecf6a68c854af7e9f5223984a64da7620386916176c1ad9ebaa9685a32f83f57006a10b8b693541962f167cfffe3983d8e7ec761948ecbab42377b8c8b8da91959620b14a0459e61f6b94ed8317347560d2391e979e2157bf7ee785d7b3056c527863cc1c7dfbe7cdd11b2feb15bf68ea691b358c57bf667a5b8128af2d6ee2629ec643844ec8d4a1540076162ecfe76c9e1850032e951ebae0f39c209b666fe063aff3c7062630c95cba3bdd026342c62a529d8c29d3bb65d65a9a604a75031dcaccf7fc359c548044735c6ff25395e31bb9c888a2cc0ee639d02ec87aba4b43919883a92d2df8a178753b73f62ad127123640752cca712371bbffe8442daef60cf326bf33f81e450c55cd0590553ee1db46be47882181f1030000022800000224000002200162fcf57e2e33eb11e0d4c78129ae578723e0795fb1c2581fa5a9985c87b5d3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b2deab020f77935bc0c23874540536d1cf00a05ea5583dd26598fc326b23f25031192e648623a4f8f790eb856627b91c2ffd76f553a0119741a1eee0daca3a7b5011c8c43874aa86198736f4f5fd4f08775ed311f6b3ba37fd1d4a17a82a8707909d284648f6c8240f2e13c7d6906d9b4af98eba738ce809abd94f7096204470dedf3a8e5f0c49fa8d2c390a73c46d4ae900f2b486a1155ac63f1375df2617d4e7e5db059bb05cb0d0900ce3b069a29cfeccfd7bebec0655a146c17063d23f827095b528a05504a47c289dff975bfcc481ec0740deffc51d9c4555f7dadb767d73daed2e506141c098373bd5641890a0e9d704eb51745a69ac33e0a4da7d5ffefa72f9e60ab97fe070fc329bd4b00c1667fb545be2e1ae760025e3aaeb7e191c0eef94332352bcc3b8e3e6bbf418c1dc50d3c9f7109c3e5721c0066e80b3cc8df1c406a6c955285ad29145e5d3ece0b6fa3d4fcde1e7bbd3e8c43c2cc1f83628cfbf774a202facb6c3a5de396ee36b1591ecb6cd87f11358e81cb892d973936a324bb700b2e2217a1b91905d427e9b2638748e37ca1aebec0e54daaac2829db4f6918cdbd13c97d4cd53fdaa96cb35cdd2eea64252e1fcf4558f0b6eeb3c4c7000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0021313fe86cbe4f8a1fb2ba2bfaae1556dc7f58a36629b4c807db8c558fd8cd8b02cc8b9074f50112cd52af016be766d5bd7b27b45677cd05e29750a01bf6c5e13020b6a4b86b013ad2bbb2b2484c63a5920765e65309f92d19079b06421c918525a08ad921ffff18c4068ee32ffbac45165e2d68e04e89cf0b4e27cb341d99faaaf00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099667d9a2793c9ff4670e3bf41d7a612e3e835315569f32f050c23720fb75f0f753bf1217bbbce98432ed832d5bff6d97d794b9dfd1d51b9164078253a0c9f2ac25f36bdb9c5046ae85d5362d6ebaec610a74e4c7409796070c17b1aeb992cbc9462d81b622f0eeb8835859cd707987a354a1e6465c918fa9d93abd2a2ac44f7bb9c37e7e54816f8b6628e93040727fdc5a30e3cc6098154aa8df07abf948bfcb3b8f3e647474bb3a875281ac7df9c0f03b2035c5282407d6616d01215797e4a485dd20b18d494cfefee5e00b07307ba8b644c65944792f585929bca1ea230f279a542d2d977e7aa227ed1cbce54e9f156e282fce9dd14cf32cfaa7bccb95dc3a93ca5c4937395d39bdd3408f78a609beeeeab1220c636baaccb01639998e9e91e9bce3f9754350e928294db9a868648634e7909306b04b41842959c716ea1c9275ac587f6a85b081ce41060c8eba92be177c9e0377534d536d5186c932c4cf557244cf51f3414799a22fec58b507bf4a576df8cb82ae7df34be388c0f475a05951cf26095c37d3e1ece2fefdebc18c4878184aac425d6101affbeb5178556723ea996425f66af23c7223bd4e26f8421e35cc6d8825ad1857788c1266d6d2d8a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088b97584551dfb28e557eb21b4c356bee7c993e1607cfb6ce7153831a41155e4faecca6d335f4dc8ed6b26501e6d9da3b6eb0a0528bdb4ada8a0ac156cd7e631ed594a7790434a8a41f4e51a22e01b8362fe50672dac04eb997cc949014eb60ff3b83b58afbb5b9e34e24692e5390b3f7684cddbff28af43c86de3895ff00e876fbf934d077370b98f3ed89b579d6cd74c1215cd2a586ee09bbc31715534114010c55c42dce903f6bb7f7a74d01b6268f8fcd8634e66180a65e23a76bf0d1019efa205479116b192248dafb5da49d2c23f5ca0bd1cdd654209e44d93d19a7360dbad344a0652fac261827b524dfc8ef4d869076a5f56d0eb044802b27bc456da2e81f95b7ef8808e4ecf771232b9236fdc561b0f5bb351ed584aac7c8213422271e5e23c61a7da8362b72055a5cdf08aeaea4b1518fe8d916ea57db85708aa71d63f66799586e32f2603ad969023dea4ad26b0aa47f7dce846562a8e38629fc6dbe477cb50927915bd3e8aba9c9832502d28b395782877e105489dcf7002b1bc1ad592ed540a59ca945a6d60db38da82c87a8c0654ea9ff902ab7013c15e34475e7e852f4cebf665e73b40cf9777c144423c673654004b9d03ac71ef4213e13e000002280000022400000220071d966622d4cbe53456fd67d873e9006f0b62f85f74e38fb4fb9fe8ee2333bb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009147d1a3e58941f84091e99b3ae5bed3016f95b8f87bdf8ecd01327c0859b717be299c9c6528416de5d936c6049e9e4eb82754503d16c82aed93d42351c4eb517fb2f3063ae6f869830f48e43bca2ed88cd713f376a09b56417fe0d69193b0e0c41a2a514637047a6818e1e02a2080fce41015781a037396fdedb5f00fe7bf8af1de73524931160cb468b47792946313814fba72575581d83cc8acc867ecd8531b4b10e8e6b4f04f7f7b3ef889cb4460698d4c9637bae9e52909710386548d5fe77fbb8a8c66a079a8b221227fbf5779fce4ae2680a9f1eadc225ce95c2f3157b9564556812d9328b986359e06be4e0cd5477190a583c88e3b1db40b5ecef34b6391dcd38989a8acb8c201d09bbe349603083d58b39325ea92914fdffa8c9829a5bbf98217b7e71cdad64f46f3cce52ccc6a78867d691af77232d0041291c928d37a20fb253f9a975de997340e69f9adedd627e86f5672d18080ed870b92756c80f3f58197d246bb590af6ea2033a09d33ee9e6666d0cb0486d6d7cdec5d9d6a1a9430e2df110fea9796b36fd68e05adb578f9a093ee1ae941eae74b3fa409813e38ccce22e859ae3e8165d72ffb9d5e121be8fbc090671e091c8a8775e64cb000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001289ca2ce601f05b8c8fb5639ae1f730d9ae6e6e21233f50c01aae4f68522b65a020b9d3623833d64fb2cd84038540a0b1445d8649f575670520de6de323037d227278b7c4dafba3332958100c6e47367ca82a021af14a11f8a49f72c75167bade8000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6b9c61c2e9edc48e9662c3783fd575864a982c2d99f2bafbd333b8b9170e8cdc1614218f515f5a70e778ff184ad3c099f06b384f52524be4c51d13a1f1d53c53fed85dae2d33bb344b0ac83686caa23a67a923569ce7345058a11c9d02b2044bbf2fe55bc55574af86e91a43e4de2c2fa7d306ba72ecbaed9732d98e4084313feadbe48b0b7360d0ce03ce7052c510d2909274ba60b2701a31f41ffe92697198a3a589d8bd8997411623e0a90d98be0c2b8847e594672a7a2bab8159d18a879dc6f652a646e9798ef46e4568c506e1cd0286a3b066b08e639e8074178a0c446992a96938473bf31134ecfca0f84571266486a4c3676d49844b8920b08255c1dd886f219c5cf1f35d59fe2999e8b07bb4d42de19c24c51d5511afce2a3caed366d055d4c3da3ef4e34d87cb60d363329f73eecd5e4f1ec186aa34fda1e0426c39e2fe574eca0f2210742f012465d0db020eb9628090cdf74775227d762e362340e322de50a3a19e6876e4e60d733a54969198430caca27053165262f88391a7339844a20bead47f08ad51018f996e4b1abcf5dec4f4457587a18a0a5b13d8b9fb44fa8c321d018b611b735638eef89569ac69fbb08bbf06fd22fe4924c04d2f00000022800000224000002201ee3bb280eb5008389b85a6cd5c046447e5622bf7aa124869660bb5942c68e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000187ed1024584fd278c848279a6527207c61570131a408ee2b1fbac60d0cafa0bd1cee446f0a498e13cc28d1ba0cfc17206556689d8ee9e6ee92061d81342a13d7e227e85b8aceb18baa1b696a6a3ad657d8509d692b18e71f09ec761ac5739f8584fcfe772499786004f588ad1cf0b4409b32b3bfeb8e23ad5c312508e4cfd9f2dfe2586a721326a81ee2c61a9a8f387636da5d477e204efe23ac278fdda0ba1244c75d43119ed9604b121e68fef444a46487ff461aac1ab0bba12042d2837469dd172a20ef6f6990719695057c10fb5b7110b873d8156c6295abb7b8c634d5ba37f2855404100e886856610894539d81aefffeb033cda2b249b34da5cd8707bfa1e5bf299bf2ee9dd7a9ff779e7f827c19c949386df9fd45b4ad943941c0789e01ab57ae04b942221da03857aac4dbb12111967543032686573710cbd0398af506770c1a34e93add6fc1dce58085650070b259d89a6b959b5f5e4cc82dbc50fdb4ad86b85dc00ac6811d426d85432a664efe03d25ce4919e8a51386e8dcd0ec2f5405d6e1817c389dd109f0f9c121b190b2b110f11401eb816ae0373cf4d61ad1242ce8b01c1b5015d2c3b293dd3efb633f33dfe10db4adb1865f12e31716e4000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00216cb8785bcaf0919fcc30202ebcfc68847a2e3e1bcb975ed66679ed92cd3b2d51e37a263d3886a1456cdf2cb3b2dd020c338c888e06e6dc2618eedcdb8c35dee020ee6a791aa7479059a2c0af893b56a489eea04df894c99269071dd7980fe3f6e2cf4083c0ee2b1e73e26bf9ce85b6103c600d7b0e6c1fe9cb98fbfbbd9f9b69600000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3afafed0e71686bd2421bb0b4b5e923c5849d4c5a68137abb0fcac91523a851520d183bfd6b03e241eeff97d4999b9296a546057a224592a132aca21936153cea346c23ec7d8eb854b6fa6f60e791dfaba8bdae86a610c056a33860e5652a036fb21271c5f24c5c752a9fe1a71d20603bde90e275e24f30505b6f84260e0f1a139db9a22b92e097fc7a345a80d7bb5aaa789f89f7a4c4eef6c1511dfd6a7ea97384c5c94ead01b3c3c61e73cd87f0549d1fd678405bde0e416e93820a0a7beac90e4effeff4b3ab05a4d468e548363d62512ec4dd75f0c659233623ed95609ac3bf28784d896b33014ff8b794b6d45ef74aecef8373df674007833bdd7123d50a3c41502dc1f06ded7349c0e297cbf8bd9326f16b8889a3d2a8f081688fd7632364e8cf1b036794597a193bc293db867289c296b86213038355981185e209739fda73bfae75ac4118c28fc35f53c7194891e514ac002e097dc36625231dbf15b7b57c1ed745bc76b85049f0250073f6bca7074a645b5c22029cb03d9ed0a5350cec311b0730eecd081268b1a83fb1dd2fbbebe46e0b4f7e87989c1cc4f1e990c45f99ab61959bd6d025c30c8f1b2cd4c2aa4a978e46893bc77940fc9018ed9f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b4f8708d0a07bd90c0d5819be72ba0a279e80c98a428c2eaa38d17d3bab54ab599e3fad4ecfa9b41b5ed34a04dfa041be4dda9810e5f6e9b06811eaa5f53ea7f86f9bc53974e50adbf7ad0f1271e5747ed30977f7bcc88be863eb848816c73d6b4f2023f4acd5076feceee122dfdf28a6edd30f6869fe387d7a8896abe927a364a4338425e8b805324b630e8418e9d6961ff9abfe85a05134a1ad02095bd513068b229ac7bf7cd951999af652dcd293b97787b0bc43028d5f305997f913a4a8a3b2d2e222e23b3808c35ab06ed330f0294a78b7947854a506258eda3546762a91f73b6fa0d58dec1889d7d9839d15ff8ab3fe3e28c7f7bcbbf7334d40f126b076c9593015d39c9ec9d083b801996214fcd91fc9ea0ebfc53f4ed9d0c5babfaa879e69cd1489e92450f9cdc93ea502f469e52bb779e7670a97b2b8639a677d3a7ee6cd6cd52e579fa36d4201890a1ea83de9164f7a8fea1e4b1cc1001a6afee429cff93a0cfcfbf33d60980182d3bf76d52b1dec0f6331703ed31f290b5bd8e55850af1c4b72bcb717b3a4715e90df41230a6ea897cae670fa08daa21fc8b1db664675dcfb1e14be8603dc1cb51936a81bbdb3c5d6d5120cd29496416f2c3d0f0000022800000224000002202984930b81b33e43ef928b129741fe115b8bfb512a42038d7c97269c8907355c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d0811f28b59b160c574e58ef4dee6301e44fdebdf9532bd152cf40ef20f36cdb13ec5957bcd888a70b253a1640561da867f89f802b00bd3f08e97a3b4b46433ca3a014e38ba7e3413b40feb72574c532f3cdec94e7284c1509d381398fd429ed319b8100bcaec9624dd220fd7039023127779b7c0127628ca21078b2ced1b7580ae7caa49813bb0dad39022541415cf0d9d870f480c198a71acd52b0ad57548da05c393ab87d7d552bede56fdb66fd733142721019d9c712e73a0951eb3fffb388f3bc7f779633b60f13165d30241b4434422855a78634b148c83465d5c3d014dd280be2a13ba767184387e0e2e2996c78fde9b4292024c4a328fde37aec22d3e26e9385eef3160ee3daa900689531f1c954b8bba1b46e39e70610a4cfbc47d811c37d02fff80cb0d70e27b95502fd3613f67fd4d1a90204209d7296d75467372046e784bcff98d7b9fb6d436dcfa9802cbff3cfd01227539a117d4a8053981f17dd5b9c844d71eebdb610d0ab22333c4e430dc0b5e4e9acc13e40921229e3cb2af0cf140254eef154035f9e2b0ccbcd490270b986b2641edd1647e0356099c94060ca7cd91edd57631c3ed9f7d57617934ad210a7803f503d40731953c9e9a000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020bfdfb895ae3c511db4c7c69ae5196a9654d97a9afb71a246d388ab527e52b812b3e08363b04d2162fe02d748f18ab96fcddb9e2dac975b5035804879633eb90020f8456333754ae3e931e89c23b842f42ddc6aa52e1685adc8006b776badd8aae08328c5ccb873dce3c9a49f9cd370eff73b9b8e37484394225dedda1e380b05f00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075a9cfa619cde449d4a1b324a0dedd8c3dc3d8c2f4ab46224092896fbced98608edb8c814125aa80699dbc3695b0930b7eb015c3ff0384c5488c38d49f1f09bae7568497b5cb57edc9279da9ea50e0a013d8e753e165d5fac6085c298902bb2a236570ffdc2549d0d4e9e5599e01e58de44ae9d08580395f0119055a5e315d8dbaef09066afc7c518d7bd8010b8702bd121a2be7e0e77daa9a0acbbc53ed0236e0f15df7bda2840d7892248a1112af270d9849df72477db306c7a5dbe278f1f93f37095af6ca41a3c33ef49cca65502aa3c6c7d8adf664c6877dccab834b7143ab278e88b1e9e501c6018195fe8dffa24a206260b10f97557edbe0077099e3bc60d1ceef14de169de8fab68ab20118317d9babb141596ceefca6755aa432e1178e8d0d579a7d24ad5b411b98c87de3bec8abcc282d9ff7bfe0a87ba13a5e872b64495e35b6e1414796cfb19d48877dde0764426e3c3bd8cc916341adfbd80b050e0ef890c4e7d080dff416b4261dd8f2708c0c4efe873dd510567a7aeab62b3b7ec441435094f535fe493d4eaa4f08134e213b2e7b742937d5289d70fba8e152f25d0dfb49ee4f8f49691f3fc656c127e4583d6e1e87c2d990a989897cffbf30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000950317d56c421279acdeeaad5e428fb1cfeba79653c1867ffcc47c348f50af8a1f13281a1eb440d1a6c998416709c4e69477db25ccfb2ee643e0e4c8887c2a57f7d50c406c8f5d6b35ed33d476e9ee17cdbdbe40a31b14647a646e731bd2c1105098875cfb10a4baa13ec56187bc965424ad0bdffd1f67138bedd380ff11e82f0b10b8cdd37cc4859835ae9920b312d9086aebfa4cfde0d910550aaa2d0abc15d6a20bc6919bcc616cb1d05b5562ef35b5f01c06ed93a73fa4cb7108ac7bf478843f791129229b9742be55cb3a7e9d3e89c178ff13d6669cfd5d18ebdb03d187a5fe0235030b1a0bc95b58f328a5a15ad1c44077839276043536179b6752dcc8cade03fa55793ff443a60098472ead7318327544a0df00eec42bf61f21cd898b15a84f46a717e6f66f763c8170e82d9c627851f15d072b8c2851e98a306161a24d538bacc5a631fbe504f843fbef1549f4e932508650ad8222258ea5955c450bf55a8a2fae839012c45e0f713a0c5b0fcef92b6c611ebdcc3d677e9bf507373d9b7427b06b380271b67fe5df841977cbbf5e47de927799fe7c076949d5f85874b5c04ea61ad62e4b5fe046ee1579bda1467516d9c34fb6b12485f8ac95d7d9fd00000228000002240000022005bd6b3ae56508eeb14f5ab355e5740b59755b1c65bdd13938f01c1cdc9d90550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d5f6e55b8c390a01f84bdb142d7983480e7ebd742e73742003b0c637a46845e4db7d7dc60083763398cbfb05cda08c475a4be1cdd50de93af4a177d2da64a8587a049969106fc0ce093b5c7ce186970ca598b9cc4c9d5d88ee37d05642b3c5f2dfa272ffde342f8004d2cb2bc482dad556493fbf6229196e44b2a208b466f9332b45748912048ac97ad56d925e49d7c3d1cf70f84b23ed27a0c8b0024a6c0908266a9034af80802de1c23d0c2f9f4a53c996155f58e86ec2824b64f1f3f0ed5c3acf54a772b8f2010dff34fe1acd34fc632599e935eea25a4ad9c9f407aba3d2d2796448f4f6f3649b6767c306a4d387b86b986dd932ff53a7e5b04e25aa30a4a8c89700e09a9718cdbc8a014471c8c7eb5a6b47652bbe9bc8cf3794c5408c636d57e73dff15d51c8415c5e0008ce4c06dde2b78c874b296f12497ff72c43d2360890429ef9307371de2a7b7b3c7a6bb8b37d084eb95c88570c0dcc32c3898265013161787465ce24214fc125ac443e8e4b5e01b050a20958570f650fdfb801b0712f90fa3edd197f7f2b74853f77758ccb305d6b8e6ef04420088a56341f3f43ae333d2db64fdf66cc52b42cfc843953f022ac3a735be0b24ab9f6965bf48000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00226d0f4d0b24e589310df29d4dd4e0623eed4018b31e7cf379d41493e16e93e2d0130d09d325d4bd3988fbbd8e076d8df6db8a8c67cafe32bec2c2a2f623f2356020fd1d5ff045e36be9be29d3836ac833ea2e213ddaa72b3d8f1d76482b23c053a26288bd3a7e7c1bbfb322a332a5c8b2bfe6a58c985f87da6863a153872c7656300000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002918cfe9be31e571b90bf5033dd7901764065d1901648f1681e6ed63eacc908467297f923b4671620b6cec6b1677ee0b31396fbcd42f898b87194d051e63673e05401faf4d73ccea0f466979c14c87b3e146212a6b93794c79431dd77c7518b9e9e565f12e6f65f63dd4bbb4f74b0b2d387bee2f8ac36bf2aad014a96d2cd70c056da22c3bcbb194918aa35063f21fbb958e1ee3f3df7ef9761438c1db8ab6d1febd43177b81be4bd30cd619c5074a922d8d9654210050d0243fd081a2ef5b38abc027eee1d2ef3652cd62010a17b9304eee69aabf18625fb35c93d718f83fe6a2fda285f0d9a55aae399c11c8e47ed97aecd17c6e8388599efe49e816b909e0fb33dd8c058f9da0811a6b38c65b20d9bfdea30f12cf7d5cac58e057ccd13a359dda48880c13899f86c27218491f2d9d0b7205e58a6e30493268bbb5fa17cea0cfdac48ecfe2378694bccb6228291b0b5af24089e7dddaae432534d59b028ae87fe66738eed15f24906b015416f977cc2d239c01d305f1db7a06ff31ecd4099bfa7bcf3915855ea93e115310b4b9b350a9522be3b1e07a2d33a65cac9d0e744cd20a4e774d3ea9d81d7241f777e4a30e0ccc39e244a38595574b3e915375965100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000960fe13f8b337b1ac7093a6557864c45429f4205acc50bb87bef54aea8c0af57e0dc87bfca3f22a451058afa8f2fad6ebb2dbc57c37b39cec9bc85de3ab037355c470e16c3a922bfec9f3d5a900f734c8e155106c54a470a8636f74b74f819f7b5304cc2ea5c4964d603e8e1bc32d373f8b9fa15cb682d860455e97816ca0f2a5aa17e5354de16cf339a4a6abc6a9c72c8b2a6b4b42eaf7f57f70dd6a6e458515067ece1d73ee4457e3ff38cc04011533ac35a648990197dcb19027d8a580443d6af20434ea7b630abeef01a862853f676b33b6cce24ed9ff545decd578cb1da48b9785f113dc055015adedadda31a89d2dbbf6777a3777553ccaa2e1fef215b78010d6ca6fb596144e5678037499015c00716c99ff1871361c042b89898be6899d5a117a46fa7c26f63ce8515e884635e633784f957ceaac4ba8b427de4a1737f099ac201c64b95ff821d6878d58c8ff2a74999f4863968597d03fbafce51e34e356ba6f446c93ac8d8b02a8fde8186f782b0d7c892c96eaa29457cc2757486326f490ce2a0bd1da319dd063793500152b0cd500763174ff776506d4a6c970d170424083000617237bbc2a4952c1080f010f533b34d59d43be7e896e9ab49600000228000002240000022024b186020c272a05817fafff8f553861078e0144f00c763206d35fbad783ed3e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6de0a75d2435c1fd76a4bb61e52b8b61fb7517a1bcd89ad25b329353e5ed4c50f8f782778118549727bd390c82e9dc6bc8c8021b5d4968517998386201ffe0fee06550e95d2c74ede8be028b8a3636333fecf5d01757184e4250da7073d40bcf1677d348f7eb566be9dfab5be01d0831047c64199d2c32ea06e0f1eb3692d97abb669bce6ef40f922ac681b6d4283bad63ef835255075bb266ff3b2903df85e78f356d20b5d25d32a4fa8b9ec3b8078da60c425d0df9b165e702b059ba7d187402a8b8ad660ff7ffa8563f477f91e90feb12004ee32347c863d410fbd9696481884ad5708439a0dcb1aa0a80c1c79c7274fc5ce6033e271a69443d789ed6535cfdedb42ee80cfa1c52d70b9d92e487f1f5a7c22e83213ba2a57e38c0944c6e62207e42aeb1c5a280b83676a4cc037707c4bf30cb10bcf6f73ae22e5a6aa72fbb6c050122811ac9b1ccf6232e9d459ecfc993c532e9bb630cff541afda5d613c1147e2764dec1c3807531b6321922efc4e85d9bf8f1b8f6099a3816ddfbb4061a29eb5832c2cf6c62d3c01b4ff0e27eaff3b0521a957d50f2077aa99166eb8e27c4495355441c39e5c1194652bef5262fa09b14fcc2136c7b5ce01be08d7c274000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012da004c1ee3975e1f4a6b361b8355f18d089f7e98ca859d67f03aa112b24dc9c020fe5817d82ac71f566fe9f46120e7db83aca0f3acf724453e0727297d7463b9b0d20ec26ce2de52f123a8150b13a3eab40df264869da15bc6d4a2229eb8b29c60000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001670eced1ca59b8a6ecd23e8521b2c317337d8480b8c5b87274bd7c2efee838376c37517bdb023b3ff01e6876fc6a682917eed5c6e297926939c26995af58b72e9f020e4d16e0e6de5a1780e599b7e62fb9584c6fcf9fefd1e4c92b4ae05044b7d544158056e2b9516774af6a5ca09b1eab3039b649de00ed43e803a83898e60dd1bd0dc719eb9fed3381bce6acda187f71990a15a496af0203d32a632f1e13f4ce789661ed6351ddf438a9869932fbb6791efcad48219c9b1201faeac36437e56b84fb130982b2832ae9aa79a5aaa5ef6bcb2b1c312478229a61a2440094a63b7d66a0541f91938b17f3d6e1bb7285e77765d899f87a04c9540de1ad696809173bc5d405fdd826c090578ed21d4ec95e831e66d3f2b4a488d9c99a0f0c50617611294d92098ac4197bcf033485033a5a8660ff0d77e7a0de5df3996cdcc361e3c9d86c02d3ebe0107488eb73459c0a14678620485ff5b02e4dc29a5c3b9995cbb9a3e2644cde95ed61f614e62c3c703d73e2cb4af9bd59538646dfce73be71571cdedb3b282cda935388c66df1fc2d613a4d257d164502f63c6ee19963c36e3ed6b81153b3b2150ecc865545b62803b1eb840c633425abc19a4cee05ec9ef2500000228000002240000022001db97cb1b84b587a97a4db73bd04966735cf54d8602e176fd3b87007780af8f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c3a9388810e51be2c8c42eafc86ef835bbff3fe082f567f246eee6ba12984cd7972cd0b4859e17d84f768dca70339d45f4b4dec4165ac97ce8ff49526a0fb30b27b861b8c9b604ebd3deacfa8d77707a21d225f8cbfb6b3b15f1543cf11f2923a83e78ea78364391801f094e4bbb6796f36d381b4ea38cc43ad15389cd245538a25b8770765601435edcaae2d7b4691cc672a22ae3803ec1b70fdb0aaa45f19d89da639f736c52efd3ec39abb7c9637394501c261f2a99f908ebf476b61f26e6a1041dbb1cacc869d0e0255e07949c1f5d57efe46149674f1f4d2f12ac816420c92e42433e2971a0278468368f2716001c6f7bae6264979406d092ebbc39710745a3a72510956cef0cde602939cc0737146bd3af33a30bd8fc55a39358e6e46e9ca072e7d08533382855dce70731800e45110b573e4258fc54e7631c9ea5ee5e4c408325b712b29068dd43c50ae5565286df56f2c2ae34b8838723913abc59c6b95cc96251f6d682d2b13efa1d979bbede69131afe7b794fb2e059469d8fb564014c70aca323ef6ac46b6b34ffabe5b66963d8d6dd148ab2e38d86c6bae9bc1faa55b77ab60a2072dab70a83e384051e2bf185fa34eb01062af6f16a879c320000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012eb02fcf60d8661ea2d2cb585d2936984c828498c166efee3a11baab6f09652c0210ae568fef81a6d2e8c046086213ad38bfc6cf463b60b68d1dc98ce4ea4540370283e07d143245b954dfd4fc0141415b7303934cc2d9f369cdf6ea037608ecd200000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fd64ec18e725cf4f87c8e3f8ec899634d959380fb0df049e460df7f5f055f8604444fb9bdb13db7d1cf875f5456d34c39a35e5ca54b944f5a3e1602b0b99b251de5f7c3ba5585cc2e153c43c0f2942cf088d756e4341d3b1c6452af1d3def00e992b323005e4b03793772dd68076a0aa275cf83efbb6832fbc48553d95a3a7de064b65112f70ad4a23cc48739a1593dd5b27c1f113fbf53fb4dfa877e98972b4bc06ff9a3cc31f2a830114f4f8fced0bae1598b48dd65d80c80b5fb19f2490e2eb30c3a21dcd8ec23b0e06517562093329648fa03df9175844750b609b33e650e7d68e94d34cb560042a7ab7f099a49b53e494ff886004adea4f36367dd83aa602cc71c5aa730e5e9acd68b2b26fe14c14a19c80b5897cd918964c5ddc3004546a36fd427eda16d5495896a7dc5bca5848338c9f69b28d9b7e4a1c9f404c3c7ad4b5d6db47c94bf07fc3df83a22c61c70272fe0ac377248354c3e1d694b5606a8826f7099a6070ea34da30297273285d6391b0be4b6410ef618e18b78e09cee5dac05ade5117d31f4162e7bfdd259642d5a982fa8cfad3107a37bacb1d81d5edf42f5dd92b267ef796690123f5f5367be0ed0b033749ea78472b78407d6c5600000228000002240000022007bae3214b527bd12ca186059dd281d1934453ef92a7b8180b2ea0a4b0640f920000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022acb2c8bbbbdcd9357f4ceba15e3bd69ad5c7bff0aff9e91aa2911f2fc20d093581aa32b6d59d92c6b1befbbd7a0357b514d1e74431a8e9434548231d5767202c80844524e789fa8acab70fa9a5659e809094de1a3c9cf7a7a43fc379b2187113c92c72124fe7ea69acae673859c9605599989c2a509f59d9a91c70725a6968ed75f0fa70eacd04c4d1281ae4f661131325a785261b49f1d3ad9d39d40154d462b7bdf62b0817af1253007473319b7686e929ecee3cec7b16e46a8502163c90cec8924bada3c9580ce3e7073577bb7aba7a3af4ed223d9273114b9cc26ac291913540dee0c5dcf10e10dc23a7db994ef2080993d77039606996b7779c7cabb52860f592a2775888133a6bc808e539c7bff5d20bd7a1e49fb693bc254dc90d5f3d3b6ab5988200251b2031aa4362e0c13b94c9918f28aa60d9d71bd993f8e050dd7c9354f63b591a1f45f96597382bbbc61288938d37ea71a08d72654cf7c654969b484f88ebe5d825928a4ce900c90f513e3656b87fcf07e8cf41dfbee3c0072a22d75e913e938a5a2e2b19018c928180f5be767b50f27e3b28267b8072fada21e3ed6ff7c29987a4573c5ac7707f57e9ab14b8fb5d4ace2847eb75839bb749000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00219c28d4fb54a95f6e426372f4e21493ce4b43cf5fa539e88aedf42adcb6804b421c45f19b59157ad6e229352431db315a55aabe8ba3461c9e6978720b7b5b1b60215bbc5abbd1b9bd7020acb649237afae5d0d4cc90a7c254c23e13780c941da1700fe2e0dd75ee14601c36de60b7336fbfd84669a4e384f3550b2f48f8230fad400000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b04b8e68bbac07b7ef6537bfdd2f3a2cbf6b998c8b176e436319f00883599be236acc681d7571859a57ebd5a3d19df23df6813d92c0325f4b721118fb1e0aa83c577733e46cef839bb3648cd87fa336465765740fdb959e1e10f8a586b68121fb9e06ea9b5a4cdff8c7c60030a0f25cb7e58f7289046756a8193929cc7ab1e326020739d43eb8e33d04430694e7ef414ed0ac28593309d02afd7e4ca49a1f14007bfebf699831609e7f8ceb5fd02e1c818a533c7b15816c383aee1d65f55013af555a82cf4dd6daefe39fcbd4d937a704b7d18897b4679bffbfc5411e62b9924628df43bb8d8ba164ec5e5cea921d7d83dce323af56c18cbf01bef61554731784bf86fda17596245b05c328dbf129f16e1b275d2a3ee2c6d2b0ab26385532f147e09e4761e6006e95a3109253730597765f7e13d801f38215923526f3d7efbe06fcf139e3c6d49a16013e0ea39af48e2781561a3509d1a32569050e03381181391c4cf53a2335f81fa6b97b611751ea7adf73aa80d766b3ad9438104979cfb867500650ae4297f4aab24d58257ef46642dbaa0239ed61c73295dc39f8cf5fb1d94b1f5fcb78b1eed192b4c92f9641743a2410a080f4a3eb69126f180e822d84000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084a785652124e0a67738860180f82c0c176385623a674fe291a39a0af1c62fbf61616beb7ead8d4f9c8a1297a68ae042ec5684d274cac563337b87828d4ff962a15b4371a4c39596d7bcc7c11b9d18dd0d266fdbf85c15e526b6da5838bdc0800aec0d1aaff476eea6f166062f1d1c02553ea00cc478d698ad1c79a76ffe26c06927d68edd9aa92552e80e69dc533bebfbde3aaff2497b056e50a416d06d38f972deea6f4fbb78e03c60f67d0cec9fe4c775049a07dc60c656b1aa308deea4bd4ff86afefe84c0beb3ac30ea2cd71daf1b4ea370318b1c524fa171f47dcfc2caad8658154deb69096a1aa6fd9bafd284e048704327fe22af66955713e6364c220b9a17c3fb7c59dc636225b927e1608c7729bad880539308937af1a53dd83cfa677630162ffcf4eac5dac1a84754deca8db819611d3b7ac385b33ed8632d884acf9287f125548c26de98c6c3758d65161999601e49bdbbce6314c2f8b9db4a3c783c645b123b091c7a16cd4f036cd46bfc8f14bd0dbe493a256aad6416da1209e6aed3ffd4209e48b3b7265efd4915e79f2d4c96588e729842aecf344627f77f7f6c00b1c6c375d509a8d3ea949657bb3b62f3201b4b27bf209e621d53c570b30000022800000224000002200214d40966cf3b97e9ae96c3edefa64d2a4e65cabfceb18dc213aa17a69f880b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000161677e2af4109f3e91639a93e3ea8455e5cbb4fab9675ac295ac4247200639b7e47b04a4162c1d8d8e7d05799a4ed9e046c4c421671882f5c8a314bd6e99a26dbb325c0db17c911af654e9830dc9221892facc75edece763887c2017bd439627ce9bf582d9bc4b9df4b4a5cc60dce1320dfabf3af03edd900e6488c896eab7dc4852ecc573be64e194450065c00867f92f6bc121c8541f4e716d6a116e8ddc115a3c5b8ee2fc9ce41e96d104802a727250a30b59ca7c3f3ccd75d11820f142aa034bff3547d91499b0a0e05fdbcde650b85b56cf5a5e73e92144edc2998be430006e49d93cb15dd97fa1d8588a9f351bac51c8513d23ee43aaacddacc52fa84baf913f1cdf843734db70024ab6bd015a28f1e4735d053bfefb8e2069005f4fd9d4a777cb8690a4e362616060897a2fb0d92e490839fcd32828c5ca5f805bb4b7faa6ce8f52a5a16bc6fd593d48b7389d0e715abb46c3c63db934d87e431acbc8c735f49e131bbe0f2f47f45a0734d3ff13b695233a9db1ed0a1640db10065d46f90df334da17b54a3b4a4748b7487d99e76f755129fd49b30d90b282bfedd60f3db1cff886441fbad2624a83ab87d45a26bb49c368c0259d3ffd3bfbd574229000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001005d610999ad96217235db10c896f7138f676f604e7f2a9d263c76a7eb921fc50217900f935aaf1c9de9777d4e41ce9ab5d01351c653fb5c7fb4fa89da5bd26ce51a206b7abc0c0fbffe81046c247be966e63a9e34ff3f86428a9163904193c704000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8cc9eda4a41b656b06454edfd60a9e4d6db471326e535d8c60381e9c67c9514af55a6d5ce5601f41486de4f3621fbd1c0d76e8219368867559d265fac53c5278dacdffb3d0b60e180cdfc7269450ee589a7525794eb37501953cc2089c6a183d186ac91ea5748d7781a04568dbb1490d7e09e270b5cd88375a0def917c738a797d569cd549c1e941da298ece8d40eaf04e3b0fdd6b110379d5e6999e81251a046cbc3b2e24fb8022f30e55364a11bb5e291efc1e3f8c373874d6a8eec7e3766e7b260cfcbd7e2cde46ca30d32136cebada86fada3dc1475b8c8e87ae286ee1d439ff451008ccb8de721b28daeec62cf0f67fd9cdc74e8e3d2296b527d94e9eae182fce9b56c842ca778ea66a3d924940c9623a35723758632a140f950feb2d8b96380dc3c98cdc0363c81dc6d0912f48d7770331b92b34f19a33cb61e50613d1b059ca063d39abe2d1eef2655edd09da698a3e889857a7daffba4772a50834aa1b0cc7d0c1439d94716edf02b15808bfc09debd969893d12971ed189a6e8038410f2202d61d160526d1d64a090a9a7c68d22310db53068d090d9a7cd242c8acfda9c53eedf3ed56ab35b2f44b88ac8150961602d0bb76eb03b9ca7f7a37531e000002280000022400000220172c1e4a70b7e28bbfc5b1b06585bcc06c72d14e3e6304a9e4b025ab4f6d819200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2271ec6b1e265b8dd2ab41fd65cc79bc836486f95e61167eab1d555df5a45eab965915d9dc5012ea03b6f52911670788c5fd0b74f34fbf4eb2415ae1d6f7f2314a578b2b6d1f09ea13b14633711e7a8a3f816266c23b5d5f6638e5af86ab45e3134b545fbfaf193f60fb92a2fda0c387426924ba100fa2ad00bcdc7fec5ee87cb42b82da4dfecc5df2dd6933f08c7dd3bc08852b83dcc200443af3a830e30c433fadf9d7e26c73d72cd5d09ab5d0a488c7ab39addd4fc9f28fc8cfa4c975f371cf81f06743b764a2f9a11411a6f4168ddcd8a907fec44030e4ecb8497fcf8587db393872cecbaa7adcac9a3e6f4ba35aa2d3952ab43c1fe59b1a2af337c69f1bf2049d2b0e277cf829dc04b9fa2c7c013a8d2493dac66a4f033f269fba65063e39927de4eeee70f6d238a3b2d94c8e870a3a6e6a8c203fe42cf4e578dc573868404b260e75e77de724add04ecf8c8a029f051002272b18b43005c346a26a5c752072c3e36edaec124a029e090684b9e013e3ab50029b6ba437fb2e0afc0c8d2c43e380e04406ad86618c05ef8ca3b54a698a9618601b24546e5cd69fc9e49b2f8d21ec9fec20ee89d0080caa9414817ad8a8cdcd1afce4b78d4c4aa2aeec57b000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400106c66a044d74d208a8f1d2c68c427d3bdfaa620c863cc2a1775056be05d255e80217a9e428b1022f93d9a87d4ae5d2dde3baf4ad29494179c9ef6b1f7e7a3fadb70b0319fa45df74dfecbcb545f0f661189370b4374aef04d27443d5d5e48adc29000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200408cb8213613df0c3490cd289850a5c2c9c46f2addef496a01ec182537bd3d8812d0c4d4891dfb967cf10b23a7abaab10c6d98d0ea2989daf3c30852602f4e20a7e7b38d82182205b3f8c82f982b964cf171a18205cd4fd743a7a1eeed1b610dabb8bb5b1502debdd2312c1a5b98ff7a73c3080687083c13b83311c25bdf3af7d6c4f4fb8a56d6a9c87aa8d3b367fd0ce36523c48a8a4f0bea4eb37dd1e41408bcd58605a2ff16c4a9b2c2f5dcf4f43a8a51733e466fef7b41cc22f1cd74ca68c7ba8bf3a01d878267c5381d084db54ae96571a6d2d139e7c670e14627b81b65bbd505fe8e0c0ddc943e6cb75d228dace7cb5b2575b7b682e06659bae4be892071365efc80096a4d77a88e01cc2b63edc2400583976c64f5f8859d7ce32d077f12b2647e3e68f3e7766df6cdf6095497a561d1f913ad0a268d5a046618802ab340155c7b167d38b41ccad86ace334e5ceea345032b219fe69fba516ca4e9ea6d28e1f04ca15facb8726e6ec2dffdc534168742b3d0a654ab70a0fc1d956f486032c34f8bebcf2fde61faa2aaaa11fc5672d0483896a3a9e9d7c382d13c66fbc2552ff439bd07d81dec36cf8013e6e1598ce9430579abcd0e6d14f0fc086f10000022800000224000002202d01c685acb946b363a3ff9ee168386004b1e2050687574e93750bc9db934243000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e919c3741a513102ad5fe3a5fe0433055e49da1d3a6cfe576e21a326fdda5940f7a767a8ac4a6e8b12fbbcd501d6f7f61f38341f1372e8526323c66e2870440edc1d7a813cccc156c27bfa3cec96d28454417a59b07b1822705bc967da1b042e933e940f920a8afe085f674c55b38c231003e50c040e401399d28fda4720f3803804b6a93a98ea80d5f2b3178c7965dc37f4793eb161288c7ef7f49e7ce7ee129772d5c5cd3d72592eb30e9f509c3074b519ae66f441657c81de32ec423180b7ae5028f4715dcf3299e7e8fb9753c4c44540421c4248bd05423cf54ac4abcb242355e8dd9eabda88d23a26bc35e4919fb6c05039b6bb370d1cdebe04bae1b42c3755ddecc7b2542df361f0be1ec51fa08e087f79964f31fdeb630f88d6c69f6a51bc31f226ed38fb34eda26634925efd63bde9095103f9d904dd849bdbd8d362d8ec31ea5c550914c74ff38126e80912c58418ffc80b6e9a0e149c688c3cd6d28a5fa9844f2f5b903753931088edc574e5e030d7821469e59cae8e2363b05f24d3a8294e78cc6d6d8a87b33b4206d6aaab6f6d98d0ebb987bab7b5371213690ee007233251573192e6745d79a614bbad03ba5cd15f58f8c8c6b950e1eea609d000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400101d7507ceda1eec9ad93b42d77991a8dc1543bd303e1176c869bd18d37799db1021938b160ff1b3352126222652b9a96a3a6984c4686471dd0ed9e1dae2831f612035590e43197549190117f547650aeeba4ef4ec91b3658342af45360b9e6bd3e0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dc27541054c8667a56aa10493203f394626c64c28f5d511ab4890a8ae987870cd79d83d742a57fc404f9e92461a0a51d684d79feaed7210e6c9c1cba0f15dfe5c59d85fc99e45f2bcea2138fab9b8cae5e0837ba329fc450d15a51d3a8af9da48538db5b501c47658503008ea2b6ead8b0a23741b1f797bb9043a47a71f8675a6b97639f9a7de94cadcef02f31d351bb84af63659049606cbb9ea4ae09758e3490ad4931d2c0c215cda51868289d4c487abdf2445f991741c23a4a563256a757fa6a36033d7be21312df8e68b06cec70bf6ca76d898a62b285cbd75fd281adef42fcdef830fe1ef40b6003c4bc342df9431af36e1fdfee741643bf4b62599d8f2ca3bf45f5bdf420762ffb8553c4a0274245bbd594125d4333531e59a0245294463cf547189f975c96b304783e37e1936d8da20a5a94a532123e88b78512044586daadbabeef7be68aec6d9f34bc0ea36c0c3dd6b024a0e769eb2f4b1875fde76382d48ec40465c5f5b7cd095cce9ced28e64464e4b2111ae73e5cc82a33535311e674ccc3d98749fa2df8308358043abbd25eda76fb862c47f34f7de837e404055943e941eede3b0a25e9e76cd216c1d22b18ac16449404c6523864aee841b00000228000002240000022007c9ed8df02bdc04d4fd5c240857423999dd2f69f1c2d47b111749472b43d0e6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b159b9b1ff7325747b5eb02cb2daac948a1613b0427120757698a2a3676c1595a03efef9d2223483a89feab0e1d773fa65a7bc36c641485bf2825ce54b1f8593a18613c155a55983707202999f554a93fae22629c5f1a9e2560bb147b077e72cf946053aeb33892052f5f63cc8d3458619b3fefc4160400836ab58a8f1502358ecea4f2377845833bf84f43ba505efb557a3a33c61f33d97a7802d2aeb0e3fb95fb349eb6f5a3dceb4f26d6634dd91c49adcde19b8b06698b3cef90b9551cd9ba03dbd09012d1ebae7098ae6ca3ba558c6cf6add4a0634296e8c492f70ce54130e8174920108125e1ce43af30b30e8c61847353fb611ec9701d3789e56f5df8e61b2c595da806f025944ace363218598a685cfe5147fa6f8a10fc8d63cae4161645b24203f833b87771104cbca534d48b28cd9810b41ace0cd3f472110898f80b1ee06da4fd28060f6a27eeedabc5fb978117a0d70f89150aad4c9e540aae653e74afd767b126487a5bdf6f3bd83e223b7659abf64d1077adf0d0920b92c658b4930a1f05ac683453cba4d34b346dbb50f121b45f28d21212887b7f9bb016b13a2e711a3749e633a5791d6dc19b9b11762007d9ee208387a31018f009be2ae0000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40013033cdd885f7f0156ceeda9df45dfc6522ee24a1a306623796d4290fee6be45e021b1c7c919dd82bfa8776809976b1ecee4d20a7a9dc619f0b5ea99354ae6a401f1edabee5cd0691af4c3d9e21ff5d41f6634b91a4ae6bdfc537e98741c5145d640000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e27d993eae0fe15011bd2d7191c4c47f2eb6e39281fcb3001f04d9a591332d4ed9a37336052e4a493251bb9463360bcd42525b34530fbc06e8d686f5c7993403e8806ea65a457eaf528e9adedbd49fb0295a5515f1656e7c8b77ee3f8f7960e0263e2fe8e18115b8b6fb0caaceb15bc7ca5ac143d640225965313848dc47f82e4b23435b8aa97692737e596dc15bebfcd1ecd2df6ef6483d35444413fbdf10b184d246e82141a841f59195ad43b521fe90777552bdc1dfc35cb0b3202ed056f84343199b0b8650ca957363730dc8bd78d4c70f4b97f37f40f30a0f9b3be7418c28a946501b6eea2c3e54bf707837daa2b50ad29bd8d0d7ed570bcc7e996b29dee21cec0ce24b7bbd6e539f19db474b60929e100b2d6db347723b95916f5e39a452e2691563e98206f8395528047fe05a97208b8535e45697158c51a14522ba3ce8bc1cb177e5ed0bb28616e1d750d1dce80ea5bd2bf1e99413e1ea2663bd06d61fc8d96c5e358aaaf208f23998e92031cdb8e59ec644ae7005108b2155aab9e3046f53875bae38dc2b55de42429f48a87fe31c3cbcb296ac5b1e55a0bfe57b38b83a0ee7e4f060116872136e948ffcd8f6dde289be1333056da5c815fa466410000022800000224000002200b4f957d073ee8e5899900443151128f51d3d616186c7487bfb0a973fc35697900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000999fe09e71be88977c8847014119287bdbfe45dfdf674694fadd9ef3527b0ebbbdd1ad2b032cf00cfbc4fdb29cdad790a118ec09db8a9919e1b68aa5b05384488b497b68b001c6a04e0df8bc7c4f024246beb8747d1630c27ba86376959e22e2355529a612f502014b65b53a6c78c93364a36f3827da445caf019cd3779ea576692db3b220b08b717257714a23b557e62582e8d155df5db84d79e2f81595f661796920e1011fdfe5267aeeca158356d9349abf69d7c5bdf90e4454bc24e017c075ca5c7c218e91a3875e727746cc8ffc4cb10aa2eaec980c7f7bd19d85bae5c4f98d74743086cb6f94e8466d99ba270d393e709bf578c1e1e00f199dc1d284f4039eed98a49cc5203c87d97e2a5adfea6c30c25db277374fbc0d86f579121c37ec69bb4cc21d3ff910ccfd23318b3087bb9097ae9c449aaa08839e7e0b7edab402b00cea7106530633842a1c6499c35a92311f8c2f2ee3429cdc8489a50b4b92bd5622bd20ed44303490478d5e7c4c8805949c57536c7e268e6acf4901789dcac2ea7e12697c6050b2172a40c4c90842b7fc8de994599e7d0f6865e856f969e59de8653376e12cdf575a14f6cd2aca27d3708c47e44942b255dcf8ab2754fbd3000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011f4efe0de0c1d5af48f2efb6c64f546ef5f7e00a48a5a59c2f8766be4b5280f4021d56ec60d7d92c4fd3e93dd5b5449869814fb78bfcdb57658e5536e8d0c19d3423683555d5f7564eb7b7065b3c85a9ac93070e565312a4d0562771a554d10619000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab9fcf3e23a90d6a173392212faa093fb4561f25e40eed01b11b0e902dbdbf0046111174a733f8e709782bc29d81f86a6875d1ec4d851c9ceeae2166507794fced416ed18ce93a4c57ee5b8f8a3c5b616e0b5f38bc942faae87872ec7f9e63e833a27ff10d2ea680f17ff38ea3621d10f401e9ca42e35ea0ef5d91907ff0a9ed84a4b89d6265a32b99de713a000ececad96637c178c7cd5f3982f4d0e4e02c9eaf7626031019cee290512c166be1b623e90aacb76e430c1b27fdde7d52473aa8f4f0fbd237563445f525f1533d716034cdde9c61a3486e30b23852e99211c7bd3935bccbd1b6240fd6b46bcdc8cac6787c205cd67af2da92c1408b3fb84f149f27e4dc88d51310149b2f05798e69f714a611a62c214c98707cbafa5702cfa7c9e056b214496ce0b8e0586ca5bd3b0e416ed9b7104298a652beb3d0e1794f91ca3737ef5cd5291e92c24fe835eafcef4c0aa76a5fbc0a44e9163be315b27c087c9fbdbca9699be9b39f5d15c946ea4981f45347ec23a83bd503e1190162e6dea093a83288b7478b672a89ab6da4f5b5596be286248d72d53e69229babbc451912cb5f2b6df5244500404cdc60338c0447f18579016e136196757974aa1d35c8230000022800000224000002201e2563aa658de58795b1cbe9ba84c032c583fbe2e94cdd88537eb257f95b4bb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b8922ba60217b894ca124d95781e0e30e136a6a605dd1517a08fce7b512baf0f4d3b662a0490efee67a4dfe42a62370bfd08934e46a3497038a0f4aa82593edef8964859928d442e25ae6bb60378985feab58cc172f9bce5662162d446fe3df4aea5f4b8037cb006532be8c018de423c34254c2c9155ed04880060e408faf7f81b5be5abfbda9cfd496970be63d51241f474e01ffd2434fa78ce84689bcd782cb3befed4a92b7924cdf1dd977fb4fa249747e49e81cf1733fdb50d43d0c99b866180d2c3aad630e54275dd4550cef2de49d6c9f31e23358a8344fea1264315e28d9b556e3092821905fc0cb149b8e243ca7e8ee72f0241af1f1cfdbc332269dbeef0558740662febe919b211b72b01723a08611d0601d72682fce7cd4aedc0b9d09561dc5b1ffe7b721d33494db977e26aff2b97396023b83dc3c08ed7221e3c68da38c57caf5feb9311223237b8ed020ddf7aa3f138f3df39efc5b159100ad46264c777eea8c05acbd1fd0cedc470cfc0def6750b1fef3d3f5e99e82bb60608318a363d674ade92de908c133c23ca79896aef7a495faaae27a2ef10d8fa4e6386b16bcd423301d1298ab59256b472c9bccba9ccce88ebf5af72c12c3c204b2000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001147cfdb43ca58fe7bc14edd7922b62f3f34a1e7719b6406a9668c9df7564d74b021e0810b1444ef37ff148e7ee402129f6755061136a0b76a47026424898211b30112c260a2a81e01a1f8629c7e9d94ec8ef0d04f9739e5607eea506b739045b230000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cce8d5ec7e8dcbc425c0f633ab64db89e85281ffc4e40d476e68d4be27ee9f8cfcba2cf3c13ab75a70596f1ecb3d418b89b69ef9130a2c5d2939418bf5f31f5d2234e3ee59a2e006092406aae0b7d107d08e9a6a5e4d76bf04527cacc4d78d8a3aab99542b6a45369a1af8987b3cbd267ad03f41375d1a44e7abfdd1d0adcb54eaac51e6ee944189f9128effeabba816df9d3b245b278b9881332f957c2f1f0b015680b19f924c77bfafa08f6909601572bc9b0b565d08558bbcdaa0efc058b332fb863cf170c4669e004e9b2df9921a9b94cf38f80125e993509f87b3fb9e0d7c98b0461994858cc987cdc60ddd5eda6ba452de547412adbbdf1c238e4bf5f86d33a79de46b369524ccc58c6814b21dbc4ea502ff0478f28302a0107d195b41d1acf6d28db49727f197803a3207d2bbf9e552159efe1b8b788a2b051b903b4f442b97fc5029cf02eeb8b5d861f9a075f198c87c9571e33ec78ed3693b57b6777a4ecbcd9b65769ace9db4fb0be72342f8d0a11eb63d18ab60cbef2f429042d0395b363c8c0c8bd6f7414cafc2c30c01c45eccde818323800c68809a1a1b0632d65b747b6f6e9129f0b5ca1825f05103a20d25bdcd196c1f39d38742bf1792800000228000002240000022024858ca65c6364ef25d9527e95795ba3a193022a0da07b98a958503e08cdb29a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d8991f5c4830f98eecb961d7f9ab5550d4d07687dd2f724360ff2618884c798b373cc010de01efc6b90733b7db6290ec1a56b52e24ed477af70a4bca270c39c52fb6051585124f0d5c222a4da67c17bb35c331159ff0632fbdfea9408b33349bf1e5815303eb930bc9ae6961040ee9dd7df0bf742e6c06008005192c7962a1e8404a100b25c8b4116167b189dc0afcb35a298d0f49d0b4f351c65e3e87597fce7507da421c78602e15037a3f0c9f86bd49581355353acbe7e6455b5b9c5dfdc3a972481cf6bff4939032c8990c02164c0c1529eff6e6b34dcf96b3aa1cbff03d837285036b2301f55e526225dc9757323ec17c422915c9c9ec8c32612e7edbebef25affe5c5091b50e4ae13217d503c710c42cd15274b7daa4a6fbaec29a895265ee908ca11eb6c3ce5a4438e8a36933725e24f1d524ec71e6945b875727675306193de744dffe43496af25950998c8e4898a62d0a7151d609cd657091f0228b072f810e5fc012b11d68e95117c04a78e6b7b45b6b641846c3c701d4354aa85328cbdd82070f433a29ee1625f08fe2f6f6119875b21d3c5c2758827aa7ab9a4029d045d482c17005b03137d9b2b73487db0c304ca29ad5f00705f8c6dbd3468000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012312389a413fb53ca0e0707b418a8cea56f9f19499fe2e79fc32826330c501f0021f48db8fcd782b5b5c857b7a8048733daf9038ce3c42446547061d6b394b52c5014b623ac4d624202e4438acde427c09cfbdf40038d2593a446a9396161ed3ad0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f12c85cbd8c287a6d199cc1b297e924e5eb13a98fc1e57fbecbca8fae60623d15a35e95d254e4af471ca3187c04133585fa5efa7b74a648787826da12d35b8e5bc835ab1238b17fd3f42ef9d6ef7ee96c47452c126fcb68d4be2249e6ddb62b03a878274f622fd280a4d087846bfcf6d08ba586c7593a3a4b90f2bfb73e57bcfe60f5b7b4966c943a8b6228a5aa16b0084d42c8b634e603556a8d38e14645b9b98cf9c124967990fb019e2c21cd693aba1222ff6c3a44672f59878d04751addb293a03327e754db6c12061f867ab1490c208d435c321f4659654bf753eaf52e69c2d0cf6aa02201dddfd273676e958483372525179324231557bc214677596a68d4e3b18bf4364b5e8e913f17a39f7b5199ef805cc5b7fb53e9b7a4afea0d132c93c69edb1bdcc55d740d7c7c75f3e54617952dcb79a0b6e13eb2c03dbd4bc913e23f9578d851561b2bcd27d2a760ab585093273ab5d274aac826c13e9ae51083e25e8d64f4fffa61f685c0be306859ac1de62398890be6932e5442ac083189ad85073d20033adfb5076df55e44e917a7d481ec08d6e849d31bbb5548dafe0f82b340052b665a922b2caf2ad53d8c8a1f1ae99e12626e5c4e6f90cc2ffdfc9f0000022800000224000002201c1ec432fa1dd1b9e8f79eb873a43cc3a757b96c6002963978dc191dbe579d2600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad129529aea4813985ca97b32c706868b342d54688ce11e6c83342ddb08ef6ffb504c5277fe54465c4c555d6cc9fcc55de24e3e64eddb274c4a9eedc5edeedc49abddd934e54f2c074b721395621dafc9e898ecf4d6c412634e5eff3ad0e9a30c4989cb85daed9dbb344eea6cfc4f7fd675151a5415096cd43d5cc9377731ea9cb30895cf30144f8e11b098cd9aa0a0b435034d547955b767cf176b80b50db321fab987688e903b4b6354ae6056294101f871b9751c68842b8497c7733d855d22bd9da33f4ba212408d6a6fd649f8635d2fdb3f9f042cb0613705f628beeb935271e6bd259f65d194442598bb056efb757fb7fee2173ebfce7a1ee41497d15e154093db137dd27b944bc01d60e23eb3db67ecc1b4aae316d3184d8c7e41c657237f575dbea3c788ad10c96dd5a25f36161547405888f765c061677781a3a4c80be04724f9087627d76f1b1c4b7e7c4323e835638359072f97a8c8334d985157542d8f1f8a370bef19b93d23bd84861d5d231a7facd2dc5cad1c0767281d10f10b0252902dba0b8c3bd340d28e1aa519fcb195d1ecd21165f5d91e5679b7c5d86d6b37c1e0ef9d10ff978fdbcfc8ffacbcf4b80ca55605e867d5edc7cc101f76b000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400127c963f3b9380fa68b7647bdebca3ad2a0a15769be1d194f9e0cca1e65134873021f5291ad81ab5ba473cec847c9bcf1b9fae070d983f825989121580657eb425a1047969234ae864c572ce783c1a5981bdb2d83c62365db47985dc097f1c481cf0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c9fcf686a6c0fd6e7ded33046709ea10116ad03d39aacfa96ad9b6d323a4128aa3c599e92f6ba46bbb98fcc8a3624271b9fac71f6acc2fd9f0b11bdb1576af56639bae0bd82c8b76447fde5c864e9be321076dacb4893c70f76bdb7c46e9fcdefbcc7bceec5964b4efae2355a45e3bf7b0b86d9e36480925e412a6f70c82455cd3f30ecc5074352e90589bfbade0dcf24a7374e358fc367fc42802a1a843978ca84855b2c51f2ae5d78df1efe8d8b29079d863a537234d26c6403ef90783a4cad086dddde4f3ed1970b94dd6d576855a4cfa397e59b927976c2c211c99439c7c87aa4e354adf170d90a4a99d3ecf3d6c989d2a1821fd85b0255b5f91ebfaafdc2e133eed51843c1883fec7f4bc6c3c7f04dd4a5a3987f0ede38ed469890c3f450141116cac4c9856e5ba21ae9a1d99bafc8e03364448e64cdef2245836f8cf2a5bca3e3efc2b58f96dc7bc4c96374c3855c3bb04e58bfecb6caf54944eba54174d14dac4d7ee9848518c768d6adc25461e05ab2ea982d7e4ca58894f13fbeff3990262bf086bd4886d0ddda38b1177ef694e2834a6c664dca88809cddd8a1fc111ae1faa2e1ef57845793378d08c1ca85dc2365f4741c458483dcc8f02363970000022800000224000002201dc3587ecdbb3469e75b54a01729cc83fc87c52d965a3af252bbc0587ff6dc0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010ba6aca3ddbf5c06500248eeba07eb2127a4ed7a2b9b771cdd8d627ad5eee85ac2b8311cedfbb1918ed578fb68bfb201cbbe26b0b84cab7e48b6b6ad90fae317cbebc3cc1b479eb97891d94f3fa36ddd0939399c61df1c2980362f95b85713466579e9588e9805740928fe530e50f9eff744ea8028b6bd2cbae62b4f8277889dbf514fe8d6044e8e49a12018d9a073a45a547418917b6b187c8385a6a4949870879d1bf6630c836b9aea18e80f218c3ae40285ea5a005adc27d412b56b700d4803925173876b8cc83b75ed5b46eb1730d92456afc5455d4c3acfccd71f8cbfe6213170439bc349980c3a90ce9b2d41eb631d2ca4cdfe2f0d3a243e46f9ab013419803f92cb048c432716055f34ce26938fdc44315b30adcfc51d03a527d5cb3a695f710380ade3da2fa9623773cbc34700303f2465c4dee31df4c4c0818e2d9ae61227256cca95f9a6e82c40c5f70d80dc4551560c1fbe09b78a921c7f5a71f9bdba9ae697d575f90fb366ef49dcf61dc82afdbfb9f6705c0cd975db07913d840831762e31fd0fcc6256525c669084028861b36e5311e9d338f7fd4f7d62901e5f1d55b95f656f7333f70dbbf21908bcc5b02c1b2caa521ce174a4feb42000000000040000000000000000000000000000000000000000000000000000000000000000000bec47b002047fd44a75576c14e40939f8f4a770b6fc98754d4c9600991b0e57f11e6326f209dd878b6ee824013d2de70165ee770463bc861459511da0ae85970ff7daa2d0022074d14ed8e462a7b35f13c79068db34ba3db5d8c31acc522ad50fbb6afc84072cfc88faf2e0eb88412cce722b6c55a7e31839071111be97193a98a0eebbd0ed00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000239806a4a248c4e3a3f9e77c42067096a9cb7864fd086ba1e9db65a4ba62a3d57b5eb1d11bd9f50f4362ba23f5620a0fa539c1d92448502c228463a1a0263b27efc5bad0cfab97231735d21436c1d51a12e2b931e0151447ed5140be56b4689df79b1c75e37e7d7eda3612d2ed003258a417932e6d3da4867654877b8746a050d7e0fe16fdf5aeaf959ee56dd306f8d122d872efaa3ef2377f1ba221f5a588863940e207cee2bf6af67b9e8debdde1a7b5b013850f7ced23dd7f97e4945b21ffa314160ce174b88dfc92c562e9613b34e2f2a62d85043ae0ac4f8db9845f65c7e0caabe87413aada619a4e329250aaeda63944acfe89a5ce68ab6c0337c2fefc9a81ae5fd2dfb913afada759c5fcc9ef35b06ea1f0b1f1967beaf358e37b01d178991aed7de28d66802dc822d84cbebd4feac6560f0e8220b243e0b1135c3d0e63dd77ee201cd682945170d7034e56cb6df190f6a50734ec485d09299821d5898a572987aaee366ef520226654ec4cbaf1b90cc69efee42ddcb2bbdc74880b6e377946624a319cda70e4202f69ea51dde5ec3407d552b68cc63ec23c876691a7915a69828281e434e0e7daf99e29db325ce8194b569630bebd7b6a83f20be2e00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000861522c2a4de307b40f2eae830b95f4f5b474ae0ec70fbb42aded58fd9b4068ed473c9466d7231c7b509cf7be8d0411676906a0a94b75c64ac08096fb23a60bfa8befa8b4ef04851b5f6aea8e472a38133ccb84cc5ad84e8ad5972c801952a2995434ac3a6ae567f84e222ba88645dbdcb73c9518ae9af6e753bc589853a001f3bddb87bc8a92a85d685ecdb6c9d99f0f39a764866ca635544a2494f79055d516cb99c724864aa139506b16fe3adde8847973ab6d76116725eb3077f4952513e7249d809d836e3a68734a146a472ac45094fba0f3c3b3fc8a47c35dfbc3e3f147627b989307a801ea655e2798fb836c483c780aebfd08df397861a068a3bf1cde3b9aaae266d132cade098a54e90075847ffe23aef8d715e1b9e44a706b48c8a2d58493c91c2b2be729e3825b62176aa060811ed0c7f37548df51730afe4626d6100d60f20869eb74159f8b2e48fe72a54c3cad556914eb3dfc2041b67e10b68c9afdceadea181a44240395221ed04da8d33a1c815d09bcae6262843b0391def677cfcc689ee19cfaac98f37effbbcc923f0fed42c71337abd8c9518db390a25c14a4fce049e8e012891f55ae09d729363b669e06c27bba163b32a7a823f2dfd000002280000022400000220263dcf5dd5512dbdbdaf7aecca2fc35b94a6c4e0b0a7adfd1f88572b2d49e8ae000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002430c3b8c98ac51a2094e512df8c4383f4e5494722f63a7e6fb31f1111e9d98d42394e7199f4bde3fca8f9f1be24b8aa4397a394b1ffd3007e30f67a35c933a014b741f6aca402cd8b93b34720738f8a06d946ffd18f5b14cbd05535303eb53f55e1d245759380552d0f7aa35dbe9d39781a2313ea0b3c266f113fb715dc0a492ab890834f98dc1ebca0e1164611c64c06911553e4de976014944ea1e671842b21e06ec06ae8e605bfc473b9d7628910a1114fffb28a2944079be73c74b81a07caa7589849d471e70bcb18fd765148d7044f3c90ca3566928689209f7521762c8abe583d00d60d0959ffb56d95b364a26b186c3a02cafd9d3b709c0b39700530c3ed9652de33b2624cfca475215199a251b11d95f239513adfda6210491d0b49b9d27282961ce71b90b8664bce161e9f51433c1c2d6a38f18fbc2af83ef7f270ade4886cf19f2d531ff20954fe63f35bc8811df427665f8ab3ff2d41ff0ac5615c134dac7e2127310b1fdec9284a965e4ddb334484daa91f627cbbf92aa476a15f6da9e4937c78efb40326a3d3c66929159b6860303e43732d72febad3d966b95711d6257b7eba998194f8e04ccaffa501a2413fdf82321e7f6faf886613ee14000000040000000000000000000000000000000000000000000000000000000000000000000bec47b002004fe36c8a61d8417279ea2d1c31f668e6f0105ef8020defb6144353049241d018d6fd8d21d80a1141ee3f5fc4d597213476177eb95bac66c31212b1edaf7dd20220bf819441897ebc70e55e0c13d427dc08e2863598d789e39d075f03443547871f30cc87e108ec69e082f92d56a52bfc649414c27b9f92ef2ae6bf56c553947c00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e52fac87fbe6fc1a3010577f17d11f6a60f451850165d4315001057f54459279f712b46707af8f63777dc560f529d4e14398aa9da29d3d7acde3a121f47ecc33e45919b3db609b06924ab80ab6a01eea62665c2b0898a63c5e05655fca59ba587808be70b101c403a83a1fa2eb2b5f6a9d0f0f80f32ec5c56b6ef0a7c186ae7f67816e807e54dd5595b176668338b0b2de0836e855b94c5fa4355fefcd910e9f6ce5b2fa08e754c0bcc4b50e5352168d25f7e162fb5639de4a2c44f8dde6f643eab733abba7142483d4be985ccf2c5d9dd14666c96aef5a29028fe299cd723b6dbdb8ae3104d87da499ffd968137dbbdad33520dd68626b92fbab106e39ddb46d48d6eece1b3bb951d4256c073cd7874345b65f81d97ab2467a9304ec715a3713a73f6872b023dd27288b7dcc316f2e5b3b07a4af89163f7a294490a23e84c0ce2a2032921f7b647dcfc383b14c23ab5b57cf4a1704923a46123f0eadd75923a1c3270a3351156e03018eede098635827cb813c9610910b21bb3b60ae1e94e1d286dea6ab7f790455afc6b1539c60bba11da9b238bd45a8f4edf76cc76fd0ca74f944c826c9c38ca997a181aa1d5d372ed008a6aa1c4e9cc6e43a94f86a4f220000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ababd816020fca08fc53ed3196bef0bc4167146e895ab1c964d0c4d355303da7bff81b4e4a722e76892a3712dccc3a1be43e5e5143c580544ac65d9992af25a6a46f97e518b9ad67a791687ab848fe22cc93d7768e5fe57ffdb216dd749f4b25c101d68bc986505ccbf676332c8a7653a99bc49605df898200f5975c6bda9f1a8f1175094c337aa031f63d71a2373e283e034042dfea71ff326f17481f967551de41e0a8f46e9b26d7aeb47f9e14b12c9b97ff90165c42a8467d3b455e39ccac4913cf002f86fb336fcd913cb07faa08ed19678d5a7ffc077e2080e4ed86078895beb212ab9021bde83e8937b885661986ed1e8a879ee00202f6bed7f3d3e6a0598ead3f6436f5f66d7b779cb405f5e400a46866fcd7802319810e2c3f65352b89a66b9e5808cfe7c998a180dc856d43642145be86be6bf5345101e917c0d65636edd8b3621b3e1b732da8a960d9324987318e0a53c77a459b75364d8502fab7e118f6fec620365ea8293f893378b8d80cd485942f8a3120939166f6b0615b760cf0875995c852698188aaf70c9ec7d397ec225e981e698bbd4f6f10a4d9130ffd17677063cc3fd5d6c0cb682a7d03aac5decb07ab10429e0659c4d9fe04bc49000002280000022400000220189774aea0d9cc90911b7897c15b40bd401cefaafe6a77c8d1275bb1e49b2918000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cd7fa0c2200f873cc5850b09f9acda11a34f1438a6ca8f31f58f06002a64851fe48d519782977a8bc6fad02828ac629f1cbc2870c58b640d521d28fece44f518517262742d352493d26e476516eb99acf74da5a0804fe358d33553c9d2d7d22b675a0313d193d122da0ab725e56cd638581ea24775330c4ef5c770c3c88ad9b7d93d335aeac55893d061e9943d4fa00f96108876e2babc1ea7b60ff404b3476280733e975dc1059ea88a1831d1a569e00ba2e7fd1c48687e8a5e003f271182312214607d300da03c347cd2c2decd9e7022a2423ff5ca75228525a8ae3a728446dda6e84000dd67fba08174df14a23daf226c84b66769ff26974fc85b8b2fff1913e216739ee8b813b30d6ea92da235e43d943b426f7e754b19de2f118515db68d37762257da2a6fd0d94ee00a933f0cd51c918db02fc65731815154a257967d3ac6ddcf1e219a9a29af09380de683cc9c676a472db76abb6332de6244a8381616a4a66c95bf4bfb3c94cfbda04848e0b441a6f8f7714b643e9353188328fc7a3fa2a21bd201d541b8e5127d3a79ce6985480d00c64a33ee7a63521b111204385bd8c5a65b67be00d290c833bf3d6749ec2ec1dbb79227292d21a9c08a8746ad000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010499ae4be008eb0414fcf4d5280200432e0202900e7eecd85cdd4ad1190ae2dc02224e00c35e5165367e353531a80f06e2b4e9814e2e9692e3e1d08c4e8459d38c0fda627e43311bda7d2d9cfc732bde03264b43796b080b5f3cb1aecd1d5d1b39000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6f5586c38e747cfa10b14176be9a46182c6329fc6f479b596e16c9f4f04792ab0f82792cc94b88f2a7f2e6f0f71bdf4770afc8e51149de6f2d86819b140fa658cacd26251927b9cade3ab5eba8480e44006628890f2aff2e94160fd879dde1af44b86c35161fe05ef5fdcc01b11de575fb2999e4465c67985627f1249f555bb2ef1f9b7f4b2670adea1343234e12b9a74fdb93ff06b9c5d91d294429f4f02fb531d7a08d8dd32545e4a16a567f0b4d8dbafc044ace1642cd1f20f103a46072408733cf3812c9d995ed34853f03431d597b63bb7b9fa8d1fc53b9aa17f9c4c7874a4f87a930f9a6267f690730cb53a212775617858170ad06433cd6316bf482ba5e840a4cd270234e38c5299b6e14bd017c42357caef5cfbd6324bcdd6e4161061278b270b186d14aeccc42e20ceccbf5ab8bc7516a44cf94ebe0c31ad2bbb341c347b4d3f50e6548f9460f40145a956f72000cc6d4bc68d6c7713c6d82694d90727429b782ce39b5808df6f36ee4a5efff293da4b9467eb87cab48507ffe5724880297eed01a9be57ac64333317ff313b02e86ae287c64824141e3bbf0e355743dac9891543b340b054e5c64c85c7137d6dc743e9a13491df2cfb4d8fe9809d00000228000002240000022000f9e87645714ed5b7b32b986aa29a9a18da964f338486603a22efb103a9de8d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e1034daa36f07bc7f1945d945131ac9b2488e17a68c7842af9595d3798dfb37e0ca32ed8719a0bd7e876fb017160b411c6ba2acd3f4ca45fe88c9410df392f5b6c95c908e84be7869541c5e2934cc8e47f66f02a59fa056b66b1c0c085f6052b85f60dc5522cb0308475bc01c1b75103f2b8776d801234d8c11cedadfb72b331f0ba4d114af9ab77fec8fbb6bbc22972bd6411d2b81788e7715b1ebb30f36aea30677636d1f21b998ab5969aff65ea1a82a0fa544b6f4663283244b3e08ceb7d1a9b0e3bf9adbeb092234c633418aaaeb94828a1deee338b1304519e1a4d668e9ea77df5fca12ded8964eb97e435468d7dd4b2a8d36642075e0ce01f7c0e95c5b431f1bc576753fa822dc05fc271d7b2379db4bceec428f83efb53b448bf8dadd772183cb1d161788aa13b0812356339c58ee37d11faab48872bcdd137f9a7b881cdf02af3eac1a37e67efed58bed543f6f0315066947fb24e13371a8d28284a40230c81576f509df70b54cbac48e0f7f86d6d17ce579637ccda2569e49d3b5249d7a290bea5780e4f4ff20733483366d6b806258903aa9ec083daa4c05241f1e3f66395459ac260b7665a710954443ea9bf9c397c35379062290773bb8b40000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001055da85a2176b9c8427ce614c7689853de02fde71d45144819ba9b3d71ef7dcc02233bd6c43a90a3bafe7ecce61f229c8030a4b4e00b5effb2a42357b2f44607ab2524e20d855bfd08c206e08c58b47f75751827d2efaa7be4f8b729ee68ccb9ff0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b42abf4d1db7d0f0d31b8ddc39e809d820c69208e66c245d2adc8a62e916ff6be75bc5aa84a7bd9e6c719bba581bf91e27fbffdb17c92a133a29bd9c0f24a49b9990221b48519b4ebe810f30d9bcf81babf85d5b97d61f1ace063157dc437a8afa933c436609c4f897397d52d1b6b586eb51995a92f2b928cba9f703b8dcfc60430713edfbf870470ebd2b05bdfd4e5df20abd007d31db9ad39cb9cd2197e54e8bf87253177fb7a0e42acfcb7e55bcf82d3e7985f9afb4768b89b85e2cee4c0b3ab9f6cd1d6f79cbb918b1c6b1860927a6927fdc2d99345035c98df669c0ce69fa76e33c13643fb387280103e09445334336b1208d83aba90c11408bbd3169fe9001348a57903dde5f555ec0a22208b02e4bcc1ff0f44597a444613a4c4dc1a7d9df64bd4f52d02a04ed41a6a7a682e6808c6d8f35777ea1191be64e1359f250dce0c31876929c3fe4c4e5ee64cd2fcf6c1d2ca2bd47c50e37d1ac83dbefa7e2a16ab3c776a761088b29c11aef2a335b0265a2b2963cd3c52bdb71a4cae8748eafafa75f5d5978d75ac85402beb749179080560a1178c4b5d35daa7244637f3b83f426570dd9935329c519ff35b5443208e44813c4501085bfbe9a90c42213300000228000002240000022024541bf867ca27211348ee1e4d43069edaa4747aa5a654546c294232f625058c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000255b85dd7dee98e63b115a6b1c7fcfa7070f1280cfe4b684ae08fed41abca5f10d936e087d63b77e8209a5bb94c615877fc166a12c88f185d616453f24ce31aa215a43ef50bdaf0b62f9a509f8a3ca1d00ca7311b3080c601891811a11f53ccfaf4b0db7145a978c9d597bec3a92a4d64eb8390f33d4c17a29a9d7f138f94dc9a24925f5192912fd7107715a2bcf7c0d0a7807dfa9d15e80e7e4228cb6287557f65a1273c66a9693f4945a8a183a4c3084c85e1b2c17bbf4096902ef09381d85e94a7f1bac2dda17cf8b16d3da1ea59ca96cc16a6aabddfa6ce9a8330b51c5ea3e9027d541f31724576505ca78aaa71c0064bdd0fed76267ca53338df8626d2dc1be2c68331626a6337e5130b28dcfcf54f0a2453313b5c26f2984fbf332cbd6b856b8a96465eff1013759df35bc4278ea038d59efbc5501bdf0467033cc3948ee1a4aca87c668b72754ff2a19a94e19fa8cd16f7c8f507b1ed03a36d12b111e5e95e44da1496c62ac3b9781621dc225f7f9a88f567e526a109550c5d6edb3b6eecf4113916509cd7034ddd87174621d4ce39c104fd4097a4f4293b461a6516fc1552721a7ed514fb53e915ec9787837f4ba4a90140edd10f802f628ab560527000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001196c219a23ae51ae03e7def476c546d2c47f39e17d98f9fd536f0d34f77604940225cbf58495c7d5217df2a7759d93f1f91919671b6aa7a5645e6d181fb4985e7e2fcb3df71dacd34fec5b8fc13b8ce8882961038a999e77454ce9a9d23fd62dea00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087b798ff71ac2a76d870052eca231556867eb4dc2efb0ba1aeb55099c7aa7f5804026f9d7b48fd33340074fdb5ac92b7e4bb10214910b6d7143a02607b99fc3efae2dcc716bdebcf86d8e27ca6d03a1179cf2683ce817ca79bc7c4a03a7de1971f7f68743b1a613ff716e5d1a63ecf1fcb78037392fc7cb1423df4d6979ac722a6f9e87da608ccdf4902898c36408a995202f50b5cebbd5024a6bf70fbb8291658bf2832cae8125195ca289b22328b80035a8a0d83a4dd18c47065e0aaad0dc4ec4d007fcf63a241391f39b36eb5583f3968f921fb04e8112b19c48d2eca2840020687530992906055e24eb46fc767031c98e103de99b02f8fb4bab67bafae5ff0766310d4eecebbace478d85248936e758aaec4ea886c1d037feff01cf3a0bde3edfd866f30901b5abff0bad5cefee44a708e8774eff27d8610a4a1ce4ce67e14bea61dd3865fe7ffdf1449e316a6bae3a5f3b0c5e268e472a2970cc2449465f0a7e8551dec5f45c6f771f31a180d6524a7a062ece13cfef967c0e21dc0d110757f522d9f49b7398a0b0b2a706b30773f6662f33349c7ed35df2de9d57451d6fe2ac8cc460d9ea12ed701bf983bd5ac54a5c7648824132c2291ddfb576710ed000002280000022400000220094113d03aa1e16f85d6f862ecd21c7cc95cb64b01484fb55861ffd8e62ea0ce00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000968866e272515a05d9c00eb610ee07c3c3d44ae985f3f20a1b7172c7c88c4709f8190dd33c3be329109909e2f690678813b0aa4aabb4ba19a890af8bef47ad455c386d2fe4983054df83342abc9f202e1fca648d43b4aa924bfb32225e521dffd424180520609d1716654e0af6f63387b97526333b3349a58d1b4ed7910ac0b543779b3861596c92733356e999b1f322402936bd2c2aa6b714227b8e8d2a786ee0198bc5bb503872cbfb52406aeb3aa1082f7e8bf8e569e48c96cbbe47fb6183a1e288cbeb63d79cedbd372a92d836a212124fc578bf671c7ee52de3894eb30d024ff17d4afe3b76714f8d399a9e12c086d56fea609c700de3589815f10f398ea27e2231cb56d2bf5bf9110fdb5c8afa82518fe26da7a02dafd0b13d05f62a57bcd96b10e68a7db08a062d7f82d1c2ae3a80145a298874d698a7419b006664a2240748eec820ed677784e3ae1c31766d4e13e456ed0375b00316eb0ca50c39eff565eb1f087306bd35950024ed05b75f36c5218b78ae4bd3981f259f2971705f4c8ecbbf9f91c4e3bada136dd749e71802873a95a5d0f2e645ab841e8e5b7bbfc1fc7399af5113ddf2dabee00ec6d6cdab33022985b6c8eacfe8ba7359af058c000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020b5c28e5e3ee04a409159295be0f9d18de192e4bddce5ba087f26019a50398a02190973c33a9d3eca12348eb10c9097eaabe66b748d890ad02d76032fc63f4d50226f5f31d62dac2dfabb76f00bb59d135d6189f86392a5a64ee8e416e697c9913093e1246b2c25d6275f18efc6b9bf788f2c8e0e4c387f00e3de362799ea5741f00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d5eee7117f0443a667b2a167a1d939309bc4deaa0e7879a3087877f41c2d26f88f7d08b1e052e25ca8725f91645e07287c55b8324c26de36a43dd5406cd7255344e8b7c554ca14b84a185b2a12ea77017219f2ccda711e3a8c8a26a0b6f67de41ae8ef8e255dcc4c4999a238c494b29f630c18f86e88de40bcba3d4f63edaa3c6557fdbf7f5f22ebcf0d9554a375a5491c9d320fde7cb13bc8f516114aa1a0c9d597e4d2cf90798868ec925f21050d379a7d9760fb5ccfa2de52aa621dbcc0c93307660fe3c155ecbecb352c00cedb68c3452821f94b2566606bbc4e506c681e83cdc04b68fb26295babe45b1e37dfc11656400e272292755b9eac015fa8925f96f9930556e66e759aa135b0c18125a9bcff49d8f629a36f3ea5d30543f769d1ee1b46dafdfec7a3e2f441db1dc53ff104d4936af8fe8d0665811b3c1f438f8106903c06ac9004f5eb9ac32c58a406e75052f5584a8b91da1b61abad8b8a182d67c3718dd76352b61034d674a89fd160a4cc7a31a9efee00d944a14493ff9db7f9094b591649e42ce99c616c50745fb5b356bbc4ddc5c8641c36dbd4e497761813d76720c91224fc4de30178c795dbb9a14cbfcaa668f47984437436f77912d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ca5b9da363983a3252fb480d5aaf93229cd9582d4c0c0472346c2e71ddd6d7b4fa56e683cbc2c6feb57c3851aa78846eda6221fb67ace9f0c6319d2e1747300c5d7c46f5f2dcf6cfecb4dac57dca21b0bce85847262fafd5398b00323d96f531f16995c13bfb714d147d7085089fce0d3284a8f4429d0ecbadd8b1865651270431e81f44e99610d41dfe38f42d1704e1f2b85d8a43c3a00b5cce030d6043b5a7cee626256c5407b70075228aa2d7058bffad66193646f896fcfba258ac040169a5dd237bdf90bea6a9b150f96a034bdfee250416390e83ec93a57393ffb295a1f051bf4c9e80f2306b14bfa8a6836349a2a365b9bf80e8a796d04a6dde67852a03f3bde4fe9503f9fddcc9db0af9ad22d94c2b93835c0a7fad592e33d8c247368e9685eb8af7389e5e6bb0021552cfd55517fb2bf62c70565d4942c64a9abf23933b08d454957dd80c81495f68d9c703293288f9d01925fcc8e564f7fc688ee08c8acf250cb87499133f57e8f5115c077888ee9574601dc567e6700144a0294fcefbf41af2c123124ad0a4be7069cbf6b06cd24bafa76eed2801e71497e2f5acd5354552e8fc0b54a4947bbe26c96794a73aeb120d9155781f2f63401f14e8f0000022800000224000002201d85eca52eb39f0eaac3c31dafb8c82c15aeacc636ae5276cef8b6e00e15e36c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096bc5e5f32dfbe8ec0f23dd7b3bb6fabeb35378dae6f77dfdce0ea2fb90abb674da6f547972fc39146cffc3447126583205eb96cf193a179d8decf9daebaecd12f751533bef3cf27b0dc86455b4792a05c30867b3f4cbac305a522e2138d3ad6e3ab4357dfac819babe838539e1c834909d952e11bd2cec7130f9cec2c64593c0e9ea862f1fcd7f6118207f92dd2ba73b574f16b4ee2e67188ce0a1f40c611743b484f0567acb234d054e9a1c477897560a7717e323faa854e38fbce1af82bf4f0d4ac1007f520da10794b9d72a8c98d76c14c26617aacfffbe11f8693004ac436a633d2060a95fa4a3b86c231fbc12b1ba71a6bad8e9912d4a2783eb17101d6f5cb7beff9ac1c2561e939d73dfec204cf5943164cb83819ecdb51e0e1658dd397fe94c4c5b90050831f6e8ccf61a78294ea72b83f44994f107a866fbca91b7e8525a95efbc9bf6b9f63eaabf8ffe9de6b9876f530e1eb9683b88be4026bce4209a1bf4d4a3c7cdda4b3389ad0667bfe0267ac3f26ab3fd747ff2243b7d8d414604d12d744377b6020c9326cbe7831dc1f163e986572cb3539f7a1b304b5fbab491cf7b996c717314825281e0246aca902a60a91c0789747dfb5df733f181202000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020413f2340a80fef338d7b9344daafda565652c92e92ab993bd18a8b9fbff52cc1195496ca514d8834f912926140260b08758c87b6bf4b1f0126b880004452fa002290322c247de3d1d62fa8ab3ecb75808e9e4507bce5b3f356aeaba0ecbf99cdb16f5a3e7d032c4cb360a41be3a4e13c91101796961b25ff64124228eed7fa61600000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000166ea68cfaa2aeddd13efbadf3cbdfb93969867e51965f31f82da95e50b499c9c228bd890c47cb30067ceaee4aa5d4ed51ef3bc7fda85ef75f42f186aa65fa99e1e15be42ed1829d70c6baa785237e58c194a9d851d363521881ad5070ef05215e3d82022f6739dd72147e3a75063e71a7eb40b4b088dc9efd322ec41bb4add59c721c023312c4d2b64547701d73d381bdd6a6913f4f9fcedcd4b50d39ca9d77ca18f7603f681a4ca4ca8f878b45815be800f5b3e08d155c39e67b917db58bf74b882e55b72ff858739223cf28f48cc5125599936bde638493afa663408a0e0cd3fc0412ef425465f2f03682409ecf9b5dd4264bb2b8d9ac5daa9bcd91efadd7082620cbee0d95cb23ba0133819612dd56dbc01e5e577cd6bcdba1f1ab8f71ad97a516ac46f9c37e6272b345eb8b8f23d28460705968a1dfcc266a24a6d62e061d5b5c166fa69357002dda38b693a39391f7b8b0f0aeccc62012f46264a4e4f6db17a490a4f4d5d6329f479b03230bf4692785478d3215692dead622723bbbdc0f2912a126511a5e7c4700c88da916f82c9379dbb5310dfc80be765bf6186706e43f13512c6833fb6762e0e4b5b459a9a153e2c14712e242ffb67ec96e4256d8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012b2d187714175c2176fff223e8fba068e90b60eea0e5d833a55f070fa58b19783eb05cec7be8c7e381f3f04d1a4694a86887dd88a713a8d46bc320c3677dafcc1731df6ef6ca2bf644f293827399b0ece4e110ca8d979ee867001092416f2cec5d899aeed1030539d31056a7372683d5422c7cb1e5ffade6237d0bb9ff32063c71a9ef16dee64bba397cc763d699e8d86d1fcfac1a9bc48f7c3b0cd31cf929f631048c0704d54766183477e75a176909fd1b2fcc92ef7ea1c6c738ab94e5722d6e548f87f151f20396ba4880f2a60834c7f845cc7b80c63537fca046171b710cb108323dc20a3776a98c228b67e42842f079526446a13ea5fb9bf42e5da9945bf4f67bef5268c62ccde395c3c5d5f9372881b9e9107ef55da61d8033da893b8d8bef997b924654bdc8b7eddecb7dfa29d504af2255eacc9ecc0ab73667b1e589ae3dd4b24cc2433d249a5b58c7fbef5d5c18f5f921c8084c2f6576ca8ca3d603931ca303db8b3b2810ec9f270e7706da6eea69e28caea0293fca625f0754330de13e1fec9413a966bd81915622293a4d80ba3cf5bae49558a919fa99f210d65ff5783d3293adf79b695f6acdbd96efb7e4225659c17ea3c8de72b8f2dfde18b0000022800000224000002201af37b2c92596c9993e4df632401fd9d0633a93c605d4ef868f5b288946781b20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013a475f90a4e97b9137d5b2682393d06b2d19c8bd615dd1e94092ef403f6a929b089c72f6509d8f4d419872fae36f69594f261e12d63f1170d1392ae016c96898976b44fc4b18ce0ff55509ad400b66967c8f8b34ba8dfc21a447779fbc686946ba00b4e48a685d0db45c80b8d837c416635460b44a398558a0dfdd69949e9650a6d63eae94175dbe4e52e7d3e9a092b65238dfa267ab994627634db0cd7c8eb6d96ed50fe2b2532725b9c019e02bf1e0cf6d8288a2d2efdcfb29f30f60fe0302ac7261d90f8b4f1e3d0e7f1740a38eca847304495d7ee4c5be8ac89f071a39d7af6ea5a56a1b95622e215b8717b528aeea4ce89e1cc214a79edbef74b2d47773d0f39d2db1a0cade5ee7b81794dc1b81c712e1b2d4275aa48f83cc209196c9222d27939ad434852ea05033d3004c91f8fd911f35df6b000bbdb7d7186b37cfe5a1073ac2d46250b299a3ac1bec085fa012748ed4be715b1cf5a1ce36f1739a4535c2638db4ddf03af3e6cc4b9a32fc266173ef852d361f7cbac9a1ed09536dc0577522ae9d9635059e41bc27f02afa4e8e53ceaaee40b3d7239f80bb7ca218241f0989dcde4504fb2bec76490891633ad26edae01095d0833c688e15966dffb000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00210df4c485ae30b04308719f8adbead603f69757ac53cb4a752cff1f933d5e70218840c55833e079f015aea8215dc9fe3d4480e0c63971a9f58c2e05a2cdfffd2022a748d55a2b0fbc5efbfc69fad9e35c69d8f360fee580c3cf76040031b5ef49500afb785ef545b5d553415171aa12b39c8a93fff88f71d0dadce959ab444693b00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098681cf6ae327d4c61b43a0dd6f7e542a7a3330358c7dd49bd2f71fb7c160e1dfa4a795589811161dc61047134068d87298c02a6d8c956fcc6fc1dd8b6fb0a6f1c0d2c207d42c7792b205452669a464d56e1056ae50b2beabaff83be2c7be0cef65426d3c75767f250101514b532df0ec8b6695f274e086fc7b4d089fcf8b5da432dc5bee42058d0bacc5410553857b58e1f1cf1c30512b4c0aed1df20f605a212f38810a06a15df1319253d5fd9509971c0f7bff6969161463dfe20872aba4283f6febaf50928b6cd6e827196749353996216ee60eff917a2768e5e2d711b061cb085ca62548f3306d18aaf48f2f001ce64aa177b98a033ef5e7cb07f242e4350efc47b9fe1b60fa44edfe5bc4da2612fab2f139408e9fd2b44ce61bce9794dfe12aa07bad0f7c39855291aba5a1d609049834dbf331c447e003b2a964c9e2f1b8bdfbf91ca4a48d6f570f04016158e50e7aa5045210eb9de80a6893992e8995083e3f1f665c02e4e4d645e43266e2abb3b28bcf92ad58749deea050c0350679716ece0928fa463d40ab16d08398fc7f495e98cb2bc3425923c0829745f739b6c8f765a5ee0672573180851fa5e50e23a2b9ff6bcac578e5f6b6632a895479500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009dd00403a39eb9dfb201f6e2629e8d2117aec5d2188f6393784c12d49b3f0930e4cb3cb0d5aee59930f1e7be877a45a05e0675cc4bad70d1f4256dee8540f3f0b2436b246e124eb793307fac8ca569764e3b1235a6dd0f38dee36813c812f6bf46b0f171c1ff77d1ecf88c649aeb39115f1a7e8c0c5007d3dbfcecd591867612aaef8851f69922e45788d2ee8b8c5caa246f7777a08f19ddb21c856d1b1c1bd11d80ea3a7be96441db92c8dd9770c738fef7bff878e73bf39fb55b1fac78bb0ea88591adafaa2e2b7e74e5032f3839c69a07bbb7acaceb81452a9457dca7d0e59ecd27c8cc7b6ba395105f7a568b062b45baa0121c4bf4bd30aec3e679e1bde68b1326e8e9db1b50a856109f9de580434da2d00e52a5eb85dd114d29c99d4e8f98656fb9ba1a4a48630e6d23c4efc70e0986693e9deb70633451007bc97d76a68b4ba23c9d445138f1b58e89bff52bb1c43c418c0bcaeb6ac16a8a46e260e1c8a6993ba915bd2fe4c8bf1e07fac08eaebe083b167f9bd1ed53ff636d578a3523af6982679c86bd8e35723502b02a2f06cfebb3f7359b9f348c75f62f9cc0e7b92bc6b5c4cb18cecb3a4cc10ee11a589c1591b62d541dd9a87f884bef49a6e8a900000228000002240000022017610671934dca0dce2ef629c50e7a8bcdbb9f081340561e3f8fb09aa23e9056000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008862b8e521a89b2ca00efe2c2b43c0685c83da7b0986a3aafde17d807e818fbf756b2cecc59b169013ac45311ae3103c982957089ecb57424228f2b94688130fb7fba0a770443d8c9e2d52c9582dcbcd6408777b62b75267ee692db6b410c6ed9a98a08a8e0c8c8347cbea9f19aca492574d2ea996316e087813810209e7615a4d67096ab5cfd0d0d34207e7bbe975a821079e5f56f1ac0d2360dc8055232f0d1d266f49170b08d9b2b43db00085d7a4bfcf088a00d08941757dfdd5e19de8dccd25e1f3778fc38382d234beb00c65431c3e33bc9f56691b1d1980e10c8164c263abd0025d58349efae3d5e26ca223fd031405693f320704bcce55aeb3648dba35e14f4202146ea49466149e84a2ebd08ef834adac0aee6efebb7169b26e6c70b7814178d9be2d86fdebfc60acd162b2f3a83777ffe9ba6c7e2d6fb1cda8d8d89da9fc86a53b01a6d720cd8bd8b3cb742ba5c9298ffb50d031610dd07655d36027ca570bbc4a376331eac128a7e6c88519bc7b2ee3be3874ce52ab163ba9d983b1ea3fcb1d151e3567fb239c3673f8239c4c68c81f79367724f04ea1b5307a3233a8a83de551f396ee03b38d43163f835dbb4def368347670ba055ce1c5f9e6a000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001076326047a7af29d13eaa8becba9cf9f06d6f8a0b8468983ac99ec238a05505f022acb243a1f72c51767727d9ccb786e7915961702e10ab87e0423b616b306be940eb762dccce491148c5fc5bc9d55938de9aee0309b119e9fde7e124aa3356c640000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e51fcf8ee778ac9ea1ba4bfd01a5293a6346d45b25d41ab0c6388289c7c4a75219263c41099d8742ba18dce934e1ff3d570276b09f018b66228b8ed086d2b3727d7e01ab478a15e1ce4ea668fca1433117ad1799193c78820caf3d7bdb9b6fb1ae91c2b1404a006dea105b41fb0849a9a9062e50e916de9a7c83009848ea046af8f14c3e7019f630bd1a0fa7f61c3bf11eff2e6282852b9886de91a7cd854177bb06288c0ec367af6a8f669cdbc31cc51e0f862af22d1517e75b7190a64c6ad34fa99ee896b9a148599960447b459cd3e66ffbbe1cdf650659b43d0d3576edea867276736d39788f5420f01729c709b708198e7e31aeca11ef9374197532c0ec600e6ee5b7f0e64fbf32335b163c16177501b869e967db59c1df6a09d8e93b0b39078c5ecc64c79ffc48d84597d85fbaadd5eaa3451c070cd78403e96dbfd08a6cd33f64cf22c60387b43ae6ebbe345acbcfd1c007c3168a0bf417fd73fb7939d445a1c9998cb5972301b8b9715454382f21362ec7a053f5bc7b1d6ffabb26874b9ab679f65b41035d25dadca1806c269cd10e0fb97247790fb09e25dac5d9adbfce38e3ba1f7fbd09717e8fc73d1ccde5114e6ace38f0bd4057eb8814e38a900000228000002240000022029783f1e794acd2c6c0f07706840db9ccdd7365963f271f7fc713bb9a624437d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000259ffa9c5cf26bdd7e80d5b14414ebd9e3e1124d8252d50e2116ffa086bb2e2c603ed492fc56678feeed6a2ba9150fa4ade3ce69d00a3c9b40cbb96735a17368b73b1985aa984e9e18681fa6115a275904cbda9d904a4122105988adfa90361ecafa31571e84b877446370cbf3fd1802f51f3cdfa94f6e984d48dcc11d619bcd70f828c8a8c0c53f66b759d488371bae0c3c0f912f13f5233b118dd26e58bf8b6718dbe519c10b10756ad165f93aa549272e39be599fd1e981edbea64f4adb6df89bd97d68a2288bdb5d3ec166e1174924537a51028a3b6bd1487d795ee5824ed14c409db109ca37527529eec2b68af4876f3097c518b7c1620f01e0c19858547ffee58871a0580102292f37ce1d5e0b85ee0c65e6a42086e2280e9e1babaadccbf8165a0a5299c083b06f46bcc69a5e36c7a58502172a9a36719264a9b195e66569412a2d6dfa3eb2381a441e07178d73bc6ba744f99c1f735e5a3d94ecba8cf18b75c12b82a16a584fc6b50992394a048512a101b2a4ac2586db04e4e8a949e5f6e9ba1b38db6b142b44995ef9ab9245a17607c4106a989323de634e0684165ede386ab33b9318ad1637298654935aee22360dc77c7c8f588d069aa37e6dc0000000040000000000000000000000000000000000000000000000000000000000000000000bec47b002263bba3d42435b0ffa1f52330e064ac23f4b4492605cef485f49bf64457841ee2f67ce691b4ff16f65035554b9b0eaecb69e9db4362e50b7b54cd0681ef622cd022cb2c61ad95ea43e18f6c089dc043c67ebdf31fe403ce0a10196c7b636d94f97283e3345193438986d00b80334ce664465190ef30db5e632b5d44c430160440e00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a64007ab95a202b76ec73e1e1f563591b98d149232910e6517e182dbe33f629f9bdf60c3b2d491faa29cda2ab9732041442a7ddbba71ad391741c7c6341faf98222ac054c758f910606f7b72936aec20141da380bde27efa15e2177ab6997bb4b27255bf16d1d30b46c311c76e60fd7e39f88bb240dd6f8e48128746922398b71b00a98e408445e416d487731249127a8f9a7d6fd8e938fafe8fdb15b27f16d0cdecb9cdc34d8390c8e451205497614ff57efd6eb0c93d4a6839808f25b6b43c71cb0ec3aae521d8f15c2a8b298054a30e2e1122b82583e4829849c4a3986b72e36342a1903318c2df9b4864b2725a5d8bb969057ae0603ab7414bda3192b8f217d131ed5a57517410ab379acdbe2c1db863cc09a0b16b9843974523d4f0ccf4cedacbdd5b0bf9c23d08f55b111a085d6a1f91f2cb6c476665a3ec89c4535952a59af653e012e9df047e4e596600e299e0ecf14a4ea55670b131067dcb0db77759e04187e6e967b8a4e1e0796469110580947e0944822875277df3f072549af7f1a07ed2dccdcb0f8f605f63b17b615d14d83f8cf8f70c4cca6f5501194924fc4c1735d1ed429b7ac04cf3532a120b18abfac7655822402d92b352de5fe2bbf500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f4f237f4f4a7a026b3163e7d031a5ef0a33523a335bdb7eaaeaf7ab431a5c64d0fa9032b83a087afe3ceda5a88f9a9c73d64f001474ba28b4b6a65b7fd6e668e7dc31680b90142018ab3f274246653403795a19c7334c45d84a59021935454418e7db69610340714da0ac9936145b25f71962935d12cc457b836e0d9cd55e2a1abd383f2d0906370036e70d2b7fee26240e96f7ba3b011c39823673085ef39de1f4235876cb181277b4f84328c9535882722d492499db71d2aaa1434521ea1617a4f9f89c6e27a614a250ff51c81f59988ca26c3d4934a3479969cd6053b3cba7e32c39035c084f34e2230d8e349e2b2f118346c0ca0fa20e6e07a25c5b6a5c89cac362a54792b7b9ca028255fdff23380a08de0fb6e2e1ebd2cb0e22e170f534a5094da537f404ef9170cec33c1151bdc3543db6f95717ef9aa9468355ff98cfd7187f395160ec74dfe68e7ec26cb6065b66988b623305e34d0070d851fee163a20dacd115ea74b9030634c065cdd6d5216565fe30592a4bfbc38f4779a4bd033822bfe3b3eea02618e23ec2568e6e5221885cf55e735e169f6ab23943cabda74fff50ccbb9d812bad852558c9ec400d5a3444957a71c0137628a3cac6fa78000002280000022400000220159b825d780a29453a730d6123c17ac10d1947974c0404be0414398f637fd51100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa6a7b4e60763f207690e73efddae86e11a69bb020d7c4745c8b6db8783fa75ac5b3434f49912b13b17d727e87cb944e3114fcc7fe917e7ec8b9ec014af5b19c3ca63cbed5bdb79605964812804a884d6e3188ac27a6a37157a069958143f44fa96eb59ce544ac06fdbe2c1cdb26ec6dbd957bb321e54352862f68e48eecde7b9707778e992a9a32e553527cb615f7ef015a4168f171a2855ff040d204f6be996f6d10d48954be00fbf6f30bb4a49fdea96963d2c77ae827170c98ab3adfc1abb4239c956051bdee51c79e96afb2465e1d2de6257c53f97bbb275a5e831303dd87e94e0dc42bfa1be66d2ccbb57ed9a456fedcc780d8b8640cef4a3dfc44baedb2db8b43691ef72b3494140500ae16426068f0351786066caba18a81e8fc5411a8d6ea76c5aa23ab40c8587376ba872ec92bd16b4ed45f18bcd7f7e879c52c678e57996ccb4f67b0f9a4f1c4ca64eac8a3aaaf2be610402de8874359062dadbb231a5fed81d5de6664ec08701a0ca347c19659a016ba2a5355fe20a3e1ad5133735926cbafa7acc40fdc90f1606ec14dd7a1920b36adee9ca26288363dfe040417458620468118ff0718ba2fd2463282ef4b379361fe2f8d9e9294df71b1a3f9000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0021fb1adfc57cef873bb08985323fc0174573891979fc07dd4fc68e445040ce45a005378ce6d99d03fd15f8fa133f0a69ec023ede1000fa71467d475df3864e938022d27adbfb03184753b062f9a21639b0f642876dc5c030cd59e227d0d48545e7e2498099cb65fb4eae6e6bf2e08b766cebee8c19e6566be1186c2198b1f3a60d700000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084d3a87b82b3594da57f167dfc4235e37330861eee396a5e905bf16bd9161a493031af087dfd4bb0a9c255570b8d5e38a88a64ffef11b162b834e69c2d802f08146c764b71d5840f21dd990bce1b6f892103f6b67878391f3c6fbebc65d2ff74853cd04050f2b4baca07dd1bb3bc64c40e53d8c54f7912a046903682cd86f7eac8e38530ba1bfba4bbcec88992358740c4e9cbe2e4808e7d1dae7055ca5965156ed3979374635e6e32ff74260121054225830761e0b06b48cb08374245bfefd352754d5bef1fd70b25398839000976b63970b6c80e5270ce8b9d37b591dab4daae938901f599bcd9174a8ab28ff5a8fa82e41bb378b02fc87c6eaa4320b08c815a180aacb8c4456b9c856c0d38b0c1136d6ac3ec22c1414f30922d1e017d56c66535ec7a29158f10c826d4652c0f44a49f4ec8988993c67367a6495d50a0c863dbdd17c50eb05c867db0bf453643751dad57fe7da5b23c9c84fe61d0266b910f4c4b7b94fa9c42ccd476d1458ba2149a716f7b8ed9feb77a170d3f1265ad860f660ec829b562ffdaecc14c2adfe4d2af450fc472a63959972bea9a9326f0216257cfb98d104cc6d7afa1055a3892cea762f15dd5277b308616b5c05421dfafc000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4b49d89e7ebeb008f6df15fe8e6b5e7a3491a53a2b9fe3ba25989f325ac5d60a7c406aa5709f702ef6a769f6969739a034472def7c10d8e0eb1add5d6885f104bcc22e333caf4f18176ff798160dad836b5ad1f5474ee0541e1e1a93d56cc47851f6170283a4b22e33e20e3df6be3fa427737b6f1b6ddcd189fa52d88bfd2ac2ad3e6bfc382e569725a57a9da3f620ab15e5d19f1e0bf117c15c20a388b5b7809e4dbe1219a146caad07cb6799168c92955eec003e7bbb992e474a31be88a1b242108716818c7f00c636ffc827c08d05c69785d83b1dfff9508aad70d1aba86d1294ccafb0a72b0473ec554326d3bf7cd54c5206d59ab289e9a71f9f3016d63a538248fe3ad0181b7bf68554f498b27f672431c1caef2dd24a3e14c81225b8d6a12f1096c90994860f4b9da594abd8d27ce598d47b876a080cefe3289831b9ded1ea458213a3da28ab0b855930c4043b5c5bea831257aa151c5c259a9aa8caf6bd734ae947221c95e11ff734aa28548e2b8989415ef043db2223c2da8fad0e129c41cb61eaf3b336e11ad104e3b59bfe710075e83e619a7d6e154e3b04d95b5e058a44f3b3a08e421f6c2c1133c9f51adc2083518a59d0544d998d772c99b6000002280000022400000220267fffedf3fab32d968110b3df504f45a80ef12d479f7d7293f189917e0b86f90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007d97a73b1977053def53009cc6e2bf88f98cf2bd32e60bee0845f68f111109cb8ec065aaf33864fca4749675bb9aed131f2685ec171ed318bfa2b6904df8c403440e6eafa68ffbff32021469f5a37cd5d628de5af563a7f4518a2125bac70d22e177171139816a5cf51814f2d2856c9560d130c355d932472db3237a1f6d01fc4b57a003edd0a321d11df92c9027e603fc17ba7def65037f8df572a69a67db9947eaf109b16b4580324e464de89d2ccdea1498e7962aeffb9566a7a9fd7ce210bb83f03d63945eac023439e4a8990de0104265715c39243abdc8df43b9ef5ca634d8b0220bba9c29b990f54be4c35f2f36c2f6738fef71aa233e7251a27d42f8afb67d6476296de2f9b2a2f422a177a0e7c7b277ecd49dcc9350b844e2c8dd68253563812323e18caf35aae68e8a1947b120eab8cee656cf8dcd6e0ff6cf7e261fbccfa52fe8947936ac5fb8046074dcc9f3121c8a18ba4b6ee612ec6652e98a6b120e71a81dd5bd579f1ddb53230d8380abb4f0bcf8a48ec15b9e9139d36809ebd523717a6361ac67e2600d6123446c4f3c541afe3e4781f3e2c952878dd7a16f7b1bf778c262f1f68987c598ce8264c90f1d7816019c7d47b8bb664cef157000000040000000000000000000000000000000000000000000000000000000000000000000bec47b002016a3f1a7d7122545672eef99f37d9ac581e2e2685ddca814ceb469185aeff391447b983457271f48647a2a501b147cdd02193d9e941dc191dd15dc7514a59d5022d61bf60895569235a7dd8c71ef9307d8887667d61cefb1cfaac56f33b25f3a02fc51cac6596085144ae69e13f2512c16bf1a974db2c2dc9532139a286702ecc00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a3ef340d5c23813f6818744b3ec03c49729f1139e6b04c6a002389c16c503b37b9de76fbe69efeea0e42e82e9feecdb9a0c0e228360495459ac5d2580ac323e8767b556170455f8acbae9040e4faeffdcbfc17b3cb2148ba9b9a7da40a2c643408695846420556b2ef6d330293d2ad4f175e2c37bc36e7ec817a7d6ca4ef9ef0c18718fc0fcacd3449c11294acbfcb72d26a55d28b104c18e0403ffbf8c0a7ee756059439b4fa3a7d83b7a40c4008a7f41a20d17db9903f48e7cfc68715eb79350ba9d6a615c7f4078bed96c7a62bb8d32f10b636274c0250b84a2943b2fca04ae916fac54be66e9f376d8895a1c3f03d62da3234292e7ffefcf3783a06fdb898bf1b85c217369e79a752b79b26bf7a9e111573e402487f7f74e5bd248ff0c469f6a849be88a8ef5de2bcbd2bc70eb1f6f62dd1e3bf2f07dd9b53dc12fd3c8b91f3efd4c870689939af22e76a1715c9cf00f8c25d3d5a55440ed45f26e60310df4eeea025b4854e78d3d6b5d76b21ddac0ea8f30303db0a6b4fdf0d7a3bb080417577d93d6a18dd335f4defa2732ebc75673ae9917f1fbe2ac39d9d2fc33006578879541b22416ff7364fbb6161876be34dd01f2b4701dec99d48c8d4790180000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a81a4d5c4151d5907bbc466c8f8e0d422eb8c700a4f3a3c187399cf42cd342f199008697e9e5625f5f71233fff1c3f9bb79753a7b74319491beabfb65185d9457b81dca4e5e4eed431e8537b0c5253660f22d71d126854f9390a5a353c0107753bd0f474a9d861fec6b19a35c032cc6aa3c2d81a228905c24d082da455178a162d0f592ce300d653f2a0b89896a494db5bbac60ed8944dbda7f943db88215d4522bc603cef5fae8fc6b3bf4758a1abe2cf6e05fb9473b804c3a0fffe3d888aeb5296c9b952eb41ac5b5d6f5017d7512b48ab28cd12348afca32a8e824b3c256ffe26dfced1956a45a5c7af6bcf1a65e8b102030c4b3aaa9cc185da9c12ea0a01c9c5d3bca1484cbed93b6f3e937572e074a30dc0d6c389753ff4c99b78fd6b77530bdf393802b240849fdc3bd6c78282e7b4acafe93e5e3345c15a9d3f18e5228f741eb3d208ed115f48f83984e1e44bfd58758d19a66e7ae83c176efb4692ffa54a040b91d4664e8895a760c8713853839e8d55040caedb1ffa53c5bc3d9a06c9de937640ec6c9cc81f8c759c6a578552d378d6e1534d10c4514929f766fc31145b966d6a76bdb7c70d10fa470444faaba118e57c60f8363d6a77b519998c680000022800000224000002201fa613b57931dbb6ade3987d02ddf5e30545522f6ac80b24b2761be47304cad10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009df82888d7c3e87e6da24bcf9474295811edbefd938e22449cc9599074e121e479773ace84ca20e2f600cf0638291e3be030719976b6dab8fc672b3ebe7f200905ad48152d9ce5d92064885b5f3106c622b9451142900326d9a2bd6ac9bde3e79a551924d7abd9edec7814cec9164c5b4aba60205fa0b5fedee50e5a9f687160f7ae5ba0c805a4684e618e6953be71a009bb874dba9ad2610fb54eeef871b856d9e97bfa4a3b6a61f01eb2183f7926b79104bc77858e644969963bfe3dc4fc2484c0b358eeb6fda605f708f84a5036581ccea845e4ba3062878e534fcfeda7a0369c2ead0cc4c63a6d3eb62efdfbe68a047ae0a51c68daca3fedf6bccf8932802f6df1267b1a0de5aaba83963910aec47d83f0e38145ac47a690feccc38bbde54a3922cab4a0660e62113bd4d33ae3dcdc24af81022cbc6fd852425084b634a5e9478211da635b58e0606c3d96300476afb1049e69325c9f7e69fc8f6df1942684ef7be19c578f3223c2e5dbb3952a9614233ab7caee056bb192eb15c81f2a77cf5580ddf4db97829665071f8e08ddce0f30745ae204531306f5c9ca5e38a4d7eafb0ba3be8309b62582e3b01976afa26fe5a0feb33bbd0b360bce24884e0ea000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0022415d36048c09a81edabb802de3f6c5694ecec4c41bcc6d2913484bb36757a3a251b303a878419d7d8b962eb3a343d7b273b36ae690de1c119c05f94a1c93938022e60fd1067a32b6ebba3045981f256a457528cbffa211ebfdd1775b82bb6a08a26e0cd4137ebc7e39e73b57973d53a82fc1646dfe064298dd378a02231b7c0f700000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab6a710b9fc35c6cc84cfd19c25545c82454882c35b68d0985f494b8d45fc3167f4797528dbf90538b22527b9c70b4b6e466d9683b49a8a7d9c5b77809d5ffb550e0d1410849f29a21dca8861c0c1e31946ca8965ce1bfb4629e2b76bcfa9983fbb51585cc1985fca2563fe3d18b12234d7c068b2da8836de5882cbf7e16509cb66c466209a1462bbbaea874a76b67ba28d116a8be9b1f22da755dc6a1a65a26516663e9dcf20f31e40b16e5a10bffcca2675c2c983a083eb06b2ccb80f11f003b5d3d9e9b51f7d966b8e77390b437dec4067977d3b09d6107c733b464cd7783b8ae16d89635e315406895e6aae0f971ac566e26965a6f9f9f274fcfc489e8719042bf64600eeec67c8684ad53549bf38c1ea4e495b9c425d4231d8274c00669f2f91b8b6b4ff66c912a1398772e38e5a4cf779e174284f51ede7479e5ee01bb91013d756ccf51410833bcf12ef4fe6f0bd4fc26c9b0809a87f938afd592db7c1b3cd9cb0bb335f45a4f46f71f0aa6b4f16dfb37ebdd2d8dd62034d6c26fc759bb42eba8e20b483d0d99dbc1fbe4f9318b3a7bd0e5e625fcfdf24ba503b3318c785448befeb032e893969de2d54654c098ec2e77a9973e0dc51e72cb9edb909300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c8dcf8aa0de6cbf14d640560cc7848a22d2e1d5d02f8578827c0fc51485e8d4217648df5e7cb669d3fcebd54f11855148f9b1708e96156587062f0d4e66683a1fe023b6fd9cf372030078255a15047fa2d6b1f5303523054619b9affba9d76c42cb73f04b583b8f2b30006046373c78000cca2ecef40e8f9df24ffcef4380944aebee60a88adb43112399c19bc5497976af38629d48b0db320a8a0f3e657150cd0dee1ca97540ab9f0f32077a4ee4627fc2ef3de2e05dc3741ececd0754db84211835b1de8e6094f6204a35ca0b2ab6d46ccfca7de8045e78f1443d708da07ac33c2f801b78899c04da0292726f77fcc3f314e58089365aa61ee10269fd1045f168f6bd1c2f15b02e06439fcdea8a70b6c342d18be33bbce71f30cd6b78961a59fa80942295bd4e81f7c7322ecac2a75ad263fe7de6042ceeb8f8d10573563f5ff6847a5f47712b6caa39e0db520257f1bb60375e69adb174fc54e22b755c931c0ba6728425555e1d72d983a40c0d8629542fa25435f17b8a4b3e784b121752482330b29c3a894485a9a810ac2856ae9936a3975f1c10cea3f846d8c8f1bd7b306d60e6ff9e487d761357722bd65a4b4842f632d0f6e2bb5a80aea4d93bcb0900000228000002240000022009e0c00568d3c1f5589836bedb8f2e2ab45cebdc95dad5339bef6e07faf645d5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000232c5d50d32d43acd096b7ff49e0406741c533a68aa20693fe8bd4cc15025d99bba8a614333a172680e7dd41609033006f006bbfc19b9baf3e7900dd8be6d7d5fe2a574208e0d6701cd52e606b5fdf6f64e470fbf7a01e401c5924a2a271e1068ee807575056d3d0e5a8ff45b9a519b7a3ed6f09851e8263ea82dd9a86ef9929864f8fd5709d0347f31e24bba9222c2dd17bbbee841c0fcf67445c8e2508cb18da8caa6cb5a7bf5ec6321ccdbe472287c8bd46a2278305ce8c733cb23d982be5b07ff42f24d52145138064ee3f60b09c5e1dff84903463938b8d4f923270eb853ca7be66f5787c700dfa336c3f2e8b0dff4651ab72e734d48b06b23e972f94f1b85a53c7e370e78b81983f04fa0ae465f0d92eb00500e8e587ba8eecbab5a22a8a99f7aa6cc5ed2ae0bbf6e114a66f6735e71132008e96591716134cf82b2bcd5f3dbdedf901eac9117375a01730935df157ee627677ae16c05735d7b5f90d8f30ee0eddfbe3d476834cd4fceb54ee39a531da4dcc08e4adf1b4dc0cead9fecac057829e10e3a3d59eed974c2404a4a0d74672a4e8854b47c19b97d8e2c71026103622c85b2b532ef03a974c6ac6a35358a283e714e532105a3a3587da38c57000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001111e2ab69538b3cfaa10ab77ab97614d4dac577e01b3ada1bf0e723099794969022f3da593c287021f79666570a6ed0fa5fefe5c7ba2d1f9dbe88994bfb78bb57324c8247d686969718bba017aad9f3cb8ae465392e4dec8a418d253733187ad7a00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016c02fddb1d6c5c8275632749e6585f2ba54ff6e7a4003663a8a7fc9ef6d5e85766ffe047d258ee1a984dc2139c7c6044138dd5487f02f0579535d1643da0dceb2ea5ed2ba320dffac22e3000fca6c88031869223c524e38ce985f43d81ebd6644f4531019afe4759e8e1048093b54a9983e6ebbb6a5d7424ecda124b372e280e8d5fc25abc9946f1b63c9d5d00829719132ed4066050293cfd729455f0a55db8999524c50eaa7c5eda47b831b800aa4fd1b825137de92005d1c4fd014ccc8a62361aa6aa7394f33ee25f97e0c4d2af8e02bf36ba8fb1392492b3162bb6454f353a61f609de2cdf5d9eea469cc0bc3f8a98728bf0cdff600ec90ae202727d6b1f6fe099a9e1ff4ff66ab3745401f7e2db1c806803048a11348c2a37ca9041ad4e1330efbfdf102440be3bb2ce23ebac6c5a0819808fce7cb6a36e155b4e44019e297f228038ddd43dd52b3ee539fdfb281032aedc6cc023072e367683cef300ef7011c3f37f25fefe3f3d69456579e1690af8a449bc94bdb7a654aa3c9e6efefc04b97be51c1b020a7173a588ed1a45c9b0e12ddaf46a2c00fb3623d8720fa4f78b7561020fa0906937bcfc9c805de01f31550addd2177a06952c5470eff178400000228000002240000022010ea8fe87678088b46b135f25d86e252b94b2171d7cc8995710868b463a6da7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a56595e5b2b71c4eeb66a2c7b071100a8e50be81bf4282cc8acc4b84b876224444bcf4cf2905a58fb8cc2cc273334f24a03abc92011abad474dec58df689da3205108183095880ab0e7e4a8e2ea89906a09c122564d027227ecf54d9974a49b6a33e5eb05c1d7be53f403900b1463636821f339f6cbd388337ac3acc9faef208a91fef49d9338d367d608c89fde898f66b7878df5b10b22500929644c452215f8ba755b487a6fa63e99a2887bdb0e6db432a785eed56c0e8629ce51af0342ffe0afeb620bbb9d07d58088c5ab7330c4b9b6106ad89ab5055447a7782c9305bda8864090794ada10b2e7897c5e47c7fb2c0c6b37268a9a797b8e0a79d6ab4cbea40da52a3eefb83714874d50a1b1b6577337d15e11e0c7bd74208b1754bc5d07de616bebe2d761ac43789382823cf1982678cd368aef9a1f83377b0d56584d74398bb059982e11a5d4e4eddf0e81c2f1128a44e5136805dab5af793edf7f52d49949c859e3500da6ea101f935223d0eee7f96470c472a70369eba798eaaa985e083519dbfeb6e14fec3c6e70d20047ca843d83cf06db006a17a461ed79b18be1d844a79688fcf54023c614f396872fb38534996c36eabcbb49be8a4f78c2ae072000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001241a90995b26ebb81bee3444b6beca97b27d8f8e9d383a39d8d68c63da46f43f0230341ad0f0601073a59abd16216647076503873d6b1463db8a76463f70b1ad732065b1c2503d99fa8085224b4e7f77b3278479762808005406c5832e703cf9c9000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000285dc6b38c45183d2ad4f839c21244704199df9cac37785ae7b372b6b5ceac967565dbce1e4357f208fd3671f553125c89f69d93bf9c2df8767e3886d5a7a2cb04771924f83af981fdc028b867273e25727256363ece6f5bf1572400c1e3d3352677ce0be0429da4be92949c907df4497ad5f202c471e8b2a7b91efe92e107cf23650b70136dfde3eab0d10531afdf27e0a851ade0b3633dfe789369e7ced9682db06dcc96d6be1225d299e388772be8c5a9efbcae60488a7e72b01a370e5eb2ef4b6468df076dcc4dd5c41565cdf0ba1af24ec739344ddc55c55ac3427fc2e670efa877cf36c773abfb5b73425fa5e1c0b80709702d21f7dcf8091c4e6e188dca7b8ca2d5057a05aaaf463f0ceb2c4e83e7c0cc2c0e0586520fc155433158d730e5d85796ee0698ecb6accd129b34a029b4ee17c9b593d643b1d027befe28d8e281f7a29949e9998952be6340e0c77cd222ce00eee4f4e2bc8bf4d36d5a72b46cc9779251ee3ddacdb1dfa6158a9f9e2c7da26319cdbd670315eb4a1e8e8f2f72702ff9398e9d0c627bd9c52203b3eba7675994de3cfb4572c4acfa7c9152c1fc3c5c6cdf314313107a4968f32704c88beeeedc0e19f6659d327401b3220be20000022800000224000002201d7ccd44f536b7808b964ecbd473e7265560adb4b76acbef210eee994714be2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000893ce7d9563820f520a3611f1b5ffa389808c7a59e4c2bd749fc96d40c854b0e5103226b2bc4e989451c893c51f838056149779c9eb550501cdf8e25644d663dc0d7dc63fb54afe908e88f850c3686cc8df1beed07ff30e0c5df0e8ed0995bbc3301f58093c37234f62e54126cd5fff81e501b4d0b427d0843074b30fc421693011a084f09b762a2d237d48868d406feec6c874a5597bb252ddc735d5c80a119de09f1aad123bccfdd116a5e3a0fe319309c89eefc0868fc44b841358b971f0f4a3abf35164d4116810b2d0893f4bc7ea4428f30111939274d0a21930d2b04dec7ab051a54dfdee90180c695fabf1a601883bf781507fcda7dfd77c2726dfe92c7d72aabce4f97d37018a3c1bc4c40e53c84c8f91efaa096f17598cee8594665ae0f29e759fec2ff4a27f7cbc624e4987eb6b3c13f302359ad0551d93cf7a2a3f770f6f5a769da869a72e0ddc193072f40988c8d0874a8efe6f25d59c6e1eb734d02e085ac570678949fdbd320b15a4cb697667256ca8745cdf2b5358d759af5ebd8f153f42eea6ac3550ef5003eb1b1eb90992b815a7d67c28475d8f6b95bf35a5db48fcf7c309227a53d031202e5e24935b188f02fbc5f91b51fa3da9199b00000000400000000", + "098fca4f64515a8cd575b3b6fd027ed1043f41ab4ee3c27fe8527d2e38d3a4480000000d000000000000000000000000000000000000000000000000000000000000002400624662bc5d4432f62ba91a79de43b3ab4cf346283c768cb28dffd3d9d7306500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000d026da24c7d6690c28fc43937c3e14ca2f3da5a7e4f53f02946806a11ebeeeccb200004200061f4934d079da56157a8ce80f1d408c274c9a8e99e6feb4668315822f414839000042800825bed0f04513688a20a73113b41d525a804966b3e35ccf0894be7867dd9f59000042800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000070dbda84000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad3644b003caae76e4950e6afbbbe5c76a2c9c0e4bfead8ba02f3c498d3f52ebd68506450000000d0000002400000000000000000000000000000000000000000000000000000000000bec1d4001018e13fc10bcedbb6455aefe8602c5aea3d92a5ed635e267d26439aea71bd68d0200385e7305b80adfd52a09d1dbe2fe8b98c8700b7aff520880cdce1d94f18df70ae969bfe6db9d9bd2ab98db97d7c8f57642c9f0114bf275a0680db72b7ed39800000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080a3b4d9666d826bdf2e30f98926b11d20f0eb0a8d0f83d5b423995700e6762bed840629000050d373f6eef9b4d5306b6dd0af7ebdafb96f7f4b5c9c072cf0a58e5ece6827203c24907813da32b9ccb6f5f1e14584dbd288894af9c56d7077a6a64e3aab0f7ce38307daccb55914115fdf76a13bc7493ca2165b6c994f7ec93bc02f7755f9bd273b6c73c0bb1985de1428bcebe90488f3504ec76741f0f32b0797f0c7693fe2d68aa2588a4eb0f9bc596909a188da88cfde069516149ecdf0cee13aa5c80b139fe125906a6729b8abaee37806360567f8a69d41de1c92f5e50e89f0697c2331aebace9fb060b05aba78cd9188246a7aef9ee6a6892e3d421658c6630d563808d49350028906d40d5fad468383bae081865a72b983010fe72010643c978b54be52084bb2c80d3cbf20c712933eeb5fab78fe960982120a3d911b71e582d2358feef5f9e63376e5ec81151c96a774bc6b938664150edad830365b549b5ec8462bec65a52fbc32cf340f3763ad7e21080a30e382d8918922619e0fd939ecd71b3b2ff5b61328b67aa003d050d6d73917dad7876aff443d9d58a66468bf1d4f0f620af0770303346f5841efe8c8705d4bab4cc909d6252e5ee1b915000002280000022400000220298d7fe7d6f7ec645d1a8aa7ef8a5d41ccb90c40b1e67e3a3c0c971c9c963367000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cd5a67beeede267e86a64c2b9c312566900ebab87ff62884f107acc7cc7e8ec4ce8c9a89ee40aabc36739920832a11496430f3345275d15b739b3f6c24d2e54024b7839b2bf9614a3b7c31a34b5ee0af9101e58004ddfc56cfe71b3a3ad2f13b10d7b411f1e0ebb1dcd4b1878896cddb9cfffd14d806a11a9c1fbc5b84a1fe145277fdce9563d989e35be4017f870b3b1c235159ae8e0369711c1611997506f74945cd97323ac889020a485f6991f5b89f71e372a119425a7f4f570042526a69c1fbdbbeee36956fd60cb2848c697141b88f5d62b707123626fb92d8d22a1ae825b115544a3718b44a4aca5cacb5fe73a9acf4bf4d225110947d9cbbe508e948ab1f4c3b607944a3aaae7868e4da44b52b1515d1a0cc8956548a8b4efa1445c25575bb6f0d9d55b55c55d038932f7ec91a289139a99f036765609002719cd88795bf5a231785a75a9940dc0c60d10e54942d0f76be29c4cc9b5945944e72416f12949d5fad6cf6b117c1d5a025818d29d3f7066799eacf4eb28a2b4a4ee6f2f11af7a16f34394c6d0e22385d7f4cf2057f1653f9eb936f34fbdcf02d26f48fde66061ed57ed7482daa1c1173b4b4d027e5fd910d455cdc5503b9bbee90ed8c5000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400129e8af56c8ab6280d7982f6cc45be154260918e58803f3e670a458637670519902008700791768796654fe53aba243e782928c4b268a36409a2323fc1c344b9b7b1f3b749281366555ad524850d80eabb3a8498cdbfdb219cef9337326d8a250a40000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b59eb618e630eb29311b6231415a68540a0bd12940a97cc2ae0cedf778627c35881ed454e99e19bede325a509ca7fba420eab8d6239cd1c5c8004baa5228ce38cc108fb842c227e0145f2cd315b9cb9521cbd0f77e9bde413aad77c14041cb56df358ed01447662406e63822d136736e9643d42a4e4fa922c99e0853482cbebf4aa222895a83fc168a3e85514ccf9fbac49d877a47feb547bb48027b71c1db2c61c256a136a13a6383029e393990d11690196a22102698444126244ce4e6b648b1bca79cd40e72a0fd57ff9e34117add2b108dbc6ad07d24e0609ab2b9564389ecfbd2ac6170038b39016f8cbfb57f28c3be32a4dc278109a60317873c17771db39acc1ab5f41aac5acd14655d7c59f9d556008e9730c383cdd9dc57db6859175c6375b5133b8d2604b66d9fd000323787bddb8657f49aa44b40d102bb6f78f1c30a85ab6d0aed31e4ab856df5b3001f8b7bf40fd9b74d408ef6ac05ef1405df955ed108d916b9d247de5579cc66dfef5028f55d7b21873c80f56940ce0065f2a7a32ef0161cf5350029e451c84f8f0eeba6c3a54ed3f202909a226a2b04753c8a3cc541859a1b022dc05df6a60a44ee66e9601b76d281979fd6c171e261fab000002280000022400000220197c1ced047deae7c9e8a0f98e9797d8f100348d2876e06af0de1259ad49b21800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000271eb57e45a462d2f427c882d15f82743b2700e7e6620b37188976dcaf69b047323b1cb4cceabcc662c1c4397a83066a44bb19ac14685dfcb969206b4ffb13f40d51726cd28228a830ea83b03419663a6fd69ec662e9d09a057fbf15ed01f552846d1373993d8a47d78d47776a810aea73995cb45285cb55de5dbc79c0129ebbe66fbaa8a56217285c85e8f6624284ed6f6ccf418b296065040be99f65428fe9cb9fab8125218fcedc2fe3c0e7e2886024c3e8a6b04a6f54ec38d0b16249d951f3b98aa902826e07f8475c64681507a35797d74a65a10184c4b0140157c19750a6c156ce5959c8068dc63fa84ca91fec2ad10ac9ce9470337606019fa6a1cd61b81629302be2593058d059ec901d1501ede7767741cc3bbff744883c3c5525b92f5105a2a7077370e6125c78d6d7fd233f10bbc995a968aa614d2edb1355bce9187daf5a93d84c2fb0bdf9be308b8d3082f4b47ab3642d39d5476123eefb7811a8901cfdc0e00053aef9cc6bc4dabbb29353e75b8828ed0a1bdc09e8c10b6f530d1e9867adc93d83b5578bc8e099cae77526666206bfde56c7bc9e43c1189fdf04c9e78ff7b648633c3d591fb7658729c9a2f94731f97d311d08c75eca77b0ba000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011bf1bb475c07812589612aeb50cc5dfba0dbf564628f7f96c790a2ea81940c9602009414ffa02b43967c8a68b40aca3bc254337472e17cf13364f6a58f56cd804125fa468083ba6cec510d36995e96d6423159bd2a2caa295bcbe6ab9ff1c54e5a000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ace0ab4a11df4a203d5b3d900245a6718bb02082c7ee707f35c8759ce2607b41a62ee0797b71324c155308dab83779952d46a9ad337f9fd8d228c113e9b672b8702ea390da06eb74cd8215df2196e85819362fba4db613b18b4e426dad2f1b4c82b3f4abeda5765efe043b15b1a56ffb69b7421a45350ce9b9c42c18f16d840ed42e706f2f8a626c9a526644a967952ad2f3328f07663671d73f2f77d0ac2743231b2be522c1504c3c64b55abf9676de3c8f1003721c54f11b8ff1b2a9f5a02752647471334ac22977884cb728fb229cef3edf56d08853bf52389bb286aec8eadb46527ac9870cd6924b6c2f8f7592999d71fba72f9c3747ede2b660ac83704b3b44d376350c597a165831758e1629b0497dfd577a7ea34345925ee16ca5e539a63f58b399cf4d4c57107c1dbc6f09d534d87989fddfca3d25729a9dd2decc9e50a70b3eed38dae2378eb3e3db80ad3a90f64782a678f893fc3ab15594e8fb6600cef77c1790a4cc64db968a002605d51ff827c7331e91afe2f417753cc68e15c8213bf2910f96bbdd083e83507c54811d398cc39171e3a643ed6627241f6bb3c1c0c12822d45f0a9a2a2e884ad838c1b385550c0499b9c1250873df8f3f6c070000022800000224000002202ad4085171f935dc25530eda75740f5caa73811381ac8810fe321ea40749dcb9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e28d8aa92ec6cd41b96a65104dae2ef56a9370337a2d4d9d2fc54c9ac52d135aeb840fb87b28727ebd8c90d602ffc580d04a54d8edac025e5ccee5c368822e0991a395246dd479cef24c5bf072c24f844c5ad70fa63b32e9e0c2bfb97ba355bd7d784d422b51737f4a0c1e6164ab81d399b845f0fb8d1e9b24a823e35a9f3144dd2d82f2413681da134448e442c3e449c56a3df5b5aa3ba03899b54e2c777dd3a87549e1479adde162a4493b3213bdcdf8b45f71b2bfcbb15f5dd0a6e00f6bc609f1dd1a5d8ba9caac7d60d1cfc91ba122633360763396de22f23c4ef054361c535d7fa0472ef000a0d1bd4092b4316dd436409b6920b2243c064a9d48918d05c0d9fc3d3b043a179df3b8f414b8ce67b475212ae7706204f37c4064f7f9ecb23e3955ef3226f6bda8fab19c8822c6e980728273d3557e270b4b1e3a612314168e6e435ac6daeca71f0bbee044b3cd9a00769a4ae7904044251851144aef586a96e5e70640d9b9abf057a7a39156901510161e4644056dc8a80f937afcabc432150df34214f0c35884de163250174bf0a9774209d85d1e0f856b1441121e31dc25c9e3c24ddbed7e75b54cf97785257eb91457b1d36588c542509051fd2d0d9000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001181430588036f8f9dfa7280238209b06f956676165f7a69b5a4c175af16cd96102023f8270b54b9febb62b8e95ab9153dad07692cf208620ebd920a941cf22199126e99707b7c8d65da79e4285834c4a562ddc03acc07092de291495af7165bcaf000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aaa170bdc113ffc184b54bdc22ff63cf1f26672938f4028991ce2219172671442ecd9e13841df5af4661413eda8da462c7a4a8424fff5485849e9cd61e7aea42c80d3cddda17e42b5ff1d636260635ac4ff2d22181ba79f9c8608e3d3ef7ecaa5d587c8f1046d5432c79cda619c03a9d972ab7899fb9e906a96c960a5280707e79d054c905dbc3343a7e5b12d2cf6b69dca081c87e33323ec35f9295762720bfe9fcbb4c6858b0519555e998e5864724fb440dc8574668efacac2cde1483c6e5981760c4002a23f82ba1162b421db5f5b4d6de800fe0a026b0950f7d59efe2e64ea83ec7a2bc64774422e24191f4de88b31c6ff621507826be2e62a1ee252a05bdd6b5263213f79c0368a0c113f5c665e948d42ed90db63426a5c7c54681ea780abf37643565fb0753b5cde8c55ef706c03952ed4a41e8a8ce7f37cd88fa527a1e5686541ae916abb0c36f3e4e3d64bc63464e6237f823cc07d1203a912a526c6e906bc141e6d2ea638e5a91606a4910a76f05ef7880aea00f3181cf00fe2127f2cb8678bf5935ecd915ce52220b07e2dca420561b34b0c040195595b2f403ec6e1daefff2d5a52b5461de31fd432ba6f519af958049b83d8f90ceddfb7acb17000002280000022400000220127f694326e377bfd1f26eb2f0c7dd857ec3a4483499a5c13e599035e03ccf6d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000323ea24582c25e7db7c0838fab55460511f071cad6bd6bb906562c308382275e8421f71c59a459d4c2d7707fdb73dc8e0c460f107ff393a0811c5c293bc4776aef114c24a554c9d3c748378bf8d29287a7d82ae8abdd75f6d366e53b13a1e908b5cf6d051ed441bec753e97fc9e82b9a02c12e3fd93560bd989bff245427362f0bb6541772c06279ef2699041e5caeab040d9c0251a90236e3e755d08e98328295630bf2148d35ad3e99904b86bf0d7d63f907fa65c2f42b264d85e81aeae95e2615af950b086e4cbe34554cbb8e088e1649993d3e656e1b9252de16e1ca03fdd6c208cac7030dea8e142aaddb74fa6ecb147f6aef4df59e07ed3df2ea4ac31011ed2ce4a75868cd3e5d69e92a6230c36f038eaf052deca405ac0dc1f84fe70d9d34c2b37444dc8eac4a71acb43cf0a6027b1eca034afb54d7fa07e51aa5e0b15d00df3bca8cef1a0914d190232346cec7fbb07f9309fcc16fa88701d9dda7d912834d4ba3724e183cb6eaf3a397428026b1702964c512d026804e3e8dff896b48f6ebb91fe86d5573bf7cd649ba591b51fc5b607eb217cf9d70b36305111d29eaf7ab2d049e3317c332bf756738aec549ad51f919a4a9c66dee92b340eb11b000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400119ed458f6f4d6a7f5cdf99e614735df1e10e7c1cb0b2576afa73a9c223ebca570205da8d95b755fe926636fb4079029981a81f75340a7c7daf7a79f727ab2cd8eb2d2da5529678896fd45b64f40630eaefc017b899abd08f12349714df44b1cadd0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6278f9f1933762d32216cb1c240e275bdcf4b04a2da47df6a1151396e10104b7ef24725c647da57487ccd6337902df78c7f4285aae56d81bcd91fea4d51888c39a9336815aa7fd0561e1eaa3bbb763feb146527a4382c1d9228f4ccbd0a214f11a76985a4adb34d680fb892cde8e9e8cc3f662dea2f445e3c556273a9da679b41c362823eea3fc1ad5d4e09baa4178dee8896b7914abf82400fbeaa93f811586c871ec1bad9bdbe40a8d32d2ed110977cb8fc3a24141374c8ccc088790a70600bf17cb5fdda6d7193c1ea3160947e4beb1910325b826ce1ab05d659492b514dd5c27bdd352dffdc9f7cdeeed44bb6c3d97c69b839f0fcacd198712b45f5700ad8bf70c81cf1dbc8356c150151220e9661fe53619e099c4a0a6fd51cd5664a9faf095f2f816c8d62a012dfd453a04c8dcd9668b5ce670626ae30f899816055a2907f5fdb131db64af65b6d7318e237fde6582cbeed8664e8b79ff45a6115fb4ea822cf6d4092fc82220138b412e641ac96580354fcc6f37e7364233160fcecef8092c330147bfcfc485ec08f3fe1bf6980cd788eca3f7492e9d04a4692a483b73a10f08c479914261bde7329ecb30e2ad501a73f2b43831ef4449e01c22dd8f0000022800000224000002201f5c011b06ca1d9e3128ab1e6d7bf5dc56c14ecbfa8e24365a20338657576e0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6b08755c73fe29f19b81265a8de227096bc3dc286a7f2c5274724a0f716b31d3385dd5009bbebb6b4e82351c3afe00a50a0cbfb35167e7f77ecd05ff2706c5abe90c10dc242acc4b0bf427212c1b6652bd58ae7d22011f99d579cb8aea70a61db9ecc500fd6ce08633b64f4c8eafe4255689515f16c5f6ff53ff026aa1a060385eeac25a4971627688ce7e6f5245c73e9d9061bc83ed798432d3d651067cd3ed2f9904b78a49bb5125bad84be17d7f1251d75e287c90acece5bd8ee254969f161c737282d536c5e7714f09f113c52c68cca7abf1fb22f113dad3e3a05e2d8a4636fd451968ca439774bc77c95a7ff8203571452a725ef8649f77d7089ee19c4fdd11d4d0009d0be5b9e7c28347497322f5a27c521fb7b469355806ff1e1e7b6ad982c8fdf36296a1bd623c3007fe55e635ebc6213e871dc0d72e46e0d46a4c09c5129d95fce4ceda09ade2343fe972aafe4c01c8d3e4d1462b0bd737d9ac114b5da0faab537e8a25d39f018fd7b9a617cb3fb03aeff0e43bd7bee7ca4706cf173dd66592f5602432b731f6fed6f9b7e8dd34dc18acb8948474093c90aee52a690075b5d53174da90d4bcbd276285d39387334b9c9366710bedf6724f3ac3861000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011016b2cc2ef44bca9453e9d04995da4e9703cd3880a93f57415badf006d1c58b02065d3a0a56a346421ea4ebfa4939d334352c18b25181f3d5743b1f1b0c0f259824a0fb422827c8ac8c02e60d6f1cf0528d9b8b8aa7f2de17f22123ce1244f6e7000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300148b9c94e2389ae16c9be3dbee2552b5c3ee609f02a9070ec41fd4eda5c8150a00a11b10960373b604cd86c3490eaf1fa1618ca7f8e1e081067db209f58a8f537a37fe3ca71f5d2eeb9c5a06c15b3875afad624ac9008ba37223fce6dbc65822c90c5ed35e4565207acd5f97dd8f938fe77858603c57ad85d021078aad70b16f7bfd448ba6fc6bd600de16d037f79d281e8dd4d30c87898a4799eebe0ff89dd3a8043d030d9c1890156cdd4f6fe11acf0eaf57d2e2dcbb33031438905e6dedfe2c7529d3df526f0cc1f93de656cac7fd03bec2a8b5f2c110191e4058770eeaf35262e8313cdc88ed3756cbf58ec094b264893e2ddc9a7337b9591b2cebc7aa34ef4a6857b8ac89488ab2f7016350dd193d2721d3991f11709dd607d8e9fe6ae45427c159cfaf866373608cb7010f369cb50a447638ca983f149516e1b4b0691fd9c564b3bbc8a8fb133086a52dc78cc7af784a81c09503ccabcee78b91d6e7d96709524a1eaa6463d571b1b5b8dee415e05b2b722a2aeb819c04c6cae0e9ffbbdce9c33d09afc042b2fc49c07613ef6668ac8873c7d2612c6c0095cc42306af0910525e3ff2367067a5459e4d1a25e75d12a78623557538241b3fcf330af800000228000002240000022007e50631a921d41f44a8d2ae153ec546181f55874b97ca959f8c82979fa17d7b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055f9f1c68630ad6267ea7f37f8a294ceb1b6631ca598d4dd05dde59ef780fa0fd8d9a480e315ac2f12121e503e14bf078a45d50bf18f238798924d1d53e18fabc66077e125baf4df35a96b259fbf6e968fb55e9e1bcb9d2b0a2e60318ff85b10b402bb70ff0f92ed9c0b136cfd705cf9e855868318154c90d862e9c66a3163b8f550f9585ae007ce7109e2682038b904aa135d2684c7215f724d11054a4c7073cf032d8d083463781745e8317af87fcbb8085e06a7e8b3bc7911aab7d3a22b90182b0b70edf0eefc6d2c7becc741d09b99c7c5d33ff65dc51c27a05c767b904db443dd2ed0b30da1931b55cc6f065cb2380ea6fe02541a89d3e1e3679da87d7a256487d790d3be2a6762f75bbc19c02ff6c08902b17f5c8638fb0e3de217a992b1c84b08b4f1f3ef9d6d5dfcb05a95db0e5ae780cad400386150d81e122149c4a179ff6d32f372df8c280abc46fbdc4b0bd093c3f78439a7eaf379c832f2572600b570d45b5301e2577583ab6522983a765e97b74eac3db4804840b4d19316ef2a7bd5f00c1fc0b7f35e088283f85d93ed7d6bd09e01efe5802d97e29d00ad36225e849ca68efdd6bd0ff10e3b2128f2460f322ad08f1b5cc4c385d98707564000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010d487c6a10a8cc3a6a7a5201bc461fae785b543ba8e3bcfa4abc77c6a5f8f7f80206fbe519522f10c8e25f947c2a2e7cacb8f0f47a76f7891ff960006c8f11d8400e3cccde0bc58a878e930273c1d9649339ac8dbe5e95428f22b295f58349a85c0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416c6e55d7dbeea579cd0735d3a326651656d881f4ed55cb6aab8d30864289313a122541c304df59d1e3253d470a33555226d59239c16080d673d9851d44b5198db9f7b490311f6e42c3bd35e3540fae705ba347fa171854e19ec52e8e9faa401e4981e936e07599db0150c9494f9c2ab1ee21021c6d25aa11186702820e6967f34c083e429f012c583326e8b23be5093d398b6f74f5cffb5280336734677ffeaa179f9f89f90960ed48ff6e56177114123b82f3b248aafee9636f5b26169470e8e8075f2686b1386b7b239a76f37daa44766e93b474d2e6bb182ba270e6ad9209d86c5671dbaba1481bf797bbb3790bd5918a8e0237c450c2a6058f7f05f527fa61267e7e0a4ee5a1014692a8eeb26ee550c523bd85f567c9bfca4f98d1336dbfa4648683ff189232ccdf6485fb921ef34c769f397fdaf37c1aba1c9f903699bc95d99bd711320e5df767ad80ed9d3aa42c207e0587135a0f81fbf394ab907e1c80b175118a1471c675d554666e8fc735e3326356a83b250185591eaae8709c2b70c97325e36ce0a533b710595063582293de0f505587ae1b974e31e1828646b32454cf9f380e0ec96aa7702abfcbf7e2dbab508400ca663f9c1728e59815e0000022800000224000002202da8994eb6793c0e5bdf659bb5d158169231044d5532038f9c0cc36c5784e7a70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015d209f50ec61a572dcb97684bb1abea44b33606632c707f24257af9ec831cd6b747148ebead574807d51f06363ba4e6ed4d74b68345e4ebf66b18cdfdadfde04466f3a9a269f73d22b682467d03e4bb84eec921ddc23edca921cb3bacfd2946d3e7b5f64309f17b00cd7fafdc0092f6929081bd13baa0ab2cf788937b6796e6e11452345b7e1e23c373f6ab110efbc3d60d2832bcdc848f3432ea2f295d57843df67f2d1d143b3bb55a3f8b94c7f7d0ff24ad45ea50020fb03246338f0ab8f202f17edd777b6229898201287a5ed277d0a2cb075b074baf4df53a6fdd80aa2b2ef7aedd5c6a59dfbeb812f8158559049ce53a70dba6b655972bf33e0ca7ec41ef9649381fcbba245611c1d9d73d374e710a72380dd7d961ed2c4ad826717fd7ea23fa8c20acb91cdec1342d4ec97ba4d95ca84f22f1e0e5d5b7dd94c92fc7e6b182111ad7c90a2ae5b62497ff753a9c36e5acd586e37449bb5f7ce4b17e3be7e8ed8879c0d298270be75600238d4ff7861f7089002cb1d34d1c8bfc5d29182ac9a38b8ff23c7721309124cfc8c15c00cd25641eb2b3022cc99cf83f11577c47835055ede0fd5f2a4f9047ca3f64f0a2399cb75d036c7beaf3060a9ca9708be1000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0022a65ca7bb267f321ed6515d9e205327dcef15373a53a4ce4b0ff9bbf6eaff85408da23f13f3a5e54a8ae32ae83bf24820cd2573eee84f9cd3e50f1fc719f0fc10208387cd1df0847c776523e03779e4ea6fa7875e8802351c908244bb396c2de531ccf33dd00cacbe47b86060c6b3068177d6ee9bdd251c7e7d487cb3877f45f3400000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a528e2ab53edb766d166fc2b9d6cc90e0e67b9603b11f75a362a75965702e2d82084f0a9f3e8f4d8d4ef5c46f425b3d6d1d9e86a3e90c82e753aabd4e102a3ceb095e40f6f101843532cdff4c3177100d5d88d467118009d2ad17e04bed807b41bbb54ea80090164b6964ead2922ac083c41a326a91b5530fcaba3e89c9b27461e7e09579a5c9449cf1a511eb28f2585fed77e582c0920045b5d52503afd35e0c522eba195c32b20ac6c543c2014d0dfcb46d889941222a647ffb7148d5cfe0ccd7664873e2c7f9988435fe31f091fbcffb0ea4fa5ad96811bf325cbfec31963f16f79bf443f3b8c0b2fa49853c1fb2f87232dd2668078b7dbdd536ca96b096b9fee252f11a10ed3dfb7a71056ecf755a1786e6d012fc328842e42d771084c15b4822bd265ea3b3c1df17e7cb49b9d76d433628b9b804599e7f6cf424e6d5c591871e76c7fe7b76e5b47ae0190bc6a9e7b87221a451baac3f2f030f9334117bb7b7b7d2e60f61ee628e83e95022a3112999f9dcbf8fdde2305e5e8410caac9c5b14f6d40cfb6bde94c101f93db0188ec941ed3e8c5c1ee2a7a7b848959a1e05815484c9ded1a87751be3d433fe83ec3c12cf46a34f8b7fe56834837add20c1a400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d097c3d08a3ef2ce40ac19e0ba117b02b32585715afc3349324f3e544e2728537732e8e1148bdd4db22894f6d8f7f01d022f6a9fdf94c6390aa31437b925508696926ae1454eff20a32d1057e316198f862ff3069a226eba78a8cf833594956c956ff98b23bcf4c46b272974609ceea68897b919384e3e08b8526962599c24e9dbd32a083e401656178acbad71e05bbb2bea3b5e9715104f13871e2d9275bc00bffa66676089d62d1389d86ff8f3a718c585c6405c26b541b9e83613495116adc89cafb802f17edae01a88ee7a39de1a45b9894556e2950e4e52be4ccd3f5713d237a9c9857a45b21aef02b7896279d5b72396d4aa3906464f108d4fc944dc7f7d4763a564011b69b56e82f7c6731850e2f25d4fbab4a2726a4b389f2d403c1d7332103b4109fd94402ff35a7477935a3665245d37d134bd12bc63b56c319d9a8046eb295eba3ac7dace82e6fda137aec233f2016a32b624c45960463510e5e1f765ef3b25732526129aa34a64aa60e2bff570efdece9a37cd8b819c0719daa3a37d63635d6fec6d80e123bf2ccf2840fafb5d5feffa4c93a3e5fefcdb207de5ee1347ec80e11fa22f478c20ff6b17a5005e9cafd8542713b2c6a8c2492b53f0000022800000224000002201084c3e008a6f0f59ef35207337d3dc2564099bdbe8a681ec9795fd9f214030200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aea37f965720b2643bc8e0a6f47e38a7a83e0ccc948da3777498e7286c3d14bd409a871f19844ee481711fafe5850a5590cf12a88b1f40f48d46cde2368564a396ca11ddb7d566b8f526630697b634d0a6029804efc596d98bf0b8c57637e03e50f5ec76c2448ac81b518980ba6ac2357592aa513cdbe916a450353182e0cf5e08baedf909c9b08f1605fba58f0e649f2f64cbac10014759c80cd7688b16fc9255e18a6a51d32ac568fa5b47d1350fd091760fdc9e46585a5044b3783055edfe3e69ac9902cea4a71c1c54dd43016e0289a2ac15204ceb13c06e102d78d8d094af025e598951e2b892ae090ba4e6a70917de9dd14e441a0fa188003e54483533fde476acac89dfeaf53046ad3d5ec4bbf9e79146f0915045073f43d9fe11ed9a29d48b043af28c3f78d4f6a8e2a5c3fb56f0918a501cec2096b6e7f886770db22a213dcb0d207092dd1eb48225a600f4e165c5786665e91a4ade10ffa6b10dc1f5e1dadd5c4dd6f5b69908500b59a7ac3df63fc08a93bc635b53cdb09ac08e67f797bdab1cb9c885abe35a3769a31424410b1f8e9656b243f6945e350ac8c6ed6e3d5c18cbadcfa9692b63ea0937adcec7077878b0a28a45fcafd3d3f5d3959f000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00222d9c3e8025c2c9219eae3ee219670124bff379f5195bf832d3494f4843d505d1691b59b9ba05bb772a4ae60248b62c155fd2d17121e6109ecc122607331b4bd0209457bc17c91955dfda7da7a7bb93f05f7552692c05da67d7b157225b6e31a0e1bcbb68aad2a20e9f33120cb3feadd4a95111147211f30df9a0126c24046ff3e00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c208473f6f05cf2945099ec81379a8b83be118084859fd723fa412a5ab461b9b6e06678f51a3445e173ab3e093e5a48f2800f95d82a8259755b55eeafc4c71da85d0fec93da6f938ce770e0b2f0bf54ea48bcbb0cb8eda1538c702bbd6de568d3e8fda360309f23d1bd7a955b3944364c94845a76ba22fed814341a0028c638331c089a233157faecb996dac1ac965754bb2083704b91eb6de5c294e9293bdd97f4d821ce1e4624dc2ed7883e3cc830c6c8045191185fe74c9a4fc2c053d055e81e1ec02d935afcf09a7c0a02383a8746ed22fbc9664618e4e892b8f96e19c7a1da29ac1635626997f5750b093c904bd9acf3e36b83bcdeeec83b29e89dd8d8d92934a21c2a7395b127dd66b11b3a978693f69fa768e56e9164ff8e0a3b89c8464215a732352be32801bc1140df10b5d8243ed8553d8ec1c8fedff548050696ad0717f52478375ca2b86e2db9cfbf9c8e2ea4c18e89786265e10aff7efa040bf2b67609a977938c9f3c167630adb17b8f346e4f7b76ca13ba5895c6bed0270fcf7a55bde0ca08495fcb4c7ee229a6dc93b389dc3fb430807719738c27d3fac582840c6747a0b32fd4b3dfe0ca897f2f01a7fffdca7d76e313dbeb10ade381fa000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025b5f267eb27a7ec2b4903654835eb31ed8d8ed9da8c71d555914015ebf152a944dd30fbb9527aec6c324f7a96959e305cd669b1e8a8bbf7abb9fc163e17e8dc77f0dfe9ddae650e8044d8e35c82b5b6ab7d4d3eab8dc7fd6cdfbcbc30175f841ad4bca9e7a7f1c73ef130116a0436d4668ad8c67203a6d6831533721f4f35cdff94c9cf51ab5e0b049142d9464a5dabe405431bd581a5dccd0191f3230408186f67cb778ebea3821c3d3528e0390af6345b1230fc201c7bbc7fccc68dc5724cf88141f946b8e37af16b49fd74c26b70337fb5729659bd6617a04c814c6202d60e98dff9a2b1d5ad355c61999a1cc58a58f3c3cc5d598ea476e8510e9d946a3f0333e96c3630de57c4949def891458b1867be01a5050685666b6c40e5c70e72e4cd1420debd8c6d61f827a1c4a816823f2419c10ab28a8a6a499961b48b282e48b0125fcb8c90fef6b53ae23b79ebe746102ad9233ce56349dc623cbce6c408bda350d30d267f063fe1a54dd5f7efe2fae55a1780458d88472c16447235414b1dbbff7d435e00e91c9c9abf2e941f13eb5b9f456a7e799bafe380ee34c63deaf547e8ecc85b64847774727c7031d4ed5b76fc966491831756b32e64c1c60dfac0000022800000224000002202b61391ebec038f65af6cd6e9411b8bd434866f207ee556dba5e12db0129b1f20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029038dd51178f00ce6c17cbfeb0c292b74ac2287906796cb15f4f279be9fd40fb81c90a2950732e0452a4734c841ce79e61c2ba0d0d3a5960b60d444cbb3547a17fb396cb933467a39af08e66f97beda38a66d035fd3c0e8be4ceceeca9b4c1f79bd266315b7f786ed1e6c2267f649e48b76a0e8df6b36a96e10faf3e551bd67a5432eaa87bd6ce2636c1887e63cd0c00dc01d960a83855a5f5605b9ca50d1a998fdfbfe468ec9a12d38602375ed97405028858740be5fbc9856a0968fee5b58a351fcc12343653a02716374363db9fb7ff076487335af134a588b8bc87daee2ffe4378516d73bd3cdef35f7a8c91f41418c9d712047f3c3fd7160f3ee384ecbb3eb96adeab529099cd39d9aea6d5b84ada9996ffa2dbf50be990e6668985708b3c30862efe0f21505f2da148396a7fb9769c16ae48a6c257fe22d09a72d6ebf41e2f496c935d21ee32442c450bb848cc4ba80d3df770c2b9433687fc507c42443a539c0761792812c701ad45808cdec8419245626790a9090568d2e6a42fea9e5c4c492cfb4a2cd9e3cecfb2e5cb44a8e075559dc29cd2c3866d186dc7b700e1faea3861390ce08e12a286db7bbd26353c28e12c910beea69785b0d3a1c5aa2000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012b3c9298b0f1648fe10cdf771751d8d55317cdcde1bee41b253dc587554bd6ec0209966e32db82e69719250b3cfe4f0e8a042cd49c3c85c648c9c71f32991ed25c1ed7778bcddf02bf9123bed5f5017f7e20a17b7d445ed73f6e5bde70fbc524c8000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000950858194932b4b5b95f00d510143edea3bc0c34c021c78ff6d48f177403efc238603b3a7da409649cf0d5fddd06f205e8c63c0ec9217f027bf7efa0a13cc1bd7b99dc41ecdb88ffafd0cba60785ee644b3e3c99f5a3918c8de096c1d3601088f8bdcbd23f2add7adc99aee48aa0753e0d7a45664174aba2b8db688207c92bda2cb11654f1d19d4bb178dab03f858194850461428d8df13d73f578d5d83ca305f726e83cf97540207896d8722b99804599ec751fc00ca2f0a1d724970fd32b4e66031554810b7054eddcddaddeecd7ddd96f3c6a552d07b69434dd539f8981fe58a0db8ed707b315202fe30bf2e4ef4b0340ff694cd2bb6dfec0b3d305316ce3445968dad6e7519590195e2e29f143b11d1768aaa6bd73b5dac820c7ab5d6188b86b5b22500e4120aa6842d82413350ee6bd33dab60933eabf0b3a3dce990dbb1587d714af8b1ca2f585fc91bde751fc8365dde4ccf040e26dc4d5b662a9ca97e0f1ef04d5bab8f03772c31099dc612c0357a5fb00977d868e2f155180695d639d2f3fae8edfa7aec69620ab8c5d693ba14a06db2ef508d4c5626215b190d8316e0059d88d32a958d6d54f15721a6f4beed5f00283911438abefdc15c0c18274000002280000022400000220016991ee62b84a750b5859086bc232ec24c905f59544d35ab84d61ca8b2088910000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088ff0b0b0037a70ea3b3914824508b6010f7e108e92547f8fdea2f182c7e8bbfe02f49b2bda70ec816e750e84dafe4cf42f49c528f074af55f8db9247027269ffca7b22bdd90abd948668a08ad2e9234ac5f0b4b905f6c1fe50fe5eb3fe4f101d5ad725124665203f1ef26c3ad98db12da22aa6d1df38637aaf1e303c5d95f4fed098c68026e7c588901df1921bf6d577d27a4fdc8d8e98f5f486ce9067dae499b2fe2b1e6a5f427993ae34845461ea17678b601fec06c0ffe7bac8926510aa9d2743ae66f66520921ab61d09cbe6e5181236a826e01e326dfa33b8410847ae5715ebf110891be2278ec4c1ae087313e7881b7fda1e061f9ed019de1202992bafa902ee4e8f79b69d58e1d5864671d10c1aff16de4c287fb36b4882dc345e0e3f1575bd9bc7ef520191cd15b80dc2e574fdb7e6f6db3ac20eab1b3dc8719b8a6523a9b23a5e6077ed946c055e06f9f5f299fabb22210319315f35fac7c87d3350af06717db204f8db6781e9083591612b4f95ffa4d2aba62f8bd1d451c8516ba5e43177092766f643d56b48d2adf3beb90a9979ccab4a247d6a822b74cf8d081b12fe4add0943c630f06e95ee2efdaa4d166a83fe1e20780f487153dd8d4f50a000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400122a520b95023bd46c3baba578271deb56afbc6ef37e49454b9320d637d9511e4020b27ff7bdfdf113066dc88158d26e64fde805179feab238940b7dfabc7e2d9d81f43c0043bf10c93c90374d34fdeef63c8dab78a094f7db46386486bed06515e000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000985f73a8ea4f5824902c098777bdc48a29114c5e7a72b485d094005da20a0ada0ecc3e0346a0f2fcc015808504c317d87527e2bb4d139715af83b69dc4c2438afed065f083666a95ad17bc575a865e4bfa42e0096102fbecafd128f95b027be3c5dbeacd8b409cc5d81d39384c1df53e6074659e1a3dd20a78616eeb274236b699fb9e52839597e065e6883e82b960f1a484b5a4f5be4fc1ce02a52b75709c4780b1ac90be1bad7e0d8b165ae5bec11a28907dde8a3c8b79da51afd60abd872c1448d54ade308601af8bd0d0026444c94151cbfc53d0fd53ac5ae134f4507e8135030455a296847ee56645abc5beaa2d8b7efd309ac1f4b7e77abfe186d998ce7fdfc5cfa3bca8cf9e666bc222fb15a9c1eb7426d06bdb8669e74a072c9cc49f4174fc04dda2120bfce90f89c59ff60704132c71881d488cfa57475a5d6f25845a560d8060b86cd92bdff24f9d1b6b7744601cd9e951f56ff4a5ae47e03019e0e5843e025d2a220abae3908e0361249e4cf6ca71782a652e302af5be9e8bd555eb7893a53e7f77129838a1edce9e70161d7d0c64534139fee12006a57d4c4b21edd064bd6d3b81966f2f39f58def278c542697b82f48c39132e573e31801da800000022800000224000002202a047d1422732787b82a4ac046a629ae3cc0482b3ab28c550ec17dfcdb49cfbd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2c648243e09f57cceb5031479926f95dcc991c5bd93aabbcdbd4bdbc13fced9fd71d2b12384b71a95887b08b57eebabfa55873b6eeaa51144c50802f3526541f1f25c89b53a96a7b5e2ee39a992e83b5c94c62f68599efda56d05ea6d63a12badfd1ff3f0e103adf7a1501d2d2c77ca97547341023159edb88febf9f7eeb15d989a596ef513cd98be1c30907a41ad4c5ad0e0b390896a8cd7301527f3b301a59d313d987fb7439506824e281b33bd6f59c1381895d0d47a784f9cc61f372cdc41b5a2809b494306347f113a7b005ecdd88297e50a8076664e9310be6d73c4366f51b1ff28dc84f963f6323c4aaf186949c8a4e207933d300d48ce46ec4fb5ed96e68aaab6e2d088d518889f7e37293651a77f426869c5f085e63bccec2375d8a5dc6e7fa922e02a392fc927372f893488efe9bc1b87da432735ba3b9c225b9e573385b8c7d3675e32a0eed2f610027d32c9c619a817e8a805f2d78883745d64cb7634bbccb9847e9c767a8744582b5528f98a3d1c943f44722df3611c3f460279b81ceafc3cd172734e641741a272ed34f821c1697b692cc6690d55ee73543a4dfd738790a2e15d15b9a10a0dd7249e1ec388d0194339e55c5dd42ad991549e000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020282734be5d744925de887e0583d5063867608cf8a67ac76935b89dbaa0f185502d613608e63de6b218c4f05d7be59bd44994939c979d046a0933a82b06f15ec020b4d02a003dccebc5f0f36accb7e97aba23f6e8f686f4d8b25102f13e6426a6324849f5cfc97f3c4ace9badd70fbbfca203d0b4f72f9fe5f8f1c875f17adc4d700000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011eb172c866995cfd92dd474d8bb161e213244f9d749ea45fa882976c6c635164d3ff01f6fddba68f9f7f524a4261b39c1acbf3acaea230ccb00dfd9d3e23cd37d2414266a3652725085fc99706440d9087c8ed2174711fca18ccd93bca030c77dad8eba3421c2a4334c9debfb4f80edbc5e1a1d3a0fb08e82006964de362e890cfe20a93a43480b02616b8f256820d2b85f87c902b265778bbf2c0e2723c9b245201dea996b5f24057d6029e6d7a8b49c1dc674676f8ffc1c4a4818036035cda508dfc4b23f6e7027693cfce11aa13cbd85109ad5446e20d856fab1651a6b6f95f23a7ea9dfec959b9b38c5d44b11a5b8fa3f357b3de7c22859df75408d0ca2e4b08104de2658794de47d638911cf9bcbc9dbc584e441ae4b1791da96c5f186f1174aaba1ce5c7f435cf30dfd9cb9f4db03c7d07f5fe1182a9b929b456bf060526a6a5262511bc7d3ab77aa42b6ec8d4154dc50bd39e8e7ac7d925fcc21b79028f2a3e848a67c6f0d233e603a622674d15801b044683cd4aacc56c78e89b7e56693f7a625e0f6c9123c9a410610ff7e029847ea8d02d2ae67c4bcab8f1e0f9265370c6a9b7443441ce769e7a829989ea909e4e58170f2ab499ddfaf4b605f8a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d83cb94eb66d2602a416ddc83de7c0709bc9d30b5da0fbef1cc4e7fab3e407c19b3c16aecd28c00d5e65594e726dea7e9dcd5e4803e7a1d23fd5b2807ee68e5b8fd0f6486f43202972e70183779d8b4a6137b0cdb7ffaadf2c406674e62d3f228bb8bd8dcdd843dbc808f5236716a6eaac208f3b4ca48f1bc003d9ed538d063ae4d9557634bd671144ba1548fdc1dabd6508e5ba74882f7808dbeff420b70ab3904b78420ac858c5aafdfed928005857f5ee3ae015edaeae13e0dc2d42176d68eca391b406a27e4b2e51a3bbd6949ad144d4f7cb781b6d93f3403ae7d2a68b482d3261cfd90c0de4395647d72cffe8b374dcb730858a6a42da89bf9c221639e7d370f9b3508000d0317547542d4ffc3e7942993484187aa03efa4201d7796d8e5122f3326b8c05a837dc3008825d4fb130b598afedb945c71aa72bb472b615c6a6ec9bc03a75634f6f7a744f0c0cf16487dd35c7464afaa016ac6e7a6d47a4dd38965eeb3cf16f1f042a65b5b06dc99742e07a3bcc3ac91f4dd61834db84b93aeee07479328eccb55f99c9f845a4eabb1f42b8eb3b12b6f574fe59a0da9bb56787cd9a9552401281e3d021596c799904b4c94b2348b9666af0448bb5875f4bc0000022800000224000002202a0afe8e79c3869ee0c8f52f6ae19d8a6d8639fb16d160fd80eb66910264cad200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad079e20a412b1ad7496c74e2b57533512284cef95696ea1e22fa6775718399eb2b052c8ea004b52938b380628526c73df4c0b6d90443da7972d454496e8beedc48935de3b870056bf1cce0a879630f9e4374f0c77e2cdcee5c46ff56b17954cea7c73a8801d030569ac9c3bb665f42bab63e15c6301c6fa5cd0f9c50199c1d5692f0a1c6be08a00b228d24a9aa5872bf822daf9a839a89376aea420ac67fdc46bb6f18ff02c03649030ccdb9797804556d12cf772f8ef25aabfeda3c66c957001af130d4f72bc44a9a50195686f3016d47c08eea5128b5822fca0965a251aa52640a8fc9647497823e13a0696848ecdea46fac83987df40c224b833fdcd3d31e1a2e44c3ead81ea9e28341d61cf6282583bc2455aa54f6e9b2f5fe9bcc449fba8c14b392f7b109f574d6d8b0c4fd82ac91118922c973cff2b89054a75832ed38b864445ed67e0c426a6eefb6290d5cd9e6b8c0e8501c9a5da001c2295ddb147d17984aec7b85e4208d0b8c9e926871e6766a8e8f377b1dc51004f0831483826f2575481e73d5b3297ddf9dc7a85a25a5a7ae680a8ca96b83f72ede7fb951be68359cad1eefbaceb20ff7cd9af22729bf9259e8c6238ad93c3b64c21de27a50b000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400119a7637b60b1a8635d8975fc3dbcaf9982e8a149eb341c14aba79b57f0dee1f5020e41b7cbb76a35ed59c58d4fc90ff8c236190b3aa51937e75d41c0f2c08ef0920e5b6277faedbe92eff3933770d78a7f7bfabdbcd3522f871fd202327324bbc00000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d5d310c629a77543c8446b37cb4be483f0c3ccdb426abf020af8566ccdbb837ca92af06f37bbd7b112f63d2dc1730279500ddbbf3af065169360060097638ce6ca44cbdaa11687154ff88657454bcffcc4cec6d5f90598c9cce1f2e864b516965ae1882987142e5539c7d26d013c27dc6921e74ce0a6c9acddf7ce23ad7eb1b0fd6718f0fa7fc446eabdb414a3a9a5174e3416a23c1588ea4c5c4101baca9eafb17ed6269985b7d0e1b59edc819d1b37202a6635ee4e17a1d7cf4c8d9b82d749cda64d777b7c8b7b986379a2e85bd3587f48eaed3a0211da2d2ce9626520114d6becef545ba4630030de455053180b8ef5a416fde560b8b61baa6af6ed97dac3d42eb447e54a03431b74313020ad9dbae88be1ea3584dab83257c06a201953998807e7c1af880cc18d15572bb981706f07e6371042ef158548b8e0d2a194474323ab7a43500bfed3b7f777e48f1934b08dd2bdb3e7593139e9d794e254c34f34dc00bc42c9daa989468f676c3c159564ec347d35f94e355464237b9fc170c1fb4643ba1796f4806f216cf4589390b8157436c9c841d9ec7e81accdaaa9a0cf4fc78699e9f64b2982740a30dc23b9aa548f6370037014d24c9138039f1080a6a0000022800000224000002201fbaf7c56a43d20f8a0e0656301d02c946bc9f86353caa97cd02f5f0dcfbe2d80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d5aee8946d3e9788bf1779aed44859a322143a288b54e235fee9ced64a3174fab8b6f7417115dee03294c5336d3bfbc1bd9724553a86039c6cafdf6c008cf8b1071721642423035657a8468af7ce6b5ac7e86111a62c157048e184e5c6fcbebba601d082a6ad08bac0f9e62a60a8ff21d10ecdd95fefaae5efada24b4add3f006992590142486a2bbd6777607c77806ad9f442519e6b3e0e1526c3685cdfc5c85410f643546c7db17b2e1e1d2075f53d46fd1a58714ce5c911d3539d3ecd59823a7e19c0180273700a454bdd944a9ea66e0c46f68a0a3c5cbc408d4e8dba175366945b8225df5b47d281452ed2d334814fa28bfa3b865d7129d2104c7d4d29c5c48c91c49ef6b65c62cd23898dab59009230f705f6a07b56dbd295276c5c7002ae3508755726aeceba826839cb7ed0e18bd661835d1b7e3232aff189e28f77a27b7a335e4ff6ee7e0ac9845fb63825785a8da4ffbb4b751b21653860c2dcdf5860230ca673ce4e41b1b0629e0b18f257eb7ff91ad43be6be1af1a1480b8cbc5e1fc3cc123096567b05182ebb648031b95f787e311f7c75959e232c29a8fe6fdd29879260cd2e168ef2b07f3dd5dfaf81c97429c292d562f822eb34c8a92f13000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011e5115f5e2a0be0e4bb6623072080ec13c1a465fe807033505031e30b9880e9b020e64afb534f701fe2c65d4d81c36d5a4b0f9c223d4e9fe59a0623fd1e8841f441f67f037eb839e00cc62d05d7b81c07eeff7b356bf0c178c46983d8878f09e120000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f16305db65d6281400461e0deedff45e8d86c0ce2a36d0fbdd2ce24d00e4baa406f89268450e952e3bc5b3a62ed4a937df591c7f710bad782ea25f5fa6e3db39dc1919f99283cb70c2ebb8d13a8c65dbcadc68c7d1204f881cf5bfb88a374af5d2b80441825d278f4ea1a9df92347a7acbf80aba6a908c5da8cd06be91a8dd204aeaeb258d041a205803275131767f0633ee517eceb253222509276ed0b4544284235b0a663f02e3f523c3288792973550f1d5b9c866da74da770f19802fe2e01a91601586ffe3ed6fdbb000f7b9290bbdd5b8711c5d39b66d1383ba1a09c5f3f53d3aa757495497850473dfdc993800f802639bc3cf7da05f6c9d514f51af6e075ca3ad9d80660068ac19c4bc7fd4365fcc66f19b48f047eca61a0f6d0d21f6f42aae96a78ef4e9069d85b6974af8bd8c2f8b0993ce744511796bd7c2f0b0244cdb59a8db2e519f7f0dd5c3aa19b0fd0d60d005905d2c54c6f41bc291d66282afd21b8364f0655d6de9afc3f417e9cf034dbc0a27b5fa0888b637e11a1069afaeb169debbec34f1148ba88bf0c50d5fcb6bbb4d84c85453d786af84438dd158a52dfea4363e37b78453f282bb465e63d51079337873c04515d704b6b774d1200000228000002240000022021c380798b8017f4e46f17897d62b41d25f075790164d31b6bbbcc34b807798f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002466ad391bd72d4c23d343e411c38a7e9e253f8ae973893d50f699fe3ca0f141d4f37215f13a7b196dbcbe697cbd5eb7cfff64194669d54e68ce9d1f78ff642aa739402e62826e1cd234bc9227d4ef7f954168aa2b2f5587f81e230458d673c432ae88d424d3baaf25d76aeda9ab0ddfb806b548b14276f1acd959a272d791dd92952aaef1168f6a6b524fd28db6e70aa5803fec641d305c15ef063fde009a41b62bb43c3eb330b49747c2b3b69a36c0ec396572a6b8def1d4264800b8c75f365c27f16eed49d121f7a0df0be67bfd9a9a8412fb26e7266adc34d66e1bbbbc65df70c41940218bfbdf1177dc8ab54308b31dc6cffd886644e477a5e1f8cd0091ead4e264df0deb47fbade8860336f3dfda421ba75bbf3b622d8a018f0a7169d21368b252138b2fb809ca7a41b43ae8bec046ed1819bd9957325c05afcf8f4732b747637099b1e2ba38998d327ba6deb92b427b90bccb8ed8cc6e1832a6613f1ecbebc12c8e225fccc09e2bd4251770752b6ba772390e92f5d7c4175af35b707c030c0149eba0684d32e68eab68d21ef674f4477a5c1f0469c04a7c8ced7bec63d85750823b0a720c7286d26d444b15c311e875e56814667ba3028884968da050000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00206f5f7d3c342aedc065ccc4cc58c839d64d9baaaeda3ee3de9a7e2c7a7cb447223c6da751137d5cf1bfea91f5c0f1d421908bd71400589d15c7dc77f156a6dc8020f49c20ed85dbbfefba339a1dc719aa185748dfdfe8aea7261a09309d3b12adf1e16e574effa407b8a791a1089e488311f7ff86a9581024dee53663dc1f10a1d00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024e42304379b52d60ad33487a96010dd38bc178cf63abf6edc465353b55b2efef77353a770b7d8e7c88cffe5f73ffae6821b821e78148467ba583cc377e8e74c244f28b883882626fab913bf2254972b8e25227e60b6e8acdce535fe066dd351e0b84177a66a523659685d06a7c306d0f341871f5b19a40be2b9597a7a24c4150dc693366e2731b841f4508126fb022c85e578381e5d91ffef0e0d6c43df47dce67da105afea17a1d8d9ed8562ec4ac7c5da163cbbff4dd975b2d34ac45ab1036370122ab9a32d0dbb90c2d7ea80b1f6030dad456f1a1bcdba63ec74ad207ac2ff7a3d1b8076475fac2f49269864d47be423312776a58bfccfb3edfbdb23cfd47964c2faf2fb14dd7f4357b3666a0731828316eb15c9260a55c50e09f85bc921ceb9dffd876ce20e8136785f67bc1a8cc10eb0698d48cdf690c249b1864e774b376903a9681dc6e42e9ee4c9488cfd1f45e3dd85b769a11a3477105fccabf2f83bff5bce1a0796e9889d99c5a7ad816cdb2e3f3fcaadf463662627cd555104a1b95ebf1c536ba7387b8310242b38b5fb3fe5ed64f22667e5959aabb3139574be09c92aa3d4b97bafbc5fda58bcdad332b23eca53d3a38cfe718c552f538c46af0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000852649a2785566027507cb2d261a9d4f41f7e2c713f25d2c8eaff06543e78051b05390df3119fead13285de53d6bb6d84d7cd7936aef69c8e3ab2ec1275f3f1494a94726205ea1f63c16a5294ca66c3caf9ebc57f27b826bca06e1d21e58302ebc04895b956a4eb4395e5cedde17464c50b9c44d8c091a945f184a965b6735daaa9598489755895e4d53b35308e5e681f2b32fb98f38f703c090016302fd05d5cd53ddc0b7ce1a6dc71c5260da834608f9f3cf5c19cd517dbb0deaf3e48ebd5cab5898cf8c857609ba4af80efcfcd4d122082bf8042b17387a233d08123ce0809337d410ef0df112392de34b65ac0dc3a8f0e95e5ad28e15e589796b9cf465029f28c0dcf81a9006536f444cb02098547d6ffde24cb85761c7a1ce6d71a62aa0177a822d2cc785ee860a221f170d5659360338fbad2c6dba986421c3c638b54117e25367df35d19342b024e7291e6a55abd81a4270f8585fb38a43f0054137a8c7c11d17d2400e4055b65c0e0814f69234088bca6ec2293f1df140bb2c687d89b3321ce4f904484f4cfe3696a9b93fa25774821c4a5f21560b24f922e6688ec78bd0f9cafe7b4077d591542dfc3afe26b018633e4d8e6db2ceff9a0fb43de3220000022800000224000002202ef66f9d734005eef43e5c190460588d2f316aa16dae66a4f923859a85bc92b100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a321ce57217b414847ea6e727633306a3134fb0c8bf7f88929ed43693fb7d97ffe16ec9785b1b09fca4ea3eb5349636bf13ce1fcf3ad193780ef9999ee47d4ab98ce222740c52bd4aa5ffddeae9f01d06044895018f7807031bc2c409074a8b0ac66fce8d736ff45974ed338f0fccb87a6e0dd9c8b3620ea6a327b1136e751a1d004546e52530f4a25eee16612753f12d3f321fd57de413847d33563fd375b120daa66e43089f7d7956ade191f0aa14cb9ad965cae30835884b1baa48d4da115443538d8c8988341b76799f4b6aeee9e4bbc567184d840fb1ba55c312c36cc41f8bdd0f406c49af0b1cf9c67ddd444c8bae6d63fd377257ce86579608fbb2f1e573b47b328ee7976ef83a1af019b8195f02a0d50570d40f6fe5e3455a3ac20f547d30067739806eb2bc4fa6da9791dc5f02d91c29ddb9601642d362ee248352589a36a8b1bbed65b1dd91c0ea994eb3cdb1c1e01b0506e060ab0a091bd33ba4dbd56df549bbb5f35acd26f92db0808e1d8cc84c2b85a698838dd458d3cf36bf2e67aa8a4a6bbadfbcf3b2c0d255e54397d8b7458f22822c7299e77da01db5132875254b4c926bf2f42b7f3f7899f3e1aa18ce41fbf287655a5dee2749db5657d000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00219c01c1cf4f4b0405e1cc6e057c405ef588684a1af5c0c50ad98fb09d38eeaf123961efdb67ca1f2d7a4c367423123ac3f244acc68a1f4f78de45bd182e00ba30213c4d4e9d4623b9aa0274c220813be31b43272902d11f98b44d30c2b8ee5acae0b9c18957dbe884e34b851c6554bff24051f672b7fbb5360b4bc15f4e7db46d000000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b05a0706a3d02de7c474e64e50b27fdefdadb423a7941eb32270120a989ab45c181dc7bc30cadee957aacbf7e817a32c5fe0be6459b7c6a477b0ea2ae41640f1065684a3ae8816645317e815f278ba523490b5f6404de01c995400c2cde6dbdf47f74f11521fc89b0a018ac5f16e77f67649270cb729ae87b319658cd0fbac0504f8aa872722bfad608306962649a696813c27b2c8893e6161ea60d6b4307dbbb1eeee3105aa25167158bfbaf56811999946a8f4cc1c0f5fd026084f9f83ee8cc7ff740c01eba3b52b62a3b8cd61741ec0050fe22deebc152daa4cb1f0889d37835be98e7fe4ad913f27492acb4531dc0e763c429d80006f2e42006f20351d9bc86687037a9ae133b17ec1807c51c7617437b5d2cafd2d2e74200b4206f8bdd161c3007a49a237c7a0e403524b7d217b04b5a23ef21592edddfa7af2b4bdbb963c603ac289e938f5f86db4bf9591236a4f67e869b9b1ef0b51b47cf0c3e275d95f0c2e257344bf322413ae94377ca3ded7aa3c6c86e8dac66d33cfc867e16fe869ed767a5d722f1594d228a1195a34160a7b2c6dcc0cb61062d26be3d83bfc2a69036bbcc104a660e5766d8edd20691a539ad85aca727bdb28c99414ae1c5dd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b14336a915b39601b56f3febc77498581970dcb1961ab3f54b7dfe32c6bcfd9b7d041b935bfed552e6b4803c04fdaa8bddcc39c6d9528570bbd01484762fcc11068410ecdfd6e73a224a8b43fc928ca840f138438c271db36e8c36b4c74de533ae67b4b5d9d9f93596f7d53c1468c22acea293291e68928259e7371570692042d29adaf53418dca7b5cd948ef5c015367952ff82a07feac679842b34632bf1857dd56e1a0a847e54e2871ec54b87fb08b5357ca9a771ffe19545c32168b3ff9551443ca141f9fd26a18d9a1a64d67a8644197b04f5bf52696e6f773d9044a6689130976d3c3b833dfd436a82a994b1e7f09ae7986209cc31d033e211426bdfa767191382b6b3b7badde4a3f881a28c43cf6fe3fa279e4d0c3bec8554ddc098e4938d792ae24f2358a396ad7bd185fec67bdf49cd547a2c5da4f4a0ff34fc63ed02bae190929d5a7a4ea926070f938f8073e07d61f2d1c67764b6606867a2d6f1e34c83a0b923b3453de788619c71517e6087cf01167450cc11e9a42df15f67c9ae652211e69f07367072d6e67ace647b657119421c7ec022cd7dc635d70ef1a25ffc45a070adfd9ec6abff65bd33b37ba970baf7d7a27e576b4a8d3213c4d7d000002280000022400000220121541edf276e9eb16201799b9557816b4e92730620da44f403dcce804e80d410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096c6588290a5094fa74741fb113a842c4b7b2889b8966922ae869b30e30e943c5d6a63c4b7c95d735117c0e0033a75318760f65979cadf8f918550d6d5c7e6616f52f2931df8d97175a49aebcdda553d4111270b4b9d7dfac2b82f5bdaf2dd01850801e24d927498bf0fc97fba70545cf03795ba03a92bcca668725f5f4e2e7d7eb69d3167953d5efbe7be12de42e17f472a3e192a15076c60a143e1f2e3953e4f24a769c35dc849dd5ded0bafe0f6e25cd397835f5d04e68c3c537a8f9aa45dc3698f0070d0c4baf501551d8a723b727652466269d00ea3af27df29dec397d5a9417bc971c13532194e8962addd2f057c92dc7c0ab78d97517402b39b1494040c7d12ed8f030218352bc86b1006dd8720d558b16970df06173d310dc58a8a5285219ad659d545b4562421cbafe7e84c36878467969600e1f94315fd2b7a7368a1542e38de0a5075f9a4b0a03af2a7ea254989cd527eedcd622e4660ec568b2a4aa005aac7fe25275e2ba408e337557791c69bea1faea6ddf57d3b487e603f709d724b6720e650ee3d2eae07d245cd18c10d67480f3a94033f0029f746ad8efc9fb2557fb54ba6edb90a58dd1eadbb698593924d1ee356d322d92cfb65b26cc1000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020889ed7dcdd13f3820fca61404980e7df038a68ea604a370421a8cbd8b6654530aedfb79039d0eb35c68f096b58e98ddf9117a8b1c2ce82c58d7e96dcf70fbc10214a49a6e3f98e02ebfa83e4e240d6b85a1e17aaa0845eb9dcc549d94c5911f6216f8a2093ca78223ee184f6c5a30931f5e6e6bed1c4c45e4dbcf40679bf2775e00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f5ea53e5b40cf17cfd72c07eaa8f34fead32062534e831c99d26cd413bc5cf9e2a520018901ceaaa634b89bc10276ddf14a0bab0e33b59a90f89b22c2f8e9f32f4511594081cdd3cba16e2c944589dd81dfab843f9d5903fcdf714c16f5b5b14386bac234a97690b9da20e8cfcafdbcc33f7dbe0b0aceea46d344927e5bd6ae64a3b89e8cdfee2e872c66bd3cbe09be5b20ecfd6e082e64ec93025651a74cb74f7230e22ae99c228dfe208dcf97345582841f7dfaf4a2129aceb040c75d94e5e1c80fa6936a6a5640a5361f7e2573e4462708caeb6b29d89fd207545b96bdf5595f3d27b6bcf2da6bb2b5a44e3f6036464db2f2aa012d942ed2ef6f05d64a279b6a19ee3f6201dff0cbc61be73b1622acdb8148784c250dc5feb5908591f8a00e517421339ed708595642fd9e173a46202dd8d5298032f1c2f4e289e917a167e2d52d80b5fd751d7482af482f36200be01304eb0aede948f87a7822732db1c0cdccdef6d3722040bbd33d0f1142a41f7997ab550192245489bd8f9164f732dfd788d58080cde7123524ad1e6e69dbb51ae5b7fed103534bfb868e61edbe2d84a906237843bce7ce082a229890235596d13d8918bb845300bc645f20c33b25cb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014ee8f917e584406077c06bb89cb0b419fed22f6bef365d067edb4863454bec783218ecc6e4c5d02f0f002496555f896570ab408cd15f2587a0b10c06e867c2c9a87d6955109f636df2eb71c2665bc7ef7bb907bfa555a45472388fd31c3fc7e977b0710c41f215871ed056ce5f66a8f5074d8eb8c13a324f940038f90160ecf783c3f45dbbc0be511f80a97b9161642f48c3a715c2f70d1283449ef0c61a1b8f2f651812ceefbcad194f56327e4cfff4785bac1a19ac8c6d6cf313856baf3b1feeb549c95319ca1e43518454d83aa414f3e90f03c3cb84604ba6f927d482f97968183f67922f52db682b0d2d88805dd60be8c7c8969b0b62897f1a8d68d6ccf38d96453c9ecbd8c0b1d899b6559356552d221bb322d55571de35bb9b94cc757d0bb875dfcc5c4bdaccfd8ece50987b4a652c8fad2f6b23f9cd008dbaad9f467a55a925bd4578cc5356d20580c0bbd344ca758438ebb767933e53bfebea7b034303f680b79a5e040eb75220f09483555b7470be14c1cda2f06c7aeb24d62dd339146e20edc60b04cf2e0e7d0f25cacbdde0907956709f166bd9a2bc5e9e4b7ad9a7acefad2a6b7954a7a88acf9f6424e47d4bec61b4bd97d6673a5084fbefb050000022800000224000002201b393e71236b7098820b6d74802c4fbd7416c081ca9f0e171c4a813b4b5821030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026433753daaf62c52b4c5d2566cb3511127b0522c27cc6bba545dca76c3f386dab6385c3f893537cbfb3d679efe603cbec9c4a04cbece158ce4d2390d9553c3918016d9ff2828c3ee1ae1e9f2537b6146dc27c48eda55f913c0ba6a0a97cc781f2ecfb5a667b8d3c0118a4c3076e0907bcf40ed2045b47538fa223393564d110169d2c17b06a11d08b0080db17df93277f15b2b3c9d6e183cd88aaa406d38caf6b6678be534d2719778f8e6c07b909771d90d861569808e61e57a93fffd019313159100a6ff17121526f417c511c11923f14479d42ff312dd5210fcb2bb36676d0234a253e29f95f14ef1d42ca08772302c356281a996d2b4ab3fd99da01a2d43f3e7c8990f4377d117de234bc596c68f5262f0e8bddce470ad8ce2207bec32027ea7ea55fe4221cb089b003a74aa567b4e0a55b9dfc0a3932ee5849304376f5a4f919d9813b448697e23ce77a60ea61cc0373a0ff70e515fba107ba4f01ba1348f47855265a45dfb0c9bd99fc412f0fcecb46d4822d53411e2980ae6fa2ebf32e920ac07f3d8a4724fad7add52a6b1bca1c85f1b8e609a0166178de103a90aa2f1dbc85b46ab2326ef5289420a4f792650e57cccd98034f62f8984f38598b50000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010ebd4b3be1dc4c882866df259e2ac8e2c984bdfdb9f6ac9be930f56c1aa1596f0216abca8278cb29da8971e12e89daaa10b17f2cd098615a22d455b92c76c5e0f716b75631324991e896b680625e6864e8dd5c1d9e625f52ba6442b360f4c51f5f000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a94194451d4395b1e0047eb44f575c7e4ef5ffa9582227a9f36dd4063022e6401566947bedd65a3265a4e3154f2b2a0fa0feeaccd0042839d7798959e476ab08e9aa3cafa05b5a366739f00d70c2baa81cf463658ae11ffbffdca151040cee73f9a22eaa32479b6b7fa57eb9131c48fdf2f9318a67412c5d2bba48140ccea46c692eb94f7e696cb3030ce14307866cd10cc4e637c1a29d0fbfc2c9fa640c649599b79ae2a13c9054a9a25957a719164bc99395ac147e43b5a16f4e730235a79e8e72cb4d12b350c7b0040eee7898dd393ebf48f43c01867b27b055ddb3424e06fb44fc3ea50293e2729d31e5336fc334040de2dfd437a9ae295ca7d165626640c8dcb354818739bd4b8e444ed4a439d4fdbe7fb96cb62ea4737556ed9a2cd3f49f5e43339fc8484be7a654be985fce47280b5bdbe4e6cea9f94114206cd687e341d8c6fbdd490d3a6fdbf9e0ead3e75f68378be544c3644a09e692bf70ca24d4c9e5f90ee8c8dc0f1c939cb6ffe6e95c622f06c5ad1cff6e2c3010bd3b02ba614f697baecd495d9efcc0a85badf0f92258665ff12ce40535e72bdb0c306aab02164db4f4812b136927403965e6da083734bf1a212033c4ea2f0ddfd80ea5db9100000228000002240000022026b1e8bffdb49379991d001b610a8921725b6537454dfaced496c0875aeb697d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d31bb65848462cac2cf6cb20a9cc5db2c83092201eb1499d8c3f80d17aa0737a179f17a490eff6deff11452dd44208e31f6964fcb0b4f568a8b77456283baff61ed30f3a262acce481a066765f801f1fba57bd65a465ef192a81eaca5607bf2ecb884f594120f9a450f9f40a42d35c87d0c4e0b51f294f3c40563446ba7612cfa8b5551f703c7c9ca2fb2032a6a5a08d8917fa8cee0a0e1d19568534a4b759f89f3b1ef121511b7defd14ae806565cfcf6006bfdea1fb851d4df94bfe3a557cb56c5e77575591c00ae91aa03c0a66a31368a504806043cca1d2c23e902f126e3aedfa796fea287904e78d8faaf8cf3ef7021cd4b9182a1e8bd4d5ba1ea75df6a4374ad2a01e5e204337db6ace14238e7845c30d60fd76703bd01a2d36d82b56ad4d4dd674b0a76d6d5376f4e9583b3662b00fce4df64d0b0d6c8e79cb71957d537fcb2416b089e52400dfc086aac6117f7742b257f7250df2de847197b83c97092cb3c43ef40febdcd907c28a2576cd034dac2b32f8c22c543ad932e8024727e06d9e9e12409442cbb73844996b658dc79a85a99de6cd8a22eb97bcc48ac65979b7be359b31fca5c8618278547a2e1e5cf8024925d982d8e5eb0d0ddaf3e3d8000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020f2d2ae58aed1c8c15f08688e6bcfbeaa392001cda78e395f72fb9bbadf9abfc204ef8aba610cf24185cd28525d79cbdd8fa87103b0e855148f97f721783aca1021925979b5125a2ae67372a792b08972ab3bf8417e80a2659aff433b9b42ef3e103d8b9656ec508225c812698236e703f28affaca453a4bbfdc7d81da6e4d8d5700000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081572caa2dbede86df3e9224e0324bc73369193b3d71b9f6a39491be0dd1851a72667b2a070c4062b427f44a3cf871b8b84801ac4a18676bbd4c5edda3ccab02703514b046a15b610c3638b91e2c3e1332477d289faab96d0028c085136bdc65fca551fe6956a9ec6909ba5bb710d3b22757f11e5488d06d1eef341468453f3b6a3b66c06dd9c207ae27d6dce1eb4443705931f5c7aa78b00112e679f0d3db512dc4b0e012cda4c28bf337ed825686ca666c34d09aa9717ad38223fa8b38c36668e4881bef4d80449aafbd77b29a02cde807fb210a886cdf149c8de8ca1ee6eb5d99d5e433daf5c452d8d62c1b1ae9958f1db812e9c08d0eb55c227581890f2dfc24f70fc7f902898524ac0cea9f18b4862b11b512ad85b38f1965f1e5fb31fb248562280726d386d20c1c3ae111d97fa535cd4ad1b0abd6a38fb29d7a3f8025c8597fb154eecc4c2561257d3aa3b424650428115042fc2b39813f6f311c2b87ce53bb6061bf4387a882791a279b7308c3c620c4b1565c1ae5e250b2b8c3b6ccb34d723fc45a1ed6a6987bb845e542a5fc4058501e8307985c0473f5e351da0234018137d1d6cdf8a78ac3e4e2f5b59fc7d2107d51ffda11787fd83c410608010000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064bc5c0c0b3f6bb062636a4be435711b4c948758acb275adcd68538f1538f78388a284bce7565adc3e860978ab9be5d04ba3c21ceca1a310a145c8840524778ff9cf7258ab1f6385ae39f6fdcc64571cc68f7fac89d0cc469e8dae31bbd83d78b7248f879c85f390a9380229bb1c8eeb20d28d8bd9647ce18599657ea70964482d43b8fadb3cbd7b163f851705518f727eaf897d2efc715ec9f90a65f4fc62be9b832ae7e154421be1b952761d1c9d9650444de539a982be0bd7e31a0fff4646b323494b65e73f7f0e838507c337eb8e9f307bb4fcef1b8b354358dc99445825ffacc8b0046e25a6ccef04520256f24625f464548750b387b0986da3088a1a52993aad10ec334d02fa8f8765f00bd9fc65c56665937f23e5dab37206be47ffd8a81366db5cbf6f44b6cf7299c5ab3a10046431e582c6556c57887045ca22f1f116c7737495801ac93daf07d50f2b5e32d7331688a0ecade9b7d72ec32cba4b25811020014ed6bb7c960a6744b6039c01300c3dff4f2ead9d265530ecba29b1d80b64fc07c60aa3efc2719d307b8464f37d018f432d786ec91834c87951c1d3439127f3fcbb1636ec26f70c60dcca414213a62e9ebc9634f5bc3f157c45c2f320000022800000224000002201e36fc060eb1b1bead72f70b6089db1cf8d53548a7805ec6fbb35364fb29f796000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b1f59016f3576855d3ecd9c2f936e74e8f76dd03e7d2e476d36f5179d2d39e421bd44c81c0301de6cd2ce0e6562d0771c2273d4512b09f8524ec6242a12eb23044fcd7573ea63044bd48c4c6fb8225bd0c2dc0d2520eed45f8ef61553ebabd5cff9bca0657245957f195cc56da4a1c387919be350c03ef9f4e7da310a723c80a5900224e1c1630f74fa04cfabe3bc39c136494f3fc4ff17e909be1a3b9ae5824ed88699a8530adef9221bc274e2807274127e2b0fe616ef1ed871da97dbbfd463f7dd792f240f81ba8655ef8f97c6f45f593bc668048b87a763d3d83f5cf9b37d5bee704c8a48023b201d4750a8222a4d9a273ea94ac7126858beaa4a4569fc4f9b4d3c3be54a8946f16f6a04b129415ea41cd02aaacf79edf8c53849c7b53d629e3361102089d147f7d6f6592a332d99d0380d0b6352cd3558e1e0f4d62c99d38a4e424c71e85e67bdc2952e6b04b23aad9187477d43daa8d6d5955da7c995df1f56a4fd16c3ebb0a7bb9582d4966916f8de6e6961fd7bac7301416ef5def6d9d5f88ed10062286f98f1cc57f8f4fffc2c2416af98edad094717fcdfb0b80a026692471cd069e70abb1b558a7816bff30d30abd4c23fb041994c35c7fd0946000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400106583f5c96ecd896feb2a6cd27e64058844bd6f009be921b34d3034ca0a057e4021b2f85d1be67b5823cd4dc64eed6c59bc35ff0d0a173a71500adc57f2a8ec9242f18117ae0c54168ee1dd71112576885e98b541b49079e1d2ec7e1e2b66e0f110000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009be6be2f5dd7ae6327ead713ce4ebfc7099a3f453f1c97eccd85c6e728b77f766fce8063ca6f2c686fa3dcf9e8807004fd583ecac72fad6462ba2c8e64a6d166ad062c0094a4e911fbc020c0c90d47b14977b85ca93a8eb27560940ea4dbd03477f754a435c616d2f8784eb6fc948682bb0ea3a9c284233c682ec582b92abf8a0fd82ace6327f740468d95458525bb8167578e9d307b6a933b4a1d494be953b8f30decdb98666c8f4d797891a1812694b51662e2fcef33279df5cd9eb233054b7920d5bc3721896a68a7855199874398795fa10f6c8fdba57959877663696abe468b8ddafcdfcf8288edca23b4a780e5307a8506b5bdb095453f7d3b918b73f04a5e418b8e66982b7a8ee1fcf7968daccab1350965bd6277b1344f23774428c6c682ce7267118ab003e457462fc214d2f122674667fa438ca67072d9880f0f58ad47743e5ef30d21511fe670afa202da52c38f84a962bdfc534c1ff98002704617989d1cffde50122a0a3a94f39ceb06e6d2e3fc2870a1c615bc196b4154745a19c3f0af77555fad93181a2b4d479cedad98b4645c1310f2239b3173571606088683508781e6480f9682c5114dc4aee697c8111bff6cc698bc30a9a89407df4e0000022800000224000002201b2e400cb35205cd72f8d0a943d021ecb890ba29baf28735d783abe2d853a14c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c5d0027ffd60cf504d709790ca52e6301c4ae0253c5d30d5430d9452d1b824a56639e2f2593c89bd16fff86377019375ae655ca5324e002870df86726faabd25f92d454ff61d583bc646c7e40e112cbd4dc04eef3bb5d21f334f63013d993dfb3bdc437b329ee38231e0e2d7ff352c44ec7d631ec8585972f1f26faaeeb28832acf404d5e1ac455a60d856f4e386ced56af7b5ae33a8f53cd4783594f90a6bf9cc17a3368b9a5eceb388da8684687a76543fcf35788aee4f349c45c6bc5c9cd4e4db992ff4314356cf810a66b7c91db0931ad0aa92c07671903feb70432a6cc6c7a1ac852e04b225a3ab7f11a5c47c46c62e524bf7a27dc553d136a01ed94d696ec853c4da0c8f5e842c1513f821da2432f4d9c53ee7d3bddcac6c6088e30e4f8e7b855e2d62f8f181cbe26d27a3300aa8a5f2cfb37645767edca1075e8e942ed3b0719abc8a38292cc79a80836684164a8e9487b7b8096c0d186dd1e0f02770a5d7fd1324722dc4a0b66e9771784e380bd1e789083af2a82f7583f05f9f653be91c6922ca1d6b9a9c41cdd15817109e19398607488d1cf6be0b62625a5679662b69b1c1758bb21eef0f65d7e0dc042f07a1d7fa72198e57434abcead0a296000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00206b986b8784e080a29de2a10c893ca1d8c6daf5e6dc6a79bacde2d935e28bba51e37f2243d1a63bb673dbd820e02cf8cc199a8c947ed6324e3d190061b10542b021bb5318f1930228df7451b0d9a2a0d3471d5ff3c88c41333ed44528ac1df247f160a6c445bcc45ae837577f0c5b7a2a729feaec9f822ce5ca8d6e73595f6272f00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a06beec17be2dc386a921fab793ddb6397aa65a7aaa25a76900b341a24f07ca916a0c8c0e9e6853716ae4bcb5bb526771e7e40e6900163b26f477065a0bda3f80daf88b76973789566beb7c4c86b275cc076cee4d68f63d9a6e9559755ac43c63c4e061bc8b162c52f3acaf90ed2141b8fd606f2be0da4ab044be597200f7bb3cb5b1858bebc3b8f0aac623ca087a042053ad72f2bba4e03486d6789c354c8e937c45c0990e0fa2aaa9978691c2693831488dcf6b8df3cc90e6b308d2e5ac85f5e4a1eec17d76b711c7a33c699251ec92d1a5af46dfb156b51681000ef549821bb9be2decf1afd68fd74c5511dfa3245640d202c7c6345dbd283facbcedf965b9d00b19735f08fcc6253bb057ac145c77f2d24d4ae9b0331bdc43a31df6bf30e784817c4547e13f53a4c9e7c0e88a2253eb504f8023d143b1896fe6fa503f486af223f5ef7b8fc2af048e4b047107ee5318eb8788ca26b4463adfef23102c5ab802e10cef15140c9f0f45c986cab3038c70324eed68dddf2611aaca905dec5ce1aa2e75b105c4931adb3002275670068abd43848e4a3bb064106e9d86d1b86906aa245c5fd048f0053f8f860f00d83a810ac645b20eb48660bf9ed1909d919760000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000113209268fcafd29c5e416c8b6183f4378c4d99c8897290ea8b47741b34700583319da811682a9eb5dd8e2564f74ffbc078e51c80bcc3f9b8d22c1585142ad0cb02c9defea0193ae2504b147258c9a9de8f1b5966bad1dfdc10c22b82b7b4f282ccf69e11caf4c682a11932c4c41239df8b51b10e99eda0224bb11fe7207f56c3aab44c812036e07317971fc70cf9dccfa8130db83232b1295d3f14f18d13e214647b0360295df9d16e469cb09e7ace9032feef26c9cb0b6e4d454e5922b68e0c639c89300de8876ee4097e5d49ed2e6757ec10fde7a53156438699cfb2bdfd1443efab1a6f6afaec1e3ff8f504535cc342eb2c85a8efcea242565255f48499c0dd806aa5a5fd80284c3440f31b74e101caa034ef06d08e48249b72b9a86737fc58852e5116444b4d1b1044ae0b0598596c0da465557c9ae81f67850aa9985940d2c2002f269265cb936b291a993db4913a8ef2f4a078b9596289a7191541bfd8bc0238f36649b956628088a09560dc05fc2ba38dff3bf965179ec96cde256aec3c8318fa002914cddc59f62e013e8a129925de64487f5b52148261b97e1d0bd510f4df43ec26a067b69caec031c3650cb12f4e3c9e7ce6d494affa35848a4310000022800000224000002201c3c3cae7c4089be84a8399260ff11c56454c9edcf63345e82c2a2512d98dcc500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa9c5d195578e64f18958e348afb23be723a3d56171f90724d3a70fe786fedd418065672fa4756db4161860d809f45b0294295c8e43c0e2c8da9bf59edceebc0ff1a972056468d8d8fab14ba3698ddf6be20768d156d2af44881a6109d01a050e131ddc71f070bac2a9dcee94404fc8c3042b3523e8ce69ff0aa4564e5bcede0869c2082f2b557ea6275fbdfa291f4b2f95be5bc3d7a1f318a3d0ebe2d134408391788e0a69b0e09b928ecb95d4f612201d1c9b7173d22f3eb860f00bdcbb668e72b8d75f98b0a399d7fb630305aadb4bd0733b20d32b703bc941726e7dc128e72c50d7ed45b189992115dfaf72d7b2b4b8c82a425b1c30049ba472c720a8d028a66b7124f4a0bd7ba3e3d8dc55e108d9056487a6b0613521fd3d81168b7f467ed4be6cd324cbf80bd3a7e441c7d8fd6b29ba7cda3d46a29cd0af366174cb343174071f1ef8679cfe5fbfb6fa93110cfcdd62b0e78c524a792cea4eeca612e2cd45605d5fb949d3dfffd8d3bf3262fa162dd9a5953b1e29eceee5bbbd91e36c890c3ba03b250fbde1e4ffa0fe09b4523c64c0cba3e0d4c8d0dbbc598e781e94072a88ac873aedcf769574f8936b1588ae2d62a850ea8caa6c8d7d1b095434015000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0021a1a3fe1c0a3ba8aadf6c6e6d65d3e31bd85ad6602cb5e364aea4e179ffe766423edb2f6f8d6b342db346856ff0bb9dc3e9b22587428e452db92733b1a0917da021ccc6af3e8d8fc6e15de374177a8abb39806e9baf0a09237417dce313156ad1f0a84639e637f3654f5b95d7a7503ef0016f7b3ca4a56d54d7a6f3a8a46b82e5500000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a72ae920fa745696cc77e980688bc18f99d095d1fbbeb662e27c896d530e819c5ceb5b9422613a4df4c5bd8c120d8ebec13e382893a8b4d8f6ab696b5f750b1b8efbc1452605a1a281e1d916ff643af120c0d3362f394348c7177d4680c9c179207950b04ac83071e5477aafe214e3682cac39a3ad88db7e7555bbd90f8d2ca418e0970c25da5139022c5521df58bdcaebd566d946d0e1396526087abb8e2f5cbc43518302affb7a84d0bc722665b08d187cb96fb71511dfa1eaea9666c52b0e4ac4f3777563e7621c5aa773c59c3e25f022df5406afb7024821efa46135b400ca059137d11890a4d6cb388c16540fcb7a73cabe95df719e05c07194b543d44d7f9a8cc64a5aefd29bd34a92fe96378388205aaa70124cb9a2cc2edf60c8a9ab19851682e0ca32ef14a50681b59a1e5e4371c75c2defbc1a90c85cf8b3a77e990af45c90f6ea344d3e5ffc71905095463cd00228f43eeba508770a13e49124b8a6ca524504c3f7918e6491fc6572ba00d8200c19887936a18ee7be1cc5d99c34b3c7f0129bd28991ca9800539a8f52c1af1a0c11402fef7335af29cb6608f672e0055c352576542ae7d4bf636e612eaf891784e3a5f24b8e07874c68a1dc7af00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0c321592277c3609f546a9ee8141de3edbf3006aedab2b5120ffe928ae39005a4bdfa1acaa94f621abd858d50fb5fa5535b574ce8564b928989b6078123e86a077b38f7fa23fa219866f5ec969d7fd27b6ee53996a0019a3727f61d3c13f5afb48f1aa330dbd2667d68d4d178f050fa279f51fe687489b4040c8bb53a32e64640221d035e2341a4b434e22fac10c302e4f9c2aa3a78f8f54ae68066469bdb4f0e07713133a579fe1927c3d0a5b7736b815312ea043fa53d0121db82998e89729384ac82ee7cd6548abde5e6f04ed47f08c04b921501a15cc2c9a3eabad25714061e80e97ec6f46e25ca8b1ddf83fb5eda465f3b558b915572b22502010e9394ff3157e03efe5598a84a2adf44b3547e6dde730238c3456a480d424e3de51744185139263e517a3aee99667cd697ab8b7fcd664acc2d6fb1f27571f04a27c5ff12dfc431f2eb87fe62d0e7c792dba5c153deece8397686b9fab56ba8587788493b00180e0b8aae304ca4905dabe117c21b4b110ece3240eb79c4973d2f1e41bc82e277275cb350724e7046bd8f9f2a23592497cd68f6865faa4501688b14ead9aa96673c975ba10dd12baab6a143a643091c5779c44063c3443d1ab8c70b3abf0000022800000224000002201884996f58626673de6ad54d77fb4b381f1f1ea39a2e5946925d27b550ae7e54000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c2280a5fcddbc5f23cdea303a3b077611c0d2c4f823c7b10a976de5366c240e1b89bc3209ff6c61d58997d11436bca14feb9746caed105d4cd48e9056e3c98233bf3c5b4e3e3d3ea2e3fa9a645ca9afba8627c7955f3538f9b732240f3d8571e46e4c85e8d37a14f92098fa239f99cb069e898e6c2d0ebc7e45939b935b9c4187c9f8af552d8b973f5fc1c12ad7e2ef300b812349fd52a100ef19e8ab1022dc994a6106ebcb65116a037d6c74569c8376027237f392ae5563377ab740757ab958757046cab39a6cbc5af0260399b3e6c4aba14c0131bbb9e2a5d6895c6270917b8ee4dfc93841d5a81a85dcafcac8dddf9a913865028828ba63051ff022b7fe3207b9ffb9a2c459b5d3bbfe0cbec8a8d17c4b8657bab87daade5703683552ee081d3db72736010e9e9cc4848d74c97cae5364e0325fd1749a8b548f3c4f989612b95bed406dbc4dc41bc4b4a925843bd69e667cec0fa3a82684935f42dfddaa638d23fe96519964fe2c24a142b7b032ba02e12483be0c41597f420c886b18c17fd7679362051ee30bed800d3cbec84af5e4f0b545366b87103808d3b6924ec097c82f3a07030a894d9fafe760be7e3d9ed4e1b9c910c894d8c07972a2f7a79e000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011692ef6f01bb9ad0d83b7011c07be6ab268dde68da396e25d6d9a7bafdc4d809021e82f3f02dae7250ff685be9a3ad1bd06abccb98287178333fc45b2165dbbad92e05d0ed27d4ae38397eee8523b2190a4b20dba81e264b1b5765dca4692142950000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001846a8570a6596da1e4ccbb68786778070fa89eeec097ed569d6732793b4eb7abbc34073aa553713fd9aef6833667c34af7db8feda6f9119ffc7a00c541ef3ac4eed63b4493937ce0b0fc4bd657774b528aa4c5c9727194028d089fffa8accc2c35b479d9b1a58e03e75284bf80c317535525369c9eaf52e336b22b44daba072f481f24ac44b029895910ac6c03578f1b4b74a3cb287dd42851f6b91e6f2d37307601c67872e895a64cc5c999fcebeb31e908573ed6a83d3346c0fc61cccebe51d2549a2becbfa42aa53a02a6ba8e7f092f6c7d935709ef14ad4980d35ccf409542902772631606fd0a5d3c5274b3a63af1bc7521e91fd9abd7ec579a31d2c265e41d4677b69f5103499241bcefe0314e3f67a3cbb2af591d4b4de24782d5d36b4ffff696cbaf8a0c128f4d7e32bc5a4e249253dfecbf4e32163b1adbbe23849f800d790960b974880cd99ddb49981b8fab830efd778b72f4fb1f809827c238abdc8461228da86e484620f8d35fb0689cac14a28f081dbc270173f6617002e6d83b9b801fbbcfe5dd4aaf439c0b730a7dc05b7ddf1c0a996c2509a26b6d5a65faae144910c424e93a071c363a24d97076174b2834a35ab01633d751de36e06410000022800000224000002200a57adf737f33847153d99de888e8b062165132b316f7ae9a5bd009b44fdb7c1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b3b30b44c479b4ab133144055ad489638b70bbeca6ece9475a285ff46144ea81c4afc82045ea5d1136acc537e332952e01ddeddfa0b3fcfb058e18180570657b7bb73bcff949cc5247b75ac3a2364dd2067e3f79eb0b5526bd73e6faa6ccf36482a8d653c31e88a04962aad6fe86f0e686fb04781a9f462664e5ae5e31b255939e1309faaa80a794a8b78c63393241bfaa4aed10656f75ac39cb416379e908bf5689dd402eed604488724cae8d6a516e17f10dc78b740207dae0d1708e4e1cbefe2e585102ef9e0241fb0a03cbe90b4ce014f90f7d300a91b0cea6ae39bfcb02ea0abd7abe62308cce5ffa2048fece4833cbdd14196284a58540d235c9092c68e79d0d86e2647e9faba1fc44a5708bfd5ca07d6ea24d6a777693616d54ac33af21bc3399133c59e719b4fb388d80c34849be9f8ff40a1c04207d2eb197f06b713284f4c397f3af00e2888bc8dd07bdb7097a896dd3c10579a877e130e401023c67cd774f70f7f4c6bf5654e99d64b148e93bb01e8cd1ac0066c9f3f6a1a315c276dd8382b186210ac314dbdec506bd738561607a2fae687727a522542aa27a0abcf24c88c9a2f03d51e88644d6efb77b31bd0653ba1cea623b32a6e4a87bd02000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0022bbbdd338a570aa066b08f7bb49cc439423c6b253616a10902a7d7643d01c10a2a035f6a5a19d6892e03afe6116a872a196c882d575d26afe5d5431c33a4d211021ea72acb4d8bec182e902a93fc5d586d1496996ea3581c1a7f81b31938d182642c9916fd0cf54cc789f8ebd87ed88446c9a0310cc7e9225ad834a0e01420196500000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c7ced2247a9bc1d90f37ae08cf84d6a2b3cd9d940a2a043de1ae289e37ac94b8f0f9b3c087af33a59fee90af75d129deabddac2a919e7314e08259863966aed4129437a53f5f32c8f6d42fc0d2ddafd25350d38e8f78cd158386cfd7e30dc8cc154b7b027848f9ead5afe409f51ac917d39d1d408ae9f79d23db0879a7fc5fda236a68928b9a562d613aedfa6dd622840d33a2f715fcec3c676386b77e55aa5b172ad63108e20f55dbd2071f5f2a0b746313f9fa207c9023a49ae0f22764d522ffb33a255de99839f0200ec587e25cdcee16f57626e21bb29a89b1b4cbfa17b982e3a31f0083873a5fdd05fdb9766e58c908e3f8ee17417e3fdaec797fb2baf7d38c16bda803df2dcf834d9acd135c9a2361187ab79ba95744b14980d12ee60f13396db42367c2faef1ae0fee562fad4c527a082c8dc9d956ad6d9a154837ce981e2397e914c5c6fd93084421987f8337a16674150e8d398673d29a1bb12a93e0bfe40da7e64c83f78a1ddddd343d9ec6510db83f6ddd23dcdabdec31c7f5aa9f28f69f682d41e60bee01122fcf0ae9a9681302de3acf6ef228bc7b3e45283da58aadeba0e6a5f0e25035d3d8409cd841606515ddb1ac81dedaabef477690050000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053020c74617fb2cd9281ef1549f1244115b3c02aaa16e1d58458b8479773f87b9055c9e64acfaa1390b84ff69620e8b59bad14ddd0086c6df5749f127970477ef539d5bdd93ea1cd6b52ff197e60efaee435cbc98b0ccb6c4addc8ec31c62809675e1df7da7c189479825f03086f922b160b1f7d7fc2419bca5f3d20995bf40ffa6d5aa19b8533a9e599a068cf67906910f66dac0caa39d622f147618718c30743082e024eebf96813477cc129f50ab5dffee77f72e2234a3a43e1c5f567b20d299a8d1b9893eed840091f857dc0eb5b629514d2cac7fd5ee9c02cfe2c7b998bd0df038c48f1cbba37340e81ad02a5d83a0544760eec88be91fbda8d3f1f17a979a5b83fd72eae8af13f927b21598d1e2d2989be31288abad0ab7e3414a0f7c65d2b3b299f9a12b4e8b07e90373b724cad4fb1f8b543432478f9d6258244a38014eb3f39abe9183c0017746f58b3945b9b7caa774295ee099d5d41e6485646ddd6448058fb1d80a89dfdccfc9f31bb0344d0b7a919c40f18bced9a1bf67e0bfaebd7296b210d4be1dbdd07424a3e2ab6363ab0a8185d24fde8fa2a4d850034287b26b199904738742c5e6d2676cc69369722f664997d33746a197f2d354f08a0000022800000224000002202313a6881801d87a0af552d058fb227be79e70862495c15713b384bb188638450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095ef36417360f1a8ea3736fb3547c0381369325f4d2e17eb761ea2dfa78266cf5398d13c03469ac9d4bb9f3ee6b1b68442893874af5adfbc97bb6cdc96a077f70d9723beca9cbb70221a6dd2f9fac55a15975da7952ecbf0f0fedef8e4ef018cd2c9ed74887e980204ba9b10aec81548417cc3459fe6cc649c5918e99e02449df18fe56ed0cfde1bfc3a45622896b216b2d92f52d0feee1e8bc274ba0df668557c3622172c368970d553201b8df5d66c0817662b750d2c78c2f5b5a35f52d03cfe2ac268263e15c31ceebe3e181f3abfca496dcd59f41bf2b88ba17ed95d1a26be941572d1f75b42b6fe605ba297a1f0defd13c8c25d519b575a0ea84bcdb3d8253118f655ff8f76f4e5f5db3eb4ea57ce372e9e41ba1d2f0c85c381de79a7684dd8b760246eba697d0af3df59b94f99d64b41fe1350f6534600d3af7355aa0c5033c0a8176684e4ea16370f37b631d3b1e4a01d28ddaddaae54c47468b402610ed568d3e3b5f2e56390546de5b53fd4acff54f7bf83f45756f2ca07946acc65152e0010db787984a62a9b7317be5e28f19c86eeaff0609a1093a200be7aadcc9eaa99b97af0d7db494db237534bd39d3020495c3e71c5d5dd22b7c8d11845d3000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001151db8cb8eda70aafb7168f5c8de681442ef9bfd99a4ae47be61fe4213e18fa1021ff330c81a923382b0f6ed54d9281827633078d8a8e7cf40607fb3cf5f3b94b81bf87f8536e9dcec7ae1eebaf8f4baacfdca1a782627d294b80856eb8a94e02300000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004ca0b8f4b4a2a0314fad4659581d9c3d58079525bb7ab013bb137aa0aa72f5b0716c945d067b0dc1cb231d58c55c637f29115a65d74fe0b6a982fef077a8fde714da1215d83e954581e4e610ae7d88e10b9594418cda4ef3832fd9076610d8242859a308812a031db5f1be4ac30c2ffc25d59394e511d39a43090125c1bc88e095505063cda779b20a94b008e997786e2a31084e2b205cd09e307f6b7bf4fcdc97af4d0c5fd93aa87e659b3dac7127033e49b34799f335fcca4d080752d681a627c042a7074e66d05dfcb55d0f94068fe955db23dc78a4fcc2db01876b18f4f46c4e8c72f2de46eb0825ea511384b20c27b2ec428296e796be56a91c16eeb19d8a9e66be37f7586bd9f0bbdd9bd729e5aa8779b134034a71dad4e947a3a0840f823ee6596eff50a5fbbfddbb9951b7d38fb97a29c23cc97b85377d2d1fc7662d455844a17489fb776fc1f95b188fad864e87859c19bb766a729142a95d19636d9eaecdcdc43c089699addf998fc2d3ec5c6b5629d104b788d44268fc01ae0281a2dd085307bcce267950bddedc69a6c2fca9143a104754e298fe883a24d10a8fb6ad8090c009d93839ea1d22d24642ba1be5a4822094e7219a6964a8370d3e30000022800000224000002200beb4c51a8932cc505ef316ad1d568247a2b238e6f3d260bb62d13c78992d42600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1c5cc86814a23ccba1af15916a14f03c5e1a996822da948bda6307c16e121e3451ef4a155bb7c96f50ed0b820cf8fe66669119e876f8f81e14a91a3e4125e9fe014f785932bdd5edc1b32f0b41516c63cdd61178582aa8ecf3cc8d94428e29ae26e96e9a4460312bff053c612244359bf7dffc912bfca32f910ade285e1e05905b4c64e1b4d0bc76c75731eea91ecdd60c7c61f4946916756104660d1d530928feeb162bd55f85a31f8823ae654ae9a905a4644b2ff7959616f72d7bce8523d49454bf3cd0959dd57b49493f477fa306284de69b8ae2e0762cb6e828d2460e2b14fc44765599ce854c43f5c1f8da086392b5ce966d833721890e065bb06a54703eebd4dbd425e0fe998338c6920970baabd4ed9ce8169a06c98fa5590b425f3ebe9310fe34f9783068e08f766597a03c3c1fa516796101afdacdda0599201f01f8e5690c002f5a9349d7dd7152302397d2f99dc3ff56ddf82074665ea34dfb57185bcc1793707c74e382116688f0d54b1cb2d909f7a4f133c4390be355cce9d4d8b606101a18129d03dcea605f1a07cf212bf98210703497ea87d48c0b7177c4b3e10cccc50a5f524827cea56b4cbeda75f7f3b25310cbf641de632b87b6e5e000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010487fbf8405050aec1da746cf2d28ba50625b38855b0f4cdd7a666e740bb2ac40220292338e82438f30ebdf7e31afc050cf67ef5a7aaf316ced373be0b17dd77c423eeed155928190fb57cf42e865fd476ea1d954f3655364bcd2d5ff300b81d530000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fff136566152dd32369ab678a236074272cbbc24c1ef4a749f6e80e2efa8ec5aba2bac2d8eddde5200b5e450acd7b468771d4f9e94df92f0c249f91e1a2da47d420f3b57a7b113881ead27b38c8c82b4e1bbae9395cef8292638eb6b471fdbfb06c2fe90eb97a2c2452c6a9884d4d756769acd67dde88ee072f8983cc313cdb7e9cbb325db6eb90e9a82c04034e6a12a7fc69e2d9e9e9fdf0a3e1be87cc4b5830ec57ab2b4fe5b772fcabf46de1a0e16143555a40055c7290a8945b3b5a868d44eca4eac73bd9e9652c1168d7d8a5cfb2057b1ac07f44a474ce579a05b86cb743dc92b2c71bff1aba7359664c3ba6f0fa6753431b0a2296babd294e0bf698336d94b0219a57048d94e58a351d0e3371f06155436f16bb6aab96137ae6baebec08617354faa13793d3f0d972f2528fd1472ae7568090261ad0ecf96d2210f4f08a096d82251f1c50a4e5f32a27b86aaf6ab6b1ee83dd4a7387dda95c45f327eec8dc533cd3d30a4b55b3064437213f8eb5aedd80c81682e90496fc1067047392c7ec279976e9aa1a05dba673d714df1e16ab1564c50268553282a18507b400982559678fc1ec4807701bf58c34d6d79340f0c5bca38fa35ab678638a0fc8df8800000228000002240000022025a054ac8a52bcaa97fc5fcba1ac8a69a81a8443b598ea61e887aeb6adf8b55300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ada5b3f15439565d3b91056cb8f425c88d58e2b904e9af20fad1151706f295c9696511eb6b32f9aa7e58ab93b234c38039e284a0325c12cefc576bcfa20528394d6315ea6c3478b1738290a58b70c968d8d0a6f5a593933fd047e7408f51cd152854903021c6767d47495947accb477d68a1fb2416ec1507a34ce709efc1d15d0fa28f5e9196a1efb47d03ae47b6abdce2dbe835490947b3dfd98e7819ccee2ded915c8b98677493e64c141e8c7a4a600adf5e437f51542aeefee105be635d74238894253e3dbe68c51b7036b85a51d1141b8420bffa075d846f56e6e7b5edb74666ac9c52ebabfbd510a0efad6cf6de1c936855cc0cc837ec69c942e341d8c5362f7687553455f33e7e08dc06dc41bfaee83cbd65932ebe02ca62ade434f75541ee4445652983fd048ebcd99f37aaac28e387d6e016bc4e1a6ee90eb81a6348289b00f2a0215178c793aa7f983c198db9918a38e849ab2b5a8d4a7c34e823e6b362481e77607f5f89ef6c8fcc2bcf18df9946e3739218d64f827308554d4aa06087181dbb488a31c35a0efdac11de300db3e968891c9d2ec1610ba69ad54e6700d7791b3478e9928b5bb5400da8d43e1c9e41d753eceb1730652c27261f551f000000040000000000000000000000000000000000000000000000000000000000000000000bec47b002029d421fd0e294ffe2caa3f68320fa4133db2c7279abc0d55ec5425715bf573c17ab4df289a1f5ad6fc2f831fbc81c316acff20ca70a362b6b19530acb9e25ac022092c5f4386deb3f931180916153b87c8926dc7a3cf35046af0b3bc6e949beb704739e28efb4a5e2e93df6deb9bd920c5b2a1032e4cc952b0d04b17016dc11da00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000143995f2dabca5451e177d99fd428e45f35079839b573f8bb7692991fcf226169e9ad6463216b98ea32a7869ffd4a5083ee3eb9179141bb84a58e5453b141ef0a6ba610d7fad5665b5500844d8ca6380ca50ff5c8120d8217bc651b96cc09f3b00928952d217efc0f4c74a74461035f42602179f748da638f63311eb295dd95c6526c8c3490da3fb1b523d1c402b89aa22eb70aae62f0e295da58be67edc2445cce5434584d3a24edf234c6f5d3786ddb9a90947b398b8966d765dfed0b788d9d41c9c5066b7d209070d03d8d5420f3f638d5d7e11b555314e07d4ede8f7f39078b8bb7ae46a0ae5689a5fb635f0333bb46c83ddfa75dce5e03da446b67510b5abffaabfd76476c6a6306097f72667e10684e6b67feb98841d5da0bb77e54e612e37621f576c8bc6d5ba246144fb0ac221c9bd231027898fee18ae0cd4d136d565b0f54b992b3e5f8629af012a08e7b4c52a1dae82c10d7dd70e5aa2e03090a60766bf5f66b095e3b6fb2a121e878652830e8b7bd1c6c15703340e44eca4c7cd52ed55b4fe42bfa6036119bf7da0bde6b2aa8727906c6c43e729f1a12030da2f8108e2dcedd8c2ff0ffd9d35ec0b4d6ea822d74b7c5be8fb079a02bf41bafce500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008876818cab8e75c8af5497e2ab642b81508df85cd3b8070441c4ffa9d3f64f282d305c6a4463ed2fa1b043ba97e26ce1d9b26def5dc5483d184fbf164ed58b7ab30eded5449449027c3054e681058251bb9106609eac1ef74ec1ad5e1ca1e8b3d298a5fbe8cd29f70610849aac57e10e0af9451d96ae9610111532bf43cf53fe47bedea0536ddd28b7ccc43aec35bf567cf09f420cfc5356f5e785408ea61100ada15bf4186eb56c0d924ef19049984e5816189a255d1ca7ae7d73f53115c785a72efd919a0705e10dca84bf11f5093dacdf5c91d8c9c89c28c3d2ec4a1e62a121edc51c0011dba4459d97375c04f33ca26be3c95185a833702ce2b5e90de1e7154831b37afb9edf4b8845b30c0168d0f1fe5ccb6a621a093faf1534dd68cab1cf66c629c9e0e7a3c04d3331de74133add29534ca0b85461906f73975bb6094608d33e664cb487ab377578b8091e500660a7c208370dfd9951f8c31b96e375cf6c97ffe499686f31860f189b82d56e8cf24fa9fc76f6770aed41f8bb7d19e72adce8dac4baa1bd5100c6eb2d9cb2e9cad58238bb79e878b2a024f4da48b012506b08aaef3bfbfbc133ed50349e4b0cff518ed7a24e57110b2be6d06ee08117590000022800000224000002200f17cacce1e7916f81fa7203e8724be00899e7c4d62fadf98f60c1a5f96f3f9c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc013e755f54a733764743166ea0617528ccfa989092dc250ae73d24cb342f4c1d68fbd4a83d0cfa4d435ab70d4a97923de866f904659f5aacb2856d2182bf21afc7dbd97345274147b11cc8a62f7ed6facc7421af56a9eb95e6c688abfa7e1617e33973d460c73c771f17ad23fa085b45f9116dfadf0d7f9318afab5b0b416e67077134da73a7432f6690d428f1f63031afacfea0556cb6c3c1324b84243a62af0f3ba4e533030bb8583644acf0e4164e18266cd52b80f702594a12a96d523b82694fc734d571f01f6c3a4ac7f1076f45798dd28a2a48d16cbc3ee060e470b24220353db21bc6d4ba361cf62d8eb7053d06540df97bdf761ebcaa8f779bb9e4871ad84cea798cb91b7bfef5629e5a63e842df7455c9af3d874d14220362da2719a6833cdbc323062276af8238ebbae805131691bcca5b58180ef0f0147476639ec9ffc027d946da563d62cd168252542bfabf45db19960276848e06fb6901e3fb1087394111312c6938575499f60c0ed85ac1145ff706087379eb57e7c89ff702cf7a087d5c573348e883b98fe1b7d0848f3b3482a3cfc5766ac4edd7edc045f5d5945e9c541241b2ee61f057b87b460bd15c7bedafdedfd775ede22a92f4f000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020149d843d8dc6bfaf5a9f74b3bf2684af4515c66ab779af3a1223cef2db80cd915299ebfa673ce10aca31b97216225b343b09f8c943ecbb08f8c847e452046da0224818c8bef67dd2cccca2f809a5fdddc4dc608353a6f06dfa1b097821b8366b80f2e934a227ebe89b03c13fefa537147b46d5c5679d057f71cc4d9dbb10dc75900000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000191aafaa33b713b755b9f917310c7abedb36c29410b7820ec6991ce7ebceed6c90e998a080c289a8691a75568f7c576ea212de466e094e4818b260e340c005bde99daf23c3a738df0daf5368fe73e52d6501f0ec95172e6fc3189f2e4d42dccb523c608cc4e4a13abc886736e4070958372f8e3d750ce26378107a5c3e22ca332d513d16d5c2bf480898129549ec00e30d4463d771bc286c054185738141143e885c6ee8a3a8ac259afeb488030ceff704c552ef04431d75cec4582a7db2d2da1380b5c40e3e717270464d87ed2eddd5da15c66c69e8ba8492c1a5fd060c37223306d2b80b7002e4b7083a2b399a98cf29aea0902b10495012a0e11833f8ef8223f5facc549a7483dcbda89ac8893953747571118d85b3f4a7298d2c24b797c7a718e885d93aeae43d05b8b39a102c8accf64addfe2a361179b9664d278a4c958729bd929fc678f209af39477d5c695401dfd9c7976dc3446ef29989df333c39181097589cca3452e1458cd9bc115b0ba308874eede2b22436510d05469ca94d64bea33d1d65cc47dbe094cd25dedc4842765ef306d002837594f44eb9b95c0f43d3bfda875739611ed5350da7d369d705d889b0c82eff717ff98ae9aa5b40230000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af3e680abf639ae726e8ceb2ef81d0abae2996d2f04077181637410de0ff652cc0163713c4940d934c5a4cadd4882681e4b18b0bac8c7ce9491247c20ec3d3c205bebd8bbc11f707ad885dcc1c6209af59a98b33da3b91042831521cbd0e17b77093b3ad93b771f4a5198ccfedc913c15b6f71532175c43b019aff35d4618d4d77836d42112830832d891af940361ae90d4deb03619a01df63c09db44f077b06ea0000d169fe059ac30b6b3d3d8b1020a367716335cab33e99e147a435e590655abe7140da2f5f4b4c0698727948ac2a304d02ec8a8f23c92fb45810f59a18bb577f80ee5e179ad33a36300e34ac6e804445d972a4082f9f1c4b497c0358033e429df4d7d492d39361b075b3d3a85ef167f9ade6f7188b437ee1281153341a253d8055fb9e038b9e1ef57d805747f169128ed4c7ef14014275e185e41f03068d3d2a87c900b8dd69a3b479f870e8df471d7a8a934287527e8169f73a6cb5862d61deb576a7995db550f0c8d1a1ae23ee90e33e1136b5194dc4f3fbf9df0748b541745a1b00a4b7fb50e03bba70b6416aeb3dc045e1158a26962d93a068bda3f700d40224ccd2cebcc8aa86440b5e713eb16ead06844c7f3bef6ce90d9bb38b2600000228000002240000022004561e8af7e883afb6fea62ae16a9c3b38c700873533c75709f2428834faf91c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a910a755cf2814b0431f300efc2f5e9d7e2dd40d30cae8beceaecd8217b7481f0d86bda68efeaaba583e0b366dfbe9a3305cee5c0d5fe3aeec1102ab8851fffc0979d2bfdda180a127eea8a0407fd28dd66cd7907129adac4b1624cb44316c1ec933f3a8cafc9393f6f41fe327569a0f59819ccff25bcda45b96b92b88a057920d2354bc410da030e2eda39308ce3a214d4b8a5eb651d33e9fcd1d0f92e364c9bb72aee68d3e8c0d5b90bdf17a089628e7126f22a1286c14c608d4e5ecf9164421ab7d53015230500c1a32489960c54344d7832ed43873bc7c92861237b5e792277853c45a1d0061aa18c872ae3012804daaf58deca6287abb18b9cdb05657da59ff68a6771241dcede5670f22bfb0fdfe42c27a6022b6ab1af1b24ae021a8e85b8836834c4170bdf0d9549f06afc5327435aa4ff44085c2a4c244f3276dc33d5b6ecbf807c87324131093d956d9209006fc26a2e3ae4751d729d54269386db3cc8455391b65b5ab9aaf2fc904b2c9b65c16286010d56e68306586c182b00a5ade384189fd68e928f5f4354eab07e1477eb314a29bc66e54f08d0d80e166bcf137a0d16e26c901dce810d621beb8e67ca20c05dadc5c854861ccde2188a40361000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400107442f7b24f0a18d804559079f59d41043a2d53e6f6ac9abccec1c87ee1f0206022490e23aa2830d742de3d0b45c2bc0291afdc8ff1b0d741d0218cb9758081e252ee6eb90b150d12ff3fd3820a5b953d6c6f4bb7ea6e9e15df68789abfc3dbc1e00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087cdf50491fc6578ddc06ba025d08f0d68bd141fdeec420447975203089f3286f21ffd2ecd5521592964f168becbc14493e5e013e66cd3b4dd8dd5cad79e9d703eb0cfb61af6b1827060b8c1eb9200ca2eda4fa3a8abd7c4c98d2b322030144b8df8c740d3532c39bde103b3124b12f83da2381329c91fc8c2d5d220c2efbf411fd7f83b3912b1798ec5d0ce7d422a89e6118d21d6e5c4a86dac082c30e8de81749cf05ff2d27fac2b812d9449e2013fd8a66ee7731a471013f73cb0f3f97992fa20e370a32af07b12d2d68fdc9a4cc1379ced19807df320b3f35bf45a9a4c77d41a2ce0c5fa22448207a70db8b24e6c5bbd0a7ee674dc14dee604c46b85081add9447f4fd81bbabeaf4b3b620fd0d893593ee46e093d6612569d2d7132e636df4cb1cb7202f41e52f3d873cafe68ccdbcdbcc501368ac75ea1c9ec5baa4c6f3061629516801698cd2eb34df14307ef239f486acbbe30383b2d2b5ed7336b7bfff2b9047f203f1474aeee844df7cf08fe6509375c859f908df29c64d0835bd90351e7cc01f7d3d81db95903c085833ac31ff862748edbd505d40061baed570426c02244e554a111333e31a1ef3f0b66f4ca81b0a745ea8ab8918e232b7307e930000022800000224000002202663333fb955977dbdaa4c4a62476861d77009df0ff0c3c82f9fb91df82a3eaa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8945485e9584b78e97dad65811a13d2c403b3d0972ebbdef41b0cf5c3583ffd1fcb0084123a778ebc7946a7ae6423f4bd12640044bb36ac69f45abd354f1c9f4bb127f04cd19b809298adfe22edd035c1eeffde36fee98c92cca872abf5e17a8cec86d3db22586a8f557e78c03f667db57235afa06d5a7ef4a389eac61a71e1807ea9b59bc6fd3adbd2b4241dc46472fb13e66baaa77bebdc34c3d3d1e7e5459ff63b56d9ed0e1668f69fec865a0080f821d17b7cb028cbf3ba441c4ea2b78cf1488329a3e6aa0d8a3aa7a1bdd750c5d3af71771575bb55435c0b9c366c6981168e5b8c3c17b29af22b3d44515bbfdbcdb819fccbaf859cb82f33052a46841001ecd0b2e3e4d08fc0b88ebf65246407751fd3901455cc67ea4b9b5b7072da7129df54b240e3a9d509da1cada35db40c23fd16231958ba921ded3d0699d5b13e26c5d72e8d947b303d62f7da3f4f15157a296dea3216ac76a593a38f1997ab6e34ffdccde46fc47cc9127344e30bea286888e37908569987faa0652a19525ac4671374c8e7676587916acc8ef82f28a02373725ec498fec7a3824f239d72531234b6b2dcfc27a6376c855ac3d9c12ec788e373de735dd6c682dd7e2d535f4797000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001027e6683086a19a1b0bf31b213d4fc27508325465e5c4dfa754c029767dd7140022524d2a3b072faa4fd8857876f055579487c7aae5ad0e9d8c70913bc7a48ba2c01d5a05b6bd603d2d69d7938cf2eccce24ebc80dbc4a5906500c434a361f4d0b0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e2e6cfb0a817c6c2d22698db75187d18fdcaa97bcb247bb012f7899198579ecfbcead88cca43e0fc46b76f437271ef1695a8e75e5289a95943aca8af95e978e6ca4bac545033d3c0858c632101d3d0a76634e80a4cb85b2077852b785eee49ceefe75f919d226e04ff81ff9cbb85bf7d8e5696d035caf0c956ef2031a1f0795ede779da5e1e34d5fe1b4a95f474c81cb77245232c03cc82c819ce1952610fcd8ec55da93f77a35dc5d283c5902891a2842baf135a19ef61765e5748bde2d60174f2f1d13468b1b0707293117ef75c8653b7862a831b48e06e267cd7ab74e6da5b9170f9e288d49773127fff388fdf06bcdfa99367520ddd0be239c303eec3376b5a6eb54842e9adc43615749c6e325d1cda7d2d0ebb9116c77e68f32f251361780a3b2a4b1f1cbfaabb578f59fa69d4c1a83e3e65f358553c278d3b9960763503733af810b0bba6489e0f6fd50364422e3eb38ea6f6fcdd38a53dd1188ef41be9f0a653bf124a2499434910f5e1ed224dab91837991183b14b6b45553c92ecd1b6f5272d1aff88c4bd6468d86c8bb58774fce28479adf656e85921a77635c34158c88de248a994cfae26567a1548cb9f87ff771b3928e6b0b54f0eeff3d1e7a000002280000022400000220043e89cf2db0bb2e164c5c73f3cdc2f70d2c747d309ff8a2346b4b6d8d23ed0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d0466014ec7abda6ad4894dbb130e888ecb753258af7f33b9821f56c42255e913eb944d433be60978bad5c2957843c118ea79921b0b30e5cbea6d40118bb86eb27825ecedec1091a2d9b3faa87a5ea20f72e1e656dec5b77e9eff39937db53681499f15f7d2692bc7324b997d2072278f089ead6e76f38051bb1100cc54cf113e34e37d2a312220c5c307e1e11cbb6d0377f1c08032317871130aa28102c58eeef10b1cbef942039ddc630e5e804660ff2fc1b4068119287712b41a65677f15beaeac5535acfe99d77ef0c99c222ee539ffae66ffc8e76ba2f7f1041e8c96b33ff7d13ac6702ee358450e3ce28528d2647649ca34c300d42d5bf1ad2eba7a72a165e56cbfc47638fdd151d9bc41171a9473b9a9ed5ba518c4fc68862b41d2cac052d81a0d07f1109605b99254542c76b85da5cd73eceefebb662b343fc7a829fd418af79b111112cbeb39bb1d021629d44bb937159bc6447756bee7c336c1eb0d5707c81f5f0d73c612b7222109444b6db376bdd9d0d0735a3fcdb3bcf5a51c74c0d449daf81d7f967ea627b610e6c3362fe77ba0b341713a2f009c34fcb831c3dcc5ed110008baac6c2de32e7b3eae0654698c22a4b1b06e400aea47ff2c19000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012b5e6cd8ddf2eb17c50a137e608804ed7fb543830686f0762c15c0c8cf3c8e520225f9fe6f4f7779fb716099d349bf9331d1902cbdc50dfed268476e7ee55d688027625191d39dc0b9bffaa477bc0d1e184c3a7ca5be2b3ccdacea8b9cd16f80f600000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094fa39ecc08d17d443bacf446214b4d08204f913df1bf2cbb1e9b9c6cee4872d1c509b2d5fb19aa111ffeb5cbe2b0c087fdd42005a038b7c3483c31d6d9095a63216c3bb2fb3e5fe6fe8989c9d0521008e0a79ecd1b05cd4b6ad03608866572befd3e679788dc779fa43be31695e489917fd529ec0d80985ea4f7328ea02402f2e3345b2fe56cc5584f865982a0dbdb1c1968b5c42574f8aaea50b11ea1e01da3dac879c0322add6f05862a2644ffd1999fbca3a9669c4d1a430ad988ba284b1d709b049451e307deb3185f71120d050ae8e4b2e5eee1c0fbbb6ea67a55272518ebf527e2854c71064f448ccd76d14dd5939dea4cc40d5b590394cd5d16382da0448edce4c6afa516550c4fe6a298ab353e0d3ff0ed2ea143a06096d3c36eac4f0775c238d12073dd5019658e459d11c6780addf78b806e0eda265ca648e6de21f32ef0b7185b347f7fefa64e75aa1f9647b8e75946a6bc854ff7a7f18245906091c8e5732a0751cb8c4b114fb09b3a0f32c370755b39933f6e497c5a653bc5b8e1f75cd44972c1ff4c6cc1a0a89294a9326f3562f57857d28f7875fe351fcfc0ae883c7dfa9287df550e9bff19b86708679d99203d10edb614226f93b36abb400000228000002240000022023031bb354cc853a704c9a10664143ce0a6399cd651385c35f2ca4ce518e6cc8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f9086bcdf5eaf4da1af56f62db5dbc6d7f23c8ef38fc2678c4ebbe28c2fd6d6814e6e79f192d59a50d2f58aa715b3d5fed50a4ee288fd0ad684ceefc207ce40c053c6a56acee25116a34e93c7efca4f554a824f00a03564035b491e92a7c5cfd6f5ead8702c9932a9aaf0823443dc4598f4c5553c599e1699126f89d1b20934a50d20702d0b910fe16cd4b5d8ec0f108e388d4a217fd9a05875d733a4ece996d49695013a598921921777e5f4c518dc662f58b3e358cb44bffaf6994c1db986221e1ecbea38b3bf4bdd6e10d34098444df30b56c7ce6ace5bbdd4e62359583f916195742773bb3439c8ad13d07e21f9d751caf81da017b912e344896db6fc5052127dba2edd6290efc350d2df16f9d1bb483b31ace69a2d4f0cdc85baaec5e59f606a2a66266b14379d7875e2fa0fae61669854276c8b39ac5a2086bb29bb90f9a3cfa98a47e18ca635a8743edd1fc4906218b77d55a9d9ed0c2253911a8091e59148a1df93c6568cff3a87b14781e00394c2136eddcec3ec8836a5ccc6c22d908db3d03e75d4e6a79ad1a8839bc8608c2001907faa8b3157bc66af4327c20331f3b6e57fe7883a859022c98d42ff6d40f2deb7df920ec1dfb405de9558553f000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001099bb64eb213cf2cf9e54e1bf9f7945b8b7ed5dbaac10b497134bcc4c8a839480228d32af5ffb000a20cfe369f08a4dcaea752419d5b5cb3d0f011518c3baa529c165783eec7e0bea4f0fe49c56075f072577b50de5256291d24bfef51b3f9b6a20000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009762845098ea6fc23de527d3d202517920c2d5b5b2a289728c31e7a26ca8a0ce6b2fc73e75d31e94f2f5357c25bc5a0ee1c2f145677254ca205035582c740953253a3eb509462d2358345c6aef44c52434bb953d4432a314b7322b489fda9e7d2169a8267b11d54d47428da2ea37bf2ad4fc64b2d906f5dc18ae494c3adab07c1cc6c042fd659099380c8cb04a38f2b00e5e2a52ee3f820f515038d9f23624bcd83caad066b0adf09a71384185fffeeedea13a619caacdc1163756d807b7b1d9b80172b1e6eac4f851471d2502d09528d2590ec933fa27b22f00ba974afdbb3e0f8babfb07a8b39e7b3fda3b3cfea92365a54d9d028759e619d81316301bc5f3306c1074292b9af360d48b92a20e4438d16d44588f8acd18f1a44adfc1abcd372f45ae020c8beaad5461718db377a90a95745e30232dafec993f35fc0069a8e1003f2a482a96f5be1f89582facaf71e55021ac01b701188f6f8eaf9e5a4f610b514bcd3979556c9e8e9a99f023c9b48169bf487feb824dc1c5ffb089193e0e468fdff6116ba513c9d2db807ebaa83a434098e8666af6a767fef7ba7eaac4e7418da3281622fef5ed037d8dd5e597a69f86f9cbed167c762ab8cb1dd1de953e4e000002280000022400000220085a61a77919ff66bf17aec14d8cca2b5e4f9d32f2e826d46876b7b7401e2905000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bfa76fd29ce29f4614fb93ba777ef42ed7ab06c9b78ba7bc480a77ec2d92dc1d64cd4e3b0791e1fe810f5aab00266768a961df4e97a1830495fb8fa996dff860f11f5c45f02b0767d4d82f1baadc333280b52762064ea479e5838326c1a4218bb85de6bea432964baa86aad8a4c7eac9d3b6fce2e3ab496819cb70737d7343739936316ed0f30a594cd13d4e90753876269ffe50ab7b2d7fa43151cd6f009053284efc13a570c607d6f00d3774516829b0ef0d3f92e947ac606c08fe445609f8db56ffe5b68f13f1cbb782f40309b77418eba4c953d87fc47bb033ea08b6e720366683179b21436dbf4ef97db5c16e5cf1e04a030102fd0711863487e89b1d668668c12fee77bbc470433e5d04bab088105905fc22abe6325efc4f89c6b01bc9a2f20ab5b86aed1db0634e68d5b800debd7d28afd117f4148bc3c09fffd40271380da9fd0a80b0bd9cf28653fea6b8a01e6ae053da1e4b04cd073ebf0087484201bbdf32b877d4a730f13455c420859d183574f50586f42dedf14ce2f6b74ec1e362c4b6415f1d50cb2cfd96564c10c1472265788bb27fe9c7cdb7ac8088a7139320d8d21c12fc1a7248142664c372678b25494c6b14650a6753a5125879b17000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00209900920afc4de35f1a307257348083adc8b6a83376b39b4b9fc82b34e7c61f22075ce14aa85129830f4d5b161a8951dbd68b9e4a686af2a35e117c1e932dda2022b44f63a460522bdf95d8c589f31f94c2ac2f13462d05afb38ad17167f3b76df0ffe3b43f54ce97de037f84aedcadcfef2623031d4525676ddda0d962516150c00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a060d083ffa1b3198dcee0838dcd15c2714683c0a44c8755d25c23271ea80c0bdd06afe05a338d92912ba70b804a68ec0a558062ed06f4b7a652801463578ff6af526c687c1e8b64b90dcf64475ac02725ad36201bf022a073b21e085435108e30af055eed4c569972038fc3d6dec9253eb1c8a1183932c220c7587a486e68582e9f17082f5e2b8959eb4744ff67d92e67b8fd31b433df2b1e94381d81ca33b1da777880e97847ae8da9d09787dabfcff1ca3b8a00d7fe83833485d593425af2f4a5e45ae1493f3c0548558548ecd3d4fa928c8c74316f78a230cbe967bf3e0062034a97e35b351a8fcffb92281dd0af42376fff7312b58c9ac354ad0d4c8fedcb82e6032ac77f52e0e2e2d67602cfc09f3f38297b4f68b1ed970375c8762f26d5531ccd77cb4ade5bc3f7ede4a2bc7bb943fae622a12370032f90f0e3ce1d40793aa288d9a61fd5c6392d1f054c0d2c98818200dec262e1a350158dfad13eae3a201103d2d9ed9498a07656ca6f08b34cd5c4fda8a539e9ac1a07a9573f2fad43509e912c3ca0315186880d446ee576adece62f185d6d4846b4554a98b6c1fd615f972187a38452e16bf2c67d6c8a12d96e124b23c1071ac568f65e5714ace0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723db393f2a6d77a5e81b693677023173ac03bb539c2e8f70673e149635154f6f2ee8907361357d3c3dd4b9a3d97bf6c1d8e7ca13b5decaf0b4e219953a08f553d15ba63c6a30356a45c82ca6d58fc351f675c0d19f0e2d06445c930ac94f3ba3503a56fac732cf44c3f9587646d24d22f041dfdbcb3548577209d3d41095550124a8918bf28ddcf8d25285e6c23339d97d61bcc7ab7c7b2ed3d9e12859f7984cba24f391353cf43b449567797e55b15e523a3b3f9380d360464b0d0073bd2d7b292fa6782c4c15868e61ccccf732c08bf0c5ab0a8780f999fac7d3393af7c8dc3282f44d12ad15e57ce11578d0fac715c77a1ffc554956ac1646e802fdde30cbec83c9ed314443d35a91e4f6ee9df920ce80503e4030417a0c7a6d9e45e72f1103ed161b0ebf1913eaa5f44b62be80fe5d1f6a0ff6654dcd81e367e7ff03bf686df8a693e9384707fb010bc2e0bd84348541c0022db11322ffd5771869bf1e4121924104196422554b21199b1ecf16a74bad12cf81a7c2cab1cd88ffbad427dddf39f4e89ddda1afee44df8c903804de8fcc7505054d74d16998ba43e80e7fa29a237204f95a29b98e2a7124e24adb009c4a3a41f3a733e2bbe12dd1663d200000228000002240000022022db1c68f5b8bdf2f26a6fb692ad9bda2560272d853da38412582ad119fa1bf600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aea618dcb8c52bb62bd60ddde90b887f9fbf874f1fd16e1d410ba140cd01f5819dac72d1ad84c62264aa8b680fcff37524db9cff431e33bdb210cb11d363062f92ba5e90bbca4a7b0524bd06efd9df54b11a1cd33aca2c2d1cdefef394824a42405c1315a5c60cee06c3b23ac6efd34422faa0a4a97b87dd1fb0584cb7af4cccc1adbea1dd0fc69b23e6af74e1f0e8f6f3d856d6dfe10fd8720ac3570cc99d7288971786370102d7098956dcbf8c599c2e2186c7878f36ba4038ec24e71dceff0bcf58c39c4c284d5155dba325101338396ac85d3b128d4a79bf1238d510f42d3feb951d9bbe5560a4eab812a3286636912f9835193b7c6f12db5cf45215fc0f99bce1de89ccc967247fb2405a5ea2c46f349dec701a3ce37496872fa163569b208742a4f67509eeceae70b99435420445326d56e466a65829c1acab14bec502b5e24c46300037e2c809f8ba66cbc055a6d3f8e8424a6ec4d7186b0adab662aea82ca63490d2416789ca8bd5b3e831e111bb488a04eebedffc75e07a30c6f01b85cc386945508e0e65470b9d448af97fb19840096e2b68feba6cc0b9c6c232be690a4070386ff3a03ccb965ab7ee283200f41e7b70b09cc64246c7e0cab39b67000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400106c9ecfdf3ec9576e0b2a9308f43b4c4102ace5ebd87b998b982760e19c1ceeb022d02cca8caa9640104e9c1df2de189f1416b2f1af101c2bc25b1001ed12b1e1030483ff869a0feaa335025f23daa1017c5c23472cdcf624e30b73c66f4fc989300000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004175629ac82c509f4a256ba3051552d6a19c505d471b00eef6b6895a41bf140944f71814391871b6b0d92f16700ba61d6b7010d5a6766953968267acdb1d82204c5acd679176fa2a8be71518a316931856ceae0153233f3a5a2f9be2df691d9e37393fc19d86c5a7d1c66b384ac3e4fb72126b0ae3afac96225225ad82bdf111b34db443a649d3e6489d2fd8adc06de6aa4f515871a442c9d9f99742072d5271a0536029626a8a302259854d2359321ce2f01f9a57abc689408c95f2aca01bf1a97a5a795fb83d9698f871c9a77eadfbf879982f711b1f90a9bb1de20b03715d2264ee9521f70141057d863853975ad4339f34b324ad71966f643d99af95dc69b91d4a7124592eb938aaf6bdb66663c9556834f2c13cd2b8658a6714cc04b278d84523735c3c7245edbd683290f5a486cb851d1115a360476669b6375776f3c6bd9a9cfa6345d97997180c9866499cbe5a2685222882b46f52c9328412f254c7bc07c60cb2b06efd2e77c7e7ca7435dd2f5e275d7bffdf070f815c1e2b770866ccd6c0086f8457a1c51af5848fb4df96490f90a8f5dba80b641ae1672f808b3e6b4e43e522dec5a3daff500549dbf41be0636c40633f92bf6654f0f8dbea7c80000022800000224000002200816b8a99729f74e352cbbcf8006276fbec883d714433e30b385a9cb5f395063000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cdf4333a1ac55e753fdf3e6055c41eadc95129c935895fe504714b67fbeab16edf11d3b004c0dc177b97ff4dbf08eb2bbacf8ab5b21b1319cbf2d93cefdd83ee4c85a9d3c14b898e8d1131cca045e84c94e742df84b364c93877e3339fea99b3e1aa31d5de6493cedbf4f0886109b957029fe6553323bd97ee7c9782b84667e7c4783af828e38bbe7cc7b2e67742e55a397c154aaf91c9dfc8eea29b207852132e31f50c940b5d749145c3ed5fa861d459cc28bf8206ea6432059a1fa8fe47a78e619cae38f3601328f36ed687159dcab287ecc53a80400204e102ac55a46c690dd4eea124be805b3d60ee26fb6da7acdd4cfb508e9be646c526b19627e702214cfedc4c08b0099f8e503570cabff53e3f54b7029fda1b8a73b5a8a022fd67a2a1933615ea84cc23b15b6ee12599fa9d2b3e89003843175da3a9fa02f0bd7d7fff0cde24bd6bd4ac35744f76a10b1d68fda2cff86df07970a00795b040632725cecee25f08ca2ed8e49812aafd94371e9629842177d17fe8d76752978a3b1e9ee187d2e14ba36ed1fe52c9da65a69ecd789a65023c4566007843abebc0714f9c9b3880742fd2e496a9b2a0ad19f83a82f4a661e97e01f18cfad3aad18b99fe4000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001220632706f6477a6ac03842a35c63e4778186f72ba798d925d56e958feeb08d7022eff33921c7c8f16bda6d91f28359fdc9a8f9c77c932a2ce7f7dfef09465ebbf1974aa569e1c86091dba0aaaf0f1427e171610bb5ac655846d07e712c0667f96000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1b6a8a0cd83be6da16f5871ecc64b5a850439ce793acc862d0244c35a96303a84c200f5f02040856a196884a4186f1b3206c267ddad922743b5306ed08fd3da89e3909951d7cf8101899c7b73648c6d245a52b7523db2ef8aecb190b36689af3c9b3f78ce76dfd470b5657997b5c7c41dbe3c6369209d9a8c31e80325fdfe2d64c063ef1f5eb44e3f23633abd85af3d70171fcc198d1e1683a09dd7c3b36d406aebc4c76a9e530d1e1af789cdbf63f9fa6792f5bec5f2c466b7f03557cf707bfcd7378888e7fc4ee2d6ef84de657921bf1b00d0a61828d17a15e774cf8a285f9f361d06156f62714eb345ed71a1ebeb5a7e78028dc07fe51869894488d0c2ab07f5a0dfbcced5ca41282c8210fd8ae0eb9b0464e3929389acce11c2d734dd48cf8a617417073ec13a432fe6970f10df5a3c749285ab1a5a77bb93402b9bb7071cc57d1e9730a79436103b2dc25dc577dab8a05bebc3ee2dad4d8416f60f05b0431a7265d75e19e0006682c4a890c17b3e68a71a4b9189ec08cfefc002a564823cc35cd4947bf18e660775b8c5163bf0ffffa583d24b5a5370054b18cc2e0c531d0ae3a99927804c62b8dd31175e45f31672d9e29c2f3bb6652fb022c9a711b9000002280000022400000220213cee44adb994a0af662d0110bf3142345d83cf68da8552d6a7af4da3a78b7b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d84f4fe6b25622417a86b74976400b185c2fac437d65b32339d401c64ef2359e428ca75b015d01ebd2de3edcc256ef5f1ce0569c3c07ea160ee093234119421298fccb0bb971f16e1c0a242ea56cfe7eecc03d5c7a6325bc31a51a0a12b58744c2192f0892ea6a7a04a5f6c02108cf6b67040472c597eb7026339ceb7dce8812f3a05000cd2c64952c8cd00e1d9f6c51c9f0b76f4032e923ebe9ad3b03bd93516ff21f2f278d97a29559225d619b43507c3b0e9a3efcb423b852bb946c5b88506fd868d2ef79a91bbf6f88b6f2dae8745ac50711c117b6fcead47dc356790bc4c0b85e2715caa5ad497b8ddec59b46435fd4cd16608c56deac9f62b710571c0ef54f4dbd3fb9d5b9a9e6e94edfbd2ca653a32615f0b84c452d5424793818e57aa03106d403b1812bf19d639f37705bce1022639255485eda206f225e0064355c8fad9bc1dfcbad72b217f09296c170485415eb2c260814ef50a3246a628891a70a3b4f3cf8420e013de8205d6bd911675b723cd846a6a82e62a088853fbc9c77896fcfae1ad24d51b614ecdb6c75f8865ce59f266769e991b163f75023c3f536776d14f89c600c6fde49a3906824cebd48c6e76cc236155854307480603cd7c000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400112ee1f80873a08b98b3c83e8e31c84a04d5e136c527d353f455da2c6020d46a2022f6ebba0626ff1aa4009f63c3dfe3cc7ae5cb11128a8b22c96032731ec5f906a03a29091ba593a977fab73c20ffb6fe178db57d1abfcf5f0a5fc355b1a1f2dba0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040e432e7c919de53aac869a97eddb53def5bbc5b4917cbd58d1ce4b92fb86e7405de97d043154dfce6b2f42375c7c828bcb6651063ac65f3f14eb3ff8eb0e64ab643ce566500317182939c6dfbe8f6221be6a8db6281e0c167ce00cfbee3987e0b905c080f9e4a4164e850bfdea4522df4bcf62992aca187d0b6d20c48491faab69bc0178f2dbec3b6e2c8c87b76082dd96cda6d8ed085d027f25d18621d681d45ae0600f68c4fce942a2394fd835e849fbff311ddee869418185c2221e127ae73f8d46864d8aa4fae493b83c732a4439802bed2a4ded7d27c7ac92560776988c2fd51c4e3c6a2ac7fd063ef422926ef727060c048b53db4e6d4d37a6eb98fb075c363770e067614a390fa4efe0096871bb6fe01726f9f37c71b7dd3cc6ce5157b2a46ec6b5c064eaf2676281eaa6dc9108f84edb3c1cf307e593413dfb7b3ba30c9fe9c04cabcd4552cc883591679926ccab4314339f9631b30bf522541cccb727b528dd5daa126337b7e5a8fbc259843bf271561fe42816c4d11a740ab775b37f0755509b875d1a884b324510643910c3e0375049e905a7103070dfa11ebb88965ddfb1a38c1166225e46a05b7aacaa13a2390fcea32f4eb378e9c1347140000022800000224000002201e23fbd24bb7627ba662bd443c8f8be9886575ce80a8f0996a9681fccd65c3c20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009fc6ff1802a58abe1fd2e692684dba68ac0f584b2d3eac3d4ca738e9612ff6fb3ed1368534a0232ec33a5886b2740d485ba2a618bcd426c5a9478d7890fae27abba89039362e7ff9372e18c6fd7ea6b743f3f171be174c4f8564ae12803eeb25bd29095f39d44489597060a700a184d64b882fc530aef3069a7085a8218474d01272f65983f4e2678e220cadca1b3c316dfbddcafdc0866380e7cef187e34bdaefaaa34bbc723b43947cdcbe67eeccc195deebc7662fb3f7874f99d56832440e3bc842dc8cc28cecd7e95523369850410144fdd4f34a0a7347d1e0ca0c45213f06acec00e596c28f06e7323f94a5f3d96f18a1fd4e0e4754172ee18ef959095e7ceaaa5afbc9da400f17efbdeba170dbfbe1ab325b672b9df2b410e5348d5abd430a9bb0cf7fd30490c22fee49a670576ef76b49499ccfb3a33068dbeafc5366e58f04c1ab8551a624bf143d8d5229b0fceb25fc53464426c3994d31d9ccc2b91b2dca8cb9ab951f1a4d0ebe184bb3162f56c6e31bc4c70bf2a249213c71876ca8c4af0df0cc072d9b6b6dd7e1a0f549316db1d86ce7d3eb68ad50078d58c40f736821547eb2cdfacca7fbf53c480c1ca578c9a90258df3567f19e1bbb4fe870000000400000000", + "03caae76e4950e6afbbbe5c76a2c9c0e4bfead8ba02f3c498d3f52ebd68506450000000e000000000000000000000000000000000000000000000000000000000000002400f9878053ff578dd343b62df1eeadc5dc54842a69b5920b5dba42569adc8bfe00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000e023409003cf11f577d6e3ed0190c24c45a04237528b49263e537bc5fb479d7e3f00004b002aa609da143d3f4454d70937bdc54f1a6618f7a4aad48e99958d92ff4d69f48b00004b800825bed0f04513688a20a73113b41d525a804966b3e35ccf0894be7867dd9f5900004b800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000070dbdaa8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad3644b0302b23faba9ae13e65bcc18b98ad3010fab8a195f85fc1f33fbb02c4a1a314290000000e0000002400000000000000000000000000000000000000000000000000000000000bec1d4001077b2dab06a4e5d1ddca2b2e9161e7d86485c5513613ddbf8b51dc0f78f38da90200312e2a18b4a9e5b8c8319d190b8f2bdc1cdb5c8dfdd74b00081a9e3ec3812114d128eec94626cbec18736f36d24f3dacfb796e1236050723747cd1ff6f197d0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eac570e9d3a12c63b1237e2c02fa1eee7b05a9af4f6331bea767bee8518b3306a6581c67153c367930750ac21792610f2b09224d038c44ae3e96d129a120f60b2ee28dc144b4c4788dcbf1d16658d0a7ad6d3d8919de5e87bcb6cb300068e8e47b698c74ed12b6c6544d67e19d136df031aa72a11f1e18888e8013a5c7d6318980e05f79e5aeb0da1c583d391d515cd3bf3bd4d9c7067bd439abc8c8cd1fda93f9d1d7e3eb95092e67752d97c083af10c2b607089b8fb89a74a45bcce1adf887a7900d2d6cbffd39722d916a12f27b19e86e4737a875ae2272d6aa1cf4da4d5d3b4a9f1c6ac57fae2730f1ec020c50fe15080de5f3bd2ad4abba101835a6b6ed2acb2909f15d7aa92b5c5333296fad69cefe26670466d95360f425e879f64cfee1a015feb916bd21bc35eb27a83336247cb39078ef65bd9cee64324589e884cd9b06300e4faa0bbbb1a06e73b39c7f83b88f8ff2e59c900314bdc028ba8477eefb6f406386803ad66c1c3fa724b25235b1ea163062beda5e0dd61a0dd746fe296d49f370551e7986d2537b873a4a1da067331ae1f7a54be65207a89fe6cb98c22eeddd36c0a49736931525afa364e4232ac2a3cb729155a89a4c61f569ff58000000228000002240000022018cf3878490c5a4094f730dd7185f723a0990319d60a45da4b55084d9fbcb9900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096e137c95c953ca8c57ff972e1ce053e090cdc38c1c78b903d95d5ed03eff0ae6b3f4bd1cf7c0038daa0d679e1e0cddeef66466b21cdbb6c932394c3a5866bb64291379be5242a95b054e83ccd415627ec8f9c4645142fddaa60a8c096cadc6eed858851aa431600eed90366684887654fe99dd858b740212c6d9eff5f5b11b9a7ee8b56aa2455f6c9013065842345a439997932fdd4d7abb3ffd79c294b74d69678f8edb5a4892581bb05e99fbd9dc8bc541fc8f12d2537d5bfd7bc393ee0295bab5e7c5cf005d18b6d2a437fd65eb4d757273b7acf60214055bb65cf908850325f0f2c0e1655b3f5c995ccfcbd373f6e0cb45ab2c559bd7d11211a0b4dc55af35fa5a5d20832538776660e03a9168f401736a4f0be0a44b638af9673d01d604b002e27a479d156d1fdc18de45705027510595fed4cf68a6cdd7c27f5fda56fee32b3dd1d16ac09a299ce438d09210d0b90cab7a00da8d062f0448b41ab6b4110d20167f570e12636ff6f3eaf0d855129cfc4f79f075fb3041a8e7b2a08a41b51b255c8a8b7af4ca717cc9f5164d39f821baa1d338c5dd81fe35cb52d702b6c23f42063d1bad9af387b25ad129a304b04b0d78f084445a26b0487e01f873a05000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020c7465cdf07f92e67a7c210f186ae7ca04e183c3995ed2553a22f7931109d1b60f8cf387f9c805c9bfe50eaaa6d88c4c1786121c5b4f1df44b9c1998e865aa1a0200d345c3bd13ecaf86305d3cceb44cc4058ebe9d989b94c5084251edc5cc035809974929344f76112159d05a4438974878e5f93a7cd784808a92390c71ba411400000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c9b8847d3bfb5187e2d9320f10288a9027d7e6252afc5939bcd40191735778d89f031115b145acb2bc7a9a5c5d7f5e6a43d68823427bc04cd5cd0fc08671bb7c578492c99e3d2a92ecb3ec08ca783777f06e94c7fb63651b372c997a46ef8da85c8d1d6f0c47c4ae52f0cecf7b59f6418b06fd4dbcb8ca76160cc9ff2090f2308c7a6e906d47abe4a5778a415127e493173a46f212662fb656f8564b97c30af267a22780fdc4cd8a52f71b70fe63f9e92fce03a59458ffe6b3d10127e0329fca45f3876751e53ef24b952a4c934a0936d95e512a7d3da80c0487c124d6bdd49c39a89d8b09cb33a1374517330f172a5e1c59eb5ccfa75873407b0c1f05ec591a63983dbe65da6d0c0a776b4af1ef47c1ee559d8822c3d984e56509da1304136a4c04325a304f1a6b202f26636136a524bc3d625664c376820ca4732787bb2f7a7ad5bbd242e62dc4b5560a37742a074b6e6969ade7117af13da16003ddeb9ec04426ce6e76a0c65427a662b7e1c173677813b206ac11165c8eb7b3f9cdb39b7434d94b75c70ea2c1adc8170bf1c5c0d3872f0266f58ce906daa1551a96c849ca18036da7067a177ceb542f2388ad51c34f40e1d4899854af020fb2d21ce93fa00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002587c4341a524a240b2513d30f9164275ae19fa9123b768b757e6790aef648b27adcb42f98c0af9357ec016d62515ea8938a91567d67bdd2d22af3eaac209f36bdcdeeca783a53418125a95dcd6b418397d8ad51c9281134e678eab893986ea219e96cc6942f0a1f7a497bd03860bdf80d60bb6f5693a515fd25f802442308153c1e785634a431bd94a8b05c25adc79f433914e75d2119ebdb049e09d620b555a7c73d2fb1a3baa99c6e18b9bac4e5f462970da64ca05aeecd85006d899ad04944c2599e2d79fd8b83cc67256c48cf36c9d91b99f46a2d84c94334fa964fe57e84e54b54b4aab0888f406a27ef327f150e005fc79457cff0edf18f1444d0c1f752a18fd60c1062c511b6eab183a5083f8b58f40820208fa1653348664523e0801dde397ecd970b11d6e09fc0cd0f9a1173d7e24215f33761c61e6e7846569e183a56c1e3661c0af35a7bea5516c5d317b3751418a917021315f25869bebff6d421a643f371ec79f02985a0752d4ca57b6cf870dff2254c92c03fd50ad7293acae3ca36c993bb9a36ca8825276856b3dfa61dc89704119c2552fd87999f2748c52b9fdd3da78ab8948ce6163c1f92dab08b67067a64dd63d35b859adba1e862610000022800000224000002202ced08187be90ea53d4233ab1e94517051d8ab1304602efc51265da28d1e100100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000052ab5d35e6a5ef3267d8a041a538ee684d5e1054850688a7ca5d3c9382991ac0caf151d5a7063aa598cf7dbf74d8fd259e0f514787d3b850e1393a679e8d533e5ce1defed6f208757af99da7ba980033b9ee33551547e3098271d37345b2923a60f6e4ec557112719971e9b33255d6408244bc24a3d182f7c953791fa61982a08edd186a8deb552de9d9c6d085ddea2af0b9d2d3bd72b7dc1410b71a01bb6527cc24e7c0d1e0274d4f7d97262b72e04a1b66efc9b3c7dd34b2b9d5ca05b853a398266ddcddca1cdcce6f21f3710c2917ba7923ba67a425c80ba76283c2132ae61a83f50184ea60322f1463500595efeace7ab874c1e2ec2fa718b9147af34d7c1706ff0da4691299887e3aa967798e6bb4784672680764d7bc7ddb5672312595fdd04b930e95de8f3f9e945ccb16240090c3091e931254d5475a75a68f623c299243527a6fae67adf50096b49d0675b73ece843d5aa44576998175ac1aa656f1a87e16378bb586bd69d0b678027e294ed0c3b07e8898488b229a7e7b4f784cc3038522e2ed351946cd1407202e82a5985fb31c33dac04aef231dbdb06f9e52e65b6435fc75ba5c59b1afaa5e6887fa3ace5c7677a3161ff4f5e7cb190944d39000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0022806d3e17a233330cb80a21a9eeeebbfba4fa7243c57bc05ea66ec642d7b6d391eede8455f654da31f3d44845f0fcb3cd4c1c31d87b5fc8f581de034d99e4b7602017376c97fe253833f2999e4c1284d24a997dc7792a4d0e7f4d078110c787c1717f0c0bef4d589a4424f9ff84728de2f6d0c2cbeb38e2d54aebe2993ccac5f5000000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084e2dba5976bc12b4bc03845072b9f90eb90888582cb3a8b26573bb2c73109385c1fd51511d5d71c7bce22defb0979c9822f4d90db97616ded31e06e62fd53f418de1753ea5163814d001681dcf9222c5506e853a0ff6aa9582bcabd817242c0278be56c8bd2519fbb82b5f53ed4aae3bb5749b566e1341bd2d3ad391b7faf4d51728622aa58b97666498cd7e85f53b22d8ccce8f7172585e38cd15fa5e38b0d93d608e219cc4a9b10fd17d53ac1943102704b49563b149fb29763be76cc2c5ae73bf4cebf3cdd07a9d29556261da7e6dfdc8e09f481773faa3c997aeb07fb21316b6b0f20d4d0928c541d10339b86413897b86540a7aae9fe0f3828b8b6cfe7e8df4d0c444a93430d840dbbf487fa6559c1c7519ff8a39c95391f9778836108cea3b458fce103423e78a655f23628f5ce943b1dea4d458b29a5ac500e17078520db247b3be976348047b9a5b13c4ab91d7906168fdfdb6019770df108226aea84993f2f612e41b41423928862f36e584544f2e3148dfb3fab550255ec1274f36711fc88ff479f165c19acb02d356b75dd09a948ae03366e3c20030eadad063005603a8b84184afc28b3098b627e5d7072405f6806ff10b8c03c124bc155ab2200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009fcca72db24bb0b180c4a674d57815072267497eb17ef9293054d58bc68afd30a0ae8536170f73cbce87bfca1ae5791d7870b6991e155fcbb285cb137c69f298b14247716d0545ba71c78335dadbd74f61e19f088a1395d86cd1dbea1edce3a56d3c1dc9e6aef0ef8f71ece7bb0a2dbcde7cb36ea60b13d31736728bfe11ee7fdfb8cd04203c9735e5ef37fe59dd093539883c4f19f1c3428ff6636551655cf16e3cf9cb6f907ebda28b9ac43ea6f98e3f4ef9fc3ea1ad5aeac2b2f7387738424d580c9068304ba5b0ddc35d9f191bc2802efbd7b9e2254d6dc1f72e6352d60a9e08f8e33896f398960e696004876481702760717f3e8095f25dd186d8ec5269cf13e1abca1dbfe52bbbadf58bac921b10576032eaaeab143acc1f54485f1cbde141d3cf54157d8366c8a1df3241333af17da8dd38582d506fe2bb6093b21d41babc1c27ff8c5d2dce37c231d46f10d969f334b2253afa205a7427d326433d9c5cd3467ceb981396ecdfe10bac14765d835a45e94dc8182bc1161effec7e4a2a57677e4186ff6d698ecc76edcc75ec415dedfb0e2deb71a29f6f92c3a5390f91eb1bbc358209b4464a6966ffd083f446e47510d297aeec097d9703da04a546d900000228000002240000022005150282f51a6095673ee1fc79eeaaa0a40643c5b53aa9a65e27c62ebcfe9bad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b165f90c78ee638a3d402e11e70b1305193cd385b2ea68ee171b14c5b7dcce51958151cb62cbe89fed31760e5f622e4476b5b67a54d476864331d07f47084f630d4585fac4304c39cdfe4dc8a89796703a96c3751ce7855d11d01fa88e29083cb69547924619c3eda05071ca70907cbd95792090f05089d5d65955451f05f9aa81b7c52c5148d3c1e08669cf3649b810e3db0d7b2c2b0ee538875e3cd42a9a7848de763f3926944030399173d8bb19c6d4543a3fe09b72c38f02aec634cf3e1c6a902657d1380b591c4e50a8fee29ae428e3089e1ae3846b725b6d5acbb8badbeccf313e7b7e30a38de72f423f42f5e6f77234319dc3507a75db80dcc59d715ff8f559826d4728e69baa11a9e3b6d6d78110d0c0f0ef690b0d6db8c967edca24e32a81abdeb46995280f60730c0fa1f77a971c3f948561b1135f5d19eee455441d6d181b5220374fefd83844baf81e66cc7372bcaf5d29f88f9b249ddbe2a5f5834de13b08ac6b866865bbc86f6219beea070a6e6a67949bfa6f698614f261519eae89e6e54169450d4e422e8b2bf854dede2d3d9df50cc4b25f3d28912d45a9be201f13b3d54cbf6957fa24c1492426f52c76d77fafcdf686edf432bacc1b0000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012251a84261180797f646e778d211ec74bbcd3b28b7d14d07e8b3d6535f8b6f8c0201eac9c3a248755c9c0bd20e0939601e94c27a2a04be098e5059fe2a4b037f5e22336807d614bded87087720711189bd8f3bdf707c865ff649ec0d4238ac276100000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090e93dcc537918439fdb93999a538543a6acbc41c9c4e33d05a3406fdf6cb9d64d7e6a2dcb4ba4e66e6404ecb6f9206c48d9b55bb34a20fea259ca65bf7f2d4d0fcfee9cad9f086b37e9a689b3452940254dfe04ada0839abe6ebef9463f518fdcdcd431b74fd069ba901ed74148a416538f610bebc901909d37b4ea5e6ad7ca4caa49da7e7d074f2aefc7c74d7e8f13cb0b80b6892f96f8385357001dfba590f7690d61d8042b63552867dd426fe17a8663c1a545d582ce3df034ff41c5deb997bd1236084c54b21ed7106132651c9c3ce82bc4eb43a8fc4a29250a4ea4dc7c46d22565c2725f84fd48493fc00c54c687da26da7d06f58c8dbdac6023ffe7feaac49832f9cd96c5619ded743baa36c898054e2634177a312dfe2688d2c41a2897e4fde13647d245b769618c21f6c7032dd258d3801b32b287dfef17b6fc6aaff3e65f5942cb4d826a6c90868194632b7eac4d2794046db73bf3515d4642904ee6967daa58b64d9ed3052386c76ad794268e400c3ae1db45ac8e653959a5e98c373b212ad6501e7f6d4eb90188118bf51d3a63e3ebd73c875bf2c7705527c9e4aa53df767100f851eb5529c60a1124397b8be5d195df3933d9cf23ccf4d6378a0000022800000224000002200dbaced240b9f1edd3aba53163a7161ec1c451d8394a3055cb68efcbb7c88bdf00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000264b9cddffe1ba944fe3db4b9ead84ebe2d08714a92cfb7a59fe82672cc9a705cc11a48b42506ee8fb17bf80a2f17415f0c72c06177fa4f75350d9c76770630e5a355a2d9d0a6bee04086544f662699a836c81a7f5192ddc5f437a99d5a724087225eae75fc96f3c4f6bce01c6556277376d73c6d75ba78756dc490bcb29853ee08743a53bff7d38fd6082d639f399943f2b8e45ff8114c24ca2d1a4d9c36a4c238f98248bfd3321cac3c8c071e2b642fc6f53f3ba24c009c94816e114020ef9b0c511077398c1f6681226f5480a06e04dac3b5b71a2b12729801fb57329a3bf7cdcb0ded65e93261e7ae30b3923f36882965ccf8dec0fd7429f6531d38ad9ec8841bde27e3be2c3bcc7e04d6d602df776b78dd841a8c1c89c0870ee94320e5c9486843605b35a6443ba0d35a6c9d1710711c7731ac6a6581d63349177fe30735e379f06d7f6cebc948bef5326095481304cec5a438f49746f41193045ab96eccf120fc3bafd91c60c6221290765623a622c37386920d13605e48382157f1e646618f9294d88f28f0e5e3a88a20de3dc9073bfb494406a6c22a5a53c814cb28e021b2aeb0c5ab23916eb30b51957588192a0fe33db4a4cfecba9ad25e5bece30000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001071f052e086b8260967a3e5bbb96b9111d371fb3c249571f3eea2989c386bff70201fddac23361a0bcadaf5e6107f8f5f8f310f47ca3e9416ea7755a7bebab3b630c7613276bf74c3c4d2eed8eae96c4f312e3d18888754a9a6c76635e2b907420000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000935fc8b6814a66c0a8b65f6412e6b10a54761bf9e43b531aaea9a65c5ba46621a870bcc6b30658ba0af136fbd8446a86d047735d8d8d04bed7a20c49241881d2c3bd796c93ffc8dff48e4b6043c38eeaf5f2ab12c5fed6eb55d23fb6b7b4f43470a88809de39ff4586f8649a8c5b1de53bd9fbde29f5ac40c8ed5873361adf0b170fa4bd51b6afb98fca90dc9537bdb4d41632685427bc37df1637dd00d56eb3f0eb95ce47f4ca91fe577d0b58209b36f83b299a71740e02dbe2414265a7bff844b3987101648234474a262deb03c923c0eba689216ad9d18433d6300fec43d990721534fd7dfa541ac5e5f0254e8cb3c308a3f40c82c870a89363eb91d9e0c5cf29e76bf39867ce75c2661fb4b8e8a66c3ec870ecb3f05a56df5686fd4827173e8e177eeccd3c0d79174ef56f2145d45a8e2f813f193e37d1f5d448d5424c4ab76ebcfe8a02fc4d76518be8e49dcf8eada2afb93083f4ad289273d01f2bf4a6883628b98eb5e46e5566d8ac474cb9f742970e4d4213ac11a78a3ceda86d28c7b2b94dc38e1340e40fd30698a5f53c6736edc6b075c519503b549a67d6426dfdd6e76dc79a4df6cf46bb8585336b2888d7832a4fb5c29016d7be4b5ced4c5e280000022800000224000002202b88ac320aed617fd5a5a043137eb8bdd845eb5b56dcb013304d5fc62804a4500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086a47f0c624f6f869ade6d40280c622aaa584ead637bcc3d61b5b6ec50380f224f9321b08d810eeb716af9e04f57af77149132bb24ce6b51789635c150805d566cb56852384048d33180a11999237f831cc200eb867866f0dd6befd9806130ecc722a61aee000f81a47b4b56beb3145ecfc337abaee624ebeca637c343e76154bd9c607635961768092c543b001e18d203c238082fa08cd38cb4137ba9dc8cb37ed6ac83c880b4c405e790f6d1de98dd1df293df4a76c318ad721823ff21378834387fd09058747f158cf93346c678f47349c17bc0eca38cb963e93e2147a3a399d7c1749da9703d40d69ae1b312750cb1039b21a615a8a40b117afede8141a0de22267df4ff4bc202318d09e451e8fe6d0f2ae6ad5a11c1bbd1dc49f0e31ffeb6ca357f9f5a3146904355b87ddb4b58872064f22c1b2ce3a2632b7553249f3aeba11896a4e10cf408dee534ffa5eebab163c8a07b8b72e80755b607dddcdff37f9f1c98dd1a12537ea214413eedc9868d6d83c08d34672f4a86b70192b818176ab470f64051a60cedcb5a4b486c90d0242b1d38cab35ba8dad48f270333c8a863914060f791461ef17fbdcd33fbe6f56be684364257dd1d1c2dee914377eca7000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011040324f1629a0aef73bfa817ce606d084113a3532f3b8475ab8d7c230620b8702037e2a2dd55bfdb04ef4e934796856a08c1daa46d8b0636072732d779be6e1531304c0bb07f0ce540065823b88dd9d30cb4d692d8dd4b26d8ff7b819cdf0b39e00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013821a07ef35959e914bcc28b1f885bf543ff7e09086f592777aa63ada5f6c85b6c21f45c6d913a697921783ed1db6f43936abcf923241c3c8710a0e4e783c1ae70ab2505df83e6cc10975e90fb61b20355f9d113abc089e578e2a8a6802aa38a94f73f804cc183e21e0d05713ad543abb996078011fad5e6513cd64fc500da98176f83fe37d75417ce7603b8117dced155d43011813f90571e86cca33f6a34149c6ed95e1f11dee71008e226b605e6174d5c4f043fba3e7d3feb92e5a9d59d2fe1262e80092f9315c0f8c6f07771042c313b8c0cec811c1381c388697f686c20a66a6f51bdb6d2e8ee37e7cd8294d282b33eb9a709a95de74dd4130d7ec144c735724256d5fa3bbec36d41e918452980f2a0ffb95d0496b972c8cc9128792cb80f50112fedb67683db316aeb8498b06600d496a2978410ed36c870bcd8a976b9edd3f84f6fcda9c83f645c04360a81e8551f6dd5be42430b8996b5b13f2ffd3c1c4ab6b469a050da56793048476c0b6cb2094fd85852bca42b9d9d141c84be69f893e5c605dc9fb47f78d9e57146fecec0f81b66f134cffd9b7d0087037316425928841c30a8fb972ff144855ab168ca0839004a8ce2387327ec69a9ffce4f300000228000002240000022016312e02cc83de609af159c540c014680aaa20af2f43608b5d607baf3aa7b739000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cb2d21b673c40deeef1113e898a4f91936ab0713f5e859d130cd260f285a4251f934be2f925a157f733ea8aa761e5c87ed6d204fb6299a940157e0fd04939b2b53881d2bac406602f37072294042a28f51b0864edce4a311b286323862efb667f4a5f83a7be03d98e513dd72dd16011ed6fff8cd7f7c388137cb24429f90c87970997206ad593ba31df6f8637ae89c1ef262229d8fee31f2ab3ed9547e7cd7ed51d009db5c3c4a70a31c04f207aced6d5b13f9740b80762b0f95dec7a44db5daa90cc4e4f1b95705f70baf7f20f9bd63b65449eb4839983644af3df48a1e270ba6049a39c8758ed349740a0b26095eadf345b0a8f768331ee8824f2b7291ae62b2b937ce7921c233530b70732a2d038a600bfc3688582d9a2f5dd3b453b0debd027c1664f0f300e0bfeb4ee5c3b4a07f34ef68c715e53afa8b5b12c826d2de885de372c3112137d27d31c4f6e843cdd0bef1f8ba74b8150b0023fd2f9262df55ef25a1d99ddcbefb77c1ea8db2891309c069ae5c1365f85e921a2d05515cf493e50bfb456715343ee9808b99276c2e99d58b495538444cfc7868e18e10f726cb520a0338c647ed78ef90d7559c556d9916a5f3a5d686656b477dfbfbc59053a000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011cae4aa2cf3bcd947efae4e8e4d98b828b502ddb475cb843a969089bfdd30c340204c8cb75a925545ecdc98272bf57a1621eead8b7bdb82723f975b4aed5b4cbed2a0472df002d548f6763c238ffcd618cd83ebb261946c860dad325ee65e6fd20000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000294341fd9f857a2c7804b222a0bafb59837b8a5184b4093b3bfd20afd4acc114f5efce57de6f29f66d860c1d0d30a3651484d0cb4522c06424e0d0e502cccd1c0ea51c92c6dc4ae41f2d8ef035e8c403b74bb6bfa798a45111f69028eb5d8758213ee45396509dd5ddd0033612344fda3869b9dadebed9c71ac0495ab43cbcde72216997424a0e3c94651e5987f6d329d672418421a459673f3c9add82738d030d4b817616ed0e7f1594e54e7379140932381aa1a64f5d3ba997d7dc54fc7035c3ac71b24f9ac4e57d06ac8f9323f7bfc3388603ac1315f806f5ffdfc1a71bee180d3947868432ead4a09d326aab5ee7b15e4f703f7c262b5cfffbcf5c33c2edf96c13360571ee2aa9eea8eaa7110d0ed5cbd6df5e979a9d9f66fdf801c41b6eface02673530abfc1585dc20d7f5b183f1af2f4b9cced773377c77d9f86a42d2938d394788b54faa45a95b0be5e2f9fa841bea377c055c181b869e5a374043e91fd9eff028c9e2127c217234536b12233b0daf14c04815f52825193b75c7c5cfbc80ce684d6db3c40fc2c1a2e2050e1c79d23b7312e7e07c6003b27a69b4f79a6a4ff2bc3254d15f23dc6cc3ad96e35789d5c648b6f317a28883e0a8b52780cd0000022800000224000002202e6b8a9377023b6a6e10f117d9113789f6b89abb17d4559fdcf21646f08ce54000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a914987f1f8400c37a2c367d6c153c5ae8a1232db429da3014fa28cafdf8e5820409c33c67a14c5b7c5ddeeb26f0752827fe09f902e9dea0c5292f4603c41ed3c6289c9b096fb98b4cc340ca4022ef29ca310105af7374e911b9d92bf56506f5909e1ec933f9dc39790facafdfdc99634ccd0bd901b271e00e59cba92bc069dc37f3d03484481d1b072728d5924fe50caf89ab51586f9679ce7374f7012a53f4e178b650472d673bf03feb3714be4867fb866a62cf0df9b5f73e16c0c66d88eaf0ca120f143f154dc9864630210fa327f13e7763c79e8c3ed300b148961126c46d4c7d4377dea062687f278162a0291efb971416492b1ecac269e4f5679d9c72f565d393e9df439d2ef41a939cc15353bb8a6a5348ed5b19163a1ecaed9389a21c050bd2f5fb91fb54acb2d6fb91876087a6ba06d7dfeb7c4fe356c44b9a49f4a0be1da7eae9b4dc2d061017e987c9454a9681ec375192b1f00d2d064cf3a9f96bcaff284c86704437b68db5b97cb0aed10d6c3c5de78dbbc6ed569b6cd2a608e38cf16b961ef02cf3318657613976431cfa7188e0c57f20cacc9fad43e60e73ecfc681d37e6332a6403c2c2d489b38695d8f1bc7980fa550cc63f62ef815032000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012ac09a859e775603e69343330c269418b44a5ece57a3de49adbf3a987da27c160205101b2e13e4488075c6d2c47e12e612410fd19ef6f985c878e2fce40cf56e3b283dfd3a61319626fc6c0843d817e1aeb53bc94ff4edda6ed98f0b96f7a82eac0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cab4b0f15290c398e441daa2bdbf6b9228ad7bd2a3340ca6a851db5dc4b228eb7f4d3714004101f6d9e7f2b3b6f0358ed01f46c8631c57ac331dcd60d3ff943f70280562774a85b5a3c408db9daba6ab7ea1b28a79fd1af81c4527d7166ba452ab19349db8834fe7b0da957531055fcde2cfb0eaf82c678a386bce9476f8ae93c0975062bcfd1e19c39bd957ba722bac544101648e7f5ab26008560b2421c8371912da477a21318b066da79570c8f312f9c83efa5e1665cd910c700f9405fae416c6309beea70cf8d08d987c2d00000b46ffd0132ee177e07205b177b970f7954ff374beb8d2ba07b06984b61f7d43f3cad58f3801f34adb9970df388e58583004c28425366a85a462f1899d9a5aba8fbff704448c49e2ad8e7dab25ed8103348a02f5679257a832d8c52736ce31e6e4e2e43139b21611273b601f910b98680e4183f79972ae2c6a74604e0afa44ac91877c16f738e5c9472bbd3441f70b45f5cfa71a198f8a042d7f051bef895af2f33921e4f7339c730f920148a6c5686812cbf3459910dd8de488d0c09dc1daa65a4d8750ff3f956bd9022f51b006808c71e81f213b51f31c418e767ade741a0a98ce62391d97b7d67bc80c500d1d370970000022800000224000002202d36e00aeae51e0ee6376cc8f112ca6d7bde8ec12c928e3db34fcc7e0330558e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015a7f4046712bfdef64eb278ca89b6716b58475902d3a9913aaaff36bf0ca0aba3410c48aa07ae3683307f03abdbf518c184dcd922aa1f9ee0f78bf2d4d5c0cfc8087127fcd75e2847e8c7d01bdd429c3cf8e66c6e4a21521aefb1cd55c8f7893657ae217bcf0ab0093c0b3263fc41f8ab4ac16d2bf59e8849622f34dc0efcb419432228b6e1e811c67ee1af139deb5239ac42d1ac2618a9c2304a43cfe4dd38ead2b1edef060069c8e37a2a7b159913cb9113a302ce95cbaa1e38f41d32fe6fc50960a15b29544c7453c7545469df16ba582db05bd1864b472c7c03d6aea731c05fd554ea5f782e3cfd1fda9302b2fc26bdc28ea9db0e7535106f37c418446ad283502910419b08d9206abc7d7bf83fa5d29b7e50c3f95525205baf613deb6a427ce7273b0189b454b5299c0a73977909af60cae42f9217ba7d090b26c1573c91691bf0ebd4bebefe420eaf504281761a916dcba56099e0f867824ea0c761d238ecc5fce5e013c5c873a303f8c188fe335d1c25678fd05928cd32cb8024f8b3fb39c04ffee870b182e5edebbd81d6b2ba15df0142870b1b2fe542d65d3d47083b1d2d2689625fa122b5ceae80c1ee57a59ae89b397b3fab73988f557dc91120000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001144d9acb56498d47ff8f64ae788e90291bd281d269597fbe25e0284dd488a7cf02070cee4f5588c23a6e6c140b3b6b36948da858cf62c0bee4b1770dd44fb1acd007999b66e6f6807326c5ee54c20b13573dcffeaf7c3ffc601778ad13d7164651000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab7077a91689705491372ecf4d6c72a7f89804669b4fb107205ee37478936d4cc2a82723e2b7cec8e0897e4b05c29143a15fe214225e5a2032d3bda66539e1b15f61417d5817f2a11b30455397ceb9c95d79590aca005b9f446c03f58467de6d7ebcddc09511f33939e320e997ac68e68d11b311c8dba1abf467fd73fa3202901a5b1f12116a2109854fdffc377c69748de1df47827a5264e4eb3aab7c50eb6433f91d066d696f901dc2d07fc29cf5c0d26d504addfdd44b70de6394f78782c21ad9faa67faee5be94b5a87857bc981d9bebf8b89698f81fed4adbb5111c42a9ebba49d4d49140b73f3a3b0238dc295e72245cbb76ed033f0236e1fe9427bf8727b1c6f38fd4ce2946f26a4ddbe0d08ed02515ef4b34b8115b8c9d6e314aab3e91bf107726638c4111b7271a1dc6ea715a535f67e830a60977dbeff5697d081e9b2dc64b9759a073d995328583885242e5260ba15cc22b893300c2b0514a4dfa1b24546b3575a24d50b79878e5b9864b487a76c90568b5fb3018e716f2938757e6922ce1cfa844329dbf242900526277a00eaeaadf383b4ab4f9bf623eca98a1af792c0c6c9fd3fbd0222bde8b9dd4be7d07ab0316c5e6a2f7c8723c684a426900000228000002240000022015be9bc35b72694864153dea5eaca5dc862ed6560d264336b60b160bc77fe10800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad7011a38db2ae1213f396a5bc5c9ffc4d258ce033a2cd6a0c59c688125abf118a90ed49412aa4e709fcfe42b3fad1fdf2e3ebc54eb36fe86b9676d551647c72bac1beaefda12fd9fecbd126fa515aa28ab6fbfb358f05585426bb82f14981364b245bf2c479bf1535aa715f1c825f7b46b8f3c7d3a49312c54600af9164d1dafe7d29d082a94d1109fab6241c92a00898ad5ac0a2326d0de7b0c44d00e7ea7646e7aea59e7779187409a536b9a26cd2625d7a96d8deac3c9e2f45a00d6de757d5ea821fd3291d939492f39b40d395ab65a6951076fe03eb97e060870e70073e2a4392d65b59b18b84ae923dc6ae3e01d3675aeec678690e766ec5561f80fd36666f63d28df0fdb971977357c472a86a56d29a26055e57462fd3e4ec405649659f89941b506b7d91d63acee046442d1542126218474693be4388d02b54b2bcba7cf27cbda00b53595fc0c85ef6b2261d322e83dff207469cfa21ef7b0f5ba817d848c724cfbb9a31b1679175ba4d4ceb53a4023f8513dfda0e40236d53e1bef21f67f47736db6f663b835d2290824bb6edf86d6945cda2cc2e1814657d9b2a1fc8536d8f5d2b1f20ad56904460e789c6d24ceb252ff6a9847d5ee99a4e1fef21000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00200cc5f90624b250f8f74f70ea1fa409d7973eacbfcc09145a734e8ee95414ba72f5014911ead486a037a43bea6c34b158d767d2cde0063f878e4eddbf4cf707c0207f9e829efe1c185c83b7d639ad7c5566275e8f445e6c4629c163ee89973c46c1cfce2dba275c45aecfebf95a37ce41531811471ee8c04ee5d9a61a5b74e075000000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad1d14ad9b0830ce376bc548eb4978d7df0c898eba8358af344d8adb1781be8c7fd0bc2541bb40b5b87896b5071bb1e9fa5951e3124e2672ca6f9b76f261c9c8308eb5d95f2a42c837e9627c740bf6d3220d05dceaa243890c04f5d3e997beeb7028b618df01e851ff905da7f5b7e0f560da6365b0658ec37cd30462cd016d4a634d31f4eb39566e05be93fde05b6e6777afabbbf693dc53c00695c18946e2ed72432edfa9987b05d5a9aa71dcb5d725630fc4642e9f7d5cabf0fff63c543c91fd5ec3ec1ffffd27314e5e5a35c2e2536f3238a90332f6a19ed42026eac8f1d82c21cab038c7f9a4bbeadb21c04abca7ea124e02c4d14ff61f552bbcbfb6d505b70a7b8c9e2615db1109102481d5fe2e9310df5926c81f0a91760bfc4a2801bdbbc1005f74654a1f2b6a045c2f68a567fbfc58c080d3a7c8de53b3392b066c8b42fefb92514f4516f0b4cdd054e5dcb48e153fb27d4436259c8388b5aaa28f750147d2857bd4fc981999c14075dc06da26f98cb240a43393d9d005e4e181c92da7aed5adecaec1b313560a580e1c3c0066c0d73e6cfdff283892522928afbca40820194bf07ea1a1146fde321c4bc58314834c5870409faa3304c6388400dc8e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c32a3b76a8cc6e5f5fa3c265e07934cae22fe4547cf836da79b93103122926de7c2080c8d4684e81dd64e0dd9db389ec7c60102d4f57d9249fb10cb60b5f269a92d2679186acba696ce743efa2de891d053cb37821676a2c3e36aee37ab18482a5d99f752286d170fd06e7be32fac15805ba0d8a7da377c983e53167680a05dd6e0094d89c243f82861530686d7c33e9c5e464546cc597c3317fd9d90042d5af1f0d6675792aef4b14056f124c3c858879786f2aacce5aa38310b9540506b2888d15ceebbf04dd7f2ecc12cfc0e881e82e98ce8bd3d29666d7fef3a72e1fea2a226d42fce11a1b07455f175563f0f025e8b32cde9bcdf20d026e7ea15e795b724d41680306bf959b51050c0826bf824db7d55b68342c5742dbd81b4ebbe5866b06662f81332bb1810d49f81f8b2422861b98e97794d88e4c742aa488370bb60452340d479ffe7f210fe3898b058bdc70b29f151ab6aede7a1565f7c6650bd6a949e029631b82bf8ed8a4739ff1d6ae63428f666aedb820f9900d9aafc34e85f6dc0cd73d24f253566e250453be07a38303d09c593ffbbfb5991c1f3f83296ad9d3d963449b2107e59ced779bc10d9b929eb07bc66847487ebeb4ebb74b2272e0000022800000224000002201cb8ea065eb2081cb9fb1d7c2aed74baded2262ee48cae0acb28d1f9479fb86e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002de325d814d6dfd76bb15a57591fe8973aceb484533f2b0ccf635e664b04bd72d092f8f77e1b7f4a009c6d885ca0ac59003f6ccc5f4530b196556c381495b82fe8b5bdedd273b751077b4f8db98db2b00b4c978bb63884a3d69bb6bff91bdd2b9f674192e30b45c4116a0919127ee3d06e93d17e81310ad9ff4e880256d90b879abbc4f9a56e24f89c9eafa13ce16a790d4f43ce3872cc551f4eca3b88b7b989422fdba6bc8ecfe3eacd05316f3ca5db2730259ccd0eb8c5f8f608a72228f07f3dafb908101bca24a247ec1f4418bee01c0c9b086be0185f1d2cd2df90efc2fac4ab570bfb1c58690d62d9a5de3694fb6e133763e24325c9f32da019e96bfe6c3fe61deba3897cd7f8482ea44f23f47fd08484bcf43e4193d1f67e04130ab4d624221267f30311a0493c4163e4b535b0a6808ca2ba6a668dbec92590421b9c31aa2d8db174ce5a9cbc228a1e7ac7c7d68983eace00f81e903d6424cafaf3848204defc54862911f392083d9d3c39502d517ec9bd79701dd87f861b3b0a863c3ae241bbd3c665701188463f10e0d944c6632d5cc2ff91fe3d8ed8b51c61090db34d9f4da714257d6f5769a4fbfa66ebc728174e12d8aaba77b5bb5e38f18b0605000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0022faa989fef5fb54023659010c5d88abe140ac79fc7e87b23f743ef0aa62c9b26054b47f05531f4f37182250f5f8d694ccc2de2db697fbacaa17846beded3a19102087992214131c028580ac2a16c456546b14f9e25acf3612cf1c12c45e75e27df2ff01b72327d50a33462aea333d457b8da7b57bcbe7e7845fd7a4e4e1450777600000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000854ee9c4bf0a814c2ed2f8469ca55e9f600b7601783cf907e9857264bf4edbf0f361075fec36099371e0ec4e2379d9d89d8537d2a987e563370c6e8a2404933f0ab9f93ce7c7f9f64504a8a9c011eaa13022866e24de6b7c288f64710bab64113089c2dc6e842e7e6b6ebad05e03d6defc530848427425eeed45a92484ff6728721875ed16af444e95130b36c41b3987d480520be6b6229d94798fcfc4560a8a533c96edac070262df06a94791b64fbda07dbcbb0d64b6c8aa1fe2a389cea3969f638acc2c8d77264676b053075bad3ffb88fda211d985fab11e540f4412c47e8a3a3513b91e892c6b8afdcabe8ec44b39e446b0d1b9ceefc1c26c45a2e84dc26db5ae35b52eb55b8b498e6059543ae666df8b30d7f7e480b015429bf94ed6f3b1872bcbcee756dda3932e06f57087127c9a7aee9af0ea6de195c3563e0c4e54795184f295b9b7f4c0139e00adca606a5bf72c3c29cdb2873e35ef85217e21b9f5f54ff2adce6b4808fa75fce7caa2d72ae9d50fc8024eca8858f3865112b5942d5389835aaf6674507038798ea028f37cc760796eb6328d870ede215e7b4d0695ffa05c5ec368794c9fecd13aebb7c5069532a236066c414d091aa231f0bf4f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bbd370e7619d349b899cea1f06ef27919a54ba99c8b351291f962177bf1b5cc89ae0fc3a38324a6c875451bcea57a9f3ae5c0bc4f29477c281977fdc8e35608692309995564c9d341ab6c9589b08bf0a6901195e5d4717c5a15f3efb47e1be55314c51f6e658f4c361e96244512ce286f081ab0832e2a3b1d2b0943795472f588f45ef41313f707fa033d0699ac142cd34867436a5ebec73d52d49a0c6e3100e2a5d25597fe0753f38ca5646a9c1ad3304953ab1774caf1091c9b21b4131b10f007d0acae4241e5ca93bc091afa20e19c0f3b59f401001583c425d1da66077c76757ee703e4ab7a3f200953cd9d4e722902b6f8b6f1a9c7e3d95619fee121ce2f303ea80258b7e2a29ba55a828b52b824d86bcdb3fda1473a567e12f00715c9685dfc3d77ea52bae44130ee725326997f658dde1700a9e1ec356e6fc21c346f237dceb9a8e166b4e5915b5e33a28219f8098f236bb9215a139f5c7d9bf5c9424a5ff2111c69ff9f1848a18cdee36476c3bab6806c39aaa2b579abbd4c7dbeb05b06bd84510397585609459fa7a38ebcb5c0aa6648b9628ef4e22c1f7a9ae3b1018aefe13ae34618ed1dc715f00af04de5d96b30d11d5f09e85197f5467d2820000022800000224000002202cd4991f6842dc69f8e1f42e57e631c069aca423b9dacfe7ee0df6565ae89d43000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d1d628586ead2edd138c65308470daf6851284c0e60082a55a5a8481af54e00cd62099f0516d8fb9ccd9c0dfbabeb6b5e453e12b836b06d24f795b731dfb1cf97090ae386b4d75a579772398e4a84a10483de02079408ae74f30e055cf0ca7e97b8da13d50f972eeb6d3954fd74d0ecea044c14c124db347a2dc714e601f66f27198916ef8f629fbe34f7cabdb632ae25f5d97178faa72e9b8386ea6a367d3258c46788d1c620d080b41ab5312c2df26a1642f6cf5c2e6e760cabfcc5eedf778815badbd5fd9f02bb3014765f5581c6841b4561cefc8978f5325433adaa2a02f327e53b89fc5b09b888cc4ba866e8cdcfe00a8636e1cf81ca8e02199cc38a7acf91b18ce7e1da6c3f10e75b1907fa369d65f701caec7126ac8cb2f934a2f37cdb7150d29a45463131055897b5a9e48561a951f0ae458c6a7eb2b0b1e7d07afbb82395bbd20fab8e24e866fb9e616571b34eb18d8ca249d35acc876d59f721af3e243c6848571c33dcea35693e6ec9c81673a4d29790e967fba005567f3b211af7ba2c3cbfd64e9505ce0ca09452d5b972acf953a91d138d2ee1eeca8d853cb8e24c19e3221d58ad5bc3410a8d7e9a837322ff6adfa5c21a6aaa5b7684760c8a000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010b77eae034028c66fedcb53ae14abea4e0024a9edee3c286129952d6ebba3546020a7f0399e9e3de3bbb1f28c5a6780e4dc9df4f32c8366e867225fda011a24ff30c64163ca6b9168c4c97dda4941b0e38408927dbb12039013e7dcdfb6a0abcf80000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009904ca7be58956ccbd89c219278a779cb3ca8c6aaefaf7a60e1b808c334cf1ccd5feb3c318aa5c08dbf4404a348c88393d70b0e57cc8a0cb2873b5a2e5ae7f5d259a43e1c3fc25c5321215ca25f10181d79b4c08f6790fa9e48cf0781f43cc157c3147c794a2fa71c736499ad9466cd559ce8a7acbc4291ee18509ac0651bff75493edbe5c67b1e512a44b1f16242db4ca8ecf714097f7233ebbd1d32a61d529c5a71af18fad17f2fd7e1711fefe24f83dac025e433f467f3fc12b0fc646726fba23458bab633575a6ae15de8174e759d3bf0d02b1fea2dc9a77d3dbebd82f50fd3de13a001aacd765969bd9b04570f1dffe87eefb8e95ead17f3cf3f3738ad893b24b3aee1d433ed998388aa92f81d262b69924ebbecc5903f042ce998ae07996da18743e10a42f59e98e798586ea6ae9f0b8c419e86717541a54bfea5ea65b8b2a9f01469afea71de460e1b68157b834edc43a8b03a9e4f2cee9f8c5dc858580c42f69e87e5a756b3fa953f7599edda687a4981e228901a14d172357367c876cf89f66b6f00449c20348dc1f00dec7dc969ba5c730dc1cf022610cb309009300ff1f4d0afe1e17c28de9deb4b808e32d7f7d18bba522bfa7fac97d5110f48700000228000002240000022028bd03213c7151a62b9f2c8d479e6b5b424592adf25630dc51b38c65461b91e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d2142ae5192e9d1d75c85d8c5ff3bb9df4f98f956b3bba4813a8b003a789a304e9e68294b42d6e2711db44c24372955907fa9a7cf44e6c56c501be5054ecaaea45ca85ec4e7fbcbc5b45b09c5cc73038b6fd3bb2a2261c9faa4ce0be76ba6dc857a7e4f131f870986058166fa1b9873c8a33fe264938e912b05691666495fddf2fcd3016e719f3b9ba6f6e5337dc10933badf78cb6981109f932229b390b7739e610d7c09285f663aa8703ae3b114690c0746cb92efaab27641a8707123f5556e1b7ce2f28d0747a3055e991b8495a314f02adf251caed080c53d0c6c342720642b1e075e898039e69611642639e0acd9dfe0e27c3330ca6f096a6e1c748c072c5be407bf238b882a8b8aff77db750abc687e98230f79ed45e828e579967bbb88f356b9b415d5dfbcdf0d4d669acb99b9463c07d0655a2982d7f830ed8f7fdf059dd5ce4f92697f4eaa4848658d1b5b0f04587669556031f7ea2588b8c557d5f114dbec73eac7928ee94d750204622a3859397a2d638ceffa787c7d480fa51269418ec4db5766dd4c7dc72a13a339cbc017347a00ea9bf90b1739d786989fb5f585f0968dc3f96ee4d493edc5967fb75e05015143fe85a4394ba6f4ebee719000000040000000000000000000000000000000000000000000000000000000000000000000bec47b002278e7e2e025f015798183f46118011c17f9e6bd4d69534a849cacec588d7912326df6d2d308c4ba06d942e0194ced70623fdbbdae99b09b0081a0cce14335608020c34b2fb6c70431763da5241375df4ba55cc266b8c9250a1e524af365e61a289147daf25dcb16d86d4e867069956330097de4a9141adabe88a710b88fe721a5400000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bdedae5dd0b9a725f4bfd38fbf034155a851678329ffa9908b86d555db99785d2bd82672bf42659aa5d12e055e2b18e03a949109bbf8bde2fed5a661a21a78025ec96a8fa4fd8472d98e371cfa8f9c608303c8354fd321844d7e1edd3860f990f0bc61e18dc79f34c49cc1ec323bce94d329c8750f7861c87fcf7f41eb52da83097ce9904df53caeb9c364ea5a6cb79d956df628b3171e0d7091920261bb6862428cfb77de8a390787f39757d123d09f7369d2284384b1e00b7a1bedcdb08e003bd224dcda564a4306b40db272ec0e5fd0a7ffb439bb70ce744767e1e5764fe44962914309c2a5d00a1f0297061a701b5335427d8b3eed2150635f6a685b000f66b5688fde7e9610aab72c93f52466526220fcad60db1afe1740d11a2473785050be79ffe85e79bb3b2efd79b88d3379e1ee58648f9bd142c0fa01255cd4b60b9f15c186285d13221e2ea769831377b662e0afab124db04588204c5c634acdcbeb7da41eaf547717b3b18d37980955b0565dbb0b0657cfa5d117e9b25b3254d7029ff18acc9a3834603b8d636c1bd1f0ddd40ca72be8bb14082b8970f32bf9f80eca67d72d7b4d14cf0230cf96b42ec9d8f13f76fbdfe0eb5f80b09de65d17b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093741ca3d8f4ea366c8bd9467dc7ef43e8e5eb7f416cc1693efb067f9784d42462953a2107a3d279e1d08d18027ad0ae7b46861b1f7fa7ae15aeadcc4aee3ce20f6eb2d391d8aa1e56b37bb336d8f91985684cfe175ff8c58b190236bbc8144ca997da45a6c0f74b55394924c19186423830871a89177e8cc6b211edd62d4d8310de897f81cf4a8e17fc433406377ff00d17d1b40fef68ae7af5fbf7147be0ea77a36f5dd84854cb40fa7eb28d99133d01ac308827af4637557f6193fd7360ac98cb1f9f7549586b692ada1a6f615bce707814a9da67910bfcb755284d351dd0480131970ab86ca193b19e91920721d4c5d57e8daaaacee238fbc2535813ca27d08adc369bcd28cc1e948dc5db492a50810313a070df092beb6410fa0c9cdf33ca1a67d2a6130d16fa6f2920b4bcac4ce0ac66acd6c1c93a4507a1a413b4ca3960b6a6c3ab95b0740b9480758d94ea2a8ab73992d037a5b8a7c514a59d3ef4959e9e24c676c8d691d46265d7e6a0c0665d4c3e5df30f5e0c061f5fdec551f2ec151c311ab81058927d16f630222b6fcf8708869031d0eb5e839199b75500f77267bcb0f18491b7ddd175e6f11cd566685ea0507e4f7d94aed388d6e0dccd3c54000002280000022400000220199061c83eb7623e46fe753260c9d648e7242370cc5c00bd4abdd8ed63e8a9d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000195f20bd24a8bb5f80dff81f434049ff7ec58f2a3b1bc2a8bd4eb0dd86317309adcfb312ef24f4b95c3086c551cefc5bbea9a2fe22ef7e23e4aa7ebe3038019f4c20a201338d21f1bc5558f87d5823719c15a983a9077db0ad1205de02a744fea86131a9e55c4b2cc7902d58c371dd82e135880a4c7aa3d71d44beccec9ac6f57281e8c59864d533de9de1b744f70dfaf89428d60202caf398e084446703dd904f6f49917fef740b60bdcc3933c91d1b8b2115d3f0e59c9594a9c4e3586106b9e0f6903ea7f152bee371007ce52ad2b32632f7437ccec36445f9054ec1811f32c50bc11850bb4fe2da359540ef94fa7e8073ccbdae8600905ae53d4262751bef914e7d659ddddcd0af36a974f74425e0e06c31ca9dd8c8f369e0e25f007c50eb88a7d091a261dff0672f74cb13285fe758cda3bc4258cc7c1e164764c861c47cd86c42d900491bac2f23d852cfb129ad24598b20845919546ffdab0e23515ff05aab5112a2f3e01e7fc76ad0962c9d7261093862909f9dd7ff6627b888f844904ca26d6b62e98557b193179d4a4029dad43ad03338fcbe94939bd60ea20a2a35ad97f775fb9e0965a027cd6e07c5b97170ec115a4392a131fd56b7d6c46585cb000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0022c3143766e3782fd0195934f76885ff9579d3f5c0236fe49e9fe0f12a6fbcad82f282d91eea4b4826104b2aab2465af3a0c0e25d48404ffb3adebae9952d9d05020c78cf9ba83293e66b76381d97fde93d6c0807d4c2039b70891a5c1ba9b7877c0bb6a9e49e1f88c666a2a256dbb3d67c18bba2fc1f4dd54a24c92b664c0acff600000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f8160425faa1e8b48fce54fd94932226048b2091a9dab06dd367302c39a24d75b777707414ca2aee23620691682b30b8d47e50b0dc81c63c383e898907add50a91f32f458f15b1b5020d246a0e6cc88e015e6e8f24a5642ff89f7e9fc2bb1f2f98c92352ce000cdb448c2643c6804869b322e06ae54bb2bf949ae5385e17a289e31a3bbf292de20d7038ad5846a62b60c4adeed4dee407597c8d734476d579ef35c9cd750e39d68198be009ac0f8732e8ac4ffd8e99d4801e08bc823c54169fbd25f9ce610dd73ebdf4e4d141d24b0b90130b43a92551520b6ec3648afcffe81421ca9ce7aa41492689c8911adefbe9f2735c226bea955dfe50c22eaf58661c9d6773f74be4a5d2744be022b21cc8d3874a4edeebd3240c25992a66c2166e69c0e6db81714f4be8428ef4c8d01bd9be24d9e28353934b4c1a33c76478a9fd7df9976f797aa373e3d162e3e9bc74e7b09c611fa7226613a4da284b77fc9388f886a7ac50cce08e23f10625f3ac9f1f11ea151c58bb0bd95c7b0adfc9ef8542e4ac95031daed3890d9b12b16745da54305007bb11d4713fe7e69fc71bc9448ab7cc0da2100d24c29e0c81fe38a24d2d4f05ad76f618cbad4638d2048e27e95477000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089da54cf39f80d993da3c5b87ea64b5a362b282a29aaa8c2b82456fed78678afb89775c349ab783f38573a95c1fd6e66d35c4200f45c6dd4e0d12adc054d43b10a3b390fb8ce3fd2533ad91a479b08308f507b076e6cacaa65c0ab755a4773421a110cbe93d3982b6294ea9cb0225b6e3198a4b0df3fe715f10b058c4100874ec227e2210c4f9ab316a85cca5a7b786d86d194e99c04502a0eb5ffee721fc9b5da2ec32f21732c5fcac64dd28aea1ffa0b4ad40d941994ac2e62a729da1965bfba0d6a66b5095d1389be687114d68ec50bdf20c1a5422f33d098b599ed24601af4d387fffbad2903b5af6635983df5a6ce1815c0c569c3206c2ad7b43d15d4d5d6217d5734912595cdaaa15d38fbd7788900426f3b660b0dad7633cdd30c111851d77d57fdb6d70e4364472006d848d21b4c82578064f279926f36a47306b8e0d1c1f86a8e7b6dcb6258e881d1c1dcec523497e0488623425e208b38df9fda55c6ac7c874d477ffefbaa20ffe86fa1118d6c9ff1cfbbd7e4aa0733bc2dfe8c17633858498caafc3aa0829253ec88ca5cce6f1fc7d1e1e707055df953e4f44a6d02bde75f5ca83617cd079e90099fcf794c3ce83734f2f6617d7a18e239324b5d0000022800000224000002201bd118a7edb2edec2235d3cd5c91f8af227725fbb71950e2b2fe482d1f30bf660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d33eba54c1d1388b5eaca8b0761f78f8413fd3dbecea6f06c7e61bbe94290f7a350a0ca7bc43789f6b9f99addd9eaab930d2a3ea6b7da26b50e443d266cfd55e0af2a63faf7bedf6343688f60d0eb3fa4d1bc6583abd40307151998b454c8fecee57508888e75cc5e30c1ffa1ac76136f60b97fedcb6dd763826cdc55eb0e7ae41a502e34c3c1c002d34316b3815111729367fa262028578b89902f452faef72215226fe73b1d72e552d3d1937299d7e77cac08d77965e2bcc3ccd17a202351a9ca29aab7d41a275caf57de935114314c880e0f19430887e0ff51d35caf1590ec97b47ee037e495c685aa6be8075f7307a2165efa14a525c81323c043f3057523f50ae297d9e09d0645f32e5b1ccf44bb310d41a0746f77a9f9e5abce4c5437cff12e81335a010b67d1de2ddbb41b04e3f0da0716bc097dc30fc2a362b40445801595d539568e4fcaae0777bc87747c0dad907e454b6c88d38a0d990757a3c880e9209524c3ff69ef93073c90aeeee28f7e3deb2d43fa7a7313a381e4f9ecc21fe84769adfeb67fd045675d3d45b8b65b6302e072efaf0e0afaa32612af523cd1f7b274ceb92e0e3f64019e804f91eb665cc4f99cfaf1175978e1a9ed45203000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011f022fc61140b39a442b4f111605585ff224fdc0bd9b84d2bce75706472cf6a6020d318016676493d72f7d7b369000b5edf40e56b1a36c64af43d20d31c9e53aa5213b4c696ce5dfa8fd7e2cb479322ed8cce8669a776125f9f74263ed7908577600000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014d16a4c6534277ef7abfef95024c0ad76bbf031de866a90d5baa1a88987a416d71f2a459545cda0f09219e315c18619b8bb5b13eebb846f32cbfb596d95c45b276fc242ba50223dab9fb6c407401ca353310e46b01529662dc180b84f121e6e57788f91503abb2b3760ae36641895b4b4532eb8ee978dd84eda1224e447f0899a3b6c3987264926069b662c9d86bb7c9857c1ff687566cd5f77a46b82380e69336ff0c180a35cac1716d72e98314bbaa1fb33c38a135a5c80917ee8274ae24a0a5b9e36b897e34692420fa94920c6fc26fd502c2f12a3c9f1d87053f5bda52e89c8e1505ebdb412a7fab358ff5a4df5582f7876d01d0710e64579c3648c7d6f60382f67fb86540e2077aef27a36330f8741e7c5621bd68e38a5e39337bf24f9196f27bebec42a326d8228c8887221a1c30b6c4cf70a9e3fef4f604ab693ac4569ba04a11da378a6f771bead9776c3bff89bb8b867bd51a16987480a052cd548e8801dec59311cfb823b1d49437de2921728dddad62675be8e1ba0499c58341c9a204739ebbcc3cd9180beaf685d278272651e3ffad749341b8287d4630df64fbc440bf64a68272eda02bb017574a5ca7d8c00b2f3077b2ad4bed8738260487500000228000002240000022015ca2724f274a9f48da6d7ccde2a0b8090b0249c878b2d73eb1e0217778711cc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ae1b7f9d2652e3612760d3487002ff5ea981cfbb6dadeaff131bc8b03e9395fc5c5bd54ff77146bc255d7f3e78af1b535a09d4a1652b0f7b27a478cf70c2b6bcf7e7b41b07e99d649561f0fc70d55e11af4ceed23cf18b3ee0b36069b65701b63be9b4317278ecf84c7f2a0694ff689d11822d66689cfef5829d455f937e9b63377ba1645c1a13d8f3e5115a73885a64d9f92c86b48eb3666863521bdf37a8cd2c92e1e4de0eddd34dbcaf4ba9ce319164a4c3a76e5cb6293d5e02ea72c6787460afd604edaf3932e5efdcceb387e32e6838ab24dd24ecf5f5ca5b940cbf32f8191fa83982d609a31dc9ad2be5163de8f13754612681dc5a848b8f394289f2b8d9d52bafdf87f7730f7e26f0a1ccf9f8e10b478c6dbc59ae04ad5704d54270ba840f14a97ef03a3a4c745ff1deed4daecaea87a92961b87166ed3fdef3891e071703fa304234f0c8c9456edc2b683a9b66e65e1353a1b35c9d28110f12a5642cba9e1a69e6b17fa848fbb3a4139f96d4fb1109c050a95141332c14adbb40e0eae7ef3302c096f5e1cef74aca1125835992f7e44e894f8b668c827e47ae31d11cb29b7f22857e7cea730a602717a7f6aee3ded7f29bb3f9a3a2bbf20ce7c3bb4000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00207e97618f30d51bc6abb8cc6ed50bddd9df856160e98ecb7a2a82541eeccf66d28548275ce1efb37c3019390b61c39ffdddab54c40cf01eb0a477e1e5d2cdd32020dba1876fd0e87763e31a2f807284139eae0ad40e140bf8793d2522ab97314561bf3a157c3c56e42f81e4a5e054b8b287bb9f971f40b3b8156e87d01a09f413500000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000917313aaf761d352df4fe842be4f7a205bbeda83cf7828ae61ad89870a3c7c7564c072ea7bcdc75ac1d187db9c551768c020c56f354db936ae3fe497f3de403c9663138379f629b132031c66878742fab8227e155235bd1a946caca8ce1752ccde2701752453f5bce1ec48555f9e5fcc74e84665110c30b17398ed4fc6ae3e6f2166b182ce17f3579a1565717f40bae0f6df8d4bcaa27007ce7477a4e94a2920c01fc271addace2655b81ff0a900512aa1b02577206a9096c0c3d5cfd519fcdd9362de469e7a6cc68ab20b2dd15d2246b65b13cae199daeba5a98cbc57925189caeb44b3f7e825473609786191dafbfdd6d8e3776e49fc41f0a91652bd21f0e8158e850f42a49e073357e150ba4af9e74c858cc087dec212b8e6c0783cd378c448525224e2a0de693cd60c006b77defba2381d9a78fb0e00f8c1db44cb0e67a43972f6a049e26d143a6301c5dc2c7fe772b185cf0ed23ec8fd888fa968a5f6e060cacf3c47c3eac11159c71e70d7d7ee1ec9a92dedc6c74b85efe83a7e7a62ac6e3891fbea8a70bcf6decdd776ccd182cbf3d2ef01686b94fb8dfb726e3f48e5c7d871bc768f1a722bf6ef6bb33bd03ffe1e25c67e58f17d4339df1ec42ac68000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084e104c0b3ee111672b320e0988eca78d61de269f3fa94e1fdfbf56746269d4e5ecb47cd22575dfc3630b080f3aabc0d8938fc61463d48be5a4aea49850ec7ce8a61d509cefbda265ba03e8ff1ee4f78d8a37e55bb113e2a99fe234ecfbaf6cd9eaa689eac68a80218d8b32b9c06addecc985bf39b8e3ad518ae523bd0b2ed7f8542ab8a951365a5f3bd444b79e57ce8d751bd8380cfe35e57005f029f871a7675350ca08759c78b2115c12be50bac3c70574a79d872e44beba44dc29cc9a85b7b8d5b8fbe0b00ce75d671546af657764f909e0cd3ce7ceecc54afb6081a4caeb15300973eca958d0c8b89671aba2883d08e7e5f9931d8c5cf2eaa38b3e46ae9a0df97cbc0751fa4147ea6f7be91a5d43163879c7b85a626acac270d8b9d3050dcae439811b4d252636e6e572d3a5963079f0f675571d38e87460b455d29adfa685e63ce24a7cf6dc2421da6f1848562728b28cf28951237cfa2ee572af443b5cf2267fb519a83e41488c400f51b3fd52e1114baaacd7623af5265daadd9a584fca60d65a53b69867410e26eb90e440f8aaca7468762db5953202340f764a79db250bdd0b6e6003d350f96dbdebb7aacd3539cb2ec6b032c73a54f7d6d7e860700000228000002240000022015f74b259f08c2e4cb727993306534e82b83dbf0b73797f8fb12fb40c6f50fbc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cc2e172ddc5703840e0a5a1e74e4604e1849619b3959b75d1954df12397af3685760face3def102d57a85ca28e5ce6155ff0324013c0ff1b7728beeb5c6e142d77ff6d33776ed6d5775ce7930a91bfde28185b1ad4fb26e23c8fedffda540f174a2b10a4e87905c97da3633820dff3ab3d8e3a7a9c961e60b8108e28129694c9fcc570fa461a0d9d3e548ab61d1deb7a7bbf3148c6de973964eb8b57e5842fd2fa80a2771ce73b05b69a91d24b34e004884761ed7895cd44f401b072e39dcdb604a11d00ca01c79089b37074e554e1b25db5654fb4701fef8715e8bf090e34b825ae5e1464fae9cceab3b3c2432b22b17029041a6a6b8d5cada3fe90d3fea39ca8fd1d79958de6fb73d27e7c323d70cebe21c90937e3251d1e3e1a402cdf825a9eed789cdda6408567414570633ccda65a06680a73e370ad13673347af20faf3a3fad558d0e7950fbf61ec653b8bcd939639707729ef3a5755a2fed5399eb3d5b1022af29f0745777cde33670cd3369a0ef9e9449f5248b62598b43c55aa6128589cd1c936677e2e20e155b6dfcfa6a71195204e566528ca8edd01b4c4664c88a0c53475fcb1515eb046b65158d006eac0822c936c27b4f9ccec7b33e758ef6000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012f768b68400a9b39cb965e69b7938cc49b80dcf519fe683c06c3c69db692d925020ea7077e4ec0cb44939c8f90abe0620aa43f4ff1734611ece8eddf89d85f390b189e1720ae9656d7a35076f15220fdfda4c3cc35b6b4a3bca2b11be84c8ea87c000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000188cd3f16c01fa72d55b209b87bead0c0f50e05c77c8ae2572a889250e765e2aa19a8183ab8c029e0a2c223acf8f1f16fbe3eb738cecf775d6a66ea124280a310d6933fcfbfa37c2ad419c639203e5174318d03d313d243d7fa9d6d9cb500c7ae903ff6846c34e484bc319b5ee640ba77ea4a3c2f9aa6012e3893790bbd4673c136a070de8ce811c5ee5e5179f4bcff2dde85691b4a3743ef9722415c1ee99431f235b10810c5d37aca1d50069e0a24ce7daa844053207948942746381182dc773f859e09f4bff58bd7193764974ec017283e3605a1e9659a70977bc212d55e7574b295235106bf784f5372fc9d37fd3a1cca0269896d8f7a30f69f2eb7f494a5b2f1233411815bb402392335f1cb922f949a3387cf3b646aee479a33d137d7e645600bfb7db6761fa7b076309022427948d4db65f1b1f4dcca859130e74ceeb53ce370730c9f4d96cff2786a38a13dfe767fe9c8b9c91c13bbf65e2ee20ab06bdc7f64963f30a3271c2ea0a381a8bb34eb42051e0f9ad4ead540873ac3664a8d332a334b5acdd771204dd816c0c9402038b49dfc4995d284e109b4ae9b4f5b3a4b8dc0535ab6379c69268592f62f803cb1095226a483edc8947b0719a5257940000022800000224000002201d19ff918d6d3250bfaffe625fe02a319644658dd045bc634d7588f60ecd2df50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027bd3d4d2f0a739ee2fcae4a48eb8df6da6dda267f1bf0b64ac193593d99546dbb4f2b6fce80c98e435df4b1754bfeacaaddcc595832c8172ecffaaa1bb19a2f58be111277ea994c1276fd61c60710fd47ec1e8eacbe3f7c9cf6da0febdae1e30594d429605a0f3be0142fb4f088942a88e5c9f5c52e30ab0a806beb41ab298545d368a9ca9e64c36dd0f37c337adb21b54bef0a99c699bb15d83637981ab8ebb7455a9215e6d77b805de35d8173ecdfece538f18e6720ed5466844543751e6745679879f84579a0048112b9b8bb27bfb4da2bb0cb6bedf985ff3472bad0b04328223912b410954f578cc5fb0834b277ea3728acafc032f8b3f4b8946ba025f35ff17058c3a1dee0aab3be7783df18ba57b8ec05c7ffb0f941677aa94aa1c835774103321205b3f88d3e3210ab7c927295c8242bbe57483eed73ebec36d0e12814e5f8e749a2b0159d46c9ce418a57f469ead85f8c10f7d5c8ae4da2c7a948ba7f5c3de20f88f441bd9d685956aaab4d2a3e8195fffe797b848fd09ac37a1bb28775e0a4a3b0c1f16fe4f98a6edec7b5a9c523ddd10a49574c70ba0c1ad64f8393ef62a31f6355a192da29f860f8012eb6b95b8b826d55dc65035b3e799240c6000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020b004f12d20f06bd56273f9fccc0323af27944596e8eb4d606b0d2f142ec859e0899d05e69e53d9be6224ba6c4a7763efc41026d83d3d40a7d0a6cd33999c7f102109ac524fa93745b311d935a93f26cdd05d7ca24a69c9b19462a315604d627041b0ef05da7ea893bde08c0019597ba91a79e68508a43b1105d037748c1a5e23900000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f85b329aa28fa2e984950f76fe30ea737332021ded45ca23ba4fe6bb8fe688a32ebccb903b6ca3fe4dfbd64ab9e61df7ddc7124c438e1d4456398e2af0883d0577fc002273c505b86d9ca9748073690be8c5fcbf4ec3b8c88c4a348f2a4340339bc140042384fa15d59d1cd53eeb442d6734fe37e51f48473abca323692dc1447e8d32e0672329cb5b8dec7ce9e710a6d11f9ca25372d48443570973108be910aa0d365468e9873dbce208425962adfe1d1416e6b00e629b775778d25d3be41d70bb0720d5bb9153cb9b51bf6f0e47e26a7f543ed2b9535b897fd0ddf881ca535763ec2167d979e216d3c67be5ca2472b347c4a2196db935c12deee25466b6cf93a3f5d95b490657aa8081366b2008ab0c0a290cdf5e769b38a9f50bce5699cb4d07d396e35b57272739640c3ad07f966c3700276c90f2db0b390a97bb9cfa99c1d233a97b58b9cd0e90d6e91e4725d95513eb10dfe37e630a65ee8fffc52cfaaa6efc7dae224a67dc320f5385907386f4f4bb3f38be02151ef09079768c101c7acae2fd5a9dd9d1054069496a088a934b38096c50f6757b986ff8310a36e3a0e0debcb5a42925ca608217925bcfdbc3063de72c202e00fe50fb464c5b4635b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008883ee257cdb12ab7a2c273a70f245a340967a7d907622e66ae51da8183f0bd579416833793a5c3f89dda4cdc3a56a8a5f133d70d3fde05cebd1d1bde1cf5682f22130af01cbd02e25fd318fdbb254fd002f60f20364fedff29bfa0011c95e4f65c6c4efe5d1ddae8fb943f561649b76c027b2d5893c3ca2c7a7aecb930cecadc9d6e7b4004e78aa6c9100e9372af67bf5cb4a2d5cc42da841580d5058373886338e49337b9310c6658a318fea19d71e7450df15277b4c526b8a828c952f541a2c067b55dc5a28102a68115c8bd49d15fa97f0f9f2b728fd6dd23ee9a01208691b001f3fed6da50690e2d708c4d3d5616b32da9c0510f401063559bde88825391c25f74142dce7ce3961d3a670b1e723f59128839f3d1f36504091692bbad1cb783d9a8171ca38f71e8af792608ccde50692662fe86c0cba102b52fe02ca9775346578123a258256723fd133312fc34fb5ecd11319db9fbaf0a4684d86162bb0c7ee1f1254c480f3046805297079e2698de855dd2c6daf1b9c976e1b24821e52de6b0c50a7804903306d49feb993142d24e7908ebbc7cc703dd6fbd9d93c9681d5d8a7d4873f54218f935b66c656f6fd891a1d8df0ef5b18028a1054a8aef08f0000022800000224000002200685cc69a566fc737565890b86f1505ef2a710ff767b032df9b5de12fe6f68c1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eef0fa370d23c402f5d45e5f039002443fc63879055026605a5d805f49db93ba80c42a982a0266e1eaa88e2330bd7f63d0b71e5d20db106dd4af4173da5bdcd70bee78336da93edbe8ecb238170503352e8eda9baa90a428831cdd412b97dbe081317f76c1921d9b8d76489217558c6a6d4d99f58cd5e7b10ac35293506bcc553f24daecda9692b50dcd50885c4108acac716dfcc04d89a16ec2d20c6c24453368e134c67a3f7f1068423aa46e1e3286ce96c730bb1e58cdca73ef801b471d90622464b964e5b480cbf6fd9a82abb86873f5a1b275bc5d0bcb7041e76d0b8a9d2897adb592b50f9ff802a6e39c92ce455d0090d9dd47e73028658ad243d4ef1c632542c74143ba21084d6d930503a22e7f5c7d0f6593e719c335133999f51afb8f9dc98aed6fa1a2fe8e686c481401344ebeabad3487a3c39da45edb5b76634c6b7e589616b15d6cc9a267abeddbb2cedc3ad17e9551fd961c5611b16a338f78334ec56861c2deb626429539872336c4562fe4c159e26a47a1e1b386e981d628bb2435de8fa672c19660ccfa08413d62e4a2556f5ee98bffe8b8782741112ad07e39420eec8405ac1d2da0ac8bc3017e23bba96139a1759e30fa3c2fda2de69000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020eaa96eb88a8bc428faaefb4cdb3bfdfeaddce68dbc787e8592c6c512a77be8c20d07eb6f20b89e4307a597996c2cf79539bf87d6f3bbde6733f5c0468f57381021121dad3bd7882a2c9498c3713b48a082c9c143d62beee698c8ec6370c973d251a44d5caf1a5cc825d3cecbd57a85b0fbab730dfa84f40fd19802595fb6c861000000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000acbe6891f813abf8bcd26c6b96a37da00879adcc24206915649e8b2f6b677eff6e21211d101dfce425616b7391ed943bb8343629f62cc7d44aa42fe744fc50839505ffcc526091207afd8ded25e525309fc25225e417128c93120bf31d9ac9df1fd9bb7f6e0cc91a46e114f3f011dc728087049ef0275378cab703e2bc80a061f2aca82d5a11ae449bb852e75383ee10ad09faa137b865b7155b40288bc1c679aa9fa7060d903b661d1ea84c04ad1b588b1d619e71b219b0a04a0099a17bbe215940ad5189fef0dd04c07ef737442e039c780eaeb19f9d36ded7c2aa514d178bf77f29352372de978bd44d682d0662fabd20dcf242cb42f20587021045b877adcb404dd60e3218f8fe1c8319150a796372734bf89ecaa0995fe689f91b605d1e70389f93afe81a9c71483fdde4b8972e27587f6469d36bc5758a4844ed630bca30a5bee90ab9c9640a5e4837694ac1b916d9650bd7bb968810e45b8286b49415edd5b6e8b4354c29f45b2aeac7449a32b4fa715fcf3202de30a30d3be2850c5ba330aa3e965380082917fb1d9323e9e371fdaf45887e469936a45e6e2137736e92cb62d0a2daf610d4145954f1776e3d5accedf9c3a92150a332a1137ee04bb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c86bdb5c68b6ce024413717db11603249ee7b392d1b6f49d5efb24206bda48c9829f730540e1b9f2e734326d6e6f8306a90dda7546057b37bdebd661af505770486b3f1c188944ab1142abcda8b34e0fe9538004fc7e1dc5d7d08b84625a5e3dba84d2cb174423dc98c9a99f8b1d303540f3f6f67a4ef834fc779becc254f00efdef993d6055eba0acfa56d72240cab12eb6a4ba26605af35d77c49060c162ffac25717749ec141386750ec091c589fc80de1ce6638ee1c0f935ec27c54055cd71aef67bdcdf7d054403f970a85c236d5992a440a2d4ea7fccc52c9a2a0b6a481a6dc6802855219a52573878e0ef9e9e10fe6d3a3c52aefa4815856f6d98b48b938b20c1c580f9b32f2eb4febcf54416653a30ae30b0930528704332eec6fb23f2c76878d947742208c8c7d280c63146df9996fb38c0eace1c84d945324fac0cbf98231c664840d5f46ca16a1f4eae98105763da3463f6dcc7d02837dd0586dbf2320621663b0bb37cfa14ee8489c80d9c29b16196b87bb4f62baff2c161da832424c776557a025a35cec6e7247401bc596bd4abd584a3c06b905f7d920bd35019fba25708f4c8dd18273d1f434d4fb75eb29958c2d6a1743671cd4c2618b2a000002280000022400000220185c5e22ff9f37dac2d3d0819f0bcbb26308473140b2a1ae3cffba1a3a17a4a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e2e8e1e81484ff653441b30e1924b77ea6c3319a1129bbc8ede2ad87eb1c24417096c9f3127cf510d4caa65f4c9e6dcfc9527ea7224b8dc0fe278106c241f00821d664aa699b02db42980cd68435351558b9d2b9db251121a49dc7db68cb8ee6e65d1fcda6bb1f7d78e7250f5c6557293abd754e26f5bb41c1352ec112d06d4f80f8c8fec54af5685cc2e2941d6cb44c6c9f7f4a6991738e6f2753d1e7e788132fb7dc561b0688ca18ea4a4d7202d165d2df43210ae6d4e15dfaa0008b85aa60c79ba46bfd860b677e2209b14e4c68359146df0b069eb946d439bc8a4e0b020c6dd81da816f18b48a1db1185be68abd33cdb7be707610b1a1379ba1d57a1d526a7bda7f4a8e943330f898eb26ddc933406bd7eef71d9e9b8a23a4d491ea5da4a89bce884eb0be1f476aab6c8351a3b00452313f8106d91189ec94e22e8ef041b7bea11437326ba69f9063cb4fdd91bc222dd9bce0396c4621cf492e6787a63fb0a8c101d821feb0ba819d093252d40e11758cb52b600a24702738a3a9f42aba785a692f3f07788446151ee8d3ef9b5fe58c307a44464e162b2c3d682d7cf631ac908f23879b67705af941e8efdcfcf13585afbb229abb124e7c4bbc1d8e8aae000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400123697e294d9eb40cc8fc3f670f271224c31a7b0ede7e063afda793071fa40f6a02118d666af5bc1a155eef840d708aac1fbe8c8a8379d30fb889abf8e069f1ef7622744486489a20b9c995d4ad85e6e702d6fd5d9cd6e8802036fc47cfed5b012e00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083692c43efba757dbb2603291ab4c190ccd058e3513cfadae198546aebb9fcba8ac94a4d8b91a2fdded95b68fa26e100e05ca2aeff8278a8d6b7b7b223139797e1f58450301ef4b863b3c901b32fcaf3c57c7282354684a694281340f4eb23df37b913b7fe2f62e96575cd7e56e358a519855217e522e83bcdb6528390cf446b39f15d3f32e822673fd965975691a7d1e1c6d1dbaefdb658c15a9827cc1688787757898241196618ea9d06f48b16c8925e267ea7511f09e1f8d9152e55af72dece6cf1e36f0eb84a54d2215ab19ab984f50304353534fc3f43511f98faf753f5908a99ff10c9edc19a43be32d0942c27434a8be6a8791dec9dc6c609d21400bbe6b359058c5011f5979ac383abcb754fe1bdca334f3d1a5be559d973aac041b65901edfbc68b252a309f3f564ed67d2b257e79b27b3b0f7ff3673d8378051cdfe0332b95b3f1dd5b014d2e730e77c3c3d860cf863a75063ed6eccf7cd78df71b100fa97c8261663a1780f8498b274c1adcc3c9690a70c7cef2f18edb141d5e1110dfb053c2895debf9194c9096b00adbd2dd9375c653b53d1c7eb5ae251159bebec63b4f2967aca3b3a7f86b56bfc1ed781b769467770306dff0ddfd9710bcc10000022800000224000002200309b790406b406fa0c2ab80d3545acc83a8dacb86fa2a6b36a481dcbef745d6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008add4816373c92b1f1c22bb363c8066726852cec0cbc6ab434ce47cd52ea29bac5709cea1f7b8b09c6f039e926a2687842128d5ff608446a1341692a6a7bf79716a06bfb3f0363868b4b081c8d90e8a451378e20370d1f44a8b95b166c41290643f45d1ad1363e36f45b41b77fe4d3aa0c5bcd17a7260408a4d54b3850431bc924abf0455628ce1f212b08c8e12a4d92057d3115dee123b63e4923f79fa3989ca2e35d80097f05caaa01fc7fd588ab16b69da1a63511a775fab241c82f58ef67bda23fb27ec2b4a266a97290acc0e451c9d07d8d7a8e398c68020bdd67596aa36daa930ee27bf83147099e6d3a95ad3bab54371e80aada24e329cbaa3ff891bf751166231d52f1be308c147c5ad07d2e40b869b2b38b9e4cd8fe72e9b56268c1c6ac8f182d9439dbaae03e8a19f81b179784f3ebfe149b2dc325c453960f0159211d7b6cb24f071c3d026e279cdd4fd7b8afac5350dceda0d465d1a664a67f005ac3bb680cad381dad596cbea1ce975998d66279a2978a754d10b8a2b5d2765f4e5676a4dfd11b8c0ba23b4ef0427f7d234765dd518c38de735ab09d106aec835091b45fd8bf20a5fe586b8dd976000e12956635901922b21844d4fe2f8914d9000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011b1dce861074d0e8b090fc39f5a12a140c74a42c733c4aca889576ba7427eaf10211ee42fc8d4d68b7cb1c7a584150bc45a7339e0999a60b16728d3a7313f2f80108e8fe4f86a9c4db73b93276bbaa517abd6fa0b40e836c910376d0ab051116d1000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6a45495955c3a08e6b9fd486fcaa9764f203a22027f169d63ea5433dbec6b73a1acea774ee0cd964a03a9ef74e3b7ce96645ead3854baf16a9ef5a663ac3968e697198960ecf4178df22d6d750e4d830879942f77adc715a65f22bfd691c3381ba6598834ac9c322d270944f3374b8e720775b1fa56575ef70cc521cf3b309a8ac63da50b3da5578be8371b21367c584f1e2840061a24ba505c50ff4c700ceca38172fde4375f0fd4d2dbd2ab9790f720a8169fe1ce62e358cba3969921cd64e9f9e5c3d842727285ce746eac4aba5e830996cc401b078f23d0fa8589cef9a27d1378d1fe06f37ab46586a0cbd79d5f2c23a3b390c51ea9f019d3680801d2ce0f0a0d55d6d6de22c337abec90e0414b8ab36c3fb10328cbdb4498aaf76cfcbaea59598ed6b31763b33d486d628852431507d3ef9f1e4ddad8f5b32265fae9d393ee21f6d041983c1bf36df0b05dfe84c425be92a45bc5c8fcd0dcfdc3681c7716928a274627070ea94347bbc7d4e1b6f485f10de2d23fb777f1cbf790f72767f2f0618b99904d59d593d704b8d680e147f73a26d1e0e9c0f486bffbd8497d4853cf6a66418cc02dc8c99e7c86008f847c104bfa1c1bfacdbf29a40fae5e71a500000228000002240000022004cdf8ca5af826eadc59e8f3f8cbf9d26e4dc3f6e5a647be26cb3af25b66b8260000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086f19b4ceb19da4ec79443731b0a7f3cb5c9ad0694776d793b2fc78027ba92096ff88b898dbaf7e975138792ae97b0f09251e07a2bb687ead801d2ecfbf2223fe1eb976cb1142ddafd87961c4670b7da195b2700bc84e39ef7929700c05bbad5c27c004ae2104a8d7c1b9e3e673cb1265f9b4a1235d6639990fa79b6bcab323c22b15dbbb5a1acabffabba6e93b787ae7a054ecb5f6ba12e675bec88283d6b585d74eb1beb827033cd586d6968097dde6dd6887efec9ace9dbffed49568fc18f7555c5a704ebd0b0e31c604ddbc4eb352a2a3447bc7e702a07bc4291cbaf0d5b1becd972dcf306f4917c6c19d5fccd0a825a11750a2b7fafebb73c6c19859768af38a7f0d0ad63a925b48c812177a966038dbf7d96bff9f99c1412c5bbef0ebe1d572920ebc337883048c65a9a8b333450a16eceacbee065ca482d01a2e3893e3f9da24d12d46e8b4b14c6164fa9d05528cf5d04255fa74995b7ceb3f6132ef81b8f9db6158fc2b0c36850bfcdf2983650ffae0b12b1f9b8117ef10aeca750dc72e3dc56222cc577fc6f865856c8afcaf3c609585395616dbfbd169e53e28a82f2812598a5d81ac2df8b4f782a1a71de5c4ebd94c7206cb629333dde31006e62000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020419ca9ffa01de71344a037e1636487f7154ccf7e55e4bc5d5ea214c6f40f56a152fb85a3c31f43777fe153c4a5e9531ab16c10a4f41b9806a02250b8e5d65ce02126d6ad9db965a7ae79ca9804354c2e6e43764908d7ddf0b86f4161191ebff4f1582baa2bf13741d93f5838e225eb4f2873be95939c5ea660a070a6fa335602300000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b193a6ac089945c037d4498e7875858bbdf915111d27387461793edde8d969f4f13a89cb266ca0db6470d287df7e6777347f2111f8a407605a2840b99cf225bfe06f9144d2b69624e8208a670c5d0992f9be2dd06a5d8491876798408b5342eba851900b3fb3acaa899e40c4f6747bd8bf176f42d5ddb3d08878a9a0d86fb25dcd70d823f31405f411e20f76adabd4ef98bfc15c74a54ef338509676c41e792d231efcd842517b988fba6da17f2f912c563361546055a355a3b6ead6389b522b87a265bcacfdb01a7a00b61d8897be07ec6c972bb451bbf258a62e770272a6744845bee8ec73db9de265112fb1e0902a7db84f69e4bd3413af289c6c3fd969036c759649d2d2fda520cb119a310ce5e3c1ac694cce9bd2a49bb071d7118f5eef9e7896c3eef170d0b3958e4acc250eee7ee046e298d683bdd2324fd88e216f4ece83bbe933ab07ac3e1a4ef8a015dce923e5a24f6e755ebe3aa9a082a9fee0a5b9bdf87f76e598be195e729c6156b302ae88952d1251b00401b4530e4f32409076506b32dddf5de19d6f306c3188faaf8230647ab0d669799639a409ee6d6d27dec60e46274d3d1c92329595847c8fa19b6058efb9b97deb843fcb3d8879b320000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000242e191586193ea27e20028c6e532c73f029fe4edb5af411df121bac68f8009329dd66ac4b8cc9f31c1e0c2602250b2f1ce47c0bbaeaecac00e99ac3e6ac1f1c6b8572e11ea72b46e7964d4c475e398e79d02f6465265154264c86826a6e1c6b2db09a37b5b09f40fae202f89301295ae79730348be92610a44fca6a88eee6fb29e4f173acd00332415cc53d841cf17f34238e9fb153348ba8f5b75954e7feea433d6e062b691dabdbd72d4d44f6408c1724434f0d2a1e395f30c5f876a79d1b49ffea8484e8c5c752f2900873ceccb2b727a20b4188005cdb5a7b4a8413beaff8a491c50269fad43c76bb8ac77ce700c71b4c2fd75967e27b70f81a67b446dfb5cca63d8179858ed1cedc483d13809fa82eca490dbbd748310f7984e6c16d14f4d7814e823722bc9e9265939d8e1dbcf4632004fffe358a0293674505418249e0176d9101a72b14db2de044f85645eca4aa2a31cebc19f5d0b37e45c3baf4324e07e3a4da8474055829f1ab0bf379657fb59da942c9d6be84b4479714b17bfdf118d87b24135242ba06c8cf0d8137d62fb7c9e34a388615a3230f2960fa8700137f8fe66debc274763556c67a017b01101d249f1a207f21c77313408d990517000002280000022400000220293d8e2d2412f97d9a1553347667ada56b023a9a8b7f08855063beaf43e3488300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afecc3fc238afa7c5766024716a98dc1ccaebfabda1017066e1ff6c4903763b37d28267ab96d6d12a9d25334271b6b4a277523abc384048e08c85090043075115963a49e0c18eebe476e4045119e2d80aab697dbfd958b5e6289b22d679166c9ef7642d2c9f3ed9827fe7cc4de4281aabf3f3794433247ab29ddb3bf023c76d4e8abcb5ad0d92e964f0f600bbcd07ef95da2ead0e751092630bd90da4a1e0230253d8eab583558df43aa34303b8d3e72cc8c11f980afb0bf2282f7d52cc2f41c19dfe4723b93d9c2f461fdf49ec1bc29d71f19ee2b3fb1176c3223518d39d9c115c15bc679d3f713cd1046a1611573cc9e9f685ad8ba764bab28d382ab6e23628148311584747644d2030f55000ea1a55ca5845edb758385ab3e172a9e97d877c93ac770c97d1728d1923d6ac13021128a39b0e487b124cc1ff3f7616d68de0ab774f6fadc46168c0b35f51eb484550125d68e213228ec650dfe3da74984b70fbb16ea02279e355392b0b0553df438c72d0fc78bfe983a5f7b5164a8642896aad71d55f0e9af63b0cb75c9d6cded79091c19b892c3a29058003ca4be3485b7b3097d9f276955b6ed0c03290095c1a14d4e8ecaaabba32717f440498685296180000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011a941c9657c87090483f7f0b59fbfe81b5cf389a5fb6f8d89271081c789a91000212e6aa93dfeaea0b6cbdf92eba2987a8f3106f96ad0c55791ab06c0a599378811dd5e9819683eda4c2384b077f2f47f1c33ea5be287a525fed5ee0e3cf9e278800000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093142bf6b4782b74b5d6d5301b92995b73559d60ac3d5d8dd411b8ce1326f4ccf8ef32a31906c02b722693cadce6fcca1ba0203d7e147ca19dd945876b572b35a5d2f823b3421f768e6111ab63127d16197d24696fd12b344d3ad5e1145680c89b6179bed292e2b7ba7d8652537be9adb7e66a633e40793116fa50cc6e6c102f4ec6ea8c4639f2901082395dd826d13a0c7cc3afd0f648962d39ed69a9845226378fba7d7d9a49af7fda1fc578af3b530f0259ee158b2fdb594e31b1f06ba64a2c4f4d8e04b626cc58c0e52bfa4257f42215d9f871f8ed19a5510692fa2ca49bd7b5d7c5179e957db90a78d82cfaae97fac172c35149aee17ba4481fe9f22e373e0f00a20e9eda6e632ad0a860aa7644e3e18d439b2af679fdf3bba3608309c4efc1f7a4a1585d97001b57e758b6f38e467cf3ef9e7964bc3e00e523c7d81a5286fbf612337642d33bfa5ae0d4c73463b906469d96a1e72f09c9dfead716c5956f332700de7103c7367f532eed3f9f2ff302b01cdb82d8c85feb895f0462abbe93e66f23639cacb349371e7579f4d0b91397daf1715e1fa5a16ffc67c9cafc30e8a128fb1a2537e21469dc9f4cdd4c67799adabaf2fdafdde0d744310a35aeb0000002280000022400000220280f8438957114c7530e81e26a8d4eb697ecc4f73f8a889418a5a189a2a5140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000172ffbcc192391bcf1be517d25a172a97fa7efa90191a7d17c241897667a7ffce9e29b3eb4b01878d06e811dc73e24a22f7f2333cd656849fa8f33c3fc38c5debe4f3df06d7b1efce855b688f75e8598d49a43c97b54ce614b3ab1841a9bc75b4df66c84a700a65e930a30e79bc2272f34910159f2a1e26d748752c14d21a1bccd49ce8c74a3987a236fcbac65855bd055069796e348bbd140f8d3b1db75f22ffc2de9f271528411a9b4150a7ff17bb5ffe12e9e2acf8dd18b2d28d4f0eedc5eee48d44c6535376d32c2fca20285ab179ee0d952fe2dd93389d43908cb76b540f2d5ef38f90d9090fd8dfec9be9600b7c3eeeaa9cb18ab5b2539f66c1207f4e88ffe5d9fa9f257cb5806c2b8f61185c8b158d58133e57e847c72a2d5874e5cb34c26fd806c006545593fea522857811d936a0afe54a3960e4b4e150cf183c337916f5744b6eeb08449ae963675775b4dc32c4a5d7d24876ccaf08550e895b6b2ae65cf1860cf3aefb5e5a9e662d26512adc10fe2825e8df2d8e301f10a027f96a061b78e070cc2dd124c08d092dd582db10c4afb6067dd11b967985186ccaf4cc55f9c2e0a725789f5d3479510d8bd26dbd62fa6889424741e32e5f794579d31000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010b377cfd2e99e2d928f0ed6c7c4fa19a7fb3e60fb73300a740bb0ee8933952c40217aa6c047eac36a9614734bc66d54d3a894ebf9c66a6a936166de3a0082e51b51f9787a36bf3f8aaa9964f638e4efe8967fe6c6801dd4169901a193b2ac1dd140000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d023abb0bc82b4963358e1841460a708ad0b24393c993949068af61c260d83ad95cab46072f2381e0678a5add54bde9f1ebca843238f10ea4e2ef5fe6bff7024437e2b2cde921d78b4f6cd760d00f6047c2b84064b881cbb2b5fb1bd8adee16957e94b10b3ad7bad0fef709ed5e29e678fea21724b0aaec47d470f52c5d6246d91f10dc1ced5756256f1a6e150000cc5533f2f36671d4d224f959161c6e1c032f8223e28bd5abfef9b8cc533292e395430aba5a914a25140536915fdb8a8382cc8a68cc16a83d666c60b569dd064b387c980387e26bdf9f06dce980abeb74757fe29c5ed92d79ac76e64f19b92a955d3614349e847fe529a20034ebd4deacc7b11491f498e018e828e55e4ebd1cd6438df7328f4d7ae086a15a330c0c4f4b522a30e5c16d1e9d42a0c6d06319f4d2c9882d0c6e270f67c892023a48bcd211f90a9d7e60b613d4e9f9c931fb2a1bddc367895061d35db246881c6ffb50487198d16dbcfde7ff090baa8f0d5ef42ca524e9bce91fe32debef834fe81b6a6b04fee232f972ac55d9daf51e1abd9cbe23b1eeb97ff4faa6e2f3e0e5d18889ae58d44a93fe36752b938844c7742e3c95e6d1fce6f9f1009afefcd655385b1949157e00000228000002240000022008e1014cc9d22a3e7790258016b1f70457dbee161ebfcd9c7ee43a8ea1eb7bc900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a570b8574ac2b54a0bb46eeba5e39e0ab2512e1e92120265306e784c725c29800005a33203945ab63b0e556e83523d482f6b502b2c67e8d314befd3ee97f873911b1e992e34cb1d7d890d7a53f8ea348beeb317cbdc87c75a179df6357b5fc949789e81578a4514ede9bad54c6ee70e5cc2012bdbf740a89155300efb45032cc1f46b84cd7afc6df498eb844d690f1e52a83f703f9bde5e3913d2c48955a935f2b824e527c97427be6ad10a123963ea0e584e251d059117178f88dee35767af5813f3cfe28a535c372a41502dd0891a9cf06d5120151270c6f15019239c4ca32d9e1111d41d7626510000028b81b197990d37d53ac74c889d8c2c3a9bee00f4aa41f74646f584d460cee1ac42444d4831acdf42fedb925e185baf9ba7e447801f6bdb7171c0e19a37de14f56b14c7449ac58d3ae27ddaf298ca3ec33b08f45fab75231b3aa5c47cb8c1bac766c44ec0fd8bf4524ab35adf9f5316cb19e22fa201d601781e7299883a47a9f80fe1bb6e49bc1906c9064ac3e617082153febc8594a8a0443bcf363e13a59a3790425ac7abef67068caa0f1f553e9c70958a5d54b338c076d2caf6c082260d9b73aeca5dda530c7c7196e9ae60b30e02a8dbf002d000000040000000000000000000000000000000000000000000000000000000000000000000bec47b002152164ccdfa363c9b51d5809a01ea663869054a6db00dd12c51db9698f848aa917422dcc212cd2c14a0efccb92e1de6d66bf8725d6cf4338579b851c9770b4c30217f2e47552bc8e3820a756f6ed8f8d6316bcc2ab02520412b4e9f5c3500b90142c0c264965867e99e9695c4374cb3bc3e68bb846efc3c4ec9e66323900642c2a00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084ed1a36a8b843e37bdcf29171e13e490d21c18fe713b43f9524aa8cdb80063c6918f2fa3b59b89b56e8406918606482aad01cdb5ffafd452d996b8342a3832bc4d3c97aeed03282f1b53542d4131a4279116f19230361c487b4f8809d51891023f9b5ea02f61e51a9b1ccce9ae1ceda5649d6274eef2fcbd5c5c5cc666a918721852eaff1626258bc8920738e0ca3bba56b6bae88b5b9cdce181123c7dd2549c3095bfdd7c5e253e6d7245a7e8b67fb61f26cd37a53d74d138990c7d8ca9fb66ebe8525d047c68579fc9f04e43502eec09941789758a8273be9f9073f881b3cdedfe98473d11e5fd5f870da2dc890605aa1f9f7a98d4da0f42b9afd4ad635e983fec729a9ba3eb3179f3c934695c19401994ea691099e51c0a488832fd0bd4852fc20f342c02a1c2665220db5594785d71d5b85231b42646d9d883e0b60165275b1669120c675169a6e95d6e4f2462743e5cbb6c92ccb904651d774b187293102ee84bb68080f6cba4ae9d3a5959f489dc050a10bd021d757e6bf0ccd160b4dcc04d9b582c85fa4e55d91cff8e51fd0f401f7b3bd950e33329f7814a389e96d87559c20785b4af9d9f4b40238152631aee62d94cac4fcf560d7cc2341ae190000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000167de5e782a8c3ab17f0db7ae822a60f1e8d6303ce57a163116cb9c0cfbf2a31d12099b997af844809a1113931566add3f5ce9252bc114ab710c5759fdcce66164468653891c2625b99398f7fc3019b8b8b534eaff78de639b49470deef20c41b8eb98ba7ac0826e5c51ec151c94fca6641186d48365d77aa600c5942f1a5a3123f61711b6e8221b71e77084b43cb87c327b8aecc29fcbe4328d771421fbac3f2203550351f1e946ac79997384c935461fc5a0a25e388f09ba0ba53809f0cd3c8e36cc0217251df028b58bc96b56ca3d4d28d7169ca3ea2169a411d6767fe437af187d61e84a2733f1f67ac58961082abdf407f355a8946e5944584a7ccaec5d637e980d17a01da4c022e5adaef07d3eba8f6528e1d44cae51659eba53d90b381389de0f667dcf505247ca27d6bbe4c845a6adc34af6510a7f6ddf3bf136158ee9a0e0b0ea68e18023263c30659ceb7d0649eafd3824a8e6e08992a7c024982cd3756c63e386e796231f34e660ba855114112fc8704cf85b18bd3770e37952e4f482cefcb24aad06183faadfd18e8a901db943babd1f7b47230abce62e8049ef21485d06621ba93edc0657d9317c96be6e57c3a9e10ad97a982cda17cad8523200000228000002240000022014fcdb56a79e2dc6aacdc5ef250dfd07c6122732e2e869378a36212c4232043200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5324a52c029e39bf01a5f8ae637c1398da76c6cfbf16f65239d146bba7c82756160ba77f37bcc3b07388be93a3babf8e15e35ec4786afc6c5c1c9d3e2cb2cbfad1f3d4025f3833953c9fd1ba85a6209a6a75c390b94974de7e6b4d4423bf89f17f09b2f045bf92009c8cd42b6598302d44e71e03d9cc4e948cb06a50df5eba4db292a2b19e90512d4c6c186c3bd3f742e87bbc1b761cdf366269434dbc386e31ff26519478d64d54148b35195c532b3019445601825c9d5effb841c7873d0366a94981ed5ddd18a8c797b2f6f6f2c3eb2f08f3e5ad646b769bfc93b0412a2c133a088d0488ee512c3354cc69cc207080daf5c4294eb9916ae0be36965d1b679d366a7542528c99078298a47f7be3a9584374a83b9146eed796837a6ffdee64b9a5bbd99f85b9a192682c71dc64cf1449b8e2e52ec0a3f1f09dd54c3262ee3def900bf627b5c33d3aebf8494bc6d6d3a7db1846508cd88d2f7bb7370ffa1f134781f30cac8b2c097715cc54b81d1756c3eed585e8378737a6798a3ef681d35b011f6ba702f1e7d7a937101f98bb5158b164971d904df4f13f20204d73c04cfa9f1103e86381815f4d6085aad55f7484e7c5f45c5014faf66304be2275658ba88000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001028e243caccb8f2af59d67850bdfac59a6618ae17939467fb94697b3049d3efb02185e1b92450517d72e858915432ef360338b7ba4d988f4321c3db3149183b3752a0ebb6a5cdcac81880d69c4dffb85b04911be2087da6849dab04d38978fbce30000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b33e7d5c7ae2e1d616f5f6d2205cc7f3eb7faedc8505e7c21b7ecfd8eedfae2266e35979f3540e8467df4d157835f4e6bcecea277ab7f26008768389adce813e533070cb66154c1604d556eb41d50dea3fb790731879b81fcefd0696d493cdc884d763fa280d366c02aefc96abcee7fdcb685c4f13205d431a9c8926c936e0f77f553d1b521127cbcd2f58523effe55721e5c1ec7e3173b93289c439cf6d8c1848c4309d999f873819c7cefb8c32a6e3575f5afbd0ebbfe9d24742eeb351a7d32a0e3ddc3649b101d5f5502fc20e6957e5290e836d5a26aefc3532ef9c1e05ae08cc4116a0413365371b38e867f0b2c3544f5d785b0fa6eb888b0b791a1df8ac963f5477baadc382d1392eef8eda843da0297d31ff596fbb8076696cdab0465572fc744ba14c52172093dc9e19b80bc72c28fa8c10489199454c0b24fbfe61a4c35b36567684592cf58844348d16c7c1ac5674abc74d9778a1fdf95c3762b4027b58f4565ed3532237d6a9fcdf1d2abc88e87e4556363c8a80ff550dda7eb8b7494485d733dbecc64e2ef044d4f33031d19dd33688a246c84446dfdc65c76d841b81d33609240f17308a9af5148d57b106fe6b2a98a3d7c65e077b0aedd9d2c0000022800000224000002201a5ae5b49b1fca851d2cdabab7c262ad4dba97f90951b0b30a81622b36c192e50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082f41e002a9f260da32aaecbc1a35ae3020d2e53c8088959691dfc928191d710100cc30d3f48c81d759aac940181887b5609e70a0dd241f6a3b820478822d100f451abd3018a2785a0483dc89e527679bab0aaf20dfef475bdd475bd8709e850ffb7f1bbf18a7436fb8e897a29b43991696d97c8d09fb54e4e27d45d451886763b18f54b011d886608638f56e27d685386f5377635d5fbbe568137cab9e473f0f64967e249a04547b92d97f4543e932d74356b166f49e98b92f35d2a0c3d66fd2412d7402e5bcf6d458df7b7ac112f1aa7a18385e09df2a1616680d2ba4ca2940178403bbc10b63184398fbc775222d82b74e9dbb6ad021a9482b35c8885567a03604489c4e75a34382746b30046e3087fdfce7501fef9c8aaa3bebb326ee3ca58fd766776965849f0bb0e428a26e3d6cf539ef36dd7b696ef8839ba64b3572dd62df2a19b82b6a9fbe6af422bdc27bdae9a9d2258c003c54b901fad6a343dcfaaaf93406276f1bb0f331397e4d0f1231afbc36fa661247fe16cd208ce2dd26b7fb8c108a47b382877ddfd2888b81fca09761709f7338918b7596fdc85ef2d5ce9c46e89f98ae4e682464097c2dc9ce39038daabe0dd3a8aeb1e23978ea58dfa000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012ef20e00ccb49ca7d375071d29d31a2b593769b30e19ab1134c244d7ce97a997021a866a7cbe1125b68c39eb4155b7989f315c57d67850f1e7b4148d0bcfa3cff31e7d35d7ed7f76d89d40ad0b9ea12646fdbb6747ab57ad8d59afeae092a08bfd0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a4aba406b341036f799c01a5635c82c1627fe3e45c74ac8b73b87f3b3392e8cb0eb0c52fa844c689f3ef32bcc846085fd0b3a87e4a21096da63eddb6e238e7c9eafa660210a865821e783cea47759c638b572ae1bea93ff7ff856efdda474bcb0bc8864765a13367725386e36d568bc976a4335305b8c77e8ae8a9bed3289472cf19ed9f5392d69a0855a45eef2483b726f71372a450bfea30cadab47a9743238247599df6d09a5e3370fb22875416fb507a5ee1e97717155db6cc71ecfd691a5968e4b53faaf7d1c5908a7b331da1663b7bf8ccbfd9efead28c70c64f73fe9e83d692aecd9a0df13be1dd53d56e2c37fc95d8511d0755305ce2afe438b1d707971398958b1ec6e567401e730345dc940bdd4d010f150d81eca3e37605536a34d982c8ae086d96e1412fdd9719b20d079568dc34b6816e31105003413f400183d6a2219108c4bcf395ad467667dd77f5da8efe7324205ed0188d2a8ec2b366f2742900c0b1d9f4a6eaa6df1ff05fcab3693f8c1333036c10f03863ff6033c395a5acd434eea1ee7a3e8dbf90aae36775c18f5d38db0d90fbd13ef0acefa26b7c123e8f74b6568385edea978d6c9893bb0430083ae328b30f1b2d196a630d2ea00000228000002240000022022d7ec51fd092a05227d09756a747e7c04a419b6dc5e40a06558afe12566d4550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015ba46a8703333d4690eaed0c347b1041a0c75ffb8a59569f3809688ae43646bc78c1eed7671e808b423125179781bcaeed1871c3c50eb05ce47a1f1082841d7635721d1d019c13c58ca49678fe686baefd016a3aebcbfc0026a5bd0abe8d9e7457f6cfc2b02e67cddd1fa1bc494a7013fcc447c62ba91618a8080545c216cf7f68d26061eafee8446dd60741405625b1d4e4767647151103ea8234c294dc5e96cc7a59563763dc853666a0c54f200af474f83dadbd98c0f19604dc82e77c674b85ae58909a074b8cb05dd3cb314326f45d2efcf70955d0c6e5df104f74187389105d4c6e72c1573d7254bafbdac0e1aca04551cbf3acc53a5955210abaa3126715285a4d85b2fc3320b88f976851c6bcd8cc819630a4064e8c64046c59182f2658214963e6b7fe87f9f8880f0e4ca5bddb27ec1f49e45cf7f79bd32a765059d9eac3f13f60e5513b8351637cc27b4508e84c3d9ce4c5de9411a903dd25efd2f868c4d42e53679e19f356430f768576a929eb13ef79ddc9f2740fd551eac6e4f6ba68c73bf7eb1dd5844d72901d1844cb74c798dfb65fba1a01f51d0a7cf5a22910660df82b682873b96231896b47e87d8fc26a3d6081e85e9588d9df28c3ea4000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012411c669869ee66b5d4a8d9b070e07be2b17f9ce15caee24486677bfab074e7b021b5031b2f81bac416f4cb560e7aafba98a1417a0d96ed414f9cbbdc733f7e5c72304b09721a561ea012db920badd671117a8607997a6861f3071bda31522a6df00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004f4206bf9f6ec58da98477a75155850192d3e42b44aa12b221329990d22c115e350485514eef20e44dda29ba42196988d563e562a8a8410a1186a7e31c7f1a23d6eca5b7bb5f192b51a9ed366c785ec82fb7c7d47007336ed28fdafd6d14b56f62e55d46717659f6d44d17e532f2309eb4c7fe456a4de271322bd04d7703e81ee5f1acb6c65829d5ebe935127b854a3eda60d82fe2ba0ee8333d6912cdc6560c18c84224a7644df17af1095e1042fd518ffaa36dda5163ca0c986f90e62f376d121f2637d0eb9954b30aa342cacccdde15614f776478f2e93de67f6fc7fddcd35fc83070ed835067c7c80bbfd789692042c6041a21cb1bdabd167e0b1495152f18deefd7236ef589f6f56ba039e04f27119aed33a7371604b1ef54aa3d6a9730ea721a60e1fcf7cd6505bd9f967a121d68423435a802903613886df1ec04102352197187aecf2469f4ad073b0e1160de3bcbd9838c0ad7ddb0e1cb094d746216e9deb64227d55eafe55e63b57e3938c679ba1458fa12bebda85c60243b55a654ad9c22ed596ba0e8f953be5b266cc5df62028808141d58d5207a5a2911a95548633e873f26e3013aba16918c9a2be98d0a4adae2a9f18f1bec7caa236de16500000022800000224000002200e905011616492b8b27648aa3647744a181bf42f082b9f2f27d7d6e8469a18ce00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9c64aedf446bbc1abf19c54755685a8d54e32a53c280cfc97cf4268254de64e80983f36b3d8de27996f82e1b1d81b60aacbdf1b7bb3c9e9ac36411a5620c8904f279f25ef10a61eda08d6361455912477455ea6477b279785ca3cbf89ab65e77782d02db3607d5162e49d40d54d7f3444cf6801d3ace3e1cd9c0fceec9aa0881709cd1d8bdcea258bff3f97671f1648572f38fd7425db1110158d6a38237790ee3dd8b09390e12005f315daac63eb57a7f845e61ccd8d3ccb61c4a46aacd7fae7cbba044bb5bc7ea07667c332de70dc5cdc0015152c8e5753dfd6c762efe7e1f6c423580bbfdc995f289deff925ae221990c7e8dcd42830a01f1895eca193dc06fa2c0c2910856033d13e17897fc567bc449431ee5ccb33b4cea845af84fede97eac7a89f353e3b9cd3eafd2ef5b60772835076e65511dca236c0c1a303d20ec9bd39ad6d8e09404cee6f91d5e46ad11cf2d56c83927cfe7d8abdce7bdb11892293e0ec5c77a33bbd4340ceecf23d8eb8b2c16c5d0c54e77a627c537909029a02cdd3d8a719a3910e2aa7219abcddda75cb007baae2ac2c9588b553c4559d245fcca824184e8895c8de0382ce155a1a84f063c583d507a895b34a0f9aa90f72000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011cfe343e5f16b4cdf6896c268f2accc73b923589b8f4653b7467d18a3928588f02276a334c0f0d29e63c1c63cf5b9d0ce68f0df3b35f94e615655b75b439d1e9330535bb398ce6311b3104ae6f52f131effe9e798563b16525f826e08f7e5b991f0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b394d35baa302a3b93a5009ef14707a3f2833ba8fa0ab7e0d01c16ce7841f2dbaebbc0ae84e507f6b94c21bc1c667dd03aebec64a46446dee070fd36a5bcb63232fa945b5cea628f8718459a691233a3d83c39ce248fbce93dde45a583a3c1b0196d515b25508f7648e67ec59e403be2dd27f8f5f09ea97abaecdd8cd96e7adb31e65f2cad932083ebe0ed7470337566efa8484a0f35c173913312020d81e678e88ffe9e58ea9e4fd1a32891b49a8757b3baecaac490e064e11c8452bc4c47eb8c0edd8e047605448eaeeed891fb8f0dd7238b2ab3fc95c7312ab1f31742bba0f33570424326d90bdb0b7cd4517d7044f0d6d7e1d60f111348e48d2a206ef39f8daee46c47e754f340d6953ab4a83ad50b2a1961bfb6bb2a927ed5c400eb840854385280870c6a66556dd03224917e9d0607b4ed14c149fd3b904b38c7af75abd9639f3f0f5636e825e2cb02f0fa225df3812e81d7e9bcce09e8ad86af6211181fbe1975b75d001339fb3b14b21189c6217ae71d0775af422a489fe8f6e48380150dd56da79378f68df6f415371797fca603f528cd5a116824a75afcc2a348bb5a69793d1ec6b409b19d99415f48298998ee800cfd8dca4561ea4aa4d33d50200000228000002240000022019722e85515933d1cd8e98311dc7c1745e3cfac4e586df6ed858769c9dea708b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008553754ee5caa5c3a0c71ae2bc91154a059af54c4d155a37e27462476eceb7f2f45f1fc561e3cd24790343952e8c669559dbaddaac7739040b0f1abc4705781ebfc3bf8c4e39ad950de2cdf55f8f488a9ebc18c030d6a5bb6c5fd1157222ab29949994a18b2d2155e113617ce929df212e3260e277122bb50e13e3d01c57565eaaafaeea15fd06c3c537598a0d9262c387b4f78a99e8ade957b58fc90aa16893f302fb16761652a5cc10aa279b3097761f1fc77b150cf931c6ca9a927a09ab3a7e30b05da4eaa07fd2dbfb73cde361da6d71384033a9e130587734ecbad4542f54d610a4f2acf69680cd27e601cd56001a828acc9e91f3c5b20666b6f38ea9dec158dd48c28222dcbc67e100db88bed77a11ea7d839d41ac8593df3bcddbe30ed56b21cd57f2ccb68016e255dbe49d7470f5a64800f41b14abd4d95b958e31ec3b2ffa6d1375147349e8da31289495053d704169f84a916813c1b86ea3d615cbf38d87efe4fbe589ac662a9e88def77df073c7f06553879cc42e49ed933b9ece499c97d035ebdb6418ff309b0cd2b09c2d33d5a772f91a946f859093fe593b80b71b2ce594e47526b2eb71ca7bbf7e961609d0986ccfe5f20c0ca566c64089f8000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012ad992ac45ecd04659acdf0ab1cf9a07a329ae176237b6befae9850bc1a97b4c02279600e367c3351cb6e3087a37dc3e0a577fe672c8edbc045ba973d320d911f009dc0127b49c417329c08a1211490eba23401b8c42146e06add2bd60ac837f9500000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086369528837d7ed5aa6bc24bab4d3f0ef55e4293b086a605758759a70d359ebb30b7c559b9f6e918d4c9ecd4fe461aa0b4305e33664b91c661f27c5feeadd942fcabf991c4925a778ed2efe5ae783fbe78dc3d88368bdd7c6fab76998eaf2d128285087c86ff3a7ea445187914dff81df8f6a8494a7e8e8ddfc066cb8dcb113160a55de0a0580bf390d1146e9d730edb96c224e3a04c42134c9eb4cd80771b88e83078c8f18de61c6a74df7db4fa9c180d8ebe1108323e0344acf39a488f02339416c5d114d42bb4badc70e6c956bd31f9d9a05257cebdcaef73856df60d29c56f03b196bd70dec74d72375afb29ec126da2d6cca0c4a68c461dad7dd93de5d95f3c7ea5f94909b8a2b50257a4ac40bee50e2f88f9195913bb84d3b92d082e99d782078192b61d912319a5853cb5560056074d1e8ceb5e96b131fe16a16b071a8a95bad5e938ad40b0cb074bf0f96b5191ce0e5e76dfc88b793322f04d34b40b739963528ae99e71de08e585381fd8c5f42017d3328cc2918e7f590cd5449d47e6d74ca0bb1811a086bbc3e19df16104b9214b5dec77874cbc7e031712780de466b0833eac852153d50292fbfb3e55eec126b0fc629b4ea0740c67244c0936e20000022800000224000002201575df16df6c7f267b838f024383444430669b6507993bcbfc19456b1630df7a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fa1431ba2192c13104308c574e35f9f8d7932c1297a88a48ee642cb94efb10825dea869f5d25b12a97d331f64857d341a6d0028f9aff5f166c69b9c7f77efd62f2038888607f1a74bc96be6e6d14655159bf19623329a4001c4497e25ccf6bed4fe254c8b1bf198cdab00761e419baee79ed3ec44203f83d25d912410746e3fb99ef00c9a95a76335a7e95fa590ea26a034c0ce03c02768fafc8b31180bc7d467723735b95a57f9b04bd93392b3cd1c817d33330f8bde1a101e4e3e5aa351bac80d5e363c18e71193a49307206a28066efec0bccba9ea13c73250ddadb440fd4fd8757c39f93c985d3c1a5b32671f870db898d007927727d4628c92d2962337839d0ecea4d089b34ce852004671ce48574ec2d30940a7c8c3050060375c548b1964cce666c09db3a188ae9917aa9c78e897a10e6804ce1175f783471d70be2eaed721360fe9fe8a42ad93c8049100acf4612573624ecf785277daca1d39df723b27a00ed5841e42ee87a97a6c5fed71d23b928947cc988016da082b50e4bef253cafeebeac744d89bd41df945a14f6884e0069af6b271963bdd22e52ea07959eef2decf4fec36beaa7d8193bf0a1add1d31c13adb035c3af1e2883485adeb74000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010be7a75b8c04a2bc5cb19219ca122c00aebe985531a2a8c940eb97359fc3da45022a06fcd094d14f0d7a705f57da696d6070ca8aee1b2b007fd8a72c8753efcdca02ef742abfd3b4400f6a84f380ec10d3c45bea0773120eadcc1fdc4bb4c9f6f900000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016472f7d9b9063842d2b761ab00cbce3e49e031d62e905339e936aeba718db17640597bbb6e7c1d40db872d4eebb5ff909951ea656ee13ed579d404301a442f027ea6a8bd709d34cc4daac1d6cd7e213fec74ed68c30eb1bde0023fa683408324de956007f7f5504a469d894b4ae1fef5fa227aaaceb9f0ea85c7327201a84e443d7f1e7a2ee23c743669e4d9db9a8239045d4075f56af3642d42be81f361840c5b6800a6baa3c6c280c2cd90fb8bb11f6fb671259b3b9215bd77d4a00e4c8ea9b7f9d3cdf29487f66f32fcb339ca3cd731b0dc2c5a746345ba30af8cc4c65fda417d6443881b30987c5bd331425ba5645682f778aaa6905a25ab9dd26ca90eca6e808009bbf05295632c0eac0a149a260931858221d1e65900afba3222e0520dff26c26731c98a3a11f4cdabe8035d61377dad26b7abfdd4b4b4d4ac9e4d6130bf32bbfed1c8a0b562c785ff1e6258200a7cd0e7c39e188de10a7598a832c7432f94a8df061c7994446ef15d61be72a3d223b8886503f9e95883c269d20f509e64c475f8b8244b03e81e4b757739bd0e46a9adf87a4fb336b2355c0bec5605b4fa8cee16da1b54a036e5e0dc748bfda3123e85b4d8aa5adef3bb872c46856bd000002280000022400000220126584ebeb8c550b97f33c758bdbc6e606ce1e69e3fa902f296d1d6dad62f990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e56bf67ef83f815bc5c991c261637f9c08ac190e2124953044f22c7ddce21e324dc1f88ac2211b54d0b3ffe17c116be54d5f64d74d17c5d67afbee8b9044be86bb534d1a22d7acaaa5bd4a97f9318fd7dec5227c24b509f6703c9c8a807fb25ea5d0db2bf979365cdcde57e294de13d144b3845e76818c7fc1291bfeab354fa7c868612564db0386d784a9d92b7743d9fb27ebef78bb02b35dafe8f381b57054358b9b236270fba1bbce3158da9a68b60b377f3e0c890589a55dd2a80b832f40fab156d04e0d3bcccc4c49d87f39e814121ae33bd7de185383cf4814272272e3b2a79494a1309851f0fb340d26e2d4eaf5d2c86aeaaf583f19c4fb7b667e53367c01428814c594aa6a50e245b1fba7755ecf40006f102b3376f0f3d9c1514f09a5d52aeead7d37d79c131082b23a4a4f34b52d0ca90463fac085e3453107c2e29e12782606ab1a63f8e7699e2c682df603ce60d61446e67ca07f9c6600c570231c8cc9d44871b973559a9c1e3d61a9f86b51940c4a64ef4899cf23d6897c13ce37fd5330d91ed849991577fcd413a94a74ab02bd0528d78ca2b1bbc34ba5861c35ae764d4bf47ca86d1778937bd1d3146aee449dcc1d9d2a6146912ce89e352000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001284b86d172ad448d3cebfcbd5c471a182b316772b38398fc890bb2807199d0dc022a1991c9b551017cf7ca8c7039606635ffc15465a1fa53db9aae3a3fbf1dde862e4c35c1973126766b74e472e8d8d0e3770e2a795ae61cd4b9dc7bd7f8fc35cc000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a697a66d11615ac5442a7d7ff6ae7a1553802ac20956329e7156859ebcc48d8436ca6b0b535c8c575d7ae6769fc3774bf3d27055c028d97db10909483f6ce82788283b25dcfbe99b2cce67fdd296db6ad6daf66b83e40ce3cb9ca4129de8b907043c40f03643b7686731518335be87ab7dc5c2a1168dd5015121fce5c0565e9aad0402752471e97aa63095b4d86db443565b7ce076ee894891411a3bbc6dc0cee0f4b7a129b60a2fcdfa96085bae48ecade59fc90ea53e00c252c0b3cb48edabeddaef1576b286c5129d47340f89deb5400a771e98ae0d2621770a84007872618af7c74e2846f828cd8ee2d2838429c710fdb0e427aea6b1865a12e2ecac744a638387999d9a4a9da36cb50eacea94f2be2050a534100ce8233e0430eca52fb4fb2392fc4ffd94e0f0ed614208b2794d5a1af5fdcf640b6cc5b767618ce58fcd92a7359bfc4dae58389865573e3310e4d546dedfa24b87e1c6b915f87e87c88428e1f1c7a7b823d121d51f067d90ae5537c5bd0d031a9aec6676cd8f6a976f318e7bea9b09df41cb03b4b15e0d465249566e5e0dda747adc56f29ed58253e7e3e35293d7bfcd0f21ce5393af186946cf54e61696b04daed0b5fa1f432270139c0000022800000224000002200dc721068c3bbf69e96532fbf411a3efd1ca14fcde899277bce0aec457622bd60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081ac5f6a0abeec44b7619c079c30f9010298d5d3647daec8d1038a4de920b158c4bf941d2d9c3b13e27ecb6c9dbb1adcd3ab87de1fa6e8822ab92b9d84990b44804f7c95c14afbe24c5778d3fe52eea1767662442bb297a815a1bbc5e89e38099dc081aed5cafaf160ad433f043691f2491ad0221558540747abd037d6368c24006f336c69292af3ca66cf28d3cc489058f25fbbf37b876abdbd0d6ca36c038ceb188364fd6a423837be02833cb9d63c309c70becb8d3dd8fd06c6a6974a47c00a144524b51ac54ed8d5be1ac5d215c290c886d6fb9ecf75bf227c440bcebe9c1a1374be77c5699d1e98b809105dd437b91bb2c4794cdb1b4b36ebb1e1597b38f013cda967c1b57623a68f373872ecdfc9e149850a2816b339dc62fb07939d91ff09a840a3bb5521f0fab3420b4637a78bb1d0fde926f604de32ba5ed16836159dffd9c0092b979182973fe6cbba68be6309b65a40671896497bb13520afe6bb96e0af6619351d600709a81cda471a68efe4b3873f138caff6e3d1a99a2adc1a2597445c87b8eecc4ef195c5d61a38476c9735fadb46122761bb50a54f9333f67ed02d38aad214ca5dc682e260911179388963eafbf065a345da95f223eada13000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400106cb03274567636a4ca06f83d7b8ce6faf7f02a6c53fccb5ebe5d61012e5a0b3022a4ac23cb3a55df59a84942668c7a907b3e4b687337613de8d41655a428c7f5024fa074499c0ee538f66a3defb4c4b74c8106c66802186f7491158b32ea6f0390000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002618057d2a1dec5c603a14a9dad587f5545f917ae6874d0f713c424b66c862dc85b08f509eb7d1109261f87fe03a50a7c800cf4eb3c4e0220ac4435cc3e6f3ec7a49fec21ba692956fec9c275b5baad1db9e40ef19bf674335ada6e8fb19e622d5de6c016a195fee9b66f376e20ba9514bd3a6180ead87f28df4f89d611d986bd9dc89def5dfc7701489ffc09b91d5977c4f356ac5e367dd063f861a72a138beb342d1321de6a37e9fe7023ce4e5606cb92d6db1d44cca188c5adb026660a1e6cdbfe96bba1de978b50b43ad9b1b4baec6918ef8f436157f0b55d534bc2077dc64c5935b322f2a3937abe878d211eb190c80e97ded503bd16592aa185d3066ab5d925dd32074b459baddac8d727916ed794f3525b3d5f8dd19dfa23d86d6eceb2cc7e7d95d0a1d553ca5210cadf8bb01bc2e307b91378f0ed2dd86fa6809e241c1887b98c6b0a679a04edce6a98ea2710eba68322f163ffd7035e90de92ae65830d1fe90b694f74eb538899aa5b2da34544adb124800125a77de6ac995539a916e46f5b25f2af899d4618fedfef03b35e5781a3ad2d7976d722989a00346d1d142bf5e2758a6264db96aea2baefdf946387fe357d73fca6e9db5f0aeae0f375a00000228000002240000022015ad97340b99a5dc95f389b64e7418fbedb3b0a94178ea2497971fcf4a7cfa8d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001607703d00d24139e5a5c8726560f2084b6aefd09c34670a81bfe0cf461ed9401f940f924b62e40849e8f801ef85e76b017c35d6e46dd9beac66faa73711ccddf14e6ac28c4a14fed11119e0f5d8ceadb548a4f28cc5c466b2de4334fece8e95616edcfcf1aad1511cbf6a3d42b9936b63c19330e15c4be36a5ecb0a56f8352e77ad6c91cac9fb5cf32761961f303f2ad4d40862491ccfa82939cb6b920f13f66481154606fb42c66ae5a825e5ad18acc65f9f47c53b04359411a8adbde0c9e859eb797bb4206c0a137431dbce29014ef87d59bfbfc7dcf41f4048210220a484372f7dfb40b438b837957803b897d536e94696fd678b0c26e5133cf3eda805713d91f0df4bbac2ddb1bf8810fe79c18ea9e276235c1fea1037386578b2586eefe9988a721994ffc55f213e6174514f3c4489c13302b953277e45c0e19831867bec929ef9fd248c8f38aac7d130403d4ce1a5872e13c36f26db3883bb8e478c4a8e08d1d77823840147320ad30b5126b18bf27d42e9d8e112837f4399b6782a496b29021e85369467e292d960365471edef5f4331e30a0867a7016ef7f6d8a6d1a5fa24046760c2a123c636a40a441ac907f2391371bbd25956a33c5bc47f95c6000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0022b91d08b7b43ec5981bdbe57f3c848d2521b1d70b6902d88a35b6d54c2edab2628dcb4668b4d1892c0c919ac9cede7f5381c51216eeb6417307d2ed0b4304d54022d547ba82d32b3974b9f053442d89cffb37d097e4cda225e8f5179f1e7bdf7892040beaa67037291ef1c0372d67877a6b46d9c847cb4b906b2d7130286ef713b00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0491a0827e716b780f85d805e081afba0806e45fc9f70c46780618ac87d202737cd6219911a4ffd922cd9615a8e6dfef865f0fe37343b898ea027ebb6acc7772cbb27b594195181c2dc4e2e90e316e268415c2158bd3e7f21c986ccdea468e1bbbeab2a09e6217e6d81b1fbfda9fe41daa2c57d633964d273a084d2fd69ac1dffd096c4083e4deba6c83d6885a7e06b26d9122257f316b86fb0993251a1a17e30192cd9ca5fb484b408d2284ec7cd00fa0ee8f6a32592dd1051f50a4b7cfa0587b5b5863dd9e211160d2ee203b491693e8facd268abbecf6003a43e3e3b5ed909703d164d80f234015c73707057740bc42d7e79500412afc1de6d2d6fe827003bb9041ea43d46a7940daccdb33c2a93b0cd2714eb2f0868b2a2cad72ffc69e90d07b20f87f0d0a7ef1040cb6967a1b49b9c9d2c562ebda96e94e2aabab07de12d1f78bb9cf86d45f5cdea486703b1acbe5cea00903d92be2f85bbe76b3d8dd5a2d319eaa313c1ea99a4f07afc381e5e95b896db57e765269fb0ee7d3c5d426df571af4c74fd0bc5ba662d6b4f9ac78accc8fa1b9cca2ab994cb97f746d974d0bed30a29dd1136688f720e2931ca10db08442b8893fe1e9079ad1e74f0aca9800000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810764072873d970f00c27b0a4cb4cd19a64d8815044a4791fdf95d7115c8b2e288600293c79714d2779f8f9438cd63d66e03d7db0c5326f702327ff3a14906b06239ab4c17d4d5121a2eae0f6da1c89812bb5f9dd592ecf9dcd6ebeb6c16351881407533b424b2a0a46431d64ea815c677042e9ae57c27f5a4566c7762b897f8b1f7d749ee8d65716c7fe1c73db168dea72771bb7456f8e0472d99e4f2af3cd6d692fd0b53c583749f4f9412d51f06f9e58ba0ad3cc9b575bc5f2113ae2e5f326ac147f80858610b2cc2cc05466ff86bd62f7e829e916eaef4a7247b4af8bb7fea2a9d606ce9ee56300194aa416bd7b0195abfa02ad6de3e8160ba6cc302080b87df427f3468f0f9fc58b29bc3aaf20614509a9149fe26bef1860d215feb6698ef7f2b7825d7263dbf6b9cacbbe74370bd1547a7d63da21f557556a1ee607431a583348f36f9f44f68768d869fecf3838c1aadccb6a0b5fd6e927af49b33623e29b4fae46df4b3f711ca95657f51ffe74ca15758e38f8f3abe5b06f87705cc2f6be9b89f69b85798a969996bf38924e1dd266a3a04221425c6a71368f3a96f83a7c2b3b007968920bc79b54dd3a816fc3ae4f5684dbfb0cee64b6db605ec367000002280000022400000220295a93cd9e11bd67e4159fa5363660cb57d81b84bf18f689c723a82b7af7047f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa52b7d73c8e38ec6088febb3d868b0b9e6b78d7c959fafe2659e333508303c6f1569c96d3f756e9b7f82c178e62fb93f1fd9e7eb3c842de2adfc82df3d733723753634f407b0381b98025ae7a224f6a291670dff02dd798eaeb8770132743af1e9b69f7060d879827af1c515e943544fe675d07021951a729b0773f7f077ac40b587ace568c440dc5b841889bd918753ebea8f1b8ea0c26f70c1fe2061ea6a8edbd5f058b2e4e678e06ac9422a55352f2b650fe2ad944b99f3d96353ecf450679759e53b55c01b6f63642a63a9225790f2aaae17f0e88d8e1e8dffda24a2bc5252fbccb893d2702a92c2be3f79a34deef63a3ed6f2ce5c8d9a5d21b46b7dde5111cd25d1c7c100630424bdd26128c73de36c83a11980a0eb3e853f7f9f37841d383b90d6490389ba18ff02368adfe02658a6fc93fce30ae6ef3135a75f3da7ce1c0f57ba5586ed2688922e4e85b439c0068e59fdd9721411f193ee1edbebb6af62007eca698be24356d09a69f14bbff047b9620e7d1d2ebaed39c38f861737e00117b3bcc90228f0913128071d0aadd332601e1ec5c9b8dcb8a2bbe60dd90b119b4933cbff5d5965dd9e70b5c1a48ecd95b411e7e597f67df5522588ecb0e61000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0022b2b8e693d57c9e085d935ae689e760c78b9ce43fce3e680bed66d2eeb0a5c3608e10e7687a748cd3a1525ccef39cb84d0c7f769751162b1d7d3bb77a50103de022ec0d9f91890a660ef335182bfc29ed92adbe52798ab7f542547d9992d660fc1245d53d6ea497310d59f7c6d3e7144b00d4abbf4d0202521aaa7804f18be5c1100000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1492581b178fc6af5ae21d1621dd455d8f8aae043b9194b1f952c9fb4d79bc63597c4c9657d44957743f61995ab0d98f9ffb86257f02e2a6a074b45fa5ad8b19b065d56df0a2b6f9cb1911d854657ee9cd1194b95671f0563b9275b5af2df759528371aba731ef86cee803052e34656f1db41da45c887d963067c7388d5b592e8192e40ca028c8bd1d5e18b577ec6c1aac6b02563017b3a2ae0358e1c8c7d128f69e802d8a5bd9a73f1eaf98fda9cd027e840419a9b0becdb6c272bd2ae3728b397b185262a3ba468be49ccee00868dded29a7eb1592d537cea8d1b6ab8e8d1c9b0172db77a568657a7461e4954c6699389de11a1c82b61b3882a2a27ff6a07f1b490acde88493f2b121a9a8f39c5980c5a2a998d279f2f2d59e83829484aa70ea20230c9b5e04e6212b53ba929a0929b9e945c29963f738d64ae8f1a0319e2f533fe95538f2e95d3cbf1d506973326c58519d518e92aab38147a7c8a80c25aa7389de6518aa209fd50ca4536c5566dc2150fa4c3d73e425237253813866a1e1aa885c6c145cd272bdc953db6eb44dcbe61be9737a536c91f539473b0d200ccd6dd8d4d9f5e8b49a8aa74327d771669e9637eacc4b5286b16eb7e5dabb1c5be0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a58cb9a5ada8fb492436ac9557c38f52c2ccd7e31a23f01f77ce943f794a18816a59596f815d61eacb89a22915263ef01c434d6ca427508f6bd45b7e295679906eebaae822cbe5c22cc82e6b8ae6e2ca0fd4a471329717ed99715419706d80d97f775f6ddfd884e2dd8dc89523790c0f81c8cfd9c0f2bf2c9ba3730a0a82c5a41acfa9953a08fbd55f272936096c11083bda19bf24ad7c18695d51e1c24d38801b2799f0861eb74856af9d3050593ecaf3dc462ac2a9951db1f490ad3a6c16d333a5ba2c6a0e418c8888c7755c50cbd3ea8f22b8f6f15ad32a1770f7862e52f750b49c9b79e72e4f3a556229bfbc08f4a95909716351fa5e990d2c4ab7b5021cafcfd56ebdcaf2fb3185e98aa6d4e0cf4c1793be9c421844487883056fb39dd5ab233bc3e2797e5472afd442150397ff089bed74c51957b246890df606ee6ae6e5263430110ab2b2c2ca6030e103591c9182d52c5b482b86274876587c9e57841f9a33e0bba4a1e6b47cda6d1fde88334fcaa3f637b0b744a6981086c33767fd98d83c8b71e57f14f734f5e34eb0e04158dd53f5fd7293c1761a32fe444840388cb30d6639716ac63725d3c9f2f7e4b91c39a7a473e797571987bc312d479bf200000228000002240000022015c16e65f1d85705b8b9e322324fe214b74e64af00e9f77f2802b11ef272164e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002372c654e1c1776dde0f4b6c20ad553f840bf118053da4cb8c059f2ed161fac0838b8843a3267d93cc9cc775c3add193669844e49db077ef1c6a51fd8c5edec380a398b51ef5ec677af57b1a0ba686d4f20fd580cc25421fed83ddca72dc7ee0d80cb04c79336ad109b628f2a94fff261bfb8b622b53e1e56ccd172f233b3a91d9341f5f1e002d4b9bb9c58601799a20bcd0b409dc481bdf3fbbbe94060eac6776d58081acafe7921a72454e3df22f6424bcd6dd27768ba0d4bdd8dcc6f6ab5285c98dc2c7bd8615d8ae3255ea4fed6a308677deb1dc6e0b3310a017f83984ff55f2d84a03058f8c18af6939ed62f019c61571a72450570e3e4b270a4458a0bd90aae0e1f2dd1f5a38124e34f581acd5f6a10b0354e20e153157413b2e1e034ba16458b96d05468c4df9b20886f926d25db4dfc330a65e8dc22b4145769c78cadeb5170be89125d86cccefad9a39136cb662e01b7e39cd45c5b74354657c5f6daea2349d9f425955e10b47aa8b6bf32f9a6c714bae083e26b842de794cc8e092d7137656660524a703058c1c4d9a1c8d617b537cdae37bddf33593759a85e715ff43f581c17e36c1284f92496293cdde209a595e4cf585e43bc02caa83aa863d000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400108140112b7a3666d39b4cd72824ac202682468d337f5cee9d217c6d79939fb39022f0ad4ad6ca3f7f2958b296d751b21530d287977c66e621eb43e18e1843cb50e060f143d0b3d42c6bf83898175db103cb06bce737713addf436b3e3cd6172a580000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003038b428afef1546d2160af0da1fbe070ee730014da06c3de013f0247c483b49beb860fc6317698f9159d6717ee01490b9b3ebbdd41f71175d3c22ee77d3bab4dc9228442296f7f2cd332ffcd56d092bd333defa735eefa93d394416b4f2033536385f68bb13f4bcc5e66b46f6b24ffdd057c081905921a1485b9c23e5cd48dc3513ba9e0eb052f2251ea3e800526c965d1b230e3dd48091f3124c137a4405c8bf2c64f8d0bafd9a311b1197144e3b8a666e26e906b78030a7ff3f92699745d77c57f5eff6cc24bec1963e14dc5ce9e57f97a2ef8d44bf918f90749634f66e92f35fa38cc0bb14805f6ad141a3f6b1c7516542020648d661419e6047efe25226b39ac52d360a751b754adbdcba6854788ca9712f780f5a00247aa80fa51da814baf5971f6a755cf3ab97db09d23e4910bb82be89f59ec8dcb63e8075fe3ae67f4ba310137362c82915912f273ba53b5bbba68880d20fe0d665ce1f839c481caf791477211c8ba569394899023b332eb5386f4a18de8ec756c9b64eea40d8d5e3841df9763c7c3ed19e7b6aec0e905e672589ff2212ed22b069d51b7cf5a4a430e73eecabe718623c0ff5b9f93dff11beb318d2c424f4e05f60a27c6c8bb703070000022800000224000002200abb8c4a0016d436a4026824a867ec1b8bc2a87fbe09477cc6fb3f10ed07175e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cb9585a9e81ce230403756f0ce534c5e62546b4bdae8524b92870326a3998afbc94c56d96dcfe2878b2a26ca30bfd5fbfc6e359313df048b8a603ffd0bd1897436f74c94600fc0d2f14a78b31a3518c3287cb16282fb0161dd9999c86811f29c7e98f51374d67b768a998412b590dcf47801c211e14193f84978b79c8cc0fa64d235aa1a17926f5ba88e452faa5bc375388c2fc1663ed3b50e9a1435e1d54b92234971d99573c1a23115efb876138cca4721f66721ef83f49dcb7c3cb42e550fa0f7579b496f9d692f735aa06887a53991f8f60a8f4381da88b0a88de0906307d0a63f59770790cfd250c8c348176ad8bb112aad5d1c281dfde6db4080f615f1b0e409a2e26243270a861ceb4ad3142264d76b52d0ad719b0439c8199c34fe2059a7dbeac9fd71b48b3d174e04540b2624565e4615114f4d6c8107ebba1451adcfbb38afa9c4ea4499187214b428afbe780158b861527f6105298ba740d60e2a239178d2b6e266c67ab552dc1cde40c0eac1b2d27fa73505acd0882c0f6689655bac5ffbdb4c8a1caace7e9703bc0bb02a36992e1d73d4c8f155b08251fbf35e47344dce605bd1a1cdc0ce71693cec2f83ede066937579d772b3e791a9cef150000000400000000", + "302b23faba9ae13e65bcc18b98ad3010fab8a195f85fc1f33fbb02c4a1a314290000000f000000000000000000000000000000000000000000000000000000000000002400314d07723100f223131ef60763c3a37267a260a53dbe4f1dde5901c07f6e8700089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000f00f41c29dbe5abe950a6c6a131f5b0b3314d0cf7eabf2813a060b06a83a987cf20000540004d1219c9924deb8261e20f8b9328ccc7df30601e0ab43a5ae2a5e3851d805fd000054800825bed0f04513688a20a73113b41d525a804966b3e35ccf0894be7867dd9f59000054800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000070dbdacc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad35c5602b547601172d909d17552d9f9481617e2b6b2d07aebc1916e81f7d6a78eb1b800000000f0000002400000000000000000000000000000000000000000000000000000000000bec1d40010b4bbb4f9ba5ea9596a4acd5db5f4a4ca0aed936e90bf1d1ed5f87d9fc1a7a8002001a79d01772125058a18f32b7f82a2bf6c4026ea53747cb910d4b9fffd1f93304cd77943f247039f32c4614c44ca80e2c586fb368430ec09fa8e548e8fc121400000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d4950c79c84e10ef3e5dd71c541d4c9ab1adcb3d508ae1765c41f1b06404c7d4c7535cfd40a048aaa95cff7f2af1879f9e93676bdb3d3b43243eeadef39150ad55d19ba7ddd2e3ed3f1f8a2bafd7fb3edfd4b240d9f97aa31c21e3c86f307dc759bd150b602d0d156c372928180fc759f7e7a98d767407bc8d01a9c5a04e0f2d4fec84095c4c137653ee18d786a72eebc4dac3169d4eb5a8b04438745785825bea4ac1fe1aa8b09692a82ad7327c049bf1dd438c22fac7a76ab0192b8cc2d8b09e21e381e896a6c546108bbe3b729bb9bd6bce7dac4e171e58aa2ff1babe0fd3b2ab11c4e251100030e4f8c3993c9e5acb5570db33ea0702bd928ed4d8775219160e5d85254b3c5ecb607972a0fb5b2aecd17aa6dad371aa4ade3291cc2e517b3cb05dbe3c33cbb044e632ae6c631120e283d2a2430a7d62ba325d37e4a24fbbab4bf6a55a3f4112300492c9839fb3c3beae1fcac9a9715d7e38dc48602b8ff38f982eb380b4548212841e2283266cbcf1ef09306db2803ae2041840ae2750904f50616aa8411eadfebc2ad89a55b3c2610ed78074a76000ea1b309da829fdce1f2e86673b6bc7ed017c9cf6e6113a7e3043ebb0713737905e3ad473baf659000002280000022400000220063cae0aa5a20ad1636e4a6e8f5ccc5838abf440054463ca28172d85e94ffad7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d2926997422cdeadca4ef4d0445aab95415db66afc38dfb32d7933369ad4d3efd01cc24d0273edaf3c535de3affc6afa1d7e7134829223db7c40c4ec3eeff063ec4664cb1a0fb913bde00fa0a052ee74c935ec1926472e5cfb134d583fc58349b91259159296b5e263b06d059e0bf5328b90703b4506fe0c3bbdd5243f335357c3004ac4f5fc8e18c5bd35ca447e712c8db3c0e646980793fdfc665b3243066301493032fc588c98888f05264545265157956ec37319ff09f5ba112603f076f529a6fa080ce5dd79916a6550b487f1498ab9db92d697f3bcac75377ccc7a98dc1e10c427a5aaeedccf1feddaddf22a4f7b79c01acca7b65235db8b03e62cce1928a6477202ab3a4db05a935f1f0af5a5359c19b8833d2515dee1fb4ea0c542111af072b9a99907a3b5a0d102e7661ea9483c52ff33d62c1c2fd42917ea626c662556a70cc4a08e9481f137d522751c4df2c0e0ce4c7e36ed496610bacd669d49dae8b8a31e9823a8dc77f0676678b12c37baa64d392ef267ec932c17311fb6d3ee72bf572fbeb8dcd9dce89f6923c2e481b0471f21976bcc581fa0b74bef569500dc9f327a762eb486ccdd71b57bf82e264a7d79d7b0e5b23b47bd061dd917c000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0022fce59aeae8c1e5a1c16a98ef2d1d74ca3b8ae9feabefd020036094b61bea8de2fdaeafebc131bb08df98e5831b9cb8a5d9570d53ee5282e55367e0cb31afdf50200a76ea2115f8f305b70d4fc890770f50506eb46760cb297dd9ffd5ec8bca0bf187bfbef2e03187f18d6b6762d169cda5b4a9ebbbe6ed94648c11193da4582c400000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f38924b048fa145fdf5e1642e38239eef7d6e1e71f6e4eb977a2c784505358c58dd13ea737c1c98f69acc80ea6c7c7fe97c508481c79810b9ebc6d4509f1aefd2c28c9654cf3587f3d5619f7e3ba8a963fe94dca5264cd692fb79be553bb8f3a4be691b7dd0ea469e020cf789aede5799e4f55f04000a903476d87621dbf827bcad5b3d15b23a1e747a19678243761351b336601b4eda54629768ffd6c9182b77360ff5e644e6fa9fac1d8b13bb904095aae623f20f82b0cbd83eb601d4eb23dd58df40b4be40750cfb7722494ecb1075a59917e21ed73472dc2faa7db7fdb2fce8e7af72250002300d9c421a56c12f1c06675741efc393e5798a050964795f1803230ce39b5e87e3590ac18af4d52d3e73abc850718f063765e6e8994833050ac9e3b03d0b1474a347bf48ba8d0778bc8ea4b3f0f35d06f6634edd8667d03628954424eaf9b63bffd89d4f0616c5507067fc7dfbd4c83ffa627975d8a02595fd223838d9d1a9be579671828c3d6efc7dc33b98f57a8c70a00b68740a21a6ee32dc85750c5eabfe0dd7603742579b395288f9aec4bac3405154c4b2e7b5c4c5ffd77313a1b2d825679b2f027c8ead5e6d8b726737f3fc039288bb5f56c81c21000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003884c594c641121653b8774255be5ced67e9f33d1d64ac21302eac221c3f23c85358b195e288a2c6848610ec541b75698a193ea9205e0aa031ce5eb93bfbfd9ba22a814faa26ce2cb42d44346eb9ca3648d3b8674bce1a82f1ff25db8029fe70ca5932cc62af9df8e78a93ca978917829ab4defda3bbe277ab90bb9835f13ea731577096da775988e45cf6fdae0e68ebe8a46f0128c5ae71a5f5f65f21cb2c77f215ae08b73919c119cb79236b40812a53b929503d492bdc1e8405c5e08643508004aeee095cba3fc1be2c90700135ea6d06debc217222904d7173ab18ee7a4763374f1878ee866be3ec472585466bb10f0cf9b4bc75e8a3a0403c82a2a51ca7a7b61a7cb4349c09b713533d9b97b239ab6942eddab8d38196a1ed120b90600c0988f6e259242f8e23bb8156fc7cf519520bac3d9a50bdfdf1e11a784112bb4db85520e31f0ff777881b61d60edc4ce262015b01e9bfd3d896ce480f689f2863a0892e10281e0c8cd606f96e1784575154564558d058284d6db2bc171a2518daaa5395114904a953df0177f04cdb8f9ae01dea783b56b8e4d167f72f4cb826e4e97bc5398337ed2d854533be05ca15beae64023819ee17085dff60e069b22550000022800000224000002201c7d81e05b0bf7bfaaa5ad3134047878171e61e9a5911b853ce9ba844c9eeab600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f45cfc7852d5441ba239e47e0cd23014596c26bc30a9943c77f71d2e7cd7893a917dfcdf2be1cc63aa1846f850f3ddc787c0d73ded9c9e1647793c6deb194dfad03da0ecb7f18b7c19445d8655f44edb8d10964596fb0f3f686c3cf0e6d2cbd989a3513589fbdb3ac6dd2d7df0ceec367ad1f3c66ec4c06fb69f29c8e4241d101b97f298d424a308a035dc8dc8caab87aab52ff17b44cf889a3818c4dadd829e01c080a59775b308e274102b7bfaf597c508db721190cf621ab80805a475408010784ba5ddd0020674ccea18cb670cc8fd3ce2ec2b69e020173819f7ae793e1157bcc02ad7c424408ad744a43d9e9936c26418bbe84026d46de289dd75ec410270c4fb917559bce494f9c395dabc546700289bb91ef9ee1e0f2124196f5ab8993fc2d02c6ebeddcbb2992414b9098bfcbfccc15e9185bfb86a297e02ec7163e18fdef85bb766a869a8764dc1bb976b7742466cb79bdff4d9b2829ba8ca65b3ef0ab766b2f00d46e752ff961fa3a5e2609266e833a6449b1dcabf972e2a5cb48e4c903ef26a6fb9321a02f53eca8353c0579c5cf92807f7d25618e4e8ec376c7a3d3c41dc4f686c740e02c8f24706e067fba58c2bd46c4b715c63e63bf1a2e000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400117edb9ea4da17b4518ed68832fa317ef010b6e8f88521ba21c64544e4090b9bc0200b4e0e7058ccb4c8cd331a9399ef1be8c350641dcbeb7ce05eb842ce31a5f4e21194f08a1ae407001b012472422a4a3ccf5234153773ed9881d6a4734a3d875000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2097068da86dd1cfe64c28aa55ee1b551232850140659cc6820c64bac495d56f7793aeded42a0badd2305216f23996a7205ad1c90abaf50f88635a55ecd591a2b01462be84863f3e814b5fa9e016daff29aa4298302ffc11e45f701dd8b9f7e19979456ca87300eeac69d6cc606513bf0a720555b642a930b58790e94cbb804de1e573efa2884f93f43193294d8a6cf7ad4a053907c04809f1c25677e9ea38b998382e9ff6f9b791fa522f7bdab10f3b7cae31cc1eb55a30fd59086a3e5ea6b2109899a12022b8d36162c36d39f02fceea22a016795696c31b7cd28ea63f33b4662ee86932e15b48f46e93ce38fa8a69512d83fec5987b2a01e2a228e4c20b999807014155d602dd5663b24d2e3c493a468eedfc5042fe3d2cd264b40f2bca72b4542a62baae41c174c6b87ad36aa0de5776823efd1e0cb80f86a7c2249fbe1e5fc242b860404baab16c5638bfbf7fd78acf6583f504e4ae85b6b44e7df0bc7897c14eb755559e23d0fc8fc8993ee238d7f39110aa0fb62acf2f73fc5fea0b67929fb540589cf2e217759b7a05278cadbe26cf2db737f827ab0c1b5f9583c2cf4ba9c40ce3d59ff8b17cf5598f93fc0c3afe79a6e91590fb159943d43fde10000022800000224000002200f56cef35f4bd23741d34d31140f678cbbbc0ad9ee81a65b90e7ba5ec64c6f050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017c9fe93b9006e11c763c66ee8ab60c646cd923392986668b12e581bf8cb49036e14cc2ea0005169e80363453b547036b28ab2609e151cc0f1c06725ee3a8c620b57846471a5e60d527a9febcdf2a6d5dc16e30538bc950e11c12ec443aea2dc86e8939f682b9d8f6e31a06f2cb23c60b6aecebcdba592c4fda4f29840a1e2009c5be05bd89085d17e1972d2cbd9249cd1b6007e8abff90d3053d86697f3108acebd9b72d614b3558da8085ec736c0e7fba712d1e833f3d49346cf3f7977823dcaf69bb50753ca7a5da90f5352f055ab7701d91ef9f54cb61bcaa00111a5e2e702dc583d569dd868655bfcefe266ab7f3087bbaad30ac4126c15885c159039335d890ab0cd5d0de92dbdc6d782bff234f19b053a3e143d981fb4ff7713fecdfde35a261e790aa97ed4febc640fb93366b292c05a19a955bafb4216eb4b0d07d2bb3919f6dfae8b8ccfbdf0689fb0f08b0a0e80d72177a7cd3c088e45e5b8c1cab6d90b85bef161e33ff33573bddeca7c4273753b6e6871337e5b5c2fc6c2bdbd665e17aab1f2b39abbf9b3cd92b8e75016ddaea29364e84de9e25e6ac384df397f4644cf982042d9a809adf21088769b10d710def7d27cff3b3f922acbde730c000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010796b764d89ea7469073f750ac311e525386fdba088a266a4668290a24e8f2d802026118e5f0107065ff7f2ca07bfe8e9508959ac9b71f651d65193d4602a6193b134ee0d10235f1e9f446f7679d4d018ae689e45b5ea44d6116f2a92586029b4e0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc6087d5324bb6c51b10d8c5af74b352de28997c262e0926a072cd0d80a8431677b06f1baf58172d0aaf011ce8267e335854a84dd6706703e3177df8d6a702deac954fd614fe6b1dbbe0dc24ccdc22c41b14fb748a88be60efa0897d5dc55ea9b75c9a193ae2fd4b9c5341c9ab187683c3a753025c8fbbe57574a615c69c43395f4c6c7cc4af4d85e78ad0bf41fdc81b090fd03c9b64db51cc6b8b1e7108d3521593355bdf012bd1978d1e51e3df098830c40429b051160b79f936a45cbb842d8f406301f8bca083ad3512ac09be96d1da7bb2dcbf810bc88144a17b990ab5c3dae6294364f6031f8825c911ba877b2f1cd2e267c00f346c2ecfbcc90dd9b6e08cf7e8b6e0dd6fb94b9b56ebdaa70917a54fb09c99cbe78d41839814dd638d0ab9c5d36b2ab8f95f9208c8ab9aa431dcb1083199ae3a8aac2641f7287ad1769372d71328a96230b6b2549b2e0a74bbc677247a7d30f7bab24abd8776de5a8ff58fd560a260aecd0008a50c36012a558823a81f4fef36fba9af75a6b85d8c42f5fcecc88b0cfdcb9cc2eb175fd2eb5b362c012087a54d67b3a3cb90077081df9f1ad4c625e6fa68669845b104bce683ec966e05b1a5bfb0688c684c3d43d44ce0000022800000224000002202ef4a86aa94b4c5a91d360da62346d9ec88f08e2bdf3f8aedc593edf99621a28000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ef91ff53851d967209891653ff028248f92eb7e0df04687790689ce403b16d9ed59dd85b2243c858e5bdf968a3c3c8319a9734be41a5f70fe131a04a940daf5387df43bdfb30e87a401c62061c8cbac10a6248f2bca76a29f6384d186ecab7a1ace52ab807176c220686ee92123b6d4da4edccfd413a2b493fb9337b39c650841d07bcee80c646f5c4c83057bb9a58d5e3683cb96ef6222ddf3612f57244699d67013fcc74229566988e6f1c845ea315f3ffef0366b6ecd28992cc4535319d4f5e61892b56f13a2f1f2f2b8d017a8f4a570dac7e92c6393ed2c7cd3fc008bb2b96f5d45ad63d4322bfb847fa205065515a8835cb2cdedca37cf2cd8798b3711b9e5122316e8c9dcb7919e937c8d258278681b39e1e39a4675a02003f8c6d9c71bfa90931eb146620366a3b41f48e557ea0db714baeec25ce69a06d3bce5eea147b61652835d4c3badbdef58b82d9e91a14f7f6e98f85e20a79fc7df9b0960533346cdbb5fb3a908765ae10ad84e7e72f413c31942ee463d3d66a8c8b6aa2ccee961efff74f002829d8df09fca3a9f87e00157dbac73caa2617c0a15a954d3349dbd49a1b2445e969e058b9c9a73e28d7ed010ead124bb6665c9ffe48f3ceeb6000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00217e04ed49df825e8a195720b568df1345f3d73eab23de90762ea0cf145ac664d2d63c1562f11563c7cb6586020a3c2d9d8623e87d25e7398b166a0d7007b63c402032bad36b6eb9ae58f3d8ed7b95e6a1eeefba7940b6c8b5fa4be2fd52adc8cdd1145e560dbe68e180125dcf109ed75fd10d06f871b101b25aafb56527fc8fec900000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001919ab6105c8c210d7507c2daf73eff2269456dd23c9b433b500f372cf166a7e9a13355d8f561b615e7ed17c3b6e7afe2a42669a539f902923689e2cc38ac26f0678e7631e48537217592f13da09725594f46455e82e5df882e5fe5f78e3951f0f21b301622e3b7b46d45aeb64ff9574766cc2c6bef51830933550ba4c143d2e1c3085d39626c575d38e9663703c100fc6bbd9d67c15ff128c1c1476c33d54de948927f173019e7df53465825ab72de69e079fd84dbb754772c7ef48d2c2c90a2460635fe7864f193573ec4974f28595ae49a323f14aac815bc9d7cb8f04800e0e0be8940d40e21d870260ee0c42404f0dda03c492548798f6176d0b8cf6b5727ef070de30fb1d6e0c88ab2f13df0fa575d8702bbd19994d1dfec30aa15af5d68cb0b09b370dca8f2a7fd17f869c527a816446824241767d5126943ea07d1c0862767f09eda09c2f7bcd7c23f55d040ceb82346bdb99b8d2a2bce2a10c9f227ee69521d17f1a4e1bf15dddc2d460fed844ee48687c0711b59226494ed0b95be6673fe63b22ebeeb151985dab3bac71af0300516cbabe44f71b40e6580af7fbd8b2edb9f27ce1d051662aacf6818d69a045e1d8000e3ff195fa5e791f427acb8e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a399b8419f74332579c03c14cb4e930bc34383dd2feeb76b4ca785df2aaa10413a80f21efbce85daf365800e70a9fedce92619478e06e78d7f5cbe0c2d763bacbfc74e2421ecee87be0e54c1367cb8adee4269272fca46b7e60dacb386473c1461209ef81b8420e0d7f23dcddb134cc09060834cde28f6057e1e02f4c598559b8f74e294acae5932b3bddc01c8be394a8a9a753c9a908d22d099f9393f5f758a3ea76e146f95804d01f7592efb5053cc251e435f3a9a0806544d256c87622ac98e815d94a5f6535092edfe4730464ae1136539cb5297d71b9aab0ab0e71260e4e68410f8429ee58e5740a708d5148be1498523b634099090c016f71739593a9dd50835684e175199dab107e431eb313af79dead692c4577f272b9f5a6abcc5b3795b778c43c65265921543cbe454bf07125634994db58690917555bc60a7d57d9a070757c0de533f6787b7388a7659b49cb7021a247c82b32966f7fe982c99c675d29b3ca0685ee73b4208f44fb3a90dadda43d64cc2a67268044830fe678374b6ec57f0770ca1142813bc97f720699a56f83648d33e2d4f91ebf4de2d5d07008b26ece64ff1b99714d23bf61335474273cb1c9800a81617dcb31f2f7261d390000022800000224000002200422dbae64fa7f1c08ab8b14526e7793dc09ce16e6f9eb9a72041b9677143d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c3b9b51e02ce274df4d8a939ccdb54eae00f93db0ff4b11cd20af7181a5d9593e21c8add7c4b782ebcb921b5f64f0694cf3ca39b21ae5867b6fb41893d60be4df4e832bd729a0a6e9fead3a1f30c4cc7d4a8e3a84c47579fda458875efe0019be4d52fc89d69ebf64399c8ba2b6097172a925a9ca881d8a7f2da7e451fb67084fe504bb5db71fb0513c0d659261a3a69fec1b3358bc9aec95a87ea08087c76652b99fffc40e4490fb2dee85c7f34523b0041304921f041b9dd0d7fb89c5d1f523c6a02d22bc10777cc2448b0696b2126e58610fe9c97960291172c106fd5ce662a396468be7899ec5a5628bc7b1a41c0cf31c45693b6f5bea33bae52a14d0e058308c57d7f7e8aaeff02d762bf7a08556b2e1d1d949ba89b298a50bc729e28ca23d9debbc7eba44a010320e80a9ccd806675ab95fc6c2f4ec4de2048ce0635f054ac514f4c6f31a35a160341ca8718db8f7062b4ed824b4f781c514dc31febfdf4aecefc9a10a663d5c8e5327a098e19b59f0dfc9f1ac215ab9f347042595d9b924acefa572abe7d435a897684a3dc9e297bb51ef1b68f655b4e47a10748485e8062999e77a7293716597144762edfd5823ceeeb294f40655fb644ec99d80b1000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010ddd9ad4f4428a937591908ca1a193f1f71d5d409758405cd94464af16cfe5230203efb91c6c751f7108ce76f3b2725f048eacadd19537b191555f036bd872b0fc04e1cc2f239e4ea6590c4e7afa592757e0f099ca1798f159c6abe5b9b4faa918000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae4e88de1813d6add72b128c8d7a24805757bcb42a45bea8b7abb1d43736560a489bf968b4b067e439421c22f8d239afbda81e1fbf49e1e63c05ed9bfc9dca69176b99f9ad8bcc07d765b8f3e2fe7b769307fe8d8d5e6a2bf340a07c75abd5c5c099ad878a39f5b0628352346e115dceea08e43b26ac7fd159c6a0b206d96ba3f197cbec4c0181ac6a8743c226e472ce30be42180782abb3461c79ca9d48346c562c16c119e707ce300d0a27ed3f055aab2d5380aa8f1c45e0ef28ff2d9148b3476e668a76d7967a84dd62cfa267979327a28ceb352834db82177a4c8a37a2cb1ae7e973f53aec2de2909a4f1e177c3e2a04efbf862dcfb771e81545a768e8efbac94753046682249eb39902467b608a6869343de8b370d0d7b8071e860c5f23b21ca3a5621f47e3b36263e6bdf638b6828bae010e38cd4b0f7b863c08d6a193da32c170cadb6c13db9b92050dcd52602552e3877287d374e3aabd3072d7a68a8d4c4cb95a69375a269c9add084df526f12edb84e942462d5bc2c16be15f9c37edeea93c4dd1ab62e8bcb52f926fdd6278aad4bedd6407427312c9843f3177d62746b7f084ef75b096dbeaa19d0151a62283a23ab1b7c97fd490e502f59742dc0000022800000224000002202f0f8232f459d0a0e8053d7ff432b3277726c18e683ea74e70a775fa3239d38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae3ac950ebc15ed41a7cb346ab31188d28b0c5c6975c836e090dc0a7e0c5ddd5afcde60cc97cef41fd06583f2db125a400fdd7d6a91da4eaf762a8cd583889e984390bc5b02d91c985bd4f91dfe8836d4a32bcbca719fe29b613b1b7c433e201d4e24dd79a7be13e14f7b0e0a458fed4d47ee5657da49519e685c8785cdea4f2360440e952a44cf576299d90cd58360d74cd39742cc165167ea2b716cb8e83d01d3d508779054409db110e1c2c2f0fc66e9eb22cc65a985c0871267bcb2836497230553f2fced4b38456b33cca87cb35ed0c895d4b91f4dad011061b75de0de48d016f1e35916bc7e996308e693beb27b571d81466a7e754ab721e792402e045206750742313594bb6d0d386fa4eaa14e5f472b189a9c67d798e71f7749f17fa555a578de19f22ff00559f132e448c62a865be2e1019531f82e6d1d70d0cf4663b6a630b36efd9726b4f6f24ae46225e394026e91501395b163a066dd89d4925f4bfdd8ed31f9382b68bb8f01d0b46939510b606115fef00f19518209ba7ac8ca49aeeaa42d62695ef920a3431b3e013c07e19deb9a3ccf931226361d076db6548e54127bc1c30785f93fe0b5f7ad988a8ba5077e53ac72a71ca3560820218d2000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011874ffc2c8016a729316eb25929fc7f7d5753acab651e245b00e0c6c8798dc340205624e4c008b33e1445559f425170e2bc40ea1bcbe88af75ad5453c48833d80f06d714626e3de130adf15e0df089241a40325f7118dbbd320a421cd5e2a9efde00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f38715d43e7a2f436d47dd475455706705f2efebe621e838581bf70952e19a7666ea506bfa7bbb231bfc1573d408cdd51b5f37e6d1d0ad5a4b0f101a05d92327d4a4f3263db2331d7f029312c784a840322db6d3414b620955f625abd41825b1d5b6a9e28e270670d75593f19b2063ed809e2965d45a2be07dc7b6d0eb5f5006e529ddc987ddc8cde3c95bce114eeb38b5df9e38dba23ab8de423569845271d088760beafc66a326ca1576cbc908bc25ce3279955b1265485db659e91490de81188bd22d7b5a834a011a7fa2df81189171bd6d411380c89078dab6475a63f11ba04a0bd196e40e88e57edaba45a8bb731c5e8e51dc565b15493cad1becfc69181f5843b108335ab0b470e0b650fb2feb8bfb8a0d0918b40eaca123d22ba9a0909f3f39b0d078541b384962499f0947eee28b1610fbbdd198c93d0ae8e54c79abf634a2b8d70d668f10ed310eadc44e322a679a9142eb9e5dd6e3d582afc2c507da921d31d748990199d75c5f5b6729d78ab43d813aa8cd43c8bcb2a964c40e0a203c32015aff987acf905c891468a09e1f364dddd41c9dfddd116c174c881c6a055feed63dec277415a311ec98eb44c7f9bb4d122d50f3d986d254dc1d08fa00000228000002240000022016961ae679f9a2c2f276423377f7bcf54378ce33814a26f545bac3dbf7465436000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000967a89cab98bef7fe981cd388a08e40e360e8e3140c10cf206c671106bfa53d199aa5197207ee53a488e999514f5f9278b0bc1888516e1b127c6489f149c7b63cc6e3d29c59cfc2b4cc4940aa170bc1966fcb21dbf7fdea2dac1116c15ce4f9f1d90bd9c61d9ad23b668320293afb9ab323497f1402034272f90a694d4415db55cfefc8a57b87c3ff610a91c60f62528d4ba5c1c091d341771dfc5550e4643922086144006272df41988aa5aaa20275547390b77fab02ca468bb8e46575e2813e9fe12f8562d8b1f0fa8e5fdaa1bc8ceed7d4d27847930f76d7944bddbe0533bc66b1bcb3f162ef0752abb5f4c02c8059ef795aa74ef238cecddd10f0f02b4775f3cfee726126488b347b69f36da3aa90affab29a28cc36dc80636d1bbc98ea4e1603bd3201c049119111271e6b0f83bafc5146ce7a877cd02eb92362b4b18e508c0d561cb1303e140ad9eca02e4273efbdb7a6f11c5af6e4bfc927d76c54ae4fbb526e862473297b502416e716c47aecc3f949ab3452256504e18c4563ca4dee22edb3d9c2d7f730a6826b278d61c8967022af1d17d0eed2021f49958ad06ad57bc5309c99e1a0348b4b73ec1fa917941f30c26a05229466fc9ac354660f79000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400118b54e97e653249b892cd042a8577fdce3ebb542c9e302358c5b48ac06e54d060205c1e2c956b9933b2bfb19aa8488738087f4b11d96f2bf536fe5022c62f52ee527240dc7d6578071f5516ad5b2c2cf41dca123c730f47d24ea7e150edf9cbda7000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000acb68a76286a30473ad982692564cfe031fb5ce5e35b0b20c656af0851374585ea20c52ccd4ecb34ac67a7879e06ddd61c89f9041d095f6165893f60bda27dd9d6fb0dfec394a5ceb37ae5d6baf2fe2e7977c6102e7f33323b1d06a077d5b9e382c1d6110dea0399324b4034b74ad7ba0913db4c4c3c689971b0f8bb91715edcca06207bf10af7df23baf06db5f3736881a5a280d57c1d044c04d42191d1d1f1b683ca42264d79169112c750d6ee8e88470e501d39deb419e092fa3588c62bc7a75b9791ad071a106faf7e5b46f7bf993c87cbe6241f6e7cc06fae518c3b369efafbeebdb5d67435f9adb3fc02c3f65c4fc383233abb6de32e9929e93dc7e2932623e2a06b1fe4f75cd6f08e26c49318f22ccfa779cf8af88e6111fbcc3b16128b467ceaf7ff7e4eff4250d7e900c433a2fa66280c091b2dab8dcdf465f538eeaaaa9b55b627b2f3d928a49878861d1c9bb6a5166c8140c8d5657c02372abb972037874a894bd7e016e4543b03fc6d896beffec388675679ff7643981aced080d6d7280cab577eebc3168ca0d3c7eeb497ce70ee92c60a98b0955d325e32ba787853d91bfbb16b3bbb96ade26e717c9e4339997f57991235a8a2abf35e5b2b7d00000228000002240000022015be11c65cdcac6526ed30bfeeeb2dba8e97d1947fdcf06c6df2f59dd5e72fc8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d48d88fb5729130eb9850101299d2e8c1e67ba8b3ab8141e92d37a5ca75eef613ba70f9cb6a85238ed24948bed0e93652be48bf0b51035fc928bf5abe5222982efdf1a9f556e3ea290b522038e05ef933023528048ba5afc94be39012a21793691c08e50bff9938988e2e349554bca94383309d0033a04c4fac38f17a0c2ca0f42d125657b76856e783dd4990fcca396ddf0e3c69b53af503793b0f2094609d63a7c1209f7c5dfbaaea34a9e7a18bcb694c2ec806585d847bf464bb888600b3c58cd43cc519c977cbf506b3535ea8065e87bd839558bdeeb961074eccc26d823f5e076d2c3ee4d7155114ee92e21f45383e322ca1b780ffb2e5c8287d52acdbdcc8dfcf7db2c3f26dafa4bf3015a38145bf9b8c52363305c8750dbfa9e4e4d04aa946c06d41346a4de213de10e8b9dbbdc785d50ce2deed5d730f0a4b49dea62bc62c279d8c44f77ec0f34b96ac1526d7e60f958ebe868f0a8ce6e70a9ce406eaf298fe9148074d70dae134c33e2747c6f5c5ad926b297e71c9cdd8ea3b1c6cb749473c535e4565a556b4f268539e735b7cfe36086924b2ec3460f8d58eec10f077cee20abc44fa1352d390c01da0dbe80b6e4ad5e7ae2bf30253f442bdbf27000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012005bc3281f9014ce2ca27f8957ba347dd99279b222d7984d3009efc8a2d3bd00206f3e56986d2f60e7caf622fb823f030063bae9a9078d5f61bd66d19583917f1277c488114555c14ed903464f1b40175e8c37543b236acf9423806dbda8ddcdb0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f794acdab0ec6c5e8c588418b537fbe7dcf7af84c64409372e22fb1e9bacafd7620d603306cc675f04b30705089cec7ec141a105b9a3e31dcba0eb23e86bdfa9a8af8a460d429b3e97612a234dfe37ce83359f96dd1321081ded4882e99bf72725a2e25b7606248615fdefacb9f2fa4684e57d99db8c594bb49ad3f49833d32bb9a4301b163e86812cffb2249368e1e4f2cc92599ae82013da7531329476c8b0ec3191cb5822d1902ad4178c88e30c835b4d700ab0af7a3d3fc12edc8f23bb3786c245e317c793a617d3aec1fdbee7aed9dede0a20400d3ee6d216bc93a96ea13a171c9bd34416dfdb1f89b1467e7d876a7b620e048b938d73ec3c0c72fac3022b26bb15c80cc7e61a7426455765d19eed1429e6b10ab7418eb63dfbaa14a8f6c43fae8f903524eef55759c5590c3ef63e5e272a5b2f3a9fdd4202f52d0cf907595902a537eadb84a53801fe80a04440cc68c85c25c3aef08081525ccdda4c76ec9ca882cc5903237ed6653a331a8ab89475515a8dcf0ee8b6c31e4e15d852e561a738c0e4c94e78e7fe5a7ac27a880bfe468e1caf1d1899e9e5b8273da8e5076baa9c847c45dbef7ef3d4565ba7fd9f60fae59d2137f5885b4bc21e4b2d3ed00000228000002240000022003557cd949d2e65a1c7b76d69e592923e944fdfb2dd591fe636fd5d0e5849963000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008fed0f315e9a7e86c66878e53947662dad94a62e775791f6d5611dadfc0873ba01ba64534a62a2b66264e67d6d8c4bf479488fced8a7e064c9622df9cc03e26754936d4f804e7c1500b6c348f442b0f7d025a4f9abc8beabf7c0462bda6cad87ff2d8f5c6fb93ad9ccff40fa851beaaf03090ddb849a3d0e1f71f9bf9a76fcc482032baa659b8c2de9b71cf164fc4dcf33b06d2f8c5ddd46ac7107a52e5683362d42d428b79825180a93aee342d9677d5df177f07a0efd0a312d39847a3c312c92fa78768aba8bf703be6288447d1b725f9b1c3e426d34387b520ad3be4c8bedf227cd9542ad6e7ba329bc37bbadc11f9599bdd5b63c61618b8026e3bd3eb1bb7c3e75630d1807b6521550b7cd5e8d8ae27aa219b1f48d0a61a01b512742f8683a48b6a475a566bb8e19a262d6d40480e75ec0a3afad9b82da2f5b8f8fa200cbc107908ba1f8e4907d60089e76db92d752a20826c5ea253343cff98d445877cf01e563a683970c21c3ab3098e31fe87a16a811aef10af0d59e030800319b7069cf02b3bef644773d3e5a52707523cc706fa1959ef827920e1c5c7c9cb25f1890e123a6df24ad4c0f27af737be1ef5e1f758fd6c7d5a715dcafa8f8a515fbabfb000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400115deb14b37c509899c06ba7b0ae6545398483a26321c93041562153adbaa369b020708d9a5a998a3c6464492bd708fe0072e7d3cbb3f6cfb283b22c30b5351dbb9283ca8dc655dcced0cb633164c844b77f0f54ad8281b284a8f475d0e7162a005000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808ba0a597f4c8297c2b5095e1d2505ef91508ce13cac851c6fab0dba971fae37ae40b636a14adc58dcbfe2bbb9f8847d4c60ba8967415f58029f5acc294fa28bdaae5859b9cdda378a150bd670febac83a764e70b6bd970d6299b90c8fc0fce4bcd92416e8b3ba137128135fd47957173cc86d2dac4b1ed0d605f95495be6b7b990c6dc717d5f332fbb0d91f576d301b1a758a099cbd89b199338f9d69cb1bc14f216caaa9f8b2630c9b8f3ffa7b78dd41d925c7f1f871876f6a265733b8d2160e03e432714c60ecdb214d52b0e9950b94dcd468d0324af78e667745b603d972303297c84bac3e9506012d312ec96d48018136b783545fd5288c7545736e8a3df704c509aaf3af35bd5169eff3e3c7daedf2f33f7a6d1b7dbe516f309611e8b766e2d86be7308eb8f34230730a7c08415bc5a90214a846725c1761e79dc2a68ce1f844c606ca2f7e6efcc634ebfdd848616aa17343a2805a15adc3145a1a195072198baccb5ee3f7dbcde665178a14c90e70f2d09287ec66567de1099177bb918e1492dfdccc6e987e2cab34f2f27c888a59cede70089f26b2b84d5b74e6360b023321701a47ac2664787b9f4469f9a041d49943dd6f59b09602c60a67e1c4f0000022800000224000002200568e8ec508293cdadfb543b70f2b37d5a0dad444e21fc47f978cc15239c280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000975ed97514a3735c2995a2b11d21116db3b509baf2113078a86230be0b61bdceb7f33618870de641ffbb5a0cc8e11e443a5ceb0a262795cd90324d06e05ffda731a9e2ac38fc87f73941e2ed2aadb74c77ff8e02ce2859d8f71f7ad369d12ebe33b74ff487005311f403c4a87facb38403926ff0061b19af56395ff8ef6a178fb663a1c57827077cfdfddee25d86f0781c20f9b6cee258f3b9e6a1267189b743f5144d996060d9f5bff20afd2167075393bbf115d8a0ffe1fc6302462e5c135f21b65de3209fa09a4cf993addb2d16273724c8373372b7f0e550e57bc9f90b4d5570c31e8e9dacd34d1f9d2704418869c8d342672ad330aad819675e452298cdf2c00286b19b51cad5925c9cf1149cbc16d2410a64e8af73fd6fa590fd4055c698f26af60e6f9ab90c9d10841947ad227e1e31e5e6191a8bed46704ec19741e1003f61bc178acacaeb55daedd3d6913833b717319560f66d1fe62827e1402e61c1d43f7ca1bfb961d8e7381ccdd092bcc92787c843651b595547943009418a80bd174f658822dc2548fcd6f8c358c471986659b186555414d63db9d2868ca40045933202f8228e96b5a3d8b99c0d31ca41df249cf9cf4e7cbc5583eb6d9ae493000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010bcf3325a3d3651b148c22eef7f35eb989181b1d328a4409508a0dfa7f4112530207233175db5f2cfe57d9b3af0e5a2f9b50183c53e5ffa602b51e0fc211a78e660fc35803c856770ae38dc9e91cd18eedba4e32a856a128075351825e43e407a20000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b6d44fd7ea3a471a17843c4932232ca86b85589ab588830e779ac138e23d5b8d856fc8c084f4e7dc49e62090bf0d507cfe9470939009992431171019070cb2f2c67d7cd865fd7b194774bb0eb3856be0507b0b9cadf6273cc7a18161ff56dae664ae599f886e261f90712ee27c34ea5bcb552de2069cb2471839d0ec4225284fa3343d3eec5293719f5791f1f07d0b311c13238d4cea0e8f5080b08e40a86282278b54c69662007286eeae7c112079b29b589315e815961cdecdb203b00b8cdca732cd79554cfdf262116b8b4c6cc02ad78839c4463143ac9ef5d4a113c5de7766c194b867a03509fbb7a6860800a457f5d34336eb442debcb4d64fd4c651e91bf603432c84138f8bf72cb4b70e54f212bbb5bdfb63db82f0e0e15a7da9c56aee6e89e09a71ccc0aa90ce535a45cefb9554197e7025404b3ff5dfa00d168eb9bf213cd3cf0fb3c980335581e8fcb3625645122ad888deff2aa3d6dbd10e85a2f983cdddc75ee72c2565bb12895c86e436aa0bed97d998644e211e86106bd7a5213cca489059706ba6112f4868af5c305bedb85f6154932f8c85df326ed4553c772a729bd1d1618601e32e8a0610e7cee764c92b02b21cad1051b14fa011238800000228000002240000022010478ac23754053413cd0724a81a8866c28b6e78dd99796816ad8635a8678f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302cb23a29ce59b489f40c92dc1d99f9bf7511adc4eea03388c6f2228f2e3d3fa0cf176d5dbff9cce476bb18184853a63d4634cdc5f11794a77efcfe231d8fefc31917cec5fd8bf33150e81081631897d63eb7c5d4f4e80fe494425229697f1306135c3c147abaf91aed6a663a2cf0b6f63648cedf0ef264d439ffa167bb343325bad9f0c29f16bed7fc3dfe75906b10240ac676adbfab443d1ca849e0b538885194bb84db4372cddcc6e226dd8d69d2edb48cb88ea699e944d77c005cdd04c227674465c6f9de98569774a9f86828c8d33b6a12aac07d508f3036d88a3cce2e155a8c905bc168ff098cce8deef4824706c8de5afdfd48ad17ef91f7b917fabb05b7b89c7191cf5d7d79465c4aa8e0b5b0cbf786a11c87eb48d5ea78ae1a04fa1daeb32df8c448f9e2de3d737c6e61a9b53a51332bb31ae4548e99e16f9b31383e7d52a80c13daa5281dde7ece6874e3690d6537f6674fedb84fb47605c995e1c75d05893948407a20366eee05b3445232a4207ce01c3a174ad2ba26cb3407636f47afdcc2b0d3d173779efd3032b1ba83c0363e015d6ebe4c83039da515720721e0f9da5c337a7466e90bfc61d88e80e3d745475f56b508b723111ba4b9a9c7000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400103b15613acfae3d226468682c258eda3ad4b6a7942c1b88af734a45de46d608a02072feea79da39b6d4ce12a3dac76c8596bacc8cf01351cdee70031cf8d96ad540d6b79158221ce98907a80fd6bc66407bc4730c63ba35056f91ef25a1381bd9b0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ce70c8facde4c1466ebc0c550520bde871bda6b28f56290b2c39369fb2e211a1ca43f02b0e552b44de99aa3e8f459b76f8f33328246f44d3dd2d8c58202b5aa94a657724c6f3cc5a366406c43aa111e8c2a61315f9dff06481c17fd238b8c555f16e3e576f1e80530fc1466c64f66e73a1c820190d1a8363f19a42fcea281fe6cfc119ed9251176d0bdac93b7d9880a096adc8ab8faddaff3d8fc28ade24b0c0927dc82fcf21a79a74530fb8df4eada02fea80179f796e2990958a861c7b29f0179a344082772c370c7bf629fe8b7622da764cbe55f9e119bcac527da1c84f45dd0a97b4d65b524b647a878b9ad40aa2c221a7efe29ad648bd6610bea1e3c4307508516998be492a230cc8ae5abc484a242b6d3a4dce74ee230944b0a7e662f2e3719ae194c9f7080d9704c3804ca6222a5e0b42568051e98b93c3284f6a8d395de2b2a52877a9541061799da5a78325efd4bdd7c86f7678f2bb5cea74e48ca00b3508e312a02b5a1e25414c8ef64363a052b89f368601aad5df6edc65075233d6294925058c6cce29e3480a3618bc35c62ea4300e2a363d0d27d58ca0ceca41fdf1141be7149bf9af9ca17cad4fd224a77a9699b5b15120a464869588247be00000228000002240000022000ba3271e33b5662cb6927fcaa299252c8083dfd16ed252180107a44fdde810600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000062401912799fb118ee5f8d03d0e77836d3feaf2931d68be0f8e0803b5b88c3fe4c8e2b7b8aeae6183bc3df7832af3d8b89b8c53bacbb08f9348b306c00e323d36e1c1925ddcc16fe74a0de0bff8f71377e369a85ba4d4923616ef2d51c3e393818f13b739706f786434692e940323b81316b44a9d4c983ce0604fae4e8c227df0160794a3eb8181b3e3ce944a5b7afc8358c35b00aa6eabaad076436522605d7f4aa4941132055631aa19935fe86a2670c43460e753dea930e7a8d8f6668554daae2189c8855a100ba8f2dc3ee9477135934cbce965687362e9d205224dcd0034fa82809b8998002c3c09c20fe164bbbe8c628431c4a17e7ccc10d4bab4c22278dc48b4a75a6ddc4d8ca6acc3e7422d81a37259deaabd20d7415c3c3c9d1b312039457230fdd25f041f226b725bca97d091aeffd0586908274de6d7abb6f012f206e5ed2ba02933c50c021bf47abc8b782750b0d472d34a9e4e708dd9678399ac59cb077f57b43e3c33873ca8b5d863c7f6b566469350956fc0448d295385728b981e37e27f9f8eb6c0ae7139ae7477cf9cc968cc3aec0bb33a9687440e799f3e21915f2b38a665ec00fbfb282d35fd36d6da62b27c31e116972959b3eaa380000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012aa10da5258dd99a5b8ab4ebd5d97723301549415eaefc284592046e4868a66a020c7cf2ca10cf51102273b2045842f839db7e1bce9d3768ab9847725bf558454203054184e4d64064d0c417e0543d7a9ce1b3375e761eb725fb6e06d837b9470e0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009dcb0be510d0ec11a01600b81493867e42cedccabbf466f0a5b480aede22d001c0c0b7e3efaff5c4c5eced362cda7d3d7464491e46ed4b9958b5310570d2894d255bf7a104f8741d508239fa057812cc5a9c574af2de2d16964b17e897a4330feb790de383469d6c3017f58022720cec6ee1d1f0c5f51b764a846d41a58a83d81a5d1aa24b294c475d6251070356cad911627543423941859cdda03e26f63320d20805007719c98824a5319ff438850ab2b5b172d43b685ca1f940595513eb437dd9793deece1752446651676654f2b9e4c35b18e770cdba6c64b1fb7c943695c440ba2e609eff2467aea4332a8b88d8bb0c2f3ece77281ed8c3c7a2ee5b6a3a40b57bd5e68bc2beff1d4e4c46bb472740ae80303865fc9b262839160ed36b1ec9a667877cb45203a25c8cb4f6850a9a3f80dcf679f58038b242732c977dae57a435482ed93ecf413d41655af7902f8a50e78aadce28cc1499a38da3e378b74c0c10526eb9d9bcd8471456f7bc06116baaf139c35341b804539187d99b606467f3324dadde396711dc5f9c9d8ffb74303e6cdd5e427baf6201ca8959e95f5cfa614dacb66cb253cc4d95a70a0869e5090811f02e2932617608eabde9c4569e7e000002280000022400000220040b1ba3aa36253a5caba5151998e74adf081c72cdbf5ee13fd56b7a7599dd0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f8cd1ec952dec8f9068d77ad710a2e296130f78c93c48e49daa334de3c190198899c320e9a17383cfaf85be1fb174775c3d1bd08205dde2bef328a3e31092e5d19f7dd96c76fd921fa5d1ba506be4e2ac8e41d6f5b709f6039c145b0ada7ee1805039632468ddaa9a27ac349725a9ecf986308b8aa3d987a2490ced5ffdc5544e093ef1b7f38391b8bb9cdb332cba5f59a6345a50cc0ed8960d3331a5270eb013862c2a9b36b015cd2f56785bc0c1af99b3001a5f8cf4566790d72f09db025849d04a7f1528df0312b19b6697717bc01f7ef42c9f0814be6e715864e72a8c01b0d415f7f9ad15bac6636c3eecc504fdf5101afdfb52b7d5928c0cf2a92dc07326038f87126b312c43846e9be85679fd0f097fee803c5b8cfa89e9590d8197275cf07a1920d611568ffaa7a5880bd9e054ee108269010646f8f1a6b8f34c0e472d5bf772e5c3955cc5beb133639b0e54b4063bf41f4421e48f7f851c54c7959b726de6034244a2aa30489ebaec096b3de97c6f7aa67d8d272ce9c1eed4c68259a8c95534b13314127b9c8a73fa0840ac511df7a93996fc35f8209eb1a70313932828faf4ba2beb55732988f4e3298ae8ec0302b3ee8cc15bdf6c88a9df6ecc2000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400104a78d9cd6eb6d6cef53cc1aa43bb5628742feb54f117bf0d14fe4bd4e916b97020d0a9bb490cf06b1fa6652e39c099feb64f4f03c1638a3d579fd70fb5d9bf5c8068b83b53d29ae49dad2a690d7b062038d3c2d5b928f1fb54c3c94cc832746cf00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093194692a00c901afedac70760f4e77e3618dad7835f2ce3f1d582cc6f1b74b5eca2522d7616c9d9c62d06c8cdba18491a53b1b436d166cf4eca90e630d6c5201fcad53a4a8bbfeff97f72984db851b24eaefaca73107f8a144d4ebae2f344656b24a362bc70ec139ea026fa4920560de4bb89e0a5f475111331488bfd7aeca7007c4b0f4e03c006056038eb06b33410cc047cbdf99a4edb4962c80e910135ab0f17857877a5f6a7269e5abdf51088b5a10d56f834c5d8dff93841e86dcbdc74a4110b653060f0aea07e62d59b95d49a818f692672316f33fc1b1f2ac2f69aa57a7c8f17b86d460008a024d8fe9802fcc1932407681a5d6b8c3cd88ed08303b6acd5ac644f59247f6a9af30dfc7474d474ab8c5c5774b5fd6269ffa0b78ca49a74d44214dec5ab35b71ea9065acaaf4cc093fffc5c41093f9fb4a47177b6d9e5549cb8c9071ff5134c0c557791b1a48fe090128800d8e1b1ba3aaa09404ee7f6a471429047fdf3a6707bb9fddce2814d1287128ed31e32da1ce605a5dcf6fe30d489fa8b3009bcf1ab054ac0abc27029e2c7dcb480228f54e58e9c19e6bf33ec96d2de4f5a0b85a19451c29e70f995d84ceb195a4448338830d1d1f4737104ca0000022800000224000002200e30cdaca4afe3301c650cf1e24cbb4cb0b506a06e21ecbe722b784fcc6e942d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ec47634f29e98f093f4fce2f30b78cf4cb324743d07d224051b7dc20edd53211f43f01564387e25b2608caf27d0dd900801cc34c11e5df13a969ce8305fa0073fe67383a901ad99d5c023a60d44ec3498e23dd51bb5dd7b1ae1ec73cf074d8bd33e250e34f74de44745beeaa5afdc70dd1b7c129cdfbfa7641a176d951b9493f658fc691e3645b7447971b747bd15f1d39de4503651a04fe1bd060fd233defa08cea975f35f68b96b42e897deabfcfef816279a24c6d59bea1b90b622ea1d4ac494ace731cd6eff5ff5a0c457d4b66bfb3a45c012ed60b7a23654a78146dba9ced8346798a6c290b6e26e537d1702f350545884e9799223ccec22098f3b0da8c7470894b80a2c95e0831aa6a1565728f9548217e16f5886aee09f62163e74018c1965cca12b64abe0cd76a66204c2b7e9ed3ec7cd451dd6bda9d9ea0e61ece551741f37512167cdbe49ccaa0c454966d0b20c169209016ec018b64f192e2ceb914fb6893f19c6f525db50db863ca94da2caae67c6d1e5b9f0d37468bb77b166833d162fc4665e0345d55e3f890ffc66b45c033497dd6a7b6e198fde3533391170017781e667a4a8dd7598c4698938e71ad99f157257ec46227e4bcd4e44629b000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00215232c4e0b60bd301a6c09074c1b72fc177963a8c7d197e534989967dbaa4fb11607776a1eaa07effa33bbf46ac89274f8a79c3ebb75a2d88fa98960e7f629e4020f8281e1a0f42983ba9c088b825e1b2ad0a043da72ff54a0cae0f3439cadff8e282c05dc747099ae0bdedf3b611e7aba84e6e039693ed524ec6a02d7e927a59300000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c8352bd0888a042baad5713c25af923cd3499030358c3869153646806238bba37117f5a360da7ad5ed2d856a60fefbc32bb5bffa090a9987782bfc7441cabb93adcaeb69ac8dd922bc7d43637cf64b7e68450daec5dddc3fcecca62d97b48022c8e929af01f27dcf6433eb76d9d1f8e01ae7f4a8385d7929b74ecd96dd429d3c5c8058cd3966efca51205c2d1741f0db2a63ffa4201d84ac174253ee4dc49fc4dd63d251ee45ceff71ad16be8785b80ef46fb7a10367a13b64767de2866f28274bc1b9f97b493f78376ed135fb8a4bcf56f273c71f99d680b9d0cb288b684bb2f4256be1d576e8575931bcfaa3e04a1d0a749b1b6caf80ba33459eeac23942d25013b1a33043f3e39dd1a22010adada1b09c07b44438d520cf228aada8f4dc5fdce9bd8678221a2a725c312aec7d91d3cb17f8005630bcc2e80e1551cc49951193277843ce57cbe4668d29be9e6e807010816cd386c8bfb5cd5f405232349b2aabccb76628214e7842beb4288dcb3ebb9ee6939e1dab8180fcfa876748a852576fb96d7e5851bd10b3d8e779135a36191d327438c01b1109293f741be71080831f840125579762bdca172736d87a7ffa48bab85ec2e41131ad5b09330a81a9300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000758f8a354e5a68040cdcf3be78460aba3fe887a6848f5be079541fee568f406a444d63f21a2ae79779ef14bff5978904e7fe74ce5e0030bca24741664786820c833fba6fb71990370052ae2d8dd2f1eb8454da6c46de1c9907e7f0fe825d074f553c83383c6f81661bc2f8f8c9e9608303d33c567be494d631652ca8bdb40deeb1cdd1fdb09ff108b025b1e3c93926a97119099b6bd026357cb95406c617f144f28a38a20a445485fb127352831e316bc3e1c7d42743b983cff39082d3785a2640150386d0500c9ebf82ec2cd950cb54e63564e5f7c919b8a7ca7f4d9b47db2e7aee2ca9500eebf668edea4fd87be8d4871bba2030e952b49f774675c4cb99f895c26962323d8919072d8e0f08557d4b076b73265fe742933a2f3c05b0a5d633bebc7ff966d78ccd47fbc8cc4412e44febfb8219779e2890b93c00c99e2a890318c2ea0c1591b1cd3d3b4df68e92ee4564d89ddbcc1ce8640c68ae0c1a980ed64cff37a315c9b2e3bfb703c6d92c6d3f06ec9e95431886e63f8dd8c371d2ffc77f667d6a3600ae3ee1e78c3689b40836b21d4a7544597ab6dac942369ec8de28dd118391f4e846549490b769bace319ea28183d3b86a7788df0b1ae47880f2c000002280000022400000220019caaa4d26c14ba3aaf75a8cf21e9c8287fde84fa2b4fc099063134a87f45ca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008271ca8e99a9bfbd1f8832fec3cc9d1604ab3672590fa1617fc115d00d8870effacb390884c361f371f8cbc7bab9a269a23719e106029ef9d94d14fe8670748f1bcb462bc1a900d07a77023db496bc676de2a3e66d506212e0f15cb1ab241b51a7b6a437867292d41af858d5c90e9428770e2cfdd4a4efd29246f9f21cd9eb52acb34b1f0bb695171181ccaeda064a478fd98068aca62c8c8bcf8d5ac7cb720c0792fd9b45a48741cec17b5b4c4038667d84d31f5ff095115943f7b8be5a123f816cce9d4d663d2b289344ea3a3de63b9f514ec589471389182b8a8321fb096a58aef4bf14ab84eb830083e7d77208f81fb3a406a6132fa13e04211e9b86a31f45a203be92244fad3964fb50a7597a1c77696cda9dcb03b06bcc063310a47ad1e3bd6a541d291d71913249b9228cc6500bdc5b27f614252ebe2f8cacef8d63e8fabb0062a78206bc4f48e41141a04446329de6c7def803ff47d9582c782799277f10a813425a06a76945b3e7efea279873d44796807d052ec6da26ecf2c98c9770a01b16311d93f4e3ddb9a43c61197a24a5af5311aac2df794133c74f0cf619c2c7847427647138566533ce3f7b880baba4201d1cfcd9d6493922726ee7e5f8000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011b84241953adb6fd00081a41c913341a592821e36e7b610c9ec960df99e46ae9020fc0b7ab457d938b54281bd72ecbc2c3f910c89b71c7caeadc17a61ef3ff461a0582a80215801b1567cefb8505b691aa9b9b116ececf62bc58534b1db76cbffd000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a127864fdb3dd0b87d4b1684f2786fbfc7962b5c2bf7adbb49545eda27aacf9e01cc2dc75459ecf0ac99324d4dd288a8982e33da8f1cc2313e6dbb1d1725fbd303fd203fb00d0a3989c5e70c70d5f31fe59e10e86fa9e1299000eccbf82249cdcd2e73130982d34cea50fd7f56d3cca5bbe03fcea7acbd89829f1768ca007da1cf5cce8ecd143c6e37371e738358eb92ecfa85c3193a7e91b34ef1722432eea5f096c7cf8b3aac61725678a8a07a60616c42424b1d99e34131d8957931c7a94a89ebde4843557ae660a20fdef53446801155c83c18a3337bac35e5730106ae37c4efa838803a320196a42d8ed4b1b36fb6268f7de4230e18c03b5332f4d04b95a0c8e47c9bb95716c74ef32ccedc80c1227ed2746ff8a61e0d98e720f92903ab59ad7914c7dd07cebdc9bc81a7aa799b89f29fc8056a60fdcabcf0a13d73f0d2ea735b21d11be61497be497ef4f11a94b2ed5c74903e097d01e3a371c56361f273b47f1eff1f8b8d4f83a3ca42fe54d91df0947206c351a99dd85d7f68ec398ce15c85586c23481f088df5bd89616a0185301284d4ba60a3bb3380378fa21b90d1524c265a4a2eebf8dcf6fe996a8cb0e254eedf9851585d00433663524b66e10000022800000224000002202835fe7b51af98bb61b71378903527775fb40b8460f3f2b84aa7db9675180b8a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6382ac99ca5be94cf061177b7aa786e44bb1078fde5682bb12145b63f131968f9bef8869d110957afb0befa0635f1582672fca34565d986bbe12fb63fb18e64f6a3731199d4ddc4dbfd57aa616e8a29eff8c5c34ef6444cf82a3121d3c3640cc395cd070f12de455f481aabc2d25c6a07e5d154cbef0d073f2aba3784eec95d7e7b144adb32840dd6ede461ad1ebdfddabd24f44f5b245245eb51960336be2a635fb990cb3fb6f3a44b0ee8602258beeacb33e1b8cd8abee88d1369687f8ab7c9ae9bd720d840c5e0ccac3b308cfb0a496c0d3e9f9c8e921da4664f2215dfeb4dccdaf420ab893abd449c8d6ac4e647fee1c75943500860d1d32c797a70e95ff85d8ec42b84c6afa0e0c7f1b49689e4c85bd82dcae364352596a68d604388370d8405ed88e72144400c86cc3b2c7cb144295a2047921fff7dab3de2bb3e0949f3d0f6b0eb53dc1953bec45b29ac07877fcb9c01a7d42a7c49aee07ccf098a3f081fbddbe7c0382e79fa044f68a268efd350747bdf646f35c863d5b7eccf8f4fe0b6af4ea8148d4483de95fcebce36e0b5cc8bd6cfcac4fcd75aeed39b7a366c7056cbc2b0f1b3b8fd8c0b06b36249c4ef496d0ec9ee76fc6f46ff62a14ddad000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010fd19ce9c78e705da7bb9293be8a2cf50c9d56b9eddaab7c6abe524da362147e02104010b69dc9a0479fbf0a371d09d5233574a224408051554f60b3a3f9016ac101fa9c909d989dce5b4312f50261cf403bd5c35e6be83ce9ea058c402447dfd80000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ef00ab3b58429323d6038a3aa6cb1a942d1d82fac991533a9e840637ecfd1767a190000d2886a812fd4cc760e10e602687ab6d3f12f242d6a2e8a5030ffc206f48f34f261605f1380497abffbcc5a891e75ed4f9485ff6e16d20a853bf57f4a98e997702d05867c50411a029673ceb1ea9ec6b1007799626d04fb62c74b36ef3b1247b988b4e7e54f0c5a55128fc33438930bb4ea0268deaf53e03a104a11c9b55149b7bda47068da4b7ae232e0d0b78680b6052600ce3cd3d1d7e58b439ca8ed0912b4f3ca32fda398ee2be6910240fad91643f4afb8d9d0973eed72044a8e82a8405ed041c2e9daed8e0b8252b7e471abe319086606e5fe049ee976869ca1873a0f541a8b7cd212def917e0b157c777416dce41f4f6255dfe8b8e0579e082400f7b73bcf02034423e7833ea958b13df07ec6cb9f03bdaba5f04664891a669771ec005ed89a3e4d5859986e54fa99b14950af67e55a03c41246a93cf1f94773c69a4f80dc00232cbd5bf767fc35478ffe37e737527c1262a0309d2a9453032917315d4d40c89abfdd1f6c02ae3c2335c582b88f05eefa2fdac59939d5147df5cf8979a9cbf9f3fae2f7a16bd0507ce95f49e9a7d1733b5854fb5a57864b6900000022800000224000002202c8af824ecab3d1058f12503de766ef18a771fef9876e0c98c953ff1ec0fce35000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ae8ab5c4e92e31888107b0c9c9adfc6c04eab07f87f6919109939e56c177d47e43de240d0f380c686554e9bccc1b09c4c68536afc8243bfa86a049e27b58f2ab81ce206e6282b9cdd8456f327b6d2292dbbca03d33fe253e362ddda8714cbe28f941c8915e1b1f2341e6d219e881f516cb4678cd6153b6832d44b100540d98817adb5290731203a416d9c94087fd836ee0b0fa411c4d71663d30fcbd638a7d80b2646b9a601a89d07028eb7439acba3d589178ecfdbeccdf181bbd62a2d8f4b6a38c182a3abbceacf05d3cfcda134f56f648fbbdfd59f7f7236d64f72660cf7e5aff26b5551cca2239ef7d778a32635d516ce4d6c0fcc3997d1353193cd0a3f75163761059ce0c2eccc9ca73b3ffef9f3cb7aed8408ab9bffbe70d6093d849d778fc0a6f94a6d7178a702a8d62cffa04943491c2d660bf77a2941b57b9b7a1fe5ee78b0cf1b2625d319452c23fd58fc64300904a60aa6d117a9ab380d3388f2b192a6d99a6f54180ff9f04e1329adc3414759f2075c9bdaea01070b76d8660c8d78fd1e2aa62cbde8de74d744e925cae4bd4344eb0fbba265b931e60e85c977a81e63ddaa2f89f1613c6d1b495b99e63959aed096ae2ef3035022742d4adb8f000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010cbd0b8bdadbed4a3a50678b7183024e8087035b86c3ef4f84ddd1c9c3ce6c7e02115ed3caf9a1c8066e9aa0c9706c3d93717ef8fad95dc8a10aa5f66334530a031dc7206768586f89969c4e8eacd4a0253ba5f952da9f5fa14c501b00fc289e6a0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000be7ab5842b4c0b59f1b514da46776984006ef69eb51675c4a98814fd4c1fbebe6e36b11aa8d000ba6da507f33217b4e87633d7df3bcb165151393bb2c6b3d851708e3c7debbbb3618e2a334affe050c57f597aaa694dccecff83c9348b7306e6d1c5cc7e4fd11eaef834d5883b0422200fc72c90ddb9bf2185236ed5ad286caecb006159a51d2cc737187cc2bb3168d4ae080d424bc5e4eecae66b2be920ceccd08ea18e5ea340a87ac88b06a737204eeb1f499560a10c099575c71b4ffdcfe332073e87e043e53360d9c7f936e943f1769033058bdfbf3264c7810247e2574be1d64d2614bf8a5d674f65b55e43644a9d195ad29795839ae499a77dffb39e167b1dd8fd2243f60bf848ec5ae133fb9c9ffd7b2cab68577d81140b198b9218bf172a082269622129ea17a87d5030e34ccef57cfa5180487878e0c7617fc2063e9b33189ac139f3cef1e8295893cf3816d5142d30f4d893a8805b2842aecbd9efc9497b050232df2cc6ff87cd650b63531e2d8b0a0986fd7ced6179e2410038647f0721244608a1aa07461b5bf07388264106e57ba284288ec4bb65d626ce73eb4f84e80228393b94868e2698b570107432c9a699ba651a714cf0c0ec9209d3300000228000002240000022018ac1a2cf226b158b763a05e289a1201e431fd1e5463ef6b397de736bba4ac6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6005c0b9ca1466959d28e6441c526e2ca273fb15e6f5c9fa36646b6b48dddd59c3b10fcb24aa113e082c84add14b6c4b0288bd42f43713407e82aa97ca82f35eff376ca8024ea6e79d3cd6a7c41d3349f3d021eeab1ad6caadc46e1828dfad4be342292e6e81aeae4bbcfa4dffde04f41ad3bbce2b672985b599190841c0b2246e2d58bda64d128d20c8940115d57309f4661e051519474e5de708d82778736f74c18db61d23b0c3566fc3be432f49c0982cfcd226b4395081bbeea991b0157c36b7ff9029c9d6f743f294cf49f72a8bcf94d82764107d4b434e5c2c56eaae34208f2d3e2e10259a2d0fab45c734fd004d4e81007e7c9832ad0ee40caf870d72dcdd7dba52ba6035d5984140ec8db3d132a6c3231367fe579bb0dcd4d08b2d32a6218f1e6fd303ea4a02f3cc705a476ad0f646505b7627454d30354469a5158eaa32c89594b28b4942725c9574e6be57567fed84fa2cd438b16543ffe50d2e778a2d86095de666fe6ea82238fe16a7a9cc2a24df0c138b39ec72e2fba8bf69afb6658b9ef5df6432fb18cbc1a64d4b87dc7a44b5b7295cc4541c3b4ba0a364c36878eb656c1dbdfd41855dd546c6b8859586f504c49135f07c12e5dad505b9c000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001060b23c75a9bda4245d0adac92d837ad1384e3211316ec68f3b4eab3c9796cc1021284b62e3a6dbd544b052ee1a68a14a1133c34751491b06271756eb767580146092c4cfcfea0756831e22133f8fcf83acdb93bb8635fe29c4978ab829a6993c20000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b243737fb6536962e306d7f1a3f8f8e90335c79791e4202b22049ad3bbc3c43d7e0d23f4dfdbcf167c57005bee7d7e81de64171e35521b56bde0748d65919a22f8e4170344744da3fe6efb3dabd53623350a6b3e830aaaa7953c2e0fdabeab830e260cc3fee2224264c475a96c7959c3f9a988b2986347ee6d9e724b9443e4a856c7ba4389180a1a5f37ad84eba7700100d2d075fa18fa9404312099d0a481d0a5f0e9c94c91f35f4348346d426cc71a9f387eeeb27086839dfc75c6b2639e95e8d2c3b00818c6d46b4c87a28d75e2a7d897f6c4f0dc05e6436976693c231ce031e942c6bd687a4c5953a03743cd06275217e526de6a73589370da95f3180d8e74b15e096098200ac68049c7894775b45b96b25d1ade680666b21c77d535982cc962ba5a48f3cc813fab393952094f6324b01cd022c552a367fc78b40504d7fb7dd6f0f5500cc1aa1b97e7b62bede3e446b3aef825cbab230ae827c59e338a7602c1f77280e57183c403bc566d4d817ae808ee4113d1af56ecffbad78bf26125a89a91fe95e86dd573eb66c9f6399ba583a93d7a9d8e8095f2ebf02dc8e12b6a0b822ad40cca867d9e7e9666fd7db6f5c1304b3f0dba5008dbe70c36ca52915000002280000022400000220041185819e94de874aecef59c294dd3e6791cbc0907114fca7dab51d5cc35f970000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015162d2a16d189aa7af9a458acb159ae50fd07d1fd67a25ffa785b4006a2cbd42c06bcf6639bdc19486f65220066c36234574190fe51a106eb68fc518e63b15daae3705d64de49b3b35303afda4a2b1d8d818b1908d099a0b3ecb19f8d08a13153652344b504b66ac0b17f6ceb0d112a35105b9de68eca0d9e9a4dde84ab29c50436b120ea85edf1498f2f19ec73c790c45fbafca9ccf45f3e4ad0dc244885d08cc743afd4603c067a8cbc333e5eb4530199eab9c2c002dbbd67e68426a7aac8e4ce50042402139fe7e1b1a1f0a50356b742e89f7ce148904c587fe374daee8cc32c9a26c39522051bde1e8c89dcf1f56e597cd80fde8968f8b8d9891046b8a657daae3ba89e310d3f78495bac4b337977300cf2b87a1dacdf6154b7dc63411a61c07dfcfe249fae3fb36589e37b5c2a112b1404608067feef6d13e99fa04013f576ddbc40055febf37f29d549d4f6cc9fa42abd679f3c4c3810d2860940144b1a5b3f143c6550ad6a687a7204bf029088a3831eea08f1fb6e48b7565cfb4d0e8c1a088be8c9a44ee3e54fbef7071b1a6bfbc8f0bcbb74d66f66435de9d0130ea6759a44c3e07bf17669037803f13587d150c74f9d02970a59f27041cc296e30000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001197da02cc648aa2a67f67f222c13dab883d8cc8043be8ffd1dcde32091d431680212e2cb68fe640853a96cfbd27299925927796916e146d6d6a8020108a5767cbc0186f9166c7d96aec4770612f30f1c3a3dc4b137dc05235642cddff09e14176700000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099a13750fa58de7be111e654d260d1e71cedab118eb883e8bfa50a039c681d82e79a2e35cc0749210e65400eb12134acefc1e3fb99e36ba8504231cbfe6c9e25d9e680aa0bb57e7cd1c31add5978fa95bdb77aee71c10433905f670af22ef8f78bf1e813b8df03f78aa4e9ae3a49d671fa5581d66659af2ba3141272b1f2b4ebfc269c0468c33baee20fa8610836695ce7fa7ea6db9d938289bc21762729a4e02da766f27239018039996910a4e4296662cdf3ed1769733d5455f668b3588835daa713080f20413fe6df4c2e936ce331a9486763d58561fdb8373baca1fadf024d1cfa13ba0b56fcdb6c875167912681e0bf463039dd6a65f9b1410afef75e36f61c3a7290d4a1de701f60ff01208b8736ab73204be47ad090f9f3162d27abddc65b29639dd27ef9308420279070194776d660578fcb30da3ccfb6128d1e63f5039ea94f162d71c3c19f3e5f21509537bf42110624f83e5abc6526d03730398396610df31f181ca0f404936229d0b6bfb2bf0242297f68238265e7fef4eefbb63e793befffc74125670eade8b9d21233c5c11ef83ab6f08cb9e25999383addeafd715618dc27e5f5277df086a120a2217bf7ac3b94e0be8800ce30d5b0e644110000022800000224000002200eb2572ead9a6d36cf62c8593b0b08a4f18c6dd8eac9075e92aa870362825d0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000967d469737b7adf47de0ec3a13bddf866d3caf1cd9c7bf30c7f81942126b392d792e5f02ca32185e4236cbea06cf62f367d1315d27914e3daa175152475c1dacf5d333bc1cda45550d1e4d02fb3bbc569adedd2b51d7cd86b5ffa31e8910f80d9412cfff4d2396148531bb38c7bebd6d3e19caf56bdbf1dd2ca239180e03f0060721448de9752cc6073838438031f8708703a9ea52f56d2c53c70173ccc313b828ce47bdc9587e6f4c876871105c5ebf9204b5f6b270c1964b6be8b9bdbfa6631a1fb04d9080583b7958ed032e2591f7817a76be41ad85b875dd46d7c25a9bad53c6b1e1677341ad8cd02e644647db7cf8885d030875ac35b842f538615bb179965490b8926e65059ed8d1c8cff4ab9566c451668adf8cee109d87307ba9dc3f761f04bf21843eb6b31de17b1f9e81ac74eff570cf08089796349dedd058eb03dcb7faea801dfb41081cecf311ec1904bb8f9df7c241d135b517d4f94e7fdf74a37e7985906a23bf222402f14cb5ea81703c426b073aa0b46c2dcbfd1937edab881fde37302127fe6654d7feeb939e298cd9c09d763b9d8f9a8b6b4fb44237bb430a9e82be379361df40fe0fe0ff55e49bfa1feb46dd042b83b4284907be13fc000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00206efdb600523ede54f07ba69c4732438b907021292a590f293ebd45d701cb74d05728d12ebe65cd397ea104f35acf1e444f3d13e8373583ea06dfe894e9daa130213f76e32ccaecb179fc3070363132b5c0a2e9436867db01dbcdd3fbab65dad3927f9887b4ed236f7a02e88bb484bbabc76d2748bd3cfb13767d818c9905cac6b00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fb3f724c50873023041cd940349f8c89caa658273e66e3e6990f5ccf0706f984b67020d99a7e9f2fe85242d2ef23c0c2b87e0a782ba77faa372dc2dcea7b2e2d81b4d59bacd5bfc3c08bb96c61527ea0a733df9fc9dcb61630b3a10c74b0e83faff4200a5158aa55c6c3fa9019793672ec9acd1719b7319d3d1557a1c71c6205fbcc68847f6f8f9a3f43a60203321c63fd0f36e7dade115be3e50a058cec36409edf82329c1fc6a896e50de9b31fd33348705d5f5d3c19010855954293b3ecfb1a45690f85fcfa648d021170f4c4794354f571b5dc0911d83cd394720a2445b33ffec7579a21da7711a8e561c3fae967c0a714a136b87e8d8f97a4aea32367c960a00e3f11fcd404ca0f0bb30952b7510b7facf7301a093588170434826128c3c36a493141b1b22a594e5c5e52e7d1fe7f31752068ec3564f1c5fd827e6cc1dde2bcf52a15e6a66085367b95ef29682eb931952ea6e923f5e2ad59c1d3107f719b7e6156b18d776ca41cae40a361c9b2fc1a427635371ddb00b39271ce65ae8df21c8ce68406ce736dce2ee1bda5f22197871cb2bfd5cedca2f2e978717f65dad2e825f8a4a5d0ec3d40dc948eb5af2641a7f504e4f6eb4d1190081882fe9b70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab37197045d0f8bc256c614f1c3d38facff07ef8e836a0aa985e7ee8134e3df3a0f34f2cb92395001e02905a2439e222dc33399489f8be59825e7382e1c9828f23564a592b61221b98d10546619f6cd9261d1c01fb0ca30a85009c626cc6db79bf182c3d2af51a6772ed3a7197808fa8f6cc70fddd6195908ce6147c5a790859cd523334abf7cb54f6a2a967643ca572dac6a8c27ca7c4ec06f10ef914f10cc36edb2919b2c0cee798109c85648ab36412d789c30f57c00798fa57dc88ef345cc4eb4d59e675955a58cd8f72fb2404c5372d4c13d4da692b9ba35709063fbecee8ca3c181a7384db80eb1a61549b98800c40d41b4cdecaad1aaf7ddb87cf18854c19259a14125f4d16109f8ce2d0b48d07ed3aa6e0cba902389243123b909a1ce111c6070b9c7f39252ba99e036e72af5e512a8bff1a1e2ca3a3708400d8ab064ce4df96820abce817c4eb1ceb7f3f1c2e3723cb71f8381f2a57ac3c8fb8bbd9755a8f6f04ab7b46f2c5c7b6ed2a4344333bd90a3a8466c62424a1b57e299efbcc27808e683d6e1fe0638cef26ae37b9e4c7dcea7e5fc32c367477512272d5a5835da95271cac1aef9273270bbefdea82b507f75c0cf0d0c4925f3fc04202b090000022800000224000002200bd2cf7c09d42712f30279d908dd81edce5feda8beb199c29b7fbfc7b25bfa26000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009398f6a01ecfe3791fe7f5ffb1287593b543c8ee729efa90a54ae78fe829fabfd199bb2bef7772f6c7018b0383092375cf8fe8fa80c4496976e5de5a221ffceadf2557bea43bd130512b8533c6dd6bf9bd7b70abc46bd2f586c5a96fc123162bc11610460ff222ec9313739aecaf296184614af7654460be8c363d8795ded506407980d3be633d7d9d38fe29bcd79175070db47512dcc660933422e65d4b5e2a715e7ace4f85a21ddf243ff4c7fd7587a14da90219c41e8563db0cd92abea64b5e3113f73c7cbb1336adcca04535b51eea442c7092f832bf145fbeb827b6e04cc7477f562d3f4bfc935b1577e727d6ca03f0a0b24f75a951991e9fdbb04324e982edae5a82bb154bd4b381c2dbb9c1fadecdfc8c3e772d4199ae9d8f5523d11f94811d72fcca4735e771c3a2863680b3af70ac268b8f5791754d2bae11c3faeb1221a89febe52714916374388e8734310dd5740f500395f40846696c13c667cc300498b8f3d2df9879ff0438221f0dbdbe94fe23c93300976daf995886fab801558c7c03937ea82f9dcf8b947b6af330cf87f67f1b291172b19490057ea63d82517fac9d47dd232324f6f2710c211091667f5646934271203e07b85b71345c2c000000040000000000000000000000000000000000000000000000000000000000000000000bec47b002112ecb044bcd7e3aa99f2f32ed43806e3c0a8d6c45b1f928c7243881506a1e1e1349bc3c99f1465395ba78e2237a0b69c94bf16e6f0e0c5ed8b8d87f0292c9430215cfe288ddcc80884744671662ee96d67dfcb22428a5777b0cc77c8b8c94e5230557ee36aca8aac162790ebd83e89fd34d0a49551a58058c2508c2f12a0266f400000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008536bfd6c158f35693287143dbbe19945360c4aa483eef75819f7b94d1366e8214ee6034df05b78ce86ea86ee7086911f4a7b19af8107eaae5652521237669cd485a05e96f6990f33098a84a35c34d316de59f96cf572ff23d417a3754c0d220a6a14472f32ad8432cb4505b834661cadfcaa4aa514bff8a6a91e9f1ce5ebda07578701d1bc99b08b84a9d678a876fe1d55ed19e58c628e43f36ebc27eb9e24c19a5d92b5d66c39a191e10fd79d7e315d291f4247984b4b08c0c386ed461eaaded98a2fca5bbd6f80d7b636de25004ee040b0d1f7685ab5e5e8bbaee6ed47c7e08d7520cd7d2c5e2810c5fb59d23953c0f3c07e60ccc9ec65c200f4ce04a37b96114d82bbc73096914bb16e51be551500f74cc68ec3523c0050267979215cb56dda5dcb338ceecf833b65d42ddfba018c6c73fee27e6acefbab699ed23be87cf033d62a26df4bb188d2c2faf617957b98b64b6a894ab83cbaf054dca22255a28e407eb882608c341c960fba0e3df01d3cc7c14092c88e0ba32afe9b6a1f2657f80fb491084ddc673f38f7ed99d332816adffc2c0815ea5aeb38004173b381fb0073f90d70d96ab9927e8a90a8cf5a25e5f7cabdb4f902fe8de461b29b961042000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002eed6cdc412db59b10393f845bc4734b2e9c871bd15507e804e4ff6189dfa45da2f70bb0168b112e0a434ec6b5aa9dc7e2ae06daaf04a21b7424fb099e7c8de1d28dd6fa12fe78a9265675e27b110276c5351a7eb9e4f951c9249692c78b19953ff73a017ab26f06ccf2f94c272613cdf719df169a44d555e33b9065771b25cbef4da450f42ba8572f2ca036333f21a37823f5e8d0484c674981bc36c136ea3b4d802e445808d2f5534905273a200fce12b9572869ccd822b2172b55722d40a04a532c940fe02802ffb917b7da1120d74cc0f2f5eb9f80fdf07507c3fa20b0a471184233cc267a3b7d19f283c1811f3c6e17eceaf3b7aca03c66c4cb936e8025cb9b61099fb480dff59ffecf66808d046ee07370af679168f48f9db5569c5a852d4f98279fbf934a54d6291f5bb9d94e2d0ff9b233a1d109b7812cc0740ac2b803c6f02666b38c8ebc86646ae0b27f41ac2a74e73915d885672efb9122604d8b58a52f26a2b8da60aa01dc745233ef50664f1d229ca5a3923975d4bccc5d827da593784928606cc4c69e83137da516b0423a57d8c4cd1269384d3e35e0cc68bd57aa22b2a33481912affd69c28693c00eb6ec097a06eec1702db8b3ae2c3dc810000022800000224000002201a6b2ea6f77fd58bab66ea9607e61c8e9ccd3823875cee055f4c15a2a011137100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a973c7a0c44f9f93546e2e7762d98f22b1be77e650ffb35f10c5f7d0b4af4e8d26a8b3c1ab4ccd711f83c777ff4cc5bfa5477c42668198f2a2f3596e073c367447c5574b72bd382b8925d9494477db246848032cff379e12f03ef275345a8ac20c2fea6a63974aa412f2df74e8404d0361e3567f795e622a62b15f4d87ba2be0ebff3fae569c65b163b60d7fa727ad0efcb890568452cb7b6a9d8392fdc78dc0d256a1b18590a8b61899ba7701463d5f2d199ee3cde1d824d164effb83a79c14d5973d4af89349cca4ec00a37c918da25c18a4caa2116c4815eb0870c39cf0214fbbce90c8d2e82c55b31739ec0040067614018f28c530bdab099c12c6a5c08700cbf97ca55bec5dd8e3d18253100d732cb04743bd78e527e498db91b017485b922e7fe70f37c9ded6faebb625c781d518a8ce8009afc1655d1bc41e1dc043ca02a5df0592758a6fc9de17e220d1f18490ac73bcb164b88b631c7b64e5e3e0a38a6af1e3abc524ccc81b4ddecc057d28436d474d8231c8fca739ff4f768ae63931e45fd74221909b65d189fbea5df820f84fed584e47e3b87b0c58fd6e5e1b6abd4eb5669737a3db9e8d4c24ff4bf34418a04bea42d5011ab3c040770425bb3b000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400121809716c4f3900e941c227911670fe733bd1ce2bc483875f29b8b0343db7efe02176188c5123d25b8d89114e3e0fb1c7276a263a5308d7f26a20e7ada95410ea3022673f1a426a7e6b04c1fb7be75b8a8debb340edae3633c03d42f34bf701a5c00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085415e88d19d29f89a5b1a22c8ccf00a6660d0c67a3f176a77c0354d88ab7d0c390d8534ee9373d3b2544344f148d7aed28234cdec1a0e0760ed7f2c57a56f17f0185469f7e35d1f336ca8f462f588cf25367fd780443c8eb650b1ceecd678e3412cc73c635a7ab76fd2d96ea8ece3952cc26104df6d291a54aa061af94878ca0b3fac3a275eab8453b738fedc8571fb8a9865297afd5583189fe460e5484b9f1f2a4cf3d362cd21c4a5922609ceef4f4af9a3cdd8b947590eb83b525b641a83587131c17e34c4257f8d7cc52c910f3b9960a68d867f791e20f95e8afbf9423a2d5d16888146c5cbee1bca5e76d26f5cf4b3dab8562f6b28e7bf60db75f1477fc0e1a2fca9af8246e8931fbbb2055e9428cf65278cd43fdb3ea38d2f34e03b0d679c70aeeb72d526a66fb23e52f345533fc98a9df5f02d8adaa44af5286d497a03cdfc2928f28e43bf9bd84e043d3a1f44f21e00a6742ac5aa9471e7a868a8fa26091f650a281f4b2018e0c6bf4aa306646b7167818bf948d49f7a90b30795c48dea4ddd4aed0f14809381e7e5410eb36d75def61397ded19f6679d3eaaba5be986a60084b62b53e6d7e8e7e5adb74cfab4cd3930c965b9119d796fc1a0b25620000022800000224000002201bc901c808cbdaa5ffcbc3442b6eb31f2879fedd5b17e920bcc6436bd9aab271000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500cb18b189e86e1d19dc86135a61cd7fb796a6c21e89c2e4a43f5fe6d2ca77f8328dff0df2ab553e4406458a01a778f788cef60c278bcb1a7d6baa84abc0a4062efe2da5825fe09c2018984fa1bfafc86afa7790be8f3b46043a08ee02f733d98ba74fb14eaf38ef197d8d350586637d5fa63072d98065e3ebfe23f2806abd5c86e4134c5a4a12ad57ed318bf0f4d332d46f5b1bbfa0ad500ce3965cc658411dd5be8e4c2ab60ae7eabc683b63ab14a6dce0d9131cc4e3a3df61b30dc939e9d6a4a7cb35685c4c89d59ece6a679fb29a899ea2c5111574bc9072061426a119893f8c102003139c477854755bb93891319242e8b4e1f4ce46ee1335fe0b4453e2046a9c3a518b507768ac38dceda6f4f22c7c6f53e9883d8ee417b5c89d8ab8e2319fdf3095bbe138be383f96f6710b8f2ed8c442c87f74bc2e916e391f457029682ced19646c4f20313ff4d0de68fa2f4f766284b9aa97761d2e6a8dc13bc286905e9576655b4a31b345d92c9db6d06f9756d8628ab1b7e148275ef3b8dafe0c955f1aae070708dcd568c2ca0225f346ef991698f56b47d5f8c9b2f31feaa22a849050f6ae2e7863079f30f54d143012bb72e97e7b5eca2dad881e544fc2f6000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012d499cb456867c6925879135f40be6e69bb4fcb08dd11dd7b8104a80882224d00217d5f2e05ba2d4e46e1d26b5df491bc65cd340253dc4f009dd7ef5dbca0940190aa91b49dc8e6fcbf2e5fccd51b12fc6f2f5d5d70cc470b39bbf79a1eed237710000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d6bc74b74d75df1d6de673a0b44f33b32ea034c0166d0364a49558a92359decb225589a603dd6feb7c85499fada1a6030139640e3288417e1a54aa10a75f9c437944c737e8025d901a399164c196d2b7deab5203336763081074da317b6e014ca7aee7ea7d1364e92c510468571fcdc794b591c2fdae72f8f19f998c476878eee2f7f822a41cbe71d373217078cf36f92049f744fd318b80322f5ed56ca3d603a7a657a13c7854b2d339d2f87b11c73a966af7fad8364a68c274b6214654bd81e916bd2ae40bf64199655cd94a23c64cef90c636b700f4f27009c75a80023075b03b6f919c9477d870d4407b549b0fd0259c41a6c65f2fdc197f22466cfdf3edc470351094a7eb6579c75ef79cdb85e029890ee0dee227e2bd6cc0159861746322cd0ea801b9a7d0ebf2b2ec2501e0b9408a1eba953d124cb19145c1ed251cc2de2e77ce2104b0ca240fcf36d32049009e0ae9a879eabcf637b7ef05ff0d4a269f42f8448c1912b6e435bae11928e8a30b335133db1c7547b68bcb5c70011b08652e44382dff7b8524426589af91d014f51d1a8888157c78ba10cb033a85a7502e16185d78c4050a78cb75e5cf8f5451ffa593938c8cbd3c59d1ac2b114e02a0000022800000224000002202bacfb3c07ba309738d2ebac83c886f3913a5a51aa15a28e7a0a150bfca1b1b70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014f31af910a12c0a59b9125318bed8178f0c96ef3c8e1ba6ef3eda8cd1e311824fda363fb3e83212d5e83494f6c1ec32d810f6adfe300dd57ccf9d921e1572c8e7846ed532ce4f9c2c2446fc2f25f48d79b2279d78ae769764844e35a4a5e598fba51cc65f4ceef0b1d74bcb17095b4d2bc9ce4c1f9a768a2baa362f021e98c8541ae7c41c444f408e19269bb68627af51fc1b3f53561ad8c7ed88d5b361de5bd0c06155bb0a341aca4efbfba3f44d76e248290b4070bae4ea418bc371e39f1ae6b4f100b31ddc00b37e682db1e13dac402a1077d9bf3ec7c2ac31d0ca2d310f0c3c4d0044c5490a8ecfdca7369bb033b348a8435eaf38e34d894237b5528e6c1d6e3e42593616dbb1ced82f8efed24547cfb51b2e88f5d60dbd8a5a2003c42228dad2fe6b447c5c5b1c2974127ea0a2562ec12669fd860a88937f2671777968a67a0e9b5d63db785eb006bf5781d5eb8db2b122196fd2ea260e3b7fffdbee8094cb11660af2b6a1fed8068f6ed771fd51adc4f61eddb54bdc07ff79036b1e1d377d06364ad0f95281dc25cdee14d507fa5f25f9a53ad76616902c896bf4d7fe3e87f682590b71aa8f7fec78541e740d9dd3233dbabf61045918083778102b68000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012865aaedca8c2755958e5207d5183e12ca16da56078973a320acb56303caeb24021d5caf1e920bc884610e94b76e87df1f2be74e567463d102cf3cef1497b6a9302822ed60404bbe70d0cafeafd94f7964ee52529ef74f3c45b08d33e89cc34fb70000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a336b715b534724e181588eaad4e24b3743ccf29f0562b6003558ed120f8f4355bb1d1352d2f54381f76c9ec789e6b8db41dbddd9ae4925023d692eb44eb0287699a576559eadae6c379b2b139578ffe02e0227b5903b5344b5fe7d8e5b10b2bbfd22cc0a4331b8afa14c57aebf43037b954718141225321b9002c9791f1469ac35634ef6a2b404f3ff93bcbf2b5609f72643a818b144a8323f172a2980a58b8543a7a376f0f807f42daf853a40d7187a0a19b72a2c7eb1054c2c64fcd4fa3b4d762e941b853054cfb5445338b2220e21bd7c2574215f5ec15d4fab0e106242d31595551ac45063b49ef7d4f79bf41346a45c2d74266dbe64afe542a55ed4e1506fc76d3079c4f6047ab2c2bd0426159c741b35de40e66d34a5a89dd5561291e8f9c85bf3cd8ea92b9955fd31b3540f6014f375817a5a2dc153fd8d51e1fdce75984dd750ac91766ece095799206b4990708f85783c7d3a9e441aab6d53770446459c79bcf826d360ec55ccd27fcb0a64ac8cd0e4bac38c98f77cde8f18f270c3632ab2b9b449021231a8d424b0e7c1f2032f742e7209e186e665dde508fbee53da9a23a0fe8cddcfa4739746f3aa69ddbe1f4a025bffa9bc150857a018895600000228000002240000022028338a4a497ebf6abe87ebc0e26e0af9bef3f02fc5ab716e2ee2ebe58c3df849000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b5aa275c8a43403376f6fb25c4618cab66ff2abd7b22db2548dabef0dc43845a7ce5778e9032df3aab3c310b79cf3182899870cb0d85553e7c71552ffdd0629d9912144e0b477c6cf7689bbcd26f34a9bd5ca31c518f26dc03e571392387ffd9d21db84a1da6ae71ab7493ab108064973c0b0441373d05587580120bb17466f2dd5351d7179d7a7c10996ea5bd61bac95c40814fd7ddf45dc5dd7807ad21325b4eb08a161a50d4b9d9707730ef11a0501dabaf2798b33a2b3b47df936e7c52f107af50a7750f8a5f4348c34e55224442571338c960895e6a010f81fbb2c20a81397cd57d23369449a5a616df18e335fddec7d64645092af69b738ae1c32aa7b62d4cf76f500e0fe21627f9ea89044252459022fdb0633bae6281a9b67b50991a487e7f910b45f90fbf5b48ab37317d227b8bf69ccaca5f95c4af03dd58391f46b4ea3ece1447c41bcc14eb58df206bbfb6b725ed0a6e6a4634845e0ef7cb633df9cb4fee8e1b68b5500e4efdcd1a18f5c5250ae5412ca167d8996d2b79038c380f61f189454f8bfdb30e9d10e24568eeffbf3db4cdcba209e7f0f013f5558ad323912d4bef3effd6ea2e50c9715b9865f03f877668849af84f622e9e2e28b45000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400115a8bff479463b0383337eb2d0799d3e3674c12feee8a6c66b6ebbe269d2256a021e8af92aef97b09da5aeedbd801a6cd122c4546263c35b76fe1938f7b10239ec1f7ba3a32442dbdc5f82b9add819510aaabf297a9bd6f6b4c0fb83da5480225f0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c17b1b7c76ebc5070064171881b6a3cf091e5629027cc95536622d6875450cc29333c8ce49e762dd803fd7083970d3eab0977dfe7b38f371c5e54ae512209dd9ec925c5a854103f8dd2521d9c1242d3bc74ec8f8a0469f8ca89c669bdcf736e7a1daaf04cfeec75056417226327c4c39dabd9cd26e7362a9664e87588c92b1ae225fc268076f4764782b7e2e76304ebe032fc2d8c8f150cf39014643f69f448fb0ccc4c0d9d8b2dd7ed94251fa123359bb1f3c0dc8aae5136dbe7e1921429d8dce4ec77d5e5c0230850ce59d824e7b5744ecfee341932ca51997f43bd9842150098dfe6839d3eb19dc9cb33721f11613804fc41f3e5b38e140331312f3946c4cf31bf37124f9e0c9d10d68ba2859160a7282d7f026474da7b40b3d3543b3b387f3c477a685db865309e79ec1c1705060e0921f1c79fa58760255812edc731d881f6b4838dcd137c96d271ad05aac0a305baf2b9b7e865761c45716a50fdc4a1aafc760ac06571d52865a81cfcb0230b230111006edd3ea1bb8126192b961caac58e9a45016171c49176a073104e9500253a02221d832b0923ff96a137702b0db004c5a5f1e5099b9b3989838ea2af15d4a3dbd83cb818e8dcdafb429eae60c70000022800000224000002201ecc1d238375bd216d6dc0adf25e7b5f69827aa728e67658e50ff75a2feea18b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b82cfc42e2ed58f2144f6d20cef23fe7b668548958a52a40f6e8050f5d4457555f8c93d67d4f84be228c38b0cfc50e8f931becd0993018c022aa72a4b97fd092b1ea8db9afe6c7bfc47300230f1bffb2ce05afe7a7485703e4712a99ae9f89011720f7bb043e1987c92e81312dd86071dd667edcfc153ca78ffe18e3c31e420bf54a901ec4f6f7124be6d6d19efe299da775de80e1028590169caa1a6409bd3a64ff47827a1eeecc471ed3bec5246df81311adc5afd5f39fedb0719973e253c487cc6751db8eba8ad7f3b54769aa2a25e20d19bf79fa52bc6a66821e3b930f348a611091493f6ede39695a10a095cd40ec039c871ab184f720150073e54ddb9f7266f45491dec6953df2d2f33cea33f6068cc6558deb7a45a69a8b7ace9625847cc3e9d2ae7566bbcc19014abd1fa51f72d88208ed189818af67c5c9c7bee1b7b03eff4e93f2046cd5c2198af39aeea412436dbdfff583c52923920acedf8bdb5b483b214f049b82fe19884ad034d87da58f8747cab8f9c9392a022ac8b0c4c3e1e42d7379873ea1683e300bf7beeb0c79b1fda73f9c58e8207bff84d5688b6c39b565f13c3cd24dd70806be298008e3ffa369667fd2ded0ba64bf83d490b0e000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400108a056abaa798e77b4986554cb9d24dd6e124562d7acaf5fc1072f567a169ff30223c1cf669bc956dc128589e0f81f5a677927b948e5d7ab6edeb319a6eb7e07110af68aca0b150561de398d6709ccc54cca8061bcd7262caeb37041c90007c176000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aedb376207df9e214e2b0153a3d14f413ea7fbc29c1bc61587535e3f58a0104936b555d1c1281c67b4cdb86f1c7d66364aa8baec1ffb8ea501dfebf8d18180d88a8b6fce26b5baa73d4c8b224d8b7211dbe77745025f4db59d47062ada8663d368dce2fbaebe178ae14a5ff0217880781cf2319ecb87a9a3d09ef3add47891738f3d475024670e33b148c83f93be98a1cf5eac9d7a7a21a6e406c1ec65ab7a9032ef21ea5b762866c86150b5ca13a9a62012d81f889e3457cb3d425d27150af01edbbbd770a37a2b89f778e35ce77f740bb30eabb52a69e4c9ee44971d1c162c5efe74e5d5c3764ac1d13af56c910477182de29b298c35fb038d7d7c593f57b07d6bb09d874dd66643756e7c9192d34daaf6fe512bf7a1309f6a95065ad5cc11fd836ab89cce8ffcc638937835ecfa4e24cf3cbce86aa620090403be9a78415f61f4a018754632fe5a8ecc1c66b34f21d8836dd4f380bef7f7bb879eef3496c75c0996b308bba96349f24ffe79eb02dc83c44b6561c2f16b1ece37d964db9ce32e8a7d7b901bec50360c2f70d775c139d4abe249c54bc5aac24166b4c36a45da21472f514b134a710f060f60b4ef645d8b8ac8b88288b686d98126abee3d7c270000022800000224000002201fc7dff195a5b3d2dac08daf1bdcc3e062e8a035fa369b732b795a33608a3ab700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000990fe54ca4d57ef8ff409103d68d5837007c5a3f2dd941d1b5bd970ef59a47d949348a62895b23d743711e3668305300030ef7da11c09b21d361bbc884b3b8254724c0d3a3c7f76a34f05331dad9a1574635a6ce1d6cc872a5bca95826679a9a1a553d2779ba66cdea9cb82e30ae6e1fb2a8a3925e58d0fa4009ad2cf24e6f9baa12ab67daeed989ba9b1dab85f81695b023acf983e966b795bf0389e761f8064736d21ba4e8de057dffe8c478593594c3f71b8e89d4564c080d5b23f0d1b2c0abd03ce6caf6796126f080c5e5e2520f68493acec619f4d51d56b7c54ed3695fe30ece522d4c15c55e4aaf89cd48dd35de55cf7807f60d1dc06e7c66d36016a08096cda821972e8aa8b6898695e0484f205f74c17c19f84de893ce1e16177774ae173604e95cf3beeae9be3bd44393a0144b79ead4ff2dbc1df841e43771acd9b94ab67aebf49b29b445f5494a648586339f62613e8b126b26d59530eafe4e7ac3dec210e3c4b71850714a167ad1508c564d185cfd0d76de90ec98be9cc5c47286a6e789ce735a4d2ec059d03667309575463bfae17adc1ecee22b450a956f386b713b5e5d1e8be2bd32d43ae992fe48aa13955c08f798854b3b54100feb8e9d000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00207f877f271762a576b233230b7222a71a3f7a97496c46500022c2d971515dd6b129e9256dda0087afd10ab040034e65abaea563a7e79d5eddeffd27ea1fc0bfc02250c47315d328f9220df8d4abfc286f23f018e5281deaf77345d051b18d387811749b071d82502d3d837e5de82d1909be0b9ddf34f21753f0ffd6728f03e9f1900000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d07bb89947c6c80c01c81cbd1f8b9bc697aefd92cb31f36228e16d1b5e6259c7016f57fba74b32df41a310fc966da4870bc810ebdde3f84ee62b40d1876878d918ac29e3f2ca2ee9c7b1be269b252a4c8813dbe5b94a557c7d26ca649b5d1161ad2e4ca688cf9bb7643f456fea44e2416e8e8f202428460cb8e3c18e4946809cd3b3e5a28e1878d31b9b72cbb3e1110dceb67a7194bf548eb432160fad38a87757c409fc71bd18a3ee43a788a46e57d0b47ff659928694eb8331c4b902f83868a7624b81494593404916c2588bcb0d03ade2e895aa466f652d09fd91f871c231419c4af29cf78359f14eaa6fd079fbc9a719bd4bb2e1e746a01a14f23369af99bb6994235a544d7ecfba742f2681ba4b1d544f8fa5df4d9a06cb2cf927d8c8233c45f8817da9b9db53baec773204c732a30e463623bacc896b0d9cb13146b818a225e5b5f8704fec1694d801c14feb3cc50079d751875cadc0dcc8292c3ed58c171b735d4fd74bfa4075886611bd7a76c8fac631cb7d5125d55daa174302e768e6ca38fe3a497f8b3f169e931af6e516b501f6576ba59772af565b3d75cc394b1af0d7894040a1b5de863306b123b21edb3678b930812ed776ec13b7a1ae46400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001935426561d9e1bffe507aa5cc8fe4bb236e7b18dcf3d5c1d1feef693ec7acb3035d5daa613b7c105a35584bf68bd2bf1feed56f13c9199d47713b9c1b03160fcd220861c4a064e079a5fba5a4394a3e64d76a4c57956b3fe675eee2f3f43bce17118e9a27bd43aff12c1aee5660b4088824a9348be1bb719fca99567536cbf3a0eaa4a69471b4479b3e8952a45b57a25afea3d07476bfa626e169ae51904c0948b25a592f6b55425044ea7220967862ad397bac97b8c12093f18f8fa458657ba419d251648d16724f869e88a39ef6f45fb1c9665c5dca5f5e9fcbd25324322607561db4fd48aa8bed721512747f52d60ea647788b93644685a6d2efa597eb2f92d4f333ff38393b25b32a2477d59c716a5fe9e329612a34d7c7fbdcd6f04d97c4f44a241f40ef4167caa0efb5a9dcc137b1bc4e85b3cda77be9c5040b0127f5908b9daa6da4b009040dd1aa0fcc64edc365e8cfcc7bb1e0c6081d04279fe0e7a7bbd48a62dc1c06e9221f6274a2f8171f42bd55128edae557e27083786b201c862133dfe9fbad7298965805cc0a64ad9761eec88578feb9a8f8a365d3540a9df7ee0a91e0d9578ea6f82eaabd50deea4ab19310c8a7148b715a156bd9355b090000022800000224000002202dc8dfc458e23b24eef01668844b3635d63b5c8acba72a0c268dc75bb60e88f4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009182dcd31456bf76034e3f66527ee491060c75cf2e1b21dc2384e6a72bdcc8ea8845158f9267461f28afc4b6cad7648d8f5a01326db8e3145881e4d9b96fac0f6dbc66c45e34ce104cc78b24176161994a6f66ecc2799ec7a94f19c81f8cb9d7bd846ce94a9f36312cbf5f5539102aa0ba699787ceffc8e216d1636d7df38f4e480bd502313e1f7647f86cb2a221f3d716429f90d11c8a641e06fe76809a92b012f715883392a2844583559b1e12b1c6263fb2aa537400989505b3b83781cf8e2e7b8af89c2dc9e1a110b6ccecd65612fd0607065b3be0993b2349ffd29bb924d7e9fe3084bdbaff9ce61344b9e8353f23dfe5e09eba0b57df36660e573b827b157d50d1ce0474773db3ef39c2a7bf986fd436dc69a59564df88b8b51a88af4f5ec9eba967aa3ca6b47df1fd33d8aae772308231174b49a52a17d42fa16bfc2813cd6f745b8bbc5090fa05dc31a46620e1786a565db381fa7406213e2dc2361473079e76aff13955ad75fbb486af6110512da1391c5bdd5a1f41861b0cc7f7f449f4beecc3ce00640d40c020339886d103c5226dc3c0dfb6e6bed9cf657026ff7f31f48713e40df4e8e6bbab70fcb9db19cf4269516d66b4e9b73882befec495000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400102c7e5b9fdca14559f6e8aaa99057e6307acc3874458775c6b316cc45e9823940225dbe92f98c98ced00bfae7f87645eb1e7062a4c3e090fd6922264ff2e6970922bdd7815b1a2457c4a9e478ae73c86970cb8f6728377bf66f9e9862f97b3dc37000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000919d72257c187cfb712d6b7f7ee2cd2c1270329b5481fd00f079b2572e3ede78bf917beb9b6bc92db0a16b414cc279cde10b838d65e065b2ebb9d07035c3f1ed5426249ae69b8a82f05e71581c46a7c3a541c620aca6f75de0d6376e9ac2772d2e2dd1fd3d380b6beb6ee1f93da936f96952967f109936346cb0c17a3e4752f6de658ca035bbe89eb586a9bc8dc5b544720d3745db1c804595bfba8b27b16edeb8f07a5d5ccf4ac1ff9516fbcb0e0d5ea95498fe3b2d9f20aa65f5dc824699ba82fa35b823cde8277f1c816e9c49216303c183a01657d55e298d2ca5529431ed10975475e8a1ac3a0ae5e1491d6f61ce492b8825addc13d5229887d1522ab8861df5b2b7bfeae4270e097a19ee8d3b43a5534689fd9de459fab6326389a57b7a91a9fe79b43deae9730ab9f95183445678191444ac4e04cc0631a9a7c78ebb8f9eaf378fcb7abfc2e6c26a0d84262530fa594fcefdabdbf67b36b160ea182d94e5626662e2478e174552325a57b11730e444f432742947a4da4118d14c5f00b4aa3aa1311be303fc0f7f75c55dcd9d7394cacd6e4355386e1cca40abd2fab6d5309a231a3657ae7d7b02cb4aa2410b4cba0ba63d6b130ec216ff27f6b4590a5c000002280000022400000220175deda7636b39029918e64244004e1d2f84a7fe0c74825456c333ff8ba91eff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009098e2bda6c45137e2d4f92cd863913de682379664f5383387d0c6dcfb9eb209d166aaff0cf35b036820b60b0743e843cf080e0932a8b2b20e13fc7796310aea8cc4b28f076f42866de234dfb5d6e4c8085c86bcf391824ffd610ae3c07442b2d3196a70dafd628b8cfe978190815905b907082b5e9db025d094e356a7d8d9b7a81793716a0b1d6ff66321c067e96c55cf062ca9fc30c62f64c06472cad66d15eec5835c97e3f702306f81698cec6b00c77dc963511b6c5360f1df35205ea056f18ef7f7742dba9ede232c528964fb51badc0bf87c575df05b41ae5bded61846536fc265bc30d72a59883c8ce1c105ca6c5a2726474b8b66a084c85f49801fad56d44b4086e4e255ee259362c03021d9502046ebc22a671c432498ee4ca647fa9e228eb9fcb149011c4cc913a7b372894a1a37d887330c6475b969fa5c30a9e79d6d8fbc3b01eb362225479ee0a1518cb22762e22f45946eab95eeb4affaca24e8224933813ec98226d909c2c6af1080918429cca30d4866a16a6c66852b6add591f29de0697ecf00bb88e331d703af671dad1e424d914bc691e9847dc08102f94fe98ed7787b2df34db4b6490d2b9ea8065f9948b3b03de40cc283c69a0a7db000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0022ff97ec121cfea9007dc3e2bcfd4ae081f6f5c528bb04b9d4ed47f385f03bf862315bf277d8a7a305ff7b139bbd96a3b621b2599e7fc51337102ce84c5e66f0d0227d2090c66070ecb1055c19115c8a683206a721f4c275651d8de7f200bc71a3a2376b06be7bb8ca4d6ae53889f0d40f9d7a585cc4f66ea499de133cd5f44167300000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009468e667d83e8ad1617467992c961dd62ee35a19b9f9c6c5e5a51bf23f3d4e5690c5cb79e364dca63a427d33280264098a758c07dbe79995215eefed8d65ed24b08c12cd033f40f98df98c1ab37a86e5d11f3b0776794702f25be5c058a82285fad2108bf770a3f4ce2b8fbb112dde8dac3ba4b14744ab4ce580b36b6a76c4ddf298e06145a6ec874bc581405e33609a75d053f12b85732c764c8ccbd72f0fde3629a836fffbd7909090afdccd433a61f71c3147f9b34ed8d4b388f6b83b4ecdd0dbec7955dd2eb74bf3f99cd82c9f83790b69042f840990d2971bcd64b8f6e2d66ac21f5ddc941cd0fcdbc2b9b219ec70e3905590839d1034fcc10f4273b06378c0a5c19c0edb40803b7145d16f5217ef338eea665f043e408bb538fd546162269d7e2f13f2bbbb81a1c653b5b25d05423c8e441a0b70eb29d5e7365459da2aef3004edebc9692599ee0fd5c149c10e9b5cdb2977a95d9a7c6d6015f132732984d1603b97962c53af08bbcf0cc4355077fc04cca950766b039e000459df77ae132b0c192c89b2f9a061831490323521ba6d498e69763207f41090eea06ccc7e58d4785e8673d10f6d2251a2bf3108220927db61bae6e4edaea87692ed5a45f500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001893d0e30b040cf1662c559ee5edc8573f04e223829f54bf16360585f16aec38bd177fc7a81d9bc97b75bce7934e7344c8848c6698b3f6eed7cacc7de94cc290ae732120f1afa2b977eb7dd67ef2f1112c58e694d5d22aa842e02e27d376a2294f2812867e22b6198f76bafb09d30c90e4b5df9e1c8ff953cd6402fef3b92ff8be370951fa5cd452548c607eaada262f585c50579dc254fedec52f7d6abaf8a737f37df888a496b64c5c7b6a693f7c5841414e1a943c4e21b1d075ae6ea897a75290adbfe870635e4d04c89f6303148f279ced553c34942f7a67c463c1c5c694b21b11ded6a783810eb6859d1b16a88a570557168b51245aed2b72815dce7a89cc260e1d8b66411ca15183c3a689a361f8a0049b247aca5b8c9511aaf3254a661a15a2c3e3ae1491be295b0afb25129b0ea9e12b9ef84c37cd5f8450eb17b4771935092b44e3ee044a6458d17ca50e3c1123a781c209d2476210478a56fe74c6ff0563e8cc467c4f252e84b42772366713db1b138b1503be701036c000d6b24c95d9be26278d3d85597e1f5a4c5281dde66fbda121f5cac05e563c2db17d27adfebe7dc6d2fa71b589c06dfb8baaab2a6e5802986608a9f5a91bf87dadfc2edc00000228000002240000022012bb1272ebfab41f2102ad2e2799b73a1eb0a7dbb5ea6bb6c174a680e9e954e2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ca14c1ef85025e4f989c184d9e962fb35f64544b2c7fcf437270bbfd355d263a8757d07632f33e985a22311b7ad7410bfbef98bbae21112b3a84b3c6320dc43e9a17a11a42b1021aa9ca5b880a206da19584f7a76b683c13b4b834ee6f65e68f967a88d63d95895e6365e2a7d83900f3e8cf1f2aefcca461451f7d8c3ab984bb1c41c5ca63fdf306d83e3006926b23c2432fee98efb2a6a3e37a03e40414372d46505d55db694f3972a0c635f00c91e66925cbe08ed450efbbd071ab9f5adcf5524cf7182cdeb1b3d8122c5d3381caaea0ab20e40b724cecea4da83e2321dabc15fb25f20e44f93ef949703ef6eedfac1b31fc12f940c9fd130509541e724c447ba682d393873c0e21f1244310616cd64a653333ace99e72e585967757c5cdef715841d844c5197bfdbe4c7f6a8f3fde252f6f8b45148cacbd231cb6e29caf974e4691b044a9a427243fa58908523787d100a89ee728c631a666b3a1f30e8818781fe3039615d91f510b4a386e96ee137c0967925489ee1f4a67c55c7cd63115097d0a33e46ba5cfeef483ecf1c5a687a949535c1e92d105b439af688cde82853bd89a9f31e089570e58bf2a779400736254d605193510a7fd9cdea49c5cfde000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011a28924f19aca9b1e551b2b16c7ccb3e28d748a100accdfaf7ef7e69d6802365022a87c8ef50e08c48ef04ac610985dd6352b9e57ca48b48f24e435dbeb66765a61498d16f94b712f292494874135afacc799c2b77be8284f6a44349341266131600000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087cad626a4f3b87671340cdac18c985c65cc1713dbb8cc6cf1533ab0f049f33d2d8e4fbc2150f52dd01f506002263b2db228552bcfd108270e6a2be22cbf2de8ee5b79c4ac3e8d9f824ed970febea75c21e95f68db52a4ead7599b1a81e170294965bdd225adf550897e2698aea94bd25dbc9cd3ea2af2a7211ce8adbd62c1faaf3a3a9bc7ed87df75751de3697c880025b2225b2a110a865eeae4397b5de66b56899a4d426868508c6f6fef674f30f6c75eba173eeeb7ecaa515b1fa5233687c5a9b5d0b4a3fe165b62eb01545612af560a5b2fff3f3b8d63d92484d8cf256309683285f45c9a7423a25a96d14c061c7a15ef38f0854bc0e86d22d037495122deaec38892da7506d012f8eefa816b15698b8d6a04698d0591ec739b7b00769e935bce2d6c3a5d3a3547d80d08884fbd015be2d46584d29f4879fdd1bc333da23facedbd46000510218a9fa1b54bdaea089754178a709e94bcfbe32c644e837f67f91e78a989f15bea4e60fa2b17b993bf2b0218073d19a57ecffd6bff45a9f5a79b93f79c0bd99f3c43f04bf9ece11a80a32534ce6a95175312089e11b43838eff20cd77f3c78c8029c4f737e6ad0106639c27ea33cadd50e9f06a3b65da33100000228000002240000022011276279d625e68b51be5227037248dec2f0cd0c7c1034fb9d005ef66680457c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d6629561a67c37ebbf6bea7a540d6b51d49a22fe7e7ea0ab9df32ca5f75ebe79252928638c11bbdbaa39e50fbb6fa3fd168ca0f1f04b1805a924a5ee8dce8fbbcbb0910f20ae505484098694bb7ff8894ed7ee3c47e9337c7352baf60052fd56eddbb1d7e35ec587ac47baac98aa07e738714339e26235336f1c9a4ee83861ce9917806162c44e5e4e69177b089949e3e4c7e2d011e01a707e1c26b5f9bc48eebcb82684de0acf26aeaa4916581658bd043703d2bc927799aa2e2d3dac131add82dd0e83f421a247067b33738a821b3cc7d67f5a1f2c32ab66a9af843b11b70af4dbb86b302309ed03bd6c75ec1b21045c600de20de73d28e2e5672afb5cde32a92f5143842f60b1602676589ccbc380559b1672202634fbbc1d1f65aa5a6f34cc537405dc15da2537b5eced95fd2c9412db72a721d23a09f4c80c428a7ccafe35764c5871ac7e7a35f6c2980fcd9617b0724576565ef3af7feda062cd59803b37c3b5546f3687402b62c44c505d4f74b1528e40a884a60d8d2077a26548904716116d747495ac3981e90f89ea976363e5879761804a9d1eee734e95f395da3d14bef24c5e14835acbac5e918f5ce10d1c3c5844931c9b57592542553f2f932000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001083833a5527f64200d60c3339b2f12f270f1cf5075ec0a1eac54cb4e51c2fba9022b9d94d815d3cdefa021be2f3ee75007eec48694f3a58c6d57f6704543e0a19203a48f7e6c9b882a22ab30eb02914c26dc0ba44a379e441606a0693f17d871630000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dffc67241d264ce661c8a87bc0f13da7f20bfbe0404d7a353dca1e957da07c7693763da464bc3c56f2eeff38f50de2da2115f608166a273e8c0f98db4e9c8612d1362d9caf207e99bf3812567118503a81a722f3471a47dec45620cdefad47a4791be85bd380cdc85e739b74da8aeea971bd111d48e052f8641cbe0ae4b5ad34bff21b4566f8aabf487ae50223b04fefe2143c683b933f41de909f024c68561f85b69f76d9c10cb1631f1a7266e85a15072580d5749390a267a3c8e0ba1f1cd8b815eb2209358b068d0b083d787de8a0edc45707adc0e7535284aa5fbb10ce4df2a391e6bb324513cf3ecd5d56edd85ece2a809a1e52110aa9c15c5bcb08ad6859707ed05df3eabfc68e6ac4498ef4e75eef9b3456fc3c63fd47b954e5b3a690fd0685936b327bdc5bcef85e74d6bfb9e6e830fc6fb6cdb2beded1cb70a80c8390f23b9b508ebd7a4b0d326bff679d776c078dbda41bbac458d31dcc0178fe6fb4faa11ddf06b0dab815928956be53b25bf975450e3b4c2145feb357f4bd68451b72e26dd83d4103dc2613b2e50e880237cf7554f5dbe1d7507ff5d991f9cfd0fc926e054e550e2f37250c7197a8f63d5cc392d174b259629b54f05b3ebcb4900000228000002240000022008b1981a4dd516ee514f94e0a14da781220b7e4267750a98b4d8f06a6c9a5aaf000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008812eb7013f2a6cb49087e50267371baf574bc33b7b740079ecaacb2d84c453e3661ef21e914e4456fc2bbf0645ceb51dfbdd973044847ce51b80e9e73ecc5927209112aaa0b9382306bef7ad036e9b8362d3fa6c548f5561b6016f6ba4fc1d80f2dd271fc12301575d90b9dc7e5fe23f21c13f7fc509193aea9cd8d78ce30541a6b72415abd0808a8eaefe5bae1d0dcc170e1c0b7d02b03f4f7354093af684a4efd349101de822812c51a9db44b58a9689ed535f972b0998ed1386a3ef4f2a81d9ceb6a1f26ab2b2e6a9075b21343f11df92bd79205703b570e2ffdef0a0ed9256aad243e45ae3443b1b60c70d18ad5113f9a7290cc200c1183c44aa64ec0ab0947163c5ebdc2845983bb85c13010e28e7d614edd24cfc6d0f4ca652ae7e44b98f209f2a43b3243e981ea6ebdfd59d7ec043c1155d201d18797ea1882815e0165f89a4eedc0bd68063f46dd07c5487b9c103bea7717e742e62635a60f31dfb190dbcf35ee8a554d65f2b9c971889e4158718cd10f6a2b4a92e910f037a4d7de2e3f977edbaf2fb9fef5dae5f997636a3a56ee077598b9cecf5857b3d0af7ac03ec96bae6836796536489b372db83ec207dce36bd539e3e270686cde791c6de8000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00200721be2c571cb6f6c25d4890b3f79fd21ac0f38b0cac1815b5c3f78962fa0d60dd95398a419475b5513edbd00ede5b91996b62a3617bce04d70481fc3e602f1022c88ee8cc394388f213ab86d1ed8a28504cda3549e043283230ebf3a8ad6d9122fca7a29c924671622cad2b4512b7aee97d3dc231a70a9428628cc082285506200000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a68713497b7f247f92037598bad975a13554a4bb7e2a11b778b4098c47a723d5d996480abe5054574ac024a24ac34baf6be289da9f5189dd51ac48a90e82eceac7c3f73a819c58005cf5bb5473fd377dad06b2196a0a2e9bed25eba4ee992750adebf18044af101f8f1913566b53327b7fb6e1e11acbbd318c257ff7a9ecd6be791239190919dc30656a960ca87357dc600cab5ca7e8438c72d54d4bb4a031db50429ae19519ff801ff9fe8dfc1b0bae3f566282551f8e449df83dfdd9e6d740dcf7fd03c35c629d1f4e5e943b65b1dc835c4e7deeeaeb208828362a7574a2e1dbf0e51e505250d63cc93ef7b09a4359e38b0eba527dedc6233fec6d981d2026beab9c46ce8504046680981c0da6a85b93aab023b5d2a0980d358f7680e8a5abad14caa116835e8660f8662179a8fdae8b92d79cb132907954d15768646759a8b56580ff6f848a01be0656f0f09ba2b71e4a3f0b2e7f315d659531ecfb43b6ea3535d96bcc438c137700688d4939397489a850994c43d3d80d6e0930ac2b76267be9880e9766856fa37ce3e8101e42ccd302133450bc3fd0fbad00cb6c4f574d2002d3ad5bbe07a3de8744adc5e2f8b8670d5c0ae1db8abc20b321d0bfe0267a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cb6c9cab0fc4c31a84878dd333c76369fede5988d52f3b92ac9138972978d3403749ad34822dc3c2b38aca1ee2aeaaf5d7031c900dfe4d8d50a30a1552d8271baabfa676100eccd3abe7105105fad655c24c5612cf47fb4b6479c92a04c3f5b8730d2346a90e25a16939a03320470407dc7740427f7a5aa2de081efd27a5dbd597e304b4f6e3561cd345ee2f7ac44a3ea7187d76a2a7db6ac6cba9a446fdb59a908dca1c5251899de711896a33e6a62a80e81e5d8c30d241e96e8f7d53b0a52e76b85a3d235e124504e26a54d82b2f3322ae35c9303ce0f1f5e1dd9839c4c55ac350af7c36d626e25bd4b579cc7b5f42d2913a25c7259abb429953e7107407895e4e834d572185fd7bf7b53883519a03f4ff8767e4a13613e392b8da25315e94aa852fb096f940cec99e3d51a177f6f7a0af06453ecb63b4c496363a5a1e9a06a77d0820d100dac557f7b273e5cfb08932a3b6490b9bf798b155ed533731fdd4e6e009db4c001f4769302be2360daf24ce2f4ab5478d7e5e6486fb96bf52916ad7308c23140fbd1ad7cb0009150ea283a0566ce10c84e14f4e0a5d2a9a5eed12ef144952ecea1e7951617752713ada8efda1bd68e24ddc3d974c304c0b758600000022800000224000002200b7488e83680df252355302ca7810c3d6b7a119c242c5dc1c04c360e36deb89300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000895f2cfc30af065fb9e61833cf647530417e45c11a7ba838fe2bdb8b416d37ffa493ab64ae05f243507a9b133a15a7283b34262cbf9cbf5f53f2fce257a94edc7b4492d39ba49b4757172edd059c7bef37a72ad7e9fa51c13a84f25cf8799ea5d11eb2fb2bfdc755baf959da4413b5fad8a340eeee9ed1b11d6b1cd9082139309371c4d5ecb8871ec73d678dc2716e6c1ae5d67d89d2e6e731fb6ba85ebdff2017e66de2fe5a91086ada0d8ab7d1fdf2ecb433d1b31177efa161a2b2399b4ca438d7186c9eefe56b51db794e5f7b463eb03cbe4c1f8e29a36977ab3c1eb0e22741c793819ac4cfc3714e015a379c3af30c07b4d9ccda18d89e9fd7426ad9a8b532629d68730d96083d31f2b0cb7c6e640b9ff752566cb4ea610830adba025155f55dddf43af76b67472bf211f7c41bf06fdbc70d410bb37b3a2aef8512b970388a07f2994855f5275e310d1f8a0bd8e9cedfac2d34901e036c8c2217e1212196b72674b97843e4813b5261e43099bd3927b759c1ea3a6ac7d4bd17aa760a0223852e20bd96be7d5290bcb02adad0cc2de9677a3f77c20bb73b80ccd65125e5f77a63dbd577f1c8971ae851689563a8fd4f6c8e99eb1f2cac6335999360f641a0000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001154effe1613360c57b13f328f0f80ad79d34816b63c94306861e16e289a30842022ccf298a33955dd808b38162d3e96c9eb2413fbdef44c3f0248acdf5e67d87541b7f8a0508f34522910293e9b20ae39acf4d9182fbf80295828f3c489e5f3baf00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097d3d9638435473109c5ab98f853de8e5f04743c3985180de5f15e624fdd03f32a0e4a0d2eeafe4f15b1cf87b16b4946ae49079c0ed782339fadf755a468bb5d96b723048e71aa43072bb03e4650f440b9bff5919bec51f8e74133eeb8978ecc9f0d0e64f8b83fcc8216bfb46c0fe361e07dfb6b2692894db95b2cd772cdd50ac8cf57f9be6548ad3b6aa028ac01ce5ade3adbabb001afb4d03565e28600e78abfcec2243fdc1456c8b677fae951916983882a65dc98fb02bdf91d3caa5bd600cbcc880fbc25c7e9dce675f67fa5cfa1f36b14c858918d6f4b083c6faf47f4666fb1da9b0c3833e05324df5c733a5141d73667a2205e9cb670da882a9153968beaf1b2e0f0ae70d6cd60a79dbbef2efaf9c95bb472f5233cd6b8832587806c3625c7e2a79ad7a96b1df0a702b44c8ddfff71d72e74ee4b14710549ca94fd5ec561b4bef7454e883ded446d51676e84f017f789337f16a47c4f096c14b1951aac5f495b513bd99a11b76711e2cd13134feefc04a1d57cb82c209c3cb78093d42ded59329f6289c78a54369751ac3fdf0610eaa2295185cb2859186b020d825926c9e6b7f3c4bf7dcf50c2a60e67698604e5c38ac003f9d0bb6c5d98b31a46f3840000022800000224000002202c79384e1678772735aeb8b0ea9b2f7462719e917a27a23b7f18e019da168b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a752a9f5bee5830a1fe970f099cef4d9b9114b2a7131561bc795a262e36cbcd34236586a972d999caf806fe30a2ecce505d4754b62963cacba97161f1a9dda6e1b8a96a68146f8f6b3e53b255fc7f2eb4a677ca0e81de52d3ef059e8a035bf39ab418e372f25bb55b450e4f049dcc3ce47070c78836b737717aa70e2d50ff38668f1e5794dcb5e29c96e2159e8e3bede322383dfa0bf7022d1c83f82d43e4525dc9a414357c248297e2fe8d6532c630339e7a96dc318a3c21c3eb1c4aead9c217127792260aab50b76f9fce850bb250265f035ebfa37573c2cdc1b1f749a582a2d4927dddb7fb72142d307932c08f71949bdfa25974d3e46afc3532949b0b0b40e3d60212a03e0fd1f588eb94188d0c462d959a0975ad6bc4ef81c74f9db7fc51d36b1540dc928990d76b8fa16204d37254edf99bbb8e3cdba0afc4f12ee699260b3f19df5191c22bbcceacadaf544207ec6e05df92b3d37621b5b1a972e621359afcfd9f041918588f84603ec4875b550f39e9839ce1bbed3dfe236a90f6725f794083e0e3560c0985509937353c4f32cac3c9dc71a2d8280dec31e450530ebbc545454c5d8d9c79e886f3c29b3b5b7860c3e4fdec4b427cc4008ab2f53417b000000040000000000000000000000000000000000000000000000000000000000000000000bec47b002083f06753679537bcefb8699ad051f3c73a84a96261f8313dea5bd89313833f22c7b032b13fedc4e458f0501b5d17347cd6532620083d2287d4943b4804720de022ecbd2b26f57578ec3269e56d778386b48f86a5cd60652396375f029df3465fa0f73d3d4e9724dfc158b518e939e4a670701c151b17e034992a38e6a1caaa0f200000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ee52c55ebb27371c65e239f916d517deee958d990bdd1d722c415599ddd40d7d488bea8b1b18d08cfb7e57ef0083f71b0c23b4f4b5cc3a350892f182ec44063d6a729d0ddcfccc32add48a62ec475f65030badb769593ba6f0ff26394ca9dac23c377051130b3e4bb1658fe9aed3665c317cbae23d58464420d24d6b64f3a58cf05df85dfb7d5f5a875cd780c88546b6e00b908e1ec6269291ba71fe56499a18c30807baa7c2bc131834257fc4d2060a107cfe8740f64ef865cfb3fbb1c5b12bb7f75e70f3448070b5f2994c806a59a5559be883b17703a2e292ec43a2398a58d3a2ba058172436bf4462ebfa13dd431728f3a5379b44733539ed3d2bc18e168d56241f829723220f6a8771e3111e7332c64ca5e056cc09d21d3cc05cef028c1b8e6edd1a4dd7806e44e12a18717d3f285d055d483fd565a846af3e5a69282eb8bbde7c6576babf69ab9fe32be66fb712d760c23892942e0ba971e63bfac5a42a60b98373d967957abb0e7b2c409bca2744368db4a957fe13c1299e612e9f3d022581f33f4c5f4497d51f873cdc3175c7d15d84d8b39d7c399415d6091f869afa6950af9c26fd6e0a14cd72d9bde7e682484d7df713f65050e788f159ef82a7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016627da100165957f240e794912b74bf6b2ee8e831bb8b6056f229bd9eb0a3a1f70e7ecc61f2a4d44191518bd3b2d0bdae08ba2787d1f600d6856146b69f674ffb8e9b5e7bc1f5af10a508432f9576510926f945ebb4aef8ee0b4a48f12f165bc7521dee98d18af1a034133fc14e5fdafd8af62196abb5175ac27774fc02a628b1ea4afec8e1a4dbad235e8d221ac2a677f3514c2fb40442c5e15c62dd52b663e6417dc0894dbac9a9ed75b74853f34728df82cf630afd322962fad4122206e6df1eb8a2e98b3edc8ef26c5340c005d0ed032eeab442a77bbc09f01ff83cd290b6d7a4d65809acbaaa8bd5ea05a55dab3be80eb9d2ba21e9d32f5629fa5e93a8a869cab73078384f5a1566d7223baebe782f3e2ca796a3707c541bb874c5eb9a40afd615d7e58e8855ee29b3cc6ad4db392c3743b5eb71cafdfbe62026abbacee058bcb6ef50b6c3df7285a416809be23fcbdd0128911ba777cf925a0da91e7453dba1a7dc0c40a104f46464324fe554418448a3bfae6c9d73ecd93c04622e7ec2e1942310435bc25c443a83a66e4cfd7ef3b5e015dec75c38a950c6bc5bc1fae73cfc29b574cd399369e483504de6a35e121531dfa47513d657ba94486744b50000022800000224000002201a54a435e23dcf5e199192ebcad798f1076e91848fdfe2699f0167634d28456400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042f693e32ffd6d9d14526919d7af166e590bb1344295a29f0e045a14199ff5f19ee0ef9334f0012c653fdd199ebd07bf485acbaa46edf9f11b201474706257801dd7d16cb33c053352316b8064b1fcc736e59bda3de26d567d7cff2cb8c036d1506746e71ca5bf8423d0c5327d26a37fd148cfb3cb4046f842d18707039bc9a6c3c7b7cdb1390869f54e2b79b087b79bbbd075b3097c2527eecbb76282e276fb7020e434626cea18538f1c2f6b88cb8028f2ac0b87c14b079d60c2f5d95a4063b9205d5d60bd7e6ee9ec6f1a45c8ac89cc0df3c595bdb105cf3581be64ab1546bfee16b2377bf5e1fd76c6553333bb53eb238e544f0eef4636669b17113e4999cd6f27ff72153c9732532a3c71eb3659c698bbd25895b41fdf3a94279267aeb197bce0df7ea022ce8ab91b8f8297d657658d32d8c37a1bfad2b5430c6f17c555b3ede74f79dd26280f58a5409faf1dbbec66e9626cf0442cef1e0b4f4aa99c8c94b0f93bba7d614554ae8321d604d6e89f50ef2b1fef2efa252e8dea321eab66ab907045f2cf8057db9717b98d6a478c6a5a6ce83199d10151c7ffc44c5c44c5a590f054813099a751a76d4229d9fe28e4ce5f843fb68625dc971f0dc39b87f000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0021aa1034b5f4c74aa2af654cee0092e732e334f06d9ccd332a439e4113cebb96c11aa75b3e5339ef76fee728ef86c3af813fcd7fdc9fa71b56d5903e84f3dada7022f4b646c616bdfed5e80ef8d791d95a467d1cf356782135da5904033cce098b20e52281331fcf13b5c3ffb823760474d7f773a4e24efce89b4eda2e3a88d739e00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000877fa0ff572f76bb82e9b346f3e9f115e2450476a061487f3d04a4bb47508fbb0536b3af19814deb062cf919ae6f08b6648262a4a06831492ea045b1a5a2eaca1e8d33cd2c62b6f4363963d7c882879401f98e5f7bc7d0359f0eb7d4f788bb79f70166d12d0c8864e84e50ab77fe7aaf839832c352e9f049c08b18690f3b9e487a1eac583e45a0c8275b29999cdd81cd2ea940c653c8c0b7a9c037093caa0946315c62728b3eda06fed047a6947cb02581dc8211fb3bf7fc108c12f460acb74947d4c25ca2a0980c611215a533a34fb6e19cc662a06b28b9e966a06ae0b1e7bd8ddcf9c381e588971163d74995aea3bca10fc443503e38c5d11173ee39b7fcaeeb76beda469e24536554678ba02ad38a240d888800339b648f1363b96651c06faedc8bb4a66b896382bb0934b2e2f4201e4e6b789f319c363993119df17ce728a8e7f34fc8a314bdbfc482d5e0889b298be9e26d545dcbdce4e6de79d66265c48aa152b4f643233be34b3c899dd73b1e2f41fc9afd0cd762079b919dbe4d102d9b9818386c54e8e4acda1ff8219afddefe91638738f676547cde40eadeb52a6f47f6a8e86058f776e1012876cd6a081eafba409f2aeaeb74838723d77cb198bd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000931780aa2dced7899ab150a3dfa9923903f409a5892879e46a15206c5e5ef0e7ea44eb07a4aa804ed3aad93d6e94e9552d558a3188381204a633f5794e47836f34fa9ae8de1b913ceddfd5d3d5ee779b816df774d7fbdec45e289b6b269a729c384468f71c3be0fcc31f0dc5af9ca98e23bf4db08884979a450857b94cf21a8eb8a526b5ad4fc7998a357bbd0ce82840686b6256308dd745401df3211256ed3b79da84446421a559b16d9c52dc2c9ee76d8d8e7f877c9da61cc12d3a7cd3383f4bdd42874d09dcfb897ae64cdea99bbf71a8b49c2dd45d097e049c5d50d16512cdc8f07fb8c1482e38252abcba90017efeeccb3199a3166f8e5134040a7d27cbc45d0740e2000a36b4c115e4191654843de4de67e24c78ee56aa111c29cdc54de327f855c886e5f0bc908a9dd16505c15ab05293460bb5ed0c6404a8253af2b1caab664f10a47df582e4338d37d087db046c397c0fcec779c8f3377c5b6834356d73c9267ffd711c36d92fafb224b1b4286aa9ceeb7ce7f19173b4bb15bf24e13740fddfd4b4988712263003dce8dd0762d059a50026580647ffcd221097c67b4f5dbe03e2cc96cb2ed3be0b3939fbfbe9d732c9f00e0e69c2aed21d26df00010000022800000224000002202a441961efc1674e641b62d826dfa1ab57e170a95ed1966b9702fe942ec97b0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afea899c8b7649bc0051ee0806a4ae2edfdea850a76eb65c6a989b7060f59bc6f0b85257afa87d26cb110cce0a7998153ce382b7e5b2a60ec6db9021d86dfbb08be7fa1a90ff4fba672aa0d1925f32d9a2423d2e9e76acde017e355c6ced7519dcaec23de88bde74a27db9fda1e50c67b5f30b1ca0b93569ebea9e43e8b2f8a227614e2c1611a7f07a80710f4226cd05ab01547a1ba360808d8c922ef537d61a7529d97382ab087333cdeafb98c4d813889e65e825f1cd9d77234c7efd36fdb3199ec9aee30e5c86a764e90f71f81b146934201799a6996359bcc2e472ce31236a04912532e286135313e172738cc621636e6f08b8c524991517193cc587fd6ef4dd1fcfa5daaa2654e2bb3e1fb00f07ad2364e5ee7df5a9009e967297f507041c64bf417222bc4a018c871375673fa4b89c7b7f9791e48d1bd792d1df2b1cd7226c32cde301438f90df5f902182c764fc414e3928fc7543b4bd244a5670505bb09d58ff2fee0ad9f1d33891a78e1adf1d22a26d54d68845e59801542777cffb2356f376372c6ad217abfda69b1f52a2b4bec8cc9ecd89b44d502f257df07df6f6bb5abb6c2e12d107710c7e9296d7aeedc4f53b215beee0fd76cb2ae987e61b0000000400000000", + "2b547601172d909d17552d9f9481617e2b6b2d07aebc1916e81f7d6a78eb1b80000000100000000000000000000000000000000000000000000000000000000000000024000123fc582ece096fc9d55b5436dc3b8a408342e6736ee4cc4b69922ccae79000089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb30000010011cad1b6b7ee5c32c27a19cc98558177f4e19931c642cd6187afb65da67d88d600005d000983bcb60af0112e8d6840a54b6753850d404c47ec233df9c8794d3b46ff5fa900005d800825bed0f04513688a20a73113b41d525a804966b3e35ccf0894be7867dd9f5900005d800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000070dbdaf0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad34c6c017e8d911084d0cb2be711a4f24e6eb7ac0adf18f27ff6ed91ebec635730d3852000000100000002400000000000000000000000000000000000000000000000000000000000bec1d400124f9dd0c172063ae4023258449debcceac7859ac22e69ca9b174b8106c3a03720200bb15eac4b97684eb0a19b6fdb01cf05ddfa1156a22c1a800780fde5af93c6018a559e3d5a5958e0369145b344f5c7de386728ac90eef32e5103c0dbfd1e07800000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082168f34a8e051e9f7ab2c6bbf72c7cdabb003f705aed82f6173e905d1306b6ce0b7dbef87d04292a592cd5c30e951acf3581fe43e615918cda134a294d17647bcf53211aec7561df80114e976e456efdc789c2f1edf8a8b9b79407957ba15a777103a8c580e895fe9fe77a60f92fc502e43cb418082796def040d89897a601769afbc2aea9c6fb30feb3bb7c50ecea7a5ebcaa55b89e11d788c4f3e66f8e5a760dc580b5f1a2e03d3cbaa60fcefec3e6d38890f74f0cfbffe8fa78c3bad0e27d1570cf7c9aaf41be3384d3549a139478e6408330c799225a56eeedfbffffab84c5d0aab13d49ca2dc77e2be89b8107fd6d45535750f6ba7bff7a5449eb76d4f5e6eda7e3ee1184a20b6bea4a1908a2c260e2468889d59e75c2b651ff7dd8c48532b016550948978064b77c02a3e07915a861f39a29ebaba4653a5c4f52b41588dcfc0c6443a8e55da3a2593a91c64534b17575a6bc8e292b3038e64093e8ae366718141c5aacc104bfd17a1d56fa2050e23bcb250063a50403bba19ce2011f4a0ca6c2f50c84254976a050063b81efcfdc2f4130bc2c3e67fadb5451e7d51a2827a6aeb763f8a5a651527d4e582b9b4a92e08a61798196537612f19303fce0a00000228000002240000022021e4950711dbe2960736c40c4ecf05396384f59d70436fb0776889a51f6b588e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000861fe6185a2f1d00609132ad6ffff88e862733d046cc5ddec21ceab8995cefdcd342437bb26acb29bc359a559c5a8d10d97392d8dd39dca8d9d8f23cadb3c77dfc696afbf908f9eccb0680ba492829f11c355e47fc9f8401f5df2fc63c2b587fbe7e05707e3a7706bc5c1e8d7b41ffa9b43574c23710527bbabf15dfb8ae31ec01aa76dbdb7807bc9f529507c116fe1282a5a37bd208af235893844476ca7cd58ba7d13bb179fce470f63e09a9409d55d9b4d71ca8105bee2ebfaef0226b89835bbd201585fe6f0b6edc5bff8397d84e70ef5b7a46b77cabe4d3bd0d049f4594ef2bd12253bbf48daff3ec2bba67be9efbea50cafc2ae8cf7611b1c2b0d5080ad6ef4eec6a06acadcaf82451f54c7929eb2c75381a107284187d2cc30fe141bf74c2eb74731d95dbbb4f66299848bc4b34a66403899fdae8756e48c96242f115ebe0fee78297c5c3b8a65d9ae2606f4d40a4e4ba3ac6cf86e8e903add3818c9ddbfc37bf6d06e591667161dcefb524618a667e40e3c984a2c39387d5c0eeb3264ef39a1189f6a29ae1690757c64a58af4b6c6e21fa6873980f9878adab472d43c2424e2a96222938ee3ee1ec2ee4afaa7f6d3d9036ed91ff0315f8330f390651000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400116295b3f233623860fa7215b0afb28e5d5ff256609de89a330856f6f8930cfc40201f65957b1828936cada858600c055b878a3f1abb084a852541ebadb3e4c946914a218b2666d64af93f6d84c7906c37c75d0b72bd5d04e3b8b236563366f90400000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc165e3b87659a306234339afdaa30548b23d1390b688e3229359b0accea32ad23ec0f3418b28b119e33e5c314ec44566aa905f5b33d92ebb29bd7ce689e8a0edb1f28e274163e271a3673ab09afa7ed28b47254a56c71b4e3c319aac913d795199201a4ef3d3ef48dea0748e892dfc106af7623ade1d0344f1ede5c91ba693798167cac6e11080eaffe4ae84bfdcaff08cff7a337a869b2c9821009350b2c15bb59b736274f14ada83cec83b90994e71d73dae071410726f9c11cc066b3696be8837a754ab0c1095e58345ea7755398ca4557dd7afa367738b2f5686b64500970ba083dc8e146185d8fa33af97c70832fe5a49090b0ef11411b33ac9084a0b273ce85f25a45c1eb2d8537d186941c91dae9a3ad1c699c6cfe02455f870fe1d2f994eec9ae880c768675a9c0ac5c07c074869658074af75ae4a0ec84783b45d56bdd3dbd96f1322a51939f1864641d854400a17a65460b5f450787b560ebd64d2c41aa17de763d4ebbf8a4fae88a8f1c19f03f12cb2a72d609c2fc1afce8e0dfaf954cbe3487c281a626aed9aa8770f060020f582eb018f5b9020911cb82f8834439d003802d7ee8184c2e34c328c6cfc155b0f04db9fd4b028cc0e368ae7470000022800000224000002200d60d66a157b517833ccb695546947a6d3b816cd389f92f44bff80921dce92430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090b5ccc03f903ddc4b44d92d8cf2af9f7390623c3706fbed359f72ec281e82393611c79083c1c33555b57713b314709041d58ddf02e7173968d1e25ad9fdf560329782fa39f22f631c186e435ddc1692917a009a06f6cde7ce400322a4d0912cc15e222fc786ac219277528bae0a8a77c486f08c74b8d493fdac171fdd6b7bb95d73e8c5570b6563e5a3557dec28572017b12f19c8e234aa0ef904ee7a463fb1c2ccf3a51a07f3d5e97d0267b86e943f75fcc5e7c33a77a69eb64a18cd7ce5e33ae74782af37e26db7a78de27fab1aeb463f7e4813223b2ff039a498f68448e248909884cc77c7fefd2453cfdc46965f31ee8a4da91e7a48910ef99d46aaa5949b2519f1047432e8a9ebb50b37c4747979a3023738458ead8887a696390ebff6743d6fbed45c407c4d865fe01e8a3deb15007a9fcd2505a69567789fafc488f6317bd4250b5b5983f4db13d3f61eea40752620d092f13ed08982affd044a494e85e0dd687295cedcc808ea89342710e578cdf9e19c1b5c29953d2a14b3d518e2e3a2c490d4bc8801f49f0687a82aa6a80afe97cf44bac3f4906d4ff083671122fd919b84bd7518e1e41a62d2a25cb19d26eb39df45cd6cb79959afbc526eecf0000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001147ffcc0b98a7f2db4e16fdc18840fa3a271df6f966a1ad3f6f078ee1639e9a402038802b2f7250e761a741599f969ae7633cb2d083055063250a68d8d0d2cf34f1b4bffc5719b0296ba1130e1f149d6fd94325bcfae2ff6e903099d02aad8d7f200000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016c47f1d69d7e4368f5e28b180f05f784f1a1b2a2f99aa67b7fd69647a77d8f7404d217078a0155ee1d26f7e5ef3738b111c3a7dc160e07d118291676c6efe45f86f547a413fec6166eeeb109b83e3c97b5e6918c1b53a939590ffa1268e2a31fb466848fd207998b01eae42033693d0ddb301fa2ffacc16a7d6885725d3c29941770d52b767878de1102b65db08fd4ba284bf068957c7c80b917607efb310a8300f420c08a2267e367597925955a778f9e4e921135572fb82b4ed86275d6bedf4a4cd5b64fba2ccba1007a25fd6b90ce8f807221edd447b5a79f282319bdc043261c1607f927a00d63df5491270a01247869bd57f07af79d083b47f664eea54ba8c2ad18482066c9c62defb7ca1c3081cf84e2550551b1daad5f0743bffa005a315211634e112530274e87a95dd5d7e2826257207c81932747cc2898b731811f72e17fa9ae44f537696fcc4b966caa7e401917ddd07d673a4186aa0936e0c4bfc5c4d28600c0088e719f63f26aca08d88d86ef870d39b0abbf66bfbfc5774fbdebf60372278862eaf77783d120d3bc994ca1233679344dc2d87246b83399ae38803b02346ad1a3665c7e0d66c2a0c93fb3f2d6ef146806f81b4051b8365306c00000228000002240000022007ef3037d1d9f317622e7e12e0026bdd2d1c66adb6ae8b29179236c539a7d4140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084e39a8da6b269cf3deecd16c90a46a1e055c1f2d8fd6d1f62ff5afe9396bbafd4a87827f8305c7a97341ec8b9206674741db8d2779dcb8f134f61816dc49c494b60392965ae530d68a6d87cdacfcc8e8344eadc2e2bbe856642c129f79721c758e88c44f269cf317e77878a1c32522fd680b2c0d9a1b90727cec2419a4b92ff514035cdd7b996ad19a7ba0476b74c2cdb8f64fd9af73a0274af67c09d2c6c0c6c5a882e96ffb25463d4dddd7a0900e0c2833687f3c10443b2d6bead68834db3a20857a10c43ed4818c34819a97ece69bf19ff1df80aa3ed928b9c5bc19ceaf0cf277bbbe22e7f3a061d82b0886c4f81bd5d2129745cb830cd3fabb65fc056d6aa326dad4affe9f3dd529108026fefa7338f499b0046aa6c1ab18c38e1505859ff26d320629159566e1d7113cdc537b8bfffba2d1cf06b767904eaf4dfe2a43e70ce5d139f476f43bf7dbe609760282590ed0facb2529555e0635eabca2df97aa02fbc7254b15686f97907e72541dfcaf40b9bdd6128235bd512b3fe6f82b0fa9947ba42603e8f0825358d3d1d1f4d7c50a07e2a65676ba0981a50586a1ffdb291e46a21973c30813e663c6c0ff9c37dc07f4fd79bdd93c1d6d4470ae7d7024b000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400122fa5ef7475a69f2b94c4348185b0f5086dc6a3aa5b85f6c898264ac2187dc490204a050e940c1bdec273e680d0e9a57e0caca174609e22dbbbc935f2c093b9547197e34266633b96f59d75b590024034289f3835956e9100a75deaee8d878eb8f0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c678153c6a2be4b4e04376d6b8a82229c9e0a550422c39cec8b74653b499cd5ea290060f6515aeb19dd6a6bb7bda2b4feb3bede55fbd920234e450cbb1727ddf7bc5d3e6b18bf9c8c4f2bfa4995067dbf1d5ddafad86fe3c4742223118114d7992c4bf2582cce771b9b40e1795c9327eb4316982d6fca82703239b639d967694832d84761991ef27627fa558f54d9e0216de9de69023b72e787e01f7b1b68c7714417eadbba623797def22008671a19f54cf458d019e608ba5b0c3ba426a9c2dc1fc7b01013ad276155388b36cf7c934c1fe306ca91befa3c9315e8290203fd4e9e94f8cf40324a657594dc22f76b4b06f44236e7d0b21cd96f9cec2c28790307ae70cb6b816a8915e98ea70bd23a4832df5055861437a4afabe26f3ad2b1255b1bbb6de87f3f8ea35cd3d0a080d3990177fb11f2335d02f74d227780ba6b12d67693d0fd8f122af8b20c5231bc2318502f80bdbc87b69de693e14e534811357a87c855fb96b5a5ab55eb40cac3f96c4b78fa9cfd581c575323cd5ae612e421022addf38ffc2df24e1fb6b31e1b81a815f1c56f44fe8df8211aa7952c1f7d4a94c7c9ce71aa5b73c99af85249d9aa1e4c1985944a8d2187dd66d502d3b438570000022800000224000002202e7658b70273bf5d86ceedcd103c9d551bf1da4444ceaf2fb83432817b841f8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a26b0f40adf0560d69eed91a0d5b89612a5a2d36a7c176d4726cabae23a1bc78c9b85d0b518cfe176667b0259b84ff8d01b011d5675a0632a7e23e1854dcf12a9f7cfb096645ae33aceee9aa9f80c5ec276d6e5f71468fd3fd13b8217e7ef6a725b110fa21e39f3abb8c39070b7025b979dd4fc1b80a0f6812bf318087a46e8ff35c2ed46c374a63dfa763de4133e4bd88a151aaf162635945942a6e7dd283d7f718e3e954083490091719d2ba1ded002bfc68a77efb88e1132e7491287870629638be5d74d4deec8f33f025f7fed4b8451c327fdfe7e9c29eb51ebfad12144a5c8c56653648f40348dae11614c058df2c89e76be6976b73baca9da1867d879ebbec74198162353719bd1f0a19e6e4b6e5e21fa7ccd403a1f9ceeb96007431f47fd8d9febb4eca3b567ccb9a77d68f90a49a1c72360175e3d707c3d998fff76f113ff845d303f1bc38635d87edf73ef41b8835c7054e7bdd0610b023febc28ca8e9119e5784eb7fac2cb5c11ef66a0c47ea01f3b4915610a6f33045af5f6c52921a4f952b328bf32fbf06dcf9e51665f26ecaa04348bdf1bfb1853998ea3ba8f9978a8a5eb7fbd89921e231be29f72dce6aaa851d93b51f564dc990f5a01b61a000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400122a980d984f42dd67be63e4bc8b3cd840ac99049d3aaaf7d2e0f7ed85c00b09c020953fadec9665cef384775f48b1bd9eac1e27bb8a285e229bedb627962859914250172f9f2ce6a57aca9c40821a71a5ed719c4cf303e54c9418d5a517fac45380000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d37f66696aa515070af066327867249f5ee191bb2e9f9c6dc6a8b2e0b7816507aedec46be88f99baad9ce6824fd082ed038c89699f4d915ded87227ef84c982b23f94926aa5317c752e0c92fd7be2fe738fdeab6ce96b3b8ef833ce84044a0ac8b09e22c501e256116b9832a64ee1238a433119e299863f697bd2c9ee605b652b31415307e089e2c41f5797e64d13ff550966aeabd573ac97617279a43d6a4b0bb41556191a1b4267d0e98fd551fe35d8538cff89661c9859373139426ffe087a6fc0aab56e4fec6e57db1e8253f6b994b565a831566b3e118ed8f21d76f8cee5bc8f08cb32444bc1c1df7204bed125e1933d4d6a5650b12512db6ab3cec63c85d7c64876d027b79d0eddf5f4c16a904019aef82ca3822c1923555fa72af1d4bf102128e73d890ff4ef7d33b7c625e67c71e9f154fdf1791291c2bae998e9f378def98f7c1b3f47e365867385333f446b3b4b3e36f02832a9dd426aada6c335f6d9c4a47cb05b76b9431076eddd4991214907ef63a1f449e138b30a3f47c2f2ad310cb0841975f0025d7389c03be7707c2a9971f6669f5ca33f9bd2d42815de1726b73c7fae1814b92e52ba10367f05fd70ace8a5575e43a475c6ecd1dc28570000022800000224000002200b19d69f38fe44d0b765dd1e9341ac3cc656dcd62817f757af6c08434b01da190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005a992c6a5fcb3c98dd55291d67b846604c822d562958bbf35852027fb461eaaff6a305d3fb52f06dc753688a97c660f09f79de6929d8127731e4368e9462955d688881975d8d4ab4ed643be3da2ca2b6517e4c8f3ba91b0f83ba5feb47abdc2d9ea49e481b117de394bd5530b054a9b56a548c02d3a24cda231149e301d9b37bcbe044904d010ffb91d42be37fbef1fdcaec5f366b51382a7f10c84f4a7409f875471a23287768c094eb137d2900a0eb398a3c9f0b10055b7311708ff84e3dbef2d6f07d64cffa6050127382e22b904405c858456166bc1d5e40b71f6764093e3b163f17575e4f89a89a1a146c7204f63abde5609693fa93a976cbdb7036bf4518393ae747e9c1087173bf724ffe285df7f644fe134f85b7e283604ef6d7eb38d70bf66a0028d05a7f4faff087e4fea16d4ff39c9466807b81462b1e35e9e89c1a9ddb12921aec2942def19021bc00b322df35d5245358338a23e9169cba151c8122e899e59c0ee82fcaa77b4624ff768ded1bb79a0d31ff1ddb23a6226a32333b899b0d474097e15630d0bfd63ab5f085d504e7c136323ac1ba6a6d23c7d45ab754c7b997c75bc5f3e6ddc56fbcd03bb27ca87e8563dec3ee781714313916a000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0021eed7e3701321ed6110710ec5211c518dba50ceb371e813a21d0d5da1773cda12d576824c23a6ca4914efacfb629d1a4cc0faeedc69888fc52ffc17040ce281f02095ddafa61ada93a1102f6e13095969a53cb82e8e25f8e97973b32433162e94600ba8044f9fc4849ea3e4195dc7769974ce9664baddb61bee8b66487f4501f5600000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6807651e152d6a1f2198b4e8069a8ea83506acadd01dbf9db99e54bf95d7e49d732198159f865b8381ab03918d75e73636a8df807f37271740a3cb397fef089ec01f8456989921d80033532b9444d84103580826e6daeed19309df48097025e18e819bb1f1b042420a48d426c1ca68434ab0d7c3144fac5249b476895615dcb63691f466d4320c2407454f014a777c808c50840e8ac697ec015eb0ebb89b22097e22d70b07ae1619b4cfcc8019333879062c2dd14436dfb44bfc2da4e6ebec1a97213fdbba364874de60bd8fabf50cfefd2f46cf18ff098ec835b2ac05acbc4de1c44942efcecea8472990b61ece2d802bcc6ee72f1d19a0fa68b2440abb8c47444f06f4b85a0203f920db3f825c323382cfa588e2daa4e34358cedbf105eec73df26cc840d3d871b3b684bb1f0e958ed57a95a448897ce5376da60ffc088e0fb3c61c0a3fe9c93946a01823a40ba23bb9fa2b4d0a02e4d77f289a2c6bca9e1ff00cf7dafc1c90b9aa8edffdab189ac3bcd144f26496b84687d05d2310b164f06485e0091261ca81013acd5934b441f6db5a8e9561ce8a7cb488b4defdec94581ceb2cd4a20a97e544d0b5885635048eac82ad754ce3f4d2eccbaec87d430d1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020af956e9adfa02318abd39a71e4d6cc8a9f77909190ec21b9805424e2e8e1c8c65cbb5acc1078827f54e97a1a5ba02e166ea19758990203c84e4a375162ef27ee3de9dc4356f9fffbe9d5a58ed235f0ed702e8e4eaeb83551c416e0eae8d4394d8f6b4681d4b2811266c28278a1bea30a0b645cdb9ccdf16ca0237ccf1e5210a0f320510f63e148e2a500d8337d7cdd817a8ef223df87a4e692790c9dff1e0ccd9df6ca2fe0c70c887f0bea8c06ba13d1604a5d0dd7354b0b4d96a2ea0ab38ddb3c8506fd55ecbfeba559b3f6b7faf6269f82db6cb6c1adad5bcbda288aae49e6c9e045e2837dce860bd67048d344f90900026927289013b508ec7a372ff6675246d1118788a5df3f136f4ba7590e6f1c8d66222204f2021be77781e8faf8a9f4db546a11554bf89a60ec5156d967099488e99be27d6ef65e5aa405d0a6ce965d3cf0a7c80bece8fc3ee86b7580fd54ccebff0f494009b86442aeceb500022b19055d6b0b3bc2d4a9b23a4121a9d9e2418df5102cc04fe0e432c8b6ae1d0c10b17c9c091487b4b3ad558f427d9469c00f06277c7f8806d927e8077810712df70809514cd643c8102ccccc3b947f9b20433c425a9ec0dcbeab201eccc6186d110000022800000224000002200816c46600684d1a90ce20c7e702081a0dae93a9886a850f6078acea4de3293200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af19a644a51f293d7533f0578c2c2528c41579f452f915f779811608305269052b14d9d121659262ca640a3a62e309080cb429766a26988408eb511578067646bbb976fa8ff14b5ff708318b650dd2712a53ce6ce76ce0d01176502ee65fd4bebf7cbf3f208cd221db9bd76ccf8158e596feeb9e6150dff8036cd3accedb915a7e1dfd51143bbbfb7331b0dfc727359bdcd638e89a2be95232ee5f0f0aaa5278f9800e4ef6648024021b9bf087d610d8c35faa83764c1ca8801e02364bf0a98b9c195a9ff8949422dc7c79878e9b43e1f8bc0c37b1e78d9425c9f65f2e76ac13b389ea7b64ec703613d52278581d25f47dd1eb7c35e9f5d827a77214c39893ed813f67ec9e2a06f4123dc3f96bcbed0ff7459f77344ef8fa4a153fc69871ddda91d4d64a5328da82fcd97c9c984e8d8c1df9ab189cf77409d7931f89f6b80d383a519211e33e7fec563a17b68baa94aebdf2afa992c36a11211075397d9030c661f3ee3ce357c9b9e95e7b7e40c0d80d17547ed6b512af101d9a524150f2ee5293b3c843ab11293fb1993b37d66d2fa6abd32c369ea6875310042da5e3da11876adadfd016e971dd00d607ed4fa4f2fd35f7092e547b1afbf268752305ae6114000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400129b29faff8211bc0dff9f689245f7a060e958fc5be7895f502550cd1199afec6020a5ec9de1eb9baec2c1e9f314d094fc2e0d02e69f95f8e1b4bf826e84e6fa14e1d38f5dfd45e5d33e852352de54f3fc5b5cb77dce2fb242d9d958b8787dfab3c00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094aca11e546d44de2baae4e4c5d095369247fce972b6fe77d37ae49da26ea7b5b77b3a7e3ecf12ef308a8e26dc2b4faab64eed526cd8cd3284f7af93f7f1ed16f5ecea1ea8f3282f3a1ccd34740cdae2f65f64698dd69485d20bcb869b7fd00a9117dd8c56da8e5134ebbac589999f7f3bb37b36df0900e6759a278146c5beff0085d1fa342e595e64ac2f3e99d65ef63cf28d8d7669495cf5995fb10d1fb482992ef3e6c6ba021cd41bc25f145b8f6db56caa8de13c291f21a8ca4287f1216a815bc4f94efc1fceeaaa0639a8aecd569a460591027a240aa8360b49d4cc0dba7895a4f4ec8d025800e615f9eddb806411ea0afda9d08a720390c3096c4492d61cae71f98a1a998492266f36d3af08f051d5c4042d6434081433ff2703e180deb708503a79988a5ad44826ada0b1dce8eb9b4f4c9f69096061dd9fde63d03f794acf2bdb97eaae05067bc51c1831f0aa46b061235b1f5f410826704727b5d4c9fdfec26f672f00f7bb64b526a6ac10e7149b54d2ed5bcbd600537c1596c16a7f9d6824d6c14620b1411a325879033e6ce9ad0fed80f7cebf18df35bf514a70a249ef9343f274f98916210a319243a9d69a8feed540677a8bd66802d1a7ed7cb20000022800000224000002202dc7c01de6d2be84720504dd4847af9e26b6049901c070fc05bf1641db15b01a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c9b0c98274de5cdd81554fbf5094abbaa61fc939f6ffb6126498320c8387ee182d398ee607ae23260dd08ed7c9faa7db02d84a5c1ef2700a8f69183524f95b4a234ed44549a0bbf4a2fe330ee742dc9ccd9281c81094e6cff977e71626967cd8db1eef82f2cd609cf9d20f735c4c4d237e38a098a182d425e412c04b934a07b81f1808ecba32748d1809ca033654927be1773dbd40663ee6bd4688adae6b6bf63c8184c89bd3b86cee9ef8b3483a31ec9a805fa56f4d8c5888ffb418f1113756f89472bb708af7566ba05670a34746e7075e024b4ba14cc842a6e11be7f4ba6cb8450469380169e594fe464370fe713ce5347adae48bc6fea4c1053ebc98323d7c8edc55af0113e01ba499e0d2d2b71d8182442c396eecea7ce513fa04b44fad71fb40b2fc062c90ed6e4553147051404956c2e192ab676ecd38e68c0972180c29adea952a4f8d10fa19ebb2f380cc5596e9e10d5379679d6086dcfcf5b07818e6c0b718d53c13482935f30428422a80d6a96e7c50487124ee4f7e4722176566ea48e256ecec84ac75e8b7426c3afb106e6c1430e2ed662ce18eabe06217536eb9bb4ba6102160d034531a00c8aebed97d01e786cdf8930b87a5a3dddc22e6b000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010e44420e646ae6f5cc3345b4e00da4702c6b761b9756dae6ecc0292eaef13ff5020bbcb41d52f1e52956df541b072ce0986902bddcc17dd94d1fac215cd2cf6c920692eb83998899d8186c7393f8e45ad1316b58dc942347a01188c671edc0c4a10000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001304f329a5a8e463f3360072d5b9e5ab3e206591eb44ff59acdf498f962c7851bacb5c543ec7a5c8a4226eeefb3bbe28ed2345ffc20c660f6fadbb37b59d75b38fa3007a762cee9752d1817326680a07c64d5ab828dc7c466ae6741a33b0a78867125da576887d22af74f186ecee563db116f0593575cf1842e59480581e2e3c26648d81eca3c0f4085fc632202d3607f9cdf0dbb090e4929a4a7c869096bb9d1197c5ad6f694e164a23991800d35b79f4bdfe144e10932d8522bf614b7a4a514ce0ff01cc09afbc6e0893492d0ac6d0754b7cd5af424aa6168c6474c01f2b438447ea2c2e0c820c69f4a83a22c42cba07265d2bc3168ca352281ca29dc9c9c58590949133deeb2338059af76d4ce49d476659d3df018540f243235401e449a263cfd39cb549803911fead8a512c91a1f100fd98a8d86cb8e30f4f78872265c4d460fbbfb2d3a874f9f607a9f6c04fddba64b6745a48d07503eb7a2e22b70eb10ded84ef63faba250a1855d6b62c788f84cbcee8305117d73d494e24e0798afaf07594e64449576564cc1526fb050ef4af31e84bbb2e34e5883b3b0d60c1c457cf4e3b3b7aec6c258804e6caf0b8f05ba6a5618d9c8340570ed19faa39bf9d16000002280000022400000220090ce4dbde23d7fc7424d2f4eb933c85881bfccd1df4e80cac6b9c462ce39e3b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002877411a397d2d2bfe910ccdf06e389c4d077960a2298c93d82223a79d732cc257a549606d31b1922d17c2474d29d546afa8ba64b5a918c9007a42ea78bc7b68f1958240f5aba254794734ef3855f5dbc0c071657332955cc2a873c3a080b1fb54f70520fa88d7c9b29b3b6b66cde7752501434b4ca9cd7a392a1c46b68e1d80aa89b1e338aba8a4d0b02f0c3c259f8c8477acebfcbcc8fcc224573933b03489c1ab3b97b8810fb83a76fca4e266f379c99bece2a1e8b4ee02506b898639a4378c459b934dbf127b1c2664ca69d850a3ebf3047f70b2217128a3f3e7da214f008c696d9c92bf9595e263411a976ede39dba2e47e561379ef15e059d514bc321acddc1c6018b2536aa1283fb24f5b6a661476d49eaba2a51b88196bb0abd95ff773e9c207acd623c0edb21ebcbc4475e0a34923d0a33b3d14c36d6e2d432a657cc0fdb020ef17a181e737a89b53d78eda341f0c01bce4dab308cd618e8a6dd7aa960202d4e16d28dae6e50ea500d53e90c11a24261f8c97054cfb18c3fa838a43021402ff77e67eb098a1cdef0fa8500f07cbfa2847fd0f0f2d317e55792a35dc481677f3e85437d4482d08d3b27d7bc754861b3927953921a697c544cb496ff000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010911c12c5eaa5ba80c23cce48a7d8fd01aba39d729eb4d98693f2d24fde231c0020e552b5b929e687b59f2ea0232922002a7135c71de97888b80431dc37d50804c26c10608d2c55ddbd1daebfe9219c9d8f1a33abf4df287e2713487127943b22300000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087641f25fb4d6af002453d8ad164a2e9467a46f63c20160e5b344892614578d3fb09429c7337cd71b4f8a4c7fab38f7644bda7c14da897a0d1231aabbef3547799db999bb6f96148ebf2538a295a34b0bedea25837e5bac9668ba4a37a7e3b6afa5d3658d9e04f808b1a8db2e08888f98584d22244f5e46ee6670f1951c2b93d6cbe80f8fd39f50bed09879d64a2abd7b2428e5f2c3341464dd0ff2373224896523dcbcd8891c37e0645286dde94e9aeba695d3bb33e6e56fe2da009fb865f5eb30114c71123a09426395513d0822d248e0d4568711e22390589cf3be62077eaa927c42470238b5a8fa8e65342d222d18d12296ce77a4d18a47dd5d2f2eeb369a3f25ccd3561ce7090aa27b7ad952310ea0433e12a4c224b57dcca67399fbfc40b6db515cb0d490bb0068fc59e0f7890cbfae532013058a00875dcc70b652a7b9b41d6bbe54a4d28e4a0cfcbd8ae88e78cdb080a4781b55c7a43cada09489640411890219570459bc566d101e9abace936a1814ebfa8374c9aba67c475ac0a29787a6779a73b526fa56e29eae3ddad8151006f5dc5f68d5a5e5030a7811e5bb7990dfe42803abbafb50019ec20f3fd1f9632b3a85d4beaa96ee9139218c6076e00000228000002240000022011f314b0c93aad0265cdc1dc9945211c35b2a9e1936c293b5f8b1ff9ba68dbbe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f394631d92da9be92211f77e10a86cc0d490dd8842ae9cbd0f91c5a27b2551d25342dcd6864ef4bec65e98cc619689599ab5c67263f1e8246458c166c4634db570d7234507d9e1bfa9f29b7d0d7d2984dd73bf3c5ce37b2ed68b047ac777de78484174f37370cf584ee77b882d0af858f30e052e81fb06dce56730a8ac7d7303d4636922cee1886348809633215b2b0b9f0f01bd7e663d8ab4ecd4eaa5ed503287abd2177f9cd4af551bb6db7bab6151f9c991e7a86f628cec2006b04e97cc9e177e414209c9087556f8f5956e872fcdd7138df29261ea3b965ca12b2956a3ce61d68a6d5414c9bb839507d6373c441a3f67e55b354965321b28c02105d3bc67700ed2a8b6eccf9fe7429117ee134abab31f4f6dfb752503c22b341986709b55f653364cd2be74975c457555477f51751652e740e894df697081ac82b140e3908bc5fb196b276cdc6ebe48f77f5c3e2ec1d25342dcaa7ea98f508a3ef3c6c5a54e897e767c2125f7af89ecf5ce4ccfe1d9bfa1bca1e8883be3faf17df7076cee3837b48ef049ff4741dfb08129427e7f311a22e4bfff5c8f824203f71df4f94d045cce4d2ff3c8c308debe3a218b01acfa03557e79891b79fb207e78932fcb9000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001164a1cac0b5a3e89e9789decf306d15e544c96d13614c87f328d757c340d5778020ea0180768936a7a330d29e308ff2fd946f93cbedac18ec73b871b916faee8f11f8d955891e92bb3e673ef4c2a61c237cb169edbd9427b8b85b032fa2add4e3e000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000161671dffadffb47840855183b7e3a925d9bfb24ef5e6836499a11ae4c4e606de5762226330f4025c8f099c8efede15c32e9ab342ac590974b5ef52506460e0b6affc2d44c6187651d6008937799467e9d62ecf9691dd03ebed5041ae18d9fc44e6b22cb467d2bc5ad75cf36ef2124205bf2ef2918c0954368bd5ce08f8365357ed679d630577b41ffec7298bcd15afa0c3528a7798717316d098a55d3f332eef02c082cd721fa734ea9d978d7d59844caf37dbaa9a323c375560b6c6befa34782d913e762bb55028ddb978a53e2f2bb649a01c1a4cd42b1b8e8140448cb26da90d576dea9a7cf6ee467670e85c3003dc1ad4d8d9479c64ac03503e879a498cd3aad9cf7b7831c88cfe961d1b1fadb693ae85fc480d50fa51a0e2395fe8cfa7073ac031d10264f002cba4b7287da2404a024b3f76d244083af3ef8867655a6b50e36f1763fa88e3a9bb26d119f9dfb28b3ff33252bf6307b74d8976543f8b0f400f5dfe6816fed2d84aa6aa32ecc201d7b277dbd24ee3a816d8ab50ba5f43b4e32477018a6e85a4748c9a773031a0ff3031b9214858b799df2344a5aedee9516d3193979e91bc9afef05451507566094fb0e7d29d5cb9142fd5ed0d78752afa500000228000002240000022016e36647093c5a4e24834389aa62ed974a92e47064a792d4bac33da63d74ecc1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008123b038bf89dab828b50b441c9c4d6e61264816354838e9ad678dd5e0418a7248285d3559ac4ed38272555d0a5464998541d8bc48824affd626b4c5becf19db9d568a555ff2d10413073a6bf8814ef4955297782e1a955dfe890be369673174dff966afb3f81b488fc993747ab6d6a0e4b9f34f3f991badd879b12a290851b7594c6650b7c5cd2496884c16abea1b4fd0a4cdca4c7caf1d88ce0d628a30cc1b372e64fdcb106adaf061ef9497345ea477a50324405c97fc9922f22929f5ee60cf8cb6d90fb7a2eadb68fa9314470bcd5c14d9ffae2616739315fb52ed6728c4411733a74ae3d1c7faf0917de6f72cce31c567628ec821a04254f251db28f55973faba8612df9e4a0c75cd07ecede81b884f92e3c79a52ee138f9db3876508bff74ddabdc148e34a09698ef1fbff22b7aa93896da6d1e286e37b7378719904bf704b43832adbc66824cb3a25cdf7d9dcbd9a2aeaed1653a28c0a086046d86dc2c1ed9b1c70d1cdbcaa70e16bcce71551dd1d7e608cda03af18a1f2818317c7c45d583dc0b1354dd89732467d162e69d4a9d1705dbf4052d5e264736f213677b9be4945272b0e007fd86b865e70fd5af8fe9fa170548930ef1f87ce27b7e976a5000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400127b481f31f71b1ff6b711a62f01e4f8efc22762ec1ef2f963478fdc9610e86e2020ecf67c8be9fa35a534ed2cfedc08cc59e3cd0c72af930abe019e5d21c9ee990171c5b7f985a4dbd6a60cd7dead602b75e17692f3008a12284daca6b4da014d40000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008679a5211fac9b45f725a9486587e7f6ea2c56c4b0b720c2df2d2cc44bc557b61f1fc5788b9212ce901329449566e520b61050232b62a933288ddbc291fadefc46813090f9de092066c5549ce73f1bb61da635638033e86ee72834198b0f0a4341dddce823a277bcd37ce90c10e32a142b42d8ee62f93c2e4d8c928078288cc44ce09bfcd7452b48e0d7134dae632a71f434e4dcc0462f8364cc748680c5f1527bd1136441136974b5ea536c23d8d3d6432eb6a839f87cfb08417a4506cca3d6d5ab2af4a30ddf5ea501ea95f5a19d6cec0b9ef62fd28c681e09c6426c7c017534d983e99f92a070beb8b56be4367a4d015d5a81cb18721dc5b6701574ace1cba1b03f4a3cb260fbeb6c7f5c2e38c0ae198aa9d6d44231e2bc7ed6679cba1d74af9ee7a4d4dca88a5457bac2ffed4f28ef2edd7bac3cfb07b991885341643dcd7bd51aedadc2939c7adadb402136acdb0662af34af6bc62741ef0c7da775b3885a9740f6417a850451fee2e3c8bea98ed217c7c942a60b869097b151a4186817e3e9599ce732c7dfb7621b5e2302f49ecd603a1d71e9a2481f6c440d3b49004f5a266f77b72348547d78c353327c765a3e0404dcb59c54952ea4f7bb3d0695db0000022800000224000002202b83f221b47ffbee006472f7b697163df1f94aa9f8cd6890935bef6d144da59700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000183d3ca2a57e15bcbfdf1a62b3a0c27bf1a937ce4c1b59a3f58d635ae7b594bd542bd87f5c14c85580f9d5d974cefd093d4de00708087bb71a8aeba775ad8428b7ab49f6c8bd5478f3ddc29d69f48ac8650cd841588150f68b3cac62dff5c642cddac2e259e3ecb19a7f5fcfd30448fd1e7364066db79a8141c58a433118d0a535c7357cd2a798ca585f7d79db296eab446ced3eb02434792463f58aa48962fe11324c3b18ed3a5b3e001634f9ade428c21811238f4abc4deefe2d773d7ee4d9fe01e18548f2c29407ec0ed2c488195f211702b25e31ebb704244d1040c3ef344506cfca9a8854d31113790ebc28d59e39c1f755b93dc9fd3cd1b37c99350b4ab3ca8b95cbf6cdc3fd5aeba4017bc1a7340acb5035bb8b90ba78deaf245e9fbdf26c6eb2cd2509d152bb191386c378ae124ff6f231daa20f8b6b97a88eacadb26c11743b1eacf22d9f4cbccddc87d562b0ca10a9da7ab386b7c94706fa167af4106e42bcbaff6da27449e7cb0d5622fdfe8ec5a6de8dd8283c1571d9524533b8c5e795243212bde469556e0de35337aadec5afc7aed918001f94316cc1829418cf43efb00de238acc5eb39e49d6a01892200458017e50bc55a111ec2d67df1df000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001240703d1fb75830008a68e29d018ea37dafc09efd13628c0ee7853b7d26511e5020fc4c95637ca0cc26c9158919516d4dd62c404a194cd50e9b924263e16ad759f2ed226906fd75c4088c065c46b4f1cce2d02b719b582040e4d62d878de9ce2bf0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008efee7225162a88f35e128641b566abaf24d71ed09a1fc65da1adcd0c92f3fd1520fd1ba4c5942807317bf7c284fd1036e6d59c033d3ccf031f4721baecc9b4c07b1490c54a96b0ef8f3beeb55838fdd888418707a2b8981ce829f939bc51b58789f9a387e4bc496ffb6c127497627d80033dfe82c0f3fcbefa2be1cac1279fe1e2a1f8d40dcb93393c653202a5847b8aac3be66bf7656d06f9ab5f2c7460a8a776131dd1d5e9f9205efc1e468943f5f0da6ed40ad4972f12b0a159d420489f2ce9c4f9f2659c6f511e4aa9881c58977f5d2e50d13a9b54d56de827df7fc2fd8733ace6bf6c06f6cf8f424330d87d7fd0a48c9a8c18c0499ad96fb32d6261f10bac26abfbe0c1076f09dba6f9180601b395b5ce3d64e1cb77840fb0afb59a17bda0b75ad3c9d218975e9fd56354eaea6cef5c9d1ea97982f7af788a53d3b606175aadf579b9c2ec5b5aa7bc1672ae183eacca1ab3d02d014e634173ad2e60828fac450cde9301c0f55809b86ef5f25fb6d51a9f11094ba0056648d827baec4ad304586eea5991c87c25b76ed44296919489c9372bac75b7892e7ad5f90cd1334694df041c0da1c6bd8052dbb4277b3ebd56e5f3eb070169be837e174a8c7845f000002280000022400000220193898f15e43c08aa361ba6d8ee5f82018d6b6bba1d86bd856fb209404156cac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c951f0316837dfb141188f863e6145c14553c33ae945192efed60f63b743105d091f71ab7169e4974b7fe4134c01fb10935862490d3b5f4ad455b2ae8c2f34a5a1e167f34110b144a9e860e4085fddd412f99373243b54b9104b223ea3634606aa1bdc88643992c6e7e98f49c9d4a1159c136c1b2f296a555edbb9b5e9c79d8b3fd6ffba8daa913a9fc0da4b3e663b588a994254fd205b6566a05af8effb61ef546d720953885193c6834b62b0cdc4482d55b18caa872a9958aee7f90248633dbb008f4ae64a50e3c4939734d42c569ccce298b5bfdcfd814ab8cce0de2dab67a762f7d4533dcae057a81d84f218f6f17449ca693967752932f30455ba813d73bcef66541159cac5515f071d8f3f8b7d10b3717f9c92ef27e72d2048a2749ffa440f5afc6b537d3c9ef0bd7a79685f85955d33a78997b375585bbf40172689af414309694b5ad08202d8815fa06236fcaefc9d6d56747e172cb011ad382196db477ce4eda91bfde1e551c177d8c5ad6696004d3123dd218cbd6514536e34f9ae8f03328e5dae91b48bb4504aa9e8b124550039617dca76997e9cfb1d20dcd3ff8bfe45942c34eae328a46804b2f848e752b3bdf909427de546c29e3361d6bf9000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00211775a57b2f7a91ec8e9f901665f7443095ff3ded6121d8a3ed61ec13defca65202265226d94aed4b67bec822dece211b5f92cec6fd6a10518ba0086dbcff596020fd367b21050e49339045b8c60adbc37a2c8e4e80e0240a4dc2f2cef4e53dc00288fc01ac45afad8c6e92beb8eb48f4860527309f65ca4deb95f301ed5fb6d6b00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026718dedfe8bccd9d9a7a11367e8777012d4c51d477f0414f7531f5087835010df671d71990d693b7290372e9f0ff4ead7825b2f091b142ba4a8f9b92964e4a723ca998c0bdd72e908cb17549c6b0d30155f5b28b19daeacc46c525869d502a9cbf2a986c35e6b776e9cdfce90f0f0fc57baad9f09f0413bdbd8a835a55e84e5c2f2e26ffff077047aaede127e0a7e330e8006f8808d97a0f42a3d96aea30438872529b07fe09d024c4200574cb0804ff9bb8f4d2de11ab1a90498271724ab3d1477d62bdd915a96958a7360f1f8629662dc97f8d6d1b361a66c30a920228f758a643b0adce7461b1a32b941b0aa366c566be243bcd5c3b3e3136526686944d52c9815d8afb919d7bb60a8f0e5f6dd4152d56414f32976a85bd13f562bd293311dd0d564d412c097196ca81c16dc94c47a8f7d7f33633777da5695e263f8914d6edf8dd68ae30aacd7a95b5200885b3182b82559c5ec9f58ea412ce3cc9c571cf07152bbe7aefeb2b0466e86de647dd3c572a8b2c61d01adb62cd403825370c06276a7749a43c1500708a66df51b1abc141cd7a60fa25f689892f7a53d29417a320a5f434060912a35ac796420c20366b238ef78e97777db1f262202edbc6e9900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e2b2030163d8dede0bb01872ccc1620aff70d367073b5026bdcbcd8397163819243112d7dca87d13544d9a16daaa767cde054610d390a25b95b77030b89d499cc41c3e0b12a7c5fbd229abfc85c8802859715678d43e81cf17fd89ae403cac752e7d662dba3989d142d02bb9274117ebe15c7c0fcb72b4ffcc924746365f3dc086999f16a9754c88c7c26a639fc84a7e146446bb6d72806c70191aff371f1e0e8f3724a11d84adfa2597c601a6b98bd1bc5351e9317989e6c2c037d68d65c462b898295a90479da129ba10e42ae6900e9b2940db0af69a56d30bef78882ee75012dd35dedd8ebd5d83470670e16bcb5c89bae728cef705aa3a9cc161024b92c49c0f2a2685606c0d7429459f3c71370e0ed5a8efc14b2fbd15708c80b67749715ddb5b92ea3e92110af9707811edfa847e635e3eb918042c55dffd23a0e6b5eb094c664c4d7b039055f3cf155a5ed068a5f995d75d30e4dc097a18d0b0912595f6058cedeb71d94d129c66fee42bc3d5afde42db19647c2d7f3f70b154d595db5a253ddaa6b12589718202923b2aaaef6bd14d63bddbfc682f10f8dcdef8fdea71714c4110db62a56ff8358ce86b4fe20a81a493e3c83e82ad315a5e49493e80000022800000224000002202913150bb442d552b664e374d06b0989a820ddab031a2ced51ded40b3f718f4e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b16262f19f0b1ca1c7b75ab4865671c218cfa30855092b9cf44a0c7bdb0a98c13106742c4d0389183fa0cc2f014e40c5e6d1e4c3c673b8ded1d566f76bf422f52c2591480b67544a6e23e2dfb9e811669077ab7a25f8a916dedbda8efcdc25a40556ac5e19237a7fd981a10e9a9f12e5fcb3920f9c84b14c9660ed494e9eacdccdf3b19a1b2aa119ecc4f3cc622a4922da82e8b61a175202c13ba1239aba98971d5c64406a877a70e10b111ceebe935497f0c3572c6253fbe01bcda04a94f384fda2644a5432f6c5356f86ae6c6d9db8671ca76b1aafb1c0c1a7ab443e062a40c49977ffddcda0dfa12f4b79e57d27ebe68d38be4799729d25344760deafe2f5008d501eb4a6a3179993a054e808847d13aab18db2bd70f28dedf84738bc94c267bbb104e1a29a34b68a0a7ec0dba583d9c04da832ba4540f635092e9e98f73978f6ae543a1669fcbde8bf90260b95b3587a19372922b105809080f6e62bfd12fbf2126a4ce5fc777823d83edf20af2bde1aa399075cc2dfa132a8bc5178981767cae6692b130cf065393a0b445ba88afede8706562eeaae59a3b4805a5edc63c6b45925745311f2a9ed2768d6197522da569d3268b6297f9bea6d3d850a11e000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001031d7fd0c862e523c4452d07af377a4ac878fca6b68da929154c70494c58854d021191c0dba439b48170415d19f9036d80a45f61fb6f8654a5cb7d5baa16143aba2e1ff87087eba6611a77f3ed653f9940126d2dd399fa493072a4a71ecc6dfc2e0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f622fc14027b1617c9637f119ad01ba2369e1530ad1217831d631d7b46d0fae901a87831b01b349699a75d57432fa75a7ac2b390396f4a771f2fd15954e913067f3ba8f9db94a773fe02e893e6d504f2d0bde5190444d59d38212d56e94b1b253dc7646e5ecc1f9f0699df5e52e5669c205c5787622fab3513b7013ff6916c279e93d188ce64a2f0432753da9b106271d31981048c623e3923675b085e14c7454af0f449a395d46c9bca6f3d2dc717a0e64d16d6fca8555fd7cc46b3be5a61237fd54b1854213b8a1897817d1b838523a6eabf55efee0b6b0bc63ca21432bd087fbbc77daddd5ac9842b2b197961063b533b6575745caca082268cc3d154e34afda4c33d72fe92e22a361ebfc212f611b652b45478afec3c006979061759a06645611fa0fb1db1ed16840e8b7b0ca53c9cf5d83dd032bc348253a00336c60f75db4edb169974fdf71de3366d08697c71bbf62f38b7dc2615e3b66c1196959a030a887f10b8b7d33372cb8b1ed847e567bafad60bf2235b2b4d91eb52805631a3cf15bdd64ce57872b6c42f933cb7490c0de76c9a8302a5fa98770315229792b3ee77f568a5eb005a46f629e73b81596fba5ade74eb62815e464b88b5167baaa000002280000022400000220105273a0c096f74c308bde3a7d4a0305d17adda5c5a1ad7fc9fd429ce4c5e8380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093f2d793fe16f0e62d8336164a2a11692c5188a1fccbb262b43f7259bc1b14988001875582bef0fadcdc91441f63e665ef7292b6256796a64d11b0f8929a7256c7acdf3f7dafc37bd966cfcce743f0fd88ac83af42fe6d7f3c7cc4b2b28b6981ce24c66e94810dae975576074bbc52615df7af6bc25df77f3889626a4c6d084c545f0f8104866bbb9e87f8552cc6e18b06088ac2993e78f2474a8b889ca69dd3dd193b746964bd0c519f02fc3acf44ad68a567d01025421906f3c555a2627cb7428185e6baa4a367b8a83d07035560f6e80792d8c5e562b0610f5e7b4885b67f461f4b3138aaf6f50378027f340d471c9a938b3c6ae1fb13694082e7c039d00e82a9f2591c085be56a22af7fa3da071f21a0f0a0e62c78e7f629e661fd46bd7233a386f2af7ed0b76ed2a67f46da166743b9c1354f7e208108105aba6be2ea78e20d8b0b4ad654fce26816d2666be08493736122e500eebbb6fcfcb5baf24663ff19981281c5f9be058ea8c1bfc770fe8596e2f91e9c5a6976dc8bfad6b0068e7a10949a6a7758ed142115e0b8e1f46d802156851de5233c7e76b3e338bd37fabd11cdb7d4367b7ff054d31b907ffa73b588fd363d309787e8b31c739e62c6fc000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400123f756bda8e20c29bcbca59a31abb5d2e99b0327863a0046ab6cdca8e642acd402128d6ac743afd33e60460f1826e944e69dfb2de30d59a8f1956ab820e7f4409923f8c8cd1d12ae61346d2f0e999d12b924f3fa46bb1d2690d176b47723a36c61000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000301989d4b97dfdbe463678a39dfcc4b73fbaf697885e08c7a4f14d36d2c547d54ae0fc781e3ff4a4955c020833a8dee95551d8c96ed3a3abe730ca2a78eda1e989364d64a1e2b3173589b498a9fe1371d44cf099fb73fa4b079598c878e1f54785fc79e9d9d217373c3006a87e6c70d93bf23f51ed5310a981e3b328ce3b13f6fac640ea3d6138f8f6177c79e18497ef4910351a2577edf255812e1b9381616ab2a6ca98459bab2d49ee2afed029cbcfd0cb6a1dd7a062d0de73b987ec8dacfcb24e69199ad5b7941d5973f8b873079e658b1476bffd96dacd8e04560c4001691f8d8a84dfa116d905e4230e0d069e96eedf34436ed2ba81aa2fdf24390128efbf558dd6f625ff450688f7d10d868dd8f83c9927310f52eb784029b73b971deb1cb56d0e26939fe2e82b905683d0b4381ff948067d81028175cb823e8e578214a3117b7a1edd96e019a0a3c5ae24b30df68a3deb980d09e6e6deadaae1a73bb051db04ea9bb88deb03a15c10c56cf90388b836f21a8cce5d0a5194efc8a4657e37da55b5324c1e2fc43c1e118b5212947ade3df2a5b2185198f769930c860296ba37400f31454f093e01ee58c104e4c39cc205017d18e3047bb39de1c8bb247f000002280000022400000220000976a0f39a64eef6db85c06d74c549cb87152fae3e97109ff56641cdfd6a1d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8df8b293f477ba0ea96b540a56c5a17105fd17a60473aeb22e2466637eb14ccf1145fb352130d080abcc8d1e5850b4ef92979dc14011694d5b04f6ae561ebfd6a0f0d484db8aa711685658fe77cc03f48da5ff638f3b36c5aab430ae291ce7eda376e7f76141a827abd02757d0bbfae879e5fb65c88ed1ec3094ab32ff5664c6d4a91ddf8454efc42ccc636d1ee1853e02ac9c216c91ddc645d3876349c4675d0b06d0e4a0443c445ffcde4466935ebfd4e0fa815d035fda1f5ac8a5dc8202f1778a5f8ebd05522a6cb0e5a08941fcea3decef943f5ded91c04dc71f9c575e01d187f90bc06ae713e0f7a8f85aec0ff2972b1aa31d7bfc0675a6692ea2f38c7f10be0fc69fc923de9db69e2baebf0a006ec3541347f8e049bc7e0fecc126e6d7c2f9af81659277ec0fdec0b911b7a7f96ef2c7988dae3b5ffd3e9df95a8302b9d402128c1f760437ae967259ec97916c5e9e24172f04c011cbb907107d918913dfd3d9aea67137213f1d31e430ed106dc4034c17b07b192986ddcfd1252607ec177e6b4f455fd96fefce14aa1351c3782a96cb0456b7a65298152327f3c2961d8cf4081d5079602a5e550279c2f46636a602559350d37118cd0a779d5a1c213000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0021be81f14dd16f2692d00915574b1881a6fbe8a8883df768fabe667e4db7bb7a3289e091ab018c4fbc3b6d3d7da6e2d941a0902c4d8d807854008bb85afae86c802134ef7b0927463ef4a9c8c8cdab0cf3f3fc6c01629cc7cda4851f9bb35e02570175c8fe62ef9e8a11e97e7e7c2ae16f9d357d48dd15de75034ed6b20307a8ef300000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083692da3f1991ce5b02e63424181b13d082c134f88a630805e4792a1d876d5585f5f11e0c05701120f977e36565297b19b59612ce7dc66277221de41ab8c8fffaa13ec9d3d5b1f7330d3b09d550c2f61a9ac7d7f80c964c8913751188aff0f116cce5583477a4e333d786f23c927ef0d69cb81ecaadfbed3c700e8c9c059ce70441fdf059aad7ad40f56cdee87f45e71035e7e9d3b010f2a4bb0c5d8fce659c4cb2508c7a8368aab058088f22f432f6cd8e7e35ed6b4eda5967d2acd715e74d4245408a8e8d4ccc8a089ca418493ce5b064322243bcd91e3244d1bde59ccffe79e8886ef63c18d83b243e18e994703e8662c54843c9070a6fbe7f7dc36e9fe1cd8d57f99e75f5a19d77944ce46fff0eea5c313d306279c03876f3a95eb2880a5cf73da4c868402067efa3d895a54f161ca4c6a4542fa167f8df65dbe203f4fc4bece83fc11b8bea85ed2c0ae212f9c60013441383d6585d5bb942977197e8c78d767344743181e81bd0b00f0becdb7c8f350ce6ba3dbc0d72aeccab447f5f0a6b64549d9d791a52bcff0148e72fc047c4eb6b537638179b83361f105c0eaa46f373d3519f9ecc3372d9f3d255a74ab15e961603b27bf714dcba34fa3ccc208810000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000874ea9b87f71574fbca491dbe7996e6f1d4e520db081193c3f0dcf99b286b8b313221fc74eb67bf50c30423bf9ea6325e107f32bf0ef3cdeb026cd59e3017a097933258e4893ded2b317d4dbd860ffc94cc32fe0ebe08f12d34ffd9fb3b9ee7df05aad5c0ce10738fc637bea9ce321f1ced6b0d1f8383ad1715b70a7659504f224da47601ff8fe9294a49ab777155d13be070871e79ae59a6be5be402c7d5e6049f322e82954c1eb56523d66a47b8ffe2577a7827e27c5261cda12fb031142a73c6db3030a91428a9d9b567f43d67193e402d18f8a3b5f907ef5cacbb187b9acdd8c9e3e74de1235b6ad91ab7f0bf91baa37e3d79db9ab1f98585871ce142501d5e2b6c96ca5cdf3f1bc1ac0201c2f7c2d368585a7cc794a0b39c3a5b4a630a0f00a758cefc33eb08e8fe9373c307f33409d8b5b197725f802d581466ace7a07404bec5ce3e6945261255dd31c93b17d0ebff49f4cb5c5a5268492dfd2f74f55e704bf300aaea10c97a5b5a033e80044d453e4eba39a86e11460ea3ec33dfe88cd105150da6fe9d0fb74a09d15fd317fed1b4f7f50ae9259f5bb79349805b9374c576307c43bb8614c49da7c5e01cd8217ed910fd25e348e91ed9aa4b0193a8a0000022800000224000002202f5574ed500f5508f695670496ec4f8295d293e9c7222b304c7d52609337c3670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006203c8a6b9efc2f0cdb3fbbc9f25340d36b8a8abdafadc3bc059bd9358807117136ebcec6a7a3cafb853b8fd2102b932f330606ceeac41331ad4cd8c7f92532f18387f52f94e521b9b990bb0aa7861763ac0064af3082aa5e5c731366608ed333a78956f3b318e96fed0e8f5e60d6dd9deca919a889c1a5a8f3e277d9bf824957821c20404fef415b7670ad82f899d100f6d1b342681a694dcd93982b4ef5c5dfaa615d41d9f15a19c61bf79a601ae7933a1867a50213109e798403833c85aaf14005b6ac6bb20e0c79a8f2dacfc53f7c96d62075210f2726162cbddbd59a35b884ba36008190681ccb988a97da4d218a2e16171fbaf86f64f16f11b3deb15caa2ee4e5aa4a9c17879a7e2fcef9a7a93cc18517eae66f5d7a6ef87ae39bf5aabd8fe04835d45335d11d75224d85845ac27ea226b8cae2f1cb63b7ac31e16d3996c7f8067b7fc45aff6f8f5cfe8491890af8fc26c24d822fcd93742ef437852355407e6a4def2ec7bc32bbfafcf197d4538e4efe1eb63e77cb950ed88fe32fedf4e21a7dad082f5e007498998db6c99842b05d19d7ca94968ee59731f2d0fc678dbe5a05c1ef912d4a7e58e4d806d52098b5f1faa7a1fe37b30c72ccbdc23218000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011c1a16f71281bc92ca32b0091293c370dd7aaf30a7aed6c3d8ec29a9aaee939d0218be0abd9297dfc865bddf19422a698d8ce067b52b43c3ef0aad91eb2387f395032913e84abd144c6970806c7729d8ac19f0875781f5a1e6187e80eeb81ffabc000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab3a219cea37b1ddaa603c27614b11e04755932aab9b13f6977d20138b396b854176434de28016846b727ad56f934e74de4cb7a37bd6357fc27804cdfb546a4d8831ebd9904e772d298982f888e5464dac0e2e94674e7df93bf3caa6c8ef13a8d00d425aa43c5472aaa5591152c3bbe0652a5882c223c5d06cc6b4c149beb44f83cb14c3a014e7ca4f98dd2ede3af01bb0f565d69675cdf31a19ad7691ca02d15668f5d38a93db4d1a6e60196fe88956b81ae5f6724418dc60235da18dd55fea5d1da8afd00f807fe0bd473b00f326fae04a210d9a18fbb5fcfee4ecc6ae71df3e7e215e6e1fb92e3be704d5e821570e9af2f71b68475d5465488b47ca4ea4787d50afd7c8e7789f6a0ff9b3b281cbf537387991d166e5f1c123c1e371c237be9bea0ffe593620f023cdb4ca157944ed9ea302bca6afee0f6c724bb08f29ce3354593cf9618c054c7cb1d662604094814112ee84724fb75d4ad7d3d4f0effb3b8559e874a3da2e7713056a2fd6e1b96a2d83a4d5fdfd58a7e1d66596c955e0af1f8ccdeb87a40c25fad7028ddf451d73d60a7642c7e9cc7ca1650e77d618aac3e15d03de8666a0c589d013cd323ccb4e2a362edaa1c9b34621b42f3d2772b8f30000022800000224000002200e5f2763b3b51e98fe5f03e69964b59461c27a2e7a72f3e4525c45f5a9928aa800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000073d807be3df10058b736a55b9a2558d7f0949996ba5b466cee600b84e8306ba6353dfa78f40162f24479f898b651596872510fde2c8663a153131eff6fe66fd15d2f7de58a36a49ab306d9fc97c93cd72edd4f7c532d555f14e497289636b8619b993091247fc3f49c2edaac0172ad1fce744d5687898504b5478bab64709c6491d0939ef6721269df0d7b110ac7e07f2da4a265c1c63213fa4d726f8e431843aa961dd5984f550ee268d8efda62b9a1b0e7896568e114fb804e40a2fb1a1fb3ca02e9e22a3d46f5540b28fb68b925c2cbdaffdcc4494b556664abb2a5974cc61264cac52102cdc4da043fe857965a69971b53c9e0b8e9657fedb770ac0764f4d38bac5033e93cfdd335182daa0c8c214d02eb1b7c0750d6a14f35f76e7598eabad7459ffc37346b8f160727a581a908fc3ff29491731b6c27c819d8200a639da0e42e27635813eeffef14065ff4365349b26a0ab7fd5c15d20b69c23faadaf67ecded909c9d93c93949e24a70902c4d927b0385383c20fa932c2251f5170db9d8e0f206ca88444f6511c4b5be0000fc8facf1986070c74ba665d8248bee56d139a7fff4b20e63f3e044bdf717a180e7ed61a745c062634c3b9c2ac8ea30bd6000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011b821f477d13efa580d07ffcb82f2d98f42165d091d1262adace0e63d652da5f021999124a2e5b9bcfd9e5c5dc46f90d3c4c5daf5fd120a3177ee7bef38ccf5aa030411aa57c95a89728116c45f1ccf9b3ffad07a95aedeea125291e23c1e71f4e0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a9f4d38563235aadce4ee470cc1c32d309b8f25ddb8b4925243762eb12c8594f6dfb9e51528a488e2d8dc0e04776007437b141ebd9f191df4536d197c99ea704c3cf87f263163c34d10559e0ba3cfdb0c6082eea051247fa01c4a83953cdaaf336d0753dfeeb749dceb412a46daec4619d3ffd3855d1f5a6077d54add7459cfea4f2a97341a9e0d43e71565e07f981e3fabc678eafedf701a8def9bcceeb129269c95eaa6f32f0bbb659f3f87deaf654c7b03e480d89a02398e17625be0b9044dcdbeaf4b542353af878705c46ab2c46efa07af0a321e120ce1741adaa0a044fe455723fe65d1dfcf30f08557778402feb097940a1ba0549fd2d6fc9138ced128090d552ac4882edec5decf2674d16f7a87e88c55932be533c0ba07114783baab6c72a016259a89a2939846e5ad16bed569e44f86cfead21fceb1d7d1f2416298ba13ae4d0ad7e159bb5e89f472b5dfe49e09a3fedd2608632fa9ae337137be5b6e70bfb3d4dd18311f616794c32a48ebb18f8b51f9ef15c576963e608162e00750a7f260cb04ac79935404574452d460f897efdbdef304b35e461d13c3f5d2babeca21d476495d01e18375dcc43b90d274263ad023c7a4b2c2945a82b4eab100000228000002240000022028b0f4c7018092ec01f5ed657afa9a6152f2755f7e875c3fbe77e0eef39ec7cc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e5e881c8a61cf08a3ca5b13d704b1f0fea574a68d232ced88e45d5ff9c32e34c5e0e9203f28ae3ea567d7704b561cd5ba5f3d790344f690f09c773f53c7ba17804cb84c9167418041c478ba9cfd0ea5e6520c59c2cb436e1a71448ca0573382de9b23d7e8f5481563edec08b214a32ef90c72a367af75617c63d9c5155839c59971a4c9d5396c6eefeb5a2f8a1cceb63e14907f3cf8ab69abcf4fe0c1e83b1863d6ca00b7b752064f18f711c22308a338413d4962f72127342be95339b74aa7bbc814dd786fc1b66a8b1ed386331261f9e73b1d58d14691268f5c8f89300cb886dc666a070ae50cb2fe288fdb4b3d4895ae88b6c96f5c7440bba32dacca9ffe3ed7e31c2af89c369d85982e7a0bad5d6189ccac45c0eb10ae0857386788c458ddd58c07c87c6ed5d1cfeea5720ecfc58b27a11809ec2996c40e5b9a559b42b491f9a8a67d791a75adccefc8da15e3a60c146786cab3dd6a6580149755d742dac3c28da5373b4ecef91d7e7fef6613803af23715904d3b6e2f9c0f3f99c0c9c992eba94d929cd299c9929cc565443851308958fa38b98b19cf12fe9ead1e0261e913441498e4b074180432ab464f8c3d18b6e40cd81872ca0cfa5607d4d7b073000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400118fc56c8032f1949216197507c1827d0dbd191263e423dac8e1e6f1db29a31720219c64f7786da9891cde0f5ebee2dd824f6bb8b8774aab0e27f5a6b0044041c1026efbc2ec72f1af9bc761f613b7ba057f917eea9222286b0d7316294ca0ab09900000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085862cb15f16da894f10c8d6a103a9f36d83d15ea651b906e19cae6e1419a538a36d4997a9e9e87052d638652118dfed0d27901393874ed76169d384d1791ce7493a9868221ddae794fd9c96e879a197da18e779095f9fe1194fc84337b9eff9406ae02651609773ae4ab220907d9919c3ebc4bda55a40e5a77c7b4c4bbff318938d213c537fcc3ee589e0e9d669abe0542b0608fc05a537040e02a43a13a14461389c38e4ceed5ec70b67cf327408e1e3ef3cce6e019e8d31aa88366fb8b3ce91717aa09112a8f68cd4b5523dd8826449891c0b7430d89ad8dac346a70280782535e675815712987d1ee5cbbc39467ee108230ce977aa8b59e6b974443b6d8d586b75e5fa3b50b51b4b6f99c07b78621bca01d61f907c592b99eba16a5cb7d230c103417fb8bea14c1be01fca2a5e3ecc3ed5e7dd204743ea0ac6ad32bbbd9dfd38dba973fa3bce3dc65afcd9314086fc00852620fba48076d025dec3f6f819e38bf069fc419867cd5135c98c53614b43f11d1c14f8b4c4850eab9905ff57d278169829c3406b47bb505ed0d86890c03943e0225462728c31275c224166c90c5eab55e20d1d765cf0382a9bea9883abd80180eb43b00a65f295570e60417c070000022800000224000002201466c6a3616fb6b800df2e5318ef10882bada9c455e9b7f362116ae485c4fed100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070cc9ca5bc5f01c1c1993f451c797b1be7985206d7e287723f3b48afdd43d89de14971aa2e1b4fd58b10aa5e2ef1724e28fc0970fa63f5323258cde50d4f4f3376d121deac56228897c0b213565d4cb104dfddb77e4b50b0d484f43b8b995dbd2fd0eb0813ce6204e6b6c3cb0d6aee45dc68b1aae7188baf5e0978e9a803dd5844e93fd297ef47b140a106a788cabea2ea389a203b0f5b828041690e2f4e6113d1031a127af6643572ba267211833b7978e7faa5ede82b8ae0c0b5f2056a124f728245ad7f9aac1a0528ec193e3ea13c28a8aed604ba563d90526162267c11bf50c8526f2d5a8eebd94091905477ced1d48a88098c940191e093a2a939442464118278a81fa7660958d2014c97de90933aaede81f136f584bff19116e2a178813ca0a5b88b676e92b982306bbdcdc80514f1ed2f4744107d80bdb52437702733be231fa3cb9956d8699fecf8f7322c5116e4fc0eaa99ca1b92383d32177ac0ce9542769b46dda260d4badca2602b6cbefb73fc487cd6e1a8ef2bc716885bd50a48afc504da18c2b9c709c06f18368d6a46d380dc4372ac61011e2d95f0c028ec0e44285195514fcd3e7ff745f7b4c55a231f127e38c1b3e7e139dbc057fd502000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00203a7294523052b7b14d7d812be4824440b6bd736ac88256b0fbf69bdfc5a47ff1e69e2ab5829cde2edd099d1df5cd78c0c8e11210be85b6d82ae00faeae520dc021c00dd188f4d1dd81c07ecd33b814eed1d76bb3279ef3b1f66d8852d700b08ec286e05d6c3eca85098959569224c6cb65696b7d1d81f9742544e26e4976b089b00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a7b2f606e5cf214e93c31cddca40498461c4f77f2308d3267475c4585e9268c88028b8775585f81b3d71d4f0be6f803e27456c42902e8dadce6a18aad7f7cc3ea04609410d73eb83bf7a7c913e8ff60115780a95780b8b7c745bf7d7db8b413fdc5c47147791c8c346c4b504e874ae0c786ea4832d9ce319e14f23e4e4a5d8909b669c961a7af2c05d2007ee49df361a1c44a5c8848c03211f5c02e3333e229f02a26761ebafb555075e62c03a3af2dcd42e4b43e798723a7ccbbf3ed4540f87fef8048d247c36df9ffff2819c395f6646f806549bad11bf3568b7abcb9ab04a6abc49da540681b04708ba3cc2ea54f8087b52f5a3eddae755330be86e27526854632bd83b5d0e735f314f837a08d06b142345087cd761f354c4866d07dfc34102db80f3e812e16c410b014fcfdaea4f5097e635eedc5affbaf55139cca9e992eb86fe34a5bb0ed9ede323bbdaba94a9fa3f72ccd87c7419e4b23a7f485fab316b44450c8f46ff7da78c114847e4e8c04c5d6993339df6268f876891315d479a4a1fa9432ea9e83f1cbd1fc579a9f4edf08c96e2c406c7dc9c3435fa3357b2dac8f3b378bda7caa70872e4812710cbd9dec4129920b5180ca03a4ceffe91a290000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000accbcbc19b2129d49cbed1f894911a2402b0f4ce23838d3ad990d64dae7b9804c9588271696f90895b4798a095e803a68a7a5787e0d273ba4aa12f09758ad13c0335e39c70b2bd40cd2156f05a29998dc48ba96ac8de8d410dc25fc453b2256c6a5fb32ef5067d129a17a49fd4e45cfba4b8e3f101f0c2c96bb94da0e9d97fb4ab58e1d786aa064470857f0a5b7d489cf5084d38bc081112f390ca25461afca8698ad1ba417d6ecadd2c26cbaca99c6fa630269a50f5075d09f5c88fb69176f1193c5b29cba9facb3e18a6db6a97d37a86124bb0a2701d7e787992809661e1d35b3dc3b7914a8be2d3a7d82e51bfc262d13054ba6355618c823aa76f324337338c068c70add21b9500273e193443d176546e8effd8b2c7e0b5b1ecdbba74fb37d68ca85d52ac2aca550812e07eaa778b841cabfde2b709db57a908bd3fdbd86e562ea99dc4665396bd4a90d8d0cad4d10d457c98d4f9ac99d85978649b21e18c4bd1932da176c35b167064cd17613fc4d560a10aff9d3a329cb57b7b120391258475c9e4e310ae8d757f81c536031f33eb8e422c42d94af06bee9eada00e26fefa4f1fd1ff3ba055933a9ad365ee476b2ac65b3b0aaf4e53a1529b75bc75077f0000022800000224000002202716f2748b7c28a8c125581493b416a1117829f7fb2bcddcdaa52803ff8bd3be000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b91249a2d4a351e2510908e711560453f01e195433f7b04cedf26f9153f031b998e5e4d43596a74955299f561021d674afc4db0d82c81a69bcce4bd8b468fb6095d83cc304295a6d1a564096cf609305d5af4fd833114f47e5728bb0f7e1d8a4750d5c6d2778fd1ec78b4f065f67c3b7089d5fdfa16181f071e4a73e343468a9bb740982eaf3b1eb12447cfe28dfdd4caf011f7bd133e186b6b0ce85314c494628102bf761b5a91f25e72fd91880fb16df3f965bc615b520098757360ac36b2ac58fef5ef4b009b28830e7db3f97eeacf42165ec8880635c5a1081c4655bded147af8455d0280dc00ceed99313947bbe2aa6b88003edc65b7ea297bc01eda0ccd546234e9888df4eb61e90090570512a8d93ce1f54432ab6318395dbb0487477249b1912dd8e8c3ce752e634ebb7176feb5d8392218e44cbed142affaeeac5865d1ba7db6b624d40b65459e9f3fd9f44befde5b0da5bdad714877fa47de0f62f252522424721fb9cdcf1b03741ad427412a546c1199b11c3b1236238b4f44a5633d837abe7515349b2926e1558ca42f7185061a4cc8b528f99ef98c0882610aa2454d590abd035e517ab4a94993085df4b7e3632fce0856c2c589da8244a86a000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400106f93770a6d7961c29527e52a2bd56ba0335238b723f400b5ba7b4fcf068665c022041f68b894561b9e3a6da569a3adc3b669836c039a031f41ce1edc609ae0ec62a12aefd440299020e3f4a8dc0a2c6caeac1671fd861bfeae1b76df90757ebb100000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012922eef4859d44c4286b70a2735aad2ac7f688902ea16823541d125c6b57b4001b7ebcdcbdb7ff2e87a68a80f457d155bc41d76b39b9cf4e81901f4eaa32ac58a699ee2dff0eccddc7b2c71909461624b0b154361bed911cc00a665c357bfde30a533d3489cfea24290e26370c5c5c4e46e5fba3c61fbc423a1fc3ab4a08fe04e46e31e377a59783dfc44dadcfd38b5c14837d26d83c63a07ebcdc2dab4d29e32d5525da02717d0202273345dd6926d35545fcfc39627c11641cd4065afb1b59ddddec3c8b796598387ba55cf3430fb84d05126a329e55bde6bb860c0238047955afda68d5191bc615ed749f20a2ceb898e270905cf4145e71ed3d85d5ca0ac7cf5117cc4922672ccfc887cc1b97aa3901b1d0771d0565826470360f19d48a6c2a1db18cffc2e53c4c82447fe2de7146d712409ce3626bbb2260bdd21d8a5b6a4e34247e2a74afc95e7f12391c60cadd9e022f9efbad9c15171d77ed5b97207f877bad768330612505ccb947ad2dd37e33e4899038d7e2cecb1eab7de093a23b90a6cb49e6c45f8144eadae823d4c5f6af4b667add0a1a8da9691432626277eeb1bac7e7f0bb2e9a3439cb6ca06bff3f9471f26092541f7e9c1e76c964f27be0000022800000224000002201ba48154be49827949da633648376b679bba548af2445fdee4bf6047fd9762f200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000801c05131bf65a2d831c3e597462b1f72bc66f5d134503407b8671bda183449c1f5f77ec51021a10abb3a971989a61434c625a81e34b87c0275ec094ca27595a4311ff3ee9db1542a2cdf0362fa2ace3afb1f79bcd8bc0fb1adfdca4c38d191f1b82efa7f32ef4fec64ab9f8417addaa08c5463e826c0e9bad852c30be04179ff33efed5af149d7644a9d2b34f7acf0445dc9b237e1c6cc3d542ecc18ad5a10b5e61a6fc068880299fd25fb40d4b4a72884adf80a938ab7a5107e439e68b022d73d24b7815da5dda64eef6b68e749a197251d4e05d9db90f84938650616efca2de1ee0581e5269cdcc679bd60f958e7cdd2f6e4b049313aa953e128c7a7a6444910789f43bfee322ac6b2a3350241f9c0576b929c4371b6f3420ab588b7fe2508585bbfd79e5ab2383ecb4e6e402c29b77e23afc2db67b4b3c035ef403d45889b0f11765e654b907f5154631bece7f6d899eee8dc41294f2519de2e87bff99ebd66d7dfbed7641a9e40af6d71948e56a998d838415f49265b3fc6b69c89d05703e9960e3d8a1a9cc002e4e17391201d2b59c1245c936cd865c5c54b899936c1275978514f9843e80ca8f100c9c751d0c04eae31d276b04b929a62341956ba743000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400128af19ad3cdf08adfb355467148bf52f222bf980f7867a85e1857bf2f56201010220e1e502a4731b1dfc1eeab39829c57c66f585cd53588edd439b8b18409a5b3d19c502a705563a39b4429b68bab9dcb51f6f70e806afa9f018f9fba847b1d66500000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028f08b438050c832f5bbfe70c73d2e76f2d431d198e63c19f96fb35b8c171e2237565a1c76fff6d573c9f1dc601206678fc53f9ddc762cb8c010082ea35edd6bb527846886bac81400449daacf0a1a7477bf2b70941a6013c6298aefe897f8fd3c12f713033e18907f5a2f6a4ee69be7dcd885c501fe41485d5a90c8f35af3b7cc5d2ae7f589731d443e3f3e8cf3d773dfbb879b9b13506a8331757688449d1916239ae2af7f6af7674a9dadc04083075f6bd342d3f27e9a89e05e42832b5d2f14a1f5c858e38e30b533c57dbbd1791f717b4ea1adde4a85bb7287ad8da6e1b595eb807cab0f8f3839d26e9cec87b34848a8622fad6b49810b8bc12ccf861f4ab6031a688fa925bbbedfad2933f4e57985cc1ad8c89a0ec4b7e8933ea268bbc912f1134281234a98efd09d93e190ecc8f88ae9525e31d75ec0d206a9024ecd01444463dc5a2a28ab1972328cc901aed1a18b39b5a77dd7579c3eb18e9d83dc423091767cd605dabad8a1f3d766c4590896e229742b907b88b433c14531c9edb82ec963762b2ccc8814376ed1ba4746640617219b1e29a61c1cab8ea22f2772089a18876700a73eb85549acfeaae22833e3adfae477b8db9e03fa6ece1234a60e0000022800000224000002200c170887686cc54c11b993dec024017c40a2e0900d72d43542da1c0f1e5032c3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001806c37b34a6156900e3058a802b2a179ebcf35e0873042c874b645e7b267f697ddaf8feb8c90b2e993f7d3db06446573998937876c152a651fb6e4e3f61542037ca2a02bdd36597727219943ffad8c4ddf5853f1860985fb351225e52fc4fa95c68d2a56ed0f695afebf33da2646a36de6ae9fb118925fde6a8f0b590b5422aa4fee752a06689af8fd7ed36b628b6af0b3a08196a23918c9f4773afdc3276a3dbd72ca73cd6a0cc8a96e118af885dbe6323e9459fd55eae2f79ead3590888eea8cc573d5b4af2d41fcf8e694708551426526d903e4ff0d85baa9bc331ba644802b260f6ce04a8900ac73b418fcfe90f42c5f748a07937fc2a866d19550f826674749a6d1e473645ca01c71984e90782ba23f5bf953549bf06029e6ee117c4075083309a93765e8008a36bdbc7b088aaa548aea6834aa2e0bda2dc99d04d3d6c35651594bbb85fa19419f19b0425c0a4447eefe4245deeaf70928f729a46799b95de97ddbe3d562a914f39874abdb914853fa8a3d0c43ce57193c69ce44e9de06f884e703b4dd8121ac1b87b6dd9f5951fd2cc00373a90685a2fac680d7f27e56d9c69cd93e3d1acc737e1b887fde3cb7a0d4786d8dd114c284d1a8ff95f16ad000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400101d3ea09f43dd6886a20d3bb5df07fb23e8b46294b7cba3a633412d44e4bcb5602222a46f92a219c7f8e7a9b53a5ba23a8977bb6fa68afa7c21949ceb24c39162f09db899e8056586008e56545911938d2e11abc0eb0c8d12bc3a86894fb6c42e1000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000196077f04af3ce24b860bd21593d8ec668a259dc64cc8911fcec4a803fb228a98a710457e9ae06424d3cb1b967528a0a5df73d2d7c82b404cd84ef5824f2a9aa0c334dd943f7631e132f835662a616a8689aa412995abadb3fe1a0b8755c94747f18c5b2d6afa1cea8c6cb08baa9d71a36a5b862d5746a75e7f9bc7a9c3c3b5a681221c4b6bebf8785d7f4bbfe9a65358a688716ff666f099da57f0bd0c2924fdfea0e8ca3d180642972963daea50d373e42134e70379474dd379bfb06d7bd12c78e4bbff4de12c81fe345f37c769785909a4b2a528cad8b0338b66bf311d08aab9ac2cc105e9f2cf3852fcfe88e70c3971d482be9acf29969207fd9f05f601fdba086572a79a2d4786c3fe86db131f28f19009a73ec49d2ff34081fe4ddc6903fba4f503c01d7d2c0f0afd9b785bc81917dc27479381d1389064598cf3ac71eda9c4b777b199aead68a43bb346668ddfdd6448c30ba186304c3094c7085c51616748f582a3147cfbb468cc393aabd2c5d8cecb5ae2c5e4b69460926fc2969918c586a3726ab5553859834969323aa21871637516dc4d06b8c44acc4f3fc797e4469acef2061f7862312246bf811dd5b49850c6ec7bcd1a135f0b9c5ee3f707f00000228000002240000022026fc8f39598f105c1b03ebee0e0fb40dcdc7b7dba3e0aa69d985f70c653977d700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057bc4133a796ebde6b7ac6306a8626367af490057e95be4b94ff66d90067a90c5ea7b8a4db63507a99f278baac82f6461f99fb3136787053a3d25a0da85f3b3f77f8bb825c09006184e243bbac8c4e70e3d91fe746af8ace3db2abc628965443503d822c1984f39d33aef16657656aa41df63f7f6d7d4ae7fc04dc62e8942a9e8334209968cde691f9f5f0984e062f623e969b64fbdcb6fea7f48536f45e2b50dead0ac8332a7cf051fae23a5a9c446cc601a34324b93f3b01b3f064a026551d759f45f759836c015efb0c554d270ba4a5be88c8df2c7eac8d22fc5b234d4dca907d4757e3b9edc88a056220ebb7c59a587d71b748e291552874be23f4758f099f803e9a7dc7baee22b0c4187fb069a0f3582e787807d1f115342cead6969ec5df32f4464ceb0804e9b4d3b0806328a3d008e794b8a78b4601b25c7e43b917508df528a01c6d9f81ce5494382b3e4122ee62ee05a7d079c5bec7942a59f717aa49f1acfeddec6c5add374d45bcd604d3aac241369003630e645a00ab9ddf89cab3b343ea3fb841179146b594d0409de77efcebc3a61e76b9a912b9a3e8aaa44edcd5cda12ce4fd89e1a26aabec277f0017456f730b69afc6839fbad4b533ac5000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012e637854851df7cf3970dfd1aaae26d2435877864ba71ee454af3cd1cf2b829002231c3ff76d8bb73892613fb9dc00cb29cf0eb0561e560ecc6180c82c07580a430bc0ab2c0efb3b357a73383ae9d05f773fa5f9bd30d2726b51e2785b3f0ca7680000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009afebf2762478f112c526a31c9fc930b6cfeabdd3bc4b4d42f856d7b6b78791d59f00000ba41703b9976d015597c41fade0a6a0cda3b6500e3d741633a2a921a45c3fd8f5d6b69d7f7662945e195b451bcef904cd940745d03e299ccbeeb510a5ef685db0a4ebaea40123bcf54342618ca9ebb073681b18a3c4e10b699d5582249a90b02b3cfb4ab5d6cc38777519f8201b5295d2994b00c87490af802e3636b959debc418586e61262107cc0c8291c1de3507b1159080a7813798acfe698570daf4eb843d581d27d675729ac48a8704b528a92cb9a736dc3882d89a4310178cd4b23d45f26467e1cba96f0232be16c753ad5450a9b50f6a34ab142c0a6d020e58c76cf69eae12c389f2cacb24b48f8658f5e7b321d3766cb0708a5d912fa96d0eb6a7ecc04dfba8d23050bfcb5cbc3367576879b961312b76168d91208f4a8ced7958e9a99a85bb2c951dc337407e2a6ee9dda8fd703df03189eeed0776f8476bc44a1b70e6a5fc8dfade1494b1ea4e61b738829af835d55c395f7ef1fa4b919c66cd1d3786664c869b3e9f90be96234e0f999281e3e59c49b22f50c2beb949dd4754038c0d9040b70d1a47751313ab2f3ca62af1f658571f4efb525f7ad25e000002280000022400000220202c01b7e001c2fe7374e93739e94352dfc3f4fdeadcd8816d217e890d6c49ad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cf7c2de566ad572d45b7cd9216810683f5b8914052d288cc0fc2bb5d0db6525436ca0aef6ff40e5e268dd915370e249622d48e4ac82bf7d11b463cf2fb2613f0b38dc2ac4def004142fb3c5c9655d932bacb0d3fb304c15b254713fd0e8eecbfb98dca935f6da882a95f9514689e70a870a91a7cde4e5bc3d30ce244d2c4964281cbbae15e1d0677c84454b93917ef16492eb2f16c742704bbc22699e312111fff8739729fdb568d9673df58a3ea369ef0c1f1bd99eca0d6508f8f042f54d1362bb779788572d1192e1a1b3dc24c1e8d0846f4851c2df5ebe071e8ef42a6b16d7ef950c3954d112cd8edeb3fabfcf5c3809e1425468d92e009530dc94cd2adf6b6067163fde7d12c3de6e7ad6ed425bb46fd27ed7384c0b4335816fd4b4e072d18b4dab3f5c6da7c0bc3141879bb974ccecc4b6c7417f4196361302d4e34b5dfd8c20bc616fc24a166bb4f07d35e501e47cc37a05ee700aecff0f290d6759e0311fff8e645e7ebaa0e8f6098922d285c253884e2a5986fe5fd7040c80e40c4d95444d40dee9a2eba9569e6afcb7455f731c9d3daff7b0af144642483d11d364ab7c9302c79e1f46efa2a2d2c6d7c6b751434fa79149f5a9bf52f24e604e9e01000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012677ece35880135bd124c89f55dc3bf9d5bf4f3ac86e1a2c06b3e08139aa6dbd0223b04b0be79715e2035d2afa915d3227c34fede3544b7d11ce6638e4d3cf473d1a65113b33572ff3d6d21494b4408ca4c9d7f9da108b17bd70e8cc1998d9c0e50000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002db49e69bf9c15775551cf745d328d24ab352c04cf3b966eca037db59d14d9ec2cd2937c3903496602770479721453dfa26c8faca07ac76990104ee47a308f5b8ac626ee964ec74da31090263103ed98c218e5c651c52bb464433da650b96e7ea672b2e1813fcb74edcc42ee860b5ce5ec61842d0b9ca59d9497c9109a374c1f615cf6cd67b4b41782edfe77145d884367e51703a0a016da84e1cb590cde50afd48749bad6e1ce12e33b79f5fb58c8b975a029197048655e6ec8f058c282bb645d3763e59205e78dab8ab31d0b5966ecf5d926c4b43653ecfbb180b6e5491361b0512eb930a791f7625bf5d98f474f3b924776d2651280480f48afdfce85b26fe0a019e519f43197b75f4c68786597c11cb195dc0e34361e99abee86258864ff21a33b70c1e7a8e117d7bdd26cb15bb5c75e49572bfbe1ecd55a5a8d3727570b01d1b1a6f8a2f83d8052d76fd319b62785238e02679821c9b1c94f5b80ae757af8c0aa75fa4d536f026611ea53f1da28fd010d798be243f7169b1b513c2dfc6eadf45751260399e5c14e1c80ad30ea56e99f3daad005ff27400172bfc08d2f596e2d507a08f080735ed89a21d6f957a6aa526c0b724c1a9a8e3f6d1417bfd3a8000002280000022400000220043c350b4e4c6c506765a3bcc253d1e93c8f10bec76df9f28129dadc61a19b7a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005648e362ba89aed3e36803a9ea5fccfa8f1286021a2e621585055730b7eb466233c9d637c31b3e96d5b04a66b2fc75e90ceafcc617b28a8bfe98f82d3447f92ba554908afec93242c277989dfc1532bb330e9351e0b43dfe71481c812b03616972883f53d36dcc001deb15c6cd8ebb012b8380033ad75a5b1d69e72363cd1f33fc1de0552a372c052ee6f0a647dc32ee81a28685bdb13174f89920aaafa440d853b93665e0bfc47612aca21b2598840c2e5a55030ebdb86b15a8f96c3498de24481b74ed33607674ba9f30bb92088bf55e6de0677482d935ad70c15e0f74c205f90713549517348e9114e9c5745d2bd09a59d0ccd5b2e4ce9e4257cfbfc59fccd690832eeee5812d6d8d0bef25d453da4b8b86aae423177d76da307160b41b18482af518b727e789dae658f4987d3b6787c89d1f4fb14f0e9c85638b6b136aeca16a0c2df199819dc12bfa1f37ded94a14a2e9a17a9bd3ab21c5106474ad58507b2c6549ad9a0bf19ceebb61319f7286fa53a2fefbdefd7de718f9a9bef4c8a38b1be955f79ec9eed7dad6fc1dffb81dc07c20cd94a154aac019047f9637346ca506195a8a5e31aeb52d9347d2aa5dfd3fef13fcb48860fa44507bf48b1441c000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400109b7cbbe52bc97f67c35ff0b17c64e351a05d02e2d28739d7e91931418e3cc0c02254c9fa97122df06992937b141cf0424566c83603bc4582307a3f1b20901cde30c61ce6e99d61c9caf25c2b23c6c6620e5bc6fd3a4cd467a9d465ef003a8661800000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015e3a6502655cf1d45e1dfe6f74e59bc0163e92ebc4a213ff9b0d5143d85cc52517152b8928201e1dabdae3a9a5207af0c5e5a3a4f27bf0fa3e36adbe47acd9aea5d9e78aba4d84b22553c5045525bbeb954af07da70a892714269e97faf1b5a83f71992b39d8b6c6f9c2ac54c615f12ac8b6088bf3c20f4fa9a91c72fe4b0bae995be7c6f13ed09ea57ac1521518045228385b6c27ebfe85228d44ddae5f6520aa7a49c50b7db46f48b5da22d96ca37cbdb57c0048a1a2dcfb3be79ab072ca8a88ab5b142fb7f491351eabc2bdc95d25ce116d93fa109d1ed6137c786f8de3ff313138b167efeeeabdce21ba352bcefb18ce6a7e4cc97ef38b87aff511afcdc155653e0f26278ed6c50511fed30304362b47c17a6b624e641afa6dde19fe13aa2529a171216489e88f7ebff8b7a8d002aba54637bf79c921db8ad7b0306d7e86430990279824aaf5f9330aa3d40ad5fe78f4374df815536a5897a7dacaaf5ecc23aaaa0881db22cbd3002c41c0747aa9bf6e654d90b4e35b62e6c12c108432b414c4a199b17674b9096d8e558f5b35ce6dd79cd6c84c14c05a141dea3458ac2004ebc87de2bf8ed3350a2a301ef3fb3e24e05e6c42112056e023f6522e6f04d000002280000022400000220021a865c53a54194569d56763a3c8cb0e1167109936742f91ef737b32e03d69d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004c70219194703f4390417321c0aae17bb5ba47241d99a3b52884829bd631107e81311d8be7000c6b6cad14cad8537aaac9ac6bf1e5d9eff1cc06e57ad6acd5a489e0dfce9e529a85c1d6df0ed5004dbe8e920d7dd6554f9315201fd8fa29fe4ae54df4a7db9f3d0fdbb5b855d685c2dee78db3f9c14627c874cdaabe54948b71bd6fe02f34c6efbdb76617a02fdb3fbe927b1574ec17b9b6ab9e38cb7ef124e9a3b1a642f95272ff5419ff797de76cdc76780aafa043973e8b3a6b88359e64eb0d195571ec1d8d1b96fd815b5b893fe8e40fec9955c44bfd9d56fb75341cf7f7fc0d79bc704c4cab1007f0f0813eb463ef8c8c923468441e19bd9a7109e37ecce059bef3e61b0f357a1f4f568b35fa78a66160d4c65dfacf3bade75e5f7449a3df6505fc64637520f941794453f9bc0cf00437559cf500dfa3ccecc0c3612f96349006f8992d3da49f593511ddd05abea4644b4b156fd66b0a555c5bad4a9c3c0a0afc7179214bda5746ce8e8988ac9b01579e50637a3923fc58984c9f99e1a477894f8b866b5753988599e071051c91dfc1b9ba8098bdd0276e5e83ab86c0c017a6bef678b698b1a23c6865db42bbbba488c34d3f05d5b244f2bd3591b9fe4000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011d992a97586c95546105fcc4014069416aab9a4b6af70fc9de6cb4096d28aedb022570a73277f9f5ef641ad4c340278cef78c974705b4a79fc192bbc4712389a940301ec419d645d5eac6eca0e9a834d6e25ddfb319467b70d8af99cf8a470e7a100000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000694bd1695d11377cb43fda2a9ba8e115a85647913ad91116ee7b57ad067cd8ae826b7c0ea2b4667cce1689d75407416fd54077526c9d29e109f8685743d1a5d70c441fbab084e921d1e58e2962e0fb57576b240e6c2acd313c618664f655785e1933f548ac6e9be9531069de51e3286f92e8e79fcd4089ba9322be4252fef91b37eb4c81cc623402fb69f66c4ec6ecadd05b533292e47e13c4c6488eb42050369274ff1091e2e33ce8b1f2983744e1355cc746e65f9a1382b0784a231a7322ef06081bbb3ea71842f6f697815f452fc47d330a5ca8a8d485afb7dab6c1de6d199e73c30bac6c93de4f2432c7661d7b9b3d2f541db2ceec116a3b73503444841fb34f2ffaf0e254d09880facf98cc154270e62fed518069a57408804090d4545b50ddbb4b4df7b59a92a2ea0a3e0ad0aca4a5b42f5e00b9f20e5c531f6183fc9f63af676653cd81e9dfba07993c6ac83bd644c6abf63874f671570d1eebb0b1156d0605f2b0d153cdca8703734b090f97d6bb9b9562e52c8ae3eea549ba01cdf14f252086d3609f46e47cd34cbb9cc7a66fb581d176c0d0826704311998846d93a9b011bdc81f232e85714fbe6ca7c797a7815e772d103a81dcbc1f4ed0db970000022800000224000002202287e11e11df81e77c98e2d9559e805c94c6427106a9abcd423399c1199aa33200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000affef0e0cc8fa9ee020e193b399bcea46d46bb15843a0e68034777dd24df8823b5692a4e43fc649d2c4033a1257cfbbbbee67afc93d92717cbeb15ff17647b050347c42830b379b19042c554771801d5cd5a7b71ac418bf3b93d603bf98bd4e49d721dce7467b62ef1a4e7a6c8936107f77bfcd1e032e9864e284502339488989926fd00ebadb7cfc0f095994209c711ed3813ea2da9ad214c216581399e0de6f1ae9c015ddae3e1cfb6cd059c0dd65903a6a4f2b4eb1da607b3607aa5ec71bcabf1e6e5e3706d7efbee76bf1dd9aac09587fa3e926bf57131fa8acad06f79391321d49a3bd414ceeb9e63131980d7fb764bd6cc057c8f470d434ffee268121ce3ba1df2847ed05560c81333b277a930d8d0b0405da45d6e458f4011c99e4dc49359a48a523c6d0782de31681067ce39842215cc6d6d1ce5c6af3c9a2c130298d2b8ed9134e46adcfc58791d1979618b28667d11061dff4055460ae9a9a1c27363cb1c12188e6ffcfabb0691e7f8af1170b6140e46fea854d6cde7274ebbf0dcdbad4611420b6133dd3eb2274b479a3192f94a596bce236bd4af30de5ff29527d0b6bf81ed79630bdc063c8b41fb71eb81d8511649bb61988e96ae8a845c18a8000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400119613d7e78579075f92b5a52a0e87c902926d3b4122b459e7dea3c8b39a94e93022593fbd30add5a57d9445963c4ebeb1c3f31e0433071015d43f8a583626701511e9f30d0bfd2fb96aa74f4fb083758d9aa1f2e9c2fc3edd24ca0f5da63e6ae86000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198b1d4ecc22c3038b1d766686bea1684064ee81705e9cd051b0550fae9640b81a72030331e81e33a1991dd9a6ce689d7ddababb9e68605f47e160ada65ccf25f17c504bc68676bf97ad182c5dfa022a88d2e5c9b3ebe7c63ca7d6691fc4f43f350ce1c3d921630e66ef8acb8eefa9d474159f3994c28fdb26518fd7739df094988a17b1f5837fc7c9a1d0ce1c788fc74259c83d962900e5faf0e3c4a1c612fe888f29985c9bf6d90ee5e206ccbbc60f68093b5f3d8db8d4ce5a42b6ca63037c360d115682378f64b43cae8fb4c9cc539a32b4776291ade319b0ac5a150fb013ed4d3ede4bddf787ab15cbea3ceccb7a513a2948496dbafa0f84665ba55c1850a31c3f6ddb1235735b0d5feca8215864fb0c95d29d1b7800b8505b25ec32c13342903d2d65fc6dbdafc2597530e7c4332f58cefe8f5d65ec15af23d7007fe39b92651c49c3cd0c9a0a51be6c64ab5b5b9d708c9c2bcc7bf653c1e93054c27d297cc4230975b0f8bb0d3acddc49562fe6529601010a8cb1b8bfdf51ad356c58edb61903a8c63677647101ca434a80f1bd569acbbc489c18c1d0f5fa278de2586d7004caab6c04e1cef34935646c521217790bf9fd206cb34eda4bf762532b7cad00000228000002240000022003d00b1cdb8a898e347f2eb071bf9fff2fdbc8343f29022150f70e5ebecb63ad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000133090f0baa4894a6bc495d9261526fd2cb4231e206a9611c65ec51b43eea748af51c2029f3c128bac66abec80bfe1d357994ddc8a0859bde283380d9b383eec77e77bab3460d82f39ba635e0d34523d164a339913612aac0d366c725f775179203b21d10d7611de5258d72ee481d7c958879f608f94df04652eaea8d8aab16a8a51b79593c560e6e2f0b7aedefa39704be64bec29a73bdaa96472f5d6ea44c102a9e951f6db8e288c694be1d405d7981623f0a1b2e7ffb3048fecc69f3f1ac12f4441cac326136c549d7caff5106b7f4147c9c31778369fa2607a639c74902c9eadac5f41e24442a63d732857b79fd98512886b73c275c9332520f27ff9518675eb2d152949cfe237db694005efa1ee4521bd605c73084815045a1dbcabbdbda2a2cccfbc497b39bdc366e7b6d668dc424bd7d2b6335fcde41a505dae5cb1bc5ae0282e740af09ede6648ab9179d88581a911dac3e7f3523b8830b1a1573caa47c821f37d33ecdbee5be5c78a7e62c850c90e051a723510b30f8e8b899a650d0671f9855117e85c3ecba6eed13b13708795680e1b955e5c381e3bcba259486840237a6cee95941b68ce26d0ad4c244c7de97d8c8b786f09fca88cf7bc8da68000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400101f3e9ede92f964c0d82f2b3053d4a27786d5d434184c9e5bed0437d4eedbf440225ba256d74bf5d3d2185311bd0428a95365cf4d94a2e069611d77611a85c345225c3b3e85b8657ebf8e99434b4865876955152440c8672be399a4b9ece908306000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a863d34f708d6b0bbadd3a8944f06b5adbbe5151fcfbaa2fdedb90352b899934e317cdffd371f716f35c6b86eebffbb499a27d380c4c00a691860b9f2f682ac69f4e01d2e8808031637e3bbc3a8b4f29164e8b52879b4ffc9cfedeadf64a4a5c560e36925a0b88a92ce73b67c18718cf717901c944c77b47ea0c1a645e08c0c0c93b5dfac91751271c679dbedff2a2e9f68b1c24c1cd344689de773dd81625fbd22a0e317fcaa1d59cadc61960df5239e0a60616a6a0fc96ae10b9672c61e0d50b8c6d8e1560cc1b3bb97fe502a27842ef938d8010d3df951de47fc32e615f35d9ecca39bb22ec5635180c0255a024a38ea2159f7dbb3d24f9114328dd750ca83b4556453886fa26f0e60f661e44636cfb33caf8ffc92e70a23fc558d0b6ec4d4cc5be900b96d6c8a70f9bfc2396a630db3ddce179e33dc8bf2c98207d52c364c4322a46b2b2c60638c69ad44fd89600be82a6cca25a78cd6841f4f249bfe0c2d1a481a4f75db32bb380d03bc0197451b3f484d3b85cbab9191d9ccfe570dc3e43cc38edb9ee215efa98739d9f129dfa96cc8b51bb344bd9231e33b2f9363a6fc0c51841efec05a8b322e75052ed12b01839028fdbfb111cc8a1b00c62d34a820000022800000224000002202543b7da78b7a99f4948bc7252672640fb9fa80dbba1fbbe70f37affb331bb96000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b4d72b254dce997e46b059e9e575b326edcda8d17d8dedb9b5a5504b895c4db268c3eecc79f12b02d8b7e5e246ddac76c65ca82fb9cc40329da1cc7bff9347761168618d2c336b19aeb69ce7cbc87b42d540677074cd7ac3f9905cf969840c5f67ab4c524d1c573705a7728c403f98361407b61bd3f7ab21eab21804b5565f9835bf0607a6c9a2161438487368f8c6181123d3a456d56cc063773045f8f71a3cb766b94ffd2d75af47e554273b2a9b8f0b6ad41f7762c9700d6010d1777a0da02e5eb074112929fb969ab2312e20b0828ee4def83d12117e4d915716c39bab8bd5894ad54e5403c932591f4926352003d2dcc2ebb621ec77e1ad5d1cf2be6951648049685cc68334442990cfefe2800b5804efe7815033694a96c78fadbb9aef10cd02c0f7ea0adf38075cdede42f23503d44a4a7c0dec53e1bb5741b0aef5024c862893dc614e9ece388afec2295e3f5bf27e689c63fd274820b5affb5d57d31e22ffcb5ddd353c9a54bd6d12761afea4be8c52b9cc6bf46745c68097f800086fd8694ad4b6787b7c7e4e49fd16451195d642775022d2f7b8b6267f0f5845c3200047a9dea0aa85673e0c242e13b147dfa646df823b582feb7102826d51fab000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001216705539784fd36ee60b7c79e8168d6ef2a9c7ed98892e9ddd46b9fa46fa36c0227b802178fb754c997cc0c2521c37506ca47a7792ec71d1223f4457287aec7d52b5a3a8d5966330aacc6a959311c48c6450b2309a2648a73509e66a3f4479b1f000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094ef266b741836adccb829d99c5e5abb617aeecdfda50a5a4b075a3baed3a06362f82316b15fe60f88df5aab0cc564862bf342a153b5aad5d68bbe1d9c423c7516769872270c5b0615c1083b618c34d844779bbdc79b9e01d9d5f12f0b26ce18340461f7326a099d9a8844c007d79118b9e2db9b3a9e34e657f40e3fa0e920919008ff5047cc169416f55beb6bd2f35c918ab0fba2340bdf3ecdad37d92fd4e8f13a41a1fac6869d9fd58a82c426d2440417db6be0c439be81727513d6378bec819579433f658a7b13b462bd5ff64e1fcc4bd2389e64a2064294b32dac8fc4d90d6f39f6998575294a63a890f6d75d14d16af3e20beb1907913927f61d18233844a08a6fed5be2dba741fbf9737294f82467da2f9092654ccab852966a66abd50185caf8c9b5522e3d48726067a156c8c673d789aafe8d953f61acfc699daca08a79774b3c2614469dbf905c7f6d4e22716f42a559371e68d21c8f818c4553a3e7fbde8fef9740731e632bef2670c4a358dc72ae0149884c1ff96d94dd1c1aba245d2da279f4afd4cc1e1e9799b4eefb77d78e046e13d11cb004d1551c3fed452878de2cacd95573e5ea85a453ebfc0bca5885c0fc16995c9b99262ae6eb8d20000022800000224000002200d9e725691e1a02c799728c558e83ef250739d7a65eab896e5fd3cbfb8da99340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093b36e386000567722bac16cbbf998fff2ab53be3f08ead60bb4ef86e9d3ae94fe159d1898dc5f6a7c17346fe6f7d2896858b8c679f36e33c4660dbf8089c6770092e1116073cf964d62c45cb140d14aad3326fc11dd3ff5701f02b6a77026b13ba189d29de52fe91d92ae0fb268aacf42bfc45fcd5956086edbf85df4c0da82fb4afad2b6d8efe3eaf2fd5ca4ec3dfe801ec8c30700d8b5bd8ee71a99a601203be91e69552f3c677268defe693cd30b33d8a1bacd856f0cf10aecd5c6454717a3178cda42ad606a71ba153d4371b2261120fb729014a8bdb123cec40a0dda6c2ff182b62a620ca5207c58246c14a62386cd2467efb3ad8f13e7dd98d93c6315405c1b0015613c97636f3a1bd5d5d2c7f36d314e2df157c53d94f2b1696ce2230bd657d7662eb981ae794ec66be939cf75e0ca231b5beafd1336969dc64ee9da55fde0508aeb5bc18dd3b7e5fdaa18faa0a8a2af6c0852e8b07059a42a0642cfa5a15f3ebcc7f99d462bfd6f4198fc9d9e0fd2bc88778c31925f0968ba390cbe94dbca58cfdb2766da971b048b1263dbb79da04293d4f12eb7d4410cf0bf946dae524800175fc6451dda0f1cd2efd6dfe874337beb660153eaf806329ef911a8000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012a1361746c7aa7eac337af5e4be1ca64ef2295c9f1625dc788ef83ea79bd8466022ab098a8dfb2e283b7e05aca21967a379f6b30b07a96d1cd0adb6d620b9f131a0b3bb8b7c64245ac4b4687cb071953f73c4a8ffe8284afc5f9a06e9e7eaaec00000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6c3fb9997c2038fe4fe39e3a0c9f06f0badf2ce96500a0b3201bf531e07d6a3d77ffe8bb7587eba01673c25b1507d1647be04334ed3ce8d7adce666e11b2840686a6461d6b197648d5deface98075470658b9f1681513c5b4a3c9eb1e45455dd297fbe45b552978724083a5c6d427c5fe935b62b6d43c8ca625844416d870db2f391e79fd656a43c504c65c968669ab212ff866efb07c1d232fbac7d40c16f007d506ef490fa2028e7446a0a774e4f30c1f177a8f47f62ff98b3d5882ac4eb8c32e7f044c0678a8505e6db5440bd8a2fdf5d3a46471766c75d6b52ead5d486ca1637146d4a4dd1f16688f703ec9a582130a2e9c16d805ec802a02e17f8f60e57d6cf7115c2724912e5cf798178418b075c350e5be350e68b2a71098e748532974079620aab2f4bada3802fb601502dcbf20ba7b93dbca0b6f62363ec27aeaebe2a353d721d74227e873cab8f14cb281e7d1fb8579743142b9f70b9da56fed3e752976fa63e6eeda8bf5777429681bfb509719418bb2d1d02b891b35e52bd99844e868cd48e47d7b6f7b261da72a3448b8bb429abf700d5efd5fe6a71b2e9a1bdf18340a39ef87fc594b3ab15226869877d0cb5e56a77375d0b8a195d90474b20000022800000224000002200956eeff217bacb8e69142ac922f34f324dfe8d5b0f3ddd2e5da648202a057720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099cc29caff2d11e25356d16f02bb46118b203fc6d7b4ac79dc68266e2ac657dea6be809c6bfd6fe20db661016dda382e911f618450eb77d53e18edd8cf7b0cc1a156c2b54801a4133c1a5a471f5b712518201adbc877188ed6b3d975ef03dbc53b50adef869a1d5a3e825552ee5c7bc49f0b06fa8bb3872cd0ab711e7cfe46faae6a0ab5e597a92f40d11493ca3f08b94c864ea8a32330d3dee9bdf639b49f1da69a1bf2f97fc6dca3733ffa1412f31396e7a3dc78984860f6991c612c53882c3811909e39e3b061abefc205dc3a8c9f2f3eb1796b2fed9db48c996de0b029ae46f78fa6e0a37c603bc265c6f518f26c7ef301f11ffa59c2d6b2497c7e904dce998b8872125474702eae49982a36360b822642365caca897de359d6f4be556c0d5bb703725c202bb93511dcc28dc41f84f9a2b5c76003ee139aedce56e07eff59be03ce9dbf69b092df833127005d9379e5bfc2d4af6711546720a0f77bb50fb6f25f1484734752930db1d2a63f9e80f4a6979da18c5150d96e65623dfa512d907bc88df5c3253c2f6f53dc3961e21fceb77a679d2200972782180d61022104d2b518ecebd722ab27b11812d5b0ff33cb2b1dbd2260ad1ed0cbf81383395b39b000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010b21f7cf8db8b41315f033eed1d0ef13ad019ba373b004aa7e89ad393d807db8022cf18bdaf585bcd6159e5cf05d1128475acc9f3fb87ba3afcc929d49ffa75358079072b6f674c1c83583e16b48c5049b20a90de1612d7903bac818d721ed91bd00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082d6628d425c3793bb880aef5e38675b694a689816bce32f1e7a80e746b3f47b22f217ca3d70ab0f631d2bdeb4c9d4de2c9f320e65c53bd35f58752b1151c85e869511a1527af196d87ab6c0f1605eba8d7d2793989299ca2b7f4ac4a1aa3b556cc48d55a88261bf57b6418c29a4d59c3bf4ffa778a4a83b1ea843af7fd4508f03d589f85386df4367ce1f7464c9d1ec477c298c0aa6ee215ecbd8adeecb403469cb4acece005464fcb39a562e7a8b56f76f0addcd32734e9785eda9b54fc496572255ca34e5ecc8bad7fe424932954039955db98d87099ab7e4b6ac7f2bfbf9e3872598e3ba8081204a3972a78ff4b5739425a34fa0bce27cab6926f963c3d52e6de9c5fa62e9da213bd6105ca9fe38186d157ca6ff224cb692f0b70586629db5492183848e4a7bfc6dd181e48f3c92a69925e89c65eaa21df8cf2a27233838ce9465932f54a0495b6a9b8eda7326835bc0052932b9c65d0fddf4bba65c0082a3314eb0b59cdfbc0f45247d30cb5924422733bdc6d8acd513de1fe858e3b73ceac84648ae79af6c31f7130ca9e2a399a0a9cecf8de2becc609aeb216aab60b4328a2158a969e904076fb19924adb4e3003057428f151672e5e7109fd258daea00000228000002240000022028bd814d8ff18256045189af1f2bb21968c2f158fa8c137e5add037277acb399000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b00405f6ceec9c3875f894d496d49980c168443e2701d8e5a40324ca8e0db95ba0095126bc727c5da1c0c6c2288c63764b59b5b32e470cf2e6b8436a0b8cc4ea6ed9da37fbad704a136af5308c9c08aac97e1f1bd96f2a4a3895b98304a3561f3acbb2ba2dfda6d81ffd712e829d09f0d1faef74c0a54e803d0b2c2c1164cdfecbd60a5f008dc73cdb719b1065be0841807a2d2912e7f07d0a53ff34e5f1322987a936296a35c833e705a8c4bd74df8d58e6ebb3bdbb6278867b326e8ab5bb2869ec9a063390a0d4634b542e7be2d4b90c6030324403f29db3c73de6f9f1195513b0ee1bb0a13d7ccf4b69de005140f0d34ceffae169b68a97315f76d55885802b85587f79029d6a3eee425484ef57f7d19b915718d161c5eaf2f2fdb577bae7a54544182e1eb3e19ab7c657f113d4d14e8d3952509c3e1e4f1d6607dd0705afc303a29183c77860315652b946afd3261060d1099ac52b54e584c5ed2a1aa5d3e43ca4a664920c991ed7d765f98208072241170fe858e3b73be23eeff6fc2cfcfc25e45076526ccead548e955bd666747e051e3ac73554da0afe050e4466d6154d73f9c4dfd9439c4ab82ff827a57bf973ebaa83e07eb73bbf12a392e741bbd000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010b73a69b42cfbb1661b646c9ba6403f488296284aa4e86a5ef4c0c5b096d2a7f022cfaf938474fc34bca9ea17e5395370118a6804f1cf490ca3fef937f8c2966f80b7aac6a238927496b340df9edb7cf496e140e7ebb952a2feb66657c2d1ecb56000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad7a6cfd7e6cb9c0cb8bd3fd7b2018102010984e0c11600b55a11d9635acf10bb6d9108d0dcf803bec7a7a27071c5b9934637b386c6644856720f823439d45c612dca5e2bb14cbedbd5d259d971586a77b25bad99196eb40e078cbb2b0e7d1345bd0c539541a8a6a7c8fe670cbe1caa8cf41a8a90355858e9a4e2217c90d78729a802d7b31adfe1d2581daab71b57338d3416db90cf0b0016216b41556a74066207828b7b305d9b2e185500c0c224503e3fc0b983813992db9aa4fa7cfb2aea779f86624e8f995252085f40c0b56f4781ae411eb621d244cbf2ac60d8e7c96640f0d67cb432822f0e27ca9b4b9fe66ac8206f288ca5e2813ee7b6992618d4546abb268718332c0d2349a72d16f5d15f96d81cdf44a92af41721c3be82622f50c8c8d6b6e2576a63c5b0a2d0536ae8b4c7be727ec37a1b3a2eaed0583ae9de10fcb6a6817be4fcd15921f759e2f5701d1ddbff7adca8486d47a8804f262fb56168acf5e06ae2021bfc8d4540911c3cec44a93393523268a307bbad6d57b900784999d323ec25f2f75ce3d2e8e1ed50e99ad8f266bb170cebbbdbd849f86b49c7ad1c7263ad3433b51ff01c18fa3b2197f03e91c7bd75aaa5066bf62b54ce999190000022800000224000002201933fba94ab53270a861d360ad4f24da0ad6e7cbbd421a4bd7f5ee74cd4b4c970000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015688a660e7ade089e95b60f3c4c44e654b2df16d70d7acfc0c32f919c504ebd01dac5b77c3545490b3954ca04b425a91c3d70c21589520a33040b8c9235b3f008d7a6149ef1ff8ee2bd44ee958d8015de9616b825a7667dc853079f5bea494492f993c0f459510ad20c5a639e98bcb13653f1664da81d7bfe916c1da00b400ba081f49eecbf3ac466f8ddbf6c8cbd6c09982ae34bff87f381529246775838a5f769fed30556fc8845f4c23d76aba187598bf8bd122a9e01cf41c05ac73090a27d5b7ee4f722352ee2932aec083c1d7c0608577379d5fb37bec1e0a17d26d16e75ae8b77d640c3f0fe77dbd3c607c91645e1affaed0cb568835c5e629dac340525ee911c8fc0ea8b1aa41fb701d56a44a614d67e8475cd4d9441c3bac1b1404b9036307f99d16c9a4f41ebac66dc423b7bd606fec99c44fbc22a0334fde8969675176c58cfab130a0b09933a32050453b00975256d26e17f5018bc7588752b3d4f898eedcadaa8ccf5ee7549cf14124f3526c64c3c7d90236e61ba2b669398347f99df8c13683f219f6e83ce6026419af27dfd413f0d0bb0f94eaa4b7c0cfe1c7b5a8200a1f5bed38f86549b0abaf77f1f6e18e7349a698ab17ae2a54345f3b7000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012b8e5d03314acadd836d3628008c9c14ded326399ce1f7eeaa37de136fc400ad022d44484771b22a6220e28c7281cf72ff8bc8cc18e4ee3344668fd6cd9db2b5d80d33fb788b23f689f31a7e4ca9e4c86e2f0ea3dab95dbd4ec989072b476bc29b000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa9e022059b09175d8084a8ba1ef2b92b548a221049e705542f47fb316f77b50d9b8a60dd4ccfea2e00ac296270abe345546a97db1236b979e400681689ea276bbacafa21613d724b362528205200f624a0ff694da7426186b3beb1d6e152c9c424e4cbb9076416f5ed860d0cf54c9e9dcaa74a95ae4900325616c092456a880619e23ed43ccbcbea2b8aa6dd4ac62793cdce5c57b8acc6e4b7a4e139527b5ef00bf9a5cf1d188e45ca87edead5e0ce2b75677ae506c91264463d1283d52e4b953ef9217941f37fb3631b0938f20369966d130ca5b005b9303bc984919927460977c8852dd33f4337721180ab1ab1937b26a98be6a6fe23bc9d132a0600eb21c8c330a2ff5e0cb3078bc7aa224b642561d8c263785596973a3ca689c6ede05d11e0d2ff82c2d7740326dfcd718155ee1793419ca5770cec64223f4dfb62feb48f38f6e70d1c8a2d8610fd45f691891f606f1b14d9bbb8ae2a6bcd1cffe8b74b96c6b76f348f1c92a6b11b5a40a6f45cdd02e924291f0cf1de8b6ecfa99a5a1b270936c8f770ad0af82184f4b5b8bbc8c91f262348ce74e82bcdf65836514a65d5eeea3e0efeec72f732020f7850adf98897047fc9348d92d9a8ca6257bd517fc0000022800000224000002201f9ff3cf077d913dc38158e03b8877ed9c027ad32f2ed9651a1abc2610a009020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007250d8472d76fcdf2c12f726900cbdd936b3f0a35f0b79e4f439a66fda2eae3b2725f09503c83afa267e9517334f2e9048b51621f40205b1273faa10fd449bfc00280ca885da3ce75b5a5c6f8b54a80d9b123598ca76ea604b7949a82e511d842df097bbdafc815be70ddcb292bef6cdfa4eae8cef910b42ff4aa36ac7dc7a51c07bb6277f3c11930e135e5782b8301cf534fa5bc4fc8a602adf4ca40f4927b417c00200f5dd09754c0258aff696a77b11774f049004b48701caa066bd3dc5bda4aa635953e1e177e8690a152f25e34e5a4595b2b10110d21acade5730acd5aea35e27eeacb22b5083d14b26a87c68bd081481db5db32cd723d4b023a8af96a5426a03ce8c0c1a209904da8fb7361ee3e5353c631fd4b6f6384a6071d9d022942392ee5228e4efe919ca2faca02e90628db9b9aabc49c9cae2d0d58f9e7405495ac27b28b089789d9cf20913855b3617cb413317a40da951ec474453db02896a763ef163b60233ec3e41478f3c96d85382b9c4cf633cae254912410713fa4e8519e976e2ea9884b6985340c1e81216fef2ff493460b00521376933f6b56901ca891306434879cf62c7f469dd04456cea13a02784b2618f72a811a45a159dae9000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400127e265234ac9a4f6527be7336562f94d7857a9676eeabe26d0be63ef5cde8f60022e7206f3ccda9dff4bfd16964c5fe95c1e6203eca10dec5d17957d008fdc8841161cf5274f1bbb6426ba5ffde04c58ca5231972bf29bc587a22d4d2411b8b5f900000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081f9bf4d861836cee1cfad26925547274a9df68fa6d0cd2ce9bf96f33ca05ecadcc37bcd05e9f9f59460ebbbe478340e78368e3e209357ae0ab51a97f95c05358f97990434642b982f8b99555bf1c2db4baffb22a37868040925df2da55b95f9697033c19f02094837418c3b099d60ffd370f5227cc175edaab8300f93e06e48aedad2eac80a20f0944eb9d142bf22edb1a591efa635074194bea9da0be7ab7960d6735628f48a99a7e7c31a2874fb5e5daa9f588df5433d8aa3859e69800d927397ecad27acb2dfcffe613d36b3f2a81f747589c8a5eb05d2b867035fef072e1e43db164af4562e9c68fb8ef46b040e643519a89fd33c97a5bae825fdf8d644d2bd038b2c663fb291dafcdcfece0861fc872c4f8281d7079895a7eaf73db1512fa0ada2aaa0752036893f5e60a50e1711ed7260482ae8c0b1dae105218a672a1d43d416102466f40fe235c7514b911edf7225bf64f26b4d3553725641564be3a4ba037dd8b6e3fa517fbf0138df75e6104af1dad541b9930064b5cb15bfdb6a2474f0740ee069959cd2e682c7ed9dfcd64698a21257f2775e7a155c466b52a3b964e5c329c351e0ea57fab869357a79eaa7028b8920bac60747781459ab8f81000002280000022400000220163e871aca9a008b2782ad0be6d88a72961227fa2a0ed7c7ab6360f4e49b30db000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fbeffda44975b3bf56dc6ade9d76c534d18a75d2ce2be56de500ad2c9ce1a066cc5d90e310f7edb5b644493d2cf570efe8ef1dffe6f84ab4ff985fc26d80d0b5661e7715b2c0bcaf3741df9443efb1f4e1db7fa5c47d517ea97f4d278e862564ebd971a3fcdf709f1102193065da4a1ab868d95a81f6f625c8875a231b26fbced4c97c1a0fbc8e2f36e30643c8b4c878595bc6c711d93cb697722912a5a78102ba0fc06c2ba0b02efb6278f8b6a94d27efdf043a3ae3744cda395d3d9c5ec3ff8b63b689dac5c7a0fa50f2d9a930d3688cc5cceff53f476055549afefc0c113ba132aebc45badff20357ef0a85587082bc8e7e638a152c33b7b0f8e6bee88685c99737d155ee6e4d226980839937be215a1b543e94dd2df262f8cb8b7f812bd0ea1cabbbd3a21bfa74243242c2cdb17f4801b614f444012030e8d6a345403cf8a604d93ea614ae45732c7e8f6fc02bc1d39884fa4e841b03e82e90a7cde373a19a0c5cdc1eb3f6338391afe4aa6614b26bd0e2f6b4827c695fbd8975465b029f0b5f2072eee5206655191fe4795349b6d6b7c355941d84f6d9805c3989e18a4536934530e36bc8883963f906703e2d96bd1b09386dcaca4ecf0accfd4726136000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400120dfcdc04d1d8bc72279437190fc5f74a7910a742617288497e814aba1519b5a023056b613c162b273f788860d0b8c2e1e877494b8dc407d8723a66ebde51471d621254b9b45057d9cf85ba00948666dff79f43fcaf4c4e35ecbae81e1ed5d82e30000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dbfe9276a85e855f2988bbf793f09dbdccf9289623e8aee8fa4a0d40ac7f79753c5a5c607839d51f3c824791908d7da8393067a3a1e908f26bd66394c34a4076c133ed87f792856b9a2c1815b7172d8a5469bdf5d293dc1e022f2dd675cca96bdf9ddb25c3fbd30b5cd2f01ec7cdb8b84c65910e690dd103e74ab1d5631bfa016fbe355905047fabfe67fd6ea8fab38e41e7e92cd51b11815a0d5079dca4dc84e7e5e39a974c6f74b6d384a748b42c1550e3868189a82a30b7843bd6bfec61bb70ba2572e00e450579efc93203d6fd24084283f20f1286da75b531dad215f3f97ede2d9bca6a0795ba2ac9a74271e8b2dd3175d159c36143953683423ec9f074b752e9e131923f9b0c64c5f1348f41475874e637a02411b677f9fec2c85c5ab9d7dc2f9b7e661a6fa05dd1e1da2fe2318be6398b780f8d2d116d517ae3ff4db666c9f0a0e52f94cd4ba56270baada628eb1382df9ff3b6c2296dc4d3dfd4d9a0a54836b674a47ee7183171c0398735650329cde17a7bc74dc92a979af415ff7e089998c7cafc829edce48c052d4d16521edf80046a0578f84a77813ae6f1f1c5ed5eb7dfabb581fb20d17c395e4aecaaa8331d66b962a8dad4568d0b2fb24260000022800000224000002201c5fcfb6c3258c9c4447a823735a4c82d33b9386fd464cdcebd3d9b4109917bb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000226e09e4a6d95e817ae3cf038ee50e859321f2074e95817397fc660dc42e289305e19244c48057ab97f090379971e661ce9509ccfaacd2bee608ea74c4a9e569f08226500541715539b531bb80333f5be6abe1443fc4270c2440007dc3fde5b94106a7906a8548bde065fb484a823f09a5247f0b9830fa32da1c4866b4c6b31969c7a515df702ba04b7ab6a59a32a227fdb53ae9072218564b4b2a6eeca845436827838968341f5f8b2152019dc3db387d2a49ee1f459a63ff5e69fbb758a09a38b9e2478667e42cb27ed1e84433d784ea41eb6e33bf9f414850a5cc675574fbf666fe59f868062943b45cd2ebd9c34c7669b1df75e1a2ecdc26d885e2d3538a104661397dabe0ad92e615da642a62d827129404bc687ebc27f01da33c818d0cc758ba549d6b9348a4ea04d7d532de6c6c6eb28ad4ca9dbbc4130bd431ab46c28fd893f7017ea03205f6f2bb9a3032cd0ce7c683a5ee62170a60a7119a90b2b54e5827e4c99959513735ce6e73ced73072256a4844bd7d408057c6bb6962a98582f46cff044ad4269971c69140d796486efe6edb16cf2ac120e4124e982a4b15c6de9c3180e7088c767654c0d4aac08b4517b9d89ea42f5416fa11370f5f42470000000400000000", + "17e8d911084d0cb2be711a4f24e6eb7ac0adf18f27ff6ed91ebec635730d38520000001100000000000000000000000000000000000000000000000000000000000000240088028b090b1f5d2bc147db2b1e680ffd4ed51ef03e1bc3faa425d5c85e990700089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb300000110272889d42d692e365506d9ec23731c1c367c4561f0bd3438edc8e9a7ba2dbf5b00006600050c8a68b279656825d336c92c0b596cc0c3cecac5f52edfaf159f5bf07ab5f4000066800825bed0f04513688a20a73113b41d525a804966b3e35ccf0894be7867dd9f59000066800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000070dbdb14000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad36ee701019f1fafdb75f212142e78b345fdc0ce2101b3ae95aa6a4b03b12e8e2152164000000110000002400000000000000000000000000000000000000000000000000000000000bec47b00204a60847df8ffdf6fc53d5e9ead7ab6f776d35d658099058d64c18efa9d360e92199bc60ebc44c6b77f26650f4524babaf5393405eb178f80e4abd361757c03102002c70267126b2dd65bdbdda26f5a263db6b92217411667b43416f8ed37a97f30352c741204d4e8341c372b6df33ef3d1ef862940c2e73f4b053d3c95d6d927400000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029fcd0947fbf356438beee00e66ea6b7c4fa8cef411f4cecedfffbf4b1f7389b40e500b05212a874ecfc82ddd195763ecfd5798e14c6eacb9c16d935edae078922b9a33efdff03a32efd723867617ac83cd629b00cbd483cd06eec97bcdd2d8691d2cf495dac685237c40ba0dda7d5ffb52905adae48ed144d240e4a118c11fd76f0a7fbe530cefe95cb75d7d1a6b755b3fc2c45ef449001ec5f734a9e04febb76ea39e8d9acf781998d2ec7bb35de544225b4d56be158d82b108496b7eda6d84446003b6f0bc06ddf8cc92110397f2b5d996f702388ff3cb58cb708ac23d3a758c368be2b54440089fd7b31957c5d718b1518cd011ee17e6c71fd2ccf2ca7a8b14bf16fcaf4e67e633d1785d10a20b48a850afeedf3e290b3edc5c80812ebe72fd65c3288e1b97311e2f18ca2b814360d2c1881c587600eba920d8660233f5e159f5bffe6ea84fabc04f90bf6c8cb12b93f9855c693e8ff4dfa468fec88b15413b620cd36b865df67932292e14bb122edee1f154da5a97e1ad5c195c72a273731c3f2c42891ffaae509946d354d256a56c973bf637a398a6cd624c33a020ef3c4fbb882d3c347f92b8d6c7de8e1c39da1fd9074982f51b1e5af569e4457570c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e7362c3365047c71294d8d9e2d1e5262c4af9fed65840885d5edb95a33bd9af806095a4a80c25a175530acd0c6937a41fbb0282379e001a15a57bd4a943d703b19d7347a83e3587c2d337c05d694794a6a891f239b73933b9af3cf5b39ca138a25eae38123100b41c00aecb43bdde4525def1f1bce2967da7c2424dfb09c40da78a756155d2eef25a583c8484bc0472852cf255bb5441d73e7c4d058fae8ddd6ee7b72d73f4b935f57cea5c76cf486f5e76cc5d32db9e58878bb3d78245fc4ee0c5c000bf8858f76583e969a102a99fe749fc2c73c0dc2f1294b276696d91f8b61494a8017446e974bd6a8ace5d919deea8874a4a8ee9bab78e6632a7ea69d6e8b3376fe07676f2b6d9bcd17f31925a020db55f5957d74440fe8f8b5dd0f4a5a964f1278f660275f68743d277d1a5e17245da070284940584a9696706984ce733c24e917cd3520a6b7bca29e11721d4db789ec589479a9ed0903d502ebb1378f6b35426f7326d870c525f3f0a97e6cca53051d881d14ccc0aa8fcf7da7ba6bfe6c88ba8726749ce71b5a8965013246397e4e4dc68ccedf404a6c9ef15225fcd1faa284f26c62b41d1dff2dbd0a29d2bcd4e75fb241c663ceaa00f675f67587300000228000002240000022027b4a0e624f325f33f9c0311fef203e085bf581a8b47363cd25bede040eb0dd800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afa06b30e0e6757e30ca1198d1e3d41aa2e683f15fc6ce3ec2867843ee6ffab64512599e94e21457e8674cfa44a1f8e987ade3eefba4cf0e69a2e44d6e387206bdf49f7fc11f8263bf5b495ed127c81f14f34dc4a324b3e9308b4b2caaea07dd387302c8d073c3e3f722bc7065954bc59e660f2cba5f6d7e8b19e19b2fd295b8481e528431eea901f33816b4578b1d5fa8a3aa3890f996f4e4caac558f28440b2b3ab87294bc84b88dbf5cda64793d1fc6b32a867d76ef9b594130b29d814e353bcd197edad7203f96ce9f6b27204b12afef91132b60d84a445ac0cab6381c63354e5ac730fd3d533c0885468d607028181e9f4a8ecc6b752ea5e3dcfb63f890de6a85fce545ec010372637a15899c0732f90802273f8a89926ff8e3611aa9f9bb6e49e83b91d496ba6f19cb7747cbc693662752875eacd3b0ad2ce620bf2583b6252b77c72e4899d13e6eb170d48a7abc87a4b17c08948e7b5ba032eed05821b8231041542924a4339040a4d9b0dc781759086c241d1064278fb0a6cbf3d636a57e89ae063fdfa1133b0c71a89a9ca83e7c769ed8be14015540de063b931e74e93cf644cce4e8f44a77380a3e2956266cfd96c60700682ff7d9daba0a3d281a000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001157f9bc3ee797cf8b5f31ba7d4534d978ea1311fedf41f168794e54ae03080370201a435a6fb6938c755131643f8a44dbdb07b6109cde385af03acaaeb63811be201d69644407fd13bd5bb8f4d24271f81cc6c1dd409dde1c66cb9ee647fd1f53800000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003044f6026eb173fa9c9b535cc01e8fd81471483e1187741ca102d884825f34bc438db595f8e4b8767464ab6d74d228a75ae83997e02c35d6d280ab7833b466da666f9d42b3620b334f1675262d27d15f7479076dd9303b03ea648516e4f3de8ff360ea65b4b85042de2049582be3c79971fb5ac942449cc02740385ff4eafb2c92b36945517ce00fee752f32d9081f3bac1faf5a82bd3ebef6b3568824ad3116f3bc0d3cfb681fe6bb5ff57ca35fb1b8d38001a34ef2c2b22f930dacfe23ed913394ec3231b8977969053eed5254d65648684654be936748919364de34127c551229f825c885d19a517aa74017f56bd31e50cef96b31e517f461dfe609286f80625b17dbb8cab0536c116f338aefec1b39b1e09f2907fdf77fdd6eca5ba16efa87830ceb6501dcaa373cd55248b76ae1cd2f53bcad3bc41d4b47a0d1d9385cf7a702517b07101c91e6727a025c851e0d47cc63a122fea3e981cb27636ed6bdf93fe44f4efc58082e1319b2833e77fa047ee7b9ed81cf538d7665d134617d1f1376b7d99784051d295419f9be9360346d7461059d8d493b066c09b08f2751e75d2a5817fa5f85376d68b97b9d6d599c989e21cff57fb963774594fef36efd1f60000022800000224000002200af9183328870d92a4fe4076e85087bedf057ed3ab578ab5bb631dfe45f3ee420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080479fb1f9de9c9aafd24774dda1f292404072959672721f2c59722f87357d2d455fce08671d9a051c4cf38a56939f06b1f80a0614841227ed1ab80088bd2c7a5f1bbf9b32a19ccf481b7b31f47881be4243d1aa7ba89b2e0f6a818a9b2310809c319372cf7670e3f1d8fd9bc11e2fc39062be226e4de76054e3d336edd5091c63e18646f408a6626db2d5930c0f40488ef13b66cf5c01d993a27be344291c6777909e36b348de8de5be767201178bd4eb640f53c877c81a5c9791c3a0e09b60f487a492c4f37a2b9a0f309c905d1a461c3ec974ef39cabf3250d72916e194e7a544e94c9d30e55f375da706a5660791e8daf34d6755124887b292497f00165236ef946ef9536a737b5818808416a34670e887463bcc0ad0df74b4008c74d442e3b0f447c87fbe940bc052b5c1b17142b8458427a098e9609049ac662474b103f83c509c8c8a96a6b03b9d4b38bb47bef73ba0b00053325a06bb525a7f3581f6d7c151be4f95d69b3108ee008b52a5736b638fa1718f103900ce58e03fbf4e54cc05230b4703ca728c680ee257b0ae7f5ab8951743feaa1d044d6835c2342d1a850dc7bd4b0e712f4f20e1635a28b162812e3a3a142e7ca634ea0b90f2809943000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012dc37cbff87751eca682b22291d9bb663afffda116ef1b12f5389878d1188f680202afe45a24111defa1555dfdc74e0f750759e92e8cb10bfe4d21a1044d0357381377f1fcc322f91687abca0e0f9b5f16967f4e54a76f4f9ffc37128eb2eebf170000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000efaf0701c3ed4c9944e7b14af382ab5b8c92ef08b1693539da78c6c1103a163617957de217a0c74e6f7bfb18d24f35d5d526d21db64e76c03cc31c91015c367a05a0281962ea5f25d82a7f329b790cd6f67e07bf8a78b9275203ee55a943dda7b3a8fa203f18c2078176f248fcf78b4166163cd7ed16c6c08f0383dda43ff18dfec733046fbbb8ea41d3b41ab6b187668400e4d27f0fd60e11d24c4c118f12bb977261c832c7eab311c3c3a26bb9b964cd55e3fa3d1d6ff37c6aedfa2a8e8afc550f83237f9248c5754d3658c29b469a588dc76f661a7a6f4a544113d090131b7fdf14353e06686375c027cd369e96473b420dfe2f68944650165dbf252a249a86b44df3390930b7814f9f29f8a5654e9854ce47a19f3fa8ea1a8bed68221722ee85034daeb4333ad6338018af1cb43bcdaaf39d5c55ac9bce6d06ae5d072a8af7b93920df1d0a88fdf7e79e052a0d38ee8db756eba6452956099e559679b17c66a506db48a9cfcde31360388cf42e7662057d2a2559e3ec38756212b19431cff5da48ce6f098098f5efbbf57b08b498df4dd9b43fd61b158bfe4ca114e406bc7e0893e67f61cb1b64d493df17e2a181797fc8bce74eb1500ac6a258078b721000002280000022400000220241beae313183dc9bab57d7c1a4d14e06ea6bb52de2b386ba1b348620c00c27f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2da5d8c66b6a7c3241dd290c34c0f1aca896e36c56cf847184238bd0b6d5c1d1fa09c3f4ad4e9ddf4d9aab10ac7fcd181507ab2958bbff03edadeade016c37e1880468cfe348556573e8db9db6b2ffa7a2ea60b69fae32408e220525dffa5bdf2354e4105fb190110e2b57bf9e1dabd0bc9d99df122d988fc2407104aca1d03f30074d1808c4f136d28b7c81c3581245804c54051e5041a7783f295ef59e1315368b934b844463ef562a4a09bc5d1b1608deaca30601cd5d46eff3b26bb1420670c0e1da0d027c7cad04b738fc4c43f56e8f085dece807b8cbad8728c7476702f0c526c6bcdef5f67df66b77c3195e82f6fe161c371b2a6f9c912f40c3e2d88d9f065e464a3682e62637bf36e5c51595bd65cabe8a97e712c746e0ca8af3f1dfac403fd16b3bf81168e466917d5afc306a21b3f813c03a8bae842db485d01757253064f0cc98f6bb55caf25be706976e3f894cde8ff8c0ccbad195a2cc0e8ba60e73e61de5ea1308542509b63c76b4b8087a161be4e6877a0bf3e0b3ae193a1ca45c13f78411c18f8c15facb62bdb4d36186ea1d345c38beac103f94d8bce871ca404fb2a93acb73ad85f4f6d221a2b476d428eefc3585e60c6200aeee9c0dc000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012d0676af7fe9c7f271d4fbe509fd98455bbc19a681d31646bb1f1dcb11d4ff790202da75e0a1b21cf7e2720e81c9389e2a1bd827be94402d2d5b5f7391b25caf0b1f06da12e237e27d44a935d5558c8be3cab626702c8b2c764f069eb7cf7bd17c00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086059c5a28d752dd7b23bb5f565c832bfcb378d553731b8993ea34cbdf8c56f00ddb1b22a35774d5a91a9a4800b28524e575a64275b0c16997206db61547162306e2fd7993c8f1155fc9cd50188edfef88b94521c366f1aa59ba478754cd903ba147d124b632159ebc07dc888f98fdc406b8944a721f64f81a20a2e53aa943259c78637dd78416e3492c3232c5706bb854ead40be1839088dc8ad97aeb63175f09bc48ca23c11e3382047782668db07b1b3764ade35f5233d40758fd71219a6e1f3e54c4a119e31868fcf0f2910d4e969f689b95e429c85636b9c48b64d3a70e2fc00080a4f2dd972de941e35057956e9f81180a864e34b79215ca5c5b3bac6b63ca4c7dab44ff4c33641d4c9911e2aa0c172a27e49a777f48c0db1c00fe1ff25e451850981cbdb377cd9d77d1935a6fa9aed2c57f949f61936c7c8e1720a8d06bb4661356c573b4af45e8e26aa052095f006f30ac168fe299fe965d0064051c959152913af428e833b5c329d332f90b421b0ac4966ef6c47f4e9e16f6372a85561404d827830b0b694b157808d946cc7f249fdb2c2451d4939896128072fd5a2bf3d26e54745787b889c063b167dcbe2ac3d349a305dd178ea9a11376617eda0000022800000224000002200383eaf3f7cb73df7a3d012c68520a9ef3c9bc8f00b2685ec2af8d7527261b03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e123c86fe899d961b011bcaf02d604b6c0eabbc17a66ac421e26c90fb82115dc5460720e6e681ea4c82d3c30a7100b69b814d0c25ab0bac51e3623326ef36097fd768be9bfc51a9ba72adae7f96438e610237903878c704a3a36626bf764f11091d7e7375967bfa6735bd9406b192b06ee70c3c7eb10b130295a23ad5c96cba59259e923555ad37d3263fed4a57f41c7ae76820a746d92ba61f51591ada967fe4f10e0fe9c4da32076b09480f414d41332215c8ed568291bf6be5b19173ee34516713f686d5dd260c56e540c19a73844a5cda0b9b4373551205a1ab4783763148492c0bb388704a769ac62c027550de1c9a9b2796f4c1dbc093336f352086d0d9dbfb0d27692ee4f0a47dcdb713ee6d36be344d4d34317e3dde94b0a47558da7ca291feec5c92f8512662071f40115dabf0953aa89ca38b22f91c0fe96a0e463b204dca67561fa0ffe009c92da47b567bf8b0f7a53979580f10d4bbccda075b9ded0d45cc0735530101a592c74ae9db6a5c83367c58d7a01e69ddbbc18e9c2e6308127f205168eec9c1b9c897c675840ddca94f5cc3515f44065844e95e08837e0487b4d767a16b1fe706f4bbbede5e0a04c666d65fcd96642b3a20bdfb6703000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00227cf04c48191a94852d0522e983897ccb812020f31171dc87961133dd8b8bae32df24360a6fba7629dbacc13f57a5291493f1ffe6e908041040c24e844c6054302042e46e26ac0426ea273fa5735efd5127aa9dffb6aeca943a67aba0f4b4044cb2e4d8c0cd6f81fa06217310d57ccc5e28ef915cb61e6e76d77e677e86f37056000000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5a7a6b8dd6e6971da755cfb747e66c6404a80e1c01386d015a7815aa15fea0e024f1deb584a48f718238718a2c976d619f0cc22def832d5981e75e5dc6c954b0df6805daff4b3aa00054854d5e630d8393c41efd56c566b72e36148817092a79a1279c0adde3643790b47f43b040f62493106c1454482eb3b9655f9d3e38da62bf10524010fc0947cfa727c0bc6c506d89440039b723989de5e0ac9dc5587b175b83c25c4b2711cd9bd898329518d5e346e61efc27276537c1510bbc8b8d3f2b85416b09a9ef9c8e24cc4958d79fa5282ccedc3c6e1bf1c1e7288690f81ff4c847ca4cb450c37913385b1a402b055dbac5ab9b195a61981312098ffa31f3dc4d565a1c22ed46499ef2a1f34dcbacc109a1b850f55bb2833139ff0923e7efc4e7fbd25a214f3c49713331320f1a5db9598a0eec01b8054d4314725c37fbf49d59be94f2fec71baa211212752e73359e694863f946f104112231aac274d1f1e594bb4b1977705ad1079eedb817c93a2deb08e97190d839e900a49016b76390761b3bb953437d12c9d3fb6923088ddf698c7455108b0ac89b5fda793f950f87ac91cdb2a2f3539e81a2c5d7ad08b124beda20660b219436a71bc03fd2f08e219fb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000918ab60f19a09834a60e22fa0d109ee2ce9389fe03421e90f34a4fa336050f3d49f60dcffd66176ac9a6941f7d3d27acd7f6eb79cb9fb92aa9ca1455b9ff0196b9ed203f86116640edffc3c5a17181e154b802fb439f2824868aa210c2698f60dcf992c123f15e22a8d567a26aa6ed62aadfa7cc7b20c0f4a157529d8b6190bc87f212d7491e83d145d4aa99b6dc6bacb794eba39762b0edd06834c5a32beb70f3e1ac4cb92ef8a15940bd5cc1793fb06849bfe8c27fb05174b2519824e0ff8b11a5c57c4f6e52f61ff762162bb8e425dcc07e0355eb4fc2687a789f3dfda471cf5831889c5c9d7f784d9d69b2e1f495a199f99b86fe1f6f56b9838723927839f782fbcf138ef6b73aca74fd191b1cc6eaa17d05e33b392d774706bf8c4b5d8cd9f0d9ade5bc6181f90b68dda11624d17b4de6365ff6f68b2b69016180bc65d7ebef9b38fbcbd656a4e26d3d6ccc162db6edadec30562535e326c46ae3f1e7102faf527ac445decee8410ef2fee5f20b8c565ff89eabc0c5f7c8594b4f7f6d2ac65269529aab623a6294a03f80a1a0fc3cc42329c1e0b866dcadeb263354d8f4f25bf269f143282b36d8e5d33eb66302f63696ab3fabe605dd84820db7ec261800000228000002240000022007ec792c59bf8b797ebbf9d111587c965b27a1294d1eaa200d2ba99d7129522d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000428b9828691f183fcacd77e1ea1780bccba1798a0af04e6f684cb7d706da785887e9a0013e35d45d23b633bfcfeca4f759dcbb660eb861ee765580d139b2a5c3ad4831269e95ef3a4f1e189603bc85a6a111a0b3858beb90247362111cf62d16de4be4fc1059d85cd46cb44f1b78f0dbab93cabc5b7d7afc6526c5ef4b8ea5b0c86c439ba46bc709b355fe46c784382330f541cee2bc1fbb09be9dc1105eb39e09af41f12983a8d088c962872dbb0b144af5d957bbdb665355269ccd286af8cd76fcb9b83d9db538dc7bd1ad64e0e877fee2847849de4be5103c42f011c6cc279ad49443492e391b141c6ee2f6021cf5ab5e9b92f56d2ff021e9fc39dbc7379654854721e49e71b4c49e7deedf1113d228ed4fe1e108335482f594e8dbbfa299c87d595badb12d4f9833cb3a73f2b3ada39c3ef42812041ee8996a47db82e779411c5ed31f6e024d3d7e09f5a068f51d2445a4baad77f597ccbb11751fa2dd20b5e2e05de9a2517e28470acaf0dcc8f0ab61fae5e80dfbd912959ae170eb4d8edacecb1c11a9f0266b0137ebc511e6ff01c8bf2722e571e1267bb8fc764bc89b07ea9a0bbc2fd0bbbf1acccf94f53020e8dd1120c9c15e8a79e98c111e43526000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011bb1a94d4f7449fd1e1dd048162855629192f0334d9f6d144dbdf546e860a1680204c00b59ae55be0baed842ce2fb094ac7e0c0501548a8a74ee313ece71bb947029f57136ba181aae1470411568881be1313d7da348bb8353b5becfee0674c4fd0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009dd505edcf75816f47d343247b49fc79c44eeaffbff5b1e916917dc8ce012baf7daaac3f116551815192e79f779b9423296275cd2c64282ad3f8f3fc928602d8c20f1987d3e7a398b0bcb1f0187dc699881ee189efd18975a2083555fbd868922d8edcb185a744bdd428f3669a1ba4e8322247c876784b7755e8f60bc5988b72876c5d0e7626fd005da687fbd96d4b0461d839587981acd073d79ba98e40cb75b0236ff5692a9fee194ae43946ee01208584e97fd796d063d4cf9b8a956df84fb5c8535eb91bc98025ed0e0531c8123e13c756a71353ab3267c70705f155258ce61e360b3cde562967fb212c3143f494201ef9e79aa030a433bbfbce43ca100b2e421f239a360455bc7accd7e1194efeeec53917a909d2bfa77f493a30c2811ab3521babd30932a8a6c8a4b05c30980fc7d220de000035ac6459979bf03825b6c40aec42f20a9bd0fc43131ec933f129840521cc08b87d7aa4365b6ff76ac235ce75290394193b1c2c9586a3c8c2e74ce4dfa7ce5327d5bb9914b774366d81900df026ed8d549241daa9df42684ea8ccda0f556090c4b783372538c8c129e1d4cae5a1b29535dd2d8d27a0211445d187908d60a76c481c4a6c85574d4593ca920000022800000224000002201c0c9a279504f560be331bbb1667456ca34713f9a88ec63aa832bc71b50b61d2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002eae287f5cc150fe7fd4307c71f830e28dc0370e5a734a64eda35ee6f3538c221ca24536e7d67c5c00dd61c6303df1bf65112916aea04bcb0c56ade0ad03f7079468376f06d30502699ab775bdb6ecd51f74a0cf0cb66e3f2e77a36ae9e4323521eb07db3fb6b093f53388eecd8b69a7a9edd313a50e6e9590f942d9c894d56e5dff2b53cafd941791a61b99cb18e0b9ab37ddedb74fd56578454dcefd6aeb91849e0b090d1df661d796ceb3e9941e52aec7291bb612294c9d2cece296e55e5ac9d19bcaf19cb6e909dacbf4961218417e83818be685093b96c579228046bacb7c1c964a993e676ca4084c84ea09fd6e6cad8b09e1e0827b247625e5a1f8eabee12c6d5e421886b612b3838197f6705aa40a5ed3e5286e6dfc9dece27ba1fb4f5a6c92a4dc192448b622f83d524bd56d5dc5809120323fcd1fba00d8a34cbbb6dbb47d39e4beef5ba7244809e05e881554ec685784cc46b9dd5a82858e0b355ecdb24c310da95d51a12e7ffd649b05f1b2f1fc034847bdebaefc7b9b29b5869a63a54496c6d9331a5e2cdb022a75369bbb2f55f165ac12d1eb51c30b7e98cf30cd8bca43093cff26937c9870a1e06ea11031366a742af5b5782f7e571b2176ff000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00225662835b1e4e095e700405d8ae86ebc8f81b19e7e8d37f2823cc1b45cbf88c30b37fee946845919071b5b2b3a8a9002546c867d8fefcef5e1a3c3a1c3fdd5480205178f917ac5e7cdccd57678db633ec0c07189cff5fd0e9347246112009c55da2d74444b10679d215d0561aedba7e7c77202130ba2fc65d82d8c43983f50aff300000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa1f489cc6548cb84be2699367808a732ec0603094c8a80058b172f5eaf07183d7849f368ff45f25770742d15831efae22f7c36e3238323be589ad9478f7a9beba55b8c0ceec1248a5e365bf452abe545b6113c10e00792de1278beaca30cd54a692bf55f341586005a09508f7bd6cf15e89ebae8f3204ebaeb6e561ad29e762468fe4da39174bb8818ec7b34adb91c1e54d4dcd5034deb81b8e5b41cb23de1c9c4118c462775f2f43d003b8f282ebcf2cf7ecfc86a0489bdc5f00dea7631deb028448d9339b496ffc689f754aa08787f6772053804f96c4912c249c736a3024bb8a141b9b6920f9e6715e0abdf80542e2ce82f6821cbdfdfced87ad4a75131a308bfb3170def93f5407b3b992b9ec77ed8b210ec9577bfbfc8e3f2953c8ad53cf7b7a018884b64bc6af638b14f8d9550f7fa480faa8090c774ff75f6567c0e5bc0b9a8900d7bc5c532078cb85f04f51ec9e5a8928380c66b7263fe50ae510280da1bff9c8f65a6051b032108ed47856a78309502dffaf7b6b82bd864aeb2905d4aad9b413c57fc82313db5ea8cacfd91d67558cd4f6b4aff19c8cf0f7f7eeaa5b640d9813137453bd683af875e3c72c4f0afb361dd0497a8b1ed24ad6191dde00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a11c491c7385fd2ade0b661a082e63099dffa4681c4adc09b179e3eaf351178483370b3303697b22307cc0e0393e3260dd1050e9972bc7c9919d58fa9678f6531c9f38f268995118d4e6b2d27fa5a0215649399240392e1301770977ab924f183e62320a8ae2bcd932fa714e6b17f15e4abb04075ec2f4a91dec577f405561dca9ad6d0ab2a077d73b3312c9171093232303bbb790ba315b1345caa0f19d6ea865e81af89d5d318810e7252ac87a8eead10cb5234bf4bf49c05e0fd90cfa0ec8b27e1cdeddb2890a84a641393ed5292f622b0d775789a1f221769eae0020585dfe0bfd153a1549c863d6be25a29007f50b0c625c90e869e039c3e7814b8f23dd866b91ab569b90a3b71ae181167d6e24f86c748347d5e33af7a47ca70fe1a0e7cec46aa28fb946d015980bdc0a7e37b974847ad3dd40cbaed9afe4c85924cebb05cb3ed0977450d1d1b237a6b31afed360d9cf2040b8c5f4a7a8418fd3943e3435ba7832d6598496ea08c251b4b33c50b17b588b30aaa4a8dd77a732f60708a5d626f3169f01fc903dc7621f96ce2b99f1d55681c1fb36dea0b253f67f310841accc45a0c13553e2e4d6dd677f9913bcef7c55e286de717a1069a1a5bda522d00000228000002240000022002b27cd0de685531fe8a2a44e134cfb8a8a76de581ea3d936f289e22836cf4dd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dae95842de5fff5a88cc7debb050c0b1ba276f2ad2f05bb340c697e363458fb937e413c82a890040130badaefdd54ba6253212425f54153664a98e963ea9a281072400813524e071a979236a0bca0a5c7535c2879b98327fd52c3c11b3b77d46dfa957857727429df85986b47ff03141a819cdcb9dccb7087812efd160f9b4ac8d2df677eccfd988d716c2a19030764f73eb6f687dd9e2f43c3e56d709412f114321d822a3473b28fbe8ed2c24a73a40f2a0f31edcefe94cccc2f6eeb2b82035ca1cb844d13e3ecca2dfc7e3ebf49d3cca385ef34e566aa4bd471a95badaf501797c374988419254f9f96814b2ad1d874661732b9c1acd900011d4fc4389bae2e3d722ce7685359919a9143a4ca035a89d3c98c083e32180e648552b748d63547fda36e8cf7f97468598c756b358789ef367557a5d18bc973e6e9414fd9261965e7cce1c8abcbe85023d3c6b1c80baf1d9dfed05e96ede712f012ea273993287b9c80b3eb8aaa98582450789650e48d8f85f0611f036375e8d1dfcdcf3390abbbc292359ba1942f61b758ce2bd0ef98b4a026b940b47624ba02c0bba8f661766425df2d681c1450c8fbac6a7fa16d4dc36ee26a32c9aa4b8607a0419b478470000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011e143c8947bff399d6c9e12d8b72a9c30c0e643292f813c555305492b0948bc202061e945fd0f0a58f6ad38e978039dc1775638d58987912134da3b1a8bc6e2fa11b65742b67626684c5326049338288dd20b2d02a243be8baf29fd3dd122062d50000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e5ffe4cae3ebbaa1388eb07a5d6366f8f8715f29e34a536efab3cc3e24e85d44fcf819567e6086d9dbf62f03fca6cbf5fb9dd0b786ae2ae4369f2b793a1e5bf49bb40ad3bdb05d06b08156aad658aec9b481a1eed247ccebabae6a220aab6d4fa172d584ac97c9ff64933388b2ce2c8627e301bb3bdcec538b7f304d3df37388bceaa043ac8ea1c3718d6b2402f24ae71fee02a1db325ebfbdb8fa483a2385d452ba6f306ab6821e8116501377b8811b9540fd7a8df41dcd1054630be4a602fee4304e167a11167cddb7a385f6ec94c189faacb9c001e00c35a58f150614c56e6ac65763e5a77fadd06e46f61b9dc39a2c0de760fdde3b480820935eafa44ab7c64db358b7be4ca29d11158553b7e1d259b4096c2448b18fd6dc3fdb2d49c25e4444c195f876611e3d452077b4468251e2d7aff8b660788b3607cb092b3c22347245764832a5f42535976783e39dcc01c1b168c91221d3d36664d73ab3c749f09467196aba6ce28126a075200171dd8a9b942d3b2fd3b56f0bd13a1eefa2000a9fb41ceea9b8762dd0e8e7ad6165b59b690e8d1628b7d0ca5e5e6ae06c6a1646cf831cb9022034660994adc0aa299de1a42149c0da4d4d9ca2226c1987394c700000228000002240000022019dc9394e22a100fad2ae13e23bbc3db8a83f9bdc8281bdcb9b7d8492bc622fc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fab32173a0ad6db3118fcd212452a09364ee337118cbb9285efeddcfaf64884d7baa2864ed8512350f32aa8f106e620c6d4348b0bd6f26a6dc3c56666a1bc82a4b35674b32c591db5603c60e4f4009069ebfa4c2a8ef7ed4ac26bc7cc72cf83ff90c1457bcc12bd63b8ad31a185da24cc2f3e9446cda0717abdca978e67b1343b1c4f46870255e20c511605961c6a262e3b4f1b639cc2557cad1488b6b2e15544f59cde458b3a197a41457422bb11378ae5ca98dc25dce2660cee39adfa749b7a9287cf2bc745554d91c1581e39df9537fe353d2c4d6d0453e0cfdc1da9b74e327a0759615e04eae124f5be80b41fdc6c694e45deaef240bb723875c1fc05c20bb1380bf0276516fef9f2bcbbd248d45276a2a2cdf702b5493d0fe71ae85b388e123f0d31ab28365bf015f274e49dd820ff995961d26be88df04c839807a00c19920d66573e2873f9445acb57f4cca445c32e55daf3b3ce80202e581615ac212c25d54a8a94995a87353d99174494fee6d9c6ba020bfffb91e56f7b555bf876f464a532a892b75c77beb9c3b7f636be49a19c9e60108180a2e5213ded413bbc616d17c5ad4878dd028bae510fac60297792a04bc45dd95589a64d5499cb7312000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020bc5a6f35b0a4a0161e88395ac696c830c1d72cbe39e2d937797b1e682298f0719796339473baa5cd0e171f30209aee4a17174a42fcf562aeec5b4b234b8a3410208650d0c57462a8df4569ff047a5925f26b04c7b1ee5d707a30de34c2a2f31a10ebd31dcd3f8e40de97ba70bbe2bc67fb1c9639f7faa4effe9b92f4aee0cd8dd00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008012145a1e6aed99837e5b49884d3461c9eaa8e5f0dcbc94adb481587836a7eecdb899b8e413c989e9bfaead4aa9b5470c1119323eb98c41963961cfb27004d96ba7103934d23dc81447a6186703aba480dba8920e288358cdacbdcf2eca9df99024f2061e4ad2e05d14782bb8a5c41236945f8b0bc46ab3d669f7f5c074a77093aadeac308c56e7f7b14543cf541238ef8526ae437ad9b7c45f90b38bc7eb65b0882eec7b2f3defc6fb46b8e7d0ef0862f1904cce0908a6702f728735c26997d587d34f61669a78b9851c7a40cb007970b26a4d088ecafb74670e8714282e6a5fe6a79b3f1f41ec92970d08b5157a93f2c453cd8a0cfac5a40bd032424177b5db82132ac0219d04066ba38aafd2b64d3693af3179f90fd67e9ac2ca0eeae1bcc653c3535c6c2d25d8616fce682bf37560b5dedecb82ee149fe0405b4a37a13d1026227de101191b6901c13e2ce0c642f224e2313e9082a866342bb7fec12ae9f595804b72053cb1e3084d1fa1c3f20b5dac9d64818febf8a554e77aa7c0a2eecf4662230f5e24c0364e741d21aca4cf865dff6925c4a4d6545b6c9d7799a183771b1e7d32e8e0a431d19a84943bf50b1629100b1c91c0e11f3aca797141c2280000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2b2ab1e49bd7fb335f885af2e68a4c7db704a77c6a49ffc199151d6ff4107201a770ceed2bda651bf279935a715ec82dc4c717d8a0c8cf8c5a3a5c58fd0421e11a99fac598b53835dc1e1bddad674870ea69b9c5b1633be79c0b4f296a8965db30df613034a734901365b316bccb746dc12625bca30a4bc1fe4b1d2c3b3b9986dd59dc649ade4b95f32cd23f661fd1696f14bcd4c6c51f4c5dab0eaa218e084a8f1796729c6ad3e7ee46f382e35f444a3e89ecb85281462faa1d886a175e2ddc30a87ae3874b9d079a0f3159aa5142f31eb3c7c6899103ce4fe465aa5cfc53b18b99292ab2760c4f94fef2e774e20a48f5d13a0da676e9d497580e59de9e32486ca6fef55ef816272df049541a7905ff15c862f26545be1adc85150d810acbbf1a4ff753e8305220c072e5d8cbf63c3e0542632181d95ca0e37e294c9cd350e732efbc159f3a48181c83a2645fc5b4cf90d984505067a37cabf7b943a6d834b4446996f436a4f53651010eb22684002483d6a05f9cfeca4f1b106372fa324a8fa1100dc0fedf1253477bb1aeb569eb18927d2055291eee86b4a535253d7f9aed1001434e0e6882c31ede7f5a0315140224d22325e9086bd10d9532a8c3f485800000228000002240000022005fa91574c164069d549bbee054363075111182976681b8b2aa745f44a9fe44300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000191ad251a87e61fdf5e3d1895a1c763ecdf1d05a8cd9c91a2282f9b46445d631928c3025c35a95e6aefc912553b179447aefacf080299ffc954b3dcdd2cdabb7e3e51864550bc63c22c4927a6aa011fdc43183e39d4d356ae4bdcb4300786ab5b2cd2c6e7eb3a72cc55a7e4d654d3e4b8fe366cb14b409b495a80bcaaae7aea90670661f59cb47ac3a9df3ac5a98ffdc3ebfd6cd8cdb1524947cca1272a953ce7129c7b9446cbe3afd1428a397943b04ef6478d5843524e329578ee0a16cac08ca5217d8d89717382e8e4c368f5af33cbdc4f8f05238ac37c26623fe451c9ba45a701a6630bd495f613f2680e11143053b62d6ea424456c1f2e933c51ba26e219c0352a0ca9b9ded235bf58bff81ca8f99be8a1c2bd6ee70ab6a69aecdaac532d0207ace9922d5efe50dfc855708620a938c5002b75cf396e975ada769e7fae73c1aa330d40b2a0b2f5fd2c5d5ff1fdd33fddcf514c0884eb14568fd751fc544be275a3f34175d9aadfb7a404f53c737c75fa8257d1ffecca149e71b3c6c6e8cc96fe22216e79bf7cc4c0237a77b32b426d25ef4219864d581596ba5ef3c86d351d4b964e0a98f455eb13d272cdc0535ebc660b457298395bf4b497741a219f7000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020244d18cd12a6dc10b795dace30c26a171e782bd23e7dde3ed9bf3ca534bac070c19b08977cbb25ae0bc4309a063ae16c3022dce3e26fa99958d9231dd210a880208751c7398be8fc02dd89fe03be5db60f596d2a7df2b4b55048b1751b07c72a72867e4c97402b81fffb4148a0977dd051787eb52026c7c2c043edb463c29bf6e00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ad473d169b541cac21c21375d3b0b149c6d5851f61a055690dd7d91165ee9d55b06560e741db6d588c2ec1158f1dafe9bbc506f2ad1bb2f217afd246ac03c96c88abf1a28d59767e95a96706d61406a208411ed41a16b65cbfe99ccdfe9d688d89fab4815e3eb739ed7baa4c831924515ba1505055939d9b587a0d88c6b909adfb4a7c4486eea8180b22840dbb4a41e973a9a38e93aa298a1885bfbdd14d05efad8b021c573f3bc5f0db45d7abe6d88702be3086678c8ffc24f359ed33b30df702d3e8689ecdfab2aff6e64995e3f030cbb8bec659a03940b94b8f606c9ea1ceed355507907e17ce5875beefc601a1bb79c0c5f032afc4acc808173704faaeb5351ee0cd616c71bb8ea81f32f5b62a4da108f94de7372439f0b42a6dc176c7c2ac9b6adacaf53d72d2f0f9787ff29388852658a479f7396bddf22b26692c1cc7ae14b85e797427d91066ae88c2712973805c21e285a612fa368c8b80794de66266493c37d4d54da07fa9893a0d7c5cca028f13aa518f4a23ac8e72df66bee68fce3226c6c4ebf9eb71acdf6262b676161a231a671b8e4b86a5e555a5bf83a3b5397f2f2e6ccdbaf7f962f5b8eb0ce939ec89e9fc616754580cc552b8b8bfbd70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a75e0d8e0c2fc0df27f138b6538a83c3d88eacf9044fbebb8600dcc5ebaae0a302b357adde3207b51b48e5184f5a95a13c52b324c701276852292149735361d1e3266434433f534900c331d9071c282f76ee5f769e040518183a7d08df452ec4de4fd689083fc048f9cc7a9f11e6b6ad3e164a9987a6fec7482750e71417e1ce7c380998ed2a122dacb1ff37e2acf731ff4939e34f5924271dce05588f0d5664bd518028181b672d0046bef6cd1ab056e1436529731359b3b320b307d2923db0ed9414cb1dab71ff5fb52b153c5866c14371d05012b072f3edbbdc2164ca1647794aacf5ba4736a32d4b7f481d46ab18640e76442bfdec0c02786f8d294e13eba904a47e602ee7be2a0bf7c8e184e77dd7c4990a3756555d2e316c3a09603e556cf3cd2d14e5200ee9f0eebeff81dfa8f8be6cd455c4f172bd243d1463e35684d023581a4d355efa7f0df59ee32da90fb6f423e5ed4fef0a6e89d76b913ff46ef7458876f52fc45441f1ced55807531ed5fa6b7b010bb7681825305a085b6e1f9de2e1e27efc2a3151fe0ae9ebf2a9639eaf34a589b16b09aed768454a19057d8a45518b4470e0888ce0f34e495af0f4a2e74b316274aa72febf7cf7579ae7e000000228000002240000022012e2c17c05781a2bf8d8053bed8ab841a34913110853298244e4a5ae99b486ff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a21e8aba8e599955cfeb16d6cf5346fe375e6206dc9fdc3c67f43173df24e4cfb819826741017c810bee83c6b00b1c91dfae5310682d62f9bfad86ec097f30620c97288f8508d3de80280de984de6283216fda967878a8ede781097c9e47ccca0cfd51c9fc39e217d4b047b68ffcf8ebd58c7a3e5e1b404fee417e6af659998c0131d286605a6c1efa740bc4a6cba8d149f2d67e316765c870d67b744dda91ddbe97c6eab7ee5068fb233b08de03bc759fd3d283b086e955a77da7fddb8126ca3443baa27a802d6edcac40562ebf6a1235f246cae7b916f8809beb17fc1b03513b5fe0e44c35ea9efb9847dfef192c067fce386855a73e2bfc35142e3050827a93ad9a4fb28850eaf4dd39eec782139d4c52be698956c584ecbf509e58c5a126bfdcb7faab50334c0c6cd7ca615300e0929e7eb38fb5ba9ee1e4fd7a5ca8f4c536e42024eb21c0b2b7ce8052d24643ef88d13da7e676ee90269bd2fa1ac31adb7b277b4f0a0dd84cafd3b108328dca29c517ce4aa944f688c1a7898cac1da8c88ea66334a363e62730a03f70300bbf942a9317036f04cff7fc18ce76a418eba63d4ff0136c7bb64be05029030ebd8fa9c3aa1651747d05bb5f728f3f08dfc59e000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00214703b9901e29384b3af28072604d10b234a1712bdfec2872ed127b143b8a14b09592570ab3a13010c4c950d980d885bd1050c10a0bb0bbaca09176425b2eacb020a40a00c7358a67b754694acf92a9647b55ad1a58e6e5ff78e18771d40336f3020fd06f46a1c22d85d01b02f29368530e967dbf8f91b9899e20da36e2490775800000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015d55a07296a8aa67e0a145963d542e159cc9ca6d17c816f4b6a112a3e4c05957bbf2bdb178fe55b67a17d2984413a4b070ef27b6ea21bdc162e869ed671483c115083f9d5e34e478936e68b6578c2c5b4a60b5e28078a5a31f60cc96e35c9c0f81a53c94566baa1464bc3cb82385048b7ce0d47e696bca7c539436f087b1fb4211b850a41f5af8bbefa22e56aa880ddd8b084b05cbca8d1635f177f12002c0e88102e20b2283b245d3216e520b6fbd6677a5579e9f2b2b828cc3ec47cf37e4f96a068b238450a32049978cbd39c0521ed842d6db8effa683b07a9ec5d39c73621d784dcdd44151a84e435255b498325a4b95c590ba0286fd5bc7ef70c0737fa7f4f466543e003c306af94868c1471ee3dce91d109c312b336920de97db0ef5c1b2814b2bd1a122b0f33ddc609ef355fd677439753ef53495db576d603164c2374a92ca8efbda95955d9cae97e55395963dc9fc6792558f52f3f7db7925c9b1b4f876646d7cd0b032b2c9603ea04e5107790656d8feac18bd3f919b2021cacf5e039f61e56064a0a8d826e88f81753194596fe9a23b5776b5c693a0c0041ef2fa4d51d14deaa49bcda40e0c4aee4f3258704673d44fe0ba4df0cd7e1ce3d842a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d2b9b2b204400d0c0edf0325c553ce9848dab15c3184a429fc31da050edbe41d03793889af346490aa33b02e3d7242c6f6dde2a29b6ddc805df68c06e9ee5e8a70c7b07979815d053891579d6411d713137db2edca50ce75f669936fbe865f08200770c2d7e4e9bdca8119734b09eecfd9dbae0611f563093a150cc31e549046b06f64db2d75d6a1df86b099df3ebceec8648b3518bd7352f21d889e00c6cace259e85475d43f7ffcf334eb44a4c56fee24a98984b5f0d4a60f46979db453fa44e0d2b2fb8b4da680c7a46938023d747ef1c6bd4dc3ccefa815ec6d4f4e18625908236c76530c67e86794bde05261f24d561e206cca1f4f9e876bad17b2932be7347112fcadc6b6e973219747af93ae4db1de3414c02d9b8cae4014a0af9cf4af2bc28674a4b61e03492cbc4928796d148691ea7bb94e902f3aa34c8b3b5c8ff0e39a8b8b57bdf41fc3745990073c651cdd377993ea7c3c4461cf222e6aa9ec94b8f6a3016ac6659b63a201985e15b4db7a36e7f621c44eb17223d4daf6f1fd354f4400e71322c2d1497145fe21acf0ba0b1c6b4bd6039ec0db5baf2169cac1f0e4a516f680b85ceb6aaaf530300ea9f91c3010a4b13556e4a002c2d46e332b0000022800000224000002202ea8efd4c99c0967d4057b1d1419cc7d8d0f4573f4a0823cf56b20249379f7050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006c8febaef07cc38f8531c809a2400392427a938ddfee40bfe27bfa71526832c9765ca67cdc3273dda91f07d65aa6fc89774078876cf00ee62e0ecbc578b25eb0a95b7f11802cc96eb192bdbdf7efad91209eaa41c1ab28d4f771caffc7c010fd8acbbf255857a7ee00aafa5601dbaf3bdb75d8b78a43b29e4a4c2c53e803c2c5f6379aef32b7023d8762f79fd31ebef72d3b484327ebcdf5df6c7f85b613e7c0f4fccc6215b1ef3f7061b6167a7f1138b0d1596ff369f51ed8faea565dd86892de566170a7e8c67a6cabd2419c7d1da7df9703fec46f8170047ce548d66eb70a42ae2e698a11d343828d8c8529ec4aee6ce35fa9673ba1ebfd5b19f23f32b41d17a059be47536c48ad305671a455992485e098067523744014da215dadebfe397cfcb5f3b94416336ddc37e06de09f880aa1d7fad06399fceaa8c08557fc8d359ed60c834ff85158b1c9c2ea9c8730b77c192559cb6bd07cc80e628e88acef5768364ef4a3a04a8b3f90d058c25aff9330d94058fedd08bba33a500b4a499e2ba205e8db4a4b19d04d2fb8ff3652df20d1dd085c932b9f6098e7f443aa3073da644eb6c677bd5b7f559b6a68eaf755be2797c3eba116186cb2a38c99dee1f08000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400109c09959992a4de76c140bad9cab473ae1bc1b6b2598e9ddc49c4b4e3ace9075020be3aa06cc5e91f68c7d6a8ea213ff4959fd6063f1ef20c4182046300342f16f2b19e945cac75a40db91caf8e6acc44585cc38ce835119c1f9ac84109b2530640000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d2965fe674a6d117b6bfd8a9bcaa075015e3744a0779f97853c62697d8aa4b69c71ace7a1d494824d04af6c2ae8a422c3906255766677d44d711fd1a64c78db42bdf542a8dd8e33181fec3b26cc4ac1fd622792876d2feb750dbda70fb2ca39a238c628d1ab3e596a8ce2326e0ff6a4be0da57cffd7185827b27b90fef6c93d8fb00d698e7e4adf0ad9f103bc362f2ae27815fbeea7607034f029506eef6992eff088fd7f8097c63f12b99b0c4b054d570190aa5252ec3d8432470e7f2305a149e1076e09174a5285937f6603823db3ec1795d519a8f4e4b3ee6b920b2e3b370f8fa6c7d14bf04825c9f026bec5997cd4f0ab14d13bcbfaae4271db0a1cc5a968b0f693521ff65e9a670e2b431191774935e6245e1192d79ddd0293f37169817c62d6337b5cb0b7ba896d0b3e10fda146d072a7c080af053b9eebe0352a3f85e3335ad86f588f77cd88b30c8b8a6923af867fc88dd18d51a7f00251cbba0bd98cbe3fa6badf58487a987dd8833c2f4b5917a802cab999d01ca5321a6b4c0904c23a750920a8878aed3a20f08e979ed13bb46fd1516a2d557b77640543ba34faf74719121675b2ca916133c0a29516e8faebe08183413863a12bc9e25c25c7b90000022800000224000002202f3a90d3127a12a23319c68c2c8c9aa38961fc8e68cfd7e2b6ad94b21f71ceea0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011dfd27fd8322888f8dea81458dd380a1484f40485f3dbef68aa6f7998d9102f3bf43154e45403f288969d4dc50935c8f7b1bc8d69c9395272c59fb460df92eb5b66b0dc47dd8b577a7349b0a2112586b8d26fd6b805fe8560853ecd51cebe97965ce65817f137fd552010d4d8ad916a006ceb3a00ec315f184ea1d29ee994e7ad8bec84e7d19ed5526386969d48560f7618d3b8828e40271d72ffb544b45441cc9f262218dd68d64f1474cfa307e22ab602ea8cd742a8d7532dfe2bbaebf0abb5e6d616cc60c6349b3ffe31f2fcb385822e138aa4eb67b3787dc08fd46b863065a2037e27eedd197451d5ba1a52bf6eb58384a38281bd1150b9a9963f63c7b21ab65bade4bdfdc0bbca24e4fe6311865cdae8895441c2e41ccfcf3d3f636171edd99881703bd1c17d276ee17389d9fb93acf6c4b09ccd41162db2e3b76759d7bbae23b01ec6f9b8aff92fddbd32df00f41d5ac7899f6d89fde57f9f2f3c33b878da8046374b9cd4923ec2641e63f9fdb4310ec68ab97eb14aac20507c7e40ba243d8c4504661041c3281e0e7c6cebb1e587a04a12401cc5662cb0772eae44be33a094d0f9a844718ff876801504d1c2e232fd6b6c391dd9f39057886006111f000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00202455c9c0a1ff98a5ad79d02108f7fd00c14f259bab22308ae94eb263ebc9dfc2e44e45fdd39bdbdf9e3bf9c7f610a651054298996955c57f3af57be2d3ba7d6020cb49bcbbd0de83807cd99a952766f852ba14523016e9d2f34110601a6537bf10787e6d35a99261ea7d4d2a7b75f06efb7b4ec8b892fddf1b905fabe5fdc96cd00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088833756361d954b571253df929697c772e398dcb518f010dd89714121b5a920af2c6951c50aa0ca147c9100f19d80442861783285fcd150e3dfff0c0736351e1eed6d6471a39f5b0d124589ad82bb7e8fc4a28cd22a07206335644ee201f0841dd3af86cb4bcc67781f4ba4b92567cd412da403e5ababe6ef9f14e666d2fce120e6c7bda33956461b941a9e2e4a46b38676e00eb2e5096cdd4647c2fae3ea066046643b53e03986df2f3991f6befb09008a8733b3a86e9b9ff148a1e7ec0e5efbbcfdacbe892e5ed2e4e04cd67e260ef53a3cd49fdf18339062072ed73bb13bf4bc08f9f7b723ec86d9db60768e2b4e345def2222560507629a6633b48e7fdfa462b0dc74433d9f3d7504772740b39464e4da71edb78af0e1783b33ebd4892f22881c52f3f351ab481f43ff42305c4db4db1780e036006a8c9573d6f8796b49308eddd11705a5de2a3a15fd190d21434a0c6edde3f6c28e737a2d25c44ebdca576b055f9bc7bad06e7266ebb3fa9e2d06caaccf3c43392d56ee31f5baee2901a1cff95596b77fa1a4b25d19a5ef947ea9a5681a232e5095ab6d521b7a8c4d59b5bf6cf1183c942b940ffcaeb21ac642477f2e7aad4186fd05da513949029e7a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a43d56ac7869eae088dd997851ca64f315c2c87435089e829902609ba0ae85af07f70f0186ecfd2113dcf225586f7ecde1bd7111b8d30023ad7b728ea775d2d66d42e99568e8c095e809d7daf37d81f933f71eafa4e6ec12c943b42274276957e0f0782592ce73ed3ff49a3c433912f277c44a7115b0789d11ac5ced371f487e0ff8cd3eec1d93164207073172ae0cf8c3e92298f6865a7184e94cad304de83a0f76a463e34e310b67270ba0eefc256b856d7ddb2701de3b946d7e02da1ffd6fa839ecac1aead9cad41ef85724db2b4b172b661f725b5f155b475b231c32bb8d0aefc8ebf7832552708c33ec203a57b44775d61977b96929aaeff81a15cae27df83b8a2b6aed79049da95ef783bd1d6d115d79c5068e2f9edc28c65a251f99a7d76dfbdebb3c9f097e93da10bb5cc5ea3ffdfd9bdd02394b0b76d506392de16479f01a29434a23cd9322a9104a385aac6327e021f3467214d530bc032394769a1ce2fdd4601a8b03f8167f3428fd9e04a2df7bf24fa41a10f1d33ffd18aa99b3d362263f4fda3a9c1c96615ef546dc082f2e9c1a5578125746a885d1cba43a75f3dbcfa66d49266ed4f45af4e2338f1817f9d09c69120760f063e8db8ea83a650000022800000224000002201449659c4365d931857d8e602acee1c10f155e31322bb4c46f5a8bd4beebfe8f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029123b869729f1edacd30fe0ab38356d8aefa2c07e912be1b137e69635779e88e229af6fbe7eb7b2a53a5a15c0a41025fdbcaf1c463653c541f981dfdc1b4badc0be5f7f5f639136b7157d16537f20ebc37fa74c95047b9411474b74c398f9b3084f07bee336a8d47f3ee7ad006896dc8f3ce30a20a8ee6c4ecae40951f68d3f21a8c0a87257ae264b2524165dee5eabce1e77851ec105ee1e0b37bbf2591a33ed3ebf199f4b363676b6d99a142bb072359218c45b30b8091647f8eb26f12adfb692d35b252221089fd4aee0ed9aa772cdf5604156dfe825da5e2a539d109e4d1fadc42d18c7215eee1fbd396f60fdb5fbc2582b604c90790d4ebb7b088c133ee3e70cc3a96f94b3b79f2213c0ddaf0e522abc3ba1e129c87f0c922471fd9cd565efb4afb30b3faa1680d3bc523fbfb291412132145f1dbfae1d5716ab2c2b6528367dc8fbb994ea3f93343afb288ee7833fa760431a6bfeaf3f291a398569b45fc89cd5d200817d8dd79db0bbf830db4f432356c1147034507ff190855aded40957acb254a09d2908e22974388178580b817018fc241a5e4ec68626655851f4a5e0cb11ac11cdfe3be82216bcbffc058e7ee6fd3c46261999e2acbc4af36fd000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010d34c342053c17cfc051e91cc44089621dcb8438d4cc998ddd757c5c4ec5e5d9020e4701a4ba6cde02bf99942713c05d5a3ecf3c57db7b7c09b5b9c5fef2bf2e3b1b5fed4ab190349e9a2c822d8c14e0f857103f16799223c5e4bbe462214f7ff000000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096210e86e6a882258322a030655b437b7d073464a585cb57a732850978086e41e251c4698ecd477a122d3a2c52b81466b669d084037d87ef5bab253e4fe68cdebb3109d9975c2b12214d995f117d6b77807d34f117319929ee68d9b9ec0df5520b75c26129a01b44877b483683d6e26872178191d224c7e9a0cd8e7d1a7323fe50a26bf6470ce8a62cb628dc073d78f93a9932a52438522a59eae2d3295af5da2e3bb0872c0dc22e0e0a5edaec0474a15c7da73585115fd7b8a8a794f2c864023938e63957271ac01d5d6a9e18b5725cef1519be197fc3ebbc2be5bfba7102b69c6fed9ea8e85ff8d9fab7454b2326550f13fc225af1223435784f08fc4c6a6ca7d4d4574bb57dcdac7138cfde44abc93c2ae1114f3b58af8237ff48c02e24dc5945850c2e09f74ba4a25c0947d63dd94a72289a5a8299779f72080a04a52cadb6926a7913d291e638b9d75b2294846131b537d5bb625789372880f405e93e5292440997b2310b94ef34505b966d1e7d5ef35400f45cb46e04a22ed1ee4095142def85298c0213c166017992b453d3691a9b38258ab55c0e64ab869def6768c4c26a1979f55b126c3560f7ab4fa7f4c667cb258b8afe948e1c6b49005cffa3d30000022800000224000002201e4011f3b1dd372b078db8d6cfec7cbde326ce58c899e8fe4ec684cebe8bd2da00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000884b04a1b422b373764c94cf2c04ca9b5d8809a2f3bcc50629b062f198bf1a62dac6c0de523a6970431f9bb7cb4181a432494dd0367f7a95bea37e1ea7dc5651f4aabc1f179bbfe68df2817d04e03a764a98576c83c5798cdf820024d20b7c9f2cdfc79e244b271fcab4cc773baaf4bdc9f94d6db957907c17cea7875f8fe97f052e5c16cbb59945c9c5256a24eaeda87d1c141a857b03046df180d53f0e47d2eb2705ae3389318aad591041f9952abd76fa9fb8d3f8d71a96abc78b0a9ad3c32e6e2b30e7f4949d28a59ad8cea22c2cc5f20e3f6dde81ab85f32d81e11ab74855f6a51a2e8ece80a4b7fb3f10854ace09487e524f9e4c83d3598635b932115520a3d73605d6a5018352cabca4237ca5035f56e4c7479cb8d9b6e3824493fb0fc47ccc0be40edd1cac82c005a263e480f14311bf826cfbdef155851a5484c25de46744844e18f6f27807096db198b46baa8166ca7d5dd35dce1c17a5f3a210119fe692e23388ac87cc67516c7fb2acf75d83ae56b6941e5b63d7c8861a90b213c0a954f8991c46088ae2d2a995f5aa3252e6c07f73d98e2898b909dfabca67aa5607355b2cec4b7aad3b1ac7a15b6c0ef35348eb7e346ced7838db617ce85282000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400102ab1184bd04d7e0c18313e5f8b1ade24300e372cfb8b9664d0831560d2513c00210430594ec9f5bf1aa936d517b00b7efe8fce115ca926c68d37b5becb12342442eb15270dd50b76b7127879fd6eb72cffcf9d80d2d8ae6674ff68f3c778c6593000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa8aa5eeb28a807d6fba7298bb2adc7d75db9f89fa7473ed6acccdf9f9631e5128d34243751c2ab8fd9c2a486b1aaa0e50631e2a270ae32f846161a5a9686394cfe09834ed77b3ee4429075e1fb937b86ef51817ab05ef590874b8729469596cf138fc761aaf8c7644745e32c515da20fc5f0b893fd08926416fffced684d238ebd709063092ad98d2b29521b72316c2e8ac84f2fb24cf52954652188dd1303a293b829a01ea402d7cca2d1a2272a440c44f0e4108bac0d3fa5c588b081b68bc0b6b102722cc208dde96391b65f9bb28fd90e165606da1f9dad1a9cbca0f10d351c8ae5379ac5164b759393052c108e017991ca38ae28e565cf29aeaf576a689a1e5fa8d599ef2b490665e8063888ca177275ed8686bcada3d13fab21e9b028f9b6b6c76ad359bdb2c46b98da71f3bf7a0032b77fe3c0e66a8ed555d57d048d4f0372530287186137221f0b2eac440677bc4cc6fddef9564e2373e6b01d135d6c3faf04f2f2cb7ce204936738d57eba6e1f9af81bb2427eb0e35dab6b2f2ca408c2cb55d2942e11434bdeeed9c2c72a5b72e9505616ba8166c5382d4e85d8247640db0517cd32eb161f5402854f9351a5e89fb6b2d1b58598598ae55765f39340000022800000224000002200950e0e2d5580b5d6c765373ae8e3a4edce26dd815a1b299e1ed98235c4ac66a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087070b5d414da8d65cad0d4941a905bada202fe263084e1aa9c1fe409430fbd66579a632ff0f0e5ba88d7c5e7070631bb99a7a09979470983d34a253b252bedb5dc1f0348af5d1f101fb134976a404b8e9c977c0cf073274b6941cbd79f5f6bfb7cb8147c85ab41f01c883d312c4521f39dbe90fb7452366b4bd4040dd51854e61ab64a3ef5d443bdd2f8934b63763f73502a68153d2230d0b89dab4e95ca79299a774ac09d66d43b946a7a20ed56ee721c95d99dd192d17c7c0d5149417b35d9e7c61869c825c13463fceb43a0ef6d584da77503c52230f47a5f917e40cd54f57132b2d26109a9cdade687bccaff4c8966bfa5294ec39589a8b24a9da13d6cb889ac2d179658868ac55e121110caf34c435285cf330448a3f78c419315d6f642f464c0f4a89885f0497dc17e7405e3cd1a5c0f3e191440077b07fb526a62d853addfbf91e3cf7e81c32120450be4c650e25ca12a1f207fd50187725ecd81f7763cdc05dbe9eccb1ac1d7a9a1f534b133bef2f2f31461879e7077714f5ebd9cad47b976230202f00f835994427bf81fddb37bf2cca72b267cd37caaa0dbd2c16c16ffe7c1bb188bfa5696a38480974686d4dc5ad709f3fe6bdfb124e319d0491000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0021614e4681f830d172a7cd32aaa250888214cb072c1894d5c58e77077b6dc020115f3c1ce243f2634cf5edec2067447c78c9be57e6a7278d7d9907c97805b14d802148f49bd9a75f44e123a845f4f580caad4553b3b29d7dd0f82712b2f3f6f55111bf8e7c164d8f28c96f4a252419acda877ede2b94fb7a378cf0031b27d5f4b9d00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0d27acdb07b20fad7bdb1a982d5861e7fa2c4e772a480c20375edac23e764c221a8bf96bc01aaeed2788b9b9b0e4722e4fc3fd4d98d8c72a35494a69d080a456c87afe91696faf1b69c7ad829ccc6608f5e454169aa4de3d6dff3a59740b1db94f3b156f12787377f058179aff4bbe583e228fb622570eaf8c8f32fcb273afffa961ed5c123eaaae3fe732cfa695e886220d81320ac7a840802f2d30bb099c173c4b6d0ebfb82fbaf92b99870c844bfa22b019d92d3e5a1eb24720cbe89d5265fed169611e6d3c43bc4c5149ca1c2de8d5c6dcc6f8f2943a7349f7aa3d490e5d1b417d36d3e4632920c6b21a32c9f23b8fe912d8d699b8c8045454acecb0a6af366d82ac4bc15093c475422d278e445e8cdb5497fe2518989a50c030179263907fb7c40c605a2f009ad26b86a20ea4f62bc672a1fefabc21885a4e7e9b083ced1db0ab6fc163cdf8dd6ed21b9c3410f740efcf005788a12af4f3bf9ba46a25ef3f25dd4dbeec11bba185c98e87bda5faa5b07ca6958886b3598fa70dc6b98c2f636d0d7f8814bb31462c45552b4ff418ee87127b048c2773ec1ae27390af183638f94a8f138f01470780835cefd306fd828762d003c1f41dbe3955a48d48ddd000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021b6f7a37fb1918a6f33c0a9ebfe4e97454f5aa5b9ae304ea0a5768e8d56343b891c67c64765fb8799ecad88dd58a4fe04125e9f30b1d87acf27fd12f5b9b290b3d14a980efccd1e8b282765331b9cc94c08325f077217906c5196f51a4a9785faadae488a6f05f959b7297054af7896f1d2815ff3acefb8fcf331621544d08cdf35cf6d1e52ee7324bf9c0a456b9335e1f26d019ea7856441217492ca1dfba6b1b137080da2731114d7b47fe694c26fd871f03c37486ae8586e25894f7880e521413e790dca0e3ddff61810b18b1f2198ad0078f62e6a295edc147e11592b6d649de7fe58d37a9352e8eed9023e964921c49b8588e1dc6b81bd261863c0944a9f870017ac669cf7ccee0d6ae1ba6a459487b381099d73f6f5f0d9ba046b04b711ba15a060cf767b1f0e2ff4939ee421d2921a02972a799e638f836f9d4ab8c79d689c60fa28068fd547e95dc40dbf3988a4252cb1d48620178db79502961f9ae4fa32f84d1be3228c1aa19429a7e6b020d462251516679f7f5fab08704c07f9e973e5bb47c5d6b0b19d5b05f24cdfe3d6da4b563eea22995c36512ee0017bf686f08e5a6899512a2c4f063a849605092ec26320ca858c38539ba173bbe99df90000022800000224000002200b7090972bfb6cf10a750c53eb0f2810ed8a73b24e2678b7cd3fe8d4926645d3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f8872ca0f6accb93fec72a24d852853d70830b25c09ed5ff2343aca1318c613d8c8d1bd06f75040fb6147a8f258c601d6a8f866d490ba108946cfe993cbf21ec20f95987b0e925052343783c1454544a00422d59c7202ab77e73fbd28e7be0eb24ab5752cbfd5da66055a568ed8f0cbdb94b6d86a3d78d4926b0f8feba6de62059f6e214a40e7e14ea102e49ea63d4570c6c0472a6c1b00ba640fff8c66141497a76884ff1fa0d81b03bbd5a94953e38657f725d6fc16188fc22a89fe5f21b3ff3a370c550c308a436be086fa61661da765c07944e5a521439bd4d8ff24b94d7b40cc32bc97da635834d8db688a8c7610306754848c2aa99ff40448d1e70a0db72767ae01b1ab0ff695b3bd78dc9b00fd9677027cce1e21ba9b47d778c7e223bb2b90736d68c1b8160bee1b014cb93a36cb86f6325a51ade288198b54960f5a67d0008c6ff71ff2355c5f760b95426d0edf478a7800f65b80940ed385273d8d07e097ec6567360223e619cd6f6546436f583475e82336c8e442a3ff39779c0182f777a9a82c33ee2b513d35ebf2a053f843963b4ddc3abda3c0ad27d008a086e4766e5e62c97498850ab11477bb6f3012c6f4416759e83bfb377432a693731f000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00216f6044d5e475835d31f8fcc6b9cf837f69e3139311bb7b6f7879f421bd50baa0a244b96a1844cd48e910e782ca82843d5493f19b292c32ef60f4ab0cc328c5102168bf77c77cbbfb3158f38198c86528c6d5709470f621bf4fc0495225e05ff1c12ac409f7ec80f7eeacfba6714f10c77c9e436658a7539d9eb3dfec226cdc8dc00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a707d0e6affe8f744f7409bd6afa55b0f4cdbdf896cc466b488d75cb5c5bbedc03a47ea321395eb2d0f9c22f32f49444c780e58ceb72e6b3a67872daadfd2214bd9d23031658173cd7c9d46d9596026348ad0722530a9748b87da68428d7aeefb0d2bbe0d8f43db3235ddef23f83f442edf06bb354752708678add81dc125fa49b7c54f980db0cc04c7f4ccb8ce1d76931b7a6205b8e0ac69f0b4940f79dde07f0bad6d0afe98edec16b857d83c08df6e48ada7d9d4fa3575bead8dfcd062b26c3d97bad6f16d275b08c41453c7e760502646a7d9c433b389ef045015637d647a5083fe5e69c7a7078364501f04cceecd2e4cd9e2e6c584dae228bf912631bb958cb45f259a8c9f7b1fa7dfeba284597d61b0f0c0b61ca15dfcd8a7e332b11eab8a2ee35687729566865a67c86b6e44ca3175b42ded97fc638dc4ec9eddbe066471a8b6f4ce9d4aa6be7338a8a7f13c395e7a1ee5730ecf7c19fb043006be3cf63d1b15cf960c6f22b807862777bf293c37f691ae3d329341877552703b06b749ea8f297678b0d0b12d358ffd7ad5b923f8b89d636d2232cdbd4187de5af03017b6dfe88ebb132ef1591251c3318da59f5748415a4606ea8a1cafe1f40db884000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a6748b0600064b48dffbb3d3a6c8ebede41f30d994e6c88078e35e062a2e40b8f5103b0b7eaf4d213be062a41d0b980aa79bedf20fd7849b770efb9f9c72014e326e4dc3fc73012281aef0616038979cec88bcdc28420cb88f3211d07f1f9da0c65f196da501a6fe21a927809eb47bc5611398bf342d97f89c5443c13461dfef2f21e7479e4426f07582aea8171499d0a0d44d32f9e495ef48845c7a37d5028dc08d23164192add6e21b4c773202585010325a7b2a706c5fcca7dca1f26dcc5658dda54e50b2e6a4e685ad1e21b8a7c3635430d8ce090a17ca32ddbd4e643ec63058900d742080fc01eab5a0fd2f4700d2c8484c06daf77deebe9a212d2a307e69d1a42e4de01bd5134cc19c440f115d196ad82cb8b626f53b7d60db4daddc19f7eb88fd9a156f265ad4f89c62accd7cce04e63c064d329cca110e86b5623729bc4d8c20f4527d3a28415c7d99e34d9b2ce64914c9062bc029af607a8e1693240d4573afc61b4543a7e773b201bd332a0dba5398bac9770e070e4b9be07a501b864602ef2e68763c46595f9e65588a42cb8c65f3bafe6368c8c30ae34fae95fb766413d4348bdaec963c7c6c1791dee98ef8f10d1cf06813543821ea57545b000000228000002240000022015b850d712bfbaa2beaa5e2419fa105d9d856561ceb4338832379b780e1c0465000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fba237e1ed25a54eacb129e750779d3b3cefc651476c7e16faec7a141c6649e084abca6983251539dc9468ed41ebe98e588f6bc8cf50315f53a3ccc720a463c02793573c2cf74901c86a0a9d5a6907e6ea512dfe5116cc689fd6139cddd83a7f8f3a1dd0a6f4c2d460c3316605e63b4e9bada82b959f18be450ef7ab03c5eba24d926b43791a48f222667d72751aa1d28b522523ee6521f5d379435fc796e487a94b52e5b6155efdfc7bc5cf473eb761a6ba32d97cd00da8faf5aa6c9a8f578da9c0a40784e614ec58a9a154208d741fce21657a4de9063f2cb68c592bc1a2e2aa2a6fd939119897fcbae8e6a1ed52910eaf4ca2f5ba405e0534d2d54c200ab03605a1d2697ed7781d47ba48f32187e12fe56f5c053ff94e0f1a77f889ef48b41038518a0f7e2cdbb71887fbbf1b07364fe46706d7599bac06c8ef22180eedddfa9c54ea8ca15d3472fef907379bcdcae661490ae86743c28a8cd1ced4a0a7f77585bcbce7dca50eabc9c40268f9d315df0908226cb78d3f77a8872778bbb20825da4b96de788dc0135a988ab93017f42454aa382c4fae36d63e45b913bd6af81232b835846687bbce81c18bb29fccc4dee99f6191546b93b74f8393d3dc277000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00200c862493492ea316abfe0d737484224551dbe11cb3fb4d5fe94b843a81a61151ed70c4031f7dca44b3132621f71de16325687737cb3b58ebca95990878f98dc0217409c4746a0e5a5417bdb4db388c786881075533d2997e6fcfd5e9e79ba519d248111079a82a543356065fae5da36675cd8ad777017d1cc635199e60464d6aa00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000222faa0eb21fd5e4d6939b88c07f845dbd3ed1f853fee76959bcd2bfe6d852e7be0a3b1015573324633240321482d7ca29bd5e74f98f7a3a78b7bf691dbf39114445a97e6f308c25cce63496c72a96e62955d9059a364b4116d4b10595c3509856dc31c8caafbd7cc67a56799e79ad805547788a29d10c3016b8187bc37b8820d721e90cdb4661dc78c2dfc10bb928542798e31e691b936f4dbac088e70c041e43de2c5fbb6a0cf2337f57f6a6156b5f605be3e9ff801c7a7eeea532b0fe917e349fce76d1a3b24e459e2aab2f78290db2dd626d76e131fe9582ce6d178447ae14f401933f207021cee0bd9c51eeb8715c9efc0494da90f85f5671c28598cb570c04f775e4cf5c9ea51e9873d51bbb5b3a02995cdca6f71cb699500f64bece734d74a11c71acae60860ad93abe755b834cff1d05e156c5573e7df27c6b882c62099430beb8e67ef61dedb855060d00dc4288b776a51d159073453fe1b73a1be0bf335f5bc072b72f5377337e72fd65db1ffc387aca31ab709574b1c2235e322729f339814bd7d6efc9f0676ebd951c0d6cbfba131ddd8d11d2b23b9335ce7e02f2b0163b11e0555363e3ce1ab07cca4f71124571c424ac2d31b07b600f08e226000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024317c19ba3d16125a1169ea30f4c61f10d22322e883907d484f41adb0cb008dd34063ee740e255f88cfae29953630ba5ad277c5b9c61768a61b81127d8d4423e00041332948377d4a84b69d0ebcdb52e8d485e2e7842e05aedb9a994e26e042ff52e7c6dbe0518cd182f3470b305f8d4d3e220559b8c1eb2dbc946d3b3c1051563f0857e03edea3ce7787a472b2de520fb2a3b1dfcd335c092b2b06c0c719ee1d2484e0e1034376a676a35f341735dfa373c4748940a5e103cc561049a264067227b9b5761e6029d98f22a04ee55c51514e66a96248eadff3a0e8fdecbc7fac4467dca25cec2b6d543facbcf30bd1f965685a7f6c033b6c75b20226516b530cb24c2dce63f40553681480c8159151733494c8eb07a9cff28420c06ec4287adc20cfa10eb5020713b847ed26dced5d76ef94e78336d396fa7b8d0856632c77c6f21feabdc39c3f01e1f9b75acb93405a2a76e61818cf7bc408f9c69d31f5b49c073bd5fef96d1d5583bf6f38e3e3034d2d781c2774c778050c005f7e8d760693384457f3079b9d83028d3ec7059a4325f7df137d548dd1a2e0aaffe2da246ac2ff7508062680a28490dba1072623a5a5bde7a7db0fbc5ac139ba976ca9661a8f00000228000002240000022007c46ee3d44ce52024deb59a820c3c7d2427c28f36652cd1b14477bb50f1363d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b90db79da109ead370279b26953bae6b7cbca1be0efcf7a399bea2e0f01b6b7b412af79bceec16ac5d4a4194fa3b93aef3dcb3e5616b779831e37952a700487f5881d3a355f39bd674842c3b76cfb8b21e5f3b28a9ff3a3d167450108306b0a4294b67de7fddb357602e2ad55096f9ac5f6d66a24e3d7831ae6c9b91b69148825a765bbdf1f60b86da71aade72d9e2a4a21c907eaa08fa62b459ee8554ad5f8c3ccc7999b5186e3e8e980c7682e96b3308916139e685304052a546d760925d365dabf280e7682d68a1a62b6bf1866f5cbdcf7f940da131bba54ec1f27cb1a10a3c361645b93153dcaac336980fb021b6b2ed99a179ecfb30f277d69aedf5ce9710aeb4745b05039f0b1ebccfed7e77bd1b893743777c8038dd4963506621af6d3491e24c0c23f4cc1f399023ec394724e07ecc74b814b905a9f1d4c45ab96ee015d0d419e8ea84c182cf354a2b2ae3e7f11f27414b44b20e52a4a63abec1f35dca215a08b033359e30c53981fb6ef7a6cebd037f9a9f665afb85bb39553c304b0c09b6fffa1fb3666dd725a677ae07b004b5bf4765fdc0b6eb1f51639a759ee43a63da9310b33a031dff43b4810ef246a3af1fe8c78489eb4b40772bc0457e2000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012a55048af1e9acc1a7029b57f02657f8ad1e4f7f5dfb8b71936fa650830e44d402179016d9234dcb52198773f16bb861e1587086ad02332bfa14d0721195949fe51a9023e4b268bbf50f3968daf7edb89be17f7b6e9e6db888bc85695c4fecd11d0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e86fd2d6f4b4d88e0d92e2f833de3d9be6723ca7969c0c50db414d015c913834c93f1322b5f14e5a676f051a4d8d8a2c4e552d48c958c197ef8ad01a6275ef1cf20c8e264138a9acbebe8fee210481a230d8e56ba3d7d1255eab09454eb4dca5d1c6d1fdb1ef264ceb5f2d03463db6eef01ec2601ce8fe66335e4e3fc7909902153e5417f3ec3b42aba54d4c3c6ac6cea3b91b421e2f9fcfb803e6557f5b32e95f8e180dfb4de13c3aa19048be19fc4738c4354833f7398a0032071fe98005876859d5b85933f1a31198dab4b80e86358fcbd8f6cc260157d76ad27a0a01ceeb91d1e032ba742b06b8abc05211d53e3e939bd1358fa31f4d1402c5dfd938bffa8e8acfeca12ae0950891a84d452936aa0be756f49104528f28504accc54910a5fcdda8fd00fa951762012a9b81aa5639db1e21e383af7bc3d1ac95fa76c82a0d843831ea770a7a7930d0a07b19faa6d1d3880835d6953d27e0ef21876fcb33aafe3d231b790ad77191bab12391bef5ad1adee944f4f96d9138d620089ed526df3caca2acfec52b9267e0b1eeb76ac3faf004e2735736ce52034a60f7038d2e3896a7a363779d7fd6a8bee7959045e5cf481ab724a190e3e3a23e31862ce528e0000022800000224000002202d061563d1786ceeba4f6263d05bc7e50d6f53b0eff7d1c592525ed516982891000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d8b714a93c22dd5bf98a5b759d5064f463a851c953b78e2c4cc72f7fa2a03c9124874d1c1fd4a8b149d90b3b1d94facb9d88b134379714e009c40da30269a0f18a9aef6b03b5798f6996f616bb1d865242b58c2c71ae88fb84e4a74574abce640e0750a5df9f213576c8c12b3ada9ccf4f14606d7c19427949e1466805282c79a995a595633e1acfbc69f4a9e09b55bbd873af89cf3d46346d6fa534d2a5e14c96373fa377ae61121fdda51bb938a4c0535a5b41619f853c6eafa7c7c534615f8c37b3ca8bd5ea46910767c5e37cb3ebcc24077db2936d36fc9f198ec671a2b68a69a0230ee1e69454ff468cf4af180f466c14f9dc6f8925e40b14dbece03bbfeaeb085dc08b891b474147a0289f687b5760b8eae93e45ab16e0f46aa31475906e7a9a68d42b198a4bcdeea310f34d9099eb05a829c276ce0f382068a3cd0435b585990cf362a861be208b202cdfd29327894f4c5720cc07f3401319e8dd4e95a855f7314c7480d997fea615afd9c29cf707df3f6b8fa6de0fdafd153638bf31b783a801b5dda45f9be679f6efcfc3bec125fd3451540f853196d75224b72b78871761302eb9c30f511facbf184d3e898689860735c307d892138de251a1486000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00201744fa3b26310248aeaa9be177a87c1010d29d4221cdbdfbc26e8e165548a2e2042ebc2da5f9f26b8e3d131be358624c47b570d0b6d45c912b4b8f817bef8ba021a56b8ecd3eac947d6d18ebefe3fa607007c07be1b671840c4e732fb8de620e206cf663f295bc2f6caedf76541c06b6e5c41e2e3f22301e0638fcc45c179480500000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab4e074ae6d34a0cfd1455e13ca71cdf3973d4b37af666bc2d890b7e06bfcc844df166b1e37099c1e3b790c00ed1737e931b022650786dab9dfc4179a861d1d619b5df3a7fa1f5ecb9fc3e4e1c6f676ba78b4f40149f45472c4f41c2520419cd08506461811e744b7b811b09a314ddf9c41793000872a08cac7d4377c08c2b13d6639fc1377adb14f9f40336b4e6a77a3642f12e36bff572e527b1b24c17b24615efbd27b33c1c038df9c11c6c848c275883805866f8b9cc524bcf3e4294533ca8293b47469abe4f0699a30e9d1aee6b189c18a7d6447674f1ccbe8bded75037930188bc52879ff58d102afe570f3c82cf54f5ae040c242ae5c78271ac8e580d8feca20a83ba98bdf5fefadada70ce81e90cca8241bb1ade688ef86b8f9897df2ce81bd9cdbda4ba395f48fd03a5f08b8bc30e3b2946fd95a3cb55b96c640557f67b542f0fde904d6cfe64b51a1dbadd4fd46824eed82b54c9f83c54b5b14aeba2d576aa1629286ca4c4166e7692f4363d3e4e61f031005fbcbf2b9a244ed79cc09f948e2040bd841d6f71fef94642e7df80591c3372d29a0ef9086b73ba786605eda9471fa57bd9da1839d6f2d421921a8861430824813bd6696e3bf093fb8d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c64173dcba7dc75aea94cc95bda6914123521653afd6be401c48b035ecc033b55c351b1f48aaf349e527ac4ac9bb529642e9a92fee99013682d06fc1eb811e2443aa684040fc69d5724ab292bf3fe00c1f4dde5ce6be121cd26b8fc7981e5fa7802511ba6d280c5e100ac4978cc03a5a1aef5e096924413903851d9daa29a025c5f6518dfbf75c6a98ed42565481cc8b2fbcd7f84557cca162a299a22f38646897fd1df7c6718f53755e4d7b4caa55b39d9e4f87bb4b53359badaae1036ab78dc3d273d7c2ff156f116ec3b07cf20a9f7543980c182a4a41c5f03e2000b0f1ef6ccb06b7b411eec24f9eeb766f3f5eef0c412bfb1333e51f2225714e9af76c5f1d804844e91a04734433c29248050f226d5d0ed527d7058b6f11a01ac108e21b5cbdd6e925146948f0f2507ecbbbe86a698e041c723b3c55a6a04038cdfa4480b1b924d304e2d8c35cb135558e06053ad5efe6956e32ac01732a8f3f9f618755008f6dee29df5851feb1802a5df0cb2d6b109c430a26b277b4413ab02c4fa9d4700a4aa4767f193bf2c42e78eeb31e03173bb359c5b904ead59fdecbb1a6b57d58533b1d930d20e29b54747b8b6d07c83173d7ac16aa6cc8446fc4d068f7e3900000228000002240000022003da5c515b26db2d2fadc751dc1cf56d4d5f2e8051fb622eff17a6d94c921a0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e2a614ba20d2d9cc63e1c5fdbdb5073b5c06a2fb74c94c56418f00870614bf3b71dcb48a7cd806ea06e735adf854f1e7a946240074326aa4ffb323729a99f31e30b5b3addcc3c647f795bb6bd3e338a090ad34405b114e26cf9c9510d211d7e1ab8c284aab9a8705774fd04099daf4746fd96a32492fae2ecd4929e7619693fa6def68f9fb7ee13eb4877db4dcedbd9407f312dbea4e06b95ef2c55e7789f06e1bcc007d44dea8f60c4421397fbbd2250e166e33c96abce211eb5523f07d4245105343a08e4ac8145d594182208004d4528ab46abb7a12387bcd814eb087dddd24e476bf49d909f462b2cd6904a02440252e15abd6e592b5565f9ded1d6b161545d307163b73d0ffddf59f8fb493e1f2bc261aeb24d3a005a45ace7947ebd140fdd95d2bae1a34ce26cf4b474102fc3edabc7ffdb8f59dca6d8737340cc8117ab079f5205c6f2273eefa80bfbefd2d93b2266749163684bd32e635ae43d93d484d4528ddbae79a80a508ced21aa489feead81254d951140f56c257ab7c72e998995a5ab40dbdc8509083bac15e7fae80414c76ca8e4e301a369119ea8e18130d72a3e1f80212a861ebb471ef0fe08ac8c529026b6be76e31e27b947772244c1000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010cd176a0742fdf0a65904808bfcce02a648dad7736e99c5df39ec43c19e6adbd021aa1a0e517c8082826e7b50eb6d12c661ea7f900f66f694270c0fb1751a0d36410063fc59779654c2909cea1f95544260a1e320e2470753f07331026f8affd60000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000985c8eaf14d1a10a2c086c694c5237dc39492d74063fa92508b32c56312940ad4fc7ef0960902d1ca45f28b3891a2bdb0309219e0345956ab221410a86731a4c42caba18b1b413199b1d369a79668e0dc406dfebb04d7dd4a46d225f914928039850eb6b9b7ccf6ee1e0a019b14efb60c04908a1233ac07ff4d16c338e7e6b47488a11ac92b6a179801b5677998c033edf7946e5d4d629b1cd54b6c3628f81dca8eec527c47a6715479de1f89bad477727566327de408c254bd3cc0468a42b7c91b065eab18308b2cd8439909e4a01dfe6209fba70d69d62d798ff508a086409717ed581370fe128520bc3011cdc910ef32a6f12803ab00e5b67fd9e228125a88427d48ceeecab6c7aab12c170dce742b41b966dd6fed41961edb3e9f33efc3e1a3aca55c813c3b01226271e04b1ee45214a359b5acca12815fedaa60e0a1a6617cd3e524499c7449ef162a275b617dfd12c109210393b46c0b4b9d64370c9c8108ddd49c78a8efa62599823bfb736454176ec5dcfe6bb57ac74e6f20a8899dd0ddd175e3a4842a49703d445eb035e0ea4a28b5f728ccf3d7dad932e5788f05aaf5d6f7ae9fa761709825a233737635fb28d12e05a16166bfaa8fb9627924abb00000228000002240000022006fae39584a7e111707ad8488e489e53a478b5549f8c3960d4c825d3a1225a71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e066e0c776fe09a7ca7b585f42fe8f54123df47225e164a7233aab380ec76f35819234145b2905d55ba8c709af3722f1784ee0a6b1dc9c05b13a66b6cf2ea9cb3b8f297cf692a9a5e45f653c32beb21619ff5ab46ce625c9c0214bcbece824976feb28075db16414f4ab1e1a4a7660f73751125ed2d656db75ed5ec5d3b8bef14fa8b5c278478c8e1ea05a65e8c8d5da37280da098779ae25e8916ef1d98cd06264f8f4de1680c3a3a46c535ab544938dfe3092a77add1bd7fe459650c0c882e38f55393069a00519445d582cbe06931182493f7d69c5bb7af54c7743836b72713fd5a009c0d46d599320e566e50d056333493143a76e473827126df373b01c0ba00f6c444d3aaef8c04962dfc2d68496abe2caf86819c165da6b8147b51f78e20d2aa8e34d4a3dd9964c9e7495451974369703aba5d648b037a8baccf6c68d8b78d9a4dc13671ebfcf4b932dbd9f492a09e97ba12322db01ccf798d91475d5dfd7c2301ae6f56ad9a1636999a3fc403222a8cd2b243e1e846d805b69d5156666886290948031e2146a6379b55914889bff5d4af95d4c443f08133ed5fda081f49d4a118532c106aabe8835ea35a1c4402988053210ec35bf8c47a92c4a5aee000000040000000000000000000000000000000000000000000000000000000000000000000bec47b002277ff1a28439ba8812444e49ba039bc63f7d90842ea2f23f2105087c4da98493029db72be63e67ecf80bcb09a00dfdfe20d88a5d74175bca935baeae0b79082c021c71bcfc570a0fce92e0cdf9ae172c76e82a1b30ce09c5f3c9eefc8e0e342097221926fa5e3db6a96cbcd9fe8336c38971397d2d4704cb051cb5949774fcabc400000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010114ca1d46091d908df2c7ab5f89bc88ec082243c0a20ba389cf4b3acb77ed0313596c2f28493da86a8dcb233365edfe2b054f1831206db1bb24fb627a0df173891ab3b7c08c12f2dd5682793f6769950a798caf8b6728ab3b330ee83b63fde736a9976cb444039fb89a81de440bb5faccbecae7fa96ae9a82d251a91f8eac507badc1d598bc56eeb01a2346bdc072ea7c10dd085b2acc2bd712c4dbebb61fdbbdb84a584e3451a509bedc8b59273c861286411e465efdc4b71a9deb434dd721f67e61ef9d9515d386b8c166310597eb88dfd2287102a7d1a3948c9d456a1399102892a0c4f44f761224af56d43890f23eafe4e7fcb63cd058bc215cd959ca4ac770cface62fb4e26f473464d8f0dd78617467e2528c4bdaa51c3294cb4e291fc0c1b525fce1b47013a281d197248c98ec9ab15f204d03f162a59bbdf4b923db84f494b15b85f2ea205422aa6b4b4173e6f0a8ce65753901e23f0d6d744d6cb236b61a93ef288bc9a63b62d9725522cda09fcead60d7a08d55e1261946e89deab1455793617dab60f4eeeb2f6ca19602754085eba6eb2e8ace5ef1eefe4d18bbc96ad8cff8a6f3a3476d5070570e8a077f39c0ecb3cc01b750b9b121491c0b00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2342c2f75eb49f7cc74d7200f732eb5e2dccbd43c3a01d37443b37c8c0c585abf3f4c7eb6007c025997e4954cfa4b90f002ea6910807c70b35849264c5d76a5b355cc2875a566868c8a79b1a8695f405c89156005559a8143cd8ed1072abc9e7947d61c54b46f1edc2e5d12492f5edbfe163686a916b441683837af5547021fefe29d337c2be33e77023ba3a6a3aba8aa085c9508580f5b058e63b37c47908304122c5b884494c44f76e885a7d0efb28c44a564e5a7236a309a74beb15106ffb3c6bfa2370cbcc0708f8cce0e03279b4bf13f5c056bd8537ded3ae06b07582b613d9a6789948205a7a2bb36682d4048c9f0443733e9886260d8db022ed2fefb270396e0d45dc4f64bb446fcdecc116c4c68be0713319b1462c506aa01ed57912a523b0ffcb65b8f8555d7c876c741b257673ae26c49d96e5f4a59a54d3b8de29c193eb2273bf176a92009d682165910f29a73d2a4b9623eac1569776e84913d9868d07fd837073f016f8cacc658ee0407979d2f9612a226174ce76cd5724f94a1cad611a779d37168924f3149461e58cd8aa29a042c23c9c18159015606da0f7b8f954020f12c7f813e22be2a76d3b8e3a5fd01f231f40973cc4dd7663b95ab0000022800000224000002201f1c8421a89a89ee902395b9bc6fafe4e8b82eaa3cd3c970b7c2095da10782ad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fb3161b66481c2424eef1228e98ba06b72de6d215153d9d8867e07c06e802ebc75599adf549b32b75ce360e1b0e3f63944b5057351ffefc9552616ed73bbb6ffb7a3cd4d5bf5696fcf6896148810424a2ef62ecc53d834fbd725d95f15a60991a9b56796537c732e586c787ec6b155026a0ab8598d17a93faedd6d45b558ee66809aab14bc2a76dfa1900cb2057070aae26e49df116d472aea34c5e519136c095cdcf7c4fcabdf64f53b4d81d35d671ca834ad8dbd9af40209e44148160db6378dc53cc481334a7d928a2c2ab50dd52bb4356c6ffda71fada06719de92c1719e902852e8c676b427cc88ec41bde4aa14122a67d2fd36ce5a5cf8f02c48ca0edc1c763e230aac9b6ac93c84754d840c544998a5869124d3c72aca31a2e8843d42b4a4df4dfd43657efc028009fc4675f9325f2ed0bb1d72c1bc9ba6cfe7c1d90db7d1dbb8103ffa0797f45786f990dd309ca15d49f1f2283f409f89cf39bf4117d6d95682ef4532eaaa8f2899239721212d8f4feb1b13e0e1c6f3ad3dff9031576f4ab0d451b7b376a5edd0de9bad416f20d656676a347e0ffdb26874e28ffa4a3c406a3743e5a83ed90ed161d77ffd5def58b4930776746e549e5a6085024bd000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010f5c3af04696ee1d072f7e9af0330688fe38bb8517094b1e6274200d1afcb1c5021c7d140340988d90a81540e1ebe7796aaa2477365b287ae420b5c1e207fe83840ba130b03137ec0623ecb2dce493c5269d3bf3fd12260e584eb7ed96adb0d3de00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085cea7b05ddedb33261cbbe72d6d0ac1baa8f642321d58091cae7dde1c18c847d977b7477098df9fe39b079c9ce31547b81b949d9fc85e03b1fe62540864c7c238106765c0947c1d1bddcc13e625954414d756f508d5e464a538ba1bd4e897cb1e42b785ef843063da9f0c9f9acfb42a2bac09b741be51b340f39677a13149687c0371b49694d7329556785601d1773d155e0bcad9a2d077d0386d020f6610ff929850fe31c9bc750cc44f0478f6f3d52a205a3a59ec2402de537d27a54552003b6430e89a9b81620887f9a63e37fe851fa127debce8fa4bdc35038c30874e67507066e5c004ea72c3b93a1d5fa056da3b2d9c0512f69ac67c5a2011db60be2e200aa34f9e88edfb2155e8f2f8470f75449369f0be888c25fe98b1990ddea4700c69a7c446fb516c6b765bf0e6cd5685205398b0b9323c04bdf543a2bd356e281d3e07e8a8090a3f23a5807a6718dd519c7e5a386f2142f22cd774c73a8e2eec0968018034999f6c27584677281bae3d3abb0c51f604f066ba5625e9295cfc7129709ae22a1cc9882948bac3f585b9bb8761b0c13ae47a4c327e28bfcfeba3620f5afd82efb1c45c436bf4d55c8b9fafc44ab624897743d544d69dda581c91480000022800000224000002202c8e465f3edba8fdd33a4871f2dbbd15c3033b1590a0071e038456609b1a63df00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000811fb9ba41afd975ac6438634abd5f76f20449b73a1b48eeef2986ef413749a6fe3b2bc502a8cbaa6bcd3a4abff1b89b6552d2e93bf1c55fda5ab0638b68752e1e2ec41fdcfdc4dea8027f3a2317d310dd44159d07edd74594d6593f26d3a51d421cb9dcda192b73ab976f3599363ea5609910481c83e59c556a9eea196dcd63f9cb601cd5569113aafd6e624c7e5133d71fbf860c834acd4bc4778313be9bf1f3fba109573be92915722067b5404d6a768ab18b5b480249729896b9502bec4d6703eca9ee5bc03b34edff5d3f293594f7bb346fb8f3cda8e88374424c64b75e62fc0f3554318d8971c6b7bf6661f29dfbc177ddbcbb0fccdfb962e9e2c44a5c45d69c0ab38c3acfe97e026a07ce20a79bd9752dbb4d54406aa9212a291a305e3240c619b0896214cf850c16b3770c3a9c5e2ca684b2406207fb4ec6719fdefa3583cf2e3a43fdc27fe25188ce2e954e76f7a69a31fd32b28994f445b0203478702553a3348cb598df83624a730e07e73b31a28f69ddcecfa23801d82c77cd6ba8d62d53fafaff4361e9f1fdcd321eb5d6c16ebca143d8652dcc8fff0ffc9276899aaa6eeac34b3cd289c81696291cb5c89f57dab0182dfd71e54c5ce88dde4b000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020a522bf17c6794001d589dc64938643033beec94b8f8dab897296ed485219829082b53db764b5a241ebc4ac792e131f7b7fb13b7327c96f735c6751ae1fe5784021d4198861fdb0b2759ebb4cf0a20d7be47f7554467bcfd71cba0b8d2a2c8d5ba045c1977478824301d00df6dc098e7fd0018b165816d670e7232b7d7c5a0cc4a00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017548d160caca7dbcfe2f06c49a6714f1b5e8395b893755afb88b3131362bd7419bb48e1089336c4604294fb920d602272b46e88d202369ef3879e036f19d22493e0b949910bec86efca4ef98526291fe5f66d2705c00d1f4d2743e5595ca5ee1aadf371527e0d5a6e8add46493a1671b7d5b0bae5cd871327b61bd22feb02838e7fa8e700ef342d192f96613bb3fba23ec400a24a3f8cfefa18c2211e458f8d0cc14a8b753b8cfcfc6be757d8ba5994e458a1388081792de4a156b1c76c57d9cbe77945454375ec613f623464ececcb0d80bc65b17cf7b3e397d2a932aa7762e395f6867e6fac9885ac3f510a81b8a8a5e7153184eb2287a9bdf91470a240020d4021260c35b5fe84cef2a615a174dac455607a160d74d590e5f2fe0226fc258840751389e591c9e9c43cb11859dabae786590b8a22dbbd007448577030f921f66a1d8c5158ce02e8ea18c11a57291d9e4ad158c1db25bd2bf24d99d3ff40c47675e71ef6db25d7bd40ebfd13b81c1d81f083e6a591c468d7241fee58a334fc3ed399da14ff7dcdbef7a640c1ee0cd0f88a311694f0368ac4b5780469a5d4dd8fe0d6329880c64b38d145380c864c03ee35f1a6b1d64c25cecacac724d5ba33000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028067871df2a02491ef09d879b2a143c80b330a9b62515b588fab0586c7d0aa0c5121b4aa8f35b7529258efe6d99250eec14c3c36dbe7b754c4eede9cd493c9017e7680936b85813734231f2094839aabd88a8fedc137661e39121c5ceb2b893c8612e890c62c0ef1b04b605ec6d4b7c2c4b14479052a2c3dbc46132731678fe4bec3a397519b050727a0542dc2fdad2bbbf9be66914a52fce907e596ae5a42e60225b70feb6576e62b2669b77c64b50842f757cde2410fad0eab3d413027266f122c15ce68c10262f7f587fa8bcdaf864de3c20f2e011b0e89752d6880e80e452bcb05a3102f9d2caa69b4ee2d87da4036ac898d42d8e05f39a812d041db9a9110d40405ebd39e281c54ffb8b14c33c52850c30376eb97bb3f9bddb401c6195500d3354e366b4e32a125e1722f0a433a1e6a3c439a61b6a6ce3aee1c6514eaeb4c9a25d34100791392825741664d70a27bda463fd3e315023b525058f5aecf035380d88a31b5e42752b795851837d100269f05905e10242e7ad5ed54b2796061cdd5827476f18d3656338cee25385ac69b87d9dff2bf045825dfca598e8ed0875e08c4593da2d6574550cc2c006ff96f8ccb90ef4488132478db637df1f75b400000228000002240000022025e1a7657f4a4909166a2d628c87df6e62f2f56f30ff91c4e147dbfb1368790e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022581327d5801765657da770d0ec82a7f520afe710aa6e16897d63049db1be58d137bfc1ed708272cb6d0600820396f841e99357b8590d4156a53e0432a3a77f477b5fa43e003a1ffde60990a3e0e1bd24b7b8cdf37446d3968b8e16e0ea0fce676ba3e84fcff4816f9114e6c2e772d455b81d50b0b3aa86a3d5326a6b2a3387520d8da182885423e2b274705e802a77f1bb365c8b7f17b84c9b4abe328e35c5b365f4e1fc140504c53c010b4dd9ffef121521aa90fa9cbb4d700f53804f25d6870cb10cab2065d43c8eca0c4ef31358d505adfec73a35399b3a155358481c2d93acb20ab898fce2bf868e9b81a144dce109616ee9701ec827568f3f62573bf5f27953a76864f38ff35498b3a4b2d5b8e0114bd92254cfb34a6f6a3f799e396fbc4bd9fc63feae143d87d7d35584e0605ed84ccbb7fb3dccc427c580bf766cbc315234fdc90fb4428bf876c86c5a90773038f1f4f342c9bfbe4b93534a37abf08d1a1114a6b71d28155da9ab475ddf79b8505ebb80ccd4327e3b5fcb5eb0802a96cf490acd8a26dc7e6391b2da6203d379cb50ebc96e5f1371a9c36d142acc71ad55e704c105be80462107674aa455f9c02dec4e8ba9a2280ad86783918d240d000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012aa25a78d6191d9a01d4a99c54a3fbfb071191cdd2da7f4997c3d6d68b0eb65e021e4951e41a7f13a40da2874eb2b69a20376137e8bede87870061f930e5486fe2282db084906f5dd8b4b04f51e45645bd6ffb2d082781b5b67768d3f2dfcc209c00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085c2fac928c6f5b326c64cab50374748b3ed9f61fdb5d96334ebb0ce492fc445f3e5ad0e6fc911e7677bea1bc1c015b85b549311424064bdc4927a28fa7c0f3446c67bd8eb54b76ab8a3a90a5caa40730eb4c07cb5945f0346518deafe4319bcd5e167904ef99b2746394b9c302808c812e268879a863c2c4d8de1c94fea40094b0ba70e944596459ca33556172124b227e9ff5e95feeec5cf1a7eb825c41a37b5d3d106427a1bd74b92d6633cc4fca5eef77db8e1370d058f9bcaada6ae2889d72ad78437535d326197aad25adbcbb73ba117b062e4bf2b9ca79ddb01aa29dfecfdad8a4e8480ac68a5a9c05b02dac9df2a55d9104db0577ede87bfaa3160f8b71c569ab3d036f1c77e62306d8620b69b55f7d5ecd969578f2f4ab2bf13df1aee1ca40d56a7e448a4dfdccc8af18fbbfcae6fa29f9702e0a2c802f78015b2e2665fad51aa46ed8a0a2d3371cb92a8e3f8ab02a330a6990ba58d4f55f97700df11431c5d74d68fa571a92e6fef364ec86a1fdaad39c3666b6877a29fccb2e7123f4e6f37f54f50f3491b517fd99680f743563c172711b689d6bea7da41e97cc237867e5e99ff5b594725cea1719ee76d7070ff43210a7876b880ce8ccf66b8b6000002280000022400000220203ea780f68c2d583f1b53dac19e95cf8b861a7136b07cae882120bbbef025b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094e5104b49d57e929f2edfe6d9af5a4ad1f5b1a2ebee373ab3335696f5fec7667368a5f8d377c1d3e5d0bd6afb1eb1d95f9b22fc7ff4b5ee842e13abf49d6497ffed2224b9e1104620f0b08798014be8ec785d3914c5d8ee864955c9a8b626419021efa55f18e77e0b6d1cf37ecdaf5e4d3c33af6419c3a4011c1a932c61e6782e268abdb4d6f0d8081ccee97573e20f24bea4b8c195522bcc6e0a486882c65a38f1e7c6d14aeb6161ab0c6c8bfebfca2ac4d20d5c5ed44927b0cd5006f5ab460036fd8262fa744dcfc9e56c1f078d91d62d2e6c3d431432e5d4d6ddd61cc6008434256267283675f0e9051ca073cb3d61ceb1c6ab9546256daf1537509a34a729a6adaef201dd328620a88a3b89bb5a7fadbabc0ec3b83fa3c7e00bfade3d3bc5e8441bf800447f593722c8d39e1072b5808c216a358e998d2d441cb0448bce22a25c69f3793266d20ea7638227dfb2cd63563225c4be7338de3bb9dafd6281cb86fcfec05f2a63f7b8c8a2b34cfe479481df6296872045e825d471582b2fddffc56305f302c11e512c1b3ad884602637b0010766228851de823ab449a3e6cbf87960ffe29eb3818ca0a2a69ab638ff27e32f064fa563c721a54029dff174ef000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012edb1ced8ec305af75c7b67a5bf372935741acba9accd701fff7f46efcaca3c7021f218acb98b82f2091bfd15bb3398630c2226c5fcfbbb0d8a83a6db02ef8bad11fd76224c0a431337c160588782c1fa8dbc397bd6ecb879bd94f83e954dd93cb00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011f2653fdcdfa22b21dbc28c1b33e426374fa9cee64e652cacd20724aa234ca4b4c50dc512d4bb06f81ebd64e22ba5462af730e8876a301fe87a7759cc79f97d76df42d347a30c6860a160c3a12a55faf1aa197d84bab196d7fd18ba5c724de7ead6edf274fc7e41f3e3b8ff8a6daca09fc2ac2b95c1bcac1211f3cf4f4a9d9b07e183a13b873d11f65fc1d11b887c8f907abc2cb9602ba06f58021f4cba9cf5a73796a69837a91cebd45e4dc6238b7cd3aba07cdc6a93f2eda65ccede872b3fbfc54b88f1c9e7f53c7b41f22d7ddcc23d2cd6f804f115d3214d9a741f068c3765ea3b65b32d1e782d3a5acefa6a82c5e9f1a927e1eaa611064eb70a6008011ef87e41d57653fb78a7f3c16244a188592f8f303d6594c6f7e12bd1242bdec8e24561f3d21e1026a7ff6cfd6a5c06d14614dfa49243a49a050dd8cf4db58d027a7cb2830589da2500de81f07c091d469600f96aee29b7b63692dad0d3b44c3a1cdeeef3c1eecea17b048187a51bf4e7fbed84a8011d7c3c6f6458505bd5576c5553f4fa736a4b608eeb0795c157983a2e667d197f72b2f9c18cdc192f0c647108d88e2940e23834fbe5ced0af85ca5cb45e0497b109cb4f9aecd76669efc522a1000002280000022400000220123552b220559d3d4830c691d725d55d574de5ebbc80a39b5d85c3c496a22c2d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad60e473a6d3b270bbd51b8c440392c0d780b1494ce11a92f253a2e235bd743324c879c7cfb2f413cc9b3e3e9bfb986e6dc09cc2ba9d4046e81a9a4fd8eb26346788d816f67250b6a6ff85bd4a5a0b3e483144207b45b0a4b06503018d00ee660a8c2311d1a79b657ab5960f9122cccecb439c579c4200bb8ed3ebbb5aab7200fcc4bc0492822252b055c897ec039aaa29e4f5f852e5a065f033fe2a2c552e0ffe84351ee26b27a56431e95ccb29cfbbf34895dd2971a3dbecb3cf2f7eddcef54158256324a23efd45c395c57fcac4a1c37de16231c9eb374e12734cd299718b5c455f0bc972f75bc3237b03e148c799a91666f85b1d3b641713fc1c7349da545c7811e997829fbeabd2ef03993a4b5b20e1ef2583ba81d268698c75ee8b0e72c900f17a71d8889a8352900b8f3a1dba46ec1fb3499a5de68c2ee4e97ad81c0db1353acbc603a7b859a8aba5616e67f479ae12ade802b55ffaf7b722753f7bdb45deaf9032359e74ade11fa0c4784914cbc1cd093e0f77e64461a6a1d62144d1a9ecc62fe469276f9fe8edef91ca3a42b39ff48af32e518b0f42812e1786ae1001a4d4915b367622a7e457b48c4717b86beca0e484cb892a8012a726bfc2df9d000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010b2edb5b1f9604463ab67826cfc0d689df6585702991d95963c6cc7108cd7b5702203b02faa29f5bf79fb0fb9883ea4ddad3e620c0f46c7c18bfbe3b748e24716107db57d4f3a2f92f5446e6e790cf2017a1d46ff2a8639d76e8c87a72825e021900000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024910315d5d3acd81521a8880f217549a889108ec32eef54bd7e2884f26c54ceac09faf926b9197023c5aa34a8bd368d40891f5fc79949142c56049ff7fb26d273a2c5d037f8e9ebfa7c8bf88a172c10508a89c059e7c582b5d7b814c16f2f611382715012b7e1bcca1a89b13755504c0b57baed74b4c5603010972b31bb0b6a193a499646323a00da25be8983baefbc1119fdba04d3aca2a571bfac9084989f356e392e6e0d8fd9f0fdd94a5c39733e5ec61f54eddd2fa7bb056cd2a5435638a50143753392e2f6aad0b75813ecc09edc8dbf1c2c02ce1ff39563983534b011a94d1be95e64ea141d460030353c629b614630a69655164142146f241db74f110e40c19e2f88e86561fd94e9e70656d70e04569a27cb9023279b22772a8880b5c8317ba69e986b4b1a181f1dcaa1cc1260791797caa4cf72f0a76e59edcafa7537db0b482667b941193a433b16f49f3e60e5559aab2ae12313200179de807781c62dc6fef1d84ed44e637756b70c930a447ca90a975e9fe22902bd718c9b51d40379b6ca1567f22d2380ed4bd4e54c16ba8b84cc864eeb2bbf396c68e4166b10fff87115b69757fee7e943e846df22d8de61bcbf46c60c497bdccdb4756511cb00000228000002240000022025706d67dc0464a60b29917c2f0bdaadb26f04675d906bb67670dfc7c9fad42d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085fdee67d8eb520b86bd96b5e83989788143b2d24f3dd4774cddf0816966693e7a036273e3819e914be424e70992694240d09816f9909525b6010dda962d17a14185310ec42bf55672f5a1561479b5c4b5734e634350af7eafd4e3d71974093dceba964f844f6e092f307015ecfad1706eddb91554f33cabe161ba0a5ac720c9806ff7a74359b6051522a3343bbb3e4a213ba291b423c1d02e5fae0500c11338815138d098e78628338259b6fe51af653cbd35f973ea430ab1797362eed5c4f22be6213aaf851efb339c5d06537b02758c776b88f68f81c043ec4b181618a2354d4798b4773d0bf303b957afebfef8158728c921be1e5f91ac41c07be8e596e4f111b7de07f1609833051b09d92dd1e660bb6732b671ae949f849b93d4c7d3d5e91a9012fc9db5dd5fde4ac4718ec3c07cae9a1bf7e5251fb98dce3bf7af3b023b4180d5eed78c1d9a5c8f174a1ee14d9b5ac005ffb53373fc9f9b3b5a098065e01005d39a72a873315427481298f3ee989be16c6484182edd84dd39e88ae802921b5a5a8439e0d51834c2c54e5236f0ce74afc714c64845807c2b67a08a22b827f8995d206b7789017231b4483c6a18c0744a550f9c6a463ba9f36d3322726a000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020dc2f940719f232cd0de228ecd72173601ce22e812b8e3ea4aeb591fcf1c578c0a3c86ddf8406c3d0e923cb49ae41be37405968b5380148120e1a133d9baa6e20223af19f28855f21a087c1caaec9dc559661076c66043da67c2c38388cf4986041eb1a8e5a72deac6508da9dfcd2dada753446b6223c4cb110a52a9d3418f057e00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011d3c2478ef1ccd3c808d45284e01c9a48e9dd34efbfca6ecf49850b897c4bddce29fb0ea377ccab2aeb1fcd69c97f934c76829052e2a989c01a61e39bae978b9a8e00bdecf72f4842f7e9d4e838e9649cb4d8aad54f893fc55e572dd1aae5d6b309f92368ae6922d707e84e82821c0133ac14eb9d4a9784209b0d9c8d2cc687efc814a4aecb29b29e265382b666f2e7d37ddc02a157b07fb17dc7157810900c395d32eb381cdb09c6ecc2d68893078ce0e4d0ec7893637c7b68b26e31dcc28a54a1f768a8b11fcb3b96ae149fe827760dee16f8e931310a94ae4f69b32e2866c32e86c7cdfbbdde470423365ae55ba0249a88c73ca8252934e5382b23e9c12aabb682485e00c44b7b0a8d36ada361bed7a97c827990d84b53b5d73b023edc33e680d70c527c4bc69ed995d0983cc66181d8cf2c16c2360627d5cf9edf9baeb28c5d4d4de3b368b86ec75511f409039029e22a4ddbab0ee51d6bfa1f592606bff1c74e8d1325fd287b637eab0a17096095b64bfc8ec71b7e46375bd9a148fa7b2019461d558a7a90080a6d017d9a9e7a033db8d59fb98844434a5b7a35219829f77ca296e1941f69c7062ef793d72e0a019798b5066f87cdf859ebcc6a5d214b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ebcc908f496e54f7f6bce013247a57014ec53c32d416c4a1fafb991a7a4863a5a9e538d0e8716b3acc5aac70facfa52a9e6e43522dbb1fabfea72be9418206f201150649104bc40989a0d3290766d65fd2aa69bf204ea1bd07863af6e0f537a2deb2bf93e37a2e097c9d069a0228e60e5bed661a2a772e7aec532322f1128b20692192f040bc149741dfc55857b27a7cc624c9350b2d0835dc0e187cb04a3ad05d7a4a5b421ca1940de03494f676e11aa435db9bcaee40a54ce1cb0bf65abdbe28fec9a98eaa4e47cb6c94d687f7de2959cd01a4477b110ca27f930cf3e6a55a9acb4b083837fe6ff90e653c95cc6d486c4f74ce553c5182099dc0343f567b8d1086230844e3051d1f71477def4f7a0db5c79def38c30fd0f3ecbd8cf1be86a4c5b99fe7e4902958e952b17319f97384c720e24d96ef54e452197d14e48d6dbd889545e77171ad04f5d17148029c426945bb59e492e2995015cfee97321f2274fd331c8d0b71cafca648391c55fec4db303345c94f0df08a351485e68c1830e52029a30c2cc1cc93fafd739aabe9482e4d87263a6e41bc13cc6d51bf59a9f794ae607086ee8b46b30517a34159896f7a7ec5a5f223dec8389496a18627e64aa000002280000022400000220124b0024b4598ad8aaa744f9a60fd588585e9b1558a6e06d0449bbe666f4444e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f6a0ad628ffe9efeb6c3411f253223f6cccb11d1547dd2bbbcf8ea7367f0ae1c72ae1a4001cc1350ef3d2a220c5a8ffb36abf50cf0d959025bcfc2adfaf39f61bc73a4949ac4f483d01070c9c0835579eb2b31b50e5df02aa2784138797cb21a60add172e0a854ae020ecabf64199da49d548a6ffd082411323be3c0e826e1023b82286cac12d9461a2fd601fb36b4c57e1ba4c2c33fd99d8e8c9fb70a13e0a63ea683ab4e13701769189805bd3966faba4041ddaf88b9c9e03e63e98ed78d3536b6caa1dcd86d46fece3e780a61128e1d20e56094d936bdedbb21949ee6ae8e21a234dceaadc770ae3c245b54ba91dde758083093cbc6387c03cbc0dd5a5ebe1eb5324d6715fb2270602018697f77f4ff711ee2c973681b4d4f640b1d4bf84da98609a9530faf94ecfdcf7a07e957fa8d4fea841834f4305fa4f1a650d7395b63073373cecf13186d8efc60050bf9a005c4a9d815baf357789e76005b40e299c394beededad6e4233bf188d335c1fc7dec7779c78fe4198efdc90763e1f3f0086fc2f75959e98e24636e3c12452e6dfed39d03695f4be343214a225caaa9c9b527c5384ca321f97b948c189378272f20c146dbb110d15d73f2763c0e9e1398000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010c07b65999b17fb391795bde4626b6dcf3b8b9f6e5136cab2a361ffd7c572bbc02246c149764aaad4b78aedacd6a68314a234de6d22b6db80cfdda7235941cfa781325c58483adccd35184c5375561b9758795a75c8bf6edf4ca4e4519f01ff2ac00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081ba1d4c08accd3aae6715506453096d7def5b33cbcf76c71c7489dec72059f60c2aa1e82156fe6d0b169350f61d61f486a9b09943ade679eec88042e499484b9f80f55ea9ca98016b5315cff50bd85b58f6ae778e19f60eebb2be069305d05dec16b2adcb57d8e220afeaead212b1ea000f96496bd7697708b00748bb9f3c13f8803e1772c15dd71d3c8e7988423cfcb0502d3be6f9a1915071381266cc5ab5501d2a6e47ca6b4f6b27861e2eb6dc6f6197a376b216c3e265d934d44a795ef8d4e0b9880b62bb8534d97a6e694cbf64d6e49dc4adcb6c89a0274d5a114d6409e7878ae7991c98eeb3c5f965e94836ad7a5fe17b5fd4270656bef5609300225a76c6ace82fe7c176b73bda35677a38d464ea04cdc9557226b0d87c038631c9e3331f6b9e3218ec6c216ab35252e770bda2eeefed94fc1136eab74fef19842e03610702f530bb29518b7bdf9b6398beadb053e55ba2d5d3f7a4f1cf8067be4217a4ef2a24fc8b0e65b2561c8ae4a27f11281f4fea082284bf0ab6e9ac0b29e43b46cc8d9d61f72c3b592d80297b3413397455d2c57fde162861cfac75626ddfed352578e3479c12c05a43295a2ea063d31d919c207e99d34570b56449a0ac1fc30000022800000224000002202b4ab300f545e68f60c84b30bc7eabeb44e490248a67dc7e67819233a4e6b350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000584706df1e43a14cfdfd504de6bdcdfd6e0461a004ceb38e1eacaf478e7ab717003f70517fddfcc39147b4c9650280de0f770bb264a68ab801e38ae604cb0f74029aae9901b8fbc85242c271b4132d7c898165239ce4830906d099c1b4b305c25233d04dd0736e374e3d2dbc911be8322e5ea38a160fb2a27a64460256e2ae079caff3166aef1eda90582ddbed0127b3c5ebcf97c8462ca358b89700b511b94ebc5e4f32eb903bd140d082036e8214adef4b28de9c0723cf2584e54a9bf4f5e9313f016c8cdcbfbe4a574ac5110723d82dccf6b95585e89d2c1eb856359c064763029da9f42e7efdffe7dab885c30b895b3a7df01f06867d8706c9e66bc9d558c30c9060729f85c662c06c48e504e5532b5425ac8e0e2b97b27610e82336094208a8f7273cf25e6de4c1e030c5786980f7f441a1fe69654e4070929b04df2431ffc0dda25da15a43362121f1e229767ffdaca0d461cbbdc817f6fe12b85b77eecb6c57da692e0299f6fe76d39d732c74c0eab778d98b84a0b21600c937c2a7972fcc4c0507356ee6436baf654a5a893ad5994738d095a258fb165d0c581efa7381c8522ab7afdd6069f9ebaa136ac29ca98594ea85117bf9df09df5c4d1f212000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012d0762f3ede05538f296c03563c050fd833e58475f12ac6d351ee3728e3af78f0224bee52e5de87347bbb4a226be7168c55373294346ab523f58e0e07a2feffaa2287ac23ec73624429f44828dca6a6014c1e8c74a14a02309c8385fdfe2f612e9000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7a7fc8d610561142c182c61168c582718e22b141f979cc551715e696266567750d684cef5ad1c2d06b9ba9064cab8d4344244c9a9e6676cbcdae41654cd0a284d0e631b29aa00699e560f359f2f5724f0ae88ea96e2380403e2beba10bf6806496f5122435b17d43971453473f6dd9a63d84ef6a8003f4693e439c3e91443c7d89136cb32dd6e28e16f8367f65f1850f60b005e7ea8c1280f105df9c5442bc3b197e953ba89e056d7af3fd1c753314c46b859e47bfcf0a8a3631836be45128fe09533a01e1330caf125e386d558d10906966a9acecb2d7a8f167543b7388e04e634e079f1c3628ca7e859030f916e49ed6895f681ff32ad06fda0944b072d9caea31ed5b977402547c54395de32a354a1c7c50ae731b60c6688fc7aeb8506a307c93b34aa411ff8bf3b7cc018ba4c34c24472c389c52b7eec46c67f361709474a64b77ece4bf9f28995bd52e139dab5595ae7287709ac05e806909bf049ba84bc72c2331f4979aa842cc284d4dedd452e9c04a0f59fe5dd023d80d2fedea16a8cec7fdcd47773b29097f0b174d54af6a9f52aea8418223526a77f659044407d374a2e1214d054ee10dfc219542ef32f147cd29f303e6237390059ac8b74059000000228000002240000022006b18e145431ada301b8714a94182ee10c8c08f5a1292c886cf60e21c8b7995b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c865ffc3e5cde2f3c589917a4b0f92ab6b869999c7da2e005fd1c154199e603ce3ae1c4461f985e2cdd7f8e98005e505a5b1352f9304ca09aaf1b03bd5d00ca7fd24f97388da5c2a78919d41b22ba436586a0caaada5b19faa542c7c32b14643a056ff903cd4e38ad0c19e07d6a084cb5120f3a7549624dfe0a9f9ea24f0b3f943ae0b36f26b71e12e8c9924aa2bd98d88cc969bb75528bd673dee40f90f28c6d27a4b4495825367beb45fbf05943dbb8cdf7c45de9e78143f30a48922eefc0ccaed9df60fb648f27ba7ab395730bee6724824c760553be1bc0045df9501749e551a3314597ce46e4f96568ca0516bfd1b0506c2d3082b16db88772651b732317c16665f296409fdc3019f90a2d920423c34eeebaa4499f9ca145e4120079f60d2be8b51445ff7d7a7f1e410118731757155eb4ed5aa1fa89dc9bbc95afb0a56984ea65ddc43da7a6d4b3a261ba363402193f412db0044c000962083f42942ff755f0025bdef3d742bfdea2cfa6ad6a9a3d2a6970e66f272a3322245b3fa93efa739bb95a9e8809e84f97c33aeeac74c8169d9dbe3ad790755b720062892f6643a68a4f6ecbf185486d6c5059923052a69d8daabb53b6ab8fefef01d28f7008000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0021425468e07c4b2118b0554e3219f67865f484ce454a6d036d9cf8833e689285029c1d331a041e6452ee929269edcc270021671815639dfdd2ba7297760f49d1302250f54023a8acaebaea72b2609cd79462ccbe95d73dd3fad4acbee164135be720a9b3ecbe914c3a01c334934d5b8ada8e7e829b91f107f4427d3f197b193a9ae00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001906c288ee96dbb5a0ce39212986a1092b93d50a8420920d216041d9a52e85617063500d2b2370e87cbaced5215ad30d9dd68c906ee6c5fd4b36a735d1bc15fadeb1f77dce6b3e824c760b45c7d091bc3039f71ac9f105b1d5fc7f2f141fef1e777e56ee1436ad1ecacfbbc9446c3ad97e03b53855d54293a506997a546c941eec0b21fb17170932a0aa8c7da01125b1d0d841cc7be5c4dd5d5a614d4f69d8d4a913d64a2bb505638f6844e76f7d8c145bc999bba35a4562e5b3692c443985e8f2973896110b558dfe782e8e09bc9941ab31825363ed90dba9ecc59a453bb8e7cc15064377754bf2386bc0b5be9e547e061a043f54f65269994d38fb301b474a8b16a29bc20dcfc5aef5b9750d5b4393b2984d8c420e36ddb1cf3d3dcebf3723fd7705b6e441c7b074ce2bd6e632b46a61433a89f672683babd5d3769ed4b0c2a720dcac415a9a8a642d7a69a9ffd830c2669918d2c0d3ee0fb98e7eb016d43285c32d3b4f2ac391fdc07012a567da1fecc14ac71268806eb25c958f12db9fa0cc271054e0628280d63c4de821ec964cdfce90e349bff48ff7734e01dd41ddb7f0a4cdf906240309abad06a02c230881c21306fe72838fe816e8b4a19d3607840000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000937f22d942b6b40ba94028220a929ef2ad53d6c132c4bbe5c2e551a1afbde6b38d7bbf73d8cd5debcd235891b4c2526c62a63cd960a2f8cf30a5d4bd53dd17f2925725715a09b421f546fd619dbbc76af115dc8f2fadf267350d12d4ca692c651ac77bc81fea05bc6949b265431254261edf8807daddd3f62bc301091f867649cdf70ef1e3a7c6e467d2a11051deda63e4824e00c050daca08f1a2796d8f5efddd563065849de76397e7105b1ec6c1d81b2c630892c4674c58c905bbffe99f758800d054ca578cf9902a72783390a000f767ab32a25c8e99a790ddcc5aa68e97f7330f36e9642661c31a3478e8969b4a96b884b567044ee6110ff7739f984b79e724fb891e2436a1d51bedd9b9ee418ee38a606e32357f66fca1180f619d1e5906a63f26d0e85a326fcdc1bc6cc508918e3e68f7427e951eea105426d4170f6a3e196f83a62ec4e010a43791885bc3b57a0f83a7840f8e7270b6962118403cee5d308a9f6388bb2dfc507c8535b249da19f845a52f92c6772bdc35725a422d93855ee29ab4655f975aa2559da29dc947a1c9a13b461288494cb0094c38875e6712e93f137db60bcacfbe9c3320ec84f07a6f2db013567e8a4a3f425c49457d4d000002280000022400000220204717fb45a2e566745f1f8210f4d415d5a6ccdc72358f9966246bf6a869e630000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001812cfd87fa9798aed0a3c75fd892af7f156859560f78d44ada0b46808f98ac272bbd40d9bce5ee17a664c386f71a389de6be7a487e5db2784f2f455cbd94b8edb6f509c8db13eddb1cd988084342aff87c4252809c33cf74e41d74cd14e016bb6ede6c0fbbd8d32e8b4dee1b75a1b6e3b42c1d457932c00ef28ca97e162d33ce62ea33b513fe82ab0face8d79c40129e2835887a086a0e54575857c8875736eaee346bc8e1f8d6a8aa5a09b23c5b2be0640b5feab42b96308117b889a5fa47861ede1ebaa32872859861aabfa609483c4c810d766864fbffaf444befe7b1b099ecfa4c61e155123f347c2beb227a8aa2f19ac1dba84c4de56d2418400d17036fcc16d021a92626f2e17fcde0bcc1959b451972d4ac4a5256bf830d1e26623bcee29ca5500a3bbabdc88ce1edc0cf2af0bc8c05b10e1da03dc117e284801dd9c96e6125e54a1d3686c74773418ddf1a5bc358deff64b9b6a7e4755b478dc37abddda0252ae3512050aba1169d95272d21cd0b68fd31768a43e4220c8dd8e030d5b61407a175a2fa955010fe17234dd7fd6d631c1a1bdbce7900485357e4d88523c6d06ed1be49ef2e9fa194835b390be71cd3c5ce66c5a431133631ac5ef02ed000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012b3b426f96d12e636e686cdd8aceab78fefb81ca62758d47c2aba0b89fab76c00226c1d9a92b171256743d597a717b57c4e839fac30cc7dec9cf7d53d15592c2fc24599ad9002da72d3644efd93fc1e9eee6dcb33e547eff9b3b8d19539080801c0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001697b4acc2a7b9a24bf0df4060f8670d5ce8c6386d5854b48d5be6652b5c30a290f2f869e534c7027fdf19534c17b50b941c662202090a2916a1747d9d00a5c0d139adc456f5c4a39f6769780416092f6d5435a71218b331e96032afb10325336ef9ced067b3cefc7d7c68b97403c9f1ae0283b689b2ff4ff07167ee85bba7ade5bb3f3a74fc3d1bd61cb3de5112c1a95b89c37b33c200b933fda5119dd74809221395ccb9b12a0f34412571586eadc2400eaa00946f9e4ae62566b26032f8ba28d90e8c806bb971d2b13b7aec33e2263c03f4f75ea7c2fa4151d2b5614ea0854808a077266be32dbf1b7ecc7de9c46bcbc83e681f93182e05d7c3b3128c96f055ca4f9a70e4d5a97f968ed1f54cf07833c0903a9b0abb0623d4cfd4ec4d5b6a7d8ff1a461de354ab50751e67eb4d2ab96862b55201a8b6628085411cdb259bf0d5c44c3fabcf020472ca68306b750f649a3f890ccc2990835feae9f6ab574f022abd97c04676cbe3c9a05c3d421e1022cbec934aa2371656873678de596a7163339ad58234b9fcd6fb8974aed2b219de2bbacf41d64c143b1ad818570e317a7cec82253da487af00085d01903a9071e66bdec5aa3aa09efac010f9c0a788b2f0000022800000224000002200e8cb5ce7fa1138564a39092328126380210e848f9d60dc7944bd1e15a9c260c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008620ef8e352a7a5499a4cacf351d11dfb90e824b6c35a94ded0d0b1adb48803cde9d9cb36f143cb086c1eb7e38295b1db5a51febe49fd7b49b7a41d264723dbfd6cdefaa84e7301131cc89f4a09414e5003f934a5387e1b462fefb3e23ad70aca2acc9d15e0ca9d4ebbab5a26e57142c250924ff2e118469fa5e2ce8fcb9915ccfc0b0f34c87366572ab23363eab8bc832aee3ae58dff26c67a27a7c363f9237129c0369ce93ca71327875e92702adb934cbf45bad291d08eed2f5f63be1a4868b895b89773778ea1d85d41cab786efe69958094667c11dbadf857a06727496bd4f88dd9d04dae2f84eb810b4432bbe777ba7d2666d9a953057457ab9058459e2229f8400a54bf6ec3b2f022ca0c1d0734cc6be1d8af30dd2e16ac552aa903be63d714c918d35bb2405187db47503434bd9abf163be3cf03de9460122353cc74b5ed67fd868fa04e0ece2e5bf986cca7c767ee0ba1cae98ae40907e3757e8ebf81ce74f5fcf889573e13eafeed7ba6762a0d9fdf6e7fa5e738f0c6f675cb11fc25311c8e2a3b1c5c555d41580bf750bd339d7f28cc1c1a9bc66f11db0f57f2e9add8ab67c44387dcb942c2d7e7a7b4eb73bf81adf782717703e16d97563a6314000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400120d072ac794c12ee7fd4e5650f2722aa3128adc426142c2d245d67ffa2227a9e02271a1cb940032c7b7bbdd9d586cf0d7ad1428aa253af834edc4ab7d3b27ad5a20a1de292cdf73da1223cff0a889e78fa927a35d582c04446f18094f8279e547f0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002db2b8cfb65a45ed0e590b6d76ac353dff2de7e5ca591f46094b3c91d7d210700155fdd4bc14ad7dd7e1af73560faa0a4e198b13ce8f962e1f3e5980c5b2650f33bd3c4de68838d4af30795178a758273dd7235f0117fa2bc538670d7c5c66734fb0df2787f341db826224fef06a16b978a72ac46b2546115c9b8bcb4eb21296da77b4e2ee40a6ae34bbc382de0d5fc33bda17a95dcf8a003dc33714e259989f88f2af44f11bde281e538dca25f0bffe2bf1482b611ae0373b708512110ba54877cc77482d34ad1cf4133eaac2e379472fc16164f10a7f8da912454b874077f6891b6f1ed94b801daa129bbe8ad55d17690088185497090308b163a041df2c7dfc23f699d714b8edea2fc5839dafc108e04bb38c35b0036b6d2101d0191f5e49f072708d2409cd532361c69b9c817b2524e8675f41a0d03de0fb45ae914e8b7614e18d5e979a8412687f30c006ba9195dfe43b5e401c467e1b81e6ac77dddb1d31921b828d91ac331a13ea8ecd0cf641c6cbb1b96d15df557c04a43c5e98dbdc34888502171983761caa64f9d181d4b214422a6ae28298220031bacab9d902b8471425f45dd6f3709eef6a5443595acfaeefc292c074f3cc14cf32cc2b32d3a2000002280000022400000220057d39067b196f6ac4a77e39d15e67e2f7aa27b6ddb92fe181d229c81fd296a10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091c85a457485c4e6e63b39f739b4de127dcac1d9dc881d00514bbba140ee88577aec38824809e1701c99bce8f9fb821a60770a47087ebc56bb50959b14312e206f90c4362cd1dff17dd1b64392abdbe8d5006bc2725e07b40204881d1b175409b50959209132a266aaee678897ed2ec7eddc9130e6db401921339e69c004a3741c773e21db146c74ae2b2d058f0e2a63228ca2fb6c8f8f1be49bf04453230fd8e650066ba7dbb8ed71238b3d220aeb0d7880f08fceaed94c251de5ee569535c88b6d819cd89c4ba88459df872d96c1859b85248a1ec86dcb268663ad5b77d5c9d44541b779d89fa81456b67de7bb920755f9fea36748ffdb59ab9c69dd316e0f8bff48fcf93968977ff754687c8b3c7255af36ead1d732e15029a8b9175b9badeb79ecc20a32a06e7a6f6c4833e062173c07d2991e7b7fef5e82f3afe84b3c156a5dfb0b2cc50db25781cb44164f1b424503cd348812d28fef8df9a8b46b4d640018d6c8acce5fbf48939b3936cc48a45930a524f32e668875848f23134f0e3b576515f5f2c5e6b221791aaa4852e7b2ae5617589f9e4a2b0970a9ed0c78ca2334cf9daa8d2c3b0c242eaa6a9fb8e47859c429b97b040e35bb6ce5e3483ed92e000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00223686258d6befa2c359e1e70908c35072023d6730abeea5827a1cafc6b509d532abb4d64ecdc68f2876cbea7fd3e8ba5f29accf713590a2a69c31cffc234d5fc0229ba9314d41c1539f98d6f326a988cd82647b18826b50fc9e84ae6aa795c75d3116a789be7733d8bd38a22873e80a6d398df63097c420e940667b43343c5f37d00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000974784afb9e1424f51ac69f32d702faeb9314a8c421edae413b177cdf89bedb1825fcad29d9e199668f0b89646897bb61dbfd62b1202d6dfe29a8a8ba62b4ebb4a070fee95d6fc089fff4261404290c9c64d1ee196324a13edfa4ae147d16c52124c7198b9c6954334009ec521243929d412d31c685a00d3e91e80bb4056c53648843eeffa4fe676c8d322174c2824fc8b6d3d5c9fbfa765a356a565e2ebd857d0dcf1d683d40c11195c014e763679b159b201b4122ea9b4b3d1648ec638ead26358360d476c0fc81eca4b0a2aab7e5a4f8350f7599b401ae50e7664b93fe74a69b2ec431893ed489329fa13072efe93798637f6f39cc00f08a0cb7c7c79cd7e07511bb28ecbe48e6b500ba0ae95f5c225996d9e711310d8856a1de04b9cf784e236a23883c3e65c2d878f3fa94950429e2f2cff54a4e263f7310629ba3daf1cbe6836027ec60bdcd8f937699ee54730829645605830feda07acdc5fcb66796d6e4d3c355e0c0cbcfce82ec2df79e103e611f9d38e682ce91dd8bbf11a589ecac45c0afc6491dfbce0ecad82463fcbc681f226c84dc438026cd1cf4d90cc7ab97c43f616f2ca52e8b2346a6ccc0121a5451856a6e959098dc6d0a56c0e82e1c800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d966036ebf8dfef50993b20376dcffa59e2291df7173d046af88bda18e7c5bddc4fe1cd2dba4d124578cba2019804b4a3430f366729853c5c5853a95301e072478cafdd0d7646fe95d176e6a7a37754d27721c94b8f4a4ab2e8ff6b1e3bf3eb38fb2ba5120ed34740548f32d7d8fc008c84f02e39e62de52b624902a1e3778ee651b4b4d3034cf2bbe160abc5867025b58076aa33742681f5ec429a27649e3b8f774932060fd81c9cb1df0587170ef817a338ba6574b43f6c8779f3fb1fdb297b4e94759a057b2c81b414477ee691b213cd9d754f9e3e8a9cc03c0f854172bc82d2ffac16e61ee71d66eaf4e861df0a3dd7372d3301f0097adb1e3938f15ed05bc01c5af273881e1e72167ee771e2a9c01513c4f40fcff95d176e409699af29f7a55ad79a4b41205b9ee5359f03c37fcb233a195ef02c1c42f9f6c9b2d6313c8452876a913dd7764a2f73b77c2cba45ec08cad1d981a9ada9c32e5f1d9007171cd13b03fcf8cc42561c22b08149cd5a4cdcaa27f7dc3429a870f02fa78beb8fb7c16193c2c272a81d61794144340147be298dd6266889dff113987771fa68d2d89ae20d5eccee1980c4aed3bcf7b5bbe13f67ccc899ac142cc4c3f3ee604ffe0000022800000224000002201b54a23c01b18d9eeebb0189c745de2394cd2357e2feca4811f97655f40a30cc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ff2ee64580b06301fed5ac4b03a1cd5f5b166015ffb84628eec3cdf436e57e1fc1276efbc71a156ca6d64fc564a8087872e99fa2534f64366f73ec16090bbebce03196cb5d7ffffcb9ef36ba24a25c7e042c64cfb2c350154863bb5e77502e511be1ac2e49fe5d727c1977e97046df60dbcebc7c0f36f6d15d1678211cf0aecd71e593145e677af9477d5a69170deb8df774aaa7d533515a9f72fc78e90e722512e6c3b3d9af1177b92997877dea2f6c6f84f05a32c437911f261bab72f382379aca34fa3b4545b8653e37e63c8085b62d3607a9443a1f09d867063c65f62a8b3b911f4c562679ff1dfab41ce133235631834115009f1e622dd691fc9be41942ee77f89f89ddb6a803a735cacefd5a610ed62c6418d2e4a3f05a49d6ef482139af6f887110ee2767cead320d40cd1a0836d19761f308a9b29674c690babdf3bc9be708eada033adc20dc06e639a15d4c463cd647a98954bf8f091af39207600af4013809701d1bc1377cc3e57c8e858763531cf55d634e6886cd6aeb3d964122e6e96e155d16161875d1caf76adca40536439a83a11ae98ab7b5598812dd772387bb8fd4e94efeacb29115f8fc2e522988bb80aa4469b19ec413a6c46008f75000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00229e4759b81b3af9c4661fc50dd3debb0af938f7a4cf9959913f3cea73207c8e21c2340824dd7f9f3d353cceace4955cbe71d19a279d245dfa86ef237c7928893022a8d2332d318086bec3bbe52b5c7b43197f5c17ee7a6954800953328e07cb8e81c1e8d6e04d494132ad4904bb88482070e4fb867f1fe175d8c712c02b6c2c7af00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009dae055e8325209f157ffae818072ad136001b7ede10d3aa9828259f1d62859c4bcbd1ce36c288789f58254f433b5d96b26cc6ee48753a2ba2096ee359f78e8d31b36df861a7e1a2dd7de1d11391df626c248d046b5e2a2299b4e111317cf27bf0236e6f5c8771b03810f27522a2f161536b398fe4d2f4b7dd78e5114b4af4c23a3c5282ac30692af48aa14f86673be8dd51dfef1d7c8a1923a34dc69c598b04e5772d0c0a192bc9e52b34760bb81120c7aa84d96456a93c1e8dbd71f1e40a69bb8add5a6e345970f811253a4b06646b77344391d28bad83f5c690498956e389baed57c323f981bc6639c2991b6154154c2665540e654837c89008f9781f87615e703265796758362e784090ec939429abd369a1877cb1adf224efd8bc83930d68c9d5eeb4a151c277e69446ca7c30a4b9a73fc61f35f2d28ceb7d989b4fa2dbb4d7e6a192755e3c91291e22252ce0280a069e4f2715461c9034c3c96da78c80788763bb11a4c203807cc53b6513be32bf5d3cc2f1c6d0725db0c0ee41fbc83e8a119ef49c46e09d71a59d4bf625e8c99b418a87daf488d97efc334ae63b43d7e594e652a3ad02504286648f37ed04aad8ab0f04f9e3249d57870d03383f9bf9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094122e1877121bb10f5c0646455690834bf4fc250047c6378d17338e31d487e8b02d1b9d127aaf8ed03d8a66f46afaecf032006f8e0f63230b2c8b4ca42644317de358cee0807080ba326cb0e4d00190217afdc2a2d56efd5a050466f6b5bea8ab0ff98c0a5a5b2a2951151f40a154287b99f81ae601dd6d4ebe8807ad9f1da0e319e9648c5bf07e59032cb710276a67f54e82e0f101f972836a7c3d4aee0fed28b99f231f9009b63b21cbe94f319ec172557ab0ab86ca88ea02ccc2920f9bfa5dd0945661b82aaa67172ff90168a8170529e5949f6d64c1437c069aeadb511be54dfe878074d2b7f7fe8abd538af47ee6bdcaf0a3c4f6c7b67bd081bab01d86494de8f8823ec4671531989cf9c0e3595f7cdc5675643a0babb4e0c514c1ef0e53f57bdbf7dff6420034489165e5e3d74f182da907508717cf5d31a676df5bd6659dcf9ee4cf8694fde35d68f0849cdece7d85d1f3e8454afd55b3d1a13375c04a68f2ad0f873827506a495e8bad643fbd643d3a690c67cbbe805a8b19cffed066dcd7502bbbb871d2f9ec41c928764c2b06cb7888c3bb8071c27a0a5c280595c080ab914df80f03fdd434fac067189df0b3a1314660f4d0eb41e7d072efcb3c000002280000022400000220249581723b5a6ebbfc80c9cea3ef7c885bfc22e7a7ecc03dcdb42755a057ebbc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093e627bd3c1f98ed6aaf2f78a137f166cd8c1bceeea47480285e20f75001abc15d378223c868b948f6e8e2b611a60800fc4ef2591d409283c0ef586e109224dd7dcb02c5a690f472224ab825a3a4ca7f9e0a427a73f711a205ff60f2c52ec641bfbe68b0e246c491a1873f59e9873a1ec05cc8799cb5b746c51660a526c5b9f15973ba857024aada6410e5918d45f30b879f25182980df0f2269ae4de012ab232709fb5a9f846797a552962d122d0ad8db831317c14ce6f23bb95ee99bd91b05c34dc882b0960519f0561742cbc0143d974f0925788a9843464bbea45007ff96d12d70ea3956facfe6936c5be220ae1eb9a89adb18862bf253f681e4cacf7fedf93ff2234cada5cceb025546d2fd5b05052aeff888926b43e922cfa0781bf9e9585192bbcf39745fb5b17f7fd827c7340874284743ec3f347530539fe2c09100870a5e943e8d9c6c0e47214390aa1bd6e98b95be3038097f8ecd42d7ea75a3e09b3e2116aaf2f5cb988ea4e8e01c0e3d7b009e3a5bcb152a2ad3dba5f2c58eb4bf5a4dfa3e6e9e061da455e66799e3c29cb939ede594434b0e825a349f272b3d1268879a38ab63a68c6b19dc4c5853faeba7c5ef2c32ef4750b89fd130e9f59c000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012bd05ae6e7781a4f86341d14c94d5193b21ea1deeb298622b6ff8d047b7cab2b022e32d1ed950d0cda4336481740ae7ac81f518c0465abd51a2c5f14e2ca1cd81d0adc84c2f5a44e3cdab9b96468f6cbd48f1d251389a9b9adf4f6bdb91476028d000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a452826919b25e2c07fa2cc50a6ecf18932abcabc303f18e6b93ed1b03e60702b6b690d6b65c77e025dd85adeb02137ea204eb3f5f746f9623b8fae21663c16be7929345de36eb484911e30b03a564da17aeeeaec81979eb0d447adca5c1518b5fb66689ba8c526d631b048a53b5c36f7de04ae99c9a5a471baa72c70a042dec77066cb0c4836ac9aa565a43b9998db5f5d17dd99c2842ff6ed8273021b78a2fd3b38be3a8c059439977b3f439fae2c48aadbb1a20f8b6eafc509710c6729eba042a4c121d6e0efc17afedcb96f4eb382e4b1edaef54eb5a46deef15cc9448e6d7968a955a6528286519982edc8a612b5051d8c7c503492c9f7f8d8cd5db5c861344f0c9be8f9730ebff17e364034c2af6b9eaf5bc93078eca38a72c0628ad5c3d89d75ed9c1ce305a074333b2436d9fc2d5a6bbbdfbe01f904734230fac5443f28144999888ecc185f2933e265d54eaea48daf6869999599720b4a6112cc8f99d0921cda12a1ff3cbf1c564977897cee5153b68ae62e8f2001aafefb6203ec63c0bc806496aa41e4b78903957138c841e32c3d0ca9bd90bad5d71d471fd3feaf1221d02656a0b967eae19a346ab3ac872827eab6de1f6f09468493b416bccb7000002280000022400000220005305fe0efcdb8c6b6311d76d1fece874c7ac1ae2ccc20bfb885599f609a38d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008675fd5b8d317ab064961325b4fe792d99c087d278be0dd76adece8c372d0917ab62eca80b1e7bad243c849345ed791d98b64817886d98584a1a0b49a637dfc441c2a3ddec2366b175ca2776ba8962be1b19363f93ee34929324aaca7fe42262dd96d2bffa6c0891765c2fa2e267304a42601070313c38bcfe2ebb4890b227a9eaef169d8c918d05bc1ffbebca729b3b2001350fbb3a21d800467f61d4306548e8a8e77e87ade8b6a67ce7a35b27ba692c4be37fb6a7250fc5b6136d3f3bd68a7b6b84e236424d1cb0b8aa0a0ed9b502c5194bf1af10fe754ce9cb2772506c5748e3a7322dd25138c89103e07928c34e234e4726a856a8d4fa2956bbe418b657425f5190ddb538ded9658d5bf2450f968ab04c22b4e99cd919ed0e8159468d7e072eed1bedd2af5f7a1d2bd917948cdb844ad444b726a32d23f3f4b80de4f3f03d8e4725b86bd725b6ca5934cf59c95792e4f957e6a9e78ceac8df49b97f7f7e0437fd4968fd58c85350906ac919e7ea995cadc408de08919b056a17c3573c1b35c9fec7efbc88b345812189b5fd0bc5dc965b4b649cdf66d81eafb179797e88144f54227d12f405a7e61ac4617eb4d410c236236651e9f1447ed05929c89ed90000000400000000", + "1019f1fafdb75f212142e78b345fdc0ce2101b3ae95aa6a4b03b12e8e215216400000012000000000000000000000000000000000000000000000000000000000000002400d75ed56dd4fc8749b12feebb9acc2e8cc1b5f472ae52a0e49bf2bf1eff2ac000089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000001202eab8e57e5f0e33138321202c1dadfd7f23618187b8e35e491d596cb6607a75c00006f001eecb62975c92cb1b9e3f8d5a38426014ab661008da5ddab1ffafee89392652200006f800825bed0f04513688a20a73113b41d525a804966b3e35ccf0894be7867dd9f5900006f800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000070dbdb38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad35c5600a99363a05626a1c1626f116dab7230ddc5eb8c1187683419fdf5c1135fe68d2000000120000002400000000000000000000000000000000000000000000000000000000000bec1d40011bad8d250c8db22e422b0261db321679ff126b4625ae6150593d2d3205e33f7a020139cd90940af81feb3d09f077c7f3de4793f6f4ffd50a6ce2758aa73499e0f40e686f5eb45afd5610db2cb5bf789c8f8c86c40df47958b2c106585b74689634000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000883ac626e8b2d5588265d38932c00b8d09db10bc6da3c17f24e710be7912c0744dc9ce5801450d255e3f3ae7a84aea7ab8cdb8614a6740d1b45822e1cfafb376876d03883e3428d6225f91943738ff982d39ad650c919f50dcbc5bda54592dbdf595a32bb3fbe314d4b1251847ced351fb840d8af5ed17f4a1d02d1c669f32e34f00af1b369e52fd532317456714b21493fd81b652cb6ab3b9faea37b97440041b71c55578367669ce0f92c77840aa27566f31eb885424bdd178092c5e88492d57748e265ef4c1aa1f33d9b97fc5556fa2e33e0307a268db4fe27b8bbaf73c87e902062cfa1168a03159cf91bc8a191fc9d8c3b4e410ff3f3ff59a6d7403e73b5bdf043f1fd79a4654787ced848fdaf1e8b13676c97a9853f23a3582a0c63f9d9dd8af418d7a50f81c9b8d2ac784a119f6798d1913d9745cc7d387756790cc78a43acb71915f439762f6bbefb1c7bc3ef245a884719e7c6c72925ad1e70978adccff0998dfba9d26fce637fd16aeba248ac5d80ecccc6cb5e5dcdb15fcc0830b071f5b56b21aa3a8916f4b52167942a7f276eaa6829a0c94674ec8f42ef02d92e00611ba1e44075f8661eaecba010176339b89cbd98fc91feb7d5493e84d5ded00000228000002240000022007ed8084c7072b3ed0430dc63c64b8b1c61ceadc18603977282d1c9514fe8f63000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d8e398bb7ae5025a241aa76c54ea9effba902c07b610badd306d5308dae0a7a80c9bd7803b527b0e63fa20adcf95634bff889d91b9b04eb30041ab167d310779e8c6fe10732c6a1320f7a7023bd9b5dc7e58fd846e261cd019fe8666568bf92aedb594771e4006fcc522172bf8f4cbee8662f970106f7cdcfe8485e0a063b2dec8bf57a315a5a9cdf499dd73c6bf1090e7218fec94982741f29d5f1023a3f76f64b83572c2b5762857f7b750f39498dc514eec33b5b69b7ad1b31be4935b706d63d6bb8238e5be6b58a8b6d034c4286962eeb357aab65cb9f58a356f56d445ce68fd586e653def78574f63fdd55aa7e6e3cea340d41131f30618ea8b991c194f894610fc24c9b415b26faeb946d523fa6a8e8dd27c2486bc9bb19731a92dd4a8c91597bf1c64d9b6d46971e8d1f54ea0f3275ee63566c30dd9614952ee4b959372263a68bca431eeb973ab3525bf7774c3bc512106869387996b159b14de275fbe152ac1eaef89b0f6402ca5d1d00ddb054e301dff691bc23a64417eb7bc71c97d3cf6da5f5d815d81d0e4756be3b3f0dcb1246abaf093ca324ac5422b9e2f0fc987f91f34e4c41cf9ae4ed708a9ae8c03635dffac556f2f7493bd65cb62b13000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010e64b3960368f8068def0dc6e491cb3768c8008b1f4e03fb536b1721ccdac0650201bd80b3782428628dd7d71762c76af24e26c66bb94cbf0b034b0f23ccf141ec2a9a7981c7d4b3f447f364fe229f2a2707d1964f527ec04dabc0301a4b4c320b000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ada2f00954fe25709a16c0403194e9257da64f94cceac39f1a12b1aca44c7b963b547fb08c2f58e8586afc8aeedeb7b1e98369b2a8daad7b763e08ee581c5d68781df8841633915a76991a4044f5c15f86f08711363d6eb684da0871bbba41cf711a7d02fe5e9d5050f211ae9bb0815db21897631bf4450d13793cdcb973f760b99ac5de6137390fda276e760994957adba3aa93183a61a5548f286e058874747bb4943d6b113083ec19b7fa71c2d5c723b592d9cf3191572d0c39996755a0d98c0830e87654a552d4c026036dc10d390c9730e1cde94d2340accda85a55c50d20b22c94da7f2eb66eafca6f665956e5e3a6b48421e02945fc33c3ca2dea836b868b6a5844009ab160908274cba6d538db914bc937952750dea58eae06aeee3728f10b970a98b79fe4af2ad8e2bee598f75056d25d588e6372c8bd1823456ba868dedc2fd65bf76558b02104405c455aac63ca1103e5a5a5f5584d338e71502a79d38844206bb91bad6e84f0f5bd245d46089822f3788fa4056e0af459d8d621b475b0784a2521f80bdd74c23a4af4444df247bdeca1ef09ceb3a70e1e3763d19dc5778df5112cf2e666c6490995069571de73bcd6f51d52a0f86292c7de3c5b000002280000022400000220069beafd9d94185ada7c65fe59b21be23e1ad7c1db69cd11f8c896c5e36dc23700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038b9ec10103cae335b32fcff11d4bd15f2a44d6f3aab361694ec66d335cd3c662e0c76ebb99fae4c503d6b5db80a03245e2a3f013c997e2176ed753e9273bbded68684151c3ee23ceceff3b84593a49c31732b4494425581a2ebe55d10802594bd9cc67eec488b5672248c86612676d36185cbaaa9458ed047b1795eab99157ee77b9d0f615c9aee08bd7a82c1d534ffd0afad1127ee0ed3737978bea646f5f85cd04776bafe429f1f63bd6af843c87cb8ba4352a77e864ff63ba677bf2873ac322c00faa9211fe088718a236abb168adf5a41c97c54b1d6984c67718027a2566ca77c5665d4a0fe1b7b7b4f1bfd5c3dfd876ac1e9d5d704c91851963385a5f901822aca82197a7b798aa62e5af0d4f08a5332530c7820c17b1d2c2b3e287e02b7eda9a0e5e0c449ccde51fa5b55610aa057351f28c3f1122375df9ad8f08b6ddbcbcbeb9df33e570c42fd36cb602f95149ca91bd3b3399b12b0b99265dcc8a10ec201f93de0f9dbae4d51e52119e40306d4f8f3d1419f351c3c6d84d5734ec8502801cd053e887ed5735f25451d3c729753766bc018befd3057660af7ac5165230f1ac6c8a70c007bc99affa88029ec113303fc3ad32af7643e7e56799f5dc000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00215ff7d5bcf924edb6726379860b4960e1c52a7f358dfb50e13ce28d7dac2c81b293569852cfb609fc0fb3fa6a3f1dd1d3d23b0bbf788c422f9ff959d336973cf0202bfaabeef3fa976cdedf4def29821cc660690b5fc86e1b0bb3cc94601ef44fb05b461158f030e1396683e699f3a59a7dd388a0432c171b4bd7526620301febc00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000189784eb09957bf663d19a343604495f12b5fa272d7e1121f8df2617dca8316dbc567087e29a05aae38a3e57c8e01e9b56de63169138bb5d47fbd081ee855ab52cafc85b74534fc9e592cf877e5aef01cd9951c1c1374df542605cc3e82dd3c818baba67dd6cc36c3a6304d656ca02f3b5b4e11c13eecdd03a6bb36514e2282b4ad7fdd094a663a726511986c935b0064a5dfa05371349ef85af967dc126ff1829614dd07beb32576456f143b255334a31f8928af90bb675d396a0598db7ce27e585679652ff267af003b5469192d7c67a7cba9e4d9c14657f2e655492d7edf2b0df085ddd1767c0e2170267d875c43683f7a7cb0c13a9ba547b7f6eba0e5ad589d156504651cf4b55b44ebb18fa26757cde4336e45ab0de21c9da566624791b6b991a58f320d393adc5e93beab587513faf49824162877d5fba1ebb218199b5b1f93b99c7883982f3382e0c797b6b463ef8a16a9d4a3265ba2bea45ec137e3c55178549fd8dad50c1f9c5e78ebcc322bd64b5340bf836bb7178df32339d886178e719982ab2480a327fb60846f031922b9ab529ca1142e3a9f58591bedb343f49d7b162fbfcb1a1b3bdc804e063b9d4bf4568fe1b8aa17bb95883b87b93349b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020903ba5fe3379ed8e5ec1410ee74edb784390f49f7990efb332e24c300e30c00c7b0dcd871858e947f983e7f160f3271b13fac3bd13647849c1e8e3896dc08f7622470ae8f51ea3e0e8455061199862dd21df330ee4925315ced7ed60d9f120b3166fe3c77eb33aecd14b66cad118c5dcf6a9bbfaa424e3ed7c561599a63fc4107a903489e7dadf05670636851f27d86b3af47952aabb0eba32344c23996ad0079550342c34a344243187325cb709d41015e65e3dff974e030bbe6f08d80dd22235fa81a4792dc628438f47dde3ecda392b4c27e4365aa459f079acaf3ff7e635addceebd96977270575aaebd7708fb5d81f5ec23e93e5b6f78c77caf078ee6a2f75567f117c595467f3d8dfd167c98ae013ce544586e61530d3f6f835851286d3e37d4acb14954d87cbae0a2a67eac6888b9f23ff219e74d1f7c81027b53259588bbdf7ef3d08caab9fc4ab6387a0bd3db121d4282ab55d496ef7693ec1cdd4b4782287443a225bde12c734e17105f52e6122209598c66598defbe57e895dbbc0a1a913a421add9b3bd32274434226dce860e6d416bdf600c8f00a6dfb0b29d7522ab8254508fe3b4cb4ec742a5563f78f283629db6c56b11bef4b4e2100310000022800000224000002201a9b8fca5384c1ca8377faae5acf86f54ad5a6dd063d5bc714ca982f4836baa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bf7c65d3e5f37b8c8c6c638923a144f022257291f54ba25af4e27a1e163e7dd3698972fd9158cb943c365304031a58654a0c1927c5b56473e819577b6afd1ee0de5b586db9dfcffddb76ff117c0672efcd7cebab63ac0666ebd986ffef629622b6ea4ddf049a8162fa671d7b5370007024589037442d78ecb87c8bc24d0484a5cbfa9d026c34414b4cd18082726015ba19e5a0ecd2acdf56f3432f7104bf39771b96f091534586c45d5a19cb0f8c82b6cb077563dc28ae7816a93f790bfaccf07a818a7768e81c4b32e237996bd119a0d949b59ff25c634875d716231dc68d45a09f399ac7472b6db2d21796584037e3931aa4f4f7aa5b843160def688e3b65a1f0b7f8c2334d63f9611d2501781171dbde601109501fd07e4a0e0b963db65490db057d8f75c25efd50a04639917a341afeb93fc30b7f405400f6133464d6390505505c847741ddb7fe51d6856baa76f3ce7fd5d43177f3fb6fa0b7da668bacc6ae2775d081b433479d6da59dcb38c4cad2ec563b14e9d754d0c91e89fe9d93de8efd503eef0d84ff25d2e64d25e1747d8c347861ad0ce0358ba1d2a0830f7c426aa652247d50de23fab2ce7e4cfd3ff604408acaa01f36c77e319497be7aad000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020a52f1de91fb3e9b76d4363a3dcab8d0613fa5cadbc7540f9c70b56eb8ce846e09410f51aa105d10cbf19ab305eeaa75b2ef24edc228d3fb29e6b60e16af3ab40203e16cc62a1bd2f6783d77e442ca4fdff9a0b47b61ffd99a59d3f153d2dec2b32168805960897b91713f2c1fbeae7a5fadbb051f77bbff62281207dad6b3d5e800000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016ab0a6d09b1a8a2d9b6749f246846f24a354b9f7550bd95bef7e267bb8e8033127f42baeaa5c6f462f6cc69c6ac03fe0a396b0f8b44789815daaded087aa3003db8e7d02f70dc281292bc4411ef579395cdaa8626a629c5c643dbcdd25cb8888a0b4b3651ab7cb71c114d3ef86487bf9bda99b0df831316dd74ad89a83c8409283da55fece4280213f96b92244c05c66768a182560fdd0a07bcb3b10a8bad57d0ba905875e0d60de12a5cfb08522dac492e1612d780f49980c9c3efc3d47b17d402b836869ee72e2cbf81b1c0d853e058cd9ae5bef53d41e84d5299eee24ad8ac3c37b22b18c6ea8dcc7ebee2791b14a7df105bb277edf05790324fc2370d2b37113b63667b7e3bb359bd8c7b717c996d7c892f37be0eb7ba34a2abeed9b24bea963d6c57ec8a104b7c8e7cdb2766e50c63d9979b701853741366436913c70e5628012411f792850346f1cfe67886b2bfffdb9556371814420e39e347081e43861ca049e50fb0e416cd0e42bd20c31c4e3e82228590ca6a05234875febe8eb10f3294322f4e9befc767724da4f0e3e7a88dd94b9a80245f5346e0fbc393c2bf42da3c58986ae7fa6d2cb4da3eb9d40043424aebcf42318cdbb04c8694ba17a900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008620f4d0009210e10b32c91e47bed997b7da61099e2735ec3c6ae34cd43bf9236ca57a20595ad82237d7c5c932b4b030ea5f8bb173046e910b086121bd25183aa61e38116d5e83cab107dcf6feab02a9f60d12c3c9bbbd16d9d7504dab45825beb65d68d577193d4c63cf87ed2d6458689272325037c49f48e74a829ac54cb0667269cad9b3d0dc2f49dc1a10062c3a1cdf80e95d47fa7569eda450624e359a3a459594bb0b600a7f08170ab4456e31445386bbdcb541eb887844e34499e9c1b4046b3cd1b7d1e82fb3c3c1264fda8e03ef883ecd80a7f2f9301bc47a1a2767c94e30aa6f1bc521c9b9d5d1553846ff1a0c51a7c54b31c790d54160641b088490a5d73a2eef6be6fd964aecd97c152306e0efff64381f43b2f601ab185a0919b478c68e79a02cf7bd4e3f4b79d235ebdd6de7515bd88294bd47550001a47d242c31c4a96fedb3bdf6b04b9a8111e9b2bd98ff21f89ec5808e9d950a02a635c6f7166bf652d607ca2ffa48e5d3e7d35952477443a3ca2976caa2b468804e9b6fb6c8d6e6068c3195565cd67d99061f3887db5ba1602cf0c813ca762d5752600e755e3c00c90ed474068aa2a3b0f6cbbccd6c4370a41ad258bbb04d9524f3695cf00000228000002240000022000b2805572cb9dd73fa825b66d20de0af3a72d0bf13e26cb631df5b048fd81f6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e67020a75fc80290b50af8a2284da0fff0cb2daf9d186cc9d6e5b9ca693fffe1b9a5e53a2a9064740db81e1e7cf1435f0b171e39ee36ce2de60f9affa90c36a476ac2cf23b600becc14c18ae66d1ec508457d76cda8ea18f3368af97fbf4b3b5cb67cd857ed4bb2ea3b9f24f78b33c454908332c28cd8130649b4fcaf4359577fea2077a8989284b2ea5d597af1d7453c6bb5e4fa1824a32c7e836f1391955fcd7d91f4646a3d49210f6a9d22c59570f2adc571e756fc3aa4a6b2f38591b36b2375ef28e8bfe5df3348f069d92c3fbddd4e79dffea45295306c1e955f08b50687a7ee8ce3d5f189c502200b7a6c7b557dae0e08b0a59ccd59e378b6969b28322637ee21f875c2f3e881d22357b5483d35b2ab9b34ec479a3fce1ab51aa46fbe896549da79015d7e60b945ccd846bab1e0f89028f322d1477a00632f3e154bf7111083e7b6480f587bd66a778c7d72832028943d56e75492b5d7a4853ab043de89821b17982267b43fa1ef89ebc75584759614bdbbeb78b79fccf2a20c667e73ed4049b596e6a34069878c1cab9b04a34b7bde879e0cd93032d46f5b189949b93d51cf0fc73e3dc01a5ebba0db3e10af012f5e156476600fec4ea8e72a396b42000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010036f01a27e0ae7fdca47b6e14cf500e060f6d22b03510c31b04675ae629068a02061312199d177c5b00fbe79f6b9ab91128b7b82d1a2ef1e0556e7db06371e03e11c943dd8089b8ee705e401fa3235cbf3dabb88219942fca4f851a20e0d157890000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f172777744369170ee50464cd91a731618e58044f3c3c623d12993807237e728b8fd771e0a7b4efdc4b30200ba41f8835da37f9a15cd3eafa25be41ef3c244223a7cdc884f9443ca2260541220c61cc84dc17c81556e5eb92057c59260acac9aa7ccfff4d8b7d8e8bac91219fabd878fd1d9b0857e906bfced5dd251dfd377518e7be0e9f3397c21d9ded5a74ccb8ebd061fb8f802821be10db72101b676e32b73acd8cc3425bc9f572bc853ac0074a66d49a654b925ddfcb4bb4b819687857764abeb6cb007368d57c24970fc35992201736144eb09619b57324e8482543897321589b6a054bdb703cca5d4de2a8bf8ddff8fcd14ee7910d3e0a5b10dd73455f5ce0008934abf2be86c78712a433ba416ee4cff723dafceecf5b6becd9dd3f5e9a80ce4f5af7dee00a52620c449e53a7293bf070cee943195998137c715de49ae720d09a66f5108e2851f1413dcba04e34f4dbdebc09330aa45f874a1b3a16ad899812836db44239d4ac9982e3ee1e73a0777d2eca229d671cf9fce049323d645c2c24c60adc62dfaa479a71293f62a16dd30537de01f39d0add6c90929527193696db3f1c43bf1f8c8cdbcbb5f8ce603649fc20b156802b03bdf8f0341f7100000228000002240000022017ac6b22f8654e28ee24254298cbea2c51fde1937e9623fbbcd65d6552e524880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015cb4895a82b13b6518d0842ca255541ef9fb1a42c8a0aad16a423b2d1bf959d9f68ec49678f1fe6e6b28dd49a1bb07b325e9639326049115804ecb23b8171c023a186d95e924327c1f19b9d33c8a449159458db66cf137aeb2c001f85d556eb6f0eee73d504910cb9dc4cfd589e4305977ee4050ab827207ed57d88079c846d4755d51300307e1abe578cd49e7c59e67cc072555be4a4180d998142b78ff393519d9aedacb6f4888979ed79b0eef7f74f2d13c59595d33c92059ac5216a237577936849c4b0c6179c30f9eff72b98dd0ce34a1d40277dfd9cdc437a4489c34d8cb6f91ee85a6ab5e32b532181862784ebb3d37bc099aa8b6ea0108e44227591ef57da2d8ee5e50632d4ad650508826e5e97eb75320cb6d91815bfda2eaf5ab4f84a3bb4bafdfb97f7c9f41c3d0ac753fe7458a6c54ab48a7a37224e596c0353a4f2c98084a6c5262440a26858e600c8c7cf2aef1710385a983bc9d5b5917f3237da997bb62c471081c3ad917bca2a0aefb8fe9760959965407edcf2516d00fcccf4b83667b6e1ea41724ce21e00543d87bd6c91d8847cc2b78c3af9e8817ff8a6fe816de7d73c9797301ac839fb6c5dea87d1aed75e61384c32ce92e3df725a000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012975955125433b9d34f12dd9decb97491ee4d297d11f14669b6a6f18faee9b7e020928fd1c9323f78b28445b934f1bcb040397852e960f6b93fd2f9f6677e642402f4ed411547f8610999b9f829d80b0264469ff5f480110d30946991696609c7d000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000875b7c3cd0713a5d277dc334bec6c24994eae8b5d439d786dc40f8f40669ed6811446955230ae8bd4178a6da322a595d3c89aa3133d67eb959ee7ed0c52b977369c65a03d87a144fbcb26eda69ef7f09240ed6b198985195e106f759e601a6bfc98160795053f773afd66d3c4454342f6ce483eb6296ae6bfa9ea6e0d5e0e0052ac8b09c9ad6ba917268922cc384fa6a5d9ad1638e4e07e8371db4103815ec851ba449928f14aa817920a3014074344c68f6dae0e1244da6eb5161714c2ddb5bc2fe23c4c719637349a760daf20274c12b4525418397ed2fba4757e450c2eb0aacfe467089997c5717aaf0fc950968afbc79a960285abb140f4270b89768963308c5d50de68cd5b8781359d0113d72f60ee29f781eb14f5b8fbe4395b12a4961902e9737bec8f9092d68427de4d6b8ddefd594d12f68f75ddc4e7f4dcee02b17aedcd2c26f579ff6bf802f3c57f4447ee0b1ca78d734d2757a129a289b6eb33f4bd5c995efb2d09933015fec858cae44a1d1c899751f7804c1374ecc0d8f3843084c0601d92c3218e23cae07c6565e44b63fde446eecb5c30e3780dce6b03221ce4552165c4c04d16dd5debe89d88ce0a8239aa65b8505428ce4d4d807a357960000022800000224000002202f3fc8010d0e60725ad4b881dc177264c353026fe35d7edc36c36349e1c12303000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008bcea8df074b75af70b70aa9258881aef50ce523a4f4e9b69f40f05cd56984c1d13f473d7ff6b2c7f6f5c5c27c3391b7cfc09150dd05089287407c1f9ce2c78dae932f19383c9dbc02a62afad92e79e652f996d17d58ea38dcc473ad9fd8ca2e356796effd28d4f4d6a56d636920ac99eaa6adc3b350e423af44a07f1a13ad799202094df3bcda7b455b9a3e195006bab626cf0f06e7ee71a10a9390a911ac3b939c1351795c5a1ede778c3160a2c1d50ad5487fa1a6ed2a4af05c468104e6f55d3758d7959f9f9806b9f991b2be37cff2d1ba3a27fb09b7c794e40f5fa71ec0e8cdc41ec4242568977b9d04c3795726e8dd8272ce4d508e5923b5aedc7532190fe2865f9ff8a244d2627b85038262a1cdd2c8352e8b5e38e18f37430b861816025cd1aa4fb094276d33c3815628abdd20cae1f5ba876dcc6870ccda284da9d663202ffd3db64269b20abfc8472859555bec59e60b7817a0212ea5c066a04b704984e7129be9cbea6e04db2aa23b04e86b7287615746b34af8dafe3c8d1045bb061fa16dc6be05dc0d69445054dfd8c1d986eb04734d922e3f3a6aa9e3173f4cbc1637e1f1360086e488650caf04232ed96cc2ec967df61dbc2ee1963e4ea878000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011213e196cd86d4e4c26531d726ee97db19cbe595725a4e1c499c8f41f694e417020bb00236822aa9639a7776c4d410709e1bdd9755cb302b3facccc8587b93576b210464d972da7a6d3b86010aa8a36ff621f85614eeefdeb1beaf3375730457a70000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000619d875204c7e2b0b6de2353c51a49146b7a5f766cbfe69596ffe9e0e2387f77c62636a16ba41adbaa59200d3bc721c0f807f7749113df1adeb86f5de7707d50b37b93118547399f24cde7a1e1b184c543864bf59800837292dece868d5a28d01971fce6ed973e2ff8e8f1d2b03c8cdea44abadf56cf92e144017d4dfeef4b8fe46ebdcd2ba0d6c935efa9ff1bd79928d5238a466f662175512cf2f77c2a8f9d5f0005a8f731c945beed752b4f4f4b5df349704bb3f2c58fa63c04d8570afd8f82a2d1ab4ca69fd8bd423aeb378bb01e83737b595173bad1ac6eb9c78256e1a494e093a880aaa64be17e7244ac2ebb9abefcec0bdd73b22a1bc7e3affdb49021429462f7d4d9778e876d3ff0272d16c45be198c2d13f45ce465e07eda8babf9b2cb7c6e54c9690d4d50f896e0a47c59d36c46e09f87ddcc291238a4d9b2bdf1806bccd9989f9ec006af0ca4b48f3f584868afcd49ec1833479b150f468f87a72c3bfe72be31833573f529d6efed27b88a463dca7aab80c11df504a64fa2bb0998c8101ceb7f917939b930a6ef8d660644f22e7c059f6ec97b7118e4ffce7beead1c4317185006a7f583ee575345f1cedec2b0272ac8701b6c1b742886c29d33000002280000022400000220206e7c6ca4f9d9fa5e2d445a5060cb2c94b839c46af9a11b5b4ad08534458c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082f2226a77adc7a00b48f536ba119b5e90398733413bbe442a629b42f1dea82f24ef2f0a7335cd83259980c513aac3a59640d04faabcd3c2025336f861c1055f5e8320611c29da8c21e639620ee4727f132b311379fa64bd7e3928297a56786bf6c2feec2a01f9c6dfb0c80b6d4f82fdb5c3bb66614a039615e7e5b2d6160626af06922ee05d58197da52d1750e0024627089b6fa901dcf4efd1c2aecd413a9f7d3daf8570511c25b0f5faaea930a28b8f7a6a92fa69f51f5146a3a90e6468432f08943a7970abf083b4bf6234a57245d1498317843617af780f9dfd2d3f300cab863381d6c910c48230e0604a542e9cefe2014578b4141476c4b57e0c2317617c54a4af0f9226a70b4ef0a907bf8e68c332895ab4475826b9167970ee6fa084128cac78b2d634283bc5b4c932e132baf9c9ee44f7a5039d74c08ce0ec9151caa51cdc3adae86e7c2c0cf1612664cd2180ca8e63b99f388edbd11da0b66e493ea296024ee48fd3456cd8ce89f50669589aadf81c7980a283b42fe1aee713c8ca0e6e05a9c588c84cb91ec3c7d960e79c2972b3edbcc00c79851b2e47bd33298a5894a69a878a70eca6eff8f90e939d590c5b1c15c3b153b8570f89814796db59000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020009763695ffc0200a07ecaf9baca76a79a16d55f8673b2558a5bd25e6fb3fbb2380c65f721b8e2d0e7b5e0006487957d542c5022b2ce63cbb82a32d9b12ac84020d24e5712b56ce0556e8321c4a6e7ed69e2520bfa0256b49e13bb337a63b5eda05a2b34733f1bb759cc8acae1bd6a989150bd9c39b35d2cb96f86bc287fd9afb00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a17cd19fb6f91dfb1e2f1233a4ee76fa8499dd6e252b09d4f206c9efeda694a6b418982be994f0150662271b7be3abbcb618d057ea50de14a97481571c2b976133aedf29d21695e6ef8e83e2d38b39d6c8b33c8522f9d1a2a1b12ddb79a1e5368e36be84e20675e9f651e49665b5b6160720a50eb8068168a6e43f515a4a8f1dd28daa9f818a504699dc6762c16ef47140b8057719e038f145a14a0d9f0b2ae6618efb291f46030f4d3651639a37eaad94a855d04e7c1d1f65a9288532eeffd19a828f3907802cf87183c4802741945a9a12339ca543188ce89508c91791ba5d3adf231512a0654a0161cce46e2a32feb723f0b58d5c60796cdf84aa4866bcedf3de4d381cd0f1b43380ec3df896aa5c1d35e7fc5df8ea8c5e2ed65504e3a5650a20f2d827887550a0ef873fa33476333df1cec85941358b3a24bb392bdfda81aa331af0d583647411d7f63334233d67bc3aea3460bdbd5021f7adc27b259c60658a473a047ab133c8f5fe3dbf2589c9e29ac76ae2138691ddf2970d19b31c315cf56b0dd7f27075399fc9f902ab7c948240398a0e0f8eb414dc148f9105d4237d65a4b87aee1d697755b7d2ca69908100294b663c38716c89d3d3bd3173bc7c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009641babab2b86b07d129dbafb2420f43414b9d9af24fd621931649e4dab0e4af9a4702d6597346d00391d55c9d45ca02146e81a35d23713f4be066f23920a46f7e4d6a5ad61ffbc24e312871fbad99977ed797f473afbd8f19e5bdb9982938717a2b8ba36e45077cc3b6b709a66e37599c7a78472f54b78b58691a841902255db2537539040ed7d3b6d5ff59b136153f4bbcefc83415388e4dc8996621e65638f4fcbd24dacce90cd068b67bed550b01c4220921c6788d8a174dcbcc9ec0e088916641fee844f07250c740ca0041abdfddc89916a5d84d52e5796c631519ac7c677d1b027b074f4fa0cc98e4cab717e37c361050914413a25d0600168805d323c22da94dc07af71132dabd3a56f0db91d03ba3be0395cc22b0757305ff2527f13537831a8bc0357fc464378606ca34a38aa64f0d5922562a110475a6af7fcac2c11e7ea86eb487e3d1b852d44e5bc4555f4f55511da21ecaed8fec449f57db40bf6ce27d648c304d64bee603262cd32d4fb1bb9fe532a8da29f6e5715b12c71f944fbe6ea3ea857c598264fcabebf8dd46ad5c3517beb951615194d38ab95263d609841d51cc6f648b58ea4cdd525b8f62fa084a4e1709656b5f782fd010f09700000228000002240000022015a0b4a1f89fda11b25192cb564c8b68127c4d71dd03b53779338df77df22498000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b3d9fe083632a6c0ea740ac1f1dffc088b00cfce901903e9253c79c416acfa8f69341f1fa4d683140aa30bec8915c1dc343c56da218ef04b05e93f793f65fbea01854e392b5b6719cc759e1842d2051b9154bf95fcd324dfdf251267fa825c3ec991b311f06e260d4820039aaa611af4e12a1fffbb3394853ac56018d076d6609dac31c7560fdc54a5191aad34241d9ef503e44126cf3f295a0c197484299266a0512eb19756e7cd13b9fd879f8265b6828ffb5397c9f4cc9982d4fb172ad3ea3d1f24202ff0963a7453f01553e853612ceba5457253535d395f579967fd12b1dd8540091d064b1259b206e8b2f97ef3c444762d7e97e9118380d59723fff91f46f2201f0f7c79bd83916db6edb1927e002c782831fbadb58857c49e4b8d3fd3d365f78c65e09798ae4d317e7aaae6fdd473ddaeef691693bd800016f4c62f4e786e5669c6fd00d3c7be24bd7a6e50afb16063186f1eb8d427110500d40df225b1da3db1174993a235c1d7fc535ead848045e0b277feecb17d37bf8fa0be3c8ba8c7023b0be987eada869d551cd740fc232a4de4a5993de6e910b6bb32bd5fa255de3788bf3cde887daa078b6ea0e05ceae3f9d2b7cf18fd7ba520afdbd97d4000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001165b310812210c4ab4082a8f7c1d8dc9f5575d0a9ac5f4a1f82018009737d815020d997c1db09537119ddd6fc20728a84e07e89c1b01b17fd3f3361daa8513efc101590cd16f46c7206cbafc90b2bd30a5840bd7a45442d407db69782ae599465400000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ff47779b3a41e583f0fd4d7d750b68ace767ea45ee09ee5221a8d574da57e4b17568f028e736f0abf37d1b56949c1cdaf55dc3e8956c9b3ad9a4d8a496630b464c76340943bd95d6fa881f0ec2d0b498293d22c671beb7d4eac70fa2dde74a8a56122376116c9d7065a0e7d6b7d3f9389c417c8a62ba4d729b1201c64f4b921b4f944f043a825f704b22b8a6f80acaffbf42b178a4edd4b174e8ef6842b476fded1e759ac5e01b064d13420f402e48039128af2113a0ebe02b8c7656e65f99428e433d8e6fe75e8af26da906b055a20c2acb7f8e8cefc9f89b85b9eb2a23014058ef5a1c67b4c50bc698d38072d15dfed76c736bf5af3969dcb8c333a27c34bf1bc0ca2631f7115d053c80e837b36218734723c3a43e95fcb7818e86b72da00e5e6acf11647061a8a73f5618acbf4d099f5463a36049681a41717b09c19f99a19162c0d9acf3f7ff8dac0de29281b51163520d546b7fd4da2bdff8cf968b99f1fdd796670854fd7b94f232b0ac99da46f963952f6ca5810c2026c2fbd01912bfa2c6170aaa989d405a62fe93500f3e1e0da32fb182efdcf2a60b8a6df3fcf66b35ddc91ae7b910acfa2ab8fcd526b5412d18ff1efcd812caad5c61bf0b61af0000022800000224000002200babe34aa8dd056a1f1685da25621d28dfd339bffa6e68599d5be143997bff4a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d9c4845423922489f83ac4b0f4e8da560e7df426820b93143efed19b4b83cca7c57710d0733be520c22db3cfab04d6cb4971f5edb54c99e71261af1d7e33bf2b79f66edeaef7beb9d7bca2097916e0a8994ed9361e171a93d1948a5951780efba854cf35d472c065e6ba25e1b092d6549deb5e11507e3b5187b6cb9744702a74fa1f2cbc9f28161c67f3c214f3746fce1234a09322075d2f5b80378b3cb59265f0c5c57e8acd8ce158469e512011327f604309ee626f994c566b66cf6980e6dac2df61b17ae451a62bbf904d4e89febde45542dabd3eb42d5d4df103804ce16bf6d44be0347e44bd113b4e6d7dbbc24faac4b8b4fdcf841b45944a1f5498b7af47d71018ae6d8b8bb817fd88b0fb0e6111caa3e47bf6fc57cc4c4686cd5186e0e78e2f505f7fcf6e5c7a56714dd82e8bb5083935cf424e94211c5ccedb2b8429f76912a16a83c6c2afcc014a6002cb4cac1630d960020fd252eb63a67df55f4caa8aab2da5683f3f8784c7568051186a11079cde084b46ea93e5e63e7f5d992d968fcb494b44e53781210cd482bb18c7c91e42338ac38b8b1014e91109c73108439d11174063b033aab9eff2b24c7fee692b7859d7fdffbacb161c8af89a622000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001077b40de939ce167f1de10f80e26bf8e419be7ae45fea613b8f8c7a212d80108020fc2f605a06694592693b18ef7d0afe4c4187bf03f75bba3ca365147ff7280e803a019b69acae3d64af00276dc917284916a3dee4afd6d44d2d401fe213b01d20000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009765761e4efea1ff16ba3de6c5ac6252a3babdcb0c6bb04dcb9dcf5169266e6fc0797d57ad6636ce47c55f4ccdee27e051f106ec004352cbfc699c6f69d115fdfdbc5ef1503d162fbbfb821349f52202f68414d952234164093a5da83e73da8b7e3d3701709c0ad71ea84bb1cd6b553b711224d639bfeab851b8326acaa46d7b406dc4fd329767f455a93a2813ca108790872675e8f8e519c0c3ace3f11ced96d896659ba419b5c5bc6be98faa1c75f8b2a1695a6a3c743c6012b9dffd7aa997087d32c62df2077e97a46608f3ca940f71e5b5e99a61e83dfcc340b64ef318a0dd5882238b15d085cc91ced80a1f91139495a126784421198fe0a6e0f24d3347cc1ec66f4aa01a99b03a03515983fa4ff87f8250f45d44fe5c8e1974d043bd8dfd25503bd733e1093ef780c13feda4d74659fab193e9eb00e8d1fa62545359ebe929ad5cdde7c9e47b932d1d0f9f29920a072f2ac93244f53245e068482709704cb73a6cff1d5096de1c8bdd9c0114bc083628d68c1aa990263d2f0537e773416723dd4db2d4a4b1d1918f07629d88e9658c370200ba8fa8791ddf6f40378c49b207b088a6f5079ee717141382a23626bdae6a5784e09c9395f6d0972cd60cf50000022800000224000002200d53c0bb7c9d8752545ad0f8f202bc7b295cd33b663cd9336943dbb9e2bd8da8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d4242fb7d0aebf5ab25e232a14915ae7d4483a6395b44582c1afd18f7ca3ee9ed7205bdd6a5149c6e3fe210901000ce79e76ffb3a1c9539e8fb3fe02e3fafbe169284dad1e9f5bd4e684358e404b04265b7a3aeb51242e57fef4fd938cf9415faad2950306017db80d4654bcce7f407eecf12c152f503a45b9cf7c3ac740c557e15027479f24bc434e2c35094503714f580dfe12cb8e218066e08d8272c1d41f009d509e0ced263c94677b42629e1bed9357efd20ecf64474e77bb6adf953d1564d299e91ca741573a39b01997211cef16a5e5a77ef84435373c7de3f3a70c8e99efa48e6ed6bb28972f71a0c298cc836e57ea129624e9c024d8f29ec3bd718c08ceec844ea855c772deef76e1aee6f9cf31e1e41ba927129b82c300bd60442d33756070a44553e0356519c3a74e1e4e390007852a57eab5a9d15aaf4b87b0ad9c2cd21191d0987a281233ff995ea093fa3cce3dad7e6f2152e58a5ee0ab985a0aa0eb09e7cfbec03f33f6d984dcb6de4a83c8a5a0b30acfe465d3379ae8c5a84daea081b5e0ad1c8c8caa3bb053868e81c45c72f17a458c2a8e52e0c00e8b1510b7be161556020c596b9a8da5331a58feeccad51d82c9bf8579485caf0adeb000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011bdbabd6e422df0b775c8450e13f1324046237820ec65a07db0c3e8c568f5b8d02131a56e48b008853f09d2bf7ea8d6ba326b68347755fe7422101db13baa4ba8e276ca1a7e2f71b617fe01c26459f3a448cb772b80ffe6053fc2d44ac69f1b6ca0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009652798e7028a528ea3765e0ab9dc6368cbfa4b5183047ae5cb71d5c56945cc72b892545b5ccd91232958fa744fd221db837835f6a0c3aef469a9a5f2aa2d5e9f0deefc4be60e33ba85414325761e223c81b10f6563b211b42f6b8827f4ec3369f3ed91baf314c55d4907f7ee188e09352ef97c12a6522a8b444acb8982443a77fb42545c2371aa111721faf4f09967571a87dc5ccc85960b9bb63f9f8556ae9edc8c14a047a3e283467027450d3e5a23a616d0ee0c201947a6e8ddff9680659ac787ad2ad10633765c47a52bf47cfacdad4ea414c57f80ac47b40e5b3a4467e88922969cb31022615235545683ba93faee6382b6082a13845e3c0f08515aa2fdbe2092a6c53398bcf17ead21c0b1faf51f0fc45aa537f82accf0baeaf94cea495d4c3afdb727104b22cf52f53cd88f1f43a3ae56a17552b50865d5429c5605bc566048d40eb022b315b3f1bb5336ea48663ee9bf24a94bf19576335771c0c6b5c9dad1aba240939434c6fb0416d0bdaf71104ae763d1e5718d5b71b834f1975186f87d2b7bffef32f75a42a3c090479160e67bbd19218894b80dad0fe3e0b7858086bf75ca1f8c3643d8a64291713d0de0169b812c9abce8fc4f093388228530000022800000224000002202778a5b6385f271ad5e5d45755f73d939a6b729fe53bbc723bc041f1909ca8410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085e7bbbe19e66de81d1cb537fd1d969da325033afac85826a513bea5d275057f700e738973389a13c044e6347629d326202f39e3f2cfdd99a0cb85f0f1ecf58913c81a500337d865450523a5ce0ac6da275fccbc3a57ef877d3d367adefc05bbbcfad5d75b87876997814b4178eefa05af0bc7ee979689c2f7b77611ab50a91a8d598c9f2cd94b7bafa8ed2c634ed0556e0fbc3432ca59ca46a43d1732e2accb5098ebbe6ead43e2f42ae4c311eefd988868f25d5d7748aa7ea4f11939a18be15fa5689d6fc3b66b3a1d980f4e675cc24bf1d4001936d578fa3a17a75bf991b3f89d185a31f7ee392e582356e4c4944bce931633bfa0a89c3ce876084ca0be28dbc1cd620172622fc9f2436de59fc2f9f5532d71ff9e5d7fe84e4e1ffab6ef569be410d6c675e929d9c055b2f8daa81dc797bebb940cd0ed63b9e679200d96e4fbb5f144e637033d9c19e86b29217e0e15d0d6c79fad0ac2c4d6be2cea5875b6124e462378c417fe1fbdf14e9dc52d2bb1095a2d93ffe2fd4725e9e332602e89b4c92fd62626d935b8bd388255e3035c5c53839b5ac10bbec4e95af3a3c941276d7a38c4e14c15760d896bf0b8819cfd3689c46609b916a2ffbc31110c15b5ab000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400120583b5324462a81d70939a8a9cd2b9ac546162424d9855a51f788ebc464d8cb0213b12fe9b80911bdfa5b8f709239066aa726f24ac27b31994f0ecc39a3d531551dd909a48abaa8b25064fb341d4f2c355e1f5b7b3d1df09a084f65f8e583109c00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024b98d2544c6db4cb3eba5f2fb85da8743703e710cdd37897361ab2c15c68a7ae9964518b1f33f81b2bd6df5c9b0566d5e2156520c827c5c48eb1c2beb822100c1ad5db0a8d09e74e7fa8e564cbe39205fae829b9e12fa9835769c1976199b9c94792c107fe827d0a540e49d7f81dd89ef509d4bfdf855696106e3813a22a441773c3bdc43b58a78d3f6254198b1af803af3bffcd57133849400516d6f84b636c4b30e3bcf9827584f556b7042da898278d36c40836f764b83214af8806012d32609adadefe5bd2522b0af3cb987b5e2c6250307988a102c591f43cb97947b1ae96a63d1d1e599e126a429a67eb1968d04de8abb52ed599733eb20730115d86cd4481d86d2e143816bf1fb925a917a2f85e631b4e8ea19ddb88c4af7a61a14a1fd52f3ce97e3cf28a7a07f0815cb678dd03e37fcceab9a72c544378a927ce1ec7cecbf943f0a134caac3634b43813fd447a8c286ee3f525331f60acfb9eb4f910c320398fa954c157fbac4f4b08eeb4cd47ad33bafe05ee417a05e8719581f5df801845e7326f137ee8c8b4929a3a1c685d93ccb67f976575186831a6c8fbb8ab9bd6c43ab4fc329615b3a952868ec3f60125dc2402905507dcedfb71ea2efdf00000228000002240000022024e2ed255452d387e3e4aad1f41bd2d689745b09e2c997c027d82ddf469bee78000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001462db91a6c8336f7f93b15a9e4243f84ccdf737a2cc0b92b43a29d25939fd082d48e5f8b708c67e6e48b590998a6b6afa0a8f512bb78bcad2f9ca8af61bfb267a5e35ec9589f5a623294c5bd242e9951e08cb9fcf8819e88619a91689a1a62d313da1d84eaead6d6b98308b1194c50feccf459352a11e71b59fad98f039823ce954f399d1e6ff3e42b89421ca96acecbb4ea05fce866e5cbdae263dd0bfa5afece7b38dc13d59111bd0b851e45e58ea4ff8be93d6c2f47455418d2c0935826c1213dcd84d6f1237a8c8bd3d962d080e15a9edc620f5209d8923b62256b85889862e2a388c5e51b0bcd042ed4f0d7badad8ca9910957145061f34076e21169fc29c8fd61934b7fa3c447b18cddf246aec84e3714007b64f3b35f83501779ff0ebea456f46036f7a655e3fc37a52d4dd8e31ce16f71679e03b1e123c99e3d260b7a6e1f87f82cb0c5fb878ebd231ff98604576428c5a7c941eab24bfa13a4c50ae7305f681ca4a2aa413b099894f640ca90110a4b968d39b0bf71293de161aa9fec86a32bf7a603f286f83d9100e24e5861a665d42e0ae356c27086fe18d24e1f7d73cac088f18127f312dc0c8333917e917de7240b6ef0dcd02c0bc861cb85b7000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010009d6818dc884be618ebf80d73a2a42918ed76c082f8a65a5e2d4429099086c0215bc1d39673d91d894246433f89f4aa7aecb54f4c58398566e53df3dbbcf5f4f037085fad46a68561122fa91e5c54214e281585c02e716cd7d8b3738ee60259b000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0e03da47903560cde79f7a319e2175a4da6f181488b2866aa5c0d83cabf3e801c9b4fc3832ebe2c18909f2eb9888046d03776fc452d9dfa17d90cf6640c5fac76af3dc0cc4125121a9d625211faee89332c6586a3ba7a8d6e4d66561c8737fb57a7a0703dc7fa9bab3214c57cf4cc5f52e1e3d9532f7c52a6af2f27d8596aff0fad4b8bdbba26f254a5ef5c3699b7e42253015c31eaa61529c2a1b80d539e3971f911d035d75be6a1bd5aee587c19b0c51183c3cc42c45e9e0e16a5dad9554145b439e2782385d5537b9bd5650b29dcea9e42f3dc6777fdb5726bfcb3f97f973dad020dab1718efde49400d9704d61f2dcbd426787c0475175b24becc3ebcec942c07a02e95e777d121917a9f09370d5cd29f611a0136cedfd4f5eef10d8f24a0b77f5743423eece516630ee176e8a865ec7976204509eebf2650dba942aabe42178f58d9c096887e348b6b884ec0cc6c539e77b338773497c8a1d4131b52e8b8c7447948da24682a4e0b62f504966cc3358a2841d905e0339ed062f250ac54530675040ee593c27a1fedcd7f6160070a11ec086966edbcd3d32ca1a505618a56cbf069eeb97a55f415fe4f56591077178820b4444e3d20a9085a119e900b8d0000022800000224000002200a7c4f97afe0a63e85c8dbe05576aa0c83e174f4309eb8c97c7ec077ab04d86b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009114bb01c87f7c659be146adcea9fece327a88f4187211a0558efdc9f47b10ddaa912614457b459d5dcbab66556adfc0b71a877ae57167d07d797e6d9cb3ec924d6b125d53f0cc474ca5d1eac237764253529551fc099aaa8665cca33fd713746a532218f9b10d215ad05c5469891fe9234e5935bc3b99a90dfa02f23818950bcd8f5681b88a24be451237e3262e68c8010d3786cb12e986749eec52bd87e817578adc72009fc929f0327b00076814884ec50392e9a3e172b6f54948aa7959417ce740a8d6943e0021ebecce8d47d6ce82e2c92fda67cb1b231380d4befc7214db2b12429715aa8b0e855cc1b32db9169e2d390914a782f4e03d83db8bc3c004bd47974eaa6aa42e56e83770367cb78ecff8af1562e2088e7476124988857712178e3e11a6fc22c0c6331551484aaf8589993afe9665443ac5b5cd712780f76e1f2e69d3f363f58a329f3e0a2f569ae7f8d9bb6507534a13fce11a77005fab4eb17259fdb1534eb042ba8aa0e69e5e7d7b8f287845bf6ff22609a2f7249cc27c468f017a187095e9f137a9172ae5c7c3a27317107b43a9249c2d1ea8fa07b43abc4484758fade147e763950ef30118eae291aeb462d203292709520679f55040000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001176ba4bb652661356266d5ffd2074b5103f6cb6699d6fae01cb7ef54d03069400215c89f973883f8237e3b94474c97fed07c3682969518928786fb77345e93a1872bb6ea191cac06febbbc40fc25daa23c88e70e513d5ce287cac41c65a125b01000000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087188d7a06ce9bd32e7d85f88bcca2d103edca531f882c36b31e7148924fda84c5f5ae31a43499985a64d015b5ca8b47d7f9d5879fb7d2116ca92658f35d278994cbc72d91b2dc40525bcec7583af7e688f6d64b6d2cd4da5abeb12fb382aa3e701b573738130ff026ace64a6f9d3aae0ce71f3b167b2f5741ae40bee0d7beb3c2476a43948fd6108d4341331000d0e81096e48aea5c6b5eba3b4eb3efcee7f3fc853e91eada8829a1d6710a5faa5b896da1367327ed535a7ee1fee2c64c9008ef92168da41d36286a23a27f6798784270e959400cc28519a04021689f16bb0880ccc26767acaf508f1d15624cbae57bde0dac7be0a47a656b47a392c075243acedb0407c98917a4cdd5cda014d8d8c4a580a67dc9f1ea714438124566e1517bd8e770bbe779cff24144192160f8e50e34b95b53158644edcfb842df0e98b205c99e86f872e5eeb2971bc71b6fdc521d2f38fe108addf5b21e13d275551383d5f55e59121d88679eb7c6a953fd62db359124a40eefea7838521abfd7f9a4681b59bf80c35135d7b72660eff585d861fc098f54774b79ad58b00fcfdafed48ac307a20ef9ccb93193c39abb72109636ef14ff71fe9d904bb836de03b6f44273df0000022800000224000002200fd5fc3ec9fde54a3bcf368430ffe0e4ee0e8797f35bf1c55eb583b109c8a552000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142ee5d8f800e61ed42128712f2c2004ec9731c6ac35ef51c5de6e6cf270633c9a829d8dfa89f843bf7b169c83fb9e2558109eee799fc8203ea085efee2fc2fda5a5342c4028ac653d65f5ff767dc9aa9db3a66c81621cba0ece4f4b4e4a618defa5a778df236539cdc0d759a52c29ee8ce2a9a531baad6d170f73485a52d01e01482ea0dd1cf24615191a29db319c49cd261474a7a39522736b5f78b6f049da1c666e447ffea42f4b01e3794f35ba73a69e867c499931422f91afd4319c5c226f209147078129a3dec2e8ccd672a1e1ba1e3f4d6a314d03f019951e86942a6a56d14dbecaf31c11fe485f31954ebcd6395e6e9606cb2062be5e7f28fd2195fdf209461b7f875e7565e20e0aa0b6d285f686877f84b4e4fdbb6a93f76bd5b1845c87323e0d28792544ee5f2bf14127c5a94ecfcae0a5f518bbd807a814a4349a2a21466ca23baf49ee321681c6f226777a87f8e1844bd8f805650c4fad29539f526dcb23766b9e94390b3887705d1c17838ced1193a4116878da699edafb91975585343351a2401a2b93a60fe02ef61cf8e34585eb0b1839324daded72ee4d84359f5a41560dbd9ce6ca7eae2c66f1456f7916e15166d173ce6f6be75a6e728000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400121565947525502ee393598938c3297ca82f722378422765bcb3181d5bcf802650217a997dd84a9e4aa2f35b9ce348bea6f57118523518d130fa8a6163df108a0a21f451a905fbabe60fb42ecdc57914df063112df1584679dcdfdf298ebf501e0300000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030399aa669fee829565b62cdb15934850c04d2928f7b92340942df5f319e0421944c04f82fc0a209cf49561e00746ed85be205eee8483a63d00e0fe7cee88ad0875796b36f095467b620c798f119899f8c6f7948a270242b4b28baa8fc225d47e56472a2645c14d1b2991df25b0a00881c7a5e257bb02a56a7163e403b27693573afca373a3274f1bede11e400e90c657f9a7c15c3ca8da174526afeab759502aad1c8903281feb7500ce3e75d073d6739a7dd9c75dd2e41c52b426535a91337b523d42f499b58eacd750010c30a7eca0101e14360e86f0bf8472b1f9bf204decdb5a7c78f666f6351143f588634bee72933c93f685355972a7742a3160d5b772e3c893c95563797598277fd5933589d980db03c4369cdae99954124ec8a1c6721ecb75fb9882ea4c133d0225a5b1663062719aec9d4e4e3dd607b5f4254334b697d5aed2b66eadf9bf1236e6c24dfc8c9a168ec95de1c90c728e649f8f272ba05265bad14ae06bf8832d65c6e79a60433b8c2b300a7f0049e7e512d69eba0d6f86a7492afa3a4c5a4058afa5d8a9a9b3114f4a02fa811f181df3f5ef221b3f29e6ac11cd35c9630b85681dbb34cf2fc9952450b74e90e6d98b9cb5af2e75da400000228000002240000022028c6910b715037e2ed9751ee99f8309523e47477ecc2c1f166213fe44f7d763a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094ffc5c8a346e710e78d5dbfdb96d294b6f7cfbe16878237d4420c1a6e75e22dc8664f5f6005551c8d7b1e7bb22678e3dfa2a0c51d3dd1f3689fff995016b855ccad1daac6da94b03da9175cd1895be1b3576b08db2d334a59618b42703ca58bf16e89ae0e968d2a356d5412210f9148644acee2ee4adb0b8ae279a51072310a03e2988a3e18529ac5bd203ac35bfd4c72cd708de6ea81272e29dbdb80b8ea0f3f868b9df866cbd4eee9c3127e04ac8278147c474f3747f6445b530300505dc206a8994714c1d189054ec2c7978b99213ed1e38cf3b001063a5958677d5567dc7530290ce4dd0f3712fabab0e19ee28d3646d4191ef86e88042b2773928f5128593e6567c1df5e20c3f26dba114db6cf045b9b87853d6cf6bf51314032a7025a09438bfcbc8fb61dc2c19843aa79e5a12209b5177b6178497cdea69fce35b19cca8884ff482945cf65149351d5449d3b3d89a810c0f4535a48b47da39339973b55806142ccf05ba5bb5d26b2848ecd735f8511b9dc046c70c4f06dc89610ad21683ef18f2ec8b2da0fc44da03c0d5bb368afd588eddbf2097462762cdd36e09f54e89fd7ab5d7d52aee96c207c62e73b9e4d595ed47e62e9a32074060904a98a000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011663e20656831e3d44f3501cc330705702d89302b0852b02851a86de84e4075a021847e19e31dd623da35bf0f8f8510ab119c60f8e9d04b29b5cd078b67efaaea21abe38ff77e8ed0d6c8e20660b302ac3f7c2eba8714d5fd174edf0f9b2ecf0cb0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f529d3788159a81d703fef45cc4de92c1ff2498bb6fabed8e9240f8dbc1ed61cbe5dfb9595f7ef02608882e44f4e180535e277a78f277395a170247797448fa3d3d63a8c46479766e143c119264108e465dca10dfca50fd108290a089250108306af4b1d2faced5de41676daaaa7d4fc8c89b22074a2245963f6d33db82cc73d70a49e70ba3cb7b4aaffa0c5dc77d322b85fb328cdff79eb9238d17e08a53976762be4ba707b6e9f58facd988f20d4e55c41671a96e1b3bdf19c4bc05240ca5e6f21e46809665f7f0ed64d60fe50445293ffd7ee01e8f5256dc2e99e487ad1c35e1533278819b39d0f99ad6c93e213abd9bba3500e76eded0f4106fb98f12c4f5346c40db33886178481c26ae28fa53028406600407da0a348fd4033f55a994376455c3944e78efce3c7fde3850fd89f354af2d8bb6809a9b03f7db52e954851634ff3fed2456ecf3e3901f009da32eb112582a4ea68886e3715656639f4b7a03d6045f6d3919556106c2c32df8366f3dbe95f38515efd25fb699b7e1fd226ee04eec12cd4881a2fcfdd32e7669ad1a29c99914d5a3b865560352cc5b7ca5963044fe907189db4415ce53cf559e65df2e57f5b8397c273fb9516fdfa5faf6480000022800000224000002201ae7eafd60b712759c076cd48c07a3a4357a45d0ea03af97c9aff019d00700d50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ac64d4fc6c5d19a01c5da6e08ee17ebc7afdd66a5828bde01e527705e5bece4a54ea4b01abd00c3c338aa916465e87ab554f2d99eb8116e0bf43ce81c932a9bcb85557b5d658f77974f32ab112a002b7c6316ed7cc8ddd48d5cc6d27dc9e81dcab6de7c296628ec939916a0aee3012f82aa4d40579604848b82f25f277f6d198c5ab6824b4b136a2cf5c8828ec4879b88b05b0e3c9bfdc2c2845d70ad90311cd16f1a68a4160176b12dc5a80699e581a907367278de530cbe0bde00a8b97a1835d676ae38aae0d62fb3655d2e04c6102393de1ace6688a8c88619230b63b3d4f85af31bcfcc588872c57653d4604a14ca56558a5e418933ed75f083723b08d564faa31eb675b0970aca4cc6f8abe72f501ddc3140e2edee35519217d2e83c6fcf7f1414d3f99d993c7527eba531dc0826c5028dbbd265462ea2d12faeffb8f2bcc6ed16a534ec27e95da82ad2ec7bf920e755ef58e59ac78d035837501b88e2f5d4b17b0bd51ddc43718c6adf4b4fe45070d93b3111eb56ad755c6841e7bc84ca2046d3ef1aad27d2ff007c7a33debed4a20f662e2d54362b4ad7ca38b316bdfb2bb960c786628d1fe3c2d04ae32eadca60d3d2c90a472df05b4531f1184fc000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00224b057aabe22af4c0b106d34bac8007e7e80c5588d853bec0a8b4f82f1dd4f72092c2a2284436cee1ebad74f6b2f00fae675ed93ea41cff8a0da6e53f8e5e751021e21e39577ce027123b207db955d42ebe726b36856e64ecaad08db665683b4a90dd0f167293b4b022dac3fd21dc157d673a904993650adbceb6a70ca59d08ad400000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013256c1b16621207e640331a7e577099484121c662a0591c86f0319c09a3c89a0a331c35dc50251b366a486a2a399e5df59f9546a94afb4e59a641db53680647243e3a654fc4ff01d71d345dc03728010b1529c1dbe22e7576b6000611a610c11c9ae78a4a73ba751235127e2fa8d4a781b8b6cd5310cc846a463e0dfeba1490406d35c76217f47b7a3d2e163d97220d6dce1b90db1e5797576d3ba2a273d245422decd6a51476e83fd9d73526748faa08facff5f6a67077e3fe888f7a3ee37f7f66619a1fbaa8d1ac46093a3af3a25483cf3da663448a070b25a2fd66811edfb5935d29a612fe86800032560e52d19e93e60b71ccad63673223f8d403683c1436f3b8017fc3236d6376bdd108d5b75e02d098ffb240cf3aebaa4a0e8560ec376642727d7d3ca95da92f57e809cbd3f38471ba96eb88acc08be90f01542a0cc869302b8f0e43bb52d9129c7db5d9de3349df207000e3884b41d6ffd074faf3cb94d4a06fd933aa3c36bee894ebfdf4c54d6e674eda76af7cf8bf5efa84596d3c3608250d8937ad92ff8073c7f5a52da237f0e4f5a3756a736bea2e7ada9cc7a88c807fbb137ac8e0a0586fbf9da6a4f4bc874bbd666d77fff0edd239f98e14bf00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cc876720da8064183d567ffff5b2a9dd774d02a6d2368f7538949f29e8d5e1a375e3ce2a010d4317230e4a0cb9bf82df5deebfaa0ce50a761cb1f706c4786f819a1989a1bed6c6cae233a9bbfd3e79659904f9bc84be561fd681fb950d6e4dea76061a202e8840b864b5c2a3a3da28f8e805f8bcad3ee88d79ab359f7a9cae27b6e0c5059402a521d7c69b6ffabf4ef7ef915f4d8da8040051d0c7ffdf02c9db653f424986df09890fdcb147b5053df620928c76e1a18c4c2b8054cd7fe113bab231d2400a52d34f91c540de47c5f8f6fe7dd3516cf46964ebf6176556b5b1c4ff05dc10114db30d4b1ab4217728178246e72d284c23cfda78f52b72077ecfa2ddc6c27cb2b50743e88a705f3a1911878bfc1bf4408534bf3c4fe0270375fc7778f5864fbb150bcc0c48971822a849b1b0346069311099b4acd84c38b23a1a4cd920d2311205a629950a800f4efe0bcb7230207da898d45d517df8a234ebd2a265ef7c90c0f87a30692bb77272177ff5f95b1f4460fa158781ff7bce975ebd8cd268936ad7362d938df98532c46ed09d4cd9e0b1df504199e068af27bdde1bb7f1982846b6fdd3e3c13a3f533b07f2bd3008c1ed479fc2a9a656013f1c974c10000022800000224000002201f37ebea50a9a1a065fb73f21c455b85360ac10cd497d0e68c6e0b9206531ff80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004c5d3bde5a03758355b5809dbe78a800455f50f223b6cb6dd398b8644febb3ec7826b32569b12163e1a99cd0b1f06ee6b0da47d7e5d48ed056591d992c69c9835aecafd24073cb273586544ef51ef19ab59cf0576db2a43a6ff12c76ca9491b1aff96997065ef76415d3d41ef57b1d33565b1829fba74d11d646bea00445f4523e77470bdb31f5706e745ec672008f0290e72cb79676d7fabbc9628a2f9130087237c67b143b5d4c87b39e3f7ddf0946aa8434418bddb3358de2b13807ac00cf5482ea87e4e63151cafdf5c10ae19c3ee1672a94419401b52cbdcf8511e7d81c4cebffe78bf886f06a30e0e06ba63018248dd70101aa02426e34cb13356cfcf32ce00ec8b9368b2cfb626def673f63ea9390dd552c91075f703e3220e28b7fb406c7b49c83492b9dd3b728b4c0a7ac0d43ba2807945d94bcad7eaff1de1dc44d96f2d3e5ced664b6c03fc839fffc3bdb3465178b685420c71668c4cb56be03790dd39ff455c0541c86793464161878aee33b5e964918659ac18a250302081313eb4304acad886e8c47c9bf3e4f5ff30da0cb7d27d55bc3780b6178f53783c180c1a57df8dab3df4ec550cb6814f0e17a5cc984f995410f2c829f7a62dc127eb000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010547afe6f4ba5ad5f04c56f299913520bfc69e32e5f4c9743622d916d2a4a5cf021e41f49177c89c897ebb692f402af84d805b90ead6acd7afbd1691c034422305083665902f2a0af998dee47782c55a9a2482f9cb869d145866d1defcf2adfcb50000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b48bca4bc3b3cc69606c25f1d689d7d0ccba8cd6343648c8c88503c2bda612c495cf1ee42d01b1a3bea265fd0b6566737561d7594e4f28c785ad0b36d87522b16cab03856f062f3728f088b2fa5b113d77cc91e532941e4d2c8962b8ae3fa9a2a8adecd154954c3fc5b3d0e4310e4c3cbcbefe2de397b46bbefd8b24e942deeb57e99061ee7f45a3a5b41cdfeff77e1c08d763d54b8d2b1c18437ca3f5e73d9fa9eacba5756a62cca710253e34414397f6a7537f6594bd79385e857606a8c6d109f10004394c99b0901eb75dbc9f2da42dded215e67fa1e1cb326c9251488bcf1eeb04f43e4ee39af35cefa761d8375aa9c8052c818cc9e5b872e47a4839e62602c50b13b8ddf901d316b3630cd7429fa8bb49a06aff5c08510ffe71a03bc477479cd39e3aea5705de6a98a5848e36c84a7f30286372a9a2d7f272c2aa8b0a3ed7ba61684a62fc6e7b5a15271c9cc4239c460b2138dffda6f467514ffb50df5b1e671572c64b2289a38ccd95881a0483eba182535f9ab235db80f09179a831b48384743eebad7d2c399038c5f1758e1736b40b221cab390e276b2f9f77e140c4a2324e6b61fc188e607235d78a7b9fa7ab8f3734b4c1ee792620b806ce4460500000228000002240000022014e0af4b4fca90563fd2c32997f83e5c98ef91dfcb0e7949f53dda5c773550e9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008aed59d7bf7a0b470249cb995828e4df32d62d170b2317102c376726bcdfe5041f22b53a9d701dcd4cef14e08919cf4326f4c41da96659cbf727334d7136b5653035fe0bc677e35f4a140a2df8836777e6f1ab9008a373427324be91673101ede3cdfd64573474943f04a681957f8bba990a2f837ad4aebd5e5bcc2c1b1e94b361ede5a86d0d48f8f76dc388aea225f2c1bb7b3e50243f3a00f749949eba4050ac53f93110862bda78a5e1d5d4f53bdf6826508510b43f876f66e5f7d197b294f08b024bdabdf3848664ee17fbc103b3d18907bf866ca9ece1578f732d20dde285d2f4a04097f3ea13cfa4118d249327f90ff7a6336a4e538e0fcd408b8a17f73fd468d6764d765e4c87f84dd38d3a13261e1a7bfcd1e3aa72ef7271179fe428e4fa0d6b026cdfb0e9a54400398447b2c34380cb812bee83dbbba1d4807bc01b3a9315637e4a65132c37766470eb394da933cddb429a3c4c615acda3ee1f76a46f8cbdf4feea22eab11a6825c2673acfa6938c693fe89f80fcf12b40cd09c78423d58a7865301c73238f65ad3f1cc3e5b56623b4bc466ae39dfce14e20debec496c4e382daf11fd220b2e7873a76465b1106d25793019a7492aa98b568f0a78f000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400120615f33df196503af0837198f0718aaf758fa7094552f1764f62b50002903b3021fb7b15af22058b0ff0f718c02733c8ba6171e7d9e76e0aa686231d02a8a6ef206d4bafda6e95121722552a33c728e261db7b8fef8b1e55b4dffe7d91e5b84c300000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097b80a323ee529acf32a64762f224d1b6711eb99c435a64f1b5ce985da794cb692c2b063439c0402cfc6d7eb6206bd0b36b913f58021fba28b0ba3e70361b960bfe4d83579f89b580f4696584f1e423ad08b852c5b0caa698e691e04b7f22030669ceb057c249e4a1f02c98f213858a5a5a2d11b8d6d1dc071903df661a9ea7a7d5e61bae0ce95e5750f4283e05b6ad958e62a199a5122f4315342ab018bc999e060b2e3184ad5c7ab8edf007c61aac897ddab6af92c8d974e4a1a3fc0b23cf7f536e8f8a04742838660975efedc720a42444632c8eda4c34eedb64ec7e6c9ce6350e96271a0340ba144c7589a0147096460692176251655945f252ae5937ed211428c3389faafcaf2ca8100d5932d637bea8cbc8f34c49d46b0c2db14028cbd5974d22b055941a0e82c264aab8fb013f68b49cd840e8676580a263094c7541e2f1447b1445183ff567fadb4184fb5e7414250307007d1ea1bfc8952cdea67257c9edb175bf2a474ce8df606aea7b46e438d551d757be3330ed8431311e7b3d691afc3b5addb962c0d1da2d982873e86faf283f95e6d4364218842ef7a69a297d8a6c157ab16167a0600ad21dcb93df473ef1848076c8211a87438200fb78e7f0000022800000224000002202f75eb5298b95cd8edd51e644823ac35bf57cc9f8addac544332310fa551af4900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a70fd69f268efee7e4e245654f8c2755962fb7e7d381d688c3d74c646ce11621e6d2acc4a6f94441f0d35dc342208c456f619f9b82c6f1cb855ea590e7429ba1dad94ab3058738807e4758a23c72bd90b0f1e86bbd88af0d4a3e22da0f81ffa3f33d85f1547795eb5c0c5a12f49dd58c36a7a122bb4205f9ef012a60335b477ad216063b07bddb265350c687fecac10193d4fa1db43ab511953014d49d5be6296262b4a4ce2f67cbf50a224469810729ea71278914ec5b83842099040ab4f9d3123d33a9c2d3470e17432f951f89780b7392560b5264cb62ab66437e111f432f2873f0fd6a26357f71497f2908ea25421b2db6687271190f8412671c6d52a6d7c251d26179bc2bb193371404ea25817b1caa281180120dbef35596c24334526bdef9d6cb26d5a7c4f945f1dccbd1f7831c649178f69ac4ab8012461a3ea1caef75376d96a9805443c504a4e7f312462b7080f11c79f7501e40bc6cafbba6ec1ef067c5d670a1e0f475b818dc58022b35f11ff773b89fdd308ee4a69c36687fe7f7cb9dda6fd6c6be775d0d8b1ac3fd649a5178b34af61afe0f3ed192e41d4d8b3bb3ff53ec670ed9b4a8f5c89184b8a4a79f6d7766b82228760125eec43e19fd000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001060869b006c878ef56f7dcb8a6b64648c7bf10a209f21588f485aaa8469db140021fdcf0ea24dd7680e1cab3be2229c9c838f1e2a3e5ca5bef0e0013b5806e163a1d78a246876c6e538a70c09eb0b6ddec07e7bf1f3c485225566fed7f52e247030000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000567ad7dc2b3637edac4d0c94033a903b5cbcb9f9551164720ca00b82a78ddc1590005cbcd6e378d0ff2dd21c76cf08005ac0963c5aafb5e00c77a1e9258c688b51bbff3bc0cd5fc03462f726ce0982e7a69be44f7a7f2e6be0bfb7daf3d1f06edb1b94eb6ac03b27b05ef9deae801cd404cc93b8e93f099b4123f1d9652bbbf5f93a31914882c7f7182f79bda554d700dba5b33a78f373d87ba534b29b74d638c00b2edf3406d3f9303bd89eefbda261b6d627f2a8c04f7b3f2e4616c33baa086212ba016cae770cb5c5018ad6cbbd4a83a523814d78f8d4c231107ec6f1e801dd38aaf8cbe7a7b3f9cbe9fca79bb492971ed57b720226c99a226a4f55e11454f9f32dd05c2a063ed504eefa436d00e85829e0353fcd19a80022a048ff04aa0d126e463b8a80533454d3693c065743cbf35aa848571e3b364a7f3491d8dc93916ebffc99c1aa7a841ab9cb70731445dcf81af57db211d7ce53a087f03e2c05dcacea9f03829fdd87fcba2e49e68474558982ad5dcf5a58d8501e71a1278243afce8b70d1cef7dadf45bad2aa0e5b944dcdfd74a1d6b8612fe239ad1cfa8e2ad92bcfa9263acfc1dd0b8b2bae15e458c73c7a24f552e7631ab07bef316190c000000022800000224000002202e82064b5f4393c6c95a1295873af7196b2eba16bb21d01d90091afbfa02791e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024be74578651c034665d52390f9aed963cc204512d47ebd58fcb3210b8d2de20bc83b9fa53c055b90b4326da9a2d956528224cf1d590c9fa89bf39b9bc6577798316406b02279f2d785cfca24279c1e162b71564c6ef9cd9a9a0022b037e6ba25c089cf61525831fdd70434f5040efa8221eec30a788189c8a0c2382fa91f077200e57c36aae98f590646656145886acdc3f95ced7697dd897c8be2dd35209dd37bf0abbeaa6ea178d5847aec52f39eedd0cfb370e2345ebd26e1a9a996d6028ed6fac83b49e0d7d26889a9c631473ba9a3838e460988aa46b328417838c752b229c17551c34784d06550714a1362711b048c30cb25fb6bb1f175967fe3b443976a3d7a8309221b23c73b8ddda933ef361f49d9021f92768eea48104819f1beed173123e6adb261ecef1e60980059c27ccb98286a272f611b272509f3a4d871e531d85f7d67e357e84280d8e5267beff370726d218c75d20098272e6a7644e304349ed3c038d01c96fc1e808168c0a15da7399505201b173dd5299ab4a16fc88baa713ba35f03dff46064c93b5d853abbc629caee9972deeb3adc80219a7e0684d36181ca68532df7ce785395bf28e39a1538f865c5c8ab1367b4a6109bd61c4000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0021e343f6291f7864431ac81b6280497467c8bbf9d8f523b39338efac200824ea20b55cf774e677e100d188f330a6d2492871939505e1c070ab36654fa032ba00a0221a1538911a3bcf4e24f40046382645af93464b061a4f7c72522910b28099d1a1a2ff80e17a538c2da11259f97d7f94d240d95ba7793dd2be02d064a4636aa1b00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000440443a99e57862b07191a8a9d3b0ea3d2ed9d61abb44916e4bc220efd5ef5f1a0f670f2015cbf19c59a1fb5ae037eaf9104eeb5037d7251dcbda8d181bfae625f201ebffd9d7fe1e8319ef8b8f4ed9f6355fa68706937984f19fdb8e553d2c101dcb3292952aceb149addef43bafb47ff8d7ae4208d155f8356259d78f825a187a88cef1268fbb9fec29563ed16fc3dde1462ec0320b621a9578671d5a12ea3f36dae999bed170fcd48f23f5170c1abca7174ef49803c87044908fe063b3bf05f1b9051c5fc27d6a99af9923b566aa57a250e20aca352a929467c87471f109230448255c514a907a54bb2af22af213ec011cd722247a247243905f35744a83f0dc67c918a2a2a3e72a64fea538e72c55c3f73631fe27f95b8fc6e329cb9b4bc4eeadd9bb5d1b2fa3473c0122b71e4861417ceabe3f498eea5b55fd839f4f8752dba554c2f40557f7c376bf0a550ac0b5c3ce8fc6eb850f347eead96d9ad6f361b1a645be2b09f68bba77260760ac55bcea7b66d3ea0996adfea1713a97c249ab4cc9197f5538d3a3ee26ec163ce06af597fd77c71d8db5dd27ec17cea292b09deabceb2f794cc7cbe82b07886df80fd0b0a8b653c252cf1f9292b81694d280000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000971a4ba97ff16c2b06d54f53a546761b69ba1ec4b0324a687a4c5046fe444f7e33eddf83a165053dd3cc1606d713eeeb9d6755069ce59ca9748649f85745c108ba476f376502f30663a0f9d496aa45ec87a688477fb25b590517e159ef83461f7ba9a53c45ece86c56eca620f9be7fdfb48d971e902c1c16d7c340addd12e69459c553fc8775edd086c28fada4ec02dc36d003607640fcca75cf44bdf51f9bfd3d747b7e513858ecae018ae3e02404954ec4e16faaed976819953dc331b8bc5db525219ca9fe8b7be98e2329a9c5f9be6403d56ddb92d305059bbdc3dd242e2a1c0f85b2143a5fd6ac927faadc21c7d6fa5836a82df73d64b5adcfb6b3062454e96249f4765a12b1c8a65da18e4bf9e95b3b6136ffeaf6cdf328893b4cfe3db914b711651f5203e1b01c27376e2c90ef4bd477c3442c001a238f50bf6924f559a44ca219ebfc512737398e0522a9a3eddd0daa7bd609745904b32a09e768f874b647cf2a3c75e4c917d75e2a820362b8e72b9c92fc2152641eade41e48f268a708c513b06d4e99fc06361d2719b3fc19b3a24451a8e587b782f47592af04a5429912818e69c747818de88722cce9aafbadb2f2f89baae3f127a3688e32a94df20000022800000224000002202cc0cf75c7b87084f1da9e32698f6a12a5243093d4cd2b2434e4c1004af7fb940000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023b4fbd2d89eba1fb90fd7227be3b0c8cabf91e07fe3723d63e2f16cb4a77afa9969a84850a5b88da1657c22da31276aea504fb4559c5d574bfc7fc08871c5fd067a893ff314f42a8059dc39f065ab65b3fcda6d5a0354df5e34fe8a3ad51bd753ab508f1ad9ead1b5fa11f6796a6cf3caeb9d7e23fb5cf97593df2d1174a1e879b6fcbd0006cc7f9f71337cdfde39ac42d63cb90b09c07f87af0b37eb7400486fe019dd7fc39e3c2af74fe72708305ad1ea2ff10b3a7ad50a4c736cdd4b50a1ea854142a698bd3ac5a003d5753420751d8d3d927b64cc8d25b06c331075cd66a2286ac2049ecb41ee2aeaf57aa2f0d6326482494ccf708f8729d4fcb55e9dadc861ce8a10ccb073408278cdb7da92ff876f8a7db3fa31e7cbe5423edcc2563327dcbc48fdedfb1b8e2f73d97fce615fb865b783a850216688b8995a902cd76758de8ac678d00b881ccc45660e7de5b776dec516e591771425b8aa344d8c5819a3a2faeb825a35a82c270fdc24e133b75ad66667ddace802b129f11076805f7d520a56f19ed57f121798badb0d30f4c079d15602a390192b9dcb6a495d39f3ea218f3737dc640d46af847ce00dd13569d7822513166c4b7008cf2c1f8ff47687000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00207487932fd6883df99eaee1098c6bda89236db0f4e56ca460d75f0847219e677258e1d89ccaea1019e2da7135fc345a38883f4113e7a94d767f860bdd3a9cdd90222bbae54bb0b7554c71d504d48ca26a8147c9072481de5f85c2a9bf34fd2881d056643e5551408750ade5b40aa7cc84e2b2f76e95fd4bcdea8ffa4269c32cf3000000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081ad9cf6bda55e551f6875c855a10c85029aeef0e2b0ce8b561deb9d62da0acda1e295243bf3c4878a72b92d1046adee8f34a6cb4b68a7f9b10c266712527e52703dba084555892a42fdc4b6eab293d92d1d7592f9bc41f18d309b2778438fb37cec49f14df9c4501a6a1414b501419de2b2ef7d4ebc90622df233339a0997b2dc2c17e36496643c8c581ec84f1c957765f521e93c2bfa120a6b06b32f51e9e119b1f4d3a8f42c33f95c5212d5f9c3061e6bd79177c9fd0088dd4239a1fceef5800c7820026a4a7e3800ba7dcbaa70a833e3124c75be219211f2a3b7f168ef7d075f7eef588f8548dda64463747813d53ac0b0927f38eebaf94d5c47418c437c0678715b44804a60b462f0a44a5c5ae6db28770763aa7b93117396f1c44ae6d46914f0005b9d4db241e640754ec216c56cfe5bdbddbbcbd1b67d5bb446220ee0b41187ef233a98f2b84389110b32c4aab60b7f6957e8f2ae4b1b2a543bf95ff7000415058cd40765517827dad6aa3b9731ab3222ab6d9ff6fb15075e98f9b112dd4130542a2f9fc6acc5ba89c3ee1124ebd6c602bc0dd6f40bce1659495c9c625f391ebd6c688eed214629d9b7e07dc14ad3b47e4d32ff6e96b8486257cea68f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302d91d84d67064fc473bfeda84eca32217980d4836c424fd2a5a99ed023e60d94a262a6b21e1b5938bcefb8c9dda31f2917037fd2ebb9f53841e0170c132b6e28a664f917fba05a8e95fd5df2bc424daaf0bfad186869552717596af2721ccf27cd5e265983f999fac3476b1b2d2f472acd22dad35b2a3e450e793523acb84a9722e18f289909c147349bf5b4909f8f01f4eeca839d853303f88dba8ee54bb4d1d35c183f97f0c7aa0e66dcc9d0b616cce38a9750f42e3ae73a639322b53db23531e8a53eec22498e7a614bb67b807727b374a2b3fa0adcb5eec5d27995ee13dfbd01d6305e513e4ce3328c941dcb5e72caa3dcbd7c9608d85ea0f537311869d715dad725d2b41f3dcdf55e2dde43d9bf63a14086d2b98b4d8de5253cd1efdfb86e43ccff835846b9f2fc3329b9c2444c689b8034668568148a4b30e02294c851ee66ab1f78c951d1eeafccdf15d430ea1cc3232f7e73339fae13434176a4e10f23bcaa6f145c99dc62e143bd627141599a29a9fe02d9ac32adc54639f227d57016417449dbdba91bfb187efc3a47f2364604aed5cd4b0cc3ac97efb1db3e4743a3041791f959ec47732fa87fa009052f0d58a6bec7ee949c681e99cab7390a00000228000002240000022006075bc1ad1861d7388afc906f09c8d22d1c5d90fd9fbc85b993d2c77e99d4e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013419e5b12ae4f9afb34f40099317207a9dc9dfd5a1b4dbe6f251b7d11206d07fec78171dfc9861659ea37631fff7365e692306d21df77c79203be184b02d751065616c5568492c72a43a69904c480613223c538b04df97473b4367eb0ba7178280febf03deebecf1e880e236732081a0b92e28dc6dfebc0b080e7cebe671fca211d1eda18c24e103f409cc0424fd53779ebf34ae27459f4fb78324b7e2514d8a5474098a1c6b03f8d67bc07ed4e5a7be2c91bdd600c7454bd4e50873bbad4cc1e6eec04691c6472f28014f57c3cddb8709b0f11b3242e94f99ccbe66eea989334c409c66784f136551eed7f75d263617033ade5c7d880130dbf951acc7954a02f25185dfeb96af98ea91c6cda9cb44045e4d27350d9cbdfaea5f1d200956b9c70c915e863106c96f67b1ba2a51ddd95b30862204135f6222053a4442261246398936658210a8f1fa62db812250b61f8f1cdd4736b36207a84e58710b3d3c9dd177356dd960e6e5e9849caf9395452f60aed7d8f03ebf1e1973dcdb31e896c05afa759c54009a55a82c569cbb5eada7544f9de45290dd6ca7981d72b8f2d1ebe55500acf55aafc6612fed77ad0a25a836f5edcea6648a196c7bb590fe0ccdfdc000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400103f457e07a06c807cddd0c5e6c0abd105a6b0d9936ba0f2dab32f2ef25572d3a0224ab60a3733a51ce8e2158d85cae2d040daaaf5220241a7d43dd9699055142ca11a2377b6ef6ea29e80da44bda7d0782166372cd6743888ff6b86589784f0271000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000076bf40e96a1ce15c7c099e1d882f4e4654b9027882538102b346db8c684d72b45524ab9e2517345d89080d71b969c9cc65f2f1a367176030e44309bdf64712c8fb726fd405d441c4ba75c9fba8f617e321d1458935102c3d9271db89abd48624fd8920090c908cc489def95f575c4be159507d98651b33628b9683aca9652f8e1b9089d7264e3fdd5577ea2a44bcdc262a430bbf1994ecaedc87a0036a75e234002d6d6fdef7be35d873f32e2367902fd3c6b8732946a852e4242d99d2c772fa735bdea7093f1ca53ed9f005e4ccb4e88881a7f929f30d08fed6380b2528d9d8125a9bb4d9d43ed8759d8fcd94bcbf4da35198b343b4c20a110b28e1a34e398bffec5c7aeac3f1fe374bbae6005422d0af290bdf1a72eb984548dae4841a794675150cdca974c6d4e822dafcca97619cc9a7e5f398525ef5f5f999e876300d725ddd2bf74e96bda6462f3eb2a57fc0aa7ba259a0154abbe529f8aa98336d236f1fa8a9e34866991a6ea5bbf31575030eaa29663958a260f00899d66346a20b2277c68bb56cbf47ffe5d060acae7a9150884cd028ff7747b99daaa33ee9df286a5c1a7c2439911e629b54fa4dacffb935c2c0ec2df73ce629fd2f45ec89f76000000022800000224000002202c86fc922b0223bceb518c2d5d3c7d2eb642e94ce1cbf571170b51171bcafeff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e19fdb994d692b581b5270ab3b3bc9c7f47d436140b24182598fc8729c167d7523a61b409bddfe03380d213509cf3715ea4aa54751abb59358c3948de090dfddc8481c2a627f17cf275e1c10cdca5c40fb7d93fa47f54f0c281934e852ad73d0589621c5d8b28108f86fc1f503b8c564cb5ce4b590a5df88db34e78ba13fc18b1ae43ff810b8443a85d7ef78f41c1c1585fd53ce610813113f1ac82ba3df6b9772f7394ca67dbbfa7868fe99e91ae23853984a2d858fab6a504bc9ddf69d6389c9e391bb407b2418762b4f0c9f1d6f936185ff670dc28cf2631e4d97fafd8efcd80135d9e88bacb33ec501995828af5d152fdb46453c280044e6c5ab39ae61d77f6cee4ce925ca27ffbaa531c2e49b4dbf37bb97c4dc835f7a441ad88b8b513180847dc73903858860a45adeb6f6de2ee06228efdc3cbbbc7add5e58e89095cb5d3e4caf8a388a23f89dc08620a6a7ad3b2541a10508fb3055eedc45e73e37f82d1dc60f694e82802b5a656b3e4398b42510bae99b389fffd452f516eb8e603325a10fa511b2774c7077a295d9a7622616a81ab2a02ca32d4707769dabd7e1bbb50d57f1fe4d7618b5c30dc2060f3246c4ef71f09ce0ab64361e6d5b3555a3c000000040000000000000000000000000000000000000000000000000000000000000000000bec47b002242e4c5f86b4de8c30bf91a9cb712d008c210ff67555efa011f4735c42ef79e9151b1c62487136922a9422f1ad809ef7842081758264573b356b1d8fa1f2f531022553db05e5212e76ac7404d626955397ab10f52bf57dc8fddf6ea6472e4b7df23055d563bf2563ad9bc8f608cba6c3f6106a2eb4221b2287a20d246b06157edf00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c00000408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022ace119d45cc48426f9878e154e981ae20bb9bc89527ee42fddacac0a089e1fb2f0a2d0e151bdfa107d5f5c776040e5eeca1ecabc1eb1624c0f0a6a72deab8b0613ebd40db32f378c27a317c82220d4ef0e9a7db39a650c6be9b35fda4fa1c04ae3044be56779c95c240599621c3d90df7effdf022b8eae32a88b1800bfc9bfdb9d7f5508ca48764d76af6607949cf3d572afd842679eed39856dd6e5877ded72d816541fb9f7939bee9d972a8b84748230c5c0e9aea3c06f7c158a462c395557e8b2724ae55e99d279a2b1d8049a0ea8ad7d9e37ca812ff3e35b33a4817a4a025fb4367caebae0778d25cecbe166e3c6e9328b0322596311948c5b0350f9ae0bb01312280e977e274a104b25a319fc538f10ff5a18efa44364c4cf3916293967dd3e1f759eaeb1612c601c3fb8f5354d3f88b63772f6735209413a4cacdc57defba9315ccc6a7c773b996a3c32b55ccfd12f3e20c72cb1b45de206a2f77d8d646c4e3b6b44e6f4e870e5da0f97acabe6f4653693e4f4715470b4bc3998504f47c25004f279829743d11656b77391a79d39ac40ab2f3412f1b5e4a52047dcf734d71ecc0efa7336c4e0aac6e9894c9e08c885053b8f59b7647c6a4b4d9794710000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a52d9546dc6f3065d94da305ff47891e6fc17b5f80e2270f92b999611f4ac4808d3540ad41a059f2a51dc6ff3b03cbda69f49da0e5adbf9c18ad7e53ab3822c7357afba4b4db3c07bc4ea9c4a5a6ff004f3339441d3d685f3b58053e0126540d85f8309f6991ac85d579f5ef48df255910d138d0e2af7f881f721e1628e5077f45bbdb8584c62a90bd24ec183f1f457c7df0f3313552ecacf9e83366e1e35dc1cbf01d0356d098d6be8a52617ba20e5a8e42d74e92771112cef950cd3d2dfa5054690b06a2b22be04afbde10eaf70e81b7ce0dc04937b8e51a4977d43faa7a5b55a1269f335d2daf1d26dc900a27c6f9bc7c00b92b3ab6b74b23b81af4e3f30f48f0038f52a687f8029a505b965efbbf256da69ed11f98748390db55753dc25001adea477f2115a3901db16385987b17040964eb316630dea327164c2c1fad4b720ef47820ac09381c06f8380618a055b4dffd3cc2d72e49228597f25642b192dfc7153080f433f1315de92fc7802fc2c8bc2c018a0a90f6b79e3cba3d9950b45ad4b9771b046df504ccebb52b35bcd83d368a1cbdd053df17e9ca7907f60ac82d36773ba3b51d90b781898444fa8f504f997c2b78203711a0f76a8b43093a8100000228000002240000022024c78d4ad28f18643e1b833ba0b06a58ee014307a7ae1fe228f841b827d87e9900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000275caa5a8d2fc1d10d823f67c95e42f4455154b82f033d2fe60bba0b0c25c31d66dbdb31dffc3097ac081909883574c7bac8d80f1ee4e855db0119c4a5bbc04a3b51f1ff545b81bb57d933fbdff9d9e5d9e0743a939876066172884614b12f07264602a7b387de2c749d2f113aa72492027abd2c814ee7ffcd4b76eb8772d7839441c5bf683c0fb043189869ed6945cf95b4c115105bdcddca3194d24500da519ff487a94530ef9b2cc6ebaf757396c884c078d87afb7a6649e8acb2c20c26661a7b1a10759f45909d0f5f8153cbeb06565e241332f71e8deb804ddc64576a9b50d89205b2c6dfb1995627b117d5c098f0f4c35cc13728794e9839ef1ab83ef4ce42d60405c5fa2b0ec5ca67583790fd75bfa22a63250e0d6c1057b45942a0cebe1f497bfa221e46fc534979c5fa9e0b60702f5e1d69ba70a14d282e8c152f38a798431f5bb2c137b3376b7ac4483ee47d361f2329d607ce39988880a4ad150afce556e68e078860c01db31617554a28b2094465d820bd1d3640668897f2fef0c1c428186fd57bc11e65b8cae332dc51cfad8c562f3304023108ee048ed052026a57a863db102b608a48f78282f2adcf12bc6ee1a7792a1eb7f7fa920abeb345000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010418a9eed2f820e20093e27aa334a90d805db103e280e67bf847a9697beba072022581cc24669874dacaca54d532f6379928e51f89d89a7e562cf7b7ee5b66fe7a129f098d8c1828be4e854d00aa3bd6abe58538e35fc5be1a3f0030766dfc768a0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d382cf77492ee5a62f0df65b6618d0a79d072dc46b36b69aaa688172af56226065aa443ec9b5dcfda13d8192df00e1aa1136a8beb1466b2ed33b06a05eebf57dcd7ed7ab9b3854d2f3d6d09e03c3b0d0fed86745823041453ba61efd98d5d693e8aa38eb530523559b1de0eb1b9102dd4e7e57aee5f8a08621cef6e7112e09b43ff4f14ba25e92ae3ccbb3cc3aecee5ba23e1e2f1d339165445eb413b04ed7cdd27ad1a15304493c7b73d20d7ea2fb47316900d39caf58a26e80c62589c181afe2aff3244ca2890438925a199c1c1de5202874976460a5119abd7cd625c086e2c6f0802e1ce9e067af04d1b5a03fa003ec25871ad00e708f105f165ecde4bb9f4ceea043abba57bd2f8f2527892090289f5c83de98d4800e8f4e86ef5342da61dd829db94823d8589716f660dda1ad126b965018fcc391f6b6b220c00610072a7c2c271ebd276990edf7bb91298948d7712819b97b3d4e2d91843cfd403f9c3f2defc1ea6d9396def9eccfb251eead86952efc94194cfa7f8b99bf07ba5e0223531c1d6a59dd4fd4811e7ef4fc177172cb92e6923c63a7f9834ea6f88526f3a55201cb099d8fa731a9184c2a2d847fd0ce5aab60641acf106b42b63cd02ab3900000228000002240000022003cb2f4aaa207ccea72a047583d0fea3abbfcf7e78def17b2cc65e8c474b9e8b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049ce3434304dd8c84983cc191d6a5aaeadd1b4117eac3739c1bd2d4ef912c6a59614b725478548723d0801af4cdeef21f01ecb5110373049eddd5454435fbb56d4ddf62ef14130dafd535b44151a215c7e99fefd2312e4ae0da34f0bbf56a0dfe302b18b8b9ab8f69e2d46cb4006a78d3dbd6a887ef0867308593e4fd34025f0568ed175c2d217d9869a21bab983748f6cc2891840afa6335fff267d9c204a08cce9f4a8c25874a66595402c4f5a29c7710be2493cd572e481cc2199dcb47499541a0ab3791c6cd99051edab716eaa2f97fcdbbd36ddba7a16ece1942a3e0c01f771d4b6ea90abd3089acc5ebd6291903ee6965e72dd51160294848dbefa2c64a8086390228cf960c8dce6dc879a413e29f00dae382981204c8e028f582387425e59364ce35de41a660cc68810621f756534f269725fd860d9c39a000940dd849add203d0340cd8bddca61c6d2c9f6fdc2c2924d328b7fc452bf5730c71322d1a5ed2b47dd90f1f8fed4174e80714d034deb5bd74d212e3ba35e543626e1f3851ef4ac3113d7b92ed00392225beea55c9d0a2fa525cb12069b5e7f530fa84cbf55951360eaaf5bfa98a5f5141981604bbefc358064615a0183259b91556def2000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012454accfa3e91205493af3bb36ae7200b1d16feaa1b569f443c8381216fa67a1022737522218bc7b7f93a77a11333616a767893b3536ec392472fe6b9f18e18f5a20d0e8a54cea8c61153737181f031a5ea347de99025a7192069d590ed17409a00000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c80ab37bb4755a91ac07185f4f281416ea963a59687194dd581110c089989775bd1b99bf0641d662da3cb2b148ca28251ca72253c894a4ea9ed7f16e46ea6ea2d59adaed974a036736bd8f0f059f8d303d703e1fba2ef8b5a97a116ba69f7eb16a03499d66519bc806eb727bc4ed1839fb18ca2cc3a250d8ed011fdb91b125eb491b669f82ad8bab007e6d3915f316b2a6f11d640cdc92c96fa898c4764cc2408277c4c3a9620010cacd4d11faa2b196a0a0bad420578eb8eb5f360ea4b0fab3e9ee6064fbbef8af807179d989a5f1585def4aa33398535d11fb5bc3d6d220bd81eeba9315ce510f759f5aacec15f99d8d52525d689bcd18e092c80d6bb3cc1e7c36fe8d001218157ce9e94699b88b4ce8f167cc185350ef26dca9c222744269aac59e61a2d6b04dd2d8d850662a6792a7bfcdd263e84558c3da9e0fe4955d0065922648fdb3465caec7a120ab92c062f9e1fa909cebe6e22e7dc2c583da7fa23772de7aae2fd1c12c41267c0049fa30fd49c039b83f56f597d941c69a7aef80d57e853229f57f6bfdae8bda92919a01fb4231a218dbb765c5122a6cc760eab370e03764b70c671ca5dab095297a9af7d2747ee33921f849e17efb8d5c82f6900000228000002240000022017ab3ba36581714c507798e495bfe185cd8fc6b8d0f3a4676440ad17d2fe3b8f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021a978fd12f598823ba457e73bac9a1641e80711494f79c533e7a1eabff032004dc0aabfe1969e5b4b61f557bd822d89bc42752712cbfb3725c34edfde6a5b05b7f8e69fd321f63bafffa49002dd29de1e3012f75f17211093a371ac8e2cfb2b168178a712cc474399370b252d2402c182fd0322cbfd2372da3593f0330fde63702538e75fc9afee7a8c2795f0ae70ccd08ace1937d798dec36531a1d1b750877fad44912e63749882e04fa86f67f3823e18509696a307407888b5d8ffac6d009526d0b1ec731e49fcb7aec4b17b90a03f4719dacc3f1d483fe8a81ae0c616c224839899ef4e263d296047d2c52116496253b67cacb3337ad0607303bb692c6f76536f1a47e4e8083d10439fdd09b189a0a499328b85d4494e9a9e34b47b9271b1bd10fd4bc5fbbef82b912eff69baf984e509758c205d2d8b168440273531d3dc5c5ceb28547b0c7aacbf16035eafafd07f18c5131187ab1a4f1fbc150bba3f2732007b0010bf86466d3a4f098ada20a1c174283f9aeea1a6403afd919b581f115e77a1069899264cecb6ed488a1db5c2c527d1a9cd771b698bd3064111bc37a581197b3b2e30ebadc6303aed1c947e49be94ee9dd7357130df4b3f7bb03252000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011d517acea531018cda8ae9ee5e70488c562c6363c085f4c26165054f5230df4502278f8f62e42a8d61558241b11734280915b46769465999b0898e23a0d2b33ed52a3d76fe9936e3704c4a56b73da1cc6aabaec7bf9220c7b75113fce202163d2e000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a258c512d057e1643f2fb8253cb1f8ecc245ab54a425a37bf8c519f2102af1d03584e0f27c08a8fbd128f75e7144c02c26ce46259240b8c59efbb26ca53fe211bc19c85b8700b458efe21b84b02634840990c17c62fa8cad97a4998117f38b0f21981dcb883e7cb12a4382fe4fed3a859bcf52f2d9555f97515c60fc6633455f5dd92a10820042e093c605916b279f725adf1d40b0616dd6c6bac269fef619762bfa61c7bc40c78adde09ce3ef262a2d7663c61701c5fdb896c50ce0427465edb54dfce6cfdc2a84425ba5679a962aa58a365b7b6c0a505de5d21bbe37303e61fdc394517a2a0cafe84cacfbbad55607bbbded57b58502f43f4c8ba8a1cd33265f90b159fca79aae8c891f01d32c654a59404ffa9961ddaefe836ca8997715c194c3fee3e70fa87c430e4e18074a68c08eb67ca7273cc012dfd7318bec42f972ae82e12476a988c760d10a065019203aaef25257f614eebc3c7f26b2cfbae49adc2a079b2e5b3616e1caf130b4c6ee7abdfe68a5ce2c001610620566fe694f13fdf44eaf29d971ccde6c814e4053881ca85e93971c512857fb8bfba14d5d14b0642c8e3c8b78f09761fe4751c3f468a36a3f5b2bf860307c3085c8b5a27e10280000022800000224000002202a54fc46e3f90faa85d54897e167a8729977e922b1bde1427b4cb0b6c5c49352000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d933e3fdd8833361d8d8bf7fe58f619c275bd7ebe8d4b633e1c6aa244f4f9e2b5ff73d65b55529c1051c8d15fdb3120d304082589d2895a976d07e5cb4392f72134bd7d5070d6a06b84d665fc4feb22c221241e72610b0f748177f75add7e5f6153233878d263fa939da7cd58f5bdbed0484e7f7dce73892404e24ca94aae09d4922750c159b124b60e993e8d210319764889a2bc7699b9995551c4befc55064d5d27f81c5d54378ad0e0d06b39b8a7dfc3fbfbcde7ea1d636918ce209542144aa92c322150b9e05719d241ea98797bec49115861480899b20b9b2766a35c7fedf1519e392ead1fc0e391a8ac87e559aa88ab1d74491f9bf5bf782acba82074e3505b6214ed60ba88199725491ec3fd9cc627ac81ec69e50889a3a7d4ae3aa385f49ced5cb7b624ed422fef27d4545e2967b5c4efd23ce417ff6fadd79a0d22e721885e350c74f4b9069d917ecacdb4273e3228715260c13966f8038c86fa8e56986103c5f0614e2f6bfb63399ab39439de090a6034da57a685a1d494e1e9fd833e962b90ebeda54cc7536510baeffdb61166eb53421fb3d79f77ff42c7a6dee4b67d8507070dd3aee134d893e465adcf7486308e2d374beaad090fcf59c0a1000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011e55becdc42fa6798dd8b4175ac16d89a7b525c5b78394de97e347f0f48df14a02297ae7615ffaf30790f6e0b76c8499ffc0fb75635cfe1c3e8f214b2acdd77b05195c573e3ef0da4e0e757ba123270a62ca5ac1a8970fa26cd7f826cea1cabc190000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a407fcd4123e4669ec37fc4ec24a605807411e554acae34f5c1bd1b505e24e1495899dd8c75e998a4f0d893446ffbdb69d8df372534cbfca6499eb709f290fecaf2cac8266b7d5e8be7a8cce867b7355df71e5a0c0e1bd8b8aa99fed0ae5b428208f07c47347a98f326643ccf5ccb73ae0fde7e4a3e03c948a4dc7346ea74ac714b2f87d10a4a45f696222fef88a84ce500d8fe20c7073e563b95f3c0b440603ecd59d6b37da983e6705b5336f09997a31f677e0dfb8cd8be6371a43a45c5169037954a6c39ab488fc68d2e30cadd373f2c4de3df74761f0a6ad2e2e3327d55db7a90f075ea791f792dc7e9f2ba0ee9f54e319cf35ea595df268f1a9935965bca6e0ee6022e842063f004e1ebe8775dba83de7f65625c1af62f75562882a3794c440fc0b9cddb262575e706ceddd77dfdd307c03ebb84ce4357cb16ffe13d15a48191d6506979857de67946a959e9c644acfbbf072be666d43e17cc174c3c41b04eba3cf687586a2ab024e7937de0a995f297dce66a27a02045f803ff1462e45ce074faaa7e7c8f7a59be2cfd7d7b094673351e365cc97c030413d73faabb0f30f21b701bbb6948c3fc782273f783f66b64c323af1787ded5039a41e5536c2700000228000002240000022000e6587ec3ba837692368c89735b155490398a894ab78fc3579ad4b3ea8634ae0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a185cc9227aa0effb5fa208771503731f4bf52849040d7adaf8955973334d026e21c68f666da21dcc6111ed6ec2ae25bb7571a29c9c65a786f251e8f8f98a8951d2b402b43176edb94a28b61e1437d251dce19af69b118762b9dd6ec5069a166373b9f67f542c6d402ae9b341ef923130c631c07b4a213753f3436797f628cb7a7b305b049fdf8c47106f8f7dc11b899abf7f7f65b497b8450960392a87ab471c3ef8340436b2bcea4ba03ef70106001c571793d37d8623ee8d6af6148b7f0e127cbaf4432b9b317cca0411c1b52de9f455e986e58e8fb1dd0209c575beae474906bbae27ce80292aef2cf96d4d63053cb753b92f58b6c2b687e61823ccc47c402b7202a9cecd2c5d413daa048fc0db5d5e0938c91c2dd84d6ea03694f774abd4da4e17cc1fb7d41717f0abf5455943971f91546a9a3efcda3765fb6125c703c47bef24d903d1fe9c154c211cd1c281efbfa785d020691e3fb0fb3f2196066adbf1b52e5585bdef623e641b875a918ea244ca5ed0f2ac6dffda6466857c025e2ab744031ce4b26a6b5ca85267333fec75d45e4d5736ad2d4dbff0ae5e2dbff571319bbd2530c6bd8e515657351400430e949fa7f2aad2948df54b7155bb107000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400122549a79577e661fe05d9e6e75eea1eb7debd9c80c61dbb621d9b65927f12536022a6247fd8758a5a3075f00ab9b1113018594860d4276cdef7668632a1620f98f12e2b37762a3c8946f112030a146a34874aa3fad955b31caf13573e19a0060b4000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000299ddb09e239bbd598bbbcd0d2064ff03e6e395c132a03e4a5ad611482650bee5a7cf4fb33ac588fa102555effb2c66777f2c5114b6c32eabf8c3ef20a090d63f709fef04614a944ee10cb5d863471596f0537e95e001f8c0cc767381180aae2fc7569486293c07b4d3febe44ca558789cb45a938599ceadcea9be9e9efb226641ddcc81ac85d71fe61a2aabb79123a9970df145a86900d9d546bac285b6e2b3c76332d1f21d20861d13e85b4348f66f2b4ac50f2415d5b6a97cad266402918fdb52316118632c1676b36a59e363d70ed57172aabf8ca5fedbbb0f37c186f20a042b299cdcb206f53741af1315f308c61d45b69e23d7c099922ad84555e7696715227456768964f20de43600848b3d1ec785454cf300addd1c93cb73e6d015aaa29ca535fab4401b77be6c668e7b6ef5047abb28ec056009c80063b66c94baeeb511ec52d6414412af36221dc8a7e62b86412708768a5f2b73cde7b122a273c91a0264848869b17ff3c2683041120f6c1f40bd0d6335f22d12d0594aa34442e88942e445e8ef2d2cffb4838f0702327f2a5d03b2e412582429df7190f253819a53792b07a7f5605e103a8522e7f9e81cef320c80a46b01e1da47361d23841986000002280000022400000220198eeaf3351eddbb3917b0901dd4f4a2ff97d49b4330a93a4a8c6edc802f1211000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001966bb90728249b663180fe1396bc9ef7272a234710b410a1d400cd7b7ea2bea564ad1059a30d9c020647ea011e339c1f6b015f77361768ff6908a0b3b6936b01baae24ff8c1b11b4ba57d8eaeab74ba0c9b18edf976923dcc6366bdbce0bc5c315c596e7d82199adb1b32309a8a8305187dd0853f7eeb96d3d0c766ce8251856acc70a7b0bec07d9bf418d2eed32390d0cd3acf726950bf1aac64ccd9f9ec045a73391d635dcd7f4b9b532a28bc4520e1e87143694e06b81174520634114645f4ed41076b5523a8c64b19982ed6239487449d45dc177c5c74c120d76a68ea6c072bc127f34b70bf873df46de126816e287e5d2ad1ee89e53b8e8a49001144db538a2506fb19339fa4478f411ac512ae73e3aac9c3b7286db48003f317f32c3252ea5b64fa1d608fc2cc7a81c515ca649bc24c409ee62bc073c7f6096503ed41462dc0ff3593979bdf4b079fe5cc70508c2c6fbfac08ea85312477ba7ce7e6ea49353426a652ef8ba53a311e3ff25d30251775c2fe8e7d0af2bcd69bbdab83ef2ec461ce99cab3e954bfb5221ba59b0aefac780d81638e6769398f20dab5b86ce6bd8b71a0788e2dc792ea529aa0de59711d2a2c7666fcdfd9cb6e63970c8b9e000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0020d24e310e4d0079a789d209ec28d3fd488be17d135a0fc1fa32c99290e3622ed0ba2fa7f2593091f83b516b4ce3fbf81f180096e957737819d0d20e756f4b2ad022bc87491cfcdb70b5f9da4ab971fe6d1ae56e434f395844909940471eccf82ff04b5374c82d61c7889616e59ae695a8500b0186ee5fa0e6761afc02c1fdf995e00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a3e4b663482a0a4d81ad467022e77279fec13e395c69933d7161db04d93e7cc6ab241e777427af824c2f4b0741aeb1f0892b982d0103eee15bdc882631894b5064453f5d03c74008318423b7c3f31d03041d8a57e9a2e2572b21f62fd7e30c87d2fc94f01f162a3cd26a7309968b26897ee1cf76ea29286b44742752b911ae34f6207e6bb72fd5cf8c8bea2cb247c96ff9f4173eaf53ba119a37b91af94527600911ff8445ca6be18caba6f379eb01fbded22d1551a6b638c7d170a8ee15463c45efce7c6fe045120642997005b526e08618334709b5b35e3ed3fb9e3cb4dca7df3ede727194891cefc896e07ccfdd67976035401038ae8943dd8bbce015efa8cd666a833f71c8d678f0aaa89ad845e996875aa8c8fd14dd448f6d2d53edfc57ae200146cabb37e570c8c3b8f5f860ed921a2a3e4d2627f85195ddde7c0e6e1a5ed67161bc31aa26b484a1ffa06730a5ae0601f4f9f0e67ebac0e0b3b739e3849aaf9b6a84fa9b0553d7ab4c8af18344180d6c55715f72926400d5483d76eafec4f696319b5d37f6a708cc984fbd0fcfc2c0fa248c530a4fe96b61ae7c91e02a559f25d707650fe002c738ddcff4c3bac4eee4e9f40e540ecc540528ca1bacc000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096f0ee03d3276af218510dd1b49780a2832b88fd012d8cd91102516f9518711333b4c9d82a6f1ed6c002cf3ddcc6611a7be938b9c5c4a141b090f32a4002c6a8f6eea370410caca09d97ed7ebf29c490fc8ab9b936d69d28b765b2205f7e0508688c7cdefe61990114c2c63f01f44a21d81ba0d84f3db3721db917e8fb326d5248dbf69d7e20b149ae93450574aa7ca98fb0337037381571299976e45333b0991814a2836cc7d47c36d0f6d73208fd5f01bd9e3b22cb0a3ce7fa2a78c494a52eebb368ef8dc3ddd9c24016e8819945ba192466d82d89b60fadee87aa7260b50089d9149370d5064c9c0624074df15734a90f418932607ce205d058c39a802b5354dddf23456111f30b615a5d4c7cba25d60efa899285f818d2aab311c7b99ae0daf4e34c575272750b2ebec80b46fd09e47342921d7534f441f68fe2dd689deed52a98106962e0d68ab7635e71759f722befcf76545023165690452ff4ba90ec3e1be3dcb6befb1265a4d47d12b4118141ee0121aa1e79dcbe5e6cf9d71819d1624f1607a1f64a86afb91fb99125ec4f68c55fe04202c8cdbfa81398b1afc5073e930bb53cf8d319906af09e1302720bcd78188dcbaf3d24a9eb70c81d0b645c0000022800000224000002202366df0d029ce086d119e11861e1342499ead635e9b02dff7f92c3d9a95e7bd500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aebe96033b4d0001b59ff23a2c5019530f9db211047ad739310d3dea1b47ec49d29a1eadb946fa3da4a82a3faea041ccda77e8fe4b0bb3c03b1be1a901aa84c9fb3bd27857f17442d306a47c92258a63c2a6a325f62e6ad033fe4a88a73c326b1472824324fe91c8ed115ecb4df60d027f4c37d9250873a7b11d077a01c576e8fe6636f3d6ba04b1b2d873092818c37dc36c469ed1375d15ab477f765557aa2bdddbab4b503ba3e3e96094f67b869ad6bffe74933b2f9aed7bbc96674f569c7178ced85464eeb5a205105debeccd6d82c9d5beede15669f7efde1f0510b3878a3b38011ecc420a9d2504df6e3138a0d0fa09fbab440a4dbce7cae41accc8c44aa0e54a0f9d93079f1c47d522a53c9264c5a9d8a41b2ea25a8d6ce9300bbf7d32a12d03dc0e68e118632836eec36acd659d4a3e35e9dff5fe53b9ca7231f940c73d0d0ff015320f2e27a241db918621a72123a9d632dba822cdc9d7a9c1f2e2e40bc0ca3fa02003d53aafcaa56f36388965854569b4397be5778f184716c0ea9963f6e1a135444a644e47f21e989b00ce1598fc314af85c4313591a4ae3dc63d95f40133efe03b83ad17d31b79daf4284471a0b77118f27f57bc0af5154022005000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00210b82acf79c8298fd11cdcc253cc70a8f354a4a1c010cc4cc57165afbd2a353f2d2e2d8cce7461fbce89e2f7a196a35a5658f57d23264cf4fce9a007b6a1ac2f022c984e61fc4483c41f86bf03048511a78ba8b91848d9cebc469495c199ebd64d133566e11d31079583075a8632044be6b42ad6c0f0b01b9a9464397929fdd7de00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a87d90a182462c992b3987c4f25225f18abd0bbfb067749dbad2ec110e0a7bca0ff6ffe9f76e77dd350c64581070c3c12c98f52f4b73ef4f2208019c7a00990cd2c9e9f669b7b17cfd4aa3796e46e0106206d67fd74916279e7d22df66f00ce1b9c2590bc72e767d9902257ee7ecd889095d1d9f3107ef3050197e537bc7152283f50e1696be896b91a15553263c0ef6c7a99d71140c46065167e860acabffd78bcf04aa55d1ad18ae8c9b8d37aa8e006fa9baefcc4bf637ac4082e5ee136e42710a8dcc9dc15fa857c511eba6afc59a84e3a87a3557c23c0f848aacc8f7e2fe5db9e35c4dba1faac3209592f33dbae2b987f9d337d704afbde1089e15953cf63617bc27d317271fd5a05bda6b4bced829cce386cd5eb0387f240bb87500c7c599e946728c0c8a446b45c10ab29f56c562ec7034be55c9dd06cdce753ebe5d989f4de366480c27ecdf7e026ccb58835589f5986f18c1ca55c7bcfa119712abe073fd09a4d60129d80964870c7d5bc00debe8c506d388b5b84182366ca04ca85407c164617c165e82299fbbd6dfbf2b909aac56924bf1ca2264aece73bf9fda5010895c1d3fdf5c25430bdc319644453d04b2afae2cf4a6b2a91da1b5d6d9530c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000270e28c5268c9ec8ab5d594ce6f5f3a0684ba27950a94343d09ef106d201f9eca5c9a015617b9286170f0a26ccccc9b608f11c84d5a66fc4c8614994739e7987ec5f13afabad10d7875e88fe14132d49f54bbbb26401de96c9c384927ec2b521a9634cd7d6449c945ae297962502ef84eb05af6e645d005fb1d06730b6e6cea801252dcd7b493f2153bba00ca3dbb5ee67b439b3f8e6b065018a96d417292084175be91f0da733629371e8e00b37a6808f46c7ec10dbba242194cb2815cf4e2080788d1f52dba92066cb85c36b481cf1d778eeaa867d0484d4591d99b7a1bd459b321503893aa9d0b6d86b38d26c02bc77c4fdd8ef54ae302c381f3bc406c9361b8e538cb743270e04176ac98254efc644466eaf572d3399ee2057fa7cd63282d97f30f2a02c18c242402b775e5d5c57d460625fbc6ee75baadb256457e8cea5f22dc6e416d25d53d29c4b3ea3b37801bc14c76a5fbb72071bc939fb5f4f641841d0f781569d51c19bffe7c1e5aec4608aaf80db3db07dba7f5d76e21d3dea0a91ac016a64c2a8b10863f71da5df19a3f5842f1248311d08a7f1e6018f65766cda473d9923d0f946e70f726edb76f0a94bb65d8aa40c8c278f38e7f06d3791c0000022800000224000002202f3fca20047d192bafe44e2a15d7f664a28e2c43a95a77d90b2b60b8c2fcc649000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a42a439672fd4ad3ca88d7be3c0201dca7faa1209782cade0351eb65e3af851708c41d6038ac0c246214b6eff0dd0d0063bab8cfbdd778130b50a931aa5abbc14dfbf7396116a012a48b8453cb1a032aeb3c30b727c86bdba1c010570c60039788d042b06a974bd191215aa90fdb1f048a109c28b2f930b0f0c8beb70e8590c1bc8de7c58042316807f7b1bfe767ef054a049273074b8aee437377e7d04a0be0b7ca73362496209a693c88ea2bfe2a747a02bfb17e73029db56ad49995dc1ef0554b404cccdaf0ea6c0753c164829de596d4a51e30881086864c978fbc5e42848a9a4617aa4c39ee218023b5b7737fb22b6e8d6e2b7f92847a4d72644c7f3b10153430e4ecd3d775cfa807dfd44031dadd8586da83a3d4af7aedd627d192bd6b70dfea0e41452235626a15615fc4f22cb1cf64583f41198f5443a42b8158fa1ad3aafa16b9a9b078b0a63ff0fbc3c24d85bb5a581cf7f3a723794ee18ebfd0888e6b0fe44f2d77ee94b84547752fab990a7ed762eb3239a4b29e7c315623deedc60ec3dca19871b4f80c729e5268e8ace76f27da584b2bd9a50ff406deb893bbba7fa005ace6f437eb6de5bbc34e97b835507ffb1896f4e696a5e3b761e2e8e000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012508a34c37e48cabb4df34f233bb0674a5aa0c865914c54878c7ac76871dfacf022d6707c618c14e2e9077d4fa4fd3e4fc78c96f84b7aa85b6e8261a6fe94357fa109a2380a82dc5fa7c43c00fbcbc19918d24427b9987cd940999fa5a68e9aba30000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c83e999be2ce6499162f538790ad131ca5b2134a02d49d940b64a0440988cdbf3fad3ce56814496d07aecc33653a6ffbdcc97b82bfc62c0294a4c34e168275506db0fb9cecb78df086502d867c53aa39005a41c3853891552bbf6a0d2b992103c86d85cea0dea0e42901465e8e7c7e839d5e2494bcc5e3fc66242a9d2891052f09393e422ffa061b14ba9fe95ff4f8f094cb8b02b56cf612b89a17f4d6f08e859e99fb731319d4a35a3b4c2aa55d51aec0eda853257e4620989d02d6718d906d81a9f8e948434373e77250e347a79f09c07449495532b85353ffefdd3cf215089e3b7ac12db59df75e3c9b493489d7eba128302c1f39b99e3cf23ef5e24f00268780002c502475087b50624547bda5a39de29a9c4c217017f540192aa637496ac5a699beb3b3f7ceb429be271f2641b70d67e8788a4cfb9642e87a3b1d13d40f9fcaf02031d45da1dec8b1455be752e817298fb9e524212b79655ff1afec98d862d1aed3ccd82a3841fc68a08dda82fe6b49df024a765fa08dcf9b31241a4c25439017e2f119e847d8ae2cdd2204f2e25257f49e2ca03db989434bac952633080febd27b650516fa7fd9bbc700a91cd3314baf8a1309fe151ebb9fe45ed1df000000228000002240000022017974591928f9c1ff709874726f36a3b1fef17e52f4325bb05ba0f197eb574180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089ad2e60ef3ce15d86ba9000722c073fea13c159b341e9738b9775af248e9c270eef31ab6c46e7ba8f7ff80116e01015b49f8d804018e4ddcbf15b128a77e84f8a5db8ae6efe51a0b8a130aa298e90035b2dae7900f5a8e532a93e96e5167f11e7dc59e633bec69e3f251c7ced9060861e925003139f1429f1c749b2b3008dfaded4db57ace201535f3df17a7f58d858ee9b1f3f15ffa96e860f56cfe13b16e7547da5897107fc75525007919ca8e094d69a1146f7b5f90b6de39989b232b57b2792f527354e9a688a86651062668fae841289a1569776bd39283c488317bfd96e402173c90c15390e12bb089517884e45408c228c88248762c13440ad6d3f9610ec23bbf062639368b2ce9ef78ef4a67e5513b74214aec9ad1627617e18f9851a2a22d228660d6ae8b3defac2fa84c49ee2d1185177aad7e484ff77e0be3c9260a2e842ed67154fa098647dceea3c4b16a678ed64e3d2410a169e365c11daf61f18520b6801002a854d6ad7b39efdabb1931cc4fbb8ade3ad3dee3e722790e7badecdb578b393472b2dc4d19623fc70b139175f4aa5c62b2401947aa244eb86b4cf5282d607dbf478f9243268378ec3c3656f931045174dcb01bc4d326b5760000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012a386522d742b868310604e476c519cd4914b61a2af1f3a8b74ffccf708ebb9a022dc6b467683d49e7dd3eb8f4b3b24f6169dc1aaa06193683c6e72b1f5a81e91e24dd196eedcd283e25912daf96487485362d9edca21db7296f44178532d728ba000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000159cdc461d0751e087c2453e075a16f0b04bece498bf40effbd08b2e8b034d2f6639693371be7af1a34a55f77e936c9ac394325ee7e22a372fdaffcfa64fb1ce63b531893fc70995d6c0da6ea639e311600fa1eeb9928afe16263258baa5bc8bdaedd36633b7ecd59c3b36a70872a456dbdf4f4682d0310c46a723e2b68c7d237e865094c96811ce579a680ed7633c212672cdc73849e716e06684654c1df9c58a9af5901938f416fb764bc8f9f9b45b7aee272624fc3a4cd998b6c503c93c103ef57d7dfcae027a9803d98d83ed6b67dd956e5ff9bcc1a196084eda6491cd643605d966061c9d6267b99460d06a902b173ddb44822aa3f07953b0a635d4f49f5c6649c9863ea3b0a2ecf1807a1385fa54b71d6aad5d907a06a4320c8c1948268b0a8357b32ea11fc8c72fd57f6b91ccaa8cd7873dd2872b8da8a90c4c4c173528ae0afa2d9c561d77f0e53b3f7301c45e2f59bc54490051b3396b0d0edc34f4c025ad95b0e9a145a00d1a6ecea9db89585d6893f4fa5328cab3133543eabb4a54b854b1618e18921770871d4f841457dc9617ed75efa5278bd6baf60dadca9fe62975920cf3c7d0a1400d1654e44c7c8bb4cc63492f3c3abcb5675f6f34ae240000022800000224000002203027555ae3d2e8ef31dd2d47701a9dd3f15fffa4dd665745339a307fbe5d5094000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cb14f81b0b13592fa4a29572b0fed33e12b95aaeb846aa5010605fd5a0621531235320f113000cb4d00dc22d09ef5f6d2b3bb336ea52a53c63aecddb0b4f29f5c7966d084a2b6c101538c9be71ea2d00d3a587ae9f30286a0186f02209b8dc2076cdf21ae858e3fa80a2d6a3488396a9033ec8fbc86bd8306710223a61047545aa9b032232eb0ac12108aac20f0025947ea280d176a7b2c5815cc8e55371963b02d465339e6f8813b70dec2f7acb5e025cd7dbb32e66b604db2f5e72abaf40d7b88cc23194db27f65ad249dc718bb3e909ffadc1d022113a6e9af22421029e4708e28a216932e890ebdb56cb787f4001c711ae98213a3a3565e120533a6d298de5c34f8232dbfdd261379e787d3e870ed066b5298d504786abe0bf564364837d49a0743fb3b4cf57e942086675d69d2f93e2e5ab4234c384d9f7240af82c8de794aa3bcc6e684fb21ad99167fbc6a73881f50cd32c911993e07e547a44ae7e188961b651b4c5451866e1dc9936e3fd0d76d66a855714125a9fd7e69e13c3021a0cb2ac9cfadc8b3643657de5767b09026ec709a042941ea69402fa8fce5722723d0cee68fb33bce6acfe469505eb4bd317761c5f9679b3549cfe973d3095493000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011ef62e03eaa630f97e750e4d8205cb0cdaf6ee7cd7b202e066828230a086437f022ecc2b4188dc623ed5379c099e3c64a2280d54bee136005a77bbbcf593c9a5151efa8e6097de6a4d9021818aeb206502a3d727514e714febdb20a269113043f00000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008efcc632dea96f2ae20cd57bb6db95e33f78170b7dba4383f43279f6d4e0d1912613d6a089020d4e500729efeb13625408424e625aa71305a333a7ff710c784cb795d0748e8d0c307caadddb2ee5e871b2539cd9dd163d0a72d94f556a9e25e2ccbef72fbafd725c97f4e637f3be7489129f3048efd234d25f65c5f69c3565f01abb14ac3b900a1fa310ce33a3753faab28ebf5f0142c70abc0c229de5459f34cdc9aee775539bf7389397bc3c471bb4a4fe5743932b00afdb342540423944c3333384c0c08ec0d1f0747fb9d785067e46603a75c601945a63c6ce2eae7bd3551dc798d4a13a47b519bcfbb6f8fc59d2bafff265436a6be1bc6dec2dd515a646a93c2a1de54d54ac3391007a69a58ea63c9d1d48ef1d4a7bafa63b4d44190adb60deda39307d994dcee872d70f83d206bc7934326a53386c89d81269b241d08c3fd2ec74ae95d85038adfd3e66a3164832d5a04a1d2438b5e606953fdb2b13b5cb2bfd9541851ff9a445373679e43ecf576fbc49f5160bb1a23a329822254373bf789f9f28e7b5baa049e6e4452b41c9dda104e214a2733de40b6bb9b25ad65be56875c8eabf472a2343a6d28399615a98ac36473969e5a09b067cb45e496b4c00000228000002240000022020e07ea69612024dd53eaa657b39db2ab1349d30f558f3eb44d0bc9e6685ee370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083f4c8179d39332f747269fb9aebcd6594c530efa8003f73e84aa4decb5ea0294aac3c8f997b737e1baeb5ec39fa2942a5f59f436ab87e21d7e768948bdfc6e8aff0098e7d5185fbcdc83e3bcbae0719f050c2cd1deac7f7bb782a4ace06c9c630b2188f6b2017830d0f10f4b335d332ede1834aae9816680a0b5f42eb299e8ed8c44e6305caba96418d891482d2318d5fab42fed52318bb87f13483fcbbf6c09f368061ce2bd85531799ee6988d2053e5fa33f5913d97d87e84400223df4fdc82be29e38ad3536e91a59e1fc360ac8e947a4b4800d9dab9f36a9385b1707750b11874d596a11b9082b11ab2312d70b269dfa9a09d71d03ee3c1223d3f4e81f6f7609aa5ec6605293324c2823c369572e0ee42f0134083ad133db76966dc57af840d8d88cba8c560c47bef68ff89388043c61480dffbc6ae543bf5fbb729d8be8b14e520ae863098d1f56701c06169a2735401d539e85e2715a87c27ec87603025321837918e104d96fda413190ab6cb04d988b0feb9085f1f246c68fdcf488658a410048eb2c7ac44b15dfae713deb5953b0e5f2ff4bd849bb2c86fcc0298135cf306e4b543a39d50d25767aa6607b9ac3e5f8cafb48b1dce8a8b564c4858a6000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012ca07363880ac3e86e8a295b76c7873c162b94b85854f93f48ebadf7d2e759fc022f2a1e77fe079a6443d75f77e41c72e63d2489ff2009932080ccadabfd3fdf892c6e081ecff53b64d89580db1b66c8502299c716a0ede4494d5e3b082e4450d20000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f586b65b25fb54abc2215014d434fb86a88a5a366fcb4a24903fa69cb34a88395dc3a7096c1487e7b73ecae0f9d2a049a4eda1e4516db13fc610db39dc6e7b1867fc9ced0b939bc285981e7e2f45b1954e984ab7faced063e0153de539b1fde9c27ddf4a158a7606929f92b0ee1cce969890a46ee3a10609b9a2753030be39384baef07a2c0f32fac29f881f5ee33aac29553af1861dbfbc6f2d563928ffbdd2e4bc08f8414c66ec9ef64909cc6d7d3539ac09657a84ebc5d587b2cb56240b26344d10a519babed8148b3fc649e6ef2c13e1109d3c78760264de1ff93c64e64d6edc87356c10638ef393c944c4a7c8ed1c99a5e89cc9067100f8d5da3fc1f81383214569c62579c2f39d80d6a709af7fed6883022e554b4cdaf41a275ed59dfee5c69b1105445730a70e97836b0845ce3f601dcc07e7e383a0539c1491f85d93db7c6d28d5b91e19b38444bab3159f4ebbe366e3e8e3819438ed7713023f1eebf9bc8af86f462a3c15e615817b7c7e43439450bddc7098b7873007731983facc46f04ec20b08c8737204ed2043e2bc22a19797d4cd48e853373b41013bfc8d0bb14988b0b50909ae18a0ee2d33b4513744b706d36e15793f9f53ec069ad586b0000022800000224000002201f3f4ddd833be3767ad07fb161d557398836173ddd1cf728ee41e0211f261f2d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017e51776246c749df7e722d6bfcfc80d279bfab18616553d27ed1563e13f90bc6c24eb0f46cb83ce36adfa72d09c1f6c0b26727d6af6a7b89a882296f79efd5fd91d9b51c2914e2ef971f5ec601930346e2ef7bff945937baf246e0cf166b90d97971c21c82794a023129650724c4ab3b360eeaf5e77b4014fce9db1a5dd6b66d73dbfef8ae0e022412b0ddf2e5b076e4fedfa715719d9c11ca7b2864752d073c1ee3788f132e8e01c6400307aed4a15b679321c2349ea485152e0bc2139a76e4297963583fed6eb75ea91244ade69b97cb8b8d414b25e1bbd8ab395f2231ea6667c91ff92edbb60a765ba6d65e16a5e2d452b4ec9d74f99ee993d498240d59fd225efddc36fd4f1a9bee9363213b78eb29948ea38f89cdf0f7ff80267d5defad03d8547a56a657d9287dfea54e164e5f7cf84aae2e9aa2b87da5fa4ddcc50124636aff7b7d4f6ef5326839cc6e3afa17b59aca99aadb4c4155ff774d6f2cde684597a573814482fc634b6f712925f80acfdfe16a18a10b139d733d4e93e9c91517c50a5735f5538d6de5eac5121fb2a94cbc2da6aac87e0a27fd6d607cd787909fbe9a92b7cf5286d36f8007dbad4746381ccb57d48e6e9767fe58c1ed14f10000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0022532485fa1037a70d94b470eac7e3c4eca2506f4be281624aa98926e569a48be299f4d86ef9dd2880c307b176f88bc515d117eb832a8a4eebaa995ae8bf51485022f831b0bee8632d760730b1fd9e50f811cc2285051ade8ef7433c85deaa57ca703085c080934d0886b8e661abff187c3288bb25ec4c04a7cd72046c4839af2a100000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4c6eeb73a55f7e2cd3bc8e8fd4ada047f81a6e87a916e327812228bd50231f2090f1fb5da5f829e473813f8d6e439ae64c76f6779d44f1d832397722a78e478ca4b39fc417247b5bdcde3bb1ee448ce16421bbbafb57ba7d32a5ffa7229dabae5824a0d137c65d1e16ad8cac4c4042ec7f97066c1c445bf1d7d0e658bd3df17c5586fb6908dfe8cc6dbfb391307b5efbbd0d7f0c8c951442f98a3c4b581d6591589bb1896209536475b28a5c597f136949bf320cdff25673073129c2574684678c760a8e931c2f52ec29e39cf83a10619498bfb1aa681a47ea92d43dbc683eddb6998445d4447a9abd55becfac74a076f51316361c1ccf4ee4385600e16b638ef2d640140633110fb76630c72a9d6d1c442f47c2d9dbf10f23339e75de2942c949bc17a5b961437211668be8d0499cfeb1d313ab1ee5774d0d37ae5a7b4ced7909361639b55a3303e511c73d4074629007fae15045c5ca749babf41a85b48f8e5f404a3b5552e9c6ad41c5fc6deff198a80f8be7c40c70a2da15b40d1cf46a93b5bf4afae5568672152b5a2378dbfb3a67eb99ee01f84eba4da55981fb6a941f66139755cef0b28dc938c8ccae85469b8278493be1faf0193406e4fff0f4f930000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000852ee6103f97ce7651e20c4ecc715730f2d1fdfc5462d355d10e9c9166abf2a462d7bbd3cddb542581f3906ce569715d8fac27e90628598c8873e2ef96d6b5d3b57f439192086952ad4f8257aacc0cfb4bfabd4377a7a182cb218a5c48bf40ae2eda13094f20dc72555bb5f57ff9d63f47ba69881f47bd91f6fd76c7c4b87235e21fd38f46849783bd686847023aa5e9065f6e094a56bd0933350fe1f32f47676a088eec9d6f6d2f7304dfb87f9ad2e30dbfd6e16bda56700ba399c5ce8fab8d156bbba1a3025a3a485bf68bd8c7a544f1d39ad895325a4d973423cce0eb8bd69b2f196a4fba9a40ce9d37262cec2e64c51af93cfb683bc2822be29ad8332ef92972468d6477e4f471b5bcf80d40337fa461604e269e2fdee9dfbdc20d02d32ac5e2fdd7ba946c1e53798cd24e3dd817afefbaa93da1b1b801bdbee1c8675709b0b2ea24db2ab44b95ef997681e67dfb5d6434525d0dffa18fe9fe729761f50667c0f6a96eb7979387c489606d2eb935bb8d1482b5516be5243dd7f566c79f4ddb2cec0f04e6cc66a84846c3a6f623ec5c8f5636a98ff9ae198b5d3c0ddcf82540025ebc292be4625780c78ccb6c6230db1a37a60e40704fab008a2948af43470000022800000224000002202c10d9271776c8ff2af13e668ce47ecc44354d7ce86f73b4a05ffadfec3785ba00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2012780bd155cb59ac9e1daffdf5e8ee59cbf1598ac093058c58cbbc2c144daffe3efbc01768cda88a056a7e58f8a320824d5566a933860909732d31971f0918d6c3871df96af020e1a4e103d28b9f395536c9d6c20fbd20d67fdc8bfea05989d15fd8d8ee2613fc7fbc47a052cfe9dc3fcb8038a2085dfc3a13339afc4aea65f37d806c2ec3d0f6db658b4047556f2ca383e2323ba30d62e341fb79cd1bc73d5cf610d951a6b059ff2ecb9acc7a3d6eef6fa8c192536da895c8cd10e90e4f37ecb0d753a84b4ec331887e323ccb43732f66f2ba110f4e2a51a01eb046553f6149bcafb32fab690289b0f07cc7f8bbfcdfbffc1d3942634f29dec5ff8a54073cf6dfc9ba660ef29ee7baa90dc0a5396ec7e683e523c23e65390adf5c19342557511acbbc2be9b319423af0a0e712ea8a9c889c99354a95407b678a0362d8ac90ea46bd5a721489f0a3d442248a408e3988450a3472ed3e79fcc8ca9f6e8fb07fddc2e0adf72b23bb6f10ec81b0ea6d10def22696e884e63d174d9c32ea036c422745ebd733001f44829067cf1ee67f316d4255c54f7040fe52b08fc127a9085ba148a01fb88a02dc7fddf7ef45fa6745161155b021a5116b71f2d91675086db0000000400000000", + "0a99363a05626a1c1626f116dab7230ddc5eb8c1187683419fdf5c1135fe68d20000001300000000000000000000000000000000000000000000000000000000000000240016aa14787003141185be458ae05e133c83cfc4adcb0121bbbb4b201cf396e100089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb30000013014689f2e0abc97c7078ef1acf6d1c627758c9b57c7a1c4224365623b4d3382d5000078000cbc610f801050e082bb00a51699b89c8d22d354f199a5f9ed2f36010d17327e000078800825bed0f04513688a20a73113b41d525a804966b3e35ccf0894be7867dd9f59000078800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001300000000000000000000000000000000000000000000000000000000000000130000000000000000000000000000000000000000000000000000000070dbdb5c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad34f13017188bce8e9d851280ea406ee5cddb9ef12cc42013db5eac33b223e3cd4a122f000000130000002400000000000000000000000000000000000000000000000000000000000bec1d40010d9afb76f35c7383297b7a9ea543c3494ba45d85ab518b5b79f9a902b506b87a02007e0149d6e4e1b820826de6d20a71c329afe4217e87bb050fed965199253491070a496d7c0fb1cd4e3f3404877b50a1445d9d2aafaadd2667aa2bbc6c6ff1420000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008445c6269f358f818ec5e72bb2b8cd6934114396bfe6d6fcf6f6fcacb456cd7ccaadd3541bf8f71837091f3e10e13bcdb4b559961a982ca358a2c0bf9e3eda72535d517dfaa5968a7b4f1812530b6f050cf8c412848a579adcbdd6140fe7e4131218154225f3ea83957134398ae04156ba67b511f74ef06420da7278cbfa37ff80f3a19030d6955fda000b25ca11f963e3e2fe73f0f7e2c27267945a9976db2d2361c1fe59ad39408a05ee035922295e24648b1eb86256f882717c53a841a786bde5018c39e958bbf257b6e2382c4d2380ab2d807796a3fbb9c40ac536b8ae333e2881b706c3cdcc8e4e48268dd5fbaebff7dfa523d60662bb2b01c90bdc971335f720b683d79362a3e3e634b05dcd5b424ec3287e72736fe0c8aa7235415f9f7dd8efeffb523b8022de423c2d1cde17decc40e696aee7fcb23d664d6a5d671e05d9a683a715223877b2a35a3130ac19bd3476ed7a55d4e5483c7369ff105a1b269ab9414fece9f6b44f03c0b55ed5471cc7973bc802c711d4d947d79c2574d37531b7c3de19e916044515543fa985d87226cd5cc8b64a06f9ddfea66a6c5a191f1e1e5b80b549ec0e16f0d886750a68f88f554bdc5fa8be79bdf28ff92cd7b60000022800000224000002200bca2ab6fedff993ad09c02d71b467774f84edb3db53fd74787899b50f2796ab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019a0264c95ddedf60b678f773d9cb805f300954d49f042a7c0187702e28441aa49e68a41ed996a216135461048eaa34b1ddedcc60e5cb08b401b125bf71d5ad60785b585519d75820bd51768ce36f268354bd9e5796918291cc691f90b752c72d156b23548e3b412a7cfdc4e8f23d235b3a2d2a9065c78ec9e9d1a774aa38bc025d2d99598b2243fade9ef44dccba7512eb2f951a78f4bde0125bf3b7ea4944ef0ff498427dc74638d5653c36c8aa2088a882d21a42508123b5a48ebb9162a6bf982221cd7ba1b4159ab9002677c0a30ae74e61aaa734aaea662b2d5356f4717abb23deee59de596063a0d9c5ef7045ba1f6f65103ad8ab1c559ddbb2b000e31ec4556a87a6428f44cbf7dfcfc9a7fdd2d5723fef797a4cedfa1d58ac39b90f57bae8b979049c73f16d0beb9baa3dd2e13be5128ecbb62c40958505b7bbabde7c485fcce359af5ebcb73340049f537e018395deceffdff75871d2d29b46ab8df54b3bc03f576d8c2b1dd8ccb9bb4b30d9ea96ccfc54dd52a2b83f2bbad01b2fdc4336e95dac731cf394afac7581c371f460874a50671aff80ef618bc7c485632ca23275f5dd22a92bbcb5ef32393c3f339c0ed42511dae7f3f40e30697990db8000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400128c5e32a0ddc3c2a4cc54c03b2c14e9b5a8fd12fefa87b40dfdbab4859d631680200fac92b5386e4e0d50929f9a2a628b7916c074730909f6d9678cd831b686c221afdc88ec44f35712e3193857b8cb7fb03da35dea49e659178beb82ba9c41514000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae6ce475ff119a15fd4afadbb20d0cfdb7c550370ce3b80b06362aa846b808d9b9b8a6279958885b41d517474ff69a99d5575bfd0796a6ac328b64ff1f7468b620de097d73da3978194529762b2955287404334bd1ce9f4bd6b0f14608bf71073c7426b0c7945bee2b87f88fca9038287b2a62b2b901cc10f3cb0858a5de1bfc3afe05f77a33618c0fdc09485946f2107ec3e50bdbfa3e0ddf934923c8b9cc83735d22f0869341bb6190f752d5ba1bd9a6a51a33bdd261cd9dd84206073e177f56adb7432dba6c24ae581d495e29b770d6a9032079664547b337dc7508436f9ba51ccc62566c493fc7995f93b3ba9050ba187ee95f7d179653e40308d2c4d77a6f091a5091057bc29cde3faf6ec55c402f78aa5a38bef2c13b726dc7188870e3ac702b56657fea0b2c1a707d3b0e5636463b4f49d5f6d2d5c2014b13e16023c29293cab3fbb01c20f8f084110d993b03cd56fafe84ff85794c3a2206b12223c64257082bb19f458fe852592d195b0d3c53fdfcd869957996361c6b10ab67240378e9b84b7af21f9d2240be354b613b61ada51dbbc2deb75664949eae3a2e106dfb837c62e3a9906ebd70eb18ded124b0a8f2d284c27a2cd4dbaab3b7c80c31f500000228000002240000022018a54066585088fa1a25d10e96fbf37a8f6774b05f7874b0902473ef677f86d40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093a606368239f63968506aa23f1543c89f0868b0c9eaae26c808274bae370b9d130a8e7e1cdc0942f65d6398a62ff91fee4bc88c6d6c85fc4d73fb79312bc10a88d95db88322ee8ad3e240ed9d93442d91e21a1a79ab69d1b597ce5b60e3f5296dcab68211048d1f09ca02c0ab9d13b25c2fc59e80de8f54eeb5394f006b0a1c9c345ede65f33d08444359110a8a7457ba7edf398fa49854046ed7ac7584f088e1d31c0ffe19e0e134814ba9a602ff56f50c37788b1c4e3cac2535d83a6766b62e8c65b8726371e6863ae0501f543abe1a956ab2c480f465b33923653eef85c00237cbc3c86ae1aa04fc943bd5935b2047d456ebc7f99371af3986b3af2f56cb34ec6fb84593a2d46523c97b31e0ddffe7fcd29a966311ed61e92d77ffd559a944f215ad77b24b3f78693a56d2c2d51c795b53e493308cfcfbb939fa861b4f86a782998f673e14e541180dbff9fc6ed7eda54402474c83e06d5065f799055e22b3eecf984e44bffe8a3a496ff603c051a1bdb5cc989c78988420e9b0f1e3e5d8abe36c8571b4a500ac7ed83fd1605a0545acc0f968d76befe1440f103eed7689cfd89d9f0bd26e998b350950124bd3299d468ec64d5f26d46a6ccbaf0a35a0e2000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400108e801654fcc3941a035dcfdb72b3b77fa7bd03630a0660e9df69a686ea7cdb702017a7e865d6df4a62ecfb196cf411c8fabf82a8cf9c8d4d165155cf05c9f7806007e50a84cf5547d80a873477159b96a0bac38dad88facb933e6f3d34021d2e8000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8b44d9eafe9a712da7e3803110b8910d8dbf8ca01df3c6f6fe4897a087614570ecbd63154e0b012ffb1d6c3007746548e21e10ae05262f6c7f8a2ba4b3296c21a039d4a751d62f06dc5d1162206a23abf4c03389bb896ef44f114c1e36fc44c38e6013b52f8c4d2a26ba569009ba5828a0a0a737941025c224f1ff1af1e1e9d711eb560a3297e8aba7903b321121f3744cb32619df50001f093d75a7dfe088b6a0617caa940678c6c586533d0f88448cec65a70c968bc25de07652568bbefe9f4f258ee93f538d4ca776229b41acd549d2a002374cd0479bcb42ef1ac986e083585b09a6dd90f54d0a01aa03e5d7f0135357c09df96dd244cdc29c4ad13dfd2fa25f8ddb5e81cc41f3855b3c92631a092f0121fae0623521c9a1a1b0b61d3fde7c8049fdab634c074267277b73cc530d5988a71d4a7f53df2efe250d2a6a8062942040a51a90a5a391eea068aaea7f8cc1bdac9fa548275a396fb2eefb1797ef9ae5e85e36bdb20c009de00c503314016777666e85d4e5964c308b3a83a721e073ed932598126d0bb71cc7600e1dc0e395c6ac82c23bb06af89ee06881ea045477e009b82427988b6b7b241365c5bd6820680016a72782c7a844fc96ef9525700000228000002240000022025e0c9d6c86dbb9f861127382d277c8bfbbeda01d3a2c045804766facbc2826e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018406bc5f29ff9f8c9e37848c69a0cf173012ae8117cd2a29640f703ecabaa5e1e5b00435e1b22797e83b2bda332cc01baa80c049868589cf17c759ff1d08fdca2829eacf69a6b0985bc5b6b3ae5076f60dab1bfde7313a482d8856bec4d78cbee5cbd8b57aa923539984e7430d8a63d7eaf6f081c96dd858ee315a793e3ce1cf4bf3444d71676c2f8ca232c628d100bf73a4842c3204d8508645115b8f00b0563f34b67a127269b9d105f61a6de3f1b929749c02dbcc2139ef8a27cfe8f7c28e8c1056416a03f14c9e21ad8199e81cf473eb5823c3f1db4f3dae5c495ca4046a9bdd33d80abd41e47e754e1dca195c2409ba8269c9247f8f1281bc223066d5d589bb436d622dff179f0dd2f38c9faa40a661a203925e2ea0792e5ba32416e4ae07e6b0ab75bded648ef13097aefe63403dcbb4c1e7c43bcb352ed17d891a387e2192f97c5cbea47532a54705862d5fb05b0ba8c0f59ba008f0791d55973b62fd0902611450bca0b222305aa2181a1b8bcb91fea6134a60887fa51fe659d517ef24befd5ec475d68b3a1068028bc97df030af392512764410e4c19184d704bd91839f6ced86502c96535a23cdf9a3cba9bd9c34b39afb11fbc71c3090c59019c000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40012f4d8633917c143e25613c97e56c6af501e54777b275131df4dc936dbc2d8ce50202ecfa22a334816af06fb90505ed363e5508e5f9361ee7e641c0c1536173cab31f23eaa1d5a456ec312e049515b80dc503728566a90023e56c0d27d158ac1f6f00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094b5c9bf55cbf8fb3ed7308f3849e72531716cc29d7dcb87442d470baa8d588ebe5ec3cf5eb8c862901403d1dbb2fea98b79a33cbf04c2dd0fd56d590d9edfef2b569fb04be1bc2c7d9eb7a2226233f69a4aba5ee7205638d5c220b96cb35a98c4baead94f4c51c59c6ede209bf0e67e5faf084d0eb88a56199a9def81819a685c27d405d4d5f823a82b9948a82cec4de65c111d7f74e09d23ca949bdf4d03f0db6218585e0bcb573e3c4098bc257334f75f1e27f7f2fa90b9bae61f3a585c95d9c2276d1196c1a366435c4a9cd3d83f8bee83fec7647dbb471b9dcf008402149da5183e6fbd81b17a87a5b52ade7f949215f3de0ca8d0cd988aa4a706a95b5087e8235b7d80600d57093773452312afd9c40fac501f8b4849c5bdcab10d07d40c8b61eb3567a4f65624f8de6c9d197b15a19b8d59175184658f1d0d29320f9b8ff16a4bfb35b01e672094d7aa6b8c3c2973014b771f9d807d95151288f20ce68835930bafa5f09a7ef787630d1418ec912b0de047f224ef039255f84e1064e9f1b8c0e8c61ff190de74e282b3ed57041579f0b205c2646bce2d6465d17dd9fbdbb25469dc8359fd9ad2b839e53fffebe7bae5eb80eadd6be3750499f38a37d60000022800000224000002202e71a8420547853e0c707604d93ad4bf8d01ee70b5a636881ff4c426cbc75bc2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002497a7afbb657db9604a36d1e30a00a221a0ff2377920a7f4088d55a72257cb877d04922c63e69ceecfa8b8cde22683277bff9fe86a42fec05718bee7d1a0c30e4d9e92dc07f04f9c61c8e12f18bb21c18c469e956b9db64fb0e4177236a30255498c26dcd305cadefc10b46a5e3407f0b4fecb85ebbb4188009f7f189ed7bf195b5ee17d128544ed7a86a203a07129ced78319dca79e43f20ea95d48877feca62efbd92879d88311f09f6c90b360eea4fd60d40316db4313adcd4f47d8865c6ace018193d094ae1756334632f127823d4cb6721811af5585d25dc9a8a4630738b4edf5a4a8b3fa2c3ef96e55913153536a711986323670412d7688eb6c55d0c7406d64f67b7422493048a28054b484a72e7fbc3e6fecd7e1fe9c4db957bfde5e9b41acadea970de677fa61610454bffa5abe59981a0e237aaa29dad82868eb257415b6edcaa6e66804d07de736b164e7e65b0e8f932d7245a8175bccc6c758465b41ee956912177846458a61b1213e7cf61a8aed8ae135a54ba28c67a4e0d800efc91f3edc7641b5dc25dec0666e360a01a4675c039a202de946fc2ae7bc8cd0222c3d74c36804b1bf708ec8217d5ea484affcf6a400f910562c788ac270356000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400127464d265b213f467dfbe227555d8430d533c6c1c5080a7c9da212a7ecbbe01c0202fea59c678d3e0fd8d0a50e7aa4bd1d70d9e46281faed04bf32bce1472828c527f9c52e2a61bfb78c298c299005ff57ffdbc9e864fb0eb6969f0179696b6245000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000abddce9a1e198b6af662abbbb6c7fa53c14a4ae6fd220ad39eb4b1344632a57b6454ea97e42c4cd49b248822c0e47836d722abb2bf1cd2659eaf53442e9914037fbce5cacf494db790ffc55c2265abff0ee20922064d638fdb7e17c4f9fc009d637582e3ea3b04d9d41d2c65d869b9237c5b646c9c211a5508b81e1edb8f547f7421ea723696ceb37bc12b9c39fc136a89f9bbda884f2ffddec166f50951740b613d35c3ab80e5c0f3244dd9fca59365d8fc601142bc1bc6427d67d0d59afbec85a9c3032a144df027bd6dd411f5324a44d42b191e359de2ba3e279b161c5f7e904c851de693fe82c89eadf33d869d05682cff025425e706134e275faba80ae31675d187c911d1d2232161cd1ea7c7d2720b81a41448d39e904c8ef288178dded56f2946eb8d996267dacc039630e9fcf3df51efd70c9ba589a352872af664b0139d16ff35b2af00d3b91cfe033d86f21822d71eb651d4f8b415b7090450f3a2eb6215bd218758b2f60c6430308f769aab723694edf7d6038b4203879a68d682971f96aa2d3e00ed2e79d81abd330ad3846dcf361cc823838d0b376a1b3059e4f40f731d4550e4174fe45e2a028d67d7c5c3c3286571f40facfd68c6f81ee85100000228000002240000022026755deaf8bf8027701a52b393a36888f7643c450da8a90f24e9af8645070e83000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cd13ae323b8be678acc0ed55c37a11bda2b3d8efbe61de50b211ee76eff403777fb929ad556f5c9ec20e80cd649246fffe10e501fa3d394e5844e90f4591d60ac58fb4c375b712009e2e57d1e5a89b6bc3d971546739a29935db34f0aaa95a71f295c37b832fed9396610d04cdb430be2552b566c1df87230f0f96d3e2aa61a28277e606df2ea96b11d8ef0892efb8576c0370649a3eea32dfdc3f3eb077a82611ed651fce4571cfc8ca0867a03389cc3263c9f790ffa829d9d6030fa9303e50c0cebcd8b78d8c071dc2dbae7ec90bf1679b1d4c63cf804d648084076fc7cfb66b49ef6342fbc28b24afde7f69dd00a71e6926dcaf6aaa65069ade5e7cc670fd94873abd2bc9ec5207bb0ca64d3f385adaa679569598017aa1f4335d6f2eecc98e5a0c2e2fce28a02d2974ca6f3da07dfae8a1681150e173a6e1e48ab793b69646340603296753233d6d580498b27e5eeb97a84097a77f5dc373f73e36d48ff1edd35abc12560735651d9d8ddd5c92e74d75bcfe6abc5c2b670b2d0070deae31f5f4491324f6515c8e2d3b384d9be032343350920bffa241b41ba600ca37b7619659aeeb170cca650c9cee35973dcca7a68feabe13463d37d9202b421688a7a000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011ec4c6be1c72511b96dc02bc087a12713a79850b0bd754257bbdc440e667b9b60204474ba3e14cccdbc0d81ec9c25d1bb525b09b097c9ea9c4ad8b7a8b7488b9922da5021207b10a5a76714e6a09c9867ff0365145f07bdcfee4ec50ba6f7827a100000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099e283a5143c22b094b2cf91e641fc3e5c2dd1099c8bfeaf2c6caff14c34688978ce0a2ba2d4c57c2fae2dfc4a6ff87626ac2e68a45e04b1c06e32aa590e3da7d29066c9953142b9cfc591404fb05f7f50a9da80b01ffc5ec97b669d1de7f28329b237ebe5d991a8774694341117f266fe7fa2c12fa5edb55d7d868308e81b3d1bfdfc1e324d34103fa516f72a2806b6261d20d7b01d13681d9716f99e1a672de6afce526b9b8b41d0ed946231422c7469e411ec5d2bee479c11a46847d5be8b0aefb7ca5877a79a60965d095225e6a9dedea8bdd8f8f2e531692a0b2711a54d40c92c6ce7d87f63f05526889551db07ba97321892f5e3967ace2c4dd28ea77ad96e253b00245b30df275ac50f4d362f190225bdb102da81fcdf390a8300b2083d0e87d8002b490052ecf8b5932368b4c23eb88a50f58c285ef9d78a9966745946123aaf1b9bcc564dd41b66f1f9cd8dd60c48d076fa84101e2c3b11b2a641fc2907a3eeab56b996f6bd635ec8f73e6c533b1b5236be75d58587bcf15d7cb27cf10fc14dbc64e6b1bc52d497616e54935f2dc180eea2921ccc0da5c760556e9627aaf1b2311bdb7f93872cc9d2dda86663f9eada4f18177957c59042f20344940000022800000224000002201a7a1cf41a499ab9d39031b7f7104ad440ad8b6dbec03379cf4842cc0bc541620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b0154e856a69e54fe182387cdcaa37f906408c0e062e696954e6113fc2a0bff8f0db49cdcce9266f1ec4a2ad9a1e7bd0c2d3ff38927c13d5d5c822741133dc03e84cb6a31f6bf2f366eaa5fa999278025bec040d14031767d2880e0f3f826b6ae2e4f647565b973d2939b88c5c5c14569f5d0abc91b2910270b79ac2406b18d10d54b1c6b65e277a024b9497dc60753730d3823ee72eef7bad49a1397b0514fe2019b9bb8f5559a96436dace20568d54f098ccf74e1f3be49849e98651f8bb1b3996d355c609231e4fc0e6e06adc5abefd0f1f02c651cdde7abad1c21573d629f7fe708cf3756f32fe79afdbc818a54280c000321a92f7a49c9465f20a0072f7f258e89ed0662e82a1815fe3cc40300df9ff204b1286065ceb048f8a9f6b1d97aaf3bfc8007e0010b7fdc1bc9e90b93fcf713d10322ef41bc7e1c2b9f09706df39efbcdbedd0aa83b11d89bae1af1492af871b92f67a6b4c056421d2271b426726b2d11b7f930062650eae709c44968d6dd635c4c35e4601e9a6a8d7dfd7634948fdb8cd8ae4e4b0107430d49b8e1d1141279494dc00ca71bf5a191a01b8d04dfda0ee714931bce2a812b8599f5c57ddd1dd535a88c317b86d4cea9f0765bc000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400100f739618d96a8ee6c80c7d63809c08fc750232a5ff11f2ddab7582f7088479002046f56a862a174aba13bf6d495b832a349ae7961870e79353ca49798cf9f2dd624730c0653e5080ac2e6eb787bd7c1f22fade7f5bc95ab8c3dee143d28b85650000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000135644a767937b18c2d44c11acc935ce6d5d0f8d27dab3fcf67dfbfc2f02728357f3645e5d035e313ae87ae17a9770a2129c20b141d1a79a29bbc88be44001547a1a22e72e87d479e99447f985868895057e3d139b0d8384cae5c952961d542739c6281cb22a17f7da737ffe93b76c23ca2ff2108c18cef620fc0f56fc3291c58c48b58bfc6b93fd4eb53051505239180ea73c50472321c4f2b14062d709429706083eb5ba3dfd5fe21b4633fe382a6215e8e36e3ce079051465648d5df792f311dbff7f3f87350a44872cede0f347c53cb23274def619f89b34c17c590d2203bbbe7cdf6e5be0e52b466f2384eab22e842f93a6e8b2b0d391a3ef34bea77b149460616c31aa6e7c331d35c1b463a05dd70774808991bd6534502bdb64cedc95e51037335b546bbebf24ea6d2acfa8ec2c2dce055f0c4b95d566b4a81bf5737995b9e33bc54fac5b8ee1ec462e62619b4ef114ba112165908d79d556ccf9dd97e8d2d8c5a0eedee44bb5806320056ae7d052b3a3bebb19ac26c2e992b521332268904a2800754dfa53401c07a49ee77be7f79815efe6dbfdd339c1cda49fd112f4d862e6f672f2361ff6e9ab7a5c1bec9ada8b5f377582369aa5f57401b303210000022800000224000002201ee498d36f1be842d3ae22b0f3ddc90ecde767e02ed11d957d3dc9a0a598469c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000882525c89859a1ab23bd306b7ba110a7e9b20bf4c1febcf64ef89237cd15924068ed06fa6f4e012d9c188c193b6d573ed36d8ce3fa35204a9f3b46527f76e7ab94642bc32dca18fb1e194b1cd342e8baab4cc0797c5f86049549d4cfae639465b830b35f23e6004cd5734df859bea00487656f78f5a5d2cd59b34a18b9e4651db220d62105d178e46cd31bbbc174b7c445f3eacfa0423f386b4db8b3ea3b2ec2285b184a3b5fb012e3a25515c82aa05b58f81aafb66228ec1a7e8e443f082286a14806076c6893b10c9e5fef4b47667d7a0f91dadfcc3056a9d45a292b2a97c77d16a8c1640a4bc337bfd0e433afc414a6c97025e18d0b43a8b12dc73027b8a1bd6ec7066e75be642701fee1f83444ef05a696f870dda9863e0c80cfd747f4bab8afcdde73884b8091882957e0eb113332183784a924242a001e02f3713d9e85bd36fc1c28ab45a80996add4993ce8abc9019908e71460c9b4897a89e192cf216c6f70a548fb113d50a44e7194697cc02ac625a04d7eec39eb9ac86ab694cfa1cb67409c1dd14d9a1f4e0dddab822285e33fba59467a25409ee455acda5ae711cf77ac09a45e003db40f949b33e83dff4c9484c3eae2d3eb42c865ca7ed98d41000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00210258a17435299879f74d79739a834fb896001e15763f24d5d3e2c4407b4e5ee16c8d838c360ff74fb8f6828595bf58fd85e5ce69f16c1440bb9845a50f52d780205e3936eff39eb42040678780c5e33f447d4cd2f5384552826298ebcf5aa48a41210ea961ee74913637263fbf109afdca5ee1e183fcf6aaa68b0797cdef6c27a00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa133306e6c30713109091d037b085ef01b2405f601bbeb27486e410125c0b1a3f3266e67463add186a7095e29924102d2de1b0d48b90bdabd639b3ab937be793c4664134ed39ee3fbc6df3b23413a859b5716e7951837bdcb028f998f2d64f17e77c212a7f74f91d6bdf01dbf8afe5398ad1123b558ec4bd775141eca32cccf55521d0bac86a039a7630fbb423b579528da8303bb9742fe8bfa4e728f5bde6fd2a3336c43d66e6eb0db8c3157e8ef1845906b01d58d501b74cda3205a84bc11ec22a980d5f4ffe91625a71fce8a3a45e8353ee135be89aa56eb59231b0ccd07bf0aca24446658016895c4fbbc51eb3edbe46ae204370b2174771add17d10ebedcca058c25aa5c4169a156ca33d4c5bc1eb10d96b725bec1b752450f70971782c458dfc4573284136be1dc8f4d1319cde2de351fe40dc146a86e572790f79f09cf8efb94d59bf7fbd86440ece3389462dd6f706c50a9c27c125a9fe0e9d15324780743d53acc03611589fed29a0bece7dfa62e96809a5ec562a4b7f525dfc00784aa2286be4827926418cb7a6717ff137cdce234999f0dc4f2c99ad9e3a72d1f8e636d486712fea2a8aae2996cd3f762e034e75c037094c5dca6b92bfe211fdd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000073472398eb1ed231a65277f5c5c938242f79687431fdde0a84da11c1b04206908cdac27dc8b744d5504bf4e5127469d6b89fadfa073099c591856b38da0e92e072d96e8b342d72641593b9295e570bfa4b0cdb16125bfddad19b460505640b0450f4e73c394ed7bfb8d165531fc2e0bc220ac9020b9e8f6c1146a65171f217f6f8edf49979d56b1431c808a88c52d94d172e206109f4f50e474e420f8ff78b8e0008c8f77e6c332cd3098b4433f03962112e748501326b188fa101490431db03ca3ac749cb4e0cc74c1c06ce6cdf6aee6f409945d0e34c8c245a910cd200fa3de3a9088cc9e207fb4f7fa1ab6e5d9a5b6d77173ea8136c0d65191f19597c54029eb66991b7bcbeb0b57df3a65a9a3534ff2c9a0ff7932a8f05564e5d2fe0590f86cdeed13b5e381e4ee4fc4a88555bde5bba47f1673ec5a4d95cd2429d07bf9a8712f3c0ade4fd9f5dec79587f563481f5866722f7b28d84ce93750c348fed9b81d941c844265265995af69593468d221bd48cd856a2270e40b978afb113867d04b0a1d23ccbaf8516598b818f35533f3f479eb8e8366b7e7a76993b01078e85a3d6b4947b89c470ab143f22037e44ebf9a57d522af9d57df40ebb7ed37ddbf0000022800000224000002202423e4c3a9673ae1fdc643070a5ab2cb5aba8d4ae28cca65ee8fa04c7e6ab28b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009539a14858232b3ff3c522cb297f92a633812dd1876662d6ccce43399156dd087d221a4116709ec09e9bc1bd1cfc2fbaf5165c02ceb4f20e395700f10bda071682d7b9051c3ac2cc738a0900292e033a07c22d95bad3e15c54d56abb5a8a97d1c4741e310ae4216575880c08101a4d00f823fa8e0233b5b82094b2563487626584d7755b15c42701829dab02be37c61405235f48c3b2ed1a5d3290adc36ab6fa62da9d8d48557e9fec0d6de76585f0018a6eefffe40c7531b9dd161b42e7a976f7952cf9258ee1a63992695f04e25a0fcd1782dcc8676c6b316ef9786bca6cb1c5b45a7f61274e9138d8ccf5e9643989572a116ce3e9a3acdadd3c2cf40676469e624b6ec2219a2ee0f582cb7e424011480d6ccfd26542430dc4540ad734e08e6c8134b11b810fa548f802f0e507cb9b2a5b5310285aa20c412cdf9085724e64eeb75ce80168379be4a82319aaf3f9319a15e73cb67a66b2800118a6e4d2bf7c23d3a69cbb5e17a04edfc85b870e8b85a624358080fb67ddb4c98f772bf6612364a1d1a8130f07fa89745b0c56f9d3ebb02e8a99cb7e9d909bd6a9637c1fc5f65db34b2f8c17f079fc61f22d91e56c1e84f4627f6c66ed960e929a1d791d05a1000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010c55ac6ac7d6d91fc3c46bf358637914354a682745744a93108fa2236a36bb7b0208f9f426ca566c2354fbe3c7d3863b5413a53d686683e334cdcfdc14a58c0929112f8e5871c569cb1e123181a5325060294515390d69a2e7b82bab9e3cecad2900000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019e5e0254c47e9bc7e7dca8ad7e76d43f020a6f5dd07eaff9c3912992281942ce5cf1f837cc17def36abe3873d79d40e6d73662a2ffb1cd16cbf49236fd0bb74ceafc72e18abc4d4eb2096d2d5dca07b6b73d97e5481cbdff46d79ae6d03bd8b82005a49d457162d13309ee2b0d79d91b3e141ed531926c7615cf3b3da93359bf2e0901fc39febabc698d1d973ee08240946cb84e36acc0718deb57a112923d6a5d9c75653ce24e4b0485ca347281faf4892cf0d04e1ff37b55aa7cb963bcd8ffddcb059d28212396b30fa467751fee43237b16f0bd828ad90cfe59d7d05cdddcc98e30f0455a69505bbad9c85ab4f320e30c4fdcb3be77c1dd93eb6a946424e07c512eedfb61d239df61e5df7b7a678c57af6ea99ebee5bf3475b06a62f86dad847b0078c5e5ac5f07d245c9ebee6fe60863274572e9b6fb26a446170ada3d1bd7578a8a40a8a11e43df2264d7166eb0f3dae4b71ae3029ace6d469e7f1643d95b02681f996d71b7756c251e09c5ce5f3d762fbdf0ca466bdf69dbce151ffcb49186bd58dfbe0835c367cb3ad9f0c7c8c4c3227397666a9e2edaab56e272db0e7f4c27600094d8a95123cca45e587c05fa29c17a8da5a71139260ca34b4d68800000228000002240000022020a3d6770df07a85a52459a40ba364ecaa0ce1f50b8c9e447cc84a566371ea4b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080068a36a32843d1e69278563a2df93d49d652570554ee718d8fc6c2023f71d989b4c5a6dc5a95cc7655042d4e3f2477e336ea8f76c13b9b45526b55fd656f8f02ed3f1aa53f2b64ba032a6a2c836890c28248132fe544bd62f36832725ec705ef86b8c127da29f273be20d7bbc3332fa5b4f61bd99e8776ef06810a67bbb86ec2cb2abb8a71866110c577cc50037c60db95f14ed326c3948051f3a2098c93d77739d7a77afd85866f31dbf9b6aab3e143e0d2f7fca3b079a095e8d92dfa6a0e37554b4556716e788faffe25905ecd84ed2b20950fe7ab59031621b0b2f7a59d28d394821eb55064f62da232e82db6974d4200f907e4751195508f25604484b241ac5503de4bc0231b1963f7428b3b00c8993f30d2326422de369592314ee133279872da050f6f0c41671cf34f8e4a17b363dfa0cef0e6e215ac35e0d72e6bc6b5797cdd0b9ba0af9f5d1839f790b17374569388578b27f7826398b595f6dfaf31ba51a35e9e364df6e725be020567ceea6fa08a9a33799ef7d26db6c91ca07d1b027c9dee2f7ae829bb2c0c15cbec048734c95205f49f10eefaf46a276dc6c4e6d3ee59dd5336b51c3c82a4e31dfd8c96d9d48e483b7de4425d95ad037bedfc000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400115a4b65d6aa06aabe61d1e8b17ff960ebf66870c7a61f2fa6af554c0b6913059020a36ccd913cfc79de686864d7e9274b662d612e97a99d84524ad38e74056ec9107078f0a2487740d6702b7d4079629dd47f7a851b973ab7e56422f050356ffa30000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f8414bea51ddd73a2a98f034790f6b987461736fe031a532f0264eb9d66bf634b0e9564a909b538b99d261075632bd97eff0e106df436e56294e574708ce33c080e7e9f9b3e0ea6505c8935d538f9880c932f0fe2da9abdafa2eb3809183c1a7508c571d99174b779dff7a6d38fb3b1115443a518bbf5b263cad898777fe9dfd16e183ebe59b57c00f201d10f2f6f8c67f2e43a316f931166c4fc00158b5ddfaf74dbb801059987585493ee30b31d28bf45a6dde67b92edced943f9926a42f22ac9c6b8eba26d0bfb4411c82b0527fd4d0f081d285a5c5b993448de2164d3f4a5fc7d2118d08d96980fa170979d189399c399ab9bf03852b289b76452f4ca483c9429ab0df6e16f907d1f9d4315b90833d07b697b700b57ff04306a585e8a5cb32990e6960ed755567d299f4bcf5e3a86bf1ac1b83799dd50aded1acc49733c7483ce96323d1b335d7beb4ad6e11f457264cabddc0b92edc65c7e907081c8eed3669284d7e42cb7cc93c2fa33302933670a981a5337c06f2298d02590af9e3dc87efef6b33f24661e7849ed98615c1371a9c0c38e89292178ca5df1f247818ec376156509c6ec2b7ceda00c6cc2761adb26a3aff3906210837e6d6822ffdfb000000228000002240000022013d95223d0bf2a6d7aafb44e8463c9db4833a75d64dbbdf8c0b9739bfdce89f1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001145b7be73f7fdd782dcb91912b4e0411579ecae9eebf0126e1b5e82e77930b0ce359a00d8d1e576df96eaf7ec003eaa435437de3f6ea9b3092026da8f9bac1cfba685accc1ab5a191c4769df9857b992824d88345e1cb9f6b5bf8af8b3b16ae62dc7d464d4653e272be5de3892ee111a1296a92f8a439386fd3f65b30ea049e914e90e3ddef900fb622216c699bba820a34de7927e7f026c4f47f342d752b6310f8970b9c8b5b40a41ab81edef962c406b3460de5df9e22a78b90a037156950544b6d6edea75a4fb6aebb5dee70e9a6ac66f005c34d88581c59bb39f59db017ee54897acd871885a0ebf4a7c489da0b8e62d9c5fea8d60a9662c9a0b02de5501f4d7b12a2ddc63067052de59a2c0affcceb895ba63b955d701e3865a6af541853b6e162f48a76eedc2e51a8d7ef7182e0b511aa9cb5bc034611ae947f2b2f2fe4a37df774fd9211930870ea5e2ffa80b34ad882c67e47de12c9afe12b32e82562b214f845775a2b99df3f346c80589db536cd17902b43fb9d247ca574bb8605ac56ce6a541aab891e1185c6a9a248673ca707a590cb7b460d4a474e44d3368925a6deece5cf1bc5bb6698a21071599a1e369e91f2c1219058cc14d23426b2a9000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001022e797b7f65afdce736a47dc577dd2634ad9f43b42a1d16ffe2beb9d5b702dd020ac812de73e73226999df56cd29573efc9775bb6e2cca730225e4105d615c53c08484d6a1793ec65899a7c195b0e9a49c1ba742578c637ff90d026dde7e5d8ee000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000880c1f843af25545fedec97abeca081a66cf7ad33d76b08270f117223f1ad26fafdf9a88809ac328bb0cb2e43a25c35d987f7baca5567a059e4122c8c1a12a5b87d70cb12738d51e920e9f07e727305149a61c80aa804f2e4ffcbcf93b78dde55b796c91835b2406627bfe82a92674d2e1a5ebd9667c3fc414b08ed1f9b1b2d7bb388e7ddd42b664f71964576541ca87b8e43e86c7907e8311af4cdd5c97c820776673e30eaa2f0c1b599a24485d9c78b686fdd9e812acba1a01b824f1c774cc14738a3f8ff186e8f146bd21b4a44390822ef03f301fdcb3a328044363a9081b5f9677a23e91e16812f37975eb3e126d150eef7284098e1f89f017f3a93448bf97441116d87a4fc8d69656c9f694580bc1bd792fb1f22aeeb5ed65ca820574a39eb3c87bb0cd094c4ed2ae4bdb874ba88d69d6ac517062413eda76bbe48b245b775290559c7ff271f827cc18b302168a790bd925d8ce1f7301747c3a539a26d86a3a9dde6c2667511a6201e5f4b49caacdc9321a078b1c9ada8bae66adace341a7baed43eadaa5e82db681891e3185fcb73bde2acdfd2bf17f7e69ba428a1ef41b1ad6f455d7a08cda6e47769cf825ac50784d1718fc5a26290417d0582fb33c0000022800000224000002202966e5b5c271e6a552ec85d8f1d2152e9c38d50f5e7954421f36b43710bfba93000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000507222a9dbb6ed0ad12e217d916e2335fa799f4f6b00bd8400b7c9e7eaa27b5b3b0e97d40b17168f20ee31adef9eafccc64f2d7c016fba20cbfaeb83613682bb1b72f3451e48ca985b6cc06a4dca9334c212e7416c5deb0526ce3a2409efd9e44fc0921aa3ed60dc81c32ff288ee357983315af481581cc59f939a5536b3fe5030d4f40f30ef687dd5f6a6d97092bd2feb7c3a2741dfc77028eb6aaef25246f76d2292486ebcfdf3003422e414cea16b0d24b00e00ff8f8777f45141ad71c383248fc3bf439b506c3829e9526b731c37a4e7c64d25e597e721c15ac0bbaecb0e51ee5681167847f5ce35f964546a7c66013c15f26535f60112d18c918f9f552a047fbc7f2792cf06961bd0f7924c55b4beac23380bbfc1957d702f73345c2c7245fa2b3e9133bc20a4894216812da72008872686e5d8e30409944fdbdaddd22e1b04899cd1837b14217a1058d9708c2793cc70ac50772cd5e2c4eead549706b4fdf73952bef64b545d9ace641ddb51b7c68866c43f24f503b4a7f24e8c26f5899685e1897ba9e6efb678a0a9515e39e05bd9f1e679d619a6e7ef83af2d79c57d11bd37035d8b031e56edc479dc4b3f5a68abd54e6c32853504eda0580b8fc25000000040000000000000000000000000000000000000000000000000000000000000000000bec47b00214a62da7667fbcfe0bd03a416fef415cc1444c1b37b81deadc0b8fd9e2a637440f6578c8da2f829abb84e687470e14c58bbd43eef6a0c6acd39cb183a92d46a2020c38ed2ba47d952904e2b9932cb5c27251adc0aa03bea5579e3a648768a564e2200a372064b79c72870afbf2cb39e845edb65444e8e1fa7db39a924b7121bf8b00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7bd1bd4d46b038aa3a1fb405cfd956410e6567a6d0119b6f29e6059a35ca646a54f7d54f430f1b1475f37d09f7a468c2dae8521334ff8af66ba02c8f5913eddd3885907f7ce89a56850778b14e6c71d236165518f66f6a2b8007ebcf40c4f379494393b74c568287d4c9dc6c73b9c1d9f2530c152003b87aac565c337325603b9a0c5fa905eeefda432675d23ca5b3ec04a00c37cadd6f619b3fb42e1af89a4e66fbf399d3249207fceb309bc000144a92adacecd288c628fedfdf5ec40aee47cf55598446c9da89cce2e5a01a9c41fa85ba9c0a57ce464c1a42109a35902ac3728a0f04f91daa18255abfc9ea8b905165752720defc5adaa8277c1c073bcc75a2059ccb2ab47db7b4f06334de0e91ada5c2908cacb38eabbd6914e7f50f540dc99784ec535e55e1bedf3b1df3376130f870e0de4bdb5bb29300bb79fea325d76629ea5485bef8ddafbee16796b65abf697c114be84ba8068d0fea992453bc7c45209bdb9ab38034f8f77bb5faf91e0542830beb356ed8e9a2023a7cad1fe652c6a6e762234abedd11d6e8e4157e34b6e6a285f6fc573ffbc14d759c4d6ea396cc64979117d5727704e3798acdb3d4aa0dcb801947a553f8d68db3f419fc282000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cdb580547bbc4633c79c32003dc923ec1ce892096142bfde72439ba810a8659ca1a6d184cdd07316f441f3c2e28d62ec6e328147b5e195d08fe95cfea133c29b6be8d0357696c85084e9581c2991eb9147f4bd8afd0e9b91584228cb7a1e1edc8670b9221da8178f382d621962d21ba98cffe06e8d01f9a4596cb6d8cf495f4c75e30a993925ce213f7bbdc5a766c2fbed6adc3ae2b4d1a2281adec0cac303b82e21b001dc60fe4929ee6a393a323a0deedb1389bfaf56081c2ad0a121a087fb1d4da9b1c0b8ba65af289beb8cc81f1aa2bb0594ec6d92da3abdf49b8b5fbfd11f6bb13bf343888f75cafc1815178a3658a348ef749c1513e1d366f7cc80bf728eedc4a0644c42d08e1bc65e049186bba27b378ee66f04d749292271a5838bab5061969e9b8a921aa98b58ea477f3cef20b3fb0b8314374db3d2078a3e1913ee361eb086c8f2924e269c16c0f9dd2428a54b3898172c143be0fab5c3677f1d29217b1834ece8b28f80afb22ee2027642aad3cef73bfae04e85f57069085dd6ca19a623e356ec56cadb72dd099bbde69075155469ff6bc9814ccffc6323209c27584f0baf1778de362288d26690dd6f74fc870d91401518c79d3587288b116200000228000002240000022004cdc87fcae662aa682f08a95a074410a33382cf796ad560b71e3daf6c9c23190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012c28620eb12d6f1d04043d18414b0925574ecfe1d016c9055f4983b3a17f94cc05480084259cd1c5b2ebf8da90666109f8d17f4f70e16d6af248b1cb74d298b8ffa3a0330b7a280ee39244b91a7d13f9617bf6d47c137c3fa83834f2dbc769638d83a5cf73cc6bb8e36c05b4931e5de19003497bef6b65c84eed84dd2c0d2f0155050aff492cddde6bead5edf10e0b1d0a52c07ad8e7a9d4798b3d1ae36cdbdbb3f56c5549dbda4444002f9b652af2f39754c5e33b71d0a69451840458777b9ae515ddde7b386d2fe617f058501d4c634e4fe5076b90088f1c4a52d7d777087a58cd0eb3e8d981bda62ac26cb521d30ed1109a2f50ef8a06e1510f689a088b368086512bcdc0281692b2ac4d66cecedf6435d353b57882ae1d1c5e98a4e1f5990789b51cc785787caa9fbefc8dae1cf93118f3dbdeabd39902fae6cd36ff5ab4caa4f9291636b42b141720a44189b63996cadafef2ee7de7a527536fe99dd44fc40ab40778981ca3a9d745f5c04c23fd22ec0500647f9f1b86c5deb9a92046afaf875201aa2b9aa5599eabe015824a3c179444eca60f51b558205539f94168794483759bc22708d8b0374b191386b7dca179b42864743579e765f37efe880f9000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400107a3cdb5a3998494e60c8200d2b415c9ee4ec5bbab1b4698c15490c5b0dd15b6020dcd9dc2f3f3d4e22fb667b33b8d6b6e72b5d42afd3b4e838ca6f66f3b5d88fd1facf56d7274aee598770f2d69db010a693055adf86fedf354a72bfbf30be82e00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099812a8ba7413c5782a50a730edc03422e6012721bac935788473fd045900adea08993ccfe666f33eb39b97539ea0b4f4afa4a8782b6d8953e97e6d494fe7b2883dbf26d078586e0b4701e5f0329eb38f6fa2de1d8cf1af4fee2fd2b57ae4cc2c2e67ccb0d973dc6c5547e3247f8fe3a0db63a7449132161b9e0fd660a7750bed0f1f0d79d4e7209e73f40e92f7b32b8a5b5bcd7f11c69ef0c9b88955324fca2011f9a8b78ef04b37002d4aed8c2cc9144b89121927c73c05f67b359f5c190272cdc6be55a9d080e6ba4e127f32018523679514e52ac2bd2dcc4bf1beef831cc9e335fc93d488b8262737bcc4fdfabca023efa75c7971420965cbee1510c2c0b9d879de74826a8853f0b10454397dfb90a9bcbe06e9653359cfd84191db957a4d9ae324981386914ac53eea3a61ee2bee4740913eff682499fd44b512c632b315e243a9db869c53fdbee155500f9bea0bb1d4c533d3bb2cab60b2c2586bd87ea08fd50eb8b65ba339601e2aaaae82ee045b0eede9d6291f00512bf46d02cbb17221378cd58769ec351c51f3aec84dabfb896031ebdf593ae17f57ac2db9885c0c39a85c3e8bc613cb4ed539a165d7a976776e383735e288d7ceb99a5f0f5cff10000022800000224000002202f8a1330566465bcfae35e1f79e2b38f97d8a6dee50646cf862cad55df7a62c2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001599b281a60f9d6fbe380a9aed139c6507314c0312eeace2173bacf4f485d0e986cd2351cf88339d078f549ba84a8499bb944d3b88062d32a2d49ba6b2aace494f2d3d25b309c9b3305658b906b8a1d1ac388d8dd3c97810ee67e6af1c6b503c7e4ef130c12aededbc7b251f85111e181d3d71f18f08e6cbfb836f485e28e7d2f68205d917c867aca12d4d267d9c4c2589fd88abfb0aa05da703183704bd8dd013445572bc5b63737c8f442247840abe201abdae4490c25fcd99db7d3a9b80adb7ade3064eee0821d63f9e79d0e81024eeee4ab7d1b42ed83fc1ceb65f15fc4954670c8802b19a5eb03d7b2a8d1982bb802abac5481e22c077c6456329e9f9643ad8b7d98c7b41df05e0ce1d753a291db0efe3dd9d4a0ef77a27eb433800b9b32a6a781f801857fc11fc35364c2420c252b0a191fc0cda96bdeda3416b6fb22ca681dd2ca2fd06da5c1f8fd53928c86d72acc6ae5f74c30019eaeeef0cf5bec2c879df2a09fcdd3d2a93116d7abd377cec12e128d97b55d338b5d6b4b2335d3cbd24ef597657b05e71b0b1a2cd4ae14c7736e6676cd74372c9330a60f3dc6315c44bfb312b8e4550e2089d73dd61802a414bafc46b652027111ecca7637d1424000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011bad512b14e7a50ff1d95e0220308ad87b58133db7d5180198fc2f4d8a084bb4020f35c20aa453f18753fffd42081ccfabda2156852f4adeb480699342ff5e71bc10a25b0a5045a916acb9a88d7e9e912c53079faa14548969d863e6a1f7342969000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4fd2acef4ff2822d2fb0679a48443edb648f4607ec010602655be33e491ff238656c9a15e7ab196d24852d8c83a48c6a53d4c6a4886e05f60ca9aef25bd0f159218862b4c3fd90bb25a103041a5bebd5e040b74c09cccadc222c90e619b809b09124719dd70a45bfb50bdae9a326cd3f02178516e361271c9fa15337dd8cad471b8983fa108ea83cc5f117aa7381d181cfae83b01675f5ac707c2e37eed3a2d344045eeb6e1a9397533f30c215603d6144c128f2d488a99d8a7cdc71dc7d1ed9b4a744ba7bb9b87fa65dd482796fa55898381bc6c4d441f161b7e780c8601d2393a3cd4f807f6c423974399a9c986f561034d14630cdacc29f7bfa03492ed3be4b8fab08c0196b686d80b1ef6efcbdf0173278819d099d0d1cf612053835bf03c0c3628df1771225c373597b64a2241f7255903c1ff2f942198cfface460dfb0f4185c8ecb3540dc4b37127d0adac600c5a797af1845644edbafdc839ee5ab2d985fbd7a6b81b1571d8e878299d8fd048aacbb077275208dc99a89719bbf06c9cf75cddc8dfae88531527d3da0e91cfe801505215549aa96d38e4d8448fea87db434110e8e247f3a670e85fb1c2464167d85c28465f47b4a7c4ec78162dd88500000228000002240000022003d1af295462cecbb2751594ea93ef3a00e96bc9471425c1230bc75b259090380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010be80d083f0315fc8ddeb3db4f7d6227dd03b012fd2ed65c65fc983bccc688c7ba39ef763bcea7300b931499dfb115443191deb017f34c0cc7962277aa342bce16deee3034ef9388b484e9b1187c8ecf3b61b94a216f3521e12eec4ef9bd2739d2e6cf2fcabe02afb90c0e5890e038be0f360da09ba1e7e47ec4210fbbbf52faa0e3b2a938ec6e8916b036aa01c2eb32bc160f3de81c3d9964fb4ad60e6fcc7577f14535ab8f5c50cdb7c2a89c75ba3dc38977abee35c289b0a8469594bd5c600014f896a5d7cf41fe3beae592c3dc8cb86b451d11e0f8ad6e1c6f5bd22331feca2fe46e276ab67fd846f5df54066b2cba1b7545aa156b4b036d2c14d35b798195b502686c1524d2e69f5bf048e636aa4f6eb5f5186ada1c953ba5eace5748df884100b8bb0230395d1f4cd3ce9e953b41bf228300b73c749d755bf5cbf793f5b1b168ba1eefb5ed86266d1a263c46b2f4754e1302de3a8ac8f4f3862658d5d81a806c89bdf7399a5fadce0ef2d9365368eda6a6600e44989424151965d9f817814554837401385e5fc66aa2139999611870ec54fc4849fd61a921c261836e3e6aaa942b05bacec184e53f381f859ec0c945aa0b64dcdfff592afff4c73fe25000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001291710b71274aade0fed760e332616741510c8c137c171c7a837863753b73eae020f8c158a9a4a671bcec9f5639f40a593a35b7fd0bc3cf7d1daec50008dadbd10167f98e129e52a7c9666025583fad1c7e0da0c9568077b03306feaa967e0785f0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bc4831a1a0b8585d5b1b6f8504854de86e46ce9e2487675625e277756826b1f957dcf2a1d96e312b361b73ad1aa551b040041c41ca8c5705b81a4eaec0135b3a2ba0b3bf3ac24b3aed3b66cd1853597e5012a214d3cb7b12d3720f233a0cd286a43f6288aedc92906eb019f6ec2aa2e5a1e7066b5f8a487200f1da9bef52c96790241976d44f837c8c2108082f3c4c8fe734339bbe97db61144d3dcf079709f4bc5fc545813e86c272dacbe217a49f5be335f4de3e178a08f7840c4b8393e4957d59d7d77970bd8d0c0fe12cb36cb70ccaf9f18a3dde8f90696f4838024c329ac4de1fbbe07f047a7eee79b045f99dc5dfd28a51476b685363007e631db8c2f1435eec62e80cd0bd17146a040210f08378bfc78de9799c649e7bd568b35a7c0d5dbf08f7491d2b75a6fe66c688dc68b8f3dbef5ecfe7823e67e6dd3aa0eb1db6039c5bece708046288e927540a3e421c915cbd1749a030d25ffafe294456ad8dcc41ff3ebe8a79c1f2c0e26bf894de285b9f6136244720eabd244dc06c2bab3d82f214aede4510e470c8040e99170eee7ac7736d97c3723336498695c7a6499be54b2e8075f85517c947aaa1205e792363a0adb2808e976cb2b9e7163a421d50000022800000224000002200a160fc376a6a4823776282f021dbf9b26fcb5337ad8c883ea809df0c107732700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4831ca2872dbe85aed7ceadd41f8234c0f610e2621f8e8719e1348ae2a30d2b052ff0ff88007f141d77c5b7883af7e18388cfafe9eb4af1225fcc40c6a587f2d57f3cefdebf85c10c9e04814425694dccf43984196df8aa21f0328bc7d514734d42731ae1d748329ffaea10896c8529d3533b599c05decab0b8ca19159461c9150232577d80fc5df9d460585ae3de8e86ddd23abfa2008684b51b8db5072bf3da0900a4c9c1b824b0f34f55da947d8c8ab1c1761d3951ee75c28a5c53714aa0dedbce26f3320c4b3f11dc0992e395925814c19d44c453ebd0027b5eee9e10e600a973c7b1adbba25bb6e48e2a66f8cdc91f8d3c6ebe871b83c5bb2b0fe4cbc89aa929ab22b9b6f316df56061881d2e3009cd442bb3cbb57fea751cdb245b63fdfaaabaaf525d70aa0960fb1937adcc6570f744bec0d475ea3576ddb5a681efe4ac1bc96b912a5926e4575bd8fd2ad9b6427cd1b6de6ceabe7591d83010c890a2f7d3b772bf832850ead72962eeb69c4b1c020e8499cafb085e844953d407d1b93478910f15bc17f44aaefa235300d1542e27cb80eb4dd29886bf2b2fa1b96159ee39989c0a9407cfa968c764d312042d4cb19d2196bb9a368301e6166ff1c92000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011dce07b9b8baa3f1420972117183cdcb4ce846da76615d81909e44231dc639c10210824b3ed339925b7482e2622812a47838b2644da6b7299c9078867f41ffc01407a821e6cf8ae8a34d6951276013307d36349811e4fb4a45922e6fb32f67594e0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d7a559f777dab2907c150ba1291e11d6870a8c36f9a1c0dbc12acc847e9782151bdf00b4300c44818e9725dad56abc3a7740571f649ea11a5f5c459390f96c3c39604765425b13062a7e42c37d4107e7bb32a22fb765994b563183da5e8d497bb779f2140fee942024aeaba22922bab83301d05fa454a040bda8c926a137e82b684a417f96575eed6cc0f6c7cd6d65d88fb5610074b671b37e718ff5016c7065085b4a8197e5bf93f41615eca2d75c512fdf966126b6560ac2a95bfbc5b27566028b993e249ca4333171d0576dfdeba1fd734cca7788473c1d37304f23f833500b14f56c09a877034c3b9ffbf88241309a4bf61c0aeccfeea3d8e792fe7b28a971d285d6245d0b03d9b7e958bfb6e1e1da87d138353e990f3dd504dace5dad00028d91f0bde4c6523128f5b5af76bf2b88d2481929b18d55f0c0b3282a54f513cc05d293e2af117932ad72eeef2f010c86b4bd61bd91a802a360cdea6ba2d9486e4f7228a311c58fc9401de1153055e420d5e558b1d4ddbd995ae056363e0868c4d2197ede0a1cb895d2c374115fea49adc9df2d17115071935a3df9c5fbb8e8ff933416bd21d10ca91193dfd0d5c822e6055fbc2ad6c807e2ed53ce5865e9800000228000002240000022024656bac6ca8123405894b59159212548b59e2c0974533f18d993a147776bdc700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000943b1388f18fb1368792c87a29ac166d28489f6346cd1a61847d0d6cf6338f4373c21f8db18bfd832fce102d3cf21c3f0193f7db2ebc8f1eba1b5ce9332b1cebac4a9ba12ab9abc0d6cdda3c7509eb43f14c0be5929586bfc6657e6185ee3802c4a22a0b0277088d7853f7e8894725d192e2394316350b2de0a7129edaa9242ed225a6a7dbd5dc88e48d1fda00c6e05f79c39f00b494aaa21e52395abee33be768ade0c72a798cc13aa9be6de33ca106f36de22b5f9587d0a117ac5ef68520e92277154447b13688deb934932fd95abd8e6d92b0a37450b5c4bb43960d4db1548e3f8eb4ff5c55586b5d5191e2243ed1f8e916038057de2ae27d4f5b72bf5fce7f2301480d44d3bed44ae80a53e395b41d10629a24c46ea8e6d730e09924eecb8ddfade4045da20e1ccb5f6f015c6474107f9cec58b2caa34cab4d6398e832d9f8f915cf618211b5bf99403d424d517cd2ac7ea94e77b3ccec41c3a4cd540fab927d8938a730c52f648d929ec3f8b7ffe562c67e45ed59dbf244f45c39e85b911d77e8ec82b3315af5a13d75ef09b584de39f08090ea76c56ad270d1babbbb1e777b37ac55e186d32f1b28b6915ba27e88109f619f3f7bb86d3ae988474e10c2000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0021d9d8e9570281fcb6e9ad396a5d5e07534cd568da723ce74513f73d4e77cce881d6739ce4f1005961ebba3cb6e21933a1898acddf973b920121304a96c33f0a5021162e826d791640d8852377bf748624a4f16cc39b19a10e5567d14147e8b85e120453d7a21e96bb89b3bc580d5fdde4d832860e44e4b93ae649974cd3b68294b00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000225cdbdac9a9cb3374bd89dbc4accd6d400c4443a63c4513e203c06b6a79a35a3c7d46307611e855cf0f82e69b0f5e564329e5cf0a7bead080d2703a1c4440b488742b749b0f6e2e35ec423f95bdbd4522fa3beffa5f226d5db2a8e2ff0cadec8db1e0ae7c1e1448625d3501ec7658e7670dfea8e34c536aff8db0cf8603c97f0a39bfc7ee8025dd4173a838130f32c96c91fae2cac15d470ba3590679fece8e27615865e432b0d6cf8a4d6a21368115512b177831b2a95ce647057181f8500050c88dae60c8311f74a921877a616da2d5b6d15ede7cc02c921301711f62a1dd5480383c3f9689e7fa7d6cb632b95e2a9a5be1d546b56ac9a73613c4e285f694f2882cf25ed8a767bb5dc2ebd384e2155a1f8cea6e417c8349197440d2d88c6c5123f84b3cbdfc128657b8eff22071b834020064cf6f18fd83c23fdf8e2e7bc643035281432bae490c8e60c0eb7a74a528400324cb860b8ee02c5ed68ffbe13baa17b1adecb9497c4daacef51b488a406351685f0ff67a82391952e41a8b94c6f7e94707a8824cdd54a3ec23dd5013f630a2365718f70201570ed04ff46afe20e6ce5e7124139445d4fc78220c8c99852993b62a628305a28f50bc0f35eb4f600000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae130f8efe7d06c666805fca8162f2751a526b1795790157595d94fdddb2cfddcbc51e8589e91fdc5042aadac1b961b69e02d5e5cc98ebd1bf85af05cf36288fc11d7d28c9d2a119514b6304418762fa0feaa65db71ad8e8350461fab1db2131c800ca2e8738de2cff8cbe26ffe7da30dc6bb8ba54c87b86e79f43dbdb47df94abf136e2759b1c534db0a2279d53b2cc8e2dcbf84c6788872497db311603708394ff3801a2a59c3bf9177cace32a8a126b4f739299c0b82b64d54c39b26ff1ded933e2eadf2b9c328744034db79b4ad3367476a3c1ac00c5df614406e8c03d42cbc09e2d14cc5deecd12c5356e93524b8b6bde1b514b2b077cc1b422de3858c5af4b23a89f8c95ae8ef0acd6f121abe29216fae74acba996391eff99d6bb8a1384c9e012506ff69e1548f4ef0f90565e3784aebaa165b46618e76435ae2119ced87153518b4f43e26127735c94a5382d80bb5f41ce4c5895dfeeaddd5397b3724540cdbbd4b89a1f39a1adccbb84b21e4b53f3bec536929faa6fab75b79fa0a8265d4f71997f6bc27bffb4557a87743573ae8fe838f7931eefe5004be3a55525b68e94cf812fbddca7fd0fc74b93cdc6091cdd60e380995788acc350aee33e56000002280000022400000220172b09ab94137954af6a942e72b612cf924f3e9156217df11683e26497aa7c16000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e9591f777b404691953d05250bd2b96fee2e557914e3015811e4202221d00791e47838e0d5829db876d6eb914cedd998df071f74e2a9d78eaa3b16393293faa97dbaaa3f5b108f7c9a5d164d87ed5f42ef3238db6c5df279711259ca2c18ec9565dffaeb03084a8da56d377e5b10f5df9495d384a2261b309cbe7eedcb020bcec8375845076c93b1df455c5348009da27566b921eeb53c6c43b5b8a975bbee0e5e97b93f5a49676b389347c74c2f29c79e7ef786fd6c2e2a1e2d25a61b08275845f9e135c52b4a2a0d84534165a72bfebe7e051676bc783fa51e9f6ece60b4d01e558186caa61c2acbb391c0e9f2e5572cc984bccd5db191b75c7acec43aab7ef2f0fd53c7f64a36dad33043483f6835e76b039cba7a1b058cec6d56a6480376c44389d3bd23efddcd426a6f3ce2b92b5217d23cd835da889882e841c9483ea1a3dd34a54276019d568beba682350a0442dec5a9a76f24fb6fd651aedea2eea2faadcbaee8beea6b8fe11ffdbc6010007481475fd641001db1eaff5115524da90315b2600b851aef38512ee077d848cbab3a29d3dc6b16db1103c8883832443ce3e24efd9367e240b886fc3306ea2408a98f76e20d9c9c670e29c099461f370000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400123136c09ce48530299605585905ff830384f9226381faa053500c6eae176cfb70212b7694170648c185219997ff57eb3d47eec9deeb3a17c834c388fae53432afb035440ad512eff0401445e9087f61d9d84c23bdfa0aca8d1a813be2d421947db0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008717ecfb4b456ee150670deccc73533d5e95d720a4ccdc2fe51703ce93d24d28f11683cff807017441c11264e564b77a0f46e06035bfeae5f4d2a2b808bcb72ed33cc0964e86029610bd771342f42a58e573bb3de5351f17a8ac0cdddd8b5427e282134ad3ac306c3c47d808bf480bdba9d42f73e7ef578a3a7819ba4aafd297bfad0cbc3b1c6db93b55216b540ac158330d340aa4611cd87a527f72fab0b669f0cb4980cbe2263d0422b6a5db14cc6b20dc6d0a5d104217f392c076180b6a66edf6176a479f9a077b00c6ef162ff1869b7a854e40ee2445d9e34cfe45a86c2e9880e8cb319bb2187407b03e6c051b4191c1b7795826ced53dfbbf6c329dc47d3239de2134cdd1332fb7531227042a4e5ddb1a9d2a328992c75e5e3c9528a01e400d01da65845a6a83c9b8e7b00cf5ff150445142c945e86e4daece6d0269da30b3bad9269f8264440a7f7f2467199b8eb210d3b6137d59109c6c70b984c2478f1aad1f08680f6211e9149550ad254af12c7f8c4aadd3e8ea0eb8a755c0cd33acb364242f6ca7c3f353976c02d0e1de164ba0e7f5fafade3eb4ce5d01f830ff23d31f66bb5e1c166dbc5eb62333a819e0471f7604c8e0b4783295fc04d1c433400000228000002240000022002d7e3a82a248587808ce45b32fb85bfefe650fff6958888bd8cdac4ce5ca020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cc40ea66a717a65b37a30446058a955790b2b7845b8663de2c023b601e637d833363f71ee81fe2f2f71849bb4d095772d57cbe7c6a073b841e641dbb1c5f1c0ee219d16b800e5dcd626d2234ed8eba4e1719a85faad6b0178934f465164f1240026a7991164fd0ceacdcd5f80acd695275b13524537483da003da7acd1348195e2d9a35a931a6d93797243ee3cf4fb35107df2959eba2da338543ac3bfba33d9d38767041c76a6bfb50c2eb7d8a0bcde10b839ccc6d5d25d087e3104817f23de9738ed8a3e582cdf64547c66cea278a5bf107594f70791c36ab393e021502b2832dbd15e7cc3945cbcb7a6b8dbfe064a440af12a5a084355abeb27ae868e3ce1d87a5738fe2f01b0901af31446c734b1579a5d05df7e6557124cad2c7e47448a954e59a9015d0d569f608037b9669dc1998102e38272cf8131b526f780edb77c6d150d264b9e80f34b804334f233cc3daaae2b1cf5d33b749d8aaffe2e646550b5c8ffbf0f67d92650e31c128ce8788e4f298e3c94badd3a46ce9f008594619bad8f1d0996a4c3148c2613aa3ec4fcf10b029be4c64fca14e49b4cbb166a1eff051aac08e32677e1962dc7dec64b65ee7fc2410b4ec5557c3333dc050f3e467000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010336831f7c25aa7a83ef28e9264630ad11ca34d613f064aa1866f45f58219e960212c287a3b3fefa8f9fa430a898c9e6bfe7bbdb7f54401cf30596c742a633f44a2e3e0846859c27c37c86a1cd36a764686058a2c9b7e3183c5b5cfe5dae89e237000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3ca9006551ab7b3a341498f8edba950f80c5d764d56a24bfdc4c904525bba94099e894bc9ffc57377c1bfb49282fe7263692c73b68b87140e65e7bb6618d5316e2039561e90bf1d5aa067bb241e4905502e5646bc92d2bdb7314655c8349bec24ce7710ce1a6d6e1794fda337dad31ef3e7b6ce9a4e56e8fd4d50e658a437e2c8e7fbbcc15689eab6ef4e3b36a17db92132782ee49c4a8949a22fe1c894b1730774a37275aa3b52b4427058c4d436061d5ffd8219e75c764f0edeb9ef44aa200238961915b29437114dc9f9ec663b31efc9772f7628e7134fc9aded0264aa12b8beb14b5004acd386d95120247b7c407787e87a4ec99a8e6589c40188bb51b93c424ef782778f5c9c080bb7f8d21ae57c5d304acf4fabdf25a6ee9b5a869c5dc29d3e96d23140c244fd6041fc207b990a424af815d6073ab8c404848089612db04371a5a98c0571ed904cb82a76f3c19d2216097f5c7ba5adbac4013bafbb2a2332c3d84baa6b223fac8b2a468032982a2c7499a40b55a83bb1ac71056b13697f56ed6d1ad63225f6c70837039bfe0368a01812556b6f387eac9d09b1b655af58189e7fc365366aebefdb2b91a7dcbdcc714501c66cbb7cbe1834f641fa38140000022800000224000002202d144bc67c5912cf49cfd141ed116fe834637c5249c2dffc09d3ca69f0724acb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b680a9f571301af739712764fe56e94a00b040cf809c21defdb81bbec83279cc98a79ad97c1bbcc345de50f8d704c28c135705f979aa04c39d078eb13a0016b423e68ba310ff7b0b56328ecea7d6476a3f832e11dd8d2440a14e94ee3ad8f8ac50ae7908780d9433c5b3a422d8a46eeeb87c1de71649a5d53a40abbaafc36bd454aae6257982a1855a640def70ab90f398d73b48a1a8f6240ed8307165cffe9b56946f83979383407894ca3b938288e82557f341bd7ecd7bbeb4e6333d1e12e983c7b04441acc22f8e39f9364871f1c5f64553ade71640839f2483810c50e5735ec21cafb583ebb32645745847be3896d39e3b1c1659e977ec7a48c1bcce0fdf46fa0eaba8140603843ead0df8369091897b07096065be8991c0e78ea572c055843688e942c8d9a9a46e580c35748904cb12e29dec2dfcd26861daedc35dd1829c631f280c5e9edd82611d04f2fcecf35f22d16e7d6740a211c7be68df1dbece1543d538c273d2e9e1491d9b1b0551c170ae80e6471ccadcea3dfe77a5f12553a0d7375cab8fe0f1c7ddf8ba79c8b9b8a7d95efab9ae8d439198a61cb51552b557d8beb41ac8cca647e2f97f9acab05065e0f3a628e6315401d8513d65601bf000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001040ed24299aa9361158d89dc236542906d90f48a06b90fbf7ea921e92d1aae570214c5a362984ebc00d9353a0a1601f55c83f5738206092bddbd1a6a73c7a347980a0f670993a38a159728cdc08b8aad1130c9db266f0898eed2d50dbc925bd0cc00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028d8ab098d93542fc31ed86e8dead9ba073fbab86e2a08cd89b65a5f4265d4baba7dfdfe69897b0f01cf7138aa9655b73f287caf9e63747a0d5fe3072d9e063d9add6de882fe76b7645ec45f200766ed8b257a857592644ea29d84d20cc9d340651a52eb31a19b8803b2e9139cec5f342b656edd1e917967fbd29f6700c01b0fe0450b32e5a747e109f1fddd6f8c9ec423297c7bb9fad2a026892bb37e317cccad2229ef7ecfa2838303712b805b4b3661d121e7060c11a44d987971541a6927915758ac9a6e153d1bbaa5119d644fb5c677676703c167c7264da1149734d13653cc5c5d000421d88ab580871705ae9cc3d0ca77d1417bfe515c1f4d296dddb6224a92eccd8031e58b4c53e84603ab75efb43397ab32600e8c7380d95bd6b86874dd881619ea3d1d1ea482da4b3a8ec8334a75281cc68e6f4c506001ce03b15bcc0558a76a3277e2e9c8edbc0d604b4cabb8f61761af8f01a44bdf361036f77dff9ef74af4205ee6c5f12986f9f02263b16814446aa4b537335a7ceb101194f40f5fc6b82d2291e074132830bb7a2fd91d4c7e280fe2d104154b5d9af16e2f50376c3988de953216fbc3e138871c8121feb7e0089ed7dc2099ab782f55094c030000022800000224000002200b5e767f5050a773af359ea4a999829f75b65b9e40b3d4df0e83169cf058e3aa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0645e893eae7962b423eddcf52011fb33bbe252ba584ffa3813846ae91d18c59f720881978c1ec57c68d53c9940d4f32dfe09b46d3485dae0b90eccaa5d804d5cde8eced084b4e8c40a36491ae5050f41a62161c63b8a849f1b9d50b780912df7c5bcf7ab405d263e3b9ae4ca5e7c94495135a8acef64c71490b8684c6220f986552f1c5c9eceaf34b69d3e3e6e47e4b2bbaf32faa0bc36535a1c6a16b0722ede36a1cedd396559503ec44ce381b2dfd37cbf6e6583a0f82ec909ee6f7d0a686ad44ff8a082b3baae73af9dcfe4701ab66c39a1f82bf5ad3d086c5c4d19bd2116f2129eef1642bee917f5bb20ad2f189b1eefa51bbb5d4ca6c508c7e10bd4f948c97e6d98847efd579de8e55985f99a655fab2636c88fdefe3b25283ea7de3db993791c5ba430bae5270e5add53ffdd3768a0a48115143821589f7afe92b67873a4eaf1d3400cd5278e47a956bb2c1cee23c4fd1ef49ea13ae90279c9bfeb14980ec2d6136ad10b7e8c37757c4f49220656ca4b36b804d8e526ca452105023e19ee6cd180349c256082729fdc18d9a1677e161f1793c12ed5d396a235b3ba6d9c3a45865bed15be4fa9d661dcab229df5ecd8d0641b8ccfb299020ce655eed5000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011797ed47cc6210c5db46f8df6867ad884380759ce4f20a9e2b87d9f536f2e84402162445f59c8710eb7fcbc19ffb8d0221d3d76d128a5c5adb7630baf1fed77e9d164e6c492fd440d97d4ccb0619d56a8b481ec790d6cd73d13214c0b082d1a64500000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018f30135982d40b7fe416e119b18ca5b259fcf9267c813f4a60b83f2c7a1849fd0c015ea12ffb1b6dc1b2a990feb4d6562226ffced6e465ca1e8147ae5ac5aa0cc0cf83804183117f4512bf98dbecf7ab32dbee617c17e0e088d7203a96e7bf5cbb65fb46dd5e6ca5c13ce07a051af0da8d323700f857ea304460ecd00286570f44d91c13584401311593a72a89161066d36b8684448932eb096db4b804865e3a8e8165a10e3a5e79ddd7d74f5560e916b1f5fbc45a11952fa7d13dcd91cae52e80848121c3d0897c006f1318d81f14d589eeaca7ca86c74a639b47aa42ed5f2e11763ed50e0016ccfc72e6bdc645da59e78955a89298fe720a48f50884c3f161d78920b8f20818c5b87e405cd3d7c16ca31458846181a357391ee77ebced05dadb5f6d952dff8ae40ef72763347f4ef0c135d1b2312a02a854dfd09c397d7866b8aa86f4999253ed36eb7dfdbf0fe6a019dcb194f13baf189b3f7dce63f1eceea4b5e45bfd19ab34c77b21babb6c48992bdc51cef63d3b822d8d35210067a634c255ecee8d951c3cf7896dfa9a14e341db136b456d239ba1a870c4eedbeffca9729a8ee2b20dea4e7da2e8e8dac7ed55b1f972a01e8ed19f28630a3d7d7a37400000228000002240000022015345a638817130aa4bfb63220eb0b9e82c3eb49d3983b750fa3d040b491245a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000288758cc35f75b06158b6f1e5dd49488448baf290c7bd67dde9ee91eace86ae131d9ad00c954264d23262800b754cbc5c351907bd6d74cb9c4d7438b40b6ad6eca30f1fc9e0bbd881fa2d5738532380cbc2ddd4f955fc50722a248c14801ef0b02ec5ceee33485194c9e01487263b4343c24c0515a86d8ac4a5f6e35780046efa1aa2b2a8d0782e790b44633cf79b8ead65a2b213965fbff7f4c69c0d28c21b7ef0f0a3c0d6c3c6aca6c018d402caead74f59d6aff976d55649051d0cccf2e698965b1dc5bbf641d2d00b769dc0c1e078ff80c2fcaf4d136e1dde83d46e99498ccba374dd2051d2d4d33c897a96b961d266d90173f0c57210db5ab1cb9ab941fc684406aa281f6f81194fbee9326a2e8a00482be15b5c11446b88abe2e79ccf2943590e5f939e29dfa3f967da6b74f92bfce379e6821e76e3f0271c0a7c10472a5728d31e521453db3e3912ed2c1467acf512937a2e73c9c4ef5d1738134d855f01f40bb7bfec9ddd170bb7deb057a35e57d2cbc75a542d9f52667e524bb75b86d2037c4acc12d84cda238229cf2d93627a051c20960cb108d2bbf6651b8872874c371dbd81ae2f3d41b005d04b03c7049f6a4e88dcb92fd15ed8bbe3572bf6d000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400118bbf6fc84b0aeb312bc007cf569b10302454ad97f238b57b866356efe52007902165cf7743c878cd75c205fe2ae7bbb5e4034af40510605ac52aa43ededd030562f62f21382f1a31afe710a98c4883edf92638c0a6c72e544500fe3ee13447191000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a57bcb41ca64c2d14047b0821e2327b8219c5f2b51ac9e76aa641119853238b9a41cdbf8c22fde5e7b201033d7849548ca649976c988fe6b075932e4483549ac1ad3368c759062d801ecfa8523b2b1c7e0e69305c53b19f6d8e073e4a496e9f8ee61763181907f0a14ad875484aae854d893028ae80a92582bf19b8fe19e976206b43b89a08741c5556ce6c81c8fc2489a86c9f9afb77eac2d221bb34a81d2a5a1c78477f39cae72fdb8a5c49fd4fa48a527418906f5839d2df2d44eb98f413dca820a473083b51d93b084aaa8d5793161c56c040eaebee716f0f537e98bbfd7ff8aef77cb330f9b69bdf3ca4b00de16d052d9f8c73804631ef042bc590d85fa59dc21bdad7c0fce60719cbe20b50c409047048212c8d395bc23228ec2dbd2f4571e43ecd69ebac7adae43e582322766e328bb2d4ae6fab7dc937684db531449f9996b456c8bdd53bb019578abef0660fc77fc9c4c6afb1a29143fe41d0f2f401d2a76c93fc4322c847557d0208ce14c5d09a4260866119708e9a972fafa2657f43646e16566c47c2c97ee0a7ad7fd59c1ff2afa9820e7226d99ada6b2c6c689f8d1b4eb301370cb701adbe4676a1aa6fa7c69c73dcb5a2ef0dea9ac377cc0ec000002280000022400000220062c70a149825e5f5e59812db599b27e23afd92ed465f6cf5a5d0651a039be140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093834c19df4ed84ab6c475de78e5137f5cf667f7b53f763a4742baf3a08181b56af416f9a55aaf3f2408ed25f7a1fdb3056a5cd022262e357780f8e51c2604d55d2e2fcadb4b131b1f2cdd80892b157b660d1a215fca9c79a6496ab3ab6e5f90d73cf4eccfc541a81ba73576b420cbdcec13b670d42a0170bed7e9daea2fe2757f4e44413bad88b64780fafdb92fc1c44d7e775b868db8eed46af02b9b3f92bab5e55ebd04927a44f835141bf7fdedf9094df07f633a4caa40d9d73bc4448e9a460c3c64cac10a726192074f5b0617c9704802e5c953461568576806c6a657dfccbe5393ec13273d79208cfb65fea65acecdcf03ac5d5a28f15ec69d6897958d2d36abaa70e9d9699a4428d98e973dafce759f6e30681b9d4b58ea8f6230bf3576800fd72cea671cf8958073f3364f151a62739134449c116d9225fd6e846dd076904ccce8782a97bf690ae79f102f85fc5c9502382b2558248ed7daf9986123613a105e7a17b931b6c9fcd478741b6351ed3aae7318b9ce876b025b9d6a97a37a384bc18daca0cd2fa73ff13b138e4bcc1c4df859d95d28e707836575fc1db12f2e018a437c7659f4e61c43beec8645bfc50a4dca5a777fa5478338e86af68e000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011294755de3b138b9abce9983c0aba32a2b8ace78ea4f1e3a85018e77fae3967a0217fd45ce7005a410f358d3bc36b91d1a02da7b26b57185b06531df6504dc1971274465cf6f115a0b4ee535859200d185e40c48784b6d5c7d97259c898ff405220000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b792281d499b08b7480e405f3427c0adde9ac877d02025f619cc29dd3e03c8570b05a230caa19aa75699c9597f845f9095499613e129c96cb85aebb3da966a4b153df1ba6d5af21ad3343c45672952418b49c5b2771d511719a4ed3863d525be8067da9edde95db0f12b25bacb71d0ed114d62dc975be7fde8e724292da6d0598783ac4be9fac4f9083fa75ba4007192de392cc8921fe4f7fa2678f070793d719823a9ee78194fb0becbde3f6e5b806c0a45ef9e9b911d36089c939367ee33302c7193dfe3d5dcd39edc89b46a830be6a6d5b10a3c119fb1adc019ecb9b5e8389095718c200424e84f0d5fc101aa5ad967d664120fe4aa86226edec68e192e2cd56b6aa359dc15ca387f84e866dab134a43bbff0d77281581e64b1968079bf2566f060663cd32999657c9bd4a4f521fbb61cf79db6320786eb267b611d22937f96eede5a1be093e36dc8a214237ec36c2a6bfd0eca68b029967fb76087652275755fbaf5f3db85df4fa20a66cd65953088f728badb96efd675654cf15f0eed4c8b2e0f01babf52c348c5aceb46d4bf1dd68e3618d0a50021dd98c9eaadec08dfa988d88e1949764d9baf10fcebed8b6401ab0e1b99c608c6ef7aa67295993060000022800000224000002202f4a9869ea85adf9684fb15ed407669092d5527f4e112d4b39612f3c22d65ca8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008df8ce6e91a1b43a54e687ac447a8cbed81de12eac014a882eed9acd76e8e70c16d8650ac754f10b654eee0e445aa7fbec7628c90f4dcdee6f76125887b04fe1a75c2ee7cbe192977d54ffdc5f2cbf04e6d3a98a9d31a7d8a38685eaef9540b1421ca45f5076a3327ca8390962922fad00176fd1a785b832d8287fdc55c519e91d49e9d638558f89526dda8f6eb3031626c80722ea01b78b5b5b7caf9b513455ac331d058108b1391e5610c51a8146c27eab01237447442a8f144a8437614b1ba7cab475ee3afcccf1e48c2ba63cf0a9856265075e811f098565feeb1f6f432897004c0a43b74b365176528a234f8478f04711e5f53d52eff134c6627195fcfa6e0151e8a1b9ede903f0c6c87d1fb4a829756bc6410d05cb340f3b6ad9d53e59fc0d5ff90da551a47408ef35007b167ccad72e14fb67acdb549348e5275085550bfc110e843abb36994b57a418c24c2cb1e233cef13164e2be6d4cc0515b5ac69a68bdc2896274b2d8b03e9c380ad1391a64702e9e637bfac23313860d67befe25dd24e75b487a0e2cc033eaa35d69d816ec5a16bd401355312c395847c659256f3abe19b08865f05da672f2ffd78669c37479dfd918165350e1858f1429876e000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400126d8eacac7bfe7a379199338500326a3c1699dc71ea390969aa1df2031401051021a9481fb7adadcceedfff3fff7f2c28ed0d14de67320611a1b3854b4a0474c57134904aa0da4e3c2e26e7d040b4a562003dbf22f7f7f5e000d6aad7d9bf4464c0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c8f3d2e417e73387f522bee46650ef7f600428bd1107f4c65184e0e60c155cfe0396bb053702e416f846edaa008ae04de361ae2a32ebbf232f9e03e733283ff0f9c55ed62d91e42d13b825fb06763bd2cc2af022b84d9ab727632daa1b1f1651e2b379fda87224eb259730c668d3a94ae8b0c1c22b35db645a091c4c50be9e80287206efeab575135f4fd4a22fe56547356f88b8fb0cc1c3291c4c376f02593b2b9a9a20e09a5e61f83aac62fc378602ac4b7009868bdaba9ca7da711162aaeed6e678d753fb61a4f84d0d0c65a462bac6b628e6cd8f8c53e65dc61d60e21c9889213daa9fef3e2108e9a7e71ab4c0527730e63c705b8114b3b4b4e0e853ccf1e780d1e41529bb5de4752a20d5ec0e8312075f71704ab64ff76d36da97b084f039b4ef9d0dad09eae04789f883a1d4cc117cec7bc67e375a3469cc15858f390e0c39c71464348bdf9b81031252c76476dfa9780250d7a4986a69303f0677be1850dc96237df629f0dd08f8e49e74ed1fd2cb68bbe36a5a27eb8706aced6d3f3f9cc74a25ad4b3d43b8bb4402184108fed3ae928d9fb55b8bfb72825cbe915b721c12c3234cfaf454beea6968a70e1d63a98a623ec833b17e07e743d9f43e03c0000022800000224000002201321dc39e2818dbd83c78351bcf52afc7ec662ef8902fd94c741b6299d4455ad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c02cbf802c6574260e7f121cb746d7d9cd72608a5f550a56564ff697d29b9b18d206d779b388beb1d5eae251dc28a7746a849e545682454792e90fdd2c677cde5d2c2a541f943003e43d02c40cd2df438ffe21d240e036698a2d3801d4af94a2b7b8763acf9aadb3c2dbd6845d8d480abd567fce122daa0b38e44d8b81af31dee8dcbaca3bafebd30475a8cd6f5dc5908dc946bbf44592541ef93d3fceff2207f16ca763d90ca28c739da719fff025aa0f913858a3fa11affc50d4b11db32319545e0bdf951923d4f8dac90efebfac47c912b16e23a06c188e9747260cbe540b2807e2becdeae1d82e3a1f410feec6a43f71980755e99fc4d15d8f59fe4c376c71b22ddd3a999399b2a6809b5f60b4a646da3b0639ab0a23f6bb4e325dd45a7f862f0878cf962aee5b538f97771969c78a1a64ad1310f2adcd39329cca5658727f0f14a369e1752af3f334a0ed611f50b76b9945cb2ac7e7d44822ae9f2cac65fc55912b95daf1e90cf107e574baeee74aeb1057a19a570a6f8d593dadf6e6a09d2391343dcc0ec76193afd2706c84bfebc1c91ac979f9343575fb17859ae15b9ef5faf53f7188cbeee29a5a1a59ad5b78e987ffb56d54b5511727a7e2d59f1000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400112c44e085e837073a9c0d504e3fbcad7c4ec62be50ff3dfd4a5c3f8ec8d7ad0e021c27bd18461bc5690ffb466778341c5581c4f397518d675508644be3b3f08f201f2621a7b0b10bf7f8e026497a7b3b8a64bd920a4c065cb5ad84e8bb18ea8ff10000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d0be735fe3bf388bd80fc1dcbf4732daf732e1fd69e59c7c1cfad1d15588aa4430a77ee2e7d47182bb361cf9c3acdb4607010c6988d4c20dc52158c79fef3150a6433e8fc460a7584f6de509c627f39f973a637bb432c8caaf1c099b776bde5b219bac57c53cd63dbd832db4f525add249f717c8faf30476792fdc171fe5c49f6253e7c4f99f88543c963f218b7b0ebf60cf0a53c94ebc049ef03a86278c2a6955cf4301b0809f7ac65510ae07530af7f0b3d0ad6ab2d7a3413ff4d302f95e0484450a13713c44dfb27761187069ae8e7cc4b89b70940639b9e2c9de160dd85f9674d6c5a4bcacf0dc48f1b6f5693a18b8aaa495aff9e9ad9b6cafca41869564e5175b7a3a42a9f96a4eb4855c1eaaf4310a744277ba13962b7123c18e4729d978b1c384cfe2d672526864ef46a4476b1b698d2cb9e847c61cfe272b36cdb1dafcfd36bf88ccdf1f2d330ac5f8b7600dc39c5b3e4364c0139e6aa7ddbace9c4ed8e6be7a93de574e6c983f083cb3010f19badf70387af3e1d464f3e5a9d1b03145ea8ee485ddcb436003f6beede3f51deb884760005288a48ba8a19cc80d38dbc3b165a6a2ee448d30539f09909767b2a6b0fc9adfde6d35ac9b0aab758d46c0000022800000224000002201cc7445be1603180ac20ba82ffd098fcace1eaf7ce33e43713c20d32746b8ba100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000189666b365ea5ce22200292a40409b3a82d222453b8ef58c6f975b89c15038569473937c226f54a58b5713c53dcabddd58cacde2fabe77d0b7bc6af6bf99f07353facb9cca3b0e328a7b1f70ce8f77538370b8fae27f7ba5d624f5f15329db31d498fcff4f2f9101790104f3f6ebdc3b57bba6aaccb122157014b9798e7cf265e73e2017772cf6550e2eae7803f7a5a551e36fe5ed0d32210c8dd7258fad78aa10fda019a543d82d41e8721a76bbe492ae51b3f3bb6b8f32cb130cc2f84165af92e58b87d333d3b71465046b43c81f8d5282775edfaac657c37fed9c0eac40c738b56542cead0b9186eb8fa895d04be9c267297af14d5cad490b6315d1cef8bbe7e56bc26626036d6d9cf643951b3599ead302e96feefd25eb7de10370d55d88fd00137d0e096f9565af12bc1deae5e5c573eb4b61492277989492b4e3156e9f155151364d96349a6e732c5944392f4e01490a0122e620d0cdeb9d9973643e5aaa8cb26b526e1df39a5b104a68bbe5d66626948db5e67baaeb089f01e2909ab154433bd2cca101ecf1de44f09453839ea4ca4b43e2d03e780687724482efca34ce184203ac7148f03b0a7a944e7c6c0b10465a290f5ce31e5e3c496a63e83583000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400105baa5fbbaa28a6616594c4e9294256a82ba7a1201c57c4e194e6d746205b4e9021c2d32afc29a660721784d377d29dcd333404eff07ce4a6508ec0dd8118a867502a1e5e77637015fad7f6e9f65f6c135f923af8fe34fa5004e5fe52ee18a9bf00000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bf371e54983eadfe281e5f32d6f4065470f106ff4f8f133ba042447ddf50d7d47a550e3184ab606cdf26a23c36f7c459dac8f94316571b4f6dbd00cde5429bb2717f8124a58639aa0b361a61e434d465d79c46e5b032fd543dbf44585420d9558a64e3a7afaa7e0baed30f1ab4e161eac2835f0f1377af37eb23133b4a386f74380120d7143e1eeec6f87fc71dcf4748b0cbf33138557cd8fffd1ea5cf102c0eca356c2ba1872ed6325970f226bdf941fd9c2b113477afd463d9b5c7361667c21a553398e72f00280b6e7135057ec65945cec5f119f1a34e76fc25113e58fc8d3dce5590686b7a014e2976fc2ba645f90c3e6603cb48b1884251912624b4e01c0537d93faef4041766299171fb36cd51f23f56870e9e5684e42686a715b53874445fc2b42b25050a9f0caf18fe6c40e04488e9faf6c2d92bc68db309a33852fdee64b6d8f0a532183cd0e34d640d828f9b070b01fb1e8f1d1751e4c751ffacf73212bb6cb2b73184d02e571d5828cfe96d30b24c6cc68a23c4fca3913c9cb9a74fb3d348665b86603f040fea356e6ce0fb2fda781a172380393ccc963f3f698fe5c6876cafe95988f3703b933ea1897368b2722bc356512f526d97b10fe4d1a0000022800000224000002201ebc04b7e48723c3d17bd40e82580e2374010aa9640587a8f1a08bd282300e9e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000209cdde432b9cb0353024f55ab207872fdcd8ed21de5965a9967fe17f8e3a060dac4d3df27c77ec67f68314f257109450523012d6e97ee4780bcd24b20bd9eda7f3f463cd8ef941187e4df9fff40c4345f6f8bf96ce4e086fc657c0afe477d69e42cb6428d36278c2364f73915eeede730c8b01021e74f7388f99e557c94ef2c35304ed819116c886c3bbb48756130a2dfec20b498a730f7d812240795b823900fb67f105ba0bb6c33b36942ce7cc7683dc356aaea33a283cbad453c570058ac30d067093003fc3f1a8dc059434c379df1180e086588b0b43b32e196133664c61e1d33e1d730d0f0b29d8a2fbbb95ef724444d948a241673bba40de32b4b5422bf4e476c30c288fed32566955301fd1663ca5692329e40e17cda6bad12ff19e63703f5810725509d773ced60d4909187c824c9eeaae545100500e2891d00e0a94d946b00c0a241fb78df220a96451493d0de47c376ae0d6a6492ad20b3ea9ed58eacfa50aa35af3ba603ed436c85d37e332e2470b41f31668125cbdc7327828bddb9d649263c44967b7f7e9dd1dadf5304fa3b7fdd92cb9c80da7811e1d3a2b100cfd5b6eaa4a7b43798606de7db92a2c99b1cf6de2f7b8a6d2502c74639ccde000000040000000000000000000000000000000000000000000000000000000000000000000bec47b0022a15153048648339b450a7520f205365456004c73dae55d17b1802a1a7e0b51829cb8c57baba7f77be61de7ca7279e45c22abac071bded6497e0e198f412f93e021cf8c373ad3395aa4d3007d250023819141609579c450239a8bf44f1a307f91f02a1e05f3a8c9f6ac67fa518816ec8af12b83345190560a83a797db9b347822a00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c000004080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a75dac84c84b4c2d5a3ba0fe8e24a78fc7dcf1f1b9b6cf6ac8859d5c6c465b974f79f8fb0225f87fe732148cee07ba6f8b83c8a0c4ac6fb791c333d63e875c9f58db29f073f699e725db138eb5564d363a245f4a8531570775796838830998ca11c93c021e3b1f2209f55391e6d46bcaf052f19949cf016ce8a44dc52ea26f4f5f08e8624d4cd28d7f3f4534fe1752ce16a6542a74c48216c8671c046d7ec7ff165377926a1ed0716d9985a6fdb1f886246389108d6090eeff71a488551913e06fd6d7d1ffeb2720dc0f614b55958cd56cde5ab21768cef538844dcb52fd15e21fd84a2cf4d48cb4a2acb50e62f77641adf90ad513ee839a3dcd1d0a4f235e5fa98c021b6d9dfe40d49399e06252e2512ce8312c66909aaf9d3861d3fae1bcd655c3d131c8392ae6dabfae7537cf8ae477d096aecd221b4f8b14d7602390c0d106ce6e40469a2613932c4c52fe993958a2f4cef03f2d8d55a70a6b18cfe40e9b3a25e5ad2971a9550dff96ad0402b4d957845470384ae48567a13e926b5fb28022e027a903b8bf10b173bb7ca9e1212abbe6db6bf99c8b841eb7c20fe6e01afc190e2b22875ed2c0b598e3c156c34daad31409bf300f244e1b7d236f997b488d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fb52d91b6ef8703d376d9cc884533f2132bee94f100654cc5eccb522a51f85acc806e56e9b0903be5fd657e29e9a063858039df86af9d357b0c191bb6ead0e0c0f7948cc0fb81d01f9df4dec01b36eacb0aca1896a7151f3f2e3b3ad980d806ccf36b4114268d6ed8ac439102982df662229cae12eac72983726dd622a00a8b28c74dacbdce71bd87e7e56b4daa2550f5a608f567f0db0772b0bf7d47385334105e1901c46c644129328c1ab323b5575b93f120009c76422c5e51af332f7efea19b4429e40c52e5e96960c7c8ab8059107388303bc3578185f94bfbbad6af387ae0d8ccbe767b8d6ea522cb50596e2268c626dc3b282d134f06ce3d3ceb9aad3434f7422bc77b6d7700653b281fe788e5ca636cd700d691c64514749c521fa0c765d2bdf9b2943e4fd12d80227cf4fd38021e14912b721da34e612abfa3a71dbcd4d5def78548a87408bd6957f6ce20846b67891a9bcc127a95f589bb589f2e66b099642b318a63e11b1ffbb579683a32a047a0edb19c16df770f0ebc51c3fd0030ce77ba9e3d05c1488c2407ddfc6b762a43da56f7491cd53ba96afaf5c4acfba7b920fb4a80e9c58d9d72352ba5a7e15ff425a9706df9da0431fa695b19ae00000228000002240000022011e2499c872a81c5f49e42f315c1b2b1d11aa42ad3de24f174a6394e76cb958a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000665705e5e2a1e2abc4d467470e402eb9659b41a01f64531e72ab07e62a14e5254cdd0aaff06dafb265969a1998d782bc29ea44a11bf512e17cc8e5e6a284a9b3a01e78068370fc4981db2e0da4a129a5e4ae8668ebb6610c3d6faffe47916d3f55fa269a7cf9689aa23b833a55194b756cf6fb509fd48d7bb10d2067357800a626387e836cd182e3a3341d6ae7013231670c586fc5328a6b976efb02d356fc84e57ef6480765705eaed97dffe35d2eebe2e8a3e151081e2c048bed1d9e1a35b303c41b5ccec115a4cbe5ec9562c2bb12c0cedd69395308fa27a6c72690219bcade77f544c5a6c1b90e66384f04345aed69f739609d240a9f85ce24e5dcabb9987ebbd74b08f5e2b632ed0ba5e431562148f8ad13f8d24225bf1ffc34d0c01139f4f77b7bfe70afacc88389835d7c183a9a7c86a843aab5d2c52b75a83cb182cefadfef41bb34feffb71392cd2f1eb75380971a029d9105935b0830c2ac774ae4b364c7b54507a35fec3ca8dcf55b38d54341ba74c290c104e3d56fdbf1e2d15b42062e14412a8486d40dca4ccaa41d159fb347f5e669302eef4b40cfa1ec9292a28031dc8c7f90232ca041717489480afdb967d6dbd31acedbbb42fba5ace76000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400111a7217073f4a04bfd4309120ecb0031f7c274ec4f111f8eba0655c6d261d7cc021fbc3c4f147e527433fc99dc720606ce37948e66faf154d8f8d9d5b69f0f520329c579d3306e95369cd46b0c3f0a90db053c7857ada36bbba8d647133d0d097b00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095e04f774db01bfa20f210468869fbc87da2e9b485243de2b54323d922def9c84824bf5e433aa7f11aadf2bdc93b20559bdee98835f471ae21ea13f51d5e00e98ad9b45f2bde1e27171bef20ea539f1ccd940c28acbb466ac2e494d75327bdc787969bc00881ace8b24811fd5aa4edb7189b8ac3b645646fc3115da7295401b8b484d967b6fefdb51a4d6e20fe805cdc8820b6bc6664cd322c686ab50607d2efc3566a3cb1cb12f7e4d5278f94b6e776fe17d9765cecebdac5e59f63562452ff2d6d68ee1b2568eb0547ba881b516eb50314efd6d2db7ab3f9a8a86fc934652d56aa89c47deb155927c684653b8d265acc99d8ce89b6a370481908df9b649f2886cee18a23cd8f07eee1689ff567d03c0ed2421e2cf03939cf6e9f2c1e1434a5ab07659cc8499af0b0fd989065a5350992d00b6a8ec7b3ff22a352899f2090f77a782065c7de643bd2cfe585401fc039703da5844dceffe8a211092fb72e2cc1ec66a753d19ef81ef318ddf11c9f8972fcb69a34992abfb7684121ed3060a5cd74e21481653de6a07bb1882c0226be459a6dffcf48845d62d10afc71f09a04dd88d182d6a48b56343ac889e41911e69c9813fe7abedd91c675fe82d064120308000002280000022400000220090216d72b024662498f98d4cfbc7f4d6f8385726b3711047a0c76d0ec3620f6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f04738779a4182b6bfe9ade25df23203d044ab9f2bdbbd2a3e7fa9f18cf8177b5b3ee2a7a0b8c308c5d08051f55436922e54cdc0d97ef9aeb9726c122ac53211ed639f508618f2836bf6d071f18d80863fabcbf6fc92ecc1b653b9ceb31470365b44f562d82bc87680af821436e95e0200d3d2219eee9411f8ec810fc5f4dfeea9b050032bd14b26431e7268f8143eb0f632233c40508c51bf621349fb1ead35c533cc5c1e1916489deeb868c7097852ddf64e6f89d440275178fe3fa0b7e11871f36fb59ae943d7849872924b1af567ada4640e90028d2782052d2bff878eaa64fc424010c8395273fadb1e73a660eb817a2dff007799f0962954901dedb3a0384248ff5de79fb2fde4a5846d746bc8bf9b523931ea663a874813a62fcb67f3931bad2bf3a1d74c8ba94d5603adb59253533de59f6d60d0159f4a03ab65d29a0b652759ed3668269ee9221bc034a51d20e9886e6be016d7067fdf038444f4a332cc455a38aa3a7efb0e01cef9ef62705c3920122a79e8e7827ca0cb1b7d8139096c3971eee66770a2ac2ad8612c99d54022d920e5b3ee48963bc8f18efe8b40d4585e30757da787144ef5530af3b8d0b5845da37859b54571be29ae89b497f000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40010fdad6e27cb50eba8ac507fe343b2da29fa8c32dc32d9fc0199e52b1ce5fb32002204fd85615c3e74f94ae8984ed5cdd04c24f8512836ab8f29155d4006587d5032fe8069a4241b844d9a702702985af5b31a7af5d20dd16201739f213193b533d000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5d64eb4c5223a41bb4dadcd17b45b0464e628ef749324012e59c9cb6213c17514af60cf31b40a811f48d1ef1e7d3508d048a8a268c34bb49e6aec8e6af6261f78abd124ecc5c55649b11609a844aef330ba5d646a94aff4875f10c9a256d1246c9efadca8a677f25ddd979a68976a41ccd6e14aee7eabb1cd6617e7dbcaecb19736932f8dbc82767c300b8833f218babf053960145c4ca349e80aa92fab49dee8e759a612dd61c722184ac839d72662f4a5240d1cfed8d8ec4824ed3252cd1b858b2f4a232e6a471946ed84b3ee4b70253fe7087d2a27f8edfe63ef54ee1bb7a00b282c04b79a99c8a88e4802ae0b4882e35db31276b700aaac4161bcf997722d13ae635c90b3a09610d412dc8d3179fe57ce979485a8676eddc7c8d7dea5195caa7c6dab95970fbd2897769eae0ab9791dca3bfec887fb37d9c02c5ab7d9adfac9ce9a9f77cbc1af665d15aa20ed0c0b80ccf88dce5cb985f8272ab001cd0f2619a613ec124d54aad6067ab7a5855e1691770e611fcb15dfcb71ba16d659a7cbe299023c242f38f0c9926094dbbacc37a14a6a45543fd4f8116b5e6c295c17adffef3654d1f02e16d06c5a7f648e3bf8d1d2e5b08b82f0743aca5c953a18ba0000022800000224000002201676c6302a0f11d16dc2ffd20ca3ff61525e3466045de9f182f2a972889f090200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad4d284a5c7552e5f4a21aa3ae8b40902d187f3bf0137962df7535965bcfc637fddc3a817f3a62c741a5566006f8c6c3306a7c09cd6723f13866429ff7ec378107268239dffcea8d4bafe0186a9ea893b341e5e2ad33c9ecf2c623e54dde71de433b6759c1f0c54ad285dc96ae4ac35bcf7ad4db94cb091d66b750b3f1ee8da9e27a584bcb9f3d9db6c006289589e5b7386a2f98683efad5bb5b72be400586372ae77994db1e8a337778ab00b9e864d11abc2b5192fef05c58f5b7e15a043b28228785aa25a2ea20a45304745cf605af10495bc8aa1421c2833fec930425322bf09cb0253d490abba80545441fb79c309e989448d66bc8e8a9eb8c2079454bc3b7b33579ae8f1ea5467cff9daeddedbe91f65f19cb262977564c44ff622f24c629e2c2a010d69dc79b975cc9a566124641043d19898ca7ac1c38bf99242be52600db06ad7eb1a6eb3f4275b2f06166688d73f12d9bb226957b18ba7a74671328de2ca04834cb1ae27c58deda780df0aef64c086b3bb476a66e99380ba5b7a2671ea66acb73cac4c81fd04f57ec99da218dcab8a7c25c8ad01a85597b68c0e2543550d116b39594619d855c8ca5a3fdbbfd0806787416a0b029c62a1779651e6d000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011f29f172e16fae817fe8a96e6fbaf04a1eeced6c237d60d71d2b25f00070e9f7022260afa4ac737623173f9546742e45947797b9eb595763cb0fc41f8f3b7a26ba0dc628756ccac320f751631c827c40c7d079ca1fd1675ca5d10f4f7b7e489c620000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ce95de9695135389acfa525ef7fd439c609f30b56914d140574b2f1f3b01117673722b71ffc5f4a8e12d400cfed43f1f1f90545b39dfbe3fd4510e11b12a6f0be217b6dcc75b69b324c94529976048c4e348e57c6a0af21fafe6158c2f9257186570bb4f22183291abc638355bfcde678f228905dc3f3f6b8cba1e6bc68435cd056de51828f59cc5147d483c498952da9ed14a9e6aba11bc46e3535ee365bb562dc89890b526ce9f0a5bc29f51e84e6dd52e2c08d59348b823221a47308dd562911061438f469fc9bb6c47a0a833b2137757357d9ad3edbd0651c0cc80f8426f89ab5a0e7244e0c529bcacedcac586ddbdaf007d3f54c14bfb223da13aca3168606226adfb3169a1db7763b4539f9497817e3c9690904825a38ca6b39f1ed4e06a38c948b7b48a4546926a88da628b1da754cebfec6a715d51d9b9e25420dd589f9a7d44694e42f0953d777ad603478588ae09b487f0dfcbf72f8316e13cd923b361e9da2723e685184503db60705562a18375ec193cfb706f6b784950d75441a933973780171a962fb017a715bd8630baa7c9bca5fc2ce8e9f348322686094747960c66c894e6382d899387c8b651027bf76f525781a9002e578bf41378dce000002280000022400000220241e20a91eba0507735570cf65dc37789b12649f277f41d69ec08e7b175e0e51000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008853b6a5d5082ba211690ce7b5f2cacc82e7339bd7c3ec05a5d953482106da9b102db64c2edc102f479c63e1f6c0be7c35e3f208eee4a6704b5ac0606518429033e002b693622ee8962dd792e0e2ebf671a8fb3255fa5a182ac019e1f8e37c21af1041df679984e1dea262bb5e9dd4c867a2eb01f5cd06992d5a7889719ce898e6e5c6dae232cc6ff89080ac17a76bb8974e5f87f7dc139a82ab86fa79e68de8c229f695beff7c2c1230bd91cc86f3cae2ae205890a961e8976bf8e3a5327cc2c972b490e8d62448398699287cf9ea837875bac1a89e441ae890172d4fd3077e0d806b223629f154f943d9e5a19a9203d9a0215b62427885627e11c6f05315c1bf07fc8d03dff4d5a5cfeb7b081a7ea551da9c0655c94f5ddde5c615073b1c8905f04eb641a3e6227345c9d58a1ba87492211712bc55e7d14e85a9a50759b494701e809d3024020ba94d7ba75db724bb64f7b7b4208624f41158c74f04933c2720f6b8641a6e9bd12c5ecd377eb3aecd82108c4800d4aa604d85411648e9ee243ee0508c4b88d53af5d35291893574d2619276a02cfc95259091f78a0ae8d2c4084ac7f96fb7649b655099ea36b7d6cc5226b1ab0cd3a1f1177e4ec04f4f27bd000000040000000000000000000000000000000000000000000000000000000000000000000bec47b002263be9296c3629d92f6edf213ddefab7cbf592763a450dc64a4c88532985cbae2bde18cc536c5f7f9680b24761f12a82629364eca12e50001a393b5e21b0848e02232dcf79753750a51406b604d06f2043170728428443c233c9aed5b69c5ca385123a73b7670d4e5192a355f735f4a2c03ebd8c48caa469fbf7c336a563a8d5bf00000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000040c0000040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002559e2e6e4f73a738a6a68281a66a1d61d92fea98654b57a7ed009c47fc71d00cdb57f2f8d03579607aa8a118b51011c9d92265ad5dbc47079ebd6adb5c037083082338c021b885366cb704c04f89f4f430f15b31e50f54fe892a44bc938e51a11245e69e637abe7106e23c8c9e2ecbde97f53ed9d106426494133613f737a5b6719af41858e21de97715a1c9bca0e786f7e71117ccaedd88d217f330c21a8044c6edfae192fb60f82da2524f50f58c6c4e92d6e943b767cb222329e66394a6bc6533f54607125c0b6492f599ec8c8c9624624f5eeb76ea1007ff3be1811caa065404dd6893bac5b2741daf798cfb2bccb0e4f7d7022591edc12f446b66bb52f751496f750933bf14913a2b5c3c474f3ca71ba1adf5319f7f733b6e61a5bc9fa96cfc6c4bf6e7f3766f7cf5220356a17d3cab010aeb57d7166a4009e1a5bb2b8594e5d150a628547f37ca3158107c97eb141c5aaef0f7fdfcbdb2543dd59845c30e5f89ef2388671e9fed2443bbf34738e3585b8df06ec4af69f130650fa8c11ef7c1acb71f2190c347586b840bf6d48165de6c84e7572151143fae15313a63ead8c6fe3d90bd7ca4df61de761689f9fd31c93691f8c8b775ea3fb2f6b2044ce0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8ced7896308da7ad97c4051d76366a40b5c28c5a551d223cf483125b91ab583675a40dc753ea72bad5003fed61fa45de2a78953b45bd431b09fea3e3af10af58ed4ab081eb6ee274e0b28f315c9c66bfde0230ffa94881b627c5c539f23042ecd630090c970aa1bd1cfd7890cce6240e326cd824be2a7d659ee5094195b3d07ac925f09e81f747d3e792347972276cca9e2fc1c2dfac9a8b6a6e409fc67d42de5e46acdda3004f494c4390c7542ffe84ae0aad7aaf9fcde8832fddd3c189139759ff0ff922ff8ad27d5f19f0d622e6f04e13ddd45f2674f56a7870f549732dd41c8a46d3060cb54f32d2540e706bcf4617a50326ff151c605aa215ba89df42259266110e7e11e5a45fed2549514fb46274638b9246c561fba04423e0b6f7900848d9234dcef28c258ef3c5e027d05863386e50b0d6b067223044ea9d15539aaaab67ba4e4f3b329899323000249deb90bbdad3d30ce9cc463cec7a0e1885ef7ed024c64e0ec01d09896ba28bf00922fc8da460556fd0bf1ddff1857191c8302cb9223b1d6fec942f83a31b9de0279e46acccbb7e79730538069087fd14254f2b1d10864a3cdf9df820c5f0237c2e23977f45b74b18da5ed11d251b0c518ccd0000002280000022400000220113043735dfb6f641b8f0e75e7dfedfb82863a2d30d23d048c920011844b0171000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c90fbd1b245a81dbc7ca987aa8772cad8a7872cd0dfe227e5d37b2225f453b6ca3ca576ac9f9fcea32cfbe0e695273cc19d556cca250fc15c4139b7d56d056df0b49793ae6e26447a032ddef68a59eb51e7cd700b4cdaa67e06b16dfe507b052e87bf9ee67805c62373f95ec8517f2ec97efc2a5215b7880f4c128dd2f34eb96006995b04413d7c07883dfc6bc0d73a356598dcfec34c630b41cd80f48bbeebf288cf2710b361a7201b2355b6ec59c12b6de9aa8db9968f91075223eee7057a54320b5fd6ba9195deae4fa9a0c9a0fee38c79f1fad1d5500ab7a6adef6c90569d932a4cf15598502efae2d07db648a07d4244300c4ede43e540a207c77278b09272b3aefa4247a09ee2ab18557b92ea8c1586529a1feecbb864c81405a31966355bbb097ec42993c1d962b58162e7cb178f6b5535ae7bcee43dd9d9fe82ecc76993905b9bae36ea0fdad6c08fc2db9cd276adb41833f27a30136b005b2dd349e37f2557c8e1c474ed5f775c0c60ed9dea50062b801d0642f3b1f2bcfa1bc7b4195a9fdea975927d33e6cd5f75a61c06b9b92309b988b94ea269d372551c1977c269d2e519e0ce9bf2446803e1a5b944ca0c52c7a22f11aa2df49a30c3f8ac59000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011a2a03fbacd87f3d7579de6e8849fdf4b1f755a7a894d1fac5388e575a8b4ff102256b43678522059155b9d02376adf28fc103845dde74bd2c3c63dcb44f16624f1c03c4574ae688aa97e58d5e2ca8e5c7a80262d3ca67abb25823b3a843c32abf0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bff2695994c77624c632749257b13ad0f23af21c9962c625295995710f54ea9efc1a87d2c58a91f2217436e366cbae51f00e5b3b2f7638ae478205cf41539a5220c47fcddda6f65adf7d9764a0e4ab52179bcea9b28a5819783cb7ea57992366b4ead9581c91cebfd5dba95688013261f89b12d3ff13633f72309170e5a6595a9bbd4d90501951f8a11c522b673d3820af327715013a7b2b8eb0a067ae7c8034207937d8ac74fc08668bcc5cee0e24a937bc2e889d1ac180f491fe9333a00a5a90324c85b2af89ff617501b9c39fc0262cf49ec79535e9bed778dabfbb8005110315cb194048dcb8be69e6df64b3f6b2d529161ed13a42419721a6bd0c9f3107cf565a69231d6015c67af7c7ef1aa2305938db26faac02720bfe27c9f1c106d7a8cc275f93cf37e5b7056393810572e098c25ccd0d3e5c1513762bc4dd4e29ec947c8632e0aeb708a86bdfba2c16406aba5fbca97b605392ec4c2cbea819bf68c20d586ff9a4a331631421f5cdceb39d0875f9f9452319f23e71d2e052f6985fad8d49f7e71be71beca720350d2f64e1254b3cd6b09874c1313dfa94940181db049ef472b4648cac844090dcdca5fd39c146c3b80ae6206bc843af5609ec13300000228000002240000022023272de9bb5f31510ae4216e17fdb884ea37c0d6c01cfff226e626969cae415800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083629dafbc1a59036b15b0b350e00e20ce60e0a7ac10b69955ed7645c6c472a22eee7c7a1c2ae0a7702f8dc68339f300eaeec7ca3ec06b895a38766c3d8b70f847ba98d14e98356976fbf77ae55807e9822885651f70793d8b5ee896cc5f0220389442557ba64822bb76586455e68d9f4cb37e95950038ad5763ae6465daedff62f4b2a037f1733e170480d7ca1a1349eb15299eed6ba61f241fb59b5758ce8672ead88bb12e520ef786ec4a534ee5afddabbb39de12aa8c8524ecd4020cc9323b99f8593802cdfee26e55fe22ad860a337e11ecb94737bcd77cdcf26499cee4aa0e24e0660581ffe7281b6428569554b6c5dcf26620ff83cc3d93d91eae52350b72748a509b90023a6325cfab4286103ebf491b5fa795fb4f21a7be1deb619f9e0466678296b9c344a4584dde648d5567311bc1032734fc33a87fb49c26343f9f196d33f7c205ebb3ea4a7db889ea927fec303c4d3cc4b25a3423ed0b4a77fd46e4eb85e022183f17c3a70d156723708b1bea30ed46c6c2d9f652fb1aac2831348ff4120c0265645e5a6ec2e23da544fa65c08007d29a3fd8567a21cfab49e6e8c87d1941c71ef159d02951b98ad9170e684e3772807746884f3458e089335000000040000000000000000000000000000000000000000000000000000000000000000000bec1d4001205087021d67ce4e4ffdac77cafc597be338daaaa668f11c96cb2f6f3682d7c102263322cf35ea41c8a94ea73bc96e029ca7147d5205ba3b9749ee90ca83bc5ae024b2b2de986f32574192c152200c47bd83a77a44165fdf37cac20988b1b8dc59000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000209d148d469a83e47a79676c7d512fc45df2a736089ad09cb4c6623bf36f95f112a775fdbc3db9ac69d86aeb2fc1bff3bc37dbd5888fb529efc60394d1991205e8819f3c29c51b969427756cdd3a3bfa03fd73f7be10fc7050d2c7c81d8bc7af25367ac291b2fa9aceab5f229a8657ddaed4db299975336922c437f133a7075a13e86d48a9283e8aa9ffe5e09b318bfcc93d4e2f90f7ecfbc4d2ddc7ef6bae0789e3b6b755424c1a1db5491cb8fa66836f2faa5691e1f0327872ded84e98573737c7e44d7a4e729bec19abed2b02cd86938698bda068177189716d136d0f25bbd3d0db86490ac70936b8439f05e857f51c99ded31f9c5fbc3c083e37e7c0627c5b9e91f3b385c6b69e6ce87d2b912bd44d5b8518fd2502d8fec5a432100bfa1dcfd568ef060e1eb6de4bdef85e5e8f4d7fea464d97889ca600275728a8ffbaac87b9e5c5a4dea73857ae8f2c16d4d7349ec8648831386a934f2fc53d2d6262d29da0f456b30eb3757780f4fae4c90ac991260f49778832bf6cb7626d08d40fddc916f78b24831fbe20da2a4b2e5dcf426d9c4fd0886391d74715dcb3faed45c4c8d7c788679c492600609178705dc45f198c834148d94e007aaed5e2d20d17e500000228000002240000022018c47d0b6705b747b6b5e345fafdae8ebc751b02fb58ce206f63aa9daa8e07e70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a227a5dd308f6a551d3b0f5020e7f7dcd13b78bb9415ca1edecec5915ef2f73a214d8255f4d403b61c300d04a9136752254b6e255512eaeb8b930b64dd9be65ff1c1593e6b84fac377f2eae8ddbc8c3784a6143eddb1ed0d8cf5cfdfbef7702e1c8de8dd9bcaf560bcaeddce9c7a69f9bc9e2309c8bf949c4b7ba3885b254178b873e7ce7102a401a9c6b0d82ef7e2664c26f7fff46f1acaa1dd7b25450eea8156f3ac054a6a576e7292535a7c9541a93f6e05555a203af239544cb53ce5d08c9c16f9aa54790123c90fae2ceb2765697db2fdf365d6e5cece6044865f54bcb3725d161a0c1c427244867ce4de53c898d45850dff601c79221ddf3c4d421485f7cbfcae153f64bd6436deea25c00ccbfa39bc1d3f2ea3938741e84397210f869c49e983f29d814d7b1c3e11caf7673347b85dde0383f98c5b195074e29fed2e2c10bded47e7400b5f78bdc14003b6c30b20b58b0ec04c9c5d8b719cbf3b0919e2af76b1df534f7b602d3c8d00f3552f7641700a81a9c6a8adcf818c9c6e4a8ac4473afe9a8796ebf491ff3864b631ad5649999a2af95f83cce6ba8828cde534c3decaa53ad6b293a9f7448ded2d752d5dd45360e5993e05993feb1e0ce1d01000000040000000000000000000000000000000000000000000000000000000000000000000bec1d400114054177a7d682e8ae4fd0cdf2f6e41ba61e1028ccfbe18fca6f2554020948d2022e934f33fb579fb93ac78e9e0cdde3904047ebfef39faecc3fe29fc317e7e48c0273834d5e71798b41e5c7c2972e14ec8827a28e03879f3762c5922e3d3e127000000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021e49e981e814485f7066c42896adf7ef84f3b1d01e5f099066cd08023347ea71c9948dd3e93d50fd95eb22434cc49cd3bfa833cdc5ee4e2688018c970d9af36521abeb418665eb7ab9372db70aa95773bbaea0c99c0b5f4f2cf75760ca4afde482f37cc89b9643a0d39ff3096bae8195a1ac14c4dce0118f831dffa888790ae70c0948ca0ede1949220f5d87bb809cc58736a13cf3cf96a5fb895220d55af2f0c40868b57e821205abc7e9849d37145463054efcee44fdab52b2d736a55b66ebd151ddd052f8af007a131bfb0e4b4c2a62a3d983d7b04c49453aeeb4ba782b597dad2ac489169ea011b67de24b6cab3dd34f179bfb24c9fc6d8097a76be007034593620d5902d634667ad85baf7293fb25528f507ec14ef47a0a50a5bc6430d67e9f6878888d9a193c49f66a0fc76fe51fa65168174241fdb8b3c228afa1a66e4f2bd4916829fe7583a6335f0da8b2626a032d3d610228c5497e47655fc22a41e47127ab3bfbe690354f801dad55bdda13507fb254903591af61bd512e09701f0eeeec8867a82104dd61d5c4052ffc6356a114b73b08f4cb8ef8e7eb48b1c13df6df2a40a497b1c6b873c29f12266dce396f8f0b4044adc5c4853946a6936fb00000228000002240000022005dd9a28612c04c20b915b25e0fcb2061a26089da429cf6a9f00705c4ebdb8c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000269b3dfeca654b4585d4b53064bb5113ead20142e7ea25494d217c17dfbbc467627bc092280f885a0dda5432188ca72b7dc47c46d30f0a4cf941c20bec327975189c8c037bd3c1da4923afb208c6e9d1223f99169c164c0c3e2af15c30743aac0cf303d79ca7d58a1f4436f2e5309f69e263981e2ef8ef5f7b9881f552179a552f242fc2e6b5856dd2b9705f37ed6ec1e96126cbb3f7509162478da822fdfb3a0319ab8de7124f2d23e952d5ea2be3db7674598b1dfccbc05a35f6dc48056d36a303689401adce9b3ff2d9d70f26b3ff79af9e319525d0dde05653f128a5ae0adc8ba64c740310b29c3770ec3e7a8a64d7b82af90c5abac0de682744619cce47e2163fc888b61060ecf4bff46e4dc916f375708fb5731c938169493845da41d30109144db35f48669aa8a7199dea5d07e80709c06976a9005272ac074f85e64953728f0253e4a33c0306300291e450820c220798ba6d90f2e25badb5ad25089d49038fdef72ab74b8db1ecfe6955944e1a024981ddb802fcd69e731fbeb8a85899b353da4f06ca70ca22242d99ed31f30cd3b4f9e8099e4d1e54fe0f6c703120345fd741f463fda8c0a217ab0905c56737183667d9084ac1fd10b6d82fd100b7000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011309df8c2c151bd401e87a7979588174c94996cd74b48de57de883ae8d15be91022eb75296433b28fec874a4c6ab9d937e996602509966c0177cf4471e41637a05193f9991d6859c01f3c1efd54061c0be30a69a63606de54d8c089e2a1e1c0cc70000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d193f44865248412b0ab4a2382eac95c4df85ecac8b7962ca9aabebae6606cd2a716f385f711f06da1e93a80905ec6285e4d7c9de85513969d28560d007cb520a1a305de00a46121268895c6dc8b1483b3eda45a78e54b5e66b7620779acf6ced619c6d9183efcdc56f2a31a2ce02ff342423ac9f6ace128346695e27288876dfa10022161d20b6dbc3e56c006baa46f03cc5fbcc701ac1f13ccf94b45c8ed4e735c377c248dd2db1f44dd934ea35eb417bd7470c0c91e86aa0f99dc60ef51923525eee76c0a8d5121bce5275181a7d5f50e2ef8622846c67e8464e5c3dd62f8814dadd72c43a450e3cbfbcd4186a5b9f83860c013f82b12e4453e943dcd421f7eac2b1b5940c74215402926b46d5e3aae86ce8214305c5b5b407f63388384ac714cd76f154f8ebee93b79dd38e67884b1fa3c7608459625abd5e9cc5f0e60c8f180948c5648e2307f9c9533156bbfb6c718f260e7a9b309dd9473ff73a24521b904669395179de30d37df7a2264bc01242cc196a7d6f7b2c24a9f6fca382f8fdf9df61ef758418233b9d4e321cf1ac87175c431f496eedbc210b67bc06232f6d875cb874bc331075623acf8460a5ac07f4b3eda919e6e84e7e1ab608fec6e5000002280000022400000220108868e847800d381c55c18caae2157855b44c2da295bf114ff5e845ca76a72400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad3dc6177861c966cd36da24f1824ff49e102ec532c33912de1998584447bc91098783c82a92f230d051bbd8843499cd4e1175ce0ad3ed407bb1fcc45bb069eafd44b19eceb75bfdc0413a7b7acf26c034f5a0704f7b3893c61f96e6b3da84247a5714f9165592bb5564f0fd18e442b7d3386299224cb693af9d3c3880d9108e1b0a47ce9e325b5aeeb85aaf7f27a273b89daf83fa419fe4cdac039df1ea981ef5e8f1c52dabf4e0f60a119dea4899680f35106dde65cfc7dd531f9f6e16bc32b4e5a3a8f052b35fe417e1fe515cb23bfcccb1661a161283824224552c90cc5fee53c0b90aa369a2c2981058277c47feb73bbe95e20faa4c9130cabfd9cfebe8f8eda205e1bbe5573b749727d7e297ebb91f981252fa33c8b9877458b57d672f9feeea34482d2b8f9973baefb7fbef9dad7d432e068f19fdfda19ea012c123341443c5f69764530d3a2d073be49101f9e5ce812f5b871cb4f560687cb0d651e923f7e19f04296d7b4462e24768c28960dd3159961e933bc37c4f9837a9cd71069402cde14ff4a72479e3554d563938d0bd6813ee77158d7871a913c7c416cad2a15cea3bdce98d99e060cacb1331b5aac10eadf4c87dafd8dacf243992d13c0a000000040000000000000000000000000000000000000000000000000000000000000000000bec1d40011ab0e99bc5da8c5ddfd8cae0420c5363caef2b59d7ab741b9a9301828abcd25a022f8282360603a792b6769d240455adc4fadf1b86e1c19316faa2fa4a87608aa900019dbe6c170072f191a52dcc1d14820dc2148622f566a8b7a97bf997d15077000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066ca7dc96ef53fdb4aedaa16dc8bf0fd9f9d4133856593b54f27de4abdf0a77b88ee494a3ddc0e476f52cd8748e1e4f11f0b42ca9135517bb16174f086838247aaafccd6c0f551d4388506697e46e5622417f70183fa2df900fd32af1dfaf222162240805651e6ca8dc180b9959e90e32619f5b9564097195a4f3003ea81ddf9b68b96456cded8d6e4ff068e4663bf6e5a29a0542e8c605babb217a8aa3fd7c313e865a17318a65179f5ea36a0c6b93bcfce562b9a3d17d20f00bc7a0515911067658dd6546b6e170c53a12a2b4a60a3c61811f7581b6e6b83fc79db8c9ce6d3f8b529df6ab0656a4a3d27ef2e818d1a24383cc71012fbe3ed3d58f236f185f720044bb97b4e0d19cdc8f6437329d09ec7bbd8df41ee559a71be3516b93260807d10b7ab22b6d36bebd0734c4c4879acc4849099846c30b12536fcb06249eca6d81725254612b125ecc88d8c54675d779bcaceff7c27adc5b8deccafb464eabc6cb2c463888541239b615b5ac4cdde2f434ea47ce2385c6bd5b3294333854304fba750b823c8eaeecf3736757f3b9d391177088d003eaff3a5d6cf585e99ec303b320c5d4b73ac4da8d35b48be3459965c87f86e8d9a9ac0689d7c115a3cf440000022800000224000002201006e0422849e6a8b7772679617a6ca30fb7dc2fdc73addbef98bcc861f3976b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6439b5eaeff63fe0487dfd9e3f4a28abe2b7cc0aa483a84e1fcaefda2400878c53018e91a5ae98d911cbfc5c184b22edaa4d1ec30290640a9f66c166196c3862c9680b63b8b7c7ea97a8723deba87525edb99e797f053e2906d0aa0c61186f1454f222149e78cc4cc56738143f57cb3d2e69572084ca7e9fbbddfff6298afaf2b2ca64d9ca60fe14479c685dbf3406bbf778fa64ef0c04a9fb7b9d80fb4e495ba0a87de36d1953c1cdc427a67bc4ca4c1aff6c34db970c064c0d1ca1af71120943f052d3996a5d561f8abeef4616627b25f7c56ae8c4f552fc112d6291e79e9480df137c5828c4b7ad70267c83395019c2e7872a0387662afaa4a54065c88cddf77ed691860805613e504c526ecb1b21170f51ee5ce58ba1d2f650db971690370353da7740547c4f972f90563bf316ef845b03f19864feedef4c0dc989d59cc4401507d07128a6bc2b8d191bf5a3c80c7ffb489a69651acc55cc85d5988f3986b1c029ba8bbeddd6d91dfd793b78e44f8936049ead6b0c479817afee0120dd7d2b161b397da70c6682ccef556fce6058e6c4024a319410192453e18dc372c1e755f2e13a56d8c9430908ecb06c88b1f3f7939579cbf9256570806cfcd5178160000000400000000" + ] +} diff --git a/yarn-project/end-to-end/src/fixtures/synching_blocks/10_36_2/blocks.json b/yarn-project/end-to-end/src/fixtures/synching_blocks/10_36_2/blocks.json new file mode 100644 index 00000000000..0eb91a43148 --- /dev/null +++ b/yarn-project/end-to-end/src/fixtures/synching_blocks/10_36_2/blocks.json @@ -0,0 +1,22 @@ +{ + "blocks": [ + "1200a06aae1368abe36530b585bd7a4d2ba4de5037b82076412691a187d7621e0000000100000000000000000000000000000000000000000000000000000000000000020022bdb3442eafbdbd889316d90439dd48a742652e0a193daade7354a12a512a00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000100b59baa35b9dc267744f0ccb4e3b0255c1fc512460d91130c6bc19fb2668568d000000802ad4f929e717a5ab804b8a8ea9e45a9e3e5451adf56f2910f201dfada170f8470000010023c08a6b1297210c5e24c76b9a936250a1ce2721576c26ea797c7ec35f9e46a9000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000070dbd8d40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000caf4380157c46af79b1cae312c23c00c43dfb360af822e3ab5f9012891a68cd6c3d4414000000010000000100000000000000000000000000000000000000000000000000000000000caf4380000324adbf640e0f3cc3d3b5231c488b48ab0d9d20dff11faf1746bd4ff66cefd46b188890eb3288ab5859e03bfc642af41fdc32194f209f34e88df2996dbd1ee5eb0f82ba823c27bf47b723dd674e43fa4fd37a8c4ce3af4bd7b9f785aa123ff467000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c5f0000000040000000000000004000000000009c5f40009c5f00009c4c405d15342d76e46e5be07d3cda0d753158431cdc5e39d29ce4e8fe1f5c070564a0009c4a0000000006999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f814c2d321b88ded0e008e23bcabfd7119e218f9964a2cf6496c6498c3ad2b9c06000000000000000000000000000000000000000000000000000000000000000127a4b26f0fae861600e17526b39adb2f13d4d6ffe9421310b7656e5b576830da0a43a7d0ff038f2492a51b4465c73f28c0644cdde523cb652668b167eab21b7a0000000000000000000000000000000000000000000000000000000000001e3d00000000026715c38900000a981f8b08000000000002ff95584d883447197ebb00aabbb7777776f6677a7a667aa7a7a7a7bb676677fb4bbe68e855c14348cc8f00f962cc17bc885e043d68503c091e3c7911c5430848902012056f060904f496006340104390e0c193474f2aa260f079aaba6b57b3fb810bd5fb56d5fb576fbd00f5d45b7357b4a71e111dbd287257f4d1081f89cf047f31da48247a3c93307a00227ae205f4a3276c1385e671e299e81933f18c6d5713f7a27b66e29e6d571300cf47cf9b89e76dbb9ab81fdd3713f76db313977040f425adfaf87e4a027c9f009410dfa76407dfa725baa4e95d7c3f2d7bf83e2bfb97b439c0f73939c0f7330032bca4b1437c3f2b47f8be20c797b472f2108c144fd2ec8b5c3496ef8d5bb300782d6369958e39a4fb218d21df0cf9fd900f214ffc7efc1aeb5d094553452200de6e3c97308e5fe8231bf70bdc9370478f7df1e271023a327432a6cc600c9900f1d8c88cbbd6cbece9047ce364027adfc84cc61c899331240f13482689914c00bad64b1ee89816624a0e0d3d893b5d903c7980e451ef1be863dd59b3964ddc00f0f1278f62d1f6ef40fa3f0646a6089337434c1e4dd11d9ce2a3e777c47b49009246be00abbb343dc8f0395ce07392536981702e19cec2eccd0add82dd95e90096e8aed82d4db742b764b762d7afd1add8ade5ae87599095c260bd6e55ba46006fad40e96b54abaa2524830749ea1b257b2aa68ea255e31512a26ce47bad4c00ab46be3f8086d3fa8ec8fb5237f2c3d62b177be22dfc0c432f4bf6942702ce00bc9157c099cf17187e43168dfca8f58a155dcafb40e4c625922bc510f90b90004b953dab11e91c2d6bbde5ca4cc387d5923d75d5534b78372b8d0c23594c5700adb72ac15580ab50982d96ad94a3c6fb3a26167467412fdf94ac9177e1ce02002da3e18a731517f56ba9b902a8cb548d6f9d57ad5725504a466d19d7607c5b00d68ed1c4cc3042244c6aa333216b42d6772ceba5c822d2802809221fa7d55f00e1e00662ac742a925665687501ff30908f17c3dee93ff4a15d30b43070b046001c292c6b13c74e4f2beb4dab7636e86d14a8c85189a3f61cb5efa8cc51078e001a3a6ae1a823471d3b2adff01c6c98199b2d7cfd976cbbd8d46a8befb6dab400de668d54a9912ab50f1ecfb33cd8188ce97aceb154b68d1720d6358621b2da0032e6e7d0bb3dbfc0fc402eba40d63690fef54002ebf599bac0f7627bdeaaf50039dd1baf11c1cd9ada279d457586dc59af1aef93c8d3baf1e603dadf80e37100d9345e6eed175c53708618730550ce186fcd8acfb8bdd4be5517265779cb5c00b4ded60564b36dbd7aa3fa5ecd39d7dbdee2bf9536fe4f8dffe085a75b730600e12d8feeb8c672aa1a59e53d66b30a4799a79201e33a187fef29c6f12b5c0300dad678cb3913c3e76c0cadf7b4559fb7def91916ed825d9f3760fc9c348eb100c1b7318c1009cf2e8cce33b29e91f58b9615ebdadc90e0c64aa7e20ceb41bb0028e01fd363bc19f64e7fb5db1ed9704f5ad13cb7c4c2ac35e0ad2533d0b8400037637761ba4493458726e8e2c0133a3410863e5e07dd0e6b0016ad1089c2c300b255a5c3177d8d02b62457f0af1dfc1b482d7a6cb63a499656e77f2bf930b500442b336ce702909a37deab48c065e3fd185a5581682e8bd51dd1af0b76fb2700ad9787382ca1bf446c5e976587ab08cacfc1399a87e0fcb6848df78bd6cb78006b05616bca1c0dbfe917c944858c02973d5285c9552eaa68bd5162a60136c900883d75d55323b838cb8d0c039d4d017f098ec52853443bcc66235c9c793082006b6fcb88ae3177467dec47c60192b9c2e00878187a546ed451419099c9ccac00fc391f3e4d6d91c6ad9502da473ac0f2033f878d7725a70d161f01eed3203000977ad0b5abe223c7151ee4b6f80878c1a303d478808c2d3e82a430c507e92200a1641e242c3e7248e6b991ccbb76557c58bec2141fa48b80f61388a2f8788000e491b1931b9bc79dcdce73eca98f22c2fb1b8b08d60f03561287218b88e0c300e9fd7fd514fef59ac2e52d06ab1a4584bd3d40e96b14b295f772404569a7080092245385c1b202972d296ea162b41420360688f9ab86c7649a36aa440aa7a700f11d51df94b8c1a5e5ad52ec76ea2302ea5c922ed9b34635e0cce629869f1600083eccdb9d2e657d2032976b8549277f6e322b35c9ce644a719226189ba84900ab26397beaaaa77278375b1919734ea72c3366e0ba2a350031b345a3438069004a77527a790ffba4be065ee85ff2fcf921e7c20073f725e8a03351c836780b00d9308652326acbe883f1f3e23b461c02ed1b468884716074c6648dc9fa25cb000a8c4d6fc05863a55311e3a0a1054bf8c7f3364e87bdd3dfe8439b32b42c2200cabec8b75b4b32eeb776c76d63e4a8cc517b8eda7754e2a803470d1d153aea00c851c78e0a2a16112cb0525662ea655789c5b6124b5960a1bc5ba16af7629f003caf5a1e6c0cc6743ce7d8af5096aad7106bc4bb80485133e6ee72543fb3f7000c0219df7009dbf2d7142d352eeb72636edd92b76e49edbfec2caa3572a72c001af51ef21429fce680f62b70fc51aa46bd65ed2fb9a6e08642ad526b6eefc6009648265761595836b880e05c7a71a5fa5ecc39d7ab6ff1df4a1bffa7c67ff000c2d3da9c4178cba33b8eb19c342ee1ecfb52da8488792a1930aec3c4ff4f8c00e3075c030b22e32de74c0cfffcbf055edc1578b90b76bc3903e35fe4cc319a00facc3042245c6f8dce3559d764fdbb65c5baaa1b12dc58e954e061c2e7cb160009fe01d3635c0d3ba7b5eab6472aee098a089e5b62618a3d203200c7d01dce007a449b5d43b4190f84818ad904479e057c32e1f335beedc90b8b33c159d3dd006ddae863e0dd9ce89d12bd7789de03a2f7a18133bde4793e9d41ee7199351a00119fa757477a787dc533a89c29e3ce29eece05da6c6eb53c4447e706194fa100eaa372dae88f3c0c33b8327073cef9223db05035c5fcc765da6dc24ce19ad500d30c9895ce3fc12108c8a94189f9b0d7f7989cda20ce690b2e9ac0240819bd00c135cc905948c520b166c7e206a8c851a9a3f61cb5efa85d471d386ae8a88100a38e1c75eca843bec207161a4fe0ef97e5a45bdf449de07b0208c4839e4e9f0090e904178d7e49e22ebd663704dbaec658c84e806327262409439270b7be2500337bec27d882841bd97a0be2f828447da6bf23cb46037308df198b447fc5b900158e98feae3d62a6f23477ee88cf5494600919b5650470e81f48e518cd3136008c10098bd2e86489382ac8fa8a65c562c21bce4a77b31b15857d269770f935005674e370d83bfdd3bea80c59541a5faed50fd862f3a8c60d287854ab91d50a002a2c59b5f10a5f9674e60de777618d2e91d6257ccf51e178854f9eb72c0f820086315d1028f5ef0094fa37880362b180c88260a90908d51aaf31fdb66cba45001637009d2d53cc9ba90218ac08dce5b8c0ea4a5345ff565676c76a1c9c023000f0579c9da2d1bf1fd03e37e69f5236fa3d6b3f2b6ff9b1a45416a60cac6e0c0050c3b26c7815f5012979cb94aaef159c73bdea16ffadb4f17f6afc072f3cad00ccf300de320dcc72eca3e01fdd72a4e0838101e33a4cfcff8d38fa73ae01ad00ea41b5600c7d6d6368bda7ad0220bdc6c592b860177c1cfbfb0ed1bbdbc330004224ac37550ffe05c1df1fb90bb4bcf5e70cab82970f5a9d35a62a2bcc3d6a009cc693c4268494dc934b2fd251b88f5f6f4351d10ee6d7d14ee3e3a58cf1a000f13f76c9df35038f4fb10855ce2386d83d80c06ee4477b13f1a2bd688fbfbd00e29ff9ed75cfb61ea7fd36da837844817d98db8f227603d3555114edb3bb0b00ebbb8d7ff188a7a191861fbe94e93bd377fe03f4b5032b5e1600007339c60b00000013911f8b08000000000002ffa55a7bac2d57595fb36666ef3db35fe79c00fd989933fb31fbfd9a73cfbdb4ccb5250d6a5bfa4014a231374ac1f88a901400d1941850c1d686aa69a8a689a4c4a046099646214609463426ea1fa241d1a20021f887d510d4f20718aa688cf1f7fbd6ccecede59cdb3f3cc99ab3d69a6f7d00efef5b6b7db3af2adbd2d7945d7b50a9abcaaefa78a8fa46e1af8ee62b55bb007ba82ab57b6af7bc01e3da3da6298d66f1c5fdb5fbe5c5fda69917d7b14ad900d709eae079af72f17c8daae0799faa5e27640dcf07947705e027af218207490013d4ad7a2674c186cab4ed7fdd9473f3d45565a97aa6eb32df28e61b98afa80046a61b7e42d4beaf2aaedfec2babe90f54c5f7dfa08c80d2846d20b29a5440000b0fbb4d744740621da3e79c9c29f54ae5a7ea1a10790d1fc3db957f9fa55400eabc452878133e3b40dee9726d0fac74c84a8f827438d5c7548f537d0ad22b00a69c62aaee702ac0549f5301a61a7d4e85980a381562aa15702ac254c8a988006a53a778e801c6a783186f22be89d5550b80e8463acef4694c9898c3f834d30051388098a7e0f734422fb233d5827c6f6e28dbb723829e9ea9ea1b5594aaef00cbac8e9f593d3bb38238b3c2c05776dc0acf94fdbc0a53f55678101431c0ca00413cf4e119f501f4f3c36a40fd90d901581a92a50187c7230cc9ab1a0987ec000ef4086f8ec6e88e47e34c8d12604bc613186c32018f9389186c9237311868003ca626d011f46f273a49d5bb323d1892e02105100442f4301c0b4176477a4c0082b2749c646a3c01c1493205c1e91404a7532138cd5b41f017d51404c1823d00d19354bd2fd3a301091e50c07bca6201a9a23c2aa1d100d082ae7e1554c2380021e9099c2b9dde0e37357fc7aaf89b9d29fd8c823c1fceac3115d14ac6a0fd009c1aa716ec304c320b3ab20642262e448d55e12ab17195c29942e34c1cce0b00479a73e82c309c73b810bdb03bd7985c2c333d5d62b4d4e8350e7a999e535e00f7562b1b17ae2c7a33e2803b1e8570f820557f07c5cc53f53988399f2c20f9004c2d52f5f770b5395c695ec794fa07b5a02b017294aa7f04e4a83d3f53d67f00292cfc4266c554841b168a084baf1ae99062cec5c116afb59528432da83b79003da2fd38d2fb914604e966206ba8c9b83582be0340c5808a194af1001133a600228e62f1fa11b8b1d4884c5e572aa9d90809755c7390e0aa3f8d5ce78a278c00b550257ec4911e0f7373160e34cc5d3477e071e9c01240a332806eb2b973680073482e4c6b4c8601cc4841028d5ee3a007111827eeb458393d5889c9298cd300a0df84fa92de0c2d1ec38c505a7d905ab7c338716a6550473c416ab01e476a00b0ee80d6429831ac0798ba4b05b91901f96a42b609f9dd84fc66b8ba98312e001461d2d750ec148b98e80e75206604a70a2619eecd38e448ef477a08ee9a03005923ca1733c2d8c3b1a629c63440a606516aff2d5e84642724976f56416abd001bec8468ccb5ce44849ae2dd0fa829251045222dd8d378925913c4e39080b6000144f85a0fab590938c3732680585249a68293611d27047d870185df84c66f00dc43bf112a398a047e8336451a78372d7514b60aa61f2b541b52b574cc8004000232fd3325d349ce34341740bac114a6998a699ecad75b23ccd9d336e77e83008a789ab2711a6d461917c03b5b2cf1fe036a99331e18c69d43c64d4a90b09f002d321d2e4859389e8614fb43466c2403d82a1ca5d69fc32f40f023c01fb4c900f767d434b57ed3d01f4fe91b4c5fb33c7dc13766a29bb964322a482fc5374000592d336b6654877c3d9d41dea92e4601df95a3d925fc9bd5c27f4bf8072c38009d89cf83db9b0cf0978706c8a830ca31a5a49f55b3d4fa2a65409b09b77c27003afcbcd1a1e19eb40224a7c51c4297ca0e162b00fe935a95802b3c570288250095f95270ce093a27e88b0614724d2f702893880d8a39e4415bc2a1be4a573d009ab60aa6bf969b474d69136cfac43f9a231b5bff8304ad116e31d88c17a4bd00e2bbd51ac9db51eb9ccd855ee3b91ead326b056b0c08681bc00d001b6a530200e2c0696f04104b2acbb5e05c13744dd0ae01853cf34be53128d6995ea02d6300f0c7c470346fe54ceb49b185ccb985304096dc719650189451e8766414330700c34be8375821405675184a5f318682223067afda9cbb4f2d53fd0ac8b6e43400da9a326e8177bddde1fd1d6a9733bebcc0c18465bdc373b7de82f12d291fad00c1f16a4decf7e414f5067bd23a4cf55b112020f800f02fdbe4fbed6a95ea6f0031f4e31503648300a1da819c01c2ee4a6fa84e625feb9d04080ff8bbcc5a8b00ac7a95e9d51af2ae74315af25d395a5fc2bf592dfcb7847fc09253d9dbc12d00e3ff680171e6f474fdb65c1cb5e06e4f85510e719a47d43ad54f5306b4b57000cb77a2c377191d1aee496bb9cdaced064297ca5e6e53003ea6d21230c5331500402ca96c76827343d00d417fce8042aed5050e255472141bc883b683433d4d003f3b5ab50aa6df6f3c3d532bda04fc601718cfe578477ffba0f137d900e84d00f4b650bcedd78cb7f1844ddf0d96a2c8505c6eef9724f19c2171c989c2e85f00820cfeaa79f282fe716064a217c5270b9c92f427d4dcf8d1620ccf5d4c12cc007d12a74bfb1c590654478be2b43a37a7550ed7181211bc89c343bfc2709b890013d96a2be78f1d86f42fa88e5ec7ee5663729722678a22357a8d835ea6b7f300e2fcb1dd9f3fcc4a9e3f76803286b8a43743db62333c42bcd737a9fe2282630096ea7fe1eec4adda7e13760ffda5ccdacc10c3b33aa6f497cd460848c4cdbf003518c64875f62b919ff54b9995ac8b3d66b5df6356e250b2c7cc44e1d3728f00999a8485d7e0612de94bef477a05ee9a1b5923266921c8e04cd62ad1725dc90074b2c23172b1927b08b9496074fbb834faf202a32ff69995f837680b9ee48e0069a1c53ef20ddc46fc898ebb59666ac3885b2dd7b8e2acd7b8e2acd772c55900e72dbfe2d81b05011a796e486d5cb016037a09226901327a33e27506eec3a300e051023f0b9309d6dda62646bb09ef399075467233dae20ed8c2be010d6323004ea64580af18e0f6abcb009f9a005f316e715a9a4f8b005f31c0edfbca009f009ae85c15013ed909ce1d417704fdb632c0671704b8b9bd1914f022fada04e1007043f2efac5530fdc6c25b66f4166a92bccc84e9ef2d99ce33e08cbcc02136003b78dbaebe05cc5bd4d6ec186bccd9bb36e71e53dbd47e18b26d398d9652c6002bc09b5e39c7fb47d479cef8f6828c8b9b907da6a9f7f3f40a18bf42ca47290038dea5c4fe9e9ca23ec3a69eae53fb437075107c1cf8b76df2fd1c62d27ec200d04f7674f733f80d5501e4f49b54e2eb8ceabc22e17a2eee0eca0ae9222dc3000fa10dddeb62b4e5bb72945ec2bf592dfcb7847fc09253096370cbc38d1c410066538af36c2e8e9a32b0a930ca2106fea84a53fbd394012d156ef94e74f8bb004687867bd2da5ec9ac2b6710ba54f6f6ca5500fe81ba5a025ec5f3aa00624900e5ec5c709e11f48ca07f6a4021d7ee0287122a398a33c883760e87fa34b3d900d1ae5530fdd7c62b911769934c35e4eaa1fd0eea433de40a07451929f738450005c8916c6b1735225b158525db149638f48ba292cf92d7995f5c083bfb0b2100bb9de242e85f7221ec90b4eb172bfd839598f45fe642b82f6338651903487100cbd01dc87564234bf752c7952a8853e566c83b46e5f3b86338ac2d95b744a70055de12a3d4390264c45b62e5b7714b743a99e5b036e51ed635c06728452eb90058f585a1aeb82d04545d1c354c0d2c62d18b23bd1fe910dc357bb2863a765a005166453d4039807234de3ae16d46b8ffb8f32e68943e1415168984ba2c04420015755fa92a57bfff5b7ff4856bbfb2f9c4ebeffdf8a38fde78687ddb3fdfff00cedf7bfb2fdcfdc24b4f7f9978fa99ee77b1a4abbbec61c9fc899f78fd7b9f007aef8f4cbff1c56f7fe8e73ff3678fd87ff5c84f3df437ef78f2ce2f7d6c7300e36bcf2ba9c7513ccdea660097816064a0230c186cf0a38075464dab753b5000518029d7d810bd5e47f80c04d8cb2c8fb83c2d4be8635eee6340e8c99bf8ee005eaec448895b48b194576f868d54538065af5cefff8e58508d60563beac3ac003754dfa4438fce4b8adaf66e351216045dab9f597d3bb7c273fffee0f30aac00576c2f02da1f52515e85a5619c420ce7400c4c3ac0785ce2766d99b74557af00a3c3b672c7a54c1de0761a2e1877eb1e28bc5379451dd3037a97501e87ade30082daf10135968b9ba2f36358e9d88603db9d2ef6dc6e177b6eb72b7b6e376f00f99eeb3c0937d58d9cc1d4793cd39e2bf558e729a23b6651f618cc547e497900a983a3b2eb1599c12d3343b3536406e315061dcddb1007e97433d5e90155af00db073ffd3ef8e9f7859f7ede0a7e3e4c276d302c7a1a61fbcbb047cecf478800ce96227107fc3ca63aa9f35be4c7f812e56e23e4baae8c85ee09c2a94736dc00ae4c3242fb5dd6207ae0a0770107644cb4d59377bdbce5657abbd2173c927a00fa8c574646b5bf7798fe69669d32526b66f29485f13e4ad7314add95e854b0009ee6ada0782afa88e45d94b782a2772a78a4527dca4a130b52be99e44d7378002ac5254cd6cda4d4a54e51a41d0f8175e809562f6f05454faaef437937cc9b00bc83756a1e012e5807efac34468eb2bc11cef3956ac3437fec8db0a6778b35006ea3c7353daee9487fdce3ca91d7c3ca688495a391ac1ce5ad58193422c245008cb950fa5e44fabd518495c35bac8c1b43ae1cf6d01f48bf37e4ca683484eb001ca961ea520db5a888ad5e195bd6b088ad61590f1deeeba187057d55b97d2c0055bae2ca3211ef371f0530394195675cd6821a073d9cc0f911c61d172bc707002bc7fc26b0aff55fd4db6f7acd72d36349092089874d0fe5a2fa28e5110be70065f71c4133b671fb727f12b72ff7152ce223c98ceb9cc2a9b9dcf4dc6f904d00af8ee9ef50f5d47d15f2a2546b7bc5979d5ef96567a82981d396ac5b974d8f0091524750885f6a1642192243bd1f3153ebe648d688a3b6987a9b80da1750b1009b35fdb472025faf939d3abe40b837f005c2fd31c002bf372e4aa311ef5bee009bca2ae3d85419a3bc34da1b17a5d188a551f707cbd2e8d8d435a37d69745c009446239646ddb795a5d1faad4ba3118e906396463df047b98eeaad82e91f570063a3da3a55cb3c792b4fa994fe512d7b51d973cb5ea7ec75cb5e50f6c2b2d7002f7b71d91b94bd535e5c1a2c158e5975733f58ea263182b166087fb246095c0025a913a6289ce2c301ee1509afb0ee1fe20aeb3e0b5db3143d3dac1e4aa9d600fd5859aa4d5ebe543b31a55adeeca6bcd9b9bf9fdfecf41cc7d40451fb02fc00142efc47fc46c752adfb455cf0dc3f36f4bdff6fa936d9176793af2bd5262f005faa9db0540b4e671283e096ae26e28c459c2f941755462515463944ff2f42008f159f32a095a5da4474f8959b4bb5495eaaed95ca4e58aa75fff3e6526d720053a996159e84b5a08a75cb52adb18b41517c39f3c09f1478784f12a62badb200544b9be05ec1b865963c2952ea891c57da189e70d81693b07ba2f99dbb89f4006537dbcd4cb519ebf5a687c4ee5db69980e24241b58d3a56d5753dad20ab9c00702baf9d48feaab0d216d96d00be56b5d34acaed1f22768c88ad43117326f0006cdb4d5c4e9a44052cddb4721d58bac73c64bc0a878cca9de73c10e0805171003ac2748bef5b4dbcff26d5cc157ea245946e2bb35a9d3b557e6a25faee511b000aebb689ef01d5310a6b930cb8137cfced4033ffed00d4238834261b756485005c566485b27752f6dcb2d7297bddb21794bdb0ecf5cb5e5cf60665efb4ceac0060d22e0f7d0f9b13a83024e7ac08f9b7de20d31e813c6c159547543d77a5f600057a36d2080526ff862749b2c124d9a0a1dea3da26c49b3db9985650a8727900406e7679d6ebf600f384eae56c785a8e863e0f7ae67c294038e657de678ef90060c3366c340fd930274a390062b1eef040e81f75c086dfb1b1fa199479848d001e76c40e8f9b60e3983fd8f068780f95a4fc94eec98197643b5d2cfc75d5cd00c91e5f20bd3909cb6194b76daf23643d92f58eb1faa3ead890e529d7e3a93b00b36c7e118cf86da7f2715c522b9fc5d513d71d472e99241c757cbcfba4f9150088dca419987e843b2a4eda565fbe081a401af14f4a2306b91109882595ae2f0038a9c3a84bd0bf30a0977c11142a390ae83040f31df02716e50729c3f4e7ca000f52bc460bd3c5c77f733d30b7ff0ef50c9518ace875cb5ec45a82edf3aeee00c7c0f8af2a2e25902fc5213225f469f5026c4e419d305f3130501f7f2412b4003157f5559c565ea246308d25360fcff690df2787f8705ef9eff2c3f945dfe100f25f87f0981223d1748662bb80b60b10ccd56a1ecc7a802b4b60a7d533f98e00586dc8774498a87a9bf2d36adbd0979f0fb983e2b3f7a0fceced6b9ede9da1007c011fc9e634e07116778652213e6e1081af8b51c077e528be847fb3da1cb300847fc082d358aa22e056aaa814271471ae15b929609d840aa31cd47ff53af40058fd4eca80265fc4a9c3803aacde657468b827ad80b714d46dfba5b283214e0043d57bcd694800e5b3b80062496530129c23828e08fa3a030ab9fc0bdcd0d800c5a0c08131461b38e04fbe23faad82e9efca1d42f9b409ef617e8497a7115f007e8f7929bf4bcae436567cf6971b9b8e374e7e113b62e10197ba7d79218790001f68f0271c38e406b8f685b1cc0fc0756cb8b60cd71f10ae87785660551dc100b2c33d365865807ad530a4d63425e30f418caf0de96bc301f87dd4fca429530043fe52eaba55b36bd819f050ba064b569fa855d3eacf82845d73d3ea33d7f900cb36d762faa941906bd2f19a58e0d59c1a0a7156cdaff9fc1d1dfec9efe87c00d38a8db6fafe9a6f319162411de4eab51a87ae0c75ad56ab73e881ba97569f00bc665158123e9745640a8baab52a875590ac91056d70d640d43be4101925c700203488546878078b6c2e32e3bae1a45ef38d5c0dcad5009926e56ad69a940b00ff44aea669a55cbf536b0ae758d0028b2d83cd972150d75a1c3640a591569f0035afaab5caf975157e2afcd4ff02e3b668efb6280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001242ab1a2bd6d07d8d61ea56d85861446349e52c6b7c0612b702cb1e6db6ad0b089000001000000000085864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631156eabf84e3ea50d40e3330224f2d2e81648fff8f1f7ec1bc6d2873cca6e959d0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000114c2d321b88ded0e008e23bcabfd7119e218f9964a2cf6496c6498c3ad2b9c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "157c46af79b1cae312c23c00c43dfb360af822e3ab5f9012891a68cd6c3d44140000000200000000000000000000000000000000000000000000000000000000000000020052cd2b9335fc572c33472cfbc5674b1a9196653040f11db88d7aaf319ae82700089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000200b59baa35b9dc267744f0ccb4e3b0255c1fc512460d91130c6bc19fb2668568d00000100067fb957b452e560260c88ce3e1cee915b434cddf4bdb3cb5908ba07c5688c4d0000018023c08a6b1297210c5e24c76b9a936250a1ce2721576c26ea797c7ec35f9e46a9000001800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000070dbd8f80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000caf438002f5b19ccd8044910bef8c81a3bd2af55f5ceb75e7a060320d2ea818a7b938e5000000020000000100000000000000000000000000000000000000000000000000000000000caf4380000309fcc649b9e448acf0fc0e02eaa2231ffffd7908ab0cba151df5a99705837a9c1e160b0b73158f3bb4576f4fe7c1763304049e85517c02129493c9bc1f1a86d91e3c545786f2098a0ed6694f5f49fd407d1b60a50122e995fb37b7f1aaa3e14f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c5f0000000040000000000000004000000000009c5f40009c5f00009c4c405d15342d76e46e5be07d3cda0d753158431cdc5e39d29ce4e8fe1f5c070564a0009c4a0000000006999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f801f595d1e7be64f80c670849206be58b45246f44302c15435100d7eb653d645500000000000000000000000000000000000000000000000000000000000000012b2a7fc4bd74f07a2dcf4a5dcb8642b3aa7c16132e115c032a1b8d96a870683b1de9ccd83e9067a8f9f84960c8399af3bb72131b795aabb4888347390db8b8de0000000000000000000000000000000000000000000000000000000000000c7700000000064cbe507e000000fe1f8b08000000000002ff4d50d14a0331109c640093cd5e92f6b90f0a822054aa9e2f77e09360af3ef9e06ff7ab9cbd43e8c18400dd99cdec5c464888ef10bb0023449407ca11fc0aa1807ddd43ed6ce75ff67600de80480417165b5661d9b009336f41661f4db3f3f995f4fee2837ee0615d30004283f9c2c157b709a860d73006095ed648b2f5295a67d723abd257bef346dc00fd24da0c44232860474b940a6d85c6c1cb60a5be008fa8df01b883e63261d000139e2a4407d79e514f38be51536ed5563d54ccff79f24d1e92393145e24448009d0e49e83043dc7d1d11f83ba629a4fce154f6bff67116a2d9f63ccdd77e6e00912698a79971b81eae7fb4916d6790010000da4cf031000001bd1f8b0800000000000002ff3d523d4f1c410c7df3e119cfc721a50a4552a68874097b45769500160e8e86e24a7e00120542a247fc407e15cfb31c2bd96b7becf7c6f64c08ce00ef10f416981062a682fe063fa564feae7e22e95ef7478bed5781a7b8858708008b4522f53584fa06e92f0fcf1610f5706345074b9ee09cfe01be211e9c9125001f4916ca3ca8020a26179c99ea192c75f6b1d2ab9e96d469a4d861a3e9fb5d00242a03600e1aa51312ac48350ac9a0154eb493f217fa4a1942279b185b1f6c00668a67b0b7d957a284e669a536e28368f345d43f8936e4e831113ea910fe1f00e413dea55333c95c2f7493b932d8cc4c1694d11b79947de62d2e2b422e8d580047b42dae67a79c7cc87e541499d9c80f6ea1d80ec65dca69070c974c95f578005a9a9ece66689e91c305f19ae57054a9d7f4df32938dceee2c9d4c12497ebf00ae869b6b1af828e035da2e1fb956c17a7b0e83af44382db1621b546ef58cba001ac4c30ab1b656adb5c569500e948a7899394fcaf8333183ca166f8b5d591c00e9a044df0da36c5850346afd0ea755ab3d42fec623acabac4d12f0552bcbd5000a1ae99aaab9325cafaacddc42f6b2c5cbce05221af1c582f3f7f3f70f7dd500175f03030000dce235010000013f1f8b08000000000002ff3d90bb4e0331100045afedf8b17e8506290520da480196c62b101248846c9a14347c74be8a3bde00c06a67349ec73d638f304a3fc3842330c2d84087610b7e032df0ffbc850bfb00b0ff96f37e31689a92c21ce65e98175b0a13a76026695dd17fc1d21fe026e900f18f6cb93ac8d05138f71d76273e46b821a607e01a69567d25333416206b6100544649183593431ae1746e3a27a6924e4ddbd4d7ef1d85a1aea7d5e526ec4100a1550e219393b21da104a96cac446e51ff9095482bc8da91125acd642d4d2700aa98a219b9d2f31db4fe07d50b684d46cdb6cb67cabf208bfc0d9c8f5c3eec00f016f9ee4361ed036587f727d602475d2d593453eb4a86bbcb160b97c9e49b008e9e1dca672a784785139ca8f71647ef826fcaa7575cae2e824ade29a45ce900b3607f5064a821cb361336e7cdf917686dc2f811020000df27eb560000012b001f8b08000000000002ff3d50c14ec3300c7d49b6c47593f4ba03481cb8200d0028126aa571a4745c38ecb7f7553ca7d32ad975deb3df8b332238ff812067600044d82526c80bf80923f1f7fd88288b2c17c3962de019ce8855d646ac5b6cc400cc2984d95a77cc3fd8cfc6c637928375991df0d46cccb11b11bdb20a79027a0010ca185d7056f69e602e93d7c253f1aca434bc70c2d7bf1d653a46669040a5001a4411b350d3a15738edeb2bf08c7a766dd35069a466549b9195ea0956cae700bbd1be34bc190d77a37a331ae851459bbc50fe938b51fe0131f613ba74c4ac0008a92be4be508e38bd934b1c8db564d3d4a929055ec56eb1f91254997c6f4f00e324534122157e114dbdb544e6986472a22783d4d6b776db2369aeccd96c2f002836c407b4dbcc385c0fd77fa6b1e19cf5010000f73a3d03000005941f8b0800000000000002ff7556bdab244510afee9e8f9eeeed99e9d99dd9dd87a2a2890030efee9d1ef35003913beffc40e45203f15f3033500c3410414104ff0953110031301283c3ccc3ec82c3d0c8e4c040f457d533fbf6b873a17bbbaaabebe35700d5d5734646e92b64ec6b446764b21213d967093f8b51e2efdae354d8ebf6fa002de65d4f8334863ac7269973e664985fa51cf30d2a2e61b33e2768bd79830f00dd64612856d5246a0d5534696399651696012b1396052b6396854b8aeca46d00b6886649f48c0a3250017ea178932a4cc643c2b184a73365142f9d06d3afa0007b056aa5b1ca57c25fe1840e6f4123dc211c21c2060547853799239559774a00f41cb99b4ac0516e71c0919c5dac85236b6006d830182e9ba82a477ad99129002bc71a56a7a4fe2037d2b54965b068bc96635539a9327b8c8acc31ccac568600c00cb6f3987c267bd93c644fdcf470f36df2ece69322f134cffe19d1c466d900d372f614640d3230590bd980ac996c846c41364cb652111164cb64942879d9006a306307ec2fad27bdeec0ea7487a08f56936eb996f2f5727c7d741ccc758400540415f523575791e1f4cb69f941690791364c7a55a32a9a913e02c4ed481f008ba72be866b78c5903e7f7a81be9d349352d406a05a4cf12483883adcf21de00addb53ae63a8f86252a1668f39cb7ece323ce665ad9d5c0e4958f1a699b353004cca1f1c8f9e297d41691f50bec05e87460e8a68554faa6e1e14658fe36235001eac7a81193e15ba9874518b23883baf65939dd5e5a17e234916a944fd46e30011b3b72562fe9ecab97e4db9d8288f6c805942693ca86f8ed4bb83fa7256ef00a0be3411eaa340fa4b82940b876f5f9c6f1f9f7d1847cf4c071b06c3c794bb00df703ddaaa461e9ea27aa4df2735fb22272a37291751fdd14bf5fb792c37c300d798ea287b711eb207dfee515c428f4bc92778791912bc0f211b52e8fe216400bd208bfea082cda1fe2fca17f5f9a23e3f520f668ec44514b291143685f08b0007d5737d17b3fa7c561f81864ade0b48ca0848cd29dff86654c5f3e97a7c7b00ff8d3b6884a8cd8932731950b4a8b5226feaa54135170d8a978d342814a7f1009232be321e6d4e6d539b131169492dd773789159210160da55a83107ced513005427ef027bc73963e3c84c517af7c2d2c3c448c646b20e879ea58e0fe169a800adc1ab43e8ec782cd4df7837724a0d547a489ba13e3231e9d9a4679357679300da21719e2b0757a9e55bdca212d54be447f50e6e718bc186b382f78a0c7baf00503647e735abcd3adcdd02a555cae54b821b08be4e9b83e006f3460471a4700099e8742cea58f4561245306d0a263f0e46accc2a1c82c1c802fce3e8566dbd0038fdeed2915aee48dc7e36481a63401b495a6aa9606e7a68e841f51a2b7f5800b9c3aae8d9c19ed1ee07e87e9f8639964e0f9887b69f54bf4147ec50649d6500990f920c80040fed90795fd130aa0f81cd9ad91891311aa0370e5bec7f42db0039f0750a3c3b0e3cb9b3c5bc8dc3a4378344bce688d70cdb9709b649f725de008e7a54df493b565f4b3bee21f123f5a3fa26d90fdccef30198b05e1a04933e0085c4d16ec5da4e5a322cd10e115eb464c4bbbee8b36bde3b50fdfff89f4e0b00ecd50efe634478dacba3036fa528632d4f0d9cfd2195343a093f43008bf1ef0004ff9f18c7bb88016e04f176c77bbb3df67ea6fd9c9b41ef31ef3b78bedb220068163449f00482bfd2c941f004f38908e248b1dd8bce3d8bee59f44e12455c00fd230a523232abd84f7ac0d8a220ef4a7afa7a71fade5c10d4734ef095e27000af4b7480c2875aee35b7c220df0db05c36fc80fe49ed6cd93de25ea7f62a2f007fd9ccaf6129ada40cdc7aeea7d633e91a5d2cf007d3b9b2c6161e1f90055400e11553ffd87254ff429db1f9a89b73feaccc152c91c54dbb228b2ae04065f100d9b625659d75fce18a3ff97075692c6f830ed6e1b8e5031ee6bcb54ce6426a006bad67b282f56ad4fa8a32d0c8862f9fd3eef6eef67f1a47be96370b0000fc003cf9cb0000018a1f8b08000000000002ff3552cb4a2d410cac74fa91eebe5e00dce942776e84a3ce0199c19de0f1b17121082e44702ffea85f65a5e738904c0027935425353d41256ca1f6084c50cd7428e7e0536819b0bb5364dbd9ee85b100ed5643a0c9c28fd0c53391fe1ee992e98305c47b78f072773241a45c008788008fb2d2c479e02b222651f163094c469b90a5cea19a83049b43b269d47945e30031f467069e006bd0689d4d488d63a64232d40629b593f20c7d4f49d03d65c5004061583dec63023f564ff6464a5a2d9c266fb06dd01c13b16e9136b89ea5500014cd21d1a7a8b36839412ed9e571bd860d7998ce912e96973f3dcbdfb719c500d7d52be2252f54369ad61bafe430509fb9fd2353f3459ed645286d32e5ff4200b0e862bf51f784fdf4f43d7376759dc407cc49ffd3ab43bcae10eb6aeaab2d00626ab953e84c3cff45ef5636f820a61a97fd5e5ce424a48351f0ed38d4033600548bd68e20d6acf9fde06bdc8fb6daba2401bfacb1ddbca193ae9b7998461800ccac7b58c95e37f8dc8a12d189af161cff1cfffc024357b20c9e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001242ab1a2bd6d07d8d61ea56d85861446349e52c6b7c0612b702cb1e6db6ad0b089000001000000000085864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a63124877c50868f86712240eb535d90d1c97403d074805dd3758c3aecb02958f8d40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000101f595d1e7be64f80c670849206be58b45246f44302c15435100d7eb653d6455000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "02f5b19ccd8044910bef8c81a3bd2af55f5ceb75e7a060320d2ea818a7b938e500000003000000000000000000000000000000000000000000000000000000000000000200c6aa593aea2d24ef867c05692347ded5ec3f8af223396e535be7b647aa425b00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000300b59baa35b9dc267744f0ccb4e3b0255c1fc512460d91130c6bc19fb2668568d000001800952b2c07d5c0a3cc593813b3ef8da59cf6360ebaac1b5aa653e24a55b2f533d0000020023c08a6b1297210c5e24c76b9a936250a1ce2721576c26ea797c7ec35f9e46a9000002000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000070dbd91c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000caf43802a293bf8fefc283d5b4fc8c817665e13fe18be70ccad973e5a4f870c5657c6ad000000030000000100000000000000000000000000000000000000000000000000000000000caf4380000320196484b1202d1435a28ff7fa96d83b1b9f2b53007face1c8bd7b0a455e945d0c661c51495da9559f09271a89b5a5b33fc83574c737551a6c2576b5bd38ff6d22bc6ce50a3b301a4a69de618ab29d86ee1ce740fa682ea804ce54affbb7e567000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c5f0000000040000000000000004000000000009c5f40009c5f00009c4c405d15342d76e46e5be07d3cda0d753158431cdc5e39d29ce4e8fe1f5c070564a0009c4a0000000006999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f82f6bcc824014da6ffe5a5d9357672e71023705b12b4c0a46422b36b1f8e30fe800000000000000000000000000000000000000000000000000000000000000010a61b86c05c921bdc04ae78e1e19c5bdb1d8a9c2a0aafef4addccf8fdcba38841ff77dec4100baf62b87b9a1e824419d3979d0b2a4bc4d28b6dc5cdb155a53b900000000000000000000000000000000000000000000000000000000000004550000000002387e3048000002221f8b08000000000002ff7d523d8b1441107dfd0031ddbd3ddd3383885ee0ea9a08c2a86bd20b0626b71f81811c06829888a90800226222221a991898991a98f84fee57f9aa678ec5e406aa66fad5ab9ad755b5008651fa214c38006b18ebe910ee824fa079be4e9770611bb667826d2783a6a9002554d885dd1236ecc37e432acc46e2967e87867e0f779fd47e2fc90729bbaa00b56f8a5f44565ec47bc055c48312054a2d78bc0e2bc73b42b237e06ca0735600e8d6512d6391426fa702b4a0e284b5324a3e5b9dcef4ac3e5163fd65512dcf0026e85074682f32c331738a4e99f6ffcc10198b3a161d03339565a640e4512e006cd156b4a85c6a9a4106a1247d2494fd8847fc5e9904e34de6e5be218f785c0054f472dd18a19a68887f8619714a4c4f584bec23da110762a615ac4dc4de23008d7842cc26c192d47c2b359f126bb260b923f61add8867c4dc117b29d8731e00edc2f3f8025efa5c60dd8857d7a07cc346378d8c1acd6c75d4058d500a1c7f00fee6322663ce33e67d8df9d96acc528777739182c4cbbdbbc25aae617d391400b471c487023fbd225bf2e9b28a640aa5707c23beb0b2bc78b3afdc36deec410051c930df64e6e75cf3f36c359fd4efd2bb3f9cd12da3618ccf9d4c4abaf50300ddb49566d5717cb9eb09fe447fa8bbc155ebe9fbdc15d599236920e91786990014f4403f5452cfc6934f3d79a09e61a87a86d92ef4fcc6403d49a85dd11d17006f912681caa02e9108ace3fc3b099cd76c8393f393f37f5a578201d203000000fa3858e80000021f1f8b08000000000002ff7d52b18a1441107dddd5d3d3db00d33d3b281c1778ba0606c2a86bd21b9808eede1a1878208889988a2022262200a291898199a98189df725fe5ab9e39964b6ea0baa75ebfaa7e5d556b88b10f0021610fac21aee5827017fc02ade5f6e4043e6cc3f64cb1ed64b034730213760061b72107b2d103c7758786eb29fc7d72fa538dda6bbe554d7a53d74564ca4500bc075c47dc1bbdda9805dd233875ef28c991e47ca0382291ba6ea70274a0c00084b511a3bf9d4d67aac5d11225d58b8ae9e88bb3ae58d75d44ba43e4743a4500facb918ebe78eb8bf58e9126964a11441589586cf48ae752c304198492968d00506e476cf8bf92046925f349df91473c2a46d319e3234ce385f817c888c7c400ac28261db14fe8466c8949a75897887d401af194984b8a25cdf94e733e23d60064c5724fec0dfa11cf89f903f64ab11774e3a2a1fb128d56b7208611af8f980032de808f513bcbf74d563b3b530a022f7f7b159367c1f1ccb97ae666ab678e0017bb302729487cdcfb6b84038b1ad529e858848f056edac48ff8ac191b666c009a9ab1996dd6d528a5c0b3d05f995937beec1b5a7dd9836292305e32e373ae00f179b61a4fea0faddd5ff6e8965888b4b9d74e69b57ea29f6651563ddb97fb0025c15f58eeeb6c70d4965c97b92fa697036920e9378699e4ecc075a8a4250b004f3ef5e4817a86a1ea1966bbd0f30703f524a5f6c5f61cbc459a041a411d22001558dbf96f12388fd906c7e7c7e7ff01b796338dc1030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001242ab1a2bd6d07d8d61ea56d85861446349e52c6b7c0612b702cb1e6db6ad0b089000001000000000085864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a6311011feaa54609098a884322267ec754c637b280c15aa79c3be9f1394e2b29cd3000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012f6bcc824014da6ffe5a5d9357672e71023705b12b4c0a46422b36b1f8e30fe8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "2a293bf8fefc283d5b4fc8c817665e13fe18be70ccad973e5a4f870c5657c6ad0000000400000000000000000000000000000000000000000000000000000000000000020023a566fa84658e059b065eb4f062afdbd9e2c9755c17829a4713938d7e2b3200089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000402e7f23f948e9fc88ac92b1b246da632d159aaf864172f01af4adddd41bb363d6000002002588b9ea2b40a7358de81117b42266e0510c5180d36ff270455b5fbb99b5c7750000028023c08a6b1297210c5e24c76b9a936250a1ce2721576c26ea797c7ec35f9e46a9000002800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000070dbd9400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000bebf73010dd9443407bee8fa111e54c5fcd0a1ea3d8e0bb3d4f7e0bfee0422aafe1592a000000040000000100000000000000000000000000000000000000000000000000000000000bebf7300126b1ff31f94cf147d562076640a4e323383524d8026b08a02078b7975a932a4003043e70efa91944aece96bd6c5f0f2c07c6334f71da628549ae4078e68a27912903c263eb1281f15c75e256a08769950f8cbb642fd94e5946c96249e2f353242d023f8e950ccb50cd38c288454f2b14c95f1e37157dbfd82ec532b77601ba77dd0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001aa2eeb54f3c7a56f7e54f128009deac285ef7b29e0163e0271d1dde6b1df3e98b40ccd9d6c58efc98497adf92ab6faf1d08374296d4b1fee1c32023045f99ea7db2ba318cef122e62fd0eb79f4acfff697cd5ac425fe9e3ea7d1f41a1e17afe36234016a4dcc20c6a7eb11c4a51ed4142734dc5e1528b80d00125252ebfdd976c78c4c3cc8b3796b838a3fa8d8cbc49c1b2a725c41ba7e1365a50c03f64f8950928d77b39cc3f85b34d6d31f08cd166e58674146fa0b37821d06e8108387ccd19cb33f32e756bad4bf76cf13119a246f0116b2c26bdc84212f62d139b14e4a9e48d46b5bea83cfab12dae613c0cb51b23100d56f73fc09aede07bb1e1e6d360cd289fbd59072b450d811dbf9bd5a1ad0bb35293a5c22c2a51de255af3440b97c08674c935efb33d5ef8b01bddf1470d0bd0fe78a08b5eafc0541523a0dc3d0b335c42d1bbcbf2a811367d6122765cbe241247c05de2b7dd24a1a8e4f757dc43fd128f4c7e45dfdffa17ad8cb824a72097ebe0a56a6acca1daae8e7b501ffe0eafe9714c7998c8af478017802ab6c08b2c897d25892d243f304febae64d26509eea32733206ce6e16fd4ad3a7a5c22f674b267878d09e70c133fe52e28f427a200000004000000000000000400000000", + "10dd9443407bee8fa111e54c5fcd0a1ea3d8e0bb3d4f7e0bfee0422aafe1592a000000050000000000000000000000000000000000000000000000000000000000000002008e71049b1247f3ae38ef8ab8cab16b1131dcecea15c227cd2e9531ea94615100089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000502e7f23f948e9fc88ac92b1b246da632d159aaf864172f01af4adddd41bb363d60000028009ecedd8323f96c230ca0569026f0d0455a7ffb54d28d6ecea00a4e8db1b65b5000003001e40ffb954dcc2d3836f13ac136a631f87d525360bd752fb5b61673e899141be000003000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000070dbd9640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000d704174101cee1ef8ade44a97f59177ac8736bc66e8e258c5ff907c4779114a73efdb27000000050000000100000000000000000000000000000000000000000000000000000000000d70417400042f3b2d614964b456d4d533f653e3c65e683541bb9d63be6af6b74a22e3a2b0a311c58c442882343993398e172a90d153a03117964c6db38d5d1c970c01b6513c1826910550bf366b1888a5cbaee2eaf15529320d247f7935d0ff928eded56cac21b87e9f080647d0252a0b13eaa76f69c147e5f8e0b2a1c29511e09d988247380008305bde360e5a7a74375e86379107aa83e3cd6bd63c28b4e7b7cd64cfa2cf48e71b561c7a3f26940dfa679b6eb6d40aa7c6df0eab19aae031ef5ac5e22e9602bb1ff6ffad73f18bb3ff27eeef05e06670096c1cb2c6467932bdf976226befb74c0000000000000000000000000000000000000000000000000000000000000001158192ad947ffb53af750050d68dde24626acf401d8e6499b4593ad79f7b832a000000000000000000000000000000000000000000000000000000000000dead1933efaa5333f428512b310430b8c5953a7b09e42b5cd1fc8b21b27ad812c1920054657374546f6b656e000000000000000000000000000000000000000000002ba96cc27fa87709087f68538657ab80b67beb42bff846d4c2cd55ad8a573d29000000000000000000000000000000000000000000000000000000000000dead1d9391b587c76d6718177676a3ccb3f08884c810bca90277f48984301cb7682c0054535400000000000000000000000000000000000000000000000000000000155beef5fc81ddd6ac425823efe08d470d5667235711728aff79681f98a0b420000000000000000000000000000000000000000000000000000000000000dead13e0a775813eb2ec208e7fb6fb71e2d07c046ccd7c2ef5443d91e1692fc2afdc000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c5f0000000040000000000000004000000000009c5f80009c5f00009c4c405d15342d76e46e5be07d3cda0d753158431cdc5e39d29ce4e8fe1f5c070564a0009c4a0000000006999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f82b7fbd849f92417221e567c919124b68c52f08deee4ce6c5d7ad71ba349937f20000000000000000000000000000000000000000000000000000000000000001081b6fc6f0b0c08088062e4bbb563dc00ace0177a5fd345d8bc1c4afdb77b8a91e4ddd5e8fefe0a88ac60e5d36efc13bb4f937ee19a1f37669f20a186ba00b060000000000000000000000000000000000000000000000000000000000006d3b000000001310763932000005841f8b08000000000002ffed56cfab1d35143e49002633c9647ecfdc67174fa90882729f7d0fec3c5a14046bab42b5a5a50b572e00ddead22e0417e2c28d165110410495f70fb8d40a2ea4b81344415c8a4205a900b40b17eaf765eedc3e5f2bf40fe885e44ebe24e73b3939f9926d314aef887100a744b6c524192a710f097e0e25c3df93f74aea4eb81367899d988a6814b58b004e31bb4412d44f89457d52d247d0599ee4f053340493ca8fd1a0112fa3368e0090992103288950324309262949667cdfd06d49c5d0c47dd1c758fbc7677f3d004a8ea9cae7a272efb6441e84174ae4701cc8d5a1df98305b0cb2ad8ce2a7d300004301025d8eba2c0015ba18b52f62273a8cae4e2764400928e8902a97341800d2f98474c7263a7aedc6e810e2c9268cae28cb7d9400cb0acb417188519e2d00e5642e26cbe3ba8b2d51df8b5bcab3a3f2d304ec087acb51957e53529f715700b84db1c45d019c3954cec73ebf2ab18fa1a19717c4cf5e66b39719b6c13242008a9e6693a7a34eb3194a67c8a4842a4025a18a5049a8065411aa0955841a400035a106505e136a013584da18970ecd96cd2ec6859f2dc1ae870d941626f2b000948b884bc85bec4fd2212e97a55dca6ba36ab01326e81e759f0fa31a1aacbd000947e9ee7f7fff1cf8495f61effa01f1785306c6635392266c12d4b0d1874700d746d4da4ae3d0df0c1865ef88644192c50648de918d15898d240b90d8458800f62cc2db2f0027a1dfe4a7e6801e7d3d17980eb6e78860d7b37b245e6f03ec007e2c8176138ea59d8565c4109d4f11b136c710b52708e05e3c2c16a9d48c2a00f3d8ed74dab8d432e19182453d6f6cbdded808d97963ed7a6353409650ca330089a64eedb45197d1dd640576254bc17d5cd2a57c3daa1acc557d6bc8d4c110004a85a554351221b52dcf5759b558e6b7d2ae727664b29976f6a98d79c3cf4a00036cbb51371d5a1db248fb8e636f936395664fcc9b560f670c78314906949e00fa35aa763289b854535232699b78f6e855659a88f20c9485475827b44c44350065058f6f48b594ab71503415a7de32699406c253e11c2608d45fa3509c0c9a008e4d8a7239afb4dcb7522a873fcac3f0c070f12577e6a7d77ffde48577b74e005fd317feb6977e7c66effce64775fee5421ca50553bce6f0fcad577e29ab1700afff909cfff0e93f93d3e910defffde5573f38f7f08dedafce656f47715d0d0087fc520f8c9f4fba8ffcd177f40af248db18148dafbaa1afcd2c274d1ceba300af4ddcaf386d1d74af87e7a959cdbec0b78cc73ae89317912d77a372556c4700192c6ae413b340171164bad64532aae4ff948f6259a02adcd9f9b2703755d100245c6371738d93fafbe79e58493d3d65e2561243315d36a32a26f109a30ed3008c699f339caff01879c211380ab95416c265eeefc7b858831423cb94a500fb00013a870898410fbcf916a35eac9a77bfeee40bc13d3c50720628ad7a6352da0018dd0dd41b81174314d68d51d91efab2d163769a0eb8607a2453c5940cd95000d10455eb92a42bb5399cc2ee90d2ee7b07ed0ee9a8d28c376e07bb19ec76190075aba7087515b06e07e288cc66574b326a66287a12f5bcc73e938e36910394004e986aa9f75db0f1a08c31fde67c595d7553be345cb4e2a2db6101439fcb6200e55cd00bd48b362efab8ac148dc46d6141dcda1ee3bf907e22b6bc2a7091b600f15a21793f1c93590b49d231b21d49be994876b12267f06e14ed123cf7d45500bcfcac4c1b12c90302d07771ad2dd7da92f2bb15a51e20132def74be6b183e009ca9349455a48d672c3e27409bd50d26fe2ccd8ad6dd8676928c2844598d9b008c6a90152568b312af1df5dbf426a3a44034f9c4da55ceb83440495298ca3000e60f972dd5359833ce2eb5dee519b70a4ce2f0e4db891fbec404ef1297df2300cae52ee7cb187ff1659c4f6552942dfcb91cd31d2704d005e7d8b4b1a99d7300814d0f76bf54d777948145121fd99543570e5df917278e2385980b00001d2400add0000012341f8b08000000000002ffed5afbab6cd75d5f7bad3dfbec993d007b66ce99d79e39f37ecf9c3df761ccbe4df042e5a66962487b434a29da60b50025587cf58608ad8ada083785c6478812215483a025544d8a52ac14b43fa620006a5ba53586189558698bd5a631a2a4fd7cbe6bef3dd39b734aff800e77efbb00d6777dd7f7fdfdaec73e179471f44565fc3b95baa08c57c44b95d60abf129e00a252fe95bef2fcdbfcdbee41dfbfcd3e4ae3712e6150994b84b878bf4915f000be5d7978bf591de07d87f2cf01b17a3ba7de49a220ef9412210c3e2ad1a6f8003a907b23e882725429d1258107193c00dc5341a283e280a4edbb7c5959b95500194f88a94eb9a49cb05cdc2ab552c5373b4a8d8812969457088b2de514c39e00f2c2f01e81a68fe8c7c9e0e939155aa54aee35bcf4215eb523d0bb4585b1ba001984fc2044f70d2a24f9d8fd29e1e08ff9ae8378bdc1b94d485ea7e44dea5d0027a8055093a016f56e66203703955c82da00b5086a0314b4088a006a13140100546d13d4012822a8432bab2e25eda1dfed1d63a4c3916375c101229a1d7d9c00e8ee31718ed93dee26ba13f59401baf2ba1db43a265155e8f7eeb232a1e96c0095f709d589d5fd89533789d3ec244ebb9b3851bb0416d508945c9233bdad32005f5051ac7e1661056bf431bddf1dc00783521f467a50f569244adc875c03ca00d567f770886e9fdda188c9665f0f696b98d38c86a3440dc7a0361e4de0b5c90004824e26e2b549fa88d7c0e3613581a1607e33d6e358fd72a2fb0332dce7000086208816ba2361c8e6508fc850a68ec6891a4dc070329e82e1740a86d3a930009ca64fc6f0093505438860267a12abc7123dec93e11e078c53170744198046008de939205461ab3f0497a83b46acc593ef4754dbdfa1ca7ed3add21f5150e500638933a20daae311d83ead46b153499cc13871601ea72f1cba99965d95854a00d7864a164c910d2676675920cdd875e7e8ced89d8b49d89c6900e78b444f1600e82d345ac15e2bd133aa5af84e3383536766ad296920fe6a1102be1dabe760009359ac9e879ab3a339345faa79acfe19f1364314cd4a00a97f53734611308700b17a0998c3de6cab9cd71426fe47e274698842941922ca036aa8255267125b00f3bb8c1263a8396d27c343ba8e3dbdebe93ea42bb6650e2dd9ad0e61ef36b000bac0ea6a8c76fbc898110d51eb4ac00f214d410d29e425a5c6be4136a843df00453df49e47692c48108cb470257d24931e0d527766b13348a3338ddd511ebb00923bc33c776ef0b9bbef73682e426b00a336dc4845da1aad60af051598220500129aa48430d38634805d382760dc44fa8cd614cf640437c268a57eecbc01ce00e9c6cead3047f72882393e84aae05c86d522b8312ab501fa41d54edd08cc2b00c4ec11f34789793b427d988934d88934103f75454d3407ba2d6e848e0a2e1900ecdc38604fef7a7a00e98a7d9923c61737c2d98391a62b467440a2fa616cfe00110311c58928e5bb553b761e8238111ed65a9755a13b41563aef55536a208600444530d3ee247126c8c701118d4564685e53b31c5192431031c51b4f8526d300ba3b26ea072c2ae226b27153d88f1be1929218236ef04c51061ea28f6b51250013fa7a66da88a66560b6c9a03dc1d8236a92ca32d6e2e12e2cd78676fd095c003311d73c96ce77868099498fb03fa2211ea76e04e39952c739e84ee70b8cff00ae5aa482b7ade0eebee0b62448da4fe7898ee6e42c124f229af2296b4a140300f82a1ac6cedf202ec0f04f40bfdda3dc7faf26b1f371cb7f34616cb07c4dd300f285d8984ab8cea492899916121be0ac1689334d0b34e2740a7d273aebb5390096f7a667c86f678bfc55911fb8031a9f310f696f70c0e7f61d702b0d463d240068bea8a6b1f32a75c03315693926367cc1dad04a4f5e6d14a7f90c4ae7c66e00cf9740fc77b5cc1197782f051153bcd94268ce883a23ea7f5a54e8353925a0006c21b62466d007cf0201f52a43b536a96442ff7fea1e35a14fb0f293fe70c60002ad51a03562be0b31bb73f25e726cb9c298af56a99873bdc27b355c26ce1200dee813d158c435106b6a9d2362036ad6828829de62253457445d1135b2a8d0006776a63e96c42ad1733c8b2ee46361a8cd2a99d0f36c0999710961822cb8e2002c60307d92db76680d3383c00bd8b7bd44822c4b7094fe3eeb28180230b3ec001176975ac43a816e0b82f1aca8e30674579b138c5f5627a9e08b53024c4406006f654e561b08be21e7da0a122f57a47e47ca51afb126ada258ff0c12040cef0006fd458f723fa896b1be6af977974c9075c26d2f38ad2541d85cea35cd49ea002b7d2209c20dff49e2ac4457bd4cf472057d973aeb2d3896f75667c86f678b00fc55911fb89454d67648cbfcafcda1ce8c91ae1f48d55173aef63418f590a00079bf5ac5fa71ea806725d2724c6cf84bd686567af25a6c1267b386d2b9b117009b1888d7559c23c678c7828829defa4468ae89ba26eaaf5b54e8b53c25a084004b4a620d7df09c20a01e679cd596954ce8276ca4276a499f401e64c468263b003bc6dbefdb78930580d1c4688b24da3e6aa38d9b71c66e7b21868c24e476710049164f5b1667ec28acfd25c910af9a3b2fd81f1b46167a31fc788ef5457fca00ae2fc0182172e74763c0fe0abb4b7313aa0cb80ee7d946756637aaecaed02500214413bbfb7185ee269120326a23fb8f1374195f301da38ecd8d06f0244eb8003f8621355ac15e2bd11b96edc226db7f6cf6f61f006e4e80651d71466b8a07000bafae21df4beb587f19c9318df557b93a1d61f5303f8ed5437f2d71d653e400f0b404907ed92e84c044debc52661aa3d4995b509ff5ff26ce7895ad31cbdd001ab394809235662a069fe46bccc4162c0c438695942fbdebe925a42bae658e00b8a48a24433039cbb196934aa2c74b6c23e74b3982509a319c6e9ab9d317a700387dbeabaca4bfc633e74eee901e9aef32dfe2ad259e18b8eb45a2d6ccb8e5006285d3cd6a85d3cd6a25a79b55faa4a71bb3555020486b436cb0eecdfb8c1200c830af2019d6439e64103edc0ad6c688b3684c835fcaac3be61107ba4ec96e00caa1cbf08579272c8c85783c9190e1d80992d15cc9f37662936e89d27482dc009d11d158c42d10ef52db1c116702b315444cf136b1d08c891a13f55e8b0a1b004e4f49701b9f96844428a211e9f04ea9bfd34a26f4bb327da68c165a92c56600caaa64eecfab525a01a72c360888f509a2eda4b401ce4fab8d5d3156809993001e61d7d52636d7a0db86603c31753c07baf1b9f3187fbf3a9f0abe39a5e28a00c8fa3cdee7e37310fc1c39d762487c1293faafa61cf5168b7abc8acd5308750030fc10e86f7a94fb69e4a4f9b0e53f3e61b86f1137343b88336e62c9af2dcd00794ed2f5bc843b38abf38913e7e987d44671d5596fc3b1bc179f21bf9d2df20057457ee05252496348cbcd8d6c41a613aaf3c7a93a6ac2c4a6c1a88704cd9f00aa38369fa50e786291966362c34f5a1b5ae9c96b732e71ce6da1746eeccdb9000b40fcb4ba90235ec0fb8220628ab73d2f34b744dd12f5598b0abd4e4e092800e19292d8421f3ce711509f659cd54e2a99d0ff60231d75913e495420470fdc000de132a6895ae1263a94eb1e37bb01725576d5e3e6573d72b1d4b1174bec9a00ec52c9f0866c6b287837bb7bb2672836ebd9b1ce9c7aac4b749dac0bf584d300f0af2e33d9341ac03a56f5c01e2c4f6dedae31dcfc1a034423a018e855eba0004a3763b728673f37c8ce7edecd38fbb9380437f353a27bb4774a741b3966990098d8babbddecb0dfd91d793bf6c84bdddb72dfd5ca0ffbadc4e9f0d2eb98770060c71df6f4aea73b90aed89439b4b15b3d4e9ce326b05c60b91aa36e874b3500afe6e43ac0ed9e75c1e6ee5db0c1852e40859c73f3f866e55d78cf5b1e78f100e293eb3fbffaa64f7cf083efb86f75d397eef8c027dff7e89517bff1d8d7c4007837593bfecfad97419ee1dacacef6adbdb33d802d9ce1ddfc44efb6417df600f02f5ebdfe1bd7af4ddef8e57beffbcdbf7bf641f3b70ffeca7d9ffbb9476e00fdca33eb77bcfa7989a9aeb606aae362af217141abe9308b98702f62fc2b4d0025f7459c29c66cf0a293eb447a710a63d5c56c62a8fab7f7e422d685477f4400b9b612d6714b6bcaba9ce872fd3bf5843be89bb0eac2e3e5d42a1f7be5873e00af40d62bd77101ebfe647e018bc5cc2bdf9c8760fefbe60d3fe55730d9a74c00d7ac4c3de57ae51e811a34fcf22e8e9d9c8ae763dc630018265b394d3698c9008a0c20ef773daf91e886951d295da8cb202f7e75f36e664555496ed1ceaa09002d4cc0bbea72a909711e56cdec9eb499f190fc66f2d9fcb619c9665332b2c500db610456592e6edddf2ad15cf5ad2abca2eab18bed74592ca82587ab08e9a600281a7e377632b0536828d8935630d8a92c17e706762a9b1026099192501a1c00d0f60d304c13184d5eb59b509a82ec36359b6592009667a87bb38c7d86fb71006548dc559e2bc4fcb2dc80fb99057cde939733909b810e72ac830c141c64b500d0b7ee01c8cf2ed84d76c11e98d75db05759f6ccde053b8d6cf38a3768a810000d9be068153a02977ad0cd5dcabce8f04a0a6a45012ec89d76a900e59e53850054b9a607825ed8f6e029b8e60578aa5e45a92bbc801b16f75fe44b4603feaa0033d6c1f0c00aef15fc44fb06d5b39529d7ca9513d041a6dc41ae5c23b34a0300a00a10aa28bbafa28a368f1ae0f83ed588ddff4b9c166aae69bd3e149c1b430003d90c97b5104a5e2534fcf861907b0563738fb6f33321fcbd2503403fc4a200624310ad323ece98842e31943ab45273422813e83fed0976e12ab3044aa80200b38f252771c23cb1eafb615da6d920553d3002958cac01dfb7d0b2ab1c536600566c911585e90ea91a244e50977e8077502b264e11b95447fe9561c5d2515c00b888451add00dd22bbb057e991075e0a2beffac617dcb77de48eafbb777b8d00e077be7aede79fb877f3ca854fdf7bf0a862c2c38ba98ae55c45b005e1002400dca369e3177ec2bffa4f0f7de90f7ef8b7b777ffb77efb6b85c7be78e7536f00eb3d592dfd655315b124894c1adfbbea79ab14d07a41961cc15e09023040b0005418fc3e8caf5bb4b44bd7043bd7042286f5814cf368f482d077df7a90d676002f5dc40f601fc65b0bcb8d6e59296c4d2e254ea9257d7c353425b15cb8eb1f00b25f43a6d70eefc93e6c1c66070c800f03bc829a8cd5d227fd0267dcc34ce400c35ce4401fbee58d4aaaa02c4047e98214a6730f4f11944b5ba35a4b9c5aeb0007c8a785dd6b8bdfe5c65ce92abb958ecd0a97bf10c6700a056439a3d0a36d001cc5752ced7eaff5ddb460e191c76ae3b1be7dca6ee5c4c452539b5ee278b2008e60277710a2b4b443ccf61a5ec8cd2f6a12e3a879e455488205eb59d5480b00cd8837da5e1b7bc1c25fab28a72b9b588f37da0dd06d1440b701ba05bcc0c600e59a6c08bb882fbb086c0c355c326306346b21198564f4bc65844060c1e467005c16eda8cdcfb4ba91ad0f8dbdf501c0062879ac6cd8e9a03c85a83285afd800ba2f28ccad423d44f96adcaad2f0e50a5eaf35c0b8dec00a5b78d9aeb020c600b581f58cf6011656cad62d2a0d76f95a4c0b846281d7ac057020a9db0389de003f90d86c10cbc0d0ba4979c35a132cc3266aa15754757b506ca12635b979c0008637ff02e2d5b02c7948187c58725cf95a51e718375d5ecb167ed14eaa4157007692c82ef90262117d200e949f234a591244ae238d5068cad6be41d485453d00e30b882d9e9604bcd9c613ba90efdb2fe0bd9bf62ee0dd869c04f6be7dc26900f6b403601b8b889f2f27bb1d5b58df6980dd89779bdd9dc834596d4483767e005821ce5d1687e6c3aa1ef5087b0f0e94de5b611198af83291d2ecc6650e60b001f0abdb7e71f0aa3530ec9e987705e461b7c6f680f245ca8675df4fcb1544f00dd47b58b3ab1f7b07c54f6eee705638fdefd35ac74de7b2d7f973a15fad91200ddcf97e8bae6e74b77208bef504e4be0acf08dccec565a244e54d7592fe25800de3367c86f678bfc55919f47cbec1408696f70db87f7dd16d060d443ecff2800edf80c75c023e75ada30121b3e6e6d68a527af88dfff704fd5ca8d1d0df0d100dcfb3d35ca11e533a020628ad71f0acd21518744fda845dde554e1f57eb12400700366f0f41186cfc82d58bd9209fd676940a83a7d82c1c3b083c1c34e1783007fa1bad9d5ef7176ae3bde3bd71dafdd743359b387ab6ebef7eca4183c4f56007b89d3cbfe22e358e03d487d6ca576acd42f5ba9f1f6147cd081dafd1d355c00d4f75019fafc0ad8834f7bba07485fea449f75a2df83bccfa99e55a6cfbf0c00b9e4f8c6f702e4a187727380f117fd83d8fb57b0307e21f6be7e893b8882c30050f3a1c84569606760fca2effaa536442bf925fe8111fe933f302ad927bb7b00f4fecb2f61bacf0901d805becf6e41badaf7fd80dd22b81763efa58b0e952500e3f332894261d2817fc0ee0158fab6320a4d1f4c8bfb121621a1a5203c4854007814f726194eb2fdc04a12f825ab57997a95c126a45ea11f522ffc277a85f600c9f43aa8f8a1488e09158858b1d44ad20569bfc26e195ccaf181b14307be7700fe928a3e137de65bc2a1a82bb62500002ad355940000028c1f8b0800000000000002ff8d54cd8a143110aefc74524977273d20b8c2285e85597716b40717f400e2ba73f2b08fe0237810f4053c8a47ef820711bc8b4fb02fa5df97de1d614f0036245da9547d5fa5aa92ad38634fc5e95e642bce474ca28f049f6244fc5ede0097a0e77a7e49ddf932c462981d36c5eda8f1985f4987f942c2636c8e1734df0013e841436b737a7e839c30f2568cd12c266b3a16b923696f441efe33cf19d400997bf7963d44e7f2dc109c64d91a6728aa8532a7ad84d0cfb607b64b36cdb6004bdb66478b01a21d5f7bc25ef30f8c134e8218425288460684330e0594c75200ae294d01e548cac2a5ad58162e6b8b8062a1b24eb3558c32229ab891b32c2e00664f0407c0cfe237f2623623b2eaa24524cee7329b32ae258cf12902b9f5fd00b9f5892f12a26774fb25bab5f831aea9b4c0f0f1c901c41c5046c5fe58601500fe8ba492a44e20b994e99a2434920a925063c3034ef0156a1ffd9aa2a581c7009ee70143099e16311cbc3db20c11b86f24de5433229781b98c2d971483853200161472c92ca4ae347d61f6a7430d41c33ac804e0a83d2ad70f0af8b7683cc0007b86821a873ab0206923ef50909407987c906123ef4f1056a2451c7a42ebdc009a0237a0054371a052c36cc7c03a860108a103c247e9f62dc730e9307729cc0026e8d94d83f76c42a705b3f6b0ff243ded01c640d005cc5a44f82195fa8c5e0095c721c9049238ade0f4455674dae130ea704dc5aae7edfa868bd6d1c155bb00c2bc8a6cbb897de5d0236ee991af4b8fccb6e2fc9e0db933ea34f4b80f0150002cc57785fe07e09c761bf9bd63f49d019328d27cda8434c221a9d77c57705f0035f345c0afbd087919cb8b00c05f9ae1ae74e841d7ab72d9b5a555d59ecb040076a4e1e7a9714024f1c94e8eae8eaefe02fe35119f900400003940e9ee000000018b1f8b08000000000002ff5d52cd4a35310c3d6dda34edf573f381bab8ba001314ae3a17740611575e75abb810c1bdf8aabe949e7450d0423393bf9393a4000324c435c4ee8001123305f4183cca9b01bbd987dac6368fd46d335f44de3000d10999dc924e69d89a40a4db3b0fbcf580838ed365b9fec62cee1e104269080056f404f80fbd0f4e2004a3ba8334ab12d2c860a222757a856a72b56008f4f20037b9b1e840ec3ac6aa634ce64dd41135af70d820b916a25ea1ac7034b224b3004a2415d19ac7906dc906eb4527f7eb7cfe3928dbd0da19af67c64b24ab4b37004662947afe03127e50cce8374d5056e1080a39d2427a72e66c989e9d7e6237009a542e3d497c587d005be49f1a4b6ed0bc24675c4cb83244eb537fe202b2270088c446d9721aa3264ff64e73d16d4a75888719628c62a4e0d3998289e9826b0053e2f9989e8d637a21a61803de27ef2007c7b7e47dfb4ffdc7846ac9da2e5700d8acf913e1a73f9136dff98910f0cd1ad3cd13162cb730733577359ad9c2d500caea7585d77510227ae1b3097b1f7b1f5f7535f090a102000039f0420c00000001581f8b08000000000002ff3551cb4e03310c9cc489e3a4c005097a006e48002015babd64e1c0896d7b40487046fc70bf8af1ae58c9de8c1fe389334042dc0041ec000c9098e9a08fe0a7b40cd8fb2dd4269bbe896d5a0c9116462621a34700d233036723c8b43f78e1de0bee669ed997b77fcee2e901216843302d4fc02500ca31b880108cf00a698112526731599166794a981c2a86c02c8fc9835a0686006a8fb5f498cc2f513b6adee0be4172f5215b940d1e7a300a90122945b4e61e00b2759857cbd69337d0ac642b24d7a4f2eaba85965c8f9e914e1be95ed05c2400af5c4cb841449b9770e43eb23788c446dfb252927ab30fce255dd027a79816008a1e8512928b1d8389e98a5b54f2b9ea0fa3ea4f728ab1e077f4e5e5e0fc460081bbf950cfd9502d59bbe6469b357f31fee6176b8b2d2f46c21f6b6c376f580071dccacc619e6134b395c3cae97583af5d1032fae0ed88f5697dfa03e7248000b53002000041b90896000001b71f8b08000000000002ff6552b16e1531105c007b7df67a7dd09202100d05d241de53a43b404242f0f2a81125a2a48f94228a00943ecaafe5ab32e3cb35c949deb3e77667e676bd130d712f6a47919da8660400291f044fc1ca22f6f38d643bd8e137ce76589744acb0e0a3e84224219ecbf00009f0786422031983cd9d4ac5648e5a08e90629a0d4a10228112a280a52e6580012f1b4a526e05912f3df76773deab7cda95214a5a1b8042bfa51e4bde8aff000cc048e91066c35b00bf88aad11d40a7e2ca3274191e549ce5c345b77a3f010002aa8ff499ae4f31c0a3da7e8886e6d0eadbca3a1e4924b72247e17a78795e90047672a808f5226393f7d2d39c356aefd67a36f2ebddbe2b610f436c7a1d140001bc1d04630fc9191c43d65441c33e5fd2b2197b59959d34bc46ee4ef6624d100089d53dc29eeed0bab1a2b2952295229f27f155940678a5b22d112477c8969000f2cd0f6288ea6797d2279f128195b5965cf96606ab9a1db19546cc495a11100d7a0531b26b95b38c521709a863fd8f74d7d81826ac9fc1546ebe6bc9078f5000be9eb5a2f24086fcd516e2c68906b663c0efd18cdacf158a15e27b9d907050023854f1739b93fb97f00366f60c80f0300004d5d68750000058a1f8b0800000000000002ff8d55cfab1c4510aeee9e376f77767676a6677fccbee999dd0d78005036e645b41f18c5a0312f3e63241e3c0822a2a2282a41fc8128281e72118f00a207c18b8282f122e412050fa2e6e01fa0472f221e3c79d5af6a66dec6e0c10085eee9aeeafeaaaaebabda5d324a1f27d33b4bb44ba61f63a2e18d84df10230026eadd5351d83bd53b751efbdea96690c650acd8efed8b62bf191bc541ef40001407cd68147b8023b3c71801e67b690bf3690af7f8f236e633d4c37c1ff5f700f85684f97e1adc8cabd3d30c76961dabc53b99933b3b4f138cd12e29358c48008d86c951a28a927d45b4dc1c1f45140e47ac3bd2e810ad1a7941303422afb700869d68ab13855b9d28ec44db6127daee44bded4ed4eb44fd5e27ea77a2a8ef00281c44b731d4bf7f7f5ff7a351426124beded5f8ea2818448e851a18a3e8d6004310758832e8413f488ef05acea6ffc7540653696661ea806c6b2a4a1d0b61002aca52a0a66c3b482ca416aa20b57c28c736976d1e5360f37497423dc64413004c6a0ac827285dd323d0e636c0f6310ad6f4a8a729a48f7b1a379f345ed353009e26fc01da88c1b3942153bef4125f7a3666ab06db17c9ace97960407a011800cd27c8d7f43230f8833cc7530ee875b26b7acd533c5ed31b9e72fe40399e58007085c6e08a1da738f736a5fbf28c78598ba06d36623fe4112c2e8cac2cf9e9009328d5bc4cf83d1a291f4818e6bd0626902c002c4b2214172409a8b04a4185008ca990d2ae328a97994ecf73654418699bc9a55719d626d5a9d769c6248abd00a80d0ad2eb49caa2c04b791a188388eb5619cfa62132104d032e65880c1ee40033acd3598cf5ace093f3e3c80ed1ce51521f50b1a62fbd4a73afe2ffa08bba009e3e1423bc3885f7619e05083d0a32847e99b2b6a24cd4f911499cbc0c34840051e675de449d716430b67bf70b4f5efa35f9f0ddfc879ffef8f9f657df7af3009b2f1eba72ecc49fbfff76feabcbe9b714013028bb872baf7938084b87927200d839ed00961d7ff8e367fe32fa96933f3ef7c027fba79ffee5c4c5ecbbd5f7006756374dae98739f52e575d51ef77aec18da01ba646827d0a540b3c6d4e2f600024b8d16624abd7a10d58e73440b8c157722afcac378b2524e49e64ce0559000c95ea29fe371b9388c6c0185791520d14ba9a015774a415c759d12e25589a900cc4597b743745e0d4bafb6565e854b8ea1f6e2924167e41878b9d0f5b9932400afc6c491bb658bbf6c3c5f34fe965e97cd0d89c4007555ca5e9c9ca7a04626007b892ce04856c8fa6abac0cd21e2def27a118213a3017042bb1830d76de79300bdc6272b5c1f60d80dd717281493e8c4eb841f5bf1cda4b90962275d0fb55d000fe5d26d44934e349d80e6c55a95607831abc1ea0b54af15824c9c573661c2002600089d8de1fa20466b503734bd8e53cde53568ca8b9de5e54043185baf1d001bb61aab840d07b6abbb26305ec6d092c54346874f5a1daec665c760bb61b000955bac313b628cab52cfc4d24468c6c92a4862a41d8ee1f0911a7fc447549a008a12d9a38198688e68dd40f642f3a0f2aa92ff01272c72ede818e6a49d47a2008bdad1326cdb7ad5035cbf62f7c75dd0e36b821e0bc39236a3519355c1af3000c668271ba79b1be2941978c5cdb1dbcf796f36fb80f773a4693e8d7173db6b00d3f33aee83f5f11dd27f644e8e21bb359c5b4ad6cb1c297d85f2a68b836b6000bcc90bd449e93852d076e2c083dce165c39a3b874bf0ae6cb298950943307100dea1ba65c5127f69a6ccd1dbd4c5a6b76daaa4e42aa81d0301b7066e597343007459ed756d5b59bdc36d81595acc33b690b185f71b0b9e32662caa8b73bf7400dc9c5d05fd4754b5c6328d873455ce59955e80740625802bec282c1cd72eea003366b2e5339730440188cfa9e8822880eb0ac6bd743dae2bbc2a66c09dc140003003ae9b41013333af67712b9bed70d7e4b695cf2bb650f1bfc6d7b4d3045100f1bfcb1e15578babff00f4f196a84c0a00006bfd1d5b000004331f8b0800000000000002ff8d55cdaa253510aefc74773ae9a4d3dd171c611417a2083dcebd00a07d980bb3f2cebd20080e8222ba1797be80e0d647f0055cb8f5115ccdda8500e042d01770296ef4fb92d367aec3087320399daaa4beaaaf2a9573314a5f8800713722e7626c8749dc5b829fc3e8f0f7de2bd2ba2b77f598b2ab3a4463a8030094620e9458cc8fa4c17c2deddb50c66b6ebfa1219854fd560c1ae965d3c65100e436ae090791351419882c45068794186cb5fb565bb79e4b2b6ed3cebe4ad30075ee1f966f7e61781c55bd17e57b7b4fe40db1374ae435a92a7880c984dd6200907365143fad86300c00d071d3718068d0c3a6fd509450189d3ed8510206140092bcb4c159c0591301f74022e1e875dc312297da6319b9f405929f91429f10000e46b49bf4dd2ad75e4cd7d35535dc13f550fc2aef6f0a1062bc4646a08d9b008af6aeb4b6635698a6324a5620ee3c266f1fefb4d85d476a3cbcfcb892825d00ad7d178c3ef3fbe7991f7c0496ef70f233e9ea49db1607bc860d6fdf39195100272bad83be654599db549ce8863026d0dd8e9b1e13444983862615652265f900447724d5181974c723dd19ee7c2579a73bef18b9d09db0cc5ca602c9cf4c61009a40374626dd6195af4177e813987e53d22adf80e99a1a64188abca95c028d002fc253004f31d0b16fab63e0c9c6bb1482271b2228892dbc6c8387d8c60c5d00a60ea7a0cb2db0915578db6666f8789a6167cbfafaee7feb6bdaeb6bba555f00104e33029e8ff58508bf47c0a98f20de4e887a92b8ca0fa7a867cc73bf6c6a0079f1a867463d2ff0ee4759fe13f5cca8e7a751cf35ea529ed4c5d943e78f5100a3c25b5fa32e3b22936d59af3f893f466dfc1eb5bf554abc461daaa8dc0e8d00afa62b72169f5e4e55e48ff7648161ef1a5451631cccff8c4ea5681609304c008ec995ab5f0a5723b6fc2de32abf5a0632329011ecf77995dfb023971d7f7000c7eff79950ee98c652c26c34e3d346c3cfb1341a8f8c944b8efe62b2a71b7f005637ca16364b97fda67cb89463bfe1cdc8434a9853c0febf24703f6a9a8e00003811d88f81c06e0776b780217460279317d50138750d6aa093e604dc606e5200b7a9ce5deecf00af421a50dc2605380a63ae020772c4da21f8cca8e7e5014f002d18334126824c6738f4b29cf1d00155ea0c9e1c4113c74ba13ec2a3d1f0800059f419e633ded0792a90919071c6e9d7652e907ab16c1b2863c026c006de950098a7023bb1451076066c6049aafbb524019b9e034b984917f0803b9259fe6100c8800d993de15252859d009bd92ed889d96259b221a602cbce14093b02b61b0071ffd5a37aff01eb9f035bbb5de9491dba5f6476ba015dd6741eb75c7d586f00f9a6936565e3513828675c1b50142d4ca113ab4f5cb7aa4f61ceb866555f1e0098ab46f14975a8f78bf2d1471ce89d75fe2551ce3bcfb71c7fe52df775d497000106bf701ec71d0f04c005e7b86cca523be702973dd0fb557d7ea10c2c12f800fe41ee3cb9f3e45fd7763d2e4a080000713784f40000022e1f8b0800000000000002ff8d53b18e14310c75e2c4f138d96bb962413414a085db95600690ae6200d96bb94fa040821fa04494f4481408891ef125f753f09cd959094441a47826008efd9ee3bc6c8943dc11eb81684bcc0243e53e61144c21d217b74974affb6b00ac753f4f8a9861c226f1e49e04fb92f223b8dbc103dd3862d0b14331298d91008bbb7871315ca9bbd2e24a480a94fee997d97fa757d72d5f2e95b2932235b00051502e0f89ee51b90a44777b600f572361f5bd07f3de528dced56019cbd8c100d005da06ece2b73bcb006e4c566f11925836f4d4f0f143494a8e3500fa2395000d5d8e41d13c9668b0c6750c55d768a43cf1a6fe397efd35c8ce48c42ac00e0054bdce352595b53b23304c1e9f40c2094515fb5a1195ff8ba439495b81e41500ad8e24b9933490e4261d2f53278cee3644d81c81465a3b5554730fb0ec108800121304483680bf2673f0b480b50c45305af406bd2b2c08794768e5db0be41500942d49b25f848d5d7f4cd62fe2d8cd91ac8e51ab77bb3620d40684f7d4ae7a002710d2605bf186db7377e10208c45c867c06db8bfa30173552f6427057a51f00c5c9ad3ef3acea995d812091e4249f6692098253c69ba1a8c905ff05dacf9e00c0752617c8d492173314504a71cacf47ca5871fee2da99a053958ac727807200557e5594f30d70ac79433f27bfd51c5c8e0ab85dff1956481834a9dd82d04d00cd9f273ed7b3befb9c9f27007fa8215d3da182aeaafa32f76554d5eacb01ec00c386beef20f6d0892f263abf39bff90dffa2c02d1d0400007db8f44900001000c51f8b08000000000002ff8d5a79a82cd9593f754e55ddeaaa5e6e7757dfea00fb7aaddebb6fddb76432f5f4e9a0f026c92463e2244119d40719a324ff0c1800cd334a0c38222f18464c50440d89514190209a3f9409a2c820320ee24212110091c8b89081a818301b21cbeff79daaea7e33f70eb950fdcef29df3fdbef56c00efba328ebea14cf07aa5ae2be3d7f0a3c2adc25f88afa654707ba4fce0e1e000e137a31e3c6c3fa5f13937d1a9cc4db6b8f87d8df2f0fb5ae5e3f775ea08bf008fa8e02a085bafe5d0d773d2317f6af21b3ea42c07e1145d578e1386ca89c200dab95227aaf63a47a92949a250f95e543b514e2d1a2a3f8ade2cadc5274888001ad07d5547c969602ed5c42c4b15652ac5f0a01ea1ba501127cddc1f9179830094bf2d4cd93ae6b0768e9ac24c6d956bd36253074d6d3675d0e4b6cb26b76c006aba6ceaa2a9c3a62e9aea1d36c568eab2294653adcba61e9a6236f5a8697500821fdd47fda49fa0a7c79e445d774088624f27b93e494893b09a9ce4ba170f00953127c07bd243a9677255837cdf5f5726323d929e9c2bbfa17a997a6beeb400a2dc699bdce926b913774365925a0c1ad3c78f7b4a6d5f3957e6391567ea0e001c007a1960a24132840d86cd01d4f5a36a407511fb000887443860b53d427500c0ea4800b338d023f41cc3b2663c1ae76a34c16c93f114569b4e01793a15ab004d8b4fac061e77d5142a9b60d4444f32f564ae0743323ce4008698102554c700c290c5911e93a10c1d4f72359e82e1749282619a82619a0ac3b4f84a86bfa4005230040433d5d34c3d95ebd1800c0f38a09fb2389894fe6ad4843604410dba00fa3570899309594fe17059fa6a789dfd6babf26f76aef4d30af2fc56ee8ca90088da640cde1f55e34c7d3d778693dc818e9c81b0494a5113557a4e623da7f400add8fa16abf3d2afe6acba0b54e7ac2e442f2cce351a17cb5ca74bd4961aa500fa4129d773caebbdd2c8fa8523cbd28c73c03b1b31fcbf9ba9e7a19879a6fe001662cea70b487ea21699fa7b78de1cae346fa2497d4a2de84aa01c65ea33a0001cf5e7e7caf91f8581ff9c3b0915e1c5a522e2caab469a3eebcec5c1168f1a0025ca500bea4eba47b41f6b7a5fd303a0bbd29531d464521b41df5d5025a04a001859c9000134a6228e13f1fa1140febf1a11e44da52681b9c13c10b8485ffe00ab91c93cf184b116ae9c1f61a5c7c3c29ca5030d0b172d1c785c39b004d0a8000aa097d8dc3db4392417d01a8d711766a4205d8d52fda0041118275e5a8e4c000f46a2318571eaf49b585f529ae14bc6302394d61c64ce1ac64932670b752400d318c6790f528393416b31cc1837bbe74cb3ddc28ca07c1529fba47c13291f0084ab8b19935211369b0dc54e898889e25077c58c40aa6092e1de8c43d6f4be00a687407765206344f96246187b38d634c59806c8d5a09799e7d111134e4c94006f51ddcc7917e0c4f8987adda90895a2ef719552025124d282499369ee4c11008f43121a4b88f075dea66615e10cbf3321c4107f92ca9c0ceb6442d2775a5200f84d6cfdc63bf41be1524c3181dfe04bc7c0474b35e26609fa6ea9da98aaa5006376c9a04bd0efad404f0ad0d05c17d20db0b639a998e6178af1ce086d26ed00b3edc354c43dcac6667c33cab8c0bcb3c512fdbfac9605f0ae05ee1e02b7290041c27eb6c875bc20e7461788d32eadfe1b2a168e7a0e5b754799f317f00b3000fc08e6eff689fbaf549a391fb3fcc7297d83e96b56a42ff8c64c7433974c460005e9a5f80638ab65eeccacea90afd319e44d7559ebb2afaacd2ec16f470bfe009ae0072d90cec4e781f6250678f6d0005b2a8c72a434f0736a96399fa30cf8006682967da2c3bfb33ab4e8c9ab8be4b49843e84ad9ddc50a84ffa45615e10a00bf2b21c4107fbe943997245d92f4b3961472a5173894b58b9da24cc770a8cf00d1551b69b304fd79eb954805b409f60073a6dd39b2b1f30524687d8cb40b9800c982bc57ec5badd1f765b52e602ef41abfebd12a7756b0c68084c6126e40f8004db5a90837f8dd082186f8cbf5a29467b404a93eb2a490677e813cc2a5980200b270015a27c0c7c4d098370bd03a2e9790399710060819cca9307da5d2edc8002a660ec04be8b7bb4280ac9a30140267690324469b59f5d9764b2d334dd996006cc6b7a68c4c81ebed0efd99da15c09717389840d63bfceed65b00df9273630009c4ab2511df2c10eb0dd6a4659ce93b081030fc6eccbfec13f7dbd52ad3df0063f9272b06c806014285607206088b2bbda13ab7a2a69d040838ab5deeac450056bdcaf56a0d7957baac2dd957d5d697e0b7a3057f4df0837640e5736d075a00fa59630171e6f474fd44a140b5e06a4f85510e3a8d7e875a67fa1e65c0b71600b4ec131d3e697568d193d712c1b5dd40e84ad9cbed1908efaab38af00cbf6700428821fe6627736e48ba21e9fb2c29e45a5de050c2a598620379f0ede050f700189d8d55b304fd01ebe9b95ad126c08355603c97ed1dadf7216b3d5900e84d00f4b658bcedd7adb771c3cd8847cc5291b1b8dcde2fc9e2a396c5253b0aab7f0071ff79e1f8d03f3088e22754fc84483e5efad1640ccf9d4cb173d27f849d9300619601d7d1a2dcadceed6e95552ce78a7b637813ab877e85ea361727326a2b00fb8f1daaf42fa88e5ec7e256a37177869c298ad428d50f4ab9dececbfdc77600bfffb023b9ffd881ca1ae292d20cdf168b61638dfdc726d3ff82e09865fa5f00b93a71a9366fc1eaa1ff2d773633c4f0ac8926fd1f76210425e2e6bfea0c6300a43ab3457ed62fe6ce645dae31abfd1ab31287923566260a4fab3526b5090b00ddc0b096f4a5f735bd02ba2b1b1923a78c1a820ccee4ac265a8e2b30c80adb00c8c54ace21443381d18d5b197d7981d117fbcccaf937f816dcc9b597b9924e001c5a09dbd22d39b5f8c97295ab252360b35ae388b35ee388b35ecb11675d7c00c511c70c1504a8dbecb4c90cf6798b81f512dfe17ab35852b811cf34f021ee0007c5d9e2c91483d76a6a553ce1610702cf28d88c06398741ccf741cd588d27006919e52b46b979a08af2d446f98ac18b2dd33c2da37cc52837df5545796a4300745546f97497967bb5d594a4b7ab289fbd7294af70864cf1ed26c0274978d6002c413f56bacc8c2e437512cb4c40ff6005ba4883336281576c7670b95d730b009a3b6a6b978d35daccaecfb69f56dbcc3c01d9b66cc6774619cf31efd9f95500f4bf535d2d806f2f48bb1938651a7573f5ec1cc0cfc9b9b105e2dd96887faa0040acb33922649d99df84bf83e1cf60fe6d9fb87f5bed32f35ecb7fb2a3cf6700701eaa0293d379ce443719d5792e317b557c1e9cd5d5dc39ab6210f10dddeb00b2b6655f553bbb04bf1d2df86b821fb4407a26b10cb4dce1c83e649652591f002914a85246371546397634f0efa9b3cc3c4b19f09d095af6890effc0ead0a20027afed79ee9ce33832af94bd3dbf06c24fa86b15e135fc5e1342c2cdaeca9c00194933927ed29242aedd050e255c8a2932c883ef2a1cea59a6b4c6ae5982fe006beb95488eb449aeea72fed0510b77466d240c1717357205e496b742aea45c0053de1b19555e36197bd9c46aabbc686a49428ecaaba848ecc9624ba331c23900ca3f4744c7f6a487a5ba7e50ca75abb3bf8f70abfb081ea2bdcbe7bc7f92970097624e0cb91a06a9ba9d99afca01d07cad3c007a4fe30068be81fba61ee2a600d74493ab8bd301295d57287ba07c3b6ea7dca3dc71790de5f5cad36baf3abd00f675af3c2a26c551b1678f8a495fbafbb9c685196a7a5fd309d05d69cb18fe00b66b2e585c01551b546d0dbbb4930791f9deff738fddfb957bef9a7defe7df007ae783fff837ef36fff0ee9fbff3a9bb4fdffaef3fde3efe954f2bb970e39d009e3e55bc26eb9766e90b40999b3c05bedcdeb5fbb0b38b26af8277a50f56d7007fec4d3ff9c28d8f6d9f79ec357ffad4538fdfd93cf0e2233ffbc99ff8d0ed0017bef8abff27d679c01aeacbb71ec2f4f4695ef59c16573d60c6e2294efb0a00273ded56e77629a15da07472a7c3ebc28edc93604f5fb8dcb1ccd0919ed66d00516071e68e0b85b6b858e0c3365bf5318b158d8aeadc5f83458fc3362cfaa8006adb4c882665421de63aecbc524db8731b7f5c6bc337c242e08f7fe90d9f5600a0f3c3ce31a6fd61755c5cca62453b0a1facdcb7fafbe64bfe54d0c4e000a900cd7d42b91c3c54ee513864a3c61c41b88f01a79ae52840ff116d6b188a6111008a5093858c46def9fafe71ae8f6d7020a4bd9674f23258b7dfe81617d6a65000601b52983a6fadc32655f41eaba232bec32abef5617c578e84c6568737c6d000732897b9ee2f6291896a2d44ca1b552b73df9f3b212eb94da4992b8cd52305008dbe1d3d19e8293204f6410b0c7a0ae50add404fa189a092e80828fd2370400039c0dec1356d50b479e96e22290ab18b484231e414a0f20d656f87d814b8bf00a34c21f5e59a8588c7d62150f23ad2ce2ca9bbf729b5434f3d50aa87e93fa1003c4eef829d608d42e8b606e5fc0974d5aae162df4312cbdc6708006ae4ab0000de300480d51d1a430f003cd43c8d92ef49bb4700a602c067088f40e89bf588006f114dcaf75c259f24f1a84ae298aa48e29e70131bb1d143e4d4f199c822fd008c208530de5479998b1bcfc8aa4610d5704b6fc42cdf96f77bf47e8fc05eb000c06092489cc2a30dbd501c1d287d2f107379431669c4c0439f67b5e87aa4a0003b94a3e59925c4bc5f506169d04bf589847bcce5ccd528f9aeb4bb2fd7a75b00e9d3873efd661d3a7054bd30a8770471fdc0f7444d9e276ac2c38d5753cdcc000baef169a6098ab0c9771d2e56aab95fc1586cca0a16c0a702da27c042d30a008e30c3893a2ab6054ddc3f2873d40a7227886e954f4775467823c2b2de8a08006a6c416132028181a8b5962173d3fecef27adfc80b1099747067e46dec9d110036149edd50e8c30d850d72b9b465989b8eb0346469e80b0f58c746f047cc3d007013b2a4e14c1496ee15edddcb2a9feec584d1b91fca6d0b45484a964ec71300793d6b0c300fc93c24f3470be62a642421cdf01d2c6a9379bb23f23216e5c5008b179111affcbc1fb08b3ae46d5d20af8d6f59a8225c50b709236ac080266a002109796f2b1610dd8103b598ece0f73d6e0d7a9cfc1dd84478b844707bf8e400daff987dc74c864faa56215dac253727b8be3ac6a6a0236f5a969099e0ae7d00e21342d197106288df6dc99cf65695a4efb3a410a677c16eb0d81ec91410860037f12d17f8e4d6b0d72c417fa0dce6f4b8cd1106070f36309a5db7b98a63350009aa7565bfc2f4b8b6981661b508ebc32f93a085c73c88dab6f7f0a4f95d4b0003f5a1cdc47db6fd1972a0f7fbd4089a5bcc289c7748db0df1bae1fd61f5ba00115fb0a92f9ef0788316f13a7728eec2cbde9628eb9982a31ec0f7ba26f33e002bcf61de9ff356a44f13fd27d62bef2f2d7f97327983d27d0795fbb634df5c00dca1b8e9487677e0ac70b11f550ae1c365dcd2652d665f558b2ec16f470bfe009ae0e75618bb72d9b502edfd97bddebf1f5cf69aaf51619443f4ff22f4e87300870a1dba91a0659fe8f07fad0e2d7af28af96881c375a752763cc44b9ff7250035ae08e5ed420831c41f8c644ebeb5c603927ec392ee63ea3e372c5e3a650a00dccd45f8462ef0c9a99da125a0fda8308f6ad1267c548ee8a327bd049d6d950094f7557c9b39d9bfcdb078a293ad5b6c0a1bdc24e6ce897d81eec1390b0a790045c336b18fd8ec9ec03e89b4f7813ab1a81d8bfa51417d8a5f5f5dc178ecc1004ff7b39d62b78e403a854d4ff7fbf753c913a7cc13a77de07d95ea5b614ef900ba7dd3094c0001f1837483d4ee7f477094f9b7c0c2045ee6bfe1269ff2b1a800c099020872430ab50606d402370813400b8390ff8901ffc87f6208ed575e9800f88f042186071c10815d1404ac7a52d5411044acd6c0bd96f90fdd70282c19005f934104854147c111ab476019d8cc287306605a3b448885b19841787052e100513b186438c8d6238b240a422b579d72d5c1a641b91a418372e11f91ab61bf004aae1f0f1a821c039a80d8b4b38552c5d44193d53ab8d433ff876cd751e05f00bba9facff79fff165854cc721a2200007f020b80000002101f8b0800000000000002ff4d523d8f14310c75e27c389e64a6e40a4094202ddc6e33234ea2816500afa2404848f00728112d3d120542a247fca0fb553c278cc44af626cff67b1e00c74762e74fc4724b74240e198ee409e127b08cbf570f28c959ce6f0d3b0f23000f7316b8c8a5072ec346604315f166a901fe35c5cda2e919828b65995c17740065ed4a4c8556cf6210ef10030a1d1240c12041912359bd843d358cd423256200508487463d7c79d1cf7682294a5d50721aca53a2c7546edd682280468d26d800d5979db5d0d1218a6330b04ce08705b529a128e403ad4a9c43319a09ac5fa8001ce866758ad171f615be86b6baa68fac97ac94345724bea43ae493b7a173dd007ba85dd48eea01d6b6fadc706b1ea7d83adeaccdf94df8f77550210468067b006568b82c0c8d77c4a6719f52c204033a7b8f6e4b50c43e921ee8c33562055a00a9aa75e1d3de45faaf0b802962e4d13e3256304463ff34d87b0ac3035e5d4c003706a5b13c5ca63cc3e784fccf942c7fa56c8d604405e2b962020ecda756e700e7563adb07995283526e0b2abfd262951bde5118db4a787edba5ef58ab6805003cfb057ec91851b511e5a94037179bf4b731e9d5cf8a37b427db9cb0a4096b009f409591f34380ff041d4b3cd09fcd76343a289160c0a77e280d054582e83d0072a2a2b6fff8ebfbafc3c6fe83f0b728cac50a26c84d22768dfdea4564b26b00813a66f1ebe4188c267cbdd1d5ddd5dd5f034c7f3f970300009a397c3700000014391f8b08000000000002ff8d5a7bac6c57595f7bed79acd933b367cffbdc0033eff7cc997dee3917ccbeb40682d2f7a52fa0a52dbd2d7d016de9bba5144a00e95b6b08514c901863d4186385aa3544fe302841515225d51034244463941a000d81fec11fa88df1f7fbd6de7ba6b7e7364cb267edb5f65adff3f77d6bedb500f6a1721d7d42b9e619a50e95fbf305fc296fa5f0f370159432efeaa99c39cf009c7725eae63c7b298dcbe929c75c602e6071a1b990c545e62216179b8b595c00622e6171ca9c62f16ef36e16979a4b595c662e6371b9b99cc515e60a16579a002b59bcc7bc87c57bcd7b59bccfbc8fc555e62a16579bab59bcdfbc9fc535e6001a16d79a6b595c67ae63f101f30116d79beb599c36a759dc606e6071a3b99100c507cd0759dc646e6271b3b999c52de61616b79a5b59dc666e63f121f32116001f361f66f111f31116b79bdb59dc61ee6071a7b993c547cd4759dc65ee627100b7b99bc53de61e16f79a7b59dc67ee6371bfb99fc503e601160f9a07593c64001e62f131f331160f9b87597cdc7c9cc523e611169f309f60f149f349168f9a0047597cca7c8ac563e631169f369f66f1b8799cc513e609164f9a27593c659e0062f1b479fa24bcaadc93746506ffe7ab2c217081cac1fb034260588c0400ae002aaa43c77578ebe9e2490528609c2a1a8c5305933d0e1cdc1a292f4702b7a9003c091449a09010286c112860505e081484407143200f399e5686d5fb2e20d2009e21064115b7f93288e74dd69836e4c78f88c44f1069ec6511b9afd4bdc63800e8ce0185938e29981cab19a96a93330556f34a9b7ca86e3b80a84e00512b1400355091762b6f68ca9cd974a81c15443a90f66ad25e457b4e55235dadf4293b009fe6eb785ae3d3ba9881b7355d7f2785c520558f9c1a07577425d295da9bd500c8ab9ef0aa33589d06aa75561b0a7d1bb86be846a41becab1ac2aa85ff56a3001d39ed66a46b22702bd22df26d6be5b6753bd2ed9aa772cd6a1b6a394df4d0003bf8cb1cc39fbbbbaf9c826a87ea050ce88056477722dd1161bae0ce26d5a50030b91eaa5d567ba2296fbb1a8dbd3e2c0283b87dfd53dc45badb012b3bba8b005a2d520df0ff2658646b25485cebc2c9ffa9baa1fabbc8a9b7159b2a3efe2b007cf00faa7ba1a3e0b40a54ecd038752d46141b74a42e635a8979eb5a9cb2d3008d9c6e5beac27cb71739bd9ad47bf8ef1deb474e1f2a3701ec8e17a90a22a4005d8a54ad1ca9ae1f021e4e07242b20539701ed3e84eaf50710ea5535a050b400d2002af4074334fe580dd9288a0ef13fec0f2267d0a39e5dead965a7ffb59d00102a35e3321872268310c9ff05a225abacdd64701bb6ea75ad623446ad07cf00e554cf1aa3df81a0b462a402c85f85fc55c85f85fc55c85fa5fce85f5305f6001f512a6601a79600acc6c8a8b3a99200bac2c8a8254d99a429c8b0a99300b500a3180f67c00510edb0691b32f8ef137bd4a63f1ce009ada806022631a81e40009101fb0c581df4a9711720ed7755ae0fe5dd9e2b6071cea5fd5c7f5fe5bfa000a0dadbe1121fde2ec1451ebcdcf1908b1a5d44abe3eeabcc1f014bcef9302e0054ef6164cfeb7bcae907b4e025d68289b0fd54d8ead112e24920fe180c2335001881da68386e29673c868ce33113961ac7579cb09cd36a0c1bc1e8ee488f4200e72aa8454b38db1cc010041515574361c8db811e92a10c1d8e22351c83e178003401c3c9040c2713613889af84e17d6a028610c11deb71e8dc1e69819db3c50001cfa98b03a28afa0013701a3a3460ab47c1a5eb8d7e06d9cefeaa2af98d2900cf04960da7fbca7d50419f2723674843344600b4f3ac1a86cef7114a23807d0088101b24d8e8a5a944d0d3b5e861d54b90e3497596cc2c335633735467acce00c52ebc9d6934ce17919e2e505b68dc55b7ee223d93307bb391d5234726776300d240c4b5900c032f74fe04869985ce97a1e66c32df57faffd43c74be1239de000c509a056872fe4ccd25185563103a5f45cfc1ee0c3dbfa330f06b40250d9100ed2486e8a4a81a68c64a6626009b9fc27c4863a8396d278f07f41f6b7a5343006444bae9c91849670d261780bfd7d5496665c40c698880f9a6d745a672be67003315f2cdc8e69bea76be11644bf40d48dfc335ecc7ee4c00d48f211a03789800025802689006d0193ecf6cfb3c9d3e3a926bf5d4ae1e7057ddba830a7dc9960018398d0961246fa750506122d1d574ce3aea6e8c6b3a841b61b4a017629e55008d71a8ab8ca20966137d2352036654a78794e174020f4d3bca8bdd8847bb8c0084dd0e9a216888d9ce190e1291fa1b91fae2a7aea82929db133776b9c886ed00366ee41cb37123125c1fd2357b9b342f6e049bfe50d315433a00536c3bccbc0088071d8ad3a194e72a2fd4d7421c4ca6438f8c991abae3099ebd534de289c700d3480beea43b8e9c31e2b1cf8eaeed88f0d517a969da51ac2a1d3124379a08004d867577c4ae57d8aec04dc7e226bb8d1be11293180137b82643c8471fb73a007e22f4e9c4b41d9a96c0a4426379768b7d2649523000df391d4cb63d0faef10002fae00ed591f1003a33bcf8e529fae56ee8d6b1f81f4ca9e31c74a7f3059e003fa416af173cb32db84d0912f6d339f03627e75617127b5daafdb8551bc980000b9741a87f0fb800c36740bfb34bb9bf4447fca2e52f8ec8ce12b8ce52b87a007a26994c90bb106c80b35a44ce06f9de94b3974e6a1d3e4b6bd3b3c86f478b00fc0d911f7dfb09e6212da7005167dca5b1fe2036a0ea320a6830eae151d33f0056d350bf4c1d704d455a3e131bfea9b5a1959ebc3a484ef319944e8ddd992f00d1f1cfd532edb8c4ff523a62486eb6109a33769db1eb5fdbaed0cb3b02503600115b1233e8836b0140bdccc06e797e22f4b763f7288f3e81fd487f306382fe002e12b4fe09d22ec4eccec97bc967cb159efd8b5ac562ce35de84ddd5601939004b78a3c78eaeedb8878effa1f6d28e7bf8df938e18925bac84e68a5d57ecfa0023db15faccceaa8f25b18af41cd70231f0132686d6cc4f847e2d9942669c420018200bce380b18ccd5a96d07d6303308bc807dbd25026419c0516ec13a0a8600409bbbdc65db582d42b70cdd166cc6b5a28e6bd05dad433c6fa830167c710400c044641de23f5cad21f89a9c5b2b48bc5c91fa20e6a8f73027ad3aa17b3e0200040ca7a0bfd8a5dca7d4327417967f77c900d94380d0ec20ce00e1ed52efd1009ca4bed2a1040838ab307256a2ab5e467ab982be4b9dd4167c96d6566791df008e16f91b223ffa525299db212de3bf35873a3322ddbd385647cd39dbd360d40083a0712f57abd0bd9b3ae05a89b47c2636bccadad04a4f5e8b75e4acf7a074006aecc57a1f1d4fabfdb42356ffeebe74c490dc5e2834f7d8758f5d6fb35da100d7f20840099798c41ef4c11576211f71d65afa89d0f75ba4476a499f401ecc0002c3992cef8037f7118b37992e8926a2ad2b687bcca28d8b7162b7b31043760005721b5c92c5b396c5595614d6fe1264c0abe6ca6bc9595496b462f8d11cab0024f757d5cce2683e0472e79311da7e0dabcb0ce74f701dcc93d5eaccae5659005d45f22ee3024dac6ee30ad575242072d55ad61f21aac4174c47d4f176add10018ee23bf882135eeaa5b77915e336d67a7c9c8e9d648344e43f4b28e38cbdd0018d71a93610bf11eec85eed7111cd3d0fd2bce4e93315e4dce51e3d0fd9bc800d9c33ce04c03ccdeeedfdad91b3d1137df2a318c215e26003bf7ef2367b44a00e698e5668e590aa0648e998ac127e91c33b1090b8f21c34ad297ded4f412d20035f7648cb8a4812003989ce548cbeb4aa4474b2c23e74b790fa134233afd0700a9d31747387dbec9aca4bf876bce955c951e9a6f22dff6db133c11b87b8b4800ed31e2968b155e71562bbce2ac56f28ab38aaff81527935150a01ae786d07d000d1c7a44092269ee2218f6067c9d017c640932e212644483fb6a6cad3be27b000e7465a25a4e61f84c434dc2cc5b6161c4c9689204f892019ed94d037c6203007cc9b8c56a693649027cc900cf8cd3009fd8e85c26013e0e8566c8ae21bbee00a5013e3d22c0eddb9b2501144d882684c35b25ff4efd44e893095aa6440b2d004959a622f4db53a1e30c388d85de0b81b63058a3cf796a6d678c15dadc7097006da7d53acc5c04ddd66cc6b54f1d0f4077ffe010cf2f5787b1e0eb23322eee00dce3fa10ff87fb0710fa809c5bfb9038dc27f5eb628efa3826f5fd5598791c005007c31b417fbd4bb99f556198b9d9f21f8584fb71e086a60071e2665fe2eb0038cd7920e17a2870e7d6e261e4eca7e187d086ed75525bf3595adb3f8bfc7600b4c8df10f9d197924a18435a2e6e5a63a8331d539da76375d498814d83510f0071f02fa9fd30f33c75c0b52fd2f299d8f097ad0dadf4e4b53e889c83e3503a0035f6fae0043a7e419d483b9ec0ff09e98821b9e38742f338bb1e67d7dfb25d00a1577804a0844b4ce238f4c17508403dcf6cd60afd44e8172c2a9117e9136c001dc9ab87f6eb912ed5902b32d84eac202e0bb2e79389e408012694945b4a36008a4a2ad95d2ad9dd2556fd6467c99784ccbd4e7fb373ca5b5fa3b18e5574ae00cc5dc8b3bc15fa85cdce849bee4cf0253a7b769aaf27f2c63bbe86fa50ae550042aaae85997f052aeb61e6df60ddfa0e779a8e61a729f30ab755113ceda00e005bfd97aac7a97a27ccfc003d7776dbfb2af72af653333f8a9c4c9b2255922d00b68a88c4dbb6a6f132be6c3e9604bbdc2bc6f655fd18da8ee963913e56674d006f6aba0ee99a76c39236ce348e45ce31ec48d633e895d1789aa9639fb75c830068d982150df562b53ca47db8075cacd56bca29d76be85151b5b847b68a8d0400a719b0b56e5b45a52c9add9d0655fa2e54ca72d7d8ddda314cd4c1062b761f00a1524efb3062baa59db5bbafd455972f85ccdcb2260244db3238d7aa90d8a9000759705ea96cccb91966d7e0dc6c4091dcd7553dcc1e7fc35e65b59e6cd9d700d28dfd9a1dfb361e5104f04633a89cc0162010013abfab2a61961b85e98e6600e2144a97ec66964529ab011acb0003f650b9d72ca44f895895b7a8dccffefa004b469541f7b3a47b39e8da41847ba9518c9c227d51af56a0d9d5aab2d1ec1a00abd95b88e07f7e41e179ee61aa78bd7d7c43aaf88d6cbde92c8a9713c5cb5b008adf293a53a89f53e5307b77a26c908c0f4459866110872194e56dc046bf0c00eab88258d9474594c02a9b1723ae5510661f075d3ba88cff7203b02d5965b100c59cfd05156c947d2ed5a6416d3e635b3f9bb4665f63ebaf9ca12365dc72ec00e654058d010056c5558b65fc4d2155b3321614057845d5c2ecef507719242900a081f79fb29591207f3e0539487c3195e6654af387c86d26a6fea2a58e475f0021d12fcba98ffb0ef93f40bf26cc9b2b60733457ad0514bb9a885ddd121b8d005544435d1266853eaac096d96f283f4eecb190cd0a4e17aae726fbad3471b3005545626e8a61bf9518b64ac9c81df6ca05e262615cdf30b65149c6b055c59700e44bc63ec091fd9e2ac78cebd6834dec9dfb1bc6b52dc6d4fddf136b91f11700695832f7c9dc2f9fc351658abb6152c2a01faad2ebcf35f4f65c246c6dac8000b90e7c611990a564a1ff8e59ea323c11d0cfa22fac9d0f44693f01497d031200ab34410210d7ca122694a70c79729e95c7665ce14b4804a234482a2b814f09007c583b574baced13b089b5fd7a90a48bfa265d58c671baa894642224e35211008446aa98322ee2bfd864bc94cf4dedb6a53a437765bd63d57e8ea146e66532002f97c4da258edc589b4cde6a99c0dac111d6167d63e6b076d93f83e53b629600ba145bfb514c2841b32c1d68bcf3adf1d05a6e95d0da2a93e9c5962944a43400b29554f20a7870993d650297bce6e2a050c24b9c57841e45e85e2b6654ae5400c4835cb9508c74b11eb715fd42a40b167d05f22e90cbe9988b2a30c3253030003448b95e7a536f80788d47d54e91862a62b72e7757bacb58b7bb8c4da6ea8d00374ac25d3417d83c64350731e6e6040631e362c2b8b8c5188d452c252a9e1c006c90b1d8e4e9d426756b93a6d844181753c645322e92f16712c645ce199c5e00c8bc44e6a5e239c9a8f2066bd4eef3563bc0a072040c0400b1d6006a795b57004e43bf1d4f53f488e87b4a60504971f2fb162768ad087a5a15b67e29468f2300096e40690241fe8b29f273167c81201f7a9471965a2bc3e541190f7295622000b38e530bd8e61314b52d7b301ebf96c423edf1b6c411351b8f472cb1ea6cac0000edeeebb35feee523b35f451c5139231e69957f4a266f06c61a8c7770869c0073db728ecee5667bb3dc947367596e62a59c95b99727da3b35127ac512b2cb003fae157678405d17c6905835d1b6d3425e75779a9c317f982c2e9b5c89c172006d926af3d18f3151e5eb5c60e2aacb5292cf7c62e07fce44f88ee81739057600746d47ec05e7b5dd0b968e7260221d3dfac3139a9caa762aecead9aec055fb0088170bbb84b624649ec31e7406f2893e6d3f163adf4ef46973b14c59bc64b100ee6d2dd63d6ee6227ed2339c3617f69a0705f50e8e6cf273fb0180749643a4007ac71efbd620bce307ecb31f7f24e094d0e6fabb6cbb00473df913b003d42c00614889c7356e9f3b5e3cc3cfbf2d3d19f38f782b8c8f7fb9fbdaed73935d7600a2395f7468f6fcbbe2a30ddd4312f34b61fe762c21fc307f5189fc69c47b700050913f65f967e465e5880f2a3a9ae77599be1c8e0de4cd009cd58087dae9c700193814f13b3aa9f97c96d6ba6791df8e16f91b7d7b48d081a45d79e381b4840081a8531775ee4a4e6a7cbe03d160d443ecff00edf839ea804b8ebc68435f6c00f888b5a1959ebc7c1e786163a6901adbefe39438ffc499df4648470cc9f5060042939f51f8fc8c22ff5cfa85c451274fd62f96c4804734f000c0f739c2434e009eacd09f8f01a13af40991d9a6b23b5cabe47fc3e65ac2cc4bde582d24edcc00e9ad327685a05af640af64a1ca979db80743a0c1335a78a38334d7f5a4bdb70039de70acd4ff68bfebc07f0e5ed590d9e96fa8f18b0778b1dfa5d53435e349006f5fbefae0d726ed7e0ff27e35feea43f5f929c449c7b8265754f8e3374f7800fe97261fe6bf0116aec986f9ef9ce4475459473eb4ca245f5c15f8c555c164008cc72fae3ce3f18b2b14f2c59567af64b32dff6de3d92fae0aa6087645fb01005656aada185364b500ee8530ffcd130e9525e3031944a130286ff2f25d1658001a3b35094d03a6856d093139c6148407890a8fc2d62097836cbd6825291acf00ea55a25e25b02953afb229532f14a257d95ea95eaf9ab2488e013e44f42d35004faa206d7c564be08208f9be7d9437b983936ae7a59d97fe1f25258d5f59290000009e029ef9000001571f8b08000000000002ff3551cb4e03310c9cc489e300a4c005097a006e482015babd64e1c0896d7b40487046fc70bf8af1ae58c9de008c1fe389334042dc41ec000c9098e9a08fe0a7b40cd8fb2dd4269bbe896d5a000c9116462621a347d233036723c8b43f78e1de0bee669ed997b77fcee2e90100216843302d4fc025ca31b880108cf00a698112526731599166794a981c2a8600c02c8fc9835a06866a8fb5f498cc2f513b6adee0be4172f5215b940d1e7a30000a90122945b4e61eb2759857cbd69337d0ac6433926b527975dd424bae47cf0048a78d742f682e92572e26dc20a2cd4b38721fd91b4462a36f592949bdd90700e7922ee893534c0b458f4209c9c58ec1c474c52d2af95cf58751f52739c55800f03bfaf272707e17b89b0ff59c0dd592b56b6eb459f317e36f7eb1b6d8f2620024fcb1c676f38615c7adcc1ce61946335b39ac9c5e37f8da0521a30fde8e58009fd6a73f25879a5d30020000b09b434a0000019d1f8b08000000000002ff3500524d6f54310c1cc7f97012ca09a93d0077c442df5ede03214e2cdd13423d5700eaa1aad47bd55fd95fd571b2bb92bdb19dcc8cedb74025eca1760416a8663a00942fe0afd032607f3e21dbc10eb78ced300d81261b8bd0cd3391fe2fd277a6002f3610efe6c6afbb93cf036d78fb7d46365a5d20620d52ad7c033ea01cc56500885486978833cca1ba345b8148683e5d44c58f313069650d95905a024fa92c00e38a171b8fa1ff8b273aa76db44e48a4865c5224192a15c4da49f9157d52aa00d4335bc54061583dec83dc8fd593bd9192562385e41d7e3468b644ac23d20e00bf5689531a27e9855552fc881ccbed7910e53c4da68bd1591cb578b2515b1100bd53bd265ee29dacdc4dd1fad36f520cd435b777e468dec8ffd90837914cb9005e048bbe9b7bae29e1a49ebe676a579f93241798f43dbd3ac4dd8498ada9b700b689a9e5cee566e2f9c61eacecf0484c3536fbb2f9a093900e46e9fb71a817007c502d5abb04976dcd3f27fe8dcfa94d9b4d12f0d91a9f9b3fe8a4eb661ea600110633eb1e56b2d71d9ef6a24474e2eb0d57af57af6f25fedec1cd020000b000e964d5000010961f8b08000000000002ff8d5a6ba835d7595eb3d6ccecd9b30067cfbecc3e73f6d967dfcede7bf6e59c395fbecfa4f335977a4b1a6383a5510091a0a452f1021a342dd520464825a65002b6847841d1828856d35afd21d51f00d21f825a100d49a94154224a9578a3681a4b519fe75d33b377d2f3951e323b006bad79d77b79decb5ab3d6775d1947df50267840a9ebca78017e5473a7f0d700c413e0bf7b27ca0fee0bee7b88fdfbeca3341ee7265e2a7393232e7edfae3c00fcdeaf7cfc7e8b6a5c03497c3f273d407660ec340b610909aad026f88a21f700cd43d795a39a856eca78588d8718f75558e8309892b5fd6dbd4d598d550b4f0084a94e2b544ed40a2e95da402547a93949a250f95e14a4ca09a2b1f2a3e82100192d1fb18c2888cc36e6dea1a25c5dc7a44618a17bbb8ac82a777f44b835ce00f81b8351dce18c2eb48ca9659736c61cea61a8cba11e6dec56436e35d4743900d4c7508f437d0c853d0e2518ea7328c150d0e7d0004309870644541de1471f00a37f749ce2cd806f5275dd01219a039d16fa28254dca6e7a54e8413256c61c0041dfa3015a0353a800f6bd3b52263203921e5d2aef7fd52057df5738715438005d5338fdb470927ea84c1a24a0718f09ef102d7372a9cce75492ab471146c000650446a3f414c89f364780ebbd6a44b8a8fb081a9e52c311bbbd31ba2376c700a2309b233dc69bee04cdc97852a8f114dca693197c359b41e5d94c7c352b1f00f115643ca566800c5160a67a9aab270a3d3aa5c0430910088668a13b11816c008ef5840265ea645aa8c90c0267d33904cee710389f8bc079f954027f51cd2100102a98999ee5eac3851e8f28f04002ded316074c15ed5153fa100401b0fa75004849d2e91d0863fbd753d5df0cb19dcfa9d4d9a5d2bfac60cfc70a6742208200e904b23fae26b903b79c4e0b07183923119356a6a6aa8a9cd4464e155b898d002d7617555c2dd87597e82ed85d0a2e6c2e340697ab42cf57e8ad345ae141ab00d00bdaeb7db599e19533abd68c3c109ded04f1dfcfd5cb006691abbf81998b00b3252ccfd432577f87c85b2094164d0ca97f504b861228c7b9fa47508e4f160097caf9b2c2c4cf174e4a20bca40222a9a36aac2566171260cb078d1230d49200d8c9eb31fdc79edef7f408da0dfb328748a6c11878f74195822a6566a5986e002604a29b4ad48fa10d828d4ade546a1a981bccf0c04529f43354454f2261a200452af923adf4e4b474671540a7658896013ca9035812685c27d09b7cee1efa001c968bd21a83491f6ea4217d8d5678d08209cc136f5ecd9c1fccc4e01cce0900193789be456b86279dc08d00ad39ca9d02ce99e7ce5b01c7fc6c06389e56b300dcb91ba8257063d2ec63e81b54bf74639a3bdf04caf424c1f0232822ce7d08007571635a0161abd9a9f8291533d13cd57d7123345570c9e9de8da7ece97d4f009f42bbe148e608f8e24638fb74a2e98a091d50a8d120372fe3454275126af9001ed5cf9d27a14e8287a5d76569486773bcfb2135a7050224ca8299a7b3c29900211f4f49682c21d2d7f931755613629d3067428829fe742e3ce7249d93f471004b8ab8496cdc788771636b9b6581d2d3c733451978929e6a2771a5f45315b40009a1ad02739e12df0fa9a4d465aac57f73d474ea53ba2605cd47542af30104006a7d72c2b1df56e0f51c6c4b39cc1ca08d4bf0ed2f5778ff2b6a552a9e5ac500dd43c56d4990b4ef2f112f4b4a6ef7a171d227f7df2c25ea057cd51fe7ce5f00d8b878be8e8b171917bf6be54f98c8de61f9426cf425181752c904e995c4060024ab15ea471dabc803274d74d54bf9aeeef56fa1bf9d2dfa07a23f68a9a9c4003cb4a5f7db3398339fd19c174a73d48c59f08680fa1c03eab5c3802286a96000f8b71643ab3d65a5284ecb451550963003e13fa9ac26ccf09b0921a6f88b9500f05c907441d27fb3a4b708285b882d8b05ecc1b34240bdf6a680fad261403d008f3d00f98f172cd028a0b946f860ba932e293be3bb6c8d77be5a976a2ef51a00bfeb71563819bc3122a1b1841b10c66a53136ef0bb11424cf1576be1b922e9008aa4a925853d8b2bec1129250b2c2d5c80d629f46361682fe24ae965b5842c00b88430412860b102607a57633bb6c02ca0f00af8f6332448d684a3f475eb2800008131939d70ec5bd52ad777c0b61587f1ac69e3167cd7db1ddedfad76a5e200ab2b024c54866c6576eb2d14df52727b058db31535bebfd4586fb026ad925c003f8a0481c007c17f7542bddfa7b25cbfd3ca4f3326c806094240c09c09c26600a63784732b30ed24412059ed0a672db6eaacd0d91af666baeaadf8aeeead6f00a1bf9d2dfa07a23f6847049f6b3bb465feb7973067c148d78f9500aa25577b0002463b24687e42ad73fd1c6dc0b3166df94e307cc26268b5a7acd5b670b61b00185d83bdda9e83f029755e139ee3f75c0831c5dfec84e78ea43b923e634961005776454059bf58163bd8836783807a8e79d3cee24ae95fb2915ea88c3e813e005805260bd9ded17b1fb5deb3890d74196d8944db6fd868e3869bb9d85f0990008984dc3e2e29e2e356c42d7614167f09ff4519f8c0df99b0142e25f2978b2900b8fc919a96857612567bac3f460a9baf439581d4f1b2daad2eec6e95dd35ba005c7a104dec1ec615badb4282c8a8adec3f76e832bed44ea28ecdadc6e0ee1c00fb0f0152a3151eb40abd5d54fb8fed7eff616772ff01d04371b7be456b8667003b45a8adb1ffd8e4fa5f64ffa15fadf61fe63dd87fe87f2f9ccd1972f8ac8900d55b7fc1aedea044defc57c434c6026cdeaace72fdc5c299aeab3526dbaf3100990494ac316702f8bc5e63e6b660e13574584bf9d2fb9ecea0dd7023736411000f90646b046e36d5f2b982853cc3367299c97708b599c2e926a99dbebac2e900cb7d6525ff0d9e257772bd15d4e64bd477aa6de956642d71b2ca0ab5da40c800265be31367bdc627ce7a2d9f38ebf2293f71cc858201a1cd824d6eb0ee2d4700364a7c87ebcd7245e3c6fca6410cc9aa3ee5aa3e25ea58ff2cc4537eecc0e000331a7606f4cd3d6a9e9bef01cc6778e6559667cc72f3cd7596cf6d96674c5e00ac318b7995e519b3dcbca3cef2b94dd1accaf2d96e5eedd5b21949bfbdcef200b32bb2dc069265816fc8399edd14fa49113e8b2ba5bfb70a9933860ce1a42e007351fa076aa5cb32382f95deec1072bbe616348faaad5d36d61833bb138efd00acdae6e631d8b6e5309e73da9883ef797e89f78fabcb52f1ed1565f702922e00343e8acce5795ef023147cdb5b68bcdbd2033f537a405f6065dfae73f35b88007708fc20f86f4fa8f727d42e371fb2f2a73bc6fc05828750803983e75cb0b900209cb9e4eca5c43c24abcbc239af7310f90dec75d5dbf25ddd3bbf85fe76b600e81f88fea085a6e792cbd0f6605f45b09e2f01e4be4abf4ac06807cbb8f97d00759e9b1768039e73d196ef04c34f590cadf694b5cd0b27bf80d135d8dbfc1a00083fadaed58450d25c13424cf12f2e85e725492f49fa67961476edae0828eb0017cbe212f6e0b94040bdc092d6dec595d29fb55189e2489f142a94ef0f1dc5003833eaa260b838a8912320b73a15725575bae4dad325764d75b264a41b156c00e3bf8827649711154fabf328fb21c5668c8f579562d71b5df96d57e898a2bd00a89a191dccc46084a53db4df8857b6f6a71a6e7daa6137dc3a865d6dd8d73400b91bc846df0dab8dbef7d3d8e8bbedc23103e4cda08921b767bf592ca56ca5004f06a0fc4e9c4ec130c74dab2ffec1febb7760bf7b697b5fcec07af5177faf0070063c2c3bd6c7853e1eb0a7f73d3d8076432373f86b02172286a032a032da00c037724066aa433773ec56b2dd834337b0313cd2d3f4d4c085930c863cf65c00be1cba6f51fef5ef7fe7fb5eb9f1d1dda7def5f63ff8c0071e7e647bfb3f3f00f0937ff8d847ee7de5bf9ffd4f89c4db2d8e5fbceb6d60cf70a52b8ff7aeb40096d0953d086490f4b4b4c07df5c127def5f4cf3dfddec537befa1d8f7cf885003f7fbff9abf73ff9c88b3ffecc5dfffac9ddc3afbf249ffbc7ba27fa7671c60047ff77353f2174a70aaa8e88e9ca9bf8dea3f2984abeb94b40632e16783a740036b81cf12452e394f1a8fbc61e3cda69e160d1fd6e75642b6117734c07c27400a7fbd57a221d27baa6151c15ce51a744e5775e7bc74b0a6cfd4eb705b63fac005ae5a12c5634bff5963a04ebbfff7bd39f6ac4ca6f355c4c7e4cb99c3c56ae00df1a73508347a3b58f63a7e6e20778efc31b104297c455c6c58295848dc660000cdd5bb5155e47c6793eacbbdfe696c7d471091cad884303884cb30b759e5600ddeac4b45bb19774bfda3318ecf478625ce8ae3dcc759fc52213051d64cad700ab4eeefe3c72ca66af6814106103434dfcb5e0d48979b44dc57ecd2a069c8c003def064ea6130392d88796bedf893112373aa0e87441d18de9a0589a42ec7600359b862c4005e781a06ba0a9fb49d529ad369dcaeace01a8a599ad3acebd9e008cb354e97e0d6aa78cd23e2587bc0068353db0ffb4f2c8de85381f371b7edc00ec5aacfe44b08a81d546c5b9fba7d50d44abba8130da2be43604955ef461b300c9410f1521c4d36c59562f09ab10c1e136c1afa7c2dcfdeb82b710ca84da5300bc5fc159ba91200bbf16ec3d601f7a06fabfa24c897d2b1c731040b6bc10d800877e8bd87b2146c286070a4f281abce668ec895d21f05c10b8a0c20410842e00c1f9420d4ee80348bfe186d6a2d7c42226d897542b77ffe736de97505cb3d50020327e05942fc8489a72d0f7808c47283dde2b78c832af61b34c48a414465e00e178fe5d9256bc48c158d4f6b144467e03f41dd5b0b5dfa7228491c23d0af700cc9dc288b7547b21f4e1898acbc539b48bb33e5c9ccbf4642a40b86e7a223200a4c8901e5ba9a6dd34197834a4472912f40862a6bb6e564b62f36049c4601300dcba07f6c263de1dd663422282c5dee65dd5dd5a4b843729bc0984bd7b6c090003334625c28409127519abddde9dd52581dc1ef529a4cf35f37ebb40c2dece0015f6da5c91a53dc2616fb72f223b14c984f61eb2095de81e0a47878503956100c0657640e60f6341f61ec71a8895d29505b5c3771d02fd6e0bb4ec1a0486b40053381d9cb0f512496121c47599f783f6ba4c0823ca174262da8fed224dd23e00497fd492c298c1153bab72ff212cfa729a87ed04f49313ab415c29fd53d5960061c02d830838b8fc80d3ec4e07837d6cb61a962b5a9dba3588a5b253ad986a003df31516c4b81883a9c61e9c92e6594bc385540e4e39f63cee0dbd5f20221800c6942ef763e694be3bc54d81f7abf54d4172c506b9bc0ee36954c403479e8000c7723217f364cefb587932a747a8854937f7fe52ae96bc4ff084e1842efa2c00ea99f77b56be4b9b3cde1f44e5fd019088c462de5fb8e41ee9b1ec942059e100903caa01e1256082d25ef612beab7bd12df4b7b345ff40f4e7b6125b4ed9010042db371e347a2f1e1c34a2fa0030da21f8bf4c1c5fa70d78644f4b0c13c1f000ef2d86567bca4a7801800fd55e0d76728a5b33eff36a5213ca3d8010628a3f001a0b4fde5b262392fe8725855df1156158de1a0a0b9c734578c608c3d7e50b00388e2ba5bf5c06848ae9136e8422c6e8d100a7c4beb6a7c4722f0b971cedf7007476cb94eeb89c6133a9dadc7061db633796dca396147223755c38dcc5f6b100314a52193fde1f633b56eb7b44eb217e7d7582f9278533dc6fcc86d8f922910086f0e970bf171e4a9d18b24e0c8fa1ef521d5b6386bc29bee90426c0a2831f00941b946a7f173472ff02224ce0e5fedd37b9167b0ecb6d00436e48a3d9c6840066e006e131540b8390ffac00ff937f5610daa73a7cf0ef0c424c0f38a1057100ad2060d793ae0e82a0c56e13d29bb97fed86436329f8369944a530a91134d8006d4064602ba3f00c20b479a8216a71c9416490a9c8681e4c329c64fb2dab49002b08ad5d11ed8a20a64dbbda419b76e17f6257db3eb55ddf15b445734c88a100626cb985d205eb206637829428f71fb4af1a817fdb4d35fcccf033ff0f50f8007382ac210000c1095e76000001611f8b08000000000002ff35514d4b04310c007d6dda34edaa17413dacde0485d59df5d041c493fb011e44f12efedefd55be00cce040327d69f2f2920e90103710db030324663ae83df8292d03f6760db5ad006dbf886d3b1b222d8cbc848c1e498f0c9c8c20d36eef893b4fb89978265f5e00ff398b5f0f08411b82697900ce510ec10584608417483394903a93c98a34c90053c2e4503104def2983ca86560a8f6584b8fc97c88da51f30ab70d92ab3779004259e1ae07a300299152446bee21db923aca922495a76a1de6c5b2ee73382b00c92b7b695279f63184965c9e9e905d1bd95fd05c3337504cb850449b76f2ce00f5642f10898dbe65a542f562d7914b3aa34f4e7198297a144a48ae7d0c26a6000b2e55c9e7437c1887f824a718137e47df650ece6f14b8990ef59405d592b5004b0ed6acf903f2373d609b6d7e4012fe5863b979c182ed16660ef304a3992d001c5676af2b7c6f8290d11baf475c1daf8e7f2d935b133f020000d6421a4e00000001ba1f8b08000000000002ff5d52c16e15310c9c6c126792d09e90dac383003b62a1fb24d805214e3cda13485cf800240e08893be20ffb5330ced24a10c900ded89bccd8132f88613a22f2065810a3c9a13c81569119c0778f603cf1f44900314fbb6192854d3f1137cf24f9f7c8cf953edb20bceb6b3fee2e3c1e68c3f300ed1d32657541086c0895e519f010e52678194a2abc40da43337a69750592a00051b184187c9b26256b59270a329649bb5c9671c47f366da7fe2139d55fda2600eb82446eb09293c8e0152476513e45df2963e01d1b3150d65172441fe4bea500277b13a58c4985d88c570dd1aa97ff119cf16615f2383b0aacb6064b0758aa002f5ddb7fd7efff16780edba539edd21c90523d78721206eb8b7b90708f223e00aba924b597d4b5b1aab4e43ac52baf46d72dc39b8faffd7c9465efb83d50e900cd65f8bccba07724a386036acf5ff6ab1e39fb852841e4bb8dee875c0a8df9005c3e3bc4971d629da2d8b30bb305465a9716263c6fea1bcb8cefc28ccc337e006d3e1539383ea5fc716cea992e5426b60b6854d87c18f519c3d876db875180003fd9749d7ea18bae931ee6114e24bb8755ec75c68f63884274e2ab0d97b79700b77f00e0c142bd0b030000eebbc347000002cc1f8b08000000000002ff8d5400bb8a154110ad9eaeeea9a9eeb9a9062a468278d55dd07b513072dd05416153007f600353633fc140d01f30144373c16ccd050311ccc54fd0737a66aeb2183800503dddd555e7549f7eec490cddbe443b12d993a83d1ab1ab82cf603d7ef72f004ab6033b38a6ef6032e960618b49895b7a14ed0349680f25dfc0e478c8f023000201320c9b061865904d178daeb8b8225cda5cbab814494174f1ff15ba27590022212eb51a5b3bdc5bea1d608ed430b8041fecbac8155411442e33c4a77097003ccd5d9be6b8e601c01d52632c0b5991bd1003bbd6c159eaa6f38a51edd04b00b5f92b32baf191cedc0556b97a50949850445212dddb11850478257ce2b033000c1387d6d8d84d749a6391b0044d867e2d0f5d623fb0c040c08fe26b79bc09003a25385a1fca2614bd2059fdb8ad76b6b657707b4293b4cde96c6d8e822580003e115daad4a52c6d55fa52b4b72ad9553abda04a98a6a9ca9356a5424b8d00007c27ba96a71b883025ecaa9c2ab98dbd3cf3fd3af389afb89e02b0675258dd0005d1342db20386ebad1d48d8a124c37c2a88caff4552495247903c977126c9008da48224576d78c0c95ee15675cac939ad6e54160bcc253b2334efb29d272d002b705f4cd22a638953f3acd8cba65846c86bc96b797513793d2362d645f9fc00477976f3a27c2adcaa5281502a10de483d6a2220a41dd49e5afbdde5307017007ad3155a75c4bf1567fc469485709b48ce45442f77643ecfedcc45924492bc009f48b680b38897433a535ef82fb8fb8909b1cce4b8a61ecf507e9829bb922600da139c61aad9272a986aa3e5154aa41d493bae90f8495633adff8376ba962b00b4ab7e843063a34da44da4fdbcd0561cecc4ebb40d162d17dce10ca81e315f000dfe6f808b96d6f273cb272505308941b8fdd61946240ca6e6e724989bf36d00c4afbd8d3ed974a700f8c31ce9c68402ba62c6616ac3cecc0a8703d887b57c00df0f118824beb995f3a7e74f7f03d71cc7f99a050000f851a440000001571f008b08000000000002ff3551cb4e03310c9cc489e3a4c005097a006e482015ba00bd64e1c0896d7b40487046fc70bf8af1ae58c9de8c1fe389334042dc41ec00000c9098e9a08fe0a7b40cd8fb2dd4269bbe896d5a0c9116462621a347d23303006723c8b43f78e1de0bee669ed997b77fcee2e901216843302d4fc025ca31b80080108cf00a698112526731599166794a981c2a86c02c8fc9835a06866a8fb500f498cc2f513b6adee0be4172f5215b940d1e7a300a90122945b4e61eb275980057cbd69337d0ac6473724d2aafae5b68c9f5e819e9b491ee05cd45f2cac584001b44b4790947ee237b83486cf42d2b25a937fbe05cd2057d728a69a1e851280021b9d8319898aeb845259fabfe30aafe24a7180b7e475f5e0ece6f14b89b0f00f59c0dd592b56b6eb459f317e36f7eb1b6d8f26224fcb1c676f38615c7adcc001ce61946335b39ac9c5e37f8da0521a30fde8e589fd6a73f333071da30020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001242ab1a2bd6d07d8d61ea56d85861446349e52c6b7c0612b702cb1e6db6ad0b089000001000000000085864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a63127a906d250cd4d4adfb3fd14e1a96eff67ea0794272bfd641821bc6ef2084035000000000000000000000000000000000000000000000000000000000000000118d12cc03b0dabde638d77a1499800c5a7668128cac0267d8339844e07cd7b052b7fbd849f92417221e567c919124b68c52f08deee4ce6c5d7ad71ba349937f20971f73b55405082d4fc9497e1cb5a1133b7f660ea1da2929514e7ff32f7ff2000000000000000000000000000000000000000000000000000000000000000001b561c7a3f26940dfa679b6eb6d40aa7c6df0eab19aae031ef5ac5e22e9602bb00000000", + "101cee1ef8ade44a97f59177ac8736bc66e8e258c5ff907c4779114a73efdb27000000060000000000000000000000000000000000000000000000000000000000000002000683b91f6f27c593a4147ea327bbfdd4f1cbd430aba9a7afe6bc1c655e826800089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000602e7f23f948e9fc88ac92b1b246da632d159aaf864172f01af4adddd41bb363d600000300305bad45e7bee38890cd3d9e7179e93525a5473fa5841e44a318ba1786304a0c000003801e40ffb954dcc2d3836f13ac136a631f87d525360bd752fb5b61673e899141be000003800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000070dbd9880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000caf43802a68a345839894fbe3410d55b25c266c35289ebf5d518b31533aad7c49f0756c000000060000000100000000000000000000000000000000000000000000000000000000000caf4380000319fdcc8ef5674b0e4a4498438e93a72d1946a6e5f98d1c540d7c27d0e93cd695129ae734059c90ea1aaaa58007a2f1c92adaead59be5fd3f57b6af2fe8d64824276fe07f0298ac4ff787ebfc1db88f4921c46c144abb819ecfdc4ffd359781c7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c5f0000000040000000000000004000000000009c5f40009c5f00009c4c405d15342d76e46e5be07d3cda0d753158431cdc5e39d29ce4e8fe1f5c070564a0009c4a0000000006999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f82b342271eae42d0afb6182a99d3ad876530841583fdc0845907de3159809bc83000000000000000000000000000000000000000000000000000000000000000100bf8896e9ee636b27cf5478406ee1322588136d3eb980d0bcd4927f541093a407c2dd7990f8f46e2c2d6369734265adfc029f4d5cf8ba41ee15e0e277a76a4f00000000000000000000000000000000000000000000000000000000000002840000000001e7b86ba1000002781f8b08000000000002ff5d533b8ed440107dfd00b3abddedb6bd02b1c1ec0140033b2b812d206476362220e500044804880b1000224272240284448e38c45e0a5eb597115a4bddeeaeae7af5eab78333f6024e00ae801d9c6fb941ee839f70b5fcbd3843237bd9bf52d97e5db05ce68c76977200a9bf831c16aac22dfaeeb95f22703fa07944d5e1a0c6570a3b23b45b4c19ae006dc243e02ec21677ce37685a4fe74e669082b2c0ce38a347672994b84363bb00d97691a268e36c7dac6cab46e2d1e697fe86387590b8328de03a34d111dd200077303e27fa7d8074656ad026d1a5579749afb69fabad435f19e831a9b02fb300755cc9930d492f1d5c10756c7a027e46dae2f96cfcca2f405fcb6c8a676c3e003e21915bdf9f5b1f4221d15008b64751761b781f372ab4c408f1f111c41c5100bcf0dd174da0e6c38da43f28fdb1d2d7e360291c27e66ee26db23cc5a9ca27000df8e498b6918b0f3861c6461799ac981de9bc865b93d5980c342193948f6100a347328b399044d0c89ba2625255d68530254402bc415400cfbb67669a1c3400894cd85b2631c940950f18b67847566d9f0bf75aa5f76b9566646d1a6226c600d38c43a9e5fe1769fe2f520a33bbc4775a978e6d963a25f0712550556a81520037f3f9998a18128a56b93a4e590bf0692d00c19424ab9a34586a31aae1a95a000d6aa54e463a09e344a32f98d46861ff88e354c18ad7f6ffc6490858f9d50a008471b665d40ee9135d86a42ebfdeb8b4037393b4c116234e9ac4f96a08d55200e7bb300f3f08e7b4037f2f5ab76074608435bca887d8d3208a97ee1e8c74d200e900f35707b85bd73ac004fc251dcd450d12dd2511bd867ab52292f41ae93d006ef1f382e368aae3f305a7d7a7d77f01e11697143f040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001242ab1a2bd6d07d8d61ea56d85861446349e52c6b7c0612b702cb1e6db6ad0b089000001000000000085864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a6310b48f93cd4635b523d935b14be8e6ad8ef0f0ee9e2956a7074dbd6fb039474ae00000000000000000000000000000000000000000000000000000000000000011e90834cff03fc22b1d167b343b57e6ccd303a6c1d67174712211e86c25be6122b342271eae42d0afb6182a99d3ad876530841583fdc0845907de3159809bc83000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b561c7a3f26940dfa679b6eb6d40aa7c6df0eab19aae031ef5ac5e22e9602bb", + "2a68a345839894fbe3410d55b25c266c35289ebf5d518b31533aad7c49f0756c000000070000000000000000000000000000000000000000000000000000000000000024002e6186fee841bc510f5a23dc4ab08eeae70c87cb2990dccb2b9c4069ebd0e300089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000700b4847062e5e74149c8696d66e1c1d8425e170660a075eaa25c1e90875b336a600000c002cbb39775e12226a6fdb9e2c5889e9e820e417784b71b6dd0453a487aa7d360700000c801e40ffb954dcc2d3836f13ac136a631f87d525360bd752fb5b61673e899141be00000c800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000070dbd9ac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad2ec2c02ab2a5f92238e1b102bc05e4aa10ac637bb8cd7f88db17f1cba93af591fffb24000000070000002400000000000000000000000000000000000000000000000000000000000bebf730011435e22e393a7bbb4fc671843c8a89f4a535b1ba5e2ac9f1b338e6adbc016171030058c9be64ea4474626c5527eaaaf10fe16ea0175ca829b2e4ea5e3cf2fba4bd04f7a934aa4a56aa74ce445d79b3835adbd5c78b99e5d1d5778960800626afe51e2e87601f92151bdfd3096533b76690d5adccd22b6fc566962cb5138ea60c2e0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f697ed00ca51f4e2b44f55aa4d6b1d7ef7de4b162303cda101b98444057ddf6764c3dfbf2a8f5f7f963c59e6445f5c807b5f74fa9c28f1217a8230b47483184af67d0997bcddd20b655d13ee3bc3347d4de181eb3cc978bd8958ad7679228c487388562ce17bee151d3601c2c328c27b2786cdb1df2ef0f33a412e165c664104cf031a8bd931dff8e5b992cb4b37083bc5e3018bcb9f599bb8e16a7fdd9157ce724e3134ec44647bb7b2efeedbf384dd07a76dccf6aa6227fbb48bbda0830e530c194163e39fbf7ff26290ed3d2e97f8e9b7575d54c64e88765e1e306be59b0bdea9ed9ef7f5f0c461f842f0419916897313fc11d4e53445fb9806905ab2f97ac935df23473cd85a2d706f21ec9fe721ad06824e6d076143b5f3355b71ff00ac6ec0d78123dc5595bd7b56bf8b268760270b54de77724326fb90826fa749ff86017e82e8a687db5d5f6ee20f7485839bc600b0c576a9684817ca43a54b98d2ea271713b635aa20b7d273f4b782301ea421525f55bea43aad8788b1e37dd0210791c7643ccf40fe0c68e5d85d4dd23c8b81e5d59a362de906300be7fca090866c758abed609eb86f9c25fe15c858647d1bb74fe385b70a523080b8421103b4d10000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300128e0d73d343193c5691f6f69061b1abfb841b1e6e553ab47646d5d223d98f04c0300a08d7df55116f7633ba3f6fafdb3ed9d27e640cd2f0d9a8c279e833165889d2279d6e7443a234e19c6f79be5b504d58d136829b8335145944f8aae4961a9c406f2854a691cf2a3a0fa9455669ac8ec67466fa964f9e36e57c63487bbd6503a000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b05edf5b1a6147f8940a5072a72b6f7c74461a43bc7fee5dbb1ea0c9106d1f9ee5287a4c5bd018fd442f8af7104530f33cae429c0f8643fa47ff3fe40895a5f271c1b90f3d3f3630047f30365c5603ab805f061939dfeefa24e744f30fbc8dcd2f12c2c6540af0e6c502f4b02c012c064e9d9a947939c3020481f49f34260e60e3a7f0f0ae4bd530feac136c9e7717fd0935299fb9e8e98f4882bebbbb6a818b5c18560d1e4bab190a338eef290dde3ec1f7d32a0c18dda603e81b1a6222a76f8db74959b46202f99d34391b5a721432d66ca7e7c7f89b044c7a1d3300b658c5dc4dbf3f7dbf8acdf0b4e059640198552391bbbf1e3f08a9407dd5320d318b9323233b448423af8451a1bd7587bf3f099966868244983b46a4a22994d56c3bda0b62a2f155b623b29182ff94546c3353fcadfd3ade1133297317a9fe3842f504014154ebf341e6f3c4e69446d9640d734165978c9b3b1cbb5ca31e10774876ad3d56a258f963bc47a1383c98e21080aee32a4a4b1f5d46f3bc3a8b70480e27e18d7e5c6b14dc851f6409d7f9d2ea9a03dddc9a292b85889e02258f1890f5252b1e9734c0b81d770f20d45c6ff81c03e8fd024b887e1d849ded97ef30b6d9b4800000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300105f01767add72d814a85a46c600b892d59d8e290e7b39d8decdb2b4ab41b91c70300a670bf54f5fe0347104acc209c1b6274b5d5f554023525ec1ed7e019d2955e2efac82644d4b92eeab16c5254b0f4478c7edbb4735ec899adea4a4fb7f5face2ec752cde28d83ffba1dd03e43f02098ad473f1f20382f5b0e9b09fcf88e2973000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000979e7783747faaec8c6488e3efb0352951adf4457c93f3bf36a890788c38056416600578f66051846b2697cd93b73065439a3ea7af553db1dc97136a33a37115da0b045a69bada7617de6d06072b83fb370795109ae3c6bbd7fdc8655298df50cd0462d3938cf1ec324ae72c3690eccb6db44a105a3c6ee67be0fddb796fbeda0440fa7ba0118f59309da8c17383c9fb94179f2dd906ccafd7a216358616bf1dca9b6f3548909781658b1f1fbac409c385d8389b8e83300622461189d886ff658879a0146e0ef9ea01407aed8a5628ec7cd87fd0564a4bff162854883f779c64a416db366f2b5c54065c669055fce7147ec704e48f5b08da9cb3333b6494e40bd7453ef68c22e0c427861e6465bd2a38106739cbc99c7a88ebb459c72271a3c3422f494daded89fc627b388f00ba4a2ac69057aeb8b0417d689492e1762ef78629d4093d8f769abf24217986966b40e1ffb564900417aa51642343f32ac9b3c88cf64aa48641b4d69ddcb16fe0acce419209d93990a48ee772e7d40c078aebb871fcab781e6e759d86566c15e02a299f7eeb83bf76ffdc9c3254608ce3ad0061e8f76e682e392a2d8691196bc6f25768a2cb3d3f395cd2e9dd6cfe564bc9b1550000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012346fe2e73d2485dedc9c11c83c8c13f2a8e35a5de884c2ac80b0cd4e8e81741030478b686847e064c0c6c5f250ae9df6d3afcc57218235f07e9441a61c669ee04218f97a95152826baa0ef5b0be184c5bc8bdcd9217a3d323c25eec2a947511cc1d37d568dc095922c71df2f9f98ed15d1771d45e376db6e85bea8b68167d51290000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f1294e3ef069b5f6a8563f210a41f817c8c3946f3d532d2f62672096b1a38fa15c4ed200803a85682c044bbd699968edfc5c8f343ab82fcde3abdb1108fb5d5dc81941b6972d47a381bed24de5d203b2e27f6ba1177ae20022a1af5215ca5ce8ef2479186ef452e46a181627d9b81091cf553fc4b7fbfdc6d03bdd33dcea4ecda5ff4a4f6be426ebc141c6319674eed49658420beaaac80595ddcaa44da4557ab34019bbe379a516971e97010c556e7d08d04d1a6168ead6f99c77aca703adf5ee8731cb78bcc05b5c40994ec879aaf6d0777a8753cf2302c785187b0ff15b497eb89d0628e4376d0e0eebfa964ca67683d228590b8fc9331b948d0e09f111ad31d37e50eac8da655cb605bff2f357118179f470da723889a321b322fde07b39bab8ce59dc9836292c92df1f2f25456c81e06e0e9965f94c565494ef1ae61de8f8d72124023fd0695780ef6028bfbd0af44e4ed19151b411428207893c164fe31ddf4b63cf78037b58ba644fa533d720ca175cfde0955ae616f6ef99606aacd92037a106fa098d2c553ee2402e901adbbc975de0a83f7cd08770a2eb8f2cdc69f4dcac1067cb8e712fe89ad4773a27bf2ddce17030d3025d8e13a07bf6861a60000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300105c8ed99e28a7a574f52264326d1691d66e2382d6a8c631ddaaa56fad19d5ede03089bb67989b319d0e1c5f5a33399a76544a47e9ebe6015e67e2862c009eef4321ded20952f90ee54965d8c23662307441d60a73bf91de5d24c0093f1aa92b098282be830f278d9b0270da48f09f21bc0770e8004753d0ec92a0c2f68be60ec3d00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011f1c8e05e7e6e9cb5a465709814c8a0688e0b9b4b5cbf97e713f91b5397931574711017703510720efb774f13816c56ccf90a15e517457c70467a8e9cd6fae0f60d84965fbea175dd283620d3ed7b8fdc8043f783be1e4a62291186eeb37c31242e1a0779915fe410ef8e615504f8f4386bbd708ccb578c3358c13d770e969b8cdf1b894559506af7d8a50f9ebb860bf52a41233332b902560f01e0c4f2c2f4115b7676a515e53611b873787c06f5185f969376b701a2708d5b4113dba0a5d14364196bee8ebe89c334fdf2e55baed9cc7c15c90915b0ec5adba3e0bb5de1c88a6756b8e74232e53c5a67dad15fcf69150cd88f11ef6bad7162db417ba119155baa5ee84c5bdcab11c176e9f627a7bfb91023cb18a8d14693ddc1e496ea05709a9cc83afdd780ee5548fb6b5ead2d1d094d6d8b7bd153dc57c8862bb82b34172502025eb6a5e42374565d2e6e5c09470d6d9e89a133139e28b40261d426e880f228a9c6788dc6be9e7adfb05390a78c76cb088f4f0a1bc58f5482c63dde88fbc0034f662524524f08119144c46b8d8b5fd162b2d8a428787300aa78fe28e2f9f5ef792f6d684a5f5a1769674bf1f14947b285a31b3ad1c3d5bc0ac84966f7930000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010d135597dcba9414f04d1d99019d40972e55b6bee32e3be6d85f82747b4ae3a9030966674c1f3cf63b5157fec3064144af718d9474704cc960cdb060c81940f221151f2b709b1f3ddfb4d421d2fc7451918545a1df411a555a4a3aa6331657bfe11b09709390d98c6c9603b16ba9e694ea4c4ed86818e8d4e6a95d6883912cb1990000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e46aefd5bce305eb25a67596de791a5195c31f1f9e13023b80f5cb36ae00de8d5f7f6c0f055aa94f6a68d2dfe77c4e2a1811c4902549c59b586aeff251f0fe8784c35ee1786af12d5e44ae7cb82382889a1cbdefb5ee29612674e23b4cfe0c51a6a220c390dfae778588fe94babd7ad2354eeabcabdc0e30244d8970278b5c4f890bd0469445c47c3beb71060df32c861d303e1ade37c94a2a249df0641b78c2ea52e828b1223d377ec4898ac29daa85a1a24f226cf2e5195b5da91342c77527cc9cf7950c0aef4a292ff9b3dccbe96e0fae2ebd1ebfd632935d9bb3eb5e6fe70317e32b8a2d03c1700b4783612ab23f33c5e8fb1ab1a01df6ead4b34ec5d2126c5d99476052fa4a2a6f7a5f6f6b83f56ae966ab4167549433b106c353cf48102448ebef047cea74d5a514a5d30fa01a7477afb809c310e0b31121ecfb5e03c026a00be14f49b8c4eb80dce5d6e717221a47bd1ad266d3a670ab69bd8bc2a4304279fb37c3ba61267f5a2239b672491701e989eef1d0fb5500adea009b6644c263cf1ed747dab9eb13ea358dbf92630d3fbaf82b091c6e2e59270b6943ff94917577e7ea9a7b6c4f7457e39404231e0668ceb016b9aa1a38127c867e27996bc0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010ab2f9090f98e61b95c379557a12c1e09b805e4f232c261fc8c1d381122a1008030a59b7f44486cad3b2e00405331f79a708b439422401a1f19e26336cb4cfefcd0f2db618ce4d89557bd0b6b4e485361e3988df35fc049acb2c470addc023cfa10c7c3c68a56142e0389efa499480f18bad8cbbe2ad473af0dec5379c872928590000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a5d08686ccfa45728b333b9fc9090c01b21b44eb92e5e2a9138a1d6664ba71fc24608ff0c75c86dba08452408e42d2c53729a809cb7475230cb84f4f8bdd6a054ba3f7277b2659f7349002677f973b0dd91ece444c4aa0bbdc6020d0b92f0a52f236a4680a48322b16256206e949f2d1e02378fbffb2f652184f2c880839e56e04faae6b703a216a7eebb19a1dcf20241e888c259fb0240503b425cbcff54eb313290a13d83ed12b8b1e39026a0f4be328c5595a6384c12a3ba52b2308dee5ffec55ded5f13c1bd4a10bf23988701bb81ce54ed9a28c2363364e5211c9d079f825eca1c597609fa536b1002d1b352dffa6a23f17daa46bb395282c8eeb5dd34e1bbe20e58171d6afcb42ec2a7fee5e26e0f652afe228632e4d6e8fe16f34d8cd94e91679f986cd32c2489f841340190c136de218381ad02136150aed39fb1d1320b75babc29494fdcd1b8bfe88be3af0b7412f0e0021bf72de71ad10637917e99608eea0bc545e42e1e655e9869c13ee4e69a2d487d890475492aa83a10011104b1b9b2f57f78b0b5dad645d1e79490076b62dce6e56679aa694470f3b0df18cc7b1f017c25c00ff6a57c9d637708177d193a0b8704a05cbe1da209d6d0e8370000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300114e92ab3fa6a14d2ff05ce324d58107f76193dec79ed5b89f4fbc1c84a109e70030bee77ac91b04722f295fd43a6c777a989a7d69a5bcb1e462773d84e13a7c0e2170591c367a1b781e1b0bc36645e95957972733c58ff1f845720d0c46458b24420118d66f0abf228fb63cf23feda73e48cf3c56cd7950bdbe800b55f83079d4800000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017594ceb33ba92fe32d4b503093f44d7b4ffe01742d76ef82ce0bd1228c0447cf5e8b2b76cec8a34c57d6d3f2e92c77fdc7cdd91dc700cba32576c4e209fab615b0236aca96ef1f8f036338f3ea3f70dfc5d4576f9b4f92ad5e6e9403667bf6345c5d684a273f4b003919d2c99c4fe82ca167bcb5c2e55a7cda8039085a929cbfd15ae7019b7be118d301b03bce3a9742e13671a387aee93d7882c01a8ee4a9a68f06484fe09944844476d91b109da55f13b5b6c04b0b72d421b6b9119e03022b9f82e7c56a05382e1d041f0dffdf02e05248b915277e75ad8aa8bf10170a55f438b9a9b91c26ea2b24ffbd3a6f858eca4b0c259c070d419187726d17a5080451fc2b3cba935d3ceeb56458e7b8687e25ea2fcb75476c3ed2ba344fbb37206f0da425f50302804787461c28e4c2b94f1b7585f5048f4f993bde8cba466c2c6cf69332f5e793a8496df27b0762fb5d9327319040c4acb20964edea94080941a59674367cb02dd2ad98c8c621c8c1727231af758afdfce2e52ae3b552efe40f30f7fc8cdf3f9477a6147b1f68937d33ea718e48e7cf502b071b52fdc366aca4f2ee351b415af96523a05c0ed34bdd013a9fbd0ac291e2c53734547d50301c2205b0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001197242dcbf0b864a48aed126759996e0cb0f8aad133a4fded0ca959cbbbc9f4f030c5ee598002f4c5d7e94a98aeb40b87b79767b97d047a3faa3ceeb45bf29970020545a0aa8db2a086130a883d7be83bca005034496459965bb328a6daf0cded5249eac6d89a293ecd3f2728bfc467cbfb93acd1cc56b755a6af96d00ace2716e000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000862498dbb4a2c6ee0c61d553447b2bc698b3486531022b650e772b03721b749f9cdeaaaa933508faf395b665e1bf71a8bd668fd2ebdc0f5913126b7230e7400d2f53dc803750280427aaa980e83daa809b08597d2a01f267f5673531184ffaab6bb5bbfd59fa757cab7635ebf2a1befa2dac1387c24a3daee46423270b2e0cfc647326b192d326a092943e981ccca5d9f71eed373368483c00368b68aa6411972878f6c30edf6b35ca97bca875dbea7ad396b3c06b1c4918289b0e74ecc2ec1a10982f191bb05e324c7c3d5b25ac43cf8f0f4336685bc6000c54a37746a8b46890716d2f67a12ab99c12b7baf73b043ee66f72fcf514c05e9c8a33aafa41409fb7036e9fa5243f385f38fbc29aeb3e3d804c3dd108c70ccdc8056cc3b180d4c7855972ecb36b74b8007b095a6076edee74c84bcfcc07882cb10a091325ec62e0a18746fb8c8143fcd3f4f1f4a2e8a7d77a0785166cb41ea8f1ac0fe4af1297584abbd20a9125afc43a36441e444861b9520c9c615f7b06455b2f2f2161a61255def4d5337dac472f422c01ef77c81da73e457472ecd19d2046cc0a1e6ee514f5f5101338ee22c8415f6d4b9815827bcbf2adc778aeb2fdcb1f5d6339a7c44a4c0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010b7715fe406e271a51e1d74473ce9b0b879d383245461c4d7e0ad7ef55bf1622030ce30008b423b320db2225738888dc90767f48bbd82a8e3d8e31c4aebdd320b214f6985fa03b090eb8af6edcecfedfd003fb40b7b6ec8bb9b9f8fdf2b418427a196a21c58edc4a69165ad231627dc71ecfe42df1e2788ea48bee6c6cb08226160000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b6810adfed127c3f35e0d7459340deb07c459d40f5b5df301fb80ecc485f7932fdfcd7efdf5e3295265686bf34d35f13c4fad450c373f8585deb48c3ec3d5b1df5dd0d3367da44b06d9c35af39ca355dde1f64db0897df29cb20dfa9c118d311890701fe943d4d83f92adda967dd9c92239e0d2c0a69d1a889db08a1a8001d3acc4371f7f885c2ba06ed1ad5a9766d141b0ea47a3cc8f384311786c309edba16a239c53a70ace00b55dde00087cd32bf5f18e16a101a28c882e6eae42bb3f98d99b68753551e96ebb7cfc5711487b1ca2461a856d417b564b160be91d054a69f28ced458a27d5536e764164926fa8fa6cf82b7d6e704f4db4be1af469e2da2dee4e9dac9b89e40952ee7ab1c4affa8c77f777c29726d11e9533eb9d176aa341ad1482808e193670af448285659c7cd6d5fe0f3f5c8d4ad6bc820910977f8cae27c64ff104b4db770063097d848dfbf27a3fb3b9f80476510a7b3769772e78c5142f784c1df06029fa6b50c826a3f2664430fd892bd25aa1106301b2c47c401789481201458d81f058909977beff5ab887cc1879ed47f4ac925a1dcd9c23095350c6f851dcf9aab62a5db7b7e96408cb23298a9572a344b52d7a5fbcc148e8c00000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011f541f3071f45f8b7bbdca20ab010b07cf90edf09f8eb4a3f0c6c89d62e4034c030d5538e52e3b5f84e49552df8e9954f503a34b9abe027afd980eca314b98055b0fc4ed8d8871975c1bbea236b249eba0de727a66d344853848016e5548802b982d16b9fe20b66c4a7e51235d5635506409a09f814a43e5bbbfc778566ee35c04000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140f26a05bb2c63368e2458d36b8ae465217493eaf272acca28a58750257f2144c71358c34c523bf8682f38d132043f5998778e2beeb639873662bd20e5ff726e7d21549f0e6f6f23aa590c353e40f9f938fd67c27d3ece6ee1ea4806048995c78671b1d7e668665cd8b6c4d79abaa93f91dc5fdb2706e2aa386fbeae646a88fc203d4114dd179eb33dc93d1b412ac17d5f269d990df079af9323db1e9a337376b329f1d85f3408d005ca4e7c69a841383ed37bde7251c643b31a58133ec6942cd6344953ba1efccc5ce4bd5df362bc19db5926538e863c775436bf922eec6123ae596213de417503cd0e642406a457ccc661fb528703ce609dbe009a422a928f8050c9a6b87533941e2b517a61e476ea415c36802e2bd812f9869fc3e46112730530c16af40e4f2701a031b1d33449b95958802c69ce059d07db9b6dd7a1decc7f565dc6d915444d70c25ecb6f86506c274e8ad8b8262ffb14ef86bec98121a695173efc4a8be3c0a63a06edd8a531a247c4d212343dae5d77c90215635bcdc9562e822c9e525847a1ea83d4514f36756be680b27ec6bc7d7df4ed4b2e17c6072fb127a9cff806d2edacffac30ff1ebe95fce21f5dd85ecb5827abe1abaeca00000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011220414656ddb77c66bd86b2eca3586f3c6b3dcc957ed22cc639ef373a0224df030e4b2e229c5aa62d5cbcb2c1b6dca6248dfe01e08b8a857532bafb76e059819413c5c618cdd31bd0102f5dd48be2ca5e676d1926e13baf2545435c40900be7660139f9acc9f803c6a89b856d0f01b0000f59d8e5c0b4e2797afa6bf846e093170000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001936b9ca3644eeec57bad07a8fe8a7f58fd82197c4cfcb69ae09b0855ca7ef7eec2ef9dbcb83f8623bc134deac987a46e250e759ddecbc94e36316f5d5797f677ecc3476d3e9b4da63bcbabc176c0e7c4948c6863cfeafb993a5f66df5a4351faf9dd8cb8b3f01da852fec7c9681191c719d635736d6f79b28a15a7b1c6e1edf7cd4cfe0c0e92657db24b14ca7af803d6acff6e01e22e92d49e3ded5a0edc01a69b93df4400de33922d7491fd500b315c1121004f387f6ec7568f056c50c1981a3ea77e5718a9e89f8edfdbbab5ab1b90c4b5c8660291e8208b2e69b3b5c27d3a6b3126cb6c48b20252eac3b9a513989e05c65de9bc563de86723ae97b60b18c3ab4462947bc6b00e427f576359509026f331830dd0e748e6d5614429a43aa47ffa6a220dcd36f7db5ffd0d24b0dfb18b6f0d4c9f807387010ab7ed08edb76f02c3b82015e05963465e8857e455cf2f3dce2147fce4850486d2140c3012c808211a50a194dfc330fe8984df5f2ffe24847fdbecafee10dea3d7f5b2f15b6892cfa027f5e8719f7368a81a36b1c1b4a9fefc30135b5740168b17f3f81d651271170ea6d4d75c5af9420a6777052d9b6ce147fd4cef01024d08553b50013de29770000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011fe3f86e600f032f7159f57a3daa2909b63371e860896b5604ac4fd09c426d9a030f34b15ae1eb1b5b938bcdf5e2e46731235a75db0984eb4c38a4c4c1b1e6fbea29f2d14acdc695044eca4343ee26f59cc9623ab763ea49e1daa899d315349ff9144aeda4fbe19745348a2570d45fc44de845355ed492f33ad8845862c01dbec8000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8443ab363c27f47491a8889c42574010f8007dd6fd566f924dfc801747c728e6c56030b6fe67e0fa616bac9d7f355386e4c7955d89d2a9acb74ce2f26127a9f97e9e3982def9261b2769f46e271bf2158b4c9eaaa8bc9d6e6f0ce75f7fb2c23ce2183e968b5a69d6bfca48825be633f3425b0e33a7f6ff1d820333c009547c39638a71d812d8bcb440d833e308f66771bc3da8d0d9e6f77b2c8f5764bfe697f9106c27fe0e78df3b5a8dc315c208fc6bbf6010386b57b30325be08fd2e7af9f9a2c3c4d945ac7328448fd349c60656861d497e0f3e5ae8b6f4d63b62f4bcf5f0440840a3912c42cb80750fdb33db8bff2fe8cb42286028294c076c19f5a5a77b6595136b00a9e44eebdd509f1efdb4f0e4785444cf5422542ce51b994e34b69cef9a17d4f5de5e702e9dbc33437c329330644b29cbf5f93b088b59334d66e71e10d5cf2d6893c88c79a9a29b1c34d19b7e3ed5a870ce64ce4fb8f278f78215bfbb7402e4bb574d111354fadb38445cf1ffa3f011a27eb186135f9115204aacffb7c20ac68f8c301a01efcd0a557a4844a1a08b99be3884571dcdbdc2b985ab33459ebbbdaa6e3a8e287efa70e8f11f3f2a7f18b75c4ab8a3966f681f0e39b960000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010281b2431a5a591560a37e2e2eb6f6407724524f3f963ee835f4c904cca771d8030fe9cdc7b310d795882d210c3dafa42890c5159f0da9e5d46f2db5977b2df0ce10e5811ad1202c622bd1fcb1b4ceefdb9d0f2131da5f1b8cc2bfe090c3644dcd20677e42a4e9a2ffadf63b22927705636873b11457070fc635d755e46f6fd4bb0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c5f697122120acbc80daf1440427ee29a11549e7da6edccdc95a1f8323387bac9f0d50dab68fadd8e05898aca2588cf8a155ee5b253856e94b5773019004d13f2d58e4984e5af9513a37f31cab103f707786d86bff9cae58b24ed585c5d33287f1740ad85f020c4411f4b5dfc602f09171df4b183f396a8c1fbfb5910f277241729d726786ddb58048205683bab2ba403f0bbf199e66501bc402c1a3cbfe21aa01598b196b82d3d3335fbadb51f284348214f9589eb43f9ee48f811511d7dfadf49cae614de8ae88c0bf15894a07a3216c6d914c3314694521f589af4c75f39191beeb6aa2016343c6adb393d89565c0c35b641be6a2611d39a834b0968ef91f72e309e2504c00df673a63dacf8a9a0c3a8c69f921b4bf5c1658ae33c7172a639cb96f05148a1c17f9f51a90bc2ff353696b4ce39e29d9043e39c8f7c962e249ad3aa14afcdbda75c16414f4fec93ea30c73d4cb81fa3e32bfd8fcc72359f27f829f7acbda48efd68bd19dd1c54d6d55947509a15d1ade5d6a14b2069447c6c7a28c91a71bbc893af9fa60d72a15997f8b41409ace2ad0a7a34b4b08efdc2b6c5b006309ca1fa7f870b92f1ae3c9fdaf92b8ead5c1d7c442ef4b9d3a57fa9220000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010bd2205d45ec1e19de11be05c2c2626a3f0ed9d9f16a3b93a496d62f7afca3be0310b0a85600ebbf17e9418fb9f14d4ce63743b6840237a9f1acf0b9b162c596092bfd5a35a235c0ba1fe030f44ba56faca5bd83aeca2118c2b90e456303d2574a1a70d8e377d0e420770ea0566de12e0c53f2e1f7831bd1de967b4a329b24dcbb0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ecb7bc348b4d3f00f42e1efc5557bf636d9fd43e9bdcdebeee04cee33edde2735a2e0a1aa827d3dd96c1b70fa0050e0c23811c2bdf53fc3a1b4144cf5525aaa433e4062957c352f083b6af402b01f1e77ff6fa205df249bacb5666d37add9332cc887d5b33152f2c3d43b23a1e9e7b70d225b43771784dd9645389dbcaf6c390a8abab5e72a920ec5f8466cb5aa59862429ccb1ee191da9d290c535abad0b01b18cf3e701d5c025db29256546f86bef80344c3db1192551c7bd218308884a19efe1b8c6793e2bbc47d7ab013a03aba5395f810252da6f0730e0548ce3301bf0b07eebc364e2afbe9a157d1370e25e6ae2b8fec91384e9a9b893559c92566d969652d4365c6bdd0cdf5be7fe211399d071290f77408ae812f0eb8170c1a0ba20b6c7075da6f6ed18a2a55447f7b542353f31269c9df4900362ebd009d8b629da419ac09eb7a35ff3e3555d604de774a626082627e615bea064fbda18cd737350fed8d2f9c55ffd1864ba6800f0ef746dde5bc5d8acf1a9ebbdcb74880ac215822ee080d00671d9e6b1ac819873213d78b434e81f40f2d9a9229c290a6470c5a4cf52ddd8701946fd004480dc5e48415508a011225d413f84a4ab816c5b6d1a570000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300124e933a943cd5820cbaec4cd0109918595dae2aed7044388885a96259fd24acd0312b126d5642a08d99bf1fd20d819a0e38d3261aa993db7f4bff6d2e4ead1254713ff3b7cfbf63be4b50542843dc0ed2f9999e7a2b7b8b78f51dfd80bc7da014c2a327617ff791fff164a828e9b8c13a37b0ea928f9cc550b216177d34d9738b50000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000365a57ad5ac9b92908ac6bd1e724e63a71d255ff22f54679e25155f3148f87f2bea1924782db74fa4ea68720d565a5eed381aafc5966fe207fd1eb5b6619d5f8c4b3afbdf3bd1a6926c59c0279c13c17f07435e4da84a5bd8a584746ae6c1e86071aafb7f737bfcf378c6088651ef6bd1eea3c21f26024732e9540b6e4773076f62201a37ea7213f64dc0c35524f76085ef0be1713c9b2b10c2034d57cdd805c59844943dd9586e943dd4837efa6059ac81a51e5b932987145bd27c5dbd2ba2789421c5023edf4bfd11668a02d66a41ab1f2320efc503a06a255c5d01ea99394f296a24fa13bc44a22a7d0c0d0bb17f89ada004150e825e9b0161bb37f292e841128c9b9aec50d154fdb18f9a6ff72ce016e6c9e469a29c994322a0ef5d9c8be5570785fec9819932d809e54f4b0e4b9c7d8858fdcf76e2833b4808cc67a1dc798cf2cba00892099091d7cd318d7e91414adfeac51043448e86ef28c1d613f23e55c09d9dd0c7b11768e348af960241123bf5dfd49122a9ea46d7bf094354cc2391d1a51fa0cc38654112f7e86d78ec099f618c63ac05359e9a136ec973a4094ada9e5ad4c5193547146463749e29ca11357fea3b2919bf6bc4c5315e1c3c460000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300124001a24b32156d057ef88e9157ca9d61185ae4fead72bfc815bbf33b46eb5700316158b70e565752e54eea3bfae3bd40b2d9d0c4c8da4388f400c89978b56c442162e86f780b10a0cf4a963f052a2f6062c064419113223aac557207e88699c8a2226aa0e792b4572a7a84bca798fefea2a952487ae6f89dc001efa5831f120aa000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000145ca3a0e1534e2a793a765cb6cf72782f5e1e8d05f8fe3faa843cce22b4db326db6d96c7a470d0f7f600cfda272c26ff28282614a9ff6e41b90848a7c29865772362b5c01dcbd2ec749727f6bc77ced0572fee3fe3311a0ae570dcf6911aeec523d771ccd8749cc920c80163f50f75c3ed5dfb909f03add9ac9895e959c12f364d5f0d09cca6f9ea375fe838897cb63aad9a22d95f0fdf1898e75aa93fe8067d7e54aa7a6012d3911cbefd3cb0fcbc28bdf00a1b3a72d17a85dbd1b09505dfa3a539c0ec9b69300bb51949e836c7a3e02ab479837310a8d744d637228844bf19022c5f8de5903e5ca152fb3d8d8ec5082de9005e5dbbeecad04198aa600d4d031d487735c936020c1935b3426bc8348d4f733e5ce142b62971582dd32a82cb8e45331b962ffcc6effa31193a9a6021114cad8013ede3f2c4ea6a1cfc14565697eac78238e75f43655d27cdcdb567e0e17976899cf817bfec5bc309892976880c99faf3b6eb20383cea32917344d7faea44eed434780f810d528f496a912fe702492d8cb3a885f29fd458eb7999588c59bb0ba48407ce42e6b05a500bd61164ddb1d90b83e62bba9958f4043a2b4907b3ea12aac76b00f0171b609cda62d86bd0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010d7e346a8b09656e801b2ecd17906de7312c68973dd8486b6f0deeeaed5ebbfe0316610d016ad0d07b42bbb94308d74c78faf85d07e47bd01de2656a93466540f300443a478f313d1da6bfeccac585037534476fef3bf7fd93603e74749d2f411a2a79a49c1c6784da277583b54d0c19185445d07009ad89d22020aaa11f1d3983000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000193d0c5148ee45715cc7d8d115875043b79880aeb9d1fdae740c1e19c2da1b24e798b242d6599235b08df44659f052f38664b29fafc413e0e4e2553513028e9687018b5696271638a910bb6cb7a6a3838b38081ae39a4e32ea02951676a723916c58afd3f4fb82b7d631a0f0bb4caa2108adefd1229efe583467aca5d1cc4829c58ae733824716ea31bd3414bb64fdc37c778a7262c817361689187e0ababcd74b2981213f7e2939b401c52b4ab4ede1e5a7cddbb4905f04b8261ea9eaa57e13503fcb1475ae3c7e5ba8968a1efd417eb787ca15ac9cac5ae910619f1ba94b84770bd9e6ff07676ff8ce59f9e6fb4ce8bf3c16a1f0e5465141c783563c8b5edf016ac9a730bb0fb8e955c1177cbeb45c026aa46b26ee50ea572c347ae98144807f27253323e9fe564b6af9e7f21e3d30a5cf14912071ead53a5e00aa6d85dcce6d43069376fd88e3bed45d7a9571eacb7ad7ee8dc050d0844e6ed10310e1da5924730e863b45e864a96a96c0d520d349054a85888e274ea4a8e5d96bf9036da58dfad49990a8695d5259fdd19fd1fe7ed26783e1ca1aeb656b35170b4c62ad64cbf363b8f41ea8bc9c163c8ac56ad19e82e90010f117a82d07d092efbc48f64a0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300102fc7d21941a65ce56605c7217173e51e16fecdff5c8839250848af8919d2d390318a49461cfc468aba89c45713ccb3212e81440056535eeb61857d623f6bed14118983a78dff55c24e697929050a6d6c7b8c761b9db63f9280e2c9366315e5d62233fdafc8874c15a38b65d2cc5d3c3b38ed4b999e7a9f321aa8105a4a5ea401100000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086b720917c5bec433d930c991fabdedc53b0a58bcccf09f978049a58e90a04d7801e268067b50091c43bdf876409637128f22d84fc6ae3688364a14f3ac01ae2153b3d6fe522d34841a315641744abb65f1d7ccfc052380e984e0496b5ab92d8f1a4fec9ac36539cd68f1fb95af51b4b7bcb618bf5550aa6b4ce9e5fe8cf35e4e09ae66f3d64facdc589c0ae51e1373938894351de2d8f3fb04de87715a560ccbbfdab81714a6bbde06c7ae9f9771fa56b94ab77c4f822aacbbdf8ad5d9fb4361f2b9cb82a189d5a44fb5cd4a2a2a52fbcf8190720d278c11c528b1405f1cbdf07c633c765a835540e2c11ad53e1e8f6b1e2229be32e775a6ccadd7ecc726acec1f9581d136286426d735cd833fbacf10e0c51df679b38d2e9daf71e2c4533e7e9e231e29d708a41996535d682715e47f3013d377cb0a93cf5e8083a870419f4273df82fb462d06a767ac96df468c186af1758b64f54011a93ae44879427d57f91c5bf810c5352dcedd113a3520e1c0fc4420ac0a0ff1bdf3052fbc9ce75a1ed1214a00f6800693603059c2267cf476b54c0f37d61bbbce734af46e715abb3267ea4b4ce380bf8d85c2032e6624f13e0e9079d835f60b5426dca23579dd46e820000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300120540283641deb49a113976ddaa5f246d0244240fdb5ddc1ac29dbd716901dd1031942ed792dfb5fcaecc5d6991a41873138ca3887d5d4c6f84d35f42edc1816762b119f229da9d6292320971adcc08b4e614138889c0ab577a2b7ec3fdc4038cd27231106ae0fa9b36a49ebef7b82ccc587e19354a69b859958b2e2ca7d635ac5000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a709b7972833ad3dc58a67f7cc5bece1f25117ac11aa68ce1bf9d8aebd1942a9406d014d61fc97a556c3df4eec88f2480b18f1ef42b827e08e49ec7ef6bf076e3cb530c0276934f2df4376092d626e5bbb5b3849184b4394fdd27528e0cb6be7d9da8ae19c8da7ebebecab54260306b99ed1670459a4df6cd0b9e277597df98b8d7efd79da25d1d7b1e25309259ddad14269013697714534a7d981445419979b2e1a7206802809258250020a89ab9d8febfeaaf2b1a865447a614c2cc41aa1f789ab123a81a6099d16de6b1b44de6c9007f87b827381ac88adb92ec35baee9fe77abdf0ca2f21612b0a15d1d94ba03c547ff02c88fd2375bca61989b579326b26019b2279162f543e1983fd10f3607bd1aa0fb36d38d616cbf0a32ebbe9dfb97a314488419b30528953bbfd6f632630112b80dfc35f40c7036a1f4b394182840f6871b14f11551bf7d67793dc3b2bd4bce8c5cc437f19b2abf7c5cb5ed1265de7c90645fb818eab3dde35527dee23b7faa7d987a82ff713f6951933c102e40145e54d9e1a8cdc640a93239c947c73eb89e43791a495c2c393d06523e115de680051cdbf626df7da80c71013a74a236774fe0fefd528fe441674f7fb8d1d8b35d0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300118906e93a201b559d06678f1a88c93ce55a5a8b413b8b9c4d77666bb9b588736031be3ec9be21e5d6d2bb977f2cdc80926dbff42597f1be5b2b8851d181b21f99b106bd1011080d9273ecca65210f26fed27fd0b57897b089511525d521209ac010f4609e3b6cd9cc519f419fe657b1b31e138f2defe98ed5b6b3cf76d56ff879c00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024993bec606976a29fb8da66f7dba95b7b8b0091cfe05e7f22fde7a8ec8662b6dbc9964cec8f4c9e9c247d671e8a5ae3eaf22ea7e90b9ad80f5d2d7c0abd543c2673f125121fb10c5d63fac0318f2b89f028d087bdb62684e6410707600a48a72a54caaadcb7076f95349ac242a2f67a169a615d024d1eadcd0567ff4587ffaaec63ff8226601012bd1c3be725bff57e7651f191669ed297ce47fc53ac70e79c1a6b99b430fdb6c6f28ee76fbf52cf2db209e1cdc50c86aee3f07015fd430045fb0258022ad2355b7140519364091d864b395f1007c5468fd2a679395661d3566c9bffea78006c25e1d5a007cfab60ad1eadc6aa76b1fcd4e4cdc70e20ff9ae8f1fba8f802db00604c1cd93260b30442e62e6692de982ce1ef69056962945005e426b63d2904cb732eb60920977ca2e3641a48ae29a558242beb51c6f3c445e248b1369a53a789cd41df30df0dba0b32d9972000bef81dedd09c8965c8dd0bb9e0721c24b367d3ee740925f4b7ccbb8458ed29ae770d74d4de1a2e97fc0f8e0a2d2cb95768d9abcd0d458033f080dc9e5a1889c69aa4ee86dd0bf7d066e48b11d9296788370d79fc97edcbb8cf659a235fd1e32610a4b06fa60d9e5c20dea5e80000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001060d8e551ae8a540a5fd694b2a67dd0f0d1b5f5d83be5a0a4230701d9927101c031dec683c13a9829c3cae92b54ce8f0d05711862d0596527586ded0668fdc59d3214d2277c843e584d38152b5172e94e697ec30d84c2529307c5a6ce55ee598211b6c25ce976d84341190653fa715e71d7bb1a1d006ba3b43f23f8dc0d3133b0200000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096deb4478f8860f4436960c808189dbb8e451ef400725bc5db0d5b021c003a8284a563df1cd07024bad75915ea284e3cdf3cdb26eec394fd825c9acc954fb19f89d813d4e5a2b87887622dbfd029c53ae70378c0a73f2559c565ebf68bd9e6e972ebfac562057798b1feb100e330ddf4f3112eac5b335f71b7de7c0acaed139ea4600b3a3bc0b4ec7b535d5321d5eb670f88f77065662d51427b4379ed04dc7a041ccd7af266e22d25e52851e64f0695fcf09b3998331adda8b88fb37002ee5a342fd466e73e63b6b0f91a7cf7bc97739e29d0f31ead2e02971867b05af6b1417e87b16d4ba97110ba1f15c48bbcbe46ca1cfc3288c789f4608763fc718b7a96e166fa05689dc2e6ef3f34e5db8d59ee2031dc1bc90d1ba0bc81320a32dd5fa70618160fc3cc3ac7e40481a9b3e32012fa6b24ec2795c96bf130bd97f35a581eb486bf70628fd1c7b4fc1cf224e177b7de3cad4f4e802f6f7c3629a0456b9ce1ff0d5b4a6f829be565901d72cf8adeccf3d75b18ced6bdcc6206c0b03b703ecbb2924977eaf2ce9bd0052c639f63c4646f5bc5e2dbebbc266d996e5674bb2e9600833329508cf786b3d154c63028bfa3f178b708f46980e6824058e10b4d4afa0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011ee33764255f1773e7ef6bbd60c9d09b376486a25c715b4c2cfa7659553ebe6303209d68c46565274d370053b63d2846db5e5d1c22176d62682170b056128185d0186330a3cc5ad9031300b25861c2a7a2e37c8d2db7952531b07ce9de0ab2192c023d20836dd6e301c8bcf72fc2e783265f3305312ed11dd5502d994671ee54440000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b53279813a7e8459ef6c50b080e1fd35d93ac8c777995a334b14f8603594e6e1422c15f1f6fb4d7aacb54b857fd5b13dcd63834e942fbb6d122be4dd4aa85d3f9b2b2059f33e64292d7736aca016ad48f9fa201e441484da68476e075cefa677e3422d22566af066749541c67dad89844fa708dd13d1ec26b01a9202413a7bf5e91ee34476089f247f9a665a352da858d20eff7dc3ffd98cce7275f5be6977470081b8001c2d84142c27e895868107434989b30f97186ef22802da3c6ae2f9b44a6610b2ca034eae619a96299f42efb25a7d0aa35f3b253047c8bc7952c4e3abcd1d29c59dacba9de95bb53ee6ca45aa969c189337db6fa37785c25273a8bb7799b7380a2dda8f0e6b11799d93e35909cfb79a600c6cdd94c1d10fa9c76fb06915e678afa652ad70c9ca8cf190ada33bdf83bce7163f2f5228fe6158c0af479d828bfcfdf599eefddeee76d9f3df6799e9a45471f23c9c73eda8b883e6f1833a36189b0f6acfde07242c5e8532c72684699dcfc38cdce086573f06548e818e573bfeb3d06a06f297a0b659103b7f43add957dd69e1e94a73cd8b38bcfb8dc662f708e8e04295d1f42eb5132e077aaf3ed204dbbe6ab42af4afff7a9e79975570000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001112d01224132e7632ff329c0398dfcdc2ce578bc29ce2f4b25454d827ff1ed2403211d19139c48c63c6926ad47a7df054c7b21773baf9bdfbdba2bdefb4f79c2892f06da3e1c67f11e9f88904c1bea0bf22af5c03522c2e8dde6fcbf8816f8b760227396fbd371850af0596a3bb7a3101b988bf735c453b80cca943d6945bceea300000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096771c33333dd1fe8adf6a3e0f58c34249a3641c8624b89e96b2d0aab8b6e6a82eaaaea26112d08ce1893d9d870c7ea415872d1efd8ab2287a5743fc5b868b365380cc21006b42ad9c240fb827b2cd7c55d4d670105da2dca5afcee4bebd140b42c9ffee4689fbfa35a5a6d65e96182960fed476b1eaef1b8d061a1f5c83a5835150b3d77bbd955cfdb53f7d38d1bd7feb05e04c2d97352038cd1006d794020cefb7d22cb8f6359ab378a6b268ee17b654738c9337767f544b5809d51c3fdb638692effdb1087b20f70224d79d7a9bd43ed7ab175852713b0ca09010304fcfd1efc517627f0f3c83cedb4e3b9d54180489198b14ce64ca6fa804bd944bd869b862151bc6fdc73af1a5785626f189316a9be7a9852960763362e3859dbcc397ad69f46fb5195b4b0acc88c9beb62d10b028549b16e3f5cadb2da15e9292b78998e5de867b60fc7681f657e456f59dbd238b5e22bb331c84dc7e04fdbdcc113e17313bfbbbe472e6cd58d8a439c51c3bea6a5df358614213554cd20e22437927b2ba65af424b07b4aeaf783e3e65f9c6f67780a550d9c2242737f167240a58a7dd970be654250249f8e822a34588b48e1676dcee89e48ac9eb0f41e4599f74b72d0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012576640cba64deea8d0c5db3c023bd7981c905d6431f93b428823fe2b3ba26e20321b1ee590ff28f9ca086c7f646aa3d8922cedaabcaa056e73b3b596e8f706959251c062825d4c914bcda90aad76a11c9f1e2a98bba42174af8bcc2dd551f3e3c17614933df0c570963c4dfaa014c94bbcbf817f2c211851e937dd49387a3ec8a000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aed9d184ae94b8297fce340c30b4b39b819d6bc896017b7e6297b1f86a976f47c28c41bd88bbce670ad4b7b077485308bcffa6dc752c72aee07848dcb51a4565bdeaea76149c8469e890d5ae282ea77d50a6cef5292cbe01567e20f8271d9eb7129a867fb3fc1f9dcb83a45e2166a3ea4bb0f36c0d25ec9aa7d0e08dfd8ffcb9d04543c50bbc5f5ee69b209ae0a7feb7468cc3eac718773940118d5cef5233023d3afac99284a7daa09b5d833ff7b1ef7d97a05d1a2121e3dde9913624418aabf0cb56f97d6550b98fe4facef29989d77cca705bb2a884e8172a021e09dfaf29b885422048c2aa2ac8be17b40185a596aa5bd94dacce41b346cfdab2d34e8bb3a25a2940f30b1d0fbe843f6135f32f887a1f64a7299fbf15a5c3113d3c696d40af2eb6ac4fe6275a5b9b4db46ba2278cae49316cf696d19f6219602f6f7f3a8c83fdf32c954bf8b5c2e973828a8095fa07c2a700444a75ddebd8b91cc4d8f9215b009318e085ddb01925bd28fe6a4218290d0e5de14efb5e2cbe76a72516ffe1b274912f42814b013eb4c4aace375a448a8ac8e074117ff6c682f4b9ec09e9799979388c69d9b91383836d1962e7cc530eb19165064c9407a09ffbbb0f7e67620000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300112a714eccdcb9488f3c6bbbd4a4cf6df784851e49f45c8547d5f66ee51974a7f03222d6b7cae5e803797c457ab8beae6e2ec4e331ab153812182fd53addc8247750b466101921d266b6a9157c079a2b3303d67696f51f96674da78367dc48d695d017cdeadd0d72fff3631d0d700b4e59b4a488844e91b07904addd865f8c9b4240000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c4eeff0ce77eaf13d884c028dfcbb504ca3cd4d4ce9330604635e841efaf55c597359294bd9f21de409d65da4e679f131ac03cc3b441bf297eea56f9c9e8f4796bed101ce0d24c5ae5dba2f455fd3af0190d6619f5d29718301f432ce1f691e71dfe066575fec9b94647fc2fd050b7f12f59306d8797550ace066525420c4dc32ae623d3a18c5aae3157797765b6018059685ac318f4457899f5f7b7ad3831be082b90307c97ff1fce74da0105f2a26e094c1bf9bc7e7ab2b8c0f34b0f14c1ad407b75d50d548c44e92909f75b63d34dbcdc91ae5d468c84eb4cfea18a2366e7f97dfbe6ef51ebc50d23ff046af3184a8fcd365bcbb1566115958994a16f8c84c1e20900dbda0ad8a01dc2c367c168f3b61319c9bb32ab979ae94aea03d3ef85e770f93d53656971515b34a2694fe58572ea7205be66603303bef6acd85e1a490ce4b9ae53a25c4ea8a15cacb965dfa3fd69843e0d63b4cf503459ec515585d9dd16dd679bed654a9bb403d8f55ecd4ce75a9d835f462462d16fe3fac062b432076952cd8360df99362b05cb5e29e5845319ceaa167190697ddcf8cc49ab32d946fd500947285ba83274e8cd10145de9ac400223cae4bbb8dcedcc6c13325880000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012ca9d2e94f821b331aec5969a08c47daf7624caf8cf1774510a8486e793e435503238df152c8a250c70e58ee94e821d4838cc298a2bc0892c4b54d878bd96aeff90bf5fd3d16996cde918cb07cb00088a4612e59a29a11d9f37765c892365c5b360af02a9459e6f435bd4f6cc026900883008c666614f4e4b1fde33db1f649630d000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087c63c735bdbf230d9c808e5020e24d6eaf676a9211c85629c6a81503d096e37e82d0df6acd63b3dca490afa306cbe35836dd7e805c1693b3f83e248e5eb0ec6d876adcbc0fb769e28a2e7ea553cd9acede4ed9f5933821b113a072b6657a89f997545a684c86d9a3dab20ee6d7b21c6d3af03a1592bd1a3490eb8123245f915e784c202e3f90b4ce8deef3aa3395ee41fef9eca3909f9954d4b3cfd05c32f33dfe430c2a19005ea90c425a6a44419bbd7b938d9e5a88839167420060c982e85a7b4558f05bc5a644b486aa5e43f7516821b01ed95400c48a44522e6109272d0dcd1f8529d3c2c9e72d2bf51e706a951c97636d9f02363bb5adc0ac7f00d606cd2f5311fbec419e65273a8023fe4f6275c127d55dd02a7fb4ad5161463151049eceb73127619446b98c0a42e62347249816d74362215bac7aa015decdcd2a8241ecf254a080114a6dbd172a67f08bbf7183103792b06551c1c94ab817d2cf10956a27c4273427cd48ed97a0a97cc52fa3268ff72c4f6631a82c02839fde5aefb9218f96db5b09cdc132196b368d196e5ec1e265145b13accf6382e4f770f1ca4b9c55c0ee039c98a5c302692de40b3219cee834d730361f3b375d395120f73f0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300129e987749fc6f6c048eeb86b40525a8993cc4a51323852ede4d60473f060a977032400452813b0fe3313ac17504f53caa28f25af4616fec748ce65045adb5a27302fbb3a4264a3dcf245b3be149fa189cc89789f7e6e2873838d5fd2afc98f75be1b2607b73d781e3a47dc66efc26704f3ca145bb53051573e51ab809d2e7a4cbf00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093c3d8f5cfcce3e84bb8b9c5d12e526428b30634db2dcc8ca452c7989cf663dc41ee2c3b060386ada59ad8a2c5a8a054464c71ecf081a5645b1572d266e982ad57320f938ac1023193e7b31f0903b96ef02724b16a31314eff3e141c10ca6e607579221d59503a18956d9599f67c7a4666fc3a9b9d0b660f6664ab49e4fc12e648c7fe1384895067db3dad9dbea13849a15d91c9bb738b1949c779bb6bb8114c3651cf5565d417fb4239b85cf2bb7dbcf8cb7da07206b2a566d9ca0f8308e8b382d3b3cc8fbbb60ef9a62d53caa1128f613863f4e88c7afaa57454f8779ac931d9681485f59da3637fb4b6a74b42f4333bdac7ab80455e7d8659d81286e8863d62a37926d364e249a8bfb4f8ac7945350531734a1963abd51dcf2569299d123104857684ab70811f78e920c3d3bd523c1d86d67b7b0df9e1139f0005dc5f79fdecd148ffebe30150f5dec68a6d3d1a8fe3ad371b838e34cf3aea0c20ab13a28021d55915f51951e263057d97a9ad0664c02de9624ecaf4350f2aa5b8effdd61c5b76e141aaba289f038557cd6be2c8e0ba7a838fcd7a479a17b230f4d16d9d29fc96343fa6185e9347d64ed72e7e1a3f9f326effecfa735e2c22a837e1f18bd80000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730010c7a933f8ab43c1776d2cb7a4cac3eedd97be070314d5f1d977888d8be99ca4a0326227f91045568571eea035813ede0226904ffaa2ceff0dc2481adb325542fed16f4a70d137de4213ac4e53f9456fbbee7de13279bf85e61f1df31c22f6baa6f0526db08236acdb076f284b1cc0af155b9200441b653b6c6e4daa8b86fa8de62000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152bf9666f6c9867c05c5a113bcf7f2fe43429a3ba193dfab28fdba76aa6dcb6c5e18fd446fce9f9a2ea26d533c25b12736bf3694d5125d9e4c0f59cf2b19c829c2ff5ce9381cd045fdf27cb0c1d083eb8a46d19271981d889a3e1f107af26ca1f4b48b3a833f7c3e1978422395ccaa3e121cdbfdc64f7db2201ec54dafa63f74bca180c3cf17ca47b206128679a6be1c331110a8a9dfd1fa47d9aee8e021361d8c177a352640442f194d20f49468e77d39d4d49f522a4f9500aec3c9f33e59a6ab9735147b0d64aadeaddb5e89d4b71699628988213339e609e2a1b69274ea5931eb35941f18b474d165df44a8c47f4f274616e8ec43c43885c934c1ce63819c737b9d9cbc566f64d8242f2666ad2036c11854a0e785d3bc00c52d9b1133a924f68d09c85cf7a424dd4b9e08f89aae7b2f8bc17a2a8057706601c96865e9aa968fbcc320825196aac82452301ee44b5a155f5e460737af943ef5f91c62e2622926ec6b19506eb1f3533e7c36414073f3688bef61e10b828969392ed7500fb87037c93df0393842ab08c4d8b1989cd3f2ef32221ccc6a3b4b0ba7f913198f7d4b994cbffe4d39cddfe0a4708703c9956ba4546b2c506d562386cafa07774f8060000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012279653b0b842018a7bab2f594cb7967d18c2a787aea303b5ff8bf6e1aa4c5fb0326e4e78f7e6c247af3a138a0d5f71e5a23eae302599d030c9058f6bd186ab2e81e1e6f911744d2738568b7c91654773f04a3bb43f1a1d48e1d32b74a08915ede0c2e963391e38725311287f08b4ea7df38eae313e1aa184926776646bc277d56000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000872540118163afb61157b461c735bd619de82378bb9242fda61b1230009662b25ac5a36d7d145f45daf37bbbc1c635a063e1f4363ced5ff53d48ecb4aa06874dc612ed91aa7f9f2587a15119b6dfa2f52fdcd7eefaf59f18088afa2157fc65d91edf8d1d008aacb8aeff05d5dde4fe345fd8425c1c8d351f3e3066dbf6c228cc2fe243ef37a931132a3838587890f46165018af0726af67d1f4a8a2f66285ee346b954fc97ac1de8261fdaee1d52928fa5ea71c2d0bd6286eae30e6a113c0210560692b1ba19638a8857b040d767d27a049a0e7b128d3542ff25c77e3e8cc5c1c633764f5ce460846db28ded458c5db09f62e79d8ab61a30f7a482d67dc59a65dbcb89af796297996a2cf2f4809267248bb90d1432705b675a212e429e32db15af4e203e39b8c13caa8df82406eb690f32a0c1c830570ddda13efb12c376f9af7d756047a2f1e7a4d953da37e6f2d303f716f9d6c1f51c5d5258798a94e1b1dac011d4efd59fd611b412f70be45d6100889b5e23a102a167179dd53ceae0a8e617263bcdb9d6f00426dc0f6722ccc64df778a6d99eb7c41912ff8370b2ba12fca8e237a671579966d6a57c2a6bb0345dbd42132adf96d37cd753a053c034eaf90000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001070682ee43f46786173dbeb87f20a49da763ec7fed9da424a50072d1f8aca9570327e072dea8185ac6ab0854fc01228eb80b570c362cc6668aad069fdc179115250dfa13186075240549e3790087f3bdc4d63520c2bcf336bb5540eeab1cdef45d20874237843e14af94fd07cc4ad6f6aaa5bd458947f97d75550dcf2f14c18075000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000863df1323e7fd9ef1b983e61a4f1798840001c4ef08fc283b3732d8e5d9647b49b613de07fb7bb9276bc8a82541dffdd3bde9ed83058671e66b71e5c76f0d1faa465926495a6b2221234ee7cb361319f2b565a0dc2fa6c449cf4e627fad17776abe262bbbef8de7471a25c2499f2126226e4e7c7147bca6d6022811735d247759c77f5bdd7dbcaf1bf5a2f3fc5f609c08ddb6ee11b0ca231b8cbe1ce000352e02c6c34a87cecaf062054e3fef4fadec37e73370368f4951551d4c23280677465e6b439084092cd27fe2e22bb8470ffee71a5712d626e3008bb008709ffe84607808bc07a88439ffe2a408a8be6edbf4af6004458ffbb82b9bbade5d73ff75e3ca563ff9a1edf86ce723e3a3c7e1e50f018a1ea224f039762ac1f4d2e6a46ceb2cc06a79f476c8c12309e6168bb2fab9988ff698c251ca1c12a1d89e8f91fd99060686e3eeda0e8789c4af651b2c90a3012ed50766caf15d7081b805b3d24e6f2db232dcc4eecc32e057145025bbf75d7d15f446394e9e6b6a31269404bf189c78471a2504e358cdcd7430e8f27122aedb6dc98328e5d2376a9e370a2d980eec10a5128015bc635af93ea006d0ba69f1d76e4bd89b199d445418bdb11f099ea010000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300106fd7a22ed5aaffcd04efccbb6c88f83c75d83c40379416be82651dacc9f71ec03291f077c9bca3769969bae2945553cb61f7fd9e567e1bf284b49674baf9c0afe112971fc6f6f6109a9205653d1d38b97d373a3ffe6eef58b40bb48b5696d182a15e62f370b71c63b868dc4d642f8c09d719cd53c45be1206b16e1c3b571579a3000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000133cc573b73cfb63c75670cfe133f24ae99aa51f76a79bb0fa923d06efa2dc601e1ef809a064980827933a62e8731885d2eb5c10b8a7532f9f442aa3d17823ccbeaaae854368bcbba36b47c527e501dc1692df6e55f00882249a6bdaa79d9c28b9cfa8810bc33355ea4adef06e47d25d61c75dd958ec3b9ada5dc3a36a519aafbd6f51cf8f5eaf7ae4f4f449c5df37d3798162f45e7173c348d01f5770856db8af755f10985a1cdb65587f7a756474eea1118558052b824dc641c6bcc6f2076ad2a3c655a4b974e27c55389100cfa9ff8f93a9d60ef8e2dbc4a84282999011e2d65ffb8500d2701386dafd5a91894e98cace7abe58913a1493aa62e988c1206702fbdb7e5cccf11c679d22b9f557a5c2e74cf2dba2fd224cbf170cca50888383ad45bff266b2205bbf40ab40856b423e04e6d443efe3b7a1dee13f29e20792c0169ef67ef7696e077ec1da3ecbea1cccea02f1c85e118cf5dcfa42cf8426180bb9bcd52632facccd856ca98660b25416a8e8c5c30b4bd3b977597404aaa9400da00ef3c058f58765bf7a99382a3d47650291443ec8a5368dce1b69e6128f7a6d62b9f9e583ee98865245a710a73caefcdd42706ecd0ecfc17a8edb3a2b8bf6080000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300112b29798eb93d0d50a571391b4e353d9582910ea674994f534a519563227103e03298f2704a0d8fab31499aa1701cba597635979f3e770e495da245bf0ea9dbd3e0b5c8d662ac4318501950161f943dff367665464b0b00c8d500d8f36443b2f66243f3729d5d6bbe7e2b4d7f7c251c960c456b49382584f6417998bb5676a2f7800000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095b05833d24ab3e5840fe8b95a58fe53d771796c498402c602adce42bfebdaf0de7dd1a604073ac12ab3f18961d96ebbdd3b1d16fa25473d9e5b55ea89cbf5f1169a7dc7ef594b2a38e948ffb126e287d7f6265c1a9c3b2983cfc6754111adda4b8854c19b4d1ccaa644b922713741f0388f7fca4840919492f0093168cce2cfee0ad4e895ffc8304e40f1e3938e9457caf7e526ea0dae749250229650631daa363252de2ebc6ac01bdc03b51b80af15c1ce0ad03dde2a7f933b7f450e19c03f0578d99044f41aeac80a576ef2af60c22c02a70418de3658b58237508200ca9e57d8bc395c2a4198518cce8144a870ca2ffa9b6cf144e87b9ac5df7c1fffd9ebd2e9478bfe0abbfd54bc99da8e9bc884d0fce1211c622065311d999ef7d9b239e4ac45b2b0d18738e926d4f940233e5332d6e7d314f0f62e6c7e0c73f45a95f341a812e0ab96149ff357c364031cf3eb244d691c9c4c56b93b9c9c622ece069a78e5c444529816b88aed18dc0a1ef3067c6e1fd23b533532b88adc41b50b0af3f337771bea285cd1d9c3748fdc0601cf9aadec4a258b05fe19f8ad87d17b94ec1ef7848cd004f0de4186cf94891b52a84e7b2c8ea212e55e22817b90162055e30000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300124190dcea8e891275eccbb3b9a4cc97bee0dba640e432b650c4ed3c295807da4032c07fb0cf9f4cbbaaf5ef7ed6d984e72d833b344018ba61339b6018bd32891500278073209ce8c4b5446d3d02a4911319c4929682cf5d2f364de071b009cb47e0ddff71830c13c99c1b471839b0310011b8477adba3a84d64f7c276f54abb282000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000261b807a39d235b358789e4fd9953f1465ec47b9d2fdaa9a0dd7f5d6761bff144c968e897f51e2405c86bf5c26261cb74954f59b072682976bd3b3b18fae6249fed0d9a92082416f66c69a4a06f70cc1ea8384ba535ea2bf62cee3cd9ee49aa3375b087d790f78e7b10810dd667db9b5384751f5ec5816caeea49964e16d580fcfc475edc8ca7cd9c4213d1f4a66b63be50b436112106c1b19a24570449d43a1a04431fb512161d57545b081f49f0614f46088d576590e6b599f5fa64b10f0aed971a8c50298705bee06dde0a95e825d69d9f04e724dbd5a47eb73136ad7a62f0d523eb2148fe1700598717b78ce6cd2ae9f987b1d79dd60fad21d311e99814a07cc88c4a94545b272dcae152db68f2291a5b21bbc489787d73fb13ecf79f582750530b282c90010640a1b175ce7312036a82fc4efa051581285d0ca2cffa7f3d0dc1ce4ac9056d2db99adab3e1948c50e1751b7f616c88018c959e5ad539b4d51e8c64e13052b0455ffc41fc13269b754f629bc40083280fd000fa9951b8ffdfcfe5b5e60d10c4fb92235746cef7808d26cbc37142a69ee92eed842edd0ff8548750786435735e6c9b0290e4953906362dc8765ee080537ebad24c26606324c0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011161d9619f73f04b4b56b69c77706fca0875508118348c67b572a22ba33c1b70032e29042ac790bb2fba6de80ec32a97c5c9a7dc46907215eeefd1fbbcec834df524f91558898731e304d7b0c088ce0c977a51dc1e006fd32ee0bf721428e0492e11a5d1c5e5ee393f279671fb148b023e0506ee0280030b3fb514979f32bfe93b0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c8fa84fa4ab8742171d7fd405dfdd54968e68fe3f0f9244b46757001735c7f39383e5b141f2164ee6eed2431e407fd651135f2b11de737c18881ba6f3a620952a4682ffa81bf3bbc748abe6820ce1ee04307e25fe7e8a2fb0823298fd8120e1cdf84d4731599e1da72256d0dc25178a9a555bbe29fd9097a8a1f90ae2c5c7a83d5679e3ce1b0e5d4392447e689915d89b70beb7916b836a8443cffaf6968af36cb2bd363f8259b60a9e9419bfcacaaed99246a5e70a2ec0eb4f729c5f8bc8ba72ae2581d3a11457da42513b130b57dbc667b0f650da61bf987cd37c874e2cb05fa188ac6f4733c2a5f0a36735f0e8e3b4c834f1f7e4b673f53c9daff15bde499c689d681b7ca0ec939a5c07d197b326b3f8a44fde32d477ca4cbc9f2d62db66252651db588b488c6bbb9aca4d1164f1f4388fb4fdcf241c0d2458174b8542592ac7914b6be13376946f02f36a37a44cd9362e5eb088ba7f995256415bb818d6777ae66274cf9b91fbfc606229a2881c37770721ed4362ab954dd693f61afc17196b77406da9a68b348f7ff138b98562f920b2ea7bda4a0bb5dfe36533255d97be5a94de02a09f1647250074dc01bbd1164a12341becb3f12d20d6f713b227110000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300122d81ab8d2d2b3292d129bf552807e9d3747c6aaf21c99b413143645f6b8d18003305c1e90bba3dc4368f323715e6aff7323fb53338191234e757967d4c89f70342f61326234da1cca233a05edd8df6e61da98ca82166da8f1c9558e64ed69110a013260d6e053e3feab536ac830ea42f21e04edf0c24796ac03cd5246c49d52fe0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b8f80d5ec25c39b71e6554a7985be8acba75182eb8d08d9575ce7cff279f6652d58241059b02c586db526085fc8b7f47fb3cf37b141c178e1f05b44ec0dd8d39c9dd1c7e9de69dd0116eab032c5ffb0b664274c3014477c41286be8c29d46cfcaaae199baffc785b1898de6fc3ae20efa07e3bb32694de71db5971a8ac9a6105e5f04656b976a81f1ac797875396399859676f342b7e1eefb809d7462036dd8ef5592816521fd4309ae33c3745267268c3cec27490c54bab5edfd982bb9d50c3b40a3ae36b60de7e4a6fdf2c9847af2a946d593e7df2bfc0d4bcfef57f98809ddc517bc8134985be4e0eb361331712196e1c37e58ccf39612404cf6dc26b58b1a971838b8c57a3de835050480d1956430b3c5eefe6aff9e8fc60f1a219ccff893aba057a84a64f67cfe0092e6ca11bf9ae56b7151aef3afcf9d4f79ab2bf25323bb437c170c17a2f57f6ccce8393a265e68c4c5e4db5e99f3d427c09a1611dc27eb5d49f04fc5ad22c960e586d0b620efbc9797fceef5c04e68c60309f76b6b98057bb49c5d9bc92822b7841e0a45f6a784f2587dc9c993b8761e3ade76a826bc4d0cf9a9fae455db331cdf5261fea4c635b76a0f6c81528817eb4c598c790400000004000000000000000400000000", + "2ab2a5f92238e1b102bc05e4aa10ac637bb8cd7f88db17f1cba93af591fffb2400000008000000000000000000000000000000000000000000000000000000000000002400b4d0afabd327e833be0696fffd74feeacfe9fb71e2fc64f50d62782113a97300089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000800b4847062e5e74149c8696d66e1c1d8425e170660a075eaa25c1e90875b336a60000150006ed463220e89111ad4659ae6bfc7b304e20d7a4c2d2241625e9291f53f5fc9500001580009e49ec6e74ab8569dcc2156cbed3fce0bb015b59837a45344e8b5b8a19e4e9000015800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000070dbd9d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad5ea62802f0ca6aab2cfd916a1ab67c05a79d3cadfd624440e2c65033d684b261baf530000000080000002400000000000000000000000000000000000000000000000000000000000bed4bba000100f5f4ee49ffe1847315ee17b86db71a916a4c2443abc36cc4666be512065f2400020529412e2caac822e870b247ddb9b45c5dac8460f78e6e854c11d7d1b894312300000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba000101346f35ac6eb9027fa0b8d9f4231e228c66def1949d66ab768f6b36c5efc78c000209f893ce014878f27f6f579c11de3f0f51a16d175834b9714264cacd893ed75800000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d00000000000000000000000000000000000000000000000000000000000007d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba00010525cdd912876933db912a1cdd9184da26c097e2fae9db314a3c3dbdf7488bf300022e3033b9b4319935f6135aa63fd9de84a93dad41202ea18a468f2d40a88192a600000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d0000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba000106184e5c1651a67e543950951e18c04eefdebb778d4cc7b5db7babb1f59642cb0002011d70a67015cf64a3553b0aa53b84b15dca1070d9aba315998d524503fb81c700000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d0000000000000000000000000000000000000000000000000000000000000fa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba000106e5920182bca6ebf89dec3d8bb48c8acf8076da805680bb4e01bb68ea09db1200020b71c4bf1b6ca944f0f7b27abf87f028527fe2ee6109cd0c4dcbef89680ff54c00000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d00000000000000000000000000000000000000000000000000000000000013880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba000109091b2b331ff20d7e6fbdd21707c80d6bd209ec9d895723284a24bf4c6c028200020e15a517e2880b5c8c23b6c914a00144fdfe1959dd4d421a8158d193de55ac8900000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d00000000000000000000000000000000000000000000000000000000000017700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba00010953cd4f4e7d272b407007befb1b1ebe5f6a761968db5c113d68a6e74704a7bc00022d7d0f2efeaa182176d6ffef73436b1cb172bba30942e898f26a7e11a6482fe700000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d0000000000000000000000000000000000000000000000000000000000001b580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba00010aed071a160f1cf6864579728f6fcd2bfb339b2b671554807d0ac4e524264c8b000202722dc983ea7b9963878a27e3fcc690674628a596a42949eae01aa2e284375d00000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d0000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba00010ba2e8aa7ec234bf4d18f0de057fb7949d3f52b06e552679789c379e33cab73000021d930249dbf757666373a8dafab99b8cbf6fb7fef3452181fc63392c6a89caed00000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d00000000000000000000000000000000000000000000000000000000000023280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba00011115d71c5e513ea50f657fb0f680a707aa64d1acdd416f20c5c258de2002e0e900020d66061d89df3e08d8ea36e71e053602871895c6b877ed3357c072f90a4bbad200000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d00000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba0001133dce2aa1b515a03e90420fb09b67f4777042339cde68a834fe19ac29c88b9d00022d1406afd9ab272d1d69d07663260f8354d919ee2c26fc2f7dba5f2481e2658d00000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d0000000000000000000000000000000000000000000000000000000000002af80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba000113cb2ae07341e88d501c0cfc266cf1bad397e46529c47e7c4a0e279a44ec35fe00022a5332a1e62f0f63be898ed80aca44562c73d5edcfca002bac2ccb147207119300000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d0000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba000113f31d6ed40ebc9acff9789fa0fbfcc0e27ef4d6a4e43481aad8e4b81fa541870002056f47b76b37b7ea837c2a1c1fb1c3335856b2b1f8234b5e45a54849bfe626fc00000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d00000000000000000000000000000000000000000000000000000000000032c80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba00011708d320e5cbabef8b8744397af35b05907e3fc2091ab004d8909d05a8df58cc000230099bb2ef4bd6d1a39dfc44097ee011c2252bb0b6a3ea372c41fecc9d77c0b900000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d00000000000000000000000000000000000000000000000000000000000036b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba000117e438fc6cc36d7909f2dd4b911364b1a8865707a03d7495be3d168cbd54780d00021ed7c45b1b55c1ca09acd74390b67647e370beb59140bf1e6f81cc2fa9c522c900000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d0000000000000000000000000000000000000000000000000000000000003a980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba0001195af82988fd3f3cd1bc5897ad091fc80cb20ab617fb0e3c17baf79e4522061700022a3d3269c7ab4e365aefde47af42e9ec39e4233336678ccb9fc7d42953c87d1f00000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d0000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba000119b2cd97afe962e7d7e141e0055ce6e7ce19728254b149c9fa893f2a7669b7820002066279451caa3f1eeb975ee89941ef936200eca4a1a26fac831c886dd5914dec00000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d00000000000000000000000000000000000000000000000000000000000042680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba00011a02a2f04fe8c26b35addcd5431ea98f8daf7b6c861aeb1502b205cd7a28fb0800021c3ccba76206d231c3f5983b1b01385a9f57a5ebe7d9c6caeab20e6077bb7db600000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d00000000000000000000000000000000000000000000000000000000000046500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba00011a38c7f795e6b0c65162aa6c4713c72569f2ca078ac2a3f319c05235efe6f1b200021f3d78d1b5c84393c4cb85a6de369b5cce9f925cac3824494e85c0c74c7070a100000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d0000000000000000000000000000000000000000000000000000000000004a380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba00011a4d9714df8a4e1bc8897efadb251fa736b04bf3db43023f9924aa60aaa5de6d00022d4652a079712bd8d06d585f4d11aee5dbc03ff98dcf3ed5f135fe6b513a8d9b00000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d0000000000000000000000000000000000000000000000000000000000004e200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba00011b06c0ab174b7ebe7c3034740c3131898b5c2c56e1117c205101b2055c5530550002146f3c3109213edd135054e8a4614daa39c2d6d2e4a62e3bba93ebb66520b68e00000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d00000000000000000000000000000000000000000000000000000000000052080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba00011de3c93a3d068f905ebee51bf405552ae33bb1ed9f45bc3c965464ee979f1c91000217ddfd3ca5e72090b830a5e809b9d29aa455a15b61f165030f1b515738cb31c100000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d00000000000000000000000000000000000000000000000000000000000055f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba00011df3f21b4c63874c5bd2e39fe399e190e3bdd41e9e9c58b23644a83a6bad96cd000229701a66f2d436f8796a4ca058a4d9d8157df9adcedfe7e105b646ee84deb62400000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d00000000000000000000000000000000000000000000000000000000000059d80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba00011e23887f6e51ceb2bb5817fb809999ca36d85c39f8d4aa5f81ca0e9486bb36ff0002176d460bcad8425779886202cb8160d6ce65654285b26992f94d912181a843d000000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d0000000000000000000000000000000000000000000000000000000000005dc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba000121dd8e226ec6d9c0c600aed988c8861d6183767dc403965c1f32bfa6df98b8ec00020f502211f8603476d9c20225bb3b7606859a3f39a19e2cf0d97529f9de3aae1000000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d00000000000000000000000000000000000000000000000000000000000061a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba000122049f38735d66c7f8f579201556df091da5157adfcbbc02a97977c28e432aae000203b633211ac2a8010e05cc24fc75b89ea9764e303803ea5164d58d6564e3a34f00000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d00000000000000000000000000000000000000000000000000000000000065900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba000122955e0707d897fcce2c6269b60a45c44f7000b8f54f64352c4e2961f0bb902100020c4c86b9161d90f4137c5a977595dd4effad4cf74d46d4632c78d1e4e22df73e00000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d00000000000000000000000000000000000000000000000000000000000069780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba0001248e6192be12ebf799e4ba57522f6ec82935e648cfc1c0a8901a6a972c060ba700022cc968259fdbaec8dce510e0c0fdb53f319a892ee7e243622712a1214758550e00000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d0000000000000000000000000000000000000000000000000000000000006d600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba0001253fb2bfcb86a6b0f504f6c200b5fd4d3ed5471c8915e179dc027666117d2d9d00021c5e350766d6ae7c45abf76a3ce829e8e2db6d603a9a3d4e28af3df99929bd9700000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d00000000000000000000000000000000000000000000000000000000000071480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba0001267fae6aeffa043fdd7f8f85a083d7a59a3e887923955110db245d668291788f0002063c4e9483fab54a5c4ceaa196d9f974e1a79fb3e37f566b0cef90f948d147e000000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d00000000000000000000000000000000000000000000000000000000000075300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba0001269737e8227a1ccd9a07f222a75e476e124e9203db1de2eda9011169aad983b2000205617eabdb4b9866e51690d1556b5862ca7a54de9e74b6f0d8e83cfbb7ba8b4d00000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d00000000000000000000000000000000000000000000000000000000000079180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba000128b0aef4273fd08ca8697cfc1f26dfab330dfefeb27d6ed7be14d08e9ccff39a0002016d0e9cf1b97811c3b0b4d9aa6a01bc2bc906a023be0f5dbf5883e7443b25e200000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d0000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba00012900c579590490af5f507a70d3d2b433cde05d1e5bbf6968776a64b310365fe0000229d6b3c3179ec53ca890e77a984f9dada05242a31f000ea47b1be1cd7839197500000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d00000000000000000000000000000000000000000000000000000000000080e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba000129e39c762e36e17ed519134c96a3a33c64d506e2866bf0b14ce5a49f8382c4b90002028b92dc59c0e639a67b5800142868d3eb41d46f26a3d8ce08c71bf4d2e78d4b00000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d00000000000000000000000000000000000000000000000000000000000084d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba00012b434808bd31282fe4aaa0b06cacbf5ab6622cf28c25aa14469451f378a68d2100020190857f4d6ad63c5132e9c9f21bd7d462d5882152476825ac7d4e345d515b9500000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d00000000000000000000000000000000000000000000000000000000000088b80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed4bba00012eaba0cfc0b5736d468993b6836c7a929129a7486b6d6047578c363e9383ce41000214ac88a46d4926c114ba808ae4c56000689ffa862f347339a419dd3d971d8bb200000000000000000000000000000000000000000000000000000000000003e815c6e5bf612da46f8b7cd1ab479366dc7213b3e0b6226b02af5871aea74e7d7d0000000000000000000000000000000000000000000000000000000000008ca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000400000000000000080000000000000000", + "02f0ca6aab2cfd916a1ab67c05a79d3cadfd624440e2c65033d684b261baf53000000009000000000000000000000000000000000000000000000000000000000000002400b960ca683d9e65fb16fe06c365ac3db1960274e859791737b00a41b4f4a42d00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000900b4847062e5e74149c8696d66e1c1d8425e170660a075eaa25c1e90875b336a600001e00220f3701edd132fc62ad8fde71c04b4c197fa11dc60380222b6e350f8c9b68d800001e80009e49ec6e74ab8569dcc2156cbed3fce0bb015b59837a45344e8b5b8a19e4e900001e800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000070dbd9f4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad59c13009b27ddce60e62472fc50ead58718e582a4e6746e73a2b55f2f4b5cfaccca639000000090000002400000000000000000000000000000000000000000000000000000000000bed28ec000100f2d70b0d86d8dbb44ee02b2706f2f5306fa7b7c53d05130e1ce76aa8e086b2000209f893ce014878f27f6f579c11de3f0f51a16d175834b9714264cacd893ed75800000000000000000000000000000000000000000000000000000000000003e702722dc983ea7b9963878a27e3fcc690674628a596a42949eae01aa2e284375d00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001013ead8ed29f6efb668e008d416abf4019d1df913b001ed152423c30d0279aae00020c4c86b9161d90f4137c5a977595dd4effad4cf74d46d4632c78d1e4e22df73e00000000000000000000000000000000000000000000000000000000000003e72e3033b9b4319935f6135aa63fd9de84a93dad41202ea18a468f2d40a88192a600000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010173fdd478f2dfe8ece3555d7cf2307bc95d99d25bc4794ad2651290bb1072b7000203b633211ac2a8010e05cc24fc75b89ea9764e303803ea5164d58d6564e3a34f00000000000000000000000000000000000000000000000000000000000003e70529412e2caac822e870b247ddb9b45c5dac8460f78e6e854c11d7d1b894312300000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001041be77ab181742c65e00a7c92ce04e6d823e3a8e5fac0f20842bea44ae80ccf00020b71c4bf1b6ca944f0f7b27abf87f028527fe2ee6109cd0c4dcbef89680ff54c00000000000000000000000000000000000000000000000000000000000003e729d6b3c3179ec53ca890e77a984f9dada05242a31f000ea47b1be1cd7839197500000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000106175110ac204975cfc78bdb9f59dd7e1c9a02f5c6200d8957a31688a63a20a200022d7d0f2efeaa182176d6ffef73436b1cb172bba30942e898f26a7e11a6482fe700000000000000000000000000000000000000000000000000000000000003e72d4652a079712bd8d06d585f4d11aee5dbc03ff98dcf3ed5f135fe6b513a8d9b00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010a68936e163bcb698dd256f6761cb56e545c9e27c63c78badf54377a101d035200022d1406afd9ab272d1d69d07663260f8354d919ee2c26fc2f7dba5f2481e2658d00000000000000000000000000000000000000000000000000000000000003e7028b92dc59c0e639a67b5800142868d3eb41d46f26a3d8ce08c71bf4d2e78d4b00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010c9239cf88a8e455e24ad0c009b71ca754e2ff1d28518c4f499f834cbaadaf7d00021c5e350766d6ae7c45abf76a3ce829e8e2db6d603a9a3d4e28af3df99929bd9700000000000000000000000000000000000000000000000000000000000003e72a3d3269c7ab4e365aefde47af42e9ec39e4233336678ccb9fc7d42953c87d1f00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010d32d1582030fe771ba02cecb4352d4b119cac72202c7b360121be4b84ac1bcc00020d66061d89df3e08d8ea36e71e053602871895c6b877ed3357c072f90a4bbad200000000000000000000000000000000000000000000000000000000000003e70b71c4bf1b6ca944f0f7b27abf87f028527fe2ee6109cd0c4dcbef89680ff54c00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000110aec91db09b7e09ef01215b65400a3a518d456d58617038df1720b19dd3b97500020529412e2caac822e870b247ddb9b45c5dac8460f78e6e854c11d7d1b894312300000000000000000000000000000000000000000000000000000000000003e8011d70a67015cf64a3553b0aa53b84b15dca1070d9aba315998d524503fb81c700000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000110d6a9b3a4161e155511e20ec91f6d140451833f9c6a71e661c977d9cbf279e200022d4652a079712bd8d06d585f4d11aee5dbc03ff98dcf3ed5f135fe6b513a8d9b00000000000000000000000000000000000000000000000000000000000003e817ddfd3ca5e72090b830a5e809b9d29aa455a15b61f165030f1b515738cb31c100000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000111759c59ef9a6b55024b614ec946c272ccf2498db0528d28f572d69375c2fdcb00021d930249dbf757666373a8dafab99b8cbf6fb7fef3452181fc63392c6a89caed00000000000000000000000000000000000000000000000000000000000003e703b633211ac2a8010e05cc24fc75b89ea9764e303803ea5164d58d6564e3a34f00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011194f1c06e67c7e3ad60bb55a280ea1b2a0adfc894b9fee6498a01e43534155b000205617eabdb4b9866e51690d1556b5862ca7a54de9e74b6f0d8e83cfbb7ba8b4d00000000000000000000000000000000000000000000000000000000000003e71f3d78d1b5c84393c4cb85a6de369b5cce9f925cac3824494e85c0c74c7070a100000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000112b029dddbc5a80ae198f3d22acf9c6d9df0e36e8eb71d37f7f5c8177732b620000230099bb2ef4bd6d1a39dfc44097ee011c2252bb0b6a3ea372c41fecc9d77c0b900000000000000000000000000000000000000000000000000000000000003e70d66061d89df3e08d8ea36e71e053602871895c6b877ed3357c072f90a4bbad200000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000112f18d3af816f5393e33a0d921ee1c23e5d6c1ba508f5816054d4f6af01d5f6b00022a3d3269c7ab4e365aefde47af42e9ec39e4233336678ccb9fc7d42953c87d1f00000000000000000000000000000000000000000000000000000000000003e814ac88a46d4926c114ba808ae4c56000689ffa862f347339a419dd3d971d8bb200000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000113ff57e4c54c0d62d7e2e5f4a840773f76c275c789b2c3a70b333b844c418e2f0002146f3c3109213edd135054e8a4614daa39c2d6d2e4a62e3bba93ebb66520b68e00000000000000000000000000000000000000000000000000000000000003e70190857f4d6ad63c5132e9c9f21bd7d462d5882152476825ac7d4e345d515b9500000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000114dd28112501f252b49640ae9735d219f8d20188629946260126698a4a7d6d540002028b92dc59c0e639a67b5800142868d3eb41d46f26a3d8ce08c71bf4d2e78d4b00000000000000000000000000000000000000000000000000000000000003e82d7d0f2efeaa182176d6ffef73436b1cb172bba30942e898f26a7e11a6482fe700000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000114f0ee502071bf8e0206d4cb30d6b9236d977e66c5c4bd07a0bc40a055cffab80002056f47b76b37b7ea837c2a1c1fb1c3335856b2b1f8234b5e45a54849bfe626fc00000000000000000000000000000000000000000000000000000000000003e72cc968259fdbaec8dce510e0c0fdb53f319a892ee7e243622712a1214758550e00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000116a183e310ed60635b19dec7671778f143715cfe24aeb0602667993fe6990c9d000229d6b3c3179ec53ca890e77a984f9dada05242a31f000ea47b1be1cd7839197500000000000000000000000000000000000000000000000000000000000003e80c4c86b9161d90f4137c5a977595dd4effad4cf74d46d4632c78d1e4e22df73e00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000118b6ad0a4e75ec42678c7920a80aca5d63da0933b9ad62e3cac6c0b5228dc94c00021c3ccba76206d231c3f5983b1b01385a9f57a5ebe7d9c6caeab20e6077bb7db600000000000000000000000000000000000000000000000000000000000003e71d930249dbf757666373a8dafab99b8cbf6fb7fef3452181fc63392c6a89caed00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000118d8dcb49000cf1a2245db64d384b6dedb26a27f705a21a41d8196b4b75224f000022e3033b9b4319935f6135aa63fd9de84a93dad41202ea18a468f2d40a88192a600000000000000000000000000000000000000000000000000000000000003e80e15a517e2880b5c8c23b6c914a00144fdfe1959dd4d421a8158d193de55ac8900000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011a43ae704071358757293f507566fcf7f5ce2cf17b10e8254e6fbdad9138a0ae00021f3d78d1b5c84393c4cb85a6de369b5cce9f925cac3824494e85c0c74c7070a100000000000000000000000000000000000000000000000000000000000003e830099bb2ef4bd6d1a39dfc44097ee011c2252bb0b6a3ea372c41fecc9d77c0b900000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011a845a6bf6c7851c1fc8312bb05dff19d8852ede55d1a079644f95fd11d1e20600022cc968259fdbaec8dce510e0c0fdb53f319a892ee7e243622712a1214758550e00000000000000000000000000000000000000000000000000000000000003e8063c4e9483fab54a5c4ceaa196d9f974e1a79fb3e37f566b0cef90f948d147e000000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011bdd5260097870e244fd65632699ae23ea632f7f0a7a99855067c3c61cae5efd0002016d0e9cf1b97811c3b0b4d9aa6a01bc2bc906a023be0f5dbf5883e7443b25e200000000000000000000000000000000000000000000000000000000000003e709f893ce014878f27f6f579c11de3f0f51a16d175834b9714264cacd893ed75800000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011dc9a02a46026d2ecc8b7283a18001d427126c71a75606e3aa42eaebe1c2f0220002066279451caa3f1eeb975ee89941ef936200eca4a1a26fac831c886dd5914dec00000000000000000000000000000000000000000000000000000000000003e705617eabdb4b9866e51690d1556b5862ca7a54de9e74b6f0d8e83cfbb7ba8b4d00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011ef8e70452b53a24a895d303feb7ab5170b44f671ef6b4f9fcdd95b2b01abefa000217ddfd3ca5e72090b830a5e809b9d29aa455a15b61f165030f1b515738cb31c100000000000000000000000000000000000000000000000000000000000003e8016d0e9cf1b97811c3b0b4d9aa6a01bc2bc906a023be0f5dbf5883e7443b25e200000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001207ea28a1e6ea8ff07670accbc4865289905eadfdd5b18d80404a508bc5441350002011d70a67015cf64a3553b0aa53b84b15dca1070d9aba315998d524503fb81c700000000000000000000000000000000000000000000000000000000000003e8176d460bcad8425779886202cb8160d6ce65654285b26992f94d912181a843d000000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000122201f7cd466ce0bc522855194c321085433b076428dbb72e91143b0d08dd58500020f502211f8603476d9c20225bb3b7606859a3f39a19e2cf0d97529f9de3aae1000000000000000000000000000000000000000000000000000000000000003e72a5332a1e62f0f63be898ed80aca44562c73d5edcfca002bac2ccb147207119300000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000125138d4732eebc3e26c472e1eeeb90dfe0237d1b8b336871a49f99c11db9d6a500021ed7c45b1b55c1ca09acd74390b67647e370beb59140bf1e6f81cc2fa9c522c900000000000000000000000000000000000000000000000000000000000003e72d1406afd9ab272d1d69d07663260f8354d919ee2c26fc2f7dba5f2481e2658d00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012646e93bffcbec336571a87e06263c3d82a97c870b17485adc4e40e91b5d67ff00020e15a517e2880b5c8c23b6c914a00144fdfe1959dd4d421a8158d193de55ac8900000000000000000000000000000000000000000000000000000000000003e829701a66f2d436f8796a4ca058a4d9d8157df9adcedfe7e105b646ee84deb62400000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000126b3273df6b46e9c42c269c1f36b91ffa223e246e9f016909049d47a2bf05bb3000202722dc983ea7b9963878a27e3fcc690674628a596a42949eae01aa2e284375d00000000000000000000000000000000000000000000000000000000000003e81c5e350766d6ae7c45abf76a3ce829e8e2db6d603a9a3d4e28af3df99929bd9700000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012841df4307c84429b04e7650d73b382729cfc275c707c333368c3d15f8227a9d00020190857f4d6ad63c5132e9c9f21bd7d462d5882152476825ac7d4e345d515b9500000000000000000000000000000000000000000000000000000000000003e80f502211f8603476d9c20225bb3b7606859a3f39a19e2cf0d97529f9de3aae1000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001296f296a5fbfe7a0e7da803746e0f1a37a65b920577a596d7e05dacde490829a000214ac88a46d4926c114ba808ae4c56000689ffa862f347339a419dd3d971d8bb200000000000000000000000000000000000000000000000000000000000003e8056f47b76b37b7ea837c2a1c1fb1c3335856b2b1f8234b5e45a54849bfe626fc00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012a69bdc97eeb3c06580a3d9424c60c45f0a72009f4d6b61265cd45cebe22b6730002176d460bcad8425779886202cb8160d6ce65654285b26992f94d912181a843d000000000000000000000000000000000000000000000000000000000000003e8066279451caa3f1eeb975ee89941ef936200eca4a1a26fac831c886dd5914dec00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012a6da10499fef77b7ec64eaba1189f453ce33e0f038b9f989142d6f6442bb0cb00022a5332a1e62f0f63be898ed80aca44562c73d5edcfca002bac2ccb147207119300000000000000000000000000000000000000000000000000000000000003e81ed7c45b1b55c1ca09acd74390b67647e370beb59140bf1e6f81cc2fa9c522c900000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012cca3963af43cba368ade5d910bed6fe5022044dbcad59effae8aeace442a1620002063c4e9483fab54a5c4ceaa196d9f974e1a79fb3e37f566b0cef90f948d147e000000000000000000000000000000000000000000000000000000000000003e81c3ccba76206d231c3f5983b1b01385a9f57a5ebe7d9c6caeab20e6077bb7db600000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012e36f4321a39fa705e145dc0a28a0907aca558e4dc6394171793be15cc63b625000229701a66f2d436f8796a4ca058a4d9d8157df9adcedfe7e105b646ee84deb62400000000000000000000000000000000000000000000000000000000000003e8146f3c3109213edd135054e8a4614daa39c2d6d2e4a62e3bba93ebb66520b68e00000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000400000000000000080000000000000000", + "09b27ddce60e62472fc50ead58718e582a4e6746e73a2b55f2f4b5cfaccca6390000000a000000000000000000000000000000000000000000000000000000000000002400fa53595d17701dfc393e4fbfa3ea54f2b3c374ce15dc4bdd173afd1bb7e27c00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000a00b4847062e5e74149c8696d66e1c1d8425e170660a075eaa25c1e90875b336a600002700300e6d4e139f305d1f444bc74c713be962ddb4d90f4b447ca519e448a01c66bd00002780009e49ec6e74ab8569dcc2156cbed3fce0bb015b59837a45344e8b5b8a19e4e9000027800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000070dbda18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad59c13029247bbde52271add6137211fa84752a601b84180629d9f08bd6972db3b9ee000000000a0000002400000000000000000000000000000000000000000000000000000000000bed28ec00010473825367bc0cef1609a8aad08b85946f6832d76fa637958c7aa04353391d59000230099bb2ef4bd6d1a39dfc44097ee011c2252bb0b6a3ea372c41fecc9d77c0b900000000000000000000000000000000000000000000000000000000000003e70d66061d89df3e08d8ea36e71e053602871895c6b877ed3357c072f90a4bbad200000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000104915a26de9858f42f589db55e09e59f93977065cb7193a195afe00a86e0788800021d930249dbf757666373a8dafab99b8cbf6fb7fef3452181fc63392c6a89caed00000000000000000000000000000000000000000000000000000000000003e703b633211ac2a8010e05cc24fc75b89ea9764e303803ea5164d58d6564e3a34f00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000104a5251b8be8aced6a36b501e67829711c8ae871f6e2dfc6960b4fe047229bb3000205617eabdb4b9866e51690d1556b5862ca7a54de9e74b6f0d8e83cfbb7ba8b4d00000000000000000000000000000000000000000000000000000000000003e71f3d78d1b5c84393c4cb85a6de369b5cce9f925cac3824494e85c0c74c7070a100000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000105853d47f917b02b35c58bf715b268cc5f4ca1e6813dcedfdc5952331493c397000202722dc983ea7b9963878a27e3fcc690674628a596a42949eae01aa2e284375d00000000000000000000000000000000000000000000000000000000000003e71c5e350766d6ae7c45abf76a3ce829e8e2db6d603a9a3d4e28af3df99929bd9700000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000109995f600ae5976a95ee58d1a16c0e343eb75c0d69a27a5b85e53cafdb51d3e700020f502211f8603476d9c20225bb3b7606859a3f39a19e2cf0d97529f9de3aae1000000000000000000000000000000000000000000000000000000000000003e72a5332a1e62f0f63be898ed80aca44562c73d5edcfca002bac2ccb147207119300000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010b86095f2107753653b36551297bcd6d64731628a50f2abeeeb4baeddc63db2b0002063c4e9483fab54a5c4ceaa196d9f974e1a79fb3e37f566b0cef90f948d147e000000000000000000000000000000000000000000000000000000000000003e71c3ccba76206d231c3f5983b1b01385a9f57a5ebe7d9c6caeab20e6077bb7db600000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010c7761d40143432e660e15fefe84cd9fb8a70d07bf5b6d32d544e096066c2c900002176d460bcad8425779886202cb8160d6ce65654285b26992f94d912181a843d000000000000000000000000000000000000000000000000000000000000003e7066279451caa3f1eeb975ee89941ef936200eca4a1a26fac831c886dd5914dec00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010c7b4737242344b3997e40f16adb92684d06089ee2e4ba196c66d51cef7d087e0002011d70a67015cf64a3553b0aa53b84b15dca1070d9aba315998d524503fb81c700000000000000000000000000000000000000000000000000000000000003e7176d460bcad8425779886202cb8160d6ce65654285b26992f94d912181a843d000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010cd861d62a4bdcc417f56f4c84e482bd50674e8e7cac65b34fa17d7c3deed9e600022e3033b9b4319935f6135aa63fd9de84a93dad41202ea18a468f2d40a88192a600000000000000000000000000000000000000000000000000000000000003e70e15a517e2880b5c8c23b6c914a00144fdfe1959dd4d421a8158d193de55ac8900000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010edf6c509611abacf3ca7a23f02b2e94695909e1fe8ae65df8c6bf4b0b03d1ff00020b71c4bf1b6ca944f0f7b27abf87f028527fe2ee6109cd0c4dcbef89680ff54c00000000000000000000000000000000000000000000000000000000000003e729d6b3c3179ec53ca890e77a984f9dada05242a31f000ea47b1be1cd7839197500000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010f54d10e3e8217169f944aa57b180a4fcc894d2dddc62ff40e53f5e87b9162560002028b92dc59c0e639a67b5800142868d3eb41d46f26a3d8ce08c71bf4d2e78d4b00000000000000000000000000000000000000000000000000000000000003e72d7d0f2efeaa182176d6ffef73436b1cb172bba30942e898f26a7e11a6482fe700000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011096cf7674ecd3c7a4520fcfd2597f86d21c64fc41dca7fbd2070add0ceb19100002146f3c3109213edd135054e8a4614daa39c2d6d2e4a62e3bba93ebb66520b68e00000000000000000000000000000000000000000000000000000000000003e70190857f4d6ad63c5132e9c9f21bd7d462d5882152476825ac7d4e345d515b9500000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001111f4bcbb7405a23ef82d3e0c847305a9143580fac284500a848bb7db9ebcd7000022a5332a1e62f0f63be898ed80aca44562c73d5edcfca002bac2ccb147207119300000000000000000000000000000000000000000000000000000000000003e81ed7c45b1b55c1ca09acd74390b67647e370beb59140bf1e6f81cc2fa9c522c900000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000114114a42dfc54dea7d2f525e2e6cbc837f890e2c30ee4e88e09116ede22f6dd600021f3d78d1b5c84393c4cb85a6de369b5cce9f925cac3824494e85c0c74c7070a100000000000000000000000000000000000000000000000000000000000003e830099bb2ef4bd6d1a39dfc44097ee011c2252bb0b6a3ea372c41fecc9d77c0b900000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001151c04a6d0994b568b46849875c96c259c051b1557fdd7fe845c3c224d2970ae00020529412e2caac822e870b247ddb9b45c5dac8460f78e6e854c11d7d1b894312300000000000000000000000000000000000000000000000000000000000003e7011d70a67015cf64a3553b0aa53b84b15dca1070d9aba315998d524503fb81c700000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011676abb240f54f065ea6887e9d9bf4967ca094cbd036e14ebb779409a332f7bb00021c3ccba76206d231c3f5983b1b01385a9f57a5ebe7d9c6caeab20e6077bb7db600000000000000000000000000000000000000000000000000000000000003e81d930249dbf757666373a8dafab99b8cbf6fb7fef3452181fc63392c6a89caed00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000117015aebf4435b56cab5666132780d5dce18d0d0cec02bd92fbea30e44647bc300021c5e350766d6ae7c45abf76a3ce829e8e2db6d603a9a3d4e28af3df99929bd9700000000000000000000000000000000000000000000000000000000000003e82a3d3269c7ab4e365aefde47af42e9ec39e4233336678ccb9fc7d42953c87d1f00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011721df5222af8412b12ad7b81b0ead462ffa191c12306cc29eb88b4f350cd6f700020d66061d89df3e08d8ea36e71e053602871895c6b877ed3357c072f90a4bbad200000000000000000000000000000000000000000000000000000000000003e80b71c4bf1b6ca944f0f7b27abf87f028527fe2ee6109cd0c4dcbef89680ff54c00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000117e05821d36b3b650fb47b1ff2ab201964c81e1d6f2075dcfd2004866aa87805000214ac88a46d4926c114ba808ae4c56000689ffa862f347339a419dd3d971d8bb200000000000000000000000000000000000000000000000000000000000003e7056f47b76b37b7ea837c2a1c1fb1c3335856b2b1f8234b5e45a54849bfe626fc00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011abfe47e7b975bcf92a32aa3e28f5f433d036649d8ae13f9126fc246d71de5150002066279451caa3f1eeb975ee89941ef936200eca4a1a26fac831c886dd5914dec00000000000000000000000000000000000000000000000000000000000003e805617eabdb4b9866e51690d1556b5862ca7a54de9e74b6f0d8e83cfbb7ba8b4d00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011c9a1f0e3c05ef013872b4c4d6843c2445b77c1a83ebaab8bc7ce80745266664000203b633211ac2a8010e05cc24fc75b89ea9764e303803ea5164d58d6564e3a34f00000000000000000000000000000000000000000000000000000000000003e80529412e2caac822e870b247ddb9b45c5dac8460f78e6e854c11d7d1b894312300000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011d5e3ca8b4b6981a2118da9ea62840626511619d65feeb304584dd914c3a012900022a3d3269c7ab4e365aefde47af42e9ec39e4233336678ccb9fc7d42953c87d1f00000000000000000000000000000000000000000000000000000000000003e814ac88a46d4926c114ba808ae4c56000689ffa862f347339a419dd3d971d8bb200000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011f374867612dc02b6dbf63afe4de23e9996aa6a7af4acdd0e00ffc781c74895a00020c4c86b9161d90f4137c5a977595dd4effad4cf74d46d4632c78d1e4e22df73e00000000000000000000000000000000000000000000000000000000000003e72e3033b9b4319935f6135aa63fd9de84a93dad41202ea18a468f2d40a88192a600000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000121489d25430243ac8fc076749fb1a62d84a14d41d81d4abe594f0e1a88cd781000021ed7c45b1b55c1ca09acd74390b67647e370beb59140bf1e6f81cc2fa9c522c900000000000000000000000000000000000000000000000000000000000003e82d1406afd9ab272d1d69d07663260f8354d919ee2c26fc2f7dba5f2481e2658d00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000121e9ca8762a7ae19e052410b001ca3c355bb5a72a32019e78423083eb160e4a100022d7d0f2efeaa182176d6ffef73436b1cb172bba30942e898f26a7e11a6482fe700000000000000000000000000000000000000000000000000000000000003e82d4652a079712bd8d06d585f4d11aee5dbc03ff98dcf3ed5f135fe6b513a8d9b00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012258481957853eb0b4244ea665e7cebb086bbd613776d4e642b8a649d7c6de130002056f47b76b37b7ea837c2a1c1fb1c3335856b2b1f8234b5e45a54849bfe626fc00000000000000000000000000000000000000000000000000000000000003e82cc968259fdbaec8dce510e0c0fdb53f319a892ee7e243622712a1214758550e00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012288b3fbf841bd4e5c0337b208f7a856327461dcf5d64043a010b6132e0f92b10002016d0e9cf1b97811c3b0b4d9aa6a01bc2bc906a023be0f5dbf5883e7443b25e200000000000000000000000000000000000000000000000000000000000003e709f893ce014878f27f6f579c11de3f0f51a16d175834b9714264cacd893ed75800000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012322fa565c989b612d8f209049e99e80318be19d67c2d3c2204e7842e15fd6d000022d1406afd9ab272d1d69d07663260f8354d919ee2c26fc2f7dba5f2481e2658d00000000000000000000000000000000000000000000000000000000000003e8028b92dc59c0e639a67b5800142868d3eb41d46f26a3d8ce08c71bf4d2e78d4b00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001252d5704306fbbaefd3f878543e8c3aaaed77a1e7434b43d648209bc4a8eb56300020e15a517e2880b5c8c23b6c914a00144fdfe1959dd4d421a8158d193de55ac8900000000000000000000000000000000000000000000000000000000000003e829701a66f2d436f8796a4ca058a4d9d8157df9adcedfe7e105b646ee84deb62400000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000127eccf12d4873d6f9e23af59e503cae99c4e7e04d32ecd2fe218807d6629274e000209f893ce014878f27f6f579c11de3f0f51a16d175834b9714264cacd893ed75800000000000000000000000000000000000000000000000000000000000003e802722dc983ea7b9963878a27e3fcc690674628a596a42949eae01aa2e284375d00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000128d400f3631b9ec8abf89a078659dc0aae102c39d5990c6a04f4b02adef17fed000229d6b3c3179ec53ca890e77a984f9dada05242a31f000ea47b1be1cd7839197500000000000000000000000000000000000000000000000000000000000003e80c4c86b9161d90f4137c5a977595dd4effad4cf74d46d4632c78d1e4e22df73e00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001298da0294b7e834b177fe6f7496be4f9078245f1c650fe34386f36c450fbc51f00022cc968259fdbaec8dce510e0c0fdb53f319a892ee7e243622712a1214758550e00000000000000000000000000000000000000000000000000000000000003e8063c4e9483fab54a5c4ceaa196d9f974e1a79fb3e37f566b0cef90f948d147e000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012990b064ea00e0e27c5a02998fef4ead8687eb8197271455ec0d485bdecfd81d000217ddfd3ca5e72090b830a5e809b9d29aa455a15b61f165030f1b515738cb31c100000000000000000000000000000000000000000000000000000000000003e7016d0e9cf1b97811c3b0b4d9aa6a01bc2bc906a023be0f5dbf5883e7443b25e200000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000129d86e6615cda0c0b0f2136b0c0a6146786af32812f090b861402df063ea4f1700022d4652a079712bd8d06d585f4d11aee5dbc03ff98dcf3ed5f135fe6b513a8d9b00000000000000000000000000000000000000000000000000000000000003e817ddfd3ca5e72090b830a5e809b9d29aa455a15b61f165030f1b515738cb31c100000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012b5b3521ead52f8be50c6cb67886287fa4872a8dff07e5fe579782dfd8e5ba2800020190857f4d6ad63c5132e9c9f21bd7d462d5882152476825ac7d4e345d515b9500000000000000000000000000000000000000000000000000000000000003e80f502211f8603476d9c20225bb3b7606859a3f39a19e2cf0d97529f9de3aae1000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012c84fdc1b24371144602b5b6844d97025548a23b8e0e2f202990f49b8d3e795b000229701a66f2d436f8796a4ca058a4d9d8157df9adcedfe7e105b646ee84deb62400000000000000000000000000000000000000000000000000000000000003e8146f3c3109213edd135054e8a4614daa39c2d6d2e4a62e3bba93ebb66520b68e00000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000400000000000000080000000000000000", + "29247bbde52271add6137211fa84752a601b84180629d9f08bd6972db3b9ee000000000b000000000000000000000000000000000000000000000000000000000000002400180ae8890a2043228739e04215836a80c23cea00cc72e1b21979c5fc04ba2c00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000b00b4847062e5e74149c8696d66e1c1d8425e170660a075eaa25c1e90875b336a60000300008b256ce5c02ddc4a001ef03ce5b0b2e3e051a918286c48b667901f7cba8df7300003080009e49ec6e74ab8569dcc2156cbed3fce0bb015b59837a45344e8b5b8a19e4e9000030800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000070dbda3c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad59c1301636fa66d7c0eab53eae8da613c6b69a0f05730bb4c8cfa1feab060b207375450000000b0000002400000000000000000000000000000000000000000000000000000000000bed28ec000100f3976bf73d26d2d6e010e5b849c41128e785d25a3ab8303448fe0b4e9fa202000202722dc983ea7b9963878a27e3fcc690674628a596a42949eae01aa2e284375d00000000000000000000000000000000000000000000000000000000000003e71c5e350766d6ae7c45abf76a3ce829e8e2db6d603a9a3d4e28af3df99929bd9700000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000104d393fda812fe89b20e812dfb79be09738be1a1ce2ca26ce5c601e0afc862dd000217ddfd3ca5e72090b830a5e809b9d29aa455a15b61f165030f1b515738cb31c100000000000000000000000000000000000000000000000000000000000003e7016d0e9cf1b97811c3b0b4d9aa6a01bc2bc906a023be0f5dbf5883e7443b25e200000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000105304a3a6058e4ca0f3cc67f95a2b4553cbe8319fa276126581fdfcd59cb4b100002176d460bcad8425779886202cb8160d6ce65654285b26992f94d912181a843d000000000000000000000000000000000000000000000000000000000000003e7066279451caa3f1eeb975ee89941ef936200eca4a1a26fac831c886dd5914dec00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001067c593e69af9ee0a544627934c31e057786b4d3750c61498205e566464d84e000020529412e2caac822e870b247ddb9b45c5dac8460f78e6e854c11d7d1b894312300000000000000000000000000000000000000000000000000000000000003e7011d70a67015cf64a3553b0aa53b84b15dca1070d9aba315998d524503fb81c700000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010eacb0bf6faa2c3799d439dc1370750f894678dd7c26f927ea0215db38a3e46100022cc968259fdbaec8dce510e0c0fdb53f319a892ee7e243622712a1214758550e00000000000000000000000000000000000000000000000000000000000003e7063c4e9483fab54a5c4ceaa196d9f974e1a79fb3e37f566b0cef90f948d147e000000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010f7c223c189ebe25a70c1bdd451e9b490fa8b5155ca30d440b9f708f35af93bf0002056f47b76b37b7ea837c2a1c1fb1c3335856b2b1f8234b5e45a54849bfe626fc00000000000000000000000000000000000000000000000000000000000003e72cc968259fdbaec8dce510e0c0fdb53f319a892ee7e243622712a1214758550e00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000110c9e2d6531c5e8b88461d5335900f7f8c59d05ecb0958f6397af2fd548b9f71000203b633211ac2a8010e05cc24fc75b89ea9764e303803ea5164d58d6564e3a34f00000000000000000000000000000000000000000000000000000000000003e70529412e2caac822e870b247ddb9b45c5dac8460f78e6e854c11d7d1b894312300000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000111fc97191056c5dd044abb3d28f64dfb07ff6b1827d752b712794f1506e5e15f0002066279451caa3f1eeb975ee89941ef936200eca4a1a26fac831c886dd5914dec00000000000000000000000000000000000000000000000000000000000003e805617eabdb4b9866e51690d1556b5862ca7a54de9e74b6f0d8e83cfbb7ba8b4d00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000112d08e835a4488e64879c6821926d0922bffed9c157af90383a4359eb814efd600020b71c4bf1b6ca944f0f7b27abf87f028527fe2ee6109cd0c4dcbef89680ff54c00000000000000000000000000000000000000000000000000000000000003e729d6b3c3179ec53ca890e77a984f9dada05242a31f000ea47b1be1cd7839197500000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011407ea2d506529394fd7de7d0e4d77f5fe38597efc3973f3c9eb6fe546f7331000021d930249dbf757666373a8dafab99b8cbf6fb7fef3452181fc63392c6a89caed00000000000000000000000000000000000000000000000000000000000003e703b633211ac2a8010e05cc24fc75b89ea9764e303803ea5164d58d6564e3a34f00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001145eba97d93d65ad8f587e1116f6aad0b1c121400b94ff2c1211e1f27d63432b00022d7d0f2efeaa182176d6ffef73436b1cb172bba30942e898f26a7e11a6482fe700000000000000000000000000000000000000000000000000000000000003e72d4652a079712bd8d06d585f4d11aee5dbc03ff98dcf3ed5f135fe6b513a8d9b00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011468cdacfcfabe7bf4f9e94826450b129026ad853d7e1336475caf13bf669a3600020f502211f8603476d9c20225bb3b7606859a3f39a19e2cf0d97529f9de3aae1000000000000000000000000000000000000000000000000000000000000003e72a5332a1e62f0f63be898ed80aca44562c73d5edcfca002bac2ccb147207119300000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001147622ae46feca66f95faf2c771de218fa3aadb038c1af065841fe9aaa5ffef400022a3d3269c7ab4e365aefde47af42e9ec39e4233336678ccb9fc7d42953c87d1f00000000000000000000000000000000000000000000000000000000000003e714ac88a46d4926c114ba808ae4c56000689ffa862f347339a419dd3d971d8bb200000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000114cffd6930454470a6e98a0cca87729d5a8b1b58aadfdfa0bfe958f02aeadaf100020e15a517e2880b5c8c23b6c914a00144fdfe1959dd4d421a8158d193de55ac8900000000000000000000000000000000000000000000000000000000000003e729701a66f2d436f8796a4ca058a4d9d8157df9adcedfe7e105b646ee84deb62400000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001153e11efbe137bbe2c5530a057a5b956c9632aeeb159c5eb68127733959d21400002146f3c3109213edd135054e8a4614daa39c2d6d2e4a62e3bba93ebb66520b68e00000000000000000000000000000000000000000000000000000000000003e70190857f4d6ad63c5132e9c9f21bd7d462d5882152476825ac7d4e345d515b9500000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000115aefcd033c1f674eaac12f48ccc4908c7a6ef3fc504f6bf23b93cb1c37c12be000205617eabdb4b9866e51690d1556b5862ca7a54de9e74b6f0d8e83cfbb7ba8b4d00000000000000000000000000000000000000000000000000000000000003e81f3d78d1b5c84393c4cb85a6de369b5cce9f925cac3824494e85c0c74c7070a100000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000116ee272d8b29d43a671dde636df757d117ddf95089646b33c9d988b78b8349f900022d1406afd9ab272d1d69d07663260f8354d919ee2c26fc2f7dba5f2481e2658d00000000000000000000000000000000000000000000000000000000000003e7028b92dc59c0e639a67b5800142868d3eb41d46f26a3d8ce08c71bf4d2e78d4b00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000117fed5d5329866b523b661efcbcf7d490f33fca75325b39b7097b42d69fee2af0002063c4e9483fab54a5c4ceaa196d9f974e1a79fb3e37f566b0cef90f948d147e000000000000000000000000000000000000000000000000000000000000003e81c3ccba76206d231c3f5983b1b01385a9f57a5ebe7d9c6caeab20e6077bb7db600000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000119ccc809eb51676e78eb2a3425f15e38ddae6d3618919f235ef045751ce6d509000229d6b3c3179ec53ca890e77a984f9dada05242a31f000ea47b1be1cd7839197500000000000000000000000000000000000000000000000000000000000003e80c4c86b9161d90f4137c5a977595dd4effad4cf74d46d4632c78d1e4e22df73e00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000119f4fd529b6d37b5323843236b67429e4193cd6b4bb5d0e8179fbfceaa0573870002016d0e9cf1b97811c3b0b4d9aa6a01bc2bc906a023be0f5dbf5883e7443b25e200000000000000000000000000000000000000000000000000000000000003e809f893ce014878f27f6f579c11de3f0f51a16d175834b9714264cacd893ed75800000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011e2f7f93171a216d404dd118e72e4ff5b7fcf38e2b0e70aab2549e60b3796cfd00020d66061d89df3e08d8ea36e71e053602871895c6b877ed3357c072f90a4bbad200000000000000000000000000000000000000000000000000000000000003e70b71c4bf1b6ca944f0f7b27abf87f028527fe2ee6109cd0c4dcbef89680ff54c00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011e3353ffaeade63e03b089abe65ab926b3295fc88edce9cdc05db40cafc2f3b9000229701a66f2d436f8796a4ca058a4d9d8157df9adcedfe7e105b646ee84deb62400000000000000000000000000000000000000000000000000000000000003e8146f3c3109213edd135054e8a4614daa39c2d6d2e4a62e3bba93ebb66520b68e00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011e89ff7778ff581cfa35702e1c1e9c7cd812f6eff47a82d66abe3e717718ecb900021c3ccba76206d231c3f5983b1b01385a9f57a5ebe7d9c6caeab20e6077bb7db600000000000000000000000000000000000000000000000000000000000003e81d930249dbf757666373a8dafab99b8cbf6fb7fef3452181fc63392c6a89caed00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011fa3f003206b30090513db5fd23f3d62d4f76079cb00d3d6cb15666fa671681f000214ac88a46d4926c114ba808ae4c56000689ffa862f347339a419dd3d971d8bb200000000000000000000000000000000000000000000000000000000000003e8056f47b76b37b7ea837c2a1c1fb1c3335856b2b1f8234b5e45a54849bfe626fc00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000121c03275966d18c7ffb1e40a8b9301ad5e3a1182b42f1bc0405019e287024e9200021ed7c45b1b55c1ca09acd74390b67647e370beb59140bf1e6f81cc2fa9c522c900000000000000000000000000000000000000000000000000000000000003e72d1406afd9ab272d1d69d07663260f8354d919ee2c26fc2f7dba5f2481e2658d00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001225519ca6f6a0c9d3b1b0e7c668b68d06f7fb983f71f8448f5135d8c1843d82a00021c5e350766d6ae7c45abf76a3ce829e8e2db6d603a9a3d4e28af3df99929bd9700000000000000000000000000000000000000000000000000000000000003e82a3d3269c7ab4e365aefde47af42e9ec39e4233336678ccb9fc7d42953c87d1f00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001229cdfdea265c5a4dcdebf23a779dc1aa7db5f9894665eaa234897752fdcd28200020c4c86b9161d90f4137c5a977595dd4effad4cf74d46d4632c78d1e4e22df73e00000000000000000000000000000000000000000000000000000000000003e82e3033b9b4319935f6135aa63fd9de84a93dad41202ea18a468f2d40a88192a600000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000124f60e1d54075b19f25e7aec509a6dc33c9cd341bca386dd68dbbc2cf71e2e5e0002028b92dc59c0e639a67b5800142868d3eb41d46f26a3d8ce08c71bf4d2e78d4b00000000000000000000000000000000000000000000000000000000000003e82d7d0f2efeaa182176d6ffef73436b1cb172bba30942e898f26a7e11a6482fe700000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001251a87d013267fc655dfebb765bbb2433f5b6e5b147b469564a026a3efc6765300020190857f4d6ad63c5132e9c9f21bd7d462d5882152476825ac7d4e345d515b9500000000000000000000000000000000000000000000000000000000000003e80f502211f8603476d9c20225bb3b7606859a3f39a19e2cf0d97529f9de3aae1000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012686b5b77f5abf622d9a28ff5a25f3c913e581b21f705f8e0f02acc642f2c52f0002011d70a67015cf64a3553b0aa53b84b15dca1070d9aba315998d524503fb81c700000000000000000000000000000000000000000000000000000000000003e8176d460bcad8425779886202cb8160d6ce65654285b26992f94d912181a843d000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000126d9b341fd90ae8b974a104cac070bb4bf89fba06b44493a81291b7c17b0732d00022d4652a079712bd8d06d585f4d11aee5dbc03ff98dcf3ed5f135fe6b513a8d9b00000000000000000000000000000000000000000000000000000000000003e817ddfd3ca5e72090b830a5e809b9d29aa455a15b61f165030f1b515738cb31c100000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000128c90b50962426c53dd8822280d9633a8135b1f14cb99e176591b5d86540c51e00022e3033b9b4319935f6135aa63fd9de84a93dad41202ea18a468f2d40a88192a600000000000000000000000000000000000000000000000000000000000003e80e15a517e2880b5c8c23b6c914a00144fdfe1959dd4d421a8158d193de55ac8900000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012926e35efa567c6783094414f83893fc1f75e3c830eb2f12b134f153e801e6e0000209f893ce014878f27f6f579c11de3f0f51a16d175834b9714264cacd893ed75800000000000000000000000000000000000000000000000000000000000003e802722dc983ea7b9963878a27e3fcc690674628a596a42949eae01aa2e284375d00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000129429f8c6c4567585e2fdc4a05e1dced0e88278bdbe57c404221ddb6d429c07f000230099bb2ef4bd6d1a39dfc44097ee011c2252bb0b6a3ea372c41fecc9d77c0b900000000000000000000000000000000000000000000000000000000000003e70d66061d89df3e08d8ea36e71e053602871895c6b877ed3357c072f90a4bbad200000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012afc639f8ce00706a40418db93bdf5b7abf50442f6acbbedde91d3fcda546c8f00022a5332a1e62f0f63be898ed80aca44562c73d5edcfca002bac2ccb147207119300000000000000000000000000000000000000000000000000000000000003e81ed7c45b1b55c1ca09acd74390b67647e370beb59140bf1e6f81cc2fa9c522c900000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012b4a675ba422efd49b0342566bb8383a57a1e1df59a88ef6a0f42c158f9c868c00021f3d78d1b5c84393c4cb85a6de369b5cce9f925cac3824494e85c0c74c7070a100000000000000000000000000000000000000000000000000000000000003e830099bb2ef4bd6d1a39dfc44097ee011c2252bb0b6a3ea372c41fecc9d77c0b900000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000400000000000000080000000000000000", + "1636fa66d7c0eab53eae8da613c6b69a0f05730bb4c8cfa1feab060b207375450000000c000000000000000000000000000000000000000000000000000000000000002400f52462a1cb0629235ff61622931bfd20646b40358bb2f29a195b00f125f30d00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000c00b4847062e5e74149c8696d66e1c1d8425e170660a075eaa25c1e90875b336a60000390029b163bc87799004985cc75907edd2893f08af78aea0907b257e3ab2547f896100003980009e49ec6e74ab8569dcc2156cbed3fce0bb015b59837a45344e8b5b8a19e4e9000039800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000070dbda60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad59c1301477592fe7071d24a8d2cccf059e21982fe00e17187c0900b09c3ff343c02e590000000c0000002400000000000000000000000000000000000000000000000000000000000bed28ec000100f3d8333afeafa0dd516770bf27cc79bad674f7540dbb6b938f843b82ffa45c00020d66061d89df3e08d8ea36e71e053602871895c6b877ed3357c072f90a4bbad200000000000000000000000000000000000000000000000000000000000003e70b71c4bf1b6ca944f0f7b27abf87f028527fe2ee6109cd0c4dcbef89680ff54c00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010110ef132d1d61b640382b1fe4e9e7e0e006b3bd72d568c801e7afd9c94d9f6500022d1406afd9ab272d1d69d07663260f8354d919ee2c26fc2f7dba5f2481e2658d00000000000000000000000000000000000000000000000000000000000003e7028b92dc59c0e639a67b5800142868d3eb41d46f26a3d8ce08c71bf4d2e78d4b00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001017a5dcdcbac8695100fb42a6b6588e632cdaa12980e9f989abc81f50deaab29000214ac88a46d4926c114ba808ae4c56000689ffa862f347339a419dd3d971d8bb200000000000000000000000000000000000000000000000000000000000003e7056f47b76b37b7ea837c2a1c1fb1c3335856b2b1f8234b5e45a54849bfe626fc00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000102ed4b4b6ec69d9693a4b87ad2a94c62acfa2f28fca5f7da0c24fad7b98ea31c00022d7d0f2efeaa182176d6ffef73436b1cb172bba30942e898f26a7e11a6482fe700000000000000000000000000000000000000000000000000000000000003e72d4652a079712bd8d06d585f4d11aee5dbc03ff98dcf3ed5f135fe6b513a8d9b00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000105791cf5430d2f0937537b1e6d6f13d623e7473648a6ff30284b7b262cef8aa800020e15a517e2880b5c8c23b6c914a00144fdfe1959dd4d421a8158d193de55ac8900000000000000000000000000000000000000000000000000000000000003e729701a66f2d436f8796a4ca058a4d9d8157df9adcedfe7e105b646ee84deb62400000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010584778facd4ea80866b20605f53f6fe4337e12cc234ce4e67d20e1427817d7c00022e3033b9b4319935f6135aa63fd9de84a93dad41202ea18a468f2d40a88192a600000000000000000000000000000000000000000000000000000000000003e70e15a517e2880b5c8c23b6c914a00144fdfe1959dd4d421a8158d193de55ac8900000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000105971b35c84831a82b23ca2539ea4b2120dc08d79afeb588d0d133d21cff4d9c00022a5332a1e62f0f63be898ed80aca44562c73d5edcfca002bac2ccb147207119300000000000000000000000000000000000000000000000000000000000003e71ed7c45b1b55c1ca09acd74390b67647e370beb59140bf1e6f81cc2fa9c522c900000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000105a06228d9d96af76fee3d722483bb58a4828ac5f072faf25688a0ea3266a64b000230099bb2ef4bd6d1a39dfc44097ee011c2252bb0b6a3ea372c41fecc9d77c0b900000000000000000000000000000000000000000000000000000000000003e70d66061d89df3e08d8ea36e71e053602871895c6b877ed3357c072f90a4bbad200000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010a7e777c8f32fef1653900386de5d94b63a627d0002cf568e20ea2b4ac54caf40002146f3c3109213edd135054e8a4614daa39c2d6d2e4a62e3bba93ebb66520b68e00000000000000000000000000000000000000000000000000000000000003e70190857f4d6ad63c5132e9c9f21bd7d462d5882152476825ac7d4e345d515b9500000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010ad48f34e72a431f3b43c6af05ed5f06effe8b46f27707b6ffb36b59ece44f460002056f47b76b37b7ea837c2a1c1fb1c3335856b2b1f8234b5e45a54849bfe626fc00000000000000000000000000000000000000000000000000000000000003e82cc968259fdbaec8dce510e0c0fdb53f319a892ee7e243622712a1214758550e00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010b59e870ad6a163f06ec5102a82afc6bf59eecdfcf33e4df2b5a574329f38b460002016d0e9cf1b97811c3b0b4d9aa6a01bc2bc906a023be0f5dbf5883e7443b25e200000000000000000000000000000000000000000000000000000000000003e709f893ce014878f27f6f579c11de3f0f51a16d175834b9714264cacd893ed75800000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011046bdd1d0662fe78c34c0a9e7c99afb8c0b7c8d41d3b32f14fc662006c00056000203b633211ac2a8010e05cc24fc75b89ea9764e303803ea5164d58d6564e3a34f00000000000000000000000000000000000000000000000000000000000003e70529412e2caac822e870b247ddb9b45c5dac8460f78e6e854c11d7d1b894312300000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011059e135a1b89fb933d509c76b586fa0466e45b5524b2d5f2f81863332ca4b0800021d930249dbf757666373a8dafab99b8cbf6fb7fef3452181fc63392c6a89caed00000000000000000000000000000000000000000000000000000000000003e703b633211ac2a8010e05cc24fc75b89ea9764e303803ea5164d58d6564e3a34f00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001127b70000c94b691c46b178050c0302bc64da87ea8a6770e866896facf7f82ca0002011d70a67015cf64a3553b0aa53b84b15dca1070d9aba315998d524503fb81c700000000000000000000000000000000000000000000000000000000000003e7176d460bcad8425779886202cb8160d6ce65654285b26992f94d912181a843d000000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011383243dea45b50c4e4f3fb42da8d293642a777da2520006f6b373f0b32a0803000217ddfd3ca5e72090b830a5e809b9d29aa455a15b61f165030f1b515738cb31c100000000000000000000000000000000000000000000000000000000000003e7016d0e9cf1b97811c3b0b4d9aa6a01bc2bc906a023be0f5dbf5883e7443b25e200000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000116798009a745a308fda59b5f154df2da0c41046753f6d3945d4ca50dc0a25e3800022a3d3269c7ab4e365aefde47af42e9ec39e4233336678ccb9fc7d42953c87d1f00000000000000000000000000000000000000000000000000000000000003e714ac88a46d4926c114ba808ae4c56000689ffa862f347339a419dd3d971d8bb200000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011799216c5a877c8dcf1befe52d3c4357f663c9153b53c24c97abe41743e27a5800021c3ccba76206d231c3f5983b1b01385a9f57a5ebe7d9c6caeab20e6077bb7db600000000000000000000000000000000000000000000000000000000000003e71d930249dbf757666373a8dafab99b8cbf6fb7fef3452181fc63392c6a89caed00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001182c8ffefd73d70bce9eb5e6b1fb9eaa6f373eaffdc18ec0b2376d9f773986d900021ed7c45b1b55c1ca09acd74390b67647e370beb59140bf1e6f81cc2fa9c522c900000000000000000000000000000000000000000000000000000000000003e82d1406afd9ab272d1d69d07663260f8354d919ee2c26fc2f7dba5f2481e2658d00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011deeac39b42163dc988e3e4c8657a13ddbf0b3effec978e0ddaa2a1085bd248300021c5e350766d6ae7c45abf76a3ce829e8e2db6d603a9a3d4e28af3df99929bd9700000000000000000000000000000000000000000000000000000000000003e72a3d3269c7ab4e365aefde47af42e9ec39e4233336678ccb9fc7d42953c87d1f00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011f72782496e4e2b2249788b93e4eeff89821480442bd0ce0a7364cadbee63e5f00021f3d78d1b5c84393c4cb85a6de369b5cce9f925cac3824494e85c0c74c7070a100000000000000000000000000000000000000000000000000000000000003e730099bb2ef4bd6d1a39dfc44097ee011c2252bb0b6a3ea372c41fecc9d77c0b900000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012096b1392e848aef9aaf7ce6e7f8d1ab21dbe37590289e7566762ff2f6e1b4f20002028b92dc59c0e639a67b5800142868d3eb41d46f26a3d8ce08c71bf4d2e78d4b00000000000000000000000000000000000000000000000000000000000003e82d7d0f2efeaa182176d6ffef73436b1cb172bba30942e898f26a7e11a6482fe700000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001215bec3aff85e11671dbe56f7cb340b13fb723d11f95a5d8a3c5bbb199385fef00020529412e2caac822e870b247ddb9b45c5dac8460f78e6e854c11d7d1b894312300000000000000000000000000000000000000000000000000000000000003e8011d70a67015cf64a3553b0aa53b84b15dca1070d9aba315998d524503fb81c700000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012213da5ab170311e1327faf33d1343c0f636a9878777b60b94febfb851202c0c0002066279451caa3f1eeb975ee89941ef936200eca4a1a26fac831c886dd5914dec00000000000000000000000000000000000000000000000000000000000003e705617eabdb4b9866e51690d1556b5862ca7a54de9e74b6f0d8e83cfbb7ba8b4d00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001221f087691e0a62259912c01a463f0b47a4aac65903c98addc293f573c5310cf000229d6b3c3179ec53ca890e77a984f9dada05242a31f000ea47b1be1cd7839197500000000000000000000000000000000000000000000000000000000000003e70c4c86b9161d90f4137c5a977595dd4effad4cf74d46d4632c78d1e4e22df73e00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000122b7418a182d05f8df427cd80f3929d08c73f46d8c57ad54bad7a9e7784494ed000209f893ce014878f27f6f579c11de3f0f51a16d175834b9714264cacd893ed75800000000000000000000000000000000000000000000000000000000000003e802722dc983ea7b9963878a27e3fcc690674628a596a42949eae01aa2e284375d00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000122e68fab2a8c537a23805cd1288c6a76d15a23d4dd16055f640af86b64f9dd650002176d460bcad8425779886202cb8160d6ce65654285b26992f94d912181a843d000000000000000000000000000000000000000000000000000000000000003e8066279451caa3f1eeb975ee89941ef936200eca4a1a26fac831c886dd5914dec00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000124c7aa4c73b95845bbe9cc59de1ada20752bf3f67659a25ba28c785d732c10860002063c4e9483fab54a5c4ceaa196d9f974e1a79fb3e37f566b0cef90f948d147e000000000000000000000000000000000000000000000000000000000000003e71c3ccba76206d231c3f5983b1b01385a9f57a5ebe7d9c6caeab20e6077bb7db600000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001251b77370df7edfdb7525e9478a40005d443eb9851b3942fb26d4d704c3c878800022cc968259fdbaec8dce510e0c0fdb53f319a892ee7e243622712a1214758550e00000000000000000000000000000000000000000000000000000000000003e8063c4e9483fab54a5c4ceaa196d9f974e1a79fb3e37f566b0cef90f948d147e000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012574c115389784d422feced57a42131992011567894055ceb76c9eee23998c48000205617eabdb4b9866e51690d1556b5862ca7a54de9e74b6f0d8e83cfbb7ba8b4d00000000000000000000000000000000000000000000000000000000000003e81f3d78d1b5c84393c4cb85a6de369b5cce9f925cac3824494e85c0c74c7070a100000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000127eac30a5a00d38cb4b06f2bebc16657411855250ad0210a5cc711592a755e83000202722dc983ea7b9963878a27e3fcc690674628a596a42949eae01aa2e284375d00000000000000000000000000000000000000000000000000000000000003e81c5e350766d6ae7c45abf76a3ce829e8e2db6d603a9a3d4e28af3df99929bd9700000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000128a2a4291a7a68a6d1d9efc16a3315a1c4f2d31c5751243eccecba086fd6c05900022d4652a079712bd8d06d585f4d11aee5dbc03ff98dcf3ed5f135fe6b513a8d9b00000000000000000000000000000000000000000000000000000000000003e817ddfd3ca5e72090b830a5e809b9d29aa455a15b61f165030f1b515738cb31c100000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001295a122add9e1904c48b45a416d8dc331d15c9fb83141a416ad60c58e45ede5400020f502211f8603476d9c20225bb3b7606859a3f39a19e2cf0d97529f9de3aae1000000000000000000000000000000000000000000000000000000000000003e72a5332a1e62f0f63be898ed80aca44562c73d5edcfca002bac2ccb147207119300000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012d313359db89410367e8f202398bdb2b9f03943106a03f4758784ee6142dfa6900020190857f4d6ad63c5132e9c9f21bd7d462d5882152476825ac7d4e345d515b9500000000000000000000000000000000000000000000000000000000000003e80f502211f8603476d9c20225bb3b7606859a3f39a19e2cf0d97529f9de3aae1000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012f3bc6759b9929bd45a065da4d457e5d1bceb2ec8843ae7fab3f4915b875e7df00020c4c86b9161d90f4137c5a977595dd4effad4cf74d46d4632c78d1e4e22df73e00000000000000000000000000000000000000000000000000000000000003e82e3033b9b4319935f6135aa63fd9de84a93dad41202ea18a468f2d40a88192a600000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012f69d585b4b9214c117cc40b79b2c78134aa89a36810c06255af17ef95a1a70800020b71c4bf1b6ca944f0f7b27abf87f028527fe2ee6109cd0c4dcbef89680ff54c00000000000000000000000000000000000000000000000000000000000003e829d6b3c3179ec53ca890e77a984f9dada05242a31f000ea47b1be1cd7839197500000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012fc971b5d5d4b6b49a0f848fca96f61bad1e677eb2980d31ff2f57a8fc03efaa000229701a66f2d436f8796a4ca058a4d9d8157df9adcedfe7e105b646ee84deb62400000000000000000000000000000000000000000000000000000000000003e8146f3c3109213edd135054e8a4614daa39c2d6d2e4a62e3bba93ebb66520b68e00000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000400000000000000080000000000000000", + "1477592fe7071d24a8d2cccf059e21982fe00e17187c0900b09c3ff343c02e590000000d00000000000000000000000000000000000000000000000000000000000000240094a7a9926acecf449bb07b074b6bf9168a51fccc680764e625dbdd16c3320700089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000d00b4847062e5e74149c8696d66e1c1d8425e170660a075eaa25c1e90875b336a6000042000367552175d2058574ee7b2a2bd14cabe0568d5da17c23c6fe4d1980809286a400004280009e49ec6e74ab8569dcc2156cbed3fce0bb015b59837a45344e8b5b8a19e4e9000042800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000070dbda84000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad59c13018ea8f766df72c41e0eb6060c45a952ce966dbed723746bd7be479c2c332cdcd0000000d0000002400000000000000000000000000000000000000000000000000000000000bed28ec000100a7564f0a4171e4675702793d91e6da91fc7bcd39f104d2a5d4d33fdf2f01650002063c4e9483fab54a5c4ceaa196d9f974e1a79fb3e37f566b0cef90f948d147e000000000000000000000000000000000000000000000000000000000000003e71c3ccba76206d231c3f5983b1b01385a9f57a5ebe7d9c6caeab20e6077bb7db600000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000100ab9befdbe3e115dc40455ae5aa9d2320cac2d53af2ecf4ba20954633b7d1d100021f3d78d1b5c84393c4cb85a6de369b5cce9f925cac3824494e85c0c74c7070a100000000000000000000000000000000000000000000000000000000000003e730099bb2ef4bd6d1a39dfc44097ee011c2252bb0b6a3ea372c41fecc9d77c0b900000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000103079cf2ac2eddbd7d5df5a6071b459214a92aa8de2fb9a5abe48d9b3d8c940a00021d930249dbf757666373a8dafab99b8cbf6fb7fef3452181fc63392c6a89caed00000000000000000000000000000000000000000000000000000000000003e703b633211ac2a8010e05cc24fc75b89ea9764e303803ea5164d58d6564e3a34f00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001034c03466e0297c39d5b4546eafd22045ce7a6355058dcae8e5c5728afa41559000205617eabdb4b9866e51690d1556b5862ca7a54de9e74b6f0d8e83cfbb7ba8b4d00000000000000000000000000000000000000000000000000000000000003e71f3d78d1b5c84393c4cb85a6de369b5cce9f925cac3824494e85c0c74c7070a100000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000105a0457c3345b3ae7eac7fea5f286f55bea86d41cf4f6c409d0f3a3a1acbe0f500020e15a517e2880b5c8c23b6c914a00144fdfe1959dd4d421a8158d193de55ac8900000000000000000000000000000000000000000000000000000000000003e729701a66f2d436f8796a4ca058a4d9d8157df9adcedfe7e105b646ee84deb62400000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000106e4cf48d373b8a75e01542d81cfacafcfaba2fbbaaf98f147deecf9ee389a88000202722dc983ea7b9963878a27e3fcc690674628a596a42949eae01aa2e284375d00000000000000000000000000000000000000000000000000000000000003e71c5e350766d6ae7c45abf76a3ce829e8e2db6d603a9a3d4e28af3df99929bd9700000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000107a88bdea1abe54ae51062a5e7848c01cad1dfdb672ac319a23e964533e1a5760002146f3c3109213edd135054e8a4614daa39c2d6d2e4a62e3bba93ebb66520b68e00000000000000000000000000000000000000000000000000000000000003e70190857f4d6ad63c5132e9c9f21bd7d462d5882152476825ac7d4e345d515b9500000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000107eab0cbc217c3e8d8975ef8955248bd345b273355388ea1035579442df5d6c4000214ac88a46d4926c114ba808ae4c56000689ffa862f347339a419dd3d971d8bb200000000000000000000000000000000000000000000000000000000000003e7056f47b76b37b7ea837c2a1c1fb1c3335856b2b1f8234b5e45a54849bfe626fc00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000109a2b49332b6c8c6c95421ddb349a71b68bd40cb1b0f54c7afd74fb12982a4d4000229701a66f2d436f8796a4ca058a4d9d8157df9adcedfe7e105b646ee84deb62400000000000000000000000000000000000000000000000000000000000003e8146f3c3109213edd135054e8a4614daa39c2d6d2e4a62e3bba93ebb66520b68e00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010b28f47f26bb15fcdd879098a76b59d265793de7eebd9d5a9a966a9a0c6b87a70002066279451caa3f1eeb975ee89941ef936200eca4a1a26fac831c886dd5914dec00000000000000000000000000000000000000000000000000000000000003e705617eabdb4b9866e51690d1556b5862ca7a54de9e74b6f0d8e83cfbb7ba8b4d00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010b4e5b46d7a840a250ea7e9eb39644eda5808ae6bcb0e1038e99e7a8693a7af700022a5332a1e62f0f63be898ed80aca44562c73d5edcfca002bac2ccb147207119300000000000000000000000000000000000000000000000000000000000003e71ed7c45b1b55c1ca09acd74390b67647e370beb59140bf1e6f81cc2fa9c522c900000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010b866068fc3f5bf8bf5e045fdbf9eea40d1e4dab5d61f9c2b2921bd298b2f75300020b71c4bf1b6ca944f0f7b27abf87f028527fe2ee6109cd0c4dcbef89680ff54c00000000000000000000000000000000000000000000000000000000000003e729d6b3c3179ec53ca890e77a984f9dada05242a31f000ea47b1be1cd7839197500000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010be98d34e9f486f83cc6256ca5bb957242ec68798ebf27ed3b89c2d0072d3bb900022d4652a079712bd8d06d585f4d11aee5dbc03ff98dcf3ed5f135fe6b513a8d9b00000000000000000000000000000000000000000000000000000000000003e717ddfd3ca5e72090b830a5e809b9d29aa455a15b61f165030f1b515738cb31c100000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010d2e915e2b0d45737958a7dd3994e6ff617691149868220c638c147096731a5800021ed7c45b1b55c1ca09acd74390b67647e370beb59140bf1e6f81cc2fa9c522c900000000000000000000000000000000000000000000000000000000000003e82d1406afd9ab272d1d69d07663260f8354d919ee2c26fc2f7dba5f2481e2658d00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010dcffa7257f782d7addeb40372a9c6f18f1461ff5eb3adbc9b4643ea7df162f300022e3033b9b4319935f6135aa63fd9de84a93dad41202ea18a468f2d40a88192a600000000000000000000000000000000000000000000000000000000000003e70e15a517e2880b5c8c23b6c914a00144fdfe1959dd4d421a8158d193de55ac8900000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011175d56e16f09f378662e2c6f2e9b5a05ba6a94c809881f349012a3ce686190f00020f502211f8603476d9c20225bb3b7606859a3f39a19e2cf0d97529f9de3aae1000000000000000000000000000000000000000000000000000000000000003e72a5332a1e62f0f63be898ed80aca44562c73d5edcfca002bac2ccb147207119300000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001119789f6fb05b8687e2debc0f02b3e62a76532ff80ad633daa6b1d4e7bf29436000217ddfd3ca5e72090b830a5e809b9d29aa455a15b61f165030f1b515738cb31c100000000000000000000000000000000000000000000000000000000000003e8016d0e9cf1b97811c3b0b4d9aa6a01bc2bc906a023be0f5dbf5883e7443b25e200000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001152a8c37635c8299a7e10e4b010a5385381888bcd76cc583967998be25d61cec0002176d460bcad8425779886202cb8160d6ce65654285b26992f94d912181a843d000000000000000000000000000000000000000000000000000000000000003e7066279451caa3f1eeb975ee89941ef936200eca4a1a26fac831c886dd5914dec00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001158892202b8180860f9d5c1e02f6563c92de9cf0b408c4a22f985268edb8a1ee00022d1406afd9ab272d1d69d07663260f8354d919ee2c26fc2f7dba5f2481e2658d00000000000000000000000000000000000000000000000000000000000003e8028b92dc59c0e639a67b5800142868d3eb41d46f26a3d8ce08c71bf4d2e78d4b00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000115ccd7080c9453c64ae6e8bd623a3d9a837c7c6ebd908fc912ff6a67be7516480002056f47b76b37b7ea837c2a1c1fb1c3335856b2b1f8234b5e45a54849bfe626fc00000000000000000000000000000000000000000000000000000000000003e82cc968259fdbaec8dce510e0c0fdb53f319a892ee7e243622712a1214758550e00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001175131d381d1485af35e4a60e1f8675ed0b3c5a55d70cc169a0ecf16b6b0eb120002011d70a67015cf64a3553b0aa53b84b15dca1070d9aba315998d524503fb81c700000000000000000000000000000000000000000000000000000000000003e7176d460bcad8425779886202cb8160d6ce65654285b26992f94d912181a843d000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011a37b42465f4150980d43e4fce12b1e277e55f38a16b7e30e2c318b65819e47100020d66061d89df3e08d8ea36e71e053602871895c6b877ed3357c072f90a4bbad200000000000000000000000000000000000000000000000000000000000003e70b71c4bf1b6ca944f0f7b27abf87f028527fe2ee6109cd0c4dcbef89680ff54c00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011a4cd482afde13427d2088ba70f672bd1bca8dbd4bbdb9904618b71c4f06888500020529412e2caac822e870b247ddb9b45c5dac8460f78e6e854c11d7d1b894312300000000000000000000000000000000000000000000000000000000000003e7011d70a67015cf64a3553b0aa53b84b15dca1070d9aba315998d524503fb81c700000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011d586270afbd158a0f042387aae0abd226df269f6a706578b37fe882788535a5000230099bb2ef4bd6d1a39dfc44097ee011c2252bb0b6a3ea372c41fecc9d77c0b900000000000000000000000000000000000000000000000000000000000003e80d66061d89df3e08d8ea36e71e053602871895c6b877ed3357c072f90a4bbad200000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000120763bc6de2946fad4be0bb8135000613765226c036c03de0a8893db99bbed82000229d6b3c3179ec53ca890e77a984f9dada05242a31f000ea47b1be1cd7839197500000000000000000000000000000000000000000000000000000000000003e80c4c86b9161d90f4137c5a977595dd4effad4cf74d46d4632c78d1e4e22df73e00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001208d46e70a66a7ca416ebfa21be829c58d27713d2b24ae304af8c10f2d77867e00021c5e350766d6ae7c45abf76a3ce829e8e2db6d603a9a3d4e28af3df99929bd9700000000000000000000000000000000000000000000000000000000000003e82a3d3269c7ab4e365aefde47af42e9ec39e4233336678ccb9fc7d42953c87d1f00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001213924aaf8fb3dc484f69bce8607981aac1cc993748963022e346ebed9e93bf70002016d0e9cf1b97811c3b0b4d9aa6a01bc2bc906a023be0f5dbf5883e7443b25e200000000000000000000000000000000000000000000000000000000000003e809f893ce014878f27f6f579c11de3f0f51a16d175834b9714264cacd893ed75800000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000122c3066671b6b82b59a94a7ff2c62f93d0196181cf5106df4de2be2b0b6261b800021c3ccba76206d231c3f5983b1b01385a9f57a5ebe7d9c6caeab20e6077bb7db600000000000000000000000000000000000000000000000000000000000003e81d930249dbf757666373a8dafab99b8cbf6fb7fef3452181fc63392c6a89caed00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012539689b4f853531487a40f79b644c562634443cbad2f1507c450b73d6fd153a000209f893ce014878f27f6f579c11de3f0f51a16d175834b9714264cacd893ed75800000000000000000000000000000000000000000000000000000000000003e802722dc983ea7b9963878a27e3fcc690674628a596a42949eae01aa2e284375d00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000125a6a04ab4bc73a2a19e124e58c902ba6a1198ee8a93569b2c4ed3d66d927638000203b633211ac2a8010e05cc24fc75b89ea9764e303803ea5164d58d6564e3a34f00000000000000000000000000000000000000000000000000000000000003e80529412e2caac822e870b247ddb9b45c5dac8460f78e6e854c11d7d1b894312300000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000125faa78d9d3969df5cbaaa745502759e80b47539a065f2805d50575d3ee734ea00020c4c86b9161d90f4137c5a977595dd4effad4cf74d46d4632c78d1e4e22df73e00000000000000000000000000000000000000000000000000000000000003e82e3033b9b4319935f6135aa63fd9de84a93dad41202ea18a468f2d40a88192a600000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000126c5e1877a4c63960d711bbd5f62f8d5b10bd82e5bb44e438ead640a139029ff00022a3d3269c7ab4e365aefde47af42e9ec39e4233336678ccb9fc7d42953c87d1f00000000000000000000000000000000000000000000000000000000000003e814ac88a46d4926c114ba808ae4c56000689ffa862f347339a419dd3d971d8bb200000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012b4dab1f2f0ab210e0bc48d3a076d76fcdffa4614c58218a62b0e74345fe570f00020190857f4d6ad63c5132e9c9f21bd7d462d5882152476825ac7d4e345d515b9500000000000000000000000000000000000000000000000000000000000003e80f502211f8603476d9c20225bb3b7606859a3f39a19e2cf0d97529f9de3aae1000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012d1a2751c7d95c338454cb06e1b97cbf5cdf33c3941e072ccc87f930576a04a00002028b92dc59c0e639a67b5800142868d3eb41d46f26a3d8ce08c71bf4d2e78d4b00000000000000000000000000000000000000000000000000000000000003e82d7d0f2efeaa182176d6ffef73436b1cb172bba30942e898f26a7e11a6482fe700000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012e7d01764247e1b6a84aea97f02861d83b3a96f2f4afa4b5e87d7ac382b5061c00022d7d0f2efeaa182176d6ffef73436b1cb172bba30942e898f26a7e11a6482fe700000000000000000000000000000000000000000000000000000000000003e82d4652a079712bd8d06d585f4d11aee5dbc03ff98dcf3ed5f135fe6b513a8d9b00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012e7d7b3c517eca77123048932766e8b13a6dd2ebae74a4e4cff1c34b606c642900022cc968259fdbaec8dce510e0c0fdb53f319a892ee7e243622712a1214758550e00000000000000000000000000000000000000000000000000000000000003e8063c4e9483fab54a5c4ceaa196d9f974e1a79fb3e37f566b0cef90f948d147e000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000400000000000000080000000000000000", + "18ea8f766df72c41e0eb6060c45a952ce966dbed723746bd7be479c2c332cdcd0000000e00000000000000000000000000000000000000000000000000000000000000240027629fbe87f5c6011048fa71c3c82cdb0994582517962bda5cdf582206d63a00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000e00b4847062e5e74149c8696d66e1c1d8425e170660a075eaa25c1e90875b336a600004b000d609af609bdd4a8db04b7152f681f3f6e6d408ea2edbf7f276fc6370c0111a200004b80009e49ec6e74ab8569dcc2156cbed3fce0bb015b59837a45344e8b5b8a19e4e900004b800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000070dbdaa8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad59c1300ebd3ad291e93e98418e0a0f28056d90d77ede41523752f6579349aba50801ae0000000e0000002400000000000000000000000000000000000000000000000000000000000bed28ec0001018de3fd53a834bc52a617fb71f17a062d89a72ba1b95cbcf7f600571958fea300022a3d3269c7ab4e365aefde47af42e9ec39e4233336678ccb9fc7d42953c87d1f00000000000000000000000000000000000000000000000000000000000003e714ac88a46d4926c114ba808ae4c56000689ffa862f347339a419dd3d971d8bb200000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001022e6b22fd81943c1864f6bc5a38ae7f7de2f66981f0138db9e48c9de71e1d63000209f893ce014878f27f6f579c11de3f0f51a16d175834b9714264cacd893ed75800000000000000000000000000000000000000000000000000000000000003e702722dc983ea7b9963878a27e3fcc690674628a596a42949eae01aa2e284375d00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001030915cde445910a26eafbc91597c4ac7128a99b6bc2281fb7d76e35068484d600020190857f4d6ad63c5132e9c9f21bd7d462d5882152476825ac7d4e345d515b9500000000000000000000000000000000000000000000000000000000000003e70f502211f8603476d9c20225bb3b7606859a3f39a19e2cf0d97529f9de3aae1000000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001046684087ecdcbeb082a27a5a22319f89a1a8b11d0932c05c6274d30ba745c23000230099bb2ef4bd6d1a39dfc44097ee011c2252bb0b6a3ea372c41fecc9d77c0b900000000000000000000000000000000000000000000000000000000000003e70d66061d89df3e08d8ea36e71e053602871895c6b877ed3357c072f90a4bbad200000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000106e7234eb9fee0f3156e33d038a6fe8e7d2bc729e2f8518907bdff421d4ad15400022cc968259fdbaec8dce510e0c0fdb53f319a892ee7e243622712a1214758550e00000000000000000000000000000000000000000000000000000000000003e7063c4e9483fab54a5c4ceaa196d9f974e1a79fb3e37f566b0cef90f948d147e000000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010725e83d26a27453fa69807aa1068ff95291edcbbac93de3793845b19d7d756f00022d7d0f2efeaa182176d6ffef73436b1cb172bba30942e898f26a7e11a6482fe700000000000000000000000000000000000000000000000000000000000003e72d4652a079712bd8d06d585f4d11aee5dbc03ff98dcf3ed5f135fe6b513a8d9b00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000109145fe64516f71e2fa8eec83d8ede994c8bc5be828a77e73504bfd9dd7b34bb000203b633211ac2a8010e05cc24fc75b89ea9764e303803ea5164d58d6564e3a34f00000000000000000000000000000000000000000000000000000000000003e70529412e2caac822e870b247ddb9b45c5dac8460f78e6e854c11d7d1b894312300000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010920579a5410db7befc4436ee1e4745aa7e14b35f206020ee2dda106461832e70002016d0e9cf1b97811c3b0b4d9aa6a01bc2bc906a023be0f5dbf5883e7443b25e200000000000000000000000000000000000000000000000000000000000003e709f893ce014878f27f6f579c11de3f0f51a16d175834b9714264cacd893ed75800000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010945374f57fd4f5d964d2716a04d1d2e7d7b038d93e9b6f9e44932c3eb5ba6d300022d1406afd9ab272d1d69d07663260f8354d919ee2c26fc2f7dba5f2481e2658d00000000000000000000000000000000000000000000000000000000000003e7028b92dc59c0e639a67b5800142868d3eb41d46f26a3d8ce08c71bf4d2e78d4b00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010a8b5fe74ca8f0c6aa98b9591f4ccf6dc402b94530f4e905e5bdc8495c1eac2000020e15a517e2880b5c8c23b6c914a00144fdfe1959dd4d421a8158d193de55ac8900000000000000000000000000000000000000000000000000000000000003e729701a66f2d436f8796a4ca058a4d9d8157df9adcedfe7e105b646ee84deb62400000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010a8c912cc4fe47470693b1d6995c35f2f3e1bdc4977e72b6869764fe6b0844a80002056f47b76b37b7ea837c2a1c1fb1c3335856b2b1f8234b5e45a54849bfe626fc00000000000000000000000000000000000000000000000000000000000003e72cc968259fdbaec8dce510e0c0fdb53f319a892ee7e243622712a1214758550e00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010ab8e59d4ff1e80386eedd367e1a60f5491805cf7faed9b9d9eef39505f84d1a000205617eabdb4b9866e51690d1556b5862ca7a54de9e74b6f0d8e83cfbb7ba8b4d00000000000000000000000000000000000000000000000000000000000003e71f3d78d1b5c84393c4cb85a6de369b5cce9f925cac3824494e85c0c74c7070a100000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010b58bce1c799fc1bb52ffc021369711f90f741878336261280b3c5066c7d2c98000214ac88a46d4926c114ba808ae4c56000689ffa862f347339a419dd3d971d8bb200000000000000000000000000000000000000000000000000000000000003e8056f47b76b37b7ea837c2a1c1fb1c3335856b2b1f8234b5e45a54849bfe626fc00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010c61f1262a9f1766095a6600f9c7ac7c297cb8efc18fd11e801db2db250d5096000229701a66f2d436f8796a4ca058a4d9d8157df9adcedfe7e105b646ee84deb62400000000000000000000000000000000000000000000000000000000000003e8146f3c3109213edd135054e8a4614daa39c2d6d2e4a62e3bba93ebb66520b68e00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010ca0ae801cfc48767f6133f8b6b6fe1d35a8a5d7fca11cff1e64713379d950460002146f3c3109213edd135054e8a4614daa39c2d6d2e4a62e3bba93ebb66520b68e00000000000000000000000000000000000000000000000000000000000003e80190857f4d6ad63c5132e9c9f21bd7d462d5882152476825ac7d4e345d515b9500000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010cfa671f4208316a3aef0bed5df607f09a0b3b4c57cef71de9e119d18d0918080002063c4e9483fab54a5c4ceaa196d9f974e1a79fb3e37f566b0cef90f948d147e000000000000000000000000000000000000000000000000000000000000003e81c3ccba76206d231c3f5983b1b01385a9f57a5ebe7d9c6caeab20e6077bb7db600000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010d818c019cb1679e143b9bfd6c5e0bce97373a83198699caa43cf059b070bd4500020b71c4bf1b6ca944f0f7b27abf87f028527fe2ee6109cd0c4dcbef89680ff54c00000000000000000000000000000000000000000000000000000000000003e729d6b3c3179ec53ca890e77a984f9dada05242a31f000ea47b1be1cd7839197500000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001124c5ce98de0e8c4ba8a53d340d037e720ae039767f14da6ca7ffa12cf06b09b0002176d460bcad8425779886202cb8160d6ce65654285b26992f94d912181a843d000000000000000000000000000000000000000000000000000000000000003e7066279451caa3f1eeb975ee89941ef936200eca4a1a26fac831c886dd5914dec00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001128e6be7b20018ef4641d48c4746b8e0ec003f5ccc2ca154566e448b892690d10002028b92dc59c0e639a67b5800142868d3eb41d46f26a3d8ce08c71bf4d2e78d4b00000000000000000000000000000000000000000000000000000000000003e82d7d0f2efeaa182176d6ffef73436b1cb172bba30942e898f26a7e11a6482fe700000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001138fc65ede78ecccbb72eb6391701df1d009953159a91a88efdbf0fd744a122200021c3ccba76206d231c3f5983b1b01385a9f57a5ebe7d9c6caeab20e6077bb7db600000000000000000000000000000000000000000000000000000000000003e81d930249dbf757666373a8dafab99b8cbf6fb7fef3452181fc63392c6a89caed00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011478dec4c5bd2935e3e41857b0b30b5440b99a675efdf5b5ef1fedbee709e33100022d4652a079712bd8d06d585f4d11aee5dbc03ff98dcf3ed5f135fe6b513a8d9b00000000000000000000000000000000000000000000000000000000000003e817ddfd3ca5e72090b830a5e809b9d29aa455a15b61f165030f1b515738cb31c100000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011927c1496d2009398e002f634497a2fed05d3c781e89658e33d5ad950e8a544200020d66061d89df3e08d8ea36e71e053602871895c6b877ed3357c072f90a4bbad200000000000000000000000000000000000000000000000000000000000003e80b71c4bf1b6ca944f0f7b27abf87f028527fe2ee6109cd0c4dcbef89680ff54c00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011bdd1ab01f9ce516d18e8ba77aa7f79cbd49ad3f1546bab1e7a2b4bee40ab4050002011d70a67015cf64a3553b0aa53b84b15dca1070d9aba315998d524503fb81c700000000000000000000000000000000000000000000000000000000000003e7176d460bcad8425779886202cb8160d6ce65654285b26992f94d912181a843d000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011c0366ad4b2c3c9f2dc035c1de3e58d464d044dd928e9f84b966acbf9fab57b6000229d6b3c3179ec53ca890e77a984f9dada05242a31f000ea47b1be1cd7839197500000000000000000000000000000000000000000000000000000000000003e80c4c86b9161d90f4137c5a977595dd4effad4cf74d46d4632c78d1e4e22df73e00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011c531ff97cf7d3a58a6e850804d9fcf2324f7f2ee099d03ecc73ed30553b4ae900021f3d78d1b5c84393c4cb85a6de369b5cce9f925cac3824494e85c0c74c7070a100000000000000000000000000000000000000000000000000000000000003e830099bb2ef4bd6d1a39dfc44097ee011c2252bb0b6a3ea372c41fecc9d77c0b900000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001213251bf7d38d780abcf24885e8d63905b69d307f1ea234c2c57e5942812e39500021d930249dbf757666373a8dafab99b8cbf6fb7fef3452181fc63392c6a89caed00000000000000000000000000000000000000000000000000000000000003e803b633211ac2a8010e05cc24fc75b89ea9764e303803ea5164d58d6564e3a34f00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000122b88617b8bfa0fd36df63d141b4cd04af74f0847be4ec31c398c3d613f435d000020c4c86b9161d90f4137c5a977595dd4effad4cf74d46d4632c78d1e4e22df73e00000000000000000000000000000000000000000000000000000000000003e82e3033b9b4319935f6135aa63fd9de84a93dad41202ea18a468f2d40a88192a600000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000123d7fbdd6a55144eb8a33f622ca83e61fd41ef590650bf695db891f53e9df7f500021c5e350766d6ae7c45abf76a3ce829e8e2db6d603a9a3d4e28af3df99929bd9700000000000000000000000000000000000000000000000000000000000003e72a3d3269c7ab4e365aefde47af42e9ec39e4233336678ccb9fc7d42953c87d1f00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000125682c69e2d30df8607b06fe9f401de8ee4c721ae97eabb0f6be5d0257c6413e00021ed7c45b1b55c1ca09acd74390b67647e370beb59140bf1e6f81cc2fa9c522c900000000000000000000000000000000000000000000000000000000000003e72d1406afd9ab272d1d69d07663260f8354d919ee2c26fc2f7dba5f2481e2658d00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001258aa4dcb2643e04232b4232a3cdce22a43d824c5be43ccbbed2373008d21f52000217ddfd3ca5e72090b830a5e809b9d29aa455a15b61f165030f1b515738cb31c100000000000000000000000000000000000000000000000000000000000003e8016d0e9cf1b97811c3b0b4d9aa6a01bc2bc906a023be0f5dbf5883e7443b25e200000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012737b12a53a8a9fb6109534bcb396572273bbafa1438fd47e9499bc27fa502a900020529412e2caac822e870b247ddb9b45c5dac8460f78e6e854c11d7d1b894312300000000000000000000000000000000000000000000000000000000000003e8011d70a67015cf64a3553b0aa53b84b15dca1070d9aba315998d524503fb81c700000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001276c34fd684cff453b9e7d7049dde73b0ef3f5a9304c2f26e92ea3acf87b5e7500022e3033b9b4319935f6135aa63fd9de84a93dad41202ea18a468f2d40a88192a600000000000000000000000000000000000000000000000000000000000003e80e15a517e2880b5c8c23b6c914a00144fdfe1959dd4d421a8158d193de55ac8900000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000129046c3114b846a69c8d2e70d9f80b0e309e8f7ffa71a555d0b8034bf5b5b5e00002066279451caa3f1eeb975ee89941ef936200eca4a1a26fac831c886dd5914dec00000000000000000000000000000000000000000000000000000000000003e805617eabdb4b9866e51690d1556b5862ca7a54de9e74b6f0d8e83cfbb7ba8b4d00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000129aec1b0884a6c6c0f4152f11462ca50d508904c384f208634934577454dcaab00022a5332a1e62f0f63be898ed80aca44562c73d5edcfca002bac2ccb147207119300000000000000000000000000000000000000000000000000000000000003e71ed7c45b1b55c1ca09acd74390b67647e370beb59140bf1e6f81cc2fa9c522c900000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012ec1f7b48d96ddd76ca05cb19f35b492d0a1755c37c31cd902eba6277e9e74d100020f502211f8603476d9c20225bb3b7606859a3f39a19e2cf0d97529f9de3aae1000000000000000000000000000000000000000000000000000000000000003e82a5332a1e62f0f63be898ed80aca44562c73d5edcfca002bac2ccb147207119300000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012fc0382577dda8ddaeced14b20f28233a67b6a98c5a091b544c25b98755997e5000202722dc983ea7b9963878a27e3fcc690674628a596a42949eae01aa2e284375d00000000000000000000000000000000000000000000000000000000000003e81c5e350766d6ae7c45abf76a3ce829e8e2db6d603a9a3d4e28af3df99929bd9700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000400000000000000080000000000000000", + "0ebd3ad291e93e98418e0a0f28056d90d77ede41523752f6579349aba50801ae0000000f0000000000000000000000000000000000000000000000000000000000000024001bd73a47c658e3dc9af58af7454ae047d2ce8b453b93851c7fb63bf578cc5d00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000f00b4847062e5e74149c8696d66e1c1d8425e170660a075eaa25c1e90875b336a6000054001b3ac8ecf56d737901d7ccc2ae1444b55e85140476db480227debd3dd8c64bc900005480009e49ec6e74ab8569dcc2156cbed3fce0bb015b59837a45344e8b5b8a19e4e9000054800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000070dbdacc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad59c1301bb3a60f219dc120628fc1acedbcf4802c093110d997457ef7e8124db7c9352e0000000f0000002400000000000000000000000000000000000000000000000000000000000bed28ec000100ef1aeab2d97935af7c0763e5ceccc25090113f0cb9f6dd731a589e4522cbd20002011d70a67015cf64a3553b0aa53b84b15dca1070d9aba315998d524503fb81c700000000000000000000000000000000000000000000000000000000000003e7176d460bcad8425779886202cb8160d6ce65654285b26992f94d912181a843d000000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001035b35e72a71fbca5d386b758af19252e02a6b361f7da5de98d3a067f608008800020190857f4d6ad63c5132e9c9f21bd7d462d5882152476825ac7d4e345d515b9500000000000000000000000000000000000000000000000000000000000003e70f502211f8603476d9c20225bb3b7606859a3f39a19e2cf0d97529f9de3aae1000000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000104e9948391162fd1e2f1d7a04c6790d562218eda30a5f6990fc3cb62294ec65d00022a5332a1e62f0f63be898ed80aca44562c73d5edcfca002bac2ccb147207119300000000000000000000000000000000000000000000000000000000000003e71ed7c45b1b55c1ca09acd74390b67647e370beb59140bf1e6f81cc2fa9c522c900000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000105450b6507bacbcf6211264baf7defa3439ae15b712d0024a6521374729c76bd00022d4652a079712bd8d06d585f4d11aee5dbc03ff98dcf3ed5f135fe6b513a8d9b00000000000000000000000000000000000000000000000000000000000003e717ddfd3ca5e72090b830a5e809b9d29aa455a15b61f165030f1b515738cb31c100000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000105cc5182026afb90a198229b177c263a7c88276a77902404d10e6a5d3541bacf0002066279451caa3f1eeb975ee89941ef936200eca4a1a26fac831c886dd5914dec00000000000000000000000000000000000000000000000000000000000003e705617eabdb4b9866e51690d1556b5862ca7a54de9e74b6f0d8e83cfbb7ba8b4d00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000106f2552676fa6685012ea28364c6f022d044960a58e90f3e6d24759191ee0a3e00022e3033b9b4319935f6135aa63fd9de84a93dad41202ea18a468f2d40a88192a600000000000000000000000000000000000000000000000000000000000003e70e15a517e2880b5c8c23b6c914a00144fdfe1959dd4d421a8158d193de55ac8900000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001070377b51ce540fbec024cbb80952e901fb6c644a9d739a6a27e50ee656f40ee00020f502211f8603476d9c20225bb3b7606859a3f39a19e2cf0d97529f9de3aae1000000000000000000000000000000000000000000000000000000000000003e82a5332a1e62f0f63be898ed80aca44562c73d5edcfca002bac2ccb147207119300000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010708c40e8cba7302a07e96067ba06c5736f7086a0565cfddb80581053c9d08b3000229701a66f2d436f8796a4ca058a4d9d8157df9adcedfe7e105b646ee84deb62400000000000000000000000000000000000000000000000000000000000003e7146f3c3109213edd135054e8a4614daa39c2d6d2e4a62e3bba93ebb66520b68e00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010a1e84e29c739462a99be08de66c84f48e91c40cfcb40a928020a56cdacb1eef00022cc968259fdbaec8dce510e0c0fdb53f319a892ee7e243622712a1214758550e00000000000000000000000000000000000000000000000000000000000003e7063c4e9483fab54a5c4ceaa196d9f974e1a79fb3e37f566b0cef90f948d147e000000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010e810d222012c0f5ba70f850ddbc4ad5cfad9fcff409cd5586eb3ea79ee902370002016d0e9cf1b97811c3b0b4d9aa6a01bc2bc906a023be0f5dbf5883e7443b25e200000000000000000000000000000000000000000000000000000000000003e709f893ce014878f27f6f579c11de3f0f51a16d175834b9714264cacd893ed75800000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010f1726caf6b39da9bc2df2643ba50cfc9ea66cb39775378da6edee270a299eb000020b71c4bf1b6ca944f0f7b27abf87f028527fe2ee6109cd0c4dcbef89680ff54c00000000000000000000000000000000000000000000000000000000000003e729d6b3c3179ec53ca890e77a984f9dada05242a31f000ea47b1be1cd7839197500000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010f842f04922822e651137cfa5ddf23e0af7e20c00c6283e367d5e39cc628c3650002063c4e9483fab54a5c4ceaa196d9f974e1a79fb3e37f566b0cef90f948d147e000000000000000000000000000000000000000000000000000000000000003e81c3ccba76206d231c3f5983b1b01385a9f57a5ebe7d9c6caeab20e6077bb7db600000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010f8a1b008620a3c0037a46331e54da8dd196b868b4671d14f0a608775c21266a00020529412e2caac822e870b247ddb9b45c5dac8460f78e6e854c11d7d1b894312300000000000000000000000000000000000000000000000000000000000003e7011d70a67015cf64a3553b0aa53b84b15dca1070d9aba315998d524503fb81c700000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010fc6a871fdadc513376f11237da2f0663edcfa04d274095eadbe2e9bd2674df400020c4c86b9161d90f4137c5a977595dd4effad4cf74d46d4632c78d1e4e22df73e00000000000000000000000000000000000000000000000000000000000003e72e3033b9b4319935f6135aa63fd9de84a93dad41202ea18a468f2d40a88192a600000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000110d74b7cadbbfded08007f878755560785d7acb1ff156ead10a910d4a871e895000229d6b3c3179ec53ca890e77a984f9dada05242a31f000ea47b1be1cd7839197500000000000000000000000000000000000000000000000000000000000003e80c4c86b9161d90f4137c5a977595dd4effad4cf74d46d4632c78d1e4e22df73e00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011282b7a6155ba94d5e2f7f26d36ccf0976e56cb120b8bd1a12767ea2bbd5c67d000217ddfd3ca5e72090b830a5e809b9d29aa455a15b61f165030f1b515738cb31c100000000000000000000000000000000000000000000000000000000000003e8016d0e9cf1b97811c3b0b4d9aa6a01bc2bc906a023be0f5dbf5883e7443b25e200000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000114a345a5cf118506d9f755cc1cc82ad8651058d060b3ec23158ffa53b34b00c9000209f893ce014878f27f6f579c11de3f0f51a16d175834b9714264cacd893ed75800000000000000000000000000000000000000000000000000000000000003e802722dc983ea7b9963878a27e3fcc690674628a596a42949eae01aa2e284375d00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011546e8df61891f245b3706e5ab330cf0db2900113dcba746c80165435fdfcc4200021f3d78d1b5c84393c4cb85a6de369b5cce9f925cac3824494e85c0c74c7070a100000000000000000000000000000000000000000000000000000000000003e730099bb2ef4bd6d1a39dfc44097ee011c2252bb0b6a3ea372c41fecc9d77c0b900000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000117847703292de4cc5ae1674283a3d0eb7521b02e6b72741c4d891aadca6398c7000203b633211ac2a8010e05cc24fc75b89ea9764e303803ea5164d58d6564e3a34f00000000000000000000000000000000000000000000000000000000000003e70529412e2caac822e870b247ddb9b45c5dac8460f78e6e854c11d7d1b894312300000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001187f8c279e175c160bddd83cb350135d8e7bfe4104990cd57a42dab85b90e7d7000230099bb2ef4bd6d1a39dfc44097ee011c2252bb0b6a3ea372c41fecc9d77c0b900000000000000000000000000000000000000000000000000000000000003e80d66061d89df3e08d8ea36e71e053602871895c6b877ed3357c072f90a4bbad200000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000119288f14589d1655d6c29715751b94e57e9d56b74383a7516dfda8ec21d72a2200021d930249dbf757666373a8dafab99b8cbf6fb7fef3452181fc63392c6a89caed00000000000000000000000000000000000000000000000000000000000003e703b633211ac2a8010e05cc24fc75b89ea9764e303803ea5164d58d6564e3a34f00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011aec730aa8a4ab6a3aecee306d603ac81cfed66401b4d7b392eb2ba4a046ec0700021ed7c45b1b55c1ca09acd74390b67647e370beb59140bf1e6f81cc2fa9c522c900000000000000000000000000000000000000000000000000000000000003e82d1406afd9ab272d1d69d07663260f8354d919ee2c26fc2f7dba5f2481e2658d00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011b9d09f487b729b2185c08ba99bc84a47a3bb99e5f178a89a372c12bf7440c6c0002146f3c3109213edd135054e8a4614daa39c2d6d2e4a62e3bba93ebb66520b68e00000000000000000000000000000000000000000000000000000000000003e80190857f4d6ad63c5132e9c9f21bd7d462d5882152476825ac7d4e345d515b9500000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011d5c210f42767989284b741c4c0c8044e60f9e0752367c61388481142e25820500022a3d3269c7ab4e365aefde47af42e9ec39e4233336678ccb9fc7d42953c87d1f00000000000000000000000000000000000000000000000000000000000003e714ac88a46d4926c114ba808ae4c56000689ffa862f347339a419dd3d971d8bb200000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011dcc4511b21edaa8b14f4e40660a217e414c8a25896b6e9dbe354ff92a6757e5000214ac88a46d4926c114ba808ae4c56000689ffa862f347339a419dd3d971d8bb200000000000000000000000000000000000000000000000000000000000003e8056f47b76b37b7ea837c2a1c1fb1c3335856b2b1f8234b5e45a54849bfe626fc00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012302e230abf134ccfcc08cf7b06269fc8c5115905d710ecfb3c9073772852a8a00020e15a517e2880b5c8c23b6c914a00144fdfe1959dd4d421a8158d193de55ac8900000000000000000000000000000000000000000000000000000000000003e829701a66f2d436f8796a4ca058a4d9d8157df9adcedfe7e105b646ee84deb62400000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000125552664317999cb18ec3b9327d619cb4d2e3f051a17d5f3b740c2ebfaa950fb00022d7d0f2efeaa182176d6ffef73436b1cb172bba30942e898f26a7e11a6482fe700000000000000000000000000000000000000000000000000000000000003e72d4652a079712bd8d06d585f4d11aee5dbc03ff98dcf3ed5f135fe6b513a8d9b00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000126a83e5b8399a0528d055dd942ac662bfa24eacc0a4d21bf5a7e1c0d67f876ef000202722dc983ea7b9963878a27e3fcc690674628a596a42949eae01aa2e284375d00000000000000000000000000000000000000000000000000000000000003e81c5e350766d6ae7c45abf76a3ce829e8e2db6d603a9a3d4e28af3df99929bd9700000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000127084a11746868902cb6643a2883da2dca6bb48495f48b15df1f3199036fd25c0002056f47b76b37b7ea837c2a1c1fb1c3335856b2b1f8234b5e45a54849bfe626fc00000000000000000000000000000000000000000000000000000000000003e82cc968259fdbaec8dce510e0c0fdb53f319a892ee7e243622712a1214758550e00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012950f7b91e9d604daeb12d222670c57545d432ba9b67215a88cb68a628af3aec00021c3ccba76206d231c3f5983b1b01385a9f57a5ebe7d9c6caeab20e6077bb7db600000000000000000000000000000000000000000000000000000000000003e81d930249dbf757666373a8dafab99b8cbf6fb7fef3452181fc63392c6a89caed00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012bc7bc561020163eb12e10579130b9c8b1902ed28ffa74922711585543133e8800021c5e350766d6ae7c45abf76a3ce829e8e2db6d603a9a3d4e28af3df99929bd9700000000000000000000000000000000000000000000000000000000000003e82a3d3269c7ab4e365aefde47af42e9ec39e4233336678ccb9fc7d42953c87d1f00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012c5267a48022c4e745fab499b2003cc1ef51acc7440a13498c8febabff5a8fc60002176d460bcad8425779886202cb8160d6ce65654285b26992f94d912181a843d000000000000000000000000000000000000000000000000000000000000003e8066279451caa3f1eeb975ee89941ef936200eca4a1a26fac831c886dd5914dec00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012d35b823cd082d9d7d503d6097b435af260128a90f754055cd1348b5c6ee8c1300022d1406afd9ab272d1d69d07663260f8354d919ee2c26fc2f7dba5f2481e2658d00000000000000000000000000000000000000000000000000000000000003e8028b92dc59c0e639a67b5800142868d3eb41d46f26a3d8ce08c71bf4d2e78d4b00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012d46fa4c4fe5537b19f77aff53f995025f03495133de524b6573453525e8fedc000205617eabdb4b9866e51690d1556b5862ca7a54de9e74b6f0d8e83cfbb7ba8b4d00000000000000000000000000000000000000000000000000000000000003e81f3d78d1b5c84393c4cb85a6de369b5cce9f925cac3824494e85c0c74c7070a100000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012da538871754161c827ce38bd7992a734d5986606855b429cb3469b7c23dc00500020d66061d89df3e08d8ea36e71e053602871895c6b877ed3357c072f90a4bbad200000000000000000000000000000000000000000000000000000000000003e80b71c4bf1b6ca944f0f7b27abf87f028527fe2ee6109cd0c4dcbef89680ff54c00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00013020cc8ba98fce14c3ceb013375483b7d38564b0e42ac18c86e53e0f4b93a4420002028b92dc59c0e639a67b5800142868d3eb41d46f26a3d8ce08c71bf4d2e78d4b00000000000000000000000000000000000000000000000000000000000003e82d7d0f2efeaa182176d6ffef73436b1cb172bba30942e898f26a7e11a6482fe700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000400000000000000080000000000000000", + "1bb3a60f219dc120628fc1acedbcf4802c093110d997457ef7e8124db7c9352e00000010000000000000000000000000000000000000000000000000000000000000002400baba4ea2c41f429f40029e650e653a458c60d43f296b05aeb082021b8cc02300089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000001000b4847062e5e74149c8696d66e1c1d8425e170660a075eaa25c1e90875b336a600005d0011b2c11e7e11fc6aaf6f205698f19ca664ef427fea4b58403ce730a60267b7e600005d80009e49ec6e74ab8569dcc2156cbed3fce0bb015b59837a45344e8b5b8a19e4e900005d800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000070dbdaf0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad59c13004f72778b7e4a8a42f1e1242cbb7a9e23710d3f8ddeb47134de7ed4965603755000000100000002400000000000000000000000000000000000000000000000000000000000bed28ec00010056c607fd99abc6334c7ae5b92f2167ef457d21917edbb26383cd29f7f2e9380002176d460bcad8425779886202cb8160d6ce65654285b26992f94d912181a843d000000000000000000000000000000000000000000000000000000000000003e7066279451caa3f1eeb975ee89941ef936200eca4a1a26fac831c886dd5914dec00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010323d4812ee87bb69dba44e2a4ada4d63887d7c8413fd50d5c0d48a0b9789d3000022d4652a079712bd8d06d585f4d11aee5dbc03ff98dcf3ed5f135fe6b513a8d9b00000000000000000000000000000000000000000000000000000000000003e717ddfd3ca5e72090b830a5e809b9d29aa455a15b61f165030f1b515738cb31c100000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000103683754425c3674a17ae5d8800f4de6c2ef9d22e8002ca25dc8bfcb952e8c5d0002063c4e9483fab54a5c4ceaa196d9f974e1a79fb3e37f566b0cef90f948d147e000000000000000000000000000000000000000000000000000000000000003e71c3ccba76206d231c3f5983b1b01385a9f57a5ebe7d9c6caeab20e6077bb7db600000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010401f4a28b5713d88b99d12d6fd759afd63235d64fdcb79c6d4b1f8708fe08ce00021d930249dbf757666373a8dafab99b8cbf6fb7fef3452181fc63392c6a89caed00000000000000000000000000000000000000000000000000000000000003e703b633211ac2a8010e05cc24fc75b89ea9764e303803ea5164d58d6564e3a34f00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001046af2f86b6e83dc786151adc11b2396d74fac213e49e4be2a48a430b049da4f00021c5e350766d6ae7c45abf76a3ce829e8e2db6d603a9a3d4e28af3df99929bd9700000000000000000000000000000000000000000000000000000000000003e72a3d3269c7ab4e365aefde47af42e9ec39e4233336678ccb9fc7d42953c87d1f00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010821e75e3dce395a15332b35605650ee81de62be0388fae22e8530b3386e76cc000203b633211ac2a8010e05cc24fc75b89ea9764e303803ea5164d58d6564e3a34f00000000000000000000000000000000000000000000000000000000000003e80529412e2caac822e870b247ddb9b45c5dac8460f78e6e854c11d7d1b894312300000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010a6876a593aa49f02c00c757e5df9d9e3544edff0b210e90acc64ac7ad74bb9e0002066279451caa3f1eeb975ee89941ef936200eca4a1a26fac831c886dd5914dec00000000000000000000000000000000000000000000000000000000000003e805617eabdb4b9866e51690d1556b5862ca7a54de9e74b6f0d8e83cfbb7ba8b4d00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010a71817b2bb492ecaabb81ed6a8e9d802e8755457cd5c5d40bb1491e04b1602000021ed7c45b1b55c1ca09acd74390b67647e370beb59140bf1e6f81cc2fa9c522c900000000000000000000000000000000000000000000000000000000000003e72d1406afd9ab272d1d69d07663260f8354d919ee2c26fc2f7dba5f2481e2658d00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010c5aa717b1c32c8dfd0c289e02c22f93c1cee91769aa0279a1bf4e5a701e605900020e15a517e2880b5c8c23b6c914a00144fdfe1959dd4d421a8158d193de55ac8900000000000000000000000000000000000000000000000000000000000003e729701a66f2d436f8796a4ca058a4d9d8157df9adcedfe7e105b646ee84deb62400000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010d163a6744dc4969ccd696f68246b1c8d671b5238288c2cc02496fc36bcf11eb0002028b92dc59c0e639a67b5800142868d3eb41d46f26a3d8ce08c71bf4d2e78d4b00000000000000000000000000000000000000000000000000000000000003e72d7d0f2efeaa182176d6ffef73436b1cb172bba30942e898f26a7e11a6482fe700000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010e423be7e8a6542739a592543dd0a0b1b84d26d92a4ff777fc8c129f51d23cb900020529412e2caac822e870b247ddb9b45c5dac8460f78e6e854c11d7d1b894312300000000000000000000000000000000000000000000000000000000000003e8011d70a67015cf64a3553b0aa53b84b15dca1070d9aba315998d524503fb81c700000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010f55cc5c34c6dfb57d29b156af5310dd6e2f26686a716f5a437ff370390bb62c000217ddfd3ca5e72090b830a5e809b9d29aa455a15b61f165030f1b515738cb31c100000000000000000000000000000000000000000000000000000000000003e8016d0e9cf1b97811c3b0b4d9aa6a01bc2bc906a023be0f5dbf5883e7443b25e200000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011188f91f5eb2ad2c496e9d4c500618e39aaa5106a8d91157ae0ad14be32cac86000205617eabdb4b9866e51690d1556b5862ca7a54de9e74b6f0d8e83cfbb7ba8b4d00000000000000000000000000000000000000000000000000000000000003e81f3d78d1b5c84393c4cb85a6de369b5cce9f925cac3824494e85c0c74c7070a100000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000114eea87bab26f7c631fedb2198d6e1cff0f395564bf0eb9e132af21666e20fac000209f893ce014878f27f6f579c11de3f0f51a16d175834b9714264cacd893ed75800000000000000000000000000000000000000000000000000000000000003e702722dc983ea7b9963878a27e3fcc690674628a596a42949eae01aa2e284375d00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011569d295f90f3d32aa02c0743f5ab74bb09b9a8b2a6309a1cd0ce45863168be500021f3d78d1b5c84393c4cb85a6de369b5cce9f925cac3824494e85c0c74c7070a100000000000000000000000000000000000000000000000000000000000003e830099bb2ef4bd6d1a39dfc44097ee011c2252bb0b6a3ea372c41fecc9d77c0b900000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011577224c699f8580e793f01971edc7e84070298cc1ace7fdbe51b409bbdabd59000230099bb2ef4bd6d1a39dfc44097ee011c2252bb0b6a3ea372c41fecc9d77c0b900000000000000000000000000000000000000000000000000000000000003e80d66061d89df3e08d8ea36e71e053602871895c6b877ed3357c072f90a4bbad200000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001157fba41ae800f6f02374abfc8e5e90774f440d8f783671276a670990b74fd230002016d0e9cf1b97811c3b0b4d9aa6a01bc2bc906a023be0f5dbf5883e7443b25e200000000000000000000000000000000000000000000000000000000000003e809f893ce014878f27f6f579c11de3f0f51a16d175834b9714264cacd893ed75800000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000115937f37b62fbb4558efc5ab0c72cd8e342afa38606e39621551cdbffc27f16700022d1406afd9ab272d1d69d07663260f8354d919ee2c26fc2f7dba5f2481e2658d00000000000000000000000000000000000000000000000000000000000003e8028b92dc59c0e639a67b5800142868d3eb41d46f26a3d8ce08c71bf4d2e78d4b00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001169f71b10f8d397cdfc633f2b4569e85140f09f9b83b7446939b81a103a4eabb00020d66061d89df3e08d8ea36e71e053602871895c6b877ed3357c072f90a4bbad200000000000000000000000000000000000000000000000000000000000003e80b71c4bf1b6ca944f0f7b27abf87f028527fe2ee6109cd0c4dcbef89680ff54c00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001179e2e6865982fb406b48e4a92d1d844f93ee2eef916ece5fe62b1188ac79f3100022a5332a1e62f0f63be898ed80aca44562c73d5edcfca002bac2ccb147207119300000000000000000000000000000000000000000000000000000000000003e71ed7c45b1b55c1ca09acd74390b67647e370beb59140bf1e6f81cc2fa9c522c900000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001180cae45a14ca341c657e007a37185e19bcb5f99dac46a6440b2bee12c97172a000229d6b3c3179ec53ca890e77a984f9dada05242a31f000ea47b1be1cd7839197500000000000000000000000000000000000000000000000000000000000003e70c4c86b9161d90f4137c5a977595dd4effad4cf74d46d4632c78d1e4e22df73e00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001182e71a849af3e5846c57c4d2759a920bf100bd798a9234dd9323a2a4e220eb200020f502211f8603476d9c20225bb3b7606859a3f39a19e2cf0d97529f9de3aae1000000000000000000000000000000000000000000000000000000000000003e72a5332a1e62f0f63be898ed80aca44562c73d5edcfca002bac2ccb147207119300000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000118a94961e14a2db5ea4cc4a01b8ed86197d329f86abe5bcda3168f1d69759b08000202722dc983ea7b9963878a27e3fcc690674628a596a42949eae01aa2e284375d00000000000000000000000000000000000000000000000000000000000003e81c5e350766d6ae7c45abf76a3ce829e8e2db6d603a9a3d4e28af3df99929bd9700000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000118d0bab02f5a17ab69b60a63c323c4515cf968005554193356214631a072063c00022d7d0f2efeaa182176d6ffef73436b1cb172bba30942e898f26a7e11a6482fe700000000000000000000000000000000000000000000000000000000000003e82d4652a079712bd8d06d585f4d11aee5dbc03ff98dcf3ed5f135fe6b513a8d9b00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001196cff42a6857b34f755f6922297b59626d0af75b05dc89dc74daa4bdd90612f0002011d70a67015cf64a3553b0aa53b84b15dca1070d9aba315998d524503fb81c700000000000000000000000000000000000000000000000000000000000003e8176d460bcad8425779886202cb8160d6ce65654285b26992f94d912181a843d000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011abbad52c80c7755b3f92762a670ed6d75bfe24cb99afa0651542b96f74d0ef900022a3d3269c7ab4e365aefde47af42e9ec39e4233336678ccb9fc7d42953c87d1f00000000000000000000000000000000000000000000000000000000000003e814ac88a46d4926c114ba808ae4c56000689ffa862f347339a419dd3d971d8bb200000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011b430710009ab35528de5d7946af08d0d3a6e7df9bd87d3cc2e04a8d8f052be900021c3ccba76206d231c3f5983b1b01385a9f57a5ebe7d9c6caeab20e6077bb7db600000000000000000000000000000000000000000000000000000000000003e81d930249dbf757666373a8dafab99b8cbf6fb7fef3452181fc63392c6a89caed00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011b9299f8d7fb1c07c60b320ae28e8cfad6f246f4a64d7ecc64448978e8edc4e100022cc968259fdbaec8dce510e0c0fdb53f319a892ee7e243622712a1214758550e00000000000000000000000000000000000000000000000000000000000003e7063c4e9483fab54a5c4ceaa196d9f974e1a79fb3e37f566b0cef90f948d147e000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001205b340826a7a9458a3553b92cb0c71bcccad90bc8c50e92d47a6c63b918818000022e3033b9b4319935f6135aa63fd9de84a93dad41202ea18a468f2d40a88192a600000000000000000000000000000000000000000000000000000000000003e70e15a517e2880b5c8c23b6c914a00144fdfe1959dd4d421a8158d193de55ac8900000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000127d682e073d35082dfcafc44699f1663e49f7e3aedf076ec584b842e53fcc24c0002146f3c3109213edd135054e8a4614daa39c2d6d2e4a62e3bba93ebb66520b68e00000000000000000000000000000000000000000000000000000000000003e70190857f4d6ad63c5132e9c9f21bd7d462d5882152476825ac7d4e345d515b9500000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000128691dbc4de175b5342b0bac642beffac931619aac875037f62348b06b7d20b200020b71c4bf1b6ca944f0f7b27abf87f028527fe2ee6109cd0c4dcbef89680ff54c00000000000000000000000000000000000000000000000000000000000003e829d6b3c3179ec53ca890e77a984f9dada05242a31f000ea47b1be1cd7839197500000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001296f111d7a9ca965c1e32a6b7d2e46b02160dd25a6f35ed2d774f288d48dfc69000229701a66f2d436f8796a4ca058a4d9d8157df9adcedfe7e105b646ee84deb62400000000000000000000000000000000000000000000000000000000000003e8146f3c3109213edd135054e8a4614daa39c2d6d2e4a62e3bba93ebb66520b68e00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012b4f5129299ff1bf85de346017559ec50844ba54cea802156a0ae3499e06ddaa00020190857f4d6ad63c5132e9c9f21bd7d462d5882152476825ac7d4e345d515b9500000000000000000000000000000000000000000000000000000000000003e80f502211f8603476d9c20225bb3b7606859a3f39a19e2cf0d97529f9de3aae1000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012b8135e02aeb9bd2c42b52580c44c9009c1b26fa582daa264addc957362d3fb100020c4c86b9161d90f4137c5a977595dd4effad4cf74d46d4632c78d1e4e22df73e00000000000000000000000000000000000000000000000000000000000003e82e3033b9b4319935f6135aa63fd9de84a93dad41202ea18a468f2d40a88192a600000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012bbfe652defde8eea72c76bc2b0343cbd4c8a164f9e391f32cf4b86e5f9dfd410002056f47b76b37b7ea837c2a1c1fb1c3335856b2b1f8234b5e45a54849bfe626fc00000000000000000000000000000000000000000000000000000000000003e72cc968259fdbaec8dce510e0c0fdb53f319a892ee7e243622712a1214758550e00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012c9e06bec1fe989fb0a7f8ba509f0ccca513e4fe380c8c26f132fb70fd516305000214ac88a46d4926c114ba808ae4c56000689ffa862f347339a419dd3d971d8bb200000000000000000000000000000000000000000000000000000000000003e8056f47b76b37b7ea837c2a1c1fb1c3335856b2b1f8234b5e45a54849bfe626fc00000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000400000000000000080000000000000000", + "04f72778b7e4a8a42f1e1242cbb7a9e23710d3f8ddeb47134de7ed496560375500000011000000000000000000000000000000000000000000000000000000000000002400fb9b0e0e520125f27eb6677b5437f49ca9ddef0785346d5b433ad4ca51cf2000089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000001100b4847062e5e74149c8696d66e1c1d8425e170660a075eaa25c1e90875b336a60000660007ae4a755b117030fcf4a74a14390673e7ce13ce339662151c1f0f57b0369ece00006680009e49ec6e74ab8569dcc2156cbed3fce0bb015b59837a45344e8b5b8a19e4e9000066800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000070dbdb14000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad59c13025f751886ba084e42fbc3a8b201114c584f8d46c34a6cc8c34c88df0a5474736000000110000002400000000000000000000000000000000000000000000000000000000000bed28ec0001015ab75cef0645e7a3643470641dcfb27823c599bd96b9f9792349bbc6af5e72000229701a66f2d436f8796a4ca058a4d9d8157df9adcedfe7e105b646ee84deb62400000000000000000000000000000000000000000000000000000000000003e7146f3c3109213edd135054e8a4614daa39c2d6d2e4a62e3bba93ebb66520b68e00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010162b6d33de17209e9e2f5e3c7a96d10953d0134d21e0975faeb6245ff98ef8f00020190857f4d6ad63c5132e9c9f21bd7d462d5882152476825ac7d4e345d515b9500000000000000000000000000000000000000000000000000000000000003e70f502211f8603476d9c20225bb3b7606859a3f39a19e2cf0d97529f9de3aae1000000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001037fbc5e0304e205ccf216543d86258158faf3f939541ebc49411d6a7b1ca60b00021ed7c45b1b55c1ca09acd74390b67647e370beb59140bf1e6f81cc2fa9c522c900000000000000000000000000000000000000000000000000000000000003e72d1406afd9ab272d1d69d07663260f8354d919ee2c26fc2f7dba5f2481e2658d00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000106035e9e2683f2399b5f73cf729226f9ad766496e7cb12212a49ea66df22a4d700022cc968259fdbaec8dce510e0c0fdb53f319a892ee7e243622712a1214758550e00000000000000000000000000000000000000000000000000000000000003e7063c4e9483fab54a5c4ceaa196d9f974e1a79fb3e37f566b0cef90f948d147e000000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001060765c650a25bdff88b74246fdc85b740ea98bf0a75960bebe17dd30fe9196500020d66061d89df3e08d8ea36e71e053602871895c6b877ed3357c072f90a4bbad200000000000000000000000000000000000000000000000000000000000003e70b71c4bf1b6ca944f0f7b27abf87f028527fe2ee6109cd0c4dcbef89680ff54c00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000106454bc69debe8e5e3a7ae585d6166bebf371514344203a3445f2897ea1f972b00021d930249dbf757666373a8dafab99b8cbf6fb7fef3452181fc63392c6a89caed00000000000000000000000000000000000000000000000000000000000003e703b633211ac2a8010e05cc24fc75b89ea9764e303803ea5164d58d6564e3a34f00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000107bb828a54c8c064b223dbbca5b7fd7e9ccf04239aa6d4dca019e9b47c114f930002056f47b76b37b7ea837c2a1c1fb1c3335856b2b1f8234b5e45a54849bfe626fc00000000000000000000000000000000000000000000000000000000000003e72cc968259fdbaec8dce510e0c0fdb53f319a892ee7e243622712a1214758550e00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000108939a689f7d92df5d9a01ea6f1d8991ea48b0694d1ab2ff3599308a88e96e4900022a5332a1e62f0f63be898ed80aca44562c73d5edcfca002bac2ccb147207119300000000000000000000000000000000000000000000000000000000000003e71ed7c45b1b55c1ca09acd74390b67647e370beb59140bf1e6f81cc2fa9c522c900000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010c9efd1910f83649b2294170759fa5bab3dafbe02b2d3a650e88d532d0e5d1d8000202722dc983ea7b9963878a27e3fcc690674628a596a42949eae01aa2e284375d00000000000000000000000000000000000000000000000000000000000003e71c5e350766d6ae7c45abf76a3ce829e8e2db6d603a9a3d4e28af3df99929bd9700000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010d685b60cb4cdf721464df9575086e541c759f86c95f03a097a99404fa82f51e000214ac88a46d4926c114ba808ae4c56000689ffa862f347339a419dd3d971d8bb200000000000000000000000000000000000000000000000000000000000003e7056f47b76b37b7ea837c2a1c1fb1c3335856b2b1f8234b5e45a54849bfe626fc00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010d8b216c432e890942959715b3142e10fe9c87b9574aaf1cf3855aaba526811e0002176d460bcad8425779886202cb8160d6ce65654285b26992f94d912181a843d000000000000000000000000000000000000000000000000000000000000003e7066279451caa3f1eeb975ee89941ef936200eca4a1a26fac831c886dd5914dec00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010fed636f6ada65320e3a39c6538be89d7ad8ac3f6518d9667cba3836cb40b8f30002028b92dc59c0e639a67b5800142868d3eb41d46f26a3d8ce08c71bf4d2e78d4b00000000000000000000000000000000000000000000000000000000000003e72d7d0f2efeaa182176d6ffef73436b1cb172bba30942e898f26a7e11a6482fe700000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011514d932ca3eba82e45beb60cc6800f544a541772177d9e93b8d42084459bc5600020c4c86b9161d90f4137c5a977595dd4effad4cf74d46d4632c78d1e4e22df73e00000000000000000000000000000000000000000000000000000000000003e72e3033b9b4319935f6135aa63fd9de84a93dad41202ea18a468f2d40a88192a600000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000115b54e9409213207c32f9a5964a07c4d36706dc923b775ed1b35f00742087c8d000229d6b3c3179ec53ca890e77a984f9dada05242a31f000ea47b1be1cd7839197500000000000000000000000000000000000000000000000000000000000003e70c4c86b9161d90f4137c5a977595dd4effad4cf74d46d4632c78d1e4e22df73e00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000117130a566c0f8e472d6d044de6774ed11441c11c2e66a4bc75b44aefff5219280002063c4e9483fab54a5c4ceaa196d9f974e1a79fb3e37f566b0cef90f948d147e000000000000000000000000000000000000000000000000000000000000003e81c3ccba76206d231c3f5983b1b01385a9f57a5ebe7d9c6caeab20e6077bb7db600000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000117ce49f260442014538c59d8788d636e65c0825db1ce8724332092f006f61a9900022d1406afd9ab272d1d69d07663260f8354d919ee2c26fc2f7dba5f2481e2658d00000000000000000000000000000000000000000000000000000000000003e8028b92dc59c0e639a67b5800142868d3eb41d46f26a3d8ce08c71bf4d2e78d4b00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001195c9ca7f70acbd775e755f4b980a1f0a130ca4604cc734081a70f57979cc1af00021c3ccba76206d231c3f5983b1b01385a9f57a5ebe7d9c6caeab20e6077bb7db600000000000000000000000000000000000000000000000000000000000003e81d930249dbf757666373a8dafab99b8cbf6fb7fef3452181fc63392c6a89caed00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000119610bb511eff35e36dd8fd055fe62a975ab2d311d1d86fe7e2025d3d3e4e56d00022e3033b9b4319935f6135aa63fd9de84a93dad41202ea18a468f2d40a88192a600000000000000000000000000000000000000000000000000000000000003e80e15a517e2880b5c8c23b6c914a00144fdfe1959dd4d421a8158d193de55ac8900000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000119a8978bf7fe694ab5483dad9f981a48a02595381380157edf960c16ef50faab00021c5e350766d6ae7c45abf76a3ce829e8e2db6d603a9a3d4e28af3df99929bd9700000000000000000000000000000000000000000000000000000000000003e82a3d3269c7ab4e365aefde47af42e9ec39e4233336678ccb9fc7d42953c87d1f00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011acfbd801819ef7d7b42562078715c9deaafcfc01a804242c054d6b868991656000205617eabdb4b9866e51690d1556b5862ca7a54de9e74b6f0d8e83cfbb7ba8b4d00000000000000000000000000000000000000000000000000000000000003e71f3d78d1b5c84393c4cb85a6de369b5cce9f925cac3824494e85c0c74c7070a100000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011c70cfff0b277f0bd0f34d72121fe38ffdd616cb51a680bf14e34e715e203ac50002011d70a67015cf64a3553b0aa53b84b15dca1070d9aba315998d524503fb81c700000000000000000000000000000000000000000000000000000000000003e7176d460bcad8425779886202cb8160d6ce65654285b26992f94d912181a843d000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011efcd0f67b7b27ce3eeb17f1ffb5db13c0c627c43581b1f5b4642badeecd039e000203b633211ac2a8010e05cc24fc75b89ea9764e303803ea5164d58d6564e3a34f00000000000000000000000000000000000000000000000000000000000003e80529412e2caac822e870b247ddb9b45c5dac8460f78e6e854c11d7d1b894312300000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000120b5838aec4e1c16c267181a1c892393a02cfb945a5d24d1f6a2cd5d5b98a81300022d7d0f2efeaa182176d6ffef73436b1cb172bba30942e898f26a7e11a6482fe700000000000000000000000000000000000000000000000000000000000003e82d4652a079712bd8d06d585f4d11aee5dbc03ff98dcf3ed5f135fe6b513a8d9b00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000123078319d2cd71d299926e2c220ba5892f72c5d8b08656f166bc01c948e8976100020f502211f8603476d9c20225bb3b7606859a3f39a19e2cf0d97529f9de3aae1000000000000000000000000000000000000000000000000000000000000003e82a5332a1e62f0f63be898ed80aca44562c73d5edcfca002bac2ccb147207119300000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001241ed748beb4af3254bad0738f82517c3d1eaa2a57dc7ade83771276651c99c600021f3d78d1b5c84393c4cb85a6de369b5cce9f925cac3824494e85c0c74c7070a100000000000000000000000000000000000000000000000000000000000003e830099bb2ef4bd6d1a39dfc44097ee011c2252bb0b6a3ea372c41fecc9d77c0b900000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000124a10f743c983f143270935b7b4df88437234d34e5cea4fe95508f0bd2d5c94400020b71c4bf1b6ca944f0f7b27abf87f028527fe2ee6109cd0c4dcbef89680ff54c00000000000000000000000000000000000000000000000000000000000003e829d6b3c3179ec53ca890e77a984f9dada05242a31f000ea47b1be1cd7839197500000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012931e1c918071f79de1d5fbf9d61cbde0f52ab29b1891756ec7e086b11f876070002016d0e9cf1b97811c3b0b4d9aa6a01bc2bc906a023be0f5dbf5883e7443b25e200000000000000000000000000000000000000000000000000000000000003e709f893ce014878f27f6f579c11de3f0f51a16d175834b9714264cacd893ed75800000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012935da3b4c0b0f584ae5f2adaa16a386fe122466ac5b02d81babedc20819145a0002066279451caa3f1eeb975ee89941ef936200eca4a1a26fac831c886dd5914dec00000000000000000000000000000000000000000000000000000000000003e805617eabdb4b9866e51690d1556b5862ca7a54de9e74b6f0d8e83cfbb7ba8b4d00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012a7ccba63b96ec4c9fd736d2e4b71ac3d7aba91dcfa45969d63a2c10109504eb000209f893ce014878f27f6f579c11de3f0f51a16d175834b9714264cacd893ed75800000000000000000000000000000000000000000000000000000000000003e802722dc983ea7b9963878a27e3fcc690674628a596a42949eae01aa2e284375d00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012ad8d038b6d299101af7ff06ee8001279175a5efe33cd6e6dc4814f811b32dc900022a3d3269c7ab4e365aefde47af42e9ec39e4233336678ccb9fc7d42953c87d1f00000000000000000000000000000000000000000000000000000000000003e814ac88a46d4926c114ba808ae4c56000689ffa862f347339a419dd3d971d8bb200000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012b0151e55f8f97f2772e60db3c1998bd7c6a97f651eb3d0ae4f69e653bf54f350002146f3c3109213edd135054e8a4614daa39c2d6d2e4a62e3bba93ebb66520b68e00000000000000000000000000000000000000000000000000000000000003e80190857f4d6ad63c5132e9c9f21bd7d462d5882152476825ac7d4e345d515b9500000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012bc3272f6a96a003ea2b83aeb0f820ab0f6cd579198be24b89a1905dfed00cf800022d4652a079712bd8d06d585f4d11aee5dbc03ff98dcf3ed5f135fe6b513a8d9b00000000000000000000000000000000000000000000000000000000000003e817ddfd3ca5e72090b830a5e809b9d29aa455a15b61f165030f1b515738cb31c100000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012c033241917dcd37d315c62b2c403da3f2f8152cb25fdcb4be9441458fa89172000230099bb2ef4bd6d1a39dfc44097ee011c2252bb0b6a3ea372c41fecc9d77c0b900000000000000000000000000000000000000000000000000000000000003e80d66061d89df3e08d8ea36e71e053602871895c6b877ed3357c072f90a4bbad200000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012c7f87a7c5fc1ba46373e305eb373a8402bdd82d12a7373ddb05e1d7b97da50800020e15a517e2880b5c8c23b6c914a00144fdfe1959dd4d421a8158d193de55ac8900000000000000000000000000000000000000000000000000000000000003e829701a66f2d436f8796a4ca058a4d9d8157df9adcedfe7e105b646ee84deb62400000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012cbf4b2208310a4d010485ffc413aa5814513503b72f33498839330a6c8b2bb500020529412e2caac822e870b247ddb9b45c5dac8460f78e6e854c11d7d1b894312300000000000000000000000000000000000000000000000000000000000003e8011d70a67015cf64a3553b0aa53b84b15dca1070d9aba315998d524503fb81c700000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012d2b55b0084bb091f0f49d28a959013abe01ed7a8d3bb3972a3d6453f3ed8234000217ddfd3ca5e72090b830a5e809b9d29aa455a15b61f165030f1b515738cb31c100000000000000000000000000000000000000000000000000000000000003e8016d0e9cf1b97811c3b0b4d9aa6a01bc2bc906a023be0f5dbf5883e7443b25e200000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000400000000000000080000000000000000", + "25f751886ba084e42fbc3a8b201114c584f8d46c34a6cc8c34c88df0a5474736000000120000000000000000000000000000000000000000000000000000000000000024004adc73939ad498ac487b3d950037aebae1858daa9cdd59c4b7db8e7b230d1c00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c009070567b4e43c603cebbfbb2e26dd9fab0403d22491dbb5dc713081742050c14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000001200b4847062e5e74149c8696d66e1c1d8425e170660a075eaa25c1e90875b336a600006f00039e6c56dfa327c9e1be09d0d851f30c0e6221a0dd7982a3f831b0f5cd8b30ff00006f80009e49ec6e74ab8569dcc2156cbed3fce0bb015b59837a45344e8b5b8a19e4e900006f800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000070dbdb38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001ad59c130290384931b270d162cd393f6ab1cb9d42a1a6de738f8ce4f5d5ff6900a4eb8f7000000120000002400000000000000000000000000000000000000000000000000000000000bed28ec0001011356be77df30920a01059a8361669da1390c63c41a0ea7679ef9fcab45dc9b000229701a66f2d436f8796a4ca058a4d9d8157df9adcedfe7e105b646ee84deb62400000000000000000000000000000000000000000000000000000000000003e7146f3c3109213edd135054e8a4614daa39c2d6d2e4a62e3bba93ebb66520b68e00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001011ad09f81030c650319579a1bdc06935e4d1006203e147c0b450887fd6d5e770002028b92dc59c0e639a67b5800142868d3eb41d46f26a3d8ce08c71bf4d2e78d4b00000000000000000000000000000000000000000000000000000000000003e72d7d0f2efeaa182176d6ffef73436b1cb172bba30942e898f26a7e11a6482fe700000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001049caf1c3acdf8db1e9874b08ab7d3bd0a3d591a421d86bd3bcddf6768f5e3670002011d70a67015cf64a3553b0aa53b84b15dca1070d9aba315998d524503fb81c700000000000000000000000000000000000000000000000000000000000003e7176d460bcad8425779886202cb8160d6ce65654285b26992f94d912181a843d000000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001066b0730cc654d45acaec1b163df6aab93d353c53e7a46c494d09c14afae43400002146f3c3109213edd135054e8a4614daa39c2d6d2e4a62e3bba93ebb66520b68e00000000000000000000000000000000000000000000000000000000000003e80190857f4d6ad63c5132e9c9f21bd7d462d5882152476825ac7d4e345d515b9500000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001069cbb71d0a3ea621b5727c5492fa8d8eba8cb60208b0de0e4cd7d2acc85f97900022d1406afd9ab272d1d69d07663260f8354d919ee2c26fc2f7dba5f2481e2658d00000000000000000000000000000000000000000000000000000000000003e7028b92dc59c0e639a67b5800142868d3eb41d46f26a3d8ce08c71bf4d2e78d4b00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010703d0042ea563b1718cc6395f7ccbfe3488be9c2795b62c82fa3ba1168e41de00020c4c86b9161d90f4137c5a977595dd4effad4cf74d46d4632c78d1e4e22df73e00000000000000000000000000000000000000000000000000000000000003e72e3033b9b4319935f6135aa63fd9de84a93dad41202ea18a468f2d40a88192a600000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010737740cd105914662f014560dfcf23a2dfae04379ea52d3731b17b43c0a1ab4000214ac88a46d4926c114ba808ae4c56000689ffa862f347339a419dd3d971d8bb200000000000000000000000000000000000000000000000000000000000003e7056f47b76b37b7ea837c2a1c1fb1c3335856b2b1f8234b5e45a54849bfe626fc00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000108389c31f5dd17cf02ebbd26c754471d5575df888e12c9b78636d2aa36dac2c2000202722dc983ea7b9963878a27e3fcc690674628a596a42949eae01aa2e284375d00000000000000000000000000000000000000000000000000000000000003e71c5e350766d6ae7c45abf76a3ce829e8e2db6d603a9a3d4e28af3df99929bd9700000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000109803d1245db14be01db0b1cb0398b86995849ef0e09a76eef03fedbfa55d8bc0002066279451caa3f1eeb975ee89941ef936200eca4a1a26fac831c886dd5914dec00000000000000000000000000000000000000000000000000000000000003e705617eabdb4b9866e51690d1556b5862ca7a54de9e74b6f0d8e83cfbb7ba8b4d00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010a3123ec58d067f7e900e9eeb1fc7a55b45663efbb7ee5431d142d9e93d0dcdf00020f502211f8603476d9c20225bb3b7606859a3f39a19e2cf0d97529f9de3aae1000000000000000000000000000000000000000000000000000000000000003e72a5332a1e62f0f63be898ed80aca44562c73d5edcfca002bac2ccb147207119300000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00010cb24f530bf1748aa7b9401264705fc5a57b5e91f9ec9c8df37c6ba8c628229300020d66061d89df3e08d8ea36e71e053602871895c6b877ed3357c072f90a4bbad200000000000000000000000000000000000000000000000000000000000003e70b71c4bf1b6ca944f0f7b27abf87f028527fe2ee6109cd0c4dcbef89680ff54c00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000111a3c4edbb16400a9567d960a23e436adc19f429bf03cbf5b357be53106f479e0002063c4e9483fab54a5c4ceaa196d9f974e1a79fb3e37f566b0cef90f948d147e000000000000000000000000000000000000000000000000000000000000003e71c3ccba76206d231c3f5983b1b01385a9f57a5ebe7d9c6caeab20e6077bb7db600000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001123fd2cb9f6e8a225766e311cc86070470faea8d63232e61628274a5aface17600020b71c4bf1b6ca944f0f7b27abf87f028527fe2ee6109cd0c4dcbef89680ff54c00000000000000000000000000000000000000000000000000000000000003e829d6b3c3179ec53ca890e77a984f9dada05242a31f000ea47b1be1cd7839197500000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000112d875fd715dc34851c7d9f5ab8eb1bde0d09317220f19816d156d9eae6fb91d00021f3d78d1b5c84393c4cb85a6de369b5cce9f925cac3824494e85c0c74c7070a100000000000000000000000000000000000000000000000000000000000003e730099bb2ef4bd6d1a39dfc44097ee011c2252bb0b6a3ea372c41fecc9d77c0b900000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011300c6aab4adddcc261a003da5b29b985e25ca4f258907d9e9694805c8f7ecb300022a5332a1e62f0f63be898ed80aca44562c73d5edcfca002bac2ccb147207119300000000000000000000000000000000000000000000000000000000000003e81ed7c45b1b55c1ca09acd74390b67647e370beb59140bf1e6f81cc2fa9c522c900000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000117cc5262366b6cac79add7d118d3827123d34d2ad23e946d3fbac1e2430d48b600021d930249dbf757666373a8dafab99b8cbf6fb7fef3452181fc63392c6a89caed00000000000000000000000000000000000000000000000000000000000003e703b633211ac2a8010e05cc24fc75b89ea9764e303803ea5164d58d6564e3a34f00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011882778e3e8f849c24d918e9e94b6c54fd598bafbefd3ba195f2afd3a0f0922600021ed7c45b1b55c1ca09acd74390b67647e370beb59140bf1e6f81cc2fa9c522c900000000000000000000000000000000000000000000000000000000000003e82d1406afd9ab272d1d69d07663260f8354d919ee2c26fc2f7dba5f2481e2658d00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011c6c1b1da91fe2287e198b409670d293bc0a0ca55b2936127f322e0b79765cec0002056f47b76b37b7ea837c2a1c1fb1c3335856b2b1f8234b5e45a54849bfe626fc00000000000000000000000000000000000000000000000000000000000003e82cc968259fdbaec8dce510e0c0fdb53f319a892ee7e243622712a1214758550e00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011c6e04b27b0e48590a8e5b8598d94690fa72c320cbde2fc196c42c3741378e71000217ddfd3ca5e72090b830a5e809b9d29aa455a15b61f165030f1b515738cb31c100000000000000000000000000000000000000000000000000000000000003e7016d0e9cf1b97811c3b0b4d9aa6a01bc2bc906a023be0f5dbf5883e7443b25e200000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011ca5a3107056ef6ab80f6a23617e4dc15eab90da7d6c9e7cffc5ce8ec538a9290002176d460bcad8425779886202cb8160d6ce65654285b26992f94d912181a843d000000000000000000000000000000000000000000000000000000000000003e8066279451caa3f1eeb975ee89941ef936200eca4a1a26fac831c886dd5914dec00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011e162007d7bae3f57610e14f080d9ea718623b820fd967de00439df4cfc79cf200022e3033b9b4319935f6135aa63fd9de84a93dad41202ea18a468f2d40a88192a600000000000000000000000000000000000000000000000000000000000003e80e15a517e2880b5c8c23b6c914a00144fdfe1959dd4d421a8158d193de55ac8900000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011e708ea23e229730b780b732cea2d8d71b61e74dca0e9cac92b28818f3543df8000205617eabdb4b9866e51690d1556b5862ca7a54de9e74b6f0d8e83cfbb7ba8b4d00000000000000000000000000000000000000000000000000000000000003e81f3d78d1b5c84393c4cb85a6de369b5cce9f925cac3824494e85c0c74c7070a100000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00011f8df763c9a848ebb66c7ba09f956315f2da60208d172757245ed41352fd6edc00022d7d0f2efeaa182176d6ffef73436b1cb172bba30942e898f26a7e11a6482fe700000000000000000000000000000000000000000000000000000000000003e82d4652a079712bd8d06d585f4d11aee5dbc03ff98dcf3ed5f135fe6b513a8d9b00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000120048eba20339d2afa2bec93fea6c457adc81068add7d19f948483b307ba57c3000203b633211ac2a8010e05cc24fc75b89ea9764e303803ea5164d58d6564e3a34f00000000000000000000000000000000000000000000000000000000000003e80529412e2caac822e870b247ddb9b45c5dac8460f78e6e854c11d7d1b894312300000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000120958146eab37d33bc3f0f70c05ce2fa9765513255227423ebf26b744292ebfd00020190857f4d6ad63c5132e9c9f21bd7d462d5882152476825ac7d4e345d515b9500000000000000000000000000000000000000000000000000000000000003e80f502211f8603476d9c20225bb3b7606859a3f39a19e2cf0d97529f9de3aae1000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000120e12404584d5140257cf5f4e99baca10e21d5b7d4c66e6f828d085a90b56da300021c5e350766d6ae7c45abf76a3ce829e8e2db6d603a9a3d4e28af3df99929bd9700000000000000000000000000000000000000000000000000000000000003e82a3d3269c7ab4e365aefde47af42e9ec39e4233336678ccb9fc7d42953c87d1f00000000000000000000000000000000000000000000000000000000000003e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec0001217bab567f3ec85f8edef262a97a7cb64c560b8cc14f165c7ccb3d5132517969000230099bb2ef4bd6d1a39dfc44097ee011c2252bb0b6a3ea372c41fecc9d77c0b900000000000000000000000000000000000000000000000000000000000003e80d66061d89df3e08d8ea36e71e053602871895c6b877ed3357c072f90a4bbad200000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000123fc2a0b7ec70d02de5ea97c8141966b136449849eb7c1ea4ebd1610ea3185b700020e15a517e2880b5c8c23b6c914a00144fdfe1959dd4d421a8158d193de55ac8900000000000000000000000000000000000000000000000000000000000003e829701a66f2d436f8796a4ca058a4d9d8157df9adcedfe7e105b646ee84deb62400000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec000124675506b0793f9e5d98fa861c4bbbf77de17ae945a683727ae91070f628cd05000209f893ce014878f27f6f579c11de3f0f51a16d175834b9714264cacd893ed75800000000000000000000000000000000000000000000000000000000000003e702722dc983ea7b9963878a27e3fcc690674628a596a42949eae01aa2e284375d00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012856d0c2348b75e6ed685ed6b93097a40777932d6fb769a08f8a0f793ab5afc300022cc968259fdbaec8dce510e0c0fdb53f319a892ee7e243622712a1214758550e00000000000000000000000000000000000000000000000000000000000003e8063c4e9483fab54a5c4ceaa196d9f974e1a79fb3e37f566b0cef90f948d147e000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012992320eb1b3090683439ae08920e0bd866f0e05bd5dd09765846de198fbbf890002016d0e9cf1b97811c3b0b4d9aa6a01bc2bc906a023be0f5dbf5883e7443b25e200000000000000000000000000000000000000000000000000000000000003e809f893ce014878f27f6f579c11de3f0f51a16d175834b9714264cacd893ed75800000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012a012056e717b6d5bf5e7c05acc1bd320329b8df69ffa09f709390802892f64c00022a3d3269c7ab4e365aefde47af42e9ec39e4233336678ccb9fc7d42953c87d1f00000000000000000000000000000000000000000000000000000000000003e814ac88a46d4926c114ba808ae4c56000689ffa862f347339a419dd3d971d8bb200000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012ab4b19c00a9590246257ea2304425cb58a0565cf6c314d43ff2f4827878fb5600021c3ccba76206d231c3f5983b1b01385a9f57a5ebe7d9c6caeab20e6077bb7db600000000000000000000000000000000000000000000000000000000000003e81d930249dbf757666373a8dafab99b8cbf6fb7fef3452181fc63392c6a89caed00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012deb3c277562f1b09a20686fbab91f006b581cf72ccc7193fcba291778e5985600022d4652a079712bd8d06d585f4d11aee5dbc03ff98dcf3ed5f135fe6b513a8d9b00000000000000000000000000000000000000000000000000000000000003e817ddfd3ca5e72090b830a5e809b9d29aa455a15b61f165030f1b515738cb31c100000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012f0cc981a5c013e01ec2251145e1827a330c7a4e61512dc13f4991fa18bcdb3200020529412e2caac822e870b247ddb9b45c5dac8460f78e6e854c11d7d1b894312300000000000000000000000000000000000000000000000000000000000003e8011d70a67015cf64a3553b0aa53b84b15dca1070d9aba315998d524503fb81c700000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000040000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000bed28ec00012f7b60b5904ed650e5d5b6d6ee69d6fa90a492eb415ad8dec1ef13a0c9eccebc000229d6b3c3179ec53ca890e77a984f9dada05242a31f000ea47b1be1cd7839197500000000000000000000000000000000000000000000000000000000000003e80c4c86b9161d90f4137c5a977595dd4effad4cf74d46d4632c78d1e4e22df73e00000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000400000000000000080000000000000000" + ] +} diff --git a/yarn-project/end-to-end/src/fixtures/synching_blocks/10_9_3/blocks.json b/yarn-project/end-to-end/src/fixtures/synching_blocks/10_9_3/blocks.json new file mode 100644 index 00000000000..6a10269cb2e --- /dev/null +++ b/yarn-project/end-to-end/src/fixtures/synching_blocks/10_9_3/blocks.json @@ -0,0 +1,21 @@ +{ + "blocks": [ + "1200a06aae1368abe36530b585bd7a4d2ba4de5037b82076412691a187d7621e00000001000000000000000000000000000000000000000000000000000000000000000200bb626f058d54f33241dc8e3dcb2db5ff559db4b626392bde441703cf0853ab00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000100b59baa35b9dc267744f0ccb4e3b0255c1fc512460d91130c6bc19fb2668568d0000008027b610b9533e435c91bb9029bef8576bdb710e23a912664f3533ff91a70bfacc0000010023c08a6b1297210c5e24c76b9a936250a1ce2721576c26ea797c7ec35f9e46a9000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000070dbd8d40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000caf4380219bad7fe69646e70b18abc87bc8332913fc02e7ca1e359ea63a6d96fa3a8fe2000000010000000100000000000000000000000000000000000000000000000000000000000caf438000032906e8649848da4ba7b9906699a1a6822a0ab311746387776e9c73a57e501206188890eb3288ab5859e03bfc642af41fdc32194f209f34e88df2996dbd1ee5eb0f82ba823c27bf47b723dd674e43fa4fd37a8c4ce3af4bd7b9f785aa123ff467000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c5f0000000040000000000000004000000000009c5f40009c5f00009c4c405d15342d76e46e5be07d3cda0d753158431cdc5e39d29ce4e8fe1f5c070564a0009c4a0000000006999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f814c2d321b88ded0e008e23bcabfd7119e218f9964a2cf6496c6498c3ad2b9c06000000000000000000000000000000000000000000000000000000000000000127a4b26f0fae861600e17526b39adb2f13d4d6ffe9421310b7656e5b576830da0a43a7d0ff038f2492a51b4465c73f28c0644cdde523cb652668b167eab21b7a0000000000000000000000000000000000000000000000000000000000001e3d00000000026715c38900000a981f8b08000000000002ff95584d883447197ebb00aabbb7777776f6677a7a667aa7a7a7a7bb676677fb4bbe68e855c14348cc8f00f962cc17bc885e043d68503c091e3c7911c5430848902012056f060904f496006340104390e0c193474f2aa260f079aaba6b57b3fb810bd5fb56d5fb576fbd00f5d45b7357b4a71e111dbd287257f4d1081f89cf047f31da48247a3c93307a00227ae205f4a3276c1385e671e299e81933f18c6d5713f7a27b66e29e6d571300cf47cf9b89e76dbb9ab81fdd3713f76db313977040f425adfaf87e4a027c9f009410dfa76407dfa725baa4e95d7c3f2d7bf83e2bfb97b439c0f73939c0f7330032bca4b1437c3f2b47f8be20c797b472f2108c144fd2ec8b5c3496ef8d5bb300782d6369958e39a4fb218d21df0cf9fd900f214ffc7efc1aeb5d094553452200de6e3c97308e5fe8231bf70bdc9370478f7df1e271023a327432a6cc600c9900f1d8c88cbbd6cbece9047ce364027adfc84cc61c899331240f13482689914c00bad64b1ee89816624a0e0d3d893b5d903c7980e451ef1be863dd59b3964ddc00f0f1278f62d1f6ef40fa3f0646a6089337434c1e4dd11d9ce2a3e777c47b49009246be00abbb343dc8f0395ce07392536981702e19cec2eccd0add82dd95e90096e8aed82d4db742b764b762d7afd1add8ade5ae87599095c260bd6e55ba46006fad40e96b54abaa2524830749ea1b257b2aa68ea255e31512a26ce47bad4c00ab46be3f8086d3fa8ec8fb5237f2c3d62b177be22dfc0c432f4bf6942702ce00bc9157c099cf17187e43168dfca8f58a155dcafb40e4c625922bc510f90b90004b953dab11e91c2d6bbde5ca4cc387d5923d75d5534b78372b8d0c23594c5700adb72ac15580ab50982d96ad94a3c6fb3a26167467412fdf94ac9177e1ce02002da3e18a731517f56ba9b902a8cb548d6f9d57ad5725504a466d19d7607c5b00d68ed1c4cc3042244c6aa333216b42d6772ceba5c822d2802809221fa7d55f00e1e00662ac742a925665687501ff30908f17c3dee93ff4a15d30b43070b046001c292c6b13c74e4f2beb4dab7636e86d14a8c85189a3f61cb5efa8cc51078e001a3a6ae1a823471d3b2adff01c6c98199b2d7cfd976cbbd8d46a8befb6dab400de668d54a9912ab50f1ecfb33cd8188ce97aceb154b68d1720d6358621b2da0032e6e7d0bb3dbfc0fc402eba40d63690fef54002ebf599bac0f7627bdeaaf50039dd1baf11c1cd9ada279d457586dc59af1aef93c8d3baf1e603dadf80e37100d9345e6eed175c53708618730550ce186fcd8acfb8bdd4be5517265779cb5c00b4ded60564b36dbd7aa3fa5ecd39d7dbdee2bf9536fe4f8dffe085a75b730600e12d8feeb8c672aa1a59e53d66b30a4799a79201e33a187fef29c6f12b5c0300dad678cb3913c3e76c0cadf7b4559fb7def91916ed825d9f3760fc9c348eb100c1b7318c1009cf2e8cce33b29e91f58b9615ebdadc90e0c64aa7e20ceb41bb0028e01fd363bc19f64e7fb5db1ed9704f5ad13cb7c4c2ac35e0ad2533d0b8400037637761ba4493458726e8e2c0133a3410863e5e07dd0e6b0016ad1089c2c300b255a5c3177d8d02b62457f0af1dfc1b482d7a6cb63a499656e77f2bf930b500442b336ce702909a37deab48c065e3fd185a5581682e8bd51dd1af0b76fb2700ad9787382ca1bf446c5e976587ab08cacfc1399a87e0fcb6848df78bd6cb78006b05616bca1c0dbfe917c944858c02973d5285c9552eaa68bd5162a60136c900883d75d55323b838cb8d0c039d4d017f098ec52853443bcc66235c9c793082006b6fcb88ae3177467dec47c60192b9c2e00878187a546ed451419099c9ccac00fc391f3e4d6d91c6ad9502da473ac0f2033f878d7725a70d161f01eed3203000977ad0b5abe223c7151ee4b6f80878c1a303d478808c2d3e82a430c507e92200a1641e242c3e7248e6b991ccbb76557c58bec2141fa48b80f61388a2f8788000e491b1931b9bc79dcdce73eca98f22c2fb1b8b08d60f03561287218b88e0c300e9fd7fd514fef59ac2e52d06ab1a4584bd3d40e96b14b295f772404569a7080092245385c1b202972d296ea162b41420360688f9ab86c7649a36aa440aa7a700f11d51df94b8c1a5e5ad52ec76ea2302ea5c922ed9b34635e0cce629869f1600083eccdb9d2e657d2032976b8549277f6e322b35c9ce644a719226189ba84900ab26397beaaaa77278375b1919734ea72c3366e0ba2a350031b345a3438069004a77527a790ffba4be065ee85ff2fcf921e7c20073f725e8a03351c836780b00d9308652326acbe883f1f3e23b461c02ed1b468884716074c6648dc9fa25cb000a8c4d6fc05863a55311e3a0a1054bf8c7f3364e87bdd3dfe8439b32b42c2200cabec8b75b4b32eeb776c76d63e4a8cc517b8eda7754e2a803470d1d153aea00c851c78e0a2a16112cb0525662ea655789c5b6124b5960a1bc5ba16af7629f003caf5a1e6c0cc6743ce7d8af5096aad7106bc4bb80485133e6ee72543fb3f7000c0219df7009dbf2d7142d352eeb72636edd92b76e49edbfec2caa3572a72c001af51ef21429fce680f62b70fc51aa46bd65ed2fb9a6e08642ad526b6eefc6009648265761595836b880e05c7a71a5fa5ecc39d7ab6ff1df4a1bffa7c67ff000c2d3da9c4178cba33b8eb19c342ee1ecfb52da8488792a1930aec3c4ff4f8c00e3075c030b22e32de74c0cfffcbf055edc1578b90b76bc3903e35fe4cc319a00facc3042245c6f8dce3559d764fdbb65c5baaa1b12dc58e954e061c2e7cb160009fe01d3635c0d3ba7b5eab6472aee098a089e5b62618a3d203200c7d01dce007a449b5d43b4190f84818ad904479e057c32e1f335beedc90b8b33c159d3dd006ddae863e0dd9ce89d12bd7789de03a2f7a18133bde4793e9d41ee7199351a00119fa757477a787dc533a89c29e3ce29eece05da6c6eb53c4447e706194fa100eaa372dae88f3c0c33b8327073cef9223db05035c5fcc765da6dc24ce19ad500d30c9895ce3fc12108c8a94189f9b0d7f7989cda20ce690b2e9ac0240819bd00c135cc905948c520b166c7e206a8c851a9a3f61cb5efa85d471d386ae8a88100a38e1c75eca843bec207161a4fe0ef97e5a45bdf449de07b0208c4839e4e9f0090e904178d7e49e22ebd663704dbaec658c84e806327262409439270b7be2500337bec27d882841bd97a0be2f828447da6bf23cb46037308df198b447fc5b900158e98feae3d62a6f23477ee88cf5494600919b5650470e81f48e518cd3136008c10098bd2e86489382ac8fa8a65c562c21bce4a77b31b15857d269770f935005674e370d83bfdd3bea80c59541a5faed50fd862f3a8c60d287854ab91d50a002a2c59b5f10a5f9674e60de777618d2e91d6257ccf51e178854f9eb72c0f820086315d1028f5ef0094fa37880362b180c88260a90908d51aaf31fdb66cba45001637009d2d53cc9ba90218ac08dce5b8c0ea4a5345ff565676c76a1c9c023000f0579c9da2d1bf1fd03e37e69f5236fa3d6b3f2b6ff9b1a45416a60cac6e0c0050c3b26c7815f5012979cb94aaef159c73bdea16ffadb4f17f6afc072f3cad00ccf300de320dcc72eca3e01fdd72a4e0838101e33a4cfcff8d38fa73ae01ad00ea41b5600c7d6d6368bda7ad0220bdc6c592b860177c1cfbfb0ed1bbdbc330004224ac37550ffe05c1df1fb90bb4bcf5e70cab82970f5a9d35a62a2bcc3d6a009cc693c4268494dc934b2fd251b88f5f6f4351d10ee6d7d14ee3e3a58cf1a000f13f76c9df35038f4fb10855ce2386d83d80c06ee4477b13f1a2bd688fbfbd00e29ff9ed75cfb61ea7fd36da837844817d98db8f227603d3555114edb3bb0b00ebbb8d7ff188a7a191861fbe94e93bd377fe03f4b5032b5e1600007339c60b00000013911f8b08000000000002ffa55a7bac2d57595fb36666ef3db35fe79c00fd989933fb31fbfd9a73cfbdb4ccb5250d6a5bfa4014a231374ac1f88a901400d1941850c1d686aa69a8a689a4c4a046099646214609463426ea1fa241d1a20021f887d510d4f20718aa688cf1f7fbd6ccecede59cdb3f3cc99ab3d69a6f7d00efef5b6b7db3af2adbd2d7945d7b50a9abcaaefa78a8fa46e1af8ee62b55bb007ba82ab57b6af7bc01e3da3da6298d66f1c5fdb5fbe5c5fda69917d7b14ad900d709eae079af72f17c8daae0799faa5e27640dcf07947705e027af218207490013d4ad7a2674c186cab4ed7fdd9473f3d45565a97aa6eb32df28e61b98afa80046a61b7e42d4beaf2aaedfec2babe90f54c5f7dfa08c80d2846d20b29a5440000b0fbb4d744740621da3e79c9c29f54ae5a7ea1a10790d1fc3db957f9fa55400eabc452878133e3b40dee9726d0fac74c84a8f827438d5c7548f537d0ad22b00a69c62aaee702ac0549f5301a61a7d4e85980a381562aa15702ac254c8a988006a53a778e801c6a783186f22be89d5550b80e8463acef4694c9898c3f834d30051388098a7e0f734422fb233d5827c6f6e28dbb723829e9ea9ea1b5594aaef00cbac8e9f593d3bb38238b3c2c05776dc0acf94fdbc0a53f55678101431c0ca00413cf4e119f501f4f3c36a40fd90d901581a92a50187c7230cc9ab1a0987ec000ef4086f8ec6e88e47e34c8d12604bc613186c32018f9389186c9237311868003ca626d011f46f273a49d5bb323d1892e02105100442f4301c0b4176477a4c0082b2749c646a3c01c1493205c1e91404a7532138cd5b41f017d51404c1823d00d19354bd2fd3a301091e50c07bca6201a9a23c2aa1d100d082ae7e1554c2380021e9099c2b9dde0e37357fc7aaf89b9d29fd8c823c1fceac3115d14ac6a0fd009c1aa716ec304c320b3ab20642262e448d55e12ab17195c29942e34c1cce0b00479a73e82c309c73b810bdb03bd7985c2c333d5d62b4d4e8350e7a999e535e00f7562b1b17ae2c7a33e2803b1e8570f820557f07c5cc53f53988399f2c20f9004c2d52f5f770b5395c695ec794fa07b5a02b017294aa7f04e4a83d3f53d67f00292cfc4266c554841b168a084baf1ae99062cec5c116afb59528432da83b79003da2fd38d2fb914604e966206ba8c9b83582be0340c5808a194af1001133a600228e62f1fa11b8b1d4884c5e572aa9d90809755c7390e0aa3f8d5ce78a278c00b550257ec4911e0f7373160e34cc5d3477e071e9c01240a332806eb2b973680073482e4c6b4c8601cc4841028d5ee3a007111827eeb458393d5889c9298cd300a0df84fa92de0c2d1ec38c505a7d905ab7c338716a6550473c416ab01e476a00b0ee80d6429831ac0798ba4b05b91901f96a42b609f9dd84fc66b8ba98312e001461d2d750ec148b98e80e75206604a70a2619eecd38e448ef477a08ee9a03005923ca1733c2d8c3b1a629c63440a606516aff2d5e84642724976f56416abd001bec8468ccb5ce44849ae2dd0fa829251045222dd8d378925913c4e39080b6000144f85a0fab590938c3732680585249a68293611d27047d870185df84c66f00dc43bf112a398a047e8336451a78372d7514b60aa61f2b541b52b574cc8004000232fd3325d349ce34341740bac114a6998a699ecad75b23ccd9d336e77e83008a789ab2711a6d461917c03b5b2cf1fe036a99331e18c69d43c64d4a90b09f002d321d2e4859389e8614fb43466c2403d82a1ca5d69fc32f40f023c01fb4c900f767d434b57ed3d01f4fe91b4c5fb33c7dc13766a29bb964322a482fc5374000592d336b6654877c3d9d41dea92e4601df95a3d925fc9bd5c27f4bf8072c38009d89cf83db9b0cf0978706c8a830ca31a5a49f55b3d4fa2a65409b09b77c27003afcbcd1a1e19eb40224a7c51c4297ca0e162b00fe935a95802b3c570288250095f95270ce093a27e88b0614724d2f702893880d8a39e4415bc2a1be4a573d009ab60aa6bf969b474d69136cfac43f9a231b5bff8304ad116e31d88c17a4bd00e2bbd51ac9db51eb9ccd855ee3b91ead326b056b0c08681bc00d001b6a530200e2c0696f04104b2acbb5e05c13744dd0ae01853cf34be53128d6995ea02d6300f0c7c470346fe54ceb49b185ccb985304096dc719650189451e8766414330700c34be8375821405675184a5f318682223067afda9cbb4f2d53fd0ac8b6e43400da9a326e8177bddde1fd1d6a9733bebcc0c18465bdc373b7de82f12d291fad00c1f16a4decf7e414f5067bd23a4cf55b112020f800f02fdbe4fbed6a95ea6f0031f4e31503648300a1da819c01c2ee4a6fa84e625feb9d04080ff8bbcc5a8b00ac7a95e9d51af2ae74315af25d395a5fc2bf592dfcb7847fc09253d9dbc12d00e3ff680171e6f474fdb65c1cb5e06e4f85510e719a47d43ad54f5306b4b57000cb77a2c377191d1aee496bb9cdaced064297ca5e6e53003ea6d21230c5331500402ca96c76827343d00d417fce8042aed5050e255472141bc883b683433d4d003f3b5ab50aa6df6f3c3d532bda04fc601718cfe578477ffba0f137d900e84d00f4b650bcedd78cb7f1844ddf0d96a2c8505c6eef9724f19c2171c989c2e85f00820cfeaa79f282fe716064a217c5270b9c92f427d4dcf8d1620ccf5d4c12cc007d12a74bfb1c590654478be2b43a37a7550ed7181211bc89c343bfc2709b890013d96a2be78f1d86f42fa88e5ec7ee5663729722678a22357a8d835ea6b7f300e2fcb1dd9f3fcc4a9e3f76803286b8a43743db62333c42bcd737a9fe2282630096ea7fe1eec4adda7e13760ffda5ccdacc10c3b33aa6f497cd460848c4cdbf003518c64875f62b919ff54b9995ac8b3d66b5df6356e250b2c7cc44e1d3728f00999a8485d7e0612de94bef477a05ee9a1b5923266921c8e04cd62ad1725dc90074b2c23172b1927b08b9496074fbb834faf202a32ff69995f837680b9ee48e0069a1c53ef20ddc46fc898ebb59666ac3885b2dd7b8e2acd7b8e2acd772c55900e72dbfe2d81b05011a796e486d5cb016037a09226901327a33e27506eec3a300e051023f0b9309d6dda62646bb09ef399075467233dae20ed8c2be010d6323004ea64580af18e0f6abcb009f9a005f316e715a9a4f8b005f31c0edfbca009f009ae85c15013ed909ce1d417704fdb632c0671704b8b9bd1914f022fada04e1007043f2efac5530fdc6c25b66f4166a92bccc84e9ef2d99ce33e08cbcc02136003b78dbaebe05cc5bd4d6ec186bccd9bb36e71e53dbd47e18b26d398d9652c6002bc09b5e39c7fb47d479cef8f6828c8b9b907da6a9f7f3f40a18bf42ca47290038dea5c4fe9e9ca23ec3a69eae53fb437075107c1cf8b76df2fd1c62d27ec200d04f7674f733f80d5501e4f49b54e2eb8ceabc22e17a2eee0eca0ae9222dc3000fa10dddeb62b4e5bb72945ec2bf592dfcb7847fc09253096370cbc38d1c410066538af36c2e8e9a32b0a930ca2106fea84a53fbd394012d156ef94e74f8bb004687867bd2da5ec9ac2b6710ba54f6f6ca5500fe81ba5a025ec5f3aa00624900e5ec5c709e11f48ca07f6a4021d7ee0287122a398a33c883760e87fa34b3d900d1ae5530fdd7c62b911769934c35e4eaa1fd0eea433de40a07451929f738450005c8916c6b1735225b158525db149638f48ba292cf92d7995f5c083bfb0b2100bb9de242e85f7221ec90b4eb172bfd839598f45fe642b82f6338651903487100cbd01dc87564234bf752c7952a8853e566c83b46e5f3b86338ac2d95b744a70055de12a3d4390264c45b62e5b7714b743a99e5b036e51ed635c06728452eb90058f585a1aeb82d04545d1c354c0d2c62d18b23bd1fe910dc357bb2863a765a005166453d4039807234de3ae16d46b8ffb8f32e68943e1415168984ba2c04420015755fa92a57bfff5b7ff4856bbfb2f9c4ebeffdf8a38fde78687ddb3fdfff00cedf7bfb2fdcfdc24b4f7f9978fa99ee77b1a4abbbec61c9fc899f78fd7b9f007aef8f4cbff1c56f7fe8e73ff3678fd87ff5c84f3df437ef78f2ce2f7d6c7300e36bcf2ba9c7513ccdea660097816064a0230c186cf0a38075464dab753b5000518029d7d810bd5e47f80c04d8cb2c8fb83c2d4be8635eee6340e8c99bf8ee005eaec448895b48b194576f868d54538065af5cefff8e58508d60563beac3ac003754dfa4438fce4b8adaf66e351216045dab9f597d3bb7c273fffee0f30aac00576c2f02da1f52515e85a5619c420ce7400c4c3ac0785ce2766d99b74557af00a3c3b672c7a54c1de0761a2e1877eb1e28bc5379451dd3037a97501e87ade30082daf10135968b9ba2f36358e9d88603db9d2ef6dc6e177b6eb72b7b6e376f00f99eeb3c0937d58d9cc1d4793cd39e2bf558e729a23b6651f618cc547e497900a983a3b2eb1599c12d3343b3536406e315061dcddb1007e97433d5e90155af00db073ffd3ef8e9f7859f7ede0a7e3e4c276d302c7a1a61fbcbb047cecf478800ce96227107fc3ca63aa9f35be4c7f812e56e23e4baae8c85ee09c2a94736dc00ae4c3242fb5dd6207ae0a0770107644cb4d59377bdbce5657abbd2173c927a00fa8c574646b5bf7798fe69669d32526b66f29485f13e4ad7314add95e854b0009ee6ada0782afa88e45d94b782a2772a78a4527dca4a130b52be99e44d7378002ac5254cd6cda4d4a54e51a41d0f8175e809562f6f05454faaef437937cc9b00bc83756a1e012e5807efac34468eb2bc11cef3956ac3437fec8db0a6778b35006ea3c7353daee9487fdce3ca91d7c3ca688495a391ac1ce5ad58193422c245008cb950fa5e44fabd518495c35bac8c1b43ae1cf6d01f48bf37e4ca683484eb001ca961ea520db5a888ad5e195bd6b088ad61590f1deeeba187057d55b97d2c0055bae2ca3211ef371f0530394195675cd6821a073d9cc0f911c61d172bc707002bc7fc26b0aff55fd4db6f7acd72d36349092089874d0fe5a2fa28e5110be70065f71c4133b671fb727f12b72ff7152ce223c98ceb9cc2a9b9dcf4dc6f904d00af8ee9ef50f5d47d15f2a2546b7bc5979d5ef96567a82981d396ac5b974d8f0091524750885f6a1642192243bd1f3153ebe648d688a3b6987a9b80da1750b1009b35fdb472025faf939d3abe40b837f005c2fd31c002bf372e4aa311ef5bee009bca2ae3d85419a3bc34da1b17a5d188a551f707cbd2e8d8d435a37d69745c009446239646ddb795a5d1faad4ba3118e906396463df047b98eeaad82e91f570063a3da3a55cb3c792b4fa994fe512d7b51d973cb5ea7ec75cb5e50f6c2b2d7002f7b71d91b94bd535e5c1a2c158e5975733f58ea263182b166087fb246095c0025a913a6289ce2c301ee1509afb0ee1fe20aeb3e0b5db3143d3dac1e4aa9d600fd5859aa4d5ebe543b31a55adeeca6bcd9b9bf9fdfecf41cc7d40451fb02fc00142efc47fc46c752adfb455cf0dc3f36f4bdff6fa936d9176793af2bd5262f005faa9db0540b4e671283e096ae26e28c459c2f941755462515463944ff2f42008f159f32a095a5da4474f8959b4bb5495eaaed95ca4e58aa75fff3e6526d720053a996159e84b5a08a75cb52adb18b41517c39f3c09f1478784f12a62badb200544b9be05ec1b865963c2952ea891c57da189e70d81693b07ba2f99dbb89f4006537dbcd4cb519ebf5a687c4ee5db69980e24241b58d3a56d5753dad20ab9c00702baf9d48feaab0d216d96d00be56b5d34acaed1f22768c88ad43117326f0006cdb4d5c4e9a44052cddb4721d58bac73c64bc0a878cca9de73c10e0805171003ac2748bef5b4dbcff26d5cc157ea245946e2bb35a9d3b557e6a25faee511b000aebb689ef01d5310a6b930cb8137cfced4033ffed00d4238834261b756485005c566485b27752f6dcb2d7297bddb21794bdb0ecf5cb5e5cf60665efb4ceac0060d22e0f7d0f9b13a83024e7ac08f9b7de20d31e813c6c159547543d77a5f600057a36d2080526ff862749b2c124d9a0a1dea3da26c49b3db9985650a8727900406e7679d6ebf600f384eae56c785a8e863e0f7ae67c294038e657de678ef90060c3366c340fd930274a390062b1eef040e81f75c086dfb1b1fa199479848d001e76c40e8f9b60e3983fd8f068780f95a4fc94eec98197643b5d2cfc75d5cd00c91e5f20bd3909cb6194b76daf23643d92f58eb1faa3ead890e529d7e3a93b00b36c7e118cf86da7f2715c522b9fc5d513d71d472e99241c757cbcfba4f9150088dca419987e843b2a4eda565fbe081a401af14f4a2306b91109882595ae2f0038a9c3a84bd0bf30a0977c11142a390ae83040f31df02716e50729c3f4e7ca000f52bc460bd3c5c77f733d30b7ff0ef50c9518ace875cb5ec45a82edf3aeee00c7c0f8af2a2e25902fc5213225f469f5026c4e419d305f3130501f7f2412b4003157f5559c565ea246308d25360fcff690df2787f8705ef9eff2c3f945dfe100f25f87f0981223d1748662bb80b60b10ccd56a1ecc7a802b4b60a7d533f98e00586dc8774498a87a9bf2d36adbd0979f0fb983e2b3f7a0fceced6b9ede9da1007c011fc9e634e07116778652213e6e1081af8b51c077e528be847fb3da1cb300847fc082d358aa22e056aaa814271471ae15b929609d840aa31cd47ff53af40058fd4eca80265fc4a9c3803aacde657468b827ad80b714d46dfba5b283214e0043d57bcd694800e5b3b80062496530129c23828e08fa3a030ab9fc0bdcd0d800c5a0c08131461b38e04fbe23faad82e9efca1d42f9b409ef617e8497a7115f007e8f7929bf4bcae436567cf6971b9b8e374e7e113b62e10197ba7d79218790001f68f0271c38e406b8f685b1cc0fc0756cb8b60cd71f10ae87785660551dc100b2c33d365865807ad530a4d63425e30f418caf0de96bc301f87dd4fca429530043fe52eaba55b36bd819f050ba064b569fa855d3eacf82845d73d3ea33d7f900cb36d762faa941906bd2f19a58e0d59c1a0a7156cdaff9fc1d1dfec9efe87c00d38a8db6fafe9a6f319162411de4eab51a87ae0c75ad56ab73e881ba97569f00bc665158123e9745640a8baab52a875590ac91056d70d640d43be4101925c700203488546878078b6c2e32e3bae1a45ef38d5c0dcad5009926e56ad69a940b00ff44aea669a55cbf536b0ae758d0028b2d83cd972150d75a1c3640a591569f0035afaab5caf975157e2afcd4ff02e3b668efb6280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001242ab1a2bd6d07d8d61ea56d85861446349e52c6b7c0612b702cb1e6db6ad0b089000001000000000085864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631156eabf84e3ea50d40e3330224f2d2e81648fff8f1f7ec1bc6d2873cca6e959d0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000114c2d321b88ded0e008e23bcabfd7119e218f9964a2cf6496c6498c3ad2b9c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "219bad7fe69646e70b18abc87bc8332913fc02e7ca1e359ea63a6d96fa3a8fe2000000020000000000000000000000000000000000000000000000000000000000000002001f266f1020a46c663bdf276849a1ad6284039a286e59c145fece6d9f5047b000089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000200b59baa35b9dc267744f0ccb4e3b0255c1fc512460d91130c6bc19fb2668568d0000010014bb81ea3ae27ab8133a10a2ef426f90173a3108f75e91614c375603f029bd4a0000018023c08a6b1297210c5e24c76b9a936250a1ce2721576c26ea797c7ec35f9e46a9000001800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000070dbd8f80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000caf438016f9987850ab2b3ec26210e8bee60a6d0af9d19939f106f0aecd60a16414f5b2000000020000000100000000000000000000000000000000000000000000000000000000000caf43800003190e04a7b2bcec2bd9f46d6351579f9623b0aca0b304468497515522f740a2101e160b0b73158f3bb4576f4fe7c1763304049e85517c02129493c9bc1f1a86d91e3c545786f2098a0ed6694f5f49fd407d1b60a50122e995fb37b7f1aaa3e14f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c5f0000000040000000000000004000000000009c5f40009c5f00009c4c405d15342d76e46e5be07d3cda0d753158431cdc5e39d29ce4e8fe1f5c070564a0009c4a0000000006999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f801f595d1e7be64f80c670849206be58b45246f44302c15435100d7eb653d645500000000000000000000000000000000000000000000000000000000000000012b2a7fc4bd74f07a2dcf4a5dcb8642b3aa7c16132e115c032a1b8d96a870683b1de9ccd83e9067a8f9f84960c8399af3bb72131b795aabb4888347390db8b8de0000000000000000000000000000000000000000000000000000000000000c7700000000064cbe507e000000fe1f8b08000000000002ff4d50d14a0331109c640093cd5e92f6b90f0a822054aa9e2f77e09360af3ef9e06ff7ab9cbd43e8c18400dd99cdec5c464888ef10bb0023449407ca11fc0aa1807ddd43ed6ce75ff67600de80480417165b5661d9b009336f41661f4db3f3f995f4fee2837ee0615d30004283f9c2c157b709a860d73006095ed648b2f5295a67d723abd257bef346dc00fd24da0c44232860474b940a6d85c6c1cb60a5be008fa8df01b883e63261d000139e2a4407d79e514f38be51536ed5563d54ccff79f24d1e92393145e24448009d0e49e83043dc7d1d11f83ba629a4fce154f6bff67116a2d9f63ccdd77e6e00912698a79971b81eae7fb4916d6790010000da4cf031000001bd1f8b0800000000000002ff3d523d4f1c410c7df3e119cfc721a50a4552a68874097b45769500160e8e86e24a7e00120542a247fc407e15cfb31c2bd96b7becf7c6f64c08ce00ef10f416981062a682fe063fa564feae7e22e95ef7478bed5781a7b8858708008b4522f53584fa06e92f0fcf1610f5706345074b9ee09cfe01be211e9c9125001f4916ca3ca8020a26179c99ea192c75f6b1d2ab9e96d469a4d861a3e9fb5d00242a03600e1aa51312ac48350ac9a0154eb493f217fa4a1942279b185b1f6c00668a67b0b7d957a284e669a536e28368f345d43f8936e4e831113ea910fe1f00e413dea55333c95c2f7493b932d8cc4c1694d11b79947de62d2e2b422e8d580047b42dae67a79c7cc87e541499d9c80f6ea1d80ec65dca69070c974c95f578005a9a9ece66689e91c305f19ae57054a9d7f4df32938dceee2c9d4c12497ebf00ae869b6b1af828e035da2e1fb956c17a7b0e83af44382db1621b546ef58cba001ac4c30ab1b656adb5c569500e948a7899394fcaf8333183ca166f8b5d591c00e9a044df0da36c5850346afd0ea755ab3d42fec623acabac4d12f0552bcbd5000a1ae99aaab9325cafaacddc42f6b2c5cbce05221af1c582f3f7f3f70f7dd500175f03030000dce235010000013f1f8b08000000000002ff3d90bb4e0331100045afedf8b17e8506290520da480196c62b101248846c9a14347c74be8a3bde00c06a67349ec73d638f304a3fc3842330c2d84087610b7e032df0ffbc850bfb00b0ff96f37e31689a92c21ce65e98175b0a13a76026695dd17fc1d21fe026e900f18f6cb93ac8d05138f71d76273e46b821a607e01a69567d25333416206b6100544649183593431ae1746e3a27a6924e4ddbd4d7ef1d85a1aea7d5e526ec4100a1550e219393b21da104a96cac446e51ff9095482bc8da91125acd642d4d2700aa98a219b9d2f31db4fe07d50b684d46cdb6cb67cabf208bfc0d9c8f5c3eec00f016f9ee4361ed036587f727d602475d2d593453eb4a86bbcb160b97c9e49b008e9e1dca672a784785139ca8f71647ef826fcaa7575cae2e824ade29a45ce900b3607f5064a821cb361336e7cdf917686dc2f811020000df27eb560000012b001f8b08000000000002ff3d50c14ec3300c7d49b6c47593f4ba03481cb8200d0028126aa571a4745c38ecb7f7553ca7d32ad975deb3df8b332238ff812067600044d82526c80bf80923f1f7fd88288b2c17c3962de019ce8855d646ac5b6cc400cc2984d95a77cc3fd8cfc6c637928375991df0d46cccb11b11bdb20a79027a0010ca185d7056f69e602e93d7c253f1aca434bc70c2d7bf1d653a46669040a5001a4411b350d3a15738edeb2bf08c7a766dd35069a466549b9195ea0956cae700bbd1be34bc190d77a37a331ae851459bbc50fe938b51fe0131f613ba74c4ac0008a92be4be508e38bd934b1c8db564d3d4a929055ec56eb1f91254997c6f4f00e324534122157e114dbdb544e6986472a22783d4d6b776db2369aeccd96c2f002836c407b4dbcc385c0fd77fa6b1e19cf5010000f73a3d03000005941f8b0800000000000002ff7556bdab244510afee9e8f9eeeed99e9d99dd9dd87a2a2890030efee9d1ef35003913beffc40e45203f15f3033500c3410414104ff0953110031301283c3ccc3ec82c3d0c8e4c040f457d533fbf6b873a17bbbaaabebe35700d5d5734646e92b64ec6b446764b21213d967093f8b51e2efdae354d8ebf6fa002de65d4f8334863ac7269973e664985fa51cf30d2a2e61b33e2768bd79830f00dd64612856d5246a0d5534696399651696012b1396052b6396854b8aeca46d00b6886649f48c0a3250017ea178932a4cc643c2b184a73365142f9d06d3afa0007b056aa5b1ca57c25fe1840e6f4123dc211c21c2060547853799239559774a00f41cb99b4ac0516e71c0919c5dac85236b6006d830182e9ba82a477ad99129002bc71a56a7a4fe2037d2b54965b068bc96635539a9327b8c8acc31ccac568600c00cb6f3987c267bd93c644fdcf470f36df2ece69322f134cffe19d1c466d900d372f614640d3230590bd980ac996c846c41364cb652111164cb64942879d9006a306307ec2fad27bdeec0ea7487a08f56936eb996f2f5727c7d741ccc758400540415f523575791e1f4cb69f941690791364c7a55a32a9a913e02c4ed481f008ba72be866b78c5903e7f7a81be9d349352d406a05a4cf12483883adcf21de00addb53ae63a8f86252a1668f39cb7ece323ce665ad9d5c0e4958f1a699b353004cca1f1c8f9e297d41691f50bec05e87460e8a68554faa6e1e14658fe36235001eac7a81193e15ba9874518b23883baf65939dd5e5a17e234916a944fd46e30011b3b72562fe9ecab97e4db9d8288f6c805942693ca86f8ed4bb83fa7256ef00a0be3411eaa340fa4b82940b876f5f9c6f1f9f7d1847cf4c071b06c3c794bb00df703ddaaa461e9ea27aa4df2735fb22272a37291751fdd14bf5fb792c37c300d798ea287b711eb207dfee515c428f4bc92778791912bc0f211b52e8fe216400bd208bfea082cda1fe2fca17f5f9a23e3f520f668ec44514b291143685f08b0007d5737d17b3fa7c561f81864ade0b48ca0848cd29dff86654c5f3e97a7c7b00ff8d3b6884a8cd8932731950b4a8b5226feaa54135170d8a978d342814a7f1009232be321e6d4e6d539b131169492dd773789159210160da55a83107ced513005427ef027bc73963e3c84c517af7c2d2c3c448c646b20e879ea58e0fe169a800adc1ab43e8ec782cd4df7837724a0d547a489ba13e3231e9d9a4679357679300da21719e2b0757a9e55bdca212d54be447f50e6e718bc186b382f78a0c7baf00503647e735abcd3adcdd02a555cae54b821b08be4e9b83e006f3460471a4700099e8742cea58f4561245306d0a263f0e46accc2a1c82c1c802fce3e8566dbd0038fdeed2915aee48dc7e36481a63401b495a6aa9606e7a68e841f51a2b7f5800b9c3aae8d9c19ed1ee07e87e9f8639964e0f9887b69f54bf4147ec50649d6500990f920c80040fed90795fd130aa0f81cd9ad91891311aa0370e5bec7f42db0039f0750a3c3b0e3cb9b3c5bc8dc3a4378344bce688d70cdb9709b649f725de008e7a54df493b565f4b3bee21f123f5a3fa26d90fdccef30198b05e1a04933e0085c4d16ec5da4e5a322cd10e115eb464c4bbbee8b36bde3b50fdfff89f4e0b00ecd50efe634478dacba3036fa528632d4f0d9cfd2195343a093f43008bf1ef0004ff9f18c7bb88016e04f176c77bbb3df67ea6fd9c9b41ef31ef3b78bedb220068163449f00482bfd2c941f004f38908e248b1dd8bce3d8bee59f44e12455c00fd230a523232abd84f7ac0d8a220ef4a7afa7a71fade5c10d4734ef095e27000af4b7480c2875aee35b7c220df0db05c36fc80fe49ed6cd93de25ea7f62a2f007fd9ccaf6129ada40cdc7aeea7d633e91a5d2cf007d3b9b2c6161e1f90055400e11553ffd87254ff429db1f9a89b73feaccc152c91c54dbb228b2ae04065f100d9b625659d75fce18a3ff97075692c6f830ed6e1b8e5031ee6bcb54ce6426a006bad67b282f56ad4fa8a32d0c8862f9fd3eef6eef67f1a47be96370b0000fc003cf9cb0000018a1f8b08000000000002ff3552cb4a2d410cac74fa91eebe5e00dce942776e84a3ce0199c19de0f1b17121082e44702ffea85f65a5e738904c0027935425353d41256ca1f6084c50cd7428e7e0536819b0bb5364dbd9ee85b100ed5643a0c9c28fd0c53391fe1ee992e98305c47b78f072773241a45c008788008fb2d2c479e02b222651f163094c469b90a5cea19a83049b43b269d47945e30031f467069e006bd0689d4d488d63a64232d40629b593f20c7d4f49d03d65c5004061583dec63023f564ff6464a5a2d9c266fb06dd01c13b16e9136b89ea5500014cd21d1a7a8b36839412ed9e571bd860d7998ce912e96973f3dcbdfb719c500d7d52be2252f54369ad61bafe430509fb9fd2353f3459ed645286d32e5ff4200b0e862bf51f784fdf4f43d7376759dc407cc49ffd3ab43bcae10eb6aeaab2d00626ab953e84c3cff45ef5636f820a61a97fd5e5ce424a48351f0ed38d4033600548bd68e20d6acf9fde06bdc8fb6daba2401bfacb1ddbca193ae9b7998461800ccac7b58c95e37f8dc8a12d189af161cff1cfffc024357b20c9e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001242ab1a2bd6d07d8d61ea56d85861446349e52c6b7c0612b702cb1e6db6ad0b089000001000000000085864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a63124877c50868f86712240eb535d90d1c97403d074805dd3758c3aecb02958f8d40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000101f595d1e7be64f80c670849206be58b45246f44302c15435100d7eb653d6455000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "16f9987850ab2b3ec26210e8bee60a6d0af9d19939f106f0aecd60a16414f5b20000000300000000000000000000000000000000000000000000000000000000000000020072a772a7df20e9b815639c8497a6725787fe345833782c48e6f7eb2d98fcd700089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000300b59baa35b9dc267744f0ccb4e3b0255c1fc512460d91130c6bc19fb2668568d000001800cacc084c73ea0517258da5558517bd57342e247149da61d2d65ccfda13ac6cb0000020023c08a6b1297210c5e24c76b9a936250a1ce2721576c26ea797c7ec35f9e46a9000002000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000070dbd91c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000caf438010605a5842a1b9c54b0dff75804dba7dc3165630c56ec10485d5103eced01b81000000030000000100000000000000000000000000000000000000000000000000000000000caf438000032af57320a0a3c66d5996f28796b811bc31b3b9cb24bd3d475705821afdae16290c661c51495da9559f09271a89b5a5b33fc83574c737551a6c2576b5bd38ff6d22bc6ce50a3b301a4a69de618ab29d86ee1ce740fa682ea804ce54affbb7e567000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c5f0000000040000000000000004000000000009c5f40009c5f00009c4c405d15342d76e46e5be07d3cda0d753158431cdc5e39d29ce4e8fe1f5c070564a0009c4a0000000006999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f82f6bcc824014da6ffe5a5d9357672e71023705b12b4c0a46422b36b1f8e30fe800000000000000000000000000000000000000000000000000000000000000010a61b86c05c921bdc04ae78e1e19c5bdb1d8a9c2a0aafef4addccf8fdcba38841ff77dec4100baf62b87b9a1e824419d3979d0b2a4bc4d28b6dc5cdb155a53b900000000000000000000000000000000000000000000000000000000000004550000000002387e3048000002221f8b08000000000002ff7d523d8b1441107dfd0031ddbd3ddd3383885ee0ea9a08c2a86bd20b0626b71f81811c06829888a90800226222221a991898991a98f84fee57f9aa678ec5e406aa66fad5ab9ad755b5008651fa214c38006b18ebe910ee824fa079be4e9770611bb667826d2783a6a9002554d885dd1236ecc37e432acc46e2967e87867e0f779fd47e2fc90729bbaa00b56f8a5f44565ec47bc055c48312054a2d78bc0e2bc73b42b237e06ca0735600e8d6512d6391426fa702b4a0e284b5324a3e5b9dcef4ac3e5163fd65512dcf0026e85074682f32c331738a4e99f6ffcc10198b3a161d03339565a640e4512e006cd156b4a85c6a9a4106a1247d2494fd8847fc5e9904e34de6e5be218f785c0054f472dd18a19a68887f8619714a4c4f584bec23da110762a615ac4dc4de23008d7842cc26c192d47c2b359f126bb260b923f61add8867c4dc117b29d8731e00edc2f3f8025efa5c60dd8857d7a07cc346378d8c1acd6c75d4058d500a1c7f00fee6322663ce33e67d8df9d96acc528777739182c4cbbdbbc25aae617d391400b471c487023fbd225bf2e9b28a640aa5707c23beb0b2bc78b3afdc36deec410051c930df64e6e75cf3f36c359fd4efd2bb3f9cd12da3618ccf9d4c4abaf50300ddb49566d5717cb9eb09fe447fa8bbc155ebe9fbdc15d599236920e91786990014f4403f5452cfc6934f3d79a09e61a87a86d92ef4fcc6403d49a85dd11d17006f912681caa02e9108ace3fc3b099cd76c8393f393f37f5a578201d203000000fa3858e80000021f1f8b08000000000002ff7d52b18a1441107dddd5d3d3db00d33d3b281c1778ba0606c2a86bd21b9808eede1a1878208889988a2022262200a291898199a98189df725fe5ab9e39964b6ea0baa75ebfaa7e5d556b88b10f0021610fac21aee5827017fc02ade5f6e4043e6cc3f64cb1ed64b034730213760061b72107b2d103c7758786eb29fc7d72fa538dda6bbe554d7a53d74564ca4500bc075c47dc1bbdda9805dd233875ef28c991e47ca0382291ba6ea70274a0c00084b511a3bf9d4d67aac5d11225d58b8ae9e88bb3ae58d75d44ba43e4743a4500facb918ebe78eb8bf58e9126964a11441589586cf48ae752c304198492968d00506e476cf8bf92046925f349df91473c2a46d319e3234ce385f817c888c7c400ac28261db14fe8466c8949a75897887d401af194984b8a25cdf94e733e23d60064c5724fec0dfa11cf89f903f64ab11774e3a2a1fb128d56b7208611af8f980032de808f513bcbf74d563b3b530a022f7f7b159367c1f1ccb97ae666ab678e0017bb302729487cdcfb6b84038b1ad529e858848f056edac48ff8ac191b666c009a9ab1996dd6d528a5c0b3d05f995937beec1b5a7dd9836292305e32e373ae00f179b61a4fea0faddd5ff6e8965888b4b9d74e69b57ea29f6651563ddb97fb0025c15f58eeeb6c70d4965c97b92fa697036920e9378699e4ecc075a8a4250b004f3ef5e4817a86a1ea1966bbd0f30703f524a5f6c5f61cbc459a041a411d22001558dbf96f12388fd906c7e7c7e7ff01b796338dc1030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001242ab1a2bd6d07d8d61ea56d85861446349e52c6b7c0612b702cb1e6db6ad0b089000001000000000085864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a6311011feaa54609098a884322267ec754c637b280c15aa79c3be9f1394e2b29cd3000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012f6bcc824014da6ffe5a5d9357672e71023705b12b4c0a46422b36b1f8e30fe8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "10605a5842a1b9c54b0dff75804dba7dc3165630c56ec10485d5103eced01b8100000004000000000000000000000000000000000000000000000000000000000000000200349ea2b99f46c4773c80107dc82901878e5b59c65234a0f4d250af4ea6685c00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000400323a7b606c3969fd54b1f8416c15bab89e0e46c6fc048ca485f328083d85929000002002df099bd238264c5384ae2d964a81b06488145c5c9ffed56037d0f35503ede450000028023c08a6b1297210c5e24c76b9a936250a1ce2721576c26ea797c7ec35f9e46a9000002800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000070dbd9400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000bebf73028fe6d43677338cf4a18dac57c70a9100100475526d0401ef0e9d49010335275000000040000000100000000000000000000000000000000000000000000000000000000000bebf730010f9be430c659d2adaf687b98936c47e8a9afff9792812a7a4381434eb2cabd71030e79ee591d89dc7f54021863ae121cb4f5e5f880a295c317df95c93b5e96ad700eef5fabe3470c278dcdd06d97c5063a7dfe401a4ca3a845c444db4aa348032906787314fa744039aa1e6653bce93a68f558ef654ea77684f4f3d3c7a4421326000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000189f3aa02e294c439ca63020f85ab900973325f92122d52de95b101429944fabed13935f2042695af41c5932d07f1a9b8881e8347cbaf56527cec39ea263af9ae5f213bc2dcd0820ffdd3b785a37600cab5f6ec2dc252357df71fe869e73e65e40695747d248eaba0e8b316d8660f0b5dd512ee45ffcf63224b3612fd81390938f4293236863737bfe4c4f6f041e1918d40a3a2b97f90e6e49659e644bf10272d7b09aaa12d32718a80fa712f43c951d38b0b9682f0aabf4ecd40768d391a6cb702ebc1ca48209cdd97b56a400efd5d5654d527048c1ec11afc912c34d222f586de65c8b31b049db222718db9f086678e6bcdd7f4f0e45df6f1528bcb5d9ccdf8d1358c040392856770467e364420ec82153a9d0c331df50f798d0670c84eccc90372ee319ff60b1423a58b47d6a8610b2a3aeea3f0768745f0fb70d4245947fd786c7fbf79abe0b143d31d167af0872834e76aa2e3cfc7d3bb5ad416815baea36e8e91dc3b4caf7299a67d5f87d374696cf1bc9f7f09a1829a86dacbe1852856ffd0b56e68f46ac2b7853c38fbe0c45c8ffc98571d7442659cde2451ec2a761fb69feccd8743633db7c43d759a98bef993f7ec5629587117e298add37c655f800000004000000000000000400000000", + "28fe6d43677338cf4a18dac57c70a9100100475526d0401ef0e9d49010335275000000050000000000000000000000000000000000000000000000000000000000000002000a6495d721498926a30f77d50e99abdea29b3f1b2d6a66062f0d986b75f6a600089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000500323a7b606c3969fd54b1f8416c15bab89e0e46c6fc048ca485f328083d859290000028026fc4706c9114b3f88b72f8bc80feeebc3cbb424ece29b440cee2e7762ae768a000003002f6660ab20a3db42414b781c24313f836abf8cdde61eb3787937df2a08e04655000003000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000070dbd9640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000d70417420ac71e1bd3e70825cc59c4590f0f163dc4a0efde14e734a4755bfd0b99a29e6000000050000000100000000000000000000000000000000000000000000000000000000000d704174000427d99be3cf1d343d715ed24f33238222a4a68b8ad9ad1cecf895e80c6df6892011c58c442882343993398e172a90d153a03117964c6db38d5d1c970c01b6513c0e7b474dafc9a0ad183e38ef0e64364d7a97bd47c8c88071fbd12a86055e5b6c269198309dce20436ecac472e91a55bb6225c754de369b50b95a7b8bc4dbea66000821d85592df2ba7db38dcdba4a6e452e289851069e8796389b4c21a8669c675472f8730bb82041bbbc031354b119b29f81eb544a10bb34d383e79f2a2a958a15106a8aed6c770e0f638117bc6b89242e15b296f289eb37d4ce481edadbd85d5b500000000000000000000000000000000000000000000000000000000000000011cff7283cb5c29e7a9c395a73169298896bd212307dfea6bd78d5b8cd1d0b78c000000000000000000000000000000000000000000000000000000000000dead003dcfc1c0bcffc79ea40e3682d47a080e086ec96764b0ef93bf856a1444cba30054657374546f6b656e000000000000000000000000000000000000000000000f180d9e0c3e4a319bce698f699c50f822c30385d89f23f030bec9bfca10a072000000000000000000000000000000000000000000000000000000000000dead04cce1e5754d94c5883d6d5233dd2f2ae98813e7939b1e96d3e78b29fca0b583005453540000000000000000000000000000000000000000000000000000000000b67f527271fcf637270ef5e0779fa4a5a140700cdff80ab94a4cf514f8838c000000000000000000000000000000000000000000000000000000000000dead2b00be901d516cadf0ae12fa744a39610a606997a8707547cf6454e8832675cb000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c5f0000000040000000000000004000000000009c5f80009c5f00009c4c405d15342d76e46e5be07d3cda0d753158431cdc5e39d29ce4e8fe1f5c070564a0009c4a0000000006999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f82b7fbd849f92417221e567c919124b68c52f08deee4ce6c5d7ad71ba349937f20000000000000000000000000000000000000000000000000000000000000001081b6fc6f0b0c08088062e4bbb563dc00ace0177a5fd345d8bc1c4afdb77b8a91e4ddd5e8fefe0a88ac60e5d36efc13bb4f937ee19a1f37669f20a186ba00b060000000000000000000000000000000000000000000000000000000000006d3b000000001310763932000005841f8b08000000000002ffed56cfab1d35143e49002633c9647ecfdc67174fa90882729f7d0fec3c5a14046bab42b5a5a50b572e00ddead22e0417e2c28d165110410495f70fb8d40a2ea4b81344415c8a4205a900b40b17eaf765eedc3e5f2bf40fe885e44ebe24e73b3939f9926d314aef887100a744b6c524192a710f097e0e25c3df93f74aea4eb81367899d988a6814b58b004e31bb4412d44f89457d52d247d0599ee4f053340493ca8fd1a0112fa3368e0090992103288950324309262949667cdfd06d49c5d0c47dd1c758fbc7677f3d004a8ea9cae7a272efb6441e84174ae4701cc8d5a1df98305b0cb2ad8ce2a7d300004301025d8eba2c0015ba18b52f62273a8cae4e2764400928e8902a97341800d2f98474c7263a7aedc6e810e2c9268cae28cb7d9400cb0acb417188519e2d00e5642e26cbe3ba8b2d51df8b5bcab3a3f2d304ec087acb51957e53529f715700b84db1c45d019c3954cec73ebf2ab18fa1a19717c4cf5e66b39719b6c13242008a9e6693a7a34eb3194a67c8a4842a4025a18a5049a8065411aa0955841a400035a106505e136a013584da18970ecd96cd2ec6859f2dc1ae870d941626f2b000948b884bc85bec4fd2212e97a55dca6ba36ab01326e81e759f0fa31a1aacbd000947e9ee7f7fff1cf8495f61effa01f1785306c6635392266c12d4b0d1874700d746d4da4ae3d0df0c1865ef88644192c50648de918d15898d240b90d8458800f62cc2db2f0027a1dfe4a7e6801e7d3d17980eb6e78860d7b37b245e6f03ec007e2c8176138ea59d8565c4109d4f11b136c710b52708e05e3c2c16a9d48c2a00f3d8ed74dab8d432e19182453d6f6cbdded808d97963ed7a6353409650ca330089a64eedb45197d1dd640576254bc17d5cd2a57c3daa1acc557d6bc8d4c110004a85a554351221b52dcf5759b558e6b7d2ae727664b29976f6a98d79c3cf4a00036cbb51371d5a1db248fb8e636f936395664fcc9b560f670c78314906949e00fa35aa763289b854535232699b78f6e855659a88f20c9485475827b44c44350065058f6f48b594ab71503415a7de32699406c253e11c2608d45fa3509c0c9a008e4d8a7239afb4dcb7522a873fcac3f0c070f12577e6a7d77ffde48577b74e005fd317feb6977e7c66effce64775fee5421ca50553bce6f0fcad577e29ab1700afff909cfff0e93f93d3e910defffde5573f38f7f08dedafce656f47715d0d0087fc520f8c9f4fba8ffcd177f40af248db18148dafbaa1afcd2c274d1ceba300af4ddcaf386d1d74af87e7a959cdbec0b78cc73ae89317912d77a372556c4700192c6ae413b340171164bad64532aae4ff948f6259a02adcd9f9b2703755d100245c6371738d93fafbe79e58493d3d65e2561243315d36a32a26f109a30ed3008c699f339caff01879c211380ab95416c265eeefc7b858831423cb94a500fb00013a870898410fbcf916a35eac9a77bfeee40bc13d3c50720628ad7a6352da0018dd0dd41b81174314d68d51d91efab2d163769a0eb8607a2453c5940cd95000d10455eb92a42bb5399cc2ee90d2ee7b07ed0ee9a8d28c376e07bb19ec76190075aba7087515b06e07e288cc66574b326a66287a12f5bcc73e938e36910394004e986aa9f75db0f1a08c31fde67c595d7553be345cb4e2a2db6101439fcb6200e55cd00bd48b362efab8ac148dc46d6141dcda1ee3bf907e22b6bc2a7091b600f15a21793f1c93590b49d231b21d49be994876b12267f06e14ed123cf7d45500bcfcac4c1b12c90302d07771ad2dd7da92f2bb15a51e20132def74be6b183e009ca9349455a48d672c3e27409bd50d26fe2ccd8ad6dd8676928c2844598d9b008c6a90152568b312af1df5dbf426a3a44034f9c4da55ceb83440495298ca3000e60f972dd5359833ce2eb5dee519b70a4ce2f0e4db891fbec404ef1297df2300cae52ee7cb187ff1659c4f6552942dfcb91cd31d2704d005e7d8b4b1a99d7300814d0f76bf54d777948145121fd99543570e5df917278e2385980b00001d2400add0000012341f8b08000000000002ffed5afbab6cd75d5f7bad3dfbec993d007b66ce99d79e39f37ecf9c3df761ccbe4df042e5a66962487b434a29da60b50025587cf58608ad8ada083785c6478812215483a025544d8a52ac14b43fa620006a5ba53586189558698bd5a631a2a4fd7cbe6bef3dd39b734aff800e77efbb00d6777dd7f7fdfdaec73e179471f44565fc3b95baa08c57c44b95d60abf129e00a252fe95bef2fcdbfcdbee41dfbfcd3e4ae3712e6150994b84b878bf4915f000be5d7978bf591de07d87f2cf01b17a3ba7de49a220ef9412210c3e2ad1a6f8003a907b23e882725429d1258107193c00dc5341a283e280a4edbb7c5959b95500194f88a94eb9a49cb05cdc2ab552c5373b4a8d8812969457088b2de514c39e00f2c2f01e81a68fe8c7c9e0e939155aa54aee35bcf4215eb523d0bb4585b1ba001984fc2044f70d2a24f9d8fd29e1e08ff9ae8378bdc1b94d485ea7e44dea5d0027a8055093a016f56e66203703955c82da00b5086a0314b4088a006a13140100546d13d4012822a8432bab2e25eda1dfed1d63a4c3916375c101229a1d7d9c00e8ee31718ed93dee26ba13f59401baf2ba1db43a265155e8f7eeb232a1e96c0095f709d589d5fd89533789d3ec244ebb9b3851bb0416d508945c9233bdad32005f5051ac7e1661056bf431bddf1dc00783521f467a50f569244adc875c03ca00d567f770886e9fdda188c9665f0f696b98d38c86a3440dc7a0361e4de0b5c90004824e26e2b549fa88d7c0e3613581a1607e33d6e358fd72a2fb0332dce7000086208816ba2361c8e6508fc850a68ec6891a4dc070329e82e1740a86d3a930009ca64fc6f0093505438860267a12abc7123dec93e11e078c53170744198046008de939205461ab3f0497a83b46acc593ef4754dbdfa1ca7ed3add21f5150e500638933a20daae311d83ead46b153499cc13871601ea72f1cba99965d95854a00d7864a164c910d2676675920cdd875e7e8ced89d8b49d89c6900e78b444f1600e82d345ac15e2bd133aa5af84e3383536766ad296920fe6a1102be1dabe760009359ac9e879ab3a339345faa79acfe19f1364314cd4a00a97f53734611308700b17a0998c3de6cab9cd71426fe47e274698842941922ca036aa8255267125b00f3bb8c1263a8396d27c343ba8e3dbdebe93ea42bb6650e2dd9ad0e61ef36b000bac0ea6a8c76fbc898110d51eb4ac00f214d410d29e425a5c6be4136a843df00453df49e47692c48108cb470257d24931e0d527766b13348a3338ddd511ebb00923bc33c776ef0b9bbef73682e426b00a336dc4845da1aad60af051598220500129aa48430d38634805d382760dc44fa8cd614cf640437c268a57eecbc01ce00e9c6cead3047f72882393e84aae05c86d522b8312ab501fa41d54edd08cc2b00c4ec11f34789793b427d988934d88934103f75454d3407ba2d6e848e0a2e1900ecdc38604fef7a7a00e98a7d9923c61737c2d98391a62b467440a2fa616cfe00110311c58928e5bb553b761e8238111ed65a9755a13b41563aef55536a208600444530d3ee247126c8c701118d4564685e53b31c5192431031c51b4f8526d300ba3b26ea072c2ae226b27153d88f1be1929218236ef04c51061ea28f6b51250013fa7a66da88a66560b6c9a03dc1d8236a92ca32d6e2e12e2cd78676fd095c003311d73c96ce77868099498fb03fa2211ea76e04e39952c739e84ee70b8cff00ae5aa482b7ade0eebee0b62448da4fe7898ee6e42c124f229af2296b4a140300f82a1ac6cedf202ec0f04f40bfdda3dc7faf26b1f371cb7f34616cb07c4dd300f285d8984ab8cea492899916121be0ac1689334d0b34e2740a7d273aebb5390096f7a667c86f678bfc55911fb8031a9f310f696f70c0e7f61d702b0d463d240068bea8a6b1f32a75c03315693926367cc1dad04a4f5e6d14a7f90c4ae7c66e00cf9740fc77b5cc1197782f051153bcd94268ce883a23ea7f5a54e8353925a0006c21b62466d007cf0201f52a43b536a96442ff7fea1e35a14fb0f293fe70c60002ad51a03562be0b31bb73f25e726cb9c298af56a99873bdc27b355c26ce1200dee813d158c435106b6a9d2362036ad6828829de62253457445d1135b2a8d0006776a63e96c42ad1733c8b2ee46361a8cd2a99d0f36c0999710961822cb8e2002c60307d92db76680d3383c00bd8b7bd44822c4b7094fe3eeb28180230b3ec001176975ac43a816e0b82f1aca8e30674579b138c5f5627a9e08b53024c4406006f654e561b08be21e7da0a122f57a47e47ca51afb126ada258ff0c12040cef0006fd458f723fa896b1be6af977974c9075c26d2f38ad2541d85cea35cd49ea002b7d2209c20dff49e2ac4457bd4cf472057d973aeb2d3896f75667c86f678b00fc55911fb89454d67648cbfcafcda1ce8c91ae1f48d55173aef63418f590a00079bf5ac5fa71ea806725d2724c6cf84bd686567af25a6c1267b386d2b9b117009b1888d7559c23c678c7828829defa4468ae89ba26eaaf5b54e8b53c25a084004b4a620d7df09c20a01e679cd596954ce8276ca4276a499f401e64c468263b003bc6dbefdb78930580d1c4688b24da3e6aa38d9b71c66e7b21868c24e476710049164f5b1667ec28acfd25c910af9a3b2fd81f1b46167a31fc788ef5457fca00ae2fc0182172e74763c0fe0abb4b7313aa0cb80ee7d946756637aaecaed02500214413bbfb7185ee269120326a23fb8f1374195f301da38ecd8d06f0244eb8003f8621355ac15e2bd11b96edc226db7f6cf6f61f006e4e80651d71466b8a07000bafae21df4beb587f19c9318df557b93a1d61f5303f8ed5437f2d71d653e400f0b404907ed92e84c044debc52661aa3d4995b509ff5ff26ce7895ad31cbdd001ab394809235662a069fe46bccc4162c0c438695942fbdebe925a42bae658e00b8a48a24433039cbb196934aa2c74b6c23e74b3982509a319c6e9ab9d317a700387dbeabaca4bfc633e74eee901e9aef32dfe2ad259e18b8eb45a2d6ccb8e5006285d3cd6a85d3cd6a25a79b55faa4a71bb3555020486b436cb0eecdfb8c1200c830af2019d6439e64103edc0ad6c688b3684c835fcaac3be61107ba4ec96e00caa1cbf08579272c8c85783c9190e1d80992d15cc9f37662936e89d27482dc009d11d158c42d10ef52db1c116702b315444cf136b1d08c891a13f55e8b0a1b004e4f49701b9f96844428a211e9f04ea9bfd34a26f4bb327da68c165a92c56600caaa64eecfab525a01a72c360888f509a2eda4b401ce4fab8d5d3156809993001e61d7d52636d7a0db86603c31753c07baf1b9f3187fbf3a9f0abe39a5e28a00c8fa3cdee7e37310fc1c39d762487c1293faafa61cf5168b7abc8acd5308750030fc10e86f7a94fb69e4a4f9b0e53f3e61b86f1137343b88336e62c9af2dcd00794ed2f5bc843b38abf38913e7e987d44671d5596fc3b1bc179f21bf9d2df20057457ee05252496348cbcd8d6c41a613aaf3c7a93a6ac2c4a6c1a88704cd9f00aa38369fa50e786291966362c34f5a1b5ae9c96b732e71ce6da1746eeccdb9000b40fcb4ba90235ec0fb8220628ab73d2f34b744dd12f5598b0abd4e4e092800e19292d8421f3ce711509f659cd54e2a99d0ff60231d75913e495420470fdc000de132a6895ae1263a94eb1e37bb01725576d5e3e6573d72b1d4b1174bec9a00ec52c9f0866c6b287837bb7bb2672836ebd9b1ce9c7aac4b749dac0bf584d300f0af2e33d9341ac03a56f5c01e2c4f6dedae31dcfc1a034423a018e855eba0004a3763b728673f37c8ce7edecd38fbb9380437f353a27bb4774a741b3966990098d8babbddecb0dfd91d793bf6c84bdddb72dfd5ca0ffbadc4e9f0d2eb98770060c71df6f4aea73b90aed89439b4b15b3d4e9ce326b05c60b91aa36e874b3500afe6e43ac0ed9e75c1e6ee5db0c1852e40859c73f3f866e55d78cf5b1e78f100e293eb3fbffaa64f7cf083efb86f75d397eef8c027dff7e89517bff1d8d7c4007837593bfecfad97419ee1dacacef6adbdb33d802d9ce1ddfc44efb6417df600f02f5ebdfe1bd7af4ddef8e57beffbcdbf7bf641f3b70ffeca7d9ffbb9476e00fdca33eb77bcfa7989a9aeb606aae362af217141abe9308b98702f62fc2b4d0025f7459c29c66cf0a293eb447a710a63d5c56c62a8fab7f7e422d685477f4400b9b612d6714b6bcaba9ce872fd3bf5843be89bb0eac2e3e5d42a1f7be5873e00af40d62bd77101ebfe647e018bc5cc2bdf9c8760fefbe60d3fe55730d9a74c00d7ac4c3de57ae51e811a34fcf22e8e9d9c8ae763dc630018265b394d3698c9008a0c20ef773daf91e886951d295da8cb202f7e75f36e664555496ed1ceaa09002d4cc0bbea72a909711e56cdec9eb499f190fc66f2d9fcb619c9665332b2c500db610456592e6edddf2ad15cf5ad2abca2eab18bed74592ca82587ab08e9a600281a7e377632b0536828d8935630d8a92c17e706762a9b1026099192501a1c00d0f60d304c13184d5eb59b509a82ec36359b6592009667a87bb38c7d86fb71006548dc559e2bc4fcb2dc80fb99057cde939733909b810e72ac830c141c64b500d0b7ee01c8cf2ed84d76c11e98d75db05759f6ccde053b8d6cf38a3768a810000d9be068153a02977ad0cd5dcabce8f04a0a6a45012ec89d76a900e59e53850054b9a607825ed8f6e029b8e60578aa5e45a92bbc801b16f75fe44b4603feaa0033d6c1f0c00aef15fc44fb06d5b39529d7ca9513d041a6dc41ae5c23b34a0300a00a10aa28bbafa28a368f1ae0f83ed588ddff4b9c166aae69bd3e149c1b430003d90c97b5104a5e2534fcf861907b0563738fb6f33321fcbd2503403fc4a200624310ad323ece98842e31943ab45273422813e83fed0976e12ab3044aa80200b38f252771c23cb1eafb615da6d920553d3002958cac01dfb7d0b2ab1c536600566c911585e90ea91a244e50977e8077502b264e11b95447fe9561c5d2515c00b888451add00dd22bbb057e991075e0a2beffac617dcb77de48eafbb777b8d00e077be7aede79fb877f3ca854fdf7bf0a862c2c38ba98ae55c45b005e1002400dca369e3177ec2bffa4f0f7de90f7ef8b7b777ffb77efb6b85c7be78e7536f00eb3d592dfd655315b124894c1adfbbea79ab14d07a41961cc15e09023040b0005418fc3e8caf5bb4b44bd7043bd7042286f5814cf368f482d077df7a90d676002f5dc40f601fc65b0bcb8d6e59296c4d2e254ea9257d7c353425b15cb8eb1f00b25f43a6d70eefc93e6c1c66070c800f03bc829a8cd5d227fd0267dcc34ce400c35ce4401fbee58d4aaaa02c4047e98214a6730f4f11944b5ba35a4b9c5aeb0007c8a785dd6b8bdfe5c65ce92abb958ecd0a97bf10c6700a056439a3d0a36d001cc5752ced7eaff5ddb460e191c76ae3b1be7dca6ee5c4c452539b5ee278b2008e60277710a2b4b443ccf61a5ec8cd2f6a12e3a879e455488205eb59d5480b00cd8837da5e1b7bc1c25fab28a72b9b588f37da0dd06d1440b701ba05bcc0c600e59a6c08bb882fbb086c0c355c326306346b21198564f4bc65844060c1e467005c16eda8cdcfb4ba91ad0f8dbdf501c0062879ac6cd8e9a03c85a83285afd800ba2f28ccad423d44f96adcaad2f0e50a5eaf35c0b8dec00a5b78d9aeb020c600b581f58cf6011656cad62d2a0d76f95a4c0b846281d7ac057020a9db0389de003f90d86c10cbc0d0ba4979c35a132cc3266aa15754757b506ca12635b979c0008637ff02e2d5b02c7948187c58725cf95a51e718375d5ecb167ed14eaa4157007692c82ef90262117d200e949f234a591244ae238d5068cad6be41d485453d00e30b882d9e9604bcd9c613ba90efdb2fe0bd9bf62ee0dd869c04f6be7dc26900f6b403601b8b889f2f27bb1d5b58df6980dd89779bdd9dc834596d4483767e005821ce5d1687e6c3aa1ef5087b0f0e94de5b611198af83291d2ecc6650e60b001f0abdb7e71f0aa3530ec9e987705e461b7c6f680f245ca8675df4fcb1544f00dd47b58b3ab1f7b07c54f6eee705638fdefd35ac74de7b2d7f973a15fad91200ddcf97e8bae6e74b77208bef504e4be0acf08dccec565a244e54d7592fe25800de3367c86f678bfc55919f47cbec1408696f70db87f7dd16d060d443ecff2800edf80c75c023e75ada30121b3e6e6d68a527af88dfff704fd5ca8d1d0df0d100dcfb3d35ca11e533a020628ad71f0acd21518744fda845dde554e1f57eb12400700366f0f41186cfc82d58bd9209fd676940a83a7d82c1c3b083c1c34e1783007fa1bad9d5ef7176ae3bde3bd71dafdd743359b387ab6ebef7eca4183c4f56007b89d3cbfe22e358e03d487d6ca576acd42f5ba9f1f6147cd081dafd1d355c00d4f75019fafc0ad8834f7bba07485fea449f75a2df83bccfa99e55a6cfbf0c00b9e4f8c6f702e4a187727380f117fd83d8fb57b0307e21f6be7e893b8882c30050f3a1c84569606760fca2effaa536442bf925fe8111fe933f302ad927bb7b00f4fecb2f61bacf0901d805becf6e41badaf7fd80dd22b81763efa58b0e952500e3f332894261d2817fc0ee0158fab6320a4d1f4c8bfb121621a1a5203c4854007814f726194eb2fdc04a12f825ab57997a95c126a45ea11f522ffc277a85f600c9f43aa8f8a1488e09158858b1d44ad20569bfc26e195ccaf181b14307be7700fe928a3e137de65bc2a1a82bb62500002ad355940000028c1f8b0800000000000002ff8d54cd8a143110aefc74524977273d20b8c2285e85597716b40717f400e2ba73f2b08fe0237810f4053c8a47ef820711bc8b4fb02fa5df97de1d614f0036245da9547d5fa5aa92ad38634fc5e95e642bce474ca28f049f6244fc5ede0097a0e77a7e49ddf932c462981d36c5eda8f1985f4987f942c2636c8e1734df0013e841436b737a7e839c30f2568cd12c266b3a16b923696f441efe33cf19d400997bf7963d44e7f2dc109c64d91a6728aa8532a7ad84d0cfb607b64b36cdb6004bdb66478b01a21d5f7bc25ef30f8c134e8218425288460684330e0594c75200ae294d01e548cac2a5ad58162e6b8b8062a1b24eb3558c32229ab891b32c2e00664f0407c0cfe237f2623623b2eaa24524cee7329b32ae258cf12902b9f5fd00b9f5892f12a26774fb25bab5f831aea9b4c0f0f1c901c41c5046c5fe58601500fe8ba492a44e20b994e99a2434920a925063c3034ef0156a1ffd9aa2a581c7009ee70143099e16311cbc3db20c11b86f24de5433229781b98c2d971483853200161472c92ca4ae347d61f6a7430d41c33ac804e0a83d2ad70f0af8b7683cc0007b86821a873ab0206923ef50909407987c906123ef4f1056a2451c7a42ebdc009a0237a0054371a052c36cc7c03a860108a103c247e9f62dc730e9307729cc0026e8d94d83f76c42a705b3f6b0ff243ded01c640d005cc5a44f82195fa8c5e0095c721c9049238ade0f4455674dae130ea704dc5aae7edfa868bd6d1c155bb00c2bc8a6cbb897de5d0236ee991af4b8fccb6e2fc9e0db933ea34f4b80f0150002cc57785fe07e09c761bf9bd63f49d019328d27cda8434c221a9d77c57705f0035f345c0afbd087919cb8b00c05f9ae1ae74e841d7ab72d9b5a555d59ecb040076a4e1e7a9714024f1c94e8eae8eaefe02fe35119f900400003940e9ee000000018b1f8b08000000000002ff5d52cd4a35310c3d6dda34edf573f381bab8ba001314ae3a17740611575e75abb810c1bdf8aabe949e7450d0423393bf9393a4000324c435c4ee8001123305f4183cca9b01bbd987dac6368fd46d335f44de3000d10999dc924e69d89a40a4db3b0fbcf580838ed365b9fec62cee1e104269080056f404f80fbd0f4e2004a3ba8334ab12d2c860a222757a856a72b56008f4f20037b9b1e840ec3ac6aa634ce64dd41135af70d820b916a25ea1ac7034b224b3004a2415d19ac7906dc906eb4527f7eb7cfe3928dbd0da19af67c64b24ab4b37004662947afe03127e50cce8374d5056e1080a39d2427a72e66c989e9d7e6237009a542e3d497c587d005be49f1a4b6ed0bc24675c4cb83244eb537fe202b2270088c446d9721aa3264ff64e73d16d4a75888719628c62a4e0d3998289e9826b0053e2f9989e8d637a21a61803de27ef2007c7b7e47dfb4ffdc7846ac9da2e5700d8acf913e1a73f9136dff98910f0cd1ad3cd13162cb730733577359ad9c2d500caea7585d77510227ae1b3097b1f7b1f5f7535f090a102000039f0420c00000001581f8b08000000000002ff3551cb4e03310c9cc489e3a4c005097a006e48002015babd64e1c0896d7b40487046fc70bf8af1ae58c9de8c1fe389334042dc0041ec000c9098e9a08fe0a7b40cd8fb2dd4269bbe896d5a0c9116462621a34700d233036723c8b43f78e1de0bee669ed997b77fcee2e901216843302d4fc02500ca31b880108cf00a698112526731599166794a981c2a86c02c8fc9835a0686006a8fb5f498cc2f513b6adee0be4172f5215b940d1e7a300a90122945b4e61e00b2759857cbd69337d0ac642b24d7a4f2eaba85965c8f9e914e1be95ed05c2400af5c4cb841449b9770e43eb23788c446dfb252927ab30fce255dd027a79816008a1e8512928b1d8389e98a5b54f2b9ea0fa3ea4f728ab1e077f4e5e5e0fc460081bbf950cfd9502d59bbe6469b357f31fee6176b8b2d2f46c21f6b6c376f580071dccacc619e6134b395c3cae97583af5d1032fae0ed88f5697dfa03e7248000b53002000041b90896000001b71f8b08000000000002ff6552b16e1531105c007b7df67a7dd09202100d05d241de53a43b404242f0f2a81125a2a48f94228a00943ecaafe5ab32e3cb35c949deb3e77667e676bd130d712f6a47919da8660400291f044fc1ca22f6f38d643bd8e137ce76589744acb0e0a3e84224219ecbf00009f0786422031983cd9d4ac5648e5a08e90629a0d4a10228112a280a52e6580012f1b4a526e05912f3df76773deab7cda95214a5a1b8042bfa51e4bde8aff000cc048e91066c35b00bf88aad11d40a7e2ca3274191e549ce5c345b77a3f010002aa8ff499ae4f31c0a3da7e8886e6d0eadbca3a1e4924b72247e17a78795e90047672a808f5226393f7d2d39c356aefd67a36f2ebddbe2b610f436c7a1d140001bc1d04630fc9191c43d65441c33e5fd2b2197b59959d34bc46ee4ef6624d100089d53dc29eeed0bab1a2b2952295229f27f155940678a5b22d112477c8969000f2cd0f6288ea6797d2279f128195b5965cf96606ab9a1db19546cc495a11100d7a0531b26b95b38c521709a863fd8f74d7d81826ac9fc1546ebe6bc9078f5000be9eb5a2f24086fcd516e2c68906b663c0efd18cdacf158a15e27b9d907050023854f1739b93fb97f00366f60c80f0300004d5d68750000058a1f8b0800000000000002ff8d55cfab1c4510aeee9e376f77767676a6677fccbee999dd0d78005036e645b41f18c5a0312f3e63241e3c0822a2a2282a41fc8128281e72118f00a207c18b8282f122e412050fa2e6e01fa0472f221e3c79d5af6a66dec6e0c10085eee9aeeafeaaaaebabda5d324a1f27d33b4bb44ba61f63a2e18d84df10230026eadd5351d83bd53b751efbdea96690c650acd8efed8b62bf191bc541ef40001407cd68147b8023b3c71801e67b690bf3690af7f8f236e633d4c37c1ff5f700f85684f97e1adc8cabd3d30c76961dabc53b99933b3b4f138cd12e29358c48008d86c951a28a927d45b4dc1c1f45140e47ac3bd2e810ad1a7941303422afb700869d68ab13855b9d28ec44db6127daee44bded4ed4eb44fd5e27ea77a2a8ef00281c44b731d4bf7f7f5ff7a351426124beded5f8ea2818448e851a18a3e8d6004310758832e8413f488ef05acea6ffc7540653696661ea806c6b2a4a1d0b61002aca52a0a66c3b482ca416aa20b57c28c736976d1e5360f37497423dc64413004c6a0ac827285dd323d0e636c0f6310ad6f4a8a729a48f7b1a379f345ed353009e26fc01da88c1b3942153bef4125f7a3666ab06db17c9ace97960407a011800cd27c8d7f43230f8833cc7530ee875b26b7acd533c5ed31b9e72fe40399e58007085c6e08a1da738f736a5fbf28c78598ba06d36623fe4112c2e8cac2cf9e9009328d5bc4cf83d1a291f4818e6bd0626902c002c4b2214172409a8b04a4185008ca990d2ae328a97994ecf73654418699bc9a55719d626d5a9d769c6248abd00a80d0ad2eb49caa2c04b791a188388eb5619cfa62132104d032e65880c1ee40033acd3598cf5ace093f3e3c80ed1ce51521f50b1a62fbd4a73afe2ffa08bba009e3e1423bc3885f7619e05083d0a32847e99b2b6a24cd4f911499cbc0c34840051e675de449d716430b67bf70b4f5efa35f9f0ddfc879ffef8f9f657df7af3009b2f1eba72ecc49fbfff76feabcbe9b714013028bb872baf7938084b87927200d839ed00961d7ff8e367fe32fa96933f3ef7c027fba79ffee5c4c5ecbbd5f7006756374dae98739f52e575d51ef77aec18da01ba646827d0a540b3c6d4e2f600024b8d16624abd7a10d58e73440b8c157722afcac378b2524e49e64ce0559000c95ea29fe371b9388c6c0185791520d14ba9a015774a415c759d12e25589a900cc4597b743745e0d4bafb6565e854b8ea1f6e2924167e41878b9d0f5b9932400afc6c491bb658bbf6c3c5f34fe965e97cd0d89c4007555ca5e9c9ca7a04626007b892ce04856c8fa6abac0cd21e2def27a118213a3017042bb1830d76de79300bdc6272b5c1f60d80dd717281493e8c4eb841f5bf1cda4b90962275d0fb55d000fe5d26d44934e349d80e6c55a95607831abc1ea0b54af15824c9c573661c2002600089d8de1fa20466b503734bd8e53cde53568ca8b9de5e54043185baf1d001bb61aab840d07b6abbb26305ec6d092c54346874f5a1daec665c760bb61b000955bac313b628cab52cfc4d24468c6c92a4862a41d8ee1f0911a7fc447549a008a12d9a38198688e68dd40f642f3a0f2aa92ff01272c72ede818e6a49d47a2008bdad1326cdb7ad5035cbf62f7c75dd0e36b821e0bc39236a3519355c1af3000c668271ba79b1be2941978c5cdb1dbcf796f36fb80f773a4693e8d7173db6b00d3f33aee83f5f11dd27f644e8e21bb359c5b4ad6cb1c297d85f2a68b836b6000bcc90bd449e93852d076e2c083dce165c39a3b874bf0ae6cb298950943307100dea1ba65c5127f69a6ccd1dbd4c5a6b76daaa4e42aa81d0301b7066e597343007459ed756d5b59bdc36d81595acc33b690b185f71b0b9e32662caa8b73bf7400dc9c5d05fd4754b5c6328d873455ce59955e80740625802bec282c1cd72eea003366b2e5339730440188cfa9e8822880eb0ac6bd743dae2bbc2a66c09dc140003003ae9b41013333af67712b9bed70d7e4b695cf2bb650f1bfc6d7b4d3045100f1bfcb1e15578babff00f4f196a84c0a00006bfd1d5b000004331f8b0800000000000002ff8d55cdaa253510aefc74773ae9a4d3dd171c611417a2083dcebd00a07d980bb3f2cebd20080e8222ba1797be80e0d647f0055cb8f5115ccdda8500e042d01770296ef4fb92d367aec3087320399daaa4beaaaf2a9573314a5f8800713722e7626c8749dc5b829fc3e8f0f7de2bd2ba2b77f598b2ab3a4463a8030094620e9458cc8fa4c17c2deddb50c66b6ebfa1219854fd560c1ae965d3c65100e436ae090791351419882c45068794186cb5fb565bb79e4b2b6ed3cebe4ad30075ee1f966f7e61781c55bd17e57b7b4fe40db1374ae435a92a7880c984dd6200907365143fad86300c00d071d3718068d0c3a6fd509450189d3ed8510206140092bcb4c159c0591301f74022e1e875dc312297da6319b9f405929f91429f10000e46b49bf4dd2ad75e4cd7d35535dc13f550fc2aef6f0a1062bc4646a08d9b008af6aeb4b6635698a6324a5620ee3c266f1fefb4d85d476a3cbcfcb892825d00ad7d178c3ef3fbe7991f7c0496ef70f233e9ea49db1607bc860d6fdf39195100272bad83be654599db549ce8863026d0dd8e9b1e13444983862615652265f900447724d5181974c723dd19ee7c2579a73bef18b9d09db0cc5ca602c9cf4c61009a40374626dd6195af4177e813987e53d22adf80e99a1a64188abca95c028d002fc253004f31d0b16fab63e0c9c6bb1482271b2228892dbc6c8387d8c60c5d00a60ea7a0cb2db0915578db6666f8789a6167cbfafaee7feb6bdaeb6bba555f00104e33029e8ff58508bf47c0a98f20de4e887a92b8ca0fa7a867cc73bf6c6a0079f1a867463d2ff0ee4759fe13f5cca8e7a751cf35ea529ed4c5d943e78f5100a3c25b5fa32e3b22936d59af3f893f466dfc1eb5bf554abc461daaa8dc0e8d00afa62b72169f5e4e55e48ff7648161ef1a5451631cccff8c4ea5681609304c008ec995ab5f0a5723b6fc2de32abf5a0632329011ecf77995dfb023971d7f7000c7eff79950ee98c652c26c34e3d346c3cfb1341a8f8c944b8efe62b2a71b7f005637ca16364b97fda67cb89463bfe1cdc8434a9853c0febf24703f6a9a8e00003811d88f81c06e0776b780217460279317d50138750d6aa093e604dc606e5200b7a9ce5deecf00af421a50dc2605380a63ae020772c4da21f8cca8e7e5014f002d18334126824c6738f4b29cf1d00155ea0c9e1c4113c74ba13ec2a3d1f0800059f419e633ded0792a90919071c6e9d7652e907ab16c1b2863c026c006de950098a7023bb1451076066c6049aafbb524019b9e034b984917f0803b9259fe6100c8800d993de15252859d009bd92ed889d96259b221a602cbce14093b02b61b0071ffd5a37aff01eb9f035bbb5de9491dba5f6476ba015dd6741eb75c7d586f00f9a6936565e3513828675c1b50142d4ca113ab4f5cb7aa4f61ceb866555f1e0098ab46f14975a8f78bf2d1471ce89d75fe2551ce3bcfb71c7fe52df775d497000106bf701ec71d0f04c005e7b86cca523be702973dd0fb557d7ea10c2c12f800fe41ee3cb9f3e45fd7763d2e4a080000713784f40000022e1f8b0800000000000002ff8d53b18e14310c75e2c4f138d96bb962413414a085db95600690ae6200d96bb94fa040821fa04494f4481408891ef125f753f09cd959094441a47826008efd9ee3bc6c8943dc11eb81684bcc0243e53e61144c21d217b74974affb6b00ac753f4f8a9861c226f1e49e04fb92f223b8dbc103dd3862d0b14331298d91008bbb7871315ca9bbd2e24a480a94fee997d97fa757d72d5f2e95b2932235b00051502e0f89ee51b90a44777b600f572361f5bd07f3de528dced56019cbd8c100d005da06ece2b73bcb006e4c566f11925836f4d4f0f143494a8e3500fa2395000d5d8e41d13c9668b0c6750c55d768a43cf1a6fe397efd35c8ce48c42ac00e0054bdce352595b53b23304c1e9f40c2094515fb5a1195ff8ba439495b81e41500ad8e24b9933490e4261d2f53278cee3644d81c81465a3b5554730fb0ec108800121304483680bf2673f0b480b50c45305af406bd2b2c08794768e5db0be41500942d49b25f848d5d7f4cd62fe2d8cd91ac8e51ab77bb3620d40684f7d4ae7a002710d2605bf186db7377e10208c45c867c06db8bfa30173552f6427057a51f00c5c9ad3ef3acea995d812091e4249f6692098253c69ba1a8c905ff05dacf9e00c0752617c8d492173314504a71cacf47ca5871fee2da99a053958ac727807200557e5594f30d70ac79433f27bfd51c5c8e0ab85dff1956481834a9dd82d04d00cd9f273ed7b3befb9c9f27007fa8215d3da182aeaafa32f76554d5eacb01ec00c386beef20f6d0892f263abf39bff90dffa2c02d1d0400007db8f44900001000c51f8b08000000000002ff8d5a79a82cd9593f754e55ddeaaa5e6e7757dfea00fb7aaddebb6fddb76432f5f4e9a0f026c92463e2244119d40719a324ff0c1800cd334a0c38222f18464c50440d89514190209a3f9409a2c820320ee24212110091c8b89081a818301b21cbeff79daaea7e33f70eb950fdcef29df3fdbef56c00efba328ebea14cf07aa5ae2be3d7f0a3c2adc25f88afa654707ba4fce0e1e000e137a31e3c6c3fa5f13937d1a9cc4db6b8f87d8df2f0fb5ae5e3f775ea08bf008fa8e02a085bafe5d0d773d2317f6af21b3ea42c07e1145d578e1386ca89c200dab95227aaf63a47a92949a250f95e543b514e2d1a2a3f8ade2cadc5274888001ad07d5547c969602ed5c42c4b15652ac5f0a01ea1ba501127cddc1f9179830094bf2d4cd93ae6b0768e9ac24c6d956bd36253074d6d3675d0e4b6cb26b76c006aba6ceaa2a9c3a62e9aea1d36c568eab2294653adcba61e9a6236f5a8697500821fdd47fda49fa0a7c79e445d774088624f27b93e494893b09a9ce4ba170f00953127c07bd243a9677255837cdf5f5726323d929e9c2bbfa17a997a6beeb400a2dc699bdce926b913774365925a0c1ad3c78f7b4a6d5f3957e6391567ea0e001c007a1960a24132840d86cd01d4f5a36a407511fb000887443860b53d427500c0ea4800b338d023f41cc3b2663c1ae76a34c16c93f114569b4e01793a15ab004d8b4fac061e77d5142a9b60d4444f32f564ae0743323ce4008698102554c700c290c5911e93a10c1d4f72359e82e1749282619a82619a0ac3b4f84a86bfa4005230040433d5d34c3d95ebd1800c0f38a09fb2389894fe6ad4843604410dba00fa3570899309594fe17059fa6a789dfd6babf26f76aef4d30af2fc56ee8ca90088da640cde1f55e34c7d3d778693dc818e9c81b0494a5113557a4e623da7f400add8fa16abf3d2afe6acba0b54e7ac2e442f2cce351a17cb5ca74bd4961aa500fa4129d773caebbdd2c8fa8523cbd28c73c03b1b31fcbf9ba9e7a19879a6fe001662cea70b487ea21699fa7b78de1cae346fa2497d4a2de84aa01c65ea33a0001cf5e7e7caf91f8581ff9c3b0915e1c5a522e2caab469a3eebcec5c1168f1a0025ca500bea4eba47b41f6b7a5fd303a0bbd29531d464521b41df5d5025a04a001859c9000134a6228e13f1fa1140febf1a11e44da52681b9c13c10b8485ffe00ab91c93cf184b116ae9c1f61a5c7c3c29ca5030d0b172d1c785c39b004d0a8000aa097d8dc3db4392417d01a8d711766a4205d8d52fda0041118275e5a8e4c000f46a2318571eaf49b585f529ae14bc6302394d61c64ce1ac64932670b752400d318c6790f528393416b31cc1837bbe74cb3ddc28ca07c1529fba47c13291f0084ab8b19935211369b0dc54e898889e25077c58c40aa6092e1de8c43d6f4be00a687407765206344f96246187b38d634c59806c8d5a09799e7d111134e4c94006f51ddcc7917e0c4f8987adda90895a2ef719552025124d282499369ee4c11008f43121a4b88f075dea66615e10cbf3321c4107f92ca9c0ceb6442d2775a5200f84d6cfdc63bf41be1524c3181dfe04bc7c0474b35e26609fa6ea9da98aaa5006376c9a04bd0efad404f0ad0d05c17d20db0b639a998e6178af1ce086d26ed00b3edc354c43dcac6667c33cab8c0bcb3c512fdbfac9605f0ae05ee1e02b7290041c27eb6c875bc20e7461788d32eadfe1b2a168e7a0e5b754799f317f00b3000fc08e6eff689fbaf549a391fb3fcc7297d83e96b56a42ff8c64c7433974c460005e9a5f80638ab65eeccacea90afd319e44d7559ebb2afaacd2ec16f470bfe009ae0072d90cec4e781f6250678f6d0005b2a8c72a434f0736a96399fa30cf8006682967da2c3bfb33ab4e8c9ab8be4b49843e84ad9ddc50a84ffa45615e10a00bf2b21c4107fbe943997245d92f4b3961472a5173894b58b9da24cc770a8cf00d1551b69b304fd79eb954805b409f60073a6dd39b2b1f30524687d8cb40b9800c982bc57ec5badd1f765b52e602ef41abfebd12a7756b0c68084c6126e40f8004db5a90837f8dd082186f8cbf5a29467b404a93eb2a490677e813cc2a5980200b270015a27c0c7c4d098370bd03a2e9790399710060819cca9307da5d2edc8002a660ec04be8b7bb4280ac9a30140267690324469b59f5d9764b2d334dd996006cc6b7a68c4c81ebed0efd99da15c09717389840d63bfceed65b00df9273630009c4ab2511df2c10eb0dd6a4659ce93b081030fc6eccbfec13f7dbd52ad3df0063f9272b06c806014285607206088b2bbda13ab7a2a69d040838ab5deeac450056bdcaf56a0d7957baac2dd957d5d697e0b7a3057f4df0837640e5736d075a00fa59630171e6f474fd44a140b5e06a4f85510e3a8d7e875a67fa1e65c0b71600b4ec131d3e697568d193d712c1b5dd40e84ad9cbed1908efaab38af00cbf6700428821fe6627736e48ba21e9fb2c29e45a5de050c2a598620379f0ede050f700189d8d55b304fd01ebe9b95ad126c08355603c97ed1dadf7216b3d5900e84d00f4b658bcedd7adb771c3cd8847cc5291b1b8dcde2fc9e2a396c5253b0aab7f0071ff79e1f8d03f3088e22754fc84483e5efad1640ccf9d4cb173d27f849d9300619601d7d1a2dcadceed6e95552ce78a7b637813ab877e85ea361727326a2b00fb8f1daaf42fa88e5ec7e256a37177869c298ad428d50f4ab9dececbfdc77600bfffb023b9ffd881ca1ae292d20cdf168b61638dfdc726d3ff82e09865fa5f00b93a71a9366fc1eaa1ff2d773633c4f0ac8926fd1f76210425e2e6bfea0c6300a43ab3457ed62fe6ce645dae31abfd1ab31287923566260a4fab3526b5090b00ddc0b096f4a5f735bd02ba2b1b1923a78c1a820ccee4ac265a8e2b30c80adb00c8c54ace21443381d18d5b197d7981d117fbcccaf937f816dcc9b597b9924e001c5a09dbd22d39b5f8c97295ab252360b35ae388b35ee388b35ecb11675d7c00c511c70c1504a8dbecb4c90cf6798b81f512dfe17ab35852b811cf34f021ee0007c5d9e2c91483d76a6a553ce1610702cf28d88c06398741ccf741cd588d27006919e52b46b979a08af2d446f98ac18b2dd33c2da37cc52837df5545796a4300745546f97497967bb5d594a4b7ab289fbd7294af70864cf1ed26c0274978d6002c413f56bacc8c2e437512cb4c40ff6005ba4883336281576c7670b95d730b009a3b6a6b978d35daccaecfb69f56dbcc3c01d9b66cc6774619cf31efd9f95500f4bf535d2d806f2f48bb1938651a7573f5ec1cc0cfc9b9b105e2dd96887faa0040acb33922649d99df84bf83e1cf60fe6d9fb87f5bed32f35ecb7fb2a3cf6700701eaa0293d379ce443719d5792e317b557c1e9cd5d5dc39ab6210f10dddeb00b2b6655f553bbb04bf1d2df86b821fb4407a26b10cb4dce1c83e649652591f002914a85246371546397634f0efa9b3cc3c4b19f09d095af6890effc0ead0a20027afed79ee9ce33832af94bd3dbf06c24fa86b15e135fc5e1342c2cdaeca9c00194933927ed29242aedd050e255c8a2932c883ef2a1cea59a6b4c6ae5982fe006beb95488eb449aeea72fed0510b77466d240c1717357205e496b742aea45c0053de1b19555e36197bd9c46aabbc686a49428ecaaba848ecc9624ba331c23900ca3f4744c7f6a487a5ba7e50ca75abb3bf8f70abfb081ea2bdcbe7bc7f92970097624e0cb91a06a9ba9d99afca01d07cad3c007a4fe30068be81fba61ee2a600d74493ab8bd301295d57287ba07c3b6ea7dca3dc71790de5f5cad36baf3abd00f675af3c2a26c551b1678f8a495fbafbb9c685196a7a5fd309d05d69cb18fe00b66b2e585c01551b546d0dbbb4930791f9deff738fddfb957bef9a7defe7df007ae783fff837ef36fff0ee9fbff3a9bb4fdffaef3fde3efe954f2bb970e39d009e3e55bc26eb9766e90b40999b3c05bedcdeb5fbb0b38b26af8277a50f56d7007fec4d3ff9c28d8f6d9f79ec357ffad4538fdfd93cf0e2233ffbc99ff8d0ed0017bef8abff27d679c01aeacbb71ec2f4f4695ef59c16573d60c6e2294efb0a00273ded56e77629a15da07472a7c3ebc28edc93604f5fb8dcb1ccd0919ed66d00516071e68e0b85b6b858e0c3365bf5318b158d8aeadc5f83458fc3362cfaa8006adb4c882665421de63aecbc524db8731b7f5c6bc337c242e08f7fe90d9f5600a0f3c3ce31a6fd61755c5cca62453b0a1facdcb7fafbe64bfe54d0c4e000a900cd7d42b91c3c54ee513864a3c61c41b88f01a79ae52840ff116d6b188a6111008a5093858c46def9fafe71ae8f6d7020a4bd9674f23258b7dfe81617d6a65000601b52983a6fadc32655f41eaba232bec32abef5617c578e84c6568737c6d000732897b9ee2f6291896a2d44ca1b552b73df9f3b212eb94da4992b8cd52305008dbe1d3d19e8293204f6410b0c7a0ae50add404fa189a092e80828fd2370400039c0dec1356d50b479e96e22290ab18b484231e414a0f20d656f87d814b8bf00a34c21f5e59a8588c7d62150f23ad2ce2ca9bbf729b5434f3d50aa87e93fa1003c4eef829d608d42e8b606e5fc0974d5aae162df4312cbdc6708006ae4ab0000de300480d51d1a430f003cd43c8d92ef49bb4700a602c067088f40e89bf588006f114dcaf75c259f24f1a84ae298aa48e29e70131bb1d143e4d4f199c822fd008c208530de5479998b1bcfc8aa4610d5704b6fc42cdf96f77bf47e8fc05eb000c06092489cc2a30dbd501c1d287d2f107379431669c4c0439f67b5e87aa4a0003b94a3e59925c4bc5f506169d04bf589847bcce5ccd528f9aeb4bb2fd7a75b00e9d3873efd661d3a7054bd30a8770471fdc0f7444d9e276ac2c38d5753cdcc000baef169a6098ab0c9771d2e56aab95fc1586cca0a16c0a702da27c042d30a008e30c3893a2ab6054ddc3f2873d40a7227886e954f4775467823c2b2de8a08006a6c416132028181a8b5962173d3fecef27adfc80b1099747067e46dec9d110036149edd50e8c30d850d72b9b465989b8eb0346469e80b0f58c746f047cc3d007013b2a4e14c1496ee15edddcb2a9feec584d1b91fca6d0b45484a964ec71300793d6b0c300fc93c24f3470be62a642421cdf01d2c6a9379bb23f23216e5c5008b179111affcbc1fb08b3ae46d5d20af8d6f59a8225c50b709236ac080266a002109796f2b1610dd8103b598ece0f73d6e0d7a9cfc1dd84478b844707bf8e400daff987dc74c864faa56215dac253727b8be3ac6a6a0236f5a969099e0ae7d00e21342d197106288df6dc99cf65695a4efb3a410a677c16eb0d81ec91410860037f12d17f8e4d6b0d72c417fa0dce6f4b8cd1106070f36309a5db7b98a63350009aa7565bfc2f4b8b6981661b508ebc32f93a085c73c88dab6f7f0a4f95d4b0003f5a1cdc47db6fd1972a0f7fbd4089a5bcc289c7748db0df1bae1fd61f5ba00115fb0a92f9ef0788316f13a7728eec2cbde9628eb9982a31ec0f7ba26f33e002bcf61de9ff356a44f13fd27d62bef2f2d7f97327983d27d0795fbb634df5c00dca1b8e9487677e0ac70b11f550ae1c365dcd2652d665f558b2ec16f470bfe009ae0e75618bb72d9b502edfd97bddebf1f5cf69aaf51619443f4ff22f4e87300870a1dba91a0659fe8f07fad0e2d7af28af96881c375a752763cc44b9ff7250035ae08e5ed420831c41f8c644ebeb5c603927ec392ee63ea3e372c5e3a650a00dccd45f8462ef0c9a99da125a0fda8308f6ad1267c548ee8a327bd049d6d950094f7557c9b39d9bfcdb078a293ad5b6c0a1bdc24e6ce897d81eec1390b0a790045c336b18fd8ec9ec03e89b4f7813ab1a81d8bfa51417d8a5f5f5dc178ecc1004ff7b39d62b78e403a854d4ff7fbf753c913a7cc13a77de07d95ea5b614ef900ba7dd3094c0001f1837483d4ee7f477094f9b7c0c2045ee6bfe1269ff2b1a800c099020872430ab50606d402370813400b8390ff8901ffc87f6208ed575e9800f88f042186071c10815d1404ac7a52d5411044acd6c0bd96f90fdd70282c19005f934104854147c111ab476019d8cc287306605a3b448885b19841787052e100513b186438c8d6238b240a422b579d72d5c1a641b91a418372e11f91ab61bf004aae1f0f1a821c039a80d8b4b38552c5d44193d53ab8d433ff876cd751e05f00bba9facff79fff165854cc721a2200007f020b80000002101f8b0800000000000002ff4d523d8f14310c75e27c389e64a6e40a4094202ddc6e33234ea2816500afa2404848f00728112d3d120542a247fca0fb553c278cc44af626cff67b1e00c74762e74fc4724b74240e198ee409e127b08cbf570f28c959ce6f0d3b0f23000f7316b8c8a5072ec346604315f166a901fe35c5cda2e919828b65995c17740065ed4a4c8556cf6210ef10030a1d1240c12041912359bd843d358cd423256200508487463d7c79d1cf7682294a5d50721aca53a2c7546edd682280468d26d800d5979db5d0d1218a6330b04ce08705b529a128e403ad4a9c43319a09ac5fa8001ce866758ad171f615be86b6baa68fac97ac94345724bea43ae493b7a173dd007ba85dd48eea01d6b6fadc706b1ea7d83adeaccdf94df8f77550210468067b006568b82c0c8d77c4a6719f52c204033a7b8f6e4b50c43e921ee8c33562055a00a9aa75e1d3de45faaf0b802962e4d13e3256304463ff34d87b0ac3035e5d4c003706a5b13c5ca63cc3e784fccf942c7fa56c8d604405e2b962020ecda756e700e7563adb07995283526e0b2abfd262951bde5118db4a787edba5ef58ab6805003cfb057ec91851b511e5a94037179bf4b731e9d5cf8a37b427db9cb0a4096b009f409591f34380ff041d4b3cd09fcd76343a289160c0a77e280d054582e83d0072a2a2b6fff8ebfbafc3c6fe83f0b728cac50a26c84d22768dfdea4564b26b00813a66f1ebe4188c267cbdd1d5ddd5dd5f034c7f3f970300009a397c3700000014391f8b08000000000002ff8d5a7bac6c57595f7bed79acd933b367cffbdc0033eff7cc997dee3917ccbeb40682d2f7a52fa0a52dbd2d7d016de9bba5144a00e95b6b08514c901863d4186385aa3544fe302841515225d51034244463941a000d81fec11fa88df1f7fbd6de7ba6b7e7364cb267edb5f65adff3f77d6bedb500f6a1721d7d42b9e619a50e95fbf305fc296fa5f0f370159432efeaa99c39cf009c7725eae63c7b298dcbe929c75c602e6071a1b990c545e62216179b8b595c00622e6171ca9c62f16ef36e16979a4b595c662e6371b9b99cc515e60a16579a002b59bcc7bc87c57bcd7b59bccfbc8fc555e62a16579bab59bcdfbc9fc535e6001a16d79a6b595c67ae63f101f30116d79beb599c36a759dc606e6071a3b99100c507cd0759dc646e6271b3b999c52de61616b79a5b59dc666e63f121f32116001f361f66f111f31116b79bdb59dc61ee6071a7b993c547cd4759dc65ee627100b7b99bc53de61e16f79a7b59dc67ee6371bfb99fc503e601160f9a07593c64001e62f131f331160f9b87597cdc7c9cc523e611169f309f60f149f349168f9a0047597cca7c8ac563e631169f369f66f1b8799cc513e609164f9a27593c659e0062f1b479fa24bcaadc93746506ffe7ab2c217081cac1fb034260588c0400ae002aaa43c77578ebe9e2490528609c2a1a8c5305933d0e1cdc1a292f4702b7a9003c091449a09010286c112860505e081484407143200f399e5686d5fb2e20d2009e21064115b7f93288e74dd69836e4c78f88c44f1069ec6511b9afd4bdc63800e8ce0185938e29981cab19a96a93330556f34a9b7ca86e3b80a84e00512b1400355091762b6f68ca9cd974a81c15443a90f66ad25e457b4e55235dadf4293b009fe6eb785ae3d3ba9881b7355d7f2785c520558f9c1a07577425d295da9bd500c8ab9ef0aa33589d06aa75561b0a7d1bb86be846a41becab1ac2aa85ff56a3001d39ed66a46b22702bd22df26d6be5b6753bd2ed9aa772cd6a1b6a394df4d0003bf8cb1cc39fbbbbaf9c826a87ea050ce88056477722dd1161bae0ce26d5a50030b91eaa5d567ba2296fbb1a8dbd3e2c0283b87dfd53dc45badb012b3bba8b005a2d520df0ff2658646b25485cebc2c9ffa9baa1fabbc8a9b7159b2a3efe2b007cf00faa7ba1a3e0b40a54ecd038752d46141b74a42e635a8979eb5a9cb2d3008d9c6e5beac27cb71739bd9ad47bf8ef1deb474e1f2a3701ec8e17a90a22a4005d8a54ad1ca9ae1f021e4e07242b20539701ed3e84eaf50710ea5535a050b400d2002af4074334fe580dd9288a0ef13fec0f2267d0a39e5dead965a7ffb59d00102a35e3321872268310c9ff05a225abacdd64701bb6ea75ad623446ad07cf00e554cf1aa3df81a0b462a402c85f85fc55c85f85fc55c85fa5fce85f5305f6001f512a6601a79600acc6c8a8b3a99200bac2c8a8254d99a429c8b0a99300b500a3180f67c00510edb0691b32f8ef137bd4a63f1ce009ada806022631a81e40009101fb0c581df4a9711720ed7755ae0fe5dd9e2b6071cea5fd5c7f5fe5bfa000a0dadbe1121fde2ec1451ebcdcf1908b1a5d44abe3eeabcc1f014bcef9302e0054ef6164cfeb7bcae907b4e025d68289b0fd54d8ead112e24920fe180c2335001881da68386e29673c868ce33113961ac7579cb09cd36a0c1bc1e8ee488f4200e72aa8454b38db1cc010041515574361c8db811e92a10c1d8e22351c83e178003401c3c9040c2713613889af84e17d6a028610c11deb71e8dc1e69819db3c50001cfa98b03a28afa0013701a3a3460ab47c1a5eb8d7e06d9cefeaa2af98d2900cf04960da7fbca7d50419f2723674843344600b4f3ac1a86cef7114a23807d0088101b24d8e8a5a944d0d3b5e861d54b90e3497596cc2c335633735467acce00c52ebc9d6934ce17919e2e505b68dc55b7ee223d93307bb391d5234726776300d240c4b5900c032f74fe04869985ce97a1e66c32df57faffd43c74be1239de000c509a056872fe4ccd25185563103a5f45cfc1ee0c3dbfa330f06b40250d9100ed2486e8a4a81a68c64a6626009b9fc27c4863a8396d278f07f41f6b7a5343006444bae9c91849670d261780bfd7d5496665c40c698880f9a6d745a672be67003315f2cdc8e69bea76be11644bf40d48dfc335ecc7ee4c00d48f211a03789800025802689006d0193ecf6cfb3c9d3e3a926bf5d4ae1e7057ddba830a7dc9960018398d0961246fa750506122d1d574ce3aea6e8c6b3a841b61b4a017629e55008d71a8ab8ca20966137d2352036654a78794e174020f4d3bca8bdd8847bb8c0084dd0e9a216888d9ce190e1291fa1b91fae2a7aea82929db133776b9c886ed00366ee41cb37123125c1fd2357b9b342f6e049bfe50d315433a00536c3bccbc0088071d8ad3a194e72a2fd4d7421c4ca6438f8c991abae3099ebd534de289c700d3480beea43b8e9c31e2b1cf8eaeed88f0d517a969da51ac2a1d3124379a08004d867577c4ae57d8aec04dc7e226bb8d1be11293180137b82643c8471fb73a007e22f4e9c4b41d9a96c0a4426379768b7d2649523000df391d4cb63d0faef10002fae00ed591f1003a33bcf8e529fae56ee8d6b1f81f4ca9e31c74a7f3059e003fa416af173cb32db84d0912f6d339f03627e75617127b5daafdb8551bc980000b9741a87f0fb800c36740bfb34bb9bf4447fca2e52f8ec8ce12b8ce52b87a007a26994c90bb106c80b35a44ce06f9de94b3974e6a1d3e4b6bd3b3c86f478b00fc0d911f7dfb09e6212da7005167dca5b1fe2036a0ea320a6830eae151d33f0056d350bf4c1d704d455a3e131bfea9b5a1959ebc3a484ef319944e8ddd992f00d1f1cfd532edb8c4ff523a62486eb6109a33769db1eb5fdbaed0cb3b02503600115b1233e8836b0140bdccc06e797e22f4b763f7288f3e81fd487f306382fe002e12b4fe09d22ec4eccec97bc967cb159efd8b5ac562ce35de84ddd5601939004b78a3c78eaeedb8878effa1f6d28e7bf8df938e18925bac84e68a5d57ecfa0023db15faccceaa8f25b18af41cd70231f0132686d6cc4f847e2d9942669c420018200bce380b18ccd5a96d07d6303308bc807dbd25026419c0516ec13a0a8600409bbbdc65db582d42b70cdd166cc6b5a28e6bd05dad433c6fa830167c710400c044641de23f5cad21f89a9c5b2b48bc5c91fa20e6a8f73027ad3aa17b3e0200040ca7a0bfd8a5dca7d4327417967f77c900d94380d0ec20ce00e1ed52efd1009ca4bed2a1040838ab307256a2ab5e467ab982be4b9dd4167c96d6566791df008e16f91b223ffa525299db212de3bf35873a3322ddbd385647cd39dbd360d40083a0712f57abd0bd9b3ae05a89b47c2636bccadad04a4f5e8b75e4acf7a074006aecc57a1f1d4fabfdb42356ffeebe74c490dc5e2834f7d8758f5d6fb35da100d7f20840099798c41ef4c11576211f71d65afa89d0f75ba4476a499f401ecc0002c3992cef8037f7118b37992e8926a2ad2b687bcca28d8b7162b7b31043760005721b5c92c5b396c5595614d6fe1264c0abe6ca6bc9595496b462f8d11cab0024f757d5cce2683e0472e79311da7e0dabcb0ce74f701dcc93d5eaccae5659005d45f22ee3024dac6ee30ad575242072d55ad61f21aac4174c47d4f176add10018ee23bf882135eeaa5b77915e336d67a7c9c8e9d648344e43f4b28e38cbdd0018d71a93610bf11eec85eed7111cd3d0fd2bce4e93315e4dce51e3d0fd9bc800d9c33ce04c03ccdeeedfdad91b3d1137df2a318c215e26003bf7ef2367b44a00e698e5668e590aa0648e998ac127e91c33b1090b8f21c34ad297ded4f412d20035f7648cb8a4812003989ce548cbeb4aa4474b2c23e74b790fa134233afd0700a9d31747387dbec9aca4bf876bce955c951e9a6f22dff6db133c11b87b8b4800ed31e2968b155e71562bbce2ac56f28ab38aaff81527935150a01ae786d07d000d1c7a44092269ee2218f6067c9d017c640932e212644483fb6a6cad3be27b000e7465a25a4e61f84c434dc2cc5b6161c4c9689204f892019ed94d037c6203007cc9b8c56a693649027cc900cf8cd3009fd8e85c26013e0e8566c8ae21bbee00a5013e3d22c0eddb9b2501144d882684c35b25ff4efd44e893095aa6440b2d004959a622f4db53a1e30c388d85de0b81b63058a3cf796a6d678c15dadc7097006da7d53acc5c04ddd66cc6b54f1d0f4077ffe010cf2f5787b1e0eb23322eee00dce3fa10ff87fb0710fa809c5bfb9038dc27f5eb628efa3826f5fd5598791c005007c31b417fbd4bb99f556198b9d9f21f8584fb71e086a60071e2665fe2eb0038cd7920e17a2870e7d6e261e4eca7e187d086ed75525bf3595adb3f8bfc7600b4c8df10f9d197924a18435a2e6e5a63a8331d539da76375d498814d83510f0071f02fa9fd30f33c75c0b52fd2f299d8f097ad0dadf4e4b53e889c83e3503a0035f6fae0043a7e419d483b9ec0ff09e98821b9e38742f338bb1e67d7dfb25d00a1577804a0844b4ce238f4c17508403dcf6cd60afd44e8172c2a9117e9136c001dc9ab87f6eb912ed5902b32d84eac202e0bb2e79389e408012694945b4a36008a4a2ad95d2ad9dd2556fd6467c99784ccbd4e7fb373ca5b5fa3b18e5574ae00cc5dc8b3bc15fa85cdce849bee4cf0253a7b769aaf27f2c63bbe86fa50ae550042aaae85997f052aeb61e6df60ddfa0e779a8e61a729f30ab755113ceda00e005bfd97aac7a97a27ccfc003d7776dbfb2af72af653333f8a9c4c9b2255922d00b68a88c4dbb6a6f132be6c3e9604bbdc2bc6f655fd18da8ee963913e56674d006f6aba0ee99a76c39236ce348e45ce31ec48d633e895d1789aa9639fb75c830068d982150df562b53ca47db8075cacd56bca29d76be85151b5b847b68a8d0400a719b0b56e5b45a52c9add9d0655fa2e54ca72d7d8ddda314cd4c1062b761f00a1524efb3062baa59db5bbafd455972f85ccdcb2260244db3238d7aa90d8a9000759705ea96cccb91966d7e0dc6c4091dcd7553dcc1e7fc35e65b59e6cd9d700d28dfd9a1dfb361e5104f04633a89cc0162010013abfab2a61961b85e98e6600e2144a97ec66964529ab011acb0003f650b9d72ca44f895895b7a8dccffefa004b469541f7b3a47b39e8da41847ba9518c9c227d51af56a0d9d5aab2d1ec1a00abd95b88e07f7e41e179ee61aa78bd7d7c43aaf88d6cbde92c8a9713c5cb5b008adf293a53a89f53e5307b77a26c908c0f4459866110872194e56dc046bf0c00eab88258d9474594c02a9b1723ae5510661f075d3ba88cff7203b02d5965b100c59cfd05156c947d2ed5a6416d3e635b3f9bb4665f63ebaf9ca12365dc72ec00e654058d010056c5558b65fc4d2155b3321614057845d5c2ecef507719242900a081f79fb29591207f3e0539487c3195e6654af387c86d26a6fea2a58e475f0021d12fcba98ffb0ef93f40bf26cc9b2b60733457ad0514bb9a885ddd121b8d005544435d1266853eaac096d96f283f4eecb190cd0a4e17aae726fbad3471b3005545626e8a61bf9518b64ac9c81df6ca05e262615cdf30b65149c6b055c59700e44bc63ec091fd9e2ac78cebd6834dec9dfb1bc6b52dc6d4fddf136b91f11700695832f7c9dc2f9fc351658abb6152c2a01faad2ebcf35f4f65c246c6dac8000b90e7c611990a564a1ff8e59ea323c11d0cfa22fac9d0f44693f01497d031200ab34410210d7ca122694a70c79729e95c7665ce14b4804a234482a2b814f09007c583b574baced13b089b5fd7a90a48bfa265d58c671baa894642224e35211008446aa98322ee2bfd864bc94cf4dedb6a53a437765bd63d57e8ea146e66532002f97c4da258edc589b4cde6a99c0dac111d6167d63e6b076d93f83e53b629600ba145bfb514c2841b32c1d68bcf3adf1d05a6e95d0da2a93e9c5962944a43400b29554f20a7870993d650297bce6e2a050c24b9c57841e45e85e2b6654ae5400c4835cb9508c74b11eb715fd42a40b167d05f22e90cbe9988b2a30c3253030003448b95e7a536f80788d47d54e91862a62b72e7757bacb58b7bb8c4da6ea8d00374ac25d3417d83c64350731e6e6040631e362c2b8b8c5188d452c252a9e1c006c90b1d8e4e9d426756b93a6d844181753c645322e92f16712c645ce199c5e00c8bc44e6a5e239c9a8f2066bd4eef3563bc0a072040c0400b1d6006a795b57004e43bf1d4f53f488e87b4a60504971f2fb162768ad087a5a15b67e29468f2300096e40690241fe8b29f273167c81201f7a9471965a2bc3e541190f7295622000b38e530bd8e61314b52d7b301ebf96c423edf1b6c411351b8f472cb1ea6cac0000edeeebb35feee523b35f451c5139231e69957f4a266f06c61a8c7770869c0073db728ecee5667bb3dc947367596e62a59c95b99727da3b35127ac512b2cb003fae157678405d17c6905835d1b6d3425e75779a9c317f982c2e9b5c89c172006d926af3d18f3151e5eb5c60e2aacb5292cf7c62e07fce44f88ee81739057600746d47ec05e7b5dd0b968e7260221d3dfac3139a9caa762aecead9aec055fb0088170bbb84b624649ec31e7406f2893e6d3f163adf4ef46973b14c59bc64b100ee6d2dd63d6ee6227ed2339c3617f69a0705f50e8e6cf273fb0180749643a4007ac71efbd620bce307ecb31f7f24e094d0e6fabb6cbb00473df913b003d42c00614889c7356e9f3b5e3cc3cfbf2d3d19f38f782b8c8f7fb9fbdaed73935d7600a2395f7468f6fcbbe2a30ddd4312f34b61fe762c21fc307f5189fc69c47b700050913f65f967e465e5880f2a3a9ae77599be1c8e0de4cd009cd58087dae9c700193814f13b3aa9f97c96d6ba6791df8e16f91b7d7b48d081a45d79e381b4840081a8531775ee4a4e6a7cbe03d160d443ecff00edf839ea804b8ebc68435f6c00f888b5a1959ebc7c1e786163a6901adbefe39438ffc499df4648470cc9f5060042939f51f8fc8c22ff5cfa85c451274fd62f96c4804734f000c0f739c2434e009eacd09f8f01a13af40991d9a6b23b5cabe47fc3e65ac2cc4bde582d24edcc00e9ad327685a05af640af64a1ca979db80743a0c1335a78a38334d7f5a4bdb70039de70acd4ff68bfebc07f0e5ed590d9e96fa8f18b0778b1dfa5d53435e349006f5fbefae0d726ed7e0ff27e35feea43f5f929c449c7b8265754f8e3374f7800fe97261fe6bf0116aec986f9ef9ce4475459473eb4ca245f5c15f8c555c164008cc72fae3ce3f18b2b14f2c59567af64b32dff6de3d92fae0aa6087645fb01005656aada185364b500ee8530ffcd130e9525e3031944a130286ff2f25d1658001a3b35094d03a6856d093139c6148407890a8fc2d62097836cbd6825291acf00ea55a25e25b02953afb229532f14a257d95ea95eaf9ab2488e013e44f42d35004faa206d7c564be08208f9be7d9437b983936ae7a59d97fe1f25258d5f59290000009e029ef9000001571f8b08000000000002ff3551cb4e03310c9cc489e300a4c005097a006e482015babd64e1c0896d7b40487046fc70bf8af1ae58c9de008c1fe389334042dc41ec000c9098e9a08fe0a7b40cd8fb2dd4269bbe896d5a000c9116462621a347d233036723c8b43f78e1de0bee669ed997b77fcee2e90100216843302d4fc025ca31b880108cf00a698112526731599166794a981c2a8600c02c8fc9835a06866a8fb5f498cc2f513b6adee0be4172f5215b940d1e7a30000a90122945b4e61eb2759857cbd69337d0ac6433926b527975dd424bae47cf0048a78d742f682e92572e26dc20a2cd4b38721fd91b4462a36f592949bdd90700e7922ee893534c0b458f4209c9c58ec1c474c52d2af95cf58751f52739c55800f03bfaf272707e17b89b0ff59c0dd592b56b6eb459f317e36f7eb1b6d8f2620024fcb1c676f38615c7adcc1ce61946335b39ac9c5e37f8da0521a30fde8e58009fd6a73f25879a5d30020000b09b434a0000019d1f8b08000000000002ff3500524d6f54310c1cc7f97012ca09a93d0077c442df5ede03214e2cdd13423d5700eaa1aad47bd55fd95fd571b2bb92bdb19dcc8cedb74025eca1760416a8663a00942fe0afd032607f3e21dbc10eb78ced300d81261b8bd0cd3391fe2fd277a6002f3610efe6c6afbb93cf036d78fb7d46365a5d20620d52ad7c033ea01cc56500885486978833cca1ba345b8148683e5d44c58f313069650d95905a024fa92c00e38a171b8fa1ff8b273aa76db44e48a4865c5224192a15c4da49f9157d52aa00d4335bc54061583dec83dc8fd593bd9192562385e41d7e3468b644ac23d20e00bf5689531a27e9855552fc881ccbed7910e53c4da68bd1591cb578b2515b1100bd53bd265ee29dacdc4dd1fad36f520cd435b777e468dec8ffd90837914cb9005e048bbe9b7bae29e1a49ebe676a579f93241798f43dbd3ac4dd8498ada9b700b689a9e5cee566e2f9c61eacecf0484c3536fbb2f9a093900e46e9fb71a817007c502d5abb04976dcd3f27fe8dcfa94d9b4d12f0d91a9f9b3fe8a4eb661ea600110633eb1e56b2d71d9ef6a24474e2eb0d57af57af6f25fedec1cd020000b000e964d5000010961f8b08000000000002ff8d5a6ba835d7595eb3d6ccecd9b30067cfbecc3e73f6d967dfcede7bf6e59c395fbecfa4f335977a4b1a6383a5510091a0a452f1021a342dd520464825a65002b6847841d1828856d35afd21d51f00d21f825a100d49a94154224a9578a3681a4b519fe75d33b377d2f3951e323b006bad79d77b79decb5ab3d6775d1947df50267840a9ebca78017e5473a7f0d700c413e0bf7b27ca0fee0bee7b88fdfbeca3341ee7265e2a7393232e7edfae3c00fcdeaf7cfc7e8b6a5c03497c3f273d407660ec340b610909aad026f88a21f700cd43d795a39a856eca78588d8718f75558e8309892b5fd6dbd4d598d550b4f0084a94e2b544ed40a2e95da402547a93949a250f95e14a4ca09a2b1f2a3e82100192d1fb18c2888cc36e6dea1a25c5dc7a44618a17bbb8ac82a777f44b835ce00f81b8351dce18c2eb48ca9659736c61cea61a8cba11e6dec56436e35d4743900d4c7508f437d0c853d0e2518ea7328c150d0e7d0004309870644541de1471f00a37f749ce2cd806f5275dd01219a039d16fa28254dca6e7a54e8413256c61c0041dfa3015a0353a800f6bd3b52263203921e5d2aef7fd52057df5738715438005d5338fdb470927ea84c1a24a0718f09ef102d7372a9cce75492ab471146c000650446a3f414c89f364780ebbd6a44b8a8fb081a9e52c311bbbd31ba2376c700a2309b233dc69bee04cdc97852a8f114dca693197c359b41e5d94c7c352b1f00f115643ca566800c5160a67a9aab270a3d3aa5c0430910088668a13b11816c008ef5840265ea645aa8c90c0267d33904cee710389f8bc079f954027f51cd2100102a98999ee5eac3851e8f28f04002ded316074c15ed5153fa100401b0fa75004849d2e91d0863fbd753d5df0cb19dcfa9d4d9a5d2bfac60cfc70a6742208200e904b23fae26b903b79c4e0b07183923119356a6a6aa8a9cd4464e155b898d002d7617555c2dd87597e82ed85d0a2e6c2e340697ab42cf57e8ad345ae141ab00d00bdaeb7db599e19533abd68c3c109ded04f1dfcfd5cb006691abbf81998b00b3252ccfd432577f87c85b2094164d0ca97f504b861228c7b9fa47508e4f160097caf9b2c2c4cf174e4a20bca40222a9a36aac2566171260cb078d1230d49200d8c9eb31fdc79edef7f408da0dfb328748a6c11878f74195822a6566a5986e002604a29b4ad48fa10d828d4ade546a1a981bccf0c04529f43354454f2261a200452af923adf4e4b474671540a7658896013ca9035812685c27d09b7cee1efa001c968bd21a83491f6ea4217d8d5678d08209cc136f5ecd9c1fccc4e01cce0900193789be456b86279dc08d00ad39ca9d02ce99e7ce5b01c7fc6c06389e56b300dcb91ba8257063d2ec63e81b54bf74639a3bdf04caf424c1f0232822ce7d08007571635a0161abd9a9f8291533d13cd57d7123345570c9e9de8da7ece97d4f009f42bbe148e608f8e24638fb74a2e98a091d50a8d120372fe3454275126af9001ed5cf9d27a14e8287a5d76569486773bcfb2135a7050224ca8299a7b3c29900211f4f49682c21d2d7f931755613629d3067428829fe742e3ce7249d93f471004b8ab8496cdc788771636b9b6581d2d3c733451978929e6a2771a5f45315b40009a1ad02739e12df0fa9a4d465aac57f73d474ea53ba2605cd47542af30104006a7d72c2b1df56e0f51c6c4b39cc1ca08d4bf0ed2f5778ff2b6a552a9e5ac500dd43c56d4990b4ef2f112f4b4a6ef7a171d227f7df2c25ea057cd51fe7ce5f00d8b878be8e8b171917bf6be54f98c8de61f9426cf425181752c904e995c4060024ab15ea471dabc803274d74d54bf9aeeef56fa1bf9d2dfa07a23f68a9a9c4003cb4a5f7db3398339fd19c174a73d48c59f08680fa1c03eab5c3802286a96000f8b71643ab3d65a5284ecb451550963003e13fa9ac26ccf09b0921a6f88b9500f05c907441d27fb3a4b708285b882d8b05ecc1b34240bdf6a680fad261403d008f3d00f98f172cd028a0b946f860ba932e293be3bb6c8d77be5a976a2ef51a00bfeb71563819bc3122a1b1841b10c66a53136ef0bb11424cf1576be1b922e9008aa4a925853d8b2bec1129250b2c2d5c80d629f46361682fe24ae965b5842c00b88430412860b102607a57633bb6c02ca0f00af8f6332448d684a3f475eb2800008131939d70ec5bd52ad777c0b61587f1ac69e3167cd7db1ddedfad76a5e200ab2b024c54866c6576eb2d14df52727b058db31535bebfd4586fb026ad925c003f8a0481c007c17f7542bddfa7b25cbfd3ca4f3326c806094240c09c09c26600a63784732b30ed24412059ed0a672db6eaacd0d91af666baeaadf8aeeead6f00a1bf9d2dfa07a23f6847049f6b3bb465feb7973067c148d78f9500aa25577b0002463b24687e42ad73fd1c6dc0b3166df94e307cc26268b5a7acd5b670b61b00185d83bdda9e83f029755e139ee3f75c0831c5dfec84e78ea43b923e634961005776454059bf58163bd8836783807a8e79d3cee24ae95fb2915ea88c3e813e005805260bd9ded17b1fb5deb3890d74196d8944db6fd868e3869bb9d85f0990008984dc3e2e29e2e356c42d7614167f09ff4519f8c0df99b0142e25f2978b2900b8fc919a96857612567bac3f460a9baf439581d4f1b2daad2eec6e95dd35ba005c7a104dec1ec615badb4282c8a8adec3f76e832bed44ea28ecdadc6e0ee1c00fb0f0152a3151eb40abd5d54fb8fed7eff616772ff01d04371b7be456b8667003b45a8adb1ffd8e4fa5f64ffa15fadf61fe63dd87fe87f2f9ccd1972f8ac8900d55b7fc1aedea044defc57c434c6026cdeaace72fdc5c299aeab3526dbaf3100990494ac316702f8bc5e63e6b660e13574584bf9d2fb9ecea0dd7023736411000f90646b046e36d5f2b982853cc3367299c97708b599c2e926a99dbebac2e900cb7d6525ff0d9e257772bd15d4e64bd477aa6de956642d71b2ca0ab5da40c800265be31367bdc627ce7a2d9f38ebf2293f71cc858201a1cd824d6eb0ee2d4700364a7c87ebcd7245e3c6fca6410cc9aa3ee5aa3e25ea58ff2cc4537eecc0e000331a7606f4cd3d6a9e9bef01cc6778e6559667cc72f3cd7596cf6d96674c5e00ac318b7995e519b3dcbca3cef2b94dd1accaf2d96e5eedd5b21949bfbdcef200b32bb2dc069265816fc8399edd14fa49113e8b2ba5bfb70a9933860ce1a42e007351fa076aa5cb32382f95deec1072bbe616348faaad5d36d61833bb138efd00acdae6e631d8b6e5309e73da9883ef797e89f78fabcb52f1ed1565f702922e00343e8acce5795ef023147cdb5b68bcdbd2033f537a405f6065dfae73f35b88007708fc20f86f4fa8f727d42e371fb2f2a73bc6fc05828750803983e75cb0b900209cb9e4eca5c43c24abcbc239af7310f90dec75d5dbf25ddd3bbf85fe76b600e81f88fea085a6e792cbd0f6605f45b09e2f01e4be4abf4ac06807cbb8f97d00759e9b1768039e73d196ef04c34f590cadf694b5cd0b27bf80d135d8dbfc1a00083fadaed58450d25c13424cf12f2e85e725492f49fa67961476edae0828eb0017cbe212f6e0b94040bdc092d6dec595d29fb55189e2489f142a94ef0f1dc5003833eaa260b838a8912320b73a15725575bae4dad325764d75b264a41b156c00e3bf8827649711154fabf328fb21c5668c8f579562d71b5df96d57e898a2bd00a89a191dccc46084a53db4df8857b6f6a71a6e7daa6137dc3a865d6dd8d73400b91bc846df0dab8dbef7d3d8e8bbedc23103e4cda08921b767bf592ca56ca5004f06a0fc4e9c4ec130c74dab2ffec1febb7760bf7b697b5fcec07af5177faf0070063c2c3bd6c7853e1eb0a7f73d3d8076432373f86b02172286a032a032da00c037724066aa433773ec56b2dd834337b0313cd2d3f4d4c085930c863cf65c00be1cba6f51fef5ef7fe7fb5eb9f1d1dda7def5f63ff8c0071e7e647bfb3f3f00f0937ff8d847ee7de5bf9ffd4f89c4db2d8e5fbceb6d60cf70a52b8ff7aeb40096d0953d086490f4b4b4c07df5c127def5f4cf3dfddec537befa1d8f7cf885003f7fbff9abf73ff9c88b3ffecc5dfffac9ddc3afbf249ffbc7ba27fa7671c60047ff77353f2174a70aaa8e88e9ca9bf8dea3f2984abeb94b40632e16783a740036b81cf12452e394f1a8fbc61e3cda69e160d1fd6e75642b6117734c07c27400a7fbd57a221d27baa6151c15ce51a744e5775e7bc74b0a6cfd4eb705b63fac005ae5a12c5634bff5963a04ebbfff7bd39f6ac4ca6f355c4c7e4cb99c3c56ae00df1a73508347a3b58f63a7e6e20778efc31b104297c455c6c58295848dc660000cdd5bb5155e47c6793eacbbdfe696c7d471091cad884303884cb30b759e5600ddeac4b45bb19774bfda3318ecf478625ce8ae3dcc759fc52213051d64cad700ab4eeefe3c72ca66af6814106103434dfcb5e0d48979b44dc57ecd2a069c8c003def064ea6130392d88796bedf893112373aa0e87441d18de9a0589a42ec7600359b862c4005e781a06ba0a9fb49d529ad369dcaeace01a8a599ad3acebd9e008cb354e97e0d6aa78cd23e2587bc0068353db0ffb4f2c8de85381f371b7edc00ec5aacfe44b08a81d546c5b9fba7d50d44abba8130da2be43604955ef461b300c9410f1521c4d36c59562f09ab10c1e136c1afa7c2dcfdeb82b710ca84da5300bc5fc159ba91200bbf16ec3d601f7a06fabfa24c897d2b1c731040b6bc10d800877e8bd87b2146c286070a4f281abce668ec895d21f05c10b8a0c20410842e00c1f9420d4ee80348bfe186d6a2d7c42226d897542b77ffe736de97505cb3d50020327e05942fc8489a72d0f7808c47283dde2b78c832af61b34c48a414465e00e178fe5d9256bc48c158d4f6b144467e03f41dd5b0b5dfa7228491c23d0af700cc9dc288b7547b21f4e1898acbc539b48bb33e5c9ccbf4642a40b86e7a223200a4c8901e5ba9a6dd34197834a4472912f40862a6bb6e564b62f36049c4601300dcba07f6c263de1dd663422282c5dee65dd5dd5a4b843729bc0984bd7b6c090003334625c28409127519abddde9dd52581dc1ef529a4cf35f37ebb40c2dece0015f6da5c91a53dc2616fb72f223b14c984f61eb2095de81e0a47878503956100c0657640e60f6341f61ec71a8895d29505b5c3771d02fd6e0bb4ec1a0486b40053381d9cb0f512496121c47599f783f6ba4c0823ca174262da8fed224dd23e00497fd492c298c1153bab72ff212cfa729a87ed04f49313ab415c29fd53d5960061c02d830838b8fc80d3ec4e07837d6cb61a962b5a9dba3588a5b253ad986a003df31516c4b81883a9c61e9c92e6594bc385540e4e39f63cee0dbd5f20221800c6942ef763e694be3bc54d81f7abf54d4172c506b9bc0ee36954c403479e8000c7723217f364cefb587932a747a8854937f7fe52ae96bc4ff084e1842efa2c00ea99f77b56be4b9b3cde1f44e5fd019088c462de5fb8e41ee9b1ec942059e100903caa01e1256082d25ef612beab7bd12df4b7b345ff40f4e7b6125b4ed9010042db371e347a2f1e1c34a2fa0030da21f8bf4c1c5fa70d78644f4b0c13c1f000ef2d86567bca4a7801800fd55e0d76728a5b33eff36a5213ca3d8010628a3f001a0b4fde5b262392fe8725855df1156158de1a0a0b9c734578c608c3d7e50b00388e2ba5bf5c06848ae9136e8422c6e8d100a7c4beb6a7c4722f0b971cedf7007476cb94eeb89c6133a9dadc7061db633796dca396147223755c38dcc5f6b100314a52193fde1f633b56eb7b44eb217e7d7582f9278533dc6fcc86d8f922910086f0e970bf171e4a9d18b24e0c8fa1ef521d5b6386bc29bee90426c0a2831f00941b946a7f173472ff02224ce0e5fedd37b9167b0ecb6d00436e48a3d9c6840066e006e131540b8390ffac00ff937f5610daa73a7cf0ef0c424c0f38a1057100ad2060d793ae0e82a0c56e13d29bb97fed86436329f8369944a530a91134d8006d4064602ba3f00c20b479a8216a71c9416490a9c8681e4c329c64fb2dab49002b08ad5d11ed8a20a64dbbda419b76e17f6257db3eb55ddf15b445734c88a100626cb985d205eb206637829428f71fb4af1a817fdb4d35fcccf033ff0f50f8007382ac210000c1095e76000001611f8b08000000000002ff35514d4b04310c007d6dda34edaa17413dacde0485d59df5d041c493fb011e44f12efedefd55be00cce040327d69f2f2920e90103710db030324663ae83df8292d03f6760db5ad006dbf886d3b1b222d8cbc848c1e498f0c9c8c20d36eef893b4fb89978265f5e00ff398b5f0f08411b82697900ce510ec10584608417483394903a93c98a34c90053c2e4503104def2983ca86560a8f6584b8fc97c88da51f30ab70d92ab3779004259e1ae07a300299152446bee21db923aca922495a76a1de6c5b2ee73382b00c92b7b695279f63184965c9e9e905d1bd95fd05c3337504cb850449b76f2ce00f5642f10898dbe65a542f562d7914b3aa34f4e7198297a144a48ae7d0c26a6000b2e55c9e7437c1887f824a718137e47df650ece6f14b8990ef59405d592b5004b0ed6acf903f2373d609b6d7e4012fe5863b979c182ed16660ef304a3992d001c5676af2b7c6f8290d11baf475c1daf8e7f2d935b133f020000d6421a4e00000001ba1f8b08000000000002ff5d52c16e15310c9c6c126792d09e90dac383003b62a1fb24d805214e3cda13485cf800240e08893be20ffb5330ced24a10c900ded89bccd8132f88613a22f2065810a3c9a13c81569119c0778f603cf1f44900314fbb6192854d3f1137cf24f9f7c8cf953edb20bceb6b3fee2e3c1e68c3f300ed1d32657541086c0895e519f010e52678194a2abc40da43337a69750592a00051b184187c9b26256b59270a329649bb5c9671c47f366da7fe2139d55fda2600eb82446eb09293c8e0152476513e45df2963e01d1b3150d65172441fe4bea500277b13a58c4985d88c570dd1aa97ff119cf16615f2383b0aacb6064b0758aa002f5ddb7fd7efff16780edba539edd21c90523d78721206eb8b7b90708f223e00aba924b597d4b5b1aab4e43ac52baf46d72dc39b8faffd7c9465efb83d50e900cd65f8bccba07724a386036acf5ff6ab1e39fb852841e4bb8dee875c0a8df9005c3e3bc4971d629da2d8b30bb305465a9716263c6fea1bcb8cefc28ccc337e006d3e1539383ea5fc716cea992e5426b60b6854d87c18f519c3d876db875180003fd9749d7ea18bae931ee6114e24bb8755ec75c68f63884274e2ab0d97b79700b77f00e0c142bd0b030000eebbc347000002cc1f8b08000000000002ff8d5400bb8a154110ad9eaeeea9a9eeb9a9062a468278d55dd07b513072dd05416153007f600353633fc140d01f30144373c16ccd050311ccc54fd0737a66aeb2183800503dddd555e7549f7eec490cddbe443b12d993a83d1ab1ab82cf603d7ef72f004ab6033b38a6ef6032e960618b49895b7a14ed0349680f25dfc0e478c8f023000201320c9b061865904d178daeb8b8225cda5cbab814494174f1ff15ba27590022212eb51a5b3bdc5bea1d608ed430b8041fecbac8155411442e33c4a77097003ccd5d9be6b8e601c01d52632c0b5991bd1003bbd6c159eaa6f38a51edd04b00b5f92b32baf191cedc0556b97a50949850445212dddb11850478257ce2b033000c1387d6d8d84d749a6391b0044d867e2d0f5d623fb0c040c08fe26b79bc09003a25385a1fca2614bd2059fdb8ad76b6b657707b4293b4cde96c6d8e822580003e115daad4a52c6d55fa52b4b72ad9553abda04a98a6a9ca9356a5424b8d00007c27ba96a71b883025ecaa9c2ab98dbd3cf3fd3af389afb89e02b0675258dd0005d1342db20386ebad1d48d8a124c37c2a88caff4552495247903c977126c9008da48224576d78c0c95ee15675cac939ad6e54160bcc253b2334efb29d272d002b705f4cd22a638953f3acd8cba65846c86bc96b797513793d2362d645f9fc00477976f3a27c2adcaa5281502a10de483d6a2220a41dd49e5afbdde5307017007ad3155a75c4bf1567fc469485709b48ce45442f77643ecfedcc45924492bc009f48b680b38897433a535ef82fb8fb8909b1cce4b8a61ecf507e9829bb922600da139c61aad9272a986aa3e5154aa41d493bae90f8495633adff8376ba962b00b4ab7e843063a34da44da4fdbcd0561cecc4ebb40d162d17dce10ca81e315f000dfe6f808b96d6f273cb272505308941b8fdd61946240ca6e6e724989bf36d00c4afbd8d3ed974a700f8c31ce9c68402ba62c6616ac3cecc0a8703d887b57c00df0f118824beb995f3a7e74f7f03d71cc7f99a050000f851a440000001571f008b08000000000002ff3551cb4e03310c9cc489e3a4c005097a006e482015ba00bd64e1c0896d7b40487046fc70bf8af1ae58c9de8c1fe389334042dc41ec00000c9098e9a08fe0a7b40cd8fb2dd4269bbe896d5a0c9116462621a347d23303006723c8b43f78e1de0bee669ed997b77fcee2e901216843302d4fc025ca31b80080108cf00a698112526731599166794a981c2a86c02c8fc9835a06866a8fb500f498cc2f513b6adee0be4172f5215b940d1e7a300a90122945b4e61eb275980057cbd69337d0ac6473724d2aafae5b68c9f5e819e9b491ee05cd45f2cac584001b44b4790947ee237b83486cf42d2b25a937fbe05cd2057d728a69a1e851280021b9d8319898aeb845259fabfe30aafe24a7180b7e475f5e0ece6f14b89b0f00f59c0dd592b56b6eb459f317e36f7eb1b6d8f26224fcb1c676f38615c7adcc001ce61946335b39ac9c5e37f8da0521a30fde8e589fd6a73f333071da30020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001242ab1a2bd6d07d8d61ea56d85861446349e52c6b7c0612b702cb1e6db6ad0b089000001000000000085864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a6310fbafa5d9e1d791da792200e804e28a7ca3d30c8644de6b1582a9db6b364137100000000000000000000000000000000000000000000000000000000000000012ae88bda1fedddaa4b52df716b65f84fd80f7f20000c49c592dc866b5401c6b32b7fbd849f92417221e567c919124b68c52f08deee4ce6c5d7ad71ba349937f20127e3c9548a38af85215047ae55b007ac034778cc2117df62e27224fab674da00000000000000000000000000000000000000000000000000000000000000002f8730bb82041bbbc031354b119b29f81eb544a10bb34d383e79f2a2a958a15100000000", + "20ac71e1bd3e70825cc59c4590f0f163dc4a0efde14e734a4755bfd0b99a29e600000006000000000000000000000000000000000000000000000000000000000000000200f08d55455e177d28beb38aa395895b6231ea25cf0c2c018388e400a1bd2d7a00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000600323a7b606c3969fd54b1f8416c15bab89e0e46c6fc048ca485f328083d85929000003000514555da79dd2a256b5e729223f633ddcddae5f97907a8e3dec617e52e134eb000003802f6660ab20a3db42414b781c24313f836abf8cdde61eb3787937df2a08e04655000003800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000070dbd9880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000caf43800f2034924ff76a4992f08f2dd178950c1215bca6f20b69a89feb96a60b1ad959000000060000000100000000000000000000000000000000000000000000000000000000000caf438000030d9af050018abc5b2ab1eb5cfbeeb3c5a55b68982231353c14d974b043adaf84129ae734059c90ea1aaaa58007a2f1c92adaead59be5fd3f57b6af2fe8d6482405ce8b6f5077b70b614112594848b96ed96272c8b1ed219c4228bb562eaf6a86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c5f0000000040000000000000004000000000009c5f40009c5f00009c4c405d15342d76e46e5be07d3cda0d753158431cdc5e39d29ce4e8fe1f5c070564a0009c4a0000000006999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f82b342271eae42d0afb6182a99d3ad876530841583fdc0845907de3159809bc83000000000000000000000000000000000000000000000000000000000000000100bf8896e9ee636b27cf5478406ee1322588136d3eb980d0bcd4927f541093a407c2dd7990f8f46e2c2d6369734265adfc029f4d5cf8ba41ee15e0e277a76a4f00000000000000000000000000000000000000000000000000000000000002840000000001e7b86ba1000002781f8b08000000000002ff5d533b8ed440107dfd00b3abddedb6bd02b1c1ec0140033b2b812d206476362220e500044804880b1000224272240284448e38c45e0a5eb597115a4bddeeaeae7af5eab78333f6024e00ae801d9c6fb941ee839f70b5fcbd3843237bd9bf52d97e5db05ce68c76977200a9bf831c16aac22dfaeeb95f22703fa07944d5e1a0c6570a3b23b45b4c19ae006dc243e02ec21677ce37685a4fe74e669082b2c0ce38a347672994b84363bb00d97691a268e36c7dac6cab46e2d1e697fe86387590b8328de03a34d111dd200077303e27fa7d8074656ad026d1a5579749afb69fabad435f19e831a9b02fb300755cc9930d492f1d5c10756c7a027e46dae2f96cfcca2f405fcb6c8a676c3e003e21915bdf9f5b1f4221d15008b64751761b781f372ab4c408f1f111c41c5100bcf0dd174da0e6c38da43f28fdb1d2d7e360291c27e66ee26db23cc5a9ca27000df8e498b6918b0f3861c6461799ac981de9bc865b93d5980c342193948f6100a347328b399044d0c89ba2625255d68530254402bc415400cfbb67669a1c3400894cd85b2631c940950f18b67847566d9f0bf75aa5f76b9566646d1a6226c600d38c43a9e5fe1769fe2f520a33bbc4775a978e6d963a25f0712550556a81520037f3f9998a18128a56b93a4e590bf0692d00c19424ab9a34586a31aae1a95a000d6aa54e463a09e344a32f98d46861ff88e354c18ad7f6ffc6490858f9d50a008471b665d40ee9135d86a42ebfdeb8b4037393b4c116234e9ac4f96a08d55200e7bb300f3f08e7b4037f2f5ab76074608435bca887d8d3208a97ee1e8c74d200e900f35707b85bd73ac004fc251dcd450d12dd2511bd867ab52292f41ae93d006ef1f382e368aae3f305a7d7a7d77f01e11697143f040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001242ab1a2bd6d07d8d61ea56d85861446349e52c6b7c0612b702cb1e6db6ad0b089000001000000000085864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a6310c524cbad4db975123f517162a18439c856e5b82e16be42db9ded1009442a1c9000000000000000000000000000000000000000000000000000000000000000112ce7689e01689a561dcf7550ff6f6ee127004dc4ed8af21587c4c8e9921a7ca2b342271eae42d0afb6182a99d3ad876530841583fdc0845907de3159809bc83000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f8730bb82041bbbc031354b119b29f81eb544a10bb34d383e79f2a2a958a151", + "0f2034924ff76a4992f08f2dd178950c1215bca6f20b69a89feb96a60b1ad959000000070000000000000000000000000000000000000000000000000000000000000009007106ec15b6b40d88a978abdb3b3693b09855de0457344647c79cc2d3c60c3300089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00b9297c0ba7559abbd713d4ecf549a98e691902e030a01be90edd9712d6865e14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000702815f11fa7ed59f1a4efd4cbf9985362533203f9150ff11feb8cec36df6aa43c000005401c3fa20eb2fdaac72bd63a60aa88efae4ced79338883102ed95f0e8c9de23877000005c02f6660ab20a3db42414b781c24313f836abf8cdde61eb3787937df2a08e04655000005c00000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000070dbd9ac0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000006b4bb0b0289632c1b313a6dfedfa4b87f649b8bb42e8f3961b3dff2ecc0e2d1319646062000000070000000900000000000000000000000000000000000000000000000000000000000bebf730010df56422b3d8947aa438b9d0786f8ff9b16904c9205303d3b5f4af8bd49c19cf0300f26d22a4565244ef0d55bec97eed34731abc9803bfe72ce2709e6f803551a1064dbe5948ecf094af1039fc268ab1c166e0b89c7681da8bd7e2dec099a269401358987fca06bdbab07ac0e60c6234502117178ee712ea06c078468237bd16cb00000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001620b5b01a4104052fa6313fe7187564702c7b4d0ed42ef762c75ab52e43f62bf4a9559148fed1ee805340beb1198f9383b31e53bad7097a688d9365c3b24086896a0cdb5cec4c49ceb6f5348a8229de3dcf5ef36f25671cd222e6436e188ca41e1f94b6b0ee58880dec428cbfdd131c160030328965cbd426a75fa8f2ec099ebb2abb066d6cf3992f5a3bcc19fc120fc04dc0fabcee157b5872286ff1e7b1de015526f4eea116f2d81a888d9faff81113f2e0ac4523f48b74c491bdfce237b121e4639e28f6ad21ca04d5506f872df883452db6899baae7df65e46f112a43422eba499d861694356092e16b545f2bf1fddbd13166dbfef29ae420c46570c9fb9b75eb7ec06804a59e63137bfac788b12d4b28e9b6f7b0fad2bcc00e9d3a3148b8c9883a11b2383bf49a34f5ffb6ddc67f85ff7aa41cc865c95bff4932b832e75c692d4a7b8f4b26af2e4682ea05c2090f9b6939d0ae7221800dbeca4d85df1aac8f18c5e46b3d65182509771dd4acb911364f8e50b3d228dcc8c5914dce028fe1c9197f68a8e69aa41c58d802e18839760bedd1abddd2cb35258bb3630f97ce57dc2d22b97aecd533a34b700ea90697c56eceed8271ae28b2edbaad5e6bb790000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730011891a5c8a7798cf98023fb36df585ec83bd17c451d34745915c60d8bd287a89b0302f48f8c40c29d4e8803cd46a971f2e1c6d7577ef04a0e0a145dd03c8e65641811c108e8ded6c596cf86d7c85e73838e3527c43acff4dc4ffdf89f46424a936d12457f9b688edfa73c0409d931d21a16c1644b0cc8fff00e43011597d52b43750000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001164c01db875770a91830d33ef229ff47abdcc06f6672a31e037983c388a66fdc6c1e8976a67909b593215e1d5776f431ec15c7860991fee0dcea70808539ea9e07b3fd3a6a485b40e5ae22c35ef38a2b5fe353d63a0ed36997fc70c9702ae3712b34667811f4a2379bc5e5762a2662a5d1008a059e9bbb0bee44203d4001885fd5ccbd86de26940293879cc0dd6ef58ce9859e952c3cec2fe710660aa23e4e947377250eeed8de47cc924e8f24e31f424d9412af64f75bd8a6dd8c9a37b5896f3a462464232028fc811281e3930ae798935b59190db0d1eb1af1a17b30aa67dc355639b6c511eb225f14ba5304bd947f81cf2d5177aaa4535faf0169b88e56e3f3e991aefb413db1b934f5a40305061c6aca7e571dbb3491aeb80015a4035de6964486fc913d3137cc6e57fe293b1422007fe54f747a608ee24dcacd651f2f75172396fcbaefbc434dd8eaea6bfdf977d2641de910efec82d8e806876e2dbda2af1ccf4f00a03c484e43b72756e54fb4cdc02dc8197970517cf83378377085d735287aa91c0f16927010ff3884ff50f131dd392370c2f604dc3b8072a3f1dbf0b91003981bfca7cf9c07dcc1dddc9204bc7cb82f5c3cd0a0e88ac1a089e59c80000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001001c2db1c633c5acbbf68663573feb1be9cf7b4e43202738d326358654718fce031477310cb9186ee94dc4bceb9de619a327e6071295d9f96a9323dfe9210c37892b396f8718fb7a7b754fb6b12ea0a2bdbf5bb2db9ba576be48c6d314049a210714d52507fef8b41177c7ac7d4f53a30a27df72b9c5815845499ab09d258c1d7b0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c186a013ab2c8e95f02a2d23e4b6abef7f145b99b6687aed3ca052c62173e6f84d43ae0c8456cdd3e1d5393e74c1807509208fada5383f7dcfc851972760708423cf873ca428f8ccb0422f6f05400704aea865b8076104555fad92ddc592b33c6c4c34b119f4207e0a4240779dbbd6c068cd1263748c34a5061a7b1b284b5df496fa409398aa0a37da1338efc14fbb41ec2be62b5157e7a2fdb2fba802e8198bdfe4ca8644718a582c6014078bcf9d3bca9c39bcbee59e49587930dcfa1efef433b05ef92ec0e007dc2b377b0ddaa9a0d0a202957b19932c65be76922ace1fbd757686e43e06060ba0cb57287d498046d0007c6b8f5045d18d133a586fa670f88e324486887c29d862591025ae9f87e13cc0a3161204196a67a9dd87d32dd742597f8ccadfcd014442bad184b6ce118e2c406577a493f40166563e9f6826844a719999df3dd8c8f80440d531fa326773dc152277ae64de0b628ed57b2d4ad64d3239aa01ea29a700f7cda7735b614066d685a1843b0e254e67df7f9483552fdf05af68649060f7aea354e9faa46112d66810c14b6b9a23d6a9e144e773a1b7c7253f392f5d23cf9529760aea8240700baa48b9c43df71411d5fd493639d2af10000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf730012b432c9ee093805e149355acb61eeadc9a002902218d3593be5a181e56e844ab03173e24658ae95eccf51cdd74f7d6b5edaf163f28bb6ee25f3555c553ba1cca7805c03067664ba8159245d840175aa8a18b8c6c847531c16586988e8701c3bae105a78c753b20d1d72b98c329cae6e628792703e63baf75eafe7c2d241f888491000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037909fc962aca62ea5734cf4b24169c0ae6cb865a5df19740bc52f2c019d977704d63bf8c3e438b6a20dccab8729e9b3127d16b52b468cfcb75228ee15bd17406ac624a37a3fe88a2556772d5b8499d380bbebc8416f91957edeb3afef30ee529b184646916d72ff79b9f3fce35bfe228b07a6af5f1d86a123e4b18c5ecf97031052157a6e6501d51cef8c78b17937da7d1e9512acf609ec3f92090cdad1336db714c5873ab4c5be44636af1f90245c668b1cbe67473b62890ed58e052f86313defd71e1bba14445530c8a0518ac5a4b22cc62b50f9ab672dd3d813bd909790440e8ec39d5b0ccda3f944cef146372166d43f84af1f66645629d7545ea75f5cc0278cd871ea2b557b66e9ed1a692346d09917541569f4f8042258bfdb34d6b61bd8136d5fb3e2cd715cf6e44058f46bad4bf6e30945b3417f6c898dc6e1aa7693291571f8495e88e3735c76903814f3778eccac5e3c3558b514fcd69cf9447cf0d39e6e23891bc76a1c2f1d9ee833f23c42973817309ea5c0e0175576e1897a6f91afd75baa62c8083715bdf95a6ee6e39e653c4c1d21db8726e3e1d326cb892a0b0be5703e66d3d5bf5449bd4902650feac1dccbf94f0782a53a2499b395960000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300116ff9516253306cdf5f537070fdbfe30e0e3e7fb4748b632611e43dddb7ad65f03174bb1c20751daea00ea74743fe52f9f2617d57ebcce9098bf262fe66c997ff50ffb72195cdd4e072c30ff778024a3a49be507e62dbfc368702fe30a7e5b09370a13e449bfff263196455beaafd0300e0373a4cb75870ead296fe6a2029e023e0000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009623afd9eb2cda3c86815897e25eaff1925f16eff4a4d4ad7000fb907c3472b81499661dc0666518bb04aa1b923cd0aa9b5ef2c6a5328e5eaeddb726d990d2d5bc658319921f2f6b4569a99d650847ef83e575871db6e53aa772b71db90e4f7650e1a8133b5d9424868d6eefd663f20e58fcbc3e868428927062ab79d9218de54dcca7bb095a4298c1517fba4deead0f613425dabed93e98ca462df0f2b40484c584fa12333824d1045ed2128f44ab15387c23f4c8e5f2309da334897241b490dc6d8c5a597afc16994424e017c77e2033424b80b97ec99f642dbe7e1d17043b7d0e3c4120eb47637802be4264c1ef3c847b1bb9df7b906e8874b853c1837cd52057a27b9d9504ab1c5a2437ec5df212047e16f9ff4b54019b33f44aa42c4d96b8416d94aaf61dd820724ed9953246d354ea0e124793f4a33099c2a2d59e2f7191355d846ba078a8c0997dc95bc563d5428ec4fb48f35c505999ec6381e43b652a1357c59dd87dc5b6de7e23c887270cc796b92fb889f3970bc05f65dcc9422ced6a931760ec25cba62c906508ef378b78e5d17d6da8d6c72e40c780adc2d00ccd452171e16bed8f969344cf0fe753121a11f32b63629bd251f741dc82d6f8580000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001293779626d00acb4322613da7b67b411de515f35743bcea084dc1789baf6f3b0031d52943b55262914f76e42fcbc14cd0e99acd2a3836b7d5b9ccda1a3115b558f21e27cca28fcd7e9b8c3034938e4e1a147d3a9bf6c8fca2a74c95de16fdd3e0e1217efba3e9476d3a8849d42a4b60263a5d7bb87818f1f3c71c8323447ece01d000000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208000002040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00ae105fe409ab09fc0940387ef921f9bb75dccf18f46a9488ad51e83251e7f001957dfa8de1803d7cbe6b927feefd6fdb1c45edda750f9b437fb9bf489b28ad090c4130a0ac3ec0ddd17d425698cfe1d8637d7c5d58204e1aa7da251642277021ad0404dcf2b20daa4badfa0978f117126e1eb653ba4f7a0eedf4e140905792953fe8f0969c7f5978aab8db0017d3ad9c41bb585e127b4ea0bf1b83a21c8d40f56ef32829144f10b47f6016d4a44cc95a30897cf797ed8d679bc907cce84a0c7148beeb2fcbf9e3fab895a53f586d146895039b2c7abb6fa6525b75edd9e6c4642a6ffa6cc157cfd0a7a516299f4ce78d89c6910b03a5649dfa93bbddbb8f9ad9860de6931b9d45bb8270f55217a7f38559bcb2c0de08e36d5e263c6a1a4c2e9aaaac8af5074b2e5225333e176ce1c03c95267dd500b0ba149d41746dd08f5b08269550cb786a9c510b2e76b59b9ea9b95e26132ea9ca12fda0df9103390114ccf639a203ddac967860d43e802cd32db3c8d78ae01b094e4179af7673a9d4e9acae2990d1870326209d47ba7eb8741dabfa814003e65dd5dee3459b94630fbb8c2a768c424f6a94520aceff4af51e51578680bb03de64684dee15a3a1134e30000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300120ee4dfdb39fea7f985d113dcded1c47ff0e42e28f36954a33df91c80188684f0320e9d34692d4a74082756726876c55e56ea364320c9150068fbade3004175c9c132e942a445c044b11f2af8f39bba497d2bf4e6d27a3c4a460c7a16b90023d91260778e45f4a3714ccde536aeb69ca8ea6d9399b5ed8d8f048599314b11565170000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008de0d0ed52d630ec43d753f0008d967fcc1598587a93a07c4cbcf687f8d07ad19b87dfcf96bcb2a214d34093be5db957afaa7bb9d6936c0157e6e09e1622f9ce673a4f88593cbc172a05ff201cdf70540e31cc39bf643bd6d38560f497b99b3066dd7ddbdd75fefc3a74073513600995a4f91e40ba1b21beccd431df1f9a0979421eecb6d76f8cf624b494fe48604b0fd4137ad462ccfcbe23aa296f1528003d94f028306e17f8deb8cee9903d9955dede8b418360353b8f156133a08f17b7d6ecbc2f6131abfd7a360f1cfecb2304c5c450f75f4aa7781511b45f5db751b5ff3e2e9a28e7fb623689da9e990e8b3f2f86fa549f1f98be48578d3204dcc296ec9452e055e8854a1ecca50fcdb59d8afb0ee203365a6f2c03fc2a2f0a12ac68ed69e1fae1f1e4a0ddeaad7bf24636dc643e1cd55ce2af284771164fc62374d53caca14fbf7b192275fcf0079896ac8016e37f1239be0617d3959ed976e21d17fbb7bbab01281b842972f8bd3f4c080c4ac23a28567e307e09ab74cc4c10a22dd3898d0f697dbd200982131174fc1b32d200cd640feecce4760a77faef0bfded02d75e30b8253b0460f0eeb42850bc272af8d2294c9f148e6ac40708c0a337b0c40000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf73001056bf5f9a652b59b88ad111d14c3ea24771b9482e14501d12c60ea247e9968f70325221ef0cdafc09378aff541208311e1771f73cad19844ac7f5089f445fc142329a7fc94346777e773f01efd7e939b14bab40875c3864c4e6d0b3c87bb914bf00cce82ebcf300600f368e7deddbf8da3d59f9c80ad7ccd2d886e25ca1f9217770000000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000020400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf760a2fbbb18bb74904fa48260dcc73740c26b34542cb6e67376ab9bbdfefdf1a10f6300e1517f3d0799442e8f139acf47055f1aeb4601ef65fceb45e4b9caa0770830dd05da48246a5f8a51b4cb26a4700f5a118fdf25f3f7ba07ae552c783ba309b6fabbcb1a99da1ee631963c3ab3783e6b724b219f302fd90e3b939e83fa8e8d2aed55c4ed3840e356e099ec1705b7de16cfd5b6a73b1921bf2cfa9afbb835cfb25f25d5dd8ccf3b66785ca956388086dcb0cea2533fde127f9594f662fb4ceada339874375d851f3b30d0a0355def0bfe9f5b41d984eb26777a61438ce923cd5235a9ff5fd4130f67e60cfa6a75da4ad0d4296cf4677e9c0e4057df665d7d194e1d8e8658d2e47760597d50bb2b34a3be0af5ede757e3e31b679e29b8b0464ad9b09e41d5c7175875b5159aa68aff5561397ab15f8f47e994b55d8cec21e95d76214c72593dd88eca7be37ab123f27c5b4d8cb9ec1e3557f16e931e9cfe18e2144a9b00dd8d2322f0cb8f364fcbd3f18240e694a117d90c6a0c71f4e880ff77003253e353c2cf1632b8d1e7fd9b0eedfccfb64cedbed933ae112b4e3b4d68ee0711979116bd2a48ebe9563833af70041c463ed25d14cac3b9d35ca91c0000000400000000000000040000000000000000000000000000000000000000000000000000000000000000000bebf7300113ff8928e47c8ec7f25ea8ded8a35b5a36b176007ed566e170d4f00ed6e50f84032c1b126f8cdd823b327a0bde5c7094528e0bc8ffee9c5ebea252af2f5243a921169c06c25df9c721ac1dd5982dc5386824383c191be91175b1a67afc0ec7945605422196900072932bc7ed875b1ab7e84b4bb190c0979a6d78164e7265ba299300000000000000000000000000000000000000000000000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099d62e9bcf4edd4380b4a3aa74ca0fbdafeacfc99881b1d060bdc93ab081b668bc93e3311f52e194b9266f8db1c31a222823152287acd4886ac9efee84907bf7e7111c63ed9f6153bc6f805287f0594fd74b4fee1661b91499c28702ac6bb15aa9ef6aa58029b6b4d0f1b519102276fcb067ff0ca56e6d87ac1bf1d6805e59c45851973fdaa2fe0b5f0b30584cb138d10b08fd6d43b02ba135128daca03d7e3791bfb30333c33d0c9290c969858b4a7625f70292eb245e8db3ae543b5ad127f57c04f950aa2d73c3e2a3188142ddfd9aee745ab545e3689cd0f879e00a3cd47bb5e5bda8c90aaa8466e12d23d4df9a20ba845900a279157cb3385223c2b923ea4e4fca0edc4fafb8ddd597526838f83c211fd7e892f40c62c3d1ac3373645fd68e7018c1f7f5a5ca1626fe97ef8f226b1642d3da35e2dc19f1f70de15be3cfc638ebb44c151c1d6802c3aec18fb6d017d9d74d3b9676dd48b5bf5e1ac2abfa75409c730818a47e0265f933f8a7b42db98830c133817d217107a00906fa701777fced7df42986fa3cd7958dc1fd4246d9cd1193c0f23e07660d2db014fcc6bbd7b0e9ea8ea99ac5fa505ecafc484ebd09e213072bd20d7214492ab5d59990f14c00000004000000000000000400000000", + "289632c1b313a6dfedfa4b87f649b8bb42e8f3961b3dff2ecc0e2d131964606200000008000000000000000000000000000000000000000000000000000000000000000900ae28d622edf01262a7fd9191be984d03537fb9b2955b774b989d6def48153400089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00b9297c0ba7559abbd713d4ecf549a98e691902e030a01be90edd9712d6865e14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000801175f33726cc6d401ad6c87bb310dd004dc01798bb07cc7fdc72da2631ca8027000007802ccf7f7b3ae4efc6771c282a2fdc4c7275f245b4d01a419c1a8a6ad50e62bc66000008002d804b79a6586ccf953efa7051e79a0d9f2f548ea04961dee6ab16d1e1ce555d000008000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000070dbd9d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000006d233588277fa514990fd6c3f6861ce2091c65ef81ca19f828c9038213019aa55011cd84000000080000000900000000000000000000000000000000000000000000000000000000000c205b484012c2bfee4472ed1d8ad560cebceacae00f7533f138ed3d081ffd62ae0b79d80e145a15655346f24dbccf5ca77efe71d3f65cb0e899a63846a9e4a8d89899d15012c0f3af2d2f48c4b6918c8f11e2052d58cb12d668924145f68fc90dd19ec4a309f4a50ce5a61a3a94e451d92e489d920a4ffb499604555d5b577b348369a92b03a9d99c493753c2e6dd9d95bb0b62159aba7c500c1fce7a2449c1346a63023b2f33cf95de21f1044d4616ce450c05c98dabffc566d146acfa500731aaa9bc00270f5a5f753458cc7ce0866ad3b52019c3984fefe85b4443cdfe70dcf0288e6625988a9a0e31efce38aeef631432750512bcea28c2e7a18efa03111a764836cf2ef5ef7f7fa43f8b5484f9f81e49ef7964e7dacbb9d02af0ed8b8d27a7ee09e32c86f85cea234f74d983c7a80811424e2f519dd2d2963eb092048c4803d72a63022ba1aa25886ad6d6da6fa8c9d0188b52a338178f19c058e16fe085458d0a220fc3880e79549104a66992dd131578ff5f6492e14fa4bb03164286b7dd11f24901108cd5c3424dddcfcdb9ea4c13adcef91a4cfd73949c12a1d61de2c51a188324d57e9e60d0037d39568d87b6153b995be1e8aed5aaed6463515fa695d209a91c7882af0d54dff4752ceff28aa65cc15801aa735374f4b725c06421e3a637870643eb49e2e8d7e2d9e7b3afbe92862b79a543df8cd06513b443f986aa5d62a73032420d357dabfb2be83d2b70c5d3add094a3ed762db7907bf297d235a8abc125654b6d242c50e35d7622573d36f69da7a06116d676571e3f337ce83abfd16408e4a94dddf882f1f5498b958e937d8da024ca277011ed0f5a3c5f89b4db44032f1c440eee894312890d557fc25da0ce5fb3f9a8e06738eb2aef8bef5224420114ec7c8e9a9f4656d3a6e7708bda12bf40159dd89976d90b832fc8b5befd21420e37ea46abff7a072d1126ca4e2873a8f9f9203ab63a3a891d897dfd9aa0945209d5c2084f39731bd766dcc823c6dd55eec2a17754cba55f01318e9a3188bf7d0c8e4c7922464c57bd4f221528a2dbf0304c4e33e09fdf9df164ee472b06086f1cfa9d3c88866c3cc57ad56a8c40e874d7770e50467d071d9a782a935240bcbb292d27f1baf324b023ddfccf60a5557b9d48a70b7d8135e230a812d793d7dc230e36b00ec7ee41ff31250f498bb9b9ed39773c045347da09bec5f163791a26812c91ad56978ffee1b7612f8030a64f67f6ef3f98b4d2c76b92f8a6ac4c05b4c62a8f836fb0fe5f2b4130bc43bfd22aa4f36a2978a39e20622af956c79887271c081b8d67ad697e7cda7fb79b1d3fd19f35574406200ee53b10786a162e1666fe0f516f4f00f8d0e28252cc09432318307266cfe857c7cfa95c77ffc633e496700b7a5cfc9d87c96272dde6d1231c288742ac86c868e5168df5e8310a4e40f39c1a6a495feb6a57cda980e5280a521bd7f6022919e03b358718ffc7850de12f8221d094018f6eb9866555db92296c8d76b9defc17dd72899b4f806c0fef2c74b21b64bc02a9ae6c4a521630842a1d219fbe9df21d73fb03fe7ea1d2edd4c6a1d91fd21f77e51ee53ea42d66a1e0def8bf32065fc455405eb0c7c510efd5248411106bf48c6283d95a5131950bec904a5abee00ff8f89c8170040079af45f3fc812c970f63b5b0899529505ae6d23cf62e418871f9a406fdec7682e4858d035db9148dc0ecaab2c7da0c822e0900df3cba521a781268c1e7ed64d889413ef735bd2a4f6d3e94da774a8524d7a436bc5fc6707204c785725781a0a7ee7426ed3d6d07dce298d23dde27bc19f2ed8172009ca2c183719ba50385fd7f49922b56a505132708b9df44fd6d7fd780df5fefcb5b6a97bb65d3ce7cf69e9d13042fed0f3914499be645cd3b167973b3b0a9331af91422c7095968874adc1c6fcf1c519b44148fd4a21dad2522bd577cc9c4f6d38e08b4c215c8dfaede01e4f610da14d0f329bdc733588e5eb06325bf8cb7c48a69787d35ec991b846e00679224b5a002f11f18ccc5d70fe9d0d078363e3fe1fd7871260e3f44c1ed0428dcac43a0dfe26e2b4f19b3016523c3fde8ae1aa4e909038b023750e28d2c513e795910258c63780c984ad158bbe941fe99ff25856111c329a3a52e60db8569eb5295ce74d6e8072e1a783ffd08b98e89b69409bbd9336ed6dc8ee1e4ea64bd060f3c5310228bac0ce1fb473d3289d4776b19d2d227d6e289aab19e2b7db7a2ee8873e9d414c65e09a4385fd13debd0a0b4de6c3327257c97210050d08a09218de5be6de4977a821e583b99f0457c9711dadf5c3545e9eaee4d27d22e8175fa809545f52e53cb95068b31f32f65318ae8a77aaf9986e27f8a2f634ff5956d0c84ddf3f0b68faa88209f5046adcacdfca2969e424b59825be731cf64727e0800f4f2d62b870cf7870cb26592b83d7c3c377ee66754cc311a8d1e2962bee20c4e2238297c469fa0f207c2c6cce7574e4d77ca43aa13d00aa18c8b492b96f65f1e702b6581a0378ae009b1c69a686115b2a985668e3617535d17a20799d62725d5ab05808686ca166e2bcf33d512efb1c38a25a0471ff0a95766a1802a60d906962639bae417089f9e00804e8604f52a6cc70f61a79bcf6909521ceae49f0bde0f44665bd084b6634300d66a96f97d8c3af91bfe8553ad74bf1a874f93ceafead5c28dadfa8508c53406fe175c8d1fb46149a88f3111745bd09a5af98bde02fba3f3a2ac13de4c1ece216138d292cb5767eaf873d5564331218651b15534df59f81f9c9ef53b10afa524b4834dc812dd19b43f90a3517846b043f5a6f4d0ab5d79fb2833a0ecde745719e2e5ec40421aa1c07cebcb2c61ec45afd556c6332ba54cad081461c504c3f84006591b036929a393c64590925f63fb0f0240efa5a49069f10dd3da58f20a46e00b3818b9f8fe9e83cd7f67e7e58bcb66a45eb41064dedac7afd1e6057e8693db221deaa2deeb137c120b707d683eec6889e437ebeb35ceb1c096730bbc0daf8f2b0ada100391aa4054219e8048f8558bf68bce544dfa008c7de2827caea0fcb13006f596c538497a2696f6afa9a655b6571c6e6a2c2ed60ab31ba0bf4556d2d51bf80599915cced6d34572cd17b1ee3b2249542d72071ade0fb650814782938e0f91151d6eda07df8577537d5dfd6e6b8f9bd24239b4077cfb5623e9d0a087a42a36b92be2589b594769422f1538ec71fad91b9c125e830febda5a108857d5e12364cac046cc3afa53287a99abeb9a36a834c7533642d972095c31b26f5fab5d154087280a0190a22286df3ad5110e5972e68383ddcbe8e08762feabde398bb418bab26fb25ab1df087678deaf72441bec18d7b8e89c09d6febcc4bf111532ce120be71c384c3dd2dd273782a4f86affbb3599de1d2bb463b2c3ee314e3accd31a53b93289e0df0b1a21b074dd970094ccbd43017db22e795b41d52d4fcf2f7a11dbf22fa83eea8bc9fd1add5a3ce55637328797a67d6b70250a2693cf0543d018f79148c297ae936ff8fa557d9b5d791263a0ad0ca58acf8baa0b5a9c26ebbf188cc4ce7e19d2fae5c8b42c8ccc447d7f86f17377fc0d7697508b2251d375940d91fce190c9b4345ec2a531186bfd71a079385b2a28a8c10a680772c8777cfe24c9b3a4d4e1e311e63bff400d7105d6ada8d43e0bbec9eb360c18af68dc62530a02940616e32d5abf0c0692c76227da3c8199c83e80b60b6d0c91b57b8c16d51cc35da4436a71946bdee8456f8b7cc7805a16846b3ded11fbaea92136cf55b023f408c483763e68f185d3ac2dc4b841957bb14a6b474bb1f6be14818ac4d49711acc10bc085dd850821777f586fdd01454d33ab63d27cedf4c3f4a5b38b9d7a20a5a42804b79507db7cab5dfc254293045a9384cb73b56582b80b0906d40ac111a30082fe22fc80f6abdc27d6192d57e56ee30b165caa9f043f109d7a6f4d2f21a1da2a2606ac311b8b2e7a40c47b6376974b681ba26cb6bfeffdc08b20a1730b30a0b15589fd3191fea8f45691607880de960af0aecd64c04eb304b3d737230a04bbc7665068c8c7da8ce45ffd67daf7ecd519a553eb319b2ee03ae915c900215d428a9ba6de70b09a035cf59d63fda11f794d8d892ad57eb6e172c18906f11a292cf5bef89f45f939adf16f3f5c8d6010f3d103506c219c2f6ccf85ba3798186c2b6299e024fca17fbbfc6c912a9cac79e3b7360f8244f445ebde6459d2722566bc9338adc7eedc5d5ba089857945f9a9b5d05183885dbd464ad0cc0d9f280d570b15dee70eb0459ba8f371c7ff1b4bc8700c03529e96a2a79ff8e046356a0aa1d2417f867fc8758565ffbad953b417ecca51776fca5b4828ac20c38e94f62ec43e4140fd432d2043e0a6160eaa65f4723ad5343d2aea3399e7d6b21e879320dca6f240bd5fce12c2d0ec8952126b771437311aea1b3fa9ea86602ef7fc5420a6d20f9543a72662e63b19bdfb96a953c15f5ad09cc6cd26710a13ad1fd7d12cc6b59134175489692ce2ca4859cc1c5aa8e1b9f721c8c8e768fa12046dad5905dc3bc6f6e9078bbbec3a3b75fa4cead422a24a3cc2ad7cabba3fbfd268b0f328fb454393103971afad6e03ede82f7b623d2016ef97df906fc14f5839a3d95213608c0c0c5ba6f58707d5f53ce3074f93378375d7a65e8f5b4bc7d491b9b70f2ab1d8830e658b2198deff8ea05bb90bea795f412a6c4c648b39733b03d9420f11e14e1cc40e3c80731903ddf65bf895691c91c6ae5030ec5cf7b520b64b50a62f54f316b44cc610b3cd1cfb12d32179ae1af8f94b08c11c011a0ac7e9e473dd0a015a7346c25377f651a11ccbd1d030f91257d8699866670fecc2226668f684176b5c2e3f1f48b3a7b91df7567bae4e2aea3a14782fab4d3530f0c3171e03c80e525377a7e8711984f5710c5f2e7fbf436771a06ab120242443379f6e66b89c111f040543ae8da9be0df1e90390309a83e511b4f7838603f3fdbfeacef931ee04e1d4ddecf66fb5c69df83a11e212909447b21ee273e5e8906a9e755d04a41711a5d3b6f31cf53f0b569ea156588996b10a97968f77251c0978407ab244b942219fbfb2e43b2a9ee0e5acceff9add578d788b6e77513c742affbbf894b3338517fdbd9a1f632cd295f287937bb347d466b49ae1b8571756bce04be1fd90517e11c8cd2fe0e6f5fcfe45750b1a74b84f00d05a1deb7ca110db7a0818a982db1812f74f16e5c94da721e7bfeb245ab5687e5df4d5169555c47dee96934e6b9a3715fb089035c3964b530acf0945fa795e628525624e4dce9dc65f580d7f3c06a91719578ed9cff4e09acaaddaf4201c4f7ba837911f8d97e6dbd52939d2fe120c069b99300b315e83a0ad544d9d8fee72e453af5c510258c8c5600bc35972264f1ffcf194bbb0da6ca760a1681fa4ad46052f0f5bf6daa7bb307624985e0b07d900e5eed10ed4bb0e33ddb24ce5c1e209080377583dbf5c2b7a51980c7cd8594a105be882f32485c127cd1102401b28f6f249183b75082ffb3c9e01fca59f62471a3e08199ba8ee30fad2adc3239c109ee81408eeb340a3a3757ece024b4a8d261a5c26dd04fc93c86b8ef58b8a241b5f722b3d4a448805e5ce7a50eb90fdde23136aac8ddf7e50126febff5848878b425b0996b7fb2fdebee5731dadabca07ec247aaea73cb0a37f11c5fa97ba099ce433eea153afb1d412f32b3c3611890b3725a09ef1051cfc918f28ae9b218c46e91801778d77c5db166c46f1799445d9c9003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000001118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000010d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000010a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000010b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000000129a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000001141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000000125e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000000112978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000012daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000001189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000011159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000000105ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000000105c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000000114d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000000103db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000012ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000011213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000011ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000000114fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000012b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000001305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000001280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000001223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000000117a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000000108858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000012618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000010f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000010e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000001172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000010b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000000105bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000001137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000012e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000012297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000012608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000000118373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000010422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000001204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000010afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000011998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000000128d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000011da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000000121d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000010ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000010e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000001107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000012f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000000109726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000000124f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000000103c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000011fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000001205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000000125110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000001283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000000121cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000001094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000010c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000011f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000012421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000011fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000011bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000001304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002755cf3baba6147fccb5f442580485a43b802a120db39da43c7ec8368819dc83a260ee7adf6ece87ab662d1c63daae32c40adcfa89b7a87065a24cad655f7aa7d70a2bd31460e4d1a01e08463808115a01af605972b0511e588248515c026a0c53a9315d434919757a70fefb235224567301cd763eb79d54494db6a18395bced6e1159e4458810e83c2501131be8ced0dddb95c2de19f9185a3bac713d572a40cd2992225e53f1cf74f2812f68fb4a6f44a4ae6c65b5fe9c74d1292dd8571cfe0536d23e6a39a7d37389132e8f03c5f13dbb17ed92805f1079fec180f61643493ed25b474fa70a7f705b1bec5787f7363502777a1ce727fe8ed809c799a07fa38bcfe1d2be5f5d3e9607be471cbecb2f5d7ad5baf1a512d99eb5973ef096dcaec79923ebeb287dfa11f4441ecb1272aa7824685c6e50af11993cbdda8f946aa99996599f78bc484b67b849e512aa903fee91105cb3b7ad809fde7ee46ab55a76e154ecf6fbd64ce95546e7aa246155432286966e867dbbb0a302c244bbc0c30cbcf8d2c2ed20f6197ecebd3130fbe18d5a24557bb19bb0807c14b6ea417ccab7587436c7fa2605651b7f2447802fe2826b9412b81ebcb8216a35af362fc77fca000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023a1fa6647cdf6fcbb3484583340919a4f3207a3c9d09acf3602a687a538e1a827db4965c1091aaf14992d2d8404a715162463c545b155baae51539122095464783a4283858f1e67d100eefa8d5f4063074faff122df48cd4fef3af25dec47874b1e44c1eb3b90e564f72993594cfb213d3fcf01775f4a031c85d09dc3a143607fd15d8af52a782f98155dcdb28359c27553c707ad2686323f037636fe386700889c9511af36d7c5b74bcd3e2f4fb70ad501d47c27cb79f653ddf3eba9e305f6e3bfda5c70f61df8722787411f5bf7f0bc84c9d050386ba3788be53671f281da0482cbe716bf7d1dd11b37745bb55a7881a9c38be0a1bcd5bd474d06205a20f2ac16680facea365c6db7eb70e851ef442e06dc51b2c8d818401875c38382d691f60290d321d4858cf362fd7e8605c2de93845a981b531afb51741eeadd2cef6e5cddacda14e9cc9ac119abada085eb6d8b5b03892655997e0e6cf5532ea6cd53360d8b683314bacd40fcd42da8e1f9cdc7085f1c512ed9c713936ece3af84b5b1b4e3953be6420e0669e10d9227104d1a884d5e41b13252bfeac91ed344ae7527e7e9578063e70b0d9aa58b44bcc7fcf832bbafe9be719a4d1e283b19c949b90000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097fe8fdf96ae40ad60181fb12a17497119a06151f40410983fb8b39aa8de2a54209c713f029854516d5c4fc312f3badfe2bec496f7b6624f5e8ff04e93b3291945501b5d503222977908325c3f31e805c6ebe0fff04ecf133c003586339f75d916171513bbaaec5192a540e178558dd3ccb254a12729b6a89f01195dd29ca49af0f61073e706618fffde068b5afb035140e11eb0610dfea35bca7c748857a7ce16b4ecf6db4da3ff65635422d40263373ff77279bbeb94e75674b7d5d844872473ba21a8c23543f1048f520b727f2f91b787ca685fc49fcd711d0d667b0eea412891a9b238c520fcad1fca5e0eb9114c8e838f5ea41db62964e2316a4d5253d5d90f842a56a18e2941d2534daec500fb8b5b728fcca3cfb3261f205f18658af0716da8a8652fcc83171639457d3f9fa69e39c650aef2d592e1b9ba69de3389ca3fa7aac6f598ddbe81b12ebee3c6286e51bbe3d0102e6e4af32e857e0b27ca382d08b64ed90f09ea9beeba4e216d9a8b1c9a6ec7f7575ff9da47388b4f318df00d02554623792be0d5e720470235f52eb52084123159aac69e13b7e0ed37d89f4a571d168733feb44f625c5a392b20dabfba23457159b613c70ecea25559006600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002580104ab8fdf08fafbbb901685b74d9dbb1cce95189f1fd8da75de12601c50eb5f9271fe0b42c40b82d2399bf4cb97129942cd65546de081f0fe4ba66470646f165849cd3f64c340a1019e9a514a3945e600a10e0c835d4fd562e71bd5845092e44472bf32b4dbbb39db085e4d5d48260f14794cb33dc6c76d8046a212eac5d7f8a7efe994936a9ac9f206a442086f9b57b7c9343d888ee763640288dc4a499393017dbc4627df44741d5765272d623f06c91b734fb31635066d48ef7efebb950db5517daab73ddd44a6b9ef11420312bb603f6e50dc02c046ed45b8a3438cadb30e2bcfef7e9169a5efacfb0a2a799cd13529385ef417042a03d79bcf443773e40911aacdf39a85bbd876fcd341c9f75a7fe8645701ee0ecc5fd01fa1da00bb7ec9a4554553f4e45bfa25eb6682905394c56b02c1886091567b40aa3cabb723dcdbddf935387027542ba042331aca0ff2c9b1f3961d3af3b31d5b33ae22fe9393d98fb331b627c28ab14250d042a039e300b5d8d411dbd22fb88ec1051c0f51972459377c34a5feca26d799c60f5b0298a95047f28d5857a8b3c97a2a6d703eea7339bf3027473a2b9d5511fc0f1c2a4e63535c87df708089606b4ebfebc2800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f98475095993fd244bccc9d7f045e70f6bdf7bb3931956040e9788bf923fa7c849cbaecf0e301ea5561c5739277cf277de7fed427a5dd611448024f6578b0a1cea4937bfe8a43f1ff3971f4a2ccb0cd55a419e54becf1317930c498f7bf8d800bb39f55dd62b824fe24836f2e159d58d50e65a53ad56e6d7267b69d0b465b7eaf93bc8481d258cc2a0488010ea54d6b0d29d7d2fbabca2f5ff6e5d5187d81c7c41734deb61a7f3d42086bd30ef07909d8c33868d615e77ed410d80459c927d6d195beec04ed833b762cb2d22d75705c575b96c757872bf28e7d553c91cf1e35a3da8d270e3cc7772834544ff0b30c49543b0392ee9f98eff2799fd2518390e9324270d925d95c0fa149fa58af34cef9390039a8524f4f91baed54fd609b67c621604b248ad2c92ec6efde1b8c4dda61c2b1e5e7a0eafaa4ba793c7beae69e4ae586d150e83fe41a7db2329f793c88828abbc198b4efaa5098330ba7529207d99e0cffd5e3c6898f423c2a010407dc84ae2c42298aa2b0a4b33c667cf040c0c704c273642c05186cc5792a007a7f821658a23ae233de27eb260bc174fc1a0cdfb645f6b7ee3d602228f2530722fb663fc12636faa2c70ddbcde647e6e3b36e970000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000993090f47a6031986b75e5855b1afd6144cf56cb78c51a31c89e801d475e76ac525f5cf26cd98c01f679cdc19d9b776d1a7eb5c6e4499e3d691258e6ad9fb0359fab9332ee03973c04e9cfa188265b947af11857e29e8d5a9ae0e992122d2ab27888e7da3b513d41eae211f8fd2aac45a8cae9c8991d0e6487e20c7ba502a9447f83cd983253ffc5a88297623185337d7844b366fcab90490a5af2d29543669d9c9ebdad53d68d194164ae24605955ca54db436da3a3ce7b44c0a84051116c9a9c7a178dad220a5317cfb012cca1e617914da515870c4028d569b5e8972728ad2aa6ca259e6e595e0b90c38cd91667967165c2d7e57f8ca91ee02dd37d07973d89f61628cd0e725e98fc86eed7dbdd9cf652f420ede69cc247704a0e396af20a0d964e66fba0c6ab11f7b3781a1882e5c56ffafc608fc31a78703e5efc0f5257c23cc1360bb9073668c369889146113e7b80f44092fcedaf4e45879d06d89d35d3af76ce0ffc9bbf78afcac967e5abbb5f7674f65506ddb8d3622a3dd5a5315d03d5e2633e8fd2e4f65a8be0676aa274929b76929baadb6fc0d1238e10b8c21fefc78606cf098cfa8c659279c0e0f68cbb2753ade32ae1270cbc45c546447b9f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1570661ccf1d710a0b44ee4c44a63b6b30ee2bf99933fdea09a5b6cc70b4b4d57ee6bc1fa6a25abb1f620ad61dd79f7e5a31b773a2cc328ccf2ac4b2ee7e4485957ffc7a9fdebc8489012930ca56fd5a4cb179f7e16de08b5cff23bbb06f9ef55acb587e53eaf093d3bd176170606de1bddb69f596238a646019b034f1e7514f5a16519c5288ef0ea371da49426af6d69e01ebea09154cac716d18556a5137542e481fdd156f44c2aa1923faba4d346d4c80caaff14d1cdc5d3e840b1c29872b89a8e0eb2755cc64b869a22c039325cb7c624b6d79477ec0739313c7580e7abf3db0b7393eeeb0c6682440a03ce7e6cd23cd437c4073ca6a34e7979e8ef00aae7acd0f3774967617668ada1198a336217bd5db1ed71ba4ebc5bfa09338358adfb9c3c4c99efee04fbf8a9fdbfe399c66c127a05c43983cdb74ded44336c9db84213ddd1649ac0363d133d3dd16c16c545abb7aa69fe2350fd620daeb40881b538936a4926bf943ea6f29603f13b03f09dd01964df0f636473102944f4f85f870241b7852dc0e7c15557f3e88bd97a88f9e190374af7c55955b826e77f35dab51b22cc9cc860e9bdb0460719f953b39edef9dfdeff3180d8aa7ba7094a296ff9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026f69e46710bd541250da1282f120b4f2806e36c106d92a4cbbae48a9eda972149dde6d9e3686a4bff9b2d71683deb9c75dab90050bb34dd4139d0e3de4aef3aa0346fa4920e1dcae2b059f9fd3fee2f68af900a30e4cf394558a326dd4f5c19bb7b6bf4704c643495b80f46bffe208300398e1eebbe3013ecc3197f35a053b221d6598505a50900aa4d2e0a0e3c6f64c412f370f523dca36dc04f91d0cbb4a5e0191b1df3de3710a3c61b85bad3c3255e669a0c7a47c443691b71f6cbc37eb51da5af2ff98b94f1ccc49d710b377d26765b244cfa639255ff9b36bc11db0f388ce10d58c4098ede932c3174d9fa4261cdb4290c7188fa9c3a7da2f146905efafe926e44f4b68ece3a5943cdc68cbeec77bba2b54b39ada2eecaa67a8e37cead3d9371db00168cd0249d89300d3d7a3b7d815ac0b8fd26d6ac71dfc50cacb3373090e6917f0a402b0aef4387a55471601eaed7022887612dd75b8460d40ec3a9d66d144d5d1706adbd2f6e3c27dbe6693e1179fca97a2c6021d9484591c55bec08e67d343346149f4be2c96510e73586912dcf4b145341d16a06f9e0b12295a36dfeb7c3854dbe3d1ca0714712c1318bc3faed88a6d3ae70d9c74aa0d0f319a90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000256edb232dcf9756e036c7943aa7fa8ba7a537b49bfc3bf601f993a6d09eb1f8e74267034ded43276ec3c3e6f4d2eb05e3e73814e779e2e233f36ee1e6003fe97af42e7dd240104f661ea2e3a914e7ff642a38e6f1c3809ed834f9e4cab31bb7a79a85a23994c948c78d11a0110e29fbb05af53d2946f25b42038531327d22b2079df5a9b5cea2bbcf4f0918cb784b2a2ff2062b633826194a616b7251d4b4116a0c86e11b4d13bb191ab4268ff80781841b28b9723a32f16cfa537a74498217f2dbf5ea698798782453ae49ab0e59490c34cf831ede3366998116f3029119bcfca5378996b3da189964c6ac9f42b6ba706c50e879bbe938f94fb0ead2a87e04f515b4da43f8d5d98dffd591d0ff921eec6fa62462ea96e28b2780c6059aff6b2ebba3740ab8917334f24c18a2482bcf18bb4ec6e8c11c727e73fb8052eab5bb710f078049ee45cfe455801a1245a589809b298c9bcd7dcc5e80744acd1399f00eb7055d06586658804eb5183e6e28164322a1113441f2c52ac29a5c2dda98a6a99a28909ea0ee8006102091a37b87b82004393e52bc4e22c2bff17d4c5dc8fcecf48b0ecb9cf034fd3c3b0a193e31f3a4b69daebba43707c9df2168ecc2ec2d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000807ebd3a413c13bda026ab5fb52894ab16f7b3dde240766d700d35e8d38286e0fa79043a51272ea74cbb119775bc8b4a58a2c79af541cf040f77ffee5516f509bb78676650e61fb1da74dfa25593dbfc37b77410903ad7b4ab7a9a2ab102ae9512f1f51f2f79f83d41579f81afd43b0503b3c318cc8a1573791a78ffce28c0b473e773dd66afbe4281ce40ec668a0ad1b4c28ed68518e4485251b141e4ca4ec4593c414820cef1cbb075dd97805fb316da455d81822d09a969388cf1e66cac918905dfe714835d762a1ecfc4d59581b9d3a431848663c6e49c45dbbf0d05667a335bd75bc515837cc831e82099bae616ecccaf9f7aa1ab14b9b08b2ac365480103419b14e70ea15bc4520991eead205d8b9ff4b277e72c18a7add34f3bc5d35aef9ddf0b89eb04201735ee550626ebba8ce2cc54603f2a93f6a23d381bffc66af4ff5012a60600030d8e0fa7cbd928eaf6c38bcb4ec51d65f067a6d7031897e4d023952d50ff8054859bd02cdf9a1a7aafd5850452f7076d1940ac2e19318cb3442fa7cfaa9ecb324fa87c823fa41dcdb2aafbbf27ed616894c8d444ce54768dbd06ad59bb093d7af96e79f73420abc80b682039bb8df539572b1a6ef6e0d1400000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000148e4d4f6d6d646eb5dd8dc39b82a607b66166b43bca3ddd6433877b1481eb0feb66ab81ea00b4e8c733f81ee90709d21e6d5b70dd9a3194431853878597b42eb45368ed9aa6f8dd5911d97de24706808da293d6c4c6da154a51482c461aba69056dd32b93394dfe635e08f8ea2ef7ac84a48c87981416e2487b3700f7974483baf5ed860eba14349b7bfb1e94c95af14e631ad16eb17b67895258a57abfa5dea3ed799da07fa6a7530c384e80fdd190ef98d4f22e51fa2516334303f43ccb2227d165f3f852a3853a946588ef41e6001503ff7c1138cf56b3b81d8acbc110fbde21667a3089dc4bbb68f7bb0dd75a224d1a817c6caf44c6f1d551b51147fba2134998b9681e45bdab29c7ce3483b51bdabebe76b41dcf78c695ab2720bc3e9642d76e75f2d6b462c1306c8f20030b07630347da8583b99e0681f09c25c0264de602c0cf81ed2ef05d98a0fa1efaa77c73db7f9b612aa250952b7f18eeccb78ab7c331d019e55836cea038ce2db5a52c7589a683387945195516eb07e06520ae52f622b8a34a6d16375f1a7f06f2c51da79cd54c2cd024c6b246a06234b429106101288fc30763436012b9c1cd3b3189bcb0318e68d397f6ab70366b3fdfce680000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab428b8f610a96cdc100979206c446240dfdc3e1cc580e22e9a02759c9a756af5fd617a52408f49ea0987229e1ec23acbe257ec3ea1d0c151a782bf84489a159cafeda625c9279ee593ee89a3b77cb64ff5a106cf0158fa5699966ca62fb8dfbeb8702c2d8bcc3795fe8ed6587e574e66f909508a0a0f03608fa110091c5256773127a1bab1a62b05bf69ad70d1f9967cbbc48d62e61dee8112f22d84fe6bdfb52b9157e526b9d2e24f26e381621f8676b5d5e33b376e03ea87347b23df9dee03ecfac0230450723487d373b0231bd1707b0c19a0b2a4d274efeda18f8fdf8ec5f84e008a412dada7a789a84af35e7af9f9ecd05c879690f9166f1fc6b32ba6c11616ea6ac0e213fc2ddcf6f480d535cea94e7186528e58ad6895a6e42eede031047ffefebaebc9ec094b0ec20d37ef78b546c89857f8acf88fc9353ff41f7cb1eaafefe4f97a3479f8469383b3faf6ccb250e9453faff7cc86b633f453a98318479c09ec059549e6998b9452b4c55c2d80f855b1765fd9026f042c53d87ecf18bd9465330ebec80a66a3d19f73933342f3f775c72b2036382b66d91f4293e5a3432e64419cb9020005bbd9573e7435d6380045f768f72bf3aa19da3fb35d1ce00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009927bfa06587cc07a4872f0acae72b65cfa495f6ac116b7447df8edeaed34a7560b0de6ee19f992b701ec7c502ff97735d5389172cc0172fc91593b97a310d71bc2cea126d25c82fe364e037b298a41b0ecfab1730b466c10c146fd9d28644e0d2c450c6e0bdc66a93e09cd0229089c11cd7c41041bb519670fbc79e357399fb285dada847692415b0d829c745f96f0cdbbd3d328ce9b2751abfde7065f736dbecd3d0f19b758f88d8cdc9aee03954238d8106aea954d693b621bdce9bdd91249d13bf8a5496b3918284c9d5fb219b5f7ae794bd3b21ca9e6aaab54745518a65cc707e612fbfeb1e5d4e6cdc5f4a28710441f4793c125de499e5197a7247a1d72cfb75eb33653239aad88399e0be078c22ffdc2eeb3bf2ec9055a219835b02067ceab4519e7e648f94e84f70b49ed1fbe5a5530a8d0231116bcb9919861dfde1ed7e626799b6162261bad3750eca39534c21a70025ed8a2bc907b9c44849caadd7001a6d7bb73a463de290acee8b22c3b2a7317fe69a09f6fdbad156c5f414eb1d0c4751af10e60f213d5a2f13f85e92f80c357109926c065a0ac74b8fcecb0fcfcb5972497a38cfb29421e9441229661c578f95ff449c99395051a7e6c4657c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c749e2d3ae0365c03cfb277760897807e1c19a261fd2d177de9a3dc7da654ea992538d15bea0149e20aa1b6fd3768120b0789a60e02c03e8c0a7248c0ba15708a1fdea1b26a993e4b16d6b734018a3a9d54b794db76d6745da8122dc0ac74916c89149e2e4e16f1fb4a148b9aecf55d3574499fe6cfea570850a844942e7711d199fea2b53bc567bdf388975b1646cdc7dc0668cdb465db11c97b2bc5613e40d5e0c3462bce35e7238a84ec3459852c5345227ce1661a5ef9a2244168fea8bebc707038fcd492cb8eeb949fb1482e78d97b7555893d5969a871e0bb2fad141a05766475d3f5069e33eec8b2bff7bc337fb3f90e3a1b10216f25c3a035d088c9d39aa602e1bc54b52e875f9c43ec05b02a3693af3d02e809ac9a3516f980d974248c2d0e75cbf0a3ebf2b1996c69bbf9afab3a2597ea0d346dfc67908d5acb1c2e586d794e5e1820c036a5e6c99f5c3f82dc7481f06780e50353f66fd3c2452a2cf02bebe3db392746bff0b5c00f8477b1f65b0f0df56c41df70d4c40da6b6b72eb759145955153c9b626a1dac2c46cc08fd2b3d64e57b5b49d7586a2e5f403d5fd092dd5abed51334c0a48ddc2e05ab686b89222944de5f5418d4d9b91df4ff0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000103e62ea2293c07a9200ea34cb713e1b3dc78500bd28438a44cc9af3c1269a6a8bacac0da27e40a90456ee3ae06b83d6513decc1c4fa23f8efe09f9444c163fcfcc8b7e671f1ae6e0f47231087cefc2aab05bab15fc418ccb94408fe8d7c60a2e2f969c493bd757e98d31f02970b4ebf1a9bc53f35d722a0b1b125d65643ecad43a8ae15b95924f2b23fbdec7c1d9d406ef811bbd452cdce00c413da448ad0a0aa9e9741f63b2b47d456384b75b0c6b049e331bd490d9c4e6d3ee958716aca6fdd6c48071e707b12485c451d83cc8249bece77a3dcb0f5f97035db4c06d70c778a9bb9039e348d23c17e0b2e5d098a5aceffbe9ec44d865ff24c1a56283cd0741b099bbba9da6e2f4f1307b0d8a6660b41ca057f317cc2fce5bfacf5c69ca1a1905c7202ab249ac7a79dd5f9435bed8777566d611c28ebf7f8100215c5520154a1936b197f118a716fa37fa01d4afdef0e46529d92a2f8f113d5d1c7437d7b01cab03d6134692851012d3bee3a30b5b6b4e667facf08dfc3a9bc4c780d1fad15c4a15c36c5d8b7ddf2981c3da6fdd303c17930887d86c86f7b1e22be4cbea81f226319e668a99e3687a8b38b1f67b576c7af75478f5156582eceec277b2aa5f8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096ff4c35281edc3c6139b9c44cb9e7923b9a658e292ba2bbb87196c710a4b4450dfcd4fc921fcb827bce7e4149665090351ccecbee0b9be1fe39a78a69880766f9b9b028568d216383b1f0f45891e2f1aef485eee2e4fb309aed72a59c04bb7ed4de728976ca2b94dc03ee5cf2359e48ed227fcd551d90620d749e1acf1f79f9bf6c0c32a8e0a3d806855ddedcc8c960f76105c54b2018b5539962fe6c083b0f52c15b9ba8c5bcbfa8f2510f97d9a1d53feca7b3780781b671a1c0b4c4f91fee7f4a75f6d00f514bada1fbbc812ad7de9acfc7a927a79dfb9b06defe5dea6dba8613ec1caf4b6dd46de29bd7ddb8e44e38ce034be0bf70b37c51abe94722f0b4b56f654c35eb7913412b8e171ab9afe90136a3b86cd70eb2ab9bacbb4100775d04a4dd901d4827f698c6fcc3d7f159c132b17238d876ba1e99f28cb77222c0e0ed6a4d7cf9356b461a66d11f4cb01bcc10447a474a901be99edf28435ed897fc3ad7fc9e2ecd1214ecf3960d2e25bfd5b074860dcedf52382c8c1002f22c6f83191d535cde21462bfab57d89de174ff97b22c7843c957dfea2fd0a003bccd1e8b495af49e4816d1c1eda4dad0848ff5756a6456fb256953227642abbbb80c07100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a6344901c4e63140d62dc601d060247f6dcc8ac6fc4ece4ffb38a43855f03cd34743b5db226a0bfaf1a7f4d663491263e724f019c6c8917bcc8fbd8dec3d8b19792ed09b5c93883a6538d0449fb16676f9225d8e2e3c35092670902a524c3415ad7b1047f1d5f13ce12d67f4734bf3dd606b9196768382464a877fd261038ede49780a82fa923ee8f6a5cef5dd5a607043884a6db49d8d3d8e34b790f4912b1a4893caaba7477207aba6df44886fecdae8709a4425bbf4353eaee0896251d05db696dba5c6dc0a1f14e093fa226af0dae51669565983af9d0d83a450b893b009e5f5b026f207c94b77b0d285c457684ec8abc9163a91482c07c16019b166e2240b00af3b47d25a0cbc8e88689d5ef95ad23069fa1a648999c0e29ffa186cdeda4bb45720ff18cfe8dd2cd4a9cff83263d84414ad9e3f7c5b89cd922bab02c80f2afba31603e2ddc12683efe96c14c940611799eb632f739c2065f544298bc498048fb5d0337a57f7693314b4e316bd749e7c9eb030196fbbae77f794b077e66d751f029f3cbb2f0cf40dd05451bd3fd220938a57c32dfbacdef609cba81333a63702b46887747c93b7a2ea745ae05cebcf401bfef496ee66e255ada9de7882500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d60ab5cc0fb4f1cce980906e5b12bd803b4d54a27f2e609ca06a80e8ff42ad6563668e3dba3f8d7729abb53e19a8747764464dd0f11a586ddabc8a65960ea5bca14dc9af7879fa5bb368e55bf0f5bd5b7f7907fe90a5b58ae11da81a82390873731a8a9f0b106742e57e10b473234987d7e9f9cb78b9ed4bb4be028489f6f44a09e9f148ef0b512c254b073731b79e955ecbfab81d1fa782be47529a6d086a0f91c53f92e3073e6c4ee80ddca8e10b4c79f03c03cac0b36ae8093fb86d1fde2d185e172f19bde65d575057fc7d4330716ebdeb51c4b57b2eb6199483aae9cfb8d5fc4cc4f0211f2507eb56940bcf71288dbcfe283cc5da9cdc5d5cb892a4dcd134d4830e092c95b40ffea3ac306890d4bbcf464762925bda85e3092bdda293dba0807f6802e110d8d35f2565aac893d77aa5276738b58f7ee99907424a000902f975791696684b20201f961977ebb15e7670fb5e2b3d469a77c461ec8bc5e7978b810dcbfda0d444ee3c389cbf170ae95db3bfd01091526a96e0bcc87c6f452d9021b3f6d437cfb566fe468ad82caa59c6bd2f773e19fd18a2c87ddc7387d3d6b1814699745664594362a4325d640b0986ffd5725633c5aaa037cb59002072900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008307789c8d0dd360bf9dd6c8422280785c33e208e7710cbb79605598085437f873a0d35a1a6931dd3cebf69aa474ad0eaca566cde592af6de8281465c0214d45e60aef9ebc26c64f887d1e9c563057d41f74fa6785f62fbbe23411d5246bc8ecf01c8df67ec38aa6953e5d16363fe453cbf5f2438a6b52730d9f71281cfdf0ccb0a183e24d7f039ae8e1a53d40568d0464da39a8d05e6e8ce44718624a954dd929f4f73e833094801be711794786d5e976d35f122c8469f3f99af4279ae2fa665f9ee3a87625dd122c759cf0d438702f475296a1224b609d3c9de978626030794a4912e09da5c35559782a620ea339e62f95e4729def5401b0fd95c12a85854e5cc1209628a517dd4175564725ebbc3c53ce1c7eb604441f4e58a2a26e05cce85f916eb90055c544275133b15bc7c90dfd44ba88fd853b8588a3aeffa96bc00f9d2394dd4d544598a2757f3c9648e0197d29774a99f4df73a7cc2a68b3b9d0511cf126a74720240f4d04c3709364d418c10cb0cb40041faf1618b978a029c32c04e897e1161737daaa2e6c3e881a0e83c784338be43e0155b07a8bfa99f127fcc8c1558f553c37eadb7f90ff8c7ee376614244f28b2ad4ae13cec82a6c945a7d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ec4208f7ca983e94a99daa5be3b44cc85a55654c03f0de18fb05b4739ccd48d7ab923d88238f92eaede1598870847d3bc01de29c0e9305ccab419d24cf119f7b17a75e54b7c53562fd2951460c835edf47a4fe83c52265c317cb83d00d7a38eed0afa6385bec9cc01ae92fc6fb4369e9e17a9019734cdc3b6e57b015646965aa3f6953346eb6168e17bcbc52994736e1fc18029d19784a967b975da9aa11610e0394f49f7cf9edba5834ed1f85bc879c4a155323c7323bfa8c5443aa5615d0205d7fe331c7afb3edc3af47bb75ea4916fe04048583f7d9973cdf3cdfc094fa8464e6a87b43cd86d6499cee1aa7054aa6a1af459902f39c7159af767deee5af1cf9244140c0bd0d2b0198b8a25cf74bb8d32e3f5bb7f3b662d2646c417b7033d097b6bcd174bd28695ec545682fc5d21316141920614ca9397aeb1878bc7ca9c55e9927324482939c548bbf9501d93ac6088f04a09b245af29d57c6376192cf64054079a28c6a1f97551b5ca580299795ed817b3946b98308c8b97fa4f858c88052906867eeb0c09dc7836dd3a43685c93bfb07259046bf3fcd061fe67f16a1b4ceb080275b2b518d68a12b05ce7ae4950f624db564aec68cb5d7ca2a7c2e1c900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ff38bdbb894dbabe5ea246d5784c32f68a03cf3326ce63b2c80bcd91e1c0be654515953fcc4a5b6ebf08ea44f6a11ff6ed2796e59622c6d0b5f9eeed8c2905b9bb3e29c05a0c716147a1c3d9fb62c11a16507be42d85a4e0d2bc6d0fff3a938ea27fbf8dab48f48d7f6eb974c9aae3e4b63fce442aebd29ff51e8d0c114c7cd73dd315b4717759f3a8757a7b31ba813d60f8418323178413cfa5e8e6fb42d9e2e89a4419645df12e76cf146c6f0b314a4270072661386cefef1f63a67f51a4dd8ff31e88dde232f8d2fe7907b80c19a41e7e2fd5ed79b6befd94a7c231ee33b72a2633ea0f0fd4f35d674cec30f2098940bc21d5c51a31f0a0324413a46b32143c090bf51e8e8574dbe27d22f9d49b830b5fdbced7e214ad494b076329bab955f3fa1e2c5d6c7e231a19ada49aebc39f199bd7114d7672eed35f5baecc179d847544646f92cf5baa914797a523326717a3282c20b9319e889bf798a76ee8529b658db8a03941f3460b7437b8a52bb245c8a8f0bb9158a1a31b9ec754e2a38495a36e3d23f48585819ce792ca1d2366e5c72f3d48d0d50fd50ba3fe7f939c7e71f6d832a0ea51cd6fd9713aee513b591df86f17781d8834260011772ba422fe3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011a6fd196644f58406c7aaa58157a643de3c939539f0a5b5d35182c39663c6f68a2ae5fd314c81f07bb0b6285b0e80014241aa128bc79fdfcdde4657796543542c1641d3d56cbb462b0dfd50d4f04a6117a2172c9169040539b468793abc1d53dcca2b11e6e87bf7f8826e54f2b732169160d94f6f0a5fe38a11b969bc51cf756492c19d5ea0c9335aa06d1433fca22bdb62e0afa78ff9385f07c9839257d8066b4988eb279d193b67aeae02172b9e48a81b7b88622e0fb43f9f215123701e414ee30968b29ebf38855bec3ab197dd0283f23de06b6fb8c2d74587830e7034236c6fabea4dc2f62afc06e2acda82887ba47e6409712c08b8910bfefb3c80f23f9fbb585851155d45bf509422bef9f40d1e04a33f8743b667b26dddce5e406c33ddacc5abfe6ebdb461d91eff33db070e37f8dc0fb392e62897f81bd1a465d02b7a80729fbde167b65c3a228f20b1f2983dd000f8a6fd22fb2644c1c94687e0fb2c257e28a6cdc2b75cfbd2cbdf9630a7c4bd272c0d938248d3abbf1064e6a2429c02fe09028c38746d27f439ab237231e1bcf1d18c27faa2b6d334e5b8e70eaaa01c3a8aa713a8bf893bdf49504649dc5ddcb4e76a6fd84fe0597d439f335052000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013cfd12d176ce44f03561a475f1424aeb9ae081e4a103a28e447824fe1b515b482fd7750de8037c60498a957e4372a655508917ada52c55c355b4e0e5a3361d48b670bf0e1835c3ebaa68de995907d9d44ddb30f9ec2862d82872458f508da9893894c9c8cd21de18026cc6197368924c1dd8f61afac4112149492f0a1ec74ae938dbc4cb7e128b9af83346a0cf9089b3e36015235e95712e461a0b4a6d301e71f4c39a554c2b4232697a0259952aea06b6b8113041e8a5b82ff8a7beed040e04478f6efa9f03277d72c6f6a1e3bd609ff66a789555de679854ef97e4e5b4932d62f236847664e244ec312a49ef430ac4e704b76a8a2738080f882852059ae14baf5b23f72e5db4215092b806b3583990ec16bde6a6fe69c980f83e8379e81a6ecd49150ecd16ef53d10c7d83e48175e8496edc697be006413072e50884d3596ff3327d1f045c64a2d6983ed9179512a9e6d724f1aa2a1df626196787ebec97b2a7344019a9139773288483604b0846909efa6545da5689c67621e14383d892fd831fab3c95c2e40ce03fb6acbca6747114f0a726e610d2d258a5191d088d315bec62312566f375d6b8d9f33a410d2e1cc483bcc78950bdbe5b71d3ad6df9896000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018c072602d28aed5feaac14c62c35bdcc90e449064da66995b7ff48b5334e3493686b564aea81e0dba3568b9c7880ae75bd1188781735dd5e8947e69da1b3c96679032a714d490b9982deda7713cc96be1c80a273ccb60860294c419049bba2ee43179b38bb7d48b77fa6fd3b623e4cc8abc5341fcf4c09e3068e46f1ebbd1907ca193805608800fd87a9570dfbfb9d2089c7aee2b3ada3103ae2fe92d89cb9428265cc35dbb6c38af075cc43a674c341a566feea93f3ddadbfd554956f598b797d96603ffc4a60656d30b2b8aff1648dc49f8cc55341abb3e38f846fb11f95d8e6403ba5b95259448d77a836f01e854d8435be6d6d382632b137f039c92ed88a89a71875c536c7b36f04e3cec1c7205a7cf99c7c7808c99dbb5d23222fcadf33ddcd023618f1100def760a3d44db95cd86e30ff451ea7e0169ec67a8426faef39e2a3c981e4147559b338e637fd48c480024ee77dbedd40b14938993db01d4da67d29b0b97d3fb77785ffb3179ace349c8cd53fe9efeb86b2a7eb4c96254ff473814fe1916f9e5facf8b37200fc6089368b6644cb31cc37e8bc658d0c6f59e71f1102ab5c5397b9007c191742f9597ae4d1d8d2b43290016f3e9be0074464be0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063b47f35f36d77a8147135553254525ed2ec11ba1f5b374fc878c09772800acc40b12c55389f386d6551edce5687f1862f57a1585c0b8dc4f34814ec89af0e336e2107733a05c84a1fa198cdf19645541ad45774e2ce1f494bdff51b1f9846be4d5737dceeea545f96ba869c20a3957f69baddcda959ce28673031258bfc27feafaee4a580f9c6379533c388d9551f19b3aad511082224f9c1eac996e986d68a582d8510d103e3dcab4c3b5e0ec343dca75acecbc811e8f3e91e2e4a6d625d9eb0820ebd428e2057d899851ffd7059d91d30588bc9aa4f12e9f78c17bccef7dfb301f608983e04bccc6dcaad37a99d07bed0aac633889480ee0b6c881f16e93ada85663dd3fc911f71da976ae277f8b0e94452dd7f88abdabfb399ff120f54bd1368c658502a3c2dc6030163b5df7abb535bdc94b4941f85d13cc14ebf9ce594c93cae65b9d7c51eaca882bf3b82df3c2a23b5a11815869c0175bf003c2fc7f34945e13e56f1279faecfbe414d8143c5cf16a854aee8f74dbf35f8c392ae41d5ea4f3c8d95e70c15091f83520435d932aef84af43a281d3cd904832e5a5b048c3bc6083142545791aadced6fdc5afcc4208f882116e172af8815b464c9eb5a5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027c00ad2ac884ddd6edc50018f579e615004ba8df9784981212e7663f4f5fd9147181d624b1c7e72520ca52255528b03c88eb192a7637edfae5c08aa89eba70b0ce60b5d912b898de3efa0fe603f6cdfad5cb82cc679914490055d35efa4af46d31925975ee920835d7a41cb9183dcc3169259983aa997b12d9fe3b3378b9d19387675ce181adee98a771b02a0bbecc5b5be43d67204048783b6a3f73d7011ca5e88674c293985d44575a37952a7369a1e9afa27bd4a0624981a20e7177037764a5d46b83988445050651fe51553e0f5c3f1e587560b7540547cfa7a5268cd4d3de117e64a53cb6e8ab0419127f7a31d3580fe9c860aa7b103c22b29977ed060bf9d41e352c38cad50520072ac531aae5b39a7895b5d4bc38f9b254f64a99859f07a866f4a083c5d7fb5e2b2e947a0a3036ebe92490ed10072249fb4509513efae157f609acf14c9de49e1fcb5beb9ec7939ce4a9720500ddb39fb1fc7c48d01e3db844a1362cbceb5e58f3c1b095f7f6a96802f0f8c7d2ce1dbea64e39e29ae4812ed4050e429c6fa15869a20f3b2dc1b3835d0709ecb1fe2031676225268822ca0856ec68ccbfb15ddfd2d23aa740a42a654a8e3f80766513b43c1a9b19a540000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a01455e495ba7fc7ca2724dd637d644ebd3c3d8b36158d945e6a5a682546ac4c6a116a2a55654472b280fe4143f80d8a0e9541159f14d867f938fa9dbc35bf9de9ff5a0d9cb4f0c74a5bacbb095709e41860fc4dffa594d3d16cf964765d9d3e707aa891805b9c7b1c9917315a9c726f0254c55583f19d5388a3fefeafe26da2d8588f8fea64b1812d1e9d4f28ab7688d07dd56c0dbc91013e85a2893e351662b2fe4c165d54c87d449a7142a85a0f2d82d35435d53d67b233af63bbf56d8b4fc51a2aa525471d80e1102017bf47772003298880d6774c4b6361ac7494aa591ba8176f945bb78ba3d68735c2b52ac38f344c23043a8064550089d4c190b73f1ce82dd93b8c1f627f59edaa7db0440df2c048c7512934ef788343bdd608f1618b8cf1310634196a461891ad600b9b66562e8ab3ab7f2c35eab61e3e8c6bedec742ce39c71cd56b133c2ea7721dd9809e66450793ce02ce8040caf8da1beecec56296047f9d59708497a7a967bd35e63f15dd627c81b905df9487ff55df9426d0d3fa3b1e0738e238069322d977d3a9b8995bebdb2c84e6dc5cc570c20ca436f88132e69ee5ee14d66fde282ab50fc83e7a40ebb494b78febdbb500145b5af4b0f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000994a6f20a1a5f1f3a9fb82e3c51fdf585be2b479306ff32fd7f135ceda4b039c2cd7cd978ef67c919d9921e52fdbb09e824c51fda3d5d41db45284c598b1863a6af4f016ae14a38591ef603a094a2129c0beca260bed7685ac4541e2d5471dc99a766f4a2f04643517adad990e8692c1e4766aa162d9e4d9108d0a793650f91307db8d73c6d1c7bf216a6882a5bd3077870e2eef8239e39c2a63c4f17c5a3bbaae8a6305285ed72dfeb0a728ce29ef1dcc5c8646839e1e911476a1593ce5d655a32daec25b165d564391a9baa030709723f56f09f875aacb639004c06f640c49a85c77147de986f6a9520b0d7995919de41444d39996d5f2378581b5597742c13c320a3d292cbf66bbb023065e2cbc30446802632877b9aea776f4fa43188cadd5fa3bf0b862c0fa35e0a4afe25cdc4ea19f672c8a88745acf189aa983442850ede7f6786ec3f849e419476f5f1e9c255491b291e57ef8f4d9fda7fe53a1869395d20878357b3ecff67ec111a56d710ce975cd83fb4f81beeecf5dce4a0de9d1851737512ea9c544375c7e2f822aac43dbcd3c2ec5ccb7eaecc3de39c341aa7c9925d27368210a72a8937bafc8ef335463bda251fac8c5dc553b9bac77e58bbd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d1bbbc66c3e178ee1423d266b309a8ff36c5a85fc888d3fcc8ea92de3743ed2350b56fb16644453e2a35f848b53c99bcae8df7c7ac654e3adce04b1e33ba1747184330a8f541a660dd2f96270ac4fff26c8ad1c4c2c07ac16eb5dbf39ba6af70842da1a3cfcca7dddf4bafb79ad5c5eb74a0b8016cb106f3b7ce69c9162b84d98280948ace663c9ee78cb72bce30737f6581659dbf1f14d5365b9040580da28d0e72edb126e08ba99daa8967d24a008b57cd14adb5331bcf47966ab9ec31db08f6cb21d672a41dc7a818963aec7b5d3321e437a3cbc127138e9b8977dd5dd7ca727432a3c130a7effea8eba3aaae93e902649dbb7478730fddccc453054db296d5fe14640482acb72f037a9ebf79902b90c038a4265875a30a046ce09ab89712c8b7af73a34939bbb06440d2cd40a1dc5dabdece98ff603cf45982ea175d3e8d368e698e49ad10b8cf1e880addcad53c8aab4648afa99d5a4178c5973fa445638178088bb51e2a6164a3daef22986cfa7a88d04715923c9a2d132668b2123a343cbaa7a7bad8e363f7f735157aca5107b425409aea0e4e13b1aa39bb1d9597a0dd522769d7dad1f1f59aa474da77af918125b197a80cba63fa72daf8a00f6d60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000943dc71ed8ea0495bc9c129b30dbb7b990e9be1a1151cbe6d83077c0e10a374f6c9267dd2b61223ae1fad35ab5fb01394c323ef605b152d32a27f462147709aed71d601a060ec071efb012301e67d4b12e31e16f5df92db16c6bf36ee60da2a7aa5af1c98b8a1cdf4346f7f99ab426a27d429418b3a1696e2596cf9330d21ae31b813d072ae09570d016b5bc7062186b0cccea0eeb0f3883f8e7b4eb1911fbd196acecc5b85604b936b3fe43e799c4aba66f4ad66fa3864893dc1e31d265a7b7349ebac1711cd91b432a50e7f577375ef65a0f13bc57e6b1508ea43c3378041b5d385d8f084d2602d008e957bc27ad9850ba0f59212dba3f84ba6d3476a19fb8a3ccfb25ae8fcd57c40d6b715636180d64c5b7c0405f7fb92a2ca08014e4137cdce4faa3d8343a017bece1235dc1f5002738384f29564d486874b0bad0c930350eeb8124b97a6fdb45bd78235a463b4eb26081ba6241ebb5449cbbc515c693f5085e9bbaab4a2d4289664c41618ba3890bdfe4be68792852703c90d4858dc6273f8197532dcd96bb2456edd3fb3a7095a3f5ff396168ba7ebbc18a5de7a15dd25aaf731abd8fe8c5a428924b1a324631bddeba7d9a1b34bd029a8be9f902c904000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017eb01fe93684408186556848d63d8562ef077d8e9629748d8d21dc97898357788269dc4be4c696a48d374e44d53b14878d69a566fdab3bb6ffcda51f57abdbce503534b6e02457d9a4c6b72ff6dbe7deb75af2ddd488174be39803b915483d6b57e7ff20b3b7ea01690ac3db24c3a89f5d0b91aade322096bcdbd59fbdc422c2f65b1f76d3d6107c55213bbea5f393bcf6230edc307fc0d8f1a1416f97b8c825967ff02b3e2badbdb71d79f4fc2fec80fbe3574f30234989c436b827ce3a844a3751000bd7788cfac49309349dd11e769fba9184bc459b0d5d6da1b5240dd47ec8a27d5a2ef33df3e8dabda6acbb907c978a07231998411f201578b81d5672731368535bcc5db2564d0b722afd8b216d6d7a9e3e110b10f0d4dd9a8599edda81fbaaec549701e848ba920fcc352370a57a021e194494aa76daab58acbdcd27f81fe3a231c0e0a0bfb1d225d4df7311659c001bf112045add49e47f29c9ec763a6d5ee0d0d334a69ae89bfba5bed0412dd8add400a40d53c458eb91d225eab04f6a68caea6bf35159e2ebee4d3634d63eb46941378b964f32039c3f0cce727270a5d9054ba8e7bd61ef0881806fa3a2b0171484cb3525330af17f52a700610bc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205519eb0a486a722055ffb2cd61a2b87e5390cc031f407478c1ccf60bd86d63bc51d40cb75c32cdf22588c586926d044267e1338a429eef62aca141eb70d8b03d116570a3c72ee63f9103ff4fd49563f623118b207e4e157ab7b239cea9724e3eb2ebb46601db8bc31c0cf7a57609bfdc85cb728e107b199557ba81d210d1396f83ae9ab56da7bdd307e3bb72928f3a7275a82a85e1257469ae62683598f6aeca87994b6d6aa52a518199ca2f3b5c560427693fde45ad030c722dade51e0a195052ba4fb5419baf64ed4b1851f7786d49bb6e95717b6ea533d559b3e2b92588c30f06de29b55de740302b84b9c415bac85c95ff32a2170cabcef7ccc4643e58f1913bd4cb939a6704d874143cfed36ec224a533c7481e44c4371a4c6dd3a3f9b475f8e406cf30df030736180a15fdeed358b751e2c517b4398e2968238da0d06211205372f0bf743de2a726b420e95d58b2f434299415eefa8ae758931b4eaf7c6ca1e61d56332e21906aec6c65cdad97cbca0c4dc2311ea09fdb173843a8277184ed31e7c1c56df533b670bd27baee26c47917859a47633b848e9bb5274a0cd1a90fd7c20e0f99943dd9958b6f05125c26c9aa028a56472d53a81934948d5c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008896ed8e6ad377c98e84477d40019f836efbf4c6f1306e49932121670360f90d1b1a81e9ba9670759dc95b20b2d483a0b82e6247917f3e2a94d205e55c84ad1618c71b935d5bfd6a7161aee8e9456ddc2f92a78256b7472074d003ec4afadf4379b0d0919f57122274e0cb46f0c8da12b295927fc20632a276415f8033a0dde1b8b79f1725a4e763f01b86394db672e029b66804d2ce216d26b6307dfafab8ecb9756920b6fb25c14dfe2eef7b3b362f2ebb4e5a3f97987918e0cb36f3ac532bbcfe6ab4c66c48977966e119733d3cd80e14ee48be72d29307c3db12da6c90c100542753ca8e77a7f2d78c4a7e06629f9d31e41205c1b0ed575ffeef7cf5ae62d9a55bbe78ad697c13864fc2e13286145a32fd90e568dc1cf2cd5a200e56f66214563507a9a97578b89525ede5756fce2f304893bc60df87ab41ea25fbc705bc598413542998894362e067d9dfd787a329719e8ac8d0505bb62317f5fe9966f7aa9c0cfc4b16430d87ff69989f38b789158eceb361196e7bb8f5176f7ee6fa41ffa901564733d7834488d27990b43a1f62050f785152f7596bd1ab2b04e17c1606e0fe8f44e53097b0fe993ccbfe8348d6d002f4f41b12545ffbce63bf6aa4000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad02bc8268eee35117c641bdccfa92766e10847e768986e2d55bbeba435e7754e7be353bf1502bd4bfe9f7b60ca469e999e5584ec47cd0acd4e8b0eb65d623def53a05dceb4ed77eeb6c6e8d275b688136b48bac2b379b139badb10d15e03e4ab249f0d3d33dc8df97ad3632c900477fbd69b00d4b81eb65dfa4dda703d98c66318acc190ce30f89c9edb4f268b86cd002f63e37ce54474b75905250e1f1cfe861fe0d46e546bd678084de21589d12740691a3621b006ec0bb955f5175fcc77c0d3e5f6506ac53855ac87a047d3c13f5c50d5f8ae0f6b5d0c6c9f5fb1a9fff12fa7d67c0bd0802b39b689c7c54d18efa9892cd7effa8cd8c9636227412b01264b64b8ba9d66aae2c769d115d594cd0162485489106f408137559cd6053aaafc7c81f1e2f5f5c924976ae48c6f0a218bc8ec397766fff522d31e6bd8521471a3a98cd4904e9aeadaaf9d034dc833e920b21a74b2572bc8528645deb4e7f505684460811470903c1e776d2b263f9498932d162661b02582f4c783f4b224268e2707bf38566b89a3eb0b320ae412dfe2e91686065bef09c7c06232a37470239f1e9b3cd339a72e9e0b35b3e62244f1db8c3ecd7d555bd2b8108e5cc8dd7da901675000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027e53e8dec9ce1c2cb88de8862350060332473d0775150dc9f061cb59147aa70242c4a1e44a208934de3ca652d4042e40d36aaef46cd7c27aa8a3daf70bdb4a9563ea33e72e0603c85a8a8277e497aedc0b501556f3c12457ddff3375190eeaeb0b826c883ef3053a4a63989e73a46a2e160fe4c451e3c20f37e7e960913b2ada9689d2550f417f5fd424805b5a3eee7e7a210f7537c3945d7440864b4b7960c1874bf3ec50216d36cacfe691c02901e95b86af357f3d8d828519bec35e4ca8846f10fde39971fa9ac83d7066b4ac8e8253c13ba89e79d695c03184b36ee3d24cdb9f54fb83dc440402ebdc86c647567fca563cc772ccafb4429cd1f610cc2a391c601263ccc83ec6e36ceaf951949d89665841cab747179b438806a664d02421184acfb145146a919d43dd7541d0b6bb6fabf7c432d401cbd085c92f555287bdcb104bdb9bd514b638884dc8aae7528d35a2793c64e92c15202d5b6026d446c3b7daa72f1bd35377ec32efa48c70e504e1ad768466dac736bdef8f3785b3a4592831814edd8dbe79c23d55854f32db3f49458211cef1c15299cfcb3919a3badb241706ae5c4f7e90e0a133d87b75b9566e89ace1918daad35b348627d052952000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012f8fc4496c6b789421786a458d6c7d8fc36a15c2c43e70ef63233507b165791314890fad017ddcc732524f8f3673e478fcb6ef0d15373a1d7c99d55854645a52d00bcea7c4006c26e6888dcdcf370ab507d9a018424f007cd99a29cc56fab95a19bd2f627b14b4caa467d081417bcc54550df3e01fedfa100a4d804800d3dde7667537812fbba7c6d7b3d9283f16b8e9251cca4083ad7ed1bce6c329c32b276d9e4a68b18cebc98000466b06079101bab181c5a9c0ad223229ae24dfb8b2e17591643a729e90c6f3a72d53869c04fa555bc70f8906ecfd2e7dd5e8a285b93237b619cd3c109e6ce231bd5bcfd859d3efeb0fcaad3e6b64ffb88fcc75f2b75c9fa9356df6831daf3af651faeeb5aac0ec5d5c04b0bbd74f35062b2ba2f2e8c16018fce579523a85a009a425884279daaaebc04a8142ff43581777c772896970f68d106b969bb917f75b3227aa56e265431c47e5a56d93972dce2910b4e5606765f86783c996518795d105a94d03ab4049238da3e92b372209256624afe6bb80751c56bdd13238a1f01f5be6524fd469de10f0e7b5adc82bf075a9f214812e2a2e6310b4b4ce094e6a4decfc31c6aa521fab704250496a11871665ffcfe52c97200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e43f606d1ac7ee8bb9c34a460bbf6ca31c7cf42ae658372ea357f950659d7f4e7e5629e8db91d8a9cb257539aad8a54b9ce7e77dda9e23dd9cffd32a64d097b2d720833450a6214a2196a00ae1fe0ea451c33351e8a00c73882baa23edb6b4175f55d4f34f5085bec0de9cae52f566b8c2ea867ac39aeaf86986d6d5d621a49e05a4bcaa764603ba813671d361d302ca237944fb0548fb129b98cd29c733b3f25d6a2f4ef0c11a4067460cb7a989b63f4ad6ac6a66cbc4d1e00cbc17a804575f9c09b982e0ee4a20b3fd777808a42ff40e071a1437b980638437406655b06e8819163fe28083cb2cc92d46c38fad3b16bc843ada9f48d71f1ce5d6fa75a82dddfb6ee5181026cd5b8c0d1acee6b13a3e9a290bc247a49d77277e18ada57a66464faf9af42efa5133e37b17b7bb69796621b153a9e01f1c1d4635720531559ec05cfdbb8f80e4a24dfd50f2fe2a648f6a47718c389a0f19c138fa9204a87e46215416cbfe269a38be125950c2d6f2883cd937589e0b3ca71842dd356cd3abc54fcbc30b45f06ff6c16b7ac910f9c55def730264b373e016aa00d3f21c22bbd712ece974464e97097a00e2a59548f39b9184deedcf72e1dc9effeb74adbed64ab000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023279198b7847300f56e0921595e3013dca9902df6c380d9d75143c14543e8b9db4626e23b26c0ee556a72459579b96dc50ea447ef8eced1b64e812a6f85d0a31040291f082c75fb928de801b74888efc265aae2ab843177997a5ad7daa330ddd38bca06eb8711b350438b1a3910c4d9eff46d1541ed1f6414e36d55344bec1d2fb2eb32703837f326b310d2a6fe41d1feb65b20cab13c5a142df9d0952596f74c995cacae4ee4eb5b355aec7e9ef94c7be690c365af6095dd1acfc1c55b013f92854179799ab437d6993ce7a258240b1c541966be81d5258ed7a7e2f9bc7bbe3f71b31cbebb0901e80a7bf347dcc410e43b4cf6fd70975328e6a31d1053db18983149bdf60e601ef9a9935b26973dc524e4413c0a385ff9ac938a41e7dd41e7450861e222ef6e3f4048ca0b48c894fd858106f40885d0df9cabecfd822817bb96b9426f24743026474b009c5f4ca57046791735d9b977fb3571753ca21d236b14e68c40a57e6bf45b4cb1acf7e84470cfc51a5c5e41bf286b11b93dca0f929c85d01d0e7f0c3df4a4f2f95307e25a8ff4dec4e7e6e6901c06fe13d50fa6edea22507561afa1ddad10d3afdeb51f520ffb73a5f87da134e20a05eb92267381c2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003dfd70c76774fa1d6d9408838761ac1ae7d81de4e79636c41be6341bc97874f6b1f1938ed98c35e7783a941e23cbd025eca5c650fd0e8a9a6ea43f0b4c19adbaeadaabe826632d98c32d6810d27fe5073eac911f43a824185fe7ed60df32b55306815dcda5d3822d9ba3d5f6f1f3d5b1029cfcf3145bff450caf1479f31ce4a2a4358c968c4143d48d2282430be8bbcfc673d7b7a80cf0318b3d7a6e105293eda2a66de3e1e393f776abaae07e1c9f9667497f2214c0f404b56b630e476aac3492684b999faa64ea3cb172533429b894b4698e7bc0fd88a58973b78791f85c30b5beafb559180d624a169f233fba1fad43441f7378dcb56206c5ad0428535986477b0d59730d888a8ef0539edecb62fdc1eac118176f7874c01decc0cefc2336878aadd0b897cc7009c6c2e4616c368050f3612baa7d45996bde4558a995cf416d1b69236d33f05e3df69273f9cee2b92291de48fec6be66d2eb86c25a10966966735bad279edf60b2c63ea6f1a73208eca37b4320d9715e4cd086872e23ef5d2efe596db5c839522749be72bf3efafec79f7b164d5ff5cb4467a617e04a58064ad8831a8d87123d57703eec3b9f41407ab0e84bd79ebe08c390e3bc2d4cff6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089c8c5556999ae59ae7b305e15350582e8d632d38c70c8a985204eb4f0cdbbaa274b97da67cb33dc7a9bf11df685a95a2a0cabb807184596f294f7ac5dee780cefaa16ef0ab41c86264adf828e80f22860ce1e04bd6ad910f673cc8a83904cfe714adee5cbec4da5ed73ad0cfcad9381d3b6cf5368b07cb06443e106eeb212263ddd38e4486f60a3b73c627d5eeecdf5322b6eccb568d12d0d5e6bd2f3c3f44ce75d7a0187bc788e7e2adb3905ed34fc094c28a3c83d93204d68b6b58222e3c2029cafc1350142a2274cc3158b64551759cee00c093a5b6d3a51730b59213f86b3c4fa80ab8a3ac95c2f47ec0b1fa53f9bf076da19c1a52a206dc9ef7e7d19b87fcbb4d950015050cc0edd57351314c09b4a4e9a67a20ac05f17f2102e82930d5e51d56b2077e170ad0f2074c570c6b8275656262ea541a2dc3b3999f35563701fe03491e91b54f85be01ca5e44c99ee66d66f1f1500e2c6c061c99114409fadb4ef72d38578aa5a629350e9ee62675a464b9d207b7440e00c7fcdc6d34d8124b4009c7a2789578d204b3c890436d59d657f579c77f11df1673c4c94ccdcb2d82fe7670b024f772f7f45843608973f65ef8759d06be93a7c0b996e1621f4edd70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9b60bb6940c8de0d1647eaadc09d05a8ac4354af76d18cccefc57238bd0c6bb4fb55b359c9ea97578429face0ba673e623c3f50231eb7ee2258d57590d50977988bdbf3921e05d8ff6b8b045980efa0354ff64b0a70658058b86640e32a8eb3ab20f5299a9ec78610018a23dd65ece646b7316caa64a20ccc0882a90e4f26e62a2b9d812e585f8ec71ff8e013c639515ddedff5c09ab3d7468465338bcd5f6c7deaa17c56b73da7b571fc14f7ca67d24e46697a7ad351f5e9a3b6b161ffc685646ff4b8611fbbdc5905beec65d30dcb3b86b5c78afb0d631c4e3e0c7f10fbd69413bfb0164ae6734303e3ef83ab5ffcb1691ec8bfdce8701259c29d87db982573c95ad363ad14b98d85429182d8c644c2d7c766af0dc2602b82fe9e8643ac8bd42a25ae69fb43d259bf4347272f7201bcc4b555eebb931442debef15ae34e77fce2944980e9fe6d3d141fe47e15653983c39d6e3dc25f31e5fad76dbea56a818ba1d06625556661f8ba360afa0de8ef6267484475963975f019891ad9b72d1f21bc79d2107b106ee8e68425e0ba479522674b495a110fa4d514c930dc0a89f121eaa95c8a68c6417680fb024c3dbb0a67dbeebe2b4a1a53e1af2495b9a43166000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093dbb9d0b14f784bcf2479ace9b5439e1f77bc878679e2d3ccdd238046435167f241750dbd931f75fba20e428c336be284eb53cb22d8e71e4db6e0f20a1fd6534281845bf79ee217b1292889c455f7c90ea56dabdaddbb496236bf5551ea2cda895128e329a3358bd9d1232d8f9bedc5ea1a4ea02330329eeed0b7c608619efbe1d626ca6e5861b4f466989a7c20586458bd9a8e11754283ae4839dd93788ddf3a2db0cbf10689cec3b9e7a3a3be890ca48510b1f3e44f13e3c74c26794f1d14d35c76ccb72a56ce3f80cb39169f84c76389ddb8d5d933cbae0e4d25c9c6bb35d37e6f040765985527e2490d851040e2bc32f2b1f7e91c8e1044bd8b3d3b9366987020ffe402e2881db8484a8c73bdb32cec4624947e5e60c088524057df526d409b115949130556e0fd3c8d0b0c0a64fa5980ed3f867aba1b7b9ee58dfe95759126b7e245e87bfb49f951b130d512ef33d8e0afad7385dc9a1b08daced8eac225cf981a2558c50caca3171b084395877a3468df33b450ab54b0eb76ff56807047b834c12d1208731903cd62104d4d9427f6ef9b293c642b657639efbfab371f8c585f12254388d930ad2e1b0c83bac6d6750172c7d22e7e13ab8eea904a13d6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018004c5ebcf357b2bccc8eaee573be12f7ccbe6a09c6a99929198a11507e0bbf2cd8537305d97f795511d3241945edf6619fd17e37d75dbbad91cdf89a0506443a8534268c74ae943f0ee374095532adb4e71015a6b88ca7b94a51f7db5cba4f169a56d1bbe8e64867cf9b7e3e855819dd2e1ed510ec07221552e86582b986a77390e9800d4ce489502225f056f9853f6024c4f582e87cdb365aa9ff9833f3438e0091289be9fd71587e412f07cc0322544ca8957c8362dfceac6e1f709a9f6e7305672cda9b3a72f87e1621e0592fd977dca45775dbfb751aa5daf8626c0977d79692c5614b4fa008fa79b5d6f826465b04dd41607430040cf37a25f8e921940fef83bf8c36c125528206a147847258a3b648acd550305e6eeee3d5dd291b599382819fc9add589e056813b6b37d050a209b9974853ccf83e0efff18ea99c26fad5e06ca920a78cd14cc53d5f9757a0d65897431094ebf8993ed7b987ce3cace88a138d8262c67ffa3b370b9eddb2a7d6ba78d21dfee35e87759829e6bb56434840a82198daaad9ce1fa50be717231f1effd8f6f431894c9ce12763e4d32dccbae1ab3825c16bb5f95c9282f267895c12410881e37e99c63b66250adedad0f800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a220aece893294729a0f28228382c0b83c3297031cb7c928f03b302a2585ff06e0d66e112a2060d8d8939d87b0dd9186c8f7e187f4f96643f9d0bdfd8f533724c3286465cb5237a35d5933a08a72a38767bd951af7f20331f9bdf0a8fefdd13a35691cb0768b8363a29a6f86effd30d56bca5e5052496ea9c39025e8a37f084e5c5102803b19bfb3549525d856c9edbc80dcfc83f078984f1f7abfcc202f35fccf1472ff72be775aa3de6132dd0ee8150a93f35f1a512f727121b1e48adb70b0193b096ebe598a13c2166622346d28119349312b28a458c67c8de242ef4ed2859624cf0caef1f237e352b88cbaf402d883ab3446955024efa712cd91adf76be7b7a303dc832205423bc7f65291db26a96b9af4383499da27edfb357f5043354906cac260035040fec58f6d740bb5a5cb481b0e32ed2f7898d4b6e4f46a90744e34df9b8c4b7c020eeba09eae1c1150acde878d83f3b7557b71298860161b37fe06a720e1f589e5e8ab60c57eb7909694a703c84e125c599e43316541ac4bf5014d10736d9a765a18e29b5054034a1f61dcf99308ea7ad14739e61ed4dcf3a99b15ed3c160e57d02d896222bf60188fe85ec446bf7dc4d5ea1a927eb9c5e103200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000927e54809a1caa9b302551e216b2d736da9e058a272beca9218d38358854f8dc971c60bf39d03bcf454cbc6564fe7b8a76da0ff43632cf511cb471b4dbe3b6eaf1bb54023d6e8035a924fbabc21461644b62921fa69224bb21880f02dcc3d0ae0c5a35a5c03d61b7e9c84ec03eaf1af02b0338829427e1aa804a24fafd3da64a8ae989a335e35c463293c7cc5bd1c11e006b396bf291b58540f19d1be5fb8c4eadf7f7c3d4ad900f94415211af899939b35bbbd9e63c681b078ae8c14747b20704017de257e1be30c1da92dc3b91613e07c5396b71b73d225b3dd90a1ae6ceeb48971cd59d0cbb9d1e60dfb39e6ed22d7502bbd4ff8e4cd2211aa2a3fbebe4552a714cd15e0865608e4dbe5796a8c27559d41f189dc06e863d1e9c8b4018a999057002a7950e1aec7b8c9fbefc3a9449c1d0a26fbb952cc8d787312be88835761fc52d70fb29c9b6305aa25b944e5158600b3219bd9bff363c97c38480182fa4103d0e2057b02ef5e72f3bec2169f4a5e46fe41d7327c8b514475db21d48ed65fc41925c2ffa6a9adf39c2aa9be02e318b7d50e780d89b5b9998f1ad2074e94e135af359c5d581516fe34e503752e3f42acdc3aae6a829429935dc9a759cf2d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017595e869470168185b7e0f48c546380cd893b5c0ad862020e9e7c64a0c1ce67d5482e318cd12ec5665fc07f49d5104e4df2d7d86e0b1724258f1363aa5bb89fe6911ec8ac2c7c4a0f355538035b5603a33d053191de1e29a3ba634dc27de3d8342a904f7c2cd15a081f6cbe1be8a404cf9f872c6cb7788172e5dc33310465793e1a158d052656290c657ba54d4ffe53a034271076649df8974f37e4b0ac20dbc56a6c1735cb48ee60478bdfe76d89e285eacdca2d430177790372d10980e778f995af9d1572837633343480e24c9cca6055d76a6a2e29c2e1cbad6c2c2d05b4a9f8c726a10d973ec5475139c91b51f58a49aa621dc7ad488776a78ef10a5cbf66ff4c11ced11b383e5ba3ee4d929585d22c60dbb55f62034e2da97f6440ef22d49f7aa022e939312ebb76a99983e047e6b87b33f4e91146b49bf92750e948e3d06e4818eddf88d48c38f8905eac4347cd471c107cc2b2b3a82755be090516f8cc22b9e830a5dc56dba5d409b3d23580cdaa589184a5aad10cd8e23056dde269878eb788cab7250681be8de53d0b0f73bfb9b5010aef331de123277c2880a2cec5584ddc1fc238645fdcf33e1b843db67fdc884618a9974ca12900a8443664570000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098fd2333c8b74c45cd31b190f64965de5c9b07fc8250108a16588f36301de45e401a43502181607b688912205a9f5222a5aa1ac567598d870148d9a4ea720ba4f6a8d88a96d6afbe8d27c66b1023e1314a9138b18c44adf46ef0af0e7e458f32c47cedc1458ec9b487d9a1afa5bf560c1009aa81cd1c5fd150019d67c6d5495b64b6cc270a1531822d505bfabe6ef71a1f587ac32f94733144dcd8750146bdcf63574e869b2bb7c9cf4a98516880d362350101664660394022809c7b579ad78da94e868897d59bf124a51d01fa74731a5010a73bb2ca9fd3df52bc10d6b7378e3cff86af04065946ba12c62155e49d33e2f0a00fb38ff95cd7533d11b0c7c97b429ee323fa1fd19e2a945436d7f7e7b78f6e258119e1d7ca95a837722fc59388e5852f4e37b9034be9dee87ebce5baa98868b5212ab46d581fca2eb71f852425f19ce3c7441aa91ec62e51e415f078b3ee3f183149629c86e28b6c6897ebfe3a671f48bfdd1910e3cc5c6adf9d1355405e72881a6de264fdf9dbefe059b04a5d521c86e88f62eaaec8d919f9d6a74e32bb8816ac51d01af3c2379da1f6dea08a1ae78fb625b66a0e94e6620e30473b2e53b6cceb026fdd8f0a1b82e03e67eb20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000922b41c55e015063063e808016019a8896c348b8b28594bf02291342294e95eed18c210dd3106b1cc152cb957936497d50a9f04728468909ba58970adb710e8d09c937787d85bc46deab7a478770c7a5332925918a5fb24c7c7aa71591ee283a794af98a0f6bd519756b39573aba4ef996ae4c1fc67f59ee797ccae4843567038b9f1dce4321f98b4794d1d82ebcb2c6cc998220ef6d60e490d60e018c3e3b4c8587c1c0a39823d1d26218faecf8e61b430fd41bc6e2bb890ded05c458ffc51a916602b41f4500dd5e9f8f923ea65491f8b7685baeccc25fa090df35e8e6a1758862fc689944a7f6ab3fc7c7f98dd95036dd58c9b65db9a35197eae79d0ceaa32411ca668bce0211897063398c358915eaed252cb4ebfcead132f2d3ebc737509665e73e6a89398474d772be732988bffc4501dd40bdea9524bc1a815da2cdc02672e61a47ca5d39918c0e18719a20b4132f8ff94efc8e91b67d947b656dcfc31a7f0daa9846e4698d85fd7c15d2cb7077cc0804b2cbcca916936cc847cdea48fe247680dc11a3ff5c7c445d1b16fb6686cd789838197a27349275ad9a86ca330129b22e8b5e77cdf9c830e338c174156248762378bbc0b02951bb0699055b3300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e1085ddf34776f9b7d64698cf001dcc0355dbadbf44ac87d58b9225cdb78beea61a3a3c71464e2a42cbeea0e2faf02eb4167211bc93e96fc8e7a797015e273e83b73a567afa6da197b0736d6698abe297867e87e2527c1aeb6125bd81af6ef8f9fd9e85bda7a6c23411c84c35e418688e1d3d612f036013c17908b3500b4bd58f942e772114698d691d8372181138c84a7828f7190c313351833cdc2104bf3a652bb251a83199768401c7d162f9c3f89f3ff0bfefd313213816333d35917ccb6934b37e6dfbdbfaa4a9cfa59d38cbbea4a1a3d4f7e41adba327db181c5a6385a0dfff6d899b9de85614e3f23d9e9eed43ad7c7aae4b31f954b6a92ffb06ce36c633e81f56524bb70921ab783bde046cfbb042aa2654104a41d3281816c1e1cd248dbefdb3df9703590373a186aea16d0100a02ab7b9a3af33bb98cc9c53b69ce1107a6812a867cb6d84147bb62b38dd476f388fe67a4c46ed832d37c9812a9591abd3261e0c6161502589ee1e34815f0467b9be963923470ef3955ee2a3a2ef778ff26dedfb00b5d50ca3fcc4c398307346b5aaac9e46a28d02e18a3fbfcd47e7e93c3d2583f930de07ec4d4ea0967ba0f3ae657ae88277b1028ace51d3be7e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f677575e9f45444c548ec804dcb4852662bc9e770e2823de1a8b267d84303c4c56c4fad39799abe8fa8b4a44daa9b145baf64276f06ac183a52676cf211a2248ebf5bd89cea43f46a8a5b3a25a06bf3e72f35c6c359205c532fc71eeefaf5d358a424b511d16874fb819d5c094d8df6328de34c6c9b5458683f1407ee95cf5434a1918cc8c5d264ea1bc8c445a0fa7d836c55a00d5c27cfe8b41e70d5037e75ac2509087959a6cd78b01099768944bdf7c03a69bb5c96618cf0e0a69a41856a88ed4e28f03b4a3303b169ae992e0f14c2adf7a4ce0e82beec2b5195f0cbe8bc146d35624bf74d6f31691184da5a1800b9193425a9b98b006ddd7f5bb7fb3792cca2342c84546b364e0ae064d89ce9ae167f45c70f88c1a6e7b2eb6a44c2490063049371a22ab8cf4b8fa1cf495c5e7910314efd3db73b21a6ce631063a71155b3f0007dcf7a1a06a41c5b9a99ff46fb16e1018aab0156136fe821d1fc5a74533f2f03c10ce2b8bfb388b3e4f66c1cc32c964a0b3de13cb742dbe203d3645c51a2f53a412d982de37ed2a0d34e08bc5486febbb0c963bbb2f44be8511fcd82aad0e81194de346a2b3ec809a8bdad3a22ac0d9b952963e556a2ea7aa6a4328918000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090315b641447e39fc6d07bde887b59c4a0239011d43cba7f398f7faebc7419f87c310830c862bf4a47afe6cd0ee21b02ee4bf724ca5a007b8b2e17b3b63548a9d671f41bcceeb3209c3b681c8b5d35993c3c2012ab897c31633758650edc37c1642a5b9f3da1e3c4891a84164e57b7c4c6360ffcdf9552d2ce80b813996ca7c948b80f04e013f74bbf5c737958b298123d88c5da09faae65a0d5a8c2277d0dd24f1531743fa3356ae73bfe9dfe986fb6477b16282541cb4c7dc46fc2fd9693e59d67a305ec75fd23fa1ef0af9fbb41086ba5107a1a2fc279adb96c4461829a71a495cbdb42190925b98a0f2012a0f4428a03e292ed28f3ca07a99ca200e3564a14c7c9e30b5545dd9af922b06a23d74590d7af973572a4827eac13e0eeb4cb8c8622cdbfb1660a5288761f72ffa179b65bfcf86feaa973cbb0292124d5c8708a2ae23f283bbd26a0ee689940863ea929d883c2b80a1fb059fb03a95175c704e0002948b186598c2a3886d48f89ac07d1e247d3892a2a96c1883d87769b6ed3a6ad986d5a15e9ab03f5a65061d571892a2abb37e170e75e5d47105a89569b331ea5917c986b4512515cfcfd323033ddf834d39ef6cb240b1fb26385e2bcb9ec8c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ebdcbdae5ff488deaa94434fb1f23743cf60c461a3bd9a2f5cb728d7a0faa02feb3f66089ee1c494d7595499f76c2e72613d9601a220ea3f0e519db5cab52e28980df3c1f102b29d7c67dfc7015ae49d8d49d3df8090a59b549cb0804c5ab5e9550d1a017d2428a351ced29b62daa2aca61ca7ebec40248c23b5e31883f009918edf2f4a944400c974bd63f6831519884f528fd3926a353ade8a75f9d70fe3cff3ddba428db5be5a4bce07448abeee68c3909255209c128113cc129089886e66c28afcf80cb7e1263e408497c5e63347d1ad06adf024596572c58c91c0fa43dc86b652b2e10db1dcc7d8088a55cad06fe1dcc4d6ef37ea8a20a4737818840c1e6e962d8deed26e82bedfabc5eb1c8965ed7f9e471b143a86570c71b0be0c2c514d3b01b673f22d2b20ca147dd36c925322a8ca66319aec931211f81b42dcd22ee0599ae55304288efcacfda8bf13259e2e5229b83e5082b82c81a5c5102edea2708fbd8dac87129ce2721d687dfe02c9cec3dc140c415d779f450e0c858f740fe9ef4102a4836f22ed1081e6c226c629696e40102e85fbb8cb0cb2a19ca3d9d36cb1350db3108f17a905fc5b8354ffdb9c2a3c9a4fa40246d422774b81fb711000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010db7778cc222f141fb2e2b09494aeb525b8cd22321fd4e567ecb2f14890a233b4fc8fffb0078d304402479be3aaa459b79d885fb978263988c004880e5d5da3d5a8563519fa9c15ea64d76c676f102d3bf175dafddb3a10b794ac39a40ebeb6a744bdda4d82b698072db69be721d55100ea4307488280e78f0f988c1b4e321d499fa73737a51ef5699b34c7158a3b0ee16ebbc946ed7d78c30f47d23c793c09061888127929394ab9f6d2f7f2cd376910c09f32ae00f76127fcf2161a370f1c1eab5be3a6446507ed5554d011fb63e5ede27c482a55068a1d5d8f7977b6edc4614418e097389f2ec1609d2bfbb9de3ba7727b7e5032f90353027fe1eae67fa820d142f94ba27845e95cb889e797942519040670864e1c3add5d556287a96a7fe0c611858ef2df71320c96bbd30568e4e7db30e5e944eb22245016f13738d41751d1448604d79d89c5d6d3eaceeed7dc1612c1ad7c3f79e21db26b9c5d93ab254b8b978d54e99a5071d8f7e8a0323f9f81430f492d30dc2f1969719da26e2af057adeb7ac805d3d87b9ca1f997a041d6e0d27e29e4246506ca9682645f13812215d04732246e23935d49836cbefbd5d757ff49f4a4b2b2a727ae2be966f063970000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b020162b51d0ca09fd6ea16e07b5ebb6d770cd5cab4903fa88c65fa9bd6d889b198e4e1db9ef91ff9ecb55843efb6197df02e76a3ca4814ee417eef5c207aeb21e423d7c293f92dc6084b4fdc8d279e10eeca864e27a404d4ac4e2adcbb30f0e313e5c593cea7894d32aac151c15009729b6b121b20f7f592de405e43b59caa09fc45d0c227e38b433c38592e2242561c76bfd2c4f7e4da40a65046d3c31edaff77f46c1f72633d49c166aa37521c01c33ad1f4101b5187f23d4518ad1569d08d3be4a118b089c0964c7bf38cae641b2ed41b30e2e0139716c5402e3a7d7610f285e534748cbc8a5123df853ddb8efdf7110becc089338e0a1aded0c34e126c2b04cf1f471bd0c09fecaf432e138af5f42a5d378d1d771f109c3ab83640af1971b8d76db53016d7fa96ed3d0e2fb95baea68defc4a486cca2a73b38f9c362e5fea767608e8d0facbee78541a6007661b47330922db07cd973de1f74faed2c17fb2619245268727f3bff26807a4050896261fef45ef44829dab4648f346aeaa5fac6c5cbd0ca64805f137aedd6c761e431ea1565cc81b34b1df029e7a7eca145ff768802cffcdc43b33ed0bc25b69ff87aff4964cd8fac0433b4fcdcc64ed8666000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012ba3ccc6187f758077a350016f69b06f65308106995cac348df3c74768805d736d87ff9d16cff9282937140a2cb072480ef3878dc9f6bdf1f8105d92de65869f5603e7b29055d357d3a7be9f5e89ea18fa7f8d5234bd2be9b838a5d39794d813f9c5d59983b12a3903b186ef80a37677503839678b6532e4b2d2ed3798841a2562a2871082dbebd549fc5d828b3f65a10fe33e53b8ad77ee4c52832de6c17342c36b80929c6173814ae85677c4a06514ca83b4ce2b9d865313364f5076b0e121d9e0c53a54e0424fc911ec163c4de5f19c830d1c66a190002990aa35c2f593d7dffe9316574cf42e90381a4dee4049a10273d79e070efb00f656ab97e244abe239aa8112590c041ebae6be764de081e00d333e4c2f781353bc9445095797357bdc6064d89a95a72907826f0f5c2b9ce759f2304c45a92a9e4aa651cb0a50bcba00a10bc02932aa697facd9f2f0f82d4c27b1cab7eec5b7ed84959718e80a8dd3fdcc3e3742c72c4a1d3fec8b7a0011d75499e994296e4d95a775bc4dcc7635c53b766da43c52a854a0021388cd95e755759e4bd6ab8834814c4d3a774e12751e6b7b385292955db7488935e8b94b081957afca93be75dc4c5c8729d28780e24000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085b168ba4428a1658a90dd3bad977baa472134982a3f0ba2c7b710b36ed5d218e94e263fcaac26bab3edc8b060dd0d26951dc29e50106717a1419db4b7312f5a71bcd9c4e47b92332cff3962bce4b6758d5baf9783519bcbc3a29477b62f01170346980c3879844f84d923feb27288f1f593f87bfb964ae3c1b4c28810686ee5fb2b3e2cc2fb779eb0359b526c23c7e5442c4cfa00b509683143e8888feae8b8384106120d3ffaa61c661cce8685ec940abaf96ed2ab5ec3006293e099c6e2a0f55b27e606f8ae26e217f5d20796c822b4d0bb0f506b4501b4c0bb1b8f90fa0e4c38ecc7d8a03ac715742626c248310903f066a5fe754a6944571310e0f5efe73e871e3a556266d3e50b5ec7221df9b6dc6db7490425e2128b38f150e60e4678179841bc71c0cdf3245580a03ed213ef0e09b6ebd53f86ee0284e6a97c6a23bd397ea256be1ecae19f5878bd0abc4f4047761ff9c760a793a91e5150cf49f5d636ffb3459a74ee5bccb4b3ab8c6c5ac3ff01339011d760cf90a2abb838a8f6086932559400e2d9e34ee9ddbc9f699def86cf62d960f5360a538469cf8cfe89c3d1f4326df91f5b1e70a6983742d59cf50151812a421bae949d96fd3cd506a89c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad5e9002ca358e67e2f573df4d8ea04225ee90e529cfad1733de1b768b21acd63c07ddd159518fb7f0ecfdbfd713833e754310b070aaca7e7de083c61bd6cfc6dfb5a016e6592dc1b861ed8ead93d9ac18d4c24a1e773378723b465355949e23403b7cac06234c08670d25fbf05de6f0eb40e482bbc2d4eb71e80a7b4d6e92c0dbdef9f092b14bc731885ee632c39612f1bd86c6c674b9010bbed493b77503a17fcf814efa7808f8bb39380449999bb4c80fc92c892f1d15a2721c1b9ed661307413e392475e10fc7feeceac2dfacfcc1cd2c0a5469e97f0544e27bcce1767fba9bdf0084263ef8407550fcc49045df41ae4ee51819c5d0d9f8291fe1a1dc33e219a52f949b25d33807804247919a2398d3ac0b943283abed490ef562b0e149a5ff9e46bf07f81b90ed90d61344a58e38f750b3ca411cf7ff2e26f20a1b5a1ea0eeaf42c00124e8631075594b9a2220a11c999d67c6644ab604ae3329f6d187cfc27d2802b097a3f57abe9dc6eb8d920046e1724e554d85af3ffec01537ea65e84b332beead57ed83cb5805a923f1af5c94de5c9b1ca81134e9dac769705f7fafb954d05a738f5c66eb0814ef0c8f4ab62cf6ee9fe060045c392c3aeac45cdbf0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000927b35aa4bf44966864c08766c68f6a0a2a4fe6c6297b978c8799d57014370f78851dd6ce00678dca29d7a5989ddf79d3cda05006103922f47c83d9d6d039ed938584379dc0163c6ca0558b33d2e29461bb6430ce56a6d814f92e8299411f67b1cb73e5b7248693a77997da387ffada471689707508a7e24414d7b022693e83841637547b2145dba03bf887157e02541e26660bc5d338dd403a830e951330311fcc0a058e0579ebb1bec7ef5020ec3a24f7ab24caad28a85ea3a00828588ddf1b4168d8971fd9a07c74eb4f7b30b0b9ab1d2e8b2c77e60c41ba178447d274c4369f708d8a0a20bb37b92b0a075d102d59c8c4afd6f79a791d378e223eb44d61fea66863c66d6ec814fa3208ecd690ec1c43571f9c2dff8aaf98fefd9d1dc545d9d95c56fd7b7961d4de0ce7de35123e51ce5b33844bc3156ae731663626e56672196d2b9834b60bc2e4965bef5374a03f87638bb6697de054b04fc8d7c80f98e3584464098ccb4fbe143892134db253cf8b22bd656347e70667f115007fb1bd4b01abe1edd7d1bb83dbda62d108e76dbfde359f1883df0795112cd64c391678a531583a19323605d2395700f717627645d9532da489d395d6bcd62b6f8d002ed0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15d198b6a89dd27741a36d53faeda9dd3286551a00b804f04175dbfc17d6841d79b18d35bc85eacc49f38ee4859164fe3cf5f8cdcfbd01371e5e9aabe611b7b0c39bde5bb7147485069b82ad072f005976a8a23cf11b0818f4b6297dd194e1da0a65c1be3876e7951ef4f7320483ea8f5d064843ced14c24893732adbfc94a76285b109b084e1e3069fe8e804f96535ec8a070b953677d87c6108b9badac36001d4ca66493c26d59b73dcb14ea43a84866f93aa0e150c478f839f505e0baa15e944aeb498353d3e64f39c58c210a1286543f9b9296a57cb23b1331888c22379478bf3512d26692a790aeba7f32f55e35e32bc6f7ae2631533448ce4374ccefc34bb2bfd83f3642ae5db08d93d0ee3c1ec9e2b0a4de57fc747099f7829786b1c03777b7938d41eb15f1cd6eb0cca8157bf24f275ef51ff64ac0dbe9b43f1e45ec805c1ea0c526b2c401940e3746f1e21717227f97e88bcfdab79de72ea0e0d3546abfe0f7014e703b1ae446764265f189b5876ba36bfd3ee24f8caf125e5f67596c4b11de1c69aaba53e31a12084b273ba50e6c433b6bdb65460c62036317ba581d02d976e9379d5c9dad41554f707525ef2ea4816ac856afdaae8c162495af8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090765cd466cce0e3dbeb9f54a4a6d7d0df8662db575a3116a83dca5ed377cc9a846ddaa191fea7461872d1d27df6512de454cb0a7b0e9f84284f380a6a050754c257663bd8ce913725701bc6070c15fb049867388c7d38b1bf4fcc062858ce54e933addcc4c1fac2015aa6cab370fa8c8367c38575c953db16a79b74c6f3ba3bbfbc012e363153f6e82e3ec86f9c44d2dd3a467ef2b40e2a0c31c7b1e151086b081fd15732073af259564945b3883cdd720427ef3d8330b6e80cc85c9cf4107cb879602e6cd3073d883cf56217c7389b7d4d982ac3bdc5c558884b87d245aca48c1fbd3325992cfcc45af9327326ac7647fe37e2e7c52604df4fc86038de40ee4c372800642c29d65fd5f86a3064cbf1970cbe20a31724c5bb0411317a13b5f8c70a5ec1a799ae3824cc57ea00494ce128f75ce668158995dc81915f32143d1771598c1215e13f3bf08871facfa90b66f97b8985f1b9fa5bcb71cf946f357ce85ce6482a16604d706edb3ef42adb7ffd3b2f2ccc3bd4687ea772de0492ff171783e6ecce5e5ff86051502e49c8ffba206871ae0f0b8fa0eafa6dfc615f466fd364dab92395fc1cf396c0328eaae02dd9f577d47a7da0a359cf2982d68af2291e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac186f15eb827df835bd7f3f847d26e4312a6d86f329496f78369c9b4a9af4e6351972d2b62abf5ad0e512be08bb25b3496a8e6ce89dd941033f48c1067d74f59ff4b8950aa485382231144e1dd5d0d802631198b777e2c0600aa83bf645ff5def606ae5a724a1d09af45b359b6fb7ef48d93ccfce2446d31c92f0fe57f944b06e779cf9613bef6f6eb2634f26bc558c837010d4aa97d4f84e83e73c4e0d1d2ffdc7e1704404a3cef9851a87c65d2fa0203379f94e41034eabfed3b34609d63f971dac790af2939e4017bbf7d2c3d8dc0e558a44d0f5805b7e62392d0e935bfaf4cbfe9e9eaac1dcb5ed5e276fb556c5de0748944cc6373562db2997ca6139e2138eac6f04c540279daca2a0fa0824c2a458ea6926e8bbe5fee66cac574659d628b0e62f8e44000b452276d3ef2ad9b38403f93f1b25121bc35ac556f4b035bf70a6e917684ce7acca4502ec2dc221b888a4c54de1eb6f9bc0bfa8af057589006516b533ce897917491e6afa3433d9e58f5e5451c66fa96935b8ebb708996e1e3c73b1a67bcafc4a5b14b378339e54e5232e2f4af22348425fe03efad4e6fc507add5ea00f8ff0bdd8cbea1c547cce7209ed2ef37bfc6859698604c88e6e401e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029963c8d0b8eb365dc3e0ca89e5f8fb6406639245465e121d3919febb7e8e13a58bcae7a41c89da740939f2cf04b33ed2d38b190ddb97ed6f25803aa6ea485f30168d3ef645763f0347e65fd956bd855f4851d6dec1a6c9a985b9a7095411518e818b790705d763591200c549864334e4ca6d2b2d1895ad023be1ed5de040b07de741086f3fe4d6e9d3cee507db5aafcd792ad43282813602662634dac0bc21b8765f7fc932120c505b4100a2c8d5117c41ec8f98f74541838e92d83fa771141c0338a6172b3e44a82930aa89e00bffde62497e67b8361d1fac2059afacf8f18affdcc210078b01a7f4bd4cf0604122ce6425a1fcd462cb0615c8c713f4af353fb8295fa5fd8b008f2f828884b0efc435ee54a6eb65442a363b407ee1ef288cd1068f5ed4adfac573bebbae11be9efeb8a61491bdafd4648007e1b53882b830614ce37448b8b5ff7182c054b1dbd37e53e51681aba46caa3655208a5ab8942918420fec4261efff97cf84b3a1bf60ac0d278f6318c4afeacb79504baa5cd81edf7a3c966ca410b36b82e09087247caad848af7ba95312f6689b7a707f63921c41941e7f65bd2fb4e13db7403ee7a6aec5b4ceb958566dd1bf612bf906138f7700000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000acce70059e4d63b93177dd7b4f8907606cadf59e480f6157eaf72f88566e220248e05cbbdc5796f3d52c98ee0aeebf13930fcc3f3f48e6358ec9f09e6f8f0c5a8c5c5a37652c4334de54b29ddd4a6ed697becfcb7510b687f2809fb738228af7611ee1a45a91f0417554636383edf0938ba1b8b72eae25ed670341040e18826e953eae94920b6ed969038a2d0180b77b411298f281e5ee906622b28153e3579aece8fd2002d8c1fd6e9ef869d61ec65ea796482722469fd05b9c99c6d4e2d659ebe50770d127b10c43765e590c054530c48e41266b9ef8b1402ad39e335b992cd9b62d7b77913eb0e5a6eec535fa5ab14d348273b0ea5441787aa589dd81e5be2e530c38e931f7a92e450eb04fddf25cf6e08dd2928bd505800df461b5519cd450f0e8579b3deb0cf0dc1f429e6048bc6d409f5a7a4b39284913e2025aa6d0d002c19e9dc2fe812bd7aed1258cf0b576bda6cb984d7c2a928ada5e1ffd1a205ab405b8ce56321b5188fafe7ac12f408a83f598c8fceecacb91398a84af54767b6ad263b1b6a0377fb8820b1bd128956defac1665e275a420573d3692a3343b03ddad12eb467b03ecd756cc62383a2c3cac06a6d7617fe9c2ae432b1e30af5d3f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ba0cac83c9aa36d17cc58c87e830208c9f729cfa70bbbd207e2abe8c8e26c8f932ed0f0dc45f9e3d87a15262af145f6946a51073749e05304777333eb3cfd4dadb6bf0b7292a7028fdcf363c3099a43f0f067693b0c6e2049e5cb960455fcf0298ac9327ed14aefa86b8823dc66a979b3fd61d3d2c9c016ed003cce230b1ce7e20dbf7000e046d5b9ca26cd25b02705dc96fd4798aa1d6a91ef74d1f38f91ad02d595ba257f77539d78b3b31078f60988747067e66ec57da305248c3b239a19003f3b4155a4d98f91441a18fcc7018fd2d954752c34f135cbd0aaab5714ca905d4396880fc24acc15ce6edbe9f16ebd77e3c990a931a7855dc4dfbbfaf7177010724f0e27c35366cdda9b8d4f2aca7d3f0ee97c918c9b14dee566831928eb04d107a43f43aeb411bd2010234561a356ab7b9987c6317314d2d2120407947fb0b6955462a078896151f9a26dd0652154e99de9db7acb3fa7cfe74e107f1126b867d1f7fc2d2978caa7febc585e5ceb0998af0cfb967ecd506f284cc37b572ef99abc3bf3db4a046d8115b152b323485a91b38cdc80d5366cf59fbc2dd3829ea4efae67d316d3a2353115c8cc35f2eacb5be1e7c7a3c7c8ceccdc135734b0462100000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48400a15fb9de7ef801eef7525f6d0856f55956d15d5680698a7a6c1442217e21fda14225cab2b5f9326d308862baee0db5af34a9ec51dfc9f325c7fbc04922f3c80196e5e2dbe9f09e8b6c99c7d3aef63e41711bd02892724ac99ece8155db44bef145a2a5eb8201e7758132f7e2fd1de3adfdb1ffdc9b8fc1156a1ee603178002411c5197cde87e61f61362acd8e7d41c3f213e70704cec286bb26bf5c02fcdcbf0cbb4a4466d43b36945d5465eb67957cb93cd0aebe9ed18ff382e7f4206decb30d3451e177c652180b4c23a0b0894b9871339b7852e1c2d258debe8d655f997c2c8da4c6abdec9ed6c4a0ff12515880d3b6124db26fadd4889411f829695c04a0d464117dccf48486f189fa81360a2d11f2d6e779c58890c07ac9f60ec56aecd2ac055de262579a3d0f96f79d64cfcbd169d25a0349f2651343aaaa792878ef108e0aa9c9bd6480e132399bc73bba81c3c4531cf9ad16228af8d6104422871e70e67292dfa51ed3912e672e4f17104b1fed13973288915afe4ce5ec5b7dae4d6211a7ba4a05ecfe8a2ee5015d1404d82bf57e838182a727b81942c5b7a16f08f205c8cf01b679cf1d5383923a6cea3df200c97bcf465f11be411532f0570acff102af904457db7308eea8bcf50286672fb72f5a2555b921f3c307f73183232632125805b1aca689362353dc3de3a2a204e13f02896221e3c0b9d2d5baf8f6a2503702726be1875a385f79b214f28f65ef4e19b8b2124dd0281c7d68bdd398e2c0f48124472c3c5a8cb6dfd1969a66db5d31910f2d5109e63ab60512d26871b3e1d64b7151f44ed80643c2555e6ce8e536c1e98476cc5a2eef8f6b2263ac4d01c1b9dee9ae1486ed398ce5e82d8a6390518a04994a67485832d71bde5009dcef32a40a1d8efff3ed660e22e77d5e7175bba1e9d939e0f8d2d1caf1a0715f0df3c18da0ee776935d6bc220f173d3d5d20dff91194d5329101a8f08a129d97850fd015ee1e6e9c82f39d322e6b5e30622b87c57010ff4fd19a6b08128f0c58eb81c1f4d37c8f84c1d49b0301ef293c9411b560f04762d6df4e8a02d3de22475c3bc0c4720daf2400f9942cb0b2fae1bcae99572df9ac0a73bebb7af7d0d44e3b88e2b07fc36300c252144075498458a5e0afdbb1d655abe513d91496882ada135580d00a6ca1d68e6fc6e4dba20b10d05722afee5fbab8d3daa1a8e7b82113d41b3142428539059d56b9798991793b2a4f2ea499cc56afbfab800cf4274bcb40fa22708254ef9098d4e97b5c70a293cd8d0e2184f85f4a4de7a3bc28bc0b3e5507a2fad0c9216f253cd154439c3262ac760681a5d31cbb3878380855c102ece8ae1103a00c23a625a441a4b7580bcfea46de27c6b2a1298e1bd234b994922770f441861baf6a2cdcc69f66da820a90422251b6f270c91771fc7f5afd3211af50508113a3446206a1eeda47b20e3cbfbb359d9754478bbf4ec3db0ea22433b544d1c1695ff8fceeb7e5087fb8579d33523aea9ae428e7f2fb5d442e2335c61ef88292c1042191fd3336deb21f793aa5131134f0575948a3cf3ab8c4a71e329b15fc82c19fc3255e78b015258e85d6228a0daf606f2a33ca8591e8761f63b97778e41073857ab75347f4044f9d2e9bdc713a8085579a9bd3d1e640dc1e3aa0c41a5a908d5f4f7c4cc89b188c9651b5288cd82d642c515051a46f587e656b7887ced86073435c83820cfc65a77375c66f93f0c3c1ecadf9f265592bf3632d1a5de6da1213746b107cc19e75b59b6d46eabb466470f0d03c677fe9a05e2dea6bde534a023e6776473411b53b5a56b407cfa4672213ea0e65166bf095297bac1250cce0b1cadddda7fb7eb6d1927f3ac8eeaa8410f3fe3c6d4415d8f35825fb9f4ea791a042496a671915ecd1eb020ba7f928931107d6322dae52247462e0413aadcf0841a25db74561f14a563ea251718a41aefbc0227f30424c49ca48ce6bb216d16a0162abe3d5531722722c580193e6ee3283947841fa8d539d09a4cc1dc32d88f3f13958982d0176fb98a416b8e5b785c90afb37eb7f972945de6af018fb5ba93c30e9966b72814329353dd2009a896231278d487404a9bbcd8d83dfbfda0797e9c07eb07c1fea36b6dee117ae4f6f646805f088d7212548a905ca3079f6df0a45c1d182abb63c496c10842cbf645f08436ade691741512fbb2377de5a61727d6ba1864fe6e8bb54f9a74f04c9c9257840af55061e6d765d742e8fad2b18eb7c87a13b9d6318567d0c23917f3cff1876b8d61ce2d5f90b47fca379a6f5cb3ab61282b58042e010352a70d4cfefb7d9bcf11aca03779594db35bed723503ba6938c109c151b5b1bd4f6e3570034a8b5a9c9fa1d979324b8185e4bd43a7af92deca302b0d45747555e72e548f72f85e718e00a82f4eac38269ec5bf3feef4cd4ec39614001c6babf3494612efc6492db97ef0e42d39191f7de39d2e178347db2f1f0f2952d209b6aea142f52aefcd258c341cf61302a86c743114a40e88a29af5960f192d5cb834f10a6b208c0db69e7a1e6770a3a7ea099a3e2673fab1e5dc1a349229e4fcdaaa5d5e414a41f880d4a5068f56cc04a7e682be4a06115b00d4b35d582d2461cff6b6661da24f21a5d013e950bb7f56f040c1ef93e42833f5aec14dbd02b6b8511ba8c1f5d6433157a4150dc10108676b71dffd7081dcc302ee87820e174ae6fd1a9f4c5fb228c7fe65c9d78920fe741796b358a3449aee793810da0a0a520f03ed58d67ae27812b467abed90d2f2ccaaf1e3d1c7d307044db5628fed05566e5be7d4359800ddf6a125339514cc26d80ab207b81c323b042df53ec8771b37473d45d896a544bbb0e6262e40ccd2175dbcc6c9dfae40dc972936403185400eaea15f479801bc4903df8004752c3d6fae33a400279df0f8e7eaaae4ae7b3005cc72312ea9f773269c7996219e840a16eff8938e2f59528cb21e2a8bd018fe14d014df8b2b0cf1c431be3e76d468b52e0e1cc8be083ffa18e3fdc3f6c440ba033ef09e21a1e0b8ed23a786869814e487ba7d61d9f225218c78d9d0e6e136ba06ef9c5e08276a30ddf72e02e512ee74c69923e13efb5c776eead57d6f3b62371ee1eb0a153ab3ab8a91b6cb404b5b4d412ad1422d2f4ca658352d13eb20198b252c5657e486055481cc0b168e55940866596e8185e57ad8aaee8ed2aa300ccb1b295e05a771bf5d5a008890d7609dc94fa5babc53b611227c39b69abcfad47c0536802609b3a44bbbee82f14a911eccaa8aaf11e58ac77443681994d06a5fa11af1850e26f4714c3fb12f530fc7275f0e33bf1490b5bce2d9c3a989ecb376710e84edcebd46d167c850c3bdc0c461adcd2556c2340a78c2f3646cd4a8fa66d01f21123612475cac7af8728e6a01db0cea7bca0227e8e0690fd9a900a68f00dc1e28ba58054421bddd4843a9b3a600801a98d8e23d054211bd334b1ef5e11a852cdcc34a17bb7e04edb7fb4c696dda7d218d56ab7a5e2de55f0ffcf38046e40c039da1c6cd074ec0baef30683cfdd4cab61847f50c61c604e17b4009ec17afb31e2e003c829afa0311f93d55378f03b627b6877b362c5b9385b9bbd0530f1e50139ee1ffb46741aed2d422419740708bab9a353b74f250f0700a4e2ccee0a71c2be939b2aef32486305c5bda88b94b6476eb955a793fe53096a41647faffb1251b91c07e994f2b5e96e4db54b566e240f281ec72dbfaaaf1c9a5aa35f6cce79c0ae88e9f8007daa3f470145b7c2daa9aa14a1304f8b1678229beb56857403e2921dc372a59d21353220d592fbb95e6732425dafd0a84ba4b0046e54087a487ed0b077cdeadb530bb9eb92e6e89b0d701c1fdb4a33027f5d513c5ceb8df0d79f40617c19cfb22393003fba9907a76de3d43eb94d32c4a2f5a975289dd9d0c9c70276fc38df070ddc851608bed499e3565889ec43e9443fa2332aa1081f793388d2e36ae85efe4374a9048aa33f6e448c2eb2de438c59bfdc4b52f675e7950a4930b8f0495efc6d2b14783b6c1e6d6d3b5b3c009d32a742f97001bf64d6caf4a14026b9beb11c5f5fadc241e93d0d7208c95533d285d174fddc28ca5d6f34597d516914b15b011561965afe290a21893ac791e58c3803b87926c095899ecf19f49040267a0ac8c8362c08abade604296d4bb1a533f7f79b4597569bdd94b146fe81e6d0e5ddafbbfe3a021a984a2311e9767c1d9648e86f0f91c6fe6e7724ae5c315909cc2921b358671900ea2ce0db207fbc9a4c6d4f583c410250632c2f359c228e0af9bd2efe21c3121773eb4d32b8870b391d3a0a820fd6f92fcabc3d341d610f6411f8a33a0f806ea52ab05c76517effa015223e030709ef98ba2da1ff8ea1597d618aa313bb9c7286ae7c88e23afe20255a40352605f3ae2761e9c9a173301db6e668c6d96054ab78d1d5ae42d94861f9a28e4760b5c5dbe7166c7fae47e1beb2dac46e67c3be883ad3bfb5c42436cc15782ce3582b00a5c43c0a2f03eef2f7e5749529b7ca27247cb4ea61b79a9ac89c6cfeb44bfe1d0cc233e507a852012746521ad784a91dd90271a612340ac8e9507eaf668281524e3c0d8e212057e15b623115ceea0238ccc54cb24439d0db9870568367d451b6041aa6a28205b4f2008a71eba5703b166e73e80b7fb926b40fa7b16b97a6ac09f1185d13ff2bda002d9b295e58ce431196819dffc4f69ed20bc1d494ce04ee9c0e37ea30166a4a813116b7c418d82d7f1ead37f687fd60ad177f13ea0c53aba6f145ebfbd68c5d7271979da2ea8f4e57532e28f5179a3d25d556f6d29d9a58572ed1cd5516fee6d1e734c36e9270f799e93ca09b28753cf358cdd9e09f1aa1194eb95e6107206812cd71de63de0c0688ac3e495af7ac5ff06c6974436d45cc4c3b4f81d6f3667aa2e1d7149bd44f8ff7f7091a45ea521219d921d5f196a06c9b09424bcb9a38d2b2bf6ea029f33e7e98356a9807ba0d65fa7048a16f35a7e5ceee9f6a526f1c74c0017e114df4409c3cd40d7dd876a83478455ffa4a2c8108a3aa567c9126feb2c2fe0a576a6027b028ac4698528773c22aa0a2ae131bd17189f521d81156c419510f77886e5508f3047be8cf1ae75ab05788b597b51d7a38d458a6f2ff4a5b7ec0fa2eb5519e28e2a61e016faf7c543d45041ea6f264e98dfe3952e40f4ded0cf0e62336698d6bf6f9205004e14ad3f73b7f2d82b7e4a725921b1c8e450c0416317ae228c855a38b577e43303159486f399dac05f7418dd63a0fedde9a3f8808003cc665e949cac539c324302c9f5449326b26e0973e0b9d7c579f231d3d920662672a052a60e41886229ec185c080f04d199fcdd5c643c0b2938cf48159a062c157f6afc58034f675e9bc4c797dd2815c7390333e57e01ff997d5d1717b28bc028c019c2d539a4dc5ff512cf6f71dc0a6b6ea0f7318b3d79f0282d4ef3ca2b5a14322fba6476bef37acd3cad2ef172d310f57625126e73201b8281395d8282be1df6e26a03beb8e7b5bf5b8b610502de00bc7617cc7577079a2ee8297d7330090f3e025a3b681ca03cc606434906c0ceaedda21eae1bf53917c1ff8b1c0b691c03bbd2ab50f59010436c7dcdd0110ebc57ea1eeb1002b8197538b21b6f48a1cb10b8afd4b12c9fb0b788929dad3c457fde104313adac4e424d56c0249e8bd2fe30151f72d8ee9fa09a474de0e048c8f3019d4610e7e598c59c0bd2d451ada3490132da9c362683a4b178d97ef3a2c6f7c3f0d9ff123cd52b9b2ea478b2785f3b003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000002118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000020d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000020a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000020b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000000229a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000002141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000000225e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000000212978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000022daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000002189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000021159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000000205ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000000205c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000000214d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000000203db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000022ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000021213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000021ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000000214fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000022b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000002305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000002280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000002223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000000217a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000000208858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000022618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000020f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000020e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000002172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000020b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000000205bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000002137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000022e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000022297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000022608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000000218373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000020422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000002204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000020afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000021998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000000228d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000021da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000000221d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000020ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000020e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000002107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000022f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000000209726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000000224f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000000203c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000021fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000002205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000000225110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000002283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000000221cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000002094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000020c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000021f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000022421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000021fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000021bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000002304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d2b959e6758c0bb7097a62ba5ad0e5734e582c5cfe53de9582f4a50d5b545712522631db696f3a9dfdb2c790de8ca0282ff59dae516984c1f42cb11af333b99ef7e33ecc921258f0f22de5d675dcba40c96933a5d623197aad8db88d0bdc1c7c96403c61b0c5c4461c6e8295106c9a0db2368115416c64eb76561f0c12b6d223a41e757e2ecd69e398c678d17250c1f55ac4cb107c6a0a0245277a4bd508ffde2d537effdce2804272a19d3261cad4fa62740995466d9f5f63aab65e33606417e72724d34c4f0d6e0f96bad14ce845d4f5f348195acf01218ed712b78f895e274e6c854a4eb800ef44c22b2ebcbe4cb5d5b7465ecf1c459f8e3ea7a9c435f123cb1abf8b0344ab16d2bf406be0c5b520bfe4d85d8ea3673c32667cfae3f15f7aa4101813c2ce37759fb2e910679f6a2aced1da5a1fde4b949571ff8f7a3a225972a93c1d1297f80f58b7ecad59e4afa7d38114bab4bacdf5c014330d10f961cd7ffd5be666a933578a30a358bde4664e31ddf5945ecf7e4a64603a4f01e70f1647d083b9f934ff47a74dc3953c891d12b22bea0a8e7cb4a6d1734193ebe4c68e249990e308214de17580b4f7625b0130ac535d944b51b215a092eca3e41b6290000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000963b3bd82b290c17d606697d8e493fdb9080ba45fa9b0534b55bdafa9c4c24ac41cdd5ab96612fe6a486ee8a265fd3143f27b61fe13cd38eb79c9059ef5fb93f3aac78faaf5f059fe184f920add3f9dcdef65665229a51478f355074801fa2b558ac9e5f57e08f14e6eec950fbaf93978112512c01806136a04345dafdcd96b490d5d45b75c916be0e4531abd6a2881d0a88eabc87b83eda55715c7ecdab11960792c27a973d6e5773efbd04fa3a5954e85c3e7be3fa26c27ba5637510e6ffdb3f48d66cc035fdf8128cc3ac5ce64ee44e9b14452412a4726c3ea55c73ae8ebdd61c231d2cc4f923fb245b04d5f4024192fd670007cba1db7f2c26fed88586fae930b35717819ec37226c14e94862f8470293c77ba26026ae4c4c7d42ea92b072689fa5ec9bfbbd8678b1c371e97f19e01f35ce5a2fb81033f7e90220eaba3588fc8e67e6e91e89a01d84e05ff0ddc6cb9907186c23c9d8c98c81ddbd3fcc9f0e93c214c851d9602f83a896a429cb4515df1f98ab19191a4eb755cb6811f9ca4d61c429c61ca94b055379cea2c345cddab3b4fc233379c39047325ef28e55abaeea8fcd849b4de4094d359cb5e50a0a10f733bbac760abfb29964964b30adda8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004902e25bfbe29b79000c96684ecfae27db0b0677cc4a01ec1d414a6ee290c61cab92aef5f766e0b0464d4998dd5025bb9aa7c26a89beb0f85b1d533879f9a61f6f73a9577d6465c7895a77a8ce7b792aad672619727bb4eba4c92d25005e42ec2cd436e58bfb50391c33ab9f7c524cb11305c54840b79d956127098246ab36909be2d4d3993df67a6c4283e215b4526e8b1cf1f50e4b0bbb586352f95154afce05d88faf0db52a136150a56aca643666d2b71209dcc3c0ab91c299c536c03f6b2ea25c23ce0301b587b726796ee746468bb631f1076398a5d3892b734eea0f28004fd89277517fbb22d86df56ad114a6d8a91a2a8bc06c9f438e9f26fad982f088868fa6bb16556617cccbf69bc6f0f47db6222a9052f24fb7db38e5023efb63504574816b0a22c7cd1732fc1e43edf93a3bc6c476e5a7498ee4e01fb08be2dc8762f57a36a8101b4171ccae044ac9bc2f76639ef0d25ffcac505cc7f43f772c3b2900ade3cb1a2b38b4caf5bc0351ee9fb5db98012bf73363383b13ac414a47c4875713e8caae0777cfb3cb46f2f0a0a0e72f7840ab4453483df0c5b304da850ae5536aa3b5da26a36cb0d8c506ce7d1aaef5a272cd382908f0ecd54ddfe100000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8f72a265a950f2b4e5f1d3ed432458d6a2173d5c6f484959cefeb4de478bef3f88007f47ac07a0c11f8191d4b50a17f48146e08cb0df7f6cbf0c1c2eaa4f1584217d728763ed3721426f2972a0a42349d8f489e280f7f4de565299056427a71a35cc45e8c0965fed6bfc3d3543175fa62473af6176d8ca77af6d5c1454c704f69af1675a447fbf6a02ab788cff3e9e6069dff94932486c944370a8e9dbe376661dc10330d39a6829f119a7631e93ea9686a2a254bc987ad16ba632d354a10140c6da95fa66c9d26c3b7774f0c47383eb1a5adb7ce23fde4d5f8b534f170072172842145f6e7225261af79eaab2c7d3121018311d54d95a4e61edeb37214150c8849c8533c6c214fbc7d518bc757fe462b16e6fac5c388b2b0189c5555b6a3590b405b1ae946fbf49a7e5c8756dccaa28abf72ee27b9b4e48766626a9bb063fe2e65db7d5225f3dd3d99117e9f352b7e1ce23cb2cf0be78151c4f1dcc464c6091a51622f2cc2ba6535f50de9f34a081b57f793e1af50a22b3502b4066a08819f52536d83d8fac7ca0dba615dd333a50956606a29a0b4b85345f460721511ca6272e0cc7c57a4cd76c791e44c4bb57c7502e227568705aac4d94484ddca70b467000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084557cfe814d688b873a012bc876c1c0bf2c88d78861403037f5f42a6a5f0c3e032ded348dcaf00c2220d84727bd7f8006d0c6a57fa666a6d956808ecfcbb089e2a10088fcc8ac832d6f4a5265d20948d20f03996ec515c20d2ef9567d43ee640202ace53f2ed25328334f3cf77933ceb86bd06a2953d78a6f49158a77d12fec458170da08267e402f2ac23f018469c6c0c76d3b5a65a2a5c62e51524a8e258ffb5d13026f706fde827fcac2f5af24d0db6436aa4062938ceabbf05598c9518ac148ee9a9e63555f458983731c5b1b760c087180edca3208e9ecdbbb80f6c2a577e9e8f06c843146a5d099943e713df17f86c05a2236be1dab92aa6df2f955e40dcb2335ad49da84455828d2b4740e7e33d9e4b724f1d6ba281e09f79615a5c608165ebdc27e2f664e81ee4afda4e36d12f81ec65523c4fccc6526b13d84a2f4e40ba21fd8af11b258f9d27baf1ef747552fc406a575e712641a52fc3a9651fc3ffbec951b4bfc2467903bddad2ecf46fd2e6d76b02c07c80a5029bc739e5e33695f0a96612e73c1036ea74b3a0570a204b273a8512f3918705e2dba6d293cd3ef9838d874b641b1871e69d9abf223b30f84a2c84f7a215ebfe9d7e69fd0f03300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e2907f23df48f72a49527f64e7c4d576269d06a8f5f7a9c45d37c686d56b846193f6640c2b0e0a014ae41c2285de2875e6f6550143083617ef07e9ee11e5739fb63ee46c40f713f9949ea2bc8c53bf8c8e4bd3b6710ea10bb99cb47a6b9162632b8bcea92801fb75b82127c0dbd95a698a2c87575a0f8d64641cdfc71feec5daa1f064e5ddc2751a4a5e6af9722d175af9f2abefb57561f358d1e786b78132abcf3ed4aaf4fd04f1c62ae875a264272b7aedd676d12d566e58ac348c3841590c7868d65a6e1e0220f22018c77936e9fa474927dc358d6724ecbe5c894bd94ef8c2b34a0db8d732b0650bcfaa9162d8cfa95dae40569fa567a506c725a0fe10619fc69455f224e9437052b6f97307b278283ccefb15d2e5911c9cc5a4594439d72ae9d0a35f04c2c9cf373a939675a156b2065534254c6cccffc6961e24e3bb27bb98c74bd9d15a04c7dc8241938a8a6d7c273633a9e0490e09f224a2e3c9cafcb4a74ca956645d1dfdbf6c4f669ace9d1dd0480dcf48599eb4f6420ea6541c81b83ff8efb2fd33c6c2ac5d243969ea17c987fd96683d8d39e0088f489c0682f1801a6ff9e1624631b2dd06e25f39fba9dfa891088d5006a4000dfc028978e540000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3f871b7bc284946d6cd7dbb71eced5f7be0bf26b98f9bf72604b0d9b42d43191c66644a8267639fdefa685c9a32706371e9d1f9eff0c8a7da0b657d0ab471cccf69e3b65a4f6101899b232f26d6c228f760c69d4cb74285045d25dc34146b9f41b81a55846c49c51f8e58d86f428ed2499c583716f9868b64f458488421e93795663f4e64529b2d2e870f9bd26d3e8e5978b7aa7d7c3850a25d8d5fae82560fb8b1797e28402f2f45c68eedf809042139b31bf8da549e4c8f18441aba67a49eab27605ccd761c0f271891920dc802c09b9c408d7d760890790a629c8531190ffc5275c3336cae53b7037bef42bf1f182cdb3724c40ff848d1c5d54425ce72e48d2e197a78441683796910ce097d565542391df198f7c3baea4de1821305f7eddfd19c446291887b813f9fa41f28f537d688e4996d3841ec7a21e4dd9f1640e909462dfd75e739ceea92049a1f32390e9d0f30a1316e04600b67015254f6bf8551f8a3f0012578e0d89904581e1af8d8a34306ddc2fe00d7e50b37526d866b036003f31a5572d5b8cb2d212dac05df754db02f9ed8a256dcb609c192e30f3402b6e60ea3241404d86501eccfe2f0ddfff3eb7241b67f71dbe8ac54e4c6592e7f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000842fbb3d07b3799b9702d7c05286290e391573451a8eb76a00bd052f9a3dc69a043653b067cf0ee23feafa3000df3a8fd354b763700b1b803f35ba94c6a3cac409a021f41c0bca440ce11280f7464c3c10664f2060df645e783f0499f41238c1cafafd38a1af3642322db175514cac5f0f79adf5e8ba8ac8adc42241320bc320500abc76b68c85ff709ceff68fb5b23972bd1abebe484e89798d18e77e615ac71ad455b0521f6282d7efcfb27cbffb8cd69eb1819e21a50a839bfa7691e0fc60d5787faf41be538b130e37f6d545b9b3fb810aeab4c55ea29958efaebc7937ee9523217720388f87e81da3f08c3222a767ba82921210a3c42240aba37e0098988d5b29714414e142db34008f38a194053769a94097fedaa5d3d1b13ff7d3496e10a8b0bee0ad7783ec94ea12fae13b727ecabb675ec44ca6798b3d1a6bf7a347bf86f62d58e4d560d5683116f24d9ae6a04801ec9afd29e703bfc7e2220b5c53ae038555f8592fb73058a4aee9d705219b92a36b58dec7b1a9f0ba27b83371a64e76d7f9f6688c977c10b2bd8db642991d929d650a4a03ae277766a1249f0e1eb0bb7d89b1a1b1c04bae123afdc5af1570d6eaac4af805757f5f6bd56a0ede3700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ef63f71646a9914ce36e88ac8fbd54006c6dc42ebd62e66cde4bff13c41c7f1270085676dbb9a412dc6023f2f13a4ed6044bea16e242694fa657ae87d37cb5844869bc467577ad0f3e94388dc63f049cce4d7ebbaba63fec4c3ec85ecc9b12c0bd7fe124549222e500941d756eafb5aeae1f04ef52ab3aca6459dce1df7307b8b316fa9eec5d54a8c59ca036af5d7dcae666d087fb2d162f1a56eba30f60525a97567732d8b9fc8c7b0b75c1f9ec3c8a99d492a5f1a3a4136d97aa0ed305c16c17d2ea5cc4b6ffb37b45818bdff5eaa5606cbdf6d7c9b685eb43c28e2645da21e759a33805d10569fccb1d7ddb846602c9e9573cad8125f4abcad485e9c52934cb255f6bc4e912c5abd9b0bbff594aa919858d6e7b4866ec1374f4de499a913875bf3c1e6b77ef4cb10ebd5b35fb55cc487c0ee8d30e0fee7c09682de9e46b0aa5cd1304a589c3f18c00378ccea83ab302206ab12d383c71e21a8d0c2b8aa2b65648cc48f387b54742602ca9a1d807ca83f41ade585eaf3cc79de2226a9b12170096404471f01ed113d83254d0fdd4c5cad0648aafa2a7289827d02cdebc24e38f4b6ee715279371f51e2f818290fcaf5fe5ac316ecbc3d491f8964cd69cad0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024adc7b8b77005232c35982eef67d9d0563ace106c7dfa90dd21222696be0028715aeadfaf1f9e63b049fd1d156e41e65bdd16fdb8fca401e3942b6f2eecb7d52115a993d07225b3b6752e2016f1a8cb458da0916e9ece56a5ee6ea291b8fcdf1b171c6f4dd75dafa4043289c43fd45b1b0526bec0ba4a58ccb6389f26fc1aae717b2d096f800b692f291bbb16b5f86fe2c7053649f2eb5f69c82bc29460d694728534d4688280dba37299ce33fb663e800847c23f49fd4c12a7a8ea7ca4f9c0ab900fb3b65e0e2b4abb70d20a0fefced92499eb96451fee1751ac569f2983f13f1435840f95312de0e282806c6726f225489382845cdc3d01549235808d46097cba54893a2831b98a4ffe61c2de13400b690225f72dd3dbd2730196ee4faf4e0a78b55c749b2475292456be744f1123de74454361edff67021f896d07249e56bfebf28f22d0d0bd7b0749c5b185a3b88e63b90d95ffbba9c30f01657a696808ad47534255aa73b06c0998d19ebfbf04b424f59efa64b34b0690346d5ed7f99adee93894b26ee2093cf6fbb417dce5698f4eaa0ccfbdd41a055bb5ecf0d6670410e841041fe4e06e1b9572df2ec2e47329193ce9e4daff0b980834cfaafdf29b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001147b9d98bf3f7d11f2c1fae072d8f46a1239513f8d7768dccd8db69b7b600ca0ad398eafd8021a4f988707f2f545c8334fa3286e5064fe5611d42de7455a4cd7b7e9869be8f27b27858729f195970bc767d08e42793455061c249830e200db97ccfa01d386583498b3c45bafd61a5ea17bfb5e8de54e128286dcabd1a1fd642c66ecdadf4eaa9ba10f17ecc487a9156a6c5aebb07e83e7f96ba18f72b39ed4f3afb01a935713650c147fafbdc904445c882c319510ecb9466074dc93851a239fd813adc3bb9880a86b75b6b0b0d35789297edd3ade119e6ce92ca81af0fea165525962c2e442faec480f6b1e3cc68ae49cf3fd697420a6eff94c04ad1edd3104b996b245658fb065a5f14521ec5161a86fd3dafff5538156808c7067d9ec520642685abd1ac707e76e425f18b61608c9a739735c4de889a91221ae48da92034272e2f8d445b3c19c878356e58cc075faaced8da5e8d33b7368aea12a2d874b12ae39664d056b89d95c57aa7eeb3368033847d5805b78a82e93e3e1a10dce52912f24867ec9b17a5fd1e63f403b1fe2baf5342195250b9049719418779dd2d27378c0ed70b4c4f5c9d2859db1ed43983d6797be491ed59fe838facca30b1147a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a359c07208b539a71432f7062ca43983b51acc1c9b0b5e6de165608f3c4e25949fe0d9f08c27d239755f514e8815e3c2242eda737ff4fc19c2f89752716e6219a26859a568670040cf0105a8aa81accf129d41a58e94643e77c908f7c1ce8950a6900979677e9757276d3b30d787d65d59b7092d91fb75ab5486ac5fb1070cb0092c563ce87753b640082321a24c8f7fddc2ec01e874e4e6580b57303a23aa66723dc9228a49148c6ad02d29b8caa5320d422ce5d8b4522f3cdf8b4da15c46da60e38902cb7fb511eca8ee085ad5a452ae881d6788ec214fa17d6e434bcadb1db061c0b815b2c6266f9340e5154b82cd545b01117299ab84d01f859179fc6266b0852e37a3df22942aa64d1b2f33b19c27f864725b594c5e8ed5963c56399d99b0524dd7f470ec0839f698fa2e79f338ff8d1773ca70824aea8ab288d4531ec17c644bdba6835c35783e170c5929744f9e1753a79ed80ea7b1fee8a498cb08af22b9bbee9f478efd2681787894efbb40785d64c7ac3b57782419b7a17c8010fa79a0118c1462594872d43c07731362ccf12f3d18c4d9750c042d57883489e8423c961c20b5dc628009ee81df4d46dd5c4f0726cbd386bee3c833b048c5c682a500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d24ce18aeeb323b091a4ad079db6c80d21ed8eaa7c2cb79d69d96f69f59ab7a4015c7fe2c4dfb9a802a827d14e9a4ab23e18c51e3a91a3c5ca50c0bff182ae6fd6967f69eede49bfee2c784bffbe45abc5add543e32db4658710c221ae69abc9efa3d4998b480c018d32832f267d3e1ac31974438e5d7351dc6674c3bfed4a2e9f4c776e8ea35fbb7b78e6441d6d96b4de25f597e8f53cac90519c9f1333ad1b0d6103a5e898d3ef53e5b25d0bdceb35a13c0f3dea3e5ab7582a249b790360c0d72e4e8df319668c2254f09c6df2c76e68043b6b2bb5f5bc077fefcb295a60b4ea87a50e9ba4baab69d398e2678f70e12885c6c7d7aea1ec91c8ecfa84d39bb1d92a4e7a75073d5852b86cebbafe46bec958a3a2b1d89c47c8aca1a74574060293fa3e0d584229d78fc3dad2ff596b4398f4f45116936ee7e21984d712d7fdce0effe4a481d06a46d8ed75dc1e5f1ff1882ba900a817f867bea1e2a053e4d316b46dfdabd039635b07bb1990c0ec78190fa80d3996798ea823dd6f29bb48a83fe3a4a1a4854848c17a5b6b6e1960ec97890ea6f2bee40dcf2541e35b862a4877d0dcaf8c1cb078340bb900af952ca5592647329169be0520ce120c4b6d082790000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000831cf427ce58a132c1961d60e548c28e613e2d98e06d638dabab072579d68c138a24d59d8b523b07dc8a755d1fe6454b497e149dbf4f91dac435b3680b5126192561059cb5404794ff15191af619086f07cbf5288b9d07ef22af33b5bf1072dd6bd43599f380e3afc85aa2cc34b83940d4f3a21ad00b25b38bf4279eebca408057f0c68fc61f771181c158b321a75033a50607cbd4dccf18c71e363c6181072308df5cb81466be00327a244af4a9c95787cce0a19538c22c33b6a542863b6e25e4bcfe2e2335ac82053ad72c3cfe462fc9c5039a23f906c0f1e83f119046051412d9e4e909770702ed76f4d425ea9b247eb9df77591dabb6076080860dd0506807f7aed47e64bd89d40112099e8dd6737c7a4ae94378d0ca2642cea92616cee2bcdf2f9612a3a1f517b22247a75b3ae5ceeb59b90fd0aed185f000ef94c3929c3210db36fb1e5c785b2285343e19de208e1458bebdac44e77de5168852f5bfe82fac5028ba3cf3afe3239d3a68ae0a85b00b20f7bf4b3b0c0414699317b7d58556bf44436b53995870921238eaba222dff10492eaea4fb8e7b423a17c6280ee4acb46215604ec6ab65bd1d35815e0e4fa0e26d5427de5a1a0d73a0ef04bf32e600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f8eb6d940d199a351b592536a1532a972124d417a2b1b6ba85fadf0862a00f14f6f6101149157d912401ea3bd1a0b2f6cf49c61bf23fc4a1f8cad568d8731430d5705017361484924c8b7c6f767c653ca935a6e36239e09882eaa8d36bea7c97e79bb732db5eecaf20f786f2405668cadd95cb64caca2a4c2eaa3fbebb40c8295976f8187a367fe630a4dd7411a87e08365587b39070ba4d98e7e592ad83e76b5402bc0eda88528368ee6fe5907bdffc5ac290947d89a125881d9b9f52af0b9807670e329df6b0b6384ceb12f6e4415191238a5eb6a6b9c51609ac26dcf429fb92d7c2e6ec67da623ea169ace790ffaf0bbc3abd9a432948ab5a238ad27e6699934ab7c3a0400d73bde3c65effa490ca890ca6de65f43c594d82e2dd980189a5d43e02c712a6874d99c0fea79a62c886243bba2d3bb3b19620f4172b8ec01f9852208d5bcf0eb50ddc8cfc88c664b32663ed398d41df38436464eee2645a15e9c11e52267c503825de57db91bad8e9c7e5809216bd6f803c637cc8f688b3b9f5c8e076e17257613084cf7056b4fa313ec17a7640af65fcaada614689cbfb128ff277c139ea8b0aebdbf8f7f11a203d6ae88b021d33f86a1b240614111a49a6000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009381c923ed2fa49e036575785192625a8e6b67835353de3c18b4f16c38ab6f34cc593480717255f828a9b966ac14761c54ad0ea0c61265cd4453397ec55190fefa35ac28054abdcc25ce083e2dc07f236518b9c6ac30a17035f1109a02ba58780b67d3873a35d3f105754eacc7616bbf0d5d078cbb4ce74fdeb5f7dbcbba2a6e6fdbc82837b94df5c4cbc6f50d1a4fefe10fed31756b875ce0054336d473d5aded1b7c0901b0bedd112942fa0238bdf089bb6e0bc5a1ed4b3d77467c33b993db9a1397e4443daa939ff2e21d43cf96fd5227a2c3f615a3fbb5b4b56f693a30b540b3281a206e4a570760434a34f36d38cff070249e75b2c14a52d90bd93379f1676c05069d5ffd953d1f719436864214c5693c7bb327a09f32d4d9b3ce77581a5d66e17da75dfafb3e78f700a10f6b34fccb224ae4709e344fa40bad244e53849312fa6a653c77c669c7f695c1bce5e28ccab09e665a60538c87e8f783c8931e84d2a154c35f72003d59742ec8bcfcb4eed82c9f8d029f7213560521dc32778da0bbdfe84678cae328f726672823472308c5fb3a0e01bc7229c0c6622cf662b21d8e3e2d29a7ed9685c73fc5964c67946fde7423a8903268f056023e70878f0b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afe41663c8f3b203b36a071b9514b239b9e61940c3a1be98967ce0a8d7888d8a4f6576807adef407e4c28af5e4399395400d66cf65295facd307f92aff69e4b7298dfc0d9441c2c5ba177cdd0e8c7a68ca3011f296f5e5bf217f73b3015eb3cc0054aa5a1425be1c5c660ebf056b05e831c829c6908d70de60f113365ab8dd606d01401c3fbae7f09f924ad83e08ee53e110f731dc2cf2191ec53f6cc125b90a78c10b54219cc054f23c48095cc86a264596098aa7d72bd6f23e4301ca14a0a70c9986eeaeb4a69aec5a2ee4970922281ebffe85842b6b2de1e5d49065ef3034ef4023db6f20c3eea869747ba86532fa25886fa9489cafb7f973586a1a4fb71a232784691105aea81bb378b12abfadb7ed0b042daf4a72bfc8234711344191cc342a3121f4464f26e68409e61e6cb9b7d84bbec5397f6bd41d16824a2f1e180670540733441e1b01506606322b1633e20bec2f779be495f34e394396b8ffaa91e3b28d86e8a74abf5003235d763c3766cea54f40c84a581de7ae28283492b7ecab2d02972a4270d9d6e9b01ea12009aaa4a4e391dd74d9d46e16a50229ccef7f04e3107bd63f90124f01a5dccf6ad8559a78353bcd75a63fa2760280722cb2a70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000220e5d150f032b988d7ef9e4ba48a68150921fde8bbf12d05057f2687fca47ffa12dc0080740f0ef68218627cc2157062fb95cb0bba864ee1bf1db6fcf34c9c97001059cd1b17d8dfe26342f642703e9f97914e73f0dda85877dc5e92c5b5f7527bb06d8d14b8b47f20277b18e228e41f11594d63010472ca7026f169339fbf425cd1dc065ca6df462135e9c2c217361a1518c71c23add7566b80be92af0203798f53705a949b1a940e09cb9d3e98eba4f45bac33b9c5df7a8e98b14a743bdd5613fa526500c2775139f1a9f78c854607881989230b9aafa1f1ef2eb49da206d3745578929bb6064c66ff18dc6109d5537baac87155e99b3a5087411d2edd3a96651e7e448be96dd5cdb5db0fb156204a2bf7839e3bf792a45dd048d8f599ac963e0d49c11f59592a476a04fef96ecfd65f7cc8564a9556c39e0fe7aea580e49c10f22d5666ee703b15e47961da179fce3fdf299bd6974beb557859a1c463e8929c4cd8851e3a3d2b99573ec4933663e2d7a067a662945ae5dfbdd447b5a0cc1fc38aa0c1068077dc8ea91157452edf17ada289a263a5f7c62f4d731c7f21bca41eade258816b80e7b598e669215884583317340d5d6efb9279c8547c9c8913b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e36b45ce861e85dc5cb4440c1fe38829c4bafe44d6975b3eb46b4dc97f6a3c7af8a60de3a7ad023c3a178c2af0844ba69f9592fff1f6bab87679e341e75ced382c1c4b27a0bc487f3a2eea94d0ffeec8f48269c3b473a12991f110481f691e0211d9067ef132207df9ab46729ac788ecade553304fa2cea57bc4a92ce264b270b55d5e4612b51f4851e37a7b7b04857033e3f975e806d4d24350ebd44c468711a8baeb7a956705cf06be0e9df7c18bf0a51718c3cd68e712f1b4ff8349a9c557476dee67f65f4a26559106c9862b2e4b01daad38303fbf7ac417a82764d0ce957a19a052bf881b9a3f2adff52ebcec27ea7ef33fa52b4bcef35b3d34e9feab53386ee496451cbb8fa9c76332456d377a040d14a25c9e37ae19649ae08a0863220e32a6b1f02cdd25cff4243f861ba13757466e7f7461559c27b820d639df8ea90e2ac0de9c2e376bc4472fffd0b96bd57206cb1fa5a71e6ae3560b668c357f1389b423e899f622914a463b7af1d32afeed42fe310a8094aa881729a992b079bc335a04f91d027bc63a0c3f5077157a6218742e91c540f0fbe2182a76ed9307ce00b58a4c28d44fbe4b79ce140d7e481d791a406ec75582d850b8e0e6360dfba00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bf054ae0776a12807015ff53d6693d5428ec38dc80a7f26ffb9832c6ba51ef88b1bd73c59669898ef76b83cc114118444e6591dda821ef35c9e8059407354b14384bc1b594722a8099fa63a9eb8eade4f38c946096869bc19c9a2f39bae02315e402257120bc2bf40bc3b3f84d058d838d5832284cee3a1daf5c88e47177072c633a97abcc17edfd26fd040d506d34c358a1f6c92f1a3271e2945f51613edf439d1d40b510fdc6a1f7bdd5a50a30677e8f0d6e003c036839f67498d1b34b4a158a025ad90a4a8cb8524bc60104854465000dabdc7477a9ec9df48be770f6416aee08f6dd837d5d6ca0c85e981c387d54f1b2cf71746f5ec851e1fe8a0b16dcbb279877b8e2998efd5b80b6528d5f6ce13862865302869a72fa27f88fe11a7f33caa270decbcc357b451ea9abc107befff49f8c620ae3fde1e43ebbe856a8ec841069fa50719a61f666dac85f4afbb61c0666b250549449a141301be1517e34d6829deaa74c0a0e4f40a63e53c3351b7bdcc0a5333becbc395539f8439781a492c25ba974711e088214008d886566d8a47ba3643129f9d96571b49d64715c2c82684d4ccc7419bdde202879176898d6d91a9a165e335da0efabbc78486dd6c77000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003dc44eb067023594430f8bcf2b47dbee7d843cd8072f689adf33c8017f5f47e5d67bc88df05ebd81c03ddb10ae57c888a3d29a56359c3dce3eb11ed3f9268292ef361b5dd2f958cc537858b1c71aa5e3de85cff28047c044560655b9d4e85cee9e53acfd16e9bdcda4ab0eba884570a9a0335a77fadc09124391e0dcbdef903115c620183d6a3f40324256ad7a96657d6ce3f5021842f0cd8949f1894ceff992ff9aefe3c54ca7c9707e14ee107c072c70de1404c88d4f42a7254d0ede39f2af527d1b21e0233d19585b99a50a8f84b23ba378f60338116178e2e253b57f6f6138e6b905933895a6784646048ec25ee60236dbb99b39924f92ee4ad2600d1ff965f8cc3cce42f60a1c1bca08536181fd088a8358460c64f5f18a0e0edd423dc3dcc73c9a27be086b984e3cf26fc95f6ae232eea952eb139d85e331359155daf805512921330cb08055e48231e3cc021a85bff6a1873fcff4f5f9c6f82aa09d04ba0012f097831008ba06576bde65aee65b0c327708608ab8e2077030ed8d08f774e6b9fcb49070c4b33807e19e63baaaa5a6e622271ead7b3bc2faaf87c0e494b271757fe731fa8cf721bfe33be992dbacbe5dd5daf329e930801a62b2781cf00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cb1ef6c6783db1e3bc0cee138778ead97c626755c2a258ae8b339d1fe957de7ff404d0198735fb62c0a901bb81e7aa44d491fae6c2568c9b72a7c3f12f8f2470d39ba7486130ed83a30f8914522e3f1804616398bb417d0dc1f257424c55c944ea3718bc235c05279231f2f0ee46dfa81d7ae2a366493295e1792f6acb19fb0ee8932c2c8e8192fc8f85a37b54e8f6a37d11576f3a6d4014fbc733eba2decfb68b5a0109724b78571029ddbe3d625cdd21f7e3bb3a681f85e24699bdc011401877b06c2246a9d0bccd835631cb350fc5ed7a516f7b3dbb4ca1629fa69891d7a67e75a82ee551f406cc2521fea3599ceea201a2157ba96e7f98dce0b1f3fcf62c92fdb5a6b34bb2e0539add1feb68c8c95fa6b057aabdaaf192a56f980768db775afec7b106a189295297eb5822ab88b479015df6fa168195802160ec32f823ac452228924e979caae8bfd182df75dd3afe535ab89d50da323f7cb7651372365f761fc3a870b8b22e4ffb20f15ad8eb6f4345a400abfb64670a58fa8f3ec882193f61e2298703e9291e78e0886e5d05005974afb4efc9e8f6f28414e83ac880b600d6e68554690947cc3cb566e7059bb70b3e802f94fb0756a89a699c3c8331b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014e9d1c8382e917ff750025d6f6c577a3e3853046a0073f9117b3bfc40fe5f558d609c8215bc244a3bb18dec4828852db94db9091628dc6c2a29950f969185dbb856d5419804b56bd86ac035701ce67630ba880fd1d0fcb6e0f3a3ff8fbebfb87488d8597e1371cb46227c922053c60f1528a3ce51bbb86b29068ad168c68a16379b701d80aee951b72947fdc76bf6cd1accb964fa6b4b4655888ec3f8c392577bd452d3048b4016ccc8d5a55ba7c93504550122284cdffc5e6b8e83043017955f96507118f856e30cdd91411394fb1465415bca43e507c408467da84097a087f71f115230bdf2125db0f53b77469091b1c58fc62224fbce44782b8b0d5cb6eac7a29da166de881643d40879d5d592e9482c8c01db9ab275015354ed504e862d748fe80c2bb82b418b979c8ffaac82a532c8f575b071d41928ff0905fb121b5fb7fa1cc6aaa9b9100ecc57d4975d4fe909c9b62e514cad8c5c10611012c5a6dccd9191007c455769b392c87ba793c5d30ad531ce645249d0f7f94dcfe023aacd864fddb6b98897f35c4ba15b458adc5c40ca891ff3b3a5502414b99b8a2f6ac082ad767d85c2a6678d811b4aff3b034605837ea53ef079a5082546b5496ac11a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088c1ff6bcbc18270659d8d5f8e12af9e2c7148e634f007c3264f12ccaa05fb2a4fe0f51dc821d5a159b974f22853ba1c153dc9feed255629dcae81bfcdd267af6f93f831ff858262565807f622e17828a0f744b987d43f0ab3f6d3f1ffae03acf2171b75da2d7dc1ead2306e5d7d91de3c7113338c7ea9cf7e8cd1dc26374b03935c563befde69c7e1ec88d1672a434516ae4d68abe5b810c4d50205360fddb94c874315dd14229d324ec27a30fcb8ed3107c2855f3336d4a9c88f7b4337f8b246468412341dd2adf373e990bd270bfe318cd0ca0c9053543af2648cd3860eb78100a004d036412a93ce6e3e43592cfbabc03ee95eae0dc1f8c0f7cea2f9df5aed48310c58492575f234761231016fb67f19733a5b3f6e9c19031867e4f332d167688b5a458a27542734ae044450592538c25f52b85de20aa16a3ff08241ebf917ac1489281876b56f6f71140046bc2f06d473995dff039fa1a5c7a3c3a9353999c70ad5cdb9560483e1db9d1d0092d7ee7e20d078239f7f6779383075f3affb112819b77290f89edaa0d652c32cdbaacd0a084aad421ea573bb136db683cc2c80f8858f69b2cbf5127d639eb4d7d5d7d629bd6950e9919c01d620410a67f0ec000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096eb59d3871aeb2339736a4e622c3f4b770f204302503ea3639b60a9db714a64355914354e07233c11c03f3ae355dd0bfde610fac17cb9166861495022bfc373c89c889655bc5850c9c18046bf7cc1c3992ae9e7e8ff1829395d690d5f1139864f153c76e940b6a9916c72a4beafe366d1cb7816228a87eb56e0a70f2221aec8bbd4a2c05667d7c178c470595680d627ea3701e172dcd270d64d917fef58ecd2031f0522fa9d3f26499d354a524a62a6b51fde3e10a6086d4b89c894e83ea65cfd6fe112d0358ea0d9a5e3328c911fdc153400b0b553bc718b31c47b218aca9fad757c1edf33220768fa308561dd12d37efe699df7c9c85ae5d109516945f36d0f4d717afa3a086404299851fbe466690ddf1002e3f04291fae69000512f6b2577b54d9762538d204a60364792a512b0fa50c5af9a8b043865b6bb131ec21b5bde062f45c356e26e7201300f3c7f1577e4f8fd3cfd51e3153b625d1f89f52e8393f7f57c0d3b51b4da43f2967e9c8cf168ac1befc1f074c7e502211bbae05c0b142c8c940ebdd55a9525e2eff81bfc0505fc410364888926d3a95902ddf5287a345be6ea7a3374326871b09243c4354276d4d4b76dde43be4272759b00164f2900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a929ef334001bcad2ee110c8cafc8bfc7996edabb7c33e575b95b34577d9d2b3872cda483857b5df47c8de5e7f9195aea50b89517f68d9bd362fbd864a8a22cf966688fd99a6dc1376def3c8b7e0edd7b415228a1e5dff515e4a5e77db32d8dffabccb10908aac96f62abf51dff36861a48bceae89ae75f4914fd18df4c3b79998a0282f688ae0e84f31e91f68b524a864e8a99515b7da6b6b87d537a0cd22d10cc56175123901900fdbd6c7b2ac9ca6214b08efd35336507dac3169ddd8b87f7f9b6211abd7d59c9f04ca4ffff5ecf9e26e655c3c9aa02c4ca121bc07b8400ad20ff7096beccb888bdb8bf3d630cfa8c6105fbba62bf1d80a69da3bd26ca459b527e38a94a8b70c9439660c13217b20753c0ca1017ae038b145437edd6d4a61b6a1346af9d3b72620f04896f364c536be977c2377c741b21489d6677bd4bd2e985b3547fb4842bd246c42fa9fc0f1ab33feb74e6a679a2ddcc63ee81df7a3018f162ce8de65d018041f1166a44dd940c833cfa236f87a52006ce38212b7e805b06721e44e21d43acbeb86a67720661faaaf05d3576e234528667cf32ad46e9192e4e3faf1fa4097f0eb4c1d2f36b69ed795da4f6c0f72157270da40be3082d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015a663c8570766d3b1df5194da002619f2cb3c372747ca9986dd7ea826594e32a2e0151e4e26be97268df388b1141dbb8a5539aecca0d3cd5ca6af9dfc0f4563a50dadc8f28448a349f9f2bf36a9ad7ea8e838a2324d48a0ac4a6ea90ae0aa156cf6c0b34893d7ceec3524a5f240aed4093e934fc80e9ae1592c2607a9c989d0f128d3da6c13dc43eb856955c0136b87a5a5cec8d00497322e5b78bc9bdf93b613a98c0e68a56d0ceba0ae956182c62f088bed572be3296ac89a3b3d1986ca547481aa77bbd77537f12ebeb98c95998f5700b0211b4cf6f8002392b51921d1a74f45d6261936310cbb14c910b21816c1ca9a3a6d934d9bf600a7980688e92e7f4461b18a7a08f86e7fc0bd8e06fc657a7baf350b1874bc0912479658a7e21148777bfb6952f6e2ff8d78c63e1a2b841870238661ccac6d11ef58f34b8732a17e63feea9dee00b7fe3e4a54702ed8f353809f4fb70773ad7c9aabef2fc0a7e6546edd7ad04fd4c919e01e7eec9219095658f5ec83b3f6b3aa83ffa80e128dd9ddccdc87f3014bb4d11d3833b2dfbb569903e4f4721744c9b5f2f4ab0c2de058b1e8c5d5824b208706bf19ad53c3e9e847380e976042d9207d482e5483bf6a18bc000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015763604b5d79f9e75ca7a2ab68e70c7b43400526f65b89a6ac0542035098259a7c6c28b14afcb10c99ce99157287db8d2b5471c66b0237f3ea020963a65afb2949e95480a9f1ae2cf9956a3bbd22e653d1a36f46bfc80a259e812470c13dd8deff307db10030e931a68e10e6b2a7e2ccb29d7da6b073bdc7a22b8ce192d5ca52f747238f43e499c2ab3d4d5078acb1e20ea98e1dc09359b56933a84a0c463d9b196175765abc0061b5e9f3ccc52f134d7b5a0acb0738bf83ffedeca6d48591e32dd3047ade1f5a770d97f5f10acd492fa924b7481b32d6f2270641a6fecd318995840a8678d16a1ab52212b1a7eb3358884645ed437934325da253759a6f27250bb1c2807cca3151b2d0c577cc7aefa46d992c9b3e8789c44ff4553b769d050c3cd3399d4038ebe43c593295c588cd9997851f73be781c1f4d7ca4c24c379bdc171a3330f1e617516dcc7d090e19851dd033096b24b1d9d9de6528e9591edb500309a8a1699b3e1d6f35246b15d4fced5666b01b9d266e031b3c62565724313bb78784cf1966dcd49a1071d65b1fec23a6207aa988318776f77d871230699aee9d6b359c54dc99e3e53183aeadbde6418558622b9b012437324cac8cfb5ba29000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093a694ac1a4a4c37c9dc8b45d19e5570749b1828351157cfcd38baab08d9831fa38aee805afdd3f9836981d9d170bad9ff02557c890f2d71a6940325fa4a5e202ea1b733820566f2660c1138f77639976703d464efef2ae1516c5b4ed79c03697c2db668c15cec6710c4d014618c2955e24decfd03bcfa442327a91d5ac9485d4230afbc1464a82b6bd6e576a1e51d40c480235f98007228e6e5a4cd22cff793dac119d42733ca08e555146fc7bd8ee4969870580f207627b5e1cf6789654b94858a0779f4a58a5331ebbd2be197e111fcdb20bf656394feaab31911e5dfc435ef0feebcc015ded0d08393f6fbeb841a77b3950d771aad1a7bc9d264daba5811de9ad5789cc622e3f0a0e8e92e5a72abfcbc97f1ecb4d288122177b814e71bbf043e59dff10d73b78728c6733b9086938092e2134ab7bd0d5b13145d04ed5628803a425a174dd4aabe70cc6338f4c6b7d4f7c497a08da4ea3c1e44657449bc2d93b7838662ec67225a5a39c309c9cab0dade5d7ef6d672337a7924d104e5b59ec32dcd1e78cdcc212b37a5af8292831b2f343dbca34df5f8259d0d083825bb9a9f7cdcc747ab4ee3b8133c50d1162285a38d29cd2539ffc2e8d3b20603fb2d3e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087fc483ddcb77428526ff9d08379c43c6a4880c434810a9bcf778e940ec4ab83e3dc96b8e8c0f4ca4ec9a77cb6d7dd5dd3852af7e461683a88c5e5b36e07980a7cc6b98dd4f23b74cfcf67cd8bedfa7f6a9cb9b272a6a6c2d2ff07ef78f7127014aacf3c164704d1a7790146fb77359199ac18bb9f9f2cf0ccafe69b30aad1a2fe4803a880b01dbab4bbf044163b0b6967cefc554714eea2ab7e047ac6a110dd9704fd13886a77ba9564d9ced6f5b2d79a24433666aa23358d68c82adaca77645a94858db79aee826551b819b09824c88e7f2eb2ff9fc0aad13be5d69cb55fa13b0cf526c50e615a3a693ccbe5e0713a5aee8fbb8f53c2afbc44fc74ea5d06a11e035eaacb47b342f1485b2f54ad4a9d3948f7bd019109782efa36196a1eaa391c810eb8d84d5e3cc08083262d866ac351bc9bb24044c4deab6aef4f96c792dba18b43276f53ddcfc1ebf05a94bd3b8644de715ba0487e9de298c917c1fcda71f212fc823ea525dee1c3cbff07974cceb862cd685631d3efc8f2cba7daa96de028975e993b610e11bf92820b4193adb3967f9e74f4840d07a3e94e640ff343c83fd55d7f18e4b55b7fb95fb286ece9f8147c4111b2da90b0306363e75773131b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7137505949239a0c2cb8cd7f102af852d505eaacb04a55964d5c7d4620c4754c4c18c0886b3469d927ef5935547303f8252f612413d60438ff2304e2ade5d6157a88be2f259ef11f976591e71f3dfbf71b77467a449ec759a75bf1ee8b574c291b6e95fb0d9eca8c52116fca6e021a6149268cc2da6a7b61767b1c5a106469277ed055fed9f120082f8aec421ed52bd81ee9ae44dcf7c6f56a605ad7e398c94ba6022005cc064b89a151510a2d57af0a852ec3207c750b1afb864f51db1533b2ed5b5f7a61ba638338dc480f3b066a08cd93166011226d5bfe207f284cd54dee101dd9c60204e02f829166b74dfbea49793c1746237bea9b93752638a37281a43618d6e4676a8ee8b795cf89567dc8530d1d59ee78deb7a33dfb2c31988036456e6319e829bbfb93c2e2ea894a848ea2a0933055e31737cb81df8108d3d633728fedc1bd80c46c75c849b3cbcbcada45ccd30170ebf5415b44c8adacd455482b55c237e189f8a975f33e129b773406ca05e2ce0b237a2f23a93c7204e1d98e1588f17824a72c49d0a73ed57f00c2c27f2daff3946256fecc3b2c5dc546552a3a8ac3b51176b4ce06182f68ad3aab32e78dc820c94532ebdea4ba97a0100ab8a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c2c4cecafa019276be8f2dae35a0c153a5cdac4fcac211c7d65384058acb779dbd17a309248109bdfec8763b4cceb24b6d0c16068d0155b22082a0664ea1b41d2a06d1c80f6fd9fc832de8cd206d1e751910fc48f5504902d31ed3382e05d6a1c527275fbf746cde2aae2cbe8ef021abdeacda931489e12d9c968b0bac0285c6b487c8d4fb4eb547c4aa0fce00aafb957e1cc1f7f7b500c7b0b144be85173d9ed2f828beb66f8f94ea15ec71b8330599f3cabdd76165cac671bb71f2b28c7ad39f71dfc621efa98fe13a03adabc86c5cdcc7ee126e3f54560b98518a3280ca72dab20fdc86b87ebd9db784b04f5e1ebea69bf9c7d6ff95e7e2a176f51c9589671683fd098670bbbf8ffe5b3afa823fc553138378fc4b60ffc6f537ef2ac0b9102d7a6430bfe48160b3862e5797ad6c959c1f8473022ad1d28c778d0b205169e0492895e9ac250c1804d0a892e29f1e9f01796cc660c6f434676660fca90edd3f4a350a06d9187ca4371d30df538bf46a72a45b2f1f264cd3305450815d97037bca4c1bb3d33b86c5087db06adc8060a8471efb27d1281dd486720511ba28379de7a005d0f6c9b0f100afd0663625d472b0cdcc2384a7efcf387c6b3b59d4aae0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000963822487ec331e50f58f4821542d7ae5034108401857688b877899cd549f55c5fe7fab57bacc9c239de327aed73cd6f10689e4ec4c9415c5be4b1ec1d9b3264280e6e8009100a89c3e40f48832530dcf74b75e4474df23619d4e359ed4e5ef1d157b7dae3bfead828e10e7b30e6ba9e8fa2fe195c2f4767291cae0c562c9e4bd593f605ca87ef8976908a7903f5f835e19fc504a31cb3497efa656b53c3eddc9eb1a06b90c25fc3717afc7c3c785feff465a9ac42a7e85113422a3f68f87b42ff1257e587cde09d7966461934e1cfc235710c919e9d3048a60d2ae820622214bd6b52a72aa57bc704f204b641fa1e47b49f3faa21b7565e8fc986902864a900bb89aaf98925e7d0e14b7a5406d02910652e942b2b17dfcf12b6785dc899de291205c4d5231987ed46a345815fe9983a6e081eb47310ed22c42c75f8d6dcee543d9608f0ce1511408c492f2719961ce1732b56bd3ec94ed599c56c69ac3d38ad1ad70927ced502d008976662d1e607b83795b98c98daa65086965d363c20a923b37d45acacabd762e3ee205128cde406c914efb838a2b93cbc53c65ce0eab59d3216e5a10f72c9769376acdb2d3b7c308798b7335536ed3612140b8640e00004000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084399d0570668637e9dd5b58b51cd11fad1ff4ced6078182c5af483014767b8287255613a0c293681050af7cbc536c9ff8936f9be6fe3201092ae7f1e2268c3fa2cdcf53a2f92ec2136023156939b23eb992390553d31600d18f362534f5b6b538cc0873cfb3750a9261a5bca96d5bf7be1c03c5a38eddf6099ae63f8bf440e84c7257d83adf9b964ae1630b5d5404a61301799575cd240fae12d504170147265e0a48fa64652a5cc9b4b9dba694cf38533362fa33b5eb1b0e2fcc3b516acb0386418dd685e10a1f42c4b5410966e8ec189eea64be7263b4855e7354f0355e9526856261cdecf1f32b9b2d6172ad745d54f28616fe9fafeff61b34eff540401fe7c810c7611dba321d3cda17c848027e404a6e2e18d142af7946b7842d916feb8881730a84dac8cdc943fca95196f4b731e7cc52145c51676d22b29a0d548e0e1ec8602e775689e54913336419a38e4a8e02b6f9a26d495de0aa73f7613a5991d622787e972f57f46bfb8b505edaf41be4d52360085b0c9aeeb49324a4d58343d88c56c8218fa8b658d57f2d318d07c69e554b7bf3daeadcbe6491ab201dc7b73d885d517e65ffeee8a4a3054a2f2c96dd604d4327ed942b59d3518886194fb000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e7dc6adfa2e4d56dd4b9484d12ee7700d97764047dcf623199fa68ed66bf7b0d41c40ef6d36b98b2d682c49a80e02bab5a630e86f314a8c080329c81fd6f18eda5931fb81d2a89472810a2c274c9fec6acd851722484dfcf5bbca1eeab6e760b3bfc33f5e509e06cbab2e9616a0a778a96777cae77b320d33e3c26d946c2bfba4738ce951cac12a33f482ec3fdad274e5a0f70ada7d3777b7d1fd69f43615e699b86050332b854fb11127c9ebd233711871073d9b61e1d8b859242d1250f52c0e282030777d1a36308be19dbdd7219f8e4396b5630ca37134652fa7e67e7658df7cacb89c146a86377c178dca6c1b0b737b8a1c24e47b83a50e96a88e323d72f9f90b6a9225e013e033ebdb6ceec60e33626066c970315f3100acc00721049f372997846c0f4cb34defb6718675761c5edf992af3d197db520d2bd8dcd2417869b5475cc913280c83c42a41fe1b1bebf05c68f96cfc72f13f787c35f8671f5f619603c75cec49ff82a3315536da597acc0f7643e06e17c717a7e18d0ffb5bfe699b451577837ee569a586b14b657c35229f76dfb3b4d49dfacaf1ffbd0f522e862e661e9e94090af885759972794928eff0aa444f43b7eb5e94fa33a6415a1c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018008c1b560818fe83887620552c489c4db54b30c9496d9db7c3d9d20b14283af293cba2567d605971c148f7cc7a21e5125170b1c81d1ada71a93cbd74e74d6fc9ff1ff0b98e9084b5256eb510d99b4123f56c1e1e6f2ce53aac593366b8e7249a4e683e9ed0496f14d824f39a67bc396e5ae5c0023c1e5b81d0491d542f086d3936a0739701e9cdf6b3ffd9d0ecf242895ccf9bd47de83138043cfedfdcb39b70ae921a381965fd34a253a5a3f60d29d926863e574a8c32948c5d61b9f6c0a43f4578aa97e8160409c81c34ff0867eebb0c6e30cbf72d2be368387a43e74b1d1a3d832367ceab4aedb2ad9116a6ad42adb2884cf6b77eec16596a90cacf436f4cdc2b99bda4926fe05d2e04e234a45dbf2c94c50eb9f422cd695d0b2109a4de275747553e03958ff13f5bd1c6bc8094ced808c3fda7c86edbb1bd98f21a1f86db1d9adff9f60999f2b995a6d3021d771678760bad7f1db4188f31b6ef548836348c5b2706ab08a8016ffb786375cfb6f808ab1d29dea12bf50be5eac862e22a81910bc53f15ce7975b56647a4f14d4264bffd18c082528a2089aead0f83fa6902585481fbf0aff98db643baab8b6ef589afcd2e36b8ed61fdfa78d710590df200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ef3b5a98886ceaf2f1d4e86f450055d3f46daa7c97ee2b1a0297ef6537b939efd7bdf924dc26ae364ca5ff5277734472af6dbbcacd74da0960e2d8806a5fd0c44998f99769225598f3c3f43cf0f13b94cb7348fd5f0f02653ddcf9f6d0250e6fc0d4e04ef5fd93ac0a99936934cdc27eace757b2249bb45c25dcc5dea511408debefe1112486934b438cf9447b5f77c386761679f169a75aea016a39b33910e693f20a4e8267c9d868381db3b57d60376fdfafb3fd2ddadee5f5d77da137c072a6c6c0f9e1141a17ff8fbfdf47cd120c44a887e14aee3ee69e6b4dd21b3a027a2b2b0be5e974428a45e20af2ea76de5522cfa89dc36ade3a92560007cdd7944b3fd08176a7ece7241844b0f64b9ad8ceb746291da880cad1d265d4c8b929435f44514b875cfc217df464a65d101b65a76af7c24e69eff03cf7ddcb8c63e44232f5afbc2573fb74664ce4477c0e93ebfb9255ed1423b527ec03f863394b36ed329592056aa8c9fe565a3d453f1c929a067612eb338668afba24c4ac943c81119b8a060691b47908f96654e6dfbcddd1d44c73a3ebaef23e1c09e336db557db8a40dbb951162efddd87465b3b454656df377a6226e0934f5f3db9e2ccccfb4e460000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab7d4b65ce493130b5811f8c8c7d7d86f56e486ce6205804f41be7af1138cee0b2aca980cf6f1ebae1cb7a276cd9905b02fe2e8993c526720ecf570074b3c47882c3f3876a185afcf1df0fd9609d23a3435a166e0b773768c2ba8d449a4636d2514fb1461cd40badf0ebf1c1d1ab72def9bc5d1a7803791318080979fb4321caffa5a37fabb36caa12e93482732b66f92e23307ce3a2124424b4d020c53667d02d591df4d6dad329bdbb828f065ab7ae31e313c8ec9ea9d7e1fde4e1dfe17bccabab581681e040b5ead4dec8bbc6f90cf1abc5fb85482e13776201c3b3b9ceeb719f2504a5400f51f97d377cc8cbae871d37a102ce5a2ead28259265ae4316a2d3df8ee5e69fc5a517574f78f44ae4ba5ffea4212b24f06b563f05e6f2a674cfb9d6e219e7d40b443055bc6e035f32ba464404263f1f9413822ee375c53b82d33f3b46bda329d76c8448b61c1b8e0448dda3b5a96dd73dfa610da755c8003e0b34a72d9b059a1a05975e64be00347fd935809045db9bb7a69eba85227f773f05289fff0a90972f278fdd8065e922c0b2d9cb8679a2b6ab934945a8b35b8d05bf28147529e47d3d469590051b6cad0010d58f66612c11d97f45f7552d203970d1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094765c9baf04e2c665f5e4ed55fe79df81c569b7980cae9be7299645dd0c7438ddd096c38d6f25ba43d00dc15bdb55b3cf4d43f4dfd131638e97bb5bedf49e39aec3cd1691de09375d99f040ff158da4c773277c144bfac00900a9bfe4c6bc0f2b4019554ca8435a17508a5a736e464c97beaa5a08b41066e2347b2769880089462bb69ee75244634a6f77114a015c65c38c82ad0f39a5161869464b9f000c3828f0a7361ced614d307afe2f46df2c0e3522fe3d58635782dea5a7ba4f0e679a20d54bc8bb2e81efa70e7d5d3aaccf387a47a24ad501b9ca94aaf0d1789555f657b1fd5b66abc98beadae32a1fed9329d5913c7cd2a524b673bf43cdca5f0ed9356ce92cd7fabd378425a337ff0105b16f07a675fdb35e6d09b1b3bb7453d345134529ec7d6873481997c2246d7c7d8b61e7ec9015d08e377e33b4be66cc34c2c3062a540a94bdb135614057870519389873058cd839dd8908829b4b4b9dc26b20aab24361a7db7ccb2491a31e2c48167b7eed71d931c99f0aa65e21c4b8b1cc3851e875bcd4c39a506d5550a8507e385c03b211cca9a84c9e2ba174cf835922275404be00fc31504bf76e0e3fe8a54773ef15979e180b8cf257c0e633949b8600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009fbdd677af2d3419e2304faa4f6d1df797f74be04d90822e936a12fd36c5a14644b1d65dec06bdf1243bb9c98de637d377a66cb3bd46078f33ce898e36af4813726f3af428486e6fa24f32909e6ebc68faf2037794210ee41f9c140302c18e4e14f0e734061a1f59a1fd0faa9247893cb40ebe3465ed443489dbaef10464dccd76784315a3713f9e5ec6a3237a8de29e809c1502b1f30a848f622a759e76a36a1afcdd5782a7725a60bbf11df137cbcfd84f5d3447bdcec81babd84ab42cd592287b28ac02ae8c6650d63be7d8649c619d814aca99ad264b02261d5bf5b45ea6f58694828be4d232c88879c1e4c789963096895afb62d0c8dd54e78604c698f3cded11c96c8469009566b704c82fdafd451ca7710ce029bd22ebacb60ed50972563ddc866d8b4909cf77144bead9e8cf1b7399faf2d5e7e8a07e865fb536e783fe0f9835e35cd3b8e92487de9899c10916739c883d9b76b61bca2056f215b076f8b93a5ba44783419a7e88579751529c4fb25f2608e7395dc1c76624d5d7e7d2593124aabc15ca710def658682e1a7c26235e6550e28ee335ea5290ff07082a7cf36b66d2110b5d2361f9a5cc043b6fd01e59b9a3247bb548730cfda5d885b5600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b0c2e55d238b1e0150aa9e696288c7ef1a1c4e645725cbed9d8b7057f5e35ade1f0634c97ca8994127715f8ccaa76fc5bf86a21a270716d7da50474fda22d6c05fb111809a3e71e68f50d66a08c27fe168c6dc386ee3bf5e1145ca75d061d87456d0f1cc98875577a4d1de08f0a0f256a848cc3a57cce4fe117295298e1824fdd9cbc98cf219db429ca8944fa31271f69678172fa261c9179cfa9541fac91215b6c12ac45cab40be1353982bc57cd7ab1d68a766b3c0bb6739c01404b98d8ca74c33c9146f493b945aea7aa3790f5ffa8c80cd80150c11fb526818358d39dbf99c26d130f9c95859fcdcb2375113ef3e4deab7356a1f55debf2ff2b6cf5dd0ec59ca66f6a1ed7d269ba6a83d7fe6cd115cfb4a7e9eb90fbf4d6da5e92357ab10a857081daea84a544557965c6ceca17adf594562c1a71da2d1938a5b392a323afaf363391c3820ffe02616f1c78c1b50a1b05a86459965558471118af386e82216b4a6bbaa050847e2fc0738e5376a26c6a51300126fe7218d442d574bf367d9677530b980d633a759c21b6b5a4d8f2cb5e0ce70a8689358aadd5986077c35db49408f7b9c00e6d0f4f3f28c9e0f1cb738724de854f69bdf12683fa3d5824a400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa37982fd6e7e1d29599a0b7a63e3531cf7faf4e4c20094a4460f0047e4f70cebb18d8f535b5964e627a8bb5398d2e2f671ec2921232671e54bb855bc1a3379c1c775aa731bb686e225922c9f45382d6d7c566f8a16217efa46ec57c5e91f1c58b41a384d28dc9862ddb8e70dba7c45e443b8697c0ba132afbb44868b0b753b19f169b7eee7a1571381fcb1f4380d070d8ece5abf4175af1ed1a7856db16723ec699eaced2a56cc6f54c729a2138110e392f17b72ce1991acd0be7cd9e9a94f7efb5bdcc3bfc9cb37bb916f9c706b16fd9bf66064742e976784aa50e2b1a1351cafb8efdccd5647bb71bc259ca2355ec0fea4308ac94465d9cfda77fc4982ede3991c2198d14d9315823db55950016bb064c356d8c8e68880a4bf3e7d8d9487ef489b632023c61d7004aacda1856831589e92a702e8a11b1dea3b6ab54a037f917ec42dd43c2a84bc11d1da3b0b22c049b12318f8f70a654feafdf11014ab137d8776f5789d83b806d1a3d0944782820b7068ac48219437320a21fa2feadb236dad95fc524ed25831abc1623527e2f28c09c519774e2ebf468dac65e5275441a411e40e66d7066bcd4090af536f428e7f4d83adff0a9811baf716ca4d7aa8b60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a23b6f8ef5cbd39f302dec2aeae07efd534c83c72dd849e1785b58c86fba2461a343f2ffedba4a61e395d723541fc4c3292472266fd1a01f02f64d29ce91ac968f66b1ac17da2a5c65ee11df1953ae374fb42ae344661ce44f45c31012b6580e1eb485791fa439ae7511c7dcbcc67a5813b1d06e8ad1fc4e9aefd51d3806191c3fc1ced204d54dd2c9f02e55d8121445cb9726d07871c3c26b11fd6ec3ab5d5063e9a8b355edc4dfd6da9465b91c34298b7c200a69896666a76e1742b249357df746f33ffbd5819cc3ad4dd8e0eedcea4324b12531ef2425eaa22942ec508f26b721de199345201f407b0bed7acadc31715e98a0d7649a17959a5f67b52c598ce8548017872ef33e46ffc1b6b12e43ada3e470cfe6a88eb401ec7d896815859403305e254a542af74cabef4056a56c6c5404d6e41d89fa5baf3b69585ca15ccfebaa91c042b83ebe5295907df9502cd62d7b6dacdaa89d010ec7db5cc3bdb693214a75efe10c0fbc827c96c54a83840bf9674c2486aa31d16e28aa557d491db63171f12c8db520522a85b56a62ab34e4e5bc9a9d834050bb9eb22a180cbd8b80ded594794dfb7011da7a418be85d09f21ede1ea3fee134c2fb324d8bdd62cd970000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aafcaae456389ac2bd44a29de2c27886ab52aca503dc325199b2d7735aca43bd8b9033aeb06e0cdfe6266a75d315d42ffbe40215ef66c6641ca37ebb3de8c69c8e3864aed123d7cd19bd877992c8ba21bec4bc66368b65605715c6d6194c4603af35b07bbf935782eb928c9b16b2a286b04abb1d2865db8a47b9735179d16c5f66eadb84d30be6c3d783fa37404bdd47ed0b42741888d76615c74b18f63127d037ea1eaead6aa5059c0a42111eaca0854d96117d27d08f3f5ff0d37e2b8c03a26c696457512dd9148801d623ca9cba5046169b5e1d1e5bce0612d0080b457432033a9eae37f3d16d937e1b8233a7adfd421387ad5c3b20cece5708213d524cc99b522a611d2147be6eb4e486b5552b22966c6d9ba27e3a2f725af7c56ddef5c05b9bad26be7f9651186dd308477d23dc6bd8057fd517949dea8a55af20b0f38af218e310fe18a83c17e1d8f64c408520a0b0d7c84558fc74bd7188f57e859ff932b8ac956e622f3b50f63c6dbe60b69051343be46877f2b6c378830abdde206be045f0673cab3f42fb638dae593c8f72c4b74a35f8be276dc3d6cedc055652d74e13d03b428e7d672c88367ebb458d9c5a4566ba78bf262dc5cea1feb8269b9d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ce14857a9430b10ce8acb5190695abb34d751d35b9d58989940162cda6743b191ce4cc204dbe8db7d1937ae714e2adf1d7f1b690bfffdc10e3884e6b052b8ba1ccd43535d081db64f035ca7d8eaa9a881d4ca29292b24c67eb6083994ea5928c5fd5a99495bad6bcfbc91b210d0ff1669999b9b9760971bea31899c51aa4956c337db5d3aca0d1b1bdb9a7664cab9ea92cc8085430387a904ba75acb99aa7be57353e6543ed8220b3d6da30a9966027f51043a8e035c2ab0d0013cdb7eecf68d532142c854de9ab0fc6cc2c827942405d604348e3226938a58565d51f8a844bc5eded5bd0ed69d62e21f96e48aacf5fd0785d71480c30047b039045244c843bb4a397d1cc6027892e10f573912e967442855827620fc04b1cadfc381ef9e54d678db37c26570182fad94801282d62b951341414ffb3a9a23690e77fc184114841d01d0c8b32bd15d4bab1d5fba66aae9e77bf3e1b38dd429c73897e5902aef98de0ccffd0f996b5377505604aa10d42c15fe145d726b8e2bdddc84858a03aa1ce261fc021a3125bf7b01b01138dff98213ef033663b620e71064738673e84d52ae2d9f6f44e817c007f4217c5db0c0043276bda55466824aced8c01758c4b5d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c44107e4d996473ce7d572057b8f1b19162345c805ea9b490d5c096db0d0a30d5341f1fe7c5e2c26b39927ee68a2d1d2e1f4cc1e57fa98158428e92ac28bbda52f8721236d846cca09aac0dda013c9812b27556b207105f8abb6a7b286ae129e0bb5e85de9a638681dafc65a9ab537fee1de242f3fb828bc10b94b302a21f38174fc60ac28e4e8a8bb1fe10637d7d3a52631ba8602a6ced8b1eba00369662bdcad7389bd60c44d657e38120523afcc505e8b092d8b5590d606d1f76148b621fc86789355daa6474670626bacb1463b348983344b6be58a13d257888a2a632abf911c96f855fbf287e0c672463c7d2f142bcfeca01e6551e9d517952aad52a43e513c60b5765617dcb66af0181f718c4de79fd0edd74938db54ab5574b579aad5b364a8c83c389779d273456a98dddf9899b8c510ca5d6eb54aa466f1a5c3ee6ef3041411704eb0b2bf6d506dc5c701656cb5f6a4cc1968afd869edd46267b42e83a7c97df3586cc1180e8542a6375db97cb0d3e50b0c9af4edf1a257df5c53b24028659fc8713433d9ef5f85133fbee10c0f0641a484fdf69110f3c6aa73f574c72c897c866bba8534a2e521c9cea234490ae6996f9977ca3a2256773ec2660000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa4d3005d79c0827b0c26286889b95728863e97b602d3e0aaba72a663e20902a20700fb74de7e2324cc7b312faca3ab1f8f615385dc980fad351434ea06d393f3487a0e0b0b2f46fbaff1270f2c2fd023587b40e267582e1c9d50055cb96e7a7b144a50232b2991c0c3b69472883a2523d958752f12bf5ff43bf1824a2bd878686ec0fe13acdda4e484216b799db2ef812c035e8a5ffa97360b639967e0f11782712b6cfee3de52b78f64e17f1aa61fe0b3e3f5f2c0f7afd102204eeb8085b3c00d05f2896207ed7078ffab9cf5037347bc0a0b3baba63e731dc42d1f70f96efebd5cb0688117aad080a7f75e01e014bf8baadec6208799c863caf83f146338f328d4da0f343e507f0d5a4b8b7a65ace3ca9cc901c951c6c4e099ffdb66bc5e6036f42445c1f3cd5c1681e8aafe3d683cb43ee9c468e0f12d99e2004875f7e8f4a4d66fd6b057329d12b15a8179d965cbf9dd293f7454ee6790b4cb1a51b39d16438cb587c5f7d829cdbd22ca7b3ccf2867d4724ade6ffcf8145e2fbab60218dcd7443a74c4e1d4c9ab911b1fe153889cd003b5535ab04d9a175d21e2fc59043342ea4806e6c1e5333c943f8dc79b7e6972b8c179f90edcaa3126294d4b04407000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b22be861e87089ce3d57a7488af98b6a88ffb039ac9ef24531e4768812611af0388ad521b49e3699764f4a0e6e39d3aeafcb294a6c32ceb3c8ab4dd53888de8c4a45fd73e549a85c5658e5873cf51da21947360381504d13e792f5cea2147ebbb05f971672f878c75939505b02cf8528a30dd363f14136aeed36ac0807211c28485e9383cee45a29650326fb98522eaef3449dccb76ac068b390acbb1fdfc2d887899af55d21edcaab139a24cfd8dbfaf73ae0b2e9522ceba76ce8454e6ca6b1d4b26027047c736842087ca18f0817299068c1821da76f1df3a5271af6ea74ef29c56b4ce9d1dca135f8c4ad99a7ee2e63994ae098a7ca9331e8d99c7d9ef4e7808898bed9048c69cf69274d0024091bbd5a28a21a17248b46f96db7d1568505f7b0be073f8d3c792c866c61e0683e92cb6cd5e8d5c34c0868dbe2637b5a3c2d2ad24954a7499abcb6d53e10ef4755d58971fbed5216c86c009afcff966e43e900e8cb878b9d99a19f7e5f764a6e0343f371898d281e949197799d903f26e608236f4193c86d9bd0b7d5279c39450235272e7c95eee72290999654f1290977ae87da61294d72d117621117612672b28682db34c6dedb0a18de6fafeffcf89800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b5d92b14c890ecd75f74ac08fdbc42f40ea3d7286458ec77d316a445d0a7403104dd76b09beb439c552559518109ec6d4019067d4ec202d2256a25be1ae1dd9fc22f7cd05909bfed2c03d169bc7ffe611c8a7caca557529cf11562092f8253530d9a8de0985b07039828fd7eca54357afe7d7c7b285b9ad3f5dd89e8f6b4916be4b0a856c95d5a084137f08d9545e2aaa7cfa4e997b28a88c886ce795a191da160459e2ffcd86716d5bd3ac578a9e75493d70754ef4d984ab913a0038487047e959cbcfc3f48b98a5287d3bf329f31c789a1c98f8da83a8d6d0477adedfa1305be4a41bff165778f0c1275c91d799822c3b0db7bfd79c374fa412d6a655cc7b5ccbf9e8d0c5f8ee049e68a1fa58eae2c05ae02e3da4388c3d998430c48492346148b36abf8bc2241193fe2f993b3e67d086db17a9f7f9df16ce94d2d09a271a58f610a52dbaffaf2591ff3bac2470202fca01e59a0ef145f340e2a74f324a41daa8d0a8685cf81683123ad73c544a966be3555e69a6b1dcf547329d54a1d07a396d4187e6b229a492a6dc636f99f0fd04870329d6adfac0ccc9454d88ea65ce0a71ee3d6fb85791564539ae534fe6889c1d9c6a002ea0d11de7b677fe26203500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b065f724df72e93a29c660b7037253342ebe13a552878562d43005bc1fa5e1d24620833826df1174cdcf4cab03d7a93c792b87eb238042b6d66ac10b9dacfbca67f2c0dbfa87bb5907b34aec2a61aef6ee5413568700ad7dec08f012017100b243435e4662501150c63ad391e100944334195eebdd294ce2c3206dd342165387e9e1e2b670263d1c4adba916bb33672c025d08152f995ad082f5d33371de6810efbdffdab36b91a52e6bb359057b8de80df316b03b29ef3874f566d9ed4331b912bf722a2ff8459d395c399ff214e006726e613e7d4b7a2a367d5a8625454528f78c027cc31d4c7817a7226c27693efc562f65eb9d1a2c7cf749532f6c9dfc911194c5c2e5719c82a2c98f6d540eb620b74a6c7fcb09386ec35fbd7ebea03a07e5913d13a1d13ce5aaa80181de84717e5f547f98dcc5b74248d12322660d9f4d58f99f403b4bfbafb9bee7ea94be2bc8e259205e18cc58b9317f2e567c784ad2c362889f1dc7dd8f0388dc8ad6a5d863d76ef107ca7fbe19d27a91ff0f55bc67b88f914c74f8ec6b9f21ae0277d0845d33dae37a38fa2233166a1ff8289a1ec6ea1be9d4f363555052cc3b54205537569b7890fc82f89237ebc48c98ec255f800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cfa6f210d00246e566953e17cac078ace604fc0bd90b36f2c103f843df510ad45da89a5c665bc079bfcfc27a55fa132677889334a7ff5d170929b049a31dab1fb867409113289799680029540d7447f6112b4ece734b7cfa1e3478464cadf6b36b8e64122abf52e6c6d9dbea405888f058fe880e6675c2b14d67eca2cabcfeed6155692cda1c687a537829f9ac8999d7ee31b6b1b4f9a99d6c23b1e76e6a6b94f0315b5f3fbb95b75cd49ddfb7459e6acfa0c4c2ed6ed5cfd5457cd359b8ca98e4aa6a05dd1e987e6cc056420fd84df7ba49a5ff56c4fc9ab8d57b00a054e7f07aabab09a56715ec03f48d4ab8efaadcd52b750028e28df9c1e480cb2cbc018f18b6bfeb73b7eb193299a48e5c77d00b9949c463d1ac01912d50d37b05af6636baa7c748d9aa6dfc97d7bcf2124402e3be5ede534e751ddd892b802ec8bb10b5f3afec0b9d821b94d0d23f6ee71366dc826b720d72d42446fae049c7264eae30852ac28798e72828fb2c6153631f91b5e5b2160d56d94c50f443b0f5b65527b3bece8ab04924f7b44298185aa103331fa1d920c5ca184428edecf03734267cd604f1a4e0c5e38c50951019a1dc1af409085b0da78fe198339a7e0ae949f6b5e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111cd5f3ef1212d73b45f1f7f0de53eada461e4f7b88f7a7850bd4830a0f80ac6ee18e1ffd01ef5626b0ef4a4077a06cdf3f58ae9a2e7199e70e05b3f41919f06b0bd9cf4f1404366c6d7783a4fe2055a7c8e3b85078cea89899efb8656e98ecdf55816056a606dc0b11e5eb3c8f22a34baec03887e6b09e16cdfb1952fa5872e25eea433a7864f68201f8a55337255a30c33e284386a341a69bbb3aec1990b2d26625bb3283db42985203848cf691a94c742eaa38ac94e72a3a0774db2621e2620e851450b904c8e086c14d939965f9e47d0eebd1b239bd6594d9e8035581f7eb7fa733a157b87e963bd10e485edc9f4aadab0e0df5bb25208bad3ba26f3964c5713a7f24d087328ce4ba668d83920bb71efe4141f42389351b44a972b64d3d256b7e46eca5a445c81420eb4767ffea3e85d9a0d901c477ecc0fbfdbf06c368cebdd1ef33b36a8a6e8fd64366ee13a557c4fb055872ce2cf6888cb363c97f139db9d6f1dd7b0255bd880d5014e0ba2ed2dfb66ac35c7884e12efea35600356c9082b8a89d87e60b6fce5d215a4fc7061b3a1fa5f3ad0366e8a97a646709c4040a683a5125e5dd1e10d27ad3fa9eaa71351f10fe9fe9b6d5b620f9736120fc9d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008961133417c5b4c6166a07dc1819f20c89b71ac87ef6ef2a985ca383f2abcefa5060167583a49a0ad6c5b4ba1b3e74647a643af43e928ff1b6e6ad7f30c0e1d982dfbe68b8c71725f51bd363ffaed71e442e00621692cd512bed82c7ce76cce2f453d8c9581f7526d2bb6568ab94f7b04a25439ab2cd3adbf783b4b681265915dc977ea620f1a2b5eaa2582b58d17e50efe83ad062bcf98289da1a655f8228b8b227be70df21ea120315d4ed0805cd80eda1b346d8f6143c6b69c9ccc70c2f1b8a9bc0fb926c90a45eb8ec24b6ae88e1af30e8379ae41f9dc70abb7b024bdfb63daa49d1768f0201a6d7821643a6056430f8931e0df23582ea6275feccd0e0350698c282471620cd5307d212cbeb82a4cdd107efd829128ec2cfa64f189aad38d55c3c3480b83ae5b1007f5130ec6e810d40545d867e4fa844e1a7bd8a297a1dd37d12cbf474ddd271f5c6ef5d5942e771ad91cba3fbf9fc74595994a6bec70fab9a4c51d1a1d135c5978f935cfb048c223906b5474de924676e0c4ea7fc5790b4abaf70f0068afe1577f38ba2154809abeb3996d33f13d3f6a2f20b1cf71d379dfeec7379f1f3ba48b2b315048e68abb614022b6a081e062edbfc6fc8c5206a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093c0741705d28a97a915b2b2db741c78cb94f6b1a7a84050cfddb2622e36b5232d8a4505f95499d882915747a6baadf8bd78a2bf20a576c707baead0b5a6931cd5736c1d6205ac967ba279135612ebc484f32346489f1ce1e19006e7e1630cfe4cfb889ea162b7fb00256564fe87c39123c0073a9f9b47d25a86274869fef1b3b1cca8bec8782b7e021dd9c6acb5f2f8a3662b7cc04893a0f6d5c301678092befbf178a8a34dbe1b38320d455cc033fd3340475765ec2b68f18094e0f335ee415c58b86c205d1051bdb832c02fc17c439a0dc2ccdaece6bb87b171d41529e0db315904000b9df7aee7a5717a7521319ae9941e3b3562b9c017e851dc0b60edc03e0d03eb616d67240be69902d80473d4274134577624c2b9d4dbae775a096fef482b1b8c6ff9bd0c63a227acb76c1dc7102aa9934a4740d99c359ea56ac75f646e111cf6b58280ec713d42fe1615dda54d8ade4552d1fbfbdf9b300a0a139e86e5d951033141e146f296ee1954c16c9f30c93bdf571712068a7d89e7916d5e61a81a088e67acbea2edfd0a3c20949416d216b6bc4841ed9428032c612af934ceb3a64d8bde84d6aa4ec59c01650c9e6c2a66df82ce322b45ca2ea0fbf238b43000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097fbecd5f364e116df91d905f612709a5f6d5157e30c5976de572a66f14824715d516b4939b093b6afe992549affdbe4f00b90473ec91d8b7a447d849621e6bdf9d63049b4fabef08a451564167f52c0ec0bf97a2aff044b2bb777094eb3bbeca1ef2d3c8d8a74d005ec9680b5e74e965795bec6848a56010a49d90c8ed5496ab0031fc5d7bfc296a824cd12536065791b097a976535db5c1aa1844d14eb5c8345acbcea3bfaaf58f37a41a27f82936d9913b0f1f59e4d2a24f246604cd178efb55482f0cedd88399e01a1508b224922fdb96fdb739b6d09f8e4b07b249e74a0ed0938785a2847fa2dc0026ba280273da7944454cb6e5cf7e90d4d97219a87755acf147a90f84fc01a8b0319150209c33bff8970ec3254f21a79a0331e999dd36d161a9fcb291163a4511d4c46f02da19b059f80d8a8d43df9a8d74c4c5bfd65cc25c132888dcf900ff7a06d4bfeb36bcab712c81f2cfa65b0229632905ea68fb922458305e82c68e66a42fe33af5ff563f01193115af6c53605cc25bb4ba4501d496ebddae5d5c0e756cfc204c72dad0f695283bcdd44b08731646edb98de982b10cccb97312be3f0c0f7e83718d4529fd4af9e055611db4d981a2b056c3c32000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ff008600b90605b1d1989490695dee532f7660d34bb8f66a153064b8ca602757f2e3b007192d9dd4e21da37d1ecc27d8ef2c2ba959939f92f22462fcb3f17447a08877163636ee4f7970f8d9cd0f4d5844e2e81265d81592decb9c6e475b4b8bb234bb5f9b8253bcb656830d6163ca7e4f4974329cfb5a31f98bb3beb57523464753b18ccf82405bb759450c4f1ab168459d02a82acee0959cdb71584a4dca0b439851734dd9c582a90321b1401544c8f179c7d8e6eb129eb0b80c034800f2549e29db2a37abd103cedc95cda3dca29dad4cdaa335b8d65336fbb195d6c2fa678cde639c68edb3cb89d8752c85414e8cc492221f97a8c75dd16bfaff5128dec3e84fdb0896b5bb77fbaa2b4f99324ff5f3037d97520a6f6c88129ea44ac79fd66c0aaf783e082e8db14c3d76996c3e934b438752ee54e22af7c05b883178f9c6aa086f9abf65aa61fe636e76340a01ff06fe92096cf6fd868f95af7e3ca1caf546d346e5f661e43fb4c1fa8e1ed01366a6c00cb500445f1298ed13a674df2d44dd5f2f6d03103924491cea76c66822375a85b8f4ef8989819cc15e77a561bd4d810e32fea4f4f0a671d8a62e6c8a9b09d3cff5f81d00904ec76d24d0e354310000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000153781136c4cb5a1598b98e1153e23325129b724a783bb23fdc9bb625ed453608643cdb4897c6321605f329b37ef917504b22e855b9f91c0fad79c5680217c3a9e52e96388cd076a510aa36d1060437f5a74f4bcf2185a02fb2e3ae24f45a7470c403114bc177eb33edde4f729aba80f56c1149b4c847f94eb0f90610f99e796d5214226d37a6a36598b4cfd9b2d3c17a6eb0b1291f6bd7df3e5fc91ab8a2245e35863893289563a44709a1e0dc86d8f54ee5e59a2aec6c5ed6b714d257cf81e0e35afc2c7fff5ce26a63b4b05b5464ef030a72212e2d31c2b099ea7c88f0cf8ac2491743d0dcb2cb78fecc6a26d2c69264976b0d8cc85beae7bf52f07d6e8635f353a0431a2cca405ae38967bad5c0522dfd2c204953fe476315b09de6501cae6b67e73e151f564306af2ad53d77440de111f4eae03b3d12689398fced92535fa2d818cf0c1cf24f6b62e715166a3dd0289e391c9b8260884d7a282772517e9fab035c548cfd46d3fdf6b0cd1205a6bab929f541ac3aec9d32769a711ec9d27655c6e066baf5b0c2d7b80095f258a222e1c507fcbe16838c5076dae6c66eae512c174d95dacdb41f0d0dad580755d8ba1221130358fd8d49628c97dd0f15bde00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001778edc9e24c2699bb1765d4fde1de515f86f03945adede035e1cf6d3ef8bba45775ec1289886d3950b157374e678eb26de7ba393adafc0d8365d03d74a77e898b94e6317929a500523e7d956a4ecc40d59cfad0209181900f2a53d1e7b8a4bdf881ef439c77fbd4cf12bde7a114a238b0ddd6b24b427378f32f0eccc616b38916c577e483ef238afa222ca09d309d83330a7baf0cbb827f2f27b58fa05a279eb76b701c60d5c0720db1a5e2410ff6d52031d1886120d0a7c9d13baa271a96d20d5966d547e3ba1c1c75b1f394693c1b660755978e0837a24b493688079bf4e84f7889a1ae80846a4bc7dec2fb4b65ecf94e4a5112999c25c085ea29d14876761baf56b3ab092d32f1e119a9e1a451c8276b148e18a75b41efd4b3ee89a824029cd5761f7475efe38e62853189f2b0ac7da8991dbc9b638ddd3fd3de7046bc9048d255fc561b2569db2d7fb197ed7aa1a2fb641adcfb37872edb71040ed4ffeb54818634b07f8fec342c57b08d2ca0892e7e4e4a2749812983c123906a0568372642141b64df4156db120f8753ac9969efb4e96f8089102dbc6cd131cef22cad7da927d0f5684ba8abc627457227f7ecb0e0fc325a261b44e745b6862557304c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002067a3b1b28c507d58d928f5d689b2e5b8546b30167859b0db52c11e77ea4f627017c6e6317e145ed5c5814490c25a674bec970046e07e5106c2bf2510ffe91ee0aa5be6240206863cc1543ec7b5649e54fbad739c17e74f0f392a7861ff86e8b1994f6813a7b9e2d8f7be5d66b12b410c62c035593f86134d1f00ee1a09969476082430e035625cb9619fde48fa5dbc00f18bf2138d88c72cdad930590d0d872714e81c78e443c04dcd90b68621ca914a2dca6844ac6d9d536a2e2b41a788830d42f955bf88aa3cfbc822f3df0d61d4524bc5505c40f565dcbbf5eca6852ae2ee7004f1cdf5e6026020b7d58a521f485331b4c3cdb76f26bb3b9e05377c506207e2c303a565de490eed1d2f3f6336390a0336e5c1c478a31298a94dc3c8943e34d7d68b72660741fcaac7a51fe3777d6ed5b1a32441e82e879b6c55f2644bbd9b69b9cb75f08e0b64b5d9c6e2515f11061b0fa467cc82c0a2c9172ea94f54d03450e1eb5c7b3a48df9d044d22d78825a790336e84fdc06f4f6e3829a09f2d57ab3eb97b509eb9087a2003a34b493692e10669083a9ecfe7e93ae28c6d1164f43535f50d6df9e15c1ac4815af06fd05bbaa6d428045522e6ac2265c1a971940a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e2ad0ffcae0056a3ff82ee193da1b92826f277e533a32b7f3d359489c31fd6cc2eee81a80de0ca6634d235faa65e2c52d6e053f366f4e3d299dd392aa18e7ad282ef66d619c189c0132149960d6457ab81b97783cd5e769a6b2c4084c9732e521255dca576d21489e774c6abe34b705f2deaad0a27f66e9b26c2b26e6b5a04425f666a6839e39f5c12b841c2f9497ccf2a01fcaf632bf0aed43699cc0d96a45b19616c973939af1cdb25880c6bbc1586de3c050c03131deabd742a7d90ba703ae3f6aeeb4dfedca2f82909f181f67b7a4018b83d6b1f8464b8c0059b17be8ea3d54a5cb672406b5ccd3a84267c643c050fff5ebbae8cdfb7f99adb83119c134978de8c6a4b8bcb45edc437d98ad815da3bc357f11890ad6540608501887e519165761ae8f463503d152692943a72f760992d3a3583e2116433555955cf4db6e99b3c623687f8e1d5050a802cb9ebf39bd7a6a209f21a4963615939c7b9232ff3f4746ac9314909fd5ab896b368062b36f5ab95d879fd747ee341e42693fe2adf116e4082157c9f014b0a958aaf7ae6fc83c4edeb7e5787a2367f8b5160a25a46dfed93002d082c8251ca772b310c56936272384e027ed1751a3ec69b5c821180000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000255f4feb4b1bdc28cf2c07add0a344f1102f473477df63ecdd87cb1238311f812525ad0af20ebc7c79c191b7f7e0d2a1820603a3b0a813e16b14155e52531d8c27d3bed8112a0fb6d7141054953c5940320f6e0cd96bf6c6c718958046d15d47612c35355b64ed35624a59e3bfca8c99367a01c30e3670f7a8697fe369de50433035fa675af29eee3c29a25e849dfd76f83da88c7bbabf8fd574feb7538a959f74c5580dbb00a4a949f58d54ccd096dc7b81f9940f40c1c74768b095edb07349a8730c1a7374797b65f704ebc7cb1e8874da5204282d6289fe84334d3a9f6755ccd3742b4da0dc3bf29902282d32fec32c0a693300b856d6231f30480aa433cfac1dca9e8be9e01828a70c584426950faf14f37e033c1de0c61bd5bba53301917d6cfc41c8fbbdfb2664643ccc58801501c330b9ac8cd93866c295ec75550d7f55dee896936f74393ab05b2d6416b0d03f9862b9e07c2a0bef6df904a9d8cd8bf06c77d3dfdff2a7c253e0f9e96cab8d0b650aff58899ae7b763e1ae5964d43889a499b4220f3c9086f07b2cd23ec5af32af98c4a8adc936b2f04adc1af566058fa580ea9da72f1b04aa16b33e6c4f4e959e56bf7815164d44a5102282b72ef10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000844ddba8f57f855790e0077577a5f76a118f00c64215b740476987d3cb103549d309f6371e01b0a9c6af546727b1bedb23296121be4304afb1bc52406afba735b7eaa0aea027ba1f9d65cfd46b71c2de0660763d8e57377fe34c066d9935d999e70e0971f4c8ebbd4783e78f6384c8a034bd4bf1129731a137dc5f58f9f7db644742a6e7fbfac0026d6deeeecbbbac024526c323e903bb04d0ea6440320ccefd1e209d28676e3c2e375c7644072dce239be198194478dac5b749ee1da01e24e182b94dc8b16d6259909dcf5afa1a965b868abd748b2f9850021deee9bb0b22c456226c874cd74f4e2fefce2bceb5bc21632f288f1ddfcaa6763e1b95eea3c12e1c0425f96c95849e03cda3a7189ec346fe45d6e679e76ad6d95b7d33eefac568612a60d94c912873b1c14a4adbad9be7e6078deb819fa8741ead75e5b37b1aa0b40db3d525415c630555dcf50621434454d5daf62cbe415c223aea907d7217e8c1885b47b1efe80ac0af572a5bd465f33ffe1182184067cb7adab059a3712e5579d5e5791330a977fd35bd0fe45e141ce49c386681254e4bd3d243d807f2a192008c01b47d6259ccba120a0dc73d536926bc7027b25e980f10735564e715e4af00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000259a76913b95c8df31eaea4cab48fc88428d180e3eee58268110ad05ff702e449b483893933fe3825988c5dc19f349d908a99e56dbe16f4db34f1f7ad7bfdef27fb772ea7b6da64f1d257d659a0724253117729435ba410c3aac03e7c433491e55e1a6ea674b27eb082d716b2ed8e57955f1e80a5e100d225008289403418c9aeb1862e5a5ca5fdd32d6712449a974471a37963426549b56ab9387c37c23bcc99b2d770cd487ee78b44f6de414fb4b758c848db972ef5db5a3fb8bf4bccef115dfe298b90e269ebc7d13589ad684489e3c6653631d299aad2f42c213e127b81f354c7d2b6370820e6b59d0a32afad2accf1d9644ee01f1247b485c94c87938e80e5779f125317d992bba2c6aa04f3a9aced88a00fe635d16bcc65804688a322009c06e88a511dc50dd31213413e611a20c6a1d7d9566add28dcb2bfbf61adddbe696b2d23f30436dd3f09b44e2745e2c9fafcfb6de35db5b3ebc8093c0908b9fd45341ec5b307db08472c42d36d4954a3170b7846c370a533b81fee106ab43578bf8dc606ecd6097608f1f881878bc70bae3d5f143630c5e3922235135f37c262b8f0295df9f39ef347c02f861a71b1b4f325460d6abe739e4248727f04340400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009323409cbe4fc144f703f1443b1900d86888e690a8e0cedb569122380b618ee82e7d39dc4409a81e8f0431a02a687958278401ac4f796b1c363d9e759cc247c9eabe2240c2ce34458014cc6dc62ee8747df9231adc9b46fb6349fdcbb63b393f7036e1b241b668bf7421409c1db345c9bd2950dfaf0fb98fda7036357a10ad1198ad303d5966d6819b9bceec2a989479a774bb46b02408ab100a8217eadd0ebd878487cc244fa9944b312af635d9ddffd3f2f460b508214141eefaf8412b60d3dff60b6991f74fd1e83c77ac99724cec29969a82c44b39e3ee7dd096f7bbb8903922a72928cf89d379f6093d7936eb9c8d98113109e52d08fadc58e9a5c1765e7cf4599d4195112f2d3a1669f1ada7d8d88b535af1c46d883dbe45e0e152f5cc6503808bd10137c90f2fb99e0ac8471649d1d724600887af394aa5a7c2a64a63645b0b687e19a568cdacc4fc371676beeebb566c454c69f6901352a738e6144939dd7a5d5e19681b635f9818b855818656be3d3f4dbe67d076b88a31cf7ae3becf793eaa07445339112124a7c54449b976ee42ee4b04b9aa8d42622e4a335e397bdde0175f2041d5c3272e7ff956e0196c7a7159d75a16928e0511fd5964418400000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b4840175966961c6b146852514c150e9eed48d426e801cff122406c7f6b1cc3f179a803bc16059fea172a884f616db91f701a1633b31fb5f744f69997a5120ddf4cef28b5f73cc1e5610b64db365b20d536c5dca598d397b004d6f1194c38cd7139f604bd3a5ef82fd32739e9d641f8e985ec7fee8edb5c995fb14a6871d4c933065d0c2ef97a4a4ff01fd512f7752045e58c908ab6000e998e176c0631684b20259227a2b4299821f1dfac486d181bdceccec448ad71597389e5e0ff68440e869c94169f195bbb8d562791913b8c35e309495e49a95286448dd4f9f27092baa2dfdf1bb8a08b5d285bb174f4f1f0cd88ebace1848dcf141a169a4fb61bc1ba507fb3249bab70dddf09507029121ba288eb6163d372b011f9fbf1172a08983904e13d1b5abe317d021d76d190f06c4e0d85dacd10b498fcdb5fba972ad238fdb46f8604a7bc35a0df77cab773f191d6367c8b36e3648fead4cb61558286f20f4c1813246dde3c60c55515a388409a19a10b690b14f1ab74ee326a1c79358b857b51cf198d3bdbf86e4959869ba123ebd1e07c317b73798108a8faa463d7dba80017002da72da7732d84d5ced3af1c3269691ca4027ac8c4c514ac7f8a72b8fee858bf02ade553bc82ac0dacbbfb414d662167babd7d69d93f98a7386e05a0a9bf7654205499169d0c93da3b5eab7c9a184cc48fc49fe04e7e39ceae7e5cd974f54dfa270d2fd50ea252af1156f03c949b5f50f10c042644af6a2f1f6935a81772906d2eea53cb9a85380ee505e7337e914e3596353fbef1a42678593e50663ceffb5322863284409cd809d47198979b35c42e4d1dd3c42b7ab9104436bd5dc48f6e34219e378da5240f6c4396c7b7017f50495ad251f8d081a942313d9c0760d0c872087201ccb691173483051691229c0909a94b1e10c5e62b665075e03f66822a5c198b2d6d7de4eec14d9a35a09b1a06cb0f09c72f9cc395d572eabdd99aca459e2bd61bee5b46d1d11e1052f48560633b94261348ec61f356612e23f2087082e006e63d3d1498bedfdc0618549e687fe2a6255c71d38771d12dd81f03fae5fe771e1ea922f709ace180b4e6729ff1c0d44a3661f498282a0f0230bb70ac837f3f29edea1088ba1ffce2d5d02ce72199b80edb872c4ecf3416ed06c596213e79b82d8ee17a51ba42840647e15fbe7f4c4cb19096701895a3cf59d4e438b96e381f09b717362d10bec409276bbf54f1e70b0bf1a01507199476043035ce3231c3da09f8c515d4fff6a0e85ecba5ced57722c47adc35003fefc0093f9986a0c5772400d087aae077c2a5186c6bfa50b06639eed515df2e1530ea6ffe4616385cdb530f2988561059aef92a4b08bca109035531d6b027f140f7f2ed1a650088cd2b6025c7eac5227a699c744263d37cd50d20740ef2c0c6c52b91106547d85d1f4f8807c3af76b2b11faa27e1b87203f87b8bd28397ca2ae91fe6edbf153c1fc9eeeb2b6d7a5aa385ab260410aaf38776446a2ab046c040ab6537400f2e136d9b534c1a843abad08fbd8fe0ca3decef46f7a30b27f7575f41d4cd09049595ae0fabe51376435d431c19f5daebd3fd1a251a61e351c39f95174ad4524ad10a31b2e1c426e0a2a7162d3e86a478be5cb295c3c117f39756c6c719228f3f5975bda5d3670b1699836ae662772c64bd32be2f8085982c2c52366595f249c457034c14bfe128396aaedefaaa43becd720afc169ee3c55aadc90a33e9302923b852139c5cce145d7b10dbbb6e51f375180fc3dfcd2313b24c37ddc343ba8c9bd3c3c7a01622127104deae7aef80e4ae1869baa76f3e19fa2e12c9e13ad177de2c0babdf7fda0c0571568ad56a3c251f3494aa78b992f834d5633ec802c741c392817335c0492bb6f85317ea1ed630f9a5c34622cff37e135f9b5368ed5e2a9f20f0023e743d27345dc583194a7993b01a08f333edb8d50146e85e6af5f2db0ead115571f5b92e0d5aea3814da343bc2e19e6b390464bd67f8f8f15dd8b8eb284ad13c766feb1285f0562f171ce08bd1a42a8b46a4097d77126f8d92e7e202f1cf45e1fa8dd20202b798a780917b2763da5bb61efede8af4c116ff69d74d6722923e9be5781d2d190941ea11a1186853df35fe7798de23b8c73bbaccd0e334bfda00c132543d061ff5b04d1d1b2209e002ee4f2e7594c6e35db77e8f01be10cf0f1bdadbf4491c512093ff533da5c419329d543948f4372c7f7ceca81e41f3abcedcc00c685d1a6df5439dfa28655d8619dd84041b03a2aa71bed864cd143630cc6c4bf345a927eb1919802e73a10398f0281393f8e9d78d76590dca022b338eb640d11417480e97599facaf8578506fc4a02d80720adcc9a6dcd647d4ca3593b7e91d9ad96727c2d80cb950f5d9a8e94dcdfcf51ccd8876c6282f6170b8c4994a4506ebda0c126cca3fa391a8570e6d32e7705d6af936f64690ae8c8c4253ec20909a784136139e9add09fb9c4218063d1044106365c7566201367f13296f96de03466d5097297b8d708a4333dd9d59236a2257e70786c89a6f065ad35be7aae0c2a7e03e7b0f103bb40ef537b3c6492d201d2be93f5f3f76496ca8c15ff167eb4765add86901b57ef0ccfc475acec1c32c7de83997ff88100bba49eea06028150161da2c442c1e795f15f86311d49214818a1a90f47ee39429ea87b662658a6c962ccc166e05bc5dd1dac647f202044edba3dbf46b995715a4b32723207f08cf0a56a52e151fcc59d6ced99f59d32f6ed1de726cde92f5a2ca69d8924f90409996e6c182fd0855f2708dbe918c820076979e4b03e2c3b4b23437d28788bfc8fe6804c12086273f1eaadca73c13da098bbb216e15ebc1ef5836babbdb53288df25706e2bdbc4015f5250dbe2b3717886c7aab4e2584653a74f7f9360c0ce94e7da3af18da04961fe90aefdb8c46fe29212d89d334b59de073fd4dbab5611f8e2fd58af1278b351157e7495d76767f8d3f8a50869d15bbfd5d4b193a0613c61d260b9d3e3338c705e147feabbdab07a7b40097a91584733a942c3f0a02e08f15df368bc419512205a9b61c37c305209a7004db04b15b21ed8b9dc24f8f218f3b982b9b428f2251020258f6436a2b9db4e3074f6205828e6b4ef913fb9f4dbabe7526dcd8e8baea18c574df16e641a1e6feeb4aa6f87f7dc75b6a0a09148d755991307a59f31e5c12d8cb45763e8074426bc3edc69be3ece120a0cb0633ec48ce02ec371ef35d95287325c494a3d1462464cafa7b785a98b80c4d4cd8bbdcdb0080d59c8241c43a025b3252e983f6b01f3ba78c75543fe8716b199a0611d323da4c16dc28c00de92beccf942e8ed13bd2a0a3636e7bb1e8a62b2a63278ccd77420db2e20673caef2c7597664b372024ecf1610de3851331899327af78749ea950fe426a05850b4002d80101e0d24a9ca8ebc221fb757860730c2b6348209da6c2e9ab98ec710fb710ebf94641d6240fb4209bb1105e2d9004cd5dc6d4a969ee976805a9a33c5da1110131fb184ed861eade74739f870b5264c0c4a05fb4c0bf862c4050697334391698bfaa6e0640bf92b0a3e7b9c7d0b0a5d2154bca370ed370d99dfe6e35b4f2084f4830c400a25e9a6b712e0ee529d97716e93d92482c5555762010f3ed5a78060392ffe9f6caafe9069e182d449773203f1ae656bf4eee00912fb8429d32f81b54a6acb14aac579c51fa4e6649216d93c24f1c40c9c63523ce2ebc8f9a2dcb1d84c8ecefcfe362fddfd78190289b5f7e80f45c76e43211c4acb6e7b19b2cf625578b283b749812483777cf4b6b7a158f6b8527e517e6705f93a1ecbf0307552511bda72cc2b5ec4ebe836ca932aefb09c83a7809b025752c4b67dcd9284f7c14224b1328f43714e4246ddef8510d99970a8ae66014e77221b999686fb7819122e67b84b708814e2ca18113a319e9535011c9b64524baba1637e656760d07e112866553c2544b8c828a6ef8b35d5652fbff66128d89f9ef057f55b4ab2764da10034cd174b26b83d0aff85098288a9dfe90eb7f7823b9a3ba47bceecc0d8fdb2eb498e8307c9dbd6715817a39cce0a5fd757d746844d1b0fafaeb44c22fbce2079a278c4f77fbd8feccd496a28bcebfae77657335fefd58fd0776f87bef324d10447effa2731e8ad24b60425ec81f1115f0a023ca023392cb1c9ac725e0138725dc9e7378f8d323d4192204254241ba24e49f458ea706356f630052f4f916841ad7126c18f507a6003bb94e495c898bc5792b03f57a97792d50dda87c2219740ca7ed2cc998d17b5f4ad3c113c6d0f7781dc404a9af1477982e7ffdbee20cba295e024ef4b3a88c993149135de2a18baec58dd702bb33363cd7b0d1cc3488380a4b30f0b7a0f6e943845ec1101e69f1e60392b355704984d13517ba340747860fb9522aff8777c0e82bd573a8a88eb6c759cb577144e16908bfff92e5667e460667ce7aefd99838e3a96f2992199016fb03bfad5f1ddde188ed7731b160f50c2702bbcda6887fef66cff2b2de7c12e79220d016ae35724a9ea3a8dd99cac6c10a6ec857b3b2d72ee055b3a7b64ab9bac2cadf60fefc59ab0cced3eef6aaba101c67a8f26ed1dbf96ddf10771af9cd400566f3714a87dd3ee90d75ca78314779214e6bf3709cbb0415930958fc1ae3ccc6a52f72c601d02ec088d635eed1ca611e8f9b7bd1f9280c544096ee15acd29e60a8737ac03560d580251ce965ad78d72a1d8fb4b8f1005b6355fabab0d3d4d330d5aa2be818975b244df0993ecde2d11bd3592f2da7a8a86bbe8cc37b78c482dc55021e401cfeb1850fb95b89650e1d2c3924fa402c6b6bb1eeb1321357400c3cf7282e0605ae9c9942896b846a7df31786beb3a767117decf4b438a99eef1cc83a3b7adb3297fb707c620f6918a82921b0f8846edb79931b7d7f822eaed97727ac8c9dc6e7e3175ccf9028c1d16be21dd0ffeefb5e914001eb6ba8627d82ce4655394d2a1bc984d0537e3741c016890b6f28d02f9d5a27bb2ef555e48aee6b08f4da682e815c68e02dc4aceb3e374420234fb5400a70916a656538a1f1edfc3d4f91e72d217d4908550629db36e43a04ce84f8363d99eeb7d8019ee06b041ae6df37906e8cbe839c645f8c219bb12f22082b3f536b9cc0400094996ec7c88a3831b637816f3b178b4bf99717c4090c08579530e1c0020aaa77702427a4cc18aa155d8d1bf48d5baf3da539f4b7970127561c5f2c225f30576d447e893c92daffeffc23fab73261dfba8eaaeaf565852f5ad3b8eda23bfc0c09e03f422c50153ddc15888cd6b9e33a1f9100734a2b132621b02d9e1f53a68ff35214cf23dde91e08a2adad911dd49680890aaaa7d41b28cbf3fc5e974e69e8bc7680cca546c33d6851b0c50a6970102905a11a29458f10b4ffa42bbd2e6bedcef62b729549eea524f6e998b2814467bc40cd5f05d48e2369350662aabadaf17e77430002723b972f590260199683053b9fa5847109c4066128b499a3f688a0ae02537569e8421a78b8f918b4cb3964d54c8504e625f60d7b37266f6f82b706d7b836be9fd7dbcb0785c7f1074a0edcb42061c0b4d80c209b750c6b1058130dd64c1464293abca2406cdca915c8a9786055faf42f724c0c6aeb2da95b8b3542cf15414a5b473e6f853bef945c75ecbb35e2d4a33664451911cc2e2f5dd88c7b3009b7ba8fd1ccfc5459969ecd776f393f41f427fe94301a08ba4547578e6d35eab5e5f756c1c41797eb177fbda3b7bbbd4780d1fbc456003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000003118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000030d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000030a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000030b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000000329a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000003141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000000325e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000000312978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000032daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000003189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000031159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000000305ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000000305c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000000314d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000000303db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000032ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000031213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000031ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000000314fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000032b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000003305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000003280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000003223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000000317a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000000308858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000032618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000030f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000030e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000003172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000030b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000000305bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000003137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000032e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000032297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000032608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000000318373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000030422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000003204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000030afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000031998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000000328d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000031da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000000321d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000030ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000030e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000003107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000032f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000000309726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000000324f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000000303c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000031fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000003205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000000325110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000003283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000000321cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000003094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000030c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000031f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000032421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000031fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000031bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000003304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c0c423be9974c39ac834d4282f58b89b15759bd9b0afe6a86a87c52f4e4389f61d837be893aacda87d9e65843bfa8150ab4656c21c6ee5cf505b53cb92f0bbdd3ffb9a483191fa18ec20518d03864293f73a5c3dd708e2f0fa653fe5da72dbd9852878f6f5fa559b5680f98df3fcc12b0c01800c30babde1cb4884ab17d808352a9f945521a311024bee97008d5955aa185a85821f462fc63bea83c4a1860b000efea5de110eff735c044de2b74cf6d8125ac1e93ad649df88f75397bc6c83951d8a5c1c6e8cdfdf6097c0f497019ec9e859301e628fbfd19e22ca1bf97948673b6dabd5fe68224506ea3599f4f70b82d15bfed2f77574cdd1d1269e7f29b17005f67886764d091e18a1e4cd1f8d1fe5cf0a83c1b36808f3f9743f6f9f76fb5983765d43fd8213ff8d4344e5677e43fb39e57180fc6d45a10d2b3de1580f9ddf26e372fb66ab5cd7824857b2340ee7d42725b487b0f94cc2c1af38827686db8fa2f2a6acdf18ec4fb661c786a44244ba2cc28d3b3817b757c60f555e92d036dd0bca4b7ee66a4e73397e5857841fd6202ce9ca9a449772690b5214b225963f30aa749d53787c13e6585951413e405f3f00c82f90663c14cd6d10d19194e8e1400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d44d07e87d5f19d2d2e9a465efa1f953355098a03fa8540c55abd573a5aa9934f04bb703cb1f868370f03baafc306fcc6976d0b120b13a9ac8dcebffc28adc4ad4edd21f247a5384b596a1e5d0222f7c1e87ea1008e4ceaed166d009e03ce62c2d702a8ac69a054cf4722e49c140eaed7f0d435bc3008cbf182ee58ec7cf5653ce40f0b0b070b2c0c35121ff170b2fca209ffa85016f131479cd66c96fad54a8a20eee084f350e6e64a27bb002785c253458bace75457294557778bb4b6e7beb97723d54abdb77564862bbbbd54378b531055280fa97fcf1bd650b9bfef54843cc4fc2466ab7162e8900c9abc9e4c9376f235bc03397099c3a0a625299d70ce4ddef19ce59d5009a8d358fb7ecc80d37d2dfcb0df727156cacb03c09b53b7072748db8e69a9040ba7b3dc451e84f3d4d76ce5740629170c1935268fed2096f5df0f62f0d76e3faad74e09220f04a5546ded04a01c0be2ade0c067c0dfdf88f26ab3ed2c7bdd043bf769a7d498394bb42ec949a8cca398f855aadac277002166ea406845f22765c58e7f6193765b73d45d622827dc604a5c0e9b539896b12ecee4939919fd55b7057b56e29328cf02b19f27d0b68b583d8d4678e0c03c6e2de00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000995e44d1e04ff85763d72cd3f022d933fa3367191bb3791009226c9f9de5146e8fd1cb665a28103cada928392c12f75bf69110d8471a765ed7dab85dc932f48861bd0089b37bbe95f8b2274e48df387554417209f7ce5d3c6f261e6343874b4d5890ad253fd854d6d9715154656fefc1a95a0abf11a85fcbf5ab1d0345c7dd294d8c282d09449371f47186c72a6d08493205fba0223ba335fe0fcde13e47ef42f27b3df8f3df2429162c7980f541c1ceffc743133aa48859b7f2d27c1104a36244182a3a44babed0707332357f12f3f79c5bcc4d49bed2d7892001affe53849b9641da1fc919ec09780243918dce6b08be2200ce4604a8616076d36ff227338e7dc980af1002744a19e2122f2cccd979329c2239238ddcd3c3a680956eca359c942b96ca66512d06e5f33b1d9677ead1c1b9f1b2ec637b7cde0a7bcd4c41fd84348d6f45ad38a8e008ad0325cc07bd98da532666c20acb27104a7612648b16032733dcaed1bdd089188cc5b0460c42e04922f86b4d78da6ee9dd075f7c5bbb7d6ec61a365219b339407dbc3b8a7a9af07141d2a3656754b0b8ae97bc1779097d4c722e7438beb804c40ef0b3264dd7ddac80761ce40f04b320e34637f132a41300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cee83fc1ee78f61047795aa490a72fc0ff4d27ee8a3bc3c32526c53ec617d54c7b65de3a09827969cc95b73f432efd12d8f5be9daf9967c65c1e55069e0d63c1cbea5ecff348b7de361ac2d6dd45993cb742d7c4482166c1a85e1ce3a9584807f2126798750c415178e4e111562ed8a733df9dc25ffbead24128c1224aa9349cf941ea48ae8e98e7af71095f14770a591dfca15d4289483956058a32616f53e8d33cd58ace66e5436f9222724504a1a461ac263db0ae0cb6efa35113a0f30dc3f10244b208c67859da0edbdbf3f366bf3a5360055f537385f9d0b4a4d84a4b134d467d05f63d22c1c1721d2bc50d02c6e829bc51402ac06c3eaa5ecd413e1cff120488d86c78b061d156e1297184347a53c85c2c394244d9f0f48deadd9f88567cdcd05ab1f1ee2e738510503024288209ce205ea80809042ceae102f613e3ee8c6f6e25a9383719746f2c67537a44e7ebe0862f80ca02eef61648b3b7dff533737aaa12e92789791502b3c60a005b72fdb19998022f6890466178240902ff0a23f5e1f077e730dfdced77daeb1435c1d1a456448030cb5abc3ffad7a5e14617db9c80fc4728e813bc371945fff071dd9051e13a01027a0d25466de71c9e3f8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091736bb05191a52f3edf9f6fa1759a43d20c9c74a9cf215731e5b64c454f02723508bdf2062ab39dd4d2bf572498f50cf056bdefce4ddc01f96769127d77c1b55d44965f4e025eef3a3bf654e1ad60c448e523879ecb884136a801d0ee011464028fc08c466c7ebbfe0225b57e7a5fc772c0f4baca9c2468dd1790f9cd80c2ae8858ecac232daee40b2174a9baa6cba1b2b5920aa04009d3d07be2e72320087903dcbbb8b4b767d24596f13a06cad16fc8ce583e39358218917cfd206d37f756a4f5304f4a1afe0783c527e7fb48c35be9464ef1576d584404403be7a86fd795a52694221c026ccc5eb40b63c2f1931db6bff56e058eceda9e2da9c3be533d9e443bdcc6d3e4b0fad6f1ce301e34bb731a450425326a8a1be67ad9025c16416b604854460311ce27948bf0de11ede8becf073e53602d6b82a24efaf8f329a727856df679fcaf2c9e3c90fb1e5251eb0abdd6f4d60da763f187a1f397ddc29b05c247150eb5aa2b0d45c819e7e139acb144f2c8bc0524705cb9162d5480da191243763cb88951105bc82c45c360d0b625dd767103fdf1c465f4eaf0da54d1034ef138331855aaafeb69831f46af7b82d35e7db33b61902ac39d2d6e2f7cd8eb3a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a46f386cf57a0501c6101da6b8c40f08a178a7b9e2af9b63578677ca3c4b2f90b811b1f87f004c62eb2f1188f1ee29727e6549de3b6c1062cbd474613896c9266b011d5c821dc51707b9f82e82834d0f473e9eb27a0ae2b5e04ff309014b64e414bd48529b699088f943531fb8bf07e1c41729424dd7be0758f2bd15c5fa634c3a952316339157c7117e76dbe1877292bdd56abe6ee3ad85316eecd5ad6204dca0c31abb41d83b4860e93de7756c80e01b12b05c3284a544677e81910831ad0285b29c5d4e579c7add60c085cccb163c8487224caa274366558223ebbedb52e3dc6adb4920bba53dc1fb25f466aedc2df77b230cbcbba9be7acaf448bb17158081e94e2592e9557f1397e50759627634a33e441d95317a66126ddee33125e8155e086135930779b73bb9d01eaf72d90feaebc5dc777d1335abf9315ef3b6afe3a870d121d6f58e81b8b62c4534d78c2d1f42da1f18d6245199b9e4b4643af2f9d085a24476c8da6b03cb3501674e79bb424b3c251ee902ca7740f396293085bf186b5f8c17b1aa243f74d9ec928192984d6c84b219886fdd0b71714633c809772766f5cc7c3b4dd995268ee41e55135bcdef21bb1cb083dd8193fbbb7716fd80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab7a59795246c4909303981bf8428a9404007db476b785e2d58db54716f3d31885dadf68cdc69a4303cda51dfd90ade8c6498b878e9ad32798017c32e05009694d2aa48bf923fe0642d99f457c58a587d84fd20f717d5636fbbcb68e3c4d1a65023fbf1e3e520d30c7767e4489bdc47df73c6ff1dfce26ec9f265f4c1d532247715f77d5a1c84c2ec63b7e990c3453dd293336e618f76f7dbb04e84a027064b992f43752f70e84f41bd096c0706286a15938f138f9164326d3914ad7348a29e3f65d53fab5ec040d95a19201868196731bb21c32b60421490a77ee3ac88221bd8210126503965f615e77945628a61303c8ee9d6c905d64b04ea71d069b8cc956c51bd97543c5ba8aa45479af922fb33711f310d3782f79aa9761c26c6ee1bc2f15118f2785338c37d2444b6bf73f449a02cd43f22e19c9a1c369ee45fbf8101dfa8e6ef7bea73f9f4058eeb1edd0b6c65f3b74aec4d097b67c8104c574e6c12965ddfe8c37df9f1bc8a3fc6e56d78eb5f59e321c9b8e58abf9e371b89ae86207124c430e0a4f486ae0b6e8c159b24186e37b84d5ec2540f983fda904b7c324baf2f8e2268326cef6607fa4da9e3f25c89c892714f62473340c484a6245a3647800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d5de46f5603ad519f1f4789d176051561340dd0f3c22e67da094928bb07cd87b2c64f61137607663b940a51c20b77929b06bcb53d15d1d211956c0dbb4a3ddc79a22f07f08b004b8d34f5a04cbcc059a717ef5980b3f49ee02c251bce76d26ebb8fb3d236b5ed0e12953baa1d2b66586b12c11720ca12ca5aca1a7ce6ab550404cb48e1d19e1928849ddeff06b0caf3521814beb71a0efd36956ce504798403e29341170c271a53e84c95f1fd4c10ab1a8d57484a9f7b72f64f07eadcd2d8f470d583973e8abf765a5d20dc2cec7bbc71f43ee190d350962d0e1a8f31ed08c8858993a0a45ac968bccdd7640aeffaba4e663c0141626810f1efd92ba410a039b7067f3bf5d9fdb1c9f6e390165c60127c5c879d1080918ab1e5145cc3e6b8f8f73ac72f03bf40c3ae6381a9ca3351d62df9da1f49508ee41368c1fb7e67c99d2aa4f113ca7dd30f14a0c95270d2b0dea2010612e463cbb23dff7313f2ddd5a836d3e3f6480083343a30c113af609352260dcd5ab3d38cdbffc6bbe23592b53f82f6357a00f148bdb1b5f01bb0f9dfc57bb82ebff2fa5dc10e5947b119cbe062c488efbf78e75900f752e71ea0014a853e6a901973a3c61b17d670b40831691a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c32ce0f9c1f944741abdc687efde4abca0042a5d67fe49b8f7c37607b0d10274c7cd5c7d7e880826f072aa0ad019ca079803ca460b92b4931f6f18d76469c875f98eb0d661842ec6999888f118b2f98d3723224eb1dbf8fe19370be5e5422bb62e436073c12f93f1d8b50a63167de5f74180c42c100bea91d41c2e3136a2df8bfb6e07e91bedef1011aeda70bb25f08c63178f6663cd6bbddd55d5d76c67de95fe39ea44c65d10b3316a0751d6c97259d2475058a9e7f3b3b9b6cebf8b4982ad1475d6f5a68b6f86f8cd990563d73c53218878d2feadace08a20d39d502f20afdeae28e99a009a09026b49288b2c61d1e5272b3f304b0ec8691c4f97bd08e05035ed38e35e3ed302415a0c9d3be0a33bfc56716a0490596d083f154a0e33caf0093960ea2122f46ff7867a47383900c452e10eb9dbd089045a86c4b924cceae25eb3887e535e8f13b58abd89cc7e78bc5446dc13926db47a001450a398a77193e27f34c0eb28d7eaee5b974131bdee5c7d121c49018108ff5c63bd044cc7f6525be99969962d6e32f11e1bb2a715cea350077001cd9eb35523225dcb6798f35e567b846f23c59f6c8bf169ab1ee1ccac773935012f154947eac283f947fa4000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d00d927e6cf2cd3d985fccdf9715ffd30fcfb44765609d5dd6fcf8316120debab0370496d3f992b92f7707b0a4daa21bb67d448b2062a481c8a58fd685409349daedb7dfc6d0804958c102e0a56cb1c104ffb3281369810efde50fe4926a2aad175e71bf928d1abda9a2ac184829ae3bdabeb5f584e9f6872c4f20f022cdaff0b685dc358ec2fae621160d796cafeda1a2444637a97855e4a98375510f096d0773dda8fcc5bb7673891a13723b6f4ef5395e57fbf1bd24fae423ffe7852cec1c9c0de431cd6b97846fc6b2caefc04015dc58ab3cb44ec7cb5b5609b00985248c86dbdf3b5881baa6b03ec1edf598948974ae3f4ed822a83e045a56c9587306e204e290014c94e4756f5b85dd3da20cc8b61cf6fbe0d37a8e995a48ad6ea8f995598203ca20c4563884740b196caed724bcc204292b175a56c4183b3746e79c495d5b2f46ec059cfb0ca78806694de296d8826d88d1d3e78e9442fbd38e356cbab9e3bc377a0328bb476a78685c1df663230dad37d8e89a983418a0f52fc1db42302fd100c9da477879b224ee6c597af970952277272c31e5424507e7eea262943564aebca063898c644191b49cc4f9dbd3558ae30f91f4039d784c6287db3ef000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096de788eaef6acccb1968a3e2db67324873169a4d58b05b5736e3213b61fc439c7e0d47a843a1a2f7ff41cfd919dc96aae1843a780332e3ff057f25792ca3a58222faecdd4b0b7855f55d71bd81e33050d81fb9b212e8dab9e1cfb400a9b5855888ac5ed9c8015741bfd58dbfa293b980ed53684f296ba56387f819d57275faa3a3fe6983c1bea4783a47aa4f82031a82f5d57f82b8e3a70f4973d52f285a1f9b8914fa1b997397d0797562e920c2c2e1619946b811df3bc3b8f60fae297d03cf5dc7d33e10fe74fba0d02f3d708a590e1b47b0d15d9a4c3aecf3bd4a71ad5d68b677b0e4c12106a0c3e557a2c536ab67188db9e21c4a66fbb3cbfc281c7a972996b3d9850d3b4c12601e5d4b2986fc34a9e1c746d704c268575996b95e695bc024c0c6910bc2654b59ab67d2e13848e650831f389a2c4a9f8954a0408523f4f8c7d6f6585400c92c45977c57ab11d892908dfce071a830ad040b17467c40faa44a91d6ec669de6fae0f6d43cc9e014b535cdf3a4aa6fccb13e9e2a6cd520e684dfae0eb5627c69c29d064827736a52afad0d5bd3c6ca8cc7d4d670676e31c29d383e0bfe4c358c58a1a2e5e41a5bbf8e852623f96c01f4b1c7e19d48120bb5e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009928e4397e989727f737047eb49a4c74828cb6fa65f4284764ea75875b1edfc425cf0b50427cd0d757c153ac4e5a36a05dd3293407c302a595ca1921b1a07e20c079387981f1b652fdab8ef824839cf52969d4766d043e58785c1608ddd2141af3779c9c783413de1765c0a2253680cb5275a020beaab63301bd95d14c8c787ab1db4b4954eb249227b37c42d8ff3818bde3224b7785bb897598f175538f3deea6b35b7f8ee2b1a20c0d52e4215c788cddda3825b4dbb43d694acc4ad1da9bf15033d9ccce4f02fb496dd36a7b28b0f7fdd1df62382091d3394c5e0ad7441379c2e642be660b5a7f38e9f2e8fb47f4bda9b4a534b60eae4bcb5560f607b56082a937117186377802026959df12303c68cee4448e4d4dfc5f1692e627628a78177c7728186ee7987b686e9f6471592a640e2fbf7e8a433b1b5a46b4c08f7131fd0509ab93cbeba35b80b689c6adc23e3363f825ce28a9d27fa949eb0bfda4a2fb873bdb77f9bbba59ee417112edd019c35844230a3b0e932c726975d46c7ffcaa98abe15457d087d96b1c5b06baf9f186274c5b9b3e756b084f287064b4371867d81a46ab654675ba24d13d7b5aefff52143705d46d6a2c31da4e3ca08b0d390800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a52fd23a0f78be4feb6b31bb469df9f253a03a42ad13436e2bed62a0776d299c84a400a80395131bca05df4c00448eb820ef0eb7aef9107a414c0dcdbaf4cffc35f9ecf2df9c532322ebae333f312f286efef3a6c569d3c25ddf49061a717d9e9604ef18031b32d28f93e134c80a346c8282d9f8169ccb659d1f094633019f845f4f621e6821e7e35278aede6d4c80869332cb2c1181e43a4d5721d929a7e0a26cf1cffa095de44f2f2aec1154064bfc0579d61d8caddd94c01f1e29d220f4c789335ed13f006eb46cf53b0d63a8888071b30b2ff045ebbe69ad0c2ca664e849feb57243a1c8f78588db2bb519e20fee8320e0d1ec267c9977729017c2c1dc6c185af4dddfe8998ba873346ef0e1d98b9e7c71028869fcdb7a2a38f1b43433dff05a31800ec5a893f1d067191ee7e471012eced10570f113b1132f17ad0676b9f43277787cd49783f832333779666d72a3e6f0e94d379897392e8425178b49f2de5e90679631a9aee9522ddebeaef2af88f4b3a9e362c9924f7c3d5c0949c480921279463a4c29e0b420919c8245646a0d719e672d2a51b42e8477e308afea0175f83e27dc928937b6a02d50913297c8a74d42e93c7f054a60a64db1c3b10bf00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b2fa4421bf769c3d8ec05bc8ca81e8775d0ca45d21ccaf6bea42c66cc3ed732b8afbe42c474e5a3238598782a905f34235b5f2472761a16539e83b0b530ca7502dc56da2a288c14280ac9b263506ddc42ca9160c5b04da2714099b00a4efd4d1db4044e8c68d57d342f764bc8a73665ba2c2012e78ac51bc53cf22f7ef31ac00b90c63d115f49d57a3fc34dd95bc712268cc87848f022f0874735dc47948f790d1557567440f37f67c5322a208755344f835f6996dfd79bd86b0e4a335827598b032ef877d8251cbb10c221314a5dd7f66676a440687a465d5d0f885143189f7540345b0a02b13413e784fe9bc0c0d5873840a4d72179a356c7a496b3c44c78ea8f424bf96d59440f599b113e2841a2c018202c28182060e3c8b524d2ff3acab2d2c98e2a203252aa0b21aba020ed6b4c66407161338a800d6ed6e4cd7296da5d39676ca26b602bd459c56638c099e3d99540ec190b85fcfd96df56c257c12b778c111e7ed4a3058caefb58e150173a41c2c0d4e8bd57478cd2e67d5138e7b46f47b554380b74bfbc750074b5c55510229d92cfea7023fbd5fd7bdb283ca61227dcf44d0f3c7cdb19ffb59c1e064f973cb36d3b2c1e72850ffe036790db80730000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aecdb8f218d67b6e5f24bacd2b1d1ebeb21ca93291755ff438bd3f7f7f4f3b3a4c2668f04925555f181cbb7a22e4ba8ca2998b8f6d342401211ef948f3a698d517214e472921187842a342aaaf9793f8664579e2039f397b9dc83e2b1c4e8211d995e1436c8a3dad6a782fae031571a08e052e40a3cea0360f3a5846bbd6d7233b7183c7559d97208007da5ef1844980f0829bf5e445ef4685ad6d2e1014984bb18f2ea0022066f08e08096109c6553fc895e8ae5b162d5a2c8774e72820551189e94e1a0d19b8581cf83ef99b03fa2a3048f698105443e53abdf2f12941c4dbfdf3f191852b4b46cf69e12573dfb25bd7190a300d327976a78d28758bcaa181e7e310dd56bb331f6ed8995ec04ffdc63368bf4543cbb9eccbeeb58bdb2b29005e70733dc09353506801550f74eeba8c132c8ab33a9d2ea5cb442dfcec939d89b2f332d9ed43c8936d76e333e8a2b547f351dcecda6f11d1dfec9d905022a146a74eb25a31611073dff332f574fc5e5f11adcd3794d0a7849fb1972739e0fab99ebf9eee9cdc4edae9b22837c16aef70d834c4318f9d2bf772fddb4abe5424e3ed2045dfc1b350e2e785d1d6766c9f0fa9df39c48cb3d54921bfe48ca2e5daf300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f415a07e7813717c83d49dfc3c406226fc12e79a150c635ef90086f41f75ba4c8cdecce593656f4907cd63771120376a2247057e4030fe82ab8412eb51b9f4da31611747b967310c335f08bb370eac6f0901b66af3679ac0e4239ca9e33d1dcb3e81c1f32734d7ddc7ae6c8fe70f9800adc5e61b25d93772e6ad04a299d6e40740650859ecfdc002a8a5b716c056be9cba02feea8d209e7ea4f42459b41817640f40bce25cf3fa197540e23f9fe42d8932bbf8c259d130617401864978e5d8572aa420fa081778039f512fa892c5d4291cc0492ad81980843e70c9017ba87df8895daed4cd6beea756bf8930ab3e54b491ab49a63482592f25588a5aba8fd4e1e19170a44895d395bd3625bc8aa3f02b003afe145f6ee0dd5158dfb548a0481cd68272be4a69879f9e4b928fbfa101e3b9ddd48f33444129bb38df679091e0108730e4526606d20a991f05bfee95c45ae15a169d138cb724eae7ee65acd810f34207f6ff086c93978d3ad40c60e3d6200db3044523b41d060cd44d7c2add8fb7d20f54510b76e34e2da8f1851f38b65e6fd8463a0eba0eeabffc51e2d7cd77e3792b9529b09d90c2f7ff5ecb19042ca6083a637786b749c90cd2d8c31e73f5a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083740c44ff904aa299f48d27ca582e294e7671819dd4f81eac71aadf7f89358fd68d94cdbf9655a8b7d51b5d8947c71cc02e72c0660444ee28fae0f1a69625720403f86581c1224aff7d5490fd72c7b5b0cb87387d39e90f38d22bd072e394eb0425881e83a81ecfec5503c4f32f31d5a0156a60f281fb1457b7123458672f225dda48ff230a0e6f87c8829a82b6143f3bb65ee595db023ed53a22b5197c8760cc882d4c7b48799085ccf09210e51a4da1c5d5898679bb5172c648c5fdd906f683a3d565a5d7974cb0a11a8b94b947f797b92d4173ed058cf62a09c6a04d4445f3fe819217791d729409f757ba10f80e79d2b97434936ee8fef9856674c637b98c7716ac801a21c7b0081c600b051f34df14ed57c28ef9b0120cb13ad602850661adab17db4016b3e7b3d30db2eb9d629457c26c97c8d4208346a9bca8327f3ecaef9a137224fba86afbcc5977d2328f3f27d20a3ba6d4a9f5588e109775785bec1764b0ed802a44971617f2ffd7b0fad37700218ef3abbb9ba3bacbf1babc8984b3b3ea368c603117566269c8d4df59908921e11dcb725c184a884667954469f25676a13e2976e1f8a1f9ba0778e41519c111c967f6884ea1b6fcb0717c32ca000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018c5300200921cb90829b259e040967ca58ce8ec3486364b899f08d137f6ed65b35e4eff43da0e85025ef0fc6d9a9ce272536eef81f9e8d6ec145b91f8d80c8acf75550cf61d0eee0f820a63ec91c9a06c4af7cc0ce2d9f16c525f8a205c7463ec0ede40056d3f4c3ef5111c14bab4ec813fc5ed69e088c7399f7bffc3ca01c78ebe7f891c4630e58c8cace06fa8b96bb17a77cb5de4b293ed125e6c3284c56142760bee16ec583d2abfb7430d39470e4ac9beb1bac0bc584d3eec83169cc40759718a0ad22283a8e41fbec420d4be7c77e1d366639f235a633f2158e3b160df27f6181bedf4da3f7bae72aa2652a5987ce098e9b37a5be6a0eab556441b806bacfb86f4a81ad0c75f0f85d2e74b38d0a73500f94d5b5700d6155b6214823ec2e627ba0df63ca08dc2cf4a1914de76e02092e63e517edda2dc6ebc6a77db56fff78bdf38fa1d8bd930c2bc00659c8465751476881209e02573900e5c02b780edabc3712ac6540a0c937a5824b6a5ee859c3e74bebc0affa14096451a8ad30569ba5a12004d01d446fdff1546e3de520147216156c1c6307cec8fd1cdb61312d9df57b68c170f7091d580c129c0e9bd7738a3c7cbdfff789d0e79c1fdc2a2234300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001176f15bcaeee9cf99c1b9b5b0954200261b08ee1b9e3f972e8d4e5c3b6434b52d955c764b3faa6a2b1414fa779c41dadc039ef7ec2a9df44b15867af1bb9b2df1d745a21661c53a6a5e95b735ab253d6130be633cc38409f7dcb1bac37430b143ac5815afaeed483728e39f7922f51cc2d48eaf34c848b88d0f2888db62c275b3d3427231567c123d6ea08ad73b60a46559fdca73675608d84812467cb75b6fd53fe47daef2f86b7fd608a28bc1802f33e5946b1111891ca62dfcb34d95738c6f24abf15c9fcdf160cc8869e4c5edb7c02ffb231c9c4bc1f8ed842cf274612f3abb4014e7516ad7a1c7cf32aa22d5aa22b09260c89b89fb7227b89745032531816c37effeaf54fac37f9759c1bf761f23c6d2a33a850cdd043f4a6743627c4de0b241bbf75f752745d9cc9765e173111b2e4446ae121ff6851667249cb62d3e9a8b031dfc4c53ab1099802d6f6b8c53984897370b7b624c8bd494971567598f578aaf099d0b5a69365d3752cd6736d6707340eb6da644fe6c9a70ac8eac42bde97e5df984fe5f57fb6ff299d9318a86d4bb55bd18135793c76407709d15e87bdb6eeed7fd119ffea69298066321cd022e75dd59c47dd349f7ffe5ff1e481017000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088bc9bad47fff5bd19f212685c9eb42a9d3a42799ebc0b942a58be37f1c35dd5cf766749fac8088eb48761e816af836e4d08d8197851f33d60e6c86fdedf842f25a25dfce6f5865dd78d8c026dc6a9d1d80c23901242b546b752174f5744826b0ae0c2f5d858eb47dc6861ca5bf3210072c66bdb0d979f738c5862849378efdc0cf8cb04cd1b6e1e3fcedd5d2303dd9c70ae6d0a59fb179da765e4e158e0dec560fd654405f9a793bbbb029f3eba8d25c8d346801db8b417a1a04833362f5d64a7dc53edab902cfb360216f6dae9410126a999afbd46b872811de574fff7e4f1dfbd87c1610dae99ea8a2a2710b7c1bb1d43f5eaebbb41bf946ed96fa473ab4ef72a1fcd7a872b60738f736920314607c5f6c8183fd555f0f580bd07df2fa10f745bf13496bfae38330c50fecceb5fb84c69bc55f9e24606079ae54f7daa7f092c489fd13fceb04df76adc29315f6e1d48e12cfb13329eb536f384569a598c637b0ece7382e2f034f0c19b54e28eab6ff3c553ea6f113b022ffe92830bbbfdfc73c4ec3229b197395d695cf0a99cb8767cffef534cfe9bfa86b2b095f5391197bab466036198798704917bdff6b13aa48fffbff0be7cf106a39384fc7e22eaa0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028bfdf1f5bda8a480e279ae1c002c8481ccd92f93b047103420e237441fd0dd66a9fba7ee040ca843d14e24b9082e79178ba107e4c47f4a1dc18790b7e6da619df06e1fe6f0d7c3d3f366aec9f7083dcb0b515ffbc2b41d5e3bb94e168aee35e60869e7c41693c1cdff919f4ed1361e57da0581044bea56f0b132ee5c4bd74ea19b461d1c4e7836044056a2a81bbf45071e6e3b5330aba1e60d3036f868a9dcff81093a73372c10bae4de5120770bc0c63690c27561ab65a23037792db316bc39cce3613ae37fff6d2101f1b5426f7a1561bd0e63a36b76c67bbd0ace3f1b1bb3365d42c73d47ad666d895d8777211ef526f15907e8f554cfe2a7d143b917617c4a19df22f3c08bd037bd3a8798b6a2a4151552959af85527317c7ac8d62de50cca394f3048208d1efb41297ed1e6626693ac38644f164310ad5cf4a5f7190e795f65993f639e8022bcc0bfa42a10cd62e0f257ffe6ccf5edfff39e8fba384c68c6cec8bac11bdd0de0565a082da7472c551120020c9c31c6f999870919f4d0b320ed2b703f19d25fd297ab9cf7ad925370ef9b12a5b272f6bc661715ec06ce7b5dce84e00b72d568ff30ce4baadd0cde67170b42036c688f65fd252d1b5a81500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002943ec46539e1819e23806ab6be664d6670789f1bd668054d4fe8aebccda3d5847da388fa732e25f9530e0d26c5ad5140232d95d2e87be297d6af712cddddfa16dc03c9045b0c592d7b6499194e79512c77e86568740ea65358814741e799279c6af31f1cc6b81896e1b46a73f57a3b878dd18815fe69e5b4cb3333b34da4270d3f5c138ddc8189d5c478c620bc7a070372adf48e385474720f5c567a9e0d0b6b0f57dbb6dea94e3fb7c0273820fcccb660caf7c5b99380e692cca15fd5a1b8078e46a533ccf59101cb774df139e791071d75f3c9d186267392e1cd445eeb8d5fb6344eaf7247a10f7d8b53664a6a60dfb8509aee522dc322a614652a0b9ae83a6ea1be454d4cfed1fb325bcb4c2eda80c4ca8527fa79533ba1597d1eb25eb71227ee7686e557a5edaddaeb6d88a950fe9091e58132a86f8fe350ba46091409277b49aa894f811383a1363ab1547d3ce3910936ec86d30e9d237a10021053e9ad0366142fc3c464dc7f7e79e3f3ae9426805dd0c1dabc6343c87423e4b7378347803d454aa714e06e63d8099e7c185279b29dcda6605c3164633f76933c507ba73ba62cfa8b650522e7d32090faa8a219e32ecf1793f3b673dfb10ced2cdb960000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027ae8105dacaaea517a81a5695bbed4a657334963b139c22c4792a1123196eb4e09f87a3bcff65ed3b82cec2526ab4f430247c2e37eb697f50342706b2e72de1f5d6a3e8aede4b1446f66ad15c23ba0e3ecc1e0c75a0c2c6cfc46d007de610ddbca977b3263a79ecdd440816f62f0cc1a4e65357e98941b2f4147da8b78676e5bb4497082a08d6aab104b43a12ecfb250fac406fa069622984a06248909ca2e31150970605885266b480b01e6f2a52878a0d7b47a4754cadc52ac88d85de811f17cf550dbc84c97aea0e41d15ccc59fb26fcd42032b52216a1923e1f6feade5568262305f7fbff132f961cb8f6a5c3d8170a0484bb13a0b1e08ec63f13b9a5b429d8a9d72157b08fe2655b3c925cf012b56fdd62beeb83c919a8f9e8ebe353b42280c2612ae1b6ab0773fbb9138d77dbc21f49aebdaf9472b50d740f8aeb0a7d0851cf8c5e941eec298d1b11ebefa321494301a4670aa0fa77ce476185ebee1614a15b2885bb6a367c7b5837b10dd9bbf3575a2a2b06d119c24fc314fbe0d29d5125ec6fb96cf875d230d6319acb089e7f58c201bb31ae12a90d616324274e495e942db6924e9029b2a122b16d988908864c96f0f546d180bbca0de1c046f2e200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002014e7dc94b914c7a359affad6bb63264c6d0731573cac212b4608833bd32ac5cfaedeb403d64274f283618425f50e0631e65ebfac2f580142757b4106d7e083a700c5573ff3e65354149b599ff1a253529b74aeb45d3781145474374aac494fd402532ed27feb111c3e4b9386d748d8cf63b6178883c391a58e630c51334af69df609e9fe0f91a975bec2b6433a1765d7e177dc88aa62522aeeae983f73816deaac0d20ed605c09cda597169a208180b649c9632ebf91edb58a37faf89f38474ef4c6ad5a0488fa5ff3f91f7ecf7a1e4941e6ca97fef05834689ee4b3a65fca3c36ec1807cb25316c1bc5c7c1d1b882fcd449bb40c6033a1eeff5be77f6197d47e6f4bab1615fc813993974674b3f34703dfc8be9e537a58a843c28d29ca7c9653288e34207da4e282b9d1ced642b05a03f5bc6bbc2609a94decf616ff033bdd5a56cf4269473485b68226c8b1601a898bcc649b7c63181e9d2f568c989d39015345e3cea5a040e70d9651e2030093f95da4e4b8e4520b6b48024045c78ab72a4db3998673b1c354df57f5c14cb5e81bb288c9e60bf619e5ecc3290452d07f0b395f53783d3d38406d694a094a9232431c11c207c073ea6da978e4f24d6babf00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008bb22b71af91c72d8bc317355b59ea9a0e4df9a8f2d828831229a5a4c7d26187fff85a61732aadcefd99f983a2a9377b6e08bea35fd2c6c103be56dd7aaab9592bc0df9489870d7bc33f7fb9c68d6d47be4a160993e7b902dc17bbc503b92de2e96cacb34de61dac4971829b21187aa9d19091e0cc9f59c6aaadc368b0379fa28673eeb47af66dee913741ca0f67981acdd7a40598612382464741d15c2a203d1d3543fe0b567b1e73631adef9f9f73c557bfdb4d53f0d91ec7cd1d4f11a11edafebb300905ee70ffcca648d8ff39953d0fabe76d185200cdfbc06c5def6b2564dda157d7ad79b38dd68311ce37e2df0b85af6e952adc723759a07ed4dcfb0bedbbdace96da4e857e75b112aed653546f4cbf664a146a9b3521575f40b2339fda2d099072d02dba0760dd6952f6cc6c7e9f74f2fb7ef2a048d94f5ee3fb62f4e0fba82eae280b19eba643eebda2cad1d5109333ec5bc0f04bd91031c21fddbca05a8760ead4508bb9a1ab02f5a03fd1abb212b7218c19c41199fbff020f1f1562195788738d69ba79abbfabed72d4b5975a7af12b5ca984a8205853191fd34c1508ee323d27779d96b2e3d0abf39da908e469395b6b6ce316cf6a76526eb5b0300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008242791af1ce1058805a16694469a9331cd42ec49553f8d4b421b4f191d2ff315316e6a415335c65b8d1eb2d2c6c44419a8f09accc62a33a4adec7eacaa137a794f6e0e256c128d3a93567b81e86c122c910e9d007bf19bdbf4b6fa777203d7fd29e0218c2fb952db27663d3c9bd5c43a4b75b5a380a59162d985a16bdb7d9a89f6a1b6ba62548878aa5d7386ed7cb145ee34971d82fbe9c0fb03a18a7f26c22a32955be1330b8785992f783ae0757ef7228a4d2c31aefc75f412daedf5a9d21caf2bfa4a60b92f37e6b62a8f1d0bc032e222600fb2456c5e2bc456e42a0162ca89b5faeb35c2a4acdbdc10c5567ca8b1b1eb60fe159210b2c05b89dc44308aa5b7c8797c2b29577b82772864fa7acdb6e53d095376ec3759a44e11265290cf9713116af8f54040930023aae30e916bc1dc62508507286c3ddbb2cda2af58c01955ff777bbabccdbbfd395cac50025bfe266b083f230d4e36f7a6ea394683b1f361d00ecd7b747f1fa8d700ac635cdfa67b71bf7f05a4aa75ffe50ddbacd7c9ef1fa02fcec604535f727e602a50fe3d676e28cba52f4fcbd46cd4e6c2b98acb376e62f3111ea586d20b170a1544a26c0fb6e1ec1d87db5377d1c4b42b21dafe3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018adfc2399dece131ff43965ee320e50f6e85538e69f7965454ab60ff87f0e66fe0aed0beb4ad3772c355d3dc004c3cafa75c87a2b9aaeb3ab75c46f8b290dcd1e05bb9530aa062aa4798b50c1a5f4bd266a4fe258ba87050c578cc8f81dfd0fccb95aab2ab9832ed6810ca8e2762e7692ed1940bb07fd4d98ad457bc74ef8bfc053d9059e0a47d6f9b7657c9c36ee6295529b9e9751a5a56c48cf1f64f93d7b74b70e7ea64afc958d34ea41d4898a23eb7d6f1469804389c382234350283fc54b54b87a0158e907b293966743300c21f3241a34579686e3c70948cb2ee12c7607cad46de4d35366717a578315a1d22d78f9ff003fdd7ce14dcb3bdad8bf124a7947b764a6de84f7131cf172e2e243566e14f90cca97f08d3695caf879ad88827614090cc0ad618c55417db56fb73101d7d5a940c0963e151fbb7b2519d1173e6100fd9ad595ff0b4f9d5e3f70e15ceeadfd162b1d2fee5ecd72a2f61892343216e093bb009c63fe57d07aa59090fb9686d531ece4d181d6e4c142efaaed17302bc211f40b48fefe392391f3c8e2451d6a21c83dd47cb2d59d8edc7479daa81c384e0fd021035ae63ad4eb31b1dd3b01157d983e86f7b1ad163eb57599a678ad00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e1d3fa4f14ac1e0652fe8f956ecb632e7be4bf35de3f1052fa43012e594c36d1b3fe8889b0e804a8b23b030e4875b4aaedfaf975d3f028ce114cb3a54c06e9b3843d24272acdf0d20cb3449b967d75cb5825dbad9ef494691e4c00bbfbbeb0e769d77a9cf4c8c2b62405f57f3ef808264fc0f1b32f0972554fef235764897ad841cb7f2e4540bea4654be8a3adb05a4cf6a4b926cda01f933b2bf58956055ac11077a41a3252a98c73a7ccd7c0b5830f1f1ccd688cbed0899dd4175d7df95fd12f019c474279155e37a13d7fef04b3fd457101f46e5a365b03b0bb489a94b754f41dbb5a77828a00218137fb4f3d5b4eed6fcf223d438d178c0f74f8116240f64b01a7cb31d314f84ba25707f22f346cb592601dabc7dd88bcf156306b9fd6f5c0dc58d83da5d40d3a8e1810e02ebd6c55160236c8af7c1e5f627d3f1a3b0334a6b7e2f2abc1fb2a23149674c112584686ab44e3f84027725cd91a774385277c3219cfdc88540bfc91c39ad821d72cd8e008d0db471ec7f76cecc91af78f02e333be4ba711c793c435e03ed0b61d1d81840924f4414e7db896ad9a85f1d14058e3389461142e8b28c8ffba49b77f0cb74c17ff180e82943657216ba82c365710000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000295486f6fae495e28f58895bdb797ac7927fefd7b09d622a2343a61d86a0c69d72b8bd68a2ab879bb60ffcec6cea806f9b925099e09c6bff73adecb243cbfb447176e942a6681671b0e8c73a829992ca21d0901745d50a91a900206c08a2f2c86818f8d0d586e017fbe97a7842365987993786023e173587212dde2045612ab8ad9784e17cd2dc22a2e40bb3e00e25589451741459f6f0fdffbedf770018a070a87f20a0cd7c8e226312d1ef600157660cd75dd36196f621e907b38dba8b16a52f6c47429ae4fffbda63531b15bafb801d3ce30dde058ff8911359a559355388b56cb953074d6ff0d9ab1cde6597f5ae7dc159955f56d06962076308535ca9f1d7540b93c3928488744be08aeaff755380a7d6466ea8089eddd45b03f79dfddcbfa6c9b1d57e6334ce9afb7ed0eccdea5cc294727876db367ff0bfca23c68cc9e5e195c0e919653d81d20684bafac9ce176c81fb48a38afaaf0f1f3d29b4fe822687a4a86b72987d4aeb4932e6371d8b29a9c7ab6a6f8133303ce584f5091727a73ff4e0b072a536a37e07f297ed27abdc303fb3ec815234d3b9363e7c3cb643b97fb7e367eb753805b9b4e7e66207afef76ad186a903199bd2fcb5445ae55a60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab64996c737cf976b1079296efc3e9c14874a7fff525713514b1465a031feee783e5c91ed665254e945372239a69d57c95604e2d4f1afe0e1374e760bc6d1db01ec55d575ac0a7fd10d8199a1361f557b7ff8009db523e4e203174d617d7db7867d13a7b5d4a5b650762131d1f5c6a02515aa614f12feab10ddd33fa7a57dc0ebfbfeaf8bb5a02b34043453ea6a96ad33e746b3b3c47cf85b20e83c88127a42aed3998b0ebec03da0efa4a0a95df2ac2f6669837c6f06b2f9a861cf44bb476467858ba207ca4399132e975cf1078f1850d7152c17db4c71f6a4052034acd7bdd11158e04bc21768fb85dc1b0f21b89997122975b3d4f51a348e89a637fb2b78a212f9953a3ca49a9411c817ad63b506a03f0c347c1c7664ba0b5b9d2f264c488896fe1e78131af515b56ab41c0e253589f1165d979075769df6d4ddb2db2ea58355c75567778534d169d05621496e71e8dbbf6beac17cb10e507d73f400b8cef3f5828b604eef0ac1b4b10cc80871d4388638d3e35e64d71ef11da14ff272259c5499ae3dd083c5cdd74b0c7f7e1fe03426e85d1cc68da4dcf372fa6c2901f95248857ee6fe75b8abd54232fb474a867bf248b38925eda0336b897c0aa237f5c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000990fbc0d0c0b246f10668c0b94adbf3b94333815a05eae8047574e41b487d5cc2cda7ca077adb8440e10e4d8cba11e77a613241517a157e0d055581063319d1c55a9e19712d469d0c23611ee4a1c6483f21490458f31874dd4ff07565152644be343a98bf53bff741f333f22511062a5539614c949f4dd89b44cc8a399ffc502d652e7815990294f357a32c4c25eee3cca2a2ebeaa8b75b3cea15cf74f02072c14059adef80f3ba03cfdcc9760f34e0a21f64ec70e02f2aa36b535d857b14c24e965f3a89895b2f8b17c65e9c48b0822fcb7d10a21e8afc835bc77e5d2f03aa5895dac674d2f4d11c5d51fe6f4f82b93ff5bc385dd7c46be484c4b00b43c0694967d4a567defa733e63557dd1eab605f8543a29f32cebeb6778df75b82c14dd421ff73dc62a930d78859a0b2b75d1c90b83f55fe8965ce41862755259e6e4b51279ba8864e75d83a2ca402fd4e8374437a0d4b3436f173cd4953351ad1880101a9fb0553053d9e676d0ba3a46b76c09e2addfad21aa799a99f02ec963bd5da7de16b78f3d2029f542f0de3d7f991bfc0d8d8c7b080069bffead64b00beece4cbff96b416cb2022af47e97b09c26edca74551bc12ba5f76e20b04ac084f404151000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019cfb2d6277d99bd0b21524b0bfcd1a56602f598c9415aaa1b0406b48ee0dbffe6447323fe2d8c62b9a11e9b21168ff8aea7482404515a45c1c45a15a2a618b590b70a2225c998f22be445dd45b9fa07132860e0414209f46092463a93d8d2e9ae91926bc2e43f138e099f0b98e222893a4fc86ff6ecd7dad58b19527f4474ffc5ddc66ebb9b0f7fa40fac59f6f616b98169d1572219685a42e6ddf1cbb12e814642ba51837188b45cf70f01c314951381777956d9e758fe0b57d0784f47c2692ab2a2853b3aae74fda0fffeeacc7507a18040023e28b870db6102245812a26376d70755067358f0be43f7000859a1409e40742f3efda48baacbb72adabb0627baf4e1ecb1b6220fb0c82ffe38399c54408e84cfaa092605ebf4860f451567b71467582d96e8044ba57cc196e6318a47fbd2656e5ca95b9f7e52bf3ffab7e8a3b47347edbbf0435e3a82e58ae89afd65a2721f7115deab5be1e82134b6c7684f04540d553dab98cabfa7faa3a08de1b5fe84a51feae7b44b40699f1b75c752d84f6fe3f50d70f5b3ea6cfaf0955d567e0979b62c61f9d94a2c16397646e296cd15314999a5d555c600c32b00e913eddcd6b58074bcab696d9cc7068b2af2e04e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001118a30ac7202ec440b89e0a67bcbe75d6f7b7f653a8c0f361da9eab43df0fa02c9e75a384bd31c3b484d6057d0a5f430e5b0def0ba0b0af6f9d3c250b5dc190c05edb3b2aa3d6a7c43608502b2165673ad06d892267c5a965d950b65edbad3e5c101a1eed039b7c237ba68fff0f52d220b7e5c2c773a6e6419f1d4d593cb1904762e8631aeecc7b1f1517c8216bad77f93303ee1501c0ba203b1de6f8bb0643d7d345c346d67dba8db843b758f22043fa4267c6a46e1d25b917a3ebde7346f95b2f028fb2ac9d77e904ad176037d1fb0ecfc5d6a23035b075f1e7cfe480e786f0f2033943a88069445f9ff8438f605d9c027770c56f0b149e3a802d24c57c545d7a635ebe1fcf0f2e7790efd38994f91e607f1fcd547817be9b8fcd0c4027d5c62727d3ab8e6e982f817844cb6e1b1b79425be228780a504bc575fd888aeb0e58d4583b8ee1a3960a6eb12b3caf4cae9f43c55b58b862437351e53020a1ec6c7d45d30cf143f7a72546e4399b8487c911d44c4dfb66bb35ba5e3c25ab29acc570e87fa3633c3a9e38c9f552777629094dba9187a6fe6fd6fe3632be178ebc9fca37a9abf19648a6c6f5a67a42f4f8ea6d612bb75301974d2c025478786dc94500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fbd0b887494bcf9bb87a31fdaa68a1d48c9afd36baedee67b0d924743d1be51ffab9f5f1d8fb19e79f169932e53b1784feaa282a9871d93f056526e77e5ea17d1219f09f9c35c5ec49db20b4f19d50c62b9fb8685e5e52fadf0fec48932e66874feae44b125f9cef28df6da8809867cf7f55f02edf34b5795f98b7266b5d6ceeb5cbbca6896035e85fde852e85bcc02fbabcb4e91df357d5c7e0e9e1fa5509dfd8ce74a83c7c00715414eee4e6c640852611d3c2f9e55544e832951227fbac26fd5a8d116599b6f5ca1721022d747a028e3e137cff600d8dcddbba78490b5a6abe3779f8d3d708f8d925992d0b0c5b00d9a6c1a50a1bc81d8d163e0494863695c65207d14b5c8b0c2c464e55b68dfe18c65778c3c88ba05b4d50d8d42dede81a9a6f018c6dff027340e2e1557b4078ee85edda5c03d6683109b9453081679cc8ee9bb3d5e6a719488e802e930167c29ead7f0017a249481d3e2ad12e1be51d4778f103989e8100f485f10651cd272a1eba163a8d70cfa9f934b170ee4cfeb74a32327cea2c8e510c374cdeafd7251b00144d41dcfab7611b19c144f6a1da7e7acad9a550c4ea573b5f2de704d8534ac938585850d2c782bd759c062b1cb82f4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015298d3b92237b57135179e6724c8a91cdafc1a0fd395c8cfaa26f8d12089e652fdf1dad9afeb113024532bdfe1bafa040da687b7cb827e461046c08c4cc0f93d9fcb9da12d818b05b49a2e47a54318ec36281ab131d01ef6907676833ff11cce5d84dba2c63c6d65e77c3ffbe8458509b4ef814c032cad53a2d343005415b740fe15580a52f243549d474b50cf682b63184ca8f1d1fb3f98a55b4a99616654c7f19476b1bb4a09424d51743473c3a544f1bfdce7187c7b5c317b99d8b3fb1e91bb8367de4e5a34cf6fde75aa86854b4b2d03c14753e46a88f18d7b3f54b06a1867bfe61a1f5aa734223322ab996bbbde57e38c48d561d7f7a6e27a3fd864f4b1e8e417eb5825e5d4dfb958966c739e717a88f193a0d52ad12888f11117741854d9b9dd0a292eccbe635f210990294bccaa615266f0edecd4d60b982d16974d2d8a2c7535d68ac864b5272ed630db5a85d338bc36fcf15ccc4a90b45cdae88bee84334bf27f68ab40de72f4f347ed59b2f5901df1e604aeeaec9b13d1de57540f07dea0f0c1296c42218ea30256d0611d095c8b43264a41f67e7eab75526ef5a7a5e90fd631040e71aa632c66ca5466f6ece55159f633f2db533543be7bef953000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ef139645a67112f8908301c1be9d6157dff3dce5aacda59d0b9d69f190f5662d983487db7abc54fdc9b706130f1bf29e48425e143626733697f25f40dd23b0d49eb0913be61df69d489d4fd1dffed65401516a5ea1defefb8d08ac230cf7de0d674a119d4f87110e4e52f8b23ca00f5eddb39eb27c1147fa646400a9f533d26c78b7d18ffaa0a18a6e61b407bd5bb19c7954a1f534ea8c46d6ba3334e4a07ef91706ed2cd982396f0241b5a05a6f2d16591ed2fb2cee6dff61ef7002d0fa02ac2d3de3f68a8d7cf3cb9175cb37a87f7b4a6c804662fe580014e288d222ef16479a9236c8adb6493a80ebf85121caaa955a5ec79fce04267b3575f9fda61eb17a4e91cb2da6a613e8ba61f562ed1dafc71a8db167252ee63395e2be755033ca024efdf4dab601e820e2e8e7edd13dd6b2a0f674720fd9c332f155e6ac822daf73f861bc3524096544c9816989e7028c528e43db330060980ed69454d81b1b3414bc61a89df87a3710f9e3dd9b0757067f6accf57427984b68e513a6fecd8689e6a1ec14947cc60790366e93f583b34de2eae3c082d48cc464b29b8cf635eb1a19803435c55d7f108bc0982d34f2b2eeaf298239eb40f8c4f6837361817213a400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f6add151dab064264472773e2df65f47285778c1428facbf1a23afb1af073fc34bd4fc1121c2f7af7a2e0580c81085f12beab4060c11eb570585165a8e17c2246465d1c15a1538ffccd37bdd59cddb1cdd09744fbbd209eafee8f589a3fa5b64553c4226bdd7532b94dc9748413427511a9b53ae5a4676083e419d5df09cb64c0b235afbab9cdd411b11de883d68ff44ca194adbfcc8ed0d5a7d53c481ebf43e9c77baed5209101c64eb64808785bf49cc0bf5c8f781ee0f0b8d03e18d7447cfdb49927d2e581409c2ef1493f266f4bcf831fd2394f844463b7c660d696c1a4ca2bf2aeb3fb24a5d94ee78ae04217d994f8eae8432bbcbb259fc53da0a41533fdce13632cf8ad213e8432d4317c0bc98ecaf1d48ba5dacee0da695e96bbe69b617131946895fc2b45c879177fd4b22ad6a660f647fa12a0ed1d1ddac1ea08ef41fa852048a8c6aa85e44b848c8f78a02b4479e7234eb19b825dd1575bb1f3107914673ad72662d47e24ab2ffeb6a9694e2a70e174287e80a6afb3e3fa52cd89a4045a95594f7219fa04026eda8c5a5dd50ca79bd0db8319be51eaf7e5419637f028ec4161a9d581564bd3c6056e3f0f264ba5624d099b92ab9ac9354d47350000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15a28da9ff6ebf04b6b0f9e9fd10ed4a392047a8fc0a35e7dcc56c6b14cb78d26cac591e64041f7078c5329b8e7c69376fc21c222fb338c4ae1cc005582ed85ccf8998c2d6deac60ccd676b3b4b9043735a203ca1b593cd9db6ce43f31d549d07bcc1ae203e85b108db011ebc417279ecf89e2a58c055680da9024ffbe1fdb085778e5cb97c2501c09f71b3a27796ab99f4a4ddcbe58c3e9c200d74c9ae8db03920f94948912797ff5df48a106b7a8ff8c2075910448ae776bfde41a988f8832f165487fc1a2d771175dfc63758999e0282bca84eece11ae7187ff99e21285db3bd76c02dcc8f65f9a29f6db226dba38e56c5f2fe03a584d4d9d8334801ab80046082af5a64d6a1bd9b1914af91a9e18c57d4c4942543e2af2bee19f666ecebbb72204ab1386b41355b7f8070299e66791300970eabb9adc07ce9e382fbdf0ad7d726eebae02b414b53964a11b3f89d208554867cbffeff17dd2a182afdddda0afaf3107f75d0df344b11d5a33b8dfb8a3b404f4da26abc13fe170b96d952a1e0c224e33ec9570509ad6e6e8386e1b091e5b77d2d8483021cc2d5ed0f0e54402458a608701e9eb79f2c73f6fb401b82edb1dee52e95e20d6b51f81a5e0aa99900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f35ef3cad7aaa03dfd87b5d231d0f9d0c9c280177a185cb7c870f0003f847f4b090e249fb4c5373c9175c3a743f3c8cc995622ae9748d06c51e5c103be9eac1a5b27fa096914bea15d4f8b099f7b0c4feb0b6e1fc799d504029a488a1fc60abd20f151f2785b3e51d663e44fbcce2554f2c4214e7773b6b8debd8a2ff248accf1c80d8525210d2e774b32a0ad08597f82ecfc5b03179b1868bd0581bac9e8797f632ff5b6a69892ee1c01bd8861b79d6c8f2ef51107334670885ee9b6f796126701a02b272d0d814456fcd80a64041adbec6bb0e3a6b6ab907766c5883e3675b2ba650f9a2311ced5a075afa3c18e3f0428d7458d2da69b332f4d511244049f09d1f682225d998e5fdb190d061f69d47d2d0f6ac3603993715fae18651443a8b58d43d0ea64d3110d32485e3c575d5fa6b47e3b1cf180a9896a780a766ba156e59282e6042b16ba0244f1b820cb992797d0b62489fac36ff334094f7dfd31b61240c55cc9bc26f496899c9c6186afbed60e7001eddc2b9ab8ba6b3dd181df881779e906b118d19ff30175591f3da5f9ece8ec29eb56ef38236176574c5c4e611ba4fad6e3e6daffe9241d88c941d9cb63ba1e06ec421a1760fde79afa9d934900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009331daf6c8610ed71e6a7b1509f8997a31c82fcc7e2e0bd4fb31d051bde403948219778af80e0128c2120c64968f9885c1af88a4db0ddf85eb4bdacd19a23900a4b6747415b021543a214b4d36c5218edce70072af7a53818d8a41b5d43c43e27807afbe2e079ba45b9a04b4224d6f41ebbbac476cb88801b7e1fc527340bcb459e22b4991d87c2e46eddf93e03a89db056a9621c6c3d550851a409f3d5d304e4376f67ec9c649ed241eb4dec0dafe43ef6b95dd40972ed752919d41af41e7f95c6cfc151f57182528c6fb402f940169fb0aafb66aeca3c0581d9062f9a6ee4d113302947e46e25c64808379bfeee63fad46a76d97fe1eaa43904948e7db0396f32e12b695213a6dc71d83f636b465282e14ede48df8d4e205700ec71dc5e18a188bbf95fef6cb369339a543f22f83a93a45663b08316c57433608679166f31a2514a981c66a7af205cb389a541622084347c7dd0c252f4e0a318e5fc8a960d47e10e46ed0bfc98457f1cc2c55b87cc18eff68c44dcf6affe4dc17d0f8c0578437d57f014928117353237a374cde53599302d356ab7b4f02a789780e3b926cc7339502ee097173ffc257cabbf18263e403c715f6e5446954ea3382a446d9aa9f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084a577b3283d3ac495a60f9d2dcbf334adefac72adba36c4ba2a2517b46425c4cd2a519e1f1d2d1448f783dbfdc92d0030cb313f126acf6cc6dd26e4a45fd481eee63400fe3e7acd236b2e63da7b06fb2e92290b5672c29455b248df10c2c1ca96e0f8138f6b9166b159f2e81cd6e2a717e5fdb7376dc3acd1c4134de6a2b55033711496f84bb1092f629a68a0664e910a208f3792b915b498fd35d18084d28d5e1cad75a8b5119f107820cbdf337adf305f0596b39bc3d3b9c2fc45757f72565aa83f993d6a2f1b220a6761837a81da3525c6ff68741be9cf71e4558656ada15c61700dcfd2304151c65d054da5b494666572d7f60dcd97f137101f4d04498581ec4dd98ab5d2852ed4f4f58aefc4b14e08b7d3b4e542406de4a639cb5ef38af81fa517dc06e44994c5b2b5b497e3ee15a32d465c52e92f6e372d7a100008e49ac330a8bf556dfeb23b0917e0b7316f999e35898d4e97054d348e50de013f7f4df69bb40cc401c2304814959a1f7d1b6ba9b9bc8991c876ee802ee9800a88ce28636ca086dc02bc5ba25de489dacbc702d52b557223c5d8790d4d1a8ebdd318877d3b083a5af54ecf496e43828e73d8312d160758b971098ec3f09b63535c920000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031885216e7e7540f1cbf808831b8447befccec2eb565f9ed48e5bb7c62c562582452cfd737221733c6c587683fc235d015dd0c987e733ed927f3b1fd5b9066472f76956699ccd4725b2dc57fca16bc5c3b37413e05353ec05134c1b472371f1e1e7767e2bd32c3a0af16ced5d428cba5e4fcff2b2d999bbe29e1c8cab26be13505669784626b384ff828c638a9b930c8e87bd236236d8f2fe469760e82fb54ffb7df3cb46ca0538321eadae7be9d99a7517fe9db2fc5a0eb95bc3298c944ca191275bb9575a19b0fedec054622bb925bc77331aaadf1285d534301d1de42eb57c94d59a6f7ec832254f39b4b5ea054f95badd4ee152449c51505df7a6bcfef44f353b447343aae53a880309d461f44c7bef0a447f04819cf84cccc1aa9f61db639172fb6b617e126abccfd79b75a0a405b80b299893d909df0fb72b30e66e52dc6cb7ec92f30135b5e2e170f90382fa62922da29e81a4f34612e0be5974bdfbaa8d4b448cddfc5e3fbf7559851365218b61faa511f792f5e151b3621b0008efc84649581a1ea2457a253e2c680ae5e0dd221f6dc12f542ec20f282c17c90e9260820e9f1b8105d8530485b5dfdfc22d7f5302533171a987f2cc57616c6006f2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005a9e32acea385fc1ee7e15316c5b0bdb624479612a1a65a34fc62149260641c8c69f666678de4c625a9ade3155a7c78375db9144f079ab204e2278bce90e6a4a68656f4a4f8d830eca95ac170455d9fc75c642b012d85f389e13fc7cd0d56e8fd568c12f07b3040a7bf1d1840224a43ec00117656751805eb2aafeb02b8a9fdf49b801c7b84e21caf339a69635a9cdcea309629cdb565c1dd3cafa34ffb0f84f962233bcce636326800c768c34c80584e0137672dcd16e10cb0203ec5a2671f664bee86ab0cd22a005a4150af2a2b13e665f2cf6329d07f9edc33ea408ebbbbb17e2693a13e3fc85376e602e83ff88206a1755283e8fe06c6286442c93fa5ec761468da50c97ec5ec9b499e1af0d913fcd7b35e079fd1589f7910aa55b8db0c35e2e9904c9ec767ad18f012d2ce25e0c048c7ed0a874793ff9ac6c691c4a3ff83b82eedff2aa62bf610691fd61d6f74b3240835947d0f2c35810b7637bd6c36a45459ef7bc77d1b563199cbd8f2b3899c22212169380f0816f28cc4fbe4dcead34fdf7136c946d7de2a6819345b422bf1299ec6492b3d9eab28ad9186c296cc66bb96fe72d44f6f953e86d2dc744079116d9ae9a6a40cd2f49c85e435f773ee0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000856e73078f4a2873ceaee1f979e9b19c41aa1c71c0099df2d6b0d83d2c1378dcfea951a5d7719ff0101723630f1dab35c9dcb20ce3386461769c076353ec84c389f37de44179fdbc47ae5a1feba9e9b78696eaf29fc99cfceb1c0139b48ce665832daea03a9a70795a63db6c73c8c9387d6ddd58a6d6f41ad9bbc39e7f28f145c871a0aa7c713454dcd2eb26f0fe3a685fbf905bdcd8d7c775a6eda7463c2ab80752d59164aae781222edc5dc85272bc8349d706afff4cbe7aafcfbcf475c7598e8e61640a655c937a20ae7e498606967276efdc7de9ca914474d3ef48c37b3ffdd6e42fad6b9e6709c3a9e0e5ca0ddab4401c080c0d296adc102916521cccdf44b5efd343d72099d21deac9f6ed585a3d9824f0cdb61c3a401f3a1ea162463e8058ae11694004253eba7b7786cdb4af85bb5aa6e00b4a16bcd90bc4f653801a7472e540a9d7021025bed78ebc007f989333a5b4560aa211b229c6749d866616069eb8e033d9fa9f321203b18c88a25ec8029ebf59376f9c031ab03109a4a12a7a86a895ce3162d1ae14c5d5861531af5b04b21761c9d771b1d0f62a0a3aa416bc3f722c4bfbe4845b8346adfa85234c2e81165e8d6f07ce628fff8def6de88000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000299331d1ef74d56d5e9baa6e1c838af7c9d5426268e822dfbd90e060cc85d4957fc1b3c552d4f0f8db15cd1d15dda436b38225d4bca4ecca4b2406e4a07aa2171d17586968819d5cc58865043c4b0cac54e06be936e2398615e25717d609c1c60ba798c93fbf91135fbc7109d7645f2161b6de4347ae7385adcf975fdd2b89e6d39dcc84b6b2038e239e19ea09c6dcb1782c8d4ff66295a5fba95b5b650dc013b8a7f777cfacbe35bb0953c1e11b7b12d1649665c8eca50920186cc8c5312d9888e10fd1e55866161d2567fcdc0f29a07ccaa16964f4932267bdc44d3c1cb045d52577299fcae80e1e7d6f6b5978fc22941e0fa23cbb12a12050fa94bf1609220c33c853765f3fbe4ff11243ad9909c63fd8d1ad76628cec9e6d61656e846f86d9d94057f5a6c25d18104d0dd5ed56e7a65908f3b1e30a8bac5c8691232474fb5c8a642075689b147fb91f8acec5aba50f01702ff0c1a48dfecfecb35b565d239619ba737d7d8bed6697631cba0f7bb7c00fbd069575c7b110fe7bc7ae5ab125aada707a58e554ec5740b64dbe6ff83dc6544d77a3a53a04899a1060d9d3b81a4997d109d182393e0d211275888680f32182c1ff374fe8ca8edd385d774f76000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002390b66629faa2ad8b5046d111151f0812843a32f124985498616e3e0082f62a0c1f5398dfc9501700a43a569bc7069aaccf5576562b5a6a1f96d1cfcf7bd7c3c87cc3a8c98b6f692f84bfe624599db49f995ad615d5d881aeb4036d81f072c8c783e11008b20bd5431730f3b9d5b391b59898440c3e3d39cd3206a2541ef30fcb3937a72eaa2b1566974968d3a7f638f01d0edf2c2630388737bd4ce3c3181048633ecd53d46fdab32082c2728e219a42ee76b7b580e2e86629e0b5656c1707b485ff927c72b67e71eca185e91ad2a295502706e45a18c919ad5b2f049523876a7c917fa0378f498879bc5ed38aa8734f54f9afac05aafcf78a3916052e8d919e4212e4d2157fb8cffd92af945039d24ad7301dc62c0caf6f97df0b4a38d6e82fa390ff5b252bf530746f344d1d3b169b59b8480754beed077cad206c41256a2617d809424611400a7d2d801bfd68dbed3a7543924c192247495128120debf343b72e80ffd7d5a5aafca8be499fdc8a0bdc4beba9a72e6e661f1143515780fd56010dc9930dd52ebfd53b6ebb034cf99f238b6d8be04a89f0bac88ca58243c51b511bdfcf7212bbbdbec8792eff67190eaa9dd5b718940b0244f66e0cce4d270000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a98b080c9f50cb89aaa4ace5c006baf7d10eee3e14ec21972d7b0ba932878a79b0a78a37d95e2458c2382e79681baa24f5ccad04af5415d346e903408fba3e85af76d408cacd4f762779c3c338f2e860aa4f0fdb8de6c4eec548cbe34315e79a434bc4a974f29c1989c103272893fa6e7db5443b7c142b847f1b6fe4c53dd4a645f59bd9ac0626891927003033370584cd51c2940af0f7c82b0af04ffb2a59cd4368c8d57f8e194aedd2f04d99fa271f0e585d452e2a2c5254b6ac2c54764a08cc58194e501afbad1d01bbdb9345d38db526fd4eb527251473f2b327f4b12519f2934d2011d0c1f254b253e14b4ada65170f639f03e42d9c27845e3eb3573616577bcd67a61107eb8943b6bb86b6560e44f9a324beb467df08cd1243912c801b506dfa501a3c931680832eddd39ec5e85319a4f3e6e36f7890a498605643ab484768eaa9fdab121e187bd2ce8baafe9d6859467ceeac1c42b41ddd2da6a4f00e28d6caf1d2a70056aac3eb54424f1f558d77522d1e91dff6bcb663d7e60eeb433b50b948462cd8c9e466e4f08dfe521eb691bf02057c5efd383588258856c32ed295e96077e170f14fa318844dad441e5d70564360e6333049f570a09b3f9c060000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a03da87d802af1f2c86990207a28aaa9462de2d11bc0db10f03ddf5049855b49728235805f74740e2035b80b9a15a00ebeb7fed05dd7e676bdebea20e45e028f211debc8a862819a4bdac259c1132ebbc18ff8f44f3555cd862406f43c586bbe674e601eaacad0cae9738cd85450bd094f1338b0b9f6a99c2c26ef0311f4fdc773aefa21b9428ccf3157fb8a12583060d99451330f66a18b0f83c867bcaafadbed7c9bbbb8ae66127259823a111ba3e89e170f55a9235bf165fd9ced252fc27ae8b473eed7c444c71f52c7d612c7b266fbf999f5ee76832cfd6e596ef9e1fa34dd9d5a1389076df86ee335094156565a141b38901089eee2e03df29a64fd5532efc5b0790c620b499617ef1e0c0a01526bcd26e4b27ac9b89eae40ce76bfde4c3534151cce6f55e4a0dae7736575c3e508a26f42efc9a3b79dce99eb37de1ddda0a35c1707cf265e53fbabdf2f56c05beeeb8ff7f44c06943aba407812f75da663b1b922ff3df91152b5cd002271c6c9989d283ec509b60d61d06c7f6d5656624f42e54850c06c009a07e44abf739fbef248f613d64381ec1921475fb69be6d9346c8bfd534cbfcbaec7e0b37c5866b8c42ad3ecb608b02fd42e0b1a6923b2e1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091f3d32f58e09c17eaeaa56313dc0c77444b8ef22169a33c3b9f955c749e4d63275a942d1b2c03be6c99b9e1b189655488ff2b3298688fdbf5139f442ceba1ca09d0f9dad7730fa6a5d3c13002645f2ac2bd2e5119165629c32a4102cbdba85db84a4973465f50060cd39b7fde5055f94296810956dfdb7db700eba9b89adedde70b5aab1702dc618e803e35cc7caa3a9efad4672de75d5f38a037755ed289667272feb5e4b6be60e0ee6c94a7ac3334cab890cda2aa4b145d018dd711dad95349a260e46ea09a146dbf438d2d45d741db1179690b4c0303c94696e5b44009460cf251b7128fbe63905a7771635fa1423f3b351881fe19c7d20f18b24fa563badf9959e6e0182450619e390e5b9db828c431746f3f93cbdea83787b5887b24ddb14694505b2c1968502e2b7481655239edce76630ad59ee3c7fdd37600d10b8326ac617c3ff6aff6a6bf66b461703a6b897fc984f3f806b294e3d42cccb1cfe20d20ddf510c993ad7f5e1a58a0cc894d08c14147a29751520d6ecd698be12ce480a7e4ade6ac2441cab3d04eddb9e5382d8d858b10aec282af19d1e3ac1973a9ae9594350b888d39a8bfe53c3df723ea81f0e7325f0b348967c86409170b14460000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad66185df2bc89c2ec6144bbc7f48626743f8f776a30f718dde2d3cd096b92cf48ca5c080b64f53db8615b1af3cfc311677ed334edd4dc7e61d6ee7e6a31a2faf60b7eb553cb64d6d624bada1c6fe764b228a5762a758d7a5f0630196c242e00d75a8e164e8cb7b203f4b05d778f814fb074c4e3969fae1d66fe9c0797c06b05183bfacd1fbea8c16ed0b35163b75d8e8353d3883f662dc807b267bbe37c8805be29101e1031434ffe4e9d30ee96cde06b31da2beb65b0f8cc7b55d86695a0a7548d7a71759353a6bfaeb136ca8fb30c6b5d20dee7ad1287a05f742da3d5bcccb103d1eba74e62a6d4ced106676676163a49bcbb6ba340c3ddb4bc3840b91fbd82efb74dab85c03bd07fe185a9d43318f3471dab4ab722be8a349806cc7b2014449cd9d69e6da0b83e63b6dd0b8022befad142c8d01157c19c8798fd8e8739726c1dfb57a59befe1d5da180c7b5dc92684aa1f5264ba6e3d92ef5b4d180003b843303a4a96c818227cdfbb6471d63be0f584e05e0590487f43baf76ff3ff3891f6093f9b0be99af05614af42ca02ccf230cb7579c179ef8d475790a9e6a3728267f8832eaa7145232ad2e7c17f6838c85d159b32759e662c1b20cebb3c230fe60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab54303fb505d37b8ccb90fa1b715e5b714b647a4b802334bd76f89296be801a5d75678eb61fa0a89b941a9bdf5a53ebaad746576131b93dd9b3aad0b9e43f5bd57cc318d5db13c56b219696f546e5d6670d19764a13bda6967e32e54b2a9902bb351744c11cb59cabb851b20da56b73e8d941019ee33d2b1c56bec9ee2eb946847a668d791711f4862131b53c7e502c8c7fda23d74fdc705d85a026adff40e73b99224492a7bf8288e15128e60092115bef861063f803c01962e060b50e0d2875d02c2ba96f9e542f3272d62b27cc5cf514390cee5bf2828a86466639a1336c16af70c3d4a6fd818a06d53468c3d82daf3b55cedcb728afdb291c7a53216632ccff14087600744a27cdaebc7c20bc5ff494734c41459a4f12dd0209ce4e72c20c18b1c035bef54c12f97902c1401661ca91cccb057764baed93cd92958663200f3bc3affe2a6abff70e17a49f6cf1881e6e0306cd4a58eb8e8ef5f9cd21592980325da295cd5297ebed143b398aa2e8d8811d30b42ea7c9cb73f8539bf9e5936278ce74665de16f9ec0586d3a315cef4c43811280d858dc48fe564e33858a82d5ea25fa9e65619fa3fc01e0368de0729975942690c45fda352a2d70c591094900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f15aa208ed114508a9e56d9ec96081b47e81b4cb2d3ed16769a41d6fe03a8e9b5927985526cc2fe53c8680512cc0fb81c26a8eeba895e914648ff90816a26cbab360c2cb9905a27def36c22af4ce8bcb487b6d2060c470c25f1005eea86889d73aebd757eed6ac69650c0e6ec780ee9650af3fd235c2a414b843288af1d1a497eb43e1d05bcae18191551227c80d516ee8f98b17845e55bd3710493f976574c3410c3ff3737b589f68131f6b6ee55772d16b7c2195c9d5f466a539fe04033484c6a6f96e1531dcef75d391444d23211aaab833d90446a7e16c0f5c7c4b3a857694333b2dbb83c4aa8d020faafb9b84dd79a85cead8d25e30bfc0dd33756f50fe28d08bc5ed2ae916411ceb33ec350c46160f846e04e1f447aef7aea378639e5befd78a8c12d0e482648fe6ca5d6a1fd0dd6974090b1b07f2f2eb02897b1c92f5ab8783aab8a676754190d37f450115f4164e680a2c5643193a023edcbf48ca11bb799afd10d1693fc63ebdde9a57dcae342269175404fa226b76a5a8b50f1297c2226427704f6fc4449e7c116befa498aca9d9f9d9786d149268750b22f12997fee2d0c96dd692d31aedfd6a44b80a83ce5b08f48f2cad455de70895d3a0e7c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092c23ff0fcbfca993c2454e7a157b5bb2c1e7e7ae9de12fb0b720417dab119f24b2bc778a7ac2abeea0e9e6402ec7dd71f148f560e970313b82ded46747576bf04211b4d78bd949c36e7aef823ec44a6835c81aabc9c6cf7b496ef7bd8670b0732f4d193d3516cb9cbe7381f96922169cc3bdf0f95e03175e67c0d21879ea33b2247baebd27c85894b791a38defdc007068d452a924d0b48f162540285f6dcb8727b8a2f9e6a7ef7568ee94a9b69b9067fa16983b7a586bd97fc16f784983e1d1f917ce456517dd8acd14302f4ceb57e885c5eed6fa980f3339d646e7f526cbc792ae5cf15d4ee350114baea035e6d1102868ffa66d69d6a45fa66d88f105afff3234687721cfd67380ee7c61e107acf9a56fe72c62fab5012b12e186ed5ee77619a398ee66220cec05810fa761c038eead7f3eed282537f0b656cb6f19db580e1f445d6d50a86884fde7fef3dd2e3cde531cb1cfc52557a53a61ef514cd0b0613d8e6dcb11e5b93ce552d552c591bf7fe4000e070b4320f2406b6783268fd38187b21e49a941c9a4853a664265eacf1656dc7d9bd8ba5c4694da056eb572bc8e216aa2bb0126f9946c61a73da10949b70910ee07885a991bdee396f76de3997000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084bd04527cbdfbcda694ecfe7dbad4f171660987ae8f803c7346c03da986f30d56801df841a72cec28477792218b53af27afcffb2bb8a70782ef34da21000bde76e393a21c9f33f7bf9f41b772963f4e21060f0c5515cc0a2ea582c089591aa54ce6f850882b37eaf607e6c24089367f76f7e8a94d8ae569ae6f595592d9b0fcfb8a93cd3d76002e4d09511d46f707a973cf99016c1f29adde39f722214be72cf15705800f126797fa68c951c1656f151b5641e33673e4880d81d44da679210c8e843f3fb9b925eeacb9bdb57796b46494de62c2d8229080903e0be23f8a72ebf70043ec9b7b579fb0d5ed8867d5c2750fa0be343e8cdae4b9d6df6c3300ee235e84a0edc6bf029ab2bc66373805ab561b490bd36dfea02a551f415d02badb0e29c2ce941c8775f2590bbe5beacb7bc65aece1a23569ff4c39ebe04e0c9779d479db77b7f58534e8e880225d8548fa6ff478c5472008d69e0f6be29c415b482dbb6977f8eee85095476cf13f7dea2987a6bbda75da2e9b0535bc30d303d6f2162b38cdd85d533ee10ac64df65d3a62353ae3fa935c2b33f186018f5ed2816a4563cf8a9e5023b18572e5e97d7b9cd19b4f0f7aa4c4a6fc7e85e2290d851bf6f00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a58f5111af00683ea54dce0697394bbcb1c078dfad0662275e332b472b3942bfb35d82b6f7272448f9881949cc359a9021355b27bad462278c2dd218811662875536cbdb0f6ccbeb6374528fb39f73b99d689f62f4e5f8dbb8f1ebf7908a8d2a599e59793f380f1be1525114aab4fae607468179b6547e2446158911449121c5429d04e944f2b43e5bcd6f2f7b8f76d9fdac7f3faf072f4a84f55d9b11871d35e1081fab2d1d5d73f0854ce1dc75bfcbcf12ef7f14bb2ed6ff899ee5e07c7b16c0a4b71ba37b5537e24ac2f1875c3203d515006878f12ada1bdabe16e5b64169fc2ecc6d866ac85631ba12f31a39d29fe4638dcde6973cd79941f5c22a2933fdf9fea62cafb4052c6337d8afb0f6dc2ee28a45a9696c07dc02a45c8f5e4130e185ec24a8b7220acca63d0d7ff79e67fea2986066e37ae1a7dad9b9b87ec46a484796e840137800324a4d5be885dd17a8b7237f67901b1a26ac25de9bca0bb4753a8a9a88db3bd151410fb7fe6c75f7f03074f2162fce3161fec5eac2838f438c8c27ed5f26937e492972f43e67503a916c19a359d154cc394ed5a6980befdec3c56918c0c86591fd3094b4abf87968511ec58a324b9239b337629306630fdf6800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fbb0d9e7077b440191ebf9d94eb6eeffb04b479ffce6aa515d89adca065922555a167e1dc5edd42922ef1e09a7e89c804751dff58aacd09c15f599a5fed4753710a2faadb8366b17a0ba60e9a4e3b2c1768eb0ab92b8ff533a872cd1a8f21e4c4b83e9bb5aafbc1ebef37912a36c669ea076c4dbdd4b34d1bcf0eab01f039f908aef28ca1560f942eb4e2c2258ab230bb6db4170e2aac529303268f2a971870fe6c2c2ef565f3fa405969e330658f0a7339a8407de585dd1618310ab114e7090eea018a9a69a00cff48bb893adf4a56187ce1ca0190e68d7ae3579afe8d5bfd45bbc2972566fb4047401facdca29154dcdc7fda24b532e1e1c7d9309d0abfd6115b8dfbcc36ae6b1210c4b10437bbba3bb4ec63f4972bbb6c3ef852d2e05844f059fc1097cd14aa4a44b48d156bb89e5ad0d018084babab671b14f5cf70ab4b02f0fea7f18e122436f2627e4e6da3f3aedbe0db6e78d486d591ebe3b6fe583f6a4a76194e5339e8a95ee0f878450642b5e4c3856487055a9583e7ca43bfd4b7528ef48e5a337be73f746a23634285fa3a7040cf95e189a864db1c6f9ac7efb12b14a3dbfe9c4a57e35b9217ba68daf3fb7fe2a70c2b231572cc105921e575480000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae485b3dddc13e40525b04b46517164d36880658c5b094099a657ba3f559428055a0cec955d765c6b5a759df3015ae294c698fd5ea739ce46b3609d7c7b75e81b3e1ac4018eaa29e97156879002b4449515171beda23f90f836187af429f3e9b62aaddbab579896e8fbcfe8d0b75f50148aa4e5b755952d444d8864739fcd165f98eb5147d726b8f2ad35331b7bfe690a35f8d87f364847351009c9634f13728f5be9f1bd6f4b9bce03f90fa7b41e8b67d8e7f408a9d2ce09a667d78e7687f3affdffa9aaf11054be495af3834fd7340e616c99038f95db88997345180de883954f3d4a55152ce61564c9edc8243a1d97ed6425db8be93c0360532801d08bfd89ed040b11050bbb8d7ab8494bebc7e344826a315161455d25e96550777418feaf8cf79f71b2f9062b7f952ba2a1b335c78def9dba5e531c86f5fd0bebc0dc69b98a1878c4a85d065d285f56d8d381bde8a164b8f04c009b864d8b6d84e8df56139c40905701fe3a1e4ddf93163abbcad7a5a9b6619d00841040b2058990077633515c733ecd5f460a7c1d5e9b9e8769f2e04ce7f3a10d6102a3a1e9f28a0255c8155542c45fb2bc6c3f1a4244af1e96e9ef3117508e4a5ccc7b91a8f131c79f500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009700ae19e456dd088ffbf6ee7f4752236223d9150fe297fedef4897504a9e6f91dc9e1b8dfe2fbfdee399ecd1bc9a44e44ee5aff7464331cc23e0071b34c7dcb852f7af6ee469f0cc5deaa54e5d551aa1eb480f207938e86b825c256412144f9a522882700bb86220698a7360c106288e3487c07cd8dc377fa7cc7029808f9b9515040eaab0f3e8794d38fc79e8d4fed4a96038e7640b32a557f04ce77efe1a2703175addc1fa71fd1d5e150cc1a0ea884a9702ea860d63483f5a0729a6ac174e224bb679c043f39ae431bb9b8303059b1a1763c979f01c8edff1b4f1d45aa82fcfa2f301b29a136ce80849a0a648788ffdd8da0b587de38992877479f1ba8519b0a655c08bcd62249434b7b9affa42d1646cb8d92fc6ebb975b0f3421aa0301f4ab841edbe3cb76482f5506df931877564eafd246f685042050478c09c60ce4423c6d209fec6185d056e53c1ae286a34d02bd016e646fa8352699d1cbb130c720ba64a4d479fa444d15aa3a5c0e8e0fa845483c6379e7da1b3704c5769e36527078d030e37ddf6bb2d030f51fa95e138c28a6f1026f45336a5f50a4c0e716cfa6f10aa0139e486c1cfbe5253e917cc3f86f3f525ad2634b950b2bf2680aeded0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074a9c2b51a725a3cdf76f64edeb7ab5a5fb13f2dd0a0242b0521197d45bb362f9f3c2b34d81e841ab85955da56e37ef8d557d7a5f0f78a9326b076257b8982af3c9efc98c21a627d6cdbdc02145b924ab3b59bf65b6e31494e3f6e6350f03d38f8617e6b84f97c06cb756a22e7a2d914660748a5e93d65b108a357e97a5e4d9822b6b2cc797c334fe20f238bead1100949dc1d297123e020a9d35ba4851b62f2e47e7d9fa6b4e353e3168f8db35cce8c80dccba1b840d17f782e66a505c9a649ac5f810a47dcc4e5811e1339719f952a90d6ab7481561e3932201f95d9b177fdd3e34858ac0f649772322d9b1ab5d2dc26d6fb0375ccf8718ee680873e1dca4f22adebbca9bd25feadabf0a0b47abfb3d8716b609e9329322d6ee1effe7e4be4a0f18357ebbe53811d38db6984177c19fd135d5cddbf5c787423992aad6385f6ac2569a52a96434f508d7f1579c7b1479ea7a963c6eddc04aa73f644385ea9b7fb5f42ffd918ab9121d25cbd9179ec9334d78c37ad06761cedc5ce2c87f65d3d487fb060513767e352cc288c162d13a8e944fdf7685156425e486eaa31ab25ef9c78daf3e842d690ed2b2fe2321af4305cd8d585d4748ae1bb67ce128002efa00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001eff7d6b24e8aeb227170d12b559cd7730281d5b23223f6d617f6940825d95c4de723ad5f6972badffa091e6722479e368148658dfd98fae548f8b759fea250f224212fc59aa8f1f0a10acd3fdf2783304d76c0e9fcd50f28110f6d451aa46703941ab6786469f42ef88f48148cc7bcf39053426873763a6fb9060d1f3735f0e7908865508b9056c602919ab951825d3287ada6ffdf433b192d9936645d296c5c60f88b849a14caf455627c4f45adb68c9fc9b1f36b8070af7ab1a9ce9da49b99534663f88d872151ec1421fb1be777a27b4083788e286bfdd0570f2f88ec265ab572b5b98db767a8e623d85e2a7123cc89d87615e7495cb8f4924df5e9306ea40de3cb69c659f939fab6ecb31b5bd3113b903f1522d28aae15754eb98c687c2cb2bed52ccf48300532253b5167a92888d7634d980a2f95a32d727165ac1469641ec0845277e86aff9494f6855d9b093d9220c945b91f85c9db0bf9f2d4ff9c2b1b37a3f27d11ce1140bdd805d1048b7618d1d78f649b03a7604ad40035cdd3610a254fe4501e67520a5c5fc45cbeb05f593f8a32085ce28b9edb24f5d69987d71cc43893b091769eb59718c1970709a485fd18d2707ac98fbb2e4c95ef9c07500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ca0ae65f26074e52b2da5ffdb7372ba1474cfef2a68fc3d9ae0a20c20e9d0d00bfa949a3d396f5dbffaaa287acf1d3340e79b971b1f1e0ab3aa23d926f72ea1c1c19c836dd57d95c0136cffca53002cf3420f66d60fc673d077fd72dba44caa03eaf487f660ef11ffef5291fdefccd23cf4de19f9082394e289e7a77362b658dd2a76237c559e3f45afc7612ef9c8eda89471bb8895f16b30a4c809dbe601a507f81db4433fbc322e66600833d3a599a8f43005311f355bcf90b3c536dada24b1168cbcb383c520bfb1375d3dd43489553d73d69829a05f48f865c2c4e6133ec17a376947810642147581f0246d0f9ba803ec0552d08c8ac7b4a3049ccb243843560c8228fde48c15815c8664117bff9c11240db3040807012242197a2a63994aa80e6a9c89319a80c3776208f9305729d35685d80de53a034f7f9c29f92e2bec82d9c6cdebc94113d4d9e65ebad859aadcfb63da3de71c804fd77962a88be846ae4a743ab2504c680c7c23151b02dd39937b69bb4de824f0114394fcd1cf42ce1d9dd87ab710c0d153cc4689b3af582edad05cd4ffb43dca436bf6f5a8d1ab7a76f5208b6f2853d03add00fb0e1a7133ae1f11fcf84c3f84c6bcfd86586a9b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a31d0e67ce08b29c6e620c409c3e6d8647d74033441e6172a7ca448349cd6cd9be7871461a7d58ae9cd72b3021c9b0774e80bb4e54015cc8e02d96d6ae6326a24d1f9487042bc02512f8b4b6a75844ff93862e98bc01d7884eafcb6773d287a8f1409c061ec6b87a66e6676d5212b48250dbbf3ccca0cbf575ba8b57a2f257b5552b35f48b5851e6bfcaa97d753cb3e2b1e906dc135adaa0547f055c0ab9a38cdbbd719105626b628f6ded22f8aaa3549b9440e2c9d4177d538969f974be172d1eca1efef3f2763a926952d2678cebac8b4511f124d24cf373804d2ffedbe987519aee50a2ea6358520c8b5ea5d1686989398c32305ccb7e7a12eefc2529f1c6a2c7f091d0f1c19695de2d688b703f7bb5244b8fe8dcc86828f2a93d7fc5a0fc4cf2072e2cae6cdb9e053fe36116bb0e195b4e16936ec7d77dfdd1aae38017b27642d1918abcb0fb09c1b12da72a1c23feb6d98bc80d0afe6f613f34a75505a121fe6fc6fa97419a92ec8d597a24caa5c0d6c125a18bcb229bbf97169fb0ef978beacd26488f6995189c7921defb3fee7345aba1c1a024269ec3959e21e574332ec8486c5d9dab3a16576485ce26fd193e94dab06fdaea26a16e97a534c40ffa000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019bee4e02e9202d75aae20becd38abb47c907efbdb77034449b09fccd448d4fbbe1546636c1d8d995d94ba7c19f516ef7293cbab692ebfa419239005de35806ba77ac7189bf75c34eb78e9e15adfd2cd828873cdb4988970dab0b82d40c9e15b44938d8eb4918da6c0b34df05ef0baee35ef3d6c1da27ebe3d0b3bc389d8557de575d98558ad04f9a7a478265f94bfe2b5263d453fdbc0f5e418259a1a5fea37f53cc7adf9ab179ebf68d809bd3a8bc0fb8bc682ffe42c0ac4c91639592aa2ddb705a65a610e04c981ca2e2aebadd9e4e2fc4b68bd0839844a68a8caefee5c8315f1a85b42bb23b17b6a7761045ec585c49e6b26b6de4a98cd0f193b363e0c81ac05333fb6bec5a5054383f7f639efee99e3a53f79ef9d58547303e793121fc2b38f596e52110a91c6d357b2c578889f3597799cf1d4188a334250e40adf470f0fa9785db8bd84e77a92319b6eb321dd4bb313ff00bc37b461b5263caf6c96d0918103cf1c51c2fcae0ae0d8bdbdb8a9c14cb06896b73b2977546037f646d04fc4c637b07bba62d825ac055aef0ebf5e9ada793936c166b0396100efabf907347d7c01750ab32e6e534d54afddd125600b95f4516315e30f510b9eb381242bf40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000abd747b185b35746c12c25ba6d07119322e12b2278ecc54bd146f52824fd0ecd18d37646585d155eb87f58c08650e11bd2600cc9a4bdc764e03bb9c2de343a6df24e0b3a6df185caa4100a93d60e5a65ca04f0d1bc05741c2c5c8ed0d558e650cc68611fc97936b1dff15af69c9264389a52c6fd5f9b5282fd226f829edf93b3e1bc6163caafdb03eeba6287664de7ce952655240c43a7f8d7cc40044756e74b65033fdaad98a8d68d5193dbe8cc1d2a19bb5a62a6776d24606eda28c1f286c59e5337005eff9bf35f3a0e04e4da48f175adbabb5b8bd8c29702eee10fd5574cd592b33d3846d871cd226817e139e6c92291f79633fd2972c20fdf9d10f4adc984d5dbb72c41478d73325be68ffe20431d968bdd963d5b8681b4b036eb75dac42eefbeb3f5b5a1207166c6410411a405a892df042c5d015ff189e5d04bd0287be9204ef278dc63e1d789a4ba1405e48c7ba5ac07c252ba3cd4d6a23910a3812358777c3f6789b5afd9dd43c32d5de71d6a775a4fc894cde1fc6afec9b08a9af2f5c28e36aca678761de38156816783b942714f4d8c9702166de133d144d71eeafbe3ac2c676e2e5d3693b382fdb77d9e3dfa8db61c9d2339948f131dfdd3471f00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484003693f959db8e8f6639066ce16555f0215de7de2af740b4f2e6c4085a353e1a8158b2635dfea881efa574265b1d1a4614964bd60debff8f944e57889891cbfa7125eaacdbf95b74748f2b1571b6399fd0691a7c7f9de48b55355ae08173116260252cbffeb3f01042db3991e2af148857a4a258aa38aa52b9b6f21882727fbdc0ff74baf9cd91d0d7dfc85c1281d738fc369656823c6c28564efab4b199e0b630283f53d29f5e32b4f951a9c267144f010464727d80426aa526058bdf8e9a7a816cb94b618c79e7ece81d8a527dee40c0e6dc6694afd5df7f2b1b2138863c71621d7526d1091bd0b9f10419aed90c4858df8671168adceee4f85ec5a5556d4191c1a24ad4bd76793df2b3d8331474ab7690cc5ff6253229928bef99d6cc2e06c0a05304d5f9f9dba010ea36375e6e26fff63e529837291e12b04d152bc0fdee62fb66ec0e56b9c4bf7196245bdd7d25fdb8e3512e695d75670d80b9794bed6c610f04c615bd4c9fa7d05494bae7da8701666e0338cf0085fe214d60f3373dc8320c0ceb339e8e462fd0895075eff8c8b96b323490d06bdad3be66e1976d3ee5f2ed5d54db960d6930d9ed011e97f0bbcae7f2e5ea63a7754eea45a5ba43dc0480d35218b45b2ceb47c519bec6fd4bcea61e791568a238b78946aa5cf585d99c60c77104cf142ba8b04ca525420cb309cf551fa560654cdd2bf9d5ca04d9d33131312cdabc273040648b03e9b5dacc95cb0181eb9d14e199c4afa9a699ace73c608f2df9361701c2158aaf5166d141b278fe3d3a55ab4592744f75f66605ba5f505ccd02e7801334f8b71ded3305772fd4aedbafee4f67c9557c61fdaf98ec6b512776609c03b621eb4429778f52c631556987d12cfaf262eb2f6b45cb9c7bb8e1c095357b153c47eff53984ecb426acc3eac82cd625e985d0a11d0b4f5e0948105044251c1c28bd64819e545e2c5215450b339229c8fb80aa2c038ee7aa7a9fa19b27cd9ea15c138579cacb052a62f09f37bce8a54d8d77c04b67250e7538e7128f8795bc5ac3f1245223129e68cb6480f392a4ad6671dba1f49ba2a934ca08e228ef2cc259c6fa4c6abcc327f8906c27fb87051b2263a80041e0c1ee846a652003918441d0309061a3189151a3f12f0798d0b7ef5bcd020fefa15716ab727ff1b9f52610b2984c7dd181fa5d1372fd4ef8e8a7824d94ebd5aca6c0163a7a6e710ab5b4505563946909cb6c31ef1a63c861a804a1f2c4fdad8e2fadc277bc3811cf5142810622476faa63e0f66219bcbe4d747b77f515a3e98a1516f831331bb07da86875f1802b835e70155ae9757f386e92f9fb7f6188e0da673c1824cfae229a14a53906efd2433c386d62d2ec0816e79f6e649ecdcb9ed2b5ecc6e89039704dc5507bb615a70d08b6e0a025ef756700cc13b39453597711400b3d1a049010fae5f68dd9ae717ca9074a4a41166534a1c416594aabe601ef0efb68eb9d9b026d6dbf83343889dbc9eb477bccd2b63244b4652b5eb2d571a7239d8cb6c711f2afcd38ac975772bc34d0b1127bf3d01614dacc896f47f9fe25bd63610f4a0013057d9b84c9cfa989f4c45a6c00e3f1b0664d0541c1413446922679ceda621ee0cd862c7682900f052522c8aabb2abae4c984a081d82f8b527e50383185708421d823f1c7b9b55d56568d0b5799d83e5d84f2fa35d67db9894d2540b4a41e1742cc10915e7d1112626a040bb0239d63fdc678c6163ae6259c18cbbe077af588c2f92082a8fbe7225e7961f110c224b5038fb0e109173c98e8c2cc4234dae0a541c43a6935d44d5a713759796c20181c7746aa17d17d2c1b861f5ee6d9e5250b217f1d9ddac78c6f77a556e6a6e3bde7c4db1a6848ef870b4ddd5c3b3ac4fb60c1093c548a7cd014e095ccba8f0fb0a40eac0a66b740977c8a17c39088710f5af0a59dfa6b298ae8978e96127b451fcc292a8aa419b05f2cf9626432ee9f87ba11e582bdd8669804330eba474c38e412af0e7a999ecda11253f2b3234a2c680d514bff2eebcd0a49e7d73d45d23c48fde1c2054c06c13d07a6aaf825c1f1bcb7a26c6d5f082c9826717352a51f9332c14c73e3147e579140ac6e8a832ad784eff0461412229f11926de5fd0a377aa8d667849a23346233c839ac8c61b4206ef61197eb6c295626f56b7c821d8718a67c693146279ada63b08ca059ede3dc1a7ec0aba242e6e594bcf06950a3f08681a7da194bab320003558a1b21bf7ab364e140f94e01e09fd64095be46f71a7b661e75fd67b5cd17bdb366073399f7bcf83a52cb5a5b8fe9230e6f5d94a3c754edea0f10d8db4d482ba9949ab6cf6cc6480f82f24d7413bbeea43b55f84200787330fc33453e4417626ab653edc0ea921632a0e81b1671c37bf2484fe6acdc6ce03fb81b76c64d935ed6ffdc80ebe884f08142d991139e258cea4dcbdbd50472e5f508eca16e49950d786cf2983cdcb5806701889688f8bda261c92cc0fa8d1c8b610b8832f442bb04811103d81a16e46feb91811618b605debe5e254a0aa25424eecccc848aca65b38c28a1c52f6dc7e52b21af4b4de16bfdb4aee5df23dbe44e5ed3e38c36a9f275c125917153f74b5874d20f05bbd469d5c4ed00d19f6a17e4d8319a49461e4a0f7d220b9b805ca5da53a2cfc8e351050b7a2a9827026838e7426562341f573852f338d10d03b43ae455920f95c93daeab09c3e8b9d4742271fc46b849a3826d615b0c5ba0e7b26644a162b5fec0c4ab561c7d5f901e592a3b025f5149476bc6ef41110da40149f0031191125159970f69ecf4fc14f5d8a4e43dc4d5b04669320f95cdefe4d362a5f5a5e231e26081108a8a645e7e50437e417902013a2b0ad3b34a492fb6590470a58264016e0588cc3a124dff30a0e75068a67cb65e8e75e7a2d0ddf950bb71c55c4505a210f24ec5b7b610ab39b29f1a4ef981f75b2868f10eb46bd9dde9a517b80c1fc1129b53436a4519497680244fe1e7e2f5259dbe54c652ad695f8d3bb2b49046510b05da6e4e07ca92c42040c7b7e3bf50d1f4d938610e3f12365c9963e6bf2e22d1067a4922aca46eae18a88fdbb38ab7b4220e49be5a1069115cc72cd3f96b80c6204848a65f065cedbad7d485e51059a5e0a53e9d16ef63ac1258a68099882075326a841b210dfea9e950336f66a779ebf85b078b541bfa288f0deefb7995411c8ae436f86671a193b51d111e74af419977ec5284514b73c2a1c42b8a08fed10f4cae124c83d0d636725e8037681ee034b5beb38f79e4578b84041d3d4b83c14c5510516407f8621504d70d3c571e10a10837f502591fff0cf8d2119445bac20028b06a35d536e146cb4b61954ada79864cab58a95d8b4211be883e102e2dc186b1808c0aa7901ad59640a1f8094ab38f5870d56d3ca28b8f054e9168dca0207915e909cd980b1f2dabde3d9e2720036e0621dfd0503c57abcaf1c7a3328a4152a3ca8d8a587e448f8330a687b724929bf033e2c7391cf60705b7ae5f1873a0926e32c2f2df0e9fe3c2250f82e9e98ee761adae95fd96c6b3d7e2b8bdf139226507cb417e588f32208edea6cc4a1203f1007d4e1c6d01bc637b1d66bae1e9f2b1f339c91f4355f2cc3569bd289399aed91180a02d29a4053c1b569429ef9a012597932291a9d943e29d61331017139a33aaf8fc964dec979d7b629655ef7570751ff70b683b841cd5b6cb39e95587de9a0909c19283b218f9c1aa7bcbc81142c52892dccf7a4dac0dfc92edc37db3270d65eb955d0e5e3efe0d8bf30ae1a5a015ed75a53f6c77621ef6a51787428748103421f4ebdd76ee58cd0b11e5822402edadfc87fa01d5d42b45fbd5e5555564ec09c20546068ea5a6cdf17da9ab25e1662299298063aeb7cf2ae5b397169a90071f2677fc297f1abe453a4605c184226e25f2a486504af185dc101e43ef239a1eaf5c972d58905fae38b17cc7abc762a821efea6317b06bad3a52b936e5344d4f97871303b8e1a8541dc6c583c49d72422d5db4620c366c20ee4e92020c2f195c983e060c44fe482db35cec0f3de311d05e2a98c48a135520d9d9572e9831d247a865b5d4fd9ab328816ec9b1ff2c701d2aa77683de7951c614954991d20967b745081fea3d8ea7693d3315a67927b043dc9441fd789ba362a21a6f8705358a22110c7f9ec20fb84d2def13bed0c8527e344258fb53bb433fa6788adb704721a4db9ce5e41924978a1fce98a2561b723f2f7c6db3b7b7d38933922f5a7bdc27c850c28ddedfef12007cc7c64b1b6070060c1e9bf83b6f46e2db1f26d0bd1fa1979728a1ff96802e10b7b88e68258c123f14105c13867e96f43d96cb4e239e2a666cb0a96a107bff5c8dda998b5d7b92679c49fb70db7550e19b2ad3488fedb391d49e3fb74fefa62c47118fec7af882013bc35865331dc6a8743dd6ec4b091c10221f683317d0c77a0ec186419433b177bc1096f7e03c7dc7267f1def3f1f4ac2a86cc4524c88522174761214dfec603e08e145b4092175380ecbedfff2fcf2c185859977f81167316c47b182ce07313dd6ccd0f08c8e3230b398b8c8471533fbbfa11750da2bcb5918619cf0cc2c82b5347972c4c74adb4d97b7592ab523ac1e93709ebd0e33fcd06baea2cc7f213262eefecb0412c194c898390242b667ccff929f75c1518220e5b41da1038c4cd1edc4d50878e5246315b100b3b11785d193bb6d09fd1b5b787ae12ff5aa184c12ec94de6bec6b7da3431d06d7249ab1542c0aff5e5a750bbf1b2a891d4bedf652d7683630e88dd3534662d977eb7a42d1ba72d61a21917399aa59cbf04a5c77314be025c789970ee34b2a4efe5a463911d91533f10c364f3f063fca4db7a31de12c86c5835f8478d8b5808c871741faf01c5d8b756760350faf996e7dcfbbcd61e66cce954aa5ae46cb1760a9b780a5fc1c2b3539880c19246447526e4d2a545123edf6cc258087a64e47e7c589e785e5d6f4d62aeb72a90d610f02ffdc8564708dc0208236f524dcb3d14fb3d4d615b899f70f1451029fc6ce144d8c39e84e62dbcde98107fd9f83c8b1e7127a6e75b43dcec698339dbc965e2569776d5eae118ec414f2f3dd6bfcc5ecc960c99320a5f9e5919096cbb143daf5fc1f74ea9d0032607a39d8fbe8bba825cff8056975a34f9aa0cf229fe8a783f270551ba4a15107674e6db1c93e2e16fb8ad4a4b82f731fd9772bca685b5c324aa113969762d1e9c4e0d45ec1334cba32d6a968550e1cb2bcded3e9b9139ef53c8fd277dc9e60c904e41c0409206e8355321a22ec0b363c164fe0d919f5c3f8549f01f65f5d722e6c0ac66b6c13e2268ecbebc1de29c449c6189fc72e0b6dd7e0e4b118284122be8d94c3d79db996be9cfde1f3094302f4994c5c0da5f09d7a609c7735720990a83c0f57c907a24073290a57aa6a79b77a36cba1c0255fe3c416604a8d5f92816af1ef1bc0feae7bd75e4d6e921e10aec74b530bb4bccb28cee30eb0aa0c99b29ed0675ad1b52ba94fb6a295feb3026760810b57aac51e485a9a64d252882c020e830cc5ae5bb6fbc870e264e9a6d75cec680105f9420d647a0d235ae5627482385c9ee2dba2ef95275f78b269165b0b44ecbeafb23ea7a73bcce1fb3c3726e1102a58252c2cea852cae8739a7fb84267a1ae0362a3b7aeb094cdbbe373ebec2db62d390226788597feb15bcde5282d0da2a5558a14a1f1e287ddcc82043a442620deaa7b429bb02cb299c07b19bedf395c3a93b0c4976d04106d6d8d73c061003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000004118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000040d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000040a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000040b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000000429a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000004141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000000425e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000000412978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000042daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000004189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000041159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000000405ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000000405c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000000414d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000000403db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000042ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000041213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000041ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000000414fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000042b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000004305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000004280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000004223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000000417a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000000408858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000042618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000040f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000040e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000004172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000040b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000000405bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000004137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000042e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000042297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000042608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000000418373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000040422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000004204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000040afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000041998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000000428d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000041da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000000421d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000040ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000040e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000004107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000042f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000000409726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000000424f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000000403c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000041fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000004205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000000425110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000004283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000000421cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000004094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000040c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000041f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000042421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000041fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000041bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000004304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6e497454eeb901e022acf29ad0f2f9766ab93af1cf5fe504cc849f8a9b09092c0be9f6384b34afcb909497536d31ad0a2699d82af8dbd86ff91611d4b99c9565e25f9ba94e102e7b80a95a2cf60d884a0c17033ebae07f227407c333e14eb7e663c88884602283d10e0ac28358bf9827a9f5517b6912be5239ced5a85344162d5847a94afe1e6038136e44bd5306241e0c7de385271acf7bc6f1b27bdb6b19908d571710748ebed01c3b1415739587f98ccf4a9792376de0554b842bc00fa2eba91b7d1c3c9ca7a17e58470c2d55e1828723413bc1077f1167c6542a421ad0d4b97a6a1e7a714c0fc5648e94fea65afc88679a2fb84769f103746e9950d0d57ffa793792374ac591ab5feccd499d7285ed8eabab889f019638170aa2a0f1110ba60664219755b41e81624f18d81f46e7aff2d31b06de4b00bda7dbfee3bcca4a3b5e1439d9b7ac816feaae3e7b50a3d4e9dccbd2a844c6fe4ae3fcb2b18819894727869c12117fbe25c57f75869917cb41bf4b1efcaf0fb0cb0856a737734ceb4f13986c81de19249c7ed341543b834cd114eaa550e5b34f5f6cfbbbd173fe27fadf92a4b940a89d9aa7bd5ecb77b37d5477e69cc2b061689a23d03df1d00b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ede0919cc162c0943698365c802fd0254f003fae03e15659a70f5a1e5111abbca8fcf7cf64df1b98c40ea7a40a7f1324ce28575134d075b57d468b50c63a174950f55fb3de119039625983ea5cf48d5aec7f7a951e8b1bc38e7f7072b5309d5c00e3ac216ca3de65d8034de412341cbcd45fa2082bad92e9b7f2f90947e2580b5b20ba146c4b4779cc592bbef8c9ab848f89a9c9aec26b34330932c4ab5e8bbe6b7f1203bfba5954cb8463841ef3164ede1a8c684714fca1ecceabb2be3971fb52b6e081905ac39f716059c070a6193db4829773adf6bd6f806bcc10da6df33bafd861923ce8dc12dca8b013e9417bf3586bfe77f46cc9b8032fb5b409f8588c48e2311a881491c3c1161a90228f3554745ab0bac092cf2cc33aeebb3e4423a4de8a8a95f681cd7f185599d73d1430b8ab36d522088d930c7f941efca1d8d8c15221afd87aa5f4815ae1fc0c19d14cb4a09d950665622eb31199f3175b0879db3b6eca24302f32ca223e534edd368acde0e2fcedf315c825dd6312b40c4a6f5f93855d43bb6fd349d45dac2ea5e6d12febfef90b8ec26ee807b1449ba45264676ca1e30ef63f8c705abe94f90dec2c616d42c88445be36d584447731771fdc000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008bbb8e003b6c0b467241fa6aaf0aa8b086cffe807c73adeb8c12269fbb75c6d250543a1616c37e5bbd0b7b1d551fe9c8146ed3f7e648ed0c484b22827546447494b834fc556a885258a80967005e903501d09569f25a0efab290b19947c8b23488ccee2b9b42e672f5b1fd92a35164bfbe7cd33d9d54bab51f07020aa2c46e8da872cd19478a0318db5d0ec25e5013d1e885cf76496dad4353b76884ee10e08a735b0f3d4e1f2b81b746cc7ce0f6f8f9542cba140b3485e22ddbbf9880003235b1176650711d1ca70b1477fe0d9fe8ed949d960c47986bc245366fbf5982524ab6f1e52b0ced39d82e9162395bcee6a8266da8f5a4837d7dbfc3e25c496e806b480f3b05d11363b13cef5cde76b439697d6dacceff89005a6369c8daea7abc3fd3e5693f95cef44311087cec4babc0bdedb6110dde6597b32d5f00db87a49f3b1f7319545f532d4c689d48f81a1e0f2d5e0b58314e4950e656f6b29cf98efa21d4a9db0d6c9e08f792ef1dc1eb4c1b91eb965b9ec1e0fec0e9608168beb3d3be319df55bae49685aa1b8be1f349f2421effcdabb2e740471b0ea3b2a07239636049f67797df190a78be067fa0a2ea32e6ec1a251fc12dc1700e99f733ecd7fe3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013fe53e00c91fced01ab3aa020bda9e523eb36b91a6e3c70599853af42b1b1633e49bf577b878ab532c4aae68417152663d4c319ae57d45c3c0054215b979c6d1ea59bbb5c80152b0237a128be6a50ca336409fb9e1f7a00f2f338066bf7c51c684295f92b6d926d0d71ebcea1db5d9ec1f2179a7df872b58670cf642093ecfee366a7226e6c294a1516f3530d6fdb10e6bf4f95ef83b0072085b3db236c309509b793ccead85f86a62c7007fba2af818d1a7d9840d4fa93d28d57cdbfbae038e63572b813c21876ad6a4215ca635d3b316d16d78e162949820f0bfae96c6d31ab8edfc3013e1781cb96bbed836e91141d9d309215823d2dba8bd382739efc7bd0e5f8a347f33839d672b73c11ad35d2b34dcd7d83c7dafb48683e816e4e0d24f80a301e97823d929d56ca57dc037c2f04a046888991b19fa846a54c7314ab9e46cbdb2b324fb17369953ae176fd5bc4e8ba52fbccbe3965e9a781c6330263b10e9045e29a3fbbf1fbbb688002eae64df3c816932afda8d06dbdbd435ad200f7f02ec296e5e03c63c7a807a0b22497c090ab12ee1dcafab6c5ca5cb273a5e0363e3f71dbed223de8bf2ff105c78023a504f204b54d25686306108a84a0999484000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011b81a2428c390454d0d4ebd330756fe3db88b6a3832f373378b9593235eff8ce3159cde224f2923561ea563c90a35e84d64cee404db3a26616dbf18127fd63506d336cd777f36d628b9a5cd56cf3ce6ede8b90ae8f84389cacd82914a95297be91d1ecaf15c6df2732bec386fdb3d3cf4ab15d5e23096428235be8bb7d8812495b9e79fd3f6af47764f1023259cf406768f680482b7ce1340afcbaaf0ea3e8e5a0c58aec3d8e6fc2f37db02d2d33c71c1d859e46d2b298a5bf1ef275a61c47b09a68464daaf89ffc19ee64d42bd1dd5e4a388a6aeef4b1135c10bf722a82c5272b5e2aa39d107497c23fe04ba266e484467d931383806ae46a0edb75cc6ee16dc6041dcc088de8d5cf7e618d8d57431341d7965cce466b2ff79cf41b78d37571c72b956f1d756145d3175f2da86a4fa113d4e217a0748633e9e004e8fa7a3adfec6d67437ddcc8c0d274d1d732745f76f3bb8762ffb052039fd2a0d1451ceb7b1d777b32a7a3bf7ac803b852f3c896046dc9ad216a266b5a267fbcd179294cd560cf2b09764c393f34eb82663f0f7b304bbfac3c6bc8ab9da050da328aa9ec7c0f3ec97c185034747e0322c8d850a671155a3010e5b696cba3fd2152172eee800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009978bd27d220a4770901e42e9c4cb087c6c925503283c948ffb25065b6c976a5ace8a3e8e33b6b97742e00c584bfb44258ba20cd1533ec047e35aa9b9058fc17879b8c512d70c029aab325df0caaa95e8e3907906b8ffe675c017f5312f43536814cb05de9d0e4d193790c19524588a71f989bd13fa1447a8629272ef59a21692c21d0a3a192e014c27e18c8d4af609293ec6658060626797e260ffd1f3a6f0f6841bd983c57db0669dcc6b9b78ed2898241aad9df7856c7c826a31c0f184c6010017a17cffb6857dd3102d03d38b34c7ba8ecad52dd1479c51dd090a5bb63192a989de3721bba25d9008d7bed4991e707fc2a25720cd9cb4d7ea7acf920fa2ef13f4af54ddac25560072e8554394126ac9f4231c73ce941675344fccb4850718187146d1ac075b5bd4226fadaa89d225a440a140ec07ede2fdff771f7db525f0590bc21e08d3b99f39e82e787b8d19417271bfe7153edd4a99ed4bf844ceb9d02643c6f81d2811d63a80d59fd0bfbb88136e3a17d056d4f98c66f30220bd6062594663acab0051658bb08bc29b5764cf94e8ed4c2737442371fedc8c394a44ff7eefdea439142ad54c8fe020a50c2fd3c067a07ca1fef88ed6241634361a95e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096dd82e8613c7cedcb1648aea740066b46ef7e5e05e1f138f32e6e3cfd8ce113e899ceea4cec09fb0a2cba9cabcd90bc3f9b24218c518c24524b07147787c6f714490adee52f4568fe7e7a06a89ad359113387a678d75b8b23d15f8a4328c382afa6718972b53804244abec5ea8d48307c4edf10037616d3e253677ca76793b003b5bc148fec3fa26a61a1f17ca6284f66ed1f4a777cfcde0be96449da635039fd5c591d043c8cd7e8b2c12a1f58c60bb57b92b1f2fda9d968b55f4777862ed1355bed440dd239ad06d1d274a6680e95c0a9812a5c6c80b3a788ef782712dea10c4982496de42a7519e0d74e916b347b51aaaaff51abc1c6c0442c600c515d152ccfbf4d0347c828f7c82b6f737f7b3596dba629113a60b7fe10c28b7177b3b12903581837ffdf98dddb9cae2618a09754a648b0a4485249e666a8d37fc12787c6cb1781f2975171b5bfcf53692c2c06a3a3ad450b83ae914b8ebcf880c4a37b4c7948f52be9db8c8c05d45a8c89d806f9b32aa96b944671dd615386dfc3978a3ecbf353f69967716830260d2551fcebbe8d91a5bf5361985b7eee7c453c95dad7e0aa40d49a7c5affe260794051cd3804a3f6d849ca7757b1baa17bfd71d49c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027325a134b6784ac65a32a4b8ee0c60455f92ac74dcb247c20c944e3fb199e5abd9daa6cc648d427456aba30aae5e5968132083ae4e123189c6da69376911849e7fc0374b64c93913a660853ba1f4ae5166ce1ae95004921e50c0e585c27eb0642a0ce61cdead621f4eb6ff0649ca11480538cf8b324138ea23e91e03d36523faaa9bdfe5a1647b9756c6eae7417e9ecf36051de35cb7d2c74075d0492766f72098de05af2da9fe7ad6fc607bea1d897d14f869cc146b87732ca96cb6278bee96b697d2d87790e5c212b1b137d5f7dbdafde3a619d5c9f16dbf82174d2cfdf17a9e77d98a168c353e1451a3ab8fc76fb3525e60397f8eac9285b7e866e33a0cd0a78c605052aa3d43d0f4ca0291048844d75c2068fcc40fb54c0211478c20bb44d92ae4defb87041807a4772ded4c851860faca560d3b086d1cc72421195f3e267cd3c4470025409967ff4bef1e38505aa80c4e958f9bd7773e795cc22ce4c7cd439ee3397924cbf303435f53f19b7d74595e05980d2691d990493f2f04b698541e64f3ec9fecc796dee16e0c81d81be264e78ab9d20250658363d52799a2cc71bd95cd2651f04b419ac2de9515e8f1b626dd3aea704e3d29a8ee079d96dcc500000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000269d5690a0d6ededf6596e9bbb5d09345a8f13b3ed50de9c7cee27ba8767751709b2b7cfeecab21cc068d8c6ed98abb8526b515649c87ad0c1d3d5c2247200603c9c2d092fd6f8938a04975850aaa315a02209cd784a593407551c181c2ece16eab0fcc307437ad7597de4061edf54c28bd6662938f0b498c5cc88dc1898e4a88668efed25f0372f2a5254df8a9c804b47ffc0ae19110dc4fa931a4e6aeadcde73949bb4028a862445424f102f1244e3e2d2a4616425ba2f763b31636fcee9a3d10156c7b0bc2625767c6e3ee39fdac59e27a8ad1b4a4366fa75838452e5b22c96824f18bc0bdaffacd7b2a8178a282f566a7f68532325a36031365ff766b4aa7ee261f8aa29dabf142fe7ad14e8499804029bdfa364b1977b3396111e66b15db5f46cc4cb4c8249ca92a8df6015852b820d0a595076888642f2b831ee09923f2f0bb9de914060599121c2d3c305b0c3f9ce4c07d0efc1621d915d63271edba3e94371d72dee3b316f0a8d397079cbf3b2f48eb31af293fadc7422bb76d5487ccb16dec3f8b368b5ebd6b1614f9e90d8ac99b394eb6803726b8648ae316f2bc4b88a8d3215481861d74457198a6e87726e6dee0d0da27b44fd2d078a0cec325c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000284cdff570c2282978b22f1fe136f68ce020590fbbd10d17762848869dce0c6fe21da2321a2b40a9566447f26cc87e7bab509b3b1945d382fc91a1348ca1793d0912fa3eb92138b1d61bf401fdba6463b88d374a48beef1ee078425420831a91fcc9c9c2d66a4aaaf87f1170226e8a3136de51f0427a5fa6e1191dcf4f7287fc2e4ff66f4af41c91e0cea50af5aacc4135c7c975e1984e1aad5f85e1b30281a5fc872aa6e32feb90f054228cb785fed377ceacffabc0308bdb954e2e802c26b2570366893f69276d6568e128df04ed3ddcf82f6ede8249a465cc4382f399dc39b02a4766ee53539f7d7bde0d946e1da0972524dc625145f7f1b281ba3ead2f9dfccf2bb4db6007fe70f2d534a57c1788b61d6574472f65f5eb04ed6bd2155a1920522a719b307e80542fe25d830b1dc92d552c9ee7f764b623641e27b8306fcdb7f5778917cef6e9cd2abc8f1092f3f0c2dcaeb0cee3422dcf700d6bf90bbb4c4f4ed22cfe863237448ebfd22580345d4210b101073d37786f4d8ebf1ae4e518f23601a07f2c79dc772e7425bedc6fcb51b45d3694dd165e8461efdcbab5d667731c2eaad1b2283035d5b3a6fda152c1a1998545cf6fa535536a67d1605a6dcc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e496868eddec3dc9870dd3b924b26e4c367427197f639b8a310a0ef9a3f2e21b4ffdfdcc4d3c578aaebdb3ce33d02ed88b2f4cd860c1b6205b054b78079feca424eb18a7c3cdfafd7df1bfe3238777c4310c9f55b9074dc7c4bd170dee12afdd99cde5e20d07c26e44700ce2a8dc071237f6bb648daf611d6150e25bbdecf475a98956bce7503bfc700cc1bf823804d8ad042219945397b04dc7072cfaa9cc7d97d1019166b1783e2acb48679ae4108b0ee5a975ab547ab5597a5b2b76d4229d0a6fe92d21ff64e1e364b54f86f135181884734cbf9998555a1bd5e121aa40ca198ee757979356a75e5188fa1fce3715ea9dd005a1942e7e51ae36f0dc0eaea18910bf5ba61af352a14cc826f0a29c215ca1231c92d8404ff9f93d110ae1b4b8210b3dd9714c1e917a50426eafe5116b9a707c86af9e773a99ab186f075e6ee553952d3eccdf1fb805b2d56c24e91dfa489684129aaf60e47f09323b5cb89fbce99af11494ba2a977eed0032eb9f0cb7e874c2bc9a45738f59853e18e0ff4cc7897c259a2a9f510902243da2448128e970cc5c34714b76b8d91e7ff1661425fab9f8eb3f18850b6f3b35cdd464a7787993d4d1eb415751a8adb72ed429a20cc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000919c5c8450db729ef71dd7bc37dd422c9f0b266f796d2c05b8b6879e9c456a4e0766f6924f4ae0e3f46cf17028b90819d096124409660b89eaea3627d349b11d05d46a72ad828477c48886975eab3c17633399a8e8b05d34f803673ccc3ddbdc611fcd66d97e3a491b91936b649530a3b6bb9ef9704c2ffebe9c8f4ca3d47f9ff0bc61dbbb345180a6c2a4367ed65a9cd968ac1977cd2ddcc24082e9e82d7f253129285a31343707fb3994af4f66a55f5530b14593d4288614cfec9bd3fd964a4f3bb859553350ab964017c47b7e80f93b4f72563515ae8663ac4368d828bc79bb3c4b64cf4c26e0682ffd8dc197e04e3b878bd4894fc5cbe096b082a14062f5f035b5a176708d409cade8b1e3b34622f8c43dda277ec85af66c6a1e55c1d8193f3ba6a5a5b85f326fd0a78b90d14dff3ec7d9f3005c29882ada1aa383b0861c12f2c1794bec5b5204e12b16118eff1cbdbd181197ad84451917ed621878581081c0adb419e26c32e8745ab3779e144a377a8c46087c0caba31c0f37ffabf7fd33dc4ea332574834eec9f6e2a15342b8b205383dcf00ec158cc83af3f4a2ab909009ab5aafedc9fe4aa560313d2dba6f2ccd5c667781bb796b160f6c071a0d3600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001766fa135eecf3c94a51b207997e26ae21f2e5c18df6591e47e23a6fdcd2fb00d3ecd12b04c653124bf5d82443846cc9acca728a4031838ede4a134e2b25a63652cd691b6273f3a6dd47fc537d7664a247628b370dc660e43cc2d8abb79d60a49f299db76b5bdab48153ff9cf1a44bf01c31c02bfc3b472bb494ff908ee574863ea9603d471cbcba563c072b2ebba1e226060de9fb500b174adad61ec56e8a69476354d7791fe2a839c7e5c0e0fb79de40739484a7c9ca979844c18e37197651a4aab823a06aa4b15237a85be2b75401cf8411c2e8d1c2a975a9ccee623b7ac48e536822b3519b95637ca022bfb418eec4154730ebaf8ded7c2198a7ab7bb1b87643ada7749373ee1456c36d0e91edf5f5a5f9c10a93fc7cb65ebed01682a07e74d646fe6d33acc54282b6e55f9bcd5f6e280380abf042e9e0f9da01a281f4a231bb22d36b7ab908450c7a8bc5d8cbe4011c7bb65bb205d736dff275b6bca76fb295ebdc0219a4a9f635d74bec297a3825d1f9cfd3f94b48ed89372b70a0e87aae13b815129ce57245694f119990fd4a5c8359e58d202a83216a2166147cbbfc6c4a4b6b96092e3af1b833632c35dbe4c74308d432dbc002bdb5f1ee48a7d22c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000239ae72ce256c85f3018cca09b4d50dd83f0e5327f4cf2e5aedaffecd0acf2b86913a0b3eebb5436fc351cad1954574d77dd15b8758019f222d273ca4dd20a4f5f661bd34aaf0e29d7abdca9f42f0f3a4c42dee93d514b495070b02bb1ec784467e3772ec6af2bd27100ef02ee22db14dd799fb405c70cf3889a66f54e92dcfbf6297ebdea00726775f200a4f3399d31badfe680a01b7cd0819777ae6d893ad6ceee2474b43f6a8d37235dee4855307eb09f929fe7f0b23bd443edb0f487a80a7bc9831a98be65963c3ce044320787260a726510cbc19872419bc0c960f6061dfc8898ba660ff59cfde999b792ee81bec6273034875db59ea0972a77f5e85375f325f75647d1319e9bbcb8d6a8e721bf79e83a2bd23aa36ea784ab9a3ccd7d4348bdcabec3cbad759905d9e8694b38a2bce502663a3a9a234d0fe8ba86e88cfe027f4e7fa0f525d1f19eb408f40676b433a2dc15c3bc4a16cb1f5e13da770993a219c2c093519e25c366dc4618bb7160da4fbb66acdeee278059a74ce511e01d6d314801517d59dc0dee7a9b18914d0fe71d3b1a2038acfd0df290ecfc541dd399f493588e90982c2ead505c691ff608c3c1239eaddbffc801bfa70d476f10a600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002217fd6c82ce54a11cc43556a919c94f857d06dae22a21c904bb32ae8e1de42fcaa5a128c14a4af6a4a99bec19633bf9f0c0842e8046b8e52ac20813742415acf99297bf5e436dd7a516f5b66ba717adaea3d6c2685b8c91fa61ad479939600b1a7916704724930de3e50d18ebda3d0ba8652791f758b63a46d0122b8828f61fd6d241c3646b5dd7f2a7f7e24517b3f6836eb6ed8d37b4cc3d0dd1ba9eb9a2beb8e5cc756df50bc6b40b60edc5f0f523ce84e5198c00170e72795a5318cea47e2192a37b9a7f0d1ff1c198fd04ac43d74ae39e6db533c02989b14bc14f5771065c97f5cc8e9f69886eb0ec5a0ea2880e651a87d9f37403e62ab7da08f18f518bdfb886a69ed374223153ecd0ae39182a2d588e480869251b5fd3e32cf5327a554449766bc435206dcd29dbeefd1002c8d411d3dff0c4f399259e6e5f77041a7ded0cc2cdcdf2cf1ef99db366b187e145f6fad3546f3e09be35d27434aaa6309b2b8b442ffffdaffbbc77948dd9b9842d2223c86e7b28a98a615fa1db533ecb1bd46b3654a10601b9e531202ccddfb79d8ae17b1f96431f2a24eddda2659b711e57e8b9c9a6c77e8d934c41798af50e8fdafc03111395d10588cd914c1a2b39350000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9f7a237d67e56f991b65b14c80eb93d60105a927735bcefa17d132a02dec87f5d421491d428c838d1a84a3ca8aeddc2e025bc3faeabae932fba83872a8c401a6e40540111e543cd7079aa84cc21e6fd7f29ce1f33729f679c2651fcf4a1c9bc19af37384f59c15c7736891f7383922d84405f998980c217d1c22f68641dcde8a110eac6ede1b20c20e82b3eba368a9e9b7bfa1c6fc3d889bd246569e3ac5f03c55e89982815fa922d4312697c0fa253089950ec78f90722c5f779e10eba50bffc3362cf70e8745a07778821846ac77c6ec8e9f5e8bc6ae635c09e6c9239fcd2b4598871adc91738d10d9094503122430796f78593db314f01d0b129d92a55b3b19a2c6c66a99b6ec477b3015e41d649f38d6f611a0202671b21f8f63f03297823db75a47e0a0540c548f5161015296be23800f405c54bbfe8037fcc59608abc97ff4e00276821e08739c13f1ab5482a47d1553fd2262307daaf4ce52a9535363a55cc0333ec68ec1c4a6cd30233fbeb5092143a05dd1f71eb5d8b41d4da88043b7724612f15e78ac29a1a74ff6dc3a6089e5d4def1b7c309eb2aebe3150d2e6a695fef92653cd993223c335cef836423309037c7359c6cb867aec35e2be88d900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d5abac7cf8fac35990d03dc82678a6e9c447d286e62d9b7552149afb27e8f50400e6cbb74983b5da3eb2b63a244b18244fa3ae4e885d9e86e88cd7ea18cfbf1c2aa0e608491a5a09e3e6f74faac45c414a6a1815c93e4004f4e0fc107a6d7930b840a673ac25f729da7dffec19a5072cc137649f3e438f3629839b239a84a41a0499a8658e72c0047dc01c6369af62c87b0bdef15c7fbe73abe89f389fafa80e757f4235e9dadfc0f4c1ea68c62a120d037157104540816a12f65b4d9d37278dadb6e6b2db9e53fd9dc3aad240d79ba6c37d1aa70d8a367f4c161e578e3d332bee5896435e27edce1a1358d2f9634b969faabb9555fa002c110e706332f8b0345225b7ddfd8af2e84440b1579c3e1d94c9a61a43e07090184b56912b2ef7d0c362af8bce1f2c2da8e0d1f76654e84d2fa2233ebb8e9945be12e3917630c109cc15fc9cd1362f5e7354efbca4a7e0c906c09a2421c36b3008eb220bdbb5b6ecf235e1fed5cff4dd4ce9137fbff32daacbae51896535be65a44916c7d213aefc23a556ee20ca126a341dfd4a9a486206ba52b1d95b36ddafc95f8739b4ee7904229105b2b9f793311a6a549f932d6fd3939135f7a0e951faf20a0cfb9b4bee0e50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4e3509c61993de0e83bde52cb6ccfc6d857f1174924bebffda8b8c83b1e7b4a6772c7c8c6b55e7dbe9d9bdbf6164f48f2d8bd1f40b99c4c045c2ce2ebe982c1b6eda823d1441412b37e064301d547a929460239cb42668cefe8fb064b28ed860eeab525617ea7eda7fe2f2932a58db8dfbaeeed6c6375f5c0c980938e5c8d7f65cca0e50d26f8f1d01a114c27f233706e38f48311c5059982d95189e4d8b9e922eabd1a899da21d8f2b1e16fe970b76e0c1114c027e68e4403a8dbfb30230f4b06e8fdbfc55c7b204982419fe63ec6db682f0b6579d86d64dd050c923f97e75c4802865b7b84b353cae82660976c8ff23ed540bd98b719eef234932a338c3b3e9ce569d6bed5739a739cd9640b8596e689d76c7f3cff1c32a7b068223eb0571bda8feed2738c838e1607e98b80aa996ea726977fe8383c0417aea65d092a71610c30aff0a51068d187396ecde84ed1aaa4e2bc49a71622452fa388f7bae6b77c76591685745acd6fab54c0529bae7918a07f61b534b79faaceca6a54a7dacebf237f91e5ff944ab84fd7875c792dc452e48ca7d832860f7ebc2e8212372d99c14a91f6b36c2961faba990def63d0354f13e8fce3be841941cbf3c95d71dc4cc000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091b3136dcef38d5b3d3731cefe0b7ff753fd22d38336b1f2700523a2a7f28d2d5440489765684f5f97a996e156c5b68c9244edd5594d2d13a71dff9b13ee99d5b4cfa1d29357d8824f358e0a98fe53d742d39a63c2a30c750bc835c0a75854986bbf3918884e74c5b9433bf5eaff2df7c65f4bf017254dc903502e3f487b17bbc73f57ac45ef44501f448b35b7a71397eff5648f1b47a962b747dcfea045cbcb8a7974a2ef16c257d0b34d7da92fe251cd25419ac88b559ace93bbf64cd5ede362624826ab1f16bf45839dcdcc863afa6a09eafac11b66bd97d1aa063239695e73208b7e4d7fff35e8ab7eee23678770af23f6d146d8e4699aa79cbd6d5ec7d53f3cfe7b47f2c92640794873dddabefe0c86bc88c6d880875cddc45e86ad9ee341c40b60a4c3ef3e4e5e6be99451c6a2964fca82f9e9b8ca8f777673beb5e2589d3aa0b234b4a492d17d6fb6c6e4431ef0cc67b6ca39d60d58b807c54fbd01b044baaf509c2003c4916967dcf3b13506b3bcf578115dba3f055f938ebb06655316b01005859eee86f9a9f3b7bf228d89103e5d75afe9a4c8dc08e86faad6921767840bee2ac57e5b3512a029d84c5b20ad33f35b66408144f688f6093b376793000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027705acb64992eff29c9172a4dfea6188a7e30c5c2a35129466ed22aab6d7211e59f3c8fbb8adc8f41897ec99cd0968bbc3d56f6230d2e76f2197e5cd7baeaaaa94e0655676846e4c1a64da29fb3e897ec32ce1a62a3520fa1f9578f5ff6c0b37291d0ca0c8c762a49fc9f020865512c8d2552b5340a03a913f7b104b1e7303f609509841e7ea1e1aaeb022f94fee0221a1dfca474044c5326215ff00269ad46d2dc77f3015897a2a012bfaa8da6d1f49ae9848a45a1b61f507e4a836b2a752bfe465ed218653079ca07ebb245ff0a1eb0415650936ca57a0fb66e6e60a0ffe05da911007c80472df4b31bbf47a94b516f7f4024ace5b705c3e617f079313d557e372416ff4355594940b67388c63b2fb6ed1a3b166f6aa582584bd1947317ec88f3577bd1326b04a9998cbad6539bb35f05707c7d0b82050033cfa2e8db45a50bdb076bf6c4932e5bbe4d322cf0a4786cfcb4d96f20ffbc3023e0960531b603e874e449116601117c2e0c91786c20413fea218b404a8c279b03d29b8735fe85160cfe9bee824f27c902b921d9eb19060858661347833dfb0d523d7e9e56291a9311e4ec33fc6dfc9bf64b2d5ab221cb3d6486a9ea9bf0765ce590d26223c2f10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000970258f0f6ffdc11e69524a99eb1387b283a0bc27c9ad05d44b55d9142a0ac3e5641eef3ec7df1475a255aa9f9262c18ed01fdda220f9464408d80c4c42946a2f744c4913e448c801c69ecb02df2e6e1cfa6f77c7b39ddd4d03520a5a3c942c57f6877240d2a8571e60c98cc65a6b9a34533b3fd91b913a98b5a31f438199786e877e1b34ba6c78a7c75fd62e4e03a0c4761013086da45efb6700604881a4b587b80e2dde96324c4f3627f8f186231c17b9880398c162ab62ea5bdf278119783d53bec379317872b00a20c260793e3280875218307520e44dd07e484896decaead32c86ab77f96190662c97c6962e5e375d9fb4e1490f37a5e0e0c6c196905ecc473b5df4b4a9e05cd74ad4565c98247071bc9958f47ea46242f1be0522a44c1d8f9d7856860763ddc0724d5ce549278d27ae1f2dc30a0af444b0871878a3e6c6f8bb4996ebb3095a3c45a8898bb44fdb0ff690d993eaf85984e713c273535eb51294c704ce90e810c30f2bec3f0f491e1e969b824478b26f75f1fdffdbc84dbd1d68a2f18ce2d94de84067f90f40eed2d58be5938c77abc4351d676f5309e6c377a66068c9f3860deca3bcf7ed9c9a61889c390c5c8d0e21e49f79ddf367aff00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ec07fc671c84dbefca2a6fbdf76e6d251822405edd99536a419728709d34b927be57aa7fe921fca8d8a94a0abb0e5274a4aa6bf9d7828d6f8f1c99a34c624e5621f5598a4038e6aa253828ec16bc5c97113c2c147777fe7ae6c06abd93ee0380a98ceab4333d7e78160c8b1b5d6a7ef68362a75da694814b966263f0a6e898cd4b6a361259e44bb126116722e0a7437c320c44a31039c6c6171477819568621f7a69552c80f60d36048c8876d50fbaf09d326b50897c94100150a6c5e752e51460b1c93d086bf61fba91147a31ab695a28cb0d64a3dbafc1670deb06fc7fafc082fa98d082af0e85f4508b0bbe76ea3175be0f3bc3fd17b8db86f5fec8b5eb171e3c27a217fb89995d6c647e29a718ea0f0b71bf5bfffe1653099215bafc5ac127caa23fe6a01880569331c1cfaf5bb9e59ba92474ddb47d593d165d84b9b40e46d21fcb904f2157b306d64be9d4b7dc182740c19ef7ab40143cf03bb730a71e3025f1181f58287dc34e6805d327302cd7fca89998ab1ed56372706a8ec9934a980524dc9adf451888d84a11009c59636b9168cdb34805b72e3648bca425fa6da1441c7aba55010773a604db42357afd6cb7281eb99c86657b3946775e3fc9b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008dc610af4856fc98d332d8f56e9d2cbdfde50f538f131719a87961522637ea9255eda9c329d377365a05227a66d200b2195e4e974b8f3b0e4c85de0574f982051e60a5292febcb1cb1a752c546393b925684f044119e29770fd894587bff265aeae8af2dbca8592d132c508167af9c0ae861fe39224324548b2204fdbf1c6886b997b2e7fa5a448a908004f28f37558944b7d00ceb61b3a1e883cc815fb2d6f3675c8c23f5872cf8ff96caddbd6214005c4f2eb2701eb816e2c83edd4250de1bc9b6b36bccd5a8dfd4ba1cbc68dcaee47c53024b11e87b1696f49fc6880f53bdeff090b1153357de4362404e313f28b750fc250ac107a6517922443c09199303c292bff89e7eb65b9704454a0be05afa3704d7c66380001de89f5a2bddc91a796063d4eb7c7434fa9b8f5e6c3915eaf7e60d7c17b673f88b6f0d7c8903b940c31798b8dd50046bf7eba18b610103e52619715af2b24f95f3b9d4713ca09836f4f89ef03733a5f87e760d8a9fdd9f6f237d3193cda3c3bab026be8c1716dff68e73f8b76b988daf8c2e9e14af49e308c7472aa8e5d535d81ec4efa7e0ffe7860c0a969021aeda87fc4314110a6324c610246fa312112714d708d8c11aa0c172d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a5f1acd38ce54e6f648550cf08974b6fa50a632aed15d3a53104f7289f196fd1bf31af9646dbb758920edb3abddff29eef59bd97da67a4557019ee3802dd7b052c7111fd186c6b6c184639e8e2a209d0e8461ba03b05d96394d976c4dbc97d4268e3cb5b4f52f572850c1f38a5931117d436c4a11fe2346f4803615e40a9535d04f52a5f75db4b59005ab849597fe60620fc314ed35b54c6958bd7bc6e1915f834a84dba99fe081a69cd6eefbbbda8164283ffca1e91cb3c2ddc43b19b3be1b4e8a1e11493e80d64e8a30d27b86c421ac68208a6c70469346385faa951c8991ca7e099d40f7b801f505a30665407987bc53aae68d6a2ea193a3dc3c40f1e608d41a2dde30168b173f74c8ba4c97a30628fce7ee74fb7697930fc9f23d2ef53d789fed78da949ded304ba4070ba73531879ccf52874aa3a1bf69ed0e781acd7500343a334bea11b05433cd7659ec0dc41617856a727e8a1d9a54a242be2cc07a58e2b193df24e77f4e2a246b56a9c6ecb50b40a28ff01cbcb21373cda80ae788b2f1d3dd4a99fe4d774436fbfe138b1bc8cdfff8ee459e3824cade215733e7f3e286e0df0a21f1b687affdfac777880977bc479cc35f2f77b082d6e886d714a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085e5f19e40c1a668886f40f2667b81ae10353a115fc9c3dde6eebde852157da68f9912603cf3bfc05535e1f56f836935e13f2388db99ff2211538b2e2f27500e9ddbf8b0cd0f9ad4602c36ab02d4393326c1fa79f94828068c5d02954bb29710f1f32bfba49cd5c61bf7a28b24d16ac3a5d4cf5e3c113e382d52b41fe5b812064c31a47ef218ad62b6ba55eb48b91301a95c72c7c39b7ccc4ee8c46a9fd962c635e8e7cca4117fae32c2a96979b98962c833e52e474496807e542088f8570c5528aa4355b001f4ed703ee10d4c004b5bad8337e607dcd6151cfb80e7c32a7ce98ed049e2cbc374003f8612b76793b04a145f781aed8aa8d9a2d387a6d1c0364a655f18ee7cddb8912e4bd20a65cf8931f78104fbc6161054a5644c24e50021b6a6175949df30bfe5993d3406819ca486d2632eaf4f42609e6fdac06f4cfee04082fa56725cb358a79bbf6fc1a23f4377765c3ec0ddebe5b24e6e190558b07b1df07ed5cd42ec91846392751fe4fb574fde2d3cf7ebeb02a2977eedfa19b50eb6f2a78bf17a905879f39080d9ce6d853a5283f777acc3a095b95d3cc2ef42d871bfd16326023d4f37bce99283724c86c417575cacd4409e16c524600d749ec06b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af36bdc0938851c57836a70a785dcb11bd4a237bcf116883f543aefe46d686351de351db681de2676c1e5431891fcde1f45a8aa056dfbe63e34ea317e589cf963abb0a7f8b5dfbc6f7c5649377280b67cd43fd25e3e69f8d00ee2d0f9457087eb05560fc6607c8b7b8d8e9583fbd2de5f63bb9e27b68fb6095cf1ec88ad6e00e1f80ec9e3fbed65f79f394aea9cba760543f731fc5cf5c9c3f00f737117a4c0b8c7507fa0e3a7a25499bc76ec9104a428ee098a436dba05de4fc188782cddb7cc51181f5eefc71407669a33deeeaa49b427913f283160a9757304966c39dfa8a726e1426fe6e1202e593f84964f21c98a2a2dc7fc830e6028fd771f9958ff96ac4d3087577a4548db38f59f3ade466ad008cde59ef3bcf4ec5340c35c0f70bf9ca47b4b53db37a2a835a627b515c18bbabe95c3231147fba07a208420e5bcd1bb0a07bba704624d1e2e496bb15d33af5935e85ab1e8a1a8b8b458ccfc3dcbed54057331d58d21d041768ecd915c9dbf7135c289a6be5240637d014afc70ea3fbebbd2bdc7b63e9e4bcf9694c611c74fde942ea50bd205c125ea62dccd754933de7d313c4d5bdfb865553a5fb4b7c0dff4d715e9f748d6509faaab41be0f9ff1f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004bbecc9885ced0ec44d211e2e8df8cab103431d417c944a70d5d4f7925b1266c546c7fd65dc612647bf0dd3f2fabf478d5b2322b284a8fd914efd7d87ecd5fcdb56009d0675730512cdf2f04c3b35c568fd62dda2d859483404794ecf696a77f8ef5fa308f0e2c08dcbd987cd1a8dd8d7ea69122e36e6cb318f4c814b3c7ad136f333fa2408342d04e82d85c6e3255773b660c8c77c916b686de72b019456253ef02fbf1182b0b22b267a9a4bf3c024c0e92e86b1088e7c3a38dea9baf463a75af19d5355ed6082dfdda91493a94898a2b61791357faacad707b4ea9a1d2a8676b3a18409d8c425cd472e2b34a6913f808d9646a67994594c45ea3b664ee0401db9f48b50e2d4c25236058de3b36a01f1e9bab7801549cc867f161b508aa1e78bce580f1de0665da6d107968b7c5958f48e934672b467bd7cd9f5239e19199d6a3a3196c55e2e338bbb7bca656138aac5f29679473cabbe12d437cd76340166469a1743a79a7555589070d21be2e32cb87af97646c0fbb16b3fac23a376f21308069b42a1bf96378cd3b00f153b0c327334904dbee47088fcc2458b9fc5751d3f96b0583047b6db8369eb9f5c5829a4acd48fe3b10b38fee5beda2c922d6fdb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089a5ac899dea63c726ac74402dd4da5e642f4c996abddd6e664bab3b6fe064b3efd8816cef0d17ab5f68bd4565fc06e6f1ba4f4c3dea6dac845653cef52362300600474dbe44192be8fcff49a2638247952cfee877efc590734d1076cccf58416ec3d57eda00371ad5e71c9a0da1e8282a9aed68207064bec7c0a6f95ad3fb43e8c5c71454fea886887c804c9b68ffc5a465d7488b118a83dbf9eeb13f6cd7785401d6418c12425f9749802d2d1c1f2e49d8b4110b9349533c8d881dbda60c2ac0556582e1fc94d5ada58b8ad71a1735ade641751c1308ff0941b9f2a8d3f2e28a7d0dad755b3a313246ddab6d388308a9e83dc77a77f3fad0a94566df6a4b43c34c953e2f8597e99fe1ee8f6d2b28a15925bb53bd1bfbe596776f3bacc73830ff6815233ad5dbf680cd473c1df861e09b779652209e332535c3f0280bfffd48074f66ebeaeae1f7d5fe78987f02aa71d839c9166889f4bf39965e664b5a4b67c5fe93c33e76b6ef2d7306a5fa44c70e75e5faacad426c61aeb1bad3d4dec3de36419a72af029f5be4656d763ebdfb0b3efc0857348b1b413fab1fbcd64803ca9f3e944e5e5fb6c5e17e1810b067306cb8cc0b3759a9f7a9408cf7551f73971c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000280b752aeb85e56d7202f4a571b66947a61701422965321f1121b21273f4b95910323c10a6270c03a4a135ceb73c6df9a4f120d693a45ab402b7cef5443652a17c93bf1543d92b2ded0fd8d76d1f1f81780118d40890c8212b3821d9955a296723ae76aae5782b7231a228147580a110a8936b50d8479977ae43d4b7825ed17470264a0d616bfde93b55c43c21a48a19bee8d4588ad36594cee24328ba1fa4cc28cda06f4b51c157f3e4019188ebaf0d62bc4139fe9c489c76a028cf05427ba67bf42db13ae480c56bb2a5498b93caebe8ab51f8cc5dc27b3c1b793ee8faa644d71f65bfbe65787a5006726a1a6df25ab0549b88f13aadd9946287c599c4d8f60e754a83924fe534df064f45d6c69c41dcef30cc4ea35fb6e12ba157a1eaff42d61411ef381f924b5fa66997f40678e81b8bdb54513c4c47e1c86bbc414282c7eb609bdd69e4593cff0ab9ad6b8845b9ed5ec52368181a34c6e0b06af422e0c236879d499566b9d9deade7cc0b79199156d9e46b818835057bd75230264223a6342decc9a0366b2acc3663385929caf8b8773de0ab8b9de71d69a2b8487212cbade9af08dd9c5c204312b69d0bafaa572854e5ec8294abfca7d540368b0b6d69000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004f944eb475a609c32ea8f8d8e0700b98feed5e03b0b596aaee0f11ef428766304439fb313e70be381879dc8e8a8420772927093fde4ebc70309f258de022b6677352df26d24cfe9ad96b20b7c0caaef5c62644da06480494e542da475ec326b56ffa0457636bb23114fc5a6d1b8d4803f0355fe46677f3fda702a22b58d8d3dd237dd31c897d95c6080ebacdcb99c4a154a06aa881f00b667e17396e0d79fa09fa35885ec091c37ed548c588b34a274c37f51ac5fee6cfa229908a71f079e81a096f463bc3a24ca6d791f4856531daf3b89202896b27593d94180a5b3c55a377532e2f669bb99c9e86e2e6ce677dc66f41ec05030f8df01126cb9ea7edb98960b485fb9fe7a0e3e88551f4cae61035212946c4531b8fc3554fa62f962a9f11a8093469ea298d62a51207987182302d9214a7c72e2a5fb064727bba9d2135bd1c51d6aa933ee515298ecc6c6d94bbd91f3414d892e0a9c977a6f5c02daf96d48e23e3b4d4d0be085f66d1fcf2284cb7d8b62a82846b695b29e6389f6cf24efdec1057de6c4e0c8edf9864e0ff50dd3d6419f4b09f76658300af131bd6008738618233d0bf5632eac38c15f4a6bb6702e6517c9ed345067588d941cbb8058d8030000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000179787a60629fb0137ec87dcb31d227c0d4528d8a9ac20a5ff8fe01ce3ff47a05ef238f2fa7301519a7bfac494fc770fae9740f1620ca819b66517eb18943540d796afd36b50a43047d1d4e8bb7642cca311bc814567b8621d806ab53fd836259097ad794a7d4131b06cc8012860dbb8b23b017d6c0f43135f15580ce93cf579c4cb971fc1cbd12fad6239039da49d0915cb49cef7504d00e76a411be8bed3907e5249234881220e1c19f4694837f130a27e29b970bb36430dde94875e0714eae9ee3f2e630a41b165cd61dd9bf621a331e783d6064d3a176209abfc1aa289753347dc359621a691ebef0af559ba687d692ff053edbfc5045bbeebe7ef97a89394e2e939b2af445a6a54ad54a431c8f5da0714ab3f0cc4b9bfc5ccf1103dcfe9f0e9e3abca5df28dfd26a4248b99a51e699aa9e2be04736592778fe73e0c7d4a1840586163ef539dcda80042b2842b069cf506800437902ae2314eb2f69946ee5f6095bd6c87098b8d42cef8e7c92714801d367afec7ec60475cb72bdb7aebdaae08bed27b729660e61fc9222eb999626ea80fc86ff362470abab6de435729ed62a444aba88053c082e78dc8ed7b35123f6b4e17f1e04a3f70f7c205ea6d688a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098bc1775bfb11a80bb06f322ab7d9fb30edd85dbd1b70ef9d08082772ddc36ae52392e07bc58f76a69490947c797ece431db864f98c68eb243edb0b328fb2ac12a17a55c9550b5fc2ba3eaa3f14922b13cdb9152afcd863934f87e34379e77fbdf6c75039e2a8a37f2c299f571dd26fbc33ece5a51904e6d6417d789fc3a0f174e2e0576fd0d77560e5ab7abd70102fe731f66921c6a5d5c79aeac8ef7a551176af940a91af636b4eff83c03e68308ee43c9ef835f3d21b8423db25deefcee0d968af0158b5e15f8d06ba127522bd657518ef0249c36d067bc5673d4afe5a92f58b94f823ff246c08cbd0506c56e06a68dfdac427ce1e037f6645e96d7d76a682bf448f4e20e08ea2e607837d3e9c1701577b0148afb93bc656d32d141d07032a6f4a0165a80b8e749b73beb6fa067506fc8f07aabe5b891d593856efe4a82f1c4fa07bc859b996d0191bcab13a2dd438525812d2576514177f727bdcb3d2f313c5492af5e5c466372772e506c2afdf49a11dab527fc0a9119f95737120ead66e1333bb15d8e1c32357fb610afddb65dbfd6d57733deb2f0ac6eaa0edcac810a0d7bd077d251bdb9d06923f5dc01a83f8ba5ffea14598e9274683cf2c609e0460000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a574b81281374bb1ac3c63a747392b46c11f94304c4bd901875e442079151912935447fb07f62e08379871596a8ca9fc81eab7afee5a5a882649f4e68c47b1eb6b35a86911b9be5a106ea008b7fa7cb1714c799f789220cba472e3b9b055102c0c283061410e2080beb3d83a90363798c72c69eeaad0076e76a2ede3ee74d2eaacb5088d0b5a99cd3da4bc9f82bcf651a6868ba83ec17003a95d68411d8f15f6fadc14a6ef9d623d778e123154b9df82eb05a127c0aa273c7848b5e0740dfd8a189a4859fa078ae949f9186aebb742a5f26395a3fcb30465128b3dc172e5da9e5dc5fd43e7819ec5d3f3ee633e188fd221d1d746cf458b53527fb7c77edb30cb030f57b09ab5ab921e00bb2c14b964988d817ed68c5005e9655ef19d471553f7af4ae1170e0d682d866dc79fc179cb26ee8ad7cfc07bd1d486739e5d289e254650e17eab144a04c24737719738d11cc6aa5cdf7c461fa053e431023e7c67b4e41b29e277710c1be7b3a06f31cb0c91ec0f5c6773f75eabce85f58d84454b79544f19daa60690efd631f280e0f938f861b440f5987ed348fdbe4ae0aa6695c3639d61c5ffdf42c8bc42a3b4b89f903b29bf9aa01dc0776f53ff724a61326278540000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0d1eed6868d42e9c2e5d2a77dd5189b311e683c58678e10f7e0443d23340e8bfaa46f46f1ca3890ec5643a30d34af88da58ec6e87c78645f2e82960ea9f0a5cfc2e0067f4ab10ca8bf6ff7d5646ee13da4b5d3e2d9809ea75ec886bc9d052a17dac5843040340686127851ab3d17c1379e2efb9a9094a8d50b699b15406e49012947b0ab4cbccc22f21d6278eb933d4f03b406b8bb9fec81ee76f3f150c50c020a750122396726c97ff8694d7cbcded498e9acd615f1d507a73b42f23de160cc39c4d4bf6dcb66aacdc9e7754379fc958a68b69f7e641dff07e4aafcbe7f2959f450944f688e7370ce7fb645119d61cd36098e5c4290fcce28d338165955c41371a153be16654b369fd1c014ef90d23c7ea0e5670828828f19531d5f241b3809da3c0849492922aade14eb984ede918c12eda0bea0eba8df5950be9f9f7228b40811e6d2aa30ee4c67cb2242af18d8bb6e6d9cb1fea3b92c1e882ea12e0b9aea8be744af0d4857bb8c8770f2dfda408cc51947ea9c13858fe9b08e370a38aeaf6d1fef9e5b7c412da07b34a721c878138aca54a604aa12f6ddc181b149fe87fea87d0486b61e897a50a2157e67401d93174fcc4204f3d409ad7cdd59c401c7d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fe85b6a5db4a24519ab751bd50ab461a88a71fcd3d5fa8b74d60d1551c2a114f14f112b123752e826deeebb0eb1f144881f25fa5823c8dd85ed47ceee5c2df133e41caf81f3ffd54c06ed3df5631d0b9933ed5c477cc45424b750833a27d2295c1327771287b648d6a53d72fb8d81020c6c90ec1cf628dcc3a4632b65bdf11105fb92684393e007d64c6ffac936381ad2a70f63640939b04a32fd283a740076a5d26c961e0a873e1f0ed829b1ea563c4e0dc3ca321211c5ee9ffae10c20934a8a821c85c11b2bfd2fd9e220dd7b0799cd3d413f593f09ebcfe79d1b3dc315ace371b19db293645ba3fcd9cdd7cda4372f21969e526715440dc7536143d8e5082188067903b955f7521502d8f5f6ab930baacb693d816272ad19db2e4cfbb7c5855cf16dddc6faa45f6b2f2b9d6c4c77c8b2ab40d5b3b2fee69d6aa4d9df15895578942a9117c3ff237f9207d3b326bbb7c92e583c3ac0daa669b41544b69ef98d4acf3413ce207628a3a766ab72a0e125dee767bfde15b50f5e3e2c7cccfbb8bcef6c492eb2ee31c4af06c2cfdf09c4bbed9d359ecfe06bae2e9ed6031c828bba32a08fc0f454a5d3951e472c5337423906b82ce5256fd3916911909ca8df8d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000072f26d91910c1be0d02b006a4f9a3dacd60e7a4348ca573486d80e48d458e98d05c91b7cfaa3bdd243ca8ec83410b668e84bd006b380549067f4050f724be4fbe691329eaf7b76596fce00a327f5246b65080efe54c8a30bdfff2d9bd400ad5e71de3d6f1de1e1ab8b9b08a45bf6ad1bfee37f6b2086a3bbec65bd93356f2820844ad8363eb4c1ba6bad8ded34f591f11188cdce6d6c5ade2320bc110296ccecee4047b00f6a09f1abb2e96ac46b3f090780d566b3dd3c137a2651c43b07c24c83518dde094d9099257eea02b86c43e82f6270dc7fd6685cb1d0e15197b4bf2ede55f482805794d380d02fd7962365009239b4c512378653b45d7e0630e849308aac9373c9d3eb629c6936ac4ff41424c90661d75c4c750e9b58392db2c887f28bfd4e05476b94e058fdc04a1a3e84aa2cdaf4d32d15c6034de2d224bfa697d829366cf89135aa8b2b0ec9294a858c27a0aea39d232d7224e033bdc44cab6bd9ba90e1fadf3a040e0ceb0c01d790996e0ef96a7f30f8effe82d08062a1e46194ec8e2e179216548f46b24cbf288f1a753b1de786a82e13cc09ffb163842f08e3ca5467615e95eded0f6a61e2fd21698c129702c6bfc79a4d2764e3812c89dde0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000897312bbda05799fcb9229dfead6074f6f43582016d9734bb3959b1a0ad0efef9a887a63f443664d82b01808ad9cb914b6d218dff2e5e2f647153a032a654cd42386b187841dfc6f08e5faf0ecd3ff1f1157942da7a9a410d69999777799f4254311521ee4115efeb4de5172ce461033fe6a1700367de09cd7b3761ca208d2f6b83d60795f01478b189b3f3f9ca161413e5227f2739c0e7f4d85d31bc5447c2c0ec14796b486227c9be0b9cbb8622cc9e7b16cd3fe14c8323cee8948cfe20c0af03151853bd9c73ab3cefd3298e305f63eed54c1d754eeb9ab4e77207e5aea239b9e7b9d039b164ea45ec58f84e87462a99042762f394317a5cabe20d5b480ce58c465dfa255dc02b03bb30cb9967b23e693ddb33fb171389b32ddfcfe29824147904e3d5892386872d69501f2216e709162b246fffcc95d353cab3971362fd6780995d29e4012a0d7e337e2e5e5f41af1f8e310f1ccc85602c73a98e670b9073fe424bf4a831d22531ebeb7b3551c3743a754a20d44c1eaea51a8e5c586fb75c0e0982dd303f43a3aeae91fcefb28897bea51533520181ca6358dbe91e6dca8a8ef94cc1c3641a5e4e5d56850d011522af979bc8e3f938128c15cd82106c61e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d753d9f5aca8059fcc1e751010799bcf08018f48298ddc7ed1f72b0cc355465c4e419ec0c45a84f44eb56833cf9283aeb0445f6baa2ebb714b1f4e5d00e6be41972f79b2f681a6ac6b17cf643f72c3283647d34ec8438e9af48cac473c4a956f05eaf5ac35b923200f8ba4a41be646058f546b00c9085d58030ad213fa70968445111b0837f5c22af7488faed7ad693bbf85036ad834a1994727ba51fac7e9ea1853a3efb5a80d02c569ae74b5a32e0d61856ec627ac141f688a622432b97887c069c709c75a180d2aab04e55b10b40f47c60ec790790bf50bbd733947e89bea6609990220a89dac8e862271b1a6bcee27697f84e9fd0f27376d5ff0dc1dbab5e17132fc7856ac44356ec8114de758db186a512e614f88fb185ea0d85794aa23553d46d6bf2e22edffd22bdb9ca42a592f34f55e84652d65948e67fa03fd70fcfa1ae643b3da809895d3627acdc1c2e0e3f543a3778a257678f33b55485990dfcfda3a8481c52c518e9c894b4fe36228cba4b3608434f1b179ed38487bab2464ee2818d41fa649b2aa776abbd7a7ec9b544eccc2a67d7f941be7b1660b05a0bc66490b91cf04eba1332f5cf6b0cde1ded330615463093e8765622c53dd43c94000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004005c38b86f7fd7726f6b3358d43f403241295ec0859fd42992527fc63b18aed483cf6d70bf7d991581f2e20e7434d3620d787c917e3ed2fb4e9917c928a34c48742c6f1bedfc698c7f50a70bb0316c1c4c602ce57c1366718a55421d0c5a4734d1489833cd9808c21e44bd2f81d4d82fbe9ebae4cae9dbeed4b338a5092f1058f71c1012ef45df474c7e81c467445334772e594f8c77be173ed26271302c8e0e77e35515e2e3f084c91d7d73e6653954c3b13045bce6e06cbcd1056d57d624d931d03922f9a3c4cf7452e85a1bc9a4f73210f048148ac4c740445b8615188aba49d44663f76d5299c9e917351f25554e0397d7ae4315c96d566af28cb27425b3b43e211c05da94eeb3ee5c24b9a4dca0ec1541c0d7bc9128eae6d8737c475195cb1562a8a6d8b3b1741a6c6609e5bdb9bc7c68ddee66b8f166a84ca7695d8b055fc06c822b51e62f37e9da819469d5c8fa871855a9589c3a8d03b51383ca7a2cc2b239b399be14340049d85d8a35bcf131efc8a89088c32727939121d320d1e2e7a1ba5692e67cae7a8311888db77ed241f7a13c229aa42e7212a6aaf0418496e388daadeb5d74c2fbfd67239684a88b879a47d41e223fab9037096ca249230000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000299210402ac6e49bd17ea7b05376ad182e9e07ea463f042a7be83d890061dc3ff70c89e852c851b281d97a58f58b65bfb2fb78b23e25976cb780c4628bce33d61a1401fbfcf0612f82094560c4ff3857f0b53151e3745c85d9ea4c7fce154c68b251c5df61e840b9e89b528ee50dfcbd30d381352c3aa4be1da546548d7ae8c9f2db935453823bcf0b9bf430128b1dfc6d35b63086358baf764a4692f923a2290c2393301903fa50c9188033d67c80e0759436bc0c44ee67dadb492f46ddb474bbf3a0dfdf69c8df678e3b84196d45d9659dbaa83345e1ec80e8cc58711345aed86672edbbb5abdcb8903648588d7e7fbd12e4c2b30b3dfca7596c02279824c862bae1943dc16fbef19c506441988cc67149a2fd5e164a6c9f7e741bbbbbc7433daf0023cf00e55fac9348c2610e7bd401c2e1e037f74b17e57f91dd3007feb26bd7f8ab0d6e340ee7a3f3ddc930e847a9e38cd62a079435fbfb918cb9c672f51a13e69966d9f6f8f1f70491b50e0819bde541c0dbe4f8161057c1ceb2de0e396b754c55fc80bfe8b3fb9337c61dabfb9547eb683bb88b29079db434981bce89bdbfd326878dc47b0178ddee9a2d83eaa69ab198832cd5039277456b5ad79d3100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cc1c7df6a24cf7e80534627f9e540bfaf0876c60accdeda2bbe1d813f6ceba2b0edddbbdc8c6ebb1e717154ef182782ef26c7b904b6e74b7b39db4166e7dad343a1c233a8e9dc7804595660166e5fce568d994a3810c8ccdc78c6f7ebab53203a8ec994f3ed14e9aa1ee8b1a852d8e6dc6867d971afcf4bc83a2fd21e81394debbaa64abccc280e7c126c7946b3504fd59c22933a5f536a35a60b1ca95388770eda2dbaa2763f10aeb708880f5f259ae0c34c41e4a5bce521b8142ae6a79a1e33933c10437e221c62387fe54304f988bf62253d38828122cdfdc42973950697d14c4a8b74840858d2d7b82138065d9fb597023086bf7e87a59c443979c071c3b7ef3fa805661e33e7a3723ddb9b60c971e3bce7c48a193b693543572850c5407617090cd689a988f7a48549a0d70ed87a3202717f1888a2912ea9a593ba804e8687f538e8b622aa427998c1e39da39f85a56d959de62f012a4352e5656369124a328b46c6aec03bf0e67d9fd9af4aad4516e7a553c7a25e02b684747fd8e8ec0e6e98b21c1189944aaa7b0476574cf3cfa093125e9cb8539c1fe431aa94aedb3cbb625e636b0c33203d121c0c5c85e93fe8a20e9f264612860b7c4785424a5f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fb990fc43e6ec541179ec719afd5bd05101267a29db9dc862a050c7d81c9817bac460c595116f0187bdf444726aa33596d1252c18b3998dea3aa5c0e23ab8a60788d3c13655b17679a9f7f36d7aba2a06e2ecd88cb5b00a4a62e6b7f669f35bbd8c4ac96283eb87f256b430942fdc3a76ec03399215ef3a44d5a0e59d2a5572310430d6d41e0d9d7392b6bded90d9032952f72d61b5bee4abdd04fa3fd61ca43340f6ad9dc4b7c3ad010e63c1991c85aa75dd9db2a2e9e31c72a5a722d409d333418b4743fe3823e42d9903fd36af32e5f87187d4edd1e6a1ca9cbd65072293d3378702c3a64b56cfddf3ef8391a0e45bd68e5a10e3bf07ace7af3e7c76289ffbb125b6c9d74770c7073d5d54f64c6d0966e2f185d889e24d35ff42b7160d5967f14ca6ccd54cd04f72a1956b3cc9a68894a3e6f19ba4c247024d4b541e510d3b344a3f7427bef18ca9dae20f7c2cc6224d4eb7b00c9ab828f150ac0d99e527536adb239477b50199adfa1b5272a57a60ee6700e4945d10c6a9effbca7239926a3b19a0a0da4d1c021542746f01ecd695507ac4b9131c0025ee3381f20f0cfabdf5cbfde8e494933ab7b880d302b8082dbd0e69d9fef775fcbc5597bd8aec8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084155d8975a0e518e03fa522672b5d865742d6f5d379430ae208a1998c8bf4c845a0c5c4a7504c75bc87b09731cb791fd60b212f01ce143ea2382f59a957d2ca568451e10a8a106f45634472d162eefbbd988a7e5035049806fdb3d076d3682dfa50536df0f1f95bf4001b166e3569f591ff422a9ad57a1f04fa4218f787ad681e9182029ec926cbcc6e31347e7e0b2c158766b9aeba0e6849f266dac1b5056e1fc6b7f71a7fba388b1b5b36b81a0ac1284d7e42266e3b6d3ec27c1cccd6fda4b0f675d45856a925c5f2fd596154c31322c9900ea1a0ce969fb631497ad8998c0f19a12c27a1ae24df661bf965f90e4492fea2d9b213f57e17f89577665e2810423061579d86f5dae2de13b54f50254a34d64ee9ceb36fc06a13c896e63d6d07d8868c20f1e7ffaec0455541963e31b1a5b9329f0e483cd463f279bfdfdb373875ff5347a0211f00d346dfd7cb7c17f555f8944ead40667c47105842392be252fd0d1b89ebd89935fc148337898296ed40cd3c2df6683d0b94d3329a1eb50023fe675282fb246d585ac6413e105efd2a5c70ee100604d5e1dd3427885a527999d12339a42ee4e9985173f311b54d061331287c0c3ffedae5a70aba6d9ea41e2800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cbb8a1b285c9cf44eb736a1c6e021484fbf0090d1e6b4794a25a48cd96d0156c8b1b2f53a6373d59a03fed428ad62f745480f2cdf5b653dc8ab6964c8db18ef3ad8eee72a89d65477b79fea83db0eda8b965a98e37bb65a38244ad7258c66d2ec7a615d17166f2ea24a8514e5cb5e36f2f660861ff6ee153b3eb27f7ef6e8fcad142879c2f76377b2a3ba84af4fa0cf5f8ca35348c29419eb96f4890cbcb241951d5744092d38888de5e1ad65b7dac3f9b0781cb6b3c52c1675ff1527bd734e3c17acd0cfb2cb61351a44db3704bbf6b9fc934d0b6e052750da80c6ff447079c0f4f5e86afe5575feb644cadb762ea48efb4fcf3153fa96ecddb03d009bb27cc1c035c935e4c93c3a54782de29039a4e82ac205dc700a05156d461a6548e1506356e9f8bc8f6bdb5351178ba9b6ddeaf4c69c0c46278c8b345b8be771aa5ab190afcdfc8a19ca49ee71dc92e84adb0b52b9b83fa1121ecaff6a47388302b81d4845c30ecb14a46d41c0dec9c1f225cdab3047bf1a8b300fc9ce6985ecd794389b2151d5cfde37dae84cc3bb198b458329159c1c060e9c22d88f2a47a1ce76c41807455e02ddb231b5b830c074fc1c1e69c265771a99469286d51ec94ef9004b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ff285f0a4f3999280db5caec23eca2c5a38b9f172d6570c02edf5824da52c0d3ef753c278bc729ecbe43a74fe5f091495db7b6a7c4d30f1894409eec5feb873cd1f76f1753c6d638d9c9059f206d32a7000b7c09217a3acff5eb637b69df2a117f262511e0333e3fb2d8d2d2a42a8f92f70e4c00b688c8568555ba9cf4b769f56a8ab0fb49ad35eebf46936a67bcc928bc03e80bf602cd40947e79258552a4680beae142402b01127864b8082e9bdbab37ef8373db141d8bdc2aaa6fd05395f7e2e90aa0365c884d1633652f2f0d33de2110f071d3e1b51057269c227f164a5213315a5f339febc009cd087321e4a87bd54368ec61d08ceeb8501d8dc46c8590af5d7ff5f3c48a4429e2cf06ffd17410eeebc03d27092960a640c99db99f0b85801353c6980040092969a95a30f4980bb97256c5691408da02cada48ec492e74999742740b1bdfc1f0243313884a7142705f35c7544259032a5406dae5f72efdc7a5273940da8ac81344fe79c8587555d0cf40b7f1dd903fd1de028dd634715048ae0beaf9f25ebcf37846e788948f532b3d21221253c25033c03d9ec3f2512d496f590ff1d1f70e5fb32ca772540cdc9ac2ab649f10fae00e802658407656100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009795750f462e50b4e76a365956c1d868f4419b818053ec9a85161e2ad732c06d899dac661894aad99625ea936cbbf2c5312059db74cb7dacf708550b55fa51d39dcec9d8523dc55d88ba21939bfa6137c9b6832c01393afc7e41e4c148df429d311b190ff75ae5130d3572605538e9d4032ca8b72d2825174b87a2b50204c496a9501a2e5f48076f5e3a208965c7099fba780992a73e4de1b5b5278891d39a7affe9124370519ca8541ff8c63f75748d874941fb18ed90e9124cf7abeb4251bc1ee1f3ac5bf80cf481d99552d0b590c818b4a8888d515a1f027ed5b03626a0a503d2bbc0c7894970d2ef62a5facf7a9b96c939d32aa79fbaeca09e9143a5c0ca44d698c290b35d43ac4eea1aaa43b2714f29cc6ca375ad9d208cff5d58bb3bd3bed67aaab54a84d440862aa4fa7521ffd561e3521b3fa673cf53b032172ca5da919540ffd4bf3e2bcf76d1dbf71a906685d5f849aa079af7ba70c9438b175c7d3e7cecdb8a29991ef2a568cccd121504eb02bc0415b19092e4eb6716b6855a215628053489a5479be859f5cb75d97a44404490779d0031775b5a2eff68d6c8871bb1ae3a83e2c5d02344ed89ff66733576be484f157d9ce59ad213ffa442ced00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8609372db88ba20243955b7a751aced9f11e90377d04545f9194089ed49175513b64267f65ec0acb6f0bce5cea79edf8ec1c17356f893d9a0a8fa116487d0071d929d2459902aa655588eab5d5f77958bc583c8272395207f48f6e28c921646c6647288b0d5a8547693054e417ba53141827492c8649f76f7cecbe8af384c5b1917e35d810f86a31cafd5c58ac5d0bc6c1200e029e08c908f5291ebd8992743693e718b0bb32b9facbbad1ece708aafc1100f4039052002e9ccfb20a560ae1735b257334474ee70346ecb8bc952d377aebd5b4aba7665d319991930a99dc69e7a0c50fda82beb204401f7ad433ffe64144ddef06eff614c1e83ed8a195db872c00bac5d1ba9744f858907052e05032e206d6b9aaf52c6110829f415d1cbef6fa803214a75ea635da1a2784b6f577ab1d13e478c161c9b56d991ab4098fbc7515fe355c7b98d623e27d0e2e61e4e99778a6ca0776757afb467433a1c4da7c0b665f1001aaeb4609764891a7d3f256ba7a47ce22b48e98a8377b45cc6cdc4f0e909584a253bbdb23183395a94ef0d14a97c4f4065c732459e8cd062bfef2b30abe3a7c2f97acb727f07791ed672825cb69be866feb40af71735a5e93122f666b800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f0f185e1569ba69373986a14289fea32bc1a096f10506e430565dcc5a834dbf1b17a6d541d8a9cda19fb60329a607a49153c0348360d48978e058dec9e43f9a11bf54395df2c96256e43c1677adf5ce343d83f47467112a1fb794a97d520b005406734ac6f293c0cb1fc1ccfc43f0e787245fcde2cdbce6a5102cbb185eb785df8f244cf43053b2de689f3181cc32f3a0901251ff9ef5c05601dfae323626622a7701a132790e2a7cfd70032bec057a74901bfb1aca0faa8bec8391fc16f6a749d88eaad3175936ef766e92bad5289369e6e436dbeaefdb8c937852807533f5f15ce370f1db1c41b7d71d732d57a9afe83ba011adffdb7256b114f4fa3bd77c4f9d7e6aa20c85d851a50b8cba5b4f832b55f7e424cd1d500ad49fd1a8985a50a56d59bc44536267a519aae4e611f49bff0173ae92737eace68ca71153d8fb01ae1aee5b3d72add6357cd4db0d571ddcaa86afb8cc81c793ba603f084aea32ea1ad21fe4b7c31261fa809a9df05794740a0adbdcfc25c6654b510f148374229ef3f8e5fb40aba436d04829457a1e2a3fec55bd2c890ca9984838d8d3e429140b59f78543576c124008588aaaf0711cd6144e9d2008e993f53720c6721c15bba700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a4226a4dfa928e58f06efa2fa8c082fd4ed7a965b213063f751441eb22e1f119a69556b44713f993d09d6e48739ddbfbaf551c5a20ab2c208585aeab98d00d6fe71b36bff20254e2d58725a6463225836ef6cc4c989f879e6929a42b1b2f3d0418049cbb8d4ff02d7c8be6b190c58014272ca002cb444bc06258ee00fa39851984f2f6c3b72ef165347f7a80011c0de50b929a1c378f7b3c4c802729defe5f4ff8fbe12354af59631303ae78620739b4368088e9dd15acbad9b1e065c3e3a10e913e040a341ae20ce5064adab49134ad61dcf060876fb149a9aedcca97d45a39691dc478023b780d83a19ff84923c63f65583160352e02dec1aaf98801796b970336cbd18f5d5f95f4ba713dfd8fbb80f94d2dda82e45c351c6dac1df37516da786969bf453de05253663e0cf11cd2f57eb33b34371030f1ff4d6db655bc86b1bf478239f6b879eccd0c8123cce0079b902ec08ba2299d9e580d36c2296e4b9f32f68ffe6b1e30057c5c432a731d34385927b386cda4662135fafa745f9bb5d663eef58368e623eb2852d4164dafd9f0d7dab9f8898013f3b2cf51e07973a37307f9273841a50b5f777186f0d48a4d3df51d51985e9a27cbf5749033fbf043600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b2ec26dd3c0e96839b9e72369923a2a4b1b1b59c27d6fe39ebcfc119f2fdab000c4e89a67ca2d7200cfbc75457da8d9f5be5f9711130d0660be1951c20a487a9ea4f93fcfbace23c4ba3fc0dc3beb11d02f99b087e7a0aacc02538bea1c4f8194647d93b52e84347753b88370b815a1e92055f0e732930546deecbc49e4d15997452169730f80fa18df5130e40e1f405de49b1b1b2fee545a30cc9b7e78ddaf854e55d35cc2800c3506812ece778670206a03816456404e934704ee64b29dc536c07a8628fc6b79c2a177904eaca4857d008e47bbdd79063259b6836150482d8c568a6c90fe658a08fd4ae710a1afb1887600cbe75b3eca518af288e8d57945aedc0cc722add3e8de09cf9481daec17cc11bc2ad585a4bce735237ff67c28e12d209362f2c4778c8bab542c2e5f1f09fc31edb3a86180d1ce930d386f29b60c6ea13edd3c7a077018dfea2ca3ca2e3615ecf636ded303783342fb3b401a4ad09ed5876102011294f25d999b6047996a14bc26954a3c42a81c099ec9afc6f9e096a838a2697152c27c02cc2c480a5cb1a1d1f415f5ef1d8d866db2923c437bc49e158038d47f472ff8aa8ac0ab6b1e2443dfc8e6c41526da026242f99e69fa8b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c2885e2f835bb2c2a51cda0f453d9385b0abefb7d82673e2232befb716dccf1d1f618c8526fbe8b774a7091d03fdad6e95723b1c8bbe8a2cb174ba3536da06e018579b28bfaa422543202328967cc647521b59248da6c9b7d54e7d470822f06b1bd9f36011ba9b9c22cbcbdc0dcb13ab58bc4e2fab150966791edb2b354162c33f5686ac1f08ce66dc2e79b4703e97a6d9690bf04cc16ee89994e54314f3a3132d6d07f1da67779c4f6960c560bbc97ddb227fcd6af539a1c1aec7774b17166f4d137e076621c9c11935c9d4fad98bfc69cdcc142c7bcded4b907fd182c21d2e962926857297d6adc7b7b78dbab9ad10ff5e4cae956afdbbf9f3a9fbfab452107da8da4a10c8f68d619db8c24ddd8555ce2089275fe096c3c235559d13c7a009216f8a02e3f5d9b02cf90e005aa15be5e8c18eb2c8600aad1ba01c4a31c5a9020071a85158d8dab4441ce4be9c7fb848278b54cd876408fa22a497306f3d1daf09f87b0e867deaa5b9d1d4647d3c05c2cd78510aa50b0eccc6c69999a443228da133c7eb12c2c602b8a4da4c6acf17685ce2b2f122dc206e84544d3354f1a71c7c4961fc8d8fd9926fdf314fba373c09eeeb1b36f0c1f48a233500664e4eaea000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025f2eaf848434d6a9df2dc375d97d11341b23a7fa19d444e4d2b255fb3a597594b211394533c262337b8abc634654336743adee4d7d94abb21f631bf284a41f47b04fabb755ad67820a02902f60b43be9445cccb681518e945fed83f370abbbdd074590383f2834ffaf49a44f7f45ee0ef234275306aadfe5eb29b3369db0a7c5d4421cc8182e6c8901660f940cf38485033f0c272255c70494fd4fb47e403ff06462d400f27ebaea996b865ff2e6cb46fb704f3e87b4dd5613c610a48d1c8cac920925b3cfc213dff39530c7539756a3381f27b9d3960a5f5ad5692442881b5b78a3ae85967eea567a220faaf3634edc62e8c8db3b7df18b3b13a37a4c1589fc6047a151bc1db0611ccaa09692d21952389e8a7cfb3b0bb37aab2d6a18582a181476471ab84e78bdb811abfdf8c5ee0ca10f64d74503f70358fa5fd50ea4aa895aa7a0a144220fe4082ee6d0cfd11979ea3de0bf242386e1b93fa80a2f5df197a497ac7263fabfdc09d678b34004c56483c654e1e01e98baf146c94473d77c7e999c91ca9bc822b0272849cce186ccafcd9ae60940fd711cee9962d78ec67312ff002ba6b7f57aab99b6072e0b88ec80e0c9ccb4f0a16f3b647b372d8e041e00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000134c6ed8555f0e63b7e0e1eee9123684fe8ea18495b31d86f435aac7183269586a988859655709bcbe5cba5de1fecfac093c2a7a36064a537c7032fa2d2dd570978cf9eea5bbbb035f3f07cee906dcac65be2eb0946efc5dce687acc8b8767ddf3dc5f20a55290afe2d7417c7430b1300edb35521c53fff9d416b9e2641ca6e837701d23d6c07e3fd911d125dbea217cd65a30091e3ce4e6c251717dab4c4e87a2d3a77a5cb5defaf339c8038ace0de53332a3c1106f8d4110b70c77cf3207de7720c29d4209be1512befe867374add099dc02eb321f4a1ae95a5861936feeaca5adfcef96bdda00678f36ec1224586d78e606c48d5ff41905bea38c5e385f36eba769878b3f62840ec61738b39681b056efc3cfd168c0512121f5838336fc599355e6dfd0580eeff4321419244b50ba8d6479c33eb511628e3229cf3676e89fb17df68b17b186e73a258eae094f846fa76dd6f08c50b2b1685a7928ab9f47b3dafc05df3d88c05609a9f6b4d8199b2c1f9def99a7d97aa7b9a365874719068464749413eba809e39a69a873348619ae22a8f4833eade7f2a7b952506d86c96fde57a6d0ded36f0efeca485185cf0472b46d4edb1c33d23cab1ff29e81b26a280000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000834162333198d343c54f03ec8e7abb7dacc9e795c680b992c05f00b1de68cc7ff728e4e0a05c460c02170463dbfe90f5ba50236e04be8deb39b2cdfbd71ff92dad4d75d2862b786b5b9bb99407d04ea47f898a6853098b40e329ff7f4c4ff097941929c068ab48f82268989d5979d39e375fc8d8b2b30992428fce0489c38554308e8ab37ced3306eaebb4caf9d3e8cd772b4ea99a7fdf30c96506444940c899947cfc0aeebaf6a02d3d0955f35ce5f6ae4c136cb060f37001f3632c7993fcf467b118bb7b290cc3cbc8b4bab5cef730f6aa2e055a60dcee8be268f2cb011fe0fc7bd1e531add21b6dfd216b8425d1efb1f159e7019209a6d37dfbbc514e82b8de42983247e6304b2a7097b2eaa3d55062910bcf97f285c651eb6f90248a27001c2703482ba7787de3048ac800bb355cc965aec0e0b9e3fc186f0d8ed6db2cd9bc1617886b586b9ceb0288b4e5b42d9122a8541ab0610c413be3a802cc0acb6386a88d440e89aa4cc396c1b61dfc6360a9f0b91a4369cdf107c9b11a54dd952716588be03da1ff30a678b9544b71e92c00482259206f1ee0844498451cbf0d91a2ef9a5a58599188648c2e450a3791fa7e8bde5c768580ffef88f0323fc0c65b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ebf55bd919c5e97eed54e5df54a50d7d0bedfd4994e64526da10dfc1333c3f2811a9bf0ee652361c6d2edc75fadfe48153cbc4ba94f2a9349579cf29dbb306d52e5efc7691590ead149473e43bcd77bf36cd2714d3a65404445f209f1e43f5bde110e154631d26721785443f2f30fde1a85ee4a548c8de70a4eb7b2ad42eebcab5026ae48c597f702a215ac29a8e74556fc608e19e0d011b1cdcce251bd252a5132de99b5505abd4f6cab0113e44acc6c5103ce2e6f3a9ff7ddfd144f0d98001e0c790c9f1e16baf6f6b8c296d6413ad1de8dbaafdf9374914eb8b597f13c1f697e127ef21823645bfbff15e7fa0da5763cc8837ead1cb2cc525a167473cff7d5253d0a575176946474fbffaa49762e6c9ccc7e3773e5283adbd47d327703942538bae8cf99895c0aabf73033844477f9de66e78921f6832b31e72c8ef68c005e0c514ef9c2c6f1e8ea2945bb9bcc1c10c5e658b2a55dd9c060f6c1eede7361dd5d429d8c79801263e0d89974fd0dc009b41f0798b6163e386c664401a8e77c59a432218060755d3c2a08147899653d817ba62dc407c2a064273d69ebfc0a266a419db6c2835a5d27d0defe95afb09aabb780b529138000a8cad05f9a151d6f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e78510e90c28d17dd24a4eaeb0fadc47328831ef172509e17ac8f6ab5b96b297d3fe7eb4ef5c37abbf99c34760b0e2f42a545f9e62cef833f539ee73ef7330ad02f200ccbfe6da4d22c0ba9b610d78ee46274a654cea5fc3aa91e2f1171ad439cf8899b5199cb8041f9b5750c4a1016fc3c660bb613f76dd95115a4728d9bec50b036243ec8b0e54fba3ab8a722ed5ea70179acd4c68d4eeb353bac610c3ab38df80945182ff87c2901fba5f7204d0217c19de4c11a124a3bae5a6d6a09b5624104e978b37669bc662bf19da770a1abf940527762851b2fc7121ff59367fabad330074d0ea7c4f11df95324d56b57496f447497d3c697ae87dde7926f2e22a06ce202d90b3d97ef44b22f9e6366b91880198e3d9bab9b31a8e8d0742f0386ac4c1cd2a3b2682a3f18416e00954dc6518ebf7b907f83da2e8c885125cbd6905c5e7ad423a04ab7e54b5af1485c23878b8b0c10338d0167a16e19513671a6e62356753b477eb8fe9d3465d73833dc39394c1c58f3f72541fee5c8756482a5c6016314937549ce43ffe561eaf5ddfa2888f89dd82547286c933a5c628b40b5492991c25f6bcf357ac42b47cb7878ce1d936d48a9f773b023ea70146140f951104c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a27c5001a6ea12dadd309455d1bbb665fd2dd084491abeda7776ee36a83fda92741ebb532bdb3508ea2ab5b59b84599e6fe6548d2f426c8a4d69fe3a9f3e10f56250285bc1a62cd398068e7be3761d8be93084403657de5498eefba1bcbc8b9afa05267cae9d7579d64c4defa7eb87eb9b9caf3cc32c9db9879725c5b350215327e2f62438877e183ee876e2a22de2404292f87671a444082a4cab75ea9be4b711e87d2ca47155d679c539bf527fb9a3a0dfee9f9685961ab72c97970ff73948e9951de67f0d079e4f5c92bbafd530202bc27fd3c2a6735cf542f5c20264b2ec1f3db33ad06ca588c9350680212349b24fbd1fd38c82d8ca1c9b4dd0ab0c08db7f178cc75bfc7dbc4a1664150beff13c31e3d5b400bc835f738470fec55eae2f5c31bc024b18031425efa449686d0d38854945609340ca326d4324b07c582c155a7a32fe95c394310791a75339a26f1ea0d55a753f4e0b5b7ca14844fbeb38cfd421c3a4c0c4a25a0416655471e93525d93d913b8f75c374f1f28f2d1c8f350442c70bd2ef93f2538ec9344f13d0b367083c9b6dfc748cf7784ed8acc5665809dd1644e6a2a9e697b7096154ab1c42ed3df4f64b202b14d30c099be202fff9d1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025d1293cd9605a785df8d814a9928026dc0202baac15dbc5c2cc66af0bf6caa596a54064fa84f0b3b07775a07b9cbbca9e2b3fbc06434527ccd94ab3eb4a0d44f8c41c7f0f1c7b48f6d197abafd0e5f08f6d3847ae53221a7fe9c5d31895fc2d65a477f68165874117b38c1c6d789364c97e4138ea4d87f96bd01b87073fef95c1396b23aad7793a0c75e356308a2750db878950f872073616b518a7aa4dc999a34ef704bcca4bdb42085974f04cead314ce1e2ed93c92d01aa80666bdebaecbd1f9513aefe7877bf52eb00a8cb474152447c06f645ddad3e1861089a5a0c8d131a00447d8f6b4770dadc41823e2698612e16f72229da472ede5d336863972c998296503a1a392e9d1e775965be06a7aab3f8f3779e5fcd997a60a1e065e00c7ccd91d194dfc88f6b24872e8931087298938961cb7c10f2cef7eee5837807e178809953685f91a7d12ed650e18329b6188f50a10fc8d3b19e6c17c33ff6ad344d01eba729a4c1f717aef93a1b6daff62e2cab0a5a3513daa70ca84b856b7c7cb9fe35e0fdf1da1b8b5e258af51faad550f145176d2a4369a9344fab986d5dc3f73b8a66db096af7948de98e7aa54f2a57bfe0309478a7502ddd5cf40f0bade0f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f45aea9dd1ba40dc6a6b46660276ef27402f87068635f02bde0622d0adcf6eda19c2b3b31f68af0351dc5c9747f7b064079a15e89e54c417a3dbae13301d5f0de734207e1be40db1f4c5b99bbbf81dbaa38e64ccf271e114689b09d7212c74ed2a9d2cefc322a7a98824ecf816b1ce11c1fea832c78ad95b8b21892c6beb8153d0221646e70b8eda5b6086ec7511edcdf347dfe46364859c9a52894e0039e90c67df97eb0a76b3fd28c149b633f9e5cb0aa87a130013853e8317d479e23c34121f84c210dc98651f0ca1b73a757a296bb31e089361512a92cadc4782807cc50b7a18b4952de69e83cdeeedc85fb2e3a2618e2d6a1a153b18d2a08b09c25c8bce54c25fd46fdd15329da0a7945f94484c208f174b194b9912c518dac17f5334ef7e898a96aaf3a9faff95b93e6d1cf4c0cae9ff4324151b38a4e8b8b99b919ba0b9bb0aaed4474806d5314be20c1f830d215137b480d8478d47c5adcb01f30615933ea8cc1c20c0122f9bfe99d1869d56dc991f75c200f883ab647fe357a914e5a5307d678ae769346ad9fc8004ebedb501fd0fbe080ce4b6b286febd654f916575bebe029fe87f02051a6cccc02f444dc27c9c9c58bf2704693472f38c5d3f3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095b021a33a5d5522fa8b2dbbc03c2603873bb5a7b5fdb88eb2112560fbee56ed8ba5cf54cddd7957bd429042880826b4490281b64509310784ddc62906764fc9208855923ad85f57015123f2691976efd582bf8cba8718789e842e94ae097218fd28680fefd1499b7da632e0a001b1c48d04b61dd20c984d366369d9d163644f59b198738630e4c4a8feadf484aa2133828ff219a203ca210de619e0bf5f8abf655f448adccc29a49a2fb26f6a0727ad56cb3defe73ad589539d8d56079ecfd448b00cf9d173cb4a6907a46d9699f928437c1dd09a153d949a98184f4f8466f0764d188a78b6d2cc13560d13319220b3c33499ab70b92c7e44507a0cf07ba4e21992b6be5c0d4c28782019462e9a6fd7c1e433474225afb55d03269304a4f27fac34f7e7196f2d0829558250c91eef82561c9b2e6d7ff79725c0d00b3bd87d022490e1966d52c4e502c6af0ebe4c2f903552ad5db25506958e1dc116b56c442118311f350d0c6c971bf842f35087d8dd8efe5b4914b9c601b6a9404db3b6beabe7cb5306cab721f09c92761502676fb3ef6167658dec9e0f8dbfa3e26ddcdb2848d934a705037b05d4e985a90d02cf6d88a276a56f22c5c9689475e239f6232f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e5be2663559a2750eb1058b0904d8dc20f3123e2d979fe9947d46f7156233e4b6e7b494decdec1cb29c2f5c534626e3e982367688835bd6cbd67074e7b5023a952f41d1ae8511c5e4a63f674579da55d78286d76e25fbda83341d50b654bdacf24bf3c5d6fb33eb911359480c01c809e291d868382f11cae97338ece64332f22296d406f6c714c94f1e0618732e1c7193c651b6eaa6afd59356dc9c67a2feca2be0bc6f64082c93da9eb144987abf63feb726fc2bfd9c38947c1b7ee2ff175e0274a1900d4487d596f13a87e83d42e9f2a21d0c6bed584e7712892624f658ee59ff3926df22902786c4f9ec5641c60e2a80192d48de0e5ec58f3e892f09aacba27343242ab9cd57c4465e8765c88ca4f902def89f324dcda567aa0eaac0cb18d8b132fbb6d86088e92413b50cfcd6a64bb169fec1767c1772f8ed91a478e225ff9681c920b605ad9b9eba00987378f6bacb954fa15fb799092c210c38828b6641976ddcab26e8c8eee1b4816c870148e110447b18276f34a003b95bbda47bdfa84ac13e80c31145abd72687918c76deea3978a78c44db1bf9e1567661af95c5d1b668257e559207ce1e6f53fbe35afae10498b99c3ca6c65f2fc3129bf260cf000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086bde25049044c517a965829b0814f92754a52bd64891f6e239a0d5758839dfa7221e7a4b7c8fc2eab8294cbe975cac55424bce831a5ef5a597a2433eac8e4ccaff860e929d6565c011f08ff4c801cb449919dbd2fb02510f42ea03b58b0100e53745910e41d3bc1fe1c6f059ee68e2b5ee36c2f0567e83edc470a30e8a83520037bba0dd4f7c2521e4545f2ddf35d2802c9a151e6407de66a018c50a4fccbfdf96494e1f1fc0ddccdf0b8f0e862f6988b8cf7982569adc092f74c3178ae4b62a9fb6a4207d4879f172834b1fea70f806e08014db9835b96904044c10a740a0714d67f499dc1978f69b65537b77015d70c429970af59158ff0b0c8d501b6d5c45cf1c66255e31f4dbdcb1e6e9ff2b27936684feaaf2f56953a18f9bbcc5282370b5ee8364a26565c5c89ad92eda43c945e4029a25f2c5e452462bbbec3fecd0880c4bf42afc00168231bf1fe754b6896438a4e1f5994fb99fbe4244fb62f625db02a9021cb476e802f4aeaa65a8d246920e20bb49acd263acb28fafb8830a12c5930117f2f2511130e74bbb5fe50c6337a5d717ff3b2269bb317230a2606ac6f219387f7eb04fe1711ba30e4a8a882f2f90b06f6a8a884bfc95f56741bdb5af30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000904d5f2bb1d437b67df3ed5dc478e0d5f2232e2fc22d534651cdfe4d3c77e5abc577f984aaf8c1dd1dfefbc401fe68967fc74358dbfa8a0820f8b1fcf833bac0569d4ac596fd46f1af623b7b61bffea42768c0b2545380c08c959ca6a5bd82610e606d761f9c31e4a66e4f029cbdf01ab0bb8d8578a9d196abec60eaccb4d87aef7ee3d2b128b5d819c766da078c858a6cf2874d5f22640852d90caaa10439a715fcf2fc22e89f657d59465654ecdac53466562b81c83a1603240b4a0da3415af9c68c5e53fda2e5856525088b5969046081368cdf92aa3596da2e3fe78684d44f552810a80a38d568db67e074b81876ba87ee3d1af5fb105e6d0c256f4a0a7df4877ec5bdd27d7a438467cd8d455e6599530e081c72e24cc399dd6146667a0af7d7f5546639a2d503b29c0cf638c1fb1abf56ff728f69f05486b43668d3ced0439bc5e32885b9accb6d2f97f9f667d15366ba6fa3046655e7ac9cd6e1a1954869d0a7cde53b9c5b9ea01ccda72bd61e0e07089f0144a01a8627671a9d9ad1d36ef3e99d240b148cb394b1a6dffa36e12d4473dc8b441005c58d67b6dbdd40afc03b3c958fd3e2babf8c29cb57d529dffe5d32066d5b883c517539846e952b8600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bba1ffc933ae8a42a5e64ccf828041c1c0025ce34e7509a4d00ecd8f1e7273d7b1b13b274aaabe7e84d415dbe21841fe5af39c869f3a68dc837aaaa98f9462dea83486c69f798deefce31961fc48cc55f579582fec96f1ff43d7e47956ccef8b407fa8fd35ba3baa51f18e554239e0e436de29aa4d0bd9e980fdacad283a32a84e880c06c8850922d82f9f8e0e36146bb52c02240131469110ef3b0f7801348a8e5f5962abd16c36330bc5a2fd215910632e418a63db64c0c28fbb391dd95d5b57fa1b3a8a64e75589b841d9d8722bef2880d10be76485956cdbcd49a2b5d10c97818ab3405ec257bfd11e59e521a3ea5179293471a3a690a4b3988754e16d0176343604a52a42916ea5ad8ff9743df602eee0af687e22bd14e19b409754e92524205c791e27419999d4738bde5cc3caffdb03bf163e9f9f3f39c94b40cebe632d2563ec5a728c1c5e590c215e74afa9cdfe656e0e1f1180fd1a299afd2c7ebdeab6ab050e1b1b9108892fbd96eada5e8bc6ae480597db56c2821ae8827c4f5d8ba2e328180cef90c1f5b06d7b97cb33bed94eadc2072254e96e2eb238f8b1aa8ef93a7c2cc2d8071f65bce0443fe906433e61ffa7cd339bb60958e3e8b18d900000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484023aca38a6aed0c99f661c3ade9062d3a7603981443f768132323657d409dc06e0452be9c7e1c4eff6d73616cf096e7262572b501ddad61e58686f4b6205a502710db70882c88a74b5425a5bb1d631bd77eab23159338e1f659e062b2687d781e0b0c540edde5faffef2a7b5220b402031168e90dfe5c71c55e8a3d2a4b7205fa2859ca09267acbb12903d953ece8b90f36eff7e558365bd7a75a43cc19cf2fa10e7c8c32e89139023de619c408eb78889c15ba07f9287cd0d96ffeab70fa6f651d444d9d5c92c80c02550dfc9a806919ddcbf5770746a622c9e537756e1b5ba0254a4a5e0520b5a4512237c94a4ad931ff87fa12c092c10695eb6470ab34d6920cfec53c8b6f4a7aad24bc2d9af2fc758e695af6b3627186db8f9baf4be42f2d27ca314f9d36a1e36a3d507cdb38ef2831a134b333ab660415f885bf937e676a1045db2f24bc33851cea60d3d08ee73d2ac347d4b14ea867d6de59c3429b4a2e0f47546401f708f2c07cfe2c4e67ab26a595597f09973fd0f2d88909de294d781efee765bbef050101f0ea2bc0453717923f957c1fcd6245b21b3bb4af1c4ca1000e49f71805045c9d0052aaa21e5f84b8f5a6c22094f8ceea2b7daeb4a935fa13f64e037c4f4f423c61f06a8e0607a7970cf602740461ac4dd9f4ec7b367f84240f6d6b78166e5c93b081f2fc6004588362b2210fc74998c0ffb549728866990c69b8e11d7401e5494d7df052df838ae575520348cd67e8f3518669fec46ee40e642ec75f70fba18ae94c240395bdbfe5d4f3b44bc753e453e5046477e2a8a903bb9241bac5a8c76103d19e154323c11138740dd155c0bc5d9e923666a979af1e59748632ef50ac87fbee7e68f7dd0793dfc36316877875b982a28167bc875e1c93e7a05a612449492de696bfdb18d0ad89dfe0762f48a08eb701b22adc7e3903665146b913cfb1b9fdc7235fcfd00b3baa083caadcca20cbaae0f8c4f3daee010c55d58756442b35ef3237df49d9819a6ba93026d39577322a1326d82a500b0af77770638a1b289f1528a3fc43313e950a8414d629b1ba897011fbd7f3f5831b6bbe3169f12c081f8053344e918044a96c043ab87a55e22fb87cceb3292a291a3fdf326611a4147747e32c495bb45021b758f071e9f4ae155719be926fd10420e6c6bf425d9c7b05f3ff848b42843305fc593366229cc880728020d85e316b2e8bade0880d006a9a64ff34ad6b989ea0d8b06d2aa3246c1d6b04f5160314ce125fe86de3dce4b55945f347838906eb419d42a11fa040f39cb8810dccf30b4200c0e01507dcd545d7dcc523eb13388ec086bb739a342ce43da5965c1ea4a0de0e82354d0292af3d51664171d0d3982715243b388f2b512eb0b7acdfabef57c0035975b15385a62c7655f4caf52698d7e35b81807d629fe6aee05f63dabd07e50f1af6caf6686bd22779421890efd2cbf67c5d0462a4a91b140b833e7773b0770ef0686e72903c2bca89f424029435f3f6044552d6e4eaf891c652fe892915cc16d9ab16e3ab1651fe5267470e859081545a5236a15827a67cbaaf49c6e6c63b1d437f595843e3b8d720bcacd4cfc2a11b2cdae0866ffbd4cb105fc7901fc5611e32d2d9e0c82bad3536fe7190c722543ff7340d80cc50ca73dacb80f650919d1e5f4c133d0b2954280996b90a0eeb4d74832bc587770e352b54f0f4720322050dadcb497c3c71c971fd6b04f512849745bf4c4948cdc680413774fb384c1206101267c03b647c0e9794ed372e8c10f37803f131387842bb43f975cc981f0f7d1145f55dbb8f8bd8db232e9a695a5ead4f13ef6a5f01bcd6ebbbd6f0692ca93420f9ec86cb6f5558ec848f9119350eae9ac3c584a023501d427a4f0cb4150048209d797b8e82752cda18c7b3d58b12ab681ea27d3a2f531407e14f285e6aa1361ef7d463c67f672da455acc84d4b4b7ff5322c6b378e27b7b97ae63c07e146821ddd5071337f569e8d530d9861fdcbe7abddb6073c5544a2cfd2d56405c57cc8203f1ce22e8bfb33f0fa9bd8646284ef3009e6897ca8ac80e3e9b46ec5cfb43f1f7b5a7e6dd165151162c54898689aa3477921615b1dbc114af64401627ddbbb12df8e2d2d6666f251bc89f48ab3226fc69c6ca0eacc9016c9be197b08746d802332fde9d4188c5b7ad8a174165bdcad2f9e6617b517873c09eed08645b75710067cc9e4c793ca1c714048b529a935d45165607d8c12441ee0649fb5821449d0217f7ea244d9bd981e10fd28207c5e2e571e599269a5168f5b12e76a2265bd00027d8269d8fcd90523437e0246d775a449b8b96c78fab3dc96ef9b6038eff63119851db47b4bc05a5bb407f09871098224fa9ce609ad28152415874aa8958c642ab1a197eeaeb5d5909c216521d82a1c397312d7f988409eb19f88f588c7c6b025b872f683ef9671cb23a7393464686c0fb9266e865cf25d9e9b6452f65d1ab72fd28fba78632fa6d067f216507f8ba44570d91770f29c91f07e4a15c5609c54294a88d19c01a4a5af56459541d96439e6d13040a370a14685b1b685c4f9540a04cd1934a3da49dabc777f0c753cdeb08d2fe2d2aacdf87cf60c21f8c39568c32a08dd712dc349938ad318423a2a76134ea043f25ef37db3e7ee3059c0a3f2161e21e172756f7fa47e726e6a3e83842e0ccc37e2f8937f8fbcfab8d32302cf471fc67a5b9c83e83ebc2285d0376ce3bda56bf6702b495d28e665f68fabf3a4370531ef407be07eb32e4eec306dd8027c7d3e632a01d262844ff5a7dc809ec3810ae5e3b899b62edf1afa448ce1cec013a5cd3918c38b87c27a10497c241769fd13a350f2ad09876f5e0ce8cf0ea0296b75d5f7ddccc5a9545a5b6f028c592aef40171f6b65d66930dd9bc35ec2785758a2b1165911d23638ad3d50e151e9f721c4058fe93c0e0d0398e8efed0cd8ea78dc81f5facc34c95ef6555e69c8036adde50c74b3da1ef07b8277fb449e69da8fdd3b1b0fa7c196abb474020aad65c826980c01af8fa8cc2f3267f068b35f203731f99bc6ea55b4b641d3d3dbbc2d88a4df16bf16e417d33210582f4ca65f2f609e9be677c866b7c06f4fa28977b731067803e777f80a090ba293adf29bc88dfb4d3959e3afda691f546dd451ffec29b3b7179c6b772c21220eccfe4e77df6dfcde846da5f4e368288e507317ec5551fe8a2b118e8627010a508b59910a328fa54f2cdc88542ab51d87577576d7d8057c66265dc6fc16567fe12be9c70eb93ff9c069747eb8a4618ec5dbc01ea4f2704a2000adaf6763b7bb2118246a42fcf1c7fb04c93f631177ccb935b6e67d4e528d0c0318820cd906200d04196db0031f2c1204b51866cd3149831cd41ce798230d6a2f00b9e8d0b585d9a70b93c85d4f46340eaff979714cd755fb69a4c6d1a3737f0f42f35d92c4cabb1082381072814b3d2fcc60df20d7e038c3eb8288aa22d3d50d07e075fcff55f90ec95b16c43ef22978a275750d42a2525c8e4448d96f7cae072df31e4fc880f9df99f819cc7d1720d08f5875278853a4404684637533797f16dd7018d33c684afa714d475a2fb19e0ddaa1e4cbbd38506ca18d8233b94ae8020855558b19e03088fd25570147f9493bfde3e61d732f008d494b25ca2292bc2a697215e2f96bee2b3980975762d46e0077e97aa776f1e23463c749139ac34818ff6d30064f20b79e67ea10bf62a5c3eacb78075074240d474add2843d134921505f1fee4c23692b681eb15b8ed4722a357ac690ec09c676a47af5d350a1e3929140c3f58c4574c5dc108e9381850d79ede7f6b6e005f68a9f6c69bc427bb592e76c2a3ccd85075a81d9d49e7360e3f2779ca6cb207268d95c8a6824237d64f2138bd99e9bcc766e5379a23072ec0947592572566e78d7d5718715276eebb070cf3f88154b0a5e81a28680717cbb0916d04cf168afadefe83301b4a998e088c2fa52525afbc41ed712129cf7fdbc0b2982c2ba14b8cee2b86bfcb52d97b3b082294de694dfac448116e14612ee2869e265d12fae9fba58f88884bad21d650f72dfeecd3fcdcd8cdf07d9c38650b3288cc00ab5ea42cfbfec348337b9bf5292628124da3c7d296b44c1c29f80b478a066a3820ed2b57b08ae0cde516bc985de22afa43610064dfcfff796c755daf56d638242cccd48b02288922471d58792c032c515ed62d54fa435d549f9645c3b12254e57a8fea9c6f3b343521fe1119c5e601667d3404cca7ca31d356116ffbac5a3f274d19ca3c23b909fdab08f93197620baf9282280f502897cd7e7719cc66bbcedd3982432358768818850a81a34ece22d129436d67b892d15cd21302f63e7444f8d8432c3f59b1c017299be6904ba805232ef686d60e0ac6de906fab809366d7e6ea4d69692301336e523734924f6b1e5ca24318b49537ad7039e17bd85d0cb27bd9bdb0be340ab73ee14d5b786b240161d1f0a3d33f759b1e0535992623be8bc92f82c6f0618df4f8587e13da9cde2cf52af55d6bda5eebe953caa2de8c7e88e4410cc40f0f1d7ae74b506cf7701b0c3d5cfb85c28535a52b20c82e697ee6702c2d60f3c6ac35e269e4c4303dd9992871f737564f737d3f1f759c2fea9678c74c1286e098eeea9d971138b5fe709a1c6df6acf32cd9b8c3d791949d945ff4fc6223e5f1cb8a373c0ec6bde04a75a92c1c6e30b3c8b1f5f67546073b817e17fb44e22e2600bb2ece78592692729d0527e1ba60b683f1b2fca79e985ef24a99976518f9aaafccaeb24f3488238fd37d03195163824d66f73021c4a64ccb91a9ac8b27a783aade89553771af3b8309041f75ebf07374976864874bd392a069adb7ce8521c01791a51d88f6a7f6eaebf91b06d8491d578b19dd32b968a1a08da5550f4a979468d6f0b2b5e8ab2576640314e6eb1f2385c874e43864d9442de4a9987aa6cf7391ed0e2dd58ff2a1b434ac0d204e2e29e8285eb3e9c504c55fb2c14aa5569d90777d45179907b29363f9800f1e86598cf04281fcb25e9b4c0861ef5397d80d0dabbb5ae364daa2f034ac3821dc13e05ee314d6ac0dd8c09161e36a1d27055db92f67dedc42013ae1d7dc0226b261f5953d6f420f942b2b0efb97aeb231133bcc36301a0f9b868af16f79781c5380f9af15fb2c05271d65ef05cc0462d5efa83130d365e8e2ecd294a865ee088711c8fd5493c7b70fe5769e641bff882b2525df004b17f303c587163c86790758ac4b5ec10cc5af27e46916d123ea9c3cfd0e1cbc44336b1c0b900b168c670f852eeb8ece3d26fb01c5812ed7e2d32e844bcd4f7cd8a5a503fdf1aaee263c0e7e1c8ae6c3bf1ba6bfa2c2f113f9139bae5d22c1000ed1fbb9f08d877b9dbf2f9f90cd431e7c15dfc26e85efa54ee1e8b5959033c637e3c30ac928a393dc6e261ce5ed5df3e1dc2ab62bcfa6c9c94108688444acbc21374df5abee528ea5b10dd852d7f121637b371a81742449d4e5115ddfe01e1bdfd37c4b2102ec7f21ee1d3ff19a95a44fc1623101813fd038634a681fd3d8015b949ca3b488a32eaaa01fc98992fa0942400a2d93d063424a107826d216915c0f1a0308f58b4d01414a0c6a235e2580d3c63341dafe754b5b14dc27fd1c42af36663a313c9445daf9902a4294c9f3407e7b0b02ed859df23da396f861040963af2ac09b32925e8241aa28553018589bb4d4d338f19d92814e124c004c89fe4321f30f5e161827548eb124debfb1eee2c65075821bd72992436e6b64efa6efd1e6949b26647edb3dc361003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000005118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000050d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000050a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000050b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000000529a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000005141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000000525e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000000512978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000052daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000005189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000051159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000000505ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000000505c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000000514d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000000503db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000052ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000051213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000051ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000000514fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000052b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000005305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000005280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000005223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000000517a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000000508858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000052618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000050f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000050e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000005172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000050b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000000505bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000005137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000052e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000052297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000052608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000000518373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000050422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000005204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000050afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000051998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000000528d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000051da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000000521d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000050ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000050e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000005107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000052f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000000509726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000000524f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000000503c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000051fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000005205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000000525110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000005283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000000521cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000005094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000050c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000051f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000052421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000051fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000051bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000005304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe500000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000008100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810400008100000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085d601f9f36ebe51a83e637a2ab07a73787776d27f521ca1715e25d701ca0558940460409fdfa8d891994223de2f7490d5819824f2c2638081ca97f7d5fe5b4abf1adf216a6e5a70047a879791ce0e61bbb1a0094c1fa97f8a6274a79c5870a9a2a1cd39370266bd7904305070535839bc0d363d79bf91947ecf389ffe743ff92a66570aa27648472499b4b479f5bdeab95ec982c19e2e4a5b298ecbb6b7762930bf35729d9d2bf9b9dfc518acc7d7a42accd4db19a6874d6e71feb49d2ec2ff06762ff237d52a5cdb9638518e3fa0d8123eb8585460fbae3bc3489a591129bcfbb057cd9815b6cd3f1639a2fa0d86ac07ef15d29202ae28286faa52b287a8398ba8b5240cd83fdf9b7fd196782be51488c53883d3217e0de599cc3324d05ab027461b10d7035ce77ce2136cce1b24bd0681f0cb8af1fa93a4819f2c2d4e12ed39cd3f594da618e57dcd6f13f3f2449a8ec7bc4c0cadf86c25d5ee79090c6ed44d4cfb18ad1a199d1897ad07c8fc22e569a55a8f1bee8bd359c42502883371dac222c2e59bbfe2aaf08afe91cde9a0513fac0e20c98f57d74eabc276db548a5cda5288bec7b7f704001e760a7aa9239e690f1f681032cf6a904df3f7092e678600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d4fe5cc5f03491b1f4d172092b031e7ee5b2794c30bf64c28326c5c91af1e44274e4febb42cae1f11235ba51f976c77ad98088c86c0ff69ab1412bca7db2cd8ef78208c27dd031919a4f77cbcf5578d823168a9cbc3907114a0d1cb51087d907306f20793549f9a406f001eda153e4e6cd38d329280c6a37d73b5ede1a766f9ab4e4f081153285c6a956fb1087c568fcf47230f7b5d5669cc44df44ae423061bfb00d10a7256b458768c6439b429b2bd28ae350f3367a4e0458c0fcbaeeceee9a64513003ef0ff4e3579d144eb3ba71b93e43617334d0e6faea09c95159c95d3ee8fe697ccf39d1f54f315283e6cccf9150e6e88cda120067b504f901d0c8f6f35857c98ef67f96e3bb3c9bdfb9361c1b693707aea3228cd30e3c4bac7896b075b9a9d71d75fa800a1ff6414f8591bb2698c4adf852fcb31b356d06473ecc615e01698ac899c6ad5ccd08963f2e0652b3b242dd4ac3f078aa1f97b52f8a3f4f4d0e3fd0cb136a6afd515d709171a2e499c0eb395a5b30b9bfe078cdc55ed0cb08b63bff728ef1071063f4e9500d1cba6b0c680b1497630d9c5818a99745c8efe9bb093fe07f8c87e12814e2a3982e7b050e38e227e689930af422bb35a7405d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a496fe63885812d2630a9911785cdf75d1f8311f2deff278adb280b91cd4cca26ac0a1fbae8b75acb73625c71fcf90cac0886c257c339e62b971c556ac22ed3d78f00946364c20183bcd2ef4a625b0e8529c07a82f1fcf721a31d11f639becedcc512aa6b398306f3fcf3379a83442e9d196560cc74f5c8ced710867860c57e9727d0fac676d81edfd0af9643591e0b30e7ead8284b9c41378ba51c7d9f917501af93bdad2f22ebd899009df556c3e2bd63090e5a0d40f6ec7e5cc889723053f266d78790c042105d20232b7048f015c1dc8aa75be544aa0e01485a2326733a8a8b069723c6af45ee51c0d09a0ef8979cf05aa0301693b789e3d23f444f6d4b9f55960f351cc2e533aaf047072b55d2bc3c9a46520dce16b3601b630113b2f0e8292a07acaa86287f132ab5aaa4fb03bda60a870cd880a9000bccdb6d1d7013e31698dd10ad812ac47c5fabf3052eb10163a107a6c916f40d6274a9e8e0b235cf169bd0109e5cb3a2ef194a45257b6ac6610baeaa33f38c4ee8045c7aaf644cb00b4413ce8cb74042bf6049ee2d4d0b68da537c83a7db9219d5f640e036f596b5605aa858cf211fa90645d808de52386c6253a3681e27ae592a66874fd7fbc090000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000816b65db1b03523d48ab6a6f7d70c96bf0747d3725b01b67abd5f494a5f2df8d39b0a89af5220fb3f9c708d369fcc6c6680972731767bac5f68aa45e4c8c94cd8fa4add803ef25e181e0f1b3a2270b1203137ed09050e18ac69b30e425be67a68ddb0b163d60f62e84bfa6a105d4ef7c00983074cd2e8adf23fdaf28b0db18612e8b258561dbfe02e69dcd3c08d5a5816df467b8426d752e42f7633f087db4c09dae56f6c5499a81c12adf50a19292bba25c3e5111e68cb9f42caeb5691c2ef1bd85f0ab317b44b3d4bd9d9ecc56e34884662358c6f25ffc850e2bcd8b03b5e6d2398fcd1ec8b96e5589830eec017fe6945662bcb5cb50cf597d56608f3b174b33320cc77d574b9a755bf3b78be6624c15800a7c850ba0b844844147e0e9a04d15e775297b869eaa7a141f409078c63a27a4c7963766f0f9e3733307d1b7cbaa93d01f4e630d3e5d323087862096c03d5ea2306738007d5963b855d80819120a470229e362338ec3e0baf42be7b7eb1c65a1d9891d0b1eabf08645afb2d6a61d6060836257814394873bb3e10155b51eef80136ae609b65371611d340ce5e4b9de8d3f1c223460b418ac21b3dd21047b0894cb2d187a69256d1deba129992fcd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b44332127e98a89ca74038de72422fb987ffa37688dc3d94ae0f7d3631bef0fa36225474e2144e997cf531727ca07027f7a1afcd3828378a48f1aefa7b57b2a41a93766c57cc0ce156e880f650fac74cddb55c60954b4d401424376446b05b7e4003fb71e8076cd2c453ab8d1a2180e29f101890eaf326b530f223b264bef38d68aa3eed4ed0912f189607440c2c1c69958005c1e7c945191490f9e17100d72ee5aca0295d916876e8bab660aeafbef8937b2f44f0dfa6756e5d04b4f2a38bd1a7b0df565195a2ad7165725261e18ef84e09cc62d574bde1921420618bdb94b5e8a143dd2c21ef8fc9435f7531eec0c2848cf81fd97d5cc610b176b7ada1b588147a5cced020da2068e1c9d468dd26ca8d9101abe8c710f010859732291dbe1d3de0259ba9ddba18a4f50fd1b86a82745f2eb8e9b06c60b49e0a1b2357922ee7cae9d039531c6a6c2b6c052de349c1ada8f510078d835a2fcbf4b6510f78c2b93112116193d78c785a0a7b7eaf71b0e55db31bb13aa8360b99fcfacc9850a672addfd6d3cffcd2ad5da5847b2df6badb8675d0e98946e601a0f55c1bb171a30afdac19ae091be99a7779d2f2324f06b0c603e1795e4f5b4257b73a4c0bddcf900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c5a5ee959c2fd2da70cab47c21ed383f7e8d9066b855c1af906d75ef5bb3d08926b137b606f600f0a53279f516676658718b884f277800e38d8532b20941b8df7454678586b6b474e45895c571fc8994fa2d592c9cd8f9fe6d6b8aa710ba944322c47ded0f9c2767c9924a50e75f2c83756907d5233eb4138795d606250a36a2591653502cd9d6946e4e849d17fe9f6ec3ff1a73ab5c84c5db20c311c2a8d00998581ba5e8b140f84d99e7ef7213166682bcacea493cb0e027f7262f82ec982aa52d02b490ef5ebc97576ff561574a0623fcd61ef9c75284cbf13ef766f098992dc169b79eefb31651ea1deb10ae60fbef571980233e25a9fc39b13fa7c9229910e09e935e1e70e4b771e5a7a09a6485241572764bc8310fc879fa1bdb31d60036e2506480a02f65b3b53146481ba695200c4df32c3cc8d6fbc5b76256614872a0720ea002d11b5596297e2a7bac7d4eba4538f88a86a065713937469cf849612eb9fc43ceb44d44dfc8d690f7f0e008ff01a8a474471a0ecc8ea427597c3b0752267e99c0d80c73de033e4de31bb42f03ce7cc7ac9c142e2355b8a5510f403c5a57d6f538e2138ba741ed69f29f96500ea5d940a6ca470cd073bb1c8fe462600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008989231b3db6c9170d50cd8454a19f81cb13e35be1fa80a66b3198dd582f0d0d2ba6965b7d43607014aa1f4a7303095e8923d37e8fc064c405a9b22f1d88885f29b2c3d93dd2605924653527b19f6eb7871ef9b0895f00d47a8f3f0628c08c159c2159bcbf0eecc9d84e66be8de08f6f5fb384f168e382c045b6e12734950ef3cf08ff814fd171649c3cb91660a547bc2d602e49bb8763661cc92f4ff02ae0eba99f2735d9aef4d52f651a21c5c18baf01c7a8ae80d094e371dbe9340677289f2cef0af30407c367e52abe22c8039c82626da2b094ebc8a4847b7cf8a8f515e4f0cba7160d9a8ffdef7a44bd975ea0b6d5ea9cf5928b1a7fe638e629194b39e238a943a191ddb1b1c34f75d35c632fad51331d47d2f6211ad2b794babc929b46b4f79f3788350ed14845a5b23b7a93e7abb78458990f49a84c4da8b1fd2d77598650ecdd4b8870e7daa6a4b134d67b1f989823991e86e1b75d03c9ecd1ecb3382d126f9b8740b30773463c427f2074b2ae89cca1f676b4e7a83dc9bf9233443cc3ec3f6556d10a21f89529ebdc3b6da6b0d012ff2e18b01b1a9f27460dd4f734a75cc7d197c42f4a0e5b85f3a29605269a8afe984da1c21b95188d663f8eb67a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093b914658cbe822470898307059c5bcacc128f70eeb8042c1557150f0d795430be6ea47d1d305f62a09895de329a9801d23e2bab51104190a535f91e690fea54c51350871f0c5e86453e80a36174dc4a85d24e1c3fcf94ff43476f2aeab23dab9e363b92b51db2a82ed0e81b39f0c78039de50d94ce5f5d10a74ef698f39b72fe24a26b8b20240dfab550393c8fe1f40f7f8a41b45228177c88577566bd14b2b0f7dc7aa14e5c4bdfab67445a390c2de2c4d87372d84bbdd33f3b4a18db8785f28a0e07e02a351fc8735a68a8a648398328247957a59ef4dbb88a0b909037b0c2d68baee36d29df12e5163464bfe7488d80c5a00c57d9bfba5cb152bf48622506a2c38257241b7aa89c06627aaef908bba0565968e5005f9976b483d2a1f370f64baa1ba85d6cbcc639bbecc5fd9554e648e4edbbc1c9bcb45b8b45d230c34866fbfa3fb2ea0afbf143afe5729b0ae272aaefd8bfa4ce966040448051d089db322fd99c1e2d37acf54b9b30cd430ac223bef7ece41049b594c56c10864454569207d4fd542978de2cb008aaa265dfd885da5e685d8f518f72be4f80c988f82d657cdeec807bdca391a7e0936e1364d22ccc85df042946f14c77ab488a3a58dfe000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4b5b873ec435288d2e9e77154f3c6fd98f4acfca7cd911a4310effa7b251cfc3703e504307b53a87c413fa44d658bd112a63780434acc954be4487d9dccb4d39381ade9f1cf6108fb5e5cefab5080b377afa860c128496df753bee81414a37a08a6ba62cb08e9187dfb32849731cf1f5bb20e22ce8bac8b535009a6c2c4673514b244162c1e0d64fc226224c4f1210c1092d8e0a7896cd7f0b2a453385809b79addbd226da263211b1b20a64b9cd2cf87fdfd63fe73d73179ee21f137f30ab7f071aa7cd2e89e6f64057ff3cd1b36b9a356987eaefbc9cd7f6e836bc3e018f17c68ba6dd9893bc59d786cb333894bffae3170d68c32eeb59a2242fad8ed32d2ed55bb48ca5dbb799fe330133929f5d7413d3152d3ffab7fc46b4284565796f932a58adf0b258f1e92b31b1fe56d13725687f6f42837725fce7971d4826d7f32a7b73ade48f1797f757aa7932251b3ab56898c9b4826c1083bc4f2eee92c7edda0d41dc0c68bdb524358ab7b2a2df57324f27d07ca4a9461e50cd2470848f90aa3c40516bc125c97ef1b3ad331913fb65b60bc4846767eabcc5e2be06aade426857244b83270f561a287a665f499a2be877f85dc95d7ff0ff2a50d72455f03000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090e78e11d9d4e759be6d074967794da86541f931f3f01cf98c495e08948e3d299db33db7fc758ca0615dee09d612d31fd785067f3064664e937ad05910506168b89206beb1cc7b660d79cbb74817e77fb20ffd6f5033bfe444dd9bbb1beb9015065e3614ec0c16fd6b883992ea975a542ec9a9b697f773c458a077b6eadf63ed0d0eac27653448346f69cf4c9095de90dfa662e09951fe40ecafb9b01ec52381bee9377daf01f4c8811b766f2697bed23dd744bf64ea15a98eea370169a8733ac85e29d93aed4df10ae71528c223aa126a2b0aaaffe6b2ccb01e8c745e8a796f2e22611d5490f2b5a5988eb717a52f41b491bdd87865784ce14a9b4d36c306c50ba324a249ea0bf85f5de0570e4d2175a74e4292e1c0ba66d097feec243d5bf0f2a63663e212ebdf327e3cf7a8a9f3c5c6c1b3415a8748a07052ad091815b9c7f0f5081935c6e743702874e93d1ea9867c70b9211532ecdec16fe485e60d2c714ac8b1448c7bc27b9f17d172fab6026a4852792864fd90e7cb9adf2af569581eb11b577daedeea86a5f383d85e96b164fd93c81b86b7a88212dd1c8642ddc4d373527270a4b8f125e6473337ea45b6ee9637c1988d94b02aa37800bc506572630000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a57a1f4f51b59fd94150e8be8f2ca90d9aa9405ea72703068f9e1a3c4a92ff07c16c116a6e56a14acf06d724bca31f52605834c7faa2f8b23c4fb5f09d46f56fca4c4dd0fb26ba03369cf572655c78efb1a050044c34137da8ebc5e12f7210c92e54f9770565610544c80efab4b9d42de9a1edc86a972837cd5b33da7b2ab6cc0ffb28a73c201a83d80ed645d6a5cc452ed8b484dda63edc5bdfbd962569157c7eea43c842e436bd6168efe11c944ab6512620e9d7380a965089f787f8324c817376ccb9a25496273a1545b80e7daf57d96a7b3408a3fbf43a7c552f1fab266ca06238bc34ab149d6f7c92ae152ae61f65df4b677718ec9d49922701cd1af6d5923a4f1300aaca20daac37de1f5303b76c32d63d3ca232c761b4fca32289a207d7f21bf522d1ab0abcaa5ffa60230334e3362f4d548494d86667b36e0bb83407928bd805b69f9ab364c62a135b52e827ffa2e29c193faf801d94e62b15d293cb33d93758363d2c19ed724c5b85f12b192cb6ffa9a347b866be230ffb515f046e65d08b8ed6c07764e9e7a02cbf8eb5113f350261a552c3ede108c747f4d897cfd93e6735fd21624e7d8e493b8fc8272dd3cf9ca8481ec22c41eac4d03ff162eb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028fa173a846e168146fdc2924b3c40177c9c98bed5364c6f0476b186eebb8946bdb712f59bb127bed0e783699dcc87244c4b62c94741a9aacc943336ded33cc9f51441ca401db98003eb95b8edf2e29a51f43c9223e039bba3699e2f94f7ecf1c39fd74e76c402973eeb3ca1a02e6d02a6d53b2c123773a72cd19be58385930587091b1e87f46958028326b75ffa51adcb165c706bbd0e016c74857a7d2bae38d78141783ea112db888a20bea216d38126f1bc40b90d7bd2c8a985c16265b20f1facc0dd1e14be5356079ce2775120393d1d7829c0ee445718b4aabc29691b1dd622dff8d01157907fac59ef7dac7f226d24d40c74671774643db3470ba265669abd46c6e98c65e9416fa2840c12068c977c23dc6748bec3e17cd5ff57af6a1468dcdb834824426e6bf8ba0d949d1dfa6723825527df482017b21c43db1402facf2aa067289914590e3feaa1ac2be8c3a561feec8ca20dc111ac31dd4f60344f1940995e263f3d340343b9d64f0bc8129e395ea7ebadbd80f7b92d80d3cfe7ee1574efb4791c9758b568430cdbdc2ea4afce6ce389486231eaf1864a295371330eeb48c36aeac335fcbe7c2e03dbc2b053d27af675221dd41237cca2526a3736000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014a4fab11a872ea74e0b8899dd2c7b61965825cc6e8ce653c07cde765f4dc78371f355f262b414fe0bbecb7eca5306efa470b82cdb0f666b00383737336a0bd283a4afc43472cea0008e4b01e61451a36672ca2899239dc79ce82de3ff5ae6e59fdc7300503d5c14da2c154f6245d99cf67819ad84e48ac04a2d5fb688ed3fe30a7b5a82639748ad4ea02aef9f6307e28d12ac5f1500fbd81ce97025551da657f65d575c23eacd177e3dda80494a16ca79f3ce4ac1408c7fad8ba0d347326d297dd85cac583ef512fe365d813aee5a3622936b3c5f9306154fe9bb45ef402127acb2061b59afb8e62635444dd975ad39593b5bcb14627adb1c300cf70205680ddc2bb3691e1e67460a56321a4dd720ee61eb66d8f3286e1cd8562d0393c3242d9617ebbbc42739e04b1cd0b813ffaf3551bef5446294fc55d7aeb328807a274dd85d129f09f8fadbd5ed17af1390ddd67233b7498b1de7fbfb35f1f0678c3d4e6d2138451cd3e6581bbe23c5b1702c3fe4b76b6fab3f73521158d45ae04ea381c97e6317c2906affd3ca48bc04d10691f66eba46a57e76c1a258da33b0d94dab3aef20cab8c07ca10f404e6845e68caaf53569ffab8a14920c5dfcd351c0ce1c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008faec66569c81978596172714325f14dd76a364b8b8775455f3538db37010e3d5ef85abac41adcbe549a05fac882d905c11c7fe34cbe6bef2d797e040250c8852ae767b2fc1e4aae3056aa66ef60d9efddacd5b98a38c050d49407ac0a2ab4a35008196e09c55fb61dd9c6868075766024d46e7d8c0f02e4f926a3bc21dc54fe54f8e544c8b60190ea454d1efbd4c27fcb3ef3c4be6fe8e2b64539a91346521959e4347144b1a3436febe1e5947778a3167d20a3618bf5adb6d62e5df752123fd98bfb63e5dcf70fb5aa23183c92a0cf573693964eb2ca067412ea7dbdffd4d17ddf9c1e066137e21e8091ef13c95cc5d29b43da3416ced758f363741ed71fbd9dc449a710f512ee10b6117b35e5494d283be56620ae543b957c473183eed35efa5579b1ce3fdb37ce1fbd86c3dcceadef1604926a8a7afe095871902b18484a83f9267e5bb88a06c54ffdc63d482b88ecd5468b4bdf01c74647c1e85e4531cfb515c3868f79493bac6db042d22f76de69dc7a9bdd8ba7f105da2a5c4edb11501da784b13db82e62b339572a526ce4b3a57fbe9c161736f95ccb9bcda4afcb004f6a1a9ae9cb42be47db942a67595088e320b52d1eab8738b6bfe408d863f3e100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002be6c86da623f521426fa9b42894821a865e404cfe59b1e8b90d9d3580a6e83ed2ea28d44f859f4faff5da95b678ab504f558e4e070e3b3d8125eb97d4515813aaf1088e28f780466427dc1e92a6e4466493cd4b60086d3b8333c19fe6bcf9a158b3d75b895775c346299fc29385d20b661a3d56832ea66479f5f21846fd9a0ff788e17cd1cf5611000aa08d8b95cc63a1d7f0e4f8da25a5559cf8ca46164eeccea9aae76c6516eb8185879f3eff263456ff7a197e26e7665ab16c811ceceb8dee46202f0a34ecc722e240c09d5a422f3ddd86d443b41325c876141715747f2ca279a2ebd8217cf4db9afaf019b5adea93bd6ab63ffef4180712294cbcc8fa9f42754a7adbaa7e2795951a2a169c2fe54c9e99648caccaf620797929aba5ec35eb7eccbc6f2cd95ad9438f1c0561b3a987fa91b200fb3f4a08d5cd98f781e9977a0085ddb5398b1004359599efa28ac91089089a314679d7e815766ba452540264b6805f741aefd3b6ee28495fd660bfff7890f73940b3b8ad82960db84385885c70275411d57248547f5f6deadc023951fef66b35121aea901dfec5a1f473f21d43ad8b2f44e7a12e9979426f0e38af37053264cc37dab49bcef9d0691195b00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000824773285946fbd3a4cf3efeb32b7f19fce20069d543a49ca4928bae45fb8a638d2b1ebfcf9f239708d3a58eda244fb684a6edc15273f94f67fced3a2b637c208604808e456b4fbf15d46f6b332781dcb400220524f1ec14bda1eb42bf4e710950506c57482c4743685652cc75b9fb882b3d5d785bd7b1a2b8579c7c135be6ca01e6457edf765bad76e3516e57df2b237369cd06f78e4934c7da2f20c63096dbe82b4c0a35349ee9a3a41fdc5a58b8850561f6f881471845eb92b7b32c8db5f011be91c7826a3e2b88cbf4f9d868d80d99f1047f2d16e230396c6ae3a28b1e852c027506ff09b71d90d6cec08f876bb849f91d4f824fa0226e5648e3df60e29ca7998268f809c090233ddd9f2063724dd43e93ca770876ccd4e291c9491eb9cc4821b5fd21fa2667776976ee54ccbe4f2a28e33c4c20d4a9d04068efeb47f02c1331a069cc84db993f9773a37dc2180e805524bfc76d237ba03858a2e6481be8087e1974a653faa537dcd71bd2044f87e7decfe37673b842ff768ba98a45c29b41c90f54aaf18aa7a85539f49e5d69c6b539b1adebab0f569d92e2bdd34183042f0458a7fa55c0d98aedb12792fb9fdfe7f22bbf42ad494f3e8fb2d5edacc2360000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3ff02a62afce488d35702868d94fd7ce5f531b590e3f5ea2e8b9f0d6c0e039f867d7b2eee1869a99ce2fcbab1a9fe646f52bad0f6f187fa8e7da47244ae91a4f72e2baca807036aaec369311548018060b8c76b43c04b73eb89552331d12183bd1ee1fcaf67b6c9afc46d0fa9829e8068770ca7be61ab9e85053d7655f0e0e5142d9089989d98abb58dff3e2f0fc1ee3bc7eff0c8eba6e84260decc5c22c27db2510f35915dbfda5efbc4c2953a8e535f9b1eff73abd528156605bb48c1d6caf71cf2a6e709792b1e7168a67143aaf15d0d1db9225d29db0b794a51f991f0bca26a67259f5bb2c1cd3f00e6c6c4262436b72da84c61813cfedf032a78470f5bd55b195ad4eb029bf230961064ad759e81662e88b46d38ed3ca58002b0990adad65dcb156439765facd7ea8993819067824f52446fc2b4a6a492752b99e1b9466a4260590ba76965f92315ec86fc0176d4826ca8c7c6a3dd3eb435cd7af4013d1b5c791fbac12041acfc1f35b0f6fc48484b9dbc35a8da9080e1c22b1620df7cd111e9906325637f97c5a698b7ac0e3af6debfa379fcff787998da161234411c85f1edf99ef997ca743f260c2cc2e03b6a9a4c4d03a6debd40ecdbe0ac683a5400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d909182fb33963fc7ad8407f96f00dd9cc599b4ee338a6061be2abf7e27859bc5239a7e7f28d11563a215ccd62db2bb6a8b9929f971a94f5dae820136a2e9e7ba1b36068c388a4c442016abbfb0105a77dfb5913210a84cbb961239aa1056e3a2cdaed8c7c269be95aeff3b20f73e94d12f95875414384843580125969c748f10280a9fcaeff17227fd24a526e85d54103b7af7ed882cc8d89829c94398efdfeeca86f97f4418f222278aef7c3499bf7ce71de0d048f57fb5889554179c15e434e3e1e9a1b2cec7279ef583f73dd4b4ca93dcb8174381c22b818383ddce4d1f461d9858c71475c18af85b79e6fc7b90ed452c59db2aa312e8d11763efbcd07621e506629188ba05bbf5a2145a271994b95d3c14c37526ab60d1b665532a7f0403040f0e7ed89946e49fabf953335750df7b2f803ef804dd6a870fb0447da78051c9d3896ed8c0cc09c84e730f238916494577d8c216b002ce0fd61789caa7ec596711bd1f65f343fd4771ac32c7247c60f404e9577ac5cf19a10b7790f7ccb3fa195f2c5e3e27e0c69265a44193e2620d93f7bd01e3c854382c05cdf2bc80c43f798c54b92149a61f0ff417985e9cb9c1f0d6f8e2ee287fe6b4b2857676e4070000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac9e336fb97182bdd59a6a57b39653953ff80c9514a5cfed9d4d1c89b7f51866ca0ec707f7985abd80ff14307772aa44ffdd34bf153f1e0d52ab3261f9da70c0f0ffdb115807bd5429978ac27dae1977b97c9ddda31db0ba4e48d73affae4cb720bf67e57bf0662ddfba70f031857b833e354b90405f8075857b426ebde87dbc1a9170ea66799638959c0509e01f2681fcab5cf4eb5f26371671540712f8c5cd74a2b0f1767eda17a76ae568eb63cef2f975caa454200baa18dd10de4faa2a458f93478113978216e11d456957d3a805a07b01cec65b964ad1c7be1ce4aae4e0dfddbb2355254ec52d20ab79978eef89514dfbba02b55ec3a076a7ece6ca1530433cbb59d891585bf02decf0e4a33308eff86a5e148838b6f1b90066407515d84f41fc3845809622413b0491187ac53963bfcc6c240f6d945cb8aab1fe4b5eada166c30b9f39cce2f88b6e54bb454efe54225800b90278733fea48938edd04b733e2df81bc2a0b45329ca99784433052ba86b9f466b3ac4140b0f72b818279ef5eadaebfce2a46356656ba5ee6dd3f3627aaa3b4d8725e0997010fdefaccfc4d6dd3d80fb98da972bb267b7be69194cbfa38eb17765bfb85feee78bc74286f49000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083025c739bca649f006c60bc1993df73af8296d191dd2e52d219623b673a50657bdc8751bb7835634830be8c7e45c69ee2ac78d88868e4533ee919492fe72f8db0d82cd8b33335c360ec1967f1878ef728fad07fd20e451f977396e1baf659125cde1ab5cf65115ee37d352828670d1c3bbdfe6c4d193687a3cc8399d439d4f532fd814ae61cc2f02b2c32c6789f98cfee163119f601504e895d3886b59335390f599ecf76401e8f6b665d6567aa55581654d780f0b11959afa3a1138ab13b45d2043b3bb6e790623c9810c80af12d7d87fc85d187c2cbdfd41fe318036fcdd7cbbd97c6065cc070389be53161ec5bdbc6dc64bceb6db7eaa8401c66676dd4d252ade3f74f07460e2a4ec75937424b175990c9e2797c631275fa64f1b1a851209d48c49e6b041d086321dbb95d60b3539f6499f6a4f6ad8a0a9e8c849c6b49997c5d4f1babc4936a7e7abc29660c1ca48fb58e87491e1b662f3c559eb8a8f025de3b6d276b440fa69b8256123f274d51a406ec94766434889cd75b1ff62082e95aa765f4112d24c271d5a051f4206a81e0661d71cea87485939e40c02ade00346c1cc9300d14e97c8144a1a8bb0e891d8b779222118bc95733d73a898bee355d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022d9cef661b7519e6120427a7d6a9be2475fec7a45ce2b67f088d5190a9c93f37e4ee96540a505aeb827402f4be4e16bd26c693f7f9dffe610fb639ff5ec4c4760e9cb2f0aebde6e22dac4390317727aa8486c62b45edf2236d9af2c1b40ea2a3f71095a3520bbdd6b23b190deb26a3b6fcf5e19605d2f4216a1d81fc33dd8f1c21921c5ca69dff8ba94775156a849c67ff724505c6166ea1d04e58d1586568912e1bb89c67e5a878811a57eacf7e61a30fcb6b6f88c6df92ffad0760ef90154e7d77aa5456404abac7fb12b146a34525d5afe350328733177e68c45aec03b8a4931bc22cfbd160254d336aa7a7346b05b1c83208e02ebc9aef7d8b90c4fe90cddcc5ae37ff4834c876c4e40d64a580efcbe0b776124384b90d27aa2b52581466d2030e926ba52e671b52655ddda0988af6a00bd854037eacdd74f7de1d0ffb7ac6cc7c41e1718ba7d5a74fd24f3fe40c194e942622c424142d295bc8bf3c0965aa93890e4ebe5d0534b2edc0a30b57defc6ee73f71a2c24eadc93af8723f3d10bfac7a99411e3a9ee7b4b7a417e225a8c7279d046c208d26c31315c2ef5f7984e2a760aaabd5f0e37af67f844a534097964a2fe8b77b6ecb434d878a942f23e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083ab79cf0665ed1a3abb2017b1e08e2cf5c2192d79e4d4d3d61eb77a8cd714f1d6befe583de1a09faa9a7c6aeafe67b4e087b1dca1d187b0cb0479fa591604da63a5af2e0bf65d204f846adc38a52f926f9f34d4c66a494f25aab873759043efe7701b1c3e30bb26c26ead2f283d08df935bb9c52681b427df4943d2c6f25a61499cd360b7a8ab7de650a4fccb6bcf978524a40e0c08f754de04995e68464ac56c696628be38f44ed8781dabac8b3e5046ac0b7d0aa9e3c915829e5f24670666d113e4b0e71df24295c715fde5cb80f57e4717bbb41dc9e58ffc8e102aed819d3a322657760738638613133cc5f51cc3744dac7832805621dedad72129c4688c98e11e90de66752a9775969e77e24d6ba082b671e3a4f46fd183a7367ebede1d000b13c0aaf237bb3d7f7523c080b4ece540e9615449b2cc876f23ad9cdbd0a5abebe989cb76f2df8eed09a33ce60ef1047d5837d54b209f0d13a94744e304b3689180590b7e1d8dd7899666dde01e013b39369a09f89bfe98b1246cecf6b55b33ec1698ccccc0c09f6e631e35cbfbb6e0f58c7e1a8dd9170175dcea775c95127b68494f7f4e97ee22c286236e5802ca2677e6be5e8d454dd3d049be659d6944000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093da7071e34f1ef5193b2db416c4ef4ef9b98f7e7bf36eb8496a09710fa6cc621cf3bceb6ef49703e5b0e5fd2d27520ccc2da7748efc4433202acbe3f398a3c8e03d8997256ce3b71adc74d6329d1d9b353cf9717f5e4f76c97680f0c87365ea27a9597db62bf5a62ccf1c8029dbd1cebd0c7416a7adabd1733fc9e41c2b2f30c6c79e2c56c46ae7d1a33cc4ad138ea5cf4a9d0a58191624aa18fb52a4c7a7951cc1ccd6dd35738dd04fe15f1d9a4115dd37e95fa7b8f28bb1ef2ba0d0523238e62e8b21495bb9ab26668befd2d8658209485ace2da55939a9db31946c042227e19eb729c136515af39ded33bed3ff0dfbea9c21c48842588d320d055f167bc469b19fe2d8918a619d649e2bcb3127dbf2622c9e8f7e0d4beaeabe82bd0188c26d0678aaeeb70d0e44d6f2f41739ce113cf74d05477ca3080b471f961a1696a2fa587ab34b6a048f834bce684794494dfb64f091d71612179252d3465482bf107fbf8cddf12cc58ab892b7420c506a364bdf890c7eacd184262f19582f30db031dc45b9bf27973098d666d24a0960ddb295e41266ec6dfb13d1709d77f77546b8b3f5d2e0055035c21ef038e831947e2f73b493eb39124c9da57fc3e1c0c9f650000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000954eb7dc2d53c2690b3b22a3461e76602c6428f13f71c8b582e63d6d1b0ca68773d63fd4c7ce8e3fec622b46e3a8d61f1b7bdf7b33ea64f58602f4f00dc09cdcab91430748b7328b1156ab4dd474c65c69b5b8eeabfb7230146870f3cc0dddf849f9bb928e72a4c4bf0b8de729f16160dd6d48231f688b9aa62f4357c32a53613658fbdb569ee3706d3235a9a3800db37b7fd3da20f55be8794103c80b4bc69e97a2cf7793526b206aa3aed42abc5dae39c99d537d4050305037395224e32d46a67b6b3a700977e4514ce8b3a5ec9df5685d295a3877c09a43a0989587fa37f5345bba3181421ec288a39704ad925cd620b17ee227198710e30e0db2a827e769ced52505fd8e392bd76ae2b30e41f4429b663eb0f4f61f74639f4d34a25ced92779393e6f03dc9a0841960f5ca21357c3a9ba25b7c952ea226d5c18e98353ae1760b397d1ea5acf0f06e88917ef8131de9818fddd25d6d5a7d208d90693ebc5a2aecaddf579af4c7213238a95aecc3aa0112ac0f0e5d69fd19f3c186de135a24999da5ee0e634b35f48f6ca8af1e2fb5310ea6c752d0f2e4de967f6ab46d6a4069389dbb8d549223eec884ed6a7141771b05487dcb217aadbb4d42636b573a4d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014506b763007ff3a4ab73d802b205bb584e3018cff7021e0deadfe63cae6a20ac6fd0776dc656b02df561eba0b0e129e477f62f3ab198a9fb061ab4bbc426f92138123820541ffccb0e23307ea1594459010e32210b8cd38ec6da3ffd844a92be495e5c67050e8dd17195524179671098a9f73da4cd39f8d23ec2700bea9f668115a95f33204504e2e3d5314847635f8f230502ed24f5ce84d2afdb022d512a2978ec624acffd3b3f3a724e965cdabb69561ce22bccffee52f890e37fc38aad5b03981ac70756feba2d7963e3b29556a40fa0f2ddef73d15f985c325546ec97354b677f2cdef1a30edef6b87f21b1b6577c4f7cd692e11a1aa9bf74fd51c96c5c73412ff1060fc75f6acdc390386935e1150457524621b43b62e57f43bb0e09ec31d64f5c35ccce896e474bdd97e0f3a1980220a47005f0d5f51cf4f65f1b43fb3a6c95d1bd72dae3132689e92c7cd5da6899fea3809e36f91bb6209b3fbf26560eb6dc8ab6ade865e0453ed9edb540b26f993b5de742381db92b6764db216fa3c7006c05846e8dad6ec8dd343def483f5fcbc68e2a373650448c6e5c3ff45e4008e13d9f26fc74c448bacf238940eb0b31e82d538ebed3f1b46c8e982491c9600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008034487d21d952a341cbd6ecb01b8671121db47d51e4229655f4c6bbceccf1409663e37a9e44dc65e5081690277d657d10f9ddcd2faccbcb43354a14c284894d1f70fac932301f988ef7088c99a75ef4f597103debe4db4ae99be22818c92511af5d2837529bb3efd02c28e26138207bbe31a5dff052192b6a982b7c8fc57b73ac59027430805c56e5dc21d93757ab94c336cd772a1d9e666c2673f0ccd86d013068ee57e6245f777fea12e4eb802120744d51618d72e1e85f94181646486bc5b796eefa6dd1be6fd70cb215da6d200ebdd15ba4aa58e24f77aa83a934ba4e3d939d4ce7fa677acc53285899435543233e877c2fb159c53619cf07979998e1bfabb5661cb67024add5e0d4406ae2fed8922dd675a00924d2240075b41e998f54f1727073e472d2db2909c94400076786d79364acb489cd6420e74c339b2c400900354eb92054d326f1157d5c4821d3500fee5bfc790d9c79d31889eed5cc8fbcfe560ebb5aafe779c7d6d1789d64b4b935dd2fbe3618fd5841dd003331992200105a8fca7f08c7bf13e5aca738e722885a0a5d4471959783aa392a590a1d07e245c0e5ec427d03a549369661b4440e48c91eee617fed361411701821b4c3266900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001257a4417a5919f0db6a7fbc5c2351bb821cadd8487d4a59f77348f6755dc00a42831cbdfee54c6b5cffe0e22792375358332ea8d79aa2684b335d2f82e515acc0c8a826f47bc52b2f2df2dec1537a60696a3db9259e8f9add5bb2ccc54002b95fc64c84cec43b34d4db677c188c5acb31ac3e63aee91e0e3533f3302b685e335cfdfe577288ee62b7e49b8ef498d42bc01a504e20f65794cdcaabc1e15c132d3f94945fa9171b2165f12f3056cce2f619a6a81cb56110283ef657ca6b374d20bdf24cce0e4cb96aa38f8707cee8762ecf08bcef1aca7c56dc23addfab7c5ea3043ef9ce00617effa86480bd8ec2424801700408e14d70f710fb216b04629d8ff01ea0eba78d2754cef5c3b724c2b171f9b3145ca259cddcdd8d107f70a595673799ee74b73f3c9dd3c7f518b2be59fda64a231bb7854a68cd9cc5bccd6cf9ccd9c22bce093cdf24d5162cf7e80b288d2fdfd684ab2af9b787febc6a8a38f5c4c31327394a59f0aee38576915302e4085c11c4cf747673c1efe8ad9bef36f2e470925f3a98b2dc7bfca75b9af5228015dbffe1353178ac86fc9d6f228589044748831f8f5338ec79703e392b6dff4ccdbeef6c179f2725dc02b8ea42cfd365580000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a310706c9fb37209fa2de56acb340453e87f1e6c5527b56b6bea37d03d9a4ec6df496b083ff054fdad48be91657ab7a40425e5c10585b824f5570d8d278bc7b624d3ffc5f3abdc53d8b00e73dea9fa54f0e414be7dd69f729c3529bb10aef29435cb06e3ee7ec4971f279cc036f675636588a54004a6344710831b53a149819bca947a3f9c95b218fc4a980ee0c9394b7caa90b3e38e4327f4cbbacb5828b36a27dac4aab284c0729d53e1f9e273f39d83c2286480ed8b9005e588afc8471099fd83cc39ddb33a8e5cbba310115ce6bedd7c23ad08109749a21402e23d9fdd731cd136305c8816b8d589956c451ad200efbb044d332879b7d8049dead1247d8eba396cb0d5acedc16d1abb4bfdb4a098eaf09ba0e32865fe05032319f8010bc45a027535caa0aa28feb6d7b8dff984ff337771692dbbea4b4e90a4caa0756b8641f301e997a2bd217cc2d5a10b4a74f4b37a436d154e5df3ec247e77a41ebc3902747659f82dfa8e1f520ebf76ea77a88dafbfe38decd98f39b584f0c285ab411ac73bb555b0d552e8eb485e8c44021529d1b1700dc784432db084e28c3d2b4517ae0514b646a4736fe360964e36f3d8fee924a440a31aa8a639292dae23d417000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013d37fa7b6f71c9e65e42760907057a17e7de850289d9295a0d8a04d1a36968414d45e74cfea11eacab7276ba4aabe75a47ed90cfbcd3d3563d95965f03300c7d47c6a23f825e4cf40921f3a78a545370709d8b71fa820e6fc863a304638a4b43aeecf6cd35bdef54a2be5228ce4b280c9e54923e1f2d4771bd569fd479511cd4f50e53eaff51d48d926f82edfa559a0de7f4bd0657fd56ba8e8a916f05ba19d81d6e8e39aa4185aad35684bc6638504051a92699ef503db637f73cb0e68fb06c4585c071c79c58ae54c717c152f5e397e3ffbbb774d14589da0e7c72008255ab2162c39292f493d46dee7e116cc6f5f3060c0b9f1c54e72a454eff48828aa6622ccd0092c7787f7be86a0803ce19884f6917adf0ea8534a8146514cb575590841cd4c1e397ed118938370e9e34164b8e9cb09efd555b170678b0bd3765928efb19380d98a8d6f94be3781a1b4a4e94c763030548f149ca34c0202c27090e5f11c941711502d970cbbf9f96cc8e4597d64ed142e7a9db4315331f3bc6f83a60d35975fa72b764daa80d23b3d9aba23821863ed961dce821d5ccaaf83941e5fb19ee7caec117e1f2bcefb86cbd7a6b995e883375ff2aae2db9e8ced2c10fa964900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e4f721e14f5ad2a41ff9ec8558c01a842f31c24ee7be2737c1f7c81639aa69814e35fbfd60a67457c013d28f9434fc8592235f21091a8ccabf7e1a625179c7fbafe4d462da75f2b995cd5dd22656b9bcf9d12306a9df7d6e12fd0f34fe12307283431679b41d168be6e2ebb0599071653ebe35bac62e17c0783e5b34d8ebf42f8ef54b64355df0d7235262a3585c888e54969e51649d119f93841ae82c6d88d133afd83e0e3bc7a29d46b859205259aeb4057aac4d3808c746521f02d1bab8b43ee3f50330743f6093625d8d64b2bd342b6c15b3e1035f0550f85af61956f444af74c3d08df067194de0fe2800ea3eb53c193777ca07188b0a405169559cf7fcc394bcd19cd815e4396efa48d4e1a1f8de8dab82f26fc9f895149f366d8f2f56a2e18c898b29f1bc37646e4d687eb3f7b35ebf8309017d2910de808d45bfe25879012c62f31bd82d4a28044c9b25ebeb626032f767d6d9a0532ffcda6ce156293fecd2d2b26bbb4c9470c349a1fceedbddf7240ccfb36d8ea6add316e5313e549991845db6a1b0f742b99a07e5cafabf196fc6adf8f9568250944dffa110281e61ea9da828cd268bae6b7f75f18ed3456594228f6eca2e23ca5dc3b8cb3bcea0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000230c89a02b268a27ff70bf127428bc7fe7e9c66b01a8f0c5b8a4cc7837114b32e9fbdef033a16e82ca999f881e6bc151303e492ac0f4d9259ab1b15acb0d28f2a491a1d4cd6bd89b226d378d92139871d16d12704f6c109b93a0a499a511b22e268be9f2861130138515ce67e893df673b6748f8e9eb28c5ffeb25140f53a5444d03ba798c5f34a29f06390cff832f6bd4b14c26214b1b89195404e26900e62983be4a9add14ad81cec07b42afb867e977884e76cabc8028375473e8b144db8a35444be8a1f0d4d1ced0c2555ddb631c753a8323ad604943e0dfae339b4217402e4fbcd943d7a9dd5ce1aba3ab9539217c68dea89c79e093d2481ffc321d829f764081d98ea7e88018a831e0f1267d9f864a236a93b322677f541ae66446ae8acbda521336c950bed1859ebbcc4119d66c417461dd867f89bfc2fc5dcf02184407bfb351cc32a344ef0c4e47293c81ac094410b33ac7d640a17b7ffafe684d021515e09cfdf745889a66111c85da2e86e60331f02ebe035be90d0cc1daabe1b0e0c6784c4bf5c7a80d3fef872f095de57797dd6dce6c932b926b462ba0be9cfda49ceddce7701641f13d828689f2bd7fb04350b721b1a7de443c932b75e787960000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000122da527d5cb9c62de43c7b4c31fd7e75911bd33283066fc5c428ec46b5e9cfceae78366eb5fa924ca6baa97e320863345d1ebc939293a32d873d69cc7f505fe5a427c7b6b3a20a4b5f758916362bf5ab4d09346e31c74556e6dc459567160bdcc5ce94f8a7a345634766cbf49d5396ded8ac00d4fa8c179009a8b7fffb09ea042af99f2b91410029aae093d8103c112832648b41bde94456eac05c15bd85f9ed95936378c81de9fc77d526a47cdbbb9c88599a99b2458cbe0119efd71b930e4650bc324ce1b64bd1ace4778f504394b513a2783f3f734f18d45daebf6c9415069cdb07ad8da2be28bd3800f006d6030690c2ba5b12708d5c3ef8f5803612f3d408b73a22e7b6bd8f610721575aa83818d8eb6f700e489376a0ddb6e3cc3c430f2361c26b49af61710e606e5a458cddbc7fdfdd7ddf03d8aa1065373b9745a6946e8e4bfac0bfd91872504f95db59383a9dfe97e4ce0f7371b991de20be36462e0765c4f0b0cc9f805da37e69f310e25390e06719ce1978cbdb69fd4ccd8fd5b933b1e9228588f5a27788ccc707c5cbe991103889124eebd82e10e7bb683d6cb3991ddaf1099d40b03c331f2f3a2bdbb1076701ae1a4430dec8c4a5207383ece0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000acbfb13293c31059b7000765b9ed042da98ce6a3c2d8e9f11b1de2e45cbe5d893949ef61dd2b9467e4509bf0e671210f04c639bd0c60fa7c22ec06b696d4f1fe6483d8eca6b9581a030b030c77b1511bb94ffc67ce9901af842ffb23cdfa3f35d8d17ce2484f0f4d06b7db52c740d9e4c4b490d4654d88621e18e3bba7b114c4bb97ec1e04fc7d1d2e8357ee7f7cbc1f29365854259b1d5cf28d37e0b29d1d5f9c10d8fae1378d6173d9b32e9becc9014dea5965af3fdf461ee2a20feaf4a0c2973b4e27069234a5890650b75450907641a506cffca9853e1e50abd5d7a5dbb710e6d77693e6b054c0650a7f01e18d4b6be4ff8d70efd4fc299ab9537d364effee755c53b095691647ac7db7734f178f3e8cd011335ae4f32bceb4736eec5b732eb0bda708a41dd1dedad8a85bf5a7aa5655576016b35fd01a7656174a2af87742ed6408998d56a0f8858d5e80bc822ea90fcef7c810409d63409a2aa36f7798a5b7d99b2f41327cea6d205afdcbb3c3e5b55bc4f2cfc8e9607d23a9e755859736956fa681f53fec81cbd7a8dd5e831f984f9f574f521cdc4cd7603166dbca2f822d269fb123c65642449ce7da1581e6459d2e8292d98811ba8ee415f9964573000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096057b8715166fcbeaa98502e02a07a9053a2befceef52ff2460eaf26f18b49c6d9d09ccadd7aede9a06f760d2cae47ad799f39a15a5550dbfb4ca3177753e5e73df316c059c6d86859f7664cb9fed71a80c63579e80bfc11f54c28c6b0c567ce64f90f8c52d172a1fa028a4dd5b37e29411b92ceaf28d8018ec0dfa13ae7260dac922c728bab28f1c0049c55ce79547c86535d3a75e6b155ab545ca3049e9c1b790489f194e6be7ece3f40439bf3c5d0fd55a2bede0129621d87777fe2d715cde879a9d1bfaa3bd3e0df205a06a045b0a9268fbad44c94c63471ccf09535fba8ae1996786b7023ab0c3130f4ce5bba076036fde6fbaeb6935812e6dad79a77ce00beee07224323ecac22f99097f1ed5543a40b6a87a392848c40b4144e6641e6f8ab05535abe0d25b2587580b0d224abc546617c33820eea442491beb966f3c10ada716ece7019f4aa0fe4ec31db8c108a02a149dfec4af4f5c5c8b8924562b5e93c3648c2aa2b4764dbe207e6528c452ed4d647c41e3c38844c35fd025a6e3b2f8e24d4ef0a09f2102dd4d5cf1ffbe058446a26825a69a52673b76d7c94a086bac3c31069f855defae1e53bf94d12712c61a8b8e3458e5cb032e3c1465fc09000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012304c71ad4537b813f39ebfe924867de27fd52404338a6d6789773544d6977290187c057f31e9a9dda8b64fa2ab758b5a8e0d2a50376dc22a6ac8ae61f6c79490cc56161a9d10f6e752e40427993ed68fb9c13bc8ff000cdcd62f887a9703d43f1fc915ce544d17f75e8387f5a3d2fd1a7a00d546056b56dbbe43839a73bc29e90e67e50d88e9dc409b0794349ba851602e79858936b95c237a075f9c81280652fa445bbeae8bc2ff981e21dd896b980c2d5c447bcffad72bd0eab7789135f815659cafb9e9a905e7bbd5c4bf88fe94cff2d87172eb1dfe261de097340b41a9be6df506ee8d7c49bf48d19b1f9c0db76f55e150d53ecd481cb421590fbe193fbed63db4e198853f46d5f6b44ed99182c6190e637d9cbda59bc22c9f5c0284a3d1c981b5e6ace35c2a94fcb93ee7149a441ac60c5d2a87e4cf3b782326cc2a3904446b4f29175cf8badaa85a77cb3ad4cd3ef23c4dd607c60036927ed9b4a6bc2bb76e90b95983353b3b325a0ce4952a95e408d74750809f6bf9e0409b1142e7779ed8b328eba721b9d8d828602398792b32906850a653b55a9f010f18c8d7ecf05e3e9194280175b5c59d1d2dfbc2a4cdaac3fa812398c8155d61409be73b0f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a43705123b7802712569cb6d6a08349a2b11505286314721fd264458e79339a471bc8a63c68179eaeefd75784de23a4fcdf7e0941e344d7a0db3c371d0753a558629940879dc506b8a40f7092ae8141ff7b0cac2879a51380053d766da7de20a1d58f7e55b0f1146ac350a3ef9f2b3a761763de39e62aa0351e00393731c66a0d714b3d1dc4da06c5f4fc3135fc7d8f655e267284ab124ff8919f1ef5d5f9c4a4e1f9f22af88c500ff34dea7f2cdc69f053d023facdcd14e168835d04f787b132f35df2b19085ace2d1a25849708fd06ec7a678e0111006b55a42da9555e5dc249fe0d3760d47ed40c469275f33f5381fc776ecf6e1bc71bbc7bb633dc62986cec265e9636ae9e8528af69fdaa2dfb856faf1128aaf1f239e3b5e1f0db4b56d2be3efd1d515591641f6a115294dae9f6bcea1ebece3ee8d395bf4e75ef3c74eb76306b79daead37729e50f24b3edf78ccfdbd8c138ac60879dec1915c997fafcc34d4191f73400c5887ff9277b9e8478b5b963f3c216cb22baf1bb98698db30593442a65bd2053688a0c07f2d78246648bb25008efe9390aae30528b5274ae3ed75900caf7b4e7cb3c9760acf807e3a3ed722e1f250511846e9c2e515ca4a26000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094f495a9055e3a932fa76a94a445987eeb83cbaa39d19fff87bc83740271c0b31109eec99680eb3a3eb218f4554b7610eeae48ebad1bc2b2eaea74a62fb4c2653227f1ad1c0d9a89f88eb1d9688395fb6a5a132a085d8b120131d1033b80f494d7bfc04be031e286c3baafa703995844c1c45514830a47e2e0c76f3b68379b8fb6eecae0022b528c57d3a735fbfba3bb1d95b1c08243ab6298fd8090027bf8eeee27a5fc4ab5bf6542be0fca2c11910f59ad73b319e91fc0b0afeebe41db1909d2e4dd53cf9cd00101f2f39721419fbc77bf585700bcf2fcea2761a12b0bc5e6cf85aac4d718ea9883ee3e081a70423b081dd082390c0d01b10ce26af2668834ab5c1f2eeeb38d5cb217e94e821a579555fbf3786cbeb47cd1df15d565ac8252dbba9bd146c3decc8a8c807b990e4fa7c1c1fe6cd98f76e5b1b6a100f405ee353e3c4274f4b607bf869f825656ec9ebbc730c592864bafb293def2c9c088129fb4d37494f743b183542d6d6919f862ddcf141808d6dab8defce846d58a4d0a68666b899d91954765790936f64110d229880c3cc0c25824d285fc39e983f3ac623fac1cb1316e488ee2c4bdd3b96bff0f84a3e8c9bb80efa95c277dfc446e14f300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d5660dad42afdb1fa0cf2e2328166ff205c10a2f2fa92c25fbd207080e02c2277b0c915211d5f77871bd6e78c49b81bb04e190ad54a881680251d172174a02f55f107cb7ab9036cde238fcbc33591122512e53e8c50430ef81326d267444ec82bfe8abd42b0d8af5619f3970d04e33655e1e513b250418fa2943228b12d8fb288c7125d9e45efa6b5abb7977e7b0159dfd8607d7092f52fc5b709d9770366161330410856d7a392a6b68d39e1fe9891ee03467ef3b460499e826fe669ce1cdd167e59b11c8de17622af605e8904147d60e4bc8e7c0eb47374c673866b69aaa4a2df037ca127fbe1ce107e01ef34e4a689e9e7d1234581c63336213fc7e6d99fd5f0ecd9bd2bb9e94c2fc2a40ce060a1c4ac651763c8a7208afed7cc0e6cc10bb7da5a9ad22d9eddf8d4f5fbeafc7ac0d2fb64fd667fa1a3a30c460f30043d1db19077e209fc5e4e8a315c3850b3877b5a17fafd16c8e089ca45e4d015d273d4f07e297040f339f90b9e709b4ed7de7ba43670a78e67183b9cd6b9f43a6be654e4cd105a1dd0a8df316ae866e8705bc416402bda8463f82b4f5ec4982eb3a6f137a045746bf0cd6128014c1183edfd2bd14ace8954f464c804b796293fd7b48e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000850f7b150ccf455912fed407594c8670d4b0427ff5df82f94b6b8e3efc301e5a2c58bee6bb71ffc4bf2cd66ed26ba021dc4502063fdd06ece6e364906fd8dcbc70a7b0976029abe8a2f8df0bf5c404c1bc6f46a8bdf05fb4738451c3eb327759b407a26892c47adecbc5c5003a12d33f4bdf248896ae2b0da6fbe93eeaa89574f0014ebe549a09f848042581d06984f9ec2625c328f98fadb1fe0696d2e9c6179b18d7f3abe79479d0cf9a94b22d206d0155bba571d487ba0b4b5e0fb297bc884f9b80c02cc88dc5cf1650de2f3d9549e8613ae8488f6cbbed32ef78dc0427aa3d1a8b13b8235c6020f1ed41090b584f54d192df8011dbacdbcb5f266410bbd9a631a464c331bf271abf742dc268a771968fdbb58dd364fac3fc43f90d570b28ac5d5099c5451a6e0bccaba792fb60263ca2628b71e52dae1955afcd610a6b562a7da0622373ef28818ac6dc6aea09401a1e85739e24b1dfbe49daf3e687cbbf31fb57c9fed057f8dbef117c157fee26a349ab1e6da82897ad086d5278e797ada794af679b234bbb99d6a6b05ffa3524ecc90f149ee4a4b3d147f6518c6d0fb1f0b1155860d463689c384c7a5f575c8c29ffc94b31c2a0369268ee3cf455c5740000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000273b4bfe10a7ef02aafdb0d86c80f3b7e9d058c1dd0926d6f04f5c7db3ec6ad6e5df83c9ebbf381f72433290e39ba1271e1151219ede1f7b4009ae7780034f2e31e6c5e6746be4b55fb5058fdf9fe2eca61fc1976c2f32beb4eca9cf0ec9ce8c7a2cb39edabb62ef226b2d716e4a7c5ef580fb35068bc09829ae7b6c51e3989cdecfed7e82185e3333a327ffcfb49a81d0e79b94bc3d684973de44dec15c768cad50aac4034d2f613a174d208c7123e2a96be595377e8e35c7de7c21ec5598e5753b3828bc175ab241c7dab6382aeda489dceed25aec6e608dadb82ce64fa75f2cea45ca6bb96d8914a81c0bf78f3a8bbefa13f392b1dc394f1c4571aa1b3d616ed9bdd2e259fc0bdf69d44271ec2b1317d66041802943d0917bcc8b43a15ff0956d56982f376c39026728a08f7ab4bf00f6f49774b1512c7baaafb3351332f388e14f598b7ad9e7af24ab0b971861790124635f672f97ae79781f8d0b07ea39c23deaabdafcbf7515b24ea657d8b80eccb68d3c958bc178e404a7744d01c018fcf3b3d9300437f8c46ec8d8ef1755be4183d8ddd7758ffe87bd5a69cbf9d5e3c04cae88abadb7c647110b4fb73528c3f8c2c2c736df0f9cd989849f1c0221b8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017ef6bd4c3fc26cafb71b33c035cc56a0c64855b08d110f38b3d2875bd7458b3db119896cb731168aa92db3e8e6279171632dffe26724d1a5b3ff5ab10ef4d8e38772c2f7e307a02bfcb30da35648f70c07cc63974763db5d1c65b83e900f41fbd2132b96c5bcef53ee9518659aea2f536a1c714ffd78550c608ad312c8f3ba4a304b0a6b8f9066fead5b8420238f5193a94acc762fa868828447387cea3137f3768dfa0b1f1b6e62b47c30a60d9b2f1977fcd053dde74468df52431190c372b300f048ce930846a8cf62cef5cb1ef9562c623289a4137c1c850782466d7132177a5448aae0407a38eb4f1f4390e88eb42e14f774aa93289edef2c333e2781e47f509e533fe985362baf952f03335bcfd87ee7e2f439f12a9db867b895c33feb59ea857668884ed641c1946b3897a55ce4a9b64ddedba3731fbf20e23858c95e9a2b236b66fefad09a0fe9a960ab5a5cb9754791a56c0d79bb4f680e44424415de4c6834b2ee6d2450fb33c7f65f66d5cfc06829c809dc408e781c750d8f59640cc14e268a0359a8752f05a388967bf61ad55b75b8efecb1c13ad3e6352c95a30a91e199a63ce2558ccab3e033a454c9696a7f03b86170f254cb7235e59dc6650000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000206246f075511ba7f79dcec32d025fbf1d55f5895f6df10bf5fc5412cddf7a11d5848f816b2aac299dcc6e4642bebc4dc3a485903db891bfb305de4be8a17b3cad23ae9b9afd47367465786fabe760b0564594549b3c2c5eade7282b218f927d9f63a0145c2dc22a07a0930be452586403ce4fdf2d7f30aa64e03e6c4312b3bac391c4b261324ee707498e1fec202928f0c4f3f08b54723fe38039d8de3a7498dac375d02091822fa205c9f56f77ff885452647705edf4d09b2e35812b7229ede89b332bf9c01668ef2d0630d48119e43dff298e0a52b91ec0a1b58a8815b045e167eec756e03243efc7dc339a9ff605e1694d2230955f0856b0713602bf5c4547f4b043fb2220050c749c0b52105135ee0e37358b85c7de34a2195ac7a8fd4a487303a547d5987359103a84181617674a28a420fe1602fea04974816c127485efbdcd35feb0cfe4cd076c5aec0c991260e08ecb602aea3bde03b52e64f2df0279b75f063d0a2225a76a9ea728268b73191255b2476ea284bd66bef8a58975fa4f7a4092d0b28b1f680f357b7614e5fb50ea80868a9159a3a369f16f6a78a506f55f086f2d5b08f2b1d395f3a067acf584a3f1aad178deea307adc49c8c1e9320000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa367b51a14d1172abf17609f2bc78da8a399f7276d49cd11bf446cb67ac48ba923a3da1ee84e45e20acb415d985433d9f20a345a405083cd5b62b7642f987bf9e4770a005a1c3797610e63f9b3cfd10db806bd22824e3506f2b2ed49b4adf4940c7ad0f1244ea4f3887541bf6f0bc053aa59e4495c717fe85a881b3094ebf3c7d48deddd14b02c575d609882f532aed2e29b2dfdf27c0b1ebca02328f3570e7631b3897285f509a3db4db38344aa67c2cdb188d01b0e10aa6fa1dd4d86d3aa36296934c95e2d470328bbbc32f832871c288168de04a9890ebbd11af49a7e4e39f8838643c507a4b5b4a4cd1429710b1a759656c141c683b4eaf8caa843b7644ae6d5d7a663e04e4ecce8241d1cd1c9d4cacb6d3b3b78266b9b4c1bdb4eaa187a4330bbe5e2e8754e3279da5183422b827e29cee0bd3afa3fda5c42d020639c94905314e21c3787321a94bcb5332515aa04844a68ecc01331b4bc2d4898b7a34939512b05e5a46defa6b29f0ec6fddb3dd755296f78de83b5720e97d88b20e812c0a5fe2507dd2835f83eaf23b476b8e79d73dd719b9fa88576c4433171a601a07f3bacbd9612e7ec71d05a5f2b55f137471936d6038411bd51bf1e04ad795cf000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013a19725f3bb843f2bf030f6b7d569269dc02a3cadf040e6ad365435e8c35b7d32476e4903a369bd2bb89d7dec99428682b3b607d587c3f60c399dea6bc79893e7e27f8badb2b15e6eae658ed3342264f06916629a464365a26f55928953feda04ea34cb45309a52fd06dd2c2e712a7566e921546238bc991ffea1b4a94e126598ab0bd2eb164aa46e42af1bf620c23a7026881a79bc09f32a30967f544f35495bd26c8cbfb3b49c88cb6fd1c93035bcd53490ca9896b1f4d564be48d27cb97be7466ea2ea3c7357e16df1b0e40fb6d5256d5f095990cc94dec92b5589465eeec8e6d5379a7a6bf699c040ae6b4f5fbc7caf220661c3d6e849d121bd15c31bf535bc73ed1759af7ef06bf5b39dd3b2c2660468fc412f52d987e726c28b4af52b56ff28310ea924db1649c94f46444433cbb82115f50aeb077e07fb20c39b80bc20eb5c96c9087af2db86827d504e2a59aefc2901184a7ce4bf96d428512ee2908bf7b0c03a62974e7ad6d58ef43284bfa0c2b0b3f84ac9053efa31d4773f393b25e0c3522506b8b2c1a99ff16db578699b51fc6ac8e9db43f15cf4cd237bc8b13d3f3293eb1650a6a0d346cd26ccf424ddc474789f1196e6f3d4693ced391e8e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1ec2e4f0200ec597d9b13090332472ba7dbf02e5c148bd768fddf64636851a5c7581644cba809e16df563df59e47502f1fb084d58481a8423ed172a1931563823d70964ed01ee14ee33968ea0f29b342713ca505216edf3b50a7dd57505280a0f55b370e5af667f23acda16bcd8f5cb380f5d704552fc18561cf07472b7e5e15d8f4613261f5317714027168c7f36f8a54cef7fd42fd3a342de3d23dbeac030cb10414493c2bc8e88d821393b59a568cfc042d16a134a40a52b5cb81bc32ccf0a14f53d19c6f3cc7a2f540833ce0832452b5e5d753038e34de955de45fee2f98e60d8436c6f4bc289698ffa4b36397e932d366f9a07b6fb4f12f4142fb0d1720b1cedf4762d537f606834b78e4d371dbf2a8191035acc1359701241cc929ad2d74e4a22f9d1c4766cb20fb3b9d1d789b707eee038beba8d259c40823c044a84841adf8171ad1af330a14609dff3b974a1a36678935f1c84a543720b8973f036109cd98422c2db62fdb56da98c550748c24ea95954999bfb62f30e7ea8d335b99491ea7ef94a6c42b356821f9d18e2efa00dde399f4c09803f00cf1bcd7e3b36794a065e235a6e60b970aa26e4f4fe7017fc50fe02c8bffe970980ecac49e5400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009fba59a887782952aacccad84e65cb8d080b2ca5d6af865f3b2059049b564989cc0fe35557a0560f21c839f8aa3a5d3a7ce14184b0caf7d6a0cd8c32db9e0d3cfcf795c249b0a2136430cfe904cab527ff1dae0233ef1b265c15ca5ffec661cdb12babe67149d6e064c2ebdc303cba489513decf91a3286a0c63a8c6b7259f433ab3a7e06c1221a286ac060e12fb2f964d6a41b599857558c01f2711d4739f86df414f75f392988220d570a6b09f569a07dd55c44464cba2732cffc0452e78523572d53544a9000264aa4918a1cd2f4c3487967b49abf22981135c4722035228e13735785d4b6e084c09e3198d4ff1d607003cbea3027a0a396275932494935caaba5991af0e20e5dbc065c356e51dc381f951b2a80dc92b06f9f6c9b17d385b7085f9f131217a3acf010398de8956ae8e79a01a25f0d76a5473a0b3b674f9b10ab1c98cc8857e765f145869a23849cb4f4425c6c92ed8e9d1d6811c854842173423061ac1eae1a0bd7fbfdd98cc9ffd2e203bdecd4500c49211b22810124b6de038f36c11c14747820f140dccc6c640a57c88bb4178c34ab978b173ff837eed7e9b2c3af696272b0793e36545c6d3a0649891255a757f9fef4b960c3339c645000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091bb26501c5a73f8b8f7d63e6082ddf20051ec039cfdb7b0833958263d21e3055df9af3066c1f6e19e354510caf210ef593a734f91084bd5b3c4d53f41dd0c2a79b19290ce8403f5d6bcd6d98fffe51b433095acfc146207886119b784dc429aa52680ff78a610f772e2befcd9df868e353ab89ac2d17094d35ec748b3bee58f8b672bfdf70822e56680a0e2e87e5e1c10266ec14e764b7393c1d7d433ae29a014da50d798b9b210244a807523a5a003b9fa5f3e767012d23aeb7094bb82a42ca87b0adec5f2385c5e328ddba46d68b8c1feac08a562fc584afdb51c6cced6d08357c823b3a621af76ba9d54adad65fff0ed9601069cc542e85abd169d1b2f5c5f3044616674e4d073b4d729e0d5875d6968218a72f0149cdafd493fb06a83b3f1ba1de113d30b0e3a0b1025ae0648a89fbc27ffab6e8eb552b843e39602c8feb3e2b2b6dc0a9b3832dff739a0ecc400bb1f27d56ed2954fd0efd606b49fceb8457f3367934427d1eea9964d890e8daa272e6e281a6f208a234445ace03504b2b0e058b0a42b44403fd6600500d1784b88921b5d2ce51d01d23be891c41b8aa467113c391e9cd6f599f517a8ba978c3324cd0fd3eec91ebe8283c88c2c6b3f55000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0ff2ab2af0991698e3175bde85546c794e562fdadbd9b60890a04e02c1c7630046572d8e3a42194f7f6a87367ded21040917e58ecd48648f1e03b2cc51dba9f420d6053594842ae51719f08677612ad2bdb276ad0e40c00e5cc8f0c1318b9c16fb5fbf8e20a536d615f23d6b80a5981f97c3e57ead26442a2b750bb2e6862cb4ec4e3f92bef90dcede7d50d5c3483dab47c08e378382b4bdb67410c3a09f82bfb845c3f1d8f14dbe8c9ba514b3f31e65fb9323b5d2301b9add0d98928d805272c5dc89ed88369b316918bd893d7dd90d5f503cb6e8b069a043d6719c085e3e80b13a68800dcfc68bd2a18b61783375beddac73efa920735f28ffbeecdcc8b773e704f34dfebd26164bb08264624675bbd0e76a4e901ca94749075256cd06bc0030bfb3098e56a805fd21178bb3e4cc5661e4775fc6f138e7880b1b09beb760b177ccb418c281a3e17d9421e2c680cbeca9a96f0ed1a2496bda8c1f7c6e83fffe8e782f0e423d1157902578af56a7d7e23df096c7ea845b96c1bcb80ec19b1de2404c5e5aaf8ec761f6cb0753fa19ae1ab47166f550aaa56f438d19af27ee41c6c5a099ff4c3cb278ec60dcce21c2c6a7420123c3be7e437bd514302990bcb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001042fd327d7cd051c1f991200fe107c79fbd9a81f028224d7024c42f50f7fd443711f781046a6a5fa711ee9f7026f78a8d72a9ac5ac264c56ca16df062720a889856afafec675b226764ac296c491d2fd2230299e4330ffb4c6dfdaffc602d289c8d1698e861a3faf130cc1814393636666ff07ca1c3e6b7678447b97305bbaf117241c0bccf3f1883643b79832306812cfb5ebb6095997ebc2e31298c678549d2e654e12291f85ab5acbedc10de303e6c1b201273d1f01d49a35fa3745bd70a64adacf8619a95d67e2f549438d97d79aa75fca6872d54085897b522d2b87c52fc4a879731bf697be8a7911758cd4190586f96f131cbc29f878f3ec6247da33f9d35064f13682bb909250af70f7be6e1b7e90e3f3335d47ac81efc1e2d4d984d18a5c0f44442ad11841c86a01b94cbcfc3fdb0e7602912bd74d04714801d045f544dfbf73f91769a82fb430ccf9e8b215f16e5e943f82f197d5e4c7ff6e13c2025236d149b01975c6535be72dadf7326a7d55291031de1a1dc788dda2b8cf4570591e6cfb96b11f42d5a54b548f0531ec9aff9615a9865ed4cd0c817ec4041ebb115fe758fed78c5223dca4720e0be90756b688a838cad85293924fda4abcaf1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095a766a90e9aec7fc868bb17db6c97d47a2ad859696738f7ce30a3c5c4c12d821d34b32d222d4aab8995977471fd55b47e3f58c5bcde62fe7ba76039c65e4d8423c3ccd0bd318e3de9de426e4e59fc52c41de24bbfe93f67328c22abe446b39a4163584d1410d607fe524714e69447a35c9e7336bdac0792b4ddf84aa1bf215d17992072641a1b23d6ef24033145fcfdb031b1d9c2c659f6c9d8f0c0e46aaf500964e6f2a027049768c643ecf78f1fcf121d375cb77a3c6b0ff4e4e25096b6473d11db989f0f27eddad7e9c1a0c3287b0c82846670f4b5e6a750126ace75d229e137f8533f3fd53c13c03e2374a93d2b76cbbb37ce4bb7c0e1440cf35b59356c9ab00bf7d866548add48bda8566fd138a8944bb5907347b64d0a59c1cd1b14aeffb5ce31703f2bf88bfc958c7987929d70dd544667280196a20fe0a3bd7e94ad116fbeddb8ef6fa9f064072018802b259e9b1391bbc6ded51ccad1d50515a6a4e1640d266b545abc3b8f1adafd2e7e2c5f7ae6b5c877a56d1b5f0bc4dafd3f75c7ece02861b878fecfff3ecc114b561ed12436c411089ee53358083578e2113a2c4cd83cbb21a5c8d2565b6c71c29b96106cf4e52a2b77bbb61de9cc6b67987700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b04af7fe65701cb513ebe339c0d3fad540beff77a2ffe9887393a995a31fb416e6a8462aea7853ad373c8df49d7833a2a632167b9be6e0d7f148b929245f2a5e7dff7495fa6459ef9863160467f34a80e2a5c196653a45ebdf11d266928078fb01778100c6a53d76a5c7241732943155bc1f8f7e2df99d00c3b5da0fcd9d948ae3100aab9518c4c31de22e3841c1d8fbb7a44db2370fdc2f5a3d4cda35a927a15f5951c2ba8c71243a167f5d7158c07f110c32c16a90be6e36bd195874b7f39c6932a98c37726df81bd3520b14b8e71d275db076a3ef57b079b33515a1c4165756416963c8ed1b553d885378cb34d7f70201231964feb7e73da9db99b8e5b47aaedb70023c1862dcfa1265684ce9ba728714faef330cb878d3291aa78d7fc117aa2c7dfc05e0bf4e8a3180d1129dd7a84963b801ceab0c483841bd0e3bff14fc5fe062c6505893f36f2bf439b5568cc6b7b5b56d72cc11a1b50167ea514ca4ea1724f035850c3bb76522475179da24d26b84c6f5100ada2d67406c41aa6816e5caaea1436581d1ffe9ceb03c9d290ef2064f2886335ba073a26f33afe6277ac7372f19fd6e0963ed76142b1bbfb8aeaa99e54fc1114d57b2d46585895194e8900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e56ed14fa61644627f736b5502d035024818c616ed9fd457085245428bf57bf175eaea3a141ba75032fb362c1e40c8025eb9c261dd8b0c7b7bf50a9b03d1d5e2904670b2bd9776b6055dc79fa7e4ef3e62c3e05bc244ed9fe0a7e19cf209a00ecce093388390d44d9bbc39409941049dea73666748584f6d1ef1a0248359e36a8a420dec1c9ae48b8352e84489b4db4b07a336fed9a04bc047a3150865b3d35c03a22bef0eac5dfcce1089311a8291d2edec18b1712cc66e2dc7311cf8b1a6065b78ab0cfe1ccd4555a03c0f6c31e069fb522be2e8eaeaaf4669d3068f7a6a046c30f850f46ca752e4c2f6acfae4a9d9b85703e30e857624ebb916fcde3ffcfca7828e400ecff8c462e4b6622a03c4e4f278d8584dcefd68c5bc7b53b29fd9d7a9746e0e107f270b61e1571d951529e4892740bd30be1fa3ee80bdb722dbffcfe1026a2d40b2c4da4f3141afb1ef7941878e34ee7b2ba9b7e1f20ffc52dbf35ca8783510faec010ca9a05cddc24c1ce63ba63f261f4b625c8fb744d946f72236157c25b8f89abfd9033fc9981035a6575a7b836ad79583354f913d697ebd5bd317a5622174b9f4027fa2ca48d681443d1dbe4f1ac1ba6d1c0df75770024b9f000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002236d12e5ea55c5218a0163da58bbf6a186f4dafc0478f94c176c9afe1c4dd3985cd8b20b565be2aaa7c49de1752b7f70ab29d2325a981a045616c3d1cad540c90e560ef46bbc6d2c502584b003eece8171040a526a907bf91abb3e1118f9e71b2f4d5387400d0a25d5d2fd888dd08709ef115f37e4780b5d72f37b87a32aa6c5d35bf8d9c0e00d3327afeb16910dd67db76ea1f6abf3b4b66623bd9d9e5157cdcd0c13868c32581259923fbbee37e8d4580c366e8f01977258f7a112f4965dbd92c81882adba64c964e49444ad2e1feeaaace66840903a75141324426151824a64fdc5c05e0dcca56c1446e4799349cf77eb808eb2c8a82c4a6c39fd27fbcd3a81f77b9cb754a094c75a42fbe46edc3b448d299be0d4d32c513054e9dd9859681fb6ba7614b6ebf2fd91f15de1267c1ca64714f019ae31a5331e6cba7bfc68c4fff7d175ee2e0ad70467abe93b62bc5d4e760dadb7bfb2c54f2bb8668f5d963b355ad7a39f93521f9c009e1f617ff55cc50830b75489d8dc05766958a89795c070bb5b73e09f4d9562b59b972dadfcbbb961e32d5c43bf42930c995c2c78e4da3ff5ecb2d0267fa9ecf12ddfb60172d9e8413421f503959ea59aa0e35dcb7b90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142eb2881ba47c9b8ba06f0483434ea80215634d5b5bb7648d331b048c3f6840799adf45f9d1e1b9a3617880d3f9edaeac865baf3057363c31cec65c80ed6e8207473a236fe8414edb160dbb13daffde8c4145ec6c5cf2338820c6e7d02672cbfc6a9cee9001010c33a599f1975680a9bd75cf1fa0330d948c6179d4e12670189abd51b3084d36daad652e928bcc13ad813eb0b63afd814ac7f1f5c9f1fc8ef7b998e08bfa19523918aa1ee43754eeab1401d756815db5319f3e49abed5d273a889d00a1e2c85c98a633bca13118b06d6e77a1e7f084e207babf14f218b7e67789f956842ef7d8d1549b7f4bf62d468122ac8e45e928a18718a8bb9d571fa711bcaf5f1cdf5bfa1951a25788d1e0ff8e81a858a082ecf0ce3a5dedca8d8fd817f50f09d025c66cb6721e3c7dfdf5849ab12cc5d28fd7b22d93937f3e567f3a16c6c4ea580119abdfad096c5a2a713cfe465baa07c6eab928770a1c89845296dffb2fb8de50c7b16156d089ec66e06f301eda67652c05d9318d81827536d351f3b8b37f1251001c41f28f5c8ef685f37e83527be711274fb1b1bd4e3d410a9f9070983c2d9ac55549ff90b0813222dcc282ae3d345b6d066e7daf73741d84d79f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a71c920d239b0171b480be3bcc2d7a92d4379d2caa3939ad9485a327f7deded95b3367a938fa6018eb63ed1703f96e861e30c46ddb25ff49409853a8b2edcbb93eeb47b4727d3d516013e857a8cf8d742f4e2558ab2aebb69e7fb315c975743ddae9a5792b7ef47d16bad096d2aaa71005480aed2a0c2b5e3f012c87080d4070111cdb5d37e2e72cb0f137217f1387646204e500239524b5ac3fd7caffa44c3509153f898c958bc8c278ac10ed972e04e963c0237104067cef405a23bb4ffae5b75068f5541a1d5ec7aea1c9a057442354ab6a6ecfb7b4b796deaa1d004b1d06762aa6f7ac4784747aace1a7560b6dcf3a2d500217f376ca3c793697c97f704f636f5799af264d6773ce4b05283d1628384f100b3f872d6bd5b40a883ab449dafc78b10871eeedb14cc07061b6b9f986484028366c06a991f8b17da50cc5eac4376b97b3d3fd9937195478c08a59ad4625524bcf6592646d2a9720c5ca3ab3976adec168f2b992c1eed1f6e3e74d08fa5872e9118d2f04b74a67f6ce9f5042914ed985f3f8446d0e1492661521bcb3b137eb9d936748195a2ecd8368accfae5ce57c491e7b2e7ae3addf2c53b8daba99ab59c10b4b79ee0a031ac6f8ef14c05c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024d2661d3550eaa6db9501baf1571d6ac6cf496ce8efe6b8c6e3317781ed8fd84277d355001bef6fe4d22e0747e3616a1e43b38707825291eb5c5295c86f0112719886fc673d617855989246e4e50f0af010e714fe1d1fe407a01bfb86ca6e2e053183e6c6744b69c74a51098f889de22fbf1423918ada62a5b7442db57ff21073df90f04076f93d4ce35b2a14ff969bd2386453426ff0a23ef5c3c61860c861020e44bda2d924fa0a031ae11e8c75fd5c2674bde045278546f15100e4a8f680cdfa91b82eeec40db6ece9959d5dd8d81a08702324094ea3381491d156668d1ceeb33f09fa28d67a7de08452b6229ae3068b1974908b57397ccf7c9d9f8c7553daa7f049f5f699701b505ce4d810207bbd9b7509f2d6647623d36e6db16627b9a950b274196fab7d37f93458c875cbf7715eb8d0c0691e9f987c77b41ccfc00aac90cbde50dbe09ed27a62c9a916f7be44689b5ceab721aa4816815c6d51b4853ec6e9ade83559dbd0bd587e12de83444f36f3828d940a14ce34c507de763150da06f633353969e790584804b71535bd2e6f9b20c350d41b21e00f68111ed688cb57cc856e455808d7806e84c55b0143c9ee42bebb214d29b872bcd1b102f2bb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000590355fce9a092dcc1cae22b0c7bafa3bb025623cedd2fe89d79095d99113cc2c05e7ae23778ab9c79207e12ce75c3980334a07033abc9656b94f3d8128baf2eba07cb8c318bf1067af00bb95862d46c4d9ca9e4c1f66719aa6b62db04a97e6dda9dbe55539a284df8c9a9a8f0670ef84741fb780a435bdfa1ecf3cdfd518a01a6a2eba429d24a8e6de90420c53de848dff423ef4b6696c7cc9e1c656edc1d8721edeee2ec1bc60851361a44ef08c3cb25fa6a4d4985eea3ea7ca4dba54f4d04cf0fe8dc87ae15b936eea4e606d2343de1a60e3e9f8a74668add7b7045dce34ebee2743d14e40ca5c24a82a8938661bcae1b40bd013542606f2412d4583cfe5882762b397a9b3a0785242049ef288b2a0ce7bd6ac34b29953e2516095bd298f82d616bc4fac01683d97b664c88b721c7abb5f7bf91bc1f1d45a8176d179e9cffbe0ee1ef28f30bd809891665f089d5c70a2db5dabec7bf0b9ceef1858f25f373ae6b5485483044f93b354f7814c67fc49008659dd2533a9c08e6d8458ccc816a3d657abc8b775cbc218ef22a70b35dc69374af742164f8cf15fcaf35a90e2d31e0f628894a267c8966045ff62b562861643a40617571733729bf9e297d7da4b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123a512327691a41d4c3b3a835bd8e8c57d937aefd42ed944d3dfb6c970cabbf902fcad869bf0c32e66a4cd5ba0aba51dbd08d95af2d489e1e949361c411e4e3426f4484668657ad43855cb72284a05c90d2f1467c8deee7eba5855960d725bef6f27641d8357c598978984a466d7aa791355f9ef14cbae0145aa2a723f5f8b3150585e2acc93c1c2146720a856a1c2463b9abfc31a0e8d15c4e15ef1c26f7ca07c965c8b446e675e7d8ef183a1a8fbf18f2d696579ffb2f87b017a9fa74e290ce46c82a4954ac622deaac4192d86ffdd3c5b6addf6355e60c9b02497f7d09ca7d5887564692cf909a9d06fdf80da0c985d91be1deedd77d4c2b7ab6285b9edbe1f2f52a12ac2de3b0489dcf9ca7893e483689e7c5ea4c29e067a1b98c2c7a13e3170b4b7f302793b337b0646c7e4f224c666458d01d3de9fb33aaa7b1b3f91c719ca1d9b2e9fc6e6dbfd4688315e453b5feeddd00a3f6dc017857753b292d3eca3dce0ef6b8757a087c2bb2fac1d9db5da63cc51fb07ea29817b32820fcebf64a3269cb88da948b570a4d60601662678ee8bb6424e2ab5ced8d5d63f35554abdfdd59c738238300004a6671cba5fbcb5d9218b15bb99a666e8d1a038c3149d50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000173fd61077f6e5594654d08a34f907f20b3fffe6dd495ca09eda0caca84726c87077b769eb95676a654458f66964f7dfb2cc2b9540b4261ae2f618a11acf0840d4123a80ee6d60eb43b2d4b3b60b552d57a726eb914cd2d6f157266053643b1eb8fa86836fdfff4b16cc980d019c124fb0b4d81e0510305f0f23434f3dfbc62e98d60b4da341306b741d1f960163c63b081463a75aef0e6b3154ce02fee56db03809f7bb48b7783d7483e30b43dc7921fcb31e5c895bcb6851869ced410aaec1396c12f986175e7b2dc4f11e455d075911ac8849405768d4d8bbcae4a0427302d48759b3f0f039569a30584df3aaae59202cedf87c787049c4f41ec98460d1844337067be6f03e7440285d1950aca1bdb2e490eddcc53d65ad3f1f9c6ab7a793022d0db8177a9b1d5e31a853a46ba7b9b2f953c038de76f3fa9a1f96e621633290dc91faa811af587edf46694bbf5174ce9106fd59e6dd70b02b9e0c85800ec88d94aa10d48a4609f17f2306de75adfd02a58892c34308473aecfdc7c623895f878e6ba2875447927a1ce502594dc9a12dda28513938146d9832b841589f9e73640ff6a9a8c2d2df9056bbe4ffe9ff6b22461892444740ff8ce43c2dec69b74100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001efee4c4196033bb1d3f4df3edfb1d2431b93a9ef95529a3d2e35912805565c1e510be6f196433fe0eb357327730bc2a2cb64e5fde28c36e3abfcc5cbe00603896e1e9bdaec977a9e52d4f28b405d73d94ecc73339df5969610fa120289a5f3332a10e07830392e8e1ef57290f378db8333f183a809653be606e7899b22e85158be1f915c81c4b64e23927b6c9ecae27450e67f30334f03f84ef62a55bb446bdfa1053721006bb178f04cc339af72798e2309f8136c39c8ab35fbc360adee431aef7037fc860052c2fc31a8f70846c8896c4b44295e727804a6643c924e923348285404ad905184c25991286249aadd44633dd7d1af1dbb14c65c53fe575750617d45d6a9af5aedc5f0f2b43c6078dd699a8ad5db1bedef861342c50853fc390b9894fec0421e2341147fef8670f3ee68927cf2671f6ce5fd6f5f02e6adb6724e57d9b36d1644f6b7e96716952e8e0c5529f96cc368a8bc6b8778482e65d539ce7d5e9993d0306857aab04e6baba524e74f25050d12267aa3f6bff631665355e8145154dab57ec58fef64259922fa1ea735a3ff0e0dd237d97dfa79b5ec0017c6fb2154f58d7a398859e62b816d3054420e0114df1d3b8f98cf00b2b48a89e19000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c43428faabbb980f8ec3e6b30416faac153ae6e25056ddc22295d8113b1e29f216e696d4d8f93568bfb024dc24d3c8156ab126acc8e5fec60e76c39f020e36f7cbcbaf6299a87aa78b7612740e38fcd2af8a32043d0d06e53ba1d1bad5ac69b0f1b490ea2cbeca7ece2afa025d256d30ac89436a62ee3b949963c971174743d8b59f2e7cdca683da26de1e97e2915cc40f83e5f6c41a8e74618a71255d6c405372d29d94954ea7ffea5f911b3b8f74fcdac08aee7e75cf99e29f656dcf725dd498fda35bb822130195ad861930aaf5df0b3d922de8000196b0ac46bc3e13ca357899ab3e03e0f8d196059e52daa1090f31807d91bd7402fb63cab21bc02a7aaacd5d6fa2710cafd74509267d3703317ade1bc5ccc883607f1466361399d9ac493ec66b40834da633ba67994caec580474b281c6b33080134e8db87b3683d455cf574505d5f65ddc0ff2c54510079593b4bc81b06036ed5d44507585ebbd8bf695f11627be1af14b09880c1ac65930b63d1f289de7cdda85aa66a934576840c447abe1944d9512ec516782113d760b3c7d757a4efc656401e4ffe22e9759ea18b127337b933d942f7a1e5b1011d903f9cfd3c7c56118be5928e80dd86e0a49c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029d54f34a3cd6303caa1b8ab9358784cc64df4cf8b6ed69fd15cf17cd44fe6a44599e6b7dc37a55bfe3ac64ace9b2ce2bb9dfdd83d1d5bb9a1e319efd8b7922f736c3f1342c6a6ef824822139eeab87a201cef5b9b705eb46187ea323360406c0fb076eeeee5615b128e16c41f1463428dd807c428fbf9cd480cceec0ec03f356c5bb242b5bf52309ee24ea1ab35c11e3021f9c4c79a6f8ec3779c1a7d508d41798d0330c14d1d7d8e7611b3eb39e28bcf2bec7d8696d53071274563947cc870a9cdffdd26db67d71de86dd3415e608118f015efd40293dd3c87e0afe38334b5389310c30d10ecb6aea258509113af907fd5190d0184c8735c482e1b5454a338a3cee86f1d6f9f4c82ac62ea9a31b71cd05e617ac9b0bc1759ee6fe149cc9a079bf8f7551ffce6df33072956b9ba01e592563e98234a3cedf75a2a55d6918be5d942402f1e63794e4723ef7d7c5702eb94675de0fd7f1c6ee7cb1340af8d337e631da59e95d5cd8aaf09ab858556043cef4d92ef1a61e14aada2aa368c94e3827d32206c20b55a16cabfbe2197808bed9e0f737919bc881ba5231992633b9ce50b6e32b53a7d08cf2364478f81e01f2b161f316d6f3f4794da54505fbabf79680000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a879ab8bdf0e0b1f8bfc5cfb1c99aa29489bdd36f02d575d761566ba006a10a274311bf0c14a5c3692095eee51a4a1560c39b590411517a8eee8b1904ee9dfcb51d6703cfad0c2674211de2d5dd83cdf7c975124e0e17133d96b535977e46a13ec3145ddcf8390fdb1799d9b43731fc55b2979be74792940f0a15f539b2903c241de27a2fc12581bbf1100c37dc45d23899204aea417399d3d4d80f52fb3032368b489a2d1202caaecef71faced1db78c41b1a7313d46c5588921b53fca2e159d8db2d25f5b9c37e49c84ac8c17c86ea869899a078516e66afaf9782f9cca62a02e28104903b03c0278c04f36b3101487505f61774015e805e3f5f0f1f9a2ef2bfc3ae39b6953ecc8e711a612646b5747ee200d393a46e2f48e9e013771409f1802ec3473ef1d50f464a0babb628e28622bbf4676fd4c98d1d320d92473a54690a55984f1688c2711d119d563f332c5a2783048237f1648bbc4dde62aae55103c91f852f3f8972a625c5f03caaa46d72c5bf267122b0670dfdfd45d3c876da6c658b6c9a972c71a1e49c5e1c0b68ea4cf9e4b93885e629890d2de6e5e408010d9be73d9dae9095465ce7dd231360e7494a2b0c5822355bc8ff0139a02198a6a60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a13d8752d5feb7c04696abaecb76e6529aa096e3d24e38d4b2a3c45542c4504dd275d7b79121ce0ba80a7df98cc31a4559713daa61bd18d74e19d664a2db37546ceb9a0dfcc2e77cd87109cdaf692517216360b9ae8576f30de29771974ec15e0dc751dba72f12d606e41e539a80ccbd6e19be40287fdfb0e6cc7ef56c68ab900163576a8732f36f47fed6024d85ce84b5b8b1e6e8ed4fa0c9f904c98a11da85e56abd504b7464706e18ebec9e87f8dbcac169a3d363495e9e719a8666b1581924c034052f4570869e10b1e7930c94fe647ca00acc40cdd2a73ede52f912ee67b88f2962662fbb58fe9100d32291556e9466e88f4708c9be748f5bb632f2c1aff2f73b30f279a194adaffd6c8489eec06aec71a840831aa2356fc88a38a410b752bc2a3cc524db618c4a0a1b3d35c78d930cda3cca990abe1ad93ddb8ca0acb5e940e2c91f42ec7bb2f2a57ab482492ad9e1f523621c5102a444ebd4bdd361a0bb7fbd1f2794aae0e3efabe11b2152adb0dbb9388e4b0f40de05d36acc149316fc1804ba3bf47948abcfb68c221a7e5b1df83d00c88e877234ba78531a47fe4add92f31aa11c5853336ba5952e2c7bacffb4423260f40bbf8f5e01b7dc1359df00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48402e61ee2da4e4379b501b5b42a0840f4ac6698092320b9374c176d6b509a8edee2ab039b55190cdd72d4df861d96cec43ba466534e3a2f3ca82843d4e760088812737c332312a6d09ebaa96b5bb07660e872735d3c360e29a06693788ffd6dcb1055b09dc2f8b30af61963ffae00ad0d45a002feb9347d1d5bd3d266e3a38ac29170972ebf5384cf6196d86ce4a892ca6fca66b9b91da3c69721d447f04ed8007087152d2b860c56f3e0144fcb27b82f95341164f58cfd485a5fcbeb1a976e6301cdb0d925a76689d9fa122511aa453eabefe62720be8017b77cec4d5e3dc76862cffc18258f33e222b34baed45694c7de62fb2c6a3a712b1ea462a416defec87260e3c58318f8050dbb1a986e97c92cf21261705eeded4709ff55bcc84beb03f2fa6cdf98fb730d5d0dcfb5a3954eeee5d419d74110934c919b1c180dc18ccab1e92e23209520db115b2e161ebbbd56bb8e35070263aa102a94533d8a97c200c2d9e641d724e6115e5cec788442a9fc01f29ed3ad09fbc4b1971ff30b7f2f5610082ffd006d81a0526ccb7959e4801e4a71350fe28e2931a338af570c8dca1282e868bc58b52f76166877940f6f7ae0846c53e2ff6350e2b58032e0b52d52e421484d6f2b03a573d62c15fd462bab12c9b10cbbcb91681e6f0454d05fe043b2e235ecfbf95e391d581c76551c63bcf7174196f3380a0068a9b8a629bdc7d11ff1117ad75470af6be95492b0d01fcebc36e37538bea27e00e6606d571f2648f182e069c19ca73929bf1dd9a118230d079758c08d0d2cd0cb327950e585913862a26a041bc7d3964e51e07ea9f5a7337b2cbe6d5e4164b3c7bbdce2e87895a7bcb1a73a82d235dcc9d821c38b3b5712235c49737fe423a921acaa1d42491195586098a94bba7654d9a170a3d5b28515d65ac6d863110497f0b40f610b038799534168b216ab741ba5412d52013dfb030d24ad73693a792d11444bd0bc01beb760f05fd3a2ff89cf5be8def1162af3bb51789f20d4798d759976e2e6e3c0549f74f03e0de60dff984ea3b0fcd139b9b6fe6f88e3b486355659381245f7336160c040db1043a715f8dfcb8d6180bf0484739a43d6fc508755bdbbaa89fbacb3e50031a9fa8dc8bd5cc1dcb0e6b1bca8e0df2996e339fe6973756b83424a2042517011e0407605ffa3f4480bb3cac7ea50e01b8c2b11e96d646f221f7bccccfa294bb0db0f93d979e44c711410b505387b1582ad2048852c91e3e83308c5e25842f5a3027d2861f98bde11b338aeec890430ff8471248b2137b8700c07aae4f8d6b6d0386c918f54babe8676c960942d2eac3be5ae174bff3ea02c09ba9f6c4fc916e1fee0100bbdae82d289162101bf8c4e9ba520a3268345a5ec767c470ef5451ec2c553c6ce23b35c17b2aa2843b9ee811e3c7ec56d93a2a2322f18b99c99f6bb01d665a1391dc70dcfec2f36409dfe35e33c972860089c199ac4eb8516d48110c0588ec1c88abf4f9ef2d15af5e4f878dd2972e07aa3e8c1eb5803b3aa7ea95b4040567f29db8e6a8e9a6e77ce05629870b11f7e2a8f8ca228b403686c77e12371b7a0277e3f90bdd3148b9560df10061f0f5d2da325d6ff764e495db2ae9fc030bd4d829166e9a13b8a60a6276de7a2f9c9d968dc691f5a3e600d8bf72e8f7020a138103d5c0ee836bf5fe7eb87eca2279d8a698ca340acad52942d6c3f8d7d72d0f7ff7c0d39e5797bfa8f878392d21ed33ccc3f24a09520a8e5c04eae65e5c08e122093f7283139e2f6c7c55d63b9873943c83d8e43f40d441ec95f5f65e7803f13780aec0e5a3e75d1a6283e7c2d888f73933180f32a24bbd14b762c82b572f16a4cc2d655f901bc4f576b8855144e02c18cfd1b112f7056dce36ba6f2ef22b1a1db932dd9ae91c0a2903b0d2c8c6a6834bd55ea3beb53821a366e18aed3a04d8f504d03a1c5c693265417b105d8edea8c61a3be660b0ac1b85ead55d345f0f9ba7c7e41d91614dd954a63017cb010100ef48eeb66f3b8989db301a98f8561026d84ce0d1e4a35de88ccc51ae7a9fc9ac514929b708d87e2f3c0dc022ebb622cb8a35f201b00f5549aa987346eddbb3395711f3602bd52a5145989af6402c278bd50a6adffa904aa868de1e06491d4b1c0d772735759f28b18bce60a8f2c72b5412e6390725d1de738c690cc10b499b9c15abc2b4193bcd3ad6a5a17b04381950ff06d124a368b66e2a8c58366d52218e34a8478228ba9056d9285dc963422344642f0744694bd357b385704cbbffd61c08b244dc1250a5d0eb84b7ae297e1a7d8a78774d71a55441691739478f0e231298059643da4d039b9ccce8232bff26c9588d23a4a21f7de612858728b5451a0f0dee2a4ea990845ebef7e9a900bf1e205f7b1e0a6074fce74b38346c6a60eae0fcfce2ec2eafe10ea3d1f5b4d0003042acf5cd2ec77686266f84903926af23075405770d39551eeff37f589f51e00e632470e9593d72754065f09e5da03bccdb1b52b280865bb616ec70084ce4a8104c070fb7b0e6bacc42722065053c4bca4840e4910c74a2eb51551122f1839c0466e55f4fead33e9faa3f64942899218bb7405df661f701efcf4f3b3c454e3f07b77e4abed75a221f3a7fcba157167ce01ad7e46cdde85780bfe44cf99834a2266d2f602e56a5392f6557c9fe9f6e99c59f04ab7890ed2484e45de2e493014811a23bfee85e64997bec4e1d62551d63a79d0e357621169e886e5b57ba508d630deefa8209d3fefc2b5c502fab3bee9afd0958f3cee1906fa14c82cbb55cf5ef1ad7bbbbdcf886142383758ac346e9ffc3a829b05ad9bc2c314f23d059e2d83e0d266360ed21e5911d89089112e85445026ca25d087865db04dbff7a8292cdc940197e0d988be801c0b8c0cf85a51a2e7ddbc03b879be8a670363ee837d3308bf100610509e1170a9aac64e230182c0ee231bbc038927edffe2b17e59aa410557b06d6876a874cd85d17b21ab83ca6f58e0f98ed64edba8a59b7b0aae1401ac0222e44d56a458f520bf3294bb6a0607e4451112bbe413166676a4571d299efae802914828fc1ae113f43ece4ad9b78d5daea8143d50188cb31d4c485a6d142d2c607a25c19d7de60d2cc61429197c56fa7232e2a00720de66878d77fdea58a05000765222478ae5a117458e86a95c5b2656deb182d12ebd7111f2a8f882473e0100690e86606a6aeeb0337a209366c8f966d73dae8914756caad8b147c08935ea10433785c1e254bf959321acd5f872367882c4089edaf35fac8da34bffd7a378006288cf7834388003bc9bd2766affca4ad0cb52833c4715327323cc14a7810a910458eeb0efe92cda344bcf2e2f4d9b9b67ef81ae68cfb1a67f06504242b8f1b21d6976409b543ce8c832f74eab42fdea77c47b4188129cbee24a7dc770419370e35c6698937abda9ac5d861ff1b6a9027c6466b4377ec7f791b4404005e5f1d28a708d188a88fc45da894249b378de7ccf33bac99e2da47410b9cafbdc8f70b10a2e532cb733cf078d911d3a43b3ec2d2b4f83206792ff267980589cc9c99430ae383e394d1a41aaf8d51033ac9415112c349f7a1fcaa18b0b9bdd684faa10d29a5364f0d10f41273cf226f18d12eb86b2b1cc1ccb2f56f7a9455199b6f43501287d2918347662393d6dbb32cae29d1b2453cf3c8c5687a9dbf1e81c380ec7c30408169710e17d1743d83f04b68075fa70f1fb96d084e7d14ee78626f5a34fb06215c4b881da5f0be2bea87ebcfab64892a9c87a2b209b0f73f717c352eef68166c7c43f151dd447dc288e304bd58f47a3fd31198b66bb02ed7997fb754507810b2b07f13398357a291f3c698464cfc601b57682b31144566966720776307aa1be8189e8437f04d64f87487a7e614fec23254d8840616cdbedfe95a6f4206792853d55a50ba84ac264118c7d37b78dd2f19558a4da120428217e84718cb5c4224659c8c62c076c0bdef1511779663592ffa2fbfbcb20f7735a13ddb9179c938020669362f61243971c0ec9a8356a7155cf5e460dab8b6fe7035771458de4e3b176e0b58d5b4fd970f6f65165e396d1eca335c60acec98738da513d21b78c80124b6d90710bc5150b8ff559da397d38f6a05d9036a2eba333eaaba5477756fa11fe9461cb093de8c521c57e3fdd2713140ad8d3b3d83be982107011044372eb4259c307dbd4baf677d463fda057c96186aa577113cbb1fc1662aeba7d4f0076c002625719c0dadff5bd42cc2cb53131eb372b2f9859b47e971929e95a1537e13072c99f5c23ee60a9b573dc8acebd5446f73c1fd38c3a176676cfdcd8203451c1f4b3e7796ad9a1c4f1a7b97042db78390775fe7d456cf11f979bcdd7dfdac8e01b954e9fd87b59f838100cca81300a677f927b8e1a6b6d0899bb4fc3b388efb0a3a10a529782b58d50e1bdb307faeb51f71b12493c804b30e64fb796b002ffb0bfa5fadd7d29373de06e7dbff33116fe9f6380ebe87f738c82625a0e5d2e5a6284d964b550ff8fc456b96d6fd1763856bf9557e9169f0a5322414e434e1e62d20b81dba6318a1c37f8cbe258d7b00c93a9f3278528f2cc8019e27af710914371d7f6d28a6960ffe6861fa4c287e14ab73839b1884f3bc76fb74ed0f87f91eca1487150eccb47992128b5f742eb0860e62a6c7a1243492445b71198901b12f042729591b6d52aff01a7ee3707c4e9ae25ca132474c8ce6b97ad4108a4ff79e330ddc77e6ee6c5bc86808e3bf564868d28bbee21554da871f642ae38680e30ecb283cbea57b9a71317334cd50c8c8e0e2c2647e036da80b719f9287b6089cbc512f354a685d4377338e3205f4f42c1422fc2385fbcb1185cfd08927da6c72bf0e0425a6b0e054ec3cf4387e3b6c886f81f488a6f9cd1dfd46f48f87f30d6d3af103cdd5ccb9dc68cb81eb12496b5141fafa06c300ad32281f824da681cf8da5fa22b927a630275aa4a9e7c81ffe08e396931fc3a80a678e18d6047d4ab56db80329879ffd40d2da2772b2d4047e0b0e17bf45d0c953bc0501c32fa0df7faeb8090bc20f7050c14cfeb9d3fc22d8d0f215334d6663c6829cad60dfc9f18ce8235e08e8cd35050a4ec517cc244f4c63d791907ab7200d3b5f43d040c8fa1a2f7ccd1aa2ebdb886b8776890341bfb054f767d735b5a704de097ce9f997069924afcd11998931fb760e693c740fc021e38331c070e3cd22b0fc0774e8ce941835096618ae0bde6af1bc53d025f961735b8781ae19506585ed75ee03f0574ec2c05b4a21a4a93b90fef27d9f616ee48363da70e5426ea494419943c24ab90831df8abc0abf577465ac60fde757993d9de8aeec2fafd6b23223b526a1db66973cbc56ec166728c924e5ecfde1d0f722df952af5b42fd908c90abede96d930b7ef90d0460a0319f7a4baaa9a022539ab357f61d13d5b6ba8373e8a617caafe423c81a0562d590441869497028b44739dcad9e1698167c08d1ec786c4bc742951078f01f41bc04554c356020ff9809ec53ae161bece24a135af8faa03e348cf276c056a9920f570633a1c792e032abe54358360415c050e6229db9c016bbae26c75d0c2d70d79cb23dcd9c129c3d9dbcced4b1329ab25f539e0729109c7c86493d8ee65c62d004719382d3b53f91b17beca1616c9d0073c4e90d037e60ed350e855c6f45d1229b3306b364510bd41eb808209e9330bd7a7e4829537d4ec66fa7705af3f55039dd38830e89e01d66b04b538e0f7ff7049fbe15b24f4d8c18d4e9145b9d223003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000006118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000060d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000060a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000060b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000000629a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000006141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000000625e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000000612978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000062daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000006189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000061159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000000605ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000000605c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000000614d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000000603db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000062ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000061213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000061ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000000614fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000062b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000006305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000006280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000006223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000000617a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000000608858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000062618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000060f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000060e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000006172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000060b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000000605bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000006137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000062e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000062297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000062608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000000618373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000060422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000006204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000060afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000061998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000000628d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000061da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000000621d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000060ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000060e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000006107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000062f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000000609726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000000624f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000000603c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000061fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000006205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000000625110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000006283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000000621cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000006094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000060c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000061f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000062421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000061fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000061bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000006304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ab47c0d590ef6f7bdabdfa1dc20957a966e35b125f91230484bfaf244cc7d6fe6f3df5895f7495f8e8d79139338a86a8039448abfed5bb3ff4c97ef9477669563245d10095620f96f5d53dbb7b6bb8f87ac9b5a8e892439dd473fd4a33f15441fc19f804a08dd055d307a2111aa34796688c65041925d580f5fb8ab8fc6a4e221793aa13c51dba74bc6cc24c33fc671308678ce83d2db91dd69355757d2a9ee262446c5e4fa9e756eeaaf3ec0afef1de6949245aa3e0d204a3eb67eb0144fd4f200aa2c1ab05462ff3220d82540715b187c44a1246d1d6ef92bee86631034cb80b5e2a8f9e10123f6a20e9337cbaca7cf320f908c676dd91ba0d5fbf819016b6339a54efafcaa0330c3696b6e4203cf2ef9a0c558be5b36710743dadd0eb40c0d3f390262fe8e6bb89f35aa85111f8f16dab9787e0e7f5407d194b1e911c7d9e6a18346694561d518e46efe6750586920685bdfb65d1e2369daf021df782ff17f074a67f127eb54e9f60f7b2fd79d77d82d2310a11220d633ed2c9c40d581fe89898277b2d2258d3f102f386976b90bba5f34b079618d751599a80a7ac074da1de69cbfd41a128205a98b262769243da8f318a6c9650950464778c6ed980d520000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aaa287e1a4c006bf7af519fd2d19815254c980680ec414c701a2c673dc03c6673f81858227795f6f9daf8a815fb641e47e38e8d19753d50a0ae34006278d6e0d7b78adeb20e2fcbef030575878585a17e8954f3c6149bd4b353179d734870197f1ee5996376bd8d8ca39ed05cbeb21da5afe2c36914f6daf7ef0d4ecc0258983819b082c4465c1efba2860da2720b4a47d5540ef7525a314f14c9bf839d0ed82d0ace4545bb280eb48ddfe2de406d86c323913e3648f8d593fa4503ab2ba4feef346ffc01ba4d7001f3fb8967f70e6caf405b7b2be28bc231ec8a99f679cf53a4363192e975ad7d641ca25b634da0a5eb86d05d277cdf905f8cf31292e7890df3dc1d0ce5a34859a7399e9f48e093fe496212cc7527f722ac740f08e47d7e3e7a711e7a0de9e4b3ae2e72d3a4076a7c0a4c084db5d5dd3ffe61a36d6f9fb58bbf427de0d221efdcc86435f3ada7251cd46c9a74aecc5d717cf3c1ec0dbcdd8b0730a75121731fa4fe9ea177d5cf86140960557ad1275f57fc5d6af482e078fb8ae10715eb58658a5abaaad71ef13dc3411d180fd7f5c0a271f5e68dfbc5894d9149b8a05b8bd513615ea33605f416161874ba36731132342b5f8badca3ec0cd70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000193df21cebaf89c9c8e42207f2252ff7f4070826bb7c7beec398bdf9ebf9afda6570f8e5750b634d169c5c66916ccff8b69c0b81b74a7e765ee670b31179b0b224bd94f0e70f62c6ca4b6f9b95d91a5953fed4009f152950f1b9faee5ad74b727f41d6fc03b73ae57bed54a42bafd4fbf3a64aded04cd1ef2a51b9f4aa2e83672574a012b81d738991a3dee670d529517e8bf0c7485f75b3fa544585a28f444879f36734c41f9ed0b0a619e568aa7c27fd1cd7fe557fa71b908c9432e16a802770a280dc4b39b2cfc576c750b23788e21baa0ebb03071208ab5be68cec8f9cdb1c5b260b46f800e0d5d101f9b91e2d0871a6febd9e25a81ec9b5caf33ab3c590d6bf24c6a1bdd06c64e8f0ffd1b57a821ddd196eeace590e09488bbfc8fa8c24cbc2c1d197c39e875c515ab83349fd8df94f3e4b6361cc459559e283480d6ce26f0583cfb1552d00567f329944ff9229386bc1040a2fcb6c1dd0d03a79532081c8fd359c431d0c964ef5b0082cb59a8f41bb3300326b09d5ecd7adf89085c111e029938b0f9bb10981b1214b1eb07a80fe7bfbccfae83b081e6b05ee533ed3efc0c23c805602a56694651868acfafa6e58e3293b6c1ecfa09854007b307465820000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aefe6daa205be02815f92422265697f0e52920b22f2aee5fa8749f1d598cf13c1a329e2dfdc2b85423e148fd3be8292944cb4991070a0be36059cdb166cd7705258bbf39a99d37ce8286e73490825edcef688b0f80fdd0b6cf78ad4198debdd51c59618ef483843b0f2f640679200abe8c5ad85d77ccfac8a341f1ac57037d85405e01a985a20c27823f04cb17aed2f8db4e298fc7753c2ae87b901792143433eb77e5dd1c4386bb5cacfa3011ef83199baa068dcede95f2f9c3bb6fa48beb36bbbd701507c2297d3163843e4e592a6d84f9e8f354317a4b9b9b606a91343bc7aaddeab938837acfdc51e1dfe77b55bde7bf22ab423b445eeb17ca9bf49238d147756dd494fd22f859d9b34fd59ea5633c83d9dd61271f4d523c2b4f5d6732da8500d6815fafdd50aa000ed627ba4f69103907b03a7a37f8e93c5dbb078f2feb48e0363f4fcc77d11de4ba909f6508e5df62ea17f897d494c86a8fe798c1430c7e2fefa14c376906a496ce967315f69ae9b10ca5dcafee74e3ec33ca6ddcc28f778ecbb3f5fb5d2767e483cfbe5659d9bd2bc3f498aa11b6995885f7befa039f2da71d9df879af4b20efe771e21e12ece911fbf5c201ed86960c865af5a31e3500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001731b201e63de466772322babd505acceaedf415ca3832b39d6652338972bfec04afe5691b76bbb0c2d06596a24de065999f3df7b6f16b3c39f18382e27d17cd0e2bc9ad96a55067a1da421fc1b829f79a6b2d8d7ed5ba5729905bcd55d66912ada181f19211a0716aad6a9a3d745a76d56405b0b90b4d41ddc82f06708802f98a8e000bffe590d375e2d78f48ef75cb114d24b30ba3d6a7647dcd761364340836e9c06650461dc89f0489cdde08117078464d7d421d8447ee4484108c700f6e4a281d026e168b94fd7e98e3c45c4281a4141557362255c8d256852bbc807fd8599aedc2d9da7d9871184ee40e396e960894254c69f29b9dd98a7169b8304b6fe8778d0b458ef80abd7a9612550239fae4021bd425f81f195b652e4e58a97f53e21ded544d565aa4197f2eb1b394561834d400ff39fbe0f0d5c885ed394037ed4ee6d0955915a9412dd9520c114bdd820859abc6a15c57bdf2e3335f8499fc5165f727a4fdc8c73025052b24feadd539faf3c5786cafb84c0aa73e611d9440881b0a4dd92ac8ae96c404af2b602fd873ab1356fd19cd31d21d8ad9ac03a653637ec81540a0942e7424b75619881f48771a6d4ab04f706f25fb44c8e80efcbb2200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009160831fa74400c92343d34d2b2584df57ed370fe1853a87eaff40eb10a777c0c66fa9fc53a3e4f0f8dd1703e658f3bac7b4225ca7160b7bdddc920bd36259fb660d91a005ad63f65833e221487e8f0eea95efcf38a37695aceb588079c10e06ca05a04753e5e9b832cada687f2a9fe8e4e817e7c5155452a0bbbf3860a072c77a09576a943496cdc65e04dfe72bb1aa46a67f84cabdefc119c81593835139865de3784814921afa493f38c51ec11e3d2e46ea4f1b697ae80e125d9be39e36abc76b1a89dab8caf67c27e8c68046443291848c390cc34f23d84400c40a83766c6b6c42df088f4a6d572b9371e3f74763097c5b8e3b76c2fb777f050ea8a13ff176c0fd43ac41e73fb8f0e006eabb714056ad604494843ed30894df12cfedc1c5174a70ee9a3936201b867f7445f4e4725674bce869e80487af7d34d89c5e22e2b769ec528cbdba8f2fc2ed53eefc503364623cd2db0d7e440f81e3746f8a63133a913447a0433fc9a897d726ccd0eed281e732bab18c00bb50f781fc01ac000b35b4cb08761ba3f339c147d0091f61fe92b84d9c99f551b127b98379b6eed468d6370152ae204f3c21d6bd641d5e581a7ecfac85dfd8deba831fd89a2b3267ec000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082f58da14d55f72875939a574ca30e8df65a776d68d4539c11eee828da4dc0405c7bcd9d57cd89674a8bf73f765db8995df2cdb62beed2b99fae801d5b330ff17726d5e8f68ae527b4f299dc4fccbad984c0af890ec96f1c4595ea932f4c660fca60499eee4b9f97638fcb4185af5318b9c3d05a7d05b42bc543afc59646fbbc0d09c49c1ad83ba4dcbef4fb148fdbdcf77c03245d2c18d57df57db34e1f9ec4fe1e0ef863f68cad703c2d1608bd9dc7cc912caead9767c6c3ada99b5a36e0334f97636e6857eb9f687561b5ceba04cd13faa2b66305901ec98b36e150c6a142acd0f6f822a2ea0f5468a6932ceebefa11a36403225349298550069b5a49d2783f585206a8fe2759ccc9be7b5d2112ac90993c327626627e33d85cfd0eeecbe61adad85f70040b39d26318a60423557b0b7062d6ef47918a9c2c86a28f5cf1c6eeb75f82c42505873979d631fb55388e622d4fdbf99bb96f178fab539e4f2582421373271ee0d69fa68c4ca8d7987e0e12599661d4d0aab4f018010c427b345f383eb468d086d0a44b889b64cb58bccbfbc2a3ce4eded524439cb6f972695a381977735ba5918b07f1c5e6a3249d74a27856e0791206020872cff40442b9ebd40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192240010a40924f99b887cec322a240fe0ad1cda063cc45d61795447a26824d08e7251fed8e6b165f8812a7a942a1aa29db1df26ebdedce42c9c82837cb7af0bccddc06934ecf9a425ab5545b797000954e7322dffc3eb2381a0e3859afb7e5d7de7c8fce2b7c1166a7f1765a7bf5b3a4fe7f9b01c3be632fc0378f983055af52e5689c7ed0eb9832a5404c4a312784e453a72c96d92b34ee702fa86b3dd0a235b76ea03bb7d5009671fc0a28b26a9e775c9541e194a2a694765b97a88d8bf374c68ba8bf62ad6034030aa52a54081c8be2b46a1086ba4431c6593e4f8a180cb10a4e5b17a296d728e3adb97bda13e912765e316c0892d50864148532256c87bbe0f3e81734ef53dd5c7512620473e44784a6be1435fed73226b54e5c5c110fb776622831bcf648a2d9dbb3a97a6a3554bf9bb100b5d3e1330303a098582fb2abc7886042da90ccb9fc09140285be20614e02bb618c277e0af11f7ea860d6a49b1f46120a3b3008769d3f169d321ba6630b22b6bf7f07eea60cd6e112cf317ce39c05b6fe89e44e7394834c064fcc853eafe82a541007fb4b4628a3d17547553cf5f84d1235dbf86981c4218f27a637282bf6043e75ee1b628610dd9bc736dc000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003cfca81b259f1b927ffb53bd5040e4e7ed96404bfae16c321173bea02aa5faf4c6c2fb44308d693e7aa95f9e5ee9f6c71384e97cca549441e066da00a4a4491715d9fc0e230e72830611df10f6e76fa1101636897875b2a468a17f06afbdaca87c3368db3f625763d26dc46b020cfbd059e1765788cc020be59a86547f754feb0768ac22442c72308b24d2505e5fccbd7b20ffd41bb85d323f0543f9f226ff86547c87eafe49db7996ede996e798c73ed1113eff47f6266aef059d8b928a35a4a539a4b8815c7aced818eac903de29a9b9e946837a183d3bd684db56b317032f826151e5bcd788e90178f2d29f676309d732c69f1f49837dbfe492f76dd8d07b473f9d726b48997ea86faf238b41865d9fc0c3c80ee78cb01def2898854779363ecddc2b071547f133245a58aef77ad35e67a6f381bb2cc0945c48fed9285045c443c839e29797fbe5700b496dc3dbca807a72b1f62a5aa32f4ce5f803b4dfe362a97b5119ce88a28afef612ed2d647226b2681c65441a0688669a394a7b3f504a78ef1ff3ff97ac6a8cd6f4dd86ecb4b0028dae8dd5316fcfed4eab22263cde88a6ea6061f347c96b8016eda5e6993cb830408e56f8d5e2abdc262ddb2b9340000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000248d5cf4eba9d3c07ed8e6145be52033e2c53c087494a3e45f40e8cc2d8d77acbc6811b24db67589a3671d1ca5b61cf0cad5cbc0c5854a86a1518c4fd826945a0ddea99296ee491e26961b8f0f353360e487ec06c92673bbffaa9314719fb91c4b7dc0041bad5c9932a82fe69e584295da2098aa49ee171ae5a83b1c6d8b4a6529f790b9a837b7306c587405795aff6b5b732282267b3d234d19b52336240d3209e1804cbbb0119c1e7ec21088f7823babde5a3e57363e1c9962a06d51a24b02b10ea2394afd5f0f945e858bff9271d93c168787f71715584f20d057194bb6e7fdf151784dd6db392b745ab30757c67e9398fdbfbaeb0dd089990843e00d2e6c1fd3e4698fed6e15275cca1f39eed9af0ddec0527ba666af725ac3bb7c8b193ff3d68e6398dd778e920376592c3527c7987f204afb70695bf86be2b1069a217535faf6f84f99f9a4939b084aef852119a373bf6cd3bc0b5a37e34dcf5ed99a78b850acca41df194f10a0e449c66c5b3e6da7f619fac52b9e019ebecf13b73325a3ca146f549bb05a0e94f7d2fecde39f4c781b9481a4d54f7a22e8f77bb69c31f892a9596698d333a860ba4bb7d780ac12fcd46d2af43bb10f926edc2734246500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009af85e43c9c30cdaf164b06a5439d5f3cf19b44ed3d505e861b5e497338f3ebd2e352790fcf4e04ef5e023c3fc5080500dcca2de7eff1fcfe50502aeb08cae8471e33bf7194e21c36e5bbd0cff8d406458f6372eaf032c6a01b0bcc042be7691c5ef5686d1c49fe36b64831bafdac3c1299c1ac26092112c5600e88707aaa0d14ee6150432659b00b32e86595eda4583b2168d0095b1d45c2c4d157884f90b650136f469c102e60ae339c33c42c02b864e7e728370a8a5b4d0ff6da3bbbdcbaa30fb87815e13bafda04636a78b223dd8265fdfe64604ebb0a128a5736ecb9f534a43fc2be8f9c8ea244aab2275cc631abfd94b032ceae66c83186e12fa5c4c10fc43dd4046e2d350c26dd80a811604054c8cbcda1116eb78ad43ae3deba7f6516fc69c6ae76f6d66862c17c0239bc6de6a0107419aceaedcd49fb1dbd616f87810b1e7e7b1da9096b1668e44461f82e84b109e889b9c1848464fd1cd29c4c14edd1d56f4461fd9fe5ab7b67d6b30c7b5e32922a0d7ed3d6cc182a1414ad54035d55ee3fb60c5c3c94b86c37a532d499301e1ae2e04e936aa8d3f4badb5db65dc909771e0c2fcf8967febd6d2d5e7779921265dc757128fc1e7acc687f8a77fc00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000116993c3861b6e4321d984e2ff70f820163d3f19499180c554fb660e4bf3ccdcca1ea1ee96f7221b3ee5fc0f27252880608f9aae1b25d34e76c93a4c35d39e8d8b6d02f02c35137df76250af238b7123f5561264f8fce2fa4e9654b9286f9ad0b019a2e1abdd257d061b8259f0a97e7c8fb4f18c793582ca58b490a8cbeb54ead750ad65e2254619f094c9676fd9e2996d9d407e0b975204df94500e9933f9787a97038d473922ac47b76e0cfc3fa63df6deea891d770dd1b7d3212226692a495ed6826d27006f51dbb16bc8ede0d6ece20d3ce2b88ddb3b788e0462f3fbfc56f984492f39c5c75786477a496ed1a29b6ac88e59f9191c38efa960a6c31e7822c97a8c74d071ace7360eb04601707cb7f9edae86db3f334fdf470077cca26b304d2d1229120f4c297b304efa03b46f96087d85543f7211b4cd1f8b8227e5ebde9de56302222e8510e4aaea697aae3a2d97fa03af9f57b849ddd3ab5fabf548e6a1adf239577f1343e52a9c9aec5d93e3602e6d59dd93284023581498417121a1558a0d035d831c11b959cacfce66699e897e3b5eccca234482ebd754c47451f09586309168f0930e96d4479b76f191be54ee2d5b2f922277933345040f21707b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000243d9bab0b5479c41eb1d6d74b57b3ddfa462fb2e56a05b5f7718df5324425b072054560e12819b37cae6e220f7aed8b32afa1244b76e46b594575571df6bfcc67e7b0f7416d945757607b07aef65fdec61c3a9e5e89948030d419f1ca5ce1088a73282dce7ea8bb53bafacafc768df147646a809856cb7cdc6925eda88434acb40646a3eb6595da0967c6735c64c17f510ebacb272c824df05b6c1752579669a3ade50a83f90c1af989c8a275421d99d83521a5826c52781057ce9dd9d912696214d6353603c552af0060a033d5b6f0fab4d1ae03cf5a1a51df60a06834921012d78d074c830d6cb5bff7a7948e3ac24081394d738bbfd3117aeb4fe68cde0a5f386869991c9cc8a9249d68a4c4a1b1677545205d1bf61d0a3b6c745b7cd9ac7a69cbe710cdbea0b1af9f4deec3da38f8ed8d89bebf64f8b91e27fa608902a5915bfabbaeeaa5fa8c327511718664c7f61b940acd07925f23cd78e3b8d58c8080ff24492bbf57a33f277f8d3ae9ace754eb81cd59121bbe3e76758e33fcf2369f29fe67493ba2d96d9a3489fa89352762e046b21de616f308d3f4b83d8e3da6419fce539c07efa43cd87223bbe9780adad8e26ed5d335d02bee30e9a3a3e4d500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008738de7d499d9253536564dfabbf2c921cbd24d5da39bb5d7d105d3979961485367b13bbfa507d0dbd258f667ccc5769c3c4146bc44ea1ee5e24d10e5071cd60c186a910cab93a24755407d5186a81657669945559d10035f2afc26b307c5db039e399ca0a52a43fc98dfa09af6f42deae1efd8ff8916a93718b0c64d046f74b34183f0a6bdbd56cd4da71b5d52e28810a1588a596faf2acf23403508a51c27944ffae4053103673634986a315c299020b7fa51f07aaa4eab7c4fc2cb14ba390dda4f16f6fc49b6d12aa491c628a33335c570264028c73c2e94ce3fee5da1aaa925f541ba9e60945f863e7d675e6d900b0c269b26abe87c14afcc1c747ded152991f8c092371c37b34ad0a358eb9be27caa9088340a167c781f1cc7fcb34efceddb7786251a7189973c3a0ea061932657c101348f3ba6109546dd2d9f3b093d1ebfdaa99220ba130a8806ea9cfb4f3a8e822de9a9599aa918d702b2e06b0604fa74e96fb455ba7afe5607acc538c8595566e9610e987fc0aee687d13c07e948d5150f88c1f3b2aba2e41dfdb59203ba9902acf848f71e08911ebd2cae4e3c93e45dbe2a85743c2b4797012f413bce5ade7e5f044423f3019ce29b327b2df1c630000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064baea4598f4972fed95f61529b53280e1b2e5ba09554777647b1646e51da8e939a968f5f5e5f622b979c4c676dde7b38e70f6a070fe111c25af337b5a06afb014a8285e33e62073df24e51008f81331a62fdb036bf45387351be7e7bc28b15bd5a87cce1a0d92eb08bc648b3d2e561d5aea09da490eac6f9a743dd1b73cf04922fd149efa0fbf64bf7c3d8327a3783fe7d51b580b2c267542197f04cc87cb81f579322ed5fc8c292943094e0ddf10f7f56107d30fc12add82d444afd25a3e16c686e454377ddcf7c22489d7f5ee3494376c32f02da7476e7e2aa528cd35be49ebb5d9ac92bb232a3819e1645b68730596de68593d2af7eaccfdeea24a90841f36081349f0980593d917e04bd7a842e1984732004723b7e3a4a69146f9657f060679ea051615459ff5e951b126860baea23c942d8eea452bf99551f792edb0b484b22915d528d4a789876603ca682a31bb7ae1f6852a49ea51c083403c62e7df44ed9c88629cc85750ba5542cc882c09b4fb2c40fbee6e8ea65bb34b4968d9e8c3c7b9672f267ca38a5181864c68eda09b81fd1b403a3053ca3ddf177fcaf54d35fbc6cec14f99855729a132b0c493a311fc0c49cc9098de371c7a131a0916700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e08fb0bf869b95e64108159dbb4e65f9793169b6209ea8a3ae81763e639f74aa0a37172ea4ed7a8d7e14b793bea2351be29cad37da458da7d90cc3caa64827455ccc1f00ac2afdd74eb4f758d176e9ebb6a18142b6c66244229ed6a434edb7cafa49bb8193bd851e16f8af084ccc2415b777f436024220ba15774af0deb3f1c65ec7f2dabefd7a9e37103be089183475173204a7c1ec24e44c1be2bd4c03f0cc601b581483103c943c81dc168258f015b5eb4cc1509f0f95d392ad9ee37cfe955d0d0b02a11c29c222050db770993194c5757491136fd8816ddb4b3614e2f6d7e5f255455635c0a05a9409abb78405837b18356c12256286c5542011de9338a5e0fa00c8958b863509b62e7ab89cf1191a0dc3bcf46324e2f2313e243758e17ccbe1cba3af141ea9710cd0cc96367d6c2c0ab8670e81f8dc05fadbc53619e1b503d2c845c1d73b455b45eab089c07f566b8a929a4b2e2eebe27ec9c4576999f0a9d4916b3667a080cd94db0dff936cf6b15bb99d38d38d6874c6b1f817ef03d9dccc0abc937da678fa11d7f6a99988b0cb3e9828bdce0d5a3dfec877fbe344121f4fc37c46c48f38650dfe785265907fdb7c1881f4e6c21ec16bc773758c5fe000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087d016a5c6ae9f8ecfa16a119566e762d4ce190cddd7857374ab17e3d53a23732a6f547448f369bb6c6ca5f007ee6df134e61048c2cf904a0cafed3790231a0f58646e999f763bde03993960cea7d7df94b0e48ba1496e2fb05c9ff8b15d9b42f3a750ba9cb8e9d6ae6591066dd15ba093e814abc185d18a53972ceca4a8be6c21cf7df11d9b04a11972c4114a845e4e30fa2abb869d36bbf51fffa0a7ef0abc6fb0b82d53e6f161177635b953525a1e36dbc063ea571f3b4b10c87a4c4244e4ed7805ea9141c2ead08757f8b8c8523a4753f15f1dacd2f77c28718c0b02a62146eae0aba208fe299990bfc1375b43eff58f0d660d0dbe64b1ae86a3fd72cde0f6143e5bc5e71b442197d86d85a6eac2e4ee6d6d49f0eb9faf0de7e91680e06e7d45f3f5a4b401aea21a0cd381fe9b62ad3f8efbc3af219b499ba1c316d94e01717df85d34b2c83b03b3100e6d616d3ff6f90c251a97919a0dbb4e836c5cfa069516b1998ccd7b72bd3216f02b7f77fcb930a113449d160ecdb55ca459e1841aa586ab69f5634deca9f45e50214ba1574ce0f9bc70ae76f33b4900e7249551b74148fcb1281148a98ccbc2ed73017e7f5ea1c5416323565e9c8dfd305e2c69410000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028860313427a3f2298ca9ca8f9f2833ce7014f9eeb778c9f8190839d674bb8fd555760f3d631e30403e81e2c907b77ae24def96b09666f380a8f3046f237cd9f082210ee77b709e3014d81df527dbc6e7527cb6a17845ae311b14088bf8a69bbdcf9c74397d07726e7ce0af98c2f78047c5211636f69be176583d8ba0e6bc9c1ce09121c86bb62fe812fee4406b68c07a9ebd571fa5c58d26b11df9f41c741d81a5a83d4337cef001dd4a2cf553e0fea5b672214c23941ac877cc13b7f3fcc8d3fae5ff7f10880075b669caebe20d138b0b77615318fad84fed5f138aba1112714c89a972baf11fd79fa57df5256e79803ea573e3cd8fa0ed384ce8271d327fd06a25f91b9fa9cd2284a39818ea2898bc572a59448f961f6b7cba0919964b7ebcbff64f243337d8313d420a49d77009c33ab77b8a84a93ab6f8a998c914b1282192d83b9b0cbb59f9363f2cdc50f444c36accc1a0a4a80c9c4d6f2324e10e8b9e83b5028dcaea9a7d07c3de564fea4461d58d8d0b31933b96f5999bcc75c713b1ba8b9e535885f858fd190691ea032b216b0622e6546aea3a28961699d284cdfc26577c7ebf2a331bf0d3e7cbbe7880419541f216050b6cbdfa87301287281e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e00446c707b725dc6b02f9699ca0c8c62248fb54fc95f56a6b2af006f5e70c58edf94834cf93a052acba44514bb8171f91144d6e48a534aa3082c94dc29a5f4d277537266d28b61de1e8b4c90140e9204bcb73488f9f86edf562e41d71b20150be8d9fa1c49ceb989cb18260e93d58fdf7b00f564484e1dd45f0df135e55dabcb633604587c01cee618959d69ff728291fd35cb5b3b2739dabacf3d4da6c8eba95a1fc76ce45ae660cfd967e04573a2317a9a7e0ad311b7467bc448567d5a285e0939009c454367cb3c9ef7870752816e9391c37dff93380c61e8d4dcddf767b4fa36767f4896705cb381accc5881aaa1a943e8f267ed8acb8c4ce19fee8dd271d3a14e979a70a1368f7684bf7cb6dece49da2f4662ff4f208f12bba91ded3b7b466b4da57ec19a9c4b54a197501ef8f788062e7093b82c4b42c00128b60d4cc3de971a3941a688b0af477140088e3e5b809bcf4e8e6fc86491c288b2f72a0bf7188312ce738ae6ae98146a72ee0f67e3c47667922abb12d50c207281740021ca48c72c033c5bd26a6556686c3653486d37192b92edaa9a386dfbc31b71de15dd670613181e969a12e2408f97c8f52316c377cc3aec6e651451b1d506f471bf0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0e1e45556d9932ee4a01bd7589d155ed4eeb42b6a33e0f577c0cf64812b8263f63f8d81b34c64d82e4242b25d066811e087b9a661853b967dcaca3aae68a48f2cf39707aa33642be246e47ebe47aa5dee189e227f1dd0b55c10e7a7d2202bda8c7c9f7443744a243cb0c9827d676c905a9223636f7b3cd40e97a27b4b207bdb394095167246bada1a6d7754be7b19bae4eb6e889426ec20f633bd02c68fba9435fecc9f5e6bde02b659be951dd80a91cbd8d0989a9c6b6f8eb45d31f4a8ce440e0e1a87f376231aa46222dd8cd52ac958a5f4ba768fd2d51dbf0c3381651c375a9b23009500cdbccb90d51245c48f3c72f392adaa9641788d1611f73f245a5701df3d3fe1f15d79709e9efbba25e0776d90cce96ec8e13d68962a458463cc65a19e1990d8d07e4e7cb4c5e874682507ee083f72cb60dfc295bc2de791bbb4f2f9558e91278f52e910562995f64f4a77083df8b7b4cdd3e3bd415a52bcc276e81889c1a3ecdc220b5a4d7d0a8045a4d7fdf0a853d4317fe6a1af953522f6d549523a6a68783c30d575f1413eaf6c29fd428f84f864030bde182d8bc220a3bfc80c184484792034f7dd24c15413ce6aee831bd1285e01b55d1f0f5a3521ad9f8500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008debe4e75b36efc398a7a5992ebe0b224bbf89c6f6557dd8c7058a987fddf76577d59ffddc44eef2c9f0f0c8ca33848df2a3f17e4b467e0dfe41f58a4b32fc6cd5f0ebd109017d230fac463c09ed9adaa0c6953e231d105f0f59fc06fb038af4ee98b03b62418d638af241b2655c708314105380efc26cc98d6b79b9738051050cb77df5c00ece8a6e5b3aa73413091804edb78ff23d1b98e565ef81317234fe8c2d2b1ed984d75db676822db8a8abee27fe9d06fe6970c4df6335989d017eaf4ab219b11c29205c10286ad950eb9ea715f4d2f133374333ecafcc67274afe4f2aba64842997f9975bb06864e0eaf4733d2d600f9cb47f6afeb518033e44779b344e049ca1493dda914cd78204908c053858bd7e2a47a4bf9f6510a64517d63bb24167e118ca1062af1a32166ac8e1cbce1d48ec7beaef33b1b6e854d3c4c407124a32b594f1b5daacf5451a24f45b9184402a8393c7b08718fe8501e7728bdefe3d62ecf315ffad148906f13259732a57a55a9f0bece667d0778f6db6560746e06313eef0a249c4732d469a4a4cea796617aaad4cd598dc5a45c09def3cc422823314c923487767eebf00fb546e0e3583ef86768a276ca2e2da4d08d1020fc90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab2cdfac3cc8799e730dd5b1dcf3a65f651fdc202f494c3351d9ddd8ccdc7c3be8a69a6d0ad95c8e7976d11514811b58c863b22e6db60211c9cde5a9aea27acc30a06c6ab7bbb6c426a251b39c2b40d0e4c918d9effb988520e9a2ad0925dd5bdfc1bfab8fbaa7b1f4a158e2708473c24740a5f931da1f2e2db4f4951718416a4d824f461ecd7350a387992b6b8614cb2d06d1f89699f75306001b576aa2c5b89ef3258926f3753a4c449e205c456201de9b5d4af58dc0d0f8a4714fc0d7c7eadbe35a516e5dddb3cbd9fabaadf373693eeca70ebb3ef074644982f79f4f5e9d7d1531e6269d955d834a82ed095eb86c6f0386f8960d272966f09db98b538d45f83242d3b0a29f6197ac9805a65b76746c2a38fe26e09c84ed0458a1c412bde5ee66fc7421f71a98555d9a65d3adbe31ea2779dbd0db002fb9adc9186dd02f14a895f20c3e20c42b3c6ab97795487b5add8c74d494a53b0048df1cfbefdcb6a1470292980dd60b2b1f107d0a2d1c468025c4db8147b2727c02f82c71a2771277c35264242912e8f0b0669bf05b276ac4ea9e8f73407619312482518b7a9bd7840e8ff9bef84e9a9de8a582471a3f80dd9eee96e7bade9e6a518e2cc59a93d91800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002aab1ce4f91ed99fd4092dea194d2751e2eae75a047bb8a09123f6e4f457f3a555e7f1e831ae036447a01397c509c84881dda25e0b1f8d39320d8efbf52c0593561c98c8d40e195083cf1a9ec1aa940e19c69666a54616c498b9a5e5505d8bbc09649a14f08926e7c05f6c646c30e8a89e7b4b146de11820611e309481e85e4a20322066c2f7dfb52305a9f6ae24dd5b521b5cdf8b7743a1714df684dbe7056d2d83a97efd2b69cbd481f86bbde03c490a69858e55ebf1eb435f552689842d05558f476824c0727511a2b98ea70398c4cd877e8a31c0984590cb7ad7cb3ada3185f9becd15cac45a9ea4fb1f4e702a3363e4e3bb0a9912ffe9a6c2bfb9f5727287bbdca1cc9183d831f00849eb417679f9a52d629b737fad08ad6cdddd8c5cc5cd1fb1a553da53acc0c0c107f1ae1689da4309f638a07e9f3eafc740ad895a429356042dda570a28ae0065817cd74d7eb79d712c7bb7f243f319edd4c38a94bb9e6f6cb210eda521e7ef4b3fdde51728f70fd44f335873874679722dc9c1e2777c44c9613d7c87abb6d36c40694bc139fbc60efe1f303839b0e2dcbc52a7dc7d182a9e5beb97b3ddcf59760cfca6b1917a075c1de6c0753e9cbe670df22654680000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000988d3730b8571eeab98fe86a6a7353ea48d34e8dea80597c00f57c4e9209b2b702850c915fcb64bfff846adbc423bb3ec298155607b4c93b8e32ee50ee42d05268a8a9a559b33bf3e7e47aa79e6a959a0a2b0d0f868ab7955d95bfcef3ffb8512522f86f9e0f3e7971a583cd3ad0601188fbcb03118f8e73b40c8ccb353c605e6e5a57794daea0570d804ec3e1dde3d7cf2e066018e8de9fc1d7383c690fa452b028b3a8a7eff01d501dcbbfba31c0faef48f2153471d710bcf3adbe6e5f93de225dc3368a5bd7701af3bfa55a1618b5cadc3f305a2edd541337955959609fbf70af1a99ca3f1c7b0beef5fe5b4742f5e3b0519de27d8f509e7c1ea3ef5f3285d606bed5453f9f2811d5f4ff526d9f0befb33ed144c2c9fa2fda5d6f36520df63fd7f7926f6f966fae948124a6bf1f558c93d869e7c235989affce5890bf6444fdd29863490cb3aef3dd596f6a0340e50d9da1cd114f7167c88ab54eb6a2c51ca2b6a666c5c6555076eaba145f187b8becdcea12541fb704b2b2bf56b33fd633c50b564d44626acf297ae06e1e75f9a7217af372b1e7dc6cc8b0da7e5aa97ba858bdee59e4c4ae641fff4f43cf2883ba68017d69d8ed4a48bd19c512cd1300ac00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e73ddbe215383b17870aee65f2b0fc6778da77d3865b9a1bcfdd9b48d7f093f30d4ac7715436a59b4dcba3659c3781300f38ef3c71ea4f865d0db2f1b601f1ec12eb244689231b0e9de95ed54afa954671349d79d6eb6b0bef390cd5e4bf08a75abe27370727540010f2baf6a1af18eb785bc4d0df645b14ea14273cbfb56a13e864a47dca6ce68a45dd5120087cf05a265232add8d7d0f3f3e2eff5b30aa4ad1bcd077a63743c2734ba581ba2c4c496520ad342c3cb5d3fa9045ba7c5191b2f26fea0abacd9d3d040333b986e6d905427b609f4a84830c9a0a65331439b4597550b9b6fb7977ceda1c6e0dc6b7e95cd5a2d90c682ff33f74a50582a38c3ad8cc9b6e36d868ded40cd14cd737e7737ff1132f73cd1290d0fef2c45026450bddbf85025bcd538c8004db3e38c1dea119ae68b8af775644f0f5bdb36096f0dd7d91ffe7cded4cb025844551a2bb4a043a574bf402127c97a5b0836b290e1923fa128762320d34f74ad82da3c7445d3ff4a934b004641f389c1d538655ef50eed394e43fc8436f555f2ef8f5be4af1f2e3f5c560763c5c31d2fdebfb7390bf4752209a97201accd0e05d70475b4d9d065a8749d51331873f6f6c7336eb79306cf7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023116a6d82b3c0abf5cd94499a70d083fc587c706825b1d0b0e1c1051a34de13d7706f0717486628cefb24cda0fa8479552be36892f75fa853a92b3308010721cdcb47fb86cf288b8ea453f96396c892436c696500f306eb86e089a91f398374cbc1aff87f6022f7caf313dadd0861e66b75b9a22b3409216628b3fb8d8e9178f7a9fe682d2c462bf6fd68fd20e403fc490d51c0e5982fd7532d7f1cd2ec3e75f798cf2889d930ae5fc00eed77e9e5058c78ea77144d30d7aacd1d154091dae3f7e92a52052311b07a3690be2c26698817b7d2d4187952d19b977d8dd27440e4d7fa1b0bbc4552e4f8c9eb0a74c24d459ccb5624f07a86734ae3100cd9a58abcd0542b22782cacb4ea15a24e5d09d27c9e090655830cf5da921f210106eee8909ccd303d106a9a4e9073f9285142b0c5aba92c79766b73e4f45b347f39ab60af04f49a80bd26c99bfa8baf80871e3b8348edcea3d7cdc48bc2460f3a3aa4bcb04da91c4b19cc186662bab0e309e5e089d2559776434711e418e028db6b0759cce32f26c5d9925f9112a27b9586646d27654b52fd61a85a2374ad117f4e24491affa3f6c63172f0cfe786824dcb997b9d9b85d234ad3687a19f78aae08b5bc3500000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000261f09ae253920c2d62a018ae1a999ec97b0636d20c4864749847c45392f9e1586675e9fcb5fa25b3aab87b0f96f01dbead1fd8a3818d951f819b7a2e0b139355527407e46d7e804fef3c3276267e83aa4cbff0636866641d2eb59d0e5bd174b5c1a01ecf0a3a585e77b8b80cd679dbbe45b68c1b8d5ea4eed1f46e56b62c3e98ad32684bae0ca02188671c9f8bc04d76261c7e56e6ff6fc0bf16e9b6b3b026cc9f14a4bfd528134458ced889421fc67198d7112029bfc5263fd4d0917171e5f5ac6857fbc9d16178338d1bc4ff142a15fc13526b9c5449a812bc8ad91a72f6239021d50d386ce582b675af6b87d24923d56a492ef8045243cde538a181806753cdd3ca637dd51c785438c889e198059217b7cf03b5a60b84cb0eeeb0a5d436694ff1ab43fa6f555e639a6ffdd67716fa121a2c1c28037e67e014655d9c97d7340e372b17e94ebb542d1a262bdc56a8fedf04dced3c5e3ab49b9b6d9042c7b310ee4db905178ace50b41f855fa68122a4abf671e3b281a8761401009d72389fa0b894950347db21196ce8969207833b1913553e98c7e193bbe35fd98c3e9af7ba72b098d543a125e3380bc171212079451dff23464fabf6e7a53855733b9f9b30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000858e8d868a2f7a54d50c8cc314d80218c225b08d94508aac09193769dcf8c6d37b067912e8216fa517d27da93145d7844ac0cb6634a0742f9ad68acf6cd6a4b0fd1a3f227cdf3b70ac031d5f2964d14a6cf61d464072de9ac680634123ef87836e0c3b7c75d143c09d91e0f08bb5a213e3aa9cd80c045da97003ed02483a95afee540b1ed540ffedb835f459e288c5ee02203ba35ca26ffbbbe067288f6052e9e295bbb16c9738d444fc21b3c6f5539cc914b2fe61a03cfeb82cd6e01013a2b0c54c1e6ec3158016f97077d55804bfa2cc5fbf19f7fe53d9fc7cd0ac0e3e4ea76da2085235d05e6a56c5d8b213f3e094244666ad242573ba0998cc4bc5b1eb5d8ca82ab4097f7eead304beddc72c5a636a2f67db66dd207bfbb2d30f64bed0ccfb86aec06e047f2930ab826bde257a82700029dbc85281e1e18f9899eda6294e14404198925462329b25c76e8b1b20ef239371e681487bd5c2266cb4ad3350586e62624d338d9641e7fa44cf429243f04a071b7f2e9c718734e7811e9e06a0ec281bfe68b854b95feb2970966f11474bd8cb6269f0baed21a9ddcbaa6f9218acf99e6f8577cce8fc58271d62f23a64f19f75ec114f01b46c964fa147a136778c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027a2ea4bef3f976c3735bc0f1df7e1febbada4dcbf46f154ee70abb73418c23ce3e2d98103e27ec613c4c1b8bc8f4e4c21053ab1e69764c456f3f8743e151707400e0f91984fd15ce7fb64033859df246afe9e6376c18d35ac6739c9aee7a26ff9fd47840c5b337e56e116168b16a92d522ec1b6f493d7a7ea7017f4f04e444fc98dd0b7fc248053571c05ca85f60bb2af1ea811cfe57cffa032000c49c7197b5720a5f6e515c631ac5870f699988d7e28b65693532f351c9ed7c5b551ac9e36dde1f1c1c006951d63ffda1387431e0e1af312f87624fff7c25610f73fbd1803b2c53a0330e0b79a25bd663dfef93ee0f16a24917ebe15b5ab9b8d2b478632f4128543d008d0b3179284e3262b414d500d7a442840337c82fc9119da0104dedfc01aaa5e7969683be3c4705e22c56bfad3a09b6f1050943522d79faa829b114b5206856e36b6b36afd83398199e1d772339203a791cb16904ec51381e16299a79f0a1607a240040d00167c3bee6e8e6c31e569561f5eb50479a967a3144827750c9c67d3feb4b4762b3df66dbd36c9214398dd2ec87645574e802034dab9180c4fae3ff513da57aa70a554e481c4fc577e39c3954cb9b03db096f8d2dc979fcb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f4f2ab59fa439cf2aaaf3ce3555224b049b66c6a37e47d035287c0fb52d11e67fc84e14cae0307a452eb783dcbd1189b1df35756a60a6bf29df96b2a4a67119ec69120f4bf703acba757848002cb2654d8055b5906e2b159d9cbd61c1ed441db20d96836868d279559ab58d399a4af4c54b7e87289d588cef90f3737151163581006d0b377d3a5b9d193c3bbea5f2a8df4285e7c3ad804b44dcc95f78c015dd08a7158464448fbffeb7882a11f1b104d812c5fb87c2397592ae6b4bcad4b4a4cf56f9390c8209f2d713c334495c00587645f30446b95709c3ae4007ce58fa5c9a1133654aadc78ff9ad20f95da0c4a5ee36a8e78c2f5b253c56aa2870b4d38858057d24d1e5e46b97f8e285fe53cb6a8e04b7c1ec9e80a87624da7f5c6c361e831790c1c9a5390b1e27f8dcba9486ab9d13cead4970ac128c941d85eae9fd80061f7b39d46c1b53bade5a3ce3b027e5b9496711b21f072065c10ed48b343a5e4b170deec7689dbd3b3c263f5b9c3fa7687684a4975131b6995e10d4af205e24f10c8f9178ecbfd15f68e44a316e65b3864c34ac1a69bdd1b2481629e01cb0dd571d4a1a1aa8723b1b99a1c9a9d766bfb3afceb834a755d528a5ce7bfeb5c8b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c76fd9afb0f5fd2e5a03366012646f39aae6e86f288a6497014abb636f041fd00430fe48b608261963f0537b0f2acc2bcd9e39d649c714c06d1d7e275a77fb03dd66a4f7d6d9a4fb7dc43e9da28a23f5df4fede06a155a47d94b3d756865eba72fdbd9c7de68f072a6f414aad73b23a33837afbbb1665f89e61a194c8e82616c9f122ff446f3bef8894d748e1d1920ca9de2d2469e748788ff6dd81e7462be3502d5e915e50a74b2a3ab1cce4cc550497050f2ddf5720588998e3cdba8a45942217c677921025176bde0223412d7c29ea12754fab797bb591e98b480153649d298c72e6405dcf791a96d86b54da41b982a96e71f70e6a96c7dc10da9029b458da5130878cf336d2d066b61444b14ae711ab1a3532004c9be7999a63e98f6854ed71fc5921650d06cf05d32652c667df4b5118e7248ad5a91309ee66b85e94db97ee1d10e44546bec2f0ecbf9a8629ccae2cde7aa4a89ba70cc1cff415b0c738926c525f55be9952a561385fa7928ef3c1f6140a5df4bdc7663b9b29719f9d091a1656a36d0e2316f877b72ebc622a3f119d9f5381c2e00841d29af312637a4a48952ab121566da2da5bb62f6a55249fc6085f5d242bdef8bd15d9b3da83da790000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000909f1ec6b776ca1eba882de26e2116caaf2dae6f75520d4e3c9008af2a665b2fdad7492bb62bfbbb06c3ae5f73f3fd1f5aedfd4873797c5287967f636e89f42833e1836a902c960b0def5662e776b3657865cdcad631a2b081d61132f3cf3994709417cf337564bf06c33a053c7f3d0bf89570eb808fe35f25ea71111668278c6e2ff50d886f93e92c0cba8b0223d692fe1b941b099e3da2f57fde0e9117ab71285febff0d5e7f0e870b78dc412f5aa42f59d888ccf31877d16dce911e9c90f6d52fc8947b622ef947848885e746d6533797139533cb52f7e01b6fb47e0335c45a1f40b4c937f355100782c465ee025932a2e7e7ea5ce86be67b23cf10c2124e8d8c60d12a7a56f18a44c3f5d2a84cb56673a2542cdc74bac2893ca97c7d7e8c960d7f7a1e7e5ca94d501fff3c3cbb43bf0cb5c71df089e8f3d5910b3dca08388db45a40da18e4e29eeaef7426bd984171c99a8ece309b2fb3ac936a317f0d8d6fef79aff2178c221436131eec04898e75e9e7f3a846f2d6df6c269073d8bce82d289d969b1b8481d353d96a46abd4be18b4b2f2d67af501616352b8c23c6f517cee77a2a5bb0771a41b3afcecabd1dbd5dcac9956e265d0371fb11089a67f7a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7995030b2a139b58e8ac56b0682989ec83d7e0a14a80a5b148754c79f440a969ccf05927b6646eddf2e3f2db2d23ef0012881b771637bded7339537e061de6564444b005221195a8876a5e3f741e944dc95461fbba15e2e78f6e38e033a7b2b6b1fc58057e13c0842befdcc4c884aa51d80d53100fc7cc57a321a772275992710a892b0a5285019885785e476204fa3673701d6f78ae294f44c6ea1848a90e39ef93eb3a2fdae2ff2ddcaa4bd306165a74e3b4031129dcc5a821d0219b1a5d5fc2d757b1c09934bfef3d29db01801e90c1f31885bae68795daa8988e6470607a02af1d019b92322c0117ef585e879112dfe79c784660c0ce7ad6e42d66b0176594690f1f10042c2bf3d3100c30de592831f8c90a88e62843cc24741878b2fc00868aff06db78e18f512b6f2513b8543c4379e96f280ee94c27cfcb0b8288b801966ad2464dcad88d08eeb0846cc4eb37625645e326a87339463816a5e235e4d693568d7532df80b93abed8fe06839fea21740225bad1af0dc3c11d2e01cc0c9a984c3e486d0b92b07e9a20c5b65d5816a92132b006fcdd298d9a73e56a4a93185c32f1b8a0a04711e960558e321daf2ffb37406267601ec1af3340736f43fb0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b6c6db5c31ce5fc01c9d387c2360dcee968b6626e31194c26e783fa1c43edf6198f3b42eb6e948b8a2dd837344cc19401333eb65124dab82ff4891907c815844bdc14e229a85eab5e3279deab78d8a6d4781b6ee1c26a2e127d700c39f0a1b4fdab6f8b71f5d03c80ed590d4520845885df694ff4c850f155d5cb801f4b5eba5562c83984e8734f84bcafc568fbf35fef6ab01d4644e84a9b4b4292e5f7e4cb85527cf27462b477697e826553a6beb205088e3d5915049abf4fd7b78e7b58e7875baa1df03235d026c8055976ac49e10d4b10db56079bc9f94876b7182caeff936f97135755f7cc35c4bb8666eb0ad1ecfaa389da705141d7e5dc1220e154de7db24e84435ca40ce26c32815bd99820651c9b1e9c642479ef3a49f20b69bb61d3ddc3cab39ed6ac16d94132434a69063de6f2cd88b849b35df39af0aa9b7b7901b4261c58687ed86af5c5aa4e866c3e95c80dd32834e618597bdf6a373dce7f5d9210a63e855b641e1f1b7b85c0803f6dee2aac8e1615fe921e95b22279424882be07d7e8479dfd8a1ede9bf0b9e88572bdfbf8ecb42d93e3d0dfa4f630942407c2ee40b723425059dff2e39f3a679791f39ad2c1387b960e2fe16e66199ca000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021d97f1db66a410c1c6f972680dee251c696dcdc5aac27ddd5b7efd2dbfd71542eb5dc33275960f66e682e641ea87470cade529649de41693401408449cf5b590e7f972d357f73b9d1d163cb7a0b9db52957a079e7ebfc1a24fab069a3c71588c51103d5b493096c4b4120c36cdec78667fabcb1eaecb24b30f8b0b41661c3d73a2e15ba8c0c37ba2a7c029db021c0546da08b6a78e05ce558ba37a005be68745e6c1bbd23c74aaf9a45bd2d1ffc537c7dbbcfc219f5abe71c04365dd2b008abe7083b00530a21e83dbdd3297c3ee35ebf87aecad966c407f815450026dc0e8c5563d89880af8d46a9a932108f164e8bfff554df620195d9bafae9007ea739116a5f110a2458a90d198320d26f03a4557ed2a3c2554a2a2649624dab530673adc4fa253afa337b37f7644cd1327e6363000526f0c6990d442d5ee765cebb9a9fc34fc974be102081695d653f0751742deb9b44753ac14b69e0a02ea0174c875c27a7f9f9394475e0ec2c48a70e7b80a41d960c477df6dcf3a2340fc1e8eb39eb7acfdb57e439d21f6ec423299709e883821c3a7fb2918808afa3e9506d9b2427496d272af87f16e9f4c40a0241823dcc5bf1a8f7567584e4a84fb6550523a46d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008bd6d8c0d081a5134b387a556524e5054ba33e007962e241fe2afca0039625bf00df057c2f45d918fd2aa933847f001607c793f210889aa8a2583533ac4c2f2bb3aafd41e0c4b0fe8879eba4b77a8617ecd992aa517cc5534547e28d50dde2451151902ac91056585239a22dd700c863d70538fb8e8338e98141b4617dc955afc4f16c0b09434e898e6eda197467a1ded324aa3274da4f1c6fd4596e441334b6fe5b11260277df86c026f7e0b6ee0d9b559f1f683d286412080e5ac8702aadd7b00efa9fd3c6ff49da7626a8765cb693bcf0158f1cdf6a8f9868c7768d729e79439e495568383aa94e2511e5fc632f49a2886c17b8c3f39d359e7d102a9cc38c3a5f560fca84d5b791869c19a88e1e9b2a09609102622d65ed896a71f61c12863c4cd20955fdc876e674a5f115c585b0e753b9060a015b6de62d3b0bb51cc72bdf748a935206e99201cb0713bad3671248575c13c89c86ad7aaf22182e6e2a4ddaebf5f13c9c7ac89de7c7628c966be8f3e0f16f93d93f9aa5843629ee7d5e3f403c50191cc045a2f599693386698765aea16084c5ac44cf7f4cf9e3492c4742fd0476a12ff2a84e229ab1a584dd3d8cba3859055bcc4378e23e9440a1e5cff300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dfc5316e80e692fb2a1ac764c9fe9bfcafaf9471ee305540e7e6eb6bbdd6d4b22bf29aa532f5109c406a25009b016100d306c192b8e1f10e3635375cd593706bd1ecc8a03dfbdd6cce1759831e47967cb7da78f136598504c1e522a94803c0aef4425a7a95993939b1331cca73c8b7afd008791c2f19fed796ddfe6eb6d296ed17d3e913b50e95e520d8647f7043eca2bba949ef407c6a8cffe4c82dddd42bfa3fa6e130014cee084100982bd5e84ae899a83817e68306a380948b5c882659bedb978d15d538660b9ea15b646f2a539b33f16d9d2de0ef06060b53d9f1fdfbdd36d5b8e363badbe7bbc9ff72f9bc2c59ca88151dc6b4feaf1201be8e02021d7115a7b2f47286cd23d890dfbb508f4917de7bef1e77fc8031fb31958ad4ba334941db7184b1c1de1bb2eba89493508f63d81796cce6079fbf20d9071c85099667ad046856ce6f9674f2138377b39140eb74d4ee4c398851e09fe69cb5c10dcb8aa0886686db78bc50d6b9d4e61dd23bb6d37529280ea4db15354014ae28f31c5e28866a6492f7277a0f66979954b6f536994fc8ee3d7a56b8a4c3a3e6db889bfbb55a0b9ba20c924a141c89f7c74d5627177cd18493eff3d2927e72c156f62530000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027e2eefb470b7f6e82302aa853282d0920ead92365f1d8d891b7d3401a8768d4d5573dfd4035a7a8d6c3606b4c076d84f5b617b57ca7e2dcd6ee24383a880d83ffc0efdf4010736c0bffb5988ae0509abaa61047aef4a7250be83cbc4e265b3b3ab193c915c6b1bb55ecd53a9c2d22c48257e3275bc5329052c5108bba53a3cb600e914d976365c87095ef758a5ec05fb72ea076c8214e3287dc0ca27f0334242929c60c326afa1998fe5f85c1d9af407baacded6c2121eb246fdd34c0c89288a416f2ca8a5a94fb776b28913f96438ac1cbec5ea80e1445e79c2754d78a6e6d251c2e6a5974865499438dafa9886c5dd43ee3736a418806b7c89996a78140573ee1e7289321da1f756b169b4ae0c0b9d8fdb2f200be0bde87156670c1cf9cd20fb419e8810f3a6d28d4cc196b9f8d9682d32c2039f5f66086e2c83c89798283d616ca9da3e1175da839c353e49161151ddc87e359c05d3a295655f7fc631205564c96bed18369673a89df7f47e1ee9304e24725723f7e5fb176145cb6a67ed4f1ee59e66830f296648ae5e322ed93a0ea06f19a091103a443b68ae62cac66dc793f87ad1746b42c6738f44fa0b6a7b5381c9cd46e027813e376c7a3b37fdbd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c7e0d2841714901047161512652bac80659c2f3b0879626c492160a868ef6fd1b81670823801cb61d06be8b1fd94e56877a9a647e1b5bf3a29f06dcf65ad1469a589a3a08b72d9f3d48d682b4bf9164a36d93622af26cd2b233b89d1de94d0c42070a91fc850d5e18bbb8fb18b620128240bca240c4d7a23a2a9d971cc4d96652d8178b93c441bcc04f9c05dbc97f99a7057ff24887a96ff24778005516c13428807f2a64131150d925e1d502ae11f7e2a6b95562cf0473e20a9cca330d717b5273208675f6406184433af312b1af1e71b37c5eafe540628a566e5e527f1a7062345431888b6c195e0012c9ef9dad37791c2596d4b4cf55297eaa3e74233b5216d2d8024e0c5635fef7ccef850b061baa04b995b045f3d23fcf479186126a0d9f3595dbeabf37a9ba27567156ca2a0aa55a26f57247d1e5a388003773844084bbec41ff148d958400e1a5179e0049ec0de7157f96e2a255690d42dc0e7a26f6f11b7c1f0aeb2008f70171e20f76dd3a5989793614cd3b032c7f00e9777791d96933e07e831e8785ce287a64ce9659c3582d85e4271fcc064ce6c5b037ad1814d215ff4fd61f0a710391de209d8c4a17b7e58348ac0f87cef088146bfafa3599000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028971035d324764c870b40b4b09b4633dbd3a2aa2f740cfe6b3d2762471773c32cc91c0e51e830e80363a84584a84377ccdae152aebe2113ce5fe9ffd5f4311fce1bdfa6386b067fe12c43c62f80ebf470eb17b6dce9a7d4d02fe68338c224971629af267acd4850497ec7149c7d6fa03774e3ebedc6cfd707a93e287620d59057fb1a4a8559b5491fbc82ce26a0d9f8ab55a01f5bd88a517e135dc7a7fd48a4ab3ab62911a5b0724fc7a859e6715fdab321d4a45d9c1df1c6408bf26e7dedc7757c7c0b2e4c7c943980f1581dc104f4ffd20392855ad4e378143e7393704d0870e4b5680f2cc148e2639d36cfb50373b5950844a6736c7c26ae4d3d347352cac807e92b61e6cb231335e352e16c185f533fb5c2711aa51f6069b3d69e1398d9146fce89b074ea785837fb5cd465466a85776708a41d193b1120676b54ff8521baf60e04b5401a202f226ae1181a44c9f114625a96e80eea038ceafd9484e4feb01b79afef00c88f99cd3a637e3fd9042b033296650ad5302f2e262dfc720be43370f55e94e4d4f9443649917a275b292c76c1cd31d1d49d342ecf3b2ea575d2b1d08c130dd1e1df57b9ade6f72d1101f74333c1362b2b103b39dd023c3f1ecb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b2f12c53d12d77a8e40debdeb26bfdbf8acd9c10db8ac6b5f0879453af4aea105528df0971389cf08210a31b6559d1d3e725b74217709c3ed19d85a1d8c7821cedd230408078f21f461ef9222fb20c591b62db271e6cb3cf90e74a3541e743b9a19c4876d4cdcf9b363d4b0d6a93c02805058db1b6e55070d4e5f1c7d79ee599f500442b032c11dbe2a4b66ea7b0ee040457bd41c87bd409f2efe932d843fce46f31c6d7552ea4fffe14cea98188e1138a8f95d3407030a2434ba0adaff5775c88beca8dc1648e3bdda067bb163014c8b98131681a50934f013b8f2fe96974101224670c90ea264e0d10366fe8345988cd039976ef0be009e806ded682aac43c4236348933df675421d5e8ebd8b72966c9140ad02acb1f79757f254891beac36545b4fc3c6a187e42680c01a7c66677d2f6c07014f512f9e57c19f20bae7932a912f4524d3ca85ad7aef372744dc3eb3d915a5b587497149f9f7aeb29c9e041868fe0868a6775bed92894f6b93f679e29d1a685d77551ba9fce5033e9eba2a313afa1eecd253a42d96da3c5c5da3275f84532825741f8df576a1138cc5f34dd35092cfc9535ac1c50517c15284b0c7c1cf38781ab07ad1c87a3ab0eb472fd1600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c75b59185d2767225a09197852602da38131122f06e02714f3a6c803ccb7901c560f81363d883d0e79ee5786b191012eecfdb8cf07f405a8a300a0cc8881cd555f6557a1bc622dd4748ed789e45c35a2b37ecd709f181b4154e45a1ec72ea8542e784e12b5010ed7c4e48ae9408b74f2c7b9bbbb436e295ee5e1ee58e030e647dcd1a6d3003955b8b6833c09e8da07d1d5cb8430f52015c3b15fb50a1f9174ece4b0649e45c418217c6ca34746a39085051c8aba66f94cb1d1b8c12d2c37d4bb782c715b8f621c13e152ef54b11f035169787f4e3b1d286397a3f0b8ebf6814864540fc17798d7f6ac1b5def91c87d5c344351d9637f8ebb85dba846f16e2f4ad3ec456468778bef0f6760df29db4e7e538919f17ac7ed802a585956f55d7e21e4e2211a39b651d2882d25cb82bd7e0276e54edcd5b7f28c13612bab1df2fb5ca64cbbc66405b84384c275668da058994bdfec4caad4bc6fadabdde0dfaeaf39b0dc5d1ac18fce74e4232c813ecf73f2140c98955d81ec80123147084854294c8740d009b870e90adfefd508a641419777bb79ba7569e4a50ff3830e12768c2f3516137316e5dca63535880855c94b214c140d6f66fd62fb2c07ee4830abb390000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000821834df3b1190fb430cb83f66de1816d98025d1e2e850a4721930536b447f119bc8300198e0359bc769804495b7496be35aa826a6981740f41ade2986c4b9c0e5419da581e94bcf29b4b31bd98f9e834e630c40cbbcf9d21c019b1fe3a7ba734d4a46307abe44f20809ad3a2d2e2b1056b9f296c08eaa355da97e2215e2cc74f7b87a3204a08082d08c3023d6781ade24a6a19101a43d1d76c487ccf07862caf113238d4a30f7d571282712e70243dc5d7a28ca65964db5c138b0047b071079b180dffba9be72f181c1c211751c721eeea4267676e9e590feac8fd178d2d573105ac3bb2ec6640d085a372257866885a555a299d368d24f18e23b68112d0207335bf8d36c3e83847388e5f376c629dfd6856e7253d5990812d0d21fa86d263be231db4c0bdc82cec613ebeb43c982fba27222955e8f92f1fca3a0280d9d1db98348b6783cccf3f85bcc1b1a40ec41642ec97846d16c0bab60790796ab73e478f334d75bb85e369339a3539fb7fa73feed9f660d3c0e025dd32d080606dda54f7b37c937802d97074f2a980084ca3a33838cfbaa47fff33923cb925952e2c7d9fc64c7b6e8921d2923de0c393ebbc79ea647260cc4c5eb18823f093251a8bab500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f3a0ca456abf93d8824468a68e90261da2e92b677b598246f6b8c1f7b073d451cb3e9f37a64be38ec6b59a8a627dadaa1e7dbc3e6f03d90d80cfb58817a598ed1ac541a64747466f6bbfbad71502d2c12390d3b1554247b4ef7fc8ac6bedeeaa56df6fb9b3909079677c8f824a1da484e88c8a0d4451c5d63ed92867307ab4cc1532f5c966517f71736a867be6e2d06f19dcd2b0a16f2369e93c2cb5353e0ae7b46bf0f6efacf7428f6329251700e4b9c08b6741ed6e166928cfe3d71ea9e3f53629b5d194747615c015c5db3e31cd657f3aaa372c19c32812275d4d5ed0b5080e630eaa405252805975f8d36f668f0f52f37ccf637e7e3a2f4750bf2b92753e40b1b1507f19628e6c517627664fcdc7aecf5438160657e2ee1575a2b848960a55efdb49ad9a12ebbbc4777b5e457b9a7ffc2e98b2fbb0f5dc5e6185435cecd9151186fefc9e10c1c9eda595bfc510638b2d10e05bccbd95b95e27c120369fe07f5773f104870bc7d6cdf94462c4ea556a123a69fe85c80a2f849781af8114c8eea318a8b5a55324224fbe6eea57f26409c12ed93f88d389ab7ef225197300eb7369c9cad97f30b3e8e576fc4d4888b07817c62383bfd4b577c3e813dcf9c26000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022c0ea2edae1b3219184b82f6192413974ac9fa8c7e2e59c49f4bd65448c29d27ec2c72ea48d184cc28bafee1044e4f04f97a524e8ea563557d01144629fb4065e9ac163144e3821552ebb35af367fd2f79912b6e0ddc6630ed3940ab6ee7d696a2d89fede7bdfc993c7e282342c376ba2de93b3ff60124142d3ff3099b3b40a6dfee53a89769fd7582feba7202c16a9066e8aeec8ebaaf7b9bdcca000eedb669c34b05b88d13b446f7eb1f1654a7f958b93347969da4bcbee83057d390a7b736843fa659a58f519ccc463fe524b6f0d9999259361ba55f550595da1e1969985d7447095cbf5d39c1203b32668ae17dc69b5d2bb948ae08f6ff77ca786725cba55b661f54fdae77ef2562fadad1a52e6f82cf289532ffa82070530cff60cbeb3f22f67a28af47fd8888f4ff7a1b734b14f551d913bfe756f3880ddc2a52c1d7b11dcd2cf2189340331e58001b1da9585bdcb0e9cc9532d99451cdbff9d699c71ba184a1ef7a85c99b090c45b17769a51ba960dccf02d1783dc002c4b9b04b3305609d257803e919b2d0b9ede74797f59069fd1c592b52de14c36aac29274358d881525140828b236a2217e55cfc8a15f91eee075fe96a8991234e4d2a93f433800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bec8374b38b18ba033ac8545685d5ea5a1d87daed606776f672830569851e14a95968d0a55b96e9c317db1e9ba7bc6446f66c5f05946997a314c5f91237b0d9deaaff695ae10fe305dbccc95f6a777efcb76d8b823ee76ac5b631f3c499de7d448780cd1f471c3d77f7889bdd5a3327e03f9fb6ba3acb9e9281866d2aa9b081785c1208232dcbd1f11d4907863e16ee8c9f52cca8a96d17b2d6872d5f9d6ced6a2ca4b02394d1c3118ed885bcc71e898db5d5af25ffb5bb0c9e69860602ccb5a4770f10ebc7bc725e140c368625874006521b5abc837c15ebe9ad00c1d8ebfdd68861ebddd337682172214079e5d19f588cdcb92d90fdd5c1818e385735f966d10d00b7c35a4313a2aea3fd8ea60f75b554f8554dd874ea06a7686bf64d05578792c9a4c7e5f3f01ba75af202066a77bf563f35221944f9514abdb9d2f54d9feabcbb69ba089fab8dda82d2e2fff98cad493524c208602b860a34327c7a503ae7b0f481365d673c464e04b00695ee6d37ae95e5b594edd861382576f08892163735374a6ada0c30a3e7a2eb95b95ebb6cd34ab256a9af494d4675abf23489b2bc1ba0bbb180618a121d4a27e54066fb03579c9b97c764fc092a3aac9c6406d00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0622815837acd26872fae3f8fdf2afe3b4e8271463b5ac135fb77f5a814c65d8060d08b425bcd4d994c1bc4615f071ecbdd488d8415e8b0d1826ea149a46b61c1db84a405bfe86b7db4e49873e90f102d6280212a9063614a125e40e1b4e1632c7c41678b45ad3de978c85c4e69dd2dcf5e9b0ad504d7c3410efa445740292ff32a66fcd1c09d1872e62d53bbad5e67e08c984d3f8d05abc56d976ffecc754c06c61e23866b4b2e71713d9369249543079ec91f581131d1ec91564372ceca926cdd66f60dba08f41f30fe1bbbea34a0db26e7bb1f5a585fbd290a2a3667168bef40166ba0dc33b30c486b8e352755a8e625e0ebeedec1562852048d73dbce48225883307713ee3402f13e5cbe84bd7367cfcf7b7c901a414ee715f48c0f388035c1cf34470a44b50ef7a7f463d0ff40d5f153bb511f51190effbffabd06ea7d241a0df26327a622ef7106f286c73adadf10588131309e041b16e40744c8f8a105541123c3ec15d404da28cb3acc11a9cbcff097f349267caa7e9006d395d46f746316a8fb601781786de2b7dc3aa514ff823df921d2e9009407afcf09a906023bba928e1832541a8bf79cfe73fb5820d1e1563bdee205f27e0efdef4050b52400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009fe3ca5a084a111d5421fc02cecac04ece603d773370c4a4ce1225921c96037fd103465b94f9b3ba882182b42e1b19984b914fac8e924db51589e4a1e72b79c913115c2aab32d9aaa6074f8a8e56b191decfee55207c8dc36f8ee10abf05d4eb14ed38687582dd3c3c973642e728be2a2e2e0dffa3b4dd778eeebd6d18c8d932be1800b1376d5fd04ab541f0dc2a697258dac651fcdc32389eb656730b49284939b353ba4128a53447233cbb6d90e064751664a276288a19d2e1a3e3b12c1d8ad15e501ec55b8f63ce3d6b50efe3e015866238a7110170e0442da3374823d8156b185e1c2a425d66362d4e87882d11544b52cde6672880c17f0bcfc5d5ae01daf6d6b3b461b9ebd4f76979a0f4a3bcaba10226b82255f59a89063a6e839fb73bdb3f9019faefb5c93f9d54864bd69143907cc020bfa0e6b94e70741fbd5beb75aa122474647bb809611b162f23ea7dd7c0fc30491398562a1e8ed7ada7000ad64fdb900970d27d191258c95c7b782262ee4ee2922fb08b1836cf5ec4d5bc100478eee4259bc983085a4dd54f77ccd730a1ad73b18a44260814e74c1387a27202bf70dd141927bbc61b35c8fdfe49dc048468b425c299e3656c24ed016efc0f3800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f692daeedff32487879792446de12410953cf776bab6dd0652c73e9d0b0d451162f7bff3717cb76c5210ec1c86ce2849461958dd657dbbfacacf2fe6752067ffe633d0a4b52115366935681b96c2974847029566a233366caee5f4155a516cc52a1a80d8fccc207c91d9d023b35701558e42c10ec54b29c97bac394d2edacaca415d8e08376c20907cb0b1fb6afaa08e9bd1e1033d276d781fce3cfa586825f6e1b780bc928a3784b2b8e0dd5ffa0846ef0759080302c3c1c540df5efcae10d030716e9b78467a465ca6d081ea8f67f7914710dc3bba36cb65e3bb43d0e9d0ddd36a8f4b10c3e2a02b091b58a48854e6e6d653041a8e3568d76f3512b970dfc2765c5fe031262ee9481355dd466877a309f380ce4da8ebff71c4ab035065bcd4237bf6639ddf696c95998aa528ba942f0d5f5f29b149a04af165373cb4bff9ba26f76e99c811bc5d7ef36b7a8f85672bdee8d03102aaf953ccc16dda8e6670a4569126d9c24504c5638ff7ff2d54eb0782bf245b2c88d779fc99940fc9dbc1b35d312cf3ff9005c4666dc645412c69567317ad362f7b20726455e2fdefa853ca355850a0ee167a0925fde7d6869ce462deb556dd3b75422e5dd97490993df2d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a380b11308f154a6e7716136c531f0ca681e44d10da5450fa799824f95047402987150e4ce6443d35b3eeb543d7b014af00a03c8112841fe45388553364116b7331453683686b32f5ba4bfeaa99ee8acdcdd00a8cf64dfdcca25a9361f6d5fc7de4bfa067fc8cc6fa6c1ccf28af62c09e6791db27c69423a938a7c8daf17da37de6e1463aadeec4dfb27ef0c1e95d4d31c4d34e9223c609c9c123e410b8d58498261d4fcf302e4d45051b15a7fa72e7baa74b2c51ab4b0bc9ac59b8f7140bf1c4b03a3fa429f619c3c86338bc0a579c9077fa209f731269c26dbb00c25167586d0d6c0082ce5413d0741531470b581f17d7d36bc55c2badbdf2e9ea9adaea63a8b76c726dac89bf6d03edd8feaad1c813a5b5d3e7029f74a300313c8b573139fb2196a2494ec739e90da7eb77008d0cffc9f8ec3ed350202664e51390e5722e7c2a3e58c4a75c2ba0944280084a3d5c3ef48fd0eed71e3e9d8a79e9c384e018683a5b16a73f9e80e7fb6374325b3300143a4af7f54b37c1a53186e5fbd9bfde9a83b3f1e562aa2861a95735198d9a80a3878515a7edb2bf31acdd1bea5b31e169cc5941334b31b3ff09a1adc89f3caf7271e393cdf5036e7804357e22c7d0e0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084b41c4983a4e4f702b5473d72e88859c4a503c733de3fc95b7a779ac2384bab6e559b09eb518459597e14cca378324a71c61a7126d38e7698fa59788ca5cff79b79eb42881e817f0242afdf64c4e415e0bac36dd88737a521c1efed84adf574ba8b352a69332d964fbc7bf2389cad7a56269995eba252a1e11edea87a393b0092b06d13b4ce9be4e8fe666b5932b97ff9df959d12816ab3cfdabe00949aa8574ebc03dc09a85d50f438fe5d11fc65fd4cd9179deea9751221b18fe4dcda13f2cd6c0b8d4afb56ba5405adab7180eea2ce8abfbc202c2f33c039c0d8766abe666d64bef32e502f4614e9329e3c8a5c0ac861f1e0da0ddfab2436c97a951e7acb3fd2fcb1e213e4120d16b2f55f339cfb6acd7cccb02364dae3cf2693e65fc415c41c63f22108b191cdc765829abed120f512db7eed76c4d4fd1b9966b21ba54969478e269301221fe3b9ee8ff79cf19e4fc2c2e93de7aa5e2c28efb93026a1cd7965363716e5bd85604499fafb10863c58ca63f4f7ad5fb3317181712218db04e9ecf6375cfa7b8de1a177f33e26c55f964e5d47aab4db20cf7de92d154121535ff731a6828bc49b7b8bf05ae5fa4f5b2fcdd68602cbe94c3d9cec38906a220e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa26631288931029dcc1944d1250a807ed35eecb2e9b27fb0b63614f9c4eff9d2f96799cbc3befde1032e7f76055cbaa7df2702eb7c3e8111bf3d7d9a5ee40bd90f25099551532babb20c1a5b40d9b11cab856319363909a45337fbfe8337ea4d83866f543864cb806f957acab7c488f3b8096377398be4000bbf7af7730e2128b83e6160d28b1706c71284fc4efcdd25a4e764b2c5dd9669754032b30ec4710f8e1b002a594ff571db0a4a7443dd367c6d7f9d5f341f466f2aef67b4e33f25076024bd2256fc5d25d00c8d4e78c60015e5b70f34036f851fdf75f0036509c20a83ebf2918885e7e4f733f68ffe7250de2174839171474020c383ef6ea43f0d56bdb8bfd7e1536ae75d2cea7507aa1800cc5b53cffe0ba32f76b8419324367d4daa5657a0cfe17d4731f10e543b76cf55bda8b91943e7eb74ad6cbc74baff2746dfd9ba7f8ba2f791528860bbd84d18be6c56f375436c8d0d78d90fbc5ab061f93195f7a65520ca0abc05879508ef3ede1c5b8329b17c6569f84a7f7dedf5328080a61304477bf100182ff4cb804828d7585fb972a835fa8b5890e5463ca20ea0767c5144eb46ce7790ccf6b066dbdb4111929d120bfe72a240bc5a0b5fff1d800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008bbed5c1158db6357300e21d8f66b7d308ab5e0c4cd26cdb1d52b59727a76311c03bddc59231b025b80b00060f023afed87099268157cd1dcc50edb9a079e38261b254f79bac1f5e275116ba2c6ade28f35b5e81cf11a3e92286897cf39c7374bb259368cd597a52a9bf5f17ef8cae6470438d66a9703c98a433a16ecf4e591c7b4b939fa59e5d476129b5683b72916173b4c3a5e08442734ebcaf049ff32d25b1a715bdd92eca3fa9288c9c626b9fddbfa2f9263b426b9ba0f045e198ac053dd223ddd7ad94413c8f22e84dab8fa7047fcdabd6391432ed66e456fb6de37430f4ab7dbad328c88bd39c3ceac5ca6c74262ddf08edac1b31005f46eabb7a866f3dc355ecccf41d39616237d8008e12404c1fd56a2fc4588e1a96859aca68680c3aff536d1345c0d6b1565c55c5462e585165f9df06d51668bd3d2b469fc943ab0c42ca2036205a717dc691f8fc9da6bc38f753ff078136da60c33941d8a1b89c52c67b3a1fdff0f67f07a8fdf0dbafc2695131f0919262cbe564b49d88bcee55332ae24352ee62230db294b8d73c2b7841340325f411c17a1556f754c85842c78bd9b8ac5eeea3f02a0b7dc63e42fd5f0631392537ac6ce1ee1c9adbcbf557160000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000175448a73be887af46d0bf474332e9cdcd4e39a8b71e480b29800f06f806d83174499553ff720c38f2a8a0c8ddea69949e75cf9630f9cb97d327a8367498952199a28a993fa62f42e3c1b3dfe5d6e43c692dfdce5e88625264d83e886211f81ae7cd4b0b62fcc3e107cb4a3829153def101b0b912fff22b353a5148f959feddb6ddd6515e990e42b8a9dc1a9eb58708f788c18d99cbfed0e8b6549e9ba3997ef2e0b2025c1163993d5da970a885642c41ecfeb5c5803dec6c6ac4254a1646f76032d9fc72376df2d93c2620933472f7c2a9d8f4fe21b2b43a4d4ac1c61f6fa19d32e7d68e479d8b39ce87b9d639df53789694204554182aa3ed0e4abbe71aaec464fd5891af0949fb31b3795c0223d8e907ace719cdda57c221bb6f487a4e2fe7719f364a1fa761dba198055b61576af6940a493014cabbfdaf0dcf3f1ffb2736d01401adba00a411584a45938613456f64b91f479ee69fe02d2698f0836e5c9b2ac60afc83c4745245d53df3fd02cff619195b5c757d7238a4c18005014acb390529895f9598c76f729e699ae0f3e42c1079a92c07bd0a08f05f25ea1534d3b94f39489ca4810428a5af6bed00b628cc290fe5a0f1076585517c84881bed93200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008df271293b74c964dc3f98eb6269620a37f2de7a072f9a596733037b03cfb918adc92d49102a37abe4806051b11ec435a162655f82770ff545c8dbe2a05ef0e2af487a87d814e0b53e9540794a5928249b6b6e3db1ed7bf25ee96d2c1277292cea40948e8e44f161610f520ea8d276763b6e8c776ca14b984efd25dedef8dbe68965054dec7922069cc899002825d610f926df87a7b478867ee013d501aaacf4a82d7cf00a5cf668f062b2f48a3ebad2312d10f8ccd15fb31ed977942d31b90f4d7c19d2fb733ad8056bdfc44f82a2e468c304c2875f4d1bba4f1f44b00e7d397ef417dea97169e5c303d52cf866dce06b90aa9e0dba86935044618480c641edf418adec1fe22aadced09896e01049f991267ac1fe7c3efa94a8ed2037c694dc5ab602a6372032dcddaad54a0980e3e31f2b64716fe69c150b96998605109bf0da53dcba62942cfbfc59d13c2eab5130a465b1e236932ff8e28d54587b660f3ad402c780dfb7ef1fa9ae6783c7811474adea5ce5e9d5110f10a1f6523b328faaf86193ea6b487bc04f01ebd1cbe86d7ee679b58aaaac8e1f329202719eac12a279aafeb281840ae825a9c42c424ab7e516825c0c64df415254e1c756bc3f151a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088df7919e3aad7e47d6c430d0a1003c851a52de36e8b12bab26717f22cca1f744ddff8cdfd205cba745092592fdb19515cee829f092e5b0fd8ff3cbd7ca1b1b25b3268ccd50abb746b83945c5037ba0947b45e4aab807cef8e03c9b95791b27eb18381b62c76884740f4e5de197864f4151d8ebb8c70eb31222effc62cf459509861db220fa05edbeb4b84bb9f0e06e509722e648f83e8e5717c9fd10e40fbc8e231b11886437d9dc4eb18b16101a1845f770d1f0a8c262749f9f32c3f9184db0a0014d6f433e10b72fb064b4372ee78b2d56467742376b3ba261e4868f04bb82d58d1a9cc7890b3395dbb8a54f8ae2a3943d88a65a2f2c00a43d9c7bd56daf8c23a1ac525f75ace302cfc61af4e3c6ee46c0befc4ec0f04dedf919794d695e90d63a1fffd52042ec163443f32718776cec6580a44321d2024c724560fd582717cb452188c0908b660c97d2837dd992c4fff1416769a92e4f4f3b6c5d497d8ec301038a96aa861df4844bab1202c9a0e40d02bc204cc81a2d8f8f7b7da4dced1ab06cb6d162bddd399d31feddafaacb59d521884ee9f42ed3401db15b35416de1ba09b8b44abcd4b750de856a67631d33e3b286f8b5ab97dfd04e2daafe72cef0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830f94f264e56f3245de5c07de8837033e593896475ba57789008e23b04f6b0c41ab89b6e549a795484011d42a7a74c08d4452c3f02c5652dac6f52afb73b65c2f98bb2d7782804ff9161e94f6f66cf164fd0c10e3a12d96e49ed9fe0546fc4f843dbc2531910aeb58fc61fbab3a4621f0b5ee417d1025964038eb9af5facf2f8aa0396a3f104d648cd23a91c00df52d442f38c0d48cd947185820217d495a5f784e700318ce2e42380d330acfdb47655964513263383248c7fbb467875bf50313050677ddaf353b18e44f09496127902a40381230bb288768e1f1fab58d4f5ec23cae0f91723d15618fd90368664b2d08b10525f328ed7a67797f0189209a7314d5553fe87042b11fd9accd3ce39458ce33d0c8022f99eb73052290a0072025d994f3f66bf347e5e1f1da205e93530c831c43701c0140070fa6353d14afd998dbb0929d59976b05d4c675707fd237933cda4fb4613002395fef621b17fc732a8fb3359be58fb475cff2664610d2bb315525038423340213d388b3c5bc54b3bad1ef3871c56420232fcbaed71a78da7c39d81ceb6d66e96b6a37b45b14b5ef596d47459f4c01681c4e7c4daf3d4fb31add767e756f79805562fb2fc7e3902faa000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090812ef23772c0a7401f41a58341c7c66aa7df7647d6a6f1c9bb1d5a62bc00d3a5ca03956228329a2fa73cdff59c9f70adc40adc2ccc231985922b3aa2b351e3cc8336dad1aa8a5f02cdfe26f699f73f8cf030f0bdf1ac4ce37866b9a9f4dbfe721d942218494769fa501f6a561e96a499bd9f5386402862a3d246d3f86c3a56c52cdb0fb387b6e99c95a1019d447114e9a3fae69b89bb59d40d771050dcec8b56633665fe1869f852a95dddd0364d5c55b8b29a9762153643f0c0073d6f89eda3df46a794462ac0307f789cd0e3ac51fe63078459fe1653c94dcd79fa9d305fe92e9705b2e06842978e249bee9e8867eaa69ee420d208e6da0d19d0f8a2a703eb7a530f2cbbfda2808387dd816b4d5079e4c1c78c3938ce7942c8fd32e955aea989f38f75ed87d0bc23c4c7c8bcce25353da7ae9b0b3625b3d26f899078c8c11b8337be203924b8db23861e9549f949b41d715d383b92dd3cdfcfe30d12d38719883fd694f4ba7f82cc9d468ef367c50c5b994b17e94cb4f90d62b6574d4d6f0821efc85a8509e8ce3de3b0fd3b3ed21a3eb6ef90130a2814d74d6480640a8754ac9078838a9a0d839aded029b3a08618f9a68a25bfb780f723a791995a3fe000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fec0ef5b78e52a369e0075a6f3818516c745787d9e61f6fb4aee363a591050bd5f6aec0eb69ad44b8ccb41dd38e47680766b492b40b23ed41bfc857e44531cc341bdfc5f0b9de1c47d936c09dd7967e2b8d1842ae1f5c2b99495dece0b2422f1e6b688814f1673c779e31e94f2053c0e89b4ea58e2d7e6f44b9b8c5d2082dcdf755b4cb464754e4f481ad0edc25dbe2b6200f5c257273ebcd803e89d18c11a0cf8cb8da0d80e310f5150c1d7448e976dc1660d1fbe32c30f54defd6653911eb0bf63b7ac5e9aedca123a811de4d7b7e830c5e40c4e4d1861428a77b1983359a5d82269269160b24a56ba190e34a2e574dd88a67f6549503156bf108d8cbce748f83b89ea381893abad99895dda651f627e6f582f2e486189706fb55fe9abcaa9bfd3726df02772e49f9aa4c392a4b151b96899f6c646a1efe109bfb20349b659bbca2d1eef0bd0d102fc6edcfc95812fe55f4485e31f6ffb9e68b3a326ffba39ed08a845b4e2f66d14ac28f2d2256fa1f808d2eaba658d81e5a74f2aabbe3424f399584beac63ae83b5b753dcfc9abb139838bdfe1797e57c87a5820ea9017182b98f2b3fdc9cfc1914c5a71ccbcb55f9ecfb3b4982c463dd712d7a2881489200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000193c79eee7468e2b9464633700a7af07ba4c7bfe11f9d00c657c473de6ee46826b24a485abbd6ef1cc154e5fedaaf305e2a6b40810f145bb11b5a3f53c89d642b098f7427502022cb399d1b018967fa222628f5aece1579b84ba18f199510d5d6a49ad80f9db121e2efb42d93f5e5451ad60e580f4e4a93d3a348b45bde288461ef148ee95312490128cf5f79293237e0958b6e0803e827baf844bf85a36cea9494332b9810aab8d2ac4188246e8b09a4316f9a6fad5a3701b71fd1dd62d9650d8c8b7e0931238e685cd6a1a15b79702de1597408c044bc8c4b5359998ccaedf5f6affac5493dd12722248787a699fda9839eeee3ec5d4a605a37f626e18f70b216f10446916f1f7abbeb6b4241f51875704df910c3b5effbdf5395eadd26f7b59720a6991b1a01107562f27553bcfc2b9aef9e553081aa1d5cf69ab4e3e8439345205e8f4d393ccc50b4ed9c07cc0ed43a8a657e049150681d17e1f64374c97fca07e052f774da5fd3e4be310d6072d0551996c72d82e196a4b9e0171ebd25b454308208a4a49745db1cdf308f240c16b9d8acb85be74c74014ba20f4824c753563230f79cc747e95a3b57fd413b6277000856dd145634710b9cc4e0fd34f40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8016daee8f84a495ffb49eb58e6d1dc2943942230fc62916d9e6c646b9da8102c8471411c18a2a004ff96b5aeec98c5485945c247bd4d67d4b8e76379b55b898e95c6343439cefd5c09b114941e575b586caf25f20f092e4be378e2b4495169e072639f0125f697cd69aef913b3439747c1fbf2363d006972e7ecfd923a0640be48711d092f49073712844f03b0a0647b45f6abeb217ca5c5e390704998186272f654911cec55f461f664fe52bab5f7afe140fef33a8e5b1b53af0aed7a1be62f253b3e881f3543b52d3a81b785b193260d9c7faae476a9ba6d60de541fb22c60b34204e36c94801e47c34fb57261fa2c731e60c8697aa0666ff80693b15c5d4bb11772befc0b80da6efdaff5b53081ea5b9f3853b0a601866422e3df72dff0dc3353cc30763e10646fcd33ae49ebbbf060767bdfe4e7956f4dbd806693bddf17920236be983abad62c804880f9cfe4b4a47471eec55a8ffa0a31cd6f5efd6fc370022da48591af161bda12e6ca81d8a2ba8486392c617b7cb8f20b1e04cc4aaa4d1d3434203aff3c3a1ed37e205b2d1c1fb6495a8cb4f038356b02efb3ce4ad2849991f0f77a36fc706165bdb2a21d07491db1019fce2f3a20abc416b8017000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008acd7ae4215bae68918c274d9370f63a8efe77b00fe1e457dfc2e9c8258f742bbf17dee903e1c2bfeac373c8dfd172844e04ca5f8ae92a063f2bc84ea7177648c91847ef20df24b78c27a26adb7904d1efc7e746baedb492409520c84d2bb44ebbcd45099ba2ccbddff7b395c2ec9487d9bc27f13f9e890ddcfadd8d5dfb9c1980743f56af66d24191ad6df85c90405abc171db91f8fb3c3c9fc40bea79340b49a4e9da961eaee0b0a1e4bf8ce9af24eaecc039709a6e51f1e8f5722fb75d5acabcd4f59d7e7938b33167cf98f4bd358700ee909162c273359a0ce282ca5194152a35256a9bc4eec8364778be8641d9319a69f400da2bcae489fb86037aa3a2f115e49f384b86c0af07892f4aec3d686e19c069409d6105c47f257f06d3ad5f615d25f037c82b6a029b49be9d0476e5d4bf07e3db31e4fadb9b1f1ebfc40e6bd8b0c65bf6300dcccba6d9e3d74902b37179a083dc0bc383cfe1af70b4d301fe0b38bbf60f0e094682a6c5f1792a69ad74f29b97d14e6d32c148b6182b11e2318a0d0e71395ece5297044af6bb016dcc9f8f1b3e09cff0b280b7941a381857aa0cea64eba05a47a021d8f9d958048de698c23dd2c5a4ec8a39a9aea58296b871100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ef775f42d686cbac44b708ca38dfe3de3db0b130fafbeb8bbc1b92285eff10ee74172567b475b525f710b45e50961b6b491d05a6d1fc63a73a3cbdc4c359d50e3edbecb0fc26abd96bcd16e2632c62106397efaef4ede81626eb02833d1820c8a2b72fb4ee07627155f3ea745628402127415a3dd718769f4b7fb8666dd075e43c7f09ff92afb15af3892cd6c5180ffcba53b88ca77f6db1a1eabe1d60aa464ff012f4d452971586b045c18b00f603b69827eaabb2470cb789f9618bae8f0a49c234efcdfe4c02fee97de4fdfe43eb74fdfcd56a61e238bff682bc26d438efbae809b0f4bfb5c1b48bacb08cff19d9ce6aac0ef9619535c1a1ddf8f0f466dad4524c3f2a958c2c8f590a02a5f87a6f957563c0ee93746c946d4272b6a4fd317635bc83126c1988c99c7b4116cd6ca321c3847afc58ffc5aec171b983d2d435e6ae184c08768771c733d45f662e92dcf873ee79f98763610c320fb570311570773b0e73db01e7f7661d5c76df98d801c5ecb9d385c68e15d50184fcacd8d112e9fa2794fdf55c43a674894f151ad4305e0f66245b88c5abbc569ecc2bc7b1243bbe74fbb3362989946c8d3b3f206ec3ac9220b6bbc619b6ae4c2c768c4076f3c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084e0a346424c9fae88922a62f650a85270b18c679b2a5f219e1fd1f0b1545add9aee0030fa5c9567ea9512176a78ff4f2a83de960fd0653b618df2866a8cd2530045513de6143bb1adc13bf2215dd2f90a40fc36919ebfc27e7d9c7a8ac502b0a3f6f9180a61e8dc9153e2fa11cf2d8aa9733f03dc15157da10f22aaca0ac0fcb5621e4c3c40ee2514c99f39113d8fee83286245466d7036a71917bf978d76bda4c7b1b037d6aba63b533dfdd968a31813a92e4f6a46ba40a2cea094c7622956b65b8b1251f662d844ad8bda3336b56d7b88bc9296666ee5397e20ab1ba75a05d0b9e6f7b7630540f926dca45de5a33762c40bb50c53f13ed2850bcffd3e3a980c52be14f2c7365559181a57b30d8feb1ad4a98ebb777ce8a535936952e551839fa4c9ee232712f7d6e1a2b2b9c3658a8528fcce4314a33de218bad39cecbc46c661c15ccb726e5d5ae6fc15ccd3194da757c6cf75e06207cdb9d3aa0516a71b7a124dce78be6e39a2c674020f99905f85d0810a5d338fb7efca30aac0f12893449a9ca2abe08314753b011174f559b78d3ea6d5bd0cade4fb68c5a19f1714d8f0b1050abd9b38237f58be16c3e1226423ac4ff02ba58cfc75794be26963803200000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48401fbab3816df7bd8a1f79210ca1690fcf1a6478023e9c0a575378baaac3c145d2117f67ca7d873a94a5a902d997e4a544448c746c9acd01deab49df5f91ed0d061297bbc1da0115114d8effd4717e84134b368b22f5dba1a551b92ca17af62dea0c51b9835827f02f25d42baaf5748cbf5afc503ff0e494c530fdd1f71974a0ba06ec585167b60f230d5251b1be5ac305503908ea0282de3277d95a5ac6d634d221a2f1d80ada13c7540c96c1db69fd07f671aeb6dae5adb8552ce08943f67760091d3a3e0732481351e1a881d75a5ef0b9fbd6b54ac0680d0eb552e58e1fbc002f19e3f965e34b730e07ff1671ac290d35021c7d10162ffa26bdb9297b0f20a9005ed5d8a710fdb6898ee814cd6d03fd133b2c49c2a2c42d98171b2208ecd5c7182131c545e56db63c1042877e01ce165af1aeb08980cbaaa479fd26731abd4f0aa8418c997268a2c3601747bcea6d169168c715918bd6fb81777f76a1b97e1316959053f9cdf60283dfe87866e356a573a500afef2ac7ec3da9ad64a560e04f2fb915d6a0e685e49849323201ad222894f0dd4563cdcb6f70a8130a117b0d0d01e92b283bcad47ed73fdf322ee515107bc3dda306983f4cbe576d3e01dc35aa1b8258ed49128dcacac1ce5c5b33135f882e118a5a2e59331a0fa8c33a9027ce0ca405adc8cd6c54215f8381ea904592e02c29eda5f47032f31e1b5f81402a472bc50e7589e97a6ee501294f316f26f581d6913725518b9093381cfb01aa70f314535a37f96f23a0d4a4b89f190ac9199e47efc2ccd5a75ab667207d921c21c4054e482e4daf6a91c4b1f1ab8f135c23d731272a369a33bdde11e8244fbf8cd918045bd81bd16550d572dbbadc0198d7ee47e1804b3f0b46aae9c19d17e7a0432b184689b5d20ab267f83f6244067eb2e00d5afbbfbf033b00f76dcd833601ad200f369cce08085c66221265e4bcfc9160b906fa9cc93da36bcc3a8383b5ac601e4d38a69165d5eace63de11285e389984f89c05de95eb145008d7b5d6c324c61d2a374fbdedd1023428d98b9d0fc22bfb81e460d9c72983ecaed8ddb8386eda1b334bd044f110f29dea4a2699dcee01a9ef1948e99e18dbcc934087f52b2dc72f1576c658dff8b7acfd041f6666a48b34ea69caca9696b00bc0efd9340047180c324e887b2f42a7c378e3b2d54a47feb3ab4dd94c083c063e3d268e54af00b20daf4a2862542cc0e30386c5e675c9f5a937bf88cd2c40faf487376dce1276a3037f921b8448ae995e4447b866bb27fc3e6d95a09bc5cfac4ba6a285458367f20c0d5be7bea6998317f28538f07c394672c265235996ee68b58ec13bd2fef3e527f33f63ef6cbae1d2d4de278178c35b75a6d4ccd13ef03203501f203d5a28a609bb9daf89c91f6e18bd25f1ed50936cd723827b317459d7fc9d0982bbdb3d01158c5743d57b080607f0e738e2a25ed6d031642553d6c00f29101ffe7fbe90cd0d597403e3748c6d54fcf4f6414b2cc6b9c1a605b16056507b12b88ec551fcb41f9bcf7d9bc9a85e6a44faf610f4adaf6df84b7d62971377e9cff3d89ac103222e71feef7ae73bdb290ccc5e029288aeede57876a5aca0bb205e3d7ca71c6398082fd4a5d9b6ac9024b95691c12b2a6d9189d13ab1dbd63ea1eee3ca9558aca52c6646ad716f4fd508ed6a9c216059282b7cebb8d826d2b397de47a7ba654650104d4a5c4f83d1e51aec7b9866eb2473fc6a11a7f82a882ed3bc6fbe2cae56650d6d08a8130cd1afdab725dc3b5b3e091ab3d53e3671d8b1c2f000b82fad417c0291023ad2ff6c6bfa35aad3fc7c406753d0c90a9ad153850680c390cfc90498179f801186f67e86a312cb6fa29be3a34573d54aca42bae52a0d1b81d020629c0605f1ac6f77a95792ec722c22d409ef7405a75f92740af2a720fd826dc4de7f19c6f2f5befa49048a7e5fc4af29360ff61ad36d0cb94c22788eb4a3bffac274295c0949f2c6be91a4d26a2a39f6d36feef0edf3514bb4d1aa24a71ec555bcc00f7f0e8613dfaced7c6951032ca37c971c88125f15be21901c6334872663efbd1228d093e63918ed99cfe15c235dbf4543f9a93b3fc73730f057ed7c03b900132d6716c8ad93a1f82c171327b380f178b9b2353a671c70cb6c24143cfdbcc6cb0d8ab03325bc3cda6d31fe5d7feacb6ec9db4fee5f877f1e724995d5555419090aacc005fe36c403be680f0a372636e1f64d3595e077fb05b4b3266bca8e01e60f8c8ea6e6e2736845ab47e3c043cc38ed8c58c47f2fda0ce541f899f41668c906b50951b33aacee885485e3477732ad615b99d7578791e22569a3be2f373fbd188bd9e6122861b5e483448a1d16ba9e841546d0e27104a72c7dccb481ab92f823a7c7f22080281451ee655b9131cc3650b5dc918f7d583ee5861e4a434ecec6060b6a5e256634d319f5f7a6d74cda2799b57dc051ea466bf7d92183acbef53e303d12385da13dfcb44c046f85b89924a47e483f40e42f9f0ecb005d3cfcabb6054c771448043979535a1292049ffb9b95eee8ca9734837770dec028f54b75cf2a2f04be9957a61e68b2679109b16072568b1fca202bc0a0b21ddc9a16e3b14323cbbc8d6d62d6997ea7419b1becbfaca254518597bcb17aff6d9d057d25668618abee04e1fb5c2aeb5f146bb13e2e5df8520325f84a084a0f4d1a8558bebc330c492faa20c5d74729312a29a22f71a005ebee24ac1a885d267a9499f38ebdf710b1249da55e1ee9590f4a2f5b9386e4865d0e7123acb01f41b4436194e7ed8a2ae46cc542509aa9445d936a2ebf6500a231e0196849ded027be72fdb5d8b09e129e2530ccdba069228d6854e4b6008f730d31b960d7b841628c20b477f4834b401ed954ea0767b0a7b796ba6ffae95b6ba08230cf46565bc1a0a007f67528050a061df5fca32fc491f9251391b242087ac0f0fe3084e9c098c080f20fafaf66a511f1332d19d87656e6595ff9ad8a11ad178466819ae5b5b854b88b7f8923fd4d0f1f011a5ad67b15c8e203ab16374c6ec69b4af8b73ec92a55c03959ab74e1fd13e1ceec8ea9abc130b46a2944bb5c3f66184ac9049d3602b3fc5530505454ef1b36bd4eed5d92e33e3a74d03187800f4c707d379e41d8e5a6ac78ed50bb235f16e9649cd89895f4317ee3ad99ced1e4c028ab8d2e04a5fa2543e73389cd2ac8131fed55438242184ea35e41c42eda0567f4e52af1bfee12c4367b459106c0ef232a703fc5d7b56655c184b49cc3b8b67cceb4f3610e5d5e5a0db53b39fed2bd0e8a18aed17ca1db7c744a6888adf072cdfe905fb2ad28db464258d3374b37722508def30f176cf4cc1ab57bef2f4a111d4097e011f566da5a2f22a8534c65b42657d15e5b583125fcbe4ac45e4f8083b1c39114835fb57ed827bb487fdf8ffb007127f316877b12594a289e0bb5117500291416ca625a2a582fe0aacf934b610bc69c38fdf8eb3960a2c42d2d91289f1ebe901cf8f02ca1c74474b6f049a381070905a4c3fd403368c5c177560f61e1c26cf6d29c415aba99531ed24aa4ebab138e64868fb008ba58f208bbe5b2ebe19e205940dd372e33848967f901e5864f278a64caae239b7ff64644957fb6f27163aed88053b2435d0fcb47b8ef13e37411594cc14c4ec6aa85552da99f6f48b7428a931fb6d79175817d3e1e1c417ea5291d135008aa8f8a91c5bcf9ed798d69b1227cea196c7d7165f6dbee9a9cb4440af820c20909ce1207356cab3350e5e0b2d5e80b7c1c19e6983578919e8b51ce2c4c8ff88defc86cdaba3a595b876839426d81cf10399a0bc11228d7dd0eff641fddc6135202eb5b20a09f6608932da0576e7235e50b4de169ccc46cbefbe8261683fbffbf56ced02ecf2b36423d73d673f6939b1d6e4ce54d0b2b46e1212b4a2719577e33828590501bcc65de66df3ea9db947c46c8a7dd8f96f1cc913df9510273b5bd37db6e64ada92e8916e228a7e88115e1b7b6b44b34492860060220c306614b512c9fa8ab7a3faec3cb9e7e67a281661df5daf0c4539f9c063980300a2f9a6f7b00078b004c814a02349692eb01c81431843f0b5af26cb7b914e79d612900021b172c424d0ec3fc7583fb35b72abef52c4ba6ccaf2798be89df17e0900e90334fb0981af7872f5da3176c289285aae9491d791515c21d93e322ebd4fc1fab8f377ef8cd3bc14c2ea28af82b96e446a45905d87cbd7f607f1cb9b59f070685f0afcf08ae9471343da7f7082be94f9b050e99f9b4c1dcd974386c9172b111d102ccbc47e56397df4ebabd00252093fc987f453e3e3de52e8cc73f7927c510906d943d57b231d42f8c6a424e8ace706e3aff3d0ebd11a1ba18371eea755f05db952c4eccea47d88f38b1520a40c134da7206dfe128db21a055ac631efac22e83f6d5b55cd1759a4f97f4ab52b1240d9d4e89c12e6f93793ce59a20f4ddbe234d5e4a8666e68cca47ccc0b60fce513dc5a664d51a3a5e7760ccdb83a5d9a11778b30f5e677b01ea1a70a461cdb14b48ed9bd3a96112cbb1def5ab822a1b23015a929e406a8709e5827fe99b5cd945364dcd64f5a2bab8c78205966eb0554d06a04f2e6e2b5a0326cce7d89fc8ca50cd06cc02f98bce2c41cea6bf6e7e112a1b24c0a2f52e2275b1dc4b495adc70abab94f89196972ba452ab7a9de9568b2c175e65fc711c57447c66be46eda486c14f95ff062aaad969c2c973526d8abf280f311b27364320b98c6078b0ec1a1063fdd6cb9eacaa64492c4924e032ac809f10bbb28d88908e61eb961dd96beda2cc085a4f2f59d77e283630db8dd7d5fba519c0336416ba0b9677c8cb2084b30cb2c60e3a8b9b9bf1f948288b0ae09c3d0407291922cbd33e0aa68fa761b833b0bbf2dfdde4faa6e9c03efd93dfd6899b6a2b36928bb7cd57ea158220e40dfd0afe15877acdcea929fe829bbc5645ddc9b31116a18aa19e2edb8ce0d1818499ad3224e7614e4ab3ff7023c8a8a1eadc6c6a195621ae7f258f858a8dde7ce94da4cc7b848f2118d6ab6390e67b54b521c53425394f5beeaecf50a8e101810746dcf8cc16a38bc0f99d086abf40b1853b30bc156f73a7be0cc4f5755ffea88c9dc7f3d13ebc7bd93c869181f700463ace4fdd25685c4cfc8d0caa18113819f20f17837b71c31e3a5d902b8eb43ca9e0053cb30b2c67f7810ff1cd41fd23e5afe2ae6c8573ba6aad59430ec7434021431ec6132d000b1f53d1996d2fdae36b588b00fb18eb0db719c18c6535687fe5e6dca3990c9fee480d3457503e4893f2571d07c9c23bbf742f2b55bd285d94f350aeaa2410b3e13bd42b0bb6034fc7268adc85efc2c933191b9f6edab6befe5cf834af5117bf9ecec9d83b8550d04a9ec13d905050df7bb2be7da5b564e25f2323c8f11f2bec5e60b6beaf5d6eadc0610132d82b1490bebb4b952e6bb0f204aeaf6b5f35010b6a4fe4d2952716a75058d19006de1881e3da57e8c9d5a0bb24694bb762cb112b980faa61dbe8b600d0dacecceb5a865b14a2a26504453863d4b561f381580ace09218541441e876f3ff1446388827ae38ddec9638628d2623165347a6d9810e8ea97d3e8bc49149c95bf4454fb2b742fb34784c3dd6de947855e3d87ff42153278538449c8f30c5a8b9cb8c4a90de57485b901ea7c90f618c1397a39e05f2be4ac94b22977d9252dd74b5fe76932c283c07f89cc046daf0d697d4af851752dd4f4a5f07694667f81a2c5d52421a32ec405212157558f0a6016dc0e2ff043003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000007118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000070d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000070a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000070b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000000729a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000007141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000000725e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000000712978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000072daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000007189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000071159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000000705ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000000705c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000000714d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000000703db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000072ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000071213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000071ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000000714fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000072b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000007305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000007280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000007223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000000717a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000000708858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000072618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000070f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000070e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000007172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000070b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000000705bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000007137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000072e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000072297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000072608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000000718373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000070422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000007204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000070afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000071998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000000728d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000071da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000000721d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000070ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000070e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000007107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000072f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000000709726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000000724f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000000703c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000071fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000007205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000000725110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000007283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000000721cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000007094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000070c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000071f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000072421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000071fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000071bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000007304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe500000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000008100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810400008100000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018d3727a12b2041d6d6281b674837bd99464b5cb416b3c6d35f7a8c8b51edd06d3e82f17de1ddc952296bef6336d66cca15500df6fe12aaf64c924df2155c8ae2e25ce2807086f6c2ed6e604b8869fa742f4e98fce4043ea9adac0216366c7061024fc1a4779831d4562b21af9244e4ad98562b2947959c1410f6fe608e09368f3959759fc08343de06203a387e71e64074a2940d03dcf8a54d9c8e1842fe94c4d059624981f8aeec5c4d138f8a28c139279d9ddf939baf82a0896c8255c3283c46303f42e2b64d763532cac8cb5befb29a4003e38084705701ae855eeece5bb20b8c01e2b7295c2704b6bcd024bd31e0a8b87cb5e9a6e39a53cab77dac438c97f7e28902efcdc5b1e4fcabfde8a1846351f83b3c1c576a4f07425bb9dda28c4cc2d6b2e976dbb6e00fcdbc9c627d06e80b7d06dacbc81d573d807c06731fd9513634eda4288c9bd7de91a8806ad544e84905afcb6a45585dc5d5b0d74459baed412580433c6bb4c39a866a0ed6848394f4af1ef7c2588a5619c485478f1a69007f380cd008f5ab92e86a7c360810678b3e7f13fdd3ecef362e4a8297f493073f454a1b7468920b9bf0040f307d99fba5c9f4dde1c85b64a47bbd292bb3e93bb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003053c233b3ce9508071632bb487e9e074d98252f4c167ea6c3cca353d0f5303ae398ea57d4fd31ae61e5255795987af2a348dd655b2c3ef450e3d2714970afa8b7e229d358a1b2edb783976036b3ddb1f68cd4126d9fe9422ce2656197b08c0a7c4c3192bb4a0ac77c7ec074a4aa3cceedd32c3f2f399b104d26e9c23fb9f44d8ba28f1a7d1cbcb109ae74d8fc43943f6bbb5e8e523cf94f5906183cb682efce45ab1f5b5cf7bd6c20d52d4126ca419d817f93a7b1134ae0b8491a7c5039ddc5999cf6f35c3c37db0868178b71a783afb5bd749b92b66a506c8eae7b3d7ba7fb16c688b65189b2413c5bb473b46ef54280b69c995e521cbe945139c191cb728da70c87f731a113b5779fd04e1404160d0d1b292e5a0ebfd966bd24b6514df8158ed176349754d140d5065957bd0d45de8c328d8a0fe004337c198ca1c2c90adbc68f653ed70df74909a08d3394a9d28de777ce550684a77dd85c2d2aecf1e1d675b05bd2d12e3ce6e77d62aac55d2efd8e10bbf08ee02ce7fc3df8920f5041151cd2961d7b72469eaae0826d00c7ca9947733f3c764e4ad43f89d81c059395ee1d6978d427c78a173e03918c52842465541bd525a92b6c406d31f797abc79cf2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096404bcfc5c2dc482df44e34efee2d5f832b22175df36871dfe0b7f4ef876ae673147c18af19e5e8083dd696af8afbf499014b2142e657f33fc51c3d3c41b413b7539e7f31953c8b1f02e01acab7e2b39b27186a9225d62697d5d8a51284a8b5bd6e82bc1cd8653564612101a4f30ade7c51ff423bd4b2a14b07bbb6b5a644b3a1d48afa9800c91bc00bf20348da5fb38b61867bdc83766f3efd0eb642fa2ac561201408c33e230593193ee064909cfb4d69484ff06661e86d8b4e16fe4e005421f8b910b3bd7f0781b6de18e860ce4be933dd267a786cc500acb2562b6f4150bfabf63141a77c17e8e64e6ffca15856348dbf15a674bbdf4309901efb4917c354012fc99f07f2dfe7eb5f4224c94b88f19498ca1c34ab6cd4fd26418f4646ca5464ff5ee28b5955a3912dcb6973a5f8f0820d6607dac8949fa860cbbc27ef7551f9b89eebfe44ecf7ce1d86cde73add917661438c4149e638e22dc45070522e276fc444f10591be015d9849d2798f66badb912f35b9c194124bdc5af539f25704f6c0a08f033a0c533dc56762cb1b3d7f01e931c20a1f98f90b1af8d7d09e2e5ad0859a4a5534f7cd55705f92b07ee3c26446fb5f53a4d8a7b38105b4a3faa500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bf0c023a4a2f0c638c4156694bc4851160503bfa745b9948b074bad16e08b39b7a21876842cd40b33f4b9840e0dc92d1d476ed53687180d0808b28fe226010f4e5c79b623312c75ad8129a5052dbb5f72ad2f1574c955a473c6903efc4ddca06723950fd75782d7b26a7d209c1d9f15556e9c175cebaaa6c863046185b2e919e3e2ffaff223fca0137a9ec1a4cc9c44e78d9e7104c46dbae1ad2c8ada144f261ca50dbc971d74a381120a8c04de3179b74fe08e1344479558d0204eea1f4d5290ea9f7d10e8a0ed0a69b50edf236c0f01166b0f68ef58648d919eae813983255c4bbbc5472007c00bea680789d1974a287b52f23dff132809aa8200bccab211d81d0fa1f3049625ec8f674968942449b4bffd5bf22a1414c3abfa30af3c63090592fdb14f446f3b3e9f321f7d2a49159cc042eb59ec92fc089fe86720b653ff04f084697d72411f86e8a66aa1087a6f8890a53bc795e7e695df2306f1255d68c53a21bffd811f6e3abab55628ad1c888c6c6657d0d1d27593966a87e1f3639ded2b47a30f7878bb1d4e375fe2ba1e185ded5f46dd82ea9a9c08966d2a0b05ca9bacdc865c839e777129fac75db55ac0530f4a718f2d11a80f3d5c1236a9419c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025ee730a90f59d40c38dcfc37693b53c726cd03457a3968fcb4c419acdf905f79e4d627b25e3c0dd4dca85f39273cbda9886fbe7704bdec29db732eb4c4947db62c03edeb015265cadeae4d2e3f91c3f8ef33da1742b9ecd20807321e5ac16f697d18a444a3dbe7ff47afb085e274982eaee867e935d1126020f0003c9acbc48615ea855762bb5529794912d0066880240bffe6f8711ba5574b0d2272d37a8f78351f9f67ae3c623eea64c09558cbc5348a0dfd5b1a62fafe7d9457a9b2c5ab8f244572b6b17e19069743b33c12a02d6322c3c8f5583d0f334a12ad48277aa599825758215d42b68866ef544835cca48efd142d3f825dc8f283879a1156807fe56eca752e0b578ec784c02ef7a4cc590ddeb934c71cb3c04f353cc6e7d0ebdd36a30b9017cdb6f40befea5c44f4afb0dfb6c1eb4ee9c2216b2a76aafc36ff427655fdc2fde259afb3500dfafce5a015560e2b01275a8d2a39901bdc29bde020850d974fafa65ba7e8b56ffde1987c138972f00a6f80436e4332c9f0cfe8470f8c9977f61acf3041c65060132c16a072808c4a87f48f4b5e3e0cb7dc935b2931d12de49c24c469436bd57743d83f51eb9443ab6ad923d9fe54ef194e2f01b3fb3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024d131742e2d922cacd335311bf7220ebd59a3b9bb094f16668edcd59ec39d30cd85f8ca6dba1ed39541263aca6dd649ed22d5c5e176792a0538f04169047a5685a5d3d7f43a5f4bbf5d94aeba0696e757d564ebcf69012c26b3db8c4d4706ea88a41a77a6cfb0cd53e514e4438b770ac972d59be0a8c08c20372de63b4907226fba88717c27eeb5748304ee89e62a5eedd13264f91e5af6dba406132ef17eac0c7c197f59b25f7d681fa84f0560928b9176854e9ca2fda3dd51a8984cc247be96df11f6ca57b0ba28513d8c487aa67aef21a80da50bbaa153c48619e553a2d4d001640bedc2ba74bef0c8d183bc3e913e84143c71309df7c9874480a31f943251fc7a70ce12c6ffd5906d46345a6d8bb240fc2721badd81698c892b397d66011d83212e0ab78344740adb591bf8c8223495194994a853e567fe69404738705eac2f52653ef2f59c34d4145b095f286ecab214d177ec1b4cf688110d7cef678e51cdf44bc3587c5096e86b27d9aa762bc1011a031cb2fa9a9ef4e5953b7a8c47f3fbb11ea7529114bbe8844c0831184345f502902f27367e2c599cd86ddda470e7a79c22b491d6ad5fff8ec801ca08b70ccb7950146c63a4fdc64c96a74bf8220000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6066c5dff3f7f16c913548670f898a4224acb498ae84cf75edb7e4997c6ebc442ddfbb41f5d8e0354072c2a6762362e3ea3e5d66021d0b885d94843890a2d5430be0094a9bf2da66efe376e3b841cfa95d24c64244282572273b91addf0de48cd56a039c23b212c5bf8307ee5facd513a8811896fce8455f71bc406fca7cb581e5ab654463cf1f07c875d254a2933c4b24719fcaab4d27e34f02535ac156bf2aaa54ca27e3cb34444869c5fa3d26cb33bebab28b2da310d30590a18201363e40c17dcf4177d75f21800b561b8017fafd3fecda907bfd6619d575b0b9e80f53e4e4b87651aa95070459f6838451d6eaf6122dd9e3bbd78b8c8c5cb29135e7edb9281afbc98648cda88d6d5e126197e2ce5c70fc4405134efc9032516ae5eed6fb811196b325023491086bbca3a27c520d829f3ec915fb2943043ea214ab69d25b2a8a9bba693691ac30975d1fd9b2ae7e11d5b4f3a67c541753197034928b4b94c1a563a355886860500b8e3fdb6c412772a1b6c44d84c54533c580d312b81bf154af7c781c65d97078f8ce7b9e3fae0d8eb98cbd983df0a3b8cc14010416a5cee6663dc0bf1e2231ead5f9537b43845036776fdc2cf1808bb33624a280e2f230000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041b3f8c30e5b50cc2c3b91e17df2f2c25421ffb85a7f8275fab42d46f0cdc1aa09e6d20b3e75ae2399034b091dfd605331593d8e83131b7c46c9c9fa6aa5f7737ab65263eb2c6433729310a452335daa70ed696b06ab49d5e744d9c9c721a8cd56fcec4ac7cd23b39ffc73de983a841a9e3974c1a8284e0eef279a30a33b8bd10c838e6fefbf0a0a90ae429ebf624417d881de6e2fff646f56ab0762ac1a0eee381eef1a4abc79ac9961e29adef01de39848226c23f85623760c058c568632a9effb78cc9e0d6fb7c9e6fac0b4c242db4ef02ca205e8f303d4b8078756612aaea64c065c13b18179239c240ebcd9c5cd79ab33ea77f3774bacc90f259223fe4d19126db0e6b9297b444cf4e39cede7415842e4c319cb28fde9a70110f424276d81b5d5d8bc056e63c853fd1ce7ca2f8614cf0a8ff2a78bf13d2747c5e4b2671e957190012a9877252770e5dae493b746df1a8aa28baf65d9888b85969dc478e6812101cf4660197f3626ac93b2f85a7485b95e26140c46cef29869ff26c4f1222299d62f08b3e1f6fef9e5d5e43c6e9c19201f4c4f63edbdd216472ca3aa99892d2e347079f73eeda4adbcaf2ac9ad9654fa190603647398bbab1659c0bbf9300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae1148035b24c74e01cb22a98ea2b4936dd75cc315cc76431c410e450f470fb950d220253929f4858dd94c9409e5236c52639282af801fcd5281a572340c010267b621d420e5b32244f10d3c929be31be6ddaa79d663e7047b0ba2e7d75e8608f0b69ee510ce207c00c89d64150e7d750152591ff8709fbe00cac325fb53242c6e62659010cd6f43fffb8834a8b4cced08941ac8834bac9da045c03a7db216e8f1f5c20c4e904ea1474500701d83bff95f930c71c17f0e6daa408cf7fe0d412c3a52a6e70d4b423f97ade7f926625738938c4426c7ec53d13db2adc5380ed130dc7ab344223481de00919f2c3821ee91052888693fda51e572d148bd494f082b3b92dd04320b77dd0e5e718846403868966c7b403fc1b09ad9fe7c1f37173a5a5aeafe71d351973c8d85fd06137cbc19a4f35d84f895a8cb6fb7c0ecc51146b8bb844635223b4de2ea36d27322a9dab67a69299152e8ad97aed310c3fcce6553e9edeb10c78e3cda63d171a1d2e46c7981706c008e504e5d3c07fd15f48a4631983b0e8eac32d59c257340c272de3b2ff8264c799c757e0fc88c83fc71fa39f1775fb39b0480095496cb82efad254334d2b48ac41d5dca4188f009e9976e0ad00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009db55d1beda4b29d64280de57683541381a187bbecbcbbf7bcca7cca647ecd336157f0c8cbe7ff2de4962fa6e2619081e0af78d888c8f9bbfaa25652d25924de5b2d332cb6e3a132a5d4a86dcef42b932072b7d0ab70fef208857ebd30994a40f9e95081ac313266dabeae200a09c5456d67c6d88478dc54ebd306d96a4516ab9ff8ed3d51e9746664301f57363a9f5780cdde3de0c7066ba506547d1811228b07784eb1969d2f7aa555cbf07e83192ebb95aaeea1f1d7c8ca73c745f6845024f4de1230632bececa9875df3a272ae2146a2b9da5aa76ca3d51f861aac05a43720ece34c6507ed5360cbf5cb2c5e70853af2fff39dd7c5b60f09f919cdf8d517298f9682032abfc0d7689d7e9d6e08bcba720817bf209d8f5cd9f3e025ad7bb6a044f9e6db7c3102a2eb9e01988c7b836ec1af711155601df6eed9cab7bba1ab653520555f1f0dd9621af22f717f8e0417ffa5915cbf062b63c5a5abece3c996f8700b2764b782af27c24a334a6acb5754b542a2c5f0d8c6bfdea356ca8be537717b3ee878393ecc9f9d47b1b291769b8326770e74d0ae5eb65b4f90bd6cfde908da1dc09add2a3e20b2f65049e2658a9c76b34e644abb5dd12bf3455a597bd500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d6357c9215e4f8a1991e3856863f9e3fef870c00563f3a78f9c4b814f23e258323de21ca7456c8ed2d3f386ef91c5d68af885b8ad8c7b08b83c78da7697f67007e92095811568411b35c842a8563750c5a18c82e5f6629ea48196ae25d1a8382bc9e7ee5d9a9bc73bc03e4abf2b8e7768a4351f556e59f6ecbc08a85611ceb82c72131b1df82b323dd9186e436dcdfc5fef36b3db13312060da03bfe3dfb356ae97768973ee6841bb09bcd4f894e253191d50d0bd6f005941d826eb5e8d964e76139a0a6be4293bd64b459c93c2b068ce64c32b70c7c65d3f6599e3bb276a176ac67905892fa95ef8d0ff1fe10c887e9d0a2d420a4fe685a3d824af8ea49d912136f135edebed3dd1efaf5b4fcc115f685a7b598ebf29e1a9695283ff8c419e1782d39439d867ed5691867bdc5c67523e3a254cb162dd98febffd0dd1b34009cceeba012527b26764a9c8b3202ec2769f337dd9e3ec372d700279613ca96c595007c5ff0feedfa4e15b2a1a6ca7fa811986fc00768cc149b18fb2e42dc1029c16806b2a482e1f4469a8128d6334a7b5d050ef5196c9180afb955db0473bd4bcc1e6477083f7761983d7349ace0d7b3d54d30737213e97b28e418ff89da595d300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008418331f3765283dddcff43014bb1d65edf0a8a955a056fdab4e72a529adb7f2cd43e44ae4fd660d85224ff0e605601488807a6a866ba9f7f555d973783768574b6bb6cb095d4493a0539b9ea06e261e835f126f64448adff722c709a0bd86e205c4e858ef237d7bcade6a17fdc3d8e09ce91aa3fce636394aa637a1f2c51f37ef11d8f83f8c90e3130daaaf78e99aa7d27dff5d09fb6aee1840ae13dc0d2aa675634b1042cb10d2a722d56b10d5bf9879d599569f24e83be499c5e8245ddaba59c85e39252ce2f275c012eb08227c828e99e9d30c93b94b03688bf9e6364590684632719984d1479f7bee05f2389d4b388a358cc2fe82f427268c7cb79bed426bdfb62ab3ce068eae9860f8e7ce492f11a3dbb637df4b1130bf9794b7b4c05b74ccd3944f688888d8b2eed6848350c1da753bd8fd848ec448144fc575b0a7494970ad960791c22783deb82c70093261edf7109adad5f906a711caf8958e831e0efa6f790cfd8de8d6a3bf632fc663430482ce1dff49ba5d19f84b0119309b24afe86230ca3f7dcd55698a6a0819e7d4e27dd5546fd2ca0ffa23f619af4f3f3c3b530f1ddcf8201b68048fff7ff049ca86ba5af294da7902713b27a6938063bf00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000177bfc37a8dc4a3bf025ea041d442e1471d3eec8a1bf96cf9a1cbbd477c3e737a34a0ee7996a0aa6bfe72779ac77820b0134a2ab27ed37c47d10f2f7d597af900feb166475815433ded83be574da6a4b327bae9e7525a2b679cf015f5ba94763088663ad89bff1d67f34b441c736f2748cdfa359a7bdbeb151360b95898e6c61d6d13489342adcf3b594210ceec6a383fa236dfae8e61ba2afbfbaca7434846c37bb1fb7f9236507a420e4c06dfb3d400040d7c3dc05137b1f521c1ec0476ae8db468baeb5b39a5b79b9fc2777b90d7e4b46e87d0557da95dbffae1ca4246a72551b64c81db72e1e5f6dd0d0821e874a74937628ee6026ac94f6b08056da34f71a20bd4aecccee8687bafb7b5e06f4dd57897c681ca302f6c3cc67f6e853a008b006033099c12f532a56dde5228405b49a4839835fee00c7507799f6d7f35e9a7db17c6d3570ab9f381e5b92e57e6793969e3c8bc92b7b4f4167b22e8f734276bc52a03ab38e123cef0660d06984eb5505610b04224eb0397b4c87448aba253ab1e1461154146179c24a63f84aaa2989236db81b9f52acb4b23738de5c0bb1d48918287b532e86e6e8eea5f2012e05aee3f2894840e9b4fd755a0cd683fa95a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a61b590b60009cf60f3a0060cad83d4905b9bc68a88e9ccedba459b7835f3ebb86b25a65a3edc31735d0557f1f480578e05fbe6fe0e4591be41824d127ab6c04ca63ec6cf3757d42d20b60e4d76c0cf05717f8671dc0651f53324de020468c55df1a4469b3769bb16d2bbac242af51ae58dd6f7f6104b3c3f17b475c3ae5198353d60ad6ae64d0ed25d92a75bda515e748fd4f5e7c1b2bb21e85b7c7735b78bdff6706239398a4246b4bc2b245e695669962b1259e3216ee3d50a3bef7f4c6100f5f5a9cf625a93a783741031ee0fa3970bf4ec0ec608f26b893a96fd2ab9f29e6431b4671286ffe93ff8e16b4c5c3234811000f12a4696f7675a397f6ee79da9004124fa3192ee10737cd710536cfe67d66e98ce1710290e9edea5763e1e0a08f5537270df747132e0f1da5ca860399bc5bc98b5194fdae94a0399e81e85726aa20e1b0fe221960ba7d77f971b2cc0153814a24cbe63e92ef07dfe3bdc3a09de20971bd67612a9139d3d1335109aad34fe73ea9e8063ff23d9c45c413079ce37214014ee64bcba3c4792aaa1df1f1193ac305d3a4634d2f93c26272593c0afe4ab08984c2414008299607c9ef2c9eaa3c12dd5fce9792fe6ecd7cb784a36ce90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000834563281e120bb1a2bfcad7739e0d5dd23a816e05efeb6c5f49a531914e0b045bd293434a3a2bd761d7a7d3907c0960f81fa4efd019ba267b40d0167b3107aebf623bcbb0e1593522f171cb495d39e0c0e9c45d263d78f201d9e0c9e5dc5f6b3a0b969f0c604a6f7ed23caf2ee3ef0c4ca5601505812142d3de6fb4df513f55ea19934355463bab319399f036a00f8e6e1099a3f906195ee7d1470830d9d665f57d106434d782cfe0be3bce02a8d2ccf338a30a94194f6870a66f92f2c480366ba203f06160c1fefa2a54af0226adabc889b60cb46397df4ba26b79e3c7971d6ebe0394334cf755529fd580087e27e0bc47747c97f1e693fed79ab9741675e8241d5709b481206a27441081bdd001b09c46d998d31a6d1cd2b6162964dc2cffe5c08c0a3737d0999721f0cd20e46fae44f7398607980537e44e8d169f2d27836d0d8f85262be2c05c11b2fd41f5fc4f94d8baa5ccdff2fe301c9befc889e9b39a503498bd15794a86ad480a111cc7ac28a01b35426f4af1170c14283ca00c3feae45300a19f97f6a39cc0979e0e79dd3273c245f59dbbf377bc979fa74f7a2b386ad30c8f53346319462ac6dd69177b453be5f754b6c8c056f2144fc1749f4c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001993e17cde97010447e12afd3200088bd766963c6c1c02514407a6123ce93a1f528b2df53dc132b83f1f83ed2bfa0fc341cb514e6a75b2d86dc81ae447e729ad707f171604cbce18643a69dfe2fb3b389e36f2e58a50c9817c5d105b5bc8410fbbb567c939d12cb815c018cff0d463601622b1c4c60105c336b1435574c0849f4990fd37d11af69e21a3968c509b9c15df67abc3509a51faa21ba0701d6b7ac192c7566c1dd078fb9938cfde20952623f3bf38f59046e86e4f97f9dc2a12bada61d2adae4caaa5c7e2e8120275a3d7272992f5a041101ba57c98bbda863112b0531cd5f95843c18c8d22d98549d3cfe1184324dd9f2c55f1ab6991b07405fb22bac03a3ac955d8e16ad70d76eac93b91d8b5979725f25e41f4c0a0c8cd8614e096a54db892fb53f7cc6006d3ed11956062e52b7a36c176f78a9798f3d0aaaf125a1ac56c602e84748a58d872a23b593a55031dcf0c9b3cd787d7725c6095d7c1e9af2a890318f08d52921789679e6303c7078471a727364312b1ebcf647288029e7297e34472b4729d4dbafdaa451e76ef2c497c1971f58c0d43f56e09ff8c93a6a9d6fd42a0af30a3c91176be1287a10c5ec15db91d24fd469a3a797254b629000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026fa95d4f956752bb4b17494de4b81b066c24939f1cde4035d50dfd84c0bc3bb921ffc0df16be51fb4868b844e42fbc35b041613724fc74ff69729717f86daf21e0881975de17d7128c00191e88b1537d6e0520ccb74d620db534ff680c272e2dc682b9e358ae9056dd5c357f0965cc1882b4d893e969ac3264c2400993808d24e4b03cb75a3c1892fc30585bd9cfd9a7bd0a5f7f137f79f4927a643e313a27073e37017a2067160462c012f420f4653d07b41f67a09d95eff6355ed03ada8b34a2ddb32bcf13faca42f574f1d9dba5ec769a2dc4cbf2b7ddd1289b44bf58f9a8e853a96b1f25f56929af3e0dfdbba72b7c35fbdcd34fbb06341b5eaddd7b86dd6eea6e728990c70214f79765591795fb96faf6730c25d561e656dd82b972a50cdd43ec703d8d79235287a149e724d36130e2fb8f2474808d863a927509850469e04e3f4864302accea107f973a997cbdaf6cda493234b5d58a3e36690ad9fb0ce655bf1cef61d4819a7ab92b87ca470fb87b0335900defae17e1c477a1a865617714319905fa92345628e809299d523b79406d1e0d5c99931a025599c52d762982279b23ec7184ff1918923cad15ec005f37aba0f30bf1a4cedce9e6d1cd9290000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000158e91891f27d2d337b0819e309f6877988a899a126877d647f7a22ed9ee39bb92c078ce7a2afb2d1eca8ec38cf657a5f9b37fa607fba48aaedd3205de9aa69787de9843dfc8a1a4fb626ffda9cf8e71626e3b22322009336d37f696f93851a809f88ba77d912eeb36e7245c0724e144bf50bb0e39d0c768d0849cb8fee24f70e34302a5c8e78976b5522873bc2aa8a5a6a0375260a71a9440ba4676703f07056e15921d3fbc098b284055437aab3a64bd0e72a06056b1d60ab50beb3476f3f35cdc9e00465e67ba6245adf45582b356a2b6ef6537ada0470a42cf84c2dcdca3ddfc6aa4a34adf70dc02de0d626660a5a6438bd215d73473d74fac8737693986a1bdfd48b3d829cdc918d38001f4b0e8701c33011c841e30631cbd16394ecb627f27010fbc547b98c230bda0e337ff8648f1d3d072e2025633861af8baded166cf7bb713f99a12348b2e5fabf24de4aa0321f2100899ffcd6c4854ca10b52c8a0813476ad06a43893df499c0ffac2fbf6fb6aa10c3ffb28644a5916211a0462ec1f877f801e5028243609f9a83dff2a9a86d11ed12e89068a455db2e79ae71310f3b0d9d6e72145f7497bebbbe0c6eeca785073ec95f1537321d27a3c72852cc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001769b09a3d8e02b7f17cab9a76d19ab1eece71228905961005f94585081a9e38f85d4d0ba2df921fe97197459fe8d63611196f4534e9a1842d90936eb4c4f81fd4478e7d3963b2864423fef1df49ca1231fb0de605c36809cfe087224d2f7d2088febe997da69b4b2a1d0bf71f72dc3e33abbb1187b6fba003078da39b8c2bb8045287f8d4984b070cc0fa9be9a5396d3cdc0a0d89f7426c0de5a30dd8e14565b04a14b477abeb79a252161e8d4cd0a82291b52916dc6c5d661aceb77564c2a603dc9f91e8a30f85e166c739c99aa2a66606e0a1632ce7e80719241138eca5caa2777b496b51d529f9006c2df38369533d969a5e43535b1d3a7e880ca070e2232759bf00cf73fc97756f24660d1ab2e735cefb127d7f9c9729c87879dcac207794a90a99e6435c89304c2ed424200b6ff8621daeaf50cc36e9673a9bac8ca8c4c9fabd786b49b20f8b5b5c360c867c3904428bcfcb60d3833eb0879526e3492724bc7677b26aff630e12674e1aa844efad72e85a296c6bfc70328a69c0420d3484dbc92a834dbf5d01f1b71e53a34c6a0332debc28cc34c8c0ec976677eb92235d90fb902bf0328e6730dc31b85c904c885c2b50f57d889672162a30056783e1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006d06de2fabc6a50ef88c96ef7d1d974b7579704348cfd173ee1c0b0ecc50aaa68a5095ee994c5a9df72a395c98f97bb1096bf5cda8ec81399a802aa931e71664f5506ad5931cbc4c9a240f4c57ae2d0e4ec5a82c53726f0dd1c60d3db71525290000341809e3fbfc11dfea4b7a93f6b501b3be0d6a3cde87135e1c31f88c14c8d1adea4e3a33079c1e7f9f67c5e5d124a39f30072eb7dc760655a65c0f39949bd94bec310d9e8be124318b21cb3e785a45084269bd7033601f300b5525f78bcdab2110e4b29352ed6d9e4e24b2d8701ca81b34d18660a33c68992559e5b889bffd15ba6cacd6a0f658f9ca6fd7df6a4c439db9f3c73754bf7a28f3949846064d21f075054c3ef461d13fe23dd64541e10f7a3acbb47f2825d7e5e67b91f0486d6861d6cf0e4ace671eb3abbf5b13eede0295b1ac0402fba5e29f04c2299b3aee40b3dc267a7b95a13f538d4428020ae30ad1fbca19a614e829646db76ab9a0babef6fc008187ca180db8b97ec83a4aeaed7d11443e4319d195006cb13bb4066f3d61fadb8771e3d7f128f7fa38da005f60d7efebf40621ac65bfe2abecec910aa0b685b8c3a5888533fbe886f8153bec640d91844306499a2c3d1e751831d6b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cb67d6bde6338a1ae1bd228ca830944144f6284808030bba8ce62637fbd8e0bc79f0767a30133415b6038e9e900ce87aa88228bbc608739c3185b58d071893dbb5d352d6ba8e0bfe0e6ec98dfc2b67287cfcb6796dde358cd0a046007e7474117705bf339fc3871ea678fc67dbc2771578f7d73ee9bea5028dc3399890d74d187bd6739b76b59bf715bf31053618b53dcc77745734c858e34b017d4fda72d7bc72b3dab3708f23e62f90c0c5e11c0f309e7a25c8886aa99026e4a1f4cfafaaf6d98c4adccd835cc791e2e17a64f74d94a39224f319772626f7cd8f9a0b43231845f85752b96f28c2876ff156463caa2c591f4be5d8175f295b56360ac0b42b9d6e1bd75d9e0a5e49c2e2d62f0af015e72f465bd82ded32ad58ee7d4f2f997e474a71b2ad5e9d15accdec692afb8c42ed122386ec647d9fa7a8a3b1e421be9f6dd0850466eba269421ddb2eac0dfa3e5c06d9dfca0cfa396bd4b9f66e63d3fe233c74f464a9c3d64cee786abf4cea9a7641e798fe88040550ce13d8eb464ec4c771a84ec2a8deb36d9af33d6a79f2d9521da5b853e997b45a8dcbf3db5bcef85c460935c342d834a9ab3896b51f3041c6dd73d02045065ca17f10c98a4944919000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088506c3a619bcbcb06d6cb898a7a5565fbfc2e768bd7b1e69e37524078b5abbceab8b3380f3891a91b6109a264428675eb504766b17ec30464f0ebdef9d83ae4543255283460668289f765fe85f821bfbad4b89b9b06dab4d1deefa42409d4d6562dad8d9aba6ab0fa9b904297115ee18f4fd9faae673fac5ea240884860a93d11556da6c913c8e9c7450ad97bc2d5d4514b066208675c04b0bdefc45be768a5de26a9b54626760aa00c44ef3923037ead165f86d8e577916d5039e5c130e89486c793637ed57848dd2bac05efd8cfbdc5e3399bab33775fac17ab6afaa209695c8a6c08f1be0018a4c6eb2d3fa4ec46467194e6bd5fa3934ec8def26a19cff7f0abba3f913d9f8da7b45b9a3aa628f85ae93c217f204b6de94ac63bebd7cac58076e8f483f2408cd168789c7159c66396d5567b628cb5338d70f6a8a06ffd4c6206de8a7969aeaf06ef2bc906aaa1187318e50d0e9801f0580a81f02ab483fd326d9b10a82fe3d6e9a02758321e44cd843c92779218b974aa764bc83a864ec873ea153f3f465687ccfcd145c7d29c8510ca36c3f660d85cf0076fc50858125338707e62d875a8b7599e620384975ecf5c0bbc9f5f614c13ba0cec1c233ad49700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cb17edbf0dbbaac7be719a076ce01203b0ddbd5eaa1f903e096a8ff43b63216b3280d7d7f2938b0b3dd02f4b2bb4add2e9218beabbf3ede2c6ab9c9ead5379f6b21768358b79b08f38728ccb1833cab28278d1a0f6a40cbaf306d9dcb39e86c7158b61889fcd2f9e4bccb1460498275e773b8623a37304fafcf37121eb8e3b8b2a14d2497e9d1cbd072fb13906dd4bcb3db5569cc98e8698e20f1f26b96eafcbb39310cc40aaf1fcb612592ed85c088db077d013f235186e8e7da9ce2b2b8d8e2f43bbb8835480e2a2fcb235d9ed6dd74453d2d31ce6f59756717284c2eda169d62b5c5adde71e7159490dcc64b7123718ace718fc9e8be9c4211f10ade24792e0db43acbda5e822c0a506ab113d25edfd24a9d305e10fbb8ab31c8bf57efbc68950a6f8a7409e1502a81db882c2061e212cf55dc6534d0f36ed6aa26aadb37d7b397487021ef3d9658b44ef307b7fb448c2de99a029ae286bf2c6bd1c2195ed5a2acc46a2c7d6f4639b7e225666a6444e1b3e5fa10cd85e9f14e389f00c5f90c9f624791e520d49444fac151ac9d2fd7ae4cdbbce30e487a5702ffd3788433c0ebfbfac70dba97f849644d0f710674bb824e50801f2b1974f27be434fc71e30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000836f832f9e0478ccd7212e4e353bb7a34b11e024159b272ca764f05985864f1886179b20b51645c8566a04b5e8f102caed2632e73633fe448c321cd6f47ce409997ace8ef813c36366bd85889a6b1d584a1d046bfd6b2151d63a699bec51c094111d01607bb601ac520527390fe5249485100776d1765b30410c5f7e57739a37efc6b39f95785b331291b38edfeafcb28b14cb6ca1bd229ada94998922d1ecd4021db7da9f38f8c2ecbb718c79e0e21db1ede56e9615c8bed34823063bc18d701f0c27c9350c73fe7471b2706f7ed84ab83827c1225109f3446f67b6fe441bca0fbe4c25bd15acf468627b48e779b5ba7a0c60b0086b51b4852abd062fb80c4852f3d06a3145686c77b333e6ec4f7b7e7fa618050cab88733936eb4721180f0acedfeb57a4c62fcadd7c9d26793e29f1a2b9ebcbfbb9bacdc092db77bce5d3084eb0778abb11c703d83a4aefcaf92471a8a886af132daf49b1aa8d0d1fb12c923097be206fda4bc4ed454b6ed096897d70a5317f48ad046948d26cb824c8bee3a60f9e3c5c7145c9410cf96f4f000ea191d1b001d9925b4d0e678bf98e1f82e6ce541c0834e6c62a58fc50e81c9d8e6896fec64d2d5acd05d6ca5413337c0f63000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083ded8feca45549028e074513fbbd857cc1570ed33760a2c366bf22d5c3900f107492f50bfea883eee9c44db4bb919d6baeeb1bac20e6e725e5e9313f358058b3c7e3ce7fb40972245c2331998b6e2655923211f921d9a677114bf7c4fde5877e34dde84760031f0888328a8bcf2b508664959912720299de012eb54f00f5ff9852f4ac0ff44f8d5c049b0674867352db081bce269c6524d57b1f56b3d99f31e8237d0b41e71f11d83717d659979b219e3b457a49f8654ee412085adcbc65ab46d074de25ce48d17da49153c099c3c4b482055db816e2914ce7323bf8b934e4a0dd5f7f9f96cd8463584946104c1354a1de00288587b2be741c812b8d66f2897f7678e8a630f980334a3798d7d91eac3c72a8c44f17fe69828069f15914a972b633d56b3b7a9edb3a848fe007f1acfebf2beda65eb818725ca35294556e2089647682fa57d1d71d5e3b64fa2628bb5ce090f366cb03242fdacbe907410ad5559b39b4400e1a7d9a1172c4ef8354e5c4fb27e6f5bd3dc00afda15d36c3d707b0919148bc0b4e0fe8e5d55b5d17bab636683db69c99f87f2e6d4220f6ba4d82be2db5d8c0ba1dcfd44d2cc0726c179c6902f95cbdfc7a45018d7cb3c4bb3e72e1800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b0ce4da7d4fc852919b21f4b9344ccd59f8ebd12cda3e4c8ad183bdeb326968c8bbd38446a42442996079e4b30e3ab015bd4cbada8aee0fe6307864e6fd18868198f694f8527034d618e08d035d1ab66acee9329a3628b86d23964f97af70894e7bf4a7ce528fe6b36fafe4e48b91b63cb12b49ee3391e15c3b5265689cac9ee3b54288ff527aa20d2c3ad52a827ce1e336522f3cbf70c63d2091b58c3beab6d2604934cba51b4c7a2718acdd455af2b3d99e2964f45b2149b579472706d6b94f7d5865c8b10267774ac61ddf9448ac6766d4e7748521a69b4ad1030051d95a20fb2b66627e44d40ce60c36d5fb3b6b25e8c724f3a7594bd56089e0f73f9f72262c3fbf20cb37cf71c903fc5272339794946397be86ca78250cf9cac8f803cdc84d488601eec57f95833575c7e802d2e7dcfddb3443a6afc871efe9ebf24c0c8e4238af0e4f8e80530eb9094aa5258143a86676f7e40222ee42e57f1e1f0e213bafca3ab54de80cea1bbaea2badb71d9a751a812215b9549259b8cb333c5cbf66758b7e60a28b46b6b15df8fccae3b29bcc92f00e5a6c9240b81e1091f6c48320bad9681b55a462993db66f5c1e9e8564dc90cc170ff4941da56ace485671100000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3e73c405df485b9e8e0d5b53c91a0cff10dc97d82914af196acbee9c8c6459dd0cbb5c1ad27dad6d191b437e86bb382c0ff54d9d0f4a7d5dc4f9234e57c115423f1f76bfba0c110cde9591ed86aa12ace9b4bcbbc794593680b6296db56142a7030862efafa5a1a7ccdb8ae1658a569d7180a6d125f55363a020804cbc5b88f294ed8f2bd58dc3e65b27d4bc41d773cea726a639b3b0c1edd0d2596988a217eb9bed9e7b0b30d0a87a457a616ea0f7cb0c802b5423cca86e17ef23bf2bef764acbddee93d7eff383a462ad3f729abb5285a61e9e9c78c7634416dd9f98f3708989538a42bf8edf07d954d732828390079b794b8217338f1815a406df526d897779b03c153cf2f7a02c6628977fbdc8cd3f9d8306ec3f24d72339404aa2a485314f8950198e0f7dfc93dc5bf5f0ac902d805ad8c7014f8f30e0739dd6a9810ba2740c836806931aca69513425cfbcb8197abd41b2036412e6b523c85498a44a21a4daebf62a02b3febc3bdd12027156a16772d79b88d676f5dc812fe1a2bff85e71027cc0f68f2a4a1f303cb01d4ab85c2f8d07edd12b6c9e81397779381551209bd74f0481028eaca466893fe6046df8b20739ff92ff6eaba3139ee1baae95700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000faab10d4b30f11b79fb46d4cafce9784fd01c473f06744568452974c9dbec8959a67d68341ecca65b4aaf4b541b7f5c95f55f4e39f26f47971c7d00dbdb34f143ecf0dbb280649f7cfd0421fe547290dea82aa0b487d123ca2cbb728cba65bb58d2d216a97755de9ad7042e4e515975253e06787e7342284f368a167c53f96b8e151bea2a26cc034f313ddf6ca048804a74409ee50df40a50b5aedeb074d862e9e3ffbb4481004c5449d6cf2c75a0b6ccc29ab83d278a171e2d60d199070e182a1442765ddeff4f9bf0fc5671774ee5601c1cce1b7187c0a4f1029f006535f01dcfe8da778f418e0661369649b997bb41d28da8400d289a9765722e162894caecc2bd6337ab100e530d5cfd0353b2fde1dc9f4432d86c036a7a3311ab9bf169927b2ad73019653584e9f32c8608e40ca1992f63654fd4cd4903b1abc23161caa1a66017eb8faf395d99d039ba93d3f9355d1ed47ad2ed5ecbaddf89405cb64013cca287a1377b0c24b2ca031c5ffb5e7143f6880bb2570b47df6032f823502882fbc99578e2a75dcd22159a3ed854e4f125fa6d492bfe00dc128d735aed3156d3acfb65ac8eac19b8d55889f2bc2f6ec92c639a12ff1287b02c2382925f263f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000829687d947cd6e6b2715aa3f13d530a58eea75df23dc56d635f7bc938b8a512e2b04c592884a43d86aa03bb999c26c76b6b0e346992a41d6cf165fe94b6a5d10cefafa0c68130a0ac17bd12404ccd2dc44a11a074e05ae999f8b93f01be9502cd34e42c287dace6c4c56cca8084b83f16879e00d9ad62e35b10892febd8ddd86ab0d849d97907c0113938c49153f2aa144fe9e3eabf829f684eb03d3e1f1e0e74d3833feeede92d71cc5426b15e7cbde8c51e35b76f8e1038ca0a963d28f9cafb0f0bee42cbb34358e00039d310679f39f252a908fa1f7c72f8d5eaef4dfbfcccbc2cf2c2e74ae6a5eafc9a0789ed69d8a1016e4bd427c43c5842c64617fb576a90785de762c848ba733ab5bbb1ae0103d600a43270ed93bb001cdb8e9d2b252f28bdf4737c1bdd1b90b1089bed03b7646faf11d29081abdbb8fc1b03ec3215680e4430da35714f002f3e5fc278f26b471913a972ef42317e61bae2162de98fb973f42db7b0048263c5e19c8967e8ec9c5fdcb696c8ac6b9bcdcba5a6e1c55cc675e0b971407dc6f033ca142ad0dea3a390c4ee2a90cc2736aa4f4298fb527ad3a4b67dc45c98b790a9728518845f89bcc4d612d2f731356ff3e9fbfd78067f800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b01d83943318b6bcbd1ccafc0c8474f59b084d8ee64f0458ae7edb8f30925144c83647b8119e3913552effae2b220f9265fd083528d5d1629fa54b9a496228164e4de70eec7542c35450e6066ddd0090f8e357f2f750f22dfc67945a1775dc4a077fe5d522f65743f55dfc5632fb8a38aca5b0ec3abf169bfb3b3614fd8db33f88e843c89adf272cff18dfece604015e8531e4f42d7fa2c42f1f9bf836810f16230eb3d2637982f95ce51eca4b97aece0c8c7906d3e2cdad984cc6657a3309bd9521664b512a3261c330293481876091829c443982f673f52a3f90b72d63f133b8b27b79f0f4310cbe849d0e3c44e8e7d3c68457f94d0a6d9f263e67b8320aa646bc5aaecdad6f70e7d92935d647c16dfb1be738ba3b2fb88deb72f7da0a5ee4a33b65d01b7cb4466d5c5735758d044bff19cdd691e92da1baa35bf1dabc437549ea99723d73ffb11385c1362d38bcc3f5c9dadd2322ded104fd1953c545c78f783c72428d27d5bb2c7de4286b65355030676a6bf7211fe64f1452d540def8038e4740c20912371b66af8be619265810821a019ad52f6f43f2f93d3ed7bca43135faa615e58bd02e077bc3157e0df115cceb226a2152bcf2ce5714e1de37b91000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097136cfb0ba78c11df7552d38bf4de9512e5cf35468c07c56aa5973ef64dddfd6579993c5d10e9b1f29d5a5af4ebbf333f3c1a2ad08700649245306849a212cf9487bb9ab88da609a678aae8bc8bba527d1eb7f262bec94e4c9eb7372d194a13ac16c8e6da7a891029c534c3855abdcb9b8e09c603afdfb9a6c7915ef3c64177320a0213b3fd6ccf76205b831f26bf6e55c18dd5d401885d8a1e0562635fca2965240f073c295d0d8b9ddafa55ea26482b0494ba75e79a2d66ab24d56ee68b4873920b96b79fdbb5eb572c21b03bd7e77a3e3e66cc4b3a44a14e60b442469bafc023ce278fd8f72c9ce9c8360a64c25f95b37777ac8e2f31615418ebfefa871d2aa3fea39320cb8fb260bba39c80849f9381eb1f8b2896fd9065263c3bf1b15a14194193f70902467e8bf1b32d0a2445a8cb9fbbb3df35a11621a9bc096b69596e301c7e59e266854a9fef3533ab8056972879539b90c75b49e82e85304120cdda3e669d3293d32574666167a346f73c2a909cf548fe534827eacb5c21147b24c9e9179e3f630381fad544824c742756647b0133f42c9f10ad16a1ada97ee323334284abfb4f6a945ee33a61c14764335342e183747ede177b5e395eccc283bc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001eb684a035b54727618ea2360a3b7347dac2f5b977bee0d22d5ec881d91c49b600ee1cab9b38329f0ebedc08d75fccba9272f9bebf2317833b78ba766fa810588456a42c0a5dc69a40485ab3207cb29e813d71953479a62ff785dc85d5fd632a5c930fec76459921f697892952ebf90ea44e47aa6540579c7a9060a7b8291fcfea8745371cc469dcd4c520ade7afac2ce8d9b214edeec8f73d0b2158e096f0005ef1e8d16f4f09b645c25b307642be924eccd3df4e24e7c2ba43351f8fd579cb2497ac05d42ba15d03e84509c3be7e56d955568840e28995287cdf192b44536eb47a212161d4f9141dd6ddf808f5996dd82cf0b66a8b3f8d41ddd8ed55b7b22bd099c656a21faaea6c535303b0d7d753dfe46d825a5abfc0a15bab2e2a6d8c7d08f15e36660f0915060afea71b6e69b61d8ea2bd86cdd7d5aa8e092a22c02aed35383d7f5680a2b3866da97a1bd93707bfc240dde04f1ce0c70b5ea8b01b6c4eb3b6554436b5ce02edf9978996c17b301351d22dfb73c025c914b9842db9db5c5816046e3de77582ada8e9b9f6eedfdb788d7515eee4eaadd8b6dacffcbfc4adc0977de2601eff1f451d623e87e8f57eace38391279b8c8d5466ec32b01921e50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aee3b37022158036204104285668300f698336857e11562bb347924a55dabb74c259eabfa65e92735446e84180dbadecc818d0d21b4a15c121535c7176c95d69a59d6dccdc535d2c43c847f0c16ed71e0126f0ec2863e91a8bffda455de83d918380b5a2c9514a0f65972cb1200e6f154051b28b43aa08bfcabda64e01a7ab38267e5f110aed3b1292b4c7382414812374d2e8686ad8e7c3941feddb948bb6b6411041be1bd57fb5dd853d1a27da4ba293a20180bb660b4bae16edeb0d4857f1faf255864f034de6d5778c3a895852e07634d89f9d9bbfd5a8114d9c2b574aaa03d90dde9d3df4d04566641160b064002d70228607f8c3139450c22b3a8f225f98b9fe175bb5b98ae427ba0d42f220f5c94ceb607842fc2be7d251ace5247acf2d2b1255cf54e9ee04c073c1720ce18537b11552869afa2f2b55ceac17a3d8b32bb562f21f0775fa972d94515798a16863c7ce974dc4137392ab661e2ef493f945f71f0bc3cbe2d2a8c2f7af6e1591c04059ec28991383e2a30541b95e1feb59830530fcd23c6b74f6e9ee21ae8a21226bdcd0b361ae56a46f5784ea97b4d365c58e4d6f829459c005dc769b49cb92fdd5e83e24dcc224c16d1d34be9a83060d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a55fbb76d8e42f91a9da0ee7eaf7b13f720fcf4d677dce98f84cb09ab7c0d9847005cd8e664db61640b9e45c054ac67eed977b7cc5879ba8be035c2033316b36cd4046e084e492cb1d29e8d601ec79d73c26e3ef7e70816c4f39bcad09c72b189e4822b35716d125b7ff0679b60cc0b8624eba72927c33030fa5eb166e62c582fb92585c889a3e2facfa75080394bae24f9461d15143d92692c58544a2fb66f6f7ece163569b2178e3169c02e3922cf7a73b289f61ba09a5516773eb35766169e2af59c9e34027b5c84be91fa2acb0b5722019b8a94f4e69130a00b56e9ed85c0813409c0e3829d1dae76e7b479d7de96d57e3ae6cf363c9d0022bd6a8638e345e93926c1d0a8f6d47cd5106a502f8e4f3b6e82ace562a87cab429a200a03a5a5ff94505f6b75fbcfd0336aaa3055f3ffac26549ffcc08cb9ccbc0d23784d933233bd710b7ac0ab2ed9cc5fe13832be8e307dcf64c98df8c26a96f3bd71973d76e4e980dbb1be492bab57454f2c831380030f2530f9925ea6b39a6dce17f128785a37f3c2ebf9451907723141c96f5c9bb7c81fd3cc8d897aaf4f93baf8aadbeded348557b655802e469d7c4899d0cd7b1d2158ba7c2d8ca3ebb5213007cdc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4f8c76aca0e2601bc9e52c6279c9df3d12b2b6cb4c555333d8f99bb1e46298672a064743322831ed6e170396bcc8b69c59f8b765973b63751e85ad22cd685f095111eb12d9302b4c70dadc59d364f3199b393073bca777d3edf51b5bf77b6a8dd3db0d864fdaec224a97a210d48270e07b8154d1d53509454fac829219a24d7bcdf267e77fd5df5455eab0b1c37ad9f26731e749bb999c40d750fd8d22800b0604393a38e950be943f0cfe68bc1990fb3b17d82dee4f441806005dc4fb45d4ab175894c05d9603545947e6e5b36d726fa5f98ef0cbc63b0eeadd75cfcf1336047cd3830d5fb0f48c4e6d5c4e9da00fa2b18487075c18fc4ff20137b44afdbd952e232ce57896d57b9bd16fa978b829a5ea6b371b389c5dbdc0736047a785883ab5333c4d3048dc14d323902272862806446318d10a0654b60dcc90e72b21b0fd906ad7cca47f5005d79e5f4351ed4de0ef417f38d75296085fcb623d85edacb6e929ed084781d098c8e7250de8a3eec292ef8686e7a534a40519b5c15ebe67ca8a91ee527033da15bb31164ec0e0132fe085589859c874888d1effc014b8d09ef9c8de655c5d678057fe748fc10514e1576a8e258a8a34ef8fe661cab04b3700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009af88baae2707f54c1b27f35f17bec7d3dc78e765ceb9cf2ae9e18aff91b9427e15bad63606fe0aeb7c845c6d1cf833c9eaeb4696671d7ed7d4e9d14a266188b97252f902135ae03c34d8b65db83f471ea776abed430601c1963934e154a88f495244f960edd0605991ea8388d6063c636af259a46b2d674eb681ab2e444d04fe4ecb5146282aadeab224c4de7553f461e43dfccdd6c29f16f2306127423ee17651c627d9df6a47f802496d028c1b1df96882fbdff6c5ee02282204e0ce27cd222964abac2f9036307123973390979ccbb070ed7b95f704f021cd1c217cffc6c9e602833944bd0db06d4519780db2ffbbf0268877932a486722683c306b7e9c6762b2d789a45be957c94d3cd99637bf09a0a923803008ca78da409596d639d845cbdefda954d9e29dbad1093b727aae61dd7ae87f5d1d632ca6eec1cdf2f56b5f3a9c6bd38f20dcb1ffdd776ee31ab12fe0b0461721fd059257d9eaf962b5892ee9727e73dde6c668247134e88d8f97148e08569c605d963ec8824063d89623972fc6a4fdc46d0ae8d95d952e68a2b83e0096046bd19bd1c9d68f14fb7cca45090988c1b533c26529743c4ef0a2ffa8473d43370ef1cc2bdbad4c7faf24985bf000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381daad956436d4721aa237f46084c96e8b4126b3acf98a9f5e1083d42bb7be528e5dcbb0efbe9b3872fc2a4e2128df5bacc6f93ca7f0d16b2912e006bb402f1fca9b64618b08847d8aaa3a2e0aecff9ab6b714c6a4b2c811f0eb10dd106d663cd87d1f449de9a2d5b1d0739f6126161fb4342d89e9c82838878ef38dd8afd3dcdf70b33035e62bb979b90b99d66f32deeaa2cb44da5a21a2fd18ba8b7a06f7f23fc1c233d676ba308af440ae4227f32901f4ec7271a58a2ee82f49d16382945bec56f7832709862e75c85a370b19466f4b5f93127c35b6acf196ac7c00b9b03c0efc2ffcd0f761d31c9520dc011b8fadc4b1d6faedeac9801ce1968cb06d9189128e8ab9a58888bb1a0217e92fcf0c45cce7ace25417480055d1792c604f9a1c858924a268dded085e7c40106cfdaa19fff7c8cc0ba5d931be72c55486dabd592ee0006b346dd14dc22cf23e4a91cf9dfc4afeeb0cca18381631ae22222493c19c7163c47b9d8b8c562e0e403afc84193234f6147fa428e45c85c3f760adcf16e0d9d79d9f31032f8f31a6dc6548bfd9f12484eb39b359452eec0dd2db5ec603a0969085bf1fa30c52bb2931901a8e57ed132b6f80ab335f568e247dfc62500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008932860b8a9119d7386449f45a5179d5b44318fb376eb04598eb34ec7a212f3d7a1b6f4b8049b8fbdc1a253bf9c8655d2751a1419e473b5de497b5974e9ac3aa572e30e4dd4cff2498560595c2f7e58e2b2e04f4e3a88ce5ccee5a3d4a40ae564377a9fc1cb2cf51fdf5370d724eed60b6b843d1446843557f59e92d8848b19d812a51c32003f1979df7c43813f60943a2b801bdb3e63430b2709c177627a1701b33c9cff78737b306eab78dfc0b46faeea3260d41b901063823f31f1d946c7d53eec4d18e260dd05424721fe2dd591b86a0697c3b852b86c73d8416ca02ae0f60be2a1c46884b4db485db7a7a8b4ecaa9af5037b65f80fe103d7d2503e4361654955edfa0f16008d5ebdb5b099a454f698f00ba172770fd6e8418b7c8f45e79c0530c58c140f7e505a17981780dfcb4c8f69b7e3582d56abccacea41438f44c09768d25f7b609b6609006ec023b9aea7693a57bc2ab37aaddaef080954105a43cba3fa005b3dd45cfdbe4dfd22edd5a9265f191ff3f0f96d1cac6318b645da36a45a55ecb832103cf9190ffd7b1afe996af4106f9dd3e8c8a2e84241111cfde7f0a38576a8298d1ce48e51fb695a1a10096cfcb724b2ddcd924a7f525ce13760000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000237f9cf156b04bc9ac366f2fe790efc1bf3bf6cf60dd4d19c5e89ea52427a1c613c7f1db36a33f42e85652f254db33f89d1f0b7d16c8b1a9b8c1a1371985d9227b8d8b1f4bab72ceaba873cc11c810867f607a23279a19079c9acdfc0da44d27dc21af5962b3e477f6cd8aaa84d6ade3adcacce1d879dd4557f16b06694506774b8cb243fe0c83beb9003ecbe00966b14cf449835c7290a754234d0d7e990aec3026468150ee354622dba814bed3521ebec897880a621a834a047e247f5838747c96a0f323bc75d7283cd5e2efd8dceb61f746fafb303221798323fbf4f3841eee1bd2a8c80d688bf4df61dc6feebec94b80129b2e5faf4d5e4a85a8cb4e8ae61c1755594f748c4464411fed74c1a56ff1fcdc7517d0bee2fe1b90853b155c7eb4b1e80aa44f2937cac7e27a2729c34dca34ecd3905ebe704c13a74faa19a1edf6b4f40f751ff840077e15d712a75f92d418fdfc7c6398faec67d1bb5d32e92efdbfcf2a340689c4e31c073f0f340e1880fea82ed480965809c3cc0f0be6df48d8b9f59fe8cfde242a2b0e556199874194e9523daa65c952e6f2a4fd7d3c56bb54ab2da3f8ea2f4e25eac2a917b5628a918742163570b1b0c2d6cad13ea0ae4000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e21fe50e3ece7c5c27c833454e9d40fb9708ae0bd39546c23fbb4ab39179a312cebd5616c23a50c7df00a1c0b42f99e96791ef461f77ee692731a365d484002e2869216450ce9909ae40e67715c6142e7e2c083a689f03361237752a8bb938dfd39b898243c309c8c1dbf539a3520379bb52a5c15a7c6d13c3fd231c0255fcd09b9a2ca093048c58fdc15a941ce617ef8e10d4c61626277a30ecd56bb52ad7aa01c685301fe39fa323f9a1b08c3b84230bac56c05a282f8b400e6b8918e5ecc1fe295a4c5cde2883f2f6a4f0fbff72733675218c882997e731fb08962c65ad545d5adce1bd429b79e51cb113d64d13554d50914748ef5a15ab5abfabec7beabc8aed31fa6544f90dfc49735008835ccf99c839743192085381ff72864e38f6eee3554c55b55306c5c9ea90d73fc004d6d13bab809f736ce90d5ec36a38f02c92a0910fc55b29b541d6a037f01b3a7669b6c133ef1b653db220e02f795f77363205f1fb1253d1d386e22b8169aa9d628037c4ef963f619a37fac48a2aea6a582cca2388d6005211ca6d90e15646095164d333a07bf239096a5d6be9c4c250781e1a92097c7998b1d9876dd0ad2e97243938bd88c3004cdf210c7de3b634bedd200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dd374956b8cba8b7fc63aee58d1fe759ce56514ff9c503a29e9d14cea7d198e5b730cd6b5260ea70818111312e5520b654a1a5df761084b784b233cc9dc44689e4150f549b8c7ee4c0e414e19208a5867a1739b80ba1327e6c1a3111ddd3295aa715d8783353b7cd3d6c79ca434093266ad7064c6da7fa0e38df163ce24ea5a8c52cac07d0188c6ea6d3ebc0920165c75b8b1391ab7d860d10212a73d604fb4975524bf3b3fe08243069e7f1ac2e97953ceef1d008caf48f1d9ea7558e9e284db0480102577796ef6b9ad6f23cedd4247ad004947764922bbd36f7578486bc172a494187ff2b8b8675b3088adbb0becd978a283e6d0219d28f27b1d1c3e25031663e50491c06239772ba05032893383ebdde15b5ce615fe4c6de16a8379612f0a9e8884cfb1243e21cdff22e02170506c0c4837a1274f853d783df9fbdbe6edbc6ba95542799bfe497df71b0ecd044ab7dd9f969ec51505f2635744f2111d4a7259f0a4b5775e7ac52a81a4b98c2d4f052117f712e7ac3750dd78466fce7342bcff6f701807448d42619a7cf1889861b5058596382e6d2eaa78330b37bbe54b439ab1d78d24dece300c0b1ba1e842a7f6cb454702ebfe284659a4ed85d7954d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001efe111e961cb9cd284e77e5dfaeb01a1710e367e073b932e34efafb3df492c6d3c094d5fcfc0501f6e4494c7e0f7be2ac7d6332c316601b0950ab84d70bcf8317e9953baf688c7bae797551c4b0b8f5e46f834a30a52afc83c6a2d14b15c8c93e5e2af90de8419da7655783bc16e33ea848178cc82d67264dad220c39f8aca11bb98782ba42422a137a1c724690b5beb13287d75db4456eab9f8f562b0552ef50aaf519a0fc4e812c6969975259d5666ee9bafbbd770f02d4e1adab9fb13a8f50af8d107b8f00dea173c621cbcc32a6f036b984977bdf32c3e97ff7d39313ab8acbd79b1c3240c478dc2504544476ef8a1ab05191c6cea0fb7ebd85e3940f9d6ee8a1c03c6163baec3b903886c309b8e32601b8ac9646a602fdbead4118692a77ef5ae360718e56f8003639d6caa10b17943e45af5fe68f66e95c78166ac54cdd8d3af1e87712474253e749cd4b9933874c991a3d6cce710bcf47023dd669415748a86cda512932682ff8c4cd2817bcaccf24ed3ec3bc190cd7a9e64eed8238dbe4d79939c9e40cd8afe07536a65c5d6ba9afb4320db208691594d7ee8e787391a3d4e58a06b33c9cace5c403ec2ee7b1b883e6fdd309675e7bf858277ef0d800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d5a7d95860ebaab62f99ac2bcbc6aca6e6566a42f95d4d18c2a585baedaa1b531e41e296d6de009d31c7fdeca7ba095d8f2e0274be03ea8d1b2d38b4ce005cdce51a68dd8eb283c28ba97e709d1c657cd5a04929dac782011bcb42fb466afb39845beeb02144c9d3a602e13dffcb8015e90a995dd724444d4388dae26aea8fda1214fd42876ecd31fc58bd22b2c57928f0288da276e3760aebe65b0bc7ed7151658f936281877a026ca2183fb8d7b2bd39abfec7f1fbd6e4b6ef7087ae3dfe7f178ad3d4b246b7d231690319c7b2a3b81c24a4340c13898082eaab67bdaa597e3513768b30a1019950c3d383d1a423ceb7cde42e105ad0e80c6f212bfa5b61d1aeeec8d3f50439dd56cfd5dd5868598d24d2986c2258b2bc64ecc4f218b793b5abf1935ce566565448393bebf73df90f50837b7b21e2e49159c37b0db824cadadeaecdd736990d0ab079608c6e031a42b90d4b5ec4ffb6d74436aebbac901fb46f52b995f1827565715e7f3e5708a3ffabd3c9c9b1c7ea47e44565e0b1a26c7df45fa8e039686d8377bf86ba1f3bcfa481bee0fc569b1bb56bd3011106f3f48de858efb9ed2cb6db8ecd03e02a6f03e90a73d22aed57a5d4071a00f589aaa900000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a184c91ded569de6b701ba0163ac9446fefb2e984d7c4483cb011eea75b8e30471635e3167e755d14a062b12979b66a21f2f86411d5a37f4262fd18ab7e3ffbb1394f24265deed5399d3a95de91c4d73332b8615e678543f9da6c98cd481bcac605d2aea294f5996588e9ec33ea8f9b02de9f6342125834c1f51fb7d389140d44b05a466770f84dc0956825b3e5300ad38d863e10e35c2f091b7341624ac7e2e780188a65807438f9342c63d00c8f4490705cafd0081262b3dad14f19b118bc28243af6ff4bad55eb82179560e5f6f2716c39227c90b2a33403618174ad33edd21debee0e924c2d116bc046c6f1d69510974f57245bb1c6fbab5e417a76a7fc964a31eb77603d75b53205e7c07afd6551ef79270499ad3915527a6d2aed5a6227412d41427c20cbf27e1970fcec0b74351af855a3ceb82ef97f75395833c0175d2e6e2b46b6a1a1952e920373bcbe655c300e14edc6670221cab64fc95a7c619f6e6b7c2142aaeda0f97b5a34161d818d0e24efb3290dd2cbe4bab447a7ee39f1d8fd4036bcfeb20efa0b825e35ef3fe0f55704fe3c67c133382812f841c7e9fcae9eb1f4a3bf5d64c4d0df7a06f50984d9b9cbadee954cad3f3dd2ebb1e020e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094677c8ad1f080a63a50e696f09d377824b417cd4fe3643511c697df6903f803b3e353ebc7e83c899df7eb777b5a7a9b42898315890d3d22c687c1fafc5753b06a3610515ae18ef00933ed9050debb4fe49837baa1666e428c5c1855b42b2c4522380e143b37e05d892b32c9ac4a44b027fc6933fb151513fedcc8e26d6a0a61a40eb111818dc6d4d08eae19a4b5ef0934c12879930e65d8ee362dd89df38b7459918b9b2957c657d8749bc4a155b3f3ebd86465e0d543c07f9cc182780d8af0bb379b4004a72bb8b99a3e402c9f583530a234899484e760d4a28d1bfbb8451c85b612a46d40db194bc627d0ec52236b37412ffd80a02561c22fee23fbd8a1e5f32c9c225f1e478cb4af25f93807af695e69f3cf771f3ba87787ffed2d2883fd41b724d1133ab7945a5229041959f9f4657ad0ddaeab03d51837f0bb2aa151b4c55dc6e321d6c80ef900211e4cada9a46f64238b04234bf4d33306d0564976c9311b0f7309c2061d0cc7c039c226c6f5d298a81450cf807615fb92c12af4a7dedb8082ceaf7ea1b06f7c9197c95997c5e35b19118afc2d56077b3b643e87eb7e19e9ec6ec8e075608f5c28e4cd682e518bd3d03878f3dac6023d0c115df81c2e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fc72b91761b2a9781e5597a50a5c3e62e66af6e100102a7abcfd525efaaf4073983f10757580807dbc46e5625f92b5ee9c2f44020f7be877b6417370e2ed9e01dd2ef001655df9b72fa51105623c32cd220d541f65b310b92b407d8052ad33ed3d86485396d4b21fae903b00d58fe15e5c1421e85a8cc82eb67be7d66ca712b0c6d7ded429ff6bc6454f8865d73d3e5e4293893b68e44647b94e427b4c33b526b82c5348ca6be163edfc6331c6c446e735dc376626c883ad9916759af10042d2b258b73b2159c9ae5e0a1d9c301d0e045befdc4fca66b81ec3423e99ca73435b6f17879cbbbff8ee3e98f7fa8117e52f899ec54b6b94e3110608485dd097ae1c1893fb9ac5e688acded9b39066a39226af1139e793e90d6a5cfb4abca1edfc23e59ecb3e93c9ac422632645a782694ad8b40af98ff385fbe9b90c79794462a69d0480786d848067e0603a84383b0c9db92090941aa1834e256bc482193602fd96f58ede058f803db0cbb0b6d6da51c14f61327f11d27fd9a261c85f7bdbe1b2849f0cf81c63a04ae1f8bfa021693376c88adfcb6cfb2577d4b549fa20cd407a7d0237c1a12dc34450b0efaa0693be8d8f0effaf8ab36f0aababccf7aba3af2a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084272f966bcb37ac5fcc89132eda0b97a2f76100861cc48cdc751890fa256070c39205586feb9a52fbc6ee6e433b87aecb4d9e709f53d822229e2e59462e2da38ce86eaf12b6dda68734a89855de8536b53923cce5e3f4689c403488aecf9d00463f9b292898454e9656c0ce13b707f2bfa72dd0920dc3d42d69519f04e8ab9257d7527b09c177d7f45d750339a348981fe985490e5b66b0db775641efb807a3767e8ce9f967478db93e8800b4fa4cd6ffe2e58252653a8bec540cf7e073047f44813e2066d1a0f76cc963ffc3969f4f519bea67cfa4ffd6b07f732f51c471a8f2f2e4ed80739bef03cf8dd8fbef3aa36ac502faee736b5677260e5599dd0b877fd6fd1d0d6b8aa0dd7e44b185a969142efea60a8d271942461075743165c0a4517546d77458c7c0178be0c8041bd8c74e1aef60cdfe6d36f78bcd50a53e9e27b4b98ff9940aeba3604238e023cdba0cad41582a577c94a4d69cee6f0399388683238697945d089f886316ef2aa08439647606399643e8052a2ac038949c2e30af15a6f1127a834d8d57846ff26afb58603fcc9d0d38b4041c03a3e265b2e5d073f7a54c3dcc9c649e24361f035e79042e8043dcaeec8baadc6869a29fa371b60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a93b4204bfb6b34920600db95c5be555f3b485c4e94b267cc644d4f3972eb412a260fa591d8f3ff51dfed8db0fbd7f77f9437b9715ba0dd8e1641c5ad5480bc0b498a695734a0e90c185cbb0ebbe25d90f2b9204a5dc022bd4b7573944ce8b58a18debcdcccd4ee7abf5d578ab0d22174fe972018d593ff23cde6e7da69fef3c75cce86a242fa6eb1bd945af08e76069bee221623ab8dc6823afb6519dd72e88a7429dc75882ec4ef35b8abea12f1197e909ef5c89df307303299c9ccc2f782191e33ab1777ac981217cca7424261e24658bac4acaf108a83d1b1ba3b8d415041ccb120b8ec2f303e2e6f22c3930890fc4f731f48269d1cbdc12e475ecec7b0e530ace091ac03575aaeaa788153c4b07c804f8fdda1bd86c6f2a025389344f38dcdbb875f436f302adf76d5e91b44042cc5a523b4336d04db9f3f2383df9c713f758fce9427a8ea3fecc2880a4a7871c95064fbce7d299875da56d9e7d1a022533c925987feb123d151e53f218e766035249c0d155439da8ca49e6ce57bd0802dda632c71767b28df37722692c6e75353413c3ccb42e0925a421e84cd7c4340e7319dfd05ba9bb5c7610a13dc3e3ced09d754d4fd23e23f720f4a9eb931d931400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e6ac3418560646067eb006ade274ef3c418366737f1a3160d81738e32131cbdbebebd2ee342e88d3b8772d6c513851e49376f1ce92eb54f91a92e91fd7325c609fd0a149b374db127d14d87fcb66b327dbce779070e57f2f2bee7485d671d2d7c503f41e95f3815127997e910bd4fcdd5f70ba672d32e0f0911cbd1568ef728455ab9323bead8d60680c3e015bdd9c3b1a2ee7c1a039e8954273c7d8be47a4a3f33fc03ceef6174f3728c0400ff6e6d03ab46cd14a28da191a36d9450c1b0174ce3f35caf6e2d823747f369d46eb7ab8f36f7c47a7547ea67ee5c0ecddeb0198bda5bc30de73ce54cf1d3bd9cd003e7a46141e9d30e36f16083ebfc5f4c45812e911be756e16eca560555340248722f4d7116ef8c8ae9f03a349ff449ceb78cd455f66e1a5060cc727cf847e7366e6146a737fbec8b6cdeb005faa3c6e12c157b6c1bf0c0a19a02670333a78da4ec8dbc331c27a6fc1bd1bbd383463a73b944581f6ce025a3d68d5b8286148535a9f4456803c522778bf6b7cdc3517ae52bcac7fe66b7b02853f55923ea79fd63399cc473e6823d8f5512cbdc73ee6ab1627f6a2ce40bcd8f523b7c00a73243a4db8f45d13942b3b1461a6e61befd820b905f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab1346e20222c9c60c72a1e081f262ce36e1872b1f11dd33329fa3188dc2e7b5c7ea8cad3c6aaff064e1f26f5074cf6246d1b76dfad637fcd4105169253da246efc5e6435e6f65fc1f588f20ea00f92ca6d93bb323b4f8f959bb07b81ddf41b4cb0c718c7023217eaa18e851285cb03aa2e298017aed4c3aacb62385a3244bfa5c71aa4d97303126d609de5059407b0b8a7eeeaabd1a5acff5362af26618dc3545b82bbd57d201c8f12bd374de64e16d3a4e436f6186d315f72288d5592073f234d84c3b4fb786d9fe25f7bc63485160f885447d0c69d9ba99bad08bec49ac19681ac30bfe50e07983757b1e9ff219adcd0f1dda804c1dcc896f1aa654e9a2e5d82607be1f72b7b3e851dbf2f6ea07b08186e52db2b8ccdc7762e200bfc4051fce1929cded29a825d7f8190136f0e516141af4247656dd70f814f310ca0345f4cd066488f352d895f6bed03bd9620cd3d24f461f70a9d166b57bedece428094eb7d69a43e0fb87cbaf72983967739abbaf7112c9f4eb93d4b07970554aadf6077c0927627b8ebc4a403bd28b6898dabf9c450e8260f835261c40c707ccf7bf9f1a8ee6d7815d39a3851a055c61763b1c41112dd6366d76d64a4102d8547326a8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015253e086074404f69270d9480c5fb42665d3b18abff8a94d1a60eb763f579cafa292721eb63b1fe10902be5b5781c9462524ede544366e739a304e44eeeb89ff29784390fd2e97146af5fe044bdb3fea2472aa60d12bc0cac2059ec47670b8c4dcd6e6b3e7632f40abdc43ce17ee8ca4226165640c0a2568e14aadf8c06d40cfc090ae7033b9c55727453c8ac238bb03624fd058aaada36ae41a3598b89bbfe5b5e6ab4df69650f88ea839752d98ab22fed798c3462792e4d2da5f8a7926522e6ce2cc532c8a921faf5c4a55d971626fb7a7239bec33ba13ea6c666ce016af1ec69e753234b8a5af27e91cbac01340f19e511cc1bf7f12f117accf3d36c80f068ab542c7f15e2fef6b1108b6f7de041c8c701a50d3a858c173979df5a8a8298672136cf42b1565e4bcdc524e7af12d70902ac3a43a8dd8e48db15416dbb8b3ea7e6a9fb66c94e12c70e71aa18d9b64d53363de8e31ff9a7999aa871579367bdc6eb33b0931129b3ab2c635acc84c43aeedba21296ac546fe0463d3c65f20b10a6915eb239bdd663391ac1a1e20a009054638f9ce07edffa5072f2adeaa232815b48de2d30a577a3ff7f53a47695f35d772ce37d18b4a89bd9c78322b291764b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000892a7ba953ee7085f58270290a6c72b7efd32db1ff49f51064a4549d8fc14e41e35b1afc2ad15bee1a47dc8554f78303e47813f720d90c0f88f99d3a542bd0c5353d148fc9f92c99af771ec372f1bea429d4705cbbb06b0b3bc767a7f76940fcb676298de105ea1313b2abf3e9184df703b7acbdce7b1b48ea65e79ebf64209302a012c722ab7100cbb3ae330beede34e5a6af0440680e1f1c83e4010e6f3ba7bfd83c79cffb6d426c2500af65960ad608d63b628788f3337633eb51246bce8a5489df0810f0d83cf871200af1e20119202a4ce209abc307253e48c253d1df80543bb694c6dcf6de59f3388add7bfa3b9e97cda6227505a00452d82a82366f7ef8bfccef416247e7bf01e190e3488eff22f09da11c15f005cf4e422e016714b3cf51fae17961393aa567d4a77bd03c4c43cfbd2616e0c55de826027ed50ef9140c12edbcdedb47d87c4950abae007cf95993c390e8bd828fad708fc65e4ec8bff294bfcb1e4cd4965f84289942fa1a22a90601f145f511c9ae0b55ea5770b4c7cf05eea8b529491c60eff50b5e2e8c6abac98185eefa749712ec219bc24f67bd1d87cb19133b50ad290de4717357441fecba3cf31e48c2c360bd7ff8751fd3d800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009011cb9421b80fe4c4ac709e57c706e8ad3f6f03f5732ba529ead2f865a60c170ab1c778b750d97b45da0c2953d53738cc17c7a3c19e7c00f09d6eecf4157b0d03afc3dea50f19300ac567fe01f7ab53ae1ca38df9b0cd7d9eacdab56db3fe00d22989b1604c6577d855ca6411ac8a5267f8c014419f25a846e5a4a0618caf328b6004bb4ff207b5a141ca1775699219438eacc32359e799ef5825e3bed893866e874a3ff555d7ea9fe897a34c07c1c18f8aaf9dbc6b6790db3ad831e3b0ba78b58dd4413b374ce2cdc3b983b692b858b90fa80b4daef978101722d17747178810536454c738df6079e54d5b5ba1bbc116b7aed6aa07a8386bd6256dd4743244657f600d6e0ce95d77333150420b408934215b57d0be3c6b86a0fffac436f62f8253d8492d3f11744213474ecd3bd96c09aa2a0bce07852c8d629793a3bf561fc39aa29ce1f058c319771c1e2d75110d874eb32f7751de3782934236281ae01f0aa736a583c4560bdc9af8d0aa678993b7758c94003c63bce3ce5d34400d9b880175ebbbffdecb7734101cb6764127a27edd62b618fe0304e37e6681f74b66e6bd413d12085fa8a55eadc5ff6ef760391a7651d1c776cdf7fdab6eaa556a46a000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a68fded9fc9aae3469939e1e564e34950eed3e748049f0682b9907749df0facd990a7d0b2138d5b9e3db898ec3d0bddcbbde52ff5c8a89f587eaf691d5a81d9098514f47681330d2222861861cfb7afb6586d7a1723761e48ee04817917576704c36273f5dbf6a0d0118c046fc5e32275e944baa87bbce344b7174715fbfd96c824c1f52980df4803f8cc3ed0627ffebdb5527d13f29cd04d2b6604bddb05b3ea5af9cd329f00ae52ac1e967c12fea0a1e3c818563f77acb28fffd58aa8f5e3fab4fb5bd443407559ef6b3539e2924cd310e057c915a08cb510ee282c50c60e1280653b3f785c9725115b682b9bc8d463f02b5cece9682fe2d300d2c50c922190c080220bf56facd4d04136e31927c41711dd699a015776a471addf6c53b9650f1e14db152d008012e983cffde6474cfbb11ae6baf1ccc9b1bf7b7f75a6cc263180babd1abd0c7399303b3955f7424080f71bd2af2f8f329f5b748d5e444ccdf4ec95bdb7ae54e66c5129ef5773280138dd2b5b9e0dc6fe2b2a0f9b396c2f3e793573a65129e2687836352b422ec07b0eed2fab568e1b72b7226c77eac1411da1a77a3bb9e9cb674bd3afc8da4ad9ef668df48ba8f02d045e3adeeb85c620f70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000836062085cc3bcdcb53e0db91e88e82d88ebb39f22c0dc16a30c24a382b5653d1eabd23d8fcaf049dd268d473bfeef7907de5014d7d45acf1db0f70c06e88685b72327bc8baafc3f3870f063cba68abd3b9b30b8ebd3d3d5b7372fa9ed884fdf3655e35f3def8e59443561bdad2f9c3ef774615025926724a8734f6975cf912e7ed6492d77a6585d27be07b52f8e51cc516f0bcb9e871c0aedf99389736d7e2bffdb37b5dcdc9711f358e750baa99794deae810f166b9254b53dfdf5291b7294b588664e4616a2cb17dffea94e55e0322d005438cd8f1dedbb51652d2208078acd6f9bb6522ba9506261973f4ab0c06ab9dd9c5428ef927ceebe58a1a369a9e6253c359e3e99e60d299434df4b37ae019731d88f03db3ab172bdc37946d0624eba6956f5cc43091d13d490775dd9c25cb7b1426647abf2b22364046f779da7c650704bd923f2d52dfa76dfe264a58248e49afc8dbbe7ebc2b8ed64882f92b92f16c5ff7a87c1217c6ad1f96329b1c2e30aaf27f2f9c297b8931f9ce70fc7f979be952973e1b6841f6a6ec588d15683907b87f6fddcf34f6d291ea0fc5ae15b2bc630480cd686e84da2e3579043140c115026d4f7f8091f94ecf6a57ed3d4094d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0242cf01bfb1fd448f3516005353b2ad5ac45fb70afa7b09216a4de40f6598593b0a732b89e2870d95ee69bfe9967565d19cebf694198385c90e4d8aae00fa1c3e28e2576431bde1b07e05ed2d038bd292d62578d97e3f37e0e3b41023a6eeac0114500611494388c0ac7311f5160c9c24a31582c07237367af9194f732b4e25cbf3cd2462fcda94fa3d2c11633b334e61c46ea9f1bb3df7865d531155ac5d90c4219d6f9d087a04f49506209053faea208e39284c07ecb58cc68add86c7489dce6d4a193d47c6f7d8a023a83b8c92fdcec5956cef5ed83807bd93c66cd05e12f07eaf39d430c2bbba276923634ec4d8878fd16f52e1cd5c5ab52c003bc9ecafe354a8ce786667ae28d973a3e0b7abc0ab6ae352a1374be0e4546dc5245d4fc65e0ebf758f7cc33fccd9c41c90191e9873e168faff03f3617815d41c771d11bb7867f59d8224dad41faa72fb7edbe0388e2eb2532a55e7abf200dfc7dc2d85eee315c527c9a2695c8a69aec110f1674ca0c907d953847da6a719de08432eca0c67a7e2642ad1624cd7626a88fa631b055bdac7dfdf94319e3d2e37f35f7e242f5fc7a969ec61b78e1a19866b44c5b2bcf61e03015ab3248d73cc6f81c49861000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a088644ad1407befe99885b7c90334b864f4cd6812f6750c2e824169ebed99653614b993218222a0390003a8b0884eda9636d2c8fd308e92d8162db57e389db3f54b20b4436cf868f07355073e789c188779e72b90ed7d8dabd23b51049a058818c816961eb6dcdae6f2ef92e03e9c202807088673fc1b7f63a1c8e8c89b3bd868edb7a56be6fc51abadd7bc0713457490cf5217be18ab3285a45e9710e60d1a9045254b7d7b338a5fb080cd292c46a1d6e446d970ac4499f9059389fe1610b6f9b1b5a5558559c5ca14adbdcd1ae20fb50c15cebcaf4f3df3cbf945ae2e4031033547bb08a302597d1c5f828c96e4d95723aa99999c73258267c031fe57a8c5e92bfbd0c668605a4a9a11d0d1aed83c399e049065fb3bf0f12a413c9b74fcbdd0023f784497d8f783904c33648d064a0f64c1dfdda296f38dc5db5371d97475ebaaa8679e3b22554e222f229769d1118f6b08734fc48c8c9108b39c9ce8f09b3e721454bee75ea2ef074bac02a2cb8302d4aa5d4b2f030ba1d1d4a3865e4ed90ddbfbcf7aa65e80e1b43c32be33213621a52d13e923220e98de85520b954697724f662bcd4ec84a06816fffca3730dc07f7125b3208b97f90ab5006bcbf08c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025428fd082b188390e639bd4c17b0efee6654dd769c4a6e23c05ee671272af2c43c1354e1493a5041db83cf44c74db425c21f8f9c7cd0d8d77bf66bc6c97bf2c9f44e05849e335669eb8bb396c60e69218aa69779403aebf80a67b7f11b48bb2e3a1c0bad7afb174b822e48e55608dcb382e1396427cb0991671c700d9c5a779d9b0e3ce52dea8805d911d72c919738bc04faab7a43150feca7198c35f759b83e1188bed580d10192c6e7805f450346f9362f81637bd23146c6314b456cb78ec64ec771dd97bad7d2437a43409d1e9ee8da989feb3ae2d2ba04386528c555054aa1fcc92388f99355f72c1daffa0679e6fbf6d85e6513a7efe9ac0848c6d48e299e83365cfd701b0398ad090e946fa5c6cf12cbe37575cac5d86bb2fffd45977c7cb106017a6a6636120e91a7964e88eeec684e98d4237923f40c6c497455482f68c088fc543b9a583505bec584526de94d1f4abd2a9af5925c09962177c8106eaa01a3047491b59f3292a6b639a2084f9fba02d7ce958bcceee8f68ba4689e2dfc893973c200695a06c778b9c55c13cb780eb1de7999c786b3bd10b010f55279afc0b14231714382bf23bf0e6466d7ae3dccddf579670890528b4ea2e5eadd40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a59b4be285b43228e37e843eaaf854f49b56f0e9f4a9b4b1000c15416b5654111250a6134515034e517e60710b49f9b167c74c63480ec88660aff3fd33fbde4dc36b9e5a51d4938c09d0a06c0378f95b78dde0b32df225c8bf4d5c92fc164b1bf2681b96e023045e1fbcf9c883fd17a165d0ee1b9a08e351d3025578bb0c7f25eedd2bcfec21b0a01f88a0c6e7e5518005245d5f241b757596ac144c235169b5d0d910bfcc5d273fd095da14055626065d0c9b1878488b5ac542a135a63db937197e88c407a2de15b0b980d76f39fe3ed87f502b8152886db2b132ce9c3198712f36817d89d804bf1d9fc944135156bad7671c484bd9c37533d38cdf704ee8a9de49b05d862a722381fd308ab9a11c003d29a3ad2f57ac269e07417d7c83b733987efc40db04bb2c0f76a587c3b16c1a3548ed79b4dfa9d2613fe39c0f368b505a7db711f3aca24d4e968c5904bd5b8eac5a59ff1c6ff0bb87c23ecc759f950d3c2dd61d1b8da767698b2178088cb1f37722c7d5b565717a91ca7185279c1e460da80e91fe70463b2da4774348a6f4e04d8166ef8914523ff0d46da599cd603865f4860202324786111ea9b4cfe294297e84e99327322156904cf7c123d9a71400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a7142fcde77551fe0f33a29307d14c31021afbeaff75dd609c9ae8e368f70837b23c99ae5036d1f44fce040c6c5203d0dd264bc70ac2612d9b149c344d210e6247923fa1d096df598e0ce5c1ff195dee20c59960327b4b132a23a30e09b11ecda0eb1506cf2696b83c9ce8f2e823c6f1ca0d1b8cc440c2f43a4146ac07421e18ab3b88313e5ab2d33e31854179d98c36cc288e28524b0116c0fc8a824308965c85bc11b9e1b70e253cf05b159a85ea4c3c071045633af7297fa4f1f31f2826568236b486f35bb1c34f6a5be9afc6d65ce2afaf09ee4207f9a3b0cc87d45a6d0552ead29da043ce7cac53bb05e3ebcb63dc4fae6ddd9c33e81ca6ca1abea2d80c853cd9602193906ba845fbee9bf46447ddae2c45850d1369cb035dd6b1f9f6e295d8310728c97913f2c8ca537a26fa8c82e5015ca6b2012c1c61baa995bf7bd876ee9bc6198f82d1b883b7d5362d13af1751cea6a053d4efafc14e1a055ed104a2e4b9d0c6c21d39c53214677f2aeefb681acd7c6b0173becfa0169ca9db0af029e87eb7d6490eafd9ddbab261fba94fd0f23ced3c33cdc13aefcd1724741d40bbe45050d8485cd3549b3164ae3b2f6e13c917eade106c7b43be6ed9cf54d920000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000118685f2e775cf71ffa17f1d324a78a4f65b1805943300e08793d278ab1b633d961370ed3de11ae282f430e9d73547cb50f8a424d5ed26903927dd8b76ebd25932c8997b3469ee08289b3ba6d5f94ec720d97e0d9da44d7fb25177a1d459b62124d2482f9fedda4d9a4405fa370be54e2b4bc5caaebe739e88147dde9c1cfdeae40f5eebcc150a6688fad8c1cdf6f8f4e0f3814cf05f29207977e162789b6ab5cc5813c943bfd7862700ef6909ddc4335f0b960f20dfb3aa32007557a3e8c3be47f0d7f7d3a4f2bd94eda012a9230911541ad659ae14abb8b624b9bb72661f6c4dc6d3583b1e6281bdaccf4d468df3ad435c6d1a66aacd1d7ce7f5b17ec05859289eda6d1ebf12d03b1080f2c226216d3621a0b3e60ae779ba574e74b686437ff2f15b3901652d2aae95e81a91ba67012b4710b682195228752f09e9d78ab33192a0798d8c6cfd93a6872975753d556ff2763151694cc49486386eff4353b4cc9bbb7b4cf4f848c80d80e1dc5f15b737f6d885c3d0bcceb02fe3b6f6dc36943e2a9de582b5f5b66099192e9e4bd41140a4c98e02aa383d48792c1e144387509099e99ae63cdf6f92281e6feadc9271b47b4dcd33b19cd73057dd93f7add8a6ca0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000136b31293b6ffebe843a6ac54702c2c610bcd1da83a6c0b9d878f5e481e6eea3afa959b7605de47d0067075389b85dff15439f5ae91c3c15acbbf24db8e0cd58cdc47409b24efcc2bccf142612e7511e81fa7e90b7dc65851f791a6aa26986cfe73aa2a91c6bcf5fecebce5c27bfc2c7c8a28afd3c488895459a12c4ace06e9b2ac349f64ad43997cb5e3a9a972c966f3d0e4ff76ba7cb7a8a81b87bf44c7478b236f1a76a97afe187f2882a01c6a8383f43d914e08143b55020a365c25c08332d0dba0acb4ddf0a2fc40ff80d2d6c01a8a8e2312f88e63aa1042c8e9b26d087f394728860415a01d72d3f804bdcb90811a57cf4b5a40b1f7accf319e11c283d0c3e2c147e050052c0e8738c53b615c193a1cca810c8e39b0c045bf73ad282c81c5e8ead550e4eacb1738572ca3e4111919afc1e629efaeec09dc3bfe940101a1b0afacad7fb64f412a29dc418335af244a9aa115e82322a5cd444c011af0fc17e095fe47ca65ebd3678ddf6490f92e7bef95e8e34b56ec9d4f95256107f808e94527bda191addcc85a3d3d66351f400b9c76c5f4bfc6c48bbd0ef60df28f40641955631b2bf740da6572d7342dac70ce97935ccdb5b35c33de2ed5e0243c51f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a43b1bb69eb8375df996eb5f5cefe2ea6a9fe7697f1c6bfc1d84544186982aae2d92b64adf0919ce387fe66bc2ff82736d219a92bc7f54bcd74086739e8fd34e7471cacb41e1295c73ecc58a0006d8d4098106536bb482bff2ea11f41e17eca913d3eed859745d2bd8e637f643ba9cfa8b290dac3f91bc917d153e903fab99260e08e454ebf7432d3210eb33d468d9db5041419e8c2f82c67f928aca2e1b0267db322fc513b3a1a5033a8bf83ce0177406d84baace7863fa75f67af1b8eb5a41a6525b4e728b9623de00d3f61af1db60b88a43f03a327a26816751db9ef0d726cb1aaa0c91971359dd880eef7ddca7c02b75a75f1f01ca20b6e2f16837045a7e6943b860bacb70d7d4a3d8768a22365f5cdc79a7b8fb73365dddb8ba8546650adfd74c6696d79ab13670e9bd8f1d16ae81e25f6e7a4e42fbeca371323b4548b9c5247b0cff87b64b830a83ce0d2e6787a50f31296ef03cea12bbeae23a316d39f26295f5b830faed1876b3e403b5100fee3ef84962e55c70d2c98622d6f4d0c257b0b75d4731e7e380124b918fa2a8662448b7cc205140cb8462e9a90717e953b4ed2386240485092c7fcc0e866d94ce1b485f587e3eac1bd69cfe092db65cb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000073a1fc4be5d8559ca4f3100e41389cb06a4f453706923370719592abc8d411c1f60eaf08db9cebe94ccc70e305930cf434339fe45b8e8f9888d1e36c242f2f19e4c3b64592316b13a72e02f0ee77a96b282bc200db2e5265c3b122fe6e716e78c4d05a3f4c07385d4c8a660179a14bfde2594b1da938b226525b77f16d318b837ca418cd76f6a1da8d9815613deaf7a63928e74daeceec65a43634bf28015b5f281296802766ce010ff61a06414b65f41b506e3251dec93483bfda0d8580cca3281b67e58a186a50eafb9747f025d6267339c0c20758593b18ec5a43a957d77e360119922a4a6a367cbe6b950719a3d3b99fb1a780f7f6f4a9b676e6f8045f7065dc71ba98098b7267499291d11518f89d276d93a3900668418d9418a526218a2cec0dea54196591b2537d2c58cfbcf943dc611df6c405b98ef05eb98b3173d5b2071b0f8d2666c1b06a78aadbf0e409f836e4675953868588197cce279e8bfa75cad6bb476129ae6197163f0d5485c2562d8a48140f30079b5128ebdd33a867bb825f7682ae9ce780c6858987cb6081f4f61442927eb859483ec8a39aa956f0183d64f558f0753af65f458e4477029cc55458565c69007f3bb31561d7c12d500000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48402b302df803a720211f9fe0e881fea3194428c2f53754b4dc8e34f5e8a583b13e20188a61fa7312724b172a4df9343cad9a7f599a22078b3b3faad1429d0f3e7d1c6a3cf84f898210a09436142f9536d438a49ffd7d6906303c0ceb7e17b224c027345f416147f5ea9fb85cb3c783e0d0ab8abdb159fa40de79c879c8d94a55761c6aac3464620b56d761656f6e35b83a144b70497da554b54a28d03c955793910de9ab01d39f56efc9d2e0a4c2c8bd41532843e76a670d35b407cbf32e3ab43f2227bc76e931f6afb746998654ef1d40bfc8b92c1b87b861cb27fef64ba68e102bdea62abca3dec0944e2ab6407834cbcf82a0d3c13ecf78f613a7bf782c0f380f020abc9a47d5d179a43e2ee46f14b7f87f7904ad29ca6fdf39e5beead6f4ba10fb96484da46f82fd4aae65a22a30d9c961fb8d3f56172842a70c10a1b9f2780e3fa6cb7636cdf0ccee190dca0f02c758f09c0281437b3788b51d3ae8e7b7b902e92d617cb89495c22ee5ce21757613644f2beb435c6b595eecfca4647e8e0a2976db9a61c1268f999110d5350e1d124dd88fdd6bdb8bf60c592f044b848b89123f8a3e3fef67223e934fb348a02b2678f7ec774f9e7c2641d1f6f5f82ab3ab275b84038d2b9eef1a01728a727643c01e0c69da89becd73f102edcfb03c17f3089e1d2c91480cd6c7be5c4ac351a0b35d716baf65d597747097dbc9485d93bb11e71ee777b86480a4460291d25536fdc0ae0227ae12d9e53b3461b1372f68d22fffdc0bb9852665a8aa0a800d98bd8e34b90fe0371fe2d4df3a59d61b225eb51b3bf813d9ede123f835a6c9ca16682f3ae5fb8e6c7f0c3ea5351b5aea1b98351a2c62a8eaae8066ce7c317b2b04dd3a6848c9ad4a732bd8b21aa9a9f301dc670c636bde660b20c81c20996b9a9163bb62c05b79c0a3536fbca0f7435db3eee51c8884d59729cc3a0df4029f52872c0678823797d756257379cb6fbccbd191e104599bca824fc6e818d4b458873509264d914e4546751b79de5a822c1e28053a00b46b493d51924b182251d7f8fdbba4bf24413f9de187178ae0224a39d733da231b8046f6ee9d3052668a5af4c684dd14b1d1a9cd52e21b03ae983429b01f021ed13e0bd432fa72030226279ba863cea9a247e8b903bbd09616dd0558776f952b44fd15f6921c2d9d244e4199fe4225dad61d9a301a6d367237819213d5682425943273645bff863936ef75f7cf3c43d12869c03a2795cbac545b07324584cd1e9c16a8d3396c78ef65cb66650d8dc367d0c2e989fde841809436094d82139c251d6e4a90d2f18c4e4c3f00a6c51de7628641b4145756093e41e73ab0afbaef09b279e170ac5ae6721384aab06b18345dc03f9300d897e9a18ecbd14ff594231db4b1fb44388d27da1e02db7907d51a2fd30e106331f9a99496d32ddf7eb38e2884cdf69c3c5383fb0a0860340fab9b693de282b697f1bbb6183ab236e148cd1f290aaf73788e7c8d4c5f6bd0c27781be73442bfafe26414423bbe76ae7a4b71338e48553c7c665d2c4ed4d970f53f711a85872353b5eded0482d0dcd8b193b1072be3c8966471e1c8b36b29694b42bb2ec882bb1e4f31b5252d3841eba619f2576b8624ed2297a85493965635762987967e411b4a0f392fa8de2a56ed5f2cb0dbacb7dc02b020cb37c061cc44fe450da9b443975441fb06097770a55e4a049007dcbaff0c6a4e4a5560f55fa5c32ffb12b74afc61be1d26fc1b05f7c5ac10a2c55b2766cb30e0120840962a8d67fce1ddd27435f1eea6201d834b5884609c500a271f24e2571424fdef7f38eb26325fc981fe6758581fb662204cd7ee8de15303b464473357c058c5e0d3f261eeb86477914c5d1b21e733cd96ff7c570365e198eeb313d3ff31e9725542570dc4344b1deb6a8cdd5b3c4fbcca0eda58646de0bc7471b2c4dc2253416638a77030c5f12c37bd4d07df996ee0264ff1fefb66b132f0c9dc3d14115ce6cb68d0dc22c0e396fafaf7bd2a1255e3478eddb21de7616285f7c7c1673abbdea0bec2c1226a747913483b4503b2c0b406b44a360f4fd12280556b96cfa487d1e209ff9ea0a67baefb0acb1a9641c49b99c0db048e2840bc31e5d87ded127ba9f33f21d38b431ff2bd91692d837281d54376f31b6feb724fbfb884362030e3a165c5c2c9198d54e5a87dec8ebbd134cbae5640b86e449001546053ba12266f628ad520fa052a3e435dce20edc51e34f9f628d05613bcf14af4e9b75303af214bfc4313dd3bbff73ac8759deb713a9ca18694152ce7e3f2c67fb873f5503f7b3157ea6b9a1296c7e39df7ac3df2c04d427e379bfc9c269286b721929401a17a197bf8ca8856d111e6857d344593e459a1e37541881ea2e2a0b2e887477790a13fd6e92a336601204e70547d2b22a766fc1b09e777ced930d6c073f905253b5f354aa611c5969832c358d95927c3295e16da02b4eb1c4f01c2a10327b47589795f068186a5a2e5821a887d48e9a27c001211a94bb72b64c027034c5c994cd7dcf7c5372c41aa9302bb3baa317e174eb09dafc31d26c90ed014cb750535a00eb70a3bdb3b145d36c5c82cbbd1e4afc7d02bbb45257f31a6e1c1b2a6280bbc18636912a587205b77bcc950a0ffcda94f8c41f1406c0e159df2a11c2b6ee67a4bd3701eb2c32c88dc2e53c2ab831cf6c2d266b1bbde33dd5b50349b7dfc2cf5b0751a6e00d48204aaa4ed5b28bd8e573b19a0353f3f901b88f0b8027d632c90db46035c0f39bc15ccfde64b39ddc8156e49d263243839c819829e6d72d52f59d26c5802ea33a77c5e8958a76be191a19642758587aa02551f52c072f6f1dacd7eb78531c216d3a9e18b2ff6e413b9b306629ed4c9449a3b85a4021e5743884182e2bbceb10b32bbe52e0af20eeeb0f9f4577df1567d50e30f5201971922aa778400b1a291951bd9c6f4696bf8fc535abb89052dfd433ac9ffad12e1428f6c2a69b1d324dfc4a24304245dab4c9b6a607182a272aed8cbc13bacb16765fdf09d13829bf2d7a7bb98a60aae4742e9d823140722d739463cfeeb0db1835ce60ad6a58347a7776dc6ec9624557ad4ce5d7c4dff23d02fb72963313280857683030d069b29fce61173396fdbe17420976b982aa0591ba29ab0e5efeef0de57075b6968fd3bd58192e6f69332f9997890726bbe317f1170395ef63643e15cfc6d9d2e14062d44842f1150f89df96fc2ceb57ab75afd5cb67124dfffb221c94b9c4ccef27b734d9fd73a5340c3cc19b468da7937e493fe2ab61e74e8c172d04075c5088dab3e8db6d63cc2c377557d1a73c91a5b713bd1e65fbbe53784f167ec201c3767a507c783abe984fffc0be8d671464864cf7b09c43fdec318ac70dcd678a73149c493bfc65ec05025425ff4f7c535a56e1cbd1a7e33dc1e636a513c24870ef5e9c21ce94cf88d6fe8214b92a31698795855f6b4edfcd0ca25f8008f4e42152964b801819aa92044f0edd750083cdb5ea9e018dc5975519905f7a096f325926d82d2ac3498c67c651470038f5490240f83fed874a4141d6d4c5a917e436d2e11a562570f85ad6fcf3f5a24d91b25e9f03e0c1028bf8bc651b1cef0c937ab4626b73e630c9638b28d362c196df30800e97aae6f47f8ea4c85177d201dd72355245ee8a14f4f1c2546592895e85159f34426aecd9a6dd4e1205399413ca29102101f70996f7b541c2b9c2544da9653b58c004fd6f73891119e2f8a70f00ec6df178eb71362d800366c8d8cceed16473dbcef365bef0229c51a079140c4101f45c3f4383b90d3322a0cc6db660558c51a1120a5f44935ef543bda1a7158b3409e0617ba51da34b20b585b82d7c109fe01738cd095bef0433f56b31dc036a635f04a250ca1e4ef129b1255de8bb89ed7f225aa9c3857b1a4f2c68077c02951366cc6e6348d9dda11b294f8e145c76b72c0d5cabd036c1ae4f6ab4c3e32bb58289607879978e31e1325d9cd17c113cd257432ba3900726904fdd6393890d1121a2f77daec6cc3e6a769e523988ceac0d217d9aee9fecd01b665ff48e7801e99c34dc49385a2a8c86488a8b7a0f9f82cd9c7236540de0166163c135fbe31946fb21e8b470a1845d1d824e1634339486e131916c3c27220f055397e9095716d400e6b79a15bd2d53a5d7ab559b8c7b233ac88cb62bd8b1b6fa01cc2c848e200aa2450069e7c565df1b3f2b1a2a98cba994eda17440f8728ff3e1ae3ad94f2e7641936b609d3cb8473363507c489945286d8255d041c2db5b47f3ee39f156147dc5bfab30b48d53d444589ef27cca2a1c668cd511e7dab858a1dc4e4de614257223d306ddd0c9870b08fb3298cf37b266da962ec7f3fd4c26c6b475e5dfa906cfd438a3b093a05875c06999910a96f3b2fb9d84bb07debc7cb3b75fa8f4ba22be7cb2e1331468dcccaf1a7b2a69517da8ebf3e0d36cb432a976d941b297f312eddea68c7f57e2a807c026518d0c4850cbdfa05298e92c6395d3c3e58126bb204647ea5bf74257a8ab6bc91feac88af39e750573323ad3a85ff768ef2dfc9527a85da71a7d6ae2da7fa21076931a59826a5735a4b6ef915a9808438fdfc8b528ea831e17b463b746324bc1c903d9f04fd9c970e2657f23ce6626e16563dfb716b18476fd9e1c8eade0797180a1ef816413be8cc27aeae3f6034ed470df0dcd00b183fd330d8a426c2430dbb31636d215aff873b7a83deecc16bbec25cb63d115e543fb47881e51c9afff250faa3cc047102eff27660b1496c3b17cfb91cfb81fb8bc9d1261d5be47b1402b3cdfc39f37c196c41ed27aa43ecff0a6baa8737907537578c3320fd238a722ea3009ee2a2dca73274ec3d7b60505253325e3092725e84ba79be43b50db3e88e674256fd568b087619cebdffa4dccfc55d05ebe4d23c9f0cfa6b89cb7c676ec6bef38e4041e2a89725f267caf48d56635bcebfe152322e47e2147f46f0d0b68086b0154f5ca0031a92f44458548b6b65b52c70bcf009dcf4ce9afd6a3cef95927b1095498c28cc3369f6b1085f6344315f4583d4f13b8df3327e226db28262147d53d1b5b3247c27db0ffad753faeadafd72aa16a24a521e6bc2fcae7b35615ad7a6f45a5f7cca36038983190e741c2e1c1041b321568f38b0bccfac24b4ffdbc648177f39495ef8aa734523b6042e87b416f0ec0084d79607cf1f58fc35a24dff6a389591653c33e1cf876c67f8c94533b46345f138fd23e2c7b2243186acb4415cc50a1bb74609d15ca9dd4f01d888cdabba27a054c5f7f7ee4edfe8ad6a62bf4f662475e18b485920cb8434ee3c6ceeb4393e217c55ff21782eb8b0eb1ddd8c7f034f1692fd1923ab585c368689e2aa4201a58077fddbc03e102f010b396b3df262f6dbe7d50679800d7d0782a56cfcdfa881925412dd9ae25f0e436f4ac4715e0c6d73458958beaee7c9d80499cb8841f75b61021c0fa5e4ad1631625e93336176003973c625be339fede9d146d866150c0902515dcad3fb9195cf181040aedcde4781e27513e5a1691c02eab12e2605b753f2cfe2ac6429c2675586e3657d87ec67e5bc591a7400a7e62d3f993075661d2821225ffc51cbf534d85c9b282a81b78fcbdcc794aa74df31e21a4ae07d26fcd5c1675dba2c65f1e23ba008ea1aa9d35475c7395fb09274fb4763fe7c046fea5431bbe38cbc3e4f5e077bc4f9c40af2642bfb590c76a55400b457dd09166ab5f022d12e823a3c5e25b9fa360235f82aa9f7900f52228c1ca5c3b742d948e9d51d2003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000008118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000080d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000080a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000080b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000000829a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000008141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000000825e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000000812978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000082daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000008189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000081159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000000805ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000000805c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000000814d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000000803db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000082ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000081213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000081ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000000814fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000082b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000008305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000008280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000008223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000000817a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000000808858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000082618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000080f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000080e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000008172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000080b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000000805bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000008137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000082e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000082297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000082608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000000818373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000080422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000008204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000080afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000081998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000000828d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000081da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000000821d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000080ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000080e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000008107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000082f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000000809726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000000824f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000000803c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000081fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000008205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000000825110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000008283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000000821cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000008094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000080c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000081f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000082421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000081fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000081bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000008304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000991af6e41786cd2810f93f33b3e284a190d5b9642ff021b3a1aee38dda2821a963260509f63f981d6be9d496455f0fd238056b02cb8727c36f8fa7020819c3629edd08e1d7b3f7177e61da2775e72809a2d8cb4ba93bb03c57225a2f09a57caf0f17f2293fa3caffda8b6ae897f0febe5dfa4d92276d19c1bff1d1bcba29fc7b48787cbeffff04c52e2580cf4a4b062a9ae1c364f3fb1faa653fd57f997b47fea6fba702c581f8ad560153c45a2ec2725c567f18aadb851682e97fd92c39db728f5717b1c01cd9006f359bfd8a86c0661cbd3bc9cdcf2f0039462615de8325548bfd2734088aa71a00db5d9266a4d77ef586b35c6e200e88cb138d12036187dc483e4c373fc5bbb9ed1d416db15876e288fc9a8257cc291219773642444df327999073100f763d3cd4d834b97c0a4e9cccbc9c32e29d6e729bfc7175637576290e95e5c016df6cb4434e0f2addf0883d21bc762bd02c23a675822aafa1952d97508f6c4d7bb7eb99e39cd101c13fe42f90080761520a91bc3ca041f17d12855addc0524b42d1e2bfe18e225e5ff5ce128e7b1837d8fc3dd5c02afa5637f42dc7390d16e8243b235908bba93cd8622ce200615f3c5679d267d17e725b2661116600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009fef7530937ed0fc4427577ccd7f3543147befffdf99a191f2d648a5fe8f47060d6c8b9d690f29bfd1d3b9665db1ba83f7bded79fcfc6020c8f7985a0520a8453d2c2ee96c4f7827a70aeac56eac5965c94aa55d3544492431e18d7417e66c24a0db45f20c71c101df316e2f48e75ed5ecb070b4c7b3e23645e1afffcae51780fb07bfc0dad47d63d41f53df93af327b204c81918e18017536b382daa830c9ff00dccb9f78cad0fe4ed3cb0ef9e1615899421164f18e95dd39162dfeebc8ae94b6bbbc95e5957e1acbd94605001a0a516a47d26ad6a311872f1437b7270da0be10c2116a6e97e38901c2ce53b26c8952f3449fbc57de2cb4d0518469664b02094e362e86432afe7e2a8be24f2dce15dfcd4a29b075af2da9986bc27c2d20212690cc0021c4a89c707a1ca707bb83a573e1476f9435ddaa9159c71a9d21b4477cfda7286cbe9123afc4adac04af6de0f63ecae790a82122874848f4f1a9cd6566c24c10fbd2c1c0b4179ed1fe2c9958b821d7a6fb754549f20ff134976034a91c42df7f13c5567bf425e61cbbb02507f1df61e0d75b6f1b4b1ef87979d6ab428eb848db702534b7304d149b1ed3d649fee0adb4e049f26868c9b85be6f39f7bc700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ee6c87616db0a4d13529ebdb5807bf2fa01a82ba6aa1f6674e81bad85f4cae0fff67c7d50269e7aed0c0211f147b2d20e90e0350a70d86c4176cd30e446402ac3239f30a346eb312b4ff1d808f33fcace8a7f695d4f4ed463eeeca1cf8cf5e37443beaf61fda34cf86fceb38673656feb83ab0fd3ae6922580b8c7856052ec45470e884d7f8357b9c151fd746ddaa307d5564b734108fc7a855bc9ff319e0421118b08d03ba152e010649b7e79e7669728b8004cdca03f29c92755a913558a4e495d09518d9e2278250c23e884ecb6a30ddb04cbb07e81d2188752383d658b9f9a2dd2b94b1fe8646f0dea9e90bde3b0eb3123da5f2f62d88094d560b798199d39c53fb7c4764b62ef862894d9cc843ac951f3b8aca0a9c3c545077307ed0348a456afa550f1cea09648666156031b3cc845d23bd868b5211ac0391fe3ce1711e0a6dee9ad7e62ab0f60a422f5b53ccf66fb53c6df13e0b5c30df8a0d682de4227bf4f86bfdedf09ace87c177d1a9abebf2ef904389ddc435ca5353bad22cbecf9c1816fa6bce037a678cc3955e40c7e1ace285e522c25562516f5302d7187deae18448181a8a6dcf29648cff4bb72ef0b897fa54f0ac8969c4049033a81c390000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000930644a6370fbc43e94aad238eb19be8f9f6cf4cb8996928b7b748dd12e4e83b21c31fc5c7ebebb189ff39482c3e39a45ec9b7ba24807cd97bcad18050f47e8239db834523607f7ad98b862218cd3c5ae843812ff2b79ae970a86af3cc665ef208870f295226569b56aee0e01c1f9e52903c718f349eae43bfab49366aaae548c233159afb77340921f8fbc424c877befa3994cb01dffb177e27ce46a5c1afc5ccd165ac16207a80e9631440ba2fe3939b94907d4c47600121ee7a039cc4dd3a5582418b9c3b1bbddba7c7e49addd4f0ba666d6f8e8e86421da95d4ef6402bd874cc081203b5e91d9f82c8a4d7e25583f5e6afcb37d9aa6c9b05d8619985063af6b9939bec83f58635e00914b678efb8ed07a4e43e5746e053a932a3e744053bdb60ed748c6887dcbcb7ae542ff5ae4556c63a1c895aa295b5da28ffb48dfbd43b6232ce07e6da5e01bb417527495ea8093e33c82b8638ce8167dc5f46a5e0e23b7b51def05cba6977cc1e79ec8e05bbeb164794612b5ceccca59a2f6549382992f2c63055804437f7b248eb7132e528557bb69146099662d87924274ce40c7164d221329d97a3f879769697fde6edda0397dcd0c9be57d3860daff99b7a1bc5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085ec92b294c8c22130a252c641e76b97aa38d5c44f569fed4f87ab4ca119f9619464a223d693c4c2c28467076a092f60c17c439cdaf73c8a3935873f0a62dd889e2541489bfd5087380d4435d8cfe4310d48f08b163709757ea714ac30c41acc3b6dfeaeabde38ff92320cd16298bf914164c1bc36b33bdcbba1b38f7850194951974e1f77512498eadfb1a88ffaa3eda21cfe2a069c9bb1aa5b43e69efee0ba3b6e15a7e918643aa6a3cfbd1d20bbd194135db7289d38405402545962ef1cdcebbc1ded6c872df75f199f754857e810c856a085d3c467023e85fb072bd340032d80cf9b16343ec82954afad77bf55fed2cd2dddf7f13ba09d74d68b3d4ceb91db011828b88e9e3821276b275c73d3159bb0cf06cc287d516a1ec4d4ea1b2ed65900ebfa99f03a6379c6cc2576845028096d2352decf1a1d0e7d9bde2ecb610ad5d3df7c90e33582dc52d5c9eecb73ff8f2199eb6870e7e8802ef3cc09d2042d8b3278f56ea60893b014fe92548708225d997e08188bbd71cfd51f1222b4b2f2fb6b592a774c07fde57cb3b6cea418cb84a8e425ad27df1120fc09a0cb813e03088dcde2e30d69d397c392f090de34fffa482758b61b122c1f184c2d2f0b9e3f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1d2d28fac6d19d80ec02917ab07b68fb0b6d2f56ad5d188fe74160ad6da0c4bc5e8bb98d0424dbadac03d941b10fc358a3812276a636bc16a8d363b2c4de15276624f90807092ce39be60f1e41024124abe5bb546c0603e20cc352926f979250a0783617a25c4d8226d67dd183d4abd491325059b1725cd5a1c11e9c40ce0596d7295a2b1030653d752adb88ebe3734de08b7c117b99b1829ce5d88bb1ff11555b2420f23f6c88171820be69893a65c942dcf82889a8cccc075096770e846d82d1531e3b8d9d1187b93f4dbdc973ccc1792d0c5bbb557130a7cb0622e2cd535b2354d7ac36831c4ef09a6712cddc970e660b9200d2b33af956951d4f5e52b092dcbfb3500424df02f70700a347fc2d0df0f9b8bcf994385f0b03d1a2191cf43ec048b8a6f71e726e4ed87da67e49f632f35df4b02944b8668132c57dccc4f512a90d88cf9627453bb94b5861d9b71c97d8031482f0d55cbebb05da748c50873efed558b127db57cae4c093e995ca070c8a231a0dc01451a299f287fb1a119979b4e8103adf5a4923b0dbb65dc3da96757ed801df0b9f5b06fbdd95f8e387c145cc56944818d202d69678eaa0338c64d7cdb251abec96d31f162aa3b9587943d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004536a7887744e6e00082f03d9e898f70fd477549275def6a6cb06a6127a1ff9a87c688f4d88d0e116a0c994638b8088713830de25e1910f9fa397b8b108a704d55aceb4843e695b1ac685b520c7dca96f2d55ead4912698ac60570b3a4ac1b74c6495193324d481847dd8997e8193d6cff511b5f9a225b8924414bfde4b91d70a5d6502fa7f036c89ea34951af62d5493943da470048b44d3d227d26ecad1be2458ba49fa94131f6b206d09770aa40d9c3d191d8a92f1d04fb0107992c1a92c7be2ee42c0f378cce6829d4f33f5ae88e5fd4640295302cbccf009b3aec4d6f6bbaba56b0e4d0c3d4ebd0ed7aabc04273d748388221d57bb96c1fd1947c2d66f7f37da1a74a8c7ea03a709efb150a59d60a106ee1a9bdf57346a1e499f0a3c2e637f476e888401f31f46356898493e9c8269be02ee416bc7052ff90304ec4c6df7ff6456d1a0a14fb592438ec7053e7a59ecb5d50b5b93d02080353df21f673a313e4aeb8ef245f540e4056ee5fb9f1244ea67bd0ffcc8b15470824a6ddfb28e9ea84ac20a51be016aea5abfe04ad8ee24be462eed5a76ae1ab58bc902a8b80f90122ca6f6848c6814f01b82a4d662ca00ca36526d7b91cf32a9b1d87108c5590000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000947e8b3ad1cce91457c6992c107a8a5da187c095e0cefa45ffb092485a7dcb063b13c33bcd3b5211dfb17cccd93ccc3744b80294d31ce5d661f2a2a421c81e4b0b19dabafa85567e09efe329d09ef7dd8fce395b6cf7108268e19d1c9f276b6d03ebef429339a6ad9a7cb285a3fca13efe17500b30e22d020b37f772508665dab4d2f07d8ea08ee41b4ab975efde420a0e7ca26987fd9ed2f922675cbd5b05935cf1914b4536c38632e7aa235e41cf61da0b300850fb271ac2abbf032633ee6cc7fe9c2822275393a29609a87d000ec8ada59406a948e6853939221e04460fb54b3b25773e5403f5020f06b22db4d23dd59f0d1fcd4ab4a20bab5e65a5da9f663554e39343473d1224207ba8c75abe227edccf22dde8b5e4dd70dfc7ee61b452d29b6e89469b5c5edd916c4fdce97c076c1f12e3ba077018d4f3da2054c6175e692d78cc496456b01f8b5bb145c07ed9f29aab8fd88b3feb3ffd7937a5df01a15a754b559a2d773a0986a4c793d5d8efb8f934b1fc9b5c9f3b90859b5dc7432238805944aab41b8b0ebb6fd4a1b4afd888de8c27fdd5ad972fcd52d0462bb53293b5f9b31279be80cb74a84b545026173f840feb91f27322854ba9347edd4bc50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000287cad947a2b9c649571de78f032b7082513cc29679eb55ac6b5a611ed375f895cbc1e194dcb44d496d2ffe6c92c65ba7cc97c7976e7292112e98afb45c7ded0f5d1fac5f24bb0f1cc90baf50882d1cbedc33c9f80f4edf17110b663ab8a45a5931adb05ff72740af008f30993444150c4e59bc6da809439adaf54cbe7f7aeaa172464a69ca2ecf6bc52eee69bcde0b4705af0128f4722f2ff063f142b51b04fba26ac7e0fedb66b39cf857cba246d43bfeeeacd8ba7520d7e42d0ce0bf40d3352d72a558ae259138095366f9295364efa0d2b9304482a10a17eda24884bada515598eba967ec2740245a38b633889b730710997b2587da029ac897d3647bc15a90b8397cc3e469e29923303b2d04585f0cdf6893955b9a5b659b4322db65089d2464c975f80400020e90b1dfa93ffdc786f3a02eeb01504075bc5a50a57e480de1ff1571216e292c996ce803ea7f3ef90dc70897ec3f1ad5749d0dc5372f29ef976d36eee12eb091a9ede04d92a6430ac4fdf5d17d88ca68d231ce03e483c1fe19d97a8c9f23f52a466fed22b765c673306b5f58c34f58f533ed8498f75ca04687ce8f44e43f708a69b5e97e40a242aa08e60824688be1c6a4a2afba2f8f9d0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092ec2865aa559e617a04ade1c669b290e2c65fe18da3eb0e96e139b892897266f4302ae8e89fc3bad26a56a79d292dccab1fb607cbcb6a95adcb0093be513cc1ee4b9ed27e3a6226557ea30eb914c00e3028ce39bcd54d38cb0292e425a580a019eb06eff0d0cdb60534b59650e0984e3769c12fef211238cf9c6fa46a6b538af409b3b66bfd7a0e0b68cf06173580482c4f2356af56d1e016c20661ab1c033c5b6adcf7abe942711499b73a07c99c5cbec4c1be5b1d6e3990805224b7c782f07c49caabfe3d5814173ef9d20e27356c0547abb03729cd436adc62270aee1d6f779c88a4849fe2f9a4df4ee6e169e27e2d8dbe8fa2dd300d6045531b9386a7a839723397ab785126c8a6ac59af9b7e4a501d1a2a6dfe167f12ce1eb762c110448711129fa5fa93745e26beaa5ba55dc7b5251561fbed35239d67c483f32e6cf229e78948ce06235365189e7f38cc9942094b4a7f4550ea9e46c942308a6dd9dfa3abbc663504f97fc9424de2d89399e0287a21a590dd438a3945d7a14b0bdbe7c57480773a00503aa80f6023e4ea12aa47db0523a45a7e89c294552e251108c2350e5645a757226bfaac76283e1daa97a17793fcc4d22282c18d328535a4968300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d9b33a21c1afc6150bb64f16c20924438531ce125c58da438c677076ffec95ab2081b79077f7633afdef20ec68974b3bbb45d81cde683e357f99d645a8a4a8b116d2093bcaa8f11ac55935e2a25ca54532129345ce80c308a07b4cdf86b0efe6eb9a7050726bd345685d2e79613fb7234cee50a4e6549c2171607942d800a4ef3f6fa9a58dc543662a1ff0b62e7da9b31fee655237a2706c6acc2497fc3f0f8afacc59e581887e0d0aecfccea2e2e9906dc1433f46d6707b0c744cd8138339eda35494de884659ce7743d31c7fd9d9e53a2a38a5a93497394ef005854a2b3515d5dc35d5245547e9f1d02631d1430b73076729d3195bd698512ef1bda517d7bb2dbc2e3890f7e8d8a2cbaa765c01ddcbc0b1ecb40dd96231ad3079a99e960c8feca72dde415d5d71d4282e911ddb59ea887b0041c5cd6eb98e0456d66f2a0f6ff21be4f8e42309ff2469d99aae344dade80726f2447c7ef595f2b2b7b1ce517a640a8e80fb56a8cc375340af9fb11e98d6b0d7ce220fa1902b6657efc6dee0168d6b50cece0122825147ed399c1fb0919d5158211f7c139b07b82601d7e736d159cd889eeb68a290268d310e34fd6a35e5862ad1a656b0e57a9578dbc1338850000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000839e0ed02ccf3891c98f183202d16f441f535ca589906072b31a1edf98dd92652b55a95c121addb78899527d2441fc5067ab4c8c2f3b6d8fb7e377016aa83e2c81b0bd05e0a0182eb5f955d9fd7d63ec6272e2f18b0722e66eba754cd30ee5ebc1ee67a248b93479b6a097864176157ea69452dadbb47ceb6a94d495fbc919e4df1884693462e2d9d6bf4a9b19493c16c2ef3538e0a4cb0169e70258b24fe8ab6ff101739abe77e78e0d9e429aa4b03e90f1440a9193b35f1fd16b2fc56a1ce25a2ef079ee7c368dc72bd3b38bfce60b00832c857e2b9816ffd2ae2406a327f2a35f69e8ba50488fe32690448de1f29959187d1aabd65e020eb2faa9bdaa08f5c6eba7b72b5a13a46df0abdd98fac115b666bb550e931bc58bfa7dcb103d03b584606e5971ac08d7fa1fcd45381950b1dfdb9c51798dbd0de8b34d80b4f6db49dde821f992c6cdb692b4f0ddfd631629bb96aeb75ea00c7b22141333b54098675b45ff049fc28036b2dc8c1b3ec663458f55f069d2b50dc2f63cfa7a9c1c25f35b28245e13a2ee1b83537eca7dbb72543ea3636f410da60a4ba64e9fcc129f791b70736f3433ae07ef7689a29c38305e4b41cd250afc54ebd73b7f300fcb711600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e640f25962aa7d2c147e068423f0a7aeacfa22f9ace900d2999aceb981412bf21f2a945a2a1eb5175aa8bc926e87a5a8f6e4264a5668ac4d8ea131bd264a9b21548e7c2042f22f1d7abd58333417b3fc71b134246e2f3dcd425ca3fa3d48c3d98d0d995e44df78c966d1744b08d932e3f4e3d3e4da717f8fc2e1d0c9402c944653738f85267c96274231a688ae0e62113d641db6c938257db7fc60770de3b2f8d1d5349165882ea03d7325fec044c59e5ec99e6f76770c27f477295ba3ff00c47354b63e249d8db28e9b99b643ccf0b4f8d1c4b2f4498af7214c786d7d9d613d33ad4c3ba2b9168bcd00ab41f73d98363d7619b9d42d17313924c240fb831773e02e9b4f17ff52de07d3031d99bc6120650917abda8434b2b2f9818988c192a3ba9684752b3bfb441f04bab69dd223830b946dd26c9b9a2382499e595179fc043658cbe41a81d6f9f2b1eb5fd934f227a834ed131e511347f6fe28958b37806d63ef5d90aaffdbfc629d2477986fa1c6550834e2f369e5baafc2aa7dd9432b0f2646723e26c3b7bb3ccaa6b41cc5b20c266083089f364bdd970a9469f45d94c535374f89adad0942a2a7b8a88e0afd07d89a33500c62c9b3243173f5a4b304c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e006521fd20eff51fcd15c11923f797094826717c7b0c4751d380b00cf9511d59bfe0d8817f6d956f7c11573b85f6f66c3b06847c279e631acc663b727dfde69f982ed8ae79a317503b0849f29fa59402fb4b3c4e8541d5e0e69497c72b66813eb9ec3a0151a679ee57fa7a01af92ea204491db572ef19fb1dd936444f755231f29ffb0e375934d7739621e76c7233df3801b3336cb50626c6f6220a39f42277079a31b89faa06df171ad6b8f0108352713547b65cc7b97cede4ac103c38b78fb807c6237d170f5d2dfec19c8024395a604975f1294f2197d3240f06c76ebea3caa2b3afb537c84e8cc2e49bb59b5408fdea661c4cde00e071d1cf041b7877c213a38b0ebe736a3beab4954626e0795ceca2420ed8628ecad300cc908a741c8a6b7d893135311cf33f06af0e4eb9183077906f05e249ac818f55a562352ec522592c65d10630d1abb5dfcd64b9b93dce7c1c531fd035c4b2e11fa5da6930f3dbee4b96c3f1fdcce09010cf8f43eb6f6dd05c51610769d10ba3fb12700b3e59548b44281e5ae0037884d4791ad73ae7090670b7b622202062592b8ef1f0ff51493b1c90e5ae389cda11d7102cffc23cbbe68289b78a2d9ab8926fcfb3def86a700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c3adeb0a3093f3501d7b66a3e6c4d5b04179fd96857e1bcffac6847583ceb46f213ea5da9c511b69ce6d62ffbeebb2a1c3041aa02d48ff4cfde2d044899680f7cd57e9067a1fe39730e02dc1dcc4ed9726adb0b1b81f349c4708ca9e6ca1e73a212c386ed07602ff3f1eb7177332c2b7f345dbba0273d6d0d7d090fbc1630a00eb312b7398e5d1c3c12bac0e70eea06b443a93a2936f6799afc1db8fe1afe9a71e5c0c5257443101c351549ed47823dd1cc27874cac58d5df1d3a63e90b07b89cb4d3dcc76ebe4f25538062a5b01539b501427a65bf01ec91430fca5223a37f12698a5402e98c8372533e145a700bfd08e659920e51567175bb7f33ac71d43cad4d60e6893cc17ea212953931abf7cf635e22c9d6efc9f45195790024cfe4670b27ec9cbbe85b6b6880c8822ff92dc2e2ef3bbdc009ec4e4de45d6c025a8a74ceefb3dfa06f3afd25d400c708b3bfd8462f1b08e18dd6b28418521504320c17177bdba374f53d67387a5dad070fe25067f6da6bcfe1f0bbd55995bfb2985bfa4192bd45df5363a39cd828a551db3e091352e7b3baf02d128db07e841f4be5ce0f0dafc44902fc7ff79b56ee2d056cb25c2bb31119d3aba48a1fe283a763588300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f8b4e732d029363024cdc5abf66d387444f8b9def8ecb12c8ec7c4ae5f85a2c81b9fc46ad26a649b36dcffa4b6d62ce8f3f638fe064bbc5d02a3520188c9967e5ffd974bc6ba5ea7f506c353c083858ce3b0a5c12e6b73ce1e117de3c06229ab35e6739d65f66fa15434b2fa7a7812b1ef94e1325c3af8173af0dfe63632d332f0420716ec25c367597c746d7bef3f6a2e0b07ca0493988f2de4c110548e0deedeb4d59f110cbf9f8377822ad604f87d4942ad5f7e93ef666fbf7cf1400df4eb719a3ce25c579a54985f615b5f347120357aca733b8b780770581cfbfb51378b054bdfee2e2164ec7fc1fc8686e1043bc46cf37de6aa7b6cd43310825a5fda59beed253aba081a59201b1c5f3705e2db66248fc7b8ef261951aa9544a8ab8a00ef95ec6b0329eb49adf2ac38f6cf4a0cf4b934963fbc6a76c208f44d88c24cd43ddaa51bba9058343423f722c03b55c4a7dfafed2e9a872cdb485922a8606ac06d7d71d118e90f17acf46557bed82bfc1d53c470b0d6e724bf3d6f3826483fa4587af75024f2c1b2db3885d185b4eea7d5cc4d49c4b34f73f57df49d04ce578aba78e6a961e6c78aab745bd0ed54fc434cf0cd5ac8daa9042cd2f72d1de709c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ea576c7cb3011b45defa9f305222ebebd29d5b29f3e6e5d5ef64fa9857c2046a29d53e3a999e133d231a04d35c333e5e4fe271ddfdb89f447a8d8817a0c2b040d004626eeee09c23f4418ce87de91eb70d72b0c395083c82f584b0ced2fe70d7bd37c2b96729167780abfce6bb91db54e92ceebba7fd3344ea0123a38770a4cd234e563cf664a65eb850d60b6d49762f8f6d3c9ed5b3c8354f94c763c376bf297f2c0fcc209e9ec13eccf3dffe2ce299fc84d4ae4827c4591777d6cf16db2cc348ccab60e44b096fec2ec7717e836dae8ad5f4def1413b4500c1e686ef06a1a361ecdeb3d89d83368c14b567d8f06a32eb27525c254db219dacc710cfd10f423cfbe94e0ca4bed70ba6b7445794a466dd922b826649ce431903a3f3906406787319b7b37e0671c6d76021245d6879cbb5f72524e1fce37f780055cbe90f9e585d1dd0283517b863b3fcd515996f9e41433fc56f59bfa3adb0c8ada8b2eccd0634825a4c12dd457f0c74185417a7e40fb2db47c145abbec7960ca894a31f369a19c6bdd474e759f54966f590ce70dc07106eb235ad053d3ae849d70bf37955a6153fe0ed3be8bd86c4f9c994805090d9e887dab5761e10af0dd28065087374e3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025525341b279448deb74cf10767f41a7efffda6c70959eaac9f6d517f3d13d4229866d5d5438a4fb524d2c9fa5bfa759e0c56beb195263248d177bd3474391ea95b2e10fdc9096f7f28fdcd9449013a978f282fabd5b7e9fcb7a70dab80cdb7921f9a59422bfb32e2f0e05b91d4ee51b873be4364154747a7058452ef1cc8bd58699b9ca42b65c3e7c97589625ce9000747f3ad6bf2932337b6b10518fe1231ae19241c524d0043add33ffb14b251db0caf30c7b74cf60a1bfd3ab8b4d5ff09f5caf951c3e9a0695bf1242685ff22497448a0d7a457d29a62234fa24b7e7469f1f6b0521a1c0214419ccd39211c9910bd1288ad8a68ee90c6ab48c379e957b5b6f6330fe2d055db181a6a0a97a78ea9c0de843f3e63843ba5a0230028edefcf6419579dd04b61431154701a49ca47145a50cbbe1e88c48f071437220655d0916fc8928de23f93bb0ed630c94c89364eea6d28fb7c1f40f9d14ff954677dc819859a5c0ac443b902172800d36cdcfdca804150a3611d26a27cc85f849feac15f781a0cb93e8dd59ffd46857a80e04f5b58a94ef8710e723a6b65ec7bbcbae4ff2d1d0747f5053d21832d585d00910badb651a66a4b7e9bdec3358e01b579ad715000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022805fbe96c598a704fac69f814c447494a9dc1389a4d1a7919eadaf7c1b25d17851e0bdccef8ff661f8734cdde5af7b809497ed535b4801aa33181238e3d0e3564ea6b3d38abbb20444ba771b56a4166e06ca1f34dc5e07d6943f666fb268ef71ef04315c4228f1d7f5fb0e8daa3434edfaea50835dd7bb009c1aef49dfe93cc244b285e1965e0871eb214219c62e8eba9b18eff579c2dcaccfefc76881b234c4957e9df8cc2b44f5ec271f5a16eb333512263264f3c2a9fe88685991acf5f2e1bbf8935f969c78b863741bbff2787ff176946164c7796b8942225dda642385e01d870c6c7fa227b4970270994ff32676138661c58f029be90a725672a2036f33c4ee3bb54b27d1395998d56607abe320e5b5515b647cc5f1c26a5e60eb9655b9ef62728a2d820dff3f98e297783cf2692b9f847c741a34b7a14e7cafcf1392f338de62d03b99b4ed0533cb1e6ec20f986a09e60dddfa64fa87c5e34ca4412ade99c29817d7a67614cc5cb9ecfa2f55ad4ef9b9784b1ef603f1d56b9065db6d4bf65692f7b7e11b01779fe93f14fcf8012e330e0e80b1070db7358042802f4f9de59c45168557e5ae09e89c27d42214c978083e85e25df066249f47203e40fa000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021c93a5994a16eb5c7018d1e1e4fa72147d0e4358e34607ebaa0e6d11fdcacc6cd837bafc56fd464cee575b0c940390d4a262516113436ad835cf186d6f5e4fb5f7745e9f44549a3bab5eff7a387e81d0b54944a76a81bd436d1b873bc5aa100c752cb5d38e16b7f7a2d264b323fc36e5cc9e7f620763cc43dce177aec53a67807fcc097bead79670eb67f881ed23e082300de8439eee71e14148196670e27356ae7fc4138deac0d2290a7dc06f2fe539a52f441b0dd570bd92eb0aec8db9e09695a353598b20e63cf550d3af6a681ddaa6428229cf176c90d5f7d1123b4b5ce12447ef49129752e7c701faa645f94eef93ba743fe91c07e4d04e121b6e9e5976a288e1c35789ed3111e8cd15f00e0cbf149e1b83480402411318ef12a26039d077aa470149a339bf34b6e2c69999ec150f234d498d35e4df580e6cd65fdec25c5a6a2b33313caab374a27a552da5f0222ca1e79988ff9193c1d38ea1218ee584aca4eec6485f8cf2e9074b6f6222387a0aa3a5202651d1f6904d1f3aed31fb09f95adee8f7f00425877ab2a4bf07a76c0790e7eec7b6cdd2caf3791ca5e7da4c293818e609e3e7948b88b6d181d5c028a6a31777423dfab9fad78a64162fd2d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e0debf40a5f825089b20776e3fd5296b39a06d623ba71b2627059dbd024e0047d9e9025a70070d62fd472cb076f73c3a6bb9faf9c54264f5a11f1eae06c506733edb50d1bfa3e3928036c67b2586ad23e8793913628cf63adff8d37f524412eb994a1f9ab5fa431d8f96ca25f2d79c622bd30ff4f4a14f7929024fa41cc959fd0d7f6526fbfa2bbe0c4057169d045142319d1b972255042ee36623b43c61ec2ca18b54db693ad1a62dd30b786536cb4c9a9bc596d64938b071e821bbeb158f0cc14b427f755a624592b72ce2837b5384f76733d54a38f9e26a616cae2c3dfd2b9333179c4f0fed198b3a8d6a7bc24194f2c54b3f94eb7a5473aa7026817bcf87f542db972aafce0dbc307c7a3da35b87c6e9577021181dbbe4834d79821d8b7ab6632ba1c28664333edf545e597f4f362d294a6e94cdc92bbbfd9a16137bd7a017f0a10bc2362194f073c8ad8f66f36e7e05c19457ee5ca85bb7d17c210753019f955b76035ca441e44f23d0fc5779b43cf9ad1ef7e7e6a465d35a6d716bc6ca563b1cae0daf88436f16430fef5f0468384c747d76be8968ace93a66ed8480faacc5c55678a7ad1a272e89187aa02b3b493a09458d985c2e0f9cfe9885a30a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d392ac0f4a520dd6034df9c6351184f9fc676e173fdce36bd033de6185339b4d1ca01a65f6d5abb80234a041faaafa33dce6d2f1540d7dc8b2e108b1cb04a56f681431fd892c8c61e413ca5f9dc8b693003a7d8f3f5749b788aca3f7d702d9669e12d288cfeea9936ce0c781c71b55a429dfcfa3481c3e9a874cda365d9fecc32dc221122cc765d78a52e892142ddaec5aae6d608ab32f4a307324fe9c8a3db71652d9333c030c8db61b8e9c4868c0ac325ec73fb51a8cc000919f23bc3510a5d08d42a90af8d0828a67f427762b6c81a2a093c848944d029a5ca20d3f8014d3b6346bc2920c747742400a484aa7eebb63d2f28693efebfb831d33aa9291379295b61f557edca3b03dff1965f6d0b25e315d23030f2faceef1a1d1959d92ed31dd3751d865344b100d169c7df48e336ae37098df5c08fb2dab233f985696a91956a0cffea14d7dc9aa3ff9bc14f756419820316efcdca952a43de78a304aaf63852921f13acba19358d0f6eb3b29022cf77d178c7d9cc07f11546f81f75f447eae8fa415355ed511e8ba66fdd20548878d4593b8b5381db4e468436dcb3f1158ab2a3a87f9941e7493a7f3b22941a58aa71c3c4eaf80558a2c8314d6116f81400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009194703fc6c9effefca61913da884b9757fe3ee6357a78c4c0bfae98142bfc28be831dc8ba811e9db64e86719047a2e639c6ae42e15db82e3d036eb9b1532c03a0cb61da562c0ccb5035c570b692f7c2aa27c2e6193543f94d57dfc729f08dcd701c06784ed01f706f17b0ec9381f23eba4aa28d1a838f72376686fbdf944e2f056da5abf36ce666b66e0788d949c89099e063709bd00957e304fa290bfbad0b0178903045268a5e5da0bfebb3f6a9d3412cf880e291ee61fb9e4ffdc1cf8510a44430b15363da1ff10d5efdee0ee75c405d8179c13becf3c0d591adc0b78c7057038b5e1454e08cd7e8e716589018214b2546f3abd6721f0ea59844be2d58d8ef79d2e7a0c2c2442e9b323cff14d1ddd1bd3b5850e1358c699419f2f5ba2c302cf77b738df35fd5d87425a6f412bd6e8f1893983d7247862da820141bbf3ba225236eb0ea14a4afd41e68aff9a15efc8d889296b6e8a637f096a480fb203c6f3cc68868f9959fb016b76ec7146d1726d2e1449d4812ecde5dbb8d3baa827ca390f5943d7c3fcb79ee0be6cddf34779b4b5076083152acbc33c1eb2e84768a43b8051da1005f1b1cd79de8ba217782336601955e85c739381f54dcea08c4fc470000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae7715b8ee15634e1d6016f8ebb218cb45d7828a3222dd7df09b44c1170640da193550fb479b5ff46a66413072901836c1deecafec376442af54274b93b47bfdac98e4fcf2e1b9cfc1b325abf52fcde03e9a85c557044cb35254579e5f67a4dd195b6fe0f483fa7741ce829d1fd2390f9b0654a050aa158811359aec1fee8683e5a5be1bc8204d068c688ef2ddbf4f9335c350efce0f9d06e9217eabd2c6d330824f9fee94547c78c35c129f6123e37775966e41519f6754665752b6176401b51412ecfb2aee1bd03277a72e5e10eaf8f4354733c8ab891395cbfb55af1554cf24324dcac6506460ab45ce11f120849abe5e560b0bd776cd489f9265086519b6ec4aca9825bfef027fb360895a9dd798c4cd7585230a2648f512ac4e65f0ecaf1a8847f75565b25829557262f7d3d1ba47954434999bf886a908ae66338b065e048576f11c1cedb897a1b5428dbed5d69e1ef59e47226ff3f9c20ab00d12af4e377cadb67b918f5869bc5d82ebc00cd85a16f3984fa9cfc84b0bff38c0d9d7c915ca21f06eb241e191229de986b84d7509c3edf78e505e07323c1a621995afc200238c89acddf9678ed7b8dae76bb0a6b16191546cf5c42bc693c07c2f2f0770000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019f466fbe3fe6844902ae23862966036d2d7fc5ae872b1767d172a68a0c3dcd52c769b34ecc8a3e089f2638890eabd209a2690f6b1a2deb23b1ce33642d52483c8431e5a88d9883f070f2e5fb7602f932e19dc5f3187360445a71cf6e22a7d4a03b6246488403733d588b59e8273d89006b053c97fd4d04fbf96ec7637bbddb3e76412f1aa16d43d4c7c3b09fe5b60800aecea88d5b67c2b4d117f0e60adec5f4c49c3bba19a67ff84651180fc953b0aae9c4c39fe4662681dc096813a8569fbd794fde1df5eae57e18210cb368a26e9c48458e0bac5a0ed49c972f35d319cac161ead3b9d388afeb57b28f79ef23907503cd097ac150a563fde2425a8a162dd940412d749db26f46b6f2c40e6bc0f4868d6dcd566c463f1478a95fb7cc37cbf559b43eb8249eea8e45880aa7e15b816768aed3bf2bd976c20185a4bf535174a51a2b52be2770840df18fac0fcfc6882c92d682754304117c691123db181c7d393ada8e5fd1653edfc8822138b4c2d8f654a0db3f27780130adc10fc74b3b1291b9b815e7ae3f1b6b0e9ce2b85d39cc2dcf99cabe2bfe4c3533a38321f9a3e62c08a06eb50b598e88cd1b9ffae287adf93ce9fc9128d52de97be5856a9964f2d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af83359f3f7dba161eae75902da8317945573c8dfb64b5c56cef319844050443193f1f0472a7dfd573bd19b264a42f9ff626d95d5d4b9ff9c6fc80a141e732c2df066e7fb5c92d2985fbd7e4aafcf80d786053e3e39d6c2daa6b4133d5a46b37db2a08145889d4a1611f24580bccbceb9d2fec0912e0bbbe5f3dbbf73d951ed2b866ff2793276b815bd5e66fc171979ae48a3bf31d6c0d7b27bfad1079c16c269aa5c9cbeba6ae2c5c76b256edcce43bdd36664744c2df1de075d0b74e7c262aa67ee280918296b3c542b01285b129c5b65a474fcced8416f16119c49b0290e30c7288b3a60bcab3a694dcd2464325335a45795c800f95351b59477f78c184115726765fd6e303e8a77bc815eba0636a55bc6aca74809f2d5385eb140c1d12d4aa9b3350468b1ba73d3aabca72b170d01210edcb027b8c2cb99d72e25f61799719a88f1ea95e4110d0a47e19ab68327fdcfd35a8ea3b3d36ea49823be63bd312a0a0bb317f1fcf0ab11f9afd0eecc8d9a86618bd4b5139cce80db468a15f27ac8a9d2d92c7cb336be69b5125c26f08691b03b0f2b9015d46c50ef801239d9c89f9d9c427a0a8a6495188a5f41d26996971d796ede8ec76f5f32cd0337e7e09d000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f193d1ad324990ccc56b6c3260cccb581e7d6e6ddffa5b1e049db48375acbc3365ce1d0a57bd313a4cdeb26014acb57f094eaf8f5d5514051329e70be58316a74796c3fc1f7601f56509db2ac5a1719aeee19edb78de21149a9098012c581667052461852ad864072925d7827cb455940430e7a5594727457705aa9cc5f7b8075ceaeaebdb22921c4f0e35e71b727ef120a7fb2955c514982e3735784303f1c02fad24162572cd348cf326b29aed94763eff77f274be8dd0c396a23c6c6ea7c19f18ec3d1465af2db2d63eedc05fe960f7314ab5d4461a0a80d2da0537c74f9a24d998e8caee17f0cf29dddb8a149718504270d2d1699c7d73c81a10cf7202c0815e3c856dea66ce05046e5f5ce7c8c75d341c2d4c93a3ab4076a6d74f12bf6c616f48ef5fdb4a5dddd1f3711221de0b44f69e1a9da0f22409768a1260c5a5a223f16340666bf89dc9385257de191a1432e0e975dc819f10a22ebf7e305e602b947741dc2a7b9109c667746cb3031ebac18497ec0326caf94bcc5db1b14e3a7957f065a013ed1fa90a10ae508c56c23942fc03c11304dd63355a0bfe051d993715b6b890ed1b6bc96bb8bad43c4e3d99e833d5d959c8e97458ba6ac8f59f4130000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3273c7703e1778480c0c602ebb2cee19df09152a95ce6c7dda399c2b4f52d5c746f8bbb714529255abf1a4fbb96d57a0f62f5d52cc3ebb29e4389b121b76e2788bf4cabe92898c6dcccf1901d7de999c04989ef313684ce2bab1e448059d280c325174463d583a84a086b26fdae3525d025b8f3709dc3f9945be1acf5e26c98f0212345f008792b07f2e19ef4ca9525480948ad766e2c4132fa72e470b98f85b4687dfa5ba1ae7529fabdc5f66ad4fcdae48e5050ce997c1a81c7cfacef9d6f5686a2d521bbc8c4b79c30321dbadad1dfaa92034a455784b7b1738884d5498da9c9be43489fc15d74fccd1e58d36214b335729332ccef7879c457bad17eb72ce0199618914a6a7f74af06ef6a7e62dcf3bc3477e5e7c9ccc59f90ee27317b62b1fdcd801ee4b7d65a4377c0e4ed587c48c4aed3360fb90a621225d271dfde68a18d27e85aca0d73426e341faec91673f64cace36b2c1b48ae3d28a044ab22672e3fa2b49f2d6578aed2bbeee8d231d08890c51b080b0725547aa239d48a3a863f9e79585a1021a9ecc4e44022baad54e40c3d69605c4fa7afe4979a05b640f44e0d175c4ede6bfe6ba46bcdc464bdf9533742927ea80d8cdd60bc80561d6de9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a1ed157572fbbc4c311ee948f230efd117642587ef461e55473538bcb9326a9ed10eba65496b170f407e678ec66507960b270473e023e41061fcb7f0d5f599fc8ed05f59ba8eefebab294d091bda12374b3b8a881f0e93a4ff3fe8b6b6c6dca9e8b16ccc0645db48d787581d2f357bb671b6ee2a28648bee669a3838051349676e9747d2de9a0f583a1c881cd5e4fba52194a5eea07973223faa96b4bf9ac8e3ca5cdcdf406110338fe9c98ef0b97c02a45e0d6de895504b93c7c3a6d0fabfe0fdcc02b07b84d4947a0236e5237879e88aa664722a6a12dec3a2a6e5cb07c34f3677ea98c48ab5ca6a4c5081ec8e72898df7f8ef7f69769b357408598408916f3471c6517d5f312bafca4ddabb3e51b7907e8b40f1c2c13b687f0d2ff90e74b0f879ee2880d4088a1e08e6c1e0daaccd0298338b1968675c3ecdaabc51345d1d931847b3fce343c87a49ea6c4e70f8b8ce2ad935da2842a16f7427b999739f977ab014cacd70493f09feae8a608e358a49d282203d27bee68de37f8c941a3a7d63c27222ba7de8dad9ddddebd73c50a54ffcc577c6e69496824d166c8df40dc36b0becf6c8c5c6a1c37a8ff6c70c57b4997af344062acd3b6b68267aae3ef500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009128ff1562554df862f7e971e5e538eb1f7119d0d9121bf3a7508956323319824b09bccc52647a5a7be102a9e3abf33f210c2fc0b508f26839b20e5ce9ae62f03eefc66bcc49a8371674dc5698fd183b21c9164040007fdee26fe5742135e3474e7ef7fe7aa312b728fd6e594129822114fdc5e870520e5051d4c9a4cae10b4b7756d2c5cd423315f877a6bb83d9d6c7e3cdd273d46efb38d86600e5824e4d87737cd5121ef0b19b409e2b03f61aedece7cdd5ef96e325fd5162e9ee88fb079185002d20efef6c2c2153f88912fc8007cf9e26628557d3ce3979bbb1f7371bedebb3e7fd497ea90ffc557113c4afe2de3d50ce85089e6d69b207a9510aff26dd2a27f38119095e46a5849f37a4aba7bdb080a7d3231155e95fd27beb8a9a592b280530989efad1643baf46658cf1946f4aa3cc938e842b64f87360c53bac484b62ee1b2aafbc7fa42b8e11ecaa4781331cb050681caaed54c74c7198a29aea13c5220b9f9f806ad2f5effe60f48a3cfc3e630845eb8fdf680706015ec5a489e078d251d7fdef3ebbe5a81f5570185d811258843425c8e723620f087eda619d26e3aca3eb47fb954a2c1f18b75f58189df072f7ace6e420b98dc041c244320eed0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a468590a9156a0afaabec8f83ad820eec4313c627a79130df447dae2ff9a030206a461c2439dbb961d47c105b51792ab555fd55fce631ee57a902dbdbf9ab725d2718219df408010a9338f895ec1035155198d5b1f773f46058c74d2a08924514841070b7d06a4040ef1a6d40ef1db90bf5fb7a0f089ef9c5dd762419284a92939756b0500a7bbae5b7ba5dd873b31d0121d00208764a59fea15263cccde9efd9e0251bcecf9c42e359bfa0192c6e9a6eca6a81afed7e2be9ea146df4b1143217fa4c14dbf055391a28d515398946bf3b83c6f2f70bf0973cfd2691a483edd5e04732142736d8c3fc52c097e835e9099e4a9071304b053b8182ce21649d652ffd268f9af5cb97c2828db8dde9ebdb61bbb5fabf74f269dd548f4c792f852e61ff250531f3b164cc5a9cb1587be741f7154f607fc5e61aaeddccbacf98ea288f2956782b88988ab4531a6d84ab8a4299f79466a8633c69fe91f317bdd81c396b0ac0d9ee4ec26f8ab7cc938d3ef841468f718f87bb7dc4362dda8dd6fc281470dcc7e4b7411df6d5d0d0ca03b64c66f119208c6f31a5ee44bfa7911a256aa08ba47bc298bcf0ba76cbb9748e2860a857c5fec6a6bbe6d464174284f82c2bad9720000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096810695f09282c2c2e749421083894b80832bfac4ec2c636bb2046e0a07dab40413e0fee429da98cdf6396d7ed785f4570a7250a6680cdddd5f715f46d7d6e2234d032fd485f24097025b3c01f604d5cb89748b7f501cfa4cb4738db7bd0c980295fb7c0a24eb9308c96eb875dfbfdba1d033dace30ba2a0029118f3e997ec9f892fdfef9361997bbc95ee77667da135f19a23ebf8c8ab2bd49f440d56dca88a05e0731b569cae0584005e2fa727ae4aea451769fbb421d2a43ee66f514b44ebb3bb2a173038c78fd34d7f79b4f6f4d5019ebe4decddb4adb5a5971a520063cd998e9960dca66d3d41d591b8b2069d48db98f8b2e060017cceb978396a304215706512091469fa33093c1f35a3bf32f4536fa9804a3c49e7b0ae27cd6e05abd4ac778630c2c186579364418beb2aff6ccc41b279932e348b8d601f41a980136f545b8c59ab526a3ae834b39ab9814c57282ece23ea959b6be39ad3676c6b0fe4b79bf7595b58c6e11b0337cea178e8cf96b8802698804c0cf5f377989d0e2f762d8686fb091b9c255981909dab889460ae719c549489723d1d34f62f0bd00f1a2a09a09ef237d310374cfae8bf6d26286720de91cad95a3b01f4bc711e7f0900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d8cd4049d18626cdde37d145956334f2feeef3ba95bfd12863747e4f450629c7f2c8d9288d921bcffb5bf12b4ae2e4df15b3ca8227cdeb1518d72a2e333e9206070956722f9fe97ba4daafcc4c329d8e3347142c1d33f84d855d5468b7aea839bb8ddfc837f5f58a04177436bee9e7c833410f33f6fe55965728c6d72ee0bb5cada0fd7ae6e85079205dc19679a3277b72dbfbc6d5e143fa0f84563574fd06b9aad0c167036e8b8d34c8d764046e841a8043cad25c0a66c0eba979bc00e7d5203e3b3cd4e4245f2e0980ec1728f62743187bed59989f4e12ba32d5eb70523bc50385ae871e2940ecd4949b1904373df2e0666349a214f5538f98f2fc685dc636e6fe7723caa3a7d6ee9f0269f167f5d1734828d6e6905479ef22d61ef815258b00615cd5349ded2b7eec1ed7117bcf15249ef3148e5a93c3fe9ecf874834d421e638960ca6840d9db1aff91a98515a050ac3dea496e17f710f51fffe43a01838ddcf0f8c363f09b5c067fea393de0518101d36b596f3af61c6f94639bd1ad63f7e86e0029c871ff2bb26f5ea9520e0e0b125cf6cf8c92713583ae286ac63618b408da7d6e20901081dca72694f2ff35b3a437d0862166145245b19f3ee975440000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000165a0bcc86d6d9eb4c90f4c47067404d6ab250a2c485a9a89852366af1fc7a96e4b94afe0af1c7055c2d743ba807c9b2e97dd462d80260d19b689a23cb8730ab7a0d9706c49f1e3ced1ccf5e9b2d2519eae5823cd70e71dfdadac6de2bf6fa2a436501040257f4081a0f3c292c67898870b576d3f20b390cf06f3596ea835c6927465b5486ba87ad0cb70f070ff90f48be353879f60685f6a917fe53127e022a2cdbf8e19447c389f5b0c3a17dec5e0ac9e96323a3c6afbb30a3c710a8fd3301ec0693c1d17bccc8af154ac17ae521bd20f893e0dff2bf3e438d8ceb96100ae73d85ad0ab34f0b204d67b871f12cd78f41fdc3628b73e4450b7354734784a69ee8d08f00be3c5db8c0f4739b959fc0fda0e66677063a11c195d798f0fa6efbc1b80dce2aa16ecb8c1000fa11f43b01f200ace92281536ced12a12559f457d5386bcb054dc549fed9925e6f6859e34f1000965dda466f6eec7301e136274c765ba0ceba68bce57fc48e7ae47ff302deabfb6f90b14a0948a39992f89b182b37c81910eefe5569f34fc7cae42aced07409c049219fdd04e1f5bfebf34b2228d7ce744d121c57ce27d2d68cca395c0b9672ebc21f72a887ceb1f1a4491cb89412ce00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b13046a8d1b48ff61dd475ebaa8529543aa25c3c9a247eb49e6d3df31e02943d218484991878e3ef8556e7ef2b6c344931e7ea330ae8b2e76e1e6205a90ec50b43bbfde0221560dff9e74bf425d7cae2289c72aa3cb0bc39abfb2a95febcfa973ce24478579d52587598bf1f0fdabc2dfa42a44e33543f6a9e34f71942ebd5383fffac7110f77628627f16c117dd0868e6801178a8bafc5d1d8496a9d78a58b1ae1348ddb5c831da2a575988b6cbae693f66b7761928424c3e56f302cff57f700375466f792cdd34ea3f4ab357f81aabe99ba547b1559d6a1b9d24709bc5a00ac11e13004208454716142ca14463af19237d65ec262f33e4cc1810eb0c4fadb08facc8a632a4f05a2cc182082b8d3d01dacae2e6719acd5c064e73f82b199c05d3182f446d74578e2875bbc7e716acab1730bf4959e10d5732472aed515b64aca4a1929d5be94ede67f71b3b9f99298fd7ee7fb337cd63beb46fe07c7bd894cddf5bd2ebce94af1a5d5b16a9e1fa58ef248415240fa137aaad9d8a602e48720278936779af61c2b9de5951ce9c17e0e3f0300ea9bc9dba9852caf363a63917ab1db273a881fb10c261770234aebfeb0485ec92077253c7331340950f9b89eac000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c13e3bc548a24295779e116a76a73a52c5d30af3fd86ba2b5b98ae47a08e2c464b01dc94cc5a715a2c146558db3f94f485d03683de77672e7118a45fcf4247669fefad68c61bcf7ba89faadda53c63a2f7ff9ccd7b1be769797f1397497bf88ed661136e8418935e378ae8ceb798d3e8357a45111b77c091077a0b1f5e33372a4d194d767362c5baf8312358c3a3381fec4f5dccad267ff384e19d8b670022f3556809d0666fa89621b4654c62d59a75c242e8836f32ba9ac256dd5a5e3cd40b5bcc9e6e9168c04dd2c264d33b47c6de9ae23627aa6d4ae53ef0da95d23045404b549114dca7993262e3fd3dddea7bf9d6281a8b387552b09100cc40c63e4566af1e96fe85a146a691786dd4362501cfb59632816fe332066bf941ea4c60d727b8ae88aa84fbe78c3cc322b8b3d368c294a525e08b69a22d37d8f5b5eff7463a70a81af3f5cc36a563b1d9bdc9050d1cff9d5b890c5e9d1c58323bef2deb7ae59a41bcd63671c971676797aee89ea445d64f676bfea21c4e987bccfb9e7bd44b1b73f58ec1ba13899a176bcc025b585bda68f1d52ff718a335629d1651141c6ac42bc9e9f00cd07bdebbbe06177e9347388ffe3123731d0a29ced10356da2300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009449c99f2e032c3825688654f6f6233d8e365afdf4052c06fc274c9d1106e17dac8f138d483b2c1073f17b5a24045d64db8f442fdfb02f9f67f868fa2617b7f261d700e5405054c003db48f709b4c07bd31becbce5d644635a85e8c3ba83fed44890a177e187487f69913ddf81f591326325736ccc16e38d97902f91a7b3c463fa10e586e3688059cb66545fe0836d472258a6c97fecc35325a6d852a55b29008b671df8842e2351d69709796662194bd1dda380a24898c8164865aaac1ffe50ea668a4b34be09e770b05b748ff9fe821fa3b0b9d8803152cbaf956afe56af20aaf8d85e2c5b71c0791e7e4afb3a38a33c42ee7f599e02ee547b9b75c6b4eb4da67d5cac16868c27e3d93251365894e994ece11b192a0d21f7c0e3c7c162a7e04ef1ebe82b0fa18eafc1a68aed9239ffceaca44eabe2ac4876340b112e5bf9a47282d4135b78b55774985d130a835aea51ddf64a033af61cf91ec34857fd399c5ac3e7f94f25abcbb71bf94005492e3ca8a36f97fbcd889a58897f17c1fdaa4747cf5e244a3cd3606e8a3d651bdda387fffaf4929d522a7dbc6cb488f91a43da01fe66ac0cbf80e579e4d1b06b5eeb65b12f68aab417c332ecbb93044b5ae36100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4ae76850f167261dd208465589b12b38a3672de6e54341879a2ca5b8afe4499b6c7c1758a634f2c56314375cedd88e02ed9878ec75e7ba2d2329e3cbeafe28fa11b6982bc90ff1aa1b6ab59b0bae66c0ebdfaf99cd2b840222e4e8bb6784fef11dfcc2447121215df9be0dfdab2bbc4fdc3a7db214def83829e27d6bbab5147ee6e04b6327c3a963de8d8b3f7e61db23f5058625c1c3f3f782c7554f9f11463eecc58ac1fd99c74f9a4de7bb7adda8d9980ba3d5de2316aacfe288ac98dcd7a1a7dff0ed31498a2c1d721571db14f3858083bf6d03477f044de0844dbef2a4679ae816e9a521e42d738ea7912d9533d069037f8948c03aaf6ea8307f758c03190faf67960b588a3062e1996a2b6c7d71bdb7c14b7338558c0f8ade1970959a62c11d194a25f4632a4eab0ef7d0f5538548352ee7c92eabf38a988529c6bb36edee5db9f30394b1c6d0e7a76d1a2fced916eb16879cf1e44d1ab7b8382757faf90cffd32f6651c0336ee334998629cb3606cdf967558a1b5e564dca88321198affc907fe6a8cd71d3890d0d925de508ae5d53a1b92ef6c2394f990341534573fb8a098a5adf7481aeaa50659edae97191794017ebc6dd497701d476ca85684b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d0863484e71a46b8ea81c9cc370b141faa5d22e016a172a7c8b23d5ddce6ae0189ebd41665f42f8a31a5b10beff559a93a2ce18724882c7f9439a0b1d17663d9bab2894e8a8e20c68adb7c3d7c225d381244d60c1f5013a9028f5e05523e94d902a75c7a1f150287a25d45a8c3a5bce751de64793f2ec6d6e5e2c422a97bf7370059ab304706112050a319b717951f142d36d01b27a041822b0a94c6600538c019a2f3908154b9b1af8bed34e7ad9191d2f939e1d756e04118a2c91e2912074c0d78329163431c40d22e4444414a02c95746ee183bce8d72d72306d07ba6a137571706c88c1d11e31bb8738117c1986e614434746ca88a8365f30ff1f86ffe9dc2470e95774161bb09b6f16a466098872372feaebe649a55d0b940eaeb7e1edbae9c2c7e7540aaf91648e50e117da6a4311ae4f97ccca84510f101ecf821768cacb9a9a18e0fbdd745e1ffe56289336704c9f4c62b674f4533f11c810617db8960d96c19b46c75815393d85a04f455fcaed29ed5f09b8cd66d67f0aa3858aaef775d395b54b3d6b4e724e1e5fd72c3fbf0a0b4d7ce6bd818bd46697b0a2db66d9e189af9660679cf803ba522f3ec571845a0886d245d5fd09bc5f46af8834c8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026e6d2b01e7e930eefd28925243e64d37c0e438540f4104b5699f81dcc2f03cc14157e3f5030de068f0c8e37ebe99e83f265a38b653890707fc75aa76b7dfdd02a56f75c356545a6cda16639fc6883df9274ba28a7a98f559f7ce125d0608549ea446af8d3c9d7a0fed0189ca01cc5a57b5945318975fb887f6b13790e648e3539b3054a5d97abfde0482c7c77b2f53bd32aeab05306372701da6fd5ab5975ef875ae18f0e9e53c88219cc6a763b7a8c920e830e225eaf33d4ba4250cbb475396903102abefa59cd04ae099dfe98d2638a4d4b1c45e4e7490125a65b4ea1fbd1262065141d7e7252e613e439e050455e92de8d52579a767c44f9b045e402eb85a5bb18e222959ddc5a86cdc6ddfa572a9da1037a656e9fd8b3c6d95f6c25afa7753c38302f66a62ce2d308eb888eacc54fab7ca95a135b886744bcc35f78e19b4b86e8863d95dc29234b702b0c2b89cb43ccdee4624183849dd7676d4438409239e0152867958dbf1181b98912e39c85ba77c7d7b12822af4f30993d1fe7ffc49af94d7b8e9904e42ab08b4daafd276acf250c738d47a9569c066f579c7aaf62e86382f9148f5ecb97aa753f1c37dabf57b48365f7a07113171a6dc6fc12e8f000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009799941eb0d1a806c632edcdfbf7f0d09ee7de253e895d35760d9c7d958251cd68ffd3bdcda06f7768d1364a50b813ab5983ad454ea6aa7abd14576cb81f4f6bf79a224ac4625c54bdf037b28d397a351ed09ca149f20068f192e56982dda3fbaf43b27754e848cb4081272c542f37993c7acd9afbb3559449dc745245680d9410f161434e3f75ad2436d9c0d8c3304dfd780602c63896d8d3c7aade906d1182395ef6a03eae8e95a4753c977f89e16ab9c06481261a16af9e9ef4540f1ae3229cae68bb26ef5420d996a8856e39c8633f7dc406093d33f9f0bcbbfc472e130271bca35450db862ba8fe9a7c0e4d0b8639b9afa7e96ef2708112b3a27210238749bd40e765d8b01c211f055f38f5592c36bd064e78014af508a7fb9a838158e724762c6f33033c387580bd3ada9053972c021af82c4066661e0dbf973546d108e1546978e762543c11f9e0d977a81878be61c884877522985bca866a4ef556f4994c692e2baa0db0e98d20dbaff72dfa04ce3e853b2f71e9cc3c6d375331ca487c0a029cc7efda3cd48eda5aa10557bad927eac8207902ecd54c5d02fe8e0a6cb9998210f3db11123b2694fdaf626868776beb6f95ffcb459af8a6842341b9140000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085b80006951e4a1382aa39bedd2598a4b41d354a77ff8429b4b02d75349f8b370e80868394be4eb02df71fa0932ca684c8c783afa9f260c0b15e459596c5705b2abcbf978357a1f8b6065325301829491b0b67884f313a8b56dd4f78e380dfa0e510be966ab92f57371ab3838111082d2fc30511dac4a70444521957d462506143a6a7312e85253828d322f92be6db732518fff158003f11554b0e83bd81c60f2c0640748c0bacdf87b7d5bacfb1aa9fc77d80062e3c484a1b89e6336b67856da1ff017e28941449993ffcd02c2619342ca5bd55adac804db889a396f7291136e9102974193b89cc995f01298eb26dd23a90389eca6d33b54ff8f6da9f4e937ddf12a10c19a44ff716b3e6f38c50bf428ce9adc8f195ef5794df23c774c852002fd5bfc3392065bbc7446b9f4228b987e212782a583ecaeac9968e4bcee83c2168beac870a07bd15bbc43634a13ba099f9b9e46c78e9dfd219dfaf204a541e11734adaf60ae0f6b0576a54d0d5586012def15879ce2d42267f3fbd7291757edce2f954864f7bf3f501b4b20cb2cf0349cc669b531d20fb52105d1137832df22ebd3b6fa77e1afab91c110696e8626429cccf471f9376bfb400f473fad8df44a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090536d0949b5b6c72af79983f7dfa15ba97a9d1474f03d9364bc9cb2a0785a0fc61cab12c3b0d472fb4d24620f2fa78fc46f21d273a8a74cfe6aa463f3b5b6e4f1d735b87658e8a0902a62437086e4902542b57ac0c69718546546b024aa487856d27515fcb6e63cbeac039887e88cb1d121b2b6d3f26fa59113ed9b18b3c41c4c306731f65a794e07825894b3a3ddcbaf3b89a96f3d23d45133fa4826d08fa7e9c8ad810fa8a6dd8a8817f98c2ec348c977e297d7f5a9eaf5f2d2b7e5c95f1f736138a646139c1fdce6215cc4a6a6d90d01130204322c5c3b14a629079b4fdf1561a0e468c1dc9dd52c3cc82ea8b308656803affc02ba5b9cddcdeb48ed1dc46657d7c2e60121af6ce33ff7f1c21cd6b0a69662379284a79420ef338cf020e75e40eb1e87d6958e5728a2f56fe441febd7a17b78d2ecf97321722fc8bc10fcc1cc044d0d252e2133521e3c3e04fb34e4e50162633dfeb1ede40f5c1adde3401c1394091b84c0c0bfe5b52094e367a2cb5e09aea6fe5e9255f2bd9a90e6cb85eb1e509bfff5ce73a671fa2bc344fdf08acc5bc1d7cd217d258a7f0ff9ac5665cd97ee97c43401818a03fc42986a4a821f2921eec7d482fa37f866f7599ada63a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000802bf1b9df4d19a8ea6e029851aa719d989e76a9b75dfb9218ad893ec02e180028e916aefad1601556232e6621188a6aa530851d6a400cf540f6ed294d1dbcb7ab8f6162902634352608e8c35ffb797298412a31029d58c169be25c1c1b3be858d7cef28cf12e702d61a72fc0ce0d6fcd9dd0ab159771dfe936ec7a9e7a5f3acc65ca929c6c8190fa96dfe1d12a11c20fcadc368d3f7bc404eda3e9f8ac4c0d8443b9af1228c0357628b81b45401ee1cf15c593f70e80c48af68b4478f9ad1db9be8d060b6c228f0fe055eb4f783cd36741c9e12aa19937518442fb0110f21ba60e283d631d37f226de3b8f49b9ec6f1d28453485a532b9b8de500523a8e11f25cf1c0e6725f5e201e9fd269f29c339b67f3dfe715d74baa6d015c33194d6de2cb492059c0928f06b0d5cc0f6e7b2a997856363381e2175ed5b706e11bd9c50e18cf152451bb1676f3c92b7b0972e55815f3c33e44c006e1f6a962fc62b92f222024ef0513cd6860d67d752edb2ce8825bfd8b408f825df3c320cd5a321b72e3c51a65976fee2ce3b9c7d40479c7f555fb16b24887485f27f6d3b61bbe55f24a886e6e2cba3466cbdf45bcf068cae9a32de9557edd1cfde91d6b612a34ba85bb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b00b12f1f1ad2a834d241a6567122b430cf1c6d6e553b48459704a4815e4986f6561b30951f9558d774a05c2d006f28b572cd1fb49e88ef4f43a458780057e6e14667ec0e3f1ef9274c7b777fbb5d318a9df6b483bca0c38db7478225cf0e199cf1a4106953ceef01d8d67ac600ada37c1263aa886131292dbfdf631a60557fdf547e6ddfeb20a0f55bec5a1096f5e203997910905e93cb4d39604d7d4da136561681f818472c931404d131e746d7da36b3ed1da78cce11f531bb17722499f109043a1d9cadd0dee645b7cbbc9c7985a688835a4006826de68e73399e6e3feb4bc335530c03122997101c4cea31e9b2132df323d81884bf6ea6e1298010a3e0b0ba0e688cdec9a567e3ad7fb6337013ce0e8c99bf08e6e70f7be8dc5a3de3e68d327c3a0c85cafbf64949eaed27bd2079bd4618d00034e8c43671452e04d2f3fda96984bb185389ea46bd0961be0ff789710b50fc85fe36a4e9cd932adc81b024ae13d465f6933b297cc9667391df6435c4782a09bdec72ff86d27c50a5951aef0ebf14c50fc7b2d81eeac80aa4d7a4a5e8347c437a9f82783d8cb457205a031b3268c3e2230bfd9b3d18d4106635453a1aeff7272c52ce984f8e22561e58430000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f71c1286cf14ddc6bf68ead9e8c0006b7b41c144d097af3411082fff1e241af7c658784851621e1c4777e992f0650e8d41d326e595658960e506071f3bbf34b30f384907f5966a91b40234ca88fce8d2b303ce7a6ebd32c9692d3117513e4282fda37e68a7699cf34f9f756b9cee655eae4a3e0d1b206ead2e68f141faa41417cb7a561e18a141a3133ec7db649749abb7b66682b2517776f5a47530d0a9e95227047e1c226c1d3c7fa299fc0aed0befed413229033af94c8f39f7dfe1dcff0160664077b8fc972aa5c8408f3033e2dfcac244050686e1fb3fc53019f33872c3e0f4475213aabe576b826d07dadbcb0daeb2ba7f651714917ce362d2b69acef6dc285c4ca714c708c488be3f4b69249bf261ed1887bb4ff6450b81904538f63fb28d45d58bcdef6daeb56090b9b09f09408d31d01311ebd71c3152b6bb845dd6a1d18f6cf8e83f8858ae5bd450db6f35b5784451480078a513c005f199a9afa07e0b3a35aa6106d8cd6b17590e1fe2df707f0f6165f8948928c86618f787be2aea59dc2c1611f310790bca4cadfaaa7545fffe9ad0ab2db65f3395f9df6cfe5d771c3589fadf26e7d3f278abb4ef8e60565d8c45000bccbc5130e1ff9222f40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000173340c97af40b5f3db14fc228d49f2912cac75c85502f5191419ac634f5d8c141b3f253af66e57a39afd57c881c1c7b28084245d0dc15b62a8f8c40dbf70ca658a6c70b27d1f3d84a78c00524150d86e89c8d27944bfb926ef00398b3dbb2ec0e5f8bc4a8ad542043de630442c6449a4c62b7d5814e9b1e9638d9e9d79e087df2489ced24a283e77aba048d651284c767688385ab27ea12ea500d2999d65b8029321b6f4d8015b7d34785b938c112ada77b7fc032238fab68f085d4097fb6c34f45e7eb485e0c8cf107d0707edd3f8e3d190171326aa0efd6ffc86b75520c23e3402fdd92d0fedd2958fa4f064d840bd5b3f61665395d20f3e8b9604f50732f844822bf55e692fd11ecb5670e89d221b80b6b5db3485e1af35d4c61d97966ffaa5b141bdb20fc24a8116379649a3a8ea4d37215255314969b5ac4361d7cc72ae2a47259289f12fd6d50a26786dbc8f18564f731175edfe742535356d0ad64e5c953f5772f915ded6bf4f6dbb3a52fd5ccee093c9236a0e79cefb6db234e0013c12b77be2097551b0b8933984298f509f9fa9a2961ce6d84066814828bb2ce743b3a5080a2e2249aad7b31f75a89fa2397c8cb75e2e89d50f78727caa663affc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ed92377dc865fb3a85a00aac53f4371a41295b04e30e23fc9d8644662f33ec3ae1f0c81241bdbb24926754ebb2a1a10824f850f5a3d456a938b092c38aafdcb8f2ffd2834a1f2f07300b9d5baf67561f0068a78ec8c0fcd9ead5febe232b4a6b105b77ad9a5e42ab4342f5856a5fe1dec15df00518b822b5128d7a5c7dd54e36d8eb1db7de23e09d0aacddb9d5031906afcb1744cd2d5db73a4a93c5da2471725683102a0437eeda8bc31dd1299e16a4fb072ee85a023550dea36ff860e0d40bc80e0b3f74147112240beb7cf4ca011f1ee8676a3148edc4449f78e99a85c5e26b4fbc9a0bc2de853a3b84f79d3258f59e6948d79991e8fd413fd93a3ad96f441ecbb77b7c023d7a125561212d4b82e75d87db09fc37ebb1b47414fa4b29e76882e33a9aa5111d4c64d809181545d7e5665715a8248649eb7fc456743969fa27c02e550fcc06bb4f867d01e1a9739cd5c84fe3509875ba41db05c914475c6075667ad569635bbfee4aad371b17edbbc59c8d6827ca74adfaf2c1d4cbb916cad95a450124fe47ac9f8838d8b1b8ec4207a3970604158a21e5676263cdd08836ff8468a41b34ab0fe93bb76915a66f599771f322bb2ae109b5bc09d4e00edc1d70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adae41b59d5264c898f4221053c3368e6fc9c935374bcc4e2ef689e7baf5c114d22cffea318ea6748a17fae85ab5e73aa8e3d51b0a2b581f2d1ab458ad2c1ffd99cf73b4c5d9477555439a98ba92c0273ae4ec08daf978b3fc4f2e17b6c229564dea0425bf97ac56226cb9c6bb1252e82f6a1fc00c1356bff430f488b903977963fa8fa079828da4777fb23dd62ccab68f2bce9bf6fa2100a997516e6cbee31b6987deeca2fd055b976e3c24126de99766d4b1f32c4fdcc22f660f8696448eeb89b3bfebafee56aee91d7f3bafe96192ded1ad340ea4b9bb040c66f8f342e83186209966fcb739ddc86480f7fc0278fb03a687ea785d9a6faf36a02e3ffffc5fbb6b0dc83e29ba05a5fea6ecb40d8c72a22f1ef4744f075174d396e33f00706473b8e13d89080763ea56c2615792c3ed57fc8d8a67dc7c635bf10cdfa2a3f3e51e952b6004530c7bc4df5cb2d7e5314f464f6d4e04ae08d5e455f9472c8d08b2ce0d306e1acfbeadc5524eac89d937c4cd68481d6c11269d7d1509b23c6b8db2103286a40d4c5d75585f74410fffc1027881169732b28a1c949e3262c162b14a731091b7cb0f14daf6a397bd4515574920744e6df0004bb32b54c0131d36dc0b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085f38edb997b0ff68f502ff92a704d32e2d6096b859e3a2e07f912af8194f2de92be9cb4abb47946b50f37bd317c456e334ae3211622bab16dd298a894729cca4b44bcc4e28f11158d773cd6f3d325f486a25deb41507308218f38ca9b9cf95ad5ee20b6c4f2d28c1930f365d0f0ebc16330937be8244bc28aaa15c8a9734975e4e3d94f3da54dbdffcf52c8d51801da71c4a54993deef9e2953b3fa38ad07f70cf81e25c384f2fb12e99782a68bf96af6258c72e23593510469553565f590f71b221536a8dc989e405862e730ae1979ea31e1ebe0fa793ba9fac50a66c234c7f6ace27d7c2f12ab8a8f6b124143e0c4ac79f12181779dcc8fcfb4e9e1cc7f57730eabc0b8fb24c2195ea4f950bcb83ed882aa21a6dbe267099e03ef69a44391fe31579b5c30a6176b412bab74bb6ccbbd6434dfca886bdc61af52a328f7eb004b3a5644179b34e51ee0a6291c5d9917f06bd3f07a65a7c87ad466570d5f040fa2d38cc7c8e717ea194879725367308a9fcb8bd55bd27bd667dc8f34a9f4adfe768e84da114620546e34eafeb9cfd8da0450881255c31c88bcbf4e002ea66a6d9546ef2e663350c6339edad8aade79c04cc1ad5051c68717df275abb03423eb60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000980ef98a11e62d4dfd407806fc6cd043f449c1f5c2c9ca49dd0369e52340bb04e9242928c267b63732e0ae8428da7c8ea2dca93e0258677ef9017718a079ffdb4b880671859b023cddbc6735d5b715ff15279a57add72f9e6dd8e325b811e58bb95446783e1d3754fed04ffd8b38eb27d2c509fbca1dc04012834cc1bc69e373a21705ae995fda4fd66afc0608dbf871d9c55fe38f3f82ecc579ce5127dcbffb180b719847b36f2d95cf305f3cd058aec5684b558398767602569f2169cf9fe4ae6b492c1703db30028ab4d97929aa0fca50a1091ba41df3ca7e03106dc29a14f006bead621b26c48c91a37da06be533030173fffc6ac65dca5e8f6e4b56f946512b8049e5082ca4baa5a21179b11958e2807f35b51c9fa2b4333324c55c91c05693c9084b6a5466191bc4fe58a3387b39dbfd10f83995c23204f1a3c1113999e12c8551fe31245f4836bc61826f76ed5dcfac368a2e89175a1b748106cc5809cf1a22c41cd4d92ebf300f8c1ba0b2deea28c6b5630d436aa41b8ebf371fffe68500d5c4c01b8d75f994a3a8a4ac9406311ddc4ac6015ac66cbf891a6b2e6c4cfaf23082e15d5ded18c407f1149feda46705f95622a097e2a0ec892b76fc865800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0fe17ca10b681f1b4c836c0cab691a89eee12aa748af9531ee5e69d989cf65013886b8e230c0d727f33064dbd6ce8324cbe842efa5972a1cfba7acb835288d2260b230219bccce38a562c53a8cafcc545aafebb5d370fac4861f84b4904223695684cfa314d2f04d0fff6befba57f7024ddc80fdf82a1816a17d0f1651ba0413f5d311f27166474f6cebfd214dd5c408359ef04f8030959584dcb55394b9f36d3dde87b1159d46babd224788e5897c4cab0da1d47d8395d09c8ab5afacf98db46cce3ff90cc2c7437f9d7ddad1f765a735c01bb6a5bdd9e30817e8972a77d3a9b9d1d7e64add747ea65a63ca4e88a00daf1b5a3cb0d086261cdcc7e2c7ba00e7d7dc5d92828dc3b8532331702a4f3d188e8bdd66e21d9d4171ea2998135c308ea295e6a23c8895e4f45ae20e8ef135d1cf3237b021e130fb1ffb646e95610cb1e085f336647cdf3c170f6a50d7c55ae5858351f656a3d8441c3c3fbf627ba3f1605674dce69d412d11b1ffe84e92934ba97a0945753192334023dace84d2600ba4da5439c129e60c0a8ed94590327bd767eb54e8aeb671bfabb77923cb776e8d61a6885924d9514278fa01668baddb72bb507df83bcdc12457f9cfe03909d50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad14cbfc394fe5e71d1a7d949045349a780e1ddb41554198f7ca4ecf72d3ea8bf195c126156aa74af851c384cdf674d221284da86fa94bccdb0f37d12153121bded7402ca4b6e9ce3ce60bf3d0dff19a5f682aa4ed39d44c5699b320c4f1575cc3cf68e065ed167984e2f0db3bdb554faa222b0b5108b217818e158debee0a6d41757ad6160af42c87cf1a72b35df3a9c2c57399558e90e26c7a7f2d3455241b1cbe7dfcb52d13a5548fc81c912392ac37ea088773826e111febacd0179a637a1d4a7dd7d81e566c2fcd9f3ab0e82ce18336bbd4724c926ae7e13d70873d7958d4f5e70191b9d7d68b75a02ef802987d56dcfbf6c924741ed4a42bdb38d9464dc286170174455aad10a1b413060198dc9f6da236710a57328915debd812026dcb907207e09032d5d7c591c3caa8d23d24f63745c9dc52851022399f23476b6be09d557e01b084196d49e25b41d40f63a264255360952d15ea1e6431e410252569ef072c0d41f97b7f87b3679ec3959292b5d42ba5a84be33837ee32d8f99ddec563e5f01a8cc7ac07bd39a1d748dcf6708aab451dbef580a57560d575981d551c5b4463e00fb33bce7e02389d965f783204ec0237810d0e1bffd53ded43a34a9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028984b3ff60db9618253e54514de1ec6ececd8e5bd1dd83c52a5319fcd47f22e645816f65dae7814bafd4db9745e16e31a915623b685832b9b61ed572e64f52438c0a9951d0293204a88d1334c609fdff89bb685a4f665d542d06305b9c18bb67b7c5b1a3ba8bacb41992d65d1933f7b62b3cf14774bcf98229e428ef9b9310a643c71ef218691265f5c355476e5eb3370f47a98e07e636ec61410752b51e2a9b4b0c066835948bb4afc512e57ab8f21efbb1412e7be2d0693a3bdc00d83e78f1d3bfe1e71b435b2e5bb1bbd87b87155d1159c6e2687c256d0348ca58d836d50bc7f4a0aaf395ab20a84bcc3f73311e2c4e268e70612478f72522bef3c3f91ca569010aebd0551ef7e016bfd726feb52c4dda9f0863a1ba42a52c2d5ca4c5bde3237596da9e2825af8a6046ce7e89b665b6c7ac04b508f18ec30a410a721c9736b49e8432474263661e070505a1479aa5c6b4e5b272275bbb45130f23b90ea0218cc952c7e534ebf1aeafe04c5ade860e10780f08598d072312d0f7013005d5269f5f5d63faddaa91f345ebee39ff4d9954e6d2f69131c64ebbd622a5b57ab54c4e9f20d312f0a1e59b70776fbf843f4db6806b8210ee06836513eb9a77088ec00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e550c5f62fa92e1c075d76dc62ebfed105ae066ea0e0e91ae8231a976875e41487df0dcf72e79412575a547cb5fb005b26a3aa4302f2265ec48959718c37eaba5501ec63f79311f815a56a0fab5229524e067ca0359f97e0af5e8be7c803175b75b264edd957b72a08354d5685a3a1440bdca636d6c507bdf26e8a99bdd951e0df68acf90e92c4e031f258d4c63dad0986b3cd11d42141c944d95aa98c6fff3ef2fa91bb53e370bc3d412feca627ccac22a3ce90c95a86805041aed702df2aca31a6d16feca402e470c4eb3bb5981e9d95bfa66386b0e45656b400bc7faa9b1f2812eb0b094eb3a6af1304a53ff4fd224c51e66069c20c8c8c734ae5c56e124efae888af7743fc8ca7dac11d08fdf1aaf21e33fa51d53104e2375f37f61757af3c3a28335c901ba6ae9d7dc9aae9b04eb1c6400f11c2dfb52a14ee8010ce9eae8600c61c9d800370f2670cf01f731c3dcb12afef111e0ccd01ed855c775c4dc6b9d7190e7f3f974352c330459a57c3ac14c93a46fa86a242580c3550ee46123c4f230b3a5383a0122e45effaed8eebe2ac245bfe6811319d8b4abd1bc88a93c7fbff4f6040c40d5861a1c07a01d098c5d5e2f0f37270e6676d7cf716fc5ff3100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008489e6811a848b6470da4862f57e5b269342aa694f1222a736af9a552408eaf24a51dfb8eec83f415a3e9aec68fde4b11d4d4bde08a24b6bff81995b0428d68cc7ff1e43b9f149ee35f1cc320b4819db78e3e21b4c6b06b80b684184cf56fa38bc6781a967a08c5325d9d9267b9c0aa0c2a5b40482e18066c96a0aaf1a6d15d2abf1e279dc28f83673f15c3069393d323565c844e2ff7a211cf0c631a280fe88558e838e0b5fe0419ea30588599c4dd7edfaf4d286ba1fe79bede0e259ca31a222d30d46d7ed3aa4251e2ebda3e7991e3960644364668b28d926a10bd19c47579f2e25b048f7052e3c4a731a511d7a501a42f0005347565f41098ac916b3d1be281c1c11a249b0487b870fb846f1ce07a0359127bc5e814b50da735c3bdc381479df668d953c96a72376e77b5980c45a2892c2816889783c54b4c5e8a2de22fb1e5b494142088491040c47ed420bc3de082f9f5089971eb54a1ee93eaec6d992fc0d8359b923f884c1f311b7b276366523ee61f9c246c9482dbb1f12bfbb929de5c7d372f678e42a31ae40862a54aa1e312230ed9a8e08d3fc0254c5d929861e60d5eb685c04af5d43e812bf67fcf40860b033c59698cf60008bcb590d41071500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000acb409e72a29a7d4b78dade9496f24c871defe642891d814ab5b6c88cba259c4ba8aa70fdf0fddbe42e4c75f685e1ef20ba38e337415a3b56e2c58804ce11cefe13b703fb5da4939997824ab22b471aacea68bbfc1856a842761bbe3b783954d70723dfd6ab89c4fd5ea60875018b59a5ebc2b13d8ee7ea489017e066784ae042cb7ba5b869b97dbc600b66d8ae47eff096a49d9af92fb0c71b720957433732415104e73baa6ed0df11296fd8a1146e8fe68ed0715eb6f43d21e37ce764b99df045712e0982ac60435a602f8c34633ac763cc0cc9e3086cc2820d717ff1b4cbf2c0b320cfa383561e76f03e5ef1b9aa313253bbad94545ad53cdc6461df3ed6f99418a26813defd629263c54b68e5f79d7269134527178420befbb5b826838f02545ad116974cd70faa05bbb03c71a49d4c6cfd9448d58a989ff2debfdf25c50b0063e15a1a90b70b27d5eace3badd0f7bce8d8f8eca8b58e008dc06a3242849eb0917f787f0abc04104cb1021a607979ec364f5fe19ebdd9eebe59df46bbd30379eeb1e4c35152e187ecb7b9c04d8bf6bb2748cca40e21ca8c24e0b5224ce7787c3066204a81d0d65948ede8ca88770bfd71680a9dc66b7584746a3cacac67000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024cfc8129af597ade0ee1c05664197d7740c119586d4c4b822d56f3db89085219cbbbc74baa4128b043feec44e2add0d1008a5d03761cf5b806a3b254df364257f7dadf8ac84ccea2d6312d64507a75246fd6e472a9e1f2cabfeb0f1114f8c5bae42d8c22599ed537e5ea2ffae6c00763256d4c4b72ef44b62f40dd51154e4383951e4bc0cb41df2b54912e2d58ab8122d4009a75359459e37f88e2ff9b6c03e8902239f32c391c5ce4e95c07263c2757a2ce8ac120fd9eda30c38bea19a0ea2ac569b79686e002fc0574bc5669a55d0ce36bd76266cbb58e5183b799de3e057e1aa118e0ed17829d85d218ffcf2d227dacad1415194f8ac98388d0664efdf72adb8b2d830b5c6c783e5eabbeb2fce11b72488a4c068d7501779cf30aae3ed07300e9d998cb368714fca55f3153b22ef7a8f3a37208e7541060bb5b61ded91ecee18cf201b53a2cfc257485b15d0295c25f58d3be7484d9783f37e1a86d43ba4d406aeac5eb1b1aee9fc17bf224dd929017f59afeac10db7f0bcb126686b7e7bc7c3e97f941c6298c29b261d0dc7e7f624b48c4d5ff86a8611630a142f185f54c19bc4689c799ab46bd8b40f01d1aae128ce6886d3b5efc7584293a759b468610000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adbe396fd514e2f8286d135ff4c850c368a39c899011e99b85797c3797133925d8cb3eeb6c3e8a08847453be8a31862745bff4f460037169c5080bc49a6fe741d2f598030ca53d7526766e2a7c9e53f64b7d1f185260ab641a5abae0ca3e0c7bd2c227ef98d226973a87cd102bda5598a3c53e7f9bb625e78889a0cf9a244bde2938aff5aaff8b6f732e14820676cff0b5fc9293a59efb210d302f34c3cd9a9260da34e7d558f9b370bb8aefec8efec041b68090a558f08dede9209ec930c10b97b4e59c6eca5343e2532ea73504e7fa273430fae73ef6f14f35db1e711b3f84636e0dd2d91bdcea26000423f869dbbebec44e42f02aaa7d27dfaedb243c1b635ccfed5154b1e6b3f7893438501bbcd1772129efe2da952e5a05bf0742dc450ff4465690bfb41213e619b178a2b7f69226dce9e7c05f88a67623f2398ae1723197b3b64785b23d0087e3d3ce093a0f14bfbe0a8033240e2e4ba20be1baa23e117cc24ba4d690288fac0f5c585bf4d829d505e926764f90d29f3aa0c81a768bdb05a66b750eadfe342b7714db4a5681d72396eaba6b959631de9d20f3f22ddcd54375365da6884a6690bf35b2a6c8d0c450d8f93e36746d683907818bfbc6ea840000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a57341bcedd7fc4b8af39cdb960cbe93dbfda52e3cf5f97b82453e8bdd71578b1cd6164a64a5a0d80d82ee5659b8e4e9029bb32b8afc660acbceef3645d433215c50dae4d70ca3e1ac502a5c28e2e183963e1de8c738a42f5bc427f54d7026a90302ce75fe1b6bf8c862cb084ee780a5dc1c1904e7c5ee2e8ad539eefddaf84bf9e05403e9c65a1a41245f4921e2e05724f1fb7c4177c75d734866a69fa00a9c4163c88ead5ed2d78d65401dee9e0e68229273f2ceae3eaddddf7a926f60373c021f27cf8d43c1cf786743847ee91db62a772cd8de4af9e34dae0473a4323cc709839a982112f872750ba3b9c90cc2164637341a082d669e2038ff7aedfb64e18806077bcc46378a4132516ed4396d84c88828194cd862fcb608e102992fa4b59838d7660668fe41ed4b5ec7d67d3ff1625df094bc11e9ef69b433c23aa5c695738e8c3883183df659d1625d7cff8bb9b964d567a9f0620bf34247f4e42fcdb7b5c755412f7b28ce583a3930f5eccae3c427536cd0897f325d488e30e33d8eaeaed73982f576bac5e7d4f98457770dd47ffc4ffe0e95ed38e56c9d0e6d58e673e15fad85002ca0c1741e85493bda678f285f3b2c8b2f27673843b4387c55121c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007c46b9a59d9a156a772442d6f192e8e39c2a8fa7bb30cc9a7d8683122b5bd64e47cf3625df6eac5691613c1aa11f5faea5c8f0947fbe5b98bbada6e8e13aaf5294d54d7ca456170eb860e5d97e9824d95578b3ae7212890091124b9db90ce3e60be4525aba4cfdc69dab0799e901f97fb14c837716a00f3aa7e1e685058ddbcb37c00e0e891176e4dea61c340fa46a2bda47769ebee996554eadb2f64db874eaa0e4c2c51b72b92996503a014690faffee01bb253d784f63db7a50ac94be12df0ab32d4098107940f8fad5916bb1895480a729777545fde4057d7666fd07ab54e52276d0425946b405c61dec8b3c06be32ccb844bc7c9348bab6c5f94547705578cbe20d021c8b859a31d51ea90b4ad844d69621dc386b56b5ba05978632c81d28db80b2b0172d621e5c5b94cd1a73d4fe448e25b6bf9d534c1f83cd39acb4c4456a88e601bc64e063578c055e53681479cb36d0bebf1114352ede7fa898441dc2b4cdd8d9e0dffbc4752e8e795e39153a74ec5429bbbf4b92e3ecaa40929ecba6195ea9ff8e89eb6e34292ef82fb4cb1e6369aca9e4bc917ef7c55e4737b07b3957dd28fb514ad12798eac2b152993732dd5974ba22a04c2a1f4f0b108c6420000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a84a7c9c4f0396bc10e697d100b4c6755e1a90b3e420f9d18de6023a62d73a31755aba088d871361e42446d2ab23f3e235fef2abfdc80e45e9b9c44785d6469630e4d6b3f7dbe6ed4c8259edae2e101ca5617ccc44dbdba35c900675eabebdaa3f88e1eac0919086f111ab9f5294c8c2d606df9e0d9c9842046f3c38e815b414bbd4a611b5b0540f005130c5c590b44614649bf323d6f6af1fdd8da8cdaba8856712337747da57934fd5326aa4ec631fe98938f05bf37aa384d95fdfd04682d3aef99bae82cfabd781fadbfa2fd3327673519d1354df502194f96bd33adbd0e29490a5c1d92b49a31dea98ba2fad3115aea0f3e3ceb1be6e738f387665f577a443d9926f94d7cc8f91c803524e50ed14387e7730cffcf1e8da3f74e54fd1916b9ecbd37092c6a768a21d1ee3ce54299505102f89079649e2131c866611a154dcbf6145454a5e05f0cfb371b181f232df5a99e6cd1ed98c5c795c33e31c53f126555be27af9172bc36f7a6d858d639cc34697ce5b23a72732d8d938de0126b8611d3fbd0469d88bf24228d15f8906a114e8905ed73fe291ddf794686f617195db2557f6ccb5df1e7765ce8f8e7d0edee3beffa48e7f5d8eba6843e18215c0134500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fb9e06d77590c4aed139147d9a8ff2e05d47a6eaae651a2189c8c239a0e2582f4f30d0d9ad2e60f36bc6a34511211a4636a784fd341dbf0714678e308b61fa6cc400ff2505cbd20b2c0607deb0c763e07f063b39a85d318e637f53165f137eecedc7e68f141384e692b93e78401bc4cacceb5a2ef5b717cb0904dbe34ffa36e756cfb3def7f231485ae217c81acc2d2f9abd165bb05240b9f6997cf4f34832708df37f7361561e4d13bef7f0660833da9bd456830f0dceec74e4bd0b7281de4dd56abbed5335bf7f2b5354571bd85453e3ed60e67133d7080629ae3f142dcd541b12c417ac1cd00171f12fcb41fe0fe53610fe9e32dbc88e5b79d86a16bbc1578af821f28f3fe3504b7912e0b5f726e68535a4d1d572f65c34617dbb36a301b5e71de2c609aa93d159750c1946b0d8ed18ffae9739584168aba76a94c45f671cbf1a38157fc0936f582802366204ab0ff4938be89e73461582b907eecbaeaf92b35e5e135d1a9fe0e97570636d8ece765ecaa6241b9a5c5b19ac4cbee194efd329f870cbb306223135a626a8d0319e645dec19a686d5f07a96eed34cb1f5de75a5455b1e6087159dae42fca69133df09fb96fe119d1586f45415e4307d292c9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011311d31e2db7b3c23a0c7c7413c1fa99607a02bfd00471051f92ac369d2e69369a340f31d7db9e85136ea4d46d122dea3a3d4ac0d767d42967bdc365a7b43eb70456eefd8878318608d803034e97bde35c007d9ed235a938588566e21c036fcbe9b53c50310a868d6ca69754bc650e4408dfe075cd201f5cec04953f739f61c1b43c202236cf68aa0790d71751eb0c7351ca22262dd6b222c2ed0280d9999a9f2d0c2e07c16e390f2d74a9382653dc266520754fa8e95ae20c5691846deb136af040f5321043cdb50737f0e312be710b02c71b25eab7ca4d0ab92ba0503f62a48e7ae2eb0d78138f989b704a8eaaefa6f798b30671b603f107f25c512d1f96f9b8af97a6e420630f6e6f8e41170255f21ef2da53fd8846c563b83945a7a22417cc491d636dd5640463631215ccfa0275eae24c54fefff9887ece04158c938a1174865fd8cbc4ba58685fb8722820c5300845bcd9772745a9fc80dcbd2c5d0930f44e10f6500519f32c907a96669652c236e306a83502df8ce842756afe45fc41a022f15acc7298f92e0a587ef3b530f6f9a82b40419fd35e32ecb9217280c227a9a95f930c3ad15e820320f7db29b6609ccca5969494e7c125d81b52c476c8c00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484002ea79941e01aa4d7c8a4ce326616a15d5ff4ba586d8be019c353058a3525e9601c619bc5965e3f894bdd513b9d938a705b6628e6da72fd00e23ee0b8cdf4260088af0196057b770593e81331bfc2c94d7f822d4ccc149ffe563b55afe3b602c2b0295323a4d01d2f9fd544340e32a19a9776748059c70330e5c9c3364f59a1b0cc44a710a8759cd781367a41bd5cf7eca6169dfbdf666b5417aacc1df2ed7072bbdff334d50260b0177f3f51896c374f9b1abc623c8fb0a0282f87c2a9d8bfc074a307bece3853568689cc7dadc752b6ec7030471746017aa77ad74508ed677128ebf8b7438a3e50a834f22b0cf134ac6e12fc8e999c06af207874c82e2fa2c2586d12a534221dd3b09c73d452986d0fbea811c77d83ca037ebc5f18ae4b22c20b3bc01759e0f31101797a6553b40025cac5eb00715d1fe25d62aabd693179705478876a0a0f9eb82ffc755763efadb6ae45019c45c165a7a08612a4b7a3d76113b8e8e0a6a3dcbeb7290a82528f1d11b001113781da059e5e4550f93cf01f719e4758994f8b42913a67365cafa40198cf791ac2d92e8723173a2770fb0218e21b96e6835bd4852c807312307047dc2221a9187b1ead466576a8f6ef333c80f0f317bf99a59c2b46cc225972b824147df327c4a689398847cde6ead1f57ff8128feead243dd6158837a204218ff7ea43cfe7e363dac87410af5ab5ddbffd530130626680ca02c83d0d8db92abb371d9dfdcd1d6ebb4a8e20891401a294b13bc07c3190a34f0ecf38c72ca7d7d8248473e4d5d3952dbd805405dc5a555a75fb2123254eabd4ff7e53214c317759ca46f43df325b07f7c8b99c8c8d601fad01c00eaa6c5d10e934e2f81fa98e24a9c835599db382489402f7e41585b0faf538552f8e739b992a8a1b99ff318052e95f4c0a5ae414c75f4fbba6ff0cdcf3bdfbba27ab286b208395f857173b07675206697ad83b10c0bdd5adbc4a1e2b1ced163314e8e6ee1930e43e9bc9c90bdb6344daef42aa2dcfced8f2fe5866c3421cabc8004555bc1c1121c73c983b876a93ae530c415f472488e7dc20e72b165c110b7a07590dd57d73b96c5da4c8f16838e7a7b5d67e7132d1dbdc8543c35ffdc98fc200c639336eb49dd1de50ad94ed3d27c691b28573b8dfbc22883d95d725e5f80b0a86797b9b74f998def21983f7961ee3123574546c98a180ce5d68ff4354b22b169248f179806f90727df9e0bed5b595fd49caad1bab71378a2e831522d5035e111b0c386af5d5bc4e0bed80f2d9f9e89d0c27b1ba84d2a523c9a64a88c086280f756638f31a1ff12fe4997d96e89090497065a9f683a0ec82563475b7b297650352a36f8065788657eb963ef7c518fc4a5943edc7a24fbcd3b19dbbb75634a41e360e1aaaf5a9614f149f36f517d6ea039434f956cbcb2466e11ea9b7f6069b134715fb9005ee3c413b4b458552ead7630481c913a593ca7047fb3c1338afd50a1d642dabfb8e34f45ca570f9c7ff1114f13d31eb4924c9925d4c2fd9cc506b0926039b53355511a3a7934ab24b9105b7e4a8d6a30a660fa24e5e10915cd7ff111ed88371b51cb086dc45aefe5f4a792bcad0a51c8d1a001f818b5b273465c1009fdb74349d0e8bed5beb8906ce8010f05607545cf823b3e8339d080c28df8729fa1bd57641d19c39fcb557c0be47deaa2f9f7a1a4bfcad20cdc1422529b0ac20964bade2171b2701881c07f76bcfde8f12bed272967d7bb46318592a3b3f390a7617eb267a6e45075b6136eb5688b3433f125906e060d54f29a4a8cd98770e26fa2ac722c18fddd05ef692d268f96d8d720896777a3c634e797101f733d1d90d3c248b276ffde4656c1cd3272f616bb0458c96f72ceb56a07d304221355bc4008baf1e839ec63b335077f4bde6c890f8964edb92303b5d3e67ae260d3ec9341f2571b2aa8fc1b7ac18daa2db2108bc095671e6cd8a22ec30eef3b3fa25505309dba01dd42b9aeb7ce6dfaa5554d2b2779bc08920df9fc2131a94bda3324dc612adbfa65d3f9d371719841bf4ae98cbbeccbbef0ef2c1198d26adbc1835896f03da4333f1c8e9409e8554882fe80c304a63b4f11664b73a7e752b5557ff520300c9a7f8ba447c5b4ec6c3db9ec8cb5efdbadeed88deb2fe2c9aaf864c7eb3b5284a2f0fb14a8a9b2f33450ce9b02046db0aefc1046d62e9e74c120df2a06cb81d06ed0897b77b52c973daa226b7c652afef1461d2a3d43aa0bcffefcb8e356528aeecec4c432b0a90504f5570302afc1ed00f233aecd1548e76bd4aed613982101d871845c872113999c2a4387b2bfacaf6ec28533e1b2e3e52aa50b3e6820f1cf076cfd75a83fdef0018fa43c1303510eade0a6fc0fd96cb254969f6055ff1093cfaf5e8397c559a76c9dffec8e2df6a0b8e54b983f1a88b338d295b29b0fb238c18702ee8518e52bb2a22ece8f0b652b97d0e239c4a52279dfd7bb600035b0a1885102242f70d21d47af87e79fd85b13575e696abfb3adb0d1276104297631cf80007f1f8d8d2289405bdc81ac9149eb5b7eea226441c1c1682e9f28dedf400731adbb8a82961331d2e0609b908d98774e69dd884301ba5cd8c2d74eb637a25b74c2c95b97b58dc49439d5251d15ed2ba93439d76d69da034f7f160fb6b7210641e257f47fcc95dd5aa3d8fe8512acc0e59e6315d230cd44c3fed4cf2c0542d95e6c367fdaf08385d8fa8a4e2d2b5d40f69cb04843b435eb8969b6d1ffd372ea1382aedab929810e0a0da26aa60f415ea75193782ee0d9fdaaedfdfc82c33180f75215f628c66308802d100b168295cd5c0d20871484ded7c27ed2b7b297217a3b1db64df5a49705bcaad08cff6533b0b2a54bf1f6872c9b2a72cfba8b9a240242a11609f75ddc6f09be7b379230d2248a033dfd56ea4d6bb15f9465f99de4f1a0f4ea3265fa50b4cfddec83efe7e7913f15698c11c4afe59bc1581815929761104229cd046b3a92401781164343fa15c73662e29c2875a56701515f010a526057847ce4be28bc60964e9ac8b4fdc44ac3059022a8a995dce3eac1ddaa1e69d006c8d2a7fe2c10a3f1167a8d5956277cd1c41635b94f0cb4607a5ebc48137501de5a9125a8f32997605187764a84b0032c5ca61e7a252d06bf3026b447d4fbf250010a8eebe96ff207dabfa149d16e60b85682f5247fbec9a682ca55ef795132036d957c2b2789cde8b1ff7d3d2aae6808c2381e589ca5b286f0f9f76c1e93d229a257e7e696dec65eb4697e13c9ab34cdb06ae6bc51e1223a9399d226b08e8121dd1e7f0a89ab37131f762f7b3cd182e6328b437b6af9a22ef64a3d595b96f1a1d5d5bc715dddc7482845be1687e96743d27d23e1009156a673b33825bc7092ded48cb87bd96f6bf9724e34728a211bde25463dcc4a0991cf359d91cc4d6ca22070c3ab7bedd92a0e430fd847f2468f51718bff7eb71f266caf45ac471a13923d1a055d9395dd241887707b7de4069bc4e02c4013844b21bc84420ff3403130ebe5727a058252aed12a704015fb3a0a7fa8a0747a2f37039895064d53a48e007e89e95aacc9c14d71ec4a9e0e85c8081b0669c282971bad306b7a66c547f0a0e7d1d73e296d8f3564c79995e0a287a150ca742f110434b2c6a6caeda372be421114478a4389235b37edbe171d371783d997e9a0f17d2841debd6cfe7fb57602cd533fdd1300f8db0795d57b6c8980f64b454ba758cd8c3ae7ad92d6661e1a92d5b03be5bad2330ec7fa0b8ed3d46a216c8b4328945c11e8ff8231a0b90d697065f1b66659383f709d55f95dbe685b5889e108becf1b9ee1f6852bfdb596ba7180d3a0b7bea02fced0402afa64624cc5bd9e35cd3dc0fc2112c66fa4275a71d16f101739c894219a1fe387ca4f49556cd3e68f766f7b16bdee569f019f8f7af0a88af55e20621efb9ceac5db1aaeb55c477f300c0979bc22db6d5a7237a9c752820651fdff668409702519d24e94b7a5b722ee6001042d27df375f6228757ec09d4bef518027ba7b3b3af6c1ce5eabfa27f64503d8d31d11fc63edd9302a0722df6266300b7313927f2740049caa2ca4a7468883b841f2650b905337acaee682a5736a401ac54082d6017df09fc4390ee8217ab8b4342f318962e75a80f67b92fe7a042307702d4955fc3ae1a7431d5398f6a536545489e2dbeb7e873cf215c0c8e3aff2b716650c25424fc1b57ff1f0517449a86e0f4db6e4fbfa3ee50810d2aba0584d2ad519424cbc5bc8305131612700b0ab8464f6e52cebcb07b378da32df749ac2da2dbed84c8f138fed3461163e7111253fd7a85b5d6e7dbce7e9d1d195ac3a09bf755133f15dbaf46121027aeca2d965aaa0c5d8fc381adb8d9870f1bf7cdf45030ebda7d134b08253bb0e32ac2af181207729c6c2d558ff71dda9501c8b5bd211682e554c15562aa1852f9c3a997de056fa6f98ccbb72b784c19d82de6229f815ab52af87838a6f791826614b22807405e8b43fedebc4e895f54332063720c09c3a8d1da31e569fb1060431541b58a285289e616f49f62b81777260cce7857bd627ab855b21d90f0b9449a6a5c1010143166b52b021eed6b5efe991c438b3e5b13837f4956ebd34fc6f0cd0d0eb7aeca7edfba7864de98eaed86ab0df21f711edb80fc98b63cc36c82aa7562e9e1c571ecc206d282354d422dc5b8231dd6cd0a0510340cea17ac103095f4e03d5fec3bb6430c8ab6da2ba03f23de19c0860ae2a488402e0e0af8f19662532d481f2af63029b3601597f76ec6919a2880387508d56607ffa239e08edccc667d6eb3a67dd1cd89d6b60b0c422ecc2e0a9f74c655d78542b5048ce4bc5731acc0db731c0b244c89956c0fc9924fc1360079e6395d52ee08191029fdd8cd6e7b6233a5ca119089144ec08f17eb8d629c0c93feb6fb78445c74c1715656b806b85328e7e8b668e686cbebaf8c957d23c826f81433d2eb356ea639ce3ec305eb9473b5b483f79f1c9db70928e1ba3b1ec50acbe6b479384ca690a909b464c4d484baaaac5bce892a7d6ccf92f01dd1eff8268ad17402838d7a1509a300b4900137229a9270326d00cc9c0ac08f56f842092631a44aab9c248eb0830e42afbb38bb511317f1955d4016a2481540a882846e0196009ec92ef593d844b9f9e5a8da97ffd713bb6b1012c21d4252c01f9e232423100016869c012e9006f4a98c868a8175efc4773f0e18c9ad1f54337143a3a82a00b8b6f24e075af3868b35661ff0c7e06d1c6899255af531e4857c4ee3dd8a0567f97252cdc165f808ca5357e9fc2adb725ec00f9239041bd6c0a9d885364616cb80d558e547d27aa89925c313ca65c67b09824c55e40d037a8150086717b701ead62ba37c1c7e8ed591af4e921f570ebbda4c94c3641c619654dfcfb579140259b6070a7ad028a3f2d0b9905bb48bec10b4d12c34df6cacb845a7b38fd2711e104473b522b05c5591dc4c81f68e49ae6230ccadfe3108f908a4e1c1181ca10a2b39a34814993b9155fecee752374658530ebddea550dfa9cb63b1a2afc3b811834d7b2ea9e77cafb5b523a19dd04acf60fe3e6613a096d838b2c41d076a86209a91f4869bf5c34d4e0893752267c7e359d5b5811e9f271ca66c697030918c091b89714511ba096c2368685e6976097ff2e744fd3958e259af7c0f50b1df2b1e1f4294e4acc396a5af76e0c56bd98b1cc61877031f3cd96b85082f9331b79d2c2207be18c03a1818e00cc047120244382937e90e23607facb9b6125f93ef62003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000009118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000090d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000090a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000090b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000000929a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000009141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000000925e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000000912978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000092daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000009189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000091159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000000905ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000000905c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000000914d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000000903db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000092ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000091213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000091ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000000914fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000092b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000009305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000009280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000009223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000000917a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000000908858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000092618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000090f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000090e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000009172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000090b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000000905bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000009137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000092e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000092297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000092608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000000918373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000090422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000009204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000090afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000091998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000000928d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000091da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000000921d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000090ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000090e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000009107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000092f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000000909726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000000924f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000000903c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000091fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000009205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000000925110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000009283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000000921cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000009094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000090c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000091f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000092421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000091fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000091bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000009304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cbbf60f40b0de83fa246102e5057d00bcf544a2841f8b75b6a88929bb90a9958d5b2c30fb303a36fe242651277a227e2583c8908f731fadfd9d6e9267e62197bed3723c32d5dee330ac4a465fd23c8097d8650deeed06eb2583212557972e93293509855a7909b53e79324b696f1484f5a783a204f2c1db157860abde301c190a676c080fa5f9d62d622ec8cac9f04e2535e99b719d3bcae196aaa5a81f005c15ac932808aada4b9caf23124c4e1fde889c80dc87e236c98292b0d7aefa7aca2bf179e86281468c277163acdb483bfad8a2256e0f9de28b5cdceb63be61496e4762a789e99c0fd2c272e88b0a0170f6bb36db94afb7e8c9b50e510b76da7f8379ec9bd9a797287e77d1760c31e9ebdc2144494a977971f63e09a228101ed7ae7b9df8dd7f779b55cc59936b988b0493584d6eb6985a91d65c50dd33106d8b3c5943c6fc29ce94fb74744f2400572857ff5c6d99332b4fb4cc731dbb1a8a9b702b19e28b34f59c5e4e785e5fcc3a67a31edf25a856a91fb6959374aba4d1229cd05478b940955919b9fe6caa986f6a1523fdf07591c3235d6fd14a684aaeb51ad5496a349f7197a42ebf16a22b1ab482c60ff23079793cf316de81b52ab7a8c300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f6f86f2265903a497e9a9616a78a8fa1e2e95d5a7192d7d205fd1fff0d99e69aac31597f27c3f692621e7ce70a7d0238b756378e5791be609c48b2d2669eea72cf652c900f5fd8bd4e475db0d6b53d4801cd431542a22d5eb3960124c92ed3a4d83f19cbca75479ded1c62bb9e32b20a779918b405844dd6881a83bfdd78932a92d9c6f9ef3cfb131e4071b2a2b4760bde8d7d48155088c810ba4ea003132e69850045aa5eca5dd091bbba6c11879315f9db03b610ac549fe428066aaf307a2d0bba24b4ecc840740613b221b97ce42485f597883de344e80d896fddc958a2aaabc37db9c771ecc46a2f050356630775174cb4f8f58e3c3ac0ce4a7cb8d1eacac21f05707d478126551a2968c86b04c410a60cdcb1f0ee9f5c9e8041fe341519ae17e05316815aa7122e32e99fc53d6e0a8e942edea25c3d2724d20fb76d6ed557747c99735fd658a7fe343fb718b96a4b82978af2f9b949801c9ffc28050320398fbc780f43e83328142c84ee0b4a6c3d765993a271dd584c4838323c67aaafb33eff38f8cca39b2588da3f5f024383118d0a2fefdbadd8afd5d46c451ae8ce5a44486b1b5c052b6bff15e07d5b9dce935b102325f1c342c1110bfdbbce96d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4bb6fb84daf553776baa881762cf616cf7a23745aa4b09be065102734245e5afe167322a5768d7abf3d34701e83591f0309a47b968169b430e02f4b0e73198016f8b72e79097405f48f4ce79e117fa5b1439a7227cde87a7a61c832b6bdd8d723e257d9189181e030b46dd47c9ca2b7c545318735496a6f48a14cfca88a10a52c6344b341fd0903b32e10d60043d15fa2a05958dc0c2c94ceff1935faf132f4207864089e2592de88fc019d25c106204fea116cf362cc3dd86f86be08c766827bd0827f5dd537987c4a7b042761016be887e846563ae9d3714ca81d26c9590fae531a552140a6a6d731a7835da50361b2e99b59b2a25ab493bac95bdbf20306f84ede3bee379cc855b406a6e4dfd2baa295d5f687a8e3ff45e74cb1818e623c604a950bfc221d1b90a7c1dbf18eb7b415886db75774716a5b2e92448ea79cad868749a672749cf0eeafb167d767fcee7fb73db23880aa8747442c5b3213c4d004dbaa27f03e3fb8c67634020fa9178666f7fe0ab08d923c49c67fee9cb391f00a2728f4ddb640b0f105c13e8a863abac95360f35f2b5ff73ff2bfdae634fe90aa000d47b63fbb64c706129c8f5596941dbc98a7d82cf2aed88622669b42b7e400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e865bdf109653c89a0cc31eeebabca420d8f92f0b4c22527fcfbac4e14e1c3bcbb881f771bc7441ab1dd3906fe5a706064f8f5ab70f5710f09d054ad4c388a79fac7c78b28b2effa881487f131edac40218b733d71d701adabcb957cb9b350923feeb90f782f70e6c737172800f67809ce24133f8bbf80dfdb3c3ed76df0ae1a0f8ae8df39cadfdf76927358ec3b75ddcb74afc4bf5faf67fb15bb6efcabccc32184ceae6086806fc747dadd1216cbef963db3afb40893a5f82c3a310715adcd2f50408ae9572035e706e0ac2964451ac6246bbf68c65aaca0d8e78b3ce7b8bd69de2dcd8b3636d66907aad00a863ff2fbce7dee1ca68aa975384d4cd120762b098443c6f81350adbe88893c3fc9d2b79c8957d7e496dfb9bd7ef5a54cee6d805ef853c08e42de9d58862f9bdcdda64548be7b2a5c97e62a8ccb4b41e9893d991535df5dc9b8abb17aaaed781f2c53b1dff005fc0a824a7b3aadd29e9dc76e4d8f1e7d156ad3ced0293bda118f78bb0ca17f87e01900e168682f71ae6629bd7455421beb852b584d0e0be8da620deb41ae1850342f877fd74630752b41f4b4ae2753d1ba19bb04164b0d2240aaf1c1ac486455b6ec2aecea9400cd53a748e13000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016225d84b1f7bb4de3cf9bc34e3068d64b0cce94619d7597acd508dd52b2a73362a5c570c070c58e420f7e7759f72d2007925a2cc2d392f93ae68a7def8d3667cdfd8a4b6a2da293921af95b7fc6739647c90858984173a98e8ac91fd6f34e503baf9f1a38b3cc3f495ce3195622f2bc131138bc59b419665b74c07e2603ab35a35c257e4eb968280dabfec45806ce2ccf818092f35d0a344a72ea7b200ccf5028e6c58c5509152528674b203dd8937f436a309504f8459ed9d097752bedecacee89efaaf288737b7a3c757a829dfb8889518c6660e3308410efca8b7ac1d978cda004cf1611bba2780871c910373260fea4f25a81d097d1429fd20af2c773651c7d794b7645e7506d0a3ab5956b1378be6fad4bfb697ec4c032ad15196eb5c76670ca65138399b9673d36a195de031dc21936c1530bda05d24d4073d4402c556cdd9a4f14314597d68a471e6a83364d48ae655ecd85d9ef19e643f5e3882c6843f0f6484d24931fae758ca9a92ee3139eee63204c47b9bf43678af96dfff63eb42e9eaaafbd5c9c0b7ef6518c831486e8605bfd66953b0c12acc1c06628e27c0c6cffe4ea100f62654209d50e37f3cd1dd24d7162c8e3e351e2cfb5d481090200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e7b80ad70a64929b6b213faf194dc59840daff34f456f0a9b73ec939365acf42c8ee9dbef7ee76567574468187e68cadc84fc3f2e637fdbd7716efb9a5ab500dbbffe74495d7e4c7d27f19d04babb9176261d783116f3a12896d03134cedd085e8b5e400382e1c1cb41a729f8366181b7ed5e65206f8699f65f8f13abde8b6fc8dee5f4cc0278401a7642f4a973cb50bf04e4406ad66f46f643f1d8ad846d221e94267577912e9ad3b0bb2a74c8926f9667a4cf96a7e193645b91b2d511e3e5f86bb1b1cf6bff5ff5415bb7a069ad728a28aa05b9ba7ed78e398784fabd2dcf15a963ee06a12f2c06a3dabb40ba257910d648ef2e5e31216c960f2291f9df090805f01f9fed622bbff4d91ca5788511d6714f78cee04f4b6d63a5f61be22444828b57e1707bb9cd108da28c152b6447f1a31e2c9b353990ff164f03fb5fec992aa5ba94394840ebaaf4a4f70456662a9630905b8f561b9df437b02214cd30ff413b2c243628fb7829a3c09808e35c37f4a02b1d99c88dae97587bd4fbf68c7c76d875ff0be4190683bf558a429bc9b17d99f86b17aaef4bb4e8c92be23a2897f814d8f623b94c47101f60875da34d7f92fc423b9fb639154426c12be24cfa060000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aea070a7729000d43ca87a379d72e83e1e7868e71fdf20db98e2b15e8ebd5468ee7b47ae226af8d1eb5678870ba2739b223e8c388319e9a9ffb7b5e0c1d075b26d21023b08027c10c186042b27107810031addf4cc60375a8806811a399bbd7ecce0d1adfb4da94006aec9628f71ae881f5f8ccd892bf62a01f6cbd3c6876d55de3485d61dcc7ea5cd3234fd1472be5f22421494f39ace0a65fa51049dbf83c5a16eb03308d623b0e66f9655cffd852b8c357d6b632e43974cac1a8f4d5dd0ac8d46f1339df35901c3d81d561a36c5895b8794c4d7f752ee389c5e4580024b10d947a113a852645a3b5e9c1b1f99a001b1c89db5ea7cc66c360ea6f3297b40c7746655b5408d28c3d0856d3dd13e8a6a84bef09428b0a68540b4dd2ab3cf73f0462ebab69f6198b34cc260e8d8b496e0ed26b9f7af507c9c0a154d1c8f80d9983b865c65be50377e03ba6511eb97192be4951bd1af5d600a194570ac82798eb9b6153a4b4a57b8aae56340e094d813ab9b2d74343e9c4e96214751fcd60f999f54b7212e48501bfb640444d5bf47544877c8ad773e67ec8e5c39b66e1f36d79d49e89478b90b8f333bcb88caa552e13d07cf1b8939a9bd2cd27639af6824be2d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cbbfb0ee4167d463555c9df83821c34594308585c82a10b3ffe2cb14344ce2a3ec85efe0640a935768398fd879f73ea197978921951138b23c2585f80e1f998ae962b1a230a39734f0ec5839ed28ee5bfff93045298a249b35b0876173c83ffda8f28790c1443e6de4ff59c4b62379929f33052c321705a451119905e62affdbcc48b86bdb678712cd8fdcefff10f779d043b69771eb2b500c403db56c15ed4715eed872066f8bc05fd9a9f9cadd7a62b4f5205f3302b2e0f07fea4cedc59d78b4f4c6265602bfd53dc16949a56ec650334abecbcf21d31911df460a45c620237541ce2f270b1b0d4f3bd67e669c7e84e1de6d68ee4b07d5745ceefc223efbff246fed2b708f68edb15589f66984e8e74af017837619326d63eb90cd988826adbe52865773a1b303fbb6468856307075f32c10e9060ab69f5252f78ea2a57898ab19a60383647da5c842afff7dd0be0b903e796d143ec7cfe5a3e454772386b02a529df5152bb4038d6a19b8c912d5a5845d2f4ae379f4b8c3f9b6e0c079101d7f5e0dc304050fb4abc1092975c1e2bd3a9f2800c48418b22f4ea5eb8c06b28da45db9c15d09bb8a71997d4cb13dd2da381be861501b3c47d657d56fd137a5e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000299e432cf9c90e051d16ba666427cac3be483d1fb5a5cb40b69c572fee4a6d67582247a4c9c93f7447f822d9ed21d3ad7d1a8503f291bddcc215461dc6864dc7896c44a83d9da125c6a71946e327365bac86908a0aa12d09106ae5996c03bf34e74c29758370d6e9100fee3f7950ee0b0b12fb53b2e86e778314a47f63407d01feb87be86dd3e4236a34332dd0d763d7271d5afa3d9dc71076e249328c4fe7a627b9fcaaf3be0e6a7eb2d0133b0d17c9e09cac7d31b935d8be7d9c8a9ed8110d3993d17b54647aab01dd3877fd755f7c40c68958471b21aabfa1de20a50202953f186599cb898e2b4162a46b86cf41053f60be946964bb81eaeb1daa7262e69744df755c739e7fd42050599fee35ed4eb28c7cca048432571e05b7d6a75263396523bdd24c419f33c360e55b9f8a60d62c6235f39ca3be9aa2ed43a77f00ccceee12e0fca809570e29b0c22e8ce6c79a066419719fef6744239958d94f5576fb9471b4336912b40be8f196bc0643917afc52413cd82de54ab7b4a29926efee31e9eb1860fc7112f423b9e5c6235487d14d54f34009af174f315babf6d621dd6affb973dc35485d3cdf03bdee2d90ed2243fdf53bf6f5b965adbf0c506e2e9ab60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aabc959c8f62f2429ac61d7a331c5394ea895770cca7843889a7d41176f7f711b1877e558daa71e39ef992bd749c9b1f9b151cf6deca012348b5ef85463ba2d19612b20696839d2185e7f0b990fec2afe4e4a50e5f36c1d1ba66c50a55902bd28839b8b3e01f11e98bdc7aa6f37028d49b4310deffb4e9d11421b882bae64096485a28adf310f0326544230a1e581b6c22b0fbf93c52e6b84a7431d110ea85d6a2b43a7b79b6ce352a36e113473ca08ffd1da7398270163d650008a2f4251ffd696998ebfe35cbbade167e944a5bc3372e34890e2bacf83e0bd5532fc5c67d3939bbc0c3c58605223e6e4954996cf544f76994a3e2148ecc018963cd6ae476d739dbdaafbed4f38d1a76f2315c71c953205828470065809aa6d7e0ac0a080dc2fc08d09ef941dd3c821d59165c704f8cd13c4cba23490fba06024e59edac93a5a6045ae905509a633a304833e3eabb2544d3d6eed08481baae01db692a73552c04a502809faadc9fe6ee33f41abb246bd07b1a78031f728f2e94558fbef49ca984e94fc3e552fb95974c89dbb196dbb67393eeb2494e6e16cdffe67a466bcdc2a3b23bcac645d7dbb1ce53b3aed39110e20fc1a0d0b83de384dee3ef3f49386c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa87fc2760f85faaa539b022ec17e0d07388f11d6ad37d4e84a32f04cea0ed1f28e5e174edec03f1b05dc95bdf02c1878e09356348f2b66f5fbc8642eb1431cf9cb3ac41e1329815502f1fbdacd91b3dd48b33cfd4dfa40b60ebeb58e011f0be980fad3f9887f542c037499bdf0d4785e130009742f0382a114b679d27653b3ee4fd4bca5b3c2b330171f6562dbfe160acd2a0a2150337e670cd92056f22c7f7c0627be79a3dfdd0eae0ffa5219a8b66b8afcdb39501e5d7280d378b171d733ac85ebe255411bf10b3b257af5d9e6247798cf1f94d0438b111402a0f568593c06381ef7e060e65f246b1776bc4f0edd7a3a62e7661874a8fe03779267eddc99c3d7b87b758e06213b428d16a1c50c72c4096810d4cc6d97396a61038eeb4e1561e3fe862485cdc22dbfa2fb1cb87d6088e03ad063acf5d732ac099d006eec7421c53cbebec6a70508026e8a821ff7d70192097f1361d8a475a6d8748ba7eb6f01e2222c1b5dd1c12dba646761dd1588c6338b218de27a9a551d919460478134e455d9014180673477bae46360bc31dcbafde398a5919dda136c7eecbc4943ef61ca7ea6cb917b29ff41696f324c69be93e019b118d544cfc0ddc3b30b67dac94000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023daf2b5d70fd29ef4bbba232b9d646995b180a69b9a3f95f2ec58eeab0fcca39b77f8434473ec7f605ae3cdc9ae8960c4678e505afeecff766694face0f0b9220164fc92bf56f8278b58a5bf7f357d160ddca5ed50a2a377400e9de2c8c8d16a6657cbbf7ef010ef13946cae8e4b842a7bc4f6f9ce09814d179a5dc715e8cdae2a05d7b90638495d484dcd086f3d90b555ffc3c40a54488fc5335a4899e15aeda68e323be390f6d1a70ddff27ff07684e1160002001b1d352028d6ad547d2cb4951a91982bab8d8af1d4247ee01d14ef483a35c2895e05ac203f24c642a4c2a3df487836f5a6343b602ad701a2a3db4072396300db8ea338dd180d1b23ada4e01ab21acd87b65a59bade2e26f89d2cd4dbd31e1a2381e4398de3aee1fa3fd6144cb56ec436c2751929a23ac5272653979a161cb9e3fede37e871310ddf1cafe40420ab63ad93b81e9d5be0c6ebad4c1d9d724a1c9b409c91fbc1f8460e064da356745a84c974e2caaae5443c7abeaccf17c4eb433e8f551697cbc47297e5efff15a598e1c2f4c2698b59b296e512ecf39f677dfbc27b87a552569dbe7ee2a3eaa99c02928286f6ef4b74b907b03e83a73457398ec00da89ba2ad9529baa9b0700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bffbf3b89e3908bec70f98c10b5219fffe452126d5c708b834ee3891a1611b7a3fbf09f51c002b5f64faa0d5a9ca2232afcb39585ea1304838714bec4fe2df5b7dfc57cbe538d65d52457a2d264de54fe1ac4f48a374034acdddb5390aa54dfcda0101129f76a822dc00365658b4a93586aedf47cb63ad9a29cb830a6f7ab3d7ca5929639d8880b26b29548bbedaa400c6023a66d3021be3ea58f4f9a189edb261e873e366ef764c375efc36ffea415315dc69f70262451ef256f0612f383630bde481f653496f8e1a0bc613e01d0f6bb981283943749462342a27ad12610dff22a14c73efd45bb2634c2dbd7fdb7c828f0279706e59a536e5eb9979cac0507d1cec254a27e02db97b3f989f41e08eeecf426ec364d13d64da138b5aa134f0f7316b11e63c470d4e68d93406eaddf7f6a4511f0395784ec471c5283bc2594359ff5bc08a1f7ef5f33735e9932f92586a66d7e674b080b41c5637b6cb35499bab11a460a964ad33e8a7c1d59375983be8ca421b2248d9ea770c4839a25a0cc7eff5f90fc2a5f979e398b665b5308173d069dfe7a378e312ca8515bc73a91aef05c2c1923d7e472877c518921683bd68da61a8c13136158e94b471946731369fb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015c8090bca3edaf9b6712d6c69e8d1a9a221d70afa2f5e8aa907d2f683fee8f5430fe7c58ef428258c9d2169bd535f0cb0ec3ee39914bd1ce44e8cb20a6242f39ff4960bb89f93897b6e6e088b9c0e134a941a8719aafa7a6f67410939d4e2d81d1bb17074f8af42fe92e5c131ffcd018f9c9d32c24b122c827b54ef312e3a6097b971a029db9476ecfb3aafdfafd46349e134c15ccd9146efacd84fc19743d14908ed325498f3e89ba700daae5b3447540f89116f8249afd6d3352f15faa5f331218576a877ab7d6a44108374845ab3290a65a746af6002e88bf2ef297807746bd44e9a6bdc5fe0166a3ecdb5a2a8faa917cb3155ab5ab0fabb9d77234a15097bd3a49065931f46603568afeaba4ca2a4a071051ed7766c819a41f1d9485aa482d51cc417ba440356496bd6f6362742fa85706061be9278af2bc21ae34f39368507fb710a51b275a324c1c60eb9bd7dfef954fe4da09dfcbf6f91e14d1ddea6219a2be6009f1a40b2d2be3c390dc10a854b762371e965df14713f878f0ab9554439a9971e69ebcdbea293f496709441646c87484b853f4aefa1d911d05003d0ac7b71707988e4cb8bb441376ff494b775eb75ab6e126ffda239248459b6eefa00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b0ddcb107a15a7fdc974e24f9175df6b558af7453972331ea8c2b6df1dc186bd4f9954dac3dae3edbcf9edaea3f7a6b6c672c8d98a987b75873b9364e360320c61eb58db38a8a2fad75769c636a845e3e4deb9a16466c86e054a774755e7645c0721fa2303be923e8ba2f5230cd0b93b87079dd21f31241a52f1a14374991666e7e9a4cbf26c877669bcf67c95a8386433ae5c9fa689a0a90cd072f360f288101c151deb198dd3216a0c5dd682dfedd59b5f5c535a0ebf2536fb1c7498d4a7580b13d07551fe397f54214f887acc8091df04c8e11fdf3592e64a63abe7a884518af2ed8a888eaee9f705860e9fbdefe43548ca76cf88b38c59d3afc38411b064f71d111fd5759fe9d3e88a6701c0e4bf4e05895294db23d38da49f66462d8e299723c01144cfb7a1a726645bb9d7a967f0fa4f2b0dec63154a5e32bd22de0141913091bdfdc8b1581f68660e6b31b6a3e16f7987e7ef0cb253da0f15de07bef7a46fbe7d10575ebd3747da58d7e65028f344d788104ef51904d1d582a9717c0c6175990829236aa70cccd151bf72706c069bdf3ca3c36f23e821d0a36c804541503c653f765f670d7e0505fbe5bab06b03f0c7d34d7b63d5268ed4bd6b3873e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b70b51008daa4cc418f8ddc628fe5b0e4eaaffbf344fa77d396bfcef020ca05cd14a10e23e2af7ea31c08688f7a74486b6e30ec9ee3bb4900c7377de0a62bee53e7b46a5f2147ed916ba59b8e0e7e31ede5208644ba47ecc0c2f1bfd32392105baa0adb137b7debc530be76898ddb9bf348c51c4fc878223cb1b224659f06f210e35ef1927b0d45a17c5920be556b430eba9355db2e35292f260dc2eb1d5644fa7359e76f59a0b48c06108fbff116bfaa1199e7e54be9a22caa286b37d5836720e55c48c95e69ab0a2b7c53b801b9f13092d16348fef8d14d186b4fef0b681108ccd61a9d73550027f922f6fc3fb2fb0164afd6bbb67db69733daabdf6dc14c5db1f823a6746f13d1463754402886c481be32ab0c0f90d538a421580d9d4e42bc36351c7fad5fb5f093f2f0e89ab57a2cfd1c622fff48112af11303ebb7d41c61c27d22775e7faa212d7ce728ddb645920afdabf319eb7d5101da44c04a40544feb49e2a1273f428ac1b372d5d14955a35df247330cc69256d2803e0810d0099f298caf9341752ce6f9b0421dd96fe69e6357fcac16b051ee11138d3e6e8c409fe038e7eb9ac74d289b8ae59828fe6815926ea0b9e04d16cbd9e8146492d636000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026fd25194c50189ab2e94dc2ebe3813ad60dd31820b12e85c4af8c57478693a8253431c00d81322cc3fc2bc40c5b8d4fb72efc07173dc72d90b3f2626c3729fea6de7002c1264bcf40f01ef024822b2a59e627a9ba97378a1b2215cd358825ec7d91e2e4f0dc1895d32c95bf470ed4cbce004419a8aec6272f3627d0eeb55a9898669b9820308f523608fb1b62bd740aafd848bacdd5143ec9c938e0ab426724cc75885275af39994662ef8187a0704b01fe2ad13569c49611c99bc083c5df1043803ce1ad1d86e58dfc72fdd2093bec3d604449b4b79a7cc458cc12c8e9af4092b2daa0ce1e67ecd2961feb97eb355f624e87d0cfde380fac50b21feccf93a3658fa8c7d631a4ee1c96152b57a5b7aaaf89855f8c0a8d5c786456a79a58396fa6b08df30566ab21e85b8138b1e0577786de98d9129306590b65266cf0535dbb2201f19500abce492f182f79530936113da81b482cccc69de841e1528454069b50bdb6266f72dc36a976bdbfc560540d372ede8a46d9476070ab6fb648a3a1cc3db99b231d02340c83ea740c561e308ab702f2270a0f7908fb04a8d707cdd1c19a0af004449d543b58c685ef3fc3690ff48ebabe324192c1e7913a9574ea84bb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095fb7ddba6d8c48916fd50f2dd6f0ea459b23d6e5fa8a702b43c22036a9a17562e909c5fd8ce09fddad233186e62724ab685973bb903001ce131d292bcaff4505a2ea94f68b24e22f5ecb5b0f745bfceb5adbd6ad759b1367cea84ab7c8902aa9ea5d199978726a4fb3867aa446397ac3a18d24a6d8c9477bd191dcf8d6dee30c37a70f97b1bcb7dbcd756de7703fe694735a0df990ce85e314b81a289eba1712f6a67b6e198b8fbd6b6811672af7b48fb59b9cf010aeff5962dc18095708036f7fd7301803e5b429029b903455d39fc2e9e1094fed10a58f31bed01310d6efa234147e67c16305bdcaafcdd9f2dbb2bd619859ad1016f7863149be43e6f9c27fe391eb6b4cc6956350dd65b38ea001136c4a371a1f3d5e1bfe3dc0e09ff12c39261df4e1f645b9412841a54a6b7bfd27f3eea15bdd79cba0566763ced1bc8139cb4d137a59790af9bb4ba4d6535ab678e484926874c19eb900effa9b52e20968d6d6dac0e3a01f56ec8efa6a15c15ecc40f3d217ec9fef68bf1ae107bc785f2f46707e605f020f44e4b28ab86a1c042e7f13656f976ecb2f7c9187657a7efc5bea1015f2c184ba5b612af08ad6294334cc28589c989f5a4c7fca9e3aca03a8d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142ca5d9dd85f5369573f3ec2309cf0a5c21e0a87ea2a19199c06aba52163c89144a6d3aa63e11fcaf50b31d28d6c5e86d854c5fb01e7864842edb4f8045ee107030d5e282d1594a942cdc71ceff1643756fd631ef9aca558618c96a93544c070e84cd77644ea9d92cdd27c1b2e1a54572ebd8db4fe4b01214dd572e2db74f19bf2fe7dac17fc0f8cc66b36b3aa434efc6470392ed8c0d069fe22f73e6c77b1f785cf40e098a10d0b49beff9ac2a0771b62035d87bfe7765741c77b6eb7979b1c3935c8608cbb79ebc4d9a6c65c180941f8115e6b5b3cab7535395bc3f92afd952e5bab2271e16b7094a915fa49b12548561e26ce10ba1aa7a28b4021e9876500419db2462644b87e1b755a907fb6858cf151dcd3efd33581bf9cde7f690546bdc17707094ffe73b04b034eb059834a15725e084abd5007ac0fc93d4e7fa3b9656783b6f3ab2ef28f9aad17b906c559ea16fe050711a7e35c5a3eaccd6cfaa0bffc66c551c7499d267c16ef321f1f27efd0eaea5d0b67f90eb7a161b2f1a9bd7735e1e3c14dc20be0e4c76e1bbebc6f60cd1aa06167c24e85957ad8d3d049ea27332a1dcacc23d105f0099ca7beef5e1e68263f0ac1f31f04555e20faf7d124d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096c308a329f35e4ebc75f6938e9984a58e01a729462a0770665e1cc70125d71d67f8631cc0c2313b744c472701e2c4d3c377856285070f97a61a84d10bab955184806de1eb18f7b48b7c132a4ff47398be2ef4e2870c8a536bc669d4d09450cc02124d5bba01f0e82a1eff2971d08fa5f69ad92dcb3bd4da7a490e29f65244ae6d0692b1e95d5522aa141fdbd013a8d0a1939d67180eb120241135c0c23085a70f00bc66b789f2261f09067d22c5bc47ab2856a20100dbc36efb11bb4250c41c5eaa8afad08e002b79b5458388ecaab7b20b5fa1c9b6c11e2bf12c6cbb50a7390588f087622de86a1fe87c9bd47dcd70c9793af76680b04e1db7c6f420e8ef8576771406640e6317691b55d40ef2eeacc6d620bee730b1227d7f3f5c2d0c586744d2fb056588e2c266374a8de36127d79f7cea681a6f9add7b54dbca79a7102948b0e8ec96179ed380ddf5150d837943c901cb0a78263588038963ea590c4323240f31119e2d945cc30b61c6685ba76a5ebeacd9bc0adebfd2619584b6febdcce1b97ed7f733587f58093c88d4bff7121476c3753f629ea5fe6f3aac41bc6c8a1d5c32de5e65b459cd9f26fd255cb3cce15f2bdfd42d42481f0d36a14f33898400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f153d725c73c7c54e2da0135c6fb5fb5d13ebd3bacf447d13dd97f7e6c3d6bd2ce9255eaab7ee714e4977d12444752fec6c1478e8ea32b7e2295f6db9c73f3fbee163f645f488ab22afedf56e5bff624de9a21f38025699b7595b101cc671af87c18c239a9615416d366a502d71698f65f04f6addb621cde880f1f9637e5a5e52578732d461bac2cc53a061df2937e46825266a451fffe31fcadbb287f05738feeb0fa70bb831f012565d5baed4cf5bb47423fda81302f8970444356fe28b3dafeddf49c5789db26255470092c139dfca067ab33c5b5ff664675c50e83ee730f8b9e04584bde8945b719f211df7b2319e5b2dd38b796e7af236ec34cf4eed029ecbbc86ac6612dcfac9a5dbb3e5caf660bd80795e2cfe43a421375101fa2cdbbc9bfff400894d00e012bdb4ecea3668417e6903705e229603db1135d66434fe515d34b0ef6404d04a621296adeb78c854d5757bd4c42f7d0a936fd11788abed22386d2abab5aa559c4db67e73af51a3415c5f20c6ada079560425edb04d5fe0cbc813deaac8e3141305d5fab13aff42009e249fc9c04c8a039188761b79fa43f17688ee31e268a4a756f4cbcc4b8cb7bca321122cd9682ce89256d33eba57690000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a81776f295218acd317da04bd629afdfd5e56bdbd5cb94d3911b92d3b0798c658866d4eebba10e7c13b098cf5a2eb3b93e082227f32cdf85cf4d4b1dd053bdf09b6480df400cecef1e1ea32070dd7b05d982557855e3609e708064f8241e0885d0b6362c6406db205809158794b7963adad7b97d5e55069b7767e4c02e675577d4eb3b3eb7b901e465ddd840a78f9580979b489d5ff3f9c2992683d41165d2c3594cd9e01ad852f1e45e41154fbda5ae2312370d202ca1897d4f341ca11b45a28811da55127377c50245d376305c2c1dc96d30682848c5431adfd3e5892b4a778a125008653ac91f29dc0a20155cdfbadd1709b72e4deed2a3d7df1b295664f7e6fc5484bba72bfcbb7ddfc5828fcaec8016b3140366ed50174e4ab9ec65c56ebf1fef73d45194260ff1f6ddeef29fa77f5532c24c32562055e44c53bf4c6a01df083507b0d8817417da94fd56c0d94d4c3cd0a7b5f518183a8028e15355d3c31c0aa72e56862970fcdf096d5bba54c80fe31df1fbeb44e503ec46fa3c2157c3baad6a58445641f6ee83d9697906991dda3d4a62c43e3260f23f979bf1c434f3ac78146e4b9906d24fba1953b311ce88a55321825d607c47000c087bf3a7467f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000341cf780c059d4d11fb897289c2d3bb67bda3baea756d58048c1b9cc5c1d9f8ca3bc2b6688b05638d2f5fdd74965faf947ff8867fa746396b454ab9b7f7953c770b976263ad606fdcb8fd613959777f1062767c0cd6f8b2a1559de613cba18542c36ab5b3ce87831c9f8c190a50fd8c5c259706f68ec05b888425b31277a0658b0b8377fd94b6d7e4cd81ec3a4b687c9877d733bc1560b7946fa063fa01cc31e63d9a207ea3bdeb54f7e3f755bfce27845f86cf9c2b848cfbebbd10808ba7715e3f9977bf9ebcd0d9bbf7de9889a3678da797171f1b5a4230bcf72e2685514de16949034b09900d08e52179da5c98511684255ec402baa87219b740e594e9c23b7b68cafbd5fe2ebe4846a4b3bf74c7ef8a50cbabf76a06249971c37dc970e877bb051ed0f5bc934b1c4d23c2a4109060f16dc3bfc13442800d9ee81e52a78a05bd6b7f4f8b751519517e4033760c93acb3ef57648936c628cf7533afdda37dc2644dfa93200e52fb420d5e2cf8bf73d6cbf8ec90d7a1222650df523fc1a5e0a62ccdb2f1c33871d97bbd34cb66a01f335837c4290f867ff6ced3db8a69a6d140634d769a13cd332adf072f42e8966edd0037e9e3b5ce20d0cf579f511b8ee30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000128e1c0eda43e775a0c4fd96423c3167883eb5d587277c2d55fc9a97c642b9bf4ef50c06c431337a36d96eaf061877e24a18d0117aa917fb2ec550d26e7a5e1461d1e6d5bdeca3e0bfaf212b0187ff483e6cb800e90c5f1c099a2ac8aa64d49f143188095d869e2c492be207aa9704d84c2ff9a66cbd5e0d75ffef2f9dafb1c23a869cd0914b11ad93147712d77a9b0b947ce4f66a61460fcf85119f311cd17757b1de7eb67702aef0954c6e9e34915bc138227ed2d65e0275f0fae1b2f08c6b0770af9a59b8c8553c834061067eac27228fc67b93dc7464c403962ca82542aba01605a8f67f370cdb486341099bd48e866fc468f3e7b71470e7f24064a43845dd2db2ab4ca676c6cf7f40513f4f8ab3b344a406305307a71d975e63def8121c89dcda40392daabbcc9de755b05c8ccca3981e87de1f3d06a0281dcf9943be309887cae115a589b84f9ec15aba9cabe8926c0a0ebd63a30c2aeef3164199e864a992d508c9639939bc8221c72c45937ca7963cd22d46ca23ee7a1323db3997daeaa2187b58270661c90e60936e3372149ac519bb2e4d317a1664d62924efcef4735406eb6fd0f58558e60f55337a329bd30f99475afdb61a432d07c2169f4002000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085ebc80df5e500b0f744074452fc68defeca2d9d7fa3b9077a9ee4750f436cfb901f5f4b5f562fdb38d5a652c20ba9d5fc4827e3dcebd386aaef16afc0ef0f5777456b35e21a87a5d1be423c4661d2918850e41780d8e295c6e2959c0abe768d260f50d6b97e7e645ecb67caef893a81d15ec01230025d1b913e26951ea8fbeb0bc90b01f472461c091810044aee760457326ffafb6dca203b9edcda1bc73a4c716442d0755038079137e10ada1326f6bde12114817e9e8f4ab4a24a9549ecc6b951aafe2669e30857563cede2f70e9ed3cf245d2342de243ff4fb390659168d183179189b7b389260745d7ee336a34410fed6acceec0930795944c372aa7d17ec8d48c0fb87225ee07cb237c926c2031f5a3fba3ed02bc00f3c9212d134f495b598cfaf16776fb1aacaffbab59957df545eaf9fd941542eb3de06e6acf9d3012e1a8b048af875286750a53227138e0a1ad99e68b61a4150afc1bb47b8a02220dbab60630ddd656e35eff5840340732e74901d0273684d5b15abde6051d52c8cdb812d4feac3eb6c8c2b93175d2d0f360aa5de041c0e27fade4b3cef45f9cdf946a2bba8c41225f8f0d47378be48ed989df687d7bdd57cd0961d645f63cebd7e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042606f93b69b853d34de3f5185674a13d63b8621de1c82aab254032a87c2972e389b28c43a89c4cb22df4f2c23440897fdbd26674e1676494740ca664add112256e0dfa6276fd786df1d4e954c92101bffc9be3eadcf9e099af0f57c126ce05ec2a0cc0d0973def0ef9d696ff0e9f5e5dad67309bea9f120b6528707187e6123bbdc2862ef146b73ffd5e50adc41a80577eab244f28dfbd13bc82a9045893cbb40b441c3312783bf8950c37db309e6b39a40959edb3da800abb089af83a45fc32fc1fb7264e05eb7d02450fbe64f8b52c5e85c60adee3ce74bc13dac843d5656e92c2510196cd2e0160e9f3b707b639ac60f062a63fac4caee5728c23a9a680314863643552f587bf1ab37f242f173329335f0738e94c9cb23c31c137d527221d47c5ac4efaa0da25adf0f26808807c53e823bcb068fd2122813ea88aebf4ee39c8b602fb3dbb135656da762c05514d8b5accf5f4a4894482825f1c977f15becfd5902ac0252a64798d28e23836f394c75789b9a0ff4a9c24660010405aa9b129899a84af6f698036e7d771a7146edfc3543358165256b8df478bf46e8d98a256d1f185ee5e3719e79155ac22337e6c000b3db3f0f078ae0b92abceda03fad200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1ead94c7080c952c8659126a5469cb60a88458213fcd0be966d6a67ac94be1da1cef09829d56595f27b69e4cc9d60db592983b092ac5891cb2fe502995bf3624623a0ffabfbba2b5ce3704faf907cbd5d7f35cc2721d44c1343b84c98fd1d53c52837599bf95a271be245d850015b050d762318154dc22e92db5aa7605542878eb3d0a397c382d758ac1e13c21abb2da6ecddc316207c9ba5476d68bd741a2e4bbcdc279891d5f27b66ca75d015eaac6a1e9f29c769f5d4517ab4de22a64efa947e5c8141b880ba5b7f7dc6176673004f3dc5907fd122d1566ef2bd1ea34c8e00eac51fdefb62330688c66fa2ae43de62f00a26d9c9f81fe9e9835a5ece44149fc8dd82223480b8d12f617b6c5fc6c3f0eb63589dadadf8d755279835f7a2139ec71e0e97edd2dd12e75a76708430098718af8767bcc8e383d2d9dbc99b8c422bcce033eaebbd8723ca46f40b476658bfceb157172d9b653be6e19adbcac2a22be1bb11a06afedbe07080b75bac24f5d78e460e16a066ba27703ef11cc32d30ff17fdb1f193dcb7d714a4bff48ae4381af126bd29adfc58dc179c2e01e4dbe63487685619e1dd671ee34bd21e1340cd08c85539965b76cf205e0e7fa3ae242000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086c7ab2172ffa82a11a5f106906c0fc58edd0a22e1ce1f7d66d510aed126c877160a3ac06a54b0c154f8d0f3a2fa18f0404001c1064c7aba0cf7e5bded999a1602c8488beeeee772d6261b5cc4fd316988c2fd84d4703d4f7b58d0f0b149ef6d9c0231628cab21c345cd2f0586bc4490e49355932222df7e51ab46a6194148afa74078a16036ee82a3613068a4ceff38db8abf0bffb3310e5de0f1c588be4523a2ba0d76e53af05f2ce37adb7cacbcd21c27728d7f3d8b0e266062e223dfac93bb1295653a1c14747c690c5e538c4ff1c8897e243ff04c5131cc6e49aee59001a3e103121746299f67ad2e56c260f931ca8b9a86b23c0c8d53dda0a5e93f9e9f0d4da14b2904f7b93c7dfe796c14d097fa6859cd06ec9ece9dd722de2a71b776aebb05d76f07ee4b64c6bb099214781654bac7fc8a862b5f390638e9efe1ff1fd825abab2de2593967d6fa8972f7d8cdd165df80ff504bb3bab5abf3c97e2fa3591d6e98796d181b9712c17c878fc377b0ee44b777d8d60b2d2fd484832e71bfcd3b37af2421ea1aaac51916050784e2c69564b2becacd0ed09ac6540f8ea64d9d0119ce6c03a133784d140a82a819be238f78cfe36c2de97ae2f3a0a0a8a5f700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e07ba613fad052ffe559c83fc92cbb70deb427ed4d7159da3a111bbd800f387a2d8eab87894cc0940e50ad9e0f93e410f9567d088981d83c8657c3987398cdd810757835f0181f9fdf69a02feabef17cde22646a1ce45c8e3ba8796be0fda03fe035395310c7e899446b562d73d6de4f1830ec2bf94e939e2436c24b2fecd2431b6202db7580527e5a504cae1fa78783529de58da2c051838f097a4ed1ad5cc06059ff50eb766911e56c6692d7c26f07328f9bcad8fdb9cb402527626e64a2d90e8519f9a6302e4edc9c215a25d8a51377fbc496e714bb1fcc85a17c39b0dc94f4fec6d9fcaae10c2dc9977375e10823e4e154b7c047f5433a62fbd5fca6385ff79a91df44a84a2649e37372a0dccb990d07e55b790fe648891c1cdb78bb7df9230fc22945286158aa3be0f11efd9afe90e667631b28a644655019be79b40bd61b755a1a5d2d6ba5304168574e8d053c5114ff5291979a328e82205adbf56607bc893daa5f0bdaf6600972b8eae3cea3be71528398864063f026dbd7267965636b6fdc99d654d98db33ae03eda43d6e59307c4adbd50e0bddfe86e047296bdd66bc774fab083df3e70835a7afc4acce516c188fb1c525b9d9bafac3327ddd3600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a2c9bffcfc53cfeaea5adee6746d3f8470f3f3e91604e146a5dca8d4bdab58fc7a52d20a0342258bfdb23374a8077bafaa7265aa948c0ccaba0f96fea2a8817d71a2f17e072d626d9a083292a0c198f2360398a7143b2f4597d8d4d9c3a600c1da358cdd7d5bdc0560057ef8e21d6a5d20e1a864bd9e12eed7bfce75edf0f234e3fcf33cba8ef4214037745f0f62642058fc602c400fa6e1361a77a0e9efd495d7a5146f129b785e9994d67d88f8bf1a57fab7089d94236579c12409088c951c0fd8ef959e4e69d5cb815c63ac4673d50e53aa5a83442c2ef5455163b870ec43a4d073b47ebb2ad6dd9a59e2d7c7ad51c867401393fc3b250a007470c9ee8563e6b42a035bb4d94bea62888281cdf5974102b38a9f3d89a5f144db536613d9915387a836630fe4efda2afffd699eb2f5ac1d1fb89b83ea14e80e7a552157f01c1f650077002850b92b589fee7ffa283ea96931a0520deb74f6b4334bab8df8d6f00333a7f99ec1a5a381f24964c8cefedea9716fc76f54d50ff805cae6daf426f5150ed46870a45347460d3f55f6da4633adcaf44536ec9b6dbbaffe862d779c1c05abed552975d9f93e6520496efe712877bf39767894e1a22f0251717c1c30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aaf54e568914b7f69ccdc9dd5c0f8311cda40417baae41d718b26ff9f71461269d0e2ba4e4dd45605806695af321a64b124e3c31356dbebd67a960c3242dc6204078afe5a94deb29f289ed8f86eb8cbc9b7a8405ad3cb0dc2b10ee822bf52f8e80bc725c7c95fa59a05c488d5bb773ee66d8491b221d4cb4fa46d3002860175dc25d073a5334234d40e5add6fe433d28819dc912255e5cee7004a007f287a37bbe5da7f054324345492a82da61b8e1c9e8288a57eacaa4187be1c0dd31e9b5d31af1eb17f287814dfc8f657977313b57a25481668d4e38bee0dc4f460bb1d67b2c940016517c0540f602fa51a8445f348c771396912b27956c7451757a3fe136bb656a9ea05e9a51a8a1a3ccb2d0583086f9aedaf1eae74c22571d1f432cba094c612e57056ae25d87a181b55f108a20f882120cd212540253fd25263e1c33d8aae02b52e8d1bbab944503c6f873c02f90d9eefb7251ae45b13a4ac7dcc6c1b91acd95d091a3534f3ba33c0c7e939d90a185dd28a758fa5f0ad14dd16d85a3972f8faf0179c4ff426351afb7ed5bbabf9a7d44d028b54144bac6e07329ed4da65234dca045d654041bd36ab6a7a023b60078974dc2121ee7578555a108249ed80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af3d583a00668e8ce5a3c60e7e784cdca40d6e1ce6b8eab17df8a48d61c143ed1000ea3095a092f72fa972b834f6c4de63b58741939ff2e60ee42e479d5a1eb2a2e946373ca189974a6a64eb2bec692443f28d798371575271a1b323a8864fa0354c1a685d07a14ce5a5777e956a9706ef8a15463c128916471588da59972092d048a78842dfb91062d075ea4f75fc93d03266ba0b870f84514a983b62628593b3a68424b05ef1a456cc328238500d11d12a3941aa4827fbef0c68f5e8a9f78f6ed818f96fdbcba4c4b45647f93c82a9fdabf0e1aa12f4245d19797a76b7cdfff41058f81d5c1721f2507eef4f59c518954f402956fba5d3027bf759fadf978bb088fed099f63716705b1320d1ad93236fe1fc6943dabd6940ec882880894f0af840cb97238a1915221d2826ebccd943736ebac9498a2d47fac6069d914f01635cc3bf556d8031f666cceaa38c85bfeadc22808d17d2276d49afebd3f4d4574cccded1b23681f1076e3fe5ee2acf180cee36aaa5b057bc18e5e07b46ec3111cd548ac265b7997278b5a0150be70fac9008646a8fd0792eb82d00259de9e2ce53726f76e9f455860bfdb6ee3d92ec03d9a9dd8f92285a90215776c72c7cb101ff00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ac66e4dcf1c40868aa92cb5ca2e6017b62a7b270469ad83576957ba93f5589cd60c00ce0a23dc109596cc58c03eebbc72c1ebb87c2b89a09c3c56f7a726f1fdc9aa367f8710de20d4ed5de4edd97cc671d7712a50b7065679673e37fc5b7a1c46907c36cc67b0199dfc9e5b93a76fa2baef633d9cce75e4890e3b31306c35009301500eb24aea82408ba6bb89b59023ebf385af7260f20827c6be5383e9a55dcef9fed417fe2d9e1c12a4c62265b6db8230450eb793955daa5665e7b5ae1dfc710d2bfb329257c88cbfb4133ddea18987dd09ba215855bfda274d905a6dd04e515f1cdf4a01c4aa9413b8fb94359652394b9766b0c0bfa55526371e15b89395874d29c95f8b28b25010c3d4ef346f5edc2d081a929d1983e162cb3353fcaee84eb21e2e3e3edd92c432d930b207c657662cc34adf5a2acacb0e741f9ee67969f6978e9f5caae95c47a21d63fb84b4ce54338c0e2dc4bef8bb8cb5c79bb7dd43e5d38eb817eab7c268eaaa9da7e9c7ca72ea2f2c11d156a28fbf44aca3988ba947d1eb9efaf1c08a91ad4ef040a80a60d228400ce16822e9546b4ea74cdc6095d0311a4a9da8a16cede0be28cf7c1c90cb7e97cc36f4ae01f4ea96ff3064bdf40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000856794355a866632e6d330b2b898b2d557fa12e181562da6114a77544c773267c8a3889a7abac95c7bd5ae68e75de2f88e2de01e688b39577c26254c3413b7644ff9e4e2549e45f8af390ff920238f1bc5f66e78294844bc534bf1fa8e4e3e39337810c328108c751a837809eebb3efe67b9ed05cb175c531261551dc1ebb3d6a0f472142d03349506c376d27d0d316612d87e157a5ec1ed8274e90b46d384e24b255d78e5d73317e0e3429c18152ebee906bae5f999ab9485d84e3724cd4d543e49243d74a076ee1ec1f991f40410fb06c99ec60dc6823fcfa8996da41e3e961ad1188f232290810d9dc60a8e70e648b10e42d07e0c562e63c97d1dc6b591d8ca54d7364b46428307a1e649edc08eae46e801299aef3de67a22006778d9f795119bb68f469948b02c133444b2a12a51e10880e399fa19d83303dd7d7b6ed66e3c937073c279ff08de8c56b00f707fca06bc95377172a6ac9c23777d210c8ffaa41ed0da1797d77dba00cb2f2666b0dc352981b13849fdcdc08976cc77b6a1509c79319f9b4b182d93cf5daaf887d19e4aa0d8df6d9ac43b7a97eabce00fef6c193528c444e41a02e53e98a6a459fc0445c748b94708e830f28ef1577b561b4e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015e95cc73e9bc2cc8219fd1b705e5368990d8024fd92491365325fdd4fef2c593462fe7e3c3d5458cecdb7e6d748fcc2b208ef7dfbe19bd3c0b67f76dc22eece6f629b14c205552be4f58571741f8c5d5e0b50b79b31f5509d318e9e9dc52364e434b632134e996acac5705fae680640f011ffeb8abcd54d90b538262c5ac5a2da5705610c671a7742773505ee8b2afffc50a3d5d06aac242ee30ef826c07d2273ff09032cb3338f28518accae01db88bb8b097c2a15e1276d2e2c14c39d17c8201d819d5caf9ca0f6cafa7d0d044f16b56eb071a0e8dbb3824d33a83b2e918b448d38ffc3ad78250c40884d8ec72bd40f1b3c8d9c5773bd158d20ef395bf8c4b77dad22d5d49b68ee148d970cb6a6993a7703d6a63a3c0bab503aec7cee9fba2b9aa51bab2414beafe84ee3072f5b0d578f41fd30c6faf00c2c01715794adfe149f5795432f276efa5c25909ee408e1d48055f1c6dc5823b1cacec5077227e54892270527b34cd4f47a303d017e99d09a3ac33d1543a9198b4e7f30b01cff304b0bb518970dfff00f768fc2fe76024eb07d0d6d686930d5db8b53014e178bcaeb74219085eb583ed7e6a847aa585ecc015840850dde2a03246d5cf96767b93c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae137e91470501be2544e8b6c5898c5fb23b29dd330c8845de0f2923644938cd6e5334da4f899d6be339de081ad656a53f69019d1e8efa50e7785e8a7f12ea99e7268e20bab8c3f0422ac9cbe05ab325a6a8e410c3a8ffd2d44990da7491b61fce1fe4876f4d18aa1272e59e2719810d3871761cbcf1794e64746916a0fe3d1ce15485007dcc68dc870a9dee44a19df1b5e7e46a4a1c80c1d0a428c6f57b0272ab9b127d96b6d7bb7b84f8f97abe9bc325d12e08d098d17ecc24b62f4309ea4ea6622a89814aa6ef9b890defd6ad59a0bad9124c943f427a4f5454dec6028b31e05ad9be867bb01658460acef9a37d534da4743db5b3d80d14f5d657e2703d324ea51382235bbf510a61648a067fc456b5d9ae314d07bd98cba7f23686b321614abb1e56b19c328a40480b5e96274adbcefe026ce0715c7912510b7d88297dd484b2658aaf5e4b3d867800bb7a35fdd487444b170894cc2829632392050d05e8c48033a328823d10ab352b787dc9d1a53b25113419e98e3eccc666c2e49fe66ef1ac7f0a7fb62d405e72482a32a1bc0525f971e3699ffe5d6829441bcdd8d6afb3e920341a3e69c550ee00f5acdd92241903ddd5177018973ecac4521f882e070000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000135bc244463828acd8d566a4b4c86839c580c0608b3d6adf84082ecbcdead44071b0dc6a35a75e1e27d7407cd95eda03ff0ed37fc6c5c606733ceef689a6ceda43594f3209da4179314aa02a896dee7b27859818ef84c17f50a14e7e12eae2d801fc8c83f507e5810d1e90158d314cb04a8297c333dd97f43b947a68c34aef8809be52faff3de9203694c4e3d2b0667194f72bfa37aaff55055d79aa80fba9ec18aeb75ee941302fb47d4f3cbebac8ae1add3c4fcf90d456ccd34433cea650e7d0b62e4e7f99251015601a52da94fda14ed4ac475c4c6e04edd416d6738d0d91dfc8fb96e577958d9b46a5b66d63b6cfc9b73bf616a3f24505bedee4a89b9025e51881aca37f07db7bf74dd0e655ee483643537a5644c5b716360e9d44227e8ddf1811189deaba4d851cd4e6b7f1cf3852ee7dc917698f1033dffb1d8da9845b3f68025fc374f7da16fa2057de835bceb47240900dbd339aa9339aa48df99991f4ce33b5b7f9a4875a34629b0ff6584c729fe54fe46f63c2d8ef2da6e32958ec72bd0a0340a9460b361ff8344cd1aa00987fe5f71d469f4a541935e81cb989a7a2fe00a4ca291818f96fe47bf67b193358e7158554656b9b667386fc14c8cd05000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016d572bb4d444817056a4d38391c4639bd7f7e122ba5e7e5e943bf3cc68398194da8a94c5942b49d76444526ea27d02c5616a6f5ba3b42a724c9007ff4c0f7a23a39edf983bc6a214f9c87536f0732983015916d641db49cf753fb09319e60bee3c7cdf3da09892cb0d371fdd26cbd5874d6c3430d7099fb3de710a0b93951f3a2907a3ec7c722492cf7876382ff5941ffb83f01a4021bfbdbfc736cc820ce1ec13f8f6d7d9170461ea6fd769e18709b9550fd4095c3edb0b51555f5fb35776045f1bc6782754203c79e195a3dac263320275c285bd96981da7cea35e091668e78a7d04cb4ecc02d221b6b7c85ce9cf33c7fd919ec18c9e2de06ab43a088736fd842d99de7f7abf60dfdeeb4ce1e521ffd5df3491df9d24c5eeb1137f8671626a9939c193636e1d6daebff3c747181b54dcc12849c4ed0e14ed9e77e0919ab006ecd6263113b30fa65d2d4861d2dfa82f0f4ffaa25c8432a80eb95e030046f4f220ab5f224c1b677c70e14cb6c5c3f8544e4314fa1f8fe06f3c3d3f3bb3a939f17c782e7f902bd11bd5be2d778bfc2a7f8c3795f82de7b8bb865c06052240d5920a91f02a9e562d8aaec38a48feb60e359c4be3882d9dd00da26aadd5e7191a1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088d6fd6a3613032d07beed5c3afb047901db7d75cc705101e3aa8f9a99d775b983ea1442c882de0651837d3ac2e167b26ed0f0d100f634fddfe791413f03d9df3cf613089b07b4d95effaaf66a2e8f5d06a02c6d96dbf2ecd924ec4b279e769eb585b9f52021675c6dc3d9cd28e1fafb1238ab06f272173f71636f348270eb65175021eb3b470a38120b26857ebb1ee378fc21ebf94610a7dd034ef05aa3639d8903961dd57b00764c5787170575b855f74e94f951a00be0bb9196f8d4884373d96ecb6490e50fa53e4a3f44d8c4a84c8032c03ce9756fd3ac00327c02dc703bbf646cd44b95de595c5f0575b06d054a5578a9bc2e850641817300c15a3ddc77565f1166a965fec80d6def1049b6a7a34f391c3caff061ca0c1bf2452b5f4d83e0848e9e77af3dd7a94676336ec1e75b3a9a52d1de10beaa8be930abae2696727d47b518526d1f82371b7abde6559fb3789d01f024288dd5ab2cd06354e964b1ee1ded9873ea544834af19d1edbfd41c0a6a78b4380c23c7845345b82f37b638811a3c1c3f2d95be20edb8c4133b66c3cee5b94976cd7cea720c878b070a2e94e0ab68d42a86236de2bfa319461c62fa73c12a7b594538ead5876217bb18b6390000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000191346c044ea29587feefb3e58391487aa00bf455a6fc085b9ef56178cdedd01a531690c9c1e4d177dbe9c392d2958a48d364afd15c610d5cdbd76a77934dfca50a23b0e6a72b06b1515ef4433299e9f4d6808671dee059fd5cd2a514c13cccf174312476c2a3a4c1816721f18d99dd7e92db31263a60970ef68c69f0ae4b94e4508708eb419db5c44d3163c887d71ee35ef22727e2e7e07d76f77fa609b4201aaf8fad2cce365557fdc5723cc569a051d02372c1d905792321f5e0294df9ea00891e6413f67beb8c2b3ef79d9a70ac7f2ebedded9bbd21bc3796b5d7352712b23493fa7f234fb79c69611257d75a06b4801abbe1c57634210f87842de234ff16fa92687389924288ebb9546ecf623e85c79ca8fb008f0a5cb38684dc1652e2629ce18c18ec364ef46c9c6670164b30bf88c87d8bc74480686c4607bbe6754cfeddd809712ed56ae6c0dc3657aa3b20545a10750c59630a4a1c7c1b543e75f57a8dee276fd320e83aa0e6cab472f11623d382b276ec212e1709ab2f3775e60f46baa587127ae5fe5e0ae7cd4091eea114452015e650c17f203b14820be827a8d3d2bc676a40ed683e7b8b0c624e8cfa85b3a4e74576c625a7ba6e58b3649f6bc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000989c7c10a4f7aa095b8ca1dbfa94206d710fe0c7a7c9cdde7f9478e5f772a5c09e3add75c373af8338078f46ec13afe8691b36a37faf7eb83e1fb31ef3eef10fdeb968aca2facfd0b7ddafbbc563852a1c8fb2719f1cc226a3bcb6a533063c5078419731c2dd1d9b0fc0c2fb9b61595f503736a8564c3e43a5ae41e5ab3b1c912c360fd2881edb98c707715f53d6c8ceda2ec14c8c24dd1e5faf99bc80db3f616b20e6b2a464f954c5ec5ea4f170009b83f50165701d5533e192c9e67e6fd5dea908295da9e7625ea690d869c9c257ae9d9cd68266d6c9513a5c57e785294e6b4f7b50d3c2fdec564c9282a9c702668554c4e1ff434b632345095c3c950fdbded4dc9589cf85ea69c0232915af1c6675718f523dfb250150a7c7e4cc81c3e16213be34c18fc90d1cd4d7e5db99b124bf45f9982c6775711428b1817ba209aea3eb59dba6ab190d7ba250d04ba2b6ae6d220e48bb93f6448383f9bd893cdb4ecc8692025c717109a6eb60e760a26e97c7b5fd2f552096d917040c6106ca184012c945f8c149d26442da19580c99e1e79cb628fb21f16743a1e336a84eee2cdac923fcd7d2a6ca054935096ff0526ea63179603c686e11e208d01c01f69fbf8d4c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026bb95cf3ac2045fdac413ff3374a87ae7b3e8356fd674474a5b15923960e36233be9718185b874a3cf1289a70f8c879b048a4c04a40be4fb28456b1e44b611fa6fa2d78590e8d30bd40936dcceb559edb6c72c11b1e9cb616d72f1f8c30c27fcff63be1e31576c575a84d0796211444bcc392a6dbd522860a0d46ab8ca3976ee5d4b947129bd98308d343ce06ebd22ea64a573f9828cd6e65a228b9505b5481b62f41e378a8c9e6a25b8958b84f459e7fbb154287259c3e711737c49d4936ae32161470351c1218fc18a0b64e03b97af8f3eba5ac22bbd7a996be44e78669de125421b8a2f2e688dbf471fcb89f01a0430219bde7353c64166445707cd0b7784885424540cd70a581f8361e5bf9f9b96cf8f2c41b7586e55eb6758ed870ab386c676ef23ba302949b6d0c324c97dad2e514e3e44f024f0652923e65e6be48f4b053ace39227e2ce892d2d0a7734ff575c0d94756631bcaf00dfc7a57cf5de4a6ff39c26038de4d3d78240cca65f14a308d00bfbba8d7a1ed226ad82c785aeb86e77d3201c0b9f7b3206e05749eb0591421c9092d1c3a57c22c8ed8de48ffa0b04a8a127bc293d097022e486826833f131a653d89f8d69e5dafdc31f9496bb060000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000918d5a705841dd37a49926c6d0a91dc518b843527c26e40aaf1aea98eb0d121ea3850d3875051560cb1e20e67bcd4c3e3cebe3d6f11d0435e5e8af621dec768cbc2e0b26a4d8bf085b663a11f4213c5bbee30e5872ec37d523622422bf2bd85d06bde60c7b341c761d2877c3b95ed3a40082b15acc42cefdb4c1a834109495ba6494049b2c6cd90d49ed5facb751f647bb3f9005f83396217dc82ebd7cd9faab55011f789d28a423ad8466c79b9dfb7ab2c5d4f798f1001130b5db2f8993862b53bcfb89785a94bcf9b29dfa7cb6ca8d03f735a9b5ed32e94312de14b052a2675b0bcdeb3fac17cab9a5ae1d564fc900c58cbb9b6040f79ed4273f2672aee6309b8fb988eef536f6d7cfa306d48040f329ae49ce16303ab66f81f4882fbecc79e70e106114fdbc126f3e9a6cbf560011e2d5e2ec29a685378dc38d32bcd1ec38e9aacbeee4c385b4e077185a95de60a70b8106412e18dd0462ab14fc1d0f671a7f7938108f81565c09958cf30f361f0539d77436952879cb307b572b8956dd2525f97863c7828ee1682d548a765dfeb6949edb10c814fd1c263e2191505df5877efcec8758c36ae01cbd189be0be4fa75c6f5f43a133af2621cd7fe114231216000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a6e9a092acd0c82a56bf9a48ab0a65175729958b7976857ce917520986da974b672dc466f1ff3e8d9c5ed9bd948c7d53dbf96b98d414c6e9ba7b6b13638a846c58432efe1c4d19b48fd8ccc285105bb09fe7da9bb6aa09e9697fcd969026b88ef9df90bbde3fe354d3f43c5b6323fe3da5728c318aa7160bb372b741ce78bdeb87d6eeb7b754b81d624310457b86172b82b7073d47f6db9a69eeb0b11efcd8190bdf977dac107546d63bd15b76092ae535ae94bb25dc851a6ba7247d2b3f7d154fb83bfe7233e2aaaf751b1ba220c2183807d81133bc22bbb7dcc1e4c2da6636df1fa08239bdc791a1f4a776d00abf13c8786321cea50cc9881bc203f76d275680c8ce23b95894d65d6dca6bfd4bf2b397b618a7620be79e08222bc9e9a17be2c0a40f8d3897c3b674cae596e4979ee837044aeca1a763f1947fbe69b6a3f88bdd799aac61675f0f369b203642d52d08441b04d8e34f83d7cc2f956b4b4ca7c2fe2305730542448263c9bb94ad80ed980052ceac937e4908863528371910747b49f1b70adf963717db3a878fda5addbb0c5b5c7ce38e62d38a5ee7bcbbc7c3908bd5487d3ef0007ff9ee441df0fc00024fb325007aa7a02835ffe9bd9bbe770000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000869e7997f9d870ad6cd0bda41a0f8388f308724b9c8a5083c1c214e5522f3517e08dcbcbcdb29f5d33c167212d625beabbe39e66a086e85f113a8ce807cd3d6b540243e6fe89b22997d4fe99747c503951c542f51a8bfa7fb99d5e34ff2d7c3107d2749416050800f23f4016a2970e9d0bfd1c869e30a8e138057741b270a55995661ee19324821bef6f99b8074490ac0d1ce17c0ffe044b0f738a80da7867d9014c8f904b5577089a87e9fadfc85b5428b9ae1cc67ec0cde0dcf176858590e6211b70942047f0cacc5c205a786b380e47e5188f342eab20c8a6d4b48f5b62045c06cee5d002c3af0e4d74cd7a92ce49de83d70c98516909f83abd4c6e4f87c56991c35c5d3b4c6ca786904b9468e5f412cc01bc436b9b84b86bb350a935abde469cc1c644844f1e255547a0dca6982aca2f6e7ef2a46cdc25f2af5da1d4f30b69c49cd4cfee6a4623d3ba092c80ad75e23bfae230f077c6292c86644aef122bf1ac7173e7b4ed6d8f79f91865e338bcdb4fd99b3dd87f0994a691fa1cf807f2fe49114e2fd49095d1e420ff61311ddb130ff8d15db09958b67c9bb43d48225b597873373f04fe84894d79e75e58e431768fd95c5e2e56fb92b9929e4aac01cc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000967684dbb1305462c85522c2e553e327adee83077560e91af83b08b07ad79e4b86996d789bb5699767d29c62f496a508c69142a8200f62db09a94106f692b08a6741f4aef406b1395b3773a2abcf76b0eddf270d486d29461f4b9384bfae54a53f79c24525d33683bbaf887ec7590aed8e07b1374a5fd4812cb445de286e8d6968d49ddbf59ec4ef33e9475f1ec911aa25723af60ef681c50fc643f7ff86775e7fa0debd2f7b484967383b5c7dbf83a54af20e9d446f199e7d173cb5c593f135112c87f780af49fd6b56d0bdcab98c9277cf90175049722a5004db75319556eebb5a5c3f44d8b58d2b3df6b29655e636db6185441a2d427607c368506cf1bb3ee27d02dae27a2ef6ecaebb7c0ac49d21d17dea63e425cd72c9f75e1835e9582856cee4cd2232f9251cfe4081ec941c366f1f9927ed925e65be68e4bdca9ede6ec8e292387e94155de6396302b657af2da6dc9ca00831fc32405a9a837129a59c091e1276f78f7b09d69da77e57cae3606b1bc362a862fb4c8f2b2ab951384b1448daef1d254c7fc59f3088e96b7a78780fc251085f76b2588768b6b0e370730b782d78df432a0a17abbff2badb5aea94169d3ce526ccc6105fb9e03a0882edf60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300da1a8742abbd8be3681b3e9904df9797fe45b8e338874c6b536e9fec92acc775600ede6da60c39f63044306be9d5848dece68e28e1499981b1daa2d8b91e2df4ab4547f1d6cfd962ab992d1f92eaec2868fca21ee4e1ed5cac0daf9c1ea6ae3f8f7424497df68ef98fa141462d8fff09ddb3f47f21c7efab6d304bddbd996392fb66f5a75615847b67ea739039cee2f4b958328e87e7ae762033edf5a5aa7da2d23f8cec9b9e6188b9d990c3524531fce7824818ed75885809b05744b53b12a6470df3b0e265e11cf6365c9ced367b298a19aaf0dd150fb5fac86cdb72018e9fc5e5d559221ffa379f9802940f944cc7bf63c05cdc90bc5f36fa5f5a6821a8c2300de6357ef5fba38f5d6910e98efab9b3583a24b32be2bcc1702be5b84cb808fb13e1765e1816d8b9451c9fa9a059b7146f77630121513f1fc894f61dabb10ecf202596795054a96793d37b12491f33bfd2889495c7cc8b1e20e449d5e766a1d9746aaf8f6353e33640a74b438880bdbcd0b78a504d09d823bbc4ae349f6ae922444dafe6f10027a98f1784063071d1ee51fd6e3f5c8bef5b6b5c4c049776f652c2ecd162fbba3503bb0dd285e6eb39ebd3f8ce1d4e3155ca23ae9fd6e3b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afa5c22e0443f5f0b87c7db20736e5799fa079d221c3b8b1cfc4516bd3045b9e9a1be0e2a67aa72332fea7ed4d92777cabf9321b56d66d11a157b5871396ec8603dbb8610ee38b27009a89c0491a60c241c6031cd1676683a335f1fa2e8e2c422e41328bcb543008dfcf725c18bf31f20b9a0e8827e67d83d4c9bcedfc6b16084936689fcfd4a9db3ba3236c7fb4c6ff866d593c7d6549d84d5767c224ec8575edfcd143f3392121e74eab263941b07d7ff0c52bc86b9056beebdeb9a158582b3abe450aa0881a04541a1dbb2227b3c5a609696a2641dd3e70081ebb6e97d2db138a567dc69e5010f0711f98ae5b496221de210c52d84bab65591e5af71cc0fccabb8130e360fee358399f4c44aae3c2161c0680b203565ce512dc8f2b8140923eec0a72784e940a8348ad771b38de3184e45f68f8fb0bf074bb5b284c1f4e41fb53eb1384f57a3c569e49d0c284446cfa6466fef342bd0dabccb83175d99b18d126b7135ecfaa8c5c213bfe44ba5ce4ece62a5a3d51c5ef25b6137368b74379549dac27b70560a2e6fbabe44253b9853375a58e8942a766cb7450c3f5a3fc979d51a0f926873c3ba157a6835f070d5bf9aa7904b9858379dd4e9b321ac90e2500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008fd32160d4a2274b647f4cb3135136a3c458594863718f30d548c45071e52776d09db1018fd13a9632a3b8d2608f1f7f9524d692a8033bb1877c8ba8f92ba881a13a3eafa9c705fd4fe04df7d97e64ca58d2dababc7e0072fd91eadfcae0f933bb749f498e70bb0bbd3c2be2696af6b45af0e95f1f2ef472c906434414bd367e921e7090a1891ee21772a36a42f1dddfa99a10aab19b4fe8177ea50ef25bdd6997057b01bf2b1faf5e7a0855da8d1afc7f5597ec2d79115f8afb0bf4489d63dabe83dc696850a9afeac1c707246d7c2fb06b48ae15ea0228300e8c82fc1bd7674d1cef9cb644f668458d9dd0c90793bdc46d23355286a9f30f30215ac01c66377e90c65022c04cf8e8219b0a32a16a4ea5e34ac2fe513895dadcb4b0031ea52fcb55ca196aad789d6b2014efe1f2bbf9343235ece14f74da5cbdf2a5177ccd2c149bbbe35dfe06a9c15a28638640b3bfcdce92af1d0f21bc07e0ee7edbf2d8d2a241e11c4988cb20aa83ca5eb62808f995f2a300d8fd81d960f0a259e9036f3c13a50732435cf2e1e6f052319b9a8873b8ee9c0ec054a238a5ab44c0f5d07eeb04989c8b596d19307d80c04b7c919d0ac6280c3c77e882bf44bddb94fe3e19e4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086148e85e9242dc9590dae0cacb366c34db2f5e3d755a4475af422d5f58a90a5210860d74f4bc5990e060f7a754d992366e8fc289af449fb8e3e7181562fcc696b96c115d17989793eaf1136886d623d13013959a557d54856963ed6c7964718293f9c0ef8d0c4e4389b1203ba8eb5080ec01e10d79598b22afafa65274559ae1c0660579f38a727ad5c56202ef28ad9146d74f1559857c94748c564d332074a7f25c17a3344a9b04029f484ca532c12612bc01b4a11b182a8facdb32c6bb02c00aba95cfe2077abf8bba1ff6259d167733b0963bfc2658fbe9e845811a2ac1c2feae9fc00ff442bac4425ac327ef05c5989b5bbecd9a96d2a32881c88d4e77eab88147bd5c422c62205c3adff256e767128abcd3a6ba30099ec14acbd811c38e19592d723f243380938124335c8a28727535896bf1447a9b3c5612711d06463149f223862183dc7d02aaaa7123d75cdc9f5950662dbdefb5eb3ae82d52ed20a52159de385d8be33ad90a9878a80d3371480bd42045ef93ab537ab583c2492906173fb83f9a04ef404f89a9c609e5d5a5690eb263d1b104de928894958dd3543802b72d3d16d1bca9a1f8524ae65088e7ffaa2bd55a3a2767d9d2e747f2cfb8b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c1d4669c0de4b6d6af2abf4b5b4f48044a91f9108734eb5d61bd869d0e1aab4e91d64e2dab935a172beac112317dad3911b31755ff8f298f10dffda3182e997f8a7c45fc88732c35186790e187ccc6c905ca736c75b37072b91d884a706c3cd1fbfc4ac78230c0ed7749ba010581ca900c10c16fb5512049db7c6aa685ca04039062791b31aa69de8dafbf5a8b710f793ec46d14f7d674636efdcc32b7433b9092455bd1530e6905d198d4d1c49b45a8ab047e1cbfd7c89da17a7f457e9ed89240b9be4810a735248efd11b7afcb076c378b7104d841da770e0174198d3e5deb57bffe0c655a0e99b78769d5f861d396d942d0e3b8bd178c6d52ece4f756d43488093d47d78c12ff69f64db29b0f281bcef59dfa52da04921f5cd190b0ef608b0c1c2a47c66bddaf3f7521a6439e0ed6d78ddea8734263ded748dee713626a60b0684f9492a101da97d81f4a46702aa4d04f0536be903b1a8053939bd715ed2232f5d3141be20067f769e8587033388e46990fc618a392cebff614336f41567f1db9d8a6660b455ef53d2faff0d9141ad9614274ca857a525533a636ca8e6994b58a713e0627da6f9a98098648e33b57f929ff9ec78696060a7bb88a287778b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e460065412ad7358a91a3c37390e1f24c9d82ee4355c262069db8c7601e610b63a68610dcd0b28d957e858e795188168f8b238cc7558e4c22fe9322989c1b1360168f9e173b4f1d2d8779c921a9103f28000d2a5dad4295e97fa778336a41f09d808b94985e3bd16886aae4d3121c31ec8597ca721a5f898b2c4f5bd8ed4fa9383ff9ae280504a28ebc2786ee8cfe6cc2757682d58d6b379c926821b9c2116115079f9483fa9bbdf3a438c790a80759cb80991133f171f78afc7bbb1ad2cfc39c8f84be23041e08cd3cccc71963b3398baf34f5bf7a3643d1cd11b90a05440b963b081434ac44c64af05abfb0e70959b2867205352170c800618cb09eb4352da2b6c7e7b88bb294b7a5ae436bee5b63986ac062bc0a2586b0a512d7592662128537acfa8f2fd933ea1e0ad83257dbcfc7aab41c9a2c55bc7604bb6cd967832e2ded7d5f33da84eb6f91a02bbbae10fd90a051ec3e1f3d7c29649e94ef58585437444cd624bc66dd4b365f8729244fbec713607460d58440afae2866a4da85a09e72363ad7209a6265c736ea19928096400a2b33650774f9cd918649ca861989870deae897d243d933b100bcaa60d3f1385b247141f1e831ec539047f5593c4600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cf45d63ff822eb5c45c273ab69af93ef68492c477b4f122a12f61866ffcb2ea54e000ca551745329ca56e38df2b3e7a83fb9e80477642a96e83a3777eff8b756b2c2bf683b03d5205802f275521052c58c2b3fe43780f9547b9ae36c1d17f8a67473bd0b122b04719a3341ab9a2fd9c7843985f4dd8bd0880c3bd10ba8288d21a5afae0e987be3d21e5765ca17479a18ba02e5aba24f2164ffb780fac2acfadff47465b056aefdb3ad8224c391dc588c749ae3e8f6049feb4670e96380d49dc14788bc15aab482f1f53e9b43c2abdb026e1fe7638e9f9d53a508f96f5041605d76dc66ca4bc49fdc163d0dfd7604db28756cbfa6d863a33d5cd006a5bb43cf1b4e03f807932bc81f275562a74333a0b394427373e3dcf3a003c89699f6e6e7a26c463781bad47a34a2a157f21f9f9ca84db63efaec66d399b9005ef597a1e27d736a6c7190ddda3cc41a30695acfac459026125aaacee99723d1400d9fc0a3804f6b8fb8715029375c30c32906227ca502339d72cba381288d3837e3d647fd97d82cd9bf593e944f7b2d23c215a164f520cd8a22200f2f133b5a2a70f2b4744925fddf14a0d146077f3864bf462467729ef4b7a414b25bbafb3b4a30f7ee8d90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a878fabf2e89bce67344921ead979ba4c097f713b5fb450ed71851e2fc374456db137037caf7504798b7ff64a1790c30e1baeb4f28095637bcbf037df6c10bf442a14fd2570d514e71330fdcb24cf9f102b60a7b138bf3df0c3adfe6b0a8c86cf494822c3fff4d04e40ddb9a14d6b9b89614b1a5c92842cbff6efb7693f908ebfbcfe73bdb062cd96f3f78e57563c86792c0115a494d760f681920ad09b2b1e21600ea42aac95623ab2d5b6bc3ac1c1ec17ad29f9499a23a9925794f0658baf1f1dbeeb27b4f087ff33856d1b15fb94658c3f80d677585c505a8612f78cb3687ef463569a0ec9f7665a7e8f703f0e2a41ecaf8eab502d44234f1665fb1eb3b95e86507a59febd814b2084287d9e927639e63a2204eb5550fc61ee8e5918699b56c08123fecb2d3c1ea47acfb641a7d9212455cc387e7221803cab6be9b1e6ad615c3591a56ffe58b8022f692e4c49644398e6c07a06c449c7ee4ab4a24d06fc70f940a48896492f7372a4186e7083874c0cd2238fd57e4ef64a298d5bc361e4bd6d0b6d6ea7f7363dd8cdff2f4fcbc564e4fd42bd923833c38e07c27a3a9588d5e5d9d00b58a606e96f9e20e06ff645779b991c67d2ccb147c23c5aaef2a1f6f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e1d29547aa311f3c7844394801e3129e04a3efae738117c72081bb79e36379f84492d6d23632e11847926341c1c85eb1040d090e2d98c165fc59d61264dcb99b64dc9cce1b4934f46377d7fec9610265f8081ebaf6427d9c0d575ff19fe02b492430a3fe9d7e3770f1a5412a4a4d904b1d0a9bdea8594c1a5a65c15efd5739c4146cea2dc10dd0d2098ea4b9d1318429c157195279f2aac7c710f30a1f8cd96c04308a935c5ccd194900067699656b9eb037e4e946a4955e3f03eca1c1ddca20d8984cb7dc3c1a225e3ca0358aae9b1c11e9533feccf58d01c7fe558e196c5a957fed483c25c1135fc752ed93b0ed7419c77912f9b055a09b9624f65b1daf6b8dcf68ec019745a6cf39014629fc7e17b6f7d9b484f72344051d6547a0a015cbd99b26286d224de578ae70e37cf259f0b590affd60a07788ca02c228c36fbad524070e9b4f3e1b41542bdcf2b471291d24e8ef16da274d9736ae7e4525eb92c9d750749a778ada2380ecceafc202fe71e9271ed9b75395a561d04401125a883598908aeb90332d247cb423c98a2c44d04204f075c53e8d71e39f9820982747629e7c6db491c5f4623f5e8bccc300b742233b8e2bd92c189c0b2f5bd398b0b5510000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a61fe51c17759ea1b38848f9dd44081c439f86bbfd1ce83439f0abc3a0e63900d2b2c0ad6fc425ec0cd375b8ee1b1e18144843a0ac03c4a3bba56e932d7feda506009a601ea7b95610e6ab0170f76a264e2f0f75529ad1f0cfb0332a9abce569f89dc93e6aa2fa57af23f44c92f3799942f6bb6e6f0f3e1d8511f51bca993eec3a474a25a834ca0c1792dc3b34a1c20a8a8f833f1a77d55d15092e37528a41a6ecc12cda135a1053218c143b7fff52e2b9b1d1f7308f25614f61995ca535cd5b5ffa78f5b328d58ea39358b09d655afd08b3d69c8ccd4651a554db5972b548067525569594024ae79f1597a4a03512a6f9816089ec335a6e1f038b7c4bdf57a34f806b3a488be3f984c0f5ce36f13b0316bd22db26d80713cec7de4781d56bc951a5d16d3df4be76d277cbaefebde3645df88509b8e9ae988de7cb5368b1179b912f30ff1134fd7efd7eedb722944f88e4abe05986313e67de6c8830d232b6dbd123768382d5b3aab8c38d17ea7535466dae6f67c88af55c3543389e4682bc56781de2d2cca03692fe55d77e3c118bc595bb260eae34e8604aad5d1c5eb3d41d65712ee9c9f47bc99ab8627555c54df76556d34a7a7128d07a8b272963d7f97900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e950b597b1dff6894f7a6d1bb43bed18a8a6861538b5b1456c0ddf69734945fe2aea81311239c3ed31312024d971e3dad111b4e2bce6bb22d9f7a41d1153be3001141e112da9d87f0f2516649211abbc8391c24025497f0eee2298d2f844f3834451e20803572a0e003fbe92bdd805888f10f2b111929894c64b37d1189c022f4c039e817debc9e9862ba0752006ab78e2154a38c9c9431cb90f38e818beaa1deaa558a1e7d3b94f625bfa4a058594d6c030695709bdbb551b78dfab673cc675202270c1cdd75a32e4ee659bc3be7aab987d1cad984ed851bfbc1b919403139a2e90e01065ffc44048b9331d678b33b37ee0bfcb50f2ee2554d1841df62c7999afddebb64f6613b2e0af18a96adeeded7fd4f79a953442b3c465d2bf123a6d01bb08f2097719e9286883f48707f4dbe285e89e53d53d87dfc05f5ba9ffa789e0ab691a086c457bb793a7553bf6a8133ab1c6ec66a6eb92dff5fc8d0b3889ea3f8f29226e93dd05db1325106500617b9ec2dfc70f943db66818db061d177ad7ac9010b554f96ca8b2d143e36b8fedfa9eda0bf86821e8dcc0ff8551f26923a68873a3d8987446f8264da3c9170580ff9745f6a02059d8f0e95898e57ab62976700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f3e9773e49e2f09fa1099dd75bb7afbda99311f073839984eadc8a22b0b6bbca2ad3dc50c49a7558d8cab6a4fb9c799a699981925428d556514c67c323c3e44450f7cfb6ddf312efe536c0c474e642529529a891ea931e4b755e62da47465c4eebebd540dbfa6ad49710475f64d07a4ee19c44e28b8cc199c703365d352114ee3f7a78c810a9f9d905a32bab9f954984f366886d8a710767dfd8a0da60c226eb93818711ac9ef90a1a2e59840caffcee6a810d9d84fac383aa82544b576712e7dc80eed8db01d38198fcc350a266ee6ab8f311477b591f197db241821b6979b319682493b60d60b94e877e9cf94cf0fffd44d7e75ad2b8a93cce06eeabfcabb95e80a7d63b7c6f548fcef04ab32b19a2d5141037f4e9d57b2915100c648f134cdb36bcf83e02f58befb445ca8f7e813f1b84fd88d1d6cf5acc500b036ba557cef67538e303d2ba127d6d02236ef9b13c9f030f2398ca2f25837949302b1679d9853762fafa5c5af22e6d90933d75065e35bb54dc5430d380d7790101c779b912998ae42320e690e29707e23e10e8253a5736db75d3a95855debe0d9dcadc12128a59dff6c4c7c0dc7693c90942c54c691a87303c166395ea36d43b237662eed00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e1cf07e26b0a8bfd9f5d27512560ff2e5ccccab9da73e676f6189584372533785dc966d4e82a72131d0652ba9fb58fa089891de9116e3e86e22565edf8cc4e7e5291dac5a0d5bd7400c657157127d7b10e1d4e6d76116db174d9c91ba436e41b05e85f7627b85d5e2a906e779cafcd138c4a6a4ca038f6e751f1611da8cdb9bbe11e9023cf8fdc6f2a2d30ad4b418d63784a3f3f7a6e17af69f151d74a400293ca88159011ae19ef3847faeca3ce4fbc536113276965af9e0ba872af53593abdcbca4b77597b67a88f8d099ffe9e0a9bc8585cdc6293d7f2a01d6c741d08c2b44323cd247daa7188eb339f850d36b711eeaf524e4d3ded971c44b1bf1ced4945b6d56e99ca0bc878ae3fc459a4ce995c50d7f9ce444359056891c5a97ff3b52e38ba4002b1fe65d0b0f4c0385861a6664b3fe383dfa4d9d2061c4c644cc1027a2bf98b16c85ee5b0a26faaccbc4b3f28d14c54f9cf578a930b4ee20a28c56f3910252bf93f937fa3c92dc1ef88286227be1fa08c7d5034f7622b977729f9f772e4c0ecb3874af960a0e0a41f21a02ccd1da73272f4475f3cb83d0d0600ec351fa825f9d635f726d00350e158750d82efe68593c78fcaa087457f804f814b9ef000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016eb159b68d775b040d7955faf194ea855e4447eb7d52c50027aeedfd65a93e511c4f9f11bd54d54f1bde54ecfbfc3bf9e24c317cc1b2ac453214196af1747915ac03f7d6c0e3e3969b88f5eb7d0254f60b96eb5425c6762c33f61e43473f8f66e9d727efda4ad26a6997e46af91ca07b824e344e322d5da3dc2a408dc6c82cb73a1a018bdc8d314f63a5c86f76f21cf8dbe6ecfb0db552011980e76c9d437b3584c4bd73e58e236d892ee8aef074a7c51a9310879ed1f54358667b8cc1b5f57502fccb295f2252cec2daab4c4dc990b02134c5f3af704dd2e10bc15126be4ecc6b7fc1a29354eadb121d970d733d750e6b9347e82fda4557fe72a1ceb62a7ad91eb439faecf259c6b257854dfa5c066226d7df4a68ed1fbebe6570412161d5397886c24c4b2cd1ca454a20a02cedcad7448167907561a927978867fb8576d3ab8710bd19f74ce15ea5b62c3124144cd3f3349da30b1ee291111bc7ed7d13eaaf20ee13395e0ad0225c4a2f2b805f94571db9c4806329b398f9ff22be9e32dc4244d8c509a3435eb1ad97cabcd52334c2260b2acb69821327a611a664508ee1ea295110e89eb76e9439b961d488d33c83d89b00c3e4b32f9f08134bd130e34e600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d9cec8d82b7a14091c741fc65e2489e595f9310705b6704c71b843249208093bd052e57974902ec6ce4bd609f01553eaf4fe8f561d3a918cb9f9efdb11287aea704dcb89971c7839d7125a63781a04c84c5e52f8937ce47ef40fc5281f32e3eced73c61261477650e6b945d05c10b932480b061ffb56287f6ef947b1388f76292ac99bb7f7510d46bb333e77f5aa017e5d1cfd842ed7ad50597cc6b6ddb566ea4ef502d9b50743034aebbdf4bc7ff1c86fe09cbe87a2b1487ab795cef9708399807f95f2d9952012f9d2e772caaf35d9e6f5b81499d5faf69eea8d410b258b2b11e726979d6de48c08c7554004d28f5961d602ed455e1947c2d5c3e88142e933d035c501b89fed80b82af62ebf767e4c5307223f3aa3dc52dac7396abda18d94c89afd4fdc4e135932fdeceb19fd5e9327d74f3a593982d57e2ca37f87cddbc86738b20312b5f7a9f3094a177cd7ffe266a2ca84d9ed4ad048a1843003e9d3c83d6a1010a2eb7545509fcdcf9c2dfc4bd80c37ea2f3203def445d0fca837fbad5bd22214625822210c8dd16c8c274cc1389d4c172fa8a6fd0a3fd80206098fe835eaf66c7420ce3a98e718d32dd98b904f55f9b764a23e7a39bf784bee5592000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f67e30f1c9b0772a0010e39730fba79cea7fe3b155eaadff7b47f790e3b5e39374c4c4b13c7c093f36ea1ed794c9f9d6fe765d649b7701b4024d260e0ae96d5098f0ca7ae003b94c5c82b2b1902e8b753f2c3d33b875ee3adcbba48e52b7f674caa6468f5560a686a76c9b623bf91b76eff64cf23558bb0d3a6e62dcaf0efa39b76b5a5f048a890641e3f9ab94be8fc22435527bb3a017245e9a34c677a48c6e89ac274eeb4ad072cb0dc486a22c4d0906029180260e6c342bab4016c938ef6db1b13b781c815397798f4d30f68082221db9020ae52915d42e539dd4c12b7f201071fc24cb2ed74d783ea3f5cb558fd3282c6226e5876599a77096e23c5c3582c4d04aa1dcb7000651b8336b43e20d4da2020135fc947c44eb2946df0cac981e3d794d0ec4141527af472e54c7b65510a59c7cafabb85be5ab7edb0520faefdfcaf2b42f86764c44f30e3419df9d81d611262f29560d9378514f66c79406258d3c25fc5fd536cd82ad311fbce7e4b2e6eb8c52082975d8f45fb94c897f8b87321cd8b7d2602cbf45a457ced48614e2002e63f16d16860efdf2815c8839b4a406b667f324ed9c9a79040ed5828912f55d811f2f0066fffcb5adb013cbbd7410500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d5c9a65440b5476da350ecc1604f2bb2342e91abd4726bd06ab2f773386f5f2092e6ea3d488410ff779f9d984061c0673f4573de98031179c29f27b517abb4649db3e87d99b0fe519e5c7ee4999e49aa0f465410855527835a3a959b195bea08091007031754b35a94d3439618f982d8f4bb61ae308135f01f40bdcd509766ce1e0fd0307f8e656f4ae4bbffcbc086af189c00b77468ac698c897f0af2813f8b53fd26e8d71f328d7e22cab1530c5184cb166f0bdf46603bb61b29b6fa2a5c891f1191b84d91fd95e77bf789f182d6a69917974b2cf2f0f382bc71af9c9b78feda632b8d7f5868dac5a873bf6b32e10ced044be466e11ab4a116cdf933941c7b066bef4f5f9ea50b939c4febd2919b0b35b4cf90b6a28bfde463be7c664ee396124a25d5c34336202fdbb2a87e703add44f7a178b1e0209ca0dbab5da173314af9de5694f48f7521efbefc0073643494969fdcd833ff0e066ac41ec2b2033769f749bb5c02b49bb8593780e77dd8fb1dbdac5c7d4bab6aa9b9834fc4e63f74feb2fe7f0c109f1030464a460b1557249734038169858125c90e8ea859faac55d20d9dc17e57eb22648315143bfd0f171de436596fbdc74ea3cf71a691943fffb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036139a66b6911425d857cafb136b0c62f45b32892beca8468ccea7a0d62a3f20a878df9653c2881f2fc1747a81c6da1ee1b4b925ad604fe5114dc026776076e3ddc9b5d53f272b84fd2e83d66143a33a8885bb428429a81fc7392426db058cdca742590e52b87740739bedc8bd55dad1fcfb48084b4d6a0add215d043aac50c0266e300631f52ce7fe922b57d7671e2c8d7ca05f2d3a672f794ca4a8b685a59c19008a42dabc18dbad5df5407d39e848c22d6a0a2f6430f64107ae8c081b18b1e5442198e3d4fd89deae94e7795dfd2faba0f9317a739518940db0d8fd851e2e92d9846e1aacb695f776b42ed6bf3fa9cb704f5c643c7561db85194fc4be787393f6f30c606631ed17bae7b0c06d50011462b2d8817b9d1bb597c454ae282362d73ca60c781e63b82bcdeab4c514761aed67921fc3f91984ac18844732825b15bbabc8834cd6a93331dc0af016ec0610e897f7f3af9939e853500e3dd84182927681976339769b5de2f58d20393317662dd428affa389b6b31836ca2f2b487f4b613d1fa689e2a08ef6a7c3c7ce5a77d5b0fe31d07fbc537909d4d444846da099a610e06805dea7d551b902e70fc31b835edab22664c6bfc7379dd401137c8600000004000000000000000c000000000000000000000000", + "277fa514990fd6c3f6861ce2091c65ef81ca19f828c9038213019aa55011cd84000000090000000000000000000000000000000000000000000000000000000000000009008dca7f174be327b3916d7e0a863fdef7595be687aaac1663e562a4c04c11f500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00b9297c0ba7559abbd713d4ecf549a98e691902e030a01be90edd9712d6865e14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000902250e4945ba5fa5c5ecf3eb267e9babe5b7bfbdf088adfc3a7685da6ea88b47f000009c0047d37d9448c0f8c0e25ac3e1e5d0765895d6dabc084650bf032f8831ab2d17100000a401e7bc2f57866ca3f623d74bec92ada4d39761ce5642e35ae9be766b5d449348c00000a400000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000070dbd9f40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000006d233588037dd42f6123832cffd08bc965f92e28efb61c79f0ba180776db96c0e8b5029d000000090000000900000000000000000000000000000000000000000000000000000000000c205b4840236ccdbef345770a7f289e0fcd4a07651aa2acdf910fdc4d42fd58be8372b9621635ed3e4afed4b5a1f5a8fecdb553bfd83f6fa88b697c645d5636d3f1ec9ed10a62a7e8c64630b9ebae4d525c23802260eaf22bc733bff0ae10bb41d833a9452b2d4184b2e459ab9d929f69b38a827b31b0f7fd89da3dc09cfecdbaa6c327c81145c4d9586c50eed1cb56e0e77c0d687920d8e56da73ee81a9f56a60ee0595a18f1b8896701b1963a275df224d627b85bccce750218f2dc5b84cd33ba797b50293ff69f4cc63c6fdd1540c1b0af33128b412d4b0f0e99ef4d5659369996bc13251d2b6fb2d2331fe968a39427fac84421d36a5e53f92a6b1e597a384009d8d3221b697aec86afd7031a646c242100951ae4531a20f9bf5998f6998a1a4dc1bc0dcb126cf81daa72e2fa7aeaa2050db7608d6e67ff5be6f597deb1d2c30910e9100aa3834fe9d4d72d2527d2b55836ab55ffccb6147b08b73a4b473ec327a72a0309e1839c0e60cc87789369d4f2b92feda3fb905b13fc0af85c357c3cc001d303811ea406d8bb0be11f52a578d755494aa6735aec760114401201d8ce3cebd10216f07334b21563a4397dfeadc7364b7128f4d07ee3e967ee32c0ee090040502a4269132695be3d325f11a9105c436d941e3bfb4b4a7276e7afd018729e66db02071f3d13660594294204250059495976378325b2632ff38fe67d70faaff5210dafee1e0154dbc0c58751bdea8ac82f6fc7935859cc3352b756df28c7df8d3820934db489a1ec9494df263a3b24023a1e66b9f114b037c9c83185fa85e9e9d726399b310dbc14878f5f9df25a764239b9b42695ad6ac3e8caf7095d95873b9b09da19f7350ec4f38655d970be8ad4f34f5c7744366bce306eabde06b8f446fa2797541b90cd13e1d0fdff8e4c4794189f007ff6f58d210a2270ec37f5631fe42afb819147b2e5b4818dd9ba031ddcac43089043ee93a93aefe7a7dc4ec58b2c16817a005d92f4ba29ea981b681f012af61c4bc2fb12c646b57501055c490ad4301766b664828e0e39a11e5ece6ebeff6b5b8e00cb52cae74a366521caba66f60034233ef96db5744152749b64a35a787b60cc68c2a012b2b25cb4330e2d46a90ab7f68102a8261fdb4ec3b78d0556d636ac042e36854105e6e7476e1fba5fc02e90f00dbc34ee0cc5e75350c9172df8eeac7b7c5371f5c1c8686842661b965c038496c717848a7bdda12be8b63f6a439cd66b391ea417acaaf3076b99f2bb841c67d2f44405c2b1510e4b3f72d35e866f248571fd8b901acd6de8f931cda89507cf7d6e6fe32b8503529fa42b1a7fc7eccd5e8a798364a2deed5f41e71556092adbe04348099ffd2a32460be73a2482effd6eba76eb60a815f90843b59b1c791c4538c2b1d6620aa6f678acd22513ce7af53a69dd5348ac9fe8013ea4639a41098db3ac84189aced509656a0dc14f12cfdf0b21608d4a9498ac23338df221e90d7a9abacbdc266abd9bee52b955910873542eee5e7bbeeeb87cf57a11ed4fe62d37d3b508e1e29b9d77a2f89ad8644c6b8b4243a3f58c83946bce08351caf3e0334bcf7255efce1da36f41ca4d0997465017bd4d266db68e21aa0a41b84b03826e72c0056bc7a2702bbb9dcf326d01ccc28724095dc9c143424e61ec8fa5b57034bbb1aecbd859411bb01f8a568b78820c0b8787c932ea8e58df391817d98b6258913d2adb08e808a11538a8d9fe467bbf72b351200d6c55a170b94612cd41d0f4d10d2fe6cee5856fd1c0aa6bfe56cb9133f42c3bc242ae6afd347a5a466002bfc6ca6ac7954e73812c6572c01f574aefc9bf41b0d44b0b97b877493d4d6980bd84393e239d67b1e8799ccc2ee09ab942df56232c4f09d9ee19e8160b2ebf01370a31bb86081d288e325892dce5ce29d43b266f6d0cdc8659edc8e4e734cb612b8fa27089370560f99e241dcefb657877155ab9baed8f8eda33035e58956e9158cb89ccd229c8237c34a99ce440266982f644187d7d30d74cc8df3c6e50f2d070236f98a95e03469335548b799767c943c0777e8d6cda69ffcb2bfdf0c7e052933aedddb2553cd60e3d121ea77ef42f84d7b9a275657b11403b1dfdc5a3fce2d1ee8ebfb6d9ca6ebbf31923b3880e958cdb2b84c6f80d2f4f277dbee066bae2b2a8909b65945cb37ed9cf1eba1b89eba6204e6a7985b2260724dd2a843e3ab10425433b47a0e31d71fd9b97dd7a5400d8091a3ae0f9c8a317f1acbe93cfb121c48064329edd492159a4262c7541cee3816bbea15ebe84da01faa388be7a2460aeb20a01b8186d05904c0e1c554dd20428e64ae446cbcfb6a5269dbde4722b3079b4dc86f7a377e0de9adfeb4e91dc5d78cd052c338397f4dc95a05e5a22d0001ebb0aabddf57644fcd397b6dfda228ff3f8176053d8cbc694b50d692b0e1bb0cb0f79674775ad4512cb9168f1896b4e398380904c684285eb12b30ba5221311dcffbec5d1174d1f2bc5833816551d11dcbe2d140b7453f75fe1662027ff18811538cc59ebc193d4a0178cc1da77658d8572b52f374e8f401ac523ab25e62a02111ecf0c7b0a363ac94c3c57a0d52bca60347061f2659b172e6c96af5bf9866141ba984a03d2f38dea58da15180325f4e0d48a093e41d6999ce43024973e2b000d8d2fbcc0c9f5a54889ddf2814316396ecbfe833ffc85531e77a59354682432d06b1e7430f5812ea9e43f115ab2a5fc18123ba375a123f294195e7af7d85f21f3c570c07cba86c15d3514e5db0e92617eefd9a4ffd82802451d2e5394bf17d0dcb618c5464b384b7bfe9a472148fcd3d64c811ea6cccf0fa0fc8e2ad628fd300d07f928dbd4d7ecf8931a5851d6494b74f995dfc2ed9647849db3fc551537d4001958e8c424878574552c5cb3cf5ebb84df9c9e4a7c2eebe6a8776a80f768e3d2ba9f893875ffa4f2412b00aba2510c1d3fc4c0c3b5b4c367851fd8f42c8dada0657e3d7f080434119fe16612aef6601581b69b8acbe20ddeaa262bc47459af62eef63ff514a1ec2012438ace40b4da00f0a4eb1ac492f2f282b190e705167802f46251c896fffca826d7d8f26115db0526ec28b39d2d728160bb5e6a7e13f0b0a3012034dcc87e5ff0d66564a16ee6723ec7463c719c8cc8e7bee0857475d420ebda67593858724b28df9c0fbf56d8b0113b917c7af831534c76ef66002611b0a83eda55452c57b9429ea957f9612756ec0300967466c522aaee5a0b4a4af082c9550669576a55ec652e390b56f61e31bbae2335ccdfd876f88c2f698f997ed22cdc96d6516827668e73e95a28524370016493e2bba1eda2775dfc60fe61c2a117466024d1563ed302e41b4a9ca490e5e2a903de6e81969a207b3bf2c38035b1c3e891fdb2ee3f08847313179e490fb6ac1a24dc51b1b1265196aa19e27adf904dd84ad41d1cddbe6bf2285e4ad35b9092e8c9596fb261b0e7cba34dc9e2ce11af6dc5a6a9e3e829f5b57081ebeaecd10362583eee88ba1b6b146a088b325d007c7236f8e2a037a3aecba4fe1e1f8429a270e38c37acada474192a97f5203bf2a65ee397cb58ee204aed0939839fd56baf1c9f7d070bdd0be6010504d295c37192227daff822b6ed12107cf6ae3f40460479b90ec66adc852f2e308bc1ec1f223915cf9642bd80beccf14c71a551d7337df0154f64f659ad3c11675ff7564110f58b458c7e497de05ed6c5f06a1eb72b8109c19cb6791d5f17d6ce87268cede29abe3ee583291fdd80e180df1c50c10bc1668c1e5086993109f74ff978bced4021cddf934acba63b1166a322d7319402b0ff248b0fcd89b08717d8bfcb834b62d9355021788e78538779091826ef88c3f8bc88d91ab4809cae47765ff17bc950764a3fd4c71ff873ae214996c7a1fbcb7d328c69ad73a65532783e723f101bf2e52731e7f62af82dcd2d7134236b31393d366fd6bc998d5e1a9effc2805297602efff885f382ae81e2390c3305b850922a1bb8d54a097a84aecfcb5168c828b1a28ce16207f996a146b65e13d081f7ad7bb3af7189a916cc9c3fa99a567faa522f2b562d2bad081c416bbbc6c676c816d6dd46903387b2531fcadb888ac20a01767bfd99aa2b364584aa4f0b9e00f480ab7cbc8897a74f2b96406f1ba849b50091f318aa910c361635b043c5737f6cf36958ba2935c0472edddc60c513b290700ba7f0b30ea1120db3a1b6fb9033a13f738b7da271d391d6aac31a70c1a5ff82e5f3ffa9f4bc335b1bdec325031802f98c91810321cf46a8c2eb2fd976471c02d328fd061381d3eb57cf5ee92c050374aac3021c2cee169b104d0a07ba15dcf189cf5d379feaa6cd4a7b553f985699d4146a173f67659946ebc72e67965303025d18863e16f25d2e7eb255ca8b09be10245fab3ce3c7c32ce6a8030926297bd1666b0c423fbed8b217df22e047e81c679507fae75514754c2c31f5e8e5a8d422a534fc50b631cd81c380f77f83bed82b6cc9574260814e4bae4e6b283166bd6197f5cf2f009dea42a5d4d528fe88e67285fb79ca82ca1581f00a393aef49456120846785961bd56ddf8f7540dcb85e3f7b2208efa1e25b5d65b515d8afb279b00460b7724794d08a75236d514b25a776cbdc811c12ab538db56d6e8f36b20b31e69209547b227f85e9ed0dc4656e14302b9d58bdf4ec50638db40763a952a750ac3698311e4c7ceed94f283c4fb7257393096d8b26c211e9cc837650dcf21a215ce80379b939d644bbaec5fa44ab5e9f4f556e7b2abc55a0ce3b8067b7e8a081a6927419aa0743d0a9f8b767c0bdbb7caa07eee5fae37cfe351a26f02ab987e0c63ce6041929b91162f20373074b3bf504c09e3526e2b9b0d23d2d0a54a6350064e908e469af62c80c7f80cf08ad539314fe003fd5c134a14d0fbd4842717d11e344f8b6832017d7913c0476afd6edcbf6798fd950f071a7b1924d10c42f1a71dd6d6d5c08679628e2e6ae9c4b12dfd8e8de2ed7356c2bbbdd18e1c5cd4652e27a4404c41c338a12e0341d380a9375ed666011e66f4dd558eb63cd7e8235aa71282085b48a2cd12496f945953fab2bdbb5a493b882a08c237616c2628974cad2c111f868e4b4e2c2571a12922d9fcf39611b758130e76b2cd7766f816dc2ea0305b93a3fcf201d7370e580d0bda4fda878b343f6fcc448e3bd277bc289d778d107de60fdcd2666b864f50509a5063cfba0801ba0f5f09fae2fc71033dd2fdfd0f75550ca50d85c9752dc51d0b721228d303c2cf1c42b6bac459efbfc6cbd6cd2c21e6fc7b5742385ff8a1b88f1907b8f51ad28df8b0f3bdafa10e3e193ee70b1123619492b4003b5960e1c79f76d849298e1ad96c43f7e74b4d0996b4eaf4a417a264758686a6e8e861e21d320cc67b422b0cd2aa9a1ebe920d7708dbf5dcee2b42ca86dfa3bbb38cbe9cfdb1785c9681ce37634e37365bb2c282ef66b31e290975e10a3ce055f977cfb6f055bfd1bb864b7cfd62c7f4c0a1ca90e20dc790e80c37e88eb769d13f5a0cba078a00074973095d488579b56cd67478215768ddbe29f859ead10dedae97b5d3ce3fcf8ca10691b25bbabfed5bffd49bc1d945d51223543e4c74716dee0125d13d4a3dc2c8f20e6002db03433a5b270a1208f8e97c04f9df94d02776013aadd837d054483cd97d5f17bf6bdf225dcd9505625c0d5c11b5ce3221ba7e5765fdd253c3c5d9ca62b91412b87a5d3d72a078def27edc252e3bd2ab40a204f7bdf571e7d9642f0e3ffc09933275b86534572c69995925d8003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000000a118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000000a0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000000a0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000000a0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000000a29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000000a141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000000a25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000000a12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000000a2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000000a189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000000a1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000000a05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000000a05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000000a14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000000a03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000000a2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000000a1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000000a1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000000a14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000000a2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000000a305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000000a280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000000a223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000000a17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000000a08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000000a2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000000a0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000000a0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000000a172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000000a0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000000a05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000000a137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000000a2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000000a2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000000a2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000000a18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000000a0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000000a204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000000a0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000000a1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000000a28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000000a1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000000a21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000000a0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000000a0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000000a107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000000a2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000000a09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000000a24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000000a03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000000a1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000000a205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000000a25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000000a283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000000a21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000000a094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000000a0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000000a1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000000a2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000000a1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000000a1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000000a304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000875030425ef9281b479c5dbf5951a246a652d3315f8c08e6b1f833382605f61c6ffce0a19e6e49c1c8e399bd8f21aed34cf1944cc805ce7f59af20d0bb2dba6e3aca012f430999650f5f5c85207a21201bbdbf274859b16d1778e959c73f8a13bfe497f3eae0e9ea32c1c237b05043f7d63272fa3281641f8c0e33c87e0dbef571fcc5226e7727661ee3e5ee4f4f5ae66a380bfc39e1f5ef45f054de565e69d808758ecbc2bbadba579da98cf4b71968e36b89e5dbfac67bda5c7d799ee49d52e4dd73a8f268ec691835b5418578a27bf777fbaf0674e4da1728e3794de39ff877af0ac16eaff52d87d9a11f72e4a99c784776cee452accc83efc2b663af746cd997ad4a38d801a794d51c388723797db1c1cc393bef3a2bf6f4bc4dd065649d63994a8f7a1e6e4d1e1e476ced25f80767e2a18d59220aab817ce59ec84e7e8329fbd5839045194bc9f6e9a8f3e5df8e9570c656112280b75125a6d54d65d8e8c19c47fb11487d715dc42875ea4dd819bfe4598bd4d7544f74cd481ed3b0b82397a0b1ebdb66203e4c5356d634fcae6e36b4a71a25b8240e09c1d7c82c76970aed9bf2a224d130301b2cd607f6eaf0becc4ec16ebd900fd23ec0fb18087519da00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002be6f2c9309000b765bda45e6f694115646b62a1b426a487c95f1a7a518d54e6643a6d6d20f709ea532ae9542ab779fff77097af0fdb6d562a3efb319cbce7a61f2f34d88221a327e32888aa5f6084bdf5713890e006f1ef28a5ac70cc79127460f2d5484dcd9353ffa8a0b226ca7b05df7a64b65e040d1c76d20c467b9b2fe55a7ea6cca2108c675c5895d954861a81995cf9a3bee2aa9cdbfca7ad9388cac27f403187d655d8f7f14dce5d4b94574a504a73a559e8a19cce8bd002ceddb6926eb3cbae82d7bb58177e6a85e329f2704633c41b440c33fc31f77cb647c2bcfe9e4c9d933ed6364862a5ec8b09dfa27b4de6c849bd2834f2c4146c1e6d66b5fbc75e4cd8a887092b352eeddd3c7bf7b9a4025274416a4e61249784f6e4c86563d4122a3ceef5f760ebca508311fd433534b1b37ae40984f3ec59a83c464ad001ffa977f0e6f3b16d6b31e9affce2589ba7c75009b62ee59b01a712304c1120e660d2b8f296605b84fb725a48acfa510afce1730ba6f6743e602c3b9724526a102f3e1e2e751d9a3e56a1643ceb101cbcb7970febedd899bddb2cd8d8d02be1dfa2066ebd4adff31d058250630faa099c93c4a8911a19e54a1638c1af0a7ac978000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095ccd9ee4bbb03c5437104c65035d5e87019c6b9b6c3a3d9b19036225475e4cff4b02ab24166523c1274ad4a1586e0e330077500ba9a67e501e39b411ed551717a74dc83d9a61fc92c5a2b0550a2f0acaf39923be051ff84af26063eb584293f3eddd6de680d11efcb36f7060a4d38b6d1026c04446fd985e4b8330ba508566bcba389ce01f46b54e7fb857c4cf98ee3f5d7210a617e3dac4729df6a9447bab9fb587c8296fdc46f8684aa99320df96b5717948efae3f6db5a2d30a2e2f16dc56c78f606df31862d17b35aa20cd9ed263e6c3c0cb466ce283b5d26fd6470d3edbaed1df94d81a28ac0127ecfe5e9e0e9a3eb84d7c7769bfce22047c2067ffd335698d38ecebae5c3f6865e5952e93b9f20a417a644323b8d8d4a3c92369b6d59097066eebcefac16c641d69af3e29a177072a5ef30072f3c13cd5e83b0c8f6359d7c85222e0fdff4117ba8c24ac4f66d766f79fc89b99392bb258e1cbde3ad6c96423325c81047e618c070db167ebf4cc86e38ac66c9d918c973431a8040241c63a05ad5243a32677a34291042be330e7ae85d87f61a7ed34ecbaea55761a72617decbec8612ffe8552686c3c63b4bb5196bc3e2b99dfab21fd5b07201356fff00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f7d6aecbf15283cbbb79ae24fd9b340e85f29d2c3bdcfeddfc50b38fadce9095df8733b02b903d843d51399671d2aac1d10fbb24b5e6873b7d58111482125b4fab9987d7dbd92346ae2c5942b5210548fb7ddc0281c6756d0aaf5351cd52ed1052387df6a23284d6697d633cc7a4345cdb5da848197b0663658af07b06d7bb7e4ec94165c025d4f6424034ea6429ae5a3b2971f86f68c5094c039da49059de7860fd86a1a7d2ad188914f1b7bcdcb1c58b540fcb524e20833f5f5a10c8adb9e8753b9deeaec65ab3cbd8fce5e996b49a3e03f084e870b071b8508a37da7d7b1224c805aea30b10cc4c2a027314c24fc2ade48e07858ba144bc30464bac0f2aee2695f0b924ac608906c4de2eb907574563ebec493df2934b3766d8fb799479ec37b6aaf183b83defb3f34395afe226c29e039624a75336314e6cdd0c95e1a7fc0f3a9463c5373fa0f36ac1d333faa772fae2e7154809d73d892cd7f965d6952028149fde07ccd76d9af3d894a755027b48768b469605f9f7f4625e2dc8815ebb45b99b184b4ea272625c8e96b189ee60ace9b21e5076bbfc208971ad3c62dac2168144612d42ec79b98a53d1e65bce2659955de9bfc8d3109e2dd78ee98021d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d24a4cb678957db901eade691ae34714ad1f119c7f6a3b38817216fd7abad22184765db4bbf668a8a6b416b0c5b384f763b6b1e24bf5a65edbfb98408bc9b9d5c6864fe29854ffe938e635fb2edd33afcc273fededaa8421478dd88ae3fe486bbd5872888a735de943ef4f9e7414f3941c11a2724a806811428aa5d9c7f3f4a45120fbbd98f0a7ef541f7c4484820556c4cd1a87094dcb2dd10fb05738c245998f5c13602611b784fdcd127a2372b2499eda48519acc6c4ed63aae17ebea2e25ce06d3f07c5db35e216b0db74d1f4c1de172ab52bacbb510e2f31d48b952e377da4ed666d9b52e17014a78a22f36c9738c1968cdec240c4ccfaff8e0b9dc86a7944fd6359f42bf2297c11313f4bbf672dc31d17924460533ef51ca88e09bec8552a53d91abc8395571307755268c936793f9160ebd7888b1249a45d1bc75c2861a6729531fe8ba640f9c7192716da8fe202f8f33d52627da7d42e2eedc9680882a1dab4a65242d42da995d3137e5c7d95cb9f86d165b6067bd37a7d75ebed2a6d64aec2101b119c9daa2934cac7e0737461e8c8402c66d6578df43a9361060b2c0c57f5917c7b8ad6df11ea3310052e80ac1c89a545a300d9b9e52696f855600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f90c443539c2ba17b9ad8578a9e6f79e3e1c3fb466a311e11a533dae4d9c575fcdc7a59126e5d9cfb47dc136861672e10fa28bf2d0a357c4e0a4e6e7efc352d66167a08eef24d9b50d1f69841b38e1dafdd451c9955d09f95b0b6dc003f57053d942575b44f57765a23aaf2222cc8e499e19c80e01a4166bac8c7a4f2aa30b59b857fd71947728e52c7cdd5b8ecec2eb19f9cac2862c68aea69989dbd2de4eba416472eaed24f718979e0828b8c57d4b7435939d06690f419893ed4e34520276cbda16f29137750f1a9a2320ea0a98104c07e231ab7fa9e56374a62179e7823f646651a365d794e1c0cba0e7ab08f833e2b367c2a8bed372ce4f8f5fa06746602cb534380ed1ec75bf5c927c06f906a916e94aa0941431b7f518e32e8082facffddb36e7c58265930f393f118e6e5b5e777d6c3707cf741e92519f74a48bed3f089a9a8c8746dcd66efaa5b9981404783dd4aa10af48d677c0104bf92b2b52966cdf94bcae582ed462ec30fd42790fdbfdf45953eb31959153487ec7bfc0f530fd35d01984d1e7850bf4985a1b1b63f0eb99b4850f3f608867b625a20d344c7809c7c8b1a2ed558513e7d17ebf0e277cd105ea01dae316811806180b3e1c97300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ab9fb8dfbf0690a46d3b6e6a7e7fc7fff1cad601761c28b8d93e50cfe587c6202ebcda0ddbcd87881c337e281439f5c8e6d13907fe2e00578a5d24211c48067ad97397d58f00d4cbe5d001b8fb58ced0163b2d4984991f8990296b28cc689aebb0f6f248cad201726f1bdb7a6eba83cbf3ba2c1254c31c93188c0b8f99f1da53dbdabbe5e1fe8b872d29a25bd537bb1626819e93ed1de67a69d0d33fcc1a7920219e1e9fcd6ca2e358d1d4d8c2c362645d3ad712a95d98feb2ebc0521c830e0a2d3299def45c2e84bff7ba52aeaa880624b3f17ac8ce1e7d5ed5953e02a3f328aadf3c7202faf020297d9f7f7200cd4631eec36265506d5d99be2a0abf0cb9eb6e54bf3752d3460d8a119d29d73ad0aad571e08377992a7a0c32a91d82afd595968fd6ae37105b7c0c8e61748399a46458c47e542dabd41d43b14e77515d7903981a3e6aba4989c9f4fb5ab1d298d5a95708a7c50d3049e11f58c983364bd8ba0708e3dd29904c57d1c5f1528786f47d95181b42e246bd561fff2843025e6dc7aec8b0a18e311fcf2cb3ad52d691de0cdf74b5be1b23f365f6de53fe2a484e9eee5e28f04d242b1d75f4815bc9a572c19a59df24328117264bf7dcf9daba6ec000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c00c8a71484b030e12400339343dc06ee191624b42aaa01e7e8807ee6f7d07f8df07c56a618d67a1cf01f13cc755f2ced516a83b0569f90c5b04457f355ad050d01b792e48b2385a43311d510d8f7a267e6f0d44b41939f8a3ba8b16e0e49bb62b9340e3081dbda6319adcbb77961299249bd4ed5e77389a90530d0c027b70c74efad4a17ac9b11b1f91388c90298254b74c98fd9e0587baf8bb191ffbc7df25fb58dbda04a325afcb6d73a0c8caa4277afe13b653c1ce2c2c759735af70ac4da0e08dd2ced455235e3dc2f13123178c188a1fea340938fbf87dc03aa1e36eca58a897184cfbe1c2d40fd846acf71e07f3cd1819db27f3de079dd8aec4cc7873964f979d7efd4c6ed5f7d4a3120eebaa302f5ab705462e93e592838a67c3adc03afc6e8fb9ace1fdf898e9d5fc36fdfee4e399f071ebb2651e5098c9944ae09851f849eabbefeae95b37a8803c40a39edd232a2daf73ff749d8a43728853868632fb2407dc61d73cb1ae548f91ea8b13afce14964a206328f5ed53397861de8d1e93eb2423d31a21c0d2f83210da7924d217d600c171e603a95c37a6b85de50dabdecfc8d1cc9fdc515984af11be1f14c056b30688cc09163f666e2720d7390000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae4b815e548cd8a054524e991f940a8e19464ba64f53bf726c8026596f9c5d7c33c3ab1889389c7d1e3d7adac0755f02660fdb73cc36549856d9386185703ef551ec077fa9a7a17d59a63ee52ab79da374cccb299dd75610a069529803b075b764ee765317146a34d136d40847303b6fa250fa3b065ebdcb93c61d33cf79ebd8eee86dc87be47a3d0e29ce2bef2eb40d46e08e946919f764b31d65d9c1e09c9243097ec1a5dc4a699d94bd7d04cf9285bfa9288241496294e052d2069dc7473119688edb2b8b06511a49721484330c461eec7cb51dcc8827d3940bf171369d7a5e142eaa7ea4080a8049f8779aa79636f5ba8a2bc64fbe5295fd482c51b9b7a9ae7d564469276b52ac13d80c476b9f84dd5a244f6f864ecfd89a13d7f991ed93fae88c2b971041521c02e1c74f74941acb76156e9a0860bfb61edef9302d8c39ff3d467b03ba487f1657988adba7efc9d3eb6fb00ace3404d85f0ce4802876063f15cc9bda8f9bc0919eeb6e56f9e89d91d658cbbeb460631bba0e66db04c66cf2ee6078898ee4dddc5005b9fbdfc09c9a0536bf5d08edaed211236e1782fa7a4a49d38ca889d2cc147275be0c11a645cbd11e25c3806af136fbd80ef50e453e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013c34ea4c157cb08ec4e3f7b472401e2f3b2c85fe0866267c7a44f7fa7fb90686da3dfe14c4bd00b4f7484732a181635d0fe67bcb4de11bb71005faa406f25611c95b92a9856eab2d2196ce05360c37cdfd9115edb86199593cc2d9915c9f164747024cea72b0fe8c5f9c49115e9b980f3d60f26f4865f3772f433d99ec26e596e8cdeb4585d0f6dae5d98338a1e354a2d2bdb248ec011ef3ea6bce4899c8786d66ac450765d5a39e1ecb99879656d43bfb2c6c43fe7596dcc0a28b1651b32336005c64042f5a3ab1cc8888f144d863c8a3a2a4c41d9bbaff83e01b0fcd6c08105e2b76aaf3c6fc42215d98b8c01fa48895fb9c423845882f4034ef21df9840f2eeaaa256d2e995ba01bb3a6a6d969a70f29fdbd7b35d4f8f30681cc41d4509f94041be75776eaae0354052064fc52dab9d4bba0998909a0583895702e6f64a8ff4daa483111efef8d53164bafafc75bd2aa32466436a0dd5a68d046235255839c51a066dd62bf23be0f962acbc5381f016ecbc79bd9995b72797b2b8174fdc65f3290bf7056e2ff0393d2e575c26460f44e8066c73d83d0db1707a98d3106a4ac052db4e22cab7b8e6f54ea118cc8f293e0e3f7069bf3fa9d0478f808354782000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024d0da102800eec0efed021b2b8c2788a46c57126f99f937bcb4f8dd62cbc621d0550d714962cad6f23e62b737327f7f5ba797c1f37b45e5d862b1a4a6c90f15358270febc4673734203ab51e3f81184a0714a84499f8198abd8af209c62148b2c46670341227e65d849851b136b4aa59aa34be210f254a5b70c2da1d7bcb168d535942833d9f67f838c7aa95d47cbeb041c17c2f632a003b96dd45ab307d09c26863e75d803e797c2e3db9526c174e5ba029aa3bfd48a3467f1c10841bbd8f9e553c86450e4941b7e17ad03d29062bacfb6c8be952128714b22544588da89a051e79e0bb48511092ac601a44b472250d93814a132b5ccfcc13e4d80226df5581f537f2c91e2304f35b59b0e33a60659394a9879fa429ed1e5fe7aa483094537e480a57f54f705f96d980137f6e9b0750aaf8744e23ce20241a9023953d3f270182d319b43c6c09d2f08bc105aa892535649b65f92f951d6674a65c5613adcd625fdc68dd15e88086d2fd3267a70827abba4cc89cf22168052eec780acab845a29a8e1d6dfbaa5edfb4ec602b182d77c4764fab38264d055754f8dabaa0aef3a3b0de0d902697873746229e51b1b343dd079b63831194cffd9884dbbe6bed9ca00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008fac9f0f52f91e464966ed51a7525b2523dc72c6476e17dc8d330e0f13e685373ba3537790aabaa0accd19bdeadfc5a41ade249d316cc712e1a1572f005ddbb58ec4e7ceed3af57658414e7b6ea4fdf75f322c49f077b4008f43124994028902c4ee3dd383df2b4f2a50f1e9074f76ace29030017bde9163d233cb4da139bd1bc764e1838d40e30159a9cb1aef66773dfd59d1e51b6c4ae980eeb123dc78ef09850bff9810688b1aacff9aa562415c8750dd74ba212a2772016e2af640424d101d05e8036c85829887ba7898a33c96725da972e0d43cf7bff01e389f27d0bdc949a8a7977f5bb833c55946524a73f60c594dbb3789b7b116d897010916ab2bd7cf84e3ea3c649b4faaa6d7f39ee23a376f08b463fe16638e78fd9c8550bbc620f5afbcce536a9b392c2da23d4ac0668e0490e713a7ef87201ebac0d9beaffde350691ba652143ae753b678d0a2245cc2e9ff915d7870c997efa6eafdc119e8dc0ba9f100c0ce9b4ab0a4d6df09cde097088b0a48b35561b19a39a6de8b64e2200cec60b7a43f7f32e054c5d84121c5baed519f8eceaf56d86bc259cc5f5d0cf55ac873c8664c7db00942201da7c9dd4f6cd03db53c76bc5387406aae5741f5d400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ac57c742fd01fd32818b9d091411d57185602320a24dcb4d66c0e28b9244732100d6f1cfe27dc019f8553ec04cecd76c300d6a9d44bf00339f047a56ba821d359017da594b00491b738416f9dd7701120543dd760bfce7f26867f499959799454e03a6463783693b8da4721c5500eccb04eae8717a24f1ce0ef1a9b3dd1c395c68e78f42537999f79bbd43fa0ed3c19e19b9677c7afa2343c3c0e0c5e4377a9c09748587835e89faffc7599403e71dd2b5a0dc75ca0a1b1de45edece98b7c1e478cb42d3a0de95e4c22b30aa804cb49b576612b2ccb4cc0be93857a47493dbee27e7a9443a592bbf91d9783a7fba8daee2879e781a3d81e7b86568d6f93273b1f3fb9ab2b8d7de38ffe63bb1bcfa94ac61eb9bc74c47969bedb3c328faf18a68166d8cdb4349b38a021c639e9b49706bd9c95c6e2caaf90b8c0d7e8939ba164fd8baa6e6ac80fb66187a8dbd3a301e6f75aa97b8452eb98fba974c2306638e8336e0fe85696766712805ae465b76961a9e4403d29d493164aec01cb045d2d7fcb77ec836e9156a6fff806315f6a7628349027e726c7e6bcb6042e41dd90cacc2c942647cde3dd091819d0a81d7cccf413a33e4af7924aab38d3c3f35d97f49500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b31c2d0541115259c1fa6330b79d3e69e41657662d5506697bce313132988ede52cde14bc38c24ca9f5a6bdb02de3eb0e934f7346e2c2a66466ff2204709080a34e16d73fec0e9114889bfcec3721e126d93a96479871aafe707dfb7b91ac6eb209bd51b22a451737a02c19db8e05d6088a7bfc75e6aac905d9e50293d3012e4f34fadeb9a3354d25baddb599747fe31783e47cb42a6c4044672ecbf09431fbfb5d325803c4b2643d4aa8947790823519334240bb95041fc0974b7aa385be59ab5a45685c8e1e838a9c80b1365a6d874fa32606581d0ee55cf6760117dab058ec6c2a39e6114b44c705bf382b3bbdf59051ea32998b8f49756bd28f21314a24a62ed79ba12a926a150d2b2f0a29cd19f6b4d16b8141dc2d96f348c9f002ebd9180d916647f59bcae993f81f6355bea0bd49683fe692c011d2b1be7cf88bc853aa54959ff622b4fda05e9c3c43b402c7d19d39d8231b9a49014471cf3732c94ca0c37a1f3d93fdb08cc77d84083097eca7626b23bff749abb6d24382ccd0947252002074964fc9d153a49f203d546ed35762c401e882ccec743791155f12c8280751e53ca4e3a53611f4070c0d67778bce1ad00d268e210c013bd408c14789e20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011ec84d4ca24d4e4cf25110c1c7e9bbd5dad34292f71bf0f366258d165e8c10c5a71e1732c046737ff00d2de45804f97357ed0415fbf5e9e7f3bf85bc1aae6822419c7a1a6d3239656ad602df683607a3ed285a967b8d4659daa7b7a80aada21b8abf3393d3bb6999558dbdbc77525d0a2a25e35db2382d294f5370d00552d974eaf5800c96291014be3f6973b789bc1ae7be69e20ed2216e2460e5561c50dad06cab34cb26acb5ee5cbd385deafbc42c56c5398f7773a4112249c57c1e293bc43e660c77c96d292bdfb17562c7902cba4ca808ee7268dfc2d1db94299b09568b67156520341c3a27c418b640f0bc945ca497ff698940b23c461285dee4afe8b5f14fc2f6b79ea487bd488c92490cb789526186c5415f2db4fb67c914c20072915e65f3beae66a4620e992e8e48e7ef898929d1da46ffd19454b506bf9621cd4acea6b115e07817d403966ff64ef96dc5197e4ab9c2c82ef7f02df6c6149d95556806b65bbae6e52c3f73535aeff38b13b7088ae7cf54933952b3b4a9bfced1007782a0cb5a6eacad853697c384df3fdac4c0c8e72c7b21793c26e122b739da44a62eac3152e4dba6b30148317923c74b9229f999627a76a6f12d599b1a38d600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e5d196d46d8cd8021aec88a215661c21084ad209cdd75e1ba7a0fe00a45817e54ab0cf28a4c0b54064fe355573506504228ff8bade667b9fdf8bcd4a5f9e31068dfa38802dcff8c8bc042ca1bc5dd40318d34de7faed36c9bdaa8c3ae50fa882eb0da50682425e8521683a4a2e6f8043c332218956dd5c778967fe7b3e6177ab4e5049ebd253e8432311540384e998bbbd364e08d7484c20278fe1fe8b29c634ef1b676a0a7b0189b95972f3dc4029aeccf5f24a3434b7b3f8e76a8ce24b49a6cd20a70e837c8bc1aa9c2caa3866285fc0f7c1965c28396a3deafd38d274443f36fbf072a992b402bde25bfef58fee2ebd19a64d4a0e906484f41c5dd04f4e6991dbaf9f8cd8c75791264d9f4163036843444d26bfe58ef31b49fda7235a3d4324135b4e8cc70625f9c61bd80c74f2be3f63a03c1d9a7b32b482c5ad623f30e37fb0c015d2fa6dd83b09d5dec7b6401179a34540e0c2296fbe2b3c55d6a32d85bbe8bc52ed42af71c5f5835af4432daaba7400a2ad7f478ef81d9220127e38035aa9e207c82ec9e2922be0358cdcf4c1adfbd2ac585670e602be502e46d303351f4f03d83cbecbbe66aeec6aef4e012135a518c1868b9656e341d8ee93627e60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000213902bd919c0a88c87d6da1d0a867dcb87e26a8d8cbde573135beefa325cecbb13e02d16373e9c4627e06a726d7ef68b9b937a867312d23087c8d684fbd104b30fe84e51eed2ecd407d7f206e8a818e86720fcd6c438f36aa0e66dc417762dd1545f10719ed1acbd9c310c5e87365196c1c68dff95df8f59892ae59d4b8c357fe05925833498b4a25ee248c4e6a1d8eb2a12f0f4e642e7763f7c12ad92b94ef41a5b68e5fe4d6504627bdccdf5e74c1428a7749c29f67a7d1592c7682087b5abd88e1bbd294b9302444d9d58282124715737b8f2538d2ba97e4f8a72eca981ee996211e628926ca10e8505dbe01e76b157cd43ba56cad49fb35cfaa513c4cd7bcbe65fa2d3dcfa0318bd265bce444bc05e59aa4a7498b2d6ecd2608fae344e9c7fd8835084716b4e49426a318c15a56e192d7a16fd450aaff8fdf3821a831a50c8ae798c6d1f27087e8f53eb86c10b704e38217bb5cb74eee1dcb36fe05fc7ceb6a9307ea84c1ca89687d9ce0cbb6b75b2ac406875fe73f5353a548916b4b587cec4a61463eb6a63c30cfaaaa925e16f35d104b6f13d42cc4830be01b743f24fdab01715106e48d682d98b2f9791661c4d9ccdd44eb9f3f5ff7a03d6895d8a500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000753cf384a3df11413ce5a7ead7a5fec7f6f3c51bf3414566a5f21513c2b6762e4dff5d1af85a7d7f4032036e01660ccf438cd1087c4999b2a7b0807de29af593b1e787f5050c5fe7c88530539f8cc614f89a8f7beb6f825b58dc1d63d21ac63c819bbd71d1a6eaae0a58c8ca6d13ec2361b2385d6e64875874f17439e1dd5024363d0013f7125739fde1f480c455477149acb2ce8ec3bf824efac6ed86542763bf499c6df531c2005c760de908dc4952fc42125ff7fd0685699b90bb462773e7333e0d6c8c2f697af00599ea53fb1d9ce414568f67a4f3f9926779692bd298a0acd29f563c73f6c3de934e4f228d02500488977252acb3617c1b9ff64d8eaab57b6162df2fbdfd59afccfa8bb81c200673024a61b5a65c8d00f382d742d60882fb969ee1011bd8f972a3681b152228c171b61b6395a2fb3b7169f081c52ab62f80f8601a5faaceec19a9ce899ea29e64a800bb2c55a7533336c1d8afe9c0dd08b99e8b03ceaf1c4b4bc523a7adb26930fc5c60545e089c5c02e6a0b948f4c9e24bc5d807661cffae997991fe235e4aab798c4d286666340bcb83bf69ed56cd79956f44a0e9fa7e241a6df6847b579d5aa15d5869624927a32767491808100fd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000183ef9fb7c9681f2611b68a82ec298f7da64e78a1ad04e594749523104c9c36a47fd9394944ef9347c02ec57cdead911bd1f26d18de4bf524d9d5cbad73d29453c97c40e27ecc59eb9f0c65c8d0bad786c712304c2099d04115de0f46ce6352c8318fdc33ab62e685bde8731ae0f8b2ed45b04a861caf290bff83ce0e36a4bf81294b75c55bc743637fb8d16fca19237fb742fb6d8cf84cabb20104f1cb3dc1b4b37f5d1348f474946d6537ffcfcf48eb895fd2202f3f762c58e3e53aae7afbf47d0ff7634a9e936d78c3995734eafaf765d79ee0ed7c5d40c6177eecf360e74efabcb8f1ae2b86929cca5117420935e19d080ee7c207967d1b4b4fcc860d1e16994cad3da386aa4cb899fa3985157bb75b6c89eb567db74cd060623d2f1ae57df39d400ebf380089695b85bf12d87d99268a820fd984259dfe14891a5000c3ea24b4be468722ca32fc5f3c94430b350e8cda0bad3d85f62eb6cf2fb84cd14ef4cede79c9fe370d27699d1730521ca632c1c35c9a836984fda62658c959c218d2eb3f879c29d80e2d3a3ea941e85ca4dc8c743df6e8348c107d6a7d9399862af79b9a832c9629811ee177c4088f9e073a17ad9c11392620f0274f6bc2fd9ac8d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008579244bf7a62ef22103670dd3fcf954db4d7622c2451711d20d1c08cdcfacbf0c107365ec88eb5128b5b29651abb602353f5c2772d05d9dd42836a77615894e97d34bfeafeac4fdf3d6dbc5541759beea390e5b9d5babb415fe3c7534558f6b0e3954aba235a387486721ad10bfad3c30bc3468d04922e8a70bd8b6ce3730339499f777341e61d82349e9b9717f053873afdd59812687899675e500f11b42377188049e731a79745768c02e14d0338c4410189f035fbd266a830617f20d8db861a69fdd16e50f19479169363ee606368ed0c90d2e44955fa8a7a36e8a0cd6bd1692dd4319415cba008def43418d180ad8c71ded479087349b6ac9ad464175ad5b75c7e896bcc2c3d3872e2d4b9af4d34876bbb080143d59cb93d2ed12bf4ac872f11a673934efc2a745c5efc502d01b714510c8bfc593bfac1de7b2fc3cca957ca9023a6521bc5cf2a035eb55a5995c451adeb546fe795e0992a54312326d8f876817d0b3df89e9d2f1141b4bf84312448ea933ea88917f411051664f349f345ffa3f5ae8154a30d301bff8595eb8b66a06bf4f24625efe491d015881dd21ae66c86622c5b53b8df536d0164a20c8e2bc3a25596bd5f832f46b6d0495721861000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025ed2a82b1a80bc62f98ef42378be77a3ce95d3740980d0b2f1e5eb602ea004b2d2b53446939f1167af778df6a2dac21bd5a5e61bf1addaf902bb2e8dbe1b724dafbcfe9ab577aa94d1b29f5a26d1110d40ec9bc5f5d83b132195cfe66217e14f2696f0837a99a2c11ba5d97e02ccc4966c147084e72cf69440409df704bc1ea875e43cfa1a5b80fce69c59e8f02a2a2f072ce1a720bee2786e7baa4a758cf4c3e2041c03d0206399cae5affe7b2c2ccbc5c64f768d6d1404c8cb8abd084fd9831f8f48e22d23dd4708dfa6a02ae185aaf7655a303ec62d14412d069172ed2c7df7e3810cdc66b1df1f0f9db4f0e3cbdf205fd9e37aeb9184c763283ba8ec4a253efbbf8896ed993ab2e3ce88a9bfb0b867aaa1391d713e8d8108f34a0974e60efb5bbaa379d97b5dfeb7a67381111f3759a7a1a50ac36d1bba8a54d60e67d090b7de0fdfe3bd55cee52880b7ccf43d2c217f99aa700ba64168cd6661d0538a3f595e250dee122ed92d64283c517e99b9bdc64fe2e20d324fdbab736be0c8c09637b28474701883ec866dccc7a60bb6471c6c0e1fc73a860cfc74a035d367257cd35ab2110974ede90f275e0118a7ebc34eff597f9e3c8632f8e67e959b977430000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000280931caeadbed349805975f1cc7f2c27b66611f9e438af95974652915ef6b150108511dbb0f9b5c31f3b3f81384db52e2eb3d8a36349fff961c98b599991002b43ed5774adf6f645165c4daff4eb3446bee161532335deb6b728c347b9eb8c30ff734718b3a08205767ee43e71f8b0148c45d763dd89383de99bcc97a3051ee4b70d466090bf2066afe51c93787ef8a155f46a4391d4abb726a794a2c79ff82cc4b1566587cdca2b4fb775be023cd0cf5be79661b2d596d6eb54ecbfd734b73fccf03f88fc9b3446a0c5eedc992c9ee09ae24592d822ea9faf6ee235f6e11ba316ee53ffaba16eaa11af2a9a9b9b3cb4321598c6d1c472e6919ef78468c0a6d4813f50cc2ac8210ac0db712d84ec666057faac6eff64431ed144140b0cb6bbca1ec142c04c5939fc52b82cb5fcf84696e97a93913072be9549d6ad148ab3f1da95c1005c33cefa8d15356821c3aafe30d60e7082040aff06a4dcb67cc458ce0f0fb8b7bcd91f132dadbca4aea7bde90c17c79782f7d2e62fd7b1b3e7fcaceccca95a0cdebc234f7e3d09b7699395adca6496e020525665ce463bd986dbd5666903a0abf59c1e0b1fbead688d47cae2fdd79fa10457315d2be04675156b1accf00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001004a6eab9aa7f125e0a14f8d86574d47263fddf8edca66f0d5d7c62d0b3e120d7c14552ce64e5f655d95b3fe2504fb5b1163b7c211e551e3ec48032cb6010d8379891e5fc83721de7d12fa66a368d3e3f30dcad2976a5ff6e8fd23ebad7463ca56bb544a7ccccbd737a8336458a3342b8854901945b76f20cb190e40a8f24197e94127019ebd86391a050d383e2a1d66fd40d4ed4552a18acbb28534cd7401d3d2e32fba23a2191275bf36fbbe7164e080ac837246bcdd99cb0f4dbf500b98cbdb79350634aae89c9c8ca3a8ddcb1b5c93cd1ea923f670f05ef63bbdae1f7109660bcd8aafb7ae827c806dd97de007d6dafbebc16412231a21c0d6e2570e85c10b9d19fc626de2f52f067f84aa0541dd563c64c57210993817bc27336c9bdea750637b84a4a1c59fac677a05c15077fc3426122b06313501926ea3964680cc45cfa8d6efd7e6a78e4e7c33010775102d41b3be9fea4bc8bc3148cfb9af3e51f0fe32b534520e4814143673eb3d9b08ea2ec00e43ac80d0921583c91a925c62d64c8b5e13115e0c1190f5b4b165bfdb618af87b895d72f56302d5ee806ae9d37d42f5d2c7552020007ad3cd0553b3de283f0863529579719330946bf41fe6f3900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a4b82777fd1d6283eb060a1d44072ea80353ef7a02af1c6d75872e7542045d9b2e41922f4f48017f261a2a937b49daf72f1806a7601c0151842ebdfad8d88233dd2ac250f7b9d2010574cd2b2234aadf3c79a192bcbf71be0871b87aab16bca8363e904ef7ae15c3adcdd1febe921f0fde61fe3501e6550df818ee83d59b1a6b5e8e9cf6e20e2eb9d17270508c65a5ff93b4b7d8f4dd94ec5ee3e2b1628915a06b9ad353e6c70826dabdf2592ba9531207b57b85b5ce16c7c703b98556dfaac05b392bd1105073613528c605bd5ba149fe7db1d004258f7b3334d5bb80b7b5ba55e4b0548c8f1c989a88fad4137371622393c044aed31c812c2b605be8afd19ecc3a6ddf3788db9159fee26378ffb38453bb1b9ae70d6b80f3c310db4286c529e80afea2ed43a0424f1034a65487fed763fa4ec99f2a6977bd4e55d5e533521e836d172e02c628de642547c77d579248c70b3b428c605d6e7f5510d3e3a90b4a778a29bd71b93edf1306b309f014241d2aed297cffe46e878eb33f5c51b2afddd70b02e2c714f28e869ba9fc5d445a038f549cb10fdc621e11894b1f894cbeef4dfaae00980ec73ab9c150830fcbcf9321518e4c5a3552825e3e79d051ab4780000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208e4f06afe339f3eeab37ea580eb084c88a3ce34de87f797690c429226298ccb033fc9b970a896c64b3f093e3d4bd602ae44808c4213946b93f8eccbc92750d0e056a3fe2fd6775516f0e259a7a2453c653ceb1d8b4e1f750dab3403148e9ff649748df2d679ae4664344ea2717166d8070f4619ac00043acbd7c4db8510f3bf29b79de7fee278ae5649780050490827e061217b67548d8168013bd179fd91ee7318e01bef6d56577c5ecbf266b3d1c6ffc8e978081002645431e5e577bae3f1c2dd7284383b9214b56535b70cc5b8addec5144682eea928accf5292ae856793a04dce2cec207a6ab5199c96950791d25057fb18eff930e6bc8cec35a9310bdb95b4c8c2372db7333826ff95df1a9dfec03d36bed72685d678abd865ce65d5cf31fad7183f41753b43efe83080688eabbf9e73f135e158a6c1ebb9e69ffa8320ad562623201c4cd161ebe2c6ecf09b7fc33a931ca2cd7f99ac9741c64a7ff52cbcc50d4307d7333f73eab7060f0ae1a9f9bf2f2d3c29aa328a8dbca34734f71b0ad445dfa829b25406141db41c4d291ae1f25913dcc8699466b4b60048820925d963122e03368c469f7ee3640fe5fe3dc2969aad56856a370def557940d3f0d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f408a79ace6704195368a255a81dc1b6a4ad20ae80d9803c516ef48b8aab43c80239b6b266a82157cec2b73eeb2d5667708d6ca588492761f199f094ccca7fe4448de6ddbc489da309740efcfd39bbfb334c711f5557ce1c911986fe1b140805dd4d66e5a04412acecef94910f053f42e415e856e6643df7bb4217866946b387d99784046843de481bc8372ad716d8f71ede800b6bcc82207e51f12bf1e58dd7f25fc6d7926732160d35eab11b7bbdd31bbb5cf0e5ee3b67f41917d71d53887d2b1b216877308d0eaed4fed344cf98adf25c1f9405c819341bc3b1e4d10ae229797c36fe38e44fe9a7efc436e56a102692fc8204cfd9536d3205250167a05c4676c799e3e74a4dfd0d7356ca8fb1f7f0c5e78d5d6a2abbdaee21a1419a2157f5ea9c2d82d85ed343f86f25493fb8a156e269beffbe451bb9d5f540f814968e8d4ad6627307e3392c4d21ee85a21719c6574d1253a1b9df83c4b071086dbee385b9991567a5ffbdcb315bc0fe134cc7ce103c4c0dda18c9884c5bdbacf0417b39a5dd3b4aad5a000081d47d1e7ed764c0e2ff0c415be75a73bd3e17f31081dc9893dd436ae5d412a53be4f6f0b363bc883be713c66b995039634ea6f4824d92300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b545291d5296e01aa4eef23353dbe1da61049022442fdc9a3ff98276b4c4a24d5fdf54ea9eb1e834aae41c4ebefd660416a0403cfec3015b10cc7f01d8b5dac6ffce8979dbc9e8c688e1e22c0810292ad2711e9f33168d62ca7506ea409264ef89fa8f8420a07de5ec9f0307de0115f5752df35238d1e49402ebe69a57c9c03ab81c53505342b920f6c61754b9f438f58b4b20aaaaf17c706771687b9cdd5a19ef3b66ca2077ea655fa6803abeff977007bbc587e29be0e7c707ac887f7323d05ac534afefc432c0871a64386ed296474c86779475f68de5845380a9027e6a9875a40a146d00e5b781ae43d86dc616b67d35f63ec6f56f76e0e6c718fc5347a113922116085c1fcf9568a43d9c85212f5eaddd8b01aee9404043f96202e5e84e033ae4a281722191f0427f3c35e096b90eda8b0b09c9b89d0aad0c6f75d7d8d621a8d55d08f7bf3d64140aa64a92bd860e2a29bfed3cc63ab59167bb269156290c137a33df25fc4fabc96f7d8db5ffd11d9df5e1a856c803e0b8b86ffe3e993396b905b6118159380e560fb06737d3b89539ef5663777e36762b0e676d8d92713d0713a99c89fe5064d35dbc9c0100349a261f57400e0852e30c650c77420bd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009eef4bf00e14aeec6096a7b618bc463cfcf770796f6e2d971c082ed93b58640a980106519a71253949f6b7fd6da98e68c9ff6699e7816daf4e53666b2af307113f75227a3398fdaf2537567814bb9931d4f033d684a2dd420ded3f7bcaf3dcec3616b349ffef15298e28266a275532bc5ec57cce8d12d9944d3a291702bc69d092a1d537d24d35725162ab2d082b388576832c2a8a8e00725b78f755e1f637a3a444ccc624299812fe02c41e5b4037794ec07711ab56193aaaeb9ab55f32d6a02a244252da03c129f1f2a7d94e7b73f4952d669168c11deb1801004ac1f5716101a93f792fde0a08ab575caebb932a7cb7b4ac183082b0be559f8c4515fb37b48bc1e89ee3291d334295bcdbf58917115803ee2d76a941d1c2d9d53ab0e89f4c94861869b0b4eb24bffaafda365a0d31a51f1c235273de448d9efbb3423d36266ae9209659e9abb98d8e62d0f79b41683a8d3ebe20b22e1c9f3c4853f9efef3d90d6b592d274b813f26e3a4a5ffbdf2963cc87f3bbf5062255d8574e93316c84c3e8aa1902296411aa45d8cd43c0f18cc6c831a9decf1b8c2e9fb68a7c5c35eb346797deaddd75d4856a3b7bd851941492e8b1f60772e016b99af1a76667d899000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023ec1b6b0037b31c5379f1351fc1474601113bb65a17b080298c4deea160d397c6c238b412faa786de4b08b651235470d398dc71db896f6e041ca406dcddb86515622bd516309b7688b9bfd92778dd8a078e74a3370ff062d54a7b2b739a76f15c0067cb573742afa36062ec9795560a2cd439a33e351cc2c92f53bc6d61d0943900c857d2fa8b6b00fa71a9bcee672f97daa984867d033fddd68673a652f4961b800a3ccef9c4f4fc1e4ded0ea7c6a58ba803d2dc3d591420a7ca6b0f210d7b4a1645d6f79c9a3c58d98b6f9b55006c6afb5020ddcba0771b02e36e97f883a7d6484a0e91a0aaf18ce24a7373e4d8634474ab6379dc64e5f4e460329f38ddf7f4decca54dc6341cc00725fe36072b99dd47e6416394242a2eee75a4e29de6cede480605e675787c1691e71d9850bacaaca48651665615c4ca33c742cbeb85c6b8702f3dbb08bfb66d226f9d4f2405b610de3c91d68a571b20c9fa5f094f9c19e51523bc43382633ba180e7fc0af51802305f6bd6b6bc733b5ecc4aeb7c33e3d362363c4ffda6aa5c70afdbfc6f161fc02b09a707170beff9660546b0cb3d9d3e92a9f303ad148f1099bd629a9281224303b6852a190c736a1e24a214a93c2be000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080478fad8d8760df2beb2bbbdb98ffa9a3003e9e1b2f4580af505757f7fbc4518ea68bf8c5056c69e18500cfdf920b55ceaa1be66faa96da61435a9e916aa6f26c2ff8493e02bc61e59ea2fab0de3dddf141d719540c3b2725053b192ff88ac1a8695a2f3d141bf55020e53d1cfd439cc400ebd7fa31a1d4f6a33ddb41d7307281a537210a1da00c1c8002b8de370db751b5789c4bde027fe9446647d388f628cf658cb548f9342fc98bd2520befc516dc2062eb7c048c4379f9a172da1a82f9cac8b7fb17dcf675a8d43c57fb2be11b09e5232777cad3b10eba1578d2581cf0e3ec0a5ff459fce10aa4cb4d3f14101794992aa51ac347262bc0244145facf9f10a0d5b2b4b182b77f99ac2e1f03995e11cfb19a80246c3169af8fa51ffcec4201dc3283f736bcd4440c7fae62615f21604a042365611b07795c2437ada24d2cbe6632a6af246be56ee00bcca6875ce5cd6ec053bbeab933682e85fe2d36bd95e61e48d39ca8fe8185f6051415b4c50dc95673f0cfcc864540a7c24f7ad78fc407d008ee4260255e8d6833377a6900ed9732a57d4d52a65da4944576fd21fbde0f3e891a0543f6454dd0a5f561e8bc36ea3b4e2b5d3d9feb99e0a442b472a620000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090ed6290c5bedb4b8afa5ef3facd1cb74ac1941f9ff2267f9a8ed82b6224026e61f50a8b91bd40996ee4f447b86369d4545c5d9a7945fcc1dcc91a7b130cd1ef3f76a0859470772b24b49d997b9bcc2a06935d548d906c7c03ff2bd93fc51f3f38774e071875d0b3aef19fd3294e5f9d12a298ce44cc08be8b7a22382098579ceeaaf44a54da52ebbc33e35ba3310a02e8c4a4200659dede0e1ed1912f297aa530927b778df69e986f91b970d71f11fe5b2baf69145748b4c81dba26ffd3ac4b12eec4916f7d6adceca5fedea5154bae612502d0d0621b97534353cea2c8c83ed05c334b48904412b6e93581612af21e8c81335301460c9beffb1b6984e21a7264f24104eff51585f4e26554a7710103e4a665c6a381d3d0f23bdbf5e228c468882d45fcb070c82012bda552a7307f6223050d8c7506d8ea360d372cfaebc2fc429d8c1fa3faeb7bdc4f77ed2dcf10742c10011afac9503ccdb62ae2f7f21c6dc4e58c3acf7b9aefb86190997530dafc44b1cf61db2dd3208acd7967c528c2f65909fc15cbd4befca003761f2dc670e47d9eb6087981e9914a5f5f035ba5119b2c9b35b336cf08a47cd59bf90a5c76a32ade903fe7f4bec9b207acac0160634700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008736e6e623cf709b5a9cc24a68c4d91d98821f07a02ea467cb6c650937099ab0ee73ba3c2d2b0d0c52f8ae1b7b7c008ccbc26271a36ec38b6694e7bddbda5622712b643c6163f838e3633fee419b292108cbf6a174c57d5656beccce4cb3f2a8f28fb018fd236bbb1a9735e1a4d3592f5ea150acfc9b06790204703bbbf19d9e1d0148e67356b866cbc7afe40345868dcfd8c3022dd3b9986b56c102f56c609604a4bd7d0377649c90ecd8c92e646e6ea6b8115aa26e347426d1cef132f2b5066b58d45f6612dc2408512c16e5adbedd72715dec26bbbf9dd132b0fe6bf8970c2a77602fe7e9b61064cf064bb494edbc5485994053b86ed3376133d60cf624cced1d997be976b760ae7616dc2cdc862a2ffc3ee3cab66a6accf755dd1d28c15a10f2f1171f61500a9dd6e0100844ae3c9aad2edca80f1ee2213614304a8576f951a4ba622765376cd77372c05f0c096cd26506c8b7e582a02f0cc91eab7ad0c2558461316d8ce3e4c29e56a57dd6137316122b201e0aa2becb4e64e81670da42d3fdff86eb4400286e7c48145b8a917d66d5377eb18b66a9b2ebb9fe7a37ebad227990174241481e6d91a4d98aa57c6a9827f3e12cbbf8f7dc40fb653ef00e94000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017b51a7572c89ab2e1504e5f6e4320fc127ce232a4b91149c67115f2d14e2bcf0ac8dbde1b943193fc8f8b53c8b3c1036fcd44c44e9701b966b6b89fbe80442e287af4df4cc7d12d06692c3a074f72a059a8d2d723bf002666939e05defeecda9882474ce1a306a5e0afd2a3284525daf03a7524c9adc5aed99b909551378167cad771ea0a0727b8f59c40631fab17eafd9a4fa7b8a225d03a0631e97a22271b4c29ff45cfebde137632d0b395842fc2678766bfa924fee84e10db0346606225258d715ae55f92256f2ddeefd4bae70c5f1a204e92f6f67d9b098381c7f16f02d177b16947b7df9618d9d7145b8ba5ec7c3d0f18f8fdc72f5804b6bfc6fe4753fa37fe0a44599075ddbfb9041cff4df069c86b7a64f3283b6b0004a8f99bf5933736837972894b9f9bc670f1f2ab52826fd4a15f18ddc010c48babbdb9f2d38e46750c2a03a2d15f00e3e25b57b76ae8a54a7483f0087f9f0afa4b287d25aae0687000f4d42140a4bbc8d7bdec5b486a514a2e443d79a35784f4a057ae01856ea3d6ba00a8c5fabacf825477c75b8aaecf92cb501decee52941fac3c1d561ddae10411d9f7e1c0359a22f144d1cd2d8b8f507ad918837cfb217d8a0dbf18f5d000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d95abc3ff7b55f3ff1f0c28d6a2f5820e390830d453ec3dd8a1c13c62c7956c14b2a243d43242e9c9e14057a7fd03a23246f4d4f2e37850b10ea09b061da6e4bac036bd25650bd946654778830c90c13dcd6ea88d0b3219719b9becc3301fb3ec8200e8932c68755a830662d547028972055de68e8c8966cf6b6e86bbbd12174a0e3f1b00d31fec7a11e267c2b779317087c5845160d513b5672afe32b8f3c2c8cbc48947c92667a49b534c3e64f483e55263505f233871955684ff7e76581cc75608d120f754634c8b04792e78e81c251b82760d3dc9e71a90837c88c68b2872ceffc1549af4f6be13fd22b9df4a52a954391112dec2cbe8ced33f564d311e7bb968b825d044e7ad240be3f86ed4e40dec2d35c06c28edfa5990658d7c1c97e0e175ed7a9e998454b56939a93bf8b06a65e76b8c5dd24fad8aeda168b30d2211fce03708b1ce1644d56039e3f6a0ad9a1762a669b9a1a6feef6655b14f78716c6c46b4f40b5842637e2d42baf7c78bb086f61717e839b748384530d728a6027b754bf7a0f02c397be1ccd1302e4a05d9c6a5f8a53a79998ea54ad8b4dcaa16b79808acdb8cadc8f1a210c8b8d7d208c9c5da9ab1c1fff97d332f0ac7de962900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffa3d8e3508926b54ca4e0cbb9ee4fefb79bcc147e36036ae27bb87ff1a6d997321dd7e58ad59b6d903362160cedd7a35b8a1a66a1d4de44eab3e594d65ce4e95d2edea139017d879f54b0087597748db6ba1c89332d121acf9d322ad94401b23aee9b81df13e1dc0bf897ce8b6ffef52b40e16b5ee7b59a7aad30fb417c5a8eaa1e1eafe56d4802965a9487e16ed64cfc088cb1c7d55c089ca61a85ef525c35254ae1f5a4061815f0cfae91e4db2818eef2cf295796c8db45ef0d6e3723eb492a98d58e9aa2c0a6c85c3d5b26b8181c80e284df352b962e5114ac1ba8337dd612eb26a01eb740f13b715b7e4a164e81fbb51dfa76cc31f0d0da980d2e0354326fd96d93747c7448f84870169b7ddaaea065aa091eaff3b43b7ff8fbd521926aa6289612ca8c4b88f8d96ce564febbc77a66708c9a5a23fb0a435321fb77a2a983df6d6ecff25d6038d925cb010222e1062419185bfde47ecdea5edf991f5edc6104193a7f728c70a2f46053495b9cc25d87eb6106ff321cffeb48f181ceb695d8c756bf8eda15205c54900c4f42e445ca192e85b8d127d1775e9f312fab968562747c31c172ce7b12375084778ee6ff32ca2b4f17db05a5fe13a3128357d7400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002944035ee8187ab8d7f7f93593bed7b1f4a4f04b968d159341c0e79d349f897ef4cb678be4a8b272018b484d4b42031d7618cc2cc37d278c67b9f78c9fa6c47d88ac2dd2d0a7c592109e6c960fd7d367b193e55591d0712032fdf72ba732c210ff716c5f838eb3a0ada5cc75ace22f6770e2ec9bc75733e796e512e184c6f685643031753a373bc0ba6c5f54ab1cbb3ee9ee3ec38738c251eef19456fef17ea71ad9d6938cc317f48e1e8dccebecf2ecbb149f514285ffe587373fde98d2d13a9f03860a9a5991a206ea57e4a4020bfe00b4d64c3055d0e4f1aa9f62b4b39c121b4f5dd9e7fe6a7dc8d78d4ff8f6a0e47c11b194263d33a13d42fae12731f6815294a34e68577f3b0befd5329b2bc54ad76e39a9f69c9bd51d6a48f8612586ca06a24d00b6131bb6a052da9639ed556c940e595e05619f8180af06f0104d05d463ed6dd4346838ceb8e35cec769a39a6c2ea0b90e86b00692e44b27c071408af7b92bd26cb37db6b7f20543e6d94024a1cd5641a8319c8398c800583a6cdea3f10ace145f4567b1f3cf3769814921524af26f6c7c4c1f714d16ca5a62ab4f37166058b9d8b3d9555927a39d7df3c2c9279a92d5aa658ef18640efe55e7bbaa03000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099572fdd1f79924fbf2294fb8e07e93a826739e454b5e522c76b20dfd9738ce9f8651765de6f1066aed97ab97cd89cc6cc0528303d79b4cc21d07fc75d881e20776c58682f80f71b13c18e728d32764d05cda6b72a99f32dceb579915197f6540f0aa692463c411f378ae5524b5f0335cf43bf259cbeb836ecc011a13ba202599f84298da876088b452730bd77f91cc5a349bb622a56017df7f718fa035b60010431e06488751338c8e3fa5080218c848e5b72405770c52402924173e7eb6546e9e0f7867356821d16a698f5dad4f74685a834530f219437e03a68608e7f7eadf1c21b116e5f6b0660154cdc573990e284d88419bcbf70a9380b039d8e34d07a2da234fb7e7c5a87304fa30966cbe9129523ef513d6d3ed6546876356698787927002f457b9631d9440b27d22398108ebcccc2ab15facc66e2c09bda3e4ce947b9954cb66430af1f16e1254e6d3a2f4f42d2b0bdb6bc2551ef67c7a97b00267f349a4afb77e87ea5f33713404e467ddabb35c14e817aa45624682b796e89fd9c8269ed16bc5447b26adb2a525689a1cf7f38dd00a80d04ac48c9bc6b4c7c5263d4b59033846cd88239de786410915703c1573bb8378ef12abac29cb90ce74d6600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bdccf02dfda9b1db62f73c0f93e23f732393796bc03ccabd13e203cb4ff62a4b5faad7b761890228c3fd57456d2b6d64ea520af13e71e47ced39da8afb69c50269a55663817ef46479cbc0b06468c799c1bad964b069c60bd6861fb296daccb8d7c077acd1acbd92f24b82c702a35da110cf0de8f70ac026152fb21a838143d19c9b426177da0dd3f55f0d319dfc873a7a6c15821336605722a083866d7deffcb7f1cb91478098588dea8daa726ac87c5bfbff37a58b50ed177cd57b947b65fa7115b6911d838f23eb784ba96159cb29a4c6aa848b911cd4b44d6c56dc0400af64e62d03bdaa0ed6842a7b766b33f1d3fb8301bf1d76a8cc8e86bdb37c3d0e1997f7c19f873c53d53d7ba422fb5d5e52f92cd8f1b878cd4a481a9e0860d8ef50921e006f30e35a8d768d30ba983fe32b960c92a42b0097874865f3aa3c300fbe671cf4d7d04486d84f3b78bb607976f14e7e9a8c5f301125563508f966975beab55f615e892cba7ba274b5d35fdfcdf6d04722913952ff8f501aff46310af4bba66c22cbb783a2b15167fd8717564ae411ccf11df4f735a8d6fa20a9f6ffc4ec07555bc32dd4ece49f7a0dc2fbd5adaeeb0836d3aa2271502b1f40bd082c1df00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a826ba8c1c6fc8850fce1dbad5fae3a37bc7a91a2cae3cd25eb492c577cac25efbb33c5c925d41088eb889b38a02bdfebe4ff579196c04284c9e209331ef77cd4fc8b9ac4e0a2c404027f44d899d84b0a7dc4d6bd7594eb4abb61ef4a697ccd05ca88bc700186baa39541705ec375a1c09f4ed58a8de59b4dfacf90f27bc2661ff97b210746520bb15db5065a5df0fe0ff016df69fdf911e8d8bcba0cd945bbca0c590b2d2222d2d0a72e20afe4a89949a7e9b51b4b41e67a885d6e2b8253d8acf706e4b01a3787e052da5284dd865906f8db1c6efb15ed23a27995666a94f6d7923f1311e078a22386e1523a52f398cbfc48ace770663c77a496e3913b11eb2b11d4a6f2d1592758495dc2b31c7a96caf8f5584c547f127697a13645b21cd8f565004540cc97da7759cff9854eb44da31e20348fed372cb93957ef43977fbc663ff19515a821484676661bbbd504170bf07f7fbdde059cac54c673eed7601ea173020e30902b19538bfd4863389e689f32a623d82059d1ec87ade123322514db738a7ce79020980a92064c42790bf51036cefb40fe143a44a322f746b6abd8883894e5afbfe02fdc134080a2c30d17a75e070cb5a0942b6b6de60c0c21e7e50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000149b3829cc8838ee28904e3fd9f86b1f10fe1e4943ce85f4ffc28c99308b644e8d80d77d240360d4d8767e1c59c00daf029031d4a2af1f608bd828692af994df18e5958778bad43980b63297a403ca2efe84577c93c4a11d547306a379b6a21ac5df9edfd0d6ba1c84fb823733058e9683648fc6c8e03cdec6229af5c3490740d57bc446f31046db9c4b99e338e7dcd41bab4a89d3cb9ffe76a3a8b663e73e1073eeeb85693123c3b07277b8b78048312288bf740d7ef9cd0e7a42794734ace90cbfc7429847d1352d2a13aca20497c0ba31dfaa1af408c7ed59369a60e5f2d58eea21c32b11eb554bc5ac9a601758514aec0d7db14516124de805964925a77915d70734053d4e468c4a43146e729128a098222990231eda436cb6b02213dd428ac28c5c7db53ff3a884368759527bea8865a0f6cc4a56ac0e72f3cedbaff23a9cfbe036f0944464efe5df62c45c387de94186c3da7cbcb6d038ce0a04773bd2dbb8267670af4c348f917686a8637109ded2d02d533da907f6ea07b8be6b34cdae0d74f889f9d7b4a7e80523686b102a1125e7fb5b625f9b0cf1c81fc9423aca28c658026ad833a14a13ad66b65b3d633e10939833fc0e303fc2089531de25e30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000194ae8ffe3119a8d305def418ee08c477cee9f9b6cd787dd4312e1dfb1772a6f5a53112560f38144904f65358d8c3cde65b9665054316f4672ab928d0a1e6ab35f71df8a0128b0cb23d94b8328824b303743543f193ef1a4ae9ef24778eca7d3d7dcffcc0960bc395ff2b64aa8a17df6658cb0f62137cfa7187ae13fd19a138bca192cbc5d02a04ce66909f0f678375651c416b9ec1e7aa34c71eece4253d2d21857202d7779e2b2363cade94542551fa4cca92d35f032a56a2c18e1da520e47d600ddec2ce55d556d625722d9f11d30f89b9ccc0a64b4f72eb442528e258b4b4c0c3e26c6aa28c74b5e89b0f0143f07469bd2110e7d97cba042c41c5c161efee5433c93b3762684eee64ac3c1f0c417bac7e520a829cf2307f23a22d26e67a0390046b05fd37c836c95dfa917e6b9e1b42d5f9cbcb09ba342eff4b4e24c78088eb598f3e1215927c5685b08fa40dceb389e882167df0102e1b5c59ea174ce70a816ff5606282e44cd958e8be3bfdecffcaec07b6c7d1663b89cdad9f19620bb8580d37dcbe718d554cd06d7925a4c6b59c7d6a83290e7b8b4af6f00534bf2ffadcdb757d34b9dd821157bb13c485560b9dd1a18ff4e712d4628f60e4f0abcc3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024f292a8b75a653b6ae4120a154861e0d22dfd3fd7db4becb8181286c03bf925587e66ed6ed72236b6b7cb1c89f52b5d719dac3a73718023076a2ee30704e03465c2e13a0b1d876c0bea615d3c3622ff5b87a2a605dff4a88a56f4a0c9824264486f80f48ce666380286c389227431043bb73e89bb599c296477159e92ba19d9372d751c714f554a5929ce7975386d9aff1db1eac24fa27f16b01319329773517e78f747da16dbeb9911e5f5c90bce9661f823d96bd90fc06d903e4560d74e268ce611284628e83f9569c34e60f44940ba19e536fd94d08952ff559555da042e7984800da2f78a43082799830cc42e32282cc176dc23bcc4d09f5eaabcc08f84affdbe6a09f4d33ae776170c090d85c6cfd3ba12a95a33c16fc8a941dd59c4d5f68a67fb0cb68f2bd17e202ecf9576a469b5b785bf602b547971f9ea105105ba1a6f3223ad6ced93a61aa3e81d9dea7277046cc65db047bd5f23eace9062d1eca12ed0543ca50b9b8bcb7fb6accda574605930fe495927c59b5fc7aa99384701c6048373ef5202934c8db6fa7ecfd48a3907ced5da400100a3faaf5cbc38ca31d7bbdfe1da5ea17ebeee9f26e181d96e006e1a1ecd9de202f7abbd1f3c0090ba0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9e1c12a1670a783ffb41636e64e00e5d7842a1852c3a6e095eb2d5d195c8bed7af3a5c64dd5c00b1470f8ab15f1295d19947e65d77b72fcfcca5998f2163f9757280dc2799a8ec9cdd57c8839c66eb6f8670d3a6edbdf1ab28a823ac6de958ab9db756106e558dfbaf160cb05df8b977d05ea9af8e3959f480fd7d29b023c110c014e9b21f6d36279139491c4ac132ced36e40560420da7b7dd06d9501192c713b85862e22e4bfeb76434aca1ad2de10a0b2ef84467ee18807356082ef31898317194e31fd062324016ed2ba3e4d0093408faf48e10cf86fb14e0b900dcd87c4c9f0b47badd7724189bbfbe208f7a2b9f981bbc6ad90f2c803fda5cf3626a4ca1f120d3ec0e47e7cffa1fe292fc454075a01db2a580cd7aaeabfe58978542cc63ea0ecc4d9a7a7e411bb5f8bc69548d1ae5a61e7a19567443539113070fb2c3ddd713661e9bab67deb69d64a7dd7de43b37b3f2045175d43e90adcceb63e2188ab856ff0d7c78c57aa12a2b696d97b408107da807ed47f435ce7ac45f833fc900fca76938b3db69c5854b571c38218e6899cc5f7ad2d17b2246eea7081809f1e1c5a5ab66e101614f72f285e209dfc0aac079c38c9c8708bb60d02ff0a1f8a40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad01f87c45103a44066de398c9b7fbe5786d4cd292a8f1bf155d068119e8afa750622243eabb6ee9c4f56c9b7abd3643c5ccaf372174003cc5af39370bc69ff1d97270d327e075fe1aba0882d720d8ac910b70e528144adcfaee563c14059ef03ab064f3a9637d79a7a65cbc2af1d3137649f8f01bb34603e1d826921ac024dd37e0eabfc4279a30d71ba2d1382c7b0085b2f9ad03a0cccafc58d4b599cc15514d5f4f3a6f1b8d4ea3bc75c9d79d2fa77f03dde9e628e62c2f48af34f379084509aa158fe86293fe435ae9fa6e71ee3bb78dc4ded86ea151c0acdf361b437f155bbdcd0df91d023e58e56e3fcc64c586142705df7e2e5257c604052948df6c8b3b6000317de23ceae1fc6df4333dc447425bf796a3146b4383bcbaa0178c77e54a3047fc21722cc6bc21338507a445efad277b87c2b2a5a86ae9dc0a23b00d01d2bed10b2304be6ebad7b2307707f9a896c569da752e67d4fb5f40173ddbcd788f13627022d98c204081a1642a401de18f09ffb72d223283bc0c0880eaecddd6f2ac356c6cee2eda0f0b72cc09923e04804e50e82464ef623b109304eec8ccb0b2bf86fd52080241872f73488189915636272d9ccce404a6a13a93927ff856980000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000135741064685765cc992f1afe430158a4bb7bc9a7758d9bcb3152b7419924c4708c7560d81808dd2d71af0263cf5890653e6076f8cf665b25b2c5e33de6ca2a05f6b66b9806d9da678296aea890ed2b0b9c5e08f7db077b31b1948d6efad3221a5ed0b78e85e2b327fbdf0fd3e1274a69710ab42809a9e67226abb91f961ef523b7cc204fad124930ffde2ce7b005a2097b77e76a75d25f5128ee6d93a037aa6f4492d809b3f74a6adc558547264e8068c00f8f23447f0ec6d3fe3c4b96d8df7f6285b217f7a59c4b172ebb613fc03e628ef4d944f94029dce574f96ce2e0c83327c0e66d514e4c79ad1a3ce0395240631baaa592f7a91965126255458a7ba6a71fc01ca703b578724b6a6738af452e602736e64fd33f1e442c199c3373d788f0ee6e30ee5e12f7d9feeb7017199d7ebca385148b38302e1b058d5a71aa59bf23fed0ad40474d52404b7ad9f3e0b55b97eac28993f7aa966ac9d8d5333ba0a93994e073cf67fe874966ea36a14f28f6430c8028ff204998376e17c27d28f5bbf68f92fdc16c86633a850873dae3487184fa736d3860e086b5c7a125ecc2f60462611e20325800558d3187a4c098b28505a6ed02ee5c616155c4c528b2b44882400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffb199e501529ce55dc8110b46ce533431bfc005c103ccf8f4ca538b0749d094d0f225be8527d32c4b976f9efd5529c9afad099632e9f691365b887ab4f10f09a0d93f6a42370ce8abe78a96735bf51b854d5b02555467f1d9d59688216261e68faa9e8bacb627401f594d4964c1723c6ce9bba657028c801f93b41f60d0d2922add5efb0025ab76709cb43e46469743ed49cd67f9c59281fac92f0c13d2632f21b9f0f63ae332cee8fc19f7a09d7e70d96d0599b1b05548edbb7c48ada80cf3e5b623142d26ae15cb47634745e28af2b3a9bbc4bfcfc1564413f61734e92af1ba35dc5c93392b8c583e4abc8270fc9e8ad61e1d43ce7720a8f020b01af1986d0fcb44e50144c2c1dc3a56d46ecc31b6d0bbd06d4cc3160b489667f19d120cbd0829bed164a2e8d8f69b89807a83f0a486930a735ed2464f60f963ad8b61b65ff51fe5aa10454abddb4b5abfb351679fc12eca68a0adc1bb377aa86f19810da97dacee1be9bfa27bacaf4fa2a2fb46d6a78f4d9f07921f07f0425b2588d6d2facc29d2da2a28dca43bd843bba67751182a06e1d17ab0654970c2c042e0087bc8a30783432adb44d919848f907e182abb0188731f012de563c4205e7beeeb91500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a12244548ce428a9a09be9811f8220f6c4887119067bacdba8957bb6994c8a4c8e695bb5906522c595a172cfd0faea2bc1d4697b209cac7e77f89291a14386d35225f733f4f87a53732a3ae886127e6806bd0580a161b9b840abe1722384f5cab53360d1e9eec010658a657f65445437cc1a1a849d9219f735c8940caf0910f732381aae8878e7de5c29fe49fe6ec44538d56a10d0153ff1c88c90ded24acaa3b7fe2d31f16634891321fedbeff707c9b7490491057b1efc608ab4539a5b1f211f8f49a2074bea918964e73ebdb1da2426731159f408c19a6f840c6470564d9b5d44eab17a266b1e17dc8e7b6357b8ea8a58f4a3a7630e1241912633fd28f5426cfb56ab77a8dc8f48247bb4b4e5e28214d80d0a14815c9039bc4854cf446e8f9eac9bdbe43d0463f142bcbcfc8d9e34082d1b77017d8811e95cd30f6f72aabfb8ec3b8d4685c678cb19c8177eef85c6dff774eabd79490632772b5a330802c57ab8801fa861bc6b7907957c145019a072da286f4d05716e62cf5624d474f21b744e4cec771679fdc6ab30bebac12417ab679b013daa3970e28455973869b3f9a4542e048f221cc0c714f7d4c02cb8cf382b633f23cf5509373f1dd8898e40f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c63b18f34cbeda3cecb4b74c0816c010baadf4aa9de25f59b6b8f1a7c6b6160a39b6d0d8c73f95e53da49826918ac6325660a7756ea6a072eb666cea0f77705241304f897fde0a9877b65c1f7e8805ebddd025ae1b2ea999a9a14ffc4471b9fc653fe4fbfd8739f3953d9df7cd802e45362e83d08d7b09792baffb47ef248de3f1a7d72ed59f7030abd6a26475c51c7271d221478c9907508340a5bade72138fa5f9b777ba0b7a24c03bbf2fdd19d33f5c41bed06e0bdf9e816179fc06afe8007858d265812d6f358f4fbf708e8b4a2086967de6eee97ac423f65a3ed5c1e0aa0317bdebe0e70587291d219daffede6e95d79ef8c381d2bf7f03cf28bbf2e26590f91b11eee166f0f2976a037c306933b321d28c15b625e44b342b07e4c17704fea82df56607b4871caec375aa81310aa7844c30ea5ee3916c63e99d2392b034662f1ea7a3ab429aecbf8f5d668c7d1c663add7a8bee58cdf43868ea5d08167efd17a37a726d4b3aa67417dbf9875aa5d05c6a609ffa11ffff6baef5d1099accd625ef1cf1b4e09f28a41b94aa880a3ff10bbc9fcaace8dcbe9cefc76c9d3a9c73971c75f9503db78f29796264a7a3abd2c89fb0cae775d27681dd31200cf25000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090e00c81b0ecd8bada337a8f8424965447e9836f1ebc23355f56e00f30ae8acd8afa5094f7b865ebd748712baa9df0bd7d6e91d4c83d52151eff78ea6c5f77c23dfb46dd52c8200b29268beafb60f0e2d1996af2ebf6ff242e3891d490aea474b6f62e542aebee99ec9ca9fbcb4217fd4ed76875f8c3d261807e6a9086d66ece4e30df7227e0c0122cb5fb6109ea4f31418c51c84c4a67abe7eb6af2dd2dcfc9f0d5c1c1f8501c276a5a17e0b636df1d79ab930f83d70b420c580e70a21af8f584686391c004d8ba4c8e3a7b6b24641b69bcffce1e1a1eef241b22941fac7d3c915a3c26ab79d5bda0e8171c25163b87ce81f94fd22ff74451c7c2b50f11eb108890bba940b62197a533348bf825e580b89542ef973b8318ae97f0d3a0a78660bb115687f8881c6f342f8c46276a430f1605c66d0b0c5161119f6bdbc6ea88e787ac712869884a6975e20cf08847428b26919b5424a259cb36defb61995306d37b23d2eda88d2931194d6dd42d2d63dbfdcf095b4ea8790f7ccb7828de3976cf759ddb9f53b1f8815c4d9790cbfe8778177d20cded91951784d521e88ccdb883a39de4421b6e7efe96673dcb909fcdf5475381ac3edc2ef3ffebf6a765c9fa9c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e39e3691eb8658ddb2e4ba59e2c4ba95a116d0a46da50468039c8956e2a02cfde626c1432f266bd86ac0f95b313e3cbec4af6330d90e2eb8f5dccd375f79f817822f3160728ceb5ed5e593a0fb419c0c92346f51700f21f2426cb8e5d2b6ee252cb46807d2ba1908001227edb5f30a0962f68fbe6174514a7147c79fea3caec764de82efdaa5c3e146e1ba89186544c0b63ef46f3d5313798cdf5f75b4aa136bfefbab0203e092d4473091fb63e9940d1571818a71e009d03444104dce41e4921b1c7d7d6cf384b8dd6261a892f10d93bb5f1c54239286877305d8bbd5bd62ab00cae34d49d672995bbcabc9e92d78e13f404c3c64e374288afd9db0ea5148a8488aa428378b6a7522fb040a23ffee45a5a192d3b2e5a9cc5c5101aecd8e44024d6b080408bb49b98bf11e7aeb173c0292c27cec26ddc7531d9f9d837c6b8045e9364eb7bc92b74c60ecfc64b45a51e7577b194bde6a93508e329c4947565c0d8fb813cb7419eee79c5527a0abee5ed3d864ff39a0e7044fce08803b25f1c780288244841891a521849600d05d36743b90a4f41782720dc4f23bc2ed902dd112360bb450267e6d7ad88e46b01bc2b40fd55854fbecebcaa9cbd5ad427d6916b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab8a7e324b254c12148ad70c9e55fab4300fd9277a478e98395de523fe91a26e6407b99f9822129e9b7362597a5d8e2291b6497e1e8673eec5f1a0049bad39d87ef04b5dc375ae078a48ded25d1b91a60960190368fdede945ff6a832f426a3db2d481cf4971093376c780ed10fb5a1e231d864ea7a26450b8f214cc69284a7108237d19d83d1c0024f43076221925fa2ab63ee4835060a7ca9260cb9829f46a0bf2b33d0d04513963ef35f7ec9cd6d7a2744b19583b9c7ebf8661456e7bba73881fec9f7b41a76da083685cb16e0e99148475374b241400553f0a1a2c173bd9bddf6d5e53275a229376e7d9b5314e4d7aac6f95c98719dfa3288bf583a7741ccc50caa8d88148a549aa61b19c1d6f6b39002d869147800293096a4df2c936dba05e71919d7f904859fdcb3cee914a2edaf47959b4bba82d4cd18df15f044bcd1906084df272c6816f11d792108254b4014b5f540f5305167f8c8539b11d1b4cc0b1648103393dc71a000abfed85659ea00f6caf12214046ce58ec1b7e87531cfb705fba7efa7ce11f9306bd0d22f2b97d5e8815037d931acadace0e33ec774b0227f30a54bf912535168b69922665661af40829156d8fcb2066ea24c4b398b1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085d27b5d50cf4212881540f49cbaef2827b2425fedef8bf92fa03356b86e28a1e53ab2c569e53e2abce85adbc1cb85c20dff076b747301dc9d0298ab2b83b7f872652628db3eb47973aaa11857fe1415a2b2a7092a10bb9149f18cb03b20dda7fc0473b5298f9fd4a4d2968708d8f12a3ee9299adda51e4c71a6238a4f03482d20bc42042687cf5e66fa81f8a92bb3ae3c0dfe7cfeb79dcf2fb908a98bf9a5bc5879cb0736bd0419ab52d6b3c789d0e07ec4a99f731a71f4fd5694a566e89871d3c6a421c4dbf757b40debbc8afef9b69d23a6704d1e96d156e046ba1cbef1a1a0466e3632072ec5810e1942ded3650b6a5a612276e5ee44589cf2e1a7389cefa4a51d94f1770647af93209e389397f8361790a66ef5f3427742ac6a6f6fc3230c69dca7adf145ea45dee080f31e0ace18546890a26e842582cd1d64fdc648a5c515ad1e4e20386c787fcebf79bbed9fa7ff4accb9a162562bc58bb3bd93c4b7799e302c576712376eb2c88adad7a28f3ab0ad43075212f7122fcd35834a33b3c147893eb69e5f4fb721fb67e5ecc8a5ec13405e86a06e292e406c3e04492c92212f0523a3f54f459da2a4f1f65c876a42c8148e0f36cc77c3555e4e73395a8000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008035a3f87db7fb1f8aad688aa99c8aecc7f536754c783dfe8a687007781378fd5bc100d4fa37f5dbc83ae6ca99cb18591d06205fa2d39b8c663d484d4fec66ef9e349db05cfb00356dbf6ce97a0fa4eeb01978ea3be4aaf32ba47732811fee355ad75ef40edb70a7365ade8fca472efc0b9eda0c28924a7041beef1f83f278178235ae16b9d40f2494e6c47c045c2ac67687899622b439447a8ed407a23f9d5141cec3cab93cf326ce7ebcb152954fcd7424b5650e0ebe41f9714c977251f787c3380bbd8667fcdd11e91a6415c8456f1816b19dfe93408aa77dfe261292dce152a54e6b73cc36684adf1c9571f0386bc0136924179da0afc0f9c045f394fdfb5669d2cf355b317b8b4fe06c09f9ceef29f382bc7ca593a91cce37994ae5dbc1f05d9d5c5d2786f21564aeabe9f1c293541aae11cd3b50d5eb5057e870b38308792b7f67aeb09aa97f8bf6d1b63e3479ab065afd202d00291a7b2a204b525e3296eeeaf4e638c7238a6358a3e018cb365ab32a3fe2b99777830d79455dda34046be073b687805e2f009418fcc9b30d995cb38b5d2c28cc1b7e3f2c49baef8b283ea3c534b147d225bcd93861fcec7cc5e2b2f6b0bc47eb35c9f5640f2d53e82500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009601381c2dceb2f3c00524d64524184959429d15ff4d1fa4a75075948f47b4625124051c50a28c97aa48c8066ab5baee3553434b096988b5e9837306c7f26bb14c0c76e514ec12c05de70338d8585814970d5cc4da2f2478fee7d8fbc6f7be90d9734bd4974826e5891888987b037e4bd6d5681d8ad3becac43f911ffa44736b9222850fe518c7f3cdb63884c0bc5211d76020ae62c10f9f83022aaac11685bb954b104a2cb513a536b2f25ef5c9c0a52c0b2aefed4dc74fbbb7817e64cedf22b1409bbadb537a2ee65d6f68689588d9d3c8d74fff3a5aaa50adb98ee945502c528439cf1731a17cd7954cf1372c77cd96c79a560887f4595dccc1363fee8dbd4c331bd362a316ff775677b50474c1bf4c43b8b03a3ae6890968fc0e55e410686939bac2b5ca14147fce2e28dc50b0de2247334203ea7df5a6e6fee7dd63b47038fdd745e6a88be001141c103c08e17abe0c032c6abba1bc1f41bd37b579d6a5cb8723906d51f9e17f6198be7760265c9cf6b2907b20f828c37fe14bd17f09bb908f721c26e2c649343c27d01b4f2d2825148a1a3c0c13ce926ee4c82cf98156815a3df9e0994fc2f337a98d7e518aa73cf624303de3b976bc18720dbb52eaf900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008dc9505c3a51ec985e07c1fb4304d71831d293f7ca9f915df871ede93911a281c9803f736b2273140c6c823f17b4998442c0f19e8ffc1b0c58f92653ffeec39fbece885e0b9bc1d0437e7c48c7ae2260f95dc04e89ffd10323231587f663bebe7b1a0cdf9f5b7def70b1e3b3c11e04f05481bfef46cfa972f51109857e052743cbb47db38f85f09e8f235886ba06130f19f387842c0b8d125758a53494b58fe35bfa41180c54422f2fc1de4e08c309447886b0db36bbbdf31043135d4b16c2dcaaf29737a972faf7147acdd13a079703e0978093f2cea67fadb3245ec3aef601ef32f253239917521f5c4dae954260bbb3863eef4e3543fd46d6eb8800a6261d7cdbc3d69a42244bcaf6c1ae7db3d10c37969652d5f36b91251857af619462130bf4b8b2a23ba175d7c6ff6101fa47c58b9121bd64214ade0cd22df9a9a8e8d0cec720fb9f61954ea17aba4d104c6a8da203cd54c95f5a97c7333e2de4130deb46858da4d3ae7d5af224ddb134befdf5e0a6d1f155205669edb80119bf25d86c6091b6beea931298aa685a5b6ade64f86212f7c7d9334c31d7bedcdb18b41819ecd1a6d89711bacdea988ed10bf329138639fe274c4fd61ff6ce914fb78d0be00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000272a9b864b6e7172af6ba15ce137e06e5c0c3cd18b10faa6b70ad11d70d9e2190bf09e90f376c25b1183aeefe9b71a32a6d415071aa8f5ba0383ae9a87a0979d943cebde9e463ecb4f9e88a4819b3976cf35a30894070085b863db6a6a73e8a18a3aa84f8b7f6a27521bcecd59fedea3447db2da5bcd4ff8e630aa6bf8d8a2caa1f46744d906c279baf6e7ace02f78f16a67de160de9c6dff7c8d67d73813066ffc52732b6ff5d18533f75dbeeccd2e9d098ceebdd11c4921003a26ee010a3f4491574cfd08fc1d7f07843232066a0ab836a790cb4ddc0c6caea49e622ebfb2bff505d7d833b09a97888b522536058b0066adf216068ce94fbdb289646ea1d51c1d8e27f9247974ebe811ffa555f104676b52af20ecb00bdbe8c163691753afad2f60e11a81d4b23c043b84def9f8f003829d2bb2808c80007e0f859b52474c915f1087b642faad607edeb557b5860a86a1c595e184f00e025bc3e6d502943871dffdb36a32507b6b26026d8f469a0aecec596d871683f9649c42fbd7a532d22c72399dbc18a9eaed23939bb9ea50b5c6482ed328512732ee6f858f3cf789686a9141b78e5704096a2d84799fc81c0b542ddf515aed1bebc06f1396e15da56d900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001515c3e2c7a8370b2ef06f084ea80c62619d36c1a94f88d97dde6a75eb5362af318838d49d21a94a64b26999730045188dd54c85024b66451270aa85f13b5cd2c08f182b0ec685a1de5a1f7f80fb3406a5a9d2c732890001d397db3007dbaa707c6d4ea351c8fad9909f311fabc37f35ed1acccc6bbb0d51ce97c627cd9113bf1aaf63e3f36a57133d22fc96b4944b120fe0b2ba1a573b3b2e92c3e6b14a0ce600775cd261ef1a72d85b38403e6058fe59537e77b071040ae7d999e63712c77eecd96347e3792463473229c5afbc0afc5db4566105d5bffb77227689c2be77056e17efb4c69809cd00e754477a65a09bd6e356e4cefb5a62d37f4b4fe6d44df23018a11c2c1e237ce166439abd44f160902fa286355c76c1a7f9599ee98c296d3fa9b679ee694fcad8599caa58e17218f1d79e3e71e8eb02a77654b2473abb95fefa42351b12240ec74787e98fd33374e017424b20ee974971107793f5b8d01417b38e5135426fc2bb4babfbb3465ebf69048e226382755208e9382c5cad6052b72be7db130874a4c3b4cb381fe2f21ac849cd7c61c620a9dea163b8de69920070db9435454b6c45424e414974d131910c1a071a29bb559d9ac014a1719c705300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bd7240dbe83a826f6e4b5655642e1c53e6a651193408f2685282bcf89eba2cafe4549068f1d99afc457376925453233354259e5ab18a89454286e8dd8e8f0771561643a7b11164bbba576df978b7a25f0f5d437415fa31e7b1da374558e8a1fd97571dc979718a3cbaf277fce8705f3b13b55cffe2c155fa7113639e3c2e5515e7dc5111fc980b6bd0404fc427fcc211cc5df2f5884b662818104b78000ed7f6a63a8efd9c8d992fcbcbb924f8fbe51aabd272b634e63e2d789dff026d92693874fdebccb6d1d5f7b70601ddc7824c65c7642e7fcd0cc11001ba1162803e1624be7c2c302fc97694bad5bcf45ace79ea113c865c1db6339579489d57f61493aa9220d2104700a687db580fa8f023e288cbf643ad001e3f8fd2d847638e726e045fa0f9f5ea3b82f3a43fcbac8297f0bb2c1913d3066c0654d25d5e8112cbcf60dfde7f46b36a8d44d1c78287ce3e5d429572bf69499a5a93ca6a97de1e543a032afc3f8e69511c0d2a14c70dddd8a319f6dcfd28f6117df7e4ee34216cff5dac7f44fffdc97c519600b96f82c763682a657ce1a1bdbdfac0aed57b0d29b34795aa15a666eccb2d8ed36cfb9dc80a4decd3fa3368c77338042d9d3fbaf101010000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b44d1590e8a6d690792f8bbf7bf3449da35769f539a3ce0893505b76d6b4981873d5b218b26017b31918267c124b2f1311fe4aac9ea7310fe65469483c7c150dc15e05e25c7996677f4210b83cb3e653cc86b406b85956059a75fada1d04cfd769e2cf16874d1db74bc36e208baa83c412dc62dff87536aa8abba441192ea658b401c42a891f34e0378227b1844988f0c1ff1fa3d762ba98324a3466cb6975bb00dff04719bfcb3229b399924d2576abf9c2c20a13a3dca0901dbb34de21b89e51ce36ff1dcb0e4e0cb89d4c075c1a757e49ac14547855a30bd6636c895149af6919dc5de4a84f51b26d699b5e8f469d8a7f6c403bea134562561e528f83a471f85de3377ccb46619195db604b342c1818d5b683045148bed8f4d71cccd626b061c6cd0f3395fa0a9a128e983c915e403ffdf496da2a3615e74a2736583d170f10b5cf0c58fa0c0729e32eec6a1f3c0f686ac1018d1f00c1360606ed4ba14fc8d3b96ea9047430ddb99d272b05c7481230c2bf580306b1033ebef1454912070efdc02a2c2daee6cbe4d1fde9364afbb78f6c8b912aa9062975fcf580288614e5414319150d6b7447816fd2109cb63f28865e0648730368302065bff37d6f1e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1d0fc65812a6469373736fd12ccbdf930783e053e7a806a90f31ae2de9c01b7c96bb95e1f57104d2bb636f84cb0fa8e4523cc2dc77dbe72da6efe20a21d875861bc044f29e62cfadc6ce15078d33dc588fb5d2cd61da024c15343fe884ac19eebb0ceb8960aec7a19a510d905fa8471de64cb19e91a4d06f0523950448b6af2b74fcd1b370c9e24e232c3ab6333fcb7656c0046f9f40a6618679635cf0ee445fdbaed56756ae570bd82c294c292f5f0995ce1709d82d69998fd7cab6d7ad9c2322844128efdf84491b62a41640ae3e2cef6ee3b8f1e9ed5ce3334bc1877032f7abf53c563ddf16c9c15e23fcea0f7dc0c3e77de5523b750bdd0eef4aa586bcafda909f85ab387c5339e575857db11d88d7e25afadb2e7db1d1a755d89e2e76eb7c3e8741cd9566067db57c2068a60d00cf8e98245b8626dd7f3ae2cbb0ff8a195d312de5333269f73380b228a2e437532a95f79d5b20596395eac5464b9f2702251f900e98388a3f9b70fd1918e54d7b58e61f8fa0123e9bf9cd948a841bc35d3d0fece99ed331cb55346f8517a77782962b9ea1c735ea67af9370e56cacac3e4f12b9fb6e39d2bd140f327929d09f4f84e02a3ba8e8bc2ed48b474f81f9f300000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101b064552d1e17718d82021d72481b266813862af071d7641623eaa362b476b644c60b70af8d410fe2d58dc33859311d360b871c4a78b8686db5e746e0682eaa694fc129602af460fed1653d3c8d96c87ba1a591551b0a4edfc3eff022e245006ee8161455c675c846fc618a67c9c6a5169e413b43ac5439b5c1c3592bb344578f71a9b01e89c5c045881aaf856fe85a9e95f15a2f7137789087df5640ab3bf2d883a865b1f09a7b00ab807e9a913eff270cf1af47d00a9fe02287e8f4a7a5f56b607129ad83066bc952b579729207669c897eba3186f4a70fc9c77647327175505fc424f84bf307419475fc4bbee87e6d10bff495d696c789487440fc28a7e07a4b52d404cc6e7848115e3e508b899ad2239fb67ecb39343a44da777369b92a73059115bcc77033669ef3b8b0f22db056fb24584819f2724f53f315101e84a22d9e9e05df04cea1f4eb1c66c6da4bfdb464b98741ce81396022560225c429cccdaf373c69ee08234d5c6ea262191bc15592a83ac35c6f4671a3881bebe435eb91cb1164e0a12cc02441e499d0d6edc434d0971332b1601ba6034a1ccc09cc5d7d939a5c4120d2ba4bd1816b13468ff2c0af8768120d57a4de2ee2322e950ef00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c46b664de4493d63f3c08ede1c4639be40e2cb1e33071c9713a11015ee60d19b483ab28f2c9eaf87aab40081866c76dbe27bba626049e1bbd68275cb48c2c56fcc89bba300cd61fdca26fe31c54158a0f42b148b2ccab3ce2d3e28759dc2f11baac577fbe9c13f7450475682b00b8c8a761f8a10bd78d696f0953bf02c7610575b598c1de8a5e35ac7406d817c55dd2af8d64cd3df608bb7a3ce0cbd39498da2d938d3b937bd086ef8cf1710cd9af70fa8bf8b9a61c0ebe48f4488293c55cf494815798151b4727b8486ae8758f1df85e804711253e34a7b20364e3890369b0fba544892b180a7f9eee256ee0f36ba3d2ca635a1d07da73d03fe58d0e3282007b4c684224603f02493fc5b3c66f68cbcf04a671237798edb8ee879579fdc4428783470778ce6887e239ca87bbdd73504e2f6d62a53f75585edcea6a4556417b88021ad939f8abbab042e9ab02bd17bdb5a55981d5d3109bd63585fdf474393ddf8ef5d0194d15e97b06d7191bc59a00a3650819426ed2b4aebee63417b98962d23f110ae0d92c314485f22d237f055f2eb36e618e8b57b3dfb892e132facc12f66541f9c98479490e5559ab197ae20d0654ecb5e7273a6931c4f171e66a62050000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000910a20da3a7c8dabcbd3dc3c116d03d5b719c400569832139035f58fef14c421fc4091c42f93d8cdf88cb5761d2c157cd741dee6d89f78f30af915bdc403b92025292a3fff214ce8c642ef4d9398e3e6e23234779c58b119c26426ab453a746f585a3d244125640d277382d3f33a5db3fec505eeee023ff65e227df1d740bfdc2ee2796d95df0dcfc766811a2845c5bcdac36396ce61ad3fb276f2bba3c23c58bf8a09727dedf6ff172e2d374dc1b9addca2eef4e70edb4fdcc4520a0cb629de023b7a00964477ef7f3ec58d53d8f681ed66f53ff710bc1f8c75ce3bd650540d4398fa51176aeb400b85da18f9fa273c772c550dbce7c03f0a5a779ba3ef161d80cf9595ed1b88cde76dbee9e66cdc4797f601e32fdc41b50d1e597dbe8925fa73a511ceca07f10cc3b0e53e8e290bddafe4d408409d712e9867a436522042b925756965082ca7e261defaa5a1a76d5052f645eac4584cca2d011151b9e2fa1e621b75c43165284b1950826671ac42ea738ea9be183dcfe9a51f39088acb00cd09f9ea21b62e25e075c8fb83b550c041952a7fa5c17e091cd3102fd9a631c87a4e484ee0a3a82d140745437e6e76e818cd7e65150befbfd35cd38b072d765f6700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000462aa46ae216388b111ef4bdcb8b65f7d58ff3ff00791c9f85bbad0cc625d51331a49156c07efc1a893431e31bfad7b8d5e41a1c5043c5226007d0d6c19ab0f80258dbd50e4a84d418c1b71c43fb081b93137d5a3656cb9de922f42a98550310a422f06db33b5cf074c5eb2817da755f091b00ab47751b17d4102da76fe856521fd1adb77d6e50804b1a4780b38e6cd40f1e017a539063f55ebd9fc4338a4a11a339e81adb8947dd0ae7a57bebb4d0337f4064d365e337456b83f472f547cb6e3844c6a63451e50874814ec03522bf56d42872883230f17d8c9c29bd00a6ff186d7eb92797861103201c853debab16ef4c8bf350ab6d3ee88ab37a1fccdbdf4cee46f1f2adb985c84a11b7dfe0bcf39c9317e32163bfa625dfb75db8888955b0b8612fc2c30761a3698f403feccd3eef28c0f3c80c0751ca33cb698001eb916e2edea98e51fa9a283ad1dc22634a99b87a948faf13402ec6103064c5f029f9c530e18265ff25ec225f1faff1529d07d8153237ddd71c54070b5bf03f3742ee64280915c121ad33033d78d0387d702eb13bf63ee6d8281a98b87d3875e2b887d35ac74ba6cb1b542414306d4c22c197ff1febee15de5344dd0c48833d71ac94000000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48402662748312a11473a0d08eea953a2e706ff6d8f8aabac8388a99672ab2e8b6422375882a2242ef56a06a57ae86fb61120b70f2b966a0508d74b56e035be90e48186d7a5edec58d6be834ede7aaf94eb359e8b57dbe77ef2d6ffb1b50bcd00fcc0572e53b617a59a9552a491030ccbe1fb98acdb33874fbcb89f3173ca60da4fd06e8daf4c068b7cfc148b6d1448c1dfc941513bc2b9d2c3cc64d3f42748e72ac0a6e7a69ce6eb0df44ced4fe32bab4fc7276a43de987c43fb3278cb822f29a7f2889ee1a5df696733e40dcfe77badcfbd47fa2157a3cef7682e9520f68a0148f29d7cd48cbebad0d1b2190f44d8b489f992c3759330bab6d43ec2e2f95d7d191190af0f84d8821fbc8bbd4014303e3cc4ac535c5c5b97ed9faaa42cd02ebc4ee193d9e4832672e8cffd3de39605dec7859ba829d508592fc399a8456a6b4953b0d0aa8fc80fe11a93fa56d2ea869ce76bd1be4c9cea8a10c6169d85303c1851c13c70d1433c45c7a9973b3cdd2c016b2617d3bff9cf4bf26694b896a97f3b6f711b253e0bd804005f5a33d046a17a5b74597e6d33d96e047092bc30de5ee43fe2bcbe128b0a5a6067c6aab7bdd913789895e0adde9fd9f9f6e657bb54e490deb1063fbf6f94dcf318d8cfaeeebb01f59ce02abea312fbd05956c0c9daf81718b2a7f4a1fe3c4dbdd59efbd22feea05c2a0bf6c6d46e7e856b3fcb4236456865308dee3a9c8dcaa5a44b0f054ec0d7e4d50a625c148f875e0a8c718a4a7087b682f190e288e6e332ad02532a4efa2274708fbebd09e85db4bf059d8a6f86076301d571f3de9505c7653a8f350cdbcdda444bf006e2ce7e97107b037728e3fd76d020d19281046f348e5934cec06d2e76304be31ad5171b22515a8a34243fdd55f12a4f60ccd5d6081423dc7ca11fb6016fe650a0c6472d5232d508d4aa55ff44e286d4869ead60a9290bc689d9422e1886af0ff7e98d983bd98c2816f1ea6dfb305e3005dad56adaa0b2099322c6b4793b2b0df2da8ffdb65d335a0f8d89d2c4b11a23e9d7cb4cc3c0611bc2902ad8d377cf96b6cb7e9a87006d5eb897b3cc280019f62ff9239c6739bc3a1c3406fcae1d5dbb0f05ab1958d823e3cd4a735e0030608f8e82fce4ec904522545d7c8a969f4d85c372f9617e1cce50b991660dd330b049f5a632e87198ccf826428edd9f8e1557e934abc2a3850ad88ace5385fc01e0b4f912dcd543477b1493b864c0bcd62009d5e1b81501693518e8d2e2d81fd1d1b9e3bdf431cc4fa301e018fa47dba31dbcc40dcee96044862b085c01247a50b5b81ddbca0bc7f5447de4830e682ff5b88274f292ff79a90d0cee93990924001576e79e595efc8ab180479443e22c176fdfa2d3e0e8bb895ed10a101cac90c2b3182051bc4310078349fdfe740eb1a2d4eddedf5a296a56ae3264e0d49370726ffcba3d1cab9305bf3e1babb16ff64b11419c72a2dec7837e4091739af663714f137c1fe8ad675355d65c0fcc8fa1c49f3a2ee84e813904d43af307640cd76066a4c0f46ab591c4802dc06d566eb413ae523224f2ff5eb0ec75d5e6669483420ba5ea6ef01009339525a47258b00d1ada5192ef89bb9bfeadcd3b5d418b6640dca14e9857759f4e656aad9d412ce715718a6a1c99de78c51c2d5e0d90ddd9405b1540ce6488c149f815d79f5c406092422f8038175060b36aeab97f1ec38632a1333674198df4c78e6bb6b55213460150c6b876af51c64e2fc5a5a4d156a6d240223f780bca98070c28598ce96084698dbe6d8163217151c095dd4ab4cc85023479fb820870bec2dfb5fc79da3e0883b2ddbe5944053ffd11b6578757be5ad0a088b3ef16914d70f7dbd3f7a510da6fb78bad73da0bb280a24c7eeb263b7ec1ceccd1a0540851651702a5f3994854499c2d6b804ca12622966fb63449978181534bb0c4a86fe003a5b6a05fe584559699d20e4d338b74f4a33457b64c76fa00709026b9d3450ac158bc178699f1db251b9dd338333e281bb7d6af52e7fdac01022c30dde879c2c8e93178883f84ed1fff602d664fe58bdec17392312d281f7115752a29857f883e7ae7ae5872ab153bc7a0bcb26d1ba67aed9bc191884bdd100226e1c4ef1acb9a429920eb4f4fcaf9f058fb99f90c60706ba82ed7472714b05ac0fdc5a449b88b9843f956ef011b5bbeaed52c8e24d08c709b5b9ed5eec8b06cdda1c02fe541bd5c66742fb24dd27a610f4f5d2d7fe8ff354cbffce23ee7e2a25f481dfb53f5d25052e6793298defae4fcd5e616907eb7087074592a537fd28a4a707cc8eb13a45be78883154f49f94bf0963934790de641547fbaaeaf293103bf290c8122338a50e59ef15b046a9b5e8b061a82c9385e33bcfe406e4071f0f72b7bbce76cb49f94798b74b571193a48a6b4892715057e98b78163b5ece1701c658f226393f498702a05d499f4f9653737485bae1ce7ebae9cf4b3bea8e7c174cb6478d99d4d241ab3a992c7d2dee4fcc80f878c2725aa32ad5ed2b3064780d31b2ca4eec5490108c1e719692aa9196e84c2c7313f89de36600d21e4778ea28d7caab39ee547c2181e22dd4db4d202eea36cf0694890955da8746b62258332015258e85df8ebbf7c931438b3eea065fbee22aeae7ca9da0eed49fbf3a00ee1697221be5f6d5882a2b67b6c51ab26b2ba2be5664fb209944fdd37f92f101ec1890365ed7e072ddcdf1dc789fe07972eac7cb633f624b964b24e481ec09d59b2ace53ae8c6221e675e50d5e2894cd8fd00e718971eb67788665fdabd638f56d2998f90850ae046683cc8648cd4e650d42179397dedaf282a043f56a611a946a0a3287f63b05739a59ce1644e1bc23a47cdb5b1061962dc277b6a40ced38d83440069ec38884cb1aee8b7a8455ab634bbb3f56f839404e1f52e3d71d1083069af42ad6ba3ab6d3f2fac3b5dba421e459d5e6bef1e5d5aa43f6608bc41fde8db04c12631b30fd0cd19c96c5a498a28f8b4fe475646ec1ecd9768f2f964dab36e8641e4d9b7d1d3407165c1cefac920b5f8f8284b6e78a444884d23973e0e5a8938e005e169f472f627027b668a8dd61aa9b0cd5c37df189db06c0fe795de9b111cc02b03cbeae65cc5e4a9866a72caad3838c4f8dbd72592a84ecac8a3148608de22ccf053a344682a9256d2642255159450196be775053a4e4a18a57b47bd9edac12bf15739946b32d32db0d6273f119708fb57867bf4ea85a242328350cd08fdb1d52f6d51f944ac4a30b36a232d9449a43b09c1433e8e045526a0745b62e685505f9d14189cbf70f8d1fb13232a55bdaa3fe882d71b831e97aedda54e11c64d419538faaa723a3b3e2150b0ef0d14f7e4564b5ee223ab578b2be8a847913a41b272f28cf58a390ec31eeed7a241bc6004e8e0e48542e93903ef3c4d1ddfdf9ba296b891d91cabe6b2fd67cbe0364bd5d0898162c278320d3e2272f8d70b9120c0411cba9767b83ffca591aef70c021fad49ebf6e5b4dba508768a0e4fa2559f11351dfa20e213d1b8eeaa49b8bd2ea98fa175d4aeb0305801960b45caef9212e170c4140fb740a423fa73e6cfac520c5626128c918b1c7346d85625d7d5597901a03a181ddb97b66576e133c686ae2c4b4a2038e9b6da178cb35658a1ce193ae1637409fba5c3703bd2f15a025041ddc9301e27229aa19df3eb642bbe2929841110dca55ef4cc91077e85dae719eaa52286809b83e9f3f0a93b0906d2a1d9a5719de342a60c2f09074fe5aae84922356ac33ba7a8980d079c80f92b2b4e7b2aa085409649648b0609d38c0683dfa80c003bdb7c833ac7cc612a2a7afedf9b4b51ce6478f56f545f1aaca8bd44edccb265f113d08a46c46a5a8aa1ee26dec00af1c64eaed3032f8cbbf48d84c4ed357cbbbd95fdbec912c38b0de353812f5d02b211be05923fa61345a504c8ed5dbfb0a4a5bfa4d584bdd749553b7ee1e8c06700e76355553f769cfd3418e5172317f30e946e2a71a3c26b7176d2a4038c0724d1e3877023626c7ebfb53527d32804e14612dfdd9217606cfd99da704e3f8b243011dcc50499b7e20a8864925666ce51796fc1cfc5590884bc2417c3e2406093d1b1aef5721370b689a804e038b605e3578bc67accbf92171143b17835dd7f75f18504437a732e06ae6b9fbfb819aa49e361237b49d086eba8744bb4f64dceb4719567ffee57b263158f3115bf85cd61940116c6615c37196db9a3ad06124809f007f818f68ce1dfc86859ea7a5a106c86ee4df021bf8274b38190e8e2b0d5da704e09b4e4d231d1d52f111445fe4b3efc4e19af7a32cbd38968ed13867e8dd1e1d7cdee8a727e8154f24bbc5a3f6ac1ae761bfe6d871c14dc6a671bba426459322a3d63028087eda4026e465bc27c88b87afab24a428d10e5302dbb9d80f21b0251ef67f02aeddcf98a12eeeb30619e9e882b877bb436f89613c0e3e6ae699f60782b7c0702a14d8de7dfe2910cd3f9ae965334690643384497824f9d828cc452caefa8b68123dfbb3534ee5c8b683e9a8ef9818cd76dd5340b27ea134256ec208336aa70648277aeba5b61239e2d25754f7e7cc851ff69787df95bd2cc39c35247cac49af34f1060b733dcd43eca8fa134dc48677fd7c465213981d856efad62263995af7d5139d0de45d9745851fa2c58535fe6e62ffea854a5b50a032147513a9713d36ceaa64b94c66a8507f7be011685291aacc4b0b23240ce8fed94b421d9fa2b86420f3ba3ad45b463268c2470580fd638db0da86d18ae147212020e80f0b14827262cc33838faee261ec1125d76e24dcc4632144f79a94b973f476e71bef5b1babaad679c966043de13674361ed3a228ea5f6f29a7bf4a05861691162ba81bb46cc85628f6081993b9c22fce055855825d36418a2b09f4d7669d54311d6b9eb1856f1f1bd18a47b707508bd84bf88c1452a6461d0abb8873020022f81b86f87306da41161e2aa05fd62eb0b83de48646f1153e6e259f557b614102150f7ffb126f9f417c0f0f877d6b7ad13a0359f415209412f4423a6663abb589e414703eb0672078798833f9bbe3870650ff5a1921050e4de7065ac1c75cca8bf614f83d540a1725e437d3569f8b694c877bd539ef6387d0451eb7f9d2df405b050a248eb4cdfed80d3129a2d87c8891e53cd8c76c65b1c5bed15639deb45c82cb2d926d4c9468ba7583fe9bbfde44213ecc7b258cc4dc8ee96e36e3ef08e1b1bc0526052b23b58222c53316540e58d891d8b55f8af750a363522d058a0e452778071b63f8a841b6859fd755d0b624628eaf16dd5d96d17301bb71aaea046cb5db030d2b77beeabfbc73860d39dde53b8dc21de87fd10e79d01af16dc3eb08f9b809803954f216767b011176ae511ea03c2f7672e58681755347e51987337b25ed003e34fe344b7a744efae46193d6f7c946a75353cd3d397219995f6ac7e58fb2251c77074efb41a34f1276f8cc613150f82aa58b1c7b416114d3b7f6fa18b8490f6f90be83853258d3b697c5e6b83c897d486a92ad0ff6acd7d9c771e2f9647f074e6a25f34aa7470c95614c5fb71d5e79ebb313ce139031de491e3225de6a3b1e8ebd06d58105d876ccd58d97df396c6b8d2cc2d79369c97db0b5489ccd0aa411e0a53a6f29f290c943b30e420782261e5834366abca43026eae4bb917e72ab08553e6f806940d3c6d8616f9220b43d6d3d3af3fb37a53b55799952b3ceb29b088b5b2f947ff1998be6e2b13881ef868440e0777caea2ddc7d970e254d8a937003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000000b118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000000b0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000000b0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000000b0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000000b29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000000b141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000000b25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000000b12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000000b2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000000b189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000000b1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000000b05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000000b05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000000b14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000000b03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000000b2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000000b1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000000b1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000000b14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000000b2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000000b305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000000b280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000000b223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000000b17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000000b08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000000b2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000000b0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000000b0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000000b172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000000b0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000000b05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000000b137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000000b2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000000b2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000000b2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000000b18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000000b0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000000b204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000000b0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000000b1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000000b28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000000b1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000000b21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000000b0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000000b0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000000b107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000000b2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000000b09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000000b24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000000b03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000000b1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000000b205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000000b25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000000b283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000000b21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000000b094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000000b0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000000b1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000000b2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000000b1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000000b1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000000b304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ac7fcb42bb8459aeed3cc8e7e8225739e925e31133b85c9a37b25335380485af0e41e9a9d2a489e554c34e9a20129d148041c41c74b21f85d786413c53ac38ed944b51feb1cee818081bcfed90d22b760cadeddc3a8d47182e31049e4eb7cd272cc241eb01a59716e497ab1d67e5e5a4aeed4b2545b48100f31f72a6be4f63228a30d07d14c3918de6849cd8ba255f97a1e08e08b73ac588302fd099a567a49d7f6f00d9dfb32bccda57f0874d3aeeac2d958763d68533b7fe014b63ab45b0e22ede65382dc599ababc21f44cf068f33ae95526326ee3ff6ed289b4e2a752808f31ffa3bf98d1a845200835a166be33715f9bae7fbb2126741b00b5924336514a06b3be739ebbd81181eb5ce4a0c8a732d3d5b35c9e573679b53304a4d43913496dcdba8c3298b702b9d9561003484041233366f462653bbedc827f591b72db817d74eddec2a016c8bac7377c92a4e21ec8d138b259d08ddc45741d7a366baf3e5eb3c026fe00ecd3fac32dbd2d62f7c3bb08fb5919f56b916447a68a2d2f661106c2e466497849ea470e64c6407b726222593eb8323a3fbf62948c958754a3e331c4e6dab3b7803ae04331df3e42c5a51f6fdd490279b012ea550f9532df8f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a13e459800f98cfb8228e38a05a230b29b392d49a1d299e7b7bf294142c9409088a130221efd69bc5ddd05baad50dd8abd958315537bd2bad53380ce8fed67a850f7bff53e04b80431c9915fa2bad35ab160f717731ce1ff25571a802ba30ce95bc80b1293c98aa6b759091d41f84115fcddd6cb1f6961763cdf5cdf62d2cc11e7a7e2c253b7c554cb6ec22b11ebc8fc2fb4f333a158b1c2727ba5d822066b7f51db43c758b908c9714c8dca207b3e09f8928cc766a5c2c5aaf4c0fa6a28a587415ce78e09e6c5df6b13a3514448d8d3eb56d50b6fd740e340a44921172c47a3e4a551fbe34a55d4e22434043e26361ff407cc8c54d99523ade8588f769acf67e050f9613da8f51a6e198c48f02c6963e153fe62174e1c07214d68aed18ec38e568a0eeaf66ccbaad41172b472e455699f4708adfc17a2a208153924c525e7e2791ac6b478704024cb11f3d5e71b6300fe4c5b42b8bc3aec24cae19d8f65e5f335cbc941b057362d4dbbef5a4858f79714d7d1db7659c199da20784fb45991def32df603f7c4592192723b9c142d04ae3e9991977c1d967e287c03442933f92c01c2b53f621390c3a0588d3fe17c4baf5b3b8a1571dffd8181ec87c612460d90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000117f9046bbb597d60cb5faf32b8b25020b264af6422acbe829da3697f5e9158aa97110fc8154d580031a6156e228d2e474b9e288898249496745544b6f424f842a33452d05607df94ce313b1877e8792f4016c0a8b77e3e47ba92c6dce90ec7c745d38001910994ab4e632b297a4c5fe5c5d85cbe760fbf7bd4c0e4bf2d9c8e83390a4d5d9be63948bf3f2f9eb46ac8d16f3d7f8a8d949e14026f291a7f7703befc2769aacecf2c52ed3fc83764ae9f5c399013e4d0414762585fe4c4bd45a0eabdb834debbb0d505c091d8916414a7069df36bd55b8b2a93e13ae079248db58992955f432c018659257722addaef85f183f819455a39ef4f5a3de260d2754ed5047168f9bf31aa7e3318b100765179d0ac8ba45c9989473e65be3ea16557801060b739c4d6aff59835f1d9693567d9b4b168d9b2fa2660d6b5d61d0322e1391501c13cae23d3749f23961662b34d1f9e88b77d58cecc22ec943f908424c1e71e959f6476b70335ac8e3a99b796e4ebb71f21aa3504d2270700040bbe74cec944ceae4c98602014dbbca0eaf1e549bcffbbce1269dc0e2bc8678eb1bd6dcf0f3ced0c9cff2067690809ea890b3bfcc01280b1c77613dd37395b4133b721e2dc00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000239ffeac359a53aa168030d5c616d68c41da8387705439d7202422c0393cf59d9bacb6a0f414f8353b81d378b824b744aa15f84cd9cc77875b1433ff685c657e3a2e3a79b4186b8691828e661710b7601e5f32a3681ae7373e1f719135c868f34daef767a6f912df8cc5cfc2c7fc6fdd563da2aa66f399ce1100e3d8564524537edd50b11dced0311062a3ce9464186d9d4a7b2f9b0117bdaabaaec17e11dcd70f52ee4f44f6fa90a928b113b78fc2591ebb893f90ab1d5fcefdba0cc847eab8ea54146ab620b825da9756989d738d1b3842c14963f99d13bc149debd6ee51dc34fd19a33798716b92ec8e258a653733049b1cd37379b0a16eb272dda957d6bcd67f0819bfd6b906371f99dd23f9cc0c773f6966e82930b626e3d4b82e5aa4870f0779474d326d4c6b833e799fc2b52cc3d725c6f3b69049ae4482facf430026560529fd1f853ef5a2c4655306fbc1d7020c1b5e43b6dfe53613b773dd0a98368ad981160af17b218312c2e92edd3830e1c7dff62af299a144b96d78875af6efb047b4eebfe4dd3ac5c79c342fa85fa4679ddbaf1c482def593dd4b224b3039255ec7f7f3d351c575c79f7d45d9b0cb4d444dd663c6b9e4f7aba2bd0ec0f7b7100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f2574a1668cc1a476ddc75f1b5f5fe10318911cc1e7706f0b0977cd97040de09d04a4abd3bd7583ec1046a892b7724b0a7a8afdabeb4095169016afb90af796c14ff23a82c6ccf70c5972cee360e4621125f0e470d5d7520abdfd55566a92644b29892a4f17071f0c0337dd76fbb9725155a22a9e5cdc17037c2ed1b931c86fd6d5e79b97554ee9c2ab7662bc470bded4d66b8ece25bc238a30e29efd7237f2d1cdfd54e8f1b6b90c4502b1e70b6caa6ab9f00867ec90e8dc13fca7a89c731ff78337d8de7dacb138198b50f1e41480f70a90aeb4d37045e78a2d2f0cbe638cdf304cbd498b085ab075d60ae7596169873d54683d80243368309033f3468d5f594c7b860a095536bc6c331424c2e6f33222279457692308cffde73b1b5a9fc78ca46e88f2082119eaaafb0da45b6efec6f98098e83983e5b1de4f1425351487e83db3a352b9ea1a4bf5c6fda5e8af6251b39cec6a58d62012607808ca5f10c91f07dfa16b501247f576d14e86ce705e549df3d587c6efcde4a4a1492293490dc61d78a5deddf7880d528276037a019dfa9057a9fa4af220506dd2e581a76a6f651a0ed16bb710d512fc68f3d8d7f9316f89dda8578eb82d10d357f91901abfc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100a7f575846b104b8d92d072c121b556dedf74c1401dc400810b3710f8e0234f701d0e2792cde78e25482615fb63a2ea723b5752852b7fb64137ce24895cfd4bf6719b2fdf17159492711937dccb2c8ff6f49c732f3083663113a58ed1999468dba70cf18869d7c7b147c71b05c9f1eb8ee1d8f58306e9079e9a412b29d8bd30883732bc26547c36e0aed1359ec8966eb1f1c51a350b6d936ee19495117e866e5fa777cb35fd90974ff07d1509ffcff7186119bce3f071ae12a0893e7971500cb8a9809b778eb5182994b3a0ea327ff2834ad9d10f339b10b495eca5a76a72aa024fc9ad0a5efd257f47e04800633fbbbab3d8fe6a6b509e1e52d390935f44aa1b19de28202aeef95acae3b21820964e8a28704f755c4735cb5dfeede0604c1e454f51235a3f22f8d793e0b69e4bd85cb575a12247bb95b7c0029e5837e852a9c6510eb4ae0a845105fcb8d49ecee06e79a10395082e54e09896d564950a9865581ed3c96c4ef6b0ead706f22c0a2746c5ffaed27b6e9e020f357ef4f41375ba78242ebce79954c9e382d523151e25f98d3d755ea2f16426baf9d13ca7cd472c1dd0fe81d0ec6cd1f1c574101bcc9326c9048a63a9e6907f209d3677e51d69e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016172e3d0717e9d9412af4e8180278796760f00b534eb0d87c90eaede480439cad7b1f14cee2f11921b38aaf560aba369013b768d649e7ca863de03772f506ea883afc2d4eb3373c10a51b8efb8aef008038fe02e786fe08a1b4d0543d01af40fda7ff0687294884b09cae7d1b73b2dc52a2f981c3867beed91c060237dfeffb9119acb3e2003597607518e81635ae9b7527965f9b454d4d7f45ca97012c6d32c5b865bc0782c9348cbed193e75414633e176c8e49cd462cfc6d0729bc9c5a1fdf705132ad9f78a4e502c394b345ee2a8c78f852abd251573eee92db65d28bab61629960652d10d8a0c1227b4dc6a9772260678d5633df98a1199c67ed3bb2243cf3243b49218df2259d3e9cc98b42dc36a606932a93eaa0168024b22aa8537a998601e31db2b64703df28ae0978504c59d1dee48441efdef0584a3a162b71552884aee3bf26fed6d77db830be1a5bdce593ea301508589738f874e7468583bccde0ae6fe21532d6b529d6504aaf215f556e60342a8882c8c15abbf266e787e8f0b8225ff8010074919af9a2efe971f1e09266aab31fb83978f4355e928e05e2ba7fde064a178699016b5883adf32692574b9e265774d751ba6abf6e2501050500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e1160280bb2486efc62ff7ab4e4f5379ebc5166c40f5b1b91a43870afd4dc5d36add39373c2194d78329d9f51d708729a77ed1ef5c497a8a9b85246fee0affa88abbe15230bb12e6d19ed8f1e76b3452a5caad1200fd0d405b2f2fa545f6d50dab2ad0443b369aee8f93bc0cc4de9a38323f59d59033a7ded150dc745ed0f3e2dbe3fbe0616502bc65aa7f39d3f6c5a2a31cc8ffeb3b2932717ea5b58dc679b27e1078593ebfa5c4e077ad55921b82c2f24f21a8331ac9e23e1dc292a2766a32035e3447865ddcc303cc9047352104d179165219a14cc4365b3949622cf854a4bfa46629207b805b357686b1d283637f217146a68a891a98d39c050ae1403883f44749480a0bf8156d086cd48512dfe13fd7b7729edfc0b6848fe0d023583bf00b8d48d91c044db2b844114d2a831dbd75b263236282d768a0591e2c7af035ff7728a67d0f3f3ded922ea97280f2671812e5bc6fb080f5131d46daef157ab3f3ad60bd82b7876194f26a02389f2fc483370f8486878a069664530e9cf28530eacdf0272ab278be8e13c645b76ed3d4ac6aea0a8230a532932ef8337a541f3a012940a7e3dcf9090a29e478cc073ca326eee89dc69f46c99b763dd726691804300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cac4f5ec174582c60ba4bf4eb9d14477c9cd2cdeacc47e4b677dfe0ac9a0e6aa73da452ebdfeb959cf7f2b16ee2432d7b7a14beff7cbaf60cda319ec311ae801c976d909fcf546f424030e46a6cb2b1afd75227ad12b56c76f8176e85844335d4a63c0de27b96f4d8aac1a83ffdf3efdb59862b5769eb1e1862f6d9686a53c221a5fd41cb08398eaac8e669f0c8af47b76c9ac57402d6915a61a179ab3af6d26cf0983443c03c6b29066dc41a818dc480c67bf80a7aafdb3a8f90da64299acdc1e628f6588dfbd69495f0147250a526ed83d5175068f4a3181204375eabc16635a6303c77af0f6c728caa166912b9f5d7ee316134cf9e4e1810e724d142787b58b930c8ca39f4e99e448d053292a49e31fccd0216f99f59b1a2abdf4989cde933eec23ae5ddc241ebf28f5bb58893a837bd1a966306e53d4daac984758f4f9ebaa88e046c41e3ae71d9b27c15eb9350fe7c55a64f160155dd039f086654cd70458e9c29418ed7e2575e648590d703601ec012a2b5f672e7f34f49fbdb17324b5ef4d91e484008b27b23292d15527befb929b2883759cb1919df2fd8ae1fdb6b15ffad7f73183cd61b5aa7c76b9ada76478d27357f4f60cd2a03c9b89e7955f100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008eb3fa647e0a8a8113c8a8440a8c879055e15cf746f3998cb9d751ee2051abbca35eedfc04562471563b204a69d035c0cafed0bdd07d5ddb04011c72cad67fcdea33946ef192189dbd47c552c4517f198ac4e8fae851dcf1083e7376b6e27ad18f615475801a23e59de51cac3f829bb38353b28739aa98eed4c76817ef52bec61750a34591261d58b43267320818ff8cfd4c8a7efab92f32f89008e53c52946216ab1afcabf1094d7a853c75373fd749902e68f007c0cbc3fc0151fdbf227901f3b46be42f19c747f83559a7b89b87efdecd73b3052d38a069bffdabe90e9d70ece9169fd3b946d0ba303fc9b113dba3fa8a1726278705d6dca7bd9d421760780d38f85e41f14d508698f76b052564b08c560498583866c5247dfabbad5342a41a8d5b0679ae0bcbefb99ea317a7df41a0ca8843b8203ec9ac05b6da244351a5897064a776a93981683f8a85a0ff400cef622e75e87d3f31707db7c41888e706da7f8ff10715c5d83cd857272da6999e84067f2d027f764c557aa095ed8a3c6354f8f66e1c813f298e954d1bfbad37f558c894783686a119339bd62b1a05c1069e772e410a2f0e9f49ecb4a715a04d795837bc58b143880cac830e888aec464900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b23467c72148faf23beb8dc24bc6e4f8e4c3a519b779529dfd76ffc6bb3072946ce5b3845384155710d09fa1c41a07d9892cb10b43e0d5c6b6ca2cb6d14476cb0900574954bf0349d0b59bcc7acc4d9441d911a6c78b51b5b97df94b6cf85bf401d65cc5312ce8a02c0c574dda779c705574a0a82ba7c8e00bc016e55d30888321896d69af76fa65c75bbeb450e0797d42f2d7d962aaf3540cbd15de3bd6093bf3e35dabf8db2e66d1a405709736ce7425a6486e59d2596919649b1b91bba956c1f1819a2098fb1467d43dcb9d0fde145514db8731d19a6f4953744945e82586ca4383aee310204cb8cdc4b5bc0e8e6baf9f1c74c49987eb8c9ed746940d1a5f4825dc77cf08eba1d79cae5afdabe357c2d438eed2d1e348f1123ada3c9239a5a35057ade05efc55e7eb36938ce47fa942c6f436ed4854404c4a044685c9088c361849a0db4acf6f89b7541b414ba180d58e10d80798f10856225db267d18dde176027f696bcb8775a5c306e3bd6bc042f4c1cab1eb54d69be8f34d660ab7c2e2866dc4b81cb4dae2506c755e848272facdbc2aab911a3c38c29b86e6c6389f409f85d112b7db4ee5ce26527c980365f3d383dc102bffbc7a9ef8d8efe68c810000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a289b36f0a6b5b80c910208cb825058c635307d5197cf67a27e437ecff6a28912c1e6cda7358ae7a07ad3cbe2d1afbb73af3a971f5fd2dbdcb28d822ae467c6915d64754084196d56a2cf92e99901cebd20833adc771f1861ddb70ed562767dd5f1ae88f0ff53ca882b8c57df78027b1e5a91a56d50163ecf3600dda76030752caf4772ef43e641a8d2ab6d1c1261dd4892d636bb2e219d1bb230f3f0d35925f3155fe03dd8ecb640f7206766b2fd02f04054f8bab9ec17cad266d576b6086bbc94902a9ef8726ac78b6d0b1cd4235640a394086eee07931aff159a342393fa17efd30faea1d39fe1dbb01d913f94630606d3ed0e3443bc51720b6d3a71a5ffdd58bacf9a117b27329b476f09ee48d36c04f7ebfbf8ed86d96e04fc1c39312bd43103e935c33af6eed52507f846f1aa3c027677b6e46794151e3f3acf0a2e57b48c0a4dd705a8c30ead1ce3d56eb7d16ceeb030ce7d705d6ed1485fa1c761bf6287867751334a9c3cedade7c2b998fedbe88848e60be5ffb2ce2789c0928e56e1c96cafecb6ce6666917a5df8e92ca38c471bedbee84553837fddacb07c6948c9c0a9c88657e9d56bdb9d8e56358a0b20689829cc39256258245c71311a8abce00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dcdf9385c163f213f249752be31dfe0bc1e38ca417f585544c4c41c7a3ec8b7d5dcc291b3e505be508e1c0180c04ae0c56455edd1b3e47db0536698242464938a4e4e84a0d4a1a791856f883b6154e66a0daad2d1594b960cc2ca80393ea7e3034b46cb84cb7e76ea78be53afbb6f226c024f01e585694ce461878ffabee8a01aa66d61a97390255040875fad56557b2858eedc470703873caa0065774af90831c9f1a42a3a6f187dbf0309c5a12ea14851044c394dd188786fb9f676ab6caf23478b4d9b87a00221e494cf5f132e1a5f93b27327345ec1274fce6a31dc219c6cf6f70e29854b99c94bac60ad8b3c3a3b1dc8f9f58622fd6fee994b722126b9ead1a1a3fb779159bf4fd18817fc7b073516d5daa16f196baf311831e47766d4520f6a8878bc270df06548062a6deeb9d24a39d78e0504be36798fe6e91c5f92c47115262f2f3a51bf8d8cfaa30a1a198a49407d13174f7ac0fe98372497d6c29829246b93b0e2212c8302da544c740956fa38b4081b199553110dbb0a5a7efd107a0a000396c23c7b0d676c4f3dd2e12fad7d1ba7d132abf5f7f72a6852f38f59502009afd1327845175b41c71f45bbe5601288750850f2f18ac325c5ec11380000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8929670288240aa86a52ab7f5e8fd3635d92a3ad0ca81ed3dc40a6e843494ae0065278b31332ffbdb40b3e3b3dfbbd41d9063c212efe899e6ce98866b512affbd3ae6c93c64f7a2cffe161f77fbe7d51201d0503a4327b58c95d1314656c542161c95d71af23150237f0f42f07b679ea49b76f7e700a57daf8695585bd0da6d7515d6f8206f33c111c473069578b5437d86cca6614b8fa99d3ffd32d800c565fab74a6ed05236558b88eef2574e68b1d744c4862677dfa839b804deedf80e900eea5c2bafb0703ab95e11648dc4efd19a390a5a995e77b698a87d76d248b704ed05c10732279dc9798e09a9ce0c662b26e2ccab6e99e16fe410461374b41f6833bea033446ecc070c08efff4da035093eb77ebb8524554afcec4411a854848e89d7d5f16be50cc51ac6b4cbd1ed4fa1cc100faa2a3178934608cb726d9a38ab7f969ba5d9ee53d5931c9184536f305f96adc5c22edcb6585cade4ef5a3395364b752ae3f40118288858f8832b0ce6e9b6bc8056975b2f4bf1d351722a98a13ce5980109fb4e1fe6d85e95bc6ed4d53418aabf0ce69d281fe7172862809492c455ca852b098e2b150f39335cf036bced94abaf0f13228d73051b556991189ebd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000289359bf5f02a682e81d328f73a887efbc3998016a6c60325831f71b2180464573333d340cf27f8edd9f35cf9f96837aa86dc2a9bbc2a9b2609dfee6c39372842355f9c9038cec9fdc629500d05a81fe710137820f595f09cc88bcfa36c299bb35fdda7e71c8d97a0de310790372e3fe85afdf51bc6cd4a9b378264704daa2cb63bbf2d5731710cb4c952535f066e57e75d821727ff8aeb0bc8781f9f86c3a11bab8d6ba6b4bfa66ddc3a33b003989cb4b1381e7a7f9a99ee926e673566fa6e66e5fffd343d071a3de0c748b3331c100e5c9117453e0849282d4a1c00065784818bc5d0c197d77288b4d932e8fcc3dcdf87f260a7c67bfab01bb92a412fd22e7953469e269e0647f7aab3863e7db47a6e2c06cf9d2a25a78b78b58e2d65fc85c001e8e5d9d9d3cfb4c83e7dd19a21ac54ccac1c4a587e5ba26e53a07b63df51656fadea5217288a1b7a60b20ea3171a0f668e05fb1e22612d2a765e7a0bf78f14e8658a996efe6a279b9a92677aaf666b7f00af53ea5770ab994d3414161ab4a3648f623c0a9b953d3fa55800f59ed9bae911871d07e4a95780697ab72504491281056eb0f579f69fccd6a55b26d7abee04585e557d1f12ce852e082de310dd10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4df83006dc9b44260661bea7a7989d29484d7d832be4c7d502a61cfe781adec8fbf82d242dea998517fc2af6537d00b6fd2c7fc2c19331ce20d7412d0cf7cf8ea2aa130b030252815b81d29c600a594ef74fe10c4cc1ff20e8ddd522527d55153626d8f0e3640c8ac4f3b11f8b1a88f6ba1c58975100c03da07adc60febdeabcef6bb91c4ff9bba3a276044d2ab0318cf7915e4bf3cec101c3eff88bdc004dd55ffdedcf3bd061f4c2d78162df25b32fd6b05551a13e2cba657371bdb8e4d286b023591a2f21bb86ae286ba13cacfe0b0b9c8cfe3a3b92240e3360ca76aa79d003188ad714c583bdb111c81e2c12305b0da1be0114f5b5d52283a2e538f14e36fa49c9899b4ff1a82253d5dc83aba98384623c9e498b1c5f8ea008e0ec27c80c8c67e3749b9d1503fa2ac405f85d22cb135b91bcbe3cbd5c9b9e7f8e7e7c685b3c0cd106d39b9cbd072044324764e698dd42a14a8a5a05a01a70ba698b6781203828cc20102ac5b56d6800a43d27d1941f8e059fc35f7191d37725d1cd3fa1f18c9ca12a28eeb76305ec766af5d92d8cf8509289344c72f10d68ae5354cdd6d739c38ffbac46718a24a9cec4dd63f84303b5bcc6a22b75fbe99d734e6dfde5100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ff6ae5723fb1d9f4ce169a97e343c943950e887848242c245c150890c4bf676a8c288b63f88c7e341208cd563a368619d461d178e4e3e8a5721f547d9c184931e96fd605d2fa207111efc918ca35e2c3017c4f04d0d1c2453718e961f700cbf0364a6791fc3b3a5851529a9ade578063fd533ac2866637cc333adf83b0063ee16af462fbb1f2cb08b008d753cbac7180a7078c47203fe610631cdd749ef0972d8c2105d8e3e917d27671a5316f285f25214078ee750b25f455bbec592659b4196daed95198178af0034f9f65d637ed8f68129b48d087a55c99bccef7ea6921c68adc5626551bbca7b0d95a4da2ce29553ade7eef07d1ecb17f9d3261f6d63b8306fd7076610de5feec0e059b2689d7ba0dfa4eeee776ea4f7060e819aa64934936f2b0195e868c878c69329a9aa1d664b12ad735df55db33645f373ec2c88e00f2f8b7c408c6d7a0847bcfa10ba498b9efbf599f0934ce7b8a21efc72d27a2eee3985ba36b657db9c9e6189a9d2e75e48f26a08c984c5dd547dc9129233fbf3b18e3eb35d1cec5a6a82a282914168230851aa8d5cb0513fa3f5d1f28702ce6348bbfe7990fe5acfd7c343a6b3dcc8fca3479c135e6af54b8e6494ee5c7d841b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ea485e3e2fd4ba5cd1e0d6736346f3c2853e0b9d3e66b08cb3c2ddb20d164fb86be307051c70b7689a6a9e465559830f53ac7c0084e2bfef23b6a098de0a39eec18b8ef7bd5d4076257c719f577d6c5779a20587e2b2f97d9b2a3949d11cfbe1e3b2b85315bae8aeb4ac020bc9972c2212efb5839accbf1944ae90b4dd097a9d949f067c2ec2a641a97657f130e770ab307374ccde1bf9d610a243ac8d5ddf8145bfc57e59f52969ecacc6015394f994137ab242d2574b831b0c489c8ff615b8167a231d5a035e1b9ebff59e608c62c79a469227daf9f05c48907183a54daf9e541b97a00bb6252a8488461f51490bb33b9e7009a1f77291f3c1719980887f39dc5a39cbdbc510decbff9aca2551c4a8c1831fd01672f4a0718257221aea9363fef88839c83f44fcef3a3c9f4ad611891ee1cc21f2a5ee65771028a278955b7f9077793ba57bef3daa9ee770f07779636e4343fcdfe8943930e462abeb04ac6a00ed0e402856465d192b7a96d61a95f993b6c891071d3205df87a66901ec99f17cd0d663ce297221c87b4cd5124a2497c87747b854013e1cac7117c12e7520387bb43fb3c043a7987b33ae3cdf74b1d377dff78336b04e7279ff59b155415a60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000abdb7656824cdb893b2322108314c9cc0efd2d85cccc5aeb0fbd5ccee1023be58b0bfd93ac7df9f4b6f0da92abcd0c2cb23639c3894e6b57337345f333012143a674b605ae64f313cc572902fa36ade8193a45250960ee27406d0e33bd5b1da0dc2c7fa9dfa766e6fb4b864690f2fc84217ab5cc9b4a992b256ffea298a3d421d0bc7ba570c530a4cd54809732ad33efba3c94e2de5d748f1a8041537fd3a2379ea4bb50f607a07d8ce1b5c98af32ee727d8fc5b2a8d4340c3acf423b340b2741593757b3a730ca3a3f216bf43179ceb910f18a348f2e1e3bf2951dd6df34165100df729bc0b3bc03b4e5f276f5bd6012320cc342a0dbc85b26ad7c9e6a90b57e2a44dbaa94620bcb54549b1cc62d67166f03de5cc1819c148742e9bbc8d83b3a55243ce49441be9a6ae374bda71618319a033e6a28e0c38308f1c322b0b382c05b9c304433b8a087a1e6306cf52914f8367fd466f56509c080bea8fe41bb4d23f11c81da21ac0b2bf6fee4c31c76b1ad220f003e4ba35d2101fe43a61bc20feca4a7e7cabd1aca762b18f1bcbc60cc33113e8c59a1e4e4cc140c123561176d932dcc05f91ed4508aaa02267476b242ade9b235012529b9eb6c241c6a9337c3d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad11af0ca21b9714cb49d6ea36e77b9f0928c2e6f8b03c13e3d5a99819a928d9921eb39e2749e981b32a75be1cf5f95868dd223ae25a19ed7bb69b677783e1b3bedfd16f0242d6a669058fbad4fdb6e5b0eeabd5b9f56cd1056b2153a52c95660c1db9e382e5077e9d3543f6e12e37dbcb2851866f2b48e79f1326c78e5f03e52e5a00a11dbac3a73b6a67010fd0b432155137bf094273370e1aa807b5d41af34fba12c06eb832fc392bcf8fe1738b900a2f142e58deac23c7f83afa3cfc9f3316234597eb881786a6cd67a939f1f220a0f1f672755de3ab6e5448900f59df05771ca20f70432afea05e178da31a906881ec3425dbb837d70188de176c036121ddc1867f7e5d89f51adfc77ede0dbc8299f7bbbd4c4f87ad011940670006b4f8f05d1525d47f6f47cd8e37486b4436bd5c1b0f2def733ecc9cc3e9e8f7fab88699d05e56af2a6af4f7bd10c50246933474d2997e5fa3449bf1c733fe8fcc7c413f6fbcf84a54005bce36b3c06067a2a48723b749f8dfad3047746975e2cc1ccb815d5db9f0800416282b52e94f025a41d0648917f52927db3aee20dce56c84c07968b09d422709eb969890956779126e05981512a4d0fcd9e5176e81a10144af000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090a582ff433a3438940b2f67b6a8da70c8268262a87047cd0d269b6457f1c5458c008a2de1e0eb45e8aff66be937d444143e58debd9e2d70c69d4e752cbb346cb554d78e0e5e984ac2267e7f08c6a4ad5f876c5e6694b4a1824f65186f4354b431fe95af9388ea8fd9a01f7f67c9227d82bf597577c69e8d50a2a6772302d54cc208e7b94c156aed426c78d1bf308221a877a69d071558bf1d911cf0f04f522bb37a80b520fd7e8bbd6672028a73c5440550e3a08b8f9726761d2bdf45c239003af185b3788f18b01acd9e4cad731860bbe299887d54fb4770002305da123297015619ba21853ea5aa80e8b708329c7fb7315b4fc23dd949d5b3e28b9dc76e24c09260c04b2f03e25a6050b6a1ba02b3cbfb3a6d873f98784b182603ee3cc032951568e6a579bec222d7e3f3075e0af577b3ab631a24a3b81440c26a2516a221bb72b5cc04e649d37c7898b7e78ec4da196f45bf7ed8c829769288dc44e4174d65d47b9e78d4c1a1c1bbd2300e898b1b28a858d41a98d14d016325b7c372b664234060d3955d1e0f9d364a2749a64956a76685180945d5392387c496e534af89a03fee1f0060df392b43a6b8a67ed504a948c3c05b70baca82d302608f731d330000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a97cb55f4c6bdf461166005fea61b5fbb15083f965f13064dd1a2181af37ba3f1a14e2337b98d1933e13a69edc8ec0936d8ebf0b709858ae559739ff7abf29820de9c0c9652cc3212258a15e9720881529f25094b1c33bf939f8c25f428842e5c8bd5b779ee38d4806c6353339b87ad8894775388cea9a03eaebdd05302384490f5dcedb2ddf0094bd14d61796414bfbc0a12ac93392d3555a66451cec0b908ccedaeb3ac45227799a231438b49eee89e9c9ffe0b3e5433609c41eab4bb1e164430e69e64c02877790fccd73dba235ad63e1b35f7dc6ba4d67273e21fac001879ba2613ccc41dee7da05dfc3bdee03f16b031e1bc302b4b92cf9cb1272bfdbdcd6aa73436ebf83a423292bd9567d8dcd62d87adc79a74c258796e5adb4bc9bb36a8c737bde25cf9b404d5dc1d9b96c9970ace314634f37399358ecccdfab8c48bca33f119dc3d104d8e808f5a43bb43d400bd8b39fdd15830dfa6f198cc51b2d3cf91dedf02a935b931bfdfd8f97c36224adf73ab22bb3c3cdaa375f6946c6c4541b18fc62cbebae9ad7aab1f9897e51530913630cf308c7c76220e933a26ddc515a7648911c36905ba74a6753d4d5d53bb76cc53e15460f24a01f176bb050060000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000285e8e4586ba6c228275cd1ebf4e78af3081c5d1eac9e8d87b540e08b4d69877dedd1ed701073f331267e07d7ff62bbcac322a991b49abe6be0a6aeb998c5a836617e976297607defbf7eeb5b17c6ed1c4545f539ea5588cbacfa59ef60115ea4cfd961a4959bb93389cd5a5c1776974f6b287d728108571a87ac4a6026a0ed6a07839911827b0d57c40dc93657be59daaa325ba45a96a898aaf711b83b30b6d9a4e37b52ce329e5699691ca4b1855287cf20aa8acbf2cc9d18607242398dbfcca70d7a36123de03c5263218157f19c7b8d427934846a51ec9d11f513686741ee2696029b291dc3400aa79b6d4da8641416629c253f7dee8219ab11310ab4d933051206d1140ae16845c13db1f606b549d2c4717dbb4bcbe64f5c34939570a5f07683aa21eb5d8cc51d2886f4ec5a0266d436d593efd0baffe7e8377c8a9b5f1b050c89164cd5f79299af411a30df77ee1bdf98c6543345fca82be4d4f4820f013b3a080128e24652142548c019fa3c4348cc774fc30a724ef806d2bdc4a4c8ff205838c39df30a722a29361493f9001f17897df7afb1e0ce93b54ae1325a33fb9579ba41e425097cfc3571c3992aa3e5ddd84e964e3cc451be80cc36c29fb1400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5dbd6ccb9a83900bd1679a0bde569daf1c3086f6f74f96aef2c74a320d50332426a98b33142e28165ad91abc69eef510bc6c0c41f8a1b696cce40f3c0d89a204338e7dd212afdcc3ea7778603105cab64728f17a8b4ab8a059d9f1b1a8b9b58707d07d25fbad691b566a44d01cfde2f992a5008c8083e887cab4eb51c4b169203031a8a0f6cab4c3b53d1013a934131d26717bc51730c4a1ebcab8fa2e2860eddb9ece836229973f514c07e821ee6ffbac8d0eb3dc09eae4c7aa0ec6b4a2ed3c7d90b2bc8629097e8a4b2f01fdf6e9e0dbc3506b0c90cdd6cff4f999009cb0a4b3bae7bf9a82af2d2906e845d6da783210f11f9b508255ebb197a393fef0387fbc66705216ecd2488da2e5b786166a9247e5331d99670012f70b54ed0c608337924362abf770ff7f0a7418ed85d7effe0e3042f8bfe8c38799f9d9f084c0c9d1e09ab7ae5cdd1bdfaac5e33c3a3c0e2e9ef4baeb37e34593e26e16656ea2831d1f358649c920d6299d8f2bfce6b7f0c3e49787eae9c494cee0b73b036d286a115206f7e0e48759165d3abc0d69c89e3efaf2ccf287694ff22feb0396ed4566f3fd570148b30ca87d9d2bc11aca17bf981305fa874f8de75a568e1e2a0ba171000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029f6dec186fc36e92968ec7d5947f1b866797d1f7766a6df725468dfb318c0a37bcc1eef847d663792af741cccb3faa16ad6d1f554947d65935ddac19c4feed9c0a5a3750a9b4acc7771e80d01710fea60fb5a8816c5e7619b2f9aec5a5b9a15ef029c21111614a582f487864782cf58d6860d79bf01d2e90a253651b3b0b914313e12bc84cc35bd8b51089c3c65d202c38c06b422802e99f898f4b2c43a7d8a4e42d4e8bd2ae74a557e0575611c1f17e052c92e12d9915a64d9f5f71f1d017252ec6d01b4abc276d8af3889b319465bf957f3376091d43117d5fe8ca3090bf983ae6778660b6d40dc223c2d18d5434a8b328b4d6548bbf75af398e2f06958f1f04c637e6d7fa3e465619e4fc58d3f62303149268f8ed57ccde4c6c7e0abba3263e99d8160852adc3089d0a6f8be50489e2baeafb0167c0bfdfab740a56a26232b5b0bdfbd01cbf83163746812469853ad7c84fbea21dd8841d5f1c2794b7019916da869d7ced8710b4c235a1327742b8e9434b1100335b70ab1a1efa1ecfde7aded42f62bdec5082c694a363d4675b5df5424f5058185da93d04d661916b9d93756fc117e0d8db657edf0b631400c6946bc27c55fb850716f5090101bf11901000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091bcc7d92fea2135a1abec04c1bb5ce40a3a056cafe4d0f901a34a12203277569f81180bca31e4f9774e1b94c3a14bf6c3830b3c509305846e6af14748ec1a4be79db6330f33c2a1cf56376966403202144d48b64b3e33c20da2b459d0b54f44c83d99edc36187f7d51a5923d05d4f5599a46465f7b418a90c88dfbaa0e119794e9268d2d325f19016a7b4a067048a0f099b33d7072c0a2c116d74892d872d77b980f9d7e704bef6a6fd73142c904082f699166488c5241feec817b2458c7410efdd509f99ff1ac0d76a686bbfc9d2c696d3cdadda07d2dd2e2c85bfb09cb6441e49c590b79042a80b1618dac8ceaa7bff3b513d1e0257989d08864031b16c13adc229fc84d2679cf7d623c488d866d8ee447ca55877c5ccd6e19850dd7ce4469e820b414a2e72c1f9aed2a3ea4a7e9feab8038561cf06f77fba84703541b496871dec06f5b08fdba74ca84b45b6397c23857b86d6270ec327d614d9b1a524ed26a14ac3a5e1b7f58d51ea5f63d8aa2058cb669d614bf862325f22bdc56404c24f759dc785cb4beba50b02f78d3217c0910500304fc73038d88ab87040e8c3156c2eadba63a4a4cf7ddce4e9fe9aed50d0cea4348e8474eb45901959a1bb8d2d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a657fdf2904d4b4923075ef3ba06e53d2d4d845b209b01ac84ceac8ced48969cbc8f82163545b7fcffb761cc0c5b724d4cac3879c4ae1fb19b7e4d0e906a6c310a031ca0d501436d80728ab14e744df5232e17e6f35df977be99a7f92b661491047ce4e419399503e554ef499a7d67f72c2754243ec165e6351bfed5af4137d7fbeb99a7fd32f4654862b72cfbe4878b1c68e209806a6639702e0576f52de0342ec90f60d1b43c773953dd44ee42a8d7c3c3cd02ae51dd50b10de1c57428ccaf8879797d4e5516c35f41a512f71d4b924f4585c9adca3305ea1ea3314c3db57ff06d033997778b475092f8b90a48a63e8290ed8f14a9d4ee3e708e6eb5249b67a725676fa089a2f27fc27f056a63306f44c787c22b544574369fe623bce9fc88453c623da4af5a2b3bd115409de696835309f8fbc2535af1438276f8f1f7dcdae350a9fbdc86c04bdd1ffefc6283372867fd368bef9e03804667026725061e38985b49fd16bf32fe62979fe628b16675eec7691b7df026699763b16331d2e186f6f198d124a65676593c29d1caaf81e57629b6b776f578fed6ea1419748d3f5ca6e0b39e5daaefa62224c19a6670789a62d03a791e0dbc9dcf63721eef023f300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bbf855e31e1b3d43eaf3170833e6d0099b07633aa24ed62e636788feeabe99fb1715233860975869f27dd645d17746098a47cb96313cb37474930e073f333f53288de3dd7f0310c8ad1bd3a4cd6a47e10bb8a20e2432317c07a02722f5ae6254bbe4bd50988ca7406d2f68eecb9552cee8d076a59ecd90af30ccedaa70a22785ac84a87c1056c4f4f61bdd5ababac09971662dde7f5d27d36670c85b48bfbc39eaddcd58b8460e878934ed3dc0a686cbb7100d869f02a8793d833802c6365a4f2b1419980b779a954d9b7b9c22aeb1959b5304743818b8faee96adab3cdf9c9b2df0ec1f4f34a55d711359a46919e7323918a2decf6a8141fc0ed51c2d63c2e6cfe3e9fd6881e2a621fd0b69f8f919fbe3227892c56aa50a02ee49c56362b480682398b51608afb2e25228f7e400992af2633932f1b0056afdff332757371869a193534b87916fb94895655f302d92362b73d3d28b22f3beaa8f4e38c9d0664bd13596da0690a123b78217c6526272e734a7aa61b2d531a3a2b7d900a19ab098c3ead18d7c60fc3844b121d6fce7c77606f8880f5c0c7f873481fe349ea7e9fbd97c9ef8c0c44bc5547784930bdb9bd87075bd59e4072876b7ee301278e3d4a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d7aa93c3bc6cd49e0a3c939ba6be18e63931506856125f5f3fa5a810eb25dbf2458b630b3874bceba4194d4861f8ed3e34bc93e2eb7de4408aeedda7e88a811528c894c9bb912e56db408a6186ee128595a28522c471118aa17ad1e8e6276b6b0ecfc9d0f0171d3c53c640f3a1c3a02d22580013898d6d8fa4222c8f3802d45c5fe477c36f0db1b194db7617ff9a2f7ce9107f5690598cb0808dc20cf3c6707b43633fbf72b4fc5f4d94b8cc3d894ec4f45df10347e5cea95771817765c121fc9daf5044d82a366f4d72e4a276f11e24603db782d3deaf369bec64ce901a3b81ed8660745f213961e7d952cae752e7334170cca27aa0ccf99c6400038ee0929616774098c832dbc200091ddae4f10e933a49e65938866095b460be1e758593907b6ce8fd52fea8f95b3c38ba8cd739f664264c4ff9ac172be92a0100e9feb5ecbc3ac18988b743bd60d428e4fc60373e0ca9d93db0f598afb41b326057f483d788425c12c865f8fa601b0bdfc83a2fa9656cb1d495fa8a00834c9f57c43ea108774af8c0993aa183a0f2e667b8eacebb321744ea11a63120897f4ad4b23bb28a37c6fb566e37a5ba741be360a8636e768df5c0bd9428dbfe5633a6f15093500000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000898090413a4f807028cd9888423140c364e51969fa7d9dcdece75aacbea7d9458542336649ec008e73035c84c2de35a4540e8293e3174842abd5797a5f4156042b450515873bc5440b2676be00fa5bf96fbd5b70d115a8e3542c2b3a8ec2a7076ff690f66470f4eab7ca3dce3959a50644b34b4b13c2c0b12efa1c68ffcabcf72657fd80fb8f6b2db449ac6491368e8daa021aae41fbca2f3a5d9251460cd38286e79622921805090f74bdc52c40f0e823ec90ff1338c8ef0a4d5e0073adc5bad438c77c14eb6be89ee57446661f0d86eaf826e7db7a729b7fd648320d8d54fb52222267f897d88e1c93a8c6cec9153da592674956e1f41457c72e33a0366c44bc02ec820ebd98155c15a907d34e519248fabc872277e72087db38fc48a32403a33ab8ab35dc4ab4d185a66a8672822d65029885ded7c16cb5c69fedca2e9cf20b1d46255d04bcbd81f7793b0776130adf30eb3c53ea8a322d71de0b8b6006d3381ff03b2e3aa2453ccbbe8411b62e2fd067cc6f93d949b5cdd890b781b0e4553d40e640735ee2d366a18b1a13afd5c854f5a143227480f39f81644c4ec820828c77d788a750164d6d704b452f38f156ad6bed45cf566660e741213c319708a700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d6644efd65536348bd260a11a0cbb0cc14454d6260cecade6530d9c33608a158d36e7cfb4ff250a77c20a3ed5dbb63d95e092ef50cdd877c267ddc5ff52f49abcd14688852a80747350ec15c6a917a7b125cc8421ffcb2e0a8f02edd3d49979cfdfbe066d863f6af4d2c26ac980863d46caaaa305373b34c7ad614e0277e441e6798cb3bd9deb4174cc0caa6be41eb678a23e1f733f05d20b85c0c48aea7e3bc75162e9b2cec7c0ff8a28edd3741e3e9115d5ba0f15f3e207ceb966b1055c3c0ae2cef487d2bb2bf312ac5ff5463bea224b2a377fe5c1c133f0af56e7fd29dc1b0a49f169f8b19c797d6b23cc588842d35007f234157d22ec616e78d4cacf3e5c4c33d1250f24be0ad4dd3b469d2cd5a00fad31fe452f2231704eb8c8774398bcd21043cc3ad2204321b9eeec1e35b44c304b2a2bda0bc52b0cff18114225b016fe3e5338e1cf53e609f139b9b6f6c141fdc3cbcf28dd06c12f6bc0decb3a701a917698f943e125e3370c2de38855acc398fa68b0f36226c2638f3c5fa0730c12eda95f9ebb0ee7488c9b0f1ff3b118a60d00241482a5b77216b0892414e80852c8d45c2b10df79b2f95ff4d70f9910a2861ef6b362989043c022920c9a05db00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002276d2e82359076816ec0a31590c6a097e977d4849c3b8b89e9491a8a211ea00224f2bc3b2fb622ed65697e69652c99ce5e52a017828dc84225215f8302def95ed1bee424546a27cffd25d267e842e725a77c7c69afd778d91582f67ade8886d9284f9f21e0e63c490f0c8ef4cc113ac84f634aa67eca3c615205d2a3abddc20f267e6c12efc0eaae18786c8528b836ca95363bd272a863235528347bdb6cd22fc84d0fe5cf6b7efd614df76e3a92837c5bb8c84c4cf5b6d449ce44143ea2bf342e19ac8db35457cf428268a0110c00f8f470628e82e71dfa98fa75967ad364eff174c120efe3f82a15c1df7e436650dbef9695fdaef1d3392f3b5df8055d1e438954af13eb31b27581ebf653d17f1ace1d1458f1a25d0a3027139689e80592f71dc5bcec646f5a7ad8ab84fdd1475ec12dea2e75569a407c7f37e177814ab3cd7c094c5378c0bca21b1d87fbf034ca15edec27c77a9007029af4a456a879dc8eaabb828c9f91c509388f7b281d72f1b3fc15706df051fa3eabd8de1c8f5e0afcf9e43008742314f3bf3c7ad528c59361bf1434fa5d83f9e5860b49fc414f8c12d43d8cc6dc2d5d5fc1cb68da262d079fb778838a9970d6b717b6977aeb9a7340000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab2e10a9aa2954fc6c8accfd6c7fcb4712443df572cdbf3ec60ee26664f0e3cebb023ff7a5ca2f6bd41175d595615139bc15e89b8bd0eb077c425839602d4c53d517155736d9160659a19527d5326eb0486d9f91feb0e401acd8aa0914f932da855e96df4573177f56f0ea28c87b73942c388cfb2327e6a754b40c2774ec667a9191e23b736ee9c4c3d33e3c248ddb2d11296aafe8475e12bfb4659f23589c1b1611ced49d335a1d7296ccceefb1badf17abad2fdde35e5e87aa9a50e00142c5762596378c75b1c56ae7bb0a8b893479e4bb0b7a857c88e49650f497b6c04a03c3c73a7abb1dd503bf4f70b4c087a0ca330af085c08b14375bad51607a9d44c283f7b1ee9eba222fe9762b5b1203ae0eb254824d0d030948fba17584fd982f76176fb534b88e932beee2639746ebea57c3458f71b34f6b22884734d902bf740efe68767f66eb6a1e024d1e9fd4ec1a479d336b12e427e475838be0b7c718a5333d877b9692d90cd8d2f4995e9f6c5b7b2da5466d39df101fee890d11e22f50899d6b75064c09de82b04e139c4b7e6d7b1e5c55b9f5f904f9b30afcd928dea078bf120b5930b0240dcd4693ee579d56f6919e070d16fab8f2a6e982284de342b00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000266069493a7c0e32003f7d5580ffd1f3df815ce710c6598e044207658a994ee65f39d44a33f7c2a84eabcb80972547b325ce3e28c02d18c3ba232912e0f0587390c6c3445ff41ebad0dd4783040464d7cc5baeb1322fb46a5e130488725d3b2aeeaafc35a16165a54f50e4b12153cf5c25e1953f78834eed70146eb8cb8309133819d1448b8a3f44f98870282d99b3bf8c8686e6f9a78ce2ea23aa101d0bbd6c368b0d88ef8e174befe45f5ec5b568dbb6e8469c59e980828c7bdb309dc4c913ec8ce1f25b036d8900f571da3995e28cd54d071ef32bb0103cd7303ed27af1eab7ec4cf8cf8699ba1304a8d72af579a7181d9612024c24b2868683e9212c9cb3bf540a5bf5ea0222e976982d913ce50636b4293a8676964e8f1a0ca2122a4077f7c33ec5519df18f62e97790b198b832b6dd1adf90d9c2370a38d5bfbca7807bdf4b1b603de377048f70716a63804dc376864d317e1a67fa9c9c64dfb4beb963e39b1f3edc8cd2f861461ccdf949b022ffcc8a8276f824b014e6db485baa38552c9a5ba32651c4a0951c4d22223387059ad65d0dc501f72c4e97bbc78d01aa6790a99a47d7586dd3c09a884b3367f66cb45adf3ddd9e8b0a7ec914016a7f711500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008db050c08d8107246fdc03aa6334a64c1b4aee4bf8270934113921bc01033554baad781860502c0b0b2ef15e22f3653c024553f39ab81ba1c5521458a95c7bc8a24f535182ac5bb7157030a7ff2393a20ee53923427f1c66b238ade4bb4a46c5df1a342b07f32275d490e2e4ebebb36d2d699f34c58a1572578602870d64a91d772f40c4f9e8e7a5b1029a9123807eab5187de6ac4f92a935de1d96ddb06fca30700907e05f79c407dc3732baafc642a6a75c200e39c04675b52f25cadd8027da0bd0999c590725173dc78bc5d8f8b896e630ccef2d1ea19fd14a056ddb86b87251b4ab4267e5f261823fa57b2c1e195fe092d90c15db70c77d558b00f5a798aa43cc7f69a9d490802941207f1ad6ca5b3461376bbccf1c510e72db39f79bf59085a8c6debc8a2036c4977f05c7d260e7f70f078bce3246632dac9b539efea74adbb6d9c0b2ad2232fbb52c237d0883a8bbe7cbd5e6463d022e1799be4342eb56957ffed22a96f18a41554b11b1607782153c6fb8e5ce3bb7362d59bc524c9b756c932ef00574132b9be592f63aa8c8fe839a7c3904d224f45f688bfb224cff5e29dfd373e1665b71ec8a4e5cd4bcf7227abf2b6e5188bfc6df66ffd78ec4f5f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a49be0ee891889726c6cdd2e4e2704a37c271b2d63826ae2b5853c1d42ff78c53e2254e6220fe63a791063d25400b2579dc2501186ea504dc0808fbe518578a3607a994acb5e6c8aceb7937bf9abf8ff26d50c9d0f1945dc9826add6790e0c290881520fccbe691ed32c205042700b95a1e215f1c279645cb00e6e547e28e712fc0b2e9ed74f6d3c53a01ad0b5a0f63a2ff349cdd45067ac1595ffcf7fb4c6cff0c7465227931916e9f193f4b1524b50a468a6d3bb1c425de44044d5f1db3662504322255800df048d4149103d201f96cf5cf8d11544d2469796d5a34cf32f555f886580806dc4292c39e5a84bbf5ef9045155954b48ed0ff286cc964b3ae5160a5d8665dd4ef1e11bf4cd5f5405eef020fb3b737aa453342b3d5dff217adab77b3bfa44a32e78d281140d29c2c8e0f85f737307cbbaac825d8f9518e63d25201d9ced3cd814072ea68e84ee567b399559beb0265a0af49bd69ab589da5759ccf7c7406bdb1b02888103cbe35d35bb1c1d75175334f18432387398927a7d55985dcca85977ffeae9d56922773d4d02c154e3806083a9aaa9dd421cf9f71c326576c45589937bf6cbb49cf232fa8eca548d63efca39d29dad679d451f2cd17e7d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000225211ce89db35a470821d9fd94ffffa4963b62d993bcac4a3f66c28c01c581688eeab21ae2b77c33ee298141a17fec43ad8532c0b16338dc746b0fef167a556a58ff0132617a4e6b1d9035b607f82bd91b3027cfefc6ff4a4c3890106b9654f396f76b79964c3b66f2a0c425bd17743d6bd9ec636c1adcd6d1cc7deb84753c656bdeb199c1426740f5fe6d5b05f4a68a16884ff04e13346c32c58ac243dd57c82b0f66392621bd04404f196769d9617cfbaea621ec4f5bce439959f99979dc2e2df6dc7fdbb3d4282ca6531cf610993fd1da1595027a3d9115a8c98a2efa21b9e142c2c37176a659c6516581d449e64a0d156cf0f21a591d7f28f260b4b6a2f873a0920cd5530a43a298272f08d95e9a943127506b69e0b3920092630a610e0583b71022c6de457b3dbf5908755be70131749a8c26eda6e0f345e123eebe32d4d6c3945c0612ac191d24d7d8271bcffa49c08e11bfd9171370c3f97265cf649e4f312500df0c20c5258e2a1026aad9a21881e4bfd59d3618153ca871dde4d80d5c03eb1b9e556f3bcdf259be46a0062786b15b7d6c98486fa3bb8a57d13feb5994333cdecce4dfbf3d1bc4204a3afdc2fc7a412c8dac83202272d2c9b40475300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d00fccf1f73c8432d6bbc66efa362fcbb96de7f801a97af7602d070f9133924787f6707c5ee92b10f7537c25f5a0917ef4099c98769bea0e44e06985e6d7f651946e9f1b841a774c30279c917f92eecf61594bbbd6b6ebf3e559021ac9d72b21bec2e2388eb3225b0f40d3127d29aa34c83c4823af113203ee01fedff89d3f7f4e29eaa65a830effe3e10b0cad6ecfb85712508be16dcaeadf45e4616c4cdd3aa57a079f72433cecd77fd46b328660ca592d85cbdb7f3eb0d2c30c77f25ade4030a2ec117fff6a583669e754ba7a5acdaa047ea19934e4b9eb4ec2299f4d32f58b361739e11dbd2e4f573f858b9a7f42304fc0093ea3d72d301275935dd667eb52eaf78a2d38307a072b4106069680b87df982b3e7493684eaf9ab2c8fde5ba5ef9836cf8b7b6b1f806f81b6f6e2e573454110f0d698a7231bb8b7abe5c264c9268f0de04fc90f5dc64c8f06a45d52f96b9fcd7794ba6d450c11dfe5a577e7407b60a86632a7147f8106c2391431119a81690368002ec4060687c6cb6e3bc723a5b3e03395032104a731c10353cf766aabec14da1f4be4b55b2704f07f9e40841bfb7267d30ecc0b057d1eb168359a6b34455279e78595e54db95eb5f54e80b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001965301ce9be21c4de18d9baea5b4a3ec36c4d7a0023509b28ad90875a145974d1f973f7828ce0d75150fbf23eb3eda777a4b3ecae180e3d47fb72173b02d8494e163596642a7c1a3f43bc1f9a50f77639b99af6c13f427695d54f080dbb85e897986e73a415e80cf8058526e165e29c5550bf3039e08188feffc64436f9bf07db994a9c73d0f9fd12b8176c41dac46ea5c55b1df3dc92f37690f7309e37a6a260bcdffb2b720c9377b0d081f77a106540dbec0d0f617dcf996967246cc22a6eb2168a0d95a1114ff8feb331f23528bd9ef32a7c60de7705a15509ba095fc255070d4e8ddf503f05e543e8d2438beb5df850bdd698a658f1e149e9167bb25f63d2d4fb563ccd29502fd0a01f0d68e479bafdf868caf204478567b5d90cb0270f908d7622af215cf8f17a4e63fe4e9f8bb76c15c9b8a1cfaa146c205659997887ba7ac860165e4858020bb92178eb55effc533ce33fc85bd221387d093a21f1880b77b72c3a15588cf7fe5a51facdfc8c9ccc641768dfd7e0abbae6c5fac876a434177bd9df2e4112a2eb04aeac5c1a3324c22ef95fd3fde5d7c58dd8d5c6ff4aa84885f90a783fb54d8f97637cd6fe730ceb727928c4e75fc815bdff59231ffb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a11c13ab8cdfe7f4a0503b24a5d448d1f785d66b1f276a455f8ac22e773bffd8043738be0f9ebe9b6862a23ca2d2e6a83a29d647e3b9f76dc4ab11fcb9aa4c8391ff08a340a0d57606a5bfcf431b2008e9eaa846a75c59f1ca73e2a6f9a3870443530f348b837757e376f90ffc94c6dd1f52b404404d9c6d06d3a5f7c591fc8e6cef647ad7652142c481f810e919a2bb846bb8263a9171f31ee4d9ab4949cc9bd895cfd9fa76983e09dd26059eae92907bfe1b34142beede12ef00f9a217d3b600325d284874309bf3e0636e0c66f070cdea0458d65b017c57d93476b00195c6bacb9f7bfda5c6dc31b2743513000a2ac8c902dde8261d7ec0b0e58d2ff995b4b6fba233410994df2cee2c078051ede1b276b114bed4457f3d24f9c89a68a90a5671194aa691d4a8beea3598674f609bcee37addf037a7722d5b0343a976caa80d9b3e38ceb2053c041b19960823ee27e5241fdf82f4fcc24b68521c4a9f58001ac5e6ed3dc8e14def158acd2bb6cb4948d66a16debe3cda2256587cc406aeb1ee14e0a04bb81d942e6271cb457f5180c723325380f85b743dd770a9fa22025d1a6eef56b75c45179d316d346361ccbf19e6496551bd29657a74abc38d6022b6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002169ad201bd7148ef52290e466033b6ca84a522e3b77313175ecb15057ba380fef9ac1125c904c5b001e1fa3af990c19dc0446fff65a588d248a404328c7852ab30eaffa08f0b7b749a9694bc3e71e93bf5a4319053ac50ed54cf0cf7a114d3af594d7736a4a4d363bd213010c61edb0af0fe3b4dac6dfbc80efb62482cd4f6b6a8bbcd8730dde2368466db70fd1fecc52d4da7375ff71544763e86d65613f9594aa0f448bd2dfcc929a548147ce2ac4e151a93908543b3332ffbe5ee8cac07e6229f7d64484a79a14c71c16efbf45fbb0bee40724787aa0983e181306d38088f54290d27452b3c60da1983cb64334fc292701f3dc01de644b8e255d9e63495b0de79343ef4b1638b06a9e635674f1870051d089310a07b3eced9ea8adf5d640c544ffa105f564ced07486bea562d994a46127799772aeb75e5a42aef222b34189b6fed023249f820eb1bf184660dee3ef66a37c03a68db30e947accd4d9bbc919031ec4ffdd681f7b73e152b052446f07b5d6e0a66f2d82d5fb815ed18853054cb454e6aa0e72e287550ee1bd286c319195cb87b0b9fdd6fbcf3266ef986b0448513305fbe25aff03b7b7e5a35c988a078a6cedcbf002bab7ae1fd4910fd1600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001aa1548b9f038744860b3710c06f89045f8cdf3629f3d841b9d09d29664b9bd5953c3bc5f478a54d3690d1d0f06d8afa93bbdd932f06120cdb42e3aa5b575f70337cf59f03849138412c490caaf7f3804917fa828d1387bc0f52ec2f89fb4e0ba0dcfd66a46c7faae1d985f0f26e5701aee2fa94ddd8d9137ef59cbf31865c08a8166abe743882a5f4431e9704fb13bd4f4915650b5ca46633c481087755df84642208dcee65d672c0f849234a44cebcf6908451384898da55ee369cae83f18a3a99bd04ce541c095668835c5d49f84508a6e8f475b60a5b3e72bf68236fa418ca405e6b5c0f27032f8a3c1a5eb927b021b85a061a02059ab9f3aa7739f988233e7e4d38837932c9fa484aac916198783493b35c21f804bc99d81554b3076e36037daaa4a5f77779bc6bec5fd6bd84b7d89375b78fbaf54a382e3553e1aa61889fa0fc596eb6854c63b6b676c5ce524ce5128685e5b9dd018e11b292041a73471d524d1bec9cf7c13fe70b00bb7456eba01eaea130a34bf264d61c2763d5f3bcffbf3f79adfec2efaa1197ce392675b2d130bb421c660c3c4f412cfe3332a0bec87beedd9e5917b8745b33237496a59c68beb4d67fb8e0c6954369e9dd9827ca00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0ee03808f5a92dab110de819b8d56e439729e5361ad390dfda7f7172cb435fceae83ece3ea33e744c131a6838cd34201ea87ecc9a43610aff8e8fa312b928dd2e653a2e5521cccd6cafc88b92765de0138c02f4d67548021c1ee603f83c00e6158d2765f280bffa1384f4a33b1fcdda1f221b07b4f7cf8c68acb36308c7555fc73f1e1d73e341bc66c8ae9c2d081b3ce8b3225b0e7b070df52c08decd49b88e5aed36ef0ccc02550b3124d7e469d12a6493f49e6ecb00456e158c15dfe9ac6187d97abd7d6940d42df7f9d1a37c9a3606e41e212533a4b5b40993b7af36f230b7d1a7902cab644e0b3d14279eb4623d05665e94f51ab04726c7c3ea7462a1ea441ca97b9e1ceee30f0901bc3c904fa8c62680a5fe046e1185f0f94c9866417154c4555a173f58a3f9ccfbf9d2798e28e92bed1f249a566bd9030a996eb799cb128dd9a31f1ea8a12eeba57512f0e13f1e2b63f89ea38ec72a2d2a4ffd01c61b54ea4e56e6d302716347bd16d4a75678cfcb7b8db7e336e5a32d8a13e43ac43492bd8a2533c9b9764b1cbfa9fdbac09165ae13d8a0ce5eda028b6f48df9e57b9f89110e05cfff9a64bb6a28832a125433cd5ec6d3ffdf5ea906910c77b604c7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010ece8cef0c2643163b71d1cb5230cad0f4ab8032280f6c22ffefe8bdefb0e6a0546b6c2a9a179466dde639bb3c28599333aaa046190ccaec371068453067df765aefb8a1a454f852d177a86e3c9cd824d7ccfbcee2b2f2d25d4baee02b7baa5e7b6f89da73eeee464613b8e78e6c50d968eb74258aa5936e556a5bf37279ae68fe944cc23ea96d522b64d4b9cc661a2bf12584f78788dfae9302c0476c2408c3e57bd35e62d4a2625e8bfdebd80b460dd46d752160afe9ee2f13d22dface3b7b9e8b0a50c32679d25f8a4f2abe861aed43cbe008837c57c8dedd8efa81579b60ceac68ab4b8a28c9bff09f9c7ddeb3999bdf251a26d550e65af418821978d670832b2acc904a7ce1ce3630ce52b69f1fcecb4a39900209fbf0316300313bba98e8d7f343c9edfe9a241fa097db66c75fb3132fd626645b9bab10ad85af3afdbf95366392ee5dc599191c8c84838e8ff36430aa0dd456f4b2be0db3f60f6b65ca4cd149b924c7a6c44ba7049b153bb16ce5787bc0a75eed269a9d57506688fcc21e5b24fa78fb36ad4a8eb26890897c03b18e0c27dc881dbd7317a9b6d4158f320eba90098635315506d3965488cf9f48b27a99d931358d3ca9eee70665dd4c3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006db8f88b3dd36703d0e4bd804d248b967f45e9af7fa59f0b5d67af265177678df3f0a5cbda5af82c6c4a5d64f9f1943b874be57d430cacdda1cccd48d26c949eba4d56be90faa978e9323a761eea25fd961b0a1a8a04efb3246d2e2a9fba29ff720e59d7657fb2ae427f655ee7e0c8b0a1fa9469cf92d1ac7e281d4788f1c859ab741e6367e43d652ca0ca3f27a36c00088f8e17ad9e8c6cc5f3685aa3af3fb705892f511c1cbfc779ffda124d25a0f119402550d82ba9ddadc0592f43fd4284039ae24fdf8207d9704dc21fcfcd7ce510e7ba3ce9614914b4566303276b3eeb93ef17187921945f3860cc205d7c9dc8fa3ebd79e0978e0d1f7fd94972e4f1013a81b63e5a8afab72264c2952d20eccd9086aab27a754d9fca5ca52d12d2e460fe3a3497d37fedaae0739af5d035cc48073c169f661cc7ae978ad2f4f5949c45e5594bdabe8e56267ba2341402e9b664818abfac33bf8cb2aea67719986833d69aad77ba5aa8f2a18797b8e7186cd3350b291db4980c9590e7fa3fff4fb51eea0ac265b2302abdc44f1ab5bed485f28f83720849ad3d92b0a79c2a05fdd82b2a50a884e2b5dc3b28b0b602acbadc275dce237d792571ecba0bc1f671c262dfc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a3e5823cb68cd936775374474d3f8c29026d155516b96880185f49de5235d616ab5b2be9851a2c9e2082164555ef120172d2082e792609bc202cef9cfdbe4a284864f004b6e38183ad5e5af61198aa16e41fdc07afb30443b0819efbcd14f6a3fdfcb34dd8493da9279e3da5a27f0892600207f6126e690e29cc8711074522e12b886c0eb83eb158fc60548dde387e16f5c7cf827f3bd7f1db584e05d16be0c8c9c2065241f6ba0e1fa948abed0310f1c26673c3bcf2993f039935e17278076d9bcdd0dec66dffb36b620bf7f0668f15f1e1320001297c6d0b69ba4bef4a100017883569d8064bc2ffb3d518134a4c9f8d479de8e9e77982bdd0d9cc8b304271348760444e14fbe59c7017d37437f023752cdc225741cd063f31af508a1ad9470d89f839901f1058dea1e1a29412f4903762cb45bc7e712c86d1bd24700101fe21930b39b4ffef16573a5a92099528bef735ab4944b53adeba0fe8f229bbdcf8e9c0364ae463e65d9eb4787f22552f85c7140aa49d2a9ef261778124531fc24ebe7abc28b17bf968fb7af02ce25121043925959b7fcabaa8f06a14b67ff3d127f5602d350fe19c568f3abd0d90366ddb69e6d9bc1397f0803a39cced42e2ca40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5332ff2c5d89371e1dcf8a1329dd130d384e29b8a06298691c836a29311280d4bb8b7d286ffa763b74ac79003383f17a1a1b578c72aa2c9e7ee54078fec13f07ba3806a06bdcc7c768de96e9c9cc40aaf5bcd2a0fadbbb84722afa321c0782c4fcf9338de9ee39b3c90c7d7c7f98d079398ea618a94d8569d6cc8fa2645038e6f2dddfd00f0264a9cffb13aa1a85172a3cf5f730a147f734d3bdb7bcdc033d10b394a2f866196867f477d2133202d30c5c398106f705a2a818b8d6f38bc2d55dc4b4103adbbf7cb2727631285a73b4a14d7ae66243bf60e52b2183c4be198ee864161fe28a206dfadae5e997850f439429f8ce22ceaa81f43278878d9a5e7df41ae9e41d92f39615c8f27ff265b2179d348ac8bfb69e91a0e096b37e211ef307d703bfaf749e571ec6a23cdc38fc5d33c6df19160454d96c043fab813b7c13e1448178499ffa77c3cf45ea7943e461a82226a1e93eddc2a38d0ef319a9fb9796298d996eb0a042ce50f09870144718addd57aec824e5699a2bf6ae7972b68d2c5a5e547d2e2c3e867e794f549db22db45571d026fd1e87707a0e6c652a335ed2549df90b69a2ecbab7a00d1ff89cd9acbc840270fa9cf7d5a7afb5a4fd7687c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a33030c3e606f47f0fab69fe82bdc61a12803aafadbd5e7e6cc088ef3b947b8acdde40d47bdee159b73d7403f32798c4d1f408967cac9458a401c155a7c32f1d0d60340495591330f4f4aedbc0b5bcacd62651363136879df73affaae53e44df3f101ef474c15e2c2c460cfdbd5f9bb3bbe225c740c6995eee00a707930d22a160850f9e6aea5b301b40d305c674e93ead16435906bd0ab4ac0eb5e20f119802dc36e2bf183c99fa44d24bea1d47d14fda9122784529d1aacea6c3b21ddf10b02b92a000041cbb606836d3bdd5dbd775491f813894a0aa649b1243846273f4b379b620de089065b5aa2c778ab17d7c2886ca6d3d5ffd5635c776de450da788835b53768bd0b8ed058eb12712ef07c00cfab060ff212814659ef448f7ede107f35e362c10202999ab0cfa8f6014c70bf616c86f383e7fb3a547ad2c6140be2bedbcc83cecc44c6448edea9b71d30cf41a08d1cf9085943222c5de0514ff4abe3b1c4509fda97c57bfaedbffdf7dc304ebf2c50641c33cab96c86458e94064c40029bf3c143acedce67b0eace3e25b511aae863381a7e70333ddd50fa20179735d3750934c88529bec2fb94a52e0edcb68a4afa604e8c2257b353647e16eee07d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001263cce4335639326b1ad5c690f7e3df644515e0fe9da24ea0e78b8741d38c26f472d79ba8504fc8456d76e886c81eeb19d994e3c216a0f18289cac8a3b7999a0cc6e36aa244351408da9ef28b53e6bd4f2180c2dc2056a0c77cdbc8c7ef21b08862f2503fdc680d4422b45b893de1adc6e930fc2bcf33f859d31dc5e9bc8d74840f12e237ef1f269e58de1749f177e73cc1e9f388713d035ca89898e87b066344d36704ccffaf38fa0a56a589652a8eeadc9530b40a9ed89031567e37bd78ae81cbffe56c88762eed84fc2871d2b038d5eff37d90f49fafc8791ab73c2e90e0111410348a52c4d8a2d5b1d56b60eb0fb88319a6fd3b53344ffd5a7eb9318fa5d5a65009d7f4012c08e143b0e460ee599e51102a314e6bd95b7176969eb197c564db9a4b0362c5a28e6fa9bdd5593095a4b7313e8ef95715b9f2ad396e31b8d6014796b3344c8781c1bc0f8ec078ded86b53f75617e44c90c2d13ea05cdae7768c1f3c9f5a01b8482e753c4beb31f14d966bc4549b1c093da3dd022ab8e6274a3bde284d49ffb1e203ed9f02178a058849edec4c39223ad5e26fc913f7581fc2ebf1b1aaf800c355d2fede913495c3ebdfaefad6573ede899c963d97802e7ef00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5fe0f217dcae3281939812dac203a6c6e3b72529f3172ac73a18d8bc9c8edd8fd0f072bd53bd31fcb4c1a3efdd53685ea9e79f8896011b4f8f1999efdce3d23bdc54e314b9c4449e9850d06767d3b866cf6d4a928f9a57c2f482e0f6fb3808ef392354332cb03ee8e980917212d9f58b07d0b59e8727853698a34820710b0a2e29320113204c577d7c72fa986b5fb3a0a5c42e90f22e320edad49e68e662e46352d5b76acb64d243e2a1344d3cd6cb2b6ff444fb29b25f170301c3e314dd5ad65d958b595e08d7ee9c6ec4906227b45ff65b59c2f6ecd77a258ef4017dfeb7d77c398084a0f907f81cc21b15532ad52dcad799db650b41a679f65a5537527a8e47ee57e37c53db11d118fd066509edafc6459975706ebfe8f11ffe6139e94c12a676ccdf96445a363f7248e1212edffa68f5ff7536190d8710ea17eb027bcd04f0cc204c9117bf03f70f9b275dacff125ca044525eb15eb09137746b979f5c59bce794f815104fbe3d8610543a986d30ddda6bf4799d5c8b0ef0d79f3cbedac9e5bdc8f2056712862e1d9c4837636dd71f3b3a45e8f7266b4fa96e1db173581d21d7feec58ecfe78be1f7a76d5683bd21696f4aa06404ca76a8a7ea686f292c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000188d67f6fc2b54e0392627842c72e4fc7e3f748a39d9e03bbd0de92984b45a6791de5da79cdf164a603685ea8add3c7ecd722f0dd31ef9d5b34aa7cead20b250050af9d3fad1f0ed8443e665128a00d6246af630541f1a978221f5f1067825f0a43d459a8a25b391751ccb4fbc4e95bf19f2fd55054fe5c92c0cefb827b47841753d873b191f037166a59a3584f8cd3bacd806dcdd659b1281068360d17d923e7caf407c24ed794c5f56c349f90b92880655a359cbd53adf0e03ca5d0f6a8e054205d913369093ad16361e18103606c1b608b9a9cef6be2286d94ed25bb4fcc64a8fed3cb5ce798a64e6ab1e90ee2facc9c76227f218df20a211313285ae2ce35d109552baf1a6064885418ff2a2eec91179ed01d7cd246f1453384254cb0d8b64810344ac6e2128193596ca96db00712218cda2b185dd13e64240777be9627bc4a19af72ace47a074122e9fac77e3285e5560f656d7fb7676a297685834a89e101c0f1b9c851b0d23e15185f3ada199d3290f917d4e93a82b9759730b69f47c64c3ae32f05233a0d5cce402abb8eaad0123dff14030f7aad137da13192dc42da5b4025e2b59d529bd3f8d0670cdf442f46ff8f66a2c87f066383e89e82a45060000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af60574bc40d39dfc068733ebe9b3a7c98782efdba993978e7994d3a41ca4daca9216fee7e0c4966050ec2cc12479e0110e1b33b8bb4ce37fc8bf4766752d56af356da89894852717fc7b92ea369b7b76637858c8717e2cc71ce942a4e03ee97dfbd76332db4b1712b01732a87bbb7c63cae5bfbde076d21847f682e9d15e84ab40fc808199f69d86d90d9e8b0abddde6129c8f6923206bb01ecd7c3007adcb9fe95499a0ff6e9a05c13f8d3d06256730e75f0d17771c410353a270f602a7734b33d75eb52e006c4f9795241463b67aac820d280c9c1b1e96eb1904855587877e2e9412e5649e8d36b1c2a69a49767231b57e44797fe02f2178d5f60b9ba4b2c24b677e7896a37b9c24ac6a64f084080a059fcb277ab0346b37d4a2dc9bc0b7f081f21e537d78746a4868d91324801617cecdf775a684983abb57bb7f411cedff2087213d396c1440b15ae9ef59c9933529bac315193d7fd9cb16b241b9616bc9ab81af0df3cd9a2898c319bc972e3625716ea7206fa317e3c56c15fbcfa9a804a00b8704f035a5fb38038a0a08ee00f481ca0dcc6bdbb2db24a918dea23984ee711ef58f20eaabbb4ab9072cbdaa7ba6399d9373fb5ec6ee68273df3bde455a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000165656fb03564d0813bdbca025cc98a7ecf80469985fcd7a9d53bf73c72ab2a73b0e75ae6be672d3b3d6748a5a7750c2e55f456f180f16392c4ac4061bc0e97c9b554f4270ebcd80a751250dcec2dd88c074ac0ed55ef5d39916bef682406dc9bfc7e0d263be87b0c1f2e900a712e4ef1a207bcf61a4919dcf303227d0a236c858996a11038e95980a7345ae208d9bc1c760da1bbeec5149ec5b062e220ab283041f794a05682b8a65dfb50d830dfce7ef833a0c814b8250e7928f3e8202e62a11e8821168a4e587888cff378f4c3c8805ea8fa4327e2ac5e49f4aaea08548c4d5430eeddb42e820b18d7ede00de00b5b38d36235331528df80a145dbad5d9ee2551379cf78326cf38a0a02d34fd23612419eb0f86d0f932602a10da11957b782199f4a8b5fa0827cebfa6fd3522f5120a924b6957a1da3e36b0bbeb700e1ddd32d0a5e7435aa52b75bcd7a93c3f749ee6bd93476a9a3cd9d433d29e70ea77516fd6ae38843ce466af89266d5e497c53a88e669a63a384242c9dfdcb4731e34b2327a6736896a965e677cc438fa46a9d7e1d7587445ae41bacd178260a5484cd947209018cc1e77e9576aa0ecc21bd7a6f7168146ff873cea82ab47a43a34df200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a83e7d8b2b861a675732ac8b4007a3a4c8371153401ef7996dde37e9e12010bc13c8ec0f4948014e4b6b3e7227eaed1a13929b01adbbadd7b4f409e25062865c0c36fcfa34dc39d3137ec2854c6e3fddc937dd69b8b9e48f9353bddc530ce07ff0199ba9222c3b946aa512a1474eb7d4e654307676e038b84bc3b34dcc4f2a0c77dcf0d093cf0b7b08a93f85684e520dfebcbd7f332b3a824598e8a85393811e7ae7c39913547eb333882873da01e44c5fb8ea6424248d38607161cacb89900e31d4eb843a7d70b4558a3f2b085b31c6a1ae1f8490e9049193a79343ca9c745e5f4c3fa812c218bdbbb0add1676f00ead849c8358e7a1e8370a6bb975cf9736b4521410e2aa86ef01b00ff2a321822fbcae6f1a8ef893ddb8a150014a971f732dd71d5564ce23f13b5399357b3d5dc61338fda41280ae61a3933b882993d4246cc5a43b62bae403c23885234b0a775114030a835ff3f8ce565069de6548df3f305ba19a9a1b6fe35fa67e4eeb22d6b5b49c296d71dce84d53b54e2e5c6cccdd0af34f09b5eb37be362b63b6c8107bb4ceac463de7cf064be3939506ddbe3078c06f86ed1d5dc65b83f1412bc19e1bdfe6c9828fedb93c05a435d684dab44c5600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d590e975e4a62e8423f8ab1ac8274811c824cb210f2901a4d31214335479c2b3397286823a06b599631cddb63ed9ae5a9f2ba2d8b6bff9de3b14e14c20a4e36895dc743d384b3ca08f419ce141ff282a648936c1b8e52ccb13f38de494be2fa0b12eb3997a0a8ea173063c9c2665af7a52f3afb9d26bc14a9ea433bbc982b27a13b0ba8d7af17cd31f23938eeae072e8fd148e60c8d7e6f10873e84037d86aa53bf569e8f467de83eb29383b9d8992834b603fae6275ba35d4f1c605c69301159c2c62df6142d039edaec84e4068a79f63120df031d1229599b794f71d5d81278578fa20dbc934e178376acd74c37aa0b4f5ceb3a26d6f1609539fe4422c6701bb1f21fc2b414e817399b6770af09aae758736123cdea438a9f180599eb8f03b60689d85de4cbc49c494593c2f916642c8f708a44ba44ee20b9d716c747854bdc0c904f6254059b9d12ef940016effe20b58c95b26635f5f44179ac59ff4cdc80a63c8cfc386466c45e0693746d149f069db785da1f984cec65a7a46367ba6e1dca2e3d098424a7e94d9b481021d4637b1373368d04ca15a12f8a17c4ceadefc9bef4631bc10915372f534929f48fe5b3a63a11706d751a3254b357b45c22f60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a42670ffa86b1c9c6d85efc1b33369e871e955bf52f9fdf0a0c11fb94ff33b73a3e465e049115ea71948eea5679fd3591a7fa0f644868c92103abf8aab29c69259482c934ae14fa797dc53770941482ded1f3c44a5e66727733e317ba725e011ee0b8771d530cca08ee7b7ff2d091a8582b35eefb49c3a0b554c644547e1ac7d0def5b515479dd1fc5ed3d3a4e2a89d1acc921708a0d49d2327dcf4ea6af65e3d83d3a1dd8345d61f07d3b0b1dfd0b18edf7d5a14bc212557973f29fd7418eace54d4e1e40ae2ddb6890be4251ffb901e2e5f737695e54bd002455d2553dc48f043f5a10725e1b12eb57a8a0fd4b46a5feddbbb4bd74295762f6e0fb877ea0b0e52995db6d220c7f46527006e8ef94965b786b08b32054d003001b78dbfb4dba6d4bf2e54697504341e4a7eecc563530f9e43e0ed10f3590a68cc215a334af1e095fc74f10c18907d9f58cf97bf404da5009c8c342002d9591889effa883b7a3d28521452d54e90c2f687efd5ec754fd2c2426ec486ab9bd5552fa5d5018cb419217d6eb864c35e6af14f89b23d98b0b1cf77b4d18180b8f4a8ce0a697019bae7527ec0fc31eda431fd3db197c70a4df61a165f35270a0392c40f62c5f9d96ab0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac8b8a04e7b9bc7d58e697e05217f71d56552870a8d07489940edb343d22d23383784ea64f9e7b8ff758cf63ca402258d581e7cb6ebd732ee77370f0b333f112bccaff08197b6c19c92a1ec97f7fe852d76cc56987416f4f68f5a850183b83a7d35957831db84914cf6f87e31eabd9d66205115cd783a97b1647f8990414892c3706b47ea99ad749041ee4bfd0c067daebe57c462ca48f0c89ab3e998550ee6a272ee69b91ad5a407cf0ba769341d4eca8792b1aa9dfc4a8c43a63c98401abccaeb7b98a7a9934de2f4d926bdf438ffef8763456f4ba59b11a939babdd3f09c7b1f0f5c4088f5b455416f3296324d684aa937dc95090fb4c6518dd33ae077cdcc3352ae7951c006f3fc557ea628efe926f0c9fb216bc3d02abba600cde9693aaa603da08ab5ced19b2c61275710da4b6fa455d5b473f87c944c0b3b6434fbf8669ece58958f39041a237c8f7b717d190f547619e18a83541a53f7c1e8670deb17329135574327d7f1ffa857a339bc4f4e096ffe655282ef9962f1cd379c28c349c4fe36f9e9cd99524e0043f7c2bfa24593995231bdcd9f0d404daf89e96cc260d86719ab7c5cfef72c3041f9ec6b38e851a264a06973065f757697de33fb98300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b9ffea88c3d8a153ac1d7ec02a640c5bae5ab535f1f3fe5d04b360af45e478c48641412da03a4ce731b285195c323fcd33aede42847556e2999a74cea1ddd3bef37ba680554025d74369d79f746d97236bf05404ba9ac4f8ce15a8dea1ecd9e6113e05ad54f628323f0191b27227e19d6840f27e54bab5b4d085c914f1315712887e5ffe3e084b18861b823cb02ca1e95f3f8089503c14ae13996d15b914cb347710d35a8fcefae552876e24984d9fd13ed60a265bbe26e33bff3b866c44df9ac125818048c051b77dca47fb797fa562c2ca52f50f127fe5c2c8e900d3e79b08d4f5feb1fc90460d30a8ca6d6d6d51126f3c541200755b313e5ac9d9d35cc6fc87a40eb3159dbe8a5f7e1cbe9d0bb6f5f71ca6a600cd9e850f6d0f47bb0809f2ef1a6aba44cc19d66aea1b5f31e9eedf6aeb0f9d4ac152df4165de02c78c26e223c68edc5e6c9f3a85eaede9d807e2a226b33b6d5db8477b84bfbe5b949862391350bd882ed648041123418aa0491ad60233618758a92632c69f4754922996a27f38510b82e03d429f67a22db62150e61b7f234aba53b3e7cb55506a5fe756ad6b95022427468b9bee7729a2a58a04a73b8f20a392a8a85b9c93a84e652f7a30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aed141818a7b7c57485ce667ab8d72ee20abcf507b5c3263d009b40ea286ed0623bbc7b6d5339c50d1c8c99a45f76ee362ebf3526c6f01991ef3fa77748c6056a6df7fa1b56d296040ca85c3dc11e739899100da68eaea446c4a445c8e2c95de30b42f16c00984c081571054e907c67afeb52a1063a856e813ef0a1eb851b02fc2e350ed7098bafac25beefad1830ee4072ec9a57383f8faa5e705f5b543b4f5a7ec8d8d138859a66183391e4f13d96b9ec29b4e9048374ef513113dea9c370c4ef97d09dbbdc2d30197aaa7e4a03dadf62a6b2f9fb2cca34dea1f636b92a401032f2cd73a9498b7ecb9e30521705b4e08d8325ae6806aa220ff8fec5fa09a9b2c1a5d00face449d251fcc3bc219c0df0626186ca34609e584320d7aa7b271eb9f92cd9727a64d39a1b4a3322ea06befd574cd4475cf4e39787111766b7c3f16c0f62dd81ccc4fcd16e17ef5282db62b8b3f80207631ff7d221debba0fce8fe4f3cb6e9b8b7ef911ab94051d4885bb9c4de97015400137221b7e681c69710442d13f678e4b728df4645edcae2151ec50b89823c60c2bf3fba5611f8002b52cbaf9237b6c0728f25817733643154e44401df591455a9a81780fee7449edb93a45000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e0703047f4f6c12fe4803a065ad319a16532a20dc374b68596c8c6d1606e831252b619a741e82dc23c7bf6fb3767f6d3356b9203479a14634413a990f7c7503f504808ebb06e0a13881cacfb4aa514f179a0a7b04c78fe18bf1c3d8d8444bdb7f93b392a04228507f3611846360d31b29482404fbfbe6163f0eaf7c812bfc64dd563ef203053c0287d382ebba91ee41087e5da81438650aa84181dab1a6d5cdcab1dcf97fce8f6d2b50d069c32962623a4ab41d2888fa9509314535ccf91cb713517a6de917fe5708449ecd6530d5d71f9fe848aa82f30999886b9dc14bc2adc20f4aae063f3fb3ffe8de7265553d0a7e3f3ce5b708fc01a8439bfd14488288fc01010a1d5bf59959b5b5ffbeaea81567edb9fa4fac9b9adf1640c349b0f81a074cd3b27016d127832716328262c46ce32fa9d6ce9e5698403df5e5c402450a89940599f27ad4a58db1038a56a2f0576b23cf7a5b678a1bf85d6f52290c217158656b355c8711975fdab27400e4a36f85e4253ab5cfa218bc196960953b145c0e6415a8b078ee5eb870601a8907e7f1f9ac1616e1ae5bfbca3e2269011b2569ddfe1f87666600cdf1193b27c33d9d36af97771773f2a2a9ca40b09c83c5638000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026f30f2ac1558619b55098f56e9d38d6f8ba2df15c90f719ecabe325eb0df1bb5228b33828538086042ab0024b643ed1bc004bd7dc41aec47dae90032e218cd0a0d7137f45ee41a28c09924e6ddc90c8b757af5df1428e8f59b9206639b47683cbf130be686529ea0b3002039d3ae5f695ee9726476bf28e4eae58643c64cae00d554d38bbc33e89af1125d0331c8e83c2103b80145d9ac8a413ab91b6c27ff9b234a12d595f1651331d055b7a77fadcdffa6be4f3a692b78c29ade23a9a28b71eccd72ed1876b88f0459c5fa2d3699372abbeb9dffa1298211e257c6b2f1d7e220a652094e54715a1a8af03a060533aa0eab102ffbe7ba073ba75ee468f6559286fc0bacf4ec1bd02519ccbca98dd371724538147b9a8956b569130ee9e8966af4cdb173db0f2011d3fab7598d0ac95c5ce686735c392bd96cd7ea79925542c21b2432f57c30dfd5cf5a546e0159ac3813177f93d395cc446d46f38be284a57dd2d1e09ecb0bd239db8a11f816b3eb5b86bd1c36ce670c25f0b9323888d86143396ebbdb4b8cea1f18a73dd50af4f57ba42aea2bc96a13069b4e43690d94c22e035d9e2f35efc984dfb35707d8191097ecf9c2748f62a99cc9d67c35ccbcdf70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000956d9b165942bb9c534a12c567f25d1bc49e477e76d478d8d72aa1ad428288e06a3d699d9bcdf934a7c9d5a7cdcca2b72a3d9e6405931dea8ad8bc95e4085b9964e782ad7e9b4bdb1eaacb3ec74701eaeac01b9234ece783898dfe309b97a855ddcf8c31ada49bd686d9190afb4a5add1c5a8065523c7876eeff6111f85b537357e87d85335eca62cdc2e1d3210507b673953bf30ac304bd7b7d802289c948392ee5ee665a3ee21bac9058a9b44a4292cdd38b9ac9043b6c342a324308008466a8245f1640ffcc5ae1554ec4616cf286eaecc2e4e6dbcbfd94add1e9679c4f4a4f06d275f5444133f5df63bc53e26e5403c2de2435422a1b2d3bc0fda8b4643bbfde4262c545aadbedd4132bee485bce474f0729ca88a2a3c164734a5b5785213d4ae69a23bbb18058f8617d23de15c588d05c010ef738cefdaab64005c99d8c7536ca241b11a0256e69bde04d62361eed44d7ad6f551c7816a3360fb5fa23dae43f87e2602d7716cbdee57734d0665e7cd67ddb6d2a211091c933939ad5e59c1556f7a251e14f831af70bf99040b571432e7fb97f86df20acc43292a552114e5c26023122b09fa764bbab463b1e4630170a3d62b39f8f14a71292f0482cabcf00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f0ae41c2bfe842c27b868cb1607ac79fc8cb210cefc647e214a160c1da23bf34ec2d969de05277d50cf5194eaced169ca5033e38249e44b38bf80156022091c9ca63e61271780c7ee49d94ac1ca9f2f4f3567dc022a5cc88862041d1c1023dcc77757d5b43fe9f6cb2c8fab64dee48477dad36134853ffad5d54b58b201673a510e94d56024d32c4ca0c2e177f0c5f09815b9e86838a9d7a8d8e5810c4365a7cc05a213f99236b57b29bbdc464ce5842d5687d797b42e5ad66133fedd1925a939be9e1ff50830ed64367cd855b9573f31f1a2c3431cbfa445aa5cf5c2107cc14dfe742c97636a207b7b946f415678431f6a4b074fdba91664b4475a0b8cce38176ecb7eb6f35f20b77f1879a139dbd53bc2da58a1e92abc1a12f20f9c10f4713b99bef41bf9a55c6a4ae2a74605dad5af03329c8f8bc0c7f82ed731887bd70d0dfdbef1a3da41a002f1cf9b1bc1e5245dec7f9ec6a41a67eb49dc7d889be03777d21e94ae7a2da0f40d9a7082942de95a763547bd269912388d12bcf3e695c8894bca0dfb853b620bcc6d9698c14e1ffb468552380a0591508a975322e7f745e79c5495baf4398365114b56dd6e5f371a9c95529a04060bb7e515c8b00223dc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0476b3dafefb5567f8089998876a7683eeba7afb3dadc146ba9d482c3b94f4c3bfd8c6f7b913a08e5967c0197e66cf811ed9b7821ce531faa30d31a3496c7bf0cd59595385d39ba495361cc2618e4a8fa84122a7edb6623f22bf2e751e50ac5e46d5740094f8b04841160945be5d309456aad22bc75c528d5cb86847960d3d31b3db75605613f03d9ba7ec4c3ea6c17d11b36f886bb659ee6d0c9a282289ac8e927c43b017e69cf1146af2e9f283c4e3d4197d1b0c3f2ff7f1f2556593e1926b9fe07fc94a5bbd1226038959e7cd1f03f46a78aa843d2172173ac6d300be95beb51273905d0fd5a425ea219aede04abd5e4ba362934b36641953dc440ba024a05ecfd2939fa003490d69f07d8a721d735903ba741c31b234a1d1a4f6076dfbce8c659b073b4f9123f62027cd895bee4a3f477e9c4df426c73480a55db2fb14e6517900ad59db4419d76b4d133162829a91aee6f1ff40b51e96bfd21bae93fe1e3c3a80591603704a9fde5476d8ce6a52303b6d45e548880cf597fb6163d46ac67f66f221fde3dfc8ef99a6764dd85be248620f151e52446c65f1e2a7785f32f205e8e13f3ae511fd7134d37a2eb168adedd3a1a1ab7bc903998d2ba1b9d42e900000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48402a79123f969ad544376bc3e93527963723d8867d9768bd9553d725676e9b98700b5f3852a4140d847f29ed0dc925e3646fccc4ad38f754c175927ad3ddacbdf72b0e9bed33b95af3b224bb1e2193edce3149bafd3e9de6be3b1692ca7f18efd01f00ec79a54f1ba15ee02ec34fb5a103366995e9435bd207cf903a25d5ad78292fdbb9c60485537473b094e978d75042f0fbf1e3e3884d0aabddd6c5e549069c09dcbc38522e16b6cfb9a3b2e2ef1a3f91b9ec125d9789cc27b8ad237ec15f7c039dc638f67b43c92d805e89ae795103ca4bf7441e40c8d35d57c889ae71f9ac13af25192fdb67904da9e8e119070691accfb1156289ae1f834577e785cb8da6071fe9e20e9c007395cc3b4feb6abd2abec1c6739da8868a722e4e1eb3dc67e725faf317040a8cd98d7a70e83b9d9be63eabaca654d0012fe8c1965e88b8a03722b009d9f3615f666e45ee903af3e8febdfcc7555e883e9bbeaac3fa96e86d691536110898d0f8fba33d54824f4da790d57915c80370bdeb2a8ea1fadde0a45802bbee6f842ba150f43a99728512d82a8d0254001d0ebfd018f09bcdfa7790c92df4ebb659067ca207f7ed6c90a40d473065c05a562792f718e700039590ba531438045f6ad127e2d701b3c445016604bf19d2d14aea7572b871bf40b692a3601eebaf40b5c82ec3ea646a4ba0756e9268f2f102ca942126ddbd00ac053a003e21202e75401b93ea647926411861a631045495894b324ee14e529da6f8075989284a3e75a52df361054c5a95d3ff798bd04e389c8954849f4267c00c8f5cd0d8240f33fcb315bc98968b844cf1e3719f8cb2ec14d90b433cfd3baa22993eaa220d7a7d9198cf7fdabd3b66b0640588c01f41a77b597b458b5a3b8749ee2ad3c002ef48b54e9c8259ec984ddaa88557e0d8ab94f62d6e82394da549eb04665f26013ecdd097816f7939c9136b0ccffc7942cac54f9bf00614e6abc3e32bc75ffc1ea4ea3842ab5c46e863739050d1726500fa6b2977e128582d242b53bbaccd9f2ad9feebd1aa5df4c7b401afb9553383dbeb52cd669467fd2dfea7ec20e676711bb4f0b65b3d12647183a8a56e2883f1a364f6165413e74cff7fbd4e322d627d1b15e734b35807b92b17ced8d408fdb229b59f237536c0b929aa619457ec55770ca131efeea30d8c72ad7998a09dba58930fe1922ffa66d3d284c3a3a6fac3101e87bfb8c577801209f6f761f7c19a71d04ac61d28b3cb21079462f4a216ca471262bbfbbaa69e49f37fd7ae35e2203b252d837fe0f565c1f645499892f9ea2f2a78760e411c8761ae023150eaf4cc0e5ea5fe397826d23fc2ecf0398676eb9012d96917ce41cbaa0881479b9c70ff53edfac1ad80c81322a539db6fbeb645732d528fdb7a4c28ec201134eee5122e245bf28de45c66639dc7b397ccd12848ec0ab59c1eb98e6e653462a1a9ccbe4e39880861bda5b92e09e1f624b9f73d36cc11ece5cc9cc75b87507e54a297aa8e6606b3e87e50be3290d2190bcf28587de40fc8c0b54b6517b6f6e521cc63f54830fef9e6bb21709220bf021b02dbb2f3d20698162b17f2852ede8537c8fe489538e4fb87ec3f2522becdacce19e6e648a21544e90588f6a011db97f6878e23601cebab5f86131dceb4211922e87680e8f0040bdbccb06974b3cdabd96641810b6d095f0ab97c57360a06917fad96ea8f321883274c86f1d760ea1f9cb8d84e20006b71d62b357a524e8223f4f02568e7510caafd96e636420d47c38bb18f84ac8b36e455f173679d38fdc14b3c17bdef2c1ae72e25881e7b1cc3403afb35d07c79475aac78cf5feca85b19fb1eb4ef487209c60dc48e31cb12334bc5bc3b7704e30c843bc582d1d281a5eec16f732b543226d0e0e8070e7bcb5f055a1665d6ab1b896b31a642c6213ebc76bf0fca2693f10f9001afa844bf99efed6b4f159b259cdc9025daee6fb7190320b1dbf81ed70702df0e6a5445325de7e2d9e079cbe2be3eab31eaf97864c6cf087350816c9e3400edb9ec3d35b30f2ad4713582aa8b251b900138db5d348c3bdd91632d66809e2be8a579ce8f0d7f9de6e5b3cf6413d23ef2ab7fbc059a8e0d617bb988f7d7190d5832a4c15e32090391178af25222d8df704344a970f1df032351d7e523bf4c062fb462c681d9989a621da4cbef0ff9e49c42c9373686c7d20c2cc2f7c61910079264f90d1e2c8a5ce70bf4200583dee2192f984645841f25ede275150bccca26ed5d2feb4b321b118bb6103ae78dabd1600e551516545888428db6ea1ac0e219e5a088a450024f45b9ae55a403ce8a317e8b022b18eb412b139ee35db601ce2e4ac670da49aaa69e1e576dc04da4cf6285902571982670d4b30c1851f4a0c925422d6620b80ccd8303847ac1af38d9349c44581f27af4238d1e67ae4dbb38f29f30fd99f38796c394caaba14f809c321522bfcddac6a6b809a057354e290b21769d9079df67d4ead91d8b3a04b878b8e6ee2e021c1244d0600bcc775bd36881008c77e61c73d45a6c50ca258d87b7363f60c491afa796933a733c116c7df461329969e5857932f0006026fff2d5bb7a9eacd9928586702e9355d912021e3792599c5d4773440a41e1d650d1525f538aee378500dc4cc4976a4a291fcf29a6429c514b98d96f5cc0ec509b982b7fc52b0b621fc48979da2de2a998f3e32b452035283a86339386d7d1975b7667d93965c68f22987bd46221dc9baf9338f5c5f23046e98c5c29b4d8389f981eae61a5cc31c9db3e416e005f2a087ea8e0e28bf0ac92b685b6750770f849d9373cc2ef2d41f88fef0c7d676692917b2d1c3f4f50cff9c635087c3a83cbd43362604f65682a7221ea11120b7b09660bcf01a0813400d254aeab8f35f6430ce8b13cd629ab5946850440075377aabdee70d33e8ef9b0f7db478fa13358b5422111391906bb64eb4704dc6d47a04d1d5611f02469e491d1509ad27616b05f3dad243cd5d93c1ac6750d68e683016de2b015fd18c4b090c9144158d0ca8f0340ccc9fc54af3c153cd4509b1ab2dbb26524a0eff2f7505228ca3ceac3ea81a47ba660010ffe221641f8d172a3b0bf1248fc3172a75823e26064ac1071565f1c3caafba2c1000aea4a42fd76ff7a193ea5ee2590a8091bd18ac0af12ce409e09cd2bf4fbc68d630a0fceb0087e063d456c08714362c4b7b25f1eabc6a352e88e423dab7762b996b2cfa6bd5b279b08ec00165bed834e5661f82cb6357854d9bab03d45831fa99345d1a6fcbf481b070820611627e96bfab036ac0dbd218ed5827435f48e3e668c77474bd955cb7f91684d88202e0f50df203f290c1cef100e9816127fd2f068daeab6915781ad287a79fd774cc5b8036221017364eeaf20e5680e76f109fd326c16933b61cd3935cae2810f0c0d0a469eb03451214b3878e150413492214fd1e4d44e7030c48c57e1195666c6f6fc3edd80263a3d078f744b0445d4a2f90665f2aae74f29ec1c370695cbb01b731ccec931af6a7a19f3d9340f0b9ff277178b81bcc9fcedadcf8a2afa1dcf6dfc4792edb220d6f2bbc72c11f8ae9e6cad8923ef7f1d9ce976f2c9ed39fbf970e3e95d37f190b888b9b6efd855041f9ecf3e8e2b3b3e0c209d6e8328a27e724c7910cf7472419590ff6312bf335248763d47f1ba92d73929b5108fa5b4b79e83c0865854528697e599df7a031c8dbbe65a224d8cbfc2b4093acc8e8645f34715ab1e386732acb9bb3128b47faf85979489b80b9354d672f1d6eec197d38c325365e122cf707bb0bc3317d9345fa2cc9fab8a29d3b52616fb29c3afe9812d5353bda5f176821a5ae0f1fd746d0bf712838e6aa8782856684589bd3b317d79bef998d2e86761cb065d4fd4df875c5e787aba2397e74be3072d3ffe3d347a3c136ede5b4460e20f951e42e72280fdd85ebc880f4e3f710ebd0cdbe6eefc9cbacc6b0f680d721014e17dc4b8e50dd22980017aef236e8590708cadee536043c5ef38f86fd0a160ea8cdf04a379ad8bc7ff7ba235b6974a4cc53b1bdc04f6ffa88e02f57fc96be0516139c819aa135829c16a3ca4cedac03b85fe20c88852f0faded543e81a2fc0c65b750a475f6fd04a407709712b52db11b71f24b8da835670d8f508e4b8a112dc98a73116a5efd0e75da48884da3f42fa25d73ddd622115f0c06e5b55ece0a06f62bcd9d21d4377de53e97c9f5bbfb4f4354e0d9a83e2528df987e8e8661a220aaf0ad8b6944a30fb22f369f4343ea33b587bd3f458c537ee6682a84c198d313218b57c351bdc2a7633bc9df0433cfece70ff65d7992b7ac41cc6a9d5c5e762b3da4fda98ecd57203b42796dca2e426d4f47f229de2e89825039aaf1b2684c06ada9d2e28a1ab375b2047fa8d3d0200c1fb41710c977bcdd3f4ab8af2ce8fa0428b0c391f6750d1f4837b6ef53480858b77e9e03c799b51f415d06d26304f82a30a889312e3cd65a9fd849006e58d76a104044d395304985d91bb796e2ae7c1399ffca6550b28fa3111314e323914478a6dae28acc27b596219c0a60c58c4024bb423ccb13af90515941f51f0619b8ef93514d20eeb075c3bbe0b368cd40040bf72f69abb70b6138b0ad061e9eb1c27ab1eb50aa218a94bd42b9b96a905d1117e7619838f761007fc623b707eac47b0996c4a978627542c11321bbd12f361e12cc37eb15bb1e491688b5ca15f8652af624f690e16492b48cb23fc1158f514116365dec562a220e0efb4f09ce453f01a0bdc44b5943b209b4201c03fb0524a30a409f2b10d5ebf7ff72d93f0ce1c5f02678e4fddaa25322d3a9803f90cc2d092086e4faf670e9804cf1f2ee09411db0f1418c03d22c63afb2884b55f972a47b016eccec65ced7af7a60156eab8e39e64ab97eaaaa2bc13d8431e25fe906c4a0051d08b50e9b3bf75a00dcefb253bd1e9c9bebd822cf5a95328de93f60b6a3bc1ddb914f40b66a073bbb759bc4281a8fbd213ab6c6dc6fd5bcb7048d90f1f45124d8ed20f3c06893f9a6f4b58669f4cdd4eeaa219d35e95b41586fe35e5dfcf928935fd8f3d6e51ba0eb3e6be1409b4f0e508db2f4751f5e1285fd1b963f40dc24058fee32824c90d9697e7665e493fafbda266389bfcc675cda633d47091e690f08d2eba1f0822c2988394aa8cf372d7747628a7aca057acddbe9d6c01247b30175df0002fd1eed80f976b91f563bb3e46e479f23a1d5adf610c8965726de6b17c68f5ac35f155d374e24211b5b4db61b99d697265af42ffbb5637228c72b6b0345dd43f4c9636f2bcb290e09b03cc17b309a35122ce6f3c0c63666a6f7d9d618ccb96e513228396c38812b33ec04e9504469b6fc674f9b2231efa6e753e9852b7f3ec9f1ab4acebdcdaee6e043e2b5cd2db72994a914496c0a73cd09c73da00a26046ac881d0180bf3abced9317dae0a0950085822f1dda2b7a3823c9d6780229aa7db14276027008ea8f7983819f72b8d47e1be900460be8ae0289c3eab620e14cba704fe0cb4faa8a0e80494c634898673b7f75310cbe8da54dbd99611310f799d22f75ebbd9dad69ae70c070e7898d7b73864b702ebd81b69ad95aa47dd05559527edf3dfc3351f94caab04e99d6d748a2f59cf8fb7b3dea0e1e8d5faf128449de877cf3ba5a0a2b331a54af47ea0df94500490aacf11bfc32eb9a48c6d25ed31cd0e3a01c8491a4eb6d78f458e64c203dc8e58a31382953367b1f8fd5e151b46bd3d8a9772f16da411796910353d18ac126a135e725f0979560ed1fffe003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000000c118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000000c0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000000c0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000000c0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000000c29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000000c141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000000c25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000000c12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000000c2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000000c189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000000c1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000000c05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000000c05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000000c14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000000c03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000000c2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000000c1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000000c1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000000c14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000000c2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000000c305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000000c280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000000c223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000000c17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000000c08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000000c2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000000c0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000000c0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000000c172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000000c0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000000c05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000000c137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000000c2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000000c2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000000c2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000000c18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000000c0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000000c204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000000c0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000000c1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000000c28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000000c1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000000c21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000000c0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000000c0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000000c107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000000c2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000000c09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000000c24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000000c03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000000c1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000000c205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000000c25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000000c283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000000c21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000000c094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000000c0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000000c1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000000c2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000000c1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000000c1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000000c304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000008100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810400008100000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018de9e7e77258cf23076d29fa2ff709d7ab25c5e424683d02d5b9f5eebab4804ac25dea320f4225054f256db2978f1b080e3152ef5f877274689ba1ded801864f2154cdd38c82df081f943d5c541b90940eaa4b89ced8ce79847d24a64d9268bf9dbc7b093b236df6c3c6b15734bed4810cad1cb106be224488717d642300e40402bb6d033e37c2124652cc84cbc6f3e0b570fa852419a780a9bc945ea1755f945049a00d311d27bd960afc0a09af6241eb78c4389549287f7317bf94e09c07ac5a70caf13e099af5df05b30bf0749c7942da80799c10ef81a3e46835f28ea513129511d1900dfdaba93732c6da7f7d27330055a9a808d9e0fe696974245c190f2561707c00978917c00ebe6a0e774e36dad7e40bebb1e162dbce1c27dda482d3372a86638a13b2f8b561f6cc523849d812be6d5979406cfc57ee0b3c6a6b8a9a51f88284a2d0732ab787fefdd31b416ca6fad3264c3aa3f4e7130926005536662c826ada7a3beb20276f0e9cab826fb12341b77d1261b8b9fdc1ef0bc211bbf07eaad9a61be5c9f840b3112d0dc10629c2bd36479d6d17190b303e6c9a3b353b660aac901dff03e98ec0c02f99bd044bb7a64afb9e8b94f4e38df9155feff7d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019bcffbcb9e9cf34765a91f85dca8c6705eaf9345722f45fb74fb0b3f220ad25d203f574f665cc9e9a95fd28570fe3aa34416bb13c02d9b070cf5ec931084867188ccbc7b5b4a6a2bc1c643ff547db790da5f9b83cba9199b37eb9da709c1e31bd35faeb84ac4d78b2aef4c1b4b0aa20073bcda8e9f9184f148d8718cab5cbf945c8683b58cdc196776c0c3147de4ae3669f0f48a3841fb900686d76950889b711d3f1325336da1bbd3090863b6016a19a64690cc6f2b3fc60e1e33a8c41b6d9eb268b380abe40c672b17e72973d440066ff080e7eab2081e678e5cdd93cf681a0e06469820afdf9069be4f49a9e7012b5bb7433baa36444691cafbf4e7f945e8f2333108f47bd14db60c6963af8e52be926c943ee82bf48b8ef6979b7169984b80a1c4cebd72874fb23bd36d58bee86890034799a204e7b41433a78faad1a2d5cba395f069657f8ade381803c1513f1e7b273225b06be122d5e6a7711a00aaa324e1a7b1018be8363b2e75b85ed0cfb4d77216adf915a0ffd1fe443ac6a9bfd2cc380e57ff1c9d536beebab7cd8a8e4fe47773211468f96efb46112ebbfcf1181104501fbba6832320b6619daf3e8054ac89e904f7811da6d5d0b830566309600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c7a335c067cc8bf787eefa40cd1540ad1caa02de6ed3a251468149c83107f347373a60d394d00361e82e6700d3f829e9d8f194af5131df05c91e5cf35f145b4880b28c3fb11ff65440d501d1eb9ab6130a548f569a0fb6ca4566264326b62d74a6aa65180f0d89bf720812d1fcaabdfb414fed4c4507a1c770abab04d8be001342caf50f0838890d52745fcbe9816429ba2f77cd0c67850199c6457a933a21a6d161c7f4942f533908ccea164a1016a8d4972bf42bff9b54c99724ef2d8c0cdec9e9f50ebc1dec3b99e33cf087be5f1aa9d2080d9dc208b7a910a533cdab481966931d3cf5f0f4c5a49ad09cd15ffc55fd475eb08bddc5700f5e2dd49e0a6687133d05464ee16ad7e0fb5dc4f674b40a27bb8c5f01b45f97c82b0e190b78f7b33565afea05ac54145db4f1ad9da6b9414cd8a6e46c244a9b4b37ee138b85050cb0d4bb1341156bfe995e5afac3fe1fd0c33afc81c921e720bf9de90a23af46874dd3f7400170ac1e77732d23f912ce62a32062baa64c4f318dadaadcf3a5ec3a286b94f93404e037bb353e56594fa853ff56fa5720cd957b51a67e0fb071a9acd982b27d158f62cfddee5ca794b68519191694f44bc2997c8e42d9901d92b3a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001be61772b4dbf58c7bdc95af3e19fff16ec1cecbe2318d52642eb1843c319e0b6b5a755d4a0601b3e4d0fd77c427059b8f62b01f48298b7e53f8324bf041b048af075192f88febc5fb106947fbddac6b0fcc4822ab7d140e634698c79fc1ae0a7b6bb994f6f1ffadc0120a2cc826aa1c4c3664477e6ff1cf9a59d087e917bcf031672363785f406fa1ffc840a4919ac8978dae46ab954277b43becc0f0be706eb271ccaefe81fca2b29c9d086c5f38a6b166d3c9eae165e34f07cafc9a365e308d9a964429d836fcbca72126e5c19707ec8f7c77a4068c747bfaf2800ea55b6ba5d3ca20a978218d3f533a857d0185c1d7b15efb60684d04b526030a15977ea8ece3665d35da4b3060073475c85bc6af90c5ae3bd748fe5e306e386024fcc406a058826b9215ec37d9b8199cab118cfb12c0eed664acf5dffa2d4e9dabbdd8c82f48049dc3c038bcc9af2f55c773a0c425ef7d5fb02a774c93274e7fce6cb826355c01bef31e7884efc2a21c3dd87f10b3f245af680342e6f03ad886feb09ab1dfc4ebb12aee4ad84f953ca858fd65a52e9fa6ac0e1869f8c939fb3e780c063c80ab755e60659ce48419047250a203fe32b2fd06432d977d28d2acbd70fd14cb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916910c070086e3f5de5a41045897b862a2bd9292627e8ead39fdbdfb720d746720467817a388ec888192f5994731bb3e215b5288607a89541d9fc86d57693020084cd5a89e19acedc6e9cf81f2cfb10da4a7677407cb7f835f4196fc59bdc88e192be5ce1ef99173734de674f2de4434b490f8424a9a2c5b61bf9f19967ccc58d6781cd9b4450558b249df1fa3f23b25feb67dc510dc495162cc7361228bf557dd5c11f409ecf2ae393c6624dc7cb42d0ed0e941e3d781d70369c93ece931d351e2a290573229c975baf49756b50f48140dfc79a604e019bd48e4cd9586176e310ccad6422dbfd365f8c1948e61156074cea0b1255765c7cc762c497132a71907ba5364dd40880fbb1142d89b2620ec7b80b86cb7592fd23960890fb989e117724d8bb1109a5da0e587bb7e5a5a82ba9629f59f81d0fb42857d75c8346548b97371e89c9c79babae0e7f0672e978403d98a31a9e82b077a58f4174b09db81008519710369a309d0b9540824ae35af217e629afe4b7b71e5871746d9f2488ec61e70488a322d849f42185be68229e46d56189b13759bcc61065416ddd5bdfa250cf9bf6482836ead745457d885716cd04d5c02ce5f96b1b9468f6298772631fa000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096004193d7264fd5ea9f3b74e7eaec495dc81572a6b3d0fdc8b29d2b84e827f29ce722bd692ca341c9dc6cded55e8f2d4330424ab9f9b1d4c74c34b1043a0a55d1582c0990dd99da685bbc460bf3fa7c0d78bb3a429ed9f8266eae0be684dc4268da997690974541f89a78d2e38445db3be0e0062a4ab5f3937d04b368cc5268272b03a76131c1879789ef1dbbd2106811bfc5f6d0609768a1b0f6fb83c49b635757e039109787fa30f6f5057baba7886d77618b4f9ce88f90d26acd085a909b910eb56e1ff9d903f8764da38ed6bf65e6cfd7ad55ebf01116275f1e4cac418c47f3dd114d32308e3fb42e33c5ab3d5568cd769231891129dce2e05b8cd1d6608694e6adf6ea8ef38ff68a5c852a92ebfb7ac249cce8a6577c31bedac24e9ddb976e32b16bc8971ecfa064d5d501852ec35bb83f9730c8b04d220f39f3f25527ec2aff34c377a44a06150d779af350ee2a0e2146b4ae1bb83aa7709209db6094d09b61b26b5cb15ba3ca254bca2f4fd4c1d2f3186da1951ea318350f1dba047e0fc5af1b4dbe7b36e8a95d47017e71889e6d36b20214335063856a1d556aea3bdcaf362f392e301bdd0b58822736067bbbe378462b0e0d1a3591389b71b4d81b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091122eb5476a2d381de76cde74e7c9d4e127a9e3e6943f4d54ddc2f443b13239fb59dd78f14d9097a168ea9f1916520c1d4a5939d0053516ff22a8999a5e24a1db3fd32036e32621b335fc4c15495c7e84ba70cd0ab20faf4b6d598940164493881bc769a3d5998badc6a20871d508b8491082492b7be03db42bd2b1dee273ef4b2f73a66fba05a26f663c55e10362c86c7234c1bbc2f2e349ca6e965bdb2919b3d341aec5fcbd973fa2ff7bb6feb545cd73bffff6bc84ce7575d04ad476e03bd803489bb78b9e3c07aa1c99d94dd0fa82559c1251ce5ed1b6ff25bd08b45d572788845db450990ae0e9b896480febd87e69e8940eae8be20677e45b7e21fe26ee5f57d02a44837aab90b662eadace0181152e913ecb50d0028f9d4b89d0b541ad00084329e014d30228aa55c343bc45e717aff3047759332c3c48dff7a283653d529383fd1ff8e2b804d3aada014157bd1ca7fae37e43ef615474ec2add2c3ccd2e2c73856063f78ebf9ebfc8c2c644210b02f7096bc77bbb384454d9ba15fb43445b368ff3b3440b64b01016e141a75684d4394a4852e33ce5127710865cf49f60568b77fa4dd462044e270a191531124e426c6d7cb56b4dd8dbc37d3fc365000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013f32c7776f0c5cf6f97e870794dbf1b5d2a2b9f2931ba3e26e79bb72024c64e81bd3956a688abc1846f4f9b5b24bb9d743edbe733906306d5a38f969a97ea0c9a2b8d7db37a32784349d6da1317815611bca5ce2d2319b5375b6b12ee6902e7edd50bda3d1f61da3be50c36e3a59acd3190d3b4d428e72f677b75509bd14e0112b4b0d46afa12c4d392753efc37883947358f304cb146655e62d9f4ab7b32e4edfbef4d317746c891ced5252d86ca4184e6f4b5546ca0a63bf8ac910212bad6bc418c037576e8d198a12bd630744bda9e6a1976b49d9a7bf0f6bb554e0eaa00432d273d2149142300e83ce1fec72995c46ef3d30da46c172dca065aa774f59579f29a89dbbed67c74bf864370e4a141c83aa688bb9ea2c014064d067176c805c9f0ad2a1b890a4d02e957dff056133306a8ae8db08fa383710cf52e868c8623defc1aec92ef59832d57ac9a41f56ab03cf13ddd4b1248e71624b3ad66e427392a971e6733ebd7cb0c6053a089e071d70caed82454a3ca2ac288d0a0227ad00533e4380887c5bb2f738cb4f4e8165a91fb8621e147a2aea15820889b67e08b352cb344acd47b34b2245d72d1dc7dc51510c40d3b2703fdd13868c55e8f495ce00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121465f86acd6350601a97c1f899c373c4f0fc231e7d1c51897bb52f3b9e59e38992cbd36756f489fca5e58169544f6ba5402b0fb1ee5a0c42305a53485b4e80579df1210fda7f52501dde834698d3033be45250b2e4fc3ab329e56a1dbcb83c2354827aa521556af68b5f181f92c2705e19061eee029d6876ec3654dd70d73092dad740f4c357e0178f38e2bd55112830016cd387b42bc4c989a154b68f0ad3a5a0dd7ea48d73522ad6684dc699a04914e1190516ec9740bdb57a149723356ba8b593c99d34077d7a7886a02d82d244fa7c5df4308accddf200cf54fdd3012974bd1adc430d95430daa4124348186d74b8f42dc02b87290b79b178284f38332eafcb0bb4e68835d8717902f389713535d4e2c0235b835775b3c92e6433c2ca35b7da7bc8683b714fae4ecd51b0d439950c9569710fc3b1900a3886d4d40bad52ac4ecbf149ad763f0705dd33cab0a69f6bba5e2662cde1c83b89ade6881ab9d3a5e0d6b54220dfd63de8983cdccf7bd30429014572fc6998f625105f6ec7627a8a805b85db14a905de211c3f8be81a05745e3d23cee9b3919a10f86246dde5e1d2caeafca360bc5f5a6ad3758e8f33242787880aefd03ee4656eea513d6352e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016e54dd2b84297338a9e6b9fe9b72cdb082cb6144c7f6bbeb9a004e8fc09b37568616f8c166fe2d404147dc616186b5dda74ee98c6ab2648c3a76a8fde52962155e247786388025d641198be147b7cfc7ae37b8149ee32a89805522a674fccf4c04a47e53cc94024c2ad1ca582e3f408659f138d3efbb602a33059d33735d8bd728c08a9ac6c34c077f74cd32e846f47a0478ef538cb59892c2c1b2fa3f3e633622dde5ef0e0479bdb8802ed660a04ea37ab1fb969950fbd6e6db8750fd74a0f315a61843a50d7cbc53de37cee530e1bce9cf81ee64d8a051e386cee7a8133c0fab7f2ccf58dcd121c72c9574fa8290b019f27471b7b24196546aac906b619620c4b2a23cc9514a15bd7797e71a92eb3d3c400ec59044b65c9309da1c74f778e3a21e819e8ea36ecd95fac50c07f89e3731b4ce245506e7ba6d6dab17a2c4b27992d570432a5d3177d9e392ca5b95c0cdbc3f8ef9429f69adb229a364daaa489892c8ddf32dedd1cd8621e6790011125a9dd7933335beff7ec50e51b68432f2e9be5933b3028879935ca4b5d30423a4162e20da703079bd79583aa9caea3993003cda3460ad1c8b3cab545d4abc0b22349817777a5a67cee7efb374a6cc3ae0c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019076050fddd8315e8bc93b774a7b8e9e257ebc9fb0cb9ef9539805628b6f21a070a80291431b7b382f2fd7576388af35e70885f9791f046435070db037f67700df7de01015bd85476a3058ccf24d318431fa0aa6b6d0e60aef1d8a3ce27f8707d916e116121b2f79efbe7fb9bc5e6d292cce41f7e8ef242457d7e539c348e80df946e2865c73c031676d79c5b0ebf2e825caf9cb3c68fa61de6e440d57cc3fbeaa32bea148113a48530856b8177ca4fdccb1c856210435427d6561cebbd3dcf262caa201d54d8661323e0415b75ba523b008ea3946025ab5f29fe3038f8f6772bb790e4862ea35ad54474f6602dc0c8c6fb45b19e5670f77fae90e1884585439b8dcf5d0c370fe2fa41c85bdb8b49b124e3f2c5e9f707af4e601faf94d78fe0d19c7407cad6959661361a07141e5d4bd563815563b4a1737eb7c6af83d948f0296423d3bbb766e2cfdbcff0d47a9cc490ac1183d54515448b4e86d0ea7571c22d3b15d36f1fd336332df894df5f7a5b766c19f8ba0495fb13e030e3a2a7fd519eca8392d0529a82c42778fde96db1191831e8b4b000d4878e72613aa272a531a3c79c3c77fb46068550a6bd60145d33c9f9f7e36b7d34e33dc9829dc86292c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009dff408eb4a14361b48cb29da5229b218f8d032cb06ed233007082251a20521acb2f9e6af3a903773a073b6c2a582abff848f389e4889e4333304e63fa987233da421b824927566a558217e93cc2350c96497a5c328706f93bcb5d5f818fb9103e0e3a0ba245b9db2168d525f67363bb88472e530ce52072131084d0565a266cd008ada4d084cbdb515c50ec8458c8a622356fd24be9956a5c645adba8785171112c65e1ff961042c309b1a083171a21ae7f717aaefd2107a495889f4ef832751b7f0e8e523710fcb30a5fe17ec7dbe4ba3a7094c7752a08456956d6e7c20198d9aa53e6dd7fb12f4b72528669f2c45c126cd285ef7d192653ea543974dd9838b8ac3208a7cbf7ae2803881c51a8d9a1ad14a384440811e3a6250442add48bf22455c7d8857cd29f694790ca8e8f246cb9f6b0bc37a7f285da600692b8e85426c848217d4b716950cbbeec12db00c83da733587a95cedbf1063cc95a07c0716f9162ebb07f5f9760e38206a40228dccc929d859a41eacede4169199cc8cccbaa8f6f25cdeba3d6235ccc75afbab40383b8c1cfe628b375638585dc1a6a0bd405543ea0e209d279412cba12f5a01dc404ad2ec12e396ec4e8eb503632c2a801e000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e031d70680e237a5faa65d7bbf4ea79d3a11d2d5011cfb6e00eec02cf6749ea93f4715f16ce2191454dc3c51c981b2d34667d16a43e94b88bdfab5a76308c8b0d1f54028a0133c31a02f352523749f62500e292c9e7fd6ab99779edf049fa581fcc9f57de5761aed1ab2262bfbe26af32062665979355d6a8bfe79a049ee9162d8eaf8f15582173c3aa4805598222621626e12dafddc04be3807f1a9ee6023c94a160d1f22b707fcea6a790e81e852fc9e1ee212350028b47344edd85532491544235b862cdc77c62428915cc8cd367847681371cb7c89251c3a6097b749d36e9c8ecc02b32fdf72c3a4e1209d74e3216eaf044760bd39a206ffa6dc7331e2f0e4359d5548ff4e395fd2ed745a3729f8a2638e1034567d29afa173815848b2708a6dcd896304a44eb2c79f8b55e95a64e6dcccba998e1e44a1f4bdbf833fcbe4d2e157eba19371271e28caf9f643f60b64afeaa8512ae6efa71248f229a8df290fccd4f899d241e54819ff33b39ace3008d1160bd537c11c47ac63ea945cbcdda89a3bc3cd26b09a64a4755e87ce4def2b9fc86130521c9345f52d94fd2ffd0ca86db0eb38491ffbf41807abcf43582b62545c9a097970ae08234498d4a1a060000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b01b248a189376bf93f9e590680378e5ac6b30667c91c30cda826651b7ea5afa3b94d8f3d04b68c0e4e23840630197313c4be6d9fa89e986ba6c2c6a7117574c3d1647bb84c7e37974a77e2f247d76e278d76a72ffefcd90ebf7bf056459ceabdaae57b380e14a5ad014dea88a25287312da0e5fd55215d74e449c7da24a4ad888da349a0fc7ae9e802838113eaefe10d0ea0214527265692db4c206d5b028b8acf3f5bace3be93e8c6e26d649f3487e59d8952d692d22ade3d76064a879d072e23dbd3385a12a000ae859f98b919aa7f8cf928e940afbb713610d761f0b015f9499f0d89521084ce1d93f58273db838b7cecb3c3a20abf6ad48b89df7c1fbf181a146d72895bc0a70c42e10258d418ff48c147f866139c2801ef463cf67692dd38e1dab115c39003209a586bb3c356a22484dacf87a2f7d43b4e1b3575150f69645a2f230fdc432e283dd9cdaf41e296bca9f0182c728c9f3d318c1a330a2a2e94d4f247947f3001ad922db37e0d268e22c02662ac6c9546e77f10a95d74ad89420bdb1231ab9891f20e2966faa25a64bbe348577385da91857beb7c82f4455094b050dde95224b673ed5fa4cf3b73a35dc747f49b5becb2bb2aa06f1646bba00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d7aca3441dc1e42d43503f2fb228a22de63252389aaa17145b4d7d94a46dbb25a6012e130cc93424ac20ebb7490a75c0652bd22127ea8d389fcb0ac1525f8ea17a4890a4ca3df40fa13857c43218b5acc43c5ec7f205e3e149ea01f226dba6241fd3ed51b3f3a9708285af19a73633ac0b88a08ea380c4c921e29b39ed6e1c076fb4cd8ffb7c8db4472d70d41d15fecd6f8cb9c2a4c5838270b68e78350f3ba8ad6d22509e867512196599ed2fb1bb4b848f7c06b7b9c0be75ffd2243714082820e0783cf1819f09d1a96bff7e852db84f55717fa0689011f1dfe6adc6ed51aa1466b670f0dbc74d9dadb00cc1b68e515efefb887c10f931c32f275eea33e3c408302c7c0518f3f089ba6afbb2c0a7a9a421f746eb5eda806a7cf3d5da1042710bd9ad5b4b7be93c925d1f6993fabc4df116ee5c3b3ac25179548cf2ce614b8ed4af8a44ce5a4e15ad0235eb1b06b4882040ddc80b2fbb20c2c2ec6b7a257a637a04fc8c8931a734058bcf9bba31115c377736c5f4d7da64d6e93b9cea245ac121eb76a84d535134c91f07b718d3e4bbf42b20548168caf73e5a8f378265e3eacf29ed7b426fde7871cf3711af9ad53d040bcbfeca0a866c76b822b7c626a110000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152f29992483ccae9701b7393b5f521f5722368c2d216b134c37c399d87a3c87d39cf76408ac645c99dae86b3ad9a2f62ffa02765537fa5e14886c1ebfb1238867c8fc1138581e7a192a1e14aa5448fe6f5a7fdc3e9610c92b1720b208fbf11a2a898aa9f7eaf60dddc483547eb5f4b31b42895abb1fd2db1c1aabcf2f73ad2fd7617b59e01ab113c9cd493d706e7e218476354d612d3b14945d4d43c95a327c17a4bdee59fcf75a4d8a88da2a35a37e9bdea1ac5a1a1b45fe81ead5ecbecda3c5c17e72c41eb3188cb165fb94a3d214df3bdb576c82cc2da533877cf955c51336e52775ca51e1b715deedf49ef65c35491a0cb5ad6162a0e49036d90a0ef1bdc065338c240d622c202eb622b5a3f6e0b8bf77924d8f0efdbf6dfb4895b6e7b7d3483e37365f7b3a81d92919465e4e46cd73ea5a49497794f42d4bd03b9bd8db19f60e897610d9d9efbd130f7ca4c48c88ea224ba861bba9faca37f851a8ef03368a5e2c0a7bce6e7f7dd04fd1c230a6f8728e5df888e28eca62b5a7642ffba38f2f106fb50ad58241146fb21eafe81d43ffde8784812dbb3b4b4f329970a1f8ec571e792d971e85d3c3651a5fdf37421c2eed082fb2e79ceb8482878b7a95e00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000976cf237b77ce1dfd82ae54d02bcd1bdc7777c9182f3b9620a411211064682b40472d1a01250a7fee10550b09ac217704a3eed70f7f7883f3815880c15095195bf31e88739dea1d4ae830d39457a49bc8828310700b3f53a4ebd34f733d33708146dd6e8f2aaa45c9ea3bbef94fcd2a22fb723fdcb5b6d3ee81b97ca98aadbc4a2cf17d9e502f0d3c636cebed13967cce98d3d8ee8126abc2e07b176f6ad6f0643ae7555b167a92a85a2f9ec028c5ec499de8b89e6b1a7a1ef4e0a431c6ff981563e3cf33efbb74476d3c3d09019e02367bcfe6a0d71e46cc270b0765ba4c3d9ed7f56e516069807158fb6639d369d099edb758c2213032a1ca01127e1e2a2762b19af4e4550230d2fe40cba856262a8c81abfdb080782101cfa1ffcbeea2a8a2575c540cbed1818139030e84e0ee7863944fac312eb84551a60f21f5277703f92b327967a2954bfd34e9424e2f932176f2dadada0588a50058d8d21ecdf97a8b9624ab7446c86deb19023cd67b6265ea4fcb2b09d6c01bdbfd42810f372d2aaf7f1b7f91286bed28665d9595dea1d75275a9ecc9f3e8173608b50e61922d8b62839928e904c0618ce34e0996d650bf28d9d0d85017fe699368ae312eb3a619c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000361351306d9be1eb0c91ef5ee9d4b6fbe54a993edc403ec46849e8d988cc0439238f492e62751bfc09dc20ea56d9ad8d2674256ca6ec6b0ee2318eb3225ca8a6e67b0d6ee81a0c1e8c544d1d0dfbb23d62ca77339a949ab01cf9e558fe83b391f753ce8f85fbe3f2888dfa4ba9d4a14feedda699ab803455980364d53d0b2792105c3adf238d6a09620d1e37533f3b61a398bcb3eb7114bf1bf43b129eaa3a24a920195ed0579812cc0c919c1c0451a56ca863101f88baa661b17554dbac7029318cee927bb9fe262b98cb9a1a1a04d98fbdc4067d165e2f1b4b6dd2cfb6ddc286dd7318183ff1fd2bf51e1e392c3262cb69bdde2b431f0d140e17cc6b30fdaef8e2b36f0a1c32183dd0ff505d0f34802489af4408b0c195d3b3d109fdaf22a7488b32ff7413d8d435fcca535a6f96649b7ba27eea3fa88e3e1367027ee2ade63ba85fadd6f03993482e1795497c4fa070927ebac6a38aa73a2cc8afead9679f015f005108a13c0dede0c1db4b37c91033246d820c2759e0461512144bd3d160e848d243f8573ac99b2baf278f335833224448f9aa7ba81e20ecd79ece7f318eb0affefe8accefcb1cfcdaf62381f0157e73d6917ff3e7086024299448d81bd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ab81cc4133cb03a75cd807c668d130fff3a7f3dd311f74841a036ef99070a148cf68d0cb25d400658a06a83f359617e211199ef232caf04c6bd86834ae0f436decd7804538a3e8529b2052b55251f3e31ae88541e28d10b0b9452c2ce2dd5b84db99cb638a75ab95db41b595ae7255f2df4343daa4a9b69051a3420f97d60b5d89ad801ccfd7a43f6970092bdc74dd8d1a60ec8edca9ef2214662e62b7879a45c6b2c78dcaf1d5e3778e8ebc0098b1fcd9612279ac0b406c9b08e9f07c612940deb37a77722490519868b9197986fbdf620e83aaf6c1df8b88c569a11ac8896f4127374743f0a2bc73ed8f06e3cc7d38ec24dbff7c8928e9e59d23393ca9826776ff6457d6ce7a8ef1de27ced8c5c7b5c92ac9977100a9a56da996a228e08e8cba135f8ebaf5f04349ad0e9c185129ca95eca4851d1c5d06a9520e234d315dcaae031b5effe0ed7bdb94314e9885f4987b7598fc02f04b8e4031de080a4d92e98a7bb18ee5efb84855bebb69beb0d8f8c48dd9acc4ab830c1b82d7a51f56f00e65c33c711597748bb497717d421b20e4dedd86f7d7bf58634e28b60fd362e42de787d93600a9f2c67f3aca33d928b4c313fbbb7983e2a8a7e829eff8c5531870000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7bc80a9ec311a4c6e0a3b64dd3229934aa2972a27eb26a4dd99fe3c7b7f00ccc5af62e6900aca8b4d663e1a9dbf68a70433c59681685354743c31fe81f43b6e9fab60dcdfe141aee28f852ca24fb921b20e93a84e3b237d52cf4d113c42f43b79ae5e1243481f3cbf80edc8e99156764b29e86b70b99a8c831a5b94258b66992231fa6a2ce07b2fd742a3072638090b40735e811ea3df7a754688467736d602ce4a99720f6be2f135417cccb4833be3666996e5241e4a6fb9fb3bc3a13869dcb1886af35a2c1fb2428c3b3a060175940fe4929b15fa1ba927a496befa5cc95eada140a1486a9d570414edf59cd3c99f2b9501e0e8642a6d2569c423373db174523d5ed321f2c1f4f677e74cdcd931627ff6da862e4f2e14b2d8897e4cd9fc8a70d6c62458d54f202574fab7d41b57d3378cfd4a2f7acbb5c8615715fe4dcac931c2ef1fdd32b7d3b274a786023f7ac47db47be93654729cd7d9b37cef3d00277aa2581e67c67b0b73d90313a0874f5587c24a480ac2efa56bf5a268c4700f5a5fb65823d1eecea31b124b13ff6f527fcc2724a28a868bd6171d98adfb1ac862923da28140a9311ce581a857989f0ba0f37d665a526010ed3d4a0b37c9787abd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009fa341811e4c955526e9926087b1ce824712c50fae259bd82c7e0ca0108e0b67efcffb0a403cbbe59ad02010a5e912bcb34a8ed96cad6d203ba8454a5bdfbe30c9772aab6d61bd6e10d392d14a4a87d2dbaf3fd0086346e06d03677cbe87d4218c989dbf5836775660dff06cbf59bf20d0139312cd21b369692b8e6ff602a474a45238a83381ea05ca4bdb03d27f6b6fc77f72d2b6f933b88b4ee4e0924b8f0d958376b13354e82a862312e37d31fd1945d600bf6ecb6138cff1c19dd8f0a7c651b9a6028bd61c7c1ba1508a19fa1b4b3a29b76596a330db12f273ff3fec0c02a6cb18bc8709be256b8f74198d287ec7e48702261e05424c3cb82c20aaa1c9dbab10b9d668da2cfe12e3d493eb8a3ece075ef86d36389b0586628aab33a94ab98e52c407a8292d6f8595f5f9130f05fb689b4216cf58271594a7b0fc0e91f0142042b772069dfb78a18a8cb4a6e1a7a328103e81c5176dedadb144115243eb0ca92a4452377d336cc1d7fb15a58831adc11efa480f4fa93a59881c99f2c571a777778804ec3cd54b712b7cac4655c8aaa1fa60ec5353783294ba45f20c6595eb3d879348c155bac17bdc81d2e0cbd17cbfa48c81f76254d24898ef2a57933f930000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae8208b0e2f320a895edcce44887120dc8614ca3e912280605336ea025e3634b68d84008e8ca31c60d77c576b820706bb8911966586d4053d1318f0d0641c8ad2f1f7fe19e51249b93ebed2a3fbe3e8030278c982932cc450f113218da0edb38e500a0d1f2e68abeedbd5579dfc98460d725f83976c1002aa11572bcefb4ab9870cfff9eec600c5cc77512b9d822d00721d18ddf61796669780feccdadcb678d11f644ad33600f1d42c121e56ea341274922d8cb32e33a050a2a38aa049b88f099c6b7196f6248e24d5ab821307578d67263ed0e8ec918664c35fe06f3e36efaabdc94ca02640c636839b14fe15805959b00ae3ce36947dce87ddd6630c535b4746ca112c67a78a924859d78397c4e2a2fbdddef8f1b489baed13c353d8d028bf0d151ec741beffbe9f8799dffe80cb9d503671f28ca178b1157904e267e54bda49d20b664f041e00103c8a9d14b10fe12f1e2abd78322b313664986ddae51cea26fb5ddc1ca52550e1fa401bbc0307a29e70892f3ebc8134699982440bdbb0c31fc8e6d5514c38bc240e25a56f35e5ed3d9e22cade7e9c1fdb9cc14ee37a2f0e4398b152381023e2802004d55fce9ac722b4a03a789e56165b94bf0ffac4ec900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f0d3f734d6ffdafb22b4659d30810fde1608c921b1db988f388fdaa55ec907ebb5073c4d236d60009e24c80ffedc70b2b724516e1a74886a7f01d16e31387d8d565ea650371537eda1a6c6a1a4b39f9b63cadf7b8d91f2a420e82b50cd6766c350d231f5927bbe5e69c89cf87d941027385ebcd668c8643e2338ec260d622a159f5d44d4682bef96647a61313cad2041a011a5efe6189ab93fd1a72300149fa920393da012a0d6825a372b89598896fa69157370c8e49bc334ed11f51f3f5a1cd89f70ffa3bfdcfee2266ed6af0a6c7752a9749b44e8d3c66ecd91ebaa78be33ce2595efa705c7740f6bc06281c579b66a138265b6968689f9c0aab0eb8ccf65625955c71abee46ab55e2755dd8015beb7202e4631ff328fe08c3c8ecf9457d11e10d85daac4d3b01ac8c0056fef7ae16b6d651ce45eb98674aa28b5151204a736e74a5876763bc9bf6ce57506a28b716c86fef0f5ca6f0aab548e9173d712f093fa5c9ca44030c82d5a6e3aab41c9f4f64c97f9a1a482c6216756d3e4be9be648dec535ff2085e225cd488950c644c8fe3ea6b6d9e688a89f045de4f377d30f1e78da16f744d137eb3282156465b539e20a1ae1dfb7086eefd82f05e0461070000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000138045fed29e831601ffaeaefd962c9c509a37f9c022bbce2e9fd0912bfa59fbe96121cf8090abb622e162326073173e735402a4f6ef05a5938d40f348b71ee8c8d8b142a30256fa4789d545b2b39741e700fcc554faaa66d1dab207bc576a014380207401fb9003d4c3c4b134f118566dad7e7b5a0a82996be08fc94b4847aad1e3253d9f7785a2a3cbe557c6cd325e2148862bd3700fdef930cdc8c497f127d752698c2741e60abfdc82e8858173522b324fb85c62c7baadfbfbf94dea2f2bf12357675d8e51f9e8b4de12ee5116fe179a5b0e9824b8df3533ef438ea70798025fa869ade3ef4c9a6e4b1eb614ead6c597cda6ca5ac2306cc209abb7fbde87ec7369666a138b273e75dcfa1d57156b979e048a6feb3bdd39ff38600cfff0adfbde6e0809418d68f9faac5080d01ed95c5ccb7baae88544ba5defe3b435fce5d9ae7f8edc55cd68a287c63810a75e4edc3b3c3ae2bb4df96b95b4c8398177b53d5b05e4f96f62dbd9d1f1d5a33461437f909bb5770ae264b83c1f0ddc8762a05bb607ec053681aa682879e658dc7631c49e280dbfaba5a33ee54cc5e77171dbf9faff7905aaf8318a31a80c8d634b4d6dceacc7db8e900b81e9d160bf29f99800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cc1f05231c9444ca9f9af31c9df8e7786f2ad523873c3c089bc4f05ad6f43d66221a778eb2589c3567037d1598f4bc045ad2b8be650d0c1b95f86789bdd22fd9ed5c5bf2e1d24621301ca5d8270e495117f522e986c53fab3a8436c536dbbfeed43cee9038bb82659a8d833035eac21e1eccc60273146a7c0e5c34d79220c19393ac657dc28f153355c9f123513e7231d258dc7bd251100226a7ab55e87a3ee780fffe061419c0240e16b045c5c2a16e695adda5452c2c94a6f0ad2e58a5407d883fc687e4b1068d5dcace7acc254cc7b166281e51fc2c26b2af7d236527cafa3736f72860a3c4893cf6e4cb11fab020a725fa4e05e84d381c0377b06e546277aac8827832fd2f5496655dd5dd2c460ba1ac9814fd7b89633915a9bbfb013218db2ec7adadbe1bbcf95d51080341f3e20f4cbf7850f58dd05c99da36bafd0a7e7b88d11576b7366268917976b98b99ea18e2022a99dd004cf07f4df7354fbe708ea14bde3f9a245d5f35eded72651f450f0eea4212fd2ffb9c7ea5ff101790451d8f020b18fb1fbbbde42a2d5d6c8a9da5b9fc31af64b10ffeb0ffb933fe65bc80152936b20415354e05b8daa56b43afaed2af0359672cfec0c2dadffe4b033000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b4e0cfa5a9d0e53f79c4fa72dbe5d66b21da443ce7699a36407309ecbb8e807eddeffdcd23ab19c1ff9f4133407caaced97bf40dbe91eac79439365a01cc79610bbc1c0f384a5d994dca28ba5cd73a136ca34e48e6809cdc4e3882c0a170858e764d2f590b208ba711a1c6945e72565da16c2d99f12cacd6bbc2e3f4e831f16e48f8c2f718fcb999686d133cf03f61159e5f0de63f2b147d2055a11bda3d43f47af8795e35d3a43b84d3fe2dc8b0a157f35092ffe10b05cd2e58e0c0629e1d8571f3df2b768ddfe1d7a126cd6b36d2091a249bb5ca8d404289e4f2651c331bc8eb18f5e5cbe716d58f2675e1ba3d784c71faa44de5f268b724b721222d9520bb8538e70a7f2889837d0950617be1cea3ebac351580aa6889f1408d88bc36d01ace8fec054668f96c3512de727af0447af3cfbcb6ae672052b9a695893ae3d956e674becfb627caad868b352a859b80b3d24089491d40633d522585d3a5cec9d28b48c7521733967d27553eb0d7f9c7750719e33b97b8a9119d9c7a45bd7f48bf61385a50cb0e7036e26e9936b0bcbe26d006718685a85851a679de0a7e8e253914d94ee1a90f5cba0aed5a82fcc51c3ffe488d03379a5d2cfb76e3a6414b670000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a700781a3f97a827fa50e8f23ec2d66c9ea6a98365fe367b02e1a090eac0f3e21fd84406a080dc74885100b5567620fa6cb839cac5a7d1ac6148b0b974cc32c7ff35c061b56299c0474ef17218172534bb93778dcbc4728244ead808280985b04db395fe576ca3ec3c41ed812567379e7c8879b61a5950c37835db433c41f134338f6e99a4d8fd48b37496b86714990af54395980eaf69bb9f62f85cb06e01b6815234155e7b0ec7c902e0b6a5ee38aba63b9f167fadeb4ed87fbf2dc39547e07ac18402847336b0889f0f03fa7839341c0c79b7712aea756259b701ca7c01f7ffbec49afeb6c967e762b9596e5df33b4a6e80df29bcec3ad34e180bfe79b30a90e7a3cb78ff6360a1561aca25a6fcf0b3634bfc2ecfa66f8c1e9ce7049a99853d92aba2098d61f703786becc19cba6835a329eeb42d0b9bbbc8a4fb05f0cb1e58491e20245956face73dc91cff5f2bbd1ea30a1a7fe9a926d9724c799859979440ab1f2a49017d726c88af75acb010b9402c4dfcbc136c21989e0c3bb0c1bf8c6a324dd8a4e709eb0a588053bd535446ea70efdad64f7bc0e531745a567cd3e865a0615414c99705c9d257535ab98c36d6a80fac58a4d6cce2ca275ebbd89360000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2b74aeadbd3aea31e0d7e05b21866dd5bbef6d0257850acb346f60cc99997faf0c38a783ba799c16edfd430aba66a80b067ec3432e4c01ae4e2d3f647262dcbf4427c440d65a6877fb45f9656179e60eda68cee03349252f5df02826f5c8cda69a0249a8dc97fd05d106addf984a614dde316e117e030d8a5baa81d42e33b05c49cd625fe811b640a8571bcbc4257d2927ec2ac7a6f75d3b115c5e2f8a6890206888214ec8b0a53005ce021a546c638b0ec0e2682bce70859a3c437cb3ff17f294af41f52e25de3909e9346c51edd7594e935370076f3663716863ac5701af84e68b4f843db658c6cdb690326e852a3498921390a5baaec1884712e0a1397bd6d5eb0cf451a766e3e229bf81f79e2f2460c8747bdbc0c62847ea9e11d4474edb621382ed7d647d9c89938a58926ad53271fde4be51fb662664337cd9756ff9629b8ab7f585eb3d16e7680edcd4c9fb3496893ae77d782751d9870c404cfc83e6cae4ba885ac3939628099e2f581141a769c257d4fee848a42bb3cf64b89cb9992254fcc3c1cd2293650a5417a01b93f977a0bcd62e2132d0738a215379d96e5be5fe7dd124b860d2e21298a06ded74a9bf06c86b3411edf5eb9c673a5c58e6d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6568d002212d44d2abc630e9f7f4caf9a5db75a45d644aed089c34cd666ce6c0b44cac3d840d52147d491c4d34c6dcb95b06bb103d12412267a5b8a608945d123e78fea9f998ff34e276f741addff3b3120819dd2ee4c006a1dedd8cc9f6065e9a08d5b63915a7a4f442461044f22ddb011e0a929e65c29ab7704afc8319d8e0fffbe727cd0a2f05cbe1980e2bd08b0dc7d96edbc480d77dd38b495855d84bdde5f2bf3ebf9974f4d59aa079fc6bfe516c576ee5e21d9cabfd0ce54c43a161890b5862a5ad5b23f2b3f56e72ceb6ac1b0755499b2263deebf2ee6e2501091acd233b1f151b68ba5295cbc327f26ba7f56d21ac8255715294dcdd9e98134d2a9fcb488b87a16a2587cbd62bef88c6808f0ab8114b528535e716d27508c0c01b64dc17047a9929a4be61fa4ba4693e4d54b41c1be12f7d417e964bb50bcd569a1ec9a028933bf6ef3957ce96ab20d824f4d2a1b7a63913ea218b48bcfdf8dcf914bfe3561d91fd6f44ff897440e5aafd3d0a2c13926eabb595136b96676036c7d0779f1ccdda1400e0ba2b163f32c0bc5371d02b25fd7419f7f7ed2a81c417a83f94a43d65b141e97f8cf122e596d2e9cb492a1e751de1d409eddb1451964b59100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f3fe83424c20d2c02a3674dd6d1e543c0f66870719c0f261a33f50653d40d8f5a0d3f75f8c460f0e61d4636d1f6ae07e832fa932c4ff7d699b75e61340340d984e8e255fcb29735e75eab5fdc8948770d135c02402640040b90b67d71311c22c242e0f4ba3800ffb5e7adb914dfedd3b215daa5f2ef2c0567474541e62afb3645d198bf2b63b2d5f570c8e04c5fdf98f44a3649774553b0671a0ea2515b24f99d1dd37be3d51300f706bc511cc189fb92b656c726ad7e0b46798372708a37308bb2501452d610875e8599aa08040eef1fd9a047edc8cfd6f0006326ffa05d644e22b7e72adfed1292799711eaabf3d75f1eb2bf8b9675f87be375fafefc32b35959cb287f760eef4d5fdf44f3636e88987bfdea6fb3e81ea8e2a70cb8494932d128ea5fda7cb59eca092fc0b71bf916e4f3e93264a2a1c1bc5115d43ca04a3db80bbce68433fdb813e1a9fd479e8d26068189294fc1dbf2f18c0c28a6f70c5ec3c85c8c600a687ca55e9cb402efbcc5019f7a68264fdc098b836a62fdddbe069026bb66fbe9a09eb91bf5188d234282ed55ab01a3268513b8817a80fd04f5c270018510bf5f143046a555298ff35444869a245ab6d9b631ea768fac40fee0aa0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000127256dabc3a2e848ff87fc907ed1a6145fc69b9b717b50b9cc3acbb3503d861d388a07457da3dadfc2a5045ef72801e9d2ef54aadab2cf7444b61ee7bf41e6b909755ea329d7c7284b7fb7584cec094cae389f1caa5c411d7e5dd34f7e57eb24787d7b925b29d602d989f46c3a876ed36dab62a04e557ca648ede3804798e1b709404b6c8fba3c8c57d418941979b1d0ee83bfd895b113f99c4516a694a1f776396f4a433e25813cf64024553b142d1ce69eee76852a0126fe4ed8836a62bb505a65a43070a39520b41ccd478908bcd933cd612c8de2a73d1fd2ab74bd845a9282746f13e8f4e1516bebc63caac41522916a6aa587d34eccba720b5b5ccea4fe921184b68c03ca81ff530bc07bbdb777cbe0a3983dd5aac24f968ea30aefe0f1fffae1e7e6bc8bc79f2e12ac5361a1601a40ae236c90c0b3f684f4afdcc795e2b214d0626f992cac5cb2de5e84b785df767fcc56c187601e8b53fa760f83b9091fcce3a08d56b41dfda2d2ff730ffda29c483cb5439f5c8d33d6f8fbe86d8b53d5ddcf6362a8fa7f4913142f7a59d418bb6b90f372eeedc1a19cd315c16add4ee15e4bff96420ab2d50dead9a30d6c897a7f159cdb13abe5181cba913c5d05100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cb82a99a27be5e69a85d9e2ca0457683a9a8be7de829173a0b0ce9c1e7f75d385447b307afe97f4ba06f2757695ceee98d9f0990ce13ed2a77a5ddd5169d75c0df0d4a6fd7f8b28a7e99d498b1cc95770abb7a8f4a3b84f2aabfe3827b1dea0f632e99daf768c213a494bdbde1b97486a34a05ad97eb8054bdb5235ca42711fbfb89c6819d4988c19e86e612d7d1e1d4f6aadc4989ca97652f78f2883e3d66a10459e2a995cdcc37382990dfd2dc4a24860d9059ab7796b4a2a420e103afd128a6b05b6ad6862b8f09ddc1d4c616d990306dc0a3a7d5b0f1dbda1983e3ec19616dab9d637acc0536b15ba860627c0a89089809feadbef1eb9ffe557a6e5fb04964595e52c940410434246b805dffab160e2255fcdd176ce060206d41bd0396de4761f4dc49afe281d1f22e78c43be871a1a2aaf87589e97dfcb8cc89b31bbb8b00dfbca26ac6634db7bcb0e02b74300ad2acd0e0ae3a6bfd41c074c43b2396707f0a3e120540d06215f6e588aa34f05045b19297811869c7ebf398e2ceeab933d111f18899c4d519d0ed1c3a34a7ade6b561577d461c179f69bbfe7b19bdb9d07fc13131ab118d5075d7b699938f9ea8d483f27507c3b8d183c7a16acf1e71e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7712540519a31b834598232265df62457c8c0fbd0538ede600d94352b92a75e5bdab6876475c1c27e0c688215b9c6ab83f0e51b1410e5672d921a225494b32889976e0865a85fbe1ae63c5ce33a22c42bd075005ce1f171ec10ba70cc94d743fad2051f3060f7454cec89f15cf0c6526a11204466a03c556a4827acf97e58282ee1c974a250bc5892861b2712db6a519a935c6b9d5f87ffae3893053955b830fad393f6055da995d16fb5c168edb3de800fd0094ebcc92ec2364faeaef6f6da355532a99d87ea0458d16884f41c5f25bda4c4c6a7d23a513e2a1787ecddc331588e4526e39054601ab1bf656310f0edc835a07f4e7b02e958d27ae53ebafdac02453c7c4241504d366976a13f92b48384a2f059f500966983e477a25a4d7472732eea47508fad8cf163f987b4e1fb94460e8b927410cc2ae15d271dd378c0c145b2d7188910caaaae94d8a458a6c2299524a1d770a1f605e4f185f52956bbf87e99a5f6342276cf1e5f6c025a4561702c83f686734ff5f88ee43d3647b548fbe3a5441eef082014b15d81dd9c26b472fd5e57f569ccb4da2b0470b7f2e307cbd8c5cdd4ad9bd363d86817c72e213c3b4ef116f45f7bd3bcb56f6f735fd4905e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000128a630eca5f0ab1c1c7e545e575ccb7e9de859df64e376a36e98fcb0ca57edce30be5d0e74e9a068bce9befb31d0d2aaef5289bbaba8eb5a2510526750ad00e51ab23fb2c358c524ce922b4f33d9a1ad5080595d319d59acf712df27cebfcf30bbd57466fcc90720bc38ea8fb0144d581b68bd8c44a391ba1121ffdcb7b74d018e06234aab1b63e7dfdf4f2dc329c510f55342b23fdaba5a36822da32a378e867a4ad2d3ee569258660854bbe87a540be1a28cf8f73b8629bdd46cd7efa0293bcfc4e479dd865214ae375309ae8598691b408ff8ddc335941e936db96e4735e7452e1e2069f2f29c0f4c20c15f59e8805cf8ae21fe232f5c5bd5459bf42f8651a8e4a80de77f39dfba916adf2547c99a7163dd9accdaa1b97b9a0684b8c3deb4440f530d0c207a99a09b2d0a7517a48b819c29a83f725c46d18090c289e666462ae13cc2de11fa2bb0f1790058199972219f1d6e90e65a35c4dfe5f710a936776c37b4ee1dd1feb1b6a09412933138533872625544c41b46eb16799d0bc47ddfdf14fbd1ef1a3fd3b3568da18ea5834876ffaebf1316a10f7ba03daedcbf3bb8f4aa20451637f8f5f676e83c6db2c698f638828b3d97f0b70436beed17223ee000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097e15a03b16d33a3a40c92bbf21a193d69ad2b7aefcbc4205dc47fe77b44eb76db687ea4cd7f12e8f545ca6e7f8829f669d7d0ce973c596de9c9f019159722c9abd8ff53d504d95176c1b94f8166242e9fbbefdf36fc8f632096112e8f81bd54bb5a7a30e20cf65d2b0ae4b1238dd242bba0ceac6ad3358379fc0427e34726a86e428d1172f054d91141bb4fe344c0346fd3cdbc240fc032c8182856bc61bc5352f2a29f6daa26797f2fde583cc82d04fd8a028b1d415acf73b29e6b9115fed96663221e82f588d1325c789a5aac292588d79dcc2c6e921773b4e57f34931a1aaaf65ed74f0199fefa49ae915d96a951049fab2b1f34ae729093b04b004e40e63aea31f857739bda5c2c5296a61838f6e5c43f24048ee7c30a362636f99659119a19317a88084a2fa91923206da7a29e9a5fab92fabf744ac60d65086fe6e89d02fabc0c26fb9a5ff43d8fd3142b31f26286edddbecb7493b61d3b3616c6136796e71822da8bd4c521f6f4a07af048d0c1cfd0a7fd854282a5bf8234d0de4aca27a932e83bd01f7ce0548ca3afa99915c8e8f5d4616ee110f6993bd9d34528f155d9fec5111ad0c6ad0a4865dfe508404b333ba20618c0553814b17b8bbe7c7b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bc2cc76a7c6d8ea602ed388947f793b9347a045f4f40433ae15faf8b7b350e9dbbd90c802c5097066a7555758bf5d0f0d149088e62758ba215ab8cf9f78f3184365fce53adc5cb81acc2ea16ae464fe60a6265b1040a299baf525de56a9a6efa9196d0622b5e51a1e8b1e4a53a6ab977dda00d53c42ba7de168851436bef0ac804d12f681765ce577bbaa50406d384de1d121ae0ca3251045faeac1bc75238a77ec5a7d114423637a65ad57b79f376691206ad6cb450cbde6028ce20225c2ad2a73bb33834d2567a30395c664aa4bd654fc41d9f2ac86749c1e390c6a995abfe4398f18618b20f0b2508efcb7e2d7448cf6a7fca91429db537977c78dad435024c3ebe8fc91cfc5ba50451d823cc4c9f2b8ee07bce34fec9b003b616cb7de8fceb98ad870b521b7fa7b40575dba50f5f49df7bed5daee76e5d824ee1072efeb159739be86458a21caf6032e481088987b69a7beeac5e3e8e1b948f8d4647bc53c7a3138f89a4935828f70adf16f83832d43eacbbc2ca086cd517e465ff84b5811eb17b23f84e4c3d08b14e3559184083a69ac11cd6913750cd1832a06efd0b6e15aba4e1b6e6aadeb04756c9427d3a0d668c303786840263e1ffac55e521e8400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002da1fe083e90891d83dfe76d1f96eb597a88864015783791cc0b974240c0ffbdbcc484f9733454d62782a3cded6919fb7b932ae77e1a3238a71de92046a0b78d7ce588b1cabeb64b47f2b18b0077267f6a146addda53ed75a3c6475a68cde4d539f400907392fa99246c5d888c58218bcc231f27b54ae8777d305e0642e82dd1ce1afcbd3985e149f6569b04ee93ce6d7f25fd472323b7a3229b5a3e2709961fe83b87f65ae4662d4cd29b7a7fc1d39c06fdd2c61edcf8803d39ef1e287d8fdade2ff4ff838d2ba34326775ce1e686700166afb9125af25a835692dbbfe2c2563bfd601e79545da4a7aa330ac3bd2b6892ca4752b9f299e618b24c68bfc18a5b8301b45d5968a50cfa2921e5dd4d0efc993ddcf67b6c81cb0ae303d64e3aa1fc34030329fbda63ae73a89b6ac7443ef87545ce7a5bcf0b42d3f834d41df5ca083f22f51373e9df7b5743313e59bee7ace65edb72943b157b6e6ed84628d447452cd9f74a63b050d040721d3d369d3f9d79ddd1ed45734178bc1cfbdb337468e053484ca8aa6f5a212dbc3d303082c8b3e7cd173599683d83a31211922fa7c5f02e9ae41873e62246dac47cc9a1203689cae030e27393b3bede8073d0bd5ec0b6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015a9635293c59f2c72f31273ae2804d18326bb2bde2094cda0820a9e8da03950986a191a61af8ebdde83462dfec42280aeb7e1b97d5989d0432ab97da2efcf2ae4d45c05978d5d724ebc7dbea9a1134aea421555b2bc4c0ae939e949eaaebce5ac60091cba2d46fef8e0180866782ef77a8b5ab09f97fe9e8d41a67ddbe13f565fc20a212c2a0bb61edbb75f31fe5887ac524597993b80918928d594a61fdb2973d190caf0c9c788360588b95c867b8e7d250c36421e9aff1f9a8def8d39017da3e0554bc75504e21a15b38906d8c7d2159aaf1d334ff7e98aa540e19d20fc12b8dc71c1c3d34c59fce2b1686e3cebf3554b82dc35d5105e95341470b1ffa76b2ecefe14cc806d7a59cc5bd017c96e7f1127f662aed39f11f41757040b330b4e7af762d8dedb53272d1b7a5696cb8674f5ea1a642f678a276613cd5595fffee7646cd2fc7f59eb18c797f7736da2d7c6cd968d098a4a23186299bbb50657e82d148b5bd6932ccac9a8aadf5bf250eb0b1cd5aa7c6bfffc6d5af17ca0c8175968145775aaad4d0c9618117acb8bdcec7126b05692eb3a4d0946b31b6586ebf82e4040bbaff88adb65654a926bf79267e1d127fc599f8c90d4c84c6eb79d657cf9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087d4ac4eb9664624427f2c50b3068ab7411e8fcc12659da237b10c0703ab77c5a8722c3432c65a068e6f7bc968861f93265c6cafd57929a3a6afce872cd71499cb1d7dedff2485b960b60668c097f11fc039c88d0111d30934e74dcbb812c614ec7162d03d0942798d1559ca0ae6dab9e2d754bcce23a53e319a45f1bbcb99402e21d1782d961b7275f8d53f91c0d531cdcc416bf779c480649503c397143efb0b0a50c8d6e1dc05e5fb5dd8c19f3600af7761c718a2ebcd236a361335eeee96b1768aa3abd54624a329d5e0c2bdb92ac8a86e6747287b8bc29899903da386930304214e58ec17be54acb0e730561649108f9cf938cc51a72f911e207ea71cd785a351774ee26849fe56c4fb1514228dac35aaff9c6efba90fec74826d6e7f1b31d5f9172fd92b5c934f0ae4a4ac2688d4d40bc4445fb17f2dc8d6924ab5fe7e0f6149951fee6b3978d130c5565b24ea8307ebd4a27e22510ecf33bf942453847501ed1dd3bddacfd4ca08870efb4bf7976356744d89fac91b90b00dcd159cf5bdcdfb524b8edc331e729d5769bf2d91e5bad7f6e1fc9c91a173442ea6d744624dfd35ea3494f4d9d1a8958db29e74068ae6f825f3b5e9ef32aefabb627a927300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008190178acb046de43e6f70061c453434e78d2c83941684d63d703f83a11908aa3e97dbc5f593f301555e55d1064456a3391d38fb9d607457ce6ebdc30e7fa562db5075e01b9a4f6a85178716ac1f98d9c307732932ac6291558bc3c5089978b1001eabec59861c24bbd108e35be1fe8f366db9ae3140970078b48a176daf28765bb5d9cd9b8dfaf448ed8ec26814bfc032dfb4863fc95b5c90f67ef62e732af74251e82ae4c78a19914e1b3b77880a54378afe2dc43b8da864625c3588cf1e3470633043fdba7e545caafdc128e2ed46767cbf2074c62194b603fbd9be224a1fa19fc692838f6a318515ecced9ddd0d4d32d77d22eca73681ddce413d4bcf40411932e13a4edb1eefe4d423974f31e6cc1c77fc29fea48a4fbc9fd57a1ca0430c944229a399a0f213ce880ed4b51b341f8fad020d521546486baaf8a228e1dd0968cd31b3c3edb6f09cc7e746ba2068810ff9352291873c61f898ad8dc33e6153f0219baed678b6ce748df772dac82fc95ae9c14c3b7b21762b749d94ef2ecaf9205dd395086d2cd7400e4c9a19015311f0bbf35cb5653226bf2bd004787fd383c9cfe2665ed60bcf6225d4a1c446a0ab42721b138d49d0d16030e9628f8e4d30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a68989c735722293dbf83715d4598d97538341bb67bedff57c8411263f62cb3fc37fc681099d019c426a54dbfb7101e5ee93ac0acbedb64e73c5515946131fc4af81a79b2117dd4facfe97546fd77a6d4e3dd700f0b49773bb5a8f6956ce131b66e4bd8158b39912fbb9fab44500d36bb36a93f87b93649af6bf83153504adf4337d29258ce9d6b8bb25a2e100e2a496c6b99f4a4dd82c772dbb517c700a3fe716f78cc7e488245905d5d28e9b6a419fa269735abc387cad59a06b3b16a5f70cb7e48546e5c3dcd3273bb07466cbd69b6421ae48760e9bdd752f3456c420d437b5748504ccf9837c82c5ab4701e1ab4e2b4964ffd2bedf39c9f41100da7e093dfea44c1317ca8b671ceeeb5f8f7980a0bd632d4b97217d6074279d9accf97274daea9202e4edec96fb7a5e7c597f18d6b663cefb86525dcf8da3694864fc628a0302cea309ed35a767d829cafeffef1d2fed8494bfa890f18ba90f2b75cf707f2b58d63896c091e08f1f01014e3789d38ca8fa9612fe9ce2c703974c964b6b419efc4ddc60f835308fe21a235d51d209090088b1458a3124de849d7f4f0c0b52d358093d5d4f916ae34243d8868e8cc39ab07204af7b39d99f13dee1c9acf9c300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009caebbec95fcc991f24642bf5b4baaf0bacb088f245362c8748067c0fb8b52d1524aa6ebe66ec1769f7db509b338c288993441ee208350ac604b8361626eb262269d70db70636959f3cf7008a346699b0f4c6c46cb73becea856e23db3a89c9b1e3b309431a216b5910d34a148c2601ef9a6e6e19659ed329b311eabaf0a9b973af96ec759394675d91b47aaf3791cc23a13af03fb4eb9a38a1436f61ae194f21430816a8f40d1d4a6ef3b17321a945db97a4187092e0b99c83a6d99101d57a15b7012b7bc2a6d29d0049bf4d1b99a79ea6037bf97f3b9f8442179494b07b5c2d74aec265bede57dd7c676a77ba2b3adc17f2597b6ed9fa4a475ac6ef588719cf791f9f3cb30716d67ba5732da28fdcdb9c1d65158f360c2091a09fd7326e8eda7a1df16aa5289fef3522de55261f26282eb00beb70c377c43f8398a6e77a03fd051e217d616787861af7402b7eed17936a24572ab52a8e271a58111fdcdea2148253abef17504f6c3ca035de065897a4ef1b108fb5b46ef8ff968b19ae461b60dd8c82b10d838bf8d27eedffe1b645199a52b1381c09a8c257935b5fed9839495dd719ea6467ba2425f6f55b4448fe91cd825cb2cb8d81f0c934ffafacb66ff0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a31ad09fa05938b6587d525498796ed9689e83f5ac001a430897465f6910863b801d8f6a57ec26ba25d97e05f0178e82a847dc2f7c4c5479c3f3be68e58a22e56b13b417c6684318348890e3f3d5c312afd711e0c1588c21e84bff0da34a5b5b8e4c80a48266ac2ec7e5be134a2e744ca92924a42136d5d1afee86cc8217526ec36e084dac5ce183374be73f7ec54a115dd0ad1cc7588e4bee510f284fd7c572afcd807d6ba67819f406a40bd685d62027ae4a971894a3a72bc68ed15d5b9a9db3f9e9c5ada3657af622ff746efd74cb963af6c871c72f9a448a912c83a91f89b5c483c22a5faa31d004973eebb5e1e49b61d16496d9c1072e99eff86f723168b39160762e9c464c753ae63eb340bb5fae8cd2b56ac1329bbd53cdd858fdc70288e5360fa3e9bf629a093de1e2ed6272386ef8e5203304bc8d6304e1e0a9df8f4430d312ee3dab74cd20c2b8309b9b0cea4981f9ba1246a44685e45a54fe7cbdadf156de13f09380775a95db43f37d2a6db969c21218094260d068b22ad50a00eb1a8f097d2e6836fe753f45dad8455f8ce9d0daac4b62a4be0ebfb645ee26e7665ba503e46c4d18ecc50bc7cffb388ad885c7a291cd2bbd40ee526fa376e7e500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b985dd220b511b22a2e92c74c18e1f64d8a911f57e1851dbf42c633f5ca8f3942a16e70664132027f074e3f22120ae5f67dd57f371333173441221245c1c4b47d0e67d0c8d3a35cf97e096e0060518c25d5d5fd496719f96729b4ed539705390ecb1ba296a24bfda7b0f32a22114013b64ea54cc0322d4aec249b06d127670e01ce1981f9d6a0d5b9a5ea5f6f2d8c4ea74a6760b3d57b8d38785bddc777e5373eb503db7f1f653bad084b96952f726c1d3ba879fa4df310b22e442754013a8d87dfd131b03ffeba63cbe9981d710fa0e4c163e4b6a92c979cce8faa35216ac208e1bfb742f6507f843263c26f952a6bb5d34c173bc440c856052feef36b6ed53d313f50c8ac7aa18695f4d05694cbc2b6d7de998ce326f24e0981cda91f91e2f155ee6b50ded5f1479b274e5cb50aaa1964e06aa3255afd8fbb586eb069d1400253fdcdabaa366726de9b65a2aed91dfc650c6385faad29b2d849c5ce53816e24a4cb0588db5ed64eafc3dccbbf1d177899e2c23c582bd6734e312a1a76f5e06b1ace4471161e3b36c586e5b571c3b30794294d08e6d8f4315b592db2a7046a6ddc549e0badf44c3ce88fe2b6715c948dfdfe4b78972ddbf23a209535d420600000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aee2fb95971d2f00841c709fba2606337e63be2210d69b712c79ab2305d6f33de956bb95409d3ce8c974e0d38bc9f226b268915d6c49cfb682f8a15453edded6f30afe1da2845df03f751522ce4811c42680faca52be8ee5bd913c5e975f919d12424ad2d451c00f1118909a617e89f7717cfdb554cb9185d54ad6c0fe0566d9078dc56e45e528e24c4fc4c6279244d6fd2362d6939ef9bf4da84c9e6b9e364fc86e206e2eeb2121eabb9109f656481753d830e34c79a03df6d26d9ff963f9228b5f3a7c1a8353c1cffd99eed38607d897f692bd5d39fcce00d4542c6fe1b1d10961082fdeb15d7fb4c367300dd3cb5e57d9aa9c6d5c03d30278efe5cb1742b3ec9d7dbf154deee3b89a14e44983ac1baf5951d5849ee5151320d685153c7b3a5aa902c416833b07ac2e6e8a86c30e18bc8c010f6002b5d9352b6c5b86c21b72e49a6f354f3451b1b9c44267d7aaf512b50db535f47cddb9c36eca1b8aa6ef4a0ff9713f67d8fe44c5b3048301dbc825cf81b6ff3199dc7a0353dad055c3175e8e8998d7499735335535dcad460a2474c3adb962e8a5e41d82b93c4042a3ef42cec75452d10c5c7daecc6b9ef8cb1616f79493c9bbdc5130030a31570f826bf400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab51bd574f432fff479db4b2fd88bcf48e512731f1bc4bc571c42403954aa66b108d3922a9f7111a9cf5ffd8802c89b72054121478e3670e1eaf2cf650236978ef89769a021132f29d099801bbf8c1674afed265cc194a7fe2dc17370bc3ceec6692ee48b3639199f9058061ea093ccf9c34bd26bfe8e0ac10a139e87c0b73c93e619cad9bdc2813dbce643ee0fa11b6b16698c8316f9b013872e5fc1b1c69adbb7ee6fa0f64e3c97f66afd469d336a641a99378ef28516b32c1c05837103a387dc01ed5cf90584dab5aa547bba9f7913d7412448ae4a6ff88dfeb5cca7ed7d29768ba96c5e0c9ce89da4ecd708dc4165ef5c00d4dad8072b9ee46dd3165b0f163535211b56b661eb16d4447f6bad11c778bf7ac25eb7af71485fe512494ed28491504455f30bcbbc5cdeb131f8f45b2a4ca93098d75cafdf2e6998f5389b5405a8aecdabfe06e369036d31fd932eb3b093ffd6852d93f8d5777d7c651261775f119b7a377a012e059255fc1352d0f847b24749d76de9dc3d6e68f0f4abfbe52e734f6671260694b9d8c85e3491c9ebad86bdda6f3c6af5724893abb4cec0ad599a07151f66846b5f320a7f0a254b241bce36b3f25871a6cb695d3b9de521bd000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003244305d354f2d20a0b317d412768caf3014bc572a1732ba5d024751aa760ee65368e6ea3073a7ba00668eae7632a1e9f8220327c68ed90020fc184f648923d7d07c256eae7c9887b8ff8a924954d36bdd879e52817fd6ee923add17f31ada11eb683471b087478d616730ac8667cbc5d71d833ad99f8a58c56c0b59638634c414a1083a34070ec2329f68f30d7ede502a6f30c79563be094953e085ce38244cf7d0f268f3a5262ad8d13c0a67380083b539a8f02ccc638e74f0ae336e1231216f6666856444cc9da48637cea31b6b6df3659f2317685f5c884def97897ec955d38fc7a2c9f8a2e7a0e62b86d68fb3857074d878184d96a6bbc7ff6ee8fe3acaebff92580a591a0b5c9517d99a8f45745aa74ee9adba166295d234204e7ce71ef0fe168b277e216790025211d4b6586b48883a48fde375e49de9c42d1294b45137a4006442afdf49906a1b50ce994737c1993998fc2d27b35a021e31aaff0ef3e23f4338f18bfdfc289fa01d7aecdc610c2524c21b8b610620430092cb09cd5acdec51f8f86cfc093a0b3b3dda01b1dd4e3a000fba827cbf912af8eeffa7b522cbd54455f026cc873e672f0aa82cb620a49e53abc7656d5affea14dce7727540000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1b7aee0a72af70c275635d5cb695bdf97e47321b2763a633f8459fe430f3f029e1593a82237477c306dc72dd68175069db8d8dae943ebd793bf8eaa95292d49e316ed7b8acf44aaf36e8a920a0a291810b6fffcad4c9310837eadd4685696d3eaed2be8bf0d3e659478778e5545e36349588d6a925fcd144cc2956b180bfb5e505702d1deba2c8e2e7a5f771e9c226f91e16c995580656d064deb951afce0d8a19b22259d0bc3376f036b18b0fc32ea4eaf1c01354c73966c0b34a0af5d1b4f6c14ad8174abbcff3020e56e3dbaf806c016028e624888675e2158d856ba1e520a67b745b2c3ae58331e9593f28f734ac2d84cee002c93fa45a0793710985d3dda948ead9a0f42add033fb9f39a33674e35a972011355d9b0ac25a288755c867d8547a4c995711c642fb2ddaf3b559ff622afe10a60c441186e1220dc0ae18c37db89f78271fad13a578c4072bef34433fbb1006ccc13bdff78bbd83328948668339d030ad31f60b60122855d1198fb04868393a6f7a7f4c6ad4994bd85078ff0679f1b7f24c7e293d05f98e65c385e1af640c6e31b1529cc9c8ca89e78122ced9e8e106822c591ae01b8e3acba318896aa012f7bc30bf55ec39e4cb61b3aece000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d85eca1d436713ababd4fa5983f1f02c9bca9fb2da1f10bba6da728d46b781fccfa0fbbc0dee0821e38c86e81bd0af8466615bd74b6ec200489965e23aa04ff63bf3ce95f56b1fd1f83d105d615a4f5272c26db32fe3c80223f754e44dd2d2705173d04e1df1bfe97f61d17dc1d77967d7b03e529335580713b9bf1dd6637cfcdf49cc8d494e804749e514adb44d59bdd529efb89d7ba9be7bda2368c8856add4ea5edff97c718c95a2620e24114a6eab51720c965a60f1ccafa35a36e227c8e6419b43307f5fd314b672c591c10487321c6b28b23e7bed7185e1de63f56f0603fa3f5d85f93c520bb5762ec820497b09abfe69e6111baec3fc9be60572e68bb57bd65826e9c60476a6eb9dc202c1f1613d327b4a4e55278cef89a30ed697fbe5c572f5d0cb1a37333844f7368e0ceb7d6f5ab13802c70f14152fb32d36ab83f3783c83733462a1d70f06e9301eff3de4b1d2167864baba7cfdaa899c602af507ae54641435f103163572f7225ab60cbea899731b2782a610e7bc35b6588f0da7d85bdc9b035a484e29fefa299cb2424ba458f6cb0b68aad98deaf5bec9cae22269b16ae5be30937c5c61790415f980fe1d565dbd10f3ce20499a690e8d10600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c8a5850a7da4e001766c3d55063c5ee65fa52cfe84641f44413087129c8258b2b21a6c29f6d2fba90f731d5aa1005e7efb3374435448e3854947eb3a9c85315118741ac6627b748ad7637fdc674b8aa324b760d23412644d151ae5dc4b73de877c205fdb6eacb1cabba95035c594def833a5a9f15c9145d8b983eb78272cd5802313adb522bbac7f284fcbc1c8ff3436de6b9aadc0224bff6ecdb014fafff8e3504d2774b0cd71188327e16397acd652d4859f8e500795e02b576c6db2c1b99c21485d9ff0fe4e5fc39736cb172ed203d0350db158c1733f0707dbe1c3f88f0609392fa4fe504c7557a5e00361b2786505088385fb4d0ea6f9c8591f5d63a92838b0d36c854253084d600667f725e6aa5f76db64c61718f40443744881dd6600fb5ae97aff0df4331bb4106e56dab513f7e195bab9a9168376f0a0de28608c3d5fbead405ce3d696a49bf5a9e7e651dfbe82ab6c684ef9a01659759946b39da1d0e2f049a7aebb41c8cf429c82eeae75f9d469f3d6f1e67846346ba468d787d85580b799aeb6b682e69fbca06eb17ef6695d88145dd2b63c6d1aef323e13a77d6ac4dc4a1766ee76d949a0b52c4051a38a4f89547f6a0049478aeb3a460acfd000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013fdafa617bb3778ef15650162f30457bdf7bdf1f008a0258445562024458b77d20bc55d93fd30fd2a1387ca8cd299119e6bacac1cf5b15279fd0ce667eba6ba29cd4a8ad04bc1c56886190446c68565d4feb42777d4e86acdaa8af3630cd6d95771922ee4435f3ffdc41020bbeefcecbe9b91ddbaa1d2785468dd2cafb69d791782d8a3c4a261c69666b12288ece5d31dccb1ff2cf483862cce5f24bca74f425960ebaaddd921d0b3c108ead96758f2c90a21a1be10bb359bba24b52dd19eaf7b7530f1b05138c7fb99ad079496353921a81578aefe0907ee9e4ff95f05078e21e4ffad1e1c3978e0bd65900ebc2bc79404fca5e6c728ab69952c8299b3a8ad056bb482f5c7592e9f7b07f32162f51f1622560412fdfa7aa8f7bff217cf46dbc51202cf2ffe9c155abebd53e2c98a7b587df57481e9ff20fd2960e292c408bd4e8ee6ef4b5e6c34f621874899ffb221ecfb65fc4c596a927c1dca372b72f23de82a81a75eb38b307c6a66e66bc912e3e1c2803d4f40cc659368d048c0a0a998a98119fc59f4344d9a9683212e5d5e8883f8fb5147a4b77c2bf769ffbcdc8bd2271afc6cf812c2eac78ad9b1d92603f1d5ce3d350c013613b4ec2e23fae11fa50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ade12e594652c22f0fdefaf2fd5dafa4e5c1c8b0b59826717059f4543f8ef01834d39458cec8746db969372ad6620b2d984f272240cfe0f82669cfe8a36eaca690581d6c47dcc978760b8340daa7b437ad45d7a36ea5a8e6526f42f0bd1b495d320be4aeb89787bff3036b950a3df8c1541f602101137f7e7ca7013eaa01eee012683f1d464852af6d0b88250e233cd5814ce7c858ac2278fe504b917ca939e10fd9fad52d77330239a353b431eddea792a0006e18b756025640d1440696546d1f726b3f343a81d7454ab771971d37bcee782ce4b8da45de541c886ee32704fc46034798f56d7526708d62d087fc526d0c5eb028c6dc148d3627f0f366576b42ff8d40a02d5226abbf03a77a29bc70f68cb66e34db516a9ededf8e689600adc16856d06027c3ceac36928ee86210876277fcff336d752ba27248768a86a1a8abbad9560c4801c3f9dcc1c0e0e6d7d849b0946532d03f135cb7d34e65f8cf2d6d946d605e9ea5c3ed7d6c8266b595e38bf70022aba17e35f48f1f2b0c5b4065748afebbbd1f29d2f7a29ce8afbd733a79780e56281c8bec651c850a42f5d3eb801f8866d7dcfdd15d2597bd2fe8b3e8bd2bf7e9c6ca40c03f42b9fa92aefd70e5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094d8d193058d544424b04027c0a89366d30b8a93c294fed8495942399600daf43d3e3ad0d11bf51ed306be30bacfe8e1188e846502b323e60a6ad495f3d0f70bf9bb73a9b60724272bb1a66628cf433d0859542f714de7a9b4ca77e6439e2bd7baef101fc9f26a4a4c69755ade5cd68a2ffd7c203404b76e524bf7caf095e6b5d15bed13e328ac6031d7ead29be68da3e01236ca47a5eb168309076699aaecc63f76b4338979344683b0c2fa184a87d313ec07706d56a1c7f4f8fc7116e5180be7690aebcf35bb06b5b47a4d63d678300fa78a4c2409b82def55d1bd7b5eb7325d3d473441df2169398ec1526b812cc20cd561da462813ac5044a4b146e86634a90a1f31b8096490a55d5aaca618e063a88ef9630db3831d687b7668e01ef6af73591ad674ffccbf41fe50f675b6c05aea61b40f0d06e45c9a1b63c451d6e1d6678e3a48e838c958e67aa458f387c2a2351484d5855b8b97e274a33053de924b69d9b0c802a96b294051cc4cea43e4b76452805943b630a522d3f3acf293254deb862124030d5b7c5ef2b1562f217c04e43cc0ec33c7af0c846b5efc085d52c3cbfa8da7d14beb4de111358f0bd055368d797a27080b08892ef1d094064ee29700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f326a7806f9a09db4209001154bcd6f24875c3452cd93a67043462a8229f96bf5a5a2704a85ac21a7fe54033f71dd0191280adb6ffa5ee1b44c5bf58ff6244c4316d52aed07c62e93864372e89ae990e978d2e747eccec612af2c52e8522fd77212ffa05b7bba7dde27a328bf77d97bfbcdb8eeeedc92aa993c67b12a7b03badc193d614a948130075eeb7a51ffda4035e8c506533ae666de230a2cd8c447fffc7d64ca19aa8df661382090b32c2f00b4972647a64b09344a78122790b7cc622bc6a77f44107242c6e12f37bc622798be98277219986666ea074a6ecea0e8c19ea08e68f845998596f641d9528bd51cccc347269415b52ce835a1c29f44d7a31a11656afa3d8252627a712e471b0153a782fb111999ec97fc434137809dbc3b6bea3584387230c0e6724b6181aa3c4ef4b8bd65552479e513f625d4fa93869ea0fc6b3e7b064c21dc0c5f74702197bcb6a035124cdd10685679778337285e4eba3ab16df9f4ef2a6fb803c1497d33ee009de2656c02fae23b410d4c1f72d86ab838378d168c323e76354f843c9f01ab0f91e0e1ea21f3091f51e9228b2b65bdefa775620e4abd655daf49c6af3e15571638559d14b6023c4c805eee5cd5e5be00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ec53f883920ad1279a4d4888b5417559b5d9f1e318cba1c8a8b12c3a49453aee7b6fb4e540f95cc92d5e2e89c35ac3530cb32312ef3f793dde211bd54b59b3a3ca0fbfffecc2222f0aedb25fac28b641b2a70522a3b0aa1fb51a5b2209334a1797e96e264a883b01dd93c4d2dd9193144ea14543104d8b36e944e40408f332ba64e0a02738808c92c31b3e1b3edd46b8134d6f02510af019c6e372d20aba72c2b93b027d96c37f26ae715345d98261b36c198cba8dc142ac6ec036e11b7f97e4a4c96fdcecfbcdbed1cf8fa63c73a60402d344214a6a5ae91785d69a3c65270df75cc6ffaa5d5b95e18a25ba5788ae06380127a026d84b5e69ee3a8a2fdfc20646f9f1a27ca1e579ca57905d1e7ae0c12d04e9b7e8d6ebedf14aa3ec422e1a78933115268120ce95262217c712262f66fe5354d7156848a032abf3e01c8b222357bb76c73bad232838851320870bce3dca0a00146e0a04fd8cd29ae6f7cfd93aa7fd12bdb3f877de6c8f89e155b065385907eeb15326b79c30a5ca4977ce2a9247c0c7a0729299b7eb80b5a9a96299ad80e5366a3861526a433a0e14f088177206f06acb039b933820d4f1c94e1ff2cd1d5fa44b443adc23b7b54f7809ded4800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000efea894b96e1f1edbaca6a05c67c1dc97b8c3c633f076164e9553cdcd2723935c4c46133b6636ede22baf9a121d4ff970fc3c9927c56872ceadb833a78fcfb9cf9e1383a52e3dc897f818abb7dfb00f469a19257e73e834ebafa252b042ad5f84d9e2d3ba79b0248646298aaa43491daf0c2c0970a915b8da9e2d287e42ccf2dd9f6ea5f286ef3946f9cbc67321b992dd7996670afe11167e97c0dd53e3bac4fc1435ec18a42d141c859634e4d20d7f2ee8a5669c2e61af850fba4ea7a70b8100557128c9d4a5f94ecf96b8b95fbb49ade67dcbbeb034090490c656b2f531c15ffcdd6a6cada34a384c340b22e3e8c8658482fcf0f1201f58f7085044ed153a6d0bcf9a54334f0b4bd4ca03e7d4d1357cef8e23fc9166468294a0c8f351ee20be723ddf16c1a93c98abb8d5680b9d1a5236f36667a090bd73101e908ff280a7d9056f4d3ec980a4983571d0bbf3229e2a89b100d24e0e41bf9d8243b10c5744f2b43656811bcc3ffb6619ace7877530d3eb507ae8689e641b5b637156e53940ecf17946f1f4bfcd62c495e4c69703e4a09307358a1d14ba742bceedef63fa245166959fd4676f37a8f1c3cec57c9da39a3affeb9bbf95fcf6f653e64e25b72700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002db4d7ce93d710eb8c6c9f846f2a57915e41b9ebbe189deaa5a9b3bbf3c6e4dbb98e42797fb41d61b1d67ba6ee417be7ab0a946858d53a2d02c984ebe045d092d0c1e0e595ea376ee3c052307eaa6cc77b7e2987f611646c0f717aabc8cb738f724c03c5ff01e5564a228d47f927c41c2ee164e7d907586d6929a14c35a8503d340cf5f234c78b6edb1c9f1dfdcba10be30e09b6130e9e7c77ea557cb2a3e81798fd389fb3fe739cc50acc14687ece2483fd75e11d3c05267ff463e088797f9fd5c837b5ba28a661b87750ada543ac106945dffb9e5b03bfe2ced25ce2c63e0a8613dec1a6fbe9ed2468d0a90bb4e9ee527a8f38cf6d820ed69d54fbb1e4c7003267224daa5ff57b828418555d037a9b1c2f22f5e19d151a3fd1a9cda84710e520774ff37f7de07d4ef0a9674e652ccfe0f29a6dd553f36827e7d198cbc251001374f5d08ab7498af17f335f3828eda3e9c4fb775bd0ebbf20ab79734a275c312b0c43eb78149fdd65879ad0d23785b9ecb81ddbdad046b73ab329cc466a70edb7dacf03ce333b5e48aa91478be09df883e76357ff745fb57eab394e62923fd0a77843a219add85d86adc2b5c654ba4641d0ab13dacaf03ad8e01691e1b028c30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6cb8a50ba65aeaf3469df3b40935c6e1c9f27daf25b1dd9c250919f79003248c3d7bb58496bd42b8f6a3d165953955736d7724ccb774e23fd84355a61dac08e2bad5c9349ed5de78872f8edd1297e7ed82668ca347b736cfbf2e07b8d3e49c104f4a37bba1acb75130dba400d87acd2b3589c15b32c5901ae20517735eed8120c81e6624e80b32988d3c5c0c6a7a3ee012a86b684b19b8583013b6092fdf67d163aa93f2b57ed3a425b3275b708c1a87dd854a19a10cd8f660f4ba718a49ac447ff3aa88418f6790878fdeb4fd4c9a2aee40466c1b6a0ecbbe288b21743906598cfc316824b91a345f19f89471c695f59db945ff6d60a499aedab287ab67b5632d5919d647b08262d7426086ed0dd09a5095775eb8b3c62bef1f99f87c7cc190a28967c97f318d9cefb16f0e5dd998be2f38a785501a3a29f78084359e69e63dd2247521f8d0e24e813c4a739ecd4502cc61535c0e488474be89fc865ad0c944ae050c97656edf5291aad3d8856b7399385459b3016bb65fbaa4f99f9a77b99a2dd5d2703c22054870e7c302c8ffa0f351231697074631d20a7f7ddf46d92fa1c271d0d05468019b9334cafca1a478961597c1d86aee75b93ff0ae6cdc436e4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015fb3d69cf51d533c6d5d8a4d2ea6dfdf1d738b3fb3eba800eaeaa63cf0017fb36cbca49fb91e423702a5a75d394a602af6334cc0b4e9d3aceb2776a9b7e41bf6723d1dfef477e569d21f5d808f2beb4aab324240c867a61d90d137bb6ea9e4fd0df16c4c26c854c5705b15d6c275c387086f92285652e28706963d1f2505d7e5dcfba3f439935b81e635d2b15a57315a77789f09b5c1dcdf9adcfd4ebdce4cd81090411f3072c426e7022b43afac4f9701cd2c9094460df0f68c293d90a41c8a42c73402a19937ead9129913f182679c304e0cedacd2f1bb3d4f6e2097d45e5fc283814e6f5365125ed16606ed5bea8cc9840239fd541cdacd43722f1c5fa7bc930f59b93c3db60928882dcddb6d4c64d7c3873805b0bf0a8dce23362862459a8b079aafc0af9efcd8b639d7d0170ec6ee8d8e4f3deef626c1d613999e159824d8e382000da45fcb8988ac93c4daf163aa99a23c12f3e1a279522d4777b13e52532eaf7febb332574eda485219d98be4707de5a87ca1bf885dbb26bdd52671711da3bddde691b962de843e6ad0fdf560a2a619cc104c322789fdd690370f7bca34696b08f15ca6e3b016620dd6dc3981232388f70095a58486e3833138d88b30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aaa68810d57af13b7c79951bc5cbbbfd744087f0d9d6a9eecd197ca9af4a60881d31bfb79f15da93fb199dcdea2a1031f9947ce3b19491c69e797a19d150462c6521dacda8c331078b0fa927a205037456583bf8765746c565b356702bf82160aae74bf92c6bd536b740a2cd90de1edfe8e2ed86019ccf65593a2c8983d7205fc743df063cb9d5d896d16f6816933b9fd862b3631ba341fb69260fee18433bf0a1d2cbfa5c71ff6ffdf0be66868457e765c06b28b23cddd6d5a4100f26c9bce2647c6bb11f7f6b19760cfeb82ce79e539708350c0e1c1733ff8beaa5c9ccc5687c3b948fbc83c4295ed22128f1ad54637fb653e112377598648b6f2404b530867d66c9f01b9a5a98d609cbea8bbf1eaa732b53a1db2eeddc68f8bc471417d5760fd3e17bac675a851debf17633e892b092685bf0d8dc016d1e1ac03047554aeead3dfb167032d1c7e1bd20296f99d04a25d0e400638ed7a48ad116682bd58b408bb414b31bfa0175d417d7ef5b5c580978508a7080bf1567f338a1c4847112306fc0ec7e790e8d28a5138b7f24c167fddd5a1dd73f5dfd3686f232b2c9ea6dfcdebf3ed48d1566b8a7408f46d196cb4697373602ce47f68b10229c66dceb290b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16d656ab941ac272e800288b0d6adefd60a94cf8a84679ec4ca6cad4ca745b9670274c16f41e574260bc773829a7d90dc740bdccb2f5d3dd209c5bc1e5ea8e4e6e67c25c0526f0995a1d06ae8cb605d28be3981f825670153e8f5313d27daae032c843515bfbb96fcbcb00b09fd9da053d9a13f0d9f4913c02bc68f0e71283d949a6738300079a5bba1244439554aeac87789a29c3ee8fed0d47a0ceb4f068cdbf525507e45e523f0b873a15974b8fea84828206faef6e21c95ad10cd0b3ac2beb761ab791aac9f7974d847a788e0d95f9211497642d34d9a7734d0a797d567bc9c507f2d00369fab118a1ead9ba8952e23595d62c5bce2a7ed36b1928d7b61cb328d36f34fe93151a64c83225d267e31435cb919352d551d9013a3b4d74288818eb07f01ad5a6860956fdf63eeb4b837707211fbe9f04d920536de577799bd1680dbeb24c83a506d89bd3816312ff3d02d4dc0dd3f9b84d5f5b3cc0b6aca674fbda0ede02c0463836cc9434fa062cf279340b06c6fb0eca9724649dabdcac047a18b086bd628ab33d5aa5f4d044bcf7221db379335e86407dc1aa3b3742c7cb76d44bb1494ab9c2a8912335ae46989cdf1d39701d84deaabd826dbfb257023000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080826601db15e7b36fb5d2d7f52dff16dbea0fcc7fb73b098190a993e89bbe0d5a117016944a926aed8f3cb4f3f3323a673ca2fcb1f0556aed26bfef755828cbb0d921ea883f2b7b76945e276c1fbf26ec6aef9f3347472bb7cd5835e0f02f6fcb383306b1b691246b8b22f5535c3d94e2de36dca77ecf3f8988028e9b399c9969f4a19e1995b04b8306d23bba1247967e0b1b10253c06fbdf2897d3d85df0f1ef878f9a4133faf2e216d6349c546ad89a5965f81a20a952a197f26c8aaf5f10a8decd5a7310f3b93d7c0502f7a9affabd37f0b142ff1ec2dfa131a1ab2dd547ec79bd824ee24066c37ff61f918e92adc7ba2be40ea4dcd390e1f8dc9e4773af46d3680ffa4e365befc1efef23a9f38ff63da8aa48e8b3e019ef1c58e2a085489ad283b088ac4c2bbbf375eed7505d3e0220b8c13edbbbd39d69ca53b54755d861f0ad6fe6475e0a4a7dade651adbe06d1bd88c2038ce6a2e41bf00b6d3538576445ea934746c18f361b88b0788c89670737a50a8f2e948a828f7040baf61cd402070fb9a7c4df5cd4a14815918c7703e3f826414382687894b8793642788df0d5a6945b2a84a63adb425887ac419bd8da61216f91fccfb83af0634bb1b13d75000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095990966c8731fb2bcde0b9e938df8f62fd4552171cb096bf868ef58dc08c6a02ef2169d5e5da737b59ac4ca63e2d1455b78331d8a6d71ed69831d9dda05b203f891437f9abb1ddbe081d5865088dc8641d220905e098f1f275c0ddaf28ff265ddf050d3be95f0685dd537095e853452e2865dd86ac19fc7533b033122d4751e4211aa23af317ff775592f559209a4ef04cef5410047a973093d5f5c7ada702aab97a102b2cdcb6655a16502ac2133217743693fd1eea861e3a6674aa8637b863c53e3e147a2862a912b17a88fc14f534232cca5e2a6e3f4d7c739ea86e57bdfacdacf4bc06ac5bf8ec73468e7af9552202e370c20d2574b192fe68f0ad779ef030b012e7e5215a6f1c5e158739cda02d4bf81c62da321e93c8612a40d0e34a607db73df4228847eb132a4330a156e1819bcc20c07df82b72f20b57399bf1375eac205ef326ed052d514f9e8b3b381cf54fc8e5852bf8a13ccb6c49d2789361e037081d4e452808cb2b80b32fd5353101ba0774129bb7c50bc14ed1fee3ea72928cc886283e1f356eaf90619241f9248f704661dfd2422a28d35f5ed4d7e6d6941b587e7f819603f53aacece4fa378cddb0c97ee4a889bcbf98452df59cf0aa60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000939f8b39f9ab13d2c24d76f3fcaac6a6b48a6d768cd140b74112ad769c8a76db25bdfb50f2b9a1e65b2a09258630b0612a81c63b38d1bff21b8745ce85fe7f8c62547f33042d7c59a32b4ce776332f9ca5c1050cda27129effdfc5333b242ad1c41e0288b99ec70839ec841b3fc1720f6047dc6d98b2a73b567f82218f2618dc19fa505f3ab254600b05e7800ba12740c2bad77a6af6c5f4ed3860c0f9463e8e89099dbf3eee977fe75a13ce8519cb5ac41df9cc2448c327369bea324bab6833596a90dca3deeb69d572eefbd88aea01e20a652e223b4860483d97f5762e42335bf0e292ed0080ebb03ae96b0cc2a0d5bc0312582ca62c945137a2244a1c47102f80429f288ade211261d1aa9d0ea64a28a56b3315953dc9e41e4770bf3b8d33de9326366ffcd8982df629de3833b8d19cda36ba393ce3d78c39d4c61214522ba5b8dc83c937b774367c7f6bc2118a895b09cc9274f95da8480e7c5ed9659a62638ce51c7719d8fdc68b0d42f18b72719e3e8e48166ae243ed1303de9f900e5fae5d5bf25c5a873e4bac0037c314a07de765e022bce4f386a9f11ee4313502a3646c9a038d8ed65349382f9b2ed0600778d6ae920302ccbbfef12dcd2e2be19900000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48402f2320330d3414169048a91d5cc5ebca4ad4718d2fc8b0733b39be76642cb54e11d9257b226039029afbb530d48ff1b7c3bc15e1f566814e6af322252f99169c23f7dd6cad8e14de6a21266ce10d1ab694c1075a61b8a904ab1603bf5f87ded015a79c7cad9182097977db4d697451bcbdc16238fa7705c5142ae788e6c58cb727683957150eeacf6525869a353af0fa81e3ea656efc10c61cc7740b4a5cc44f177cff93578d2c91c6178f4bec8bb75ddcc3a1c3bac2525ac8bca865426c3c101469b1e49d0f07e7a0c2be744c379385e743c66c81a28e7766e00e3854a0074f06339e229317f70746e22a1d9190eea4fe2c1a5667ea26c0938d0cdec0dbb3962cbaf03b8e77162ef0de56f495bc66adb8d2cf4c88bb56103ad0b6f9b104765403be66affcb49419eb923ec2972b1ff1150d95608209ed64ee8b9b589c7bc4b80242d7469a8b9d56d1d3695a0c5509f1e58fd6cc6410095e78e1eb770a4da8971ba99a0c65f66644bf1a96b8c76119aa66d54502d41b6f8d9deb14049861107d168db0c66207e1693ac16b337ffb72ab3ab6db616f641dcc190ae2b072b1a2c621e8a785d2b6cd84ad45c17c06fde68d7a8767768b07a4bf031a6066e45654ba055f84060cc383cc13568c458db9ab8e919b9b0b6e3b392f8071b2712a536b9d2f7af7ca53602c6e5d72bdab17af308901f1444612b8c54e63d4b447911f263c0785574170554ce6edb6f057e16071ef9d385fcf0f1e2122f133a0da7c97a1860cabdd7b908170f3b9c21b370a5228013e3114720258699a1f8672a4a946930c28d3cdef35b8179892203fbba4688daa064dda070e05243e124528e809cbcca20e5c81af997e0bf886b07341a55fb274f4d8eacf83fad8375363f0312c3e5c0901b8c70b3d540afe638547ed267a97273ed6022fa72c35b2c5933a6700f933660d11569c6c4aaa095b6fb9539beadd5a5da626e0fceeba4a21877b6639d013131c33ae079e71f5045eda8368feb7a89d3aa0dbb3523abc633f60e2fbdfe72bd32947a5c076ed7b3f8a64c1a3ad7e60c9da61512bf9e934a99333831f29c1de591a81d5f37bdf4d11ed1da69b9f2d22221d486e0196f967c14742b5ea96a9717d0973afe8729fbadad4ad3738cb89b482347c69292b82b1dbcd8494ef0db114e3016e1dbbc2ba0159d67d0f2f51aaab32bb5c641041f13e8301ea8899181582bb16f96ee5de7bfd56b2defca0b0d42c69c8748fbd91b23cda2c6bb741656a5ffc07543a153af9fa28a5ec1e515387b2bdb73e3ca0c5ee242139720ad8f31cbd3b30176e55910e3f7cb7e954a9ac92c41abecb5ca5365d4d51eb52217f3f4898181fcf8c5b5c7bfc83e70ed8ac5c1667164aa99fc260e99679facbd2da911c80770fff09d4e9f8e8991dfab4c4e90509bb68978d951e250e326114a1d592a2955d12a59d4ea5ce582b2b6bae257b61638462706c39b928429f0394c87f5a4a41190cd67b754dee7f42b072e57eac31078d836f3fe76b5fe609a3def9c599bdf5141e736a6f62152bfa1e64417af15a34de116d0c28786e48c50d8e31b294729dad0d3bf1eaf204e14706a86884fadf355b0bfb3fda6bab2952eee7a9cd70bd6b5d225aafd226997edf5e94cfd3c37855ff9e52fc12a45ee0f6c30119c1e42c15f51a4cbb8f08456afc625beb5d4430daf103921e2cc9499d73caae57b6cd7e0d9b1c19e7eefe46c9af7939007b7ef6c308e3830c875f724c4c3ce4023127438d891cd8585142ca1d42a81901922b2e7c200c7f7d46f3ff7023c1b9193b1bb16eac012b597de0fd8644049e5705eb947307981649feb84749829a68aed70abb43010b5e1952f491045948b59ed4a22437c54033351fa5bc15eb2aa5cf98164e6137064934df8b9e237d0144abd31a67fb1b445d193d8c07725ca39b989990568a480ec79cc9758c798cacc920134d81cff88ea1f75f035b7f14b04bd361c89e14a30fc40f437d5d3a12dc2ce9505a723afd235e4d63fe80c35da49bf904f44ebc290fd0f0626d29af5e3ac477702bd8ec23cae79a26c14c06c324ab06c7ba67354403ec71b91a32eb4eb389330b7aa593b0f8e1a2619aff0a3e6177cb74d453da4e2a033c2b6768230775d032d8db72efaa2b9e660c0fd61138838994646731d36024ae35898612ee893dfbb14a308e9ad35f86166ef7b0663f7a57c7554c1cc0e8027b749e4cce10d29c219b53183a8fdeccefffc35985a5fb13d5ca814fa0e73b00b3675a3f54fcde9546b4707832eb9f616ea9182de20368b1646663a9ca8aad1de2bc676f1a76268a7bffa21fad5d9abdc60c3cae3a3bf207a199e99ca8d1d81865216bc8b9f6d4ee3b69c49b7cb489b94acd83bfa3847c41375e2510a41f39128f69d1e16e55fd69a97b135021934034bd9ffe77b85001db493c1297e71622217419893323170531724edca85d37629a2ec024e8c1bfe006649a82f6fec39b0c8dafec79d8e842c91172708fea1cd4c3525acf9447a4708839d03363a85b2b27196278cd452f196a05ee211fb2da2231645d76a8456e36392754b086a0d03b0920b98f2124028243206fe732eb4f50c5fbc8a596aff7f11459a319bdce6dba0c9ef9d1f971d0347b9f52016359b506d266886ab65b1b58a21fa2eacd577564096c5b00ed8825f5cdfb41acf34face4148bf0e92079181e164671bd68a8ac92300582ea644f21ece4d6dfbb5ad8b9099e487fe5bd139830441873f72b0ab046222fb9981f242919c9eb1eaf381a51ef50e6693beb103bc46638fc07e371cdc908391e939b2cfa00d0ce050512a9c8dfc32a855ad6052b91bf4ccfa6569ac09125633008653eb94746bd11f826910eca327e8a45c9ba5cab99fbce7cf6dcefbf4012ee57b1dcdc43708c278c4e15f4eb1d242d88b87569f7e30d59972897fbfab912877c289f9349fb9e0b3d43d9e9a03d6717bdbc594206334d0cb9a70d1b9b00005aef0c7289813cc2cdd74850d4f81f3de17c8a360ab27d494e615b1e8bdcc22cd2aae10acffb8aec8ba875559bfced0721944153ac2a3969be2851942842b00cbad0689567466196f74394daa00f65976bf786d858cc58c53f99275994b3a31f6d07557a423f4af4c377e1ab60b7b60a552daaa55ab3d0f29b8933d569f9be0c4d01494d011a63f7edbd1d4dac992a0c5782564fcdaa6188775bae13bca76d0cd20c0780fd840f4e755cfcbbc495a4f77a0d3cbae6a7155136e41e24f7a262277f8741a1a5113ff8c7445a5c80e2fce6a1c82738fa7d1c02a46abc0c38ec740b04cc4ee7ec16c159c219ce439886ded8c8035a6081f0ab4387a2a09a4ef6b30ecef3975baf226d16e07df0f2e24807a9ee5859c0990bc822ede17953878cdb1689d353ccc87e89a701946aae65bb5c159eccd610e1b465d6eefe9ca1494dfc0a090d25e342ecab13d605aa8cc80d9b3d44c42404c9cb817381ab1557b646e4284f7a87075bb98cceb3182708e155249e7a3b31df4d30238885c5b51005120a290703f4c0307de2cbb25768b217470ff9a13032968b067e6cb1954d6e9024d20d3c47ee3f06c9339910d1393866f4a2992cff1899ca775fc8e34a63e19756c52299a5e52aad09ea53d786f5ee1f8786f9dfb5ae21c3b2ce21bdf9d3a9829c7316465654cd12fc69ecfc1b62d36b53e37e3b021ccdaf44a96fa42c5d1e6be21726d88ac625d9d2cb876168221af6c388dece25487b2d034fb1eed81085fec5400f1f3427922d87f66d03efdee5b70ca007fbd0c35804babc60e06f8b4ed5e2c8083d3b171392d744e06dea5baaba6a846338fd3da4251883a8afa8a1266a60ce2d2e251d73e20bd737941109ce00f052f52e20812692ac0b786794cf64be53a8182bef14871724a2af5dbc8f9d10e882ef47b2e5e904f7414209b5f973cc213929f4770f0c3c86d8670472ebd9b21506f75d0b42bb32cbfa2604300fd559931e219aad0a91bdb4e4c00312ae7604c21c3af6d3190c2c83652c0605493d15a6352444be7e404ff149089d80b982443b5805abdeebfac8e17db75c43c16c5cb11915e5b607d8e81b067b06ded68c6c3b53ce2d387b22fddf64a4bee968d668bf4f0a93aa00c33301ca0be5d91772191534df4fd87b736ca57321aa28de39760dc02c9bbf40a39de427eaccc37996a9abe973d3948570af147f6450b2a3b9110bce068028619761e5518879bca8977b44ad92434924aa695af01ee1e62c99d966d10af44e163364efb2477f7087482721f1dd08ad748aa878051d0a52da3cdd19d2026904979f54596b43f7df677762d94929692f2dc2e05205a3d523385ca559310e8fd2cb512ce33fa058bdca1c02aef190b29da39c3d0c514840722a468be1880a98ed48e6918e9a7cac32c66703a5320838f6dd18e97cb6a2004504a85cb3ed153a25cdba5f807e0bc002eb06f59fb2fc98c52d8cd977aeea232ec1a9b565581e0c1cfad9059e9640506ecf2fc89d45d53643c5c095eb109968b0985a5c2d422a54e8490917f881dcfa7af0b2d0cb3d729fd9c7092471f95538a7995b716eea295af6f697c6af5d15f8270e9b51dc87b081cd897f11b2fcad99408a7d0fa35a130038159762e9ac1e558a1ec3373a2f50014a3724c07823d5e72aa127404af22825ed55a1bcf099e8fce8d68792b7ea2121c44e7d68a438fa875e0e6778a78804649fa48179681e3167c0f584ed927c56b6f1729c75ddbe48950bd67fb3bd712d11f62d82014420501a77fde112dd3d77d3a4ef678443a7c00e80034c01893212952a9f18c912e4ef0b18dab37d83eb736db2aefd4be1525d23cd0350d67964211d046c29f4394a511c5471bbf7b324dc83c1907834b74741e3b6e9a1e9cb921e7d3e819a36d582195cb6633c0f14e27d3dbbece1a9312ec2ddec4d9b65e02c2ae7e67b91b3d884437dcb734de8f216d87a665e5f7f7136e69194efea6bb57f240509f5ee65b9a81670480d5c38582bf82f372e24c56a8f4a5e0456e662a53503c64bfb01f8c997e85c76d18a03659c9373db2d37e03af22a938530e4a4128224802c19c002177da041694a03091960af5c2eddb4e250c43ffa8cf55b2a9a8419f704d6f0a0d93084bee1695559887c500b31390306a699624a18f6d47a895c00a8d67cf5e3d631e9e288b8c2662a10099b89ff57bff41cd50b140e291aa2bb30051303b94fa16531c118d76306963f1fdae2c74bc2a64a0d762accd9b23f471e1f4392e9fc70f4eb90f8fbf487df17ccb31319c326592236727432f5197922105961d22c3f7fadf38b8fbf09eb653532232254f4e82cf89f4a657c0c317f612d275d1e062354e21b11bb48d80c72556f61faf7ed316c9469e06231d75f28b52925f50751ae3ec2f976ec58eb5a0c3d24bbd9a947b237d977981b77b82a1d2011770187f7d79f7913f2d9b9d273f3e3468905a8ca40a1d6308705a07a7265b61277841d3d2e6dab30602587dcfe176c6dca27b80706b1ed92cb00ada42d91691818f794f8310ec5f4ce3b4649f55b7e0003a295babf740688636d94bdbb79911eec5fa4e1bbfeab9c91822c93298806dad20584d38e19db59774b1f2a0cb2431e307307e2a14c140ddf12d708319af4ac8d9a6ea7064dd14b68a66d023a396e0285928437062ce56ef39c616d675abd1904fb1904ea76f49fadcf45b2721e4b30556284bf7457049bdef061fbaf915844ccad2576504ac998ae2a2e7652b7492d70bf24cb8894b68904361c308e695d7290290c01d3ef0ff6cd3f7b4020793d003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000000d118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000000d0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000000d0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000000d0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000000d29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000000d141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000000d25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000000d12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000000d2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000000d189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000000d1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000000d05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000000d05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000000d14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000000d03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000000d2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000000d1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000000d1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000000d14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000000d2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000000d305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000000d280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000000d223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000000d17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000000d08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000000d2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000000d0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000000d0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000000d172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000000d0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000000d05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000000d137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000000d2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000000d2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000000d2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000000d18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000000d0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000000d204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000000d0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000000d1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000000d28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000000d1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000000d21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000000d0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000000d0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000000d107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000000d2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000000d09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000000d24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000000d03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000000d1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000000d205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000000d25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000000d283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000000d21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000000d094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000000d0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000000d1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000000d2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000000d1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000000d1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000000d304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000000d00000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1336c978e59fdfccfbddcbf38d835b645cc9fac840bd520d1d7ac3c58680aed7dc4cedd3a4adf5094d79a197774e49167db4fbe31e208220f60a1e5b6501fcbe847bcb02c5eece4f45d8bd837f7b9bb778cf5da9e1031ce5387786b9a7853f174bdd48c9584a4df07abe52ff8254dc3353db714eacaa3b0477d6e88ea50d54df74cff0257f7f5d8759da81b2c45a198e85154802bf6df37fc4f87c539edc30434e3e2d53ce7074f933d843bc8550f9f3916a892b41895a3ef6d5795c5630e5f7dc3e68e997a291a7ad520c486ca0f7a6fbf7b0e2d013ff1cff996fb3458b7dd2884bb8af39cf9fe9f6bbc58ea1c15cc9a5f7c5d35f88af6b85936b689f3e518c615bdea85252e708962569c79aaacffee30adca3ce5c23a7df79a96c9d0b5b4b3a7aa5da7a6feed22f3ddaf0ee0e93d247e348cb2fa10f7e47f6d8f56eab1806328f0cfaff2c7f62772552ae83817227e75c333775968945d9a95c8f2784d3b34ad062420f581b438335e2778facb1a1e33a62ba2efef38ded3cd7a02e97caa7d6d644d69bddc0f3ff1bd445ea941db98eeecaa6565535c953dcc034df4919a46df88d496f06dc6e447bc7737a131a5ec5225e3eee7b6460a296212937d752c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e666912bae461c68a708b3b0d6f44c28f856da9ae92114ca5508757cf76d2df176e39a77c986c670477e7be79142d97640eb434bd89de45fbff5926b74dcd21625886c3cad19dec942803392dca1eed643a14c61327f8fb79fa6bd6689b75159e726eae663437c68184d84477de771f7553622fb58016ebc32907a7169e1b36be1b4c798ecf7c559a1662c71095d7ef177b3213e6b351424e32155507fd2d8414edc0ae4f51431ad20115f6044fc2dc1efff731ee57af2db16f377c230ea71dcc578e4b474f2f78060a27a9f2865a8879acb2f055d020ee915fb22128b03566de36a517257c9a39b4f8d7801faf0308060d3c4354c5ebedde474710b9247962a476eaa8708ee2d5fb2e51fcaaf9100ced7c9f8c02ec20464bd6a4cf17d519b3a5b28a291a20cddfa43f786d11b770597195b173bdae85fad70c8f9f122f2c22d3ac7a1b59ce8f87d808495c24b59e1091c3e7dc62649594d8f41f538a3c035f026b783aea27dcafa50ba10b20f36142f3d75ab4ac5f5508a79e0cbe9cc88ae10581efc875c6929fd86bcc759891a706725c7dd578a7900cc685b231658aca72e034435b844bc6605cb9b65f0678a5f65c672500222ae45bbf2ee655504a066c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b058db612218492cdb590a66dc4828cca37b1837f6ba01b19d93ae3438edd824be4c9bf25e020ada719f15b9c32dc2fca4e541b1f28aef0beee83a65a902d6598f38633d2021480ea870da00bfdac9ebc6d06364cfadbbb87abd4da5559c69995a1072486f9304962a1d654cca1ad02e93796bd4f28254dad9867a99b8bee73a1499bec05a4d61ca92c6995d8b9c7caffe37544fb1a64f25346fb5682056f8f2d7867bfc2020fc3fe286879070f4e57fe37ee477179f3b20566a5f47e0c9c727aef318b614397d0dc7d3fb090791303727f39de13cce9654ff451c5b2e2b1055001b58ecc9178ec26b72776cb317457329fa98ef9351877b30f620ee7a2fc22769cba73b6a97293de4855bbad2e9d8134ee9f69abc142a8e3aea8f7afe0657a7b58d3ef6c91e7b51e12e10ee463db7141a544adfeec430a306b11e96ff297ca0ab453d3ec41e8d37d632617f0b75289268913dd3fc3ba170ceacc3c2acd658dc9aa0dc471bcf809a24bd1548f3535b6e4e0a4342dadda827dddd48ef212981dd03922c894be3b82c18424678b4ae348582c16f9afdcf7f20c3391e7759c95acfc2346cd4365cf541cccab92999a1f23623b8065e35a7d126d69d6d1c05d68466000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027f54e6a2ab6a51baaaaa06656f232e367946f662a096cb80834cbfae5e26fe96af0521269a1fb29824cba28a6ed8faead6ea0184b77d6223a4cd0d603878514cc3566ac03e76b3a6404404d78a093376b273c270da2bfbff934f9b58c4a2e02bb16e310a78751557c546c344bf9e69fbf87f28cc1076adff329b7ac303020397eccdcd530552c59dfe794307164d36df39bd47868e0d930ebd5610cdb1a804432fa80636c5556832b51900d29a8a07cffd53f6a33bcce274082b40f85825dc63d6578bc817d51f1d00afddda34a492b2e4bfaca154e1b8ff97cf1313ac417629a05b14bff3a2a5fca1464e377042a63e3edb7b3b08120bdbd3146e18fef090bd71add9e1119c35c7421bc21fbfdf297e53d0b0e97396c9c9c3b3dea8cd30e596e8fb0a2650df3f038d394859331f0cc272819e76229f8b4ccb5bf9a9329b1db0530a1c8ed51b85c759e9a3201dfe8216dcee6a17d5626af7f99a4da328e7c9622574ace33633b0ece7302be9a30e3e1a9633854604405024dc41baf9881e4dbf5cdea8b677abac6884bae97069d26dd1577d62df73018b2bb152e5e4f8a8eada03135116d50c163c105e4a7384ce7452f32577224e67dfa5ca7b4677cdb6fce000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1550540edd45b6150540464bc4752aebbcc757b8d10db54f68a18e8e0d50d427f00059e55312d8d4e8216cf006d9652566a56a2b3aad9b12c0ba0ea2a8c19cb94c26f69bc42d4edd8e78e275d1fc5be708c311541311868715b628270a906faf916dd5e5cfded80988769b53557eec3c60e586adaeb719ccb4ddfcf2c97b3679f862ec960575f5e9e6906e4ceddecdb9a697ffc3b956637954833c7c0f95eb87645820d6d944b88ef8c99ca58f0f88ed77bc2fc8c58b503767854b5d6850d68bb4be47adf9d24f196bf8da5a4a05c491fcb0fe9fb2776f23881a647c09b1c61440ee0e247d3e3f5162a1e89d8c3caf3b308324b3572f4a51ec7e4ebaec4e3e7a32bcf5d46c5f051fef07f2f2214f7e5f7a220e59be70da6083e8356c8bc4ef3a61e838df7002c65ec0ff5f8a4daab713e3fe365969cdf0c86523a815725079396bb82211ff5976ff34ee675bf447a59481fc7b62a351b6e880342178b7604ff19608bd181e2bbd513b7495a8866d1fc21576a45898fa531df33478b094398b4731c671d391ffc8b9a7ca4c3459da08346d18ebc754ba17a6775b5eac76c32fa4a80037de42399b4433abb8a0ff08fcd08a2071d388f808406330da06120f5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098f6f10777f757c1f26df67b2e3ef5c8056dc3df56982bdc176d324cb54a8fd626fa8078e8022321159ad8e90747b13f5ffe0bf815a0e200d7aa0bd475f6dce66e019dd298f5263d5943b23b2b0390a116bb1719a841a70979028e28679994f445eec9bc1463146160c1e994d518b6d2701106c97891ae04c823e2faa8f29fdf8ad31237bd1ea30ca3eaaaa66eabc63782fc27a12a3f33e25c8f636ba7c2fe33d59bb5d3edb8d5f1bf3b97564c995baab8807664a7f2f07bc3a3547cf6ca8e4a4c4999837778b3992dec343f5d3a2ff2383daa51c689f9022e55b30ab527a3cecbe938aa3db4589be20a34c1b29b4b80cb7e5bb4e4d052496e5e9386607852a1cb5c1f2aabc98c6a2bb8438e673620a2576d42590e37854c7cf29897c64846e57d569c08cf9d2d89309a53dac0bdea18945db8157aa99d646494b94899952605ce32d2594e4dfd169d5fe817165e69f59ab23fbacb2395aa5f5a82489e3d98fc2ba3841fa96341628c9012127e93f581d485f5fae75d37293c44a3cad6071376746daba0128aa4c9a4ded75521c6b45695f6969edb01760a3b0b1d796bd7bcdf147f1de8ff15a2a6233d0feb183666f734273c9264d09b928ff739261fbdac52000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019902931245b2ca0fd1fbd819e53de53dc8c7b3bcaeabf24f4b6d53ece45d57f26e3c1b77dee356c3160e1e2a82105e17ce9f406448cab960c5decd3a4a13696cf9dec5fc54bef6ea9b1fabd7aa95ad57b948cd181c953fca61f34c71e30b5f3d114c06688e68dd8a3efdcdbc219c2e97d3c4b440c7dee4e235cd7ac495c0ea558d8b37acec44e93b6162924ed4a75f4eb51f5be56a1f3934943d093eca811e5c63a380b6fe0174c96142de22a1bcbab58bdcfcef78036681e726a85b2d49e8667127344be1e73a777a99b559efcd4bc9394299305675172a8f43574f3a35f50cf1444576b43a94bbefa0f82e3271364680b4092d108a47408b986f0b0d106e1cf274476cbe130e91f301a4a438822cfcfefdab6fffc6c328572dce1be8250dfbe9d4b60518acccec89c0314285b2e15b8ffc038af7de4b89cefc5c3e5ba75ea55899a985cde47edeca7696090cd17322d674936009ca5518fa89ebbc3d884e2e7288b2d58c59d0af711ca9313a2e008a4235709ba5e56b81aa6155ce444a9e0289caab1adf903cce7b5ef3ce172bf990f21fd6d63d237f7dea6c2bd65b79348d28add5f484e968019706a114af20d2e58062ecc37ca682e64d04a21dc3d5fbb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a174d67342bd49c8d61d1ceb02cbd64e2afe03753dbec8769a3b86f75899ab8611c56aab44af9325cefa1dab5dbd335dcf116610965aae44dd308a03350f629351757eb1e8269287a7252ca44532b9045a3a6145d999d238be88c29061ac7ebff792dc71b4c18868aef897afea8f2d7f4c54ece00b606d829288fbf75eb00643fd7d780bdd57ac0ebf58c3f5c760f93c786d820c8b0d2e14799a19d6e01ed575faaf9a072058105747e3002a8f1fd45d3e35eb35f3baa9dadfdb3f58a37d5077c87d6ccc3f17e65ab6670c05cabcca3e4ea9e66a7e69ebfec63bc1feb00184097c173948cc44dd6c1a0d710ad487ceae4cd30af8dc878b7cccfe365a1ca9e330c7161f068a8a93ec85f836ea3325823a87e5de175257a804d02db828f99587b7dbddf68948f1d0a13d24cc811d97d48e296bf26a2a772e6f6b2bed568ed0cd728b808472e95b39f156969d0c5da14e447da510030df42f6c08ca9c87949ce34658d8db2c84a673ef0f98d3fa67ebd6d3ba973be9452d1bfbfbb5d1fe328834efbf4dbe4a9020ede5afc57a0d422c126e12cbb42f2feeda46a22a495ec6e72f5bc14306d3fa2bfbc9b4f98e3c9f95e2db284b6b3c7a4914c88ad88a9d21133b0d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b028b2d5e8d556603d2eb9bd73450640e43a261b77d6347e9873a9881ac3284773fd9f5e3824c9202988901c001a21209250054292d9bd40d9c4e3946319a0da472ad6a48701bb79154c40b7e99a7411197d406b431fc55c57f653e016778b53183b7d43adda1bbb206cc4f9db627013bbba0f8586b967ed3deac1d0c61352cdfc3352c3b0ad362c80327eb07aa188901f5053f0b2e6264783c6369d7a1ef86339a3eb293cadbd96bdccf72b6f8dc32f6c50153c1245a87c71e04ea035674c31dd82fa6568abc0c6e928971ee271349da99865f1e83a27694dbf334e9003ab564b3bc81cee6f5862722d731c1a33f6be98d9faa09f9d9fd9cbb7cc18555d57b71dac889a09e9dbe36b8cc6c1e29357041399967a7b29860943546bc15ef828fbabc5b4959d6165a308696c2a731a6c035743a3f4ee3a2fce3e819fd2abcb396996943e7c0dd1e78896634e51276eba872b6d16d4f74351ded71b7a6d6d47eb2382e2f14f439d0ce0b84c17503c50f394c6c06760bda84a742dcf756862730a6d7e9f4aa9b9fd2f3421b3a61e65743c44a5e840ec9b9f13d229eee1c8ba2c903226e007aad9a65baa33bef2bb2a0ea1f468da30ccdededb62e913867ddc2263af00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008aa71968295c4540e5a4fdc05684481b813524bdc31e45a5b019205a7be83fe9d84a5f883aa4eab8c8632df616576f968a19c79886ad7c024fe9f06bd3947c64575270d66b24b4c81b14dd8d69273ec1db345e0edb831857a7dfd70bf5e61033358550c65f55af8e4a658be9ff13ca476ef270ca8d00aa4e29ce4c8252291f8fb310a0c6ce7a4234aa556499ae62ff397052c03e72520dfb50404ca12e7301b9f763a9c607fa61d01af8c4c4409c646469a929ad44c59fecbbb1e573b7a444372362927c06cefe7cabbf142d54548f910aecc0f5414ea32469d070600902b6253a729beeb68055f4655efcd667919bd5ecff156afc287cc31bc65c91438fa4f6cce632a0d3baa6eec2f8af7210074c8cb15a466a0e0d1788308d7ec83bc88f63838f643d81b59021ac7d0de9f95438bd3f007a59110277edfafd3234a201e936ac18618f608e4d1532513ec13352a37070c0cbf149c6954eb1ed4dbe64e4d741f90a140cc26f7765fc2bcd630b95703bf90b6ce5cdf150757dca2e9d9b387be68455fb90753f68f1d437fa0aef2c7c5e664cb5943e9dfef2308b3989fa5e43b301fdb49d73c3d874ccffaa4353656f7233aefcbdd54884937ff8dc3a9f57d1a400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a84b9219afe3ea217bb8a373026951bd4b91bd4db0f2090a7cb860bef31d8f7f7942aa734157610cbf2c7baa32f82c1b5879daa7df5347d01e105c9596e7afa8e8fe03b2b19fcaabef38c4ae5c4f0aca7d47c641b18c31b9f8026fe08865aff885d41e11eb40ecb0f39b7a942332f0725ad993c8294580641216d95d4bd6a1a042b0f0b7e0b4dfa95730dec381c1428769c909ffd017ea604a206f64931828b4fe3dc049fdc942f9139e72dc509ec0400dfd74f004f3c41650b494fa7f3cbcf22c7d44957f1dcbe55d585bec2bedf428dc872877bf512aaec88d4dbb941698daa29022e996b6ed10d9c47c707c932ef720e6b39df4518fe06bfd0a30ce1677620a7e5d23e4a3c0728754163b443242285508e303e51215367338862763e73279739bdfa6b5c300908b377bd64bf4dcd815f0d56136437484d03bd6f485bc00ad52c6646252ef47bf9736af9ed8ccddfccdbf658ac6ee2542c2cb255cfd500fbda72fae86fa93232bfebc566b68781601d51624e69abc8862c63977dda70b372b15ab657379220c1ef8145072d63ea662a585926fa430c87f7313a9ea3fda2beb3ab0d2afbb6bcfb942c6e7488404110ee38be3416d2951aad2cec9b27d6b07a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ef9e619e8016efc2bba39fc8628b617908c8a28192aa736acd85a93b2223926408994334d5b4fc5df110d8d23c6fc2615265a733dd813602f623b166c63f9bc66cdd1096af4e1c2c7ea58d55aa708aca5505f0e8452d7b65792eee448fa6bbd1232c5d10a21f750242e7c8ae2a09063604bf16ba699537f9f44b43622f9967117a83ee08817abef7b75dee1e78709f9879b0123ba3d0dcf2594ca10c2766a7cd01465c81bc2155874dcb16fc450204bb41b604d5050bd7197a00d6e7290ea165ae4d2130a28e4e09509656ad5d23b68627cb3ecdbe927216e6c8c47c13161c69b4e55e1ac67c41f681d06e027c5453b75aec8c901277f68eb352dd60280c83015cc714503ab957499055932ff46ab8ccb1de6d95bc9b64d49e1a24433da013647d6286c7048e7b33b1df92568f9397bc5c0d99ad46cb04df45954849420cf3c73a003cf067247ba569a6ffe5ffda5f4b40352c55badef4451daba903529e2258a98ca818d3ca4974a67bb315e19493dea78cf353109db6c45bcffd86c3c00c8e1f9fb96d83ef09bfde47d526ae9c8ca715163dbadf43163fc67727f7dbead2a8741adb19fcc6100f706ad62f02704176cddd38406b229bfd0b37d2708408b6300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009072b23560e7dbf76d617e9e9a9fede21a52bf37b02d220a699569dff34367cde1d90a663b94f595429ee0f99887b7f9db1665adcc26bf3d99724055c730bdc389cff94e453e163bbe2f96c49ec12f00c28eaffca09cb20ef3dd70d2bb087573f1d9624064ebc2981d9868fbeff48b0c631f0581f068099e738e03fd001c07aed04e710153d68d337423186257f20e12abfe702e3d65df50444cc7b01ff0a3abc370f4081b8dd1bd2f575ab285a029f16363b6e255a82c69c511bcd881a2729cbbdb8912fecddd1926b3e694df8f2e811c693393461375ae2f663bd6b4505b480be4eb408bffb69414c17184e3a42ee934b24405230b499cba420143dc5be4c622c13a635d2b4d1c0bb48b75f4018db9f0fd5ec9cb1fe8cd308edb8e86eea632fd1ff54ed92fdb2c67527698404150cc0129db6e2b8557fad10fdce046e814e5c4f60f21ae7f564afbe0396d28af234774942b57febf72286a498a4493e499d9a31684734e1df96f5b089c4f211512ade1d237b977de4e8a7649207105a3ba06a7decb793707992ca0ede80854662f75917eeac439720209dcd059cf374b954dd0380830644c3ede6ac22caad1f6dfda5ccfeff722a76e49e20e8a89395ee969000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011ada3a86c622e6b89bc77f6e69a848460d83d0967bae8742e541a9945ea757dbd60adbc4c478312528b7a879a14d7cdaf786f652b881cda356a7a7a312db54d8d9be1a39a30e3fd23ec3dfd46349c3f2a1200bdeb20bd4df38132af31c06eca00cd00eb7b3ef664ff4e0cf4c1bbeb93568097410b489cd5955113e1b4dda911b32880c247db93fe93c1cdf172c8c4907bd9ecef01901afb7ab034bf0804748bee01352f847d1c25a2d408286c21125b20f7477d44b568698cba30a6335ab73db1714837d36d0851f2e098bbf32ad9d82129b199a37f296e017d1440582cb915b3d53107e4851fdbdb271ef62641615b99bd8614cb2b0cf610b00d268216a87c64a509192f7e99ceb34c10ee949b2ad3b066448a3abf4e74abd772eb5b5436f969260522a6f20f34acf4427a01417ce8d6e13dd5ec986ffafbf42f5d07e0792570430c04a62dc73b0a66f0be9b986a7887605414026909064d9002c4e38829f9fa8b28d5f559c9198c6280f7363f1a389ac04835d0bb0364aad70db4d76f8b84c8cc3f9c0ddd4399442f5d73cb6fd36722b339fc5317589cdce964b78a9d1ceffd4d2748c2ec6048ca35ae6487e4e8e865d600e0300e6834769f9377f62c35160000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa66a5ee99b6af201c95b464b7986cf6fd9f8c92c020dd989f9b81e24b503de01d8383b822c9730f21f2c9634bc0577308a05ccff6dc9b8497b36688562c3fe2529e6a44e9f08112e1ac8763b0452c141a7643ce8c3bcc691ce31a3ed8ca9c312d93175c41e6192046471d5142cffdc0f49eaf72566090d4bf9dd45e03b7ec561afaf30d6851c545939663c23ab9740d411af76459cdd7da33874130c8dd56a616aa1e51ff548c12cb073c4d7819cc61e1018c5707192b4a6d72723305764ca44d8ed6619c36f41bac8dd5983043a38c69d4669208660cfb2d8c6ea37faed98ec15253d9214055e40046836eba6d950f35388096feb47e746a5a10b4af679c00f9af4c5f48f6a58493959722ebb0058a20e51dad9265f7b6dd79f83dcaa84d070f11009defd004aee60e536c8d7abd0b141c481b7f3f59d09fad6d5f4575df92c3353fc64544ef2623a7fee7b2c5add7fe19e0bb523fff174af7ccf2f98b9f2dad9eb68f0b6ae9cfeb5d6252525450c78a09dd3dab84d2bbaa694ebef932254080c4129b4365742894a2318a888a3c3cad24444fd58dc55258721e3b13c44a40df4ec2c288c30db3b029c4baa143e8cfbd908ef004d0ca5318e10726829a670d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000edc3b166578796074c3bd53ed59bc5554e3de312ec8a077b482a4e697774eb4ec12225c765b622410d00dcf2ae1a99c59a23e5ff177aa99d32c348808a26f2c010ad938cb1254fe688633ec7f2f5c68af4e8a7eba07e94d0bc9d2e27fc2ae8b9be897bcc2f8ddfc5439da50ef399ad7e66225547d04e08d77075f05827a92de773681d6d2bcdee9190110e4ca3bdaa9df54d6418b1db391c30e02b58ebaafc77bc384113a516facfcc2513e8d743a286638e96d12b5e15a17165803eb5c872e21d0bd99fb7bd4b4d10b2293ac80d0ff6eba69536e0b0d2476447717f20587e0b6a6118d9f13985b6c7c46bb0cc7b6159ff0129ca54caa11502dba35b06fcad3373588ca902b6c59b482bdaa590b52276dfaeab43127d43821cc676e502ba5ce7e0da644e0177232d433366fdd8627f775d87d42dbca76a011209795250086fa01370257cb5703a8ab4da71cea60a602584903697b8a68bc5223ba129dd09960e9d34b52d252e6c4ba07160b06fbdb829c7dbe178e663a89c10b7dea53bf3bbd59b37a46fb6540eee12514331425237dafeea186ed7bc7b3993eab6212316af1e0c6b8cbb8255e8f6cb89aa4d68c69d5f324f67adcb767d45f849a0540e70c030000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000804664504099f6e67a51f510719fb7aed41ec59a70e104cae2b9ce32c659b454305c6d8375da1dd309055ac2360a57feae0d3b799c4c649621c446f1840cf1541b3b18edc2fdbbffe88ec59bc279a5befeda00016721e438139fdb4e3ddafe3f009430262bd778ba5f68a35099a81c4b2858083c18ff92db999790bd1379aa4de4ba1ea8b240666926d8642857ebec083e8f9f3703e44328d935aa2749ecb7396f7bb6deaef0ec20b8d387c0c45c712e7cecc7dc6e084a03bdf775e3c445e98b04c4c4d96d24887eb3a41df0bbe2eb17c349e52b5f98d776a5bd4ec3ad220faad7af91230f41cc907184a71ef176dd580b53ebc6b034a922a4f7003c3d8cb28de71ad09f28457504548cc30f2b345c7e64eaf016832531253b29622e8d7c5bcc4febb5eb8c5ebb3d9a8e09a35d85a5a23882d1b35eb193920a531e08706195594b2660215280493c8303c4ba965c7790270973cfe815960d90d9e858f622dbe59f55486a6a3aa58a237498d3581b8c0475f3d4826e07223660de8ae9dc7ac517e1db6926865ad7d74a09a4e2f3fa1c7e81b630473a71a1bf01781a2078a8d6e16253d77a0eea4e90d689866d37d7863b0c4cab49b576d19e5362bd2d9cfe45f90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3dede7db8960f282770538ed83e033a15f657ed87530059702890608969e1549a7c2b694f15619dd5cacdaf38ee0c810bf1935d70ae5e612b61b10ee839bca8ab66d8d34eb1ede2990a9f0ed996d929007953d04752e28f0c82f46da8248c1f87575b552ae03119146f3189379c23c3d2185883b3c64ca202d768488ba8e6faabe6b0028ff08ffa57a6044708cb723938510717ed335d5fa0640baac3328ecd750fd0812c17dc6b7c7377b96e8927cea97d68c32b9d707feab255149a427c271ccafd9ce2c4b5f69744d2ff419dee0fd454ccef256b1b83340b34b5d9a4849e5613c72f2e84e8ff099d2056e0a95e9a3e751466b853c967aada0bb4e15b0dd89f6109b14d8e6df508bf4d5bba097a87f2d802e88c67518f4057dab9db51bfbf1fb01756f173bc78057240e05e8bf98884f3f4e58c3f439537c0c5c52c29d599b426547586cd9d494f8f9b494b70087ab7ad23cd1ff0bd06eaccc62621cab9b38ead810a09a0f0fbbaf45ff7fef9c645f96e5c02ef43e5ac89b595b7635c1f127dd6abe49fab5943c4966097a6064d8376c26a9b383ac38c41229a6bf4aeb93ddfc7eff55538eacc2d4e6c59a88dd3ecedb9780d8333fd8e5cb2a78d3c6916540000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0337b42fd557383ecdca7ca87f6a79219e7e52c2575bddac24bd2d428a59ea992fa89a02e8dadbad0917c6f44be6648c6922382573171267174dda1ae2ef97afa3a2c64a48f8a698cfee2a0bcc41ac12169bf47d5f168cd5523e698364ff7221134f2491324a4fd4222989ba571d7c6b0d8817b8beca23e2e27d15c79641a1c90aeba4881897cfcdad34750bca2d25acbe298166b2df819ffae9ca9e3b9be060bda0bcbb08e6354923a9c49af7e9f68de5e8a7f3d0c6b466255c58b494e17fcb0d786237b0d1101c9d5a5dea82c20eb186db59ca98240ddca0dda042477fd032c45aa0deaa8896efc35d849b463141b5fb85b07328b486df33f1bf3000a53d18bf59781dcc08743556ea65288b3affce5cf61670e03b353bb6b21d6265a8e7cfe93b1ff6f8e73b97bc9c0b0495ea39ba78a71aa67e4c433bde56a8a2bd154c591fcec6933bea8c34b112d6ceb689209ad95912f39893e4261a865b87835726ba67eafbdfcfd32f91042836e7a17ddd8b16024feb6f6b86bc07258604c51c767326c71ae16f9ef8c63c2867df1f876f5a3d88c9b9dcc9387becbada4c472c000039e324a5acb0792c78219fc4ce5ce1e553f943282c3d9c40ba68d632b9cbb1a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000877dc44f3f1c61be5a1fcc1f86fd24e4b833201315d27df8d7bc1077eaf7511d96ce5e0749eaab88163f2204a14ac10ae84e576effcc93716430b0a53f35513e59d60ae75b4d90005c6bc19e625ae919fe79d34cc880105b98c13907c30b452e3017df4fe0e2f4e8b87c3acfb7b730253ddfb5e37f33e95efe85ccb17039d10d7305c2c5c09b3715a79109a595c36520abf773eb7a7f3b9c36c680b2be54c5dcd99e793f681c8d4fa510f354beb51fd04704529720e9610ba9af60c8b9045728faf1668d274a8b4319f0d4ec326f24ccf2a18c29617496c27871c8cc9b9f316a56b5c4d097a530df72e748ea24f1ed036c59e64f083c50962feab65455b5665b3212f7d20b579af231e6b30468ba6cc1491e85500c2ccce1c843dbabdac2b31deeca296a29642e870661c671a5ba15c6e2c829165c7b945d6ab9ea164d7a967188afde4784d7e8e882909cf642e5932d14e68229a1ddd0f8224b097caaa55e6b7c967f5b759b1bb74f69651e909a3eabeea186a198a7dd3ae288051834f1c20ffaeaea82959c738c51b3a99cf5e088926ecac66366a81b44d05438f051a1a521320f7098f4b64f009b0db48312ecfb92b8b78caa4a19400d0e7352a59bcda0210000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000848aebb6590920be125cd4219792ba7ff76b84524a0f5370d0586eb222e1e05f4a2f7a209a6cad2cfcd692c6ccf295c71d23953c4ae2dcd7df32ee61032cd32c7495c85e6941980bd70f01d4b86de17b0a6e47fe4a28bd346f67ab1478366841f9bed0569f91c28d6a548598ceabe4c48d5c5d0d0ab112c779bfbb9f358cedd2bf87938ade975a69d38b69c08338f1f1e6543b894327060ae6e8af6968a265b2b6ffae4a46cde0a79d61a2b9dec962f007806a13297f18a43c554498fac38b41a0fa264f944f1bba032a29aceeee40e22697cfdd83a0daa80887de03eabace3f00b5226132100c423d4b913cd6e9a0ee33545f4fafb51f9540d5206ae6c735ddfe51789c45ca16a17cc88d42ccdf76031831350d657f75119f10c21f5a77e215af5d60c0de1f7c5c606ba1a2471f100291bc6cfbd03946344c77e8103154bbcc45cdd9bab03cba36fc04ee45bcd8da72a2d162a3b702be74d7e24c732d0a2c01c0f204fd6c6745b94476bca94ac4fc6373c9112c75243e8b3b779d69babfc6e05057ea5917e5957ae834cbe73c345df9e5d353f8d79af989fb6b0b56fe8d9006826c5a0d9b1a72a470b963e11d02d14e153aa5da83706bb553487c7203155170000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023fb7575f393e207d49004cc158c2e54326943a467201d4689ea1f3ff48b1573cb04fc5ada8b988e78ce9b7ae1885a7f4369c2fb2f4e24d9ba418dd302ad570f7b52a5580440f01c8b58b3dfdf3ef7777f26c933e05f4873f863f8e44b6bce3d4da0df17d472fc1b53f2634267950859019db1f88f3a7ef0b5f62d197467d1d0bf0f46a4e12aec2f2e0c83b7933666c97c81ea4bdbe28fcf27909cfc44656fc54fc56fc83ba2b17d870f43cc52b854429667ee733b6c73d9214d4260d9df96d6c67a1abc07a74ea1fdbfe5c25537edabcfe46158c18ed36c29c6ed4d6abf936e0562cc12230e0cb298036a811e57c89122143ccca6c213c1386d2c41a88e6afadd1ecf84ac24caa12df43ce47ae4c563b737e7351d65d2a34d8ebcb0110f99f1c4dbfc0d6462dc57ec3cc8a0ba62061b1fc59458065c3a8a0f1e5ffd2e240e9e1c16f1852b179a08f3b3a82e52c54af543913e43fe8591c4f66d741052755a70e115125c0c0dc2fc292e823df74de16fe4577b4f7f7f6139215138e9297a1b8d1d9d1a3a5526fb86a9c6af5668ce6d86cb60e68aec329fe28f4fd7730d4e45598fdd92a98544b1b7bb3876172ce696e23a25fb50e8092257626d74614496dc9a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ea95623b7f54f26197e09ca5923b1e708e1266aca4916873065780cbb2f09d207a9787ef9190706eeab2b17562bbe87cf90cb7d954ce8eee66aa8bd09d256fd3ded42be824e4b6c69c592c543a673655e7379bf059599e43898338d347c65e0f51cb9610de76d6bb3b4fd2a329226bb43211438c3c5cfd47891506f790c3b8bfb5789a54669d891033ea67dbfd89c2f15da6101ea49438503f96244bcab206b788c367b9ab80c5031592a8fc893d7b7baaaa82b1212c0f67e90ecd65667d6241ecf060663ca27234da34bf0c635c159cdec03c9fc86023bbf669483ef73e7d28b926e33fbd0d647962e576265a1709db01739ec295431b342d055e7859fde02ecc7d98b86329de5617c96716cc83615cac9362079ebcc1eb184041cc5affe236a16181833b32c46a50f97800c3274adbf239b5402c3e7c070ca168b846f58dddaecf5cb2f2b46942f7ce3cc8ac01dd17e73d02261bf43b75dd9e955f2487ed8fdbfe8598b73b7119e4d18d7f12b6ca9a717fd3adae3884072d993a0f39dbcdda9d53d3ce077a6917467bd21d702cd29b2ea630639713352efe144515ec0c5fd09db4923a3ca083b83885b9616059c53f5aaa69a3eec3a18b4102f52e876cced0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114738a9635643b7cabc57c2802d0612dfd856aaee3cc7ff415b607776d1b48a40696c23059813e41f0b3359d7610976fc12c47fca5ac4d2cce7b44390a321b02bbf147420bb695e356fa9184fe33b8b1c8a22f5b06e4379de2e205cd01b703fab5916758a4a8473f8389d373077aa987e9603bdd36f19e289536a1a73613b25c090ff6a4d70b7d0fee989927b5546afbd9ac3ab46691d46c68c58419cba373b380e335d284794c119350940eb1d9d763f7a01dc876d9e7c078f9e2799b47f682f499cfb70e3b2367db61de52d965d8e899247f9ae86ef6bb145a2b50bc8de2fadedac1c63a287dc980b67d18e410806e3650027ca014622a8b0929e2f2153bd96260ccd5d4fb73b14bf7e7ad9d060610effe703b2e977091a2c5bcbae4a1dca224fa5f9a662339bb8b1c684364e93833a3d86b0c197f046c4d058832fd79ac79d0f067cb544608bcb57ba6568b79564dace3947fb263a1a544037a9dbf2dba381aa88d02eae28d93a13883177202f7469d010e17427416eab697f821fd8d141a3d4e78bd34562e360b916fa06b4fb4f581baef955b3208375f89b8eb9af1e6ac598a8e179b29fa45eda3eef19f21d2b4f8e6d03236b8f0487be96da870056c1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e2b7f0335de8f0efd466fc86416b4cfc225b5eec46f963e41ab66e03bc962fc34ac022da1172852d83a444677e80b6c889873546d0c5ac67699721e90a41034e2fd74917b427de06bbfd30c1b4420150538b9014cf53fc47806acf283670088d7afb4152d18518211991442120ad9848e739d3e6592323f6e907cbc0df24c7bc57f4489e0573818357d3f4d8ac5e35b6a7c5234769f63a9258ffaf2b27e1df0435b24262d5bb53f7265bb74cad907e6f285be456c8fd697a1d6d1d4e3f4d4980169c1974106755facbef94a22c92e4c8067068d64274faed0d1783da6cfecf23ff7e5aa4e1c6671b9bd743965e142b212010edefc4877e905964649fab806fc1a6326ff344ef741ef1eaf3c86dd8eabcefb341ffa2226f5085050ed73e529f3805f70869daf591091fea0084c9fb05bb64fc64a7f11c7fa91e1590596bfb1fa61b9eaecf5e130a39fd3c13989ec254a8086da91c429ca6ec0d0ed260ba478b6536ed07733057374b4c94c4581cef4f303f1cee929a5b0010106347dd851107e4e089a9aadfcbfc692eacceaaafb271b02a42eb1f77f50372dfa1f82c374e1ced0700373c9d7b8020943f52e43aba3cbd0915b106236ad18acf1680a17ca8310000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af0dc7b96f5f8c3fe68ae2fe8dfe1480ef7a576082f78d7b7d8cd46d307544903b9270ff6a6c803f0a0f0552e6e287929cfb4701fb3d74206f644df2d9b1bb1bd31ad641bda7a8f4bf463c98c00c3c40c0342f71eed0701a553bb4c46fc8f07930145c0d6ae3a667401a93f295bc52d9af70d64e469f11c05c8df31b2345bf44f30825f3cfbcd38a6816098e686f1511ed1803d1784248b6b65fd11b3a909bf65767d3dbfc6e4fb82fe3a54ee2ca5aa25542e7ea2e01f7b91dc5adc69ba0db04ff312af72f3e1bb47f72a3a6261dab299afd5318549957b5f272a270d1f562128b978dc3492a76f009653bb4a8ff1e96e0772bc59fc02469d9d12d0e0be0bb07621d82db22ca0676ae1b0c9aaf21bf788a4f746dd2ab3a52210809f547fac658a7fd76c5b43dbb6b011c5ffb663c5aac360ac8a363ce4d7f68dc7c75a08d25b1b6bf6981c71eb1cc2d9529e62d95d5f8532f6cfc64253139e200aa7dcaaa49f8f150512ff753770ebd2086a0e0f28141b799a7629fdd7701fdd9a19f11211ba9b8ddedebeaa0a25d916f372d1dbd3f16197f13163636e5bb029e80b38ba3513e528819e05860259c6eed10dbc8337cf32f7ab062940d8b4ab021777479894f630000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae45df14e344ab168f9b2664b68051999a0689bc719f7305bb6b92981bd4a6859845dffefd70dfca9cd3329c4c5179a51cc91779bbd74368fb287d2803c67025b7dade96535a3f28c39c8c26b8f06b421d880cf5598f26f36eafab3536fc21fd4e4eff886214ba5e7229075acea87046eccf8e28276d6f7c4bf7c2db9ebd9901a560a32c44084d202c43720dc8c8d10b181219a89b93ad9d03de9af3a873cfe49485b6f8544452124517057a07a4614f41c1d882e8364d87b58dad14e341521f391228293720faf227b703b0eb442523e8176715072f8021e84a3d345b2e1cd1bf64551f124243b44e6337f153a6168c81836fee1034f90a032e80fbbf22f13eee8a4d76bbb0b842eaec43e7facc6ab32a81f20a4d3b1b752a580624ca24cb47969cd66c091f2b4912fe3ba8b17ccce57bc67a12b55f19d969acade94a095a4ecae6a16208196a7b030a871e9a37ddd89c3f73ee9928dc5d083aed100ca9335d936810618e68d4f43cd046b416c80b690e57c9afda03e0cf3511855e73974c4af0aab266728e185c85e627aeff9d4b9caa7c8cfa3fb9a2bceb134fab800ef0aec6cf869c215a60caa9cc36397c30acef735232e2cc904530b944a850be3aa98f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084ab077f735d76eefd2012b0c53d94c5662965e2e9a45bfc51d0e0106c9014671bc20615da28675dbb8bcc50b51de1a7437755bef979e17127c355d37f272304cea64d546edc5f155740270d5204f32ae5cabdde91de71eb977e8f4e22b00eb5d1199d52749f93ddb02c8bd7668d930de687d2875544885ea6e70457ddb4269dbaf9c1e2434bd612b7053f68c2e2c3dc52d7dc7ec4e33435adcfe9e336f9a1c3d66b6553450c18981e8b63af9860fc30e3c97bc2bf58c2a2dc281417bfc67daae68d296c4b2ceb88fae27626153db45f0744469092e7ee42bd7822c1f78ac62159962f00beb87db82c5c110bf6acbd98294b9d491e5935441ffc954e7f92884c1eeb1c039025d4bcfc20682971260e3f7f7775f25e2b8c13042ca79394b0f29b620a6cf16ceda69424a47107e80d2d2e6239edffe7e8158f495a234949a0458f99cd5686adb2a66fa22d7d95ec5c2a435c4277c7bfb2a25213da11a0bce7049db39372e995e7df1e1ccddfe44196a15996dfc0f7e8eae12de9b71918d5cef21cdf92d358cc4b900f0bcc925079e02a5c86949ec022601b34c3d743502fbba4ce72ed5d4c4f1012f0aed3988360d099119d0c4abd37915fb9312ca20374678a710000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3dce7b94a07962a556bd9e5b644f3d29c36ee7166fb5d9c85bf3af08e09b1a496485580202e556f19d91e9201f370cdc3e3d3352d6399ed9f298208f2396c38498da82d92e91598ea65662dcad7ace923e3370b2d5afaef12daa53f6bdea8ee708e4c844fe5aaeaa9a055644e23660c31656795675e7d9cba3b503ef02327ddbc560a9f692a478e80f46c2129741468718e2730101a94867521165105b1b9cf3859aff871376c4137cb6198c11a37fbc6da1cbb38be513fa1077883bed547d88ce483a4d510dd5a01e80aa20871bc6f8f69435362c92b808fd66fe875fac7e5a04f612c4fb7f6db13a103c428e86fdb2916ecb4f77d26af992aa97089c6e7a2e9b18a9d2404e58b9ba9e56dcbae4bc96d417636f9fdec3cebdc4dae2c2dbb0a5c7a6650190fcf04d9c2fcf9e6a27b3e96b1429e0391774fd4686231011ba85a4ca9417ecb0d005edae75b2a377234b0a5951b8d21d1323dd28a0ca53267fb471f9172e8c84ab0b92c2df4ec795cbd04d637e82bd2fff484265f8656e37b9b5669274a84e6dd0e9b0bb7f1a369275982576b7940a6d0ccebce781bc36496caa5a766de0db5d2563915dcdabc042c490f231b29caa07ff5d491a3f3aa773e2a5e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ce8b1bd3116e2dccb8322465cecf848c4caa16bec86a1d51f1c69f2675f016553f57930120e6f848b1859347cbe27c79a42935a0c87df82ec82fb96078308c152a3d8b3f3e398310bd9eb289a3d6465b96b951e88254652693c179462b77209d27bf719fdfe7b95d8d7013c63fb31589b5788efa9220606b394bb596812a0a9cb327d2a26276e1059637ad0a846c22c302868ff23c5f30fde59c04ffbde9b85b17f4833288f8fd32a018083c811dd423140cc895a16ef1d8bf752a3f2458f2d6ed772f28c72e904553f95c0c3119cf43146d7e42e397fdf82131015d69392a9d2ad0a806ff6cd1c3b0a8461ae951dccadcc0e424a2e34bfd06ef0dd43fea12816efdea4e5cb284459d88aaa2efb483a7fd4e2c692eb6b45311f34ec3293281032d9bc5adc7b9aaa924b0fc8ca252cc5eda369bc178cc074e84702ee42c7755fcbb4675bea34219b0f6d3b3d4f6556069b2e2c42823d384629319f5c8ca01a4f4128a834abc22998ebd544ef870d6343e27e7021e365050d74875103da48a8bbc4ba6544408ab15f4d6a0485636eb2b57acec2565ee81c3294eb9313470bd261a2bf60f70f3cdd2c47f6c6bd9499c2347954074ad6eaca70a355cba09eb0c8fa000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021d6fe3a9387f6846fb2d664d7a9c90b33a19cfb82e249a2c0d3dc42488272086367f2e0bf570898e257a4fae4bc526f27267e1de7110bb8b807c4f2b5341a2bd9c51578be23246a6d23aa37df2bdfa9a7a027b1a3441382a347ca643121a9e97f570223d0af302a164033fd3ea3826a138accc3ee18db4ab4d14cb5473a4309c70997f9804875ee776760004c6ac64121030d89657185c122e49d79fa23f1383b63734afaa6effe43648fbb73cd7154a32b80058a36f2db32edcfd159502288ba287a61c65e29f2200d94ce92a2ca7ab625b01d88803c4910a185679165bf6e4a33d128a91259e6ae3941b1454c1d57862e6bf1a76b397b5810afc00e9d39ce7ab65b316754780ca8d73a064e7d91e313c7415f58d947abf867f0a4540846daa0915c830d102efa6acb91c0a10f9e0e09d178a42ff3256ca109fcc5a9a6e700a133ac1cdb06af56c09f281ad50fdc6f5af436d1eb54da090854a4289d403d3b07a2cabb00851e84104580446680254b971a857125ef8f7fa6d8af87059ba85fa5624d4546450e0943699e18f5e018fb9393ca4441d19965e22797e2d9e87a42d9b9b24fd2676df20bdab645450dc564c14a8752305f6fb7d10a7ee0c165b05600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001feec4625190f554cc74d628f3a5b006c67d133bf0c6ff65d45f8dd69a191902027e237a81393e44e7d9a06b38a1d19ba99a60c212cfe0a093a542129197ad135fa693bb98c8c4b6ee1ee0dbb6474e31b3e06f4ff7df64708d6241cb6cd41ba0572269aadadeb24a39a222138a3fed658b909e8908c0f5457daf8e6e05064452ae597ccb08183f2810f41a992fc550a7ab4726d7edfdb20844d4f369c0df985906e31ca7ab53a919288c08d597c6ae6b24eb655c353a18e5db4c082824b5ba9141f7df239db5cd719c3dff8f00760e54395901866ac69cb28210e5d1ea08bd3e478c40ed10ffb7463434d5ad723b4487391bebfc2713ba4b44dcf6282495bc3b8dfe7a5a37293d47fefda5010b38b9777bcade0ce36c6041f4ccf251d77b5dfee9e9d81ea0826308abde13be269755ada6b6ecba0b7940ee97491c26108ed655b56cd0ec104ab5a805498fb657339c74f504319f9a93029006e1d85a21f90679ac03222661ea34d00c1676e9e27c9c1ba199ea026ae46bbea1c6ae58afa835875d8b7287b78023381ace43d251ff31603142d0d7a16f5bde3a605eae433a348fd06f09e1d5d510435fc89d828a2f92d3873246b9f37a2f083cd5b7622fa56cea00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e2a68ef14a68e93fd46d71da088903daa1b26032b2bf1ccb8d192a64a6a4b0ec2d6165672b53ff20de854fab34e1bce6d7ff2a148287a97a3329acf486aa83fa44ad207ae19b5145d5961c2ff0f834346b7b900c08a015e069d4e753eb3ea28ae4b0b4f0caf51ccf38b4b2d933303d82891c1cf5ec25a9164f6e7e9a312c3f4b7dc6061a7039aa27651e001c84bc49e60abb18d945aed1a1a78a50205d9d3eb9bdfaae38f59a6b1316e321c3463558636b6cf7f1b75550df02af5f5e0044c31f6dc839396e8aee56fde6d1fadd1e9cf807f645cffc6b9072b2d0834635e267c05b13eea9c0d40ffd76b704fce0e75380d09cf04caab5b302bd5e7444db298575c7dfe6cf759808ae6fff31c436ee41d9596412b1d42cf64b9fcb3f9f7ea4738bdecbf2591a5d97764c1915e0e24f1bfe7f37c3752f589165e48b2c756ce184513a8af493fa3c39637790ece57f2e44ee524c3eb04b8274f6dbbb27830942c9af55a15063aa274b3728e8eb07bd60c0bffc99fe7635d3355bf2d1f8908fd8d055b4fb7a2e6aacd419723bcbcde4e3a4ba12c2727dbbd677ff3b8641d1f2b4ec19fe1eebe5ef2bc1f1430ac4b53612f4bf1d0c652a89709f1bcaa818eff4f132900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001380205ba657f7bba22614969b7fe18bbe17c807189be6c23ce421740a69a407417c39a7247c8127ea2fd8d2f345eb0785d8f0d689b1338693630e9bdd0e5cee52fc943d6d906e7f7b5a102193a30b072a6d6ca538d092eb9ebad5528e817516bbbdfa166a882611073aa07bc34f5bdd4de3c1dede3dd1a8a35cf3be8248ebb4cc8dcca67b4ec20c9fd6e741936f54316647c2f0030c84d8c6c3c537382f955c1817c93b3ccbe20fa5dd7c278bed5dba6903f4fa5f6846ccc6a1f40b78ee8f0452b9370671ba18dc53b511bd3a7f3fb500fad6a73ba256644892527b917831087159a24acb3dc25f57b930455ac839f3b02056cc9c84312de94ffea31b979d577109adae6ab631790aa9b694a4a7637cd9fe3a0713c7fe5c2d646336120a902409c4d7641d4e39982e9cf77a4d5443b9260b5fbeb55d7878805fec25ef4a926067d41f94f2f6059db1f9e7e93f370bb0fb2c531d09ed2d05a7de24adca5d659e537d14dc52f83210cce338231cc1ede979d63aee27cf50b4b7809ae48723938af03321328923aab506fc2e4b27968b570be95049eb8192a7460c72d453ab245d8521b493e9b037bfd68a765f81a3d78cc019a4d0b3093dac95e87b892c1e6d960000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000834e963965903cfc3b0bf1acf5e0e99611523e2dc4b1719a4d102a17f89c95ff131fa8f60676d7f9f1a393496cc6e111bddbcf804a476c95a2e0622b54cadd21ba2b8a9f0d641d5cb3e4639fa72b159d2cc8208f20bff304fd089adbf0215578836fda1afd2dc3d8c941291b33ddfd11d6b4ed97810d082b049c4c5554d8e18374e95cc869d90ffa1c1a92b9fdc264c5ee8e9cf2d5026944ec803a8eeec2d5810c47adfad11ddf18a73fbb46e6fb28801e32f9578aecb441a7a4e4aa8be304eef00b1363a96cf26adb9ddc3dbac8b2a6cad5cceb618ac0bbfac4b8b6ba1655799a460163c94f6c40080c2434acc84cb38f2587274b3056d3a56ae657a1eec081feecf50062d66f6a190af8c15e1390fd84b2cdb19031fc7016b62dc110eb4800d1506296255a746d9dd420b4d925c0d0e72c0d0d856978fdee0840d4abd0ff2e5aad093df41fde04bf62f71f9fadb950d6385ed0f72aeecacf4ab9d6ded1164afd337b6cdd2a961516a0abdd6c33dc0cb82b3cc19beed28fc73f0546dbbe661c166e50bf830a803bd2eba4741d3ec132f56effff843087207949422080a872a1b8fc2a57a65f0b9aa674a1cde8535a055c99e78c0b08b1829a847909a871ca5a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000133ee2bee19887e4b94887168321929862259b4438c4cd3343bd2f4d27e2c083ee2ec81da400b359ecd216d468d6f3a32dfdc61a88cc872d56cbcfead433f0fb05c18ab5a6732109df3cf455c1fca22ed1988909d7477294ba19363af30df806c75b78fd23f92cd5cff7f410cb83854782832f9e6e49c098a23de6738d01953726627625f9ab507bfbf1c2b953b4b27ed6415304e7b3f9770ae4acef6179f2e0beabd4dfd01de1cdc167d43cf57da47590fc3ab6de664d8005c4183a3b99e071ed2f9c43748d22422e3834c4c44ac2d20d64127cd9557367fb5bfed575acd978a02c8e32decd65c530c97192b1978f77657df0caadce467d03dd1100d3c370cbc2fa47cad0cd3e22a3bef80b9fa2b05181dc5fdef2829631a11e7126b02f94c32206121432071b4d31b72a635d4d233c626193aae893ac2deb4d4cb8c02c852b4acb45a92fb4d78b779bb553a458f50f7dc3dd4db71112f0b6987d278a2b67f3fb52fc2b9bd7a586b346c2f559e329281f63528573022f185dcd0e4d87b8ce39ec279098f011bf4c7a447ff34667825246f2430762264b23fadc5c59d2aa5412dbca051e5b7054e9235eda2d8e99d69ff4593a98b4da7680f492a3748219ed5200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001595128c1b90b73e40342207c1febb2cb4f3b592815da05791d9e3dc6090295740f102eb7e43096431e00534c3116050f583fd60e5fa6dfd0479a8d474f5477fb96f8d951804ef48504d80530d29380b6da2afe8c252fd8140ba91d38713075cb921e491d652b384d90407fcffff9961237bcb17c8df9a21fd832be65917eb64d926e32de669818d58637d71edd55962f3e624dce1ce7cc9cb39d0bc83d066fe1221695dce23dce7c4512e4a537939c2ef8cad797d8d3c09fd4af07fbb61d4310bfac75ac73934a1746e94db496911f96cf6b31d8333a297b7430d0069e86eab98ad890d700238dba51c43d46465c605611dddbbc54c4c7310e61ca0e2e5733a8d7b808117a6506ab2e18e64525306332dd5020ee09f1b4eec1ac5e2696dc5de392a40c4c5d1a77f62f483318da2b006eaddb7451d71c32e5937536c0d6f23087fadd52ed47dddca4c121d1c3defa3d5a3e5ee0d54e66cc2cbc66b75c9044e4ca0ea3ea1f25e592d6803753bcbf7eaf964bba48d4ffc6189520378183f0a0a45eaa04a94f9f3e4bef7fa431fcd48d8de95f6445769014e0cd3f75720cffb29084f3fc63c00c02a7d70ae23ad1fc6d5089015a4276ab875ab069346d3cc74cfa50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000910eaff6360c66e48440bcecf90bf14645b03a2ff06c18453ee9938da05b07c8cf9dd7d90229cfaf27feba0dff866505dc3bef1c4888e43482065b9e88e21c9095e8129f4007b8ab0fb7e1e305cb4634d623ef8751a98152c4c5b98db8c29ae240b93d51c5684a1ffffec737b9ef927e8e146e4672ecf3190bac556246e9d231e642d92964bd441c9b8793a3d2475b577bf86d235032e4fbd39fe192a1228566009bd7beccee889853284856bf7ebc94a4148e116b11c4d267cffc3f698a696b8797428174c864f9d54fc6ac60dee7686ca4c40c6a3fba45b716ac2a22d8f5563e4fcd5489c005779ddd43356f2feaebee69f1b9d99fe79aa3d493d004a79341e62b5519ba1b92ba6d621a1deac0c3815464cf517864d791ff7d4fc4d9b0777050c9ded3fc0bf6bf48d3fa1700fcf5774e242501368f58f6cd700b8da6ac454818785ea0bc7c97f39a4e26848f6dd0cad225bb0a787b5e3ea7314bc24e6f0f4f8275964a7355e514f15ebdbb5eb0e6b00bf59bc1cc1d087514031baaa96525cd208eb85f4010a4ffc7a6e120b5c21b9627f166ec0e64c3e27b9989ccc63e72ecbe0556de8b86f2b248bafbd30ef2019eeaa0ec5d37325b729947c9ab49c30e560000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000160448aca7f8007157cd203dbb08f91c0bdb44f7e460c56f849230359e2ffa2bcbe9485c853ca211fe28dd83dee654fd350d08000063d00c0cf84162321ed88228eddf72bc12c3e9e82c858f72326b3c632fbce4592b3724d9e96bba8be6ab0b38873099d6b63d8ff931fb2521d62e848531cbf9e934b68a6543992ae1ce421e6bd191b4a83d29f02485028313509deaee6567ecf5296d6eeacf3e90852c8f51f99536259e58cb8c51b6d8e12687e8c676a59a3bc507297450ae5865b7f57758171338b7e91b4ac008275338adea1a9a0301443689dee5af2a6dc9587c579831473bfd933ef0d391176d26f1d770c9c8691cc0c156da003c6f6ca1e702418706b0c44fc9fd9f67602abd87372c76781dbb90f7e355dbcdf19aee36a5168d7f61ab62d674e1f8aa8142fc6229bcc22b721c286d10c2e7a28d7cb9d0a28734132eee7f5f3329dfe5479cad8913e78d96bd59a57b72ec2c2666c6776e87a778cb6439057ccb0ed3cb8f04eff842bcfcaa67f39465b310cbaaec5935b4a33cc3a3460d7c1749c16f3de0967af399e380be72fe1c4905c99f5ec787bacc99b79ad2de1ed6a8a2eff8923b71a1dc90ad02bae994f677d0c590810e8f316b631ef2b0510000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058deaf6a882c354f6b6ac36a35cd95cc13e144c05457858422ca249c71c3c55615dc89e5556ca5d633454e0d5de26e342c8cabf32e6803e83c88959b198a502456801645a1fe80f619f26fc5a8aa3bd584b199e51b08561cd0d2a337bc84297bfd25b4b77ffa92bb8665d0c0e67e3fd962689a00f20d98cc86407d144c4a5ab9925053a37a4e1280ffe0f3e95bd82ef5545b30f1de815ee7a8724360065eaab27609689f780ee9b5fcd4369065fec831b7904c5cb743b93a9b79b05621e5fe9e7c57bbafc3a6d96e2bd6ab22c827e8cb4d483e35c8611e1ef523723a44781a4a3b186e7362db838f65ceaec4961e6ce240d3dfbf8a7491ca9ea8e451bb0aa9f6f076a20f62cdd99ac8ecd00bddfb525efa83caeb9c2c76e344f8522dc984963f821953b9a92b9cc638d37b38b017299736b38821d582897ee8bb051ded7f6daed822a7a38afa25a61644aead415d335e69fc59d1a2abff3554fecb8a1ab416f320fc0422014dff802df714ab2a8e798fc0b4e8c397a543c7c67cb074ba1a0fdd3e8ee30cdf3bd7c0470ce6de301c8c7fbd36adad2166f8da79a63bd9955db66e9405a1ad4c4d50048b5d405104f55d2f3af8558967fb6c454ed3fb365027fc00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9a43ed001dde77ecc20be1537e29a71fcfc25c6eda9ff46b7a7a5f66e42374c43988bff4bd5eb2c9bb9aa780afd7fe9673574b84b25fc844aad89ccfd40ff7cbc0d326a56a91c0f56d9ab7229e693c4bafe9d0209cf7fe3abd9d50934abfd7bb4a73fbbe7e21c569bae62165308436ca8793609e8b345dd7c9a0744a1366aa01744f940e473833b2c7c99abbd0de8c6027b2345253c47c7af1739dcb5440448d78089344a7b71158672e0c49d63e2da6bce8a74e0be0a55b388b728c3421f7b3b10e3b40ced9473bc46d8925647ced3611534cea9513b8abbb4c325e15a25848954a830e3293c30a4b286db9d5694b154ccb2d3b864696f4069ffbc83706079dd82ebd3eecb657a995462c6803098aa1c9c3ebfad741780bfc6c44dc73dce2abf9de4f74fa419cfe61a028e82f11e3049aecde538205719561e275721b7f673af445b5bc2080b1a93c957be16ff5987c3e29f827b4963cfa216d7844bf77e1efa45826c29c8642d290f47c193216f9ac20ee127a6879f5bc952706d25e21d62f5cf686b41749eebc1117e59e49f185639084e7f2cb5ffc5c27749f5689b98748736d8c277dc20c9996d3ef6b3881366334b43a3ee289bcf481748d16df09b2700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008373fa0055e775e0e63d485348000024751d41b36973118c1fb68ea4ec29d685a5f87cab32014f938029ef7f44ad46d2a0976abf6ef90887699b3fb95a5879398f84da0f03fcc616b17b6b5ac6832dbf41f2a619655591021d1a0ced24f7b5a52b5da2a823942c13d7a578e8f25c98190af22bbadc65c389f3f2e688083714df744dcd15aba818ff1331114b3a62797a6b77a691173fdc07107a5a0bf107e6608a39c4ffd9123b213119c4cc533c2beffbfb2ca751337f0c8d5709841810eb82040a0b97cd03db0c07749e72f013f4b376a96da872aefe5b71576ce2a630e6d173e6a1bd25c363615309816ca21d1e4be8aa2bd67c839927ac7c9d4756840b5cb43fe010ddabd609f3c281f92a54f5a42a82b1237201feded92a99ff58cd1b272685c30c5e35bb60c10e814f08404342d0acaa2b4269fcfce4908cd370f8b9c484a67f570e3b9833df4321dd19ac9709525f21fe2435e9aa9d5570b0db49cf7e4d6bd7af1411ab2ed0695cc3ad37309fcc48a7d41e0b3443dedf254dc386ea5f8ba0870c3e64c5630dd22ec6bc98cb7141336389fd482137fbdd6c2205da0edfe9ce313897494347812f56617971c30473f6b4402b1ec1fd606b053ec7e52b0200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008138551106bc6131c35cfdf07bd734a4d84b2bf566eb60f8e8c86cc014c065fba0f7360d4aef1cfea131d4e8a71b7e2ce4ab7c357b8a327693d280ab1f4f28dc4865faf5af0260fbcb03c56439f8f279aab15822f085c157ceeaefe414cea4115ec6c959e407e606030d48b20ea0d482b8a28a0518db4de950fb75e08b98945ee1455975a43181df7395201e60d68a16292240f8c22df384309e7eda6da9fb192818095cddbdc89fa908ee9df34e40c18345bad59629fb54abb4a279ab45034ee4fb570a8da770406d43f4670488ccd167bb1e7b385930f57c14fd5b04893914785997221ceccff0f60751d07e8126772585cf7ffd7fda4be1546e75419087c0fd666e062f3260a34b12fc6507ba1f918b8b248a4065881b1ee7c2d89c7d4b643d51d971919c1b39847e9cbd8c9df4074e089d4f77d98fbe86486e9dc1a88e50f785eae7a0b210b8e85980e33570722ac0bbb0acd2fb9ef6f5e65d1de5994188ecd607a697c895d0d529b2de602792ceffb563bf97d61ab79791416574d7af20ce7ac560d9d97d96e11520d0a0c53c94c46d8ba756af290bd6ce423f5e154ca41675ef9053d91d729095950d22726140f66c5244791233ce082c8be2db4b16b6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029e1ddbe316346f861df1f49041de54db9b7fecbb5a6536a954fd52e250b271c5b31567f5abbe86f9c92de49745438b4d79cbacac2879c43fbe0b130109f95e25539cc36d04f0f2977fe8d6a546ebd5748c026e83020dc103726e1618d302c8939808c26341493d4f63639e1f236a610669f518eec399c1f45b8019b594cd14f9b378c4ccfa9b22f621dae17aa814488fe098b671c7b972d9fc1ddb2e74d57cd747085a56d77e6c368bbe0f42d53099b3165457916e26678ce6d8e98e319f2f6ebb78141c3b0c5769603e76363b7ba16931a47de44600031d25f8c4bec0fbb84f8a5188f9c88eec20b88839b1d0445ed3798309fa3919c4148f9938837ee53586d1eea3c69abc03412b3e05ac6d72e6b007a928b81287fa35e3c843c8a3d89dd1ce7f03aaea8eccf8eaf4312d4c054af995f8724a8b4157bfcfff2ac85cd292f11c5ec65e9bdc83e2d9023caf5146e085b463cc0c8777ba5b31de240757a7027729abfc8c761e8d71356716f7ecd48c4b47d41cf965e11030ca887529fedaea40620e45ef9ce210530a6d939b061fa97c2c04ebd0606049c72f8b6c213d7a9135c6ba3f1aa72c44b86b32141d48bded57fd545fec37934d9e9f2baecdcc428cb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d793059a7a57e6bcb967a43139a7c6955d26c9aeec67261e9ac12794ef1118ad2ae2fddd4499d756f035d12b5978c6b2ef4b59edf541a95b60c06b665a51f72c96468fc21fa760e52013347de200f731cc02f3d76b9450533e55d802c34facac560ba8c33f277379a97e3ddd74f42c849de9e23efab3248c422b57761d39c46408e9bb430ed72cd38cc25372ed7c3b3c7638c7e5216785bfa92d4120b7149c75253b8ed994b47c15d256f3c4bc7568ce0adec703b70d49a03e461125e055cdbdbd88368caae3fc6d3f3ef2c3a73b8631c1ee3f8485017a7332aacb54cc959544a264d7a56580f13d6910c154ffceb331b1808cfa160d419f8bc99db4a566fb6374ff287cfb3d82c04a8b7688011f31c21aa389a551baab8a803b06e2a6a61be00817aacecb37ad38fd4c6c9d206f669402eaa2514b9c15a796b029625399c9e3d7a0a43978c7c7dbbef7627e41aebf88254ac3b5a62e653a36bd5abb5fb8aec50baccd8f7412711a43ba7df42ccd1535fbebaa9dd5a77585d3a4c303cb781680e0a1c723bddd58dd6ac67e8eb38d88964c0efbd8f9071657db9398fd522f979d27a38df5ffd4cfa7d3e9adbf2f5b34123ceaad152a4636b1f58531a3747add000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092f2266d848e0def36070996580946beb6917309d97649c8edeee186b7bf1a85275c14d7217356bc0e0fe0ab1d9371892daea37ff393f3d8a1f4a8634f421b33e1425efdc511adc535d24c6817fbd5e03ddc0d333fbcc8219351092fac6bbeea14ad66e9d62fbdcf8baf0fcd940b997a60d64b569355f8a6eb2de9fbabb76be1cf7d6725e3538ebbdf32a162dfcbaea3bc4e21dba1b148d6bebbdb534687de398c4dce105aa5d1758097ea3e34d5cfc2ff1e45ecab507671a7ecf8f24451a78b136bc66d26423c9e1f331311bd1013cc26523c92fb00d5938646326c4443b476abb6abe39b1126bc4c02d31b075639dca65cbdac5e20097c3f1bf19c7d91c2daf3ab7566eae4567c280786421a42663f3a78d245dc5a5b1bed0ca56fa77641c181fa69677eb3628b1e17d988a809f8cdac604eed697f000930ff78c286db7cad50025a3df1ae8ab92e0df0db82593ca87e4a84055fff97e7cbc19d6deba22d91a550d04f9aa4dc5c3fe4f4a4fbdd4b3551fea39a9f11c54e2f293425d3853455141fcb9327baea94cc1a89a2ad04dbd10f8ac9a483cd417399d9e744b2fe9f709416d758de9c9640a3e9944520015099477b45b95e15e3fca545247635366f900000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000261b1dcd5d3784bb34bbf7b5397d4fd2db0ef56464827b8d3ba5ef9edf9c7558423771c5fa7a08502d84b4b62138a6882afc0985b2c71126c78c8cc49fc32172d5d91ea7ec159c7ae6c406e5e3e308ce6c93ea03eaf277a49482c7a7ccf93daf4ebb8245eba1378d22bd1ba99e34fb19097c632b7d8fb14a9a07183e3d227d63380e77164e626f1c80afe336eab8a213be0ba4d02138346e0cf0d0b19851f5cf088da33a9d28b0580193a448b5f7eb61ee73a03826b167a37bcd580489f8284c5ff9c19176d1b77ca3e0ed3f225f60ce777fac630058c728da6e4c738592797e0ff67befffb474eb718410dbef3c783d01eb0b3e793d6874268d7bfb6efe2011fb9e0a5d5defbe0239d54c27a5f395aa359212e1440e6b260aa9a99c3ace8cdbf9cf8f17a10e1b27ef8fb5c03fd4ad303ee6a533389af8622d24d08df601002ae7eb5cc41daba1ff8e63aa667c2e75e2e18b94add0a54c525b6e36a1bce27fef03b06121e40476c0dff49d2ab00d456ddf653a80216b231861d974420be7da273af65a3c38b610cceeb04ecc0c79ccbffecaefbe25718f51b6c65c5c0c3cd5c67037554426d7c5c839562d2539b1b093514ca886bb1431b6e5c73c747b925c67000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026f5e88274e0343c13079931709f4edf213c57692245215b2de8bd8da468b1b414bedbd8767d26da3260cd18f8616be675dca5d462efa2d4d0fb3d24b16f30fbd85928f76bdf1a89c175435e179b4f610da63f13ef4a8a58db4c2e1e9dca0f35d0b5297d6978d381c40f011b24dd77490aef5f2f04764d86d8a503b8924cc9ac7095b8365f51bafde8fb3d72ee69992a7ff31471d77d6b6743eab749198953d34252b080ffd163edec6fcc17d5bb53cef7be45798b615172ef7c22ccc1dfa708ed65e25e5255fd81a9b72e124c299e5fe934642c006e35751c864fbc3edf974b0c81878c4a447d91954906ac7b38726235b3253fa98e122ca13198abc2712878f7855e94ff73c5df69c764367caf97e6426d71286514fc0d604dbdf3f6264046f098a0f0ba10cf124e95942dfa90b4e92673380b38a88acbecb3e5c432435dad88c208104b633e1fe0bf7468fce4c478b0d55cc58ac0dd605f4e04d27c052e4f90d8d18c0745d6c7945ec79ff5f1fc98ae2d75ab74355ccce4193128ab89a0641f6f5be20ce896f3e28112733be5a42d3de64e0529fca9a27db95662aedecda17ccd883cdaff659d9ed3d265aa338fdfe4bca3a516ed6a3c3335c55f24f8331000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b5289c18a295e6784941bc7f2521cbd5862748077cb86e0908ac05db95eb1907fa11d1b49e4de0193a1edb6a5759bc5eb1ca6f485efdbd0397f6ce312a5b9eb960ce460c56a846e69eabbccfa331bbbf68440ce5e53e29ea83f9befbb0289c488ec5696bbc9cbd44da4f32c92154e6fd93a6c4ab6aaa7170ebacd00c72859bda935aca357fecf630d35ad8750f67ccb9a9f0ff0cf5490a0f619d0f096588d4e3eb0d52f1a599baef269aa549cabf783999d006e87dcdc033a1d9518a1f928f954d5a73a16c6e26ec8541e56ea00cd6758bbdaae0dff806fba443c99ee381f6529c642007c10abf5f2cb03f5f1bcc26e5a1bb85e2f28954b430bcadef19181570f5c7ccd44e38333d7e8b51a0c085becc504a2a4419df8da2c4ff8f90f9922a85ccceb818772d6d5cc7b2acbafc80ca0e792d9e9ecab22b5e470ec213931ad66c28e39c80fb93e90636f92d4671d0d8af0444d63e076afb22a33e0cb4ec41030ece0be9291793157a252c53226555a0901998cbff6c7453687535cf5ffb93fc3fb32d8e85ddc5323649eb1bc0a58782d0640e3d626904a13cc8b9776a14e3ba293a55239d88fae649b512449909d0aabf462c3303d3c7cc288e052b084d4c89b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c96125490f99aba5aa1e2676bd40c7f84cb0af8ce2abb5af4578a20900558fd7c51a0faead35088f4d8f8d2548a1cfc1ba68539ca067cbd022032528caecd910676cca5bbdc8f33564b75534cac40b8009ec27df65c7a6343bc4e528c0a3134bfbc62ab6d3dc44a4a419a60aacce0c8ba217d02123ae33043e94b8f698aa090b6eefd707f29f5db49936755b900fb43565f0fd0285abf8e6f86a069f8a9f7e7e456695a51ec905ee552e9e5de578f0c927d7a0973d24e9097d70b111e043fe655744f70190afc47889676c3e38d512a76b26b9d85c5c13587d6ac1a20b295aecb55114045c588c83e5a58659bab0199b6e65056badf79a3ac8d72349157e187168adaa81982b51587e18264d01f39e2f7162bd97dd115a2e53db77fd48ff8e2d6cb9e469c0dff29949823e9ef2694944fa2432372e47e5e6dca9709ca25ea3ede51e58ab5e14359e638ae96e86dd1119f422d777d0aeb10366d7bf8f24ac2fef7825071aa09d35bf6c829e15eccb8394d8c62b0c3a99320ec9923a838ca1169a84ff2affc9ec3d6ca5467cc9613f5284ba8857d715f1cfecb28f306ec07783f64cbdf9bba374213ee5efadba72726bc98c1c3ce98ef3818bf1446b8e2bc20f70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000853a0dfd7a5c89bd3e5a90a3389e417e82a16c21b196e36f6120485b8289547ff413edd63a9176f0a87183e8d0b6969cc00397a41a0c670c3385580f96dd4bc8d54619fb242be024e9f17152880ac2b23ef77792f9fc0ceedfcf0db7f23df364d4146c223ccd18d74ef74fe9ba8d9dae9ee67df0e8479e6a310b02e0decc53c08f13bbc46c15a94af4b072da952090ec51ed1b86d0060d5d710113001fe10fce0af7e4adee882b0dac236117e4a05fe02d48a7b47ccd09667fd4ebffdc66a035b37e583cac1923cc68ec29bc86d9a1c40d3c53a6d017c269033060ce386889597a292eb5da45196d5ef20b0a9fa443d02381b13034f612011b0e42bb77f136cacbec2f5d5a3abd30d8e50ba374de9ef66efb7b919a4a3f7cf99d5bbe1d361629bdfd22b6d4dad70cbce618cd4e3fef655ea8f3c10223349f9631db0a6b59fc142a1b38f6f8d255626d4348a3db1c273b999ac84130ed8167cab1928a05e830b3ed3a80ce4a0b520a81355865f4e0bee69d55b7db513a4ea9f2a5e0a0a3fa03cbd07319567d2e0b254a1cb08335ce6b5ae8443de93907e36a02d7ea891d8c8761bacc0e90b0f037ea9bf3dc23a77eaf7ede2cce2efb20995f77c26898ff13717200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f4a6ad5603a734782500d577ccf628bf779f79a2fd2a78fbb9ba14f02b55e10956d2bf3fd05fb6badd428dcf25c690fdc381e7f4fa5dfcf7bd4b2b14e89b2aed735a13d8b7899acb38037e4c10ab1fc3ab61d9f5656bb45cd1cb60fc81cde3e64fdfd0a936ec5836cb0fbf089a32f81f25ceff99d2d073f436e1125a5402b34adb501d62bccf87d1eaa744136d5e8784a8fda956fa6f7ecef5ae2b3efb77cff11fe5de3e1e6270dfd0d673ba77095ccf664268e052317ce72e8ea47c031b2fd09bed9335e028721028d3f8c134eb065433d0cd9c0b13b436c506cff665ac5815773f7c2dc858ba62cc059d8d553e9acc991eabd0780cba8d0d060c6d9d4c378107e9d3cb8eccae94b801ceb274ae0c661b1c9a3ec147754a8468e6fbfda0e76a941c9b7eb64742107b2efbb1e03b982cb958a5a4786b4e00c1ac3a79db139c76f705902122e4d43a4349896089513bfa1636d732bec0435d675eff472946549cb2ddbb599a989768b0e67150557e0c51faea8dec689a2e3c7be50da8667d59a581538ae16279d504d9c2fd29ca6f9dfe930b7779238b08fdf3300064ec38ef665c5c7444b01c74440d6d37cae91e561b6845fb6c46917ef80e829616fae5df50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a320f108a253e7e2c33941cbb5c44dffc29be954417c266ff66fcaf5b6f0a398a3a130877a4c49fe386472bc65a9c9542e1c40d85f495aedc872cec48e877a81426de5b898ac8c1a61e40127f10c355627afa97f62b7b3472e9a4617ad8081e02657880028394c4266fa0d2a0e400864b79055a963209a61cb2a275b5cbda7dd55b54247255e03ab7887a7a3060102f872e2ab06be16e393aee92c9b6d229eeb98200a5a99b438d83f9529e48945709a714f556b772ca1cdd836b52e51a337781534375645d4350477b94cf488ed0006c671647592b368354f1f529211c96c5144eb91064d3b98c6c6d6a9f77ed97fbb7070780db1c3830882fbd959182a9cad6a4f1feb0c6df5b6818fba905da5f18d4ca5e4f0f7e576e2198d8e6127f616087b5362ab2b99c9c3894b8fc1319c8eb1ee13a8acf389dbad98273262631b581db863930a27aeda13bf592f16e7cf98db2c9c0219d53e2c4c273dea7c6985393c2336153f05d64e25d8fee7029cb3ed8b7f6801d2f1a36001c40dc2590c608d8c920b2cdfce8d8a16bcb75a2bead34f3dd1e5df79f37119b60d00df60cf49c16b80314d7ba9a2afa2770e97d491be467af38f360624a2539a3cfcc6ea09cec5460000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000173ee339a856c03e2274150e943c589482e5ad14746774fd1fb55057b88535ec4aad3f787bbc33bfe86c87cca38db19ec275e3b2ab846c3851b6a19d4dd422df62375ff25a05d77a0e92ae4055688189f73b5a9595ff4af3627592d36f8c08f67dbb6ff3cc5f8f76a51830b1a9de3775c882c9c995171c72b766b37e9b70744bdcceb9249a51405cb83b695a8f28333569a62b740d94782c4ee4fa40a68302e6dd5ccf3450ec52bd0e914d90711d2a039b56972874266c81703bb55ff2ffb731f4e9399d607512e5221e8a1f80e39578d835c573f4b6678f2035b44de2c8618012b161ddac891f46b31b8cd9e09264629f60b9e76d473de0b2c9d79e13e2fc2998a313b13dcbda1e8b175eaf403c6b1ecbca48e065fde00a78e17a0a3f33bd46a9d905fc955ea4f9da82efae9d2a48aad84c20f3340143a8c660d5fcb48136a1edaf48fda1154714aa9a561fc72ff281a1bdc5baef5fc487d43ea0f246ac7a037a3041b3a7a540146a1143fc2a7e6afb8e0f3c66e59339731363d3a6b16d2fbb6d8e8c99d82eb9b212172343162be331a86bfadd796f50c71284604abdb4ab182e79aa64eac47f6637f0d3211160d825516cf03e3112e7096cece26d9b3b9fe10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205dd912c23888ed2833ff92b1e3573958133f3cd921c898ed1fb47c77d7cc0e1ef393eecce199d9db9353967af50cd4ad15a7207562c90af8ab919c43dfb806434a8f162da28ed6d59b3d25580afd66c9fe5ba8c4b0725f33b29a1ef343028fa1d63eda58f35ef22d05de7ae9749f887db95be978f9421b7b7a135258d8eb9a9d21106c7775dc61f10b60fe8b09285277b441d0cb6158fefe33dd5188d98879a6954bc2aaed61bb5af359cdd05e5d3b9a8c72884d3997014e8fa0f3756f8af5ba26b28a9abe9a1667979894454fa4dfd4f2374776fa48e5546af7687c34b212a73e3b299af89604c1edb912d8edaf1af047e16621f5ac8d5c6747e5a75041ae4f65466c42572073149300d021942a398544e2e2c3498d77469a729c1cec79b55fe791152c6a8bf585886b0a896bc3bed0e2a82dbbbd475d0514b7bb8566ec195e010c7bda892d7e0f0a2862a51708fe7184d6c15d05f4d34d6aa6490ac041cbcee3558a4f88844a3a006d09c2f669ebc48a2e0558ae3a27e6d3c5245f1860aef26dc0ebc52e53260fd1cfe0833c354c7fce10d4d4cccbcce2db8a33233ff4027248664c1bb7a519c89db2055485418532fe9ba8fdb4e6975bf80c550e6e2ff4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089a3f2bb847bcd84b455cff2d415d558c23a6702dd19e93a61aeb371fcdca2947588d5148fb84d5d7b248369b0dafc3758c4176ca98c3456384c875ad350736836d19c85e6063094f97e3e8e3d5d9f6a8af39eef86164c0fbb486ba3de1ade1ee7579471e02ca574892fff9918e2be7334e32cf499f9bddda41f98d68fd45a814bbd76e9079b687d62834cf618efeec36cb43e8f88f42308d732154dd9866b86fe093283eb49cb1d5b0c48a4d5101a34a89a472e43bc18b90eaa8247a19ff308997751773eb401c6a6023666a3c5f5392a920648076374dcffa88f4118c3f4dbd57359d3aa228387f07308843d0120b6a04b83eb7ca0360c79c39d9fce7af09b0d05552ecbced6cb4c3fd40f9e0a17d5968d77d407fd0f0c1ba04c55148ba86ef115297228a0b0bca212a62fab5d59a6a5f4e86b750a3d26df9f70dfb78b93f34d8ffecbce1713d3790e4b4b5c4b98d56ec8d1ae80d4ecf79db492202e95e1674d36d38b449545589a10f33efd70c1b390b9c053371448fb504276b27697c007c3ca651b2240ef7a83cd70cc87de9c637f7fa4b344ada8bce4c34d574f1dbf937b8420b583112854460d995cf93b5c3b8df42d0fec4895615fdcaa2ddfec43dc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008aac2ff0ac3190d9fd40eb0ea5b553e8b0dbe283038b405720bced33fe0075e0a6fcb3c09775fffb675df53ee393eaf816fa1dc9ca6befc38c4b064986937b7c0863faaeba11a064dc70b886e200ce6363eef53e10bd3203b7c394207a50278471136469a37f6e5cf825cdaa1a0a853705b9f797fd2cfc9518bd7bf03645ed7f1c3ac54097505b14965e8d97bfdfa9739f9dfdc5939e9f45c09b9d975ed2783fa95782197a808d45b0c34afd6a08bad6cabdbd64768cb54fc497add8f1601c668dfe94233ac6c0e5efadb359bb8ac682eeb60784ac61a5258f545116786a12b6e7f98da98df29751092d4d3fede2c8d0d6a987896ed2551c627d580c1a0ed57974dea1be073a68236c8fcd816781272ce9fcba36564c1677955cb8f98c0d93be9569714291ca797789bc690f7e62391cff91115670a75cd7ee5acdc128c854b7d6244aa2420053b9ad2377171291198cc6a9d00489aa7c1b01beaba571275e147f7e21383dcf1bb13a32c600904b15f58cce607725d1e65a9e1577870b8dbe2af33aa8089dae295d9804e5b81f2a8ae5076b290ad1f68b9ef9e8f38742059d552c5daeca715ceda64e674191cda4e20aa028adadf783483eb79aa6bd05915cc400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a2599e0a58e7fd333eed70859f66e4f79d634623ac6f4f31af3e2aafe535a5ce39332fb43cb3416e478e5f59de16b23ebdf62241412a6c22c7b811c10af4274b75602414ffe5ff4d8de979e55c637f67c80def3e0d5c97586053824408bdc7b9c29f362c29103f47f1f084fd91e1e0008081e9d18048dfaeca237d3a41313a45ce58fdb6a38ad2e6f51971a7add334201d1ba79318ff4fed94991494253c63e1fa546261e2245e0abf4ca0e784740a0d3a0a9b51a244f92f062f958a5a2c56c18316ff88187b2d356d2845c3c657cd1d60aa51c7812ab56aa2c222aedc5c855b74be9e8c3874b08537dff87ab31116a965ef6282e2d27d988624a0e568f1b8346a97cea14b72b02c681b96a582584704d357c4506e904c75f0e372334541a3a8294004a3375d4a8a01bf3ae7bd118ed6dc4234ffa135e6a6cba24d0ad7f7e91e05f9544fdc6567198adbe09cd7431358cd9ecd9bc576a2afc2f788ef7c65ec307c616e8972ada757cc0de7d38abe21bda2d6d7529947a6482cdb1e5b78c5c2f3ab7dd5d2e961b71e29c43ac791b6edaa11106268aa47c2db1d6d312d0e7aa4372d4befb57a4fb635386a2948f874b328d256a8c394ff5631300b7ef802d0bf8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f2439ba8e7cb7405ae02298b7fc0f973f71a57e3ac746ef413d673dce571fb2a3df7763a49f029143f91cf489bdc1be72bb5f36bce5ca35d7691a3ff978adc024dc83b7ae86600ce9291b5cb9db14454bc50ae7a5dd7e6ef49cd9e082d5e4a88273cd79ad72cc327a5a827d506d8380bcda9dd84fcd5c24edb47b66f0f0148ae70d255c081ddf203415e7e1393311fb3ba4f6cd95d3bbfd9afe51192c5ed3a3726d08ae8de8bb402139aaf216217b24693bd9c2bf61d471cabb49eae8fd104f699b96801562406d68b5fdfc36afa692843b3f3e1045280b8cb0aa22a8f72b63a64ff0c956cc1fa1b191a345ffc1ba983da26c09394be9890a9bcd88641eb9458227da61076ba7dbb5358bb00d32bda63a1aaa45924f5e8c6c359d4389dfd72d2b19fde566405726d886dd173eb1e270be396a5b34499a95c87d75dd0b56033bb16eba6e5868fd86f8b24c2c489c9157192650a23f716c0003270ba25e2826ef54cfea682f7bc1e67876e6145b5c5cf398d921d611ccc5ec144d2815c0e3b84b140bbcc97357cb1c37c7b4a4a900cbb8fede69531b6793683d2d7493e9f9926fb025c1c768d951d7445638c044f069a9564bb803830ed5b7f828f01e61d0b500000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aca67e9a61a14a5d61641ad892176ba639b69cbff2e30fb443a4c431bc8daaba73126945e36e56317d42cd7907cc93f04c1d71e23e49a726b029e53ea41db1c67a1837cb51a000d30874799c052a60d0aab717f28cfe65342f072fc2d65a66fa082b19be543ebc5c9242a0d6bc4dfc2d5457d7fdcc650270c4b15b4c62df2184bd12889f56df46b9b0fef5c4e968d9b465fb5043f92b2afef739932b4600ede13cf00500c7b839fd23c7876b9616438bdea1e0cafcc39ccc05d048de179fde7ff03b593a414333b2cecc2e84280c0d07c7a62c6204024394f33447e5a394df4e6439d8412b3922c18f93fd5330b16dc311d0d460779b7e43aa77b19544918c068e2131b2945fcbdfe0afadc015cd0f96867609b7783ef6967e76f12c29f60301fbe17f53dd2ae09e7e9751a335b3eb23090866eb2fbfdccc9887d844d896502c13989ecd3576ca9736c57aaff540621f9a486dbe408fa72e819052838a0cef90cb0af4b811f08e5af7da6df363485356668cf74c3bbc95e6e35efc7c7727045ef8f7fdfa40b323db0e901747bf00bbf4518cb5097efa617aa7ded16563fdf2655fa8fccecee5308f0a6448e5352099220291026ff2bff9e03b4c0b604e37e8ef0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7f56cdbb6474fb80f12384667e986f459f9e22aecfece358d51d0608b2a02081bd1831c85e801051bf21851356daa3c50f33dbc13549da02357bc263da18e59d61d91dc9e10b467b035ca9daed112beb7b5e216acf0e5b072a544199df9a987f976994de9b08d89928ae6cca15091ed4efaceed95c4e2d8f57c6491536b1650ff9cb5b8a033144ced6b4bbb7ab9b475ea4ca841615eb7bb8bcd81ee2d744eae21b27f77b2a065606469a5ab109a1d33346c7f6e8bf5b99dcde52d57034df898399af7fd618687f007bd61421543029dc9406c2fdd53459ba50003832786733f818cf859353e18fef6729298e143ee38240977edc3b9fbdb63e9471312d1ad5fab5b95a65b9128279fa5d0d45475256317ad0d57a963b4c5e21a740a41ba46bada4d1042baee9aa905f9d62b9d811e51bb4bd8817e0ceeffe5717738907fe31cd36fd7811988fe6e7cb53431d954cf041d19658b552f33a2453973aa0b0ccc5f254595542bdbf694ca65493efc322247ff02e926fcc69953a9b8176c7a7c990cef14c6da45c553d5360a8e4856e58b76935afd365d893fbc16fc1a8e229874e09307d39ca56b723385e24e768175d301b86ae5a7eee5a5107c0a03ff2d7ca5420000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6434fd460370f1d495e12111b86bf91266b6a981139ccfc714455b298e4caf5b99f378a6eb2c770f94534b7ffbd1de777ca1e96de84d62f981e03ad4ccf7ed7cef4cbc854488bb326631f7660d6c5fa67ceb54029e7bbb4c93b5c3db8f4cb9611e15bb8825185ab85d427d34a53c30096417dd6418cb7350953804b7563e033c621213a067ea3d7d759760c9b321a31c6c4f6754658a43b87b8f43b4e968847efc22d4b5a8e279dfddb845bce95b5c726e8efc42edb925a79cb9a9582dad00a5004ae364b43c6e2ceadc29d26851d057feed1e629776a668fbf7ba71ab72264a05eddcf1b11ad22fe9a3c4629a438a42969303146d885deaa067d50faab177e04bf2204306d543bed7437ac5c4d35f63bda35c91f1d6de66513b477dffbed50d2f09d76a774b06f83f3a0be35702dae25a489c77740a4ba836540da7d0d3e69a0109539fdd339cd6ee30da04a451d8ead914a278c40fb1be3dc59c24807af823965fc264a6631217d37aa37d151c6aa5be8622cfd50a205576df3d4c30428174043824573602d5b72beceaa05e9c93bbdeaa4c4cfbf41ed9be3c456afc239cfa248b5fe1994d6c64decb39613016373ae2eb8372e35f8114fbbee7118b89a990000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000268a5dc73cec18fad0c993bc9aec9a9c540ad13eb849fc0fa656002f56046ed8b579d4ff675cdd8e05bea0c4ab03d21ffe84d250797a1aed8f87085bd1e2f00a1905d9f6682919e60112de2ac3f425951c70247ab2f51600bb262a6290db441cd801fc06d2fd2858911c0c9b5d139c849b41e917f921498656f3bb6edafb4de86418ccfa3d75e852168837c7a007c9e52bea9d836fcf1140ef5bd89adb52c826d9c18b0d825357f1d5f20d46c975e3320d0e5d64b8f9ee03914f8bb9f0edbea4db27a19b8664a45015a5162f75cea22ace0c340c1cebaef538ab50fad0d189655fc574da062bf8f991026b172048f9e4dc9a7aab3fba86b3cc4983fcb2b70df0df91748bf1f4b3d512863317c196821c5072c9be82a2cc4f9d97c5600a007e1b598c2d0eadf22b5489de10ea38aceb0ecc47e263e4ad46e47d2b2c5215a2083be75879e801d3c70f4d51548e7894efbdaf1a1bad767f33ada03613bd0d93e16a0d8b379af1e2065640162d9e59196e8e7c0ab9ab88537cda03803136aebaa547b794c4418375fb003a21dc299e373d3df0131a6a4a42bfdd07662b8dc5e268a4f973bc160a85aa8328a41ee0fa4086c7602759885cccf660d7b662a3f3af48c80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095f958bbb25de31b2996a18dee76ba50de28f325ba06c92958eb0dc2b80092920e93f88511ff0e5f7adc15c06a000fb171b90d4e77b9df9b8804b76f2770d052ab373c76dfa883c39596aafd9b7156ad84a081d6b6c36ba91f26c422ad2c2de982675eb1a12c18d4e378bed39d3aaeaa32cd151de950e6208d16c1b14d0ab8025ca000008573f28bd59f8bcd7a5cc7c46d321b40b42476889a91bc0042ead3dfdcab05f7733e10dd3fdb7f8d42281cac9ccb67797b286fe7293dae411e7bdaea22210282d5c62b6ae7ef7b622d0d4f009b1ec1becff80175419d64a59195760478d27720c0f3363de7f741311a82b3cbfa2d4eca14cc1d54da892e711dfe5cc53a21430909dc96df16d4d0a4535e00e7bc2b93e21a584a2beb2a03282057518b621c3aae64afeb1cfca57b56a06bb8fdbc2fb556acd06356e49253fe803f7553dc0029ada8a9bbd832248c181ece3007f5c7bf84f6984cd212658d824e589ad63ff49a1201ecddd33697f4c1373274ca116adb0d3db9482560f24325a1c955ec6f06e57207065ba4e23ca8eeda6427f7035e62873c0950d8cb332ba038b1767ef091d77277d19dc5377ea587662c7aa420ae3d2ad832f7fb2ad9e8505a5f85e00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484008731f638d7cfdf694f45170c999b5e32ae995c15f38f83bb0a93c2de2061d0e016b3367452d47ad9ae78f64270e44bbbd21a54bdfe20cc216f9c7d7548870d81e8a6e5aa4bc1b292761bc4d9fadd37bbeb9e60996e6fb128ab44de1d0ea92dc22c69983bbcb6c1be5d4b8601b1838b061503e258c1acd22cf275d38429316c31f9c9ba6fcb15bd5e671db585eb5c8da778ea213f55f61483a0240710eaab1c805019fbc1dbaf7cec6b50c93c8f8fa9d9ca58246ebf6284d0e0a421f0eb8f5c125cb0ab732d15acfc8736749d37893eb82ef4f432fab8169de090fba88c409451d5aadc669f2cab67303410477690b7cb174ba04c1d0cd92590afcc3046d426b27137b5d62b16d5c6535cce826675fb54783016db9c016093a03552bbbb8e48c0cd96d515400f3aabae80e5218a3b6f21b0d9a8597f76b6285b710dbc8c84d9421074454ef183625fc633c40680b1df43956b8e4bfd7b355dcf33b728ceeadd915d727ff7954a5b480d4a21d67d67ef9b7a6c30a50f0c44dc053479ad55cd3c90b1553c7e44d76cc7374f65dc71a037374f02ca4979a6122607888dc5340c853066e1f2f6e1c61ad725418ec97de913c42d85a10f65ed309ad277004414e391d027e2371faf115b561a0226158baa8be3a6dff4764769dc878b2a6a0f690253c16f46db2964c38bdcb3382190f1b79efd00f5564053c0410c07b30fe0de38b51148ae531ce971eee43c12c5bc21b6ab362637883e02894a853f3cff3b1c6ccee20b2ff2eb9d97268e54c76deb3ed8425d2a0dd8f05e4232a8cd8852f7eaaedb41dcfb8c879a47348b34eb6310d61a8136c1f933600016df65916599458137afe19ba2c87f77ec704850ec3135714b6e01d0fe91ef31c4482649ef02550816b9414c3581635089aecd6898e9d8ee1b09c6df6d4c289f1bd6df9f319ec6194fe090276af0c894a04aa53482b070adc9d4f5d46e9abf274e649e210758e2e2090472c31e46a4631504a8022908139083a396f15d421ec2408b71d4822f264d63c1a0037cb88133de513e544d6dcb149949520477a6ff02979cb938f77e00cc415772feb230edf150e9be028ba4ce44c2f493b2af9cd945b7fbd14a07b83495f69112121080ea7dc564008894d9057b5689377e3f119149e8ba3ce877b9947898e47225fd61396e6441e2f134057b0a39a5cac4d12afdc05ba9760a4d427e938776d107b0bc4c62bade7e0437a416d8a3c531c3e4af8ca1d7216466142de3d2e8ea206f9d04fa8cf3a4b42c0cfd4914f635749bd2e51ac16824d2a5a753a381f11c517c0a287cbd5fb09334c6fd22e864a835fba44e9c6d9ecc556f33a1741a39d3310ce96d45327be292fb82d6a3411a2a0368395e29913e8bbcd3883efc8429e1a24e38e3e0d0fcf7cc8b6467293bba6d339ece61c38df4b0d99fd87db616dba491f5b1faa9c38d3e55e2618cfe9dc7fce6aa738498cd6b07f1cfdbff719015f1a1c9662114890070ef9960d007d4f113c07f9e91f06395e42dea5b31e9938fbc01281fc72fa304f467147a54d5a7e075f50e933b1c3ac4123fa5b05c85f2c6dcd0a22b832f978c6174785d9138c5427f8ea985471d0f85015f344d0e95e191ca5219512daf0a12ee657288a8aba61fdf3f78892283ea6c9488d7da8b2d7e69ecd23ed46c78c12bf3a3800b8da065201c0fa3fcbf48d6a25b9178f1e707313419e2e24aa525f0fdb62e39f9eda7afa75e68dfcf917fede48960d99e7f0f4ee1ca42348d6fd5d75ba36c0fb24dfa470c8d8944b30dd7d09752345b5ffb40f2e18d813992a49ec734e7ea09d5dec5853505e9c3924f615d9a71a84cec99780b16b4728271e85f3c8b1b7e4b4916d0e9d180e355e00946aa146f1a4610dc1fca64b260f149c182748698855126e388c1f2fcc47d896dd559ffb1159ac7f42a041a5130c433418416125b9c3483429869deac1475a497e2998d3dbc1e03d7a25f1821f28560ae66516f04b67efbd3101df7278e28fabafa99b2070295d91883d08ecdb1c30e3b4445ba3e57521b330feca1f5e9a27289762d67b4dfc0877128388bbe52d158c19897801b4bdceaea69f6363732f2212814d3616f331144b41b04b40ea26a0733d4d0d8c797bd25af9f7b5240ce731848805c9a54dfab8eb56ef37053022ec877adc1bc618bf16d6400e8f063529ee222ac2b8533538eade82883e267d01cacf66dd160c611b3cb8067c6c43107633274175e7136ee83da40c3640066f1a4bbe8d11f53a5aef90ad253a69e3030404232799f5593a04cc9ac4a3a8cdef2812c1cadf4b1e9524c80e2e932b58d9d6bf6f81b549d99ea5cccf351ca5df4520c64821654dc93d72d3cb87683877cffbc6f11e49760eb9e86d9170fb2484d0068627ee658e52984d55eed7aca0a5de1c1ddbee26842f9595d93ee1ca9b2b7e1b45cf5533d8fb8875cb4675aa754e3c4351d3f64133762d06a2f0d379a16739190fe3251855d47fe1e8cc3968466f1a48b7979155ca9d8135bac902f644607421188d318bd6222b3e21be496a381bd7b5e29d29bc5da5d57b1452d3dfc8c48a2ddd46f12757718404494cc7bb0b1d5a21e86d47366419dce48ef6bb977beb7d0ede9cc74a55fcf49d5d1d60399a73b0420f7a2c2df07bb6f941ffb8ca948bfc2a544941fff194011efb362b4854859fa690c1f98728e727c0ebeb379744aa7d2e77e8281776a433d26f8c21b1d05569cd8c1fb0ceba76ec73e1a3b2f09753002e674b073c25a13193f1c18e888b18d81d9e38b9d6d9939b132eb7b1bf1c2e6810cfe855347f32b2e32022dcc1af95b7f5888d19ee8fc5214c0317de7e8b9e0f2e2f2e01fd07701090999f56bd95ec9b07cdb1eb767ad4dcd839712f06308d4240160c9a837b07b6f9d342f1396d5ecb3486448d3c383554bf69beeb00ca285ee30fa0b04d67aa99ffe7d5132b4a36e04b7feb24a01c6fe9c7c9601c4228bf16eb0008e5bc64838aca75ab19fc7a059a75e7d61d1f6e57fd96b23f67c5e88d86ac041af4e5f8a1cc35296ea059ff7f2150829ee9cad11f2b0112e9c885e8af87f1223a81cc6cc12c3dcd7b7e949bebf4834b299cb96b5226fbaf9102caf1370cec01d5e8c4393c560d4803d2f3e709f438c882367d1e550047010e6046c7fd72d401c4887842f7cf7726a47562824fbd3c3d1d9e0650c8ee022885c7d07c2a160f022f76c3fcb19c09a1681dc6b94ff434b75ae4d12451f1e4fcae210c96a514592cc1e70580af5d3bc3ef595849fd544020951f525a7d9568f5b7c0c884e906d51f50dbd784b4fd4b1214bf942394ec4220b150eca83a7d79dc1df4088e15935507c57402e65860befc938c251509d011d847f28a90271a7fd9ad8f48b4d9109b00d50f36c541214eef9e7bde1a9d65ec812d14e0398836748af9e553db7fa5e9138fb793d5e31a9d06ffda034f0928fa1e9a092ba7d91decaac2acca39f3cf910580ddab46682082ac813ead2a408f7fef95dc5d484777acec259cdfdac340771f5dd99021fa6601f62cab89a7a81ca7c88c52f0406b5cd1e98077aeb1840ac62985cf153537195c07d4942ffac1ee9ea6e9d37205b6e8f9ecdf6437d6e65e902e662019a92f30b7aafd755004ec8c8a9e6ed7bbcb963886776f04545f1a78a215d3204a2ff663d7d55f7900fad4ae5f9538d415697cb36bfbbfe912e22a51aa1e7a5e1967e3320cceb3a7dbf4cc6aa3687d9b64d92a762c3232ca794f19c18c114e977ddd467343933ef39be1e9370cebeb22af5e6f1dfc3411130cffdef9b1169ae7072c665821e8a9718e804ffaed7210f16e1db29643fe8e7c48fab8cb8c19846177e8f66394e84546c6153c9da0cf8fe69202b08f7e6ed71c18d39801df1a625748f0d50fcbf569db107072dd39fdcdfb1b474c87baac528a9f4432cf901b5dfd3a6c82ff585d6864eb6e34ab9b08027034f86beda7eb2e4cac54e69fbe2817839097b0e230b3558c9a15e8da66fd1bf023c2236962fff621766b6d0d9018874855b2974528166a06c32ba3d7d3c85022a204bb756b9a1fee8432e2ab32171f8b41d24daaccfd2ed791676382e3dc30136d79172651aac1f56aa1c0353a24233fc2ebb63e9a3230d3066b2d92ea75445122958fc132ef087947b9781931086a946d62904f0a070c992f6edbf61bdbde96f5f4fadd27101e26fac43147fa1029c7db38dd70339c3cdb3b40ade9390ea90086b3c428e9a0d318fab58dc0210b77a939db910a3ae9dc7c5f31a0ed48add07b024e96eee4ffabae0e166968c605f5499ef5d0da93c1ee0b460af31b88fab0743320c474a4f68d5f40336265f51b65bd564001cc51b78a932553ef4174b6540d3b0cd022e154282f66b8795a730aa064a5e498f32434b061a7792a65ba021386f264bdca50d3bb8f3a4d1562202b09e247419d600f3aa47375f95d971d5b5bda4c19805b2ed875decb78b6305b08b1dbed90ccadf2d2fcc8ebeb7459f4215b170ecda70cfe546d8b6b76c2269c191a0adde56298358634f9c9fdc16bd6028f02316968b62b9c2e009fd41927a21b13c485a8c15ed64b6e8eee41c6977192caee28eb1166a5a6f96792d8a6c17e27a3e1ec4151abd6551ec8090e5ec47294066e33978cc761e59fcbe689f0f8b4008822e537aeef4dbd5a7b631549ef7e6d8821d0539f4efc052939536642b9b12a433678f960ee68f57e41a6597ff229535e702c483164dfd568e46793baaa0f178502cc18dd8e62cf5cec3d4c9758b5b1cfa090ea93f70567076aeb512e667d058a092b169ecaee801b5566fec5db44c65ef15375488b7d3b6473f4d0868d331c60a063a114598c20d2be6c65db1a965f2dd2d69e7172737f548c53199c778907a582831b24a90372ba036ba51fff526ec635254276f351d6a1f4fdf5400a4e2f53f59772b2501db3ed27cfeef158f78376310f504b531a5b4bb7d9ef34e4852629ade0ad6f7c2217cbdf3d3f564f9fa46b56f86264955dba7eb8c999af018d1edc0645a74f968a742e8afe66f362b268d9298480daa70c6aa9d70199c73b4309f6ce169589f37e82c40ae0ada3df79c2eeca1b1b69b70859e4776d7c98dec4238a107b7437c846ce1945da734d45ba71f5351a2e0315c7fbb9efdcb890541403cf40cea0e5c3ab411f43b2b4c7d8cb8be112a392099a9b5305a1dd34e1b438094e4fecb1627d8f0ea857491e58919a38ce831a0a7068c4c471b687bebcaa3100d40266f2e142acff88f8fafe321c0809bd074c9eeda682572fcdd3a0b32a86095ca3d45b3e9737011c775a093684d7a6a34de3ddfcc54e7d51a71ba8b0fc0627f6328b4bbeccb2041877232cb3deb859853ae88842a358c92d9fbae3fefa6a2237251dd1f53f3164dc97719d0f0bf8aca25a8fe17f842f49355c242a0d20bc11ebb59412b640cbf59f0ad1f84a643b42e5d429431b200028f46c8982bacdb80fb39d95e749bd40df3b0a7a06b4f3e447ad9a4189ecf6588e62213a451aae990042101729b8e43d75b2c883d63356aee484cda962b4508d03b4e91c32b495ec2d6f19ce6570d47ff0ff18f7fd6b3b0e0794c2381a446d7090894a11651cfaad286352eb8880ca13cb16fd41b64766914a07d0f5eb75fa1328df18d9fa38a78c2412cda06d52a4341641b6a7d2d5b9172b5b6807d588470881fde68cc99d34431ad257dfc00f48336c739c04a9ab34ad5bd2510a248eba75ea1853160e2bd03c163d202f3156d338460935bd46bd0f101a33d31f1327385ca791a25ba4626310003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000000e118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000000e0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000000e0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000000e0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000000e29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000000e141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000000e25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000000e12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000000e2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000000e189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000000e1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000000e05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000000e05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000000e14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000000e03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000000e2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000000e1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000000e1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000000e14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000000e2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000000e305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000000e280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000000e223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000000e17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000000e08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000000e2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000000e0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000000e0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000000e172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000000e0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000000e05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000000e137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000000e2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000000e2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000000e2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000000e18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000000e0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000000e204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000000e0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000000e1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000000e28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000000e1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000000e21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000000e0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000000e0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000000e107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000000e2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000000e09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000000e24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000000e03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000000e1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000000e205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000000e25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000000e283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000000e21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000000e094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000000e0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000000e1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000000e2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000000e1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000000e1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000000e304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e7bf0a206d037e49d732e894c36194cafe42e74c34b9f56d059b30500d8293f5301dded1ce65ff51a667aa567199f3b6771fac3f365b1afe616334ea5b79bf8d94c7a8e341ce5bb002a516b0020f1023ed7bf8cb91b2e0f19886e0c4d2fb8ae5a777a18b4af29952685599653029e0059fee2103bef9d19e8a1402fc1d36d19803f78580cea464bfe3610629b2a5fe978a24c33aff31e7daa97d445f55172a2caea16c035ae53b31194cbf8f0ce9caabde089fe446a79fec8e34e24f868f61b2b37dbdea5b93802e073ba80b33cc4ab24bc2067630928c420222cac50c60e59d7750d00753f91345e9449d74b592b6347d8d4375b3a898dc9c3cccc9b55463968d21caef86470cdd16616d6cad743b65b6a3d0750b75c828e524632fe0d0d417e884912b601f7c4e0adb3ec8f88d0544c1239217133befe9cbcc5f16305c450cde2a039d62ba9678e50212db9f2fc99917c39d6f15562cd7da1be697a2766dab4af5f3291b7c454ce34361057c31e09b416480a2e46fc97e90f95dd0e11b3e256a5e63b97bd6f4f4a60714e2e54a8c2b5187f68a486a0c734315cdd53d850648d784a7c9bf990213d19b04df8f3f93cb59b0819bda380721be1bfa20eae10e70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a27d35bbfe8a4c1569237fcbe872496590f79341ce21d328fd36fee3d2da3ebcf1a4782e85047a35eec20b7cd7fd2fb0afa2ffd83afb48d28be7c5759257e83cd85fc1fd5103d9dd46027e61b4f19bcbc306119e1a8727169de5171e86e1fef028a5242b732ca010eb0fd4fca67afe14eca3a398cf303b54770ecfa1a6e973ccb04064b02c2a670bbb8e2b19356632ac044bb9c13ac2b8a062e8e58953bd599fc8e9e5a07472b478e12f54820c9195a764dc6c9ddffbbb24ffd61159b226c9da14084589e423ae938936fe0ee66d84a0f05e75c9a0429b981eeaf53d2ee6bb2db841c97345b184db18f68117eaff6daa03bff16e9fda6492964ef4584719be9eb401845db137134bc76957447f9998612497aa0ccb779a208b82e253c64d907c27050442df1314cd05c499dcd9d698ecf5862070299aa2e7132fa17694013fad2c2d0b08f6ac207046dea186546c15383c3ef003e72db5c5e49eea3bc20c8e55d853dbbc561f16061419598f18c6f9919e4ff91dacd87e618fe27621a3ee9bd27428f94f3491de22a6c304e083b9ddc8204824e4db9ccfd3b1ae5183b4e714f8a28f47ea25a04b4b77feafed237a9132bd618e9a5e89fe12cef1b93d99b920d400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ec536e299b4560747f2cfaa2f45f44146a92425049d082a122c25017b7784f8d805bbba5d0a4fb8f2671b026952873ee58c4d65c1808133653bbf0e4f09a960f952fa8821b8318a4459490b3233c5ccff74d186ded186bd737cc99abacf07169095a0dade22045f79114867f251e3f8d0ae6a1c68088e08a7c8f0efff18169521b69f9fadbb86322c707b722fbc6a3d0a833c263f4de9f7ab201b23c969a092f2c3b9782e93b8b91d2c0364dbeceb1eee7cab5b0c651e61e6669c0668cd98b1983551ffe23a69381fefd1da1e351f20c8b0a309ff8cfe99b20042bf5af8eee6eb18cdb21089f1eda5cc278c73094cb31d7332fb3b26a61e117c15e92a2281cecc662e3d0ad84f06e4ba1cc54480a4a5ced3792cadde18988d103b92cee159400720dcb0098eb4bc6857d84926adde4a94897e0fa67026220329a2d0d14b2fbd6f4a6ed2a5f468b63c92cf589d1a5cc4abdebefe95239f0251cafc1b5556ee643bf6a27df8a16f12f837c7af179fe7d17df9024203b9f9670c70a07a176ee147796df1ce13e81317a457925e87d7f0b7432922032afa70488ec1786250a81fbee73775d8c1ad13e43c1c1f0655079fc80ba3b04de2a49b2ec0dfeeb12b5d056d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e7f3973e81d8311a92562ac64032208783862267d23e16c5add064472db30ce31af7610f6ecd2edf460674f20f68e50819375d15a33caa42263559e3f9dea6c34f394a4ac5e1480f41aea42ba3a26ce5006c08af2dea74150c1e455f8779cf1f11c2526ecbd117849a42538848b55b807873a47cec57c6db92a1f12cd65cb70ef7e58c2d0973dd91732d7c0d4555733e2373fab89813ff89329436a6df0e793f9daabd1e69a5fea87570926be754f86cdafb7fa6ca37acc2a2b94491fe25fc6cf677599a4970ed4b7c0b699b12b0609635a17ecc2f448324b0763534e1d4632f77a985b550b5db2d4e83fd29175fa0e8764e3f2f2140ce9401ace76e9b7035105b8e3ac0a79f2bdc7ca2fad991e167dcc057c72ed4e508c9b5746250471b4c0d6cb56a50500b392160738ff824ebd6a4473abb89c12a302dce856cc8c6967766530fc8ba2f9046c0ed5c0bbf7d81074cd6cafafde301941fd16cbb9ec4ecd00113b52bd2711c18fee20be056410e87edd67a66027de7059d5e71edd21d957e4a049ae489eb21750ff3f8d220c6d07a34d29626928561c75133a773f07a0610776647f1b715dee71897c286c207835b971a28f5b91f83ec17d3333640af9560000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3b8f03bfcea4512f56aa2f06c129f8b5c4c78179f9329cb4f77b4f28d486f53851ce88ab3fd5860f96d8ead0034a7ab04248e6e36d18f3058a7a9607abd8027cd69835150b0ad2890912b1c1fea632898c23575274240b0f9ce46d41c76da0874558e4bb45fcaea3e3af21c359d1842f8fe5ae7ac11f5e9445c7497ebdab7896e7853366e46803da2057423bf01548b64943827b5078f1bd375881c1b12bb9fef486b4b3832c1489e1c7a2f28fb81292a654fdae6a7a488641f15933f7fb8b8511fc59285d53f8769e2f0d54d2650f2d30735e7c1654aa9baf7dffb0a677f74556a30390d04c57773b2cf4212ac10f98f50e03ac557948779c69339c3f7bc1f02a3ec6e362f9692cbba3537cdc4875b6d9066f2df129e44935898bba6780829cbe1c2d61a48252f7381a2de0c01beab628e0fb7fab75364ca8d26cfc5bb506ad74b7c64e1638c93873014c59c09ba9bcf2cb488f017350fca01e9dd3cc874b85eee5468eca661aae9828dd4a9d2d833bca1e89c966c07ec2932470478323c0d1114f0294b0b773767ed81ea2050ef7ae914fd19fc98150e6eb96319795af3e8ca8c4bb07603f76cc807cbd7d4dc9f7677515e2fd48e7242a0fc9caeda15e6be0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036f716606e88da877cac3a0b53c3c8c109c3abf79d3cfa2c70ce61f669d1d455117530aaa5accbe11fb6d0b0a997d0f0125962db0a0c50c18f971c3ee186ac938f95805da576b17b592726f6afdfb4ded5516870a65ffe993aa8b0a94ee89f5fe42d00fb29962b16c2ba6696cf8efb9f60129baa1908775ebada39731e01e6a9c74c02e77265081ef010666526a3cc187dd47c74a72b7e8138a4e87f5ac20a0cd866ae8b2e7da2ec500462c63140ed30d34dc8a09d2db9cefc578f24b7554ff60ab9e4bbc876e777d8b6197a1cebbd25890d3d99be7330e470a6d54f78a0c544f8e3abbed7aad966d15bf26d8ecd3f5caa7e46b808c9ffafaf0f520217008869fa7d6f6bb02cf151d7ea83c582aaf752c27843591f4d8882e9bbcf26eac2edf7ea8b8a020e5fb1d85b82c3303abec42abb2b2e9d4b5f90b927105da359c008df50cd967511f9f80d20ecc433a5533901825d33e2cfa8e8a6cb15a1d809e7d17021835180c9294e9691365905733ed361f8dadcf9a1ab3056353b9fff8c64a74ee478e822f732e51c452512a4f75f88aedd76f0e07daa93ca7879afac6d5edbab42b2f917a3858eef2f4ccbb20f201a17d75c5b4aeaecbfbcf295a9cb3783f820000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000820267389b0a18aba7295fb58666563924a1f7ddec9928325cb6785a8dfa2ea1de2f6e13e4cc52ca62f4518cdac30b42df3f9167b90090750397181835e2fcbd130647d8d3536f629716cbdccd6090ff99e3d07a12f4f71266ecd0fbb7942d1a2de2499c9a99ac12a0b62a2d964c71046ce59272a295b7c6e2e710754bad0873b13d80095b3ea7aaab6053844ffc7d671e05759ecf113ef603ad5dabcaaf1d11a5bb94f7af025fe0e9c3edb6b530693e4e797cb01d1defd58addeca02e618c118cf3f7b8563149034343c28c3f5d8eefb59a4cb15c83c9d95919b43d5986e87cfaa20761909f893c3e44888749ace631ee11ca74385a8a11d61c0c93dbed82332daaea3975a5ebe1c223cff6377ea29a6fda3e7dafecaad6c6efbceb7bfb499e862675aa5d8efc727d29523078de955514c6c667d6cbc78cd8edf2d2df0202b7e6cfff1ebc335a8c0b6da46c1b886e950476b95d9a82204872366480cc4a2b322dce52dd402dc5b999c069bd23dacef11a4b5fda47753218e2a7a499d60db3992dc5eed122872c019a016e92d8fa4352a739453dbd531bcc34830ff1376f665a6a99a75c4464f97b26f009177711a5f03632751610ab0a6354a380ffc0d0ae590000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000817aaff23e1a23e16570872a89ed4fe9fe7f2cacd693b95001a9c38f969decd9405e4f55660d8ce60d87e75118a3d80ae69cb9a628a7986eaad7f121a30696eeb43ede7175f928bd4682fac76cc74ab1ab12aa1ac76a3e11dea5e5cd1f0d08c306f5472d4e5b4c9495c3daf8786ed391ba393ca6a530c1c6db034896171e6e93278c8e808729a785f7818f3f8122874f914aa37ecb468150e3677b1649bfa13c830c77835cf564810371a4f9915fa6facd0bc7fd242028f60a57f78ef102c266d589edc553b7cd80147698601ea630c8022efad5f6618b20858bead8201a677adcc4a4d6d18f11a6d88ff1d73587c1079f1fc4d68756712892d471776fa7442f31ad43b4cf1c4e9b3e1b0dbab45c4ecf02269a6935b696ad5b7afbf4a74f94a54992625fae006c21b77a8618e625b6468f0b0aed92b6dc4d1632f6b89ab2ac7f1714379f94e1793dca5c53e58017c4ba495b2709c4373d1927df7e6c6862fcb3cf31c9b83832fdf3182153c7d93bd3035f6c6c1df0d6a018e62155b9aa30bae4fe5a7e1e1665a8c6f54be40452bf5939ccbcbe9b2d5424240aacb018e9e42d8404d347af52da69e09ef9e1d4512fd71620c9b54aac1c9a943c7223acfb7d9f240000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000269f17af33a5bba1e7211cbb82cb38be028cb7d4168992a7a97d0185030c4984f8d409fa2f3df0d261c87c0bbe6b4bde6078045a4adbd8570338ff362f724a6711a3de9f60723dc1616a696d0d7878731df86f4590a59034b4cd41b872ad2350109910fb3e5c231073272ca41fe95c95e78d484172b79a56210846582cd73c72f7fea9d1a7518ce5690887aee32ce08d0e53327011615f81be1f9589567d9187cd7c11af97e2af4dfe1dde50b5ffe38289fdba37636de90cd127e723ee5994d03f917af2f1dd766b185d303ec085ce5b5512143ccc538d2e1e71012a9d687143009f5f458971e7a9d1abddca89f88e0c030f99ce24e55618af23fedbdfa81d1587b44c3b9b00033a0d187fe4bf7fbe32c5d8f95f0e33392343fbffdbe84e2e776b511427478a01b6f8218b4c6e33e8269b5e0afb8801536bb6a98205cb1767ec958a766861cef96888e97e0c76e1c89e96b6fc738530b00cf925f7e6ec8a36b383513cefbec9c21972286a6b041424d7bfbb31d4a7f47364e45a0e5264ae1014adcdd68ae82ed1f39cd39c7ca2226124762ee82aa21b256c56e535e0cb88bfb1cf99937d7fdae32f1536ae9a4a04e2029ed1db24c036fd1405994325a26960d00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6b06b2d9158ecc0448b3e509f6506bfb9b3fc2f5be6722a1ca3e2158815d3e1e562c5310869ace6d6449d276c4c094e3d2527f4b7c3a17d5dd387909e36c342c21e03e4a766cce92a6d2b5ece3333a1a65f14ad9c6e62c2d3fd4eac34fce5bd492d3ddf66c755a2fd5a2a9542f95ab0210bbde0ba323f46173c1272e8fe569f57faad918c7fd3efee37ad569887acafe09050006e2f5e8d2272f94e49093f2c92133a6c7c482490bf718b478f24cc477e6616e96454cd2ec3b0b458a1c8523137439c3a16a4a091a179d10f58909f9a82844382629c162ba9665367ec521b12fb012cd45095cb97408e386f5eae0366787d775b5ccaa056e81b075d1a8a03b9b624ec0977d9f8d880a1183ce9a0817c3de91bd6b7081d5cfd0f59aa4a8c83890d493f41c7ca3881530ac22cd051b29c63ad57d159c5bd72a71b12ebe3d82cf8c41ee36f41fc78d1a42d9e8738b0fabc40850225f1d4d56d5ceb7d339804bda1c3112f5e43a123db3a5760c38dea00310c6c029e0261c1184ed6d917e8e742a67bb8b0e19304e881ea0a7ed8a289dfd283b69b900705eaf0285cf36a8308324e70f0db5f6e3418fec146476a81631c7d30216012bca04828850d8ba5a2c983010000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131fe498e8119703018f1604a13075eb26114923c0a51d4542a98244c63aebedc354cd2459207a0075e2ef8425d35ef2c460cc0f3feef2abf6e13c6ee219751c7fb859cd0a5275239180ba75cb068ea80b89976ac944bf7fb01dffc84044889be514da915718c563da3be09eaaf42d9e036a2f46cd5b57d0876bf7edd34982f546c44ea6a6f919aae2261a48c7f7c01d6cd4d4dfbf09ac75cedd65f5e4dbc0493585567eaa9b52a8f1f16f0c17afbf6799cfc616faf5f7077f0b97d4605d78fd507379294ffe50c2282eb24c3c0fb8a7e671ca73da888ecfde7b094270ba266cb313c16772e7ce3c7f4ca70a14e4d29835630cb5f375fa805f12b1fa00dcfe4b09456d607bcd579099b28adf4b2ea37ee9e8d1c00659f109d27d0258cdabfb44a9ad90b9bd6541622e8b7054da7f982126f298b3eefba4bdba66bbfed04d76f3ab2413bf641a00a2fc330326bba928b8068824f0934b6f60e79c59459d76d490b1ef8408a1478b3b2717de78438385585917665799d6282ecc6213be31f8bcdca9f050f8769a74085cbb0be5f0c8effc3ddf54398fccddb8ac070c802a056ff515293144159918adcda68850d52d318ed10a67eda09ec3053304bbbc1f4aae1500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c806d90c4794f87e1622897c5967cd86511986a692a253c8f5a889b288cd7f7b0e4028f503986e31a847f0488100e557b87ea5fd4607a63987d57f3424bbb5d63993df62c81aba4ed5f7c5da05d02709d389072b137e975af7ae03a4607f84f3dc3b3a6726995906da44277702054ce1f35a579abe108056361ed8833a7ddc99a79526ba50f11e6bce17999466d324ea8a3a366b03df9ac9d1ebfed19048edf7ebe29dcad603749e10a63ffb09a5da391808a968e943e9818de0fad704f78f5605840cdc1754b25e4b94e84450a8d7bcd34c67a1fd841ab66d806d2815c539b9878cb33f04b6e1448476c103326ee47f002d46b3fb53e4725f99c4712854201c6b5900be71bd08731b044956d0ae34e284970b865708fc45d8d64cf127796946a9960fb0352a570aa986c133e9f994a1f1878efce0b4edd5ee18bb9fdc1c0b7632d7e15a6c20feaab7542d58faef56d24acc29ad3d12afb6d8a86b65ea35755376b44d465b98800f11551b7198d5ee75fe6bc15a26c44721e2e023646ef255fd6f9d1cf8b3b610836f374a9827c3d7acb78898774fa837abcb9c47c08c4ee2128a7868329af8740fa05a3a59eb206883ef12eb52024c915d38f9ee6496053130000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000826356cb7eda335cbc4342281a49003ca6b5d5cdfa16f6e88907bcad6a8ebbdf0d5daed3512090576369e0139880cc9536bdad0567115adda46cf1b42f4ed80319769d23615b54c31253d4f0b33d1098a67ad8845abb2d1d921d61ea6af2f77a32100e086baa44bf7aab36ffa4cc7bcaf4bc8c7eba1f1dfcbafa11903cb2eb0dac0e037d91328466d7d1180c17423d172b03e45b8d710f879c8582b7c99fd3c0ae437a511af1959ab9550924cf997b8b66ef343a76278fdc6445196effa4daa6cd19369cb6ee1bb03109528ceeb32cd8198df627bb568a29ecac87da39f7f6937a9e48ff7cb8e5402be771fd6476e274c97e718d3ef35175588eb7956aebb83216a9bb8d1208af5df863453dc571b47a9a6833fc30b07738bdcfceabbc7d69edc2a3872b73e6258f037585575bdfd8cb205c72f151bccdc1d25c1de849ba9091ec35bcb6ac3a93f64bc76abbedbbe74076d339675ddc517d8185d87bda2203493da7db2ab85d62927483f541f8251ca610155223bcb8761515f3828bfab52fed945af517a03eab9139f3638197c14f9ca68dbdd8bbfe47f29abae1fb92f328f185938b498a52ef16a58de23ddd303424a66c1f6d733a9fb04b85413c675ac53b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c66a19d319b29bd9d0f66d1687499e5b6a9399b53bc860669ef08e5c425e31ad9c7ab1e39c94f2e40d452f2c68fd715b11527a216c24bf7589917747eca43658495c3e4b4453b52f7a46551f160b0deae86946f69e543d5b27e5c410ff8fc6d4cbe191d985a558e591ecc597dfae0dfa6263e4a7bef0a771b4229d5fc537f19a20f19470d13951dedb3f58eb1436ca53f790731fe4696d605936bc40d989c5e0acb2684ff7883cc2a8221a6e6d4e7b1e7a5c5442c015229586e3c42b1efb3d997f5b75b8ce818e1dfbefd52014b7e82f13670f5e65ab256e90560f94afe671a4cc5b0f3c8bc3cad0c579bb0ca04aa428f2c0bbd57dbc4b4be626ea0e30c5fac2fa9c4e70db900edcc35e87cb0fec0d110935d127add1bfcff5317eff8e7540ba2bbf531ca8c727345b6167a08dbec1180e0e95b0f4cd09e644700c21e1044f5c958653745affedb60cff6d6b038b6012eb9cc0a716c0506eb7a38cd519cdc1e5569a6e052b8a7c07f88e4be712c9fb3166006bbfd4e2d47252ec9de7f0b05ebb86cff7027a4db2913ab51e84939e754149e633324cacaffc65b9a61569e61f7b80c90559b597baccbc5710e1321cd1ab26b619d2fa86643c8354b7d8a2abfce00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000daf17e8bb0d6cc342ecbf84fde032d3191befe72e898fe43bc89c75a6ef6e3b0ccbf0f8e85cceebf213eff7a15e2ac318829a27c646c22750df8cd56efeb66c3f293400bf689d06205a2ab1df733445ecc94e8e17ebc01b4361a21a731e0a0700c8c536d3268ca67c8ec9130c628d1d6673fceea7e2a6834cb3faa68965afe1a97e20b6f5cc109f66bc81218f4c5b55264860b75ca445c9bb7798cbddfd5e98d6d0c81302c9e3d28cf996fea800a280bf548dd093f5acf0c3c586de6f8fb0b3e43755d94aadda589088872e839b51b193a93971b0658bafdb851937a2a1082368e3895f062481f56b11f1e1d4a5197c11741aa7ab3a484895f9e6033df16d47eba1fc80e9e2dab4747afc42f9b82e78292643445bcb76798e496d4080c99e0f61e0efc8eb33588830766f5f58d9ffd179efe5f087ea8daef54b8e812c3bf7720564655ceddc4ad2f6e3539cf637acb48a2134e2f944cf58a5fb8afa5f7e78a6457bbf1b279d9b626672a86366487cba840d18bc2ea7691491132d3a51f5a14c8a98b8211526f31ae340c413c74f9c97681208920982dc47c10a7bf6f64e6fdaa58c3c68290baa665d86d78762a06d4e119c5ec29ab31278b00d2218855b96f3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ca84415bbfdb3fefa4e14df9e03f23444a95c1f51197b09a369074bf92763bc93ac0fa77dedb1ac80136f839085f7af538659090bd2ce5dbd5960674eb1c4055c55c3704f57af6d332700204a8e55454f7d423facd1a1350828d74b89b82effdb8390e7da2644dfe75dee94f717a8cdd03a702e2677316d2a2de22a15c9d8af86bb4b4dfb227fac9f1e0c5cb349164d91ace7f356e313c79020eea3202f2fb3db8a398b8ba480314e8ffd850d13bddf4ac1c2d74aea6896970d4f84bacb212362f88e02f4d57db9be1268a203a86cacc390891dd053d755e35b4e248e6e434299dd380712c46b0397bfb4bb440b97ab1b0bc0b464e756aa9524630bcba01851c72de9fd2090d88c9f633b06d8cdea48c5cd2083ade4402b80c79f9b880ef857edf0af1dcc6d245df023f10713ccc525677de51b4301a6cd748a85944c40be23c6e85a3ac460bd7b28433baad744732e0efe54903d69340d6444a5d8424fcdaac58e34fa8a01546c81b50ba1f02110d3ebe1b2fb9bd0bace408b912e3794d01419fc4f913ef6c347dac5051ff1e6590600362fbe5a598d91201a846a566074fd6e1656fc2b807e884adcaad2b7b2c8a9985eac612206d96b6f7898141783e00000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091b90521a01c9ff4bbc490d8f7d17328dc21c07091a4ad219e59b1ab8b5e6e39cedff2af25b7fd0369ff88dc9b55a5665b2bd4fafafcf96c79584c771b0e441c9b4a05c48ec82c9607dae171e3a2b39dccc243c66a690c099aeccbe544332bb06248d2f23b6be247bdb7f00b25b8d085e5ab63ad1fcd0652ce39e23ac39d3248c0d0f37415a6cd53acbca3a30afc9e8d5c151a64d9762aba3623a772fb4a709f6fe9e679ca52cdcaa9e5ad557218d09d9b0a4a1376dfddeb33ba1b46f652413278b0f8079de132a554f5790880f8879b7255237ce27e6519de7d3bc856f2d465459852c98fa88eabf2079147fba87e308620c4084c6a8ebeebe4917314dc70f255031efebec90da9ee5b07065401ba8562c7c4a932dc0216c0724b38ed5ac8d7c7681206bfe75ebdd3558e4bff41824aca3c440eeb08cafa519f8e8feca1ef3e09e4244afe2a844cf4277f884facb05059fd5b413d531313524571359b399c8377a85f82c682e6c7f95cd9db630596eafe479624fa8b297b4f00de8e2ad9565541bdfcf72f017d7f3e34ca7ecae9d595b37982aed1418a12cd0057c85cca7b13434a15562624f6e7d372699f26e8797cc599087e3783778acaf88235e6d5e10000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008aa6c3ff12620b92eeb01befd0cb1b514a7c9454dea6ef1c1c28c4f557843dd3eeea330584f3ab3160c9382a0aa7b0cbe48bd4cc38d74f5760f36aaf67a43087bc368f9051eb294600d8742c447cba600463a12be6f9da7895f9eceb3f35948514400fab8a0b6d66cb138680dd4e0a54fb3a8e5b21e2b7dea8ef790ca40ad226c9f410d1b70e07511c47602ffd1b349296aadf8757420c1037763603aef0e64346b7f060d6368f62f67aad3af583ae584e3452a0afada1a2dcb171990343253871c9ef745d01b84b8d10e464298102dfd8a84bc9a598fc2cbc57e216f759c7aa73f0d73fbc4a6833739123db3faa7b0f80c031663edae7b64eda41405459969e05cd347966cde692d4e1fb655821b056994e984c668701d036877af4a4b5d891d61bddb11cbe332334e46cc5db34e5a5599dcb72585b3ca13672d84de54868045d6e6be77ae2b99819c43627846897de45e0437a0c5c15318e1496430e093ff21aedfd91c0d88156ab68fae735ac5392c863e8a67d0cc6b04bc3751bf64d632f8c7376d637ce33acf6be65b59c693e49960a40d37c5e4abbff50c349c213684e2d1b478cbaac40e6099611d5a364c2b563ee16b42f4526074420d7162bdaca5f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa4897f0b5e56748e1d3d92bdbadc4fbd7538d2f4200a2a7286edb09c19207427016b6af5143cc0fcce11647f17d4243a94919207cfa896ca0b45e4aa4d5db05f7ccea0ee72df72019a24aeaa01ae1d433bb0d38a894584d277622c4a9102bae27f592e5e4e7eaf4216dd03cf1c4117da5a5999e46fb36022f8862d10f5bc547b01281d69161e71b4ebd51d79ef0dcb1559698c4d4da4bb6ed54187b755f2757908f2743b79b9cd9a3726ecd1d0b7482b5d2a68299d434d45bf2ffc48d0c3ce31b510fc62a1c7df676d2ae33fe91354019260cdf71e41add50f56b8d4c2ba1e0a8d736f30e7da695a28a45062631b98fdafae15e4d6043153037db1713b4d88fe1ffe3a5be63660b2f426dc2c190e31ba5fb53d3bfc837ae6c7a668e2ad5d17ec1180ba477edf8deb91997144d84e5ad09742ff41e8ed87cee35f99af938b6e0745c09afe58b44d424b6b440b14421aaa060da7be60522a0db40932c95c0d989de58c232f9fe0718809e6f8a4851ec2657a8d950ae381ef795ef1326c38c168bf30bb5ffbc9af33541999098cdc4b1a417d66f8217d5abc6d0cbf962e170533c14cacb6f8cb5a9c236f6f7f4f79773289a330229e3a74b05b604eb5d9ab2d87500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b4d7c873a8942baa567566c036832370f5ceefef3e21070c2d866807c050334ac695de8f23a7e61ff9ec01b34ad7ba9e0d521e51dc7d8c97f06955c9c2cf11a76547e700445eaeb2efda59e40fef3804783c43e87991b83f6b382f29f016d194d2a861ae02814490f4dec65951b0a3532b3771288d367542c99b4c11adebb8f432b3928f27db5954bad3970cd9eefc8716b8b116e93b45d25221186221f97372bb84d7721a43a15798e83af4778097b25c6fd4e76e4e4ef906160b5238a30686030dfffabf7b378d0ddcf76782f0c2d0ce7edd30ced7aebd8b46d92f5bd964752ab0740bea917a2b0d3b935f4e4853dbecada85b280886091a56d889263178b219658be2206b92b74e9aca67872b7bcb3a7e2334bb5bd20804a41deee1ea523f7bf5d4f08db1bd2eac24f73d646cc1febbd8b7b09491db8376b773f4cfdaca4aec45411d056e483f0bdbcb63f2e67ec8cff6972ed77a3d1a7a48f644e0439a2292922c6ec72eb32c26e571337ea478ac675d081a4b14131bf20ae8ba5ab7c46f3422d692f7c4b591f1aa0ef14cd5cefcabe45309561a422a32a4b99ea8ad8e37b07c58fc28011287d0890d0a5ad1468b3b1ad2cb2336adce43938122b0b3add000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090250fb844eba306ce4e2ccd9d1c34e519075760f620276a85d2c48b613f24c31ea6f4c85786f1df3b8d90ac36662d38571fa769f574fef9335bf536fdde5b12e4e6d0d2e21eb47be136c65c0c7a0256a29c136251fbedaf82c77fa3c54f6a38a16663ac257f50e2f52e66ed8d0960921ba005d6bca16a0290ac20c17bcc42309e8632962553da60e570a9d403a4253dca99bca9675836415eebac638965a29312f5288a76f214a6d24e67b3a6c25322c75f372694c4b2e3c26755a253d87548fc8627e48a2cda64e13b06ade22b9fc09e6e5c981dc4488931ab59dd621482b1434f5fb56c08df08bf6d06f0d911a757a44a4ca4fe4357bcdce71efee99983420a4b6302b73d97e9c420bb150c4da587fa324a4ded1f82eb392ddfd35ca1dc2ae6ffb93a0a1793a3460a50b1f06c6ae6412ba99787e5307fe5f4eae070efb9e307f973e42880a2a0aaa035a3c824942346802a434ec1e57b4bbd58127509c8d617f7de557aa24561271056df164e1ed70b82fecc90b9b99dd55f13e6d635d3cde3854a7d0c9d5d75b4e32db0d69e0ddbdf989ff80b99cee57d8b197ab353495f22561dfb697698398972d2296c5251fb7cd6ae6460f63477766ea1aeab02eb3f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e46ffa79e79d1cd6621d0092526c13b14daaa8e94475cb4b8ab5cbfb6d46361bacd000fedd25f3b2a602a045be8794322ed84fa548b2292e6cc7d0be969a331c36dafaf80bc50e5998eadada71f428f1a70add165da19baf55513e83f85e4892828759807c60a6b8251cffc501aa2c139b592b2911f3e35f9285cff9296c39c5cb92a1a3afa5d26b00a7d977049fbdadd40d3588ab6d0eb8dd47fe96e39e9a7eedad3e4c1f488e74ba93418e1860c5712be4cf27984fc56edb8f27c3d9dd4bdf8b6e1586d59f11356684fa839d171f193c1d9e021983b738544a1d444191e1d0f5d526456cf127e8773d4f261f3fd540a738710bea086d48739bb524c5542884f0867ce0bd1062a1c1a6c5f2575463a4457d2b64e8f4ad7497fb0eb792aedf7f7a2647fdb38e548ac37d95463340513295cc9f6618277d4f34e846b1af7a3c31650fcb34452869da5a8f2170e94a7f1001103a74d00f4eb5dcbb28f34105ee52f07c9958e4312d4243068a4f9a7a96d5bb2fba5c42a817e86a98f765380fe9831b63ec7e27b4898492f4f77371244b1f40bf6c8c7899f059705300533fe184102493ea9a1446a2ef8c5826a8163e09bd279714f1b6bdf70ef0c99f621d07e900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e7d600862d6b93f85e3e14f29b1130985bb9d667f9f689f7040ab44684ab5729f9a550cd4614c01cad995401121c721d4bf8ebed85d4ddf0a1ebb1cd486f29ec83342812ace8f6c69e7faeb3c0e5ba774f9f75e43fadad44c0b5a86013ba8f6556b6ffd21528b0390a5b5e1827219af3882a971a881d0fc5670c93ecd8682465071999ddb49cdc59492dd574a487509e93d3274322ae7d150e209531b4acbedf0fb1edaf6c6f1e11323b171f6895bf6b18ee7182d489179b122cd498aebe78a3349e4e77b8cdc0de6be65faf14b40b0e676e1a2ec50a7ff40e785910cdbcd5467c1d498deb9ec5607c14b746e597f7f311fd262bc4e4db46a709cee93d4866ebe508170e92fd9bde0b1957716d3b481ed8dfb7d97e00b45d040b6b99f621c539fe77381292ec7d2892f35aa6f8852af999cc451cc1e7e2d029a9decb00c5d415794e8629d28558741e09d11a4377059482b1c4701df71bc6479f63e22e67c6aba58ed0a61ff1e2b254359dac9d75226a5bf4184fc2561a5f4b317a5cacb0de1df85346348d67833262d69947cae25c497e459fef34ec118ad86506191f51f7cf6b6f4ed2351e851b9126fb8355ef9bda5e36c7be65e9edb6eacf0a721b0a5ab00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c54cb66df8d19700241e03a6169ca9ff732711fd66d415aa01ffc4efc209a0b0877fd926a3a6986bcc063e1f01c35e78277f18c4e60d812415108168fdf547a4e9b27ae7bc44520d57b3ef6c203b6a996ee064d69f8d79e0ebdb80efb0457270c31388d32a05e9fa58dbf7b36ec2fe50c32838770aab4b461958cb980a673643305d3baa57abdb8ef092b312770873c0ac7f362ed974e34d9575978ecf893f08779617f352216276a304a2f9f3e363b340959d5c7d3f63c9e7222825aadb00edb82ba61c7a633d5dd61e89fe90c6becd3ef972b1df51fb70e076fa57a5aacc87792f9090b218793cb6d9aa8680fa230fb9157e238834376c042d2d51e2ce9ed5339c1f40346c845080d743e133e0f2c0b2dd42870641f1d400212d9ca42bbc4a1a40eddb00b75b83d7760430c23ddf61f3fd9f91c7f1eccaab3ede6c3914877869a096a38bbc96be40126024e7145a7855b4f20ed8432f9655e3656f8bef659dfea32760c16fa6e8b2534fa61b1294e22787432111957a13fead14f237bab6cf7e2363ddcb1dc5dfbf12e5f73655a4755546072ef9f881ee8cbb737bbec48ff27853d4660c760ddf1a13ab712048413845f44ee3d93b6bf694d29bfdab0e04d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016659c353db4095a3a6d0726f74ecb82fe400721c413457ab8e82449b0c76fcacf7ba1816aa5ff8398b1e64c1bcbc9a59a5b4d442fdb48fd33a0435f006a46feec4e47091cfc4f7baabb3484657dccc4226bc21f793e50ec07a35172e497827710936382a638f27e68a2f932b3f3a5f138af274b0bc0176f3de3dca84193a8d0415278a8aed35af1a4be114082064d1c743416893451a6e31ee03edef40ecdd0405e60c9b87628858e4527128fb7460379d1b72a9417e2a2d9921d6a741e92a87f39926294e5ee6622c7cef67948d3bf065a0ad0d24fe81600922a23e5453064e33dffbdaa30061a475962bbb4e656d1e97d53bffa8759d97a5abc8e8f4566fe6fa31e5d668ec64ac01a9c4278088152981b996a79db7196c434a093d108c6422906428fa7d3dc47d1e36ced1e5a81d4f4da25c70e79aafd983e1d5252a8395db77638a1a62e0a8061618757e50d436b983e529aa7510b599803ec7b1045aff1d0b159936ecf4e61c5d2ad3cfb5c2a0852f2e8b7e1e7e4e89e4d991107938acb090451f3cfd83435c4f5b287c9a8346f1fffd061173379d8a432e033d3f66b06ea2f94b69266b4c010da1c495385e33a04dff09c388548eceaacdba659ae611b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cb6359ea6043997a028af0c1fe7f5be97eeafcbae44c734562d1e87645a89f0e61543a4e50133586d366e707d978467a80cc9e93f3918eda9dd865d8a3cc00015a95e0be852b9ed0048e4239e1527c12d7df52e5118f9b1626606f7baa5f64a601b4555c5df390aafa21d891cbc7270a542d5b96c307366224d11648dafbb5970b2624733f5bca95e46684989065e97db49c521bebe689e045757f949842a69e8f5bf4bf23812329eee076da51f0226e9d3971da4554e0036da3e224c034d14ef2e7a9bf80a7573f1b6f73abe28e1e51b4e44f5e4542273f91abb4b36c6588891f692ed9df7e2e11712292faabef7e2312c54b0711ffc36d5d0492cba496910195ad18a545ae19a65cf4929b9e77a2f2ece98d4406b49692babf67f3e55914baa60e828b2ff1054b24842dae0f5d2af76d5a747845775be03535980bee9f16bb2f5234c89adf7d068187e56a35e2d143c57d8aaadd1840d2e16a61212af939ccde246c955e3b7e039641238fa16b6a34fea4e75125147aa7f5aee7b5424c6009e5ff7a0963b05add15525ab55bdd940072c2f70926e0b772fd22e463128849f717c01361c1496aa2878d110349d92541c7b72578dd79b74b2000d65ce7b51b000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b011dbd2dcbb29203ad63b91c9ae8f5db29ea90f7cd47b8241697533ab8371659cfeb744a7922ce5206da96caeffa07b04b3942cb4679d20200a803cbc0b9ad18e27891025d1ab8e64ec117b2b5a226e85f70cc22ab1404dae24c43d9e012aaf554692578d61ded5edf777f7431bfe2b4cb59f37b1f501f2d98aa3a8f8df198b06ec1b6df41e4a8adb99ae9dfabf82a8448fdb5f44054f630d787eabc1b0500e0c83439f970877b76893e62564f539a93fcd98b489b95fc57fd1141e04c317ed63e429b4f0c8762794ddc881a3ac98bd512f151ada3a666bf8d0012f45e58cb71587a1443ea41bb62b2d0e775561e7ee8892ff02c1944076638ae7b1c637a235a2d2fe0f276caa4fbb74ab852977ada9d2eb87b0556734536d058ebed8a651d21bbb9d9240467ae499d2421edca252521ce119091cfefe957ecac95468b2278b516ff6e7ad1d6e8065732de6854a943768e0ceff0edb273cac978b9fed687fca642831eb9e46c3bd16c33bd15ed39a2252581f23ddf57c69c6a3a7b4665fe9cb443a36a60d07eda7ee854e7e358e6230ad7d960acb2f09f8a2d4aaa50a6898a68da0a9151fb0548312d2b448ad5bea9cd5af41b8dd512d0c09f2fa7bc6d0560000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090fc9b0ae8adae5861c349ff41f0fa0cd00a19e5c9ff15683345b90aa5d8bfb7e68d84c7e590f66b0e741457e3f4e394b074ad66a83d8723dbf13aaca594e939037119aed97ea212e4cc17e49cc7af540cf8f2effecb411cdd04afc521b043707a30bc5db66382a1c0e9487a808e48f12e4be2d4b46c81f5477e7a49d08eb784110b99b0926b87e6cd2abcc37adcd6fef359e45e7e964191f0df2aac64b5a14a36f60ff3bb93d0c618d7f0ab61fcd57a886cbf713041ea05f2be67a14be6b25cc17809ef6ffaeca31bb889e097e6420bdc29b1e385564836ab5bc90737a7a487e59623f7fe6b3fb8fa1f62aa61eaf9bb1c9fe7afaeee966704b37f24ba4abc867c815dd3cae1de29bd20d74346cfa96297c5d6e95efe6008d5f3f2f442f49065512a7d5d03689ac9aaf98ee2511c4d7999dec6cc06039c765a1d1ba808fe4dc4e1fdca6f70422d6b825060eb0ff803558735cf294ff51ed4336fa08ad6c96ab18e51f44345a1ed7460c491a588768a1f8726623ec9d5f09de984f639f29b2d518d6eaeb29ae4f4b2abd371171f8e1624c85e8d9a902b299d7411f91fe1939889833344a237e616113bb61748c907994840cc1268d0fba7f48b1e82a0f7ff2a9a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083197c89292ef7c94a444eab675aba7875aa3e69d711723ee9f8b353cce9ab05c838a5d6f1b87c3f803ab7a6ef2bca4dc3d02601da7101d418d3760124f41a0bd8a8404fd5afc2681b1ed085877c7d7d90f3c18ad45fbdd3f79560c1c516a326640fd38de6626920abe865b09733bdb0b131b3a4268af1bed29b34eba236542e57fd11ffd69705c2cc22a60da02e0d2ec4eef0584ffd784c6f6d4de40af3b6b15655a63ef7513a62d1401237e961412bcb788ae910ec9836c9218dde61ebe2bc33bfbd4905bbea4cee9ed1ea2d20d64681cbb062cd60921e153b6914123ab0932023ce23c7e6d468604e981510a9d656c3103109c63873e8138d73fc1362f674928b0de5d827101c748cb275d46f8d7ce7f06e2b362d8465438950603b5153374a0c0a2789082ebe3e7b9e492cf21e68604faa41f15da37ca86c5f17a0552138f2d125f8e13940cdfdb14d5474ae8a949ab4a2a59176efdce3618985d2b48e649471a0d5c6b05cd4c08e9b618558dfd67e91e604e4ac0c88ce2e0d5e912d945458a511642f27ecb9fa60c74c115228f304d16f522e3fcde1431e0b419cb1e5b0ce32d4015e818e1c1e3d1384f33adbbc0740225c180d68a50bd016305d4410980000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041ff57a6716c95697f03ee470bd5ce210c2141099fbe34cdf15ff6e4f64f3cdb9ea549d87674b8c54253c4d620ccbd803bbf83de6ccd88ce75a0c4b6deb06a03998ab75e009f7248e3c89ed07ea2c993b0a88f6496c3bb99e679637230f4fff659a86f8eff2de2e9fb40c72ec9b3bc899a4e79f002270fad039e2b7bb6bd7d54f8d0b077e7326be047395d66993c58bea67f4d4db695ebd339681e5c49773f62881e6869dab770b0f99c4a11151501aecc25a579af1fd315785bd0cb6324543850873051e55e2ea76a4b9e69b4d6aaac8238c3179a2d0b31cf22ca11bd1ff586a44ac93292044cdb35bf29bc0f9932fa50985cc3e290b21ca0c6ecb9df3d9ba6e64b1df22ecfa4bea4c3abc5c8b22c74a187d79a4911778ab607dc6d5a3d578cd595893d9a54d305077e6e17dd2f2a951656706ca6383422d6cb1acaffb7f972987b7fe4e9e1850533ef1358f55215d028188fe764d1636a5183699a99c87b8974192566e2ede8dae5a71ded2e29e10bdf75a6de6e67c273f73df164c1dcad881caecdca46c9d883593e24ed9c367b56d4863d7451b2d47857f306e1123eb1fb80028584f400bdc5e5551b06f67a4049cf7a8d0ccbac87b33f4a1d55bd8d75a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f3a36dd28710c6dd8cc1b340c41ef93cc99bae116607a79ce532fd6c744472d864651d68486e2c242a1f933919c0cd67a51a582a5a7c7340d17f2ad2db15eafc427b889ef08c229fbc0aab160d6c2ff23a9d06ade31f4aacc013ccef09e42e5a336c80a99882d6edd60de20bbbee7dbaaf83fe5e8d08042bf32cf57e3d543c4ad2de76ff4317bf71869042658ab3be40d687dd58f3b0552c38e51cc7aa7a3d8ebc2e21655d6bd25e4a095012fd3524e3557872d63b821cdb610ba18947cc760498a8a174b9b88720d5b89a5210d0fc20246e18b54415db1f9c4796463eb9ba8e3b276fa8985c6a4836aeadee3ad91e968700eaae33d29f2edcbb2666c99b98b6e36ff783b5a811c6e2f67e15748ed64ffc5b097da3de741dfab3d341b95cbb0c55cb74258e8fb36ebb59651ce09d8168ace4e54684da52bac04f45aac6f6d9c71cede1b64239404c7c617fb37c09b972f6788cc4388082964c689450c6d629d9b52632677feaacd8bb904da61f7359b28814440a3390e9f118e03192a87823d30303c18b6599cf6ba1f3402861ae21e0082f1252c269a7f2c8bc90e737c8007b4ac53fb9fb9fdd93d829b7adf0f0715d033fcfdb8ec7337e538fd8a9a7cae3800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ceaa7cb19a24d9e6659b3f009c2a0ecf5b2a2f0c372b5654b3648c8adda0b939e26a268307506ebd3e1e01b9b6f0437d063bf3aaf2c6fd3c2db35131c252fb78f81bd078292944be8272ac6f41b4b9f19d2aac671f54217c044c4334f12bbbec117ed942df45579464bfcea73b87b0423caaece4aafe20946355fc76dbcf3af05912465263a91fafaea9a38b66c019c38510dec885e237231e9bac76cd57c323e57ba0655526f11f184be5d11c3ee5a8f3e598f5cf5972408ddfac86a9ac73b4419b14e3b5303f6662967ceee314d5fe15299bea22fc68d9396f58cbc72ceec86d3fb16420607bd8c14ea8ba501a39f0d71cc984b7db4786f54a48cc8e64c344c348f00e26b5cbd9744c75e7eb8d67c5b93f72bd29257ba54e04d2a07ea6f62625d6dc16351db5018d10a0302128eb203dc8e351607cc4875fb64f65bb84d30214fd3ac7f09b3ae2b705fbdae32c90d11dcd407f3b71685a93c3f309a137fe695c94963f2498d0eb669e7ac659296be971d83b6579bb05b0d163641fd35dc9074816c182ea3fa74d47e635d6d0eebaf6ae58c0bf8e3f75ec788fdc074a7ce63baf71f00e978f1bc26530205163293e14f0d61cb15fc4f75e59e3ab76e920cbe00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000761f699b000aa2bd3e4299e5310722b2509c9f6fad346cf13691f552db708081f5baffa96c53136eb7a6004bef507657df2ceacbe09b8b74903cfb3f213c555fedebb3f7113ab7f73c250eaad1e1879cc4fcacae85fd40c844d47f24a9bbe953e2cf3e9713a2295ac5595ec4d5774e7ec09b4b4fdc95cd3e3a5563f652d6b408a5ae1e129f5ac920dc027fe67dc032b63f3dbec6343b7df57b9a3d1b937418f834e4b92292023f1c2ab498c48c19639f16126ba5b57a11e1c3315a13ebc760ea90aac8519485a95047e924069d85314377ba13f2830e24261bb8939e5d5c8ae25b751d89474da4f27c4534f488cd75cc46e4f493ed8989f91da8700fb6887d101ddab282684fde8a6070525403da3cc042af24d19d5af7378189a814e874efa275b6fb5030a20bfce7e01fedba6f5716b247b2989174dbd7971524a7a81ad03bb2144e36c4a77a863a7d0de3e7bfa5d99b4900a1f90cc0492baa718a1ec25d06bd8784610ebeca4c6d44079ba194dce90c9ae57a96efc5d005a779866fca6a6cfe0bbddfd96495f16dab21d1f4e79c4484f844421de10ce19903542edfc4e69b15a8507583f1beffe14de2b8a15b54e90266ac6ff0559734226829650b62a9d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009851b83caa7ae283ff842ed72734e8d4b8f03470b196b0a0fa0c8813f799dbb05b67900a4f2600a2155833eb209d051c86a90aae791468dc4662d1ad5e42eeab3537db1217fe47b26c66d263c9686abd3ff740595eb9b436f66c80dc7406a3ee9165924168c7ae7f5ca9c159d217dff3f1dd8cf83f0a3083febca12e61a6d0a2398b7b9a9f98edd1b63d2986c321bbca51ce73ece19c114e9c5ab8792304aa4a4a5b002027dd02598284a43ba9d2468357ab5de621b311e55432d82522e2898154a2430cf6f9f652cd1faa5f9cefa990e85abaaa9c27536a422de787cb23a4bd48a83aa6502cc7b4c8af276843e0caf23c2a9eef2adc910805104cc268f76f9b5cc45f0c3e809ef089773d430420d7ed4a086a2f6f1669932b784f4bd01e229dfef987793c25ddc26ead8250ee0c75158fc83b0deed5b4f91839b37aa4d1b7de1d4c492585e5d059b1e20b80d76c21c66ff0bb439e9e64751f86d034903833397b98958df4b06b210735492e4fadb6fff109f4022312c35ff9cb8ff4a3de99d3caa608266b81877fd04fd87176be073d445826c254f7b4f2b1462a713903c8f9aa3981e589641b009e704af353646f2fa9f8dd605a465c81d627fce0187435ca00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ba131de4d14c602155ef62bee1ec17101f932390d585ec0d6c9a0ecaabdf1a5076e47b0f35629a2a5aa4b4ee2c8f07ca5a7f67f13d36818eb72c602f209ed048df6299559c19bd8c163384a0dcb7ff1045766b10426839b6fb8ceab74c2eb0ede05cd6b403b4153560583cbc245412548e141fd43442492adba1dcfecf16bdf19319d2a9e63f922898cfc08d6031d58aedf77b781960df1d9f175702636710be3f838548c83a96fd1b8a2d166a5dc0006bd4927eb8eaa7468df7acfd43b7a1081e8e54a82fd7b33db782b858e4bf481ed505d58e7fc33207a15615bf7fa7785f524473b8a54f947bf404d4eb2220c58235098a1af93b25d34969dcb2e8aed71a629063e8f8fb61aacce98ccff97c638144b9e34a562ee9124d4e35d2d1f2ee9ae1143571c479406c9abe4f2ffdcb974fc013a749359e6a8dec2dea5d6a718ee8f02460700ae2766311537f9c02becdcf9646ec7804d915e67be97d0df4b796000817f874194ee19a3cc41c342f6131f5f83561375ee55d5a1fbf4c7396bb56c4acebfa3a8ec5a89885e5325d686bed4cdea42a154380234e9632efda8f5b81c6a04d5258ec392082150bde007798b76463a1ad1d94462c20483a4854800038400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cec3819bcd05e74048f0b82ad5dd4710c2189fdffd9722d50fd0fd9216e46521c5a493114c654cd9e9c477d5099bd9f1c159ab8a214c98c1897dcc796bda3258a3f85668bf712a0614769cb5c120c14469def302d4d0cd8983b392108729bc3f4e340fef5bbca9e55309b5e02db0413184776c72489f8617c9c23fa64dd5919137f6a11142d063f9cb76941ed80e1170b49cf8e9f3fb354b8326cc8cceccd41a4611c741e806bab14b80182c95c9025e9699ab26026ab3a820654c48f84c736462938d54a6b4199003b200dce47fb19d475557fbe36fd3c269f8b2786b7c852c5d5fc25110f1e6ee9af37d1cecef2f9e6a8f3b2abc8098b67648f203813198f3853fd1b7828334bb36c5c6d5ab2e0de19bf6fe3acdf495cd33e4498b34127a34d45b08a9afcc19a31e362a3f7ed249c8ccee9bf3b2f666c8605ece44ac0eed7aa1abd86b983fcb25eb14905a606104e20c3612c6a44cdd06276e6c05007f5e464cc847aa7d0af1e484fbf010dd643fefd7610e763681d9d4d396c9f23ad1ac87e348fa0aefe8a39f7033db4ec04fb2678f72941166452361e5eaf23fb2b2fa71dd441e35ac7b6d2866a312849fac933e19d978d062f7ea149354f702ff30f2100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f778468bf0a052ff32ff193545fc6d0c68a4325292eadee76b95376a8ed6a8e94166056682fce63cc0fabd9d6098c012b7ff47ca070edf1743c38f15393ac19c0b4605737b32200a9c0e21f2a6f4cf8e78e31050c9d74ea074b762ed0854e639e74d4b4a5656982a76877bd12529fd5a8606166a967b9ef18ea6ae828b666ae18040d88fef6e28211265bf85387f9784c202f740cce22ef95afaabd5ab34917ca92c55534a7635ca7a90aec17d30da5d1f4547d6a7942b33d14120ecc6469498b57f3f340fc6132c61afe05a28eaaa13ccdebdede1bc750597d3cd7e9d779f301c550d1d7e98bca5558e3c85bcf2da065783425e46a056fe0f121fc4efe065694ac3928c1607288243f7c42e34bbd04c196cfa625c54043485a52812a393aaffef3c14ad35189a116e27849d0259bbcac5b2884501b1bd6e5199184a69c0e5e810427c139116be7bd3d07b8486c64be51141d08cc31d7786ebd3755ae0e04eca88e8ec7341d8491b7e7b30042e9bd3f4d0394d8e48d1f7917a81d22e1ccdcadcdc25b606ef7bc18468f0c7c94b3c230c5fedd6b6d49fe4c181eacfa37ea5274cbc4d00f4a16a1d9e1b461d0154dce07c537458fc83870198a1f2de1a4bde0ab000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088136cc68641882d24e3d73453782f16c27fab4fe406c12576cedebff41f1d30b64701a9f9730bdb9434e3a1377b5a19914d3a2bbeffe2ce2d39e95038ec4977b889bb2405f4b1c1e6cee7f4cace12490a7b2768d0d32f55a8ab5176aa412d23afd2873c2daeef5fb94454c2c9345eade5e97b54de37271f0403b3e8d1165998dabc8344fec79e6d928fff7ed7d29c713ac03100eadb25db1bc85dff8a658a7621ec2841144debd4d9656b8392930a29f11b4c91014b7d9b5e4f8246458fa95d1865c119e04a8ae189b875205fb8c22356c093e9e2a299059d167931559900cfae93e4a74164072c3a8e2905bb60354bbaacd2ac46ab2cd75271fa9b264afc70a4f7fca4c7e2eefad02ea9118629061f6703de3e4e221db738052481556b9d2d71f22776cfdcaa1088ccb6f39096a3111e53f3873916a2d880de374725c88bd1623af3381b5e348905a72f3d9503acc9f85ac6d03b2b50391babcca782b6c3f874161213c125a734c2067e148ac5a8b60648adbd8f96cbadd1b3917a9e123fb5dd04486292db584b4abe184c80abe7d1077e3fc59767d3f473f06659dd5feca7a333d11b5f70ac2c618276808a52edcd0fade39ea37d69074cc76dc90e74b1960000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000992881cc82049dc170cf53cfa3e82b0b5951f9f4b498c0a532fc21939452e725b38d8d9e26151e6d6e91111a7519107bafbac40a5d53d9569fec8f21beafc18be72ea4a1bbe2ae65b257ecef66330cd024551a5e5392e21cdb2e2a42ef67b3fedadc634342d156099df6d2c1dcdd811db927fd149162f00b23376f28734f27ec291814cd01c6dfecf308d7494d43362256e186e55da571d1333446a31166637984b6a3ca0aba188f4e8fb16d0d025432259ea29772d4db5c0958cf3ccf1ca35d0f714ceb0b1ce9df6849685524be54c31ac1beac7108e2f9e2feac26a08b3092982f255886d9e1949bc187c6004d82bf4aec748dcadb0b6d4e34cc82eddb76cd8f67549d193763cd6d123fcba7e95a2435adfe4aac7bdb8029d010ad0884146871f19b48490bdbfdf62c752e06509f59e4d288052e24defc97845ec76f6b12d2000a6b3e83dce63d5aec75d7cde2380eac6029d98690c8f5a05277647bacde9e7c84021e9f99bf2c9e272398a7d1cb6f41a5866ab991f15f527afa9a3a234f2ec3f099eef8739db115f14bc2f129e1af9d5aded715bf78c0246c17ead52cc649eebe69cb2e1b50f9a7ae8ae1d46b570470895e1ae2f8859de8ea877cb537ec930000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2c3ad52881bbe012ac20cb5073208a109dd6f2f2c59b2331fdf093c65acef786047a2d3eae82b733a51b34c5068c79d68d1370f7659f3066e0ed112eaf8dc7851331e9c02780e88c20ff636f17e676f700eb92d3ed622c6096d69de21b2e3c62760087f1d342c2a6f88e554d229ebf4000e2d33ea7b1d483af7c134d507c51303102f7b9fdd9f72a2b4f67f59c61483acd3b5696d7d8254fc9a80e2f07cc4cf9b36e6823ac25c811fc9eff89e6fc65ff51599811f5752db2f63f152c7fe7e44fa6ea140c69f3d47efe1c91a0127d271333647fcbda13651657cbe1cac4c9c0d50fad9929be7be7b1e7b2124fb949a7cedb300b2e6753d9ba3baaf22b7fa4462d4b2d525578957f85d772a467693b6329850a0aff8ae0cf8f2ede82d80559dfc897deb4671015632014d12834caeb8e46b0bafa6213a7434952d6b9d6ccef17430463089e4178cd53ef6045b1fb78da7c407eb73272aebb344ba2f23b5432646801a138d3ce1f92023f0a23255e17567c9c9c90c41f14f029c8d0a5973c15c2a34c7443f7a4f9662de84f5c7223fbc4000749982cdc071483210f47cb577d9a742391c7e0bb211aebf99a201ac342724cbdf57d92272b4fe32694e5568feaf1f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086589abd1bf76ebf1e966554bb1882b8b62bf4edc12e5cd13e5473ffbbdbf69cb1da04267c55acd8102f361537bf7d37bc578a8cbc95d52dc7e34b91bb0106ac9be433340285fb9a51e90105525d2f307317a9ebd5f9f7c0de22944540f40cb8d78b95467513d75994be970408b4085b34ce4bf59c0efd6cbf4e4f209339b679a93ba72448d638df821d83318b786385566bffef5a535fe4a84748cb9b29d033801a6281d2f6af7c8601e924378d74f3eb8271356f8a5a1efd05eff3b87c431a6b36686b13772f9d38ad9ff0e4014cc0845f2d4b7ab5d55816f59a3fbe1ba8a7bb619afe667cf3bc5e27822f209d5d010a3860e8e00e1da1bba31c643ba9b1d919b3e7dac5372e90f304d92a23c9e39b8c2464804af6f68ee5a91f4c2a1fe6c4e5e88defcd437d877b314e6c9cdbc6661c5145f91337ff2e42aae53e019c3c84e70c2a50541346a74e1dea60d990516d18401c5129492b57ea216497376f29d3a3c86ff8effa3d545dac5b556e4fb73760a8f5df5968588afc9aa84d90feff7429322b58436db6ae2bd6ee8fd7be0162e31e9eb19a2e5397f7c765a0e83a294a23e87cd2dde7deb963a28a5c1a88c5fbf84e0822c5fc2d1e709f7c3e528524190000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6fdfb81b3fc7c3b8415d4aa6267a078b04f13bb3d96ab542d08a9070c32190b1f1c6589b78c29e1c96ac9adaa2c197924c2ad9919a5d2482b75ccb5a00ca3894aefa5c922184d5dc19e794012474870e3224c3cc8c8b9f1af9b57f695bbd2b5efffce62c34abdb43666d3d06a26de0cf21f0a6a8b32665dac272ab61b152b4bffb565d7a637393ee3fa95b4251f9017a2ef3e0252370cb04fed70c2dc3154ee7626ac83f9a96bb43d90ca6bd8fc9a4d2eb4874e9465b3074b42c24e8cafd421228680890d3ccd16dec7cc66c8334db17de0102980851e65173227c5be913303fccda72cc064ef207e8bdda6dc0f0327ce288f5d256f6bdf21465249ac998a59198a4f0676704cfd7ad0638092c7b36bd9dc6639b32bdb13ed0357c5183fd2cdeb891d27346ce5c1987758e9ea59eb07f1fc48402b372201dcdaa1e8358ca251fd572872cf3182354e62b3c5279dcffdf4b32fedd85923ee16cf0275523cae26af7737671ea22ff081953784472a530c58bba80cd7c1866138c5e8f73bde230d23d5c217434b5539ade5052a968a12c78bf34a64b5eaea9a493d7c412ef76e4cb947bcb7a39330a9af7c0845e254f5ba63819212a174f01f4a7f3e00af90536e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8a22c1847044035f97d05613387cd606027bab529160a282e1508df52b3d97ed1138a66f258c661aca8ce8f22ccf496355ce06781b97fd1ec6a7b9388081e5106adaf78bb93f0b9547e9a191045f9910875567bf24b42372ff07fdd79eeafe2fa9bfe25531d4553b69b72a78b95a3b507eac6dfddde4a1ce0260d65d2593c635e3851e193475f537d1df5e91bf9ec1940ed71c70f01f4210aaf052bb4005eb2b687ef48d9cf0565f8874243e2480a42b5a589d6e5b7ed239d7bc51fbe65d7538a48a539897800fb3636c378acc6a01d3674b4ca9cdb69a8832721ffa6af1cda5988dea71c799d9e796c6fb2f4b06b394b1f1f4023d0847496abec091115a7868d4769d8de9163e27c0934b483f5e15cfafea1f3ede8354a379c906802de3b94b303af7fe70360e3c753ad4ab058e6bf7106ce534feb75260d9a77605bd1f544f3e1b64e2420e134059865f10dbbe75cee68f33ebaeaedcf9f610ac3f07e508b62635438e51772a3ef24367ff45c73c7e6821486f6c7671f2838bcc4b8e6ee94fcd59fb3e93b4ea51d2afd01d60ec54ced2d594b31bc26c857ca4357e7fdf6d6627d572f1fe92a01a547d0e195e2ce0232962b7e0ab73298eb05eee8a4de672700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500d340b6a181106dfce0d66a3800261b049ab4c67775c3ac3b40aacfc2e2fdd227d7f841d19b7f9dcbf50b509fa5c79ea9c0eeba3e598a1ddc69734dce2901582da3baa95fdbef352691c2fe54ef62c99b403c4b8e0dcac3cc7ff32d32a4daa8da2305aac3dec116747393c785208496888538b994e392c1c1a39df29d1cb4d0f705bc47797c80751582cb4375b63c195ebe0b07ed9ae5c7ff515488bd2590e1bf6530f7a2cd748f9d4d47540f25f0a7d2b29658d7e550a24979c0fccb745f32a0bb2b47dc651e13b5992cc98e36b201568e5dbbe398a83183cfc1e50121462a7c536120c241425ea4a0abd2991487b1377bdfb8a28b40f830266f315161500dffcb26ec69420f23ce77e59a41017cef535dcbccde77151436fc0526945b8174976e3287ad2144205ef6c5cdb382011fd812702922a409a782c897c5708b03669a5149b21a0f86684b7600eb57f9a61c767e6c170302797530ce9a5b252835e3209b15f9338265530271a616aa792c1f244e0e3e3b91a8e3aae8d1822c547e0a0ebbfa600bc3d777c0bcb265ca9f2d87f4ce4621c7337b7dad9a459cac7169d9734ae967be1452483e8385cb0c993f00b747528d762147f288cc7dcd8a614b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad5510434fa1942f911de0614ada9b98ea361ef7fd75eeefe541fb5668a4d6927a8a637f2ea8755b599429bcc8068afdc30e21b0edb0bf91650267073dc04a0c20060f3a08db467ad6d2abf9ad02470f9f411525b61d6bf05a9bc2dd83bea52b4f6deacb70038a2e223c7e2e07806a033f960748c3df99565cc1f5014bc17ea3c173d0943001036f3a33441691f357c7ded70f4d6ef09a6ee41193d810a56cc8e751160f198b30ddeb81a402c8690fb6c34d20a4031200835312267297e34ddcb9d94d8bfe209cc7cf8378c46e3b3f58b24e49d16f8eb130f506fac2fdaf515928b5747ccff549a2f5a120b0bc2ef1e27cf31fd636463660494dded8c2e67023d2aba17935715832d67dca4aa0dfd4a805c88e84e53388866e6b3817d5c9db34acdbecc327ca3ffa18b1eb54958a4f21088fc2ce3ba27e2097dfe8b9b0b2d69c2e0c8542e9ecc3d07689541cb649bbeb331baee17858bcc44817c4e185b7236989f06120378c1c8011a3e254ddec9a56ec765967f7b8b40af5b2135a64649853bc9be4efaa93a47e93dd899c7d18c37de3baa374eaf2907403dd7be21cfef4def0c6a46c6bc69f23c5010716aeb715a21ddce92be291bc6427eb6ad5499e387800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e417d6b287e023a2568eda64d6d4c8109a5546198b35dc68c61f8c1264947c5727de37550fd842764907d46822b793136b01f8083eb1949687564f43d014360a098225519a4d7b81c19d8beb82408042643513d10faaf7cd8818478b9e7305d4d6653cdd699957ea3642ce0df0e290db8e13c3370516786e647d5a2e5d9dfe595278253d9a3caa5515599f00dc2159c35f280e0ee8d0c3243f227a87c9f4822f30e0897786b582c2311db9d47664bff34edf5ca17a70483fce4a93c3dfd604a7a457dd9aaa32cb9bee6a43135a18b6eb95f1beeb6cee941b4bcbd146e9857cd41ccb2e5ebc69425434b3e0a00098d1c414cf4dec50e4e17bd1817dce1045d5f31d0a973ba386e78029ad3081637c4649abd3e354637ac5a17e48a8d92ddaf61226470bd68276a7745c5af5ab9a4222c1773ce54b3a36c415be82043b68f7e93655de3a1ae98c8a80d1dcc0b317daf74351b055422ba38e1a70ed51b97e9ea3b5eebb4648302dfde3c8138ac6ddf66a700dee1159a874f36c4591c2d4afc0839f560b0a6c3836dba44539d86d7bd6c9754bd2a2a21d725bca7ca35c34b89b70c65b0aa6c5ea6728627fd1307ebcdb7170492fb21ac2140e2060bd51fc4d912fc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008256fb41236d0ecd0365232fa20908a862f7bbac871871c4439929d9d3e774e5403e365efccc13e68976736538f1991c9b8fda045216779c609ae1fc667536c36b45c36ec50b2129fdb44c5f3a99d82d65b3b8707d44d90566b5472953db80bc08f7f9e8a97e29cebcb7c83d2081255c9994d3bf45c6e1148ee092c13faf23f8cc8571f0f7adf89d275b22c8a5297ef9b640af6bff6ab58f05ef2b39cf4e11f5a66fccb38cb9678aff6a469dc871ed5bf5add619212cde10c59f60bc95085815bdf32b470830f183ac219561498cd9de9734ef1c4d56d9cb068901d6c07a052cf2a335876ea738eedd282939a30322c658aba210f89edd9cb3eb03491ab776ec144cd0253df37987e5873e890af55703ebaf1bb34ce1c4948675b9631b34f3b4c03e08de4032c66cfe41fc4ffb49cbb35acb07ff6345e7335aa06c2b087f717f59ab2fb749c252834260066fcca8ecdd74656e3b2c233929c591e42558058ae10ad304e95f0b40c42c86d28a5a58f3cf0056f70febd863ca9949b20a7fb11ed12043a64884f5e82f601ce2c5f881903bf183022f86a16c004cd2e5026e5804d00ede652b4896bf8bedd2e3d002929fc535d3d27d0568872a6cca628607eb750400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c7a6647faaaa1a87cb2b918ff296f35c54530fee1a67e839133756cb87b464de5f491d7ab344e31fb87a39f93c84fe708c5de20c2a7db20c6e114f671bfb2b988cece0d74725872a91ecd8179f256ef24c3d124e9893baaddee64833b0cfb44b8efdecebd9ac646cab11355cc166ecff5efc90c271b6921e9fa39b3af2d2d2050377d99856b954110725b44ec8d397d21a5d589898d40acb937a6d65906a349ed3e9d1fe0af9cd9793f87ec699f2fab37ea06c2fd494858fb8ba1a41e5009716a92133a697ba94dcdec2dacbb5ebdebabbdfeec7e9a325e0e9b5caa3ef8110d145b7cf7fe140c8511db583faa8f22249085eb7165113567811750a375bced967eccb10b2c093a6ac8ee72338e0dbde8e96ea48a3355a2fc35665e982811117d007c0c535afc6424056ed362f14c7dd2c327eca9e2d6fa07cd56f8599255f20a4c398b53dfc048b61f4c622dd3a5903a8202a87b6d5a2ae5aab89ae8bebd0009780dce08eaa8a5316eaba8c74839136659f52950bbfb78d320e39d00500c816cd9eaa849897db62bf5c6e723f8602aa4514cd918fa3599473983bd4847553daca7e281fb584f0b276a42b7d9f17e032206d00461560e836c9fd0fd6f685defca00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ee0bf75a625d6f2a32ae1e8d1b79abb8014f7f05ebaa8bd551c4cdb2b8bc68a48069ba6c9a100e5b17d6121f1aa65e8d4c93d68a24bbd02e03f54e76ed8bd219ea62ab5f1bc0782fd163b3520286db4f3f84e5c2d0033c2fff7949bfc8e4dfc4a67581bc7de3f984393d75940f15ee58822864c557f4f3e10219403dbc833daf8702543eca8c8c5f86de0013de2b8b38bcc8f3f55d58b35bcb7d4a0881e308c05cca7d80e71085a328e168d80875099c25329d1d24cfbd7ff0c100a24985bff8be18d8f7e4992b0f9af3b1122733402b160ee9d23109e165f622f705df9d3c04156c586b086da614e170b63eebbd682d41bd96b37651d87c047fab418d0d1247d9b6c1d9df62914de4c1b91d93dc121dade8258876d81c83f06d74c15b434d8577a6ee9d278fa5b5e649f10d4a0402988737c76073569ea5e509c61c422c838ebb0e34267071b93e03b193258e939bbb105d1d516a0d7d77ed1996d607bd8ce89d44cdcfba67fe3cd5047f9213c8343816feee2487eee7f79527198136e348531005fc3380d1e31f5f75afd8cf24f03b32f56abc0ee136115c145cae18e45fe1cf82a06744c653ac3548464babf8407b955c46797e2719b0b9cc169be60f7110000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124f9c533a870b7a4679002ce44f261ce4350613155968fc839d41e56f55018bf1e45ed1d0adb7842d5b40b88d795a137ae45423f5fa573fb1ea68dc20495e21ba3e7bfa9ce36039f1bd12ad8c98cec16c13c3beee3477cc1229d8b707d9ce5c8e32ca0b630ee8adabcc818a180eb96770f6f81353dfb0671138920c77c9ff723169d04eb742222a041d6eb5c13ed28e560901f0e879b7b3c8e5958571ade9d92674882dfb39d595b8c1e2a50ae4fad9a91d9bff990c7ae49f2086d5da830ff40be9e099c49857def5606cf8ee4f2ced36831632d24d7e8c6bb86c4a44c3d1b0a8f2ae1b18255df52862594a37ec906a21d6a3cff43e13c4cd35bfbf77acbe1a5e0fd23a64a42de3b7bb41b7c9f2cbf9009014a3b58c9e3a238f6a0da1b4e3848492e954d388fe72a3671cf77a7145234b35780389003a6fc17cdf5adec785544ed93b416eed74f0a31cb2f1319281db48e9031b751db72eeefe6547b4668f3014506bfec382aeb5ae5877d818e56cafd0d5d05fb4435633428fc258ff15da62ed28d1fb656991dbf580418ec79544004cc9cdfff5019e489c7b8c569618d8bdb6908f0c6ef00029801f00ebc523a48981d3a3c13924d98a134b8b5730f4f4c9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097d4c708697111d57e3445cba83a53771c1e24d2899eb80915cab128b00e38c508b05a9138fda49fd4f53edcca768afdf6bff2a1321e2477d1c863e8b77c76ffe4251fee18676da96e5c71b7368bae37e2ea0af9aae4b4f4a1ad3d1e511f094c9e7b69f41795dbfcf169718e381e1ffb24e5b8c255c90e840a6da1cb270de78949f24b6f83407472792ffe4581d7f52cd8950ee9ad3340c64cb374c022919d9f8e3cf5ad6e6361ea9c9dc3fbbf6f18c8bf3efbe690a579498f0167e3624aa3c242a40470246691ce15cedde20e40b18e04549e96db334101a5756d59f218aa26f61eaebe947abf2d680c24f3116073356f7136f7c4592d5c4c0a3b5ec8c5e144de2e6cc4fb01c59d63f5a80e0758f15bfef650e625753d256ce6b917a3a6867a777f1257d107b7d27e4af342cd8c79c0b2f48d83bb0aab8c8450aad5819effb60004d285d6a1eea7d7dc3696d4c5a0bc987c6b17a5237f675ba88aa0a6adc16527fc2aebed0bf14b749df35e3ca15426cf1cd40bc7cda032bb537460a8af11e75e6741d0aa42d5d9349639e59105c77b587c542d9c5aa04b8d3b33bbfa1b28f73df88396397187e669ad34492c30201a2345019a39caee1ee05bcfa60a4bb67600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008fe2425da3ce73041739b516fce20df2801ef392c3ecda69c641cb5159344a414836a905315022531489bb8bdddd7f538872769cd8cb3e85f8184aecbf115e5fc00c850e380b05f30d3b53f5e86d7664c3e3334e18059f2367956fcf7f9834ee65275dc06a0375b7512d0dfae8f4b718bc9bf9c37e053e9dcc51a4b03f1ca375e02137818081ce313f9d4bfdeed156c21d0c5cd509e4b6ced09af74f84539cf8d296f11c606c8128eda9e5193e429d76663342cf878e166011c6b3434d1d0b76f4d39fc7fd925b9e84dd77c0ab421963ff8aac1d77a2a76a73c6c559ba0926fbf1f76dd678832a519231ef770bd05d1a4129d1f4ed2d015233130f1f2e75c40a95ac99d1334bc72c7aad61abbefaa11c4a3bb54cfb1bd7a8b2fae051fde45454977a0e40770cc4ceccd1520ded1e5b306fc4036c5b36b6c6056213d0ebf799079a9d1add8e47e9b6625e077d6078764643d4ec6885b296f8528c0b6994271e32eb11322d514da7cc560b6bc522d075bdbecf565c48e31b022f71902f356c8d0271bcac38b9e85371a1b7d698f975820cafc9aa9f0cecef29c4505e448bf5c9bb72ee02f7b636afe8d14d43d00fb460aa12d03ca58c17f80654d6bf6721064e8b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000841ab85675787ac77af62a0e4bbfe6ecf5c4b97de90d60effe95b73e3b3b2dda093a172d78becd86c41f104611762ad7ea99c20ca22dbdf0b9959b0705e87a8d7dbb09ffac84102ec9b3e81eb71d727043ed21d7f206cc94afb8004bcd9c504ec5a4ec4c7dc07b905843a7239fb44f41f138d3fc449337dd3a7f63d947b5bb2ab0093006f6c56622f7b0211cfc6ffeb2b9774781332d76ef02e0051c59afb08349b90e5170b805133f868f8f754233803e4966e0366561797e0b2b95ac35908835f8cffdb043cfa62489bf0841654396c5c90d7d3aa23127808c7da4b388d420d8c9814dfec851af8824b3700871db93bd708791ee12af08d55361d97e93021dcb114c632b6b1a5aa7897b75cb22c0046e002368b09f054f8c6c6f2ba24eb8a6f04f958991228e3f91c861fc253b8bdfd4360e33777df45223216c439364b98f1fe9e24340c14d00319cef8029c98e7dd28e73e964e6e236f49c727e2a0ff0c8d53e8b8f5b0c84b40862d247109c6759139339a03e627b3875f6342328f828e315093b97524bc4b18db29c04b0ff97d3e93c4fed4faf8d54af2f746d57a5e93157a46f9ce3d0b422af412a00e86838ea2d2b83690dadd32ba03664bb753bc3af000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082a7381c0533627f0ec9cb4e6c62bb5ca96a32b1d0de43012e839e546b39b69939d781cbad555f12a66e0c50e7ad9608131ff5405086eec94fa1e3f5093cae6e00107fc897f897e7ad949910c3f5af95b7ac625a182684bf65f2150f69e6a2ff51cbd28a1bac7c0013cb838037d21f525335c1afc7690e1639987ca84444ac0430a8379080185e7ac7460cbbb4305a0f4c5d814583ace86068f1d7988b93ca7e0263157587e721349eaef3c412e1ae830ada282bc23e4cb7731bae7c4ef3f8b96b6e3c0c1e034cca8b796d6b602b6e398e063aa86d833beb5b11a8fbfac818122dddf167de2cfb1c0fa4a3f42ee7a9a47a6a09aef73085fe01a45015d50da8443dd93b6c43e24e5ee09725c8df2890e8058a5a2b122a7f66e256b6308ab37f8b4913b67e53ff0149b95b8566173746503fa720304a143bde75006e56ca6f993e9ef0e80e20b1913b2cc532f08940ae5d3232c4198da577383d28f65053623e6657a8cd1c2441d6c7c0dfe2c179a95865dd9316c0deb6c9226182480b9dac27d0fdec1012cf1402ffe14f6433413fde1b9c9f6c39d58f7af539dcb181d646de4962c04c8eb0dc9f0a3b24f917d8332192d8df735c241523276768afa8b9d2dabb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000884da75cfcd48f98dbf215ca11a35b3b6b26b77e0f29af3d8b8803333b47dd33b1feda4342b7783822a5e816dc6080d3908f86c17443c9fc5e6a0d412dbf2c922aed26bfff7ae761faaa29bd196acda6d6f9a35223e94193f1c3b0aec58d2a1eddcd9c5ca9d46236642e71578242229c85b67540b2058874840780c086b89f49771eb66d6a48612abe77090a2a53d6234b93800d7283af2fba3107c40a693459da3499f6063ff556db81d01cf9436ef3d18a3ba7a9e65fe2ad162f5e6e89d99595d3b7dac08ad6647d8b6179b14bd21258bbcf82088afeec7ccdb8b67f7b31bb140ca1e457de643894c1719c69164555f53e265cfa3543cbecfd706e1712bf209ec1b236005f70e51b851c059cfc517835c1893f0f4d9c5fab7892d6fb38576f29b0a0c5ff62738f0ea43f699fe1b414480060b89a03ba061e477741bc97fb62011e2410836adc54c88db9a1d37121a39250f5941ede2a9ce5ec5c3d1ac42e51756d34349b13179d7e4dd3eb7354ffebe0a354294f618fd4990656e8325bb5ba3d00edf6143465ed6cb82153de676328df2f41a67361583676f3f2f79356cb9fcf4029bef7a6dfd900ee53dfb3a36bcc3c8f2929103a0950f69629936f4ad2a40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000305a9b331388e0938e14ac073346eefd5a26183e5a3b520d5fd29c29bcfdddf2bba594a276bf95f1aaa56f069e634f2638ec091e00fe0d43df7bc09da74906328ec5c10d5f9b1aeae9327469b3081943823623a39bb4b132b8794861607f942c14e92cffcd24970e7444c3580867ebee428dc5a30ed8506004d3f53938191edad298454fc903f4fa77efa9f369e53f663c05f952e1235cdcb484181d5bc2f4f14e89c03d79c2628042d2ff3f74257351c86accc61c6b3e18b57e0f0b572816ce4d4d38a5ffe8bd6236cee5f417aefd5174d778e9045e99e159feb3f64462ad7c9f199178581e07a466958486aa022e21ae32910713b0be0c464f8807336583d1d290b0b360590d6f5ace0eff2b6a493eae6df4e43977849ab41f732c38da40a99012254e5bf09a3cf236d38b5ae54ef2f968946ed3494de01957e4f32fa0add9a38040e925c13855b77991b0cbbe6f44c0fa1e85b31a3ce3c2fab8331854eca6d854246154d51c9010e81f3a74056997606f8ae49b4609510fbf0e65c3dc0f97395837298c89cdf9b5d6235fccc6ed6bc7baf878f8dc8178a7ee6669d31773c1b4043019b7059c01f7780909b4ce935c449cbbc069bccdf432ca0c82fd98632c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c5500453f4b527e88fd6087b151570b96d0f0a2bf0a6eac45cd122812ac7092a8777e27212838ce3ddbad40781cebd4af00492c0fb355fd76ffcd13e67d897e8ec93d7c009a31e673accd24fcb78eb11a166a080065695f7f889d63c275c709030955452d588d161eb370a0371a203d8396cb3024bcb0886a6794dd807f52e7a91e59793dd9dfc675098fd15f3ebed0ad9d371a6969c0c6a1e8ac8cbc276110f87885eb7b543fceb8fcfd685f677747db09460784d27e96c22b48a34e8fef7615587993d4e4230c5ccd6727a45a8447d7abf352c59cfc99fa332e38ec275de3373272acec864a8a912b2f6ddb07b5f37cd01167f332f1ab4fca1adc66cb90d8d0928cc0d43b6b3bd71ec21e981ca9cfa6f5fdf360ee6e41315deebfdb41b3804f92e7c10a71469d97b0a772963717cb73611bedd2435e95c48cc5642346853f2acfa4e59e5b38c564b78b956729e26c87232d58d3d9df2019078f5453208e062a21b787ffdcfbee8cad91d4f5c12bbf2d137cbb771090f5bf51ce61c6cb9efc35fb7390193654119a702e89fb62b3e337f0993b932702f79dcb5af875eadf05df8bb8d453dbda74e67da4b306b95c953ba2b21b29e0c46dc2a099b7d161f773000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094c8bc9a0d7896982b66e43f4bbd69ae58ffef6363516745ab70b01ecd6c4c8f24c293e693a824e337fed6b5de40335b8a3c0dbb8712ebd31ede5fe42f6468fd8b580de81afb066c8d226e9e933e30ea73e1a092fc8dc6c8c4394d1558822d95c19347d1f01316bb34073013a695bf75c8076f1a498a1755e2afa9cc5e7e8bcdfa9e3b0a556200bbf327f1d1af19f08ffce648c1591b9784c2942563ab369ea9b19293932e52fdf1ab60c44147bec8f9dabd8401dab7126a00620eea164fa249a4fc30ce4f50378ed01aa81d5bd9ae1ee3359231243007f33b0aa0e8a16d1c362cd18126cc2c0b86aacf6b47840706db61e69b7b2a0727690cf5bbffa1af2f0b2d30ece955bc5c25a945e52df4bc6f91eb265f9510e5eff108fbcbd5f0c55eddc8516c34ef9f5c6e73c4122a93e5f93590de0310519a67f9bda73bcb2a251bc5b6da593caef85e760dc0fd412eeccd1cabbd36c2e65ed064fbe32969afd2f5672d2561db34631f8113fd2a9f6ae655cb23b589f5cf26ab008d6b2551e7a6c788ec3d9e6301b8c8ca243eb7c689c4d771b412d2d6e3647a3658acc3c109b08d919d25f60c4888b99346e8c3c69f3b8f293563768be437f38e4116444bf17c4fa900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001315460432bfba4838c06c26dcafd50257f8a6449dfe466b84b5558bfc667113df5d43af1e80ef3d00890879fe00967eea3e145f787a6e19a3326a3b7a52d144cb087ac98c81be506ed80f443264610ec74181b7f8b12e69b167200ce71e95fba39dc300d1276cbab4919390d123a6191ccf170e92faf3d9042e87f2740142938475bb7c4ec9a435d1b0bb26d61c63011e20e81c99736118fa9f37204e60b6f3e3a85bd32b4644dbdfef73687e50f9f4a8b04b7e2f275bdd3164b914c2d3b520628a489db561acc919fde33dc441992d928f457a40ca53557950cbff1019ad5ade8b55e9f1929a8452e75573fd30e1f93288363f18d65e38362972c1be84e6ef8d99930a7630611cb9677092d532a4b3574114902fb57166d4f0a8f6057cbdca97110b9753f7a0a1e87602c4ddc28a9df46dc0c32b0364ac5deef7826b178cd97fb3ebdcda1d58cd9231695aa369829fe760011d58c527f9a1085f23cc5b00374f4c133863ac829f7b7f62934b803d376b030ee696016026ad11b8b43e797ddc9619ddb80ed74ff20a27720d827eeea151ebcf84c68d8db8a00f3a3f87aafdc747ba6f416df00d84ab098f0e65824471dda6e2ac770b55ec6c2d7279ca5329050000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000859ae81ad8f2467a4c00e3931702ebf0033c843db92b3fc74c8aa6ad5eb6387b9e0752bce09262b649cffff3667f14240034c00091b1fbad4682e30606f032c87baec01a83d060ff402c4723f9a4ed07b9973c2a58ee420bea4e92387d8247289d1513a59910fc85945a75a886c402c15fdb6780fcc4ab691223a02ff61c4cc160652fe353dc19c347a3f3b746dd150ea3eb972368c8336a7d5b02c8f88cf808561ca98d34aacbce487e8b8e85613792082ee0655ed9a4e993ab5f253ee869cbdf34f4726716734dea93198d2dd50591816c81584192d6b0f26b79f5fade3900ab981cdda44aa19c6f0d5e2c75329625120180a2986a598574cfbbb8980eae8a674ff4bb539fe89e9de4551b41b46d362c80a3137c7bf17b2554ad868973f2d557261bca48224726191c859b44ad076e0705897396aff5352df05373ad227f73778f3b4f374bcc0d610b74723f1042c7abdfd89239205cb0d302a5b6f5df40c540770ea3225701ffee5cff76172106e317b57f6746027c871be93494eba1cc36d8986120253fc1d6fe15ae239639e4820035a0c6caa06186122cb955534e248868ad26a3999085099e2951a57d0ab36a64a812c615bd89f3c41e9b6401ce6cb200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009210d5ab28fd553c0a81a1f3e2637c1bdb217ea27d8604f9b094207f7b4254fdb2199c5df7af9131048ea982636ed01420d943873127c5a088defb681966f9012106da909c946e4925cf82ca6904db11c0be5a781ecc2fa27711b773603b1e427516abab247a1c22b25aa15e082591d6e9c32dcbe09778579d48fa268325d70e2d56b3f4aa3ba75bd3c13373bde7bf0a3de17a6a51c8a37034377f30346f22b39f2b4f25ce06a5d006af192da77429d88ef89fe96342523a27061e4f6a330619bef1f460596c4efea5b3095e8cbff9bf912f8f162a1e9ea3bf91a23e35335269fb3bb60d5d2fcbbe735f49f31385dd916dbcac9b0756397c0e1b9cc5a23f771dbf4f84e4912eb9ccae022452ab17b557cec2f162f223f331765e4e7aacef37afcfc00d5535ea52f35228e64e4c52965b863b4e13a6075bce90a68fa32947efefe16c347f5720696171f7debd326062eef6954c2805fd04dca8af9772834ec360ef75e9384ab017347305df0de8e1317cb755894cb163490a303d9e4911a32e02a72eb17363eded43011d4e60bc869c39228dea58d5a645e0862aa4a85d3edbb568094b6e5f9d1fafe6cbbab2e51b7e059f4e79c74502f05e71436027cbcc655300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002527dbc304296c8f08af1ec4e4a5b4aef02052fc4790545f458a2b5cf016ce0ed6f6d0b0e1901692daf6292e42df73e73507350cf61bdf0148b208be5a708ea41aebc651092ae6e64574700c6c8904cf44dcea0a290a631792639fe1564d9fa824b147e6ad28a827872a5aa3a46f7ea9f8b9e4e20ea02e2b6b9eb9f5fad9cfa7b01d99996aa4d7465bcbad4f55fa4ffe077dbcc81bd699f81e65883e546c0ffbf2b9ed2b61e41c0fbce633ddbdcbbd872892629e833fcefbbeb33e9d209e54adbc74a15e54c9b42f7f73a2359092294337940225d9fe3bdc0a0301d27f6d968a385521d47c64442cff9f2a0d7b681749d6ff2ca02eeb21498ba927a84c21b3e5db6f002db4a1bf6bb511407905950ae7cab1d575014c47c54c750c14fa15e010ec3e9e92c5dd07792b40e6dd9b5dd62210b71c89b19c913ee887c4963e80cc813ed6a8a6bbd4722b8fa663075dda109fd7e8c023c8fe36fd37e6351231a5e27ca4ebea03bc5cf31e86a00b3b26efcd02cae9d87835034ee3b2b9a2d5b7df0c25c3138cc71c35256398452a4621e8d423885a7fd8d9bcf12b6a1ed9eceb9e8aca1a669ba808053779b67f79174009bbec5ad1b4bf80d328e811e65d13e6833d5100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008dbc4f5cc4bfaea32bb6cf90f3603e1a103f57d3b7d0b27807103122710c2c808bf616ad2766259f78124976d17ae4fdb9e1ce8d27a8396780bd8918b136d1507781616839bcd746bdc5860f158145f86d998588657bb2e84942cdbb7ebee8323b73946129018efe43beb9e2b5b77c27f575490f0b537dcfd617ebefabff53035e51656fa8791118f668e6173a0f9698410dacfe87477cad6b8caf248e4ab01e6ee5687192b4f2038006bd4dc7ba95bb25aedf2d61a4942f9ffb1b95a2dfd299e97c9c6f749db59e48d353dd9e38b3bc418d3aa12820419261d7871368a2e008c4f1046cbf46a8de56e714363f343e033f75194511c2d6749d3ea361de4f8681874df45134e5935d7d3b712e09c8a47e9672b01931218fe890f080b89716fde08f66ddca9566ddfded41a099e4be11c0d33a4cefd27a5ee0e8bf07823605ef581fc7382568dfb8c049cef17f53a92dead157106316c9f268ace5b495a0de8aef746476a100e9965493060fed21533fda4f2145723f7017a202c69ca61e60db5407c3273a74646a6002858240b8e0f412324c4844308d39b2c86b19fe0dabf5a3740d48471f01683eb149b56a26d1530473a128462f2a18a1ee43d03912cb7c4d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001374a6bd03d517a71acb4bb3355c6f93c4b972fb06cd4af3aeebfd07df58f02cfefbdc5e469153776edb7a8d60f5cc484cc49fcdd9394bfc5d4b4f70addddee667383a85f3f7c8025636d8765995412d63f5b470f36c86a3f41f0df3046dc93f1629af9bb60a28482e6df52157ebecb6c77d391c1dfd0b07ab0ac1e10248ba8d10a085e9e04ee60fec863d227cbed87ea4197c3ddfc1735758496fc43f1e7dc4ca2440b78eb90ea69ad7c56e996cda56e1976ec8e422c29efda60d6e731c6c4c60002d68dc08eb6c665cab43f3c1e944f07f7782b2107573cc0a8e480344c4dc5a31434b3bb1f1d439dcecfc0b4310a309e19fbbabadc98047fab7c0d9cfc578a4eddb3106b38704cf61ecc3ff607f8e2074f54828c8f5e926aaf447be850e6620a0dcac54440a383ba870d1ad9750ffd645780d7b1165d95d72a0d5b1ebd681ace28bc663ec0e10e3c4d15b255748f6ea2eed24ad0ce6e4f5f5020515596a9b5b762d47e261c28a9510e50b59f3a26ff82f9638ebca133b2680c79ecbb974c2737b25a3e65e14e3816d7012c40f04b70817056b2458ba918512ffb0a0f2b0727aa020e886adc9a9d0df507fc0f62e138954511af2157dccc0429fd3f7e49f7900000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48400415cfae831dab4c3f9a2aa766511146a530f7a4e35fbfce87abd6dfafdb3f1a090666a02e2e6e034cfb3713238e4dcd95faf4d973a35c62497aa389d8cf5be91220985f3a1b42cd37e6a635d519019ee456bc130e67c627e7e34396d66f290b24b6d229239b8de7975687ee4bac6c653554f78167309b8338063e82a1c16f922c892cf0f6e6a51f569ccba6fb69a7b608a0985a35666b2741727cbaddf0e1db03e7415338a896c6433a9f342aa7f14b78dffd2f481230c735fb77f91feaa1d608affd98dc15b76e58575d98490ad37caa4973399e18854c964bb5d45edcb7ca2c88e4ede0904b7925918b6851dcbcd7a928489b6b899d27ce11e3ce17966bad24e13e8415da2265e2b3c6c2f0501cb098216d63f2ccd0a6daeb0886287b5fc829a1becb43ac72b15adbe89bd6307c78b151f85521928f8411ea47975ecb8e9000c6f8a02a2d3db8e7f6c5cb1cb59e543938a3e0f83d5ad16a05b9883bd35ce417f4b8eddcd9748bb168d7e311dca246a81a117c9fc7334edd5c2f0b358a7f1124247893ffde5be85026074515baccacbd0b54fb7393af08ca151ad1d360bcb21229954723cdc36a900bb712fbe5e5500ba5f161080daee968e04c4c1883f3b211d17b29ef8b59a4fbf2db45d0571a8245f2ae278da8aed1d3cc9f230ef68a78236f83dcfd9ddbe341a8c42fb3b3835afde00f135ceeff71e8b2f29e0e98ac2627a5979c35ce7aa47196679d50a5740c283a2a71a77997ba5cafc3f2acc966a102f53ac184c280ce064e243bc17a7c5f8389090754785612dd0d3238fb96f39e2aae242fba779711d654d6175e8953cbe92343026699b82e8f2db41970162144247d98f22a4c2115324f59e735e325fabcf14ed6b1ecc290247924f332fc6efd0936e4f00b5ffb8c88b406c74670c38b8aadbd0fa7412f7b8027f9de5fb5a2041def73cf728340d112b1e21b441b3b735fba7558c7cf0b63ba12bf147f7503e41f532b7c7e247d388080446a033c8ed6e503f78ea0a4e74242903318a53e1e821c9d48da147b06028710b898aac385a86dec1736f95babc3e616b3fdca58211707708f06a1eb1aee91cd122737fbe025a321b3b6ca6437b02354cef15a141ba2293bed07fd5f35b660b470cb0d49789d0d1dab1768ad4ead94603b4f1baf377426256a3237932db49d17a602679b2a95d1d407b0903a642b957c5e4b77c229a622cf8ce0f04091592d5ef44cb07f9ec1ed324b5a0bfbba913072c8fa4e6dfa7811847c24c67b5cfdaf46d3d1ecc3ea691e921dff29cc530d7f970d4a42c960c110fd1f0a376e3ec614ef61dd77ce8da9a13cff2d694229a09ded5b1d7fa69171064a80047bd222dda035c80673e3950822546bae7edd17c0b9a8cd682b420c0b253f55d5b3628e35d7947e7787f67ede3d3660ad0b95337ca10cf3bfdda2689608803a9f71c1e6dea7db6f69e65eb803b55bf963389e6f5302fcd867563d2da625ad77515be8bc47da7bc53d3cc0cf56061f2f1ad4754f03abdb9a78d62400652935d41b10574f2a750686750745be39e7bb2981a2d1a5544471b9719157082e1933b7ada4918d5f09b04049716d4a19fd20253d60e075d736311dcffc8e0c742148bb8cb03c32b184c9ba9ba80b15dfb8b63e868284a9389c4f1958ba600fa825f9d374e061ac84317f3ced203c0e956b6d6f242ef465b386c61e8f99c336d810405bce0945c4293a661c38123ee6878e262eb2189cc05a0cd31aeaf4baea04150bf18573825206fbf95390d433e50f3d7657b1f7f3ae9028f791610c6b9461140720509bfec6e8b7f9b6a112e8599f9b4446691af3343590bbba54c10f00701ab7d01cf54f62599bba5678bad057068b27af85cbd8011c0556b2fcfd45019e1f976a8dbe1756767c70b59b3514d48a69d05aae69a4908e723ac7727678ae53028d0c15bb066880489a60cf77e9663a42f3dfec546c90bb554002c13d908fc421cd8ff91272f86723f49749cc94424a638b88fc9bb20ffede3d35c5080d720208e00fc6bb639b70b76bfb6f51b15234befb84721b38cc734872ae2af70d2edd023e40ef522936526d3d8406851b4122487eee0bd7e0e50bee4af48a8f2e5aa7198755dbced40e6a84c343a24ad767513d67fd4c272826f1e5b89d2f15ad2bb01de373ded7825501625edb9a4b16c59e311426388dd2f51cb177392693ca63d9163f176f16b7c092cb129f63618b691eb8e598a43f140a05220f888c77f10ce4199058d33e98c54eade12a843ba146ef8cffba3bac94105323b7e337c0c1c58213ad669af9fe3e1f915255d48ab284f3d5b5742598d06c6cc74f2809a628612018a5402d250bb0eb7331c20b2267e0681d3b4b618ee3925195e9fa0f3666b5be2939a9e0acbac6ab22ddd85b6c850ac86c16cc2bf937088c225ea6eb70ae71891c164cc343c5a4d7545f91d5baa3452be8ca6c7b857326c45bea85ef0c07044d2ca29e57ecc3d0e1b08872578e50731f31e3a7872e0e337ef05b288368d122d2160dc1f291678eef105687353d34d10d83b67b1e0b3af676617558e3f8bf858a0808332c05274465490b816bd05d1a4a36ec9a442410022b735c3e0b1f6ebd7f08df37094fa933a2602f41c246938771ec988bf2036de0385422b758e098dbe9302f90f92362abbf67ec38ab4c00ad4cfd66cdd48a9f8235c5ee47456d86d7b326dc063a8b2f754f426fe65a405b720a74b57645a4a49fb85afc4db499d3ea1b2d6c3584ea70138d0d25264a05b95fe7400cbfc1c4e8db224b1b0439d2c5a3e11314eb5cb76bf762724cd6c436abaa344e2dd47ea9c1c54dc8ba600bd52541091a1b56834114a9924b45192fa51e724892cf855a36bd004c5ac932b153ed52a8401f36481839aac2040ad0faaecf433febae427e2938bcaa4ab0e3b09bc5f5ba631fe7839aa351258ef5180831bea365f41d878901511048c76d53d95434a50795066a63e6d34d66b2fde62019a15df39464f87b873e202fd616d2a72b2736c7fd10ce5b1ca24e5888ae48302758e0d5f602118688bcdb1207525608e85a3088200815f5bb08b26eaf66f6d8dc7b9e1d1223c8b1e3b44b19d571a2b22a91909631200f5d595bbf44ce0079b8364971dc47057ddc15517b2371b9d9f49e47dcf78b09bae6c4f11d8c29949f243069607c23b1a26540f2ed082f9a6034358ae8f00914bb7f81e967fe7160e9c6dec731881366992d625de73e5a4cc66eab5c1b993b2a76cb3e0f45bcf056689830285a93112fef05e553456eb3d596fb18047b9efb2aebb7c4d8eabc66ef3768a38f18c06dd5a44ffcc2afff399707a706a3a1695e16feafe3c05d68d7d0b583cbf77a18f367be9bddf8b2eaa1ddd73d79f476a5a9219e1054675017af4739cc2d4b63774f7a5d9ee93efd7a628b3591a05b7938632dfde94f292a121ceab1921d43fe6354aa18c0a390eb128beab19467d646ff6e29faa929a06d57e34bc8f0b6b06f9c52f6ab8336d85c077c7d6963c45ec9206501a39e40a88726d1501b264383b8cca2a96b3e71d1e918da05c3558d2f16d7932cf4e0d149ad5502155f29dfb60a06c24f0a3f00b6d97f4f9ba6098d56e6df98277fb02cbb654ebc0e6bef3eff5545af0aa64f0968ee1a23cb113f0e9ca51d270a1193543599e33a16cdddf1cfd1c76f931f5fc99ad923c3ea7d5a54955abd720404291176575a3d5d424cc97bd20614885af5950ee020f96091f2eeede368670d458cb6c0f4d268fb66b789da757841c122c51b7bbe7499f7d5a22b9510bd351c90b89cf6d1d3107265bf8c0031f9a7bb8bbc73f5aeb61b91ff554b73b192472636e6e08f4959a792b623a7f75198345e4e7ea905b4841ba08357b5894b50b705990ec3f9235f71e0da9ac2036d11b803027bd4cea7756c5c364ebcd8e31bd528fc9d7f2e530086cb9449ae6aa66baa1a10cb470c1cfb4ae672e3c3728321ea052af30ad6955e33b926bd94dd45a76e35f6d8ab77106081334e35d8cc4d9018035436dbd51745a33d99c761c4d62fc72bf5cd1acdcc11a98e6ed3741813294021de8c431d44171f30cb945d36b93f156cbc14080567be4d2015c85170f972cb2b4770247951e91986f5e573dc97fc8a0dd4efeceffa258529494c381e026c9e1c4e50102bc11cf65d75e54e28f77280e7b58aa7e854e80f63a8f073d4afc8460f489388b25b5e8ca2e17b311b3e32d3940af27ff1d063da121c95baa97b74de3044e09c41d7e047e983c5c56a58a58dde32cb26a986f349f470deb11d27219f0800254a285f4a5278459b54cde61dc536b23c9ce0d6260233dcdafacf0feaf50c4c44edf6b5d8243ddd70c844a6c3693d1520ba34186ef274cb5c0fd62a139b175a9320433d8e324a83e59a2ad05e7c33bf07459ec0ebd7274d8a1f003b7c3622fd3a923ad03098f84cb388d71d4992a02eb4ab65fe560d11815d9a23120f8d1e58c7ffff28fc1de38ce71210448679feaffdd28b1c2c8326d7aa40918147a61c186a58c77c186bbeb4d9d23278fb841dfc1cc6e4bdc3932d1fff896db6af8c05db9993250e090173497523f66b0d5cde09fab9e0e884fbbb92a188c7ddb487078ee91dcd263574a2e00bc0c6885d0110fee4aa31b7e431a97ffd854d3566b70d99f85d585912c7f7777c69e252c2336275d148b8e599263b4abf8bcbb0ae55126b2a3a8a082f12e7fd9a51962f931c26a95ecf7693fe21f9552783888fc2db086ea7e415d7d595a3589efbbf4346bc74383cdd43a9d8aec7162ffe22d7208c2c6c1c8172388d8861092be53411ffe61c707c5dae6b4083a5c4cb91ea15d98329d8ca8b40f2c6cda5954c5c74b8624a75241b1ccc9b185667db646b842af73c0f837034a5a82637008e8b3404d1be60c7ec19eaa0d7e91d1b0adadef83ea5092d9a1aa7c0d062128f7768fef09e1d39886c7836923375e9d1a3bba24db7529a0941b5248cb73ac95877892a17a6dfee4638bf735aa1ff844857dfb135c2a90400edb7b38c165aa19a3d06eb3168f4c769086f1f299db4f654f645a402b101cb29534539f47d574eb59d20a5eb894c46d39953ef24739f2b8903f8d4396623b51dff2172e0f05186bc0036485f7a0c4535788f3040bceec7bbcfc5f4cc6b08311e5970896f168aebc9cc5bf31fd545b8608e1b70192b242e46b1754e87d5ab691ba5a5b4434424fd8c6d164b2ac78335c29af445568fb1b1efa0e9daa1b956bf27c4327f1c19c4623dd2599c4b366758b70952fce0eb7211e574228ac4834f9323e969ad6be66c0fd8aad0f4a3c9bd2379a20f4a6b7664e5c226dfe4ff1a817e19877c0525ec1786f4fe9c6295eebc465849bfe34773b4c0f738890c701bfd962851b970207e0803651e03ee078672ebb63853e0457ec12f14c7b53fae7d58901af449081f0c55d768870c6ce6f335091b57e330353389435f1daae77bb22de718b61e806159a1307cfc389df698086ac94216d873b6342db9cfdce428cd173c245c3443434e8d5244297116739f7135f8636335ba68e8a912594efaccccbffc05c0a32c92a6b523b41cc725c7c5b650188780c5dee393143c5ec1151ae408ce194b7d64ca20613f1a6d30988b4fd235aacc42cf8b73f1ede1c37d90ec8d310e2c69a70ee7fb16b8104c98607a3498cc7f34d53734a57aeb2f50c1b62668dd0e19d119c1d113685f7eb413fa363d13c905acc4326c4620f345b5f18a08beded229c5febb4cd8abf509b2f6c1422d9504a2e70f3423e9583340a5511592c21aa1003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000000f118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000000f0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000000f0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000000f0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000000f29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000000f141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000000f25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000000f12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000000f2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000000f189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000000f1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000000f05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000000f05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000000f14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000000f03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000000f2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000000f1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000000f1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000000f14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000000f2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000000f305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000000f280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000000f223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000000f17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000000f08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000000f2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000000f0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000000f0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000000f172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000000f0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000000f05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000000f137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000000f2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000000f2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000000f2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000000f18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000000f0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000000f204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000000f0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000000f1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000000f28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000000f1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000000f21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000000f0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000000f0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000000f107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000000f2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000000f09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000000f24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000000f03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000000f1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000000f205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000000f25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000000f283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000000f21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000000f094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000000f0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000000f1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000000f2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000000f1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000000f1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000000f304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000000f00000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036ebe42a34d2df364093e1b78748626adfca608d98fa9eaf265ce013474d911a8d5308cee3c939bed7e6b04c0c03746cabb6ecc36ce56551f0881f88b9f0cff22448ef879fe1ab1fa905faf66fb012829c822773ea8772d91bb02fa5788495e01291d722699dd5587db903b036a9c26979d12899209fd1083035ef05d2b5a0727f204724f7d3e7925f0922667c5ba45c0c6d1c840d2a3480b7e55636d6f3343f40972715c9a89cf2ec6335dc60749d2b1d06656cc7e199e04cb175d01a32ca47aa4bdf56400aaff4fd3b3bb90afbebd2171935acfd33844d9751645377b74e8b3932236e7b6209d182505e9ed715bc127597ad9ff9d2f8c9ade1d0293d7370980d190f6bf290daaa2be93680974d2fe4af2811cd3b68e00cc95cced10996d7e9167093e14726941dc5677ba8fed0b2470e7f50f42fbaf39f531eaa94a4f75712a953ec73f6678265148a0fc1c6694511190f6b080fe3afefc30815f3b6f4289dad4691cd484829d720378848d83c02fec9bda017ffef6fa3341624a8d81704890b59dbe6c867db3670e4c8b196acf627e1dbab45318872bb5d2625f7c678599613b4ad9e765886a4ec086853416b9e2e64532b516250dc07f691ed14c017add00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f27af0eec1d4ae083b3dcab7110f4a5da3e79811599ae0ee3b901f08b13fab0c677dc3df348733bcbb461ce461b731580836f0de8c20a8ebebe05d50edcd62376e7032c4733504158ea0a81f2a3579c19997bbf46a26e6dbbc8eb77f444c1e06736f10e5d1620332e2bbafc202706f2f1ca7c1427de06fe7024a713154568a919c04d01d7481dbb8aa9b844a3a9e67328b9b81756c5d54920a234c00e3461198d6b7d309f89fb9d6234f9ac98722b3aabcd4447a66908924d6f75ffdab3f8932696a5b0536d147023e1a675059827783d36c5dfa90947ba52153854b11f86ed3276a458dcce4cb2fcc126ca50ede51a3742da82b8802c85806d93250ccb7566f293620b2cd7817cdedb5eb815541d3d8fcd0684446e1cf96d8b2e1e8054403e989545fb1a307377ede7930363f892c4c2f53a617d63d32d27e921c43c02578a959453ba5dc4f609f42de6145e0b6f0399ef2021c3839f6409c473f7f3ac816e4b57c5a0a984499983f5aa618cd51e657ff4f6d3c48adb43fc44345f122b81f3642bf8a46705faf654bc24c2d45ffad0965f547ad3c84acccea3b520806e343c0099ec2a4b927dc1dc1b1520d2ecffda1d31bb0b9681191f5bcde6bc5f799a76000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099be412d36b65a661645fb3ec4fa11b53bd8eef5497fc3c87236fde2c07e74fa321a63f880972992e4a0611fbb9d2b7f3e5f1b532a512ec171182a58bc7d5d611ee1f2867185be5e2ee66592c03b6e0eebf266c6b20c844898c4efd616ba06927424076e774e16c9fd0e828aed9f44f33b6400883fd498d31a36ae1ce2f6921251dcde8de6885bad9050636ed45debcf06858e83db3db8bab8c5db39eea41ad0e5661235c28dfb67c15d1c7b1f35951f34effdbfe2a1f0b09e0d1adf177db5fe3b42b8c572d1e8f16c181bc63344df21725f01b22b7ec2ae6494af7eed595a87bed0b942339ddf3f819fa9d68e5c67ecb49bc40296d503a433154944ada71a7ffd7d619743e738c1c1a9a35f7071c78eabb224daffa16fc9e2c51aba448f53d7245f8da75382314faa6728060d45ec027f747f94571ffb2d5ccd6a6770367a97901a50c3a0d155c27f57217c1cc989fb16b167f0efeb212867c44877c4af8b15f8caa8a1d1761a20ff638a194f6f61f8112e02c27e26bd43cfc97f366ea655fc983f9acdb524d2f7a469e0bbdd6d22484566477551a38ae1f710ea30812744263fa46ea4c3bdb095f6bf5e7153814faded33f91a6be7465903e777ed4c45e1800000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000917d2724ef7ec843d9c49ef09cc2cd21da1b81e45e14458eb4cba4714be8259981cc61d6c8dd9cc9048a487735f9d2176d9d1b41ded0ea7d60bc3f37d0ca987067f157d00ba757618c8e2c145662d6b2522ed4ebc8d9305600266c152d9461996c1d8fe85ecf9d16adb302ea66d0aac1288a7dd038db4940a987aa2d7022b4d906a2a5f8622fa0384986db0d48eb82c8ee61088d4eab87fbfdf334df8c57ee71f57745903a8d5f44bb58f2326c6009abb978623ae3316c05e1d95360d4fd0d8eadb5c8bd19d3c297009bdd0c3a6ec683c74a09259caef85c9d2c42ab49a2b8d0d6d1d82cd31ca4c1c61d42919b2d1014fd0efd6fb0ec1edf889ee48c2783973c8e231acdf9aae063e4edd1ff5baa7200da361994cfad2d8cdc8b3e92a490e48ed9b68a32535203128a2c22abe4c45fb2d0177dc2ecc605437bc66a274b1447511353b226b92f60490e2dab5d5ae43ff78a3c12a944b415dabc1cd7239c4d3b773f3bfa21ab81ccafcf65fd0ae1193c3f2eff1ccdcc8368494613926a4a7fb33508ada8303e46005c87d808231ae20a9e2c4fb20c6aaedde0f6048137626af0d7089ad80f06c7ad7c606cb9071bbf02488ce80e3a2c327f2e68513b12835769c90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a92d2b589077a157b11d5a92626896f873b3c6613c9d2c37328dc54981db8471facdcf0ed4ce2b47c70af37cab0a27120250ede336bac257a143ff8f2c6b9610df394967164d9c78fb6cdc4e37971773b070e3d729441df30406ed8bf1c1706818b4637cdecfa39c4fda4fe5b18593e95ba3fc3ef121937e51d8ed97c025bd912eadda855c2a11007feb059391a8cdb7eec67c8c5b7681059a760fc9db53aa34cc16bfb1271a3532f756ed7ed776795dced013b5defcec7fa099ad56866ea1e99243b1d0f57ef1fecaad450fa9146f5c6ea1c6adb0fa8a9282ca5ea94051b7be05cdeff8000203c47c55924e46c1e5b5c0947824d20e46a06f26c0cd10dd9e0768d75a696f4a4833aa611f34dc8ef04444625cd2020ff1db31ed87795eabe51e92a1dc2de56f0f33615b5251b44fd236b7cd9f6039266bb30852a4fd92e64f64ff57bbf719d5719c21bb13e47e034aadcbdbc15a55195b9152a8c2e3402d4cb21599f7f2d5fce4e8f8a711f3acd04fbb2f1d68a4be498cc900eb270b9bc29438774edcc9f57668e9559219c85e790d8c1b97de3aa23a13d4cb8b11d48845a6244c9884178da3668dd049e9d57a01bbc73238c5e9f84ba80737e75cd03829127900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ae54870061f084343a00461f3cddbf5b10e3e6b2a25c0b617f9a0b2d391d8de474e5e6512fed273a3b3e2dc71b199ed58ed41fdefa1c327927a71399e02152d33685c2fd995dddf83e82f43b7d942d18ab340f77de343bb4a71769a661c576fe020af2486089fecab7881cbebecfd748f8fec9ed179965362b007122427e6e4d574320ea3e5531eff33eba0cb590fc3d029195216037df344d995a38a670085701319eb37dc5eae3f48dbf2446ca7fdcf29c9b42c50bbd76b2a7c5b7c36c3075784c8657766b9bf3431124eacfc30438746569f36db93c2d0f60847458d9729e19f2385723874465e5d63d739cf11dee3b5f0b392d537823358dfa5db691a36434e2bd33c340363f7114abeae820e0a885dcc90dfbb605dfd2d9ee86d2f9859cd52cb0ffac15220d79f29468911d55a3c155277fb6e05ad79b509d953ed35ccd946828873fc0a6effa00c9f964c60c7bd94993dd4dffa49418524c12931940eafdbd8ba9eadc019d7d4cda5e6193f21399fccc339bf1187d43e15f22b0c41f725ee4700d088e8c05a1df572fc91b3b8bbafd619172bfcab27ba99c1f9001ccdabe9e489d59e76f476f717819b54e2a3e1ecc6ed5b3f9245705aaf9528f403a400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e92aacd278ab1648e55cd63a207809422c3aaeff21b0bfe96af9cc6a1e4746df71de24d153dfd5aeccf58f204628970c6fc9870ca1c8a0404290da55daf885732e063cf928b5d53285a9d41b2df08f0095ee6db212a004210fc51e704ea479e57abe9fb1f8f2393ac36f0ba75d45d9d95eb907cd66b4462779939282f3f4aab4d35d6ad955588ef8d1bf254bfce6c884e2342473e9eda2d5e5bf100d6eb918c85bec153c8a2affd579035e3e897423c2110b492a9c42785208431e457382f63653a63cedf5397102fdf2f303c7918510eacce2b6b459e4d489dfd839962aab843283b1cdbe108c675fc3a959549b600ff032936f6a3c19587652f9f32f3228fa0e00ac55a629ed015e6690acfcbc6563abd954ebee375339cf7ab49f8fb05b0325011e097fbd5f1110557846c157a74c3ec7ab6cde4b5161cca99b0d154e66e8a928585a7e4b6b7eda764ae594a3c164591d581d8ea8be2dae1f9b6a55bc239e671176bdb34aacb0b1538c425b4c0d9afd5d8ca6229a477e0076a8eb7eb9e143db772ae668a49affa2f75fa0f3b9c1b96a126072fa68e86268762e7e8cc1cf7287d9a822a980333d644dcea300c5b150242902a9ad5591766cd62a5bdab91b200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f0a152befea3c81716e7c0b2aeeb103b7336ed700f558d79d219804c6a39b718be47a8fa7f85773116b2498008158c9e17f50ff2c7c59297cc2fc6f234f7215d7cd8edff0c5a846c6b4dacddf32e927a76f10e3ba7bcafc9a1ec9ca80c3537c47411ea6048073fd85ca7f474595fbb6a513fb062df264dfcc35cbfb15f3606e7cc54bb815196849cb0fc4e8c01d59cb43c265e1c43b5da24d9f2dc923532d303b4730e905e0001f580edb84771dfad599eb447c0b03c62775e58c3f1b7118308e9cd60a88a75b926dc83251e6e803a05b70115e6ed92608f28008b48af4d570de19fb19858bb79e02ea3192551692c3ea8e37beae791156ab8409fab333995d0a3509f4a04f9bb195efbc8c6679ab03be8acf3ef963fe639bbaa78cb9a7ece86fb9fed783f5942d63b49ceb1cb8a285eeef700222ce085309a92e179d5bb532bf5a3ff7168a41cac9c2cb30039ab875d8670693dc1526559e515b6228543ea417d139e9da3d0c8910f6a792db198f301ae5e78dced692dc595d8b42e68e09d027f0da402efea85b32fa8c2c8defa599c5ddcea43b9c7f547ad687b188500785757ef3cf064734a6da0868304b7847579330cc1141762c2416b268d01270d779000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020ea9e125c0895d84dc5588dd180def28976f9d3aec56c39f96df08ad19d9a10ad6048d70cf97a899cf3985fdeb19b9eaa2f9a56b151fc06238aa264bb192512952681c77cae93fafa3becc159331a02250a5ec3bbf8679250788974a7252e1a23df77606543df0231257dd960d83936ecfec06d335f98f06aa3c0fd49b75cd8e0644ba7bf7d50640a98d5548b3b5286da1bc66f52fcf302efac14d3ab461413c795f9b3e1ffea57e57a728d77e1ddca8a2f783c8248ae753c831f7f38bc90ddabd1c8bbdc6b329b4d7f7f05c9c51cfe6f8c3a11f3f16d4e2aa9997b0ec91e23d0b517e24b620007e3741aaed65510efd227f15e86677c0d959969809e524e18c04ee6235cb6ac047e739932a1fa0607c3a6b6aad2d88066121140750b95958b3f59a739563f80666f65f3e92b82facd8841e4a1a495cf0f918ccc898e4b39db9577d757d5508f454bd50b594665e5d1e98ce710a394929c060654ef63987334b6ddaa80b0ea50bda85b771f3935460ead67a88fc6e68414259da88d7327a9a29092d775e95dffcbaaad1445de72c7954ef1204920c39a5f982b1f796eee0b1f723b156b03c422b9cd692e94786471897dd462c64d030919e0698448cc9ae1c90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0005aeb741ca588a5b57147fee2fc704fda7734b7ba34712482651eb0950a3db26502423ec282ebbd1d2a03efcf93c04e252b5c34fa170782a9d13f665a0e7603084675403d5a9857d186458f9adebea645e4ae978a1cc413709d7e25bb7397d28f816db2dceeabf6db7aa32ed722a4d1f9d2456e8fad4322c739a800b8a0472179a6248e9c0f9fc66fe071c98651326dcc05b5d368f25ec0c157a8bbc9ea499ecca1e215bf2baf28e08cb76d75da4cc9ebc4d48678220bff5e3c77d00b3990de664572ecd01191958af68f6dc7c875fd31c4252a680133ce66f5865799f10e136ca03d518807fb7e0491ad20a89accd51156e8713c45da56c07f5b98a17a7f64da1c42146ffa82736dc23bd270c6d005336f981e7136c5c94d09b369ad869203fa08a12fe1b8b9311b6ef55a1d4548742525542eebaaf40ae9fa789c1bb9a72b70b0f17adffbc466667bc7a00ee648a9726700b954bae289bc45e786e3d3bd2503b860e9a80edcaf5cfda79bdc6b0765881367a5a5cf4863db0951d6cb2eb80e6a52c485c6500996c3b6900a34b4f6497dae9a5688347d05cc86543346e21e3f413729d02b1b34ce5f737bf56406ceb2b93f3c08b7c1e67fec7419427ffe190000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000239b3f41e551ad0189ca4f2a9575159969a41332a39efb68839602cd4567ad13d59882ae205c1a6c1e82ffe47499ba5f24457271945e05bc5e380522450b463a9149c87f448257459bda05243771da3b49abe4218bce489f0973c3d0bd985b365394ee6d5b4965d8e2d5f5e2a39f7dbc20e94a829a879742213e8f39e1c63bc667145d89a44628fb061d2fd6ffabd8ca8258a1387e16679d027d9370fc361c1d38462e1c1df81eaf414f4b96a70c1dd9eefebbcbb91fc8a0a985bb7f8a90b99239e91d5b8fca086e23112eaf48d3cd4c27a9806a894f304ca01d3919f852af9b042aaf916aed9fda71fd0adc53bd76715f4871723559f825464cb2f0924f2d970fd18e5ee65f00d6c5b291c167b05866c7a9b9241e89ce6e25eb4d9b829e042a36f0db13d0d82c8bfb379cb788d42767ecb52c66c201518efeeaa53b23a4385bf7679b581b1c7ba01a4c91d7788a7f06bfb5ac6b5cb1dc4c6bbb5b5305f8c0e01d1e7ff73a93d45009ae1b19835dc01f27ff17e40d90222ff48a003dd10adc4cd3f7cd9cdd1e484737a7a6d8df4e71c69513c77b1a7f36a556aea06c6e6f807b775b53b1315b195db13e227d0a46414a9cdb45391c63efdbd6c4abb77d8046ae00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ca6eb3fd9c2b7092212d04dc440f6094d18b30d2a41147d5335fa196cde76785876adeee5d0bf6d548ae611fdfd7559c4b97bf7f63cd005e71d236c051fe359c881dc8bd57c5f8b183801360e04e86972c097e9ec5e6494a845777d27cf06100b92de3d9316777c0f53ff41efc94a6a7e1fab2258bf82f2d1b3c8ebeab4a35d42a00816a3e67021ff81edcc6e4f759955cf9af7e313a9a24fc2ee55de811d06d61e5d72f304ccdd7181ddaec073c64d377fcee3d62515464cc52e3f1d0817523de8bb086a018d45953b6f26a0088ab7e766c25ad5a55f3c2f936a52557767a3ff80c479693ce94834ac87313f8e486d04d3e5114e71369fe1869aba3fa2e59844e2a0ad1c3d55b8917ef0302115aa04715d29dd7c08c1c72472df3875a97f474acd798336419c252c0369f0344e8ca0d581d8e0494000974d353276452f788486b22a2c8d6dd7e3b27ae861ae73e5a28a6aafb3861deb85e650b27016e9f8c0e20501d63c1b7f5773835e2ea4a4cad67924c71a1b466edc93585b1f04a63dd56618893b10da3d63b5cc9ef5d302ddaed03a15c4fd10c85b7ecf4f62f882b76dedddd63689418d8d105fa91224c01688e78b7eab1c44ff2d73b85116303b9d49000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022ea9926378404730c2e03dabd5188f90b94c3b25126f4a6867d304d5d36efbf772b3665ff344f7121bf4f432feabf59a8b07c42421a22dd35b6404de8d2bc8e8f5feca04465736b5bcdfd8f8b2617c02a9d155bc1e89083298094cf90678d8bf03cc3b722baf508d7005a4fc78dd56b735567043674b77a16cff0059bc354b9771e3826a486d77062d354e3266357aeb3c3220a7a42483a81007decaba91831373c3bffc1aef293ec5c40b98ba3088c468efd454e8d11593a338f8917c721ce7623d2f73c3af8869e8110a73e09d154c254e0d57db4432ec5a17594d7efebe472a9a2300aa2d457d1ba5d1867b376fb9052a4fdc8105f2a5f7b519d931449052676920b36fa2d3e18b4de7b54536dff27ce8bb13f150a60494fc3b325951693d5bdbe7b791cc11e0f58b36dd8ff846fd44d1306361402011b03078b9bb6c494cd872ee6d13740b7b29244f180d66ed6618a8533a2096cb06e6b0fd556f6d80f68a6f4d4be4cceae76e5a4529246ebf4a88c2dfb23644a9445a07f9037450c22fb697ab5a2a0df4260b1081981e31ad7f1f938fa2de2fe176cb5a924f96786163fe7b4f755d6bcfbbbdcb3f566c55f8536c972b2881973d6ad66bde061f85d72000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085bc8f9ee697426610136a127fd7e6f5e0d45811ace284ea832fec5eaa01b561769734d4327a08242e3a3eb80c6ea1b70b272e45a6192ad03f411aa5554763b307afd935b8e148dd47314ef8737ceb022a359fedcf4d2141cf3f46d119bc53681f824bee101c49c56b4d9053988d83a2745f28c143354770d1d881524bf316c25df450254bb0a3a85bdc163b45c0a64544d22eec2e590064121a920720dcc73f17d388f3c5b17d6284bb2472b466f6c63a6e58eb0ec76795d57209b50e6dc24900ed271e7e735e1d8725d8478381a6c423785475892a8941ac7e62fbb84375bbb270d2b5d424f4672919bd2877081e6d1b4b7bbf7beff79a3891141943b01a30e9b3132c3bbcf4f3b3d13c0e314323004293125a84785c645fa606392b995e8ff347218bc9b5006cbfe232752cb183ae8ddda04acb3eb0a6b1280e527b96fa5421cb5aa56d1071621cff85412251209f44c3dde37e5d44cb4f48f76e9fe356ccce02685795384ed8cb55a928c08020b51b6dd3983591870d549a893bc47110b6138260822e359d01c1b3f79f6c8258f476dd34f2a5e88ce98cd29459200e06c3af3ca46d946a785e102d093c5d25b2ddf47f3ff8ec9b38e009f40f0aaa0cee8800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f8791024d39f1bde387fb648d24ce05821d31ece3b821cbac28c229a7e33dd254806e11182550be2894c6596b5bf8ab85fa6d4ed2b065e1df31c862e5d33dbc8095de31654a865267c1f4a99e220d3fc3f091b31358c87f8f61c9274923ed3cf6ce469f7a573dd03dfaae72c99e8e4c9cb81134ec0242db6bfdd1e896e70828f9733af9c53d7caddec2ac83b1310a2c8c3294f2e02b9a6956b66add6ca3e9e103a2c7d8c1b42fa0c103d26c4833eae388b7ba4b8d41fa17178feeea72c39b0379b48ff01cfbfb2a2ae57c4df99d8c53c1656a38fc38feb1d5c8a92b1f3c7c9cb8836e86b15026dfbec95c2cf7cb8be8d2c9dbb38effb2950d00974047ae5a3a07b71f5cc18419a102531347839f6c576b4d33fc2e61a439e61b0a8fd8719288c9926b930d26d4fe1372abf1b29590ed15723033ac143a7e80c68bd3168705c9ed2ba917e9429b03a8f5109c4724fce892961eee642d47a789f0f8cdf89856fc88a2ca50eef5a7fe7c7f72f857ac8640877a28e1d6a6255b826cb8d448b551c77c288dc92a14d4061416abcf1a6f8acc4ca33bbc6a65c2445102a68a5b7b0c1b37686a06d43a76bbe900b0b940988c75ea912b8588118de5095781fc3e577e700000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000854a1d7e7ef8824672684b35583bdb533fda02ec2768cf7b80164d010ba613df11021744482f18d4918cd58697de9acf6f57c9ea0c0efaf8a3ea71dad0c35354744e3a83d8920faf0809ae9b674b71da2edbd5e6bff034f83706bcce2e4802e8cd187162f09d460c4fdd7d02dcf7587bc9798619428669169d775b4c73c0c08ba09c3353aaacf40e346275e182c25530eb6ff46c9a0e9d300e31f2c9f37dcbe41738325954e6a6f019e665deedbd8565665776287287133652c0bc316f41285e613214381c3e6aee84278349da552b65dfecc3044ef78b04213a6db22bd03c8793f529b2792705ad231364602ffc9c3cec8143bf1ec91c2fa9aa9d9e3879206253cc1056400e692d8c7a5685433949289a7cfe07f1ecd29668b818a1960b67b6ef75ddb7b9263150be399fdb4d903b3d3cf185b0de5d203e3840f66e1a0d84affa1a116da099058719b300511055db534ae5525256f12d16ec338d8404b4448d91f5dcd991390fc3c4ffa845f898ae8998025366774d4c20fb00f87bb714ad3fc1953eee1ef084f9de94fb63feec60589564ee256339b5c3e4d2dfcf562b4bf67be6f1363010c62284bd75fb976b039a07f9936ffa77c1f22d29f33243355972000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084354debf535ce78206e8ed5a5ff0c123767df612bb07015a273ebaff1a11961f4e15f7b889166a38f81cc81acaa1f73c7b96d3ce34a6e4494195c3d2aa4ffa1be836b74c1260d965c1a98255806f220106f4fae30d19a714b8c44c6e0a9df83901d8bc030b04adf9c1a234cf595bafeaae091fa26573fa1ea1a95062473355a1669ad26d2365f7b181ece9795277d51cad56e93ef0f59e0b3a82956161dffc3617716dd4c6ebe2fec050c07463037b51adc664a838ee02e1f674ff6da4a12cb7ce4498ca67e6ec57385dbcc7bd1feb093121c8530ada18eb264c571bcc181bb70ee8d35a5877bb0de67f1a5d7905e426c97fe048289df3e6e0c24fce53c1caae25887ca70213a79d93d89c4747c2f51f9fd509be4c530a4857699bf7b6499cbe51c14f3680a08d465102921a42ec86d4b4a22b342a99038828b9da248bd73fbf816269b5d60b249cab2dcaf6460fd4c01c7c5672b8ef3e31c1683c3317db3d26ae2dbade8a4d165d88e69152fe6361a19b6a0b15d3cfa1236518fca953cfcabe1857eda8e4b5721d8624b59604fea5ce45eab4c2b9180828f8b5717367b00d3ad6048e3142a18cc7b4f706a3c1b8618ee5eb070aeaa8be2e81d445771508cd6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092a47cb62418d413173bbfca551093067eea9e20e95b4f494287733f59fbbc103cddf0572d96cad460dad281c3feada3436d63be176ef717ab3ed2a434e7029e4cb5228e8ae9e119ba2d7d79a2fb058fe41d150ed230416fafecb77480bf20e7724246c8e5d965f628437eae3e7f6fd3d0b99e29d5f4f9eade2920e9f119e6b711b7c60b5895b5b880125c98946e20d8e00f51c6b9c58052bb0f66a834ba9e602cfd04634d55bdf2af33192f3a7e92472b43dbf3a3bf44fce87c52e2176270ba889648557b7ae6fe5e0d774ab157f52c2f96e7c437983e74d3cf19b89035ec6ca3920a5ad44315cc65ade66322921eaf2d23a1b80aa87203bcc4bc486aa5fbb6630366a886c99809eea1b5bf1302ef9c273d353dbdb7c5f9c87f8cb30772c393878ec2d0d372405f7571c08fb546a47e800d59362b6a59b11f2d59816a4c0035f9b1abc66462fb8d7f9bb2e83162ececdd1fce9453636c919972b929856232e69d4e119f3a859edf25ceccc9122bacebb55daaf05d5b1d9b19f0366bdd3a22fce21baf1462a92b82869ea9f033cd54f96e7a3e1698948c1820a363de44d1f31bf6f4fd10e1fc3a0b1a056e8c69e6c204cb44a5020097e87d424c2dad3e3ace0400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a11253cd0fd1b5feec6e02357b582caf122aaeae278081ef7fad7a97dfd2f064194548011136d12710348b8a55b839416e44d61cfc0164eece7432bdc6f024a3119bdd56f8a6ab49ab91c2bcf931c272d507aea4b65299a679026066117d170006de4832dfa43fe5bbaa14d7d138d267935c9310e3fb16b7443795aa4e1c85ddb2bceb03f4078efb59489e5be8249ff1b89511befa1426f937326c16c7f6c15e6c1e13a981020ea976e80ac28adedf84fe070c2b419d8c7196e7910002c6e40213c47ed15c61f161d1be198bacf3db663d742d16719199464de9e125d74143f3b1521f9f83b61a429c25ff8e5c21da97e091cccf02de2e290efb2535744f4ba3aa42b1313cb441e42ff82cc16d7d32320dba8667bcad7b5954634cc826b4f4208e8f9b6ee44b7443b95f59388a46e82a2c4544122d1605a48aeb6314dcb59d7eb6ce6ec6160ed664f64fce1dececa82bb049e0892d34d28e129d2e49c422aa2e700236f7fd07ec88fe9df75855d07a65cb8345694c2a8d48988f8772abeaf0669a992c29ad44e93d098b2ef94b638b795fed24880915d39047e34fc31ecfdbddcd3ff344e11dbfdad8a7925365e7a8fa8ceabc3af0d356d45f2197bdb49f4a500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a09e5b9536401d02348ef9f53259af89a890d556b6415a62427f9bcaa8dabb81bb40363c5e4ccd3016a6d4b0fe97066f1422f59cfaeb40883ebbfb00824ab618015e14e277e80b79f3879b099d89e2df5be209ce0858dfff658ac436a29db5ba0598b9bb53a18238565a70efca2bc784c9d9cae4f03073b1eac2066b8023bb07d0c7b0fa15193d6651dc717a5b8ce348ebcd9cab2fb7e4d4762df6fbd1b8ad515dfa2fc1a4bd2d7ef9bd234e8d22459df98babff3b222312f7a911e13205e21af4c8166908402e91c43481bf349eec2a7eac844f29b2b3ed0901b269ec309c4b6a4f8b14aaf56e1fa0a17c2cdd50485c2c3dd8b933deaba91131da410b6d8c584b4d45c7cea069008890aa6916a0750098113f2c9e4dd8c54f05aa8ba24cddb4a8354745dda7794ab8b305586b3007f9a2b9437bcbe9c95c134115f29d4e3e650a63bc4126f458dc85a54a63b41cf1770699508cc18b476208b065c608df7fa9d2da3ccaa11308b88c3aaacdd0b97cf76a2c72e91a1368983f1787f9ba50acc4df5669759097d71fb69100e131b1d02c87bf84cf2c88d250d4b5f603cfca04105a704b4d2cdc3b978ec331d41c09643cbe44440ce76901948ba156ddbc20cf6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093681c4c7e7419ba5227438e30c7c528f0a8c079ec8aab84e9f8373502c061aaeba23a2ef1e78b5fc0b8309c85d2702b5b980a67fe1803ded83b0aad468cf5cc054c0cf14d9ffe76cdff5963f93b40a2c68660bab78f901ef78492d1e6b399047fef9e88b81b5c0700fd507ec23c9d20a3317a976e49e73ce7f329bdd086c7a00e5d1fe4d810afb3a1a9843cf68000f4106f8a01974dc84da2fb2dc78d949b0e57b44807ef9bfcf0c6e7a75ef1cbbfd7c4c40bb0fc6fed687862618fbfc9352f15cd4da70841abed54b1a99f2624e0986718fdb0e998e4e7a0456939e90f28ce927976d41392bcefcb94974eb288478bdb0541d334b47cd3360e50bcc5c195dab6290c5240ca6e956e356c93fc522021eb1b2187da273c304ff2368848f3fc4ea2671a98f3f4704fb3405fa6677a4529c91a088741bfac041681ac3dcaf381ab1bfad3a34ef66eb24f5f6b91b18c31666679e082215fad49835b0bc68e1feedb264bee26b08d7a2ca48f4ed126654b7d05edbe836ff1f2b9c002dba3946df149f33ddf2c362c9c7604780bbcf728fdad83021d76f9b6826f686c6601963d23fafe6ec78f51630f4c83e3409237ae5f79420d087954246ad247d0b42915f8013000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009225e40f7753574315b5a63da03dff59335153c5a6362752554be72137d88e3a53f815809556e104a88d57c809e7dcd9f3cd9552b51acfd96c6b3a2c467680be7e827f6d2d226119f236f61ef820f49681ff78fcddf8812bbc76fb54c77f57e020b55a89b0394f97be6f2a537ede2a4f16861f461b146eaf262c66818475f455c3d68d3712493417ad522cc8ad4a550ea429c64dc981c8a7ea98dbf3d03737f8ff06d285d15dc634b39091ecf6fa9ab95aa5ac6d092642d78c2d650f1ba98ca4f431357d75465f738a67e9432ef24f9d248ae534e71af39b58f8a2ba336eb4be79ed9d1db0221f889a60cbc75ce65448c703ea5fcc748c55b8721e0000d15ed52aef363cfbff6ff86d8d1f455e4078ca398057ab20ab0b8f80c3c6ad93bc32bd29862a4c34b9d01f1257d4c35145f41c90afd40b9297a8ab0dd7f5138f80d74cfcea0efd465742b9f3c4ab15c61ef5612474101647ea0c83e55332ac04c6b1b06105323457c0c687cf2d3cdd71a14e3c9216abd2c32edcf7111148cf6cb8296c19031828d34b0f611188477925d6298d60aa331e8830af76abcbca5921a6fe8483ead09fcbee52bbb55ecd0836fb26d38fef12739f090eba7208b289490c052d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a54dd7b7de0f693454f23104252a7d3d4589b2d757b6ca67ef4bc5d0d3eba3a4ab605bbfd46ca46e0f97942eafa0c6df4513728e196b1a7d6c9b5264ab6fe44810bbbbc016ad2bc92a9336fcb99cdeeef4c9ccf0bf5a2b9bc82b4f0a5404026521a4bd1650ad00d84b6e04a769035a43df8c11c010a5a05340e96c3c01328129eec6bcac10580f56a083383a9893d4e055b6b1a813ad9fd4103211c5c09227503b2917a9b421a4d69561d0cdcb6decb078f4c2339c667a75e9f80df2350a68e4f1efc123f7015bb19653b5bde6a13fefe62dcc17dc233e654ffae739173d7309d3fd62bc536bf84c928c841ca7066b2498281ca766104ceb9b1e59ef071642764eade9ae96050dfb42fccad239f6348c675d443787a7147be27892acdb4955cc2709a6108d025708e39d1d8c1ccdbda9ef28006ad5542e646f276149af3800db7dac5328772d1777025baaf715b0872cd0f374563a54cdc583c63ebea70092d3ce44f97784069754bb2e409f61349ca08117e652d8b861fb86ce7431010888793bf44e3afc3e1e2531e306d9fa6910d56805c5a98cebad5acc99ea63c010b8c3642b254734f7570bbbc2064d2530deff20ae50bd56d8a9209ed86c1f88841ca000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003388c49ee218b0811d0428693a4cd53d797b811307caeca3bb615338817800323d5d42a9f47d9371a8016270dcc2c2848c2dd4893576755cb075d3a6e8942fb638167e4b2f98340a925bd391b1ad0bf18e165bc119b67d396405da50697d58782d12ce2a684f98150edfa1fa20d9e1765dfd194e4a283ace46671fde86fcb3da9af39dd4f5d58aff478d6d600e848570f33424b43423a8b0f046446fd8fc8297bf2d50d7caeb13b5d3732dbec3667cd2d42c083ed5f46693f06906f409a0b2c35476d8aa37973612d4c55b88f048f7bbda5da7e0e6d1dd8d6dc7f06556bdfab59c387ebb8e88e0bf15e04cbbaa1531ad58aba9b502bddae3c432d5fb4d3416050ebb5455a51e8f0dc249079b2b735590518e3242d69d4a0a842b1878d8ea021243f358fadeb14da562b1f702d53450c05c994c10bad024253aeacdadda2d9b4d4bbced60d630c02d1e8a2b09b51c81f1ae78a01e9d5874058b027ed9efb82d1be9caabe86d81bc2eabc816ad4a390bffe310672e3cad792640e99f60f09ce4ebacec956e629fe28cec940714f583312763579e538b7757e7091742054e3628c20872d245428bac4f1ea3e2c5ef115731b6cf5843485bbe95801219fe91f241d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008983b67c700ca24d91a82c5bc0410243a2d34a57b12063678366074d4a7546c0fad0f8372b3baadcb1f432b7a5f1bd176ef1ff02809b14ddea9550297e1465f51b6184949bcbfb24f5f14f151f80ec681cdfcf0ef3eb4ba09c9e51bd973e7d86fda479ee76e2fdd7651728dfacfc999de9c3d2e707993ec04c1eaea027237bcf6646ff91003355de0e4393ebe3ca84d6474116f93e5bb489b307eb19786c0aa7930c67c26b85c1a623db034cf811a13fe6d6f56c530ad8ed2594bd71ca2b7d62080afbc0eb59a7b96186c8e9cfde401d3a6f7b10edd26a563b4b301e35b677d464ad526f02499391597af54cdd6d27466dcc88484f973213d9bfd682b637435edbab811cee9af921cfb68691023ca35ce1386c028ac77cf92bb0d867d672a67a5bd208287b897b08ba9c16f6fdafca60d5bcaa56fc6eef54a8351e274cd1e32295a8b78bb3c3b4e851d485d5e3bd63257ea68b7091a53c7fd19057b7dd3b7c8497c877dfb99b9c7cd96314fd35a85d2a7cb80ec6b5a203e6680fa98503f299afe3966074ffa0ae231a4f5478d62a53f98d77125c5344d5c21e978c3c9c4f285bea7fafaa849ebc09d6fe97cbc86e88cdf2d4275c36ff622cdc157b77c09e94760000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000237a22a9eeebbd5d4008e68f7b9ae0c23416f53e3c7fbb1d46f87fca052c4efafe76043ea3d3a5cd48a7ab238d3442342ad115e3dec8f765701c08625e33a11376de2e3b3204f5fe4f1462172a96456f176b476f74a2be632c093ed14fb17ee2a6a022895d8848767fd5d921bc98f2d15a989bc43d5ae1774f1cd7639e766cd214d4df85c1ee096b063976fd68d235b30623519da5d1303ba33adbfa922500e04195c7c652158d2e4e31c07226f3d7b1823c4514e944a63b3939c42d106c21b780380303089be309a3154b8ac6a3401fbad04a1fcfd44d2edd2934ea51d3449ed6c0afeffd5ff13cb298f0d4fe12b92668fbc4ed62f4f862ae5fc23411bd593a1fe6f4bb48d0bf03dc3be092a076fc4ac3e0416c643ad2c7f1a2d952eb5e6a5e48c5b7ce4d6d23a469764ab55b61450e7f97974b2b59c7a97dab33aa8f3117c52f51c6893d43d0fa9b7510d9235e43e308ceeb4ddf8a3364d468d417d3c3b20dcde51a8a24d2e174d810a1762996e23d567b2ff48a03ad58de3da5a4ea0719b5a59565da1512032efb20ab17ae2a2f25b79e592faec4031b16ff1f2ca2c5e72544a9c3b8872e3071638f220dd505f37e08a77e619da12424f632053122fde046000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085090df150c8886f91a8b09bf0bb148cf5f847ade7bc5657d95808aaa8bcc869406e8c5e907c5eb128f3621d9ac897a8b5c2e394a0cec9f0b1a0325f705fb0979c9d23fdb0d8f8727f26fc78d5fc3b377d7a27a4f90e2b2c762dbc64e1e295fc43e7bb84090dc8b4475ba4509263d3e46675b8557303e582f197057655f4cd4d734d81524830c9e59e201a1bd2831cfec1136031d825b6ecb7c7dc5ffbbddc669e8b169060d5366a2f8c4418c3cbefe4cca7dc13f9f39439140919d1d2ea723e3b0c409d44ecba8d699a66b23601e7c0f9a9a2952b655f928036481f175200423708be87cfa5e53c02871d1c960ae4631a1891e50fcbbac1c82cba37e5d647f1868020c809cb0788d9a1e106a1d4d628ae2f333651de5bcd9b60533fa22e38124b5983e26688b70fc8be5cde55b7cb2ef747ca3d8f6d328dc94e744f8eb25df268213ba35fe58d6accebb65dc9806315c5f5e947e937c6eb4fba28bb973e4376eee1816fb6240120b7bd25f047000a042a94cce12fc54fad345be59591a8b644bf54729501c950ab62db6a73d3dc394e1915fd10989e10f42b98562233a2ce3914b6687b063455c4cff556a1120024e5cd1e8efb6972df6d0e8a5e342c57d74e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082a618fee9bbc70cbf25f79912fc09c97a0f3fdfebb2924363e4c3736e6b8e85f2d5086305af696cd9972db70c13c3a3151c117711cd84a530a651be278894d33f197f8d9faf81fa574e0d19c8963e7bd3255fdcd737802d6f0cce0658b04865e385434adcf0fdec60301f2b17020666b048cb17e9945b5ec8ca2b2831301ef8d3cf849a97d62fa1dc90087b2873e81de62d135424c81cfc6ba3bbca86c6ff09ff8bc77614221cfd54278b5e738037af81eee7bae97d79e26906f63c26d6550190cae85b21b189df68b18e87cad428f738f809abb06d1cf1cd222ba6e86d7c00e8952631d07ffce6bbbb1771ae551d6e2432f93c09f44f0de8ba32e1521afd35ba55728e0d3e6a3c4a39bf0f83b6a3611d44a3cec2ce42752276c4052f2e9a506f2abc9dd3d8fd483cd07ce8fc32b5986767368d8875a27ed12e67e2860b7addab10c22504d6bb5fa0a63651fd36a6b7ff97361c5f716d4ac30240a928922f876c66550ac656d56097192dcce77618c24ec29b6125a6a74df6875f1dd65d28d7145fc5ab45749d204d2e83adb5fbd90887b768007e68990824f57851c897782337834ee15b1c059fcf64b55f99fdcbe6c2b1ba1d405873f32e91c2b910be22cc000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013cac462330c9176f66b2e9baa7ed886d62ea51aa4779a3822c68fd1c1083460eea6766a64c0dcadbc81cf920ad1a3804583c50ab86c74d2a905d7ef37d41794c8f1aea043b023b74f86be30a3a31a8a9f8f4f261822786d8fd81bd2399543bede747f6c14a5b2cf340cae368283e97cccdc90fcd6d48715c49582187882d4e879c96d21fdd062e44ed5e44542d58216172af837c808b95dba536d23eef8315dc0b18a327a38d7ca3b339abb88bc0ea18ff4003f1f17d809b2f26eadb4801d75d1385178666d5ab30be29d5bda8d56c154a300fd77633ad3d581828b6b7e9f85bc9bcfd8bdcdaaab4727f454753f685f145bfcab3a336d5b84df3bbe8c9d7f6df468e5c9c3f5797621584732ff5a6b06598ce9b337037de1dba846c3dc6494424978f780d66d0bdd717c04e1c89d7c8780caa8abdd0e3482062eb3e611499468b7b3e18d08493cde0a1c2f9d63712d34893f978172078fc62de6d44b8676e82601a11fbb458458eb22d81b5b5ba08ae70eabec602744b634eefedfa7c043563c567740e17167d6ec7aa5c606e6de3894b3e6c368dee80dd49c1c63d45d990dbc165841a3ef850e5ea99298a4d571449e8ed9d6ec8c6dbedc55fb761d02b21dc2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080c0cdff63e2ff6b38bb572bc4c0dff25d6ed6b1fc155cf619e8e0153352c3c659731f45886c9cf39e08d8811a87eb95cc7067ea9ee62178d091d78d1edba8b291169b61b9dd3a8462b1054a30e0b34ccb9a16c2f878e0b0d9b0d6b07bcae39fa82345c61ee1b72459ac5362a9ab738643adf3dd62b2cbe65a79329ab4e28c68f545273d1890f90c6ea482011c5b4578ff4d9552689ee0c7130b5104c766978db7b642e1d65f5317bb248b0245d75ef0a70f3ed10e7e3f54e9c5cfef909ed9e840e0ac2db38b65de28f7c9d2f1366fa7a88376058471af128862d71da3abfa2963b7c98745356fecde4039ff506801d6c4b63ce692dc8531c636adc3347761ba1fbd849400eec84f263cdf58a848a847ebdd55dd3238aed858a07a41cdb4fe1175434ed660af4b5488e661d04c044a9ba3495aaa3417335f16c4181b64419c9be2c61b27e8998d961191efdf908697670882cecf83e296f8f8dfb85e00f24f2e1f4cc4f2d1212f792701430cc00e05f6a6f5e999a377b979e16c7940a6e968dfc7b77735f29c630d7f044f6f66148d6497e895da1cdedaf8db35a18602d87758218f3588ca08ec0e0e19df7f7c45a7921e877d3fd3e146a137add996b835c41200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a3885a2ffce58a1f416a2e9be5c2dd64ffaab6c80a5014a0d457ee7d71edd831eb56c201f8924e17f80f99bc5d8955924a672bcf320817f71c93862b1870b006ffdd2036c23a119eaf8e9054ed08e7dec3d46d86e5ad17e7a714d6a01ebe9f8dc78e11785917b172a32e14d9bdce168127a8e59c885c3a0cd291c374ae9acea393c184c24180e274a6052b3bb62c6600d1e51e517a3db0fdc5b8c023975cf0c2734e1268a4a7ce705b06d6a19f1f91ca34c4dc9c33f6dcc5c9aad190dc91730e5480f226adcab5d424d6ae7a5e496c91e95d3da72366bdca48893b61630cabd3fe7cb4c11e6a1f046c0114f850016646c2e709dfabd3b3f07c843af843a2653c3b4550da86aab7e40e56ba3874b46a35f5cfb308cea1784fca72efdddf9b6e19cee7c48b98028ffc4ca462de667a5c04223342879c51882e89280471f8244b43786aa4cf405167b0f3fcdc34257039c55e817dd8bfe2bb9a7a235b440fd456c51fca7e8ad9e5c700e890f69780b052ba4bf73645c87275ed0614311f2d1c17db46fb1b2949bf1102b1d6444e50e213d63621fabf5997ad186d618bb4c7d63ed96936f94cffa9c21d3d7e8774da21f2c67b5ab0ec720843429285a24ea45b75000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a7aef4d11bd1b66b7e5b85077c0525b2ba3f8c3bb03a21e044bfc5a918d6c6474a7f4173d536233ee601113952affa07f27ace445a95db68e6b7c5c6bc2f17f0b6789002ea6b04fded68c1d18497bbbbd56df84ca6ecb85aaa3d6b160515cd356b307e04e477d233a22dd29af03757813c312d609e1e730c740e381bacb8fc4fb7af71cec95e106acf04cb42b2a6fa10a06322c46db90478c6826f11548a362e4d77725567f2b85e8fef70b6df0df13e0107725ab22bdf683231d2aac47e8d159a868337ffd9568ea757d504b669b032bfca9fb4b449584c8e1f73d7970bf2791de2086f5d841750676c62b3c1db964f6d8b90e0db627ac8d01d40d8ca574096e6e0e2bc4cce03dd35bb112f116adb18e1b7103bf56a7c075d314f0bc1058fc804257bccd7a4dfafbaffcc71667bf47704bc816c4a5b3f27b4f8fcd8c200911218c20c42e52a8b0adfa0a4297e3471e39f1c03b117eb8b0297959bea2b6ee5f79e6ad96d8c596ff2f06b551d7938ff32d9888d42d1804fc1007a6b8aecad679cf5c0c2a8439b6f096060913476ad1134bc5e91cc4bbf0d63feba62261dcf6850a62f8e92050fe63e6145511cd4f003692c6a69533b3625e5b0b79dab311270e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad827f20552a374eb2c7f83d2092bb048450af08edaa5241cab30484e3c6911c5fe6f655d939f754dc314dc27bcaeb6117b9711c38f306f297fbefc6e37bc0d2c9d476bf6bfbd3fcf3a41e64e92baf9107f34a03404430a66150a14d85b1f2d79fb2fa49ad4792e5c56a9759d032c356f1ebd1d360ab5cfef917e74fefe4707700616f3f58868e13d653831b20e9c0316c95159de797c590ac744eb6a7cb11ba02b5a9dbd57821737923198ee53c25c00769df29c32b2ca0c37927af690be975ebd9e60ddf8b931fe228221bf922337210c5f8cc02b2dfc8693c724610b2a78e5ce1e800bf9d54710818875466e2d3558739411bc9c87264a324be5a3eb628515fe32ea89b7b3c6ea4dce932bd4d70bd28ed41e4bc0b7804c9497b336bff62ba896b973583db9afb73c1a8d0bc7907903e5f0d7d4a59fb0982d6a18b35f4a2d119f133406c41418a5f1da474036cbc26f83af62253a1960c8b9bc52aa3c379afab9e270692cf3b9d774f93d9e81fe364ae80902baa556dc13e552ccc51e6c3e43dbd0d644ac3b3637a72efcdcced95ebc10b4db86d822fbcc01dab727d6667e5dfcdc809b88361701a591f2d662e2a99460497508b0a7c57fea1272293df5d19000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003540662384651191bf09311e1007ccdc7a91ebda4e90328ca0a2870d34e31045545736fe2fe95caef3455b531cf625b9f269082fc698c7c1ad00552a86ce11771882f8fad9ce13b212969412f2e2e5bbd6fece229bbd5e8b90acdf1c23999be7fb36d2df45957b87af05ec9f43d115a82a344f03e82e16a9d7b358f970415c7f0181e2b7c1f69e0cdc24c369369d3a27d436ce09306e54b06bca8c5a3cef9ccbca7a3e52030989a152aaf1b5abe4ab34258fe39fba5d3f94debc3c1bc5e920d8407be333289a53f979ef675a8390174c583b252079537cb7c313b8c109ac9c23e9953fffcf606975ae85354d8bba90218f82ae22d61a91f7a10513f5cdbacb76184885ce5a8b161405c5818411354eedecb379e3df94a2d2c2e0ff147e8904a701efa9e231bf5950db72a0f193f7c694aed4e1177bbdd08dc2a767479b1379f19f2699934ca02947c92a16bbdb5cf74b0a6b1b095566c11cce8d60b5fb4f1aa0b1a502f96599d5eb385578508b3c962dfef0ca44a717a29aac07bff64268dfd5b048fd40fce258e301f03fa967326cf400cf2ed8154c2671595462259e8f80089d8cf68d053032b280c5cdb3b81e66eaa22acebdfbaa24e9dc015c5a42bcbda0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afdd936906e9de35fd51035bb75b854a57ee99b611482a94ef69882a4fe32c69103c2d3539ef8a9bc55c921a4652217377d049fe624bba68a05884324bf94b97865050788ac4f425df5651c9232d834744f9fe3dcd1bcf684496a4849ea05b22a0905176134a67dad09bf876b3862ceee41c39ee4db9ebc7a73cf1b56fd456554bf5f6242d05bf316bcd557c834779dff6af6ab0ffd75860c25626555c2c313daff7dae231ae57736c84918c3e9951037309551f91b469074cd6c2e4c2646951fe43ea298163740d0c69eada181394e4387f3fdad28d77352e263c32e53dd6f14a4b56c1e08e0b051d91875584e58469155e6e0cd999ae83768daef7894082b1dbb15027be558335486735ddba60bea7e1455ea265b18cabbee3d092f12a48cc7510cb3b50e9b794bc456beece33053eecdf181448a688dd96314b7168a87e34843b88ed55d3284468d2993396ce2cb4798f8670dead612b7f6daf3de442d7705eabe8498a5163c1775b2df31a32dba5851813ab3c58d507a0d7443998862927b305a02ba4d0b6c5aeb1b887fdce0d65c7c1fdc01a20680fc2a2633bb7e9585c188b84e1bd47fcc0ec3e922effeb1c605a07d5d5f1e8857f9ee77fc36cbc8a6400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a9248ad6edf2abe3c91291f2e7e9f11d4e9c2eb13330851c672b9c05398721ef15ba960d4ba83f59806ee71a578db68972b048dfe6313897e731feded78ccf4aa4c71a79b1bb3b05f4bc8865438e04c4c5bf33660e940682ef8a733d2823c3199d161f6f1d533b5a6878722979798ce513b34b8837732681fc98a3e4accb17cf3608749c147f92d957c027f6293e0d007293d7fb806f1f2db7d7164e1293c208b3b56bcabead6c0c5c361235ede6ec1ab7c1e0646da06320ec0213aca5aeb8b01c7c6bc0bce4ec1839ed7c64f70b4143be6ed07a316d6f7b13bfdf4324d57507574fe57d8aacd50eed1a4f7ec9f33ccf4c2d882c6aa974b7230246cdf274922815913bcc0c95f934e261c69b33b032e7b75bb6cfce8822d04993268646a295bacfcd7d7262032404325d99ed11fa5fa65f6a96194ba4e96ea67cf71c2bcb0ad7f1c7e7a1f022dba3b414fbff2bb14d6ed81ea90cda2aa4b3e6661bc7df5631eaa9d17a6ac278086f1b6f1d6bf715605f328791cf76f379cd2597de5a52c1cb477b4c8f17dd0a45c15e6d159c73589cf1fb1694f6c433e560593e32c5b8fe7ecbcaee43a2cbf6c733ab0f212975a0e9935cf12d9d896f62a04cee1ce625d690300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000318d21e2b012f1a13b676a1246ed478a0d2bfd5170e85c100cb9c7210ad89ce377202d21662ba681bd14f9e10043892c24fbf212775bc7e588a486c08b4e99d46fb84ced089c29fd375f07b13c0ac5544f2b70ecc7d0d4c9d807b6f7b83fcaa6065c80bdc25c4d439ae8208a50ddac7636eb04e70055303ed17acf7d2c109ae3aae76001552bec8bb6f5f7dfce417943a05bd1380ea2378660f934ed46c85d8e0a881b6ce3e7d52a654cd696155cb4657956e2da7cc838b61f3da3f175d23af7487990a2d2ed090711269b71f66385810ab9d45c2f462bc0447d31d04be7b388c23de07fcbfd94f890637e565792554721d94ce25b1c780c3d28ec373efe8d6c717b88384368309a87a563e33732c5c80dae556190acac75863c8809f2f8d8feb9c93dc3ad2afbbe9598aa9d156e68396cd5ccddedc738de6cd20d8c195e99b17538048c645fb0ba725451946e0c792d27e54db6d6427f1f296ac5c96f7be7dcfc3b8c78820cd88a37c1a3cfd75d7086bffdaa6075e341256f69f82bae850aa2073c0f495bb2ea5345383e82552b23e53123df1f5ee4206a16427fccbd4c231e41a9cc57ccab9a126b9db26a3fd25d750af877dac4e335e052fddbf19d85cd60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a76614762a00f038ee597372ac7ff5026fac35276bf6eb76b48ce133be189007bc1a22091c9b47193e020c80e20efb12137748fc7d212729084be9c5f72ce19e1e69813de8b2fe83477f06fac47a99faac1d80a70ee7e47da13bc3104d2ba8612e64e3cde619304265cab3437bd35b800e75b50417de1d730f011b315842c5470100450bf2ce12a21cc54940237023af56bd9f26efed9ef6d9e1ed8f4fe7fd3052ece042c795a14dc187aa501ef82c26143dc691ce05a3b2009d23dad1ffa49c1bcfd5e58d097bc6813c0cf3b8e2c034f37838d80faf8121dd2fe0d6d52d842a31ae2731cfeef48a82c37ef47062a9cece97b3ea7e35f95168219e4ff5ad3d10fa8c0d71092abd1322af1bc08ea78c9117ce00d3ab4d6599f85c5d76f4cd0ef6ea55f73380b17c62bf5bad8408b46639bb6561c3f3239ad8d95d3974fb9c1624ee6077c126ef9b4d21e7abf73356d0c5a9cb05f88a43d3da3c63f70eba97ddf96e19da5620f8832aec5891ba9280d36e49f12159b8dd470aaed6f36de930dec76948b929af64ae48309e65138e81d18902b7983f4e454ab0af3370c7614b461449fc794201cdd02f702330d149c48bdb03bce3c5d351ab27f2bb2d264431e61f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e95cc00695e121949602348be06f08cb69889b7b5507e9f01bd187318363322ef16a196bd966805708177b8bfb65d3cda8fdeaccb87abeb72313ab6acc7ba9f198322051cd1f3daaeaf5f199ff5ee223875eba7e8c8971f6fdd02180cd50309baa884f40609225547ff17aef17f53db6b197babaf4767e4da3b3e857aa6381ebb478649748e3b95d9845f67ddaddbfeb3f033d77db066b69292864b04a18bd35deec784251fa6c207c3541c2d3ca6bc62a66ee920ddf2b6f99ecd63400e822b31578b15ba2595372ae9236002f457d179f77963ff1e52123b33c518ebcb516a0e8675e124abded0f5ab654c7299eaa59addd38da23e7879290aa1e602cab1904cc4f9ecbed9108c97019f76371b62e857f8a4df9aac63259a711fde1d908aacbb3b7f53110e06ad686db44ba10c99c850e775c90db9dcf626f7f5e2e22b122f2bdc627fd815c8b31fba64064149a5af0863af68a79f5f0c210554ad82d0fb09f951b6c57b48d3a2c8c03c19b739523ec2438ce3c66f341adce61a46a82afc4d0a52e7f82b949b29fb930f14ca0a8aa59e31e9e888902e5844f4180374f6bb7ca28cdaeda5db10591b7e143c4847f6e5fde6fe19ab64965ff345d05e28fe09db00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009349b3772de89e600ca2970dea6cd135be517917dbcad0098fe380fa4c790b2c57a83826a437917694eefdaf4e0038681447b5f4395380e9de23d2bf7f380774b4e05ce764e9daf416dedd2c40bd83206e3688c0d5efae0e4f26754b68cd1aa7aaf7238c34738205fb32a6d890f356e3ae1aecbb30d0e05ee14ce439466fe997d4ca54c91e6deeb382b702f2b8dc0dc95e551914773eb48e1bb29d85469365ad4e2ee29bc58098553d41e60b26c73fbe47015cf99b49cb1f9a7a08e0ed4663007ffda3ebc78001ee21543946586b2dd57314637de49719de581e6054e5d4bd587612cb79cdf156265e000121819698e5f4e7431a459fb2e8fe0470aa8663cb4df116d8e15a985ce56938ad5089a7c925f34b7ec4707ea492d6845ba63242ef14c874dfb2fd53b5c701efbe8ab704a3aa810ae83e1ee5801ae3d6631429e1c88cce1a326ff8ad5fc09fe866d740379c22ef6c65c11ee40406cd3d361f6e5d00d67f94ea055d5633e5c2076121b12744de946de0ba71c2819915a5d1be1cd0a2eb97e4d81f2a6e2c50607173dfe4fc5a32e6d017dc0241b3ffd9648350b3a9c4c78c59e4e9889717f5a2f14659bd31bb6ff9537765f4af517f6d14ae210e71d22a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d6037e0478a836473e41930963f700269d6e0541ab8b7930bb85d0914b83842f31b4c549cd36465795b0b700c67ad02fe49a356d3b97f84bd501337655ea7f541dac8002e175c50f80e7b58ad6a85ce1eb4f04ad0de6849a5e4be6382c6bcf66596575ea060f328b432647cce3599d42302cf46202fa0700f3055086774b71a259016d7f4d48925f40d677b4bef4de8ed1d5a65702926efa119056f39231c453993c6ad65cdbd2fc40196d2f542b61a78bdb7c8af0d592a699d10b5ee5f18ec2ff1bdd196a21845aed4112e16e284fa2eaff9b0aaa95747f94211fad80579419a6b21c251b0ee3a6a32458491ed4287b6c676f5877ba78aeb8fc1766b3e108cb90a302ba2c9f876f74d7fc59ae572dce93eb9227c8a21ac65a1d277034543ff77149e0c1457890b0bdd48ae02e7ec4dd1e40811ffb463b9d0895875d685ef733aaccaafe196ef62f397a7337a1d696e012e0aa1be89071709d44b6f05a7976554134e2da569a1934f8465938cc1056f1218b3fca2828b3a24f7469a873d7c36eea4c970a9496948b08fc180f0d4038c1fbfe96f45d8517bb1c0f35496d34da438d78121648d21e0cde8991a51ee56c3e61e7765a2be098307484c9b2938f1b900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009dcfc6c02ce325dd40b4cadd0684084a0500a409511ee1bb1a972add6930f764e8111a286d71aabf9fee48474a3f5d851c4df0b934b31ba4b975a1886893fc8ac935f56a08e79e6c5e68060052c02f3ed6c90f4f2a61e7fa5e60dd26dfc3fe7b83b4bbd75106b4991777dda1f79f1b1ea9db7b40e9b7e07b9e2196fecccc7c2fa4d3d33d85f760b6763d117757770f0fd994ab06689609edac4124f06569859593fd2360a23f2586edc2c2a51fade0ad45aca3a95fd3372538d14434250bb679f4c451b99277de6fad5833e6c11659d0126ee621412f75293ba4671457511fc71e26948c8b2936d90c43e600bf38bee6c22e76d1ff46da813ce6f2f59dd308ee08c5d8812ef0c9aadced9a9121c24fccd9c17ed70de2a0d08e630f1dfdda9a2d5802a9f17d0a22124a301bcb0499e2288913d0a8859a045786217a670474d49d29700a8ad09de1546bf89c1e859c5843d4bc7c24071bfc4046a5cc74303b2427743cb1624e526b2bddca5b85101e4a456991eb312b516bcfbd5cf0f52cbed10f6a6d693aa5ce30611eae8b13ae1468eaca95a2f8136398cb1305a4dee615a7e4667ae26564bcfda3afefa536480696e4109d69dc21d55658ba657371f655ea2a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa2d9a891912d848ad0aa0e06b6bb67669620f73a0c6f245c803a03fea662b95680f0494b934e511b1aa39dd78d3992fa84f0790544a29a5703dd6768a39a943fbc28f499df59760fce453bad24b05ebfca2599fd947105316ec0b1c8fb68a0104f1464f68e857dc89da38aa7e5accb9e91f5bcba8d8cd955b198159c8e4e8a2f799a1780cf188ebf3d1e4f7bdb481b1d667b9937b0355d7d44803b4da03fad84bce39d50281a3397861acef483f5c4caae93f5ab695583d98859405927521ab6c90ee888cf5a7a288ed606825409f54f8039e35785412a020b8aa5546cbff920502389946c56a6a959bee5ab4d4c24c3dcbd2741ec7034a150f4fe9da49e8ebdeb1550814c96801dcf049052d7741273f2bad99db401d49b894ea2c0ed73ffecca676f556d9f64d1ce07caffb2831e3db9921803e15f572dcbc2f979de2141fc1f7bfa59e51e0b922748fac51633f42d7460b859502fa57cfb37537743d1844e6e49e9e34c6c92bed55e9ea98da3334b6cb8ffe2145c7d50b9682242a4b473be4a438aee00f9e7e3f491cdfb0de25ec3b7a7e4dae6c1f6d54f46ffa13a64ea43e68d535d36303afec7e24fd71fd824e85b7269cba106b51754f9617571c157100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008fc6ac2b6b8ded0a1dc26a7e80056eaed07465c4f3e2ac6ca179d0b17a8ef46191a8d6829ca57900a63767a58d3b0abd37890b5f1ce946e4477e36512bb72bd91c68a0c1e691a114a0d0793b56b2f81bebdf51c228e584991b8858b4eaa2af9768c4a1ebea3e800674ac4061e221fb519e9275194911d968a06758af6aa83c8dddfc8d057498d65f5a8381b3f0d0a18c91bcd5f923fac44f75b5f57a711bed412b68f4e8c0a4b1269c0355e28c06dfce9184952cecdac85738360c2fb6542e0281c57f2534f4f0d9926b3bb26fd4632a75750990f4476c0673a5e5cd6de4299ec3ce1898e66ebfefa90d1f9e9eff371b10e1f590f5ba3f05ed88de1047ea716dad3e0c2300f2969bdcec3bd9635843a122a85c856316fb4ddba3848b8e9375f4dbcf9eb86da0b20357485118f7303549fafd1d571412514df04d9763a1c95b9e446ea091ed389ae6ac6a8277e281fbb47c8edb1220cb843289f873fce842bd0662e1a40cf3eea42189d4bc7a576be770df94640e1c018cd50a0f891b3e111c7ebd8ede4ab5b999d27c259f28d606b7802ed200b2124050c2af16da319737656aea9415c838bfa2fe510c48016b9b9418e3efaf145123f92eea1f10ca200593160000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121daf72b926f8a9ac57bb2a9d2fb3f7ef73e281ad7aefa0de9d7de1b17fd57caadc14f216d68e90bcfe69d0b340a83d200167253b3c857d342a9472d0e67e4b611bf65e5e10a42cc6ebfb375015d09c5723ce1fee02c08521cb38d3c608cfce24d6d8c611f6218d5247d5f42480a509b8ca7fa391addc7600d557bb8fc064b9d04e1d83b1b849c67fadd4fd85d23461f025be5fa928eb96926cec0b52f9efcca3a5eef840904d1e3601023e2af7d326387424c77cbc342e6d6a0cc318d9bf8311fcf8c3a15d5838e33e2c18cbe2c0171fbadda3a48a088150f23ffca9d7df4f03b7cab2c50ec0c8408d114df092d49d29791b07f9a180edd72f58bb1106326421dd09ce9f597401d28cafc880128b26ef3932b30a418e36578994b44e55773e2d50fdcb961a2015c3acc0ee3b902d01ca8dc6d226a5b0ee25365e881dba6169a2c2c6c23726cdf8b1941d0ac20449969f5d4e4cf40832b54b8ad6c679235223f86f92854ff002610f1a37a23436275ac9d03119a839496a31f504d44b93fba788884df124e72b74030d1ed94ccaefb7451ecfff60a620558a4487862633a87f8a8b7e8ba279f14808683d3879d4923c565b71bbd603f6af833c411c5960fefb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ada847e67d73a826033bcceb5bc6de8ba801de284d21ed8fbb7e1781ab3221c6affb94b46cf84525c3f0699b38cc082116205e3d5a92dfed675b6bf894e7b7d249268132a4a367ed570e2ba41adb7fc7d3f6d53394f38a4ec309e8204371f5f16528faf45a049feb46dc4dddef2fb7fcfa8aed6bbb526c2f3e4cc793fa134c963b7b00e281b372e3151f6e98740afd2f3c089af1a2d5d7101b72a0e37128229018c06253b2b53180b9dce9707e5f68e52f063caff0d1fd85f5de644c66b3ce536bbc4e25f1c7247575b4fbd562cbed894ee8cfea8b5d590073c1c336e81de7a22e40791b6f6cf7b46d74c58532efa9ca62e967bdd3d6a1f7b39f60c9c44d204c5aa2a49270be47edf0924c206f9d5997566b026b1feaf5ea854f394eba81d56b33e160a4c0d246de3a403db57b4a0eedfd725b9b071e17ee9f1bd8409d132aacf6c601e0e2c5f4571c1ffc4fdd3c7c75463f4e08c1e5ec540ba3b89c7f878459289faf8a54a75c928e199ed743a58ca92c93ee80107ce2a8c9ec0b220a090e16794498e95345cf3aacde2515392d7513199989ce68ce904fccc7d4e8f8db8cc31cdadc52a0c0b084279479c2fa7e71c91f5eee48e0e96dad3a77e5ec40d17a900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b795f4c21c6d6ab92e043b33c561ff6210fca8ae347b52f3a53ff8004051e5354a11c64d8fd4b232ec26afc660efd9b37c17e545a775f69e9bfd110d34d2d9d53bf41a67ad309e189748abc6c57808db515fa46adffe3eaca92d77b7b6d0e4e551d57183e379bf49b44694eaf6f73c3cfbee12abb0a012bd245c5047cfeb29319883ef47da09d0bb044f3e54b8035060e651356fecc392eeb13d9448a89ebe1c23e7fc5c67e2e213e030c55c58cf8abd3b0576f314bae3e651a1b4d99814ccf5ac8ec11de9bb6e1814716ecec7da2f4c6fb97b8246a2d95087e34ac2652fcf7ac03c986f91c9a112213cd65a81f3de389c4cfd8b48707f4a8671917879699653082a6996d08813e6587eb1bbd9b0c9e03faa6c97072a341a4b808d98a5ac487015506efc22bcf6cd9f2a86f9d49f394cd3c3e7dde2124046ded45d4b150628160de08c3e2388fe9a8feb1f31aca56df343169cdbf72d1594cab35779c555834e1657b4adbcc1a0d7760bfe01f969cdb009025fe54c86bcc129523ab74c28a7b7a69b98789a69a159c9085db83a69a7e5504dd2fcf7825ccf2f1d32683eaa4979b17b48ecf0f0f9638795e725157c028603f33b7666f7ea01ebe7577dffddfde00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1e160aa03b92f063b67d3c80ef145967fa3cb69b2385c13d466833899aa1d97fa4320b397e0de0ce9f0007d4999030ae0d5a818d0a09940155505a9c7643cf4082bfdba1e59eec2da74959a5500b55a992b9845b8a5fb09d3bf9452a44f6ae5ee2b6a24018f9980ead73d373d090370f0689919e39bd12f11090761e13a26b5716e81b8499e05a0bc756ad6f790726b49f2487d66e3313e2c7f193e473bfdf29d9fb039114a4cd07d7a8f459858d6fb60f94765ccd542b05c353eb69044a7e60ae50e901723e44ba419b2ff45301f1761169f6be4235da9c919724281e27f9e916292179194d3b6ab1f3985e9a7429cb0fe58b8b12df298e2cc4e511ea75b6f408c69484fd35908c543e75a3331ecb3831cb762ef1f933d636dc355c5d58d44761d2e0440a4ad472dbadb50322bf2d5fb9f158bb1987ebbc8c5aa98b78417aa029e0db2123876dbbfae80f0c02f1b158db6b306a9899c2945f7700adf1f820635e0ff659af3268bc50b6a4847856b403f1c243aa2b0db497ea09417edf801046ad9e36003563dd6255644ced2d2c2d41123e604ef3483b46983024e14ef29dafc82c14482ed9f72533b74004f86ebb03f838660cb88e5d6919bcc604df291b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a619554f0767a704c233220c59ba5c87713d64c2412ff1f654b2fa3b05a29dc1e803182176198667321c825a64b1d62637a3aa79c68561070da438b5e57b26311f6c60af11c625046141df46635466f4b7b8c1cce82dbaad6d3e7b442e2c1cef5cee5b06d44403912bbb1c58e4648ebd37210d92edda906b92f031ba2fb8aeb9a2876a3971334e0c8ac92d0720b91cc7369f4b13101a11b3a6d6116e352f9c4fa480c530771601a3db8c4b488dc509373abfeb694dfe12fc9e11d516e728a4b8028159d73f838ec5e40715f0685d7a6243bdacec77b8f7a16959cfaf8d29f1377241778c1f76b3c53c7b69da1df084da006b36813741a5fee211ddc567c3def5226d15805f99c00f3b0d35178ede7ae18da8d30ae7dc84bff265157f646829d8f70b529c698f924f2d87287f14e4523a290d74e3c2b47209e1f2370ffafd6316a7ef390a99a8f6d45e61f361f64d8c87157cad6f56b9f0a75188e937237d1236ed0ae5d3e75353ccaf73f00caa67a52f38796e182aacb03a16eae49fbbe088a7e4cd3e10b7aeb54ec858f02c4a8e6998f71b36efb0df50fb8202e271615c01cc0f88d4d5edb6cfb8e9f940e97f37a6213c053d2b6b05149eb7ef8a524dc205f900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002de72aa935e8c7a8505f24e1e21c455e78213b23e042a71912d38ef9735a162afc9f7fefb6cb18875a863c68ee2f54120105675365fafd635df3b82a34f44e8088c683044b1cb507eedadacf3ed13beae6f41a3bbf46f3b6ca7ee19255ca788040dfa41b995e584a7765d596b16d0014cce07fbbc1f0493290504355ad77ccf8d37f8c4fa17ed80d27fb89da62464f3692a712764e557a56a71158b7777e17b6c4cc791cc5ac9bd596ee2ffb135276ff1114626f4de36e7ca00066cb7e3452bf19be1e236471b04041f868212f52a07fc63a30bd4741a95d0f0a509ac2635ceb53f4a340f5bfab16902fd31e000ecc6d07a1eba681ad90689200e05f4a1c19f91f03d458acbe81fc72cae9b236afb7e0b5e194025ad8b4ffa8f349c8297e108cb0a771d6387176f547f69d09e414e20c461b2207b5a74b4e035c76c9fd185bbb7576556af47d0413fe4a8c5a8503da0762c576c3312669fad090bbfe6d903602276a939031ae8827d7d96cf44555154e01622f26db02a9a082c5bb0d42765188f9b1ce180c375144ddf2c7843368f2e50a800bdec9d476a4fd168ab391488cc4172a146597b57d8f4b49e37fb193ca7f1113927c86c6c5ae65db2e4292829f8f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e9335534df5392ae38cfeccf77fcafec06782fd223dc837c04dba49f481a80a0d48156e42e8316de58801996c412570ed44d53d4246dd58ec2e88c1cef634d062fb81b3ffb85189c4c9ef35a1eb78ffc2fad00abaf7c2f1f7303ea2e7944bd44e84b1b2a4775d83894708358bc4a78e09c38b90663cc1586799151d886e01d153daaf123f09aea8063145d284ccb1334ffd4d43f7783c72282c4ae5b74f9e6f02746e78dfb7c03ad96ff4330bfe8908b8c4406d49cdedafacac3e2a3d8e03cf1ec6cf4214a7afcc125f2908882d764e26c5673be94e49699325f032a4e2196d0eaebb882fe872561e101f56c2e317065c4c79584129bb97a4419cc358d88c36bcb80616dfa38ff6c13a21751e7a8fc4ebe54c70d56d0cf0c36277dfbe3ccf1025620a571683e52f0ebebc07828c71080914f22796912ee1996eacad551ccde0833a5cb335be3e2ad80e22d89aedd1006339a3a9f94605a86483892076f3f08d458ae187cc52ddae1cafa8ddd09d4c3e18bb3e6695ac6b6d28f4eeed3ad8c560b897df3581f8997a34dbeb96d5f9eaee20eb5ff81be0ee49ef94b230b7592484f1f674f55931769a19a8852c38b73f48d9a866e11fae39f7963941364870e0390000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000289dfe3e284ea65161267b9dd4d5afa8d671d1652aacfb266393c0f01c6d32e2a273b79abddc43de7da9f0451ee18a1781460a9143b5ef74dedfab06ea1df20b4e3b651cf3f60a3270ebe88f70a491ff888a7656ed2659e9c407c6683e65d05eabac0311597e57f7b8e8e909b0e050849a5b4eb54ab098be675ff303a4db99507aa582b603317d6e15a1ed80895ca5a32b169d1c85c6404e660c45e0f30a62c0ed2a88482a3e9ca1578fd696fa9a344ca50f0eeed11a1be0c34404083b78734e755630d49714103180dd72c0ab73820329f429d703ecbb37b1c83baf1c055deb3d5898df67e83095dde789eb82302189624f129eb7e80d1694d4a272b03738056a76339dcb992b781a49d83cbde3b9a70ab4c4db583259fe79d0489774d43cbcae02a7c4c2122e5a374e92a6cc135ae2d3e27adc5adf157d6f6bb427a03936b46917791239245a836e1d43c528f39041861f6b5ba35bcb31063d3323bfe8b38adc8145d8c6b3cfad93296dcb6bed450fd51449aaa14f03ed6ac723b4fb1004ebf18f92f6141c783803323a5c688b51ab3fccd220327a7a71b345c958920cf0af814676af84f809e75ef95d4361f0ca72f13a5c4830432e772c94343e620b982400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b55507d30ed7dd8fead07470c97948a9247576a164a640a783a4581a9885aad427e70ed2c389243a55c29a24783940000e50e10c74d6f23c96179709ff152a9e1a790f5c532c158735305d89dae7e26246d92b7506ffe0234ca8d45f4d927859a80eef00691bac68d83c2b23024e92e91141f7c6b513b2efcfee251888e0a7cac509df269191e65537d2994abfebc5da16f3b42c35daeac794ec05da4d69e51046f548c01ce68ce3591353c399d2a2aa81502b1cb2bf7082e67a5e6e193f7269909757b308520f5896d9f78b54934ab5a209bbb043210660ec0b4e33149b799f622acaf71320be810a6c364460f128de6b79cbfb5895bcba618c477b92a6aa013cc4a7806c449aba31617c70973344456ea170766f1f8872081d5ddb007cae32b00b88a49a9797b7c966d8cc96dc9c0cd8ab8f86df6d6562d1aeb3bfd29b9384cfb849bdfcafbb5b9853b2345d1c5ef67c8607a18e924325bdd95a92af639281d6cc7934eefb85e1f6e4ae15648952e85ea3358a787eae8f294d1ef6693de360db217022e3d987e84c47c74b9f60a83997c2b0e7ec989629c8cee58923b011745c400ab6bc76521b42bfe405535d3cd1057925f9885416d89152fb4806b7da000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b20c8353a32bc51d42300573d0e3e5ad8c3fa0f5c96428cd67f8550c2ed835e66bd1b97daafc091abaae6d78875e0153a2ea9964aa5408de4f2398fa00e6feba108987e0e640eb448df1f252fb28179eeb095dbe53897e6f91e404cf321a1ef983a26f384e0ad2f578eb63d4c675fa519a2563b46db62c15d1e790f25037104762ec9273dd1e150b8fd9561640c454355517954148d91f41b57c3d3684440b50c93c327632393efe049f41339d89352aef4220bd3d26a45c695aae34d051bea0016826ddc3e4f51d2eb740d9d6746e2dba91379064f6b37f9fa4ce3bb6997e3071c8811744dc8bb731ba1eb3483dd5a7acba6209400c0f65914df42a35cd5b3f846bedcf01adfe47a7a133a2474796d470f2b5b3eeea0b7cc2d6a4d845faa049d15bf0ef9bf3038724ae0dfeddd32de813242c30055f6931a059ee7adcbb22678fd979427b94a02bb86da779618d6702b20d80ab3c2c3dfc31089ac16139840cafe4c71b5ade36950c4bc7740c697289f95456196d92774d73b4f8ad3e2001c14561b02f32cd206a93557cabc6f31623bc336cbf822259c11f14c2e678799f2ebe6fa7d1cf9d71ab45a18db24b97b2d71bb7c322ea60efdb8db7b6ca4b432910000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094a4395782b58ea8800db0727fb769a46b31b0f7cd524d06f5cf5da429119fd37ff807364ef5bb91d193a8a6895b29f825aa5fc5dfdbeed82a4788728c35f56c9d9735746fd4eb9a03f021f860a3543993efa16c858c4ad48a2a916e975b99c8e1de48946c000dcf2f74eee212dc1b33da6037f4b5e640d4df9348e0955b008d8bf68033cf98baa5410211eaf34759b3051821f234596cc7fe7e26a78f4d21f061f602d7c613a8abd954e0f3f1f6feff56718687763831fd6400a5c3ffa33b782b488c3bb71042817c6f175a79f85f27e545c364960b218b1b33abc76215674d3ad2fc1eaa34be0c8b2bd7883d9fb5dad3a067f44e81dd2664b8a7fc7e1ba48197efa353e4fc9dd1f8a5333bc5c5ad19a6bb7b7bcdf86b5b7ad2466996dab4b877bef2e7bfa59abcb74209189d594c82104284f0b4e0619b57ae55ee3d121ecb75fa5d853eecd6c284117f9d3806c917cffb3c3df9a6fd4e1c91d6210b04184afe2471560655aa4d5b48ff99f451f66a4b305a08cb4a22b66f85b4922accd51c142de3385d293741cee588c8b4d4248641559f2c264accbf95331ac7c05f06b5d16f3d797cc80a64d2f8a97b1f29a614b7c00c0e0e24211f42d8ee01258aa870000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000052d459be2d3bca03d738c4d5071bca1f84502799a74a39a964871573d6ac2647ba44faa92028c1d78edbaa66d4b4482476dd830cf12e7bd1b2f6b81d17f372e3b19d8928fb4a3ab68d74732a9fde170a7fc66561cbae99d7731549922aafdef639d5e76ba0a95bff14a496f8363d25f932bc2f3e0c2305ad11699799ac6d2a90740ef58f025c67e0af10982c604f7404528b625fd1bf6313ada09b0916a9d89110e228bbbd7803f09366dc51248efae8d2ae7b286ec6836121639ea47cfdefbf017c3304027cfd0e4ee6985cb1991afdda09f4bd770077bfe8cd38c76d616e09fb41c164a635e07f79530e9b416a18e85d7c795cbdb4f6def7bc0cbe3282dbc504b49abe0af841fd0cd0b856a2033e56e0f55be0c587a4e1731a50450c605857543cc9030f9a6d9fa709bf7ecffce1df8a35d861a9870a72446d2b7d5a4ab4d42c1412f333b29841223286ab562c6bdc310f5d11bfd453efd4a91a67c7f74aa946c259d8874d966e45bebe1ef8a407334ce97cb6ced4c8cb817f4ec4bd6df1f6407b85af681d73bdbee36c22a4433e894deec1575aa1625589a249131e1f73ace89b36badb52de73e007a4e426bc5fb93dbc587e9d544893974dc9daa638b440000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad95e089b0ad526c78cb92d0519ded41078c6f0a2c1366b79386cf4af2d40d7833f95738ed6351c7faa17b252d9eb20e5ee8c8505499c5132e03b3864fb284e6031857a80741fe7a84730fd6528e46092e356c903ec9ec77239198ba4845cf5e92499f25d95dc9247e7979c5fb7d92bc4b1a38d7d1f93544351f2e6c5e1d7ea1b5a2cffe15ffa818f8d5d24e20e6afde1638cca4be92e52ef6c656c507a0d5fb05b71b47aa4329f7ce0c4421377033fd38febdc47d59a01f4b619d66891427d540a6f620d7e88216df0bd785067ab2eddbc03dde25c0b077ec20a585a52b3e8920bb77796cc0f362b55b6c3312da53a43a68a2529480a9823f8989a8adb4dc60746ee4971b51ce98cf4393090db06f7fc386e71275365d4ea36ba7d73eecb6b124669adab2944d146c49af11b86c6f47e77899681ebaaf40e07201fb9957747a41004cd8666652d824a3937270cbd542c2c54b420d2b292b2c1ecb999e899c076fa50cced248769adf6e957edbcef0dd43fffa09bd88e33cdd162f68995ed396b8805d9d7b0f493d628691b55042aa1e02d2dcf89b9286ae91980244e9657c6ad3fb30823e655e6c2d7dbf3374980e64d2c5c2d1633c3e950d54302e325a26ea0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a54202d15ef5878c6a0c3354a6848c7472e434823bf9f3803a0f65a51486ff55848a6fa155c23b62c99e02f2d37d6a7becb672952e77246d581b861a813b5e6ac38a17ed347dcd5c8014619e6894807a01dc24a36589bfebaf55284bfea44c8b130ce3885ec0b9fd1ff9391041a7ec7390ecc4ed9ba84b9e56d8064a9d01a78770658488c3e377bc2b34ac4bf7b1f085093a864f3bfd169180667e0d1908b18e0bb5ab9b986ff0e0977bd901c64d2ac5ffa2766be51738c624aaf6900674a7139aad88c3b9e7321ff21d3eb74c6c2f6df6251ce98cfcb24fc5b34e91825f714f4792625ff8286a9569bc6a06332cc354cc31d126ec47b0bae5397134759f11960e6030a201dcee2703f425d03906a56386ddfdd05d28e0cda8d76ec2f776009f21b9273eb8ddbf236d16f9738fc823e49a0744f02ed1c27b92cafab84f1b88d4b8c2a3608ea793574e2f12a94ddc99aa2c858d323aa387969f8303d827992edd8204cf63252499b76659cba3afc7ef3c296f80314857ac0982ad292e41e1aa7da5d8412820852b282b74716b0db36335fd5e7354b62122aa4ba12c22ac2051bd1400bb3315f12a3b63c1f8fe48c7394aa1e47a98abdf1c86928dea47daa63c400000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000883ba228fcc304b572668cd6dfac0fb2b678b3f5a062ee9f6b592bdf3bce59f8820c2375db9aa6499cd4100935252c457aceb5cb4609109be03c9e10d5ce21d37b6e0ac440a7fbda597e5787fdc962fa966cc0b3f9537843bf27f5fd7a48826cb7c2cb013662377aa2d6b1ce6a3fa133a95d413c482c579693c56c1faac1baa0285d01d3dd2f3448f3e951a6002a62a534a456a62f0abeefd5af17eb02ff77fb747b242a3fb9e6d0ad3ec75a7d47df11f51a4d387cc31287a4162d2ddeff9813dc3102af093f5d5810a6b5c3244c37d1561bd5e80fd5b908c4fa6b9fc02304fec833af329c5ec913cb31403c8ff296063c2a6ec749841cfb8a5ce398e7bf465cb5514c44872f7fb7ffff1d3397b49fe982342fcca7c4b6ebe6680ec9c9b0175a3e2ee91ab252c93e52feb2c9936d28dc9a3da4e26851464975ac9d389cb697bc633fc54a8ed3974f87e7bd67900510df5ecf4ba77e8960b03201d18503abe3324a07fd72fb89dd3c93770a1322c696a5bd7297b72bfd23318881502a1c30775ab9288bc62e57b27a2ec38ae276ad08f055d0c87daf595272dec4d50d35f1caa0dadd311fc518767d9d5d6c0523c790a706884153b09370427d94c90e5aa52dd000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008bf5bf4191990d5cf4fe1b8bd6d70dc8f8d27c34508a312a01d5a17bad46704aaa015af2c1a3a38ba9a5832b481417825935b68765bc47bc4ed6cd782e701ec3c61913964466db90e7162833c66edb4711052834419521c6146f7bd42fff0570e9103da558f45cdf76199fcc04585b64968074a1e1c7954b162de2144109002c0004ca87fd307f7e064f7fffa7c7fa341c8b1a5610c658d149fabe04c1aa692939de6d87b8dfb175bff3a37a97523e3b941ecc6490a88540059deb89922e2420a817f4b7965cf022e16bc78cfa1a6e2f9ab50520951370dbbd3fe1b3cf29bd4f8a833cda29a1a0ee428497fcae09309ba44c4b998f0e341c6b00b7b28a2dbfe3945a8ae9558850d101747c76b312fe1577be240ad001642da6377a3a753f5c9a7e49c3258a198c65b16fdef84dea9f5fd22be2eb73d87d6da7c3cf35cb64d105749a7b3b78e674e4b7a3e91ec9eea60111f985ac0b817208a823118e19f84ef6ede6e4688d5aecd37898c5659754f3922aee969f74bae5df723d64b510783b87fd7537b4016e9c957c8198850c8603422c8fb23ef910b55fb231794c5f9a0e9405418fe563842c745edfc39b6431f16d184063170097a0b9318fe206cf1627670000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000251804727dc128a8a0f02737b7d7be8d5a1c0034b96b96adf3c6cdbb286d5e4ac744b22d50b750e3353ce929d0fc757c792fcd16e8d76f9a7b6276d414c31df715bd62e363bf6a68d66e1e28eaab3bde2d2c1ac8d35f6e500d06f1df76e4a3ec2055e1231061bda2557feac26d0d9184bf42af1aca6ac4d1a14b7969456623aa5bc1821d44a8b2272e0011fd5ba201e04d29000acd8390d7e948f70a66e2b8241cc743815213fa19f596407b9d7d91ff17b177059085cdcfe12bed4ae638763307a4fa2f37d21228694f555adca21235a6397534b2303c33b5aebd87ae6d0fd576e301cb9d99fdc8ab7ae0055beb2694634cdf091d88cc98052b1745e70e094429d1bc71a7c359d96cbed47bbf96601caffeadd5fb48ab2526447cd03046e483f8f8a5ccacbacdb43c559e10ea5624ab1ddae8d79250d6ff3c91eb87279a254805206819dd7a34c9cb19f9579b3477813db7c5649beeab6c8068cc30d12299f52bbc11ea5e97d0784ad29945f3c9cdd9929543d64c374af7355ffcf5281d5511d1895367c1fdfd6874b49a9582458aa36aaf456348f82a1a10f2391827f01d562e1c07705ff08cc0ca8784004b39299907a7b50279a9fcd8f155f848e59426a90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1fc8e824e451af94cbf1b4113e44a23c15f3b75503a1740938835a9e4d6b21ae937141bdf1ea9d5e70e871f987f35841d0fb7f2f76ba0e51441f19c6debd750fd1fadac2a8f27ed2ac957a4179ac726bd81a8eb7f6bc093f6d95a302e8dfa6bfb7193dbb350d5e6a0dca6f432bb3d95dd1eed33bbda7d792a392b7819c7493fbc25c5fe2be1e4d0b3d798c7294e17dd97497109583f76c41a467fca73a7e92be5c2e7101be727ee782167ec9f11ba49ff9b070f535035b49be8a1bf471af132a0d9ec72b91f74aba775839c82a72b5591249c4cfd34fb2c192c35d375113a36c5c4c089e4eff1bb781d0ae488797ac7248b187a4608290070d217e55407e19d91248a33090d022b49422a7c8b49a005d847bb560078380048e32087b0320ce35a8594c10564b24cb8ce6f136e42afd955db5d954742ed0876095b864026d9ccd04683c0c8967b1fb20ccbb1b3391ff77f114feb6334f479eea55948941b3bf8ec163da5c3f3ad2948a3c2019f1c70e03eb042f3a3773ed00bae6988526283f7ac2a770b8c15d63e80dedc2280ecc087b3faad10bf4c72bb69a68f37fe73522bfdd84a7f5e3e46f2d707b1ede21ee6c299474d2cae78eaa21bbe8b7e020f6e4200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b9b7f1bb201ef8b7831fabc6504c38fbde307fd98fdd7b995ae28a25c36ab08002bbec6020e3700d43a13f1e1d1655a69e8f9c12a699c296668bce326c47fa2e09a93fd94134fe930ec883a2c8a8f7f68df568d537a41c97db483e0d386b4268d5f1347381108133842a84a64e99a3e32f5ec7318dfffd0e3d68b9e45fae99e93a8395023fb41e9488c581cd51053aafba8599a037afd7140b7cac9b73eebbe3368ff23fb8cb3055c87297230705d5724198ad0e874775d2dbbdd8f0944e3368f969431f56e4957b745a1b0fa37d0c36c4bb0e67c4b989a35ac28bb3dc2ae5831603a9bd6e331401a0a73c3d7d09eb597498a188b84a9c29b213c8b6492ad20115d88bc1cd770140a538b44f4575e2e362588bcacd17ad58be484cfce527d17d6d867e9209aed37f35322234b00d5a3b59413bdf6dd12056954a83e2308916407c34ab7d00f54a7aa7648c6549209180c06230ed4cf0b14b1d0949a4a610ed71eea2bdce9465d5afac77148dbbf76c844505d4791d31893223b789b45ef3d3a3dd4ceaa0ef1efdb8d10c7b3dddcaa3aeb5661c4121e811536e48b9b42b628424c3e4d253309a6c7f68db008e5a0a3f28d4faa1123e06ae057b5de29419f76520000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000950f8ac82033c42fcbefb578ef24c922bf17fb33d5eb82232eab73440ef6e40ae1fc8a3762ff0388205532021006343e870c7cb894e49bb3efeab2d80ae0d67844dd33b00cffa6e2092ccd7d0bcc807294420303a4090cc076a84cf09fe93f80d3553703d309cd7093cb2ebb5e5f5ed2f7dffd740d67bf5365766ffc733888e253b769f21ed48b9e89d90f744a9702f22063d67fb6adaac1b6825a3412edd398d3d81b5deaf65f88b5f675b85c928f4f8234b79ecd8a3f0c51c5fc1c666a7b80affd6a12fd8d840ba6bea4cbc9a94264dbb18760590e00c9c85351dd0fc77228e691be93137bdf40d095bf42f862f7e032a1d5c52de9bcca7fba323b78419f9b24ccb97f53c12a5ae5fc918db345e30f71df1f2ca8e6044f3c4b07a5d7cc0468ea5257b1211de5e8abb924c33a80e741c1102f37a01fa049474ee18e182da5dd2fc92340328e752b16a513d14c35a90f0ac18b43f98fbcc49746b4eb45ab8d7c5b32b1436fe9af32403fbfb91f9619fbfcbe2915ca9442b3c4a436895b0a7c27114d2ef848d42aa0a52cae88f39a8bce14abcbaee425d5700e6f1fe2c577d3f403e3ef72836dcfd7c3e0f8b8659c36327b7c70ad34da33880a8a4da33f6b2b1300000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484018e8398158106af709566e442b8cf0e6b7bf53bb87310106e12ab89ea1ab64de289607adc4d670af4c396bd63b2ae6df885daf3f450c0f272ec6085f0905733c137051dc3732390a9ee560aeadb5c7e61c630bb9aca14a05f329e00b04b61960267d01155c441e636f50b4948426afbdebae676469b0e27ef587aabe61ec95c010325240faad8c3b8f540eeb9e23593ae2a81d8ec3bdc3ad0ea312c32cfd3489050319455c0f3d1246731ad8224f6f97914e8b9bde3cefeffcc5745dbebc108a0ed359733856fc5bb000550867bb7f63257697abdf36c136662c7bb4ef44d259300ad8d7076e02903032d16cbf118124bdaf4dd0631002e15cfe9b61e2ccb0db294e2ad61e309298711b121ad7719acc57bf2d80ee1bf15283b70a61df5530f7077ce128f15fd81e09e618eadb45b36084840aa74db1ff5365ea5134d129df331825875e5ecd6499d17e43e7205bfde0c95c9a28a6fafeb764bbaa89d5ed6d8f19a8090b8ded6213916ca36c4ebb49b9309ab11b92db579c38c922d0a268b1372a7827e78c5f26276847dc91e88fc050a51c59fbe68f967f1cd3188fdf8ff5fe254dbbd037363aa2222ed2ed5fb0d056f3842e693d22ca0378b214b7e50e948e02c7231502b7f2b3071856598f0cc43c9a4744e294f2787a9add7ba85ef2e31a2f29b229d8fbfea0c92c8eaed9d09f28171555744c7dda27b42e3f725bf5a38f05c21f034ddc30b14cbdf5de612ba6139de0a976d898af91e1c98095e22ef787275a3a02fac53f8447c3e9ed2ac039cc50fb2e8917f55005067e42e9628aa3391a3d926e562daab008bbbc29526c2e591fa597a16ba1666df1cbb9adcc56df79163974b50e9add333500e79b07679b5c6177ad2ac9c53298d1cde50ac0ada14708f01b407555cbb999904b62f160c7d04f905ee42fc47f02978ccb561641f4500f98dbd614bf73646b5e9f34698715c45cb5bca4f71a9e9a514dcd3ce2ee589e2579b7d093224fadefe9aae243d9f758227563d72b54862dcdeda19a4ef443771047ca9f043297f24f8a2b2235d573c1bef9a7db476b31163f401310981a22c614930c0ec91a06cf4bdc00c6e106bdd82e77ad4cc5098cc52069d03ba5c3a51e04bf8e83949bae05c0866bac0f37914f45ba62ba56d2bdc663e407e23016c18f15a13583e1dc37215290abbab93792ae0117fe5be71799277d8c89c15601a409286ebea9088efbd2188ab21f4082c1de31019fa4a7ebeada7eb5717a08150b1205d16b2460fc62373c58f3ef58f00a322dc7cd48f5a55c4f401db966d67c0ef929a42d7c381e8b7283e71eff8476f64bf7fa344794a5b6f1667f76bda1709bd3151538cd2c96efd4aee38b0de74dd35d2b5c78dbc63796613b8e1701dc2e341f2575477c83766ffcada7284fbfa50b3186be623bd4ee5a2628743911319df6852aaf19751433cce85c982083b0c9e9e01ede7c6d15126f33190ba16bc0f64d691828fc63ff3d6d93611947ffa037ba3ba3154fa0b6eadefb26f23d2a25265b132652aa0bf088cf58eb4bfce33fe0eb8c1afe357a1d9dc1c5fac917372ba35cdf27f2428aa2d6ebbe55730d47765af4c25558cbec6002048ffaeea116a4305aa80a248139de1ee52d39b2924d585943fde0a85e07eca258b7bedabb11a716b4c612cbcaf92e37002b86cc10a7cd58fb66045d5525d259b10414f2d392d663f2311c3009dbe1131605fbb5893e2b100d1269544c0a53ca4091e83cfd427e70e64c0b14a7d072fdfe5e0e443e8bde13083145e38825404f6f8f1fde307665a9180f1f91316834b474c416316790cf97729abb25f8b470c135460dac290a48b6e91b069d098650afbbff2ab80d2592f12c0963273630391ce2448cec4057499f48751a8d1f44404eeaa061659e59db2cdece4ead4e2b8d346f84a8d16138a03639e4193a41a778a32077cbf9f5d14e4a47b4f450f8b111bdbe83534204131750ced61261948b53490e76690c7fb1e16378b8ddbf7d321a5c35f6c43a3611ec61452715906ff842f002f83da8bd5fcee645d011713e8d48d1203098f974090a55d9552aaf7cf55c4f9162d3e040db0a957e7543ca21efcf0cb0852a15dff9eef7c2d7252c3a72810ec570c3c6a48da1a3083d7a2cb1e7cfd7d3de9999de09117a17e404a97f6062019ac0a7768921b9f603ba1b31b409e1a71a70973951b143d9a81903d92122cdb2e758e137b7567def48f48a301ddd2f5643f2671d2026968054b9206f04442d3689e54aa7a0f603dad9c9136eb5f6b650310a8c7b7c83e7824d701376f2fe8009dc7c2923a660871f8686f6e1b3815f425d2d35149fcfbc6fae11086dd590ca2585999dfb0d806c66100c7a017599c3f85ca4a6f7798d1ab12b482e44e983023d63a07bcf4c2b4d828b9178de852649c756c2e7b057555a8167152e27ba112729b11fef3fe5c7c4e116d214aed0e6ec45b478f1ba9e521f7524b21597728ea4c6a411466f52793db89ed3eba2aca29990a2dd0711323f1f0c95eb2d2380babb13c9cb170d06709f2eb50514ea8238e20645dabe9ead2d0a4e31ad03a4eb9704baba7a3b365a658fe95edf3427fa3ed59a0a3b6c30f0293e4b96d80fb9b65b1123bd8c8862eba6b0178e6decc691e31f387d58de43e0adaca71e672602bbaee359b398e9c125e412ceb9055eb385d156d8f9183a20dfbddc6cab54220697f2eab7bdf28891256eb16c13113f0ff1a13f7bc89bf64bf00d34a7101b14a799b9a382c0d9471bdf82edbc85ca148607ac3b5a9b2d12dc57d598b9c8d61a4bc52687800cae55488cd33d933232451885ec3fe25dfd751ec861b928fad302f8911c5b438d3086d990c2dfe7a26a02f7e1de9d605efabc1983935453cca64020f963a2cd50b4ad6b7fbb03d64acba3f5460464c7c82ba24ad322ef641ed24a18fb336f1688b0fc82f8b3845996a66f8ca7772cb87c5d034440f5c1620beac423374b2526a662f14128d9143e6db54deab82c0aa83ee518b09ea9119e33fe940be1865690e3da0578143dfa2e1b9cacdd71de5a7d9495f51c12e2ac0f8d49462d8a5c190028c45681ceb4ee564a7652f0c242b56161eebdef50e4172ba753f92115793216840df113e77b6ecedcae44fac60e1327eb9ab2719de9d5ce1020910ec02ab6e2cc16fcdc2595740833e8068a762bbd0fde4ffec417d399c854b0fe1ec6b5eb9c9701fe7dd2570340c8ec466ebefeba3929bd02e5ff2ff4abfb694703b6cf0c2f628f7963c32b4976b6bfe06182494a7101f7bfa2e51e209426480c25ef030bcbc9f6739d85ea600109b011624642a6486affcd3850579db670dbc51f63c0396f11c1ba87faabc10e34e7242a5274578ea4a95904545a5b1fb431ba2227aa2db794f8e7de881b6c3a215f2a2ef876aa717c3df5fb7ed29153439c22190d50c3548de05fea37129384663ae43dba6c6c86ae310b1edadaf98c2f778d1e3cfef016b3d61b4a48cef93a07989c25516d4141fedf14c005526018e7426a2a894857fed688314a9798a066d4d1b4fa9069580b5fb82ad42d6273eb1097d42d9870689e410236537e351bdd7ccf393e456ba00b5e36a43684516a6cf8e83f26d9bd0755c8e76fbc177d5ec6b1adac1e8278faf4aea42259b84f03cddcddee21c831c0fbf1760ad28560de3822d85717dd19d7835b2ddb2714d03dc9a533801cd53d175c3209444a3278e803740a01872d4d4e6c55a528a85bfeb50832263d3020fdf85eba2c7ff873b9dd2c5f4b09b4d0a143067770ee1939566f2a5991fb01959c75233dadeecba219b88571a94574f6c9e03735bfac1c865ce00aceed900de743f61319a7a7eec0e8f05f0f8dba774e45e7428da6e073a915b7efdfc7b72f0ba8033d77cddab0d06544480ae5c8ffae48835b1cec6bae415531721deb77254217cecabf6429294d5474fe7fb3d966a6d025a1fd3a05e80a8e862f7fbd9914a8adc6cae91fcbfeb1e1ee360c3e687ef540e4230ab5edf607435fd48707461ea666309ddb16ba28a1bdb8bd96f45ad2d6c8cc9571c51fa89e0aafab54c052272d83c65c97b1095a49dc86614cf85bcf65a11b8a2805cfcec427fdc250b2b1246d0c6f95e1b2000c7af0f697018567eb6fad9327c49655c31fe023656e98d011f0c7477dfc981ab36763e3ec38a33a22e1f9963fc927d0765cffb89a994fd9303b416b1644214475c07b5c9dc508a37834220a6c38d203a205062fc9bfe24f11eb462835b348ff0e19e51f9cdeefc16c30b730f27aae6577ba25f313d74bf614e5ee98c1c22ab9ae5872304bbed2317b8689f3ea7427d47d6bd2f15288c90b2d1354dc35bec20ee1bb3e6764b95129f42e0f71baf3ea1753ae604cbd5b0ce32cfde2c2e247e12c783ca29777bddfea22558cd3456c179067ee6411909a327f100c23cc0dce2001942bf38f6f3c8b092744c78ea6ecde3e8d6eaccac4aee5930f76a9c0d5ab12c19e27ba3c98ccaa234eee5398b998dd256b94464852c6ebaf26160501652e2104b81a748f0b364a37a3a38648cb2950d230882aff95236a5f1e2a1214853fd77a2c152ad755801c307312f377eb72372ebc84223639ba2aa2097f9f30f0b5e91d5ec773ac131b68bbd9c6bcdb1feb406cfe5737c6e2329a4b24fe22bb25e3803b17a8a20544ab289676082640327ca1c097cad245c8b678460c4e620f07b835334d1345d9f58e89b3ebf6065470d6ae9fcb5427e4987e41cf1eacb97ec2a3591c5c0642439e11dc5cd8802fdf3aa1ec81f7a56343a35377a10d4abb27d5e4e8e215197e238055ec31fcdb4338769a75d11e3d10c2510615d0241d6e915a6733105536ad44bcca15bec00769b665874aa2b2e10b289cc074f618aa85436a2a88bdf38f3d3371faea1ca088e46cba276ff4dc85a511e3cbc3a718aed20d38a375cac367d08f7d362c74116ca22581b4185e10d4d7659a1e006c28057d5ce9021b0b19879244a69ccf6cad587a43fb0d0b12a67669b24964f7e925ab9054b55cc85f731ea729731bfad1421053b22e3ea1987c329c88be9aceff126dc036ac01190177b4fca8a15b1d251e15df3cc04a11b77e53e3346b839d901cb08137cf3d37a9bc7e575b9967427112b64b6b9e5a6b51c1f2e193fbceb62b2bd06369b6b89196f4e009581caf996e37b720fc750c4e2905bb4e56019b574506f391cfbd395609bf152d7c9a8a611bd9d5b330bdf2fa740220e3aa09d69937255244ee81ec153ee105ce00f1fdd235b07a9996fe90a89e31ad7b5abcd48f2e0ec76ae986645560d80ee527f8e7e809e824d172ed9a9c823eed0b41d3fbe1f21eb1c5fea6e299ba98d706eb04974b45dfa651dfd2f41b29c4c4285d073bb2fa2b401792626dc875faece4da57706fa7dd07dd41f9109612b805e4584d8b81af2c6de114c1602200b8c3905c1fdf7e19a09f9857918e7580c4ce99888ef97f7514b07656468bab2c842356f30af793ae22e97e1aaa787c3874b4a67b02f11d2824a0e4c1d1f9eb1af66e5f8384c0647a82f10b8cf15973e622042427bcab600d1fb59bf799cc18da8b367f6a2da3d4555364573650d9b970838289db1260d063218d6ce1dd234afb4887f12ab560ebdc4e12cd88c3aed8c97d5670f0e6214f82236f75bd396902e7e634875c68e17d565c409b0bc47b1e8c9ec75fcf6a36d8f326e02ba518d91bf8f56eb9c544ff832248a698880d04ac897439144052a0d4e905f4cabf7d1db555d6d64bbda6b168d209f061677261d7e80508aa756a104324003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000010118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000100d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000100a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000100b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000001029a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000010141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000001025e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000001012978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000102daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000010189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000101159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000001005ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000001005c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000001014d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000001003db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000102ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000101213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000101ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000001014fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000102b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000010305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000010280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000010223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000001017a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000001008858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000102618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000100f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000100e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000010172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000100b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000001005bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000010137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000102e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000102297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000102608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000001018373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000100422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000010204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000100afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000101998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000001028d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000101da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000001021d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000100ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000100e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000010107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000102f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000001009726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000001024f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000001003c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000101fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000010205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000001025110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000010283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000001021cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000010094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000100c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000101f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000102421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000101fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000101bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000010304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b25b5fa153072c50abe53957c424c2c841366f29899199e208069253176640f8961bd45a77693997f442ffd7aebf1975defd210359e8690285d0c06bba8b1b5c58aa6dd02cac2131f068e51e56ad12595dc1b14dbd69bc9795aeb3930f5e1272f4a357421f0552a3d08230e88280ff7e9f3f356670696065ae99434a5ffab18451476d5a637755fe2ed833ca94f57ea815207c463020de1a5cf01facf43d7230decc3b680a85c40110e169d06cda6d750500c4cd1fb4c811394fc2a2745a291e858563243f9957047a4bf59f9f0fc4ef9cc85237de2d42f4018f341ce3f22d6084da03f9dbad9cdd9853be5575738ffbc2c4590ae760bb9cf7d05f6df8c591dd74d4c3ece4d993d10b2901015b3097ec0eb8cc82d28c1176fcce0715819eb3c336a868c3b84896aa8b6f801bbb8b6122c9d6fdfeb15ec8a12cb4d21ed8021ca706efdcee8ae1009afa2eab978e4588a6970e242a93ad31c5966532741a51987bcacc0a56589c1d4171ed6afcc21bf59eb83d80c26be652cbe695d2a05e4878509f1f68a0473b1eca408e5ffe6c0cb9d9c8122afa8496d9f1fda875ab7472f13b42d3a87e9408084e80d5a3947d379d4167fb563e4e61b75c04845129b04155e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8e11e060b309befe1d47579b59844b13b4eb970a1862a7b33c85267183c71584e2c54cc014d04c26cbebc0e939bae58de735909489b8b265f8cb7126da8dffd2ba8c664404ac355c27c23aa47cc86e3d9d6c10fc1f716b716f25dc0e78d4307aebd98ff004601eef7556a9d550ff8db73b7027cc2ef9a7f9e25417df0150e07c8983dec1d5a8b24cda998c5f57b4162a006e4533c80ae0349796f6859525d12360fbb625d3da977717add133af7c9a43d2a21858f701863e45d5bb67117be4fbe3fa4fa7dff09d4311942383d9c86b6b88b63f7f8c53fabe280e2655f3e10046d8a9364e49ec7735f5e039775be41bfdc3cb71e1bf1d55b21ba5d75f058993000e5136abd7b7723df4e2d927032fcc8e8c86b0a30cf6dd6ac14d47d1dd701f2759193796ac053d0bff945db4f9c48cc328cded889c6c336f97bc63e09cdc61f255955b0e18633fe51ec0752694e4f0b3978f7c679c77e0f56871655796af838b7d9a1744843014b32a3746a7f2eab1fea528308701cd4d921fd1531c1e4fdf45258a3b5b3db2e25309ec77ba13e5c8e05e6c0b1b527810e4e20fbf2672784ddcabe1d2a1549da36f6c864430048e41be5c0d38e8b70b8fe84b4b5934a9df8830000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000226f980951c0f7f93be358a8e115f122b96a03ed5745f63451e9e35395826386c1ff80a75f7d46fca2690f8cb7a6df404cb34a7ba19893e43e34054d98225f5bea008eecc8d11b0856793b35ea703902afc380bc72d359170f5c307007ef55e46e4ed7383d71fa050780c449f460aff0288afc2c4f56e9d567093480391e091d7087c029e4c5f6e1449c1dc7bceb07d6df15877b8a37f3d1c1910e145d94d1681d80dc1c070192a320c8ab567f2218b84178d2194fa08da7b536544331cb90e9575d748beda58f6506f750ca44bd97fc7683fdc836c78baf89e61d6f0a1cccd2ab94bd90b3acd90f115ee876be6af88116c07b862a66d45423bfff7bcffdf0584b4854e0b71b8cce7dd19345738d44c41abaaa6491b760d024aab334fd68125b29674639b957ce3eba539e850fd5e978646f60f854765f81a3bf0721c483956ed088e1bf8bdf0f83c005f3c6988486a986119bf19cdc2a706506644edfdfe8163d0b1f90c92c741b8688475097ff67af588e8bf19065c32cc5734372296cf3af009b2d1f6f557ce20a034e3655ab873cce32d34cdf20c1e822712b5dfeb785d9f7cc624e1ff0018c000f181331d25a59aeb30df198713371109ecd7fbf81a8e70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205629f5b99de88b4adf4f772f3f2caa5d24b112626431b77e47d26b49eefd372fd64e01a76a79b49a2345e771319ce90f696e3f621a0389e6cbef85ac3b4916b4c7f7f268f80b7f59c773bd19b7d794a302c1a573c14dcd4d7c0bf0ca9608aa8761cfa9a2bf1eb5567be87eb11b35156e01880bd14ba3a9d402cdf6af2327494ae25fb50c5ccdef323f902df71295674dafcfd384eb6d90adab89a79c6c457d3acfb8a4e59111f3bd48754868b019159dbece78cd72527c66ac8d1236baa0898a0052fa78cf08e8cfc2e8e36dbc3d87a7dc3141cd4d99b1a758cfc1d96733973557f0467ffface2530e30760af00760ef17822ce5dd3d38a91c3d8403a6b0417c08229b87410b0880de4d8659f3e2d1e5371f403784d19ca2b3975a048c63ac2f92559f0252b7c287f915db926fff9b963de3897a42d45a918ab4613449fde92cbdc8ebd0936d5ebe35599d4d33a44370bf2e6939c6a4f2f00cb05ac1feb5c02a2933b5303d28555d406796a9fe62d8e6a41003740fab100776c9f11e5d6c5327a392aee33c6133ea063eb7d1df77d704c6937dd9a678a0ab0eba262e42ecedb9b173ccf157d0438ca243e740726dc1db466ab04513c47efaa912dd93b9de230000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af27584798edb31da44dd2b57eb6f76cfeb546db0fbabf2dee59ebe447b95be924266f069be1770d8a56e38c3364a127e152bc543f7505fa59e7316fb83909028ce5c70bac1d92dc0c07500e9533ee081778499cfa1b54d840226df6f6e2c7e76fd350bb31d05e70d4c06a74cd81bf9a8db743ff0b9e812a3a6939ec7212c05c7b5e23e4d5569bbe85f226c5af0ed80a438a73bd842ba67929a2dc11253516fb7f24a3a333e00850339b06af4b82613a1dfae13d2050ba4eee4d0a1d8a53ddfae4ba9bdd25db926b9e5e6f9f1da8eca1936dec5efbe2141a4be2ac8e3fb6dfc1d209483553589e777911d528139d910cb325e4acefd619c975c938cc3cdfe408c106d0457b9a033d0ce9b07d673c428639b25192841492e8780cad4ab7289c1433a58b0099fc5b50dc4e6f441f64071cb846e698b8542a8d461a66b83d2c5cb3790d99fb1a8340db7347bb9621b97a20f0b94ed39d126e6e339ee45d6fd4c79c63a93f1951dc4ade9dea68363c73af5ba67a0a2a76c942d5cbbba1bcfd746659faced92e780eb2b16c1614e93b4007de9bbf9f7321045fec2b7e645a777e8259e13c070abddec841dc3db19eaae76c125f8e495ff2779a96f5d662a17d5ee8b6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095c990be9e245996fd4a9fc819c01795dc34fb47cc880677e581e5d99ef43280264ce34daed0fd4237ac094584264a1fed99ff13271738ad99b97e0e368fb89e8473fa33cb3b83953cfc9a8c7aeaeedb58a87e6425735e72db25c5e8dfd936e52162f34285588679e08c61b83332dc045f4af769a533b97c8e8884775551f40195703b29ce428d615777b3f14c9675e2c2e27ad387358ac96cf06fd58c27b48e85c9cbb80f98b897033cd2b976075a52f53d35b0aa425b9124feb5811396b8cda35a9d99f988ffb178d1f4b1ccdd7ea00e023b313c64d04c7965a9e5c51071654fb4fa6ad8835ac1657fd0da6b16edfeb365e31f3ee5e2254b7aaefecb2bb09d6420e3a57284983a83b025c97c86bb753fc020083193592aac28da33295a27fcb93814021a5058c223696c35ed89152c44c6eeba5fd62b7a58ab4ba171e2056cadc2eed5669550fde62b159eca73c8bbd29a22396dfc86857a711b3fc293fe8dfa4494e2351679901fb6dd359046861e1846416abe63cb5ca6a73f754b44c8ae57743e2e87c7e555ab29c5a1f1bd233a7cc20e52f20123495942577772e567e0b29ed60ddcd6f27c44126d930895a4f68f17b5732bcd91dc3472b0acde3ebc51000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084b4b41242d701bd837dc08d1fc73e1b694b6550096fdc81193c1439ee555a7ae8846e15f954c02fbc9e348428c430489f4d669054aaf7eaf7aecd739e0ba0ffed3a20c058727a6f991ce9dc2f7fa060d878409d71bf1471e410f6816ac90343dd2585fb197d4aadfed6b2930c36022d0dceb78e932168508a204527ab05f560f28b661e16624fe9017d38082383ab49891f2afcef3eb34d9adcf449cb5bc0ed4b76319d7496b000185222420e566b6994d6b47e6e95182543a258bdd455e1c3759cbc37e788fac2defa57a216de60feab4585e6309a0dcb56ec4f79747f5d2e52a261b7fdfa81d898744237b04b546e22432b5a6a9b5a9ccdc9e14af7599f2dddbc30db350a6e2451eb8e73759928987a8b46d3586548cd26d35420c5f246a68cc146445b77ef96838711c185ed7d6a5208ec3ed66532c9e0909945e24b1c8abef098f1b73caec4118b719b491c6ab0b31549da14fd3a1d7610fd1422d4f204d07cba0f4f337fee30cc8d59cd388f70d25c8e3b206282a5adaef921227c022810d2019d5b5b87310234301f5875402ce0a9fb7e2ea590f8650b3e145cb73ba21b7372978b12c2cfaf0a7a295c76960d319936b8223ec6c4c8297dff33d2bd29000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021e18186fe8afc33947b75d4f90a96c08cb82c2be8f118e1a3854a72371f76a280e37653b8da03a11525482660b03e75bf110548195bb9390f5f866730e1f31c5e41846d2fcdee195b1479c496b2333440f856df4739ef639fb4d50df5d8e18be5bad03590d883f0cd8abfd4519601a4fb3ac75297c7b64edcf3f4d5ceb3a7eafaecbca74c79a9c1ef1819034bac6f3032cd2b769975afc1ff0902a959c277739b2d0641ca7a05d31dddc01be9d09e7488b045dc1f77fa115b65fc21ddaf08eb21ef42f7611eaa49e22a0018c8fdf45792a9fbfc5249ce2bb6863693c0fbca27090e5263bf359d29e6cbc64b21c2d181d8248fcbe6a30fc07e49a4c18c00652bfe753263f5a45671e0c6dd46a50e2f51066b7d74afb4727412783bf42e6289d9f9d14729eafb9b7bfffe7bbf87a24f7ef051f70db5ed43033759f4310bda001271192df951a44ecd8fb587c3331a679fca78f3aadbe2d9d76260a8d27964be372fc1f0f8a09a0d29aac9e0e01c977459dff3c627386f1a031995dbb0b2b6ce70f2e9fc03f10be2b9adc0e6571f973d94fdafd4f27a6dfd5f074e663fcd3f26b92470f0a49b7e26c1c05282e722dc85c61cd82c87533e57347aae8fae379d996400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f0453f3ee899e5edf4e9daa534948907c3581c0bddb06ac7d41731894c77f6b76d1b5fbe0e5559b139e91ce3663bc566e35b36e6b551f01a1bb56b6537ff004c1b209e0ffa452017dd39671a5bf18e6e1652ccb68cf0981259166e6aa0e5dee004a80aea40189a8494dd45872a144b08ed6cb6931a0f38857dbff5e84bdca0b53887ef494e4754b2a6eecacc29f0ac11a0c87236d869dccb7484a4e73a50e207d0cde2e576ab64d5971ed6bb12a0ed1027636b7ae4ae4c9643b7467e4512aabb66db962aff986f60c263ad400e514e59c18456f4c748fafd37490ee62a0e65c2c1c2ae908c138bb07980b4aa1d13a2a5fca554059b5f568d0b135ab45ff131ae48802a92e6554f4f024792a69891066d2864aac1d07b20dfa8de9ac43dc7eba15738102c3e4394d7501d7cb417b2df10f9af12cd7df3bdd221548813cfe83ad4198ac5629ad6dfd057a46652202d51e01202d682c151e5cf629511972b21734f24790ad8d28b223cc8dd7077fe5c130cc47a06d1a68c5298ae0df3462f28d7098d654fc9ff3a5f05abd6534f7487185dd4dc08c6d68cf9aa73077ddd0c68706bf11968ced866278e86475aaa28e6a2cebcf4f04f2cd927eecf96024c33ac9790000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1076d6787c21160760b98bab8883972b7a30801f14dbea913e1aee7f1e559002827c8694ae312768860602d8bac63e407123027d6bd7658ce0ded04942e908646bca89504d11c8d5665d18a7ce048b302adc8d5a5dd5ea6d93b7930e1c8fc160ecd64101d63c08ebefc01f42ed1b7f43662084920a0a86200b082bb87c2eadbc2918382354efa84f09e01ef33d15b45e5894677a14db1c9580e92e4f0ec44a866e4db6d6eecb71ab11d616147a5951485bbcd8f6027a9fcbb250524e965cdbd6fab5a7650b3295903437a3b53397313e99770c39571b6645417aa9ada053e1d4168fa03247442aa8f9dcf6aa84a0e8fd80b25ae60b8583352adf7e428b9fa275eb699f5c9400b80d274110de73a21e06738ea5b320f992a92071615dd72f56252ab993b778e6f7fc04ad0e6e10573bc8dc237ca5c0696aa99d1c93bfc05a5a3766f12dd6bfecabf6f15d7f4ecb8b9e4b3ed76bd065c5f216e27f8a2ee9372a2fbb1efbe56b98d55287325243264227eb2fc3eccbc223a457e882c86a43f9cfe47f45c49f6b050b654747106448844a8da6cce4b30e32b3f7de2bd28faa09bfc69e268bf11a9bdc7762e195fb1e2064ff8a62d4c15b7f14bc29e3f91a401375f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a389806168a7194cc3d4be0827fa8629dc7a9091678ac0a317d7fe26dcfd040c36efcb97c46f739d2bce9bee028e6ad3f431d05252ed1ac729869cae3ff4ecfe0ab8dd42ae33d241750c44f9fe06d2a031e7d5a545497deec2d94e4945ccd4b9b8ca52f84009b25e392aa9152755616c874425727f2f3ae7b6d2c76ccf50593ad93081ae04cc06449750ff18aa995be9c092151c25910126f80b1c95e69cba90d77ea027ad6581fcb9c7722a1fd5fea25070d5830f1278a8eb5a7bc9ee006c387f07bac686e9157269677b82cf50c35ef4399fda74ade71722c6837dac211f3cd4a88bcf12694fca14f559495659126c81aae62353780a354b0e54e7dab044533ce88ed90f75c8ffeccec6eac29778e5b32a5b2cf9022ae4fc0cfb28ee3dc8f2815742bb045ab8f0414f4670ebcb21a0a715b77da68d432676bd630272062e0cf611d04b1c195ed0e6632c96b4e433aa7700222b472a8bd8e89819c0dabcb71dfc4783caa38c559435de9540576a27fc5159c2d3f157b2619c0356e0befc702d29717bc0e0eb9e04febc231db2eb59704f28643d76aea368b9ccd706d40a859b48c8ea6578a904752449c7c15cda936cf3aa5299bd27c6fcfb0f681ad8837d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023a69c18d29be784303cfe146e715ef9d5a3c098c6db142f7f4757a0a40042ac510ef83960135cfc368f079837dd0fb034fb1c07fa52cbc8b474e8b69b15ca0a6cae30d600b5047de52ce1f61883b525370a2e81595f5f42451bced687a3feb253d8ab1a73f4da1a243de40dffd10f6e997e2b96ee87b0f886d9ff7a980e2f4fc4483139325c2d7d0c4578ec8a041cdd07f66b041c0aeb7713a2f6544c311541682f43ffd9783694c99e11cd47d42202ef11b2087f3a97fbaeb8fbfa8fca2a7ff73f00d6b8de97696a0b8de7ebdff730e4337edc4681e07eff76b1d0684dadb1e0bafbc2b07ea696d6d08ef184ab4fd51996147103cf67400cff6869401181bb47cfeff6cd2256a26bafb0a67bd1a75d9fb657485c161065c9c7d64d876033319e8bf4b81869d319c8772b73f49b1e6df0030ba3d7bd4fd29fbae7f7f9f406a21ed190eb0e6aa3f196bafa2000e9ac69d27ccba2c0be9cd66912f24a0e19c4366940a0eeaf79f11e61bd1d650780a20e053683e51dc20322732e6ee65a7ef79437591a754b63fe5e6d68fb780548c376ee272717395588d821ffe42d152e514a416ac9390df4d1209f9d14c99646e24892936a724c844f9ffeb0b0a201e4ea700000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000849c5c3748c34991d2c22f29545e2b477e66c8ee378e2cfbaaf51737a3fede54d87f3fb13766ee551b81a4a5bbd1be30cc6fee50e2ebc916500667e48c48ea2d222a88ab32fda6a6aae583c4c35e77dc6a193d0d84ab70769cd9475cb0dfb759b40fe93c8446f83eb1a8a42cbc05b637157fd4d4275626a461946cf9d84824b73949e177214121f895da6ee2a969dfda90f4535d5dd82d53faba94f2e4aab168b2b78c31372078c15403a20e945a2369dd55f07b30ac54e82233a092a4a3636d081ddd612a1909890b5593d3966a0c314312e42af1648b131e9f8007145b55767d3c7a77bdbf59fd9777a0f3f039ed4490d2247a33de9362cb6ce6b22929a23112abc3eea71d94d8e12a19edaa27faba0dc4affd1612cd151510289dd778144e9e972457fdacab9f3f6bcaf1ec7585936c5431b042ba779219295a6eea67d7343650559ebaf0ec136388544b163e032eea9784defae190afd0c4e42550574b4c46a75afe38e6b6f1f72e7b4bbc4e6787ec16ce983a19aa8dbd053a1cef05dab4171af91de1e3c7997e08ee8da2ee8d5e93d78d0bc1e9337f97bd195d2fe3b2172006d6544b7cafeac6b9b98d8f2d241770b6afe65c916d6b15ffb5c27214ccfa0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034de2ab446969488bb4d0d1ac2b8e4c1537feed81f83029f84695b7ef8a852044ddb06760adbcbc04ad85ceefef90ca04764fe3184641780fbde629ef6f9d948abca62c34182158be222a6b00061bfb355fb2ac7c2d8aafe51b8e81c140cf0d48c0028f24c140f53b06cc8996faf1389d2c9556cb727a3937e2191d7e6e952d76704098f79c8bfcc9d96a1ea32c6c41c0a320cba1d4ca12449fca1660ca1bda16663127df01d9739e45c0fdb762857239d68cc84860bb15857f9a56a996fda5f7cc02ccfa24980dba3408e550c632d88b5d9cb16c1f0574c6b6556c1c65a053b3eec80c9b3fd69c98860a721dd00ca5f6294025be5845e51a24c8c4454db4939fa0c193338f568d8efa020088c6d506cce5c0d1324186fed7ee672cdfbe4e11a149ca2ab99fac6b39c415cb09849d8a6ef5232c63dc7d4c0683ff763505202a27aa68830f3bce6abedf83906830a06f2b7a489db8393f521548fb10f934b9f8962f6afd79aba5a168b112430aac1409a435071fa0bbd4f04f39ebb444ee385544dfee818c2fb1a2bf9df6d848d56761c06aa0cd113ea37a2c0eeb464f0e7e92f7897a35dbed13cc41bdb1f00bd7b6a7f6e2277ec24fafc30bfcddc70119e65500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cd0af75fad4e69563bb4d5bb1e1cbcdb1ad36297c35b5733c068b95ee527cf45b68d648c8dca0921c8c7bf061e0f6fa65edcca88d4bfa55ec23a1ab7f11af22c38352f6ef3ab814c35c427cbebced991a7cb22c6a05f2b550b9b49d1e9641ef072e74e7838f50a8ec81c3dcb33ac36c85d68eeb6f4f8694e433d31ce34844d0387773fec2349e852378cedc956bb3ae13e09aedbe9c9cbdaf421f808c9f9a329764de659084ef1f5a4dbd27ea1fe2510c8d9aac4b73ce7a638b30ac9ad33367e1adb3542b1c69b12fd7c0294acad09d44d9585154e80f5194aa75084460feb37e1d7c2c2785ec1a426f9c3ae0a88d64e72f8fd2e004e35e172a166cbec2ce60cc51d8303055241dceefc39e574205cf3a775bd0e3c99b18bd35b9781128bbb78bc481c0f21f0eace4ad3aede6acfe0a843f06d02021c4c703dbbc378b2b5629e6bc9e6071e21d8284cb3dd1aa8e346afb0e616c06f139ffde21777bd8622772f95970f986599a9252ac1cd0d694dbcede8bc44af1e21802981f582b86da043cc5e3ae5319a41c16436fd7d4c51f955abd0e31574143bc42341906b91ca031197bc37bb7334b34591c5443fd948bf151bb4d32430371f59523d2ebd2a28c21210000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af66956a193513e38a38eb1bee38ef223ab56e8d0a067171a6296f3516eeaac8b57c196b09a9632322d7b9f9dacfd1161ef6a4e4df7782a11608b43ca2e973f378738442c963afb238c923acc972227da05dfa54da3d91aaa7de4d9e80e4fca9f2ef209403a7ba31ff3aef1b4d96f3e52575cb65679d918eb753e6d29e82dd18efb768e5d767d68ae154fca1b087411743b60ee103a2a1f34c1eac06bf6cbd1f6a019fa84e8e0ab08112bdbe0529588162e3babb75453cafa371cf487e638d33c93db6c661ebc9262fca38e02a3fc5f3761ab82a4fc72f5d19f91cad431c49d6976da9f58c5fd461bdc0c76e6ad69bb09957ee5b627e7a53008118d7bd5446097779124c575a424c95fbb9fee3d3d9b8e8d2cf1390e18e58b76a5eb7d6f71d207095a9354ccb6853b258fca74634bc62790e01505057a565fb854c44cd21db1a1b82a7dcfbb76e7dc01f7ddc38dca484217275e4c841901800d7c8e99f1d68281177ccc8eb7e0e7d9c9879710d125305f876d469abfdf5fa0dd4b8a642e19054934506aefb02129fd7f5a19b5cea4fe2b932e0f772be0c959e27ecc76fa88f3002498430f2f9fca784196d18159dbd504245e247607fcc0d80cf924fbe9cb05b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021debae1be4ca15e2f890f7118257d4ceee778156c608b3faa5a36edff8d0e22b9a6c8b667e2249b6e794688a756e894e4f834cbe27cdba389809f198976b8354bc9ab636588b0b076e5000d9df1779d8dc6ed7f40a1ca1a0f4c5cdd3d60e398181be7fe2553fed935cba9b278f6f5df9a6eba5a96565f917335402f221e9692dc1f8cd7556ee656a21150f6e88e49cd4784d65cfac68c54757bbeb6677df35bed03f556a79150d7ea601ef5aba43ff9467d85fd983cd031a5896414b82a3ef3198efdb08b89e4733dc84107499d22a6fbc3c469544b85b8c5034dd0bbb792f2fab61511184c0a022c2e797ca7c6a426eeefe9391d85858087ce94f7ae4f9e2dbb35937283690bd4526078468f4a250519b4f583c28842df7d39f7f0428c6bb4518a9b9e5f811157e50f3aa1817113706cd340342401a77b6106de3c6544a39bc03dc66e2a0e68fee570638f27ad2cadd212f1be0915482b04a20cb20b7bd6fe45076bb62f41eadf536c734728e081fd3f6b739040c73be1b32055ae7b6ef96d178a71154ba4adceba0e94f7232700673ad5a59d6235c523882ca9d9af1d23566a61eacaf72957b353b9d9ffb2c076211cec0df915259ce811d2554c370d4eb500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000389c50eeb85862265ac362615fc5ff3096095559c9b4496b64a372d5169b8d5114227d7f68ad00dfd41ccb75f77cf8ea9d3769e2756d0c27a656d3498922d3586e3dd5676aff2f37537ae7d9e639db62eb3b6e1931aefc6b8dca343c605855d6cf09a9b094f7278588f2de1df4128d03bb09c563dd33d9ce1592add3a0fd4a96a445da8dfd6bd93e31c4c7f296b0feb884ac2a37528f0fba577dde9ad9150917b8892ba10cef3bfcadb28f79c8c98c614280bed13392beba138ebb886fe3fcb36d8c27226a827d018bad689d2412ec8218a2df6fdcd1bbaabbaa77866f220989f19030a7e1a53beb596ab6e7623fc6d25a166c99841a54ef29b42c071ceec0f3e784406bd6aaaa36e8333a489113a8f4d69c4dddbe4550f8a860bfb00a71ea121400165dbc7bb3b5de5b9c28b45f39416cffb648e69dbf546c6d6df628619e5c1b81cfeda2cb9ec915301dc71f50d1574b860fffd79235ae04bea7d649b61b14fff03a25c4d0e37c987d7d4c977a2aef8d7f65a1352a5122e4a31fe2e8801489e7dde31bcd5c796981e0c605ab7defd3ce50b1342639d0b57e7ebf6970ddb28518d853410aa861c78afa0d3f97a000c7f7f560c9856cd2c025dd685003709070000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a78c4b7483f20f0e4d4283a60f1a6fec8e9e4a700ffa8c6c96808b5b5251f6d6781807d1f4d476c49ff335c22478623d1edfdc6f84904a5229f2eb7103df4a6bc6a16a097e20d647d2f4410e11e07f2f8558a157db9753d40f6faa8db7d24ae13d4f322e29dcf773a185ba387652a070ad555fafedf1e18e38db62c7bae9816d6251738df5af641aa7134b8bef9d237cbf7ea84f70ea19c9cea3f68910daac8ebe713d701eb31877bf097fca3dd590a15543525698a7dc6c7a68c4c8032e4fe3311bc2f1c33272e2b5eb3083ea348e1ab472c584eaf87f9d0c0b499d982b7b472df0f61643f008aef6cd97b7f222d265370d27cc87b7bbb90da9e2f5f3454e60a58f8a9ea03a3275e5b76cbc20ddbf7eb0938efddd68185fadf49fa67def41af8ccfb98faf1d21bd43ddef9807d9bda020b129c910e8e4ac5c570dd9063b8d4ce489ae76472ca1c203b1e9a2ca822aa1977ecb7c38409aef1f021d688cbe145cfb9ff458ccb5880ac93436e6b1bcac73fccf4079cbdf14621c8e428d923fa568ccd62f0f8d5630118e2fbad533cf5ada7f6583db78faf3f0f263fd38c8f3309d73c1551883d591cc0418279623f8bbc32ac01c9de6154d64f62ce522c619bdc9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d21ff949b76e4136ca9e0763ae09c4f7e7b0983b3a800284f15add6010d58d8b98b80ad48b2954dbccbeb3dc1a35ad7ae244bb58ac9f1588c4e6b03d92ae925ef33e789d47053a4cbb4d08938c786afab7a8819977b553fd13f9dbc73443e984cf99e53e3fd00676c0f281bb2b2cef39764b941baa775c17a7606895c2b07e7e78e4eb31d3856ba960ae1670cf6f2af634fb3a3ecbd3d58d0144373ffd29bc166ab6afb08ef0ce8120df30d04308e8934a505225873aec194f202121c0669254e2e0686629c73574787d49b892b0729b1c18cc3891ad4d0ae6216e3af155abd9c9b5d6ad21de073c4c6f800405eb66a3ab6e5691a622b45f8a9707ded4e698ce15c62ff69289f32475859f49fe5e12dcc6ccb0473d5333eaaff652e8071a8e1be9851766ff0c0ae2697087f4dc1aed96aae4b3a0d927f278d50058e7484b71fc91313f93ad15f41677e43c91a72d13f0d4c48f544ce68e7f395c736582f10670590d3d8106077ba1844ad6197e657e66d8309a1ca7599db5662a41b7a7b069425b16d06d915823c3bb4bb9d5921622735abdb81dd15f80567f8e92a932f4538d06443e4f2bf4fb576a93575ca159c09e3f3b9375ee0ae02cbc433da188cb7500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a4d0cf47e34220553da3bbe5dec63cc1fbc959d5fb63b5cd21f72c7b928a2ee86dd80ada186a7920c1f384ff80b8c0f588e2d0e08f69e8973759155b28f53135bf66294e5df0a853687a799db43d219d5f356a6a2e21beff71b57aa0929064122c56b827c7a734866a5c796882b7f2b4629d6c0173c48f3e6ad1df1e1796591a526993d76ab1e565781fe70c244164bee092124807837e7c99bfd9f9d6748fbd1f360a1ae5c7a9ef55f24952e61ab404152032c8f9cb13821a83bbe01482a7e76aad8ddae364c1d2c1088d86dcc500b53930a8418f21607d02ff9dd2ea0479389891087abd06cd31e235ffdd29f8ab56a4ca174ccab8bbc9091d618c2c003fdada63a7ea2a5c1633a0bb7d6734ef371137e8f4d9c07e8642f6e9b99f0e5d5e9999f40e7f4d89327107f9b01d3b415b9bff1aeced9a240592bfc413ec21801ea5e983ef8a8943e8c6321aa5cb70f10cad28172c3042a11ace229d66295aa5026e42b99894ec8617bbcff59f45d780f15f427b5eb800690286396a55e11dbd112b450943a7507d0dbc828b2dda52b31baf657e053d5e02148f2e9867af3eb0dbd9901484eab7cc88cf4f6aeeeab9b9ad766fdb9b7a6f7356ebc61953e1d6638c40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b02e2131b291623a73a8e0d41ccc5a79d3f85064b660185222d408b10416ac4434ff17504a079c4c9dcf40bcf4f50298053b5677b107cc0bbad3f92449c916235edfb0e8e433a20feaa7110f86fe9c2431531fa19b3d3efefe23b0b3d2d51b946b45dce461fc742e0e35a3d9b04550a1a244aa8b1b00b16d0bd9616d0e174c1a2bd507260fd6399735f4e4b94cdee83c1ebd27c54c188930c0cfa332671a8335278de7f1db948ca9b7fbc3e918459b2ade2b89b86bbbc8eee11190fcf888759cc0e5351da8e7efc51200c39d68b0c383f81f745bf7d9d042ed7e8795fed8a3a22890bd95987f9a3070361bc53532fe5f2639d821b5ffeaf8b4bcd3c69917d0e496274db5cf62aa542d55c17c495853cc54a5b6d596f3e91a464506b6eba554ca535aba7f404c26fa143465983a14f64200f1ae37c31f12da295449d2e3301bec28e1a48cc68ab7128d0207b1c07f13cab95f72d2871bfc5ed1ff09bf1484c6667ae88804044aa79ac55cc8d59c00855fbbb7efccc99df9ede549e2b91399afa3dda3f25fe27b92e40b51ac2d1b90b8f6aac5878ce1ef65a9ad75d900cfd4c072cf4df8196c2c62e3507fffab22c18dc42d9f4548e5ff1298ac77f08a7d1466c700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009438ffa5eccb4b15ceb8947f4e05918067a4aeafd2b9eb7e12ad1039d4b072a151221edbd4fefad2107ef594b7519436270703b12df87320d8869b6a2cfe52b11d80a03942c6b6c9d3df316dd613e2ca09656bb70c88c4fb1498fe6f144e0f303faa4c25a934675e6d5dc2c5cb375b67739d3b366bd51e291d5c902ecb3251701e1d348b298c30e4031ec8aef127f352ed28126a5cb4a16775191e4ee45866f82df5cff489b1d3bbb1b708d690a39fcc79e8197dd26e6ffabd160e51479512f72caf26cfd96519b0cf34985a80f63b8064f5b2f941cb2802f4d3f6c91436e0e16c3a2926b158e80089bbf0069a1f284aed390f62ee456eaf7f454f61ea478d84f89296d617ace5f19bd7db010e4ea0598d0607f5bb7efc451da1a8fa61ae7574b10d3305b3c804a93b6e77f9db1f11ca07cc0567894f5a65e5326258cf9001fe6ef5dfa89cdd3b82fa70524325a117574b581da8add3ed566946d87d63f35a352e1d98c4b4f416b6ed64f44e11cd1baadc61982cf48f908251ee5ab2986b8111a1e1708d9264fda0087004b1248248d25740ba089b30bbb0bced2ccc8fbc3ca81dd39354791e0f8ec3573cf477d89e42bf1d3ad48bfe171bd804a93ba42fc15d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e85381b4c628b751fa99c275a4c5be85a60dfd422eacdedb37451d942278ef842c72cc51951c569992fa5d0e22e636279589772680e7d602d6f462264bcb9878494a277a7dd23535f42bed5c317d42f3d9a7d8458fecf3d0b13dcdb60151057971ebb981afb5245665a343827083960f82c91d86ee0c8447756bdbbb6081df0b81275e1c384b217d09c68f5ca9f2ec69fb7341efc10881c50352e5415173298191d35077ff26558408bd9d48a1c793cf1ece965292346eb58441406596d466691ebabc3f7cedbb3f98a88b56a8fdf7ea507703c837684b51cba1d7e728f363b27b0b809842999255ee57d73acb5f0ac43de6490f28ab1dbb7778f28eec0bd11a413da5c3613dc9dfaa7902987997a8aa3bd2e32c83d1d82d777031ca4cf2677fa27e28412fd390cd59ddfe7559f0e2a6f07459ac1147706016cfac3ad54bd40046c74b3a1ce466a0c1a335d4af6e5c19b10114688ffafe9c78fb642e38058d06ae798e1b70fcf15dac7a5bd3a1e977b58099216f30bf27fbc642cfb8249cb9bf0ab56b429da21a53f9994283a528a2e7ca2c64fb94ab3bc6b51cb56cd8c86b9d9e2e235a8f9c3e91a2b9f10ed579636d0f90f8ce97f95b8c5d36599d122c1f6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010894e8c7d149de4cf92045f95efdd7609bb450a4849384a5b3772433d9434f4fea00ad02defd438a57f4b93b302861679323f572b0825dd40d409e7a6247c456f74d54a8bb7b9b23a00f23783d0abb7c899be1404b9114ed17ddd3a7496d64c7bc7cba5952e3154d2727c7bdd0b39d8d91345843213decb3fad246128cf88e2b3b9897e69b1b25be1a4a29c1df8f3ade59a278317f7c820428530b3f205172be4ce9f29120a98b396e0d5393e6436d40ea728d3f4315f1ddac61e941b2b8c5eac2b4700fdc29c0371d78a93525f2b1a555a44dfc15b19b930ee40a8934d3704f222ef66bff71f6c034556e491ced573d81893f85f2e965429cd67d40623d579fe207cd08046b9a1ef619f6db1c1797a420bbcd474bb29dc9f8dc3433010230bd545ba2463fba358bd0cc0c9fb958f17cc9acca15ef36e53cc830c06265289c7747eaae27456bbae8cc3bc33b6cacdf69fda4ab20d5ec2c2912695dbbae17572e5c4537936f3a3bf941b60e8d5cb0383e60df5f12989ae7063487dd3bbd415b5c2155ddaef5df7c88cd1bcdaf0d61756265d32a7982f7d81cd1fb7704dcdb9cddef2bce1136ab47404e7a4e709d1ec2687558ebfaba4c7f6b5c60f7ba36e0eb10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad5b70e2237488cc2ff6f981908f761f881e262011087fa50031b8a5b2430089c1678d7932842518c047605902dcf9efcc18756cd9bb389ddb53c099487e8a99ee5d1e083f85e0f2480fd252f00f60ccc41fce696b6116032a66728de3567990468e13f96e4ac5e33ee3002460959e16a944e0395f82e2b6f02555c792b6e2dbed95c3f46c4305f990c1d668ca18cd789fb8af306bd071489458d060ef78d13eb2b0801a5bd8b61364e0dc6a7cb022bdb988ddf192828fa441d2608700cf056856fd0d4f5ea561aecb5df9c1a7dff0acfeb9aefd12fd8739af69835240a357b8aebf1d2da5f415e12840a39ff9a2e4728c9d1fd6b234b00c5dde4f1658129c7795a27990b8ea6730e18b59b8320050ea72aeb5ee06ce3d2f3cf92106a996f8762738148a7575784d350d91526c1021e53c4718e852eeb3472097d08f38e5da3db6f7e67b4b7b57ec978e7c721350ac3653f3aa1c76804e886a9598f0a3e2eac8c5fa66a263e92c80cb18f94168b380340de360faee5e2d784c51d498f13b9fa6a54297d7398dc2ef4de532221b1ad51b41ac458ad2ba7718416472398386b5e834f453b1786af22ec461a235246fa905483746a21ac43c9703c792791468ba5900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c90dfb8dba8edc052df5246a289e1f885b30023ad5d45c8fcec1a583355b2c07348b8044e2b4f521285286d4317817b8998680526c97343b0f03d0ac7a0bac6bd83c5b403950361b13145e544dcc602221c4c68f8a1475ff8707a0a3f6e10daeafbd8adaadd39d855a851e980b75fa911f31005fca04882e2e669efed9b89115a4c49ce12eaf6706b5605ec32007244bfb80a2aa974fd93ee072d2a6feee42af4c3419a5e2a4fefd98ec07babfaccad7ea488cb12efe24d4f60e15f4254b49f2705c97a63a42e76b2104b1affffee6c6c687d4ade2b4b34ec54f5f1cba95ee1a49126000a81f9e740e1d20f5b1e11cf2fc213daa940d37b9aebada597e82e01ff0dbcc9341ccefecd090d99f50450e412dd87cfb905ff5fc053f0a73ad22ac899d46881e4d49b50bbb969d977d27da6077ddf56218093f1ad38cb264e5e9be738440a9590de7eb691ed3aa137771b22983cf5117ac93b22edbe743e810c18ac8726492154cde9399e7f0b6aebe28508ffa3a735c6a2c458fa02b33414c98b8eed678c29476d3dd2d7df130d0e25f7c785662771666b6f07934019978d6ef393c9db1d67fb198e07a307a28082c221f7e2505e970c7738fc326a01f7a1d322bf00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e22bca216c066d0be41df719be5ce733e72c3b9a123fe92f860935f93cbd56fcd3300c4d3a07d2d38f7bc5a8611baca3e2414a2e85cea401808f8242feaa2dc3ced7e98fe6934e79514a61f036de28387eec52cba11559c798509ff7264bcfc59e87998b55bd27d14a5ac49e1fa79d05eef751612c861fa5bec7253bb66593f69aeb246ca2702840a10211439ec76fbcb3ee451f2963c640930d00e93447206894a715b64259b45ee1064e9cd93e7ab273bfc01888279a6c76822fa5194e94e32ef09517f2b997daddd85fe01eec6461a3b36273a4de32cc983a2d9ddfa5ff67d0589ef0604e2d250b48f7cd55d7e3bdcb3c2361b20e0ae2449fb05bfbbd1cc64822d56e087054413fe0eb6424edda3035a7a91f2bd892665f81480013dc061be24cee780d927819f7e342f39201b7da5963d447d3037f9a8fb9e91466f0600e347444e7e518368e20aca1b9b476aabf7f7a40cf23bf6f8ef662762afc0958864ebe1a9dda4e5623581fbd87b6dd359238b8b0d4800dcdca8071b23a7e0d11bf86550ec23e02b5846edf01f4ef97ba3444425cd9b77efe0d383af5d783b7537a30ecfa8525117159c86db56363fd16d323d84aadb631fab7f2cd7a3bbdf2bb5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082d7557e54e1b592593fbc26f9f28333ab19c116716cce5e9b42ea33c26cbba791acfeaed943453c2c1ccf7fc742cc81b001405d1d98e49ed41030e11881868fe4aaeabfa62f3fb8202082e28b5f4c7cce0d73844b9bd32e22ed9b18656ee11692d9fbeb9cc32f1410419441955e61c950026914df7afd57c593d39f8ac3552b0291a909fcd3fff603640224ff624cc01d598a8e55f35db87539e64c460c6f326fd4decb1327c9edef8db00d55a5e7a07b64085eed115da7c4913e26458f7e552fb81e0cbb0dfc85e203b37a4d9d138fe3eeef3432845808beda88b8bfd5d7a520df7e5d634e159fbfd8092814e9c3167044972aad2a884f3c1e89499db982dadd962f45d2a48ca01ab66456990362cc5455458524f1049979d93320a892e520f4c0f62efe05b32beef6b30a9efa80df42008dfad436fe3bdb1d81657facb28c1571da75211c03a192a6a6720c02767fdf82526b526559c27cbbb050384785757aad448d5f0ae8de94d12d04eb7919f975acb9b0378a12f1e7993df4fdaa5011f083d7fcfe0d2599bb7914c6a177a8f53aff007303909142ef841dc7d5059b1e51e470c8ca8bae2810cd49e884eebcac4c0fe3e31423a3fc8c7a0f370080080800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a6639defde349f027729aa63d2c2436fd49f18b45b0513787f52af51e805ddf3957a4b8e0e545b35be1cc315be0f72b7ff33bf6f8c877c60278ff50c238be0da62f495393d2fba93e3418a2bf7b09106ce13dd41484b049004673b0aa5d2c20911a84679d678957ec13850a7ca34d0a87a2581514640ccd17396d4a84e273586fefa0d6aaf4dc4c122b2a53000a5707ce9c1c9b9e9381b760faf694878dad1d3fbc6f8678b75ac04747a2594036dd80413213ab219a0eb0f9e6d9c611a99abb03b18c0c35e824c9a87e841f3b611875fb78b449da9950a8deee8251287732438555cb139d3f08a3f39e82d0acc8c48330a39bb69333a27dbb4fd578a7c1c4dfa738a17dec7ef4eccd0c6f9dc5f445b0d200e976fc045f6f6b271f1b17aa33537cd42b92ce9eb4a71b80157ae8f30617b97d9036647e02e3a13c6a6c8ef4d0cec4331bb75ec84139013a75f1f7406b56f4d22d4ba29dd41d96f79962e4dd3906c39d71c4b4afac83d145ffaa23d99ee61e4c29df501f623ea1ab9f9cf98f567d75fce7dd5ae0c2713b7e548ba85a3afb56a5977e28906ae258b727da57c7ec7c61e4db3f4bbfb999102293e962e6d11096095c2248c2274ca7f81529f619375600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ef8dfc7ee372984da9f631a695f53cacf8b84269c8ac30825ab52aea376f5298729457399e4136b61bd0818879c379f3c7c94a217b8db290541812f5917dde4a59d369287a0e1ec2768062a4337c5430afe6796a2f797610361052ab5f7de6eea2d0f29958315879701e150fe58261c622ff180166b7fb7ba82ab372edd0330bdbfce88f4f0f3af125ed6feef951395c4b36940f64be52be3c6d31cb92b9dd27dfebd712172571d176da69575207fc602452f4eb25b3b86d1000679866e2e6934a23f429ccea46314796f944566b973db8a73d3c37937195a20f0c39f64679b7a4bc6fc8112bb16a5f79877c6a84a45a7c6bad37357e545000bb3ec4b41c9db4f637fab3d68c1e3b33c0d0f468ed12f3257c69e621ee5dd134960ec9de2ff5bc3b34257331647ee9822fe5e5f06ad0ca2bbb06ec361ba10c84ad5c9b0fa2a7613c186d852fe2c181156860df0f708f6820ca60a28acf2c4549acfbe78fb9b4f1eb56f8a4be3efe0344fe4898874baa63855b0fe14c4155275976884ec48012d3031e8c8cbcc479bd378c2884d2eb4f29378ea434922bbd0a129595b286f97786574960a895690150536b542bc9b0a6646b49e0b7494bcef9d5d116c1b4fdf9600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b6bea4d058257acf18b637df5f2543762886e790eb8fe459e87413541ae8b97f7229eec735e703c5f7881db480f29a8750c0fe8b6438a78da60bfa22e5b754849af5dea2c11a1dedb3e313c6674d754a8cfe1f828b55ad19011f03a8a175011382775e8634d4183337a0f20a88b5afbdda1e24bffe29f6123570314f266b2df03a0b1b5cb47090b0b4e95d11ad6ab520996f6842db913e1094e36d4e1f25b24e9303162f3123d02ca484d27718a6364b7706e6c58b41a909534d5c5a9d957374fc2333fccb2e7b4968d7b2ace0c47b729c494349b0e68f2f0eff82055650f9199571a916369cb5e32afd6ff60ac3303d677107f512dea2fb556f7f09e9e5c427fb8aeb32df2e74ce609acacfdc5ef86aac67f6e07930c811ea27492bd48bc18095b3910b852d37205bead8ec004b18f2a3ebd8fe90791e2fc3a4119f29182eb4a5347ea9fbaa95dffd1f8e451a14930528e4ba923ace7e0fac21b0898e0f2432c944abbd086b28e7298df33fa5d5db2b2b560c2eaa4bf355b06754b1b6c8feb5a0e70b1e9848ad057788c34e6f1ce183291c5642c182b0a1c3ef6674cdb2926092e5a281ee551cfe230949a1b2fb04f47afb7c9e0541aaa99492da066a9567e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b22cfd3c71361be4561f8ac2aec73c6b2e627c7d3ecbc07b6aa519633a52412b6e1ff14bed4a12b4511d1a9626b313f08090538ef730173ad912817769288c116e35cd9cf1bf604cc301bcaa5331d3ec10d6613a67b1603d7825a9db3a59260107116e63dba80b8db24ee7ce96213529ad55671fbfb2b86e226b48fdb452a255686c6b8a0978e5f0eb50e4ccce1956812cce232cafbfd8023a3503d44c4ea0983f16308d59a2f12a6a2ded7d95c28ccc96a21dd09366d831f02c57639d6f2e916d31c25199af98dbea614fa2fece66856fb59820835c362ce9e0fde24836520ff01bedc8ec2f8f6cecab2d9ed1c27f48f80fe3b85b104d0405cf3befca10d275a3c4e9007f81f665a7972ed47343a54b34d3160b14e97b5846e47343927ddb84d4658e5f1ad051d8dc6275caa95e4b47230f3b33869e72579de35ee5b567e390572b266fab4fda013ec63ab9e412bd18ada3147315f372678bf446fb8ccd8326e639f76e34c7905c1a038eaf7c48549f046af7c0218e21106b47ddd124bc232a34361d61174cf32a9beaad825395376f637db68db2fc4dbd08b5b5f596339b1a212923e2091d936fbb7319a50c452b86b9acca69410444dce02d3763bdbd41a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000942abed5a9fee95ab0c5df7b8860af1e1e96949e9711cdd3250707c3c68a81122aa42db7348cb0c9c2c44275bf500edeae3873c4567823b2fdad9c85fde5c63228f579d8b18b07aa86d4c023172a62af8b4dac9cbef510c958937ffd20e858c14a5eed3d2797f257697df4a83647c1f9bc46581e94c558f1703e9cc45ed04c3f147edaad0bb843c60dfdf20ef425a3d7bd58a17e4b91dcc41199af94894c91c258b916830da193530ae39ed0ee6816b904679341681574d9396f44eaa432a29318ed4369e6d72f35e474ef3465b6f30fc3294edfaaee3e07d4090697602f6515c1b043ec1f56e104e481a7f668a2e8e540c395df03f5c2394370945bff3229c5ece24802897f4bc86db005ad6cc25c8d4a681adc42e3e596ed9fcc1ce205e29c7e277d180a84181d4e12f044e3f2226d739feae0b38bd049470c72e883ae04ec55a43c3245afab7006b435a649079bb6c91c153907e6fb02befc75d018555ee2b03aefb1e794a28dd5712cde88ce4dfa966e9625e026e0ea03581ad9b5cde37a79e614af125c3069a62dd9cb8d626dd804db50cf54ab1cefcbd62a88e131a5804f80963ba58094e18a222ba07e626098704137ae1edec62189ec5f10252ed25900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a50f8ecc329c14a19504598e7a0f93fdeb3e602f2ecb1ee7ab8f6ccb7ad53c4e0bda1acb9d5e44b1cdc27c8f76ac4de99ac17aa91fd9c96caa500496d7f813709d67274e0d1260255c050b672a00a6af03920be1954bd2c10387eda1da63e97d49b487742028d81e5c6b6976f85a98e75175ef12320018cb6e68b1e76a4f3e53576d9a7888a3a4df663ee1e8af89ec6970411eb547850cfe5f33b4f1827c75ecb7e2b01f0d273d32d13fdc40dd4696c65b85a0b23d5646df50a5396186791c3190d3f1b789c044b729de29f7f2e2f5182e756e454b501ff73ed315c70e05e244eed6ce39b76f862232ff8690e457c14be7593d8310c5af56bddcfe5d4d8555301c9f2068c024a01ead6832f0eaccd495d01e47d27e93a503ff32a33ccab69a9de65ae509d6eea4a3a3b0cf26cdfa196d3704673a9fecafd9ae869ec22537800229a0b6483fe91dd1c27041075a1e7048a5d31c9a9b9c59068dba996fbc7d6271921268403ecafd6eacb483ce1834eefbb5f1302b170099d5d7ab27e46659a27ae64399c411c2b5daf3c5708458558b9de8a8db318cf7fe36de1cf7d2063a9c57e2601b8b0a0937f8fb7fd7f7471d91c69c452f63bd0f8e4556c74ad93df0f4d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf7425b3ec8d26ed408a429c1d781326efe26e84f780ce5cf0365483469ca8a3711cc6b188dff51a86f671b5bad9c55f133c48e10125a82d94287d6de36d2005e153c7ab1cb87c02c08a386027d7d79673f59f56ac0701f2a95a3e11023a4e33a8a1b66ce6f5d3dddaa25080a79911956887d6f12b87b7736780d00e910f6ca6f030d858e1f12faccaf82465123612efc5bea7cab8fe1b301b1f8f95c588b29baf025ad3ce7c37c06f8ec81e8a0764846e953e533da1bbece70379c0de7a3e4ae427ed11b34b3724bc40853eac6e7a330f02861734f3b1997c1887257f1b4860d9d4b41f556952299da0a5b3d817f11b1246ade4e688e0491403ea2b13cf87aaadede078595ae4a79a7c2a4c1f1919f458efc250b740bcd7430730023d81440b38614e8ae64c7249234c60c18986a316b3e7bc3a88ec610832d2b4cb018b59ae96f9f3cd90f3693f71d39a46d8c99d3aec2c27a78d6c6bf6f331867afdf354ae7d1de824b4691663f0cede111e552b0045d80929f19b95761d237dcc7180485ea32e77b74ac3e5542a2f5efe847f80467f3b1eb9af8dec241ead6d69eb24303a47eb2ad8d0285b4e34b98aac753a0e9c09939db99ffdb6ad7b289d14573528a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002aa2c5d4de80bdf4da594bcad5ffe42a2a6ad0323bdf19a750b9eead4b12bae87429bf6f639638cf15b2820ce65c8d3b0f76e4cd8f783ae1df6bf5bbab82f7a97401e86792a773a0f6267776aa90a456d0d3607e2a0d7d60d56229da73f348887132e94255f8273f1e717feec74ca59d9932b0d1d5b6a5a10ea5e14e13436873a39f5b0f778c97ad8df4ad8a2c11cf6b16517e5f38eb44af683fabdbd7bafb61efa7ef43dba59c9dc157f919d000f07a379340f1beb765e250a4833d8f239e672afb74c4494b5c69ee0b3a8ff57f42c0657d5e29177fe3a2af7ede35e284d77944694c857fe573243b04eb1ceeeaa1b6e9203ab4ff167eacda4a0d2523e5b4a3f1ad9d51b5d0f655d0c3f3258362c7fe789f1fcf256d72074f0e17390ff29e4782fa5c374a694828dba26ffd4ebe0cd1eecb2b227d42eb4c46b46ecd90458ccc7a580b4801518be06dd3398bc08429936066df096c364bc495a920cb3ed5a773c8c42a8ac4b45c7b7c1b37ddd2d479dc1234bd42948eaf4b38475240188a923ee5a11d19463d1cef78a3b176339755f2ef1396150c5c73679ca7ceeac90d892b4a84a9da6b510ac0c8987c2546f2d96d80cec1d4575431e81047196de740da50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000898f4ee313a65e66be7a88c8ace2de2c856dead46df833a37145f389773801e5bc068c7ec78d2205d9f336f990140719c2f322aa1870f12fe676247ac82d0c61a1ac8513ef65e6a645814956efbaf2f41bf3d9383cc815afa17aa89d0288ba40181826b5e1046e575fdcf5e7692807039e12022c51ce42881772248df2a2327110f8210f157387956ddf86344c39fb7e372187aa54e075e70022ce41b7703045f008a3e96d0f82eafd25a54e4157e91a1c03a8492f92b7b744e1c1aceba74f1d38d31a84b2122a6ee4c870f6dc5ebe467066bfcc9f6fd40814ae7036840029e6fa2a52984126847191c7225e3ef482dd6a695cfdc6592d46ed1f83cf683a70434734b5ea9000644fe1162fd67f3fd11c9261886bc3517052092393e36cd72a7be6a344100cc8210cf34f2fd719e645c6bb87677b1bb4d4718b5608f708d059fcd8ca25171c1c645dbb557201f9cde8d0b4c3bf06f76fc29ec7d33be0c6a38c4c8c07d19f5026276f2b4f3689a0b2bcdaec93b493543c531901acd4e1ead04a959a5b1a0c5d136973f87cc4a2aeb75aabb007feb397b08b0d8ad0cc4b08fc8859ebe999c7bd0079695d39d25c74c71a1d34b034c159de697429789affc899034b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009462cf5022c57142b967723d654cfecebaeb07f779234332f5e22792a782d9b9b30af712f3b846306ccec62ca71d038fd77ea1544f7041025024846489c6936f7e45dd35565f723637f2cb1157fe07335ed431044d281d0d78aa9aef7b14cc0de9062f74034ab32d058754acb772840e906456d5a24aec11a9c255ca466908a0ca4111c2cce7c3338f26ee73c9bc8fdca1c6b69ecd18990b715b7ffce3399fc45e2c51c5667261df88698675c497617516c17b455c5b807b37d9ba1bb4afd1abd3fecc7c2743a6109baac8c61710001b269bc0eb48be03ecce78d263f9e1769d8ecca2f55963f5cb83f5908bfaacde12b17e72b1a4ccf1c1a969b6f48c1d80e009f441bad0f97400d654906351bf5400a31c3373049b2d8303aff84e6a538a0b94a5bee386904614d532a96f5ad53e731a7c9c7d39803c1e188f5474f9f049983d7daaf1eeb45937fabca13e3c50ab19b551fc2f49ec737ebef15c5a3f127bee966ed92186d4b0b56210f23c27ad829d2181045a0b5fb7f8b9dc846e654377be193528dd93ced7057284f9d1e3b299a2f0899912e0021b47c514a759aff60c4a4c2933cc83189604d882c61f2fd9bd50e11be41f6c534f7fe8488f2da17e202200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ff6bd7aa4d013b51d7df8edc1bd06d815063c86744ef0d770967d8ed54cf2f91711bc05d91d193ac704d25faa70a5797d35f10389ffc0dc01426ebb030afde3ee26cf31c1a1b9c2006696291f8e8ee115d4b0f473d194d3ec6400b0f3c7e1b78cede1b54cbed700c272c295ecbc78f6ed422702abbbb6e70fda88430664708699edf9be8ab8132547b81002f42e4685c521899b4a837ba46c57a66b0dad19c293be5e9715fdbfd9197bb28ad6862cf7909bb19cfaa8e2e1412bf7cd3b05b8627be8bbd60953554180b96a9dcbd7d9331703c1a41d17d09506fa6574568b40466e0ee0672a9ae6566340bbebcc558f1e8081569025a2cec7fe192ea7ee68a43fb382ae82db291673dd01c4de33c73dcd265e37e168b7165dffb85e973dc0067bda85e915365e6d09a5d48ee74653885a7a1b764c7d5594fae988a57cef79562f7dcf969afb698c53e458af7f25741d00266a5d493e1ca21ec7c4f2fc85dbc71563427f4d07f3526d9f153ab16ba8b803459a16e67df9d5bb0e9b7204c9744547e8527c41697f808f4ea413aa9c2027fbc26d32001461e16ad9143ebacc657006808c5605107d403e1862cf7c3c832d70f1f3d20453113ec9f48acbdc20ec0a4200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009106fb7ded81bc34c4b2a3752ba26bd085c8d1ccafea39d41dc8a4ac96a3fe21d7453d6c71e4ac7feab62fc3ca0bc16eee51eb1806a252217f894e36a086e6f3b461afd41817c2896007c8e5fb45b707ba4a8df702c50b26cfba9c9b4e715d64f6d2163f636cf781111e89ea1cdcfb0b1bca098dce8851e5f46f1f0da3e2b2f7f7ac53a604cc528525adcd3335a6360f745fbc76e3e6dbbe5134a7c761861500e238e5e6131caae5cce6c91f537fded7e409f870a330b40117deb8aa8bc5c17759eb6256383db816a052f180e86bc7fe20cbc24dadecc3c03b8b9c70ab2faf11905d0c0feff63a37d937761e1cbeef41de1afc059d800032162dcca7c2489470cba3f47e4ca09292ebd34e33a006757ea648706df170a614e910999b7800a1b9e4ce6d19346827937f0e52118b885c015c4c2304364371be6d5f39fa6598c5578cf3999d1bf0ab945aba813cce3690b94db473b4e9cc52e9331add7f4f428fce05355ecbdf4429c4fbf9048f429f9df292cc803c237dd3663879eadb75462ef30dca2fcfccb9d58f4fd2d2fdabddcb74a6115ec1c04d13bc3d0f4f56a0b2c33c371fd201bc51d65bc2d05f247f271d3f7cdc29dd80cd95e03a0c619d9e81b6e3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a9a1678509cf0f6afba34be05266347db72c476372ca011dea040dee5a988499c1e07e7dbdc176a717f24eb6061a87b0f7e4ec3c79480c24987219889658de6718165194fb86dc7ed8bb2b50f827b4a14984920da702701f64b5e16fae7eb45e2e30428779ac179165f141da04c6c13b88a05c2d4d7f5035e2497b4d4d739b12d0498bca4b00b5c603b062adf4c4fc99634645661903b6d9a236cac31cdde15c59a33346f5dc2479bf40da2d8e9320352d6ca0a9bcf9d6465eb114d3aaed7d6b21ed25a8a5aa3f5c29bc83d84feb420fa0c33936370001777aab5fa98c4a53227b01086ab53ec680cd1602308a979c8d0a59aacf38e8ff2344aa5f7b0ffec1d20a9e06bba9247146bc37bedef7d1cd5d6baff83ef49fa9ec6f93f696aa8363068d4190791cf2661e51b4b129af04a832d7b248eb7ff8d726f7edb0be3e406ab42fceb929456c9be679c439a667958403fc9705f95fdd27933e13a82ba5b52573852c6ede1aac8e8f9be4d29483abe327de62cd34d13c4bcd3c84151d4d38f84f37aae59ff62b8453268c250273449d5403cdcb143d0cf6f57c8f92a758b1a8940ef49d4c8134c6049955f659efa5d634a3bea384d377fd43e9ac4a7bb682ed00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c39fd9bfb828f2932b0892be2e481b5e4f27f959e4fbc2a5635ede7fb128c9e1d6112fa9b6d3f9aabf677daf4bcf76562d00b24d41c4fd4e9ee4d394d3dda730a8f7efb7b3c54e65068ca0bd47bd629dbd37a81c47ec714026259e2a68bd9d392c638a432970b1fca6959213c4ca9faac8d98b2f049539b948593f5e3ab41de309b34e12844fd3a42a6596a4e8cb8f94c2c1189de142d67bd3b16839a49fb3a7fc0749fee2ab324439acc104f92229ad2614ffcd74c4834c07f14113e06dc03e475b5067d9d8bc335dd16ba4009abe11cc387e580445670f9adb092a82d7cc99ef077844493988835547b50faa64fd6ef24d6aacf32cce57ff588de14d43378a44e3ab0e321dc0767634020281a330c3009b644aa7bbad9ab2feea0dfeaa70cb2a28f619db72fc6d8e5a0de1d0f2fe32bfa85e776b6ba37520146b8aa0c7bebcdfb100fe973cb74d0245eba938dc5993488d3d91cce3b66ce9a9ac0d92e9b67aacbd7a4c6fec29778e0afd421ab75a21535932d9e200932544d391dcc42372c7facb44ec4aa25df544cbf949bb9271439374aa27f24db7446178e87754306590fa348098b90e27327e1c352c45cedb13fac28568c07597fac43bd56636335c30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132ac6820891ac93b0235e3f95f6e85a2fb187679b8bb8fc357f94db80c007cc1ad3aeddfcdcc9186d19988472e12ed1fdb3681ebca6ecd0457cfb1941e10a7da61672cf7eda00a66be962e0ab1fcc3a61c96c2040d3327b803316359ac8cf6e9421af40cbb7adb5cbcd51a4ba1eaa600a2f2b43d030be0950f354d173b3b92b0ed87d5a78d10aeec65829810dca02147961793d12e39db7c65f272767a792642f68cfa11277d33a757d36a0781fa208dfb38fd55c8cf1b5f696c57b110ad555f4fa634b1628ae1d137396003cf2f8610c479ec89c74d57eb503d59ae846a7bed83c6c1f4f4df6fd87c83cfd97adc5b2a3a78f9e190853b8f457fb8da1f39ea9ed20674215d0b1f154f5a9213751a495e00321c2a42858b482dffda991348491b07fd681e0e0583d774f5ce64d92e0099f7debca8437c43a9b2641e10727a482141352b71c8f56904b18572ac53c26ae32706506fac5330e823b351300ab7f482c4a0f86cc7f7545600a8844f205b9a433d16daa0cf9b1593496c8b279eb812a92b4cf53065294b19681c4d52d1b27800fa860ca5b934b2e07e8f1ecc6eaed9bc8b5a01f5eb76a8e3f280ee016a72876da9df6e9c6684d3c8d4b9dc61087b4180000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ce4e2b98982c8e971d4a1eaa77737cefd410eee2b4ac63b2e3ed772532e8d64c306d127dd4c6155003d3c3437a75bddfc24b49981b388bce4c8a9f15dc4a4b9c434a9c01ba06d1c50b27436c6afe60665d4de4a4b02e148e7a1367b48ad11d923904404c9b1af950a992a8d277a36bc7e909d2b6a4ddbf344f26f7264dff37f2273ad3bee33e73e7013726309ac13ba68e2d7abbdd47b67af347d9fc2a6aafb17e7910abc677d3c37e0dcdff59ba08590b0006786877dc6ca71d669e9c90a433be6a74c907879c73555640c018022bab23c99f4173dade8b8563d922ccb6cf824a17c7c56150e152c4c4ef7d33de8a31fe9cbc736010d20f4c3ebf101b10b80df121674c16d4e993470b38f4def19e001c897ad865d7df457a4c3cd6da192fb16af9a1f8d29a9aa5e43f1593b51876fa1fd0d7092ed23a794fbf20de4353d4e36817882146b95fa7a2f86a952ea97a001104ce8ba8b44c4db1fc00c3ee2abd3d381d41c8a178d56d39a07260fe35ebe5fb8ca3cf865d1c7706a689e06cbfff600ced485c9e701b97acbadcbfb9f47dfdb5a1281130aafa26c456090a631b497dcf872ed067f555b3451ba77648b26aed6c00d937076e7768a6edf46c3217900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bc023d626d00324cfdd153bcfaa846a68d739165793b15e661b45bc1db8741a88f7c80d4cf0080c81e0405a79421bae0a386f1324479b59e56092c5219f74e10cd03654df262bd481347f54a577adcf9ef233d974247953602e49233d25cfa94652b723449c9bc4ecaee88061c650f7a414f6112b02d35084f55af4656c09da1af569eda27207a39a2f84671c8210e021194ca85e5247b66b18ebc39e1a2dedcc466a53bdbdad7b8373f30c223bf0ef3db8fb28d185d7cb97caee9cafb04312a166a5a8168fa9ff396a135923cc880cb51484f2cdfcd80b94351e57a46feee2d3ce415bd7e9d351ba78b0c6043c076860cffde50258242b75432aba935e8f91ad02dce79783ec2f9b5121ccaafc842e8531e729589495889fc0003a77d02998207b814cd627e42328139db05697a02a26580aa223bf5ef611b851fbaa79696209cc17415ba89f1706647af1706ea7e7706f589a7fb49a7363aa4846456d2195ea1a40648435c347cd482a97a61e95ac2274be19b90586f5b8eaed67eab5b28dad41adedb51d5cc117c71a40b59259d52708994df93a03c29c31e9c6669840f0e89afed078047a65a96ed00da762298ba569ddd6e6967a0da3b7104ba2f335c4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098d18719d5707c1270cb345358ed5b9436acf1336fd9a670c0a51f636b6a314af48f0749480ee469b9af656ce28daa6f8e4d284a2d84a682d20231df29981a93d5fe59591fce30a2799a7b2486e7b3fe2d952c422872c0f50f4ff6699b940bfc96216e1007860faeaa9786c623e8f1271cf4ca8492551c8557031f76cf0b71099631d87f680784656fd4988da61d98105f54255ca527f73705e98dfc477d54bd09d7c9d862bf1822fc63aa6eb4f6ed75fd6d5e1183f0ef7f67646b61de49bcc358b3fdcffd80303aba44ea176d3e9fa8c2f598b7ade870f4abe79965ed8c292080e25a0e4b7d0303190b2e845bf6527eda1f6d4dc9b95c732211d4dd7e379d621f3c09211f422209d6341851e286450f1168ae02f91a4318df797702a8d73d7f78c8ad17046759be256180a8d3392eb0738c008a10d0de5565ab0161fdc1351371e45770cb59643e8c2983c9dec245a7a18b0a961f681a85a048d870988eac1b2978a4aaf9e9aa4340791d5a3b2f151b43693bbc558d8c4f59c929e4262c5c31938e3aaaae7f1970f13b4e133e523c72b415de8ed9a9ded65f113608c8401921d39be911691c1635a32669bf7f7538dd7ae7d09e77700525c17a341ce3f07f0e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000153c357d0b073bfd034f06540463264f48871a8fa6158ede5a8d10a58536f2b64ff68519cf9048c2dd36d5db75fc5a879b2d664cd36e80c66421dde566035a04ae29cb908a5ae00ce1e6de81ed9635ed3441b002ade9879dca69b4bc60342b3710a8a3f597f2984a481eb1c1673b9b390af02b458ed6599f13b53245f80c72c56ffe61d8ee3c5f5b233b3404394b68e6753c6b921b38341fb903d246fdcb596d64748c7442c7ca7d44dc4fb2a094a54f812fa70d5673a1dae5e1b22deab2cd27b3714a234c41b782d32c6bd08bdc1f024aebe38b166acae132783d6d8a3046a9c36612f2ecda97cb0ada2f4fe8c984b25f0eb3ec9ac8e57cfe3169cbcbaa98f36409d20345a72a2b696922997bc50734c242e6d82835d6a63d10329c78a35250f5e71923c38ef1a53f2a1d3d8f9b2a338c00fca9e484764e1c27475567d33c1c2f284f4f19dc8da6413737852562e2207368580f6a85c8055947470c4d56b7a9e32f68acedc3650233e3167dcc4d997b7846650b0233e2aef0c9447ee564b9e4f41d9558f674e51dc1edab80748ad5ccb50d2754efa24a82df5f11b8a081de4a3fcc5cdc8c2ee904f15c2899c90fb6309bdf898681769898661fc6ba5b1d27990000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000177faf719829a81a5ecb22b7eae16c5fe20cb2d593db600c7a299b0d253ff88ee8cdb6e0e1d377a788d02762ec1e7c475ae9ab0f80bb570344a2a6ae55fb31ed0e9fea2820a97263f3209e5b30f5ee2dcbb99f37b62290d254e67943f42b0eb63a3f9ced74742430b554ff5067f99433c3637c56602f1390cc3fe02b9eb01689bbbad70c8dbad8272e73fcedaf825924bc28ed1fe0fffeb3545533f9a3057f33a55e4b4f989aa69a095e5bd366da50674bfb3844c001a667bd1c9082b74d95944d23fac7d4c92ebff41c02f25b1fdcaae7601a120cf6f70a68d0fd0af76d593ad616938538677c2be2b0cf8e26c24526e07120220bbb1422b87c75af636b44245631159e2b16c6e22bd6773751d05717fa939a07429abc2384eb5606a69d3dc4aeb5b4f4eeeabc3cb1e06dcbb15988a5a762c9d696318f4787c7278322dc28e7cdcd6ae1487b4df566d6d1c2d1c32d648e7f0c4702f337cb7a99ff9f9cd73cadd03a6c6d355c7c7df64f3efed69df1cba159c2df067d07a0a4f368f19bfa1948d0e8bd9e3abaf7111eb90f1e1fecdbab78a2136f1eb97ac564fe26dc47eebb46ac3ce689dcd2017aa8df2c13dba8ec0858f43009f1b735f40b014268e42a306100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ece4090ed59a7d0ba569aadc2533e6a6d461d0686a35fd99e05af9597d57154fbaf8632e6666b16289d17e7238318db239a9190bd9cf3731b281ef61cd9b167bb404b414fc33dcf3226b6a4ee8a517c72eb61eb8832e86ed8945cad0f56d4b3af07940fe7982c91ffbe7f3b36337a493281edae9b046fd3e4a9edfde27d73ee98116d8f57a04e491ddce63867688ce41fe395143e2adf949cab26625dde99e0a916ba1595ee909b7f887c92bdac0b2e2b1dffc76188fe9f24aebe05fc56797dac09930643ebee213e027d22a01e31afbc96699a85af9b9eee8f25af74b795242d8d9a1d31901ee424257f604f56dbc11c591c5495346528ce31e7b40d0cdc4aed8e1429c5af5fdcad6ec024cf92c4f82c5588cda40e2b23537a018928dd341b7f855db22bcc53f31e3c6935cec83afaf110762a4ca46482c1542f407bb307306d94f90aa7624a927894700bb43c5d2f2777cfd3dda751af18f086a479bc033a62add5f92fb4ac43ec155bc845304cc4f73d3ab4c306f98c66d978aef67495882a35f2d7556bef962448f5549460679296ad0091d3232d2a9f1934d2bad167ba66dea55b4bc64085b7c18c9f5e4eea6c4fd21f6530a962c6c63165404b2311c4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088f6ace459acf3bcf46f16ac738ff47cdb31719b04a4e459131af6773ee23504c5bf04c6b53d41085764d58df16767cbe028433ab824c67e4044deea9ad8b7e0c8824a976de3e16590a09d8a420bd37404dbcc9baf7a3c0a3e66d73cde4ffc29af72a0b72cf9caf818b84eceecc1ad48002fd60d84f40402db6a500a174b102f310e20097786d9ce1c2133d33f8e599156774574724a1177dad590e1bcca70b9c16c7a9adc88ffc146de96416e55bb0c19a12f455c9c2d04d67efafcdeb571b82c2e6d33d6c09dbb93ceacc4f6e30ddc7971906051fc96309a79fa0a7862a6c12875ee5a8a3db20b7ff6a2dd2fa49cfdaa29f0731b4639478a390b0b3f907704d40cee65da2497ea63f10c70fb26635b0922b7ac1a3db1cac8fa896f4d50912838250d7caaaf858e6c184b602e4bf51cc868b51054a86baa0e3d29f474642231766638cff8e030cfe13c6041e0f9b17583f59cc67048684addd1a1086ffaee9b838f7c66450f988572e39feb0db9cf52194654e2817b74886adbb1e462b70444bfa0603d45f91a952f04a8bf2d80fca7df8656ca354a9cc092de1439a251aabc102e81171dfd8afbd828cc75c381459f4c4714e37d22e45c5ee8029be265dc5800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bb63de56675d40ddc8eb979d6c87b5b3ee7ec5160b036881665cdaa4e1c3be69107a21847fbcd3b64e08c107c4625e9ad15709e4eda85e17f6b3c2c13e67fcbe6d21c681a2c0083c5968740688993c54f825b8043a1c73e0f0ed5e03b13156734ff5e16a95541b06ba2d2e256541eb58d7ab139e8b7a513e63214afa4a404ff10ed47947b05ef09d6b2bd4f42fb0c3e7aba47d07daa46b0323c7fb27e411ec34615306a38cdc510a81ff783b3cdbb84efbdf91c6bbf4bf52ba98e5e3f740b6e0e011acdabb16fd5b0b7195d70fe7b409e0f86ad4a71d15704fff1ff518b88fb62d84b6bafebb3b2494a3a7017b77d4ed93f78ea4c68ebb6d5b54da9a7af7da94dc33033a53f8a24079b7960feb8fa4e8924b8d5421745a834dc0879cfe81bf8443504bdf6c5a31918c342012516832e98a45af3896be3ca6a750ffb0a6a8242b8e1a524b8e93125692c638bbec6f868ec5d7bbd8fac07f1b17e254dfc443cca101622b426d5217aa8564f202dcd1ae90522e2a56b0b4105178e76a503eb1a149b5ed5c8b525635c58a5435b38be090bae3502bda2a5be8ebfb07181a0620a035391378afac63d421da2e094d5310ca602dd538e5a639572f3f07ca0421592280000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a03901854004e9a9588056afc558357b2dd8b77f2d19b9db3cf046c2b1535da1ae0ace1a9108a8276be31e990ecb892c887d8cf6e5b2e8e90175712032b077ed6c96a3aff15ee8bb50c1d3d57bcb29cb565c7448a9c84020d7a0841f1b8589b4bcfd917842f25dbfd890007e0860e6e4e8e51ce56ea47c5bf509b5a34babd38e7a6068e2100950cdf24bb372557d233faf8ed6964490de5603fd573c19a95e673153d4caaf26588a2d912b23b61146ce4d76c71a6cfb102b75ca6803801ffbd36741141a9df8da22814a5fbccb016b278e185a29fa9908f31a7985500d08d8fcfd2fcb057a11c2dda0821c8b045846d18405966c5b1342b4b7fc0a7907ad41423bd618764d78f5c0a8e4549c783f8106fe9a66f20c04b173570c09d8a8bc42ff4d87952fae4ea206a6a08aa5408962117a3544f2061776fc98c912f69650ef68f9cab962a9286a8443589ddf925828f748424493d3eaad2890d896a73266d14a844427e00743f09b3e85917adf55fb42e3edeb668d098da98a7677598349721ca98801118a586cc9b0ed487cd1bb3a4090621d2f5216d9f9371eaf3ead256bba3a94fdfe10157fba4f858b60e3ae9353015e66e0d02a72a856810cf593866eb3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087afcd4c5778a460170162427b9482e13bd1a25517e4fe96f5189414b26763d3005782e2a4aedd5067e6532f46a458712828d2412e497c896aabf52133346d3afea3aed0df2a03743cb45692f28c1c1501809a5636f4d90c7be60bb0c5447a090ac6317a955e77a0770b5178c4062733cf2cbd0386a6dd477f0536eebf9e5bd7047f3937d2c3abb88ded62ae19f10f2e286e32fdd5a6b0a3ea0638d00a9ab5c581b3fd0d4f4bcd962ff2018d521419ae6c8bb6614224342717e79c00b188cc9cc92d822c9ddd8f7a571654ccc9d081ac03084a056ebac44884138a2a4b43d9f5bee97972ecc06537bb88d4a88095294cc7e9ec9833d66fe2299a59e826eb28b644f9dbc6c02a9cb7df38326065b9d09fe1440471a1e34a9f05391ee730ae617e5272c578429e7729be4f281ae54f88be18478f38db6ef60a4b34e0f345427dae6d8ed09ef6cdb90a21b8117dcdcfd198cc1dd4e83da96ca1cc28a935fae2431f0c6c7444e9398aed59f142f09b5a57d35b927e15205bcfe78def9d671b8d01c9dfef9b6e38882d1ea194866f204aea91be93e3c98d7bd9b0a012e723e8acac7f5912f2b98a836f17a2ab00b7ad941595b6c09d7456acbe02999ae56c3e1ba7be000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081cd91340c5d6cc56ab4849330fa2108ec55eff5861e207e04c10ea9fcea78ca8824e114872ab5adb376e9ce61530d09fa6a2197dc0c69cdb4b9ce6b524928fd2f03bde7588fb792217bbbe002c05ba615ef70c02dd5bdd50bf4abbb169a406fe68a5bf15eaf71b1da95365955bf573311d218242624df7e7caba855c255d892c6abac9d7903f36eff906ef22acb5aea1199d67dc6693d14ef31dc252115b3528bbcf385c192eb91d6030d59089ae7cfd0a058b311687b950ec5a925da87ca5c0a0cd4e786713c82743af484801e45972827d8e2ddd2e71631c8474b790c143c9edc2f0979712564fd100facc126080e2d176ba4649fa832d6f20a1fe89f31cc6045f703e55b33b73e718efa45c3b0e7fa01d1211cbfc94288eceb3b68b03521f8f5e3254b64f19ebfe1de27ae722ddb14ba2555418339b82aa2befc40d7a0c1aaa2a7a38ca5ca501ff0364e66ae7baa87aa9ff32d1ab313e1c0ef290188f266df63f49273db76d7cf634d4031f2ba5641e1c7b5e8dde942ae73d57747ebd70a62f4eef5d6984cd373164b81cb0ad592c4ac5879e33b6fabef5fda645c2055ad462fcce40f17bdcc9e7a4b8f06ea5805caa7dac9febf0b4ee61a92f0f4862d500000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7b0fadb05f16502b2651c4aa888dbdcd40f11a029357d9aaebb5ec05c671b3a5f6ba9fa13b64941bcd25fee242815eb5e6f97cc3573ac8ddf837af8b578f3430d7c02c40df422bd83e003fe95d6739aeffe28d7d05f9042ec6d73b2caee30513380e1d7d345ce2d73a3bb03eaa6ed7fedae2c94eeefe607e0aafd9b6c03b9646ad815967e8ce5f7f8eb1edf3674c59087c46b97a7003057c4f1690ccbe6069cbd0747ae81ae80bac2afd8f825d4acc364251729b55f0fefd66394b5ffa65957750bb776ad8c4c4bd4f5e5926d99dfc264fbc62389499f816104581b400ceef8e22dac0723d791bb7cbb573181cdcdee059a480dd7fa3fff47b6b3466802c134e44fd536a76a5c255939e3769c7206f1ec6b3f579cf57bf19d69bce01638d099dd646746d9f2a8ba4fb08f9a0b06ba79d8434b0d8f52ace62f7d2f27e4557fbbed3ab2ff5aeac2c46cc896182b67e3976d7af3cb113f5c0265cf15fbea3f01200fc0706a4d874b2a9b8494dd23aa20874c81b310b6a6ae481953cf69b371b39f1244c5d677c3ea338b6fefbcddc9b8385163e41ca50c081b2e04ebb7fedade1a64426a5c1bf282b05de5c4f7c97b843c7ddbce6148bdb0720a8f88df2287f2a30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a06e382656ebeda49e922ac5c4011eccb2e587fa684854b3b39b45ffdc6b70e29d08ed171f57da937883838b2b2d2d84619e2b65d1c1342b44287311ddabc548a8961632d7cc9d939e5d6a27da5142592c74453c478866b5ac149997a61a98bff64494ae3f8ca36ca6afa795c005dde24673dddfcf7c0ba2ae56aff6571f9e2d378161cfd9ea31bec265410d2849a4b10e27dc7602b6bfca31271e8548c0246f2d0a3c9bf004538858bd25d9f1b2765f6f06455b6ff3cb741ee5833e9eaaf224bd810ee563bb44fdba16c092965cb507b851412dc445497785afb1e28a5806c58118248905625bbddfa206c27465b4ae589d4453e0aa2e787eb618ccbdc3842e6304aba9821d417ae1e189d9e421cfa7f7167167d0be1c2c58433686ba02c490810941fc50a5357ef588b8e74c15667b88a37b178fd8b9a7b5eed2072144dd51ef1bda9b478f97ec374c81851689b51492b7199954cb4bddfbe5082ec4921150a64faae90d47a048403922186c7274989902e72d4d1e94f08ed57b675820be2389a9725d529c7d56481c93f379ddf5b748e4217c51416a9f99afe13fdf8fed3246ade8d8ad141c1e5469e2e7878ad204321777911559a1f94f44e4d8767da6f300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f448809ea15c92e584f6e4ee07dfe836d15435873848ae5d7c326afaf33510d6188b65690d099d736d16c48a083f3cc1e9f13d1a770544c22d3a5500b7d6e657ccf9a37fa92a059b3fdd5b0a47eed6239bef6146194311bf243874fa6c5ed271b264be94a1243ff854c012d3a902f35c4766f590cc8ce1ab454c61e7974eb7551df6db168dd43be819f1996e1be20b9bd24833d9c90efcf10d056cdd1777ec667bc22f6117f0369caefbff402359eb27578dc5024800904f609054a3be91e87a934bf704c12aea0bb976d9ae403e66949e74ab2056f11e5048031045656dd8cc76e0a16bedb0f611f9ed47c81c87aea60ba4cde864df60a5d94e123a189917a2cef172d3bd7e377fce1a6b42a27fcbd4f47042a47faa9246c0253539fff04bed652e0ade0c130979c4ef37736cd75836461866aa883254079a04ecef1411124e09141ba3967f11f9b26271014932859c7f0323f23f458924e1496ff2818588dceb5105eb32680213f577ce27e3073f3e7878f491dc258245ffd9b01f9709e4e51289332b63c0c25bfa971339b43a7129bbdecb3c222e182c48984fa740a9f1885290a2c2a410b08e06137873abf641c1aa2e1cbf524cd785afeb29ded2b41240000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adf1659e97d894e46c5c69918b58c06611fbe2bd37f9603e45083ff16934c90409d2fca12d7586300a3c2819244afda0944ae70a8aba3edf453507768bf5c278ad4821af3fb2f24dfcd0c1160722e2ddc65e38daa516f5a2da1833e15ea0874472497ae69830b694ff67529b82e5fbc40273a48eec931cd2568b63ca94b2174240342166c05b698c05a1f519afdf4d3fd7a665c3107b9d6f7c7ce3cf9dbe0ba315be6f8597b4e7e970e9856b0fba26d8c28c2c808b70700783d566cc934dcefadb1a566bb3b54f3d44abe1d444bff5376d429392e0992c6a063f19212fb8625e06bb3a819277e843011ee66269dda02574511ea9732f1f7ef27aa4ac45be2a46787f1787c59e767d7b4860dd310f319f7dddf34f5f0c8baba9f8d1fc6bbb53f1d0c681359da685b4452d55c1ffb30387bb9ad70afbb88cf31a474b67f250b61e79a3aa3ad2e5d67d031dfa7b6cd0b06dc462b15702bb6ac4c7a9d53b2cd025d3f2d502893f2d7e3b675619f38b685af51916bd668b011222a14fec5d49a9fc918d9a17d225e34398c7878f53e2949516df4785505859fc022931f5ea72fa90e8713e30fde9fd956f8e8fdace22c16f1fa77d794a48efd3e8e95bddd0563baad200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b6200e5e861f5305fa94869045994e203fe62289f007a189ec3322bc01612f64625352a00a6f143f8700c7f333de88d61a4d7b8283a6b295038537878b2bc713c249679ef383eac03093c9e2210244c4c29b88568a65277ba382d89862366fc9b5bc3d76f51fa247c12330ba18201d74e5ddbe33bf9fe93a886d1480d9856403eab2d58805eeb307a46a53fc5d8f5b39f226468a4236caffe5d6e272e63ed0d46759d69a1fbd0be2a7c4b0b9674c3a54d2c30c777d62fad66841781a9658eee27ecf9b78483926bcbfb2dbd2a80645f834c75b401b70738fa6f27e2f624999d2bad59ea313cac38fe5413091e75069ef4a8bf5d7e60886ef8225c530d0f5e9ff54dac22dcaef871b340d0de895b455417ca883687d4c8a52e8c3dc50fa5b3aacd3d7ebd4878eaea607e61540dd11bbd7b683e07eba3102bbde3c35c61fa5fa752f74dd4b226585e712ebc0a708e7a802cf9e115ec5741f15f3291b39454069b4576e32472bff16cf56e01c86c0b9e92afbd915e6181b391ee2c1d0c4dd26f8502f0baec527f88edacb70c96dbcd105afa2706048f2d3e4f5e1c4e51edcfd9e213b0cc991ed6c83b29e0d09a86c02087069af9009d386bccfbbabd56f95f59510000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000254a5ba82fd7c353c2c5b82653f74caa5dca6ad60bbb87c63359af11debcf320f44f3d14f0f3de0968bb6b22c00589d6a496d7e547867115f301bcdf01c5d15652b314f8f31bbffee982869fef5e78d02500a776b0375bc008cf88ebe948331280e1c9779d5c56cf95bdcaf48605d0918c6d84ecbf309037b15573e3702c066e074d856567b62b26d0491a4b34a679926a3a440b9848abd72d9abc3168c0a9e4628497cb8098f96f0d47f0a440278589770fabd0a98c691aa6148260ff3f8f82c73c3f4a29401adac7ab86ad16b1c009a8f3a691e42971d1c9d0d0b8cf2b0a9b17f6eb6df310051808e8d7c77d304c72c582381cd0b8c121c59561309d68aa321498d10162e53c22e3dd9b9b8b0e454cf695605f714602c55de39064d3f393dfdfe8d970306808adbee4384e38b0c1004ae33c184e79d4ce3453ac6e558c1fac92a524aa8266597ea2ecdd1b47b5e744de0bd9e7acda2fd756d5ba7a598ea83738430ab31976edf5e85711d5fce5a1633fa7a1ef2d68da5dfe60bedb54101f3ce6b80253e24ef3882dfc9ebc6451bc26517f866db6caa939f126804d41297bceb8d351bc63b8e6e1afb56e896185f22e5b4fb0cf2c749159b8ddf815973cf53600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b966310e08b01ee113db7a9aa3cf4117e5f53c825ac6423a6b46e21aaa6b06385d12b9608bde495fd9e195c05e41acbd651ebeaba8d8a0ca40534c37f0eaa0f755bfe57f181fec78db1d2e6cca96e5f61e1ad18178e99480d898b416a50dbf9a4e9dc2016fb8bed3f66a882e8be8ab07f637afead81d707ab482527c5cc846aab6d2e081c37e4c015e3d77c2fef10efaa7dcbffec4552e10ca9e8d2c37cc023d7fd1063cd35a6b65bc9821ec6f50db78f18b84d5c50327f0f3a67924383158a3d2441defce732e476cf1b4347062e313c618e588e18e7014b8ca07cae233d61a5651bfc292a940858ed8d768deb7c0cd89de1b17003682fd422277010a7412c6e72ade464feb21e7003251b9c9b61b9599a94e26be34975c9a4d3da8e9a056885aae633830bf32977279ce5e57bdcd6cbaff485ce34904da3eef720e8c3b2b4e7a2e100e5ffa2f3191aae786f28e5d1e54fd83b70b9b6fd791b001e7ccad3de4ed4efe0c64ec523aeb2f6952b2f326cd0c4100ef822c7f183b40bedaf18fc5ecd37bd795bd33144dc45506410443cfee07586726514283f9ed0a29d28b28705c7e8a2cf1b6f4709cf835dc2aff1d79a3d5d48bbe35a006e67240e5edc6ce3970000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3b74b6a47c4a3eeeac0bf214748e0c704ba6030f6f3b45e953432f02d93cc178242ccbf1058cb7eba55ed36e81bb1e7166e64fb0fe4e9714b9d07f169279df7c36dad986975e7eb2cb44e8a646e9cf5aa6ecee1d6a905a7fcbf717436f8bada5c21b8509e867e2cd4e5e3632a5f7f0b5de5367b3332cd0313f7c0e2ef66ecdaea1d1ed5ee3f1847e92d2918d9b4c1f733e04b800171e441b21330f81f80f34e5a9ac640d73bda05d3fc0e0cf029036ec5bd968a27da59524acc8f637f4d187d957f8758969d248fcda741e9baf3b591c5b6155d0f28ee75abc70f33225ff05e283f104888fc4e9ffe2c2acdfd6eae43fb068d9237846c6d8871b86400d46848e6ca918bb402eaa410d4fd0cbb8cd2d225e87dea361926fef8fb87c116390a406914867b968360aeaa1ed9dff8c8ac9d36e6f6563764022bd35b93a53cd528c34db74b23423f8623e06ea079265dace2d96765738b1ee2a6487fe215b7634097fc60f11304ba5b78966f2a93a6d841727e9367497c5d430dfaeddd14cad430fb7ddbdc5ff10178e1237ba642cb733e3de102ce89cfb6b3bf3349f6c1a0a30bc8f6243efe9505ad16d9fc6093c80d431472ba20e5677a100a3fc5cd0d936d24420000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac4aeffc0656183fe1f7816d2e46ec7e637505ac098a6e45ebfe61b2fda0ec5df4d766b6df620297e7ef057f59d890c7f0e29258283ecff7879948775a7d5b07761bf85596e4755fa437bc8d260fdf0bfb41105e9047409a43ef1812573983e437ab95846fab9481893e7cc7761c0c0b7cbf174a4815b41e9c62b646101e509d9b235815c24d62b08337a45b17b41c28c0f361b1a7e0cea10c8ab93045b3abdb9a6800127b73296fc814bc40c79a5a43930942fde5d744e237a2f10dd88c9becc067f1bb967957fd5377dd5e8daff945feb8ce35a5ce1dbf958154df2622ca5919aad66d8be9aeb8244a08e453c72ba5ea25b9b2b2927b23123e494f25b10e4f7aa045598e4cff4536819a8f611fcd829275ad73f2131db293e74f851eaa28f842931d2b18e2194700743f88b63e90c4fe741774032849aa98cbb8d86ee2ac7cc9db6c2953d80acc2475f41833b142465d4face006dd8766b0c68898c4fa2cff0b9b247f579510c46fa38c7b0cbd66ade6874e592f0b2a4a96120deb0f50f484d6a28155d64f52952460667b5696c0334f1358320e4c0fab0b5978b20afa37d930364693056033509200d69c3b25b577ac41adeb33040452a129f447b531e69200000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484003bc06febc2bd2d903651cef1e60c098cd93daef2f0e8d24831806b3884de700119555d27d79874472010339d6d8250a3dc5592a9713af53046d36ff52fb175a1e371307f09e03c7f43f60f987af0cd9a1c197136e1009c75d784ef1bab7fa340adb9d79bd91662dea5fe6261c20962e6ad7e2c6ffd9101cbce80a2eef972a32177e4831025adc240a441778ee5b8db1ea0d6a556bffe02077be1d417ce90161075b24aa16ae3be7d3e55cb6de67796d3b17286ae2b0bc4db46e965977ca7f8413c1b54486f4b8c70db8192daa2f334e0e1654fea276b1b3a75d4719bc42dc6003e0bcecc3f72339384de26200ea3e307284407eb1c723f05568b3d10cad5bd51eac880740e9117f36e298211e54a30055997571ae950d94f95eb845dec6a90829c7340f9c275f78ecaafc72d43b99e54bcab76e5ec47b6b558984f1d0f7415e2b4b7436eb127b3dfccb13e287ab62164960cdc6a45a48f5d64d7a24011d36b70f66252175767d7432b9124f68f64d129778400356606a0b32b41dc44d98ee241e7a1b583f96504b68c7bca75f74746d7f605570550f199c3deff7c4919c83c113862b1a9663ffb978164f66a3ae6ce5b2d99bff1996ce56d844c2e51db0a0691795224ccaa17f69694e91ebef167df2f93348575594ed94f7eac0e57e96af030d97d3e5bc6497cb2c1786da1de155c31c833b88ca625ee29177e337e97b58b7181f77c382a620815806ebfd43d650f0a417d9eaeb746e6872f83e661077684b25ea45d161c7dcf83019ebc77cab7b4bb4e57571b7fc3b2f0ed3a644bdad3ddb2f4d007e262c6969f3623bc6a1839896ebdd7f5914302e975b8a93cad46799af169a4941f0f6117222fe56b78830c897c47a4d0f45a4df68018b2cd44e1d7666254c78f0e4f467d5a53807cc1050b4e52b6a253a5559c496225697fb47ffcade2a884ca08ff6972bf759e7e286b1b0b37530726e0f11346a26bf96d87fc000c80f6b6951eac94b7d41497ec03bf5b3dbfa902d5a22d7b12be3c94acc93b3c8bf1bf9cabeea853c09e883f084ffcc292d86f89309927ea8dc39d704c4205a1b5c27815f0d1efb218017b75823e3d30c7a553fb6c848c640a6f92b68662c9c3a8610185207eb4795e41282ae46f83534f953b291c0be4fb9afea5bb4e1a0ca67302ffd77bdbac152bc6709f73a05bfe5253db9b75542473d708bfbe51019194b1f01b0fbedce3e0173cd49d4aee04cfd06fed1b9e2cfff58ba2a6d111d4b7bc0dc037145db8e2369df7de3778200ebfc8207ebc30b0b68f2e5c5f9097bba4ea7a0154c8539620a4246111204173e4d6c659db42ee86e69ffe57b6fee2fe2c52f150ce3aa3a40ae321a2b3ca8549ac13bb79a59ca76648112ff1127e74e32cea8cc0825e8eb0efb9a46c2ae5d865585a539733f7e45faf3bdbf68df5536d0ac28d308f65d696a2f9e7299dd884017a6ce04b218f4ed6732d28d1df795111bb2cffa0c4f88662bfe628ce2fc722369a88a2f5a9056cbdc845da08878712fc1c796be200ae0741324d2d1e66b762eb68d13faa174f994975bf14d9723512f9b8491df1020519d343ad81dcf4a3bc5335e1be9684e21934bd9992d2b79740c22efe97d2041cc53cfb5e91c1508da80aa7bda17c7e87ad9f7b6dea774a750e1094fbd0702c5ab085a83c0bd19428f5e918c0215ea2ac594ffe9800b060d1e9e03676d8910339e43d9a99f8fe929f5163e7c748d194e18e02c945cbe6f4e911b61ebd0700cbf8f6ac60453502d8edb989a0af5966a7df8155f2d44724ee813c1e22e5570097ca2715881a7643895b4244932a501444a3f4982678b8aa94b1f07cc78468e166d912e039fd7f2383228cd42dc4a2879613ca6cbea0002397633da019e48b52380abb2b25a36eb60704c375918a11867df1b202bd6ce94a92ca69ee731c5bc22663d4da9f5c95c6d422e64048d53aa75edc9d2aa22a863859cea03b8ab97d9005f2d2b2da989e377c856c288b4b4749b5826ad2789aca30c1630dfd8f229ee272bad80448c6b58e1c72d3e9ee2a09160b023c4f55362cc62762803b2d075d210e3a87069d7776f7b81f273038aa1730fc181dc481be674bb6586136f63ba11261a92533483c437fa50ec323ea77e9fc85ed1b63a501dd88059282c2309df2d09b60a9b67b162e358cd991d5f0813afea213f80409cd25afe9f50d61cbde5462046774e5292e4142ad7df981ea63cd8bb8696209db6b5c891887ab0f80af4de042043378a95e39793ac1d6dedde2f419f2c6e2cec6b63b602ad448c5866a36f1a2500b9e812a26b8920ebcef463156e210f1db2b35ce1901bc828d5c716d2da19a024e0fa3cafdedb54dbaa8078db9bd0e89f018c69b2ef040288854e80c2dd09cb58a27ddf68cb866d95bb0ff78b581a89ea23a2fb951993ee692535e7b3c3209248ed3273cbaf6f29ffbfa60e4d67dbf079bee3266cd7315fd283b3a848c1172fbcb0eda2b3841e241856cc0070689f0ec31d18bfd88c3e87dd248ac1cf901bf11ddfdce219c7b11ae702494a92bf0bf6fb2f2f07c6e2a167f2d16225009c2515e7b8a20ae9ae5f8d1edc75fdad479871adfbc3ef93a9349bca1ccb2d9dc704aa99f3888fa7728c339d0bab64f9aea2819aa2ce25ee11af8ce1c89b70941e112e336d74e94cbde2a34794365cb070ae0619f41fc5bb31e7502e71218fcdc711e561018ee9936c30cbc671ed204c6fa04db65967e2a6fe2a66aa5db9fbda152e517ee13f646cac6659f448c6ba08999552453ded6b54406c898c134bbef9130c61098261a20ba6df9c779bf0b5425190c4d58fe54e8b00503205b82de0de981a7e83004f742c80c974344fdc811587814fbffc6fda995fff18003202d567f840216129d68bf806612c2a1c3fc9b09bdb5c0d90eeb1f37aa4ec89c8d9dd5f288617431373168491b12cf19beb8306ca6f1d4aad334b764e31dc69e3d6e7188d593052d9b27711fe0371efcfcbe6adff84dfea83a5a656cd687806c5c24c97fc0e11015290c9d59a80638839310d1503c3c35a4afea7d9ee8d9931b247fa13ec270899c22ddbcdf5c8d271f34e70b41a13922e219c3dffcf95892d7d596117c64f22a513a1dcf7ca7c8169470468ea5acc66864aaa71e4bca424691ece8e4369612a579c61b7619a9ce75fff3fdbcfab985948a5bf21c5b07fc7748865358468d31498a9f0e6d9a4876cac2249ecb058f51e9d0c2246c2fdd6ed8c872dd5c09b5b036ab4e91d83ea867f362a100ba2de2680668305e0bea3a5f51ccd0cba8a721b055ce50a1a46182615b2e843f6b69f1c5d203a09c150f409691a4c5057c789042a8fde112016a750f22e66cb10b4ef222ffdaeccc6476ce0b6a118e53e2b1e0c0badbd3074bcbd72f56f939e31414760e3bbf3fb0f4a4dfa9ed00eaa9922486b068a5d3982b7fa257dbdd08dce6538645a7e257c46bb7a2f968c7cf5881775f82e45d917e7c528bdff56f529dab31741b2c319662ae4fafb8d3ca2d16307755f0f699e4e9fafb9ccc22737771ccf9b53cc9597d201dce4a37c63537cebc6e1e70d928bd36788541c78c81ceee07a9a03db7f859f99088fc6e468a6c0ac8663ae2e0243fdc149106b2f8e08e500919f6783b888b1bd92ee93092f54b3dd0aa9a4274046b11823baf480ae1f37deb6d0270acd2a66a3c27a7107d86925cd48fb2e2565494d4c861ede91a98f9234d91ee12a3114f159c6b81538845ae2c97a15be291f0dc38a41132276ff03e645bcc384c6e2c10a29c569586eab7d1e146d2f262cdd76b5bcfc06e148f85388298f6f6a2e300db523830420404011ae110c345b3023fa22f9004ab374681b0a8705a7202b29a9d66d06d1758dacd2168d963b6820fd9b5cf8265f6b19ec8d07fb341e9b051584da64719895bbe4f94f9f8750f22bac0d773d54a230447e52041d41e5f6ac0326e3f8d20b373c5654add14dd6a301eeea5176937fec93ec6834088bc05013e7ae799b5820cb9a580b91f0bcecb4017d3a0f5e1ffd3c0bfd4e0d6d88b60f040dc9a97d159dfed1ac04672fcad2932a7c13838067bc60c08358262b0cd2d00785313a98a88c303d17cb857fee2a420553a0131cc7c73276ec4b8b8ef3497af3edc5ceb082817993a0dae87bb90f65021cc0723921b8972e8023da273bae3675c54cbc86397dc01b81311c0c5926060abed88895d71b7ef370983473cab7ddac39d9b6da3a124c3d9c9ee72571d7ed1dc9987740bd133cfc32af1c5c286b6cf79e5e6c5bb5dce2763aef360f0500e40e746b20aa5e67ebe54bda36bda09112ce4af0f9446685fef9778494be6e8fd415145d3d8cf7454e7f0e8babc1fb8cd36482cfdc2b54dd43be61b49d3c02cd950e661d16cae0f72f11d71ab0a44a52066eacccbec7df04a965ae1b2d9bcc849607ef6d30aa9f588cbacfadad818d96514b34ef33d2e914ef07ed659104b974ef1c9d2a0504f34af79097c3c0343f71b4075be9b90a3e000c3ace91d23f99d7930daa51f0490b7e546cbbeb0581aaf388bd1bfa5835afdfaefcea6b8337bf4fe11bb237a7c11b520d9e86aa8fdd12e3e4d9163f7abde9b52721614279e026b2c61ce8df0b12477964d2debfbd4756a57645aefcafd71611bb270311314dfa00752c28947da06be960e4844093ac3845d797863b7bce481f1a76fb18deb57396ef0b34e0f42da680914cb28ac6aa55d9c0e3e757fc2aaae7960ca4571034b2320d297aecc5b035be052ebcdddde2cf3ead83e5a86dd08dc015f08f61609fc39a411eb8cd66bac3000fccea9b41bb08e07bda0bc3999e98b5cdb4e66bb8114db5e71d0f9e65140160734459ddbfa19cb7df6e9bc89166615770238d83fb326eb64b02495aa351df6ceaf23a64c96d7ba0c41f3efe22ca8633c9678defedd083ea432e74ce7aca1c5bb05351fcc331ec36f29a00499cf4f1892efc2a60332af969270ad9110d3dd384fe6031cdad502a2024a7b38bab0c6783d3dd9fc9b877f7774008fe4782b7800bb61a425e84bc106337c803cfc46160ddaa814ab9453e1c179d082547cf58aa5894826d8e3381fda741e044d2a427d4f1b6064bdaf17c538b7b0ca081f3017d6aa8c8acef8bbee4be64eee68ecd318722ecd120712e68f75bbf19744bce05a97e4b22ac9a9ce16fefe4e93652a7eefdb22927a5c07aa4ec0dce16a94bec4658d835bcbe281b7838d60621e09942a2b8a0918fee351c2ac2a10926ff5c98387ccb37924b7b51c6ea8557e257b4b7bbf5d6be8510fa494381b8bc2ac3c7cc637e853da16a2d295e5e1314ce30d68b60f6bced08640f069383f5341546f3e3b6659f1f8daf016e08e3d8e8043cde25e8e98cde6c798af98c326ac0148d26fd6749f05d6536de384f5c8eea77f23259d72e52daa8ec6a4f8ae1dc34236282b41a105eef2d270436680690df5f0d331046861cbd582901c2265e1aa610c3e1892689725e8c34d5057733bcdd400fefeb5e8ef033541a45e8004b22eb10a329d8033308469e0298c31f0706f1e2af1536f8dcba2305d0b331bb3ac5210dcbdae276127c0f00f02559a1534d7be99b049deccadbcba040a40391344b9e1f03604650163cc8949e95ff0a550cecef9e080625501760db9520723219b56f18dc52033939c3f94b3c1350eed5034d75d4cf15aad2652611649297f41314242a3e117f5a1cf0d298cf14d427fa791dc0d732d0c4915536e94d6533d34ba5d82570aaf1d662a4098f400b80a03aab15f18d3146545c57d5261d414718639121003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000011118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000110d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000110a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000110b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000001129a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000011141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000001125e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000001112978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000112daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000011189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000111159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000001105ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000001105c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000001114d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000001103db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000112ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000111213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000111ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000001114fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000112b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000011305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000011280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000011223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000001117a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000001108858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000112618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000110f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000110e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000011172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000110b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000001105bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000011137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000112e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000112297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000112608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000001118373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000110422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000011204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000110afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000111998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000001128d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000111da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000001121d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000110ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000110e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000011107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000112f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000001109726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000001124f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000001103c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000111fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000011205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000001125110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000011283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000001121cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000011094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000110c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000111f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000112421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000111fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000111bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000011304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe500000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000008100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810400008100000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013ce3bb8056bf177bb0b5af30f5774510bdf1a59b036edf933df64521b93ae0a27e2a64bd792f76d77a418af36ad447f52671e85ca932250dcce07d9463a40413bcbb839ba0e635c024959d2b2d8f546558080c8874a448d8e6199ea69061cee18538d29318f998936bebd8b22a48f9fb8d14584d37aa2fa68df73656250dddc78a99f18586cfdc626395ee62fe1bc55feb57f46c303d33ffd974cd029e1c6e318b9128fcafe2e31d818a7bbf91f2d72133d86881e827427aa01f2238d0e8b8a460fa525a4741c9404d57c269f2bf24bb12119373fccfb2e192cb2ba26d4dc1adf408455fa73d82b4adee804179a26bf5fce590330447628bebcf8f9758397512c4d794d0f701509a74d5b0b779f449d34a3c00e1d53301f1f7907681c4df84719f787b4851fee5f3c33fd358668908c13c9217e5e485edfeb21db70d40c2fb2b35b45c83e1edd74bd93e6a8c82cd5927777e785161777326e82d262019aee52098c8a97d356a57f01a95693a2891ba92d4a06ee70cb53b0ef241c1f0140834499843bfbf923c10a467207c937f033811aa2c8a0765c2af67a633c328cbf5174f2adeaaa85f6ef3d5eff3632b255cc23e1dd4b60e2c35d93c5465b1b7818046f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c04f7949b3913c11eaf09b027c0ddcd342b899ba5e7f6ff547e143ec09543d6ab3ca7ba362c9d8aafc8e62bb2f31ae78fe47b92d711d8cf96752f3febd4ae80fb2bbca6a724c4a5435e51fc9f4e90b581dacf298e530d2447d8597075aa6131968e37e60bf327d9c9236ffe9dbbbf48e7500343a1c7b0df81206259f0e9b0255a305ca581770c41cc5f2c5a39ad3044b1fa2948c13927bb1330d0ee6bec05f4f60539e854395ebf1208eaab32e2fde01846e3975bc2204d3a3407e8491f2036549b36036321c9e353b907b97e689f59e036478ca68414c706099ac720ef2b8eee158a4613ba60e4899e784f320f265fde70f19df3f5d3efe4f92c8c33c177b0d378cb36a5f3e4f7f765534e9371f0f6941768591297e179e4d03dfeb2918d3cc8a3c23f19bc1348e016ed5cf8b00a4346e2f6afbbcd665f1573496753abb31cf81d3faeaee26a36d3ba1859645f20df94742c1b90e63b60eacd17610898726db9bac4e4228753b063202aeacd9242f7c31ab101629e8bd5c23b2a10e24e4ed798550f499255bac7b62804e4a48d64bda9b18d4a7f763492e4b8f0d7b080c67c7f0dbaf610ccbc0743aaab31e0a05dd536fa5ee6f5562114980471b7aaf6652c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001875046d10fe18fdbae43a4315781e29445009de5d5333919b03555338bacc6ed175f78cbf1ce09abbb1f7c9a4904f5ea3167613c8e9b37f396ba95795557f0dd68e42003d69483c66229bdc50d44acaa92b2d7b5643e590e5ceb34e3d940dea66c4a4b634ce67ae9d31ac9c6ce7d96e68be45c869f4bb2556a8baf87a4659635760ae77d8328f68c150935bdb335bec965252cc26568ef01e534a81d2ef195916d275fa67c6fa1c39a8be50ead3ca70ce0f2478dbc5450165dc54d17ada4727bda9c2ef08cae4b5cb95eb123bd80d1e4aa9be251601f2106076b7651f35ec900434cf2ee88c55a48cc6ed8f5978d9fb3e66fc11e8fe40a2d448b0ee1bc6002bdb53d22046d1990548238021d84ccb4ca1a4284944b62527fe28c1f153d928a1c56835546248df1388ec7b23380dcf96a706cbeaa487a8e702232db3d3f8cf4d04589e269e94ddc30447602f9345c7d080bc43e3f7ae356545caae11e9c3bd0a9570519035a228ecd4b878e1e595e442c38b1915d64d435db3d460eb9776e57b79f16a774996da0aac0d7bc710331ba70e30c59b51f5d729b84103f16d46c3c9588056ad2b6a313477e88fae9d77c1c4cbab275412ad6c06b2b42285a12f2c2d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029a061757f9cb371a2180d3b41ef44c21059cb7ff00500ddd7cb5a1795ef6710cf44a4aa974ac2f95e7ea9f2a7d1a28d98fcc665aa824906f6ed8455b8fc9f8c6d39a368ad0f744b4600e74f51e8566023528cabc0fe8dca72955ef3e3e928efd3a3951b6af9f695f3dbd43370c3782d3d3e11f8eee6892ed701ce7a503a7acb46f800c331a5f28ffa03b7d3d0a88afdf2ae8639a957bd217d8a9cf2ba664abe87ee99e8d80b1b9298aaf7aec97508efa0d70fe113bdba30a579c0a1c9808f174c112c9584a5eb16593d83b9b7de495a6f9f91ccfd9b17d1e013d8ad9f4dda47f8fc393851b74bc4e8c48d0820b00c46298375ce91217fd1eea253e44a5b88b4ea1c6e0e97bed13767254db0e1c2ba45757b2425ee84eb17436f5324599e620511e19a593b826b0af4e95624e9538f4a8cf2165993e28021704e081950c65e3a8d61e4ee417b062014ed75baca7081c5c4a031a697cf36ed6d3451822d8072473e39d67c83ddc21a2fddd2fef177ee6f882a0afee952e0b30fe1749eb1f739aab9b4c2fa9e695201a31ae95fb5122741fe0f1094fc60afd79d132c6851d390e5b371b5aa0aa182e6b4dd050920c4e5c710a99bc2389ad6d98abf522bf8b5ed2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094a49edf1a0f4876bbe787ee79f4aaf53aad8a95b05e58138f69ad100efbffb34fdce4d0e3fa36b1692d4118ab52fc9e98377e09611037305f893095a562b6ddb68c632ed6f19df4cc3d0b802810e22e6db8ceb5b986dcaf329d23e4fd751a0feac692405cda1feed294a9c54784daab97587f255e001ea06ec2e88c7350bb603e17c1c64622bd6e9873c6e55465c5ed1184e9e74a82ed25199e40461c3d651b9c5327e9e40ce1e18f69e991788fdaba56fec45327b54748dba613e2962375dc9c75a436ea264cb04b31e14e079b053559fc23647f5d31422ce9da154f197b34ec813c303524d6645188e8bcb440a5567d4b504b40e031d1b2733d8a1690800d1300bae601b43463ca847e2a31d98376f39f3127f0d97c7949fb8f63259b6d8fd4eac14ddc557f46713716319af512bcf802dabbfa0d6152fd9ca8a74de03445ac4bd13acda5434465e2c0fc191fdb0799012f3ec3acaebc25d34fbdf84d7dc862ebec6819d838b06827e486f8247bc6b7e7377497380b1c922513d00d05237c605b0ce539ba3f7b4e5787047129f1ae60eee74f81f03b7f4b27b8adae154ee08a617cf3430ddc2b441d09cc1c59dea53e3af191d231f8bb5f6c008a800484e900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fca15bce06f76ea46e76585261ed61be3cf1231acb20594ad50961abdcbef95ce8019ce36a059ede24f5780d3573dfd4a88cab825386f7d69abe4a8f5c83c280dd902c0c6d0877ce2107f135b6eff6dc67c1a896798d79f1c37163156112872af4b43476240efd72590179033c5c30c2f5b1ff1604e35b4e4e165ff1a50386f309dce503f8e5ecae627db8d52dc5029531915189dbc1a215527d6e46b0218edddd36b78663919c2d2419f0d47fe84891fbf1c478bb037440dab62481d11d21fa650dcfcbfd6fee63cbe399aa54f6e3036d01d68e200e71bc6451be59d6346625579e563454d73a40403d0b281eada67d7863f0b9f14caeaa71da45efffd7f22034f8848447f628c603e6122083a60f72b1adb749b405e4258cbf4024ffd421d8df29086e72a810036a623dbcd873cffb2fef5fd584ac4b9262e40d821d300f8a33c7e845272db2ca6ca9a3de268ebc949d9e20c8544fc7aedf191d4a98de6f2b8efde6f7037ca715bec3005cedc867f8766f54da872b4633bed183b4b4ba0d20f80fc0d14501b4c6079f6582506c2b023d3928b52fbbb71d2779e2872b73e003d11fb94620c7097b6bd06c4544c194e0f3062dffe08f0f6507df841169b03be00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ceefe126ea4b57283671404797927baf775365dcbeb6345fb80283e460606097d39aa43d5441d149b34b6d4638c174032a169456c2ca04c5ec6c58f08ae7e3f6724eaafa328f80d785031c50ccd82ac3badcce964fc8060091a632a3630b613a3490f3677fe2a9a20623b37473822707afac717a553c08f6f52691467fd21329755e25209871b51b74eacf026ea73e52c25da49455f360f53bb3d409a05ec53db2f68cee12eedbf46e1dba51794bc080442ed6b6001b9c1785332c18e57d754c000847c1b08b27976e74004fed615aa47bca52720746482405503133a49e5c6ff5a31d1341383d84fba6d38f9fe5d5ae682cebd59180ada3940d9313bc32925770353cc6b0107e93f371c5aa2d27e75303af015415e7fc4b965f5c70d7e3980120732091d52d35a5bfc1edfc41d6711b700e46d33786542ca156afbb6b921f9d2fd2f96421f80ad7560963ab3f955845698d312ae46252982be3b0739b7bfe4e7a024e4e10671cfb66f679cd3959f8c053da1005d598095939285cef247acec0d7b0d1411abe2a1aca167275d24033e96d17b7d762826dfb8c52282508994d1ece363f5504fc28a6e083c65f35f72dcca27ce678847e80595b53abfe566bda700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d4b97ab31fe4e04e6ab61a5a7427d1ea71baa5f20a9c92db77f962c3ec8a1d7658d1938283be7c6666f2d7c21bc1fdb76d44b8ba98319669e6505380ba8416bfdfa9591f92eab6d6e54cb8d1d35077947899a16889f5b7afa47b2a503a0493ba6bb2b0f8895d8e3b26fe491f0904fe744010bc25d7fb492db4014883ab94d781aad88771f8f57de1832dc512d93fb3dfc94e56bdec14f9b802d8cbb344a9f9dd011f5ea0f27e3fa890f776c9b080b7bf32eea6fbcfc2afe8e28b8b68daea605655c33a3533dae1d89358626e7d1be50860e418c00a92d04dff6960e39c967af859cd42c27cb648c2d95acb0adf4538817f10ba6b209c22a898c2c3a1a3468569c10e54979fa56712a264d893f57ac4c8859b564ac559a763bbc01983f28597dd31d0ea60479fde796b40e4387a15943c35020ea5731436b3ced1b56a7781c2cd81dca0c109d26b11baec287f653322d7c7793a3355065882f477756d553cb558dc7433b937f8d6b12d0448923bc3ef38afd30c29d9d512d7dd619e61f948f28727974199dace4558c73e14a0750216b6a820a6bab64555544c5b9978af1d7f9d8344ba16bb872cbd096f0670613d7d8d24072bb9691da94cd54d80ef0f4c513000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013d8a3eae2c4be8b5f58009efe021430ee00b7cbb317b5b5f2883bca6ad5b7f8e96fb3b331cfac5963eac74dc2da7aebdbf2180f70c16a332c6aa829f8cf63a302d53b014e73fd6509ead2f03cdca8917860d5c47bd86debebcdc3032b13d3fc4e6b7aaa2697e93c8c9c47126d5a8f5d79e8bd4e0a78a5ba8549006f104f26a60713018f70ef67c14feb7486d579f10b7d63a4fbf666e753c04594d8d17399f9ab5c5e176fd340d1f033ad7ce71a3a7aecb1df7b746d23b5ad99478a3f0bb483db097374db756a3212f7087e9f0a3673e9226ed1405f03524bad7770d19beca433150952c9c1c93cb9465be1a41b464f2a5c05de51617951dd3fab01869bc53375841480d4cc5a9354526494c3799cde14e4497638ff94c043e8d0850c221a1f391292e70c489006b78668dd67bc798e03e2ffc674b47604e33700611c2e6a69b5dcd3b6d6149a616b3a11f2f78ade37488bbe9fb33a70e56c4463a8351a67981e82be7a20891ed22e4b4927d7b2fadb4a35bc7c7ae1afa4bd4ed6514416acebb387db64ffdc28b756d0ac65df9ab76a2ed80d24ba2b35189b53d218c1f92e756583fb491e0444bf3265a7989d33b05e79cd22e1fb6ad7f4a61068047d9b7d1600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e898afde0d998613bb941ea9242642665315efafd5a0efd6da42ff56b6ecd60bc8393335e799dbc8dc7a1803b9cc1dd76b49d7c88d2af8ac92c274a1d08e165c8d8a99f48cdca0bf58658ca47ef094141529ab71f51b2b5f92118cef2fb9763a64e0b52771d239e710254f6933fdba14879a0a0b86865c0e02b5a417a385c2ecd4e2f5ce0e883d51cea35159640e9942ed72df367279ef0b50f321366fb6b82015fe097f005580a753bae99a313b58b546c001a49c556d03e252c8b46ec6e723c2b23c2e4d2985074cb7824b8c3fac7c1f36a624d582064ecc9b7a117174ab5e1678b5cb5b0039168b22c01bb80cc920e44ae90b351930c4a5733752f77590b7109e4eea38bf132ccbc25728e106d0b658a21e4c8e611823913222176685701af90a5647bf3c6fff700cbaa23571c4b8a27a48481b39c77890bcf9cf11617039d10e368a0c65a2d409fc3de5e0586c30171f4d75deaf9b712d0b61c31df88ad92ba5bb31a77ee8a756379de8af0fd8705c2e41e9ce9af2519d6a05d751373bc9b48b2c614c9a101b911b0a4e4a87a2fce0f07751c037eba354a16f34b3764cf1de2b4c37f5587ad237e95214e0f81a168d356e4a89985c6163ecbab400d7b4a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002555f76356cbb68101ac6013ba45c52e04410bbbf5744d8b8b014945eb352b4a4d45096423c3c922b07c96e103c10e8e57a76cfe9583fbfe62af30799fd83d1d3f1b558bc40925cbb226eb5179d1415d260fa747fdd2a97b5ebff69be6baaea27b61193d19c18e391ffef5f8f3d733b64d98836a9248241697d858a7e5afd22158d9ad11b0823d1708a2943215571e44de271eb4e109bde184b4bd4b943650bc71c4eb1a26621c161fd6165d0341e03b21e7a5bbb480e43c3620f6abf8b0a7b0ddf225300836105cf08f3070cc87d52c74cd1799aac6a11578b8c0f1bdb5e5fc558db3f94fd186fd804e2b79e2e4a61acfa3393c04326bdf0b2b4ff504fdee75a6029a9d87e0dad0967c1702a60ecb153fa226cde6058bd87660577bffc5b841717b8712c7be889356e4fbc44cd3f9dc640eb0dde1360733715b8c2c90fb423ba56eed783cc30478288f236dd8b45c4b7a287ce98c0c12fb3e12d73e6ae2e556bebd02e1128acd25e96316fd0b09114ca0c3e0e364ef2df764d27c65aa102e8e86896f452b548423432daf10ec357e8e88ff04e566dace1a033508d00c0bdee580da7d042b147950f4cd2c83693d596f2432a5ae429caafc6055a3b40cf9bab80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000109e89496d2ab8d77914ad9ad07aa8873ab5ecd52ceda8b5fdfe64ec10b02354b7c61b12b2d5c63eef4ea67717fe008513f7cf612b3fb9f8891871918b0f4ffc6d5188a7ecd64eaa3c01e7a236bd7da7830f571da59bcc0897dc4d5f2f8b68e2c6f76723d1945e0244ce3b60e91f7a0277a21de268789b3d958ee9c6f4729aef477ae797329b64bce6346765ebdc497cd45361bfe38d4b3166b0596304047716eeb08032b93b434bf0738672dc9f6e4587ccd2f79fb4efacddd2491b2e2e0b19215223a67f81989a26d5eb2ab2d5dc4518f385355646a2f3960308d41ece45659290284a2d124f18c0f3036c1c684811cc5daecb368e8fd0e37247b88d07ac379a59a906bd9b78e398feec8c839d009c7367f04cf9b4dee32e7536c6690a0a119e5ed70bb155a80df2e09b263a5ef936f219103a08a2b4617c75daf7a40658820d0ff91e6ffe457c1b6619e5ffe43f3d92549eb8a8993907cc576f034751b54598b1a2ac062548b82b395390bcd6a450a9a62ba28da0750db3b67716a827d7a65449b910cffe62f4f156b9c0fdb26cc6d73be4b4acf6c6744dcedde59eb9f2c5977a5564ff77b5a7d75b89ff35fc565d8d3f1ece12d2a79b5eb4afdcb1f55a2c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b85ef36cf521938d03be9bbcda54c919d59b371d619b69fa0b33e16fc437072a4e5e67a62d064ea5718310a772e97d4e9b8351e73c79aa83a38a1a0dd15731d7b4f5b3adeae687172c821c9c5fd074700404730412dc30739349445bb574566a0533dca1f24112c027f4c6d3229237bad709c63d21ea3104ed41a4113a56ee1d2474ac9d170bce71f601349d2e2af0fe0f1cc1f48cf32ab00800702e5d5e5404020824e859d48c9c7b99ed1aaee8a385c14572de3132c9a72e3a27e7e7eebdb99244cc37dd0a040a412af6544c80dca07ce91fb0e0d538807ed3e667ffe92c1fa0a5831552d62a414850ef037230656873c1c4b91362f37e9bc3e78a1001a9902dda58f6dd523ae38fbc338dd56a44e282ebc2f1742df79cb8f827d3a8ffe207ee96b20f7fedb200868cf7226be9f3727afb27be1d5771a470d217128a84061d5c8857ed2345e115d2544377ed37960c1e3e1695dcbd6bc772e56eb2fd7d7b5355d2906e47fea4f7d2b91a30b6289d6dd08a41bfc5a1f79f19069d9416cb834000af1d523225e1f3047ff7dd4f1056ae061fb7da3ef22a703ddeab13edcc17efc5e327b9c91e752658f47ccecdb04edac48371ad4adcfe8ef34c6e7d7566af30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000227031e84ee1353c9f876ce2c05fd423bd10fa916659d958edd6191b3317f1965f1d71637ba6825b9885c4305c1287bd5af7c39b273e60c30fd209c287f60b4ffa8a7c1afb84264473957337824b26a529f752a9f12a2ac8d595441890f880098ee2a176bd4d120a85bd4e36141e77d78cc24cdfea21a2f9984de48f1d072396e3bc4d827de38b11d4f1734ed5116999a6bda428fe8913ef48de06b7b022bbf1b8ee11f26ddef122f5dedb02fcf1595a081cc659031597f9a990a3acb4de189e0662213bc98773545f3b2796a1ab51aaf1e96a641a1259225fa6c32ae3c0af47b557590689e049a934e136d75bbf05cf8591515109f68c0006088853f5a4392e7845f2f13f8ba3a92c7588cd47956d249d176bc4ff7762b282429c50732ccfa38580a51eeb1d72ef5cd3e8f972f2fbe1b7304c246263d0eede8180007bcc07b7de4d36ba6093b00efa34861e419bd8217581cab21e9676a731b60aa8191dfcf2fac5ffc5f509e9aa4ed341eb7b447b5f1c162ad267153ef8d0bb9c96d583d4fc76d1057294849e46dc59ae145c1fa7c1eec63c6bc8b59bf6707a7fd6c69446ef5446845c850a60df6d9a10f137fa79b5c5321c5be65a7954af99a82475a6d1390000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000207246dcff1353c9e817f5328fa9ab5a30d9409510b94e310370a48de57be1236b4f72e7424b55208cd2b543f423c1257a91ccb4909aa4c48fd3ecc6baa84129c34e6992d145481e95b05343924d85a04bf7761cfc7f5a5ad950fcc63cdf5162987cc9976739624940f3e8966cc11b19931f21153afcacfc30fb086f703ee037a4abca25a3a96960c6d7657114f62e4984cd09112e53d49af2e67c783ca5ded13111c48f99b1370f30a23ccb209e12f561257482f1c4fa7775b2d9992f4a0cdc8b11ed0aac3c57559db52e6eb788dbfc1ffebd82b73a4491ffa1c85116e1f1d130310c32cb369df7afab05fd218c8b84ae567c8b7d78b5118b8257c0c9362cbc286b3f8e22f3d1a9ab9f308e2b1b9bdfd31065beaeda7eab173599def26330b236bc3549aef30e330f486dbd800bde97e995513a3573c148ecd8a6dc5690230bcb6aa3e215f3455cd670de8edd0b16a1306dd3e4b487f6913f02e39d18d7071f0ddc99faca962f9dac0cffc8d824c40cdc210f6a20e69b40a807dcceaf41035280588c9149b63fbe4a074a36a09721cec10b5bcda6da029a53f0c42904667cfbd79ac527173dd1972a6f5301e48a50d1598d4e53994f20d622aafbdef848b5ca0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a824ec3ec611d647a7c7678ecb5bc663e33da00e6059788161cdecaa7632e3c6b57b88f65f2319037a4d9572e6e69ca6798133fc8b8f6bcf8a0da68bc6bfebbd3acfb02b96e02e039a7327b544dbef2c090bad189ee2280bee21ce7db7925b3d1c8bf7559bd1a65babfe395add85a23045dc4078e84f12bbeff5c836cb88ea064e1e1ac6e277a68db959493cf23f0e394dc74ca5c330037c190283bfbcb2c638dfcd680aeccc9a7e1bfb18517e1a599d3a0e25f4f8740c0dcf00e5d1dc6b11768978152b13404d289218935df3edfb5024547f4586750c3b47747a5cd02dff2f137fd9dea8dea7ad21b33aa2d79d474fb3d4f686ce470c59ed40247bd91e702d07bfe759d9face63c5cf65cb59e67dd745f09cb8cda1fac9712a21a1ae83def749c0378ea52e5dc61383c181b534845aade7917c4de96ae0262f81312f87d87a760ced48f5670c436897d6ae352208cb6b9efcaf881c10cf57fe18ff0149d4b2304581c46c1519be7e71faef406645bd8eea88d93dec3d8c9e99db7e30d039ba5575cf117021b11491ddea177239a870f34870fa1f2ab3af7163996f8baa60b62279a011f9668a39909b634a27d59db35e7b1a7e05d1124dc80d04d73126d61d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c770787bc005ca8ecd184cc54174e63b48c4ee5d7f195f4b809613810c06c24f320a301759c579e5ad0ccdfae9dace16b67380525cb3a5686566f332ae97f441553d85acaaed1b851f2514866e9f4e7976c46a61245a6f0a7ed8a0b09807c2b51d922bdcdf2156b0213b8f43ff16e1573e96a79ac011b44e7315be4ea767559efd1197391012c9db46e53499205c2bdd8a09c1175300d03c8ce3d1120f8f282c252d4dc1a041bfdea8d19167af6338e60d4d6282fbb70e98444042666ee33ed08217dfa71d930e500ca4b429d1223c5fd2612339e5237c809d58136dbb2e950da7d9fa5629f0ccfe18c954ca15f902e9b072e3bf100d1b9cd0806b9750fbfbd4b1fb0a81d23efa95ac00a5088c957425b734e425d7100578cc673c8baa4633ef4d37f7c3094594f164bd1a47dc71f8aa8462162f0f58aa399236c85a63078349e58ae1c482ae89f31f3fbf65b23739bb2c9fc4ebf63385db3d5c3294d0c985bfd7c77fbb74af42d5b8d326773958131a0d548bcc6ac78bfd456b5815d81aaf51e869d6fe26d7998d39c38d6979ba370b0b2e50493a30aa8dc0b48cb3990182eb2a3c76b8c7e0f07c4b435460e1daa6950d166f45a5ebdd511e6eda3fa7b7b340000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7dd2d7b83646ab6a65ab49a26a8533fcf7bfb488209eaf3bc81349f6a5df4bf73c2d3011ca2fa39f57eaf1bd50c31a72c5b33bb1343d774d6bc03a520fa8fe4e7bad8eec7a71c2f93e572672c495c30fcca0adc462d10eb9868e652281af161660a725281b6c23d8b442dd50f9042d7dfa042a17231754daa3f3089f1e835773dd556ac89bd165305c14351bd912dfdc5a5e0b1b4254dabb39bc605a393ba7db9a4fdb15a1b9fae4a33c950e24992fb68bd7d63ad317ff96c4901b3e04ff58206279af32de30521f00cf63f8b8ceb9b1a63d4bae3e545d1391aaaa3fa9dee6f3a857df1d6765ed085cf82e4c2758967d15d5ced569bd13590a105bb708a78d1c3421b966c20e180bc365dbe7b67b11ccaabbd6e3eed631dc20f0add060fba2d171760899b57cba5e03532bd3c7a77913db94f25131a04146f0a60cbdb9d5bdf7b3fd1fbf49729c28c92cbb2ad8ca5fc7a7d025c8d4b85803587b58660705e8c0ac5b899c72528518a0091ec3fab52fb254eb79e683703900901ae8b1b5cc7db28fffed1ccbd1d710094d39b6b8df028f92f858de04062cac11db8ac6c43d8b5befda32300214f098852b439c39fc29c048d4b321157307bfe35075e46c8bcfe00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a09a46aeab066426d632a99b43dff2e232c542e268609529a359e911197c88f6e4f15dfefe42da1a8376e834cbb290c553ce739af54c4b084a9f4e908668e3660a66d24035c310a75a2e912cd09c9a9c2ca9bd07213f8edcd9927dbafce4212617deb5d4599914e09bc3ca03795d3676caa670e25faf6aac02bc575fadab03cb3664b961fed2e48890273352e21f643a847fc0ed4020940c6b9face9c8e5535bcef969abdd6134ae5f835e4da0aa22d876c2712f89aff0ea40d4f0e5b5d1646a4bb9a4a77dbe471d58f1a7e61ea38841e83ffb4892c7b271838bf805d3be7bdcb7be91189382f5dbc663756055f3a27d4a2e3428eb650d40cd9a7a3f0269f15ac13c285b01fe0a5c636506f388951f9e12a9a38a65e61d85672a091d710fca3ff653d3a38e5316fd983030476e32f4f7631be3826813701b144ece9dddb8995f714973812c80a5f050cde10541dc643b37be44f76fb311f5c2b09c196650082ebd5603a1f2d0dbfc93d6bbea0156ee0647b61b0b8bfb1dcdfeeab6fdb69099d01c5f700b343cdf1582ae1c5c31ff1621687add536c48bee329a82af957467765f5888ab4185d0f79d017f8b1727f2ee0271bcafc07ddc37c6953708cdb94d9400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b7203e1af80a66a831ef08a27047743fe668cce511658271982d9c1cc530529e08640dc1bc27bbc51ea0955a9dc26ad350883d4b15eb596c4674adacecc794b1a4a6bbeec4e2c1030782dfedbfb1490f9af92656ecea18a79956e64ef4b68e00c0053a6da57ce8e06634b5ff793f189a6dbc624111627915d6386beb494c134190da97dfa36a8ce8624eb1e638646a214d2e29094873cca762a1f4c3830745137c53ba07865f6ca49e26aea3fa25a6c558867c3e831cdf005f7db01858e2e45c4f40d50a44bb79d8a7aeb0a82225f53e52c24727f6f262854968b921c5e0467be09b00e0075eba8b994a1590c3bc8b80bd63a94a6802e881ccae76d852a1139fdcbd979d02b0f0a0a37664478f2735cd54a794d0fce1e9a43b91b155d791836da0373b42a4898d3395c08611b2488fc84cb4bc9aec3b331e61ee75dcce9a4b0c18fa83241a42ca61d7fab543ddec48152ee7f33600cb98245911905def8b706cf4f49d4d1ded59e498ae80086d5ad9a6bc7e5831570a5aa3836d41cc60bb643b6cbfa7b8853d186202e6afd46e4fe628cdbef5b80142da50a8b1116bbbafdff7bc944835c98e1383de91d1d981cf3bc3199aac48383960f0f91a8b912a99f910000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018ae909b5d3db76350de2384d0f42578be1284e0706854159e53cc7c6f447300564442e576196f7de81ca6fd4a5514fc58025510e0bcfa3f96132fa52a0c78795ef33afeeed3cecbd9102507434d03be297a464936514e222d71c7a006cb3060bd326e2ec3dd37a3ef4e3fff61b830cbfafd9b5a1c6fb3de66ce86a401b9ffb85b9e9fe0d6c9978fca5d0fe350af1612e9b289c81c3b8d001663bb76ad1cb4cf7b0a62c738e57597ca1fd7c6c92b4595e4b0884b0c4d504bad65392e9f50a64a16befb8ef3f23d2acbe8ac8d0edb31d6917930f1b94d80a8f037261b62c0a9ac329e0dd69f72b0f9d8c9d6dc2c6d27f1dbdf8e4a900ca93f1f921fb6c5f44192982fd0325bc31f40ed2f012444c61e039a16ee6e89b3d06cf502c24c74308bbb6cc9b1cd29a7ca571bf33503e2121279b410da6d2f6ed4466e96cb193e5712333027ee1db4a9afcb76a08e574077a895dc44311b57f75c1b18e9b5d414ad298e8cb68901a4c4daf6c36260aa56afe821a69c26cd593a3c5bb0abe2e06b4d12a65fe2cb4ae4bb7d2776bd1388719825e28d81bf7ecaa9ff8262409adfe84870661f84e68631861746f0d9bcf3a6e012a03974b4a3e5e2ca0ded25f5e07351fc20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000059b5f3ff1701b8149ebe7ab0be3bd83d5b4f359a0721d18351c415202aa0cc0021e65b7cad171150e9eaa007c3465dde50c63d9865f03cb354a6ef231a0b7d96f1f00b0351d449aad803f0c408bbc35e25820300d02f56014ec4d74db3d48997d709c6b8352f4c7e722479c41d4eea2d39b34bbc09bde226bbd49345ab697464fe167192438dd48991b5e18f5ef2687b17de272662ce95fd1cda9f2f83e09f2cc444f0bffab3a3dfdb7d57822bffd0463395867826d9ccedcab7366156869dfe50aed91948bfa35f469e4b19d022c86b168e588dd47cb97409b607aacfea82bc55ab5c3de53fc2236db8d01c30367368a350306215e1c1a69eddc2ac10f28f39e01d3e0094edf043c2baa7e6548048a54862af02d4cd599c19b7cbf34cfc4201c04465a7c4d54ec93707eea7c1052f8517d12108ea7179fd127597026032a16deabec898231e90c5ae8afe2ff2abfcb7d775562d590029124c9d9424363bca36987cfc552fd224e04d34c263ab8de17883b54fac91da9e45017550e035586bc333e34b139ce651fa13b2c7d9ff03168cfb020bbe9f452c9e05573d45de6c2ff6c38628cbfafc54979aba1416a8b657efdecc4f05a249af2f2058aee069a8f8500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000773d4bf95467ff233131ee6781fd17f07da3e9b8d411b849e15865a8d3eb98197402e3efe36c7cf465eb9cfaadf2887d993a1ac505b4781d090b68f22a3b15a3b0349882b0bc1581f7fc8e7bbe9e3616d54dbefc140e7571c1f9a55f1d4024afc9d9bf622d27a31400702f199f4567bdac8d6eda54d8346b4accff360f1661099f5255303d1b82a764f23a2b1f232b03357105c88202cd4034bad05d6bed546743019361e46e2f8fea54402668ed9218dd2240bfe44ea69efdc356a311755f6804a89de32d1f2420216d555dc4f61e9e25a941f2941847ea0af4461a2d86d1ac261d4f4d497b5d8feef6a9f2f03862772dc1407993f1ac53974bed3b89bc0a3feaa3a1d5d74039bd2cb642efc823e07e58ee7d6b6c92442aa3d917eb81052c47d14c7b49b59241c478aa99f3de197760d8f48e489f4b3fdfcee272f84d67fdc61fcce6ea16b9be7bff7309e20bbbf08670b780e7af7fb171b338ff02c5ebc2d3229ab9b8ff1e6cd8303f8a194db408d2f709b18fe1dcec003339072eecb8f99f940ea2e4a78733d702788617685dc659cc00939697f818dd90dcc3f92d47f0a096fd78acaf2acf489e4f5d053c1b3152fe18f2a080093861225d954e94036f000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000117d28b971e6957803503429d17b1c7b492fe80eb95e74b1328676caab33740157b4dfefe6d12b3611feda73839889ecf59f7c7150ec8cdfcc9266ab4a6db4ec677bf16a5c1de91ca5ba79f683b4258033d1cc9ffc86c1a3ee9584f00c8e525f82b8cd14b243b4400cc9379ff89fc3749c1a7fa0a8d1ff059532cd191c03a9901f663cb98e5209a07593daaa82fd24b84b134372cd33af78eb24142b5025f48da3310926a0de1b87711da1e982a7d26266f4a75256e9df98c192242ccdb4783ac1783450804d4ba5748114624755f2927e6c8c88807a790819e8342bac4c9a5000467514dd7c6b3f356383750b494dda1cba41eb7fda74fa184231cbb7e23b885704dd84f53c1556caab3ad3d7764c798c8cb2fc7ecdbb14b5bccfa7d36d752547d0cddfe0fab7cd8002a46ffebc3cc026d2f99ef09e262cf7756f04d2a80033b0d8622067454e6e4b9193a4ea3202345d5c89499cbc4c0fae26ce55e6f020813f3104569032b9476a1d6ab6bdaa30cd58cde33cf566e7e0f4fa552b8b93d73b33b2cb0db516cb7102a863a62ae3091281ed53522f72f6f63ddaea052d3ab498185dc3613278de8ae4ff2e23cb16665a268f287fa5d6eaee21767db2615720d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab76895a4c6bccdf573867ab77d15831e7bfdf69feb3bed54ec80933a3fac5684b82925d5bc6c10c48da6fc4efd4eac193fe742d0762607b8e1d70c02055ea3c9205e3ab1e9cb2bac0f01532a74dba88f711ccf62e79965aa7bdacb03da9922357f824a5e8e5faa523af2b4eb936779e2c6e6c02337a2f48b6ab0fba12cb543a5f79dd7a6caf9e39576210fcffd2669c978ca2b9eeb712d4d05c4a5e99e33b2c318ab4fade5b8396a2927ac22a21a46ff9455dd4993c9cebcd54de93dd7c4455eb8691cdd93cfaff05759318deb1616672dd67f59390f95591d728584ad5a66dcb1fd47727bee04244f215f6d28fe7ec6428e22a1647b95494b2b1698a6eb2f9d91fc0dc7bfb984c0f59ad0b031499cfc92e4c7ea04e332e1971e7f261f176833229036b7c75d98982c5e14308f301460c754d6fb67d58b5873424e22aafbe7470a86f079f5ed74069387bba7673e3244304486a009bbf291833e8e5867065e39e621753e62a15fc8819eb86466ad5ae68ac7ee8da60518034e074f006278776f477fe87d01c9c0d4c8ec044ae95ac8db0d8bf7b2f627c0c439c720c55928baa593bde654a886b67b00ecbac0e5c3ee30315965f3d514985e1209f7a884fde10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000940f4a4a5762cae77cd3aceb8148b798006f2ef3a97428656e1fb175145dd5aea8943abc3e49844694c6d6f70a315c49284402b7e68940618071154759374427c50762a6e113bf5f496f985c677a24ecd6f95812fc03bd64c34efa6dcb64c8625e323a3efe34550d18ec0d5ee1043abc4de6d5c8a7159e6a112c81d09535cc945202b8a61cdb9c15c8eff936ac2114d78d0909cde13513a482c37adbb0cb415ae38d7257a9dcc91aa7a01eb572963c9c5c171bc4ec38e3d7fad6d14e37c1d2cc33e19ba4cc6fbeeff4049164e48c8466fac4735d1058d8afe6c9d229d82e56a0643352d120356f10f3f62b0423ba1ef9e3d77ebcd90f6ddcbd80ede5b4880b526c77fa90a2771b0ae0b1915dd28fe22ea0d178999589dce4021201e358d56777376843d77f5a22761936b9c5092371e0d41715a517bc37d40a9005f43072f88c581a411bb367ce5137af57b0cb477639f32a4467e1703da15940f33c132ee0c90ae85cbbd0c7a8fc7fa7d3595fe58ad434bf32d6da85e0b4994959a63a26fe119ecc8495b142651822e0b2b191c2a14187649b65f28594b2af2b92f33e38979929418a8d2c53a8de60c972a7734ea6f4464f5a3910346e483e9abc179e45120e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fc0e43278582ba0f4d1597952560456d206695c528dc5785eee51c6378823623e9bb5b76f15e62008ca83781675dce0d2b72441240c20203f33d347804df63856405e35c044ec5b0cc61c34876b376827218237fa43db0749de58e53b8711f0c13c7ec93d9c5c125ab9de01e990dd3dc96ef6f60e6b7d441931f137bdc2081d24f441dee48c028fb84c2b0ba96898d270a6b67a63c61ef63447ed8fd420d8297c5f888975f50881881852072bc848fc662da48713a366bdb21da15e1e10ab15cbdd0b06ac785dc73a8db2ee4131eb7d3a2c95bb608987d5dfccbc71f9af851fc69505dc71898e0196e09d94b7893214b583e94f208c3db94fedccd57ff35170207cc060bb540709d15e0ab5f6ba3a4fa34547f2be8d1e237f882e634c1fed037afaa5e2a4327fddc1eaee35d97c4f294dba1b6c4183e2e143597b0f44966640b13401e2da17a30fa10090d596e309575a80fe5ce61c8c88e01cde21a64dd6e4f91484813a31d96afae369315936f34de3d64101d267b923444ab7bc63dc869c9f576dc576b06c252cdb8d659819f3a051d6d9424245f8b2a444b4a9578fa32b1231f615b286fb251f2f01e73d81b2f8a58b340c5c6f44214cff6f7296dae95000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002841f70b4aec23d5437c64c57a421808720427e8d41aca03229dbfe587b9b40c024e74e8f96a9ecbaec56f35555549cd51514ee9afbedc256e1d1852f7968a4ae83d7b9011a94e9c0b9c239cb64ae531575674018df9ff9ae7564a60da54de31b57fb944d637b99a2ebeadd697c04abf9ae67044de030bc8e55ba233f82a11fc681b650be7c28b5712c7121be3aedfae5a5fa630127f8e554bbb77eb89b212353498433dabeb50f043ef3710401db5c76f060ab4f21ea4d517f54ab4a22368b109094621c0d6f4efa28b0eb109f3815ddea0c4ad5bdc9210768de2b96eb9e4ad17e704cc5df595904d54ea31bd6cd795531bd71b172cbca1f5e6ed4832967a9407f9dede62c17d423a9276d8075759cb4f7ecb1a636df90d50d756f810c8372f3adeefd6fe1d89f90aeaa2d60c8247f59ad882b0f2e97926d18b5084ba93c4e784e66527e16dfca86f70667cd3c1f19cfdcb1762340ebbb0386f284a676907e863d08db549ac42051b5edc968751a2feca1a611e896fc861172d48767b927bc24fe9a1769d5c9ff27a2d529b3005db7b9891c3d267f713e51b1b411e636db58e39c107431c89d52f154618f377d83f98ed09a411654becff598d89cc0f2e38ac0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000291e0e0694cd84f05cb934c6a6f7fd45241451b5a12bf451235bffdde70482927c44be0eee4e2de35b228884de260b0a5f6cb62b0eef82c43f7feb0b0c7c06757f1d50e404c5c879f50e38b5815946a780792e09bc4727f9ee0ee0fef0a3ea1805a2ea0158c81ee5f0246c38a7165d3a792189373affd35ee0ec1e03103ccedfcd1fb1d90028882922d09e296dfdae018782026629155123538b862503244c50d13b53ac368e7e746aa0ebeac22e5010efee707b508d7afafaa1910e08a552d13d86432c89f47be4cd9fea3b4f69dfcc7c2bf350f40ee92683e9d762ab0a68594a9eded9d99fafb7e72e98438b72a7adc03a741ceae0c757369f42c1e6a4767066a90e8dbe875e283c6a15475f09c485868ac7d7a5bb9285434f4c2aaf6aa4941b7556234ce0d65f1af8d49f19978b4a4fa3da94f1176ca686132d49b20e952629fa1fd6cbd81c57b971621eb1ffb1ff25676913efedac83920e0c48fc8d85e2a2a41415d5de2f17d981db2aa6ab63e90cc9b55346d65ceeee9e60b9333dd75bfa421dfeca0f2525efc68dfcfc43129961d60462ed0716a2e4cb6c6152296a02362722553bc466ea4c8fe4e04e544f9cd9dc2ab27ef299ce32044f50a009f5ed000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023a2e9fc8f9c4b1a97beb47c6ab0a565aa8aa93a122c1e70fb0741494fb186dc9857e9ccd10f306421830951c235756eafd81c4b80454be745353bea52c8c34adc3597b8cbf2791bf14c76ce0a1edd8a9e1910760f0d3e41619c7edb45c5f78caee0e48b097ec674518337435d4e480799717f02ead18f3c3afdb95bcb0f1af394de06b53f0b1cb83aa07de2258925d9e0b1dc5f1903d4318e23fecb3da0fde60390c5eed6525752b3d3b9dbcb41b33ae8a076ad547157cbeefb9bdc101eb827978a8d40c0ff26112baa1344c75962fa38825d54a9aa58100cb8ecef7cc3091eeb517edc027e23b6ad2bcdf328082c3e7decacf4f2645fb421558891fad9d5ab0208c84d3bdcb86054b13d958974013c4bf6e8e60c3eedfdd2fdb21906d35ed7916221d32a0aa4d73a941e02bbbae3cdfbd2830d836234ad3f10eea0fa80fac9bfc7b6a3b29841427435304e37dba0b30cc47430b4531d2bf36a07bb6ec9bd3bba2a257ee41026777ff0b2ca297b5313c4e09789565144285e04652f5df91d54df1e4fd892307d3c7fe14a55f71f1da5f506096f11d06e2764d7631dcd5fde63d0891c687a3645abb8fdde7cf7abd19a7c659c460bcd4745b610d0b28674b692000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023d8b640a79a189b7ac1be2ff4119759d3927a85f4401ab08bd5116247360cc086bb9e03523928c6f29300cfe8c8dbaa98c162992cf8b75413425e20763a66a98ef71c6e2d89ac13fb499326652f55eddc382e72cc623510c17c905faed898a5a1762d96e4d5e4b24272c2bb52ffcde79dcc59474b0aee9bf6dbc783132bbb9e5592dd7a33975cb5455f9095b530c1d65dbc4680a388df4ac9edebb713deefbfda205e9bf31953db0d368e2db3774f44c60c7c0f8864a7895803bf0266b7acc8f7ec5e9d6cb4131a0f2e46d5cc05b241588accae17b9f59a282bf000e9f7217797984522023a971cc752f321dff69875ddf91f1dd05e16735b4c5a3a725e4649250a0d1716b4b41135b3549e431139995fa0de4cc75ce7deb74bbafb08d5f2a8c53fc042774b88a341304459287e3747087c6e8aacb3be0c650640ce33aad669c4267f568abe7a5f6615a980805bf30c990814eeed9f924426be9544278369920a76f39ebc18128df4013b8f7df4a04a43ece218462995caebad84651d653d7b78a207c7a3fc1ddac792b330dd1cf0a3f17e749d66d527c320a15bd46bea511e1cee686ea049c14387bd2a272469840fda0a341a409d4f6126903d605f7b8b5f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a25c127b45e9d654669a361a67c6dabf69e0e864ff3f066420898a75be4be6c3737cb96d2240bf4c9f32a1bb7daa9ca68529f6e164e056d73304cfa1acd98db6ef1705277c6eb9c05a2802a3058aa6be2c46a72967c77df158af7aa71ebb194526a6a267dae4a49402a8bc6c6f2629fb8906fcf2a3ae9f397d85af8b76fa711947028693a1f8b5d18c31254e0703e0cf610df4ec2a9f5ed449e8c70e9b55cd63d20e13eb4ba43f07071d06a7fc1878b1f82ca2f7991cae4ab4af1adcc1a93a0afc77d2e901344cf640f51c8e43088f631ed556401e05d0c7b69d2359416a9b8d366ddbc4c8eddcda06e98604093de3b9addca21254de302456b7cb649a715e5f27b6e88d004dda32ea3017c55f6064e34d2f1a8f055b5ade348d5e2ad392bdda50f150e3b6af38fe4b0b0f1b41873b04726b6e32626e0acb3abc9703ba92d3014b949a8a38e2461fa92423d4259f4426016721dacf23884bd7f9d77e93a9d160db1c86cbe93a7d77597818ee839bc611a73f7b3fcc091731d617ff8d624b2497d35c41236c6235579c78570000353c55aee3af42852f94674b458bfff47f6fb1cee2ce9edb3f369c6d111173aee9d61c357971e7adc8eeb106616071b40cef300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e4cea9015d95eb4fea69ee34adfb07285ad54165a9edd8cd8215f2143139925a8931ea3648facceb868896a4ac9b33d0bc075ba9465e425a5cba07a368f3786eff6fa5eac23bc5df88b6f87114c0151a08d59f73f97789062c2c91a18b55e064b1471346065db3297351b86e8b238e3301b95599cd8d64dc58abaa7cdf5541059260d252b808995a292c783af056200e85ac548efccafd09a8fc6db56d44378d05e8cc751e4007123a9ffd510d2481910b45ce2651e7c560776901de4c6be2b2efa01a1e1a10f6c1348c81ef8002d7ba698f37b421d79c11dfca9201d50f99f1fcb0723c5c133e656d51dc4ed4899fd59080f6fe6061adcbdf318328fdb6f3881e07073a37a991befa6242a0115152dfbbdb0b91392582b13ac1eece5f5227af212d64e2f5c9c32c0e05618df46f5b8c92381e50f2125dbe2219d92e8a281014548ce2ba24181b8654edaa3aac969a8ab03466cb29b5abd50479128f3f48e7fe79e6f02c6e54522c35e1ebadc9830abc0bce9fc3e3d6897ef486393fa2c80c0a704832a38b24697b6564f65ecb9241e924f5f7fa24730706806a1208c2fea87ea64b34058d455b2aa34e80e2db6df55dbefc20d88fdc06fa84c7517826af45800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008208a3d355a74b85a98588d8ca7a63a30b6a8a28f7165c153cd49d0340a6769ffa8d415aea2bd60694df50069d47f8e8d6f01077ed74fca9d25ca29dd24415a7f4bd4cd06ad7b6c0dccfdefacc627b95be243087b59e993597343f54b48193d5f5716ace5dc9c312c7f8c62941141626669339187bdc4b89a9f85c7704a426612efcd0c6f95184191b9f0752be71f9b6542ca7f6b9bd9a7a4454143bfbb5b25f70611d075477851c1cd86cb30678036280f794816a4a93edf762a174dbfd534c25dc1e284f8d82d05d06d6f5002faa79809ba592cec37a983ff47a1b149e8476e7ae0a71298c0955a98089edaffd5aafdb0145e0fcd5a48056b331a85e833274e4f11a93ab67cd44a1a11b77ace41cf4f821602727e6bc459e12858ea6218c128f0493666e4f478586a003cd259f856f4f6dbe0ec54f52769829ba20ec73738b408cc4144fd9be791fb30cfa60f2f90f79abeda02e51907c61beba8d08dd315cf55c9a2ae161e69bcd7013486f2f9c537b8b7a78a680768ac327fb25a55d6c16d7181d3e5dded33423f3bca89840b512444e75f92a3134aa36488154945b880b4d4205b5a4a153c1f8d1d8467bc1772891d3472ae64c11a3361358dd169f460c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001da02f5f8d2fb7866e55b45db93d675801f0fc1a17efe43cc3564e0bbb982513d45c7a4e8494bfcaaf528a87bf0d083ee57e96da07d141dd5c6b52ab6599b88bd056ea1dd2e38c627d0b3369fcb23ad4b8417d683b195c5681e292aba27a474b9d339847952852a19ac651746474e4f224f3e2db76fbaabb3066a7a1e31017db75884b717038c2bca22fee0354eece5012ee39e770ea04b24efd5233ce25662bec6df16d42963b9ab140ae778d84d2eb236b4bab85b2ab670ad2bce77d33f9d4838b029fe144ebd64abdfa4fbe03c1a66b6e80980539e3698480950cc22fa70572ede13a528da869f28699051a307f7d4600f3ed998ba4c472cac2523422732b70ee308994ff85644417334eca4d976aa6da3d372c11309ffdded859bc9561ed5d743361365499b37084aa2c0e6cc4459b8f398abf88c8e1f599d1a75a4f3d331a0f5c071d87ab9799c23a20baf8d4b3416033237a7a500fbec35c450f3bdc9420e07ef475083ef23a600d831eca166051f2c9bb85610c558eb5a1b13c9d5f9682d69937ce976bcff092beb7b4fdc30afb2f9b671ff43153b55e66013e3fc038e2d21a48c991a3fe3e64fe4ae1044d0eda860d9d1cdd42d8ea8f0fdf1f540445000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088e60575f09d6fd09523eeaba77c39de28a4a8c9d3175e16e79fbfd3543df5fa26ed86e1a7587fe1341d6f0b7819c8c9315d31f8999ed7a4dacf7b91335499f9b2f5240c317e53885d82686b4c99d9a8f3059a44a3d6e6b95ad065756a92087b4c5baa77c9c687f216d7a94a3f379cb4f2e30a64b44805e728c5445a8d420463a5f158ca3f3fab757711427911380e8900865d5a3d2daed36ba78dc892248dfabac047b06d31b3c603ddec6cb7dd1f3ed06be593450bac9b63fb83cab3b50a7ddb4ba5c848111130fd0433e612a86935acc9144c80b9a09378047d64e9dea74f6b8ede5356493dfb8ad913f6db137810c6fbcf056e844a6b397d9e15d4b53dbb9cc2080b2147b6103afa4bfd8c2be7af68320f61e72d8d36b89c0cc7964f472f63a048098f1b6488658ff0663b2a1786699c75d88df706f23b989d7df6cdb3ee356516e3c3ca33257ee60fc7f71d20b58fbd48888a756cb85f957660e8fef04a3df30b52abb54358816f5d1ae8546e0dc1d007c699b58e73346cf00314a34fd7839a9c47438367f6134787cd5bd8956bee1ef79b89498d47e2f2c40e85a8f140c2a6c9813614805e79a63a38dbbe6e39924a74ac991abcc794bbfc83a1c89ec7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007da08a4399ed5c20626471e5bf1919013c1ddeb03b9021ecedcdfbcc2292e0f6b3e384d20b39c5051095c904aed752bcc42e35458e0f2a376ed97ff2fcf540beb21be4044677467b1a5a67f789c6bcadb5d29f8dfcae1181b750275da3ad2793b1e43cc4d4c1b935380402bc472a8b5a529e654785d383dcf36bc746ac6d92b46202a339ed33bd106cbbf2d3232b03596c6b8c8f07017bd4d60cb9544bd2d40bb0d1c34f0aceedcde1adb016fbc06e9e20e02cef60ca5b47030a8547cd5648d891ab9dfe320a16b77be2c62e000bdc2eeea8de383036e78cc452807c55e011c439aa011461d254c0fcecb55e4e2d378cf08f2000a3a1e35ce18036141f532e8ceb82eafcbe3eb583bbf746c3d78eaf205ced3426759b9673998f8f8fc2a6d11907207d9adbaf9bdbd2a1b6b7f6cc89a81bd5994bb41cf0436f6dc900cf713949c8ea8cf38c98d88ae9af1c3bb08d02c4d74a27c3499aab30a9cfb8cd030a17e807b149c05c991d756d779957e23d448eb180334be0253ace46d0becbe8c13f8b549e4abf5a2ee8df8752d941cdbc7a70e20c380273c831a4ff8af4e60ff3ea882938e402ebb826bb887b4c66ffe0fdebc91edfdb06396c74f13b124080ebeac00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e70026eac34d00fe023278ae348e03514f6af1e8cad8ba5cddff99fc1ea9d51b2a4158e2156bf1c3d1753478905ed39d6a27b340cced1a46d14cb4b78618c2cab4d866a2e4b881797781d3f8f338bb602c1a662b7182c01516fcbefd5877c85c39308e9eeb91265f33ce173e5a6b84eb9f22315297bdc6f674f8364d5d12f2a9a0db8d79e66f375a03eec24b28daf1d2b14299a3285aee1d1ed196463abc02579a1d31138e9cb10a0ef8a83589b07d75df034ec3933ef0ba9a0160628e3a1cb0d5777331c4e6cf877dc862d37ee53b0e9406b0b25adb2bb98ccea3644c2a5445e9da522619df0e7bd403f93a49918aed17f1dea4bc9763cbbc83bf97850a8f7866ac06ee121ad2b5204df7d584ab87cd71fd7baa030f5dbb05bcb154ba9d66f0ac35ded3e45be721937a6d29ffba829ae6da8f6d23f9e0bea5d2f41d873a7e9c47f7251b8fdc537d5c83bb63080f6361e0b1ebe8b47ea2f42a5e50def374208275238f383e4d59bed70cf78040e544e0db0d2f0cef6504cee614103d5afec16a033d8c5ad547d526004e63af1244b19b5d2cdf51161088ddad3354db77638fcf790d1d46c244c5e3af126823461108d0389fd29b27ed60552f0b3f778c116b2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015a5044ff37826c38724d45caaf248ab27b0267474fc52f71c4c02366b856817b90ae1678e31220fd623ac9e7c5cb5195a9d511ad9808c7bf46f4556118dcdf3b0b5bfee09a5b5329aef791660765ecd8e34484bff5ac772c77a93bcf8419748872103219bc20f14fc8ad683fcefeb6fa4d601625bf3c7219264a6b6c4071e55fdf05dd779e0d629b97da31dffa5cbce6652239d6d5d9da7dc6dd3de4196bc15736476dcdc8908659f316ea6745f87240cfc3d58caa179ae49308b8e8714a1dc1cde73bee8be34bf023fc1fb71b603a776d083d74df5bc5418fdc86465a421c16d0c6f2b2c78621c6b0612174ac0457bc22d83f9d44623fa29b5f8e8af8f87c32e15add302dc6ad2cd46ca1e106b352a88817d75c15b59ef1d031b374071032876f01d0b8af4240cdb568b420c27850bca07fdf69756cb7963c9a9d91d44b00d2a07fca7799d06258d28306409815402175eedc120cd5487d3ede55498f20465de6229990d6dc98448068d6545a1d3c3fe1e371da3c7bad8cb6d5a4bd9cb9884067140079853bd50d30c098faa111d370490fa4c5c6ff1b72eea1f5b30946c4fbc3292ee6e49f3e9117061f20bd963459668d34040549a7833e85abbcb0f014900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2e29eca109f03820c3659e740be0a8816ec67ba3ff68f3fa7db38b884a3f3d681e605330ab7cefce1a175e345ab490c69772b7742b9df0c1f031cf1f0e5231b26842b85f44392a7734b93e4da874e240579092c6015002e94156d4625369e1cd53c385a5422a25386ae90c7a96bac8cfa405b411dab8a497cfa94bc1859167cca1ddc98c0f88764d3d5203c1c8c27b5da0e9cf38e72c8ea7493b189f031f1924bce8248cc61214d6cccbca2ac66634524c3e441f4466c953c4c7e6388692c01421e8d80f32c2fa660c66f8b68e562663d30708372b42864b4e669e1890fbeac10046cae2793c1b853e325f2d96ee9996c04d31ca9b555a5e0f35362c1d1fb05744ec88a23bc2f16aa5a92feb4ff38d9f01d8a72ae2967c249b58bae6062e7f8866f2dbf3d8777281e30b33bbcce9f5741ae121ada502c1e31d034b87ca23f089aa77c010ada56749f65ab26f8adda63d940a758309e99e8bd83c1c44a65b4f21f48901d16436329d689c161837a31293ba07c64130d82132c0f9e009de26f4a8749fa7f0974dd13bd51275ff75e736b0bf29c6be45f3c6b10c100f093c5503aed5febbcb0202c7763451ad8ef02239e2e641761c4b9c91ba88e23702c49e0200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009aa3b49c436aba2500694a8758ef53bbe57e492095a338ce56e982e1c6ccd2de778ae34cff2afffa1bb8665b7063d9090390e0b077563f50f2be4fd207fc03fa3fa53f332f6dd5526dcd5e5d5b7ab54c67190355f8d97c9b9433ddb6ca8683a8571ff7c6dd73d0462074f90f183661982cb3bef6288a2550c78584fe56a7f47d74dfb6a03f1d71516e6caeb652a68f83f22aa0030d339d65edc38fa299d8dd6c20e7e3a3a34d13bf4903fe4fe0ac9df1ac343cc16883f0994268d0c70d6e672925364790e51a0293fed411989a8c46a08f3d443ed9109d70b177e0045d0010dfbaafc886bb8af844668391af5dab88e0c920b0b33779b40be014e2bd3c660d2645e6278d263b49394396984a93515f1357f48f2f5c2fcf82d9839c06d28fb52921ac958f08a298909940120681e4daef04e154e27292c96ad4160b6a92cfc2d9d6a7c0ec0b5d3afe8c564ccc18d7393a622aa5637c977800be45242dc5a7d387787f6f3bf29bc6d3b6270a0f5231f86e072bab50d9ce17031b7fa475f84fa529df94243293e91f881a612b142b5d9dced269329787affca210c19cd81096e451e6ad6e3701e4126798c4b2ce9a7a256cf2317a149b3e29bc61cfe77ecddc509900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000248b1f9ef9cf46b8d1edfc4ebc0970098d2450362f6740e539df40f4982868a8d6d9538437838c28dd4846464bc6641e99ad714734c274500dcd1396a256046da1c3f7e51a2a48e7c8d132141b789f38994272aadd4982057ef756cfb3aceedf5867f11698a009e741815f9cdcf3127ce162d2049c62968da39145b5174185cc26a672e6b17379899ca49117fa0f7ed30f0d3a8239ea866182f9abd051c3f5e3ee86072f31dd5d1359756e39bea8f19b5dca39dc9351f0d2b79088b3f37a8a30beceef9005ce2cf63ceaaac41c94c9213531085b827ad7a13cd6a757eb57aceab64b454c656f7b217934d4846cc7d722505ada3697183d320666a15a7331ac6759e8b2f5a6d5bf0bc259d6aa02b4ba7e826c304eac266993a26aa6eecf620bd4ba49a1230ab5ee08ff49a1a8495f9aa46c232992ae1c149f9f1dc85c9150d2668b8a7a66c5b013b4c61c84e98db3b4b88ea0324039bfb163b54416c008fe7fd51ed54f5836196440aba8519bacd7d839467c01d14163585e7fc6c17be8953972728d0eb93c5192f7e339b92d3b8727be5a3f082d84873fe888ff8d0c9454376439ad7718fa92c4142967147075fb220aa93cb971d6e9e5ee70e8f1b0c1be30f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa49d07ee5e016bd2e0c63651680e00928aeff8047b062f17a7eafd09957a759ea6109500db9ea1ee60c63dd399d969e6e52bb110315689fe902c36e55a84b497886532b8f7eecc62a9e2adbb1dbd0a5d630e241aa76dbc6637109d563f82690a75f2d6d1788451cfe2afb19e48e0ad84c76f8461802d0aab08041f8b1a9984cd6dfdfaa65841cdf8027fd1201d37c4f2fea483fa76c1d0577db38ce352f6eddbd9a026a2dd46d4d8ed49ee4e8c4901754343e901b5f82371093e554af2369cc42f9d4d732562f9276d9329870ce69184b46aeb80391374917d5760902fcbf67742615d0578e984b64d959f9f0d124f65386f48b4affba9c88543d64722551b83d90ebcf3d44cdc1e7196400c1927f46b0a8baf51a60c82e33e22ece2e19f1fa45957e664c7816e4c488cc30da908645880c829e0aae88c8a8151fff4f6bd9542b4a0dc3736f476a885c9db6b2fd7c99b1225b45aafb3b8a1246116601f2e5e48196acf92c621476b65022a04448c6541cc6d3cace46db0cfd8e1df9718bd06ad9043021cacf3cbfc32659b1e00203c41d874f678743d001d5f73ace24eddf8dcfe53730da14e29448fd7cbaf7ea3656bd029f88948b62b6a3d9c77ddc0df8c60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad35f485df709f059f5815efe607483d04ac3e87920f7e76374902a914361c1bd6a98499d932875803ff7b002c270292e3aa5298a898903ca6118c0a0370c9862afafc0053d3895509a4a654ace585f8810bd56abe61b9ae9dbb31e4e3328ac2d3ee17afa3f19268ca74dddf00c48d765ad6153f9b4405fcee8abc3618f768450e0d571d9a7178bd1f48d84f00e6edb170a19c253bef6b431abf13547ec91deeb1b4b3ddd575c3f591b408470b6705dab07fa5534c5629ac59d1622b21ea0e56d3de2b1962fb2a8c24d9c31566063aae6bd0d4f0448735710f041aae77d091e585e591aa5a06b96bf8590b04a77bbea6b7daedc5927752b6d8cfa8e2b23d0aa0e93356f63a1f9fbea87b16aa084ab81b395ad06ebe74b12a35f905497f41d23a1287868e70caede0fe89b9376db57fe6f33ab32573b2d894039cec227820d21639f71f5d1954352116735530fced0bb70641ce12ae518b9220f33da67aa114d3bd2c54e1868b578d0bbf1e552374205dfe42cfe5bfe311dac60383153da16fb45ad908c4e00de8127f65c7ab06a114709ff75c0ebf2358369fb4c25ec446957b7d81e956d7fe03400eb62ddec87d56246cef4d4ba277d6cb04b223f0b294578e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af63e899a30fa3cacb86231b9336feb8093320097656af30f864f7a73fdf12d089190a4935455e867a7eba3fd4fb6f9fc32a4683445b0ccc27586028dcfa8057a3333778ec27392d559f40d0c167f7bc71739cb8190898d59b5d7116a88c9f2183948e93729fca5f6a65b600594aa134537073ec699a17bee20275ed526ddfe5bd95476bfbd6e82baeeaa3bf9e0c11b7d7976dd340aef765b235f731e8ef665fc75945ea21e05081347ddeff4c731708f920e7edeca695a09aa5f77b2edbb67ac2d4d7864cde9ba2453e4c6a5f29a950c44e606c91faa1b8c9ba337dcfc0e914a913a9dc9c837303c5c2da175688d745b36eed79a5d77bc901b4c3b83e7f73133f67d7f0fbc42d98db199cb8cdd65404fbadbf5145fca1e873e0c164753ed09af51a191c7a6e6a2fbde6af0190d99ea401ff227d59e026bb01d02d73cb5a74484c393c14bd4cd7cceee3b59e5835ea75e50279f799663fcd247684d4dfc6364cbc8593c176d6990845362c784ee9426781da50070876ce787da2f13607e98c3782cd26bf0b7e1c11a744c5d19b0e72163115d43651ccf4a20bd3350e3d76011b7f2e543d0a591237759009df90e67e43d7166aadf8e76f54afaca27408e04d1e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afce28950ec0a958f34edcfdcea9f57c5be889e038c99aa207d919b289e22fb7318cb8a41c1a78bfe6aa217a1ed2c779e31c90795c88bc94542c96786993ed31f861a353501e218c4367e846c1f2c4b1faa0ad9af2fcd3bbb79e7015f0b3034b39f88a6207165dbd5549f3cf0a944d8d8fb1bc9eeda2400ad839fb5d4f6ba3daf692b4356398ceb8552765d744e544f4b0375bb2ef03417ec40edf2943c117df5c5be2475404bb36e8ec6e57192c70c325223f8ea9ebb0c5d0cdd6be25c3c79cdff91aad920476bebc6739b3afc9c8d553968eecef6c7ed80884009c7ef17a63bfb0d87a7d7691400831327ef769ca3797c9fa8eec4a3e03db6fb1ef5b014df414363ae7356fe090e06c531e6921ec737ae21598b990a0ab9fe63dde7fa144f55edeed50677d2e1b1cf78c19baeb1dd55c4e045af625279d1ea5b191046c6faece6023901fda5267283102eec83e670bf1c339680acf264710b946448d5e16b5f0c42d4ad772250497ebe8e4d6ea1b8ce1d3b3d6e3cfbcb66f568b0a1fc6fb825e1432f256801bd8531004984a11f8b68908251bfb3878f86546a17743801a03b07644379f3357313b202ce2912d0d7b9bbf084fce89fd657b0368b3f3f22b5300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d7772e7f5aeba38afde43d21158cfd6d3e7433cefa19428c433c86c472e7b91196b554a0d153b3d78de892440ceb6109252e847b15df1581738b8bff589da50fc804cff6bf95b824efd9f0cb218ae4cff337e0fe558bb52296c2465adc95061db696aaac0997c58b872882f8869155bf32fb35a26a60b1575cb75f449686518a7f87161f5238fefe527d01ca0f7fd87519dc15fedea1e3874dc8951963e9294ffcc22ccd8cfa9326229f4a2502d988199c4335314778d44e3d7e5441dd84f80454bf7d5aa212aacac1877f9398c707f3fb2c4de3ca9d1b919448beb78eab0a57c001a6448c6200e5bf503f90caf622345ba24f9d50d21014c7223c6d710f3f19e7ebac46923efe072198caadfeeef8a0280bc9933cc13bd01002dfc197fe10a4173e33a340528e6983093f390c7e53bf77ebd98c840706717d50a2c84e98b4069ae19fab8b48c4935d31e9d62fabdae64ef4003d8f0060ff0a01259e93f2796149ef76138a23cc363f11f78cb1eeb7c744041b4328a89759e9fa3c80c3b32ff855a26ee6f2eb4efea86288ace25b67315e1f6450bf0882a5480d1c679b8450d71e57ae5f5ca5ebdf0a78ffce080799e94f771761e0c117bdb08a5b691ee7ba500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008424f1d5dbae0b085cc52017005c81ae780facaca4cc4b904a3711cf1e308cc34a84b71c2d26d0d536fd3a00d7780e85739def5d1ad2511e0887b4f2658eb87ef1e5dd3800bb560a8e64002bcd209ed426663b4846e6726bdb33e9311f0df9b43c56d074e99036f5868115caf039109304545ea3a56ad786628fa8f9bbffbd21bb9f581fcfc65d17792dd37879204eb8dab5ca4cb9f3f5b7dfd7e41bcc9291d3f45d606f2ecc8b7eb52b1fc7a4fb351963934ce057d7bb67586afc9cf5ec8b0254e217a4d7ec9ad1b066b7d67d3f298832e04251fdc1796476e9090007a94c712376afa0eb012020aeafa496356b8c60ad11b6d795ead3d77a6af30da35fd0d90d5a10758a1e8c166c1da9396335bcb1f441c4989d02c7bbfd63c1558c431e022b00a3a23fa636d21813abc76b14850a888a4d6eb4c407e4f79f68db7611c55bd222736c3e5cd0af3504de5bddb3aa34d7aac630398d7d025a3c6b03dd49aac54e6ff48fb9cbec6facd9168756c766fa97c5c502748ab7424f047865309b90d012913d059d946c3654d7d1285834440e9c952b5bcd443dc63c4219ec4bda61e78c8198b055923db8340ba0c6b6fa0cacc9195baf4f67726d69468d4e98dd819200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001649a226b594402c60695014ed9555b5e27e50981c514a67af49e1ff758562495e3f51ea19443209becf13f3e844db546456e0811374c707b8e04da573e674a52b4eb41ecdd4a04ed0cfa4340e18bc42f6e9038216534dd9a886b71ce8b3477ef20fdbfd6aaca77acb5f213f204311bec0087f1f9c6d75004dbc05c037b95c048e6116270b40da481fb72efa599f6b129cfdc67c58a63ca9c945c72afb1750a36212a00d81202dff4c5ebc98005b8224a9dc208426829d91e87a72f3b73afa0f5af78adb266be697fc06e2a625e64e02511d74e9d62543b298b6817b181de165cf0145b9b1d23207e55b3c6b7060e9c6dcaa99c8a9f3490c5ae0f34ac6bb3c129f4a9aaf79103f8a5747976f7eecdc12e314e3e9b34a077bf1480225afb494f278b812036fae4e6ef92566bf9a776c23bb2bd43c1679c6275a725410248d60bde270202aedbea744d4b9d4555071ebc93833938d144b65897344e7c5a714533fc662297909d99f2e1f340aac2a8870662439b91c32bca470ba73bb25c0edf659641b366ac177e0baf40aaca12b61eeb2787bf8c66ce36884ecf41149125004c9445cfb4afcaba6379f8a93e065c98cbaa53090632de7e7121350d04debea522200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001da28d93240119739777b6c8c931b09cd48bf7da0e2ca0a511dc90312d7195ff2146a68423c48b45032fbd143d1d5a929e51d97b11d5aa8fa1254dfb69087080a30472b4573aab914f7e6a1fc85041d997fdf0fc05a33b28624ec48a655d5d1ff7638c654a02403b5e873ff7704c53c1d65ee826eb3350ec8ac1160b06c239f295d5f84e574388f2fda5a72d64109f2088777ad9dbf5c8268ff0871bd88a0da693bd589463a010ce8ed204848aaa9b479ab973a359e9b94870bc0c5e682d2fd692aa112ce57536e461422becc5544b34328a734a806035917b72cd3d4aa9d22d1dd50b7c4770ec7d21881bc4081e4bcac1f0b44da8969d512ce7c2eec863588598c0d3d9c680dd7eab8fa3fb61c7bcf3acbea508ec3829dcc1a85da19bd07854e3574df4aabe1fe48073a5e6b8b2dc27478d31bb417c30824ff16594bfad7ff90dd3054aa81af3af710189c5cfd2b0703e0adb9d727526b40b4dcc67b4a60f46c9e3601e3df810fd2e8a24864a61faac925897d525cbe170c0e92e8e62d585026fd7a9a59db54b61ad057559919d300d5cfe360e6b8a3dca1ed59890506a769f72b4bfa6b4a1d91b6cec8d549fd9c837818d5828d1ca8282ba4a7e1035b90cb00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036245a1af7952b3795e33d2883fb2402857227df89bc7c846fa0e9c18d7effc42da0a2d06078793e5e12321dcd6b9eb89dea5d730bfe12942dc9357199cc5e5579488866e25085b2333ecb1dfa317104a9f5c5819b913a059bc3e0af935ae9652331f0184c1c3c17d084a517789c62a89b095e4c53b3461586a8b5e3aca49a95f9877de7e5899993480db5b12f74efeac8a2a07d80716212e7eba90a54f15039ff7008bcac5f999ea00e2f8ba00640c32ffecd2b5400fd2e1a3f0367e9ebab03ce9d3cbf279f6c140516e80ecdc3ea0204436dded5aa1d5844425d64d1aaf0a6d910f76d0a9553fca73488deb49857ed02c690f89afafedea92da212d444ff26b44409781aa21a7856b617f81bbc81d47b905549788f1f9f82619ed5f05635007c3a1c96d5b5c328209e9096f35547593450ef40b84c0960b295494f0b2d6bcd57773dd94b4de2a4c9689c80576dbe153a3875435b12d604799982febe2e51c8439afbcef975d2bec89e9079b5be39f864f04ddf1c3e26461921bdff4ba45e5a6c8c7e4ec3182de998da02bd6d50adf276f539fa3f8a9deed9f625e9e0016ddd41639d67d2b568f11609b74e30d348e3fd23cedb9511eb42cf4ce8417ec563f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019fc1e8d827fa1e4d1c57b4b696a141aae9e59d05dca6e0af387155d7a7253fa8c3b1f908b8cbe6e4fc8ddcae8aeb46a6776e74b573dd6a6da92758e7e52cfaabdca82056dac44b64f642e97fb315c3ec70247912680f8c2866a33c5b1a3bc4ed72e8b4daaa74502e184e2bbee6b8d616ce1d1938930e79c9b765dfc72e0d31fab6e15c1cacb4bbb39790495e1187ecfb08da05d092873230dc383d6e73c3ea1a86aadcd3785778787f96c479e8eed7b6d47e7ecc75b1e833068d9c9ca85bf7ddefe41db9b72025d07aa17c53b109c39da5c47e571f46ac8cecf6a51395cc3ad9f0b3b6bc669e6dea904c9d7f291b5e00483b3f376a5633626f13250366653e752a7b2112050f9e2bcb9478198bc03e006ec42708f7f3b5991b437f62ae0efed4dc7a0d5aa1f41244aa2ba47e3126a15f2c8c68188131fc2a5f7b07530648466b9c8470f385f234994a00285bd533f601f350ac2a85b105c497d6186029c804554e210a503304a8766c68ce3c36b264241b7e2356c6859150ea27e7a076d22d37e4b4e817ad0075bd5d72439b8e13ea4534146b21b2c0a4d4db2a1a9b80e59eefdcfe8307a8fac0a58662e02ead5f93cc47721a60fc51d68b2db363e6a7cba490000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5cdce2d403188ef8a5929b7864e578e47a0ee8cb3004bd169c7ddef388e136b2db6927d7265055b6c78de7c0d9807f9f68042be7298fd80aa90d0f0204daad54eba72f56e28dea8bc207f5a6725518f2e18245ca3111f5646e839dae48fb9003f01930a18874d42077332925f7339d6eb1d807c99385d7dd185c05a6949e546f0199bcbb7aed5b7a1c91220dbcf3893723fa057c3ecf30765c7a724256276d9b9d21958b007563d6b55a324e30922fd6ac1c6e5f16c7539538734c515bca7eb9297af32cd0a443a7848c9485aca78fee28a7ca4c1f220e7afb4ed93220ceec23f173784c5a75e43405c61c06e10a3ec4779c8cecfde4edd0e06a544cfffd1fb764009d5375d3dae54630314ae3c2e4e9fc326aa5185e185ce4285bc8cb51be61ed6de8b5a7fb9b69eeb3ecf29fc38afcb538a0a1b5ecfa869b884e07ef1b0ade3acb93a9bc0da9f0711261f897b2877eeb8e2fab92b64ddb6f60d5de4c2391cda3617058c6c5b3035c9444f4acbbac83ac9ff2d0461724f3a9c8ce6ce88def9e742da5a5dd0cedee5bf2ab3e590f4e977a7f5b61d5e2067420688dbabe12da130d02f49b31590d4ddcfb8dc4444f40b17424102d09c7e88be72d44b160f7d030000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000181b2ac4d83e03a809555a4b75fb165cc60a9f23520fdb7aa390a1b03f7e73cd368ad9e39f0834dd44a83bb2429a3c44beb7a2fc76eb19fe9726b6ca06a27aa697fec77954061cc35001429284746c05b1f5f2aa82495ccb1ad249b7a86b4c6928f1f496d51d7273b37e3805e8ad24b5a331d802e08ed68c3f063120ca6dba0cbe06853f8064090934ca21681bc388e9017c1e69a662ed03767198281b8ececa9854fa99a1156113aea842867befdfaa4b209c378f9ff9a2bb4805fce33299dc21c20450b19b406d63c33df793855a5fa4f34e111418c6496d1a1207f78181a39d93106c11af8d9a7c6a69b973188974b916db647ca4479eda69784123f6f08b030c46910d9c2b0605602403ac4e761556f9f975619cfd6916f6308c76eeebc293ea3515ad414b9fd88af377084832933e7c8c863507cc296c5a7f6872c0310fe886bc8c06055795faa98c0dff05e9d48727459bf582392ce9d1f146fa6105a33d45997627c0025561b63840cfec20542ce27c87f6077510d586fa4e6e1ef7345bbb53d1d113498f391f8dc46ad242236533bbc2d6af80ac92e207237a9e312be519af0dd1708b6efbdf2279f290c9f40e7c403a276eda68649b283cde1c0b0b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ba5df89bb0fe77e834dcb801c4af02c15360853d2f89344b584080d61309adceb2605498a65c72000c31691f44a2aa92147813e29b84dad25e49f3fed54928be9ea09acf7ceda008c52c123b39b4997d13a02f6e68cb6d2bd0425d91cae944739168dc5dbb7817f97599152305ce5535660ce115677337de05bdcb01c80bd12ed851aceaedbe40e33687ea53e8c8d4ce1cf90cccdec1b5bc0de120c53bd1b5e25767cfe70356d7a678d2dc07deed4d5fe6f0b2640059a00038ecc5b6f2b30388546e4d520e9e1a2cbb95fc914e3b951d373ed5fd378719e7b98b233ee347478dc38f8c8fe9c55867b78fefa87cd7ce29975aaebb1daeaed2b5fc586e61ed0f49a3f6eab60d7b750e14d228873192eb7dbb47780d1424c9086f6a6d6e3dc588b93c3a661033153e60a56d998626c03406666f336ef7085464472971abe2526ea69c2018f4370da95e657ccf3326c0aa982feb61a40d7fc90a5287f6485ae749065a38f4afd18410007d0c9705ae638b094584bc68e08a2d73b95031d067e534df96206405d7177bd35a1c74a1c246762c3fa501da868e74d19ade50a5ff4c5f3817270b62662c008c998e1dc59ea0327d66c0f4be38cec652415a296e21f797900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e767a5f8ba5dc1c61fe22c4901c3d50679d3ad6a69fdf150ff679fbde46184806e267243ff8ac3649aa0604a6360d1ef57e1894095286cc188d6bd5a4a3f4e7087833b08a6e20c1fda813637d310504853ce7c8c8ebdc361e6d5ea9823ac70cd6eedd6117d0ce70528047a53c85020a17d947a629c26f866be3df810693f2b38ce0c7201eb5865125d080ce6668a072140ee41ae04e4fb4d6339bb2700e7901f38ec3a5a4d76a16b53754be7b26c56374fe49c5fa939e8286ff2ac3211d23a16a526a9ff69b17c2d967c0d4b4ad33844c0effd19325733d5db62496924bb68732cb484f8c596a5ad21c9ecc04eaa6a8d46d2ecb926b50ac1fb01b2c975b498fac986498c6fea55c7214351895c97cf8adf6b0de69dd832fe8f86a9d20dfbe57e869555f3efc6e357d7d525344b01c8c75673c5e56ac8e0bcc95215aee534e21660b08655fab563a6b5d7c8c0a914fe809d32c36db9d8490cf524c9eaa5c288f643a18419a43b94f41d61ef862c7be022868eab5695f469cd8820d0de4194cf0fab60545db310623d9b2df02e84ed7643e932130b49f10313f2e0d9223315ab6260966683e0692be436589f1ff75d2130130b56dcfb0adb0d46c9080d23ae8f700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1fc3f47094f0a7403aea186fb553e2c9317da17b59525f7bfc2c8ab620276a38a5621895960ec9d4ac725f4678483c90c378316de9ded295a1dbed24f126b3f79cda29fc16814f3cff995fec3ae6b836d87787c72a63f4925c91a748ee955a0888b051fc3e6453828568dd8808ebf9c6a0cef62dd2dbe011b9690ad69e4b59508904da63a6c63422e7410efdec988fed62f61e371e2da61fb852524f3e0727602de98f8e25dabfd5829100f64e770053d9302819d8e1a879e8833d176dfea3d4feb9441ca5abfadb1b045b850aea04bcd0286dc5ef4827886ee1ebffd528751913696f239869c517e90d4ebc3c02cfc9c94dc71584b2dd35da0be97b5e9a0802c30b4d6a86a63fce60c93218f3f7f0bbe5e1e425d31f700e9f64a7e76d012c07d03f3834e3e6e978bc28003075cbe1f9ae86293c2a79ac5abfb78c3033881642052c8639e58b9804b24d3b93c49f7a901553d8658b23e890a9859f9a4ed3e8661b389ab431b9b2a56c647b938493d3206cb6ad1417959c31ac41b6142675bf3f384be64e3866c704d28e577f742e42838e70088e988bc4d8da4f3e5bba5443f1bdddecc90bf07fb7d1640d1462f525bdde8973c1a7eb6ebe5685624a29148500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040e95f4e8a0c594e0a6abd5ec5f7c3c69d22edbdb53e77959aa1351fe15ce9cb6725bd56a439a1d7daea870c6f2c6ab610801809b5cb5d239e3275c4bc8b1e5267ea0d31f5323b9699a897aae4845da4361a4b16544698e3646f3834f66c5d99810d4430740f96f17f09d84e48a5481978a1f48167bcc05ab1f4bbab0ab8f3c2de518910527dd7a3f8e88bc6ceb5d3667a55d3bda98bfb81d03238bbbc84d61f4128a5d6f9ceee8d9d46f4c25b0b22fc0c12b782403ce0bcfbff11e73f9ca816984f9305ebb3f3b3b0491c2e72342839eddad18a1e8487aceb29d18f3cd0ff02640b86c06f5d9931774f6774c8626c5bd63f47d9a268abf680aa9c119398bb06dd414848e2dde7feefeaabdf3582731451e9b82011bffaa91da8cd698adce9961d15df269606566295b919aa92e1bd0cb6283a0c9faf7a76db78dcd38bf16de7e52ffc078e3f006d4aa288148483733e832b22200ebd13ea73c80dd6a694c00ecdd2560145aa2c487cb2e401ba270db11bc6184f09aabfafe1d26fda12997a9b9643e325b993b5aab0d1920c17db5f1c305812c49babc24946ad9ed3efe2d17a6db7f7c229112c40b67910cb28e1402b4648cb1c7435dafcaa33415ad1934d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087b33e0407d27130db2530df5aad1cf4de6df4e153f6d33325e5b436406735269f2459581f2e2a11c3e80fb192f3020e0b0a5e9e57543eaef13b0cc98d66f9767037ab11bcd5447364f4f0177e9babc2a81e4414edcc6bb37dfd34590db2c3a0207b9e29afb6528d4ef1fe55bc2d4685985b7190b77080da3254c389f0365008cfa796d4e7a6fb8e1ddf41fb9be034700bdc1cc0a7a5314ef37a342bfea71869fd9c6caddf59783241daafe463eb2d5ddfa57d666a5a57780da23b9a273962e23263878aad868acee038e7aeb28303f628ad845700ed9f8c61ee659519624c4247080eaccdbfb01cdcf5975d37ef8f9898da336c07cfbbf84236be27ffce081a652b1918847236b0af1070c985725b970f65c7b538e3ac882c38c1515c20a61e9f238e1b7c7b6a581499407df7aaa6b4417b8c1b97ebdf3d470c4be4bcf8476008f00f3562484707b80563806b9d7c547dab3f9f4c5230e61860329dfdb2144a609f892bdb5c773596c9190702b7b7a8812858986b45ff66223ea0a9cbc892007da48a10d3635cdcc7e9347b27eb7cd4163cf45296fcbd9f29cc50d7f92701ebac30bf848774c2a351ce87a373b1a812f375a05d6df30308ee84643452009699000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012f358e1c3b03e58017bf7af92ee49e18a37d7c2d9a83398281ecada15d4c3c7d66e7fab9a0ab53acb8c4701e177b0157106389c0471f47d107e3947f71808c1dec7d1e4b7507c98dfcb268b70074fb9fd2fabfa13a7285e10ba33eed81609f4ae4620c8480fe9d6ea223935d47a2de870f1e23b7c666a4ff412c3aacd3ee65c39058500c5f1f1605f264ab89599b24a50821f41fa4a58b1c6f0586dd708b4a8ad2aa3268b1655623d3b242e64bcace8d81bf60545b1ea6c90f2ae4b2f265e32d51e516e83fa0f664beba626539f55d1080c7ccbf9d0b76826410f0213b7aa7ae28d03cf2cdb4474dc097bf5fa5dc149e45bfa6483378ff01575b1e716e1f8cd112f7b1ada142e268ccea0a9cd90e5554d7c141bc8a02d2bd505658b504abedd841a70e44e52edc9bfa3310e4237bf7b50023a378476600b425cc9af5a3765ab90a33cf9362eefeee190def4df373b5e60108f266664e0f8fb7f67afdc01db5267c15ac6cb2d1aa1bcebc9061e24a1e1eb84e171c0e640b4fb8352575ebf05844d8bca43a6f3f0921e489251b9470b8b881a68ca7e7d519fc5b662f77948cc4f7cca10bc5d624818d635545c8fba08b5dc56ce33a520571bd610abb9bb529bf300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009835f13e79c641aef9f38dabf0300d0f3904ce3bea8c8c3f8ad34fb366563ec69e90cc9c11a0f3205464756a0daa0e441a20e0585078e4e3dcbfbd44e7fd88cb8507e868bcf8f4e84788b3f7e37feda543a8aa5da6e64bc93c8459ef2ddf3fa65fa46f790f4cff8e840cf3b955033be149adb7cf2ba4d4c87c6632dc6214265d1b0ed48e928c8ca468921cf066497446514fd6cb1d89891c0bcaece874f19cb139df33af42c6d340a4c5d98ae479999b39b49f2a0a3e9f267d5fe570171d108768c0e7fe7677f58162de8520bc2950284e9f20c0d0f72bfde5e00070b01955e4defcdefa22b8f21531c3ea591379c0d669964540c64351bcee6404692429f792de4377a98a5b68a06a665a7a2dcdecd50cc18fe27d6e4522690196e459dbe0bb64b6018651925ed0de710d169bddd186cd5132a31c88078bb17ad0e823b53ed4739f7ac4978eef1ffd2cf2524962517bde76890953a60dedb009216a75c85773da8bf287d47f19d67c0d198c86be83c70609823169872d00f244c49eaa73970950ac31a0036be18211eafd6001b89d258795fd7bd2b36836df342029c2d327e34ad8d4822038f8c7e9f5b41c4b44ca5cea2e65596e24d810a6ea29d513f503e600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008bb2a0da4aa0bc42740c89c7152649e0b7e50a18cf87605aaa71bcc19608284c338440d4ec7664d3368ee4bdaf0c1ac2a3bdf1ad177edd0c3d1a6fd80b3a17c8e35c5216edd2aef1e8600247a05293a89c52481cfecc48c2cc92f5007caf6895e0e641c5817fc44404f895830a3b0298fe6b8e68a7a8be60859419c230d589872820410e787cb1fba4ba5e3c7d381a5691e1e816ec59cc46fed42a040690943a30236f26f642bb55163639556c6ab117c9c6542e7b0bca5ebe0ab65c710c55745fb13cf2db9f3a589bcc409f47d0ee78d54dc7327e54bcd9b7488bdc983f50dcaca4ba82e31a9de2a25b0a56b878308332741746c86d128423ab9d98c12b5d12338a1fda9adb9054d2569616bece45471189944f0af833da77f7231442fb432a347162d7be61ad9470162eeddae456c7e039b1e73dee3c5ce739ebe74d6c928b37d0810b5140219abcbdf9257e328238961ecf4d91cc754655a3dbe7e2d6ea8352f3b4a3db7e8059d93f9735ca72fde4656a5b3ae81a326a86bcb7fdad37a1be726c938010f40b6d5df0da93477d4760181db2710bad0efcb7206371fd02d390fc70fcf0a3b3d4b996fe43a5322e2838ad270d2d1600e79caa4d22d18b04225a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1d79927fe4b0136e4f6ee69090ca7904f226d17f24def16e796b7782e26ca3b0bacc2a72fe559cbe157a439e2c37f0bc971e1f151382d1ddb4e14483e8873df0ddb321d1e89ac28c29fd1a6ff0911fa0ef951bd632bcf7ad2cc29c9b3bcc430c0235425a3252139fe03ff2316486efe948540c1f21f85bfbc890948025cbcc82ec30b01aa048e79adf91d22f990cd7951149422b21fcfdd97ce631228f9b8802631336c760831e5c8ad8fd2d254d138c8a3f7350535c0dd85fa01967086669ae86bd1f9e29d223d8097d48b86d0e0c8a54600586a144dd167b9f519505213bb6ba022a6d9043a1e57dd3b029bd0c8661199782286ce3735f14a1f4a87539dc4eb5852340486e7e9a687c0f0bcac1f2ddf44620f6e633049acd873466f2e445166e41f43bffbd21de89fcc2f5dc90f14c8b7c66da8272ddbeb97073a9261a68f06cdccd50c1b4334490dd126df4ca8629c2d504164676a17289a462b69607b39bf9e39efa6b3a0f0044c9d9f03cf21fc622c0b7a13e4c2a4f2c50cae99c4580f2480e5a6ae7ad840df6cdfb5cc1a5012514f19cfe8d27b24d8e3bddda1a88cf39c661ea310c78bac7cd0af96a5f4115cb74fc6ff8bbf1b4ec83b7bb41511a13200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cfe3c0ea59e50a17b5a0f205a127c32699399e5de3835f5a5014cce4c513e9092816933bfd04716f6591d816f9eae539d9cd6e74e4040cdd694616307411174c210fdcdcaa414a7b889f498c1145dbe1989214976760ceb5c39cc20fa79e5c8e5a910779c81cf5d7ef05c840007b8dd0a3432054290d931c7b5e60d9c6aaf6eccf4ae13d9dad4198c3f1eb9aa105b77dfb57dea6113a61cd8b5c8f0e24163bd5c61f97e9acfbed463788302b153bbc0a7e535b51803cbe76b4572e8ca15cca45aa805d5b9a551c2752f51394776efc85555acc2f004817a8b1c97dba0839f468d385dffbf802d9ea7528f78d159ae88f2b02a4caa1d3ee162a9d93da2a2e4ab42d01b7a662cedd933d3c9aded05c6dc01bb836ec5870bd2a0ab5396321b2945107e75ad69876eca2dd2980972833a07d022c68bc1d5918300de16e85f4e3976816c2aeb97424d32e59c6fde4e2bd67912a166cfdfbc5bd6cf4ded1f09373dd94a2879f4deeb922ef8d35028788686d6c946343a4e4c1390ad22b8d12bb4e9dfc55b1d7727168a7c85876661706434250efc9824e5e03db3981abdd18ce74a7aac8e9cdcb6aeb552ebba295610225388f4e7e85b89644ed3e409dd493a3d547e00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484022247d7572923b4781108e3aecff6e01d66290e1003621077327707e4e84e57f20c2be8a384fe0f0eddd1b1ea7c46e16bc39fd1001b1d4ab75ea4c37c0abdbfb234bdcd69767707c306aebd4eac73cf9af15079f9893df2f4da24326bd78580a1d45e23501fbda7ab3f3bbbf1ac9c19fdb2e74a69db5ae4c1a25f90c3225f9641d49f9d394f77a1e4bd8f21f4e4cc1aa3eb4d85cfb17e71a0fce3d84eb29779103145105ba6eeb5e74da813572a0c8bcb1861551af2da2626d8c73eae26177c40f1e5443ed8d34eea3180f41cd8f7352bc0fbb4559a8e1cee9f3bb837aaaf9f409d45e0ef825d377d72483d891b139cf10046e9e9663e35ebb9004aedf19817317ee9f7c7746645ec521f5e64211230fa458b7497cfebe33b8f1c83ee169daf929842ccf6d2cbd649d7b580414a36929837acf267e93b6ebc1eeb68c661b4b1f0a85cb29ed85ef29c87d65bc244e6c49144656d52724a22061ef24fc38a9a7a50548282d351e3d81f427544cf535e36b8e522f37d4fd288c80822f58abfb9b572c8916c170e120067e4f9dc703524a185e6bee6a003e955d90959c253607fb3518fb62ef1be2dec3a3bebd3f7b188503251ef754aacdd93e51d7a19eff656a2a2f8b8412ce437b64ef05b276b5139913f303a200a053d2b4906ce79f69eed17d2f8e1e24bd8ee235162c29e2ba818fe84009285730742fd668411bad4f8bf5bc262e86c4d49f191d4e38651cdf60e064a97b88a3c93802fa971112d3a5d3eb3c03285dc7d79a2d89bd193ed34285e52b8a7c4a901f2871b441cc7f04b02cb6a42712364b100b674fe9d73741411b6533b61cfb0b2aa62bb0ec25abd42d5470291b6ffb42bf3b070954ce40bfed642d02db38ea35705feee9cf8bb06cddc1c3781bcfb9e7d1e091e47d10640513a898a229b49e0faa18ad6adb3adc212f0082e2007e1b3001d79559e44a49f36d47eca9d5933b496fe60e0d55d6f22d499672da25c841f5811590849913fa69bc4822a33e1f2072eed858d971dc526a9aff275916f3356f6b970c1f47684123b075d7c445676dc6701e9b689c14949c3a80bfdc0068f03274596eae230ee37923e2b8aa552564960ec50d999f358914bf6b674825b1f30006c36af188c4523f185f56c08de70d6e8de22f440c7c108b08ea573f02e4d59a7f78cef1cb091a4c0f68948d61a41370723e8d6186b9859d1044f65207bebd1668b3ee9b689f739fb45d7acfedb97d684d2614175be904a52ac42bd71297cb0b648faf403d92a7f3fbcd02cf3dae0e00779b5eaaea9b3429552fd3a31f37912122334c05f714f55dcc640de141fec9b1458314f9f50de1c49b52aa2808ea8085bc8865a9d0a80fc0c57a4b7458657a058809285008bdcc5e389d647a11f124f887da08bd1f1b389157d0f8ce281d570c6d1f4afce955b814f8bd52eb2ba8dd2fcb9bbefb4ba55965c4c720a56bff94bbeae1941c49bf91b4d07fffc00cfa45ed348442bdad77247bd7c22633500cfdcc075fef62d413b632a6fa95e028a7b54d4e73d81f47b2b4b4a9993b106c31e1ee8119cd1b647956eb52dc59cb0b3416d4509875d9f01d642849f1b7a0fd83db5357fde84ffedf106435d5424d18cadda11c7ad545550bc7b1c222a528ac178db364bf6383563dfa407d7d369909ef5680d99412153093d13e5f72e6089d33748ab90acdb8b5e12d4646f97912019b41bc0d5becae84eba9273bd8ce0d036121885f999ffb8bfbe5280be747d70bebcc6a3b127aef486f065401b2eab35a29eacfc1f97f6948e114ebefe4a6e12c6c1127096102f929213911d814c59eb8d94f6fafcd9a161c807bb4f0b610e41e649007d89dc38aa39281ea6b7ee5e0a76e92a162166494a0a638e0e9edfe8e0482ee6d71560e7f6e0433ae6f8ca2878e81e676e21101014e84efc285aae8422953aa46f020bcc5d547608775548115bcd9360fd75ab771c45dd1c10a2f0919097a9e84f9a675ae562bb2089ea34092da992cf028ce9ea9170ab172513577931f8505c39097138574117975271ac89419d21e8c1211b7337d4f239d4458607f2bca86c72ac8a57cc585a06d74a04edc245a956a080757189fae9dfb06cf1e7422fd4033626c3cdef15019e18290587da97221669b0ce564af1fe21332d065c21ad62b9be8fa8913748c2d9dfdddabc09508333271f50c9c2546118f0d4c13021c48afe5d96ccec67ba636f14503ecf2073d62146dba66e44cbc3d80277367272cbf1974c76f9205ba7e57b6f03e9663272e2ceeedbcd4d9dedd0c5d392c18a230110300964c338610ab0c5d23f24a34a45fa8bb2aa41c8cd44affbf74483f8d0a1773baefd4cd91b8ee58a23b5977970210e2bf0d68b71966087d19f1f7240f2908c5c7aa298fee861d01972d4117b0c0e779517b4e862d37bbc9860cb878bd1edca09ed858232da5d6e126eea62ecc3b69cd962b60b087f9224a3b24aa748d042aa961a370b71b21ad409774293e1a233f39764096b43cffd49382cd8eb0d32f796cdc1e5815fa2944bd61033744b648bc19ba6d73de03d38fb98f8ae567700e7701db02cfb24210d99cc1115d1d9a475d53109b54114701ae9cfdefd82e1f0291a772a6f363a196518cd13df67152476b6c99b7aea003c2f4c1778f661a3f26b241c265d5707907931665a3041076c011e415e49672f2905b318585d26d402b1103bd9db82949b9b194e9967fc984b2fe09462ba65911ce3c374f0e73b8142f0142bcc148df15ff883d5550ad530f7e0c1ccdf9e454e0d36cd0db7637a328147eae67fe9809a5d979c7e1f9aa3b4edfbe88128f29911acfc591f5d3f22e5122c71e9368f3b91cb901cddc1a2d49ac762c245b0b455cc592973c44cedc21ee4026a496d9fd2602018c75ab1ed819299fcaec110d13998560a434f90836d3d59109ee83f8929d1c18362cd07aef6805bedb49871e432ff7b6beb0cc8461e08e8921df848ffbf59e81d98b74e5540141b938d63f5c07c6f864a1cd8bc6c7a968af2747a349697df3e004acec79e0d78a845064a8870462d7bf965a1336d45190a10c98331fa5d040d6fdda07f8e0212ac1625c451cdbc48b60eabee73549122fac0837059a1e973007f8aac49dcae690ddc8ac486575c0f1bdd8851467388c3b991e937a237c0c0374659b373c1826832acff071cfc8c4587ddf0ecc8c83c03b120afc941725c2188b994531a80e498e313a75005a81750c10821b7950457e857513d4c2053a6d2a888288d6ea8e267474dbc23df4a44dfcc7d7759a0d87cf500606a7fb3141f8bbcc206b4f99e9e1313024f85d01f6a82f045e2130c2dbac45c11f80a3dac3ffe0c23762ea23fd5d96502973e82110066122e4e09fd0f2ebe0b80eafa74aa6a2978780d4c9ac0445d0af1f3689356d8239ed220673f24ca5f94614ef9429c2c8578cfe8a7095b168c6b598d133bdc22a3743f8bbaa43c4ed5aae140ad7123316496d371919956590155c4cda30741fe71768950d06189882b36a2fd99e37682fd3dc9650821a917e2e04f39df3b32facba83da11fdcebb21f6c628005e507b7ddd4b221b2632f8c7ba67cf629805e12d2d41678770e80314f1a030447e1dfeb30573b33844eafa22f27288dcbeb456dbc88f1489ba9c5a22befa05ed7439b3f05d77b363074da08601ca37bd78d6b8867bc2b623b1dab8b031cd2ca7423b3eee0864ed0f7a985fd17e0cdd3ce913cc05d8c91409242852ac7f5d064812dd0299b3a5779f6c4df0d1927997f79e4e8f936ce7371fe223dbd99dff20b568e26bd5802f33b96ccc4c4a4533e2853736c3b3073fb423394779ad549a2970a85e742c9f572cb298e56700496f8fd7f2e85a311f3bd5afd2fdd3284a111b78d479065970c3b8f8ccdfe75308a2eb27af091ddaf9192bc9de0addd5a40507abc1544b5af8795606ac5142e67cbcb321401d877580eec2d9142f91b53aaa1c2126543d6ba5bddb59949231f83189157c61cd82467c9659eae8dab870b35c0cae4a198e22a6bf7bb97450cb33e8fbbaeede2a85723ecfc6b34f9ca3bd9f3f1d55b645f343cc9bb962e9e78427b1851f8fcc31437ade3bb3987ef3b04fbbdd1d629f583db0fa1563356a7eafdebeb94c30ad6d4c54bba8288830a640e30bcd02d0c1e77916573c30191725702dee39b129c94276793e9848ae155558cb2a491394a71080728a4b25e40ae4fbf65e9fa8cf2a9bc637e5f6bdf265a3efec8b5506b35eb7b8fd4d65c08110ddc4d62b2286a4f113db5f5973e5242e6411fdc6de29ce90cec4eb6b46da95d6163dd6f97856eec17855ff6f07eeb934530425c4ab09db06c5dd3e5d7076374c25e3964c1cf6cd8e5830d4912b4bd20fc26ea83250265a2a0da6cfd5453bb78b24ff947a11f8a4112ebf98c377f8dd1eac5a79f18b2d5081c8ed773f4fca7eb86b74bf4a422e8daf0b45191bc9ee2162aa4d9ba9930058e982760308aff753c46e468e9a3dec5ce7e7e9704492635293f86d8b7c1116b12f9a2617020ae3bebddeed1666ff759cca8bcbf15273360edb0bb535fcfb0ae77fe61ffe74f9cff26ed1480c4e57e0052d1dfba9bf7e4ec679dbe242b95821cacfd2de05893a237391b17108cbce6921df136e67c23f3533888b9823a9f5104d2281260fb06f427802ea5655180d55a9045ea512ca5be226b6d5f0f3c7d820b88343848233a4e2f32baaf069708a4c22b1f1fc597c3d54284a8df03201d527a14612c855e10e68753d888de976dfcf21afc3925c3940b3feaf36d2ea4cdf151da776289523651b7067bdc5518133aa1ebf3e8d63b94b3c68bb85dad6ffe91a3145c1045a7676c189cab767bb502558a8585d077bf3a6781e07756342329509c07b858378ab878f99a194e901f24df9b7672c0d9829dfec0ca8385db2a0362a12a254f2a32e6061a97e77de2b3a7ad54e0d11a3b2f007b0bc06b0047e4c910f1faa6e8745142066fe4187d542e1f97cdc674d9da03ccbaf8787c4289b33c5242f90772573ccceaf5009c79a870f2c250bc29cad82bcb57a56bc10d4abdb1d22b70a30e4bbd0f6c924ec8cd25366a9ad3526188710ce95ec133f74aa43387d200169f65da1da9469914faeb6f6e67e5aa3d57a990d87e4b5323de1c54882260ef7e0f4e2b69206c08100f7828086a2da4d18a7c6dbc07bde8254750954670a277a76f445ae2a29bc0354ffcfb546e324287d41f585f9933335cb2c25224c631bc1bff39b23094b86fb640527282829141b16ba1f32278ebd9f44f9cd6decfb2b07e1b3cbc7800bff8f4b7e469d500a9a603ca36130ef4395090e01ff4ca3bc07ad4f7c8fcdf58d8ed0b0dc65e2ee0155ebb09cea691a8e838824122dd829502f5d7efea41fb248e21b1fcb76a4993506d72f5de187bddb14deb48d7c451964160df5646f468f410a3b6686e2446d63757f27591176d9f5ddf71430b4dc3241237d8bf96ec0d329cb91ec813272d3771c07988e7c243d6d9265017e0b095bff03447d2eea1375f73e24337e7d9921a69351e6966343fb181567540a1967997e069db60e1fc765cd53416708fc318969387e3323407131dc64d435c80328cfc914cc5c62547b9636761f19b78242e64a70588809e94d9a99c69705ba80ceb4611cad97363681f35be817c69d895ac81dff65fd7ce2168a067b5e36c0a2ac05b413dd87218933a010840183c3692d3832121ce9804c53ac803b227c6c688381f115d66e7926d17fff12de83089cca281faca0f9cffe7dbcbcd5c5c5edea0cd39c003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000012118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000120d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000120a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000120b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000001229a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000012141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000001225e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000001212978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000122daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000012189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000121159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000001205ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000001205c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000001214d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000001203db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000122ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000121213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000121ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000001214fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000122b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000012305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000012280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000012223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000001217a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000001208858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000122618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000120f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000120e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000012172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000120b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000001205bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000012137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000122e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000122297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000122608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000001218373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000120422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000012204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000120afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000121998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000001228d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000121da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000001221d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000120ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000120e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000012107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000122f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000001209726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000001224f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000001203c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000121fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000012205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000001225110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000012283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000001221cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000012094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000120c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000121f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000122421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000121fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000121bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000012304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000acb4d42b81ae315188d86793b6db270017e3ee5557bbb6f0e7db8e59eb0ee7ae646c5c5daf9d0bae70b4e7bdb59f7550943031a16d897878816c50aaaf59119b7cde28807947a19fd780b7a77b9fb6bde382fd01d4fea35e7ff51708749b0f9f51776bef1ae5155246ec02bc6a7e91372831187c26f6e95d8b8372fed7869c8c5a587b87c72e627543ce72c9f7576f47c9bcc35876e00a18204708a327da7ac5d18032ac9d4109b750ce8b811a1e241cb715232ad73ce24abfc789931781c01debffe579b52b4ddd70b4f0b625d9ae97f30b22047cb98415aa7d4b4a43248c21cccfba47bcd180ab622986f6b2d4442210310bcea011bc4497806ab4046d18c3efd57dc6560f78e11a79a9fa1e433d2f8cba047d7aae592102a76c9ae72216055b78282cf79db1bf9dc2ebdbc5d9db4476857fe565854c04078b155fe02e61f2fca99cf6747b48e9b3fc277ee730618ac1813a125768ab8867a308f12803c0185a27c1dfd1e5ae76f3f18815219a529ba97988adc1fc30a7ecf8374f0aaae76935001b5ea3689eebfde7c2fb8e977a3d54e6191b4c1e1b5729dcbaa75fcac28ac15791d57f6400d0d017e908d78868051812530aacbb9c664f021258bd73ae1f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002054b2fd1cff118fb60f8c445fc6d84e17b2859daba18a1e93fd53b0b0ad8da5e38ce6e5675569385bb5561d9ba3a3de2d5261a68cb2581c9a2912afef58e313658f0fed7de2e1e3df8054527ac26e9095ddccd03a1134bdb34dbfd7261530166e5f689ec4706f206239c4bed159493857c997def9c7a7b6e9ef0319dac291445c3ac2ed1b0c76212b238034662ad01f28d2cbe798f0d16d009a602d74f5cfff0cfc4be37607e0fc9c267babc3d78347de8ea0f57e492379c69c0c6a67fb272b116b5319cb4b7f10f6783d35734b1f2da888f2c2a8bddbb9412abe315ae8b4b058eef810ba18fef69c93de11f747231d98f79a8592540f85027c6e58b5e9cfd83d740171cb80aa7fa1387fc5289d7f2cb05f7e3a431f38022333c2fcc31c8599f027184d38c250ea3a5901fbaff978151721faef9131a550aadd54b8289d3a67d0150ca92d74d36af9c44768a9aabc5a8fd6a51f9629c9f957eafb82e1b7032e68f772f7efa58692d60e4da5b396a8db144af436e91c1f6c94ca67cd0723ccd2f54fc653f216aaa285c87067f0d7330da95827115e23173b83c45b3258b61d5692f2b2c4de04a289e0e19cd0404af4242c8eccc318e1ac004c36bbd0ffc729e8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f3459035d7bde3ffc2a577b9ce1cec7c46c1899d079cd16ef770a224bd56c47aa800574d50ca56555fb091bb0984318db9f35e7b83aad951dc23729882376030d760a827ee82911ac68ca71072bcb8fe499f3ce7f96e9f2f3ad9a0c008df891e9c4fafb9e20b893f61a4fdfda2bae14b7ea4b57ac1bbd65ef945c0bdea7e168803194d4ca5ed9f630f660c62113095373453b5579f085b26adc48cdb950f1eeb99b08b9fad34a8733211ee1b15b3be57d16b8f0a6df3f22d14856dd57d2c114b271c9e75f94154854459af8ee1a934bb3d1fb90d6b318f8f0052f68d49ab632f1728c25d1e4b075734309f34c50752040a2ddda160003ef2da707f531367c7bfc4d78b9832ba9e6a74774bba3b03fba8168eed2c14dce8a402ebf310712bf0a36c27e0e5f8273e1036f29750088e5e8039a67db1ac405155ba314a4efa6ce47ad61aa0965508faf5dd0cadcdba91b14fc149ace735c7566b212a4ace8e3e6d2c288cdaeb44e59e266bca099d741f52bf1016a7223130501df9ea551ccec1234db074a7e38466d8bcec8caf14bbfb95e490f6d4aee067b58982d9a21bbded897c39979a1a32f56a2f8c3071656202ed8c5d86af9fa810d07e319c9d42489ddc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000144f243d34b6775c88fb127837b8e5ed3585a7df20bbcede8e4ccae5e2f6acebb72bf5ed9774df204b1964d636b3bf1aaac64d839e4f4dec75a3cf230ce4a2713e1311531e399e8cf58aea0b203bddee145644d7714c27a3388c3d19daed0ea8c2c788ce79dcf51441675d959a3de7e3e79d3f596543f810488e7319742930827bce4801a1af359be26cd356b6bb75ddba40953c4cc2c99214641394e5558632c7df3c066804b4109dde6d8ba1f390108fc6c1a402620b8d84d0b8c0cee41e97761a3765f8cb046bd5eee0eada28fcc8f00c4cb92a359037a4cd905b32b810f7938f79c177e7359412e460da32528d078cf85d090cc67a3a18cb845c812dbe8137c5b41104f2fc3cfd61358f983113ebad6e126c5d95a277b50da4fcf359082e65c63d4785a22100701a4be80098874721a9df48e8d035a9d9820afcb6134b0d7c7237bb409fc4d2f27caf30a7eb468705eaea935ea22509a64d69a4687b193d276b12fc27322ca38b13d79bf486c57e1125368bf33ea1b1ec9211c4ca7cedcfb3358b12fa1ab4e9446634ecc5e191eb4cc2f6a159d9194a80961b6fc896a246c67b52ca58d622df41b45387a4e21ed9f1d78dedea968be37705309686a4444000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081504523707d90cd8d15214894ff3a93fe6b0237c39d22e9c8b9e2fb794e8400e25031e1f57a7f3c2d1bfa4c005ca5ec81f3fdcf7f6743bdc154712339d2781fe60eb0e7d9d8b66b7b05bf584cd6f036d09cec416b9060257301c27c2871737e9ccc0065e64c29cc95788ffd70e2fdfe82d4e5a8e64894e56b3a6b7e9d74a41760d2ce2726b4a733dc6d7c115e17ee08aba2a60f05c0a0fd20c524de2bd066dab5c3b2e2a57a35048787a4f349b23a307dda2e47140a6d4976766ebfd37b4b5be124a1466910e25eae4b775d60f316a79d3a0b17bfdbfbae4709b6ccfdab9f1a14b1a3bcb51da2f7fc466c3a31079ff416983ebd5b6f18cb8f4d6ea950cf0dd9c86afa18d65834858375ad7fa39cec841176f40a01a07e418c0905d30f3f2efa64ae074ad986a145f56cbc3e21d1e12d08731e808d5a4dc2227c5dc078aecec974ec3923cd34f6c53380ac485b1f92729bf836602186ecd22d67894b6f1346cc08e90af10afa214f74014894e57ceb4d07ce3f4306a5f8c957cbfb436019b5adf45511f7a20ad20ab82bf2c8c458c096f280190eab06d6063981c95b1d2358741a19c259e3d6f649492a1ff57d61f2b43b34c15110923d8af6dc67b1cfd2c66c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000976b4b0d10b800c85b091fd053d2b634641d82ac5341f46b1c6d2984def18761d8b170e1709b1e8a0bda297f04ec10d4ed528ea757152efbb9794dbb69d9e649ca464a2d34f19c3d1dfe1feea81220466bf09becadfaa82a8906ef8050eb654805f29b872ccb581c8fac4e17bbc2d5b98041d1882ee212025b46c7da677775a45ee331fdce670ca7787ce4036bfdb2c30a0daf6e89f2a6f4c1614d54664422e96c09835b970bbd58e7a1e06ca6eebdb3cba6fd446f17d5c959cdd24a004e0e89de41d53ca87ca5059207dfeb28827d002430cfac5f5bc7dd4e78017e2fae6fd238f231098743cc25d80f14c85a4b37f9ebd9842eaa4e62c978233a2ed111a1fb5ad3e53d57f94e4402286eeee4ad07fcde15d3ea2c68ed10d8c21f1aa50ad11acefd8ba111cff4909fe4d1c5c2be5c1e7437ae0913a124a0f4b6eaabe84869181c6bc09d7946aaa11d32999489d9d3ba923f14eec369747ade06b7d9dde92ab52497cb15c51d332f82ea0e2d9f737d8c26b7b636ac0620f934977f8dcb99d5399626d44d882d62bfbcb44c2fa80ab2f75178e704ca06ded66729f9eb78614027c7f2aa8bb64084115182c2749a4f89bcc26465d2170a3cef44ed930a640c07130000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092575883f351bffe2647ecd36c54b4bc1ee44525207e95b2dfae7d5d599219373af645cf6029d21d3065dee35b2c00272d2e4323ca18250a2dfc71ec2f336f5d63fd773c902f75e072791efe2e26706366222de7d63371041b811f051752770a4b872f53849a42747a9effa2759496315e90770655c5dcd71641dfea13a50067ff3d7157cc85f1707c654a587748b05f1aa39102baa0ebb9b006605ec44924b45972c4615e7cb1529d06949b8ef7834d05789003d04f3ecb5e462cac36bc35881a3ce3b1b8758245f43d608b7d0a65d9b2984913df64a126a60a4864e366627e7f97cdbec0fcfeddf321f5524a6497a3e42e4b51fc935c97a27d4dec3952890e0cb9789aaeff31290f457cb376bb0b8bd46e8c8d5fb79332616af75e14d2316db6459e09254a5b6aa13f2500c26b4a9633466956abff0d1c4e0ad34e044325ea138941f8126f804dcfb26d89b11c1bfe5f1dfaa3e9d09ea159714e6b3663da371e24916f79ce01f37700c3e4ed3a82a292ad671d1683c3d4d581be4bfe6a679cdadfee39e125deb8ab9fcc0c6f0b3737097c9dd46f9fbb7196c554019505f6e5da989bf0375119c9b5e1564c23795e0e2e1b11a823fcc095f0a3af8a7b122ed0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a48723fd7f90495c6d1d7e4f57f43a7be2af55ee3490a61771ed075d67c1ae5a4d449ec9448ff87546a10f3647cdc6b4d2a33c8a1a3571fa0d0657a97facc61d92726cd4c257a3d5f9e2a26d1cd9c77501f68e72f368eed68ac8e82c2e5756452b11d1d6c0078304bbb2acae924aba44083194f60451bc49c8ae93db529c6ee0e6c8a55153d866e5ef86cd74ba022cb3c4d7de5a3d207240381048a28d2caa8b8fd51922349d9c7dfbe19871a0ca8f8d3515a0c293a63dc5a6923cc5e0759390a07a42e23bad29fa2044cf0959ac19d1c20c83b036e971dd12d8005744ea61d4f16e79a3ac8344b981b1a4b9b33496b5df8c918c1de93fa0dbdf4c8739852a8b2c6ac8f40e8692916fbaa4aa915e2aea6daf88f1a58349ff1a47f24a5b20c9ca738bbb0c7e86926e093b52e68e8f418e388e77f8ad30419c877c4850e9d88a88659f9fefde82453fe4abbac3326fd9c8a62fbda95d495bdf8cfbd8e437ff01dcf178eb49b18262d15cccd0fdac8608c0df51d045fb6c1dd8c8c0585447c5a91bb890cac93d8c42d6cbacc7ea0a88e7c40d8676831ec8d29d0b6936f8732c1701a50427b5b6e6ef9da0e7438a685dfaf50d1bdeb4dba556e3fd06c67e50552a270000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a925356138d5e7dc77e70681f3e13133c04dcd7451580b530c43d3ca76c3721e0210cc0679b76d6febca57f0cca8b67036b3c01c89e598c82e5ddb98db4f44109659cdca22a8c697937373814c076d8fac05ae7905b41d733a36cf92f236f6faef858815cfe730bd1c0b999fd911b69dc680f793b402c452453787e8e114640016615240eb72aa9f88d533abdd47d612e977c2e9da05423a8e7125b1f7cbc8eecf15296d247b720ca95760f42b8b625b916305ecdb6529f3aad5110a94ec1d156db93bc5eb4d8a9dee8da437eab77e9b2ee566632cc57d8857bc70ce66043c1df31bfe5495d813355af56754620aef000a9d18e63786eef5d7ef58b61e8f1a3c95ea6072c5299e930db331cb90f16647f757a97b9d42e37be1c86c198b3b2b790fe2b28354bd4b5d70a8b57469b0be726353deff63f0247c6fdb50e56909967f78cb6d0af679f15df9cfa58777b5d2dfbf8660e1b75cb06ed0c3183ffc26c624fd3c078774eb6f9d423f9128c0c27335715ffcfdaad56105252b7b5e1386cf5f722133fe72169e14e5111cdec1d9eb978ad44a316d5f28d59ec4366e53e879cc81548c15c0390428255b37ac2862c223165d8f1c1c3877bfb1c8b0e530af40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9f9aee40ee76dd0c3ebe99747d54f19f3a0d0874766c7dd4f7ad156e10be3cca618b3723acf1aaec4cea6b433c9d06b9134f78ddfbb94edc75eb3e83be3fd522e499369751bcbe4ddb038624b279ef1678feb1a6d70150c0e3a34305585f95162f2bfa4a7e3504e747a3a50f08ca84874c14a5edffe28f54fedf3c585691f472265158fb95cb2a962d71aaf2e81abe21e5ba41b7d41a6a09f181d328f2ff118fd7b2146d6e76201b095322b31b119752cc57f6ce815868de6be41485287dab0d2834dacccd026f17473fcefdbb92c604b445039122ac60075ce480692e16be8494e3280d449c63c4482eab52154a43e67aa447aa2fd20e39d09fbacf471f845fa2ec13ae8ccddd60f76dd612e0018afedd1b3db9a436e2a54448e503e1dbac639600975cbf411ab1681860fe3e41c7a39c8ae77419befae46280a28598d8d22632639b9d135f20341fd7f44d1a3662854be6b0b0b048593ab9eff1c5ba2d3a7f3560213c55e22c43cc8ae5b3659f10ea1308962d70fc01f886145f0e9ca282dd594fd47e374da8f0bb528af876cce3ddd644c843a62ee29b6d26bd462baef91d95a21589b51f46d7e2e9f067b2182cf973eea63d0a330e7ec1126e6607591340000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac34037cb272d092c3b204e8ea79e3849bb132229c5eae975ac37b81e28f649e4ea762b18a170fbd4c616feeb1bbb8f95081ad6f0514e217497a974c261d37e1974279de20212867d60af147d9d84412a2f2581d9c7f2c1d8bdbffd8373c01851f4231d007a8d7b19e8ad405674ce5b427d143399e35d0dd089127c7bb435d3d32303ec16a14db22b5e229d50e69a5e4a2f1db6721dbb9a0f03357c4559886e800a1da9f234421d60a97c7ad4eca056efee640fccc1948b1f907db6231cb0850da90f36cb048e435409624b87ba9e44181b9aaf2cbfdb280d8d6a8a9ca79ed11b8500707ceb4ac5c465d143a7fa3de8ef57702ca1ed42a366d7600419b6550eedd045e8459f2c885c831a4c99ba53e6a155b4b998e2d95240a37c05557e330b7a8470a963e28f14a32565a2f77fd38232fa2acf4e0f65a1ddbf2e325aefcee1b81e99f12f9f85449b008fb72858cbd2b0bd904c2f3c73a7bcf0fd32165b69aaee88377b5f421a1e51df4e438ecf0333f7045a44aef34c703ed253ffba64ee821712d1a8d28b90e810dea8fb68100d4ec05fa830d7ddf97116bf3a4d98a3015b6c8064c2f8205a8bd69a60fe3a57adfee1c558706eed418b0300c4c9d827d29b000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dd9dd39b86fe9bc1824b7c1048ef2ce21035b8e1cb211739f256f20cd7b5f9f286789c3f19dfcad0877b3ed995cc1946669e54b2f3990ef6676ff486d16ce37b1f6fba0f1f26b6f857062ddb845d5d40faec4c257f8c1c0dcd4c64e6e64870de4eddd18718eb9b0ecd25daa520bbaed38e9bbb90645010f5ef7edb3564fe058a5b3b9d0cbff2eb8aa1565fe48184de9250e6e87a183cbf4b59475bdc9ab5af6a7c2741fa82b51d301b9d37c352af6fd94b1a60899978d08a9412f6b721018135a60489bbc0105e63735a6a8bc008757d57af41ff1468760ceb48222a606fb461342400aa337611f4ef54d7b6f8eed7148e81d0becf3f1f3a0ef23adbc62fdd6af002af63b4662d1482df3a0c72c6768fa1a8b1f3c38e5957c5d89202951969a65907386d80cafdea6f08e2a24ed13bdf220feb5ff0d41d3e953011475cd1a75171ddb7a6743f1f89449049779dfaafae289a43f187167aac6f2593f7725e4c2a30e905a3c44153984fd3c180aa64557292f63193c26b16210b796d6d3f7c071e57d99dd47624064a7aa6e96ffa6fb52feb9e0f2bb4984b0933b7e8effa21a51b839097dd8cc1b59f31e72c79466f16bd088b4cd5f187cff8221d06f814520220000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2c9245522d14227c9aeb12fab2f248fea7f1b01b5f275e0e1df6e5d80b93b4365b027c560012077fa58395179095dfb289bcd00e2d2551dc13041e8e6b096f4e3781cafcdb772177802ffe455d549a6dad4795d5ad7f47f9e2e31e1477b4a3d10e277c3cb307f8a641fa65c1fb512c2670ac063a7863a8e08727ca36d53dca4fe39e61cfa33461adc16f12443d58951d077d955f04701d75f99885adc7f09f6d95e8fe3ca5b42856f56b39555920399bbc84166aa9ad16f285a18b34a97c03366e511d34f320322574ba83f5d196f3c3b9676c9a63e6dc236c9a7f15d46135c8642cb51f475a2810c555376f995fd0b9506fd5e5d8016c196279a95361b97482f0e557a2f2c52874da1a9d7c4eaacf118add8ed0e19283663a3c5fec30d30b48c3634138a2b61e7c5796c5f701f48c71dfa6c6e2ecccd82d554adf4e187ac35b19eea1ecc8a617d0a90f2b7c1077c11dca28b282151bcc900705c5651ce755fc7866d7abe0fb55d8865631e703400733557b8a5dfaf142dbfa9bd6a98963d7e1b8a1020bf3ea347203cd9194bb97cb91fe1592a2135f4fcdb3571920482ba43c8b892e8a4df9fba27bab77c42b72f6a0c87cb0325180814ccbada00f37b6b31000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019a2603606aeffb00f268712221526830983de025172e56f7be6487a52c7cfd132db7225a36cb933f0e97dbffb63d5c20e90dc8b11e6ab955637200c832e7a9b3e78bea85e987a44132b02ae68f3d23e20f9fced6816c47d2032b3b096a9cedc8e0b92d9de8ea66bdb694a2e3bb035ff99adfe4c21d419e74b77773b1fe709ae298e1097d4e35c302c52094d8c0c8f967854a4f77ecbc858f041f1f024f4991498328c8f4db87d8854f298937422f87600f609f40113ae576630505ef30703bb550e844a6a0378cb2b04e23397199a74224c42c9e350a372a6f23cc849f882bcbf3a4249ca0bdbd9aaa5454e6e25fefec277170e8780bcb889007579b3bffa040b0f31e2fce5bee83251122d2b6498415c2c585c90d05e1ba4b8dcfee6f6661c3267d81d383b6a125833eb917c90fe7d88c9562f0c67935c45b41f453caf2781ef6c3798633d04e5a17f78bcfb598f16826da381670bc1547329f7674c41f5a7722adbe77ef721356aafe393b96004214cb141ca4b25c4702285b4fa0d16c9a586f6327c341b7227b628400fd93c06115330834955ce3012c28389e8ae7ec692f408b21f072f4d1afd0d464f107a7efc8904b5618dde529c44773b3f8ead954700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001eacc2a62658bc3a35c2a634a4dc6ed80a1f10d2b0a9ae1a6c9c003dfe0ddbcf6d8570c1aeb8a649eaa58a9522bdc69d20934da07b7ca412490c3d75e6901b89ea776bff75815ba00f4b37a461e766ba2591d00e435275f2e2e6cb43f36a94bbacc32f82de2f63cdb53d2a9a564ffef03d68c66aa6dfd800e51228f0a911ad7abf0614eaf3644ed7f5c13a1a8cf3e5f71e000f7f52408c1d66dd4de2ce4ed6a43d841d1dcd8b0dfb2c2dcb88a7a3f263b531a3101bc399f0619ed39139b737e62f13a88da139c8757386d0ce426ab8b9e5e6c62f3f5152415894bedd10ed9f0af6ca557d275b42435d3f5188886aaa018a1849bf202cc055365a0b3863df61223e60883504cea25a387a808c93f171c35018d20e224337fd16d159968c5aea0787b04114e8f583236ae1fdb7f92c56a56f9ba61978544626eb5022a3e461a0a796e2b857775a9eb19925e8d1daff4d7376d9ad71f21086bac84639ec5fa365f5e116dfe8785adb6cf33037fc675f917e53363ab35e2a0b3e6382979d52f2b06bac8efed398b8ccca8b1a86c3ce5566d0a3943446a1025e5d0991253519425fe82466f7f603a4837be5e185dbf4e94ca89df21e0b0caf7a38d547ee37237d525000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a401425fed1795dc9fe2b0be5e2001b746c60623fc5be6587efd9f8181996f4b4a54eec23ec9c475872a9402b37cbe35b3173aa244450badea014b967034fc6fbe68c694129793e42df1b68dfc6ebc4bf5ad42021ed7f5775753dbd2122701c2eaa4cfc64cbfdd705df85688fbb6ec111663b0f7399cb267102a4d77efdee858a7e688164b0f9d0e93615b136b9ba14e44fe14d633722bbd3d99d38f4bd1bebc98c91c40f571f7884430b85323387602cd1276b7b7908c03313cb0af5413227aed2a2ab5faeee865cc0ede63fcd0677473338fbf6f4d8c4a13a3a74561e5970a0bf44a045bb35bbb2ad54628cbb2419bc1c5e4c08c1bbb7c0708dd4427fb6ad6e29f711e60b7c0931a843dec8e3a8c658fa2cc62cab683af9f1fe5f9d5b6980a25c099993678f65cc6519b884b4ee325ef0510ec5043fe383975cf383405fa4a5f363f5feef0ada040d2d596256482f0e013859b5b42b308bac0367048c6a2df57cfc954706d77ba77b816a8975106e17cc5c1d5c5e2729fe30cb0bc09cf7a42a3a4d51fd4a1cbb2e449b477c679ca0926d4d133bf15a75f79822728d1585eda10f81a66b870b07d2cc7703252e71e51206fd2e0f2792596341007ab2299118000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010626c1f818fb53218bf772c82e296cadffeecb1f51e5ae9ae676cbc7a0322f03d6be24ef35cd214d1e49600f9e5ab6ada0016df4804caacc246ec25d9be1d4ecfbaa3b24ed1a61ca538a0c775685e65956a383404f7a0fd566611eaae7b63d80d6a9fa4d3fe15fa772099e9d5fd56e6c0ba35f825335f60b22b30f9e3cd21fba51f67d201140ff7e784973041d5bc418f71afe3b83925d04156f465850c5bcfc134b8f348a413e396be793b12fbc12f462da82e468fdcd75eb317066f5e70d13cd6ab5519722a40b79294a821da0a56db07752c41dce1d9432cdb8aed187b8ba3f33a70aecb57d44b80ec9bb3501c2fd961e94affaedd68f94e21d2c240c221f3004e21d1425c4034d111858ad957a1b39aedfc6fb6ded46c3560bbecaa1da74576a769ab94ed7f924361e8c56e22c24f1e5c68f7a0af9fc8649d5388da4e33438d67e6e4377c1b2b731b41cb8f634aee2fa6b09edae50b3192228e42837478a4d6940a269cf15236edb896b5110003a19024e505fcc11b5d93efd9ea154b83c24183b4bb9dd44df0f4bb6d3a80529586df76093c4c09a49ca817ed5e30ce009e5fd1866159e71bd7880108ccc0abcec274ce203771f8778768f2847ed24a990000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad0c02daa125d0f563b26fc77e263d1e93f2fb0313a842fbeb0578da5d9cd15b82325c658abfbe60b9faf9408de6d4d600dae4a04ccb993452bfb638f3fa0872daa9b59f0ba56c1477f6eb0b0d05e81d1caa735d2d62822a07f1188dfd2adad36a8b58ae4e311af242b546fea428858a38ed2936a5ec1639f16ac6381b8056d12d9f888220f68946c9a0aa69fbc4163edf733b2ccba6a4af8b6f8d7ad02cabc5c172daf2c0137cce9d567c767488dd1ab964fc624706934616d189d65b854c0ad0c06c167fc60819d2dfb6d2893e3699442b0e9062f22c43df27b50bc84ed6efd1128f2344c3c233cfb2893ebb8f66407c40a7080edfc343c0e834348162e909fd12b5f59c3390037391ba0a6cec4dc6c9aec67cc93fc912520260fa9a092130e59972444b17d10d2c11edb93537598177584a631e9f0f68f17d2f23480fdd4e2172c467b763aeb6d5371ab97cd0c5ed13fffb3f7177966546cf4e57ad354376f9e8ea10146d625c3a32c37f249a3b48128749b85800af8683e6217b6b7bfc7c39595440faff3548f0ae738c38ec05dfe5c9811b5fa5d9893026cd1889de1a4c5b67188cfd7597d8df379f9edca2f89bc34a1d17adb35a47bc763713e18fa5f6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ada011f73329f1e51d0f703f4308dde9944df8f890cccd6e6de9ca3af9ef247a6d90be3bbdb86562cb2979385d665c31a766611dff74b852f302b22dea71e258c1892db7182e3ba7cf44bf5522066880b1fd388a9924308d801370c629bc00b5c45ba078656958d1ff77dde57e404b0f9b6a43e93ae85f139fe50240ab13afb3225043797782d2f210b45c266dd00ff852fcc6fd96576582fc24f3438ed2fcf676ae3ca3f6573b1706a3efebc66b15e6fd8d256c7673b6f7246c33190c1253a47093fb4229a23bd575294c2a4c8c826726875353a6af4e3c7d79a491be39afa701babc9518c47affffdf340a04530d0fdd331900b169b0ab73729848809ece8d023d75d0c58a0b8038ca99202222c973fdf55944f5176f7c3b010a9a7f4fef360faf8abc83af93a43eba97e1ff0e2003d4ce75f16775d0514cdbd27f4859341e239381fc4144d4392cd89165925e29368fa03635cbc6cc7a61b3f2102caac21d3c215e8324c88a12419390da4e2d88cf5913bed92b5426c1d87c05426b0b2a51605ef179cdcf1b15cf85bb494777b5a2afda45c5202c5d24c97c26b17c735f888f1c51dd41e36c7ffc0dde2076966206eb3fa9d8059b823b90c1a5d8b348ae00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c709d00a681ffea509bc9503fb50ef9d14873a59478d43d7f7c8067c32db524f3382db3342b563686a36aecb3523841502357aec3d68b14aca247a7c43c7795001379310dfa5a2d0fbfb0b6a4431351c138709cc5a066c01f79ae6c8c1f06b46da17a17cafec51ec3e17037cce70a6ef2b2559a60c71df05814a497af579c5263e37d18faa27fc4d191de6ab68bbed50a84d9a41e3a4b3484fce8a2238433d7a6325f17d9f4befcf349d3ad8819a2c9ce7379ace4d32cc8a00ae1741a79664f5cf759b9874a8705ddeafb030add1a9beb3bdfeeb7059149ddd392b0f0a3f1c4380e9c4ee7986601834ccb8e23458c331a8c77c4ab833b055eab74b29ab2e01fdacd539e8750e1a67dc1011d622da8fcc5d660385e826b9cc3788f7d03b8bea6b4695ca7ced2cda50243e0e7b54e93566bcdcc636a2afbe1878e529c695ac396cb76161549db6341c55e77ae64f0eab622be668d338e855bc92354c8bef0ffad25e4215fc716285b9abc6e73d95d433459f0462d64fca027c092c829a8989624889f376fd8cef1e3750362e8183fab07d2b9eb981f303598b9150a83abe3508107e4dedd565978fdacbbb2cc513669d0a3ce7df7eeb97e7a15a1defdeadb9fa000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac03a7508f46488318bec28b320f1637f82fffc0a2b5e94cc7fbef203e126e1be341d0ed87a674dacd82bce74c9c764a76cf0458d5343bbfad550bec6428dad7aef6d57bf3b5b61d4b11024c392db13793763d7e9985bbcc120b763fd1463e2e10d5128a0fd3d8875329af3485460ae7cb2cc9caa02fa89e0093b93c707f0fbe4a947b3aefd1ef85211dbbe4908e9390dde0f248bea99e2317df9a2a540ee62fe90f24fa71546bacd823ea3560352cfac67cdafae56ed6f3d42897a7106ea19cf95ec98be6dd6f5419fa6578d279e91820b61f416392cdc0db5d2100165853ac7e8145a49ac76cb4f500b25d82117cc38b8b59e4029864c0bf2e53b8c2969ba105b8ddd240b0da62e34feb4fdee5db876db84e050a25ce643f82b2650c7b8abd2f2ebf182231cc60c0ebf622330a05a8fbdef7e8c7f404af6758c839417e1fd907e858fc00fba8d8a30aea2a6075e879b20534b5ea80e02e4d555e732ca724ef29579792a73147c920ceb7a7685e0233f8b4f9a4726f4eb5268b52297c9fb5b26684835e81e23ace149dad10975c19559c88a4b83631128de179a507830bd8cd306132457b655e5450bc3b4023845983a1a7f3ed75cc3604f9a825e29a258d60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000817618a076c63b496c2e9df6887ba288227a0eb6743127b0fe9bfbacaf65add9145fae74df700af00bc7b70eb5aa8432ff706239b3c7d169cdd16a0b1f5627fe293e9bfcea69bd5ed392a12c20ef22a5a48a55ea412fbcdd90dfb9ea52edbcb7576bc7a199915da1954bb6b1cf4c7a6ebb9896597248f69e8bafd10f714337380928661e06acc33be721d2cf17df1f6d73ff2f8c6e68982b1b155f1bb5420325fc654e036dc41d98d29b58f597130f0a6991857a5287564f8249be976122e7f099a8c0970ae7b1ae1af818bd602426ae302a3a525cfc2877843607aa978f40a5e9087c04956152f12d3dfce2c7348947eaa3f3cd0b28eafce1b3711347c932e406cfd9f8b216d5c643785501debc2fc588cb1c96ea72f03797e563dcc1ef7a14280839943f9bafc2ee4189fc1a2c8c4acc7673160d47160c3414df68d00f5da0b626d85318e690de2f5c7c7a4b5877bcb53a8812b7f8486615e62f230b708cd1c5646a024ac55139556b86f0c88cc3c98c32bda08196ca9e09b80b3ffe3ca2fd32a6e01682122c7d962b9de929b447866785c040536a140a2b7ce2999b42abfa2046ab8ea9401bb19a15b4f71fec44c1ea4945f345886e64ceb15d986af8469b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092c5cfeff703a419b4f9dea108c94072a919e92bc64a57c71b3efe1fc6904170ac6cd6fcd8fbc9704322e4cdd8fb6d6460f4b9eabf49c93f5f74c9c6c2d3671615f0cf0fa238153e4274db53f96bccfa5e1a821f665622f09b48dfcc4892fa02e0d945cfe431915d22992a86635ce4d7c40f210ad2a39936253cba58157a3bab7d6daa9399a42298f75791a7d52d3cc85ce2bebd9d76305d68961bb5c4718b0252176b7a1d63a8b20c720411f33ba511ec18edfe316db028a82860a12cfdaf4ec1776d23603c73bb8e4cb0e02c8a9253d65d4de594d114ca735698e37d76afb6e3b166de03fd4e656ca2bdd016f3244d11195bb72b33b8b651283dd930bbd93608e7bd9c6cbfe66d5c8f8100c6a15e49816a3c3cf26793c5e75c338de44fdb8ef464f3d4e772192df7f4d673b759a06684b1a1adc54df237a97695d87504b43ebbe0e4b80a0b6300bc966e67202723127cdc59ddb677eeab883ffa24c0fd5be50b3a5449925d27cd284d7859eb1d23aac12c5665dc44ef6166d358601dd5d41d32ae7d0aefbb3400159fbd138fc74541de5178db3a5c4acfdb97b23c19e3132b7ca1be92537b445e27bce599ac6dae7df4f32b14f096954fc64fa81808c67bb100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002890c63150c8f522a39ead45c7cea4df22489ec86f12f4838ffceb591e1072080d799e3654856f5a70f93381d9e1a7bb14cfddeb7ce991ffe6eeb0bb448a6d454db0a54c4a072cbde330eab3d55fbe47dc04418c2c5c074c6dfd6f4357bfd0a776da88aab787620ae36aa48d486cf8b1421f704b958e5734fd5ce19c2d29fcb692cae294230be43c8af3e9c39ab83d87ea30ff235d16e5b31abf145e6c396a03ac25e4166434f5ff909506372c882357beb74bcd940d1f5062424be695f5abd90f3c5dbbeebb060a9819cfea9df9aa050e06f7fa8cdf1c876888e48e83b0ed8e0dfdaceec2d755c9f03ce38e903f8d35e6b4462e3ed6118468aa4d58c95d9df9376fa33cb8060fcc0ec74c88ff877833ead7b4b5b90ed408141a098cb5023960f7529fdbdb6c0dd9ff106f2429daeb45cc23ab073af08366bc42bc2a4110152b47465e62843e2eff3d66003859eebbfec48567e2f86cecf4eb5f168c736b5f15f56a39cd440300e6caca798b1fcfbe43b04e1abc051c5d929e8a061190682189cd1668ebcc2b8cc3a44e606d0c0cd51a4bd5866982feb045738f2b1fdd13c7d102e19ec40afc39b3be20eb17de17f677ac6399a062b08beac23c18c85b1a4b3a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a152f22e6edac654b9e16000b185b766fa4a902b38e036c5f2677b46c08408f6ea40d3e0f37305ee1f94b69f88415485986ac7cdb01289f945b17d7e76b83ba797962d848431254f2df8c8d6c4a539dc5d167d553483b4898c946065360ef2abc3c976b1bfa6c83aa289367e8fe013e6d51e8dee0c067f1e1d494a150c2e1de3fba73047a2aea6543eb420946d7751dcacddf1656a2ba1c01121c065f0d64b386c2409c8e30df3113256d3586b27c50bb07301f958801e7f5f242a4cfea97d0c2d3c06601d012cfd86f7fec115f03a6287864976d6378a89bbd20498c0dfb102d2909341eedc3c00d7a1ae32817de94763daee482baa117fb290473fb2918f802bdc479ba93bd84520bac3f72e04a531261b8502c844a73e605e5ae9f97ddfd712c9889015e4a4f205a95923ef017708bd86a44607a4bfd3998b005cb9f879913a85019d3741bb71d65299d48210611173fb875d8a73484e0acfb001f09de16d6c01549a103f36dab5ab0e8658de4f44a02981e3f7a0d81f5463dd1a783ecc4984a6f96f30981d8b17219e0916656262f660237db869cc93972293682738f3014d2c7afea18abd0a91dfbd94a2fa2e7e2076c8973bca5b7839ed89d4d8223d3900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d4c99da01629e5a46b3c8622c81e1c3edc7dfa4d843e133d98890cad603b0841ccf6e4f1d417faec81fc90d2a0d753e273a4da0b63061c210a690c31e599152ec3100a0ffa89ce18f1d2e5b23214453db62351c6081d5f655f82d17b2a8f5b1ba44323ea295df809e0e67c1a22200d61891f21901ac4428a67a52fd991c378bcc65f93aa39b1d86450e98780baba532e09bdd26f80660979600878a3672b41e064074248e67a7b9724bfed466594cb245ce0efa7fba2a73c3ee5ea4f65e288f6aeb023fe345e60733068f2144db5b9ba05525fbbd80fda58e7614e6aafa4b7bd5e840c8ef9539891db7f0774a0eab64fa19a8290a7e2bc9264a0c646cd75d2e47b70267aa0244c126459e7d41150603ce52188fb1e50c9cae7b75a14dc241e25b58f881a25563716eb4356bcaf245c3159f86cb1e0b22bfd5d7c8325e6863c39a52fadd5f26bf093761dec0a29f9fffc0e5fd9588122c91fb5449bb1fc791d85567684bdd3a78969a30eb4988ad6839ec226b04cc9f635ae7d4fa03c181017f397efbc0beb705ccb6e960591f70735963cd56ee63ac5fe9f65a0ad4616160b69322732a25abce760286ab9e413dd450b2a9f7eba31505639321f7a9f5f5d30b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002aa842ea2f5c2644bf97c1e441c01cfc037f6d8d0826bcb281190b5cb5dc93236328cb7bc52fa292f8e450e6785d5de507716f7c9eaacffd23ebc4dcea614e8d25c8752a64aadd8fd9f7f3e2f57b30fbe9c7e9da4692c8b0e68d487db14bb6396471c38461689da192438a602193307b84286b52bb2464a5164eed66f85e5ec8b26f21e2c42b56e38424992a15b59014a9264de0b2c81d6c9bd50b4b2370eece9719575c3a8f1c0fc49a040f9a609cf142034d582d33756340e080e46c1ff7453b354d15fbffdb76c69b8d807f7595a05c98d60b65ef4c23addb77ca36753bb5ea82f9a2919cb6dd243ff7655ff81c694433ff90838ceae8c39acf84137e83089239192367250a3bd871132be0362f8396d389428b5917cc0e460d7eaefc26e913221b819fa46fd07126f71931b0abdfba4b254f25c8ba72af93f91759e5739784471ecee999a68e8aef9a0f2b512e652f294a2170ed8fd692e2149578b9e6633ed24f4267aa6e21714c1e4578bf7ffe0bd8fba45ef7a9387c9624bf8a45d1125342baec26ca5e2e148a3f069ca70661ff28d49e3ff5c439eb3d561e8ee5a6cd3e6e055dbe96330a30bb80ccc9f543845b50b1fec847729bbb02a48cd3c6647500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f170bf6a2d33f276a5086474d98be65bd3542eeeff48d953aa2daca57d4362b1dae022d5f97a398047b47f75d859a028af1a9bcbd6eac5472018251bb63cbd87a950b1409b4d75718089bdf007171ac4c5674561060bbe54c135deb6f972bd43b34dd0c8177eefef889b7de9822110eb406a5c2aa6d11f1780dc47a2d7abdc7b2c2060ae03dd842ebd3deb54e57c8d3a546563687f67c3f241def37c6f03b30e293fa5a32f650cbf69f266628f46ea360006910d977a5e814cd6c772118dd12136d32c49223fc90da57433749c99d13c31c29c09e255dd9244ec6f9746e2c338ccf1f9f393c344ca8dc84f40de4aba0a03e12a1bc522e84bc9a94faf4fe20649dd665816060ec37c1cfc633f11e6f153d9fcb35abb9e99338d3a3cf7e92a937bc48664ca32e3369805479ecda72f6da2f10d2dadee80233047c4b60e37a97181e9e2674aeca73a1342b3a5edacb649c8c555183e20e7f0e723bcb896d2d1c56b79beb587fd3a40de47288a0f48d3c382aba5d5aa446367629d7655b33b9d79b5afcd1b5e6e0e858524505113903f80dd45403f9afb9feb0b65a99ead227cbd6de800da64f0aebfcfa67ff5a1da8c6adaf2b117b69ffa83407425c9ace0f3f7c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab4ba8414920e0122b6454a2b7697eeca6fd600e572b8b39482ae61b7405c27eefcfa1f6a8e1e07b95ac7145be6962ad32b98b55534c6db90d749306d49053289e78c72da8ad30ef9a1033138f607fb370e438d77cf389278e9b593bea5d1aa173ab5f5c2bcd1fed102e6d3793bb95cf5a9ccfa506d6b671a541e7800c380c74eab18d6d36c9098e49cebf13a8ac7290ba7a4894ae6ab6ab63c2d916030c87aa4d01950b34be475d48a21b189cea94c481cdf24c827c407583de5f4c2b26172e3f3267ff603ad75334ef2e5910b497d58036287022f77717a5870c9c69618610f85971d7cf9fc3b5f267dbb19f424522de3c7a9d3605ad9dee3af81dff7e1f1fa773adb4b287a2bf6c467e3d02cf534388f15bc8e96317403c463218cc6463a193e96a8542d49d75e6b7874351bda9d6c8a1dc629b68a2bc251ce0a014cce6b037a8bcbffc3faf650586e21e533ae80ec1e710c062ca8b1a6a6f6bedb8658e5e791f161d3cad05239b033df09136f3879f1cdbc549ac3d3d96dab7e0d0bf329ddf79033fbb5386a541b86693696adcc2c5737547967b2926b76bed613ab4d78a9ac061e2865ad50f710770f28a4975af79cd004a90137d14b61e8224bca462d70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2a33d42e829273d4216fa61e45c8eeff568ba0843e1a2dff3a784a10086c2820f6c6acd6dde26a68aebbcab62fd6f099e9b1b3fec744736a6e25f67fd211335e5bcb89c58e1d4d14c227b0a2dd77e3f5d59594aa55ae1dbe067cbe6873dcb47ea5f2663201478507841d7718b3d2e132431ffb07034ced4354c18b185e1a806487ad90696952ee525ad88fc7d7182eede79a16eb67036a4e519f18b860d05e45344b6d811fb3efed7e3232166f1105974a76687a2e5c78b27e7de7c933fd2622e5915cb545288c4d5284789270bda9ed1a7624a413b7e3c963a6f96bd0a8a668ef97b2ab520373fa37d36014f3fb119d66f6d62076b1c4abaea4a995e455fd271e164cf20fcbed9ae47a968d9235cdb68a66540502b7e2de290efc623c43989ce3d4628e23da33bf95ce25b5516b553da9cf028952c6f351d55d7d122580bea7775a71ec7b9bc9994b29f8e542c37c0f18e47d1092f89f8162d1620f3822e9ab0366df5146f4b262c42b83efa951e0954b8c3e3ef8d60b7519e1525fabc2b5d9ef3d421452f25a78e1a5300f35a08ef54cfe41d5b2cb7f10326f363265be14706b888e73aec183f0614ade22064d19e3c0e4fe8c05528ef124902a46082cbae000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026fd4a4dbf83f98575a35608eaa86719e2627719d0c7372b30e5696760570f345deb489107cfda0f67172474bf6fdbdcfb242a3f20cb98e45a4bc544d3e5e4d2794427b136bbd79a71fc5aaf96ea76b7c4dd6746dd8c65de6de2bf9b98fb753e6f47f482ad2fc12a54cc5e7d3db7e386eb028c282feeba9608d8687abc2b4d00546b4a44c034c031f7165e99d92fe480bb7c35035b550765b4834af15ffc2fc5bd1aa813b8090ac850d4a00cc42f932db549e7f99bba6acafd77fb8b6ac7b87c50b2bd3d24609918cbd55c28c314d844b1a4cfa5cd93f21d9c6596ba1a44c0bb4836464fdcaf961869ea2d165e2e54bc2caebf4552b0363115df8ca9855bc3c6752c9edf7d6a2754f8c364fe57f01a956a3f25978927e0b16498e3148c32900510c5e5ad0a833faad7d90a08acdd6e3fb1cace0965621c68791e2dda34cdf7694d59cda89bccb12ddb63f3a7bab55f823f7d78828cdeab8c506b8f6e95765af0c82f762349440eac47a9a5f67c20b842dabb5a95ab5dccf0ed1cb4333c8be64043ca6ef6d2402fb37ebdddfeeb471151ad631e0104b303f50fe383204fba2d9618dfd33cf50e81f59ec8d179c929de3c722de56dd8912b0996cfdeb1cf1657a60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a53535eedfac63e0583e75255d83acd500d1328e19a003568beef85e6f53a210f39f02250177a86c3a6a45e9bacd929356b8ab0fb35538cd83586d0d8509cdcc6deb90d6d44eb8200a95f5baec9881149d376d801f1cd28855f568eee2682a25307c1769c095729da91fb45ecc7e2aeff5b7095494c50955b8f0fc783119f9abc7049c40fa7245038508277b5848472ea0b8e50228927fc489d677a3170ebb8d104b95a7a18b40ba74b19145375143e93cb949a113d00dc4079d41fb38e12e3a3b45d09763f9d03f59ae3ccd7df278bfb2ae596a714f8c282b16580405e3bd20382271604e1aae7b3e7f8b5442c06580cec8a43ddeb5a5d5faebc985713afd9d14ffd50e907f8712a108f2e7d189e55750636bbcb7be26e2f824354f5a30bb6bd5a78305638ead4978b5148a853fb7d7d7a853ee6f2dbdca44e357103118948a16ccd99dba847fff7a711674963730dada2b222eac0fd77e23cdf8c6e23c03f0c755d816be0a8a2ee92cc007bc5ff52314c47e387f51c2764b8429334433778bba408e37dbdcb0449cfb7f14fedd1bcb140e2f16addd7b8215f051a9d042147e9d677a3a79775f18dbbc3f4448b3203ed429ef248ef307f71cd16d6e2d6e7de80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000056d7ad508c20f4d14a34939687eb01afdcdc5a581c3d808ed251df365dab7cd6c98fac86b93b8c578fc02c2214e2c0adb44359473ad9df3339ce4d9b66b1c3516beda944d08410379448df60bd284b688db1edb25e39208f1cc14180efc90dc662713afb9560228cf7294b0cc78d8ffed6a18566fd9d0c2074aa623492bf74ac8dd7b713718e6080e352728b89c2444e93bf7d0a40c4c788b0211118122ee5e5592127666d545d84e8b555cf0582e491ff5d4e5b678e1ca293a025ac0a5a0d574cad9edc70ec7c758eff2f3dae56cb91e10203c987da930120d2ae244c529b8211a0c4e328a90fc6d0c79d1fbc6955b04aa3b5d09fd5ef3b1c9cc2bf018ec4dcef6f69a68d2f11e2db0052e9fff69bd975ffbccb49baaf88d7f0a17ba3bc4b8f6b7aec65f1f1eb9e785a6ecf3bdf643bdb5fbdd58c8ffda7a4b3d4d5ceefa1ecf073d4962066ae0c83e57db67a124f97eb4bc3cf77ebc868015698e77b372d16b7a09644ccfdcb0b247a2933d1ec570b7c23083833e2884fc71f5c92008ed8a586e6817d6b20ce70c8102cbad514f92254c8926eaf58157de708d9e4be92e7f0be3d2f5109d50fe5912a9570100db7be450ab1050e93986820f64420a048ed5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b086ae94d8352812d163c69ea4088e248209d44cb53654315ab618d6cdaaedaf1a920d4f5d9fd84186f002a2939fc9f3f0e7c1e0a489abc38a803edf7c5295351a12ddc5cc896d63ebf59e0d65463652817a5fb796bffb0da217ddcecb71b029372d78a9e162462be91bc45e61f0c1549cfb937a59f67a19da0529292a52c740f4cd8b417130e45cf815dc486b6dbac5ca3b7b2edfc9204d6b64aa440afe5e19ab5c18ef610e662bca7d86e948a4afb9b0c535f5af419e246511db155edbcdd78940dc676e91f3755954779b6c892dc56869651930432dd22e23b3aa5969b9f73cde64dcc694655915d146c89a9e587854dd0558c706ede4fb36f9f816f585a2fd4736a4bd915c5807779c0aa407e4eba3a2da6978f2f8c53390ea78588ca5c3c7c91d17d7f2a90344c1596386c27462138fdabca148b4ef0a0610c929f5eda742b21cf465ccb54d5e6a007544fca799e54af7be24043bc93b1f757937227f9e7950c410d3f50abec29e5d5e8e35b384bf4f19311ce9c00d7341207d6611fe1dc2ce604a5e898fb048b686302c53cb1f5f1374ff2050d7af856765798efa24dd6adfe56062716f6e171fc6228659241901be1bdae0475f689ef19efe63196400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf510c146076a49e7da51490e6e06b8b0b0f51d4cf36cd8209b28ca90bf5dea61b76c983520cd6fb6ef65b7312ba8b3c570299309b14985d089d3d7c848614d5010257a1cd5a485d662a894d11cbe0796585d7fb0e7e5d4bf209d96b0004294c1a238fcaaf0f81a7245c8ee66f5bfd44274d12df3c7950ad26941f7ab700215892307ba5d74603cc2d5539f496428b2f292c20cbadf761c43d24216617d1542fc5852ff6939ae269b27d06645f8fdf27995e634f26e9d52ca0af99a513741b8466f9f8298c75c0d1016d7ef01eb438c0e55841641898e53d192ce4ffb7ce7857fa7ba9a79daa526226158c4be0e52d900ba8720c2cec62b80f944ebb96111556a71241dd55f86176c3c50c6578d83c459e5204f27f099cdae55ed71db87b1c90895fd17aa4826fcd603d8275574ee2bd267b1b0e373a810db0f8e2f6ec9455db013b4da75ea71b5bf9741ae954c4c239ac515c79cbd0ab63503f5cda375e3d49b6c5c3440b203d70d0c5bf79b093945cae8ddc28879aa66f4481dc22620992bb49ab6f6f0c8ddbfc1d48d36b55b7f358c65293c7c37660dc38aa58a15fc7a64716dd9c6934ec0207228afafc0e7fd86bfa48ebbeb5ed2ccf05555ad305394d10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad3cf89d867c89e1ae22ed06d85826bd8aace3cbd41f869d02fe032b5138814514045a4e2a2c9bfdbcc8ab446afbc79a90fe2ed2323e0ee5d1fa2bc6c3da0e9fce62774eaf635e3193ab7ef824db9f1956932d5c612c8c01e0f352f12998433dc5068f3830b906e51bf69a7cef3fdf6ed7b6f4275c324763bfc5b9fcae67e67c2627002faa4a4385ac24d1a2a9f613f816ddbca8b479d69133a4ee6de430968b8037e4328fd2b0821a45cdd4b19bce0c3c55f00a8fab473194a5323e54ded83ae0a28eda8a27a03e25d21b99b5caeb3dff1d900cf1a97c29067e10a152d0be9f94f7285c75196d08d4d4a3ce65f0baead33d5a15702654715a965909c9c2be7fc147c91accedece11b71fc6ae3af3f6049293f087f543c34be28edc92d0726e7119761af25c0096414dde3c835021378a9f0a5d8b44ef30edb57e8400d5ec163bc18ec0e79d2ac1c06bf50601c5e0a30aaed971901c9a8ad45d059e04f861e2121b4d192bf72423895a50869b724124b75815cd0820031e933723a5cea0de03be92b1ce467bd330b60aa662ff8038983526ea133832f40aa70e4c5cf8290ec3d3df96da81b4af212bc07fc01b3be49e4f97150a8db0606da7788d37845c922f700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002477a7a4855680ee0e6ac14caadf8a48133b02b4f2924bbf861fabd0206bf0c47d8c5670c1ccd51b83ceed9da22ecb28a74190cf8691bd46583618322040f702259b8a3b20b30c08d5db751c1b2840978b7e5e75c738c2b3ab5df4b66894b982b5ab855d94e196d0817edcb5c31b57b070df2758badfc64c2097ea5e4e5ec5ad72aab012bf725869be54b6fc9ad94ac861e364361eb535f7414420b4e63e926241d433057e0fb03ce644ef12d6fbbf3ad4b0cd5db3e22ce36cdd50fc1be89804f52394468f85852b80ba9f9eee26d10234bff1540a16ee9459dbb3ee6a2ae798f0a9b708a21570b9060222d2d2501136a18c84104d1a9c1b30d1c0ba53d29e7cd84b27943295ffb077dde29a4df3e95182cb4288ca40a70ca1b32ccdb304376102fb1fbedd59823450e2ff8a9d1b61613d1c7bb6a6eda8d5996e941ffce27f5368741e5071b113ee89c1939f51ff1cc6056cf24f26663d940810bc214dfafa87978a01e5b7f907c196876865e4c60fb62eabf4171bac1f5cc89e492d07199e49eb645072ea12ea6735657de4f23c448fab39816b757b9bccf429ea530d2bf04fd5a1e81c487b33cbef9c79bf9c69d89db43db7a545f543278e31e25246c5a00800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c656569b22c9721c590dc07689402775458b22deea1b70b63303a4b79bd9767651269e037334c06c4cb85a1bf6380dbc24bbceffad6ee897b17e23829ab3fa4ffd776b2155ff2bbe18d62d8f71c9d09a4a408e2061f905841838c91b579544362aaff7d26e40258d9e6e043f83cce0f5edb605f58d9e17e6708265c62818d416cfd7e3b13ca34a24d7c392c8c8be535739b460f50025c5f38def569cabd261b3902b70ff714266c293b431ee6046313b57d01946786003b4504903dd66511ffeb42928d081d1120db92af117d2b4c432b6c257cfb853fab69b47372c3db2f15ecc2078befb0616b87551f4527d05096dade73f81b0a8272de8fe845cd948efddbc0a496b375695885b5d232f3f12a3911b3f44f9f7c66ad3eacb38cee1431ac44efe297342a752d26a01792779038c31e2ef5cb05adb78309383c09da01d492d28c3452802210ca3ae5324d6aef62b46916cffc8ab5446779d25cbad74d5bea37b263457e8d73f2fbc944ccdf9c34226e0855e6bd2f7d6ce826b5e330f23550c5a64d549c147c6c9be819e20ec224300327a12ad054289c8863170b432263cb883c37a670e58c26bda0e8301ae3e9bff3c4124afb308a243c33075adb5f6c0100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ec28931c5a7d94d1f50f6ced785937a4a75812d3e0f19cc8229f03a0684b5e37dd3fc15e6b67712e761e4ec1102cf5999aaf36a9b556d96fe21363b8a4dbcd78ed13042155a660f352e1419c48aecfc84dbd3bdaabaebe0ee37ebc3398b2f2562b35f75376cd8ede5353110c8d06e9dcb814e3b2a6294f19ab0525feb3ef8bf37894f46330e3822059757ac4e428aae64a0aeccaeb3a28b14ba1ef86c98ebfb64fb776f22dfad914eeafa3021b12bd53541633b913d14294f389485f0c19dd37cf5decc1d45ab03cd85a0fb5966655951562d4939673ce581429e5770186ca95cebb013cb10cd39baf48fdf995224b96482888e0777d5f60756d183255fc558663fbe43d88848fbe8b89c598c528b6d4bc4d4f5a8a910a6d0807f6f472295d1762a21b96d2888007c5c3cbbd01c0355858d28fcdb49d7b37369f13d30b30f5eb99cc82f55430ae47e1099098ad997360a63546946d8ae59d998a0b601b7c5d869e3e53fcf4c3e168aa4785dd4e6aa1f383dd9409dc8cb01cb9b7c395021a4de30271ae6e5f005595064f73bee34ac69177331d8b4a60d8a4a49e1e5d279bcb15ab506ffb78ee687c74e719a2acdff7bb125f2dad5ed3712f46820aa421a5204000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093c55f0c9ed8eeed4ba762d43c3d13686259571190541ad8f81019eded22b231087833b366d14f47ecbdd49eab2bfa4a6989dce424382a32aed089003e0d039ad034d49a73ca1f6be8b71ded82dc8871f7ac7fcb5462fdcb35f9f318317a4f515496f4a75e778e654457d4fd1963ab5ba2dd98da25a41c520bbb4b5788bffadb42ba7dbf9789188448cfa0b845084fd0e095340376eefe5843b67bcca4120e11c98c63324764b584a18d66a78bb2ecb19f60a56e4b0e13b075340a3b120ae6a3c2db352a61680a247c5aff4fc1f4a9021c17a6280f6adb64d5260ccb7c9ac8d5d9214bb73a123d57ab57a6ee7e76cfb80ffb1f7b7f780d867f083a512d4857bb9b7403a3c213a9cc99a68d70bd913910b5cc913e7524ccda4ad3943ae8edc3acdea7b2fb87707cdfe1a75ac6a3bc0581e9e35e446d3629e9f8b60a62a6673d9725ba3501036bf60ab55d124b81c10af19830362b465e160ed6cac8897941dc097257dfa40fb19c3af7a8d1d023bc378b7c8629a2b8a25d41137e024e447e4839855bf31815d614c614d659276be671736be870f9c10b15bdc7ca0514cdff835bde1648294decfd7165d04bd7a5d27d5a1d7eeb7fd885612038df8551c297c9ad00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008905ce15e47af47ac3ac8719972e6d640d7404871ac3fd94f7b8f8bdc64249fc5b7a755a9ebb892e3b9993b15204bfb5c193ad39214bee5b56ec9f52c1be5193d7a6be3a7b3abd36fdbe0d7293a637e3a8708b06e7c2b3ecb8233e724a5b3b36eadedd29b7bff69157e7a10f3bb5030b8c857613fae2e20dfc7c0f69ce29b0d6164e2d2c6c9c4deb4e7b735127e0d8505a0bf8651ce55f0ec2cd28a13b4ebb51284033af9eef158680b278d868e143c944708b7114d95f56958d5d0c6185fc6638fd10b02b83e66b45962425fa1b107e8350e003be3e4768ea21cb7516da2c0cf15c34ee590e8d76fa920def447dae8d220278e5e5cfd55e9bb75787b153f5230bb23576b2c2b835d39fe1cb9e1bc55e35a73b419ed8f9e59bec1ff47cc0fc56d155919acf15bcf7b758f9e2e09b73957fc7f7f4efe69c1eed8e700bc9145f61db7036cac6e2123b8c21cce6df013c5443e32495bc859c0bf4f080d1a89284642f4a7428bef6ee9883da468b894b80e16cc33fcc3b9eb43ac3c278c0e467d863e7b6bc6640095c0c6c11a0f4572223ddc69ae23040ff71377dba4e60ddc6302984ac09cff599e086372c722b993570ceb0c8112e170b08846aaa6884840c75eb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6659147a2178f6a6430c90eef8fc6ac1f9b56a9536999b7f02e35cc48beccbec0eec7e83999497e7922ca7038dbc52fd7c3987f48df196c6ceef9f4cbe63ea65736c94c47e38bc3c7d0dae11bf5504f698198a75052bbef7b92bb669c74876601ab886c8ed34db4f903806e6c2923f7e6768c43d7b33ef8c0aa287b79a2b979770243ffa239acd0f25b4070fa3c933c3a62a29d9a0f1106b508c6f66da765b4d43141addf211e81ed6a9377ff6de2b64bf5b6188519a1bba3b6d9cb08a0f334ba27f67a2cd25f5c9ca7152c1ebb12a28a29a92222a1c06c9dd4671100323eb9f4ec20286d2e0ff897097e8eb91861ef2d1810ef86569e74686f10557425a6ad0eceb29a9207dcf344ea50c42b1310ca0b30e7db25a3eafc202c00b742b86f7535e9e14d4f76b073e74a91e39d8549099d19a930e8f480a5f11b5612ec41fc16cd41475329c858a0347a1679431ff3bbc0ef837c638b446e4a280846bf0600a0fa844dedb58ce995d89186cb6fb12b3944a591b21b324de14e2cc74f60fe4b7cd4abdaf1bccd000332ad7615db7b31bca7f1a2756b8858559350c305c4643e34a7f37cb079c5c9607403e2a5283faa2b220cd8b8a0e7fb37ec4b8eaa0d393c6600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e6651c2a7713d85aa875eaf2f2571b6372c5b5516c604881debd120e803dcacdbb518d84f9ce4924db02f6e06bcba75795c58c771f5a0ce50344269dabb1c1f962c7c0a1b5dfd77cef681b5900f311f04118f39b492d6336083b27e09ef152486abf380eec140fa598615b4a83d57f15f05d4303cf803a2914a8ac487bc986399384262db73d86dced8e64277c90fb3e548de5f13bb4e738740a598095a91176bcd549c838963ab1edd9f088c7cb41cf196a6ba9e0cbdd18b03de339def608c3588111f59770b0117d0548058525eab199778fc93670c11b7a1651050c15c46bfe909f99c3f26dd7a3c5dc0557e0fd5a9e433e913282e607b954d8145d6c6493b14d94b4e75828284911c52be6a457a7b7e27bcec790c7917ae05dbdcc2af37fe057f8891ecd24b46709a860c24140c442977fe95d3b2d3cb98afeb7133e050a22cc7903ecd6ea0f990d0963899fe37a6040fc62d31a347b11da1f130678ad4acb0a11e095fd3636c5d77442bfb0318d51b95118d13703b78c17a043fe6c62a8645b6b355b0ffb16fca97f068ef8984bc0f63607b5898d0f5f7b23fc49593c6fc96fa897a1672f584089bafaceb694f7cfab5dd3f3a55eea6be6987b3cad60b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000893ce0494553f983dfe70818c7445968fa2f6cb2a928503bdab540b0c9b0747576cd62ab692580a813e6ae68c9ded2d1fd6785f23d25c07f6ea01410f590120a6a0a3f025e68e3a1a7788c0f6cddd87334dad7a01d48acba3d35447393a938cf9b40da9b8116d4cd21db250a16abfaaa129377545fb4ac38b1208063083d0e7dab60b97ad57369d8cac60a3398c11a6e7eb2283d509c23f1a2ba69f75c92e75345303a79e7e705a3125867c599eeed90797fab1b55d1fa439b95b405a315a41a6cc53855b364976955b30cfa4f525e292c624b7b75943085033b68cef22737f4187c244f7f2f401fe061061d5130566cc44db9cf0630dcd5ce76adcdb404cbcf737e4401c8196c71110ffc1d1d1873deefc77662aed408b90f64f1efb8447333deb6515dae623a88a5f5514c5a3ba09bc29c58f5870028e4089b8c700785848e4f8a5aa6d3d113fcb7c2873b4767bdf3a60cd67ef3d093b14fea5aec78e00079a35711ed7bfad69ab0e186b02bfd08724be1ea190072d166cd9c70166e63db1827247ad38f6d170ca4100df08b80053ef1c3200012a10e0617ecf7ff149fb11cba17e7dd6872df13f04cfb3caff9cdeb81fbb491c4814d2b74548743335aa2900000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000227fece25acfe2426c69abdd814504c2dde1ba7f9e0d3a117d2ed0b6ad8ecd2e516078a98a5e466415de8e058d1b6f06a2da11c5a377a552bda1430b0b4bc237ca300759ed90fa6139127d5d42d8f56878ef3c0c30651b31fffb705c15d3c7b7665c68dac81dea2bde094ed3c89b4df72312fa1685fcc6a530732adfd04322eb4a0fa0ef4b9baaabc134d8f016aac28f0c481f2b30d9554a4faa39f4105d05a7c974efd3f6bbb0b457352c8051f21115ad9dcf51fd243b05bb063765e44371bc5df1b393c49490b914284e5a453bd8f3f1d2c1d65a934792e3c6b3a2fc9ee30a081b1183303bd9cdce9319d2a6e2444e3dfd34670213da401475c7a5e0499532d09e1efb8f395f0acd600d1a8e81f9f8b125d237b2bffd83d6c9b7b56af9000c42dcb02009704f99317a522f7cc6f41e8ca84337a5613f83e45253fbbd5c4bbe307a990f30fd734df7b17b0f32e1f0491d4538738ae92fd4869902090e288d27f82c59a9ebc5f51f8f2c9058cc1bdc390844e517c15dca01e4bca9078e91a724556ed04382b4387aea7251a7098dfbe3da8aac797be026fb316206d519ec5f55b118031d82293ce1b277ac6f59fba3e5b2b938c50d77649bde3f081b63608bfa0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000248a554624eb73dfc9a6e27f740b1fe99e4f432de9038bd0455823d7a1437113ddd0d267b6234933a9697d38deffb1c6a76c46b3b82b6bf3a31caeef9e4f6781a740ca0a339f8125f51d87e9c4ef9fbe98ef476c8b30c6a10d0674ec272787d872144063a3ad8c6d2e122b03c6d9ce195b12fa5343a1884a4c380667358ef06da45a685a8b52379424c172233754cdda2426e113e91dfe67c29a7830ae384d16362d460a4103779e9ccee7353fd4f7388a9ccc6cabeb2451c71101ee00bbc0eb3dd4464cabe11562f6fa3f8cbeefe0bcfc362cdb6a7aa03380f21f533dea4c948197446ffaf8f49eacdf6644ce703aac31739f0399b6adec6d92c83eab00cc5c332fa00f33710fb2af6f32d8135fa64120e7c8f90382ae6ed0c3e7362ae3463a7bcf9dab1e7b2c45165d6253374bc2f7083cb50b21fe4182e21c19a55265d0c28b20569bd908c659f94df3e00b53d50d1264420b436c1548c00f0653f2fa7c4b3edc109e7e69f12048a744a2b06003b6c06f54c719662ca53cd4f38d13bafc14db5523346f37d704a09a92ac2cec6507623edb91e0341a796a41c52b6c3092e0d0c4c18870906d0e1345830e7f18f7a97e7a4715e6bc327a8da0530c65d167d900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f5c628354675d89dc86502821ea68706bf2a1346c991482cf2be3748e93e518ee8f0e325b887ad2f592c70aa5e743275a516c56c15e8f6ee52bd2d9719bfe29de4faf4e45ae50be53c8bf28fdeb7ae1076e53db53fe59f858e72f8ab0caa7f8502b363cf094cbfc42d54980eeea4a22fec38adc0cc6c95ea922f167a32c544fd87ae020bde358171a7ea0d918fa18b3f5e2a211abea52969ef9a2cf99f1ce509a88d5b862d628845a59454082d2b46bb49f4a7f0593b4cdfbb8e2af206604ddc02a096e49b6a3ac9342a15c30e5df3dee13d90d5ff47ecccd6ddcf61df0121aaf60092a126efb766a9cd0a747ce0540330458db896013c1b0863600009984e971d90e54ad1b70b7e6028f55deb053e45aa8a385e1ae22177eedfc63f09b08b27502d09da5cb22246ffcffa589e2df4f6a9469450e5c77d63742d1517cebb708b4c3d5eb8cbb7010d8b911bf7e519878996da275a138b0f43ead13ceb39397c4c023e34f23db569df09f8d0612a6a87d6eb0c96b835a30d45a1f69a403e6fdc9a722fa8c4da8bfef38e8bf5cafaf01328a9419ff613bf94fb3df74689016111a8eb0cbcffc150a9fb4456df142f137c3332660fa0226053a0c74dce04eb518d300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d0b29ffeb54cad88d1bd7785203acfcee5d7920de29f3e8dcf0a1e494da6f2a99c3403013b4b65fb25e3f3ea7e3c04a2ba53ce8847a85adaa7b006e8996a6c2aa49e978bd3fee5fb04216c9c4643a52a5f5288336bb4a52f04a0b14dc46f22821ac0ca478c9803057d301a77ceb741a384ed621eb4d812d50ce4e70670a930e7efff5ad7ef5306b428367007df3766d709c4272664e39728c7e4692387aa7f081535d12a8dc96d31bb241e14f0d24cefd0c932767dc030deaf03351bdfb3b32405324fff00f43c60c1c33f35266cd9da18bcd199620e264c92b0c22b371545c8a605b44d3912f4548c4dda2e1760641afd980b5de4b38787318a4d1c2b9fc6427337692cb48bff1eda2d418fb6a966f0afcea5ace6374413fd79a3c1929206dc550f47f7f4d80aaad155e75e9115d756e1ad9f4f7d688585936261879b9f1649341991ae5b38904094e7fb3bde05e97e62cbba65346d409709c0b4a20fd479e09d5c56972032b5d43b778821a0be250f6a81cb52beb8366db51b23d7d36144924221bbcc8acad53a50ffd2736866394c2d82eff96b59b51c2e4060fd342b2824d919f3944203451b3b230195d046bbe7b19eb682a911f6d81241b239ecfaa7300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002652ab6d92125c0ac486cc4be28d34c19bd9eeeb9252be2fccaec4146f9b70919a0a67792473f1bd0cd2e0cf4b1e88d5b51ba5c085334815f0c1853c32ff1cc4e3f3de0377e683c66cd480166693403443c4f6ad84ec60006f8672838c99cc33bae42243fcfac53cdc16be803c72042d1f52be8404eea88e344234dbbc13f8d19962c548221ea752d799ff0678dfc8b5bffe7b5f483dcc30164fd0f984dc80f40022b3f51ec16ce3349818cb524a78a24503136b8b21c5ef38f2c963369ac168ea408b167d634989d1ec5cb9b50c8816de9eabc24545b52c18089c74e3da306363deeb60020f7af05b0f2b84598586e8b228d3fcab250067a88899896810c09325b800fbb6543d6e83dc02cbb219c6184e66723109d14df82aed858a5e5b6fbc1df6e5e45b7abc52f8bf214b956905d7406bb93ee91a95b2918409f6f865126c22f19669488a222b059898be219f1f49486d3b3c31d8b75a56833cb7971be1903c4de0f5c9e335946462102e56629014f2431bd7bf9703e8e2b84aec9deab1ff2810ee7807f62a719765e4cd2a7b1a08fc49b6efeb820fca1b9a058fb58d3349a2ebf51ba4dc5b959826383d4a3233b0fa8383e4668ed4518d93907bff432d50000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080a2b22b07b854452012c9784eb1817b516e10aa965a46a97a34cf768cadcfd0a8e2b8c17faa5e3d714e7c289bafee38765ad68b778d77aedef063a96489a5f5baf68f8f3cfab8b0c7f9eb718ee2640bc411e59c869c70f4b797c08fd9d4b3cfb435440c32293652cc97ef2aeda2b43208938f4a36f48fbef585215fb8b030d2d745c2bd9d401d5744d81b75d267a7d9d21a7a98ea119c7dc3a10088344e42f09e32abeda0de2b6eda55c2a803887cad3c92b0130db678773efc3425d9ce9ba4a2842ac6c63a3b2e85c536603b85c1285250fb977099e7f3f9d9504b71fddb22602784a10a9429c967f8a907a0c5bb36fa923e56bd756a0fa1d0089a1b11ea882285f317cb47f2bf3e4828e12ef9bb23303e58a65092b828951afdaa467a2ec631de3c62c5433030a5201eea5e09d4f4cb69394cb03a12a789ef3c8b260c58e9e89a204cb4987f879bd9af5c0b00651e9481f9ef7a94d69b322a0f71ab5142ed8cb01e9a28c03b3565b340c0cde16bab2d9ba4aeacea554bc5f8ce09ff422e762a5412d1103e7f59a347eef5fcc4e03743d0b1a0a9f75b17cb67fa9e88ab19bf9fe9264855bb0b510d6c6658628e56b68c447662d6ad4ee5dd7235d2661528b70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3ff1583323a1f2be2da914d09b11c8ce4a668f82a0d07d5e24b5ffab6520e6cd4d3118d79b54ebe5687ccc4d8559ee26fb23800194fdfd6b5e03ca457d193d52f2507f2f8f8977d3e71f7b2cc9c20df9bd3f5ccc7538dc7c769dbfb9ac7586adfdb4d149282af03d80b8550187808d6b8a3a3169d33c781b4bf9accd20988c853a0c40e3d6597a0295d7ad43d59a07b23447a1d67324c32097a6f900a8da333a1defac9036d1d836c52f3736e0cff4319fb0b4f04e0bcaf9c438488312f337a9aa2878e45555bc617d7ba717f9b1628283c0e4f3251f190ff8dd7565c9e1acab43eacbf7a94611158e6cafe5b78e730ac624b1c4b211835f81b3ecc1fe35fe3cc2f9bb13a582c91f0238b7165d295b6a308ba72774798c234cf5c512f11334d9e5d38067fa648cd1a61359280d296f6ee67a4c5651d0a764033850ee0333cfbac025dfea346eaa23ea1d3599b3571bb43f7a1afc21638e5f3df9aca4478414e8da6b135d31e2449dba9d79ba214de6ba5f1e62371d14ad34b263d9f3cd554483836fd6c7eaf1f49cde60779af71725533c543f118eb6211ffcd18113f6f2c22054ea20e5e55e5e9f05183d96388e51194abbdf4148f94c723aa7f0d5f9304930000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000908f7b5ae17ada30f042b2a9480bda6d9aa08f5e47b044a9718c3a180272bd257e96ae2a4c1568849b42b3c97bd8df59287511b5e907172235ffdaddbb7866c04b31043bac2ca6f3c83034d5ca5bbe8d4bc435767c535cee85558457133b78820c545948a3aa078ac61d6e2aaec93f2a2fb25b6fbdedca39afdc39bc46acfd9e579b10c669a45a07e1c5c72a03fcc1eae99e106dc6ce72de00d043390a672998bf9534352a5dfbbf58e23c0a68692501c8fea19a02aea6d2a681443ff35ff0fe53c92ee500602085c523cef2ec5fa2960676d6605471b8d84df37db4d79be3a645227fb335048ea16f1bfeedb472d40a6179a04c54f03dc5ab4499da53b120469e2357814e0a9d8bbbb823b41d4608d1dfcfe5bdfd7a2912c903be87d5fb8260b156d7864815a15152285554cb2c1610624811d8f73c90105e65dfc960026ce6ed693b24bacb8fbd46692bd91ebacc80fcacea972a6bb6a7ca8ddb9a36300412615a323a57524fd7316c8d2028238da45aa1107cd863ebc2f5de143eafd1b6247a94fce5181173483eee4162f5afa0295b9dcf109158e3fd90a3b5036f3e439cb0b6f9b673d0434c270b596b4c48443c2889e20c82e76cd543d4059bfb214c0e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082d1ba18bd81fb9550d6b5ac900784f5cff39dfc9dfbf488aaa0c781e7e0b38115a74d8740d8b7125996a7ffe519412f2fe53453995769e50ed8ad875d457adf42df8eb2b8fab649fc0aa4b5b57888bf0fb0d5b419b51b3f57a22cc6c7e2366825e8ade9da37dc8df5ac24eeb9d6f8f991b59f94137b2f7f645c13c651bbec925b4cd4a44bfbf2d137a090b586b7cc5173b6334a8d1d769e8aa77f90876554ff729625a4a160084079e5f8ee312d33aad37d09d5a72ea6965d0686f15264ab09a873523439da5629ba70e1ef1f0db6dc3c6607d34f0de14f67a2bcc01e5ba8af9dc97d38df66724e1f513a4555cf16481dec4429c61b62e76ae1df794a02f9ac08b7f84e15ab6687afc10cf3636fc4b873b97bf5d6f9867e0f52868b1b69dc6c842cdbde861b418910cf521f86765200da5851e1053e7e4645dae2f846ef1cbc20392ec57b45feeea29a20dd588a781605f597cdd58c5d6bf5ab63dca8579662ac090057d71424e145718665ae1f457b9ebb133fd52d346e9f1cac3d77ce0ce78833484f970ab6b78cbb0eb882c84c73677c62cd817947c982e7db5245c9416c486b7907e6d3384641874b7564510a8f7d2d2297181ad76d33005653db6174150000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000996aef716adff20778f55f48dcf841f415be83cbad163b17fa80824b05272dfed4fb391b4c0a0c2b366189412e86d47ef2002fe49329d97fc3a6d621a7afaedb25cf2f198402f3a5dc7a8b6b075d2ea74061a109cc33193a777bd028365b28fc5c8b6b41b907c2b06515a39cb97e25c377a53143c44d86995cd2a380fd5e48e9fad1937c73001df6692f113ea0f472e9b2e24ea8a6db08f4c6142a89cd73e4bb16ecda92725dcef3b5d0907393508ee6df1df6e960545c880e6061165bc775cd90255799059ef3d6e385ceded48f3b4d46116970b17629d7f2d1c973037bb7a7753185aba0484b5e9104c2adb7a22bf80c6dfff13703103a96e91a07ff4309c48af50836c6913e0ee37f64e4775434e279be7374336c18805f4a7d1af8ac2904ca10ff77a1a7dbc5e3d87e8e57fcce6a3c74fc99730e4bf621d7cf9d2f3880f412c3ef936bcd220ad8393619350034ca32d19e369d8cfbd87d34dc93c1f603b248646301a86ff6cfe5cae4e6efe9522526e968e32a9a62776cd24469e44e44da79ef97817751b555dbe3acc5ded5d2ef4e7a3c1b48a24e4e4b2c232b7cfd63a95fc059e406ec8ef4915e1cb1a2d00b78ca091c46e8a08b70df5a079e63d6dcd2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014ecebab7adcbc4509949df7b64673287baee839876d6dbcaee995110f19a60c251a7385443012b57f92e2f41068d59fceb557e5f1fb0d4582ec32327899bac47b1242b8e57e07352a7d69404afbcc147cbfa22eedd94416aea33af4a2cf3139b3179768c1adcd592149e243b567d9aa6ee486647f2bfd880880ad4d39fb2bf6fbed01195eb114c96f072b4c693788b18cd5fe9b6854f46214a90ec41a3c15a36fb659d9785a94a0a6fa6cdd167f6f99cef8e8a6ebbb87d7597c11c15383650ce4c98f9cebeb991db4a04492d2399b47250b0f83cb990563f52a03d0a9d0380ad8e97b34f3d9dd85ba54ff24bdf34981e537f22ce52f34231ebfd0c6965910ab69e91cfbac7206efb4af223d9aa392923209c7647fcbca0a11d9de48fd35112ae1034063a5873331fef411ed7bec5c74531fc4ed5d384ab7e49e58cdb307e374b849a4080c18a79f0fafd1353a2a6b5dc66281255bcc6791330217f1e471345cfe3634aa3f2839d51772698f8d6fbaf9434a365dde986facc9f0baffdcf1ed43a2889a1e4f0f3eb891240746b3ae1c7a7af5b0a263cb5a87725e3a90d9f23540caa7c141127c39e4f8ea475b6af4f3acf782a0f61773fd98b6f78cd81da00a290000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a53dd82798d878487b93b0e62c66cd48eb9a3de8f351f0596e4f9007d26e4febd3a110ab3ffbaa78db5656dc1c2c4bd09b9a544fae9d755b13420f51dbc0a5f0ed3b42a760df09ce3908df25e45c28d7e300324c8df0656772aeaf8c016e9deb77c749a76b446206f389b74c65184c7f488fd04d3e45ace0de85f73b624ec6bd5cfe938dfc91f6bca16e019cc560c4c5b3c197b6577957f351c44a62ebe89ee6a0bfa73ece26fe6b13a2b9050d217d010535eccacce346e50afb0740741ce9afee9eaa76aab87257b7aa344cb018d18ed5e317b743efd561da0462654da3ef5866650d58e4ad9aa28ac27380b4a63871488be71fca855654c57022468d08b5681778af6512253c7dd28992d36f73ee60e717195a3c528eb0ff78870e615f72179167361a4b16234b96f276cdb609b4de5dea302d0d47ac644eeed173e957855c33f7f7a981760ed65442f779ede81b091ae07534dce5b61a2c6857f02b23d01cb57e7398a397d47affab98f923bdf812df261ab3b3cdea0248b16e8357ccc38db84732ef2cbb35fef94fd3413fcf0835370a1e0a8c84cfc2e43ec87198525b972ec13b80c106317330965382ad36f7a280125f827700e4697c1e0cd6e7d586da00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008df48b14205a231114d27d78aaf8bc9993f41dab2faf350a0ff96fb8f19426d9177951f8592e0e8f5ebef91c636927e287a6076082c29a7759b889a2bf5ceda3efa217e6d680c8c54ee66620eb3d9ae6cd41b66ffcf9bee6cf705726c8b0119a85f9e100acfc0133b4dae82f255c4cbf2e65d6b830c4c8bc0ded1f41a722d4b2d135231524879bd470f82d4342e61e9cbadc66d66e6ceb4eaf17cae69e6493b3a5ec3396197a5bf3d82c5e7e2a14543235b31a74e9904d424a442aba377f6f8e267a4979537e0f75317ac47f2c22fc616ed756a4e21036d3bffdc34a81a9511b394f482fc3da4532f3048c8ab27e745254f168788171878fb0b89b3bf6552a8ddfca2bc8a52f015d0b6be8452e951db82bbe038ca71f5f9a096e69332baf862f0621d9ec9a83e66f057e1db7f89a85090b7682446153a569c5b362196e4174783422a2eea3c111fa0d1b9a5b80d97a8ee159878780d3524667bedb4766bcf3e09d387dd3ebd57af1d585c40050adc73695fc302fe73983400700a101c265a6255ca426c545277b9f8a84eab2bed17bcec53c52493149813378eb210ee81e694241b2175554e9439f679d4f545834569e11814a764ca5958cae3fdc6d5f297da1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081808a6c67089bc1c911e335d53a53e9cc0d0c71a491424bc2d2bebaa6a2df5f2ced3e72ad011d4c679e22435ed61bf5ac8d76040f5f6b1fdf7ab9ae94d3cfb01e296446ea59bf93e4ac0b6460d4f16199598438b2930095aad94901dbb3d3f9dbf44bb450f7e6d04285a740846ffef3f916896e62d850b8a1947fd8e33c4fd59c39c92de852b2a9f882cba138fa7b7b7d4a706ebab7ab7aedb2d5e3cc4fcbe50474a5ced405882750448b661192f935c775052a3e8cabca3aa5ab6ec9bd10900294e803ee2b066f67263ce8be7005be7bc866815667a05e309969672beb8bb3ba814dfb370534554087325604cecf6abf1468d8e836bc3cfa29d88a63c75f8703409d80c8b22c8fd7f145d43fa4d2c5d54bdf60c2a14b00a35ebd4253c4619391fd453815045241f103bb4e1e2daf0e79e524a6c0ad0e866f4c6502403e07bd162c311c0dab1e784ecf74785eb7f2acac4154c93f18ede061ff7ac4edfcfd68f9358bbb51940045a3860a2c0ab0519d11c97d6d7f761d0c55c10beef4d89028683b2e2f64855d986d0e477cf0db1c4105acd7c3bdcf58fcc43713b920bf8dc901b070195635989c7bb43d6c77b7e09fbc9e744212456e014f671c762bee2b0a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5bc8798487b81a3d3c362ed0d30479712a35d539a84b5ac6d1157736d26e562d8c08e85187dad4f3ad2de6aef9a159a9aa28add0fed42bf4d42c509965fd0c18e201d3e244747d7cbdbc6d9597d04db0e8ee46c9c873a81e6429ef4f8a4434a9baff9497fed7aa35a88e8dd5e50b07e579be139bab2d174b825fea8dc9ef99f670e2c83528324a13accd2fb4ae2d2ca93a4186d6194ba59187c96da0fa1c2d0e5294f171719f16932de820001ac796bf4afb145c5107ca1a6fefabe53af90fcaada23fc317eaaffdff5dd3f773d45058301d0ea5d6ccbfa43c5949127e775d8b95cb50c490d28e9a42fad3df4ebb15f03c11dfafb8d001e24e43acfc6b8a03aaccf155afa19aa23c50dbd6041a5bde074c24d8c64f5f069d4f8479e51518f18da396575c80cb7e85d70d65c9f5eab446d53d69998c1a8e8fc83d1d7ae9e5817a6e9a1d9bf9cc97048b02b21ea2b3d06159c48dfc654dd85a9613295008d71cd9e490ce24500f2a4cd06350da514573ad1ddeedda6fbd7718dc1631705465d71c81195445e4197f6767f68a53232ad2256a8be442b5a5a5c51f1e8cf88eb8d9b726a40a19f7aa8b71a5bbd425d93e96e86c324bfbe0df5d053fe5a299e414906000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089002dc43321b1e50815393c5f3f08b8bc1386a00c2c1858e004ab5f9fac3e5db327e1e001a654542e4b6691f8420c12de7e1ede4b3d82e19bd3b36893af2cbc9a00fb245b5306a2bf9ba19adfdd37590e75f38c43ef818a5421e90119ed7232364adeed07f5952ed71093fa1d3efbce32b0de910b050fc48d7a92fd1c66705ee117c908a7979085d82f4d8c5fe8c0353df5f99def35b2b6874730df16975a1d301e784e5eaddb9fc95dbb120c1391171b7603463e1a5a7a04e2ee097efb5a16a42c489779af1941516d514932be2876aa643699186e72cdbd6a9e798870f208e8a6154ace91e17d7672e571a03e4954a53f08d21df5d103f4bb83a7fd4d23b36130b14423238ba0333df934e6649597fcd0f25efda08511c8d4bad11f6de62157993e4463da65768f7c3b1ddf34fd0307ccc545778491b173fb2b1d68218bb567d660920e895f4c1aeff851d7168633d3a85e1629b6b9addf7ffbd0ac0eb10d1ca88da6aa2718c70b748bc48522ac4319e892faa1b42ff1f7c9e31707f91b719316c2d70bbac3b1abb0674e5a43c4c53e4374492e2db903285688a291962ec4d208d30e3627fe93bf5157288f4aab318b7231327aca191b79251fca0a3de3a0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090d04dcddfcadb93947a6dae4f9bd892b21b88fa575bff42fd5de0876f9dad844747a3f4dc51831a5ce340a5c4c4cdd8b72c2bae95e079b10230ad0943339cd410c6d6542b6818f30a95665f3f38d307288ab80b9b8ad0f6c2926ae0a8a114c9761b1b969aac9782ddcbc1d96a2730a48aa1e96164307a4504db46fe0b43b47a3b60d4715273bc3e1f880de3d3dae909f1d3fa5f38a34990fb0c286f913c22a237dbb228c5da65e67a814dc8c133de824f4e91e7f59fbecae2785c4d722764f65090298befe5cae06c77bcf6718598f614872a53b415cdae5a348e945f228ed7c3bf843bda4967c2c07c3a8993059b517d9e20d4a204a6d4046df9e93efe7d99f3d32d5020d6d953ba7d441ded29480a8f4aefdbaa6fb09c5841a027fc56ca13630b612ff5522f4aa5dff82b25ae8c1a844787e3bacf23a867c35a36b596430b7899d43f891167516ea40267925eb3aebc22753e98e719e5ab36ef865a7bdb909df70106aecc5e298c0b9e08c264415771a9a2c236fd69554e9197ed9768dc3e5c34cc0b57c34c2b165c6e0d2665b9d365fd5900d42c8734dbf5d14b5ae88fb00b88b07314eefda2c0183f9c3ad82b77883a1a250f7d0f85bf2296a6ccf9a9be00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002450d3f27be960ca0ea312597d9c39d39f528cf85dae1ca7cd28b0148ca20d22fdfb742466b40186a3bb12e1fc67e6f596d2589a7b1139860c784124e58d3d9382f92b2a002bacde295057364123ec0148bd752c765af72315fd71483796449a10fd9efedeac9bb89758f28d9dcf2bfe036d57ddb7b02c529e2b6b2d45a9356e1723eb92f504dd85c85ea9d818327820a88e60a39237efd35380eb4fdb7c4efa22d71cd534920d550bb3665d93a63a34a81c83f8a7aaf5d3cc200d5497ed6dcb4f3a3fb93f3c503658cd636fc98458e6cc17a5d81cb6426a4387b1aba753ffc7428558595a8dc7abe90d895291353eaa646b97aab3500eb86ab808b8ac00567893763fb74c23fb83dedf8176fb13c7d6838fc1007a42548faf030a4e8a76126a4f5d56a2858b6c3449e4013a68f02fc6ff6e64985e98fb44b8558f4ca6397038b0e64d709dc46b6cf80e8fc8b407fc185f7d25fcf092751dca051c7b7792bf72739cca0cf2a59dbbf021254ff8e9c048bbac2b5936347bd3fe5ca9822301ca76523d523e530b172fe21b6dcd4f0fd7bc921b3ca0a0bf607df59aefb73d90c46f9840bb3bac3cfa69e8a6ba739eb3f809d80248bb2c3bb48abc90ef4e05ec6ea7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084acba0bd4349a9ec8a8fd9f1749278da5aaa9068d50d0fb24994bcc278d9ba02642e164a079b99a7f3135d334536c17a1bef4df129129fe0ec18d714ae898f91eacac36dde079346f228649844c6b485909c136e36b1cddcb67f65146750e17c6138be2db6773908cbde2bfd6b1df350fb140adb1affcfa7957a2edb22467c662250bd1e06bd8d0527530409359ac0a5c54e657247863f0245b742cddd4f1a904d3f4dd094005c50bcc58a0c58fd2c79272c2bd5c5964ddcb0c1761c522da0c979e8261230d80b91474aa5f73a38f68b82160d3435081a55f52c3b1cf49e5a62d491fe3ed6bfbd3248b82b1bf3839d3414f186a1050e817427c6188796518223cf08bb80b305a9ef5b6aa4a696bc7feda701c951c2139649f45d3a89a424854c9310455b455ef63685c8b8da6c068d5e7a105294a4b419502c2973a3370b704e26406bef77b1ec8a0ff6e918332961d6a2aa96ba99eb3cc134cdd5558c4f5f26d46c03db692616ac04ffd4373771e867b92635e76c3d6b6d42bc8918f770fbee59de2e536ad814b9970af39570c9879d3329b985f69a41ffcd7574641ca004774b1e25eb588687e443de82fb7c80124ea08dfd909343f8fe39a6bf9165639380000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000813f5932c654be521cd9854141ba26160e77ff1b8b2e34c75d6436fb9ab17e2a5d04576b30a272372dde9609b8293cd36e335fb804e863f72da6634e4f36028b88f57e23e86287be90dd25aa27642eec14281d700842ebc090756083b95a54afe1c02ba103e7604e18cbcf6527bee382fc2882c13a9a4b0fbfa755132e3c88ee3bb5c6fbf49db316bbc1ed4790cae33fb0bf9a407f4ccc5b501ad20973b54799778187d3e1f802a81ab9e97c4e0663254cc100692736e0db3ce7df0e70629765681b2ce7b1d8504205ae5bd8a3cb5111cadd2d3c7b5309e2ea4839c1d0895f41ea4195bbe6fef9607b2a496e0fd9c5d6dec972f8307d9366775f220eb2e6c5c802c2b67d693ba88ce55344e158390adb32d25d3d7c0652e806b580bf3d06fc5675c4e0cc2cc60b4614e505d6afa6e642555f48eb70ccaca046d7a69b8b49ba4db15dd0698d5315ff6cdc1995deb39293b7e49db8fb18a9587d837f6fefb21cc292ad5d7b1e382ff455e8ddaff0918108959d157bc4f45c54b0cd4fa4a9a8fd34bfe87249fd10ab5ef0d0bc88fdb7075c6b5f4e74799cd6b809f0f7756d78d98dbf9658385de14c8bd71c3194b4918fc62e47958d4e4e4a533ae8587c84d6603800000004000000000000000c000000000000000000000000", + "037dd42f6123832cffd08bc965f92e28efb61c79f0ba180776db96c0e8b5029d0000000a0000000000000000000000000000000000000000000000000000000000000009009aa0c515b84d4e2a515786f1996bf0dbfa6bb992c56b78ed511d1bbfed152300089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00b9297c0ba7559abbd713d4ecf549a98e691902e030a01be90edd9712d6865e14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000a0298ef5acf806fd7df600de7f7e851c9ea004c152107df8d92a1f36d4eb4868fa00000c000650f63f93d4dd1483a036054f9adc8edc16ada2c2dce15d0e5b15ef773e3d9900000c8002f9c141be5a194dc2c5444f7f8bbbe3321efff104d17e90875c3896fc029f9100000c800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000070dbda180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000006d23358807e5c12aa0d58c3d956fc9344dd989f80b626f610ffc836aa29a5b7708ad1d7a0000000a0000000900000000000000000000000000000000000000000000000000000000000c205b484016b019acb0c9159ffd5541293c68fa5ddef92dfaf1018762094bd892c14af80d2085085212a08c1d226714cd97dc412e68388d994870985e05ae2c7929986dae110ba50921bb24803810473ea8a6846cc7cbf6c432a4ec9941ea6b74eb1c273a0222dc5be63ed3fbd77e17f0699e6b828ffd2050b3be0f48f69eab9311e7c45e2fd360c57bb5886b02e2b13e94ecf4273cbb80bbbbf5640ed572cb7aea72b32227bb9472f84d9d5a904bca902deb2b79366455f3ab6f4cfa16dcb053898575fa2bd1cbfebf36cf85db65cf6deecba19034e85e5f0219c4556679227636fa08c02d95fb501c6b17b2abcab8bad6b7ab980ccf886f87037c32968c66a7dd1dd866049df18436d700f3cbed79b2c18958b97a7112a33e8a69e540f4a323514fe3fb0c8ae5e067d4abd91a60d12478986ef45dee025a01b171a86732409f17a753ab2fa93222d16527c778a0cd20399c92adc1cd2fb6f35fbb49b3655dd2fa9fb6df12c7b16b4689b0a47f5700c0da243be7934122193e51da14a8c039da158a0cda1143202abba9394f89f859777faccec6bc2af537fc6e958441cf4f0647ca1805295975a780e150ac2d7f2ca1ff766cbb63573610fbfe042cbcfaa4f170002bff0082bb34cdffffb444b440c2fb797649cee415e7eea3b7981aef7d05445878100a8161a4dbc0460344762df6fb68472e8687379fac134362c8faaaa9112596362d04f675a88344592208c1a90c908d51fcb8a1501f6ba47a832d2278f96fd4f8059b8b7f6c2f33c75dad7c87c9b9dc148a8c5af64eb1c85f9ae52e524b449228053e9a96bb1f22b0204a14e54d51c4b447f861b35a02d3938ff426597f22bea603bcc68bde54a371d23b24371d373465fe4a0b28052827ad25276401429d93451881cac6f9b67e222a833d3413b5268913dfd34067a6989778bd510fb03da64101e869ae4dfd715095457a239b52ca6d0ae497af811ffc479946de1890e039d82375d3d9760b0979bf307e2c6c4b00fedb51f9c4192490241ce7feba7d5133231739dbb44e95d90bd1d5fd6454af506000a9a64f1623e93c1a848d2e64181a0207a6f29904c55ead2d6c760b81de245dc7518c84d6f9b189ac7a414cdf97fa550e2577b7c862b1f9cfc6ed3f051f7f947a6ab6478719cb5acdcf6824ff45d5212a460348fb665eb50f0ecb123e1bb3f9669919f1d37c2b978b5c193ce6a6b0230998b4d85c5f470e9cefa7777353a54b3eb7edaa187edc6508fa500895dfb7a62691bbb51be05b4b6f74c5d8962c60c99e48872074bf2b411092ad8f2036f0cf1cb5adbefc2f4bb31e29cb1251384de216d96420aa59207a582c8f07d7f5fbe627bbc6c318089cfcaa84f922c10f6ac40c7d49c45855d1092a6aa25a29481cf12a62eef8878485ddda1145dc30af5cae7506d8c90b390651267dbb0ae0e063861977c32339ff5691cee46222d3f3b04ce85ef02553b0894517ef58b8fb3332931e9dff41f052e0daca5a3113d511c6498867296f770074f34a0d24f23fcd5889299eeb562fab7ec0fb847db6c6d9e5570cdbf9fcf7c6eafa6d76bb4aa6508a750944f58ce7b57c4ac42257b1bbcf1f3891bec84383785b49711f7c2ff137f14c2ea696127e159330656718669ef98cc53121156fe89455957bfe93e5e8306c740df5aea00fa0deb92a21f1cab928442e1687d5f63fca2c0178560bd5909338b800435eafbeaecc3f97cbae415af573adbdee8ab660d1e42be7a7a64031738e30296bc334ccaf4d9382cf7f2209c547e38ea9ba90eb99492c90378b704d1a60c3031b9348185868c0d03651c01c09a823685a02020904bcd3af1e9f6a7d3d240c1d4e695535c542d4951b327dd4222b5ccc3da22633372587d6c9b537c413ec7a2020173859cb1298ebaa4cd43ab0497c12a0a3ebe1fe1597b630d4986a669a17192a4898c691facf13525a6aadb64dc8afbc6a64e49113b7fa9b34e7672e7b8f20f16ac18682bb6e429984553945393420bdf5d762a6e4fe7dcccb827c1b99c908f19d31e1cd82301bc5374c74142ade91aec1080d1f5e39d1ef088cfc21d94d25b2169c5463a4e734f1ed5ca650318690d9ee57e453d31abdb72552e1b38dd40b6b82cd6269db2c65f7b5a95a82f324cba97750b5b931d2071f652ab64afea10237039556034df518a71d4982fff5773d85bea8c7f86ae20b91539bb2d4a99f03bf0ae6bde68f5cfa15c93efcd055aa09b1b2b82bcba5a82443661ff2b49b2a1b80fb7f3e4558495cc68896f4ac19990ad07bf93c13b618497a8139263ccabc0cca8fe7d7d21a0f2d795cd65977a7b85cfa14b40de8a34cc345b928ae648c9d085dfb954a57e5070ef12060a89982cb5cc2c122b623b8e97460de9e82a1645d11178e4ef1c2bcd3fae127d3868bd9c2e2d9c0c9e47951d077e6bc7df5f860d61c35d3add040f5ad84bc4352dfe111c3a5c6c971c909dd9d5d2eae316ba74aba2e49b1a41de221664b62394293be4e24a2a62b45f2bbd969ba3d6760a476b7800db85a4016d6ff79e05f70dbd1fc432261a395ad4234e4d9b5e9a4d14b07aba42b58d9268680cf3e0f9031d928cff2f62659771ecc78f253063dd2b7296199031511c7d368d92ef0ab9985a863974a8d032a8c97b8e33d3c40201c6fd876b8b21df0ae8a733f15f6c9b40f61d6f69855c3e355dd30491f620730f086051609a93056cfb3c401af46fa8fb2e8ce02c1ec6a84b5adceb9c11bfccee07c6ba206f0028801b4a7bc0de6d9a03b90aa68fcf54eb788ad1b16b9c75f2f0385fe4d4e71224a9689aa18b8b8ed571584f33349181be89b4348801fe27e3f21b954c079d808782981a59bdf17a145b5625da390f43284c432cd378d839b007a46d8f26a5c400db1fded49175ee43ea86c5cba747ba8bf1b552afb3a5f84d48502bbcc10c71710cebb357a800f3839f2cbc388ad8a816b213564b2b37b045818b65be8bfe8b00843b80b103233ece41020ead1fc7764d7cf03913f3b0864250d889431a996430080f429c19b051e2997c4f58a49bcd73e8f9089ab5e19b9364dded358375d6d188ab46a1d4845b09156c58e8db263c64a85d28082e22e4a59d7a0079e598a5d0e4bab3a5de0ae232984ccfca8af3791b15d210b77202621fb64831e4e4afd2118190620f8c643e3702c988f34003bda3e375a4b93e20179c19e70c8ef7285c0269d53ae02ffde3ec0494b49622e85afc4cad14db47c1edd319c0a136f2d315f10aa8f83ce84bac302422bca4b76c63ae8eb2ffa279cf4976ecc98d4f789ac1905620486471139da0d2d306c7c4bbf0779d55c732821753a0c2ad03e7b8ef838078eebd0619175ef351692e0505271b88c66fdc1d715f86051eb9b61fc888c601a02fa8d5a01ca48ce026643031993b4de96316497bb0ab8616b205f33ff82f8167f07166f7b5d6fe7d8598abbdcc9e20e7d97280076695e3d81da9e1a21abfd2794079ab63d153d12f6bca0ad8a420706b69d972858ed9ea8d90d18f7b4290d0c907cc7d6ee2a6edc4f010a9c7ace63a89abbee6a8182a61bc0e6b3cee536d61828e443790e8c9a9a0bf7d2b09c64ed7f8913e68b012262e4cc60544b32ba4725f03dfd2bd0784ee596f243eaf1786ef950466b32cc73aa9fdeff7c9f3e88481db933c598457188a2027c9c33862d3eeabf9b26aeaee0ef499541c80d3a2e8519e171bf950d569536ca908796f8d6add7bcb3fdb3aaf5c944afde18f20b03af2a9a5bcd8f1c21691f03f281fa66ef0d8e31fc5fb8e52ac95ad15b50a097e2331aa8ec97e77190fdd257a65f8cded4e4e3262f7a9058e4dd0e9f084c41ff5800153fd432112557297b052ef3f7ad882a24ee440483306c3d80d991ff7f7340e720cbe0f855545d02694d0c17158e5ce052f75e1b6f9f694e8b6c2392a13b71b01a027a5c828f8c8b1b606d89ee69257277783aafeb8e88252194ce249967b5af2af3f7ecc7551d2dbdbc3d8136ac62b8fc7a5b8d10bb61bace15ea41794a697514d6cb93216c5fc1db3bb1cae25ecfe037dad29d116bd207c808bf716f344cbc0e9350d1c33d573d4accfbb9a2cb49974d2c3ad5fd9e81568c1ba0f22730f94e17e0b42139b9f97126181999c874d4ddd80d547832c42c2b0a38af1e81350deb0a05c0dcf00a12656f637ce23dc9bfab7bd8bfbded6115740d4f7da77256714b0451742cc05a4eb8479c10e73bba73aea72ac1447582f3be168e1f9e8e9ba9b916dd5647dc4a7af74234c9905c58f94cb52772c05ad71ae1c4f3e83be25a46eb063981eddc5763d4b52325a5ed62c5ec4e2e9826925a783c6740b09edfe3c5970ef4f95d448547a59a4c7a80aa1450a521685a9baf9960725c507bef69a35b9024130a8e3584f845766e4f85efec0f069e7eae265ef871feef0fbd023a2ab948226032326a030f92a4a84f515cbc0dd67e900b1140a3e799c684d07bdc061b59259fdd7ccb3df3e7a4f37ff2e7d6c2396243e4337dae56fa4cf23667b34132830f2d3540ecdbfd38d2ed76cca9b778cf2fe14ce7b99ee04eb6c0d6d2e0639c7e053ec4b95cccfcb8161a30fa5564adc3fd2f4b70467f3eb54f6cced791a1ad8d1b9b5d0e774b890793c543a60be75233d56bec6bd72eb47bab5f37f5e4b367f01ebc720815a856ade7c7aeede2f32da65c75bb8c9a69de495e49083327e95b440e81e772fd5e0a7706ecaa69bc20f0a9fef9b7f57fbce20fe101fda88991043f19856cfd05bd21fb6a096bb131d3538f52c1c4a66861948de2a9704b6d0e019410d8cea7d6d3e2d285938c408bca0876c4b6ab878b9ee43a576dd915a33cfbb328b815454fbacb8bc3802350c9e1a83cb11529cb2bc11bf4978fa21eb0fb349d17c86af26ce0194bcc3f6ad3611b3cdbae0f773534ebedecd1a7ac3b5c1044c71d9bec09e5f693c95675e4a3eaf1e9982cd24d5caa1a48841b19afe1ecde81bc0d2202dfbba6c2600605fde0d42c7c1ddadf9d178c5e4804714ed7f83938e93914003472d48b40aa94507387ef348f58f49efc4acea2d88a8a2c0e3c7965723d20f5417f1db88fc0af1ae870edf846512606cad2e498bc52942ac10705ff217d133f48176c2d39fd48b64483e87c43d6c9556b18f96b3862cb1aab3db5b554152b43295f809bd11f4e5d6bbc628a72e7763cf55e79307d11aa8d4c93439018150a78d1fa33e78cd320cc018279d8b6ac5a6d3d8149bfd507600e7cfd80c1b02705a26d19b2a1d1d56927fa1578205e41388ec07fd1333519aab3b21c23bf6e2617f3b769dd69cd9cec76d1982fc07bd52176a4b69527ea09cf6fa55317091eaa01239ed9480830e57c0540240213c524bb479e787729433ac42b272faea3d89327770abe540010883d67917d11006ca3dbed2ca1f94ad514b50ff069df8bca642c9213b8df9d753d1af494cf7b6c3c1733f6317b87da9232cf149440286812810cf0b5fc885df00b48872d7fe2bc0bf8606bd56ba1af4d1de421a30bdb26781a140f578921ef3d198dd39664e59b5d2cdc68c2880dc287f083dae55f26e79eee2f63c07da9ec83665f4d70ebdfa914b63539cc6a87a21b035f978a460209ca56224c5c4b87e71b95776a531aab0a9e96dca072d33106a28e6875afdb4b05eea10a3d9ca90058336a3653e260bbd37fcff70a1198c64bb5564a588bb3b43379211be2c839bbf6fc6c1fa10b100978075423818c94dfd26bb1f96ecbce3d9d99c20b5848f671b06511cf10d3d108da028c6befc3343d088befca6e435e9ccb5b56003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000013118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000130d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000130a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000130b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000001329a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000013141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000001325e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000001312978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000132daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000013189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000131159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000001305ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000001305c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000001314d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000001303db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000132ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000131213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000131ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000001314fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000132b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000013305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000013280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000013223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000001317a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000001308858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000132618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000130f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000130e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000013172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000130b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000001305bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000013137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000132e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000132297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000132608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000001318373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000130422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000013204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000130afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000131998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000001328d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000131da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000001321d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000130ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000130e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000013107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000132f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000001309726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000001324f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000001303c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000131fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000013205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000001325110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000013283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000001321cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000013094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000130c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000131f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000132421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000131fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000131bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000013304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000013000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008090bc4f9021e723d68002f7ad6f56b1204a7a36a60f65c2f520907bd51daa8cac98595a2945037335cc64784dff83be23f6c3bab6abef55588c40bd3134f6214a8e9120f04e568453d3cd70a2369ea9b7f8120281e4a124a8cb8238692b2c09556aeedc1d3007cc9a0e03d250511003ced9e62517eb6836830ad0ddddfc7ac62de958a4a51d18a760de018eb32fafc3ea984de38861ac386f8014bcecbf0210e9a8caaea2ad0a43dacb262b2a178ef7123dcd45836426332a4fe6d1ec8d951cc55779e09b491a3e2d2f8e398d56fcc9219280d066a555e50497547753d976d927502be1f17242e31698124d2902f0af8fb90ce7c56a2c4241867e332943ba7a2a33f85ed376dfa1bc66d9b6c97fb2a1ba91a879a280be01305460e561f89475458d327499980569185b0e0f32f4a8677cf08e278548f7ad3dfdbaf3505b9875f5196fcaf307ce3b90d6b9e94c93c4474556cbb505ad465b450219697d58ba210e3a6e06f1ba2068848e20a0cda965b16a0ad7700571c4abd9fffb27a0f7c0b054a745cfc72aefd9033c19497d7bbe856799876e139113c6158e5bd225e2c0ca1a56cc9f15369bea8192e12e7d0584d052512a5018b59a105721ca1b04d5128b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a02bebaf8a7cac0f0723fade8fc009812638fedab8857aee8e8d8ed824862184ab2b300d4c918f3804477adc310c2ec0c938afe0c38e68de179032025cc7d36612dce9d5428efc0092fadb08a60b658643f5f0249e0d8c298f43f61a4b0fa7b82745c0fc0aed25ca3ed3c0d698a1f996cf4ea60f4427273a2c5ef12b15e4111e866cd7ac43864d9175310c5998556911d2790654d935af909268ce3b94e9350a15f1a224bdcb8e300ca67b7be8e0712a15fa499efc27fcee6dbb374737e628cd5b402f1a5fa788e03f3257663b90a8601a69d31ac0f9b6e0349e3e2dd35eec658d45ec103a7a5b4ebe44e9ee2311959af9acfb30b3834099d4934452bd37cfbc78be9abc37a8c5c132d8679cd1c5f0fa5f8a6906c8749f6ec42073d1bca3b04f2a5e41c50e5147a53cf5cb36cb6ee7f9a50d69c3d87770c2b93eef8307db43e40b42753e4ab72e2179990553880984d8d64b0a878aa94ecbb9f2533057c2a699f38fa1963807833c7611f29dff094744be13fd63b305ba1ef5c2099866e41006285daa3e8e88007988858c37df127720f27a46e583f7382da4b8a3a0498adf2092651656496455fb9c83ebd7c1903b41d91c3a732cc8f9c9b2ea848ea7495b0000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ed9757f4b736285beef683dc56fa8eeca9c67335548e819eedf44ebc0127a871a5b5f7f701dc7c8d690b99e9eb344a275fecb47411e1b004e73b3694ca4f464d906e1ff79804fc3283fcf7b8ee3be3ff40383fb8e9da1fa1283086e173c7c0e62192222e6981689a144c57157e81d5fb0922543e80b4f34406fa2c1a4a2f625c745f76f55cf9ff162311c0e58116e5056f2639e35c19a09704f4ccf5bc11e35b1195cd792ee1d53f33d05ed9fccde8231161939824f0c8689cbbc36d0e597f97fa4a67d880904b948bdc3989094177cad8cdd83c0351d8f2614c1e04f217b8108a6621797324024f39ec4994c7967bed17df263ca3953f54ce80def6455e026d977be0d6dfc15353e74c6d92d9441e4bbbbd54ba6ed4f3544ab4cefb27ea42b17e8facd71214f081313344731159d4f15dce6048a13b6b086922818218079b70e553eaa964271d2a998839246851a6bc7039c138621b6c0cb2afcb362a192df6482210f37e2b3bc0291091370ebd75503feb052b6a41b4a1b7310fce4f53c7b45ae77c53d513f1f5e30ae59d4374b04d05bfd5d4b284efd4f88039b966816c635fe3c135f3c1ffd4a86fcdb30aaa51ebf9ff2632d323799c716d3e4f2afe1a50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815cc65308a8d9f2e21d71e366f23959d53cc87adca887e06ae00ac11258f2dab5ca097264d1f1e30ff5f125c85b1ab320a36c4c3eb9fbb83d566ddb59d868db77c2e251e7efe466250ea1524f5eb5cde5b3f9a836b27b594ee4ac72051f2a175594552a714dd55bdacf8dc72d0da8fb6c986188d474ad9ba8797598be9b63696d0dac1cdcee97c44aa1a4d65009f14ae782ba75e4d2da5856799965a225ab8bdbe309e6b60a18622d17a2dd13885f0f9a26b60715020d0e71957a5763755ceec46555ec04fc117c8c43b964834b277756a70dfbcb38c0c142456b3c7b76195ad99f27477019f249c9580584d95a5fdabbc123562d0d1de45c25c834dbd0ec3ecf99251d0e48c10dd373e9e9ae2737feba3f5dda31acc6597093d75a4a6ec5ed18c218b0308d5f993ced189ab1c20118442f55993c79686c8ad7b8493397123de74e2e5fbe7b2a1fe24fe8e5f32a5e35f27c1b86bfadbf67dca1fbeb3df3492e5090b42a7d58c5b13bf63c0efc0dda1b7a63b8f6df0eeb1c8e3cc7661308c4bd889ddac38cec0990219c1de0fbaead46d622c8fd2da5bd07a5115589b4d56e39cbb243a30204d45102123d851bdd025c7ce8345aee6dc7fef628d443c35849410000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000167406655004c3f70cb78b0396fad97f3ad066b9f104a34bf7f0e0507e7e04a7c4fef711986008c6802690ffe3b9e9686cb84d025adacd179faef1d162e38b94c8cb6fef256611703fe491ec42bf34c3126e22bdc84a518189840db226dc85b53eba6cb36cd829c1e95fac9aa5840988684c3f215e2102c20cfa3f228b6ea1cd81c9942898a887b55643e2dbfb8ed9ee5f1299f63a33ed32b037f4765aa02273009278da4f2f1ae5d185afce8e06c0847750aa98bd8da256679581493e219f78820c140c9206fedfb1bde5798cdb894e322b07207cc1d11bad5b8ca35afed1327d8ec597ab5818d356b31227780335a723ceabbab0dec0378f720dd67c854852f989b7e950677e397a08efa188593b9ac922b57f516dfcf7141a4fd5378b2103b27363226830bca3db1ef6f62713420f0cc89e321aea6a874f73815cdad9895846f116143b9dfddc68c599cddfa87ba663f362813bb6b781e9be9162638af82b3a005b6c70f41e156253fbb673e394840efb2d6d353100bbe301140f1d1cfa57138aa0c085568999ec635e28c43d72dca7d68c754c6abf9fbe35bea8186a9f2d32e08a4d4ed43fb0f441a25643d187c95441dff7442178eb95c2ca5580c49d4700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c8b28a85d69738e8a813971678c6a2ff945fd25212f816508d9c8c13cd5aef3e534bf68e3ae0e1fa0485cc32379557b90c1472824f7d08348826fbf0b70120411ef7a67a6ba5c62c4aafe4047f289baaae6561c60d7ba0280b4f9031510fc8f1ee29d1beaad43a7d7129f3ba4d62e2b61b5ba84274a6a7de5e0eb7c84ead5c0291fc8d2a4f15331f642e93c264ccb5516704918c5fd06f64b79bc3812995b0d2737222740b95c9df834d5ce0e8c5b112c78983c63e58ed0bddb142659e7a6d06f9ed9d3e0f58b2c4cf84415c2f534842ba7c483c936e5ca9ac869a99dff90d13082ec23da4263846f29b0aebd84310ca9abdcce881732f2b09c82ee758d1012ebf12d6fbba88d911de9941dfa22d54c2d4ed829dac0bd83cdb271b9447dca20cb71343c0f47d4c2b7befbd98e5ca63faf7ca5f9545a102a9e2946eafa787572477b11b1d6077b9eb7848436b82be66b0efbcaa6473c03135f3e89931357db7a925cf85d0a5e78dfea1f0363ecb52065d25234fe5fecb2fc261615f170fcd755b2d4db7bd4857e702b3c45619019f2dbab3bc09c7f05e1da4bd55914f8fe1f972ff5a1fc20637712729574a018e54cd41bf63574872380822c762b314e58e6960000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a108ec4b1838dfca3b5327515853c42a9001bab1f527950a0574f1d68a71cb2740b7fa55c7466b42a10340102c842c7acd4137b990e79dc1cd91a3fae2eb0469c52beb84e1d13697749b80afa44f72c23e1ec4dec11a15be5a8db396e21d265fb964d35fd934d3c59e5dfbb0df87296cc38b4b33af6c5b809317a2367f8206e5387ad5e86ab2553554553dcea587b09923d2b617d531990234bc565357488392130bc6f2e1344b764648f2225ba67388a3cb63fec33c6cda38588952ae4665b90099aaf43f19e2a357d223a221fb33559f40037b4a5d473fc85791383c71737dc6ac8f45be0988cf4be632085bbbccc9da182f829e6a01d0fc8fc80514cc0f26e025337ab1e018752401abd6f3ba2beb2b7fcf8879b8e9db8f22926b75f0147551d57742dbfdd6a0de1d55b633872f65a48d24c397c8dce60d4c383256b6848c4a6713d82513f65ce9538bf797786c2a6f2593b9cee0d177a42b6768ae0b915a85819892e47f7c61eea8bc2b964cac9733161ad03a2a707d76e94ad69ae3091b4a611b0a9d71ceece29aca1e8e4cb28a9a423f60e983fd654428afbd74a847096c5d509ddd8def3f5a95e7edc5f99460e14961be98d6016b4317d90927deddd700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e704389403c34789359b20f69d4561c49bf67dac6089a534d468a8435dd5cda1ae09bacc6bc79cf89b6ca541281e988c55a2e192b9bad5d5b082cc3f88008969a1f1635ee5eb4c59fda8d420ee96345d6e503599e44d7d3bfde7a7868e1dfc981955114711ca2af44bc53c9d4decf0baeb24001ca06db7ac8d3b0226595d0bee832a5a70d3ae49ae3cda162475a2a7ce806c3194322f32f88b551666f5379237833b3027369e96ffce5dab58bd5eacacde54d598b2b0765de372c560a611718ddc656f09cb168fe94d92b60dc25a4d60982546cb1c2c96c390f4e85d0f9b6308dc859b9fd371a229a74e2f84edf9d6cd29344745e935dea046ee3c036883daf8e48dca887ff954d5a85845707bce6ecc81f81881c240382de5bf8fe4fb7290a2a1af2b53a80dbf5211a4a18b25f2863ad0c0f0d500b8ad44d1f07ad1cba3337511f797d42a834276f071c48519d93aa58b0d291fca4e16f0557931e4f792f7c8dcb742d44a7a065e5e2fe3e6affeb91b13bc31704eb81def5032c85a921d30dad0134d71758fc7534e326604923febec6e166bee64ee1d7e7b786a6dd0f9bcc3ced334df410aa0147863598bbc6dde1c2889c4e950b524d9febe041d2b5647d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095d22137472baca02cf8c2467a1826d81e36b9df4492003b7b37bce9d438be8a5a2ef0a26fa9f77221a8dcf4b60c341690f9a96849e4a2e8ffbf473137f8df2160ae4c6739df997266877eb45f0bdf4bff951c3fa63ec77d6684211167c0bc61c080f550729812ad71299cd0143f422dd1956e63b9107bba515b50eab6f417f412b5a5a194965a605b7982397e94bcc13dd70f2b9bd2bf5cae34a464420ca500dd1b4b9385bdfe52f96ccebfa6aa9ce51c167a30b1904582e0d1b5f3c8e0afb645b89cb86c3414a95670093dec9643f4df1720cb18c3446fe1815196dc696413fa6d266fbdb196c4a3cec821e653422f91b11eca36eeb40623f3b4f3d6397bd5b5e9c8d27e6503a3200d9880c26c1c696b5f2cefe8e328e32c2167434f6454c06a647fc9ea59863b96826ecb4247dcf87fd5a846e36ee874e7cbd2e78f54b71c22828fb55bad6e719d41b092e7cfdf256e6da33baa7d34732acde4ad4f5726ed7985059079ca296fa04129a84d3268f6b1174e3179386b6928f7fef7ec2e2783f547dddfe894d7591874547804663215e17e39d91f5e84e97309456ee8f97b6f85397adece4dadb392941b4b2d9a059edad2ed47e4cc0635fc21eefb629c294b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002235a46f8a7f82bef76b05407b02dfdb564c79d7b77c6e732876d83c482ceb74be3f5e29210c1231a4b428f5c5895bb1158a1f0937258fa0cfe7c0298f0eb43370d89af7294a0b55485aeb5788b6029a04b610ac0b838949a006b73e06f6b3e5d186d1a0dc46f2a27910e4951cc82d4162bd9bfd45ebcdf8d64b2602e2eccfa71d19bd5f96dd1fa636b0a870afba90d29667097cb8103ba52c73c4b12107f529b48a7aa826a210b67b9377ed65644babe3f3dd1f83584ddcb29da2af20d23d6b23df6aa777d632f6aaa5320099f9840c74766f6888c9c5b6c28fc7fd9a96b1989560232c3cc6dae480421eb81200eb4d3e0f1e8f38fc2626678463f04e7ace2823cff73d9e13307892fa90467aee41e271b92e36d4892518a1b7f361fe560f8173a964655b61afba24007f053bc078d8756a17b8679401c7470e41fbde1789d29e5ed17c26d93f09b03c1b813d57d1728d9e355d4ba9ac40a4a5ab5ec05567060c4dd6523627e5c83480bee1ea77f7f22a69d59270c30641f95520b08274f3265f747d80ae249c52aceac9bfc1aedd2899df2cb5fe76192d19e66a66ef739ebe2e1358ccbe108f4f56d0400d11ff26815e7ed8353ca95c079fb5e89194c67eaf000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013192c624ad3ef78751ed36a0e665b2567494ead762a018da5cfa1d04bee6d6a3b061872516153f153abd7033c893c25504f2f3f90dbdde16044e54edeabd9518cf6b7014f23849cafbaaf0e7da69c93abe6c18288929b2b34460c17249200681dfd42f85ad7e14d768e942510e50ebde12b473f7ee3e2e793b01a34eb190599faf117744586fa3d00c6343702b5774a152ce8010191185e0aa883c6196804063f588ea8c56f3ad20313160d66bdaf5492a498d5d8af819560124a50bfae780942f6d27852caed25118f378aa8a3bbb836ab43238903abfa379e5e24325e721e59d1d9357abfcf97d912d01c8fc274cffb1139c2f9f8b3f1bf2525176ff56e271207ea4e19ce61e9f7f7b940490d23204389d7816a6a5f37a1311526d9fea61ced3a1a593b7a0bacff0899e60fa0d0402060b8dc543c7e15a1b5b202d2371ace00e0585a66465d5a1217e62588fc607f2989b10778554ae2662e08f15c2b7a1abe6245cfebda18b2b514ce37383b01aa264ca213f9166a603d8b34b3330c861b6c22fae5ede8ae3651c1698401ff76769dbcc8d39143ca34a78f6bd01cf43fff7c8a0f6ca8ec6f95dbb6171d13ceb584220f251ace9084693fdecf64c2d4c935000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085b63ac587f36d7269d57237013b788b06c82aa7e1f58701f1e0a1a9080a3407e67e610fdac682862575d675ecbd17ab75399ef58771b50c0ccf31adec5a1ea500888262df7fb18a89243ee4d070006ad92294ff1bb050f345ad6aeb0d676ac66232c0d1fdfaadb806f28db946236d2edafa2673069042b36f61aff3d66a1d07af4efef78ea7336c1e8b122942597b7be60e7d241987c5476c9d24855bba9a733a774bbe0721461b4a643d82c8c7ec559b6f65382a07d960b349493125d29c21950b980085ba4df5032650c8ce69d9619b8a9276b82123e333d9ba64695c71d64796f0733a51b10d6066d3608c1ba221fe80f8c26e9ca6031e3da3f748b4cafa142bbc43ba6e58d26f7260f27b5d5474aaf43788eaf6e5b597252f7a1d62a71090fd7365526e9ee023c389f4174b448dc3287a12ab4ece15fb321deb97260aaf747296e2913df35b28a79b8cda0c7ce5ec17c101b56bac45d8087b3613129e58349e3545e98c41bf55b1c11650050832bba212c09868878b1c1b29f4fdbd486458843ef38660f09ae80ed5474518e5fc362fc695844b661d2446afc40decb7a8f65f8d11e30fb78ecc1c6c581b262efc8958d388e5d64208927f9ff1a038f3b500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a927096a29fe3e3686c0e34b51d252a2260dce7bb97161fbdfd7e8ad4b1a7935ab6d2fe0ffa92c8f1c72047264f2fe63388eb63931c4394f393a9a5e8e36b18fdb46154ea9bfa0c6d53adcdf5c8dbdf7e35049b44f9446488aa24d7b55a365d2e009078ac3a7e364d2f1dfa4ae1eb23c8166b6707a3a5b09f57f475b5d0df75fd8ba827726d599b9abb1051d99e3ecd557d3b9247a93e346e7b2a88591bf73f29e6b9ade097ac605c3f6e8edb514b21394c40ccf09768808afc3d1039bc76aad5dcda4728c6f61bfa153fa0d16c052dc80126bc9ce31cb2c1e2d34c2b02350c0d364f60d765c7c4f8941498ae6138e464646b3b09702732796cff49cecede6a01c0578d30506fddf2b4dd1bc80d89277b3f003603f18d52ea13f30c7f8124a6b49ce1fd1b77024db693a84ea5b2a5e892b24beebc1b9c288cdf9284e44f30fcad34b5e4e611e04291682d376e3a58415d5c4f2e174f2a6cb4e54332def0fb304827ea235fcd27f584384d23546388de21cf05e2ea007605b946d34c7c7e280c29c4d9c3f805ae2de5d0fac75b28da29b4e64cdb475637148e91405b6173d3272e1d68f8c7a5529ff97fa990e9706dbd73b3af7096f3c03dce506c9c1897764300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e150f9f7d58505f5a149e6e377c4f539940a97f93af059c7d58b6f9c930d5c0bb5f9c47a9bbee0c5e64d3cdb4bf85ad78195fa50a3fbc9bed7ab8f9313650f8d36e42181f12781d203d1850507ee983d39cbc3d88bf274ec0058f84f07ce2acb51d2c68f81c38daafb856b9a2c6ea7397677db506deae142b20c0893344d903f7361622e66b27f54adc4682911582c1f9983ec2a1ccfd7f148ab1a503c7c6baa5527746aeace782e01ba09dfdfa94ad5e20ae62d93f5c3748bbd2d81bb75ae729183c6d17da6ba88e42b89f1c5ae885c7ac51cb33f1889ea5157d26f04cf7687a882467089ce95d22eb90ed081cd9abe8119a247dfc6ac5792fbad0b3eb6d757bf182d3438e6da9a4ee4a723f44a5084ceefc9da25f2f244f02b185a2497116c5eb616b1b65b563dbeac8db913d3f18e9b949d6770cb23efffef0bf718f96d67a7704413017465ed06f70096b8166e219d79da79af393b25c5fc0d8d82ef64235497d7a84d847464f8b0976b46ceca737f52f90fc1728b4e10dd65fa3f796d0e88b0c889a897bf3bbea6569392d2af42bbff075fb53bbeee807934723211e82fd0fea8ea2d95c582b9b346e287b2baf510050be59f4e42debd388df9948b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e5467b45b909f415a1101f675ef9e21ace26877b10b83c7a385a89f7ea1450bf0c1c4ab09169736d6d6c223657142c0c11d3cc6f8e95c3f6398ae6692db1293419a22a60e819b7bf52aa27cf2e1b99c7ddcc7ab74b1c0ef2efc92bb01ec160d573a08538fab00ce32c723429bbbc430562690d4d23773e4ff4cbbfe0a825dc42c74f0bb5d4d6fddffaea0331e8add15c2e6393306038d178e304c52adc8f0caeed0f4a425fc2a2e0dca2748609b1e1a8e5f6ca32b4c8f805b20ace9bd7e4ccd51d2231cc235f0e3943eec01889240fb682acb719f8218e5435d132ec13630d87fcd253c106fbc9f1fd74a02a3c838540591855b876cac0a1934bed8883e5e51174b64075c73cd336c6220a109178513827782b3851794ca247305879847d9f58f4b0626620130ac0bc2be3248d3e272900575c0b54dafd2f9dab98941fdab27dfd5af02c87907ea8e145b2335c37f71cf2425bff72e943c08e329b8bc63744f9ae6ce33c289b024b82f30002802b4400e7ec2951deede59b1607d3c70ec28589ae8de33be62e86c69d27e080a543d28daf656cd88d860e0e940c23e80447cc559b3697a25207dd7f973706b5d9ac4e3ba1f90218a6b4136b88f5e620e6cdb1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029c288182a644cc6e9a6a328a099b078c8b7cbe08373a800528f3254078762a010e99fa1cb445454202f0665f8885c326129bffc5b894e8d03141c3fd5e082cbdf1e11eee45456764f4b16df38cbdafe580fc19002ea768e3f6ef319909935ee4ac1a54695d005255332362a13b91f3b9e6b9e3211377a58dc6b9a078f2ccc3a56af1ad8074b1bbf10c9ba70530ba015a1be9848b8c7bc8575c3bf825877b251bfc289258a9b7d70d5a324ffebb6e906f1c6e52e86059336ee71534e606bdc6632776d09033e2594f8f86f1a4a22fd96d152e5640d98f5f5814ef9fa91d494cb9737534ccb545adea75e279a81538e1763b3e3d7386575b7341180a283e063c925c0a9d26c0abc3b3fa5151bc934fc7eab7ebc6c3161fb8a4a5c3735c4617c62c83bf0484ab9e3fef028753dde412d14346254d68a8c4d12e81ca3a438a179126b7137ff5fb02ff0fcd8c8214c27812f397f154c06ec4b2f8f1543e1ee99ff726b0865044406c8700dd41202f018db3c8b29d36a39dbcebb0889b3a073cd490dd6de78270a2d2a032971e9eb1fc5ce54974881c801c1967c4e464573b05f7c43dfef8de858dd1e352819f00072cccc3c497583af491891a0025f44ebdaae2b600000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a356f13a84a32a3dd67ffe10d65e4ff64bee31eaf5880c81174f6e93d5f6b9f9270ee9c4c025143531df5f3af16accbc072cacfe1cab6c548ec599028836d45e400e65c50abaae575a296a0b99e04c915fb8eedae6c2c4ef5268a879421cd811cdd83e7183bcbf94793eaaed090e7c1ba9b68732e953412cf78bb00b4c305be65f5fa5309b98092f0f42bf5b03cb72a41af9a8dce8d16064c3b3d118ee7149f31d4bc817b89ad811f87b759c998e76ab62f630d00986889d5fff8700d39bbb789c0743001496650bb8068e917f6a2bea59e1f2dea66891872c24aa2f4b0b201abbc212260a8e61da58aa9e186f8d9c3e3a15ad31beb9da91d4c1bbb87dac55b498b9d5e1cf5068ef5b6e09e368a3d8153e00b601d5bf5a277f6c56f1b32f01dc9dc609d444acf0b92cd2b07c1ecdfffd9d4845e65ef23b70fdab82aa18fe92f746c4e35c37182c1ba4c4bff6f4ed50c5cbed9826ffae94c331431b0c126ad6d7cb48e4fe0207753942400d428cb1acd8fa49d7de3ae575f5914cbc722b025a8294fd202c4796bfb422376023cff8baf0f0c30e4ba72df9b7ad92e19d698ed9fd67c771508c753578282861dad638823b61c9fafe3de97e0fe20ff4031e796b1f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c1534eb36cc841df0f501d8fd0d693f4d88ea838184a02e34b3e26731be08d18bb5c9665d7146da15d664f4f41fe4e58673142d7148f351fd14b192ae697b7091fa7a9feb677407c4974a83e16568e8d6c76d5d635809b2a44c488de40816080cc9dd81cfc8678d6480e5b148f78757321f44add7bdc874cf4b05cfba77e596421f5cee6cdd097dc8854e3ce4a2df7e8634635a94895432c15e7f337c2bbd32bad2a81fa743fc1946c338379fd59b08d650354ef64c7fc0fbdd4b6ddd7a07f01df086f26636aae8c3096b76bfd6fdbb6d96826be03c8277b242e7e16c2e86588fd945de3c46a77d330301c9375e6525b2e0a63e33834d91dfb6ff025595359ea19c1ccc04ef07c8dc7c20b37577713bf9af74458344d4921e3607e70055d8135be18c90e66a7e404218e7d014c824d1a7e8bd0cbb61b59d8d18331133408c471d7654c8b4f423c56db910509ab08efca424bbe46a347c9b02ad89872492325a7c37b40476f5cfc2f090fdbcf120e0409e175282c9ed9661f6f54881884ee171206d564904da86c1a73f2dc8b42f4a1d2c91280b3551f6bd87d5ede3234ef9c65bf62a0f65f62d469c84b2dadaa0d893ab2deca29dae8a483f4f5b9df26221400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d4bedf0e53b44d95005ace111abca4ca644fc09bf4bd154aea6a7758490f8d84227367ffdf90b5ed0585fa6f2644b5cc2c1de2e044eb69114f6d266e6731f46d54ad3dae9965b2d10dcc13bf3e43f19020dba0f09fe903614b40e9aa8bafcc311b977d7ce004677ddf224039e0910b6771a35b5f4faa68e122d0ee97b07c8d92ad131efc997dfcc34f03dfa153271d5d7ff6e7da91e68901fcb6aa1e7077b87c3ebaee3d39e941ce96bb338ec67b11654be5444180fb8d65b8bd1c2bd6f501017c67fad106ec05bfe328122a5019213b0fa695ffeb8edfd5e1cd70b055e5a7dac597763c2197489795b405c2465473a71d63ea5ae5a59a69d3deae95aaf760ffde054a34abbdaa371fe11babb401aa8f311634fa562bee3ae6a1518314ee91bbab6706c0f893e9afeb41efb9a38ce8ff3bb737b207dff35ae3c9364543c424b37a0b754d55f3cc8efc9beaa2a905f9e0611538714956adc91c8af5eb4ad9e883da561feba76c187ee990ae08bb0e88668a384dc143cf6ef1e06b8eedcb0c8f877c121fdd2689fcc750561b73eea894f1078cd6410d3f725e82932889a7fe7076767d36c3f7002bcd793928b142f359794285d87049d1c380b1c13ec365e1fdb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aff83b6ecf4b13d2bc7bfd8d31cc1d5c46dc77bbf9df0f9662802ee3dc0be0f4d613b83d9ef3017cdde7b54084f2f1b01af2690855ff8f288b1458aa6f1a8cbb7debf43626bca00431892cd52ebcd53892ca0a8c94c7d789a033b3e094458fed1aabca9586ea8af2b26fb1633f0f1579e2d053f9dcbabfd0f70b39e4f06654e3835ecb28bd39bac03f59060813129926290216e9a92bf218a4dea1a95bc34633049c0d11e72e335e37135272bc39ab392c7a2354fbc4de3ddfbc7873fd8c416dace0423cc427f3c517c4f923ee3b27f42fb831aa785956c6978a8f52b41b967ae965a125a80feebbe0487d99b08270df64cce7ffd7d4ee764baf6c293887065e49ac20730dd7aa6040ee7f0236668dba87bafb3881bb88a2cd7a383cc63237ec5552166b9d2ae15d6dbe8ec0b8826015843c87c9591f9272ae1215d6ce22b44c75c12f34c65106f12dea0ae869f220fef69d68f5978e50ca65c621013ea0ce6a64fb3ca7a660e9c13fda23325d8f7f2a08a5dc023b93ed15567cf1c3e6dfc51ac02645c56ff6881159312288e6a20ba20be9cf834c11506b92ff284363411ef0a0b267394ddb18f4d161139b0c0e252cec5b68c8ad48963684b642842131c0e20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089206aaa9c54a9580394bcf8f996e46bf0fd8255735e7b9036dc26268f58da10a73672cf4d81100f05b75ee9d37e05224e82a61ff8861aee0a5b97dc4f1dee1ff6bb6c73377a5efaf76e550daa47ade22b81a93ba17373de659e27a9d02b9f3ff153f5c287bb67f94fed9a12219f82ece5e67a96532c0fe4f32724947feb59056a35b5c4fa7f443973caafceaa7fb3a9bb4f6cbd77aab202175b01f56e1d5e428de3726e9299db9fcdb373bb22b9f7bb893a7c159f6e5b7e070ef9eb2961e589f7c5d20efab0348d9368944b47f87a0d21507509accd5350c69a3640e17cb87f8592c7f1284c63dbf078d29188fc6adf402b231f89d2b37ce0cc2e8266da9aeb2f2abf642bfaf0d7b75512914403b6572770cd4cf69ea98e4b078089dc0e8f43d7b1efc81ca045d0418ad0ce6ca3a788e1a4def13f3440345fb5d3ca40d02269f7412ebb7e5c002b80c8c778682fe71d4b872fd384b4335d81fd5a6a752f58c5bba6cc96ffd45331f30a7673f29e99ca641fc90a4edebef0eac9bfb865ce8ff7b8525e1a43c787cd1ba7736a2629f3b69eb1f85f985eb909cd36e6dbda67a1f3818c9608d349cf4976e58ded51c6f947cf7b02805b755a9c326525d21705b2200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b2a6205a43bc973db1b9aa7e895c71ee71e2d20d6a77538022f4cf181eae3553491b7cf4980b556aaada311be94dea5f8ee2386ca9cbaf260779a5018e59018c3be27cf49990c429409abac082090ce921d0f7368b547fb3a57fe3b971808808e7e3f6b08f7225b810a40ecf3d6876a979908b2ca44bef89ac1ab97bc52d67140c30d62770d2e3e7b6a9c84853b3098530f8d5c84a02de8b04d7ca6cfae4a1cc67928179fe146763d7979e77ba277f32940ea98fdd2ace4383f9405728a5264c85a9b196b5e7293a38df4f575b06456bf80501ad024ba598d281b4e60f87f755010f9ee077d0cb8f75725acad56b8428661d1fd57999ff9a99f5e244417b61effc1730778aa11b0009c24c4893cc40bcbccf8a3ba2cf17f95850f25fb91cd55876516e1a0e55a5853f3bdf29bc6e809dd64d8a60703ffea11aaa55fc7635b9e96696232dae9d00690e2085915ec6a04fb782cfd5cd4f8cec39c85ea96d3b1c2b603259ab4b462872306fe2f7c2694ae3e88ba20f02e0a6ae77996c8940e615af9e61965157a1d66268f8d7c48f4d67bca6cfcccb8835ed6f0f1f749c715fb2f8e20ecb31c924dc034c856ab7cbc644233bc65e00bf43efae0fba5f30302e85b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002229a49e0875002104792cb26c78767835056eaba60bb886f205d2b954361a2e38582ae2b3fa4a6d3328c35fbc97b5f58ee5a34d860652b839904ea3a16d8e16d97493d75894d95117257b77e771f21acf9edae15f8177c5efa51bb962c7e2c3739fd0f6af544ee700b13b3eb3dd9f342720a32df742a7245e35f96cc2ce1c4d0420d633282f2d4fb2ad2159b1e770f61b4b1983db56999e91ecd93069291de4cf651ad5d7910bbed7af9f705609b4d2b954f6305d7603713f05aca5a104d7e03e83a7d7c14b1fbbaf2380c873d07cf59e466cab7369f07fa74fc3250e50638aaa8c0f1b9d000b0a84a79a6fb83138d7d00a96f589fde3578c021861c1664b1ebb34763315a1f0b5968c9f037f80845c6096be1b28388491840fed8b022991876c26512bac6eff1e020b5d3ecd1e3b1c70052ceb8dacf8905d8ba67d09150665cc1c315a7c45f092fe5e2b8684383fcc1cd98c176af82e174c0b3f40861c7b456ee02e1361706250cb5eca53cc60a6c955ccd656599a61603f4ac93eac7ab204c4f1555426635ca4dcf33446d2e0c764a8eb1c032c966bce32f031412b2c26ff1723040e362cca75d476c4aa8b6b59def04fc824dc76d3341b3c35e6e9d394770000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000206c291ac2e1d701fa6ef82480ed5c53880f030c6242cc6ede5e4e53de49e3f6e01b8524f68731153e01c68bc972659958a6d70a70a217ca625c8229d504c10ba0bc94f9afbb11aa2201f965d20a23d236edd303282ae1546aee1f0eeb9311a576e6ae494c70c4e1d26cfbba8e5c5e1b032f0b8a1fad09d2a7d351017979edfde2d1bb4caffca4c34e55e77372a26e0dc8560787f64805b56a59873afa053aaf5a218dd5d26dd7fdd59a0b0cea52141f0a5afe5a5c3023fb6cffa3ac5940876b046d3422c86322f93bf370202e223bf8c85f6080e0bc7daee23c14cd75e3d56be42e0a6ebfa0f21de5ef2288eabf0ff7b844fe652213efbf692fb94a78c78465dc1efe7717503bfb8d16e96a452dd8e7893fb066b059fc47d2a55c5afada0edcc06f93187b5a0c565ef580ea735ac4eb432ce95fd91819240af24dfbab55c1f0db6430b93deee8c8188530b72ab67f7e91112051802a009dfd0d1beb4661feff9f6699863d97f55687e6d6c12c0c0b18c1bbf36a1d40d7dd83dccf39dbe8cae3360bd146a4945e9b9c79ff07bd947aa747617d2ef1a43c44fd46367b0faa0991b49ca891767ec83f919ad0d8fc051b1514e217fb1abbdd2a0f17ca0b8f9a918b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020064d4fbd1dccfcf984db43f495355f4139a2a28f94fba024b85760ee70bf45c361ae18b9cf641bf98f686275852549ea985b37798aa6d57feaeb5e274c7b4e373ecd2bfa04a73b552b3b5198d9079778eb1d1fd4f7edd462d27d77dfca4efa0ff01c33a333cfcd386e808b2b65dff4c32a06ae093a4c74fdde3f475013325b52d41c50580f00b30f7c6f7a86a3d4c401588d5025a5b750584c5219bf20b0bf7edf5cf20a677d3be681c4a1bd2d32d5a07422fb102ed519dab2f56dd20cbc2338773b3df74ff52a52944fb9509715c332548a9f9bc68b25ee6ccd96be56b0f1a0ee7d1f4594e5d13b0b15a2d6f7a58d5a23b76b15f1e19cf578eaf1da2c3a80c0f4806597b026a9a4521b00c69227f19f63d4151e2fa3b63bb1f8ba509af3d98d427ae21a3bf5cbb0d2c2486d531c08753bf278ebf1650bf8f2904f05f7d40e3c89210f044e23eca6d829ae2dbe77c66ad45c46510ae002b9574966698f384f44f23a7779533e2180ac75afd94d96d2c93c060ee7d35abbedac9f0f0591bcd75d4766c21856fbaf2a773d21af890965a4aa223d8b8f780d8934dc73511709344222f13ff8185fb0629da8ebe1f86fca52a277421120a8757f528001716631dd000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096a89f72d66e6daf45f5f67a7f66cbac5488f6565c390bd1d7412b0457fe48e3c83be1f7a6e13ec4a6109d960834658a8ce894174253a64a083d2046eea5666b527edf967ea6074756fe615c537f7b086905f4a987c3be78ccdca283932bdbc397ddeeb385498a894010487437665df2f21af044e1edd77ba5e2707480e6e5de30dab75d98342f450322c948e3d8f38d3cc3b05a773ca5b4f8261fd55ff10d72b7db21664b5575f8a0389aa247603ec9869eef46d7a6360951fcda9d31a2f0a3904a9ec99347aca68daf29bbfa4e2697ae49e9b2500522e84acc10a1f89fd683dc80145c35e965859678b4e373fbba3c17c5fe2afb0c8e53f12b7f93a18dd8920cda6b5a5bd267b61b5ca1f4a00a13c0c806f589f9bc13bc079c499b3e483ae5809036adcb4d1ac68d009aaba1ac599fd018e2fea2cf620483c39acf679795cb9301086fb82f36e32c760365fecf4bcf85c4f35f02287c81f892cf1ac2c99f9b0f8ac61d5a8923c848d02efbcf190834ef3f2824f8ffc7d49920498bd25bc7232193397746a23a1cef164eb5cd0d6b4eef4fe9359ea0aa49c3647e5f9e01f9de0ba2f951e0938444279700a507d9482ed87de5a90d86dae9e7cec002bd5b7746000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000392fc2c1ffd0b8f1c332f6f3f62cc45f49f8b9213def276ea11597500b9389ab1ca4e74aa6588b999f0dbf895e6ba69fee0910cbf0c852aee506c379fbcd3fda09bf1512e45eb46b4312231d2f561c89132d19f83832e44e1c467455fbffc7dc42ab5fe930b83c5e48b6c4aaf36208f661cc861c8a725d057251a844f8920447b1fd405b722dbdb1699b30d5e4c2f54be39bb0afc7eb460bf1ac432b91ea5a5e7e9e8766e217ed70115d12eb7e47d04e93a2f9513d22311d4d49de066c81d88ed2ad1cde9a7b1957ba499104be134e910d8588491462ce53d23e77b4bd1a5fbfe49dc61cc0b79f873b93c95f8eab6259628c2ee7b73f3a20ecf5482ece5edf71418e90cae56d7bb3f793c07c9d7179170f413ed53630f7d5b5fe441ad3c8aac8a3b721681a6f80bbfe7808255878d3a401ac5fe2200c9b5e52291e028bbe715a832037de838613b661e62208147d43c1ed8767f7f9235696e6ecd40d00c3c44105a7fef29b68c58119aa08668ddb4d85b23f16861ac1cff8753653178c43c063aa74f19fe4626dd444a914925c709d49ca395d4221f8a83be7190b6a195d0ca0ac90093af3d2f128055cb81e03ced717de19da7c359d267eafca54781da8960000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae081b0183dced015feebbe62ba25f9d53fc70a3184c8244a1371093f06295dd995dcf49fb397e83eaea9072f75e96045e4f4461b3626cd9eef5330a458ec2b21e0effb29c874396283ee7771a520c1a7a97ced0729855cf76f9334ffcdccafb2adc6f98fc019fdb92eb7d4cc9576dc81792bb1a65f361da505806204c45aba355dfbe330cb018defa46443c4f850bccd9ca4e2eee9abf3b25b9dfb89446503aea9e20b247ac05ac3fc08d10d12885d431aec1f269542aa516050dd5533233c5ccba811500a3b683a5552b355f919624eda56e2d41925ce7ce37368171512bffc534673c16f5a10f78321d7d213d2badcc30a65360d843e312c6e31fcf0092252c550f0e32ecb9fb8ac8e3f386e1a1f5e1b8046d93a6d93159cafb1ec5ecf5700399c18cfed151d87d00f82a64b9baaa2ff3802e3fd737c76b572ee6b4646817d8336f9d578274e6c0c5fc02a680f5d642c67ae35fb8864aab2096a0625649b8672c5e2a29a56fb83ed5489753a8081f38fac29ac1ff6aeaf66eb76377e67414dd2acd103fb6ae47f740d0224b05b6b7ee873af5afa2e3847752a421c5fa053bff0414b31b020ed6beac3bf10d677fbf9eec7283c6f0fe5cc6b0e9810a0cfe9e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e4a0af7f9cd7d259f6d748f6d73d831d9e3f4bf72346ebb7ce41b2397df51ff2727191a8b020609b5c02189261a6a55d0bcabcaa3b11896783ac6f32de7098a7745dbde2d3d15e60ecaadc9f762566d6d2af9ac0dac8c466aad68316398108f17178405b044acb8ccd8638c51af2f56647c4b14f99374e6d557295e4c8b33b427dd4b495ddb02bd47a04f032c1519f7d38e8373aee0193e2c0fa55dfbf39a384c281dea00b08763d2a5d1d199baca66b2749cff75c5726ab7c35b9a10026d139fc177544fa044444c0da9b70e8610c9d557c9356fd75214baeb2c56ffb012b2cac867332e770e3adecf6a3d96d38832dfb1132046887a935a4cf1f7af7e3231b212c61508b7d641fda2a5bc82cfd17fc0f67adf7b597cd859ca23490b6d3eb32f5235da4abb279fdc7a1ff040a409f50ce51d8ea81950594bd75968b739860678b2bef7bb28468b72526c0b7ff8827d774089b7cb35111435631850f02a8714bad0a518c4c401704ed10349ae5d3710e1205f2995652c7c1f1ff928ee7cff732116b9a041a184d60c1f35b4d5d7d2b3f0a4565218f0a857e9eaa18a3f67b8af7231cf66b4770272c612a1ceea5c3eff0dc44d96fc9ee5843042edef827cedf00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001097eff23f318177e9e913d519d2e3675c6d0212a95fd48bb0696e6c0c33444f3c1d557abb9c218c8474e9e1eef1c3d6e9ddb1133b4093e9e354926a5bad6a0fd91a54737a8cfe40214905d69070ae1f1e437fcc31f74db492fd74dd13835359adb0b293089e4e38a66a147d7f5993f8059312ffab96c7632fec3c1999a48798b97bad9b66d85081cdbd3b4abe8efdefc7460420703505dbd26dbe6e980f44510e8250c717e2c19d0ac94d21d7774d2ba9776fa525281440bf4ed176c0e332a2d855a4284c4799b57087822f2ad583bb35e7d394635106051341aa2fee9d2a11ad8207ad42a2d555146868f7b5721a550c87458ef2f01b26a41a99788de217587fe48247d2490e5b5655a6a38488f808d2f8564b33ef8b04b87c2ad14055eb0a56acdccfe96ab2991667920fcc1ea97837a8ec451ce71a1205ce3b5f6185e0b2d320f8ddfa74d8cd6cd0b887e87fa273e09f4e68f29c1719f43070d8c0f303c78a10f1f768f2a898c6ee90a56e49ce3fabf01e87626853c279fed84fedd86229c2e69cf2cfc1ddf3192955aede276cec5225f491980bf4bc415220c58bb2c73f1019cbe3239d9c0f29831cb46982134c9fcac77c976f333798a60b3ac0ab23fe00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b7f9d31ec299c919416d6334663c18dc6399256fc39a25b16a19401c14312adc5a215323cb0435240497208db311e8675433ee7eec2260c112bed5303ec3309c964ba830e7d4638163e098100ba38c18ac2cd21227bda8a5dc481e87ec8c2b61ca60fc8edb3d57222afe222f4b3eec6e3bf33cf6b92596fa036e8a08dbfb9e175b4ebbdf6f35d9bdb13451f271b13f3f3a08da92525a8ee225e805b9ce081c9a66929bbf5e08bbd079669fcaca1b59d9e73d202a046a09cc9087f572ac9737fca3de3a9dc6cc8a0ca1b35e5a9af6334526458d824ef00a38a401dcf25582f633ef14fbbb90ee11c1788b18d326b488656ea1175572c03c93081b91c3ee7e9cec91c5c82eb9376ee16620a904bbeaaf440fbcf311223fb92a28f7fb7fb4e4f034ec007515a28523beaaeed3364e21039270e8009548efa5fd0340a2e675408ec4e7cb57092a3ff3ecd04633ecebd9108483841371f0a50b4a9b1923b606d37c1f3555979617ec5312cf4dc1d3caa95b194fdaf1b20ddf4739e4135e80ac70c01b09adc87fbab34de3b043c08c28815d24632b8be7cf490e8c57669061128b1de7651602bdcb0791f12e77f790552b76849b662f256c8751eb62590a4bf1a149700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c293126357bd134872662b80c41f79338942f4f66804b89c827b21c21909ff071cf2affa49744bfd34b784fd631244117cc02fb2fe49ac5423a2debbba95ddf1ab44a0c311e159721138d9355ecdd5f93a01f850e40021fec27149e9bf027af1b0c4e56bf6fb3e0d9e2282b03f9b3c6760194eb14fcfe8ac65d90c2705ebd3d3ec2b048b4c9bc74e11d515dbe3ac02ad598ba74e66d34da829b64f2a85579045b8c9d6c8228e1445ca29cb7aab21e065e1a0de1ae3452623594ce1cbb50b46e3e8ff3eb2bc6b5a826b947e153765ab047b2312f87bceacf5f36a76be7cb703961fd4facdc04918c930f3fcf5a41632aae24b1a67e95f4784891d88566dd0ced2e6e7f81d6588e7bf328f2ff037f9bf75e865c9929cf30ba3dae3a2ccc7a85d4ff721847abe94667eb5ef0f2efa5a8b6d7497dfa4da54fc645e920d71431a1070b6bffab302a528b1b46c10d424ffe19ab18fe0de3370d421a3cf6614e5fd5517165fa729721393cc3578993c55d07c9e65522c9cf55e744429fcefe649421a7a60bb827d86966b7816dbb07e6cb87258525270ea4c574fa1bcaebe07a869a6235199e0c02b13e897027be7b7de83af801585650b62d9155559c57d4158fd8a2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080ebe96c8064071106dfa37a7baf3b8f56122fcf4a6c623b09a9be428438974997d646328861f8c4e5cc64efa496eaff69c51cb9e8950e76b26f64b17f04c6936839ba2cf1cba9c1939e78743ddb29311b99f3c20f7e5f243c1d869cd23301f0f270b4786eecd16f05e8ffa89d4af2a5da540db4d9b8c714e159f19c62d19568a7fa4be712928002b178d8f903c8f1765b4b15a9cccb86809eb2375be0aeb7ecc5bb36ea1b0627859e9371be983e601e5087a3390e971f11a9f492845ec4d4fecab08362756dac86e57a332c2d6ab61879a310ab63e05a724b9228b15cd300cea3b5f880386259cd2edecb37ddae2f226fd9200af4a136a3188b3afb201b089fa43d207826d34895823da638a8d21eb04dfdd48658698f2d1f2f8a44805dc44d28a09cbaaf5e6e9550ca9df95f159159086ffd7a502372d3be3aa0d50cd1a6bc9492d059284797ad72bc6ec294019304d2f7bbeb7ad470b0bd0fc7570ecb8d57a9a85e21e32d8610b82515264492849f4e1f3f46304426f01f299bdbd686425dffa357bfa6a6f065dcd7303466e1982cfad883444d27f444853176facacddabf2ffa1179b07db6055f3e7af40283aef8f8cf466a6854c382f1320ed0a672b0a100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e27e1e37cc56fa4ff37c7e900b169df14b487f7010a89bbb8a17188c26974a5b2e7c25ab527b73b920e01ad81d044080af3a8968d22d2c15cee04369a31152bbb0be70955eec1a947f37ced5c12bd8cb3756d173c8e55233473c8d84c0348e0840002f8db6d2e6090ef730b1b8e1e5c5d06fa1b29bb34be9142e84124ceb8250ff4db39f46e0c209930f84c16988940758a7e2c929228f314a30af8513e46f8803a398175a6df48e3607a4a114c47b1e88d5aebf865ade596ca9e53d5cd70156ab694d6adb9eb12c79307d435337a69af2c130d21b6df15d395bc6d39b44bb777f3e2eb29aa456e0dd16c6c0c974905d802caccae3ecc6d48dcdb1f5b31217a314a475aa6df7d8ed2bf0985a3c3fbdc47bfdca228fc73e04659603a7576595d3ee6ad1b99be011ff1b0675d87dd20c4cc03bfc8c64d9e67fb5990c3e47a84de13195435c1273bde300b402b01413493c5ff6c38027c4a6321ad172922018aa8c9e4b5274b59cc1cd4b3423e1045a8a313bdd7e2ac3e3a15d441f403c2c4362d358e919443304f896beda79018095c18572a184857bb4f78bc49f8d996f1c18e9e95bde11d7642772334a462a5021255c262f0d7ed26194ea341811b3447934f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b046b610cfe03fe53cf2ec5ca9720ea05445fc80b77450f1c8c582bfd760589a7b9568f99b498dc1625b63c2c7e00034a7c796631ce66c7556c9a7cc18b2e5edd45d478d9dab66b05ba98571644fb472f7d2125186aada7d4c752bd7ffaad19295d60badb5808e8db8335b86faff72c78eb8530b173c483de3f88c2f2e6ee110ba846e2574ec8f2e375ef348b2873b3e2f8d0867f3daf6865e3268e8265e3fef7be9b7307cc33addf148acb3c90888c10ea20cb4c067f41e95e9eb79c712af854a8eed053303826d09c57fca492b2c8a01b083f354fb9d2e7aca953cd692d09001241482c40962470cfd2aedc329839e27e307fcdd251f8f8d700bff0613de27d9b828d5bc910e6a50e21a2e9950e1c3e125fa25e5d74ac4e5fdc27a635083f002490f6b221ef2cb20310bfeb18bbddda43cdedc4c56213aca9a7ccb0197a4540ea65ca889ca2b9b412f32d67121b566ac662ad259904189e3644d95fc276293e742b0450f7ea345770b1dc21b6d4e956452b2a082f417e622e0a3f4a793d7ed7e6d883c5ff54825563420bdb00ae230f7180481b1901717420fb957e13b481e97bd8bf341fb79f67be99a3f348d95e670e28db713c891c836fac414db78d3160000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a60791011e709ec05ac2166ecc4ec9f70e4ad773b83339d343fc447e45c14a1ff8362b33db84e16afa35f97d079c2b9cbbdc285b8b6feb5b264e66a597cfdef3acbc90aa8f3e4d2736c6a9eea09805b21707bcd04236544c940ebc0bea6b6cc2187602c627113a60294eb843a857da0ef17a6b1f4bfcae715906d63b1414aba364d8e1b35f719642da1dad10cc06a6e964e080911df1ce9747c7972f857a9a96f0f9efd0eae0a164718e52dab3b51b14d3ebb28418f5829f613e815ff7936289d39f15016ed5289cfc1a1df5e06f10822d7d57bbdb97d43c7f51c4360947edc526c403da6ae9506aac462c75c99e6b95b55835d8de735c8712f78bfbdf6b32d35795831e2de28aa5055999baa2ab3cbcb21d32700288489c6895796fd8897c4240999f4cb9e6bc4b92577d8fd48ba8d4d61e6f794d0557edb20c29b71e77bac6697b25da061910cc3d7d1404c5836ee353ec5cddbddd97559f7bb6d60728763d4acceec1f5e9c4e73286c3fbac0914d3c9f4dca328a23b8038e46e4058d3285698119dc53c6ab55e98e3fbeb5b9c884e7c3ac957cd946616e2dc67ba1a5a368266de94713c53fefee8d570661398dd26d688a11f769c09d677710e246c0c3e57000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d6842dfec7f32b7c1314c95a41b11b8014c22a703171d9528ad136a802bc40898a38fa98f0da5eda4cd50aa4a3172bce1a867ee35500bdaef6cfbb8f3aa0f18c0620a0f8a089e7d3cc6a41dd5abdd8a3027fd136f30e51bc3625dcd7b619b685dc1705042eb576f7b992240013ebe0a274447c574ec8d0399d59eeec167c27deec8545234c732be882909c41be94ffbd177f2d47e3b40e6bf9aff1bd8b3b1cfa0e568a2a5ad8344b3ef8c1018c1f1cfc9b868c0008f5f5e90a244d83b0341e758d23bb14bc1c0e95d1eea45e9b627d85de9939f7f53f617ed0097c6b11de93cb1284be946ac911e834e747a4239a26fe172fd7639b5a1d054768de46cde119e880b4cff071ebf732e70843879095114c4f333e3e6f92610f99ae044ba928d3a621b3714aff5eb64aa271622decc61f7810ea975d9c24b846d8fd66d350f908c4e00361c368291996c8f3d9b3b64061a5a613e11782b29e4e0d740007fec24c356e70e4e61ff6835dcbafa136db9c487d89bf0b10d6fe10b28e09a1bc7439090892cff77a32cce22f8dd430e21b9ab50ffcd78456f60a5aad6eb0f217d8ba3435f9d9d106a4e131f83ab3679b5dc5e849a289f8b783b2344fd06c8a392466be0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000213c2a8f39ce89e0db23036511b45071dd45f50b9a5901732fb0d726881c1ad47f3b07c2399550ae58f9c8e6847368ce50d5d76403cca8ce06f42f6160b39160d43f025090b9e2e8ee1e5ea197f8d501f6f657855a3a884aa384e2994f0bcadfb4b7909d471bf93f9186bb0369716a3641ee0e4baf0f620ecffbf9b8329b049fe86cb0f8dee2c93b1583e578256f1d5d1ea556e33b7ff121c687f772a762083121a1a5f40a7916544f2b809b9761e4f5442fcf038af578540081155c8a234f4f408947fe22ba1281b990ef2fa7525cbee78d7c1058c208a7d60575b157b1f62dcd282cc10ff3b067cec4c555906ec5024dac83b42d1349b1ca511c9e455bde38c8e50cb491e7f58de548f3c2a7a852c35a0a83346eac79d107bf1a95980e365122c6524eecdb21778539ebadea0565ad97642b2c142997039c8e9235763068a97d6401920bafbc1a524d10403878db6e871a51b886db1c6c842d69722a30e808a56ad22859632a220518082a0f8ca1a397ffd862e44ef381b98d7c00b13a3a0e7d0378c0555c094f083d987e6733734be510954bb4e6ec01c83a9168d195d8abe62b8316c21d44c31b9c52d2e1274bc93b9492b1c7160f74c84e443c87287ddd000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023398c741f92bad3d52f3ea07403ef2715308bdd648776d13887fd9c54db1e9f703935ca22bd5e73270e1d7eae2b729c5c60577f2858d5a16a6dd93c05655ae16e159ad19f0b214009989733f4008f786578bca50703103759102ba52e26b396a9a16b3883ad563b00c4f0a558e09d59ae2c16cbaa090dc86f83ddb73e20dac36f9b5dfd338e28a5b416ffb715bc4a71d494bcad81c5671157c5df2ce80551d2416e9d41605313ae76a694e1a985b07bddb1b5b12a03de38917cb92fc4a7336c4195ea102c54613b9824bd7a165825f0d80adf7b79a994f0b9e9196ddbfa980f117f3cc7892916377d215ecf8499ef7e9f74946fb20cd39743a0d4fcef8dca6456c46caca412977f4253fff5b40eebbc68d416aa4196c4e56d29cb1f9ff8786a2faa7c91a3e964854e90002113c546cbebf62d00dc9559c88a3ccdee243f0b73430ce3117ab99cece411e5e8400d4b97762e1fda13d785765fe4d71c388374bdbca6082c4bf1497540da328a1c2b5565a39636dba49d659f6d4b69f27f14a5082ce7f2755263e5e68f5f03d2487a945f8e9a43852f91551efa407380d568a800e4a25a1f23c4a7fecba5828b83ce00abd056ff28aa694bd6b6c7a3439c43a37900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e8585831ed2d901ddb58f0b72378748fb849f4b3eec6c99788b7032f021ba4914da9a95f5cb6cb87aa935a3398811c1c937ddc8148e84abe9144c10af5a6de2411fb222be53dd77badab1161c7c7d952e90cdd449c2c87ca4ea37d3fa41f6ca3cb4162793c1be6bdee180e56c14f87edebd55664cba3b60a25e8ffb05b25235032b660bbe57e40b2369718476a829cd3a13abe55e12dac2feaafb7a065130d5af906cc6957ec7ec7f410ccb3f9f2258113f9e4de3c75a16ff63505e7621ce13130c1f78d8a22b9d4d669557e2bf458bfc879d64fbb9e65a343051ea2f43caf1471d2fd7c69be83aa9838fa1d8907da36433e6b5a4803968859d638dc3f42dc22a33f5d28467dd907369beb57b617c20ecc3a30a6954fbf609f3e96be3f0eb61d320a67d699cfc1505585175750af223ec3b9b7d31ab9240b265ea4938769d4f7ca1a7420ce081815cac7208b302ca3316a9d975c4aa67bad8781142e1df4c988f23552a0d2733be926bb7dbaac9534c1455dd77d664f75377260b0bc0aa86fdf33a6cccbaab499d8b0f03223ce8b3fc8787d0231e89419c84881bcf4fd8b1398e2cc528cc5716f01471271fff4240a8e2a3d0b394d4152ed2e2ae5925e82ed40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000217a96cb09b6f34b42018d02f2da383702d602e7c30fc39863a36ea6b542cca1ff2682aa3b3b0806c25acb0f43c72a3056da9545ea795b897dc8d8cbb24942f4d110494259b51da34b05a94a729cee3aea536d2a7eefde223e613cf21c7f38ccda7bc947dc580b1ff3e7e81d59d7d082f7fa978948cfecf689bc6887e9d809c446d2cee9f9eafacf328db31ffe507b0ac0c34d6cb9f24da427b7863e319a09e4bf0ea2c117b78b871d48741b4b62f4ecc65d8be320220f8860b75d4448649c5ad472dfe0d49c75c9d91bdda002e95aa92fcd23b77b97d0d8ce9087279776bbf9249996c823eee1501c003d7e8ee7cedf646b65b644bf8aee8e6708d1587ab959b9a93458de4ce13e55c9c9930460bb7ce6822ff560b5f641e62e12eac31851c2a871d4be71259c0e3affcc897fcb51147bcdd4578959b2899c86787995ad125b067bc4efb577e2d6146482a02ffc457b51d553dd50d991df3fc8d4f464d8ca19f756071aed8e9429cc9e6cdcfd463859ac645eee4e8d14192ab49cfa6d791d948e5f2140f81f6e9a20be80ff38b2c96d409434f822112329348e5f35f3e3e7bcd4a02b398de1bfd734bbd14d73c99c5e6a0048b8f97e20c42e4a0da78c405909000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095309761fb03bd82b7eab1513a93357fb0f616bcfc2cf7dade7bf025d593f1685a04140966bf729474e5bcf676e1d9cfebe5d03594eaa101556cfe98ff4e1e05ce85d87a2f6f95100198f298b982dd7bfb85ef358b6eb91c235af5829fecb491206bfed13b3548f441f1ac17ed6d8f6529cc8d6e10f999edb3dee118d151377ec0ba655a67692a265b400fb8e9ca77f72be4ee61293194a11ea73f795158a16491d8824fdd56ff7b127df1f7d94a466307377fb35b410b86d115c67dc25f085d771385d99458f8ca29192e0d4e397e323a8af46a16198296f858a5659d413e0608dc619bca07fb6c86e4ef1e3232bf95269e2c2b86526596995eb9a8500e5f7b56236d5e74fb0b85be2d47b50c1689dd63b8aee5e6062da934e49aa47a2543920c6918db2c3b7636068f83c8696b42040241febf2bccd38f277809c8701904b037b58d2c33da61760d9d2d83d0edf130d15ae1293da0bdbab7b34b6a3a15d723b7493fa2e3f921e7c13070e5808782666e4f4bcfa94b89eb9d39596ecb1c89b587a84bfd09372ed5bc25e044108b9a9d78f6e35a6d28fb3a2e64fca6db566f3f895d16acaaa940d7f137fff480f52deeec5eadc9ed5a611ea67c1ff5331db92000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ea58bd902656b570691cbbdaffd8650ec0b2c557c8e624a8047bb924cd7835a4b0d4e4dbcab42abeb152007bddcc0db1cafe90b667e0a36398689fb3d773ac8eb7df6db7cf7d6dafb749f7f22c149e0a70a169c0fd570b92a2b6fab278ef65127117b9112fe7ab87d4c3a194781d5f340f5a5900eba5783e682fd15ff2e468b0d33422b77096d2c967d081c625d6ceba0dcdca8a9ca370903788acf19efea8235a998b0b61bec108e961b53e6b249663431509304b86929e2b42611120f34eb268ebfbe9fb5c67abf2c8a8d6a0d91d49f3b460c87803c2a061b4c2e83a99d66c765852ac2debfe72a2bacad2d9871384a75b24067fb1ee593ac5da827a8c564bd900911170e1a1fde4995bd56d6b32aa53780cf47fe4990a1c12e3e41e5ab8c76ea16b0821ed96329c0c8a03125da15aabe0bfe1d4f1baf9227c269fdef9978b52ee7272b1936827e0897152300ded66005bda88727c9882d87fa393737ebe51622963053ad21cc2167c896540df13f3fb961a6905bd22d5449b4b7195195fc152cd5b5fac3b196ce3a74776d02ab2bb49c81569dde6f2de3780ee75cdc76301f25adf48ec3043954dc3e0e888214e8204a352bb6394582a0bf81ae5512b5de00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008be76ca579849347b049be5b307ccef4893684af74bca13cf8dc4d7676046aee9e6fa03451312a0a1515e6d6340da4c0a3d38a16e8ae81a4071ae86592b82c0456c17584329242d0f37d7742b210518fced5b7fa7801a78c1803c25c3d4bb866222bca4f66da4a75525bda7861054e4662457b349739a5003da7d372c60439402d13b0d90661b9323baeab1b3ce200ec8783e04ed2d099b4e635a3f307cdd066ad4dd2bfcde9c9578e0482d8698fe9da382a603d00d75511b235cdab2525e677b1ac2232e63ae017aa669a85286c580536885d205f1d171b7930ab6c7f257ab1763f6fbdcb255d2e5cfe7a1d24c8492d0aea939bb82183b121e9737ae4167663ed193a29d373e1cc4e3eefb4d72c3d58f051503525ec5b7323649d568d9a2b02dd8dc93c0235dac8f84ded848063a1a7f202d5a089231ed17931347b4ee4dd1cb6f820d1971ce9a034fed92eef4b16b0e54890bf1805448b42f580f180d18a7ffcee59dff422d399da428948e055e195767c7c2108f9207097d96794151b6b9a161599add4f6d6ad0fb11b52e92f822f3c7bb7eba01c27095e9936abe416fbb58ff69829cc09ab603740a765283caab05e8491cab59752c7f18dc17dece2b78e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b60726c2448b1695ab903504d88c7429c2989feb8bf7fc63cb1a7104d574019514c93656898428c47a70cd3aa124e474b7e3aed4f4d7f70e3310becf8a11484eb3458ca18c6781ba8631d74fbb72fc76561db0fde7ad87598e384d74e7bf78b141005fd4120d97b8357a894ff2921d6bae851ac2d16d061d0b85ba7dded634f913f9f47d9086cb40be8edf5d0a67f9df17acec4fa976d7677aa734276f8ccd397ad7a0e44127d0ae795a555ed92a3ee11d5b3c6bef4a4e3cd5ae1682ee3bdc6c489edfc3f6d3636bed178c2072dbd5bb478658834940888c470157ce56fdb85e0c14189692d820cddbaf281123c1bed9ec4c8b30d8b464acce729bb2d7c07d85312b2ca31d9796b3ff75cfea3a839692c1f7d34f6bdcd1b2991d0db867c001ff8c7f01c2a9d9093254b3fc2057665b6ff9560398f8712600777b3594e1847e5e53062462d1c4474cc21d060f0a1eaa53a06be4ecbaa96e8c8b4337ed936452058ae90c18001439ddc513193416f3b42ffd0c9bd9cee7d58c72c58af8111a02a1d5417ba1e71a74d0d2ec82a246097c891837d70a1a099e89c179b68038c3016494d4e2be80f58bad0e69871110c5fcc00f441e964249a4a115600677216a24300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001436f378eebdf2ba42cd1136099f1d10505e4cec4316d953c2de88f4a21fb6f16c0e4fdcd83e83605fcb90d725fc747f599c2ca1531bc03db504bb752580aca111a6a0e9aac4c07b6c30b89e4c0b7395a6aae2a7cfc803513b221c8b6aec69a38119b7a482796782baac315319855713b544f59372e4b69e46542924a7a249fbdd8c827e7999bb654ce17fc8aa9a633013dd5aaa3b6de00b67b6210309bf36c12ff8343f81404b8b0e52695f446dd9cd5458be7a9bff1b7a3c161a463040def6c82e8ad94d37b1bc182d96470a5da4fccb0d65f4329068b0983d6d7f92ef309d19fe6dfda8b1a64aa7a714c2cd2f96b6d222b7b131d813d4f422a971a9475257c5dd80f6ff3ca621c274675bb0ab73f895b2c925c3bc9f21ebfe3557b06f8729e3a3d066f63e62c089ef1bf2b861ade6dcf7ccdb5ebd87c67dcffa6c396ad2bdef75666145472822e1b65a1b19a2c0d37cc3ecef34c5382d58ea10371f6b93eb9d2ad4d27b0f564d6026f831ef1e2fdf185fbbd6f5d27fd70a5f56464b79fa05e3a66d76e17f4a67ce531a0e81cbf10a992f31fc74ddc35286831580e4e1dc45201dfd55d4fabdec155c00c819af107006fcfc20a6641d9e479e566e6494ebb80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000817b01a505ac86e9153df9b42fd80157a3c70c9dc85fa2504795d6723bb80795e8fd99d17d2ddbbdd9f6a24c432538a7ba8b797cff645838c73f919612d18c94ed4e9e3b043088eb3b99a697b197dfe82c4fbf547093370603451493b079d10593efa490d425d8574d3cb1da46f53993ec02aa1516bde9afa4428284c095df761b22393bf26ce6427337a11256ca2560203895222feb7e60c07f902213669484429f672ad7002ca92ca1d9c9e3e129dd25595200485a982348d7ec0f584e24040b27e739b6ab10cb3e07fc1f88b96ef843b497a54491775ce8534981098d4a4323f07011909b724a0c5dda45e773b6287624b152dac6a86ee1335c411e0ea33668f3294a344cb3365bbf657a432c6d9618fecae3e05b5387801f03de6823e3abb6446198c6868ce31e433d6389eabbf40a6615253633fd794ae498a82fb6b2d2c97f7d2dfdb4b3092f9f4ffeae499c49f0cc4fc30941def05226e335c3657f641edc57ad5aa13781414c1173d5cd2918f5d3166ba789361612d7fde63fc0d6362781a96d02957b3419a59e571aac0cee4d43eb327254f316380a56a319ac2c9d7df9aaa399a36f6771e792de87eff04db0776434b83a9c9bd13497ed716efa59000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087bb8fd8e99c2fc6e12b82a82d1c9bfb6ee74cbad2ec80a2489459e535dad32824f9aff213d1863b630d2c8f2317cdfde1cf380b1403516e8df8c4181489a68e4a7333f82c29badb405c4dfde87d6b797a9b127207cd1ef430a4535a738a61a41c80038af6c878211e045fbf960eb5b034c531b08789f390e6960d1d03b9c28c02513f160ed062964f318b056b05419cd1d71294dfb5304fded9133ab38ead21c83a78ce98be4f6a4a522b85721edba84da962ce7204cdacb1db7f53017a8428fb11b30f691defa181f1d3efacf3cfffe40ff312e0bf67a15253714e45425dc11b2804860c55dd0e22e4242d5be0b343188d4c54b1c0a9b442e650537711909a5a6ad3fffb49ccae475cf39ac95172e918c7a1fed74739be48c823f268659e838cb7ceabbb104c98b46456f7ed567a59b626304757cde16c72d814e5c9f19748475f6730f77e36257dae84e906c69dd80af794021ae97842fbe9f760726ebdd811686d7eab65c17605009caeb31c96040f2ca19b8581b2614be650674bac9474aaeb75bb0a3158b146b47bd38e65f3a52ffd5ba08fad8862ddd0724761319444eaac20b9e596fa1f4f746a0c0fc0c6c3135a4d935e72b388c1d8fc4dc9bc5eba0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa115e3c2dc31bcb7a3c72eae0d3147fb42a0c403c690aea193cadf232ef103149f28c3cd20a16dad4ee967a17c53a3c335d8b82cf7bf8450b48c8e4fca711eff92bd0bdcb2969f53617a2e15b5b52a6285a8befed4beeec1d9ca81581734ad28cfd52c360a64009d431b5b56be12e270d37a0afac6d3f779363fb52160f0122ad1cbed9f101a41bf52c2e0057777fe35c6daa0c941133c93b7424480c12ddcfa96af40047420f9155e731bcb95d7c44cc7729a646daba09832c3976ba670ce414827517b9d1f1092c5cda31c1c68a77881036336b8484dcf2f5a204bc35caf3d51efced0d035d2dfc3b8e2d1c618282b4a117a627959ecbb1fef5ee4e3eda40c112a5d2899dfcd352f7438e5e01db0aafd92f620d9121fbaea34d1109d892bda30ac1f0eab2450c4f54e82f23b7f6b24ed9bcf30909edaee6ec9d462b7b966e4e3b5293eff63ceb346023d71d790cd83aa5a312e225a74031cdb780ea22d2e7791765019041cc352a52130ccd5f95f00efcc6a923454a2a1fa7a65b0e47ddf22d64fb9388e78bf7f9efcc11aed9964872a16ab21d2d4122faeaa2a555c18a13622f7f00b81491d36c61cc01d3af44ee0edc9a3bab9eeda3814a7d66210a6c74000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d28e0d3f7d5ab5a7e241aa9e97e1a220dcd75e9278ae398dc515cc3edfdcf1d3bb7f0624612166fe1b9ce50effa4f2e78e199beabf3c8348404fc31f8cbbb24c4b0fad686477c5cd809585b47169e5e9d48524fb7bf41e3826bb16c64d226a3d5ba52ab0d112fcd1e58d3ff1468ac7d1cc6cde128fd568a82b0b095ae49ec6c8fd17c839fb01e6e19db8939f8f80375131b876b7e1e2e9925cf097f2a21b2cab933e24eb67c0faab751be64ceb43ac113a737e586ea0e99a138166f15d9781266c4430f415a00bf704138f0a4a0145e0b0039141dc62be521fea740828d7fbce0f864ba2e2c6a15c63808496e3ffb31fc2dfb831b40167e6120dd06361236efa821905925845c5c9f706c4fb25fd24bd3599bd525e65e1cdc1e6144a188548b192213d1dd001d2324c079508260b6ce80dab9a9a352c7e2a2c50faddd299176fd12bd4ad7fc85d2b74cbc10709d55a74832f25b635c4a5c8f0b6cda66d0dcc3fb05addeeb981e6d5352d3ae1623e14da501744fe89bddd5b6b5e9378458adf7b135f19fd7f555bc6edf788490c40f585482b7abca5857069245fab1d64370af0b042c5b46af0916428f4d01c065e10b9d341e267c602aa11ad6f0a3c5d8285000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083a677ec2b188205d20c1f29d280012e0f078840e4015ae5ee7279d99c32919207e764d7fe0528dc25e16934d69e97ae8a64f78a1a5636fcbc7086892dd484d64e5ca10cb595a9ad0b8c8b12ff636cba7b378d33ed4e9fc4bbdcdd58678fd16f3bbb4439ceca6038056ac8c33e13f1a2d5d842821e3526c8eb97f1b5be031a2432dfea8a392702d77699681115bc7ef7f8ffeeb2fe3464926b2f09fe5f56c043a31bb813cd985e13bea61f45df7850b17bf51477bbbd0d85051038e35c39bacb2cada5063963b8f38ae3fa26ae8f9edbf9c6ec616dc418dd0a899a7ad80b77c302e5cff299d4c9537e3e3d92a0e93d56c764f630a1e1d597d1c296d46f14dcb26a72061afffabb803cb2753b95ac6c652714a7edcff7eb87173d78dce077aa867cb528a87d97e525698f9cbb6c8fd994979a5fc9f74d92a87a756362a7388ab8c8a39f63ed80b0a5790cadda40a5963508ba2312fa02af12e754811dce4c08c2c99bcedacc2cbd26ffbc3f571df16be1ec6f518da9eeb4e93b9dc350c53881240fe336092e7a479f6057fe782eb827c8637ba2ddd5e1f52d4045f9680abb8fb7b187a5125307ddefa2f93886e824509d73ee21c7c48dab72d2c438791549f0fd000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093284081cd4a734f6e4e4564406580631529087d62c6ee3f37950ed62cc0dada1cb4c0ba01cb9dd9ff96a5de9ae39f8196f479aa8e9e1e998efa4db7b096a398e21781f8939ad0c1c7b0e8d81870bb87bb22890dc948ab6ae8c81ef16c9926d68c28ccc013b1752079468ce5f73aad14c6ad4f33038fa07f047b838d64612e95d2ce315916812e86687bf1e2bd67ecb007cfc10fc626e10f603ed99d63664317fd0c3b151e082aaa4c255e54039e0abd6c9ca6d16127e8f13fae846ef78797c80e65c52e8dc87fae4fd14ac51409c42364431a94a08eea3f4a946a764baa240538414ce1e5bb2b8c623906f3bb3b97d0d7fda05aba3d99b02f1942d582ad41f061cf389e38f2aaef51da3d6f65c1a4f522ab7cb0d62cb0a001266f6111bab363dc65c457604d1d5b4a8076caaf307c0d03c794033a8c9a64a26e07ab54fd64e854d358bd3d74e4f852a985ec6bdb8154b57c8cef23bd3a1041dd90c9cf9a59330b767d8851f299477482c76f6061aca67df0d9f0e8eb1aad0a2592c7924436a25dd88426bacf92481f67efde39c50c7fdbd9f79f2f0f74176bf69cdf4f2eeaff847f3976bb3b74d8fcd454efd311cc3ac20d1a8f2a79033907c44ccfe89e339c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092c2c293425a29178efa136f78e486a86b9d30af647577f593aca42735d3f11b2a292c774d73e35a4a154fb4a387756fb51dc2d6c1bfd67d706d700b1a0791eb0def6feb95d9ca735163bde8478ca0add2d69fa5fc6e44452e59eaf7a4e3f8929df61b661775ee2fd48026178e2634f52286a54c31e21caa3e8d10fa40fa52e31ce09b7329ce8be31b050f47af298f1903f8fc4097e2e6cf55d8b2b2e6a42a021ac20c1eef12e0f2285fdef77199cdc2f20c7a07d07f090952685b1d841b2326781052e02eaaaa0542587a5ff6390f4575b90b7abdda3023050383d384adcdd4284a5f305bae9f4b6d0cc0916648898a527133eb21813621c46ae8745dd0e66edccc1c0da4fe5536de8fe81a86f577105fd7268c33d8941b08b9065e34539f59b0ce5be1b2b6cebe49cacc7e28685020aaffec7178194c4815950a0c9466d0b0d21244ab42ee50ccb74cace109dcec7f398b55cb535babd67a9b089c0ee3f552e216c451c42aa59cebcff369ac1fa3feef0a2afa82e6146fdbacb775cddd170b9be55b9e120ef0216b2b19db29be10c4a817beae744a4bc24fb71232bf55c53f8077f1000eb2637f663f2cae8cc7efdb9c2621332577b21e2252511f974ecc4600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a71c3555360dd9c7b809568fd2269c70f446d6bfceb6fc42278cf890fe4e7dd55025f447fedff1da2ef23793d0a73ce8279693cc6e14597e8be930c8f2876559aad8e2d9afe9f3ac6e52bcc335e92f2e5924f73a75762af60a2b95d2e9c482f7b7141b21d69345ff84aac00f8f51299d917431fad83e2ab6023a8d4d296b625e6be80d74de3b149a2439f3c16bc9d9887df0df0f45b6764ebd093b04138b3978112010c12290bef8c405a90c580f280826d1f25e939a27abd87a048098522c540767909148ced98a9a9dccdbde407859dc431cdd26aec1bec411fc7e226b02fb69e4bc84d65c71fdd4fe375c90f73f73374b138112cf6b3921d2cc944e81401ff339c2c668c8dfe3b2d1ca62d982ee3f733ba392dd7a7ca99a99c4357d341a90990678f4e02d5802ac16f1d6e3850f4bad92a1d49771044d667878d2f35d30aa22d9b9364fef8fdda12c77eece7b530626a12ba1f72b70c0f86b8415f9aa8d988942c1d013da5eeab96a21d094a0a1bf7cd0e5c9e55c6588313952ee2565c776b406eb8950e6d3ca38739447b8d5fc4d5c3395b4dfdd32dcc794b4c916f54764fb89c4ff46a5aadcd8959a6b466172aba589ec8d3715dbb7551bcdf525e5e98000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090c3274d1a24fbaca86156fa8b699c3992094a5488ccd756a82db53ca917d4bccf5966341a3225e68d55c87ea5fd384599537d351059c2717e14b797c4f30fe8c484fdcb61a67369c896a94d9ff0ba9c217ad8349c28aad6902f1a749bb6c573d6312a31b8b062e73622effdca50db6b3304da5d37f21d3e9f804b7935ce62ddc77dd6eaffeabf0e3d10cd2da6fe601f527453ba067c2e4ca1b904c773cb101de3b78d0b4d02484e69e4248b1e2b72d09207aeb4f265c77fafda27fc185d25725d0ceda010b31043efee2cf0fae490acdfc1d6bb853c25f20d39e8e5c81af34f61b37c67b938de923c0eea14628eb8ae224478788afe3aeee49a7abf287b2bdcbe3692594a07f6ea60fb50adf77d8b6ca0784e04db17557ec11de050b018c92984c651a710c3f484b6138de5efb3a8053d7839c1e6e4095dd0b656d6619c47d10ee2e10708ea32f14e1795f87e6b20519f47677581a92cb5efcc812436ea44c1a6791c718dbbeb5be7f9263c11cb9445a30ceb6681494d118b9291dd3780660775889411fe088ed79fb8b5702fcb2e55c1f880139eb58bf427b38239216a46b039da417693efb07bf7c7dd669afd8d7726c1e96aea43c43b48f35cec8ee00f9b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020eb967fd403535850bf26852ebfc02991ad8405658231318edeca105ad17b62e52597bbed2459d5f9c21166c733fe6645f2787a5ce35a78ae77a3e261ca207cd10774b3d2770a4cf1a60578d9a4cf7e6d23dc03d98ad43340bcdd44e51fd5af9db1835a7ac4a3500955c33e2e5fb218c2ad3adffccd2026faa1abdb820d00181f8d4db8e0d207b21c46680e98b08ebcd6e795c1719dc9a4c0fc6bc165f3101309560f2a065c8656368d41b303761640d670aca58701d466a28058ac5a550915cdd51e2788b56dc34588e5b7b57a8a00a3ea17dea3fe8a5eacab515bec38c1855df659cfd9292c0c5e758f8749720884bea748c18aaeed62ed5bc11357b74729b7a65667d6a7768eadd93d65e41999b242a0cc42d5080e2e968a15e215eed702c1e959de2c39e5cf9e87e937202b7ecf415482d1d29dbba9ebde3ecf11d7d911fb375a9bf89ca9fa922279c2de84435400fbe8e6bf637712079b6968e3454db56c915c85a3c5932d4fae164bf5807a1a9345b16b4da331ba5f5741d2f2f644506db79a0a9791a6c0ca07f722a09e6145ffd795873a9e1d957dfc39eff7ee2885834e915a89b3945d20871a7faefc7ae8021e479d8378af22d21124acae7bdc8a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001500fb437bea4fefab2c521ac524fe193f5a11c8b00f42b2f15ff3dc95bba8ab3e657033183e925a03c234fc130b6ef9bc2b023877fb23691f119c3fdd742123ec804268444aa61992e1922b1a8d2f3c5cf123b5bfe399844c8da286379340e8d186c39af9aa75656b9a007b748aed46ad00997846a8b0d8f1519a0f4c275ace62f42e33907c751ad7e77288582ff9c6ad2dfc091e21037c91e1ed0a7882bc800177d561909f3e57a1d240533dffac5358e3444cb19555e5cc89656c8d060d4c729dcc392be32bb8f4b38d1df9e038f71868327f192152d94490124e8e9b7088a8ef39a9569e7cd28bf1b1434e3419a2e516ce97ab032e716285c3896a9e8c548cedaab863537a28a04bf497815470ba1869f2bf933f94509f9e0b2cdedefd90bd738e63b7e6ebb26f6083cd1fac680820f66227814bd7ec465cfc3fa14914a98ce34dd5987dd6a0c49c008457643f43d62c6417cbc052f3e99a713a71309ee9a09ff560ae2cb968b27f146b20d6c70f3e09e30cff08ca962e04456e29d1be9d96e98386aca4e601436a2fea883c888a678fdb6e0a1ee7aa71aa4e32cf553d14805c767e31866ba68cd59bf4c710ac0be87e978390b62c1358dc4dcd67d773c800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f424f5320b56e69d8df43eed827a73ef90a828a7ee34acb8635e894cf8235f4734ddcf03585ff96cd32275c9f297ec37a68bbe893a882f709ac2265ca233d11fd5acb9b5f198d2611c99fac2d683e501bca55980943e78fd4d2b282715dadd226506034ae94392cc0144b4d4b1097e40889d3cde3fe6b1d229ac428e739e38fd5aef480d30b9ab356fea70b0dd11d4a1273abcd043bef19aed4336425e3faad9d0252cefa4920995933558f377de8301ca5c1b025e169858d60fc0b05c6beacb53168f530bae9202766228a8a59e4def39da5c8c7200ffe1dd2bc57ae442689e510d6e12720e7631870d1e0ddd38b429da7d699f03ce6e1b36458fcdf4ba812b7b19ca982a4317024d68d1616947d7dc8ceed49169a7208d36d9400300b696c26a15c5842ba9a740397a050b8f4c97d403c5b2f7624fbf71b505fffed56fde55a63bd3b07c2e7bbbc7a1a7b072171dfd5fd983cb15a18fec87a6312ba87944138883648629bc19e45d3b34481c014684fc4609ea16a634221e7f87260c0a2a02fc214b610a229fe32b7b1121b07fc605c408f5b58c06d4e7ba98b0cd5a04bc43f341e72e9bfc717e99b4958826960346b94ed7b632466c5b3ab39db3b7fac6600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cdfbb1e784f83bdf3fab300da1386d7f9e10a8c2f3b375540feaae1000d7e9131997652da6d3b1e895918e5fb55868f82110e1d99279612301a0fc1efcb86f4573240c2644457c5873f26458e449e4295c0af5f92e50efda71fe764e26a1a95078f3203710e0e30da5d9f663fb8e45a60268d3417290b6e8acb4b67ac11b34acee126531ac30ec409383dfb947cfe533695253f77b1640501f8e01fa735f3fffaa217d040035a2296f820c20a7abf36e6eefc35259032aab53dfa95a1def01e8a8466a976d7bed3cf75428008f99cb93d3fd9a6ef2a90bb137c6196c9fe9a93bcad3427ef8b163926adb387b94925d8dd4d61bc49b667019e57d0daff2e12646a9a55640aa4176bc9b8ad59747d0e0e3287f6de29d53e7f37e58ee171b0acdc0ca9f72262325151eb598a69ed4488e16bf726562cb00c4146c5f0a0b88db646a323e3e037c0a038ef9e0c7e52e765942dd62b7972532bbac75090aaf23fe5fecb6a61057df07daac1614f2b9fa7fd0c30ff247193b432c6d6ff4a5dba2b88e5c87044f38cd915eac6ed5e3efb56601c094924fb3f9ced9a073529a6e22154133c20edb7f87f04f5e1ab2146a1563e228e2e4e8f4eca8ded572e23c35790d52600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fd56294758da67098d759e9991d9a1533a5d71cd638ed3ecae448e5fd0ef6afbd8f6920e9b3c0e270fdce1e73d3d9e1fdece30417ad4855101482bc619259a9dbcc67aef4d6c9350481502cc71cce5c0a3ac17ba2c083ef05907700c4daf0442a69c3820c4e32e1d487750d6e681a293b2de7c7948b13ff7c7751e15d5b76e9f13316a8e875dd13d9df33c37118e2f69de8feb4a519399b725bbae00ae8c3a151635e620042269cf6dba487d93b900d57d4412d5a0d4460d4beb32e984ccec94503b61c8706f66907333557ff0fbe458b7ec0211d987a683dca7c0124a27c5a2ff94bb2205ea69f59ea8ead157cc8e32c56691475d8de8c0198c7772995a689cee1da3458c0a36d288950045b2b111372b91509a6f9599aa6fed87163b932100b83960a2a1da9df6e436112b04df0a7092a02bbf0054cbbab0e69a14e3f886a8295ec44f3d8be96d1e47c30e46209e8e72a73f37784d92fe7489f5fcf267ac3564a20e343434f815877f8398ccc8ea97ef37ab2dd6db92c1e68d006f84c66614bd7641eb0ea2974fc848a0836b7a2963eceb82b921cb38c7c59f1817a4b82571382769488f3b8f6f9dcf3cd4737ab11f9d0d4c960582b6263ef3415cc4c35540000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac387644ea50b2849a03b4920808007e109c1e86203a8b6577c04f8ff153b9dce3955ee42fed497b7b48c77191d15ad7beed0665847abdf076fd1dcafef10b0facc7bf4d4879c4bd30f5c81891c08a5762894324ded48d78ae88fc587baaf89cccf962536c85b0c36f73eaf50d24294dbd3ac577a9af134dc0b1f0c8dd219b425309a1805b7fed2fd07b88d794c8d214854d2d1ffbdf184260e98717799723b598ea4bd3d2374f2812c81081f0faf1dc2a98dcc5aa765a46241ccb633b2b215b81cd8592fc71fc6bf45c753e2f36be6d6fad8fabdd25977ab56ac57e16edba954b33b81bb0cc40b1ae5fa0fb6fa4967bb8200408f28246729ccfa9f2e09b8779a27d03b41fb8f99dea5eb4a58cec44d63f4c74eb31e83761908674024637cafb6d2d141f02ddf6acf4aaffdb1e19e0b14c6ad9c95ba58fbde09423619be0f9a2a8b8279830b13b985d17da42a0f26660e59d45d9698e02d7c9c62f59bb4d43a087990ec29941d6b5eace71e985b398d12e5e57aacdfb751c7e7fdfddf042cf5a39fc288266474c2bcb47ba197f00e2e919d139bc71218dad07d663909fc5d0a25804158d0e6562f73ec8982922eeecaf488152c98a54c3748884ac30a276e3ba0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a833cb5628e70f03909b5db6ee4a2f6748bcad84335eaedb55e110637e9eb74dd284c78cff3448c39d3fad746b4d62f4662f75602c1389ca38cee78ffcf93e0cbfe0f3297c050cff49a098601e9ddc6fba280f7e9515b74b2b249c960b4cc76b15e3ee5630aed647efd07f7fd52f3f36aeb9d13a32027eb3228db7344ffb84548f2366b40123825ba470634c3d1d93b51d17dff0a71098ffe33fcb086e43dff4d981a0569b4358b3bf2d0dab42f89de4f7f881e8eb6fa50203fc5e713194611ba5a63363bc4cb6dea838cbad5417882fe018e2508a10394f16133d07b04818dc81b1a6c417610f69385f35c4c165ad32c3f66b8b89a1cec35865a9961cbdd11f50e5abf48b4117ef524ad173428a4d8ac04c7c853a27289d2f5fe5ca992df146a6cbfc5956cf6c5d4a607d559139eeb44d74345e14b8935120ad3a6350b843a6dd407b42dad16d6f1baba8224824b4d6481d55ab7154ccc17e38dfbd754f465b4bd11464d7123ff23b476ab7accf9bbd3c1d44c81c97c51c33811b90b00fd814ce9eabca4567a2814839e4daa9e3c394431451806224bb1d9a6c24aab68578c0c3394d656ea0677772e01e4c34c3145952c00f77c4f48ee357e078818ad1c4c40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6951654912ef42a67e5e9d4e131e988221dd002c1910982a2dc43f12df56c970990b7acff6758759e395e27e4c761789a9f06dbe021eb18706feff5b86e162b745957f9db795260c9b8bd162030144dbd9a8a81d4a663232dafcc54a62ae7665ee678ad30561f8288cc4a5d47d5ded48e5fb909fc660a32d1f39529646682509f8574faad2baeb08fe1c8d3f91dce1030dec0ca695fe07eb18490fb60ea7ddfd10e02f01e4d456b1aa176571a66422fb61bc757f5fdc17a6f85dffcdaa310944c5fa159cb6f7feacdaf1ac581ab96eda2e9896d3bd7f3ccf3efa5657f1bf2b65665ef1ebe55d929ad3c9dc195fe493a322830ab795c536b2165424cc7e66646883eb82e3fd3526ea6a6262e69d403b7a5a57e34165f05751a319d47756071a4d7f56273edae0e491a72d1636e471b5428960d5e4b9aa1fdb70183b1eab3a34af6daebb725f633c105c46a5176c83f1cfe5de7ed91de6841211729acc459c567d3b2dbfb30c7d707b082ce95d8d8cbe350e765dcdf298dc5a871c801513dc057e172c60ae6481998958655efa1a43fa28a65b768b7b0ee950f3b622b63f13ff148b31f795fae5ee1a8b1aa6090c8ce5b3dee85b23f81ab84d4a6bff8d569e2f400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002017adade826de31003e617b74fcf0de76416e8d364163131a7e373384bf29af75ce588c9822c935f043eb49468e181d3ab1f05bd40dee3ba3b2ab965a29bf79f35e9dbfd994d1ee23f09f89854a1c3b041f0527194ed098e1bd2932173b94b0f17d79f432b4ae4df95c16491c5a21ba28ef6abef101ce270115809b24cf722ced075f0033da40cc59f2500bde7769db2e5b8b9c15512b4a8d94923f057622cff17d925f319c2e5722a3ce17eced47d3b25cfd9bc850f76d45d5607cb4d4151ac7f8e38ba18eaab566a7dd6c2c48b6bb306103363109ed69cbefeb6695c98cfd2f5aee02830e9e7fd4b1e54bdbd51737d44e572c13fd0872d5ad5987a0d54ef79b6da76c2534e6525edc0eb404be0c4c01765435ba7a16583fcb2e499a85646efbb13beab0ea3b227c59e3e660e4dac976f21f4e6efbf3c2f6dc58d5c81028b2b9b46510a22af3fc0ca263ca754ba2909bb90f69bbfffa537bf898111efacef4f947342f243755e71569ab95fcb50a0cededb93933fafaad9677ddbbde07dcbbf4f7ce7e4840acf289c4f49ae417527567feef48b7c6c1e1a865386b9e946fc7de2c5722be2b0882edae071462890f105a6103296a1ea08c57dac6b75fe0d29000000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b4840234411a8ec0319ddea3c90fae94d740719a90e5df9970f0b753e3c1839e005d715ee30210eeaecc1485cd172d99e3fa1335577860b23da7ba0378402be0b58c01632a1447f1f553d1326a6dfcce762559aab7e5fc421732c065dfc2d99a2458d1d521438c39ece74d6de3db56a86da0ec0ef75e3659a5ad52df577876a1facca029b617de2d60260ac59dd11b60fb92f6126e606e06afd05f9c6be47419cb7fc1affed55707e70888f2d1ece6761206be110268f39ab4d470c8184079d4904ef07d6e23ecaac3886eb416062574dddf1a845f69f9128f9be1ea6710e64b004401b310818a8f3d2fbe7da1dd91f7e008c367f7a328ff46069f6b7045ec6d2966f0ae918e50aeb6fbd334bacf5f78ae92f70e4e9b2707a45c811945e65b5b3aa2b098c78c15a1a91799006d57f69982dde85775af01da8c8a00b1942f57b1f8b570c7042380500625b03e434c801d383202e014063bd3f66198adebfb6315230e1048728fddfd1dc21260d18a26fff7c1043a40fdb4f8d6f6b13919174e1fdd9af21c3fc024e3faab24a27af09d421886c3fe3cda9487a8ce4988442a584f299b51a8378c85eeda74f4ac9cde52ba134227d54188cb1f9381b12692b03c79331bc238562cf0a4c36d51a1cfd4f08218f3484979edc63301d4567d64fd5ead15bda1e67207f4aaa5d1cc9a6056a8a4514a7317bfc23eee7cbd71d3efe134dfbd9552c458377f1d9c55e4b7d74167bba81d15f7acac2aa0cb9b54343aefb8340056d22a263869fc9dacbc9fff5595b931f83309df053a37aa7bc2b9ff49ed3fbdbdf113a532daa8398bbacb4829b66defd8fe89202433d06b5c213a9c4c10b6349242f5c97d41ad7c4f136515c61827a409f7e2e73c8c306891acaf99d46142eebde225b527b673f59c27cec1e11121035dffec15cfcf4fd411d6e840a6b5b0233ce134ba7f7a791aed361d195307b6a2c59b75230cacadc2d9ca5c98db4383ae2900951196df381d13b942071580fbc2e51d9d5d27e663f0ac644bb5f90acb24a74091fa0ecab0b0d0a35e1588782f040951a78b01ef655979848b467b39f3799aa1e6455352e56645bcc99d94771a97ef0aaa941585676e79b91abfcc02ed6530112a05d57f640bed04d9a1d2737b8b20b79edb1505e3fd7a6bcc0afe39144dda20dc3efe611a116d1fff274a941dc998a309bf0b50acdc16d13434da7e6b22f8a1d9a9b24e5c2c51214754e4f9d0693dded60650ae1c94dac3c48cb32cb67576d02dd5a8f083cc87436e802103968c80b55a2d488050a64a03e7f907037cd462224fd2945abb76b591ca68f1e5408ed8e270468aa084532d814ec933d3e7bb78f17e3d99c6ba01629f6f58b50a0efe934830c276968777a04839c58c2fee3bacb027ba5a54683ab7f778988c6f84afada3d31a969d811103201cbcf62fe7f097b06a0759e6b0b095ab5a4987207284c961a53581c511fb397a00c9db225863b730270d6012136bdf2a600a57bf307ec778ac052d4d3fe76e8642e9afee4124d1017eceefb7d4ae1d4c2523a36375a0920cf62d14c39416d31476b963c57a8c1891a3da6226bffdd1a25382a47884656e32952e7e24f03db986d1a78172fc2cbba023337b55ab1246ac72389aee3c59db7fd9f79a7ee15bd34140481e30b239aa8038602746588ee775d31efb303c95781a77a1b0e6db07ea6efae847361eef5331b2d05bc453148617d9239486133576c6848f75e6c57a496aff8530114c5d14a0278450481cede0897eca89619d4cee72ea1f90fb20f4e120a617cb507eba4c20f4587ec1eee0f7a31f30371bcad565af4517da950cd00a40502483391433685138e4c9ce61cb3fa43fd462e26bff84e694933ce0a2e988adf5fa139163fd1d4300740ea2667b7c7c29cb3fb770b8c6f34f1f2beda8d854ce38eb5ab9568d5f81b88e70b0fd456b7ffd11cb77f50f73274fd97994347a23814271b6bf96c1dfc00a5ce10986788e415b0ef29768f25edb3711b7ea645179d5ce7bd2050c34a592b0a4f59e5b1cad7535463f1a0f50854ba55f4a6952fcc364c47efc3f87efad51a27805ca7d458421cbc82f3f6e98dc36385bf65811d5a68a9cabd045a35ccc0067bf4555af7ca4a4031f872030ad5a680e05a8abd4d84c204ed7dcae9c460a61f97a3dba0108162f5c7df23ae1339050c1e5e43253cb18266acc7f1e516d68d01e578a13faf642b4bd8dab08428f4c983ac9b5404a6f424c2cd8236a706160a14ae286016a440e495bbf57b0608edcace21206bc79c15dbfbd9f26b36b8f85c112063d7bfe74de236b2133d03132edd4b40b9c119b8a128e47d09f6da286fff003f3f5702e8beb51012eb4c4d5b9186c5a5c5dccbc49766005d861b8a576df8052cc224c906430e1dbcc77b4ef37e42f12aae2ea3ea8d5c83c0d6c317b62def1471dd168d7237c3eb2925e31b6aed7f797db733f520475ebe0ae9aa7f967a291e690914d27938f42aafed301e42cb9e6c2561e518b006692086eed1786dd45c16bc0b077bccea06f859dc1acc9227d79388832296926dfcf1cf73c44d96b05f277095a745b03b459c65d4813fc4ecea39222d3f3c6a59526190de41d0b3dd122a92c8337458de0030afdd3de17b3787735140a833da8ddc2406848c8c36f732293cf1ee3c465a3ceba5b4d79cf9b429da981e00f94ed4ba6fa08ecc6ebce5f905105f2c3785600edc1a3c7f157d4229f928e724a36ebb9b2f75e9faf2b71e08065ea1bb0fada331f43e9b0caeb6c3fd68a7f737460802bdf43fead78e79c6a91724ed438337a302c9874bac7f565e533877ffd12c8373c64b9886f8edfd68aa28b39b5374c67cdbac77d6d7fb08aca8286c3929260d7e8c184cf13d32aa2442400e69b3f091a81e12e0ff08a4d312b929293198d8187cd76f65d8404fffdb7def1a2c8b8305274c5ed6f4ac520733cc5ba0d96b77f2db55305fdc993627fa38f70f107e6722a25f86cfe98cffc9edc293d7403387671625887f3fba29a07b0911108554712cd8a457dd412696d1b9ff014560ec32c732233222989931d6f686382e79dbce1642613db55325a4f596b5231642e46daeeecfd2a10bb2e6eddc1dad1c3a9f92b0d0a40cda3fc301b4ab6fe7c8bd8fb1c3e8ebfb337ce1812f74061a06dda0712ae0033dbc20f81b63302dc8162785dafba3399bb8396181c588323520e7bca30d4e44a5520fbb2e344e3de49fc9bf2e36971389f453f04813bd73b419fe1a9f5d5cd3bdab977c599f72647257d2e23606752b8233e53d1c008ebc1b0bddd76013ebe667a742093c65c9ebd7acdd54e97ae12f28969e94a02acfaa9322f2eb5a73a797f4c8eb222dc66e0762e45a18c52073625082512157c95b9ac4019b8bb29e40b005f3bda7e69fe486c54a6454e3ec8228d4c4b01cc1c85641b72b7b5e7d1aa97e32ebc8fde9c1c54de5e6b17308cdac2090296ec7125f60f1191f8e3a4f15646a6f53bcdb956097504c3570543db3ae94db3b116fb9e5695c8f15aacc330e1b6c7ada60419f3492250230881e1b24965e70d4dfb5e95d412bda00ab400028834e21aee2893b302ba0289e1581146b20f9a58996604436b09c022460e9df638f79472aa074cc5ebcebed5b735073ad955e1858dfbe22dd9395cb22e8827cd2144e0689ea7011ad0646ab7699c7fd626a2be58ff912ac1c54878916f57bcdfc42f295793ef62eec41c2567e99b3ef99f19bfd354b5f94a6627bf21edcf05edb639b48fcc4ac7194dc5dc23f7ac4d80bfe33fc2925c2d63f58088803b354cc2bfc4223793a042b3a02f8116f8e2b2cf6fe68a24cd08d18399b7d9f14a2b8f4bfffe5a670dab4005886ab51f8bc7edae4b4cbfa7d76c0e3ddc5492c16d5f70ee33ae1c74fe37f45a53643de874ecbc53d9f1301496a0e3bea836304198417047f638c8be844a46b2e76b8e194cb163ae57668663f04bee85d2a28c60c9d8a89e738965ef5a0aca4f2686a37c79991a221fb675e131620eda53168cb18fcc6bf719098ea6764923f0c13aa960577ede807483d3faa4e586225288f4e19aa4f3a46d152c5ead49cab205cc86cc9fe428fda4cd4593ccd7a2024a9b90b09172ae2bf82563b8e7e51c17bcc8384c204b9f8b6dee74dab5d56122113a1bd2c01bb90530afe6a9f0a9c5667ddb72fdf11802fb1bbd253dc59cb780fac65b720ab29850c8681a02ecdcb76838952304d51a13bdfe6911b092c449be8d5be6d03a4e621872a5824d0b3c816e7fee8cc43f205d39b24c7381c00d625bf048fc606ff9ea62e3b3985c68f2acd1455e00804c3f43dd2f66a08045100196ae8804c05aafbf61205971de8083646b79c495008e94076895635cadfa911eb952bbd511cc5e9bfd91010b98113e037f55e2a8ec0ff6cebfd4fdfd0262ed2ec82cf144706025527f97b1116e96939f7d86a4be3a089095c0968573f1ecc08a64e595f07125432144f11d163451575f4492b6dfe7a194a2d80cc53a6ba5f097451ec7af406b06b0c67e3e2d9ea92ccb75319bc5be7845780b775dde5cd3f2350436bef49068e83298de9d188f10022184fbbb16e353fa5a77e927a6efaa569723ad5fd512618f73351388efe0a530cf3d522d70db90aead9dbc4c7c95d215a4531bcb83a124a079e9b02e7e81223c7b1c85914b4a91fa784db39eea08ad9636ad664bab11f02168fa62060769e587f92b566cf32c8b3bd31f2959e27c79dbc1193b67dee2522ae8fc796c0cabdcfdaeada4aab98f1fa3b26e2517f5e281a1f7d7edb34a617884b5076d736efe8f4a76ef2838b8279ef5ad6e3880774c1f43b7f91347b102f36ced9a7eeac9eae27a0332a78f351e26c5a88d061bebe746d3ef5b247b3251b333e82315c9fe9d831aae8f754b1cfae4b86e81b3b5780528dde451252b4ed192730ba385166570b185111a19327e2fd9d9953c8f0bf38b939120f5404b0111f03c36591b25aa8ccb428b46121197d0f7c0ec49a5cec025fb54d8ae0beca33169c2c36b910f40e9356d82abfe6481c37e13c063341b5ff159c956518c8f2fa2df421a44c037bbda792ac399d8579896f70e456a8c50e6b1fd201b2d89341e20e35059ee56fa845ad979c7bae770150e5692103f21675d5240e0273059bd83f1b77c8a08044f221d6d6f42c80f75c1475ae94d595ca8202f0c7ddadb372ceb310b0d659b48e93aacb4c302847cb77e73c1cb46f70a2adb5d8da8cf8294e4cdd24fb6133dbb70eff19169dd1735a8742e9880ac1d7474a359823c33607096ecd2adc10231b05c848b6e4b510d34b0e0a220ea772467267d3d3859609285ab76b034df8b710de45d8efcc5935af69130a841509e80c1b989ed9f0d054756fac742cd29aeaef8205f5d2819db052edc9a9cf0363062646ac824e80e970d2cfb62326fdf267ecbc28b72dcfc09bebd97de9237441ac826d9070d70a52769754045a088425c28fac15bcb46a709621d1079afc3e024ee5952329d78a1dfe656b5e4921176d751e3bd9c0855e1311a47503383cd5758fe47473d8d42735ce0fbb72b525e6200ad63c5d3a0e8121b00e51d43eb15bb3489fdb6f1a8fd109cd39b4ce6f19615e4600ffbf671a624b4d5b1a7b3de313a744637c07570f71d11fe81c3eb606b78ce88412710bd23b009bb0d3a84ebaaef05518a56d5ddb9b574ae68d321b0e0044447309930abe49c87b1943becc464aaa882a40a4d345c68f32276b82a118accf856efef1105802f65d40b0eb0ce877cd730d4e26464ba16045ce7a7508003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000014118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000140d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000140a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000140b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000001429a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000014141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000001425e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000001412978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000142daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000014189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000141159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000001405ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000001405c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000001414d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000001403db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000142ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000141213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000141ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000001414fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000142b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000014305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000014280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000014223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000001417a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000001408858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000142618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000140f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000140e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000014172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000140b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000001405bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000014137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000142e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000142297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000142608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000001418373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000140422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000014204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000140afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000141998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000001428d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000141da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000001421d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000140ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000140e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000014107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000142f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000001409726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000001424f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000001403c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000141fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000014205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000001425110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000014283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000001421cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000014094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000140c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000141f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000142421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000141fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000141bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000014304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000239bb35d0c97662ebd6c094367d5ac79849dee4ed242b6bc58ddd1df23d2e6f8eea406e369f39208af330f49522d7bc457e7e7a934e7fd1778b42d9fb8e6938824967a7eb03a7d8daadc27ed6c6b41f8634a117cbaf54a4903f3895abe55020fd9be37225b5fb1e47dd577d7920df1e9d9a480c4b9c81c081969b9bb08bf13ca9a2661b82076411ba5199e6e7bf4d62b6f60e87716031de4b1a04b9f4fa36a1e61e8735e3ad722161f9be7218f9f142e58eb56b49e857cd07219f9b9fe1cd72faff045a3e4a871a28c9d52000a14e1ede8e0682e28b6cbc051f7fdeb0c5261235e2ec9860b722f4e00af44a0d36a597f6108ff0b8b603ad69d65116f18f970e263074b44080bbe7ef5516202000e372d31a67b0e5e46e825f6ebfe9546ce68e52ffb4ac37d5cc1c414a5077fde9a70c9d862c9b57e8bd7fa43011b5de7676b4e6298a0a365963b1a14df632016a1689f33b2cbb94b73787c033fe180962c5c925fbe6b525b49da68cd3345d9923b1e89e24515fb181f50411a00fb97b8e9e60799b89c2e724f017c589eb9d9874e2f2fd38f94fa8282087eb26e5da5fd2ff9380539294b2f431c1c672bedf4d98492989e22d3d376d84b6b8812a135bbd419910000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192862bd32a77fd11886ce9df0e52ca0f60daba5846b053ccdfca267eab1f4b860f2143ebaf25586a5ca76b0b7cd0ecbac9be37f92b7fb410f4e348f016732167df657b00ec7eda348097ac958ae5795b23303d0902b8a3c10ad90334cca63be51a02579250b3fcfb541d8af8d4b66fca29a17477ee4f4028dbbc78972dd91c06aa2073bcc2ff9263dd96e9b1d3d169ce3720716460d25f407e82ebdbe3c159014266eda7eaf3e575a1e63b36338a3ec657c2a8999c29f603708eb995e995a107a9f6308b3958caed3f4141a3572641d1e492153e4c8d9beff0281798a66b8c2152a3373a5ba85609eda5d8a1ec35766e632fbde430e79869bc5f8e9a8dcdb0c8ae5a039238de367a003afbfc345c9d5ac19cfc25557c8fdce1dc51677e2c839b1748d9201028b57736c15d4afe9d176b365599f1fc3de8bdcb1275bd7b5320264d6fca88156685e9272d4dcf73470d1d4ccdbb5628856fa6e4bdae4cd1fa238744247393d2d8a84e20f0e942f143daf5255d63d4d9b37fcd9a1e98aeaf826df218e417ec12b11944360ddbb1b5fd849550f1dd3071f449314bfcd1d86f16500ac5a3cf22cc25af1ddedbf3d53ac862fbd3db8936912d662f15c9a17fad9d52c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082fd930c8e0bfcfe7152a6f66941a6bda08234384d4e223997a364e07b59bac770717d6a8b453bacccb9b4db105a4196400e6694606e52e671d14b3450bb21c54395505cc8fbe8972d205cfef8654d0aca716b6a40ea2c775bb1d3c0213d9a194fd345d11e25cfa4be4c5f20dbe45337110ac2a9854b860919896df34819fc0241babd3c8069518970105ec5bc6818931330a5ded743eb50acce50fb7f28801e27864d42124ba06c7e0b173adcd623751863aefdb38afa866942491966a448d84b52a17251920b22a3d7adf4d2f919b89a612da5c325fed4bce87454068123f4326f64946b5053aae8c6a3275a12ef7b6ad2085162951a4e044f95089a42568c859dabeb248c75f8418af244d42c3d538d166afee878f8df7f40a8ea790c71586eb7b9b79a6ffacdc60362332e63bdb319bc4d9ca2296fa100c40ca9443df196ca1b1a0a8acf7b84294bbc0e37513e79b7d9e581020268ae60d8a038b82eef807359e9fd9ed5d49a0911fe4a190333e084541f8786d1b987cd8f8a162467d79226df82d83546dd6e1d39af31e24dcac7fff48a4340491f617168648cf80013620cd91c80d75d2d61e077669f39c88db1cf189d8e22388daf7f8034569dc7a7350000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab298a58f9e5c533dc7e40423893cdc400b34f42107491320ef978df41b2313ccde74f502ae71176339b6df3d82fed5984b6934b1f184fbab8672c92fc5cb0d1b54017abd4de922e3b1c435d4ce357dcded12cfe958da1a7ef9619bdb0dc08513c2b53e84f3c633292e7f2dcc387bcfda1f0736ec27ee86c7c77200a321319a0d608c7160dec64cb26f64120d2cf565c0cd632427587edc3402d02cc48fa96e2a9ba01c921ebcd5e729d0223d837d918fd46a606ea926fe88405f964d48f7f587936ff30af81c9e74efb8ca418a6e1820d3f5f6d36e92a7491b38ab9c25dd9f8d3030a100311e06ba54f48606707194574bbfa04077da3f43f705c2faa6c432d7ae9bba8d6328a8e1fa8a0e19fff6fdf5e53a4d0e3ac6a9b5de45f1ffdabd2d560f06194e67d4a926682be1a64db638c51088952b71e102745af598c63be67d7095b0eb6edba7cd14803104278f6ce86b51fcae072e18e9d2c22207a91470a889e367cc77f0886b6b902481effae8b952c404082d349f2354521d1401f7974a0402fc678296ab1ea8432f0d6468235228793bb85eee5fb177ab558d4b89d6b7b6eb9df1ec18a932d98c16f23b61507484940d3b9b39a3d9e84c1cf3381f37ab0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087d4c46c6e2949300fe2a3f5135ee7fa346e53c0a74fb22e35c277783bae13f1aace1d4a251196d9dc130b5a8e9402f179b380116c23d17e01bf2687f685d35657551ae6b21f69d378a9435082cbc6b48cec0eb2b7c408285499411f85b28e39a029abc205602394b7777942614b906086e95080c326c65ce78a0e91dddefaed460b10dd60119482511283de0100867f8e279796e014cf9e39d079014288a7858a4a7efcec29f9f93e608893fd91f24a6c3efa1c84291ca64ff778af91920f7fd4ffa9d804680fd3dd777b827993f25c9ff84cd013eecc81e5322d18e1ff6b2750b9136af140268547d5168030b07b3ef783ca76ec9cf10b60bbd87b73beac092acdc8a1a9ca6d001e68bc3f2b523eee005dcd0ec3851fd630c5b514be90d287b94bcd32f9cc2188b3775d76eaea49017801d170a64073686747baf91a234d7cad11235423b3463745196d9f661d2709505f1dee8c2a55ceba489e31c8fb7b7e91616177cfdc622501c8fc879af36b95b29643134340f3d8665cc8b86e94c811bb0873b773f9b643677ea7ff822858a9380cdd97f697652a4f2bde63aa6895ae6e07fde3b95aee81e57256aefe981164f62926792387e967f34c0f257c3acd68000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092e4991a6b13520ec7d17222ac55a4c78b9664c4ee7d27ed93effd8d89ac45714675bee0e631f72b650b38de5866917605d5258b5095922bf0894a59eeb0c08e6e171145bb02bdb00311b8aecf4e79ce5968f8171be0093ba6a68ea7d4030681547a92854634c168e741153ec7b01e4ffe0975b987924b962abdb97351100509591fe30d3023885db9789b789636136ae9fd0612d2efe4b847a614db2848b7b2af7ae7bc07258f582365a6e959ff8b9739401638b62fd7aa925c353a420fbcfeaec7106f8730576debd4158e8224248bdf432396c72cfead6b2e14e989b0a127f6bec0b5fdce942230da32be51f7785c8c020b92a3e8bde1c5a99084155b99d5748b4155b089e6d8eaf8fd0086d65d51fcc509299abba6198854dc4a5203c5a699dc4bfd8608f8d3199a3332049df9b00d286d571bb86a3385e7371186dcd61d04741955c909df1bf8202b630b826392d08f2440c70ff3dbaca7529b01f3d7881ed65c892f6e0ba1cfe7b4a7820175b9441294d268ccf7bb0686a576e5e23d1bc69b15c86031bf7280ffef490762d8be5987922c7aa927677a594d1f060cf722beeca73361337159d34215b62d7f1d1f14b22dbd1651c1da921657826697b1420000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000248d872c508f8c139e3f621fdee6235d1935435b7eefb6e1590d073d17592175231a9fb41f15b8151953ae3d2103f6c86deac1e5f440d376430976da27e360d379b198de0c8524ed7dbff1eb69118add966c28097bb5e6f00f9724fd4ff284714a7358845c3b58138ff49cbd8c6c8755a9a72a9cb9bd240161952eabd88c6f0ba2abe5d4bee606c385a216532976682a3f79dd33278ae7425d92a62c4d1d7e1ba431a748bcb35b88a937531cf4c72b49ecbe484c6d8987e7033e3bf558c5f8939a753b49fc154ad7b002b02ab5d3a181582672afbb2101470a3d35aee0c15fdb3fb1b96222cbeb8cf6ae8edb229fcff7ec37ff083412e6cb805b0b68c97bf90cd59512b8359b85a47d9b91f4f5e3308a554c8312ce34b9e82682120f86f43de135032395ab266b8ff04551ee79e3bc3d3ab2cd4f21a7f8ca177c1dc4c8ede5ece73ee5ca24e934aee69dd23696bae724f851544a662868fd69ff59acae23595adb81edcfe7c37f457a86ef03038f4dc5285aa6bd5b681f5ffdf9533e5345835b5cb804c16e1db80c4abbe4a18a4f7fc2d9c16474311b95bc1b8d09bb03658a1444bc4532728e97a5c72bb584ad881520b3f7563faf19d6e653d617057fd7cbe00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000839760a026ba478f6e285276aaae8936c0088ceaac90c759981a726a2bf50d9b76b4a1fc57b26d7736d6ec135174c7a71dc7f03452a303d409e58f8e935d058cc8276ecc76bb5ccaea1f94984829810ae4d96d6062a8d2089765e613ff1cdb7a35d2eb78f9f9063cf3ad28dc1173237c7e5cb873ab72ad7576bed617896a20f4a862e185a13ca8dc08af34a6668375c33c38cc95d736cc8b8028310f49d3d7f014463b9ef13051b3e58d13c97db651cbc088d655525686a1d790e8d3fa4f88a9f5cda5f81a13e12ea0ff46016fcc726174cb7eac47088e6c636fcf4ac530b0766f8574f80888d8f01aecbbb4afc86c05071138edfef42628c4c95d31ce56d8dd8ada2bf91282826551f6525f31cdbdaffdabcf1c12ae5c7fb54f2b9db50f901618a3ef1e4cfa27c5daa56c4e7a978646ff23e1dbe286ae9a49c5f39c63878d5040256ccfb72d8d47f46af9e41c0cea854a4ea33c4299704d43fa106fac3f3dac245fab40774ad2db34d95c3b8d58c2b1defc68f5bed4ced4a670016a9e0f73ed65388d1467c934f65688b334628f71233a27af0d14bf291a47784008839eea89b3962bdb6a64d49462479d55cd347e373d24f06e4ec6fcb61c452f853eb92871000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021ad68bf5b377162d156ae237a182e6e007ef13fb7bac3cec1d4170d3c321ecae75df15fc1b9aaa98bda5f62458ea4899aeda0f296cabe70354df229014b52df7b057e0be690ce006ff5fbf106745724951b2d78bee3dc2f709158bce5c92e5eea7e16b5ed6985ea464ae12e21bf6ca799f2fc1933852909984214b26be49fc5b9c1c48a2fe2f985ed397ce63a896a88059fb55166c1710ddbd88da5be39a124bca26e56a2705745767671c018e6b2570084ffefb139079d7341267bb1b1d76affa8c65b7d6e210c318da83930becbec05d6fc48429fa42ca5ea85640f02c87c590b441eb37b151e3c48b30e4eab5b96f053ad940e070d3cc26f8ca30cc6788e0f312ce50506628636040214e5e081da4edaa87a19303edf54ab1e9f8b44ac74a1afe1b9e697457496b4a79beec085720efdc26f413d4a1ef9cc50deda4cf9efd2cb551fe49f2b49b6bdab91cd26e8de6d62939debf7bcd735919e7ca82aaf7b79e59b5ca783bb217b5ae5d4f8e8f96b256bfb69ee4cc25b146f2592c7400caae31c81f2ae9f6289c8a70f60de821da0b5fb9b1e3fd7ae74b2f450c06aec3c7a4f3b3f97a5b8b26785049bed8865362407d1ab4a38da3df63d867f5b7ffbee7e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d4aa970ce2b5e81f3e0993bea6edeb4a55cda2e151e3fc4f631f2e3835544724eff6e08afe3ad754d164e8345387157089a7037ac2bfdf59545955af07d735be900ff58eae60d78fb845ea26988df2cebb284b6408adf9c37de6dc81b142fab0532725eae01c06bff397aa0aab6616acbdaae0191ac79b9bb1400390b5f38906132cc1612ecdb563ddff181cd7b47512364057f87e520d29ba3ac7fc8efeb2815bfcfc981624d3a4725b8543956db863fa7ba0bac9162a9bdeed01521b6519c6a473b8b2a678a946b2c28125e767a0a66317ebd58b848a6d3adfcd85bf3693d6a8d9eefbb7abcfc5a94c4c8d282a38b03d30d463bf128a64db4c39d5fb6e62d78ee4841e2ac0c600b23b012fa07928da81f88b18c861ce0fcbbc5639cc5a52766843c2eff74f19e07ff2dfa1bf64d026dad41a013cefc5812c6ce43bbfd14712273fd7e58f70620e8d134854cb59bddcdef64e3a32f46f9c8d8dda193d6f1bde86347d363b837168a974710d3d26630a251786ba23b24e78270661b19b91a09a3042db9dd7feb07fd81f960263e3b7140e682e0585b4a7d7c22270527459d4417eec93b2580d6e26bd70ecefa8e9a3536889e4dd3b2bd76033f1abb715bb21700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a1e0cf34a9763477dacab1ea3d81f9a1a0e618d8b94fe4f1ca78c06ffbb97078d363f60885af421218b6f6e9d29b7d7696c1f74794fd74070f591980d2816b30b4d66069577974f3b6b706deab413b91675997b19da07beb7c47c0e95d5ce1783b384e1ef8bb91befadd6f44ee6c1371a77783f87667db99678dabc1ab11fb1b44d2a64f8d151bd17aafec13552edbdfa0a49e048376d3dfa72f4c473bb25349323e972eaeb627f2ebe0247dd7f48cb8d9b90a0b1430ba0d83b6c4cc338aa9939a93817c2357f2c307b7785d2d2589eb86ff1c37e03abd53ec701baba23e8e6a119b24d483d8a93ce212ab8d79587d3f6f9d8ca03cf507eeec856fc3283a83f957c9784dd0ef40034482a1c8248c4813e06315e274a15cdad09f5fc4471f4cf370cd91ed4b31691d862975adce6a6650ed81121a25d1c10b48c46e67b559391ce0f0b0cca09a5da5658e9f2e88d872c6daac30ed630493977029e4aa0bd4d08de31a3aeafb30fbaff5e5519abe11125ff10d0ae8bbaf50d22502860287db8932f8e5a44c204f3c6b10d996f6766ef34d1ae401dc6c7a0f05af37a5637e158710f793f02b10bba95b93f0c4cb9de57dbb801ec3cde44f81fb5e9483e8dac55e200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b7e8c2ff7b54224f0900f2460647b5960fdb9fb398b0794327b58b1c0798c82ef46fdfad401c31346ddd8e69a73d6fde2e0a757a3d5ac391b17ce795d3a65fe9a244c2801d11d165ef76ca5f961548b8ff1f08316c65182366c9665c400f112fbd860670eb369453fce9266a2c20e723c0b91289ccaefc5c67d5a6863036899c01f163ebf94fbfae8748085709b9e6021623989bf7d6f3f8ad85108cf77e20e05673bcc45ef1dd36c207cb446cd53c36837cf91edbc140d72883cf847b98b8eb9fac0e2f8af5f01601ff75caffa838c8ec962b87fc6a8f785ce6b6218c5046d408e9c4fda2991f56e8a4c0e289a891574010af4c75fcca70b922b10ccfd0253052b96c020a2f9ea9df51601bed6b3688d27f48f2e65f2aaeabacc35eabfff47c2e46a5448c4c4e0b60e8134e75ed1ce7723163fe52815f214fbb7da41456403e871e7955c37b283145ae3a48119dc16a0da37912204ed144fac58e6d48bae21d617c9135f0afed80fc6828c71d2741ee30c865573083a25e2120e845b323f6f545bfe8fb5191329b0861f5fc46fa8d6fa68a0fb3e4428e82ce33a917ae6d9ccc208d5003ed69897368301aca916a5f80c2ef148d458d52e87a1d709bd8385c300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d5ad153f948ea83053caea5c4b69db6b4ac8ec11a6421a9f38306d3f39e3636bc01b50eab8c39de4aa795fd58a4faa3570992aebfc5c48f2687f2c32faf342d8226ad37563139dd8e60891ac9403944a5386f614b02a5ba4177d6740bb42189b9002b07c69d8de6a8ab94ecd03f8e2669ed4a1d5553fe11e5f90a92b120ee370fc81dff5c8f24eb55bb7f23af70de8c3b78284304412e8892737065f2fa747cb50469335b89019b01782cbc3150d7cb06c68fd054720a5f26e7e3695e47e8e9da93a889109f1b216890c6cf2af73193cae129d3f6daf74c4e8bc062a654c4cd49adb630b155bc35e5743e8af1a559bc68558009ac5f4dc743cd13b359a42c89796b69df78aef41d6ab8a7e5ecbb81461f44194246300f3773d5f60b3deec23813a777bc96a14e6db4515d340fbe2edcf7cb14beae4a97d0dcb2f8556a459d1031a022013314755995417fbfd5525c6138fee5a38d82932543c5832f7e72ce37032f9f7a6e36fd5d2d5e92abf6b02b662e7e6f0582fcd997b74aca65d9b2df25b7d0224862c40167278745183e99983ef25281fd871c27bee0b5c571c157bcf262d54cd62607c37db27568e394cfda10fe4d70757f96564d07eed4936b3260c200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f7f263e17bbd3c1a5b24495492cb565a7b2d52581d45480d7022d42843f7ef0b1cac0176250652d865cc1a1cf305b4b70a2b0d1c34851407a888a5cda29ace220a8c0319e71848769c5c55b8f4ee55807ea77e8636a99f2eb7306875ab04a72c6a022222ccf8b981f15826016b8152b52801290b2013821ec3ec1cefd0d672b8364b26a8a5eb2b13b26162fbd70c5b9853881e25364560f2ce29e7c6c8a3e28d29297a3a2fef22b9eb390d78a360aaba0d5b6ccf784421d8b03cdca25af54d21fa38c8639ed9a9ea80327fe979a709bc487d44babf8d645351fd957bb583c0bcf51463a20f6e25d06a93eb1cc55a80f730b4f6444412dc40b5f959149a9231a21543bb85578d564f4b42da3890a2f850ef78ad642d0d84da733758dc1033b4fd8e63747b25bab7a7b1578a9375da9069a4981f61e3d10fa96d0b31f5fccdd4e8be8a5acc95fc3eae0eb1f88c83aa1f708268350d9fb29a3152666d4d477b0b20dddafecbc25c0c2cae069f5b09b5ffe1f8800f66b550018ad3b1f9ba02fca5ec1c059f23a3d641b949c883525633b03c928900c11c90de7083565f23543306a094a8d59f9d6329051bde9c5b1a4420eee4375757f5977afaf1b12323c9edd450000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8b49b1bac40e9b7020f23e0c7644a117978435704a4f1d1b2d18ba95d12f22e1fc02601ab101ce3d7356b751098456131f8d3abe0af38400ff360013f0329c5cdabefdba2bf5059bdee88d5f145ebaa0c377f029dd403fb72b87693f365381595289b6df5c74edd56bdada2c5774c02a55bacbf4a1b97c12e43425b6dd614e439d700c66eb9fc33f1087750d04a65751ea34b618a9fc7c0686fb194c1bc1b24bdab116838b259e36cdeeac5c393d95fe060ed76b11dd47ced52e88e8e3e3ec00bfd1af0eb8f66ca17188d996553f30e9ce5a7895a2027819dad7787a5d8dfa808c9a3142a23173c9246d84627e93d1cef0155ca983dd5d1d5da648e1d07a3ccae9a0eed932735da9680317cc702017a27f4322817cc454b254e83bcc93e7b055ba461aa7ec9e7edd965c0a796ed3c18fd6d3e679bcdb5598a90d22966a998f9a421e6db61e767507cd94bd10cdaf29b8440b06c8c2f47e819a13931992eccfb59e3a9c72738808617e208ec5a9933ddce4770aa1989e156345bfbc4424c9b923d278fcba96e6b407b834cb538c33f0d9db63f0fbc42319829bff9d837830d7fa57f9277897fc42e18fc450047e81033d94f93c0aa67b288ca1c4599aa6ffb96000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027a0813c7b55eeaece5cefb1a8878f20e3815dff10cac01e1b4e5abad0f3d083abc951e82902e0519f19be4a95df346697ffacffef752156a2726b2967bec69ba8de28486810755299d443fde5cdb7822d5ad8913d42d70d6a63b409298c54ff8b4b6e8398851c7377c93775553281e9e6566de8df1c95c634747185ce47238ed7f7ca0a8f1c83e384d4d80dc5a097af9d929827a70e5d07fb7c474bc3aacd736abc9623dcc759568894718d21ab6f20d0f65422f397a4f26bbdae378a02f3ce059d91a25678f4ad1c679fe130fdb041820bdce2a4dec8c1bcef913f4cf5437ff36242bcd97513e17a427a6bb5880d66cd1ea556af718549d61828f943c1d44f7099edca7434af6cd9c92b66aafbf897a7c9eceb6e625526915cfcc96c133af389e19525c5dc9d226a4c9d3055cfd3a49d8a0b3230e6d4532c4248716c1f3ee0c9b773bf1cfc7fc41b18c21f9d30d82552695a8733adde117eaa9d72269962387a0a464539d793a99c83b18603617ad027df936962d42e43e0c4b3f5a6a77d3cbce9a5c6ae70a74916c0a6315f54d43a3b111436fc83cff74c6a7125c2a1507c1c3f89c655382aeac10efabef38e68a044b8c95deccd09a18b8b76755047a3f5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096e8ea56e6498d3187424aa3cdc3723dc4139eab74249de470c5647d84e3f8c498918553775eda7b10ede1b1f104e412b8ea953f3d3b40aa35594ed97af86955ffde9d4bbc21ce0a0b7cc49d4c974fdf369cfb8a7877d5bb0abe087b7dfb4286ec3b5363c6084d4f4963497b26dfa858dc6c94e17cff7bce7517116c04a61e080e81a5426daaf544562e36edc785ff56a45be27318a0bc28f2cf76fe284889a2b66ecec5e085f94e4a90e008e8f8fdac1f3d20f67743f80fbf544eaa2bdcb815db1611b5aee6f1d3f74c2feff50cee5e24f1e7c135c8f5cea20409cb3d44d30549ca4e9045c94554606e7ee7671fbb79cae9873bc8b9110b52c028278f6df402c73a056cd4f0f2fbac8560953d1dc55a698f27afca9ff00e927479e06d63492b8af1c88c31377e7d2c0e8b2fadfb961c9ba1ac0172c89c2e5ab63a6c70b6b93ab9ec665da9ea2b2542643b3c83610b775a717279e45144e67e14759008c7ffd7a0748f55680fd88df9f5a6e3cacf7a047c108e71ef570a36aec336b2e2c8d7927db79ed5922fd20bda50582433d632e0517285df468097dd92c68ed00eebf072fde23fd6c5e51186d3cab2e0fb474c97ca2daca81c3868fa315f9415227d2bc50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035ed883089cfc265203e6d3ed9978b4cf1feb63cc28a029b5f4b0e7bddede870f11f0036395b3516fb8ea6ae223fae7dad5732b6f04c4244674cca3ed20c05c8fa2d978f9f30c89406bb20333e3409069175cd3c1b808db7c0194251c52a652ca60b122c2b872fd4dc5d9a864cc356cb934696ffc3ee6cf4f4913f23652b95caf0d32345cfd508c05d860d6340e4aa8420be93f1237a9796d2286dfa53a014ffd71179641872c463b6910123b9010b27fb1d2a5d5c0177d737bc29a2e4851fc584fc906f9dd11dd8ab5578887ea1cc2b6dc27047778e24ff35bf08ee7ed2f13a746b8256598dddfd433c80536cc93ac590d1cdb217876178e25d9a862203444d9cd0a6a750d452debd13e2c2eee9c9fd6de084749d34d40037bf1b704103b989f7f0138ac6ca52859993d1eb0d01e9513737b0e72293096b999ae5132c6e266b752fdfd90265d99ef862d31e7ec35b1bf04287dc6f2597c96353a9af0fe98138497bbfddb921ba1ff0e5215d0b47bcd31ed4ae45c0fc240547f5c5b4a329f364ca173d9081f28ab8d69f80caf49d5b08ba88cc6aebb7900ff1ad3df0fe6b187ad15c0a177bb84f5196e997777ced46f55693a692a784a152cbe803e561cdd4100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e57efba88de2ea180fcfbdf7d3dec5b39d3eea4a4757b7108f2566ef224b2e11e2538383ad0bf98fe82b2486825592f81c9908861130e0e1d4b1f9449a7db0364cc70c1b9dfd1ed7b61e95547df6769b23125561a4f2a408057faf46bf141ac777d7dbb66f98e08b935920d300d5a0c7d32f6999291c2fab8bc214b9b661813f1768e67bed5cbe72f7d58f7de9752f188a7992d117ea1fa6fcbf504e8c6df659511ba0c8f4cdf9555a381fd3d6b609cb4b5cbb149c89d836f4360d4c4255b7310bb45696558b3dea59e9367e27144b87fe37baa0e39093079aa1c02fb4adff14ab86a16de27d373bb09292cc8a40b771069035684dc36815117ee30a875edc6e7c8c7e3fa6fe7f1d9128bacf51c4cb93fe95b13f4cb5dedc2eff860587b488d5b7e76d3722093aadc676920273616009b668881f60fc51ef4586f65ce97594825d6a3048fda7fbb008e1b34a7e9c8202de94e6857dda43d79a9fdcb18105a35d2cf219ab8dfc6fedc2053574ddbd4dcb0e886c157b7e9e904bf600a1123dd372736fd5f49d9bc824c3c7fa0f902e9f893373df1402c88c67cd94ecc9027607dfea001ed6d1a3c0c159cd97319f6089ef6bc5d4e1f2636583bff864b23a54f5e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000907dc7581dd3df3acc8f9cd8c431b8ee549519fb4d95be4782e7cbdb2866aebeaabba25f30b62d7e39f987a2b7fe8145e6bea50a2a56bd2c2385f0d0033328d73941dceb03238994d45ab9af757196f8c088e2611bfdf012927976c6e12ca3bbf7351341f7fde6f512d1061f62907003567c61524ccba4dc95b76bb04b25f5a181af33ab6c953825be41ead69cfdfd7bf00b808393d2b1f05b635521d7b381dadff3a0f3570f34517d53238161a219c4428a1c79e5d2d5f9ec6943c65fe07834f443d8f08766417bcc7a716baf5c854cdb6d63ef6a418574ef4ff226bf16b25633c9ef45860f33d5b5cac754256eb84897ff4b74f00d2924197e3eaf97225974bad26c46b252a7fe07b2adedb168cc8268314bdaf521ef20d807948079fa198af9c99079ab9575c5fe50e9c412e33955d7b0f7c3714bf636fa7c7f72e321b59ffbc3347bf2294816bc086f9065dabd7e148e2f021b9a322835c58bcfcdd8b203bb4ee946163dbff564262b2b8cbfb6807bdf4427b717ac372cfdc5fe6389ed4913d4d9dee43f21c942fb0ceb8df67e5ae593caa80eb497c295ee860d93bf1c27047952ba969fded1bc386f733843c6705aa8b0e6ee0fac1c70eb802aced3f9ee000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ce698a4ad12933d3daafa40d5201f6150898313b9f764a1950e47408d38397fe532bffa03852df3f88057b6e849e49e9f4636791f19342f0b825c2d22946b69a1c61c36b8281870d896f262bde848253c1c6ff8dc05ae9d877bc359824db983846f9f8685d84d6eeecc923f5909f0292f1ff7d388884aa7ba5d16ee766b3d924863d6cf4ecd619b663f512196c935ee29a487ffd187aceb353a3d7c3b1bfb4e312d6c404776d00f3b80e424a24571786fd3a923f0f7c2f62d81b6f85236205fe2319c5b1e7065419efe0e4649cf0eae038548d5eb38a7c51aaf1d18317ac82d4cc5fcbf18cfae1c691dee45930fc9b618cfb301acf0c391842f3d53e34befe0e75976c70a6391d3234111c52b7b405a82b01d839ec3963b33863f6c14fc3d985c286f8773ef5c2ae4b94f64605920086de0b1c8d11bddfe503fc71760ea7a8828e8dde8ea6b16199ccb32eb9ec23b0da2c38ab05d883b5399bdf1bbc2b87887d7c52148055ad5aca71e8a831cbeaba36507e3516cf0421a81357e803b606cbaaf8bcb2d2d9da5c17d1d40f34f5a1e45b87cd9c908aa2aeaf09e67c3a764d6844449a268dd39e2af596f8ed5c67be0f3595f7045d62c08ab08d407670e4986d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099f2e7fbc5106d0a2e6e2bcca6f06115880392a70933b8a38acc28601d6db63d3cf83a7632f29c90fa881ff3f0c37b952547d25db6cfe0a2b267d7752bff4923573b047a8b1d9015b4d150b9226598bfd353c309a59def3d2b281eeeaaf103f82df50bdf51e04e25c73d27562cba78e6699a812482724e91128ef843250ca2cbdc87a3db44f646f9c0733770bd1f58e4c477006d7788dedfe51b0604457035d0369fae94e5a2685076912118de8584bb49715c3aabdb414871c4c37ced2ac0bdcc1d16f1e0b126a96beac648d8c3fb02ea41b6ed8200d359a6b9bca4e6f8f7b762672f8d317782d3a73a4facb3b2b9dc8e78d1672fd5779ae418fe00b79c1f0d5b5006140277f02dcc235c2b27121598d86852a76e11034259314890884bf8902c2a2964aec328c0918bd85e21d446bfde4cb716266f8e9bbd961eb14b16bb2f3674e97e77a3fbc5b4d8bc6c183284cbae42259f2c24957ae90ec85b6f2098e93f1183885be508e75c223a8ee44565e456e7f88f97697d2d072a9feb99412923ae49d5d50ddf40723f9bd955f5c0d92a2a8b2d93ad91de3ae74adaa42566e8aad2d7a74cef47d32f73601800f4bdd4767d1b26137ed500df1a308e62695455c1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088884f928b70c8f3a77706e5f8e37f3c0e91f8805671e3c9a676e35ee90211f3aa08918b7a3ccb6b84f246669b9e1007664adefc70d6107dc99756c6ca86174157063d190c8b725a921439f26f9da1b247396d4189b42f3fbd9fbd5d76bbbf05199d9df114c7c78b70503fbd7106d2942fb75e8aef8568cc33e4238158b1ff6cb9a9fcf858629973074e1c66f825939bc8a5b7834b27e01ea204ab5a7d892661f6fbad4d22fcefbbe728e49ff38f28a010708eebcb71b38e3743cc84fc2b63efba580775614f717ba8124c1e3ef7400119b22c7da0cdc57284425ff49a7cad25ed23c4bea43efc721443b83171223d9ca63638df6cc28480e757dbb049c3e0813f28dab74b63921ac35915406fce9d51d61b5d9ba58e8319febc5b7788da02e99d91fed870b570aa29ff49c03a34245e9d66c97094df401db7ac7f73048a2247bccbd878fd7223d9f4f1a232c83a5bb266866b37ac92be43abab1849a652d1f2abcf6c51543bd568759b80f595ad9710a7865e90af4ab30674c18a3374af95c0adf69566177b74da1e4ff28c04bcf47423f6bf8a8429164cf377ce8688ff03f74acb15df05fb0f36d023cda50d76f1ff4920d664cd58a844eefd41433e53ce1400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001018f3c5b9deb73a9d29f00214b3be53e66b9005a5e19976ab7c69875d81db282b70dc3b5062b943e4411ee4138d5f1da9b99968b97b46a537e340031bb4e0a3830b29894d719435924e9259c68d55d6a9ac35709d5f4f7fefd0806bc53833ffeccc02ba68502c74e9f8ee148cd5123a397e9913823a4004a5f11cd851e72c838560642b196d1d6ba0a24941af9fcf3ccdb9bacc2cd5583c4bd2a610b110321ef1602a587b5c287b93a0e2354cc53b91213cffa29ebb888c81763461c87d266d88bd4c6bb8e63facd4d205908abcd268565adad5238ba47e64c31c0a9ecc2b343fd7f2ac4dc3f943d102d3e63e85dd54c5c1488a507502b48331376494fcefcabd98a4fa65ee4661c2cb3fdb9147c8f7aa3ccfda3919ccebcaf9d53c6df2482500ab6cbd99763c5aee700eea9ebec57850ad63183cbd6afa775f162ed8a942db76f3cedec5a924a1c81dad1ae1bfd26b5f4cb9657223b1decea1dcc1a41d196d2b72846152fac3832dce267ebc3244b49f557b3761f5ca31afc9af0b853e103b4f8f54fc28113a92728b61642daea74fe21816a229cd073db5d1b029e172450d0ecae0dac3d94f50cd39fd3d73c71c8ed204e6b2abc087e84361ab7c66e5001400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b09293e3812aa954835d2cf9d1bc20b88d00680dc838e3f6a312d21c83ce1240b18d29bfb9c5df2e2a45ff0cb6190dae8ddeb0d07dad4379422851ccb5b649d708b4663b71b7dfbbbec86af7f4a2b70aeb77c8ff61ac610fb4af3cdebb63bfbff347c943649e78de925fe291eea33d44b0806a7309cb5fd2332bd3ac366b0b993fd45330477f38f3d7efeaa81f5fd70625c5f72e6cd7974dfb92d28c18f1d63027c8e8cf19b8573d9db773120121805c03f52d839bf52d27ed9072230b98a2ec99f302dc6bbad9dc47ca4a64217784fc6e32c440c2e553b21a48ee2b3ff473e2fae5c4ef789edb1178e827ceab6edc88f595fca00df7733443bd4dbec0fb45911dfd415ca64fd20b19f179d8096b922c0930c3b27ce048875bb7cc44cb700cecf92f443df54110e9aa6032dc62f111a02a758b709a2b9a74084bd2eea29dffe9b53803e912965299cd591fbaa51520be251024ffd10ea1c891a05836727b306bdbb318ff050964501abd9ec7f7e0a7ca1c1adfc457c0e90af5992b676e64ff8dd3ebe5aae89ccc165277f08f58d5f3b2d573a50bf7f8de8e5696debd157ebed71a884f0fd5aa2adbaf64342d8d3f3b3a36c6ece7a708be727b75be6e44f88100000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205700fada46530c607bf141926923138fd3d4a08b244e5c2e29431a8d4222a68d6803d8ba6e4cc074ab4dc33730ea627fc603c6dbb6ea3351784d4f242734c09aca6cfefd6bd0b1d1553cf7027ee7c6a82f5ceeefba4468d0283d18cf7c43b919d649d2be981cfce025d3bd3ff5d5e8001ede66bd4f8912462eaf6176bb06c415e01aa0a00c9962ea12455070d2f914bb3a13ada4d33e6b8e504de8b59b9e27da839c644166632c500f5e969fe0f4a19250c6f668ef928a9c4ca88442fbcd6c260a31a5319104cf8aec998e5aedec8748d1d8cd2e51e4784d80a6ae282ac9e0b2d8b36655b6adf37a1e66ce6fc26dbd53c3356752a36e8ece9fc4ce25d33fd836842f74b8a11959a2e40442ac9b5727d35694e0fe39d40292f1edb1f229337937deb813dd184fd14802c58f5be642ad13e5dad66c8d67f5e0a5aad8b097d09b3512efe4c20dfa0e595b1002127ab99e32825edd80bfabe817250fb9de47f155b541978b3119bc755c8515dc1ed0273d8b51ec492e1165fc55c07e8bb8a9a236f126f719f6de6a40497df5eb2d0813bc370faff8c4c09e2b640d3117198f6217f190f4ce3fe6c1bca09fd3ce34da74f4a45257c763d3448f3aa93cb3317fc6e5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ab9a03282fe42dd53a576b28c2aa1be5efe3181ee898ebd32faf4ab326b171f948e0e2ef3a65a018743039f4a550849010c507f39f1bc94d5bcba59defe0427b336251b42df9deffbbbde7ce36e5f9eb170e97604d3540135feae8aa807fb54564c0572c0fe442e70578b4bb7c3d246cc9295a61477a75af0bea2004b79af3dcc966609460c3c4f2cd654716db51a89e97afe18a276e0318da7fe590dd048f4ef577c46c5416806600cd17aeb6333e4d32c2e0ae6ec46f2505873d76277e98ee3a7ac94bfe11a1bb5982c5f03186b74ff2dde8d17505d840f1d96f138bdb40e937af7eb4c4bafbeb2da0ecbbc599d54e28ebf8fd1ca7a0f997031caa1ea6b4a7c9c30407cc59238ca37e03101e82f8a5da42c0410de911fa70fea0e95214cb1999d3339a6e9a76da052843ec087e62d854fe757778e73b3097dc870cb099daff82e8a7b340492ab06bf1095aeb70536d8f3f306ef6092efb785065203fb524e8388a7a00e09fbe3d643315003e4f08d912c584f3a3ef73d95d46761fae01ce47fa95bc6a9aa4f6b1a117e028ec9473f1f8f9a1587c11d0594879738102633139bbc9672e3175f37290d71d4a6b15d9fa50e3ff49538a505ece220b02c4ec410000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000831ee4ea592f8dc4c9caeadddd5a20d1881936d3bc339820708cc6851b96085299fa14af32a99315c8d1b2023fa7f34cf26160472e44d3f8e57bbc94fce00fdb4f0b0fbd0553092561992ffd2b2ab5bbbe1fcfb3caef89f6316c60b884cbda7995798f8ceb05c321916261166d3f7ba1e273e003b85175daee41f62b2b84e654ffb1dc817071b62f039668cf0c6965757c5dc5fbc1467ddba6552ebb0142bdcac589f28eaa0665edbb4a2ab59c4b95c60d7627cba10bc9283cce9784267fd893dbc8813eb7c60b77b934f91e5d185c05e55976f3dfea5bf25ecf1767bbeb8691b45d4cf94ae46ef06541aef13e5118ec7ef52f1d92f0de792944a27027518e845f1144b31d16ccf8ff42faaf65e45da43d8b8b15735460e8bdbf5e85e66e98736b3aa8328f0558fa8f59d127daa4b7c68b7d90d659745fbf7dbf9a9908b99ff8df1d67dec53c8bbfea3a18baef3979b60a23bc071901e6b6ec8e7b912759470ab90736b64ab86a5d66497e9f038515dc40abba77975cc3d86a8ad94c522cd3b6b087100d7b72d5028182e9268b6e1bd49248672123015a14b6a17d22c1f015cf9b92a61d677e880b40186ee548c73989b1fe3b9db0f02aada8d1c5f43d03c82300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cc8f11db60539c22ad7f878743910885b2c75232e6523ab1200ecd6ce13860a43798e7ea35fb2c4a96f9b2179b60425f7ee8eb1ad7ccd5c2c882c72a751e29ea98f37812edc68cfe6ea34ab6eb71c7f1813c616679960660b8082b333c67e69721a9a08300a76784c0fa99de39da5ceae034c73192b2c5f3ec0e45ea7b9bdc5e4da430b601d0487c4594361439108e186f94602f19f638195da2add0f4c250f09d3bdf96dc10e333e6306889f95b5c379ad8cadb141d1d4fba62976f82ac5bdb7d3f6545b4ff366cbc65cac858ae5dd2245ab5e522e7cd4b1f4f74ae6dd48efc9102af3d8c2884e2d49876569ec5d169287ca6b6dab5b8af9ee7b2fd5c451b4e2206c704da8e89f0b1911b2a535ac3c74b7dd1a8b1bfd95a71e8877c815b55ee9ea28f6571b8b7096e721905f1b6c6d603b3cc3b10a1c15c6c3caedd4e92e24696e1c96b3777fe3f598b2fad5b928b44c96595403801bbb38a6efdad1772c7354458b8044c8c8fa94b4f925543eb37ac268a42deaeb8538201489042f8dfd40f84cb33b9390f2bf84c5d045bb6d077d5073d8129e509161c0a1ef6d7c1addfae68a62b5078e7f16b7fa6c9866adc4ad83a46c8786fcc5848bc428dca208d3160000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac866e26da18520840d9ecd53b024db8068f2b8055dfe356650cb4423440f6ee2d3681095c48fc73ca9336a519f04572cb4f0fb7df44dc94145ffd88eb2cbcc6729a605b04781477b460fe529df992fdf08254679fa116a315ee73d4abdefd0e7ee9407a4a36d8ef65d0046ff798845d6d4cdb0a64d67afe50dbc3537d97f0c3646157bfbacf47f8ce09d7f6ccacab56b4bfd70110de9ee7bf9e693bc1b07ff90b8b382bf0383d1fdea6312e87b00e7171fa35f251c5c2a716cfa000d1e1fbef9d474416b1a56ac33b52622be7bcb0d5dc347dd02b434c0b5229e79128de73afee340d468db16c74d4cd2d692748ce4df43ee02d1f5ac1c08829fd50253286ae6a6333604dc8325e5b59216b380339dcbbd5fa5eec5f2d0acc72c0cb44bc0cacccf16ce8637bbee773a6458bb1febccc3455cc08a4630aa7db8fb6b550670b2119b808daa14cf42284e36ea88fcc59aeccc6c304a8be8c2113f218f1847952e54f7023dc561fadc0d4d21fc29a4607c245c3ea8121a4e9c2a5678fdf2ca3c3aa77b4406aafd2f5cee2ea3b247c94d52aace169d95ff308e42a70237a0758722f5567a6dfcc73f2899e5689d1467ac8d337df2ae55a049ba041b0c2f31b95a77000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dbd4b4ea2ca99d87f715841509f5e7b4416f8d1699eacbcd5f5bc02a18429a2eae76c0333acef430faeded4991a7eae8dcab88086e83097bd2d8a69e5dcd55e5137172806cc6aaad2e9ff6eeca05c50e8eaf0b4511f9ec2cf673b457a8a38d6609758b54e2f43b67057981f799bf208e86028b9b49eb10b21a48640b5b471e8fef35fe8f62736d2833044e71141020b6c690d2cf410e9b31d4e220e432201b7976dccfdce3ce918847bebdb523b1cf8c2bc8e344f6dd8f9e2c9d3329e3b51105ea2e85b44b267d5bd5be0897528d4641b46a8e8e20e057fb5faa02906f278ca891ae05391ca960f319217ad9ca54654c4d1371929ada480167d6f16acb5971ee8ba23836c01c68d0bc0dfb7d5d098b08445d491293d530af3fcbd50f1ecd2129655ff60c9c1a1a1bf8574fd21336f9e6d6cc9fe560b6bb49da53abbc2e0b569aa1c437020f04abdec40fe6f6e31481a6e30ccccce339c1526e133b93d758c92e74a7f8b1706799363778abdb5e64e1cf33345ac5291b73b985e79b7d66abd9e3a702a27297edbadcb6d7e4602b257a30b9827be90a0add91f25ad907b61b52964a0070d58e7daeda9f841ff57448dcc4aef265c01f44452ee5b7b2f5f386d5200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002088f5e7e9e29c5e247fbb139469517bed7f447078513d39f20bb2baa7494ef48dd3fd6738d3941b3e54bfbcd7433506e8d230b649d0c623b510f950f2a7498bc6d226f00a57efcfe06fc1661f112bb994d068394d99869276ebb6defb56b2d0537d86fb8bd81a2a2f1d8cc4656413c82202992130655c35d81556a766050cd3f7157c9d0f5bc0dbb3a245ed2000152c8510a93188ccf6de2c34ee05a2cf9a0b851d1320426fc2f1b2d78db660993a1f4ca2bfe99de4a3807fd009776461045661b0e1082397507746bb17c956545465d8f34ef01b1c48d71f8973dcd8ca99dfaf93ad9c7ce0f218e336efbbfe16b385f3fdd3f07daf3676a4fe5a9593f40bce2395cfcabc6d6daffde7a623ad96cd5da9d576a6e1a3d433dc8ca212f42c9dc06badf3b42ea4f42662b49d60be2ce1dfeb8aa070932a173868b1c7029df0b18dea2cd5b80d3d198f2efcc2d961fd36654057b98b6675951ef32eb440c460f4debe7bd53eca81bf5a909f8b3102b481db232dd74d3e3fb2479c691f0649e7d092ded7932e211db76504bad06d36c2214a21b6ad2d341c9e200db02a13e6f4882c61c5b611222a7f86be2465a0a690253f0a678df80c4d28c14fcc661d45cee4f10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afb22ddbbb63bb66db6c2d847b757dc32aa02bdaf10309a773c5ad99dd3e4a4719f3caeab08793ee093997515274b870e11affebfc831b70869adf1a0ec753dbd19c06a2f0f469d6fdfb378c4a2c83eb53cdda0e217df15a2427ed3e806df943410e2d588dc5ab2916ec2d0c562858a9d085ffe45a09716f56f82354cb368c42f735c7ed1f1063f28fd2c10d43d1a954857c69f66032b99ec77a1570cc3fe0a35eded095e9da4a45f9ded0135978540753ee1cf04fe31a49101cb2d87c707dfb8d7e1bfcdc6b9aa475628083c241276c74f5561f7efaa5dd0d5d6e12138c6709c04eb5e9ba427d5c06047cecd88524917425dc44b5b0dada2c2fa8c0f64bef9e53b5d6cc00473cda409eacbef9ba167696dcb54deeb18474188f6598095f4fcc28bd02aafe7bca572ff5fdc5a3e06993ff36ca718519106df1e390d2046bfa476033665e0ac131e14401c0ca9bcdce060dc805e4a9fa097ccc19a57af22203fee721324166d9ff8718bed648f4ffbc8d919a7c212bf43fa0ff28a517f3597350698dc804ae87acb13562746538776adba0dd62f439dae1bcac1f02788c3a5ba1375adeb25905d93eaad089708220818027b9a991e2e8b17aa56ce4539bbb674b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097df06a1b05a1c3d577f449b219fd6a6e422884e80da5e58e24fadb71a9b05f483741d123f75adc3919717bc0d4bbc9276a09591ca842524b4ec009374523fd9136ecbfab9b7e530ccafd3f4f594901d552260d35ae495fe74abcfa0957f7504c1b1a81adec1d0d504466a4a9a0d3690e7b01ce290b9f34b22c839b3b098542a5db95c3d0433966b985c094b8986cd403bb6cb3215e5a009acff27aaac4d1705ee73acd397972853060352b3bbe88b4fd80deca240a3e5747b6e7a4c2fc6c2e78721ebf1477ee9f12a053a68138fc3567071e12ac5c6f07c915271e70a182959d86478bbacfb8453c1264f0e48a9197f2dab5f67c4a041673febddfb1b3eeae9101b901904fce3f475663fbe817bc2b3b6a27bb218c8cb3cc7902dd49f4f0583390f30e6c99f0bb46f5a90165dbc2c4cfc62461d35fb58b20409b523b7ab78ba9b53232eded8f7aa759576b5cd0d9981c29d53526f4a6999b47de71409b623b909690ff87225a480b9c4bc71291a5f89c538dec9ae32324a7fb3f82a180f8f46dbbec4dad76c20f1c2288c3941e59e623d4cff9bbe316574e84beb24b89248c6f46065ad49e804a45b5d8a2f22a4e01a9a3f6888e547cc3bc79c439636eb07a50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8d46d14d90ab12ddd34cbbe30b2915dd89f3d7676afb4a6e20815cb5a94fc270fbfa31f170cf3060686e6a77e6013954f3c7ca809d549c0b59602f58c6f791823b9d91f168b6219ec4162409b2456eef5977c664b3906a7355ce5d96568200191a1e1e8d56d0a3c3eb938f7e1b22f3328f162bd533909c5e86f6c6abbb56d0d73e0df4a5c89bf68748369d8aa20e122d38509c6555b661ee4abf9bc66536e4fff7aa8dc66b07d1d54d98af5d75f5d0ee9e0ed965a7b9717988b6171a8df08e39564a719c11ead90f136d580c3cae7639b2d08ca3d37b587a51ce37fb073407b7dfcaf43974fc1c41f39aee5b193274cf505de0083e516e2553cc1e224f7bde48822128dc25c58bb00b91b5a0b01d2c90ce93c367b0f41d0fad1bc8ad6bf62b1b30bbf127e1e8bd4a1f52cceba01cf8f232ba2c0db427e7e06e3c8113920e5dd2eb1fb5684c30ce110497bee181681ead33faa236899c71ae730371e7d838679a486e77c00e607f0892101472cf254e4ae204787cf8b105b6b1e652608a526e3c9e1ca032829e1dc5da0b490787a36c504d6443c2c37460b2d476dfce4acba470398b07ab8b1866a482779d6444c3b7dbc39391b8a2e1fcf9aa4bbac14084672000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096494dcbee5e5feaff3ba5813e8ec5201bfe1ecf70c9fd65af2773df3a06c488056853dd2bbb1e2826c21c9b98c2501a501b7cb7194773a3af6831ef1914689eb350241df07efe361c1c6b4169afe8294c093894859051603991698998bff08ace55f876a8347d7907ae3a9c1e60b3844bbb2a6d08f2bbcd601a79de80109db30b84ff2ba6fa91438824500db981f0fbd95a6fcb16c41362f239a73159c15a43db6439a720a6b3ee447673dade3e5b5f7946808afbb3cceb5247f6151e1e58d59eefdfcf1d1242f5c31752a15c9eba8ad8112ab8939b5055163a6b2cc533d5b9e3a2f7fabd4d3842bb1d30a31788dab3b0aae4ad0be87fb5010ec840113c303e4b9634cf72e750418c6ea487837d480daefcf2097f75db7acc6663b2817775b1cdff876b5cd9b9890bd332b2186af85fb1f1409690752a5bcd3c3e822ba59bcad0cc146fdc19902a2858806eedaed4decd4c43685904f3e511955751c7c5517c2bf9fee2589afeb411b68e8554e58cc220c6fbcf01a381c25bcfc4ec3a295cf96ecab40b28a5762b06b300218b7e3f31d55159ea3ca53f49a4794ad022bd1cad32eddfafe77a1876a1886c41fb2853a7020c886d9750e42911df6a8f06f4d97200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d2662191c276eff905e19aade4bd6cdd7295dbd79ee9a4f021abbd217dfa6819e20f1380ded210ff3a9764db35dad8c4db02a032db4aab77a4d8d168764dab1abe9fa6b09c8c67083678aa1be17384bb96c00334d2bbe9e2d711a6d1926f69b0228c47754499225e542d7dadddd16d976ff3a843320b658c034eb2e521b82b7a45e67ba9804939c600ac30a935b7b08fcb768db2877d3d46add7ceba64b90499987d59b57db36ae4f3cf922f5ca77ec03e1d7709e94215f28017598bc5816d164541a3b7a782e37377ac9fb02e7eb648a13392fb27ac7c4df7db16704421c549e7fb60b4fda187a38884b3af352c2ff2b66e428eeaae223b6dc2dd3712817788ba1c40537d7b92ddde522b406952001561eddbe1f56d8eb7f99656d8ce7400ae2e067a285f00c5e631810fec0f8e44d4d3363c31c69cf6768a1003a6b9f231b3fa10b91ceef8fb396859c2e38f6d17a7c3a66a10d7c4429355edcbebc7bfddab6cd5d1d0935028f1b875c06ad0376341c9c179b698845b62f4641879c7894e4bcf8edfef9629ca2230b63a4f303e69c01dac3faa3c3f42a78700e4c4feddcb4207d125b372d61d9953a7f39699587c3cb70463d5453b647987f46e3223c166200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fdec186ac7bbe3ec7c0e9e054b16ba45f78880c6584fb3c0bf152bf6e0968a3447de03cb0ede8d02d97866528db3d4148d33f02c5cc38a1093f4d4986c0de42ae2cb6cf1e9e0999e34eb99d5848ca016893e977a9203fc760c3b63a69116a226493b891276bf9fa84e2dba6b810639905abd720cb5d88056875c4266659c7f901958a5045837f3af37aa38f5218a3b6db16e49b0257ca53a599f46290c3180af42f819a405a55decbec0abe3d093d40cdbab441b77781e48647f5f3a45c20e28505eb9a79fe7a1e953777e46e7b8bf30fbef5889c5fd78df3af1626d589cd82f0d29b1fad599edc7612ae07071ffd07c47f3f3704710dcd561caa73233a508a95c14736c666355f720e24249e51cc0e3b655a2169477b2c62f4f0fceb9581d964d3255f075c5d05423861ba08e77cce79b9e48f46f2b964b00db22276d12f5b26174b066a618e2538301edb9a06386e453490e04883dd6f519ba31d99d408754e70a1de459b14a5a5afb222674afee530c2d2608b79197d03ea3d280b5c35ae06ba51f6b8cf21a022b51689cfc9089182ee91fceb7d62f1fde0db45d37d8b609f3f31af7911f18b2f985fb1faf9113daa6357799a864d258be8afdd9cdf29b400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ebc688fe4aaf0daea66e3dfcac442012c429a8800adbaa67809b7b1c660902d48ccae89f1af50bdb398532d51d621acd3d563e55675276a8bef3bb83fab6ce05758f9f8b86ffc542705ccf321623298f8febc3162d952c3251bd230d0cefa87980c97a914a6abedf8c043b7e35ba47e3fb1e8c153c8d0abe91d60f16985036e906fe52083d8662c062d2b754f8becdba38da33304fac2b1703c26548539704bbe484903fadf2cd508c16fbb12eeedfc813326ccfb559eb281a909d6ff913ba0c437769ee5a4b4275054bf4c77cf7c862963097e138b21f68aaedc5906068971146dc4167e20163dd95f90826416bc821f076b4f7460c584cd30660479efac20f46fe5bcb99df413a51575326106b3bd28b41e9f407449e1c90bbde1cb3ac6e2b26201f9af07f11bf60f9407c3f45dbfffa9c927ef3a36c1b5eb0fbedf972ee2eea8ede0a0f66e361854a8ed6148187f4b8620661e3aeff50e4a755e6f9d75f88bbfb9a0b2c9ab2e329dd788393160e9308ce95423e196e56d2780c265c351da4f06be0b268158314c188cd4cbad44c26626d0d1f018f3d968c897ad087a8d4faa54c74ac531fe56e25264767492727dbf508ebb22bc3f9c65faeac69eea34410000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac85da414b51d5ea321f6750ffbce470e6053568808144ac9fdb3d1f33dcee48f90c9d16244b5959175768e33492cf5887715fe5df7b2f6c73bec75723d279551801c00bcd10604a24b80e1d681f1e09d30fd5e27aa01ed56b01b7c8bb1f39fdd277ea7af0e8db141bba494a24b2cb9dfce26bc67974aa609007363a56dc59622463f36a404d7ce8213c00607d611ffc6a024f1c40dad8432ba59a7c98a7b9d07065ff1dd0e63d09fd2bb3a92067a0c1932fcb1bc990b4f1a403fd4c0e70e87da9baa2942b2f18bac979ba3ec0db073c1f4275b1c979bd19827e0ce52154fa2b8571524726a48a25c4c7a0b69386c5379b8f4857d3fbffc07fb6ce4486f8f5fe889faca439b606ac11cc62fec8ff5f7430d323ad6d5c190bd49ad98019940663bfc6595a05054cd74d60e216adcd4f339b3f5de0508fa0f484897f5c19c80472db0475409ad1fd783671751ada51ba293821ba35fd9854aa1e578de36277840465081b7220dbcf7b6bdf3776f6711e040f24d1441a901a7ea321aa627530f674068529234633c11802f862dc718f7218f50c37f8413442bcaa152cf08c73ec10949fd8c20d0818e9eb664e38fc112f2fc67c1e1784de615fe1eb2c49315b6687000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093667002f7595192c3f318b13af5e083bfff0fefaf327a8040edd1b62129946716c805bd7b2cc9b853d00e0db2bfcb34c004bb8013db10f66d620bb16f989da8fed274e25dbe1f63a3adc220af5fb282c05cd51a70ee0e79deb625b966101f20ff550a93fc1ab6029c65c2ab00c4a44d223ee64c48be2c4eed5b19b50bc366ea5ac85298aabfc1fb5c160148c5c6a0ff5562403913c90a5b3694b80e04d5275cbfa4127050beb7a449dfd26d60a7fd563a34c4bec7564b81dade73b818d9e3c74760752f3b70c4d5ce27cb76248f03210302154a3910575003e9cef3f5b9022fd78bcca5594105b9deb7b384042996d29a6439be2aaaef42c2f34c347aad3783867a1c5959923e352408de9496d2111dd199a2a2c059987ac3bb06f6c39cb3c649e39057e11660eb5dd280eee8ea2856687d9c1992aa7c5ce55d5b043978fdadeaa49455338da8bd2ee10123035d96e76767d065bdff78e7def04215fe2e36fed768a04d31f6e56893ff6b6ad94a8f99733108b27f880cf10fc40f753a0a79f01879e7de7d15009dccc8c7138f2516a9b6d800c880df8a53c33ebbb424c092976eb041d422ab1e8485937f4324eac1059d03c67e48ace6afd3645e09ec2ded620000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000868969df8062b56967a7ddc729d652603dc749603037ac397905703105ee2123e5c1a56f2f8685db02944abc163ef5e4c7e666a5424d610d671d37a361920b777b40f5aea008e99acf7e6e77f67f496dfdf9b9fecbacd5a398108158543f0e05827eb7e0a8bd5ba6422f405965055811bca97b54eb27e23f20a5733d7d047472e94feb5e1e5e000a8458750ef83b273d7d5084572272eecc653547492234332ca8768139ce4a72128495e7a259921c8b0ccc153e0cf7bdfda518b20c9eec62047437f34755c66d6658346643c484aa4ac683f5bcdfdf746347e9491c77cc0188d0ff61bbc8c8c2155cc85920f0444f907677988c95bd78c30fb24038569243ac6bc412953669623b7232b400fc7838b7fd7cecb93d3a0e196c757f6991d0127340c60fe402b8a7d63292407b2f3232cf5b55dfe4193352b09cda9429e7d4d05a5d91bb25c42ccf426502c4a5efc817c81c24a08daaf593d78a909a9350856bb33f462778e7bba0afb295c0cc7a3e678abf0d8e131f3eac95990619902beac8cffe64b76e4b3f6fb07c9f14fe9e7dd69066bdaeb607692c68cef1e0334843e47ecddc98070fedfe1a958e72661ec2a54d9ad20e6d53e1f965a95849548c3b3f1800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002dd7a0e860990208e687667dbd8c0f4ee7a22c001b40f3c461e6f59b7753a9086fe393dc7c55114e3f9595241c73c9b43c76e6d1104f2f054a9de294b3f43b6c90d33fbb05359a14b02fef90122ec52abbd2e1aab2db7df46f2353cc699eda7c5337198dd6979088a67107b3bd08569492f77e8a7680218b74d09870f84c9c1b641ba0b6595b02edf95abc97136de5489997484001f3be0fb6a71be6dac45779bbd380f5dff1a3d240b25f2bfef1465810d15e9d4baf72a3f7db0117eba2bd1e87b50096465e4493dc7b2e369fe34080e335eec84118d9ab613e7beb573d1e1cdfb6cd26fed128e93570e851efd9b30f9f4eff95477dcb70da373062993e88bdd40df432eda5273855ce162ad59b3d7a3000dbb638d6fa0fc2beebd7735f91b928cbf3c9827c27ea45ee244918abff73954c39e7ece7b75670bd108569b2fe50a024c45e741498dbe834eba387e10e7bb8e3afc1f86c4fc2e0d24f601ab1ae72822add2aceb14dba348849b9dab8b3c75d4e5f18659c386b3edf3ae9715e4579a592731243772e54d7e3bce2a4b7407b3afa8f60fc8f0651772c4551ee3bfe634f65771c2fc1fc43ffba83a72044e03063a122e8aa9ccafbba54358e9f10c3cc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000269b1087e723b8c35768c0e3358b14132fbcfd10301836cd24f84b383c9fa00d3baedacbaae25a7dc74a7dff817fc06b07a4a180ee11b0ee0b43738f9369358529587f8c31e223736c923293499c4d973d984cf836932599817226abaddfea1089eba9f9bae86b85c8bd7c2421edb0e55275adf1cc325416636b13226b8321ffae88fc778d015c347dc96704301517210b3001e7ae6256b150e9ebe94222dc3188fd36d6e80d5a3374bd73b22c7af979ecea1e63999c5c25bbc207cc16cdcecc7f597185172fcee895b0e660ac44d5cab8146fb0431d36053c5b6dc8f63e0c8f17d40f39a1450624111ac7c43255604339abb0ae765588e6b65b1b5d22ef44fe05515ab3d276953ac7a64099d2db0e91a335a3165c8f4f33c54fdfda1457ff2c6c3ed060648d1482afdc7c5e9ca9dd85b4f8efd3b922942d230d9962858a55c168b64e76eadf20bc61880249a9a9a508132a8df753838f0cb7454fd98cc697b3613c622a80c419490fe18c18c82ac255de39c3d385e26dadbbbc2bcb17ff53639684430680d89b28b00b3aa7eeae963c2547599f8a41e9ab8600cfca6ead82f9b132549be0126cb0e08c6359f203e98928abe572d3754084c946ca7f800d12b100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d4304c20a3f8ec18ccfcb4c8b2fc621d4e94db3c5cacbe7b5be54d40ff09fb769b7bc9d9dd08ea0efac03d7d3af725559caebf3f8323af2cf3d489dedd8040df3d0dd55de28432585c318f6780aa7f375407c97e355db46bcb18e1350ff41cf83eb89b517a7ab307fb0b00e1e7a29104347d9dfdf1dd9a6349c3c209eabf3b975a2f5ec18200b445936df18c6f5972b259385bf936f4877501e88ecde646a76d655f9a6c1da9313be3c8e58ce4414e7670d65666806483e83c87524ff4e09489311aace3335744abb04f1a893ae6171913239eed5bed0b661d50e15ebaf4bef3e6a4b505fd3c434f63e9cb4392803046b5efa46bcb38f1bdeeb02b42a96d1ecca42a0acf0f185679476eae6584639dfd8af4181567c194f862315e5735e2d949acb0e58a1907509c913e71b11a087f89c99c48ef09b196d0793ef772418d691586aa007a318f1a783c13585c7f2654ebf7280f6984bb2eeb5030cebb72abbcbf81d4f6bea22198dd67ac261e842f161de56d6e810dd411d55d98b2c257d1d6c1a252159d685f461f61ba72a6ba9b62b6e16c60866cde7c595c77c34a0b7ee113e8b123c99d25c8c0de8b8bdb1a7c20c4ab2daef2d2e3d0a19c3115f48e9e8700000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aaf0fb55d6c2c173bd985a087b04edb21c01e0b3280baebe3fbb83ea6985d70afea9f2f710cd0ae193e2bd26e672a69a86a7a5ed61acbbd0e8d3604ebe5b984b2b488a3698118ca18365215be7beb46bb061ec859b3e95b142bd0a991794ab828eebd01a113c5fd81770e70b39a5905dbb369e42ee2ae1b7e6c25a50f068c469df490a8eb14b2c3d0c06c2aba79213c178e7119267deb12dfb4553c388c86db5d0a312b738951a58f596f7cffddfc854a7f87f531f2bb21d3b26aff2bc6c35e37cfb62eb8664f9c2a97649f3e8c940dc9b657a2c8c43909bf3cfc00ce882927c61fd837c74310c2317574f4b126c7fc440dabacc00de216c1756c776dfce6165200ed6ce42332b6b819d4a9fe4c588916087221d3fbc61d41131ba50397e4ff764c1b97c0557fb1c31ff7917bdb63d4bfd3c97921883cef4134eda476b661a9803065ce0be90fd5840ace5b829b169d4a6279e86ae3e7513cf38ac44d3a7981f90bdd76d1ff23aa9b1b74484196c89eb98098e75a435ea93b60bc81faea5a837bc9aa70dea267346392bb7b066071f768bbaccb52677e7407a929b7fec4510e6a178b1c9d7eedab16e68d85fee23795fa085df905d0ca5ebb8f007a27a015a3a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002543251b72a7f8c5e657de0305b04e4bc269a8bb7a23e05adb9e31114d16bfcde9bd5e033e4a7aa2040a82426aa3d18a71f871071ee2de9f29253da0339a2597ebb83580da9e66ca1ef8f968571dce70430c2aeee30dafe56e57ae08bf2e6764acf69872b588132429ad1393e334f5b3a657c023613b5f9ae4d2d7de0698a09109d3799715b2df327c9d636b361f53a466bdc242adb364a124431c5aa3f71163f2b72ebc96181c1e5f0375e1f55bb18c0ff3efeb5356dc04ad7aa12c9ec440f1e8a7288900b78cf181aa9b50ce6e95c7533b7a831cf41485315acf51ea4bbe5b9b852f7e9f25d27ce530965e35e2cd0da8afe061fb6a691bd42cab1002dc8d9f5c54768e02b6161910da19aad98d33e8cc5d0c379dbce377be9a734b55c69aeef1aa9bd22badac43ded13a47023e710aec6e3eb6902f9b6bb3958c85d62a3b108f22a69ed82032c53f2764385b95247babe954aee09d887625e1e7749a5c9476be9b86de31f00d43462d46b9a718d717ef13d09270df394a696985e9426c17ec43853d76a05f3af834dbd9fe53197a232ff0eeff2bc0e3fb4e1b0ad8a45d81a275c2351cf0a8af1e72cf336ba909b38cb5d0b576d3ca46e88bc97f1cf384749600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f33afdcd16ab7ed5e6a60d2dfd2a87d734bc4297239bac1f960426d93db3f2711ea75968a123194f22c84b814ca40044095f3701d6fc9ea927de277a768b01543426956ea2c06dfaf4981789626a8c3728dd098be5b642a6048b32584371760bc44d0641306b75483a8c97bf54611accb61acba822de2ee09255dc8e1e231488771a04997f2476c5d0a49b7a5370707ece220d4d5dddba8b62a9efbf94257d741d2ce8dd4eb3d761247f6abc3786296ec982d8631141d15942b36fa27989a1a01034476e50694ae028910feabf6dd4b06c105ad929f89003132d449898f78ba3b958ae5ef9450f4b32632ac929a71ca7de1b4ce2da47c8d16b997b07d66af43cf6ab00d5451a4034834914c6f840ef9ce31ea6435295cc668190342893e76b77263c3c18d84742a2f0a057f7bf6d771101460c3c4baca051bf28187324457198ccd3e0e80640fffa9c6b1f2f58a93d31ba8a5d6566a4626c0b9ee7d5d1b4f19dc4746b7386832bada55b830db6ea2a575d9657c9e7f554209df3c1bf3ef35c729553696d4f9ca61db6ac17d057e94323492b04521e1bb7f19377823aca195d2348f38e689998b9cb5e4f7195550ab441d54974b18c435d3588ec9060597232500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008bbcca1bc2417422fb809705d6a48540541dd4c2ada4d9b7a731a42397bcf662ced0d7917a8570588dc9ee4d73493770ab0084be02b4424c168e5dd1f3b5f8793400ea49bddcfa33a933976a485c100a32ec1d3678144753b726030fb9a6f6b7b5cd79fc7ea3c65427427833f65eda4592247d6b3467ac08bef3ff5a556c6db788687e9b75b676ce60134983e5aff67b486bac8d84f5f2d3728e0fac612d6388dc4242ad813dc10db50546ebc34331964798ad2c95c2e6b74359c54439ea6b46d2a3e50966a799eb91f7e01fe7caa54ec226cb616aabf9598e5646cd77528e7edb2ce45f08b03d54ac303f69f6ebdd9171584b2e859807d47e3701dced513f8d060fd39611bae7767ad817426a58143d3dfc9f5b6155bcc54b014fd1d5ed2b104dfe3e4752e6e149d8df1c3a2790366a1b4b1c910c79528a4f79a8a0204773801ccdd3bc20c1ce956c3b7571bb7890828454b1ada51259d0668f5fb80c54c31d16ab97f579467610c344e7133886c09b10bad64a9efd37754f07c367245f67366ff71459f6960166fc3d3cf20469493d249299f8054fe15f8db07c17683a1dc3946192f7e1775937e703550ca6caa62ac15833f79ea8d12915648eafd1b40c48000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014095b428b48225b739c4a96bfe38a6fc2f58e9c42b18533218ea727ebc0e77fffb040c814aa535f9f8db8da4965901ffa6e2f0ecd72d1281df7f31ba59603df1b50dfa1a61a4af1e48dcf9cdecbf7d903c7522f87d9fac644fcd5ba5d6f1e5ef694aaa262c6e2d8eecadd3b19471e9db93aa5e801401caecdfc8653b08868ee864052c183eceb8a755a72be3dc4a30a75a2850b0fcf475adc15f2b5c890f174e00407b342f0e4f0fb2954379ac129eb5d2972e0cdbaddb55a4630c82937a4a072edf76f93c9e8598bbb1e63d58cec75351e8f066b410cdf240c95dd8a5f1869f7f95b71072a32f1faef6580339033c8143596e09e17599750642b808e0be07b95e02470c247bf2de79d222ceba22ffb2f3222b1364067edc97a59ec98429d519e25f6370c69c7c2ed7a1e8c2bbcb3da37b602359c0736e5c18f9894411984d144403455651f1690fed9cd429e8dde07b946a42c9c639b44a42aa2e2f1ba3f267dc7a8b97ba571fe9714f0b9f02f7d40f639dfb1724f1adeeb37a075d985e96478f739cec1abd15a7db574db05ae1ea13dd2a33545d7e5a338f9d67bf13ec302eb40b5e688b67bd2616bb40885552133d0a1ecd1b230688072c4f4654f5a8cec0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000963568dc03e8a61db8bf66ec12a1a6415971964f10985d47b0d31e33d4fb83faef861bb9624688a1b67737e0e7c52b56ddd71825f83374c0c80d16bd4d2a258c97858b82184548552a19acb53dc7516c09a686aa8ccb0455d67137b00974c8d87bf55aae2dc31b9b9a58a5aa0ed5bfbe8b2ea1a3ec290c821d88d8b9c5c7fb08149627ad3577f5119c460f91447b842dd060228380fcfa80aa4b218146a72e6fd6a90707860d5bdf18bbd7771d7a32938f2a25f86567846b92892f9de2a935a1f5357518b6285afafdf9c3369143d1a494415a0bd410bb821e260cffa8facc5175abea74766fed3a419b4eae2fc85d9de29288575f02b264333a7104f05b7955d6bcf6cc1046711e0465b70ac53cace0bfa0ab51d1875a0ca39d583d65e1c21eecdac1da6b12f58dd91b6556a7637b53fefc87f2d7a5baba1b67720059e3755b5f0c5868ffeb74d3b398ca379ff055fdd0947990b16c8650a2a4a1d4a1f3b6516180fce2dee84669635c2d7f477018118e9e82911b3e001d6356165b9ebbf47287963f1ea920e0be0f5eeeb3e3dd77ae3ab0fcd647de92a05cfda66b40e6dff1cb8a1cc8377557d5c74c583dac47514c4cff68b0eddd47bd843524c9a8ef8231000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013fde169ad3c0cf49e8f632e72244ca888a67f64280ca9b707d5b2a8d4133a76ec9d1fab26dc60ad7d3d47dc801bd0130a937c802d0f33cb627fab7f9b043e6862593ea4d9a988dcf03431eaf70bab6da9400c9f986e74a844e5443507f6bb5c2610c1d5886753e4766f4b757e20a735e27ffc89edfca451bb4430efcd59446461a1327d9f379970b3a20217a05911c548819637ed7e6eda1754f0c5bd9e9250835a1f9f4c8448138ba05691e0385843977959a82fee658502d336d5e4113caf7db98065c5aa2b07821c6f3bb9da416788715320fc2e75ee522d677c00bc5e4118ab8f8e5d4a3691b03f4d5942643038ccb3d72f73185ad1251cbf0065b5a93642f8b1c6d3e41e1700764b7e929ae7103c797612db4e5295717e0596a81371e8e97d6b133fcb0e8174c972b903d9f691bc4077376130108e6879103bba4696d743b8691f9a4a9d71e28a359a19985cc7852cf826ed28280f07a9eb84b86a9092946953292c334f744712f9d2862a47ffdae5b1d0400b6df35e006a2f3a50bb7a731d234d7331adb775805238ef920a3750ead286186a28b7225e07f195897cfd8ac527ee77e710856a4493b8e5c58597ad40aad767782893c13ab77e4f08e1bc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e8ba2449cb6dc1a0009624b47d6a97ebe5b340d29aaac8a1aa301bf9fc5ac13de5ee8886a2c8c83b1ed0f59c51d0ffe678a2a87c104aa725d62366640b834d2f519c79d78b566162c3c2d86fc9e281cafce1b1348fd98c4e30521b3aca6765f7f77028accf59f111f7ab3d44c5e1e4a57a1d302d1bd02a917ff3a9815c1ca1aacbe40453d48ac5edbf1fecea9dc6eb44853de7e903221672f49a8fadb75db4609d2bb358e44e912341b4a84cc775def897d6f711561a7eadc6fa79999171548c9fb50289a5affff9187939211edaa929ffde2a139a7b651e0f8d23c40f69a283f496899ca143649d9978936a129d67bb82a2d3886be477dfbb77970478849347cfadebcf78ef4559ce8bbed49c2181f7e611414e595d45e4f1df21b501a68674c559532ba351b980a51e2c66c5fa7a835079bea5bc0bef3d050b9f2cf59c42f430d59aacdd69697718c88111955be5977db8034cd3413de23e6bda0b6c0093adb113a00af62f118019cc33eccc4801b4755dd73ebce0e2940f29420f9d04578c4329d73870665569857a87bb01910acae9429348997d16b0b7443f382d51e15c1350fd9a347aa3c892b74feda53a203374a3570886a6f1b6837979428feac3600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b3d427716815ed09a093870a19bd930f6b39fca5f0360244049f16b2233d80c295805a8504546542f8811dea44d9ba1c1a09768935a8780714e4991c079d0b63a5362484f4fc6eb4359763aec1b02d5b36aafcd8f736d28e93f89d84ad8e47d8edfd21204e1e907255252c1799d1bba86edb8a0fc2ca89ffde6d974ce1437580da2788e5f187a610eb9dad51e2450e227919ad82a49777cd9a63b234780ea6eb593d86cd0c0881b5ce40ebb5d3eec353c9e089a5de814b6bef71edf09188d4fc2f43a5530f98e37a6fd2224c742a8c7e2580a8af7338e7ae03dd836884399182759895b5e8597f4341e0c2c6dfb65c17297d2cd4d5212cb0f4cd1349783185afd3e288406376c56cd3de803382fcc8cbd18d9fd11b9fd4b93b8c90d6f29f3f1d3dd29fc0e88061ee8a17228f68b250d18d0924744e89b8114a15cfa4a33bcc88e5d00ecaea9e01976b7d4823b34bb3a0982de0fd88d26a6f03b1624f1c7fd5121dd60b65a7eeb02729b52960100ba796f8852636ba1ea8ec3249b68197d60e79f0ba9b149fc499548130d32ef905d6ba7bc71757adeb6af36696c6ce1f6d46399025c652d125be3e35734e8f9c9abe5ae675f799ebd3262330d4e4601eaa09000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009dc8c9497cee67b890931848d1f2c62d5ea597b65ddb46eb91ef7735da3470a23f9b257b029c08e15af7637a4ac516058b5431bd25d97b781475dc7aa82bee82de3c3ca27a0b416393af78e847813fe021d41343baa491d297e9708170a528be7b68f731120fb305e9e2488d5c6f7f4c146b3bf5b41ddc972a14903cb2ebd23a6838bc36dde4e421db8a957af5395ec729bfb53f9663a6ae5279593ce3cd79f3ef55f19e33984176d8e692c3dbf46305862004171bc186d78cb4d97d6730fca7593e83b426c69ccc589ee1d442e78a15d6d5ee359660919bac4afdea6da22c81234d0476f2dbaf3ab58cd47d8b47d6d5c12e206608a2fb5f569d55a038eb5c14211cc1e7dfecee0ff15acfb59809a0e80962904f9b8509b110338b3da7834933b794dd312abea9c4f74df4a28f07ff678d39c4194ad51d9597e64b52b39adb816610907c3627d12802192acbcea2cd24d0f16e361409f1b8b01a953cf17c03c26051ca46a1ec9897a215b4d2dc0be3658f727e5e7733d8e311e566bf7e41d24177a4a86d7fdb3aa38335d72a8dbf9599cb5f9434d316e52603d46ad7ead6955b409e96530af6006deedeeb5081fa9efd40618ebfe9fda3160fc6e38414202d8400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c736269ee4cb8dd354096db1a12ce87ee32a66129fe9ddc510bf1f9a2461125fba0dde0bb4e667c81d82f512e68ce7515ee5f901f3e4f4d6516ba44e889ca674ac1bdb97359a997ef34f739d23a4fbeeb6e66704efa1d57d010aaed93433dd12cfac0e0f9f418049644e76ab1e9134c302dfd49d3d12ae5af63aeccbcaddf15b37cad0200c477f963f52583743c8ea197498715dc625d0d48c860a545d3d3edbc3c556f8e23887cca0073808bf60b9ca6b923c0f43c83ec8406cc53b96860535e8b8985aba01d68ebb4436bea23bbaecb26bf46f0c348e144ebccfab89d8b72312fff2dc06426c86c9f4188a5756880c62a70a6525a0ef4d5d636e425fbf75dc02b7973d461df862b6522f8bc5e2c3190bb26cfa9129c8564bb3c1717b114d1fc20ee2d2f2bb57915c04a7520d4f35b69bb40ae1bace953a0dae0b967254b811ee67a161ea2f18b05c8d80b36c72558f51e0520defdb28008e34b91907185f866b16ff77128c7fc32feff9b841a4b6a77c87048474198ffbd6741fdb0d45effb3f89f6991092c35bc06c9952f88707b2bbd3c5a2c2279b76925642a9f396b470b2fb65503724bc6e8b93a92cd5240d55b8014fa5cde4a8d79acc402d44d233e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e07edf2bae0ba154385a83bfc01c9363d63f67f43b4f0768a6b77f9906d378e13fe4185de062f66dc4976c6eab9b88a1f4bae0374bcf4ead613c8554ee60ae2c92ba203f3ffbe9067839dcc8eca626efce31bbf281f70589138ca52fab5a25ac8e0437af9af896b8aa8812f8db869487984d72a90097ffbc2e184f750e1abe42a5631c2275100a895478c6c655b46c2fd3158fd71d5e31994d046eb55f464e8ab5ca690c5be29288abf5c3072e99468c48d1bf040dff0ec034ab14e27eb3992e8008affee3396c5cb20359f7c8f67833d2d1e5fc3558aeabb517c14b60dc8e7d4eec6b62c59d4e7b16289f84e2207fb603c43794bc3e848201f3808b028f928dc8e50083ee83e05321e030ba8de62d715cffa952280b9bf2a845c3d2f031d27c7b69cb8e071bf07df45d9e584ab0c5c6f20e0c49db0b5d0db7b8bbc210e31f019ed3a9d7fc23fd415d17267514ed88778b3a65b9f818804c0e566d4f2d22b3a7b0c85a04386c2fbd4ad9970074af32a79d23ea80f4271237d049d7e99ba1fc2c78726733d1e96d99e4f84768b3453407ef86ecca847e55689814de73620cc8597d35675cd86ad141baf936f0ed2d36486cca5caf61410b30e8192c0955abd6e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008bdcc7405675e889821069c834c5114a796f8b1262ba9750bbcc9ebe94c40332b5db2d950e01e1b8727fef4014a873385968100ab85af139f71d8d4a15c594dabcdfd2929f2c9973a07404f093369d7d73b235f0c1294379eceb0a0837ffbf4dd7e78573ee65ab0c99e8bad677cb85a256179e7406f63b9ec3aced4b73e00734bb7ba719c626a8ebdaeaba465bc00391ea6be545bc2dadf205099c125f8874bdb7e21ff66075ac99afe275a732be55851957103de11bc624452ce5eba8a9b6a53446f01bc0758fe104afd2a4c9904e7a730d19f5ceee670fe0511b430dd21d4502f6dea1643b9dd5ea47eaf62de2c509e2ba088be3585340644756863f9291a25e0105c8cf5ee492e76b2416014d6e6282de6ce11ea8e9bea8723a0f69b68bee5d7f7aaca95ce01318d9908039ad26abb65315d28c77c9b9b78892665b632bbd230bc8b0c3e769cfd5482c6542befcfc1433527cf52d3aa6b48c362777c0a08c5fcc6806e414214753bdbf7564f292819f31e6e26b95f65a126da91dc60b2f19533bc2723944e597b3623e93da43f764f43800f0043e6ffcaab0c21dfcb6c2508bb7f04263cfd453a99f9ec9eb405d6ce5ab2364a41500e8b0f4d0045973e1bf000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022b14c845b530a8d9f9488e328d16501f91a20aa36182f705b0d47e7c0b150b3656860611e4fe66e40b3a74d2456534135426522c0d41dcbf52a318ae60d8556493888681ed467b0607d5e1aa2c573a6010071803d68039ae5db7cf6f045c1072aa061d4aa579cd157474e7479278d0b495f7e3052daaa782092ed106632bcdea82ee1a425c1166e7492da2c4b8bf4f34ba239d5d02cd1f7f64851287877551f36ad0600f12cb88231a35eccde3d95313b879b40e7b6f3bd3585f26b3c4b7dbd762aa74afb4c191497815557b47cc7888d2f0b5ba4630e45d12b740324dedc5cf859d95b1c2b013c39328d074c3a8d68202174d610bf790a6c50599d4554eba9f2205cca7f2637a723d9cbc0bb3685bfe2af2feae770ec2e417935f25b5d578170b8ec89a7f7db69fcef5133c560b11e89acab7fd84b114cf419f1c037dde7ccbd330b86978dd193035870cb7960ea90b3510712da70d6b7e170236740431f63808453d20b5e7f3b65e7ccd30c3d15b9f9d4db8d43239fe85eb16254d61513223107dee0d653f508d6ffa3d04e3d18d63843b68ba17ba055170c9b76e46d862fdc51e4f140b3f55a600186c8d1fe60be7f69acb0545a1fa202b984672afd7edc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001af94dc8cb3cac1fd850722e520fd2832557130347454e9ab0ccd5d88f669cee6c8f3fd9174e806754d307bbcf05f073143daaaa6778ba9473368cb0f398a59d8c96a2ad377fce6db0891a9af86aa9fad02f7ee1f7867222f6160ac9058c431c203d0e242053b00e97a5d4e3026c0b55fd73acd46742c6f4497d6241268530706b0e96faa643173adb04cc43c7037df13d2a058b29b33bbc70111f148e5e176130e4204d5e018b7adc4e90b8023a89872019cf97a1f1a414b2da51cc4e1dc690563f5eb6811ef7e108be621c501f2e3c3150930e862d098232c8712ac9624083a16b0cf5009546a8b2486512915e36129457b0368b33765480eb91df0e6ad945860736dd0e598804140227c1a9bc8a7fd6f68d5cd8703c214d00d4c103cedefb9dc1ddbc4dcb885b38bcf13fc3cbc9ee95e951e60f32db1c1d1c25583ebc13dedcd333814fd4977f61df8f70072b956da9e53cacd3182765aba1c51e37e5a59eb9b74386437a985fd86f6eaf0e7d98e79385a1b7b5f172b2148ed22627d7f093ceb0b36432e1dfe4933fb064cb713983cc5ff227dc4346ca3278f534dd0d0a7ce324a235212aa192a7c41adb5897a06d20b228f7d37d9c896612cc297e5f14960000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6b84858ba564adc0a49a862fc9b86591090ab6d75743394a1d5b5e6d3744ff1ff78aa7150a801e7edb034e039b3cffb16d94a1c160fed68584de60799591bda6eb2358a5ad31615707496166b844bda6727d405d007116530d7fc12dda813a1996aa1560b3fbab5eb787027deb0a94ae7bf1379146944f047344d52d60310ce568d2156ad22634b89745242b931f72982dcfc6f42389aeed2174854cb08801759c1c52409ab3f82734e5315d9d9f8856d1c4b0f44c2d7ee93b952aade9213a05240db79fa91809071399c14852faf784ade3a0a72c007c12b0afd806bee82ac7c5665e74347a0cbbba5338d779e2d3d078398f23ae35caeec7bb41ad6708f5328a30fb253f04e4dae6aac73f0b619b802e3a7b028385ccd0435d09c717cc1d57b236cbe059d1b132a0763285cb54d9241ac0720a67bc3aa41626319dbea330ec6c7186c9231f07eb0562523c5873a9d68bfd9a8fc0e9ef8e15304b479c76879e6aa37ff622ad673cfdc31265a24ac21a6de7a08cd4b9aecd19b75f961ae8c12df0de6e7694e899405d0733f456c6aa67372e13194d00170d13b6d96183397d63027990aea58737d2b672296ad50462c10be007d765a3a6434c8c22c3a8fb2c400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a768c8cb9a8fb9398ceb71743fdebde49af3dfa2ae8e0576d57b80a179a0b2f462edddbc09a917b44c162e8cb5ee92814796a0d2ddc13d6615107019c7affbabfb4eb772191a91387d8cf1e259689862ad744f654c9473300d60bd7dff4a0a18ee3e5b3a352810a8ab1f687ac3929788e8151a694359b97c2069e21d1b35d0e885a34517b3148ac5a6b9d2da7d5637e909a790d75f82f954e19bfeeb15edba423748c9a19e0c880c4de5223caa3b50b2724fb98b32d760517e6573be63b50f364b0d29be9f70b7890712f0e7f868cc59826c1c9a3ccd3d07dbe17a55835424a11843499831097cb022a881b9d43699d1b064588573f7b9d8de7375b1bc6f0c7a7e61e2d925f81837d1ae4618a8c46c058e75da9bf0a6f3ac85d5c5c37418eb208d4bd7083c31ab9260d135a66e0009010adf4a956262983cc37838bc0bc8dbc394b7fcd9218682b5d643bd277482584499b89233c9c5e5bc61e4254ac1a0bd0851e861dea9e7af5dcb0c6f7de510d84a31365fd340b12c322e846fe7e3ce8f9d0823e578fdb3d04a88e760d55728b68dc71fc28a8a313de37eeb0e6e9327fc79a35a67f06d92881f327b9110cdec6036eb76ad1b7ebc34d451b1ee7f15488110000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afd874473dff2a188c58b1236c748b7f30e135a503416e92a2e54462871937b67e59f0793631bf5d8c1fa9b8db13ef3cd08a6288b5230c2a0f6c2f9475face7f5500e6b5fc80c3fa3eaf42d3104891a634fbad37ea95ec01476723f2c3ba8e23a758a62832ad730454e84456b522aee21157de84f719932048da96c7781b547300a6daecb34543726f987ad5f18ef976b03aa7120bc59fd6c400bc752e203aa1a9cf488da969e20362df27bcd7b7ec6baeb6588059ac4241e671030cbffb70b5d4d96c4bd16fbb34cb49002bbe2584f0ad0789d5aaa517812f3d8e682654275fb3e25584e8f241b9241535c86c09770da774619a948163fa38186fbbb773e61003c3c919076ea10a8ac11f4abbcd393510609bf05367a1e8eaf30488550d570d7345c916817c39a99925791541afab6c7460dd4426e5996eac1451337adc1348c17cfeade95272fabae035b70c1e3011dc609c5ea90ca7555a7b6342b680d32d1087fcfed0b48a8cbcc9d31c2c254c1c31b8314693c4f0f2f1b3c4bb7ace25189e9f7eaa214ffff68fadc0b01e6efb295024aba7676c2038b8492835bf74bbdadb53070f1756f15592c2d8ed41aaa23429e8ec63900faf0732dbbaa87e1caa1a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a36b95ec144fc66cfd239b3ac81815736fff9b848fad4b406a369ab5f797a01034c9760c56c400b492477aabeaa3fa5ba233745ebbb26ef2ac28f1d0eedd7971230f51de4fd49b137b7626b029f2e4b18ad9fb5338ef8e98c57f6c33866299b6fe4b5a98f3a6d9fa42b62d8f42f35cbf3b945ce72c445c0f9560ca07403d5ee9fd49efc7073c13f3a34075503d16be7e73d91272b8bafa71bc0cfcf6edb0c4c0afae9453af438b10d71154a90600a45228c374cdf2eb6f63bc4a75d1ffad97f10b023ccd4e9cb9979e100c1ada2bcfb749941c5b66b9ac957b000de8de5e563e72c6b7ead4845fbadf7e104a8f80f6a19002fe813740f294451846234ddeff9c5eccd082fcf5ad07d1ef7060265bc170388aad035193258fcf125270aadc5675ed712ce06a9e3c9209ed2a0f2a6680bd993327954fff1c44bb76788c65ca68352be595d347bf684134f7eb7c77f93bfb3910f4085338752e02f8eaf08da67f763203edbf4b521d79b16afbb6eaca40a2d47c401cca01c8a6921a743c6110e24822d7f3ba56c93263cdb7bd3830fd0f162ef44c47c652b47b5a24e171fc5194fef7770f08d3235cc4ab5da9bcb91f78bca68385a028c47e0d59b31d5a97edb0df00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48401cfb230a94c261ae25e8e01d7c3567624b937180af837035bf5714f6a7832d97264454b919d00d9a29245c23613d53e6eca3d0f4210209831ae905e3626af9be1370809f3ea0ee5e8cafd05f322787611b12e2697ee35715eb9d3571326d13522feea49f1fe78b04f3b77862ef0000a50010713b67717b0647641257d449caf505260331c2504940c925a27f40e9163eb23719c7bf5c21299db6e8272b5abfee0bdf09b7a7afd7c0ef0d4b8b4a585a23a205091d9dc80dca9a85a47c2e3033fc2967f83fee7a67555172f4f4b2301caf2bb39fd0bf1d639a6c9dff14506c61352cdd2cb9ab2229969912712dfc33500b73ef0be1031842126638ae8417b42b3d238567ca86cead090dad4d3b28b6858cf74f012fe6fd5364711f20089df27f280e2fcac178f799409d0e666e8d1933bf7457b1d6803fd167afcc02a7ddc4fcb026e19bca3377a1f3d92b3e2e85138e72ff36e6163ebe2d5a02a2e5a16ef9ba460430cec52a72560e14cbf9631b9aa45c08fca8129770a43c8360bf26184ce9f603a85857141f87e5be84a4709d722b906bad0626eb9e9623b931368ad0027c7e2dd492f6490813f68334d6f1a8ee929f36fe485b2a9c6636cf287fc5a11aa7b81a664dc06792794f01ceedb55b45d23332122e59269497bde3ef6ccb159b2f64143d6c8b35cba52590eff678a0989a0a340e6a16774938ad8ff890b6b96f2fce09468e06fb88947b110d7ba083de6287ac99c651071feac951a41891ee7acbd71ee6e740d33ee746b38b8af3784eb817e715a0e7971d1480ed4def33e25a8e142c6dc6ff75d3eb777edeccca0bce762a8741cd1fedb560da022331269c952aea2d4c64cdd482cec763521a3b22c6503f54f0781265338ed20d3da27fbd2d824d15f491c080e2ebbb5662150e83c275f99719c650c1442821f31ff7168a6803c8269ffb73605a669c369408719d9432847ae80ba1987c219caae37e03ab90de2d1f6a4f9610285203c68a6f76eb78fb0942e84724b76d92476dfaf5ae28a29a492d9b7b26bdd2d960fd86841ecbfeee0b950a3b75f22e79a7332a86a5501455ca1c89c81550a6903b9dabf89eeb2726565195774cae979844997f0357d78ff42f0b2af0a39e6ba16693cf2c5d327d0de41e520519836aa908fdbb517a95718ba80d3537fefaffa3f35b664554fb1ee43836c2176c247c0b654478b49c6047ba150ce1461a1572efeed945e74c9767068991e907618e6751dd8c8a482a4add08310adaf427bb07e7e8643ebc2ae17d1223e85f87d773791248175d77f5e5c0c3bb2fc3bc35b6dc657dfbd176d8db59e28332779e1adb796c075a22b18354002b9d2a8eb6f5a0c49aca9461e586ce3af2916c61a756db655c79e99986c83d0788320c260896649cdc35edea9ede1e71cffe7dd43016763ef49357ef7c73f87a4111094e750fe88dc6b0b44b069da800b33d480c8e86a7d3f5c712aab421cc94ae140b91fd1f2020f887176e9c688da776f15da95c43a1fd072638cb7882f121394f3008d2147465cad1e36312f72989587f0e130b09abb6cbb20c896c522d9079410ffbe749e82d3f728bf6856c9ce42511963e3642ddbb7e5f2fc2f7691f5c3d8e1fde0ebcd02b5a333766ea34be23814ed3333c08044f4c40e41abf550f077f0a05b04daf513f55d240804bb8a44e1e2ed4009f3bedb2200eb39f56bcbfc533e2180b3de8a04930cefa36284443ca80b919648d986ff5fcac9325b21c36d51ad6065e2914e29c957cdcbf4b8e5fbc86cb3417b2d2c1b4e1a0a195eebef20717c502d6aa5b6c12244e908dbe4b613186ea04c81df8e7661ce1ba9b5b50693794eb191d1c9322d9d2ae5e893bb64302bb9e8babb405ae1091b21633118e58890cca03a37db53f006fd56d26bc30b096cbf6f4ddb0d00076cdb520967bf80ddb2c68289ba493554a4961923ff32113f55943b6a4d0b2d9c8802c33b33e253d5aa8a00857ada387f17f73cab15f7c9f0ffea5654aa44f560dcd7e133ec5ab63272b8f16d9a64a09dacbf757023fdc6625c71db1886e1b9e143bb9b121a804d4345e7c2f70d187d18ce58b0242cedad3341752d2ed4ffbca5b0b90f5655d9132ef096e0e49c78b3a79ca2598354cfcc26ceaced77dc939ac407c792f9feaf0ec1b49c90e5e7e711f3be14370a28ec072f37cc7fab9180627397edff0b8b27d453503f712432838ffd7a34d36956403cf82f53780297446d8a16eb51b20a2b9e3bb63f2195fde616372f4f9f24852e96590e46c176ad8ee3e5ce6e92703331ecc7d19a607e5cc116bd92de24ec03e1b43ce99084f4a482f7749f09d5b3eeaef4bc67d8b0cd66f15822e42aa78505228eced53be6135bc2cc88b0ca5eb86c3bd361d802210d56ca8dfeb6149cffa7a0c726adbd7cda30fd8b593b19ec7e9accdf7ba24da0d2912b574cb570b6a0a7a142895603074d8b6f936b27e682d18bbdc2ce8b4971c10755f3ee14e8179b162c641856728cfa9efb1c70963405b7c3846a930ed03085b0a004b92a211ccfa3a53a0b7c4cfb8273687e2df8c62e7ed863af788b9b900e56fe6e7d8b9146adb749991f4e92429ef8dfa6ee6e63fbacaa59e2037a688273445b154250960ec916bfb199f0311441900a2457cde497dd01e40589863a207ba952f8db740ea40001af59cc02e3075ddf46056f392329bb19c1d86a250d102ef03814a5e4c1d04aa5e1d2ecf2bb3f14d42fa36b5829bf42f61bf9afc515320c35f4129e5559b1ac02b629483607f8099b02838957a5ea231fa6e5ba6e243113c205c8cf6c8f51e97f76b055251014dfa6152132bf468c5f8fee68a924674237ad8c7ad5869d7a9fb95f485ae37af63641ad1caa7a8913ac605fd24fdf70a400ed0ad6bd5f84ab6bacbf145bb7d986d78ad294594ef6caa40a5d4ea100da20029721c63539a042c4df232e74fcbb6922def474ebd3e882b8b24d185dd4e195004c240ed3c9d49c57aee99bac9d40ecfa5533e94538542d3100c19725352743f1d8fc9246e0300ced739d70be89878da09df741f41b503f14a44b762b9689e1e0304f9a3042fdbc7b3c7852183a168d7359e87d288e00009337e3e26492168540d86614cbab76bf66ebf6e351497e2f0aa94d290948b99ecffa5a5d645429cce28eae942dd643e554c20d2e262c7e1500f3e04d42e65b1187e33367a9b6e53f408e78e075e65eb0311410cd81d43369fafa6ceb196e346236cbfde3a0f1f10d323b6dc8142018b804a7905078195ad1b3d580b9fe42bb83bd01d19158a6a0a881f00b47ecbb8fc009aa3a982d80fd17ce3bd717548bdcb183ff76216f519653b204441bb0b498adf3efada705cc2f25c0e6898dd75bb13d02dc5cfc4fe7e5fcd186c96305ff3590462f4ca2b1791c35116fc46f067dc66978b4e4e9f0c0fc4d82ab3af02721e0e71d689ed48e598a8b95778282a4129dae28c52429376ac52f922c19f9c67fc2b7dc1dfc47fe2139d0077ba99eceae98a40947749db4b007d1b079ac5cc86a8f763589526e8a97aa9701aadb7bf58e5c9d22e7f6bfeacf7e8f12791edefdb3a3bc6be68e2bd4a6099b58f7118d3961b09c317f8d6e27842d178014121bb9b081ff48f21edeaba545eabc68057912b23b85ed5a661c5016b66492d31b7edf66ea71ece2caa41dce4472fe425205435c28fe59bda152f0277ed5e208a61c8714c5cea000de5db2e8ffe57a0cbb745b410cecc406dc58a5571624f1f61d855905bf178d6f49d04a5852e89f67332274a37c288955cabb47a2c69a822a6af1e6035008d8333d67d5f86919589c3254b179a9f98aad89cb17b6d9f1700152cabad13c161a0ca5b8d463f6f29f12ec3efdb10832c4818d5982bf875c50ce2d85265de6f6d27f37871b54f19c2f57e72508b61b9c424a9d64bf3f6b44426eb4c3c34bb296efd7a5c11d3e76f58b8cbd6fe85fa12d3d36e2382373102b104f8e2b2507b2d2a6a64009ea7d81802e86c14ef0b39030b24ca2f741ed54a872b8759b9f5c70a66a93bb065b8b4020f0beb745577ed36d91afa9178f2348b791d9efe36ac2029cbd0b8504dfbecf9b27efd691ea2994bfb0dbfb7b7c9c9d37f2660a84411e671bba6824d3c1c9f95627cafec251e8ec61206bcba67f200f2e0196e9b2a6f4df4a35a0859c63e3bc7589ddfc54ebbdb67906550c89f64a4c4402d841e7f302cca7040ee4f2486770d8a059866c3259673276e5f587e21e860c61b2af0c7f6a0bc8aad0a71b3e083e17191a15cbefecbabedf03ecce344c045bd09c7c54cead70db2783462b415f51ae576eb377548fed99efd0341605ff1e6a22deb6b0e58bf8adc67b5264179a600a5ecb6878cd6ba64acebee0b07d7e00ff8186f9451f0d5c4057728e8c1865a223078bfcea82106f988bd5a373be98a14320e8edd6cc5c6339b89897c13c148e0d527cb93a1c6a706e4efba07975ee342e3214546c61ad5e6b23aff84c6bf66d4c7e644155faef841d9775c817aa38743902c1266b850ff4a9d91c54aacfec9e8a5489709bb37f0331a33a8c9520a3b50c9030dafc1adc764fdbc27d92f77ebfd793801f9c522318c436d9b3135f564ff490cbe478d906d43c651e6bff1d2e3b55485bb0799a6f26adb6bd7af43772082281aeeb9a48dfbd4825204d71063989e94db3f5680a1491577681df52cac2277d71197b56b249231938b5b80af4ea2f1b7b6850581cb29d9b3cc35f9bcfa0e70311b580ae5fe5e2d30e71a82c334675b430ffe9ca8c2b38ba2aa7cd0c47adcf30c05a71e7673d57021328ea9ef33ded5d16a25fdd77df2bb007a5982f2da72f2f92e4553c673ba2179b256242155104db8cb3175cd9649333735b1da1d81e39837199296f486b10f17f189ac7ca28e3811176cb7539c83c305d6ee348756d0ab6929b55eddbeaa8160b9046d7021e2cece29a21fbd90d15e63df553231d9adb0e4028b6c3ed6582f1ffb7526e54ba7ae4069b89fe46f65bb215b92108b9de4d1090a85bfec1b45abab55f28af7519e10df457b567c33fea183948d3fa64b8fa28a2805e1cc25dca824273825d8c408fe902ef1443bafd9d12b8f78a43ccf3fd6642e99ac8ec42ebccb22684374ed828725f8be54349daddb31b7f57f872753d51c0c5e073b776e2471e2fbdfb6b767e6d877deda04ba5c57680953d545652a50f008664ab2773615e02332ea84575c949881db0513ce1c017851729aa6d50b9c2c152becffed2ca74dccc4345c8eeb9a479c02a6e85f120306ff8310c658cfd5fc0e069cfff2b22bdcb88c7aebd7aa08ef5a2d7a58ab26e9b9b807238543a8451c2115bfb28f29f5d963344d4c5d4bd8f1c529677147e62cc55174d73d58739ce11607528ed594ab629f07ec7ccdc9226f7acdc4be0779cb05431a3c386524ee1b0e4e862ea71aedfc997a7b64e8117fb8181a374696e16a7343eb8ba26e8f36fc20541e18fe4883a7329638e346d6fe6326a35f7f92005cf4ffe024603d337f5a2cfd415f53347536fa88ff28734f189a5e7c8a39add7a3aee8b57bebb2ab1e7709438a541e086a521c4eb97eac5c0213346ed4fcab3b67c656b951cf933033be0a19ebb72e0d4fd9d7a57e22753a767f487ba1c240903470cf6b6dc4e5ddad80157d7d4a172ca17e6b31b1e94137d4ca69bc818fafca12526fb384dc0870eeed0cbe25b6f6fb5ffeffae6c9c8dcbbb4bc12d17e35b235bc46135f6e54cf33c751e2592c8d6cbfd430f1755dc0a60b96383dfa41be684c11f0e6bd04b0677cdf0003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000015118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000150d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000150a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000150b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000001529a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000015141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000001525e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000001512978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000152daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000015189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000151159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000001505ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000001505c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000001514d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000001503db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000152ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000151213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000151ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000001514fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000152b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000015305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000015280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000015223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000001517a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000001508858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000152618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000150f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000150e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000015172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000150b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000001505bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000015137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000152e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000152297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000152608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000001518373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000150422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000015204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000150afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000151998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000001528d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000151da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000001521d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000150ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000150e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000015107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000152f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000001509726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000001524f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000001503c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000151fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000015205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000001525110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000015283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000001521cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000015094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000150c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000151f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000152421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000151fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000151bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000015304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000015000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000503ed508bc8acb8d9b50963b8b3aee73b333e167e74a7c549d79a08512b24aae59961c76f11584f939801bf3cabb34d0a2e6084cf226c8e17f3be06c84bc4fcd84aba61665829a4b677a6d572954a9e11289dd022310616d8533a2f7ae6a291992e5e9514f9dc83cf48ee3c8735d07306d246398bacf26e875170cf189e3d79599fe0d0cefa28d8d1aa81d8948f3cf0c1427e3dff2b64a0e84214c5f6b8039cb9ebbe8f625b61e3ee7a53fbe18e3dc2db7be0306744c046652dc74efb83423e71afa5ba3e472f5b971e25aad5443190d277f3b683bfa6101339721ce47c3d5151d456a7a4039e571013430224c8406d60f104f5ac9acf38279c35f21b0fcf0d597f23ea2d405a5cf4ab155b5b25b5239b7edf4dcf620dd1797420f77de5001f95d81f4bbd89bc6e401b277bb15a0837a52f7cf8d8e216d98bf0adc0fbd24bdcf5472f5d5189333949524e4b7e3037d3d66f0b5edec43bcff2ebbd334fa122a363063a6e1165ff89f5623d1dd42e6b42b0c203e0d4a3151b198f6219ea515f7d6fdd8361708a7b934fde98621afd5f043df672cd08424231dedf0b0e38cc64c5b3d205d9ba7e7dd0d8ef918ef0b2515087a139c65efae194f1fca0b71c221ac400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e33db357300a136cbb3e790bfb7cda4e0462b7acff6d20548137b76d89d70ba77d5c9345495ebd86fa56a364c0052da04103846588b4ab600a06fcc2955c6d0067b667e4738f62e41e6aca4ef1feab83ea54d6c303cabb86675da9c24a637f507cc9779744ee5463ec0f023bd3ea71580f6a1b69b14950951e3c7936ff7bfcd7e3d1f4daa9738133271da43d189c32698b011ac8f5da00ded33ba791884f0e05bda9aa170f8cdc5659271dab2bbbca16afd52be374ac78cbe45581b6450285129f584423bcb406d18a5ea51306f47ab2fc343ca3b18730fcc41c80965a0ed22e7a702b367d17d1a13bf53c617961e4d2f19086372568293c221acb7e2e9ae4d31b94d043303a26b11e4328afff6bb213d9a0a97ea2fa1cd4a2d0ec9b010a499a0ab8a7951b585c924f5294b60c73fd351f3b104405b39d60671467fd15cf4b9dfece92781cb74e00d1debdcf4a90b8ed14cf6156b824c84dc5392e1eac10b8f7a2d5b1be2ed7c12fa956c332b5b2bfd881274a3745ad9081cfce50938cb8993bd67b3a668e4f45aff5344cc90221439bc99f7cf8cb912b62f815626636614b814d62ba38a6ffc044f392577e72e2dfd8f91aee7e48f058246db502e8ce4cc090000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000266e47d9613df26fc9caf430998b72ef5c5bd779ec1f305f15c2609040382b91a2f077c82c5bf70dee22c5e5e883e88ce09a742837ab6c177ba5b8c08cc09c8e8181369fbcaa3775059a65be9eb9d279b05fbfeeaafefa81fa76d15276b9f3d4a82c0e51a25ea21fca011b0036e9cbabc66ca65311a420422280b46a9762d81450c8a6092ee03f5fd1b10b60fdcdc18ebc6a13187d9ffbb7b9b8bccba1f67c2d663fe192c44a040d89dd9a2919ed010b291d5768eb1b3e69394589c5e841d0fa85fa8e5e7747788ac91e55e705fb70e6d38be5345cd86854ffe7a3116a953e6670f4ab20afae2ec77f34da14305242b451f5dd011ba5645572973282e4a6f1830d8dcbbb37c161d0a83a79a79aab0f07921369a30cc87c9cd2e9ac56e5ae5e03fb682cf792427592e6cf66eec02733da62af0e92594351c84644ea9ed11dd70c7e0c04b8c4160812dfc28ad1b4c0e7b7f45341f1257515831361f19f324921c8d5d5b82ee7eed2a516daace18409683d289399d6f978e33d469b461b017840191f89df3175465f848a934f53fa43eb202a78d8ee3fe3e1fd16f4d34cf13d69b266a96276f08cb51a5561d5aa267764433321c7def90413147755cf2b00719ad60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0dbd2db2e09ac5e1acf5f5ccfc296fded568ac81db5be7ffe62e6f208f366638a0797b41ca6a50ce90597958e25d03e3f7e190c8595e0c302cdc23fafae7db98021860451588ed88bef71c2144fab3b330096d75f97f4a6c759820ed1ac2f01f79716a8096088e06a3cebad16fffd7b384fc75359ba198f1a7627bcb487ce4c49ec546a7748fe8a67f96534213ae4b385ac9a32839da806022a26500e2398c16bffaea7390cf8850a094a86910e6752b6a5e8a67ce99aa0e98beed75159e58ff0d09ebcdad94d8e21682bf5c85950a4dc34bf278d8c86924287010001960ae49f811ad84a338c2abd2bc065cbf28b016e04583ebce1bc43a92d31f9014294d9912b450847c5de0f3d1c047295e72b23b61dd57ae7cca944dd9cb47ee2f77edccf402aecb49e06a6bbe7b106b92123c4009ba9825e1303d64a7e0ad809788037779c75a1d660fe9f071c8b5701fbe26e48a6b89ce27a8ad61a7a0a3e99771b98db1008946f910eba5f46491abe4aa1f4707b9258309eb35a6db918c5a0f99cb71dd2e6f26dd80adca9f6f0b6fc55494804a34eceabc2966274c350089433e15427aec7fe00883efbff342d84bbbca2cc7fcb0df120c19a2116b12d8880bcc7330000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a808e813b8ed964e081dcd7e74235c2b5147f979b3961cb14043212dbccdd741c0e5401c4acf5fd4e7bbdf4237f9142fabdfa6f7ad69afd08c3747ccadcaf91090af5ce35c95b972a541bc521447de5fb54078461040f0099bfc90b8198b926484058f585f07c9d2548399bd35842cf61086c0b2ff9061cb91b7bb9616d16761e28d58045fa05b723112de6d9cff216060bb89d756321a1a934ba4069b3d864d2dd4b89fbf65201b9a0e3a55bcc1d80535b0413305d22fbd3d29745b746852859cf177878ce5ffa4aa28d2fdff176ea8910e685b5633c3a32211e693171fb9f57abd4781015ab91ed9c806df4c189c9b17a83f88b540e6ca4eb1a504a9eff6b73ff47dec586dae0e3bd15274a893938640f0353adb8e64ed4fdc7985fc7b381c8122003021146c229c0c680f1c2b645f56a73f36484e1d992f4cda24e30704ec7e086e0e8a16890d5a3bc10913558f89c8bf0e706ed009abb0e2be649dc3c2612999f87ee9233ce24b456854e9dac579a2131d556ff30206f825f604cb337e7f8dbcc81e0446f489d94284c715a5a4930fad47b07dfeb24e8adda8f31364b2c7f4866357b01fc61a3cbaffbbd33139a0581ec7e8f047e044bcaa5d5db4aeaa2b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c910a7597551ec59f8af63c0c133664a152edf0183dee93080b2ab6bac46d5d9ebfea58f6c71eef32e737c88a9923914c9e26e651c8acba788b96f628c34eb685eea53148191e50d8129078cc07109fa5577ee600fc10a6877b5b1c0fb4ad65190feac0a0b64d60ad2e185889a7d6a01488d9898c6cd14ced49fdd2a5293a5eb7bced62c791bc504359248dcf761eddd659c7a6fbff0aaf487c3c73b98c54491a924d969145de8b0ba76657f87841d090e53c4c0108309de72ea9f6f953dbbac40aabf6c9e2e0b60d6dfeb2dc68ac77bff736372ce6176f9fdca35870e420763191cbf5ce244d33985753ccb56b5f1c52548cb37842985d2ced6e50eefc3ddef45eabf0e7da0bcffc460cd36d303708221ec998c998a453c3f415182f93ee222a0f7a3c535de9141d5a5f02d0befc9e1f572fc1a5b053a9da3c02cd078e7edc3fee71227842d6d69af07ad23240c7d5582be82202a16927c5808daae3b0ee61df2011e22c7d3d9b3e51f0797e6d322adcdeb05a07ae3dac8315184a1b4b8b7700e2334a6620c607bc1be2b301ac56a7da1a279df9d1fee73d9f21742b50d63ca79903d40fe1a5ef622e92605834afe64b9ea1b313325ad0bc6b4f0dc8bdf43800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009adf2b7618555edc38ed959329e48a43f4d4cb0d31f699d0cdab2fefe3029d53306f88d7ac778dfe5954ef0346f06337f9ae4202a273db5cb7c7912cb74a2d1a9d62cba68b427cb9040db5e23325502839bf6cbfebebed9fea14cf830b0b9280b5e342fc14c1c1869edfdf840f5d100aee7e5c90a1ebfc3d25bfa1c22220a64d0511132d9bb4eee8ec3e3d946c840680e1bfd61ad08e3f869b61d054c8afd13a96ad272aa1f6e535cda72c347762cc87067071263348466d2a325fe47ae3b8048b774eb1c783152185d27767bd21e9de60467b5c98d65f13ba517262a7fc9d5978cc681eb91b9b71acdfbb618a974cb00fffd8eac298f47c01fcd87dba2217cc7ebcbcdf5559c9d190c7b26b084a2c4146c478a2460dc2162bd605ede74334ac500dea7bf43ed5ffac1409f92145fd2efa1e629ac26b9d6f96ebb1f3904bc502d17165743b851a8b0dc68d2e9ce10f5ea27742747a2cdaf7e384ad8f96c0683a8a13880db5d64bba31818a105fff6662bca56869ae0d8dd288b9ba1eb7c915e15c51935801cf321d1d90b191352be3cf58faa5d414b5093461f560a7d8f3074edefb8078ea9a136ef8c0bc654f3e29c252124693480191b7fd60178f3bb8da3f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010011266d72ee032520d1aeab6781352b4e9b0f663080b7b2057b0064905a3f374869129a97ce41c890845bd58f0f863bb1491289c28a39427e0183c655da3a0778c295c391ad63f650558bff7d4c5846d8f1a22b0b2d5924b990772951541cfe6ef90918d57514567adfea07dc9b76060895da138a170dcc51bb37f64cee6f6e82d6b5324c956090328870da8209403d12afb5278669310d8e9f8b5ab5f8ed9166425787ba716278e5149a9c50173bcf140ff6de15cad3078feea78f5a12306af6837140426cc525d9a1624089d7ca23efbef23d8a5548a405d91135a5483053eb7bfbc221cc0a455829812dd9eb3d371993339876cc72fda451a652f3a2dee957364873c809039c4eedfa376401babedc24cb564c9d77a53b353cbb6af55939f2afe9530f0d748b3c253bf791b9a1520f4f50524d50020608627c30a61cee62d6f6130535928c4857a9b188ca6d96b89386f6b2d6d741d1172f6a5622239ec688fa08d8b93209216180bc99929fd06cee090bd64da632b1110531eed6c8c975603920b04335148ede8b8c3711fb84e51ceaab4ae7e3ace71a843fa66ac12b32af10c58e70328cdfb3b8080d97180fb698cb780726ccca3f6ad4eca3b1fc0600000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000877f59889b762a8306bfa31a137cff6392c37ed727f8cbdebfd988a41ee095585bfe21ef5a57786ccc99f6993c89c5e0889da006951f3b9afd78cf1ff608d75495c9c835f2460993b5010c114ca379e49d8c4226505ee4b0b26cb60039568dfc8535e698ddd9b8365d77d1f2934770536b3ed6ecc3b9174b07fd500c959ea952b71ef89fb05dd57e7ec6b64b549d118bab06e2ffc87af642e198eeff2053192bdd704797311e605ae774b129571df4305d312d9d422c0e79419e4d8b01e419ecca320885a8926261ba3491aadf0dbe8d1589ad5f0a9fa56592683257d45f3e6ad96966a0b0f65674e50d33abe4ea35290791ecd4867e6d489c0eaa633a88eff5fefb1b7597fe28428a02b9579d25c29a6bfe9dcc0810da306f28b1a1bec1082f7102c8a8f70706c1518039c8a93464ab56df0022462a67da96a78a8558b870426cbbea4c66858ce0d65588ce7a5d1438559653bacebba12b91d7235208c05b54d356e20053869d109e8934297502189b28409592e14e8caee3a02cc821593b911eb0830f1f8fc6f0be882f4e24087f2f58e6bdd92fb278e611234717058100ac12d6b9ca00a642a1c0b00fa6eed1d9b36829466de19216284cf22455a27d145200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cd0eb0d2253ab9735c94debd2f34a38880ccbb9f3d84faea4a9bd081f8945f364e1ef068568209c82ec94c71048e6d69658f90a411705338d6f5baeb70c86f7fad942aa6244ece856fbbad44fcbd88260b8393ea254f4a87d1f4b2c96c92f9c5e2789dec5ed7ab7fdd35f19841cb0d201e1f7bef395e10a86efcc8a479aaff63c7d157c6f6d020a7a29a3df61398921ee6f669c34ff2b5c2884fcbeff7407172ba5f5b84d0c8131c716d073ccfdd8ba6f433215774737f75152c7e0981476c144a28a2f49830407519feb89823f9e937bf84830791db23bea2d4713d3f45294cded00f348ac49c508e3cef4b7bc700c3ebf07ff97eab5f1bf135673123a789033bde70f454028f888b4d1c65c21844089309e8a462e17925ba635ffbad4eca3778309b21f185246f113353a91cde84707b79849d45600f3d4bc150f142a61a4e39c1161c89fb306658b8fd2da3d82999623228952cdf507857a19451e42e2de36fba59160f8e15de26fe2ac5ade23b3a794a03c08c3cc62c52b4412825d7fdd19e896157646ffc7ccc188b846e977c311006906006c7b3dd8d9208096724335a8e37a255755edd03d94f0e0462d3bce0255c2d9c3d00aef8d492977f9bf9c8700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008871db32538e05a7863912069830656f7f8ae865bed3d35baee3823eed4240fa5a11ff073bf9546895719df9c72d6447b3caf02297839487b8ff535feb51b2d930e0cbb204a73dbc446019640241726f7a34b9ef35673519084f95061671a93f6b91b90112d2069ddde94dc11e3dcedb51a5f5f34b4f9e96211cccb5b8567c326503957847afb2ce1c37b46a4eb067b72ba28db1e60a5cc91f48c0a691869b758894c2aa263029c7ed9ec50b69716fc49ba2fe4ecaf146e88532c4973e8e950418f7a6517a1f52aaa87f80fd3285bef0854858b043f4303e2a702d1b091ca7073e8f7603f6c6150c1aea147127f4c56599de25646e56a8cfd6b70cbdfc8ca78e147fb35c994ad84d8d8288e94264936e4c977aa5fbe3fab0dfcca5eff609513d155b940cfc78a1f142f3c54202fa044ad251c407d09df898685e3e9e3b62fcf4a0c13f0de145a274db85b93f8014a0277da12fecf9f514c09574ab07cfa2b966980e28b1358d7233e5d4171f02a50d137e14921ab19bdc656fe9cd3e680894bc0bc26f65d1587d71d79e8b89f4d7dff24146525560fda78853376c877f873c058f60c3aefd0ed316aa9d27301be521f299ce42f906e66372ab2ce9caedcdec6b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a7f8e4ffbebdad13bde30114ea50a570866867c56ae58925a7a186a83ed3d2f9c734dc307be22482dd340c6437bebf6ed5ecce10855329ae959baf902d7f5f44ca624042fe29aa7edecf7e4edd56a9d7d5dcc8ca971493bbec248670432439270844da9ab6d3656aba76ddf4905540ef079790fa6cb9f788fc58eefab1e9bb04e3cd6284b6596f60839f2df709ba0c44ab51608819d4314c6027bf80bdd69bbce23db81077047916820b506cbe751c13e5e6ca53987e826084c983112f94881d54fffe59116a4d0c04838d780dcab0378a7c1c300508a4f0dd2e8128c20e950ea74b4af1ca35c274908b892f9b325d025c4d108a9ccf5924b9fe39f82d4554afa9c8c7b886380e7488269fb11145627c72394a2f655cbf330c24e0787a7cc07cce81f62a9d42c40b7b22986cc074992864f37ad2aa2504ea8783d157a3898cd8b7041ed85b367435d311ee783d1c080419372d329faf9c5ded6b34c25f415d4ee09ee725f4e4d76b7df3efc8da6eb712136fbf44d083bbfe24e45ba47198abf4b29a8a15c813655605b577c9c4621c1a28ee8900e04674be79c2b9c85905985d2fa4470dc1b773fda8eab8f3fad8aad1d7fe30e922818233b0663ffece91a23000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013ff6f532c2a39b3851fc44423b19490d4fcb4f24cbf698f172fe22375aec4e0082bfb1ba9b5f4e7d068eacd60afa0c754765df8fc330d16a694a6b73a914400b25a163f8898812db7fcc8b5f45e72f33a272ad96b0d9138759b0b77cc01d107083d20e34fd2601047235f95f78358c009d9632051f6d7335d5a32dd361e71ba85074d27a1afe9ab5b980a9e8193f4c45f70a09b6b64d4e2278da166ad7233ac2874d13b613dff469067ac16a33b91d9ac0bffc60dd676eb1e6fb3c79d7716a668eccd0801fd9984f17e9e611d04e49597192bfe000fd98630c7183396bb0f0690d22919d39301eac9dc870cfeac903af6fd956c9e569d2f6350158d35dd0dfafa22d13370dc769c06006020cd17598af75bc73c2eef25e3c7833c7bf3438a619c0004d700596481c394ca78cf55e2e79c3b50f49f80d981c1a8d1c2e4db403c7e93096e65c3a6f5dbeab84234715695b4627bfc4f7ace43224f8e56ed6132dc47dd0224c86e69e25fbbda2c9f0440800ad5093567c481aa203ef5415efbe714670827cc0579590134112b4cdde9867e23c34a7443ee5907edad087ea3f7a5e3169b624be1ab6271cca6daf6dafdcc32f1c015e538eefba8f7ac327b42a282e700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001592ea687cd81410a7f7286f69cb2542f417856ea528be500f352a429c5e8ebe2f19a43ab21ab874c77831a3ea25cf69a31159852cafc0e4d4e70cdcdf1cf9232d1fa616a4476a36692248eb47be7f4c5c2784a7cf8d878bee2fd84a718f5ab28c193642ea3362fc796448003774615493bc6577af0fc28f09f39cba039ddaf506aaf3e5eb2bc5052a9796abafd7e79f59d55a7e6fdfd03cb5e4940b4885efac8e5f64690f4e0bb83a6d3387db00ae0dbedb317f162bb99a92ed71b5e4ab387268ec6bae74b92557f0d3046fc487b6bc5566a33fa42db4cd6fc45c0da6cc33dd86e1fe35a801761363d75028dcafa3f53db6ffdb0f771138d74c036b41d9b2ba5497ce8ca22bcd400eae02b136c3a67f471649a490c8402c8a2b9dd8e029a74f5b502c3408a554c46e921b093d2ab4bc709400c0fb33590a5dd8c438b1ac5551f933bc23bdb382c2df029152fe6bb70d9586be2f41d8fc651017c39b1417cec2a878c71186284a16bd3c293af38630a14b9f406291a6fc9695932e1d43e1697102b584f97bf6f57a7316198f89bb6b9812bbc0151c34a28d261cd42d3c43d848d3613c596be7d1dcc8d1f3803d636492b7251041827c8a885b9005e9f47e700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a9ea2b37f9cabefcd7692d2a4a602a49a3e73790ace1c84af5c2cd1f673d1f04e29309232e045a0e8c288a41969b466ed4a881129c35610adb1b7f2782fac1d2ddc09bdb330ddc7dd6b62fdafe06371111263c6b8bfb2d1685e24a4c52b96a810b3f63914914b6bdc57179f40bc01fdbfbe479df416ffc99fd24e5b993d3599445669d55799c4b8b1670f4318388b4713e1cb0ae0de15c773f9a734615504601b7b3441d26c23c76f3411872bfaa69f0f6cee2a3998ab3f9d6cebf0a035b81fcf6aca1bc2cce9f5caeb2937bd830802d2c81ffd9e4b085c6dd3e63ce47b60c91d792610120988705eba3ec29c9c8b025dcce319710d23dd2a88e83e0af28ea11bde32935b168d7bc047f1823d6bc7e451e7090cd5add39fa10340d3c523ade94cc8c2a0b7ab9f39aa776e4c5f1224bcc680075bfa1b2ba407011804ae6aca0e66c4e6b2e9da2a9863d56712fa37a99d311f9972e0e467a593df0dce2d42767b5a07dfedec3d770dd9c1aae282b258d22199032ee0436b85bbc87b65f81100627f7a9481b5a6862c8e74015c5542a1080f82801aabdb9ac2bafc349f62ec03f792dcb519c4f3041cec6b13926110ca956c3ac5469d34d2cad1a3f0778ebb02e200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a583cc170c5e240721815e0845fdae400da4082d0e95a8ceb9e39c0a9e15957a41e1a1059d64a78420ad6f637da46f6a7191486652c7e2977308c346560aa87124676ed87b85d0af4f8c7b11382b10ac4326809a7104f768db16e4baba0621934a825f5c2018e5ab18bd3136fd6f4d7e872325a966e380536b3a72e4286b5eb7003bb625ebcaeb1e3c7e1c5fceec585e5c08069952c2178fd7358e3d69e406e71ad6d1a8924bfc0e9709a4acf07d9d9c0952d5dd442223bad30ddd905527eb7e7ace3811172d99414aada97972f71bc617cb21de3a9e7d94c7e7ec593121c0ef3e8e32ecb55e4c669f996870164ffb5390b3008b5b66e1a2ea62be932de5a8632c681cc4698d49a5f5729055f0cad91d738012ee207a48962888047b118f04f5c2f8395d270e386fa9e55b02b616f0107102d4caaa524cd29327fa253a786ef594a1f591aa5bf2ba8dd70f899ff1a0ac908ac22ebfe1e0870eb680f596e4f3de75763a91fd264cc8956760ba37c060e8eca9cce6a8460f94820284a05aa88eb019e25db337f8d670ab7c5ee30e46cfbf37c24bf8d97961c360875863b06603629c4e78b8ff1d430a29573468f187ea926372c35c75caadc9141dcc8d1538270000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081ae4e4bce10b8043b9c0c6608bbed1ff19f0c66995c5714482a22cc8e72d1531340b9c9b993b67304c1e81cf34e0d576a1111360819fb72352c7c1b3bea1ebce099464cbbb6d9d3bc7f9fa5f4141609473a2472f2bf84a42c002f8c8f61e32b04ef320174244af6331572ccc618e067db3d882235c49fcb3073898a0b3fdd0c1a4d2e92727c6fd8933dc26e9d4a389eb0f335a05fbf2828fb1cc6f046c906ee5b3c89fe7793c845a0e1775af9031bd6302b07e310617c93a1e4ce0b5a66d0da8d2cc7b2a0ac58156cc8c3d3efc917b1c296cec4537b13af74a9745c7c662649f6aeb363405f664777096229bd181c459653ecc1de91f2474092dfbf1846af8f467614ee51389c10c1ff7b59aa3a73db486da73fb847b22aae64994fb3f88de65569b3cdf12425e6dae2a9d9e1fc336065929660233001d6d9af82b0fcd3d6249048eaab4d0a616f19aef8b97669c9533bc68da3b74c5d660e70f301d6781041e4ec8fdecbdfdc2ab9dcacdb2c1daba4f6b97ca7f322baa1e4831063541cfe6259ffd8f969991b8dd60bc7f03079d2a6e8bf4c3c544385c78f890a728353ade53d628ef5f5fc828ebff8e422eca0e4ef4af55b5f3ab892a04892044c7ade4c7800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7d7b2426a54abe724200fa5e8deafc7b55a6a93122ebda05b0c095cff346ce85c169bcdc6f694b082132451df7f76cc5bee0cd54a139f57a9aab637e75c14501f98aa8cc07e60ec3dca17eb9c9aae3d9ad8e761180549061b3707c33841cf54bf756cb12e847fca1d16f25130c39a7b2d4fcfbec17708dbee437915494a78e83cc2e44d98856ffbc49b2f9a0fdbc4feac0298647cdf41fa949a33dccf9947f2c9ee12e5d73df1b6e87fced5518b7859dce50d0d19a250b82dd9658301a86e588f9f8ad2b392443b063d979fdf901b2fca7df3d52230591b14f09b34a01c2e288890707eba4721f3dd7e15c0555ba36826b2bbdfee3fd40acf20a7ce60b769ef20b020c7b847463a17624849d7961b1a154490d1b45cdbd5c016736c12eb4126f0d9de2eca41b3c45e130d3b75f0ef860d03ba7280c061817056879b51e2bfdeef03aa7f385977164cfe0263e571b163f3ab207f99d26e28ea5c8e6dea21d4c1fea5132f35afe5c88a7d7b78a216530b5c2795b172486c9b4eb325b0082f8c2201f73b5fbd16b49f1a11d87c05de9ad7a7a57ef5772dace00260c1427375a42cdc0ad314df50baca81063ec5e59ba11d7df97f6d14c8bed9ea5d5c258df4d2200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b24cdfb81f86aedaa5f2080b12c2f047fdd2514f7515f9365ec9f14a124c68c58f037bc992aaf9cb4c77d0b45335f88ceb066951dffb7d5d074bac9847979dcc38446ec04242a22a1e8f79cd12a38f273f8cb4cd6d50f150d9d6caeec8a14adf73c4aaf07452c3a632f6fc6befd6cb3e3482b41eb24025698ad9e0c3f6ee54d780d4225838db3aaceb8667a2e72e957370e7497fce067a349bbe93e6257a4cf858b3873c082002a5ed5350f11cf5f0f308ccfe5caf104d3e7a3344883014f876c2314dc2dcd5be2c70aa96c0df31e7e004c045934f52f9bd06abe9128be5729a4525384aa4c4fbe29434e40e378bdfa9f4c313e83d26abf4464b423c8e576cebab964a3c14239edb9f60b6b85f337fd731e3d7fbd0d6a450eb815e2767da9c4d160c2d8c48990b53004ae296cc9b18622432cc8b8e6a5a620e8d8e0b9f3aa54e98078140baeb084b2e133dc63937790d1726dda5bdce0c025863bc557a6a831c45d2de678cd7a55f884e5c2c7ac6e5dc7af8160af885e2776395c18f5eb84a142d22a4ba03bd38e9d56a1fb04a970da45fd8d0e763f64d0d185a13fef8afc9a08f2719dd5f0d25526d28cebdc13a3f8b26009fbd2db39338cf152ba41025f3400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d3e6c5f5aa9f51a1024e5c20f1c00eba766bafcf57bb6f37b77a86716ad3910228cf8b82c196ff483ba6f5ac8936f2b50f2b3e05216b46cbcc256f1e765342754fae1c958a066d84de143d85683213827c9f0bdeabb33f0d0728327cb0f3a5528d672482ce54ab4bf2e6dae5675a2405953f9b71631a67177eb6c56580a433422b5869cb47c291cedac297e9540728997ca45145c7e06e57d542e684799bbcfb6b9123183b5148dd3c5e239d7eda82af2fad0d6a1b0d6cc1c70f87573dd44e1524f36eedcf0a4d8b9b92aea854cae099ca1e6696661ff89b47375237de27e6514168eb6ecd4e75cede0bf779fa1332fc2302b0eb15967cf9c8411e5e63bdd39d4936343a2f39f4a7ef177fed5d675ef4c92f45b1f9565f3e1728655b2c44ff8311376d91797dbc61bcd6d51ced7a16e82f2a906b5136fb934803cf2e56322918cc4cdbd080c5b7d1e30f437fd7ccb6f3b289632739034a504b261990255a49ae4505ed7e90eef18098c077a7daa66a3305a27fedb6f85770cdc1bea0c77c10309fcd05929c0dbb5a00d984c790ef9a5cd7a9c391c3cfcc43512b88780ddc98a727ce51f8acf02f203972d61714fdee4ab5e88d5dff116e299fbefa98cd58a66000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013e4ed01a7f5ed75d00e8310145967f895ad9a8266fd76af797540b9a7f14c6ed3d5d22fb766d0d8790a6f659616d3ea290adb06069b6b8ea9327cf0014cfad132e1dfbfe5ef75f3f6577baae850ebb7177921dd3094b9d9299f1e01dcaea202d4101da8c02e6110cceab43c88c4f924eab8a5dc628f80eb26380b80c3954ea397b9762c3ea5d985e90d3c6f98e65821d275a1ea354f574e53d48a3a620f607e4d6f8e6815775cccc6f164477dca3a74a0fab8e84918735b6b3f7fa3dd514a6ac4c5ae9ec4129688f3ad945a04f98a8d04cd630d23d62ffe2f2cbe22709724f07ffbb738cadb3a84d78ed4ba92eb4ef9c636622f7d0cd2856736b0a0cc1266e4105deaf84baa3505139e4b7c06641d1118a2dd8920ebfa5b368f9858fb89bea5a1fe7e2665a2c947acdc90ce3adfab0f9408511a9e8677a2b5c75ad5d220493150212f7beb4e9987fe6dd0e28f409e96cd11619972777fcd3b1be2616ffda791b72270b2c5d3978d256f3e42e06f2b14c751fcbcd9bec4874d37db8b5eaa4101cdc683ebb526c38a36b6a6cf2181824a8e537971ef3c0d8913f797f71f3f312b9a85226ff45c3e218eb6f669cfc7c2f4b07d505cb9ce1b78976a684e332694940000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3bf4619460f20e0f3ba10d8a37544ad51d87003bc72faf59ac1a886b5139b0c7e0c33c1314b9e9c4bff9ff03f849d1bb2947b145a0770c5ef29ebee7c6000ebede3b1f76442d0255a2fe25012dc1fe492b59d75c1cb254adf91fc00b50c98d1d3571ba70c341637d93b1e65db26c8f0cad0cfce3fd3d099625cf3b3926d0c8812f6b3bc2fab49b96aa5ff6540f7a7a21dff91ea960c9738f1cc1be1cfa5384c40c67a9415dafbbe475e39a7edee6760c9470b2c110936237f7c4a011b8e714ecb43749f038cf3a4d0ad1f0a45acf67d612b83663b9dca19911f0a7792d6ed46e3eeb71839bacc34caed81ec33f2cfa789bad55d60b70fd41fbebd31720a052df976e0bf6745b5274d48fe9f9f7dd9307de29f59e5b3a0c1769d9678b53a8359948d73722df71904edecd970460a0ef56d0daa9494cec007d81bf97eb4384486312b0489fe5291514c26d1378e749268a1a14f89b882a468ce94c51880fda3d1ee44c6b78f8b195596f6a0b615f30af4451453912093b3d5ccd7228ab2975421001a19a9d2fe9b33465ca7dac83d83ff64861da5570d4a670bdf9d6a6548718813c4e875b12773123b67e640f964e214b847d2c46eba4bdc53755ff2cf3cb5fd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008fa74d69984a6bd2c4492ba4b69510548a1cd97f8509f781b05de2598f8fb9d263ad47a136d9a3225d55c77e5ccc7182ee3896cbe84778b2dcbfeb66e636cd01239b7f882944c9ca2882063a7e64b8fd462ebcbdf624b7bc58b716a895adc4e95ccd8ceee33b333b6eca8682edf71baa138ffe7e77d999b21f4f19a99d5f1e526f8ed19e4d97eb6f977ea0166406ef568768655805b25f62d8cc3d890e75f128380d60ab07bcb44bc4b6dbb495005ecd084d072d363a0e8e52149c0ec66c2001b7e882cee43096789eeb904e8f115dbde583c5c095c38496a243358e267736e021b57e312e2ef9f4235ca507f8f1f2cbabd8d078e87c5bd94cedfb0cd047a445c81978d3f23100e150f98fb1b7de6aa0362a001453dbabb0b799626e5a97a4cb25770d8cb75888ef9f4e9fba628897dea4a688edfd62bae65afb4d0a07668c2a48cdc892a33f1e8d2cbf33c07c028b6e5cb30a83400843d07741e14caea26c5a6a269550512753ea32f9e3379871fc9799b61e12b3d2e5e651174beaaf90068ddae65f28d1a276acb0374ad66805f1178627cb06a92127b76bd8d5b7a152e1017a8c2d67309449a7535338ebc26006c5f13078168f32abc72a98b68c259b6dcc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028fdab71e273391ad3c99324809584d708b12f53bbf6213a55777130cac1cd3d3f714a28ed479db0aed7066ae2339d5c351804be8415f2c8a9cb726a701a1a50487b85cc04bcf1a20a039168a9c3fc625686ada2bb52c7d93917859368dbe86eb49f0a21c85f534c31af7edd0ee7a44af7103c0d3500246c85500fba3e609756599454f808d6c66fcaf9ac9ba378f2edac64018c1a4ec6717c0b00edf26227095e3a0ea494441ecddaeb39c0b0bd435ef969690d09bc3cc2a62ce3d4803876593776a36acdb7dbf2115c41ec20a2b051d3b506e4980c7600ccd0daceeafe14f513c2fecb93e384a33a3b68f2253c313fd5d29a603df151e08665c1251c5ecd11a288f2a7bba947b9df1551778970998a3f562b684528df82447d60e52d256d3fccf7faeffbc9d5cce642bdbe754f77ea2b1ea4a989d7c992663727ed0baa0037c02711cec9621331b8790038373b6ed1fbeb873b327f5353795b2f34b757381133aaec98a9fa2c0a141bcefbe8b752cd6c6604ab8ac0877f3d6dc7e2f9e7d832a76c4685b822e841460a6305be9191d44f945752ad3832f41c2a4258b27cf7b36deb7747bd717c5e9b2a4873b70e7eb991fb2c70ed2baa210aa91436906eefb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e7a4cd578d623224ce3c3ec74fefea0c34ffce3ed11f4c1bd03890fa17c03ebb9ed159e0d5c07427468d3376108ac98b176d6d4e4f979bf68c5387cf0c5b4397d5aa0039b6d2f6a950939847f2783502a5e0c906bc995956cc6d8adf96c2f06eedb5cc25e4292574caa795a49ce35889016d3e8735493adbbad2b16542c836fe3c35d284280a54da7844a23cd962c14a1c583f13cb5d85b5c6dfb79975290a5286a9133150030849841a11da4bba0b64b7a8c817f46ac81ec30b6277b72524b3c61ab40ec0b68bf7935ac8d3b774f4e1e90ed44a6b676c6a2002d92f74c44a6bf8595c55e8c7d97341a036de0ae4949a19bb968f5e8b312b92e61935bc6419fb7beeba7f65f55707b4ebbe5b6cbeb77e42b1d0218d4795a0519aa5db3a449fc88fe6846209de93c558320200c836a371b640bf4152f1bf2d321c5f06275b73b331b0a11151dd700dc0553f31588c90deec6336c2b17aca7510850acb63152c5165258004284e2c8ead76b258389a6d0de9995a60baa1333ed300b96cfe0ed7723e100f7c599b1b4f74965af25c310ce3b275748b52b7dabb059cb017d196c614ac815e26432c6e2f80d908b3e9e00b4ac651355eacc90cd3bd19f1144312f560000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad5115dd02e285f5449466297a8825a131ece4bf2f82305ac4c62df43934c24dd9f8f6cb7686c3a4909062c610bd66e7da81f0014440c615f5854edec1b7c9d77ab4f69aa22d2776f0dfc374a0d130f5ac6c9ddc44e4d31cac9b849dcea86da3677ceacfdcbb5c3090cc301b5619ad3ff63608b6a68ca50f9eb57336f89f82e3184b621ba99e2f197150ad3e2f8d30cea36b36210381974ee236bf5fb3c92177ad16a8befde52c6dcb8c69e428bbaa7a02569f129822d870330a353210f315c099de3f7b136ca444432d6e9acbe80650ef7e80b0dfceec931e68786bb0972695935143e44aa2e05fae72854d79bdd36c3241f2beae022924e79f9234d85117bcc260d0cbfaefcd7df4bbd110b2e336ff89bba20be17a64a7ecd3aebf39aafab4f008a11f229cfc22dc4e5c35241678fba745a9ac804520ec70aa7ce9a6b3fa2d8ea7472f77230ee6cd524aaa61dde0eeb98a5760f17cb103852bbeb2a85af0a1b55c594ac6421c5cb3748c429b73602708cfe69e95b5023b566cf2f319f54346a69c85f143ef67ed590546c3c17b24b131e6054c880596057f742c73c4526ce0c548ecdb5b85ae31c4331de4b67de4ec1d174751fdf3d623d480748d5397cbdf000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013c4b6929a514a35381605ed21706e223268f34fc80aad080a4e74b2b1174c29471b90d964b0463b4e4278dd0e2b8b5a482928d084ff08fc98b4b031837721a8437835630908421f19f6e8a0d9a8afcf20cdc108e7afffda7d39f9a5fe8474a522aefcd21612ae5366055d5447a4da4e6f335a55aebc3d7d17dc84f66067176aedadfb36caf57bbe584f164e4787a6896493d6ff6926fdf025311a4ba942f47bf5b99cb49ccf36e7aeed44124e56d7e1bf08af9d9467de70b1dd3060d0b0a7fad6163e55284eeae968811cbc023af2f59c61c788f6190ce7b34f5390e804f5df3f3fbcf97209d62052973c7eaba1a1988a530bac142551e3f3da2dcec54c58480f835635456aa1e5059898266a90fc9f0ee78cc57a33f177b33f5a74f0225f1daf9e5057e8cb60a9b3f86d195c426cb2ce26410d40717f499297f07ccb0333173ef47418ad9dbb2d108cb0ddbf066943059ea35304cd19e2611e8296d115e7196fb4a6f47a93cc98745530b59b194a06a8b0527decf00d0c85621aa3267554c7571d747d6541623ec5eadcdeaf3388aefb33c500cdc1d019c8dcc57b4ff90d19d6156e31354f99653a8b5f6d0908268094d8b108036de5bbccbb22621f05968b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009382f5a2ce7e44db76d918b4dff97b9753525b7ca3a206e0616b92f061ca41589cc3b3a3e92aa7ef5ed6923a1072596b0892fc24c7ec37b03f43d3d64fe1c4a308c31026359411d5b43ff07aa24b83b28cad715a44082b3c026b79de2d5d73532ffa8dffb5248a72fcd6a1dca727244c74f93b382afce63804fbcc8aeb40862aaf657f8791bd99e189d6720250e07ab73e60d9ccb56f66c56ba8a083989d184fdeadf47227cb58c35746fe5d16ff437c9dc7c05245db6ae6b365947d2734d78e71bb384ea9c610b966065132e9c1f8d66ec8945401cb8d7995e51f12677f9fd62d4a9883ce068af5b2e54d34954ba3914f1cbbb5c1d391d9b3819841d3e076dece8309fc614a1460103710561cad010d51bd5a58d8db012cbd59e1aeffac530ddb08ece4ae24537eb7fef45f6537b989358d7b8918bcc05390b46b6f47d9ed6610baa114d713495971cfc243ae2ee2dcaef5e07f7743606eb4ea145ae0fe3f391fbf580616cadde737e6e1494488a13c366505c550640658603999240b0d0c870109678d9ceaf56afe76d680f78ef054caeb1c3943740e1661565f987250f1d06cf4bb134f75cbc5ffadff62de313a78c9d7aa63b8858cee06a43d7b7920b9be00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a53d8b90f0f2f5661245ec4322e7e91b2ec8d2b4038456ddaa915f65d2e6e292a806c1192ad97021d61ca12e0ec32be9fb6fcd4c4b699a5854d346f14f3e2de75aacf89e5848f78c3cbd0194474b9b1d70f8d4df85276fadec1fe66c7cff21ffbb4cdd67e0ec9c7fb1f8f9f8e8d9f7d17ea2266946dfc47052a312084ec594f833f411d5c46010947de467e02233715f2af2e066226186daf9f93c4fceeed194144407d8daa03f2b2f473d7416fda637021e21d846026607811c4665de5e48113a08e4640993164390009a3cfcb289a0cc00258892cdb45e9934666caac5302280b488facfcf428ce5effa30603889ab0b7837259f17d8dd4b3b6f303999fca2d22893e6485a89686ace0dfd5e2e66c60560f28f2de811b05eae439f19a528b063d61b9158480f0de552ec96dbfa03741ea0c7f4eec5b26f6cd3e1a47e0cf5d64ac493cca77acb418d9a7ea45e894f4ffae3a0bd3c08a06f693a2e3f978c8e16013e60c2c00073942287c9b0cfee465efa5d814fb7f421489bad8e1ef0217328675737529ce61e1a8b70aa6dd97e8197808d814d3f6d2e63a3387b4c760e8c84822aa538dabb77d64ad2095ac49683f6b49a8b03987a41a47e045554e0df8c60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5e384fdd63603189e8fd02de55dfc537c7b39d49a51a91792d9fd7e2702c8007726cfd10ad494b778e9b013ad44c5a3a63a2b0a168d876ad45dd650e597824f415c5983f5fb883b14c58df9dbe94e38bbb2e940a2b58272ed2a6e501bb342a599dad6d48dc9cb964e3df3766e58810e5f0d986a47d2063ede1fd6b9950bc6daf5252f25a5fb1c32dd367aa9e0db48760924f78179e91afff0fdd94fdbbdf653672c20f18e791853a25e525a72166d78fce725c48ca903fe79e0b8f828cd391212833bd1bd7e2e13583455e46f5a0e2113ae92959d57fe584b4d4f258037d30984da06659a669135c3886da1549740745b6dea0bc16a3a1b8f9d649835937ab11ca3429e92a52d785920e02216a05cd41a6a5d037091be931367d41868b41cb1601414606c4f9620860030f327185a73ca2367f2e10dbc74202d23cf6ad4b364624c88e13ec32be63d75777556c00d6cd3558d50410f82942abf5e4c38bc9045e97b5e6f6598509b8fabe407c4d986c75696d3f54a80096f46b7ae4336ae925e101e30b839033269a32a8357ee9838a65af52ab7d782cbbc2466e6a6f8b5c41b44cd824facca61f4ae3941c47d86faeb995889f1e37561dfd48eec0671cfe2220000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180d96f5633221588949b45c9a0eaf98474fda8028d818e1a67f17295829699305c29ca7970fcca4d294e102b9898c219499d21e70dfddd07b848eb443a535b4b4bfec70b24aaf02bef41330ccf959084c337203354fa9c95bb99f6e6c8833b039d526a5131e24a557e5b6fd16c85a1517647d74cd8c592f4e363d8a7cf585638d083c9f6fdcde455f587f9b3c3a75e570e1724f4095e14d353d46ddcca69e8ace5e2fff9f07e6370e6b8c7c8c426edf8a38493a3390eee023c5c0f53219ec7279576a0fd717ee08fe7cd2c8fe39e2149ddba6feb21eee1954abda88702c5c5c0e7e1041c57d874f68b40f0875d1c2f2b3064440a2fe37965fcdba239294e69c2ae75b99e5ebdc2ffff986a95669743c21ca7302bfe8786f000b6b87b327e01fd178ed73904ce1a52650f0e548494b4428052c37b1ad90ee6dcf6f1569f877da779938ce22e924db4f0b66b8bac6b6b801ea032a5057413ba902c42228aa54ea0936fdc9cdebfd5b097b4e2151e0620342c8586e1b1703314380e53eaf6ff5191ba5ad368be34bc97575efcf880d68b27a7922184ec970c5d570f6582ad4848f6926a326fb966f2317fd4df7ecd334a84228500c1d5f61e404b1615d24f23a9400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cd650c083f531ceb5bcd0aeb1df9c5b5788ec017e567f62fb3ddd0b890458f39d3d2c226359f7a9ae11ca78e074112f7705232fd5620cd449a30a62c131bfa19b01d0e0c5b946ce53a649cfaf8871ca5cf008cdf8687b8609b1727736cc7b14844078672a8a32e276f20a10c4899b17d1fee5fdead40fa33b11bf8a37c02cd144f07cc57aa68c889851b588ce9520ea464159f014bcc0f99ff4c563f71f5b49cd55d7a5c521cec054e2a0a1ea153db44be0b0fb5c9f3a828abcca751b86a570b3bdb6f3c2733169c67513ee26145ce92c666c1480cc66c22643b465b3f668a60fcf2257a3019a7b3367b6b5ee3ef4fe249df1262061fa35c7c9263b4b75c9f75e7d17e2faa325c24b4ed51fcf4ae89280d1f88014325d23acd3f881cd13b68c733d4fc55fdc937344755389230cbea067b721e339af39df5307b42c5d3fbf7536cdf0ddda323653917d3f11261eaa3bd2867a5d6d4243af323ab8ab54fb549a3cfcd87281ed91583b3b7a785627c3e19e74e38bd99cf421eaf52b3fdc8f87927f99178e9a45d7ff79b14ab605db9b7b9eea16cc6c57e78ed5fd9b72f28edffec73cba02ab77fe52cabbcbc8500b332b900c685927d7890b25f650215b4cca65000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c5e8cafbeeba5b514d0871d1b198b38acf66e03d7bceaca6d11fcb66e360ba7a19b8ba086ee04df9f00f882c6d496adca363df3c2000c3aeefce0c0eabc701bc99f59d2fa9486bf8d3c3be714c48d555a48fa556423944246311d7b3ed19a9c5df52180111d62b2e23f042227f62c04aa9912f3e67eafdcab7d5e451279fd4a924da09efc49c807c9a5a408f65cc952119d027e3e10723bd75be05a5ee4cf9c36620beb3db90dc7260252606bddfb9afd7e05baf160b8c5edc62d3559cab15429c19982c7804f7f33c4a15f28adf35e2edf11b23db78f833c01476f393a6a0451055d04ab6d8b3864eb525f14de5771ef1fc13957c5cb49f588e763d2ce5b2c6d892479cf69d54a2026efa0e763fc77f0c8ebea164354cbd5d8fbc2ccd5ea246d7438f6f5eedc1c861adb03fcd18289e3389a028d5d92769e116cc7fa858c82d6f38c5ca0150d53552a962fe0219614e4b2ecbb57baffe983f7b7966b4062441581dd4f0d0867d2bec848dd792e34263b0717d64cd4b62fb565c75f64185355b6012e7520014de0ca99088fc77684a264ba0947402d61489765d261ad1164a6e16f259ab71b3ff0ece005b30f8eb7a014d60c1ba3548876269143da8eed13c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096f7d4337fad4217b53bd3e05697946161bc578ba3b198e43c3ec1a0bf26fb2926c77c2940ada59cd176ae7b10fe37b29ce53ee98174e9460eed6c3ea654e499b29dacd494cbc24927fac0392b41478fcbba37ed2d0c74ef7ab74ad7986bd5ec4388a2d42556c859edf4a9509e9cd2ffc314d9c90577b48024e2ca3ee7cbb507f71801943cbf4eb453dbc8074f2abd2f7af9c9a737d2b58b1bd2730e44fc91e8321fedd962f5b033dee076a0ae391ab937bbac446d9c4c01651cd2a2e6436dd36217f1a76a3e4e2b95e7611749c9dd59cb9e7cdd07aaa9f3be4f41feb05b181b218f28d74ee93acb36a0ace6c1bab7591be4877ed6990bc94adcbec84e2214879dbf7ff073d966896a0c2c78cdc86611cbe2233fa3b3d319bf6dd4937767579788465cf2a5dd27b7704f700e885e35460faa3dbad38d4456fe563532c8da969cc47236da166aed97b54d67cf6e08f63a4c42d0c3cba7550f11cff449d3eec11cc5813793af1a435f41339a1674f83312ffe9db718969302de3cfa59a34c74fc1631a9ae3d572d06ab7852546713d008fa8ca1a8cf0e089a62846430450f6af88eeb9e6dcb8ca8019317132f46e42a9496891cc562a7d8cb003ffd4c07d652eb300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a6372fa79b5366b1248bffe14bbdde7c3e2067ac27833cff3d9abe5483b899b2034b0f42cce842ce8e7806f33653c58c6cc1bc251c106375913e270e0879fd5e64ef7283c520eb7a4b0b1e07f38392c9cf7d893a6b6b98b1f7786e0b5e153c3c2ec737f17389d7210ad6f146399269815d01c968dc97301b7c277c9c6332430d493d22c40ac53187b84eed562f883931b55c7acdde88d02fc93e22e13d704d60fe2157c48e0ff3e6f18850c028fb823befbd497e2bd2e60c9d5053d066a4cd434f3494016467cdbb0d6ca5769c1b39feb214eb8ce7a33e79903dddb8daec64e32e8f5cedcd86477fe3cf3a5d65a8ed51da8c4da651fdab8687fdaec4355aa5ee969245e44f31be989d7dcda580b6cbb3184166ab859dc3ade0b6c14ff7d0be41ac9b3df3738332b2da7a19623efa4f7a11a0fd5c76222e1e46cb4e59d56f4c747c06154a9bc825b58468100bd45385c655358277a20149007de4f39606b8669b5f870688a91920f2036d505dc8856607a6b713aab2e1298178cd9fcbc5c0a6e3f3560289cae5756f2304baec853a4727f63f64c92d0c117eeede15f5efbd44f5cc7ceb6dad35594355bcee4e79152c07db62a6616df48278ae34bc543a71c0b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023e7ef19e15a8a4e978c0e63cfe4592393f523b53c7161ce72cc9101728b217e7c76711a4e3afc2eb569743168533c9b1f9f889a39c8d943714064c128b3843f7561c66f8a85762a8d4eba7e0055c095649bc4ee982d03ddc3d26c9d1308f57921e4a0801dddee0664b7aba272d5f9512346c40f3678e897d46fd06769f1d2b7d72a9a87a3344b7a7c17482289a008059f830191414cc1c857033b2341bc0d22feab4f42a8a0758e96f7c79f6f81150e83991a4f87b482271aa3abe9de59fd1265e62bc003edada69666dc5076b6dc8a18eec944563628ffbc3b8e756ea3e02772bea57be77b82c5de1342d771c3e01b6c58a1708beb5d6a28035888b173d9eb42f610b4937ad9becfdbd5f253d8b117e7f90be5739608a83e66d32abccb7a3fba0e602beff7936bfea4b26ec8775d5ebd33e32b256ba27536ee662d8b93e7ba4b1ecb789fa57c62e234b46f681ba35520d0a66cb8ce566edef45cf0a88e6e3e1f92a0e832adbf8325b80a0695be3d527042699c658a7eb9df2e104471764461676bba109eedf9fb7a7855eab16f3b903a8013181f0cee0e2393cf4a54625a18e3d0f1bf0f1bce980ff7bef4a82cdb1a6479d2acbb56ff6dfee3f9786ff6c43500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d196a295879797edf68d3b83b4f8935cca7706288393f769edb9694ef421ff099788f2c8e2b51a0a27a2d1fc627ea8980956fc8f248f871f19e4cbfa7261143a23adf2e95cdf02bfccb62813f647454ffb6ca0f9c4dc6c9e6696dda6b8dec86e295dbe613f21f64a7ed8ec87d04658e8bb601f267a8ac6eeaa570fb0d86cc5da2e681ccab77d37baaf001a7c6ba4f8c496c317caa73f2231274614a7af301709e9042da4937bf80edbdea11570ba118b63fc40203937e941c5002889cd7709776180742b14f2f89c30cb7cdbc080b68b5d8a9a451f7ae4b0a3543b26c461afc92f773232108dc29d4fdf6ef776023fbe057aa70836edd681aaac4483f6f692a34962b765469369ba89432e23a2c34f2f091d327acca0daf187e4a32f21bd57a2405211e86afdf922cba746f7348ce95799601e6cd0074e54bdb0559724d993fe88a0e405108227af65af77b9ca3e96001bf591ee934eba8e09c93883f8475b34e6190355b8f1a966c59e8e54a380a02856293e53f03ab58a73a52372423677406dbbad4bfeb741e300e23485a118cc3b7282cecac8c0377bd0aec7e4067a6e68db3a25aeb5ff1585cc2320e96ac03d607f097d404c1cdcac7900f72844470b20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9966c0a7385a0da67a472271fd2dc4809f194a16e6f7464c3516b616bf4f71d517f8d7a85d12e2885094c7709c88238ab535c8df652f9534b6386d8d9eaf7f40320a2303c0c40530c640104cfa7405bb1d1a343fef124ce9bd064ae71bc781538b3fbeab08c4ac7da9945d99e847ec1ea2278330ce3c8140d073be2af65a9e471957171802cd8fe67b52ce5d9fc26a847ac46493bb30965862f9643f249c0a5a177f2a6f8d0b2795f29451001b3eda292dcfb76ff9eef7271bfb62053ff3833d962e6f81657943dc84d7ede88e2baa0d2d9c2191a31fb5280abef08515001ca534c625e3edf306d175f5f24fc643405ff2b8eb43129099908196d3e443a6d9c4293a9ccf40afe752ab4e26e64126f81c05d786ba82d79d5f91aef40b4c3261ad12de91a6ca7a1b96aca814a705e89d9b92de33b10cd22817797ec64be1e0d36dddbd737cf5aa25cb21d6b8f3c945ae3b9c5d567b8fa8e0ca31e1898d62fe6232cbf51962a59f4e34d64f8de6404d34af3705993c6b12eb0f74318f28cc204c1c20993d4b6ce52759c3ba9af0a20791aeb28216472ca8e0f19bf9f774fcb9a9d52f062128c7e333ac43ebf7d24ee3a782d5976fc79b34b275e22b26d0b62b2dc000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023944b68303aaa3a2857f3b0143bdd2da21db8aaaf9c475dd676d0a0d8aabef160112f0959e35d42bf5499244c4c700b64ad6c957e037ddb96d5f0178c4403c3d37187937a8e7f9010a87a10cd84ee3dae31678cafd92829821e7e27072e66eb748caab8c6c0bcedfe2f6133d7a86190028d5cf2ba503455d919414d8a89c75b1ef4b17397737ec6f20178a81a02b799990f8ff72cb0e231188a7b1d5aaedb3ac4bee0816f78019f9a8ced73bcc93674f98744ede8a53c2d9c517f81ba45b87ce3ee7db5e2b5a0f503a26dec7faea536542448bde4fc6273681db0d4e8c8621b85ecaa244c2f3db18dade9fd43d1bfda39f22d6375d62dfbc19dbad2a5f8c8a9c66da85f7991eab5690595d02b68fd6da0d5e6e28658cad1656701252e9f7d304d851c2c9ced196ae50e0bd24891cbd387c780a1da27a09d0a281f50b2378497800776d30e55408b7679b9cae6987ad089b58d924bb73c50a38c79742f79d7a04b9a12ba65e3db492f3e0b587de67c7c7087e653e89b823f5ab25035243a696a92103ab7e909927d615a581d189c0ffb9800a4a2e3306cfdb591ed61b375d21b10c1e4d8b964dd4fb05d6b0060f7ecbe359c2a9d1aa82b8d03bd785374fa29a70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000882c7d984ebf41254a572effe4f4971b196c1b3739e4f4cd643474cf1d2d27228c74c49be1e0e6bd466d8c5ad96e6531a8f7230cc5b068d2bf8b65e1131e1f8ca98fedc7f75bbc5752f832a1a5fdfc3614d38a01deda37e50881e7b6415be4ef33f63fa32eafa121ebdbf0eb81f40dad67a3e8c4bc4d3ee403089e650820e93d2e86f071d0aa3e2bce217e7ccfbf17d85d6f204136fd06482cb9ad03265a6e813ef133778830e026fc3ee17d07b80b261803c65255705d8d0d075d788dcade664d502c3d551cddd08fce2ff56b2c0b32464a8aaf78b52b920aec51f1eac9f1cc70d10a02a4c20b650709c1ed29bd9417a248d7dee71cb9148e515eb15160e7e32180e1953a21eae5d849a802371589bcb66e64ac6f76164c2c88c667327a69269b027fbcf76a002744165b2d49605253bba2ee28f2b8216bf80d8d34f55d1ceb2d0ba18e69d91dbb078317bace5cd007b2647f52efae37a0050eadf17248e1e8c76c0fa2cf9ec097e707d464e2be1794de815a4f4ec8f0efc21ee54c478f0575a3a20b6f488b4e1cdfea76add7f10a89a699954e2416b2ef8d10bfb6218a7f61d116712f081ba5fb140a9a5cf5678d1555fa3c35a6073b9c3b4cbe50f6b750660000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047bf09b00a6c62b8db8f8c185637b1f12f9bf98dbf46628f94eab3552e5e75c9a05fec6a4aad82cfbb7d3623f2869ee2512abbe6fc882d1d1bb10df90778468b1a9e13332c950698824cbcb2ebe939c381b9e878ceb5426f981d45b7c2f6e291fd464d7892ee81e824a4786cc0522da2a0bf028b4a1658903c144ae6dd096ec0939272c303dbbb970345af30ec93b37273b7ee0040bba547c6deb032f6af63f4fd3832798c08f600dd6ab80d0f721e4d6ff7b39575245729ece6f20df89ec1905f9d034016b37347136c4268a3c0a25d1cd94b269f15db89cf0d7b7d1527efd96d7f5a9dd725b8942d0f4745dd0f3747d3a3a4ce37a90f2df37bbea46e8b6a4715ce2b4ff1ec8ef26135bfd3097b662f02754836027ea55598c00ff6051d3baeb39368a32aff7a94cdaa677f92265fbed61d3d847b6e2ec84a4fbaed360e1068ff69f6082f2e0e7f62f9f0084a12269ca36af57d375bda43ac319bc8d5863338674871287b64f77370afb9f15bb6380eb7c42c1482d75d6f09ebabea8f408fb8b9e077eea6f32f5acaf0b29524585d5d150c05dbc28ded3d5cb0d7a82bc77fad005d7a0257296257f8d9b12f7b95fa9f6eaa360f43149835b6209bf7d0c624a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096377fd39285d3d69c3b4da74c38b95b793331f832d83d4458b7edd75f1964f12dac9022cb2631ee4d2f7fbd72d0bc2174ba677b6bada0463c671549b7a6c08094446f77a6d1244e12dd8e26fcd71f4f37c0dc72661e6740ee44d6ea8114729e2700aee7fb8b44dd7f26eacba23a2d8638c161b8e4c966c7bc6b7b21d680fddf91f49345f507c9503b464216074605689fd8a18e943ab3563371e26425e3aa42e668b67f62f84f872eeab10054a648fdd356b0af12e28bf18606459ff6cfa62b89bdf3da76bd51c8e68c40677a8f1b5f9a4579af4448bf9cc9447e7bab4e5276d1c7aa2b3240780454f96cd516077dc0fdaec9371230af0befe2628667f44f6a2f7bdabb304d0f2fdc24c5c2d6796230a12f72029d6aed13489835fb185cde6aa720b9fe2e39cdf86924ced3c5814b4499378eac001e8bd57f5bc027020e57625b3267828169975d5fa3bebe705c67eefe3453aa2fd50e5491ab7d71dc4edffc2a2c8722f23ae9ea5195ce45941e9636808e5d7b59d64918541bd7b99faabde32217acf1dd984437ae8f11e63a57f0b723aeec33a47cc0b765d026f06571b86512eee694fda6fb5692b7416e6c438232b2cef2f79698729a54236a3b8192564e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096b5b9501456cb78c0410888845a7c4c3a218b0bbb503d0213c378f055349192e223884ecf0be578f40889bef5a482f3bcd41b81d231fdb6699343a87f7c004fef10068bb714bbcb3f80ebdfa2cff89bc9020ca99b1d3e8d934f9ed1098d2eebb394ccb06e1a2131831a0ff8c3f3997cd31b68bba9bedcd2521d2f9d8b07022f4bdca4d3ae6dd6561cf81d0aee743c3206f3188d38fbc9aefd9379ab85a68066ceb0273f1467f9fd828a311c97fa95b0e92d457491195fbfc6c446727e6a86a9f849f2d96f3862de46253009fe8f694881938f72cd1b4631c6b847843d2554c980c54ec1f948172f4e014b3111f7a10c9811643826d901ab23a630627e921ef64b3fd772a1abeaf65a65aac0a451af58ae4ba85da35fdd19bd35a47fac04f65f32b60eda2b3a76e078697ec298ea21e3da6d9325179e5e08b1d156198c0c4db4e4d42a4f872996c746e74f104012c2fe2cd5952d65a8f9a26e1ddd89a1fb32b5e534158ed98cb14410fdc89ce43f3454c76e29faae52fc76bfa396d29f802792abf8c3d58a4109870836d54ab06549d262828de654b91fc66770c177c40f435b75d0e1d2a1e8185d8a6a3a0cda1f97ec145459bb123841b2589bd70512f5620600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d2fc81d4a6ca63e46d4a30f10ea9a900df8f1abdec45dc4e341139a70c998dbbae03fd5bae8a66395af50c2033540a68b75b70d0fcd8bec04496c9bbe95d599db1096044eecff050cfe96962cd9183856d47d32639650f8c501b8a6bc24f4ecc48f5142c591e94b55959bc3dbe8fede0d768b58d7d48dba9356419895862ed242827201d952b8ed7b11b79f4bd7565f5df44f27ed4851ae4b3797f79ea6eb1df941d9e0af4b72793d5a467f54286b7dc1311bf8b14019fed0b053e8ccd3d29a1e693592fb07ef6a74153b202b35d379852af3f38edee85378a8516b446a708d8e0577e67731beb8e345b852d7b15e8247e5cdb0481e335e179fec11be502053b3514453d4bba734be969c129c692406bd2b4a7bdb84876003fb70353f710350fc4a42ede7e9b7c0179fa7d0b2aab5f500df353fb4ac6121ca03c5687e80c55996261a8715bed65263ba5cf5e8ab6745325fcf547f1afda348801f7f268a002ea39dab4183266d6a81c2c7e6b9284031e187750a0e304a5a6935fdfbcb171eedee55a1f8a8d76667f4b9e55e038d4537e1d899e2efea8fc8811b58c2f9063ae119337a16d6fc3d1fa7ce442ae6404c15a46b811be4aa436ef12e1a8a756b995e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b71b25731b91090e5a40793f4b0f5194e256a4c62461d71e016047d983457e50d3fe988bd6134a893df13b4dfb0905a3c6f61db0e90faf958b995525303d233d8cef9e7d70ab93383f0086d54b08dc33a2a11227b982a9f1bebca6787bcb0b1b9bf3e6b194951156aab187f487427788a055baac48c019b14ebbcc26f7d683391f70b046848be3ee51713b62a5925ea60bd059a8fa2756ece74e82601cd8f718fed258f212deca4809599814c70f98e336db7e50b39f27841b4576530e41d536dce78a10719b366276c3e968d554befdeafa33be38e2a6999151fcd12d7224b0ca060f6e0c19a9640b92cbf9ba5acdf5e64a398561894623396dc1beca3f877d844a6fe1a9ce160b1c4e905c07be6894e4f2179d5966170c982aa45bcd326ab27b0c5688fcb264955fc4e788c4fd10dc2f08f0717a6a86ccf456d154cc21dd518095cb59a30a8a314001835728ea898f25c136214863c4c7147fd970f57ae434aa0c9f55d62ae083542dad568675e87376cf77a0f0f8ab72995ca67a3fbc4e8f12602ec022859ada7c4e74ada199335a9762b300ab7cdc223c0c36c92afc1727e4c2f50b05327c80bd4915ab5c8dbaea9b4355b04f81608c5a44ed08f0baa5f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad6b8037248fcb014c07a6c25fb4082ea0a0b1b76b40a26f4cd182d72ecafc77fb2e0ec2dfe7e92f612961fffa286d2daa94e29c63eceae301c40ba7c1106a64e8e83935d33686f6677e97bfb768df946578da5dcadea2a00a3655565180d61a29a86ae90819bd0b09390a647bc7a59177016e072cae94023407a1dae5fe5989a662790953edb32ac38ce0232e5c56dfe75b6dced01c8cb678686adbba8be644e78cd59529c9d83ee4883f01da303ff19ff7144824144d0ebb3887a053b3417235f8c62ccc62d792b8d26a76dbc7821d9050573be1c04d63dcbd4d1b66f518e1ef89c13a19b9659592f071474e714e5c5eb910b55a31405adf98d31afb4058fb7a803e90d3b4a36132b094991562defe5a469843cb7e621fb80e0d305b02832f52ce6664670c1b2a52f44bbc30782c324f9430b890448de850118a1f99af9fb18f5390d2d7823a8c6689f85796430064a9af4954cbf2f8504a8f41c844c65c0771c48a5d6f8be712911bea1eea7fee2dba672391cf89a3ba8eb98b943d89280bd8740d98624c84d03d52a52efeb7bc6f569ea425ab1fd4e78494bf6785ba247151babdb21dd7dbe2a67add4a9fe77254c819b2534d468993ffbfe67d012304a900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a3a508a3df79bd6e10beb6c2442c9599e308f6259954d6aeae585f7edbf30bb683903abd35c4aaa29a977f8a3e7470e807fe937327f4d5242baba7b856c44b99f92d08dffc565b231a83f01cc808440d666e0480798c2241f821437a44a1c2537a5e11238823d60a73f78f5cf96b5e4394d1739e476b903b3f1a64a77150bee25dc9a893a2645168b07b872932746ab827449dbc3f71e1256d9073e2cd44e1d352789bad974448fcd5017e860d7cac102c66515720d7d0d4a65d7abcead1e61f4355c529c04deef9212425c1902d0c5be3de5cc1ad70f64f0aa00677d278cd508dbd73836534268b49a67c950b72627e0e60bbf7a9bf100a946d317a89b93ccbf7cdafbb762b9ace86057f3292528f755726de1609e575dc64581b8eb423e3383f151b3e925037b91a402effce83d7a0f647060c9bb4e77cdbf14216e71c99d3e4d4c3d7498d44c98547fd2a46e5bf2604acaf30cb422f023ac057824063f7ce176c10616dea5c2b7f8dfb3546642846ff5e9b6ac3b43a48794f24a41d34f1e8e62a9f7b4ec6edbcd0601b92389baa281704859c1a5a12e64c7406489dc508d8cec55bf0da172900315b434e9852dbef6789788f6c193966ce1475a9db04c05000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015472728aca96314a426e955ff584cef8e299bf439ba8e20b89a55d040a30edd767066326723a11cf30bdb0ec093fe6cd05511803afdbfff344c0106a48d677828eb78b22c55d7ac4cee48e407b2d80804bd59b71062dae92de4a5af86f374ba683601e4e0010a6820d63efeaa820ac3dc2910f3b5f08581fdf2069e55f2cb8ad44501249a22a4b7ecc6fae2de0e004f3143be5fd7f5fb281f51f3f00824662ba4e1e10a8d91fde5478074bd298439365023796effd67afa89dec6efcdb1c6b8c7e1b18b2dd3cc1da9f4a98a7cc5d17cc824997675a6e2a2dd351262605fd90c248070cda81e0381e80db2e94e9a722213858eb466f302bd33947bcbeb4f566a36b30170b1d6483cce333ecf0ab1a08c1e81e6d6628a4d4d85a129c76d3f46f974b5f1839b264173815eb37e74a2e9519f2cf7527c14d9b00cbff51adcfb32831f39725bc9e2be67ac584a37608e22fc388f546138d93aa88e00e6fce5650b9955baaf72d85954e7d34effca5dd9dbcb23764fa820498c60e0bc60bac482ce1b8d85827c9b8e13dd78999b83d5234c5a7e3fe29ac3261ba9788da5b2ab56c9bbb3820849e8f11de45da2a5c32b950d0de84b54c8f9c16e3d4067600ef1ebdbc1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083578c1ce40af0c79cc7de58ef6a028da0628b8536c62950a5706c3f404fd483f21281a20a25f32f9f54f03dda4a65db73688a86f4ac7518b6e1c2f903cadd145eb4e5e98754fde129cf37679495a25f9f12d937d6656ace2957ea19f65b0e61f90cdc8b242a285b4541644e4fa5677a4b807fa56c78710b562063e45c36ddb901bf3626008f7d0f620ab8f9e05e25e9b278cd3713a00185e4b2eb06ee84d7b258e5f5362632cccdd50198d592d341d887904bed8a3891ef209fa8ae34a713e1f69b2ecf50ef729b4d81331145a61342d1a0125c2d52050bea89c8d294fa12a9a3b1694bc42de2231d2729d2a6c5bb1343ec8fa1eebe9de501769296c31285ab29d47ff85d2cf79348eac5b4f07c8db41ea1a78bca501d3bf60da50dba8cbdb306e3faae62babb78e0de4bfbc3cebff708d3fd29299f5ffa303a86ddd378fe77fd2d758c7887509fa2c8e246eb100cd7fefb53945194b21ad61087374b1caac2522cf08dcfbc658c46159753102509970dd69f36b3dc70d09b47f9ea0f11aa41d791c42b4f441f91539b3b5b119a278c8de7bb6170a8e7fcc7c6ac499be50c1c4effe7b434f2f920fa6174d4e622fa5c12c0a3ddef636f2e1ff92eaeff9fbc0c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093efe3d0e11036d7014d51e0f5ad5453ef54d5716ffdf735b679e4bee03044718458f0cb8b2fe9536baa5f747cb4dd72277f4b26b60dba241a36c6b8a0f34e1f2bc23d3a37b1b7cc0327b5de786357d731feb449558685f094dae6e131aba89caaa5b6415c7619faaefbd92f9ec5d620a2158dcbc6a8785c5e64d2edbb0f42875b26e30a7af63f025929801ca0be6165e66f043c54dc4a52070911a34e93ef103fd070c980ea5004b6e432f4677251cbf72374e01dd9f59d224a10dc30f78092d59868f38c44e938aeb2dbf74f439ba0f205d4af24f347a55887d7f26b39cfe099196b8fcba73ba3b365d5fbe1dfb76489fc8b9a9ebbbf102da012e84006fbe46cd1ccd1532cd1e9e0bff0c7f9c3f8127a0eff73179adb3fb7a36f141cf8c7cdbe788b04c4065cc1c72febfc71b75ea5ee0063367e66a87d9370891880a0cecd5c24830a8a61287c41a4f8d9e982552851c00884650dd159837f56f4810eca95893781004eff39b69f0dcfc2cebb5c3d14ebcb4f3bf11fbedc20c49a180087a1f6d21450149ee829a9d61cf1a793fa88db26f4ec59e68e9c71d4e2e6766b97a5841c44dd3b4bf25cc11a8d8600e1984576d8f319948fa7312b7fad4791f923fd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b401495e891d7fba6034af9acc9cf1e9e09b9ae1ff7cb34fc6374e136465192f8d1568a6f1577d9f8700967cab968fba63c720d534025c6f41b265d3d348fb88a7999b39e0d1a6804218ced14d3018d761a508779e79ee3d5b1d101d8da069feccdc6f2c3cf23e2fa9fa3655dffa0a8b8c7ddece5a751ab40b3fb87eac03717839db6bb57fc84ba4b22654e9a98bb124a455a9fbdceef9a16298f63992f7dc34614c664a48c5694d87c6cc165aba13c720c9ec2213ddcf59151a97e01e64802d01530bc605b7e24259ccf1da595cccf564d7f8a2afaf2b495517d95183678789daa65b6f961c81249b85d1dcb3fb4058ba7945e117721d0d61335b968fa9036d290b3589c5641c6e2cc85ad16f3c8077ec4a656e983ace1b4540bab7a2d751fa55664de91e8764995b274bd3cfe7d1e5b81ddf7e707b97e23ac30e7769b409c6731105598d6bb5f36c8f0707564b02cbee4356b4663636728bea22d0133d02a2012dd709e90ef2bf78fcaf05156465370ba88791735d272c51e67f55e4a65b4db7c021d66f7782be41aea8ac0d71df1160b25ed49ca104a40620fcaa6811eaf9f032eb871c45161f7dedd0d87e7aeb79d0ae299cf842e568f6ef2786eee3ea60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000235cf1ed89f80bd3c53b036f0f885fc92eb2017097be7b5334f46f33d986098517a3320cef212c9a5af2d363624f0f8724ecf611829fe70c21efd64e6f7b95e2d8f117a69658d43449d438389affa5672ad8aec162967042e7bb044ac3595520f8799bde7863cdda1450717683f87c89236d7d96d1d5a0f118720877cb7bd88af9f5a0320332cffe8c49a05adf5634482d953af93a61b28c71b7fa53fff3b031637392ace2d9183cd7d73e0c8f6e25ca70afd216adaaf56c91b7aee2b9b42d4c156a582376009b431c3ec6dfd125ab60e2230dadaf11035b4607a0b9dba23e2df053fdff74d41e3848bbeccf0aa10d89918483109699244385a023f4af9e242c497287156a5784cdeb5d642826dfd2271c02c4bebc282ec1ebc57bfc998fd1c83378843f7827165ca65e5630dcbee3f4475dc342f0b914ec5ab8fa767c6cb5806cdbeec75833cbfd658a5e541eb2319fd614fc66d65153397872e3b483d3c7751d0846e45d9bc14a13e71b3890ca109b0b2f7921fd681f03f5bede6a814edac99a0dbe9ecacca3dede8be533c3769505c2d0626b8d51023617feeedab16f6dfdd7e65992bbf0ed4a449588628f45d1e3848f5d6c45037d88366303c77732c10300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d80a9279313d263ee9ec52d66661f76ff6f020f572f0f60ce2b51cc006a205d8c0af3cac9a0b93a537ab5aa8966ef58a8b27b19aeb598264f48e392446a7d7eaa878a64be02c5d79db452ba0974261310dee5d3028a3699b448f6badd1eef9f4ed30f5d36e2ff638a89cac85943c1617e5cbd7d595a1b44c888f799742347e4db9b21e7ab18dc53b6c6e9b3195c51bce13eb1863c861a25605c97659627cd6043a0432e8efb6b8ede7b644ed836099fd99fe1df12e95fbe7f30f025e7a73ae1ff08a854e8a910729d8f8c2df7bf4ef54b2de310b3e7f995f063aff5ffb1d2d08948b43c7f8b4412b7e97e70b5ffd383305ec52ede45248c82764048eded9a6ad96fc3ed22cdc5d5db2f84617e6a5a3d3c37ce1cb322cdd9456e760e5710fd6a1c7fab94e21667a6d21faac845c3aeb5e4d740123c5109cee5427808dc30764781797e86212a5c5008cc47a4bceb06a3742817bc9029efe16a4fbb85ad19a3771e7bbc16d94b40407b75e5436ac8967fdd07611eb4ff80f5ec33734307b8305bebd641ea69611b529e254c3190bc74e549faf0b294d538fec50be445021d5ba27fc028e1145e7fc7086c5861dda9858fb147644efe95f1d5388d83625650cf25000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025cb2f1d57e5c902ca8842525771283f332eec67e35ffe09154d7432795d9bca5631ed31a94d4de3eb9eff58ee5193569634325740a020005691174de5890b30519bf46ca90472f053bf3200889fa7287e14dd2e6ffe6f909a5ebd26fa2af3d3091946f1e41c83f1169cc7852584e6a9f6e804af7310eb93fc1f6c50007e52172d62fdb2e049809cd40ba2982c9b2d613d887b9f832e6447853b381da124d51a9a97a4b2c47ba4b58caa7eac7d3f0ad76e37e6bd35c683d71b94a8250cafeb5a25eb31283782c5036eaab2991701316e4891fa7bd5f6ab170d22cc1b127b55ea73cf867e5dddcc1fe98d2b63ede36132c44d6973441a2d164df32bbb4896ed8a009281c646ee8711e113ee3b2bd391b09e29b0f28cbcdb653706f366714e8ffdb4a8f499d37ea754c1ba7106a00b3c8f2770f7ed46b11f59f917dd4e696b387e58b6a9b447838a808bec534816f57553599bb4586987fa4ff569407138d134ef7ce357794abaf9f38852477fac50d187f6ad0f911652e82cd1e4a5828e1823de6544c3c002f40c8652b027f7b076d62961c337977d9c5a8cf130dc72031e7ddc437c7e32944f977ddd0693f0b0a0545c4ec720fa08bb6f04f5665e41d5ac3ae300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f267d57c3706aee657ad776f91cefe62ba9ec50d3b1f409500fb1b41937442e9e5db5f83d370daa6ad43f88f74fc6676dfa3e6dc5717faba0608750823f0570df756bc69dd2d3e5de26a33a8f7734bdd834a074ecb692d02c3398b01b5e40d539b4be96e2f70b2e8f18c84a6cc250213ee22121972dfa1cd84519b8c0b7ce9f2029afc6af7c7f4f69489084291120c15e2c9cbd5e8445992c6bb9ea611cf7906acebd0b3bad442a39e31e9530e4456c994704b355413e964efcc2edbb874a00da99035a31b251f060171381221604d8ab518253ef2a1e1a11f7a3c25b2a738787bbfda5ed9557e9ca8b6f13480aea4a7bcb61f4b280ee6aba171d356f84744bbbf4ffe64fddc20a42d10b9e4ec72dcba9d8ed9fd3a4243cf64929ee9a6dda1418e0c6a614a1424816447fe293dd0d0ce0a9390ee5a53ef7b8598c0cf1eea41c8138919a0cb6cfd1d13dbcbb4b094ea2ff117240b7f636b3482bc29f3062299b2067f98a4f06863876fc6383639a96b1d583c1056163bbe6d72d2e6a42f46deb85cb5dfb83a824e9b7fd1fd5143c1d196e87cc703067fc41a0dee4e41588c3df8324c721c0c47d96e20a7f691810da869f2a5805d5fac388834a8815676d19530000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa7169ac4a5a84eda81ba598d1fdbed0836d2e39d98fb231982cf40778033bbebc3759376898d4879b11165b396048df347af1f70af9a2d33ff3012d524425887d4fd43250aa125fe847787eedd11b51f3fd6f475973d66f8cd0930f100b310000dbe5d22b44d7f804f42abc7fddfb8e5b9deed5c12d2d5a6950b4789c7935c2f0a3a63e49776066c582ca54abb2b9289ca14109103f593d09432be9f561441c4efd11546d812993a0d073cb3d922d73dad68a6b1fd106359ec8126acbe2dc77724bb1e14a90805a92043ce62dba0565c5d7968ed7d89573f32b473d908ae6c6d91ebf081f9f37f143ac1100545548a4e701b73b3dd3fc41afdf57f8e6d962eccac3d92b2263f864d08ecf25db0410d47539c8d708ff4f157980438405be440c952bdb1baa50a94f27b2bdaf3d4fcc0776011d06f943d140e3d79322ced448b6939d2b90a2abb57240f596df7fa5d46dff27fa1e9a8c79d2b5e965963bcbf260e4a6636fe0e4b09ba6c443e3da5bb66b89812a0e925de3157332c69d1a90914e9e1af74e932f7a44bfb04fccdc7b939ab7b643dd976e3e2336a752be94926b8c489d7c7c53091e3deb8e3120e121529cfea666610bc4c89c53306c82d9575f5a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f1d58b5e08ef9a8dafa92c8f9d570fc17be91c3d7b0421b5b8afaef431a5f228f6a5efe2482e424f9c0879a41d2b7553900454f165af22b5d9dc8babcacece162d140a74afa36d81ecb5db8c2eebb685fec850d0d916a4f53f7781405f177246b43378e1a1aad23e9411e95d700bc8a3d70f2e1a49c6ec45a75cdd1ec2406968771250bdd0cbab807f7bc385c2259f0a202e8b74615c862f05d9b35489ef5fcb5dc151c6513d2bebb89a45d7aea68695edc519e93be3022c1a253e5a387a482898f469ee5e738ca3727824538197abe2adc33ee5e1db7c265929e1b612bd2af4b645d486bd7b32e781096b2fc2ccf030bb50e50b3f2c7bdcc621a00df4ba4b4643ff2afe0c5ee833285b422159b3a1f18f4c8776845d9c3e7bbf5f7e65cb957e429dd92d2c2fe25f2ac601e07dd3231e859c9a5d7028fc7243e4fd0b41cdea0cc43f9142b453978b920434a14282f35df726c8ae1c146751d60a446de81a731031d182c583a1abb58c40b6bc78c5145d05b3579175ceea6633097e5359e0db8876a619a2e9f6ca2b07f3b6b6a90f1c7267aae3369e53d438419dc6063ab4f74bec66e7303a2aab621add493818da56fba1954816b09e38db8ffc84075f117dc000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011f21fde1df965433e99884f76aa6772fea7398795116a3ad6489c8144a2a5c4c1d35284bf04e7219c33ea5988b72e98cf9d85816256a9d9ff996f20510849894fa9bb69ccb78323b98ad23515673da5f991260d7a099523d069ad7e1d2f524a105b2dd9293e2b546b1f802c77406945dd02b78322c46a26c255ec6a51e4c5c0fa00010accb85a601ad79c373eda38391226409366d332e20c46063a5d0f67cf37fba1f52bf28c387e63c06a2e5ed63829bf7b0700e7071df572e1a2abb558401eabcfeeffb1e86bc591ddf5297e35fa2d67c725fba04ae6759ed1ff8a7f25c4dc011f020db74bc1b25f5e2b92b0e3dc3d12c4ca5fa0abca65fdaf6ddc2b4b4d1fafc12027c186fb080f290d3c83d0b4dff365cffdc5d077b4816a8ba36753ccda87a170b4e9cc1693b107f8b4d950fb9930b36abbdc6459a40eada3880dd032bc0411149067e7d9dd9088e0038af50e88fccff1eb378c2cec63f4ddba9f16215018fa820183f643ef97bdd0f4cf680faefd43f4c44d931861b299ac8d82d30c00713e94bc7f2631d1502119e8723d1ab7144ff28126d199f29d9255a04321c97bb0bb2e5b3772ca7b8d9df0d29f9d714e1824f2871e0bc71555274b625e12b300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c678461857136d21ba70239b67754404d7b82380f127ed67b11b21e9007af8073809e936cc88749897517d36140e1a3f1116a276b61709d9384999c17340e02d2346bc95eec89a6702a8532c066b0421ac93cd16877ef251d874bba0e39cef2d99a9e6bc59508c23f754426bfa882e410d4f53e5a7d437b3cd84551c31d39f58ef73206caac8b0f4570c49d35991f6f4c147bac55f91a7e9b3d4414f300d40ec8d2e8116102f0f74e94d701635f35b50517497c5478d4bdebcf8c14535d1164048f5602e01365fc315cc8daf9c26bd7a75bd41bee793cd27cd8bf6dbd912b5cb7c46e920e4b52bab71ed8ef1d15371865217e57a584ac3bbf4fd2934092eabeefac5e5b8eb0d3101266e475f1b543c6e4504e3d0a5d012c48f1d1de2b86030ae9ce5a7435c4fa1acbe26e44da4683a885922bb5d58a0b7024555f17cc171054ca3889dd7d3dd385ad11c87ef2e285bb5db5a6ead1c3cae2c41e2d0cb83bc0b78af1b267f8ac6c8dc7f15376ccb2a612c16062099aee82818ce3d4239dd78a3c515d7eb6f67c2196eac3fe2c265ae90dd93bc20d7ef15986a4d66231e9f2502a2251a81a18b1dfaad1b73da605a7d4b81baaf4741168a0825badca8e7fca6ced00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b14d6cd220977f27f458599d4f43b20e89d0d765dd172cd8f280bd28835a00a17ff345de75d281739d6bef222e533a7b2e97c973da611b8f925bddc09e6604916803bca870d8173d0f6dcf129dc610b776deb5e76f636a110731f2f046807959e09c8d94ff72e2e94e1b8233677c8d5e0cb05e200c274a5868ae739868460c814c3b0aa0ba5cb851ef542d5219cc75c3cccbcac31425a61b28836c1af94e9f7fc726dd27ff075019effe447e6049a6b1fadd3c4f8061755cfa55d28ac15f9660cb172a4b1dccdaa5cb43ae66da880ab89635a9b34bf7fd99d560795f5a2ba0e854e11439e3ea99a30f26cb6069120616d58e7b83917de74b60b1dd5bd157909769a03271310c58cf48b0290dfcc3185258ea74d959a6c9abb99be43f80cb9896edffa0da5226931c0e8d3d8a9930f9297caf872a8e7f3939b3174e03df70fa58560614e366d8e1d4dfe57dd6cf572fdba6ba95015c639e69049c47d49cf28b80cf84ec0f86b3d9a6747051005fb1fe860d0fc10c1fb029dd8a8ed9157177930f1a317a14bb6a2d6b251b1f74a8f793f0b40dcf1894554b9af11c730856cbc5d6cdda6a44450e82a085f73edf05e26667a25b1340d87c8e7fff4ed38b6ce961c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000887e8bbeda60828cc67effd80fba0722543e1cc8ee2d17f4e892d1e391cde7fc4415d9d7c85c1b61db68553be0ed9e1246e17547fc9d2bd3a769bc3e464371d9253bf090098513bfaaf4e2cf7fe0b4068cfa8281653a59fa5bc580110e39456d74c637e1b20fe0d4e5c73c73e6394797a768e332be2cd98f3ed645991c1c3f2d7f5c0f17fdf6b9144d99a319e8ab14883b87536b48f71c86223ecab1c2bf8e6759bb0febc767f21808287a9ed6adf72738057bf15902bd64051b87de915a399643d486b1b789a956e3a4d5a6e163f3f178c9c3aa3c26af357c787bf97c3a2a460f149bd3848b84cc56f573834b763b8011eafecc99fc74bb73d6bf61899e259eae5cfed52cb2d41a08c037cbfb10097780e1656a0141628c6e1c1f1c332432cb9825b085f4f7835441f730858632c2051c99d779a5d8a07108dbc0c094d137b21b5672be9a378f1b1f9fbbd7460f07fd341572090b7e4d7644611d6ba77fbad0511334d241e58aa99f7df7a6ed13769190a38f0862a10bdb9654f73a7c4fd75b7f81c5f6de2dada6d760fa2192855196cc587b1a07c9f319f2fc4674cac622392fd4cae91bfffff9de1806c542772acce9b69cd69f373c8dc9986b1e79c2c53000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e205283b6b9e971de7b73134e68ac1696fd87a390030ba6f5fee9bb8b4a1e05ca2507927841f216015142f6ddf03f00949c4595a8967eed2f16ea1e2fe74b3b91c053bf2792a992f4f8a15e1bd9f00780b7ff2a0e361d59022ffc7afaf934fbd7e93147179dfd8a03dc84dcd0d35ef0b80f7dcd21cc6643801812b2b5d0c9da45e2c28d7750064926a30c727ff69703958b907e11e462f2fb6da884c6312fbc3c9c5c83e475bc925aadc7b793757ae35524f44d14a5107bea8b52467cc649385e9818646089ed302f644ea10aee9e80eb14cb16ef49209ef078b2551074735f2fb274e59a608131ea2454ec30d79e7f4b2d50fcbb72a5272a5a975cd20ef98e3348c2f8d747426d2517c48e2e01e67ff39a062e2b16df1d3fd12e03c294b91c76a83c8dcb5cfa50f0024dc9c4f152634aa8b09535d1e89206cf6147312a94dbb0862df75cb0a27edb1dcf0ae74c3d64f91ee8f987428635ac97a3f78474c07484c15f4ffc9be0f2d53446963c09f68d146772666975b79944f16d0d7b26969f4f3618cad9c9a2eab1cfb7d9c3f6e5cbce37191cfb0640baba855c828b37bebd456e91b04d96789ab808a68efe5fa6baf77abc71d4f85bcc7d467b9a4e5882be00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cf4d080b64cb4fd84a3f75dba2365008ec550316926b6c4b66bfa3bc194cee9e732318b31713304a24127e9a457d82b294a94d19e3f563831cbd48862051a7fffa21cae3191a97c56eecb5ce4b14ad60f0ad6c05fb7aa809563a6e3dae9cfc68673ab7b673ac240b037f99fb5788d275efa78255fd462a83d3a9931ed9a9103f6b93eaff02ce2584d4847365c8317cf6b6ce4f8560cc04188a161a7794710b611e02d331499829bceff58dc3233eb88075b93593ef11826dcdf40964236fe83dda284bdf4e67bba9f56fc88703a1ae8c3b7f985f55712100c890db398eda5d995631ddcfdb0bcf4f31a2514c891d2045c2573b4e70c549ded069d3e450547dbff14a5153c61eddef3b3d007ec49be059cab8e85ea82db8e3a664bbdea5d5f8204cc662da987b48f81627fba7b940a9fb70bea9e95278f113175c6b205e53898f076220d21bdb23c2f87a9e51b58f6b67915af392c76b1f92e870a19b6bd50f5062eced60804f8c63bae433e31acfbd8e621f787cc99ba133b0567db472cd179c7776b90862d9bf3f0fcd57803821fbbe339bcca7001f30b2e175c46ad0d14d4556954dcb771abed5c95c5d6d789d644b3f40a0cff101b76fa0801b2614264200000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a45592e286396ba3a66a536d338c9133a022375905cc8d169ba6ea90c2ac24f1db9c5f871f4c5fc582ed02f362cac41a0468a9b490d034866b9b3bcafe6cb349dce649b31bdb31618d56edfc7ed0f540c74fe94236432a093b440a0b77c16f4668b3b944d27818cdcde1bd926a042af28ce8d001846917a2c1cd9f898c9d8e817921d3dc9d7121474782e61704cb374fbffdaa4871cddd33b62b0d84b31bef2e1465546f66e9d12ade5a50f207a07b6e63c34536afbcd8a8d8c5e04e121346429da37a293ec1db4e187a2a1d2bc417cbb90264113e2076e19b1e40834a5ca065552e3ae73e5a71c92d92f0c5677879825baedb40242dd7d90896bf41d758a78e7c0934c6dc7a8111ec4ef0f91f2099d26b1eaaf1953fb716a47bd5c4a74769917a6f0064e2eab53e92d8b82b3e88c79048973fdb82d70af160779cffba3de6a1f0271cef141d29060130d7b0ed69988fdcb69cb288334e929513c53ccb4d23a7ad3d384bad3962523d4c1900e00557cc1fa4e149f9c5c5d87347e41d34be117c565091cee802279be29e3949c937ec409316ef37a88c948380c9d23874d2cc96a5dc4b9f95f0cc330ae5849add762ff398c472f1a56561f60dee735653657ec700000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484021e2cfcc7534e6ec580aa9bf99f50ceee674e43c3384e6edd17c4522734420312b984e45f6f6b00739f98e80a0820f3b7ea0484b0c6b50b5de781f2f9c485d7623295df4c1a1140387bc2b1db230136bb3007644ec5efb09427f2315dbd600a01e69ee96843353db6519a473fba59f8ba9e53eebd4a1265deafa02327bbbe6152175dc0e77e589ba564a19b5fcf28e4ba08f7afc0bd1c4e71664e292bc0b1d671084d6e0c2a912df8e991e5446eaaf571042f41ec90bfe944c1422f96b8999dd1120ee3884d7f6ec13c7c49a4acdd8f379124021765e95c81dac2612e1335f4b0154a5f81a203f79b57d0238338b5c6d318e397b4b8ab0e0524e77d941a8d00c0366cf7145b40bc14acb5c38362ee7fb8aa1889b60de8e550c842dda0ed7054d00ed44b809e5dadb953c2a778118198016fd7abdbe7babf2148743be654d59650fd4baa1f9f1adc832b926509a2e186c9ff545e0e02a6eb6d93eac40d359a4bb1b96e6975682ea43537985282d16fe5cd67dc6bd1a9841befd43f15ceeefec762918505153130d3c61a0c0d59351b292f86f11904e40aae672fe4351e945c510058ac315070560c80c5c50e8c1f7555ebb2ce4248560f6a2f1fbf494330c02c912a76e2ba03f39f5664919a417fe47662385957c420acc0636c33b7af697bec519adfa8dcff1483b6327b33fedb8560876a3d6605cbe61102e600d891932b1130d7cefcef311abc92cc619a9dfd7257645831220e634e02909e6b3a5c1bfd4cb2c08ed9658db45b3d9e74cc986feb78aa50a90374897a8d5be78efb62959d2812d7adecc9007c37d7ac5698fb0ccaa498475f2a79f09fd91fca15b28a4a18477096b952293f68ae87ac43b1ba6fa03ca3091c9e0d62a341ef71ef869db322417017f2c4fc450f87e31da92eba2314d6c2dc488c3dbece99e821726d0c2a32a7714a2190f95fb71541d080d6dba6f73c9e1aedc9a3770d45860dc6d8dc5de94761e51394cfd84c563891011b5c0a9befc3e4cede4885c2c3c310d29c6851b2d3b018a8288cbbb17b3fb40f449552324286794e77c9ad2f76c3a8341d61bf557a61715dd1021ae4d4612f7f873f42d26ddfc6efb0d13992b02ff5c3f1470ae232521abfa1b541abe0f12f130982d45b306ebc12915d2eb9a958bcfdd5012993d0214be2ac4c7c2705e2a30ecb096f679b656607cd0af704f19125279de9a31a6db294609974d234e52c49bc363d89a40d156c41e275d5f81ba4209d342e805b661209ef776ad9dae49b623e9023ac35419eaa017c96fcc7570a7001878890995140959072d154ee2eb42c7c0a751196b393fe92e127ecde7500d6822b4695f6d042234d886c7a5b6629d959796d07d32546ab6b1fa90a08c4d2931440fde9385cb0dbf0eb6e919769b83359041018a1ddbac4c3b1cd552c84eb1ea594a5e060e2a0ad3615f0c1b1cf680844ffc65401ae774e3d9d6c0988a62cde97c4d9efea30d21b40973ac1cf479ebac6bcd596576fbb1fcacb3fe7370a2d5bf943d46929cb614116614dfb25045d809a845aae1e8cfea137cc0976f6f24d22be9bd27b1fd160b9549c6c1163322a2d612d124c8504e2b52e200b3064890b6ef6734f071226a1e459574a1ca6cf75ba9818ca4c386a333b7a2008ab118648fd6f42ddb9502081e884ef3589009b8d83c9d0e1df6bf3dc987acbcc269127840663d4c1c8bd24f265dea0319b258c4e609c4d2577b1d4ca4e823dfeed7e89b2c4a13d9ee968df80219eefc4f957ac8e216182cc9e990fbcc01b9efa1396e9f2f8ea09aadb019420b7b99b5d17eeb69c4d5b4af3c724e7fd2f92a9c1f63cd5136ceb310372166dd1b0b2ba3bac46fb25e992a1b8c3f73cf0542efd28780e5aed3610dd7dc384f5805e90c1dec0c58c4b45d7812472b550b7355f3f1b99ef85505a770b9d579bb751f359e5b98ac9fffe63c32946923994f9b989f08390dc2d697db18034994e6f724fa717b41d02e480ad40b80bb1813f1836a6a506d4fba0c2db835d973d02e5814c77179ac847045f9a12a605344f3f6f7563044721503b91dc1c4588f232a5d1fee761e6afce9f9dca80a62a7519e261be407611c2b8e0631ed62929dccc7d60ae69639548bf3406a4432e9d78d1d54df958f1b2b3d248f9c6e7d26f408069c24a41585699c3d18eb54d9531b78b0fbcf5160bcd2cb72753c45f80b46bab3e929f780316140be17fc4cbdb5b0cdc071ddec93b5b5b7052d06dcb3fdb9326b612e8a6882180ae4443bba4a49c5de916a4094d010bd94cb6fda084ea04c03969014282dc3ebcab2bc5519c7b4ac8c0b4c0c46eed51c555f06b9ab0f2234d66f9b20a810884ee985f4745f56bfe0550a78637b04dc07e53cd6daf9f8de628fd4ce0260be372b903c8e8cb1e1d31e64dd9f7479c08ca7885ac1198d651181bc90352b8c8d42145c1d5b2bd7b99962614531fc13ee96eeffc192b09fd50d33c1858718b455cf726ee24964bf8a8739c78a16b9f82c1db93d65fb091b53540f3f1af71eb2a4a8d463a47a1441d689390437648612e1e650944caf392c2e4a5e544ab72cbe8b22a16eb7effe1e5db599d9dc12afa800ef2a2404d2c7ad9361fd0059690a0ab73dd65336bb21ef0b5a5ea17322221ab74dfda49718e71beb67217632f1022bd4406b4272bbff4ededcc1d5569c36b439ec06318274bca2781557e82a1310c24feea5bac5eaa6caa8b91c1a9b74a7ebc8cf2d0857e01ae0dcb1142b2f7918c0ce5ce836493df30c18b75c4a4f8959eead0f8eb06532244eac3986939a302782563a8f18f0f5c2754ab84192bc9ae67c1a7dc0eeadc994f849e68f06209f1a9025c958143d1a6e5c905c7257959f25b95159a88c50571b6d1043f08716ad40125cd33affa1170acbe216696d58beda0227b76c0d650dc9dc6679bfb6dfd878128fb3cd043278c789435639d8d9ee294d5448c2cf5fe6146b945a3991750e3e0fbc1227bca269e23dd4bfbedb47addaf1168b43d8d179c54ec2c0d2c69785e902deff368cd8620b8df60f493dc8017a901ba1feb8d433e431e08a830ffa33c723a829e5de44e981cd267e7b014d1a3bff38c4ba3ad1f001125bb57e32de6a630b17116abfa04a2657cc032f1b4b74c191f47a7efc3c32db5fbcb58147fa9b801e582434ea521c98b54d8fd3f12749a61cb3e99f5c9b10fc4183b0d4b93502101ba369f566e64029cd7a81b80a15408faee44ccab2b04b85028343bf07e7c84120b4ce55a046a8f1eb178f62b3d3655c3e5bc8f7c76f820bcdea2da7dc631e791c70dd852fc5472cea245afdfd4106391e955fe8a6f21b6344f5cd4a2c08b5f02d5d5d34b88776a1d2cd06d7d8bfea6d93be496c368ef53bd887339f27b070021e57fa7ecad7275dd332c11fa5eb7dcb611d928fb26ea7670436919b1819cc8111eae3663456ffd4ed75eda4e5be018ffb4d3d52ff143694ad69fac58f48e3f72ddfd056313ab410061cd6c04b00b8e5fbe181654640bc1f71098f1805c6e0800505b0aa4e0e82d8520c4ce9069d349a9f2157db5f4d879ae0136793dcc7fe3b2dae18fec91212439a04a62ada797f8efd65d5102e104f24392b7bf00747fb120754ab8abeae2847e30f8924986f03fb8aaee84ff770d16dd3427af03bdcc66e2ac37e3db0763dfd60d16b4762768f23ca4ec63e29a3a4050fd7b1f6d2673beb094389f26c5c950ce8d9c22bcf73f50bf169d2a0032bdc0e5791310884a771c70c2d32301867650723b387ce4ec2f78bc1e4124e18352a697e87b81a5e94f2c32af975b85a2c8d6dd250fe339e9bfa69b48daba9f522d0dfd543be7591abbc792fcbf837e40e437fc32112d574845ae7ef8655d91563058fdf5656a1f096e21f1bc9b37f8217c27b7a19fb3f48ffa1fdf3bd5c4c5153e16fbe5fe949eded2243200d201b3b88e1270d81faab67cfe13898ad2743010deea51d69354f882924a00e3a570c00d169bf25e1ebc0f59e6a544b11c74a633deb755c2e4c1ca7a65e5f0d488ad34c595afe4d2c85abc1d134fc390bd7eb477396c9820f99ed45d903961de4f82050a2289b4c1d98def084d4fc2240adcc0da1d824762139c95b606b9f1ff38525e644b672cb88c1c2fcaad209bef6c224a338fe1e8a8cf9441320cf78057aec252c6e34c373d55d46c2b324291fc2c7b5753d8bcbcc998a41b637b225051a38864dc5f63343667c54fadb3bced4969a05aa307561b78e45710e990a1627438a71060160555cb3801f316efac6d926aff88b315987966cec2e29947d1806668dd73e48cca0a3e45331e12edc1e0378f253b26574a55ad5969336928fe920fa643e58ede30c34ebb2acc7fa6ef4dc5f024ed8603a4964b6d2ce5ec8b9d307cf57c86b87f129ba9cdcde9bc7c73505685c4242cf9119204d165df6f2596d1e0e6b7ffdbc7f9b96139d970c1116f963fc45ac0a19b27d7c248561452ca077258640ecaac9c14bea57040994f72c03e8220e53afe8aa515acb1c2d9d64e82613d76e18278e4921383c17929c7d8f2fcb53c36302e4a6c767bf5a2e41272cd9024bd35c00130277eaebd1f0fee6eb2e912b9eca587a3718e16ef8e52d39caf90437084a39e6869cd17504d8542f1d3ffc35db52caf47fb20ff6d618f73779a70b4cab0239c464a2ae2b19e3263fad6b96ce614f6387d734581231c1476370170f1ec4b140c8322cbaa14587673410ae4c77ba2219ce625ad65ea6541e60da621d0013e89601c50b2e8f41efa25269968239d9ac096143f89b0b29d799b598ca020b9d8af65997565aa7cffc4273f4978c6e2e599aa9d4716609451ccac0c8271b459371db85453d772199ee05b0ac5b416d6c4215bf5b98f77c0df68f5d17ed2ee607558ae6416ab51ab8b923c74483f198a6307883baf2e8e963100315c648298348596635f8904d502a37db65abd5371f68a831df3f9c207536862745c34721f7f71d13d63cde80d729b0f68b6394d0444f69005654e09e4faddfdd537b6a188e9f54bdcae8493bdd202d95608825eab99481f4217366a81230e7766379be212abcdbcf31a15a57aaa05c7ff42a6bcec0a52c41259e9c45886487042a2a4104b1220573c4fd88972b3621e0aa3a6f415bcda05062e5639aefbe9c06f331760f5b697c37cc61f0b7d9fcf60ef3d9d0c7cb6d09df294b188b6b677e7209283d100e775ac31b3671407e522450c148f6fa557cc90bab929cb15ed95df77cb2210652f4e2ff14726ace65b475f0af4b365a0f8100f65b6231c460e328495e569d0c03ad21e69ac87fcd01195222710ed20779c4e9ed8e39d62cc1b83e030524f211415e9a31cfc0fdb84c6223b56142da533d10c72f47a83bf4f04ded6a48992e14494fe9a2bbfaf0e8ba2a38de4b992f29158c5e7d874f530b229f3e79484d3b2d026c22aff3059e2929f2d3f838a028c2e193f3b1dc9086648ceb859aeca8ed0d91498a46ad2c8a231244b4ef6937f9f1a35eb59a76a424e30915c7a6f6b54509bdae3586fcf054582fba8c716a1ce16c2490f2ea5e97d5d56174ac5c90eeba10503740d84e9d8d8f365c88d1050969e5d43fa6cf03c2b1a2245064de18fa630d19c3ba426693dcdc91679e4a1a2339b04cfff779ac0e79a1d83bf280aaf20d0dbc2483a350ca19544e592a0362029c054a98f8610cb82c8fef206bc33f7ec21d8d41042482508cb5244813acd20109f47220e6b582bede1a8db6ec3a63f47f1cec73542009237da2ef94ef231be27b91c03e25fe0f58a5d5573d7812536a45003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000016118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000160d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000160a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000160b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000001629a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000016141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000001625e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000001612978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000162daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000016189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000161159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000001605ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000001605c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000001614d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000001603db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000162ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000161213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000161ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000001614fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000162b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000016305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000016280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000016223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000001617a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000001608858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000162618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000160f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000160e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000016172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000160b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000001605bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000016137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000162e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000162297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000162608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000001618373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000160422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000016204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000160afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000161998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000001628d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000161da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000001621d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000160ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000160e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000016107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000162f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000001609726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000001624f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000001603c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000161fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000016205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000001625110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000016283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000001621cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000016094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000160c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000161f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000162421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000161fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000161bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000016304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe500000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000008100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810400008100000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087494b14625649826c9555a774ed0250eaa1ff6aa0a75c1d9558f83a0d0747471a58f558f7b835a4d14824e1414fd9e7f280d1ae4686a191b80e0129f0aaa2828f74918eb1022671b3d29e06a46a5d4af98c0073412b8d371e355b1071d94e241aa57b73cbff488a2d739ade653f0b409d440af3c56396f0a8dfb5e4501c63e78e7cb53d6cc7bb21e4e556e751b3b3bd802db463ebaf8ee6adfcd39c83e48a2bc27625730f0acc39d9016b8f868b936ced71fb484f13eec96687bf4ec035cd80b719db0dc703dbaeaeedba59bb012641a6f7b9622a2546fcfc1ef8f0f661bf382bd1e0685e18101eb0b5035c629c0e6a05a2e7e1c117d3010cc3a05e6c3fadf0e8a5c0efa0126610d929824e1a65a142ba4e005d026f81da576bd76e36886f95374f1bcfa4e6f76840a4fd34ca0a2eb77989301a94ee627f56753f136db98ed149eaf3b30943209baa9659fa12eec1452fb7a8f53ff66091c2451c03026b2aeedac51629cc441a79a4f1fbb67ae25712b7d38bc09041dbcac9998bedc38d6354cd15457d8e7f4b371277988dfd352e651cbfe24d15c24bb7a1c88557847219ead820f5af6ff03c318282c093f1ad4d69e72dee13a206eb3a3c8760691307f40c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ea0039465180db742e81335eded835c0f76c48f2f22804f581209d4b6e02afafedd4c6afb0b165d7687d688d33bf42b4deb8bb5adaf928a0c7eec28d6809811102a1b557259920b49a2c4c5cf392567b6fda9b6776a52d673f5f0bc6a632e5d34730e8098031567a6dc7be6fa286e3d89ad76eb57dce8c0412908cb0e82f1c1b6c2597c2104bb2ac694692c93ffa3c82ee92cb0020eef12e7bfa93477cd58adce4c22afcdc7afb9a1632ce7b11ec9a7e2d8fcd41b6c975e2bf26cfff3cf6fb412dc53638cecc403c702274230b035391828058f33b4ad5d51f360a6549fd35e161acbe3527f94d5d89cb074cfd4dffa9b39e21dbc405d90e3aeb42d33cf54a4e0cdc038b89ba67f621df977efb08cf4b016deb3a83460cecc374ff465c5bf3233ab8d4b480b338e547de015d5722613a72725bf766a2fcfa72faf31002761e210461a332132186fd896ef26a078338b5d6fd0d34095445343b0027f0cb4618155bf98c539ca09a8ef2684798fe789bc90320e2693fe49e0d932879d5cf65e3caef9d72f5fc8de57dd4332ef0755d2788bde86d1d1a44d2b5847bd33a53637fedd4f1635f45c79f8d697fa05912427fbff2899ad581019999b10f85c6322b51a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008bbcdf415b28f21794f86375227809b007b9b5434e10bfff50d97210225b5d5247d938a0c569ae2db0570840866ee18b7b4459a05f48d30f86e02758fb5a81ccbb56cc26642099dd1c6da23177677102378c500f14227802b7564cc2e29b2d560302ec67b6b6b8fdb171109bae698f44f63f3999e030ea6c5087b1a94bea58434725774cdc80cb6766a3ccaac0a62df2d0e55f7daf8b2df983b684b876acf96f89fa4ab922cdad8d12e7e9b08276adf082f77509f590f9ba1e91a12c19488b92a53a502b5c2735b9bc367be3eb46365aab9c16d32780c86e637aa55d22eac7dfdd2658a9c837eeb1e89a9f349e8f68c7495ddc86634c2912334c6fdec7578c036b2716363918dbf7385ac4964f877cff04ac8276a6451496ba5bdb0b02ae3ce6e592bdff8b41bec2c21ba589859178fdf1009a46567475333c298d8f38843103132faa5b59495f6cf02d160c632c45f806c4ae898f802c6f7cce05d158df3f3c217c096c63a95d4ba84f1d66a1d1216b554c7d49657a5b01a02efb650090d3b1a0e2b6bd7345abf98269507bba462aa3b8d8deb7f5fd944de2873dbf5f382a4ce086e40ddee942a21fd58b40acf7510cf19b2b6e2bb872b33e1a20293898d4e400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001258974d249fba3609ff755d04f90380b50ecd1fad1687f3bbd61e66071b8df6eb0d930ba66e380baa6bd2822e18df3c59a517f9b510eb7987ca8ca3e4da60ab6889c08df1e499fc3325d825a859634629ee85e82d87ca02d4394665b8f1003ffd6846c0b2582a74968238b7cee87fc8a670c241b86c0d15940bc3c224cc6d3a482b1b35a5f09310e522dfb5e0a7310ee80bf137dc14790b8b233c42f6f9a277dcca1ae568e0216f744427260ff77dc7801d8ed609b7dd246719eb7dbd88435bb5e7341512452776c4e8b6ff2481589837442f6aa09f27f69800df72f2edbdd12e328181ab0291891adbe883d2aa7a69bd7c719bf549a3ba7fc986dd3673f5dc98d46e8d594ccef5c4b7d13db5975efd5de41afd61472ff81714df1b145a1bfb82e3f8eff1048b7c9bace0557e12f697c95da19370caae243583192abc4df89283227930938c89eadda469b03decaaaef16e266c1d55612737d17adad039f33ff058569a804a66b150714afe927e509d0cf30deded90d1af05cb8f9ce8d5325a8ed66d1ec7ec414e4c1ff7b9956bfa0ae80e2059dd5cdd0be54d70bc58fceee348d883fdf7a2f14c69a5ec6a2891df3a1ef190b9bc791623b2b7aa46c4a12ad6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091979382a35ba877f643201edefd87e852872979a0af5602d511b4527b37bb2f0e6d3626dad13d0ac795b9361beee5602470e297c5482c772abb74ece389b4505285f1b3e18ad0681e022ae3a21991e36ccfab368d527fe79fad9d713d10fa7064ca8b208556877da5635f71c3cccaa3fb769ac25415aa066b476082bb249b423ad674785dde6f1ee91620f3fb5cffb0ccc052a82a870e26e181445532b05216f1edf8742a4d1c36f199c0d0a475c6199313197d56f0c4fa8af74e24e5085d7310b2a17fec8a22504bf4debcea0ec03bbbde369c2d0a74b96f3eaf565d78d92ba898ce8c9b7061304f35d99a78084068952b64a64e097076fea72b5af4148c8da8aa43dff884b98a46f6523fe19a486978217cdd391f98b4d9ac66a79cd0bd770d33df6dbe44f9f6e13327d9f0d8da4e99022e2cfd28d23216475f93b7aee658c4cf8e120a37aee4b17340e48e32e3fb18257c3971fc9f11ebe24896f77488a36e794141be378b717455231ff67dc8c98ecd9266dfe013cc7024747070f77e1b49716ae4bc84f6729d85abae42c55fc730582871986b57cb3c1a2d2e2dea63c14596d2af5a1ddaa7b78297bbe986d05bbaf51c1b753584fd1a3a687cf09c3ee400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffa478f131073339626b8d6d699b04ae54be578b8d2b5ae21d297c4252ec2c5c1e4baec0e0eea9c95d38d8816a5062d37c03d7fe74ad2e532b34cab83c3fddfa7cdaf5fbeeb68bdfec891638216cbec890662e789e80bd4f729e5b927719f2d95dce088f2c044fd4527bbc3bf722da5b680d2bb9b5bf04c3cf04f4a46214a2e957d8bef820d77f0bf8bdcabb17a509d2f60d84fce3cd167cd248ace934e854849f12053490f21da1ee96c5263d13ed23d6e6500301def28cb53c08efdda94b49f2391289fe0e1a82ab7a92c593e14d079dad2ce783315d84dd14118c1603bb690602cfcbfccf1adec4a1503a3551ce523f7d839e3f9ad54fcc918a2774e330abea367bc71d1f3dd4871172072be8b7beac53108103aa62688cd5b817556f285001d07c70d218aba1a2d13cc4aba088c416a3881e806346fbb797ab3b4db12c83721fb62c5aaa5aa70d2e4127c1e24a33f350b3bba8794f60b6f1aee2fe1bae6c1ceb8925dde7a32cc2ce0478078e7cbd42180a41dec82a1d8b1e39220c71bd32369e0475b935654e550fdff9c59c18dc9217787ed407d28022abc45d1e901e7ba405da86d619d66a0b3a60b0b396cfb134f9610f111259d1f3a22bb909ff7f90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac57b4cd14aebfa7f5aba76437120c26473544f2bb5a84c677cc35c6b28015d79e76150c3f6f892ab6fabeab89ddf339e39fe5136c7aa4411af9e3f316f744849b49d2f9923f97638f1bc9dad83687ee522ff31f7c03babefa74ddfaf407b9424bb5165fe53b1e94b4522213813abf60da66659ec310be2de81035131316207dd0be691d2bb0e179fd93eb90992e0e6938540a59f1a69935755ca22ee5a38a4b378026f31ff9e4f04c45eb6c8c2856e41e9e409b609123d21df72463bc8161286f2a64b75b8039582495254930ea8998b81c5eb5a808f365fed61b7977cea718a126ed6a0f98b6c879e90549f5eb0f53b3ca2bc433747480feff85b6472d3e649dfe35e0281e275a98b91199fea5f200b241a13602611782827b4b2cdabddf865205e30c6e91e4b6ff0535b6be6662da4ec7319ccbb9eea696d0d58a14a2b9a23c8bc958f1963cc9bd73c97af37d0e65a2d231e1b2b9f9a5d1939c2f3291fffbc13fa9a84c0c5db2e8e1abf134cd17ed60fde887b018905eaa73319a04d84cf23e35c278a8c842ded8131f123ebb403417e6bf8bedfd3bc3a7168aacfc5442b152aae84892c8f359a89ffe2c2920ee57bb510990c087e724b128e7f610037507000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025f015eea4dee93a1d65f4f19583c313c8c3dee8410109e01b645f51a00551c02ff9e97f7b6ff4526683032ecb2e049c053c7606353a52d5ad1409b28904efed30869c08c50119416526207425ae83c8cd373388f4b17c419c502fda99d843845b706d96b28e1cfe30179b66725196cf3a3e75ae9ae437107b35b926b927e31d0f24848f6930aa6768f9df96f8f9f58f94416080e4c55b511fadb162d9b9a122113ef1c1302650e34ad8bdc4b1e234c97c7e0f3ddda2bd98a0974357faecd48d16a47000b61b04e0151b8f424bbdebc1d14561fe6f658027d5f7bdf0b391792a23cc4e5400e80d2b8a0babd798da309991045e8dc165181e1c23206eda406d4fb20237e1c96a12f4fffccf8d126525231b6a213a8d234277d6fed375611fcee2b16c556d3ba32d21c64b0b3e8a6b21453b5fecdf7db1dbeb8c464249db16011427e05969c99c3cbc3b51955b0c6a628b1b58d511ae6483c1a3de5c9ed04654cb0eb10324937c29f0519716f1e42752f5678e4539b42df15be94b4a3dcc38e9906da145c3cda5e204ed4ec6317d61acf978f9d4fde4c24d4033dc9e0b7bbe7f56bdf8932db3d91f92db064e10bc53f32cba8ceeeb01f0c9cdf4f13d161674266600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000648ab6a0277a52443b766a54f99cc17538c8bf3340b36e3d209b6a2bd909ae3a463211c2b4a35333e15d21e4f15fd6818969e4a8d80429a991a41f7b00f6c0434fd99464ee7f28af772eff191d44a78c920806e0c65fd45d87a1eaa4411549af931b27e5d3fdbf57c083b814a30f3151d93d928c9a333597ec04c36641078a6f73521f72a0b0ded58a115ee089ac051bc1dcb9427ee27689080ebb6b730e4a043ede75a476b1253011d281f11713af2ea334d313ea0a39cb4d1e4b6a451003add28b76b692d9f18c3b527a5d0f010d96759ba2061931eb5e60ddbbea21eb520dfca3f70650eb4b7531b661b776f67e7e2f0797c65a0b7b1649e4c7dc8c1aac32282730211fb8173ec99383b7e106b540b5c815d6756028a237da579b824ba0bd24744e6970f4c8366224fd9e78ae9427177701267608a730b8dec3108d3d4014be7a29f632ea67642ee3129e9e0440d76e181417d1421e672d7e2443bb5cfb0756d4279c9388bc83267a3bd76a33055e8db6cab86740745302824103157430b5824c73b8a41894c582b14289c3d34d0a012cbeeda75dff698220a00517b16be63db01eaf7bc70a1ccc4dc1ca4754b74aba22926463237fbff27a56948a5875f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f8c9ed70d6e16515273ce825746d3297af15050becd10775eb37b2f29a1f11a9864f4bcf0599d4eb2b409e5e36de6cf0b81d8658f525cef9c1b3fd6998fd3bdc125f34bc28cd6c76800b712d6ddc38d95866c346359ac2c52cd82e557a4034f031d2fd2eef2cc5670983a35c58d5147b4a4e7fd8f42c9a824342f2b1fcafe0caa7a218b2db942379f2bf018b993fb2ec1443914399321e2b2f8c07a22a1657ace8624d0275f96f2d04242884d5d487e35fc39235ee62993f2ea59baa0417508f38777b821ce28661c2f7c88eaf85fe6a0d9ab31cf9f249fc31a17c42cb00319da5bdd1cfdf181b58371593185f02b56bd82497710523c5854ea1bb9731adad16a89954cab1929448df3d9bb527bcf44666fdbced2b1adef2593676194778fc887d685caeb8389a6ad976378c5e1022d8cc5f81d46637181ae0052d76a34cbbb19ce0eee6c702fe3e025bb9142f8c211b7969bf338600fe639a3789e1dd8a1336ab1206884773a5a593263a189e5b91239e44cf863ddaa316f2a8386f9516e582bd00df3d052b86e55f43d7f72319a427632efe58a18f92db8ca57f76c298a7e00257deca435a60cb85d7dbc63a167e1706978c745ac59b99b32a06dcd94c0f3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021ca7f1bfcfc96860e14b660fde1b90a73565745c5ff04d243bcb771ce072fefa5bc0b751260f61d81610d168976b1a38f2b7515c4972ab992c6256cd40a17266005b18cff5644c1829bffa5ae89e2352be52bb2796d2fc3fbea904ce8c065e5bdd049b0d49d037a2d1c62ddbe578057c76324e0462da4b836498fe77a37d96a27769b819b593a84c8134d97707540b0a9cd099edcbad609972f0aa5dfb0c626de75c0fcd776738bcaa0c2bbddff160a149c1655c10dcbe3df2b6a571fa87296cd3bb1a06e90219a12c27074d04331ae58702fbfed23a6a678f2b94a85ced3f3e334d0eeb390e3d7a3433ecf359d91301c15579a8040700dae434eeebc63a13d36b099977a27f2f4cfd6b7dcb2d78442172229250cbcd021973bcd2741df36c23c43c9160fdee2168a25317ec93d4e9dd177e04bc9228146a094bfd424358314ee03693e7337327a8b8cc8b0449fc227fc0e3f2f8b193a506afd5325b34fad511d3847bd1a0105b3e228de2139b0944c78602860d9569f1af0d9396703b9b2a97b1b5d379d58a99ecc14e401098b625c7884faeb08511215605a9d759e63e7f63d494e519a06ff7005d313732b57362ea640cb3fe9682bd76c046a468abd3c9300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000509e986c707de6c7296f2a7ac63e6d57cfe7e9573ca387c7f1cf278b19fd528b1ca3e500c4f8c5ea792f34225bcb3787a4c4914a61650d838201ee0a489f6da0c8b22ff71969792ea8caa0f1870d1e571ab6835282e0306779254605c259b433435dc0fb6a9b29645d104be84d89f48f859ab12473dd1339b28e2402ec957c7f6031b2fed551df40b262b592fdcbe772d4433b9664ee0a67a29f8253ad1632bd5f7cdd1abf652a5d03fa97bf23834a66fcd5ca59c4fb109e86dc561a8fb0a94c0b8492c82686c05c2aa36cafa2b04a36f9ed224fa01032fd7a36a994ca66caf2885ae09a8dfe1870df1c65e98f7bc119be787192e2d6a68a4a6a050a8e79d7492437e4851c8d6cbf5fa2ccaaf3ffa6e972b8a9589919f031748b190c033f01bec37d21066f5fc0290e4d7fde67023b1c08a5035380f47f61e467d5eb22b80731c61037483ef3fdfa66d719f1a5b26ab881a8ef3a466c060cc7b98b964b6ed175e73bb890b5d5550d160ce1e9b1bacd4141b210f5ac24c8ad99ad4532348a6b1693960fb30a0b5cda0e3f589f22c342a9c5601c72afdc67358ffc2fc0bf97de580f2f8866aab7a16022df795f6c7605a170684770417666176ae8a898955748100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c3fe955161950e34be6cfd5132ef4958be69a59f168d7b10f2d8e8e4c2cfc07d39ca504efa579499c748421961d9691237086a54f64f2062e5c264ff4e8ef44b92f7bca1fc4228bce3f000ebcef9e254c7f207717e68899a018f43e46a725f6de525220fcb15e42f453ef1bc08d445a85ca9a82b799227f52c9d6165a8406a2afb524f2411d5d2521b69d50e46c9cac1f62b558b1e2229ff4e79c9f83194a44a936dd3adc8030c07c60932d4bf22499f05f0f4db91853168eb1d7d7aabf90cb015d4d49e96990beddef4dc3315545d5ce2df1d237e7ac6c5220f742ba3d6f9371a4d734e6363cb629005024a082c2b4b51989595c66b3a9f1885d69fe168d8649141d44601c8c5674906867c0c7981b91ce33b38cf43ce458adfc5912d87ebf2bf18c20964e7b2e5da1cd7c48466dc6251086cf0b1f19ebf8b53153ac455311df3dca6607468b3656174e4bad316696f4a3a7107d7699bd8bc87a35c13f55c5bc12ef9f1684dd5fbf59a8131cafefb0ab0e083eb610ec903de836ce6b60981430b39a649ce06b6d0c573d0566e1e7859fab0ba7db6d5c3addbada79af80efdc106dad283fe1fe70c8921ecdd0c3ef7ee5c7b92b622b8777b206df86c7825f62000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094efbc1f10a461bd5c5bd2fe6aa0001c6b02fc1713f0674f6a5463e745f9052e0fe7d73b36cb540430d8891f3e940deaa5b620fa257c5ff653d2c7468a51065ba1f842457efb6ee7fd369c4fdaa753e821eacd0542d8c08d7a5dd83661eaf419289492b25094ff3f6d723cf5c4b72689f65fde5af92e8d4723cc5eb6dae39dba282e421d26b31db7765b184463f66bb2ac1b65c722db9be06165dd32f3b6cce54d51c08cd051e9bee3cbff4484b2e9e244a299ece3f15978694c5b06e3be61acd6955835077278f73389cd08670e54b033a8d44856032f6ac08146e676fae339898ac3ed2cfa36a7a76e432d32303ebdd1409daab576ac6ba62edcfbba351ee82e1d6ceeec84f78e4819e305409d8ed67c5f6419f5624f2eb6a7d3f988e667a6b02ef9602d0871c73dbe1201ff51c90d38a0e7dadd26cf76d3afc9922a253faa1f25d211021a5cd867061b8e005210f14a0ae748e569728c1e917a7fb44ea97cd5e128f3f7e1ff7de825a84d5236b7183f6a604fef526f7b6fc36c130b2af48248d5dd27d5d1410894c2a85ac190823bde5d51c98bc9bbe03a8a8ffdb5a4f7ad1271db4f9ba9f40537104e4509f10ddc03002c6673eecaf66046ced34d3070b200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008fc239e15523516a955afcb36fb14046266b0d30688c5c3fc1c5dfe22c917f5e88e9d2c0708f60c27dd57a1fc6eb965059d9f3f72abd63b0286e152581fc6081b6cf844d904ac0e80c289aa1d1cc63f94410b5a189e78691b68418cb9dd3a319f0e29c9e3b643c62b5ce93aa02b3256d30d1da8b52c5672738c34916ffa160a16f40808f15574ed7f50424aabdb1315507c1650ea2a0f78f5c7f192b604cfb69da10e275bcc9d40f7e427f02537383dbf5df8df40fff7ee48e6f2417a0982201849f466ae0ff79257caf330c606c39b77c7e6f669759fbda9704da5c728777b52dbc4eb46e14abba4413ea4e562a5bf6c920ccb519c6a4882eacf180dfac5829128bc9cfce726b6f4ec290acf1dd7bca6e5d6efc0625e24a2a7830472ccb0453a8ac89b21f9eae1e15176950d9d3667d789a5aa950d8336dbafc31a386de080d558442104be8bce1fc12f1f208b054812003f59b41bc47141f9a969f7d01ec72917b8c10dea8d06bb5fec0c021e6deedae2567905f115f3ed52a4970d8b631128a169661f2bb171b868db068efcb29b0a5ee43f70b3da380146bec8a0b6e4104cec68d8adb9ffecfab007323bfff4e2bdf6f4d5514559fde0307e14092db15f7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015bf5534a10dab8e24087afaadce4a965b29b87ac86e7d26483e88437a69d6532f373c12e4eb4c7b5c2e9564c3c970cc34563671abecdfcbe004217752ecf0fe6ade332804680d48ee2370917f04ec6b242dc9f48947d1201b5fe0dc89655aae7c9d90fe8baa8cd321bce90470d86946726395bc937ee60398cfe994afe0992caf1cae0d0f92908cb574a4f96f227ce98cab67e3c4cef2d57e29dc71d972efc241ac9e4d11ac09a301780c7fadebb58cbbd19c7a94ef839bb1e53353e3bda4008e7a335142b2d7c7c005600291a3fd023ba295669307687e5a7682a292ae52387a9496f36a26ed275a86f5c4dad5abdeb82e1b8e8fb3163a799f4a82211ea630afbfd0c1ad9bfae3653314341200c12d651559234247f517964b5153b49bfed40c644cb7f71fe8904b8e283e93a38d9c1a80200f4ae89da8e24931bc59b9e075347c68792b0d23ac93c2e1ad54f327cf27ccb725d640fcca1f8f9a05cf3d77c3f57a1f6eed98893420ee5c2fd7a6ecf948ccd522324fb9805a3a5c4d63d655e24fd5e5dbc5733edd524e6d72f8e7a76ca7e256b6a6d96de25864e2958d18a18e95173ae0f9379e427dcde5a56165b8ef0eb94dcc9b28e97c2d457c0badc6a75400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c38a7f4712a07bf737c2d25bb8105e234f2b2d25fb5f5a6b8d91275ba8a57f0616d5bef8ac873013e37221c1c1f1329ce580b52b8c39453c051e97bd575ca9e76fa87672a9d640735fd6332164f49efbaf30877298d646e3444ddf78b30ac7239aae44dc5d10768eb93068a972d219287d5dab792a442e4ab03845972f2aad907723257f073ddbc039eb68be3f6bcbabd8849c31832613ebe85b8cb4d2ea3b65085ae7ab5b38c3ca82120931a6526e4658f1c8874d8fa24eeea86ee9feebe3a4916f8a6241c3080228280228aeaef34c97b4f1bb2b771607bb6da2081cb54401081581cb96a66e4bbdcfed33d67756b1affd91769faba7a7e51e34f1e123c3dc6edb7d14fd64290b9d7448bc65fc088c0933b144e466bdf57eac61441149823ac9288424840d72b561ff7164cd8e671702f7c8ca49a05b1022b120e73336a5c638827a2b7e28051caedd0c0896b5a8c54c83268db97f8cffd495894ccbb351d6ef84840737a04eac1e3487ecb6ec346a9451450dfc446fb4c24a96925cd962b46a4d41385d195cca22a110718b5123ce07808a2dd8990d720b81b16922b4f143e2903c172d125442b26d15280e15bb3a59ced433e3dee8c56aa70e5e3aa04a80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a647a397b79da1b5dbdf19f07a58c5b0f0d473b7e756d9d72f579705356ce962d3b17849449a03dd546eb0a5f315b625b5e3eaef19a95237240964ed404a9bc8de56c5b372600b7db6423d063d85a51b4e6cd27643e79269c2ec0c8b0e60a5d1c7bd0e4f9b805f9ba2456bf4116c76bfd73a8501aa9bfb221f3583789aea8363370adff061103f610e19d3b673af38e7b5d9d1674449ad7a72bf499c92f2abf191d2358b83c1b352e7bb29aed6f4281e96a85da96dc6ca0a897bd13898186f1e8028c2a2fb34fa982614bdcde0407e09167402a3a4831ee9d14764bac501eb210b67aab03088b6063cddfc0b88dc4afbc4fce16c0acdb29da9d7dc4ba20fbbcb73d6adc575bc7f436df388770bf261d9a401e77e255a6c0554e6c6049138778ddf6bcfbd35310a32819916a0a477be8cd01c193ae0268ef158dd07c603a7095f0bcdf1ad04565d0e3dc19a545b95e3b31d491888fdb36a10e96e4f5f646d79d83aa93aa60680baf513848eb6a321917197b5f0c7f58e909bc35270fbb94cd17e8cd8f282bf70568f8719c78972fe4b6f7a0fcec8ef715aa1d1058104327e8cb04beb6501dff41747bd3a5eaff25a617b80044c98ba3ae49ce902c81324cc5a1c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000296b7622df8dbe8c15db245f35212575b1c1c9be3bf0c22e7eba6cc5e1ddda991f960fcd7a9e5409be29f084ae9bc9d8fe8835830d295f814accf81f2cbab2c49a18b15c61e916659c5b1b726ed8b505b31a56bab5d769dc889d389e72e5314a0023c0dd6af21b5ac4a1f4bd73e4c47b69f6b317ebe60997635995358777416787ffcd6853521153777fa438f2733372d8ec1192403edbe18722646cf6bfff1be9b701c6614966457d9ee58fd8425f4170ced1054267450da735b76ef8601db3974237ab3db39f27199cf33ae02c91de13949898b0ed1b2d9b25d82b09626208a4dd75815c6028fce46407d4b40eb43f4b1524c09b01a5e56d89b53780d2ec583b4cfac70bd6abb8c4bd1c0fa6e246f596f1872e1f5e445aa7a37ca320f74e911c8958a51adf52111ff0f543488323836114538714f36867dfa2e214960459c64935056c691195a638a73acc52af28acc938ccfec2441332f42e597bc4170aef5ea76e42d69f919bffde89f4f268f736d013bb5417b54194d6df22fb4c826b4205c1c8e91e9e587b2b92135a377c7e196df4aade7557d0c4763b412858c767bd7693021fb461106111a4e3aab47b8158426d45b021017dddded32ca14fc89e0e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087000c509aa646c19deec18e8eefac7cc36ffba87e34bd7491efbb1a052133ae7e54551e7480737c3ab311bff06391f9e01a1a4a32f082cebfdddb5a2cb1e0d9ee7079ee3d1d5927818fc1e0478e8a1d16e4bced096330575e3e425aaf6eb3af115fc818a7a5fcf6deba5dab5c2c8b2588fea1b8e479a92cf4ca45d571da230ed0aff010e2c00f11113f51a1c66915a15ce933f137a763ff35e9f0729a638dcb8d0d86396f40b2d2489936c04db4ef5a58075d2798f1f0070a824fffa6c69c08fdbeee8208932d4cfbce21d49a2646d320542d047007392bf074128df2a6a9dc32f72aca67d3ac278c676ccde6501b210ef72eb4062bde15e408999a2c759d17708861be23ebf55f7fa47071cf12d834fa448079c67d9a86b72083f7f42c246d2375b40c5986795e9d97c48d62b484c1bfb5e56b6b0a39e76710096fbb4dc311bf199ee3cda51784fc37a30fb63b40e11068ea46a1169b04a8f2a8517a5ff9b6cea29715ee0bf5aa3c4506c2086fa7ba3699646a33eb28544aa205a2f943f948372814d7575f2ea2fbff55c437a42baeb50a313098f014b33b23ba4d6869cd2c2a8f14ad7ada4d81d14d0c2357f71d2c93b77a2c710012c359c610851dbd737c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009272bef7ee7ceff9b3fd402ab520aacd5fe2ca78489c10ad8451513eaecca5c4750d8af2a545a39ef7a93c9c6bf34860b7d4ebdb337dc1ac9be3cf4edbf5289b7a328613a4851dd0ea9d7783648f282bc50bbaabe0aa53ce926b7120d1661cfae167efb993cfcab44fcd396287480729e6c24f648dda55f04324223c323b06d2bacf4056f47a5b6ed948759584debb07c53b971b8ff7fc294f481de9138ccebed08e33fcf0cad038d5ceaa648cb20f45af5314aec18bc38fd450e15ee37f172c072d457d9486b9073f3033ba2d80e7bee1042ec4e9821d3c1d87062ada8e8fb9a763879aa214faf3743054428ed06f5bc201cf06ebe5e8177270cc79fefb741aa98f624ef4024b9b0f81e2439ce6c5139f69489a4b5d4c13282fb12a5a4c53ac15bd26c795c0e13c75a4c09dd830f3e65f67d24960cb9a5a2a5349d8c28f8eb4a44c91c8252b0c44356d962942d3399f601cf52841928cf64e3ef91a84af16f9cd227916be08be38573046cfc5aa5373e1df93dc7e675a23d31d862163eed4c0f3748356d7e01d6862f9be373acd5fd2c0b91d8b6a03e5256f944138fef4865e489fbe16c83537c5e4cc8c8ecee6cab1e113469a500a703d807cd50311bf16b100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b209f7dc58839ef312d3f464cc55845d14774613b748b6e42707aa387a7550d8d87a356c4778d4dcc1a30a33bb56d17563191985871f261a8b55bcd40517b6def896baf1f3275cbfaeab61554a102fcb366cbf39d8ba07f5ee63727da66852cd47839352243e438a676b7c8c4672551e2442eb9bb68bf14e0fb4ce665b862737328739120efff0c54279611a3c05c711b3b51c910374788c6312747ad9d64cfd63cd9bad6ea8184982a253ed662ee8306250606230acbb12b57cba18787a3e18a78cff811530d7a3bbbaa4f66b4be9de78888e056ea61ee80c1858adfd70bdd3c40e27ac7afec6ba60969ceac265e6ff5708888b58c6dc3622efed3c025016e6594751f5fa58d48e5077eb8a5a2e5d3e58cce710947ef712de4d1e21dcb23d3fc6e05cd9d8d4f8a5720727e636ce3f05c3734f904ccae13435a795a5b60aaf884da77f74ea9f26ff390adcf41597d97ecc20699238d28babb7ca7f08bd58ecca559dc1931963441877957748b1eb7a9699eaeb367b052a43973026c872436b1514684f8ad8ac215c91533a632d50e40a6b1a806ee92c699f433627e7d550a65caa56850c156ed28fbd85857cb124e2ec391c3d56a4a5a3e0fc256644f7c111d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5204780a8994ffaaf53034fbaaf8bd88c636cd81368634787c4b8a542b4b6d6c8a884ce81a22f8b3cd9bb9e5beab5f8568d3148d27c8e73c25dea58fb8eeba89df1948dba5de8c05865618fa1995910aa8bbd041cd894c41826012af363f6171c6d222b1b96748b4068d60b075bff5b5dd1ad85cc01b843d658cac844daa6f49e1539829a32cb6f8b58f771823179144bcaca374a7bcd74282d2783f3f14ffc141ebf42070bc83cd6b174cb6b4df384d015d0fc008abbdc882bce7e578f72c5e738dffe836b4ea36cd7616115c3edd711e60b9e0a5047ea572a2626651a08858d9bdeca0e64a0c1a5c868b9a47f3571e3cc844bb7d7aea70b905b2ffba121222bd9bb58c52470934a39b4506de17be884e9937fbf4fe2fa61cfbe2532e97f816ae408d696f03554c901a93fa6621422f9984626f48b33d000346c8bebbffbd0b751c5b3fa398ec0b298602fd2f8383e914ac1f3b3d1901bac282b06b574434957488830d8778fe0a2056358074cc73828849798695e4742f4a2287d982bbde17fdabf9887d906c21f13a3371d6c7054a8c5f70b07e1895947484cd1b6815fe74dc3df4b16cbb35fe5adc93474f5e3a27593b7b17fa6713d3bcb4b6de3f135cc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4667abd1b29aeccc375cddf5778cd6a6ec4dcc23314163cf4f009bfda4078d49a1a3a87c780a4e9ba415acfcc20a54a763b58fa6bf532efe30f6bfecab6567784d7de124f9cf864f322c0ece0342df1aa4dcea3dd94834c06694079e4016ab8fa44360b3b734ee8cdbc325dc99cba3cc2c254de63788df1090864aa588b402350b6e401080a31a5f5f85a23db35ace88cda9b70a638fb65136c1312c40910c3d2d1eb42ba56036c8b27baeb739c20eac5e96074a4df95d93909c7630f17a03ab57ac39d31ec4183f16e1cedd5b99860771ec198616b07da8f5462293b35dddf30cdeb6be12b7886dba897dca0a19047cbb2344fdb3720c6a20c1a8a799f05cc7bea4f1f89d98cb41e78a5bd959fc02fa7f93c338a263357bc3ffdf4b2a4224bb80839a1a1728e7ef94f96d385b9840a90b21e1918e39ac865f9dd68b98bc7333f71ecce71f2a7c38a64bc8414ecf40f023b43bdda0838979669729c64295f7f7bbf94d84cd5f47301c2bff510e4fccc454ba13c3d3ec1237c1ee7459542e514da80acbd6beb44f7678af760a9c02846397161d141a9535cc787a3e7348afb82238e2e276dc0b1a210aa42357ba7b5fc1fd9badf665a019cd21302ac117e271600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f3a24b26191c047ff50ccd771e04bed5ed1c51bf3d3fbdf666044ac0d6ec83425ce3cbd7775c18c9363c718ca189c565133a9268f30d33907ca14a510c572c1349b31612532567366038f935a72e9a1f5ef080f5dfd310beb0b18680cc18708d3dc33f9621cb537f7a0ba2b2751dcccb9dc9e691ddf243afce2a497e9824bcf50c8b2aca1f3f51b8b6d72da9c7b210d79128520ba004d2336e8b854818869796b17235f7a648ac7ac9df5e400d3ab977e0875c40ed3d3b927acdaa7d03cb0108e7cfa1aee6b62d05f5444f42b7e454264c01a88d60487b24058fa105fbba1d764d022f27916353b25aa69fca4ecc75cd3c3a93f044a40c9c063a1c6e9089f2a00be87fd026befdc64e9dad9c25325dd60d49a5549308ae2c4bc6af81f491e799ca8526e56429fe8af6dda78895e6be890c594738d36f65af1d413f1cc5d19eba077999bd11f04ad3b039a8740bc5bb2d6a00dd074c2418bf905084797d2977bb26e69b3b8b9d8e1f715ab0261100bed9937d4840fa75b13a3d07453c138627bce1652fee69dff52c3355f8d006cd925aae9eb28313e0ee6838ad667726542c2f5ee284441ffbbd76c432676ab43adffff514276acb1826e4228bcb444b1e4aa000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c6ec35df80b8ecbb48b798a9c286fcff140b9d5569f0ae81ceac46992640ffc9cb3ef82a0ac6085361237218f84d966c203219e8fa398819288d753e8d4bc5eb5c7813fe9b100ff0ec47adf342b4c2ea49189875a05b4ffea254766fb377a1df0f40aa37b1f7e78267fb5d0d5392c44e91e1f28dfae88922a8f4c3d24b82784154771004b2031628b35dfa808569edd0676353faa7cddf97a712887e4bcf81c070f5ba0fa23536a938fb3125859189dd705e600bae8077e40d21793b63f6d0cb2f6656f26b9dd9dceb3cdb4751fc65e455b0a8c0b481475fb99b667aeff5ab05e30dc47656b12739304accf5fd7ed0845df807ddf2a3490bc1b062541ab9cf466959254810e9d66682d44f15521f88aa839ebd9c56ff5d8117b520f0bd492d120b7abde51678a28e17d260467530d77c3316ca2c94b205d46d713f6b18817f97db3283d1f567a22a03ccec4d7101425d1d79018d0abfff14b0c087c9538c8b1c7f16a8b4addc253f186c712f0435821b1dc687b5787ad41698a9e9797741ceaba5533cf30ad956f8850e03e456775763ecbd097f6d965d103c0c8d0c1e8690843e98180dd730f89f1da1497193d6a98d5f6e7bdab782f4a29727ec0e017d3f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ec3e978f9a863954e88edcf80bef82538715522aab70ca1507a8be8b9e4cafa411ed00f8b9cf3f49c5a3e4c51ba296589ffdeaf9c9491a04460cf378888c66fb748c97b7d5ba4ea56058af1401c150ed616c3b8c674b36388f0e7ea3bcbfa20aa7e647dd998448c3569068e7613cec0d6de0dbed7fe321d6bf887d73b22a2e38049a457f2497da6bac498ae265db81c1706caf8f606440517e7ac495303da407a6cdf00301826da72b54e8615dc314b9c5da41166eb9bb0147e743cc53ba34b7d5490a3ee078aeb328cc9cfd08c8939cca2928c249b1abb4daf6cc6dcdb21a951ed8b99a70ae0006002aa8eb750f2fcb973ef08d5df88c6b9555f45ac6f2785dd0c3168e998c3684bd3cd952b7f2fe8b90f23204127fd26767e4203ea9a929b63d9b07480987d63cc38e41a6650a95b73e2c6271d5d3afedf9049c3ccab8eed391d1c0f41a5d8205f364b33ff1330ecea6d6818ef94d145c48803986d491540b355f0b384372d26b3494d1f833f29523d000725439feafc480747bf50c5c3073503f6566ad79f795027bcd624c3d5a7d8180ec84916ec050007c5d3d6621d6e5fe70f97d3d6710e05607eb331d385cd6e3892c3b29ca490b5015b8493c3c450000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000130ee26e8b03f74c32975a120f509dfc7090f85b342f77bed30df248b3d45e0243cf2dcc930eb215a62ff3d8a0ccea0748114f22e3997a48910b47276e72f517408a3881b82af6df977af7b85060c4d18d1c784a6bd927871b2d611d6bb966d48d5311b702c111edace534bc3d3c1b97246a95339d0be1f5442116fd28f1303a77c8544eeb1a7a9c8c63c6920ff9fbe531804142cf2cb341541b7c086bd54d91a15e0cc6a436e01633555d2c1f2674abe5da98fa445f4cb840c6fd2220289afabc380d3ea11120957c14289f7e31df9b3986bbe8275d5e7196d5b2c28dc8c7b95cb55b7cf06a320c4fc9da08fa46641e41bef210993346331729f177351935d53ad4fd1f9c001621c03d708c8f7231a437f3a1937fd4a8fdf2ec4500a85dc15d00e51f78b59525ba3592e92ecf9b909ec0b42f852977737b90308521e3fce2f963e3c1c40e8298b82d41b03afad6463056381f6db16b668ed294f2ee909b88c5114fff29b21244e389553d9ef021441f5bf14646615d8f0153b261d09cc0546df07caf6d7552a9fb3aef4fe84e413d5eed41d8ae4f0bfde03846dacc08b4bd9d8105abd1fdd026d954937b2925900f172e6a88ac31c1ab8be46ade6a36a40aa50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000988304428e830f27e2761b1ec71546d290b25edacbea13a196e296b86e4961eab9019d35f7dad09340722b808614760a2b2a6baab4154832e5e86c434495a964e949558ad3a04c1aaae3e691a33e74a2c4e749953ad1fe3c7f7bcc062c2afaee3bd93b52a2c7df4253a3c768759dee3e3ee89e6af3b407b0ed8ae36f54162d7384d3ce96a14e09eb5d5f7e67190f11df530e51e56a45b3cda463cad3d1be3817a5a984a3649db7d18e8240ec76839920c7e665c0a3def03a65f4b8726e4513fb1dca2932483f3b2eae4d5cefebcb6df50f431f8121d3bcc69db3bd6c79577e5a4b6ce9d78e4dd6fed48640e56984124e02c9f53016bc5f23e5a32f71c5f085810e7d3e71d143fd7b8c9c28040d843719aec232108093d450b70cd4bd405ccc7a55306bac6b2c6faa4481deca81d52524c3f9be4b03e88aacc920942e06636c4f7a018c026929b83bdeb178a2ee5019ae353b876b4653ec8d78c5e3325caedd686df8cea9f417aeac724e1c0dcc3e1096cdef113e65df163818cf94ccd4ae82d0b1c94a11369ce0756f538091decb0bb665fc3f15ac6ad15df19eaae01341008a4eaf104982fbbb89f28356d2639219cdefd8e02e27fda9ec60f93bf156de6163000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d270fd59b38c4145f0c2f2abffc906474045bd8e60562bbdc2f7b11ba0b30e2fd2d24360bc29486f66afe34d04bd300b80bd3287be086ecf863f34461f98d3216c9dec75a1a9c9168ede945b5a71d4130da15d54702b59348246459fd34022ae2f56746d5036251e4529b1c38a8c050ed023fb536ab4afb4f76b6a043b1a676a346e27e032af69239011ccaec2f33a8b29c7fefac5aed786d4748665423ce55399eb4007b3f657113e83ac970c2f6345e85a75d8219a2f16b783d55fab6dbb34599594c2be44ee4bc2e2434daf6ed4e8394a2d991f72518ff1e079c628203eec63bdc33147ac1a4f610da410b4f52d5b4310c87d41bafc2a5fccf7e93d2ff4490b323c0bc77e28a2b66b86cc7ac444bf2f6e897249afa3493e7932ec4e7dc268c0782e62b11e72c80de60efb8b825b16adf48d3586609bef33ca459409165172304c2bc8e29d8b97de73e46eeca1a55854e360cd27af7bfc9108b72f21420d78d12b62f859f05b8f2b87813b9c6760d40de549a52f2d15565b96c6b8099d88d5ae036ecb65f408cc1001e26f80a62f7346b7834fe5dad7a391c5c8dd87e36051fdd0c806f7bb33f7c24d3899f87679a7f91553175176fc22c6ad17000cb16500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002359fdd57e1153c28851d7316721410a69c7ae7ae360fbdb837186cb542d32a0d4ccc9fff3309e89de0d4d052ba550170fd635fafc84dede6f9007694488388bcec74dd341068c6b6e36e24e18cb46e453787e2021ea6acee88e6e5204d097667220f8ea1bc0d7f0a0aa33dd7f2ec921fd0e9e0015a9b26b0d5dc7bb595526db48a42b0209536af50575cdb22026ee26bcd166baea2ee2447be9a546e8c7fabeea16486aec844929e8555d58cd6c18ebef2563a52905e6f37b287589f159e642ca2954395dd156d9de106ea83db2a799d82c38003aedc2923eba94b4db0cb98716e477ab0e12388485864f2399c3b1e33b29a8ba37a751804db07e56e20f7d3949eea854031eb3bc5fd44ef7f7d9c20777e007f0af6fa00cd1a44a3f1d8f0e3a028551a64f1fa9da0ffebe3ae679994ebf7cd3d4da61c57dd25259eed0ac1e31f146896eef9270658b133529d8978ef3b062f945e82ff5e0a08350ee6d83b21e60e9d69a42256927fa1ad8a3f825400b3887c2426121867fca25e6553c5f59499ad46d899a24e9bee9a6cfd80bf37c0149980c51712fac6e9673e12fccab53675eeb089eaf2f359d212db12e6b704a8dda1fb123bd64ddee0bf689cbec8e84dd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c8c5a52fa9906662d2e31b6bfc49c74c3ba42c5243235530f0b4482aac49b8a372e37acf41e918be536ab5edbc95426b1d9dd052d633854139b0793e7ae99b451cb721d5e34b99480661e2649165ab982b4518cc81ab3f2eb9121d8860366236a4075eb008b904d0093566275d604deeac7a84f400f59f3a6cca5ba2ed1704ada0ab44a998ebf3393f428fc3e6ea4a98a5fcf7d640d960bfb4db7966db67ef361ea7eda3147d556e18d6bbd740ba572c1e4cb671e184e16a9d551b7a0f088385cdad078927ff237b8180f96cc33065b0cb725fb308da490d98c3d4351accc087a14547d86a0abb7942fc19682af8659dd925660c335521340ebb2d6e33136db80b6520f2dbbbf1283470171bf77158d7ac9cf10d82711f9526aa23f45fd459f32552448083b04e4c0716c7caf19e0942d0f2ea8fa580339532cb1f9ec370757eea2fa5246cedf4e889d5d8c6039f8c958cbc8c26eab82f518ce1dfb26b086a2f40ac67d8626ba3fc5a73824cf21b0e8e4735c0c3c6e24b72694a5664aac37068f56ba6bed0861060834fb3c8ea787d43d7639a229b227b19af8abd45a180176055fc71944adbeb90244509d553a8d83ecb99e7665e274b047ce22b73d0571870000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a73b881496dd0618c87ea55ff0a0ba1e4e9b8d7ac6f4313563927b0c8e0fd8d4ae27ea8319673f0e75f306e9043e59265933de0bae0658687d274d8de606bd5287d9ba4b5276cea381abe105f285a23848ef3fc2cb7ad5b41d1f531a3201ebf3963321e11507dc1ef7ab8ceafa2cd83e80237c81f788e0a2a311d66fcd6e65f6e24bf56d4178ccccb661d352aa1326c0c91a3ce3170308cd460930c25becbfd3fe09a30fa3139a29375348bd2a602a9376b78a07bcebe784de07a92d1d46441d1e26adce229d941fae390200fc3f61129b5fde7849c91a5a12dca45e34de194cc4f3eb5a7ca09d4b9489381c921abdd0e72e8668d95bc51b7ae3c9bda956fdcda4178aa610fab854425bda069c3f276a0cc3c8d0ed9e9929a849a9d66ba628fb8a74d53de01dffa26826bab18ca2adf67afe16f414ff76b2a17c2b3248d75e5dc79180c3e70896d0b8d2e7f2845897f4f27e16a1c17192a86b8a7909a624d31a4c84d1967344bc9cca78fe2feb7cfced857f89aeebbd730f268f3e08c127f6fc1d83dee751ba6e42282ba116cab71051e2b4d3c8fba2e7125b796180e7d62d5d989b99131a94f6f85ba8f7201c482b6a01ad7f8d4c464aacbf05948ee72e5e5100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ef431235ff465d45dc334a368e9eb452dd4e15b24719b8cc43689ecfc1d8fe8b6888862a2540050aba264bc046396215ba80456aa2f7c9b465ae72a6662c0fdcb536103b2da3a67de116484b8af32dd783bf3665a1271f8e9cd181b9453b3cefb5336520fd1dafd95caba3479a8a1015ef85a5e0a3cb46b272b83e107839bdf3dad1da5f7403699eac1526a638613f89ad7975ed15e129f792ff0f1a00039ee842575bb384267910f1577f9edd0091c4c86c6c90103f3c5ad06ef203aead02e8fe0e4ea8ae1a115c8d412d3f0bbc6a66442800b7017b2a55508279b120e03fc0f24f546924cd55aee3f3bf06d294a41ac8a9d00ae2dd9555c734a9cc7991bfd6dc9ed5a2eee1ae787a7a0bee096ac6f6a158fe8e05aac8c6691d718b0df626c867a482f08b73fb36ced3a67bdffd8e2b879ee28d629d328bab31b13c8866c1e72de20397f2e0677870767ffe8ff33bf132ef565006823f9bc1d9b392e447840b01b2b87868b6d878837dd456c2f4ebb7c0b2c81d2fdee8780a8ee5654920c0bdaebc35407f2296dbc9579123b40b3546cfd47f1ed8171609a3bcbc3bbdcd1c8e16ff661fa6931a1c6ed81c06f63602aa33c3f962af028f4df246fc5ad3c44b4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005847b383c16e4a37b9f1338cf4f12100f6d0aebf4fdf7f2c8e6bdd09d55af1ddf6c1632140d9d7237cd8d0447448ebfca68616d91b9b2dae91ee53979abf8e8598d99b46bfbdfb21c06116af1f0fcf64c446d6abb16a1c2919f0f15f84c3c2ae6f798c7d5c21db5a8ea304eba6222683aa2b2c954701488b614dca633fef855b2facf5ad1d1a8ecda8493cd7638774ac21a4adb7a57ba87c52ae8c72b0a76e09c4f510076dde3cc5e1a4bc2bd5f5db9f73c3a80e534b3ee456f822b2b9921417604666073197b563876bab56657d4cf1d441f8767b0973f94fa3c5da26a7a204f9559044e81354643ee682a1b23665327a3a2706c98ca85879ec4fa22dcce8f1419979d874dc95ed88e3ea9b4184a69155e6545c66ca636650be892f0ba50491c25cf4badd0617d643235395d7d3e6bfa8acb035843bfb32efb749fd8908c990ba2ecbf066514451ee2f60b42902413511b56b48136658e9fc85542f41e7d7bb394216ef473f2a0ab825c8e0ae5ec56734661e3adbaf05d1a39feff1c38cb1e0f15894ab783d232769dae12f251b57a241eb35773709c649d8cd0820ad7c176a118cefe50b635590300b79af696e6c99018200e392f0a73acf33c6f0cd81ea4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020773355312dfda1bf1c3a0851c0d3da0d0f284545707da5a9a8d51c8b52fc2e224c65dcde585cef11b9b9cb44e44f2f23335b2177843e87afafdd0410cc8cfa7431eb0735da045ec66641af9f86b04474c9108cd0890315cef1946dcd6632bba6066c5960109b52db5938f67be726a0dcbc0cd4bbe186fdad1e5dce348c6e45b1a1366e2b120e7dae97acaaf4d3cc0f37916ca001416a017a0cc46dad2837e1a9be2dc8a50227aa1f4652bd3e19b0dcda628447cdb154b0f68e2f3bcc503e4287e33387df97a37309ca121cb621868c6e5bcc5d3c9e565fa8c47ec1a2a21f154964011c124cb730a19a477e0ae72ca0c04b8685beba6ea6db979727cb911545032417f909f38baf9ba22d716e230390af5d4738d443a806784ac3aaee57ed535b18318747eb9b3a14f1fa29f14d889539f62cbd081d19229dbcc11de46881f49079dd1b053ad4e00bd8633d14779ce5fa8e0d4c3d35a98b88afd4300947a59a4402a6e15feb4c123b5dc4cc0badb9cf54688fe3ce6a87da76fd3ff04208bc926aed2c13dbdc8071e42928d16924d888ca7ad781f384aec621035aa5cb6ac610268174e172dc0bfdf129f5c20170719961c5d685b2febfd16465b9275be59058000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b6a4c61f31ea70fa603cd10fbcb02959a8aad3d6253694c931e9dcf7cedf25904a5e3039c86695a49eef02979de5d1fcd598e8b26316d475cab20b6628ee468f89333afd2b9b4d2398162453adf0c91e3bdddc9231a6cb29696c807a78464de665acc8aa0354fe2e211523f25cce6ab479d9d19b7cbcc1a4f1336cd7a67b19fe5294be404d8a9fc8dcef465abd368c0a12eea1fa808bf375e9c37dc3a90108597574a72f72589ee8240ee98bf060ad7c5f0b987adf565bddb33dd9f46a85db63e73d57e8fbf3e5fd84244a757cb1999a5d3b8e8fda0bc641314c3da4a9813ff0b28b14b58fc07aae2089bddbb8dae9a77139cf83b45ff9d5ca287577c490617bf36216156101eb5ddef094c75509cc6fcc118dc69498d9cd5ed108ddf4a9ffed16695319002b97b652ebfb19f3052270ec1c71b49e0baa379829e4cdc143316be76e90cbf6abdcf4ca1f54d708d21286c1ebaeee2fe77b0394d9c0ebef373de6e10b1709d0fdbbb21ee053981be4bb8a713e2d6ca44d5f58a8dcb8304dcc64650c37ac738a0c380dabcdc1707150630186fdb9cb663f9ae41c67616676563251deece2c1b9e806296d7ded17b7b42e6777bb54f98719dc6ba1bb42ab0124bc000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027e03b154dce6122cd6f88fedd9d9ac3bb9a9a6008cd24999a32bac65e9bf7227072228cf295c75af7d5ab010c71186d144214963bd516ee305177518d4bafcd4510dbef47432720ba11cbfadf8bad0fac2a4655ab5961c80f05df239a3ab6d2d6cd4c1e659ff86bb3ee5e6af5d3f14634c0a2af069a32334f0394ab9fb7ce8f2c63e1c9009f0046df48898ef6376f1c737da72a54674dc6880e5be305f344dae36b6b77ab5db2103599bea6601c2fb5920741407e0cd4f9ac410fa3a0cfb0bcbc1b9d98e75e4973e16fe6f9fc38319a8a3a200041b46b34d0b8642adb3d6d5c148669bf4739ee30cfe705c1cc410f260ce4f45a001330e8ec9c92b40a9f882444769452a930bc37e988eaa86d89da90d73670ba8d83e89abdddafc610da34c668d039469dbe0e10f436bcb879593e92552548f539cb164c24e7b9e56fca54f3c77955948da88c457b555fff5f9c26b0b8b304ee71c1671dc50e623fe71bb2683c187e7d83ee10f95f8832ee0669721a31a5c232cb23325cbb1f70cb57363dbe6f8170dc7208bb1166701400bfe41b8b0ef54a6c406a1e0010186f74631a934db7b10f70c0d67861485c7b7f572f0da59e51f9a3d67f638079292aa93b5a10b400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a069f40ae2af9bcfa88cef35746e47aa01272bba4005237a8481c8763386bb87a2e6c904765333c8d612fa2d815bf0dd8e08e2b3a230ba766ce6648886399ec6f921ac9cd660b02f39ecd3b003d27c4fff6e08b26581f0a99e880babe715830a2235e581c250895ec47c77b146f88b96b1ff307a907d345599254bd18cb58bb9384bfa9d9330d71bf2f5923acea4c0529b56e96fad279979b90f554d99dee1375b2d877f84a8575b28c80853ce614b34fa78064ba5dbba85c74e4c59cebe4042edb3672455202ec2f5bb193504ac95f00306e0d4b6c2b4b713579da328b211a4d725f445803274d2bc9ceb2c40008a040416133bc964fec07a147d4aac515823f5c55912a195ea594e4e7134deec21f80711c3c570bbb8e615d2e4564dc693fca606651ba744ff6fe3dcd3b9c3cf6c69c45e82f1c74172c55fea006abadcdc6ac127aa827c2e628ef9dc505387d480655aa5b428ceacf1dfbc9b5c895f46945a013c428ffd41de039d1cab6257bfb28a7a8c8ea872d98817e69e8176febc903e49a0c4dd13db775f919b0d044fbbe7c93c80c7a8d44c21a74f98ee9856ce9d83a52ecb8467d3498025af0c18de6c476b9cc07fb522f111ee25423efaf1a6a06000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001421d7df3a371e150cf426be8f884530deafa13b413c4f6f856304b53c33f504cf0a57c47666fb72abf912725f17aef00e637425eb8050f973ad45c0cc5f788ac984c93cf34730b2a54b7c494e9e618454b02b33296de99f82e45272e8c9812770a67d8386964150adc23d0b57ecdeb72201db66fefc64179d0b069aaa5f76ec92467a215db8844e0972f09fcc0b311e8d61b9ff13505e8f7d33debbbd9c2bad224cb86bd50a2cb745b168ce42720b24b24919b7fb14800c3a579d10fc8360ce3b4a717adcb07e6d8d7727a1b294f03a0eb885b430e2b15889a57a16892ee385287b0fd275c801bd77345838d8b92eef6cb30a3158ee6c4a51438813a8687bec941a165ab5dcea378c944a54ea29e4c15a68136b6c89342f7f76b988705086cfda7c5f30bb81658cc7242cad721792aa08ab018480350849471eb1590b331852384593524b26d799611b19415f5f23f8229f52bd1c5a09a55e273db37928af9ea34d613c14c3b456c37510147cfe22b68c7be04ca777b3741ee58ec5c3cc55401f69ef45014364db079b1d5b4478b7e8e853c3ffb877a70ebaf4d0d800a13ba8c574c816ff0e48c6ea4bd5bbea99dad0f26a747724b9b1304782dc3854a29ed000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090c96a0ac9e37fa3143f58befa961e9e73e65f1cb0202eb0b80239c0a93d911a5d53a029d8ef722ff0f63a1216a6ea052ca6b28463eee38a042a4202f1fe75b9b57a77dc55042e3659ad0236f4b5fb3a703f352698e4671f31bcd996bdeed8bb22a38f374662d4ca98e35584ed59b3fde41d42344fd0207eb3ed0e8fd62cb23a54f152a14619f465a920020b3186cacc825539de16463b3e5128c54aa21bafca0c84519e544d4296433055789f3db029164c464d07977f5b5bb16ac0c420857dfb695ee6417ad6b82753904bde80aca35710ce072c924ebe4b38ca2f9f4d96eea989fecb90358838eea6fc9003f972587be984342864c811151b9c990ca4229a6603107648d58e0799599cda5b8515492d9a841bfb4f97e896e91fa740903dfb58052d52b7fafcb650fb0f7043af0a4073a523c8ad71aa551a7005ecd8dadb773dc94a232b839b277fe37f7b6270dd8683c1f9388bdbd6feb677400d58d939d354e9bcaad01ff999e21c248b6391a72e084fe3084d669f4def0a8a648c8e1a717fcfc1ee616bfb936b33d545c62b6a8b84aa946c0268d18d7e07943bb4d53b8963f75c720ee7637ba7c799083e0d94f6d72d241e42565aceb25312ca275a1d9300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d1139daa3a1d0a63e4221f8a5366e94ca366d6d3449a4f07c8032ee46e3782f75fe4e0c8f48e152c11908e2f583ea0675283166aa0a3a4f31d7f9e0bd0ef66883b5f89ac337d2c216efecbbfed633842a7da432de4e42a560dc78130a2b186602a5b08a054547a6d3636a6c3629bfa28e6a4137008765e24e007b150c6d8c37eb01e813f23ececf7812fe2b154e7343ebd3be592fd6da230a12a766703107fc8fae5b9b79308429f914f68bcb6e21bef34da3f4d553b91f23f0ce9a3d297967c3dbecd7c4ec79002bdae6aa4b1ad0c88cf5df45a58c7ff5873f78ebd180ccb53e33893643246fce842cf5a4a0f6a39141c993f182d8be191ac5a762f8825440e13e98b3e0d2af84d2b1833aa989b199a66f08779f207453e8365d426a05e7aedf51ba8b70bfed1cb459302adb7eaf9d51128dac185dec64de91b186fa41dc122327b84cfee0f1a62fa68c5c8013ebb0fb9aa03c07500c18057626a12d17a52be3c94e8e4073f0dc192ffb558750c691188786d5cadb0e0c0d7cc8e9bfa2b8bdbdc493ce9add8c6cf96b8d726c7855f69be3c3c0415f01dc083643d77ead6adb14b76bae940d3d364ff324a68879d570b4079b3ae9e358d4231a56e9e931ee95000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099e6453cc3e2d293ddbb699f3948b811e5a3dcc9d6133a878cba7542d1da931abf42a685a0790080bcaf281861bb131f2b61640f5ffd4960cf76c0395c0e5ca2ead033add5ccf2fbcd9ce2622f3f0f490e30263d8db6d5709b166635bf247bddc4fff315e30882ade7f19ada215be3b272f735e1e5f49ffed8ad2b7fd23e853b972ab14f7d8082b754580dbd2f829866dd26284ba8cd05a61576b1dc6dcf85bd39547f7b848b153900027b63f66acb4fe88a4b85ff08f1dab89dffdc2117e3ebad976fe51f51f22b094ccc488283352c93399430adca792bcd069c50afbf52638708507428008c4551beb5b4bdadb39839bc90b0ac33cc1c611ce82a18adf08dd60ac3f5c2581ec9977ad0e528d9f5827babe0a12d85326f8fca4331f784bfb48806d4778d05de32cdaf0c78a1697dfa9081e78b7a42b78dbc061472b178fd476543812d01cb88a4fa79030b4a543054028571360050cbfa2e3e5e0cd794aa2e2a999cd0b1693006e38b7e669fe54d72f12555da224457629b526e836a504c838a81fda806dc8a8bd30f46017934132dec5e52cf92705ed165b177d0a7ecbcb867fa077a951cde8463ae43d3791545f40f84e60a990f2a3201f0056d488555e2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017fa8cd8cbc51c467a0d7f343688144f638a2df858392ce562e4426678ef1dac59ae11d67365d58e829fd109ee1d2c0ff3804f83dccf732bd1007fcb4dad3444e1bc74e62da1796e5183cd10abdacf69234bdfeb503f4d3b7167163fe8e8057e2f052fb0c22c6f02116a8fcd901dabc90e3209a84410d863568e18b782cf355e9059e28cc74c452b1b329b4e0f927e13380313fa22870f1a34c04001338a8b04ba627a545e335b42598a9489df3b1a05610c5537ca81c88c6dde9c8f16147512faaf6d443cc3d7d56742fbf78d5676d1b0f1eed1ef248a90a5b05e77d7203f3225cb65247e7d3e079cbbfa1449d77e4263b2fbca1ce4cd937ab3a082edd1af2894a0c482d897c2347d82243c53ea1c8b8efbdad682528f66123fbc28dbcb6b93ee5b2b4e86b647760d511083e71bcd569a578e6d2a3ae6ea8d5a9f81f281aa1930de30a9ae908b57fcf13bee5141e60090651dca27fe0c3f8114e15f4fd6aff701bbb688941d94ebee2cd24877a7178527515ded1f4a1ad2ecf6d63b86c894e52ffef58973f4fbce6c40c4325005d8b05bdb741e67fc48d48ed053b80b225c0959e2ec6839c3ca9334a021ffb00d8228d5ccd7062a74976bbdadbf1be273d3c70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208181c48b78de6c6a1a1c7214f1494a3551654e5caaf918e25b75867444fa2e1245acfe641e1222f38b8722844c1b85e708a9f5e1bb01060ae4dfd2b6a2301c00d5613bc294c29f8dd876cb047e07cdc7b89fd8dd46332daa7477b372cf98ca7ee7a2ea078dabedef71512c73bcae71968eee96a183c0bfe9708d0a232d78d658ac7150ba9bd9b0511949d5d492a7a90c7b32d6514062b33540540cb2320cfe4ae3b7a5084c4d726f152013176f0b9447874c191d2b31b1f7dfd7adbb1d7f4e120c8aa4cdbc0d7c6d5623fae1a74af5d498234254e69a514d633217be3094455eb67f4a7f4c4d28b9a1345e8e62f0941767529f8eda0d9bc1c6616767048138840bbdccfe4fac2cb3a3efc6c78e4b1be8421e96f430288d8d917abf378f6763686ad1c293501c67890a06aca10e339fa5f47708e517ca0ce28d56b41e92936653903351b97583e89bfa365e1f2d15705b8b48aa7bbee8bd2c1cc364def7af898bca9654b3c6df2e451e1ab75f9f5cb23551d7f558272d8e71de665558d6c2e727c93cd1b319839607058b04ce15a5bb11b4e88b4892703d275ad0ab2ee1ce842264efac4717754cf43e9d8b104a24fa31629361ba59f1a89d9341a76db4088000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008898e35885689e4926e1578f6df7bc428b235e0c309a0f04138b7af3282d0f36f6d37e8d7f8b0326b1758ec4b0ae3eb5d38e7530128753765368d56eff5e005d7e54d81cf47a8f90d8de5651736bd082a4200689f5ae9a0a6a0c19652677dded586955f2da262b9909b92b1ac2c61a690edefe08c0e00ab550f4c5eef573a1fd9a05569084ca7d2be8bb6359da21a90134cb34a3185dd778ccf23055048e866fa1fe81796bd7f06f69df31f88e34ee9a02f657c4cb186966024855f4c1bddcdacf43648fdcfe353587a80be7aa3a0cb0c22163e9c2dfe672e17b43459050c901b1b2f53e51005154d985aebf51fe3fcefb40e49cb3c24526bc74356bca28b8a5af65d05264731a7107d50aa0ccfef1718128790edc2b2f51bd1bc1438e9b1804a706a9cf79fbb8aa63cf4318b967c26fcb19696005778f6679ebc74d96f3709690bde5b7227632beb4abaf8297de49c2e59a7ba599183ce21a3231e302220536f14ff5b3b3f81827ddf0dc8addc231ce26c3ba9bad3af102eb84a67b37a19d2c12b83b8ba23d863f0ea887f164a121d83fd281373959998d565781f96f545f01c439d2d3f17be50c77233eb42987fc50f8d47d0d42039e3cb07db2900eb9f7910000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055a7b5fb14bca9dbd59712788b43a337738b4f0bebafe12b34288903d47d71c7d53ee5903b35f2952c2b37578bbc7bac65251f29901260ab1724f7ae3595e4ff329214749948f7ec01d0692f1fecbd98a700bd05f6930bf9210431226e6e3cb3d3c9b980a6a7812181ccd1a774557ad2fabe524f700dbb35f7cababaec1d6c90ce0e5eeed77abe3468432da1cecdeeb1928e4af073fb5807ab54120bcf0ff8483a29aac16d9f657ef0c6b9a0c771fbdcaf8aeba5629587bd3aec8858cde3baa2196560ab9eee44868e14affca3942aaa3476bba70c246e1601d88d8d8d8faac1c895f386f624568f6c9e6d27ccb2a8644857df9543b7f78e7d9d759ac8b30453a2f2e27d577a59ad57be484848b524af7653df2738413d3a6268aead60d3a27aa90d8fb8441212b8e7531792f99e76776d7fd3b174c6b5d63238234128438ac435251108d1fa8e5cfac1a2a576befa3222f3d3a87a175c8a335dfa687068e99c9642025b53098bb3958c7723dd36e9f2098808bad6feab574513ff2e29a497d53dc9c69ac145fe18c88a00966e6380f79e54376ec0867246c9cc5c8456598a6e4e1debce1518de7406af9a98f7a5eaeee9386296da289134d616192b60af31a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b915dee9ab9b099b07b55b6465690f1baa4aac43524822d3175db3eb822dc2e274a9f3fe71ed51aa361b13f3d54ea98999b599339a4ec2ea6a388e9177d9f493f00d28bf0354f4a2406c878a24adb362af7da0362a1ca2214e41a4a5d454fe49a324140897cecc6f77d2fd1a02c7f604cabe898fbede5b6015cae0a9ec6829a21d3c018cce6c602f45ed6049ca88bec9a6b6f828b1f88545e52fa6d0acbf26e2e7bb7d9d07e69735ec325a693e9496a375063d11c5b50b2dcb16f3f7ccc2739e495c0cbc026d7ad48c5f35cbc58648755bd10836a303a6d78cddb97d958e44fe47b0293e0218b1290e44d5ddf2719482122a7b021eba315ae2a029b0db27d2c1d7e8375db3a0a74841521dc779ce1fb45b6e4b8d3cdce6890c7faaa94d7f9e6cbb55509ef87def0cc814fd9d9f48de41f970a9e7c4ae49efd6fdced9aeddf85c3ec70ef935afdc9c5276a91d6c24bae1381e73031cadb5633efe5f8a560aaaa2fd5b6eb5a98cb3e976afb8d0322ca20585ba992ed40b6fe536d0545567262ae6e73956621b2f2410db33b2c97a1e35f326842d4e97e074d8fb7bf3ecde88559dd77fcd5981139ad106e39815b5f70892bc5cbfcd84d3ee5ba631c228bad3e7f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087b81cec3602a268f51946ec1a05b09462c47b3008e8dee1cdf358b10a6f05dab9d9e93714dfaddde40f09166b8689a3c1add0b71856824a89a481e50390d62f31f3b1993a422dd61775c604e42e4799e1cce595cc2b77eaa9ac56de5a0cf3577035ab4005d26963108bacb4c9b25127aa4726b34108a7b65959d4e49893ed4ce6dc340f30fdc8c5b38890e72f8f59c3d78c02c853c836e4666a57d7b1750cb24c6c45d0d8e441e04e5821761ed78d4784c29bdf4e817f43d77cd981d2f3487ace35859cedaffc01d99a3901d4df094fff865923ed6e8b67ac17193696505139c7037f55334144ec96cc13756a59ec56faaf97dbfeb0bc5f17a0355f0d6dcdb537a3847dfb87105cb27c3daa4335c16dde967f593a86e67b166c5bc744cdafc9042a36452ab687a29066e919794381c677fb674a58357332b74ebb0adc0c300442001d442073563f3cf253ac950a431927636ce1cc64c3bd9a86115806bf2ab2b10d19cd8a68bce55750c6134705a5d4111212009f42fae255b9e0d299f4b370424769994a3a0d003dce5b616d8c6de0b980d15da8571769f3a790d2bced31ac27674a77e645820f82769f7c42e1cc967c7733e0e4f904e6933b271d1df7aa340000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000279daed2e05666456da7a34d79bf82f8c25de7db8f6f73cf73d5bba9868dc55072492cccdc6df448f27d5cb108af5be3ab22760513819a8ec3144dc88ba148558bf657ae8befa0df0c1f144400be3864d0bcbee8dad8245b64c2f5da50f4dcb48d6859a5568f102c5cc575cc5dadbc09550bfb449afd07abb11d5a071fac429fdcd774c9f5521d2356e57e825872eff31bfb201d77cd3fc0685b9296373929d27496fe31459a792e9bf33794324d2354defcff89f1d7e1c79976f8fd0e9efae1f51443d8e1ffb3d068923f935dfb5c2e621a9a1e90c4dad1f7c288b6e4f53e70dfeae56d9d1f9f143d643d4fd51b02d2c5bd5fc77a0ae35d2da7b74d36f72e453f2372d065535f5484e485354a16055c6c6e57681d4312d0cb1d70d42ab72086782a117c778c1d1d0ddca70565aa5baca24847a14f522b27cea0c475ceaa5625eed8c39b9b59f636d642c941824003f4fb76b345792a767039feec0daee9c69c3dd4d1170ec9d52f83019643f9208099fe4273a57a0eb4cc69ebbf5650e3226332860d95cbf9f85d88b81b5f16c12650c5e1797de064bd7b4cd4e87769bcc5781db9b1b92c615e8c292dfb8d136e18acc37f1d2261b6e597029765f330724f0b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092bd08a793b6d4ad14a770a65f6c6fdccae769d01dd1ef9689001147994a0e0c79910f46e23141605691e0b7e8223b3a29073dffc3b4cc94226d5a10b7e6c689697821dfac718f45efab121ae12d7593e69ed724aacb8c19cb1c691d385a4d7fc414fae6b7638d88d738df8e3c5c758b0a6cee4351084af977f1353243b9f20ed7575546d71559803bcbbc8295b6033eddfd7fd89323deff1ddaff754f2885038dc6a16877dc4c7ac667b11ba8eb02c6eff34fbeec71ed44bc36efe27e678ec253e803b462dc9ec19d59ec34483895dffa5188473b9ee7f691378e221ce6839df9e9cd5c85df0406f0cdab21fffa00a3bb1b91a8e053c65b833afa8b86e949227271049e2550187e51cd85f5ea823216db5f7b3d283ceb26ba6f6c358e9a0dcf92eb14235c727baf21ea15f06f5f793c8557b948c93e781b396236397e6905fa05bcc24947a81762e8b42b9ae55ae9750f6c89f50749352928f75fcc98eddb283c3539876dce0e4b0f57dee7d42f9277c993d2013014e00409d242b5a3aba2b4563a6e2e34645d6c5e79b4d799d0f653cdd3396c1ac113d9a197c8aeb85898f2a90b136dca331b9097d556431c76a9ed1f2f34d96cd62b5eb6b497c6abd165720000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000251d4cbc34286be299cf301b9d97999a43094f9c13dae78a2b176715feefb804c29e207e503acba02be456487a6d2f822140bff35e14a428eff1a6d71d14962f7889e943e6a2fb09472005e79a0bfe948de82e6732cd416b5df12dede28fea1e32f1dc8f679bf2d72a99a2618a8257fc89a3e6bf8b83ac126f342ff4822c59a28d1ad1874acc9663f4eca4f239a16449faf88efcf45d6d31a6299140bd93cec0115bae5f0cb9a62c360e6ae70d2f4bfe3929abde82d09ac139b0ecd580c1089de9959173fe821e4596aecb119c8c525839a24b15e0bd82d71cd4d629ba6ffb99fcbe41ef4776318888bb9fc600f9610c902b7ffcec6a0ae71c4643a2c21dcd20d21d98f7e5aa98d9f9b6ca7fce5ac2df191002099f7dc2ae4c2cc4b8a65d2ef3a9640b26065b6da40d9ec8321d4e1fe9307210f180d354199587c25919b3c1293f32b2c4b7eb80679f0a201b3e5a03164198b62b24d1dc74fe4bd93bb7037a045b149fc869fdcc99112583d8b031c5d2bd12029552c0b7dd7f8f181d542702017a4646069c7b98965d9863c24b262af69e664efad18f19191c79ded05316ecfa87fa6a08262c68fa23a3fa44f6032ae3a3d63cc1f8714862a60d1efd34dbd2d300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009305151787b3e71b01e684d76f6a576f6ef4f58777beef7d555bbef2477edfaaaa0252eef28e41d8cdabfdc2e54148466b5a708c795c393c2eab33dd66cad25e937ee61fed89438bc0382d4954a660459ff3d347f7b045407cffca7e21c7ac38907366a5e53de7b06c2cc45671a002ef50d571ff22099c1cbdb1619981e7f3dcf32e06f6e3424ac434ae6ee20e38d12220c7a0dcc42a04091c58c90e095a503dbd2475a86abacdeb59dc90ae8d3d2b70004897e0c889f5df1f875f6dd52e29dc3e9bb66667d51915a8c6d131b097a859345e976a3b29823646fc0e952602ee5453e71f9b632215e90869fefb3f8256c8ecbde92ab83d72025374e405f279213994c1fa14e032eeef18b15991997933e4be99c73903d09170df1dd034110445c7c8d031723a026b1479d68512c809f512ff764a334e9c649d6e38775c6e4db284296da3dadc6a86d3725ab5dd6a8224e8f9ecb37aeac46bfcc63a4ef2994d42c100462e27cefed819f6acc1ec389ba699f88b92f79d1d1464eb731d14519d076a9afb9bb2f6a404a0d80cde99d223d3f203bb7ba2b5c0378d8a38e8e18bbe0e3c820b5d988094b6016c3599397c87b9935fa35916ba9a1193a8684eb5cd14017c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081081febbd4b9fba80ea6514103573f27e50292faaae62922c409b8742b381bfedc1a4df6746e88e938e78c38f4205f580c04e09a2e16a6446f24c7fa295f823cb44b0a61df1abfdca5b8734a9e3c4a7f0ffe66ac792ece1d975970f20872c8e6a414d82d6bc0c19061e2d600cd04fe50be853debe318dd9d5f4fa3377fe8d603cd36fe1f0516ef901f0b2fc4114f2e697e72ed9ccbb921f5f0444aa13fee2c204041a06ec1887ba0441683ec926bbf847b74219322b3655b164cc431be2a080739a3eb7fea884fcc74769be5a22c766b523d8487aa04fa7430c8cc81ac8dead515cc9dc68f6c129546eeb6ddfaf36f87324ee242430f8009a11998609e849d5db2b31916e8f43ea0079ad46e374e83960021a9f5c335274abec1b739f3528bc9840930388802c53b603386ef72349dfbd12e4ccfcf5d4e29339f5c6c03937cf24711ced9d7539bd95096790d7a1770bce8ed1bc58fd36e0d71fa28d0f8d3ab34f863c8441fa69e05136afe893f5ce83c3a228d4b9156570871fcab9367c6798569897af3b3e491b4ff1850433bc0856fdd806949607a962e0d73529d3f2ec28db59c7354c5182dd9e03c65e6a7f59a6d05361cdb57aa19c6a91ad6b20f0af120000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000abbd2e54c1ef88024e96309abf1e4d821e4692fd3eff2d845486a4fcf0357882d50e4973a8b023643de2be8d27a9d2557c7df90b9e77342c464aecc22a19f5f487125772a85a65925994f99d897caf13073d2a024008a26b1168cc06957534c2398704fb4ede2c79bd63163c863f188a99a0d06954259fe8ae6531b27139a6c09c0a6f10c26f59be6c6efbd554087e45a6445d557276d94b6d27ed382da4ceb2f3b1ae10c55ef5177b3adc344c8eb11b7051922ea3a55f7e842e608c57ead71f9e991a1dc1a94c15a0a74674a218d7e4570d2d37752649332ad4b76b621157677f3b9ce7594e540cba0bb132a6c417335ab9f1c3ea2e1b6ab2522fb1188cfe14643a59eeca4c3c263cc2fed11caf669c249daf3dd2eaa218870e57f179e45de5d6f8bc470338720fede0fb7b5f111ecb9020dd4447bd4d05b92ce07c2e5e1e777582a9fe641b9381d8db51155515dea8c39653904e731821eb00b1af343304c92a269fb9813d8b3a1ee76e07cc3c675b91778574022a1cb114795a9095c82e653d15cafdf8a69bbcde8aacf33385834efcd8f7334840c4eb59b57be82e58ca14940e984f114f2b0b1db55b23f4f4439e1b0b3c602044fff22b00897282b4c59a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085fb4b291b0c39f8fd1d782a1d766d14ccf1bd29d8450c1a48d826a0733c2c2a90c82558bd8ecf128510f14d2acf8c23bb15124bbbe9b12faf276dd3fa1ab2dee38a5c29c0ccf856675900ca171290c5e996f3bf09d90400cc1cc3c886872fbb5b0a16ceff6b6c95d703cd2bba861536bb9dfec9833795995b13519b91e4e89d1f3821c80c0cb83fd9ec4c1e115ea999fb60224b51fe65b982492a537d64a188b914b6e1f83f3521dbe54301616d1e8838567fa7f616e99c83384495a3e3af4f3eff42efb45f29d9a22ea9e297d2102c73a5ee665ab2d54d01441e8f96ace60d1b42c2c5a60af39ddcb305a47d0a9e41ca49fecf6b7a7ab5d04a61fd10df0b7b43e5f25273909375f1f676735294d9acffd88fa130707b461426701ccd07ced283f38e6fb8a485ccece27d63aa0f58411768f5bbf805e5af8868ca9cf944c386627ec4ff4ea227328a7c80cbea650ed7374aca4f55014fc6c49f92a0d77f61cc2f47e42585853b94e2461cc38b169794004ee470e8cc0d4c54986a72edb9193fcefea5af1139e9a15f39dbdf369c4fa946a645d134601f48f6ca6904da59a716ef20a73190921aba2ec473c5b73440eeaaa1da9362a9e775f5b0820aa4c12bba0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000237b5080fceef4f26e01d4716b81e451e3927515db3570afff083fb7ec4d6bab15a76606f066024c932e421f088cb58e3c30ad57af2cf4c9aa8e14a867c8492610729cc6ca94bb572598a1628e8c4df1e0d4baa3c29de149e2d1ab7dfae034f6594cdc0b6c3c841527757f252db8ba02aec6eaf5a4edd03c528173746119907b3f3d29a657596d9599a998081d11a1e365c4b248209d1e73b8fd63a9f64ecdfb8864c42226fa289b96aad5a8f60d7e801dd2d5dc82829816a85f2f72e103c2766da85c808d4b9694f1fd67652ce735bf376a1c58779fc5421927007f1d9bd178039171e28efa50bd82ad37ac85e0d371a5fcce78e938f19d77a2e791ff54f1984e54080d24128473d7ae6460cee8f88996d84449159a08d6b7e55d1b8e7adc60bf6e18140abec14559afe4bdf67140ccb0ce095d4c94e6b9b9379ffd99d5fbbf57c19c2d5bc944b42c91d5c170218b0d5001ecb809765c1199024fd8dbebc3a61533f2998d85ced3a747c8a14124268c994c35ce00f461908339c02537c6436d886e5fa80532b65882984b69be860561a1331e8af295ba1559e0c71749c58fec62eb3bbe85cbf06369bbe18a3251575c290242842197be25a65ea4278d39eebe00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e7aaeceb9101e9be77ba8918baf471e65e1f4b6ff0ba5edf0e53b7e611adca56e86ce482bee7f17dbc39238cac997954cab413f507f46d6d96ae82f1773499aeccb81e98883802a300c58842f92ab6cc986e94da172904f90d210700f8e0cac1da0f4f6430ca03717639ef9336686653772ca5553f97b01aaa118020a34b43fc42c3e70fa781c2610d09ff47a66a56880a5a1b4e1986af22357df5b418777bf0f4316ccf58b5c296282d4821ae1ebb7cf3255e2a93c87b18fd163f51f03f3f5c7371f19c634464e3b37c577d17bdbeacbe1afdb68168dd532335d3f1bc44bd30775537a6900c1609f792553a5765aa19b8be50e461ef6cdad95a6b820e9e34fd4bb07abbbb27ffa66758528b2aea0f2e49990f875eed9817647b289f0c615967caae2c9792aefa0b144af3af1a8469fc0c17d9057020acd8f518e04dd061db5f39e16d052ac5a6148a4f80e8ed7aef5106b4f47a81185e745bddb9bf64f30b5dc64d74889d2d8c98cefda8d6e838d90f3d49cd420ad27824e464d69c6a75aea62a7474cd687da6f3410d16c94ecb41bb2ae09ce50c5857b61ea7c8c830c4b8cc86ed2ff3456c9320a37184cc336c48906347007d5ad2a4fac7b33bc5db04ac900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008241b45e4cb469a711ea484a104e929c34f2ab2695c5cd88cf681e384d410918035598dd80576d2ad04d4b230b15b1b456736e2dfa912a2eac8ed788813ae8c2ccefef8e14fc18b0341fd875ca588740bb23780168d4db3c9ef6b507cb4aa1c35c60aa07ca0d302e7c15f66a5dcd705cf98bd4d9fc5645cd1ab6f6d9fed3d6cd0eaf396aacfda9d528cff653100cc0d06b9822f8b366a2e6a53c8e0a24e358f8232f534b64c28cf3f1249c90b6c55fa619b4c272de1e1140fa7ed58d001fab9bf57f1948fd32561b165cabfa99605724cbcc03e720af950ca24202aa81730d9247266c42f293b942922847abc63acf9685acb5dcb8b967d7e8874cbef77b9a903017a7d769f0c4ac571ea0fa214f987b2ac7a2818dee1614f1a8f3a6899b8df9dce055c1902a3180b913dbb7470b0eb94bec32d07e0f3c50cd5b9dc007f752f395b5a8c61093ea15739ed7f4e8fb40fb69379806f661f96f9d73a7981bb6e11b63f3862c0d134056c539ffadff001b3eefe007555a9ca878bd48a22350d6d91d3d032f758859b91ad2cba3c6d1c159c2c4253f07a470be70c6929090fe65e0aaafa1aa455651f8a31caa6952a28e26df2115413038a398ddadc71b1d2865986d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c81be1952a5071a1f3133688b8e9e33616f2baf6f462780f8775a14bd269c996e8d0e19ed26d875f6fb52a32e80511c72d5d9f5752b4d362f521d76736aa7c2beb1d1bd8405eef71c5a0c056c3fc8cfab647ce8f983dee0f5fcd7f3514963ab771731ee51ee03fcaea5f64dee4fc70967c2ef40c8dd8aa6040dc6019ef798f9f5c66e3a99d279b6d355236f95f5359b894ce2fc0cfa758c7f4c26c915e6b6e72275c43870c7f4193c3488a52d37cd297d94819bc7e2c7376a218e1e4276891147133bb7880d16b00ff99c835ba2af3c5c76cdfa67667e9a5c4adb4851243e6277c658bebcadd37925ba42e1c57fb453bb17dfbe6689eb4bea020db199692e8f506363d7b33cbfaea433c5c6cb197f93f75e15c86c172dc7f3c2fda8613547e728d824baeeeb3655a2ed8d44c39b814cad7fe6c4b6e80c5655fb31621756353e709df427222b4788209df496be1a62d64e04022524b3269ed0e24924b1333f2aff7975f4bcca9ed61e1b99f13b37f9277f954421b3163dcd8eaa82a0f0816c51de4b91d60a15650ca98e5203e0071be6f1d9615cd89edfb5b296f33bdc323c22390079725531bfd216a5ff1388a50e4b3aa5d9984243716369bf72a3e8f9426f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001afc36b63b1a3a18f324696324563bd75b4ed89cab79863ae1a3aed2d9d174e263b111c7e05289fac6faf0d1745c7d8af193ee23b6daf61550995d47d1ebbaf7aa03b79ce7d9289e6d5ca126bda14d73f6031763a163682bf2af9074935250b199b293d4a513df74cfb4b1735c98d00e19f52629799ac089aa27f23a2e6a2b8e3f9f6c1efffcd6acd0c5dd3e4b27c642e552d91b87ba0e80262679d76e3750d1af63945935c43b33da33052990b56e8995ce4b4db273ce1d20e249d948284d295ffdb5c487210527f55bc8332718c233d305a7d6326cf250603c378ba6ab3928db5d24006f525bd2f89310bc9702686d5fe61852ee584ff532308c67de950d04f58b7f98182ac6bf6dff3540ca6e84c4d34b5dcb5ab16113e839232da5d298c0270ab8ecaa49339f055c5f2838e3f3c7556e052e3aaba71a5173e293f68478ac702b37e5a86a0193031d4769a83761da7baa0246464c16962b909d26c9a73a785ff4cb62b518d2e79ea353ea9c998c247a2ecb258d39d28f8d56b91ed5b651c6935cd34e4f0099b6871ce25b9b882f9e182985c77f17116f97f3d7c2ff54c2f8faffcad71e4e38ea2876619f7fa9b716d781d2f010319bebd1cbaf797e3c5a3800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af60a58a97802d7e4de16137053986316cf1a4dc5e5b1de0f9252b262dc23572f8f85ebff5a2a932930bcc9152530b24afc06b9f48f93c5284b737a9b555a7190d9ffffd394f8843cd20cdaf9c0e28b4e8c12664a7832f83c95cf892c6f39df138abf18f8df0114eb5fff3c87c4c7c6290fa9cefba9ccbb669394b5b28111bb19cbdcd7cc059777b22cd9a6ae8c36ca8c6c24956004588b6321aafb604e792f11ea43fae49ca243095987b1510ae7c877ca4da9f1bf2b416326a8db35f50d0a5bf4a246f8a1cb4246c6113f67d1c52f071b5dc0ce1c2d062a59e856be3de7c2d001db9b2abc0048f4eabd9f39898ccf61cfb010bc69f48d95928df0d8e8a2af23a94ee66960064d16b9722b34f94617e913f0b4f54989a10168ab313dc1f7c31bf79600437a0e4c93c12eab825eabe7fb0d5b6efde07c0bee276a716ff1b6bb609588cd6e378efc43d535b77d46828079615318e2db9dfee61d605791c0780cc5e4cfbbed50161166a79f5fc9bac6f0f499dddfcb86821eb6c37ea73810545271dbe7bde8064e416efe99175d7e931c797dc09198a3e3f9f0c79a0c51d0021f7d0903e90edce286c3e0c7a04572cda416c1639b25f4a8e26bc00ea2b9ae5ec80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aba7bdf461072521f90f26ea65d8caf22996adc2a4f9d0ef9e519c96d9790f3ab6170c1c1a5ab3f85f3f5f004032af36596cdee8fa1d77d3e4146aeb24113eeb8e104ad6769ab13dad7acc34ba975b53b7597e0e5fdb0cce34f4dc18e4f09bfc049bd1fc9fbd147480b898beeb3d7aa4a7beef357daf6f1946c01f877037360eab0752b760a5de3e29c7cf75e09a32bf6cc11fe6197a6bbb3d7ef5ca463fdfa4f92feb10816eef59dde155cd0e5300d59f98dc356cb2104c758ad6df54c082f01c1fbb1a84390aefd5a933ca3298928ce1c450d76408e3cd00dffbcd7303ace2b79e15230721aa0e40f4ad687c6df909fefe6a6832f4fd59c8a6beeade707158192f5b6c3825fdf7e2f066e031e8935cf47db3107ece153e126122d221d745e87355680dbe3885a64a1998ea899bbcd49fe7f01a6c724d6045fb9bfe7d0ea99acbc244e8a0a56b49e5c26a7b32d9ced55467e61e3983738e7c2eeaabb30467df9fa9f5badc7a455bf7186b532cb035ccaa7f7ca8cc5119a839d7e8febf676b2f16ef214576676dc802c9fabb7204dba293b84f2361036811c1e3488e6ff8a6c508498b30a9f10201132141b5d57f4d3bfe1d57b160d8092c2bcbb7d6a8f46bfb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ce91deee6b3a1bf032c7c066acd1d0e6cb5b733551ceb8927a113479e1d37a8d54b9947f972baa56e6ad9a3268eb5f632c4b6d336d0311acd47b504dcef92fbe522a8a2b4dfe84ac55f2992781096161534c11246bddfa3d688e7ced62e8cd1dc7b51a71097d87f42b539292f8dbce49d7d5c69ae8701d7cc7d5475def5e34e6adad675d40e660022c9bfe80c2e95b6d3ac4365b1e40cbbccc49a160bca7897fe6230418a83796a9f21d76f251942bc9d1b91f047460cb9d7fc35358d68f948951bae2444ee79f19a19e2ad118b78c69ef11f419fd52629e79c3ba6da8809dee7bbd1cc28b12aa4a79fdafd1b84b051110f509b3dd8d1fc56b65f4920fd01b986e0ce591d68d766cce2ee44f0dc88d104971a1d12b20e91e6d41ae88a370006a003f883d59fea907741c9a6c651bd74f95c30f2cf713f2a2de15a4cd73bc4dee0cdfc74e641d12701f207a531c43a9c833f7898ff7a8b4ddd0bcae1837e571dc1ce41f9617d05f444ed0a7963dbe5153dd6f2b32e8325770edc530a641a62f8d2917a8abee6c7290c42e50618b1130d1183ad5155755f07417d88cddebcc6c036582d75f1d79e33bb16e1651b59ceecb992dba813c3b1a2476ead29795fc52400000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484011808ef9ac42ede8611ac276597a2719ed50d18f9b060e83559c781c724373d311ce4c5ae3adcc12ac7923dc96db24988e7f74cb55822148795f6216147c8e0318ea944642459f41075b116b58d5ed5c4a4528bd8650d436c946b4ddae23b72a13cfa88f596d235d202583cdeedd8f97939018dc26a43db65a0c9b7388b81c6018405167f3b9dcbdd954a2a752ca19c70dd6fe5abd618dd3ee58d64501e681412521f263e2c4d5a356e2f74e14b513d2445aae26190498efa019c64a2fc5e3c50b20cfd4881729e3776b07f9bd068bfd3b3094681886948299004e4fe7e18e701f043b4b7970dacbc70eae766a58ab1fa13f51fc608bb15c3e6c6f6e71f84cee2794dba7ab71b5bdc19467a1eff9a87a45c4289254b15402503900cd1b7bb0df0e161d3a9354674e849fc6299e576a043e32b77cff35117a340aa3c1f1e59cb00aad169a1adc775063fd7f00314fcc345803a127ce9a5ce25674cc83cd1fd46128d5322cbe915a6d080522900b3b971c4d8d3647d02046ec6e846dcf94f763780a26079a56d4d6fb03df1e332e64f8b649dd57884dabce466b334677ae56b7300a4a7668bc4f0a69e878803fb274b4a193352f5948460aa14d5cde9af94e72381ef68d07a7d470bbed79e85b0c5ac99ec4a49f1436b545c6a35d8eb7fa6bf4f624faa61f49e28f1c0acd5b2b5e054e0572a932c6d39941f616f4285795eb6bba07c824bbd50f47780667837fac4c1ceb4dfd7c37e7389d1c929ff1cdc88bbda61e77293d03fe490adc2a4fc54090783b0de18ecaec50b655d6ab1b0bf91f3df414cc4617aaa50e8bdd99e2c152a1ccf63d7c909fdf1214808c9b619647fda8792f4c11cb45155b48c3f2d2d3a38e74aea30cf2ba4cd0f52e32d9aa470261ede605d987092410585e7723d2c3858ecc554f2065546c921c2d789a52339463bc7c14c88cf5399e7c80abc5b2bffe904b92c766987f014b27b33cd2886997bddea81131f46a5558c6716660a241df52a41bea9ba7f1cc6ec15a33b84b8f3d489d0704fae5b894facc752bacb1ac30abb866041c844e26297ddfc02fb9451036c7a91afe820c474ea2e7c9e1a26256dc533d194562916fbab7acbcae2a0a32c66ed90a356a1b3bc73cabe43f15f904645579d6400058b1a9d1e13517aaf6024cc6fc07af02187e70fe2a8f67943b30472849d2877e00413132584fac097ca5b4038616cc7305c76e02ae2f8fe105954d82186e003390e516b2bdbe0f0fd07c1d7b81144094b1523afe4a30c365d5de7f28ef4db2fbf26448e703c90f5370013f8e843034db855a10b89637f1010ceadbbe731eac690c4cca820f80e4dcab4e9b6c5819c18c2ca4bf7c76a977178fd7fd4173e4c5cbf79ef24aadf7bece0a431d2e081f38f770143cc6db5f9ac8f07ee7e6a2e92ce34ef80881d8bd6fc8d65daa934c0bae66df531d55e91236c3a383f347d95450eaeee04a7c380ae868432bf63fce23e87fefdeafc5b9687bfe544826e39f1ae4a63c7434a6f99dc70ff52e73f9740f2bdaedfe6f06a03e0295a4ecaebc4529812a2a85638dba280fa96558d8b118110cc4a763c0879b0315fe69799235bd034904cc3f09bfdb6bcaec93212abfd2148f50f8f8199177ea3338ac2b78ee946e01cd4a2d0df404e73b31596562ff172f7fa87611950e00f067d1448e9cc07de012446633cc7878fca5b3c152d4389a23f8c45450f6a3645387dae3c523cfeab217ccc63721f3b370eaa5671605581c2df571f9047056451bbc88f9c92456d3647783aad6df37f346e5dd841d3ee99516174450394417e4ee9550f279bdecdb760893fb65b7c7b6c8c69bc5af2c040a2add4bfab8f16f5790cad1fcdc2369f9ffeea8118c3f45ea24dfe1e6d6209bb026524158c291d51b3e4f650cb2f559ff5a68a9a695da5a2ac1b36fa125c7ca4e1284aaf40b62d1205e154d659334c8132bb877001799d3205ebc108f2e1462d00ac0a33bef908a051c57efeeb447ecb59dd56556763d40a65194f6b40685240b1550613c64892f64e504adecfa302173c1defd95709052bfb180151422b438d7159d5ba3a83820aaea4c4c182595c3cd9fabdd2aef73842887b0490a6dd02f592bc2d1a4a121d7d0c9405ac32adfb435dcc83cd99c406cc678c84fdc99d4341213ad65613205bf88b13eb8d4b8d3ea334d47901789df2c3a317d9fc4b238540d28cc3cf8ba6cccd072b812ed212fd3160b95b5dd3c1694697d03b2fcfce6dc2f202a4e6391e117e10d62e6e6c75b1a261409991f5561c4ba23450b967be086ed129d13060230b30dda2bd695ece9880c869b2b12ea18fb1b8e1ee80307558b3e196b56d8729501e4841cd30ef9f2874ba1e4da51e6c5b6c4f0b0b3316a8a903020bc435c63d042139eb997202301794372d6a1b57b2395047730d1d50f11479d3053b3b1029816338d48d761862e4ca31bbec3b8e3b2425756d50850cd7cf292271469cefeea700e25166647e3abb8ed1d0d1ca67b99f4ba62c454556597695c198a10112f145ab490a4e4bbb3a2ac14d2f1c6ba8147aa07717ed063de530acd2d6942d450b7f9db167da8c395aa4a0317752507abe4c27e960ca1d1f27ed14d01b5fa463d5e049c63e1ab5611ade755f3b9a113f70e0d1e29d07bffb4046f482549ad23c467c12a316329de09a48642e96e8dd0fcca3c341c1896cd20abecb320522b20d6fb16c02505d93ff6e254f62e9caa46618d40a289c2c4dde6c9a5b4052cce5736888c2951bf71652a71b0899bb2e17235d5c167798330745d6a0d012adc7ab6c2523302e4785b16d7bdf14fc5a3d531ae4666428ea6c82ac5c1cba01175401dcf9cf2ec73253151e51f702d22ac2f26ab829c29f762ab9d7eb5a7fb4014efc42a191d509c9409e95b399dcd7bc7ae7212b93c0f612c4ddd74be3c948c1d08a908447dfb24323188303abd36ddd75c4299d4ed87edce7e5d42874567662880cfc39c76d081be7982b243fe22689a56820879af2c220839853d21e1f6fd21fe0b381b21820d30759eaef9eb61b9d9bfd73754f9899e2dcfe240382211832eda8f1baa39a236ca4a0015dc751f2a79cd99ed369eba243d229f9181a5fcc02872f839be8df3a8b3856ec7eea754dc21b7df946f2e7c09571e60d1bbc665040f2a7fb6bff876eb2b99f76c127ec7d49119a737ced855aade26895174d596a20ada26fcb7e65da688e6a1b999e695ce1d471067eb75445804d5e015f36f3a1d2b1f1e92d83661424434e11d424cd5b568ac197a321e13d50f9a0109ece63fde1b486e585a033a538cae9409b1454158382d719121cfadfa39db63fd2f4729e61fccaedd00a91b4c1b60da508eb03e7c65261cb052c3d871bf41c3cc0b48e7d31bc10317673f202f5e44300d18a4d934bace8c317cb4ab0fbd2c660eb59fb2281f232341fabb7d38fa780945d84a52b7f0ce2c19c79f06e0b77b3da53f6561f31fac2bd81c44a8e279ba40ecb2e1f34d608f6f986946fe99254dba2eab669a3a18e668fc980c419bc8c5f697ee8fd6798d1f66a277b3ec177ec7e250b0235d102a45f7210c7925e69b20bf7f870e81784acea561dd76e247da76cd0c2f4eebbd2f9fe04baace3cd505c1ff5700191c69ba30b925e652029bbaaeac80ee0fbe901abeb7e9e7eec07e67767626851c58f559c1d3a6720e754a0ececcf02158efa10aee76a9c0da9ce3b6a278601d64338e25276287a158295455374c101d97f8c92d9788fb89885172d29a0e191e8bdd7809c95f52320ea953ecc8c14f41747c9e0ca442aad02afd1a88fccdcab842d6618b31b52a051bb4cb43a4ca78d7129c2d2f084fef48b32c287d37e863d9065b9edd82ed625d47ae4a857ea0847550d2e4077403a6c8d96757784e0aa002b37daaf2a87a2c4317a0018860fd8c18d647cc270d50e654c84629d43ff26032a07e6694fc2f49c0793c3fe20f6877a915be841b154c10855052ae9dcab9b46da6b29ffd6910ac28d3c67dee4ed2f696f8b114008a3c165266a54896d6eb4d472e6ba520b94d40618400d5a866db576abb589e29fe2379d717621ce751be1c47492a86367d3bc4f9be63b36d8d1d4393940ab81c22cee6cfbcaa3edd4120fa2a9423d9b138613c1f48c93fa639f7d74b1572260acbe2f6eeda190aad0f0e60220f258c4e955348c8f11076c1aa9cd2bfb764fb2acf4c48063c28e3eded6816df6ebc83eef25c91c82f7512d5a4d417895a64631bb06307a642baed24d0f93f7817cd5c0cf60f1e449e23f239511649a840808e30607cf4a246ba7b829376f9b8461639c6acfd0e95c8d981559739cb0906600a1ec29640ecc87ccd52fe38171644c41b6e0273cd1833c1c18294a7ab7518089a288af0b9005f291892df63374676326e1542eb520782fb768c42d881a9db5913199269533e64b5ef9c851164b7567266c7f3421cdd19b8b9df7b8e52ff40401416ff890af80f6202ed998358a5bc732453ce2044e6fd7943b9aa132c901ee3670cf0cc8a7ed095e3ba1800e961a1a2dc187ff948f30792f842e0f2c7e1f2c9a4140768eba2056ec72c59511765497db60501f822ff8b519c1fd2451e9f69bd7108b33aa15d781dd9b75b47921941daf35df6496f515e9c82a502834c87093174087d2ffe78f1c66c3375df8f560eee6fd3a48f07411a7e31945a43a9dd67ed7c28c9e033dfe8c3ca6ebcc76d9f73b256a2a63615f26daa20d9aa7872a9dffc7b017b4c0e9454a6c7fcba48303c31f8a72ec24810f43f6296d8250734002f53bd0490927dfa1e8f9964769f41c86bc5f41d8179e9308b1d4920894d62609be063280e7b40b2688484448f06a25952406a231d55aa44d2a156eb5622b294b1284d2d170f9322b5bb30c28abf9afd99da8b992f7c46375193b404d5ae3c5066dfd41f8043c1c6ef1133edd72e9bf552991a818af00bcf98ae5d1f1ccaac9e4193bf2b9975b5f27ac2f2656dd09e599272067a9155ce11569488f6a93273abfeae4a2dd6162032c5ba999b4a2c7ee20371ef255bf1d6a6f3c6feaf6be4801714c6ca298e4da2b7b157302c11b7df97b8fc738ff703bf15a9ba7e6374e6445562cf9d209dcea7576022f43a49ce67705f80a3eb7172d617331b16661719fe0bc4359409c6cf4ecd97fd43a44542a866b3f21d1ce44db6f80e7f5f7b9df04dfb2a088f22f8fad780f12f084edffae400111316937651a3a6c1fced9e78d632e3a057d00228c8c2ba5d420f790716ac3e4ba88bffbaa0b422e7483865bc6e390461f768255c869ebca4a5ed92195e9f21a2a8df0f0551ff1ff217f52abd80c819f784aa2b6c0164f0d89ad6d2194b913ed1a4872502fd4fac321a5de7aff67c852569e32b9986fb55fcbc195993adb806d24eb28c0f36c656cc4a75c43f80f2ee096a0f0d3b20f50d9a29a3e7c11738d7348c57a1b83d8ce2fe3066665658339442594a1775b6e37958ed4f5c824eda1c2c214904a8dddc70ebf49b663decaf3dab6928193aae9e1d6bbb58f734ce46b9cd0f6ad164eb8aef8b55f37ee7f48d10525a6404579b2aba3ceecd2362198888380f915d7bce6b456dd67531cf1dd6f3cb00340f0ec7e7c50aae1a23b9ee2776c70d55b324c863e60aa4f27b3a616ee6e0e6fc06176f32d6f0ebfec4390989be3f9c6c35b8bf740c25c7b00a3d3b46a0d1c50b0c904f89931c02319664e95bc1b3e6776e53e8d27bda3e98bd561b508e5086272171491645ddb7ca32e52fa56ac5cb2d260df67e6aabace34aafdf4fc429f0ce003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000017118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000170d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000170a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000170b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000001729a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000017141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000001725e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000001712978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000172daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000017189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000171159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000001705ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000001705c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000001714d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000001703db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000172ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000171213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000171ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000001714fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000172b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000017305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000017280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000017223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000001717a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000001708858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000172618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000170f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000170e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000017172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000170b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000001705bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000017137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000172e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000172297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000172608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000001718373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000170422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000017204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000170afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000171998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000001728d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000171da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000001721d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000170ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000170e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000017107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000172f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000001709726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000001724f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000001703c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000171fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000017205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000001725110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000017283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000001721cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000017094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000170c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000171f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000172421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000171fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000171bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000017304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000017000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003033e1565aee7e5abf19876205edca8545321f082103e51553a307e7f1846e2688a1d064eea72d0498d6d01071218f32f359fe837d15fa5869b00a84b810fa36c0d867e817b4a5342113157df6de41c422b1b93ac62a8f13400e4566f4ee624aed7bfef88582e366be0044bfa347c4d0242227838e23b4792e8d6d64e193bbeb247c8a71dfcf6b0fdfcfc4e7d48bfa57cb59fcb709b502efca3b03d5028a8266b0320b2f2a818256df42d91ce8a501c1ad95963c38fba4c25d427fb1e7016706add0bf53f468bb2b4b8ee2d6f26c44f947fd7d7da11f366d7d879640059dc2e48b084b430213c14772bd92a716e1f4fa9d1d93ee586f62f87076250303c31053ab7309b7885030dcd93a5d6532e074d8f11b0eb1113354ee09926e4ee466af3a0458ce0c599acc46813294505705fbdcc7bf8c894317cdd83896dbdea53731055da6f04008230724ed5cf573342c919e8b2b0c84974773f3bb46393f2f016e1f85f685ce5b22ba57f7b3c5c20d5ec377d2d5609615fc6dd66e66ea48ed21e6999c1a8d5d203f05b9a088adf1ecf68e020c80f017d9c2f250f96075b1eba27a15e2769fddcd5ac00de83fcdc85c4bcef1db17c8ceaa24568e4a2d31235282c92300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b9cfd4c134c479ca0ecc163166b7fc01974d6ceb1c6d484e87946f0406903d5d6695645ad096ea3d417e6308596682ab8217ca09614b0dadd11b1c1fb031d156842ae8549cae037ae9e8313ed1674a497ce41571e524d41766d67093661a444154199e0ef3dfef9e07c9412eeada3072d5caca3aa1b441994e1f245256e851be22800eaf30f0c3d64a0e4c9611b862b9f1fd01862a822af459f4a818601595e686558d48880afd73ce390d8a82f071db617f1aad23394eca7f044b709a69ac80aacbf4e0dee256ed113026ee2044e99ada22d104079a6120d4137f50a4f9313937d2138a7e0a01cd167280991529a62bd811341b820b377d8cccc97c1742f562077f0dfddca155d10cf075e8df9f3bef7ab6f0c83888de9276067c50216b8609236b4b122838db70e47b780a5c69807236f9256eca4805481e55261673bd330bc6f30983b58cc520e4d7f76ee759822a0fdcbb1bf95ebb0e1b0f8024e0417295ad6d661bfa9622d53ad92075356672068bbd3ff481b13563ba2260f3af10869dc4399b6a701da18062ede4eec25d789fccd57794a8771466c6b5e63493d3e88c18f729a58c0ffab29849c80b072c571b57783bc1c71a8f3b53e33d7f0b02d5600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e2286e7455625397fcc191b320449f50a9ab6f98086fdbdaccd06a452fa6d199d6aaba3d0c66736503704e52fde17bc0f8d27b88eb487f99f63ae762da6a5b7e88fc01b95d8d498d98d51af8662f069c994adfb5887a682c5a573b3323a3e06da6de62b51af4dbc8894541d0d041e2808e99284e64f4ad421b53a2e3fdae534f6b697a6095df4c0581cba76d641adc605babee7a2b86b3eca188f54fd46aada3f078c1f13cc3263c91c355aff2d9c5ca44c2cda4825ee256af49a95808a30f4783401e86fa218057dca4e671ccbaf040ff2cdefb36ea78875ddda3242cb359d9819c3744d7df1c89e4318a1f47163bf8e8a5a0b11ed93280a3e864c0998df6ff79ecaf484726793402cd45100f967374e03264866e47e05788eab597957007858492ac75ff369a981499b9a2a69d389fcaf641b990ed6bcf0e055eca720955252e2dc10c8529a16c6f8461fcb3c77ab79e8da769ccc780cc63eb75ba15b9bd471e310ecc5f2fbd5ebd43dd225c33d18032766a97428218cf621177f883bf3ea916c44b5ae4776393134841f489564a81ac16ca133b1c7f9deb85274f5bb233d330d3169da9ecc88bad33343de2e0e6a224dbeba43ba74455b01263330bbdb2000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008656ee37100707a850638b88650fe6a11299e21a9df2889c1b8886f182a61da06cc98c36e4468feba1c8bb49294c877f102f804e30bf6f3e8736677c570938c36b038cad0ac3e5e108eb6614bb2dff49a0350c4a4fbea36517b4c2dacca0220934498b6b00b7bb8f7aa01247f1c72fb64c8438b8b013cd77ce92cff64c0ca207d9f3dd7bf0ef02710b4f2bb8c78deb0942df1767225e6a75008c9065802f2783ce772de0e457cde2b889da1aa7d6de72a1c3f545719fe765336a63476281df3bcebab6ffc5ab0d19b3531f00d738b5708799c02ecb6c77a0076cd7b1a8b214c1e4f1a9bdb5c0a53841cb169d786ef26921902bebc1953f1504499d51d17f74d7fc71e0b74e433525a48ebb8e290767ce7006ed9e1cca40b6a1d57f990f9550bfd950952d4d84b08063c87dbf5361d55be44513dd69739c717ebaf035f965f6a1c2a43541af2e1c09da7847304221fba414f7b4ac3b696ac9ba8d97575db8bcaaa1bb8879ba819624c568c8966751c42bd2ae6ab2ee1c9ca4ae71f33172f370e338195cb63282aa3adcfa526bede78383bb077259ed625505117aba72604af7e1bb5a8a061554b93dcdbc9476f3ac6d19dddf3106c41fc9a496e1f46ebe4966e400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a38602fb408181dff8d47ebf2d35f135df2764d9d20482bbe8e90e07460acbcf07e8ea6b28d786963f6190075b36a795483d587e0fd3b038944eddce19ea20840f209971b1c77c981c8ae094b1c855230458a0254d93cdcd6523ea84e6f52a4a2300ff6a43ec3b7b747af9da95c9ecfa731039bba8c91b6f2109dcda782139c90dfa0e7ca2645b23eb41cdb85b4913f19b339792997423f80711623fd83639e28ce36eb01129974a2e3f5078c64a740093c16503a0a5da902ee83f4e43fc042936c642e6b93e0608f12dee746646dc7275320cfdb5359b56a088adde28bdb5c3d2945fc09561768d436a265721fe5d0d5408eb943fc123d3ebaad9efef03f29e8490121fdcc17874373725a357df07db5c70ddf98036cccd4398c79dbd4fa4665983b1cd99d6847dd94a99abd76bd92974393c3ea025d9862a0f74fe2cbd2bc073df099169542d02b3f4a4a17de1633dacd74cfa94936d29f588eabb9c9628acb4e561da47d03143403462ebc1cf2c441443cbc98717bb9fff66ba50ab8312fa6b07ac3c9259af273efe4682d8ef8a4c5da68dc8e21c5b1c30cd1dac33495c16be86c3755a14179ab71a7c834490e078605091914dbef6ce84c1988002fd255000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027b26d10b2515db3c3cc6f045782ea6bc8792c1642848a4719ffe8a3272fb290b95b8b3ea6b91883299a542fd169cfd10d1516a051ff2a9af199d6a0f8d32f21a485761d16b69ce45ce30e9c4895a44135c6e5cf8e65158277982333ffc51f2a0646c4742fd3e4f99a56a2d43d8f1e6340dd8c4ba301d469c3b9e551c75890d158da89b1b20df3baa3d63a77c5dc374205a1b3c6d0397800e8617b8a30ebac46bd46e2147f6f6e269601d01f3608267cf524cf1b08880333d4ee4736d84306578d1cfd607c5635ac1fbdd4631f4f2175801c2e2203b7969631efdf7049ee894d79257debcb2abc544da40054ef282c859ffbf69c66eae40f06a9c65a83ea1f390b2d43b5f9ca54dafa1414f26222d0428cb7e5a93565d5b8c8bd379d47eed27cffb3832b4eb5818247350aba76fc954835aa3b974a52433d37b2e2bf1bc9533d993b4f9a2a62ccd2a03582833dda1ec0c6d62916798e1dc5be339b28b09987e892e1f15fa59d3bdc453bbce6038d851a85c2e18c14c0ccca5c2154c49002e9a412490ee53ff90984d92733503bad4afa986921b4eafdbf2f09a6e8a705318f547c415a2ad8c880e5a78ee7f940a50fb2603b3271bebe977f9003825fb769292600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f235729bd87bde71e2bea315c314ee0b322b8ead1aec746710e40502d17cf5841ce96b07117578b582066d7289d244f4e7ce8b04427919cf7754343f48de03db0d9c5079d24acb0fbfd48d732fc6e848ab131c67cde8a4d3c7d2d938711d80c59e8f9119de27cb30e77b0c54c774b316010069f6ee98680ea213ed97bfa5c7e15c12de0989680b24004c14b6453af024866ad1e236cfab880019644de8ee4a6a563a8c3795f7f33165d65376125edb188d2219ccf50bbc278ffd5bc9cd7f134fa68c68150b948a5519525ae97634fa94b633fd7010e7fbff6b514bc4517d4ea86aec6beda77e51af6ff70b6032da2276a8e5ddee3d525840071ca49be315f6f8c0f8a147988540dda35b37c0b4bc3ac49c5067794d38704dc0d13bb88dc19d982de2461f50ee48c515cd62e5410691e4c98391ed71f37132814b53a391ca75267428b66ea7e47e46fc9ea254ad8f339e68d15e8be4a95f28b030a50b52be56691328e8f8479fd7f67e787c33f17695e0edbbe2e09af856f30fdc58105d1dad24ab8909c47f1b1e92b5f6a2073c0f4e93ede32e1dfe3202911ce64389e520483b2848204a406f7dd47335544dcee43285f203bfddb56579079b8f05b2930812e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cfcb9347e5ea3484a54e0ec74b01accde9b87a131bd20852ff3f39935c23909ea0f0599c18d17505f8b65f3531b1f5cbe91dbaef1e0b3628abcb7d3ac8a69aad14530e8fa6b1d5f80301a393acae0abc922009b8f15f4be0182b33b3bb392830e9871c531920146f2024bb84a4435f225531c699ed4d1e42363d112df8ffec6d42127dfd57d8d38e787895060ccc54937241a8983cea1a154720221ceeb2c5ed560a59ecf0dade637b3981dba7f3028758c8b446a7fca1755625faf5cb429da666d81286a9d56a369bae9eb9dd59ea6b5c816442ee53ad4b2d70398d6efa2d1f8f4acabd8c6ff79b38446ba25d6f87dcef8112b9900d1c2e62e9080e6cc7aa932b0b8b03275cade86bfdc07b6d72557d6510b1eb6d6c3b9659a45c7624b65d31e1808fa986f878f165890747e1edbbc4fb1938f970042dfafbc7bec637e9eb9cd82ca3ed9f409d78b7668feebff66069c7f7e86c8c40b4361266e68a417a83c5c4c26b90ac5cfb347e1457b37617324d81fa8896a5e1b7f320e60e0d31d07fe515c0bf62584564d029733fa46b4611357939b0cf24a3e88cfcf0bcbe3b5aa4d0d272b6c00c2aec143e49985dd22cab87eea80e0441bacf2243f523140676b0a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002840bf11c67946cd1b1209ec97f6d302b108f99ddd0f0ee159b4355c071d4900554d3d18a1df5367156aed2232452a3910017848ba478a7fe57e0d2bd5021b009e4811b4ef7755430681dc275391c5e018a0b8cd0079945048d40403f2c9b04d28125fd84f843613311ae44ee1992bec134aa982c3da6ba0dd687184a768fd9843bb95287cbc81946a9c856882250aef478a7de9200b332b8543ba1c76e618fd30ee696ed90660a7407fb8f1419c2cfd55ba7f25f88af380c5d2b31025e730026f48f2b0c1bb18bb37025ed4a4f4257dd24407684a69556bc50fe60defc7c2c614ef5af6e853e5f490a6ebf47b8bb7efc8fe2ee2dc958fec057d2f6187b3c6b35d554a6844a0c1aa7a602509770a9e9afdbae470a8261b2e722d28f4c9a85b25b21597843353c1e0df150dbfb1dba7986afcabb29af321fb4101044158eed1f85f4ee0a7fd45d334b20c609b80aec20bd90584d7d53b255a8465d25857daa13a47a640003d8a08e015fe777b96f37aec9aefab93e9c514a3728c546df8a76099149380a8e9853fba07df09c40c4be548045605240ea3c1879396f5800411cf3240264e95aa57976f4780a79d4d016aac948318502d815f0fcd3c1df48a23a8e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad4e76b08229a661c071cd9b65569213cbacafc5cec6b30e52a0fe2d5f717b8b7ed4f5c8bdef3ec8ed28a59f313f9ff4d07c01ed1eb811639c01ac7b6b499c8abd63f18681751f65f7b31f82d41df3084f3ae7ca5eed350ed303b2b691879bfdc331d44d271b843df3f47e9bd97a005f6a9d3f283d3746fd41d2c9bc0bb53398be2637ce15b33038666595b9e48d23dc8349f67caa78025d01cc8088e5a24e034df29056ef6fb702bec7cbc41b919fb5c261f3803a17e78751b4e88428af628d6a97e8010807df98019e914c9c2e09b2d90f9109aee7df33874b63916881b547b3d7a19675ef07b608be778a3587dababee18f837c533616b3ed86d8b47338d0d0f7cf9147995ffe53f6a9f6254646d812bb4eac0ef4bcb2ce201b21adc76c2a85b2e72845488972ff6e97be05703f28a54f349e2e0f6ce57ee43c165010349392b008bd466f676415b2f1b99a674e15bf2bbe6aa77a12d5de5aa800d4825021fec1dc905619761965b0fd801a44de7bb677bbdbe74ede00f9591e5429d0ee10331e7a53756cf78bf36c6ab40327c9f8c44c67c3baaf3161eb6fdfced4c6682f899ff36edf96d18542646cbb05bab3a73f03ff069a574da5f835b00a859417320000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a957d7b9455f661e04fb4e6197280ffb7cb9667784a5eb8fdeb5dccf6c8db8a657266162ae319590972bb95449066e3e794cc2f0af847875e409f75071cf6133354a47697e6462ebb9b053f0bc848b3d16c52b39c8df72f0fe53cd35070236db1a5ea540f1b748820b9e1f6c586d7c1eb44aa05c8fdf91c18b34304d7b7b3b8665d38338cd031356d8e518a0e4e40669fef8260c303299a546b7fe49dace9fe3541718b8dec57c43b2773563316530b3e84abcb685db918e4c5c79337b1678c9a210bcbab913f7d3137ae5f5521aa449939435d6ec145b6df1e7a0c91ed3e35828671a3ce2ca6e431470578dfd5a7799896d2d4cd24e734493622102dc8cf2122f18040e9cbcf5eff2f176af6e6f0556e7f6d1319b2daf06bab8ae9e0a8baee4f44311f4fb85e9d5a48be1f875db40f6b0cf109790df262dd464e2b6fd5b67d7fc18e67d3c22db9883ae0333661011c81ed5badcd3742307f8a7679a3fc47d4b8486edf124886bedba425a6e3e910251278d2168913145520b905dcd71280f911f13c895f4871b74ccd393f3392da9559eaaee59e8982f079bd6336073deab3316d5cfb8666cebdbd2df54eb99e4bd5918b8fe0c43db0ac1be2204522d7cc0d30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af86e1a4e290a674bded03a14ff64eb605b5c09a0c0f115b97636e09a4d39afbda3889c9dcff2f64a82e1bb077267e3729b1ad23f8353753a0346364a1abdb8e35dd78d28632c3769ce1865fa5eea8e7d17959091fde17d0380df0e87956879f59959e2ccf00374b6f013e876860505900e84c80b925ff976bc75f9cb745673e51f6d99fb2260a131fdec5939ef193dd5434f54e96cce0eaa7f9530aacbf0d866b4163517df028377fc12a7125da690a96be82401f8e2cc3adf1146ba365773a7effe5148a56249a5e69ef1102734a354d7bfa02e70da4b44318be5a77df07c5f4d36e47ac48f0321d7e7b52de4cd82ae732256b48e9de7de2e022d4d5b8e4aeb7b56ea184612b6df979aa553294581661641f9596ee3c7d1c36252110d87d96ead1a6a8e36835c7178cf54b81e8cf27619572f9103b95f55241ce4b3fbb259c1af9510750b36d44dbe81654f0ca205de9f89442edb3ecd896680f2278d667046a148662442dffd91ace82a4b653684738bb288b4bb286f45b2bc454f191c9f9511a08327b015491ec5e71ff1674aef8704e79bf5a6531b0a251453415e5d85e60c91e5678ec9d6dad4080c9beeda98e0be4de1a48a5dd61dd8faee686e37edb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000260551ba865de4c1af12b241ba0a5dc5c561116deb63935226534129a36f8b2bf04f1cfd2be75654a0201da045bb8fadd41c22bac200a89f29ba4c72d00aeb1ee49c524db5222a237c39d2a20b623b863f84d3ba0bf81e83576500553d7807d8b81c57ce53bf07bdb86e1f354e7ffa7605ab2b0832d35bb2a4a03ac4748e7c940341ff4a4a8655aefc4b7f5f15893eed79c4205610d3840a988e92fa37864501cbf8b0e86ac7f7896a28371486df16c5c1b1b44baca042adfa1ffa6a349a832f9244a5a302dc7bee875a70a3e2ec8145f4c653d064e23d8294c3c392063bcc9b4759dc3079f29d2e59615ae26a8e4db9105efb55de3ce88226d058c075bf0934c6897762c693cfd0621fc0d7de2b80bf867eeaab7c98d1dee2c7e840ba5346f3ed0b5bdd9d8c014b1a0c69b2b4d46d676e804f15cfe3b34b3d8c300318b9fa3e43872ab2ca69477a765e2ad93ad283cd2b3662b13eeb84e122b1709c909193c747dcfd21d7475d6946dde4ab5c327b95a6453aeca765998f78c5667a9918b3a984880da4a38cafb02e67181acb7fc204bf5f0e52a6af673c27baafcd94fc3df1076cfd51b222239821fae5328a3e77ac6c5e7b9fb1058ad4ef738eff8eaab909000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b066f5a07222fcf7cca126f6a6441fcc606b4f1bb9d3bbb31dc3a43552f05a5fbbf6446be56c627f7e8c4506cd4b48ed77b55358b4239fb84c791b61c25c65b901dd9374304369102d3080ac45050ddea2c0f09451fbbd5fc799114a579d8fb735f9f1597c68cf56ae07092be3762e2d499145e77ab5493965578b822faafb5e58d1d78a9a58f0f42e95bdc4d24a5ae97c0a56cc9899a142954d463943e2695984fd237126d10f1f0632382b0c9fb234edca6d0fd1ede08b865808490cba77432bee98743ddea07610797a47e01c5337cffa9f5783161cead6fd2a52171548352b7033a064b856a4d23836318752d353cf2d79b034e96c2cf9899f431c2e787d801dbac53272f81591bfad5a04061275edc5e7a77f12d51aa8829523d38dca55c8c396c802cb3d55e96abd671219ed0d1391937be699481763a9bc386cff4c655c26d4567a2c72fcfb38a46c61e63a9e38b3225d3475557534f920323e7f25af695432d02583a4f1d8836baa30c352590880dcff56bf37abfbe35060edf00f07c1e2ae952dbf9a5ab637fd74efddcfb3eab07c738c29cf9c2b5bc30e2171cb4db012602072d4ab0def95dd92c137547bb29c381ecdb431f0056030d2e1c3a7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087936711b8d12a1e29d8924ce0e99299c1598c568dcdc4d24c886e93bde225ac6666c5f296a7844ba9017554399fab27053931b7bbbc72fd92a976430845d60f3cf32c4cb2352c219d7e08b7ee122cd97eaa85fbd771fa2f88c2cb35fafe147ed9f6826b3ac9e64eebd7ce703f35225b7de51a4f2dca0feb989ddcd25cc6bad4283db02f0c5fac6452c92f2db8714482110472c292b734dfdc2c96a3971d5abe2f83e08787f734c1e4048bdab22d92af1ef6baa7d8b1e10da9e181357f542265ee28fcbec7ea6e70949e5633520e6e431e06a7b482ee599cadd1622360b8159ce9b70ce3b4b09db2819a7886acd6434df87c6a4f4e14a610201343bd25c6e10955c7360bacaa4fcc661e4d4113b6b9cdaff77328fa0c2952086ed58e676bcff2c8a7ac9299f29fe05fbb9e956b6c7b5706f380645d3a7e76a5ef7a3bc5a8ea25bdfc5371ccb48d379c0d008816765781b74e1a74d4c2786b97e7f81d4f5f5cf13e0f6416436a0a3a6395c2217b4c4a79263ac55d760483d6a4a890532aa7714679dc0d664c513869546f0c9e16bdf5b321d810ac1fcbd312f407b2b50c4bea8d31cf8c79cf4d96a1912178fb283b7adec6bad4a9b19752f7487bd07dfa8bea8500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c37c7a9901b98f7ee86d6f9def0f475bb14b55c2eb392d0bf11e2e0fbdf31990ba0807c6a88c7bc72218cc53af8dbeceb4f17aff16efff0fd638e62d1bf1669d7bf22698ddbbdc6149c793a2fecbf7398ed50dfbf9d6ca9ec9201d1a51885178de6d6259420f64bb917b10182792669207a125f5eaab782d395143f37c4a2a8f34285f62fc500fcac41201f5547c1c3dad2467a03d395dc4f0990f56bfac9a9713919e2fcac905205d057e9133e7ba70684dc644f5bfdf32ec9da5a1b639db53fb94d13669e8e6c4874eff55c2985e9599cfd2fba2183cb1013dade5f10d9003abbc58b29b830577e7629c3d73633e0712e712d15bf6a561bdc63a77c8669f6541814ad54abaea10cfc45e6ffce5121f2009cd9f41b49372694872d4e8d8f51184bbcfd0a11d166832f5f5c5cf66d291eda5f0fa9e66c030a754018de65d60d8d20d952eebb468acea9c3a04cfbd2bd55794647c903e7758bf3d3714b02c1c7647484aa374545a80d5b5c2dfa8e31701da3cd24b2ff45ec34f8a8cb5f4b1ec0c850752709561e9603fb84714fc246fa8da331b5944f73db1e3655dd76fdb41fc976124967340b663bfa808f84bbe3c8118e3ead8a99d8cea77d687efe0833b300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffb875d6b0fb1424787cb15c397c888a746651984a846c493aef6b2e04cad5e2505f90e9383c0a526a029b559107401a6906d512468edf522e672efe5a1472b0dd3add9773e639536e4d75169032b7a008c46f25fd9c3910af66d8f5f9a0fb73453e58a42f1e5ffcd0d98eb8036701847c6e2d3338e4fb3737b7d070951716c7de40ae9570f0674fec500d6e2fdd1ca99d9f8f7ad819a6ec1f608ddc7a60286cd1c23eea9ae9a63493f25ccbb356aa1145ed61afb5b7273d24dd855a997603b654639654a66828cddc9f19be935326fc3793fb6a2f6857a4afefc1ac3a1b421f8f9a5f205be85e7b25af8ec2effdabffb8a00e50d329290baabdad3ca02c33327445079d5fe0ba9e0224643ae78649cd40adf46c3ff5cbbd658e4e2299113f80458e4b55abd6f52ce792d07cc41fb628584f3015b9843a882f0911f0aa7e790bf2d21215677a19871e2ff8d3e6ba18a4a64465b08822ec31420d21fc41bc35191be3b7909c579effcc7020cc51a3bb82a7d2b63dcc63d7d74298afce1bc76ccc410b6628e5f015278f227b1d507a96fd476e78c5b3c13c2a3d6d3b4e6d7ad9132726656b05d10799c85d9bfb083fdb56bc36a995d086c247e5d2061cc0d5a5600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002789e6a662ca10498f681f137aef73aefa83da9f798bfd01ec0b1fd1d9a9387fbe4cb7de9393be764c47ea1055152f5f5011823010c9a9f9941686b1c1b0aac4c5c9e174777ab8fe803ac7e9c497e5eb897045baa5701c0c2033a41dcdcd838b667cb1687f8c647338a7977702f2018ea477e6a83b799740d034e01f9aa9bc4196fbf71de5e37b43630bc11fda6cf20f6be7ec4a3a6a871f42fc08d95bf77922ad1c81cbbf4f69063b6bdc4472528262089c91cd699add85474c39d05ce9c1b57b33329f6fca538f95445be9ec4d826361f65aeaf98c9b817c7c132083fbcd0da5acb82d1207e9735b3a575a67848d249271c11ea61fe906aa02932ba703ab74c84e9353ab8401b2d5d58348e4443d4af4069652b045ba2322646fca0f3e3ed03ff26541f95d6dbf6bfdb10b8114c0b3b6059ecd72c1e78592b0cf263616a853b10b9175c7f0fa7e03d71f4ae430077959930e65c43c361e081a6317c32dd5e1ec5aa3aff27c7ccc07ea5fefb6ad4afbf66bd7fe71f45020ab1be45d9614ef8c42f1d152b2ed375ca74f9a54c81cdb94ec310f5fcf78d15cfe777b630b6387c3774ad67018616e587a9f284271de13b2ad59aedbf34a837dd5eee0d2c0f1464d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008638aea2c3ee3fb43285da8e4f783e5abd248b778578594c2503a1d6ad1418a3cb8a66b7c7bd3713fb703271ccf6b44aac02529eb352ffade703396364ba5012154baf7dfadd9590f7bc906bdd1b74080eca058fdfd14b750ce5c6cfd16ea9cec3bf79ad55977b0665c6e89f5e4c65c060c62b8c0e3f2c34edce696978dc2f70e7b8cf742a790756a05dd94759110dc0dd73eb15f48f661e70f2c12b05fe10c3bc946949ed4e1ceb73a1384c06e6adc1dfa682790155447a5ec3eb0af6f3048d3ce682355e809faac33e02a4c013c63716dbf207035c230513866ee97c394e2444038b3291535c5539dc364317d9ad4a44ed918e3824e8e9b009188078ca894991efd1bc61dc848e35ef7220007dc225909419906521474af1183a0ad530d0681a22675a1790ca7d52eafb65680f0d4c3cb49c0d3d2c8e19511748fbf6433e09e5274673bc8a5f4fc19e231d10170f3853c05fbad2e7d8291373d3fe41005752382eb939cb0e00f6d86e31d1c5c4becd6e068c2e3ed3046cb644248af74e6b81e3712be20846bc9b23bdacdeec1dd350ed307d6f91be4b4c451c473cb968d83d4c6d5f5990248b54e0e1376189167e86e64fe1bcd2caf65cf842432e32659e17000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086b4f160adb6daed760b0fba389fd54679f0a306f73d4dc6043329a91c3d613b550df98a7a144e24e2ef2b66f422aab1f3467c964f3af705ac00436d552fa47f6dd8f591e720fadabd30db0f0e9d4fed5e52fed223372563242b8f60797490aafc426c1f06b778dc7f7ad0717ccbb59cec0b020dcb8e54ee9de7891fe7a63513306246597e8b2fbba8755df60bbc14ff9b44973e64749ea445f935bb3c888208ea67c7270ef20ec7b01cd71b7bdc3e0c3c0354b7bd92d5b5a8a0c0f59fb2685d667e75719aa251c78c475ddd65f8e6353716b4f32adadc78ec7e499644e59cf8e6002c24eb68e8551c92c638f1b53198b08820d6561532d1b1d657ab3f6f16150b7d347113209de4869983474d9e4e332749a68fd143982088ef193987ff256709e32ec5207ae7ebef91a9243a7dcf3ac8788c9889062611b0341cb93e0fc71e23abef5f7e64478b50e5fcf95ae560ca7956b1290f5ce920959c30364733e28f9a15c1ab4afce8998a033d7683f66633dcf855c4f400ba3bc3baef8c3bd2877718af2c0d441fc88113e6860e217c5d3dbee490ed13872dbdd6a074296341f646708a9784906992eb53c11f50dd007e92be85e09c2bcac6ba832bb28a6caec1340000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055f6ef3ddb48c22480b8d731dfc46f7dda4fcb0a2d3a6f2a6410f9c8a3c3a79e291a7faec78d21501e8e1d7bf1bcecacd73112a32a96cb481ee1f5017756e9637b5573838147fee620e5a7558a0ee191ee1ea240f7002681e9261d5c38d436ac6aa2819a6d829eb9ab95520f138114fa49479ce07c26ed693d4a4251509f2f4fb43d43ec110936fc56c5b3ce78fcd7f11579e0eb64d8a89b24c0f7bd16b5905f30e5ca6563c0ee50e8215b31c946f8c6383053f6fe2ea4af13abc86e6f26601ca7795fff9d8898d4c09aed384104ccfd2fddc4ed00c071068a979c2656c465bb8aab4684ab8389976424a7c57e3c7a31503c2a62317acbfe1c17a0ecb4ba9add0d517925e35634d08848ed92dd951b0995f15672b78bb31f517f4ffb75c9fdbd19bd8c3f80d19ca6df1241ea763859f3066c6b49c7ea48d1e96c49558aa62c7ba06a41b899f8855f3e85289daa73cc5c119d8dfb6a7a5d85b78c810ad01c9416fc1cdbd938a10e2524a2c517bf1a4ce20663541887301a3e8c116c215e42a5f424f6f27e14aaff882d37001b765eebc99053a3ce3f84da73e6b4e2444fc659b5ea74f61cf248ab8ab44524bbdf38c8f5c573c7d1251e222546b791eae33ee0c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c874e77e7c8e477cdab1d6cfb17ea6a5c222971af6ffaaba724f576d2c7a752c855540386f8e2b1514d80483b11593ad8dfc735a7cba9ed5cf4fdef6b3bb1c8c3d06ea5b761176fcd6f3a5264a5f0c3514aaffc84e0029e9af7efb6fff5e7e20c34cd6f89cc84371345f6386b61635fb9c25f4bc15a7bec9cedb4df4377c73a3841c1131423c8cb435c82bfab8369ca141e59b0e1a2b64ea4374e4ad135728367edb205cfe9381fdbe632ddc4b1774edfbae55f64c1210e8f253e631500d012652d8a92f136318013d19f7047c67b7828f0ba73212e8a4d9b13ca89c729570dd72df3c63a0c33036f2dd5fb8abf53ec5bde58b8cfcf1510d8ae0a68d8a68e3dc17924e83a5e1774d109b88311280912f9d961073771ea341c7eac9aa1082a19de6c43f5ed0565ba23025393e543e77a178955a34779fe2a99f96abac8987223be863d6baf9e0df7bab24fc6fbb86de31a26a8bc4e1c28b4e18b2bc372b887e06aacfc601de33930639931bd6052e50cad6ae1bb8c47795d181ce5d48a03e0b28bc440eccb8aeff8e73e5424a9a7960cb3fb726d86610646c2f6e45af0e987ac68fb949906317d169fd657e29b3a28b39db58b62a66e32a488466240bb8696f500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bfe1cbc8246ed0b467992624bfa5d89c214512d8342555db6cc5c17ed860ef01a22df1d73cf4199016753786f04d77a341b1e2bcb0821b3ea135f8136e473bc137942ae3b114bc1b21b04887a9d7d3e5140df3aba0357d47560f77f5bc167995ad891b4238cdf5ef0e93bf4127875aaa742e848537eb9d4f875fd1649ba94fd4ce723db9bb3e56a7157ff0aaf220f351e3180b0fcf04675067902e1b1b985fab702e881d65a7c2e2c15e2b2e55963da0525374acd5ec27ba1cbf7834c5268679eb76c8ff95ed139325c5d811a20e35868cc92d74bc0d19c950535a9a4c94ebd84535ba0b08d3773c83593490e0699733ffc30bf6aa609e7e85b67e7a730b5fb0d8fa98d43c8e23f8a6cf6b4428a52590de98fb00bdece4d352dbf16a84b06fa70a49e63798c1c1e6a23477df3f1585380eb295d3241bba24f053abe20726c30790f09500bba625fcd751b7b0eb2932d3498b00f167169628e44802264b2b53fb847af3eb88376a034c23c106dcd4345b3555ab44aabe293dd11f48c7ab376fd8943f3b0e375bf26c71e283e6e11f30e707c2942a7eda6457baedc7dbae96b70bf5d5d10fe4fbf5b3d7b65919d96204b8c7e7d00f3a57b9c0115eb548988143500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001609b817455533f3b31696f164f8521815b1bb39c90b8e969e6ceeddff011f83dccb1badaa60687178201a91d2829b247bd1bea4117d0b3102b21524b3868b28a932292582b3dac46b3db224205a05492c218a27b8184f71bc6361a2dc6e1756c87c1763be2f760feee65512829943af87d0843439b9b419d8d786cfdeead2d1459de67e2573658fa9d62aa68feebb3b57596e2831a3d1fbee0e7b7aaea5b5a60bcb24de0ca02e4fbbef759faf28bab76a9ee21b42df02f7caec882cbcd614da001f815956bb7253e606d4fb354b76271bbc0b227f19b840ce9ed52eedabc8c2b34df104dccc2e5d1182550dd040295b77366e3f79447fd6c04c7dad386571a1b073a025f2a981944c8507745bd55aad5601667b6aa971190c2a00e519b38d2a0ca4b17c0f7d2a3ad0363701ef9595f7bf435537e54773712386a7cc73b9c176f1501f9d0ba5297a7ef04938cc4a4612030a7daff3f7caf05246c5490761e4e81529bdd2f8641b664656349077fe450bd91604b7cdb835ca8c73fed31c175a04f13e1e9d3a8895ba4888e4def378b7fb918660ac64506d402479618869bb197777396532401263682ef6808788f0489297d19d263858f67dfab9f19b0b2cfa0a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000786d64e1fb9509d89e0139e6e66fd3a2ee3ded5fdd55a97796cbf067ed07612612e0123d703bef1f203440945db4ef73ddb551c82bd8720aa12805e7e899e92c23298d24170bdf575809b1b5fe960b474a0d7d00c4669458d8c214a6be373ab7bf6174c3b76a4bed7b3f9b915260a0e2ea2845a9c5ceb642b840d2c99ab7bc6cff19582addb7d751dd3d58ed5607542b4ceee2ce5ed72fe2e2593339630699fd518698940c2a3dcf58caf99bee7cdd47a0169e5a6901af33b6cb71a8ef60b8e6d3be88dc935d250536eb93f5925b6e9628b9c33dbf5e65d2d7c751bc6608bddc534d4e3ed549057caf16852e6c5edc8448c4e418b81f40a734e8af86468007ba2f35ac97452e7317f28ca031ea533b8123985f36c866b00289f30210755aa014c4010a6b22ba94aaf31a915cbd3421855880a076fa92e4f06a0db00b8c1c9f33360bee9999872639b1b6b1500d3063aa52603c45dbbc949af74c0f3a37dc574bb68fd49222b7db1721e94f242d859cfa9f2e8e6ab3e22420590701fc111855f971fc128df720f264c1cac4916ace656fbeca632b717cc0d1a6fef4cdacea282796d3d9841dbf68e83531b7b446ca72df6630a3b683a0d3b7e1b64d58130cdf0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015a8cb27064349b5f245b21b6940100f9a45913ec71b4efaec97f203c50a9e245afef1c22b3cf3bdecea5db1c2268438bde997384666a4b4db313a8c1e12934b670741b01b9a7f65b7f82d652b86ad980afa620a67f47f253a964a58f21b24a48fe7b6a7dfb4a0c0d29e8877bc0c250d9b5f064939f9f04e412706cbba6a9a78e5ee95070bda342a96ec120a2f327fc4d13e1cce9f4195bfec6f3f78dad782ec1bc628731fb8c1e0142fd104ff570d4ace5ba47e072ea9c24a632d0cc3ff3aae6a2d7cd74404d7014d5b14bafc7794c944af81debda0078fa9daafce649e59a92aaede641ca3de2549bc77487696121e16579f05a013aa0377507030d8bd99f827b755e7821dbd63e6e30d4da5d808bd7403a114b9ddeccc50270e120e5124c797c47b116814ec8794a5a8b61f90f5fa88a2d6aab73074c58c71345b2e6be5fc79f31e739e58760cc8c479cd3223791cf5e21e5a58b448694c9c4fecb5070d6c9fa7525dd96eddb38810b6054ed64a004ac520bd49c223923559a1037b3b9a07b4ed6a16583382221ba092317be9658ce0de1b1496b5e545c579ed11a03243de024d44760d120dc85bab6300661676b8d1211367e336d3ed36968277935cd656000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024340a1699cff973dbed7eb21edcd1b42e4f4d6796fef7a8cb1e61f7b4c86a9212753045e6d6667c9e9800f270a6a8edd2df20e00a9437507c13b6271c22d6e969ff220c954b4a724ca976c8092881706280d4dff80663018e8ab5bee385dfe734efd53bf450d31551b7c40e1460c020109378e7f1d842fe48f5f06082529fd590c64714e6e5f6677aeed7fb7579a406f12e41769f5997f850f193fe2eca2e6583e6b26ac6f3f15ee355affe4a36fcf10628e60926202502182a6b2cc2bcd37d17ee86b58999e1e50c0ab255820f9dea6287d434d03ecf953767ea0af51a41347369682fda0051a215e4d36408870db4d8a2cb27097cf79545e53b17f1a4c61e53a60cd74ba1cdd3b17cfc6c5e62d3910e763823fcb3fc35eba4f39843009effc5540828a3b0d0159eb7cc7c4e14fb08346e05ec602f455b2e3b584cdd3e585ffc9fdfd81a24c233ba592a7d08efedf6bd3669cc73abb9a0e51b357b557be55238f471a10681ca0d685616d1f44b169edaf9a5d61b5a94978f7f3eb45674a77ae17c69baa0beb5fee28b847a995852c9c9e8fbf2af5ab59e3c0786901e1f53c3e5df79197885c9c725f2594384115dabd9d711e18bee2b4da2105ee8b8ab6b5400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ed1fddede68dd4e926e504b12e95dbcaf215b94fbafa668b7debef2b1e64929d24b24ff5353971576c774aed905e44312e03a98de71ed188cdd0f863c35763aa9a807dc2a6a92c9bdb22ea13699475c47e8b4f020cb0d287850b22b182e2e3ca9bbd46ed73df9c2eab0f527857a3f24a18b85c5cca8fae52fe9e0bf1c5f1171326608be8cd78e7931d666269ff71ac96d88f1c16f7f092031013424aa95d1fcb9b3b4d1e4c031c9166e9b18b83e5a5d840734537ae4e43d3823d5791c87f7f9c387c1a5c9c04fe34edaa1e00d33386d1f607e6386531a831ccdd1a4f4ff4fdfc8f6607ca4113b295da728fd34d0424689de5ad20143190f9c79d29d0d894d0fb174d5d5ed123b23d14a339bde76c0344c6c49078c23ae1617fc45674154ef2a19597c035095212ca4035369b552f112573b05978a424019c458d694bd737d1ca5ed8a34122f3e9e42a51288c50e70daaf1f9320c5661845ed22c185b8a85f561d313bc649deffdc91ca70d17fbe31c959f0b301d225ed6c3343283c23e573206a56739ea86c979d0165f8113e7d1c73070ab108265205057bbfdf70e3f97fe41af136b7c666b390de0abac2304fca8d90800024a5a77ddb0d0e197100fe2e920000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000108db3f8ad01fe03f356c1033198a5e432a82c1d0cbe8c321ec2b5f6e45d4f83ff9618a209aa2bfbd95c2fa47aef1f42cc8a29ff10e4c1d8035eb8bbab758cff2adfc0ef27caa152618708a95bc539a0792a75be9cf8ccf9227fee98c55c9533610082f444b6a00328d8520164be27ef0c1199ac57c4a8c2f09a756e4937491d3091dc56d0c2392986a973bd6d5ebe4bdaf278f6976d8bbb71aee70d407b7be9c4af341fe8a288f077888cafc7577c41f3298857cdeeabcca02af2c257b2ebf3a4e4c3f792572ac6d2d1de2db8a0e29898df2db09ae65804712ddc3159c79f4f4e6e5223bdb0662de124b2026edcfdc396a81afb9941c842f00727887f6c715e87be3880be3928d8849d7033ad232dc853efd5cca5dc469f7b771776635735e3f0d2cdba7304ad5c41cb024ea580a39db758cb103bd4f0892c2dbced3eea1ebc6c77d8ae9bc391290bbd1ceebe869006f068c58f4297941e8233625051faaa5d36eea5458b2fd6c8d140361e77c3d091f87e18928b11d7e8113134f97c517ad2705b5479f27c0fa93c0f467580ed55481c7f8bc0bc5d4b3885b13d90cbd75e0eae100cd73103ff59f5a6002c3785c386fdee739418db8ebcabe988a36ae02c7200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a7102e54e0b3b5c4c56be1a384e53b82a2e79d9158eddd5ad0800478cff40483920c26823ad688268a50d55e8141dd444324dcec246b7e8eefee6d036bc9162f33ad7f8028cf926f4bdda1d8d9ffa1de251defd965d66f85d9d06a596618b1fb4a397fb7afaac17cfb9209cd46cab4c1e1f0c4b66a73a0742dc33b5f6a00311b50e47aa40635d7342f126f4e5bb6a9eec2c0c25e727210df4000c54833500e4c69f17cd0703318ce05635d1354f95577e5ec5bcbafd5a2311b08c56fd8105cdafcd87eaeee73c696ce6d5021069617dbd90f427783f5165d91640233f8164f13fc9968f048c16bb4b75b6be37fe3cd247900807ad8540fa0a4cf6c0a6774a6b85c8786e6f642f7ff1b32d32ba8e121fff90ff2342845c8ccd9b024ec6d370e4722bf01f8bad56b91b860b0c08de9b5ee0ed2c3e088dfbff5c08ffe5c1f08ede2ff8188a4b9d29c6e27854bf7b906a2e9285880fdccc8f8b42130f06e41f41d1f8069c40fdbdbb91b53f18964686325f0f5ec93028c7075bb656e8a6c51c7c6415771de4442b25d77098eb6204ba2ad9c706397e849e6f598c50448752f6236f31b724269fc2a3db52441d6d55053caf2e1f6a379020d72d3a6fe7fbb5924d940000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1ee392ba59619aac922759e1e75510df348c185c4dc03b9a8c3e6a48d0aad5c294f08f6f9a32e4d5d0278073f018493a5bfd85c4a92bbe5eb6e5b682ac1c4134198e5de8ed47c27ee38ecf1e87e908bbb9d5cd858a4040ab224397b3e52c156707d327eaffca1e8b9179938b0be43af56f05e876eb96377433366ea42fdba93d0e465f8e7e3203f8ebe494fb294aa679492f8ecf68d72e7b00c6dcc7ca6c5700eeee3adaf3e43bfe29a0497a442fd01952696dac160cc2ee62e4728e133d418e4ead1b40836632b0627deb871e8fdb0a3b5206dabed3b17e316bd56dcf41f990bfe95583bc6072d0f6af65dc712fbd0fe88e1f3e1783ee0423ed70c1e1994ffd14c5b281ae1f9e67813a99c54789744ea95de96dc0e493c2fd4cd3971d83fc6422e8dded6e6d7a44570e77d28817f0defef67d2458e51585c454e00329e2e6becfac869c28d326ddac14550ce5d97ad89831f1e160ae89015874dc6e4e4f41c50dbbcaab272c1df01580513415972c58e07526646280ba83830c8e7528af44e7ffd5fb51b89002a609834135ae5cc825ec1d4eae8fea2e848e7826270dad9fa6e7f73415dff445ea513a0f929ff8e01aa58488ecaa0c7930c2bc4f339333dde000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a2f1b07f3d7ac3e24677d3d995c135249838381cf85c281ff8fe97b6b4535ae2f3956bfbab016c2b6623060ec7359c48f8bf0ffcf81f13e68e0ec0a22c5f01a399934bb0ae083978885169795b7345eee5d5e8618d3194f0d9f9151108af473feee84e561e7f6569d0590aa87cd5ee7cc44f4f77f1b8fae562e6b5c506eae9ac2bed4182ae5b53fe107dab6f308399ed96e325d62e04adb7cd5947d97f398c45a84571b701ecb07c14a0670a6a0b28ecdf2c9eadc34e307b2b63c139968f3e31a0bde5829b4402187aae2f0655fe6bb996e818a3cc415a300bb8a78353cce2d872bb7257fe45029db02c10e31b97c79d2daa9cb46ae03f5a04e8bb3d28972a9ee18f2dc477b24ba79cca22c310c430f7a9bad265406cd663f566748824ce2f4112f2dd8c374dcafbe799651ed6a32d58f5f6f95a3169305b3526f51b415f246e00aeadf3b058841b5fa8d5d2be73e6b49aab4b82cc98f36d7f20e64854ce1d1dd92383dde2c11c4f92ed0d5f0c600fd3688721c2b376a39183db845b70ad515fb0b15fe671733179c93ddfc625a43a8e7a4fc3fab897488537a37065b24e2ee9023cfc59d4f72e5279d8527f6a1d104a30ea157edd49b1c0c0f9daf00bf37800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ee4b46440e34a02f87b271a5f9887cd0fada5717e37a287d7a6c3c79b93709aaafbd568442084887097e05ee16d4b28e65c57e0b33e6890718ae860f6a780dad3e535bd97b416cc22362a9c0e8e80daabed0441ec94eb9f10e5b1ca1bc4037fcebc1ac56b859a2d5516d8beab89353574b4adcfac1e322539cbe4be145a4d7bfdca8226a6005734865346cf5b2e809a6a3044f420959fe27e275889375f53ec682864d770a35a401c96f7727ceb744feada25196672f88188c3c995172dbf860233985d59a06b887cc95a6e5b49ae649cae23e91f4fd223eb02c69695d1506b399131a776945f9372dc3a8aefd15de4d0df2469b8bb0aaa6cd43a65354dd62283a413fa550f15191af75ad6b28bcbebe78f4f1bc711f27586a5319b5c0f2bc1ab842294f5f6a91a167da80cb273f3a9ea0353428e3171cf556c45996a09322c262707227206da358d07b4ed7431a4a69cbbb75d4eeae053999cc05cf18989a8186003dd41e87af4e0f099053b7dd0eab7f3cf48e99dc50fd51f15200232bbca0735791fe4d318abfae77b910d78657763733bee08025870e94b929b382aea069e442eac02f1d64c16a5eb1b3f6e2acbdd5f751b3b26a4afe09ade9ea68d8be60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000923d25dc77641d41e1bf5a81091ddef3cad0caea3d5b78ce02781674ad999d76973a80dd82b9db146eae44bfdd2228434ddbe6ea327418c94e5c7074e530728dc1de40bf977ecb9a52aca6166a1aafdd7ba1667bb40f769fb3d624e0811ad4c3466ab3b3cc54e2ecbf7c9bf5c5d6e29bc7116c0d294b999fb37087b6efe88f966a91b475782015d15eb55fe604f74bc12b5790210fc8e2be46f9e1ce57eb2f55b29189b070467c691360cf0084f6199bb6e9fc7b0949ffda91b47908816810a606a9d132d23f0e819557f7dd1044dde6acef1fbb47c3e673b16e78ede17d6f4ec85c8551c194f33bf3c6c42f6c809dcd094f495d4d604ca4671d744d0f19be4e891145867d641fc7a15198b15cf4be3e938b84dd5549b187f5de2a0490340b9d8a19a6200e2181478f8b56e142f83ba15a2384482d8d29debc363b575825affe9cc3506e411e70f82facef3c10586946caf460ad7a0e5e0d6c2df3a705c8bf9dffbb3f6d560c3f1f1db2c386a669e0c36ddbae6e80ff6c0c1d07b31254e5d37bb649d66bb3c6921ba9ba31d020d71f8edaab83e26a7c125c46a314d089d035defe338951b59d80e807e32922d5b0d421ffe9e0dba840d1964f7b4d8ce781ca800000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030741076c0691fffd6324b415bd5c25d9edd6e0a9e380ae019336896d51739ba0efe49887bfb67715c563ea355dc98bb29b6b4ca5902d230871355193e398712ac8ab24ce85fd3a8816e26aa3eab20dd62d8044a51f2d9047df2e94437c776a4745d7cb6fed05cf5a7ffe5acceecdbcc41489c849fc3362e0b5d6f3c71602c9694871a7e29ecf9934367cd61e60c93e901289235db497ed0cf8e0c57cf611153b0675818324cd90d9bdd120b96a38692c8ad4e8678047084f6243de8b0fca96c8918bd371f63dd674978f79d7505edcb132b1ce4cc1a0ad5a6ec4e6351b90d9c6e649ed3d9ab6cea3d2c2511b2ef8419fd1f62258be5a50eb35c3bcf9cd5e51d3cc89734da4a1b6ded6eeb7dd790f2423bb2910e9b24e0d60bf0cf19ee32e1eb495d2530548df2a1b6f1b41aca88d730f845c3d7c2b69f83f51b69853dcca9b572839bc50e955d63136c33dcd93aaa8d967bc16a60e2cd0f418aa2bca850ed9858233cbf010e9d689fe350ecba4858ec5478f81af08c3db4f9ec2dd0b4bdcc73df362afb41bd7627097f7ecaf41be9a46be6d6b66ebf9a01dfeb7be72578dbf130b4e1980df326689d1ba1ca0fec4211142fc79e4524d4804be9e65d08187fb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800f6fb059fe27704ec896ac7cea945320cf186a3f5e5d0f8dcb08bcbfd87943c27a98fb0b2568b816158709b959373a1b8b600926322d78b691fcfe585c7589b3d7b44f05a20ecfac8f6c35e4d00820411cc37c20f0fd1a904bb1e6ea73ab80c4813e00ab67cc4ae91f1efecaa9776f55bc528be119ce6430c8693f5ef0b14441b73348f362049975106677c999624465f5e4df0709fb47847dbc152f2a84ec3d47d56d99082fb04906decf0d42c366c4dcda802579c37de8f39ccd901d23cb4f52162f3790ca888307d3e27e1256dd26411f56ecc57858e560e68addf55a6d5129239b6bccf48219e2a0b55b9024ad0af9086d61f19816bbe19051ee6ee454cc5917021b883016a339cbbfa78e81e448fc40565f9ff18bf68777bc26d5eb744a240008f1cd1a7c80199d9f7aee6018d0954fc433de68e775070cbe1061d4b496df33ca1be17314cec379e18d9fe3c427f9ac543d23bfb118347bd4b65419ca6883726600544b8f88e9ee75e07dcc4476c295f6e9b9a488f37abdbcfceaffefed441e221c3257099b68dc24a311f438360dd2982fd3972f57ef999add2062dce07c336b3dc5f7605667c78edb25053b18eeb8736dee2780ab310088bb8a9c100000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a64b2909769c5093f80a890f4e48417697084e3cd582762679ec8e57b2f6f3da020340507502a5a066a54049ebaa7dba94a1e78152e11361163f016bb30ae355dc719b13d9b3cdfa09071cf95365c6b696c1d5096b00e08ddd5ed2746ecf775e73b39a8b26205ccac9127db06aa1e2a43e6a1f03c5ea83b400482158baa74c6ee0a9ef3338ebc009cf5eb289da2d1e015bc83b78f2ede6a5f452e52f666a29ac72a9b52f390ca1f60f030f6ab90b21cd50562f2ffc1640c703e612b39f0a7373aeaf49f55d3b1e174bf90a1b84f5bcf55946314b3d3662ad4936f7b565a3dc13b11ff52a1e9892d198f7300530a1990ee2375f7bd154c1aecff3ce0f8c4e0e649537a6e85c719cfba83a8f72c0243d8d2a25696054d27535e6d41f0fe991a462c1dc17e3d930d8c002ac45d8415e99c1770ddb0a79987e9852a9565bc55c61100c3bf324cc87d9841c46ad2c31a9c4a1c08c6629f5b69836749096d7e803a158b292ed10d20511863f5000db788e2c43c09ae4376e100200799164e6a93cb097aa1193cf3a44e9cf58cb583d5a61c04b17d68661f6bb07d83da891b2fe3b04dd5a07480db12b81d53a3703a41d598ad25c3785c91e45dd4a1a7a26d1e0a22ad900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b89ec1ffee3deeb0c2f4ea1a79662eb98dee4c6ba7f63279489d07658e4e56b514c2d0fae1a327c9edabb46972924f312228a53b817a5e1c961c2ed0c7497c9177b8057aed684bbe677db2cf3c840e4d4bf1ea104fcb2ebd4dc043ac7d807ce91c1a89d05c3f8341c0ac6741fd183e0f80ed2f1f9af637b6de34f376cc652ee070baeaa7d367eb640012abf0e98497c661598d196f22fc4e864d72625e6ee90b8fb653458b07068afc8278eb3703f7152dfd64b713d4a4584e1fa5be8ecae1c519721655303c7466d7ab46856e2dcf8ffedd924b242578e62f4f2e890f4456c50755dd2130517d2b5cdebe90fa1734e3632d65d7b2e98a410ac8e9b3687cae705b1d6edf911fd202fdfe490a03f7b8232e4ce1d10a8c37079a9a3b12d10bcd3c0f35094d19b13175406412aaa819cfda30ff9abfdf6dfef1710bb197b8d22eaa126ece8064e8cb0c0c44e3dc692159aa29ffbef006927610479f9bb6155f3124fd639785573d82214a86a2f36b2e2604db5070493a3f9a3902420afd74944d0a81f8f7320da4a91749e5269768973288916b0abbb4f06524b96e773901024e792412743793f80c41648f9febbe0a8d9feb6a7e6212dad5cb4a61f007a885f87000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017f7f821dfbfc19f689ffb547b8e596d3ff3ff4609ec328b29da62a41f33b89cea8012c7f018612bc0213d5eb66eb8b30d565c9f6045138ea658c0f906dc938709cf3fb6c30d3913d96daf366036d3dd0df50fd4e634a172d7cf5de74009925647778c73b8364debc77d9e43fa0ab6d0407fdb90f459baf8afad0cbc542548782acab9afd8a1fafc668b3647d8bead66f8e36a0e4bdbb028b710684f2b754c360dd616e8c7dc84befd384d60f937cf66cd99bd63eee4fc3b5ddd06bf89e7cd1dd56ca2a11dc234d499be1f74b0051f67ec206300d9f9e3923e5f49cd055238ec307d99338642e964bc8ad9daeb42d4adad3727267b741c05fdcf155ede8ecd2338b9cc68c7e1306bd6ee08ecef681c3b516effaea4c56f729e2267f2772a42ea11f987a5b1c7b69f65dce1c8dfd258f71bd39d282dddc0ec97892ad023561f876e35f3c46679dd0a2b7e3f5ab06b486cc4acf52509b501be9781be167ef0e585f58eaee651d58cf93ab35e7a023baca538c05183c6e5512032df718a9143503eee0ad2e90730375594bed4586f9de6178fd91fc1eef10b43b70142d54a9dfdc89fbd3814e3e7b4046ac142fa80331f4790a9d5967a9a7b6c0d015b3a7c10bb7d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001697008ca569efb4f34f9e8b526e4986cddeef650b791fbc56f659a3c18eed31aec353d444f70153efc68d9395645fda27b4db916e95b8c3f398d62fecff04befcd740e90b911aa6a25d91ff5508645c79d4e097b7b73a349376b48771d4d6c93b99e4e7166c22a500b3a1427b05a6a0ae6fdcb9e8b41de46dc8012ad2a9ef4f9fd74e184b2a64f31d833900acda30906d5a4fcd347e460103ef3cdfaf41c7d776ebbfc8086ce1c26288e44be0f061f16f257dcd53f7f2bb60aa9b8a0d5e1bd6711df9e1c2e515ef6bb8892bc983147e41f4b85ab8f599aa2e4c967324bd62f66542c713fbdb05d8a6f2a817a71a086c1610bb80d7d2fd6f70589206d194ee029fcdc861d25a5a20336109211668a6259831ae8561aeee4ecab5d068d9d46083e83f750a348770791ee629747ef2e431b32c80c98cf2d23eab4b730f4424d2874a39486a758bf8a3c95a3e16f37326c793eadbbca27a2bb6451893899c1fb714c08b32d9637f95c1be22ab3758dc4a87c762e2a8a3a7fc1e9a9afa40ad85da5b367b04ba3684b2e8f7ff20d4e00a9872220348bc6f8ab44f4b682bcb59fd227f95946df5b567ad76ad718db4848c38cc2a7e4ef15995f61dbe24f70437694cf600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008af8f2081b7073e77e74b3063748ae9c5f357dc11af30593720aa61c3114ab4bbc7d5acb56d82aa590bc835354162ddfd47bd1eb59e9e4523821056d2ce9ca31d85c76a9d8e8bfe0b55a94bbe8d63922b67c0c43f33087eb9045afe61078a7dc41ef0d09d65ec9d27127687b0ebc504363515e0cf60bce2ac6252adf10154b0ba094cecd1be82e750cbfb228a6b4f07aea2749d380a6ab607e85ab9b89076fe97296e1c168effc1a9a0f94b0a6ba75c8e876b5fd13360adf5bb383351b49b6ed8912f1acaf1491ff9fecc9e51b587fbbd61df642685b06b3f8306d214f94055fd801869ce219241b66bd2a26876343f9aca6ca734d3a16577b0284628fea7bf21a7b5752a0cae945626f921897ad9f36628800e1fa56215a69c2d9857e1e2e0878a8623ac3561a92a6f2b2f3e1e6aa18b3499efb17ee1c3e81216c5bda344c628d5623433c89334d719a1efd8d6ca20a3daedafbf0b2493d20a18b540596be61ae2632fb50e47a72cc1fd43a883e6e288210d7d706761c751d9d012e889533506873ab6f61f095c1c5d120d62e75f5604f3c190dd854a65d8ad4b937988ca8810dda4c37ba67c31983516b08de25dc79bba81cecdb2cf6e3298af1d49af2e20300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000697dd21ee89e54e86cbfb0ceea7c1b762248a6fac6de8b28269ae4eb699ebd25695975d8c3723f215ae5038d27494670e75e4586d20aee034d31ab5961779eb47b76b12eba39c260d4f6775fd084d5bb209882e1e6b7eb2f79966f5ce41aa6168346a75416f67d2eb842e6c027369d93347567e3b65cc33ff42f016957dff7468fdf25728e8f405b09a1360dd41a13e6f7d4a575c69c35f7adc2f8a6e77c811f1763f81ee1b3af09c0d81c592b3c9e5f806bae423a674898cc5510d824152fb08c1e5d81531a7ef0f5116ed707c74506c591382a0fbd37d48d122dbe4b3acd2815e8702f0331e4b58d9decc5f961c940377fe53c92210cbde5638f8a0f02cf6751426361a2731a3851134fffaef1e77811040fecd50d16f4d1b78b3afee52d30da9c2cbafb363d8e0fbfce07e935e547f21711f6cb979e93472d82a44c6f5af1413e7a9757d05abd86eca1cff18fd4b04bbf9bd27ff292b16cf7385666af266e737e50b3bf65f630f45d0c4076ebb97ea88814b0ea35b646a7af4c48c8a98ab80533b234dbe608eb550102236d7c23fe2dbd89dd23cc8c862a9e9006a339bd1f602331deb4d71755931944aed32bc53b07aa44ca5713575c75a1b8e49a2de6700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c4d0145ebd0cff2eed77dbeb2cf42b49a5e737ab1bf32730605ee395a45fd283fa2ef9f9cdf5661594e3e2f5631127c9b54066f6903c5b1053139ea7b64c97af90759e92d764028818a7ecb72562a5fd7b5416eb551ec6ecea8242407ade681b348f800172502250a7775742d309ee2afcea33f22bce4e711e2d55558bae0f5e5abf5771660844b7dadf28befbc72132bc70ea5b8de944aca323addb82c7346a4fca652c6a0285a834618005119f5004bc1f5b5ee129eb8904a1eb685541158f96becfedc2103ce45c9cf1a629b3079ea9dc3973771e25437c6058813c2fa6ebdcb19a992221fbf70da24fa4f9a4ac7d450a7980a11e737ebf6920d0f4e5b53005a17897fb881f22c43c9530dd0ba920d94955a097af174a074f6920090f77695cb5c710f32ac3f62d4c4b69e8209f89b5d68a511ca8e5aa2c67fea68fca3b28f5b650f5b0c57cb92f8ebe19fd47e32da401daa66570753bbf2c63a4b859621e6302fb69c2589c32e0f8f7d53f434aacdbb99b44bc7cc74aee31f00f6854e9a0863bcdc28434512710d40dcc633486b138cffe29dcd252335e8c39c99e3778df73d1861c1266827a8fdb1ba32ce47cdf416a17be38bde6dbb8db48fb69744e100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f97913ade5bbb53a650b0747d25f299df27538c57b07e50c222f5a86211093e801b4a7fc9432371d6efdb852ea5d00615dab44ab791393899daf6a72ed398ac2161573ef71990b0703060bb1cb465122e174766ad07e9e9985ddb26bf5cb03c686da6938efab047d4d86c91df62ff03c79b2f67d59a2bcad57ed4dea00c0aa23e72238d60fd05b3bf801a022576293da66783c663e1854b303c4dcd07f0e51a2d295df15ce1279042b5471dffca25d670458a90872dcc54ce577d071c016719a7219c3148376ed43e0093a5155b2c924d79aaf61a9d722afa686b4133a39d906ebc8a5da94532f15586cea6d9ff3123e7d7b89b320a725900c6f7abc0b978713bc8262622a32ed0e4637e999032c48b52635758ebefd85b09ea2bf296ec1266e41b475aa02418d79683e662628fd9e445ece49d432695ea39859b81ad77915b5393375182605b49b7ceac764fd75246530d9c62a890e623234ec43787683212f91f9ebf8895ca4fed77a72a0f4c739e82263c5f4afd422ea3d014c8ffdec0531726f6355fe879e51f8d2dd915a99768f2a65966cb01588e147f7d73eb63da6018aa1bb0a5e633aa9efca0cbd778829a8a458b438814ace016a1cd4607bb2ca8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022157a1c5561597b08ac5270a3a68be0122df0080ce4850e54bec15f992b532dfacac1b89f15bfe72c34f66ef0108d2f75835e94d435ea8341ebd58b8f3f68f1b5aefc1f7b3f708b7cf8389e76aae7bda5150c208fb546ff77f14b0186a9447033206da253fc8d149a48c3ae05ce4dd0598b3e2ef98cc722846f1dc1d1c2dd6ab57d5c204c9ed665e240d4028ce3861a2b8e27146221bb1f5c865f4b8eccf47ccdd9d179adbc6c14b7d0089d12e8e97f097c6a08da7543c18e56648f7dc7630acc8f9173b3420d7af578268caeee57ffab9c65df395a95212b591a7bd1f5e94afc7cf3a4e9dbdc206c3af00f8bfc1ed477c783840135cad155ac3e14197b672ff1d0ce1a3514ef3026a6c0120c95df8abf0f9dd7c579fa2364c6a3bdc213aa8ba237912901caffa94fae7689e0f6924e5e0f0cae3b3e8659ba124e5c5eb51952431eec27928f740da99c16ae1d8d89d396d712d59ee25786f3c7388bc776b217988d656de850926af34f39e2ff62c9967f6c7aae47c7c31aee63009984da591ac8e42a49987627a93631941b8e762a19797597617b91c6a2a1409474cb3bc311434f251f887bf1a0e71c4240545ebe72fdbb3b95709c5e8f99cf4e5d7dcceee70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000967b29b274bde695345f9d0367976b2f0634e4bff34488eee6969d023f509030bd6dba5e50e8535a6c25c9dfdd088d2302c8019c1770edffa093c2fe01c164ced193d10a091c468ca5ca87e2904465bcc1a6e0097b68211b985be148a6fac76fab42ecebffc2ba09c4228aad8b8d32b732ee9cb64509f5bd35795a3f73d63889e37c5390f62f5354b4a6bfdf11f8ea6f4795f3e5df70db805347dec12c3ef9bbcec6165743a9f19311cec1d99f81ed0ef6cc636bd56ff2f65e76ac9605a0f4b508db5d388c0931b3d1c9002bb0ffd57abaa7b44d070853dd8eb89ae850363c19cd5b4e95f214a4f994fa8a064b31f2870f76447a6f6892c0d176ede789586fe9b4b96632bb2118f5872307c10b84b5472d13117057bcc1a5c785009c117b6da42fbd681c68fef3a13908bf7fdb99bc64b947b7bfec470be1dd7bf27064f2a1ee54b314f44fa2cb2dc4dc39a58ff0980fbc4a8fbf27b8953329ca3b21648651bac898b23b3a83f03e1c99559ccecea2c7eb50002a50044a2cfb10ee944cf74fa813033a5c32b3e18b168f2d94c930f2795b9c58dac85d6426464350e9476eeb63639d24d05e1e77467067103bf2141d31d68d8813b21bfea851b3cd03a8e3a32200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d62af2852a2b9537c919de1b634b5244bdc7363d82892a71a9c91fd4282232a5306c2b27cf7bdc5bac3c9c51ab21c45be1695b810ed824e579ed22d3510ed595fdb291522d3b24390d81a4380a948a732be272a5b468b744fac007251a482d9ce4df7cc471fc8c7d52aed6ce587c53141ea837727ac995f889a46b5950eeffc3f8e3e64bc4c2c0c00070fbd5288a53cac122aa62a937200b7db42ba896a336e83ca67c01c25a6cc224bc4189f8d59d89e1788281ccab115cf908c09e08c2c628ecb7812a673c6c6b458481094980c7e9687813999c489aa67d818bfd1e7226f0fc9ce22304820926c88ae9172395aedf31a011b28dbe86dd71682be77a62c31bb2af6453d0437e87ab9b2264cc682d3e212723395b9e7429d08cb583e616b945f48351c16a76cc0df49ae0570b8a8da99989bd267aecba367aba551ad6ac71d0d4f0badc752ab2d71372fcd9174e1ef609dc73e23b2c8953f4cfde61fd41cf673e87f703b40675e3953a5523f83a5b5e6517098c5bb0d3d9520ac1a88c9883a20e3bc6cba0eada4d1c25389ed320f8d46ea6c88183c813c7ea0ffdfc83e7394d23122e6dec6eaaf0cc04cf839ce486a56cfc37e31656bff07473250a14dfa16000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029351b885eee4f3f081824eff482c060561f29051e567cf12fa103f1bc8cccc42767e1e6a3aa6a09132ab4e1c22208e2d3f01170567ea1fe0caa590f85b77ce5bc09ce0324004126187eee9271321b746608f0a9aecbc69db73495058380c71ef25b160ce6c4aa9e3a039620015306a8fa2087dd5c9019eee0ed7baa30d1cb555b5e6d41d1c37c2c81f9795ca72e27a123013baffbfda7ae0fca2a29d39287af5527fec355f92b8015cac735cc32923b9a9a749f1f73e28bc6e997078103934bcccccbcc4d39434df36401887ec6cdd89f0530c4e845ce147571853c33b6f20da551e4183d1ff3366ab3d0918899e92738cc181cb77099e3d05a3f9243ce46f33c3af42c399ac2ee8225063ebdfe90af5bd2ea4e36a6f5bf2bdfa773d88b65dff3bd3d08cd3cfd9306049129761ea516b58b102766ba07a9997b435c7113b9e97300334fe01134966b466685993e93bab326d941ba84831612e401e67fecebd19359d021ac84c18182292e8dfea92d6120bf5271bdd0b33f570bfa179e937871d70817bd9cbdfb4547628b177b4633ea657c4fc002042fe02ab48a0e9076040bdac5231b1f2f8decbc5316bbc791dc906fccda98e7e47f3f38b029c9d5d6744700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2d4432d0f4b2d27169811313d0189f9461ac1b53e4fdd2a14483af6f04b7cf1f330f8e2fca04b6d7ac94929009e8bd7dffdd71f6b94b125a8162c87eaff5f07ba822c7a066ad5ab5698ae14015a9f500763868bdb9642de009261f69f424361c0008fdde8fb2bef4955998be1ae3f5345b5f5fff2aa55186cd6cd75b1d9e8834822269d2c0f4d7a4f8abe77c1d074017ac81f35c2b169c34c3d95fa4a719d8fcfbfb2dda568f9eaa0a8719ae40dda2b05e893ccdc41ad2d7c1f8a989a6f3e2224732af08ae23af39205d46c88b0ccc8ddeaabf359a724c634b3b36ce238f63c96d3103014151f54c2a3f327cae778ccb6e2096431184791b1c9858f852638e78ec5079fd3be9e6b550e8e982bf4678afbaad4673f8cac7b657122ec48e415fb5d5f44d4897c8cf82c86edcaacb47b5a708c55412bf5dd15166d4cef745a0c25cf3f6160b54663fea7be5da2481a75f8fb5ed0dbff9878505abb79312b4b2ef4f2087292447fd76b42fa269446fd1dd96ef28e6eb15219f9e1617d68be82016757158543a5242c3346a0545addc1f64efac80b882bf42e3def9059961c72002b0f3a67a1a46cf8e5ed059e52ce7bb093bf36a4dedc9dcba8fe0624d9fccf5140000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8e88c847f5f201b4cb24b9481d65eab0cf0a8a98fa8c357c0d3dd7dd878f33c461fd025c2dd24de1494e846bf52433f18cb9a900aa33924d87643df096e3ef634994955effcb6a8c58458a42956f3fa5b344fbd518d5f5603a27853ddb2a1ce6ca87fa4565b5580baad8b29f13c99da361374b565d0f0ea6e750c634de900d1eab75c6fb16745d5805040c591d2138e893cd7cd8b016d17ce0e3101d2db8620da935ab760673a2571befc929bd605e7a66653ce224425f8718ab7043aca07bd748cddfd0baa5c53191937db1d90881dae3df8bac203ea5a8e9ae7b07afef95a2b966d64bebb01d4869e4b3f48a34c35ee58e120765eec21066abb718995b40052686177a121d14ff5a42f9b6ca7c00402c673b47326b4f44737e77701a013be22ac92c3fe298d3ef40f47a632766dd073a93b307948fd90b232119b0dad6bd517d15a11051f76e4825deaa045410e71633a1f1609d641725287c22fdd2eaae202339a47dd35e317e6b1f0adb4d664841252f06e56ce08b478a694d76360d7f1a4c127cef283fbc5c809da24c3d9855f378dfaa2c647f2eace8a9e226cf55108d1e6b5dbd2d99ae271966e0f3752db927059e0130b4d7298f21b490dcdb85fc70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000155c6d060eb69a51b4ae8449d707dbb2f32234307ec3285264dade0e783ca07891989419c8b3e05bd8335f0902cf7fb0434fca126ea25ea9d3ac36ce260e32f82d7b1df888092d32550521b9ae9930d2565d838510729c047c284b0589a2a77c24d0a6220e02e3abb9d1825d59162b2346ba0d081cc7f70b2d83d1fd6faded1bf905b0c4710dca46ed5cafd9499bec08184d33049992f7b4fa744a9d114a4d0e75245865e6579338d2c2981cd0fb254a9f37d0c7e19c72fe26e75188c94b8e4e417a6f22402a095ed450bdcda94049d7c937812dcb13c8de940b4719e08bb459859dba5669baf3f05f02d5899a04bcc8236599cd2a288c19c32b55f6d1f7feae4924c746c1955d74794bb0a83e825287bc346164301978596cbf96702802c49e1723862c18d1f7573d9af0e65f238ec7d3c85b7609f86241c054367b7d6ddbf00de1092b8cf51c85cb43236c758e62d691d1f33920e2d9191c2dab1b2911c8193e2705fb124df061c2d83d831b6121d405a2d8c15d5501ec188992cb25b236e9475a89d4a6ddf8b4781521a252cbe014de365e8364cf5e2097f0d8f3c3373f00473d31432211c07d734c43783124743351450d41015b62100238c4293a9c51890000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6db878240626a9a02deabd5b8de59ac983b33be968d9f1038e41f9a674fcdeb50f5e0e5f9c23a56af8ceb6008ed808cf0b4a5c5a6334ed43119af33d312193f9d0807466db968f12057404127e0588b89982bb793c2c71ec10758ddcbfbb2e3393ad8b842960e70b12859b038c10072771ca476f9b9f233963c62fad213107f35a4caeb08271025964399561b25cebf11d53789468772a4c012b04d6b1ecf2ad44d4dd27d384fd74456a551c21e3f64b0e034e658799e9b42ce91c1a2d45216bd235753673eb996cd55a4036dedc41e0bfbf65f0f70177e00c8f00c0d43deb3a22ad790e9363c7d6a647214c74a48e589433ddb7df5a816646064ffb07b390063b7aaa1563ef7dd6f9bd7d9fd27aa89887332ad9b3f5f3c7f4cdf551d7e54a6ab7f62afea9fd7a610889e802a6417dc50c582793e519c612a4cac0af0442405e876fef5957e11198c031d21126b878f7ade4c5839b87f4499cf4781f6115bd0692a6662ddb6402938f30161db722dee2df3006f1d7c86c04ba4508aa3956e7e579c5abe3f082f25686eace43a04e207e3a4cb5964b1ec96aa6fbe2b8592438e2fd40960a9d49500db4448f46c04e613f8c4fdb22b7b209561a86659b79f035e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093f39f7338241407e4620b2a9e9b85f9566a7c5dfc6c9e44ca326865c49424613dcdea970475bb8d19306625380b449fefd37cca31ddcb004dabaad38bcae4a6d2f0b5144cd31a91def4373642be7f82f16959d918622beced53138943ebe98f0c6c7e019fc994b87f2870e9f87f55cbc82a8cf8c732b24db45e415dc364339cce5c15a1b5507b6abd8357881ae5be10eb147b0000e6eb702ae26a86f74007828c414d801ab7ba294d08cc10e31eab14c89713d7ddf9a7563b50f093e67941c13503b1030a1cb6d10f2429a02a4a32df1576b7f763987e0f02a434fe9a409a23a47b09587d3d3d83aada8ff6b2b99cd0f89ae9c04584a7a8464984277b94ea920bce21a7d09fc74df10f9065fdbd7db5abdae82efc03dbe3de97c88ec5d3d7b87fc893386735edb096d86290dc3a9874ade6f68cd8f5254d1e70df412d546f96ceb4fd4e0c9a378ae3ea7d16497411fbcbf317010f48dce3d158d23ea925515f3228fabdaf3a9c2c1e53ba89f31bf19f14656d5e27dd07bfa865d13a5df086a568e0fdd0a3ac0c619899fda74b059521767d0bf30d5a06e0190eb60cdf30739e98af2136b55ec013f18b93ba13dff6c36c4d8cb82ae7d21a3152e9753f7f15e800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b00aa0a1580cdcf18c5a25d08e570ea4de2a8fc81953f4a8730446852bd7c748f522a126fdafa44714e5924ba27fb23c4e8b88f10530039e7d8e894862b0533c3f67d7505380734f78d1d2a5876acf27182051a0f6ae3e22a135cc44f29767b26bfd07d61f661bd49ab96e14c321026e2ec61e75ffff1b2ea764486f1e05f7444df547f322742a4437dc60d1391bc144a5da9fcda2a36d8604980f33a3c87fc285b2e2c093401cf7e3f29caf0238abb14bc62c129c4668f619c17d38f9788e3df69545ebbcab081b371601d4eb10d9a9b19d3a3ee71c508dbb09347edf2c7a189e1f006f025dd6707d80703f570adee03f56f30285900bc85ab0cda32e4b29afb09ad0dbc2493b5ec9710a0216704df2e4b0ae75f1c9392e63ebe1599eb139178179bf0e37fce1cf739150e31ff61364b5c087e3b8b30187f22696414fd951e38c166bb054b8b26cecf8b603a8a39462bc7fd7384c483095a000b366ee5416463f789e5b3498437111b5f588af5b11bc1aaf5c2d4704c1768c0e4e6fe8f627ca1daee40e4f6be9b8dc30fd9c8f6410f44a65ab46495acd1f48659ba60b874a914b5d101fcb1fbac82082e91db5989f4f9983b4375c77d9a62d989924c79a4ba00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d9b1cd991a4869a559c3813fede67842c701262e825b0a3200b42194699632fd88ad97085dd910a8eaa18455eda9df6ce5ffd2de9c6811eb8dbd29aae8f96a4596825667ff7239e9d2bd95ee11ce8b7aa91420ef3dd70e3091939444670897ace1e6750b795ed2c3b64d8131de37ec813c97cc7ac1951201b68026bfd22b007eb304f5596426d7673ca01b0680a3435e7e31d0fbe4cde1564fd3cdffed010dfa465a174a95b18c033404f206ab7e2ec799b8a0362ba5dc55124fc5574a60a7724da66612ad6396b66a12e0d501fd856116cbef352a07d08ff408e43a645f97ee3ad630b5bad4b084f5baa0aebdeb750b2f2eb7688d2b1920f628bbdaf7710cd8b930c43dc677f2175b14ffc4e2a1ebd9aca34e94d534fa4150a1b3d776b0d0b8bba16567b265dd4fe173bd17946fb37f75546cd9b91d2409ad723442bf76a7f40346469b2cf21dd6484e1d33c7111a05ce2eb02aa5376107a9f85d7abd8b679740bbbb250c29078e7404e74f7c3a5317a107f4811379a8da6f487128004603f747509f96744a205ad18bc535f299eb23ec7a24f31adc654b36c9ee380d360c187a76cf409029806dc881a41fd64b7316c12957059520d33230621ec293b31390000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106944f4175f242c2042c0871977b4f4f4b58894e57bdfded05e5a4a443b2c708304aa20b26372c7d2a4435dbe08a89342a97162d9bbfca950a834001e3a8d4656f527f8f1335e09f7b44bd31ca1d4732efdf37252f3150cdc74c3f61ac7eca7e01aaf0e63f8b61985567858be183a67b352d231275aaa83491aae093d95092d7004a3e437c0a02d22f785467c2a4d447c2ae3c1b32604fc012a7e31ce7944499d701394b71253cda685fb08fe19519e9af33df302f7cfdfe307a50a30751e310bc420e35fb8a0e9d73c7040d7a950690a0f1156cf39b67d5e6c5886a03d02e5b2740fb8989ffaf2b6fa225d487d45e5dba187ff9078b07e1212a0a8af1a24a6af8cd0aedc0c6d4e7c7168a8214fea553e5c5bff03afe71faf6e2661870acab7dba684ebc11aee8453761cd70bac65643381511c0bbe5fa17f4a64075cb6ec21dfb593361d168fea1b75f799ef259fa9dc0c658c9e5aa096f971949c2693764c4f2d4e6a69f489a2cb5f8295eb6f2e121553bc99f3f88387feca7adf5bcf040c669618b8f13a7377974799d30245e8d4524d864a8431bdff7fa3dcbbba4289dff8c86139f0dc1086c17aed2e696c41bb27af863436ed5607d135bbf9025867bf000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002716f47c64db2f625fde11a3f6180b83f1449209e87b7558c7034dca0747bd5b6cbb765d7a04cdada8129dbe10faea99a5dd13a55fc62695a5d06a0d6747169c3c9cff871bce2bc3d4b3c02bdec6f28fbdfc84b18feff41e314dae838f0e56350f6b81c9b2cb6bb8cbd949ed3e3787563bc78738a610f7cd06a6f92b1bd723670ef6813e46c3acdee2fbb7f3673711774620c07e8a93b595700d0c7b7980a297a8fcdc8df7085e99aa3c14934ab55f6941df9f50cba0e4521fc6d4b4bf1e6e51d5308dd679a386937d6c6a8bebeea754bc38e1332cbbbf0ae3a1da63440f892069748c82910a28d1509da0ec523d2a6398c0d0f53acb72eaf8a2623eda63ee38d830bd1ee3409dcec3b04946d0ed4c8394cf52b29d4ce89ce3a4690c0a12e87ddb633a03d9b1e3e847f263b169eb65ec6a834f75d2c9168518c9ceebb42bbc61878cb0ca7b258cbdc44a9e8d7370dba0dd68db6e1e2e674ea196a3c675e586ba85264c6b21c6e63bc6b89ef0224addd884a8f9d1767c9c71bbf9ef0db6922bd33a4f0d823c8e96693afccc40612308728fc51e989c1e4f183be52fd26c9e0dcc5dc0503a1136b84ca4aac4b70eab849dafaafa2318eaea214b1fd4b684d9426000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001aeb59ef21a6a83a4f64ecc3f87f08ecc36ddf8c226f88c8df3a212bf4499478981f0741e11ea6ad9929c1cad716687b47ff35de2da15109d893f46f5ac0f7b50af0e0e4b6cd88fae95d6fe641c465549b1d43060979a2255fed297593e26faff8fbe8b2a9fe8c6f0d1fa7f5de6bbae6cd19afb17970a27c5ce686b46e0abe4088f06df4d3f8ff32cc794f9d131a313b10855d9f87e4c3936100e8f0b96e06a4734b4b0eab9eff300fbe97e85cb455d9cf6cad5ae5c69e3f62aa92f9b0f0248f90967021c0451de34748b4dee21c93a20192a27d62a31c26f532d683bc18f9013b34310e3e22c179cd5cc9bdf723c11618224ac370dd86eb13cb82d2ac8c331374224c2c9c05c51207e2e2b6c085dda17348a983af4a98ee0c7ebc6102ee6203b66a2d06b833a521bfccca15f44bdda36403656027644baf150854da30e2c0bb11f1bd09ce2b59b839e83bbe048c12c2aeb3f888f22255d84918c80c3a73884196ac6124e33fe62f3ce706996f66bdb091078d7228b3fdff65278d27c6ebcdef09dca854155e4f9a0fe7b3c20d1ede8d69f497dc5b7869e39d4b673f3e0219ce1c966b3e64144f085830310022cb7874d089965afa1531c72cd397b61b006a9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e2a07b017d0dea6218ceb9208e53f3b91d403188b8056dae4bb43cb57828a85a24cd8378d1525e32ccd096a333f7d3fd2da2e316f6149287dd3fb3383fb570997bd32b0de85004e109153cdb37658a42495831b9f2120f7d677cb58208cb60be4ac6752718b6fd0336986b62ab368949aed32275a9c050eada47f5846e747fd627aaef18ddc35ebc9cb9590b1aeb5a6a28a2e3a09745be90e31d7250271cd683033e210b4dc479ebcf955c8ecf9ce45d109321c9f454abab5a762236fcd5e92d961dd9fd505ced8cce5aeab1c2186c6542fb27c57598ce6e0378739faab21d48d67a1a00bbb9347eaa220813518972308ac7a9e6bdfb33ce4b1dd86e1c80f6fc1c412f3c8c75386c3225c007b3bf3104b8f77d672a70aa931a6090b6bc9b3ff3f0630696d17491108a42bc3bf3c199d4f43066ef21d25a737a82acba5c277cec546668f402c1d2635c9d78cd057b5640d4b60092067e7e4df3ebdf801604b5b6468aee16efc0aa66a5c13bcb140aaa1f3bc6be98e5243158718dbe405f1760f5dc97cf8fb06f8a83c845062256fd78489a4abee683f52a108b561b8fce85e1a6367b4dfabc8cc50b92ae2fa1a633f8c2bd359cd95a26d0ac5ce06ff7613c8a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e775d131ed224772ea9bedce1cd0d8f681efafe44fe7cece254fc45f29351fdd457a60ade1d9d9536b1b693b046175548a6470bcc64fdaf0401bbd3902974d6cb82265bb33f9ff0298199ad22241000ebac089b7da4561215b5718468bbd06d5a725bc7fff4570f2b820a41393b92bc682100eb6c463f7c225b0add2d549a478494a5801bb6ec53743ac997f80ebcf6481f279757da79173e742fde30fc273634993e2b9d17f4886ba636543ca345f36d4e5f8f2e381e0b3adc77f0016505ca0a92de38b4e679fdec08a33da53bbe9aa4221804921d368bf6a0bd7a93be13e053167e4697ee31545e76294633429b43f70ac5481b8c0ca1189e0df13d5e1141de8640ba287c5e69449a49e93b36f8e37a925c976fee408658ad1f6c0693f55f41cddd6af80800ff89adef1d678e77b28ee1fd3ebe6954fc01dcb944ecac7640cc8d5e50159f8f46a4ab3cc8e3575ed44bc13dd9737c8109f4a845848967549d75f402b7982efe38aab575e56c5c3f6a35ab43808b10381dfd5262f5e30f4ebf3da6c0432137415ce3b304f3fc094b78458d4eac83f0f20ecfec42ebbf18ca8ced9006bb1fb45e38c1c1ebe2fbf4e7adc3b318b39e06760b9168ebef12910f5c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a13af205fa7c68fea45732ba251ef715303e35bdd2d0dd44b83edd45573117d9134dda18493760a48ac22d9dd145650c5f9f976c16e0e687a10a0edd7fd674b0f139373fb2706126044467e998eda5fe12e0cd1b7774e285f7b0f5c1569be9a35f13f61fb10edd74663b538aa04225215877d5fa4910b45af6830557c89ae212e7d20ff8ad3fde619da3c612023d1611d4db1baa70fcba9c63b3114d0a9d4a8a0514fe45a4862e4ada63470c7808fe52ef5f3655fd96e2ab86b0070b8c6dc0e86f91862fa59d047d426d438b28ceb19c61b54c94e0404ff9c83d4005f2b103c10537359b6480e6b17cdedab56450292590f8450bebba92d353c87ea413740d3cbe053d554815fb5e7d0f7e79246a8c3d830e3fa6389c4bb9edc01f3ca45b3b4b6a3bef81e98c13c6ae3e648e5474ca2f749bd2817cf8050f3bf358acb78a2789d8da35660f410f7f3654af7030cc86f8250cfd68d3ab6d49b40f932b9c4f8df0e9b3e4909a7b9b473fc4e24fe28aecc977bc1bb7052d1c89677cb17a93122a791ff851ad7e96319ded400fbe923027147110c812fe01cf2f226f8f37f9419733c1d03dae44d9d4cf13d0a69347fa05a28d7a2e63619dea4defab2e23699ab1030000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000966f08840fd5c03b005a5992d796df14ebd5d1b0f900e6b2b60472eae97736b42dbc974974b586b67b1724a848b2f5667382c3e96a7e043352e0ea55002ffdde21db2c74cbc164e680b37b7fb60405b3ec2cf5f5ff676611b1ca8c9f2956877a000a0c27c142d98b1346ff6478a8f67fdec79b566381b85e5b178902510c83208cb64aa1b05d976902232f21a4a06506d0c630a2b0aefa2b60f30dc383d496ae80fc670978bbb62af335ecffb23205ad658175c63038b054825f384350ba76165bc23073a7bffed4bf6f711bd11892359f3b9ee896a753c3f8a3ecc8d1b0b9df62801da88ad69f304adcd42d6fda927779e88bb888a811e4dfc023860e782072c230c47685c97a45be0dd47c6c2a1eaa342f8680e49e3085f12c9d07e5f34c8e1c06a7affa8de32e1b3597dc23f63b28e2efc4a33231bb371d90071b6d3fea4eee1e253002b9794ec8d9cc583e2ed3f9696da86938da35ab2859b93be9fc758dd3955b96f09c875cc9450f805f6a11d3d47d683804f0a4853f3f37c19806c6c832198cf6a45cd203fb24b1fe30dbdab524df50c4bf4b6cfcfc6a8c027193ae04631a10f96f0b1b407ccc9eeedc678f24037b59e079c01a71b2bffd03b6f01f790000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3ac1a752510c472a713b40c4b67dfd85ee202ac482abbae7434a2648faa4b50f93c0b70d52b664ed886292df621b4c6629a55fd0e971c9166918f426d2c9d7bf5f1211768a3af1a7c68d21f314da926991efa97bb00a122b424d890ed30933e1477fc828b5b2106b1fc2bab54e5e027b2eb71c83cb5d205eaad01e1ba91b4792b22cb958e73c83fb2793ae031567938be0ac7b3e9fe2c7f3dade782a5df386d0cb9013c7a268b26865f1cdc8916e481d08ddaf7ad3c73bb2488832ff1a0683b83ae343ee30ca3dda1772b384e976cac8b3657bcd7bff13835dbf65cc3ae24efa3daecaaa576dcc7193672d84790de87c1a16cf1f8b1feb25a8dc8276783952454b9932fe3ce39c66180bea75cf501d1b755909a17d2ddeee64cf5792296495778b5f91b065cd364c39e26d56d6f2bd0b63ddfcd38c75b76f056aee38943ce62f4954c98fd34312a941319455d4be5a89a7292abaf83114a7ac17001c6fe24c022fd26f0ac2e756d38a10ce355eb301b37e2962ab2d57d573d840b7c373256a55b1dc60e47e420465151f71f15b0fd5a27e19f5ff82d522205824d8b915a5e8d456e96be9e77bed86b7d96c2a70df189bbb8a2dc48909ceeb17a07987e7b78950000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111bb84ca5e61e956d5b002e15bff167997a93598da0afe670fc3499c93b4bbff10999d73f1d4266cb35c5c347a11fb19afc001142f97c21233fa4a3a1e6113ade1fb58befb2e14e7ca3bf1849bb4cfae9dc01262cb398314c57358b308ef03c650ea5321b0aa56dc0bbe8d618da8f18b954a20b8f5d5da53ddea0abe682cefd7a8828e8f79be46cbe750d42f5cf208383c1c35af4763252aade05bddf77ec06f804c399091c1151c98f7393e9a3b8bb3a95d380eaa47a799449a7dae869da2fad077e9c48d0e65b614d97a17ad13bfad39ccf557b36749b8d5ac74746c11c6d56d843395529478f3e68ffb7af3ce79d98279e980cfa21e88ab5270e116e932092c4c75d9c7bd1d1b2c84498e841644dcff433116a7b890face3a8911271fd5aac26c8c43b56351f866123d63659a75a31c52145041c9c8f8ae540909eabb12ad8dcf28ea4bb1be588778b89ed854df8be01ab25faf469d3a6204d4749cce30b2c21b8977459cf5b6ad2976eca819aa4fb59eb02d43c949a243019942a098e0b91f6b7ac44ef54a2392dc802a0e2841c17fa59e204247339c085f9a1f5fa6459a9adb818519346f11b67db8414bd61a21231d69ba037343ab64193395d2db41d00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48400131ec596d32051a924426ee1b12ee32d898d452f3f151bf3beb2aed8059fc911a3e525a0e27960667afa53c1560e5ddaaacf735ccd0c2bee956520410ab550e2822ea448518fa87364facce7640e554833edbf51946c0147342fba74f696f2d0700d3d258b7d553eb5e9c4439a8a2412d1ff0a593a70db82b99d42576e81eba065cacdb01347217f5ae38ff17c286e756de65649d60ef30c46e0f69da3e0ad52f7802201da0bbda18aecfe262df6a2f2daed9f2127df9430b7f7fac02fbfeba1a23bde89241a698b2cb0a53587526ddc6d6f139122d343b50f5e863a786d222126b171917e750f3e8d4ff5957a060794084df682bc933414ab17b85324753fc132b226b3453a738c38a31d6482e4cd968d129411045a4c1ba20affa90586ccf2239a61c670f38094d0bb55616bef472aa06126065c98e0c4887ef011d475f21185ccd50ea1e82eab8148e81130ee715b478c52e01f022be19f1644d6e1aad7f15ffbdece389acb559eca8460bdc5f5f241d4ab4910b3ed9d555b85ddd7e56be2c9945bd2904fddad19e8a61062ddceae304944dcb76ef9230dbcd253b7aef682fbfc83c8a10632eadb162650b496e57d6e9fa82fdc949f8d4da5da537a45c2301f34b25577aa541d29e13c97ed3f27052ce1319dc6d3c39e3985c9007343f4e0584c982811af867218e6fa1244d600df04eedfaf56dd042b9f4476f1c475c1418043ba13de90976d1ed1c176ea1be680a36564c1bb824c8817c87d33efd070b03f40b195e2d2396fa5a97a6ee6d58fe1a9b865fd7b4a6edd713a716d9b526ed0150d9fe63ca26dd6456d57e61c2515950e43cbdfb287b75ba41a58e5915450816e01abda5943281360df49992dbc885d96b39ffa1ac74a03ddbba707611dc5d132a20fde3126ef5b8ce99aa4d128fd1b9007bb0282481e0ccdc739535160b1324eaab83a195937865a7da9793599091042c948b6b7fbefcfd0bcb6ded0522f528154554beac40a4dadf27a4884de51512da9c802dfec364b24b22bc4826f7810cdc78be0c52ee49f191989fc816fb0afb677e8e00bcbacbcf32cd4b0d182a1a14a4cd112d077bbeda4be548223e40fbb0a1080bbcf7fc3ca2b509691865334e1928addf417b6b1a79ccd7f75dd183e1ecb608cfbf2b5d59eeb13a47708d431423823905488c7165474b62f6949fe36f23f20b091d43ec668d001c8b9b801bbd1b76208931bee1d7e5148b8966d44c91a7fe5704acf0d0dd33255db15ac4547b230d379be4d1b78f29eef26ee2d04e1c6882f329aa145d277c089939a3cdfcd411f77b6bd7300aa4d75babb6a90828bb0e523d7eb39d0a358c983472aeb8d47120a77bc1b1af4128166dd00fa117eaf232c5480c2a874b5ad62646eb399ef79b235bb9b1a31429ff79de33a954a623fe70c4df9b5ed6593a6969de509853e9de14ae0c8e27393659fd963d6b1fbb30f7f4dfb1d75f854f797f1fc67f94514ba11042733a3ce27b95cd288efd9a73278bf4801ca2ff101bf3c9b3613d2c3de8860a68530bfef5552d40303a005bed4a0e5b84c9e3a029821ed73bce25c8b7b227136ed338624ff1cf6b02e513f810f859a49a89381c5afb95ea02ff67e7adf34b2f8812a39b02b8effea5635a4afa677b41fdf52a26d7c9b6ee5dfa1cd647c9221f9dfbf04e94fbe48c423a02fd4662b5f03e772d909d6ff928551aadd4d57a9d2d05940e4c65781adfa7708af25d79ee645a97e9dfb20828a828072059383ccc0e35ba92675d70583023a211381ecf429feefd2054ca891bcf2ffdc69589eef4067d2c7c2eaa764a46cd1c1cfae393e59a1cbd35fcc03db71ad4aa4753d189580bdbfc821e97c4578da293b9cb3b0217a672335beb9f2d2a373d17dcb42098551bf71bcf73e2d5094a60c0c36fc20271fbf6d66af7ec2a3add5e9a921279c48c2a4c7633647d6893c34bf37d1446738679d5853ade8fd2e0be885d924fd9bff4226e982bb53fd779518e87623cb7ba604477a8090ab3feb55c3f24ed5a8452b317b40e807e71874c8a05b3bd566474443d812cdba01ad4c6f808d4964fc95e250a22876a7fe3c7793e0ca03c76b0ef2d9c27aa98e0e227ad4406c05e0624edf21ed046aae121aebd5060a81bb143155ba6922dab96fd6ba59c638a8ee744350e0f2aca98d1d489d1f72aba4cff2c4eedb67fbaeb27a6c8ad0fb11a7da96ae8150715f55c441369f937ad97c5c368e52e19edd1d9a93b66f8bb764256e03af03221647099e9410f69a360492259da6aa219c3fd204436c59142e9e33035ce9a2b056edcc46ff356b0cdc9e0c0b5a33cd89042c82d9670611b9f57ad8113a9b0542c39cd76aae3035851d04a43b494794315170c90e0c294344fbfa0236ed762360fd392f24ca714fcfd482845c0472779c8f58a2d700cdb520db357b92545436d2dfeb5109a5a0804dde3bd7c527020c14467cbf561d484437afa98abb2f3842724ac93a1d888bdf15cfb795f88e4b6bfa01f7709bfa197318a6780556a03af360078f3741830f22a0c5fbd39a8c2665b26a2ca193e765b2194b3a93b0b6d82100a23cc66a4f27448d864211c816d8c79a90eb77025c8b3cf11a398b9ab59dbc90ef71f554386d2998bf6fea187c07cef819b76de9bb06fefd650c4eaf42c92de098db4315b1191ebb62a3703369062a3013412cc8bf8321f187213bcf902943b0df1fa77b5582f692ce8325e16e50524e4d70b93f9bd4955477e4e70e4dde1f62e156a8f6393cc7c44e979367b9c8420c58080f600f7357bd2ab5052ef0def7c2c1f14743854b5b4662cfcdee1fefb6090ffc58d16d839631237554225f6f57b15a550a2a0f0fd91309b2fc12f91785a711fa4b68e838c4a06278b12608dd8ec401a2c62b259f40b627f2a6ce6a6f7459df4ad19fc694fcff72c671d4716c981dd20cc9e381ba3f8eda3e31c94507aaa6f985b38bde7c42ccd97c0572cfdee236126468effe589c0cbfdb4d52215dab45cbcbd731ce27ae5e58d8a60285eb2efed0ff19ce9e1748c43858df2aac0513585dcb89af1501b385e1480a37d1d1e97012faa2f86c4097d4e5fdff7598869f3f40381d96060aa2d107ad5651123bf5ec30f6d0d658b09fa24274ea49ed8335d31b0ed225236c5f21a46d0997983b63411090d3c55894d327226c5332b97a7755346c924d36f7bef0a9a7bb488cfff8ee51fa20da37697e2c61300466d04eb3c5cd732280be9da8dd21bfc4e32f5ef74a414660d7ed10ea1bbd10b6655e01b88bd7933e5ee108071e8ce1ea71abda01b502fb27be4f6795d92c2541291f3d1e2216c27a479a88f4e99b576da0afdd8c9e11912ec16a1c23abe886955481ad4019bbd3703e6d69ffc132961e87a5542c01422f03389f1faaf63d2fc1eef16c6378d870dbdaed3160092b656ad59905da6cb26b31ba7281f60ffefb896a6e37deb101dfe27ca106128f3ffaa4fe7a4228ce52af39de3424437643278e64af75d9bd20bd4458d4112fbb2c931956d4ebdf3452e25807a2fa23775311081cf352cd8c27b5404baed8918e25c7ef776f42efc6506a8884324efb3059f3647ddcb8549abeed6daec71d81135da94b06e87673a47004fecbc6ad993e7bf06aa690aca2dd662bb39549535adde7395ce85a3387f2600b1adb9cc061916c4c8509ea65ddab03a69b653b47ae557031b95f8b06e6a0b1e5025d866c099f98804a44e0922f98406286e3a55ba7319f3c69268a0ad354807dad52416d5d0028bd6497372b9e39f1c8a828688061cef37b4c55ceeb89390225bd59085301df9d36cae96d3f29bc69161d79ba12e1577cad8723b400c3e7405d7ac4ae0637878dd4064636060b846cfd54111123f1375481fcac426d9f86417a53b7e14aa3e813817d695789641d054f55631042c9f9f4455e8a0ef760e0c23052fcf4547e1195a93c1fcbbc9a399b9b915815de648af2407db118e247e7e19b414a8e59909c6bf59d05013345e3f0fd8fc42cd4dff086561d678d0def54c0359e7a2efcc16a42c8d1dc2753547812fcc7037d967e4685f988992cba33f371c27967a66411664daa83e23bcf8f3d4cd491e3cfc65f2ca80ae07491c5bd9ce14fa4b03c6bbc1cb5cc949186fc273c771d6072f3d4ae5c5e75430350cb2615712f20b36d0fe153f55613fdf6a635067aa2c3a5211b5af52fb2214801588f02a13cf6cb41e13ab259f2f05985d4af492ff7ba50f2e7a323e206061cb09deb97c1617bec2ee5436164704d5462976619bcb4ee8b6a518dacf69b08f8b179576d9059bf3306557949a59077e5115191781431d6b1722a86b89063700f6f064f3c629aca7a4f344f62c268c0a2c585d41188023bc160269e6eaf8753897e87cb4d41d12f498258cb51191201d6e15deb5828a860efc6472def2b4cfba82e231baeb07e581c86589fd3dc7b5f82c0ca357d6ccf964da8f7af9f4d56f586fe3c166d3026a9a964c515f4436aea370e632af76414386e3c0e05a9e77163c494b23033917a35119713118d134f172f631aaac08f0b4cfce92c054448c12e9cd124ca127186f0792b04cbbec9fe29471a21989ed5379bac40fd56cb8241d2c2641e9b9990f844e24fb3fbe4af5c906236fa7475c763d4201ca6f5c92beb7b775169af1be06ad615b05b9c85de2c9006a77a5ef1d91d65370fa347a3cdffcdd4dbbaf43000326cbfec80e003f025241ea1f92265aa8a057f604ee9e3fa3684acf7933f97a0b06d493df932a8214f63ed636caa32163340990a75e93ffd1b920ba1caa52612fd5dd49c969a25903faf8d46fca803948b08cbd7c15caf3b92f729ff938c5dd084eaf1ff6f965a4e5cc15ba4d443ec3915d18ceec21720607bbb76f3292a1cf0236979e7537c5bb5e77c8c61db9198693a6c9a0f7b962d532e500096b1c8dad11d16a7c841b8010c4fe010b51de16b97103a68e3e5868c2acd231b0d58bb2250e3f462fbcd8747e42fa6be0178d9a88cb40bba3f96e197fddd3d270511b52ad24d12f130d6717c90d4879bb94e6a07cce2015deb4bad92c7039209c1da3f15a18006bf98ed3dd3fd541dc0a599072bb9718d77ea623ae8232dd1cea982f9a50024e771bae423317bf4c31623dcd975d3467992b94770bfcb25cda525ac9a678239b8d7b4e7b049046c21b49e349a648ab16a6797c777aae666ca08310daa90f1f43acbd258b1ff8547e5c9d8bad7330b371600b81bdd0b6200b3d1a7711385e2341c4e313f8a897e2feb0a855ce714e9b54b562d1d093f779d0f7aa0779510808082dad20a99578c942783732f80cc6ef0109f20277ce5795dcdea018b8f8b40dad082092ee46c61c7b29d5d436a70e08059dcbacce6818cb94cbb99fe7988d2b4b79bc78ac796df0b5572731d420d7683e04b90e02b1560b933a7d3d4f93770feb7bfc877ba122f1b9a24b76b3ccf7a0dab16d013b7ea82d9b4d2e076f8f4102e936ba014156c77c99814ef1aa2d14d0ca40668f45446aa0be9fa67d4164b5013dfc9ae9f8a67fb110c2d0bee064d5cac8a167da960265f9ee43aaefe54f4c2b7a0ce1ca887c89f6b93ae8c04562c6212288e93dfa20faad0339b3e16d3d292f1673864bfa75cee500d3d82a5b7ef7d0ae9bdd5a32a409050459351a9fd366143eedfa89bb955dc78874c61e3ffed2515629700ec12b68a62128c32cdd16450df8cf297bc66ed32b951e261b15422ae5cc68985a662717b86ebc6ced670247033dfad3d4d4018863613232a6d779276b42d107ba02f1b33210168d742f9a1c003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000018118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000180d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000180a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000180b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000001829a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000018141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000001825e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000001812978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000182daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000018189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000181159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000001805ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000001805c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000001814d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000001803db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000182ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000181213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000181ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000001814fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000182b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000018305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000018280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000018223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000001817a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000001808858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000182618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000180f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000180e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000018172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000180b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000001805bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000018137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000182e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000182297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000182608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000001818373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000180422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000018204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000180afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000181998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000001828d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000181da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000001821d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000180ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000180e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000018107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000182f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000001809726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000001824f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000001803c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000181fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000018205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000001825110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000018283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000001821cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000018094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000180c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000181f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000182421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000181fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000181bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000018304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe500000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000008100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810400008100000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e9949ccb5c3baab74f6689d1a1d0514c7d97d250ef7c7e6d66f1e7675abd39a815f58402cee23be4e8aa58bae4c5fede736f2b6bc69ba0bc7fd607e54464afa8f2845f688df81e88770a27ec5ac78c0cc9cb293c5774155d05c8284dab6a52c9f42c289abc0dc255a3ac5400d7b959b91ef285c3c7b4378cffd157664a9cab74744d77277dda4d7f11c1f7dee270018f2ca0bc4b74680631c7634b8c739859bb535f8f0d23d1ce28137dc25ebf49fbd3628f6b5e834c8759e2a83d1928b64e129183f020cca335c673dc7001454d5a2f607ec89733b57fffeceeec855f06376c7507feda25eefeba0ec62cbbadf49520929b7401f0c0a37bcb388b68e231c01e141a974e6db00e628127c505bc1dfba24f9bfd8c3f631a1e38a817f1263450ef9026b3f5b8ac3a2d9cba6c0a4c3186975f7881765c24a1c6c2449da3924739c1419490556f247eb288d9d33dac9e1bcbdc8957353b50254685bb301e07ac6c9f1bacbd9328044e994c9aa7b2bda10ce5ddfeff099126444d8c824aff7ef09b4c60853e91e27953a0f6244e420bd9d7b471649cdff515396f467fc7ea5020e17e8ace7e8a257d3262c0d4bf7624950e87545dca481cffd182355bbd01fcbe45000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086418b7ddcf4e3fde3c5db148de72d29ca1326e7bfee6a955f4d3ef4def827f87903a93d87d0ca00b5b817f0e0f2b2014343eb559a90f08f56fec79fbee0995fc6f690a8a1cb440be87272c14c92fd6de0032ad3d9a5300c934e102f649d6e6c3111087b8e0615544f30ef0ba75367cae55e66f5ca228d25f99575c99d3781f1d32354704fc8e73b5575493ed65efdfec9de96c850124e30a0e32e65a93842f37c5cc034321f476916cebc7b25eb2c164f5a8cbb7605c6e87d4fd6e43c8360b98b1e7c6dd16ffaeec9fd0b956129038a3aa9bc5dbbe54d13bef78d6b66e16ceb5e2841ee66c6ffa189017ea6b3fe9efc524af6e4238f08db9e1dead7eb87311ec9c6bdd12f0b54d026a34aefc3013d5a721c75a197f3173a9d0310a79ec6bbe469f984571482c891bda6a96be22393d64770ae648489a346976bac4cfc55133576d9798fee5fa570d5e5dfc1e46aeda30615c626c1e8dc09496507fe83b8b202ad23e1ca4bba1f287829955a81e522b89ce2136e1e50bbcf7310ce7a2723abb05336aa334dc6a2daacc675f06804e1f266dc785db63697a831c3b6ee00610346f3b67f11dd901c219729eee7e57539a2b0824617d67136f9dd30269df617c6ee0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000259476a3f18129cbeb9b0c6703fad081f29e6ace4b904b350aa5c0e205b87069caf519671879505a2392766ecfbb2a554bf075fc4bfbd1cb1099cb768cb4ac6428a86fc22850f2709a30988f7d581b009d68c49e6bb4902910c5187bf16351865755a8d96f291bc6e8fe63337551c42821a76a0dfdc08fcc0a139a392307360b1ff36a43b70fc3f40b2663000a59946de983700a9a26df735bd5ac7951500586cc6f582524baa07acdaea7e411f0fc72ccbfecf1265c645bd5da9729458770600e8fb33b6d57516297e0d71f8b8105cd25d506e1fb08b76db5022a2584d1e848bb99c5aab6834c3b478e5b81d6913dd47e7636041018dbdc89488ca0f06581bd86af50f1c88ddb1d124a19caeed089bd36395b23485efe748db0899b8feca3ef7e55c4c3fc34fafdae43f32ca33f28f108c003f41c809174fb1222593e1270bb19a6661d2b2f65714019b06fcc763fae4e2465e7fbe8616519f87c149b58e182d4aace95859d9984418312a484ae2036615c5c88561969760cb3cb3c68bf211d5a35f22b659cd9dcbb3a228097597811d5a28b2aa7fa37df9d5b15b6e3c181aef9377a7abe63e4d19fe3764512b17004932d307bc9961cf7f288b4f14d7b952300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002552f510f5a827cc61aaf6834c81446e414fb9eeaeab72829b8018c9f7d8f7cafe1858584525c26c2c57fdc4d4fa88200ce14a0d3bee6783ef01b921c1e0fa3b3c97edf19b76b82cbe61ce8088602f1f325bb4cc10f55221a47e018dc3caa0f57b9b4cbec7ffaaef52bd6dc99667f7f07fa36b34ef92c8422c847465090fa9e3be68cc6b04e92778407a468a796afdf90e69fe36218d16a31a2efb099fbc9ce988993b6bfa45fda9a60663bbab202b2ef9a84928a779844f842ef206b65716be64d8d5fcccbf4544e26cf5a9222280212c76bc379abc0f9d91395a7142a4839592dd057d2ee939363a9b27dcfd79beb922582f824caf530a7179326fd0cf9aae59b07e72b00ca87ff29a89d297c0b07490564a4879ff12bcf01458225c0a15713d4c1392a1f46bea1d86c8f6a74c54410ecb9e22daaf9c2523a8371f7639574a29d274c0bb98f2e13ce7314b763016ba529eee3acccad3d8c5aceb7387b1577012aaa35acd73c9f3c889938ca5407e3e5eedf2908ee871bd40a5b07985477688a4331a045ec7d562e46d1b1e2902b7e1422d9ac5e0fac55d47f8c4e78a74c715511fcd9060a1ac4e72479804e080d4b7fb09328f05502192b37f44421ab76ab400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100e11ac56a85480eacfdbdaa88f2c1ec0ee4e00b84c1d4c3a623fdf98fd5e968622f67ae0a0e478760a14c12c52dd6678ab32bf805cd3a3f794fc95c6a4d7196745edb83135c733fcfc2deec11561257df1003c60207b971e6c86e58c5ed3e7fdb30762c1da444885869216c3c9a9245135451db05618ba5c6494f68ae46acc059c65bbd0507cc730379b79013218328592e6f33a4d7c873f3a704ce1d74f5e2acc1a50652cb59d1c8a6e50ae018a09f99c135894783f4630cec380d389135cf650d76d086ede8ea2cf83e7fe5821d46ba26359f007c0238f0d08aba902fa3c2f7722e3a781df22ac7df7deaea724eab6e479aab422022649a28d95aba59903b33f948d576925726ee703cc23c6bc4b85d44dd1424a0947af8f7c23cb347dc0b6ae813f5a724abe6d6807ebf61314fa7accd642686cd3ebc8dfd74eb08ea229b7e1528bb74e2f5be9caffb1ec7baca86d0ed873f9af855bee5cb569848402bdb8281c12f9aeb11226f799dad7841d79fd87a246970516833ea7be953e316889dbaf3d1d9a51ccb6ee096dbcfab9e0b55aec9559c5a00747a97b6a3d71488a10c414191fdb5cae6e539647e930ca87054123b641798968e4b5da5cc6b828fa200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000be32aaca83977c914dc1892bab7072c297596807e5b310fe7bc66407416474c8d70463610bb84052065f1883b4990a2de1ce90cbff0d59d7029f9c84ac4256263ba542b9371bd82e7b8cfa191d90b899ef246324fd562bb089e1ac1f3f03234a71ca17ea354f143810bb2ba171381106c09d5fa1bc6604624e8b02416a0fbf742da500970e77fd143b6d993e5530743f99bd2b5119de4b724306d28997030a66d90b0f34e32b9b7c4eb960540a7b4a533c0c23164e675ec5b1c0da480a63646dbdc371fd2a820c54dd4bba7fa0c1dec2088288807200b5862ad5d736507c352d38a6676b0e610cba5a659b4c417d7fd2c8f09244fa86b88e29da0c81128549be1d0aa3471e621c75a5e21e274b04653770f129c0b1c7e77b51aca1f6dd28d9906aa58d3f80e92ae8d62c8850e7cf6dda6dd03b4a545c78a06d99b203b3ec84cf4ba48b41402905c02a804fc828024598217b1c5ab389dc0eb23295364896dff1452911d055c4eea405795d50fdf3887658d88083c08ce68bd57f2ef47f6b3c2b9f77c5b0e19bd03227e1c5218fee12301ec873d6527378fec4bd806f23377074c4af79a71e10d37746fb8eab2c638b13cbc6d231e229d9c794be7140a3968ba0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000842aecd20891d00e0dedf766f08611a8742c74e5c11a6c4911b939316451f45ee68f9871fb357466398473c516f5acefe7e882bcbca327bb44029f17962df3b84ffb327e67f130fe8ab74ddef192c0ce418e8cf8b8184abf9be4a5f70d1f23a6768024f08bd5a0727fc39cbb52f1736ea7dad033e1746b69a22c3367d6ba91f5bb26ae8f164ab7945f63334dc6d6e3c3e7d4d15ed86e4b3d3ef0a2cff0b823dc1f6dd3775e9dd3fb5c30bb21d9f9f4bb082116ab1e115cedad898745375aa743da7d0f310189763385152cf1e5e6c682ff25f52580e5fc1adf926b1d85ae70696aeb8d275c92e8ae1fe862faa92fcbdcd23cf5bb6342ba61210305a36607178c8f8185f1b8e80de8431199cd9c17ef50bc4f040c4e70886587ed631f284ec249c3e9bbd3f395544dd845159cce4b8635417ccabf39d0ea12c8b68f4c1f256bdfe2d96d69a3c0f8c255c516433199564f4683882b95ca5718854c128603a06acf98f8a45b9762b1ab2e7c80708cfc21bf0ac3854142ae3333f16595dba058b7b07f3e5e61783000b662dfeb032bc78de514e0b575c2301d2fb1e2ae6dd57b6fa007ee9b9894adb221fa5a561e92a2f25c852b78115311ca8440deb0b71e0f013f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fe5819fbcc144213d9327212124ffe4b33a6880fe7e1350d26bab0b41130ad32e044ae6b6bf36b3f9921dc13d7bea4f20222992bcf986cb14852bf41b9171afb4688f0e831e64e417e4c468f13f89b8e16569a80fc35378e8a757703bbe0887905c2057335e9c5327d9234fc7265fa991e53f640e00bf61084fdea7c5401db5bf8b1263391ddf04829329bae7931ac17e53fb9b383f3a0c3cb7d94ef762e0fc88bc15e4e46394ab74c8cdb0f38827f87a9ba9c70fc47e04ebbeb1d455902ba3ab63d602d7c30ae8675f1c26d9c5f1e043263e82bdc61c7aadde9b4339ae51c9a16e91ff506eeb3fd8d50a42a90b9a49ab70085c2aff5834af5ab41ad58ff1779a98e4915d0eda741919fb69a6297ed328ed2851bfc4ab914c271f4884472287847f387a60e28a97d7995a8e6f0dfd3c56c1d6bcedc038de2dc28c6990b0bd7c306fa76588f7a27c83811d690ff85fca1bd4d6c563957d508439274645d9546b7101ba4b0e726f4fe8a941badff7b05c3285df8a5f51fdc83816ea2299868fc491b50180b5dea10dbae2c5855e9cac19668b1d581eb28083d9735661fe141ad1926e30bea1a6c73b4e1d4d28222e86789acf4451a92f94a7a9a8b168a9a82fc500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b7edbee65549786fe4eb357551d5723ded23f3d7198ee8232eb80ec8570d92fbf3ce6c61ac3dd99cf0910a0f34ae937fbc325a51cbf87e5f1f88d48e8dad7c086bd3fe5f753e1af1ef1adcbf5e94ef4adc4f12374eb687996c57054bbed44c41afe8412c2ba524d6b947a84746c5f2b3c9feb328131cbc176eb82ff9639e5dd9bfcaf62d3b9ae7092df9e354ce2f118df5a9ee3366c6fbb45df07ac14373bda29aa6230b84548e6fcf3e51edc6391bdc6d174aefe60c13b846c8089cc7fae982438117168f2b67cbbf79a28157c7a575403fc853f2051dcadcb1a65ebff7b33252bacd28b77b7bf87c208041e5bcdd619ebb235beadaaf78e52fe7c3d403f33730827bee88ba51d6d18d983ee72afd52668659c095ae45d3e0218f279f6d9c553e19b428727c1450e9eae53c123cdd1558be41629b51cf016cddd31c8a52cb326cd27d10043eeaaddc22c071fe5cbd1b12bb768924a6641264c861f2878e052de217dac9274264c3a520e462b498f572712d6d3c82a50d424460dc471f30dcf23d065e5263aa138f4230c1570e8a2551e1f1b9dad93b82a2ff7f661de944a73d33a1ed12bf1f32b99cdba6001c94471d0fe517402a5e4d8ed1cca49b405c279000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092e448f3f0a9f14da1b8cf9fc3ca19f37b8593e02cad92045beb282a851d0f740ed9edde7bdb14c7f54fdb1ff1895769ec4173e7aa14987d58c46f87127cae5ae990ae09cdbc088029690c57b65756d03b594f3705653f8c69af0f3420655f889b9e3a1d31097a2cd66c7502a30e977bfd24dca3946a90cc3b9fe54dffe60475039ebb37d6cf2a1faf08ac82cafb72704a0c06c2c296fa4a9df8e99488ce80e14524ef47b409faac74e8fb0cb546e4680e9e3ba006a2ebbb4746047a029a813a9097b8a943bf04ce2a016cca0dc1c87e66d8cc559f1bd209e402887eb5ef053d818daad8e03c88a707e71c2651d08c9371024aa73f19f6c5bac187088027f3d9e8d25865a7e8ed3611f6c28b00175d85868e2fa174053bc8aba319d7fafd3db01a6e44e418d9a25a637e5d4164ef74b37319c15739071c41192ba7da11f1a046f984d77f6c88ecfd71339e36284f415d124f0123e55481b4b64a7589403c93ce737baa28b99930f8056cc310aab1a2b4ca08567ac258554e687148070178752c51847b26c21b6135b0d0d86ca832f4049869b4343b481920146de74416cffbc1eb5fa7569a2d85435875a00bb7da1e900ac24a4561dd0a0f6a84a9cb5d1392fc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009de27431c35cac7c814d40954d1a6bcf26cadb8d36563cd7415a18b6e19b5eb78731965eda33bf1ebdecbd462b155c5bc9721d374f079a4962df9945723dfbbece3f00366a1a98ae63096b4b2e71464beaec72b5881fc6444496f6bc4c59666c054ed9dac9bf38fba8a19be7c43f42454ceaf09796295e7afa73c1e6377e9a6f98fb53d94dfa25aa66d87a2cde89bdabe4146ba5417c575ac3b208f393b0b6708ba8f021c50f0227a10c44a3f8b6cae9ebccad808ac62a04eddd2902480012135deb17e88a20078dd995381dbfceed274f01f7ed101562264ef2c1f3868d2baa11d58388e065b8cc93fd9252a300f7a14f6a196fbc2b57f57e6f1358cb3a4fb0c72b1e30812a5c45c83747bc83fa08e3b31fefe5fc9eab2b89e8913c7bfd4bcf235e2ee75f9fed73379e5bc059d7f1421789ffa3dadd63392d37ef7e1d48cb7eddbe23018218c7c8f3d388007f49e9bc496fad38f58a94e145f6e5e1736f4f628a14d4103db236cdc5eb658ffc9316630f6a38536b8ce6cf007792adbb56ab797762ec452b5bed9c626fce11d263e6594be26dc6b7800b35df415240318408dd043cdde2ce496651c3420496701fe553f38413465cac0d5127048d2db157db570000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b04f86b6d4bad7ab0853dca517d495db42ee40c58caf6fb13f0810228a7988616deea2ee82dcc979881273bfbc5a07fd533327636d85c824a9d31397ab400aa310790f95649ebd2b1b939d4e60c28569772e049d2e22321e96c10a1a63b3bcb032610b47eed70a3eea4d70529ad9810402ccd017d74bb3622ef1dab43b9fee81ddfb9af45690c7bae554b85308b6ef65a455012e9530ab1435865427fdcd864dbe1c78ba07fc60c67d75eb26ef2bac974d364d620fe8fc5fc86cc8cdbd66958f2bf511d0a54624cbab69c9ca68e2fcd4ac344b6746c2d4b519257f0433ef2b059257084a75afc86ee440b8053a76697031acd2347f87b6e06bb6fe5baa1ce118d6b925d2b5d921d08e33ebca72136620e4ca05b0bd2745d6e9a3371e2639769e7c80628b1b73225f1c8e13f6b6541d5c0a1891c59225bf1779ea775ffa0400be3c7a1e2fab7fa8ad7c0ee290dbf3d1f9fca921c426f3f4b97181606395824b57e0b4def9d6937b9d74495abeb0858704790ec99a217d35f38c84b1c220cac66dab39165e72882eb14ac7b7926e2624c494b6684bd2e29cfae8811724d623bcdb4c2f3e871eba5a953070abcc03d76e2af57c5b1efd538c1acdc8c7d6644b72e3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024c5dfda8cb677bc12e0537ed48426f486029639116ad4120955e0cd9bbc28dc4ff809e753ade405d8a7ea3514a822860bd64f39b8266255d4ee0b5f2b10edd1642e2c308cacb732ec43e631c0044a5cdb7fe049ca4f03b5d2258de79c0e359f2460c8ea137bdd83746327c3b0b7871d5581739739882f52502803193fbcb3be54a12a99233a6594a384f71667a94a1d00a395697f10e0de0b822225c4500f10a0f214eebca1f0cdb2ea293e458da26a2d6add32fa12c122ece9e3d93c5a621d64a7b110302a634a74e64520aa289c9ff5787a3517125a71fd5e66cf0f531918f3157bb65c6a4ad69a236a3b44bd535caf9544c16fdc5f040edb50ee68365066f20ce24648a97442dcf2390793d35ae5022703f956e319ee1dccf4d41eb3c8a315c58f9bc08d7921d4fe99eed5457d53121d10e77716f9dbce0ef19bdb62a52412d531d373c81ed9f49edf5aecebc64cb25f5e62b417c950145b7af2f594ed11d5cdc3e140d346dba2f1fb97ba6aef8b9b83c0d1730faab62b07dedef8a9196ef68eaf6e189a7a5ab091128dc5a871ff199937e916e6fca611eda46340163b24c4d83faf7f7782e10d535815ea3675f829bbdb36e94761c90281a0ad8d7feff500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ec148876313a7c29afc5afe498f2292db5b15c4b7a53613063e9e27ab4292730566a1430a284fb28fb3db65a1477ff8ac23538adb60d759be9e7f35b988e9740606612d96aaf475f04807f567304cdc2cf04cb7276da3f0dd6c68673c93380c8119fc74f65160ae5e4880a3fa3220ea60d4bc36a30bdb87803bc8660e69e814c7b826a329e7088f206e09eecf6c6f23fa690f6f000f7321574a6832c158dc3d0377fe99d723678f07007ca645c7caf5197660231915e02783c15e441a88cc57dd804e2d6c654af1122975ec10b4f89b7cf85066a4c61c85fbba111ab028ede61ea6391a8dc76c4a4ddc4ba50ecf1ce88418131a971ae72825a2001754a4db90fa3ec255d3275cb9913ea9c753ae2d1f1fdc28b6e4286b0c7aa90000a5e1729642b0fb3bab9a840eeb20143ecf9912dc0af9cf8db9590aeea6ec6a18474b7d9a84729caa476a6c904c7f707a2ebdb6e3af713c872347c48c7676f0e1647cf3b2e3bf42e745482b5fcbb9276706257c79990a33aa4a02f13c19abed06bafbd6793ed40b4f53f16de212b77e3c832596ea1ab83e39fd513a5b2a056d04d8414eb8dd9c10b72181a40d87a7c4630ad06ed707f33fec18146ab4e686d39db441610d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b960ee0c2f98ed5c517ba30d8e9003610380ddac932bfb7275af406e646f5331c9026055d81a82deb6c69f8d7e6277d3180350acdc8e787ceac49677676a1fb307e5f4b87bd3966b6411efc4a670ddb2de2e626396d59ae4d96d5c404fd8170dee0210a409041a954a922ef6d9af088aba13ffcbc23ac2edf37d4ad5a9b2450d44d7db6c837e508d03dc579fed980b5b10238576d833c8f09a223d2503bbe09634bdd87a61576d383590973ab36cf9b1f8e00d1678f3e224a62596b6693ad2e764639756c2eab58eec014e3cc04397b8c2fa46d0c3dfa0fbd060a4a1db83214f67f3e89e45aa1d211cb5bfd5f72a6547d4668127e581eac339adf2b25d70cc36034a8df5907eea9f53cff27022af0e6e5d7d9cc38ef76fab0c233bc2e5e36c2f05a7a35ee94c466327a7c0d71c0a402dff4da6907090d6bd9af606fd94646a681cb068490c21a9b27caf296071ffa5f8f9441f935933f8dbbad0d675c49809960b201eaf4ad648b7c7a687ff8fe7d8e3a4544e69b7fa7dba5a7b6b57f31b4118df5cbb665666558fbcdded97cd21c88be233c50d4fcdfee619ad9cd75d6677eb9054ae0ede867317b565896fd69cd58d8c4234dd499206023733490a027a758000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084b020ed9ffd1407cbd07d9160d903f324dd2efc018d46c4ad628070f745378743609dfa098a7931df9fbb2ea4618416fcbd9ee6567ee99ecb7b9ab157584bd7fef857dd817d2adb9667d8f8beeb20494203b5d59d983d1ca65502aa7140a8db62c610147bc818cfacf7290aac64ad778d59f37cce3973de835a4a3ed4332f924028afc87982d56bac0a3d7716e7692c77e983d870e382f2e707f3f0d473b913f6317bfa6ba4a1a8081ca8632ec58f7a8a740061bf24c75e9d584ffc7d51a80e3db4cf1c5d0dad01e3ad98278adc3c294c5eebbc2e4ed6b5f6e3bc4e7c62393a2307ca8cc36fa3c9b21cf6e9d71d26ecac4fb211a5fdd62ee0d6d8e69425a4d60dc16122a78511910cd971dd8a4ebc4838fc899d7ffb3130e4c93163fcf3446bba1a18d110e226d30125f3ca9a8cc0563a741fc04de5c7629a14df1323ca1f3334eeec395ccbb17393791c2cdbfe0cf21ac901653e415aab92c55c515a7c3813e39c88da46d41fae1477e393a4d3d9d246e1cd6459ff6761a09f4c14c47a3942440fd17ef2411889a54e711e8acd48e00aee2a09ec2b0f9d16deabe64b3fa20eab639497ccf03c3a9c2182cabc27a65b57c7a17780b6453b627d7108ee019a6700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000540956d0299b63e63bf2bbc1b7ab4f38180b51b69ea77bb2050810fa00a271de70a8f8612e173f94827b010355acb83f53d242183e011a13b3c276fbe7f7087444ce42ba444cb7e481a5c5680251baed68a2d730aec40378eee46461c46f374620d6f60eff041ed8d1b069e19412f05d84c12e5133081111c5ce6b50d642a7f798a670eedfecf6a2de3c437927633039b377b99eeaa643119703d9b8ac0796562858ff8af87b94f61226b3c7ea4d13f106bb2b3c2ba3f52883fcd5fde1c3f2233b3e5907cb1d705273a1aba3a1caaf04e7bb4983ca889a5e2e10e52472eda250603bd31766b4400eddd581671b9c73d5076c99df2efb42da0858144070aa421fc57d3b0fccf655ea3bae486250ffe924938a618393ca01c82741175a1d971924f7d6720a654b1d2fd1b4080c2792ca15566433dfa7d8906905f837a28daf1298a03dcd37a78c843c83bf5f9648b9d8e1cbcb825ebc7c915012f2c122fd5f476fd53784f7bbab019c4a000b464850c517dfdd0aefb9253559bff0494d85d7df34ada5eb0f59c89334a4708861ca4f9abb1ad74151608dd7ae153d092724b10c92688dbd5cdfbb5ed9cb9b22f67352dce0b1ad539cd7c4f3710afb1852f6f06280000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000968568b4eb4d938873d2a825f7c883846a92c7f9181a944e52357d16a4532dc617cb06e91aa20f92e3a203bf4601e197d39c6fdcd35d69f2d4a3bb8522074d36cba9d97d0ccfdc02f9e6eabf7b81b9e38673be7380639b84327b761a0d287a41bbfca28a170f1b3c90161e2c65b15f5e32aff3d45e85838242f719de5f7c5be2044a0e15b8d21e67ce70c8f86eb56de604a816151191f664156f51ab6322babf5a5bffbe50baf18365fc6ebbfce80abfaee0f9f487fef7eae196f774d84b5911a57301a05f9b61f2e21f4f3b0f35a3672d7ebda3efd1574c4326d7ce23086abbfa134f3d587d248378191f88d5a36c307ce4bd025e4d8945e91bd7856d31e172bc2d64155e728e5e2dd5609f582f637f3129298064e0e08093efb426a271b0f5e21998d09da2aabb4720aa973b6e1790455473d1e4018f35877c38f9a81ce47e10cf4add47fb64e0ea672d65194577c7562b2c538d6597b40d62085a3847653fae9d8716662e900657712f4fddccd24e075cabc2323c740fceb2c2dafd692ad25def85293a4d9a1db966eab4daa27c0c8c9af7bbff415302db79825f6bad67a879d3cf73b718a52f5ea1946c3c528fa10315014e39a80b4acc5407d7f07fb82c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004f49e11380218d82287162ea7fc75b09e4bd51eacc1881e119bc37ec1d9969cb83fcfda10f4cc4e0e0a72b033da6ed14334f4244c59ff1c4cb50f81bda6f41e54b2c8f665bbd5a6ff00e052d714fc2f975900d7f1d38db166f7fb2f3e35ba5e70d53ea5aacf698e82c88b3c3deec6747daf8eef52c81d81856b09c0451907870ddf38fa6fe5647bafa4e0e0006dc19466bd17d8c4e7f7d2cba7d0b97d5f55b96c35b114ff0461ae930007b31b7236302efc178a0b78339388015b4644c28af4d7a730d956385b64a995a29f3356201d21b9835a4ab1ee2e8fe7d81d80880f8a5d9b495a6ae1323b5794942d322b56b74b46134bac5035895065c2483d86b3a79f3940ca50b2949116b952732ac375b07ca17a371d9219f24ee8496ca9a0a1f3916d263d1756000c77896d6fb2f620325a318f5233578714516884d5d8cd087aefbe210f9d5c2dc3975f7a5e196460d0f3dfc36114d4d86edf0b3002f5970a406bb23430a2c275da1b954f9c90987105f1679a19af8a29233d109cb18bf4c4218673228e169cbf0fa41dc8159fc141851ceb7a7d9a23ad87677fe14c66c8704dc35a75139512511e10ad0d6451f2a747b9ed698db3bfeeddbb0b23ebb7278666000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017be223cb99cc67c2419bd1aec244949eeca577e01cacd34dce3727528df378cfd54eadb6875fe5abe18152029fef320e41d0730e8d129641a7fea29b18ce2d259849df72ca35f1bfdc6603be37809ea0d701d12f0003dd74da9fcd3763ae254f664e0ea584cc48dfb63a98908f57bb6bb3ddafafe2a1d45fb6a13aa2567ba7f6cf488483a3a280b5c69d47869378ed9bc05fc2cd84cc3b2ffed378d571626d446ac1a86ae72d2502875833e9feb67807bbf586a89ccf251467475321e3c5e664533f00c7b1ffefbb02432485a58e12283f7022a3e7ff65ebf95a0e58ac7167498ae245db7c7751274e1af163c73c64ba2a34ad347cbdf1d788e64f13f0764e3a5476534dadfb62d02c3b033d12e7e57efcd4d00e90ecdd0a827abed315f7242620d33e119b6e01de6782c1968dc8efb244ecbb042cb43e4f65e376fe2f6094095c8e23c7e0daf8ace085df66eaed2ff917740241e8a7a982561417d710ac2a1ff967efd9f8e28c37e492b5d00a54fadcacc79e16a45e5e4b2c6256c926d89ca82f66cefe393846faa18a3ffedf8d86badd5f350b1a537c3939c09ccaab49e25d9e0456a196e19876f9a7d10b50402ddb6f4a2ab33e8b5dd21ea2d89834c50fa00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f8cdf87b9812ce3df52d770f5839773f109c2e556157136e33ee0c19826eb447c378ee35d68c0dbdc0c991ca1a9af48de187f84ed1c1ba42156910ad4b4af9ae3349ab5125303f117e05197c34be64fbe8ce763ea40bc5d61239919a57916f4d1e37b92dc1438b0c846cf4b94dae5eca7a40534bbd855f0294591e01e1ebc85ce5ab74eed9a98b6d4fead4ac5abbaf444366f7cd1f1a46797de2be3c19f910e2771bac7a1174e162cadfbed328e5e189bd459329bfed45b80a072b916f55e3f06d114ff042395aab9869d747237798788ea31b649f595472e97f2d378cc636f3c004a6f5d02b5f63aa835448e62eca317718aa3234ce7fa01b615632ea5fb0a9927f8497fc5c9341e9ccbb8691e35c18559014dd15ea386254a9f7a099d515715984a2c77b7b5f473dffa33b2f7d9f2b8e83cde7ecffdd3babc5a87cb0fc579a2b96a5da4c6a49ec3eaa117e2bade5fb5b7b2610516fc7c1bc01564d2510e6c367fd16b83b3691090931fdfd4beca17f59e620fc2a29ca08eb3ee4b98532aa999e038f9fb83dfa60f27198af6d83dd3d807be6c2c85f2d692f218b7cf821e9f4e24b844082d47a7e712b4e796013e0556bccffa73cf2984eb478321f594e16600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e8a0355fca716a2f91e18f4188305416d5187fc28f936cc7a76bc63a975112b4d916435b64f2006328003e965dee1b6d52b328540622f7c485a0b84a205219557340d7caed3d1a9063850212bbb978e6f96b8dd086e69da92d01c2e96381198db93bcf22c260315362cf4d7d8d06e82a49edbad18deaaf3cca55218bd8e7a851a40855f264f9bb8377a1cb3cbd21f543f0bea9d0c96b9a0e589b41c93ddf568ba283a95ab6bde169de7edcedf10d5574ca2745b5c5f8eebe5618856d4b6bfd3af8ca4b72b484353af175c80eebf19a622b8c5a15bfbbd79e687573c847eced7fe563ec3eb85981856ad72a4ecb7882e677cbb91eb527c1af012ddd5081be528c69779bfa2f52a35bb26240e55714beba90b2fa4b7d3d0388e3d72b112c52c044172f5e4ebc8b0d2c621d8720a969c7671a9459b55f646f32ec33c9cbaefab078a47bc98965b4bb722248fb45e55153d754a8ded88faac6c6d4c9b845faf15e185f47441f8357334c46d609b57604bf76ea04f07818a879845df5d841d7ecb9a2a97e0a3582ea9c5bf12e4ae87d1a7569acf31b01bc135eec91cee665e75a99e661ac175f85763ded4a5cd9e0e647a7a9662970e9c933ef751cb54da2a39bc8400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c8fb7fc2ae912aa6d058db42c9db5a04271f6fb3c3c35795a6dc20478f2bf0f78870aefba180fc71bfc939ee6aa695ef6363d9d29744d9315c21f079eda3bcdfe3f9d85bad15e3a8f815e8e01d97e8504b6f73ebeb9d564dd172f3740802726b63407dbf800222a890b35eafb89e93216aab78fbf7ae6e916e90ad6a186479942d806340722d58209fadcf5e83091349e7b9d644ca3ab7cffc62572e3eac18e6dd9241acb6db9524e3f261502cd138752e756cab3a52fa842c847e851470d42e872591ea4560b45641944d7fbca7e502da62c9944fdbd9f866a9fb1cdfca58077976e4d7d2dbca9d40e29716a8f50e1977e1dd5ff2fb83a141e078f3b71024f1427210e9fa4720676fc4dfb5408e6dba4d10ffca98e97a2f23b256904479affc222ff8f050d79ea3fc883c898ef2995d6ba769a4cba6675bbeb0c7ce00c4d199a45078559277b883271f287af561611ef9e679385651031633d04b0eb75c448ec3f39dfb50fb28b6c8398650a1810f9a7cf2c6c171591a66f7d0697c32140f4bae900deffa3971b5625df9379012e2fcaba920278a21f082e13d5441b510658c4fd9f5956dafc1a88a9c8bdc0305c34f68eadfba2dc5d3fe9f8343a837e2394000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019111414499786872b38e7beacf1ff07d89ba2cc6ebab446109c41f7346112428d2b79ef4ef558807931b6f22e6242660bc7fe152ed6c6ffc012211ba80cb1abe7cbbe3648b8f1c5fc207f3201376e37ebd13ff79f66172773ba4dcfad1f6dbbfb5c220d083dadfcd32e711a27cc22f8a26a49023ae8b1bca3dd834eaae3a6143123c592af65458608b41e718d333f1c28207f1f3de0244e74eec682326075e6c73c485c7d62da4b38e5726d57d8444b56f76691bbf238eddb7d653530bb243eeef389040877b8ce959a9d611b61d5be7a77af2ed0150258c6b6f69c947456d119b320632a2569f8596c809168251461bd5ba6eca650ace0716b683ca1cd2d15e059a6e8ed8dc24d60e9a5e130aa2f1f635cb4f8ca45dc6984685df21936f5e31a390d01c8143b656eb8caa04d0957e4a71397426f690036a8e5301ed99d5f43fd1e02cf8d6855db6d614185a129ebf66223c3ca72cb777de69e951be9e01b85e1185941335252c7c0a4e405371e05f5c60cf1123ec5b9575a3bcdabe47f44dffcc5a3147b10a15428df1bc1ea815932fc0dded9cfdd4999d34e9f73ded507896bd99a08ea3506da96e7e8f0f0f5f2bf56ea3fbe2ed5d83307fbb3b4cb92009500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f4a512d2083e3cf0074f2b3bf448b46f6632d89d0ae9030d66f47797dfab1eebbf6d87b1aaa5edb90cad15091190e90ea119585a43bbf196d28a70426cfee230fe57371797df4c1f2709a1b6a78b15c4c48e2eab4ac0402bfa47267e1aa1e1bba889c606e9afcd1f2bc49b03942e68e207fa27ab77c0c97601f8c8ef222c1aad30ca9d9b31021b36c83258f553b3bbf5247c4177e6be046ee4968f227784a8a75d05b9add97fa4acf9d27aed62cd34a0543ec46af6cfb47e7b73eb4afc04f21e0fd66fae19fa8fa3382ff88a77c1e415a8587adbe6c714672b98eb41a634513816323d2601785821c9780c7421d03ed8b2b252c234ecd134fd9c0b87c120d2be85c1466f35e51c47f87f9caf4fe6968d574c87da2cc50d47c5f12c34633a71d322b83c10e620168fb89989b59697ae4048ccd5844e1870822d99ed292103acf13721019d2e66f6fd4f10128882c254e6fec9b4de9164b855d788dd3beb1761d3f5863374e47b36923a46c42749fbb4da0d84777c3fa571fe7c14e4e6dad750d91817b6e92f33dd75b3d3bcd888d04c17de66ed56bc54b1376d1758d6c9441afba4bb18fd8405ca7cbf05d354b5b5c6334953f45e5c619c324831b860623f9b200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e2d43c2c8dbf71011ca6a12ab0fbf9c92390f716bf7e823c035a659fb31adfb9853e5c0c3572cb9f405dd441e5aafa40f1e9f50c0f4f8a727e4718cbab07a2a703a7c2804f8d931e5602a83ca020421ee4cb14185be59740b599f4d762d8f20a4707143e255bcff59a07db8183953b6c865ba6bd1027f847946269dd484d0c4c5e8a8aaf179fa0f212a97e11e891d7effcc4b043a06304f033f926e2084eab474a2786af3b1fc590bb94865f000af0df6d1cb33b515983451717624338078930192ff0a05796657f7dffc7c180baee98df1beb29a59266f0cf15d83c8d09b3a480853e7fa67f2f6d01d2a6dd7cf740186e99d3cf59a35052c5ac6df872ac99b8f9dfe85aac528dbfbbb2df2bec3e7f581bd137bfdc5bf84b797ad059c6bfc47c06bc90106cc28bb0db8896cfd0be7a9cc3f0fe33153d010521b37ee81698b36617c6db51a263c56939a3dc8a3956576ffc02f9be72badea5d84d0797223f4cd2663f66b174c35b177fa9446f03dc820ba8505fbea905aa0c3bfa8275e1752c3f44d1c1c7ea45a480fd0dc1f03cca88b608a104ea642006df8848b4c8f13e1f14f585d7addad4117034dc915c11660d3d0730b9cc468fdde4e33d95bfa81644600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ef9b463766033e94e53a23b31d4c1746a513ad9d8da402b27597a3d2609025f9ec979752a7de31d2c29dae8c0a009e487762a4f2edb42cc5fdf4079a287e94140f9add3f068d2220b54cc00147008466b66db5fe10e3bf32513273eb939764e9349d4bcde7a1aca78fbea84ef5a29eaf2e6e5b299f5d24d66bd0414f8ad005afd397c51331804504f3f1ea3b9d233998397b8f29c714776c981bc11133f56a7e1eaada082319aa9d5af33f9147e35b431b346b20cd144ecccf8593e925319845082bff35f896d1af45f2d0dd7d524dccfdb73437224b5a16c16934ac09825939321d572087b8105c59bcdee260cb5f7ad122fb8838f5c73e0af3a4b9c520ed9b44f1dd10d822259b31a20cd29e821a2865739b445174248946a40baa780dcd0cd8b866aa402dc0cc080e86d12f439b3db3540913f8681496ec63ee72a8e422a1fd1a047219eddd69cfa04c94760b1f3e28ac25f064c43d38e5aeb6a223c5f21e39e56d1bea455546203a7d4fba9e6492f92d0c33ec4113dd8c480ffc32854f36bf5b0f98afc7b579f966b4cfad1a2c79c62712da1582809e4e5eb1625cd125fa253aa06e72b49ae79e4c02bc26daf2578ed6ba351c47ab5fe35e5b1c07d542d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014351d46c2efaad952e64b4874c5c2e8e89e438cc4fc118b1e0f667505c807a29ae7ad1c71421204c11c4a14a713af98a3ca913f1e15f1c65e41c18b8c684ee524f4e6d423f70f974e83932669cd56fd26480a38dc7fcd80a2b710821c0018c9acab3a590fc9630fa5757cdc3be5adbb58e7a2f7fb0aed6aa0f2216ea67effb5948612764661e6acc19e797ee2547d8a2f637e95b3f048abd9c8928f19c30f6f4f58a8e4b8ddab1ce59268881bdb32cfe6f2ce6dffdfa7fb10f0176927327d59b321469ae1fedb013ddf0e9a3f3c10456d55c0e4e6aad57508a1dda758ea00fbe1bb93e6081ba8b6f8209f476dc34263313d6485978c9e9c9e612d1baceec73e08bec6b62ae20faa93f4bd8917f0466a8d3f406925d0e61ecadfd1e22c262fd1c99c397a5be823835e17889d399104a5bc598df3b905b37b815337292ee3629f0a605645fe54265defcf8bc5d1ec79e235e782fcf41b3aae62816d30b50c28bc7b3b719b93cce620f9c1e749a196f026f5609e738366b21993b364c2f206bebf8c65c8d8e71df233bc2c6f4f70bdd54d62299cd6099c3c705e43faaf7c57a47942ed4657ebee798a07e9541a5e89aa98f779c075629ce416295b7766365ec021000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024a4dc01194eae4d9565f609a7ffa3b2425d82e997ad12e7c089fc762ceeb3b8d15ecfcb518f9a0a525ca6bc0a95d2c49738621334ee251d3a9eef43f32de456eeafc0dd0a8afe7393604f3a4f8cf986980e7037a8ced872404ccd47aa391c421abd011b30deff18939727fd2cda76353571374ece6c1ae193450f7d40e1660d2ff7d5016f4c3b81369766bac6a74051709a77886bd269b4bc8e3babc521f24941ad10cbf3497d09cf5b1c521f7ea32007aadad35be497fa703727478d4f7ca04aa27d03a6698ef22af4334bf3f6f6bc8b39a4484548502e92bb89dcb8858098b3fefcdd57f97c312d8949469760354123fbee1dfd5445b6c160db8dd20d1e4fa2139e2aff0cae716f9c137ce3d9d33ec1ac0709f1541940879e1fb09318f23906a467ac6a22c41c3e2969828db13a70386c7ddf464ece3d053399a4fb772a00b260604b411aa351625242eb155c5edcc91c1b2bce9c9051fea0a3e064dad5ef9c3b9fa8546a4c2ebda303b779c5cfc7346a503ae5298c010baa423fee69cf8735c3fc227028fa4ea99bcbbacaaf5da563ce6923395df4ebc7bd64ea717ad83e3588ae39f1c2562a55b48fdf2163405957b5088d24182368e9f4217c9a2cb8540000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afc88a4e8e5c35c9feda1f06cbfb7797ff2bb8c7ba42ef9d0a59f970c40aa26de4b8007265725ae9bf54bac2721a7574398cb9042fb4620ddcc2af26783b9b1bfaf070af7e0b4bc88f44334368672608803f79331afbfb94264bc7da779c158759b076540525f8f44dfc786e835e470e0af99577dd9c7f4b772eebc055a536f6471d0922858b71de09812c59e5b924c20ae4d78bd43befa012534e412a422208f4d8e831938cf3a90f482d8f8fcbdc867f0648b8d57866997fbf57dbce44f902e7003463a1002cde712e5bf9bc7388226d6c02e5dde47cd17590efcbac80830b52875f86865681e0632277abe56c94673ab15de88027b7067d4907e2087983a4a03e94bdf7da988eb345502fc9847d8a11845269ae1f00fa3121db939c3ac7f9367cc1c83b6b3dff47ade95bfa286261bae8087e965190aacafb937d1396c401a5d881a44edf84417555cc5f33c66a53dfaace5cbc154f622951a2914b4726241d77ce650447d1bac1a4da5668a22b6f79aba5dcbb131541fd8c56f5c93dd19e4ae495e6fd17ee731570c77c01bc9c668854b5e059f532909569b2645808762375c7e33b4bfc1dc96537fab61d9aea25feed767dee7ea20ee3854f04b531fef0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f9eb8404cd1fb88bd2dc047ece91cc55956674bd1c49777590fb9e7cc96528fcc89e809003f719a826b89c8a1d869b2f9421251c69b0eb08c9c3045e1b80df5ef7c1eda47db8dff6ff0a4cd5a8c9d186d720e2db9310118617a3db0592d26bf4510b13563107455056f5cdc0754c7d47627d29829fde0257f2832125b7130934abf9146d4b1028db33a031592c95abd1bbb7a42556019713ea5de048d2c562ec71f1e41e585e888c14660631ecb3a3e651326ae6317ece77aa2bda117659b925beb12286ac2b80796796cf9b764020733fafc13e21c83318fdfa9881f66f17b2899538fed39b1eb577af5e2e782e557aee2a505dadf6d167435e5eef4112e2ec8d595224c54b1c4cc3b9c433816822f6be5d4466324571d3eb12e513ec4fac5d62d1806f1a4c04766db58730be991e702964f761832f0619afbc880266827b38bd080e7746c24498365392990fc1bb8d45dd97e900d8f6babeff7450d4622b505bcd5023f59a063b19cc3ace161a071bd7836afabdce18f9801d30a5e3dbc10cebd289ecc9448391644dec5022469603a11805e2586c8f8bf2a74fdb73c8af42ce18803458ffc052bf0861eb7a60bb7b798b14caa8da385c9311dd404a98a000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009fea52cd4f4f8ca19a17c275a4ddde36ddd4487a883c47e8a1b1ee641ad850b66cce3271e32324176cb5d5915d2b38b003c0fc635138e5c8cdc42d9147c658e670efb3567f9e834d523857f7f741aaa6a6455dc1c0481274560321bb4f18d9e750384500747d4f993664362994161a13682fd4abdfa5bffcd7d3a5a59662f54620da6f32e4295cbb6c08ee144ee7a701beaf8fe1f948bd02dffaefb9d7fae13ddc55b8948447465985cf41def920789c63888c00921ba826a8a68832322bacd6a9e90bfccdffcbbf4538e10fe9af34f6c824a789603f0f8d9a420fda19454e350728cdf570c194cfad6f5a2d17f9240f43a87ac814b0205ba8b9597192cc35eb2dcf11901f829d935ad1cc555d274f05e2d21d0f7d47964c06487b86e628de136823f3757e5d95854bb2ef42bf694df11172ee1d93edc2e2094085a24f08c5df8eb14a92a408625c9a15137cb871a1296f4185454c54969875d80bd124e450d23327eb062455ced911c2e77176f5ec21a3086260247249c7f3792e749b48dd58045ab9aa2664c5248af74bf739e427a82c042b12bbb72346a1c7cc13912b68f4770993f54c043bf9390679a29f6141fa0122dc443c74723f29ee7654c54ecf960000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7cbc829d8761db69beee794b89acb16d6569c8835d058e5ce0d0ba0643a6083750d92de9a2b3d629cf870614a41035233ac14c78a7bdf461e742e0754d72fc2eb90a0f44754edd9cb818760beedee67fa09c2a60ca9584e73a99967377d5d136cd8d9c717457fdfde38b01df10dfe01d9f1e3a10e6be14d2cc4528063b3635e44fddca25883661379ecee3af01ff63e3d1125171d100b2995c4e8c4f2fbe8fa4d49925e094ac13a9d36329d868a7ec5cf90bbd654ca9422d31ad458c782f909e7d47b5306a41e975a70c7af26a07ae4e4bea9d4adaae48934354b6aa515db044290d36e73f767498e5f806774955b0e5770d3757bb69e9f0f5ba38c18703e95a915cbbe79f6a338c1d186b2776673e823d94881e15d12cfae8ef2f2d91092815539f8a6a0f6f1d3950d4b5042a9d031a3ff5ade66df8928911e28f475ade2ac630622caf359593d1e37502ab634907ab922da7a0fda51bb92218e138ab104e2d918054fd9a6abdc516a3bbebfc14ce974d618b71e50253d27bb67b671b639b218f33c7a20a4243ae510ba1dd95b02250d9cc5cd56c10da89187d33773ea4bb5a5e32e81e76ef20242f997faee48752c199e9fc1202812643bc000c032d1b6130000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a513c6dd5c361049aa33ae9f7023bb81bd585db45d2fa8b243fde714b55ec3bb3f8cb55369df5c782c368d9f10084a55d0979a20e9384307f111577f0ce1aa102ddfdc1bb21ce32fc4044c6156a67b56962e1e5dbb3e3cfe8535aa108bdc1260ec394008a2a508b4815cbd5478ce3ed28a5e52c1c2fb6fbafae96588748f0e5139c08b816eaa65873052999b5a49332e64aabdd8e84a5c612289cf04ad16afc0af654aac8f2b4618026d159a7df3968a2974cf25a6eb987f3a3b01db520e750f275babd5823f34820ab7d68cd7ee8f0ae8cf51394c4460adf38b3695e664890cb0265ac857c88d3171a8c63b72f640d79cb3923ad5b130765ebe0ec0a4d29595a85baf5d7b3fbe29985d95082cb5d58c40af87c72ad6441aa1f8aaa5034021939064558cf7a0162797143b96e1c57f973d8488145996611251e931c6025dabedbb3b2ad5e9148aad0aee98d6b3b575b03bdf6acb0861047c1ac12a6e404931433d1fcf68fa0d6304be18a23c0044578f51f7f82cdb38739d28df2f71bc0b9241d6184c7cd8baacb1db3b6ffe786002bd0ffda07b2ae146551ebf992e83a6e97da0e3411402d9bee6de9d8ab54c54192ed943b5effe9a324188289fcf142e32590000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000103992285f96ec0c8234359e32fb8b8ddb2b45eba3154f8d87c336f886de73a434d4882eb94651ed9ecd13b7c07f090f430daaeb6afd478238d09f060e4e5913b849f94c63e6f46668461a546db1d010f09b7b988ae24b65e228dbaac21c900d703dfe0bf8f5593369081936180a002fee1e73ef81ebe08774a441b63a180d27d2f9e4c59708195f38515f304bba993a0623081820b5ab1f7ace0893615873f475be8e461f5411032a9945b14f8b42c050da4cfd8d99f7013711e02487ab095445b47d5e14067010ed4f5dd9074ee5795ebb873632ad7e554b3636c831ed8966220ed1778827f96a319df9968fcd9a9d03bd066c0082fc3b5a698bbf093b1fb437ad8cafa44c92ea49f22a9895e988ba42df2cf50aabad160031e2ac8db8bd0e3d04b8da742ca9ee62960869070b10443831a39fd39ab407c4aa10d8329fb5a66120ddcd359967af20872bf01b1e515ffee939c9116f134924ab99543126c5ffe8c835fac06f9ea0379c60e39cf872dfbe10a0c554d3cb16bb62b890cc1976880c76faf937ba0701fb505ef1d07d45b492b9f7612647d58a3c833f05d2e1b761d08adbe567247de63f40a2209fcb2c32d1c6ff8999a9b0a35df70d4bd421cb100000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000846eb37367e0245c1c631e4630abbaebf74c451cc8a71b84fe1223909595ee3117500ce8c83b4d51b7d82ceeee2aca693e3e507f2d633dbfbd5ccefa07af36763286bfff5f2ebd63c12d488f3936f4cf1c3e0b870c8afa7c8d869a926bc34b7a48090828a24a73b2f70c3aed2a49730062d5505ff09742384faf88f3e32c172414bdd706acdebdf7bb52c4153eecea22b2519e7b87f6f35aa4d6c4ec84bcda134970c0f9523969b316a6f4806aba4eec52fd1953b0caf29ff4c21abb39001fbd25ee2681d8aff7a0be8d451ef2242b839660e2d5c831c0dff78cccb3105f0699b775df51eb843b747510b84599909413db03497bdee68c11362de8764429e848ae0f67dfd6182170291d1d7b14e4d1e2e8be06deae4adf9c5561c571b20f113ebdc3288d7b632fb46ee432abdc501e8c807a202e0dee9867dd6cfffdae3819ee63cd1df9c0bba088ec02b4f84c30d36982e03d134bad5b9b97e92a52def965641762c9f4598596224cb6792fa6dde2f9a7416d35c4ae90e5495d1f8727c2d4d18624897f0e357f1ec42f2c8ed4925a1b4887e47d2e6860544d7d1cf0ffe43686648778b34abe57463164595905d3e0b9f71e0ffe4a461264c4ddf34acec125bf00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e3063e8bad2ad38c246160af8d001163b22f63b279d29d33483f97212c6199e261b62ee7ba9cdfab93e1bc9cd457abb6d54ab885bc2cb2b8af8d028d068d42e8160ac1e51b4c873466d41bee128d3471cafbdd3a14aeccb0790fd56d7d0a250cd76887e72a407643329b66b843b51fa39fb69a87b8af33c585669ea4d19e262b8fb5c3786dc5c9c6209cda445b8bf0af34069e21646d8a507be5d324248eb0e5fb5e26190b7c7f790ed369fd5575c0cc37480b26d422093b3b8b3abfebea6bf1f9c6294f8af98b564dd3346ce819a59ff0e116fd81b00a6d98a661176684b7157e30bdbe7304c7a946c693c48b2720cc791fbf21cb78888366012c67303f46546e930db2558cd1d1c72ac43b769bcce0a52fcb73b1147a5164b8485973c661a02da46d399701c228d97253d05bc00e2ac54ea8f3acb160bddd03c1c674f22da0900a7accbac65cc41106a85536c02ff95d490146fbf3ba687fd59b29f2d2b72914fda81543069b18327ec075ac26a14290d7323d7e857d087da016112d2aa725ea8132d10a5c12ce4671ebcd6aee2e7cb2aa9518668c826ad9fca1bbfcf71302349c2d0aa41d2fb778ba82fec51be5f421d09450bd836b5a91f4f3559dbabf10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0f3c8e52cb5fe955adc3740cdae00fe43c89edbb772fd2ec7f2c1b9c47ea1b8eee4c17359a0a86d325680d2c4f97cb4fcbaa584e35fb850f11c874d881e67f812c5d7582effeab423d05990e5f3cc4ca5d94cca912c8aeebd625a50866b31849159880c1cba0d14b783389f3cbea30e77f421870b2c66161644dc3cdcbbd7fc8acda8b2168639c7f067880b28a687fa07c649169d9a445f41091e2969343d654523358f389bfb68ad08e31abfeb74a61b46e6be29ff57deb5fc2f9ac121aae8af8a9c5f09713dd2a90bd5b867d8ca7d0fed003a684c2f764db82ace28ea1ec50eda4de4da6eea97f439891ddca5d83468dcce8a19af9b3814c0619f7f59deefc8b7e9cd15aba82d4a58f0867e2ee685d7bdcf139fe455d195fa5d8a4d8b189cc8b173638961ea6781d659d41ac1f8f76fc0a1bd6812b8dc5874d5efa1fc7d0e04a627a70083614d757f35c024598992074584157997586c14ac5a696a9a57126e269495fac57a5d51d285587f2a4423c190b25a97baaa2f57e441d96974461f1a32394e7ed16657e0ddf73e144fc68e6a2876a1e5fccf90cf10b005f39d0ad894959cb0a5ba2561c302121bb134bca0ee7a9b204ac669197eb16c9370070e9100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d107c3a7201e8569865d9235007dceccb4759e3ee28010026928649dd7751c08c48d761824a78fa958ea10de117c02ef04935b961714689d6126733055d6007937ad16b13590279e3dd6bf2f58898acd5fd36b21e3070eaf82c56d587090290627c79c5282dd12a26b8007c3a844bca77feef4146f1fc68b084b1eec3860f24f61d2c070c0b4328b3ac1f7700e96843c8da25322b729a552ef13d18ed90f6c556cb4591e956defadd2e952cddb3c28d0d4d3166ae9660b65b0ccfb0805fff4747826693a1e3cabe83b5ef82426c1ed37a77d2ab6bea6b9b2f24648bf1959f780ba3f554cb7381ce6d0ed3a68f6702bb67252ded112ef318588b41cb3cc06a18169952f00f805749fc45148edf2e90fcc0e6dfeb320341b313a4f51f0e3ac25e2096c590a712c3cbbc4426f54687c26e375e24ca2a25ae1913cb67fc47a6f93a4635a44596931af3b99d8ed12d4ac6c6bdc4ac9e69e7b9696b811238f1e879cf2ae4b13daa518241f5a03a1567684349a476849e14e5827977c96ce5ad4372bf933d166882bc005bc1a8b9ab66349365e7649c1c5cdd3af29fc458508b1369cb33fdc8e83d8217fd5ade5daaa926cfef938048ab6b9d165ee3b116970cd38008000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b3bda560c8c12e1312de7f9621e3253d51fd1ba0454963ce4675e53ab38dbf67a468e9eee261891cafb14013af1f75823474e2e7920f3e00e31ecffdc882b75486284fd2539f158dd0c96dc96a9a5132e36dec0fa558546e6b0c673b0e6ab67cda4546e596b17327b996aa201aa11b90b9fa8d9076f256819652836d31d405d933138613d48994fdd01d048404b718376996819a8dab3209e8203044c50f9f7053f745779474efe5f47637ccb2d4e26b7bbf047ecdeb7204529378e5882f6cdb3ddcf2fd66f3f9756d2c6c2801f8cb6e44a01a9b08384ee7f6166d2abf3528a9547264fda02e1d5232116b70d786c7e0f1610436e7e7f1c5c6d873fb1002b975265faf1fec62eaf792846555203c8c0c9cf8480e76ac0830e46ea9b058e4b6a7b8d74da4a436220868aa4c2a91ad4765b4007ae2356f33aa286ac15521ab4616603088cd2d97da9dff64d7d5c8158b75ce579039f78df83d287bbce25b3873f46a8f173c74800ec0036d3b753a137c2aa6f57bb06d15bfd533fab6134474c55c74ab68dbd6b46e0ea9bfcbb57f7eb191de0afba75ab353733d2c3d8a8d4e1de3888d8116bd30d13b1f373c2ffdb3cdb9d342968df51d44496281c0841c47c900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a97c4d37320b8600239e6756ff1fea0e3ee8f7186bbb1d14d680e0be3794752e1986c7e3f458a9647c38ab261883962d728a8b875dfc67844dc9b0814af57ad684b063ea06609048b5c35d0e924743f5c8951b2a242e0ae68d1312a345d6a25b11309a8de79953751ab870ccc389ac204ba878c97ad23d54a6af713178e0930d5dcad66b71658771d79f96ed97af9b52e03f18bd8f8a4f86b3c4f5ea2852b8b83da36b85452c996b8149a044d7f9409291737c38735a068a79c9dffc5f25063c3ec9c313b7caf057193eb5b61fee562fbb76e2e03efa0ee3c568ae2d0c11ade2c67f76e8a3ba789556fa73ef6f1e633c81a2d9dbcd969a4363dad74a741d822c480f0c752bdb9b25e05e292b4bbc2f771ada3087a51873e03d80aa6bcc548ca6caa7baba072efa102dea87321667a12fbe3315678a9c80cf82f3a96cd628b32dbc795f68399afa4101661439b36c28f0cda5c1da378f976b3125ce6ac8b636a3534e95b50b4af36ab1448871c42628b0f37e2eaa9b19214614f2d73e21ad10f456542349ad7f480be8a3c29234a3e5d1bc4d057a8ddf9876c57dc299d814539b24a9a797822b0173ddc0c4c58caea774364df6c7c5a42043901b05cb96bbc270000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3a30a041c114a2a4a3334d9b52fd0f59fd3862034795f318cca801e58f599ff6f3f5c279b9c5058dd5c97c95b825f742f14ef5d14ba6ae89d457836214dacc6de96dcb0ec93de3b07521d467a95a744689a5c26794cf1033fbf2c9a7c5ad90867ebfd0e5fc31133930e199fb7ebbb5ea355f707ae42cbc3a408558039b49a1eae60c3592fba1ab0c4005405cd4a6c92a67ad86e4b0971840c00c0f9615c32016630883c7965013371916502ce24b7609bda96a0a7b9a24cdabc5dba92ac945ea4a4876565a0a2a746aed43814b259ed60416091223d892426179a923e903ebffcd42788fd918d47b6ec3d5e84aad46a784cedb7f2c5ea6c69d6c370521df6a9073006599e5228c5c532015eb9c06b127815b842ea889bc47d0009404debf9a7b7b1166c6cc94e79bc7eb0d1b8e3a91d7e532b584adfd955fe4b16d3f4e4571511687808b0d65044144bf02ff8c6edd2e30ac08248df644220ff7030d2ce8f2bc79d2a8f538bb1fd5420030cf9b08a228cb77c41ba65c81e0fb75fcc15598b8d4f2571a579d1663effbb63c12ee99d12626b1257b93e633caec818d8325699d741c814cc28f8182d3839e95d79ac527c450a86ffd4b82d3ca5b57f6cd3d0d6e700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c258f9e813085d9284724003ebe4d639cfe5ca2b0695185963b78e2eb88bbafc0e0090d62018cdb5fd1c314c03f6b3a9e8dd1521eab8faccf782bcfdd4384eedf510ee219b4d5cc39f2eddc3ebd8544f8fa83f65ee44478b51fe0fa820e5699ac2329d200b3c3c7730e4665c27db63548bff0ae3a7f68b1be93fd542787780e7daf68c3ebe4d1c0c5c634891c28731148ba7a42b73521158220ac34ca84720b6a4b14b2c37297c2bd1b86bfe63bfccb8efe0add6e0bea189d3bc5646329bef3585daeb1ef3cf9385f260ae11dc1179afdf9c799afc7c035c93c1e6e684d04a7b44b68cd08956fe0fd4699def5db5c929a69ecf267cd2f52eae7778644fb3d8e04932287cf5247b980ae63690bacac340bbfeaccbb8f5d090588e9ba1a601b3a955f1a9afffd4610416f3109847634dbabfe9f9c8cf140ee50ec03179bff057fff9f6850ef4fdeeb92642898b648d2cf79ab704148d3ddb35a523eb530664ac1822a52bd17efc153c775974c6322c3cf6cddfcc41d2aea9d5d6202de9f69c1ebaf2b5c78d1a50bc9043c83894e23b5b40036320145e1d60f115162d1cf4129f0c87c06c8bc1b1dc3b67df3b76fd940c40c20a115f6b59d9a3d03f1c650ec7bc40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000221fe67cef212e31e0035b0fbca0d9db10d68fddbe50c7e3616e7b9d67bd816f1547f8cd73588515a6f2227ac4a17bf6d4062532014bcb0d621cd4d955a81df382297c5cf341bb787996ea15c3c7ab19af2a8312558e9b76e0db25797aaa152bc4adbf13c97a7538c74b4721e919a637a31799392ccd6387a2c1d56828b78e5b7be9f0ad5b652d0ed8de70f8cdac3bf7b141f2c6203557261c6f174c3075f1f26e25c8e379cb8d1e6ddf25f2fd0db05f75079423078755fa85923a109a2d111efd5a1d2cf1c26f583bc10abf6d259d4ac6cc74499f4f1c7ab2c2113e73ea2b0dbf61fd367a8a8eb14d2bc794fe43418f0810d3d6c93fe3ea1b45200312678dfd7c57a45a4d15427dbdb3a024d5b7d89781eb52a5278e0544e3f2291e0f14566fa145017fa82a15720ac905e3b24749089cb12d5680950457ab29165c90c33276b7e0c893d0c7bf1aa3b38e5f5bda0fe1990ce2f9148a14bacfdde42831fab3a2c879a909255948824bd74291e4c82bb2bfe9f233f40055654f02bd87473ca0a04e097830493fd2751766db80fa48eb64ac8a126362987a969a48d79fc04be4ab759ea43fb95c9b6c1f36a6d9ceb43486aa0b3a4f175bfbc1e03dcca4858058b500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001396cebacb89892bc83cdbfdc3b371e76ffd532dfc377974dba327640c37c59c2a2e82e70380729cc777d27230ef0e9957cddf806824e53bc0ef9ce2c7cbe9c8516cb7c83cc7fe38570450893313cab7e37fd2d04ff64a6ceb44ab5359081ae8cef3ba6a38b215c047054b7ecb01a4bdad70588556fe1e68bcb072f51833a05e9e87035c08082da85391d793735584ebda891e2ff720aecd8ce37c4b3a01a722342e6132976a1b824a9ec3d12c29932d059de34206d32ffe1d5eb41ae50091263eef283226651159423383de938beac9408c347aa289b1f855de212cff4bd9ab69f0b1c3a0a5b090aca25a1dc744d8a358eb10f5f6f0e2c88369d38b8cd184ea954300180506b294d2be43a6e8be6d71891c19a6de0e0217c1f84e451270b4508b4242aa947680359e8f5335e5583f614d0fca9a691e309d5febd6616c46b236aa9800f211508829ce5834f5904435dcfbd6eda414660885f35a765d43a1eb33510baa2dca0d988711f8f02a8ffd0def9472d3841d116a3327f19d39f09307e8d15f1b6e6c0f67aa0d1fbb7dd4384749d6298b50cdc2f35db884fa34b32caa65e5788e17a89bd55189e64959538e58a5e44968c52f3272fcde0ae55d53d6eee10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a738fa891126c1e3dc16a9098de3f358e32195a905d86888c9d18ea2a97749d090e439f1e0a53c37fe240d90173d635b2a4c5b2af970af6dc1a28ab014ad2ce1ff00e7ac38fea9a1d3879528c40dd5428c309f90507d3295296d331b1889da246875e2235d0f5b60bf2ba66ac1b9a38514a92ca5b1906ba8c2f93806f5a4c4ab4a639ff47c105dda28f4965993b8746bb5a767857f203316c60a2f803a1c1b1e009f72d83164dc9a359e80261362f2152e9132707171935d8b76df43a636e49d414962d4be7f8113741af1fea08a8cfab354e1354c69e99169da5122270cc4050fc27d19e56b0f33da4f84a3cb99d940270e99815ed53ccc45c0d3d1438a58291e0b2d53a6eadf4bd96cfa713fe9ae1d8d46e8344b28ebe26bbd1e4c028e1c8f350546e2a0e009fe3bfb67a46a4f168683cb4aafac01e982f1c7a31d46c1c3cc731ce7ec1ca0d02b1df522e6a98fbadb9d54d7f33d231b26a47d889126b1aa288baaba82b71c4f379377b29f50eef7208c8cc5c116c1953afdcbb07434418a4d9203f8ba95cbc34988872e4d9c259001b1e4c3768a5789ea7495438dd6ae69ddbb6d013b0625082ed385fc9340bb417b250369ca7353d04e4ba03ee9ac9b357e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009545f127e8405c2f150ad2766674453209abd8c69efbde8e6da95d345d8915c2a3bbdab4d15c9edac464af696000ff64a2b49343eeecbb8a97401b0ee779787b0b32f43ce8f012340e5d3dedd5bebfbf85f8fc3f901ee22341f8c74225e7401ed8a29960cea8acfabf45137844136a3749cabfbeb63d5b1aeb3158c779e7fc4a344ceb28f27c0d7e04bf780d5f8765a1e31a5533bb1eed80d4128f0fd92c063fe23d005b5158b4eb7dc309fe5d19da7c00d6e73d144da4cb2283ae2c3681c5a15a198d4e3f6a74a576609440a0f0b37936367fca1a94c6f57e913e28893ea1554f1ef28ff62285dbc2afeff27629ab6056c73ea37af8701ff65544eef74cb7b1d1b67b336ffc426d18df3dce38cb58ea4b6e8358aa47be3106b0e6fc5b938894babdda8c0b24c4606da956975cb4c03797ca981e5a98eb94968d4f523b1c85e5791ebbbebd90cf8997b00f63c8f39413a7fbdcf925b4a73aa5c3d4f5013bc3f537832db997bcd37d8e4d052104ca230342adc6dbddcde525fefd179e6d8b7e0bee9f641fcd32fbafdcc912f3b093c098efb1836331be52c5ffb6735d3335aac2cd4392c947469b6041c6cd4e718e32633260e62ea68577c306dd6168c8928d000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e1e4515f56c06dbedab534d5babc5410a32975b0a8f24a944b61b3ee9a3ea5a303ba5ea5fae023594d0b1ecf9de3d0369ea944e22e2097356431b71e7be3b83f532ba042adb11c77d10965ffce1f741d498d1454b6f6d174f9213fcf821c172f269d82fc8d3b953ca12afb706daabb9ccf9dacaf20b12083dcbc16124fdac0aea872448dedaa43ed69585800b0954c936c513db0e84857e6986232a70c0559c4b745a737ffd65bedb6cd93e40fc72dc56e70ec064dbb8ca2b5d470f21eb867e1b777974a6436742a7fc07e422d7565989873cb9d439d3aa34dcd1c7240b232944c73f011e928fae6c0e458969e7db8b629428029d607b2722515df26474cbdfb9f15a100b83fd80119e5a4367bbc98abd65d94508424662fb373d685bf2796d623074c80a2f9bd06fca144d98759a475e4859564efaa499073c230642135e97359f10b76c3c0c641ff402b06219e4ca5583978cbe45cbe5eb9e3545238e435b3c81b042f0eeb95dc19ed343ac5eaaf2572fcd85ae066a5f049ce9e6f158b603afd79e59aee9a594173978dfe894cce15b203e434db5c6a4af8427e608a941844393f08d5d403942b72c7e6599ce1d3c3b023cbd769d6034367e3989069c68d90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000868bd3102466ac97f2d96c82c228e014037278fbfe8ab5c7a4a1fc2882d347c99511a8d80a0f27b0c0b31e2a9061485e87fa9596b5fd72a41ba1dbf4fa3012434d058e5a382e0f7a09634197e1606f887dea00685483d6a65a34efc1c5938a83cca359ece1d96e9c8d6d45e061c7d904af6944219ecfd56b8d3df39b3498cbe25946e5fb459b2a853a2c4c8fc5dfa4a8f94e2ab1f2f78563c10374848be078dbacaa8b18db9721d6cd53731288dcccc6f0d29ee44cc17d1ab8f1a9cca598f50f93059eaf2a787d002389120dbebdda81f835168eb5cbae89a2c17e5bae5e164c4d4663de00a0ae517c69a89dd1faca3850c916cea22d66abdb139bae3c9e50b1f6e7c9212d4ef1b6fabc22ccfd0b73b35ca37fc994cfaa1618fccb9129faf3030520cd4678ecafde01e35c35a42fc755876cc0687d1eb02d373aec71ee31e9a96a7d846056fe822a1719ae4c1fd6dac8dd0cd71938b6025d64e2d0edaabedd4e277edbdef1b4cd2fc89cd11ae6b1f55ef0dceccfc1681a85ddee5dafe67ad1ea3c62f7c41528b900c1db693e7dc04c1d38258867dbfd9919e8b0949e6ace582ff0339aaca895cee049d9f2c84e0f3f366ad738bc906eaba081a61314186fa4f3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014e58231876fd8d4fea88dbdbb94ed8c4f0ac1ae42220f00428886eae9a8381d86997d982bc15999be498214001c0a14853ef76c3211795b7c0192e5eb4c5fa48dae1c4b4f3d08c906370eef4cc7965b29f96d28ed6425dcf3be7064b6bbb24f1f2d0d87c6e31f17de77d1835d2b5e05e01355a34033e5c8a731e8d53ada129bc1c8df5923d66b1abdb55382218fc9351adc3e9612f9ae6dacf7e1cf516f71806eebc77dc4848c2fb4c3a6e1d85f21e554ea8af19a4cc81c0c52b5811571b3ff7ff770194acc14c15af20988d587913ae5e4a2d236d3f2b966c240a03f6c59f4bf6c9acf057a436547417f552a68d373e76ec450e0835cb9772a48bbef8143bd264e282e4bf473dba37d5101c3001127bac378eac208d1fdef71267231d48b811541ad023e707216ddcc17b4ac044dc03e36a9c0d0e0bbc40ab11470e414ed69d90293a197cf6d04770e1c013262b239a7255c778d311f5d77dd40f03515f750b31039de94718a02c408ed50b499e5d11eea16e592a62b2e337714f22c05ebec915e68ac8c71bd1b90b56b2e12d49c59bc415e3df9ab91dafaf9723a42ca60486e64f55e11c03c15ffbf07bc26796bc65959c0dd8ceac041a99be0765d869f390000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4b302518f9fc7e64862debb97a01915167af600deb94be173cc82620510fb8175be5e4b868eb3be19ba5f843a5445b8a9ddaff5a62c52975a0d774269c5d0f4c9c8d6a7cce6ada934e201e52e1f20e72bd42b0b2c97f15ef2784ec483283fdb1a97158a13e33bbce0b9d2cffe54a9554c16bc2c8607a5462dff5100947645154cfb761f6c5e2f9e96b9e4827282d09ef4b1fa0666adc78e47c0c96b3494a74630639b6079fe27333cd6634ee9414eef8cfd159df4df66ed685087e291b093f8a079d5d6c4e5b6506dc9a640d38c94550c8c14e3781844d03ef6bf37a7dc522693715ba930df85518edda9ce6766700ab35470cf53bb956641bb2adaa4b2548d9e69c29c9899c2f11698cdf65e9dc6cf9c9abf9c157ccec1f04b0de700c981ebc8ab9f49acbc02acf204994d040384880026c7f1bc8f9e0f12b61eaec4426a23f040fb0e09edaf145e5d20a9453cbd237d2712ad7500641b4cc7901e857e821b612e618c020c4864a6f09c0f6367f3d3b302acc0c75f267e109d1c908a9dd40a06458e76e3d20da763f68eae39aa17f5dd313fcb0a8a9c6f6102df0821887f56a4a9c81c92c8165eebb3b5beaf10ee85201b701dea1bf7ebbafc91d98615e02b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008bbb21a33ce6cf5b499705bc3019bbfe08511cba2fe505cc0874a872ae2e7a7cb9c931621ea9bdecb712e7ef84fcb784fa5d472669d5e8a8d8c74cda001c372d401211ae7938a104dd7d12af3ac8e40a660c856472a667abc73c426d70e5a263143c3e723fd5a71e4dfefe6fa3a9e2c4f10939ae7d71cdb4176da46dfd06207f72c1e6860d33c2721cfd47de4177a706109a01625069bc1eae2029fc4f837bc3e878bc7d66f07d37c20cc0cad098ce80b2eb13e0a757d317df7507f3db6459903921105b80ed954cd4c824146d86a5fd06b2e6d4fedb5ed680ce522e4707a829ade740cb32ebdb667a9e5ddfbfef411725a6c83999cf3f128fe691be65e3485570ee298ad656b65f476ee132143df8ed80a2dc6da2fc898bdb681cfb98ffb4187c49bcfa9851fe88d67f68b1cefb9331206981e8933911e2c0f3aec016e683bc01903ece33a614793398679ee1f897fb0be305a2c267f6c128c64775d2f1a8686345b55917df9c8cd63f22d52b6fb54c71fe465142bbd0c348c3d9fee290a8f0fee4f58e226c55af7f3deabc5849454eb087def2766d75fbb249a7992ece23160c7011dfdd82943093137722d0c61f2a4072d8e333f5309ec2ace8491f75a6110000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afb4462ce2b0dd5bbd6f08426e3911b3ef7c766a4045b4db19b39e2bbc6a131d2a33d0c55d2aeb683ba6e98dd6495a8a5bb006681cb8c62fc78577e0ea35821bf71d1473e7321ae9ef9d878941707e4208522370dd0930ea2982ac728de788429fb08fa0fddf857f70d9760d0e29964dbfad92602c0cc6bfba48352f21e82821bd8f39d489c745fab4fc40a126e16d5f2c4839f47d8ebf7b596719b59e5fa512e365eb109b019b5bdf4af236fcd8f234eb38d21f3499693e7e504e2101315fedbadb6d8af8efe099974b83601f8d6335bd62374d7a29a49fa4847bd634912bcd6ea33b19a6321d73240a48798fd8f30619034b40722f4dacb8ca515822a7963bd736e92f62b72f82b4bce39ba3f0eec2ac4979f2381337627b097663f64dfc63a5c109ee8a2efc133e6c2bcb33a088eaef7828abdf4a674c49809c8b4dc72f05ab23d0178e9f418a6640f261cad1977ca1a148f59b35494fa878bd93f20b5bf986562b1fc1665048bea70f0edb49ad8766be661bb5f3dc7d0c8166b98f46368b3d2d5d459e95d34836d665a738c6c494ddb10a3a1fb32cbe487aabb0b8d64897f7d1845ade95561c53f2c0c747135bdc2513ccdfb452fbd567b27960c89662cb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019de7a59fe31a6509fe9be9ad93c9806b2003ff93cdd707bd58572869ecf2172f16bb843bd726efbaf75b6fce8b32fe187f33e94819a2e84497aef673a8bbd606a2b6a599bec04255ff7115f2c5dbe466e057ecfaf95dfee09896b776efa300bfb2d76bca23d8c8e7257f2a171f9b57aa6ef4c14d0f1b910beebb60e48abb18f84a98a54f0900b13b345a995333aa05a31a937ea78c94528f6aadc4143e88ab2a157838add2db2eefdbc93d49aae09f8d05fdb4edca900f29b0e1b8d863474dbe71bf6b8ec1b340b651a2cc788cffa3245acffbe5c2756d7fa3403a338449976ba55f416eeb53efd85e50e8c8524b7b3404f192124ff1f048c6e22d64cff67df98907efa4f79b34da79fc62247b69a9c78ff60161464fe48838a5e4abcf41484a39cde4aa18be60fa763ff3c05e9a7933047c1e2bdb44b4e9f56528dbd5f81c706b8f3f5064a1d69fb24a71724b468f91dc786509e2cc14d89e96d0df844f072a6e2836aceea17b6a083833f63cc3ad6b54ed8095022daf353ee355d7df9c5b228f43925a5f67c890f826ca6751c153049840d53f6ba1585b4fbbad5c3b8cfb1b1d39fda4cd6bf6bca6510a24a87a2fbaf580ddfe8baa9f3379933f80242362e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c18c7235857fa53f65e498a04343bb6867ce3b41ac062cbb47e67bc90def0338c246c7f74b6d7685122b632e73963f05b958ce3550e5cd07ac2f5278e9c6b1616031b7f1d380be018eb0b5dc6f88415627e6277a1d5ebc385250d9dfd1d419ad97bfd7b91c0dd004e433e377247caec740c8bd3267c06c45264e56a9e0ed3e77bf04bd47ad52eefa4d1808b5fc1487dc729a67c55587fa5484a80b3a5fb27634b31f0a4880f5ccafa03e87b1c46edd95340fab9b3c9e168d492b591b832de0c9e8d16fccf4ee6c232be2b0552ad91a4e378350eacfdf39c5f11949de03e1d0d07a5851fa7f308e50b3c39125c3bd0b9b9679190f85ca8750a30f6001da1fcdd3859be5db981ef7346900ae8184f778dc87c4219708e168c9581b65c63016f0b014d01c84d7b56918d42fd1b11772a97801ecc50eb627d3318c5ea804fdb50d751be2cda1bac92cf17948a48c490eca280e0d2ebdce302a493662ddcb4bbc9f012bd2b121b4a19b7557e9d2db79f0997384c1a43ae2efb0072e34f93fcb2b63e7f1a9a2a4febc48a1daae96e1bf70de8ea58a43ec8fb5fbf7b048226be225f4b65a4c6d29e8abb052ac845d1c756a89b0a45cd38b47cc69b8eba104df4f36c300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000355ff05eedc0b93f727a7160607f4ba777608fba59f49daa232bb73dedefef11a5b5849031ad443aa23de7db8e968c80aff25d82cdb4e7650feaeb4429455264a959998ff4ae7d1a0f5eacbf1dd4fa2ad4748a84130841a4a6363a5e928308d09f7a53298c4b6d3a953393310b4a647cf9d727e72f7258101eecc29b9585a6c05233d2d7438f0d3038df90eb39a40c1e5c73fdbae9b4c42c124a275c9b6e6efae013ce8a73adff9e52b36bf1a89b8792bcefbf276453a7d9ab6f522381491ae819750e82f44b0e9cbc0bde56aeecf0a8b78974dcca484ac0d58a3ff0272713f9c82fb9720a19667b6cb3ba371522eed3243cc2e0e14daaba18b13c0c66f7c61730443452f7a575d555df2ee87e14b3cb0c00aa03c79936fd77bc5df62f4371dd3b057827e62095beb076ac0c910c357f88d6e1bca2cbb286c96aa9a4373b2e5f965c6c96170d5b2476e3b84f4965dc2f2551e09ea5f36b2530590da2ded38d669034d0c386fdbf6c3862bbd89a23ba455280639f3a39c4eaa6cef95d07178c2ad696cb4d063e83e7a4e6607bc1664fad266a65f5f2324cf28366ad26ddfb498331bb3931291eae713d333e8ad8795b65099a3ebbdd4ef8684d2a39cfeed55e600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d27031cd8760db1075c08ef6ea307275076b04a43053b4595bc5344f138dfd45b3d553641d0e4432eb949b3a248e559950072b05d971626a50e61f9e4027abf4fe9bbe409785cb6e2af6ad82c4767bcf99178a6c9529e9f9ffedde88ad61d00dd2a2769ba9552fe3f32583256b4c93a836dc99871795f65c3625fcb96b0973f629acebe3f11253144492c4d5d550ecec6f6bebd26366337219f5eeca5fcca8bd9cfd0cfd87040f662cd5b47476ba453ee6289e77dd980ce534aa27b546f6e3265d351b51e7a1412b0b11431b4f6d1b5a59230932fbb71ed46595cbf15974248a90622f045ff50b6042a3287b7c5f2698bbdbaa5e07bce59be7564fe41dcb25d3424952702940b6454ac6e7f80c69b40e2ad50712278d6ab5e39958cd345d886364d0a571a27e436f2e2920f82fe7b2120c6a694648c8ffafbdd692e75cc8926b6c2c8d3490ee383e95c9a28b4f533411cf91c5fcf05d51238aadd16ae005332fc6851e9ecc56473acbec90ff735c803ff373639afd79a409eb759da7247889c255e0d2544b769bf08d96477ddca1d28cf6e19102f0919e3d45aea15752ebc81fa1faa2e723f1a9e43091b971c07812e4cbaae0b4056e8be5a6ca7fad9eac04d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001aa3425906a77a81f2d2e863cb8f7a615632f32390f5971da21ee4c8edd204234acbc0b98cf1bd6499f868e2a5df493f8c4b80bd5fc26110f76a8ccbdc30cb70dfce69a8719137ed7e08d6a016dacde2316a8ad5ae0f58621d3eb4228154b895eef7e373db3d286f8d5597b1c6fa599c3e19449c5b50dfa0bd1bd2d4b054d86e9f2b65da0e770cee28a909b592f8abe88685e9e4a954297041bbd7a6faf6f680af5ec190f48dbee4e2a50b1437195895445ed4872bb45215ea7da4d2d4e2d0d99d20cfc5ef2cde5548b2532a71f89eac9d3f15c490f0450f252edc1a0b90599a88a92c2c8d6aef2cc89e9a5643fc3d6baa266d72e1f40fda291ede72f6c8c6eb3de3c6f1085d7322dfa9a4da651c225961f21e29258f026f56102b96997d3e321b28b062fcb9a9b214ac2c068d97e2a34f5cc0ee65bd00360cf46d82add651769f662542fa8fd8a36f61764b185666717e392ea7b5c400664bdae6740ee147e3b2d1b330966e87615b5e30a64642e273ab3c670e7f592c4c62b2fa66be4041958d2ec32fdb91f5d4d61db37a1c709d0a883b70a2986ca2fc8dde2e6d8db7802da2ae4b7d2d82da433e4c4955269bf6c9cda82ffb6b4971b5559805c29a5f3ad50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074d4996d52234e8091c427f9cdc5fbddd2778974e09813d1f459766b7077baa02a68c8ec04f4e12b8ec4b68e181b4333aaa927ccf6160cf4ddc9442e01612d988b098391d583649a0d7d7018b0de1f57e42e33dead46446db7df30eb9f223aee0303e1b96e2c2df66e319a62a18954ed65d84bfe303febcfb4fcb0136f40c10f6be483801b32722d6f8a793f481699893d67ad379257a276286cf7f37958b88270ee59a034db0af74cd3da348531aac5d3664591ab98c632db06f5f479e92bce94293cc6344764d12e5badbc43fd37c86ee5463ab58f8b6c38432a6811fb2be2b72f9fb974c3cc16f41b175280e32a07ca0786d43306faaf4390f00cfaebf5b929c1a48ed9bdaa64cf95e7f42fd85a87f0b7cb0d0dff0f9c11ed68bebc92ae6bbe4c4d75f0f4d1c7988e50bbb3eedf0883d7d51c9c2c16848adccbbce166fad6f741996b3a065ab8ffda5fc3118b81bebdcb8283f1d0e99fa765cbe93d440b9f82aba50f146cd06428739f8a31942199f48f5ac7c609aef10ea40d2b827df88025009a4b42fed565a8cbb9688cf0d4c9c7162457dbde928da35102869f9012232d2d9056b734ed6b37832fc50ee17c115cc1cbfb7c58c7ae673b600696b1eaa0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2b9a3faa63bbb6b2b56bcd16d23a3173eb2b37cca6193d74f247876f1a58ceb914ee2b63c14fdb5b99b3cdcbe8bc3b84ae670fd5a52a8b01ac9478044e3ba1af2c7ab211cae154d57a46c6407cf10e394b2d37bbd280892bc225f9fd93ec9ac73425da503035610f298ab1044776a8e54aeac2c6fe3d8c04dcc5aa2370cdaf8642f03f2f18614999b7d62301b04cff0d61eaa5b2850e10ca5fcc5673bd763bab0a47e669525196f4aba251c49039efd0d988c9d893d0f60eb00d318984ce38258d73c212f07ac9660086c8308cf4499717e8b4169cf38493877f640f74e84d9c60ad08739554f7136648e803028e91f44e8b1ed34512e25efc35d4fef724009241b1d115c542ea7850f2d2378c6d43c81c4411a900dcf5db88e88673ed2a13ba1109250c8f53ac2126c0aee9e983b08512f2988e6c46c8c98d1eb091f342deefa76e2da0a46f9521a4bcd9ee1dec4b3b25a3215be898d5c0d9b3246b74b2395a2be860e396bf9fb6cd2d5f9f8d0133325cd35e7ddd4097b0598074936a2a7b5c4dc18fd09c8714fd2258a3355202608572c991a3a9e9c87256d200a40961519f39d88a6715972d41d08618506217017b0fafbe1c0f8a6ce3fdf715982b44df9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091f1e39a7a80f552f5c403e738fd468d01f0fbe61b2b27e098ad2115ff1ffd8513490df7506032e860e7475860a6e80eb471994cd2da0c5f137c361a6b782531f5f869ecc49978b04da9d939446e37a31ae158934cf1ed3938c281a317495120bc82782f7b9b687b15f60690b37e18c25ff9b863809ef7c1b23b99392738ff8c9651c7ac98383f20507e6f1a3cbb32f6aaaff13a2f7625524e2cde3ffebd3ee694b70d3b96c36b7743137ba6002d456b6c8d2bb567ac0b65fef6607f9cdadcc5b57541c515dbe4bd8ee5bea33554ec284f9059de53aacf6f019ec964def249d11c496f21bae88be2625b19ee382f30a82fbf0db6373bf250c0cf85f5fbcc68a568c6973949f3ec455a65276c39abbabb861d3e1f9273b7de676df2e259964a04bdeeb6cf4c4f495fe63c2fe04fa79d2675ef9b29d6fbbd9153517b51a70cb197472581b0a06379ae3d11ab926b578109c27bad32329268c259a610e2f1c612f9737028bf814bc867ded018460a522852ae4a3d4a5da5f43120628141b3c11b87e12a0f0e10b630665117f8f9d4cb9fc1b5f8de0878b4f9bfb42309c6dd6303e060a6bd3d9cbd2a59494becbb020cac76f04e4ea6d75484fdf5c010fe3a665f07000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023dd37006164b607d5fee68d153adb7655c35a423305eb497d1afba25ff75f75b4787ce5ca221d06d819728bbffebb3b5250542dd3860a6eee411cfac2c0bffa01169e411a9e332f8abc231cf8c8a86000a472bb253e0193267ec38867fd34998a49434860404c434cb9e91c6c0dc01ae1d97fff9cef4911d2060753095ce3282a389bee08a42febf0508461bbe82ce8fbfd80c0b4d4d7525609c9fab1bc7f52872b8273ebc0da462c4ad84425b759eb8f501bfe925221f9fb683d52d1ef2300ddf06a615459598aca1395824dc6b018033b159c44c5fc2d4fcc155a58e5e225c25ba8fed8b33c1da90cc79ac3b59f6ee26cf08c8ab496fd07d01ed45350bc383d3f3256b0d9f1ca22ea5c6d3c6707e7c9df6732c00cdfaf6e3190bc543e4810df6fe4d8389162586c57befaa6ca3a306bddb05153d3264fd00b17a39063c0f1b2dad9c8620e29afe0c247ddef17628f2cbc854d9340113b0faa2437ac482cd31ebc75d9c1afa7f88d149cc6988284e676bf9b4be581cf8dec47189118f8ce0532805b037a1071035e85c0987d4b2705d9ebc66edf1bdd2b6374b9dbb4885ba0bc43b5901f8643972c3585dc44743bd9d117894f0701f3bae1b83b24db66967800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000852114dcd181a21cbdceb08dc7e0cec76898c8655265038b3c69462203a8519a0b17ac3f52be48b60b289e731a3de290cf899042e3818d1e2fec594c8becbb44e2ab4f0c14918ce3b8a3ca20afd9d49ecf16207b9de08756a6dcf4139f0eb7e5d53df0562ab3c38aba812f00a1eec8e5d639b8ca6694640b9d296bf46b199304aadc5310bcddea9c44b6b665507058eceb5b6b239a3caf00a37f283bff6bd502af319d07e42648023e9124fec1745687e14aa437f1e7fc62f8fc594019281d49f8bc342fd1231db023175b66e121c2cb4577d03b1e62100b0d6705f889bf6dbc453fdcee4484317c7e1a392ade1d7853e2a5adeea2a4736f527f21d30bb4463e7d709a26e24aee617973b8a42ee19f2ed4c9270067b43ef3a03566d3fc8ddeb1864a20ef0da0a8eae262e6d581b87253b34665288eb860331e0eaad0844a296dbeaaf674a295b617c21d75d4f62ad897b46cd347c6fbaa6931cac68e29caaf2e9ef5aa0ee1e60a5183cb8b38832df4fdd9729d47225929c4207ad05962af13e86def3f811f6a1ec1b09d8e4afbbe9043f500738afc18ca592dd779e59263421a3638b7fe998dd73cd7ac81d73927074a9df8347a24703c8503768b4fded76b2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004fc13a7a96bca070b166faa09ccdcdfc1940a784d3922ee00ab756cd537b717f7c6e74569571ae28681b6ac28303ef39bf5b3c202839817cf225201c22a7d5388d0619167668f4d13c90bfa26f555c11b79b9d98a338eb6070bebb614eada1a1f88ef1424361940356cefec25140df3f88439935751426645f1f04e7750ff22ab403630bf79594994a2bfd15e1266f1af2c8f1a8bf8cc4c227010751e1d3ac8bc55999b32ed31717c5e8d196906e7805d29500b1199e8e6cefe76b2c57ced893b5237d1ba46157b3f74db8388b7c74e6060c0576b185bf2589e48a01d9d1750c8955ade5bf5539e6e92f8424d4b06245ebd4c67ae5538422791609c2d2c8c5a402960afcafdaffbef6d90f7352a31af011d03ea90b0387bd31cbe1d282386c29fcdb60b0567d18d1809cfbc52d7e6ffc2534bad4ff6efec4b40f964880f555e7c6c05299d1f5492fd01512b5da22f8257c2a12d07ac6281ce99f625c0a773951064110f4448e4b93a93a39ccd76399b512c4deb84fa5cebef39157a6b378e3e3f931e73bd82d2deee2649309ce26b1bb665b154f4ff26cdf3e8ab0d787b22e1e62f97d69b46847c4790241501a32c03201fb4e678b12afe451528bdc0b7f06400000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484004b2852c4182ae7ec4bcdb14aa17f63a9d47c3a2081be02708028f5e1472ce8d1ced72f41f2737c6444011c82b584f9dea7232e4c0e536a5d8a2b44d497e582c23ac009cde1f2cafefdc831c7fc6b8571c108858cf8a1f67163755a075361da917ed85afbfa39bdca2f76ada544c92b7b83220217cf740da157a1ff4a6b5318003786b3640aaafce84f221cf862cbf397c77a6783807f4b13f4963c307a6f0261d25f287dfe5c7347dbeeb102de63fdcb8127e63d14aaf1c7e22a3558dfecc1514e7181d364f5780b32941899a207f57c8d05ccff3f6d311746ee62b129ecd5e224b134d0c8ce3829adb4bc55a4d23d013d88102876a75acb7877306bcbf550c0181fab7ff64544e0d76777d38cfac4bfa136b60071642fbd8741a137a8efbe32c7c90893ea25b0cdae34842f5e9f40852d1362196756bce66042baf6f0bf1e82f3c63d816271c8772e917dd856ef2a98370d8db35409f315d2fcb33f05d20760de93cb44c6d8eee1a7844fa483ad059150cd430227fd1f0f00e03cd034f2c881eb484c6900fcd22d8137cd30cbaface322393194d17dc8a69129d6171cd94d22c5a8fe7c1e61a99d10af24abe9add4f743c949c92d5de9690ff54d5a4b544ea0ce1fdb3fe25bc1922aed8adb6f20e3025549ae98cb3c242fd5ace8f1b5f5d631339edea165b9e829ccabe576d55d3fae7bea7059688c1eefeb636e99fbe34de219b3a9aa8e8b7c2125a89bda4cacbfafbe5f2d6cd21b60cd8f556fe2b5ae1cd13dfabac8a18679a4d6ec26264d2a6eff3081b0334478a7dcba0cfe7c14d47992d2473151d4b30ff98cf79e7c46960bef0b445081cc9a59c4abda3be45c299ef181058807e59eb2063de6fc5bb72ff92d9647f66e7c6bc7d905baa3148c37ef60f8f4be55674398fb6be6470063c810c2311eb47321384e601561a925fe899242c7e3bf2fb5c822b8b993c9659c8df054adb24da45b21d4427482aae2f4b4531161a6aa46c1e7e7a5a3f5eb740e55111d4f135d6b1e3557828162bbbbad4b83d082c56dcab0fa86a36a3b93e07971f5ecbbdbffa2d3856e92434dd391ec91e2720250e248f56dbeec014213807e1984352803237d79403ba67b66215e9ad0a0209e377855edbe340d2f40d5b1a4df9f0689bf4c5621c0dff8db37b01c4a596e7300dc7fb8c8202787a589a72d34a9b2608b4fa0a38e6ded4ba8c411624d072441b5673282e4a2535d25289798b5d75a45acc5f44d67d121db67c453c4124012c13ed999fe8fffaa48c9bad011c6e43dfae78394b38e24b568f52b25ee01c868820abf34c0eeab586ae9d0afed3d1cd73f92ab55523e3e0fb0335d79ed44b43410a619fe6da5d665d42a01afff1d24680cb1cfbbf5d6cc1c292904fdd4c62efea0a852dcb4586de2c1c83bf9ad37f3d93ae8f86835a4464e6a695b4f90121e91f194aa81976dd0fba14af5f9e168d8d731f974ffc05b768c21be9a232a468d3550135dd88c25799b6ef6158dec2e681bd50000444c18aaab53677519c7c1e0fec0ee7895648475fed44009c81afc9b3c9c55588d0d06333dccaae128c606480df0d49976345c6318dfaf9d0349e1116681ae3b2a468dfd99399b870efb13c4f3e0131af6d10737ff21b0f5a0a0709f2401671bb5df8c67cef07c3404027b2f22d1387869d0a699cb5ad01c7a55c951c1d11ee9fa618e5b335b9e8df87841a6cd12dd76511c923c1abd3e3a027a37d095e6c1475d51b4efcb1ddd7868a1dd24e532cc2af81479957888f33044bddb504fcfeabc7ff6c874fb661da9246373c3e4c1a851bddd1493f96dfc6c76943f76a3ef1dcd83024142a59f6ae8f342f855a612ee0f8c90d8c13548241ae8fea9bf7b913fc5b6d2f5433995eebd66bf730259e164518e77250a9e3f0eccad8debee03e112424474ae348b1460eef1b44ba1a522987371eb212bc93e126847bd81aaec33bde52400f251fc8e5f059ba9a4c43190359ae85d42ffbdadea548c926ac43d3f3d7b338d98ca0bf32b1f3ab8d16879029394af8daed519e06a25ff077a6df620f05ff2b0e9534f61756ce1d7a89df33077becb80f194d0a700f547c13027f36b98b1c66ddf13193f5f8a59f6cdaafb7201a970ae191d68ee844c61500be3e9f9f0bd99050778fa33cf97701b9769773141e47997a454370c3b5eb97a1ae3afb488f4a55115aa5c170dbf4a776dcb87d071bdb3fb7743029834666a8f1743636750c3294e7c283da5781d0fc4d29b1cd1b24182a83a840e75421740bd0d0a8162b5574a281a86ee1482573a9d9a0511001736259fb78b1b906672eaa7c038c3515220acade60a7e7697a86eae0459ccb07a7297abd546206261d983e49769b59047137774c059676d476d471c5e140e01421a62f3e2d802c0d0873e82ea48f027cca83226b9e2285026c32510f0b49b124bab6578b21482f3034f396ef29fb1452d6309965eb64d04c0a54667ac2ec3e152b61add2b6601883d208cb7c83c5fee08a3af19917fe03cd0becd29aac83802bd09a767fb2c3fed6d8f136309530cd709e268ad3f42e40e77a11623a15cad70d397c0c7ffe8ae8056232fc8e1bd3dd5604a3eaaa46d4ed9c30ddae818263cc0e9d4afefbc2c8c3579b696d9fa2ba7507cfacc6ee70c14b353c9d71f49034d214ca71af669abd4e1c83b7dbf615fcd132b466ef9394024854a97da95c8d519b2b7f623cebefcd43b0a7a98afd8c1d64043980d1980a515c9ebf211701e4921a274297145692c0e3bbee2aef4c93278b9a187a51f1f7ee1c447f25700c5ce4912630e0f15281f65a14d8ca0bc29cfe6c0ae708de7e7efd810835c00c72ec913c28ab0079a80dc00d51daa901743ecedff23bce89ce561a3cd44d7092a060e8dd4024be0490e0a3c7f4530b7bde71f5f6223ead3170bbeda05c5d05b8d2b3d0a6da256dd30ee41c91b591035404f2659beb5825a4f3a73897f9821306e5eed7b8b60173bb7be6c001ad501a43276718aa3e8b0bf5f34ec35b55d439eac2c51b2d1a30603321e073c5c6ef3bbd5dfdc741e91838702dc3ac1d9719b31a651a46d8361d88a02aab8d9261d1e36b82be0d29804f534921d7255e608a51969c360d8c5915a67c9df8268f2e29abad54e20c1edae6ff98f0a754562670c5a62aa772fee00a784caa78d2e29763f77efc8d33514f9efefb2911dce18c1ebda7cdac3ba6152b041895a2aba1b76bd1278a1f48fc9f8e4a375a6a7e71c7e9ea56391620ba7700d7616cf111113cc7cf3ee5db75b2d2d07da09ad48fd218b1e8b9402a53015c10270786fbafb8afc1caae534087dd4fc1fb2fe2fe4127698071db58f5d3ae9f225d53a6eef22a5b31c6fe0bded93b057c655073df08845c70944cc4d115758e30064eb6ca5560a6b6e6ec031e230fb7689b63d964919887dfd522685e1483ae0f66650641b984965482670109878c55e1167a536613c19f2ccd41d0dacb7e8a00a08ea890cb5783ce5426be95a4b293cfc9fc2fe4ce620c9695a62097ab1e9f22b96cd3a42eb7a6585f5826e574ed928c1102c9efd800c389ec97edd074df93088ab0aa8bf4286bc25d2d30d3653540b0e12bebdc22315dc74df13c5ebd687d16976569ebf76e1f277e32ed0a864384f59b5d4daee8e90c777f4b658bca11db13d6d9c548478475000a4573ab9c5a5183c4e70ed3379122dc88999c2d1817ce304e176f1a2d01101c96bd0db475f5d082065b590d16b959c2f40c3e22c9bf5f103613e0218fbe088338b69667ba4d4bb831cc1d1c65c063860c44cd026149d225c978500deccdda72db6c6c9a754e43b19582f16cae9f067593e068f4d1b5f929f51463479f1de33bac6b0302e81047a5f51838449e4b0a604539f136ea46840a727987f1fe37d8a35fcfda39327437392d3d185ebc21912f678c5992b14c23268e760e7ec9d6d634b0d5921e846fe3f910ceb6e77cd2b4fa8d4bbcb96c3486003f1389caf5635a52cee8a3cc1e8d0ea153b192f3b911da42108ccac539b4c61bd7ab8bfe14b60a1973ac1f9963caace78909cdef02f8c1e4145cf39a0af1c728595cba8cfa80ee369384fe0cba1fde01df958a350c506d38310233e04ef94f27dd802158d4c7ea7b21bc17b0de42e3aaf5301f2532d254fe15ca6f8c722eaf1ac4af1bcd1a4b36ec05e04dc4352aabd172c16f98b5efd69251bbda736bc0e32fdacf3c7794b28874dfdbc72b2429a9228329327a2f7e84ef1a3cff0271f678302f974d5c287354ab054b3cc1a014ae5416ac3c6b6ec89f10ede33f9f005f3311b62452f03be43a03dfdb894e0d5bf5b00ef26e1cfccce28de66d81850013640b6fe240dc246006e2401d175e904d02ca18952a16a6e5b51622ab27b7a73e22005aff421a6922093eb1a61a6c88b8b0c74ba82677e34c4fd2551ef9bfae2261252f22b66c60a087be8d3abf30fcb65a5552a955b6a4c2c9f5586b81a415fd3611846595009ec31a60c994df901fedc0514efb35fb95b6b74574cb4db6d103d12f2f41a800fd623c5826af7f31604ff2e26401cc23c459b4e35c0bce61efe9e42fa0214397f094d3376bf4b92ff71e67626321b6a2f13a0062ec7b4b58ba326410cbb30222ef1405cdc01453494b652a453342cdb3931345926d02468fd5efa303a8816bc52a73d7fe53512937a5a0557d72004fd661bac1d111ed317a8960262d2974cd58af8e8879d41b48252b79944f23bbf574dc9af3a7b5bf682b3031aa10b5d7884c1da50fe5ea5d0c516d4a613a20d8b90802b5e98165ebcc70c56d6e1e5b3611358d6301de594ba2277078ba9f0d30bd233e0144d0e5785cdb9734c223fe45dfe525223e01c753f9f779f5df5466efc669a64f440acc586933ed0e7826e37a97d6ef9c86cbfbc7ebd988b0a3b30699333068f96f6215af961d1e909714c8744d554a43fa3eb971b4173b82526566c9b9174a3b9303d693cbdcbb740614aef208fff415057a0dbde120be2f803140fac89e5874721881f5a28a9586640a7f1b1f78f7093d4f9fa893c77a27a6a37b8de148d176072ce611e36419951f12c80844ed9ab03bed27b4e9a95913ffaf5e95e50f3bd548cb7157c08954f18e105600d20310ea9644aa0e62ba02dfa93eb8a362a92ec12618a4515459711ce91d206e7f4ea0dbcf0170d141000b00042adaa5b792aed7049e071fea98b8235a13950d4399d8dcaee2f034b777375927e26493373064877a89ae4f509abf01bf1f399fd8ea630d8e67396536f8d5ce5370ae0022429ddbe0ab5221b45eb0d7881213be52caa7195a6eb1900d808c91ee682dd8e23f03d57b105e5c9d1f1c3e3d0bfb5f08ebb21e3e656b07a74e779e7717d9cbe161f839a5edb260778fabbeda150d4f80653e7c4aec0ab430168c07a50dc70e6e8411d4294d524d0a935e7da706d99adcce9f1dc9a2e182f0d746836fe5e313fc7b2730d88a95e3234081879a2eb5efcedb8ede26e1dfa847a51692496b2a9c0b0bc773fa647b74c24a5cf4ce20a913baff3a6f9da92bbd8ecd7fe109ff538ffbc3e69cb30ee4633f502fd49d1ccac357086493b2251e2f200c2e46da2926a79aa0a1cc966878cd9109ed61d9294872f45cd1da5cf893f3626920bace72a1784e3353a6167adf134c6a135e3a111053771c7d269777028e2dec098e75d78168007089540bf0edbccd17f56e5c1b4f0b5733cf56b8c5000f3ff1c4e2e32d9af76f7bbf39222d73a3b227bce1bb286feef64d321a0afbbecac36ca0508b284f5e441bed2408bc8adbad6406469f003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000019118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000190d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000190a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000190b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000001929a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000019141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000001925e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000001912978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000192daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000019189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000191159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000001905ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000001905c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000001914d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000001903db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000192ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000191213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000191ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000001914fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000192b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000019305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000019280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000019223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000001917a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000001908858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000192618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000190f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000190e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000019172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000190b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000001905bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000019137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000192e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000192297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000192608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000001918373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000190422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000019204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000190afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000191998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000001928d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000191da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000001921d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000190ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000190e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000019107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000192f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000001909726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000001924f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000001903c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000191fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000019205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000001925110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000019283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000001921cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000019094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000190c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000191f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000192421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000191fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000191bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000019304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e4958a45893695dc3565c40d1be84e19fbdba22b141797a5db94a23fdb2ed096ada287ae5eaab577d2b404eaf08d4b7ad47c76f5c2a301fa49537d1f2a8728d8f443f98ac21fb807b02c0919ee927547e2b532791f59b3680a960e779647c0f44a8a1e9ce7f6933bf3cab8f3b7e1be21429b769a21c828e7f831c57cb672e27e7b6db42f064ea06df745173c4e5e3c5d9e670c2184f2ff8c31fd905f1bab73d0655646e5a6c7a49ca40b251fb0c9f5985fc7e9e5201169587b800fe1ce23fd35065436df7b3277b2c86e4b4061ad95dd18cb442984a4062f6b4ee289e3497c4cce4a47535dd9f2cb3c52f48c33985eed1780441ab38eb71d775c6ecafeef12804707a8258d9cdddcc7fc3a70f43fb43455ec815236f943aca9fb9336a9203d39ad6caaa42ff06c3e6d1dc0684262e82cb03166db8a26fd305af8748911b120ea60e543be51121fdc50bf45fa582c10a23986ee288f031026379a053a7e0ee3b0d30fbd3970b06e22110d19b237ceda489eb608ac2082b4d35f54eb1d9a10c4731409d5673cba77aac51b5d88169a6ba07a4ecc9d5e1cb1e0649f55b58bc73ecc5fbce3116f9733788783975290cf7a101c6d1338364f7f618426d384a2eb70d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4daf02f4847273e20f3143d9d9f41366e45ab1700b365266235322f54fa5e425b34f6d5867c50e2b00ab73851bb6da5b0c57d5459c5ad51a773572cb0999450b071304214246f2333dda02db9a2b53764f53d8864ed8cef2cf0e80d516654631fad6f920343005bafd4ad47ed44d8cff5159ae9b33480adacf90ef8e9ce86eada10f3dd2a477507e0d5d2b0cb71ccbd7fa73b526c508ebd796e2e478a96a9e2e55552fe79393617c8ca24e95462ce42de30195cefbe1b0fde3a2302bf8192ec3905695e9fbc3991239e172d09dcab8edf4e7ce817fabf68025342049b97fa0343263ae82bd3caac01c9cc31e2ff64bf88beab765b01cbbc8898ec3d95098df1b4acd40d6407e16cef029296aa0faf10566d186c85cfc6bcbffe24ef9e534a30b85c13fa7c9575982c6e7594ab25ba98dfd63c1d08542edade0331fd7be17d2b40e2cef93cd8f9d48a25ff2290cae78b9db7b9ad3d728e4faa7a9b7e9c83ba216aa40d04bf1d07a0430c1741c1105d33f3657bcd0b50c6e33e87c069c1af1c6eca24659836e325f03a7ee026f35c9bdacb48188fba80c7f989e59eefc068568b8b7fad16fd659376289845bdd8ae5c29ddb4067423369695de7b49b9bf0b1d52000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092802330c942b71ad49e52ec89293c323432309fc3561b2ed7af1f0f2482dfb1b1c6a0cdd367beb5f7a4093bcec3db0920244650de7d1806369f99cf23ebfd65291ac9d6551870d393c2626aefdd34d3d0feba7647585e19169012323392f24d9cc87448179e1c3c94babedc2ce0dca3caf3df71624cb8fee3493e94ab40e231dcc678169884f5983b43bb1c01ecbdf5e76ee30b50c9bdda404bd0fc3bb429236e83e96508a1f006579ab3a20e4cb81af596a60b00eca0be5c00a2f6568d86ccbdcedf439c0c3a412cfb90019377018e9307bd283ff06278fb3f2aa269aa0f021c0ffab211b6a6e80da5ee23cba03277bdbdeb4f1e528d4d2d24cc811d65073a9cb2c08bf92a5001aa23492a8da4684a698e40ac82c744e093f212ba275a09115c2ba84ede37f257aca03c072724bbae36d55289032c4513bd9f1e43a572c2032b65f76037ce383d13514a2d649e75ce3a54db72b73b55b6a28d6fe207e9d5540070dd15ad4e2cc1fd48d4d6e660a0a8a3f4da001c0b02e7ea4503deb4f0abe212d78bf9c1bf7f4536d4e1e9367ee15e6ff4a0654d408e54e5aab4bf02c0c4d3ac981ac6386ba169fb188307587788eb7e3913f41f58aa06c2340c45af52eec20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000290ea1b151a170d53b4d3957dfd70e5912d3cd8c32d7e5ec362caab7e3c001ef348062c5d24cc075081b59886fcd23261f267e413b1ceabe7b024606ac07309f0bf470b4985f69c3ea97cd0664fed37e8d6eb111a7b05969221579052a0512ff544f0cd2349140271465ab3dddf1876d58225306be2211389211743ea357363f5fea968037d6fe7f201d81087c4c41e6a56afaaf696fa5b409b58d355868513a88836949b8c40afdc9e1c0cfd49c08690fe385b52cf36b14723c5d5d27a1fc6e812899db50504f1caed0d8079dced88b05142c802907d5f5e324845ef43a5d374fa17b988c69cc90bdd196d9e42bb3c61e201121d7061a6bdff38b6d9f0dbe9950fe05be9d938fdd0b6c458985da1c5f20fbaf5b4c4a4d6d63016363e133e29830d783cd80263dac8ee306a721dffa4d01fb7be2be790cee5aad62e1d6da8d6744e1d270b335baefd23dad8ff0684d0ae6675a7eaa29372b92f83a9defa5b1920cf5248eb13c5b0ba48984eaba10101349ae7205715473a6113a7a5d145310ea54fe5ed779707dfea22aaf913d1ff9604026e865ccb47c0a9b44da1fc947b6094ff8ca4a29ed216787575fe417f439d003d1f0de8aa570c83fd4c7656605f2a30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000273a5648ac97769f8399c9fdb7b15d8034bbc03895c84d6693b251e896b1dc74056be143c7f5b48c95ca5a758aba9655adc296e8b6e102264c823f244f3cb20c0eda81f139f60e3bb3c03eeebd0218c2ba7d891fa2841275b228cf2606ea9d4ee39bee02a7b855c4edd1209b4e8eb71d4a92b7661ceed68543eee2c8379734d4982cc87921479ded14e2670f1b9e8ff1c10b1afd5b20c9cc9b9a7c4aafe40f7ef444593b611cafba40ae7c23338e745f0bf54f7172124d1b385bacc943cceae8a783c022fb5eaa5d860656a7342bfee4a9aa0ee616870cafd5d980c3c8aa6642366f3e6e07e455447c9e9485a23f168c33012686e7e19d8ba1c3bd1405d9f56c98e70305008e602f291f6ae397737708fdb1d0fce040d4cb48fa06f36c7ed825a8c2550b994c02f93e04bec2aca5b9914eac9fdc4b4435bba721dfcf1cd18cdb52855b9a857a45f03bc907de619b047278b4428f32332a2307df3e68b036004bdbbf378afa4069a2500c105d9877e3e97739063aeb3389673f02638bf1a02f0937193a83e02c4afc871595122815e2e81670fbb82d3046a4f8ac4f17f4457a947a91821fc494517d67fbb2153f4243ad55c2fcb6ed96c925a0c4b66f0f12365400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ffb196a26d0a1074fc70fcc7fbc30bfc017a3f678a97da385f9d2243776aae399f8821917db7ec70bef1eb1cc654a7d518d6daf2fd5c214ee8c07f3b9818d970a99b3ac9b8c7ec94d50154c5cffabaada0bedc64395bd71062dc5f394f60d5eecdd533ed4d7f690a13f1844571b91dccb0d7655d46b2fc8561f81530835890d21ffb511d1605f19de231fe5e3008ad227f2faff252b3a7708edebf57c3a89e3eaa1d17676e7c7f39d4f69881ccb2fc8d8af4f6d4f29097cb1cb4c19bc876c21e33b5d1ab19ac8e1b76b17e6d1df4aba9ba150e3ca45a6dac8495be6504ae849b7ba49469c757ca6054f0d528c0464a21c99b5d8220915d4caf48c6c846ef58737eb0e8be46f45f77635c12d4f75cc8f40e477735fece7755205192c3e4bdcb25c97e3c99445c84d92252aed9a94d3b1863bf95903d50280e4f198871bc7764833301a4acf87645fb8be55c87db72f7332945edcf1a0e038cc529826ccfc0a7a4c10a8331cab8dccfb49c100da24971e031aa6f4a5448c7c1790af945215e2bacc3e97c9c74ecf0b81343f2212eb2f730c364043ef470680b9aa47ae3cae79602a530e87f62afa3600d54afa4f1b028e49a04c255f447a2ab47f04fcee5674880000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0d1f90f6b5dbb29fe3e6067137ac94e535cf921e967cca9c5b9383cfa8ccfc019758db08570af0e8288917fcd5695e4677c35588b433a50f90201bbbd47456d778be610375c6458622614874deb1e256536d267c319fa07d82b65d76315402fff34b2b506e17f400799afcbd92639ab7c7d9da1f9a9387e80ad3f5be15fd022656769969c700dc8e5cb863acdec2acb58c22fcdfc35893d396cc6633b6817222fb0bf33701b0b88af0cc730f047a8806495141534e9381d6e301b1a2c2fcc1f98f49cec9fcc44c623ec8c8eec1fa8f15c552e13bae9e35430e149091a61445e302057001130b09cd48da4322559f1f10f81f9201fcc2046ebe350428bea2d0114a305da8362cdce9c646ebcdf5327b98719d3d2d0ba828cf7e5dca483f149597f06a0ec8d83bb9da3442023400a095087ea55bdc214290b8251982961dc9d54e88b357f8a9e306e767a646bab8611dd39ea38404ead84700e67ca1f1253a0e5d408a80cb3a668eb5896c681d9a3c1d326ceb0a601341544780e30ce7def8f74559f934c9ebda5601e3b6ba2f1f3991592b74f89e7e8f85e02766a787d1a0eadf92b709229039dc4ad0271d0877e52ada85dc8284a24b21486ef5049c8dcccde0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093d22aae43594ab38a04029e2fa06b16913672df10934816effa1bbc2100d4e174afb8bf8c925a618ef0ea4253b67d29be075980e48ec1313358c33aaa501145b3de0d9d241fe1d8d5a70cef86061a7f5b8a2a5b88db5053c1f8b49417b0c47825f6ee7c3d6122f4abdc9021826b5a47ea1b1a28aeecc1ffa09163e43cc06e5a947f29bb6b9f13a4f997761cd1c7da2f8bbcb0c3da6f838430688c29a2e74bed4ebc96a1f34dee128d8fe957ea59a7ced224d6d4d061739f96f298cb3c02e42c1c2a4c1afdb39f35d7542800ddef612a9d1b2b3064418efd4a6810430a9df6aa1e2f2239eaaa58bba592c3553443154f6f751baa2dd10cedbe4ac8d25403a81d84470a835800d0f13b0c0385d3aefbc105d0624658bd77f0b737c8a6dc09515f633105b964369f647b1e9ee90c59511699c59ce548d422fc3a7fcf390db533b995d3e2264723ebfcdb9220bbc93a8e836cd7a190394d9695c93fc0c962dc2f1d213a8d523e4046bf51a6e7c49afc631fab1b1d5c6560f5d16a6318fa2748fd259d962ec5ca604258cc540aec60168038d61353fe5785f6f994f8b5486390e7eea7ce337ed000460dc324effc162c1c7d904965f049dbe5071d21ebd7ad813a3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083e6cade8aaf610a073356e0b192004bef0fbbe28d88c45e4d4f3c29249ec43ef34a81b13c734a0f7b248b3ee9df1201f555a2e713a4bc74297f1655a0d8a1d5e9edd587658aa3dc7005fb8d993110bd832149179e840060746428eeefd6136fb0b7797a400caaa668fa760882ba10781823ad8840eeafd702e3d7f5cb20726dd5aaa608ee6c5cd376fc36c96949d84e7f41d2466d0f1ddd2f0efee4a17545c23744f26e5845fdccdb72a2ea86cc40501383738ab194effdbbec7b59108dee686823621ebd95970a5f0605b45594b47904e3fc36505b1585ce557f32f1806e15157714441f163501c225ab875a6f735ecba1994ff256aeb0891cb0c032dee804484d0c04df666c4e8052e8dc1400c672c76a74742163261f020514517d9efb950946863aaaac95ee41a30d67f8bdff5b742199d737001ed0890b3c3515f9b9a4d7e2265b9a4c178e659fe8d73f4d7f8bbb5fba8099521f817e4ed50be12160f1925211761985083ca326d693b58d9f42243611a6c7f1663b1e9499b54d972fd8ce90482eb0def6ad9ae8a67ebbc4738ed72a44330c2ccca88fc02187eb61ef00385180b09bb2c1505e9196a69e304bd9b2b88164cabc3d5c967f9b799f1c983a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5bd5c14edcfc19f24a85d107df7cecd3923411c4fa32e2615661961357f18ea2c0723472cae48cd12cfdf4b3f0a334303ed961cd20e5e7d3bb39e87aff6a9126cc128d14ca68b3ba0eecf0fb3723783507348029ca50d767fe0cd22d5ef8a741120e34b9dcdf1cdca2a598521358d3a7b91ddb9a06cb03582209e6687fedd46afdd1e66f0d7fc9323e00a997acdc93b01dac74226508fa683bf121693f4294588fc11a22881feac013a0c0bc6bae3d7b74c780c7c9dab4b5bb370b953cca47ca6a9d5fb28cc3e24539eff8f2e15033dcfc2f4ce19807528b4e5d4977a9e5dd9f9edb0203ae9325d15a8b40c2053ff976a87abdb84fcfa48c3d1929c5787f1a79ac09882d800c64d96fcedeea036fb483714f082ce59637097bf16407aac4a6a91c234e298e74483ca11b6448032ec983a14fa7e02f43fd45b5dd2c923a0979eaa89032c9942adf22fb7bb9f15fb5c28d41299aca3bf4fd5dcccd1e12ee3d728502efad52c9968591036c9f8e573bd660a2fdc3454fcefca4dce600d7c9d05f5d78e1278ff7032a525a739e57dee10b7e8f22d9b3efe7fb125f0b2c9ce8395cb72ca808e0a0ccac01cb5cb39c0b50d06a7e57b79ce3c7ff6594bbfab25b1675c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000939cfbbca893f556eb8f6ee72f9ba0c3814eac3bf3dc16285f4b9ecbf3de628d26cafb51fe2dd78decb0996e0a9304562a7bc2061f9605c06989f2ab132df5af8d77e73149b809131f5033b84b3253f5c814f70ab51fadd949d9542a622b10426ba516631fdb0dc193837bb6bd91317fc89db9925fa27dbe603d6d46e1ab6b2848dd5f2b4bb946ec798d316d8d1033bfa919c7434b228b1c7b35491db6f11733e8b5592f693905041f5cc72bb8e20f0d44e2946b8a9fd30c018e2bacffe21b11f418ff72ee6d792d1fb8e64be733cd476bb7e95eb5e525f0dd0bb6986bdf886a05a25f58b106993c1bc315527c087b428066a05a1f127929c394277bc7e1b6bdbefda5d4b53d6cf518da9026ed2d5e8bd63804ca3486df16c35034d657101ec4bc5957e40655e8b03b232faab7a39b1dc4c32de1dab10bbc10740be0a91563d89ee7afbf9f525e8621fcb4fc16ec2c9d0de3809ba4c9e8a47735ba1d262dd63c67746d277e4552989be4388d365fa9fafe5c7719003d576cf74dbc0008994f7e17783cb1fce558372004596ae4611bc7bfb1d5481996e87868e4e26c2f06a10e23285cf70048ea05f229262d75f1639c56af6ffb4efe5c0feb40f3f5a95a25f70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000165ab3a100fd17c67b3f51a3e27b4ecaf6a2bcbf44ee504926fc71b32ae0f92120ac507ff535947d3cb8b8fc6e39cdb9c194d7905357b676ae3536bd883ab65a41afc438d3cf777f58d820c566aeacee392431a6d54cfb1579bf12f5090591d7705b8be85d9b462e2775108ce38c75118182d870956767236b9ca053794c0d631e122bc1b10cf53c580070c2213f31f8fdc082632028a05ad988d5ee45442d8b2c7da1b82fb9e0cd9269c4cd5bf7d394c250f1b1949cdc14f78318455635e26a5e9468c04c0e22838b28a8f8853e5f525fd97431152675f4618ab71baa0f04ea664d23e4ea2a53055c26fb97417d3f82ba833ed74c6d88fdf01924b537860957105b8bc3954e76143784d01c37f0857b494f5c003d034d2fe1d8ae958ddf96519a7cc80ca054fa3ff3d75bc0b073430438aa5b2cecee5a79d5ce8337ee29d88cfe19802d08b9367fc987008a77d69247180e4c6541bb573cf78ca40ec6714af114ee12f12f22d66e7d309cd2b5152fd0b7cb61a21f2aca2153ba448e708f6a1d31bcb38919e4dee8f4f1a6e294f6205923e0de25c3f611cbebadfb059125d94d40bd486ca05a0e3e16ded7f6d7377daeabceee66fa1ead13ce1ce6ac95ae339f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e2aa50c1f5f2d2cea4aede1fc7570e570939a83c03f5ac530d012145c52985165186ab8071d0f4e8f70ae1457c39b599005fd80e49d1e9300efa0079e153c207a6b657d4de13ba87aab3ccb514db37b0a02d24aedd9c0db05ad56325678fb620998922758b9ea81d331d3f26fc0aebff9608a28d3dd54b37fe1a5b2d445eebc61db55ad37120083814314938288edafca63bc66097f03b8f985b6f46e9d7954fead6dbf924898acb05d740d1ff12048e1843407a9c24bceadeab3d0a091ba5252173ce26302a67bfc24882922d7068901adc1ab58ca6f5a501e11c5c2624900e02bbafc5ca9099dd8021b82ec7d1f357218eaffd0fcb2566294139bf127442a276a26b467ecbbeb084ab72fe5ea317e3ba59f899baa564872ee493f790d00cafd87aa59ef2634a69884e8ffb43c0f10ad62113fcc0015090951b59fbdd867f980c0bf7647d75cbcf128cf7ebc77340f5e42f9f17547c190bea7cf766b865b3686b8b1751cf4e9f1a3ded6341a8f82aba5c4d9e762b5be5587eceb4a4b7af58d860d534ce66b14039414bd7ff8bee3b852d2fd8862c1aa6a0bca48412fa794d65a6c26eb6a860730f899c8a8fbaef43ae109a22e4f5d8a19676ff536a5fcafe1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f650dc3cf17b3908cfa002cf8b18455e367277eea939f3081211879d7a9da5afad1f3aeba14cc74a1f69760eb2534faf8011e5898c11ab2f89380e7d5bfdcabeb61a88bf979e9cebfd97cae61d82c57e13e10ddec5c7bfc2bb3dee09cb55ed091695abeb9c7bf55870a778cf882788184c19ee98bb3163a20bbb7395790e9bcf98c7f07690a6a47d9e125d1b102e92c8cbd865f5840d73e3a4c44c3d0f733039bc6f2f05235789e31f989b26dc540bb781e99c8ac215ea849baca25dbb0481819d28d7139474cd519508830bd473b76259a079607b6495316213b20ce864361064600ca5d5df3b6944958c2ae440d8b7c0b503b54703a730ccdf7279a78f145f680ef6d79be099738bb1a52eb381e471740b2273f23736eb46b60424ccd0edaf4a744b75365ac1e74c1db7413f36adb104947586a7dc285a7b1d2b88b7082ccef8f9bb6c423c64f1d642e098123b72ca050d39b1afa5400b47635b995b818b4a12c1118261ba8604cf6a3acd838fa0b9ae360b4a277c4def6137f5512af5008ce2b780cf90cfafd17544b32a56f207fbf487ce1f826081845707701b33cf5d7a4427e31346261e0a739f713e0ebc7725acade9b5c8fdbf89c88ce14849d05a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002dbadffad3f056a164555c3c8c29244bdc252129443a8c0ef73048c9866633db40ed9df06803c4e3ac1e20412a067907a4a6586f8e9a1a408e6201e2daca9a5d79ce299a6f433f8ddeb030b969445c37287ea027c6fc6c681d3f3cd32e03f0b4c9dda62f1adc7523294bb29e78a9d7f71189467e8d8ed1400a3f774802c9fa9cf35eb814821954e674dede81d091f6a52b9a33ca6ba8812e71478358ff7642c65da3808772476cd5fa7b4206e9521a276ad5576767297160911b9b9b28b08ca5e5a82d30aeeb70fc22d2661a2645926ceb62691cf31e73d5a73387471e89726087b29629e3cb2e6372c04b0fa9b0e2f395b9f81abaab89ddcce0f36d72e318052164aab6a2b5b69713e9df53dc805a29a5e1bab61c2f14f24d7deee5a70e4e3e540c60d7e07d18e288b111e575ec8cea2bb99b8b4282c206a34bc2a79888f83f1393cbe3bb0554aa466cea5edc4c4b33d8434e3891b92636f0ed3b25a2c7d68edd480b1a4976882b36594964caa6d5196aa682fa1d24d99228d08e5edfae90b7bff492796547474348ef8e66a180aae225c8628561749cf74480f59e90292e19edbb0c6e22e3b104a95a00eea444c8143fa3b68612e575f061b471719300a9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028b0db02226da76be422ce7b2ab821f74464d9abe0a935a66019d2a0fd5af4587ee48b754c04e021dbcbb56d6622e1e97ecdbc9b5818bcb8b0aae624400db95bcd436ede0a03a2d1a8c097fa0ead64845c1aaa58b48cb4e11759b25c92f6aa69225b69d31c0be8946427ce9743d1322c1214aca3568b7c3ecdbbee65cc62ac8870acc7d005a61a8568f815514dc4c9bbef53e68abf5011ecd0c2ff386b5b6ecd8d79d8196cc6c9afc533449c1d9cf0b095bddaff9c3883d0ff50736b0d4aef4813f867f1543258b30e48cc567964c5f8a102600e2ef055c5804bed6862064057180d0fc9c721a953fb0849a1fb2fe9c817a190577ff73fca1846c9fac6bcb0bb5a97cb39c6d2a657b53c4cdf9bbc38af291f218a673b4c259f1b89670560d6e5106878d75cb0d14b77745f58a30144dab33eb28a07156b84daae2680b32b4feaa91ac9f9dbf70be80dc8b865954104a5eded2af7f0ff1819885623241c1330088d6a149d823d35b38ea8daa2fcade3405dc6e5532d1b68615a1562869e42ea477312ace542bee7b7237a136cc5564cf31d797c2efd51cd3c4da50ee990de3e630ba56be0987568bb186dd48f2a3d7d1c02e36a7446ae57412144d06235248cbe000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097eae2689d3ef8ff2fa2f31760a9b6b92532b2014bd4d366ead27bd1f1100dd3ea3741a2254ec7d2f81fde3787e2072c96d432e9b3161296d3120cc0ec1200de53e1ec6028bb9e3a681e1e8e5ce97a09c1824d46e128a6a1d413c81aa594994d7fce7184ade318066de0bda9ac63616f12c232be3f38f8955ab66dc690dd724ded29ac73c0552b353fd27f00c9b9a03185b4ba62b327d06328a2d436c11f9a66ded163004cb3b5108cc62ce03067ac672545b7111d09a063f165974c032c882913bcaef6f4c297102e952bbb6040a60bb86eed180c51ddecccaecdbec6c60b1966b2d2c3bc7829582810c4015d59a6b615bc43adfd628c16bf154dccd47b37f90a471a279e5aaeba9f629eb1e7748700f124c2009c2bd7352c2b2aa3c379b28061b2a0e19346241d59486f316e257367c0cb95b533ccd42fba553315979f0b18c741f5c6544de8c917d9c8c03a4854b60f449607e068de7185ced58cbef21232e8cecc873fb470dfd1bf912654fef4f9a87b0e9f19b8e2f1890617030ec763c34c26b6df1acc3228ce4dd23d3dccf0c33317f9c6bbcec4173537e92d270082ea5d7ef208c8323ffc3d86b9f6c798e66965892f2a103c5c921675d129d32a97ec00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c9a9f1adb1c48bd1c9618d5155e7553c990afbe0ae0732849ee9c825ba89c86705a19ff4a53de10121325b88b6b70273cb245429983895442c8d64891e216c5304b096e043babe71acda24aa26c67d9b2f28740a5073a8658fe4c95586dec372f749545f0d64d88809df77f52560db51b975b46f5a6583126310e940073c162936182938ccb545cd70018b89467ad700c1a7978fae648e1cd6be954ad0563396137d82446c898967f12113fa94abb9b45cd435cc8c617838c152f1f0b9a80afaced191a3f89b7f4b562fcce54c1f1fca9eb427ce59263fbcd35d992d04bda715d4898870f1f2a76965903aa5a86bfc15ae418472d0a3ced990dfd6dc2909088bf29de916517d0475cee92f1ee7e3baeabdfe009260998b785b602f1d6edd97192622dba43a05eea97ec67c93aa348c724264ecd23b9989677b35f114044c7fb9c81871d3cede7c79c021a53a93b6b5b139b51e175b39c98664d1181b8cfccd844495fcf518fd0a57a136e2dce810e5c0cdd37a14e2a85af036bac699067f5b1c4b8d3802edf55e5bb6e43d80c91e28fbe0187205a23149ca5089ca18e900a98cad6194a0cc90684e08662f8b369a879588e0d9ede16dc2399364bc972e9ea2a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adc4fdb0fe30955ebe93e417e1a66bc364c3c6123000470793ea37c3f7fc3108ed7e2045026ee37e286ea50de63111c4ec27c08a713ed121c19ecf85687be0a8522f55c1717b6b05eedf4d7083762456abb70c1d0f15e382dc1d5aef662f1e575d29eb51e3c7a077dc3c95d6d2f1d135d74d38ac4476e7debbf2bd258892cc7d1e7ea0d196b39127ade488207bc581fa832e732834df0f87971d2c39fa11b0565904ba80dbe045e80b31fd80a08c9883a1c0102ff5a8ba16c6d51abf1d69c075e4a532e9f4a3c69136840b223c998c95b98ed03d3402a8c2f4789c5d1b446b682d87ea29c78414c79ebc5c7c661a6a8a2f10602d029076ba91d26821f479a62af7a7e0c0bc1069fd16f9f36632541cc8e483cdbe49931d4d02e44c6c576678ec735b78d22b91bf3c43a08566e558f511fe86baf2af5249af425c88271fc4617db260268d1288ada0e45a79c4af6d8895be7863fca98869f35d53f4ed7176ab6e45741393f3a1299e846c17f434c7b508e07126daf14745af3c88fe5cf8253cdfcf97ec32ce4d87c998afce08d553fa2ca5c480fa899d4f63fb48b4f8ee6503ab8030377026f39dd56fe4676dd42f52ccd49af1ff0cf7430a0a242381667696ad00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a36c6f2c179c19bba3ddcf61c193ca21456093deb0e93d41b79599b1bc9136aa49af875fbcb41192b9816c80d26d91682866be6b1083c65eff822f4f3c59a62b550343a352de85d9103dde5c7df7f3cdacb91917f3337f45ebf98e56c675311ac044d7bf54f293d7ec1b1e1e8c5087f292960cc62f08d1b6f4b94ebf7751382bac5b8aa1b03743f2975385c320e722d12b78bc78a0814c612cf5befd5304e9c88d888657105513f651e657dd8c90708061f646bc6c13914e1b6fa7b9ab29e63fd9b5ff6073cafa69a48fdaacab51ea146d208619683eb4f660e9939f2fe36abd36de66fa6fa32aad1e1e4f323af7b2b3875f896acea44fa7cdac5a4cdbc71e9d9c4c632dec22a9052b315ccfe8a957a1ebe52827f8078676864e596183db4d7e507d5477beb41a9f07e82fb469e9260bf5f793d05cd76138ea0068e740d2bb3d36e36b4d01f9f9073ccd27a196d01ca1e15491289112caccf9587efdda58980510c27f588a7769dc062d82f563e7ee13d9acdfa7ffcd38251446c55c54c77d1495c01966a7ac0d1e4826905541f6941fe371dd988b916edcfec2d7b612bbaa8bf90ac2b5c0386f6f14d9c57e8bf7f01f72f8611382f80bc7e29f7d6b861942d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f90fbe2e79ea581a2c375580830e224f502f83c0f4dd1aaa1df5d6df533dd94c39557becb38d58eb974bd9af2349bd71570f8e2938e452cefa218f415387b2768a032c2f25dff19c665fe3cc8c589b5ea5e92e9f3a7f1641057dc8922043daaa4cf8bf9046cd97db264c634934a90b312ef4ff8c0727fbed7b30e5bee5466d8111883f64b7d9e817d3354052d2a9b453a9f2281a480ecc1afd3481d1185b7fdf51671be1ddd8775af0ba3c8c13bffdddbb48ea51d383a55fbe127df57c8b6a9a2a1ed4cbb7b14df1fdb53d3b30c785b3fb100dfa646028a8f672afe7ff018264a50391440d703cb0bbf9726d87e4dc5266253dc41eaf4b97e4eb8fcfddf7c1ea4adf1bf09c7f4ca53b53de013aca096ad69dc228f5986c9ee0ba210dd3f3b1a3ab751e5d44e1b3849fa017cbf97f13c203c87e97e73b026cad93f21abcad1799012a117dd8166023858141f61a0df290ab490cb121b9d34cda25e48b918f3abff9f1e0d401f62015a1a0e2f35ff405549df4217eb97e64d7abd2abf7ceb0f7e66fcdc24c782a383ff4af04d5fb0b8decbf09e23140af0eb4a374e1bdb9c1f5feb62a66681f74eb832780b40a1a7c54f0438d3c3be431fe1063356836e864c450000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000863ed6c58a3bbf03e5299d1585b2226924e9f3fc3755a0c1b73d6a2243027e6d4e0144ba562c403786abd4292f3b6332d84a94970e579b9bc6c2403f12482320fe2d4ff9d64cc6cfbdb883c1deaa5c43a498c33e009d87096c12c96667ef3c010267974bf415ed20bf240b25fef55a031e420541f4bba4e2d01b40eabc9e78f8cf17f4256d71d422e654ad0c6a72bf57404f1071266d6c0ce14871256ba056e84ac8600d529268306d9447596c4142f52305c498bd61f8e49bec5c8bbf8e1092f72c569c592fb9afe48b617f5adf4d688e7d98e12ede41d9106ca895a2bb6049db203d780f6b26c92dacdffe7a7866a81f655b5c2f85fcac786bd88cc53686c2cb6aad3e18c99f64a91ce153504b07fe64fdad725b75f3fac2f9814159525a11419e0163c93179306cc605956bf156aac88644f89ad2e3f763f88153b20af68d83534cb1954fc2bf581ff43a1f5bc4d2e18eb90c06e6affd9383c80a2da4e6f8a998b8e4fe2ab5217589957f1c9deb2ffad49284bb08bd62cd24cb12ddf168f1977249616a35125145bc660e30443763742b34e5ff4217bbaa26da7c1da6f43ebcfafb83a06bb29b517173354649fd534a835d7cb4695454ff3cbd87cc50fbfa000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028e90857dfb88acac75e6290a9a5c6302f040ed2bfea3623db8712438a5ababb09512fadcfe5a9c00d8d92db2975b45d64ae2658b563c3ebeb49672f847446dba37954ab0a7b03ff06707b11b58d22b45946df79675e5e2b16bf91920d3c6b2cec47c91c447446c69130a4933d05e1f4f90ecbda9c9fb92689d8386241704f9671ee25f44e1fe8eada415ac1e0a188bac26a8a7e3367efcb39a9000576a389dfe24ec0a2f75eeac977a1788ff00103df453476905fbaea206b475ca2000e025ef65dec56d288b1c03049b0a8ad75cfbd99ebea61a11015bba7b9cb917bc8790559bc36c2544ed3a04bd10cbff43cfc27d7f55c80a91a34bae3150a2194ba964b6d6f5bac9096aeb307b5bc2b5ead381b38be951cba9998c4e1f1a10a681f8e21934e233c2686fe664d4fe8a373cb84f46cfe6a8f65ab6e7c4ec712de650f320baa52237766ae5f760ad181f357960bed5300630c219a85ee0d98dd5533db8b8a930e8a8135dffbac4a58033f5402837c74940ee2292b713080ebb33c0b709010b085b7cf8b9408010a36695141c6218e6654dcdb7edb9a97ab0521f2890f29b98fda7019b39257c37a7f51650322ff6974ae19038070f3168a634a6124f91192000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093eed3120b1cc5e048c683b2d503ebe8bc5bf2b4e3e37104280291f37f961d3438794bacf03e5713e9c048f32a621ea7b1f4d71f52d3f55b9f772ae3a9ea67974f6b0425c78dc96f76d65d5554ca20eed2bcfcd59c574ab95601f40304f098fb1d19eea74bc354c62018de5ec4a2586ec0ea507e019f47d292df97b9190e8435a553cee85087ff1da2d40da6afeabc03ac2aacbcf033fe029562b5b31be6c4fece85a2256170a747c2b9cdafb7168095a7aa8a97d3d212b95670df3620c8dff2955f10b29066f108279e4ee440a231cd5c617879c982df3406033b0cec90596f082fc588ee2237994e108cd30fb7bff2e04f26a11cc9ceb83fb0a670d3af57a627aad9fca2af74a40bf30db8d09e2e1021b182a2baf885b523fb3529c83f623f06077239c8cd392db5bcb5f6c920dc4fa3239245b96dbff2bc4b8bfab067447f3ccfda4f88bb4c9f067043dcd0350a921dff7889cc4f59551919dd31442f4e6702adf49915188c0d882c131c205f074341933b46091b91a7b7054506cede1dd063459f99b1388b81c0032df8c2ceed826356d9c8315d65c2e6e1a7d4bab028ac535d70f7a8bfe90aaf92bef50d0c0b9935a3ce3f536d8f1ad38c8e97825f20280000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000881906371e0dc3c1c42b55d8a0039a2f6f6e3dcad3d4fcf61a1bfda87b0f24318676f86962d7bf14c635a159e62867575ede6f627611065d5ccbec97095256e4e9ea2f010622a1bd38ed539fffcdc654a7515dfc48e0a51cc3ab05d1a4dd33d53fea75637c46a96762ae5fe6ac78d4f245d46ff63b149222951627d82d5380a920f44c8044adb78fb7ea2ab067a28dba38157711fa024a1891796ff1d4443927c7d3855b37798fe1b7a9db0b9dc95d3c9804602d2d74c468e17f921442dc5fb08d2a451c2919cb351e483fc0d6cd29fd0e17354bd312e155829e5ba00a965c90a81a5ab177eceb82b2f1f0ce711e10a172ea7361b8084552fea9642cd93496e30a8c09cdee47ebbeab4307ac80775ade6eaf98613016b8b1de1e1a2dac28986c48f0082111f72097efdb6642a4af7b992299857789658d219f1a4219b9268c143c979053da1901806824be2217e6d774ad465b9f3855bd35c53b93746f1a76b317cfad5b6530a5a752a346f84592e28f789976a6084752d408890cd52c31dfba6a8c3f2df66d6337bea2f4cdb1348a1ba8a54b4404d1d8421c08ddba6c12b8842c9fc8101d471ffe3c4060d736570cd0246bb153d6f947651ddc8ab9bfcbe91500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bb48e5fac59313ed57e207ac1ae3b2e8561c1c3db20be854d8e511fae4058d336f8693371ad53dd4b0d868d24b1353180a083826ee96d8f2f2df8b4fc4ab1af35128ca9be9466a7d56d429e71fd4e801f309debcde4974511ec060c4185c0fc08325782dada0d14f892f77d8d852907ab278b590ab3ffb3dd6b6509064d551038c3128b2f2d3250d3f7f994feb322327645a6e4e2be15fae697c905fe676e6f65c34856892915495f90fd6f2adb8db6f49b663d7346941d01fa033d4c4fe90e6525ab1a6cead09d6aecbea16700d5274ab76b34abfbba8d6c8e4990b2c3f024a4c8cdb4c1aa99b9f13ed370be053fd5a0c504794ec1095695fd35fd0af61e64a552089aec8aa301fd83771a86a78dd61320b45606eadbf132db45b7734c1216cc455be836fec9f06861f2ff9c6a76120f9cc00bcc3317802b53fc776a4231b423a93f038ce3cf9553a429a1267bfcfc9fd2dfb0e9c87c8e6470966753c463692883f279f1dd6c6bac7aff7617331f137498a81cbc2b09918b2ad0d159ba9eeea071fbb25c9cb3ff7a1c999d406bf7a11fcdf85cad387df4e5f890585fecc181183652756d0246850a062ef4516d6d0f17b6e8dcdf6021db3cfa09d8602f792600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001abda3fcdb1a454e43812b704c183a84885990c3b058f5bcb0bcf866864b94ed319d8dea1993088f53c5c70dca7740895c71ebcb7d91da255b450cfd7e5f3641407fa75aaa5086a30b8744cc205a3f33275a28c73570ba74e9e7b7a4f58ae62466e89ecdf4c15a433701b425899b4969630b234dbdce554be64c8a4c4467f8cf2d152b8dd248ccb82ace15b018002e25ec8a625d437ce0145ecbce7b0e03a825ae6d377c2706d331b65a9643e17f198c4604cb40c37b2fe047f64a4040de85aedf354cef801ca23e937806e36d5ad7426e544c4c7bf7b5ab3560b8cf310e5203198e38d9540aea3a1721a2a780a03db44e6ab40cbade6c09020b6e782dfdbe792779e8dac4c6023ef1c9f6636448d8b156a3c20ec1a9d4c6947f5eddf65005a3125a20253c2d3a8c6f7d1de5db2b178a274857f0abc9edc9dd533f32230e61b1b9b008296e4b7036f8822667d9410f87065a504891f8ddc13295353734f2704e7d592a2afdbf91f112117d026f7854ed636aef148af8e4f7c5e653a94dc08a1abee7f40962da2d5a99148882b8fbef834c22f065eac7526dfe2f047e93cd3f35bee3e5f05fd7b9af1d271b1017cb22eec632d2f9fa0e288adcf24c10e66c6f5a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008417ce722268e645976193435e47890d65e13343ed942c026419a1271ad80e46927ba079324eb417fa91b9f1a89791425b258596f20ebd738b25036ceed97c0d540561b88b19c16a94691fb7976efc65a48c677e2b7396f83460e41138272cd942375e291ee2efbd607538b0dcfa3067376fe7acfc604fa233ca149f7863f0f6b9142014d77db1695e1a0749bb9c098f002b5726e3628adcbcb43cdbd5d2f16868fd2feff6a3530f40ded54a7ecf54ad69a474aeb8ef7cf480735a1e8b2bb270bd85d7ea3383eff6c2942f9aae1303dedc69c009e4960b7892557d609c5e4ec8a684b944d130e7812016793aa388fc7414bd113231db41e707c0d91cdfcd70642d0396940278bd906e7484a19532928b79966053a0ba3d0618f4fc16be3772b3c5b2bbf1d369fee71dbb3942ef058ad317327a4bab8538f09d3223a65ba27ac392be91a1ab81b19ab3f1f65ce8cdf46a555303b77e6fcc7547310a9ccf6ef1b8a7c146652c646434368bf78af7686b271c832e5572a5dee24e8fe3b8de50764a202ad818b83b0df556dd79cd20a2de5c49cabef9f5b94051ef8156049770136026f6c14983935da3491fc5e0a40f7c0863d32d73ffee2114d2fca992e69c40ed0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad94905b97da0d568defc243ba1f8caf7ad2370130b6ce9dfe52b0f81704bb6e6b1340595dd4edc721562a5e797d4d89e058aabfd6c9800f3761fc3f52a0ac5c1c48c6797949fec4b398ee38dec621c1ec673d1ee6e21b9ab09a46a0fc7f1eba7d07049e7964107e1f9a2d04ee4e693b35e71b6d20e539795939770c114b6c839982bea74a77d5fa6c5f164e500f7d50940f9df7e3f5a816e4956c4a4685f81a7cd2303caeda945a7657ee8b75914c6ea897174acb2d362bee7358523359aa62f43c6942e635981bfb7ecf5754773bcd65499c62fc8976fe3ff5a82b7f8ea12da3a0acedde86ff7876fac5c01acb3f3c6304636e15ae817353f9be4df0a58dde8753b32a849fc4405cf96a2e39e3e4b0c735f9dde21841f4ae918b5827e91671f857faa584475527e2c003ba787993af71a24258fe16584af1dcca64605997332fa25928b06606c37e593096dd6fd35b52dee1d29caa65bca546408b6e4beffe6c8189fa8649f1bcc5cead12dfad7ff3c0a77a35f1265f5a41f66750e6073d7d9c913439c7efcf4eb837b201816befe5d6b059afd9444acde223af371ed203448d8c0c277bcb043182d1d251ba881cae160ad6a79f592b6c48692060dd451be1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fff13767b3f59d23e74e74b882cec6e84e508f4e0abef59969312b073af27b7a925e50d35c6436eb5e980511a67b3190d98417f73488f384dacf7db675deac7218c4e032fec87b421951697beef775d46824242b3a796dfead648bb60a62250bf9d3a6a1997f8eedf0da4a3ca06282cfc1a40eca1a24bd9103e5bc6756642cca63e8369cd39b649a8170eaaca602be66e8aa4775ec5328ff5f0f6afa7a6b94afdc631c5f8fdfead36b718c7928a28a2179d0f1aaea29edb34c7656a5c55a5d2ad17ae5374def99e831c826c1f93b35b540e22ff9f3ae4c1b9b7bc0447328d1df75f8ad246c35dabd7f669c396c6e414e931a6d83ab75a9beabc4bd37100f69a66a515b71d9263ecfc96f878e5b94770bdec4e06a0be6fa52dd6f79ec4c5b592d63a7eed097a826463f907678adb9456a8cd34b6f73f6c5da32848b32378449e6d525eedd1fb0f5ce72939adeb54f3eb03f2598c42537f1bda8792238adfe33b3476cd5160a6e51f90f5d766b303664c43bce415149189157a839402003531e0bf737d6b918a40dd4296d06d71f54fc2eab06a305c5cc777bb16bc52116104b9e8491e9b903c6c0e6f2cabe7a466e38409fce367e8b255458fd3469fecab205000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094a3baef89771497ea958b66ed98a2f1f9582e358a562933f68a2fdbc884c1d65bb625de7268358a0b044bef365186335e8e19adb4f496ef8de8b0b4fd367795ddf1f176c9bc4218e45b5e6ff3b3ae2ea70e011bef027586b6473dec7c6c6a68b2187bbc510788751d7cc03f120423121affcb7cea44c771d81653bbfc6f1108652b6c387506d9ba82684ca0c9b0c0c4312d66b3ce2f50ddedee2def011bc87609315f602998ee435018c43397c2f051d0f6e198e78a9cc26e25d5b7d553fb4b33c7734280340951ca97c781206efe7fd62d1fb5089eb722824b03ad7f93b68a0b5e9d65f933a2c1ff0ebef6bbf64f73604cd2bec2dbc395e4878e1914652cbb019440c87f43c2389fc61590a9789732570f0a48c1d6573f25fd16f29add504883b130291e0b4e9f583e84fd8f17c3ebc82dcff747fddead1bc0fe3941312fc448c9877085e8320e0c59b3171c1a5bfd9382d23c20fb9ec888ae4d62eb226fb6be2680cf3f9c1fbf0d410584d200382f2186df1d50e394b9b1c31089b2fb697c18cb4e23b01722f39b7674b2496c876e4831c605e2bb847bc3483a477e84d8352240fd01ee670fa83ae9275000a8d2c36f5f97f52a26edd8c4a406dbc28b81800000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab7daa81b90ab4e0a096033da06f2b4ff4c92a6d25fcc52198971516034b1961ff2bc93ee80dbe2da62aabdcbb1984fa42703e191bed952eb144aa2c3c6542d536843ff6e85b246dcbf283d22e420a4ba899b7e91b90fadb2ebcbd12bed818b1821c641b4d27833b969b80dbc464fa69d3c161f63bb6e31f8eda81a70c504d7fb4974f21f7ca73cad63e5bebc5cefc407ca2a848235bd7f8e63b54b9bb6eaf85f86ae8ae8a153d08c72feacc1639ad85fcb7ad1da97056a04d431fb0371e2ffe1f346026540dd1c53450739ab57150ea2d198cb796aea474f7e583a8497bcbed0ead15f1b367dc283a505187e2576710aae24162ed417880e767d725fa83fe95226640c5e24da09a60c8c67afd614fe48843c244d5e8b8ef0a6f8e839f16ee9435eb4c1fb8969b1a2a1148895119a7577a94e419b029c093562b3c53b49941255d2b0a5490730b90cd72fa8851023516569f80db6fdd7211e1f51b0da8ee1741264a42c0cb38f46e6445ad8a21938371a030ea98cd9d6e956a3a4a06f3aa16a8494f26fee49a88d19dbd02515abe48330ccf845f622ce02c44ea55e3cd4f7a4f59672b4f334b70aa4f457ef2bd380d2057e39980d21a6c7220a6acf9c26165cf00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009790fc769fc2fd96e62f703cd29acd67499956981b62e525551dae9014cfbdd7d88fd7836efbb9852f8ecdd6a519e3091076a7c3b2b0841a8cb58e208e68030c4c6f023e9fdd80b2fc2c528db6a47a53d7f1583f4179958b77acbc49748fbfe82e324896fdf9f17df1535d57f5967e7ab1cd40ac3145e1f5fc5566852fa2eed99f4d51a82aa4953f7b617e818866032a53fe719cdb807e6273b4735d2da418bf928f9bad764c10765816dea5f5eaea526d5572ad2be4e78ae6b23975819840445edeae63e7a32101d5ba0b3adf438a7f96b175700488e3d2aebf0613df1f052af8332c8b6b59b3ce3c7abe3a63abe641357e41e32beeaf614ce5ea5ec8ebacdd619c38d86d3c7ef52dfe862ba7e17be1296f4db722d069e1cd9476c71f54524433ceccc29c2b527a65f969c9a23ee704b6d8a0005f7084060606fe00a235c305072d0abd80f379066b6306b6d335277f17cd4af4e2de64c64db301ad1eebf0b62074551c36bd195921042865f8d62bd520846ca810d4fa68482b62d96b682a6f61295fdd61f4e7ac24684dd7c943fb5e541da74235c5eaebc7663768ace03eeb136c61de300bd4cadee3e0a6b4ae7cf45a8ab41b0b73b767f9e8367fe9607a9b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00b610f1464b8883f4635713009f500fc1203fa71d912f1038b369c6da869eb14a46c49cbc7dd1d2e66bf22e2f400250ccdaa0f5fee83cf6ba1ff19e63742ddbf0715b63eaf61a5687194c8a94f96441d74b1715376ed3cf8b64d4976b6e2021ba790a8a728da0d1aa5ce9ba7e614668e7b7367f53a99487583b7bb9aa7c580126b208d66f1f984ded97038d1236a9fc26e0345446ec211f34bd970d67346c7555fe6db73e9ed8c183fecbc3d6581bcaddd7624a24e2420a8ed8629086bc13e746592486af48e0756a1cdb9b3633be00573a47ab436f962dbb83a9833519925f327b2395ffb3b86a8bbc3e67ab87cee4db2a63943a7c44631ec784cdc31082fad4ac34f40b4bbab10875992cacb89d33a4103f37715e82cf98c8ced56b6cc51757c0197c8af2de649e124101e65d661ae2fff3f5f0e5e13c16ffe74a9081bbace8bad85a561acd8c8488ec8f5772ac763304e18f7786027ba487f5d659d8b216ce881da7d87ac8ad6f8cfb7448c9601d2975d4b24080bab89234c13733f575b596f1ad831995cbceea969180cb1082dbf92301550f34f49524e0adcd0e68a6a55db938bbdc8ce920d4030bdbe4d12d778b761a7c3bcfcdc74e2c6bdb8fab4d80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afee98984207884e9437ea18210e33e6e4259815e960652ac440a6f7231cd72662d8e87dc560d06543ea9e7d4eb5813a1df54ec802fbd69ff03907ddb11bbc38173c789e887439b417cc7825a2d0ea35755e75e495ec1db77ced2203d690588d25d3200318de5423482a255daaaa9060321c24d1650878fe6c26b5f8bf75f47319fe7d467d319768438e7850da749b76ae09d9ddeecb3e9debfd337fa35cbe51e8ed633fdd24f94af7a95439c3c460570d5c23a9c8fb72ffc74c2f97d9bca35d44bf127ea554ac2a2a4e4a17c77cf3b8bab15456ebeb8e3583a42f57a82a194f6534c6fd2a9cf088a8bef5a9293a1e80273a4fba1783e1893754c6c141bd9e6c8bfa64ec1f43a23b96c4f64afbb7d4a9a20f2fb2750a56970323fb89dde309b80f93cce9213fb1d4d0ef4ce5d7d6daa0d6afd852fd238f9f2c38a1c16d96e72f37e3461c6a6e95be8ac37e598c7d5837d4eab8c932a1107e4a495e27360880edaf49854acc7ad1365b11cc6940c167b1d48768511d43c5577753f9269252ae02f79603c97603b2bfa45fe17707487f7eebe370951b821027d192bafb0410dd4e1ae4afdf3a6dea7e27a57e9cd1d375d8c222876db88553ef67bd306b9be2b42900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e0c381adf7008639af5a308e72c59f1c359b1aedd9df7dfbe58e66d72da810891ef325ddb36f1e49a0fb351c836bf3beea6eed58fbcd576b0f8cea2265db441b07647708666cd8846edb745395f5fc88e82b1c3a9229e3437bd5af25ca084a938c700e51ca80a562f8b59754b91ca435cbc33afa20a87cb6fbfcbc1161f2831ea6c551727461f733c7abb7ade1a0ec3ead8db4b612deee52629e1e9194da6867166a2dc5257a6d9fff20026003ca895cc106835e1f01e5dc9a302afb37b87877ef63e86d1216c6bd2ed38987fb628cce9c6a0d5e363e37cf3bacc57c84af025566ef6a68d48def58a7edf858eff3fc01592bd4e2cfe0d02dafb319f554bdea8de29cb0e0bff93b934b508d229755862b7075c0f18a56e8dd08f146aa19e571296f5f4fb17f395c1a0c6c9539089be5922063ddafbe6040f50fb0d7e7c10363af46540ed657c410169ec15481d654904ffe0b0d9cd0ad3c8a28bf259ac2e71e1332832e1d1b55de60b34964a8920f6e995dcbdc44702cc9198af61b1d125c6685c20c9dfb89be2f0d6dcbebcade98949bb93688147e051f0b606379fb1ba478f4fc7cafff47d8cf9840470a3a620d2916c15cf954d74252b14703a0734024dc100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b4157b38fb15183ac13c423747eff04068d17758f7c14d2f6d0221b6ffeba394ade034902c9dafa0e26080463ba5c3b7e7d79cab6268f9003ade0ae1cde611d39f17f8472d08e0d8adc69c1a42d1eb7da227b569385d45195ea835319de3ebea98b3e17c2ff77b492e380d800377b1c42835f6f86d651c440be64a278da55e2b3b004b7cef3deb5229ab4b762cdfbdff87c2e0ca6a2c78410e4612195237ea44ae3c0623f23d445de0ac98679feaef4b704dec6fed08b95c791f592415e742d13c08f30e116966b087721d3688b47a5c00942a6298463e322a043b98291bcdfba89c58cc91a68c9665e1c9eacb609d982a909a5bb0ef67066c3b007ff218b2c1f1022ab5261c56887e268ea6936918f156ac9eaf33f5ef8fbbba7e829cff556b8b163ca82d973bbd8908641e3957383da53a747e30167f333ba2d9aba545e2e9141b8a7c85262ccf16d20fde1ba9ba788d54920e2c2c20c5bb186c6173ffcafd8051aa4d1287495195e6cc0b4d857e92dff8f68a7122f36f34ad0f431b47177b9fcab157d53749823691b2dd433d6f15442a7e046cbe8c405ea6bbb63bbec879ae28e79be2f1f8bbac4be8b87818bb33f2f6264f01eba2a256fea195564b829000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b4d0b84a53b6af2bb68d153ee898e3d6d3fa566f22307d000a316400956c190b41a763506656d5536f914c498d6c84e13c28c438a11b87e919ad0ce9befe384b6dd6ab83fce3115ba7f64752f236ff64ab510144d8eb9cf28583937ba2d2d54bcaaaf6c0666e70e54e0ef155a261443b1ccc0f4d7f98eae54fe928b4e52f1a008060536fdefc367c4a4b87d422765739b76185deb0119708c6479b2067385f639d3c796b7d73fc3838658be6dc6110b7b9744da57b8cb081b79e7f3dca28755c231a25151757f83e682e38da267d248318a84d306da224d0267edc20f9784c0d46f85b016837424d17cd8245218ab067c8f211971b0cbe29c98038ac7cec4375d314d40923eb9bbddfa2c1453a4013dc59cf893015891d01584c92d36d8785812cbdc0ca870cb83d80c7e6d75010e83e788250b93117416fc6bff41588ecbc0f0dfb0c0a39bb028c5de9cfc4e4271a430d9e1268cb935487e81228355463f66888fbf210558160dcd97f27758bd9b469125d5f20a3b5faf83339c65d4f046726c221e691e82593fe47623cf6cb26f5b42601d407c3cc24f25895804f37b4dc377b111f57fe3e8ab1af0482415d858ee3ee5d2927dadece979121f1e461af6e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a25199fc41265648bd146a209ed1a64366b9b7fb2324d60eeb66a0bd2247eda8e59fa0c1b1a10f2cfb781422c2de3bc638fe43a8747b0f653a4a0e7ec711f0e64f6b4b84b6f7a9478338ca384c02582e8716786841b9c2f1c5bb24d2671e58818d6e098881cfa9ac0942db6553711b9236c21ffade9b3eea19e96a8aeb55ff601209afc97b299d2515809733a837241ad5dc585bd8009e4bb0b9e248c0445799c6c5880ae9b28e32e46a1ae3955e6cc18616d15bf1d8cef34c3878676648d2ee78a1ffb26e30e54ac3e817bab770862b99bcd6b6d11f67bf360d339b597d40e04b6c27caff751dbb87ce5c26a5609dc59281542efccdcaaf6a39d5c2a0ea24ec33eda3bc040830dbb3ea6126aa63bbaebcdf8304fb90d943903d7e8ea925bf8500eff2860caa1a695e16dfb5c861a26e41ce37b8a382e4cb2e56014061bcff53045255f99f633f0bb0934903dadcd2c2e3feca625c255b4f56622fc7d01b81158e8248bc7134d3719f971fa94abf09d8399243336b8693d194cc435163b221d2f71008081c78a7c018d9f5ede24cbbbd03783d5639d881ddfcdff03369ec3ef608e403f322953f287114093d29b637bcf8b90588404e2efdfdd3f8bc1af0c5ee00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000faa56770eacaeba6c491fd3f73acb30ad8f027f2447744225963a8e82f328eca71a09b4fe280b13c7192e546d49a67891bf2692003183fc45d565a32549faf41f9670816d9bb0a54f975208e344e079780c56071821aa8e69ac5fa0e38bf3b8d74c5c488fa2eca7c83afe6ef5ed1a1402cd81bb5db18aed85cc8b2d574f8e54c0590ecdfc97d9336e23b7dab28c5ff221028ac745e9715ce2c450d2196064e73fb5b941bc3d20d63bf70c617308c7814542b51b4d60f4dea33719a5623d9eb3ce8eaa322b16be151ed8587e47a787c9f44f0f3cdd5c32c3029a59e7c1e67c763e316c79b5f11c9c627b3f655ae1d1c10a0976149715e3ddf45c79a209f448e14520105b913b1c951c9f1e07de0df86c35189ab266b815aca30220973da997497aa71fbcb07735f977ffe00c6c88104592c2ec746938181e6dbb7a4baa0cdb6145fda539f498fca01e27ae2b6938469b48d6bd692e496651db1f8b4bfa7685423ca9fa4ce7398e37ceb93da795f7541e24e2b9bfff8b3fcf164389ead7ff27664bf4fa8a7023bd237408571e576df5956dab78acce902d8c5388840ee1e0efc1ef8189c7d91afc0877d5ad9065ce10e1eb5f46e5fce1a441ddeb2c507ecc704d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011381f29c8079df6e5325bc67d44b444e858d9143f7ae39dbca7401f1d7e6b7dca07d35bc9cc7132bef518b9a7a459204d28b1096e543f618b3f3b779849ac561d991cf778a7f8df0ef14574595275dbb128916367171381a145c5135543c13d8353077855cace6807272174564ee57b3d88970295937e8ff6dcca3a542f81b0b3577d87322761bd4e8c20fa69d1ee0905c985c32a160ee27c2a2f44520f716c7bf39fe0634a1e2f1ab932c1f601fceb38e9e18010098f7bd495b076b64af9a38f12bdbc4e65aa8f16bfb44e2678a5bfd2a18068bd9b769b2aa8d39e5c1f70a646cc1f54070bc9411e9dc86e9cff713987ee339ebc453b4da4715d8c49622c250799ccb21fe9f47e418e82b1b34d383db54098480ff1ccd0b65557730472fe92cfb85635759a38d4055c4c567b54149f26c68866b7220cefd03223ab0b6e605bbae3195402675b3a47fa159cb59d42035a87cdabf96fd1d80a1185b4b79a188a3a092a470ec48b0afef2e7f9216cfa5dabecb52b1f2854c5bd60a413d67912fe5c6478f9ad91a92e60f761bc3619d154e88ea913207dc0be2e9e466bc20114d2f90dae3f8259a008e7b60dca611966cbb04bf31e4b17ee7a71c18efebf9cfea800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e7980eb5db5ad9309e0420423b92a74edb41b11680bdf2709e1301219b6da47811bd83abec969d7b11b28f113f24f73ab428eacaca9de3950f5994078b5d0948abdad18737a9796518bd2c55ed9e5345df70e4ae40f61c9f14cb8612e8869789969543eac2d17650945770cb8a5c09831639d170358593ef54c91f04be41edb40818c259d4254e42fb2715e4e916baeb196b03b8545191e6b393410193f4d7cf25d7d1c515391419c6e5c95e446984a607c201d7eb03a57f21777c8ce940ffe4ea9e0de62d5140dbe95f9e76123a5221c74b9eea06beef469bae2cd2b4601f9caac069ac468341d4ee8c3dd9a63d62f2d38b66339c201d88e02e6ecfc247a3521d6a19384ae17cd70ea15ae570bcc4a6e41d889e2eae5a4defd86574dbc1baf43c138981c185ef0bf0a3036de9df836936cbbbf6e92cb53715e082631d2253128eca8b354c26923cee3c6ee4ea8319f5784d16001a0922aeb1efa028f8139e3234668ebc093780ce79d99d6f39b7cb848cd0eb3c6575f38afded211bc58870fe6b13bddb68af74e3b3a58db27f91702b3de3f81cc64b77488bee41b7e62d2c62e7d9abc08aa425623f72c5ea240ee24900f80c401376366563108d20e3a0fa00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad61534336dc2c6a9336c8b36a59963e963f92eb6b9e1124074d43a69591740bb740ee0a23365d75136fae7311ee38df116fc7c877dce8036f7ce375bd8136470cea1f807dc9ef839d22105a1edb4b671719bc022932674cc660dd8a17b3221c6c18fc8b609fcf81d6aa0845b5066a4d9886473cdd2e078138e32620520bd49a427c7bc0a86d521c8fbb5939ff18f1c025603050a2f0f1daa09bb397fa31cc6faf7e6c933b5381e09181693dbd6434ebdcc477bec75ed5da266ad510236bee0d3044ae78a6062b55caa4e5ec7a3bef486a7c2355be01d0de75399d58c490e17975c5b342a6827fe8b7d34012f2183732755014fec76db407888a198dcf30fc5ed869ba13b4b6cbbe01bf5b60b784751fe169188be4e9f3e66e0f920933c942cf9c43a6480a251a66f04d86b79c31818e39fe6b86fc906a15127daa3f23839fc46e94f292672233fc39f9578567c7bc8def80f1dd0097812d5bee6b0643b4c3e1a8025bb80870b28c9164ef716adfe4060cde826065676db1ef183aca7aa6310ce6301aae36b9277e3554b73968d326ce5727171efed90b64d31035c97990a04aeb7744b8a83336c0c61d443793f35f03915eeb7097a5c5d12152f18936d059290000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066e4df9423506d33a9f69d958f64d143d1847b61207ed500a6c68509952105e833eda71e86c506d50557dbfd426580bfae0cce8fe764f46a370360093bf1a79d5b3aa753ece5cc76abdfb83c3046d384809e20d468927e03b6211f7f49e57fbcb0c1da152bb9afba4099c8a17ceff3256362f2de3e0ec9a88d3cb92d7c33cc16000f590c4da49abdda460e73ac2782c7130502ad3c5709ff78e2611c5a4967dc38e6cb5eb8533d1ef214a204e45e2d2bf9e1bdd46f00b2ce10a353f80361858f90d7647cd13d8ada7f624c3ebc1b25b3a52348a6d60dd68ee403e87a5cb6b8b77afef373d771bac8a0ed2d61d9bdfc8b9117c13211f0e936116610f628e01ba84fdc699ec2a86e55146fa3e7de7b086bd5bc8f4a6767928866c4de2e72d352ad72153b01a967b9491f78a67ba999b000d85b3715295e41e4ddc6d7d351ec9a6f03664afadf3bcb6dce1a5c3f9bfc026f7efa779aa149ce9503d9eb56a6afc60eab537d6b9d1fd0e9e2be51e4602676bdedfac2511e96f35a8cc696a5c155594538a0dde808d502b6a6d7ae9e192c9ddca2f0b1cfc89a0ca227e9a9c4d10282fbd4083c4435fb740d9c3917c08577c3f65222686f072e12dc5fafd2cd712682900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e60573934fd320477f42f1e336bd1e36684e08f8127d75600a6e62386c0b3e91c9b8655dfef374f028400d95f7a1f3035bfd052785b8f48cc58df28efb805b88be67158dfe5009b47df94fc39c3cef30f823584ba61b00e50041558e2015b4cc58a8f8c7948a637b333e75f211f862ed9a75e0632cc7a13625e06711255256f0f860bd52db8cd9e7389e8f60311e559128311ce0003314571a7327eda277cfe49a8221b9d1758efb477d00b724e0d8a549bf1790c3eec3ce89c66200d261fee14bfb9f76cd33906f35c6126b7fd289648853e5019f4390317edc6a5dcb3f1d785097bbab4c13ad586e31d506a7697a21a78d4a4f70610e4333d794f2d9f12154cca74f87dca086fb3952c9577b2236ff8e81e707643039bdf2cce494ac499c201f728e22e6e3070391bed864cf6de73d47d38d035e1336a96dd1f6f108119f5ff774d3047a6adfdfceb1e2a7d8ed8198fdeb604c9986267ff2e97b941d6f2ee7f43930b3589eec066c4264b3217c8370486d8f26b21d76b0fa31522cc637f3dc1a253b24165425f4c49eb5b8fa55ca925b67a19e4c6996c6bf0f0a1fa00e6bb9c1ecde2d5aacef514bda5253d015b6869f47a004c5df3a9fbae7b687b8bad1000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b59d5d8347cf6ab9a56a82502b71d86c6e9fdfa465bbecd8198c70756336b07c216c208d7c1884df9867bfea3cb006f2e03b8308e9c2c5fc1325b5236097cc15fb8eff869f862cece6e3e4107f68c6da2337640da61d2300ae7d533cc8908192a8e39bbc8e40bbc3500d89f77b6c59a0d441d59158a3c9257d250f6650f656ce729b90105adcbd01f03b9278e4c7aaf6efa575a9769911a185cf30528ecedef1772dadb707aedaebb35fbf0b05030aa9fb280933f5f8323d618aba5f33bf94a28d1c28474b1f78360e964e1a59580cdc000d35053d2937c0e2d1fb27ea720213454fd0cd4b17123e5187d9ffa83d4586c8db029ccd590f728dafcbe81bd3fdfc2f4db7d2992a921b0b6f50484ef4dd0a797e3aeab9856766b9cede4edbabf74c41fbb474109d101eab06d86255621898ba7485adfc3ba661891888190f140ec8446136bbcd39e204b1aa41398f5a37bab3bc2a24b3958d98cc63cf4e326d0dfef600484afdb1441d3ceac3f97e72ea52e4ea5cc2f3457a653d3a04ac5282650ca5f585cfaa62c05a8aeb9094142eb3b12f26d5e33018278e275ee90b381a0b41880b61707a8534e39ac704140d19df014cb293ce1be5268569e59048141656c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001486d9b0cb32917e97a11ff18709228f3857c9d247e841b351547f7a4fb798aba126f5ea90ee1942e43a177ffa4f5a08b5bf1ee809badc2221bda1ae01c86089e2f56087f6bf4637ecd2448165b34d2ec05003028d5543b7e5d64ed65eb478869bff8a1a1ec119e67825daaf3b9460f46195af4341476bd0b4face84009dad5f01d2a63e039513ab7ab528682ed9d34379b51b8ab5b723d9f99756034ff742626f1bdf4433be40eff75210fc1eefa4dec01a6b6340188ef13398a793c0272aaaff41b72d97fa562bbccb38de33d3b409869cc0a24da9b3fd518901cfd34a31be403c8b0e727e3d07b33891a537e069b892544615f46dc9520098b023f2283495a150d4faa077e7ba0d8cbcd99994cc4f05b1537b283f4f8d90a0c886762304f68d06cd015ac8c6e4be2c4cbb277b371ac140949641886c79735e8a6918a12fd1a74702ad16f01e79e146caf004126854ab846c18d0b56ddc0456b5ff165289ed0aa8d74c906d4294d08c6080545046d8a94c5ae9c68adeaa0644215f3f410ca9cd057e9e3fe25745043156fe74ddda6cac3474df38ad1e27a488e3379a394288c37ed219fc7d73648408e308642f0d3769dbf37354ad45ed1768eb091f46586100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cbe12ed1dfa2ccd408627d2ba1c08079822618c0d62b0f8a90fc0662da5ab160ed49df0a401f0d773e2a641241f45e2f1f1d846c839c97307114267f73dd07dca363920c53951e9bd50083ca184d431f2592aeea9b97ddfeecbbd6ae7703785f6492db22d78d00c0842f7ed3df93adeec4b1602c500e9a5b643fb250b79697e853583cd4ec51fcede94630b403a8741ca7768bffda6930d6f37b2270490b5c8946d524913f68d943494e1febd1ad62807c76949405f6f4acb67b1a37cea8fa868b9612d532cf2e21f8aae955f878acead2b2e634126e811db00b86522c1e56f5873d5f48c8739f19cd5ac1a2d0cf06a0067fc6842e35528d1488d06b41072d4dbafe7abc17bcd388bfc8d48ef59514c43f8cf60768e8ebaa7e43215e4deced7843e365cd1248b35a6c9fe2b3ff3952a83e136499fb2d4769ab624cbba94bfa86aad3a1b7cdbecdf436fc3d5e29bdb43d168691bf632e7e42d9a2cb09f283b016999c16beb2805d0ed211ca08960c8014c4523b26dbeb0f9b00af40ab470ee75ca1d165c82255e5f9f2bbcf7bd4c19c2025ace4163ae79bde3ca7906ac11c055bbabe58e21075f4d7c3cb8bb7df81169246f970da9845be9b2b169fd516f9f1a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d78f4be6707fc02d24ad85dc5481648635b11a4b46fd48ab032e9886a938a132f51ffc971b27005f402ba0784ab04c35c8975893c0db7e68eba0db09856ed44d27ba8e137492595fdd593c0851dd3d8952a8a9038c7cfb4afd7686a86e18ab0de0c0f56faee9af0c5eee4dd7f6f47a11eb2e5b054be523f50f461a612fc3eeb14617c45a4c728ee3ad82007ff6e9fe5c3256a569d6012e46c606c434dec22b69e3e4b062fb6df2e02596a026b4e27b1dc306170c7856229ed9f0fd88c540085b0baa65d280df37fd8cfd56571ea4a4e8f0e78613cb6421296536988b50f4a12aa466997de6ef137806f8aa1e91e93b67e083fc63a4a8b49887716edf00cb47c1362af52e1de449775f5dec290c799430e5d261a1ee6be5be25c6c7e664dc0e9b98e456cd58bdcd4033eb8fb6ea56f9e22e7aabf363dd669f4dd4929a962e338204df76a0405332817a3cba3b9977bf67f008412319f3f8512de6281ebe7e722e6bceab8ee7e670f433168b7c1e71bba68dce6deeaa5382b3b1e91a2fe6e530f3aae564d7a30c049a860c465ab55dd93ddfc7ac16830bc3567bb3f90a2d853a129a9205f5e462eeffaec7a092dc700672d8b10a0b84225ae6b4adcbc1f1608a40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000138ce9b83d7357993cc93bb493cbd03eaee48baa7ac68b7c134aaa21ac31c2ed3ab73d1f69a06c918023fb56e725145f15f07635d6fd49da60efd2229cfda2b3c89bc4d7c863cb71ad8fae697b3362c069fa5ed64bacca8544d57fe9e56e02581b2034c09d12f023a5e85df3bce17185d01a9ff348387a9b9faecc296eaa0b4d9b863d8bd7f9f87534ed525131e453ad94e2bdba10bf27f5d76156f09b3e831128181cc635018a4d451120969a95dcc37212f143c429eea4c673c579c3e43314d317f0145407cd2afb44eeb4a9d87f7060a90d058811031f589e49b3e5730ca9484dd494a808ca8ee9e261c80c2903ab9b336b640ac696b4c3b29f057a91f29a740b45f84aa0ef3ebbdd164fdb2d694deded7994307bf681aeec9af2ee0a23a9740215d5b9108ac12bbf783c2cd61f0a6897f57b85f4e19efcf5c01c6c19b4a034aede24a37d9029986fb8af008431e4d2ce2732c0818e3179b867103e7b6478506349b7c1c6ae35f20984976c4e1637feea2471b3910a275e5cccda97a68b92b1f94b6fd1b33361485b0d350c2731fe4415bacecf80ff8958e836820c609d4e684b5952df669993df473c0516f60f04246063d67dd8b7c81a030f69a9394a7d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac2767b76af57cfecfec29790d39fdaebbac2a977947b98b52c9b3f7f18df439eab495e88638e52b2a69b8f19064c9e2693eff9eb07f9aef4e0ed933c892d2508fb95387864fc22e17a96964bdf78c50c8e7ba7c74c37aeace118537a2b0f177b2b317e07797a35d42b3dfb8c4dc60b98bd916342ed3f4dae1bf731a6e22c55b45acfad05489cf7479f275e331f93c659ee3309e94b13abcf9d9757cdcf32129fc1be273a33981c8ad3aea4d322345e2a32346a8e6562c85e727eda78969e6e37be1a86c72329b061c98396f277f124fa55d1c835091ec2f5cd3e57191400d09c9002af120c2c8b33b9be8c1263ef0759f904876d2c5a391e1280bbd4ab0ca03e3d995fc96b6b73393bd01c70e12218a63799f76b6a30fac80f67aeb701c8a4b38cbee83e232ead0d120c8996641dfa9da6b6933f092b4b718aaae8ef4b359d8bb6c395430d2922fa48e781c941617b970b339cf6731e6a5a42374dac9168da249f3d51e22b6113abde91216210799d5edcf832b7c7249104336dbb8b5ada1bd966f3ed1a183f7d2185e40d545dae97e7d0284c5d986f17fe194377f1fc98b1626641a2467b1b2dd684fad9966a3f3b853494884261f0527b4e713cf8143b65b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b65a677bb8009d9d490ba5af3c007a50b3c4f91bec4a13e12b11b1817965a7fe9da937288f59a633c5e5c2cb588a3ddf4ed239013d8271272db364cd32c2f19ddf260c2185573cb4131886fbe5943007a75aa218ccd302451a659e3cea4a36a1df70882b074d68ef8ec4ba676fd777ffff9a2786edc93710c0c9378496fc537150de0ee95dd91105ff1f7106320b5d3c3478d6ebea662291af6b1469566519869bfae87a7d1ba4ab8c5bfc49ad6675a25b3d95199c45db387317de165af700d23ec51166847e8e6dfaf613cd6fc6d3aa671af2a06f6f77b5d24dca2f099f96133363f50b5a3663303d9a51e3add561636b54a587845d09acdb0ceaafda55d75847ab32c94abeeb7fb8b174b3acb463f351bbab681a20bf5dec0e87b454d9a63c35e271847c34e616c64133b1c6dac586a426334d628ec30abb4759faf90575283057d9d4e1aec95ff0ac141e60d6cbbae2aa3344e058662d9bde732cf5c10ca4451094657461044d78ed6b908502cfc8128920ae97cae93fee109c2d472000fa853b7f9f493f9c9410913e12594b7999b9a6f5c7ba2eebbfab4c46c3f4a82d2d067f4d5a67b8c754e607a36d608802c329a1ad8b92810da24eac2da83653beb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002930825dcae3b794c504e23ebec32341e78eaac58e6fd3642805ea1743a791e34bfdf32883c8f90310c7dc5c8dad41ada90d9e58fe43961701c8d29acd936a1b68eb33d8cbb8bd1c81b63682c1b2217d3e395b34f110ff327a7bc385ebe4d33b5d92823a34a12a233bfab6e1d59d6b17968bad637e4b1e0c39bb2b514363d75291fce7daf4d852c23b2ed20a75c4732cd44869c5fa54f451aab853480f9a3b3e50420c73894ef9c45d1df0c205c3de59d777532a4a5cc654e4a14171b03f7c48ced0e8a261b079364cb7629d46468818a792a6275fba864e27a229f85522cd24788969a0582d4e6e3bdb412a73c4b50cdc8a9f68b25bb1bda45c79839e63ff0e9c214a6e4bc9dbae4ba2d0d3565c2d7ff7ff634d5ae3664731d5704c86a290a011047d3049415b0f2267c8c09e126bad17cb07acbf431dd37dd65a9c865c57d2d4e4b6b2036d3424664250679d918478d509ac58f3278e9df2287421809a29589bef73c572c763f8550da673742665de43dbc301a23fcad8523f04a2e3567230cfeaf0e4f3dadaaac45b6ba2b5db074450bc6b2495d8de7d4cc2cf734b88823ce342846a8003802205260fb192f91993cd086ad314ba8a9ed60b01a0f732aa300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b7b203b3cc1853b614769a0ee2c8bafa1be737f49a5dadfcb02163674e4ac9521c8d8648edb2b01bc844c071dc06c01e39749bcce7837062a8eb7776a2cb6734c0c1006273acd9f8cf3ba955388dfeaea6e498e858b0debe9e9a1ab53679ff00e0649559eb8ce1fb19e607c8fcfa3d8b7cb98e4d1bf413351b53bb48b27bcb6c095d9d422da5037ddf8b40d3dea565e68b09a7c365df7b8fd259f27f9e0d87f5bdead5e6cdae1bffcaefc5833cc5712e9cf89528cc718db7155ae67a936e6a6453f9fc7f976efdb9a9b05c91567ea512a26a36d95c02f05d475b73139308fe246e910b8f761d88b6f50942b321efaeb621ab731080c386e95d70c2dc00ea01c4eb61825c43a3a9e530b0b9c0cda2f46ccf2b0183f748dfe3cbe3cf4ed8c180860948d9c38844c7a18fbe246ccfe5d2ad87c274092bbb51721504865dda1aee53fc4198a80fec3c64d7cc5c09d2ac2de42a652ded5e26f5cdf39c15e689b535faa04f151916a23412f3c62efe18d85ce3a91e4abc652d7252d049138b4f7861773a60e8cccb18b81078ae5206bfe1d99d540adb2ca5192e66cf9227e99a5c760a1fe49fa2cdce7e7f0ba890ee8e9c51270a056693ee0c2c9eaae3390e913a8ec00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bdb8956fe95817b5437e1333b73062c1de45b7c51258a81ae945ff1a2b84e04b80be189f7af84affefa8e37a7b3e063b4f4f079efd65ac517ba0fde20ba35c66ca52278602ac3e84c7bfa2fb65ba0db2c896aa3b643664e95faea48eb0f33819362e4fc3b7c5118a691451c93ec51a00ec001155e9ef4e9223c876bc551303e1ca7928dc7f3758799bca447b6067242a0a44b034ad3577bf2ea22fb0aa274677ccfdf33bcada287392c802dc5c8a1655f9c7f53ce83ea285205ddcdec1d6911939a0bbaacc71085c50f8dcd69cdbcc41697fe4d847937eb673cb6fa9b77b775ab1581c2859c44a5538955c58bd1d9839f3760763b9245c1d36290742887e9ebb63f6e988bcc8173264e0d67d658347cbdbe89c50950f9a3017038d3db1debc4f036bb19fcf70b9f1c81f91db7edfed19aad0153f70f34be3a982f795432463438ef39cd3fab7a7c4314cad118032841bd9f4597b3b08ae727d9732bd10e61e80bdf41ecf51188d7bf64ca33b48d740698d7a088f85a99b21bfed958279f9191a110fab0fe11ca11b4944c58d456aba16925fb2252f9a7236bf46ccdda90351f37500eb858014dda1a079aa56277656725bda593fa1db59896218beb494efe4c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c4eac1cae83f903a6fa890ee1e0a61b9e8091274dd40464221bea6db38727be8fa6e01621d4856c846bf3699a569c7fe8fc607dbc335b145c4d3635ad655ce04841af3ff23808e8a32c069bd0603fe18a669792aeea3575b66219e7595a5436cc92aecec1a8cd7a1ca3fa11e51c166c51f781533d0a62be3ca8e84f8e5d0bcfd6e2ca84048143d756aa3344d1990912c70e958ca9b9d2f7632c9667faddf65cd173ee9888e17be65ff6ba277296b40a98364104fc82100a33d67bc39597c7021f32f990e24db0a7a3ac8fe3aeed7339456dfe68960e8a09d9ae83cb4e10f01c0f85bc1dfef15cbba008f1ce4c9fd8c7df8a2ba4564c20e3a1478f5eacaad6925b32a4ab8604d5efe8f64cace0c389366c5fe0d93a295b48386bdfc383277600fef7f1a0b753a91bda132656fa3d1ce85357d69f7b65e7495a1d53bb48d558baa7f8c10fcef41022cb2b9e8bf8fde47b3bafedb967c6951b25228522d07ee7dfffb23f3bc3b69e3964d263b8442728fdeabaf4e32bf931345e315ffb8e2e0dc258bb56985bba11d6aaf3f6f6ebc687a83bed21b32d9aacdd406f35623b39b8b05e9965aad3a8fd61abdd82b2e5c8d8d2d901609b287c411f02e0ac79f346b9c00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1d1b849bc60f1b99dfe1c2fafba1bc888a248543cd685dc7143f28c3840eae3c2138d98b88a881bdaff4acbf8929643dcc2ae6a8b2cdc9bc07e12d6006775b76dc4d63cdf9cfedcd07af3d0901b8252ee275a476f1d30e536248fcae9f41e4468d99718da4acfed572345aec8b61e967d3ab91eb1af14a6fc649e4a017cc15118c56dc453411775d144d4aa2049cc025fa29fe1c29c352dae13df939d1a2c6f9617c4545f8234df8395ac00b90e2bf4d318022d4c6105e9aecb5ac2c75ce6dfb5c99200e7d849c849172693229fc2d29bed5b45109e96dd5ed5ebafb963cf94cf6d50b45698b25a0f767d5fc183dc180215da903ab671adb86848a463c89ebe4c754a86cc0fd4ca5c4702f29dbb3ca578d8485d2cf76232975196bbaf6e2fedf73a58c99cb291812aa2de9ced8ee3ebaf16390bab9efd2d4367edc0e2be142fc8c7b4a1e87dcebea793c5df99c8be59ab30a96c79bd41afca5147a74a2455a98cd070f8c45993efb1092ec6fc582c841d362c8078d2e2e70e29ae8a20c4a82e0c4ab7a1db431aed8e29139f16ee08047237a767586c88e81d69949db5017ac932f01554086bca955738a4da1709ce21a5b38b4a7cfcf239a5e7704da085cde100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002451183e3ff653c6e0821d86f9a6b9b56d20ae568d8b2bc0f28416bac7ae876b09016d7f822ffb2eeccf3110aef91122eef87129ec4dc56a8a1768302ef0236adc2206b25af7aa9b2ad9908c43e2736bb6c445b12498afed683b59463e6a5cb3de1550cc233cb8252fd9fbd236082ff4d731e2a1da27e120e1bdc33baa09c43aa1acedb27fc3034ebf44c3a6c638a6626cbf5a287b1a9f5a91c93e6d54a9cca46674fe365b3bfefecf2579024ea128125e68b7a7d12f0a8b1aa0545629df9f175cdf9dddeeabd1891179cc49839495761ff391ed13a3d7fedd6caecc4ccb50c6a1040231e1a7a46f15e97759cb5ace13948d65346f8cdbbe9bc6039f492231afec0c736db520ea5bb0bc0f99be8547ddd4f8928498b6195f8cb492ac9dd4a8e2aaad32b7ccc3c3d028972003a5b1bc6c92218ea0ef158d690b8021b50dcbee960d80c12560d8faac8ca62863fc89368c2d25232da74880a8b8bc17133a85b4c53cf0f18b468cd2aff761e9083dd603008523ee8c1e2f71588fb59f315feeb5a53c3d35ae31224c02e4975828842044094ccd40cf5ff0e708be5207c40eba083fa0318f9e4d0bcf4bc2e21a2f8797866536326b2459138685654d96a0fa6177e7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014d22537b62588241d3657fc70dda78e78bd6a84af223324922f0dcd26f31e32068b70ad1ef7d110ca80d5e7e78d3cc50dc5b28539a3c0ae442a6d7151ecadc1b20cbd5fd1c56ad6a3b2f8c9f39e5b4884b49ecc3ebb8018b42b280d9ea84367e9c8b605b35353730d52c8f67b1943d66748b4ee1f5d78b1f79872e006438e7244dcf2a3c60513334c45656804343aa9fbb2100edfd04e442fdacdb579f920284c4a13e6c350ce1ef8a34d21a37c6070586e266cf23a9c6782162ce9aeccfda9afe1d4090ae3c2fe0276373160a9895357d0b661149b860bba7086e1071efebdba69be29919129f39d0e6554e02195210d65c108fce56e89a27989cfe4702720521dd38b9fb0a0906fa586489804d3aa05402e8d807be40d5741cec5f275fd6cfdc75e8f4462d2342102552875a05d90d1a36c3a925938fd9c1d6949f277fe08838443b055ba2f58f7d478517b8b46c45325d47b3abfe08885f9c5b4194e8e98785dec429f1c60ee7e50756dee623b70f651229dd2f7071b55b32000e230e3c444c7c9919c4d231b4e6092c971c5fad6241bcc621dac4cd07707bf3b708ebf683b0b45ee5aaa468aa2d50910c7150f0916fee759f0f1b88f5ff3657a9355a8a800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bf6cd7f9f0e5991518be1363aedbd2b916d8f7cf434dd102ebbb7448d1abb9b1d0f269ff9719df310f5e631689863dda6078c01149e0aa2c03b912df5e7437ac9fb40a87288349fe1fd646b97ed360ee0c98e26282109715b5b5f7dc48db6f5bade448f5263c34832f1f7ffa6d0cdd1dae57d5ce618d1bf673db1c6c1d71a7dea7bb97266ab0abe44a7be8f46e42d6ec5663406cd95e7b2f22c74166838f3cfa5c481d71b55b93c7a040d204b9fbc851c740ac9dad85df9f15e7567b959b4a49a7cc165c2d274b7b49be15be4271bd2cc093a4be7f10c9222adc420b72fe7b0e1c9943cc7cf6a26f2e45c42fb8db8ae8242fd8fd0e6852dadeb069b1b7a8ed9e854bf7c84ad86c163b64d92269776c4b6671a1141239b8062f9631b0ef629d031cece9ae2035d8937bf610d8e32225580df5c667a86a35058caecc04ced65066b73de194285d311df8ada1d57ccc45f55b7cac9336588c6fcf705869a0bc484e95a42d556b3fb7b8a052e157e6ef6dc38f67b94fd0d351c24a58bb345d493cca29681685be3639c85b4b540dd6cfd0e7319d0cfa17cebcd616d80fed225218bca71dd96ac347a84325ab74784e934192aa80783a7fcb0ce73de40581f1b386f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d0d1b027a67e735851fc3cc90ee2b83d0624fad69e52a6c36d4aa230c1c3159a7d7f74007b2999aa72ee7650a1a796ea4e134dfa0529567b09a3c2ce5eeccc15016be0e57c3ca8498ee3530c577b55a70857c2fd94d71650580358f74e018adb29fecbd6a848467380be298420e6b46b0946e823fb3afd558850ae65d91e1ebbe03d145b79adc306bdb916711605d130c89de583c67d50ab08034d0a704cb6bb2e1b53cf49ed928e0c07e638a8b9a43d89464f355d86dc632c2eae3205639ca17f9a799c1f87223571056b8e6f9f1142d7d345ac45990e2004430ad57188ff5b49501802b1968d431a074b0d655ef90a1ba64bd49650e3c397b1bb5c99798dd1c63e9e87ec5ea1941bad035255fe7216ceeacc2e6ec881f40bda89dd8b564f535839d663fafc15fd8ab91751524ca5e39da10e37947a0e74ed583eda37e44ff1453049ae44ac9d48d3fcf36ecc94050c9d0929924e4f8b37804070b58bf90ce3ecfef2474a5552c79135a7b5708d0d9130d8c86c54126320c62a0af11e278f54dc1511244838527ae29aea3c3582a398e9cfffe385a0404c181b26ddfcde5fe7ec940f0dfb8670d172a6c5a57dfc902031476dddffc2481febd01b8bfaa8d700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eaa67156ea72ab95829dcbe910f640270777f320b3446ba890d11987276de640a9988c0c9a59341e6c97e32e9e5be13cf31334cea63882c2f647c66a42bfdd18aba754e1494deb68bf5b882c192c6b759da4d39f8a218fd7c3815557c23f4487d2c7c4793392412d3b4c724bda587dc2362fb3f767cc026a8d55e63a71f2580d22e4d6d1cb803af5c2c49d16aef8e76ead357d254ea06f11424fbfdf12db2a7a3bc09340291692d79bb5aaa2274b2e95b42d2946980d9402928cbe9f81867b008fa4da955ea609ed3848c35c11f33a80bd3020dc21156ee4469a0b7d6598793b6ebe31b0a71d943ba41b5e2a069215357d13a78881677b6ead0e77274e1e1f511d278c90f61a7279bffece3b417a8398a726b84b8cd2636e2e63587eafbdbc982b3578d16ad8ec278fb599664f339260311cda69da4fb10791c03b3ba51c414af88a534128de18be617402af2f34aa70022a35f68ac57e8625c7cf694522adfb6d4f26f53758d917cbf8742e54a1ef6d166073d0559d9483c139071f951cb34193e4bdd949fa827e21417a4eeef994a94b31f20ed3115acc0763f3626ab75335533adc953d3e30f42dcabb60b6ff7cfb0dfce485e904e7aea870281240005c40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6cc0dd3eed96310b6d484850b4f253e97393c7f637d5f3dae2c496300f5b58442b823f8e2ff6ab4bd2823fba7a74bef298185f34bf1c2677ed65f32473b93f7c57471de13a434c4a23d9d5b41e51d4707b36df594836efff25faa916a679cc25561c805b3467fd7c36e078b58747cecd46aae1f047911bbdcbfb95a6da0b01eafa334e1e6d3fb005e93c5532dd20c4e3515793d7164adbc6bfeeed03a8314d3c4283b60de3d1c262f6187589e59360c6efa63e38d80cc812a0bd2c42e2efece7e6c580f12585451ae07beef02de0d6a48163412d153524da0541c43ba0b2ef39f2e3ccd648ddd382b8e8202733d297d6a9b2981bf6e5cd2c2a7d45d97c000a5d7f0b4969e00b3e4151b1e58ad18a85a3ffff26c4acebc53131d22aa2425f9a2339c82143907b4bb89eb23d14b636c218e1e553511dc8d5b40cf3824f12b9723d2f3a0e4cfce3be9b4a3148a787304560a800f20beafabfec8f263220922a8da437170292bf5c7ac4f33034bcccaf45753145f6eee821151fd61cbd9c8bdd52a7f17a9072d771f34dcd08758ae026663025eb01e4d0d5a64d4dd51c9cc48c3f991314cee17b9cacf6e037ccffffa90049def1f592415f4929ae80f2ede14e14300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005dcb9e587a6c3a266f47e562a42bcf2074f440442673674ab1ba2fc6b096931c55f0fa02a177eb88be7d41fcc2b63bac0500fe15cc2ffb033233c21d32d66285288f2acccf41f56300aac2ff99307f3aedc46f13e798d75858637a133753269b908d7e62067a1fae6b6f637ed53f42a5ae3f112f8ba2af561d3243c7050ca58b96d2c8786897bc8b9ee7720404a9720577dc7f3413a5aa55eff9e8525539dbd6c70568a61947a52e7794689efdb13137c51b777aeefd10b96034b1f78456b182f6b2c292b5ac3a5595e5b31689724c84d19403d1482d40648785709d91c4c07b54a4ca6a6aedb61ca24e0eb2ad5331934e350ec711cef3071a0fe6035c8a246ae348a2f2e547d000a021e963cbe0db46b8285f019a0c2afeb89c095a6a09091bd276844e62386a54dca8c843325fdd45a287c7ff4f4c54dffb71d331095a81cf084a40c8e5f1640ad062e2faa7c59cb7839cac4e296dd243858f70e2e5a327d8f4381df0dbfbde13d0b672e4cec6abf9487af4c733db664fd0884c8fb1338af9b3c6b13bdae3e8e72cc7ae794b22c5a45aa76ea6dd13890b226a0de130ac4fda9574221f7cf5488a2ebba62137613e7472d11507ea6de1529898ebf0c4c4d00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484008ae670574a52528ab13b46fa23f736fa33bb364c99c1426ea4e0934623562f523b61dd0b0c3ac61e12d46fff33e1929a92ab46a7b21e9b08f686fb502a9f8d31fae38787d59023e7ff4d1d1a3242d144d0a52e3997bff4aa1f96eb3df36336a073706679b0a7c15b024bb5cf2ee497cb33a6a3c1f64e9fca09017ea61be1116142c04042cf2c8faf82753f4e5a8b0cebfbd048ddf09a0d296f5e688d24c9d9512d6d8659cc4ed8e04172618422f46e711fc0f69228d123333b3be6f7a0290cf2c3a5d45ac8126681a6307e0dca679ab506a7a64de78cc1240846f180d05e5530e2d6bfe4411741c14f082c6d4af546dda3dae660577b62ce2598730077921b0213edd9ab657e4b811aff01e5aea39119c288436e1876c2911f460e6a2ae2a4d1f7f4bb25ba439c4c0dc189da51c1d0fa1c28a7bcb86e6a0d8139a0e6584a53209879752fb66c1f6a5f374d6eaf570c25fc5f0adcc29886ba011cb177c1d058b27b4059de9baaf5f9c6c89291b25a6977fb96d82a620e2a9864b6ed67264621f1fe5c7841584db515803d69f09b283951a764c5293b77f0578ea42ec1941f30916e4f09569610df8ba8b5bf779a061d69e38dfac378df8c5e35a637511ebc4d216077c6c5478aa2bfad973853182fed48581db57ea6d51db220600e1fd5822b4016e47d1e742eae7801b922248c4d777ed64fb2a8ead0815b1b1db6a3d994b7b0b09c54a7142a652eeafa54e5ba69fb6e508d431ece9c0fc3bf8d4e8a6b56edf2cca99ede37c7a88ea15654ce86ce8f47001b1096012ea97ae8bdbbac566401c2bff4aa18e3b485ef8520cb9559eedbd8df15e7120563968e9a5c7b1b6a494e40f4e492ca032debdbf6bee1791cfbbe348030e88c23498fd83cefa149756965b0075c94de3d138b70d677cf8c4d0e37c1d7df107e2267d301e46b4d731a5f4ef0460b88baed93ae4e4b265dd3bafc5607b1fd093bbd0cac6b9644c933751bbe416207630b6c27079178a702bf72073b8e840df5751a4828df4b08834611ba43d2b237a6b75ce70e48c24f0442c095a22af81f44aa0b3ef621286c593f13f91100536fc2773cbeefdfbfae60a6ca14f7fec1a77d6dc2017bf844eec37488c0ec61a3b222dc162a0b3e7e530eae4bf01524bde495cd00d917d3cb20fcb628afaae1f83573b416b87997611db04e7ce4b3c9a081a69d2c967a86e1a3a6050d573ed0240c2305032a715cc29c11c926b1939bde7d5695d4cfee83efdc27653c7c0d327f88798f11f2a78eaf17b3a08b3138e3f5c64e6e154802a28183d42f80b52a52af9a928204136b911b1af876bf354b5e644d2cd7863e6fa058c7b2def84313f29cd1a60c360d06cdfe0c061ffc1271c785557d9b60c8fef603a45c04b64329f2197087fdf461de2bd334b1c759df30573cc01259d6e8126cf3fb124b34641cd226a3aa1c71c3fd5a6a469b1163be9f3ae0f5cfe276ca7cbc62fed1d4ef1ca42005f368a96a5ff9da0fbeeb797f8ce2560ea912aff52ed6c566b2d8036fdb506154516851d839ddcb201d0823dd30af5edc3437db8d84604ad848c58cab513ee088bc7b4bb3596587432362e5038d2302fe22d2754843bc430e193dc487410c428ecf57eb121e052041bccd957a34030cf359db8da53941772b22064d8aa5b950b37c26e8d463a993ed1db1c4b6e383d0ff5a8b27d0bc35b934753fd2384754a28c0c51ff5157cbaccfa2698a771f7dc49847ac76cf9d0963cd9316db30beff6229a74b33270ce19a4234b6821ef5e61b70a9b1cbdf164e36be8b497331fbc3511e24085508c91526e288c9541c892ad2c58d57fa283cd28eba3c0996eb00abb00a764e1585795f5cb8e8006577b588dd36ec96b76f7cc192afe14d242d0af7319c5ad9dc1e840a497acc669642836a948aaa2152ebf13dea5e1e9c4ed5dfc2c218111438d1781477a76ce7fb6ce260b2631a2f94e502a997140f79ac560429218e34d0c957e8589bf2d1659c6ec8d43e69f2964b29dbf01b630eea367517b0e17854e6af549dce3444940915a3a8caceb1b29f1e283041740565f21b377afd808a02a17fde7522fccac3c43a8a753cb8a1f86801e17f881bd2d2003ba22b53029d2ccf3bf9372164d380e72025ed906cd78fc47d198c88c957ed435e29c7e6a087dc4ab56d5f2e9646d3cce567f0e9b23b7b6b1b4b8d15e42408a8af2b8f1240a22ac4b9d465754284d2c96051cab51081423fc710ba0be201dff947ceca5e3178e00ccc06c2b818b0fe1a9883c556ddd70448806ca51cf6502f7de3caa5559139a6f59b6ce02a5014dd706d866d60ae9d5bf4f2e48cab4833152bbda7590dc18ee95ba48a25008ba120b8dff85c434415f35c463db2ae4bc9fff97358d211025199a201cdfbcbcd588ceedb549adc5bef3d7b2184459e2e3ebd4ff0d1f965908aff81c184baca5e611d9eef1ed26e1439463d9ec8f5157400c6bc11419738f0534a113a43a8cefac9e8939ce5eda0917b64feffd859b6067a9d7e4637bf052048be5177c9ddf0f1c01f38bfab9faf8d5cd61a84e824590ef21fe6f10693d0021f854b3e53b4c983db367efdc4d282d9cad9d598e89b990e5c4f92aade169912a2ca4cc6a079f8d0ff681faa6180f29402358b1852304278ba6b63d9b7d12ae291bd56c4655039fd153a8679a5a85e70fa5eb07c8e6dd83be20d32d3a4c177b27fbe3d3613742da275be1e7ca88fa58f3c3c601326e6b538bca7951055e7bf413bfd49c32f0d242a49085b0d5fc7748114c21ebab8717eb43333faa2b11660a0bfcfcb60be5f44726c00ec16e0f514ea32218439837f0f2940c75d76b718eff29503c210b4fb9c835d03f32ecb8669ae1593fea3cfcf5c577099c3acfe302cc402afebd03f3356f26599746dc74a7826d0e5324c3c9a8285900a9f33388181f9e03912443f592f4f8e6cea027d416c0b3690bd1f566cd8291fe038c956dcb10f20a9e64cb72615b7240f4f1e28733576f8f55c867a65b8d4490a93ec02b593e950baac79c46202612b464b7b40565415b865e79f9edfbc08b4866b1e6a67135fa02cc753aa946f6593218c2976f988f30e2733956ee5796c5705c9651c6fd7dc90a18e6eb514f08cc5138674a576e24aaab29227f3717e207921eaab43a07eb7b07ee003f4fc553270b5768d66ccc17d35d4f76512ecacade0c227d908b24a23c010e09be65f5fe32a571dce939b22dca98ae05a6ce22acb6a9dee0f2af4695b916bce549631e006c436fa4905e6871349221f194302fd59b9f254f8a84bdbb3c1a94ebc78cebb373f75784187b5b78a6a8730555a58dbb65cbaa23f1a65a825f0491517e83ce5c4fccf03aee7ccc66b8fad63626adfcacfd67eb02c6d78c26280084b4fe83ae16271459449b2f93d48363256a7ecf65743dd7e4fb6b94edf4510500a470fa5d33f8d1c6b120e1c2171ade011544bc0fcdfe234b9fb9db9197ba23e2c83de5ba2812de21cbeaad02de19e4c84603768f854c209b5b0aede8ea811831926498d9a1840258238d74880da12551cf4fc43e19ec733a540b5900d1210b76323004d2d715769e66cfea3fee9e0e9d7125fbdb343bc77503fdbb021a9410cb30e6da0796af4afc973dd20db52f4c30305692d94065296d74ecff6b70f52023b9a413567b38bb080236c40a04f199fb20d5a77dfab3f048cfc2b4dab74c2b8bf36e8e5473b571f7519300077794e542194810a4e9ca60c8c0f8037a50ea1cf2cb20d8de6904303c2129d0be68ce9a5291bfc9b882aeb9221fdc4520bc0b24e2f22cf1f0122887d146ab24cc4c52897219c515171bb96cf5b99bea85e0290af847eaf86b67b561bbe1c7306a00e9fe0944eb2a61f7478f0bafad562e15852cf7289a63a65044b1cfb721efe795c8bf11998c4cedb5aed622381558bf2dbc195221a3713474620782bdf6d4c49944a83f77d26b088e9b304648f935b707922686f2ff50c742c503e3a2192e4ba014254c262cdda0648ae384ef367f1d1a0006d12e19a18deee95a2ce80d719fb83a82686047a60ea3fc01d25489d1a070280d1db75b6af6e04cae81853e08b5f1a1d30e0e75c06274861926ae2d5be055c821e8843316a1628741344b9c300fa084245f40f96dc0399024ed095a3835cbd11aad84bc68ef834259ac523dab81c1c9055eab5ca7e5b3c1531eafce1bef52740244a71efd67968713296ce3e2badbc775c7adc393a78238f36c38398dba733b26e9795880abb7f070fec1b84a3ef834364be334ad93025dae6244e83bb522c016d230a25fd17b94546e51174dc34bd24125fee5e116482e11acb2e325a4153f06daa7556748be42fb80fe261ce57ebd910d10fe37c6d17b2cfe5dd2afae3bc91285c6d04f3163316e7d82a7f7f0a73b83022ef9d7610e031ca3e2d638dc63a71adfed5cfce1c80d2d3f2e630b4aef5828dd6346908522741e0c07cec115ff3122ff13fc98901ca99e10870b0f020a978a4c368183187285a7f42ca188b8848a11d585c1a5e1b5e33ddecde2e4a9eb5b60aa582f3c1915532f0757f5d2d727a11c7eec9b9532946b445a8347d28ab31bacfff4b8a76244dcc7e7dac83c25268d12c36d5825d4c41d3edbf4207832d942e5958624f5a0141bac041b82694009c92b6141fc0898fd61e2932e7a1c2cbdfa1711f5f1a7e3e5bc26e7539359874861298921b60ef53934f3d3937ed2465412ef669bed53039501aed963aef00715451f5a4b2c2b141ad2fb55e26b073957e96786b285fbc17920c777e1b591afd04f05daf5c1d79ee06ea4d64adf2b750c6692c74bcaf11b6ac98c9d108e477b10d627e598ee6b9345d9dee52fc5bc202953e936aa401cb2277ec70b05d4b39bacf4175c8c62c54107d8a979d93859d7b02bc127c971daeca10f9b818a85f79540d007d0d15c13a112467d701cd8b4ac7a0e0576220ff366b294736c2b6f16f3e6482893c15c5fff13243d2696cba74d65a70890f3d055cff15cf85d04a2abd3937c028af73901c69ca0e60f4a9ab622202a4d18f30035e362e49ac7af1b61dcb7c1204687bc17294bc6c93fdf463bb289a327cfb9f0ff7022cb9ce340ed86da965603d25819efa3769431aee62883700b25beb695441430c878b2d6ee2e1393fe7e0e38ea58d2eaecd3293a13b0c865338449fa4dfa55644d9efc3b75afefacdf7a00f750390cad0f08e26d8b6f3796ef98970afb6324e392c33d43a95cad8f959512b5502f1c368038459762130e1795503d047565510bbddb982819d649c40f962ba5fa1ac82712ec91099908dff3998c5a27c7b925afef394dbadb568fe0fe782b3bf348e60c081db45b9254d29a3e2c0ef3d3e75811b1e86e276b7776cf5f6b0075decab1b46f8f2b5ba47a050ec77a4e18370906a556cc68eab73ebd3ac99f09495aba276d72e3fa86586ba27a5d69d1b4e738d1df062377640a119c87b89c0c5d023482e919ec322371ef2570d10b7131bb17759aaf02db1e58b7a96651be0904b6d0e3331c20e1da3f5d2f70cc332b84a3f22aabc310a007cbaa13d9786d1bd157ef2a7a5051703936a61c3d42dfafac08a373d02aebfc21c4d217f96cde02c3980a895d1a735eb62d6cf1db234c77e4a5dffc0e3bd97b0026a6d915e8ef2e75b33be844917e496b516a6889da9587c9167f8a760b764ebe09d271c4e434246c311365db5b09a7382ddc44751edc86e88dd8cf775fe4c1fcd6a1f672e0fa06a201e3d1a5f7b7e9268f752f02325e034836d81de7efb06eafb00cc59925c6003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000001a118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000001a0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000001a0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000001a0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000001a29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000001a141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000001a25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000001a12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000001a2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000001a189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000001a1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000001a05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000001a05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000001a14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000001a03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000001a2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000001a1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000001a1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000001a14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000001a2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000001a305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000001a280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000001a223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000001a17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000001a08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000001a2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000001a0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000001a0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000001a172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000001a0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000001a05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000001a137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000001a2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000001a2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000001a2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000001a18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000001a0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000001a204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000001a0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000001a1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000001a28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000001a1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000001a21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000001a0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000001a0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000001a107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000001a2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000001a09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000001a24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000001a03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000001a1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000001a205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000001a25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000001a283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000001a21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000001a094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000001a0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000001a1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000001a2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000001a1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000001a1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000001a304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b02384f33732a8ccf5e0beb3399a943e0dc812e58e6d362b30aa406cce8195679a38799d3f71ade65f7a12e1cbba97e02541d534fe14df5a3c9b20f946770e9e5770b623c1169cac861be36e173ebf22c2d8850c67a3e20df5047ad0ef0895f45868565b1cda2ce28ce5163b4d39f75aa0feedb1613275da2c300ac7bb68245ef67d315558c722279c7b0bc85d2d2f563b85a94ee11038424f4fe53b81143b37704cda159a4aea67d372470efd07958365ac267ad39e480b772d7d22b0960988722b9b2ed17e75f7d8af6133a979b2e30503a9d959e7186493cea6b2e8b8795cc038062e5dd6fef28795109ae8dccc4d56bd55887bee9d9b063639674e1d5fadf585e2274fdb5e560ae6514e2cd2ecb72406a97e21b9ea94281ebe58275998690bda187f133fa6d6ac86985728e5af47b760c0bd4fc87cb001023a0d790e7989b6987cc8af6facfeef13163cc1c3fab0b798a363300308c73e90d3a9be7558c16c72d097256c84c556b10744806f2660c2a3e63522d7d1d16a36290c44b338fa27aee3e14a7ef9c4f000599cb6e79a3a26ad5e6b4fc1933b709f33607eb2fa2ded029e90232471a4bf933958a35322103ee1b5d116211a50bca96c8486b86f0300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f6e4ca59a78312be72f7f1c26550768ee7a3212a2750211a37a6f033372b35a3ce8523ef309e4affe8b696db7af3200e89918f3bef1ea333d7a1ecdcf9729fff97cab31e7dfad5bbea75566cbfabe0008fd38574e84c696328749ccdb0f29d7654ef4f578dfe8e2a75e21988f418a12e2e9563ebcf59fa8ba80eebe09bdd52f762a7ba8e7a5bf5ec8df662a710fdbabe6dabbd91296022f79096d1acc56503f1afb71fe8d5cacdc4df8bee99243d48f1791f41dfb2c5d5b412fea1b85fca35c9b7e12326715a3eaa8a67bdac8b873ab9fdfe7193d1eae31dc3c21eda4813a381d3600e5227f40332afa52d4fb0f313eab75332ece527145bd12b5d56783df3d1c2ecef089927d9aa4ea23dd8e14f58d530895fca0407023b760e0086a091ee2aeec73d3dca1cd0a508bc8915b5f297a97350c3cb7fac5773d85d2a01291e22d811c768c0d2c034165823be45da0798bfe44539f21277569a05dd6b47b183866c034925bc63c97b083304ee05257f08b2ee37c4d2858c8ca51365e4f167a36e937461f2e22604c35a368312418f6b98ae21929b8e7291275537e7b0dca8009484679e5a05b2c4d54c28497865c7c8a080143e04b8357c5c5e45400fa669006c800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a511e8e7c032dbd514d2c70378a60d8785934d958c70cd3105bd1bb57f3fa0f6636a1c8241ecff7b55fae63cf52ccfd7a3a4436858e7aa23b44e267ae07bc8d7d927ff092001eea8a87c23a7f9605d79e75a0813f646f95eb71c2d5c2a363a3b2fb27a50832f8105c8492cd4ef9cc3ca0fc10c0c25de1bddd662460f117b89eda123939b396f5044eac8258a7f548bb2660dc13ca3a99d9c790035f227acd1443ae3c317d8cb78e6274f17a7b05f30ecb0cd74cbc17f4fc049d68f4c7177f3995c026e8796f5d97ffb1c8a6a9a2e8c23842dbdc70ab9710533b07222bb5de0c29f1bfafa046fb5a6a543633f1ad88dd7fcbe05dd2154626ab1d1eba0d8fb06142c3a81ea2eb2c78dbb5be17f9ad111951e660d7f5110e8557870126a75910b89c08acc746284392a6f9ee287ed6249c2ed4901fb2a76bc2e23d5f7f1a5476cff727a2ffcaec375986e1674d5bf67598f574af099f3f7af7a5ac858218064763abb15ced544dad92b26c12e7d8244b20863020bf09cd45521977f632f7c3b61be9e725fb1835a02e32e787569ad2730ea9758268790529d82818dbd9bbe78e4593335d83e42a07c303bd4636efcb59b501980e5adf425a19e2ca2172fed3d1ed00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cb54da8ed8421416c338e4e254be08bfe80832c69f9a565ed09f9c9f5b308ae10126375077062e0f3206580b9c9c425df3312226e4a3a164bb708fa2fe30c3272ff8c313a5cc373892b86e70e79013dd7aea326c2cad0365d5149020dab1b2e1504dbc9605eb47b5d4c771dcede94075221f1c9c036acdbb897b30a2073c8f64b9041a16c6b33d343e2dfac1f126211dec169c2372d90365c0afc149c99aced8cbef659208636889cf38a806439d693f77a238c113618512af22d6cbd8f4b9c74405d21ab8c22fbc67bb6f09bd7cab0f6f17d4192b29d8045195ef17edf606115684168313ca24b3d4712d399c04d5cb0aff411b87a560e9e6897d307e5bee203bba03e091ceae119b0cf399d2bf5ef75bb86ba12966ebca255e273f541e9c5229a9fd30bbb59fbb70a0460d9ae8c70feb0b57537940c0b6385b8b053e2e9598e43b761ce8b598fde7c28d9079cb2301ee615331a3559c48e5a00f4f178155ac254212e2b34e403801e263dcc8234c5f62be37b6a9892cd7207987bff00293dc32ad7f6cf6a241f2d4a374a11552901d978da673ac7331dcdc3b04bdfe467f9e9677da65a242568c3857d4fa1dcf4abb9f52ac323631ea1829930aebe729496000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091f5d0470b0add14c541407ec000499220941f0b2dd83b41745789c18dda04bf5cef123b82b4eb04b3cca8979b93ac71efe0fd301cbf5e9f5bb876dda4009f93abb5ce8c128aa3b085174fb45240dddb53b924463b21279a9c3d1ee3e9de841d2262991f293822f7b73206381981acd0d44d1ec5864177a2f663170e60eaec101e65c68d11e45fd663f08c8d83df38b14a56da38b676cd1539e559198758646d6414856fec002b80aeaebaac06a1dbe6645f3a2cba7c0aec5821a1cb86b3e5591a623296e85d05533f8f06a69a0dbd7689bbc9374707fd55fe40119df5e8bb5a31b8bfa921e7e525c16f0e3078fcfebc17920e10313af92882e6cfeb6c585fc1a7ec23da597c5534294003e4da9d65d6dd4a933189f75293a157906de7d0bdfa2a263ca033e8886622443368b62ed69c7dd84fbccc76727ba1030fe8d58964fc6bfd3eaa3b3c358c26a16a44fa6af657945627fe5745be1ee9b90c843434b1bb37eee92f622da45832b6156a1ecda7a2ec27b893297a36043d022bf1b02990073820fd801cbd7c8bbb5527562b4220cb4e095187f5762b170db520bd1b644c40a36b732566b576468ec9e030ff9cfad55cb0e11ec3df66b63fc316dbc9bed4d50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087b4b37aaf9e569d86b4c0451776df3b3f6bb108de1f387c607af0a46b89e1a9a91ce0063a9a9b367d64f165430c0e6d9dcb41e49e5cf9f611821f78a83d63efc45b80fdecb490667b657dc41b74a6d305c16e58013eabea55096ec51d8e25ee5e6bbc4d4b0282fcb900033475cf1ea8713c2e52542eec7c71836706917c9d9fc7fc6e0a1239ba15b17801a852eda6f988a238fc0cbf47ce83fd54d81ce474b92ea02af155c2577e7fb99d483aa43dcc0b25e1f80f2a585cbe32ec0bfdc1a20a21aee80c31a72453748251b6480c430d86e1b62b73375b4782bb63bb62b9fe53d218480d5254300926d5a0ff2acf81fb89f367236758f2461d54198e58cb2d47883d8adac14e45a2780b5beab38b4222ba0e6192f133c2772f0ea02ef4952de6589c62dbfa2587a149edfdb55f88c3c540a4c5110f8f57d6870bd698efbe602dbe8e7471deb9d0f8d023df5e2f8ccb9ac41d02c7ffaa0e6f3f39290c2d2697057adb7000d4f627f5f7380183509ca2c8984038e8722d952260459cdb3b0503b79b00807d464df78a5be6d3f82d8ea5e8d30cae039bf94f5fffe8223a94dc73ab455a3c92fe1a105b7e7a52474a78e91d99934a4ac9dc9ea9935370a13f71be900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b8e2a1174123044fe85667302c86a3be7c835eaa098f6ff1ab4520851bdd3de5e95882128b74e228d962459fe5a051e4524c48af4cfb488efb93c296a146871a1dcea8797f8f6ffe6f5f9b710500d74e7f6d72e2ac08bb1592821772ba9a0fb8a6c69a707685ed450533ed0c84eb89c2ed885542d8d6f0a0ef0570ff04e6299838230c19f371db26aa8ddd0331e860cfaddfbd94c1126397b60d2ce2a320f661ce94293e5dcf396754f4176c9339807625a8c22b4cbc631b91158708aef1882f831cd2a47250ddba71d13d355f4134d98d2aabddcc161f64c38eabbc8f46d848bd75fd3c2ef9ee06ff1d871d263c535c0359c09a127967d1dacad24d1a8b78b08ff35a057c3f34946b976183526372a204762acadd01784c2e1d53327cb62aa907e5dc0d9de863163fa6b52c4db0ea05cd003ebf8d0036984e99dc4a83aa061bb00d7bc563e7826bb59b11c6c799082a7d8db4548426c78716adfa7d21ae2164ae5bdbdbb114c32d12bdb739563f6a6e188fe98da78d6c6167a67f134e9c3addbee77fcb02c2b99de76bd034ab3df1d0867b294c093455fe3a1b183520a673f4bda45f98c4951033db5ed5a63f712b0694887a79451af96b8cc3f1ccd65ee80000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a98442f6c377b64a9ee5caa911a9fb7f44f5b1f705ccdf9e1fac09a99778e89fa4a7ace07d3a1fcea98169cb657e6ccc52dac0110809aeb15646547c74994c0cb21276a9d231c4550eb56f3d08d513ca95da82591856ad71eeff9673456605a046509660165adacab8b62717b2bf96595cef157f891200b852d2d2499eabb4ba69af180996d9eff004bce37e9193d7792f05bd3df1ee528fffc22ae3b59c041124a39d7249f51f2c3bb650899806753933321c4c0adfca62228c602d22eb21d18608b84e79ea7e1fb771b114494f4ad1b482578b038f7c27410c57902f7380af75d34e7a61340cd1ab34102b5d0e40234d94dc43d3f3cbc1012daae8ae4b4379bf7cd7e162401947ea12e82066ff7640bea7bb580843e1d3ecdfd73df3c71723ac95042e4a4915fb1de9be12810e470ef75a5dad34cb9a21266146378a0205809d1e05f9353f178ba231b641554349d514138e96345dc13fd36488f00277a77fda587cb9b6717e37a3403b8a37cf8f30c720517220894c6a6f8035e7723634b083608dbe2abb725a2d2cdbf559b227e2d1eedf2f2fa71b6393877a0aaccf4bfe9f110c65a1ed7cfc2066a3fd33ce08e88e6a6723f2359c676cb506d31c2488000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006aba567a8781a7174d12ec7e71dfd600a0f3618df1a4bab488f040a40f95eaab1d424386894fcbfd1acd71c73c594c02dcd95d09848a42e5da15ef93cdbff094b05130d3d3878a0d092f206c718ceb014150a3ebb9954c1487a583b05d559c012ac68f2ba47ebd2411afc399e64fbae6d313c7033d50094128cabd7e0384fcfdc3cce5ce707e42f685a61c91827388a1f49e2ac0ab73379e0a3f19abc0c08001711692f10762324ea2bca50637d22dbb716757674ba5c14f7a0d515669b3216948a81971465e2b43bbf2ccd5c2b90d75b44b9f936474bfd3b891d07b1c305250504ab8f7d0d56422cd6eccd2ea3d1c0f44c271cb2ad0ea13355ed5221755d332aa9e34bf0d14f13ec3d0b9b090c22504013bbc64963fd1841ef44b8d5ba20e29ab9eeb20137cc88e247c0c5604c960dde8159d57e515917992aee249f306372d04176f75ebecac21b77c642dfed4f0e50d60929df0af3473c9564a1f16b2e619a1d959e7777757700d4bf0d4ddb3be8b7026adace8f536600193188d969a6f49182431c1f36ba2e1ef6db6c55cb4642f0ee01c28f072ddb424391ad17984aafe3394a852b18e2550360b6375402ebb89bf9e190ec0f740b299d9321e0c9f390000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091444feabd7161ac72ad1b488080e9a7382c99f34ed567509f6561eb0c88d6565ea0e6ece73f9a6edf0177588aa93dc821cb244570610b668e1b621cce768a78129e582d6dbcec62c7eebccafee13feb99c913c138ca9c064ec73e99a0076a56c454448a6fc30ec12770f17f5cd0c295e6b3c4d3bc4d110fcad3cf9f3d963a4368f5f0f74ffba1bcc4a025f1d72663fdaa46e0f64d92837b6ecff1a70882ebb3a0ba570b953501848754d84009c3f73e9e1ca904dafa30cc54c39511bbff794895379372165bdb3ba088adad781aee7fda5ad85fcf152c4cb0ff586abcb5eacece1484915e9ca476f588d5497a5237604ed1e15aee584b8e63ecff76e38f5031ef56c0ad516bbdb9f3471a0550be5366eb1b83677d18e1809ae059b7a208591e3ba3399c22c1b5128e5e80a81382d885c7fdd4fb1d90d49fb710ec082885e378e73d4d1c95fbea78d296dc19f1226ebeefc18c4a7e5e40b634918d7a50d55b30fa3d60dbc76030d9f7edcd0da5e5176f4c6e41459309d894954519614d8769f3ead02bca019475c0594930c708d5954e9f8b139fa1eda33fd38bfddb743a4e4a5d85df70bfc7f925002d5c79719e1f8321aa4b2b79afd44ff30f3d4b642849d30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024b0c2ccc1b733249ea7b175c6b770de75d02347288389b9e7b69a26face6242e21a76c8d11ab054281ef9903fddc7c9d852ef0843fedfd75b3c7249a309bb8568cdadfdf79581579b33ae71060bd28ee9520b37a953c67971e7c428d8226ad1934204e338e035b1b669caf98acd2a3a703fcd3e0dd908df947f994f6458289c5ac8e38ca34a2e6b1f90f796530dbf61c1e92af2b7021daf3e3b6b429eff5c04e83a4ce01eb6aece2adf5c896a5a7774c359cea09a663b7481994f1b37488b927a6ebb25055646619e48502e42a59b18491bd2c21b277d5d7039ef5a8a11b1095b4022c5e90538726ab3c30cd637c599c7da60c784b979f1af9bed0700349a79fb54e6d7121c53d42363b61dbba773a6526db2233332f852c69e0d55824ea128c744c311413883381f0e5008d70ed6da9814b9089fcc7edcef56a303f4c03e8ecd7da8a33cb781e51d7dcdf4abab86e634c076c3612e9c31cd0ac3bdaccd04140f549471bcbadd38affe0b0e9c49769f70176bba58f1141074beee5e2bbe8ae884a691754f218e6b91fb22a2f00f904ed98c288018036f34cde7af4b3a158a5fbb13a1d0312a6839f2c5f6d13c0cc8a85b6fb97408f854b745c5703db3e885400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e78ba16f45634f397f545da245ea766a3e717fb6d560ee4a4a3a0d112b47d962472b8f482333541e6f77e532c1a2a30b19c5cbf6ef86a3637a3e0bb585a222a550ef733270d345d9c46ab0667fb2cd2e989557eea4960ae86e7b640b6c1cc00a7bbee00c654ae86c03022c0d1a13cf2dfd6f10ca65cdc6fbf88e9f56a2d537701ec0196b6a7b2a43ea2a23a8d58eef6a3d919db3c82cc0f00487018ac4840c306a4e2af0e45b25e2e8d88b2bd1b4c16c3c8a0e51c3b905051b3b19e297135c597e1d012cfdf7dca987119d2aef0db08d96b237fb4c082f5500f8a9f090997f1f1fd9bd3b576f7fbb298e0de320e5c70ac8236619a52cd25f7f3323c8d3d41d20a72721fc85433268614c3e87370137013db146aa59ebfebf484a9f930be2976486843e3bc0588312af632d7ccde43707f3462a027c6b80c00f2772388777326e9c34c0dcedc76e4b3a1527039be45486cd33a7ab87991db70a9f2755b600fcd88c0bc6c35e8073c810ccd0ba36c5fe2ed20787f2b02b5c49d13d261dbee9bd5aa613dc18ea63ee16a3a8a6345da6baa3942b8c1adea9817ae9d6089a701ade4027451c7854503294ec8daf9722078e14fda3ec30c789095e03f1679471a6c780000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac1e81ce06d94f304edc1aa73125299931e587d360acf516d512cce7d6126e477962d13507e983c0b47a2d8db9b4175406d6b9a2419ebe8a8f88a90f605d1e67cd1d1396d7779ef3be01294d66a1cd3afa362aed31792edd8c2976633bc26d6dd4296dd7c75d7f776e7567e5c6588ea2e4b6d2e54f6cfb575d4928d0b3bc45bcbf3024ebfe9b6790e1c3d71a10d87cae85d612a719a2f3296e00dffc073e14966bbf6f444cc5d4c58658311d88fe5b4b296c8e57ce3d2be7d82e7f887ae298153baf3ee83dd10a47a9af0b2443c6d7ec4b67219bfecc6f5d94852dc97ef573a4c597f76ba42ad999d4dd09f604b6b29652f5be320cafb5dd403490fea7af9e989495b022b2db8d4223453a41b4373af574b15e25ed297eb4073af657ce18cbbaae9fe553a9483b30af993afebdbee9de9e69e94321e1e61097928776385e3c53a642d3d51aaa78d5d1f95621d02eaf948cf0a29589e0491af76a72e9cbcc4098de7d1aa617eda6a322251e1d760209d3dd1da04052eebe4179f6075afaca1ad1f39a0c2035e27224a2e7030957f9d4ff83be937fecf719cc1fcebdb7b0f2f547c7972c23adf2d1dbb2e76cbbe4c5845cb13b4475e4827182b67b21a60c20dd6e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240e17287f097bb62a79baea4e891925a9900c9dddf865a599276f4d73af85844c948a1b7a7eff66633c4b08e4d60676e19780061fee48be0ddb44b862d61a69f54a07139ec31e6f0b1c993098d06b502633ea13c5249fc3b974c52d4fac4b70f731baeefd2c66fa689312eb1384dcf64ff00ac34390ed8923dd2568b0f01b432aceeccddb7a8804f15ea0693a6c2db8a4e7f9c46439c32c945d0fc480f2b15d0bcd05bdf80ffd7c99d6b784045db9f050a95317baf778b8034c05ccbd3ef3765e1bd025e0481f977e956a13fe7ab9e46137136f2baaab098d978632c9504604515e9e3eee96fd4b05bbbfb865a4e8225e4afee99460a22c7b10e187165ed87b7c0ed8c99cae7e44daf58243b1016c086fc6091ef0661b48388439e2ab9cae40b9b57e2297a819b7a9dca5ab85925ecae93fadae472206230d19c1929268dcc871e12234a755ee1264d5def4af8fef94e648114d80b30090d003dc3d7be024e16acfe4e4a2aa2291c089bce50e749e6be3b601339202943f2bbfcd6e4ac1dcce09da410cc0985a3b060cb7db39a870b036bebceab1cafa73fe9c6a04222c0a44e91f48903e282b6ac7deff0876b001effbc18945a34b52919fc426d3e47fd2f2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010fe7f49aa5100c18eaea24215d37aae2cd928c78a4334b88fe6a82614847da70901e1d3f536084512eca2058787552e601c2b1e7b8a065e92d4b9fa78c62085bcfc8b8a6a00bb8c0ff5750b7e30c8aa8b6b2a57209e439bc3bd25114b939470bd809c82d5e65289e7828acb365c4488db241adf4c1538babe21609dac12ea908373166ae2c61bff972e819e30e1dadc7af12adb9688272715610b1458b7751afce5c65c73eeab5fcc9b84e2dda4c8a91423e16786655302a2761da872136a4bacb4311df317b3a1f3d9997e0aa2fba9a542b896f3ad71cfffd18b444f8d4fa75178a51599a5c2191e5f4cbe0174d056fba49177bf9f58a143ec4a3f0217092233628b765286ea1fd2753c015c36a60b930c2b7677e4da65d1b563b9574e5aaaf8911580b7d7fff6a6f95bb437dc2e753bf133d7f8953803e04e97fad0da0494a8a0b1985d4f4f79f87af67f7cf96c75a6a1873757f9a5484dd5968b0e13a327e2ac208c0d2e563c240a7a1a1665ed47ba14ec89da12a3a52f0ccc8650309e2bb7796987ce4ee0534c6d91589da7541f2a37f73ef8004dbf38a40c9dd66ea52cc67492fa09067d3a5ce80328031212dc5eac20d02865561cf2759fb06611f75800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1f254c80fa155a70233acc19cf6ee30fc770ba9980c098f06694458186a7f36a61d658a5023560def0eccb5a772f473f599d34b6b9e843ab72cbec6425660789f4d8d196d249d70ad05a71443f55b72d6db0d866c4e4f7806cf96475bfa1c59dba08f3d86606f9120c6822b406298adfb657852bff0bf45e0b4d49594f9a7d1f1cae7aa2d2067ef446aeb260607bfa10daa33dd7b20cc92dba8ac6b32dbae0a7df3ff8d2528149b2e58dd09055a872bf23761f14b000b5899d2b68b337d1d747ecbf401d12a270699163e536cd6a6e3ce923c94a162691a31747d3de159618e4c40e102a0668562a088799a20c22f836ceeb6a990d7be3cd5fc77e0bbf773268572fcc3b4822f247cca46027a9ec06369e5895480c7c5a5325c85898b166061c384b9cfff7ae50daa261a65772a48cc5ebe986c89747b6dee11f15b4488a0e24766f22020efef9475cface15ab77c712092052538aab3525ffb1d39fcda948ef48e9f193459608cea9ae96c7cfb7e606c34aa79421436874c0858b37c38890f05298f66273c97b28c2370728f9a27588212c34cb08d6ce2b486ca889fdf1f4a7b5cfa2c5eae3b834bdfdc6c38c9313fb4226a0c79c9019eb23400f1c8bb7e5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025f0990ed3bc8814af605c692fe30a50715f882815f77d4a68969c62a004aff04231bd4547369064a40d577e919db8031c9c04eea79ded375617ab27eb842719e8259b11fc37973e864f2226e41d30eea60bd827a5e56fe361e1dc2040efaddacf7ff26323719a3d7dc2dc355c62ee792c15dbe2e9e8f5b6512d762519f23b63038d7970090ca6b07ba1651deba44e52a6cd3e48f39cf2f758840f4096cdbfba8da3b7ece87f736402e9be66d325802fba944e3106770791ac3de1db5c40237af8c73f49f5b76c2b21cddd23041213c48a23e915f541ba112609f4134ae807817e887b05f8eb6969eac8febb1bb20e9525757c512f92624abfdf4d931e4f7188e44e57545aac19e8bffb22a1735374ab600413862bfa7bec520db3ae9cc75c56de40e6cda462803063730da83a054383ed66e2ec2c53dfd34d3eec058aacab73f90b6c2059c390695f0afd0569daeeafa897fbc974b6811f11f8ae5b8be5b15ae6d8d79a5afa92cfdf5f60567855663a01e1e1462e970b2f02030eaae5e6e655e8fe275abb1db72446f1fde7c43883302805e0b3067e30aec19079e66766698560d076eba66aaa4d799168289430e852e2a7abee4fd58f8ac865e6629a99dfb900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002807ad74a6ef2bd848b5433376c6c3276671c3314fc553e3b8517f83979ce2707047e7ff06bc04311c096c7378f01daad0b2ff2620ee4b0876a5641cded831c1461a13e5d6f780ba5b95235818a960c04463126d2bfa02e401a5d291c0533c7151ebd309c6719b327c8b254beb97225dae004413f36f9ae445f38a950e0a811393a98ded7e53e510cbb4f2bc7248326d9ab574626a24fefc23ffc489d09465a3aa1941da5a07bf10dbdb1c76b41682238412334ef111b69abfeea937eddc5b5cb1de36b74e0c664269c177421e843a7ee66d9ac6832b9353858b5beec535d44c989713038995279be922b24eae957dd4a4cb14204a6f2090e3dc91507ac6783cdd0aee4215c9ccf74ed7c5ab2bb7493513ca9067946360f201b95c6a13fad309a768adca3cf05400952cd4ba0eaefb4602b523cbe95f375b4cda04b8029073dfca89bf8bf6680c2696fe4fe4b2ff222915631c529145f4802c9abb3fc55cf7cd5ca01268121e2c674eb2cca105c8165648034fed4bb07236ae358f7b843201cdf9e1d8c3b86d10e019657b3840d0d9e55c4cc60bc361545b7f9bec55845c3bb1087a27c14887175d12a9558a4c432b79ca87933be7cc81e0a6b939571d024c870000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000299f3629aae2079643ca98b630c1caccfb9de84e4c862ebfd8e915ae871c671aa4aca1331b7bbc82a801b087ce56fd7bbca899d0f949d3d0e07b25e2115a9e250d8a904304fab21df980b0e89a09b7416608fabcdf9c8c75307ede8d737469c4d43f2b74a4b5d6611df5e83bd39654532fd3984413b210656fe61594701f43ee9cdeca8a87bd53553917192787875a0530a38a3bd8c299b01df510fe007a45b7c4f02cfe3a331909515fd88e072971d60765495a5724f02a26aa6b7241a2cf1468dc271f4921ba97ec2c508cfbe30050c7cb30cc96dcecc31eb088892603a347c42e65afd7eac19ba96a123f07ff82aafcb2953380664b3f424f878c661a291902e31245e11402cae3d59bfcbd31b5f55d9d1ae31e77a4b71a491762cbee03b29dd068227688607a2d17be6e00103faaafdda5f0fb2c87c1c3875783ae6d1952755e9a7cd90cdd274ec7a0135819133bbafa2fff65fbdee1ac126d96bb0d89983f1f460530e5dbf9cc2a18db0f90fc856dd48fcb3403e9231c2a706f94948f0c082694e04441e6d5fac89543355cbf59419d65793ab293eb004530154518df3718bb23eb3b0ead696373638b08d65a6dee9d4f6b934605578845f3f3d41f94f30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2d36ac56a38d165be18531fce1c6f7753a38d945ea71e481548c1999400f4271920d48643aacde1bdc17cc764b74fff07add7d1563b13f4caab32abe86e2e7905010127d3578fce3ace0f0ec19d74a62248aea1f4816e8c2c3b60204f789f0161d57b23ba171dc39123819f06c65eb8958ca27e36e69d35800a6bdf8446db3429f1ca237283b41e1c9c71f1a3e5b72768bc7a0bae72842bec81844215b0b06879e85e6c1b79187b2847d398d27ff5951b4385d38c40c19801a6f3f71b7f9e5dc5ac2859d877d8be2732cdb65c1920ab4100a52ee79107454352ccb9df6faf0d5353bd53c7ff49406f09367ec405fdd1d274778b56711296bcf48840f196f5bd30a005f95fe420328a436ba9d116f3b97352ae620cb16e42d4cec9f9a42e5d60feb634f3805aabb117f037ebcfb86a1002da42d0ef47731f7429f357bb14a1490d80f693a5c290cfebd894f0223398acce7e3a8267c55116b17dbb5f40a69ce0d709f9b4231e84eb5a5d79737ecfc9445a0b8fc5c2e44ea8ec463cdc9bd859a26da5c7bd06e9defccb1d8129842e8472ad3c12f062fd286b1cbd6081435cb123832b9043ea05c19fc9dc56a23ada4002a361adf40513c98a83d6ac81862b68ac0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000144d9176da78fdb327fddf8f80517ae0986c335783fbd1d82172e3f55b46b8699672c562b319a368168e451c05566bd79d3d1c8503f85a7cae22abe4573cc52a1935c67684603a3f543b627219ce6f6c18dcb9edeb02c978e1081a53d5bf14fe5e01d15f6d52813378338ffdf9294959a3e09ed6e1a9e0ecce24c11ad64ac045ccf9235e5d055049c781195d8b786b95d6cf05f00cff7b2633f6e66e1e4e815a910072452523454142c792c6e27b5202a966c3d2123c7c4efe01f4cada9a86858ae9e67db838aecd25b3185cebadbce9511fdc478248f431d3e1df3b7e7469ec174fc0725d6b1f4d4d2479928a29aa23aab76271d2d50872b26cec5704ed12dbf3585e61ec70a8eae2aed08098412866aee87c058f4921b3b40a326a5c61cfcf6b90e744da9a326090c032c4d67d642fde6078de2558238d2cc4f53d2bda3dae67170656633602888912cc5d0063e9c64e1a42ff85b5dc2dc9be7dcde1e29d001a23dac8ac7546e38b8cf34740d3ba1d1fee51f09bc2d4150964e3c445247216f747b29a933f6e5cf4d403902eb2e5d3ec7c5fef19255292bb3286704180471499b48baff7cb01523a57f2e632cc8d9c27f0edfac5efe24371bcb7c1952217b30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000253f44a4fdabafdb2c48ca11cea15eb1d6cdbf3b8667f55218ca99805a52c0e9ed6224b327a890d95beb60d122a1e29c3096fcdca35a372e38a0ac73ea62d5836a81bf52b75517d406e036aa3cf6f03bd5e04290d6d52a224bba33adf1a3570d129769a6943bde797ffa10d7c62e44cc9c920e5c1fc76b2537df48523694bc1e046b60425f9168b8f9aa8f2e97ef6d484a923966d51245ac727a91ba157fd7f21d3d429b0fba4488cd7d3ef2e210fdfb03a3cfcf964f7dcd3ff2b3f60b25f136088fcde39895911cd19e26b597bd6a72a3c159c3f551f1a8c5c58fcc8afe6b963d6da268d021982f01b0f94482b9351d6bd807d4fe0bd5a9576b15114fa52257ac4671ee9b3f77e8186a87494e9dfefc5ce4cda9963adf26f8a9bc1ea09b1e53fb8717442a040dab340ad462ffd124ccc42c76963b8e5c766b667632efa9c010a53e81e0ca7902e92905f2a5ba21efc8e7a627633c01012bae8f17734a0bb6beff2fd227e668d370a2e11597c167d2344c9277fe8d2c21822e3198c8b3644d8d41800639c80629d7e062ec115933be51544ba435af94b59f4a308fea133a99258a3c89d0b208438e76b46af0fc741850dfbf13a0b35e4ecbdb6fafdabfafc24c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ce13025fbb85d427eb30496e677bbbde73416c132cd20b2e7e2e28de61c78c264fb511583e09f13e4507c1b5d77ac52bdadab7a73984826e583e20f9e025c84eb61edc86485537b0b79aa16dc97dc229f01b8bba3f7008fb4caccc305b00010bb426425128d109e40cdae5cd231ff518c741cd2ec470d8b27df999322c00af23432d5daa95e1258d12270b797e8b25e9c1bbff75e9c395708c6d1a8ef1604c17926c162b6113e61a47ce5c912c1e373fa0f6a70abe4dca0d3c8efd67f7a88cf51f83bf06a37f9c0eedff28c3eeb42cd087042c02dec9684b98434c6ae878d0571be3c1533d74e4ed2e758d9577c1ad0b3d4d847a1ece914d2106272c74454dad4c321eae60f0d02c3b73c5ec18944e0265081dc6ea0a02d1f863e610980f59371118cff39cc68c4a8b201ead7bca61e60bdde0f51c7539d42417acc92a68ffe99164d3ed8643d3ef8d1c5305517346806c5c241e105a10ee686efa887507e06ca5aae63ecbc064f3606a4f904024a94eb57e85cb0346364d7e11d7aafd3b8fb57b8bc990e35d2f322d44d76de397dc19bd8882229bf930f270050f2bd86290feb257b4da14c1f82c4b7bd8ad2e1ae9fe26cbd17c968ef4604c62c4ea21860100000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000996694ae939e756d8a47d88e8f6b7cbeb1c84acef934c703b5919db8987c9adf486e4c1b2334ec4fdf9535af4a6f346f55ad13bf26d3397080f5a8427492f0881a1f1bc7e8308341157910a98f983ec44c92dd1baed4cc5fcd9381c4828cea33e2d3c083287e5b1170faa361daf8af1f6059753099a39512868ab1b8560c0e3eb259780bc46722bc3b9c7d16a35eb0f23223383135ac2ff65d15ba2fe8847081248f83ed01039dbbc3ac3aac3aea713119ccdf290d531939562c368e09ac954f2c01b2119b1a2e4ddecb18d0937af09abe4e5d491097d0f8faf28285c57ed96c5b6951a07ae2214fcdfe46757b77a51783a528b99be7ad5c32e9d9adb6fa9c920eee3496d93e8680eb46ad154266f873a7650a8c78b3d5a3a1a04d9f0b3194419191fcac9628334e88c88ed8d9991797a5f74b02c0b5f511bd23b4a95ecf41a33420fd021860232155a90a169648f8db25d8ca73ff1ab2f2d85e64eda917064bd8eb297a2ac872a97665c5aea739b231fda12a4bb0a1c697ba39e3b516dde626b4caec2a4bc57ec343e24afcf44fd8a1e148718e45a0ef7173c46dd76ce26936599ce7467f24846f393e876d985e00a10b79726f4c474228c707388ef265d7410000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae8885ecdc3c746e4585a1a5eb9439b3747e9d871c728a313df2677fe10aa5298178d291211981cf51f7cae7f1ef7a531e49b28d1af1ff6ff2426b515df57d392ed1016a2b4454c28048aa976f22d2f77c76990aecd28984f9d665d347313f731cabbb574c56682a2a6da7e3b675df8dfa32ccf948b22e79c2b7e8c56a2c2047d3f51cbfd59eda5090884cbdb0d30cdbe723ce5da0d3160009c1e8b185d158fd5cfeee657b566685a0f6ba9c03b094ff90ee10d8804c3357f21f6ab0647a6795e2b1dc642d9860f5fce4ce7756684fcb245a8dd54320f4fe8a07c8a5a2fcef639d60b4a9f2711aea7e0ac8c0ed8ff2f4f00dccfbcb4551e6338d48d547d726877617346071eeb0b4d16b9be3a0889e9dde41112143e08c2e0dc2783afab754ca1543d39725ae2e1a9a5aef1171930368c14b698a9923c8481c1691c039a646f6e06f6f2dea7dc4d3fb04b8b8e7bbcbba38307b7e0366d066e21d994e3d493ccac35041a5cb9bcb68dcd52ad6acdf36bedaab911acf1de421175767377ca9cd1dd489302d4704f93dce72a62ca5216457daf60115b507d1d83a0a6a32be7e7f55e422a6624d9d5b289321d10b5ff48fabca3c87ebd980555176652b2720b6839f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a757af1938d2f9307f4fdf0fe2954caf9c57481e848e0bf59777c7298e9f6a34f133d9fb45627ca94bfbc667174caf28f3e357df392e260528a5a27207e288d076c408f15f1706d09e70b401d505be1767738a2549642219e5e230413508c8d71ccbe5495817987238f040cbfec84df3d286fed6b4cdf2c57e34452840d4301cbb8398361b30c028c9f0b111dd4dcc092ef9a9da892aa8e8164821eea98d6d6afc8b94020f80ea75f878cfd3e86a76a689b4127af3e724eb40813ccfad6644b5fbd10f14079d6a6e91ae148cb003c0ffb9e52bdfed16489b6e41c988218888341298239dfa15905593e692d2ea3e328236047e0b4b209e3faabbfc930cfc13bf964e90a55980e2bb43a6e43b95512598df0968c17b3cff3364e650a65dbb43dfce8a74990df2d256e3417c8f7b04fb0e406ccf3177385cb92bad72ce95be17fd03ea10b5045cce35f34bb0d8f01be4bd3d8dd18fd151ef337f55e6c47bf9715601b5b24409e4ea13128a1e7eb1437ddb999dbbe695385adb6fbe67cd49f64516c91f8df89c84dfdf9dd3b220baa63bb2f7365ff5debadd32e154dae58a0fdde493618932e2b04a155a73e07296f2484539ec851d1220513b1b0c456d684430300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002906d33f8f3c5858f70ab200ab78477cb43e7e1716fb59b2aa0775e3be03397b95738f886c8206cc44747f2ce27d5c5edddbc360198386bc096e51c169ac549221cbf12f4e81cf7cdbe35c61836a32def48860a2b7eed1abecea7293a14e6fb8c30000865b04f3016d6f5c57ad465c7ac93da40d5e38214a1a2f0c8f20fc710b9a3df84a317dcd690a3ed7b0e48774c434a05fb0c532013f864d40ac84515a913b4729352b480884e001aa8d21e7a7d91e82e578d3efbcf2bd81baf1ab3ada2537b34fa3ff86aa6bedced10b6e055eadac74598751b9717c6f57c8f2ae1722cfd2e845be9b0ff66fab4ed9fdd16d7275411f01d0ce66675298f096beea0307a6f77901553d840918b85d7f7616ef4192dce67627fd6ad8e8d5b9aada5bfb127074f3476add3fd62eccce8e04947c493c8e8f5dd4923be99d96fc7dc8d223598a52399027574bd77d8822d5a84014e107fdc53a4808cb2b3da09fbdaf4a169a13b60a5a059a54d74c3766c831f0c0a9bc816c33af5910373e28a6ee8af5ce5fb5427bc8e284e4fa97b3b84bc2ecc16f2a87e2f30b680e036887ce13c03c40acf0c060cd95024b4b1f71e3c6e200a55540c7a1590ed6e4ef32cf3bf396fa114a9c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f21c7277d0e7f57291396a63cdd2ce3c51145a84ed1eebb28c42690b29f43659dd08624ebbb868dd9ff8c52fe81dd56f6e69ac050aa65c12d8fa3b1e60b167d93f9ebb6cdbc4643fa8388136debf9c8f702ff0ce7b3b06240456e3d5250af2e5a343163861b318d035ee23dade6f6c28e88eeb8a8a7dd7c0c0e149be8a523d092b81f8abf5c6278a4d0dbb80b6e869981cd50172e047d27d5feda0fc4b532b47161ad5b4a101d88fb4a33223f4064a3a6a3027ed591904e06d1b12158a8c86a6fa349df05626280745e9083e7ef1ec4f85dec9f403d86d58a819a04715b54253def694ab3cfb3dd32bd87bd31316a0a873e9fdfca2dde227ab255f76e023636d544894cbd3819a264e308e82b65989dac7b6796101c624646793a119a26561cc02ee25f494c75888dec20fcb95b3e3f2804a3a5dd022c69c369c2da1d29be9f0b5021484fc002d527b7df846830fafecc8dadcf21e9b771f360dd9724ca58b270802e274f361c64f70c350028c777ef912db4fa79f8169e1aad6f9c84de9114a1dd68c443d34e32ee3050e35d054fd13045a55a754e9290b164c2c8b9de62cdd48aec6a9edb9fa7b267653675c6913ac0171d40149b32d483bceb5d0945284100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002590fbd625ca8fdceb9bd59c414ca57564649530ca55f42b6500e0e5c5fbfafa915f0595aebb0ade86742cc54cae31ab55533d55f5ee6189c15c9dad2b85e91b8d9913714a61b9642b8ab96f601546c7dd469e1471e3074c2f4f308f79cd98ac128e2f954de8c41e89c8c5f34d7c51e913d36399b471afef2ccd8e5140c807ef6e561bc92ff559cc893580aa6b6620889799d1bd74f940d18a90561be79f4d488a1ad05f36d9d32f889a4d238919da7d2dd37f54784f8b1ae00fb94238e15b090481225014b55a64a16fe558d03f2e136d9ab25a565733edfe554e967d597d27c03420d2b7ce3ba01ecaa995c6313e984e9ab05fc8fd59e18b81ce4c21efd9e0916eccff7e8d2cc6a751fd583182dd34915640c672d6933a9496d4afaf83466d39420c3a821fc495d0b8043f6060ecda5b57555bb92821f5a3d9200ee63ee7d2e6fade918f2d3b2dc50decdba450ad65210f54ee8c8d606cdd56d34c0030a2a93a21bf28d4f0344c1031acefc708f5d1095361fab325270b6b991e874ed9ead58ca3540cf4d7a399d0912258d4f6cf7d1ff970c1540c58abe7252e49482561b53e03792a62ee2b571cf8847f043ed82db0c864a929caf37442543c5ab58170b700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f20c9336ed842e4caec3fea02ea76bb89e85f263cd28792102df9a48f92812317279db935cb328ea21679d5881762f2334fc49ba5f0941767747983b05adf0ee1b661d5a036fd875d9bfd62615d4eae558230922912a6f878c816356ac7a54e79dfc7e9351bf3920c71b9b7be2baf86d3f93aa4acb1aefb071f461cea1929ca2af156c493193510886f1ff15242d1fcb931c7ca539bdcd9971be23bda09dd66f9ccb432cc555264315d4ad7572e7954f4a272478b88f190fff45ebb29afd33d54f6dc9ce9e5b8313359e01688ed7d22b51039defe79e031ebca2ff37811f0fbf765a91a36f4d7e2a3e82cc14667c9b0404e8daaee13c0fe02b47c6555e5927b29b4f716b2d25c9eeca8c297529feda262c24740e0b99aae47ede66d3228c8829de5b1f4385f72ed9c8586ba565899594eb2b22773b1ad59f4f7cec115100ec1b50507bac980d33aad04b4c98168937cfa4d64b69492907c9ce132f66091c15e0943edb13fb34e925123adb92c823485cb6d7c2cb3a19e0471183364e10c508f08529004890e41570167acbeb8342fa272972d7d344a98b541d328c0b2f4dda8dd8cea86e9451d992bd175c4d5fb6befbb7d65576a3d5930c0533322c4c0a0ec0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000836a792108e937497515f099f24224323dd8e8db3ef4ce9ba9ea15620ab729525cee79f057756bac62cb97e654c559f11660f8d91c49d77fd7bc6032a2e4e954320d4b065091fbe73d788e73918cbdc735d33cc4b13cb3628c5b871c9bceb8432621290f058c71ed1a5b715946ad4ff8f4479930a44dea6a9e49e9080c5faf720909841d2695fda03e4e5cc5487a497bdd59f241d136d121951b33219fb99cbc1cfdd48810b090f6cd84b05aa273ca635cb3ae0096c18c4009ca440002c9182f9c379f09e08b63cb3d0b80c9e5c48d6f0fa405aad3cafd3370f75499970d19e1001df465622911ee22ee3ecc96b94b83599c83386b2638e26a5a3c82814118a995d499acc7aa850eaab31533dbc3db50a787d5cb968a154e0833db9cb66adde430bc2c0ccf1e941e89f3a8bcaf1563f10e6854dea0ae6642b25824024ee74a71a203d72707fd6706bc92788956572114bb853eac338d464e82f69315caaf76f6e81353ae4eee3ffd1982671f80d15b4b88b71064d98f4a06ec130c84d7f87da0700150b310be790e5ca871aa420f541fa329a0e8d6c9d37e506c6f539fa10d2270c663e1e121bae897c266f8988b605f13f9227cc7a9791e2f5e8865f49b4935000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d397d3e1b6dbe11b627e9e8ae6f804936e3f7d84ce835da00346b021a42308817f7a576d14767eede802bed8294304093dfbb1f971a0f9a3de104f8d7f6b77d1ce7ee0dd2532d9728d2ecd5a113c4cfd5e80685f35d64d99e6f7e10f4a94c0bedb537c2d20a9dea9ddccc3e0af3d9a00098824ad3ea5c04c4b462d0c7c2284fcfa5961e5a3842a1cfc63c28fdead2fed4abe55cf4d9da8810a6fe4e26536afd5d31d3ca00fb0327027193f98530a4252059e918ea4042da915e7a5d19e664c668887bdca103ac8857a814583b090cb98b2a7d5c22cbc65954a5e32f9af6b990de785434fd7a612a0ce4b3d77c1daa6a92827323b6487c7bd6e1baa02c9af2821f2b1edb9fb93bc4caf8f6b94be0dde6f511e6398c913dd3477a18d60a87e4cdc6bec00dd1c42a72791b95a46c0f4fc059995286c535a401fa60466e08ee80025d33ef6df6b7f31a61fbee2b23cd04a4aaa21ed3c9a24eaf0dafc1a0e0807d918bcfcb63055ca9e7949651585211eadc704ec7e3566247b146443d4d950ffe275bd9001bd6306a2ed4ec8dfd8da22a4a7e04a2a1a8501e6f3a30aeab2d3344dd574474d6f0d4808c9274656c6c7ec4efbcaf3a462fc59738bd921d5ff2116f90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af2c6e59bc9e58a46b6b80019b67699d64c26f8a7120566ed5bad75223b8995b5e42fa409d57f3abcb914c6c28902d0f9f58b2c28bc4fa50e2fc64ce2abac76f47095de5075d82e2651dba48eccbef92b0bde4229a8d29953d92c8640f4464f6cf722b7862eecdde49baf8810b73266802b232fe7f51bfd30c3c7c296eefec1844dec55f714fda558506943396692f520515ca1e2801dedab4e39f5148c79dc0be8ada074811a8e9eff2822c220b2eeaabff36df46b1958dff70d82266aaf61985738d66efef51ee9351b1fd9828d0ba55eab238944b81fec937d30e712afa70d4c1c886117841bb678123d6f81bb49c6844cd0520ecb8a08b375776ab4dfe6074147f4385316b39904341061c0873a473c934d433ff72c88317b2d0693b7f07f5d40f3de039503738dab605bcbc2e2f73d1aa58d5d9e02dd963d9a896a4d6645b02cf84b3ae05d936f7343acac0511042d2fef95e25f534c6ac1d51b51648ad4f52be4873e7d6464507c8e80f7773d2bd2d5f64f884ef2adfbf29c288911a89ec377a31044f747accaa104d99d0fff63dfc3913d4a27903c97fe265d71e9a506d0149a872df325e1c334580980f6a744016885fbca2f83b3cc910111ec15ac300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f4a6595e8aa47f3aee7948c11cb5b7190175a1b7dcc68f42ba65034326cc71eaa8be04e31265b4d60da68620989ec984a7f8313def0e63565c37f998fbe9d451dacb3945ea0e43ff76573606124b6d283cdb1cbd0cd172c564a27952f6fcae113eab259e26c5b1a7f0230d4c48b357822adaa6578c7797a8d0a817c3b17c5e6421eb219d107767224555c46bb018451e7cadaafd50ccff5d3e61ad9ec10d6b96589bca44614153bf038a3360059efa9f017b771745839906e25c399f3a3a4c2656ad01ba1867b282b859429bd0fa3c3175e3550b02b124de0493157d02ce86d655a4da8890a23290c0b450cf5a745ea747ca4f95ab8931f7c697bc839008b3867d8337763cd466b52f29e6aa9a651e24ef575655da2799a7e78132d4a3202a7f6ce8cf59960da8cf8af68f058402a93d46e20d3b132dc7d3c88d11892fbc5aea85338b521332168ed3c81298621e03f2e02f3883ccd594c2fec07d58c7a79046ddacbb97848615966fc7e98f4906afdc5ca3a9b01d283f3e9cfd321b36906ed0f40ea3fa19d8b986896275a6bf3374078738941f00e9a8646c82d4ea634f50cafa8cbde4257f3cc474a4220fd45e141d1e7642a8c721b7606e095db063c4a2300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b6c176d5232a0bd53a841c483d00ae467037c32684936f6689b616a1ad8b6b73b46f059f12d3ca14e93289d35dd76e8520732619b1d810f3145d3f4658d0ba089714de4d8e172e588cd8f1b34b241a0dd544af77f18611b2c2217aad3aabd600c03d540d8c7c025f52df0aa3641d507d54fe30c9b5334adc005792e49a301b72e2ac7632b24c28db44ac3539d49c83cca7168ccd15c315f7531608fe5917e3861e9a206f8039346b06fe0c4532e253c2c623c64b4184825b13c7a1595a4e194f7ab55ea69374319a22146a4ce61bb3fed27355a52792cbbb0e6fe48dc8b42b3325cd02549872061e173400df0378216ed556ed42116352418332cbc797b6d346d3c8378cb79dc2d3c006de90fd5c360cc4cb50c7cf1e4d2082634c3a884b123aa34904f702bcbd53baa72644bfccde2494847003c74a8ab04e0a3f5cd4a4307b3d6333e515c4941abe287bce4de702ca82290a1107a07fb2caad3cf49b189c93cdeff7c084f089ac6cdd1a69e86f6ae6fc17d5a2c3b31c5eb1fd528517d8c3cfccdc1d43bc73e5d38f7153aeae39142baf443c2c65b9b7800c60eeed3fce1c7732a63eeed6adb19e89e1b63561ad4b8d58286a2e7ad32584b93231bed4896a5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011fa89b71dd308c60e10a61dc726347d9fea18c7fe285ea5a7df5cd589d7cb1215eeefa21b1e470feb23be620acbecd039dc81160e14c535bd9f9275d206e7c1c503f4ca1b599b9b8f9d540fdbad724404bb7cf902cfb8dcb9839fc607d29b90e4bcd2878f184c2f796a4e380c3899f922a05154b0aa254ddfd8cf33b20927eaad60de0fe7e538dc06559769a48af700432e95f5317082669db2bcef1db688f6ee6911896b48d8b3298eaa0672302e3d1cfcea50672eef475016adabfa1f0c6e6338f5a097e23726250ed3e5c573a8ceabad9bff60cad26a5ecb76de58f03f8172cb5c0db0cac2e1a5016206f71926ae5e82445f7f2206b5fc8b5f6eae993bb28d1490d85b04bbc21e3ac4590c5f1170775fd510080ffb9f434034f824e6f762d4e9a736f45acd9b87c477d46e690943102fa89291ae86423044aa2a30dd2256364e7bb2bcdcf1cf9ebba39b2bd8d5590cb7564db9817b17a6e9830161ae014e421fb98397260717c87fa6fcb352d13d6ee4f870441ba372511c7764ccdc031b1f6158c7eeeca10f99a5719da4890c7a51ab3e150e7a8ca17b598e54d78b21808c4663c1dd8349edf7fb619c17158a9dc8ad7c2a0dce3aea6d47760c35542845000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e175f4ca40bee7675c6269d352029eb6696df5593b6866d385866535596dab8fe0cf399a64c0367f908570ad09e68aa2403567c2187f254e009b81a34240f05a2faeac8397a41c31087e7edf76525197fa37766eb0aed93b65a26a67502dc136b6006c9dfcea830c577052a9476580814f310d9d3ce9e99c40df189b8224a0a8946112a9843be9152a5d33ea5bf1bf808cea0cc6fc4549a019639d1a063c9087390995b7f00df1f0cf62e721ac2316929c803bdd599b184bc46729944b85d42f491169b567a7c20fa68c0a7c45d4719cb1d02cf8ebe783206eec9dde18c99cd34d65c64cebd4a6d52a73f9011f25429ec2d4ae1139d1bfa46dd29f5b3d88a09c088522dc3dc5b3657f860c3e01fbd641dde0f3d3a1ebfa2688fa397eb2c772f50f54c85add0cec644dc5ae4a8540bf7a33fd1b9cfd98fa91361f9b46f11e1f5438c14b93dd1b98dfcd3ab4efe22475149fbb8ec65697dca830c9a997a7093a328bc9ad216554abaecea420695d2dc7be2ce1b245931572641f6ea128a2e1f18f0bf90a5ed2cb863b4a70e474ebc520a7fb0c63460eccaa1bb06b4860423b1d5d49342247e2f42f0aa407f3e8a73123730538c3a98a567aaacde71312907dee0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000933038696ee70e752ec52ee51ee4c45bbce91e156c1a9eabdf76b6f5c38d9f05c2d1a19053a5cbcfa238384efab20868fc9a488fcef2b49a87adbf05539412fbe759013966597246bd3ebc9b6e73170b71e396960bbf8a2350992289649b4de2b1bf9294e507f664bb433f62cf82e287dcd46252bd09b3e171a151eb87fe2be95d13780615bd189bde222fa180745dee906b8dfdfeb03c599d6d959e41ad10c1f14c55f2cf768598ac4782a9e3051e91aac19ced0c3b89f838c6634caf07015b3565d5d5d152b671aa59f5d76b2835ea8e68618e3221027af526f4cdd019e1d22db30ab8692692046744e931c8572ddbf668d796719f5f139bc80b5dc58d08738d4dd011f80dbfeb166da61017b6a6d6c287154b0916f0fd866e7f02a8b9769cc1b3cb1d230347acbbea68a5a4dc53a300692983209934d7f395271c4293c8755f704047ec2eeb4dbe61719e412c4c4d9ff9c5a7db96b28e6704465d9650f0d2467f7ecd936ff85e5725715006a2b980b580672184bda22d332c020b4635be8a4e9ff8583094cbc4f7565c0782a777cd7c1713dbf8c65db3b22911adbf248740495f6b56cd7b1078f0d92992da8939deb498ff59e027f5634f43e1e184fcdf61000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016f2138864c864dce56ff54f657d143593d6c5c60998b2b1a3d94ed8b00e8ad883cdfd1a515a52ec8d002ab48655010ec96827a35b15ccae2c5e8fa246aaa186c152dd4cf9f0cbb4c3c53912b12afc005e6468f82783ac5b4a83bd9eb0e96e64d436633869bb6aea0b895de2d026ab9e1131be93c23dc74f85be93f4c9086b687f5b0c78ea62b03a52fe3227fb0a26289d4499287afac58e17d6747347a9db64083c8f39804827f96e9417a41da6236ff93b144d69e25a12156ffd5aae42f2f84b4b62ef3cca1b2198c84d401553bbb4656ecfe7ce1d998a5549fe75dadad5e196f9009d6d9d8fedbf9ddbe67892572c4073a04e14c505261613343f89c6e05db417124cf1eccf1c1979fc5862467e5a9fb6f925d66b5c3fbb5193ac102b59e01af37bf6e95137a3280afd37cedc7f9b1c2c7a3f945681520c625143e78317ab490889d5763107e59fbff04c58538186c0a5e154ac93aa325a7403a56171b59332a2bdbf7976c53a08687b579f3ed4cea6c935a7d62b25db455091e217cbd9f0e17848b38b3d86bf21f646561ccd4caad85b085457c098e30e18587076c807139490a75fb409b338d61f320f45eaf7002b17e124afd644c41c3f5b8b570d338e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000831f3a151142c1232ea45446a7b88f085f9ed5a03f484bf5eadf0042a816f6f784a537eeeade1e999edfa1e3bd17af196531ef234567c855c40089a255ffb8658c42622dfe85ce4b61a2af59ff747cd06edd64db8ebd58b3075bda91df799b55aa3ab4f7bf14aa98b021e0e7d28fa0345eb11d5e6e706bfbb6e9d1cee798a0bd191246d537c7c1492986ec1ba680e53129388ac0e683291e1ac8ab5219550294e595d8155b9e44ed4ab28a3fb94ea49f51bb7fd6473544a696ab2394a7982414af33c114e2bd233ed049adc519da221b52a1948733315fea77958ee3eb3655d505f39de50b2f167a55ae4b3dfaa561d50d21ef0c4858d14efb61a525593fcd9d1907034402346885c2cf8952e81b8bd53751687491e05a6b49ca3c55c861b6727ff3a5c69a9c0dddca1425bdf73eb40e4a026b44d63f3a2591cb1e12921ab5218bda588d79db6ec963e532721de64d29e9bfe66e79d876a71b107ad373f6dafc5d85a48c46a39a4580dac990ccf975285b2f21c71e524cd18f82bd565b604691d5987570020a7085a4a8b438f64ab6a418ec76578d9dcec1505a607c03a850bf1685ea06a343bf3f1fe7e68445a3184863d6482a8313ae4b1f46b4fa4e269f9400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f8612a4394fd0b90a6a9ff91bd65881865f8b446df58b119a900dcd9d466b6f96476e132cc83b8fc6c4921d876dd01e18bff6b74b671a5ea13b1abaa1e3fb2a27b3f7f0f6a795268cab560ffd3c8ce916c4ed1780ad8b583dcea40775e32b61d1e16fe8f8c3c5860e716e0b78d87d26b0cf560ee0eb6f69952f20a23e2463fa4721a8215e0c483616382e633697dc5af127cec27e8083cddb3b6ac8614c20ce4b90a4ee9632efe3c25fa494afa3646f0cc736cc13489012adb4b02152b9d5b7d39487f0befae3ca1373677895b6ceaf76663d6aeece3b8e9b0b73f7ea300b404b0234ec493b93f8f6223e3691186835256db7b0ab7608e4d957d79224e2a075edc7c889d277018d2f64ef38b124e4280563ca6e3edd7bd1981a0ea968a2388640edbc8a11407d3e746499fa4354c5881162f692679b43b066510f1636ce5d4ff91b99419512431ebf65200036ed398f5c387a05046a4d95b9d9cdfe99329aa13357986d7b78e04bbcfc496e35a13bc4255ee2342c348887f0941302cd2e605f5dab0d721bd168ef5a39d9b99d390370c9f18700aae6497ac873974d7a682297807a44f7e676615875a81bf21b4c146eed9c38fcdafdfe5200041fb3f17ceb6900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009843b6fa8f22fa8e9bdcc4d40b8f6fb1c7aa1767c21b4e12225b404edfe692cf6324daecd463940c6d184806f51b48e2ea32a99fc4df192817573f241cd80eb5980a868d05ff62fd2614984624f4580ad21020c0166c1662d6fb0ff7157e062df7fe9208ddc344d4c935ddb1aab251d5aabc24ca7e60f74427116fd611bf4fb069a2d37b6710bdc5425425ac917dc4d1f3d82b25793b5a80f802aa6b40e9433f4512a163ddec5bf42ea7db71c9058e4eaad4db797e397cd65bb2ebd878dd963277794e8d364a28a121a714a935ef063eb38b094d5e3edbb41dfa358b117d613699c100736571d115836c025572bfb5a58cf66112808bb2e53df6e1eb3eabd2d7f380f7768b52e7fff7d7c4dac4a8f956485c7cf648278799d59729eee6df686f360cf9650f52f8f942457ffcd6f0249e89da5da6f521e2c233fa203c20e3a813da9571f00294d461d34145e05881e87a529adaa181e1c9495cb2781ce9dbf422497a48db92fe5025a5b21441bba943c0e3d935d4a09247f7a279e962f3a8956e3df6503a2226501f995e1a7baea3dc05fe2efb384cd2d8afcc13dd4167fc54287fe15cdea99a0a93456a2f5a581835f17ff9c22573c17de12c5c3cd7ff99e02e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000196b571348ba5f6d4ccf080f919e562b0bbdf6c01d162ebc4df93fd8b17ec3e070627dcddb2fbc0fdea6e087fdac03c763cf33dc06eb5439b5a1895283b9657b5bef728993b598d38ab198b7f38749230213489a52a5d1f772e96e8200667be9ccfa70627ce25d4863cbfb1a65134b59daa3d4ed397deccff04eca32bffb372eb2a83d8f1cf3ba6345129cf9af38e538d28ac6176b5d62b4d3a57cf01330fd41d2dc2e8c3964d8f30c5012194cd5dcf412ef73e12268eee08837e6b5015a407b93dade79d85731f583be2a764ba6b8156b7a98869bece7c6d845b40a5e505d992a43cfe3572e99a58e78c82988a8d1f97fbec72ec49600054037b75b00e0c53a8d43d276f4e1544d3cc68df2897c4a6924ad9d04f38aba4631da82a3b88b60ec5c514a9a04e10d4708240859ae2094828fca19ae630317d9b73f118b9df9b58d547a958f212e472a5c682fc2b4833900f9208cba8b2e715605e77649a57c1449d5035ecaa3ebcfcdb8af6dd3311bde436ba6a2f46184754aebadd12097da12226ed962d7fdcc98e244c14b64075e3becdf4e60563c4a02642ea65d3ccde4b2f222549771ab7266bf4ff9345f0432e5575f08c93088919acdc67eb7028528d8c700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000976bbd1455a9e54973d06b5e34dbbe3069408de5c28d277c18d0b257404628ee1693502199acb21f685ea267f5b17b592f1d598419cb0ec18e02a708f625a65f77676a73170cb8dc15d3be2e982c83cca286096a036f3ec8b0993c38136b061c8b10d2acb3b6f8cb608b472da1ca551eeab474854d38b88767d6e0e54a648b1948c5a1c4f8646cdc536b24a3a3e91affb3ff88f78a490a6f7d11f90d23ecb0c5cfcbdda095fd9d23ab61c75734e6529632f0feb4dbe9ca67c34c1d43803ae47da1ef9da2608e4cfc1cbcf549be12112cfdec4f89b14d4469dfded99bfc3a54b9821faed6362e14ae35639734fab85718c39cdd3ee07b3279c8a1f4215a91ddfd3dc4840ef8401f850ab3d1f2d811ae5655a3910df28831c915fb3c7fa293215d7560208df5aa29489eb760943661686b0f690b632345b00cba79995a0f1e127de63254e116a65a1b22b7675771f1d86ac11736043435b1bb21d50e08f1e44aaf817e6b05c4d1f74a8e7360b334dae252cac00dba45cc2165cd323535bc4a4f47566c46d1a8f12a0ff917a631570117c66c58f19bb9759164b7204b8a26d6ef6d65191a2867109badf7dc0a62b4f0b2576ae5726dc373e847d53d10d53e6efa2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005958b1ac61d5e035cb18185ac7cccb4fb70a4864fead3f8b49c6bf1c1dd6953f825362ae1db69408dd2705a8f7a576dc93b553ca2ac1a38db6a8ada1b9dd7ef313b58cf041d0af8131b69a1acbfa0a8e3504e0c56c754b187b86aa18755334fc0a2d168ca37bd486e9a05afb9502f38ab885043ac33d7663674d61a88d42b3934d440f49ce3f36b9ffa6863c1ded320cb0cfde8e536091e6f5bc0faa7b8a41c5e0832fd67c2969b7c078353960b7fc47289b49599a56f679472a95a819205c5fcbf0cce86c979c5e5653fe00593cd01c9424683cc7ebbd6a70088419abd038c60efa6a4ffcc1126e99f2bff23adcbcd14e6ffca86893f4db20845da52fe9fff473f06a1ec5a6a217cff3956d245e40a8bba7be254c61797310167a961299b345134df396ed18b93243d7a47bfe358bbd20b2f77f74f5dd751d1984ad306120b5821c96dafe5272dc46756ed8486d1edf0f932c4fceca698c5af0b7b894e66eb1aa870a284f0fb723a1eee36f466d4a84e5565c8a46977e3447710e1db877eaf8ce5b223f4024df4435b0b890c7cb022e11a9ee285689b861a6e1d294544c0319dae3c9d8a795b88149649a776a0df48438b745cced62d84801cb47f4e70463600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008bdc22c52eb24aba95cf61d1e7889a56804088c0a0398dc759579b782b1c098678ec5b2d9e25a866e37b2d61fd99ab506714cbb3f9996ea24fcea45b5fd6e27b40c33f21832c28cdf960160c8d57e5d385deede62a7171b0296f4b03275bc70db16f64a05ba1307c25c7176052e2a954e7c43fe4e4cb1e5ce8a9ad1f5cbaa177596a992f887b19932e8bc7bf856342adf4ef98aefed42692b68bfb5553f46929b35115e85facb54c31cd57f7e9f2c5a82da252438f02d25ca6bd675a5a4afb65c2248abd5019a02bdfd6709710884213752aa31e210c2fd090010f8c4864a7642e504b0ef2bda12eae89157f9d33038918ccee8857e9e4f1528c8bfffe3e07925519ecc2b933d6d4d84f143add206b5446497100901b64b0471329c580fe289da280535e1e160486a9501e2d316063d6c76d1a28e5d46db000652e4d5df202d43d999ebac3458ffc3a8220a6d4c47bd645dd223b82d276b7e9086ab872745fa7cdc7697bd10ec8811b8a2c904f54d429d4f3abba054f8cada8865ba9bc5ac276051cf1d72b5e3d9eb1d2065558e094ecad70e840aa0359a56879c04da513898df869a7852fee56145de2b0db5afcdd3ec9c4fb5610099edc6ab33c167353876e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026e86a63f89fb0984142a45ab5d8d62ed38066e6e5c2b0cefa6e8bdc669fdd4d5eece0241606d358261184d60f0fdab0ec126cdad07da1d8a427c7617b5f84b61a95214351d2e66efdf42add178bd302615cb35f5479f58b0a10766634a4fb77ef2bdf38102b663ad095f68f54e761e86dc3883107a652ea0cbc1fc7ecb2758cd357fcce73eb197e5d50a71b7b6d2f8dda98a2813b147c799ba78627ab3ef56db71c4a3eca3e0ee495b9759850b104ec9163ed5352d7908344e5fd2b5b430f363dfe0e0392f589d0777e224b8c7d4f225accd85940c32451bcf53b6c1bd53c1001c79080937997e7dfe88d954d5611aee73511e4a9a883ca3cea07ec01bb3d955aaa8867fe24f71ef0a09abd0ca5deb763995b760f30f736fbbb722f509ff49e17292fcbae791d213dfb00865bde9ef3f076030eac21ed600ddceb2725946e34a97042e181ec3fe223540d6ee47bd6221658cee239d313048d5d62ee2fe4d9003b55bef0e7f75ed343739f917e195dd8499d354f01ba587e412ca37b10d947e3fb5befa023351cfdb2310a4cf2f7b8033f8f4041cd3b7166888670443538b4be829df7d9b9e50ec82256687a9ccdc256ecb7bd96ec447b8f303ee888df2b95590000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142b4d5ea930f59bf203a835448df6b769935d390d79c11ea0602c7956a907d5a41388ae926a304008bb3250b6aa19c09cc3b8cd949b90a0ef241780c303ddc30cb2308063f325f1301e3ee3322a48b552a9455118d3ef5bf097e9f2eca6d044a7872b8b72d48f4ffca927b19853b80c2f5d0316060e8cef7d41d2210b6d00e92d001a5f66042fe6e171d2697506c857946d5df2a40e03a963522edca9c36a73040bad4598e8e245d7b4af4034027fa4fcbabcb07536f286bab891a01fe1831c2095d77bc1f6557e7477e3fb634c4a3837c2ba6e688d2978f3f9d18f895e245f592db92b7af3d8b14184e52b88bc1f11d43e3ea1a184f909508d3e58ba3b86ffb8a9e748dcc1aec770d48c4fc95c3b28dbcc6ebc323c0ef516dcfdf5730f08dd02b1d03cfbb05691b0f55e60c3038147a9e6e23031ada4ad00b15fef9253bd9925e4a0f0624d2b4e8c8e48604d93ee56be3fa3f9a1e500e494fc1c64dd28e93e4c6457393683ea608240b6303d2a8f8b7eb515ffeec51188cd1bff5a74b449299d6b9ece40bef308c5a1950e4c589b3a2fef2c8ddd72487f4436cc1122fd64e9327e51944eb55571d798a5464e59817fa92648a34d91011d2608c1b004f6832d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e4c223b56019b36bb19f2c364b87252357452eaf0a8bc89f6c64e3fa4c81f1dd977f1108ca65d633d66d1250ea69fcd55cfc8afc0b7cd66a12f73f2f74b7d4e457e080c1b4a0437b46f57de62557b68a4185f2bdfc2a590a5bb8f252fc4e7526f84958b0ab2d6042eff5e826245fc506f1ac40a7518b7230930b65f2393a0d1beae3163d67f7291f39e009e2a992152a916a9e3082ef06376b0ffe45f8440f26af0a0d0aaca88fbfeaadfb624cccc516118d92415837f7b2bf672438b1fdcd2958a6ae1c230c7bdbca89afc36a27e90348f2eb9ada50c02b575493df74ae784adec0de7621858101e69ceab2b0b934499adbecf7b94ceaaf13751c07a730084dffb193f68a3adba06d8254460ca39e9e76fa00d4385295bd027f410c34f8e7e14db673f57069f70d45f7b15eeb5ff92a975a30a2736ed83172666cf435bc5b6ad2f496e1e87a25ea1a545ab69177274c6332dff1a530c9dc1f55d70f5a037f192e76cb1ebeb6987e90898e45aa17faa2a314b2ed7408433da1e20c8bf0c879087da473d0493a9f547d8baddf5989490f0b2b8cb3e8a1d9b7f7a6bac1a041e7e9dd5a7edf1199883a3aa3cddbacce5187e05d3c50bdd19d08570b2a0d53d613d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fd861de9a9fd370803c3d502124979193493078ef0962cb4ea1c727cac68ab1ef27e0bcbaaf4632459f55b2ed2afdaf0d031be84ec35bef5a54edc076b9aacdfafc93624787dd63226001b4de1200a16e5a10b8be56ecc31affce06565de4a555a07622d25c4db43b923e2a98b9ec599f55355bd80f07b21ec1631d68ce02e94cea0a98aaf4f76d5e2f47e63b36670a50e3a794612624ff12596330944240f1ffa2431151387f519f99705a81ed56aa0b7af86daf80e0fadc45dc0551c409c89e32dfdb785657fcbbcdf699f1983437c7dee3b0aff58ab582fb1f3fc37299e7629d214c031a706ec162f677172a0363e5c62c4f1a52242715cc2c167666fb67287595bbef185f4c6c052e4364fa9e8a51cb2bcf2fbf23e6f2f29ee5fd83046afa419f1b7e5151497bf18c577fc77f8a8b6fabcf622776b340e1679ab1cab4f2dba2c66ce4be7699b2a68eef1ac09a3928f92054e3c1f9ac346cbb8f39276c6f3a0c4dc6fed84b04a26c732873b099f0d1f9bcdfdfe01423fb5e01bd8328c77c6555de2d15236a59e7b893b5c03459092570fc27cf633866bb229d43af0bbfeebbd17b3555827a1e822c564e0d84dd050cb43184cda5cead8de51c3d836e311f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a485b79ac69d6c244ef673957d2309dcf73d81e2f6c4a9c97c9ed2f2c3cb05a0b33401d4bf6a63d11019fc16279588019dff42ea1c6b44ba57d62605e593c01547bc8d689573741b1b9496be22eaffe2127d79de7c42d237288ed4e1ca03222aeb1f580d1fb791760f8adb529c7fdd68ebe287928601ad6df9d659000fda6401b59b54b76b0e3084f0d9f1462961f600ff79383eda131cc43878c782e169e12cc50d96561e9d58b40fe4108aceaa2d5841ea4bb3af1dfff0e0788197572af1a64a53eb544cb66aafc73b08f54f7c5aa5bf2229306022b279921bfdf46562fe0384dfa0bb3a98c974e389c4008a1c202e45bda015c867ef28c3ca9a2fb419940f08e4b8b51b907ea38e7497d2d4bbe162542085ddcb9274a730eeed626b8c21fa977ddbe783a722d2e54f210bb4dd2eadd6fb55d4b873cf408d2e174e53de25ad8c7a9714ecf971a3122ac6d4c22b15842a9e3ec208a9d8146e7bb4db56074f1f05cab694f8f734214a4d5ea51b61b3c4a89dd8e72b655c53efb04e290d8f6d723d7445e0ec7d1c441a39d055c81adb23f61df21723f66d10da76fd9e7216bc6d39bedde009f138d82779544ecc638c100bfa63b83922e5a7061f6f58f33571490000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a28dbd5f06b8cc2f59f96b61229190561dc40ae8343f8449a40c266c424b52737030c9306e945d271aadcb17dbe960be38dd3175ebec6337923d6019ffc828a5944be05c75edfd696c5c1709ffe166917048d0466e105e53ce96f637fbb7447036d4a23c4e6aecddf9aa879451830663cb6f8501e79ef7ab032f2924e78e7f6bfa488453830279084175e77f6f72fbbc803287d0f061b9b9508d86284ce8c2ce17eef14f2fc72a239df2d75a486e03dd1e28d08e16f279e4cfdcb1a9748abde5e12a4b980e77b6ace2b586307cf2e4e586a9f63defb84c4dbd1e096e0d553cf77deb217fdc13a619a5dfe84ee1399258bf6dc48afc679704c76d0c0b67f41d0d047ee8628ab667375e8b5980dc83ff6bea27554fa681e8879c38c934a0668d4d34648e8671adf494412d9ffaad065065cb84c2dce20c03b7224faa3f6a1e93de17794e4b5c356bf265c02827a7feead1c2c462850c3657cb8afff63d4992206e16105df31c9ceeffc5f12eb9e8edf70b5ee4c82701a11d67c800986bae7a6e1319cf7f5782543d16338954cc288e017b56d2e8003c2ac48106be2b4d5219d04950a9945a5a9a1bf0ad954698b4b6aa6a79f9dbe5ce42491a724697a90ef2c53c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6f0e72fbfd3b63683a8cbdf2ab427ea90e989560f4fcbbd6e72f7af2ce4707f67893ecf3e5c660a421d4b5b683cef460530814029eda70635ff716a971764c2eed11a806c33c2e754405bb38de701ce2cf051e366134710a5872f05e43410eafcf03dfc04f91fa8a12ed22198969d1e235ad6a2c2aa479b01f10905387d6e7f91da4d70b20372d0adba75a9a1cd994e670993ed397661eeadbac9586f03e443dff5e25175fcb158694947ff91c21e2a94f6e10949a4719491834052a3da4ab99de14fe72fbb72e254c21ea5180c6b6266bb6169659f2a86165ae24430bef797af73f397e6fe1661191c5aca00361ed258bc7ea2ab4e28c0f189567d5f299f03627ed77767112126f58e7eeed680114683cd1a76052aa28f6d5ebf281dcfaa126d504cf7ccb20257aa7df72b67f7fa1609e29aa5926748b57253ab3e63a15f02e681df51b5a5af5eb5afd768634ba1c941a3f15639c3d6c9d37dee58031353638e23655d56991b475f549726484ed07a5fe534a7c98b32ee90deaa60c7b9b758594a42da3e6a90c4789d408c4b3af8eb8558eeadd7067f153abde57f997358b387316eef8c37fccb0cab8bccaaec33bc8a81f0c4795a6363f2f333406b3d66a30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a304877649367959252d16aee1cee66521db4dd0c6fe4bc2db6d2d51b191f9853f23f03adb346bffa0b3041a948ceafbeef2e18405232c865d4e152bc801289f8565af178f7e48987685739cf1d188866d90b422c817527038e5e526bdfa56715f290e4893f8526be653e23591e7492b4cf408e2abe907cf5512f998004f4cf00215766e34a669f8c32b9966ecce53d7dce8b7533667671ef74ae3df65e89b2167a6af941440481ff6d919761a5a64ed1361c39975c93061a5ee46278fff11e0d9071ed8d804c930a8cd30f61e32d27fdcb5c881451ca281492b07c0e660e5ff92cd403aa57ce9cef918b03dd7b1bcd2dc31dc307887953fa9544148a55dd03e4c574fad05af4674e75003698e7a96c60877da70016ff82ab81d3158712df5377f16adf8a5ca7a74647ecd281bc1a1e7ce4ebb07f16bd0b20a81cfad918d4e830f200febf7ed5d2b4efd4354fa2533843e5fe11b309de1d70b4beb68550721cc2f14af694df9b3cb407a5fb41b1af59a56fafdd9c6a46dde8481ee81aa4d41c9a8bfd6be030dc6f68f2e35e62b51445b5fc204413156d4e6e12739968ecc81369cdbf0d6432774835b2b9ea155468b5e2bb657ccbb99fdbfa7b3dbadbce8592e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a77ca11c488633cc1b7b95c8542e6631304f61793fdf17117b6584ebc35ef44e10065a3ffcd91211bf5be22c16ee9b9652714cd9d5d585db3f95eba680350fea1bf4c24700580ac6580d5142611222b62b92888d7e404f6804599247477d8340fe90c033e89b9760013a9b38afcd24cda11db115bbcd65aaddb7fd8ea96e6c87b27963350068047344512fe1d2e1eb7706e54c695d325de9136bf47926025f0f82fe1b1a54d5013141ef0cd5e28d5d3dc16ff7b7940ca3d6ae3cb96e328a7045de8c06d78f3ae4552a2926fad31e9f022588fbb521755ed931fe62ed9c6b51a282242790080d4fbf16732bc0345047b61aae0dee76d084fcf04ada1127400a0e64beb74e6e07a823eff066941c9da923542f3c9440a3e165e42816bc81b2779c2976dd03b250deb57f06a0dfaa75ece444c1917334f5bd546ddf10152a0c2272330c1215a27c42809d9654fe847dcc28c68f3daeed52ce37dafef2a66cac158b8699eb8e62714293e53a009d2323c2d1acb7dd38f8217aed572d32c9034ffee4e30ae27aa24b36d52713b9b4a703a45613fd5df32b23363df02bf5bd614fc7f0308941591554cebe1e4a751fec6a113f36cc6343c013e9619cd7e198e0d5d40d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093b580911f2307bf002a417d81838548f76e2a71dcb6ed430a13ed0ec25afa437403dd8300bc15e143d9b6f4a68642d0920945623ea338151a06342fc164399ef3bc78a86c2a6800d7e15741ac00fdaea6eefd551a6ce55a06e1db54e8100edfb680f3b42628b797285c43e6f1a4884efdcad24d7954d7dffb926c53a598c17570e584cc0b5f0f8ebbdf643ceac89012e04ab99039d8912736301ebffad768fb818abcc54b707ec98da4e0651d1d1c02517bef90db2cb1733a77224def8f0e7de11b29eaca4c65c0689ca5f9937b3a658b845fe8b864e2bc6fef9a5c89761ca920a87b37282226254babd7f5371335f91a451d37fd0feb470bcdab540b1fb4fefada2771d14302fba70ad4a785a3072e074a4b6de16a43e4d8a1af84f03c22e95d1053574adc28c6b2cc6f14fe87e83407031539ccc746c6f42fd71f5dfdcbf8bb85a1bdad8feadebb1d84d5e8e199a09172cccbbd718921191dfa7a7790953a2b99e6276a6e1ef8bddf430c495db3d1c4975c27da76e5bcd12fabee0cabc011eeed60014bda6be3a45551303f156a888392f581430e6f5d14a6716c9535f3130e1e08e0519009b8cdd99abc9207727ea6b5b6d257b695ba9fa978103845f7dc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121360ae9aec1cea1df3e59bc3e8695a129f4fd92522fb65383a4cdef9eb45886334b0817086c871adb45b747b900e27914e737781f8fff3142837caf1824d78ff0f65027cb533f56b4b2bb50461fbf42f5ac48abf7fdce56de043c0786c3b4093fb5f736c58ff23cbedbff94f7e100859db469ad43f02cd64e595d4806fa9d6da0ebd4ec63d631bad6f87f6c40863b7704a1fc12d04b46be923572441b8100a1ec2c9be84fdd1f26474b55e2c4e7290916b33d04225a036d5cc4fbafc1bed57a22af80a95729522620a3d7e813a8afd39bf7926eeefa33b7d0f8e54a3a4dd353f00ddb27fabcbeca124d43599539aef827dd16c63359daa5947f7da41107fa3cfed15e70f3cf7aa49807053db34e4c6705b9ed229cb2bb77c1ecc0db9ea6b6f3c5154e06ffac8354af50225c55f6da7852e3f9a66b6a65b6039ef7bba8e7b234f464031d34da38825fb4dabe8f9838a220a8c4376f0f78d1ea844b1dd74fc8a3f2f42f6ad626f8c52b8b5578502da4e7c8307f9eba9daa1030830ae3680858b87438a768a18b6e2a75834c9fba63e143b5e6125e538d8e2f3437555443c162e0defecb08b3f59fb6e5b70385f467c2eeed48caf04646d48bd862c70c2824a6d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000abdc38e11c8f3f03fc41a429e94f676110155e347c038c39e2c6bf510eb79178b2e879b6792c33f1d0ec3a29b06ebd9ce0744b32d42b0e2e19fa02fa5ff90d6c3cf4ad086537883375f98471189bdc3c9f7f4e5e6c89e2f72e63f8bc371736c81f5e361729e2fe87858f6fb49131248988c9d335714e771a2b25fa3456f80c4fe00039f6e0d8e7ebca1083a189e9ecc9172ccd183b75c0809a9f13311700a0036b1f01e09e29c36a4c29322670997d2903200424961563b4ff58c2428363a5619a1cea9be62a7f5d49cb78ea3041da2e283502b7fe417501769675b356b401149bf1f4b0df06bba3e322e38ecd6c871d454d2779a673546a52c371a4f1e9593565e56538c551a04c4d1576f62d5b0a626d302dd2a05d4d209acc9bd514fbcec557cae16d30d71f506c10df5422bffee2dbf2247bad4c47f401f498190f2435492092cea84fba5ccc6b5d6c3364f4e1aff7ff3304762f7edaddb6ab1be1e4c05ec51d1fd2524206d6bd6859d6c6dca4f8ad860813dc10b9497801d92220773acd176bd1048ec0dd9dbcc59a1c247bff3f4067c4e323fa6578b4c5324fbb0abaf4224b8a51771c3a0fcc7dbd3cd166d71c6b9b975730f2bda4cf970286d02043ea0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b034397d78cd39eed0c9743108766a86dd08da765448e19666881a13d1fb373b34ea96bc14875261c4477cd2c2eb20b90345597db58800d154e5ce30a19b350eaa01045cde6d7f6e2b52a6be7f2a3cfe85b7afaefdb343df01f8b74582cc72aeeb966485c3bb0460dc66b0d588acde8768e3a7ede220138b6ddc158ec188ec435c4ee40abef31f713828adda88bdcb24fb04764dc6d7d1f584599fbc3b254dd1757edf91edeaa66447aa28b9b4f5662eac8fc8410db9a1b0a559bd7f85ac1d77b2026ba10b120125c311dd61a5ad645b2406be54b473478656349e53ba99f2ae40038808d6036385563fd94aa32a570d60231de99b189f6b234a3448dc8663d892132dc40cf429a317010267b2959629bdef1c33129689bb651f2ede6b898a483f37cab30410ecaa53466dd61ae57075d600484a0e0ae52408aa50d526e32be7361a0f5698ba5a4459d3b25533e9a6c8d0a0dfe05a021beb1866b713d9278c37b65ee1cbfdb33ec2d538eba1ce5ae9a9361459e3681c12dee18a4f98ca150d18b8ca0463e78b823fbbc74aa31c3c17e9c38ed7880338105e5953c9e10a3f840f2502e5e9a9e4f9600bccffdc0e94eea6b2b0503c7882fbbad67bcef0c72da276000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019c62f34d7cae4d475ec631a331abf5db485594e3f7b0893f64766db25ab41bc03431050928e7b5dfe3be1f40143b61d16cbe027a6f7070f9f7fc9811675cecff40a3cf5de59efcb1d6b6a87649ee8ac1623e51a6be5250ee48f1d3025091f3835eec941d647ed2da7c918790c09074d67bf43dac3e9762d01f14c1fa4bccaa2d54d900ee128260a954dc1af086d6422de8e4d5b1c6d5d6ff04363de59cda4218e53381d5e26e232af9ca2e8cb9d382f4c8bb6d606e948023452203706d9c2ba40e26295c5a2260ddb2a43fae21519574643d27e3c8597c924565aa364c0fa691ac31fd8b4cb286ce064fdaf5733cc9394e3265d28ca53c5355c466a513c565917c4a4d1254aedb5e385d6e3819ce857ee705b85c8020408a2fccc3f88d10afdd860ba29f4f34262099b81f7cbb5a3174f91f33740435635bc083645f93b90a8e5deda434f3de23f610300e18f692a5d4b160c66b9514546c1045bf2f3db85356c4bfd3b1b9ec023aad5da5126829a4361bc2066153ea642467de56b9c244f7e6892d4542b62ee3258976546f8a691227d2b54244c2469f63b091f9016c143df89ea8d56800d8da08062d33cdab7fd68d3c348fe2727ac20176f9e50d34a111200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002660aae14f89fde417cfa63d4f74a19997f5edfc99a5ce514395db67c218eb70244682430e4b8a3e49785682acbdf17328c51d66efaa3e3f52b7cd076f3a6001339d35358a57248efc6c1a5fd2331e860d72c0032b4e90ac983d9015d61fff90a0777401fe679569461eeff3c22e600f72e0dcbd1f9612b2ce8a1a089b47f1950c88a4a003beb0296543084f2821c244f22ef9cef056ded320cb4c869544ab03c06b8b162c3720a0d92baf35b0f58f784e51ada9545b575c0af1d33131be8784bd398c9f8a4aac058260c3a510d540bb769987e04bdfa161061b882929dd65ebde39bb86dc354da774abfa8552f063b6dc846457e2c23125efca57966f4276a0ad2f189cc16b71e69a8fcdeb0e59792ae14003dbd8b4b5b0537f7bc643a183749df45460571ec2f2b93e867d721c2b570d82510c5d891e130667609524f875e801cd7d1e2c26092ca1cf0ea8e981ef3d2af44d9ef546cdb267f3b046e7a9eb5cc3b5877990b19e8108a1c35b82c101e11308ae060c739e20ad83ccb7cf6651cfb51b448b66282ae90d8ea2fde93c08ebcb449ea9c2e9e828457e72b0110b5bde109018fa77e64703a91f5035819ffdc157900ff10f0e7fc1c55d5c6fa0d88d190000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000930a0562dbee962c7aacadd0e3b5d8288f52f7592e1b0a7be9bd2a0c20b7ef9784d6a7dca809253fabbbaf8351d0cd41b8b1558c03dfd5ae874d35eae5354d2361f6c88c540b51176aa45299ed53c5c009199d90cda9cd7e184beb537a199a1e935e99c0d1bef7a26551a88d38f1d842fd1355f602b99a070578cebad6ed78047880214f3f6a173ce8ceeeb55a3210f20e69902a4d676aac554d3cdb246af085eaf8bde0722ea702eb71e967eb81894cb4a34ac2e9ef577d169b2516370d3d524f0f22bc77137a643978a3d47bd841793782433d8434fa804c60b7b321087f65fa971c3eb9617bf64ef73f29794ebcebf665f288766955925ab01a319ecb703391710c490b739602bfa05829b7d5a8e6fa0dfcc8e16a229ad2315208d24adc8768069c0e3a92998b0ab5acc9ac42c1960e187fd06236c18d449b76f16f31872520d62bc289629d7cdaea6774c1be23869c100e7f58288625175708c01fbaf648fde949e6ff4d4287b6375eb9b9e271066e061006e6412dea799090f192b25b0d5b1d8a6da0dfd07dd2a976f67a042c5312066685fb094c357200100bb7b0176b80a014fd7d60ff60e2b7fa753df888c4e121266557749019236d2420fe20c1ce00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001849f54161d951a43fb7733c381343c4aed528b643eacd5c2e9271de70c3c0b019b89a192669654a1e9b90a77029ddf3ffc477f809cf67cd4390d6a8bf14304463e511ff53533f617e120b821e94f4aaaff08428b036082fef5a10de80be5fbff774541a521691bff373931dfcde368aefdc4cf556f442aa83c15738f2f98e4fba0838b4b2fc2a4c22e6dbbf3684fa6f4efe1c3caf66cdf2931ba28d8e7d8faa30f3246a0371d31b923863deb5c6edf5b3ae1e5205c25b02cbb32da70c1b1c505a103c0585f451454b78b0138db6094d7ead941aceb8accf63cd9e8020a771314b6f5475434162d3681a7261d99969374fc317b82602f85b01080ced95dbb518c804b19ad46320101434fa8aeb17e44c5947b21c120b530e138e81fcf9e2cffd240ee780848605df7fbd87e5262b370ae41d8d89e0cac2e7c55dd663c0dfa6c704d6469604c1e07467ce9fa0089c652249ba59ea0661620a56331221be727425656b3428db2fbce8307fd55e08ff597c81f75356a0730817d77119c322bf02ff622323491617cd883780554646da2c79d69705e536719b0a6d23400e9cd04e89c0b3b9187484c06aaa5e5773a7fc877d1bcb653580277b3e33f6e85ec6f0fac9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d32a58bd5513ee822d7a1e35ba0cb815ae4bd930d6c7ee26d6163c9b42319ace2f3b24f0d05d19e16e70a1eaa2f6ccd86ddea98a8f0ae80ab7f6ea77c0fdee0c00cb7e5dbf80c2074ae925ae610d7326a9329fd8b2bd06aa8feaccdce682da017120112c7a75d2f87afe7fa04d9482f2f554f210a7cd9d52a9195a3d9f415c45411fe7962276b9cf88a1d620ddf3de46cfe57a3b73f562628bc6dd3d4bd6c0079a6b8f1d2ea93353c13362903917136e87b41d3112b1ccb98fc0603863cc1af2e3bb12d88fa5d45029b14863dfda0d136314ed20064fcf390233baae54c02fa6e326956d86999a141e2c99978c65e9a14748f2ead01766f5d393a41ae72842ffdd4d692b34790cb05fcf88e99d267fa5d854057beedc5a051cb593fb1ee965a655c8f0a45126a939db2a96d31960a80672982a9782a07da1087191341c932d9bca62f1e004491264647b424c01087a313ed85b9ca08c621c800b9be1a5413e5bbe0751c5001ac45a5d28cfab118a4bd5e2999c455b2de65426bd50c5beea73f316df9d8a8639b18969e137a4223ae331d56d06a03203e98393399d2933ec2ad0fbe3ade34866b69388320bca0b6f6078f147455b1904462361b68d940c94e200000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48400e9028d4d6d7fa79e1bed4b018319a05c970eea9934fff04224828b7fb4e65472157f487c5c9c17a93fd9572196d5948df3de65c608f6a97c6c6f40080f326a32b1749cee5ec374d79e7d67ecf8abc6272d870cfe54610c5ac75092bf066390d28f72028a5cfd279c49b414a75223c1c6e016682581b8dd9bac3d9078edc8c921700964cade3e62c40ad5ed95a0e65ce745849def5e6cf40024a97c038aa9ded0c6e840746eb00fb194abebec9c3dd3d9d822bb35cb6ab93854ca28e477764972cee9171d160f5e193ee6f2b38cea98c07c65114d1098c3ffb8e46e496fd58c3090664dda78aa2debb93d24c33a6fbcf8997a0824f82f49041727f8380d5e051263a082b4c33a522a7bb5bc0b254c209315938bd7ce56aadacc8afbecfb2f37521a498cc9e48d7fa1413cfe700a22f8cdd6ccaacb7e471ec79d296362170dfaf1059819a5392db348386b7c4373bdb8c5df10828f8182e0d5705e5f862c7f2a21e0a93678369100a2e665241b4f1c9f6d6078329f2b9f88b377660f5c6062c19143bf545a88f055c35127ead5098e4676a5e56043c02a79bfe68cea83b5d10b3043c6ff1775b8ffab146c0f4dc77bedafb73235bdeea6f65534517fa7ccac1250d0552029abd5b620f0b1285aadb759104eb9e8f976d8a5691e77ece7f2d2be40b5618d75b79030c799a40c5e256e5171f6a696eb38b60342e64779e999f03a2220c203a0d3d06028e656fe8e31dc12691cbc1ab328fdd6113ce576092c8c42000d647d7bd0f471f9ce4ad383bdd12c14623a70e4de1712a85864282b163d7b62c8f5ea7fec1a33de2011f9787d1129d906e768b5de8626f94d272a6a642aadf1aa200b95560e315333eac7e6058bc30b95a17c95d10edd8e053c5773783ffa00aad905c10a245182fcbdc7fe2bc9aef8b20889775e1374787a39a892ea87e930bf1c7cbf5c7b2991a68829509a398b2330d652656f0717523b4780dc1989e1c04660bc34350e3043a389ca67372aa5aa2227a92f62c58fc2c2621a044081e512ffe60f007ad4a6ab6215f931c402efd3b01f6f6fea2b800249dcfec542481871d20a1cd7f9db773b32a50b2742cc2c403a99b8e4f8065290d98ced17026c90f049568f295664d2df7318d8ee0f71bb535e60dbb3d0e361f19e8afcb7a32d4b423e9baa3f78c45f1b909e191b7736d58f532c8b638e1435da350034e5ea8993f2c7ac3d492673e86eb324f0d050c1ef8e1f41115076582815978a3d4b49746562ae41d0fc8671b2913a6771752fb0321a0d2b723dce491fce95da6f39800bbd21c5a35527d164a1d2390bb128f0f3bcca277c51a61a2e194d7f977eeb61a233d1c1f3737c843f3d33e1d68582afe482e3e96087d9de2eca0a1f95a91543d9105282b1a99f23efdfe916662c5ab5462179d8a853c39665e35bb69721cd0c8d55100238fbea8c9e08c78942ca70390df66c8fa5b5cb617b2977bd67ddc65be83a9258facb0def5be614efb32cee1e50ed79c9f36c61b483aaeef75fd33c0f33927293f426ff13487e6273a1e455de184a5b82014cea481f8ecbd98adb90bf91a172af4bf6f444dbc50f3eaa84d0f6f8bf81e1f956ea0f9405f44c088ea44919f540b62b899e09d18326626c593b33ece0103f849bc383ad541b0c538e43fc2d67c16af10e883b0ef4107705bdd4584cb092e2f1577579e2087d71c2da26af8ad8714444ea3b28d4fe32ccdf892c15fbd72aa47b1bedaa365c379028db93d695fbb0bf98f0d0fc3f343fe6ac53eab13ceb7d65dff062d04ebc46b6ad5eeb32219bc16fc31791b57d1c00a93e5175a26be4a8fd6c89b0d9f633b932c81f843ace49a1cdb833db1d554fa838e1a86aaea3ae85573de7e66fedd239e9b9084b7a93b712b0f5ef404c489b4808dda9445b6780e145a0c8921b28631ee74ba3700315db806ea03c9ff34e395c49dfdc8631d0c6b55c789cb344e1d75d7f6fea067402a5416df12fe8884dc6d07546c4d88d3dbbaaacb5482fb81ba1ff2c04b5b9dba2c630d52d6cc6983643c04c127e19e0a57e22938dd08927ce1914498103018de45a01b715ca11d20a105a7613e112a3a4c4406aa5d86bf08a5ee44f5e7a3341f1cc02233926fbb99ea82efabe994f5bbc5abd744a6afbd7e2be58106b371013fab122dd0743e2dc5fddc2f79f5238a57ea47ce9a6b5cebe5fdb4d24af945b21cb8d606f7e7b6ed6c05da29450c442a24bbc2986b52ea6500acf99dff43ef220aff641aec2630c5d07c5707b34fd78842f7b2d8ea92e4c835456e6d1caf09ab08b85115b460803d59815895a41f291dbab4ca0015a948b158f09f8e6f2ef99b67e5d32b8a7c1b073afee5389dc31199e7ca3d09b7919957d73f683596c0ff0ad837311d42b83f2adb1aeaa1125b64ef36957e155b12d2978295eabb12473d8707768a2bda1720bb94e059d9ed3849853d71267d6fbe0d64d75be37e4942f93c2717302f23a1231b4413fe847be6544a0b9dbd4c7304880b6e04f699e046f91cb667550029b87f32b59686778f72b3e0e9d72091e1da443db775a7c87973bf4e336c752c7d547c62127efa1a9f6fb588e4fb5005896824df60354ca560c6e424c09e6421717d65fdf84c032e249272d890317f3b1d351333c75d8900ffe58d454f373710294538b07028aa04e68d236f1dcd21770fc538dc50b0b5d3530c59f31964620fa4b0d7828cc52aeb4112d38263ccd8fe1d2ee272333ba0738a0214bd7c6741179ae59530b0727f1b2b08f931f282237a65372f1208d6a0c852b8cc54f7dbc1104c420bbbaa08670769c86019e953d0c21b547be86b58ac46557a4d2ae2e04b24407aea2142ed1962d9090a584be955a74c5dbf95173892a5c6d376e22fb336402c1dcb5b91780c4273e579eb3878740b9fdd4fe45223a7718544c00e6a87b4042c6dcc7a14cc83331d029ace38a9daabd1129e713fd8a84ff918f15050249f832d9d381c55adc088f276f6f13f33528ab5cf2f115621dedde3c3ba3722331f360e6f4673ca22c55ac153c4b062463fca9b61b7d63aca777254f485c708e73dba1e60d21c4977be411ce7cdf3aeec7ce5f2fc5858bcd4265a12cab4fc4244dca11e8fc6a9b6dbbfc50c5550f436327600d3e41c236f2451d1edd36f491862a5f70e2496ab2a34da1651fb0ab6dcd1c185ddb946688bca939356c03cf1ddad05831ae55d97c378fd64d9c623fd6afaba5fbe265c82deaa399b220f6f102d1e371e089ea8b0db0feb2ea18cefc04f632c6428f8ea9f5792e28f7511eb5fd98e10260958e1628d997846c45e5dfd3a0eda77e68e9768c8b4ec87c3ae92f2e53b1c961cded1091743eaf8c4be91e26ad558ff7877ae80120de752e6ded7ce167a9d772ab4a0bae8419f42424b3ffb73f85b031918edf7b37fb3c174d52e6c03a171a41c28c4c876a487bddc3a6ca6a58e3fa5c7c40e470743f04b62bee4c4e13dd151272f5cb5f0dd64995c21616e8a4db63c8e2d89537aadc8bde2e926ed396b9770173ef5d1eed1ecbd6b9c643bdd21c9db12799d92d373cc8521d2b0a35166261201753c79a4b3a2cd85d517cc6424a7bea5ea46a219646d0aad2e9967ff985e6911c52c2fa061067283897e7b6831f26ec9dd8cc528f9a603835daee14487339e0a2d4869892b67923b68f34a7ee991f3a528ad75fc25bab1051d4d48c2df8ea92cf3f0e36b69ae25b0f953a1bb4546865c7f96304a97503188c588a465565a3d2ee0cdb03ba04ba9d6070f749981c94e030a686c20bdb49d623029d4153362e9107c1f2dcebdd1ed526c7972c532989658b8709212439e4fbe30a280563fdaa01ea8f12aea716885e83f335d2f1ea2588562b80d925c60b16ecadcb974fdd4331ee39ca0bd0ec10dc32d972d90e82cb5f71b2f9a44b1867b11955f807ca53a3d2fba57ec3e714ab959a3da9f2ef582849f89182f0bbf706e9a2dccfd492127d90ed0d3debaa2cfed6a9fa093a0b61946373065178c7b30f867f4ac90412fadd40a2c9203e5c12e81414e983b08c764ecec26fb61b900647304739e1be8050a530fda5377efdc8ea134000a31be232091154daeff959def5d9a218282b183fc2410a02386e34d9e19120f1f70b88c7b35cd09140d7bc38b9472379a8659c295a707ffb8976a7464e6c4d5a1867c7eafd54bf61bbe5b2368df4e7c9dc9b27d76981a991ec761d1b8697c7d8f348d30ecd83bd26d37f5e62d71ce3209ddff2423980f84eead5ecef84b9369fba1d522d288c31d3bc26388d0bf7dae54cec6f18c4f1fabb93d1a6e34da546dbcff468c95527c657298d85821237a7f8590b3c2f95e13983b3d0962b40a9eef5d0983d3d97df1a53246046d3a131996bd81033beca31d9692c850cb985d7f816c8a4ac952fe9a89386105a518db49202532c8dfd76005454e184f468120dbb4123cdef79b50f77e7be358077c87273c61ac8828cd9c244b675873ffdf5e46a5ee6768636e33fc75e6697af046381415c09883ef072c11c2209c47deb28772b981a96df661d553c80167231982fd2ea5b13bf2b193501da8f4bab79d77f478169b92c8b521739cd9affc107715c368c2380822fb718507090fe22d47a57b0b97f2c99eed2a79a14ba8b8a579bc67ed391105126580221b3d3e1448a62e497f163f103056af7a841c1396d9f4b146b1d2b3db916d3aae1a7172764ba57a13d6a713d5c9e3061132f4367ff770407ca5c6737bafe40308172306098d85797e0d1e5eae570607c30cdfd90dd635724dfb723dafc08fb74c23a49087eff9d22dc6a5b9b008bd366e17c06ae10573c79b6f504cdacec1f9ad0fd96f2f3191acdaa1fc1338f8d37fdfd04130766054ee3fee8915847906c09f156aa4d98b0ff87e1a0af767178862a47cb89cd7f0fbe172eb1b6cd3f0426ffb25933ab8ec7652a0f249f5909a87623dc593cbad64f0914be20f276fedeacd3e27724fbd75f7297f5dc6e17282f8f8e6b432695ce07db26a3b90235d3fed509a22d0b273b08e4ccd024962063a22cca2e7528fa17ca8ec7ea961c8dc196d27dd30082e8ba1c6b100d1dc45ce3b5670bb94ec4d49b117f60e0e12a599655ba7ab0e967309a65367294341edd5618f24c9acb4d81d7658334eae6d37b3e7a12885057b3950950a22b62e80976cde7bf29c19b0f59952c8039d59d84577d4746f9d051155d7c00efe159d8cf51f663a67ed9922411c71e74b6f5a684060f18dc1140f74d420c76ac42df4e7560474f5c755b460e09065f3267335b42ca1bf03f6cf24909f63e918eabef126080a23d3594c601e451426eb7aeb5a9600882826fb5d29760296d40ee67a15b1a09a064b622189ea9a1e92d8579fe7c191f299283b342962b2ba8b20171616b838d2d53ebc5b49bd6831fe2a0e440969aeafa511f23210713849a9a75cd11c66f7c5cc1eceb940e0d0abd21f51911542b7b8d31779da1cae80d05380bd758ac80e5a4c9fe8de87c50b28402451a1d7afc7aac9253d23265e9fa4050e875b455599af48cea3cb3d551397923d31daaa75c789a2e711400882eef08705277a6a79665452a34525cdd3127ba7d805f361b3c108b2c7f0a820a46189a578fbe4da72083197cb0e22ccae28476bbf57b3c3ab22486c9aca432e0a5af7e318982fae37a28b3429cf8ebdc9064ebb384103d11c44d6a183000b28c26de9b80230c65753dab1a5e8ed42ba17412c05e8dc34ef047fc2618124ae2f077c561e3e525f4c04b95f27dfdb3f69a42d868f6da7693123cc12553c1974003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000001b118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000001b0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000001b0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000001b0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000001b29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000001b141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000001b25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000001b12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000001b2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000001b189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000001b1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000001b05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000001b05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000001b14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000001b03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000001b2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000001b1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000001b1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000001b14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000001b2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000001b305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000001b280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000001b223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000001b17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000001b08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000001b2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000001b0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000001b0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000001b172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000001b0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000001b05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000001b137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000001b2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000001b2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000001b2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000001b18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000001b0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000001b204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000001b0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000001b1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000001b28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000001b1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000001b21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000001b0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000001b0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000001b107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000001b2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000001b09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000001b24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000001b03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000001b1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000001b205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000001b25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000001b283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000001b21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000001b094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000001b0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000001b1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000001b2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000001b1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000001b1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000001b304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000001b00000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000199a0cf6e4f723c67e79f58cbf92acdd40d0e28b867cdfb616e73ac49c122730293cad60982585f2a5ae7df1402ebf0617d4d3e653d16c6e1bd9eecd3ee6cb47ba8b6614864e9825806f2d7d266806dbb74672352f967c27454a8e958060f349dcd2cd77494d25f42a6c1c1a3ffc4bb9d30982456e9926115d6a98f52a0f7da7f14509c9ff1120a3b13e6f41422c3cbb3da93f6896fccfcc0e8caf13ab16de70ada343b3b5df9bb772bb3a6c0a2f9f193bf49fda654109afcff60f88cf5e3e8fbb9c7f909efef7cdd9624cdfd6f8380942f3d75fb2f4bb22097c3d1e598ddb0a336167c73db802677ceb30b1a75dc14f72bec3ea65bf09e4485646e1e920edd53816b7027609c1af236ded288a4d8dc41c06580fb665846ea6bd24430372a53f60f4ade5f6d9d7c614d2c7fdc8d07cd0e7621ed0647e113818c96ef54e10d8d2d6b5fb0538a16c19bbcee00f1a98e76e1fc7228f7dc8eb4981719c20c9489583502d952591f9763f00f996843d687b0f7c0627decb49d60bbd1348acc9e9ec29c05d67623647e7932bb8f268543b2445f133d8f437a71dffbcbcf9a00b32bb1903ba6e73e9879a51b806841f21a37f6e4297377da36f56da884b0db5e17191c90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000833dd0499107f3cd3bbcea165b498a0e8404fa94b1334c24cb064efd2719f808079809d920875ab1da48e7cd85d70cbbc9330dcae4bb7c29900932c0031d9d1268d145c46dd61ee9632cc3aab3692e98978f4e12e807531b555a4b3bbe6023eb4191361ae1ec8347cf1f3a85aaa12a8d8827d7e22574124eeccdca29bdc8626d1e382c51a99b28fc1fbd33cbb8a8503b33ef2a3c605d9d7ac36807fbf8425ae9c936a02e55a25628bacfb53f8864e10bba2e0fd6af3af79e4bce8bf7fa4c10e2ab67543fef48d828c8bf4f59a055097a84a3bf6ace70c849f4a8c98ce607839e9f8ebf7d05f7827bd280062f8e64fc071eda5028c292f44e60056fcdfbac7e159dbac922e7d39067ae219559cd5eef7b0c10554af1b3484267b24a5e38e05d096a381cd48447fbf5e5ac1cc627e831855f63bd75c01964d8d104d9dd989617ab148b095c2616167bef55ad3b9840a1a39864dbc73efb6740f0343c0d403f44a30dec330f55fee2edf6cd460a9648bfd23d3977e2d227fb238466decf96e1ae91f0c7206c70282f71d605ac2ccedbab31308c137ef21ab55fdd422e327a48a35a7abaca9a11ac3f74586eef4d343d78222d293b72fff78177475f32f46ddbe5bc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b82e45c828150d6c1466b292e17e1fd8f334e782695938800b30e1c9f0bca1283849efa4db53aa0003214b2b37aa675e5aeb54e0094b2c4f17405006f620e189365c90e88830fa4c13840309604052d7c259130ba62832d87bf556a0016f66dd57ca3dcda58b71f8ea9d60a3df8ee1a93091fd8c892ceae912592ebf37ea1856076287115f6f7cc918870b92618c0555709847d2cc661aa9b0c9b932c39f86db3e6fd7d4d765dc98aafc2486f267d065259c8198c21c5cd11dcf68fe9d421872830250159c2ee0beebb9ff06be77addf4fc1be5193341d676822d23c93b36954a5206150bbb00d0fea2b28548ffbeba902007b44bfe3cb599216955e0f7cb73cbfb1a19c5ebaa02fa6616d0f002f7b1651b56e53ab4cd1ed886d36a5640063f5affea3ecdb9d0f63ba4c06d8050bd1397c9605f64cf5e0256c783ac84734e442b3e608b41d0cc9168dccfd9a4256778c0f11f487a9868c33d70a2b1322b9234a75621ff9a63421e18e336abe962b5f71080347dd2171d4e5f2cdddff44b6dcf1e5afa4f97b1946a21c17cfb2311466f5a81faf0b5f03cd89d47677ac2ae877c50750a59cbfcebb5a87708720ac6d44b6dd92332326984a5fc64e0914db440f7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012504de1fb558771a3b296c82ff9d6c6a3937f578c324c58c189ff2e96db926dfb0c64f29aa98931de3d7147403fe4a9be3c9b6cc75eb8db6e6fecd32faf2d1d78ca799166f5b3b4508d5fb8b3cbc1f512b19a6886804327335e865a7496d988b4d6d3416be210c1d8165328c21ab0099a461a9775613e068506199f2cafe701a8b6ecf44eda0b8b6c304ee6614980105c5265880f72a9a3fd2d860c654d1288cf3918a41928825b25e38574481c23d798a1b0d0fd2bd5f458a3fcba2adf5e851e6015fb76a4a31591939fbe561a4c5ed8d9f5bf31177fb95a866e444d484ae4b9680961ddaf71c4dd68b5cf721e838ea907f218f7fd659c9db50277fbf8d22077f9b3805a4867f3f3316a14f00578a5f4ce8c73538a9bcef35effab655e31f2de0fcf9c747a6d2b58739a707db9cae4756eaee70f032a1c554e83e4532b6cf451d1e6c899b62e47dc162367e069a62a61c89a4cec8a38e032b1d2be3666a95d4ccba18eb58a6fa8bc4ce22e79a3618a5521e99dcfa6ed78e5b6c0630fdec50c54c1a7e3a12e5caead4372ec367cbe7d09c61a977ab43df4b728ef54ff556dd33c8643ca18b0d463b0668eea55c0dd88c53c5cc77a97664a9295694e5d49445d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024a5c5a4e912a5d8dea5d490ecbaf39d5d90be75037f67e68c737735a5eedea8f8568f64d29c816f94b5d062da170a17d8d4b0fddd620ba0233a0bc83fa716bac3e83f71d2a80c7a3ff4eb3eeabc9e6f5752f532a16b439c87c4aa573c7bd32c4211e2a484713d53ffce7d0440f64a10a842ba3dec3830ccabfc2bf7e07eda8b7ca320ababd0259ed4d9f1d8b5987d7732351e3e94d013a51bdc6be4de476c571a0e60168648c87927df176f0c2794cf7fd63aef3a02386380dd78dd20161210e8cad6ad79298abcdb038bb5e3accaa87703479d0cbd143eb6f1937834861b9602956d7f874aa79decc622613b295d76112bb80e496df01e83b04a7377fa267c62ea706bdd66fe17f5048b980b42d52c8ba4311d17247c00fb7841032f2d7a08809ca2c949f2d4dad73ec580108ae419e04545d06f9ed83e38d9f34cdd3b851aca8025f31136c7f96d4904e01c58381ab9fdda0e0caabf223ac6e6f8cb46ba67785b2f965f7287348323633d1a1ebaa07f3d64b7de36e5f5493279a4309837ed5b38761ff54cbad4b97a0e095cb1995db8b20b4b473fc7df22ede17b1a784d61f5eab05b5b0f5e23fa804729cfb653bf721625c24cf4e9f0eec8a7ebfd26e24600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000da1f6baa1b6593dec1a1d6bfd479f153de23a0cf4a1a95fa6cbf8518cf758f583811f24c0652fdfeec9f0417194027910b17bc138e978e5c09fb05873de67eaf408dd2482bb69af759a0d3d5055e932339422c2a419f62665a055043c3fd68eea7ba396beeeb1e58c20569d328ce410a41cc834ef0a8b5a503449ef3fd3e4de6d6bad5de4d7ad8d4cd0795619d980d7f1aa3826369f6c30f9b74ceba7333edd0728175a7fd8c36dc4d5557c4152b7828695757022af1ca5a1a6cf46ea16c3d3b02ea504a8007fda96f63dadaae0fa606b96e9d1829fb7f706ad501e03eef78ff1be84113ee82bb66c584bbc4e27281f974a1fefbe5e9d43d45d79d88f36ad88f0a143649641f5934ec280ebc425b076c12bf3b5aa4bbf50d7d5f1b2759c45e53ee03af1eae9d46a65cc31ba15706cb1250033e6ea978a89aae54ce27c6bc520c605d53fd7753fa4b348cfb3d13f4e13f845b7407c02f4a80e2e1c2347446901ddafe36986e4b344cb4a8494cd56bb0a966ee7061f4cf58298b57b7b485b705fcbb1465864241a19d666c2e117796b7999096bc2c0cb655b0defe7e62f9767fab36d74992105e441feedc2c82ebc9cc9b9807064b01c47ac59d40f3d5d42af120000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0023c311f1d2578ae60c2e17f40fc3b439ccabbc2f58b6b6230a5913cf7c3ea3037b49745c20826789275a2cfea95c6dc85a74f703d97475906b26d76ebc7efddc39b8407f09698bf453c27f41a0e4c8b1526dd533e00a5feb583917cabb5b3d16a7c0b7174b4858a17cbcaa5b2c41d6d1bb4b1e57ac04c6c544bb5aa2b263b632e4d0f4f1b7da4a92bd769776e1b88517e1b7d2a44082a21d3823ff261bf401551ee1bbf1c57985e1a8e8aae4c6a4215eabe4255574470f776e0f70abfd1547e731f295b82b9b48774127fcd3fc942424b5291645ec29642029a14abe2f55cf2d78469b48a6fbe46a2fe86f27716446ca98c837105d7edb9624b4d70c1afc997ce8a49157d89943952b562897a18e798ab88b4edd7b4bb7edc35e8099f06f0854a58ffcf6d5b01545202d0f5d5fe94b374ff161126ebb027ac247c27581c0c84314ff17be2a6d4db9a3bcc7d52655ca8ebb6b3f0ed35ef617454b8edbe56804b1f6507b4af34b1a6c7de4ffc7a024ad7e697dd5fe785cfe420e25febdab78d9c5f599930eda3d8a80bcd910af5ce724e554dd41a001f7182933c43d6235fdb7f13d71d46bf1fe9704277d9057c2255df612ff79cfd66475ddeb403c1fd27e6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c4d26df3e7554956dd6a3e1c6974f497210f215dc6e57591fe4b626e7d8507cdd8d4963ea176cef3fd334ec383442b5e9b2ffd14a24a1723bc3e95f3b10807d4d4f74000a650848a555e85a0349e8ce267aff1ee9fe4b811e3eac2381fce4e430d3486f8fb7630541b09187f67ce75076a11a04656884588bb95ec93116d0083991ef140a184be407d86ac43edbdbc37e53bff8785742fd5b9f3aca937ba7f471767b045e249285978ed58b6e9990c49f44d5ff7bc7f0227a7d16446582ab9286c111c7e574be6533175a0d82d33ca1f6ad53d15017f455b4c2d611172ebbee61d12dc0261adf849a0d255f0b0dc413915e20f6ee79c1e5cc8da0a981c891f8efd4e1b077265a72c59ab89ba3b9e602a2d1bf20f98950d47d47a1942338f6b4a6348a69c897948278a3dea36c1c7b6d98a896cbe0c89482e7c2e7b625e2ac038a6852c9de5e5b1924d2dd3695c624f412662e3f930f8c7b5aa32bc623cf14f9dc657dbcdc50e048460cf8d01faea3f91443346e4556fd2010653e39fd8ab88f337c87fbb7c8d992d853483c727efc4a9fe0adf11de49cb04f0dd0fe69996201484fb9ba360f92eeb3ea88bec675d5de4098b38acf4308390c0dedbea013c3600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ad9375699bf8c741f5aaec6172f1bee27af53d94e2a8be088b43a36645253e0381bb086f372acf13f0bf5ea36940c68dd5f7efe135ecada8be1701505c69d66b60be74fb440c38cc50780fad283d4b14a671e09db08a678bac384df1ce5d8b6ed17bcb73577a055d6b51abd0d8ba47ec907d4ed631d08197b91145dbbaf582ccb0d8f5ffaac0254fdadfcfc76c74744e46344841718bec63b770292e0e0459a2d6acac67554c8cf92279aa62f8d2b6b6f6c2ed83d6a7de5728c3d3e2a02e83678195087ec9ac5d8203db369ad01570df879a4efa28d9e5472702e996b133c1a166c767a80cb17da47c07295d03daf7275ccd344992fc3dd69720685e2a1c31d824d7a55ef1c815860d8470f8e8aa4ecbb96835f031889d8f2e1073564b673272eb3e7c935ac08cdd1e3f6edc8eb8dd94d27c8e2f3f473313f4fb29a8feeae4a64679ea5ea639758d9770c2e46906a64cf70abe7841013272cf342aee891551dac1ac02f9d9cefe30b7925547221757e4bbc6b7dabed8cfcd52eb1c88843328e9a5c9f53748a0090f02efe1049e2555958c80b813cdfce7e6bb5fe4fc325f12f7c30f05a7ad22df83bbc5d5668446517816e240e6f5f8fea6dd4961dd6f974c80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a41d389aaf348b1a7072f9d29490d9ce75d9df87ea7f2efaed84500ba9c8d3a59cadbe53ef0fd24088c0187eff54c8dd3b879d33bf1b4b0ae898a518fc82d197563d530c91da1cf57be096d469a8a72861764f03f94afc77471e21e73444f543dd141935662ed21646cf4952f5ebeed00073fb111dd7cd52c5f433f6a27e5e92e9bc425699ebb8dd6b9a6f935460fe6819a8010410f9009ee646f6cd94229bbe490c3caae334dcff25892372db14b0b49287402fd41cf21d98d3d542457679a7c3d55c10ece59b5574e6d1ea0d2e0a3207484669f846ab16833d90f1f6cd7bec28a73611b23cf23bb11ba094fa9665abbca34705716aaf07ebe35d69c7493ee750e332b4f1addbb831605ac40e326ee1453e7ad1254e598fdc37d585c0d7f5a784f383449bb9c7b40160da6605f100b762b7783e94008540f7ef30eed658319b0a818227acffe5ca85ad36e9e3a69f741e5424a5c38c658087d9cd03517889206c3e223dbbc36d909d4572cfd1a405706a7bed935b90729ba5ab07075fb905b2fdabe193de4e15feb857ad7766ad54b3d842a66bb6e43919f8c3f35efa8e99c0f34ed1ea2164997be1bda539f13c1555114241210ea54896fdd084063743e57c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023e80881e64a2c11e57a36b3d7be70370d800aab91dd1bb1fa8842a6c6d1941592f50211b4a534746e39ebe18c8eab497ba96e5f7d617c2d7fe6765d4d1760a19181be6a3e98a52b9f1558483789489f03733e55480d1aa1d77d8962c2fac352b43c83e1b185de9e4f903285af2e3cc4c51d08f5904a312588127b4e0d7a980edcdd0cffbb79cac23627fc9233827847b9a73c3faf5c6c6c10b6e1fa2c6463d7775c7393d0a3790b51638f247667bacc58d174d930855b888adfb32a0e3b1cab90467eeefbf072cdbea5574207ea5a40300db3ec02ee16c37977d137f0804b2d8cdf3b1cba023d9afa9c2d1906b2b0dac1514f69b0dddf29ba5f00b3449d79f97db69409b364a92cc7421b2b39e94afc38ebdd21a7d0eb181fe528cc9932cf763c0c3e270b12217b9fa1d661e594c603df7d98ba36236001e1be157be7ff274348a4c60dcbaca4e62b3ff37eb7db03dde8405c1775d4d48479a996fc3b9a9bb3508a8bc38c438cc1795ccecca8dbbfd2dbfaf90e265ed4836382c2c1213f42f56415ce6d75e2a43637033dabdcdc874467e8d2b3dea0ad5ee672813e791cea82bfd435d6c8246a110fe7c1ca79feb9b7eff94486e123d2c1bbb5c72a4634be4f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a48be47680db0838b462b966035fb45d48f32611fbc807e78e07ad740c9164dbda74bb1c64a6c32f37ec9bbd5e8926b53f69738444c4243d0bb8f34e830d835be37d7b17ff1c74e9b3edfef7798b2e3e57507010f7c7b183a90f04353fa9a950654cb63df61bf42c9870dd82d016b475d3663ef7f2bca04791ec37d87dc48450949b55e205cc5b20832248d520eccfef196870c9a0634556d251f657435aff49fbc37da9f6520249e114a38f3c35f41389ec8b338b09634e9a479b7331db00441d7aa46c24b9097ae7648cd8751f4f83201af1b97f35d3cccb9b073afb1de55dd53a97269d253b81d100b8a50774cfc86b8cfdc737067605591e61a178de206872efdd5fccd81a678ebdb941d9d632236722105ba6c173602b873d36b643d54d7ce495ec63a34537c30268c6fff2fb2b28ab55e48a0d7bd91d3e1e9e5d322a5dda853fa94bc43c9b9da72a17ed78304d93f68c38831561cb3b70f9d1957a3a490eb9ce748f1d17cb923d0a48537d5797713e300e476e5f009ff11683cee8657891020f34c657d4616f4007012bb8fe05ef4ee4079372ef209d8dc2c8d7cc755441843782bbd33e59737e55b20099fb536967b29a9832bfc97f90b7d3793d9716000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026bfb76de498c19eb3ff6ec4eb0a0b2a923e88a1282ff98fb575b1da79b6ef8c6b10c769daf4db464702c3078a3369159b4e946647f5b1a62e560887be138308c641dea4f878b2d7dfd72480a424e613d2ae2263ce941b5183fca71efdd3ca7a42c21b21859b543ed8a521b65937a6923dc6f073dc93b2f6055bc69edd4a5e868f7d5f7a784109f3f7301a57ae676e4822404bf3e45b6589aedc0a93e4dc4ecece657726e269d6411ae25f7d516b86786a244e08d08d1223f254a5ee01c5671c4eb4c2247657e1e332c2357ec21edebafa242317a1363fa448697f58223084fd67a9c7ecc59cf6ee4d9449f42df60192f7979585303bdfc89dcf93c38800e993b39cd3c74b6ce6c4a2c6e933aaaed99ba2693d416f19e70a37e733598c0af88353e2d21f37059b6da4ec32063051615d835f0575d08ccbb67b83159c667bea0bb6c7bc9a636dd6a9d803b72cf1f6d7952b4459a88d8c21fc004f29cb25b494b9bc2fa9c1f73bdf32e3d34a3da6a4aecfa4072f5be59202db9e39902a42db6fa0c0ba2e0839bbe32516822fad0075a0e7d29c83bf825b57cf6e11240d84e46c9cfc5328883da4ea4cb8f849fd858061a093947984f41a394244e9df802bb529e600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d137c051c5527017c6677003ee57d6119da5af93c88dfa72a0b6abeeeac081b379b34b7b10bd0af89d9cb37a9210f938c5ac361d35cbe664ebbd700e638d600a23f118afea2400ef4090e0309c2149385413692d3bd623d5dbcaaedb4967fda4ca345c960be73004d6fbf462033c5b69aac79e0d097443bd2e307fa41ea25afd187a9b84427d741ff904b02de6bf4fd8a59ed7df9bd711757f9be83c6def3bacdfa50fb7ab5e32f9c461e37becda44f71ad04a1ce5726293cbc3897789932f7d3041988c3e7d232310b7b42e8025549c9092804aef239647c5e8c593ac4603229257b0cdd2a4a78f7fed960a72ee6eb3d0b57add16efcf61a79d31c1800b7445c0285cf3bc05b2778e8966928c1230abb5cb16b66c36d089f7ffaa7de724525f98ad9c5dcf74d9c80d36c112a719660ec16bec4b1de87f0055d08263c17470593085775c0805416174027a60efcbf2b32d93e6cd8915783ee58455863437560a589b085d5dc55c767578eecdcaa4ac4bf4a2ee803eeecbff2fc3f3e93ed48d458f6d22ee09f841211984f38a799b41d4d79fe34064c8156f67d0459b6b0f8c6c265df80f8949ebf0f7540397b6ec961626ccdb4e2553825d686b6c32a38b46a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f147d00cea7c66bf882b7d4e4156bb6a0f9a6b7165af7b3fd9328ad0e2905c448efcb27b596664c18bd405f76074eb75afbbf349776a3a95e25cc9808c35226d3076355783a76def4afc40534f55a5c1d258596d01f8a1430e4fca19627bf91f223b883307276b1a953a3deb58f2c7c97926b68133c6ad24dbf156a2a5f9377c75b3159e911f99aa000874fe5f05f5523c71afc7a1bd19eae7273a29aca1a69154a1fce04f37015b84ab5d68a28708283e71670a32208a8598358fc2d15399a880def68c104222ce844ae5335d0e5b3fd8149d77f6a9a9db2f463e66d01d0299cadecb54ae0e04e883690bb55baacba3dca0cec8bd6ebd238a1ff31fc765ec391b7a4eb1e92b34b564594322efe24c4867251ad77eab037051127bb9f9f4ba5f993a2fbfab7b06fcf9125eb8a48757f593db0f06bfb97cb8fb85ad347450cfc3510991c5d2b56040da15ca4e09c3d54e08fafffb9754b9a616a89fa3b7f1fb99d86425e65bf4c336ed5e4528d10129970883e1617661ea5ff09e8ed076f26316d80f0423d96aabfc606df3dffd0c40066a49f3d30d5f82817b32a1f83703446b2434a88ffb2d452e8f5fcba77ad81def0a1a72ed01ffb94b61f2a23dc4d8bb700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002beceadb934196b3c0a91552213d064be91797003ec3060bc8150317a4df56f91934f07822ec114f4a0992111ac046793bf67aec4d347223b540359593d70eb39f305d47e31bc004cabaadbb99b280316cbf2feccef28c3d837e0b2acf2a8e9dbe48a9dd286d0592f1f23893c63d3b8d93c57add9e30793646028f07aebf8c1834aa4f38c2c2943e8fef3e39a192292d72eca895718509cdde9f3414d3111da78399cddae33b3116964889d325ff48cfc903f28387ba1b9658b40245ae36647656609dd55af718240c6965b90947a3abded876eda53bf5d02d88a04f7ca919818a5e3c8bfaa676aba53fc823a758cf9d0e8e8999055264dec15cefe2e560f4c0a9c7410348259b5443e1396de2a02d06626a50e4a036a4895c7bf16869b81027676a903d3d2347c2209a747e17a6c62830f00918ea74a6377acd508db70c5c2dcc3ccc7316c25f1be227b5c923cc6a1b63728851440f218934e39957882bc9bbe2d1ecb39bf0c790ceb4468fa9dc7b93ca9a4132cd947803c4bb99219eb3f36103e724fa89eeb0befa2272b4aa8f8260cdc2d09df8afbd7a9ac9b381cfdcebdd3d18a8f6a3a028d399ec65c247cb3ce1c171b6f4bc8337ffd0c2550fa5cfb991000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085b72dc729f1bce257312ddfe1339a4d05786d47c26338ba0a432f67b8403a9b2d632c3ca5aac02da7afb2387ae0776bf89ece6ffd48a48f4e6e6e59e2235177410e4eae14bab2072679e751881eaa70d885c5d8feda04014a83e7e236f6009fe031a71abe711e80003e60640891532f8bbf474ec5d410c2469a067a024b1347d624f0c836ad1f373a45161f7617308754e8247c5ea59d2a8241bb4a654ae0f2b1477d2f14332380fff3d84509a3d82ca787ff286bf4a3d6a0112ddd55fed8dbe446fd069ffebe4bace3e5438d2b17aed60243df2df8f8ec02c2885e63ff5d9a6f52c0dfcde6d15ef31cc5f58086916113090ac3bf3e29780cd4ae5cb69067b2f0618b59c951550ae16d3791670199c3b07a602de49e8746159655ede2a6e9962bb21645ac008df92be25947250e697b888834dae3e10cdaecbdbd36c36a4726eb35ac04f90082330570538a33e86f4a94518745a06250a78df485ff32a8d19ddc2b2f4b8f1bbafffccff6b66b51199ca1e2a4d3e7c5868ee7ceebcb7afd48487296b0d5a178eba62a356b5fa12dfe747967020df596696f1ef770edfba3d9da60c9a1febfab6d3eb752a49128058c95bc01fd64631848b326a613e0069da8c50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840c76f631453f6c4de36d276b4ea0c44f65a563a4095d0c3ee94d563945718e77fe1eb46391da0ffd0bdf7eddbe99558978e50def724ddc0261c14b10596938dd230afe48f01258d1439900f126471600e2002e6b217d4234368a69432c8297f8755d95dd362959f645d5daf3948cfd3d7fc9f6ad95b690265303ff3a0d1df4020be145594bb067e2e966c11421a10fb19e3472df7dbba7e156126bb1ee0e98aa9b79b331efb4bd91407bc728ec57a3e1fa9da8c1810627ceec9e954570533accea74f8790b3c63fbbab8663f540ad03331dcc02a6ef8711c6100e0038d9b31a510bf9adcace3577831db399535b26d7262966fb20803d704c1bea4af667835af37963df20e09a5909b10e2f5ee55a54b392565dfd2f51240b8b7223be0a90979ed7a6a86da1c5a4a2a1c389cab0c863cf8b0bc644aee1f22270621613ea0fdb5cb10e15bc807ff35adfc12391e27e03d45e497461f6d96a8dba3c31c6ece8167ec336251837393e43e313ca625dcaeedde3fa33670c2eee929ce82617a7f44bc51377a836bc22f78e6dd3fd4f031a291031219a6ea1ead12629bf0ff159a33a28fae06e07934757a9bec9cf9dd796b7a49e88929bae0c050960b8b71122ed90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a88592bf153307b45c10d5149d8e1260e930d4d5b5936270dea66874562a1937862d073a8540c349ff817a0dcb809094841e40efcd3dc6ecbcf681081db41eb3afba1e87dfd0d19b837d058988088d854d82c0702b55c33abaabaa9084268f9d252666428f246a482a55d22f27b90cc1d9ea27712ff728b63c88492d0a5579a9737ccbce4acd0e3a94b9e477ffb653add192a91a253e22acc403b8ef1c6ef14c0ac317f0623076baba1a391c95348f42cee6aece1e71b62d4a562dd5b3b18011a3ff70e01d1967d864233a6619d4814abfc2e9846cd9fa58282e0c710c7a484d433f21262af93ac9624e3a86cb5d1f7c187277acfa9f536db55d6fe539bf823a7db099b8268ad5b5bbe4fc14d0d3aed1536bc14bd19adec70f38d348ca8fb8fb7520d4b9f8d3b9f2c0cd0bb463ff1118d42723fe4605eff2ca194b3ea18cf51f6bbd4c6750a576f0e72e8cd4a106c601d211ca287ff7d024f61655d513af1bd684a343d99cf95d11c7f6c67bbaae7e7526f750511452bb4524a4435002740ad10f101e2309c9bc5825254832ff09f8c980289ed16d2e347dfff4439062e8904ff9039bac4ee22cd1a784c46d25742698fbcabf6513196639f153675e50edd41a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007de9af0993c7918b9bfd6d83df59af2a06e9991791c4193f043a2c1c1ff5939243022e2c45e9dffc0e09e11f460003b244ebae2716b433c3dea0598f9c4327f5b295b5ae4cf50c2245dfd5f74db1acf57d48754e770baf0e1e3028817ebd57bcfe78ba4d54ec137e39a47cfacd00fd00f7cc9c1353ccc1f7af5bd9fd23da8cc85d530ea64210345dc81844648157779fa245acee4f5be3aedc3859e6dca8942009cd8f7bdbfcfe6fd22e1a8545c297609500fa7b508fb26eedee9edcdcd33ebe822b41936cdba576f15f2193f1b84490b3329aed8b156c0adc4a14308357d975854757b275762358fda9aa60c854b31f1b7a7015cffe451a452d70db928a232f9be3c482f0ce4bd13b0b45d5aa339afd62abf41e1b29b1c3bd0bf6e9b02dde54870fb4fc164276108a9b71d402810eb08056659d61cac06c6d442b7df6545b07762e94aba7e928e8dc9728190c623e4bc1fd474da6e1c618ca0eb68159746de76428c557a4dfbf2b394798e4fe0621da61ac514e5cd51447087bd56ac54a98e5d1efa2cd1706036ab31b3fd5bc4617680f4a55f99132e098314f6a609e641bf05cc01b6623e09c07fb51888843398e6b98863ca9cff34915c0dec30cd9d011c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e8e4c48783cd0647ab242b0e09b94ab32e44139578868317c178c9ad619085c88d989a0dd47e8b94da940c31dc6deeb48c5b6f0b3d3446a339a4eb71f64f1c03c568571eff1276f9bc09033352154922ca5804f34cada884ba3ad9b4cba3cd65c8e1a54cb3579afecd287e1b27318c31c3e7e478b5e11775259e38e166aa278b11147f2dff65c781dee319d5f69d94d5befd3b1d3a448e0f58c46e4b24ca4253988c82109af4244ecb36dda44c21b646e18f6d3be43c426091cd86b409e832a3a68caab3724fedab5cbe939bbd29d7b4d6d40f4e684e89bd9b56ab7e2eeffa667172b5b63463dd1ea688966bf429025dd533ef0ef9630dfe1813f3606fdc8a97d5cf233e226d0eea7a63fec017a6fdd07b93e952b879da2709d2345a954fef9d5818d9d81aba94200b3358b241a4268a37cbf44727a7afdc04b3f5c7f7c3d3d0fdd9c081be5ddb94cf5860672176700eab86d6e371d3a99355b9c7da88685da3a96115bc3fd1e9d84ab199c8bdbf9d463d56740d46a7d37a6aa2939297207c5b65ff654f312ebef200a59a75a9c819058863aa4334825fa6f85a26e95c77426d9bfaf0ed6ffcdb6e5930c1f39096c0bb19476cfdeaa56513dab00ce9e4b3fe300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008af25045853f37b48fce7358ce0e8928723c05d7eb44d90db0c73a6a1433f2b8e9f334b8515ba9ea59bd47ca13688f09342f00136c35027a9a1039fcdddccfd2d709cab8d40483fa846a09f1d8db6d5617a10ab0421349ef33f8e40ccf0c1858e50a61731ca94fb69cfdd3439fa6cd799262606523e891a03029d73c45e0edcf5c218b0c73e4cd60f52ef3890afeafd775fb06c49e58c0521832a87e45a04ed9bff3e64f2dc80a286ab91543eecbd68ad03f3c452790f713af2ee6acd12968985ff471a7408722791f521003e1a75ddbf6f2460a3472ad9aaf2406be7800a501b1f20d57e757a9dc1391eba61ef7d491dd2c3a194a044e6633f46ce0c7f1b69e93f39c99dcaeb69e14367bc4ce6e32b2d01ebfb8f972c8cc6a0276f0e631e6c04d50804755e1bcfa8408a8b28e9fb1f3d251bbf0d3354626c5885c575e33a5c0a811ad078bc692b0994f097e593eb4894a529e9bf8bdba6f567e124a4d0272b6220887b8ad13884407b9d252ca2c44a5f84398307196e05545af6bb56cf4e36f984153ca81daf51277e83e134460695289e0adbef2170c10084fb4f47f6090a7880268dd7eea49daed45cb062e2bbf22ca27fb352c8c379c28bd8be02a3bf95e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af63a62a0a6fc851e45da71215749b52f5471d0fb6bdbe135829a6dd308dbe81a19834e24313658452e55619db55393ef11641aa76c21aa7437db1c383a707747e405055b6c310ea109e4459f97ce2201a77b4e0259b20b2d84e5dcaee4247064bc6ee2065d928acf269322c7eccad1e86c9bc0d8512dcb55efa940b66cfc3527a2e085fd0de1d1ec7108fe3228a49eb17d7d661ea84a9025f29c26e6a664ef106c1bbf002e3edb44bc558f4bbe7009871d6d257e223c26c95dc68c2e314a87a41f22259b8abd268fd5906484a60480d892cd6573f0d67728513b998e1ab889f78daf06a2e7f6315cfa221629544cd939de76b7f04cc05a29a79c617c3be33a4007593c86a5d0b3b1f5453c7e5d723fcaecd97e23f2c394da6bf2a3508fd591127cbf9c22ad4b8328703f765f077b6814fd3c244780b401965ec525b57c23eb689e4692105bd281385f711ac55207042338298681c2d3216e39de53ece74c011b2cf3a1b10c537a0d61f9b3ddcb32c06a4ad6b9dbd92de38c95bf19b40ef41cffe4eebf02d8e4e4f9e523322b53cea7872834e8d9117483e554ee647870a8bcff5d1a90bc1c8560313b0f09ff8ab533251914c349f1b2ca714da0936bef942e3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029b51911b5094cc28c678df3bd3ae1d1843e4ce2f1324a315655f310301307b4803cb64fca194c7263e214b2e61d0698cec718db73949f9ba6699f530604130ebe4b0b061dec2b0373c19842e4b1789157a888b9962422524081bf7e67f99212ae1b82dc2f478c977a13e4992820a488c467a838d8cdb58457903bad384c81c01e32af627611d76b323c91bfdb4ecc19e025ac91042d15381a1b03b8ce0c70be8555f629c77498469404f182f09ab34e506dbff23ee94ad40b9e61e6b6bbd956193f0323979248b73f8de5c680cb1ac91054c5b89a9c30ca536ae277e074e06b309842190b76bdd7e3ed9240c0aabefc5217b9bdecb0fa6e8384527ed3849952eca14d6ef9109ee5f690e710412aa2039f13e246c06ed1ac54e9d25ef8b2bf5261821e4ac2b103321f5b2ebcf955bdbb5b4e86bf8d1497c983932dae64363e37169f377e82864e0a89f7d7f04a52b5509f0f893abac859f70ac99b138defab0f39726cef05746d325faef76db1141f552e4537f51a5b447243e12afe56bdfc579d74bed9adcf11ab6241b5c12cf4f5adb3d4c3159c5dd58a1b682c2476dd4381a795545ed4491c4bc84d996d8f6491f77e1a89de07d59f324f52704d1fefd9da00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f4c9c6403111ea0e000daa03b5f91221e31ad4968162cde842d6ecc15a24d6a3b57579ce78c600d94ba23cacbf995923c3506b43bd9906d38b7db57ab075e3c45c4243e6d6e8ceef596e923f957e6eebe36e1dfd4d13ded40331717b152b1c5164ec4bbd403de7e5e619fdba1714820a4dc69bf67fa054df9f07591177109f168999dc29fce1d17248f19aa29a1befdbc1ab153ec1c1597f5071a88c645c4e19a3cfb634d79e1f476cfaa08243f7eb3de2d0d540b8b95e310c70a519ae381ab67b0fffa30ece99b314ff4a9e8b0f53a1574e384698d664708df7bdbae07cdcc8fd5724fcb581d40c479f77160b2191d3874ab7ec87430f7378318c095b2b8372fb46a561cdfa4597615bff67f94bb6c5c38a4ed2d4fb8f3bea39c0a5a3cf62694e0b34894efcac68a0cd6f0dad816ffe860f57efbb7aaada30d66abc31e5e3e688d24122f6e28a3d0ab1afbfaf5b3c45f34a632571448ee308a289a01bda9cefba5fbd63bfb29784382f8f01d0f43c5b236fa19d4b03e442cb41ed933fc39972490ba36bb6a3de59c65ef619e8eee3c0d656c8f90929853805248e3d147c2f6f91b6dc4f990a949cd057c6d13776091104dceefdb213b6058c5b39d3fba49e70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000252d96046b3b313cc8cc79c55012f492928ff959d232451959cac5df806a98a14f7dfc559e3adc7a45677710962b76b627495a6e50acf86796f23cb7acf836dff4e5b62109abe3cf687edca04000b2fd1cf87d0099198ac4bfd80ef02d0f1a6eeba32daa1d5b24e462dcc9fd530f4258264bdf28011d1680d099d6227d2a8afa0cef0f005f96dde1cb54f3df27a2f045ff7c6dad5740279586afec7907e4a62522cdd0e18c2e23a6b7bac7beda1d67d51197129be128542caf5715d0a1e93ed0938a161a49243be30de3fbcf68e6b65162f94cd15d0116a8e4c9576f1dad1b3aaa51436c9f296db489863355cdae9f1c8b2388cd264bfdeb7a5ae3cddbd6c2fd41ab86bbd6c1daee2b8761163cd226b41d9b5d7e6448f9033605fb315fa7995b68db8e52ed7f20ca8d25a988362e7c3257847df8fe33a5b39ed407adb091294dde99efda8ca6cb235fbe9469e6b0197b774d380fe6a6bf2f9d52d5fd0fa834d243bfab77bd2526fc3eb5903b5e6d9251bf0979f8dc08c969887bbe55c787a2372ef92cf4887bf8357397f7283468ce1cfbf6c8ebb064887334705ac603b396ee09ca35d22c493938b6e4ab0ee8fbdb936d7ed6454742ee8b87b93d36911c5c8b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a75ee716ab45f51ccd70f4030a45f595d671e28aa28d8a9274964ba6a33c0ddb3db75ced86ce81dce97746a6750234f8fc9dc8f7f2350432ed3d3821a4bb70529bcff608e4b02fccda828161b41cb33484d3d755667f97dca7cf6800a61159fb93eb9b17ebb3d3affe0dd5da85c8ac0a7e1f972bf866d6f34715893285314f1bf2a03ecd7ec9ded803e9596c1cf906445fa5fec84e6cb80751939bee091833c5693b2003843a37510558c5fb79ba1459619446f3fe5de1cc0272fde85b2d1079ceab820788e611dbb0c4ca751c3f67971603301e543dfd6664c8c5f99e95baffc37138c483b4efde98123efa571d2b0cb53b1bee919d7c22c631e667afe48f99b5385fdda6d9292bc50025f82fa189a856bace4e1da6b8d236ce311f91dfed6384cdc1edb687b52085b8bccd339f31b79851b537189d54198bf1672f3b40441072e5f88055b1d6429fcc3dc82bafad2b021d3fdaa72141842322a1baa35fa30b5402cfeecf5ed1e357db9942188c259f6cecd4e59a437f76580f82e9e1cca2735e802d82455e3c2553b0f2e0f60906c6e4963d3d63cb7670976050749609016d067ec049f4c7d11c9e89815c3796e52ead8e430a03ecd4b351cf58e5e14b2eb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a9465727809cd23dc732e64a2e5e582c6653e0d9ce926e05e3d32e11f6f589648b6bae46da9e6770bbf71d081cd266b7bd29a2f3059f4dcd12778f9b62cd97be8bac1da2f658d1e3950ae32477cc9ffd3f5c44dc5c103e933852492be846ee4e3ede26426387fd5022be11cd3a90b3d91e48f106f4cff5de320e2d2ef4565cc8446029288ac25952789239179827d4675db0717215b8f532fe001361105d587f598d2272b0941bdceadae968b946a6236ff49cb320b60158631961bc59e6baf6711f22ca6f7331aa111308bdbcf73bc371ea8ac8440766c19f66ac6cf71425338f1dfb9878aec9b6702df2d32ed41a468b4b39a9bf01f44339df8631f146bc97bb0460bfe589ddb3a7b6ef6d25161732859ab791f2bb722cb93774d943f98c2dd2050a96afc39b3c14d5db3cf58635c1afa73a0c433ebacdd3f77a03e8e11689b63778f230546e109f9aaa69bd1f3a254c7c4c05b4310b5dd34b386c33aaf911e434ad25baaf0b72d09b89f4cbf29ccf5148d3e97f72daa87c5c0a4add238fff23279edddc49e1862f60e8e2c46c4de5e971ed6f99d6d0e9b71a7038f272e82e715c46929348e49f19a9f7c263fd72e4b8adc0dce7c61ccd8921aaf75f82ed300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000da5609d34c84b570d3d69413df138587f37a7f1fdda05ed028560dec81fba38ab74b72a2b7781fad434b3ce8b61fb2642c9e68df5c27ebb924b1dfc242deb82b45a1ddcd70dbc48b9df78474d75e60e67fb5c09cb1bf878fc8ab069434ebe7c55017533dc5fc60f0a4970eaa4c2879ca71a27555a552f88d31fb4350525bb80de8313dea27dc01f157b8eb5950e069f0c332b5ac23b35ba3f492811f1a4c6f71d5e102488aaa7143de20019cd243688a567523933cc48a79eb4ae39fe3ef56317305ccd57911c41013934780b0818c3d92f46d98a0cf0fa1b5cab14e4ac9b486bb9354074288aa5b3a76af5298866f1efa70f796076c47665de86d65d7d494b881ce3de53ec07448d634603d231bdcd18d9ba55237e7727570be6125188a3b04f5bd493575c46658a2acbf05ec4c11e3dae8f57db3ae611fbd3f330506b0c8db2e0b19232e6a8b40add96d0ad4dff6a0ef4f15a512a4279bbb83cb102d0e80b627078eac9e8c8e4256da3d20f5c9fe1ed31418d27879322215cae344e98cf9b918f5529fae10caf802e543b72d14489ba3d20338e8c66762891824a83c6bcb5f9b3b874dddd0ced9a136d8d56aba230cb5b7bc7bddfdc461f487d856280fa9d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d93e5b0ab9adcf4ed0cb2602f0db407caf19f0ab0caf86d573a42064a3a7edffa0b9861c905c8b39821f51cc0fb6f432a7b435d3af248b00f31358a2c350803f77ecb89c45f5355f0a19652d29a0753c5b804dda84e77b656190a5516d52de465707327cc14a37f076701f3a27da046b6638286fc2f158c08bda8b7ac4ccdde7b43ef22d27f594ac97cb27b339db1d625847c2644dfd5b9ac4bbb7ca31f74bfb80f0c98778dc28e362477ac74fa5110236d75cc77f813ea7981f4b8c36f2e5e1b4e48a9b8614aa0bb7473d3c858387fee09a70966f14930b0dc17069208e4a4c441d1d775a0f6c22e68d6db48e5b1b415ee1930a2b88bb0a932f1472a1d3eaa9e2246afab374849dd961ffe836106f1d4d137cafdd2077c4a8e771c0d99f6e8497033993994f5789f5565cb63de4f140825e7efb3fd47331e7d34ff143d120c97f3fbfcd3b1db8f15cb8123ec720c89c639d4d06519529af91189f45f744b3cf055bedcb53cc60d075bf36c04fb5a333874973f0fa0e555b9ad162ef180f1d020b0f79d931dac43327804df3a17954604f66f89c21b2125cb70d69d729510b02336269a59c36912d6c0f2083961948771e1fa2c9ec2b35ccaa32e88576a77eb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fa591fa1e8a2558fddb906fcd97624e9a8c0826355bcbf82254fafcce3fcadccc7ce20a55688508592e603e0fdad2a22305fa7deb2154b62ecec3e3da95cbce8305f9a987394bafc3a0ef3fb0d5b2d0b18a76c2941480593eb12c1926d511f5a0ae9cb60bd3647a99507461cccf911ee38fa736d2cfec1a91bcb634373403029a59599f4454ec3e2ef97a1705758944664d69ec0f98847928b3c3ef960d024809887210c7951e5f1ec0ab992c4f69a5002a5542f0302cd72cf368eb9988c9219ae2b1f5dc7da68002e9f92855fd5d130038ad4dc09e452540df80a57cd6edd2b7ae97fd8a0893813bd9dbbad957a3ea0ded162818c935f5b3ab02d1393e757bbf170ca9a9da420f91c38500dc0b3345e6a310ea2ba9d4e9d70f902116654981d26e16e16d477d0072a29f5aae5b54b649fcfb81017201bbc4a0d02ce0aa30a179f711f55ad28573dc50d55b35fdd833207469bfd9cc03e37b559a5a4d5cce5dcd3302a61a53b95993c25ba6137b453020ca663d834763898a356e117e17151d742e70190eb34fd502fcbe282cdd2c56e9ce72f1c6663545230a97f9c8f2ff9e647751f49cdccb2a4811d9c2e69af1d2054935eed0add03269fe6b056562a9b900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a971d226e292a8be9d872b870b8621b43a90762eb1e8f345b3255497d48f654d34f0d6a60570893ed4c017b4a3a57d272806e526726a8238b29aca86dd1aa1c75119d80d76e75a28f3e153d7ca365fc1dc65ddab19b77588e4c4440d142e7fa9302c0ccef839c5d90316aa81e2427b23501bb9e0ff5e0fddbeea0702ef2f4a0b8e56777dd2cda6372ade146267e3ecda777a38fb4088ea6a48e55939bfed8c448193d7996819c4b882dec7acfb6b9e354c6103445f373348caceb6a2767eb6f186d4652184dc9a2a46d9abb9c8c21afdb6ff27542ac9c30755a0e001ce823edee497ba1a6ac1e6f8647f491f61b876464a3c75e343f085d06936e3acbd8bf1a93865c6896d560ea37afaff36b860173c01d1355fd7da6317b201bc430167162eeb866b172ba275d0028dfedd34b0a01705bf91407dc51f9b445426044d0bb627b7445e9c1573551b178b39af1beaf9c68f6e949aa90461f3ea828976c090677e23ff581de874ebccab14597cf0365cb7de3173325e8bc2a984c86d4f467f9257885b9590a4cc05fa00cc85f56c0547d0792d1eaeef745cfdd67e3a829859056569b46535ab332dd0f77de5548b48d3ea5f08dfce5eb780f11851c07cf3cc0e6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081fd48153f72414fb452b43e525dd6737e6cd46e0d28938d8bbd33aba53c46481a0bfb2c70d1686f24eade841bba794e9094e852a8762da1774cb38a1020de116e3a5a40687cc53c201c61a4cacc50aff3318cdfa2f46a10af386fa1dff6f690ffcbdb8868f38190cb2b53717db2980097456a2461647ec65f64e5fc28a0ff340d036006098d68fe98b09fdea48b69baa492445d6f96bed36267b3764f83a20dcf40ae515a72a8f5200ee7b669438c23cc04e0d3be1c43c9307211ba1f3eb095efb6221a5c619372e8f728094808596b77fd9e7c0dcc7045e9745f08035f00827f94faee1783c6c07b6bcb7723f977efd26668852e0dfaacf90759a0cb90bbbd9425df12b59f796fd0d7b9bdcb4e31a334903db48cd4c45b694e9d4082dbcb4c4b477d9d63ffe7dc742db65ca35251d152045b5fd90974a7bedb8c9c2f92a2572617d56ca9069a0655144a7e97aebf6cd6670c9e353703c059642f5a453f3b84566a1d524b7a3ef7ece2ce38aef4e70d6be546ae9bbd33160e3d90607b43583530bcf5abffee409ab8c1273142ac8681f6916d4fea205893f75a011dacc2da8ae65addbe4b9a0564d49945aad7d4e63ef31fcfbced431350fdcf18dfaecda1230000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000245ad68a3416f866623fa69db11aa212e4f85299127361467ccf3a5c05010cbe6a4ed8724900e7fd30f58cf15fe56f5f2ffb6ee34e033038834a5b2575d9fe86dc03ece7f697ddbd8d68f76dbafa7b75b256c594b3d1fd812130dd52c1ece2fb2c8d51549f3c2809d8ead2ed89855347661e8ce6d929095bb05dd01c32843335d384eb236c51d188319b76c81e3d9d09aea109383b951ccbc40457010abc8bfc191f43b6b5df49f7c492d0ab42ec4fb6042b00b4a3495eca190c6ae25371bf3f15b744b27442b6d5e27c61d3ab57b9645e1f334efb1a21fc1785fceaff3e4554850e73704debb558bfba56d6e0a77626236545ca61095b122c1f63a84213966bc7bf8a3f2256eb518418084a50bc290b93fcd3d4b8f24bf2d809fe1a3e47664240a424223fa37df4ebb051039b7e6d28af7101f97e0d8209e4b2fb24f0b566d845d9ff993c6dd132f8837e12cd5a2f07bca5b481992a5cb2977a970d6b9338b8f6081fe58c5c66a192ee58c50c37976e4d65e2a422620d9b08c1b680cd34ff9da9f5ae484f1040dcb0ba3a32453dad7601ddc73329bd49c6869deb71b55094d17594848e879232338fae587acd1aeefe26c48c1bdbf857870ca2627c75ddf43700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f740d9b7d524547954d63cd94faac9d2604936b713c2f3e14affb5d491d7b77bd271ca0a23ff395f1c40d9c5c3b5812ba07ad409fc90cc4b483148f8f4d4bfd4865cada78180880933ab3c6c3e2c2b74c08d6aa4252199508eff69b6f478f132db1e720dcd8073fa10791ce06c051f31efc9c51e874b5371bd8c1b91ae32caf0cad8ef3e2d0f165397b523806a96d0d249e5dfdfaf7e19ea6563a416cdc5b5181e964d5c4cdbdbdd5b0cc3dd0811a4fc631b71dbe2df8d6e2c75c24a803b0a5f5b480435eb1d84f6619ed1e356aaa9c9616e91c41bee13ed3f7bc0890d631b82b460459ff5483c5d5bb77e13645f19676c57d2dcd901d799707c5abf9e72eda1682fc86728b2128c7bccee1c6decedf1d8aaa2306e95124d0ffabfa3b45dba4388959f4311cfac48384c3df6c23025efdb5a35859a2201f951ecec0453efa8bf59b425f3ab0a1e2558441010555c2758fdc87105af938f9f0fe1e9d9a001b2c78e7b26193903f8ed4c2a0053bfef0284db812b7adba85a94d17242f212779d648e9f976703511e77649b15e956605e96de3a42d13200bda73c0929388c0c8990e45920909c28b053a20d8e07b3ba8926237ecc4198bf41034b6227a1d503bcd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d7e975ffc890e7f69c6563ca605540c45d7b6a507deb15cd212649986bd0a0aed0719f9144ffe8659357b899471e00e8ad04aff1402b66bec2b7abcea882409b210febfb750a5a576ab95b82c836595950f1dee005d3218b08f4c2172a8a975b6cbd92f371cad0d55e1abfeba71f2b18cd7d2ef381795486a46e98049f692bd43d2b2634d0c2a17a87c7c713119a95ae1518fba64eab550e178cb6a3d5720ca2cc62a9aa08dd3a519ee2158f287a271bfa55b30dda7234837fc3f23fefe8920380cc3eebcb36dcdadbc7d3277ad3d3484c8726c7634af8c258a56962192798f3e46f947cef6f600d8f5c7350fcd4e39311a038498add33bc8433e7d8d9150b6be336357417980d20137f95b74be55b9837b90105f3d844d371e0340077221aad7ab469a6c486ccebf97e461d65d09dfab5674c48027351dbeb195c24666e663652a09930928cb6054b9de71a60b574df9c6bddf2d461643d779408994a2bac151ed31121f3103f0c7dd742233c1cac9fa4fc5213ceef0ab7bdbea3960406d9e69b3b086405ac618e1f5dbf9c6d3c5b6c9279e838f7a68784d0d014ade2337e9d6543537f216a9e54b3ae7cd3e25ad3dd40e47813d9eeb0132ec1ced9b177de90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7cbb5a4a39d80e46d2a7d036b3f0de3c2e49160b928fa7b54258954f7373dbdc55eaf68e9da93b5124df4a7005f5c2ca39f58dbe42edf5f45e5f47daab6554f4b8173bd36516ab456ff87b547c21e348adfcaa9e17d60b7789eb1e982f8048dfb70ede6b3b97101c47dda8f21208cc4ed67bf3e2e3786ea4df29c8171cde976673e438e96a25ad007b08ef29271ad81205edd4fb13071e962d8353af7598ca2c282eac349942c1bbe0ae0dab8c3a5c8b3f7d30d5565a04c1851b5f07e83adf771db24a29d723d35a74ffa43774c745f2fb1310f8f497ec04a3f4150cce80797e6c455a03deeaf0ab4df1eeeb93724fea48bae299c05c06cf5a700fc7f12b104b10e7372fa6c0fb5db7f0f82ed820f63605d494a9e08d5671867bb22e83c47951b165d8280dc4df9da1bc0d24380069b7676138960cf9c23b55f10c88c123fec38bc282066e0d3aaaed3b796b69749c46128aaf8c7d96797258c443ce522a4ccbbd37e894ca4b55bd01dfc68cb7b1946157d90cc67c670c1f53a274c7e95e29beb6f54282a397375ed6d5d2191d3a19578d9033b833ff37b8686adb54f7af421b297c751d5d6e224c79724008cf771bd249cfa6ac29a2bd8548e1578c85f02ee00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f1bbd9fe5d3cfaea8803f3bf4766b33bed5dcf85ea80ae8f84de52e5ef496cea44ebe06dfafa140b41ac0233327632a26492cf490fd04f66afd92012f54de3dd52d7cf49f30bee30e572af5cb062f8451f8ab202fa04417d906f403c2e30fd0d29a1a5aafd4f65b30d6176e81f430bf0fa58ddb9b77063bc8f210c476b754145d1d041acf6ab6e0fa3212438d5fe3281adc9a3f54f2c967910ec71ff95a6af50504da2f14a37cc9338b3f58af69f52fa1f5a469f907721dee0b4fdc92e37da66fac5eb525471c9aa3dec03d9c5c9c23df49b962e1888e165d48831b6b2f2758544e4510ef52ec46f8f2792caaeea79d6eb5965d2e782f74a6104af5b3374740de9d81c36683a7c81b3f9e98cfca1cb2beefbcb761863d0fb1361823da5f798eb67a5b6ad3b1ab81cdbd59fc4e51a331c04fea1bcc43aaa56926f7a16b2a2aed52034934fc702635d7fd2378ab755f1e237103af8a3a2d8c8620588bebfbf39ae417b980540e1d20ad1dc772918fe78c1776dc1cd76ae5f025a952ca98b7c48f7ec378c5491bb01238b72b6071792087452ff40be0976803b7e2a50a79f28eb18ab7cdb232f35abf9f172b52a06280ded8b31c11f50084c052068d8c8e8d875f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000828da6747ee33902ea2a3eaa1ea8132d30cc50424ef885ce6d328a4172b0204c7e023faf5b49db0c9c12dd0642858e3e067d69a1ff01b36e95fa2a990d012464ce3017de91a716754a1c5c963f5f980e1b5ada5588fe6be50f97b8471259dace36e5c3d56ac9e3ce989768b75bea5428ff9b6e84be5f30bd253918202e74142d39090e776e29d4e133ea9fb3f74104af9837551886cab5cdccf81da652073aafc10717f0365b2698269e742c2bf825399ba293f83dd41c3421ddf2a4c7eacfc4baf81706ad141215b7674346d643a24de6636d1e554d4eef2e75ed2dada1a7f3a3b6fbbe7d0b7da7fc00aff43dd87ac405eb727e8e77c288673bfc8bf2a6d5bc6996a2abfa6586598d78d9e7d119e9cb1b02c4a7b17f2f971c9fe263947c3bd8c40cca45e417bb0bb4ed1b9136df5bde146b16b984c8426c5de0439e663c4f9264d93215a7f7ee16e875ea76285aa39dd4e6074de2a4edb51f1700b2dd32b8a83ae0ba2b8ab0de0234207a5a48528cf2dc377de120d7f1389c72a0d5813b05e3fa16ea2343b2a1f96d00370396346b9d7f098004f426887cfe402ef4ab02368c9dae5b26e663f185d98a6f65e7d0dae5a7ca9ebc754d08171d22b3903e20224c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000819afc68781d4e8f22715a5d585184abd1d5dd9a7cde20b71110932cb753fe8f6cf4320764fb6d6da24fb5b3b6aaebf6e93a520246d67e0449b470bc6fb6fe7f25d947c77e7d78a66f175f0477f8c5067da822884ae43c27c66005cf5e5e999c46e00e48931b74b972f81bbb2f72e68e132d838869bb2b336892669e9c44cdd88350af7c6683863bdcd8f04d535d1bc6b38cacd3bbbbd64cf3093d3a5088194069361a589a2c96b28c7b2459921a96fd4547f844b14c7583028532885726815057fb1f23ce6db9d4e1d8f7c294689e81b6b25f40f3d69956a07b666b582654e4416670442dc44580f0575f3a14b40b8f36bc4b7ddda9e93fc7c8dc06c1249dd1678238e7724b474cf4655dfec787d5bb680fe12c6db5454e4ea0ac66882490c7d462d691fb43f4bb7142362f4a5f984730eeedb001a06df0228c28c56ba624c06cbefc16b0e4818e2692a7461bdc0edbd96a60a0d146ed332cdd8ecbd0c4fea494a7bb149aaea9381c72a4b71dfe9cd98d5009e3be4511aa025197e0aa00e28c2fc003443d80692d71970691de2260c780569c390a8f731f299b521a550d65fd1f961d81d75d8c2333be6120626b52ac2c6fdd2828be20677b13c52b4a8efb69000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087d310f844df3b69147ee4d911f00fb08328a541e5aedf028fda3e791f3dc67a54ad46427936e47555c02fd48d7752fc4e2f9fed5fb7d79ef050a2d003143e86d83c6baea93ecaa5a2caf1fab06fbeb0ef5cd594cc79a3e35f7a88088cb4e974ef7d465b40b0a03531f325ec35d92499e0d61e33dc3cf2d6400384c60dda462a734d335012c1a97a889bbe645861f8fd235e69304906379ae37bbeab880d3306d33888997d04a47cf5b4a32541c1233930e7c0ad2609e9ad30865ab5b93578e8c3be193b1d92d2c5f06e65f4af5576b4937b48c67ef912216bdbb10bb88d2b413e50b570268cd14a4826a50d7ca45e9b0f588f03e3170ea2bb45708fd703f131d66503146693ff079f43d9e67ba34cde671a52dd9631fc9cb64aa1f91c008de3ae19a8672b7b5fade70bd8204e013a015360fd329fd193bfc95d1c4c4e49054e13ae0b2a0986bd2c597a7691935c151d6e889a1c012ecd45831f470e275f8252b33061b7cfc15923a5c647012833cdd2f7134ca857d5de8772f157cc12e3e5b8b24cb74e8f488c3b9ce2dbddbcf3667da751539703313f82184eac89127056b20fcd462066ea77c06c9d65efc52882834407dbf06f1c71669bf6c6d18c816bae0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad3080ef01245e39f2bc76fe2e1e6c7a1019698e279d73f95ac1c8b8c921e0d682dd8930f5381b8d2315c07a2b58d8c7e54b2fffef6c9331863374813f59a481a1b94de117490a0e52929e716c91c6ba00358a322fd59ef560b39682b652ccc8d37354128b4dfee9d93bcb6da453cdcf0e05dd6b6a43e41f3f230c818945ab47969429b0d6502ce7236beb841712cc7e4f486339c715dc952b13ff6bf27e47635b32854295a00460cd4d901e0547a0accea7873516723b1e0142fd3b950c9338d89e176023331f14ee90bf0fdec0f5a0ba690eadde0cc5d35aaa0ecd3de636be063dd94d135d61de306574b6e80763d5fd9fe4c4639831b5afe00e622b3ba496579e7500918da978f4504abae2b446c4d9bb890297049d71256cf2606a5de6ee4ba469dd6c7eb4809a96a880adaddf596596e2127e1fe7a95756ac9b47b08fd3da7f6681f876eb27ea7044e49c31bb64154a73e64001b47ef760122f5a613ea6c660310ea83858cdfdd36fa72250908b43ec820e2a7adb34d645303fd67ef0c0ec36eee464718958e801e869f102453c4218d41822b4572ef0ea707aeff87908c6dd6f2e72f53308752729c47383e8804c681dccf3fedbcd9d4b0cdc7d26e38b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095cee3cb37e5b1cf1049daf740884216283a78fe6a89ab7653f82902eb3a45b4aae68b08eb39a7c16e0442ad5edc75271417c3cbd563247524f12bf7aa7525b3613e5ef538280048af2b11765e1c121bb0e4f4b5c87e04458ed3d73ba325ccc51af2ad0330ac8e107a5f836122e0faabe11c51600cc941c9e612ca17528e76e07363f63068648175d69ae40ab77393bb3a540ce6ec79e3bccc1cdc045b0e723c129533ca74c38f2f7ec3a01505e897add0cf087768e34cd1b2e3c9cd84e48df518a22d49029e244f225b0a08f4a2e2b53ddd8eee47e2ce112613a38fef3a5e59edffcabeaeeac7c2ced70e8630f2062841b3af54989e69d10a29cd78d18d6152bc7451aee31991116866d12b2823e63edf7e52e27ea0b31ccb7f8504620d15012c1621e9b2acb1c70d2ba5b51dbe828b25e94e3629a0e1943acc624c3152882a3fb46413c6e107ce8343de616b71f3b1ef4a332d0377de6a63dc8bbdda7dfb073725c8e23a6b6f238a290f63e5a38d914e0ceef037b68c55c06fd63268fbb067299777ef59f120c72ff8cb14744cb54fa90cf89cfaaf013f2b594bd60d5e7bcb9d7cb6529c48dfefb8fef2d7fbeaacda7e6da61add1056e974e12dc82bc599ff00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e02ad3e301ea37f7c5b336aefb45cd6aa5b36c8466e2b89572873b51efbd70d0f41cc8021c68ca90202808f93ddfce50aafdaf10643d5e7c5b0c496dd511d2574f5a7b3289f92edce281841030b6ad6526fddf0530a7a8bc51a68218f11188006e0d74dc8d232d2fa43076e64628ed46f66fbe269d73fb87236b86630b4f87c3a1af605548c7a3feccd1be182193ea4c902db4c743497d43f537af502f0060b7c52ff24a62e0b0976df91c26065aed963b41240e3f92fc9184c73959b5c4d2733be6b1894d929f33dd1f9e97287f9a8dd5cedb7573e2c46e127a78cfffc62d9c541fbb90f108005eae90e6c3a26212e6632b786aa4336906e2593007a9cd73865be521a7a33f595b93d8ea04aaa77b3bd682ff2faef5e1112153b6c9d809b3e4eed3c5a6fd761efdbef3eddff03e70841cec726871a1b34c22af63b29cade9ce146668ddf0431cea5d803ec7f6285c33bc8e4a43f674a962bf42631ce0d4307ecd8860940e28f37ee1d3aec5f65012c10dc6577eba4ab1629004d5d219d9cb185da1abcfd496d9f26a6045b2ad42ce6349949cbbbd7f1d5486dc8ee93a978d412b46407c3cddb26b9ebad26fab8d740a838f62cb1b98c96a1a58959287a4ac5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021760a4559303e4ad305372d87fdc6c1fce85659d3103774964f7ede351979c074c7350b2d911293394800c2ec7815143c6761df0c0821c25c956531f0d3401259273cb0263c40431f4ed6cd96787b7fb3164b025f67ca59fc2714162740c678aedc1989b59b4fac85d6bfed03cc615c4c44283f2a277a7fdac67db3d741123d302f9347fd21565004bc467bdee90876591421afbce3b7b596beb818f29cdfb789783bcc15be78c76d71dda941cca0cdae38331da0b3728a94d0226c80498c7945b6aaa3b0b081b3e4d9e1901b6d02f9e00ce0f195ac295105ab46ad4a5c15aea0c0e78ad95b5c294b28a2f768de13e581ab83566b96ea780965132fc5eac0d8f2639a0b5666f2809e56dab83d47016a9454d85c1136d2b43393e9e8a5e87f82d9b336f8ca0c9136353d4623cbbeeed3843363706c06fb266e9417eebaa8ac6dcad134b67b1fe6118e83cb722252750dc5a8302b3c1c3037197473ce9528068bbfb2acb288e94941d8bf6386f1437b7b2953dd5f96d5f910455c6d42c586e602f5d95011ca550fe5a0efd9676aa4eb33ae1af52fec89ade4d814fff139f3f89c3a1870cbe5919d2c6c5fa2a267dc839adcbb4e0c9bf2c99b76ae48a07ed735c50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089f7bbd733f468e0f9fdfc13d0900b8cd4ec478863ce7eefb3215c493d64ceeb42b9f19360d9a9bdadccc6e2c3c0dc624c6246927b6263dd2d4bb16f99d39af12da4596ebaddbb8bd6832f381f846bbdad83c771fd14253f689db967c0f6b4d8ec4828ba144c47b684a9c14d6305206c672ee88964bdb0e8d0bb7bf49e0db0c0aca727bb2d6371a396597a35fb32cd85412fb0fb5cedb1ba9c1a9ee674c28e020cd32509ac85bc2bf98254058b36d7ce54b73bf8c6da0194317c45aaceacf2f8356f977d6946050e237b9dc53eb7c435bfd9c669fb2afdbdd2396d222839586708ab2bf53325f626b65fb015856a02dcd50c616496572e8aaf9ce1fa963154f1b5be0b2e9d6b865dfec3f59cac27d1470bedd28a594be98dd8197f0ff20d01182ca7ece12fac445aec295ad99de72be647c273a26f58fae8a160654461d52ed0f70f972be4de9f2280561cbf4132066f17f2d5d7414b1fcc83fe0bc382ebd89b5c5780ea3ec387a51570057cfb7afc3b8eea46cab32920a9eb2e62a3e90d7bfaf9bca29b1f6854c9431f3a43b22cb0e7268963fac142f7339ea1604594cda8956f75f212472b2ca687a58e913dbd62bab609f314d2235749476fc8806487a6d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008054b565c72c7053de2a088418022aaf949cbb538bec84d382f892872d74d00c6d0b3fc76527156b5a4870ef4f1dd589cb95d54401a87f60883377a8190913f75322861296d29eb4ef68ba089839100e2ec1906ce463746db270ceb7736571cdc48aae9b91d50caf805374879f72119b097aa82ca05ca67ae090db2cf8898fa77c63a148986a9721d589cbd7734c8c744ff01d1a474281a338ba08ad7c00a71532ba3f6a6bdf8d45905acde860865d2cfe3578304ca2ee82a989b6f7bf145ccf072e788a1fceea362c1a6cdb7de5ade7c3e4504d81202e230859570cbb6f4c977fbcbf4a1ab24053a1dc876ee5f829925c1157fd2d5635b3c0cbe58dcec282617fb60d1b9281b33775b998e1299e5d9fba18a14891933fc8db673b1a9798d960c3073ad2aebd41bf02e17724c42fbc8cae554149fa15dce8e612e17581134c2359844cac97113957ce55dbf2b6af8f5fc969f8e593475e39f0264894f38b8b07872a78bd593643c317535ff98b44e37238cfce6f86901ecc713162c4f8b77832cf43beb6b49b109dd08eba95d4adbdec41d650cb799f0673335cb0872f334324a6e6925962da4a088c47ee4a3e6cf454e8d5f76b7cf5cebfa922bb72296e76ad00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa730c833c2d0f1c3718ae4f537639318477ec940d17d56de66c9fed302665b054923b4f7da8b64f4503acafac676421ee414250a6e556c65101821d9cc0155dd91531048acdbbfe63e5df06614035e2ff5af95ef4bb226ad0613627326f95cd0b40dc358d978d8bd29c6ecf3456cb1383c02b19283a87cc6d89922ceefaac5293a125ad8af1e24d83b37aa2d549593c7521b69aae03aee7800a09b52b348c509c37b72ad93f9900af1368b053e01e079ed1aff69fccd33ab75284b6e137b9ceab92ae3d47b3d8de55a591355c2a2c1ec45cfb038fef1574490871195184594533a4ede792171622f8b0c9b5883ef2e98b20b1c386c7b83e6612758d599adaebeeba098942d9501a0043e582336b74b353f9e9a40dad70a8a508e05b0ddc04c1d6e91874deacbc2331c17f9a21364c11ae53dcf473bbfcefc21547799d3863d1c50b9ac617cd5526fda9fde60e4bc96c6eb6e1e73ad41c2ccb5908d66bce0b00b3649b7fbf8f909221d15c68762b4f1797a030c6e9cdfd7537ec56510f8ba13a73796838b6b142063416dd941e370c22be5025d07701b31f4ff2800d01ebd2a5196792d24ed9bc48286d13dc8a8947a8193ff788b8d9b68bf0ea6826cc4a623000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089c50c30674f04899dca2a408fa18bbeecc738419b9a207f1988aabe2848eaadfb8008a20beb4995928d875c7dcae3e5c169a788382279a6c91f1567b98e6a1549002cb53de5c7c27341a0f8307cd5e9a61294ab6176178d790c9cef431497e0e46a6d04ff6ceb63905295dd1a98ac74361402a3acae42121c0ba4dd0b5a2146a88feb89d0c978085cc484f58e76fab000f56bb6de133d0f280cc73dab0bd9e3a59d47b7df68edd52d9d6e629159de71528d99946f9555e2b7b0d0968cc47b396ba5753bedcb18f88e7eebbf2e63b2ec9dc26c201910f23dfb0968ea544443cf4c20757ad8807524ee485e4b7849e9aa6fa41e073d53e458b8a7ea7796dacef24bcba2ca3d7a1f84dc12e01a0ce3023dc7b290417d1a1f501b80b8c7fb91dbad7dbaa43c203ba6ac5a246b5d58bb736729e5f9d52725a04c95ba24b999dd4cc86704f624f47023e57e978d559a45cadb5c177d4b1084726b2b3045f03e0fe4364ebc6d55e9cbe792cb059ad59c55f35dcb4dee47f4a8f28bcc71a59ba242532eece64331fe30a5dd7c4e114af38e237c064f06f8ec8b2c75cf321c6625d42ba4e7a30791ce8a2b1f2715aeff868f70792450c1a4749f75bdfac2af73e8262dfc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6a5b7d87968b7682795bba27d518a4699b2190f9136b21cbc0964cecf06fdfbe3ec44d41fffa5808b78fbf1b101599acf0ea579447651a1cd40f099f6f64d0ec624c13fd509b994a50156dba5a255fb85f92c991a1472734822ae353e5c670f86d9fd3a516446dd09a4b210b7ebb52b26de9ff33892fc34c057c6afcf5a6ff0cce0a2679cc2f5bc165f4f1d68a69cff7fdc5ab490387fbd5e5d0017ce9222f916f46b3c30235134472e6346fec7d7b36d95ad9110d0b748c469e00dad9b88021742d1a0800281816a7b3507a94bc8a6a774b45e9eb18108c06b21c114c3b57be05694252255c729159b0acdc0c2beff398b6aa517e55ac82382c70781eac08657740a88792bf53b18c4c94c33252b78e67378f2f175c7aa51061ecc25cd7968d217e7308094c33c1b5bd2123820a46da56ce9926688c02371acf38e092159e9a214f0c8dbc419310ca3170c0ec380e729ea8b5e39941a9259be610cb3594485c1080717ef8585edda030214256ebc7cf4b8aef1798d4354c7f3b8148cd7fd82543a5ee9d05b0cbcd40f31fd375334430e5c1f8565088acf2b3cbee30711fa1b539fe60151f16ef153ef36ae36b506720e6733a70ec9febb883d859db740e6ec0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a62f53bbcdd19475fc2d189e06163c86b25062ba9f53553b4cab1199dd367248b2778eae2fbbd10970705b5ce3df00f47a368e5ac1eb64f0575e0c03a58b1085769c0ec0b1da8f3e335b62baf9920ca0bd4fdcdc7a639e32155fd899b335b7c0fdf47658d9f385b23d8de7489c24cbbb04c890f71dde346254cf49b607a9dc802bea2b6430d727c530f5e18eaeafb354fda6b1e6b3661e20887b452eb0f92fede0b04492df759926e0180a7863ecf7d7ceede94ff7c37dbfd1b4e6304ad4bc9052088f42b8c71ad6b9ebedc2d77319ffdf2d473b03705993b3dffa84f5c1b7bbbac72c801e7ff88df2c53250c5146873eac7e7a06abc146b0b08a1202591043514c9223cd901e8b8b84dbcc3db31b82954233c379dde378af14ba868e9d9be92a0f9262474cbca58d840dee4d77b4f63e4d4403fdfcd06d5ac122646b60bf96cf459acdea9faa859970db36814a8dbccb76b81a1d1860c4661585153dcbd98fe7b10829b6feef9d068935c3c5265414223371ebd21a32b6cc2f44e781ee1245126a6fb27a560684bcde9884ceed03268f7140df23c99c73306a11803a5b77dde2ff816cb3783102d8b5a6d3d46683c147945995d477d359d2b2805b168cadab70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a481f5692caff7140bdea3304310abc984790abc89fab116f9d0656e2f036f25bebac5522beede64791f318eb4899e661c59c0b032bbb7a1758ce41fd087bb5397ec285bef8c137e014fa942783e37053768ea811d15d6009ab518861f6e2ce833b78ebfe216f8edfe6926b98aa0fc3e396f3e0569c96e7fbf9b5366560defe357dda41f3f3b91e86bb4120b1e93ae57c78d25b17d01446b73fa2a1666bf6387d8df073b8166b37d10c2355a711c7a5faa6c673d041ccedd53625904eb99bb3ffb46c201178de45992ae30ed230c0ca20ea80224d5cdcc0ed1995cf9cfdfbea935cda35ec72a0119cf86d5d2d555569851cbc86c27d2d5cce0126171b30fcc92c14dac30e2137cec8f22a0525adb52d867f37e079d7ab23b60fe7d7e3f5e67201550e35c41edbb9373af88b9754f33b8d4547123a6652eb01d661ad0700d97b8dcd9861b6d42b114a0c598031bb9eef62e22e4af2df20a4cd72ea2a56127be9eb817893302ec452172ccc4504781dc44ee67afca11badd699b361ddd8d3d0c18b0e1f4fef61cf6fe440613b13db463dfe0f550b2e676f7fc9f2042c828169ba383be857a0b647ea0cd7e03be97b7fcd10e12743dd92531051756ea39a9ed9d940000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a85c3f8f4582f17efed0ad0a0428c27989c831a942b8cdf2682696578376617a4f338252c02c4e218e206714b41bb0f434d1b784cd45e0cd298cca3f22b9b1208506a21adce428c6a8e08d82b80c5615d7e4a1900854d8253487f46fa35bfd9ca1c10f46854224603190d4938993c5f84240e969dbdc9d440817049e4d0d12a22e4bd231ea5273b537f33c31a0b6ecf50b5e95c42244f7c70b478d22d48ff6a3a6c1034f2e5878b6171dbc7b42d1d08999fc6fa752ff210feea658f1b7f9b025f5516d18201c4118cb75ce8bf0fb4b0018b3443203b35bdc50d5e40ebf2ec9f1440f4fd0b193bd7329a2bf416f5d72669a52cec466317ebf80bc5b000c1ed6025b17fcf49a779bb1100ed1786626a4876bd58c4e5f978ac9143a633c1c4470fce0baf0c0813321a6343922a5d91b9bb0b84ac665cc63c3355ab275d58dd366c9729fe4bb9dd1c4fb90a31f5216c149619a6ac11ac1c8bcd2170001f5ac0022642dd13c025d55121234fbb5b3e42c644ff3abbfd96c88a9ea59bc5c4329f76cd0aa15cda2a589ebc6edb2ab3df7d9e9e17ad99b595f3be2678524f7cb8baa2bef5c2c44443cf97b92cd33f1a4c0cb8b9597222bcdfa5f21becd04835d4992ce41000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088fcbedec5de371de181e0fa2d6249c7a7a72bd0c87e23049e584ec65db9c111cf46c107aa2aa0e8f95e814eeccfff1064515b1209a2d61dacdaade7348a8fd050a5e407668b6afe43eccb58111cb15f0e625a56b83fc1d8ff8260babb4cc90745c33168a4b7cceda83dcf18a0d194cb5c9c18c8b639697213be3fec130d4b979d36f1b884e27008f1bab229736f614639328523df00979452f6cb18db0bb1ca350ace4a69c305ab1d45c3001a5201bb7ba0972c42ef1ad187e24e060f98a96e99fd78cf6f9e6c0b4f59cff62b8c59a15d851d4e14f2ef11c698a15980002c8c7232f8be7a805bb77604d3daca1c832aa63b8e545f84dcf17fa8c8074176df84d53a4a050461cfc8a2f9b331b2d517de13d2bf12bf16ef7a69e58d61b2c5e9f62b50eb8ece9430f7e22856bcf1061e021bd376fa70d6213ebe08a7f6ccee543f08e93701d24c65fa9ec14efad6aa74554e177cd91c4f30a9993e39535808e0f44ae60eeba34ea3c9a9420fce3a1800767cad04a31248bc98e13ef63834ffddea53a0b9f8f6ffa43fcde0f34466fa81acf4c21e11387d49436c1aa1b23708f4a2ff003ed1cb7e2427cdf6e1ee0a19ea65645512228295cb92d427a5a1f15061ff00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d98d94b461682a2823138ecf090101942506c3bcf2ee1595eb0a7365e161e110ff65073020a7eadcf3233bfa1de45cb1e30907e6f733706e94d03a0131451f210ca2ecdcbbff68c74806db1eb5364b6e8fab60961c7d439e0424c474572a2df60af285c9c3822553337cb69128e2575f5562f526236a362d5f4f8bbbfdefe2b159d5b2eb092f46e46128409704f1e4b2ae2a6074fb56d5bf50c6f9357ef2b81f2b2b665653e4a39ada3aa2e6fa3b6ccb971f5ec76779bb3f849782b2b543a05b6d2eb6026ca798ddb849abf5a86833fbfb4f940db99083728782d57f78e892e5c5a91cdc325ba0d302a86e36e9ba1177adf51093ad50a91efd051a8125404ef6a53bdfa03db693a78f406d2fdf3aa631596c7aa549643eb3d61e8162bebf99f03c1dba3809ab258cb624f0d8937b40b27f29475f511951e35026cdafba5bb9282e0b64362227e39201d65dd54a30e0e8eed09ba7e101a9a96a11d4d61acc5ddeb7e81d1242e3c35067cea0068b3f04e8eab53b647e69ffbdb91e56535712d86f21bbc3bdcfc056346f2a78618410668f44b7a1ed867b713f665ef77e1a622bf0a1a8817c493783477e280bcd40923bffbd67613df98fb1a8e91f7dc84b5c3b800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000957908f88ea2c73d0404e3220b13e9789ed84b0e9529906e23bd3970e49aa793bc721ef40f440296aac5d3b25a1769f45ba507b6be8fd8f6d8031310b271734d352b3fd39f81e2a75c7ad67a34ddcc8ddf352c835486912f3edf7fef722f89d3fff4e9ff164d1a5e466715190d8de88c1357bfc6016f27022c6ab92d8aaf30073d14fb211d5d164f8158a53a4853d9f7c537836b1b29dd1cb8a11875d795f42d2603b707b5c0995f87f90e44c033a10cf7885cb44012c2ed1c867103b1c388f345b64b4533f290f415801b2f29a27f811492a1ea9e83d263d063771b70620c16e8ab6669fa607f9adaf4f159e094a6bd80340725f79de66152f768d271a30ae608cb7e080abd41dd9d354f7847f27e9cf8d22d0a586339830439dd0c361a259eb89c2f5ed192c0da0256911fe8e03a693b595fc3af2259b7f2d848abf314043a0ef4408436c3c897b6b009907673879ad2ed757409b65bbf7d506c0cb7095ae797a883171e440b4521e410039932bcbd3a290ff1db0928b243c5913c5193b1fce9a8af2f43c13398f744d528c7b11bcae1545b6a72c41bf52360452fa185779401920fed86dc1f596348b282eeffba470f801a5f6c9b74a707fc717c54ba8a50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab20f0e360e7ad6968c7745ffaf2aa0f5b0f5a41d11f13b859888958d93bf28207cf2e5cda4476a133c4f913f19c39d4427f9780cebd744ec0624b4e0aa9c78739dc53d8690f545ed7506c53578b107b18d98395a0100bd20dc0503e693c71efec5813b219a76daeaa45e5c46b3da842a5b185d10356919ae70276ee24c5df4295c13bb70a3e8e2c29cf52d96950e0f92498f421881cf69a1b1a4429c131bf3d6fdddb0e9f7da1e157c763ebc2fe645fec4ce114f8d3d9fbb9ed3d5bd8b43ef8ad32d74e4170e1d195a0bed394ba62fc03a0892ae598f94bf85123a151fbeff9223190b3885e3bf5ec5b1b7dd92f2868c49f15f876e0463bb5cd0fb7ed8788105e2d132b2dd0d9742fcf0909e7666f5dbe5f634a170beced29607f2134abda6153004ea98200cf2c53d606732c4b286661b2fc2d1699acf97e9d3441b022e639a1670dffa3bea3136c89adf802535821d410d257fc4de802d07ecf5fc79183bc6ba253f76b6dec2e5138251f060e14e7f34ed64669c7c943786707c8602d967a379bd4aa69f4aeddbc55664a0d7c6394fdc38c228670ae843d4d2d19c56c313e9f489cff83f617fdb807322c40b5addf12f6982939a43d8f51b6c6e054ebf63d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086a001de45daf2308062263f35ef409da3156ebc7ed4a17d7ad80ebcc06964ea98f4f37146ceaa624ebe4c4446067294397d5eee8538ef7b9864b021c17f729943191c9670a33e588ccfce4bd9e4d6e3947238df9b393bc13b377dbc367cf45d072f47d76b71f22701469f9311347217d015206b71e727e54f55c3364ff2e07999e82cb5182389da74e046102bf72b3e69ee05bfc0d142ef9608dac603e79c6d143bbf1095ece746719a103e0752867c45aa0098087aecdf6e5a9a6b6f61271f1b49bd5b708aa9fd3579ab445421d56649cdbfd63cc46db69ad080797c7b8a4aa05e5092000b7a8eff62bae54a36c25b536fdca395bbea436ca0c3ee087a113719008f25e38338b374d0ff9e2d760d161a58f0353449bb83a0497733159d843c515c9b906f48e6eac34e3616630634ab08bd33a5ba33794e444c7810f82d46b09b13d502ff60722c0902a586bebe1f05d8891856572b2dfe0355dc688f78408bea7c137fac8fe016d29b7b8edcb373b7b24171f86da5b79727b911e81828cdc454a5951fab71f9e6c9c89df630ada354b2e8677f4106a9cd1950cd532b364bd97f3a35deea8b04af00aec4b0758664e77350d4e3d69cf9cc7f5a18b53f717e0b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001700ebaf86387a54bbbc7acffe5b9b525ec71f6b634f04b8abe7f3ca40a4d4fcfbb53d3cdf2141888a5cafeaba18d14084a6d05302f81e396c4555b49f2b34ce327613963b76d367f950e79040311f73a212ef38fe360fb3e2623cdffa78d4925671e0687e737bb77a7cf10bff50719dcaa12e989587a6148e107a5df3c65ada2fd3da6b9e1a8b339c76b6e4d8bd789818f7310f9e32e3ab137eacd611e00fdc85caf55b0181cd60e3613a22741f2ae78658e59c7127a059b6f6fd5b37fa4eef781cbdcbc32ff48f6db6967230a08b7c690bd863ab3a0b9962a749166039a1f6fdb9e620d56a393804eada75b86859ebf5c4daf23bde3c11f15bf497bd2064b5427f925a1e7882d93254254ede33b8eac60f2235e37f1a8d57a7606509294b8232b4aff4b2d25fa5efecca69bb9c09975edd17c241838a65b90e1ae33435b27f4414437a3eb523142a19faae97db6ed16f6f697e6bd854f08cd9d30cf7903427972e1d60ac31f673bbce458fa37d7158b3eb0db4b15dd76c14d6efec5fe76980d67364833ced4faef48c13a62245b6dea8b323ca0df5601f48b60685a95db75ca4e31a62c65c5f4027e5e01be8ff44d6e3482d56cd95f4cf82769dcbf84be53a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009982483717ddfcf4a947ecfc95225103347954d9dee0dc350474998504371bb1c20509f6c77c9c9456ea79180a9d4252087e66d63cce3ca4709f344f0a65dbbb976e10648eae9bd79c9ca3c4332c8b7bfe6703f6dba33ecf511b32403ac94f009d22c6260fdb5ffb23d3b63448b848470dafe25af828b59033da63b76f237dd83293b243514089e0ec0c922caedc402de7f3558188bce59e4a9d171209d6d809df9986c229a3936b32dd1ec74464296f0c0cb318cc01ee17f87140a77657e186ff7bdbc613ea218418bdc6e998109468792aad0a9e065700e4dd14214cf8b35883fbb5e5a993dae571a493b5aa77532ee5b5a2c180d52cc4d11e90569097eabc8f25c50bfbff6ff59a4812070f5e8d4fee8eda775ba6815e5a213d08156b9346072b1e281da14bcda30567ab61a9f4f5354552255467cfd167914f422d0b339ac495bb7241233157c788e11aa064a99566fdf347b8fc2f0e156500686886caedf97328242d39a8e07cd48b4163b255c11fe30a2c8c3afac007a5e8b402a0b846f2c2614d94811f5bf4c1843024266d0bd4aeb41cdaab5bcdd8d82bf0e0353148bd937fe12e407571a4f15e2b36635066b197d1fb2db61d53aa29a1451bd163f20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037f97c2ba2a940797a497e3a547991190546726ec835a20dd48c8324328d3f2fd0b3beeeac474062ba278f2acf760eacd1564556a1dea8b1092893cffe6e080367006f25f582dffb9cfc0298b62c531a63407b4cde916a3d9b13130031c6a97a999304e993747ff657ec09723017996fd41648b9b532750849b85a47802267eb15c02279e93a0eec4676d9634aeadd13cde00f211445d97782cd3f8bd993dd18f1b0751025c1d072e6f0ea58d53e0fd48f23f65b8c8e438c33f6e3e7a5b041ac7e34d68fc9014b4ee94e17dfdaa8095ac20dce5304fd51681cf721b154c5a4c6ac9451521e581c33201a4d1184ead13e3b1944d02421862247645b35f0c0f744bef5cb416a6863fb0516610053d3455e46979c18b2794bbe2d8e3f32b2e801a9211b680dc3d10479d586aa1838ddbd4459182201828a54494acb5054f8e562e59c523aa153f452c5e8d4c7fcc7c65900f6f439f38601872e0009b56d44f4011d8006dda8f0d6e257ad3f809646ef7f3d27169f9f5dee2e2403c7e0570c2a89ec730cc67bc5fc41026a92f751abd247ab63ce3c14f1d2dcd62160dd87d0245880067f51faa9792138c1db4b40538cd12b6324076b3ddaac84939701c338cbeae00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e1fea9a8f6e253555842954adbea55d878d7d9a6f780736b79d232da8a20b7d31e32ac69085511c1117b8ab0c72f611a009e8db6efc2b76814027fb149847023fc0a19b5bc8fe3c459cc7f30083b78c43d1abd0214075eb82643b496159f3fbcb29ea50f2d23f0748b60e154afe00532029fbec7e49b315c450ef995913e6b55a4e6f75f1281389cfc220272a5508233fe9285c62f37a223f703c7907f6b0d394aae2a406b037ce2b741c497c799d6983c6f2200c10886d6482baf099d90c3c78792afa7eb1c469152385ed9bbf1c525946d13910ef8d56e3861f7a5f719f70ec6c095d35b6c8aff871b870d57bfa1b80ec826bf628d2c5b0dd647187ed9dd49dc97fb8c8cd26457db855a5179b268ea1f879144c4b6da1fd1ca6be8adfaf97d0fb47786d312a035fe9a62c224fe3326dc7c889b3f8fd76c4590adcdf6080707a7b6e609d09600282986cf67a9ad9702a29d90a33e3dab78524b062304aef97938ab95c3d19e7bd39dfd40e2e476e28b67dff680fc4eb72312209c55c390c08a5fcb1f1fda972f1d52a5303f478815ce53b2fb1d89d991903d29e42e3268512dbb62cd779b66c40f3d40ca2560b2ff42b933d39940d03170095f9e130992e2600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d994171bf6839f60cd36116816d151556e7ea50ceb0fbd8cd9ec3d6b7fd1addf86dcb0f3e85853aeadf6470ae2eabfd8326b425c7c497a89732e9d41ba2d45cb1a639eb8d2c1c5ca8864c85699874176d88d458e7d15ab8af51f109321b450b0ec89373557dcf1b206f99f39a80439d0db4f61ba5e1c540a2e089560416e65ebcb49537e769c450b2692c9aa9b7db9e015164ddcaba4c703982a9210a6eeee0bebd31d4ba119e2707e54b94f060f9801c22f5bbb0a802b2a25f4f611b4036edbfb069898e6963ca66e2b5625ba2fd743ee14728024a40b290b2b0da2249ff6917271522771a3c2ad57315f3ce24b513e3558dae711e012d4e05f2916621855ea8fe0aed8e97e61d062d41220910dc1d81b36235827443faa53e2a819b2e5577c375a365b532ee7cea84ef5437db7262265fde5ac726ebaeb48eb19d9bcefd36b818df6a30f618b721c14fea586256d4f9bc54629d9d178ccfc1d3819611cf9e566d1ec2b0ff950abc8d127810d76cd1637c2a1545232dcd01acd38df00f6d43d626fe71e98086c142060f685e023be36d86c28d156e53f4af1120489d5b8db07ce02f795a7c7cf4f7641cc2bbb3ed32974050d951e8c64660691b3faf4452f50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082b4192aeae7165e4876ab57e0eae8181b6ab63e272b5d8d4f721ba6d0c39ae0567bcab007cdee905574399aea4bd6608a6ff5f0676414eb16d4521bc1157f3c14a49f665e894b44c85382994436ce6718f0742ec920b0b6edaeb0f3b3f4e020fc0a3baab904b60ef2650fe82f2b3d54b579ee76bb28fd0907d4a6a369a5389d8d1e1b9ab59d5bf2a4971fd56dbaf77ece8b40b77ce0b72e9cd2146527471da477def7509f0a6e2f262a181706da4bd2b0de4738080f82df2e414388c5815b0e91ce2dd46962ca14824626b58da23660aba3143c398a3aec3bd05587b0ee99c3759b4cbdfff306a08dfe7b01e718dd91243390a913355c523abbc7d252a28c5eaf3b081d0e6babd7e6702f7ad5aca51e129a523235b324a39a5dcfa8aa922cbed59dc9112d1ecb525134d9e8a101da734eacd1ef558323cfe504a07238c3e78d8aec7d0f9a3ec0bc0d1c2ca6b68fc9d489a01a224c398b41bfab2a70d6b1154914df67e1a326e823fa61a389942b5587b8e13dc7be056838070cd5faf2db67e0bbf09eb0160ffdc06d7a65dd5c7f69544e2725bc3f72f5d6768dcb4e49259ab51a804a9d1f4203915f1ef54b651defeae4e5e863e66997ef27d0352dad8618f00000004000000000000000c000000000000000000000000", + "07e5c12aa0d58c3d956fc9344dd989f80b626f610ffc836aa29a5b7708ad1d7a0000000b000000000000000000000000000000000000000000000000000000000000000900c3ea81d1637c3da385f308a093d36516dfadfcb29721d95bc026a6462aa25c00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00b9297c0ba7559abbd713d4ecf549a98e691902e030a01be90edd9712d6865e14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000b0152900bb19bd0758972d2cc764c082e39f8edd5cfb0781bc05fbef335de390ac00000e4022fce1eea7059da30383f5dcd5e3842135e4ed954f12b5a1889d83e4f8c5ef6900000ec01e7d6494b36f1d77f3f3fe7be9f95d66e278d441d97bae38505e16d10a91959c00000ec00000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000070dbda3c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000006d2335881eb66d4f1ea7cd3e1cc478737658aec8f12b281e451941bdc48f1e9d91beae570000000b0000000900000000000000000000000000000000000000000000000000000000000c205b48401e629b3dd7bbf75cd749555d6590e6b4a5a0279490cd746f1779e25baef223e01c02d83803545920fbdb4371462f496d553934dd68352dd2d62c844b2a0f6fe60370246ae96b0fb33155da855a80964df1b9f2ab9dc2594ccd534286fada64eb2c72267ff4c2d10799e1cecf9e688111de050544edae8a5bb7d28dcae3bf340c0783918bc0ac6ceeec516597f3b184454bee499b77adeca9c8bb99dce3e4bdcd12fb7c57508ae13de71d19fd3dda13877cf0c54fc5661f5495f8a7b677c3100a1fc7898dee61bbdc343dc96dfd24275c00e63b20d271dca0d6c3ae01c1db34831be6da918855bba69b997f5d6a566407296adc63b8c99d0d926d5cade0b725dd14474e2dbc22bf5c6afe63ab7eb7bed74c72d05f9edadff7b7cd7d532ea23314215ffc41325642392ab75460e064528204b32f9b1af3b8fc83b4f7578912a32618100772e53069da16b593c5c0799b8ef3f88ddc51f3460103dfacaa4a1f8e5a0076ae8022823f5103040c70bfe4f31798608e6e3dab3d2ac925df6627001b11111e1126ee45e600463f3f974fb8e86d1386ee22a863b9de93f9651491506a680b55c730a4288fb0ab7231edcbb6003719b27dc3eb0c739a31e807df3d1246dc0130c3cb84e27d6953c5ab1ec4ef6730d11778789b6902e9a713d950d28960c814deb8986cecc707857c48fd61d9b68ce14d7653466e031f57138d3bc9695a560a0c210f24b08b38c9902cae0bfed832801543c85f4cd04a963182d3c65cf76f2cd380e24c5def596d991a57809848bdd59c52b02675adf1ad7b741e3647a6ee293dbce2be546b69f24f095353d3e2379ccca36a3e536d074754c809e51004d10acf52ab708bae9aa8ca0833b99cc5fe044dc5864056bfc8ab51b1ce07a7e65a25a11736b30ee6ad38276b0c1c0a7fae028b342c9942ac72ee95d6eb8da74b8302d6c03ce7f451e3fa4782c73db356a3bf2751a4219cc48ab06e29a581d83bbd01cc1f0e5239391f0db8a7a580f2a3a8d96acb8a8d171d567972abdd9ad324561306db17f9cd1082dbb2ce486157eb4e3babaeafd7a77e5fbb74c3d84000c2a126520432a975496bf49e0af7ce62cdd76159314bc0ddb0e6239ae7c0f12cc91c2405194833d38abb609c58459badb595f2f7176546a1238c5195e0533f20f6ca20f8dc4eefdc4b6d733af2dca8014fa5f0a7c450a47f864dab278af376081abe19397792daefa518f8c347d5f0580cc0f3546d95ae445ce9373fb2920e959058000e9ffca9a9a5894791937cd67f09572999d3a6825d1808827bb4049a54125a1c33935f6f6e7fd1b9288420502968cc94c4ba307dc4551ebd379f6cd83e9dec14a3e143a9c07cb12e964146be7674606ad0d369892adb54d6c8e286814f2aae1991af204d7b5b42bb5ef520401babd8a8245c1f7c455df39727be58bf9d37df0b2331d15b208ba2cc916a0731721d890d445c007ecc422bda518a62551ab73820861b0cc18ae0e2fa3e6d8430d3c93cbe14891c080b2ae64f036e4e821f9f8d178a5b20a687f03b243f51cb1c5abf42177b38cc45e4bcd3069142e32c701b58170133ccfd7628013729f28a4d6cc6d80945d4740e538356d51d16dffab348370afa8ee406d74a00fc4b2ec46b5d5973c6bc764027e0b26a7908fba9391449801ddcfb2b3a05cd6cadfe8ef962fb9434a4103bae293a5b1785ef49eb95de8a06158f914c8567aea05393603117a43eb146c4b54945b80a1c4918c2686968821113326d7fb74bbbb15a8443773c89591ee02765f96231aa5c809addb2998dfaa10b5f909141a0b39c7ca65b0324e1a0cea44f3a388a8a94034df9a3ca59252b6f1c7e73fb818a910bbff1132bfc47d0a8d67f573a7e1c10125db106f9f8ab71dd109495d8bcaef067964bf002c27afba3a9f535ae64fcde59a2b7a6ef6f4baa78100797bcbccbe00bec6b1f312ef6eb07ed38d7f5d782ee89f3fe6f3cea9d244324b3a946f85a43d687c424206239d023df07959ed0dba957dbe47f2ce38ffa28081f2e318ef8cfa968a87f86a44466ed8823dc69df177d05c53eeef4131b9cc9229f96c92f7b16b75707a566ae64138695e4961ca214d5a21aa4f38a94583a6202bfa1bc9f752071cabd70d67267823f5a5d59caca5fe9856a001476a0e019ed06ee832aafec521e2807d07c462652d753e87e42d5be4acae098f6547c4aca740d79f4ce1e868140ba83e3e5bef0aa5dbd05e5ec0253907e26cddc822eebae201bfbf2e85ae721d4db835767f54533579741a3392e149b62ad2273a9eacf0178301255228047863bf9393f9f41384adc0cec7389160c79e4b41e4846dca6646e2d55b38e675c5b3a377d73ad1fb0787b4fe58bddeeca0eb8929acfeb96276d3e0c23043e78cb36d604c43f33e288c6723007d6f9cbec4087bb736fb8734b0a250cc20223a7f843f46724ff98c9dd799045393ca683ca7b0645673311e11813f20032947520b87bb3453d6660e84aa6754a149dd659f0f0d8f7ff6459c92a14e62f719290d8160311bd50b358780b8418d8335eeebed9ed6b6c4f0e7461b4c18904c79b4de65d0aebb1cd2efeaec0267f67fc00b3bbece019507c86a02552caef1b67df77c37ca14136e70fe32a88d769267d85283bdcc5ec7a20ad9e5afca6ad14608b98c848d03cc2575c19f513911aacb40c2f5917c7a39ff4ec12762842ec14695c0616527318e4bab17c2ea512afbeae504321ff8f97d4625dde2a3e58972e5e6a07b0526463b3daa1b9638c28b8d8a6418cd628234f9085b187ea7b005c238e72646ad45aa4fd584df3bc7b7826a36f405053f0c31e68a1a9e52521fa8605becb31ecf93b9904d7bf0c5dd9cfbbdb7bc066cc3df4fc92b48b3925f1cfe2400305344f23fdfb0f27d42e1b47a8d71ead432f1f84a54da2b5bc02b003f500762c9c6c8fc76ba67a624d7440a8dd89e917c95a00e746ed33cac351fe5d761c9b082b6f33184a49d1d92dd7358fc3a3dc68dd0304aaee8a637d1e5077de98e63a1bfee099cce6c9b2e6c09a139ac2d0f93d497ed02d59126f3cf176b91568e7902f3eb1b374ad20c12ba707ca31d99bcba8473cf342551fa85f73c062db6fc60b2285353dbf6d83cd57f13c233388132149bedd70d7156f7a7550c13b766bac8928e40989a9e2984f4e86fdc0940adb29193ac32846b7e10d654e01c2dc92356711ca6b9984dbd396c5c938ed4a723d4b6cf5f5b10bf8332dbe183213cbd48a630cf1e42a89d5045ac0657db971edfe3cf93f63faa9224016458d661c2abd92da0067eeb01f704ae653ed032356a0c91ad9cab0b4e8da49665c5fe500af3d2c270152e4d1e362ab391eed783b401b213534c2c6c92762c54b61bdbd3ac6f316c32ba988277da6193572872b6d00d08109ff8d485093e8dc9a871de09de17366af2e038cfe5b38adce1651baaeb26abc9a1fc5133f0520b9f6859e08eae74db58a2755eb7ea9ee98b27d7f33cc91232fe801ca65bb473769bb6ae0569a3ed0d08909b7fa4f9ee1de2e766eb528e57748f62d0df8834156a7216e466359785fede322198abeb7360b544e6f0747a35fd24dda8786e1465d41899e2d690175418507023a84975ac66163de115fa14d3e519fe9abf51a4db232b3e1f4bb68258552d90af9c4fcf6bdc93f799ce9fb8b45cc98863c9abb4a6ef22bdaaebe489e386408068937be315f70355d1304fa27931750851c0f84ea07f4fe63d1ee3bf11a25b10ebe20b9011be3d460f1e1c3e5dfe5f0447bb32ad98cf33a6ccec801bcb8da4016a2fe3df3b5a665b3ee42611077a2fae1d4bfb691251d54f0b60c737a6cc2dd221e1519f3b2db46ecbb4bcf9e1aa8bdf80389b8223db409f3a2866f746815d309afcdfe1eeddf0bd0bebc24de27ef289a18abf2828d5d9f27052f444e25c523007e9450c44970679a42ae7dc611f9f1b73d01ee603c1529cb3fd6287fd06cdb09a3792ca03340223bacd4a6a0c79fa8b650947555421d30d089201833a339f92652090b0cd7bccd1b46c15ad5dc01cef2cf3e9749fcb4cf9ad75c00e453cd87205278e28671be5b51e2fdebeb0927da467e416c8a54abdfbba173ab52f773f70dca612732ca2394dcd7c5b3c29148779a037567cf901feb7e7cd0aa8aecb03d0b1f3b1cf1aba0161dbb373d7a72e7dc9050774626001bca7637d0d592e8a4781dacdd35aa84f2db4ae042bc86702e617bfb2274e74f5340f71f3495af01127723526f92980b7da2b83fb173476374a30566c88c1cb3ad2ed4257df4ec2ccbf80efbae8cdb1e114c0c06a696d139920ef2e3b8aa442c7900e96a23de858a003a08c30c7cadbee1caed900e5ef395515b2ccba4e00c716228a352adbf429af88504a3dff3d24cf34c34c66e01a94d49abdd8f787c85815dc4a24a5b4beba71bd4266617f467784a71e682e031e4ac4a2519987b2b2cec53f0f05739c718ea696223cd7933ba5397f18995f3547294e24879bca5136ca8a6a4b8305b3d047453a52aeca72ddc5203218369ff0704779f2312187f2bfadc9688ad234336e5d8671e0cdbcef1754c2d24a694eee9706f7b9f7ca1b40729eb17e144252e24c53927f915392c4efe2a58b6d8e5b4e8e86e71321795d2f1a60b094b647c4c861fcf529e2a71ec418f7064e2f0d7dcb92edb80fcc430c249dd88bb12e153e640a21e74290fe22402af785d03861989c8bd2c14206b0016bab33a6ebc459a4bd0512bf6d92c55f98f7a8c58972869ff526722af1055c01fb57b1a8966d071f447e842f97f1d378c8f928f80f4bb03c2eb1eb1f565d51b6c1b52f88d52ae0a08306d13e6ff1f579cd1fcd21c7e163dfe95ef21474f442f709ca00ee26020ee9543ecb06a9f17689b883b880c39fbf58ce072c3ee1189da8dd16b7b280a5026558b3cdfc31715e52038ea978b7a763bc1a161c946ceb723393e81221440555e38bc3553675b06520914815ef43aadd9b5e4da30bd668b6441a2f2c9b6bc875a8628eec7c33d16186efc57c1b5805db38adcaf1e6480859968669fcb4f52b58dd2edeea051f2174f35ad4c8dcb65358d13c75067b089b25903cbab76b6d460ba6e0d17f8011102b1c00d5c7e29ae6ea17e687421f81a460f78e0a04368a6475d981d0ac983640aed3e224ddf40e56d3e84f6f1ff3f52ed754ccf6a57fa0e4cf68032551304ed1ab191af3dff97461c0ed5ad6681d3eb71fccce7a94cab57439d1f67674c6c80258aaedb97f97ab958b9c5f8bc39dcf8aab462bf71e398a91fb55d775b7b870102431e9b51f568dc7a37cfb19f3d113762d44203f36b31c1e13546db259055b305e95b2c72b0e0ae06ffbd10dccf1ccaf162eeed25473362af653a65ec6cd9d711a54b253b97f7fe3c297774c6755b5f812dd69f87d1de2dcb01bbfc3d1912651f11bdee95eb198fee1f4977e29c32e9307e59e961cbec21aecfc682e58228a21ab0af0fd12085dda162ae7defc6e7d47c7dfb965b8049aae74fc996be59f5d61916954522e5ab637140dc8d23c8095b096d819d978712945c0f8d989939e6231626dc88a897361002de1371a34d76400baeb6bb0077d85706bb1b5feda1ce920fb0ba08ff3eb6e541f4889cc7ff38a6d453d9de9542290d48223a75ddb7dd1f1c3285459aa81987e3fa75e67e0939f8c1b500003ddc230a9c2329507e65bfc22356dfdc15ab888ba304c40b891a5a1247299c0b83ac1cb3dbe62bb924a32fe00f20262864561e08dfca04269511d3e93cb41635ca601db0b8e11a4d6dad16a1003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000001c118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000001c0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000001c0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000001c0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000001c29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000001c141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000001c25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000001c12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000001c2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000001c189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000001c1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000001c05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000001c05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000001c14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000001c03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000001c2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000001c1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000001c1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000001c14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000001c2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000001c305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000001c280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000001c223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000001c17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000001c08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000001c2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000001c0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000001c0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000001c172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000001c0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000001c05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000001c137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000001c2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000001c2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000001c2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000001c18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000001c0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000001c204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000001c0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000001c1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000001c28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000001c1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000001c21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000001c0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000001c0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000001c107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000001c2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000001c09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000001c24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000001c03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000001c1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000001c205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000001c25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000001c283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000001c21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000001c094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000001c0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000001c1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000001c2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000001c1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000001c1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000001c304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0e544d0330952cd9480d1e4d47ff027da731a93094b4be10d09749a0f068735a7b1aa755a11ed0ff86db5fff471801eba65c294e556e74c4bb4bbe7e786ed5315555709ddac0d3c0855e7c59f05dd49cf7e62b64ad30fe195bdfc7c38373486a9a50c1c32d7677de612f316dfab7fa5429dd494a9c4807c57537d60e4b956b3c5b37f82b279d5d008330b1b46894266a0cbcf161f6231d835889a227a0f99375bb2e87790667fa8aa523288748a70f0cb1f8948f02cde207eea6d6fb23531fae0c58644c1439dd3ecf546d19a0cfcdd343c6124cca64ce2f34f886ddbb950ecf7b6e094300eab46bd660024cfedc374a51c06339aae4a294085ccd501c0bee39c3a08f99a19a2eb7bb6d8972f040a016f64bf84db521e7a804389c6625dad0d7b4d1cacfeff4594454577f5b73deaa56ef28daf79e972ed22bb5277fc4746977dcd9577f22ca58d28ec6ca608096264d7393ac0a7bfa50de872b6f628a35dfff36cd31aaebf3bf05d8a865a04ad7cb248be8356535d5895f291c8d70c55562225c2696a5f0d8290f5ac3b1c7107ed5fd7b92c2f9d512af7eda78051086a7cb1386f12bf06aed60f11c3dcbc33c33fafb27397f81716257d800e1d68d8235d6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094d1a4fa8d559a7d8fee8cfd79e5e4f801d2d56b74fa25c6f527fd08ee2c891ca680d8d25b6ee0b255fc3ed6cf6ea9856b5fc7872ef18e86fb89c56d83c7b9324fe723fe7f34fc53b6c4f9d9405e47d6b980e8f7f81850149e81eafaa3127856277af6484c8e67ecc1f9b658fb83907fc2ce522ef052658d6ff286374bc8aa0e797e88aab037532eb5ed648ff347770f1fc5be3fb304e4d2f0bd03293607f21815f0016c12ae74614ea4ae337071ce48cdb4cd2d01c1ec7218f2deb8e7adcb9d2c8d83b88384a2e813157b85836df34a972d0cb16a332b1b3e86c58ae73b9786030c23c0786fa6a4328c24cd9c489600e281276a79116574b0ee782cdbaec54ca9f33ebb08ebe8a57a7a78dab9606f0c2aa90331c698f6a33bd686a1465cd6afb28f973d53f11d466d76126153fd4154f1bca9ad7b8a6c8bf5a7b25d950e7b3795e735e85cb9aaec5a8b262ff9b23e46353bf5c9ed765cdabe53ccc024f493c26941851bb4852372d2cb589e97c275310f3ff5a3cc393a3030466d27e1fa5780b72a60620ec7e64d390da542b800724e29232295bf0772ee73ce1099d16dd9bed1bbea5dc343b8ab7ea8b1ca0345603da565c6922215237071e8835d489e1b00000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020496df4c417a2334801dac73f427098eec0b22662810017ed0890a00571f54d35b8129f566043684e5a20a2bdb96bd87fc6036f40036a818e6ced204ebc7e135b23f54c06a2be3c2868d827dcde5e890a3690fd3d6d65d2c356274b323234c5455c71f11fb28a945b80b15a058db55050ab8761d973e8d6fb8a6572c71056e3cb3a9e4e81cce5cf4a3faf8948d69a9bf8e6aaed28b6edb20ee7810a4d27157f9fd776066a5ab44fe25d4294786f286ca12a73341761e0d109e2a019f1ec7f5827c647a3bdf54720a24cdaf43489c5055f4ca62927e8d2740d2b61a993ccaed8995722df481be7fd34e72e2bdbe5b3efdc2f60cd763858285a6493d88faf3b137a9a10eea8cc8e525fd5b8d60b1709a85af3b01082c89554a95e688cff084dd0e0d3e9d3907917b47f5c43291cabd56cb48295bca8e55ab91e0710f4c3d1d2135638a708ef8ee8c5b6b506fccf0f3e4ba96c36277a8fcb9d93eac9e2e442bf4769f546243f2806da38c5c8372974baea1fff9a658a8e5b1d7546abb841b6e1638cf0a17fda30473d7b4a17a18b6f4566b40b2c2bc05a809f1d7e6616b4c3c0320d550659d9870e9f3f167202947d1eac50245b03221744d7cd310445922b951c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d060ec49fc81c09a9024ff7d4d8da3c73b4b4ffce87aef01e3af89a65e4746a57a06cb126d80cc394221634d9fbb7ea999e78c45478fc8354fa617e8049c8e8beb96fb1c453b7213c83a2a821a8f12cd4eaa1d8cc92bf68ddc4b8cd56d75611ea596f94e7a41a1e0174f9f55798f782cd3da16f2206dcb8dd00e1f33fb436d5ba905b02f3ff9972a1c6743c8de6fc083110e7ab7a9ea9210e27c7475c1e270075e1706a2b1f482c95a334bed97da502b30d51af13126fc025fa145f6da7de114c9870f8ed6ce701393ddcc88dbebd6c105c8a079eeae512f46fb4dd3054804069a42586045e29b003d8678cc490cd1b3c92c1a840a71f2cc22e82bd79c3fb530fb12718f634a7bdcc8781fe08942e59da2d9eb99269a5b4fc9c3d00936858e2d5043b3ea53f98951d186f3702feaf0b8a24891d22d89f91855be8216902a88b4cffaf8be4ca35edd7d907d924ce4119b13a5367428c8dd858009265eaf5a714b233db85eb1a98e04e45c98f6eaa9f9c4607e917eb81fd33dac5b78c8cabc1002f78e7dfc181b00908c7891e53209996c036c4368c6248a19892f119f0f3515fedc7c4673786da2576c43bdd866e2c5e572dca54ba84ddaa7759397bbae56af100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002df6665ccf89a0cc83364139b65a1fe8f56ec5e87a285dc35c511edf027f60fea21a58f7a590585fb59d5b8c5755dd0f8d5d8cbdf090fe55891134490ce601c5d79b86ec3fc559c916d3a206deaaab00c68d7db652c110113c4ed5d31f293f63d8c470deb5c4d40b9776bffe94bc5170c53f42d4d48ca1965ee564832896e575d8494fc00383e628a428f4f89460bacd27f574ec3fd170b141998686a19b5eabcf430eff209cb8781cd4ddee9d5df8602fc897140ce2ca6715fe48c7e6eb0781f1da93d21a34001deccadd5d6738739b4768e186bd838f855465014880b7145b0f348a0867c603e8ac91487d2bc2f2db9fdd338b078fb2ffeabab45d610e06440a43b5857f827ce9d8970d09c0eb69cfee41db89c92f680a26ee310890ee0242b131ea1fb0bfa32a23f8b6b1cf6544013604d63026bf8d2da9fb503df8f7bbebe3cb4bbc27109fd707c9886b41c265e53288b4d28e6e88ab754529f64351f495c22f8196f16d2611263a158276e3b354e61bf01add13301db3f57b790eeaf7424305df44aea77bbf1ecad1a175be8f6909252312b397ec4f2aff72cded12cfd35b763eef07d4b2b00071f548c2d657b6078d34bdb0665f859a48738d6de69a340000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000250d6778a84e9aa384eb6ff24ad7a15b6d620f1739b39cf8d4147cff76ddd3d74547331b7ea654747b3f72a10699ed222b1aab15ef3cf90c00fd22f7dc0571ab224079be0739d989020c09ae7bb68c6157b440c782d9f312b752216dfe0cddd72c71a89fa1190b11dda6476bea578c7828e0e2f19180e3ac162d0c357efb35533d49c4e2a23f5cd633a6c6419097c66197375a4eb478895701faf2a1ac51a5d72cafc593439c0bbe165b5d70d25947c06ceac8054ec2fa23eb29bc3feb0c35c465e746d7996f08ec13ed7be65b6a9417ec01c50f9219df81f0848fb4eb092e1bc70fb22512b764b0f82aa166f794dc495b468b36a2f77219b9a3a2769dc249dfb2d7bbbf05ad3d34c298a4d7f323f6e10e87ec550a0437fddf2f32d5f65445f27a13f1a96b6b15a5f1dbc1b4fbd031239cf9a197845588c6479f317a7cc2b5996b06dc9b577d6bb6e943b915b15c1a7a262bee901da9c44321739c7a2b9f50507756496dd03e560d23258c0bae4c0a727829ed5419b73379b72e1623e06cbaf4d30fc9c9a7d08c28828a196d22b954f873d939baf2ea8152af5a5013b222d3f738a8ec1b019810578646bee706dc5e0f40e63652b40d241c7eaea4f709b3213500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001af7771f280a46ccde797b6fa65b0d440ca627b7aad9f9eba0e1b163c9d54ec371d0e7e6a9c4ab1bb0e6b2e42a6942e3fb764004e36ecb875198860b5c530400bc24b2ac8165ecbdf6b7db89a90a4ccdf34378cfbc0fa97a0010e5e3bc8694ea23bf041532ae920a44fb5d8dc9e08f6b83798b8f4124768794ab298a39c44308979f5452b63cb0a104146e675e86362ff9d9b9e2ae4aac26ca547b1bc552957a9f8e884a61f2335e9d080fe25ca85f55e64c1aa77b4ae816c55e42bbffe5eb145a7c9a02facbf162b7bbb2c85cfda091ac7271ac13568f841551b4ee6159d32a44bee5a4009fff2a30af9c3fd047d535f046416deca695d44a8269ecc9a2d100dcad3939e3948b552097eb2e98937e678323c2d027dbd56e7da82f56b3d8b7d45c69c332b5ea3edfdfb0d7db733d3ba78f024c9e47aefc18e6db86997fb74d9fd1e1eef240b2f3e53633807073254b671b7fbbd54b199360ea610733bee7fe48ec8fb3c95dc9aaa784f69ba226e8c0c71d745f3a89640683eed1bc5b11ed27c126a1faf7b60d952bfc1c8db5b786d1ecd87ba1c1c383d8791d4bc899b12032359cc9a1f9d334c667bb1091ddf38d9b44bdea8ef496f4f99730335fc3b93198f800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ccb5a30cfa3da2113270c89a72e8c064779219d17b9bce41114af3e2f44a6ed61b1518430ce62af830ba0e68f44f6b166998d3fcda1f1b1f0d1fe1d8f3b7bc155d31df6e86da84c77ecd45270cf77081fab6ca62c1660b0a189514359ffb93c05929a2c6f56a4f9fec5eebbeb5a86ee3bd466804324dd557affc208f808c73819e8a3e249f5dbd2a2b2b68c3110170d9109ab4a989db5e659bc3b7ccfcefdeeb31329f164162634d379f769a7a69aecb094d637a41c4271060bfab755de5be5a56c0330c9ee9240ad31b56856e35b10937abe077cd2a6ddff9882b714606a5eea7844fb76a4a33824aeadc7c521230e81f1f28da069b2cc44443ea600ec00630ada81cabc2edb077a282412161f1457a0954a8bd65a7e4ac872fdf3f07f0da00e1e79aff5fcfbf4373bba9d30f9e96ee2795f0d4f2a16def9b6aecaebbbedfebbeff4c2278c0bb4013c8b763557b964f8ee7f0c406e711eba4ceaedee5c280d568b337973211cbe947d7928291f95552261a4d136a90f24fa336cc95587f37232273f5d4d6d3fc8ab5f435f849d5832b9eb1f80278fe79de0f9ddc501d221cfb3256a446e5b87f0d5f4f18a1d9203b96047f18a8a1be91e1ace1ef8872cf5590000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000989d8ea3d6a43d5480f983a8751e0b6701c7c5108d314bd9b2123b906139a5e57648034d39ef570cb6acfe96a133f0976de902a77131335cf41d7a9478e3babc4fe106fbb163a802a679997fe5f99fcb9703af7c37eb05486e4a792f1a024eb4732ed4c7aa31353e901d090493a9529fd1a32ed0bc1070e9154b779dd0a5bef1598e90e854ea0739d1f69039d9a2d4391d1c132a62c55b1342267756993d5a6d2ac6e37e87e8784257e0fb16461ee11955ba05e07c4ed7a301af32ea04d3037276a88e019556ad6a2d6a6b377fb187dce4e9b8eee784e19a8ce95a9a6d913238151c57c277bf2446d238c5f8aa645a135f0d74ae9ac70e4e745919bebe1f4981f337a4416d7c862c2b0d9086f00def3674d04e8558a86c3fb95151b21ea4f5c9a6008a17983ba9bcb1072565ba8cd184a5db152de82b10e93269b5de7c0e00e7c945ea94bae96bc44096caaad7fbeb239374c3009e2700f19a46596966f4a24f499394e5cd3a64a7ec0d25a8d2dcf7663cc5be2d1ea91b9b936dfab36e61e6f036a946384801827d24d6d4039ef824d73f6449d21061a2063b94ad56efa24ac53c6ca955a0fa9ad8a4a9021bebd127531e9cb67c3fc6be2809c6b8b85776436400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009db0c2d392ca990398d8b512b033b0cfc123bc5851af32a70e03eaa8c2d30f9e73d827157a00fffade60efc52683918664b4c021f759f0f309d267b985b4aee4553cf23ea63f86fa75ea8aea633fd307b13d7d91d4ad45d8db360e41c1b8c9f8623fc4c76eb6e5124b4db6da4f88ab65d23843df978372e4a3cb9dbb7b10a3c3b7cdb7ee5e8b039690de5f7deb597c7b8758a0b9adf5e0760b9a30a01baf835f56572600a3ac90da251ef6ddfc55e0713c52aad7535e86638ee2484971a17aa97fbad5817443a1cce290d2b3f67655f2715d4f6a22a22972fcedfe4cd5da6086c51ce797ed0d029209c4d470cd7196419fde67483e953d37087a4d523c5e0d03c6320e674f982c0ff1e742eaa0e09c5b778e17e6a04bdb6ae3f9591b0e323d26fc2a29440ba8828c8b146800e8c6b18035d90803f7f58fecbe38002c22c747d708451ee672623297c478aceb49124879c6802c780d27c9d1c7a19a0843b800339b2354e5bbc46500b8f030327ff3f6995ee63af228f323fbc52334dcb6c1bc517ec114f599956dcb590390d972d8ccec062e32991cfcb5c3bc771ac7d1789dc45b4f6bf1e97086f8ec92dd43c70f9068bcb086c0b552c506241465f5b0c9c12500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b4c7eed78d5fa6758a256f198aedde1f3d0c0d19fe2f910cd91ee9c5513491287f5c51a75b9e41d56ccfecca6f12778e964d4697b21c344f5abf6ff2357c9ea8d8ad721d845d73535de9f4cb065670693661ede07666d14d89c41f50b31cf7baf115a6d643d942cd6efd2c86a4b3383467e132b4b535de3d40c54419a0c4ba762cc484a080acb62d19b80ec6b055a999660fc81ec50cef0a6c833010ad7750e08737a634349125e5ed58ff1c01406fdfbf947f9e82e2dcae2aa066647ccd8476f3745fefaa70bd88e1c2f72baac9668e42b9b3bcdc5e35938f28e8296bfcceaf2897c512b328200d1abd51b14b62ba8830deab5b8e8e09f7a078635d9a963dc259d640ea9b9788a055cbdad1e287038646ac419dc012e7970abbbd34f03eb60c8c5ded8f050bf2b225dfdb86ddce33a81889f7de3370ffafcd11902288637104411235585b313347097c5bfe9691a5890e431788ad78094022d7505d1664096c01d3863e1bf7fc17726ca1cf1b2aad196b1fa4c52cc5531b0e861a4749b81310e957d9f49327a2db85bb197fc71fa5fa02574df1ef9b566e84581ad5968dfe29d8f3b3569121fa88152bd995843184ccba5bd4026088d0d6314d2ea9b7122bb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b763cf532e15fcc4fb830cb66f8890651e960fa3ebb665e3cbcd77c103ad0790282a30021e1c66be66076b761b24ca79f54c672628960216aff268d5af281279c4cbbcd7ee1f3026d93b348a65b4af98064bde6f8843e5d3006bec34d2c9a3b799fb188a4233ea9a997704b31d4660431010ee505f23e6d50d4a7f37c207c357712024ada387e9e28a2e02ec5647ed0d4ebfbea74861eaa387528bc32f7b6edfe8b8cd0f871b665a1532900017c5e2c9b7d4596b24e3603511a1a9147ac612f5bd58cded0778280caa4c6757cedf96f193b6c0b9b30b09deb06c3de5aa7760434504dfe482852fcb0aea78c262bf78a64e6e05f67bbad04cc8eead623f972c754f27960d5e6d0287121512d665dd56b9a6cbac14d78b188ca6b05eea65d65faa272bd9347b31ce4674d2e340558d638417e4c8770e2ade59ff2169954fc356c62c916aa01ff06efa18c9b3c0ea7666bada44cacc6fa8e24d132483e626eaa6d938a77eaa6506a14e97c04c91cf2d80ec58147eb3ba361add54e4131ddbcc3457cae9b1792270cd7f31ee56eab9a4b88ee87f8d5fbcd279fbbf3027c703ef6628f8dbc94fcf092ca8d252e6138a6db6632a658b2205bd2e05bff8ca44d02a550000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae19b0a8995bcab75f4e5ffe00e5bfd2d634b34707f4488bd5cf55260d0d15bb36e8854cee83bccc6c3ad84337803a83b92ef7c7e788bd1880975bd9141be0fecc8dcf0de671b3539de39dad2fddb320d51a1be1bb6bbf2dbe0e14edcea509c1058c65a77d962b4606a4fab405790ca585c54573756806f385ab1868cca00a16d92346ab76e77c78303b83c168571cbb241b87170d68df24fcc4447997b160614b178d1a3de19fd737cc25ea0332ee3e27e37d19c2943291661329a02056a46fad3f13226b51d9f7db26720185bcb9ce9f52657f07d2a3870af6c1c4403774757544089eb6f700c42f4947932bb56881562a5f1a11c1cb9797ba975fd8b72f4637435bda5788caf5dee8e709881b1566439d624a65c2d598de4e4ab056b0521471b22362a4fbf807f45a86510e309717f96080a660b526a0435595abedd82340e9f9178605a88b7b46181b80df2ebebaaa82acc00d9d02c41a2ed2bdd66ce2616d9d508c58779f3621532fbbf978f93399c5835d92a5c065fd0a95753ba5b8350569fa3699d30a58aad75fb287eef385de92ac1b157d2c4e6939b46d50f0bb6754612dc49cf1675f4b1b5a31cfc8a80924fd3cbab6d941aed0e00fefa79a6de500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af140415f4e1437c96f09f3d3ef4bb1739a8c3c5b562a338cf67fdb864cb9e6bb4a45804ede4f7000d8ee7b857a57dd120299648794b2f63455cce17da65a42d350f31f22644b99920fc616aae37bb31c07bf9ac7a9cacf914aee844142de6d59a30663e6afcefbc9c10f26a35458e05a5f40f10e1ab75e3526c9ab5ad0b9148d2385161f0875119a6241fd5edb88801e61174fa2f8fd386fbc6c8befe1d3de22789f2c37d27711cb8ce0b4e98ba6629e4e6b3bc56d964a23ef9102fd46a79aeb3134056fa70e9537fa2e88134dd48fcff288db8e19151142528a1fd902415648b372455fc320dc70f79a9287c4499d5aee7f915db69ddb41af8dcbe0bc7ab3a3e622018635a36429e244e1226c7f6280ef58acc2e4db65b8fc11c49e257311a539cd5a58f960e73ac9b5539c395ec3d70a71d601706c201f36e0a46cbb1983aef7a338b9b0ad28b287a65c34ea6355a2cd54c4e25a2316f94fb53f28d2f49e62c6506848a4208216a9cc02b07877a320eca930549080840bf6694e8cb1b53483c81b6c961fc2cb25578320e437cbd054e9a8fa6ce90fdebf3ca30521aa2fcb2343258a52de80970459f06090f2a8f3d4816fa110e5c9e82573c681a581eb830000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4ce1880767db056edf1ca540808c069ff26192a30d9c2f4542766f5386ffcc6c97339e2278280f4883209501d264711a0fb20babd9654a03004dda98c81c26f9a347ada1c9dbaac267c746a443342cd634591687c5df20ea3d7382c22cf6ebf41df9ecb38db6e190456e69f9c044d06aee6a0e274a1fd080e9c4782818cc639926bba956a259ffa2666b88506e7e2eca16100bf68168d24b233327ec82f61749e57f784e9be8223e0e69925b00410f36591d0c405d9f4ef859d48cd83b10ac6435616051f589cc120cb935cd9bece6bc02492f7e259a72d919fa60691c8ecc1ac26e7454fcc8edbc4ce81020bec1275508148b0bf4d631b17a0c85a4ad1710c45ef71c16ad3c244bae14ec711b56f8fe72ef19b59e6cadba720a2824f788780389615542cb28b62dcf7d1bef730c00b2e05bbde9e56e204652e8e1fb6ef673c1bf53bf7e379353eaab09d5c65dd71dff59708853d106bef196308a3adb8a94fa6e1233e05a861de570d7c9152691e6e2466d53881af7d8b09c05e2e668ea4acd61de7251beacc7346fe7ec339331ab7cfbbb4a66fc82a1abb52097bbc81c558b906d9aeb09d0fb988d93aa9b3f61ef4bd6cd687f56c0e995880ba56dc9f217a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009940d7e89f598292d44e80270ec4d233a3ac0de821e21fdc27261bf6bb2a1cf6abcc00b57dc647adf200ca8f43ef603f701c46392d6b2d9646bbd502804c369b193cf352fe0b33882a5a18934618f05c43acb7c4d14abf236f461104b07e067b246f4e88659c5bbae1dad5a5b1a7dc4b36e644e3000f416d3c55fdeb6e6f1cfe73be75099e5f02b7eb5ea7104d4378ea88f08872937f7097c0fb416d1db6fc853977d47ab9c84520d17588955518c452be6d1f3667cde82f2ca86d7a46f2cf7ccc4bc9bfd1db8e93325dd63f8c0daab9e43dad4d67eedcf5ea7b02451f299cc815a0c846a9d1105e256ddc58712969f9f1d1945ed93b3b932c3d9ca11f41f70d4eb8a5b326a9054df28ea26eccaca28bdbfb6511bd88cf475181a5dea63e57b16b1312878a7442e83732734391dbdbd026534ae73503197608b2100d3afb1e9a4fe4cbaefa6d56b5ea329047fa5bb8d3fbca9c05684e0d3a10820a1f880001ae6ea3cde99d462ce26c73ad2c19176fb86b0effc128e7849689391710b5b283ecae4917ffa2dd0cd80de177b4ab95e6aa8c78861103fdffffcfc13627ab1fd93e8ae4d5a274954a25910f4d0fe6ace42c8646f52dda8777bf483776835c834f2a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000178660b6ea58f9626e6b12582290b353b9e93654315babf704134dec566bc42bcb8e608bed6259c61708cb6e517c9ecc80acd4717f7b5253790f00f609c54dbbe093ea5f2b8cdce728525e1817a8235d1c8b56f3a6c7d070ea9dae766af39e4123e3a640046d676c54fd0cba66a38fff6ed642716f710a512d309638b595f70b06c69480497ce2c55c387d68a356584d0fdc19815d16f4fedd7dd4032bf506169a45c972cdcde8fc113ec3420cc7e336d4b0e19a9ceb077aa6cd72a09d8cf03bb9449be5ecf78eb295c36f2798def882aa5a2e0b5e704465f4b270acbe78a26c00b98219d59f6a82bcd22bf8f5fb3e0f22cc056b6902505c80a2972f0ee2bdc14b7d165be40415041938cbd6f788558e50380926e4635e9fa3fa1863c5976f0c4ab2d9cb5a029d3b9f5faae4f25538e7b1789300ca8b519b15065581f6046a4b2fd8d0c0785978dfb86fb8067502b93040d8c7c161b3682ccfeec0a3370bc10dde1fea648fbe1b7453f8bf18030676f284794aa6abe1c5d5e19a7196516aa7344c3a9b5ccb7f9e06ba8400cc5e05a0727c44a72a68584f6f4aca95898c5fd2437074d228efa660a09c86851b8e45101f9ca997f17d97af15f81e1f770d7829d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ad8f10434c74abbb1f695386b47a1e69dd1bd8f25b45a02acb8bb7c5ada5cfd60deea0c81411519a4fbfa94d9635dfd1a3b3f50bb626609cbceff9725a9806f8f95a3ee72e491e09996c581be890e19a0731deb138a7f631b9d7b6e813e8a7acb400351438e0a91de654286b80c3bd54a58b4b67dc338cf1abcf553ea52202165f1bdf9615eba293b7cde32232e1ef5e7698f4e89b893dc6a975c416ea802c53b73c7b307c55aa11eea813e6a4a0d8a5bc5d072578ea65fb48ffa29d71acdbbc7535adafb8d0ab2313c5c3746730419d7efef72d37fc14ac5d2cc9c2167b8cda6a19e098cae59d1e890e296202d24f6a0104cf7049b8a491b9fc12b99a85694ddc197f74f19b47086a48d78d1c5ee8c6c365bfb58ca8a38e7079d726b9eee4dd2f6dd34d632682a44529cc2ad3a6b5668c25471cf0911497bf60a9aa2b663ece697e14c2fd4b90e4b8bb6d94c639756cc0945d28a84e60dbda01328a82ee2be7d46885fa7da08e7343c032b8c2da6ea7d85e3aa402b867de32d45cb73e12553dd550bf570bb4ef8238a15fe6aaeb235d5dafde009ac6d2c347e67e47cb537ccec0711a2676519c9246adcdc0296d5d090abfc9dbab836a65103070c3471627e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000210cbebb83b62a70cc4c4455daa80588b65803db5fa1c4ceb12dec709c38a8d79f0fb5764fc1bda1eec83a6734c9f5a90078ec257287ad05871d31793106b020cdd5077681d48b2931293a3a22deb102a2d947c86fb6cbfc89e438c4e81508c1ea7a757051f1df7f63451a30fc9aa5223398610341ee27deb8d6866044030efff625992694a8de1a34040169439cb3627ac59589c6e95ec71f560c6be24956a5f3fe1e542bb7c526a4f13d5270ea3a62e149ae71fa33e37018260c0dd27b0fcb90b825398f560d86770cc3ba19c8821298b4a22b1c5af412dc27a32dc3d8af4c11173621b8bf8f1d40d32ab7d82f84daeae1242ee841eb46c611dc92b5d59479a5490f2161bebe1a42dbc8b6e9173e396b316952f26619488be0b796e4551ba66d6427c9d2f0abb48858b426273cb6fda67897c5b4e17815730efaa3e4ab3b826aa6064357b4519c141a73e84946bafa8289e3a72fad4f07fb14145238e53512005fd87cb1704d1cf8df7421bc3a9c0a05a4dc66206bd8fceb70ea1c6e57415b7bd592ef05880a4a6c9f326a6c6ff2d5c28321ced8145329f093cf2f94a8c00e47eccba58d180638237a15cc02daf6f7170c5d8251e73806128a81f19498b4b400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b7fb8b759322ae715ceaed9198a7080efe70bb22f7850a582f15a67a107749ca4a09ccb6f6b3bdca65e35e9f50a3d517cce3efd1eb90e174891cfd3af8bba2c2b2b2bf2796b52a8185ba6ec5951b00eedc2c6d4d259e9031e2df2b66a744331e3b84cb91d3d157e49f4f81a67f59a334e768db93c75da44d37968745266f6d9a9380b6ed5b1e5b0947c18fda090eca439dc636e11b9e59cc15891ed25b6c2b45797262f5e06707a9f8379058c3dd82f7c150271a18bebc6967a81eedec57b9a17cf84c03d312c8ac29f022f58dd16c1af53c552805a9b28c0064f75521ba7544fa0c5c3d6f0ac91aa49f8991fa2e561fcd3c8136998a6a7219d6f927f0f746044a35730ac01122e55863df63d7098bf066e059d10d0fcd7d7b675f5af35f63a4a483c151a7cbf08161d0546d2c7bf1c73413fbc708f3b4e45dcb8dd5dba18d430b07e8f04cead2d97d3a4a09a208050a15ef009d7b338e7a7f3d31076d13dd56e0aa6267655ea54e1194f790be36eec2f7329e375601bacf4b3f6fa8bae1d9136deeebfc4d845962e6fa4749f119adf2064ea8826101c74ae53fa6b4935a9cb0d676d55105fe4f10f5cbd94a1aca6f273b5b0d91f67fd1f399cd7df7319b0e60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000887e5736fadcf85acad7c32d9f7d42ae65c3ecf914bb56bde8f1bd2337f6310ce965c20e509e1ca19a3fea6c8ae7641a57e35ae921f68c052d57f9d22f00f90247fcc76b737a5d3280b97fbf372a2c3d973f58fc71525d27c28ba636d6550c50ed55ae133589bfc0239f1585d97029239501279027a5da80f6bc59c32048d6a2b49f95fea22aa19377a2e30f42f0de3f892d2ef3f5f20979d76c4ba0ef76a73ce911d6b2a7148d415a0d0fab0a2593c77716f9e00f5600792dddbab894028d1dada9fdc8eb5aa427cd1cc9a72bcbff2230d405b1efc692f217dc4a12c5c40d3099644977c595781e3358e1928e431bf95217938de2b84d1fd9e66be6319289f0306e579c1950e249e06169a821947e2390ce29f7d1241c5f01f77333b7f6d6748873fc979e5c19f9f8d3bb21efd92c02dfe1484e300ff9592234b1b955fa12893b32471fbc15d8548a13b735a49435c46045131d7d74913bd4fff4b49ad297f011c42532d39f75bcc593ed6f587e2462ef7becbf9ff666cffc208e864429d2a9a5213c64d97b853e32427d2deaca04be35a798d3d6df9b755d1908bb3c9d9d22cdd801b5406588f57a40af5bf86531db09f99fbcb9bbbe254b8944469a444524000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024ff47a7a163141cb87a8f9d6a586113d53fbeb748a89934c2aae3e230922dc5229271589eec671e3d4e0d1c089edef7a31a6603e8e3ddde8c1643132ef96d246c5468a88a24a89bdb5fa0b0502313401b4274ce02e217a7f82dac8ebfab0bd795ec57657fe02cb1d7c9c310dc821937d10c6822910529993832c47563d6d15963bd155f834a25afa1c1b9aa2adb4aa24f23d82af16faeec6abc913ce8a581f5167d829949da1bc773f2b3db547adad9ebfb7c186da9936b68ecf767ffe74818c6e1709c616b96ed94101a876c879d0c5f715c8ba3a223f2679cfae4fd5ffd0f35a255514ca819d18c226232ab8d619bf9b25c40e96ea1ce0be5752d4213dbfda2b1ac5b8c17ec0ba20525a31f4bf23301d609f00ad7fa1c4c1f8ecbcaa391d777b832390a00212857458e0c70ba273841fa2bfbcd9e114d25c5f6d50be358869b91b46f4d6f32954469c87474759911d902a56ba4fa7d124c1c5d19570377d20cea87b6271354de5251b7fa11565739c8b9cf000699bd6f4d074a0488578bf4864ae2bf8bc82fdda620f71babdb281960c6fcb995a05468ae5f1ed6aa3e433b094b1c6d737c3de527fc8564b1f9a3a5b7e9e0ef4be2f3d781d7bbfa3cc5e4990000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae74ae1b4f7af3c7c4924fb387be9c34e86830af2378bb4cbf6d821ca099ada84c62a4aeeb029f0ac53855ddcfbf0c9c7f812163343f28e9c3ca8a70c10653a0851c05d739acde4c9555553fd65809602b2be2e077c356d25af9999142ddfadf5b8b111cff094cec9d95b63da326a9508d7afcb5ca0b0fd55e5a7d45d805bba1efa51590b59e1c9c343b3ec4c900d3870965698cdf1fb9f8207c4e75fe016a29480173d2ce148c99d70b6b38da54c7cf7ba83e5faae23b5d142ee1b2173434127d1c2301f2bd493bd19d8e9c7c6e51efd64adeaed94fe083a19ef644e13aa6b9789aaa25bc18cc0ebebc577c4c1f53307cdd7489a3512e836874b88626f02a1c3eaa309a32d26bb44d17d62305611dbe044b61e041ae3951f5b5f8fd7cfeca23b049f02d30305be0bdf6be19209536e9125afe87376dec979f468b27a92b15ddcbb4cf8c8b2c0a279ef3cb8f11564f8f73f08df09fa88bc8f64df16df6b5cb9d525db46c3e76a2affe076194f348cfff8d3dfa28ff3f2ffd485596c5581187159ad23738b96f58fce7a23fa90b21964b2390fc4f32be7fc7cf9dd75175f4b0d0565c350eee7292f998f3df74f660b71286aae012d37272629f4006c78f8ebe89000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011617c034e9808b20a22f99c536eff4e57173d86672c99adf16aa4db85378beadc5bf2e308f44bebcf2649fcf04d4dc4ea78acee76f547ff306e38782eb7d86e3611c96aead3dcc42fe87005caa5643015dcceebd3096bbeccd3f273a862b8bd259619725bab4bcefb25c6915129772012271eb79e741a89011c28dd849d0204507ce63a3f941537e9247a8aabd620519779f8f46773654f214a0a106f8a50ac5f0e07fb93f15e481cf1e7d98c06f163ff9550075f6f464245fae13321e73c816d13a0aa1d603e241667fabf54926a47c14bdd5afb11c2e2c987a666accb79f32e3b6e7477f65c649046f1c773ca73e51b799e2cfb62cd53b248281d423b6a0bce24567cbd472fa0ca47b60e96dbe9949ec9a3307e3865a2fdd9b9eceeb6ab489e79158334cad7d7d5637b3fba148c62b81c163567e3fbfa59536a07a493cb63fffacab2d8c3c8430499c796e1ab60f1ec703dbd459195517aaec89c7c8e44dbfe79321e3e02c9f760a6c9305ac94c2953655df4e593fad495684ebe33cdacbdd083b99261761354eb53fb4be678dfc25fd312fe0cf0f318e33957adf2b92d6b6ad1b1f1ac4a49d32ad5a37839c65b119348179926d74d7a6d0c895b18b84198000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020665b04d6cf85e794e2bf6aa27f774c4daededef5fb796ff15b5d1f89c0ca4d8276740ff390a8fc6a46e71519c034dfbddddde7dc49c88762ebb73191ac9ad2c3bbe8fe211e13e78ca99609ea18d801dc141fa2eca76557a49b0281e05969f094d7e751537517b90e1cee03191dcefcad18b48d36413c8ae12f557076af22826a7a71a1e49a0d5603f5aeb51ac53338ce95cac35d0a2500614ef7a4f3fe4e6af4583ab1be52275ff44c051dd92a2cdb47499399efd48c24352a0615b9644cc1e852c17dbb687894e818258f26e79677651c5478915a28b6e8b0de80d152c6df2f5e08e3c978049303bf32102e025965543118e9fe1341f00864fef99dce1cde2bf88faf43fe9c8cc99bbc5f34850fd0dc326168fc6e1852c21816e80ec0d45c5b8a4b5dad6bbb882f5151064ed11d17f2931b939d22342fb98f87e6f8342ca62e45b8e9fd321a07a0877fd836610e44e823f29b1982a7df583799e1197f33636d962d114d89f46506251b82135aa7600bad874d3ca383aa2bff8594b5242809ab9a3141791d63952bc43145a67da3693cf3b4c0dd27ff11421c64e216d79813753f8c1b4356df220ecb9a46e7f35ca4a67bb23e991e3af07874ea34641fe2df000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082a5a9aa7b09c282dba1ee741dd66bee5a312dd5d6642f69f157df071122d725fbd700f3deb5179a15bcfc49dcd18492e94868bd9d56aedfa0bba5dc8d9fe9870efe1e6405601bb971aa72e83cbf410b3f26a072585003858782e46a3f3f259907de12d51886ca8002e0adf71dbd38b856e06543a7b7e11b25530be30c80ad916fea126bacfbe2878fa78b308573728adf657d17660e599993fd5097259a23ac4d81937d14b6fbd20291b9c44488257c057ae5277156fc573aa22e1a1071daf7740802803e472c3528162b1d265be3f8a28c4a8f3850b810da4a88f0ea1e850dd47ecef81b05153af28ff3d72520386540f26d56b052dd17413ce1153a9f20bae68ed6bb1334b98d8ad9d17546b92029b013b525031d7fccb8b7de9e6bd16b26e09733e15e04b2341f5e18783dc3a953249215d0d5e4b00fb33818e970e7ccdabd8627bf89e6a83cafda2b2b198d243959dc658cbabe2b14cf75fbdd8c74f9a6088649b7b7e6e28ae30a2468ffaf8cd0cb1b30b7f731e6723b34fcd5962d5e9e03ca92d3a0ec8e32ed5e2400c29cb158aad9dc09730119d539738060db84bce936c17687d1e1fbf3f568da6b93cfb991be3fc11dc998c9046f8b8c8ffa91994200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b940e59bfb17c4b7e44aeadeac92517ed916764b7bba588bfec4e26aa6e5bcf9aee89563177358bf7887b52fe3705e4ffacc4be7400d179a3c31fdbbeecf337731b33f09cf245efcfea0faeb4ed772c117d74f85d0730d93271905a53fbb3c2219145d7e326b8f3ad8bb838d16eb2fc7c6e9e8e21945d622e6428f0c314aa672cd897ca433bbbcdc73bd07bd4ffb8e4bbde468e79755d8bfcede27a1585627823531a6d9bdad259d7927b051d88586f9583f94a5a88979259e69fc6b12ee9a1e265c0b7684cb19c459bad3becfe7af8457566d8090c2c2daa08000855d37eec140a4641e52f70fac7ca97f48e3c0f63fa496803a80f8b8349427218bce83075caa1bcd2b27025bcd4b938ea9d48418896ecb89145c19bf7eb315782d64d8b6ea78397f2b054b42eb15e960b258cfa56c6e3a0b0eb9fbd4896243ba330ea8af25bbcb3df05ce09553af3017ff392a26172e19bf06841fcefa3a652e36c5fdbe522e66112506e5cba562bd109588fe24762243680974e9444ddd803fa6f93c0fb237a6dd3ef15e4a4987da58b4cf0bc2ece8740dd4cd5e69052eac78c5d1982ed9e6976f6e8db940e5da3cdf092a41cc57713cc486c5725d84a423211b305d25600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d2292cd2ac510c93feb20136be823a7aab934da61049d5bc4c590786bc5482342376dc47bddf0dfa99d118b41f315389408c74fb1c4960772ea23944b1dd121af71561e5a5ed42b102e038d95722c807fcf2bffb5363a739bf4bdde19089c14d7e02aaf2a4a308f9322aa5f41b27354affa82797ce045e00db7bdce081efdb40f135944d8afc6eac6ea1018c87314200e3da0eae432e3d60613fa6221f8f01a65bf784ca8b16b32a54bdcdaea5df089e7335a7f9c081d5b3b17c2695c1d93837bad2ac15d636baff7e257f8f181cc5c19416187ec7e44fc92b008393fbdb1bb229bf3a86cc0f836686dfac0e67b794c34ba4068e52d6493fd3cca60dc0cfb735a91fa2c48ec5de0bc79b1f6c87362b90179f83958c2a5db0bbf154171345d239f9108c216798d959a726a7147b0901250714fa1d3f9999b8a2f7baf3b998b8c8531864d0507e76bcfd6ed205604019c729fadc83e1ce65299506053ff0d16d268dc2b2ffd8a72cef1a2671ee280cfd579e0178d406f532c16d1854cbdf24d74cf5c66fe29b1830083cab833d7c3cec505a82064f1645165e4d3af4ddd96b8642b3a6c903a07081e270a2be7e095ebc9e23f5837ceff0758f632c9331c53b9d900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c3ec927562ab695336f32ed7c8e50c7bd681b3b0fe5b49a486df0054799236362e5d9b6fee1064f7af66e51cc81319a5e32ec34c64c9eb6374ba12a273168e5bd292debd5e33067b253752ef7019abc5f17e67a172857b8a8e8edbe7c82459238fa6008b9947a75a6ac3ee61ac107c7d1fbf1c2dc6baac216e8af768d3ad74950a87a1d6e2e8ba984e628f353400df3d071472148b4d13f70aba78e5c583a411c9c5cbdcf057a185c893bdd310ef5d2e1107cdf4246c096e0acef365a1415855031eefe99351db94bf6b79b9e1e515e60d8952c3295503a180d0f7f21b28b7e33c7031b8fe90a7186adfa7055fa538c745dbbb64b2bd8d3f80b139f2f8e2ef624c13873dc7a18da295d85deb0c7631f6d8f596fddad3e09e52fc3592b103f4fe6c603922a46f2f65a32063374e3e28bc8b3925efa996f1e19e632598d840ca5d412e7c5b899378cd32ce96b5ede993d61c0e7b547f88a28045908f77f9f7c59fe972f93007eb82a1ee9890ec37cbf0811dbbe1c432ea05b1d114414682466e43e10bf2f6293c90859bbac0bf118a29d4a6de8106766a76554b1b3abd44d1a373a5250c4a3cbf15b619c4183fe2babd26c3fdf43d49c3c3b2afcdc48293a020c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093740d653bef90c23a3723d1096697de6b51bacd870fc48d3820ffb32347266ebb171fb07ad146c9aee8accecf44e421934147142c8ad070e4a15b8c233dd4040ed464e867301a1b72722a2aaeb5541ca946a405c4bd69aa21e0a1305df32925326e9cabc0e3028a5ffa86c885ed77bef340d58a26506c4593dc7e9eb4046f7e6ab0f9683e528a63e8bec8a3bf0a63c535879f7c69b539bb53907cf46d2bbceaacdc1a0cbfe2dc2069eda56ec750c055c53b3cf50dbaaa1926caea6049c8f709a9c836b6633d24aca2e465093a178b230c86751b2cf478483622364079d69cea424a911a6b43e1ca7dc7cddd4a7d5b9ee837ee7635eb4cbb5886b220b4662b7cc485859fa2c8af7bc5d4aaa2f75d78f5c5cbebd693328b91b955832f99319946354ce06a050fc9063bc66e0464e935cc5fc93e08da3d6edb4b6c6ff3475a05e11bedb1f1e4ac2cf215cd6ecc0e3b590ee445a0f2bf331b506e3de2ed767e095b76ba5007fccccb322ef6173d301617cb4f3fb8d2f10f8007f7fa3884e6524ea04e04d9f078caea71b6dd9f4e3a65be4e353f8b37e31d3608d3e7e78f182b0c502154a758c79719f826fd26c5592bc4d5718a3b77690ef2e3a57224d0a2f2605a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085c71fdf96a6dabbddc821c82065640e4ecedb087ae25c3ee416555f9dddd87ee22390e138a95a606dc81d802b94d9075b3c434038e405c71d34f73c4dff44f77e63fc115ca3ed8bdd80e4c5117f88cce502e54a03370f0e4ef311ca84ef199f4dd52fe1e8ea2f1b62ce2f817b350b9315b5ad31cbe0fbaafd9b2c96dbe71c41b6e307fc8ecddadd7e9f2958646ba3200a5326f32b4b1e75ae7c2da6225828a3ad323da616c7e0dd2d0de02f33e8556bf495fe024a52e14a98ab2a2f4034889118dd7c646eeb78d714389d344141d8b91746b40a6f9a5ee6870a91e90352993b2abeb65d7b33ff60e7d58abda5d2ca02040f34ed766f049173b2366c20af891a6da65ff85654b137b09d3094c6596e152be003ed99c9b65cf53a8e4711130d34c89ab07757057446584a8f37f53172b4414b058a7a060deba1e68940485a513eba5251a417812e4141d9971ac4baeafb23d31ec7554e721c39331b8940d4c3747a43c914ea65e0bce5bf0ac0d7eb7dffb129d6a5554b916d3337427773bfde87f6978908465c3a10e08c004da92ca5e8ca623cde56c29d327cfa2851d59d97b0654ee1e0ebb8202853707d1dc81e63e9cf815c774486de14c0afd799052af686000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028e745b41ae4e60ed72c5deacbb1c163d0f5d9d5c3af2667e7ef93f1e753d2628bf3c3d437e01cc897d6102530028b2c3853dc67bce5f425c3107113f83fc1a5334c01fae9ec41a56ed0482b621bc2ccbdf4169571d7ef36345fc41bdf3a9a6e47b9b47d857933f52a6b48fdcf0dce8c0c516c08d96711dc389d2cfe898b5a926d9ece1d505d70d05c3a8e8061352e802c4e4755aa282da514facdfd8664c71f9168999ddcecb19c6f54131f285ef3457d83da518e490ad13d36abf0a5e5941f811be1499f95b8deeea37722a4becf734479b4cc8ca847579896246e18c8cf264f311b1a658591eff3f2a85d298bba3e1b4bbc99d31d839e3aa24298f71b5acf1dc9b3ecdf6d3e5445f01b5084ddd9209205d9635e207ba53e70c60004136e88516100aa5c8f14dd14fc973f1151541684bb28dbf6072de536020c6911dc7fe05c47de85f92a1c0add41e5043bf5665d83ee0cb4d3c080d5961b3c8759f74ac8b8a6936ee2f357026423107d1d63e9dd0c4140dafddac2f8936f251ee8b77a118e8f622651ab5d03c0872446bfc5d3cb88ca84244f79d832ce905d61fa56af81db43d4f857e4235584803a05992ed9736ce69d28abd217e9db7639c7634c0fab00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c9ae027756348eb34f6c1cc3ff8882a7bdd988e08f795d7e92fa1904a6641ac0b723a9f838d11f62c9a4528899ab6626024dd2cc055e1c1c383e7a838bca2f46608a23999195cdedb547d80d45f95e0e093d3d9d778335acc3cb2a127976d2a4b01bbee152be1a0d1311fd8822394781fb7bd31b986e675e82da7619ecbe7227e8e44d955ae3c0b74350220ed793b0f52059818ec7aba555922bb80db145d0dcc6ec38597d22baa58443141bbf850a2eb1b54cd4c137bb7331e76fbf7d5f23d3f54172646464b446eeff5a215fe11505ce954d873f6c3b2ed6af95071dc147b7aacab0fa19b69334beb388bdbc4ad2510d5dcb8818c6f848597569c8a858aaf5ee7e5e306f764d03a2383afefc0fca423aa3e960475ad439bb7cf012c3e6575f9456dd58e8da680881c56763e7b135ff44ced114c5f13792643c1fd75db69c5e5ad7a1015ac020de5d47488af377e16eaf89afec2f1546816b190efb31e6ca4357adaeb81a802ad95572260734563b1d6e2618b8d7eecc524ff5dbd26434b53731bc656306491026cc2f9c29f26d579b4d2fd95f69fa6e0c4b3c60fa90e652f503e28e9703c22d5ec1a6be809ff1858376be31a845715ae4c4a27941faf9c5e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000833dde74ef5689f2289c68c096db9ff7717df68fe27320e2a7d2540fed72927bf289ec390b9cb56c512617abe1f46339ba5352981d6937af4f019e38725394df46f7cfed7c7a89979f6c71427ac2b12f09b848393f0962f5fbf5ce26f21a4ae86e6b3d4279322984085c94380a0f2d95db74ae8e82ee7e60592c9c15805e0af89147a655e4fa17f47baa3d0e38f9628156a839005af9201b0dd3d0902391028002fb505a1a10af558616c02f560d7bed11af5222e58e830c7e48ff810379cafc1693df14349371ddca982139573d1d4052087d4d31bb15bfab1c4537927b0a242ae49686cfdb75d31eafe2475e662dec5ffa154f76e55f2e6c0b9d4fac5e4ca5c46b415b94382230b662335b3b34a2d89cf7ff7cde4932e1909678646054a9ac59aab8b7c97b36d88355e351f9a6c5354ae300bbdc1353d127c910c4932dbeecadfb939f36eab23aa143aeca7fddf25e3ef4f9b4d824724e09f415d34349d3531614209a2a82b6330c6fd0b18eea8d2c8e639fc816f91f1c6c06ff2ff925477178276c558c0846c4ec3081a81d6ed57987a5165ee82772ea3dfa3927edb6077c4f328402eea790402509a15dd6e30ec78a17119ec9f167f70227cc74594511d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098ffa5857af88f543fa9833b0204eab8f1ddc1365dbc11f53014f9f5b1eea9cbdd22d271b87a7fc6732332f0fd2d08389de8e3726b94b7c2c2dfa62e9390720c271c251d5bf00dfd7ac9c89580030936bbfa06ccd5415f5e95ff19f49a5954a56843091d63b85680df2b7511e5b567713f63b55577711fe61676b7a06324a247568d1b7497e223a52055b9de1855303cb6dbe176912dceaf3797ebdf58370d3363aa22dacf7e88d4494aa3544a4c3f2351a413e6206f43621d69b959f99edbfc5a137150aa03dacec9601b90924193cb1ac37f51b36e65100d7988ce5e24aeb963f4df5013b9a41fdefd0db48608e0e70ca95882bcbe4614f7a6a2a556f87c79e85a152f8f9f1757ebb71054b4fa42bdb2ee63da489947550ec05f32e2eceb4a8d51093a8c4743592c39e92c6d835273247a3fcad5f8a8ae9d82c39d10cc70451ff07474ebb83587dc78992e5841fe278d20d894576f1be65604f54d0ab9196c20cd781b8524aff6146586cfe2fad26102ba8af4fa73dec61b29b2b2e90ce0a9762e81bfef78152d56780dcad2aeb7131162bd44d31f29bb644aeb1a62fa1a23391521a70e24c0736e1d017a67bf5456154bbfad8bd000b9029790fe151667be0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000289eb2101a0a153c5a7234a639ea53b9f694d7ddaa6af9f9d4424530318df72e3dde61b51ba4be18964b729ca001ff540ee3ddcd0b69134d33f332c13eaa7583c393c9645481350b6d13491ba9c082041d633e631f21a3f32c57436afa4c9a842384508fdfabaaa7f8c3016367724107c2fbed401940fc424611ef2906a22c673b46a758187a5fa103098d63e6f5c283593caba68593150991e82ac4184107f874e50071d96793a1d44ff39f1deef4028901e2578e842199690b415b68e10d4e803fcf384876565749cc0a8d7d1601bb80f428f30af0faf549012e433648d9974c598fd9a36bd4a69749e609f6e767d868503d2459517d1a62f4f37a423cd306f81da5799a60a1f2a9bd0b5ce476fa35f44f7f9f4b9b176a3d1029d6f092030098f0ba3d54c7fd3d40c5889cc2181a1a52c59578bde6020b947754a8234915dc5218ed8b74ea675926e6f8512c00c48bda35a1554553315dd07f0b0ebcf9a9898dafeb21bd0451e7629f46990851a4ec9be6d5ffc309a9b10d2b25beb3385e03d5ca484edd56527b7b47963e54f450668cbb500d4e4da28e5568c866d1a976172b4ca5d84e3e1a73d02475aef20d3e058f8f26a2e10cad03842e83c222d040bf000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009759ad7af605e34fe6d306749d19410dd39944419e43aec18257fa6962845aeede60234541984179c5ca3311107f576ca5cdb0aa48f5a0eb4caf90dca39c456daa2ce28ca70b0565ef0c43aec2b42c458dcd3eae8b49ed5bcdade7afef12f36ad51f29901e72aa9ba4065f3565da4b68dff457f62a76d7b37cc7f3667b4cafa69d2003cabefad9f85d3dfee09d38f5d6e0def0bf17391cdec932c2738397fe5b421a5387bfb5ff48f8154c162b14d9a8eef054726e638b90dba2285ac433ba77497c460ddb1c28c6404a93d2ebf4fe05aadebaedfefdb0c24d4cc050b450b5568af31a1e24bdd265e0509c4768ad1574fcf2a948a23d57fb1133ef58168287d06e609f3d25faff1d776c9e29a3a934df43c9b6066e85dcbd5a45471957854a1dd3e8e27fac1c73e62c3b1d10220f7ef2b8188cec1fd0bce541fd8979a3a4b4d1def2d84131dd057de751625427fcc3f1e6ab6f715612121c80e05c599c946c675c9909aee8cc87655d6952457537972a49e7f1ad80dd55870172d7c4d7ad273d986dbe2916c1d51bdc65ac57c24c6af2896d395e10cc273fb3e2b5d5ab833b66a36cd71d80e255f43f375f000afcd8a2b2d11c5e186a3f5e9a98c7a0e44d463000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022ad2033134b1e0f65e4f3f86ddbce8eaa28c3d1ebce97ede16404ff76b52c45b368734da65238d7d0f1128b4e8fa23955ae8262315a419168e03844c5f5f76de5eb056b5ec3365796839ea12d4cfab94bd8b64690aece93d281a97b728e0cad50a25bc7cc37fe9cc7432cdba98afca0c08a7b1572f52ff0fe4841132a54d4a3051389df44d965df8db9270fee75cb372625f3b12f2f62873341b1015f49b00fe0d04f9101357bbf8a2b90635cb9caa99dcf0eb837f0a397d1eb385dc37d6377fef4f37fb1969847caad6377ed34bd64c724837da954d78f6b2afd0f9be3fea4673f652d2b17d33b2f970403e6f519c1018d044d6054d8efdaeacd37cc171c0af07e841193b372897eaa3640284b86e22d3e9c5f1da44125f8d8c1a28670dd4e33a4fbf565a45492bc53c327d1d624bc149e3c707ca7a5f0d803c25c64f4d0b96c922b628c4c27878d7b9396a6e97a8cb1fc73480e1274bbb7dd52fbe7e4cfa2f524e5efabe9f352e55ae9fff7ec3a5182762b4ff32bb609ce32a927075e3f19abde2a91f71711230fe09fb5742ad57564f84a40e4420edbf65764667e4c6f603d7dca778b88931da4939d2d67e08498a37f872884f578a3ea67564c0ed68d790000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3201aab1d7e85412d550e60d9d113f2e210b6cb68c3a23a8269f1557a5df0f3cbf91f15b4001d050901543a15449224f448bc038adf6694d6833592ee115e9e8b3b33eba51cbe0666b1055e6ec4d86b322ec257cdd001f1f3b3c3e39aadfa43ba84ca902b0a2ce099200d84b3bc7e28328a004092196615160867d7fc7b42ac1f948e829621b5a8ccdf506a742475854448cf48972d244c931c8d2ccc3ea005710281f44cb089aa583854138e5b44f12a6d52224ec16bb76e2a583c9788820c0a8e264a154b46c2abd4d3f629dc7db5b5a01bf63e626ac831d2511ae1126c3deb7b214d04043ff118e6b0d0e0ab3c7008dc56bc8c6cccc01f3dde85453cbebd4168d2b83e6ba00a6da8ae29f2a4d8fdb00dbff945dd3950d9dc5e032b80c9d7f60b26f1c0a94e251240a37fd515cf81027644cbc423bff5509a10c13542022d292802b66e8284efc096a58dfc0cf4b8842845b99871e52734729e5d5bae66f46213c70edfd1b967bc5c0947c8e72c034540083df453476d31828ebb31ece06fccbb024b809dc0683144f875b21c196ece2aaacf3e1c8830801f65f1248b07c6ebe51bde2c78f0a110e6ae5f848d6220e0802659a607240be3245b01abb6d7040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8324f2a8f27153553776f9d9af1b697c3865a8e37381da1a0601761eb2ae1e1d1d0e8f79a757caad90f4ab7a7bf265f5483833885d22fafeb0bd3e74a10e924e3316fef325f692d5e7df9978ba9142cb24e75cf8f602ca57ed3d9a03800d70fd6f28f78586b58440937d55587b70c27e989894c87dbc6b128ba4a12a07f4ef5931da89f18de2e0155d342eb0bc65f378e08499011fb5f7b23b956e2ecb8057ca002eced9c3fbdf353220bc88762a1b09344d7f91550fdbb287c6ce4635c40cda713322c077662f2b082e130f6e10d6650a63c6e76ad3f6fd099ba7ffb716250b725ae7000694b50240939e2818605417c32425b1b7fd4d9ea5b830038f8dbdf545c84f42b4f0ce714fde988e9642bb413b4909fe52588d739d44e9189131ad06addc762e89395e42a12fa3fcbc9305ab5bf42eb7e6e9ad1f2044734dcba2aa03396c837fb8711e1350d878f7236327e14b29a86495048de8e46c21ec3e8e9f66e8b96013f72434fcc5462a79e460086d3c458c3b6f27d0221ee008bc599c2208d5731573a3a884cd8a8529d79ae95ea3c2af6d8b7de96dab5905c4b12bba7b9f09a657515c3681102f70ad93bbd0e941838dfe4162e8ef9ead5a868d5a2b4190000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a456f94c8c2681f77b615fee0a7d2bdc085f39b6264a412c0e3d1080447527b288493f9d10a806dbcd3ab218978b2898f1b5d94fe5629496ef7ff490f4707a38e2e4f7fcd155c9dfc46c9ab10f20d5f1dd3fff1e2aa21128bf1a93696902ab0fac331d1561f6dc2b0e5eda3c09dc3e6d6d5e6c69ccb5b9dbd885fea4590d643a08749e89bee33907b2b442051cba8d0f01f344f5d2f976d42add547f3906830a45415cf648d6636587f9090e5aa0d4ecd810e3a228be058cc0a03f81db46123a3584e3d93e3f2013b85199c26ef8e3c7bd06e8d019a6a80600fc33373d6befd1e1d82501053df290ddd880333942748fe7771692a42102194833049a6feae6802ce1204184cf391ef6dae66c8a04babb8e82a2c325d98df541192a6729a5f651e24c40dee479514ec2d699fb3a8c700cc0dda522e46e6ab2fbe56c990e4296d8dbdae2ad5cea3a5497199f7d255244373cd66bbbffe5ca9bd8f216983b875dda588c88cc200123f2edcdc6197cea48d9cfe782b4ba8984ae8bb505ae61840df3581bec8903bc2995c3eb9bf08c7cb82361eed460ef9cdf0d8294ac8825318285bcfbeee7960c849c9551ea15e2a438943c0e1f88aff7376c15cae7a62e81ee2b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001118320353ffc92dcc53db7532d05bd4a1d170b70cd973d908d96464907887de6c024855724df6c4536fe3a4f4b1d0d18ab28ab4c26b2ebc914c6921f1976a95b06e9c1eadd8d658c020c176150b163be1e02612d45e830c9fb0776d5429ed682f516c6068baf664356648fca3c949536785245f9844d0b58d45934a7a9cbce4ff3d72d8fc030ae65bae3c8bfb5eaa14cbef5b07c049c17e42ce83d76ec0683fb470701a62d577674d2280576980080ef264b4fa8fb7b76589142f090b1dbd6335a208e4629da5dff14335c1dd06f07d9cacb6433aa52d8fda815d6e4a2f3f34118ebd3243659d145408ec1d6ef5bf943a2dda6d54de25c3c10fa55e033b687da9b5e9c4ed127ce3420bca9127ff606a51b5f7d263396065ee77bd0d5e31968ee00fd3e3bbebcb6681b5c572d73ee19e68f3d25b261ac06481d8b38a2ad37c300e05b35da789a6546d12ce6e4ac3cdb3fc0c6271d3480eef5e4b6382a41629a4820fed98f0a4ce0e0726a93baa4390d8bae905a00f31bcfa33c2f843a1bd87367a620c5e276169ea861ff1b397b8695bab28dc938af426ab1cef28d9ad8d25bb3c7acc9b7bc7ecdba3590d92c53bd1cae1737e07845fe6c664650b99cc28824d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fc04da89d7149fee591872b31b4aab3704ca74a45bc2604bc19b176c384b90be2f480cbbcedf648088f17c4a5b4420b9b3ada900df61d13ef59cc309e3c89f86e445e403a0d48b3b25c2909424f4cd76ad62e2e7e8f3586bef47d012ca125cbbf44d1105aa0efdc02e0a673c2bd4368202cc51110f6c2aaa40c5e80747834a448ad831589876df32574d0566c788d157a67de35e9ce44cec3ab5df6edea586da11c89c221d5ada137e83d419fac34bf7d177a31e77600ad95a255d7fda42d6d8713837e14cd50a083221e0c964e0d39a64da214ad99f10483737cb9a8d238908f1420ff4ad69c2e2460bd2860160e06e7ade8f861b8cf6196e2eaed3e11d78ba0e3bd8d1e5978c9cc35621a363436db47424f17fe4df290da5c4edee1e454ed11fbfa04fdc1d76781cd81c8a5857376d4d9022c66f270de8c2272778ee32171f562890ef0333d70577ffaf0698affe1662c26108b9101c4e768b6d8f160b35e3c1cb55ce9283461a67ddb84eb38484e246f6789e4e627198f99f3acf30d251cc9d0ed8574ff875b219c6b66f8d1dfc610fdb3d14565b6953945ef69d13c21a549f0c82022471d4ca8a91c82621629c379ff1ab652ef9bc183c0fc0971b6e5e900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ee9bdc686345efeb613d4acdcb0ecdb62305f3cef0e1241e6597219e766a1bb499f44b640ad9e9fccfa5d19457f7f01b2041d185aa0beb1a0e813c53ac491d167c70452e0224ec62530fcbd5fddc9b6903caa7eb5c3362a488d7a80c07562f9dc153b66d6235475911a4de53ca43c33c44613a89f3bc3c2af7b88617d3584623b5de175ec4d2851f6c68382b267c3a3e94ed552f6974a2c47085128acdd292abdf343ac09dc0cfedde2a42fc4048c0e9afb32bb22c1acbeb823927eaf97f422d1320d11d7e68193a796a1daab500dff2e313633efb381c2e3645a1ab78905231302adfc7232df9828e7e997cf09ff80fd5d7142adf83bdb8410c3a318981f859e3e4b2d4700672c2d2ce0d0d591c2b32801e026363c6e2f669b3adb046e9c48a2d8fab9702ad1c1098c7834c0096f194884a200574fda167cd669dee2093acb89db72cc4b3e01e9d53e6428e0935ee3687412a3002940700d350e7d93c46fee4e97cea0c7464eae1b60d8958f3a8e9e5cec0db5c9cb529061a3f8a2fb6bf8fa454484b07db8a0691deba2e8e0f78901e5f726d37b9e8cd1209344be63b918bc6e0caab38ec6cf7cbe43b07de40d3778a1ec13f6cd7658cf4600dcfbb0ca1bf0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005bd9bd21745297a9b6c8d8a55903fbe144f716b1b995f31ad6b7481fac955d11477b2d1d4fbf8bb2faef14ae4fdaee39f43bdceb6ca7501b83b5cb1b4a961e55c9755a5d3a3d465ebdd06d021150dd697eb0c6133e4feb5da51f20bfd101597a73748dd7aaf3b23c67a1d8dc6131fa2897c9d08c047bf78e6813eb5e46fe407698400be5d3da86eec0eb124e827684a392fc58c8b4ddf9013854f38d62cd31e3f5bb3402fabfe3c4921e4f5bc8ba077708d3dccdcffc969de8b2459cfe6e9db664fa9a5fd77581bdbb93c1ea3b1339ccedd155e07eb14da4649165fced905c6e5c9d9c8cea63750fd4011cd5060d39eedb987e5b5db3c05f34c66aeb46168cd7dc17a76b9d3974b20cc922205757c1b2399157283a435ce9e761778f03f914a7b76f4ede084749fc527ee730ad69849cde08254528556dd4b4682cd86205526faada558a3b9df89d6378563865706e810596f57ad618a8aa09b192a092f3889cae1398601332022d272273de013232e449e10d0b0c8699b834816e388876705f31e0ce4327d8c6131171c3cf7f6fe5072926aef1911bc32f8c88092cb38435d5ef4dce14263e1c2c44a7cc1bc5ab48e83ae9366463f99f6bae4a60ce009d67a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d7778037728b5e89f5e9708cbd6113973b8820dea5375903b62f1b8efe3eef5c62984b2deb290b3c207f5c3a77c6e8fc4030806f7cd8d34673f9d28f86162c56ce8fbeb8117c3f7afc8eacaac3260ab53241e5dafd9cdb65d52ce23a4b588572ae7b1a71ff2f764909ca657e9e8f7e760c3684a3b22693edc4d290e2a4f7c2926f8af4b1f7ee0a16604cf9cb4dddec95f20272fea1107aaa64ee956d4d0b4452302e0f369ffe7662944e115d49ce26e0a968a16523e4be5ff36c1aa7a2fba7e53ef16bf2ce8a1b948cbe387304aa8ceb214f04f6bdf15c1e8b2f562bf9171bbe91772bcefb2400ffd4d3590bc3ffc02700adf8affa71dccd1d5e0e9bfb63cd889e96f231acc42f3d13c5a0dcea53adcead0fcbbed866045dde43e4edab64835476c6f966c26886e129f8a80bf7caf3ac3780b055e085acd8d9884f77daf9c461805c753ffc0268eb6744b7ce557067cabb2427752b3b7ac0ffa7872a3a7456528dd02999da14d5f0233eb511026ec77aa73ff9f5d464dd659d0c57675dc07a0778f4b4a51e2b12043f9c8a472b741b7495d1613dee9038e20b8b1596c2653e04f9088fdd117b1617f9c61b0016337230966d2827151589d5fedb7955e650620000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e282b0880238588575390157491e784376e36b91b28eddfbc77816965df222239fc838fc5a49eef9c473586aca529745c7a694f30983bb74d65f250dce3c4539bc093bee0258b3523c8476c6b7b5d7fdc33717be7b091184d9a0fb2693884de42ebb843bd09b85524852237cbcb8404338e6f234578a10439770586866e8f7fe96d64a48373a5186b51907335afeff7bf2f7e6fc445856e06faa427dfa7641b7e0cb07d7873beabba81d12bdf57b56f4e401b00edd340f7e514b04130402f96dc806689fe2d0d0cf58d039e9869c81df2121ccda9c262ee0e0ce8728db0a3d2c0d9470e251556bada9401528cdbb7d00d86422d15b40af7a13aacf86007df1efce2b9ce2f9c1a021e30e9de18716c9d5d03260a12b8dc6fba20a5535c37377956cdbca06057fe9e485763bb279145317e1a936c768009e80b3d5cc131102052fb456a7a448f8a151218828a4692e77786663832fdbee0c5d12e61db182e45c1c0196e7394f8c53cac1500ab106cdc44863d7a277ff313344e7ce3465a5e35c96c0103752465dd46c1e1c925cbf9c1ad5c59761a989c5c29a2de6fe0b0ef1bfc991439fc3d81e2d64f3f313b4c8fac4828451ea03117dd0481cae4dee54a99700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d258fc31d59fe96a7c2cd92f81b5d583eb8e8325b09371ea6b34dd93cd7a8d8f9d7e94dda543cbcfff880618858fc75c9b604f294ae5cbcceb7f62462608ed9bf284695995118c8768f924f64a0f8c9aeb08a408f1dfeb58397b789f6918c3815fe8469090b5f71ee623c8d3c13622bbe765299700e6055a73a9593474dd229cff8a4de0d15ad1ee2490158999994ba75272d09b27103c47ab270b65e949961594c5b39e7a27cb0a42e704331d25a4ad9aa9ae546e078047a215bc86ad63ef8c72cf7d96d05f7cb546a648c45ca0549b3744ba3acf44da789a933061aeacf211aec95f45909d3e3d309c10111786e8eea4b992a2f4daab6302fde158fabe9ce46099a4b935197d340708fd1f5c10cd1b66512fa962b08e62b218d95b64ff3fc01af0a5d1a5c0a6f8226af1eac3162775fc6ed279e4e5454f538e52541798e9fed16dac0d0b6625d7aff27706da03964fdd0c19be05325cd8e9e2506fc3c45ddc0a346cd33ea2a182f134f177a47cf46accb04079959ff0246b3d155a430a9c9b01c4320a3badf715d82377973380b029727d33e564522c643036732c10b8ce9c6036e81d40446bdb3a1797db70a1d6585d4a94786354a9d86ba76312052d31500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111b86d4a0ccde9927c7980b91db5770c9c827392b8eb11306ef667cfcd6ca8349d218f50cced9a50cdd67d2af8d52b6816246fe0e2936cc0bfc43d86206b0da8870fa0dc0049b754f337b1a31458d9c8231ce24099dd8ed3c3597697983062009c9e11d160bdb964269fe44b54255a59874a539b8ffcf06ed020e782f1a3b6344c5ed0e9d8bdbaecb83c98e58f79cc452d360abe430fcd9fccea6c07c1349d291d7e5d1e93ed4268029e2dd16991b3ae162d059812e8ee0440437513208ae564e33872df8bd58e8056896fe4a3b57d73c4eff01a18a23e1c64264bc275d87cecc81c09ee364225b4f74fe8808d02811d377c73d5e9f7fa8e2ba0d2321ac6067fe55e6fdb7024677b8bb97c5a7130a314a2b47e9fd30d47a0c62acee385f1767c34ed19175db72d1e839dfa9832769b9376fb7359ddb5ee954bb9e3879426ae29402eb079b1dc52462202392fde21937c4a6634e0fdf45822ed7fe602358bdf06302101545733ed08c8d2774142b029dce6e74109a036ee6ca1eb0cba843735db4838deb7ba5c4145f7882ad5364afac499352419515fd16541f26c214fd741ee55bf33b10ccd697c3dd548ec64e4e40e16deca8efda7766a38067e54b26be000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002434de118cdd7448bf4103ed99cf5939b1db835e05c5a92b775c48fd29a98026620f407821c2dd0801847f0d4d8a52f586b46946ebc4ad3b9542e41d66241e88a7fcd6a0b380d444e0646e013aae6280f004dc1d59f4fc1d95daa6228ab29185e4139e03db76913c5b8208c39870cd0407f3e095a4dd8a33aaee81f68f4fca35a4655071714de3901fea8d7a337d0d29158158d57e72f36a781d27eab267823a91054518885705a36f1f0415c37aa8ba72b84f17d906d33dce589b30ec3c63718bcd58083ec4a705d97217203c1abb3e205930f977b0e74857b93e9f3899fa5d6fbc82804107ce4cee3f8eff736dcf0425ecd57a4f9c17ac298ac536ef528342137696b1732caf2dda3c3dc326f061d441750d4a4ea0d7e1c3e11c6e2b6e6b3728a74e82335252234b474f82953098f1be0078d322b6386ddb702c3d1e7da39e80e9c1136f1ec89ea46ea07e7ccf6ffb13ef1e0d43bdaa7d877513aaf5934c7bf9c299425d5356aba354467cea68d6376b259f9114c3bdfc7e6569b995ebd92941ea531b45d2dab66e84bae3590366c0493db862ba6ef6df43840aae4a783c18ec8f1c723aa4285ee866de36ce8e8f3a4c7d3644e51f6ac7b98b4b12639eb0790000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6dfa6a9849c6b71f1b6faeea2dce9dd41b00f77805a9990995437bdf47aef4959567e3bd3b11b66600f72a1116e8036e7c61a12ce64c12b070c54d08c44f3606a8e07d549f858d5d42b6863d92aacb734f493190e1d6fa95b4ae663c78d0842d7e952eb41ce1dd0afc31d87c309fdc0586c068a9bf6797f75348d0cd2bd95cd927746b85f3aee6d5e9a13d123fbae3c81f2ef1e7055f7a359990636174e027b1f8a08c6dd9b7d5103fa3ee7a80a4040a1e2e9048423ddc5fb53362326f88dbbcf43590b58173f6b3230fa5aa18bb2367ff79596e73f4dd5bdb2f16bffbbe67c76c37ff0fe1678a9671146cda3c2579ae722df5c8df86c5b88b83fc3af941db7876b13df0a9937c5d9b26be493ea2bf9932598a2093f9e8413849ed75cb5e6bc33708d665d2dccbb0046edd5e8f20b48a0d4638d918ffdf2787c2f5df3c4350619665c9f4d543e04c5ceaaf7c6df12dcfedc4278d568c52849999d9707fe45c90ae43b1f99783450d7026a12d663be74119d0127ba826b769e02db8b3beedf33968f2d1bb788850213b09191d886d6c1d9c2fed85ddebc625b126b5d029992b4c70595984169daa7755740b18f3061311af9061876a71fc04f24c837b3d869b300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a1de6910eaedb3cd1e4305631685236eef57e8a9594478797ab29bfe353fce75cab49e865c600ce5d811f44f62d3ddb34f8099364b35e595656cf6b4ef50a7f6e626918bea11a790a9c30ebd424fafd45fe07ed70ff6b903a0f9e8bee2053f8052750ef48c24644d498e4679e6c55f1dc020f062dae7925aa0b6585ae092828ea52f39b0bdf5b38b48f3a34df13428cac1a89acca5236e1b9a5abfb77d2a65ae030dccc2bff18f0011d79b85d70c6c94a88d86e04fbdf15fd5e7f0e4dd955db5bebfcca58f81ff4c297f7c6781b60befa1e56f1df028dea6518c6dab927c159acd92db9154cb5c78eb8979036f0c017fd7aab3dafbe51d1ca99f1ba477d60f5ee3d10942954f67201ae2436a9bdff013de9277d5956f664767a058773a6b1ea2dd2ebbed621fc333d8c3a6335064f309952831a46e59b6965aab58d8507d222b36f5a3d0c75d7f887cd6ef2db754ee31b8bd2312108dc705e56d2dd74fb7c986301ec6a72929d3bb3eec036b2a5c6819ade2cb1e8aad2163e0a9c3d6721a81952a0da70e8ed7de10b76f68ddd500645f23d1b5e6eaa452c09a9f2290a91203ae59b7825865f0bfd098cdace2d6d612e999503fa30e7016fc60547bdc78a9a230000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0111f825072f59f4592b153a8208fc083640aeb5c81f2927e191f215012c8117f177dfef5bb623a126360f0efba8aa6d18f63bc0d350413c560cb0cdbf694c6e8b70f7ad5bb7901488826c88f1e01273542ef951a2895838e1c490aed966469271cf82d7cd93ca680328dd85fee8ed0743cdf7f8c44658152b5c5d024e14fe3219f827267820e2d21a89390bc48cb6f6e559dad7351d9ba213a951ba7de1b9e4eebf19003cd3cfe7dfc631bb51cc491882ab7cad5112737976814c6b07feeb3f44b8279808e250e3157bad2830b4db45ae0cf139e3399098f3cc34e98020a05fb78bad55653e88ec2e8aa2804b1585df5ff9738d06e15c1bea84a3494267a5fb9bcca5623203d8e30b856c9b68bf92c0e771cbcc889747c0d1180d261980f3922dff8be8c0127e74aa80017c49a21513947bf533341f9e395933b74ccc27b947cd1a85dd9f69c43595628867999d084633052f8eb2d739f923b368cdc30d51fc70681967a630f55a4eb12dd1af27391bb88bce3058c74c7ad433e5c339c68c50f439ffb8bc9e1d5db6692996338a280939220847f96b0380e1ec47d21ef9335402038be1cc80e5098ea637da420f80ef94b61303e4b83dc6c1e33ec2ee8159700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000351b8b34c09448df28567c8465c63bbe56cca57974c4b7a4cc2a8f13e370e88f3d3fb0ac41e05732ab53ca8d1d54d16c5468136aa7aae782d7f3a2457420e18d28b94022fc4d34ae73546e283c5d577d8aeebbd48635f9e48c39587bca7b1c528a29b5baf81c12d5ad16be6efb5145680d071367b194271c40e6ffd404ccfed233620a4f24788c15553d17cf0b57c8f47484738a593686b277fdf235c9bfc8ea4c200530345b02baf34c2fabd4ad4d35858361278032b4b4ae590eb3bff51f3c599676ad56e2a1bad904df8924f70652a1254d7471437b63587d4b3a1050b6cf0cb5dd9ea2f7a2669a32c9e23cd725eae3b900ec31134daeaa28f92ae3a5857720f15b1e0751652b484b4786cacb67b0759532545626024ce95427a190a665248c7b5678f0e82a914c2ecb4ed3c59564e5d9439c06d5adf170b7a19d45b69af97f21b1c9873fe1fb5358367e5b1875d5e40caddfeacc6805f48341c16d5f6e4fc43f89eb4a31e09c4bd5b085b53d399cdb1a8d42d9a071310234910de325abc5a4b0ab106db9afef1f303a03b0987880e809656d950d3f59092bf3f6b83591f986c5691364022e4e5c3de3b68c622f994cefbfd7e4035e8a5304809b6d5adc400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bebe8430472d0635ad16eab83c7dcdf1d208c37518d85e119b9dbfb37872a5c3966af9429767ce267c0c2ce955525b58e628c414eddb6c2f3cf63abf5d24c4fcb6c31aa4a5da9820a9cfcb61bcf5700d1675c0e236a28243d1c24841162cfd350b631ee5df0e117effcefb1ddf6d671ea59e602153f86b70cf204933760d0d7619b3fed6b40129fd081e371253b20663d42c076b486e7c056faab7b27c32e475bf4fe008ec88defff4bda79872a6782e03dfdf7f4091276b4ee6c7ffec4672b143f1077cdf9eb2ecb826cb9e82a4372e2c369c1c741d80bf590e193366639b068efef579e8eaa4bd4d2c89bad67618a5418b7b596cbeac5d8220812a3f649a9f8ba66c3749a84c77f9071fd63876353e225cbee75842dd9e82310129fe1152a37775c69f221815366d6f9cd9dd73359fb0e3926c221089e65da0081ce22858bbba75272606954229dcedcb91fd7b14e36b05475ee703fd048966ab3825148da1f583b3423f7124bd7922bd2b190982412b81000eb492233451dcb1eab3546d854153522b7f4e629c23759e475de5bab6e92cc2d04ef8a8bd6b0dadba712b2e49e0f99bb8658e7f88d4168d4f21f21c17b50b772996bc89bd154df67b4753de600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c8e98f81ee53f0ea4444298e87a9c1a70b2f35cbcb18d15f925bf08906b43ef6c8678077becbd24b3e582ec5472e00ee35889c3012da63d1bc99f37a304cac25508669c76a887cf14f919b6891a152e4d5f2fbf19cfa91e79ba2badad09dddeb3642306788a06c1393ce1b2cde6d90f590b9732e31a409d8fca9881fd729565a8eee3a453350141f045ca5e82affa1c2ddec5140d44a448261903a0f7ef796e747783d40d09fd9a0b7b491cb7e3cc861a133edb0bb8ffae4c3320be7d51fc15b41ff87b8a5568a4526714acac6ae028bf3f81811993007e899c804b7f565eb4621eaa4bb73d374a27f50286559a5f878c1a74824b86906821656f1984693a8590b5763caf6d3e2990ae9cd9f144c10d77a3a839c749e0ed5337348f278091cf9d3594f60b3024658787d9840dfffd8ce09b73205e8ffe7e8f9affcd30e2e3456a53987b86240e1809ab989aab03c12cc4782f8542b7aa90ce5f716092ce295f5cce24d22616e7974e73642437e50804c3a86db64d62984f34d10a83705991aa1c5bbe3e8e8ad36af38aa1354eb7e2184f27eb24b7a600a094d1bd681306b47431a343162d287409d6a73701fdd35cfd269b5246da1a8428e2ef2fa996c1215600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000868f25de64b6064c24fb7190ccbeab63f1f4f74cb02795ab92bf561b0ecd48c3c975d7a6dbd50d5dce990c63ab1cbf9ae9bc12416ba631ea0c005cee66d2c176c1ee7543ff0ef2d4c645e0017a5826a7c8ec0040401d1cf611d8e0bba0c4f1b41f8d929dff929e74dce82355cd9f3a438576dda691d0c132e604e35560d22aaf7b13c87e9ac1de6c98387c3dc550c5084af9a4d4b34a6ed4211a6c817dbd4f3f5f80f5a314ca6869316e991c2d7876e428438877367331a1749d69017187312efd1a0c4fa41280f9be643887d0cf852bfabbc26c73bddba1744aa94d7e8c2959b4884db9fc980e6d6d01888e74c09d5cb6ef1059012be45155416b88a5971a93b394b9d88d1a7cab8ba12a2fb24bcda2cc5ce1d63e6eab69775f6f5cc7c412e3a3efdf2ab8176664590cb163a7f54a26fdf2b63f0285f333142590e46546e003631fd3ecd3eb8bf59a42623a8b8b459d53094beead57b9881d1c1129043d00bbfe2c6e5e5bb2d2bf53ed335a7963ccb9763c1665f056d3d6bd537b086e217c192b101aad47b7a6aeb587478e118ce25f35ff8024a762cfc74ddb4bfdf9ac76774934584b38e1fa058c3a0a3d55e69b31610829809c2e53b5cadaad3fc114daf00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002069ede9686cacf342c92d24bb65de6c62c6a9b3e26b89851d04bef202bd881cb24761d5294443ea7b0cd7139c16c56d84fc1f7d62f8e7f40ff2a1c8e7a5ad1a4b2be0df851e7ce58fa677731d29f71260ff759301f539f4d116283461aa4d7fae88fc19150f9f71899eb8e534e9a3d1bd93e7b6a6cd61c9a1bfc8ac5da6f9471d979f02b825f8d715c081f70f7c7104688b5cbc2a37475db082e5dc68c501fed31afb4dc61cdd704574bf2e96370151b833c3622367e1caac53f74d1661123994cfdef980a3820a4d9eab607bba117d551bf329b991c2e81403fc665710b40d63dce7d01c6932eb1892144feeb85a8f7aa93c6718359f2766763855b68c9288ec04ecd4ded5fa800cedb2d364a9789db31e21ff67ed2b8c981cbd75b08984ee0102155b5d60ccfd7e1a2f53286494668642ccaf5b17651df4157e4cd7d6aaad84cd672668592c34deb4705c70e57a38d93811a0d41b31249170e4818a3f9364700a73270eb885861c0794af08305abd36ab78b035af24a5ea85b04b0de57321a31b3ae746f55027bc0bd2b99cfad1d2d8d4832acd2260498b6329adea6350000cada9552e72deee900be7c2bb0514e6630271c731ed91839f84299de4872fc100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001abece7a170860643d1156ecba32d660ebc62bc0c35f06c3c496005dfcdc03ef5652e104212c793ab49da4ae5aab3bb99cd930491e632466f8511b9bc3b34f7c4f5c84e7238ec7a879b9e6acca863a787dd10cda1bc0364f4402fd783e44fdcf3dce58a8bdf0b88971ea5466c7a829f824c94422bf3d809fd68a92a555f75d99ccacc6ddc1739ec2b4a13d1b625ea81fb1dfa3de8199c6f9c40046adb70bcca65f7dceec8093b2da619d33789e6224a7422203d94f62fcf6e6cdfc156f84b586b69b802f200be6da3fffb80aadc858114dec67ef8e56e99938b7b53915d7cfcfe527f8b49a3e7ac69f56eb4760453935ba69032cc7297a92932095f2acb9e4e2f453c5cd1fae5b625e79f87dcbad415e5b6844917063e0639663bb3fbe230dca7c7a869c1f4b2f519c45fdc0cae7d35805a924379ab931af047e4456d774c88792fa26c6c6cb0b6be6f46b9d5af41a62498b2c3216c4d775ab988b27987f07a9176671e1463707d2125b87a74698d4ca4c737034c05ca04e3bc9bf154bba8d12597a49085620571320cb87845dbf56b0e303e1cfbf4669dab76ed7ac617389f9087883643d83c9dce89abb11c54c190d059ef15069e91ab4eff549048117935700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002eae3d7786f420dfb735195252a7d3e9ddd613563fa8a6e266ce7105440880d73946eab37d5f6e559aea6d418e2886b0efa03d375dd87ea3b6e10236e45269122f33a3e821201fb6d572c97ac068bd933b7402d46e0a9cff35ce13809f1903848349b04017d7025bd840112338be83f5c4fa02c9c317a44a454394d8055fd3c0ef7d57574114deea7dbf50e6023ed6f73442d3ffeaa8ffe3ac256d079cf2ac764feb58f243bb6bd38c6f847c4c6a452751b4547734b0b5cdc8db5fb41fec05f6efa1bb9d1221efabf16e3b3200e851bd20ebfcb5bbc1dcf983956ecefc2d3da499f954dbe028f1a13674ea1db503495181e6b0c59d411daa21933446bcd9a06a662f3cb9c0ff563322e3488268f952b0f4c13d3a5cc1f8e0ea9bff4f70c3ccb4da9270dd9519feb79714091aeb48af88148f648a4c2cb1e516fa53b44fa4d2c7158b960a49fca3ceb97bd414872adba3949478bf1d9a3ed4fdb81bbe1a106af6063a5288ee5af820cef4cdcbeac2efb798ad6573e595309f15f84d3315de29c4a116a216cb29233cddf2c288ed7b6d11df4b254656b267a85578ea61199a67ef16a0dc1e4ae3c71586aab480618e3b8ab84995eebea23edda2e2b6fd466945400000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a770ea314e9af4b690d26e4662ef96532e7046721683f05e50c88003472db4ebcd399296d5460b3942b4a2baad3f7833beb1a200310de412273c752952b10015cf191a54dba9cee4b6c34e08a2781dc8555ad4fa2487b9429acbf65db7d29215f398fba32a2ff6f0d797e015dd3c802a65f98eb14fd45806d628b33db38a2ba90c6adb6f6ea65a0b9452027287282a250e9cd4ddbde9bb462eb69865698070dfa4d47fe307c136594d12ad769f29fd589094396c038536c4f4fc35ab1183b976d3baa2f85039aa7eacdb5507eaa931604a40bc7eb4f7561da16d712a2056c19b8862d2254fd0c701cc0b4a78752b02b80cb6e7f2674309d5e0d4b5323987e3d6f2d85c5646f090d9f03b7b94325c4862a07f4a7841401dde15f4373e42f14ff6490f2fe15fc161aa370cee24cd1a88febec98dad990c4b5329c3fc65aa87c234c81350d697bc56f1cff5f6daf3f3c51026b9bdaab5218f03d4af117684531fa31a80c091891ff400b46c4c85a46b429e9d36dfb964dd083fbe65131e8065b0915735ca26065817a23143d261b1b10464a0b26b2a55e1f42311d8f8fe217e718f421fb837c3efa0c577166d537047be09bbb330739ac51e2be23b5ef2fdffbc3d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026e22bb76cf8929f1da4826c0d5fa7a0711890e0eee0554d1de49b39a73445f5e5f248e64d1a45e996c191aab01e2036a2bce4a45dd39de6a82575d444570f5cd4d52264afef209ad3750b899f1b8b0478d6c68c65b34502d0a677d796a08f78af04dfc0c1e87056124f01bcfbdf20735fd6f7a5e0d2339aaa67f85e93f166d2e8c4f46cd69caef39c039fc6a24723048920c9fa4241b43129f42b840cb95295e121437f590be7467e0df774f4978379e6528ef1c0d6466ff4cd4780c5028bf797961a303f10b0f6ce88a4d68e83d83514d540221cf40b1bb7b8552f5ac6d2b4e8c61108e6343051c64feb1ad9e58e2458ac8e28068815ba9e88d9da271e71fd31cd8885dfbdcbb6510b28f1adeab23e616dbac3319f8062840d1768e1d6325222cf18658dd0932b6ad45094a29aa30beda58104e5e4cc3585cb8f9c128c53fee0263eebb9b6419cba1c56b4056d29e80bcbd1de37f4ba779a96ca3c8284f66c468bd7dfe4c9708e043da33362c193a8a2d9ba7a5b042bf8dd562adabdd3b5d34bee3cc705ae4217a71820cbeeaf447313824e2c44c7c984b33b95d3ce40bf7f5e7cb5eaf90569eeb2412762cea2608baded1e2f62f621c0de7c125663c10f9b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afd5579743d69deac8e825c7d70dae76cb811ced68b96339b9af8656b9ec9adeb23c59152cdb1a91364d08438ea8d82ec5b4606f7fa3a9b4a125db93e867a9f4b2fd3532000d2eb80d3424a5c7f4c9c741a70ac5124a713d796de5b4be5d6233bd0b140a6451a67ba2547c1efbc455a3985d6ef696ee5bc78caf2891ec27bcbab0c450d169b0a08d4798df2611ea0a71dcf832c6c18791d155c8c4ed1d1763de45e31d1ec827bc2e1e2cf6fd6740f8aa34b076d22911d66b88e7ae1c75a804d85b715e485130807d6cf8c5660e36f840f249f063bcef7013412ab143d4a1e35232a89cc8dae31f340004a38be60647521192daca88f6b795fe32a20632a0df72d6e1d94d68b94d365ab0d1c6ac9545631923e44b18f4838879a80104f8f6a571be0a726d75b41917bc28450d2d0d14bc3f8f294c425adb7cbe5d21907a5a94390c8696b647f246b15b48e6d6e5d04ff3173008194a0d7c1b3beade0e2757c25d217131a6c4265e548d47a8f57f799f3a81ce8b1488e3bc9836323bdcdc38fa934f74e6606bb4a9b8dfbfff0e58e402c948af656592d9ba38b11b37a5250636136461d0fdac8c1d1fe1d4e434ff7cff5ba76bdf965516da2907f8da44c0bfb228000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098d29e3970b4d909104bc23d6a680f0687bb6564b1fe7f3360bc4a3cf5af6ade2748a2b0a7567e2eeaf870542e6ff4e4a79627d5ce389741a58cb67750cf37ca701475cca6eb22468615f911789e75becebc07f4cef9294d8579d9ac84fc15f0e78dcfe05acdc29c09a754a169d5b76464bc6fea45927cb72ae7353e79c4fe608237e05ef88e32cb5bd093ccec339bff956b0a9604afeaa51bf445cc96c8dc560b3c4b6b14cbdb00c2694f5011bafde401470318dea37141d5575cf75ac48467647d03814befc795c28d71bcfb6cf9ea7aa6dc894d33601f4acd0cf32921fea0e331e6f0bb22a14b48896685b33c4efbccfce809a17d111b37a1a1e829ffe796d54adaa6fe2b0eb880009b666604612ebcc92498eb07b2105fffb2c74369d422b0f0c4dcfb2f0fe1c4abf62cb91ef535fc5bf32103a221b3428ded6245ab3e33412ab744edb7c36253c4b96c4815ffa58b7062d42c35562d7297d9a0defa28736c369148f0e5c5c249dec8a0aec536ea5b006e62014f0407157d759ab2aaf43a979f957beb2efc3d9c9294f5440b16228b1d9c51cee7345bd099ce6ff5c756b254493dcae3016ce708c8d21a237ed7d275b6d14db0116bb438980ec3d5b796b800000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48400aa10b9cb397c3a1e98160bb881811808f5ce66124e2bf7eb380bc978df95a240b4028b67a40306423378913564d21b92ea37b086df7cf85b4d1addf07847ad22f1de92a9822b93797d6fea03a7bff00afe52e3c2f74522f7f900ef12bbd7e880a56c9526f71977971a94ec0e32c0c1f124515a90056ac799cf8c0167c008ee302b1ee1196cbca634e54131400ee42a89e62d37a806a1d41360666571eb9987f1b6ac3d55244d11f19d8886a5346d941a12928f104104343d6529fde53da5cb3267ea030ac542f6a4844ebf37749a941ee7e3f98b0dd229b57a109ea4acdd52c0e38e9fab2f57e2a85ba092f2cb2203fc78f97c5ea877dce44b8ff81152f85960c3922da9b6bf72bacb2d1865d5bad1d9133028b7a618912b907870195b4746c283f24e8b9f96b05403af54c3a0ef4eef0c90872f53e8e7a96e762badf810a341bfc8dd72b49bcd5ced6f011af049573d276ff470cc3260ecf4c4ad40f41a0ba1236ccead76ac8107ba580efa09036a95b65c6a9ad1c29d5fc06a72e93fccb391ac4c2c78554de7fada565b92b8ade46266c15a8a69bfefc0ccbe7e921b470d7206a341ad73424faf20ab7541865e73a32b1da60902a3d753f31d97f8477ddbd14c1a96ac27d2352cb57177670b2b9b19cda5563cda67b8695169927f3386dfc2d048d68345f4477903a2a930dd5483121b5061606fce4d239fc16c064baec5b14e3ad1f92fdf41cc07d866762ab501cd3aa85024b349716255aa092e1a4774712e485918c831c8ad14e7eed5852f7ab9832a1e0853c1ade1ff654ec5d6bf5e6144250d69c5485b9fbcd995ee6302e64e65e4b351199c1387bba230a4a868ad711bbc8e66009d601a6e14fdb4acc94ea13e021cc7e61043172e0ab4a922d81fc04029efbf458f7c8b1273d9a06d6d89e876e7e03dab64c5664007d086c23a7360e04bc05b7254375c06293924df874075253f9dc368dc101e292406972e995dc1a2b180bfd4c8c6909678a181c85c0289552ca2ea157e0822928f9ad54b08ab9222e9eccd73e9081c0cb04bd26c040b2fac243075b738ba6989f979dafd17fb12d700380db8a9eb6e5a9d24f9987abc66e6db02bf8f528c8111275b31fda5b2a1a14df169349421ccfd76b7327a4c4e6e57964e5459409ea2dd5e8e4c700e0332a0663c03a4c8736fe91054b40f9fe572a72126d46ee9a894b7247895f68ca732f3423b17be38a762cd375676dbc40aca5febb91f27e48cf04356867746682bd1dac0084b9b6b2529fc53d05a5de45c095ca943a9aa08c5dc244b5845ee9ff39046734fd992496fb8aad7b5f51069e24d2e6002adc3f6445a6f2d0cffea217b70dc6e7dcb26602e75d3835de05f113bc21a965f5d192ae09bbb8fcc5e8ec6cf21183cbb7350ddbdd5861424dc1b987db992b70d7c2ed8f20548ebf18d1be9e5c1debfe9a9281f52ff436505f3827365c8d88fc61d52338b74834100449c7b01417a2b5e37072ce8a440c727548f616afe52404f0e933843be520278f9e1f1795146bc2b359091d34fe3d04d043ef7d9506d9a51f278ce894086802ac7da0cd2709a7e23960e6f9a52b6540c4fc8feb64095a53ec668891b0c561e2270a9b63ec2a97d133017608dfa6379db88bd0b6f980ad4c3b141ac7f30709ab1cb5504ba62844f94f869538cfdb89be0994646ac478a83df861d37adb1da736df91702c282c0300dbfc89e908a2f181bd8d571c3de78a510dbb4aa7fe8aaf75171f92f6532394b9c5ea5a5bfe5863e12170676e487817d3139e009fa6866935ee2fb83bd52513a9aa1618ce028787b469bb010d00307fe3925d2b67e9558b06e6c15e3e4d262f1c34c2ecc174d93f7374d4ba8e79e61be3bf2daac4cf469b330249daebb72761848a00239b82bd15988d5e6914de1005604c1bd9c086ae0bc9063592c6bd0e743945807b331636a77b157f2fce34018a3ff47113989c4eb4c4c2eab7e811116171c3699e9f8f0c6e6b26c3605e58181c61d5df53c810226fca61aa14afba11d4d28b4bec5da2339c047099583cf0168eef6a36804aaf3a624abf24a4723c2fac537588ce6a8a24f75c266b50c573bf7fd82dc94c1078e2f3c52dc8fe88172d1ea6e035de1b4b59cbb0a6d8dae9f7384fb5a8453ffbfea08df62193417b921661e32019302640a82ae9ce3286e30bcb1abb1de4473d87294569e36b7d43c6235a8e71a46d0c282c51783cfbce49ee39f3492edb48b0fea29671981bac9d5b1e3cff3848e61f11977e85e97b41d4b326583b7e899ec76c313916829ac21b0609b0e34dde75a72e4e493b3fa64641e04d24e17433b119cdfd638ea344f26ec3096bb335a3b4c798da0b6684225ed867e885d1527dc2f54ea83fad6e477d434626f4f3b5549f288278f58253bc891f0f36ad6a38859931db2756af4893a74beb2112397d975dcedcaba17ea7423d2c035056bbdabedbe003e43a6053a6c3b3310789d050e12a1ec471692196497c126a43e7675ed344fcc9a953808b04d62a491765a22a9b0117964a03a99c20c05430f992d1e240a936a6b3b4bab0dde4e64c01218b8890ca8b3a8dead5580253593e5b331be04a29337cfe9b98b8265dddb906c2d1c31feb4c6bbf9944eb278c5ced2828de5628583e85c169747a78fc087f04fcf29448aa283e1099f6d41ef78c0efba31894566ad1d0206a7dbb7881c56b08401315f5666eda26327840f5af0c109c7b0d5250caab30325cbc7fc375859b14bc63ca0d9632877e7714a4267c1ae634af4cac570fc3988503a6614d310c8a28abda938873213ae811fad3821e5bce78672fd990d6594033353e8c6d0a36870f207d5be4c2c77ef7116cede210d3b87ece51c1aca8a5a14b1231d36f6ad95f40050b7e3c391e700b901311519332d3d9fbd74141e54de0ed0478bc94381541b52626506c24466f845facdcd465efd2e6dae53aac9765003e26cce47742992297235a2d11bd2faa164089860b4ea53389afed20181ccb198b69c79ab8810bff331b5906bb4d5103dc986f0e212cf70d61b5f5069708b240c065f79c3bb5e467fe30093a3ddb11b7c312ef0ee577e5a6197fc12b8092271eff37a4f2bfe4723ac41b54a5712e86f203d396872b7ef5057efb293177c47ba5856cd73292f098dcae00fda608c43d31e8eaf063e74be11e3e457713d9a63d107d0f68224612bffc7f1f30f5f3de094a06450c2fc7921f2e8286eb4890a574b7575f47d4208e7f71de0561ec662419b5e34fb05d8399e553e457c8feccbdda14e9ffd169bd0069a8d70da1a56de2655ab43f0dabee0b7f691460aae6677c375d062df241cfd4167248115f208fd6f97a8a53ae31dc3b207f1b223b3a2a4464cd2808c0e1eea053560624421a4cb2bdae629ea2f388895bb49a22b813f0e1c2c96fa17d6e150bf5fe500a8275eebee279b26c9da065219097cb02a25ea538f2499c8d74b5f79a65e2aa2e253866c4ea148b129df585866cc57070344cd7b6b1c967c04507fdc50a21d002cde2fff31ee519ccad5bc9d8a9fd9981e91ccbb642f097e4d3b258c5a0eb631da0575b9ebaa8b09e127d66bcbbd7300a697543d0f8fd9f2302b5bb2e3594560113fa6be12e2a9fc0cdf9d53964499844886485f5d7dd05708ad3111e3eadaa29274e2b64b26b1621e4cbc3d4bdc1976204127494c7ef07307201f75d9a7ca31cc95e1fbf5d3b42d68da7838c52e19d3d6e09d73d63f04762642188c6e36d48045eb359f438e8c9f9d6a6cbe243b790aae3ea30760be89645b46f68e8ed498301a74480bdd66d1a82d6b4a8641cb27d6700cbdeef2bab59263b02af0fc1dbcc0448617b9b3f70c7f912e9eeb660cfffebf95c88cccfc60b5e656431f310083800d7ee03f6df4b823c3208d98b713f07405761629011da81df1a8f0e4a4fb87f1ebac12ef3a6ff0be759d25729c56c66b590f0ce2d0819315ed2bb3147c15af72956d75cc4c6387f104b311d087f03c1c3a4662b743ec9e8aab69d7c3510c9540c6bb976a76369864888c625df833e9d27dcd44715a894eb223ca043d726e78a2c22c324fc6b854c49917c0c4355307cac4954daf75fa9eee078d7a772f4c6c02b635bc820a9a0ee9b78b381df02b4a80a67e35e06e52e41511e0f756bbae2a90537431dc1082aad1c5536ca14f2ae25366657d7949feabf76e4f7c6d2dd00382127917b6e0c182adeb0a23a804e7ce9477f09eafd0607e52c1c8a9896bb405619194cc96b980acb76b590f4b09f202e2d4fa390910d30c2334670665225183e2dd0df16306b81673fd20c8c3033cd3b909f03ef93295b108f0af833f9e1cf662e71b3e54159246d3ade1e6e3ce8a9b21e400bb143bc73acbb9efdbb31609e6f2ff8c66810327b4293efb9d96d8bb94e913444047b968aa47808a466d07f88e20e52203dacfa6bab967e2775c51fd6f2a426356d0ad29fda80812bd2edd5282f287fbf844db6b2516d977f01248116ed33ac9f0ca35fab17101265206a79169203cb3add84ff81b70806676d8fe315990ae81105583ef9978b90151d89dce11c0acd0783c6f625e7aec8ae17eaa7b14ea139b9659aa4d920328fb20d9aa12bec009b41cc8fbed14e6b9dd700b6f2f3a4a3d3b0492412cdbe1b626e68939149b707bed43dbe7899c2f4d7ef0b83cc131f1428294c9f186cc575a9b62ca31bea2b1850e860167a37690076942c77eab3b248f82d507a800b4a29d92b67d0fabf1804786d538ea349d183a690db405bba1b38b3d7f3042fca137ba115d50caa6d891c0add3200529ea7e686e2de6da909a51ab9008ab0c62b7c510dd48f1dd7d9040590ac2d1c1a332719128d4e33f37fc684c540c3deb2b3e47c2927ab77c858661ad556cdf60cc093fd60c6fa53e20bafce490288675aa589876a38f8163ff9da0673d950df59122c01aab6d771f429c8db0d6ba30a4f48ec1edb01cbff2f5037135207a4175aff3a0340c3ad402fd99e5501a5c1c8dd2cec4702c67548717c5d2b1deb6a3c6e478761a4907b2946cb4415edbb2b7079c39621b790d3ed64e2f30e30145a530c06ec0ed9d40a77df3a310c614369f41acee369f098a87126f0d920a971c61a7b61e6e06b61b6461ae11788f6b64b50eb70ecacbdf93c990be7781ec1d7b6b4c89f5d207cc739b2a12b6c8020718f76eeccaccb048ed7823aa8db22f2fef9d970a0a08141e40d4b4aac87628327b8cd7b2f603fb24a2530dbc8e325b1233737273fc01d7f3222169c84109da070874ae90c4424eb7a571c0634a12c15538713987cb312e0cf4c7538a0a525286099c68c7927df6a303ef1e907260dcd98dbd18f92df75b3cc08048657d619da0bb7fd5ff2739cff3f9a4a040d70077d56f9c813d411e83b67df251829cb955006dac0c86ebb4aa48c86cab1e4971d6c587c273abbbed7be7ac94fe724e263abd50044591ee499badfebfaf77b202c112b41a7a927d0a07bbb51200cd21703a87f638b11af85e3c5d10c51a6386101a866efca5faf18154a7c2a9cbde48c6676bfaab3ab52729ced5be33c0fd4a7276e0326fea8ca2f0a9ede5691fbed7b944f2ba1e9aef159aa79e6a602dded442b9a2e9b69d9493e3e2c41021cb40c999ccaaae8151b207d1d69053ecb5eb3d817badd2fcd538c1d6f6156e3b31296a397a5d73bc0bfb06966bebd11032d61402ae48e8a883f09844cb0c77edcebc481a7fa4246e6e7b448f820a02cdb86bb7a01f77038b69569674f3ca06cae1313c47ae81341ebe28d9e71b2e43d174236ac003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000001d118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000001d0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000001d0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000001d0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000001d29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000001d141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000001d25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000001d12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000001d2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000001d189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000001d1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000001d05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000001d05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000001d14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000001d03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000001d2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000001d1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000001d1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000001d14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000001d2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000001d305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000001d280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000001d223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000001d17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000001d08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000001d2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000001d0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000001d0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000001d172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000001d0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000001d05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000001d137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000001d2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000001d2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000001d2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000001d18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000001d0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000001d204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000001d0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000001d1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000001d28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000001d1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000001d21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000001d0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000001d0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000001d107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000001d2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000001d09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000001d24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000001d03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000001d1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000001d205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000001d25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000001d283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000001d21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000001d094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000001d0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000001d1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000001d2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000001d1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000001d1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000001d304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000001d00000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000217494416bbee91a3ded3f6ad43cf9509425c0b99e05f370be59a0a65d9e84e0eb93f7418b47e4f08f26ef7bb83d93c9e7c6f07eb6c6b819e6cfb01c9fd430d90aa3c347bdb3606ce5a2c2bc620da2ac467d5ec7e2a07ac23bd9dc4cb4e9163439b8f381229f9093a0231049511a69d5d88c6d447d807c539a910144e8b14ebec4aea6de65a038d477de887030c1379e32fbc3e7d5fd680a140e7811178062fac6dc08f80e33e643180b64433e867af85192f2f70f7a996798208f5c63b100661ef319c4209bdefeef5ff07ad9cfbc245464eea287a0a184ead4fa42d2025daa08b70f71b1be0bfa9a3cec8030445698381bb3ce4a672b845b82fcc6f7c1e13db23faa45310ff22506fd111e2935ae8979709247e023e76c600ba1e3157033732de2523cdc6101bba4a798a977c8e852810ba987127b70ac2e07a74b2a950a91af4563ef31b3fbd4c19e0b886befdd129c28c8249248ffbee8b0f18828f702e5e76fea205de58048ac360dd367e170ecec94e10d6b9e6c11a2da1a6b7b2a6e18125ca01c9c62c0bb868ca632e62ea9cdee20d5b694b185e602c41c2923a6da34d0d042da4a60f72bfb65f486aeaff1088caa9e39298444c8690df0395b56133e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1470442ba348acd387e5bac80b610711c47a233364e023c8b4c04bf693613ac50ec3a81f5d0d4bcef9c75760955f136361deadcc35bc56d80ea3b78ec5863a2e6e48b567f1fa6688236c078f9f28ef0bfd709294eaceb56557e4394f34f786a521bab175c94924dfe0b1d3cbc892dbea059921f9ae744862d91c5ced104d002c5b9a86a3aa60eca2ccb5c083c927a0db9ffbd94d67776c1aa2d2228edaef9fd2915f4704e5bfeaeba789005a1a385dedac1e71408e40f77dd69413dc775bf8885c68ea5b794b0429099abcf8abce3766c0b23326dfac5d1cf9b6e43265e70f9bb5fc8dc4f8a99b8e5fa40ccfc0b0809fb642b5ad86a694f1bc64186e6d7992d057a3ceb76b90f0d2d540f6358594edad2ea780f48d7d9e301135c1061b35569a8e0dd2b71d4689bd114f61ccecfcebff1995c754927b7a0647151a9d9bd17d7fa1ffb5b0d5d97195b7e588de9369d7631db8788a143e56dcdcd4709579ec333533ff29329012f0c08c7e5546bb4bf6659179d1fdfc47eb55cc8316d0b2708e336afba586effc9a083c248688edbbf854f5a014d73109a4a2af2e9c561c680890b371ab54d7ccc910151bee8f2a82e5ad1b3f1dd997c3a0210aa564038dd923300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ec899f4d0a78a229e221b51ae8a79d9b1e02bf5c553e62d48b9eab47509fb2e173dd7b5b02d0522e8ba695e4e8f06aa504e9975d8627753bb62463b313b75f26a612f1307ebd7fe6ff84424c4587fdd9dcd6bb912797a9de2b1539184a1d92fec43499404addeca0f0e70678462f14eeccf7e33873c5dad85000549b8594e2fcf579726bbca93971afc5ae2f35982b0b0053bff0bfea3c36677452180551e7ceb0ce840393a4cf2b8fe574a5850b56bd289b3e633bbe83e16999a7671ca371ac7457fe6ed094af4f9a68b282aaa87e27f7e7e2e7973172dc8bf35cfda96aaa6045d348db6febd2f7ca71c316e94b15ed8fd3fe08657b21833225054a58d28532631378a7e0e908accb65600cc077ecb5486513262683cd184e9e0dc957b8bf6d935f499be5a9dff0a96e0e6b359ea1eda301630d3b67f5266592097ab76e35d4062621068d9a201b757851b4c0d2421a05df7270662be9f238d5e9b2a875b9c78b2f034c0446a399a7174f1b9d67d02a8160e54e15eabec52a012d5b76563a34641c605a1740a753413450ac10d0f82075f3198e666c54aede8dc12baeb9bef95b27eadfc5b3208a24593f86bc7070c85c5434e3920653ed622b4165879abfc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009951099c462a1fca57aedf1bfd0443176784f42bbdfaca7865a17596dd6d9b1da42531f2740902b0ce3286cbc281b7a51b570b46b254c8ea47adc68493f567cb03ec57b4e8f6ef37f29a0685b01c6561350c85c85b8bacfba8c7dc8d442a8e59d4632624d914f942d84bb559ebbe45de3f25055b2dbfb37f02c73af6ae91da4a4112bec64d1ea1938e48567913903da2eeb439b9d534130ffb23a4b438277084a60bc599fc58eda06122dd1a6c6e2baf36e9d5b59aace5f236d1179bd3d594d5ffc75d3d9508d767fa57fbf0f54b33a33624202939867bb2937d25cba183dbd4d0edf3fa67e109f28fc1f49604b82e4b67fd2f91b76edb9491b2316ced92190422ef7e639b3ec4713b4e87d3bd57b1b94c57e9282e87e6aa05494ce86f9be9413e18e6ac35a7c5e780f6e0d7d911ef06b53ec941e8db09514b911b9c55f6dd170edee638e28188f8f58462bade7c919f263aff2860b370b938ac6a627d96f8c4b5e7ffafb5e3ad5ffb37592ab45fae4c36a648fafe34ca522753c9ab85d470ce235629f55f071e0d5485cc980dce5bdfa1bf67a4e061f325d363b3f6a122009e776736947723fe66d25d20862031b0557d14d2509c7b4123e1a05d5b5f6d017300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002210c729847a16e634d71456b8fb95a9dd11e3e327a9d3ad8c87442e29c2343f2b82765e3ec581ad168c4f5a0ee120c1df65de08476889dfb3cc1085320c9aff50f943fcabafb7a439cdb1d8b67f1618d5619253642b38fffdb34d80156edf26c4ee0b64ae1716d216a179c8a38118ae7b599244b901df9901378e7fe2e2f1cdc0190c83e3c0def1c142bb798cd42fa18ea3154e52fd392ad5966335abbfed3267283525bd81be5a043d724156b99c4c4db5b15aea0a3ac44fa36ddf69f5fafc92a3e52ff68ab90e4e76b0f2931037ca9971e6ccd543bd26cb90a435e941ea07b203afdf285780737f26300b3071ed06ad6894e94cab0ee01efdb2d4089fb92739702c8196ab2fb0ef079e30f0beab83a548a530d762b503dbebdda2d50cd2aa7c2c3803955329256239489f129015946a2ed9b8b5ca77a48d106856e067a9889bb18efbff9435ea2386d9b53315765fc60c9005762110b2a306ef09fb7e96ca978d651eb148b96730d2b17ea45d36e6f7052b25d4cfe62ac45a8780b972702a70272e78d39a3b75066c1bf23abd2eefce1398e99d4c34a4ef2e2377e9627813221a0c532b91ac46ea9a829e07fdee57971bdec250b6378216ed64e8c244cd3e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c89599aafd939bea99628a386659fad66186e4e3d6df66a1a94ef20cab6982706721891e74864a45298be539e03c1ecf9930b636150f1c21b2e362c17482c1ee6b8e0b055202532a2cad71d1a22f923236268c7ce451fe8b9809afaf41ea107ddafa3a9a360eb5f120e1ce603e5e41373c544df8899a7347bef1a6924d9acaf2809425824690680eb2cc0e43fb59374b3272b6959ef30f230cbccc66af8550767042effc6edd58d9b4f61bfa733117f9c8094087ae03f20ed8dc3116487d1fd66c8dd5af6ca825f4f17647ab70176efe79dce699b90d88c2068d991931621b35a130c357b837dbe9163d14a543d75d8dc26cd3e8fd03b59a7e170cfe6691ddbacf2c05fa92169ca306bc37b601a8aab2d70b69d840665229ab3daa75914d9f27698264251af11ed0069dd181d7e2fee271feca38360cebf80de774e4881bf601231c5561aba5d496512aacefcc2d95e0b2b66d619c093cec63d941c522df67add047c35893eb8c8715b768e9fe698052f60a43d7228c5924e8d79126b20e1cf2cd5d7681bc113ec4dbd45c8c71ea8e64ca0a2dda35fd1a88b3c3247c2ef1bb0d0358a21e2ae7c27cc476c2d225ef8ecadd0c9c714d7f2937d8b387d57f508c000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e413d42ccadb87663d888a29ce4d2408d4a7d68894d2887889798a442f6ec8c4537337234256ea283f299a9b6b7d2b9b99fc744a80224fe901f763a8f8f8ea7a56d08ad824f311db700456702f131e29ad67778c06ded487e30ab7e95f7abd9813c6c08b7b1613594d0d1155e89706c62a794bb2c9df5e9003255ca8ce47aebaf090cefd004e110ccd2bc6af11152cca96a7d4948b280e79af13852de165433424ca38314db78cfd01ae329196e9ee1d0da181d9e80faba84df56de6e3a268dc071eb13e933cef493531b5f76d3f36e0402f3886a48ef2da620d5896b3667a7a921138bf70b91d58d11fe7df5eca663b534dee95094bf05d237bbc5c0f4c7f6c74d190ffcb50ca950b119f88dfc164f23c9c40bb75eb151363e04adbfa024a697767112eb5da8fc169f399eed7522e7a797a1991f7f77a716bf7fbd252cc2bcd28007fd3260fcd8ceb4e459839eeb60ce046324bbc31a1d8838c94407abe1d5be0e6afcf969f6826e1f303dc12a84dcb05f2b4fe9cd83960f7351407d4112b686248780dc4bb10c8220f31ae54bf3573fdc2575cd1a2c1276e60e454e4d16635275566981fbb98422268d13e680eec81ecbc38bace656c40972c35ee131a5c50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab8fca66eb3531bcbe06b04b48c120d95d9b42aa4e0926ef22849416de9327959181a850635855cbda98496921f72ffb19c66e0cf3d3c31c0c8511d6b7830ff8691366dcfe80f9f5056363d1af3c4836bba18999eb14f05047f45c4b55193d5e0663a5a3f94540c1762817d654d7d8806c7e6f12e49c12df1fbff663701d5c74212e74d40024ccd94c9e766fb2526f55e739bc165114270d6cf7bdbdd3ca5ba1ecffd99a23dead86aa4a3b661e46fbcfedc1ef8490d5dca64d524dd0ce9400ebbe86b349ff0ef928b40b58d378a8f3ab93f9a5e56442d836c28a0aecde102553ef890ae66833593f6220ce27cd43788a9426acf11ec7788c611c23603846d4aae563180c8090b06d6deba967a399b3202b7da507f87cfe1ca46d06257d185b9374275953a3ff7c35d6c8c344a9bacdb8f8ab33c4ddc5b1fda7d7b64f9698181601b460a1caf96d094540fae4a321872b862c16ba4890adb80e3ba0a44ea0cdf0f9ab2d1d1b42cec7dadce30b31a29c82ce28363390ccc267f28f7804f76b4d2bb3dadba04d89952a2e5f6ed787adb076816ee54710be6eba107764fbfa316c956c117a306ffffa7e9f7d4bc2dac6bb63662a0db5194dbe90bf8d3a47c010fe8e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019831eb076de4c3fe88dcf910bad27f99ff93b7fbfa80450ad569ca76203c37637a1bad6bd7ee6a20c24151e0496468948743cb3d470633253c3245decb753a5919da8ab275d3fe3a6db36ad86c0427739905fe1f2971beca65ceca5b232a69d3d5238243f5a765bfaffbf6ecd017b700152288505845ae85bff1b37d993f0ee81b40e863ff6da3a85ae33d4271151c430a59ada6bcd332901f346eb983a8b2eeea9f87c10377ac9d0f5259f47bc051c58042e6ef1c4ee6882df7291e3e8cd869993fcced7801b9cba0cba48231c5cb72ace4a175cc21477783a9d99b85d1dc756cf9d06bfb64aa2818f9a560817c93b266f78d7a6a99555306184510b789277f06ec240ff056a51b9371daac0c9d1d52beed42fa087adc5dcc21ad1231e9d1f27404124cea2b4b2f0a74cb3bb970aa552ef2331b738d2d9a569d1788e1fed2f210364e2444b75b1b60e2a64599cf82665c8240e2b6baeaac47b93980242679d68698ae09eca99ea6264d3e6909e13b49dd3bbe3d02fa07ea5f8e9ce50fe8c3abbbdfa53f499b978f89b3156335cf048ef7e2eb448da2f784246627e52c9033e269e145340f7d7eb230d30089174322694bc8546a1d56312826e6bc017cee9eb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007edb5f7cd189ae1e89a416d31f56dc995c209d8c9118604ee45b1ce73ad61bb91c5bd26c6da9fb59f04e0707aa7c2ab6df9e936c763d19e91e1d4b68cd7748ff9eb57741908fccb7b7d683d81784316a226f9463321505db16318f943ed75016b096f84ff873fa455f683449d0ce5f73ec4b01354be0c07a6d4d739ee5230a0aa576ce97bfb56c2d392fccdbe9e2f8615ca4c1a7660d45d80359afeda58bc727cb2fda5f20f1cddc0365f3ac9606da10c4654a305c734033ee121d7fdb1e04a33c08a31e22d42e0abb849108f61f11891685798fc2729bd0dc0e94b74514686b24e08e9324d7f6723adc3f0789024f66f234cf7dee2d48b3865cb11ec89ad00f1c01f7f0c0c2cd9c0af22ea6a382462e45a91d8e8c32c04e893b299ede8419f59f393ac3e0ef16e192a3598999704d2668b920da62f383055c44d8a76ea8df466e0a21d4f973a28961bbcd7f7cd6351be02c1eeb301eaf8133146aa412046062ed8ac748946705d34eb5e75ba48e963b277a3b2d64afe1dbd42632f47b9f336bacdc9d30d70c7649c5a6b34eea9ddf723d4f5b10c9019a2c04e61a270e33724ad2cbc21f9e6e80e96804f5c6214f83af8022c34f1d74dd8119cea334963938b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a94d59a8dd35ee683d5be11765bb6006624590ccc32d03d5a002f9ebd26b28f9036ffbead07d11452062c33907c3ad5bcb2bbc4591da86585ca88bd338857531719893abdf87a5a25eaf4d87d89c880aeeecb2105e009cc3c74206d1bd48d38f525c99e499bfb55f0325d51ff50d56593a93e2b1d8f4127c1a2386b0a04d792d0e69b666538b7167ca49a8540e22915fa9bb1f8f4c087b7f443ed6b94e317c970802cd11b174333f7f47d5f376512ed46ba0473cd30b519561e63db3744404f8c26104b71fd3c8cb02e37f456c3c7233c65d3985d21ec175e54d8e892b441697453e3690ed7ca537aefed481c3c2064fbad132cbc15210dc6547dcd6fda6adec8e8d55986447c2c0b81f30d3b06f3f5fa49777dca9de900d03e1e659cb13056a944ef6acdc87580dc145ed4aa4b8a2fe320a1d4a39115a94588040bcb465f6f24223b79739d5149cb27c77d6e2efa95fd45121da3e4343454ab7fbd35ab1bc77bd8ba38cae5605d65947ac261012b453bba04b114c49f9d157a7404397eba46a03b66f0d747604cec8256f2b274fde40e3a8123ddc378be20569ad9e3c2a085842ab96d8184b6ab9e94b42173b351c083f1981838ee060db67a020ff76a5d3500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d17a769dab2b940c4c9f600ead51a58c765c1f097048307811469da3d05ae848344edf798528ed2aa0ef83704215572412ecaabbb6cf3adbca612addd126ad11f90486e760b16c63fb8ba3244f88559018956713af85e8e80a93198f14e734ba8714ebdc3426ae20f55ab8c08121ee0abe2229ab7999ad3d4c840f6a16dcb7ed5ac00b657786c97d216a533529dba7c5baabbc01505ba45c5b5bb2b7f8a64157101126f18b26376e5f942c42d0b60db3fc4e72489a3a110f5e7f05544495eabab94f566874ed85bda64597d685ad280d1e56124e93e08689169469b0cbb91c4f4bf52dba96e0ece1d44dc8e68d1ba81bea10320c6c1b07612cf64808c719640557a92ad98cb45d7f0b5ccb0fb0bd9b241c7b38cf2ccd5dbffaf461ea79676fe6a067eacf5370803c48d22015d14a3e8f7e951f474f37289f949947f045d522d6af5d9f528279346311a49dc891e3bc960891d42959905063eb03e9c4daf268f2bc92691bef8c259be0265322b8f732e675c213ac678d140154a144af273ab7d55142d76c94d66007cc7178c668f7a6b42da19dd3aa27dba4d5930ef3c1d9352f87bdadf13f6bd4fdfb81877c71bf984278660b7f5963231c2f5290dc6dbdea9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028c4a304bd5434f07f54edacaddc58384b1419626f619ba19aff84553d4aaef03897db0751882502fe5263a3e2ebb80e353f2922ad0bfb0e8a7592e8903d65d73c875fbfb0f9c4925cf64a6eeac6a780849f65649d06db1065b7d746d7032aa481236b81a23e1a10b6d29fa2b3a423b8b210e7bf1bf1e09e705db50a9bd058e13bf960a8899aae5e57d525bf416e50a4fe2310b9a4f693b895b76c77958ef738ae6bbc608de109d8fe7716a80a01de2ba75161859d098a3b8df492b27b3bb3c4bdbf65324e356198248e1118ba1b524c042f9ed7bfec10a458e01fececd7f915d66046d52da0c45344c614c6117d3997a6efc4ea52a745167c7b4a7d395842a45b643cf507dde7f8c953722ef5c4f99298e529a59419d692e27a37824013c37cd35cd25e7755602d2903c1eea3063e176e5e6180d7e8ef745752910df362869df536ab067a2293fc692bb662775dbc0e171b534eda730ca96906f7ed36b3e303607a97dbd7e41f295b98276de34b2c2b05f128cf70bf6314da8dc254cdfde544323089b072e1557f94b710504e3fa2b8ccaf7124fe402c7ed8fe90852b8bb262aff024d861e63a033a33c3d7e0fb8c3d2f1b7826bb5f8a34980811830897f8740000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000861f3999151d3263793dd85774b3d6ee505b68cb07fc634eb4053a995073a6ddd81ef1a1c7004d8537a1061d773eb0bd54c61a0d6624ff4df3bb6bcc67cd4fd29edac1b34d194bd67bfaa1b6050697d3fbf727eaa909dc166230b268c25c909efcd77f354105c565ad062eb5e8f9af7f45abaad3a341283d3790795b2940abfa4054163f75558c9ee9a307e2ef733b563013d92297d1eac459f235313491b002c744675c2e28ed3c00b6cdc299959f489f71d63b4315025cf66b3c6f2c8c89710da293687276b65288f8087dfae12f7287369c53f839254c14bf60fcfb33c9df6ded7b5fc9a5c56e57da29790ea1d77ad4f47212b0d1bc319abc09002f9e59e2b72345795e5a182d5d51d721c65c51d920ff91c66c8b60041635b490fcd9c4815e3d63db3d443234d4ad5f9d9ba11b19d29c95cc8a61938d8decadbcf899eb0203dc9fdddf9471aea2bc44b0e5272940830c64342d634a45fc6e4fb16e4029b462beedcc7c4e23b81f6fb5daae7cceafc0c78cfe65acd0523936f8819e4bd36ff33a436416f245b571ffad189489af867258f8c52ad2b80d190c79ac19377cc796bcca7e9ab14fbdf4cf9b2114cd891c8e2abccee5af4572526b778ba0f08cb20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0417eac769ee92723107a054195d0e1414ea54ef5cf464fe61f8ff753b97c36e1b585f7666672cc577d7c4436a436d2d9ea37f983ceffe818d9bfe8b4210e87a0f2577239259fffacc39c9688576c79fb69a693c85aa57bb6c6e280ad315ad60f2a58e9c74b5223b68105632394fee4e605b2262da76e25c8d1ebba55db5fabea8f34709653f124528aa02d8003f38f02e0b24b1a4678b7ac806f76c8cf2a01aee2f08d87446c99d8d7678c5ff1593895630dfeca38bb5e6923ee70410f4d284545a80b6677127d285e66598b7798a235909a40ce258ca0f966b39a32f8c6bd41ff7c0c55c7607e23629228f56475d18c045cca535db702c5bc67db6f66c849c4484a208c5ad423d3e9d3ab78af77ed4dbe760a8b715e9ba53af6a65d72a35358bba0156e2504e0ca0baf59a1dbaec0f33d9446a1f3c75d1d090338f01d390915b19c96468d09faa06827b52164a9958e41a738b0b3fb7de351c3af2c6307ac938c5549df626754d8ba30161144258ef1961755f1c717069c131941300fe31523b101d9b5f906a73203d4404604fcc8dc89f168a18a6f5125740714233d48a87f4f514f8a64fbf85d01272a3629819cd608a9043121bed1f4b0507a810b587f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a79b4fe6547537d78f05f306c9a77a3ab1c898c730f6548bf1151fa5b0f5f78b001ca7818752c7ea40055f51ec414512da65ea1d077aa35fa689c75e6aab32af773380b8b654304e1e95497f7bf6cf4288d641dfb176a41e2566fd92e0f503c65e9ce20507f35170e8ec812bee3568d3644e11f8583bf830920c05eeb368c4ae0b5d708d88d3f6c67f53e89c65bfa3380bb205745cda337fe29f080677b2333f87414b67c330f931e1d74574f050d97e45241034e67d31069765624d56acdb912bdc8077bb5f92f1f002b39a56a9b505e67ef919dc5a0c549ac6b7b2e73ebbd65b24dd6164e332a4e61de2f41d560b7d79a95fa688b85cfe57d703805052c065cf49dd1a50c258dc76f51efd5e0383ee3c73d5b1e56a8c18ca0b9b3536b96322d2d689994ef8f02d697a41a34729602a2eea82c01d54bcc75fbf9891e27e49d20b60c632a59cbe9ba34b5b2a8e3b240f5e32ebbc25b87613e6cbda6e6a0f6846ac395448a2d99d1c7e9bfea9644862acf3e3f61cbb1d2d17d031bef5637dba8081acdda3fcf7da102d62d4ed52338e9fd2d1fe6ff432ad9d8356cde84810a8a884e63d7b04119fb0bae984c09368d61744905ecf13c4979377e6ed8b185a292400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001648dd8e1bc47d892f4cf03c2cfd59dd715bc2e6da4578c0bed7cbfe39864a33751b3a718b8eb6eaadb3c634bad0b0855ef9806b64fefdcfac1f7925d9a17ecb0b43f6f2444c2be4b34a13da1d75d8e6f7d5b5010fb42dc0c14ff9c190f75ade2528fd5fd61cc46dd4fb18d51fc719183d4dea5acd6fba35aed93c6abb7f2c9e3abc35146c298b195522ab9a6b483ff087b1de2a1638fe58899225c8f649d071069d6b63f46bb55f28fa6cbfac8ad4239ca9ceff37308b60f506ef03df5f644dccfb2054792886b2284272a79d885425cdd1106b9ad050a20fe7c7ed63c1284221a6b3c98a1bb067e1e9b6ec4a072b5a697471ffeb3e42a12d4379b6d8412eb1b1296943dabc2177d08ef549ec88c931a7603bc3442094a9736d6c9879948ac4abf41eeda50324b83bd0a5a48b91ffc8c6a4e692af376664607f6426d01e79b0c7e610313f60e4b6e20b3486b016aa919ba6f144bc7e8cc227de8bbc27cae1df4acd2377c94bfd27680b4be61c43128f55601c7e93034192baa9f8cbaa80e1bfadf90b369e582fb5d718154b37e74af99c864dafb979220f8605c4512c45cb900bc133eb30f41c0e022311d50afbe00c09b3c26294f570531d67c7bd0c81c5b2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f045ef2208ed5f403ae5ce21110a1aca52bff48f779605f95b6adc9e1d2646d167e5e42fe304a5211a47c163f492a4141691c50aff61e2848b06bae2d78dede1200341c74e4ebd67da6d772e0b120999baa476f4ab95e5c5e3a10ecf4527d3fc39fdb491939b403fcff8af3c428a14be31f2555592d5ac603d5adc65a5a09e269ea48ead46781d8a566d2df10bc5500599e86530f42c6043c19340b7f3acc7e8b4769ea6d4b536cd4d1585d3acbd585b591e34fa9728387d11490ddf841c69f08b94f0f669decba7c928ab714d1b2183ef9b00269e30f74e74aa99cf34a1094fe0386a8c12b1a4a11371897133778eac4436735e179ab881e5dd74f20c8fde70f78fee27d5bf2f528a9715ac68e59c57dc9128bb2272f06a1ab2203a4562f463f8adb0b01044b3324a8ffc9bb4c75c53f646c5271005cd9ed6aba8fccb11ed8052463bf6ff9cbd1bb51f91d60de608cb72630e1f22e64ad07769d48e6e096bee0d07bff6339d288fffc4c5957c0357ac5d7378336ffddc2c9ac7a8be7fb0c62e36ce9c6dc16202416604988ae140acd2fd91ccccdde7967d348dadbaf505b768dd94cdfb707ba1cb560c17ee18ab49108386a3eca1287bf4823230c07eb5f700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000243770faba9cd5ef20993bdfe36fd2b4aa10be1eabbb89573497023f593b6bcff01dc668f517b05d108bf9919e453722aa51338fa3c929b723d0c166bf0c8e02df01a525a8d2e406a72cd2ba68a1d216403909c51234d8db920df6b4e56cd94b0b3280539ae45bb000b0ceb2e379c38ab570e55ec6ec1934e83b830b957c10059856628886544c1be69f181a9bf114a14de8336394edfe30e36f7cac6b8190bb4a7257a7f17bb58ff11c1559f26d0fe60d4235d67e0d3b2d6b1446005b9f678e68272e5ff16bc47437dc554f9d6d30338484de2272bb73c6d65a554177cf78a6d12856a1e3c744b96ccfeb9b43618ad429f87bcd2c7512604fee78e18b9449fe372c5433230e6270a7be846071520ff0b000afee42766cd40087a21418b8cb098ffdd372b0577b593098f304016d43c56865684ad61951a13444a84b990f1e565a92a6a638116fcde17135506666fb4bee3fa311eaf4a0b8529125195f14aa63a519351e11e2875f4cece4e79452c862d4dc41163a5a7f69ac86cf476239edf9e91fde4ee3c0aeb2870bbba998e35ca2e03831b7f01fb11874b7212590bc534e97b67dd6b5c646942c22ecd5b94729b9d0d40e9967ef06cde3af25b2afd41ed000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098cc04422281fa43733c9ba2b9fbdcba4af325024b525e38f677ff845b8e621218203a15fe95ab8286601aa5394917bd145fbd5b75339693b77573e3bf10528d103fb1e28e35660c5276d9dff32d37ecd86290b7a98e2037ed71c00ebdc916ae152c61eacfa209ae4c42912cdbc557debbed4d0bb324e184621460b251913136c394a2f45c8fff5251ce2874b119256e38ac5187490a08549ebf98b62b9fb5c175e4861922e04bac107de947b549346a47e9b9005606e893465a21ff304be33c7bc98c838a723dcb386b816a5026d71014eb4e2ec2fe8f86ffa62fb68c2baf4cc6f7f372f72ab0f98ff2a26e45b3db8a2c486967eaa234cb78f264f8ae7ae676c77c57b3d0c0197b49a8529fabd79d5d475aa53eaa92e1ef1b088198db456a0267a2bd4c77308daaefef4aaddefa58136cb32aad5d46a2a0b19e4e904ec4328bf43d1224fcd19fdafb8fba40444bef96cf0e6a04ff819c3ac12865e8afac0abf938d80149b031cd4bdf9c005094f53bc71099a11fcc4c235c7a101e7b44b6f9ef6a9d2354e081c7a3dc4fa10920200b5009885101df2f134343b855b43a9e71554e6d9b6163421099aded757475ecd9ce9c5ef80f356b5dbb93b0d1c4ba4123b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ba15bbb308450d59be54b1a2c7a6113c2738fec17e018d76a12a66988da54fa943684238602bdf14c924185695c1dfd1b390d6b9b2b05f5211ad386c7026700042e0c539e44eeaaa7624a36b6040fa2c1c65b162baf4206680124f47f580f0cecd3338a534572dc085e88d6243775050bf1dc2afbefab1d763b211daa8e2cd1c93e123ae7e29fb4983ee9e2b196fca96bb3564a080ef2289aca694aabf249b34b28798470f4f47bc2bf8f0553826b26e2d36995f65276ff3cb50870c978921a2f593e490c229be81d308dc7bb5989ca7aa3adf7dfdff9853891ce00d2c274aafedf3130e2ac5dcf6dc426c5f5f4b93df709834a420d513fca5c727e8de71a1653f2ad6de2027182b8b1243afd6619af2003e2d026b4dafd73c32e12ecb8d2ce642cea51d9c7c08332604e85c154389f9dbf7c8f7384241bdc6f2508fa9bdfe96fedf02746d7e76640ba08b7a0eca5010d0be30b436f9857db7a5999aef79b1adddfa5bcf2f31d077f8c391935b1955e275285428924da5b05ce5d942569e3b7b1f9c8da279a528a6e9e60d31911666b6edac10e3be66e211696eef9fd47a89612bacacaa715e0fb99732cade5edcd428d39120105164035cf2966090559f9b000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008136d64a458e0c7fd1f118abe9f5095faae4a4b5a138eb9f656cd8c0da082b3f9192d19033c8235586aba94873a0c9b1d497382bdadd5265d64043790ce8e84055784e091a42efc54c719ed3fca74fa4eac0511030217af92c9e63bcc4e772be2c0f04c3fd167b185b5d1208723a04f0e341e722395b18937c9dd56a5e755705c2f83281089ee9198444cc7500d1a9da961e2037011ba56d74157cde069189c22cdf37d129b59065a4a6d3ddcd2b03788290d792d8681d0fddd11710b8c4e8ac14c45453c1f357845974c2c07dcbd2ce65b4d5507313c86034a1c686b754554866d363df21dec75df4fada7d05364960702ee30fb91d34af59edafe1d112a7e215263f93bdc6d452c4626117c6136480d1ea07d03f8d5cc5c8126c9d3e6f4f7eb0aaf7fee6d3ae88b87b371e73cd4fc716ab11ca6396ad03d57f0fbbd6f704f613333acaf7de8fc11cef0d9ca645f1222458b5a60a15dbf881570cf8f26ec41040673b55886aeb0559c03425c3298dfed3f082292aa5d9da8e9072b80aeac33fe24d84a04acf68922f1b76a64c25dff0858fa04c29cb7062624532dee7f59548e813a17514dc80c1a416191a8f8ea0d86f78480dbc407998adfad9b2ba442f070000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a21d0dac1f94cfeeec7bb11aab2714d02c138ccfe10f905085625700fc4387ffbacc63d701917cc63a7a543b277d5ed030fc17ff005f73f5f1b542226dbfc0b984960190e00ebe4edd484e52bb9a067d72cd3f92b0f855ce5aa8703655562374fba2d3000ba2d8f63a9e8767a7929aae98dd57371fce3da4010c54e32f0d2e8d78808626a00217ea3684730e052dfd7e88753ffb47edd1a0116e82bda0b29e30288e2bb30d441056e5ba9e6d09616a4ea344178b2c7a3a4d4db874075b361a7c471b7b961e15a0b618f420afcc5152ef32eca3c8ca0245b77684139b51405d62458627e202eb65819e7980b2f4022295d13aa346e20859d04c3582b74fd17b94cd9bcc76b06fe35e82c5abaf0089b2afa1be37e5c3429eb60cc766c567cef0156967c32fd009e17bfd48c104c96f6aa2f19d16dc7db79ba8656c6813805b26a6ed793d1a26aeb48bf25069ad1b2e23ba00cf18637c0660cd407283462d59579e392155f1ee6141743f3db559dc7915c0ab097bdbea582b040f7562ddf92515eb8ceff38c94d0320010bd0d2dc5b919d3eb5a9f550dbe0680cc8092b49a323910b8b115ad52954861030191ba8b27a29913a1e79b6fa4ce2862855eef701f739a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000194422f9dc0e93a56553e4faa227b354d7df58feaa44f6c5e42a097dc549100f69659aafafd88da7d87a2b08c175912381f1e0e2524e28ce1fb6777021a08c168e6ce144b050adda25607058244732b150d4918d21c19bd5c0ce39bbbc4eb518eb88093d44d3b6898d0f3eaf364130ef43bee3d388fd7458905b672e8b4e02e4396ddae3cb0da9fe94c8c394b128a73bb89b6d729bb36549ba84e110694b404297497252ce3afaa769eb747e967a3c6b5e53312d491730904ef518ec40e0351903d7a4997ed85209ea45fd22f74b24d68524194f35ec3fd1764f33a96a9854ede0e8d4930deea36905ce972d6a25b417dbda162e0f772e4954a383a9f4b43b72b9d812ab5ec8fbfadddeb7119625c67665d0ecf2691b72d0290377246c01adbb6f6682c98c5315eb3d3fbf1c1e986d18894d59e17b81d2a4d210f321596575f7c6c7dd8bada254ceffc457ae7fdec2a3f519b989e501cb3f415ae3fc5103a40a374461103ca3099efe6e55e3d7d60856e6d06f97e0a6e4c89c0d4f8f1f5a9d62ef7b477aab8a77a1574b88b86c340edf7c8d080a900d16c4e8cbd5ec6034c583b45a3ca2041d526cc3b213f55283c131bf362a0b3ea8e12ce2fe7cc1c90a0d00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095cf0955a5fe8a97b073fa7572739d9da2a0c6d0c46ea6a056b75af4128db5ed8a7738f7d09d7172d6a698895133e617496332691af6b2b082bdc0e30012cd20e7eaafff2a8b1b942f7beb871ef6603ac4a642b3c1a4c106909d361cc3e6ad7f6f844dc1c99b7c71e4d846f81a253abbe2ab46c640046982d60feb2b80a990789d65933de4a30fa5b3d189159cc4a4b592bd85560d87b20df5af9cca5a22c59fb5305212cf705f7d07022c5fa5c31eaea45c5fee182721fc81b4acb637bc7812228de265433f3bf0d14838721b9a95ba777228f0bf4edbf2023c8c335d95eb3d9662eee7d392d765a6d56cd63b0b5aef9bce45ed50e654c1bad48dc6b49e42a5de1a2ec09eeb58f7370bdf07ee73a812e00d11896190435fe1d2b33580e6d16a9a5cfa638edb04552b8ed05eb15101517db6ba70315b5d42d2e0836df711f7236bad5460777191ed190a313855d7c2136fd0237ab7c844c135da03a3ea63d87974f7ad8762a3030cbb417c191a2deac9e23528b454778a30bbb9bd81b89681f7a9e5b881180570a353933fdc9dd57a92ac29e794357189f1e001cb10c79523491bf2f2e4e60a4f531a43d3d884b6fd6698d5916b7ce0b32442481be799d23d20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000269f6b7eebcc7964151d181d7061df866d07f45e020412b29af2dc488ddf9d8d72f5261492aa0cb27f0c96fabea47e7c8186254c5be16fad5ec301b9f1f86aa3a16a345c2bddd300d32f3f8f4339fe5d3e956df43e081f4d9e688a241364e35a97363b3c5fce6e0f671075790e4baec20bd8fbb74d621de0eebd49ac174a8622c559233fec09241b45473bfc91eac9e14bf8db51ff1c2720aa8254a1664bec743ac4ae0380e7355aa3597da6b735f8ab6228639740896db6c1fb5b168f4a1df799d1749f62b229a9186ace9d91f972a51745ec55917d457465b9da24bf96fb28a515a94c62e81782477039ac8508e39fdded4ae209a80f7ab4e774d81527c2d98167e0d04296e650090df16739060f5496528abc00441e61b523889dab561dfcae2b9bd162ba0e210be966d4b4f0014a14800d45151f0181b773f09097bb7b32a8a309ffb679c22d37bb41e6de4dfbaf2e36dc6b18bb7996cfd723dc82bd3e3e51615f9c460c1aed5d238ba5f7f8419108f6f841031024951062bb325ca3bbb5c6e5eec541cb107fbbbacac7f69e34aa85e8f8c464f5c3545ad7c117012007702c4d41933c9fcfa12ad0311f38395b472836cd4189759744fb09b4926cc180af000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098273c9650744fb98792eb6ac3d8e098e1dbf2fd1dac9b52c5ce9d90b93803234ff3986331a07209137b555ab403d3b0417ec08c77963210a5a893fcab0f122243a6a659a0c6afbdb333b940fdfebb118fe40bec38e1da54aa363ce52753396458ca05897214ddfa7712723a824b637a330f25f4ba4479ce390128a63408b7adca8b6af80371aa4c960ebd95b0c35691759384212fc07719bfde15cb494a4c1dd63cf78a1fd03ab14b57c29d3a5eecebf3c185560abf448fada30294013efdd80d5abef878e252b606c4a0a72de45723befa6c88686af3681d495041ed4ec45142f32c4e2f72155e3f483f019a8b62962bf23ce0976f89f1542d154100783cbb35a395b37b5f77b649c6a736f3f403a338f8f3568e3f9f018b95791d90a55c4bbda5400113729930e695f40d50ebebb6d601c5f0b02ec742c111e9d8764661186d4bf8621626fefcf7f0f842b19285c7a4f818eaf90bfe50bbef0e8cde25bcbb28ac2e5216e6edea75d8d7fb130fa820f821a598eeacdb09b244eb9e615b7c7a379e947c17f4f93ead327ff35862cc79594386407f7a567e1fb5279e17b8786d1e7fe40a61c5081f23028142dd6f79d05e07be1451dc4cb0b009e88b8a4e4ab400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a557af77f1c61fecf4976d238ac083af4b3e0b7fec98c9e00f498119c8de844ddffdfdf8b20dd6e265d66b11d17e440820f24e29499919d4a39ef05c19a7be5f3ef2466a68e14fc3a67536e649d1c5d7b05c6d95468cfd2b7e477d6615d146180d6086a7113424a599a6fa606ba0c2382ce93679b69aa886df2cebdded007191317d238d7dec3df20b6b89f09a6140c89c8cbcdbd6379607deb262e1237d235a7917ad2bf2776267ccdaf8ea182042cc283064275c1c4ff965484df8348d8c1d8e785309503320e9daf9dc3409d6cb962747628ffe8392f10384f0d8e504105ae70cd924f73d6207b893ac306e7f41ba200ca2f9277480b3769db1d15ccea9292ab5525a94456bd354302419a54d6b0c7439e4925fcb95a2d6099bfcb79139b75140fe553a69a07c888eef2ea6ebb9902fba880b5dcf3c07b95156750018fc203745c5c6af087a962e6055cc34f1394eef3d9cc1f583d623eec12625d6c497eb1a29e66202c24a17f8b826ea6f204814018443667f3ef1ea7ae8160e756297a7a57eb372e512264fa72dae7a130a8019f386953537e8b216d07807eb67e1edaabb9656d80cff55e21cee41b1509f80b98312f2cd55fdb039e1b0e9f77e5d8440000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000958fea6ff5bbf7d2ba5b49543ed3849ef9ab9d2214ceb3b548b343dff4429f729ccb999b2755b9a414612e7023ac188e03f9187c735beebacadb99a23f2a6f1d4e80d75740d53ce473cdc60418fa8f899c99409257979398bd06749bbfbca4dc1efb0d7c4a200db75eb4bc48a5ca3ae7c40960719c0cd08c78322c89c0776abd35885ab94e09500b43ac2aeb37d3d83186260aef3e09dba578125f64ba9dcdce1a2d615287b82a487ad8924b5528fe25233ee0a26db93a403314b6d0e8f776bd7081bf5171f71c94c347da6bd7c759aa8b147a30d42cd1d601e2823b0b51a0a98477a4ff866f2c1ffbe2fe72da92a27a81465e0b84a379d5a67ba0c851c13acbb15d79867d857d07b2f5e9699a3bf4a171f4a1576df45bec875d7eacd279bd9785f9d2bbca100b8d232346df5c78bc415e95529451e5407ce38fc3a033d1ccd35ec48dc8f1f87c61e24191905f7b045a161e471fa6efe525abfd007079bdbd990c878d1c475a3cfefab79dd05566549acbbff8252814bdfefce7012bd842473b9106deee0f98028bff6e31b50d8cd295ab4f68e0775219df8f22958a7d338ec5d6bb9f34eecbc4906b798d3f66b3fa3b97d5223ae3e6fd2929ac009c1813069c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a541969f92757d26963078005964e8917fa147eabe9589c0818e7d60df221fa26b20afc8e869ab7bc6c29f34428f50240e107fccd598d452304a3d86f30240e03ce0f05e0310b9126a6387f6846c7033e9bfd240fbf789c46cd08dedaa96739e9ba1085c796d05c1911e103d18361a425aa3d21291f76a29e92d9759307c663f23d757cea095c4538874e2bae38012efb00a6b92ffe15ba36d499c1e7293a0f04120ccf9988e881d4e167d43d372aa2393c422c4268432e352708b3a439cb868c8b451bd06c4624cb8bfa4136c6669eb672b20b3fce1177ab4f3b8908f9d13a9fcc47d04ba4563889abb486fb9f5436ee5909e364fa8e1a215052427ae3b8f736ccc3b183420f2e986989f52131e7e53d33d4ebbc689152346180ce2174a6a2fe53eeb01068aa9cd7fd5fe18cace44ed687bf1542530a860943e40d6a4a22b3bb4c6283bb3a28b9a323b2ed7d3b5d8e40d628a743e6d0a8fcfb129471bc07a2642e7cdd14793369a0135eb1eecfc8e990df5aa6c37eb3737acfa26b01f361cdb410ee791d25db78e0c7d401bda4cb30ecc29a6d0c65749ca0726bd70ddc6f7f0eedf9833c179e2cac147622ae0b995a3bd60562d43abd2dbce6ce14bcfa9459c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008df4a9dd6dac18797b3e62112e0f0f4654ac461d0a60fe3f7d88a21958ecaf3d922bbd8642282758a3f6c2f547eb86d0435258afc4e4812325f0d1efe4ed30d452329495f09dd07a278a6e6eb1802938597063329ea1f5fe39c264535852143ce198b25df9b5ad26fdd30d184bdf8bc0aa823c051c4cc5383dcf76d9a30accd7aa199b0ab7bad1cb01190fbe7e58d7c5e33829481add9ec84621ac9f4823275eec320323ed8259e6bb82f58e696d10a1d62a0bb202f2ef2739674eede133f1d789bff99bc10b75ec211c9dfe020cf2e29915ccb01bb12184fbb56602315375a25fdbf18dae2b9cb858d30ad76e4ada0fb4b35ad61bd0eae94217bcc3a626d17eb8fa05bceb9f524fcd743f041b8b2b858277df4f9a97cff8403eb4576b5e2d06130fff05aeba0d3d6d39abf757f820d131779ad4ee21c493bff31856c2b0503359b8e9b879f4de4bcda0426732ed8b5a5eb3455d4bfb86be4fabde599c8567e2b2caca9a43833dccfe169cbd4482c8eaa1b5c0d1b0e4575f62c9f90cfe6a8d9d9dcc67428f71efde599e5c7c79e44bdc0c9052976140aec9047759e47c2dbf14ca1eb527ab74c640ec1521ea4617dfd4a14f1a7e821994f75881065417ee9699000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022422f6655da7a4664cf90bbe9fdd97b89c26c653cd224aec09ae554d70d8ee673095a3b41123d6971c747fa00e0e0daf006854c979c5be1d4bd4a28a43097dc37605d0510ef0b2b6cfd7bded14ca89cfcd3cdf386da41c8dae5cf7ea49b250e717838a865c1daef29b26955a5fb2eae451a175635a6df30de3e256f57107da0a7665c117c8322019c3028b3ca339afeb71612d0d8dad316b5c5f0a65233ab76ec7c0aa85b0b8ee51451f06cbc32be5cf7c5e27288d27586712b8a853485644d7abeb0924a1c86a1ee1c084f10068fddb0121f8354431ccdcb12659426eccf18b81a235975c34beeffdd51ffc0913f5cfa4f9d1f7eb57245b7764db7399466b54bc0d167a3422e9f37b26b7d31e4ca3386f1e5a95490e837d482a7896f3886f35c4bc7600d958918ed113ac343b0c798557605c07aeb6ca72756709ccc31d9a40e54dbe14f1c091e955c8b2812bee56576857929847435a6f7fde8ac88e8a4987f83317d02ecc9210dfa1b213aaacfd066f75ddc1a3e7dc046d74d9a5e6072d71520749fe5bf98d302b9fd59e9423fcafb1c090381c0b5c1e6a6753196640131894b715e71795542edf59c9c18146084346a105eb71205fe252d825601dab26e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0d29a98f3300c2e353ea05d07e90ee5910c8cc4e7c5147d8c051ee3d25fa1ba1c72cd5751d1ea9c3588557bf4619a975972ba414133e72097ade13638c899373583dbecb45d4fe74478d2c38b68ad5eff534777a611bb01d3de8bd1a1b800fa106cb30693e874a713f3c93f277679dbebf81938e8c038044554c1fe1284823af33433f2f6f3b62d9ffa1a22dd9c248d37da055f35928812cc00d808f038a1cac683163dead7e2e97611c3d64fcc56e16dff2d535b50eb7ac39f62d7ac6528e01714a55cb42e0644f5128764be208fae51d69b878c3f517d04840fd7d3b65619826bbecbec216d3999a7daab44d13bc6f26f04a9b59a8253aae73e7a2397917f9d3011d894cc5d7e8159793a7dedda9774a262f0824452d96434b28980c397e82692f7a1972b581579a351082a2a6448d7ceb47711914c7e2ec67f4e58f9350bdf8fbf3b41ad6a29e4910e000ea725bf8e62a54fc5c4e83295ff3dc7e08a13f388820d0056291ce3a3fb0725b3a6a260108e3bcb475204cf044e0b6126428c831ad0b1d378c2b098dffbc1a07465fc2a555664bfca3f6392c40647bc08edec05d7dd6c298e73bcd576b43d3f39934e2bc48d6c7b9fd398bb2f5dec5b646f715000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011f94c484173a66ce1992a0cf7f2948022d5913cdc54cf2de3cfa08b714e38e449959e08eaadcaf226c5ee8369a322f87d96c82b94710251b1e53460f832c3e969b45c02dabb503ac3ec42c700ffdae06551130dbdead91b4c2b364cbd1fb2b8353d04eba0808ceaeead913b8ec4fac809366fcc9244bebcb641406132387ee77b451e5239599dcc4d131575842ba10fc4bd64a39f9f6f603c7c9310c99544813a67ffc6054c3f72d7067f2c89c512d19dfc43dedd3c0f7cfbf4374efd50395e73ee7f5540361aa0c588a9eed96c3d6fc85121bb967cb88ab535e37a298b70fb2d3abbc9df6582e7104fd1b5f963d22c4e76c8dbe9c1f2c548207ee732424704c991db093ca559c070f16556e90407d308ab74fa39c087e4df55052cdd4b4aaf8d17a0a18d5350948e6c5ae1f739b2c80b224c03434f7c9f87cbc5b0021622be7b76044d8ebe90ded870f1ac52f1ab80ba1626ea2a9ab902996d2a4d822468f3be3d3aa79920a3777329768980fbc6502bf9fdaf2d6c5b1b5827c52485c553404554d15f774086d1b5da051b2cc893fa5f3735280fe42dfbed1a9fbed52d98b8c3d427b385ca549403f37483bd20fff5c3712d8c5a4dc929110f6da2ad3f6422000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092ac24c3411828129d56d4d6d77f81b29b0fbc56d7a14d6de082b62be18c0a2d400556b3010520acf71ade040a9e22423022cd26e05579bd52698d5e1cf2f86f3af7bc1800d71ce16009e2f4425e822279344e91153aed34b2834aaa16ed0c1484131e4f27f2519812ab1d7bdc12c2ae49c6dea6fe806f0c5b45efd12df917d2d2d2d7661c876678f1f3bee1f094b030a7a4a58dc08a99a9af1a6906914b6d1faae78690c1557260aa5d03bfd996290841216b3c7f9b7c98c736150af581a6a2a2d2c051db1d696064e0ddbb8709207b61f65c408e7207f1067c7f1698ce8bf5ff01ff58f88aaac0133c9f380cbfcd7d12809b3019838aba3f4d7703c07cc029da81b748b5c3aef61759d49ccf5f4dea552ef06d698f3005b3c9ac32cc2315ceb3236062a060e4b1d9a700a631cc4ae63ccd1b5bbcc284261ebc116c3932414856bc473c75eb097212d7e64cf93eb969f0d58822e092dee445cef2f999b045a22bdb3bcea3885a24b15e0f32c2c4d2b54c548718458ee59ce8d2144ae5f5253f3f109c30d544d4d3de448e515253d130b2bd967fa4c6d0641b692a27e15e01f13f2dbd3888ba6cc430ef1966a477cb46537d60ee10892146f7cb28b5d147c3ff0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083f6aa268b75c91d967ab59cfc061fca917068abe1d66bb4f5aeb785fc5fbeb4f2149032aba4308dd33e4d6a0a401aef9fa8cdbdb3fea02affc7d2a8cb563c0cacf90e0b5184719407d915c5119d8c3dfe1d387cff4650c40d3098f455474461320882fbccad84e47dadee3df3b8442cdd03268c6773969fe9f0c28cd1d909533d105f3369152afee0283e7296bc1908e163bd608b4b11650540568a6498dbeba308c4b02d45ca84eba5c52eb70bdf443f091f59f0ed4895f5b0300ad0fd33e7be5fc8c6f9df67abd8baabba223d8e963417731e809fb8d1b4721361b5fbac61457a205f154a6bcecdb44e6c7eb8a86cbd7909f71ff5d13f1de0d9caa5e583de661646c91f4b7c9761ab603385059de26f1a348f24f702fbf14f029355172d92ac51eed6450e14b38793e26e2edff5421763999d94b520f44f6b0dfc2a8cffbb1edd77b7bb7eca90d5caa70f01bd63fd2d15fc5ca4380d5f30417dfd0ad7600c17358e953bb849f1b2599fc3ba3cbe98c02f353af99d3bf19f6ceb76708429b7d6465d35fdf602fe3fbcb2661d5483b1f85988f2f6eb1840e25c64af7ea68c37f51782cec8d3e4f820014d5fdb84ade7de9c018044342880e1d544cc695a2650000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000147555cfb6a80cce4b47201b8fd4983af80128d48b134b468ccdefad68d59f40f473d7fb5409a15157c2e8de10512ac85d6d78a3d47d3f0aaf83fc8832c1a1eebb7d84283715798c7792bfe2556c916fa74217fdcad3ef327303388a5766fe83ed340da6f215e2b0a11d6d670aa573a10158d112663e10e59180c147a793e0a34a818213850fb4a767e6a2428e9ce12c0c2409579b97dc0915cb0d9058494584e52a64ff30e227084213fb541772aa9e4f0401aca937294c942c75432f3d31ccd2398d08a7ca36525afa3bb61a69dbf96754bfdb6978cc4441398204f591dbbd2d20d05a9b13422120d4778c26697655a8c7d29a55202f50f84b343d88cdd7ff137e778769d2ec2cc4a497bada7c5435323f8d522f09bcbe5ace89d5dc7f184cfb777d63887c171dba8f71915a73453f4986246802f8cb7fb35e4af1c54497f11f3024c9d0c8c5252c5a51a3528847b348b3f95a102c729f1fb688f733c92820ae388a6fe8f751d6176bff3107c3cf6542715c87743634ff67a5f4b81b3622467d49c703a7db557ac76a3d9b07a2d80c9cec294c33518e9b962697f55cb0539cfb71c5983ed4f33adc6ac12f0529a250cccbfbc76f1935b627e3a6799078556000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002436f32fa941686671e1cf8b3549c959bb79053ccde723c4f9eb217b5e3ee72087e1a0128d3b143ef96465c6ea4ffe7e33d3d384a966a9d358063dff4402c6222cc2c5a828bc0b9b84e4fd902a03dadd74add8574d2be97e5bf6a6bc826f57792dfc1c467dd093e918d646b7ddad44392438552cde150251d47abd12b55cb188a460f87a341e154e1bbc8a17df5f7cbd2c3da1912f7854ed1bc42916874d6b651a9327418810790aa10b7cd2031220adaac89b7942e9e83c6903382047d8adaa6c3be78245cd10870206d3379aa13605d986e70e1d82db2cddafbc06e5af5b784c1fb05a7a1a06442ced7ca2ef20ccee26bfcc953f161ca1ee6830f94f053f03482cd7fe74684edad271841e08a02eeec9061a4426d55dab4a19a3962a990fa2f4197bbdf2f423f905a2dfbaf60308052fa13362335f756803ab706de9daafbd14d163e0746c32e406a581ed72792a4ad8f52bb9b3943977407e3fa1f97d329f8fca6fa86205e2218bf61eaeb240c700920f90deabef376ae3bd179d93e2c9ff4b0225fac4c950ace35842f0363f500c745ab4b5bc1e0de6445928697b0493bf7571186970adc0e18f9a92d880305ef492ab81bbccfd87738a18828ece976a1c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013bd6f8f794fdd472f12ca70069dd356ea5167e590a0697595e4a50c48ec7201c2e2a0ee0ff9a88945fb7a4d052ac5158f78368506dbde1bbfd6bd03280287004a171946824427a79c56600dc088ec738f61ae588d4b0a0b1afa02ac6bb29e0d9961f39547a09e5a3c8fed1e71792fc5c49143685f8cc121aa4391f8ddce41a94c4e15314cb882c33b05f65c8719f6cb6afe7a7e4fda745cd7d409476c78825be4efebb8a7a30d4567a13bbf21e3b3ca9aa786da8cc6637f1f40b0300205228570deb5fe79f71aa2bb085d9e8982fe02e5bf7a6814cabc0d0ab5441dcbca995a47ee88952d70bf4291604be581dad9828d98f7af66892ec0a65bf2c9ebcdde338312a4e83998f785a24e8f0eed0f13aca084e5e869448310c78db2ac85818d55a4dffe2d570014ca6b36f7f45f1b78d93b3bc1a1225514f6c37a6683da6dcc02a211f8c1d570b641a94240f05199e435575cdb7e1bcca248f162587c985cccaafe3ac185fcfdd5a690d569804f17d790ce96dcfdba96497facd2f1cba3d6df3af18d089097d3b2ba2ee2eeefc740a7fbe46c9bcd5a6a04f4d210502ddf9827c2bf4667844f50f68c1678eab332d9c7bbc1d2ffdb4bc8638117f14f85693ea3500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009509d43b440103e4264ba63b291c028c283dc9f3fbe47245772ec1594bc762502fff7536e8fc370c54e1a97e46406ce6171cb80ed62b183c2c01922052522fb18b8f3c4e9ee1cebb5fcd6288d3978cd41193ce0c82e82899b53b1075d0042a3944796712b61ae6889ae185ac1ba0390c12dafd117c3cb9afbfa4ed815e8ed492a6aac807317655edac5c02e0f954cdd2e7c5beef285d258291f90280b5ad072658354f41fd9e6f07c93f0248381041573497db08ad754718b29af3c0b51b94cda6d5017559cb0d5e8a01cfc8c3201f01733f7bdc960110c06d1b177c06411eb6d07ef1911d525e8d8d816a43f5d6bd615a3e9e5fd7e8f9a2b557cdf3b14c2eeadd2f260ee79dde775ab11e88e9e76060d1f7b62a2a0f613464ba1d6bed2cf0de874b9bee0d068ea4920a6e84a9ef6c950ca2bc2f845c3953406855f51d91ca1276d486dcec170ff98e3128d05820b9fee6c847e44a61b0195b1acc8a1e6cbe4a143c0698c837a413cfff888259915de9945094d5cc8b5a37c6206d87da50633685761cbaad1559750e6bee44d4d91cc9830330f8fd9afe140e5d2a9d6d0f300c8c0c0faac9e72fe8905f8258296278803e7e3c404238d26acc087ed30ef7ba50000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094573501d9ece1ff60e6ff7b3367ea91993ae46fc282846c50d3be48a57efc150333f877dfa9b494bf7bb492d781899b246109470140d1c7f2208ad494c4821da28f1f9b36c4800a28e8f74231d9dca330c1ab192640b3f5f780b168085e92e36313c8c389cf12cb3313365d88ac0d888b75c3999019d1dbf661e1097e0a8464c49b2534f3d302456379f0a32f5de09ff0096ebecfc866f05134ca08dbc8b2846d9a58fd100fdf78b4858d3c698cb89829330f71da582353f589f5c50c833b7b7774881dc7974f61dea2fc51a3dea5898f310c70c0a63b358cc54dc4be91b4d9b99756510b64e298445199c70702d77bba266f31e888842471fe9b49842442b982b5293a2ef1ac5fbcec92f8f7fe8b45e6cd5b67b475b9203ac36b0cb115d9e27fc17dce20fd752cfa855a78cbe24c157462ed7b917cb8563c29d840207f124c5ad403d58046b38ab244f4b319720fc06f7e5364d148cbb8669ecf2cf30e94f68470e92cc266c47718c264972450227cdc6839e935b726db527dc9a1dcadb4d5d0f289f05e39048d08b3bc7b9f5a6b95345cef6b36281c63a8e614e79734ce9b98362ce65335d4dd4a822dbc4bb0316e496789cd8a587fb51ac26f3e6fbe47e7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090aef3e27f65fe30eac8d1483e35ddd5744c6310387877c6f498ea9ce92675335d4804f08171f619f0c813c4f1c67b612cb6582565288c84b9c4c289d2ab1c5cacbdd3baacbc8dce0d65d5d76e87863a91810f09cde43d58c9a049b933e2c9dfee4bf8741d737e69d70e6d5813cb72a0b32881810da119481a0f7af6e1ab994afb566c9c61d9ea081846515a91c89cbe60712c03a60a8f23f092b5273974caaa5cba04c510b89f599ff148e7cb1187e6be0cffe0fd214706ead2b9515206214a70fb3d27231672662a3c08769d37b6fc9e0cf894b3e1df8a74e603b8db9e86c719bded6bc7d0e844b47165578c169722fc7534db9e54b4645a6b1bde2940b5c674b992474bcd937e4431b7e925ed7e29428579a12abb48da39d4c3d3570ff5e12c82621cd794bb17f3db0139b359b7b43d168d34e793a27f98d81ea2852d5b7e4377fd20eefbf8b5728700e02ddd24fcd039fc9db330d4923b7fefcd06da987cd36cc1809c7c62d1fb785507c1126d4fb68bc3091e85f49cba3c755932cac49f861d312f6035f5f8732fe725be0ff29e062c9e0e6d5976dfc709dac077af878036f96bd312a101293213f47be3e0a11029212a4da9940b5241213e04e3e587cf0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000143bfb5c438e356dda243fe94bec0982f2a226800bb07d676e9c3df99a3734e9cdeb804a3fba700f79e28027f9898f7b709362133e39f0cc640c82b8a09f8bfb0d32c5fc0dbdcc13acf6e5bba089cb4f11536922ef7818ac0f8b3b10e5a2cb4540a386c8ce577142d0d9a29243fe00ee8eee65b82a15b82dbedf73f1a6579a75097f0ecc8ba4f8047dc4b0874809324b1565f494ecb37ce68957ed5fb676b75daf95fd82b2c4fd5e6db006e51c024d9f2399969feab4880083477792f457b3c6e8057bbe75285d4bcf772e0c66a2c14dea52b4b456cd04e80999d7799cac89f102daeedcb9870d18ad80b17529438ed65df87e48e0d9ddc4d19a9d60a630fca7aab7f971a00f373f305c56fd284d996ced2df44d8dcd04b2e6037eabacc2e8c245bf987790ab22d995cbf736fd218a52c2c40367858f4b4463445e5470b2fa837a8ddc6b7a1a244a6d33d682799d577b09fb47b2b1232109cd1061186c8c951f6fa55d6be353b7d268dc71ac0d47ddcfd84da920db9336d1a05464cc03b76db3b996eb91b31ba1b3d2c719b7485b678de778686868768778ff7ca8ee6e0b998207696104faefb55001322f1e5074cb90799a23f928d02d277b01cc2861f5947c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ccac6ced2cf1ed4bf7fff19e727104c50ccd9972801c28de37cdcf64977ab2afdd14eb4236352f1ed34891ec5efa34503ac150426ff8432f37a4b8f68aff12551697fdf69561d835b94d778ac2afb84506e45420a0091962948294dc55368e06bd574dd31c38baf89e45f2691df0d7d6aecbb3537248311dacacd534bb266574bf6b7a6e7c66372bf53c4c1da569bd0f66aaec417a1709a81778222694223b7b4927ce8ff7bac6e6dfa2650314600f2e9b6937d51b05947bee0acca8d6bae9ffcbbab1932c43190aaaaf365ae1f6266055223771edb0587cb497d796818ca6bcf7610b6c8cfedf9381121017ec6ada567fd337546480aacd258db298718c98b78cc64f14d5624231fbda6d609e54d33043b3e894c31b165f7757f4839d639783f0aed04541db0ad0556a547d3fa7533db9f474a9b985760461feb6784461ac3ba14267dba2eaf058df600ade70dce0587ee48f4c6992c2c9b51c3fcc369eceb6b0eda62e2c0860b8dd71bdc2722a48e0c544fae96c374449ad881be6619e08d7cd8916586095ce1e7760b07910bafbe20e429d230e641161a648b280ceefc1e073ea8b43f0c43c72b306a26abd419a95f81f81a760b6118bdff22fb624c07b200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d9dec242a47880a11bfb7ae37c106450f8699f410c36703aa9ce1a3ef5fda9a261c7049a33fb558d70bf9f22626fd5e51d6de9b98c87ef68e58b10dc99361ad6aeea3621ad2a11067e9ec08797afedc7767f48387f0dcf9bed042eafe794bbe48e2322f23cd14ee663cacd119f3f806df4b6108442992cd2157145b09c531d9c02658fd7e1b8590c0eb766e8139c89769ff6962f5b14a980a2af02b106c31009ebe901c578bfd0b6740b7ed4ba35b0d00b874f5ea45f439b35bd164753009141b49028c44b41abb13e1ff077fb0bc9f1894b0dd77aa61b44d1d8daca95093b9f9a41ce46863c622f9ed7bfffc54f83792d556977ee5c7ff9258e001135774c8ffaf1c5a2bbee0a3113d11e3524ff7dfa8b848dfa8419d2cda5738ff0ada8604dfa430743ced13fb8ea7588511d1f4b7402d743a110daadc3629bb4c01b2aab9ef361244d196114eb71c7a85283738548bbde6ae0bb8117b96eff8894b7b26b748589b7dd4bbb2ccea0c62f288a9038af6ff11f0afeae0942a5ece687dd81a5f6720701d6450d1e8454e508ac118f39cd747ad24c17bb230379caeb2cf59ed9c9e55809bea08548779e7b2812ec548652007344370cc40be58c230f2315cee96000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020560ebc08090dee6912ad2022c4a1320818accd5ce5f047e734f44fbece966db641b3d922fc08000208047916be7e9ff1904e4448c654eb47d4e7d24847c7e59dd15c49a6b234dcb96d18dbbc62881fcd59e1036590a3568d96ce357be0ea18297e56e0dcf098c6152be56f11d083463954a58c6be50d26be086a898b649bc93576997fd3fb5faf0a51cbf57ff21f21d59885f35ae165c062966daa34c442e34f0ce7a1e251a2c72203f10687fd5219056be7495daf05453b56a12ca64e62049b7e743f299a33f3ca7c0b584f4e8a13246429e7175f8deff69bbbb69b52667dbec47add5a7001bda4cfc2dd4d0e8f3012a570ca1e09aa4ae0f9398924d111841f6b8014865f1a96153d0e45a323c9d16c1d5959c059ae2e5605ed8333de62258c5fde1a1aec15021bdeeae9e1465a675385d2fe90f5a47829eafcc34a270ef542e7c7dc108370a714c1a6d80a1f42471b01dde5971dcb8771574ecfa5b430b3eb8e7e45aba65967c9cf4d6623e5cb5af618850ff570de68c995ca68f64f999bad4736ee5364cc451a1b1c0cd9eec57a2b7c2d199a0ce5fa5f6e4c08cd400812a3e22017a741c25284b18047a0bf3006178f114be2b2b20b14a99f68f61f8e48000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003821346f523c57059c647a6f558acb3b0b49a853016a12f7bbac45d1504b12db436e1f12a233bdeab0eda9bc21daf366cf157626374c23ebfcfa59c09bacc58cdd78b5e38d4fd4892c61e38f9aa18856e0cedfc78b771eae7be69a20162102a27a989c7a477047c9302a3c190c8a43a8be017a9ad8b0c2872db2fd82fbfc05ddb6381f39613157eb28cb90a44c72b082c016f838e925e916c9269fe6a9e938f92987fcb6bfdc08c8983cf3fa0fa1230759043eaad40e23bf0b8ccc0728c29293e9a30a2a12ca2a30bc714f95a05546ae796c30a102d150446bbba9171e4a11fb1ef2e771de47c44d451b91703063e98ea02eb88d4adc12900ed932a47ecc07b0a0519c267dbf9727b8c7cf7944bf10443f201fc695b9c49aa8cc350c60b9ea6b6180d09f07302ac06e45281a5bf4e4f6c0f33fd18be112d1f7a51f3a4bcbacc75744ae6bc5d3568bcabba3f183fe595191a35cc8f4296eace54e8f0f432dedb211d79694c12d264dadc33094b59ba29dfa2a0324095f17771ccf527012714434bca80ab4835b102a669ceddef28b8cc36a8558fbc313697d6a24bacb0dd3e3155e42c43a2ed6152f3129fda2ecae6a1dea413dca00b4000f4b5e731d02ccdb100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dcac18eadb59c01df41420289efd2191c19034c553ff56745a5dd6ea0aab0d25799c5bb950cee90a4bf68354fe9f2cf3e3399a652276c7113578f2fee09de7b1c61f55b601f96e12b244f7c34f01bfa2c17c5438edfdc92bc4989113240723c21a3d21c9df54a0a9d7b32808f210578b833b80ec032ebc638d3a6df45f0e6a7a547defa093963381b297dda6049d72673e1473e627f386416793c721928803f439ebf1c9596df7216e0bd874a5d56a781aba94591eefdc7e7e2c521be102fe83a04a9b7aa021d6d9b3f95ee1000985396e829d36d2d93fddd0dd86754b2c904d4dbc457ecad2a4ac76236857f45f2f25b5c66537ea4f286ee4c5205822d6c036fd214a75eb2b7447461cf9761b2c80b395d5a1a769d219de6675f39cdf6f84cad5dd3622892e9995b45a956ab2b9bcf152a2389cbc6ce7cb644a0189cbbdae24f2833e8e2df2e2a6d6ba0b1ddcb151c040eb2a4c7187533742efe6c120c99bd343ded4bb2d796a2d47b3c465fbe8f76189ff467b9339618b5c8e1364b8905038fdc3dc79c0c3a594328b00406027a48093c7f9fb21f9b56b9f8280379e58bef562a95e52b5b99be3cbbcbbf1cce4f8b1d1ab0505421a5befc192275e1c5ab140000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a82cd0c7419f599b2030244df2c8225377704db3ab6d8351e736e2cd386b28fbb9469a39bab5f6817f0cec0a26bb5d42311965d9d1353d93deeade80235718e931eadc3ca49d028adbb133f81629a66c142f62bc95dcd557eb24605d8e0c928a98fd886af0cbbf718feb70652997ebe5a79b1fa7ec800b38c98eb4268e76c6a7cb5d3d14ad1a2bd3d0a37ba3758a2baa93b08c3f796d951beab84a9e2ef1f59a1517a25d3506d5fccfdd0070072347ce43c216c1c6afbbc16236f2059753ce8878903ee316ccda244c8b9741b701b6e21bdf96eb6346e83e42b4f34b5e7d3f6a8296d6fcbe5be31c518a04b4dbfcebe3547803170fcf936ae0b00c5e73cc291d9de3f933af825733762f5f3946f625be9a062c442582b5b583503f037fc9cce016f8a30baecf3d6bd44f5959aba4954c65e1fea3af4054022c9474061f24cfa39b6525e6c3727c49a7ad6cad97584a5663fa1f21d7e1538740fad2e99333b1fa13377c1e1bfe25037244828480cfc051f79e917b34183962d129965fe81408b498a34db9058fbe6866ca8288f68de0e60e8e1990c19ac5227a4773e4469126d7d09f8dcb8f17ac01a421ea90ae9bc3093248bf0c7cdc15131c440783316778170000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a37d3595ae3bedda6046a48008b165ee115a5fe244a2627a4df6f95ae685c2a8eb0d029ff6adaeacfcb5c66217c036d93ed8dfb4dcb6e55e3f1bb3cd9328edeaf3518bbe489b99103abe40b287a8886abfddf91f5e1d26642041068ad9573c8c19dc804134144a753cd9b2eba7ffb8ef3259c6ad3a5506d6012591db8acca5fc7f1b913d99b6ff46bf570151568ca66e5d431b4306a032d6e999a6842f69d6de427fbf5afb740c4083420acb4b3af2fd497e84beb20145e42c5606ed769ac239c925dc295010dea7e3dc70ee6eebd52c43bedbd48f84068c3ae4cc8355a25c11f7b68fa4540d5c700d08505dc00e8d299adb1ab14db040d654a915c5f5d3c81328352606213a26e06fa89cc7781f113516d97c742e1568a4bed543e65d52dddb103980fd6f2f0c16660e1a83bc426a0b48dec41903fd05f51e1c107cd75e4ecbf355a71cbb01e0d9cf82422f97babc3223df0a85b48fef97d0b666172d0e98f95ba8a2257cfc5fb737259477c25f997311f4165f480b570e24f72fcddde328e1800b3d9970bf2a79cc10347641e75eeefd28b30924ee375dc48065457756134a6e683a92772c61925caee24d8f23af6c6b90440994a569a20e27eecfb930b21100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009921adf4d5209e94827b94daa08b93d7e8ff3fbaf0f9b6c0f3f9d6cc098828162fb83bc48acc288f37264a72155d239a2be21737a66966b4a74eeecc8bce23d336b6200c7f1539aab2b3daf0309c5e97e0232e0a947716cedce10cd5cd4a9269034a30fb32b65f328b1c9c56d89e0766ef13cb51a1e3d8fc6570c9b20bc72f427fcf7fbb07d5a41b61f8a71b2954f17fe5f00e08e10dab3ea9e1cd651b154fba281a6b439cd6cac973da793ddfddb93ca8fa186e7ca4a0f90fdab4929d00cb1939ddaa671109d0094b0225f3014a72121e41030dd1fa1b2d869acaaccd3e2f4cb32c8007213408f7159c2d3f5ed94bde20b69bd436251a49dae0a5354fbf975dc4ef682d84290f2dd2e9a5916c7c9ce3136b08ed99b838b2cba628eb6b849e238a2f4da7315916628fdf249ec28ec7c9a3ce88b5fa75daf4ab826b883c24b0d747878539df0aa73a5c3a4bbd16d6db1de9e61200e97833d9a36a2d09d5de3d36a02cecf2ebe869ec7093447c35bc702ed6a405ca98b32a300bdbe3b6db3096001ac7c2300176f19e5a04e8fd347fbc9e230032647435a8f60b9c315a637d0c61c3c5e96429cdd9d2a2485811468d9178c9fc1e5b1619ea4c9832b07cb29302ed0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000981ef59175238384dde15fcede166ac0b6fa953852d87923cd05df09a2cff47273456a847855175c374dfcc6df62f5291292cb70426cc018cd9cf1b419d1c7366f24b8ce5fd08261385648a2ba2295d6f79189e49b919969b09d751cbd7da04f4ac706f7e281779f4fe1b4ee2570dbf943e8c0d5b0ac77d56b2d8c48f7384ba14bbae74b934b83c68a67cb6a785cbb8346956dc6de17b69752975eb87013f663118bd3b0ebc23f102e3a83c88ef5ab066cb3719453e3ca896178b016831c9434863958fbd846c85143a03835f91d8cf081b34c5f0a0f983599b9ae8a7f09b485d88c4a65af6ac86ee8c7db3a00d3b8836a724c043426a60d05cd4805447ea7e98fc2aafdb385ba2b688c1de3bd61676102b9679d9bf4d8c3a51abcbf5e0536a3f4a905fcc89216fda591e04eb70567e17ba300f35292c1cfcfc8e168ae0fef3c627278c7e0b6e45937f21f4a2104fa5e35786694912ca3226e9092c8ae7464063be4935049d8b4ddaa6441c1208962d8947c715f95c7f5edef7a2b6f364a1582bc371999123341d04bc10fa4023129aabbd9a6899b8df0364806669d20038966292bf7257bc73aa8df0a77a064becc9095fa425d2b7a0d6f0efee1cf2cef612500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c777f8fc426e192f3299e91afcc8b77bb20bef5a7ad5418f53b59deb4dccc4577852c9c9426ae2de15b73a6acba6a3b4296d29dd7957212126f1aaaf749bc5e88801b3ef5d55994065399b450e36fc985b1ba167fdb02a2489d0bc90a51c2d0440f443625d64b2dd3555a0a1499b8a7a247bd5f40f535f4f2ebb263242cfc969a03ccb3d809ad5e40da47b8137f16252ee73b7fe7a1f13bbd7dcc8ce0e30f5136c72d694f6a36b60d0b2325d5db382354bd8f8e8b07e94721a588ff123996ea064b2f351932091a9ae4337c691c607d48f8c65375fb634e160b38a05546a07838d8bc0ab8867c483db30910e5a2b7db311b5073ec6b9f1d37afde745140e5e1b950e737adc42988616a4d144afd526774fdf83949b690a1278a0d6a22f0f2938e4048bf8c02e33fbb14e07adf18f906139d8ebced2f8cf9c0faf284e29ab25bcc1e5bb8bba4447d8c1566fadd2c7e10931923f5e94f3f820a95da858d9652016f700a6620873435c34d81c02aaf59b38816fb1a29e01896e6c3ac4bfa4afede158cffb9a34cb4f6fd4e4efa086df8866da176e247baebac6ef93afd7a2dcd00266d1f4240675c3b6956a93815b556577ebc349f8f83fcc4ab6a67506713536100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009298485a030598c70f5c942a5fd86cfd1275c9b95935c0641601866cd90ff73c862161f771bf4544ee6763a05a8c3beb767a8d8ef67435823aacf394da6b23b659c833f456df7cf97038e782394b9d6897874e8004eff8d90b16a13ee2dcc6c141d79a7971fadd41a316dd78f8f8236af389b55696344e23f49e9a858431c21e7b2a89be9df51236aa9773bbbbe12c68decfab333cc73aef345139b2852b4f5e97229bc2e0708b91913a589efa98ef5a5491cd23fa8b22644cf44468b049d0d9840f73f4e29a9d538784b1554846a802a6658aa4f166d7d719ba07df70da42a4024998b2ffef1c72bb34f1758dedf5867f5f41353f4c826ac55346cf2c059908af518eb8397b376f2f3acf2ac11f48a48fb69c4b50f341780ca45eade3f988db0deb329d38aab9d034f2f0cb58b86619c3f22c85631e14817c542c8eded61fe885633f60580e38e7716db0cf26260d14a531c3df07201e90718ec820e8122425eec1055691a2610f56bd34ad9cb7da8ee365cb7ca19d7269edccbf834bef55175df021c7d3d9c74daa49620cde44219b3bb77b3fd39f28e1d57216b888a1384a26df2821bdcdc39e4f24989031e83167362aef8bc2719a463e1f7b1b882348840000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000219cf9f50d04f8f2c78888590a5fd13e3861ee3693f2c0970c7c6045ff41061e59da340dbefe2f5f8537cbd8f1742b7cc2bc8c2cf2f1bfd286d2d43d1f7b1c17355e40f40ac6409fa53b391c320c068e74ba72548d1f93688003a35cc7bafb0e319e505a5ac07fed73c4defa1bb2d52a4d74cbe90966a067c7aa8f29c8566b0b45ce5dac7107bb8fab7f9488c3e4866b2dced699aa634027b0c2c039379e6c781ff704eb18a1436cec8bb5bf280f9e244d1ef25ebe9e621c8b699ab0a4eddecff5748fd6925d702aed4857c23306258750622638462a94a57a89c6529ef528e78fef068dcca76e91f88947a9280edef00a494bce72b68c5af0ca5c6bd695c0ba80cf3df39ba214aba6befc0909604eabc89bfcca0301048e627268fca7a07d8a62832342f3f274e465b7752e4574d14a3e95fba6fd19fcaf886bfba2506e47d20895c0f04d39165b4674a50830be73fdbca520f82f6dbc6298cde9481faa8b61faaa50dfc5e2bf0725de1116946abcfe94d94d367a3ae9e88f25adabbca47ebfa4c2c8cb7af54c0fb4f45d2083e7353bc9a8d78519717303c2997e8ec3ab293091a8782ab32742bcb09a9b8c4896a78b66cc81579e833f1521a12d58060dba5100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aab1a01ef435973028d67218489426d14f2b5a553da97716d7e4d1f3b2d54e5895730cb618fc821791b36cba4429ac81ea79bafdb63b4900f036991bfcdad869160cdfe00a1c039d97b23c873e9b5bfbc0fd56240339134209103ebdf9cfd707e6873b5c3c47abe4be43a384e0297bc4fd847c1ce3dce55740e3b30a099ca5b50d9b992d6bd6195ce2b30536bec20daebd6383d68e4b46d1edfdb10a695d5dcb2d68a10862a927c27b6784cc81e2cb84f0dbd06c3f41798c63eb1b2d74f6399ffe986f3378edc4ff82b47915396fbc30f4f1e060866f09f8aae631d67d5b6257a73916735abe328b730e338e0eb5b9d5e55098bb86e930021766c646e8ec1ff1dab000e7738b154526fadec9b02df6a921b68cfe8dd66b65d145df5fc0b0052e323250094d0643253744e065c47f143e745fb71506d5f4c30517b2cc0ea2559cfcf75d1be1183412441ccb11f9efa5b88957fbe46874603c7395c671add62b13c13d35b8bcdc78e553e5d8a80d1c05005b4462abc1cf3952b4eebff57dde787ad4e1a412710fca86a05d2c367a8701474e9081d1d76c176e48d901c80ee8f4b73d83959a400e2faba4f74d9ade75a24f5d71dfbc36267b128e848f3dc5ed8780000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9f497252c59e426c6be5f121e2957487a4fd9e93ff78d49d949e7add0315c1f0238123ebeec270e37fb7fe515fa5fca4a80b593b8a22be86afb204e3a57fe135d991b806fabbfba8b264003414ea0be031f549a159d188c8e2b9334656352cf9f0d450846ce782cb790c0403ac886e995de2985e2b2b5eb9110ff11b6e8ac2e75d2e5fc270bca0c2095c50a3a3872ff3760458d72361076371615a991466902be63070be871e171d97bd7a9911b1eb3958b4eb6a16167a6962a64fb3ad2a806308451909805d5794097f1005c2320e37dd9d7b1663b8035b676c1bf9c70f18059b90966230223c02416baa18efdba9c7946c177f225fa1990baa3bbe2274f8f007d5a59d8c3edf5ad1d9999ab72500b7d252096b159eeb3e51f87d2c21c6b4228bd2730bf9277daedccec1a0f934ae161f365b4a3c98a14bdc3484270e8074f391c9f3812facac033e900283b9b28aba20762908169df3351f4f2c76b8114e018e82dcec942c3f38432e3378d0e90c191ffb1bd472a7b6ae65a2d01b700523c9c730040f985507f2969f31acfc02f20fa560f0d6847848d394fdf7bf450392d6038278e4ac52858ba985314588b7f199bdc060bf747e6cb3487ab492de8f051000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024558a5d3f2fb7189fb9fef97d01bcc3f311eca7307be59852d55aed854c3d46ca096ef2f2154eeb32daea4934b69bcb8364ae924c5e7bfa598a67c6566edab499d944b1640f98139a25028d22c0ac14fe68e4f094b7f6e6555d82041dc5298b7a5bb03bfc936d6785a187cf0ced89a1abbd3c7a7a7a4e7262d6caa83adc18a04f4a4004d45a68b3fefc7179b2bfa7a5c84d2987b6566ac7641248bfaf4c3f443cef6d1510f0e43d23b4232f40ea2dea71176fec4f8fd513679a224825ea116c674c39fd68e85eb99c6846870b97141eab54af03c6654cb19421fd2633578ba7b9dae5662e152f8e2bcb8b1e2421f805fafcf58945ca6001a68eda3172d52dcae3cf649ffb4f5d9da363c2a26d6bdfc4cf390103efabbdec5edd609d6410003d30a16bf96e771001aa0cd31c3acf39b94bc48c13a0490d8bc7ee500a19592a1f0575929bb20b5a2cd145777b7d6c0d49b2ea9d08d2791b710f33065483ff7148315a912fa9cac0824b62b5e1b9e266a8352e1579ca7f6e159c825ab2cb9fcbf062e89cab10b23ac5470acf1e48f4b1d5bea12be4d35b62d1adf4c529addb7d714e9ed1c4138a0b586199cbf0b802481b457260414fc39419f8cdf2b67afe8fcb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b04f296a40eea5f5f77de8beaa05ff751bb349990f6b61c1fc08520b959c2659a76a038394c376bdf79c6df3a4481943224d6dd97f7be300884b52f578a3bd24ff92249cd12a8221bb1ede75ffaa7a697c9a479e1db749956ec23c0223e851183a41cb9a9d32a38ad7491e07694e33d483133cf24e5fed604ab3e8f18341779a39d89fc47a326f43ef4498772dfb21975a1cc46adac9ee0f22cf80cb2983170f6c679299d10d9373c3e87c0527dce6fba1b7ecebfcfb35b14527683829105d250db4a54490712f899083224705ecfdcf9fab77e450645ee715ac0351af4d40473b1bd685be42c6aea28a84bca1661440dd82e8dc04116e201364bae86c89101069197964776c58dab4fea3f1d73f228dd8044b268b0e9b865495bdeb3cae683394a47b8e9e9a9d2644d21925dfbc3390f12d866583b9fd56204eb19534341303bacc497bd85ff6227490812675a99e12b82696d3a2c12a7dc15913869c82a051b97d305a9a089be79a7a81f744d447bfda8f5cce126d670621c3dcd26f7b9cfbb93ec593eea9986ad7bee3a04ee11084b9f40bb2e57a095b5b6287c987697fa7c042e1a5b670f88edcc9e28d342d8568c2129ebcc8019c3612cae89674b7f0200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162e9dbb9f0666b2b3f32a19e7c45179fe464ccc771efb254195274d3c3f06fad712f65021b4479c49c2ebda9ca1076bede28b8c68f811735dad6b07c80f1b4e4d12ccfcbd542c8569112666238ce809633af2e79ac323872791fbf1a1d5d5b0e7ccbe801829a2dd58e24d6949d01712bce6dbfac30a58056e7a03488b2059460c7651af9f8ab65f09e49ec2ac7b5a75737204b74159513761019a8e6ca2d691ba93cd8242231e625eeae54de1b2f35ec6e54fd7a57293e641fc77db9957da53aab4ac77273d3073244ceb561f3778e0063139a029339c17195a45a9167218b3c8c6467fe69dd0809af8a3365674018b5238342c38658ce3e5dbc2c1a2fec898847d87536e4933f768df4e86b973d0e82502407eaf4fc5af9caa6748d8f95933be7fd27366e298695d847759eae67dbfe4e368815cf123b5c0e3f132b9b3ef2c91243f417b4cd5d58f3241c539a5600bc0dfda8bacfb041c512cc6fbf16c8960c90c89146848793be5e687bdc819bece62d7b42acad7c7a3801a9d6245e17b071843d293d5646b105524c9464ba66e652cb1d104a118253931c914448e466eeac57ae20f72eb5bec8a6ce0870aa8a4871e4481f9fd3c793059f6032f47dbba6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080067649286f41b1537df83e5558a8844dca9ed29c114666febd56567cb5cb6610cff2ee7807e5ec278f9f5c7c79939dde89b7087859ace9632421e23240ab3b119297687ec63ace66ea91729fc43fece33153950506b9ea7dfd71c3722ed300130fc87fc8a784c1c89f5246554ff0e260c26f873e75bcb264502897530789a2b91800dea24d755924437e4cae1a4c087ad6097155026f4729cbc279350dc519f166107f098f539e12929fa3573f8a6c5f196b538d275b704d705c5cac5f8d1a04a3a71f4a5d41228a05398cffabfbde884be80749b3478c9a95d9aa13e8795615c55a3bdab938fa2e6c796c8eb98058cf68020532e44d0b85d9c12bf01515048370d5e8451b80a67d68ce935ca540cc9f499203360d7e8deb4727b7d2d1be7c1be96fbc3486b8b1e9f0a3101a09ff9f515e2f9520ff8b8cbb3bdaf4a0d95dc7b8e14ddfe3c592228605a5791e9788af4b99935c45ab76f726c18d00a370046cd8430337198f0b97aa6c0080085f83d5ca9e9bbadd5fd3d82f8a93846c7887502bb6d81bb7aa4392b3b4e5bb0e6ff342f422e094e2843ef9c6d7674bdf271e84c10b3dfb08fd2c97435bed76712e5b184bd0accdc71b034ad0951ab9be68646200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8c5379fc7bb46a9ce25981c29784d7fa50e561fea9fd9a4c480f65603a08bfaa5a529e6d116a3c624439e1b79af6e6d5285bdf21d67fb19391b83e1f9c1b5e8cef9e4e5e0fc53b9a2b4ad4bd97be5c125332004ce045589f36ffc6bf43c107933db38ccdb47381d5e653cdfaa6fb360d545f641e33379f9f09363355eeb79758b411a258786a9eed9fed14f75d7a175e4c3d50d95085d851c8b4f7615bbc7ef215a50c5e9ac53c50221e33e16eaa738cb1da413ff957f75f8396e01140c5ef384d73a2a87e236d04f833a281de7934c3e0a0e73117602fbd5c74f8e25855944a7cd43f5f1186a0c8965049a7bf62057dfbd104621cbae95aa57d80c8fe9a39e33fab42fdd91d6f2315786d1ecc72cbf77021f1e5541fc0518411753eaba172ded50302febe6e6d4a9352b059940b7f0fb305cb4aec27332902b3a22f2941a34ca95471c3d51e5c3b2eef466af5f6909d0f0255bbac328942b6ca75e498c6274457a77cdc90068da5c5a8181ae5ec1865d599d2657b5511a368bea2ebb88150917a014653121cfca9d229f6b63db705738de5a79ab38b5feccb49891d10263292e582cdd492e009311a402e5355924e8ac1a3342a9b2762035f310b2cdc74cd000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021688c8b9b1dc192e4897b1076c790c4c576434c32881ec2167c9fb2602229e88db20ca58a07f35d5914244cb7f406958249b78bd6b536ba255d1a24ca441af453f972ec51d3c00a36f19d801fd00b2ca8d965dce27514153ef51461115c2db910ba1154badb155d1cd1f84d999faf83c26ec67dd817a827106c1549e4fc919a31470022961e3e3e8a3f1466936e1bb7be970b9ca75b1099cfc7b2918f455dede52c63c5587896983f9341301306131fbf2a9e672fed944f82197ed9bce2d96377ef7a0833f717fcd30c34ca8d7514447f6f2ecd5293fbf6fd5f58c7315ca62174f6d0e8a4147d71c9832e9937962df8b6715208da73d3e6b61f64d39460dbdab2d04851dbd5230a3f6501b0169c78809061dbaa9229fcaa863ccfa640f59a95b6cd60970327c29fc07e232fe85cd844b9b48b7b78386a7ab51036a5671a835a2a0a19925656628b6475087dcb6bf07416f7e880b74c2746a863f138f9146c518b36fe1b185ce10bb1d74a0455266fdd002bd8f9d2dcf814356e7930e519f13a86d440673bb21a3ceeea358efbc7824fec1edac62351ed653ac9d0e7dd85a120eed848734019b1d58ab0716662e63db5e8be1b44177c07eedf12bac37f54e7220000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000acb15150b122551f38eed7968127efbe99d3533ac2dfd0d3b265175e2c6dff0d0a913f2a5c1528bce05ba485a4fb3225454e12b4759cecfbc97bca76bc7b62a420e853590de812fd3da0bb2f0041fb23e9524e8e93022482a7c1649ff23abe4701956f44e0acd71f8daf00ffa5fefccfcfd398478a3f641bcfa2f43bfa98558cd15812843a3292ca398e1faec8cab50391122c8b59cd80b91c86b21158645bebc6c03a6af822b4a4caad39be545e27e3badcda16d9ee5852c9f2fb24c301d8d0a22b6a1f4aec5de94239eb9583a3311e024d11ee42425accfd68b182e371ac0c5326e94ed1a8df9997958418c7bf7a3823a034af02db82d31291c84fdb5bc3760c208f9a4a2f72e18d24878d971f8b63c9270419c828c6bcd5aecb2dd5dfeef086b367368ff53dde15f926de2198d5293959570d78dec22dbeaf25734fe5dc9a872a0867581e4cc74389acc2a33e7ecf3bc33e4ad2b3f6059ac45c50245f0ebc4ed65e905d9e879432896679fa3a86159f2336130ca530a9da6775a039304e973748f8b3302df0503c5f7881576bc69ac513bba26212d2347bd1a824d0e114ee8150c852f266b0800ccffb5e665f0fc624aa7f7282627b2c54679eee6c23091600000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b4840135f49510fa6d7bcfe5a2db3d1d23e2be8b35d06e62e3b9b0d185172a2fd313f047f1506521d13b8629fab3ae28556d0cee5f81e159c586390a25e23079c62810d61ef5c9e7308152577b97d3a06b13378387c00fe98f11492822fcc3528e0a323e87ea23e3dd408feb1618137c95fd47e160696d79b5a997165406ee27761432a9f6aa6aeb1c23d0451e8599b685db0931abbfbc9522305d3b70d65b9d34b0c2905403a39294d7d47c9f7459c06ece8fa0ec540a594c13df66c58933bba455b24e252183fcc5186b3e77dc81b4599d0b020bb30a1b87d84396b166237d447ae25c1c3aef661d321efe4039834fb392403ccf37576fbfa99eea56c95c4d5949d197bf4252e2e9ba5b045f8ad56914c837b0142f03f1f3ced9cdf8e21248dd5aa151ec563c69f86cb811bb10a20b7e5f04a5e021d1333992fa04f094b95aace8e128164ab3c04b3b432ceefd5b60d2dccfb68cbf7935c4863fc427c51477e77010a611256830dde0cf2f7dcd998e2c47ae490cc13c3764c6ec3d8ec98060f98e605daf784704e37af8c03a043a54e74b0237f59c45c13709e5c5e8b4ef583b3be122d8ec40588a1c1e16c87d57690561872aa48c7f6b3af03c883be82bb216a9b2c98c65a45e3d193a34aa169ee68471b8060949319f416b9568140f2eb5f141213438a97d9ebbfac689926a2017bbaf12f2c3cd511f02822f1835341578fb6bd25914eff9a7dd554a2ba4f13c41a16d44258bf9661dcbde205e58425693fbed8304b01117a52268e8175aaab51ef3e236402d1e85c39dcc19a6f7e694b608e220b5b7e45a56b058c1cbc4b4076583dcf2a1d586f15976cb2298db117bffe87cc193919ea2e4fc91a3d2f35457af7d43c78e5ed0c093e3dd839ebfee80cd57c6b1004165d29a929b795d5c3d9dd97afc09af91ff09322d9e1bd477e8f1cf9d67919f8f583b35b709d055a2c2edff96d713fd2c279a3739a330b460c1f160ae54c027326fb6461696146b5a789085606bd7d2cc39df3fff0720ad08d0c533de6312d6a7775fa1137569eec013233dcba74e49cb99e55b1d8aa44c75acfc25a3364032e12c1128088f982690a1067b89d4a129b08b63b8c182fd5db3f5f18cc479a042a4c86ca9d22b534a474c4567b2539685b5652d5ba34f063abc22b45aa9cdc2908a2c5fbd20cc3fb9e82a2d075342d54b6e593901de642077654a3f52fe0331b96b7b8d11df362e4a2561e02b0b40f87ae9dba097e00a1f2a8412c00a9f61b30352351b2d6d40114288a23c280391ab2709ff441af832e30edbd264858f4e70b20c482d6abf1622cd7f079c08fd2e53b80a62899b35363fd850943ee0aff8b22f8f5d3e63c691c0e5fff5fea04bc737a90598d4971fb706982801afe701d2320c6526ffc34fcc55580b53562a30f66c1ff8666b5024e4cddecd98700009d442e051507b6fff51e5d694dae4850e83b0073af9ec7466e68f2a4ce8b84c81151202e8801bc6c6d3ec4aee78c261e5bcdf10b6791dee56253c335991c36da64890231b1944bd1dfc31e57b0e380b0474db315118718dd6624709071627d22cce21dc5d10f8f6643fd6b4589147e7ac97d8fd0f1c3a3abe384ca06d8df0a4faa542f9178c3eec5d7d12631e635be804e4af0063f6d60b49f96395567c286f7c4e309f6969071014d6b45c62fd198be368ccc8110f68275f46fae559478ff0c0b832276fd0f6b545c629a9b532d9b4a897f2293716d76098017819471b4be448dee0f21c3fd07e484d657739fa49defad16c5c9720b189daf7ab074116ba831c5c41b6f4775e711acabce053c225c6d669d9ccc6962115346a26059e6436aa725361290b8d3dcbc3c38b79ff17b4ae47e6cc3edb5845dfc7f20dd63042375e8597c003a0d89314b9e8a663706b6de757788e8de167a8d8f5f1823b3addee03b32ef02b0daf0f0cd94c184fbe994eaadac5e37834bb0be9ce6903832e752b7fe313f1f0e85a8f493f6cbc3c1c1bac56c4c0f97e7a40316d321e15228bae845fae059255646133dd0e35f6bd11e2c1ff1dcd92ec601e875da7a671dbda0743a0acfa3023584304ab94f1429134d0dc02aeb3abc9c846d360b2a69f1b31809b847ec3a0f40d186e9babbe1f25760c3d294a54ad51a187c769b14b45693999a76c22e561e9f8108c9f36927149270bba5e048f17681a2049eee0e68e33c4a539d9065b32160789a1e555671fc1e02dd95a95d119cbab700471bc7915ccc78d0ffb150391b0189d987e311d3874bb7ea91d050f4f33f38fde11b05308c733cdb6452c82c028f7034e1b99f5d1159e5dd1d843774d7400f033e9ace4cf53ec949a1aed0540de4d585313af4826db712df13d40ee1f0901a1871ae3ec13400cb3df0444ff319150514d548e2b65861cce0b85afae464b30b680a8e407eb610099a576170fe2a69ee3d0f3af854ab3eca0922c308e14eb955855b81b43aa1e7102bd567441e215c7ccd16ac20595e1ccf2c693fab419b85f5d4bef755751735e50d27c3b55d2efd423f0b19f5c15239fccfa023e3c2487377dc8e755c2216c5969d8a10cf0b1bd415a2bf1d8132c7636c367fb8212dc5680bbb6bafaa469eb14aca6201a56518b90fd1643e8b2bcc5909c0c6e1cdf1b73e878fbb93574fb7e31ff558b58cef19a30583328a232ada0c68e76839837a14e87e75cf405669cd0861366d82a8bc048477ee8adc4d3202c7238a34702a8e4c84b1aceaf219f2653c6f902a78fbcb07f289ac65623b26cf8a7379e3b57a7deb936a7d72eefdb41802d3eaba47fcaa1875286a8a6d579f3204fa5d1cd9c00dd5af28ec869ba8a7463bfbf4a9a8b30509042eef15a3bddcbe19f3109f2d6dcde9b0be1410848a6b0295324712d78ae7400f4636af6a01cd8b1c5708a7d4d8ca41036512cbd18583f630476936ba2d864023b4541a37e28b4c2699b8aedf0c5771fa3bc0b39f38818cd7b6dd53d4c7b3d306ae573efe8e8af43e5c1053f0f57af928d436ff0798817f31f3c4a3928f01c81b5efabc900cf94c8a6bb61c134c6b51fffa39b60d87b95836d6b405991d25ce180b6842d2b5bffd5acea0c99994c2ed35e98d1a385e72be7952e19d45b323262cd904613c4d712d923b6009fb951a6799356b664640c4bafb00a63bcd4f5f67238088276d766d84cb17f84bb2493dd55175b4667920da4c33b8bc86515a21501ff2c34eed51c84ef98e1d6e67ecd06bcabda6f1fd5e9f88c01f59cf0cb3446b1d8d8b60bee8225c646e69eff9f03611081c4006cc1684cd458e1ca5254c4ee8194f43a82ddbb1dde5d4e376986fb4ce170f013dc7fdaf22f32b4d85f069e6310c282372c3df2177233131cdc0f4e5e691ba19cb48b7d9b7ff566bd1c0eb639600a2d37e84686a6e60375d0427fe4dd159390ed5906a4344c5c935894ba3c7a21e7c6cdaed2b0ee28eb9abef891123b2a3e9474b2b9ab711aec089e8c7bd551817e8275129d30a67e8017788210c404d00d53798e37493cbbbddb390c02053ba16d432c9f4e893367fc077947899d7c157d311281474c8c1c9e54a54f45148e9194ac21dbe53162576f8ed133985ab4d89eb8d085bdb393ed36c3a30fb854de804d306d018b374f22f07f0c2bf20d1f4bf054020e028d948c5ce52b4386ea60502c33fa5505ed43308bcf8dffcada49fe8e8e7ce1ec53629d68bd40a4d47c20312cdb9a9956c046039a9b856c3130d4c6a3b17b31e6f3f8d61ed7fa115953c2114aae28e6a1709f64bd4f0291308d9f3515d518b7e47a3457f4562ecfea6f3061c79a2fc1e3c56255b1515060128c127403953a80bf91034bebd5e6475ad7c251087eb6bd1d10170b06a07bc0a05ed4157ef46f0424761b7236d575b34afe474209079509052df800989bbc4fc98cb136f8566b8c6930bb1c0d1303d0844556c0a19e7c05ba4835fea2e555b52a401fce19182d3bab7701dbdb1cdc176b4fe3105a3aa410226309156a1f791928ab213584e793872a18007ad192587fff623642e0fe32e737e5ad84990aa6522d6ec6b88a51a005be653596a9fbb24620f4d5311ffaa677d17ee2a5d7882f7b4210770c4fdf2e7476747414eb9a2cc6fcc5fe512ba278165b686255a7295942fecc2d561fffe5639e0ed99fe05bd09e09c4da222308ddcf3371458dafbd54eeca90449a7409e0f6f44238226e7eb1e0431159d199723dbec34a0ef957c4677821db0f5768b8fd6975fc627adf4fc5f5cf62b060d1a8ed69824ca14077f8ec27d9c5fd6c3fbcc72e0aa829c5f82ade3a0eb62d80d8949c27bc9ef882ad184f94958cf1e92e1c09a9e8ec6a7eafff66f1c2b1c9d0b7e92e6eb5f9b71d8cc8e1a7da3e815944dd8d40d76803c04b7545e6c879ece201a81a6349be3db83cf3da61bf0cfdfbfa1bc73bcffb2c5ed78b685020ef50f2d52a7aaafa80481c20c0f45e24cb36112f02048240bdbf895f4a2e9c3d8c3902ec1ac0b777b9fad19a62182dfddfd2a8252f38006c8adab1e7a290068451c1128d0e5349e81a42094691a3a12ddb4b0897d80ecd97f591594580ee63a54f6b0065e1e9989d0da1f344176e9932a4164382d0e00f5ba54ec0d8c87746803b86f2fc9e0ed1bd692cbaebe0700b36ccf1ea268b2c2591d8c8a78f6c05d9cc2cfff10691fcc9cc4d24c5f78fbd460c7d92bff39549a740fd2157f54276f61066a740d8d63b5711789a2f0a595173d88e83a5e4024ce1bbcefecab1201c77845eb77146d01e2e93d51beb3213714aab8fbfb2fb792f6b0b78176ac57edb9c3db083e0a7ea2b69438132fccc2360606c4cfb59fc1f6126c0fd76a2724d44587a8ca5d2086e636e3268745d7b2e9beedfe736ea51e6bc7a2975036bad4598432d3a6651a9fd0a7e070c20e9220946f2c1e67394ae172f5460657a9c0613264060b67d4134d39df2df57be5882b08f34c2f7c0d3bc563d8d9d7415698e7f0093b63fd2312c37bd5d9e84bc5d4a8584a47df19eaf8db91491733c7673da3c884f7017f9e282904257305db3f0c90ded57e4fa65e542753aee974e565d1708ab68b6ae9fd084da7ddbcecb80719f7b91f20613f4284e6b7970c7ad640c8f3a78465e458d721a6c5f7e542bf62c4b021c24ccd4512df95591280fb9866801bfa3dbf4523140a1aab714b9226cdb4666cdf5ed92a9aa53aadb7d7359b2e547fd8cb8af1afdd0df80b0bfbd9f8d022da6ba4422f1ead1331a6d625426e8891e0cc0f42cf58ef1e8ed4b374bf40c8442b579a361e1202b640c1458f558c036988425269226eaa047cade3265866b17592e8c7bb81ccce3b6362c6cd67a5dd789edaed1625f4b320012989b44730218abbd57b1f7670ac141377743ff3479019a4ff3587fb5b3f0990c710e09732371332d388e444956aeb5c9460c8fc9edcce6ca7f55748c11312057636e59b5a75d5c0c83542ccf306441ee16e6742a036a0c5a98eb63e9f8d2785057a68d818a341becfa425c085f302259ae3189be326fab9d19d7a20168f0a4680adaf45df4a990e4c945a95ae665cb8bdbb9d2d5b7370f502a3c3b062912b2b414d5191dbfa631e571bedac6b8e6fc4279ca21802db1a224a1d5348b91104793eda216ae39ebfbaad350f586aa2a342b0be5df972248de7b59b26758a94161322d9115a669b97a24622312486151613a7d623212e797bf81d0592b0959f071ea585a46b0037f699d9895162b4194facb432263790c39571d0e1051d4f150332b28e6c99bf092b73e3ccd5c1aee22a87861f43b60aba4f1f4a5bed904ab3003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000001e118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000001e0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000001e0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000001e0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000001e29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000001e141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000001e25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000001e12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000001e2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000001e189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000001e1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000001e05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000001e05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000001e14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000001e03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000001e2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000001e1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000001e1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000001e14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000001e2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000001e305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000001e280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000001e223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000001e17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000001e08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000001e2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000001e0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000001e0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000001e172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000001e0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000001e05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000001e137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000001e2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000001e2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000001e2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000001e18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000001e0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000001e204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000001e0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000001e1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000001e28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000001e1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000001e21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000001e0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000001e0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000001e107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000001e2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000001e09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000001e24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000001e03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000001e1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000001e205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000001e25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000001e283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000001e21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000001e094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000001e0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000001e1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000001e2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000001e1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000001e1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000001e304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000190a4c002b84016b5dcca22fdf72fa07565b094340e5e8215040f56ab6ceddc2d3881df0a479beea06ffa9d9200393489cbca2f58bc32f8210e4b9e16a0b933494bd4ceb2e821e85fa0ff4f0444d8dba266610278961a5a5d7eda89bcc3af69eadc4951209bee67a7a3c73b3963cca100665192f42d5f5760d5e2ca418c0a80100771d8dc4cbc42dca6bb62ef0ba33050611db68181477e205af5a770a79ed8665d690ea9bc65e3a7fbc6e3c8cfa0e34ddd0bd1c9f6bef589465e3280569782b61ff728fae78d0e7b87f72b5a56180fe1502e56329eac1b3ce8eba8ba12f8dbffce864c777bd5c8988f11abb170c6ff0583f52009d6824734f30621c8ab7ab03b47274f7d90cdf056dbf12edfaefdbda8e2bec1dd1e50faa08229ff2825aedd21efebf627e6bef9f88b32f7bfadb5a38fd44c4e6fd92b3704e3f54a457708c854e11b6f36621b6deece377f16dbe3081b015aacbb62151bfcb8ac4d9b8489917981f74b35fa3d592c4f4676ec67f0de061b50b96758533ee299b9616d45ec3238d3c5ab07ed1ad7a6603f88925716a99a7a3a1d89dd33df056fc59fa38e237921470f6c478e0ece28fd6a6f97c0e605a13b218cdb43b9a1e29df96b518c638e20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad70376adbf73a0d100f277370744b394ad986adc5bb539d17c37b178fdad091059a4970a8c4d605414d061c1c55697e9cc865541a78cc8397da7691719a2d6f5f13c47913cdbb87a489040ddca538177f2a01b80b77ca01ed1f0020415df7352c910fcc8b3bea73ea73ae1b2c5625a142738f147bc0da96c589541dcb1ef202f47c5a28d4eeba2cb85c16ff56ec0f569ff5e14fe0cbcf29579f0740dd509dec108b1f9354b26a571ffaae3df698c3d4c17ef7a982fa5c27b34b013bf996debed4d3fab977604ccc7e6e8416a14a53396f4caf62ae8a31480c497dd71374a28ceb6b0322de797b0321b13ee008853b5c43c94d3da956635fabd819ece28e1f6bd2e393caeca159a0cabbc2ebb1708ea772352465b527703074169c9cabedcf39e50d89eee6c5761ecbc8cee77e0d6fe25f2913e2ae80a39164a9efa30f4e890b27681583bcd840f98476158b673ce645474676bf7638aabc4a1b42df686b725f89584fbe6b8f6012bcba0deb1d4d87bc852f84014c23b5ccb85f2477d04706d6ddc3c6b71da05d93ab13229e5b5ac136e3be20a1542ef637ead2054659d98881f529c00c56cd91f95adcbc804a585eefe34d5c85308bf7e4426b212ed1750083000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092c254a8274413c8b58b7247d8a685bd05cc7270d29a646d86f2b8ed7b71f4aa285c56fa4025c49bfcf7b26176ec52d2aafbf33619117fd735e5bf67dc95fb415610919a73888baace734ce4bfe3818fb16bf2660f0f3f54660bf4f279d9b672cbc95b147f203a394992f368efaaaf7a879e6265e72774ffb99078cf4cf972ce1445d289e1d2f400fe80e2ef9ab1f3d862ac5b73cf6c9dbffe62e80908c6b72f036f2b8807dbb37cc898eac433eca0fce8ffbfdac06d0abd933a424734cd3e8b135899e2d99e242b5b8097a89f1590382aa038bec30faf54405f47999d78eab5ffcb4a7ba30f384829f0438a1f6da9f6ef0fcaf342f1e69dfff31e238cd73f8b294e2075cb4c6b74f8cdf3d6566dd9f0afadf5cdee7017bcbad0e74f642152a12710e92f1b2c6726b5ddedaf6a4ffc8490fef88009b43c203aa07064b4310b846bb168b25171bf0603a677e09044e017d95ac306a20a5d8c2b111fff6180dec4defaf1d41a0c2a1287977f44e4adad80153f3acc81c08079bf4eb17f583c15bb6c28ef7cb8e9ad81d903ad363ae0c4f6a6372feabb755ba5419432ec888091ee1e96480e9870a6591db31649ca1e4e3239f299b9932a9f4dd2083bab8bb856980000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a63328aa541150d5f753991b59f70d832953f3d2ec8d3e87264ba03164327bdc4ea61ecf5d164d18196243c0780fd114d1eb4c92f3f08a734b02a0f25da17b4301570b6078d3e2fe34c4f4153f73e6e88930f9d3e9a936a12c98d689f85a2588c522e24b0b00d2685551f1772f3a28f761fb73fe74fe2dbfa52e317bd87caefb4ef74fbf1708d181fc2bac7ace298e33ce0a56699062ecc5e1ca7d45e3cb6ac38dc08ee85ebccbae64909d07936c2b75a9759a2fa5575d92ee67b3bca78e13a4989d7233becc0cda251295ee387dcc278ce1066095fab8f45713cd926d2c7e2a7b709795ffe14316d71c9a8e4d1f8a7a823bfdf9cf520749a3247bd5470c3682c5ba1a0dc9f1b8aa8588c6edb3e9938a1c3c031388e3a0c60ddc7301f26a724db2e49fc8985dde1ea5e80b5290101eea0f5569776f1bdb34f09e939f9c863045ef398a70434f1c210be32466271e469356006c36c974d069baa7201d68b0381cfa7e445f63d761d73ec582da84c4b3de23f39adc85bfe8b28e2aed7860b16907277ae678127ba5bfbe2679f9e2b4f857f7b734465a7f690be02177ba3c26d77044797ac1c46d97078a57ee63847af7075263a52a62bd22036c9883d8dcbe1b9e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000258c4c05f595578d817c81c98fa9e8d7fa0ebdc836bf6ed49ce18d2c409767add6aa75fa6772f9c21664f955aefabc3c9932bffc6765e388e4162597f02cc6e28b4d82b6367601275ee6e0643a85ba5d8af0b584e3a83735acdea025a361200e58c30ec622fa8dde05da38902b98505fa02849676585b6b9f1bff24be9c916efe964cbdfe83406a38f97566466a604f6b20a375b25a92b1364a2ff9ab5b4ffd625a4cfebab0972170d7ebd812e436002d9baf401e1961569a87e7c52f3fa0e7cb0284fa2e5a8ba247aeedce33349b84a864053e866f76a05d872bf7e0c4e7398adb561af6181b7a29cbbeb6dde6c5433441e7b4d1392f06d32f841e305c9c9b73e11b4a2e70db16cdad8438ff3a7802a4068070d74345cd2d67d4675ebb1c5a3ff87deeb85f1488df4964d02984b91752bf5181d37e5140b55d6fd1fc3a9be24d71f6671452e88bdf7cdc4556ce1cb0994f0fc6cdfa14721c206844ea484041f375f2c1019ab8c0db91a4f7e4c4c323f9be95fcd09a4986ab53daf2167ecfe468b7f29dcdd900fe76db08f18060c5bc9e508e0ed6435b7023dd8d65f628b1813bffdc21165ecc86fa65170b067bb4d551163b75e31b562e792375caeafcb306f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008950310fb09ea693050cf16386c13638f650541c11b8546a02d5d1665558248aee17b815b3b6d84f61a0dbb88838fba7aee5534504096322fb5468a9b4cf5acbf35173773154067d90733b593725831390f8cacee9be19adfbdcb98707301f8bbe3da2671d242792e081ee8ce0e86756a86bba035823b3646b40b89db64d7507a1042dc792eb9761fadc16ccd74e78a97e3583346a92d1c01da206f0d881ad9528489b670010b050fb29b4fe5a4d686991b797754ef466fa1fabc0af3538b40eafb2ab403876bb09892115c2ccc4c1c8876697713e8fcbc8717d0ec92f2414f32a8dfe13c42362011abba5c32f6f5711ca7abe5358738eb7e1f59ee1f89c2e9fd1033a70b8e7c687ca34dbe0c0ee495e8d9296c72650633af178d4e92a425a96a7da01a2c3f57118857a4e921ff8743024f036b5caf8669aa592ff45aa7f94d739a5a54ceffac491e005d28d0ca807822d8ed9f8fa200fde1167210e83bf2f018a1e6d2ab85308b55cb38a4a406a681c7777f32c2c352ad572361f9e78d1cf712050430a6fb8f8ad07ab61f0765ecbc2339199ea556debe013f88bf3a0725b4c16a257adcf04c30b7fa7dff826cf9f788ab8689a398d32dea5561480cda4f96f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025cc042c17d7b02b0cf355a6868ca22012d8558bb37e38e12cfa0bf3f6e53e83925bec513b933bd2f1e9bcd98d157c28ba29c5e0dfcb9e169e81bc2075d0d40b58f6f7f93e006b207af747040c77a169b954ce24debc714c2bf867ddb841a23ea036526c3b5b754f2fdb3a552628320cc5681ec5653e9dbe27f8c0530ca21fc5ee4110e453c801289757e0d078055dac0e536c8654a71b0ff75bd2dec47692042158b5f4808695856b50b8124ae2158da2e386fedabcb6153b199a144bedd3db6fe01142d38a5c1a14c20605824b8f06b96b3374a6960eda681a4eeb5d38f612da95c615d199412844b60b2279a35b2e3c1dbb587091cb84ff1c0631b320fec013ceeb38b3c02a94fc4508b12a799540afea26ee8d7d007d7b36a787da93ef96a0bb6713f04d07ed7028a75419ad62e7290037f23fa6c0820f5befc01bca439ba188e4d481a74893ca5961c3656d5bad8a348fd901851ae5fa42de57b25daf061f6451f568305e7749edce0adee752f5e709013d13a5113852f19f9cce817a5258de8e61e6dfaa7edf8d8f7e6faf09cfb0aa36839dabb086eaec274cfcae40bddd761bf541dcf3f9b6ff55ac74775a6a4a6f2d7319bc875be5a6c4fde46ff0bf0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac2aa836bc8853af5f8f0621015b7bb276df3b4c84317f38b8bf2ef483434a2a1d906c8d3755b4e114fc83b34a9358f3119b2e99f870b62ccfdccd9de2c0fac1ee16f717a5b833be61f6201c6265e938e33c26573dc61bfe492a2024d96fefe179f4ea1785f5b7c61aefdff54e76e9c00b62e8922bbe9866a2abb423ec0fb2be82505b9a87e80315c875c843e81ea70408ae01e2c9646b776764b1757a2a29df0ab52580f17ac158bee7633152adc5b706679ba781af51a85b10c1c4d70df30c768072b71924f1c3c1a87831a109aecc45bc51ad111157b3112763a1fe0ab463e5ad63bcc29c66ab43c2f93cab80ac25d808f05a5f5e9b338330f2081a71e5d295e8c17a4f78bb6467d8f78448a298658981c70d6d371892d2a8b996510ee24d8d38b28e4bcd3ee7f19713160221f2f418501511023daef6c4d65272491402eeb1657f507140e61226ce6e5994b520d14b4fcef5d3c5c68ff9d150bf55b062b00b82c8923a6be1187b74403ea787658cc63d2c490595be57e195bde1ae7f5845292b04b0d526d938e1834fc9bbf06cfed19533668171a2c6e68d963edca62a0a85a820d96aa10eddb5b519b4fbe941c777267f4a0e96fa13448d48ddd25f071d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8e0589314a908de2e892dfd48515211c1a12aceb080b3d19c6ba4bfac5b1221b2dd4a95cc947689d14a0c4774b883befd93308cb39eedb2203858043f901f50ce01b982e4e69e2c6efcd4de5572075588ebb08afce37bdd0c73bdb94eff7f7b6c2fd3d74a8ceb95d04f6f65cc6c96098d660f8e8cb3714bcf10b0d98bffe1109b7780c1cce1f264b55bebe2c69977190905e6c4c4214dbd2d4902c2fb1c8e855aef60b82857d7eb538d968a3e41920d2dc1d9a790f6d5dea3a269a638fd21e8336f534fbb2e894d6bdc8fcf0926d24e296f839363246107feaea8aa5f990b4e090cdc3d20b7abd0ea71df06623f912aba669b6888a3b4dadba317fc9ed3018831463c8b8b8cae2d85d437c1f607c225f4725d560c4073c6fdf66cd63dcf923b69820f2ee2be8e99e603979a896d6818b50fccf578a656cb553c2ffd1e8c8ad595df65930a1dbddfc5f8403277ca88e3b897aa77dd901dcba7e367f3d63474529d13333a2adcd9dd0c56a9e019b62adbd312e3354c76e17deb6a4b95c45161319708e1cddad4abdf01480614b6d986d3828072b971b1d53dab630034da30cdfe4ebb13fc8bc006fb117dad022d7266e1b12854934baaced57662d38048bf63d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000247b26318737a027edc6558afbe8d0ad8d4b6d61f2e73c4df0990d3735b2920be633e4bc628a96ddad740fcf28dfc678bb89d36c2be0eae7ddd695cfb391b55c779950f9890e280f3909a55fdd6b96a3bc562708f00edf096df29591ddda8ebae07e62d03940eebad4dce06fc2aa9da91b6be7953cab55f357864a92deee35b529ba95f30c2eb32d6296c55bb34fc5ba2ba69c4e25602bcc52a79177431677bcac37730a5a1fbd07bd4ea25541e605402732d5ff560bc2d825e4478c7bf344c164f4a0dafa157b909762d271e056ec0f07f988c3c6f7ccb4351ea347c3e34c57d96b5e091e670f1e6f5fedb23aaf97ef6a307d3d31c11360889b29ee30e7094c4771dad1cc2d324ad16213efbca0dfd884c2543a0f5d69d10866da9fd701ad2a4dd94ce7779a887bf43949600a526e8dd53d385ea27d6dcea7ffdbf0b11e3f82946d418155a094d6a61c98b6a2ebd2986fdf5378adf6b94df580440ebfc2b12c8b261094e3a5e0d83e6bd36875cfda7cb2c633887b366c8e7e9a5dec87b8dfeda37642f2fa4cfb480dc3a40f205ea7d468cc28907d316b60333e3673a7dce266a1b8a7425f20488a1ba0f80b5211a631e5813b71c83d752f7890c01185dcc2bc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000881586d520c236bb48b6680772dc1de3fb24269bbeaab5a3b88b91458f7bc7a8fb2586615254f695e01282e696d572235a48e99cdff0c5d6cd3edbe8d12f287ccc94d70ec3d89af2d5ba3c45df8c24713008f10037a7b0da28ab317ed18d73b4c17893d85e91a06c2fad511031d5989a1c440812950bfe447f8460724268a50b8e59b196c688674396596ed8677433bff35f66e121170e47861f0b1f6094535c1b20ea93c23d98e9e353f1a9dbf50b01016b9aa707496c84fa44b12a348f17317470302705a91f09f580bcbd2190c4bcb6128646c271d07aa2797c04ea0e1e8c2bedf9117c8fb64ba236ca16b3debde2c1a479a826aa4f0a7fee38278b8aa5143207c91fb610e59ee205c16fcf311389486ad719bbe4a262f3d13c78c6a8183418290dc459c7bc781fe120dfb8f83b313a7bfaf7d2384a58b13a49efcea625bbcf4375fcdd47b2f60d244c6c73ae1f8e976be84c96783d7373fc5a3b6110fd34d5789527382c8305666d70c1b3c1f380eb22c9979bbaa1969cca42e943c17b4ac7f978e2d155d8a849cf36c55add987dbb296c6ac238db5bf1ffd793a0470eed5787b4c10d0f1d1e73d0607f0c22a13fc6b265bd910ad75af7be758f0dc5f31d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae533b0fa332333069353b70e338ac7758c422a669e2017d1f33346036197c5a1b346be1287fc634770e5cf8e46473a55e608cd2e946c26552c3c72c2fd4b6583d9ada585ab0fa3c1d85208f3d28441001b5d670cb9cab4c63ad4e31df1941872fe0942170a7134607c3b334ed5394b9a11176280bf7951e44d0a284c880086619e1c4decb9ccfe1eae6d02a35bf7ba1833c8808da6ad399618fef7c946fcb31a27c8b3499f97e9d6e324a1182b094e79eba3f2f61fc4fab18e0529ef72f815fe97b1918008d05ff897c9271c2d655a229d0cb9235a2a0e91a8ba3b780c0a0a61f810f1ef4aec2dbe28fe85e52b4266f2aef11fc755cf66f57ca1034ff242b657ed9415271f8fc846a91b6aad936d4d50cd9b0939661ae870aa5f46e31d8413d4fceb7ced767f614be113f7758fe8a14798ad2208f77de41a36109e934ee2c5b85e8c3e9b9a9870190b1cb7146f46d9b312b4b7b3f35157edef80733d7982ec6649b7e03e5a73cb370e2e5cf86d9284776f57c7b870e6f7a99257c4855cce8dca31fccc1bbbef80e696924e158670227ce431c7197c491f321d04fc4b9741716e31e048fe80c7cae33f47d81e64bc1699f86519fbc93785ff4cb96a7a6a56700000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000957b14d037a4821844e87f6dd63da77d00156812d9fd3a6360bbf06ea175608cc63157b179b602697376527f35deb2169cf7b6af96a7873601690303681d0190229ffe38697cac3a3650ef183b7aff7aae0761b1e1721aa4a27a3a9060b2321834a3d3bd73b03162445c32b33d290bb43d7c78346129ef42eae2be92e5a4355b54e4e6edc912bfb52db3e58a852e1cf50722471cbc3c00b8e92629c6a7aa276675487f3f2dcc2dfc25476b84705f69444ca7497ebbce52c2f92e9adbabf624198d79de87e4393724679def94a08e6ac27384d0bc5b13c9d23f145a2fcda90bde768f4e80b46a580d29a4a683303b28c4ca19568e726c35aaa8428637b3c474a70c8dee12f6732434c6568bacecda00c4193bc829d3c9bc93013370a83d44ca349ba74148e1efae9dee6a7bfe8584c5e80cd17dac7488538598f24df0830f252dcf47d93a24eed0d2138f93e4266a8e3c686bd537a00ae7f465fcc7d5149e70d718f24021925abff879cfbf2a6189d395e73ee28125f80bb5c3dbca1a1f3ae36981447d0faa93f55c2a52af9815d1199fd765a16a5b20e331376a0df79396cf7ff900c9834fc3a55406ee511a10af8c4a9920009d1244e978a3923df477cb40d5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013fe3703f86a95bfc202dab46128c4b8511320c7a1eb5371232ffdf82bd93629a8998864be317aac0fc95dc5c02bb8739e2cc2335cda256cb83a1d129386f2eb507a0795c9e7c8b128640320096754ac6d88da73aa257328867c75417ada4eac1c4bb581537bc6be2680104926214ee1c26b891688b5111a45fe9955908d2a8410800085c0bc8ed636aa62fb0c1a8e8e8948a6621b6bfcdf799d169b674e7b6a591af797b108c914d134d6d958b8025b5877965f8ee0f1a49ee2fe532125f4b8e85f14df7cabe7c16395437978fadcebec8eaa1137e939e1a67bad4620b3e21f6ecc47e1174451c2f29c569206ed5de3b4c3e3727df485b5ff29ec84c2ccf898c05bb1f1c3dfee0edab099d5d3ca203a044174fdf700dea8ec8c629056bfe0d11a17ef341ba144a1aa9b416b955f814fe6dd6de1774b075fc01f5bffe005f7bb0102aa44196adcc91b1702e52d898acdaf8243b8a5a6ae55c30d502211bb66d9dbb838e4f14b04e928fa0381973f1593fb1b40cf1d5cb3bb8d159ebeb37f12424f58cd2e46786a8b3c389984f7ef43060da90b2d5cac2d377cd994024ca356fe087078877a06a82a7e89922d87dafdb518b40bc4425e283af2569ef00eed723d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f93c35a0227870e7796b5de586fd9abb986ef84d8840f02a92fd3422ae9366f2024fba0dab8c5ad3bcb35de0153d8e120dac1e3d9015c6f382492b8d2a32f83175f1168f375ff0796c3abe229a8fd732cb18ef66e934563f0fa265d86a5052b918fe2f59df25fbafa705a663d2a93c970f36003a16b9b5ce81867d2b2d91e9a88fe2b96501bfbed0cffbbf5bd34e3448a5808e39d990105d7bd0d327d2fe673ad8b2e6b160eb9f8b3add38da9eed53e6f2e8ae693cac75784a73002a36358cd2bf9cadd6f0eb27d14a44e5922df90468e3a2b39d1bbc190e0d450c8837580b85b67ffebf6a5651a4346866f5937ca00c323565ac4728e9305cb904eadd30f6801076f0b5271fc175b0a75a4a10b62f035535da426de4bb1e82c7b3b6d8b4fbbab853ddefea694c3131f5d4e3a35c209e065897fc46e02146ff59877ffc8992f406edaa9372dac100b6772863614c4a8343f685f4aeba8d0652d913af3c5736f23d0c7a6a680d4b4c5d7184034cb7cfbf64afb93e0334bdea9f25df1d8e49b7434990dfe00afc7c285d5b7a85e6804737a85206ef7362d8c52de74ef469953ec057435e3e7aae674ea70a05088fb3f0d43b9a850cb03b555d12383937b1c33e100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001315ff19667fc25eb94b82befb77a3eee34521cc9ff970900f4f47ec207e968164d61137086d14ac6d77cf2bf4e7dd401b2b6d7e0cf8318a473bf0b1f327e8719e3c1b154fd265e1d8d508a36b089c525d16f2d08efaf771087129d775170fecee44ab061b218c064fbda4339818cc2af7dd3073405b4eb816fb1c03b744c54ca7b169020cae85a8ccaeeac53fa0bc00924b13df4a4ffdb71fe0ea7f30f1d5bbe644afdf962c37f74a7293b83db9cd5699e0615e6f9ebc96865b351247778bb484bab2e02cd1e0b55dc39b2e8d1a67b0292d123ede4a59a64378ed2f69ca7f5e06d039364f2ff73193abf6ae4fb5cf773e974c03e49bb551f495ebda695e3b90f6a4fbaea6bbef7a534b41e7a0ef0f836f6570f1c4d816913997e2be4f3dc97f9979d8d5f61b670c6b62e8a71393ba4a92fc4aab0e9b0368424ecebc365951393600f9432284aa0c67b3b9c33ccd5d85f79010a5bb34bbd0c9f85453bfa65f1803399ebe4b7a5cb970957a8c1d292f656bb9c4239d2b7765c5957f688038cb3c234913db3a05d7dc5e7e85567c4133dff64e7abb3c57b7fa3ff2f88aa932a9b9c3ee84efad55a47c7a36e1e660bfc97b10a90332fe1407f87bc5edb29e7bc85c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c7e13ed5522177e10343603a954032ed2c8f96ed009e53061d7961cc62721d1e9c07ffe94bc55357b14b11df092349ff8e10b71ee148f8d5bdfe1caa5db61848dc5e85c35061ff6401585d22234d7299229ac417fbf1b63142e957ca95b84f615c8361abc5354e415bad892452c95f2beb43656f79b471ddd6d9463cca7371b26755a381ae15bd2b04390898fa50ef8d8da21e60562dcedd0b0fc23004eed8a3bbdf0bc5cff92da6eeef24778f68548585b5420d9093de5f816e662f3a028b7cf0d6485e8801ee652d0ded588452a0f24141ca8bdd9f4469ed90083494b979c64d8b8e84b085e9b16106107b6acf2ed2d61bbc01350f4dbeb13aadd830e8ac85751bcde255f21bb5f0bcea3b5d130d6856dead7523f2de0e8209a382235bc38a1ff44caf1ac2384ba87f5f735fd1f9c0f280940cc812c7be804a1187bbc8272af1f259d7c5e908e6eee323ebb58ccd95690c7227d538e2f1f96d7914079b6462a690e41349256ad6cf62b2c5e028ed540727dd102f5c2285361071461423619c9cf0fbfa4d6232efcc6de193b57823bad5a394186d5884a85a8ccba96cf9023507c057f31a890e16aa403d9025dec2b3efda1ddfec8b1fa77fcca107af184b10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000997a167ef425da32b5ce6be283c89b9d83243591d03269f02d31cf4378a432c9394c678da4f2237556ef8d9654bcb460fa07018fa3a34183a08da4628b3d9e2cb35a38974d5a7d78a24fcc04af9b95577092c6f1a1cbee2f342e2c6f11eacc2c103b61a2613969bdbceeccfd54c2668292555ad1ec83f704412d3f2f8f2c36492a12c763ca5da439200b88ffe970de1c94c894ac883139f7bcd32f031d0f4448622153630cfb393636eadf08816ebe49d6bd2b550faa792b9d4ad3e341c8586decdcfc61889ecceb2b371d31f46a3930069c604b6e13585cad089bbec5cdce4731c18de629b4bd931e5229247919f77399a3f37be848896a5a4b5b236c2414d7376b5c8fcba19e1438ffc6a580694b376084ff5424350c83c9f1efdbec9f59a548e348522b5d94835b0b8b4c11cad7e6ac56e9a416796456a5601825d9d09396c0256f14fa3f92690c4d2ebc732d247ef5623921b889eeaafd5014ed35491eb8f0328230e2bc02307b1d7be650e02a598e217024aa440e4ea9ed3d7ca25b612af6aa19ce9cc603dd5592aa213ece7e5dd26c5355e69bf634cf21fee594e2db4bb8228b727c189c2189c5955440713dd19c4983e6374c23341d96b2b46ea663b9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023484531f0533d0ccf013bed7e0bb3f5798f5b382cbe1dd46fb91307b5d23b1246068a4ac63ccd922130bb7522243d4c76377640d2817e1a45b1fc6aff77f75a103943c9dd843f606441a2e0817635d9174172ed8750aa2616027dd867099593774397e6f85d24719e204f87a22d79bf62d34969afa2bdd6990a2304d3ae67d9bd8d27f18a4a53ee88dbf0f88b4dfc88dfec86a71c2e50a5aeffcce8225d5b63cf63419ecb3c48e3240227974f872834f6f3434363b4bfd15eacd6667345b375625b99a3538c17e88b7c61a433af040915e2e7804e4870afd52713795bb0312f24862fcbc52a701eeb07bff13f174de2729d2f7052a70906270f3ce78262d4ed823cb7269faedd409d4c0f318e0c5a11226156a6f38797484f5c5f03ca702f6124e151c10e0fa8e9abadb022b3a77b27c67cc0a471a2811dd3bd229f09c890e948c8b8d0fe18cd8ab85cbe9e8bb943dab133a29c69bade2d033343d67ec18f70b3163fcbdd7bf8fd48611477e2a089ae8e7ca6d0aef7284624e83366d0f231a72fe5b07801a0cae416a62c9ac10c3b0c56933d25c6103c08faf1cb18d8935e767ad1a051d12a6b00a0a94148a63217fb3ce37e54e72bc6392ec2ebd1b6a85d210000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000039817c952a83db94640bdbb1afabcb52d5f6051ed5b29d0b63e43eb515304c9be7141259b9ea820adbfed326dcefc4dd0b23d462d4b01e7cc0a83dfe8ce3ea63fd584f923ff927921907fc75f16aed7905f91854e2b67a79adce62863f49bb7e71fd5a01eb1a3137c76fe416fbebca4569651cb6e34175eddec002abd8d182d233c2cbab022e4dca7e3f9a13e3bf6e734fef7d9d295ad8d65804f0b74767f4754b8ceabc41e4d1c8eb1a801175e660cd088aab9abe590d8841e4790edaf1ee370033e19c178ea679cc04b663b77645d16090611ce83ea1cf8d70710b289ea3f6eb64ab58360370add01c9404ecacfb4a083d62066a4f584620a74ae61f01b56f7a64971a8745e5f8f82a09640cc0d42bdcba4e86793e1aabc0b073b3879e91659657845c895c2d72c12ef6d1399d1ab06b75e34435cd6827898a6a29ee9e98f3816be1dedabe719fcf16848e63dd8cb37d2d4de82db2ad02a43ef9a6165419cb47b044beec03ad1a9c83b71727190a9dd66ca1a14d9954ee8fc9c47328ab2be127e8542266e651d4788adb73682396f425e6c8158693c3a2f9028cc8dad9f6edb7ed574520f31633fd5b3afff995076259d4f08f6e4c41f791a3e77479aadfb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001520eb0322654796ad6c864a4c1c8aee34d6355d706792431d921d510956096936420a15df2212cce5597d7b82641e1c1aa35f31031193361b567dcc066f2ae56e33e2150252a3d37cacfb93e12175a17fa65ea45d7c3440261804b57adab2bca9cda6121444ddcfda6e968f4938ef5a5d6755b37d8cb264118f9a449eea6656a5ab8dcb69df81d19d582a160c996d53c75f4bdd8041bcb28e45f53462eba2f1e7d223a90e785d324ecae044185f0957a7592b380c3a9b4aeb4f8791a920f81ceda208b68e723ba19ef8ac4006008c7aef164779c9ba132c3cb6353a0ba6aeb9c605af3d36024d70b07bbde583859e97cac3b41bb489fd930900f33d95d1255dfd49b53aae326eff68ec2873e12e3397682afee78f1bdba1771d0f7bca4cf222a741c1fe9cb703eb37141560379e658923d7698ac686c945cae735088f2ea15885fd3c11648883b3518b49c68ea10eb0ad8b9e85ab2831109bc1631adc115d47291ecb270f2b4f4fb08bef1211b5a926040ba752d65a3bd42b69dd6c9f622f27707e95a2a5f0d1fdf70e9483a483fd60796b7ad214a0d4f6ce52905f4bc9e7528db4365c007fe3dd843300561f2f9b36722bc3a01bbbe7bd0cb55056d5b9c336000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026665b237ee470dfd29cccc3e742f365486198dd6fde464004fd7399271d623e79462b4e9d33912c6f62d5f8e810cbc15b2f37db0971f5a7b33c029d9c482d36b7ebfd14a74d6446f7f908f50d227d2eb60d78d2078e472be1151af55bca477a2b696245aa24412b7765b2725296542984a01766d5799db53525629daf2db0845803b14fd9aaba5e65e59c6382fbfd3b50b5eb2febd43f4132bdf1c9b5013fbaa38c97155876a6ffc51c03ff0a1ae14434d7d7d9eabb9fa1366e6dda74f3b1fc360fbb73820db701f8aaf2cd50679fb2ff068b521f0f2bcdd902110fcf296cdbecb854a333f51a25210d75eef587c25f354fe7f8ddaec0f9463991f985cb3502e3c3c9c204d7ea3cb1b939e7b7aeebb637e7fed91835598d051cc5579a2b996516fb0c59542fb5ac829ff99f95199f0601384f3722dc06d4ff329ad4f2e0d5a964d8f0ce02e8312f3f9ad13227a088d210b38c9f45b8bb8a6b863449787c575eb20a64c15e8249a5e77a2a7adad5da1c806041cb17856b538761cc3de7e21c007ab55b37e00b9d16f6d4b0214bba1266abb4d49c9c9ac05d1bcce6d196cf83e4b65b543eb1631dfd77f5e7ecb90b63d4dc43f1eb45d1a8312ae9aa1cd642805f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000802a365a2cac677ecebf23385d2ee5772dbd184cc485a59b7c76590386322ecc889228f98d61e56e8cbba785b9457ddc9f20111fe40701684a20ad8c5e98bab7bef67c152ba2c2a1762eb9b576d77385ee3c0782f52a43d41a62083a28f13856cdb859b0966d65d5ab5815dcd2bb0cb11314f71ea5daedb80a4460cab52de0188c897553c8b34ec524b389391f880e0fc3eace5810bca17716bdf5ebd2b8a5faf30e78a2848c62e245e4fadba55ff9cd9ed8f85a5cf1c85015acad91610bb4820656663b8a7aacf2d4997dfe1ec05788e35cc14b67e356de3af041256da0db8f687c55fcba8a921b3c99e5f3c3d10aa529d39016ae19c849c1d9a1d23ada8d49b6e98d7c951c192de191804533ce481f1c3ecd3012632c887cba3531eaa18db7477b642d6f57c25cd2a0854ae42014fb238e7392ac0b679187e114aaa123f92b671d22ca15c31672eb8831bb4e3c3f132110eaa5b5c48b950d5f61c738a2b0cae30e3de2054bc506290bf05b992ec1c02cf558e8a95daf15bcb3cdf9858b0a769550c904dc52c0f7eaac61da61292974ae420e2222343890e62086a9ae6f03ab27b4013ec7686a1de6fdacbea2a1a267f84d30fd36e3441eef140f6adca12d9e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a075b8a943b066912f30290000110055119daef27fdf139815b5eb59bdb336544197b7a92c9dac6eb55f79c129b3180bd7c4f85bc76e7f9c0899ab6c39cef04a6fe5d9457976e16cae2e8432298fddd79504a12ed158abacbce73cbec01721f4d2c3f44c184a2d0f556a9ff13c804cf03df063a4e76abecc914b8c785923c1339eebc416a5318473fa35bc9f38a06c45530667296d1f47ee16ebafd984d7ba8ca16201692759db5d74acb01ade1e4c57b97830549da55134238479fed2466c0eff2aae15b3989fc035a6aa3200272a3b39c1ab96c1a8bdf356d15de3371c6824d6420e345c436516efd277e185630feb43c953799d742316df6ac5b45da3d4c78908930c5d3f6a6b52c7aff5ffd7c6faa24d92d4a4376f41d3d4d83406e9de42d35915966725b03cf1a369b7dbe12c4281f883eae88845ab0ccb16e8c6d747fb1e461573469b86c3a9a22662fce9f5d0ef32eb655251b0e368a48634c29338aba59327fcb8e04bb769004b865da76e6d443957d84c223e053cf1bb2857de0e9197c944f25a563398115e521c542a8c5246a21b53f00d97040d212059ab32d79068405f76becff8f36ad6e5259121e872a7f5bc3f5aad078b1c939b88b230ac00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b1207440b50df0138a823dccba8802814be319269e02abd9bed878806030afefa8698b1ddf01ffbe5fa8a1a76009f366482af4492a591b1cfd2f8916b5b1ecca0fcb8ddac14276cbfb7060731e37aa3b321d9ad95eb77b697e1f140f770d74d3ccce354a2cc08995af4e93cafb26535f96097ea034f3fdb308187824066367e9cd6769da9edbdc6b53ac5e4548800a0df188b009a0b9e40c17971ad6208224df2b58270cbf6676adb6deae587d9fb59b41effbf61c505e4d73813f08dca14aefe3718f507e9a8b611143b9377fa87cb058f89d5e7aa8be424a6f2a367dd536fd2ed256baf73866141f23326472d2c72a7671f45f535ba0102ee4fb8352464dd1ffcded9c5a6634959a1f4347510bde077fb2a4c7753c728c29ee2f79726ff9163f7d8f9c3578f2c280f7ff8f2c44b94869282935c8d79dbbeebd989082ab79a7ea46d4619f8fb8e6847723a8218de31ab733019f14d93c1c0e17000fd571c9d89ebb0c6c86f3f5d2a8987fe62aa7d7e6b82fee39ade30d3576d21b37c7d978f125493a54fccab040eb081309470d0ac707ff70e7c6cddf4b8ac7e9d8178658fd754c8d7cd59ecab7eedb01fae12a7c5704859c0bef318c9bced7352f831f819000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029972699d12e8376568812d514ed50567b976f7dd262a485d1377814ac5dc51642a811b7cf5ae5b49c1ced762980bb539357e146f0fff2909ba80cf48b88aadb462b3cd0aa08c1165175a254a47d662b9d09b1722f90e0f8f9649bf022b23b92591a798df783a5d9793eacb587960e689580b7a8b6f2d9a9afd36d237166e29444b8a67234aa6276ccbb0b235f3e88103a447fa0d93ccbc7769decd7e8868247e1b93f6e4c2759b5b30809152a194441a2bc881820a54a1ac1f576cb2600f35d5e698220b575b5c7075374a1f8771149c1325191395f89cd23b6a8fa0ab719bb157bb7bdded330171e77d0c4c154550d53850897def6aa222b296c09cb62a9a2658011ae3724a31dfc50393caab3898d4dfb60b23daaeee78f9d7cd7cddea878b83a6ceaa4dcf7676407ee7e7d3fb1a153fab62d060ee51a3e53ba3dd233c9ad976165feea55bcdb735234b39fbbfb1548bd3c550d8096e0c447ec07ac3d351c15089ec3fe375cb51c70541c46e57795373681093f68bb3e0f4d74e7e8acf1a9bd062c752f9b93d4b4ea4cc49d117c22019c1eeffcfaecca67c46cdf74b54cfea7b538179fd92493a86b52d0105d949717c47264dce8ebb603f99bc15e690d02000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027e217360749e02e3816749af817556a5948ff3c848006783c101ec70d6860c05ed7796f7b537643c61ae67fd6f78efd110a2a5b4e7b322cad84f03f55f42de00699c16c47010c69ec8d3f6adc39bd3775a9d88414503ba4be10ce93f6eb82c4738c4c65750ba447003227422d25b061f1e5abc25e540f694d9d3b1f9c747dc4a28c932e987d9f49cb14212d54c6b3462aea949c28d4a66a089041f69654acca532a9944855e5bbd2cfc06fd7f7b4eb657dc68042b215a72c268f8af4a2c83eda91589ed17641a711620152f7d6dacbe963788a237d0c7499cb433658d3a3d2d5b745aad05c95e395a8051b5f57d3a651b804c6541e9795c9bd08e75e1268761edfc51fba20957d409880a49bff77e44b86d50fd27fff6d2e2d60fb15bf8a8dfb50f0eb199f5d215b51cd12bb02d9d936492db132114079f588f2b5eb44815178e86c69643a01dc75e99038263ae3e7be5433717f8eeb3cf61b18b8068b08d2c4c3717f504877601c599eab90c4b4a7c8b9001bdd09ff9282956d1cc1214caf5dae7e597ca8e5e168c2e12ef91c826a26d4939d86447ed8c8e27ec77f4f3897ca3c047ebe7e85ead2a19c389a00671eb9cc06d51149dc4c40d1db37c4661f49500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ba29227ce64887d0377443535735b963089bea40d8e36e4bce03c7c98b67da0459f7500a62cf1d82d6d60a01cd092769fcc695a979c273ca4c7a59bc2079cf88c68876a95390261583c208f19db8eb75085b5b8e8e33399a8e7751a75f177022327731c0bb919c2c95f18f61ee8a99d3518a11b2c13217d060bd752789373ad5b3d0fde467377f5c56ea452f6b29c0dcc8a90cb5d4d06ef62272a2a8c317cfbbee294484fd275bdc156b5d705741893486cedfa44ede40ec1ccd141a0c5b015f9a52e9c3745622340b94d22f2e38672931939516cf4b2b8ed7fa31cb4f16952b3cbf7678308a10e1182c3adf327485659592bdb69f6640450849ab02a42f561fb8c976e3b70ccc952a5dee226dc1de6274d774261e5de219655ef4bb553d57bd06d86000b6c468e319d245f6298e77bb5ecbd9c370a38ff2d3e4fca91bac56b98dcdd68c20bbd09b60ab7cd113c47f05a04522775c51db5b730cf136ff5886b607046a4577c688b9e3891cb36b129d9850a9802c9db3c2b47507fed6dce2cd42074d2fc4191b1b232cadd549b4a44c77366be54012a5438bded61d6fe2284b3de69e32bd4334b4fc278fcf80bdcadfdd706ddd08e4053e4e3d2526bab0e2f5200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f7a9b12665cab8a73d8396ae2da7052e3bd4c4c154656d4cf6c8d4f43aeb631a61136a016dc807768d035c52e43d4cfc5549ad8da6c87767dd7d49b40c822267c86af2ff6a4f9b2695d9b635a9711f8d9bad1e8c85de6b6cc56d9e3810f90c86658be25871df4fe1cf6d0ef8be75a167d7ba02aa96e8cbdde1df414d1cd457a660250aebed1414d2c543ac0791937e9ca149ed89125527e894e0d6cfaf49e87ba5ee55301607f5a254789301fe185f3fad2df8ff7515042b47c3251c1d355ea5c58e644773175fd0715c9ad6e9dcb0b479de4faa33807af3d536b52e041733cc6fc812eb652c39efcb548653b7a6e9614786512cbfa0c3dff65e68a5519ff3e776627c5ee8f17390920064f18364d5d253d42697ed9f722cf3f657c6d8a897f9594b3bf00eb7a5e63adda388bc1ec2507ba110424a0bb1cb3ee266c970c44e7f56726dde893d8ebecccd18f8dc1e7ce941482f5d08f557a0024479f913629783aecc8bc531cdb090fa6ad3ea671987d42ca1d35ca34b2f2855dabdb618c3987ac6f9e33539a56091e4324766b0c91acf74979724b02b6abb9f850ffbac7c0727e9430df48f07f4f3ccaaef451c603a76e68399f70a04bf782c4f822c528f1ce00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a7574502b1e77de7e4254464a9de92350a23e98eab1f02e4358fbce45664ff6c5e780004348c4ec6baa8c5202a751821f879cb4416a9f5f3f74d3ba634f029b6d8d0584d49e6995d85f54fd55faa276152c4ff92b99d059be5f91ec6562ff860503ab6ade5eb6396552e0f748b51c4adf8580aa6a20689ad1088e06442f7f71baa3fafea616ae0f7b87aed3d915821157c5d245d70aeeb709a67efa1385c56e22c5cfae92dc2f6b82438db6f441ae08cbeafcecabcb52256d912aa70eb549bbb7eb5492ec624f07b61597f3af557db31e8342e9a99605dcb8bb7d4f2b895bf701e11ec2e4690704ef0be4b900b939c7045f88b9636fd2e23e01dad47f608330b9ef34ac7df6613aac8568e36f5ac543ceeba0404f1f77cab92bf6edea37abc7fcde48fe925cfd166f00d71efe0adca4e203f8883e028c808c9a88a66bfa30b43a19677b0da74eee55f23c47fcaae0f798442af8806fa6eb24bea4732f5a88b6460d4a786f1120611d644d8c0d33569e58f7112b95e314526545d67856145497b9c2b2693f025a6e318126da7dc7bba29a6a58752cf579f9a88ea29afc2908bb5bc5f9a7c943142f0bd40caf877d68fce80daad8175ca6a4898729cb45fbb9bc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a421adab3aa0775a935ace064f710f0465841e284a4eea32094c0375c9504d786a1cb53555ef942b156f9ea846655b2fbc35c9bdc6b5897b5a8b779fadb117f851d6eb16245a4d1e464453978497895a5638d87967a140bb64f6a7d3a6b700f72bbbc44ce8816553e7b6f5a939a98d0c356cef048d76a29566ca4d85ffba6ed98aa2122dbbe269b04a216dc033461c084df4f159eb8877c38e779b61e1c8d53ebf70e3b396c9b051b7d1582ef493f0bc4b9a39de403368dd9107773de3582369926e5f9c82bd73e5b71c18761b409b0121625fb1491447ee84744a1a58d6b369ffc91239295151f54d8cb4055eac2291594e4d08b8bbb5d647bc04e830351312a06f998569f641f4946bf99a522fe9f932a0d3d5f79e56dc71611be6d39eca999ef29f5a1ac63eba478f417c1e50d6b9d59cca14f099132df7f1113f291b5a78803202e5452e86af4e249962da05f2b32bdc6c9f11db6c337e76931c566000db3e2fee247ce2a6b67bff2e94261b32a0a76ee044bf27894ece55dc41d16b57d3e47c9ea2aa3c1c895291c539ebc5370e141b6176a4b443db888eda432599013ad883794272ec6cb8b8440f9ce6fb8ce44b3b77ad4ccc0a50e6f2b2fae81f748a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101e0116266446fdda4cb152d6c2c5fa2b32b2e55f88344a830544adc914e8f09b9e1717fdf4b9f7233127642403b30103a81014e516ea232f677fb80495f29bb9cb390bf7c95485b023882f2a8dce6b3c43343afb0135eb1009c88cbbf96d2faaae1d585528390b4919be59ba0de2a14bed7b4994edcb9e8f59c709b826aecfdad062ee618e4dae40be477d8a70f7098b4ec01bbe5a9f2003fbf1e5e23badb9c86cd8543c86a2cb523213ef351486f8b1c59793964681448858d956eb8b7c1d4d947068cc11c704bf60f6729cb1a23103ab5231d75b09e1e1570f2e08afacaa702cd883ae6aa17bfb326adacf99c6fda19b0d6cffdc593760ffa54e319c1254ce3531054e5678ab54aa6abfeb980121db2ca8fc4dce7f34284f47be95d7d0b1583680ee5782bb1de5d6ba49534140272c86eb3c3a4ff2410f9e24d3557b4e298ba43fbde096ffb1eabfae9dca140d08ccc88755d115889275af1e4b273439f7d6e512faed6f14ab2f5104ceef94ad17b8b561604c05c63fcc712b025f834500f937bd376e6807d5ae8d7d0d5cea9c6eba6091d90d079b44dd4fbca42041171944c3d9d98016333c20eb6f7dd9ab3e1f38cac4a9cef6f18b8060acaadce0f8a9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d5358523d3afee7a9457c31b76f139770fe56a06936c779b1735492feec3962c59903b0e3d7ab743559c39e5b0f889cf2a2a745c1efc8f4d338a791a8232fbe6ed8d91ec5927a4739b3c7186288604f59d4f74b0bdf452c1f0d795c54b91e00a02b2cbbd77fc38d337fa3ed50422ad7fe1e1454c2ba577dc5d1deaf5d40391debbca8608ff4aef4491476fe576dd29f806b96c2dfe139c0dc6d7078ffb8d8454b023f6b14fc4223d96fce7b22440c25252523275c010ed56367c48e6748ecb3c8c03d5f4edbb112b37822baa61754a9f3252181b0c1188bdccfff48e8c1e205c7fdbfffe5ebf8237310b4b2768e6baefb22e0d26e70a12d5ccc6fb9af191b80d7309353c6acabb64560bdf8ab49ac1e218ff5a068f1b30e855eb68f6693b6a0fce338c2a108f2e2b21e5bfb89f0f208e8c6e0df846268dc175fa0a3c21097e440c351c8f56b07531deba37b898a92b235bcf91b5addfc266192f137f56cf4388eb8d5156f0766135028e5cd64088508aee2579895f95593d9a116d0e6947365326bcc71e94d85043d705bf1c5f7efb42bc409b0a7e3a60635890f5206f8be062c2dd16c005765705d4a0f306ac37ffcd7600b52cc4176d13f747aae2e2e36300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001db1ecfc109f341f6a087e12740a45060793845c19b2f94ef4bc1634a339ef6c6370291bbc62648332bb79b5dae4ccb86f53498af63200d07b12c6d98f661e0ffedd7de0e186a9fc735ce98e5c4cba606df96794b82d2a886310ff765334876fc8e7216aa511b8560ce6edb398ad446237b3ad93db4986caca2d27605a7531d5973ff7b6073714e1b659d944793c1fef34c7e712082db10b6d2b6cc61d08f79f3c339e2a7aad5c6e47f79fd4695a981c376c27d9b6c93a06db1e0668933fa486ef0eb7d4c8c144a260fc0e4834a2a4680dc4d08170382c853667ccabb831ae50357859fa263a6ee6ce3e5350fe9e34aa0ab58081e6a1bf44a5c66f48c5c2bcb13b487ea62b279e46d60e1a22e5201c91e77e8f62d52aa4a835ac2217612b6dcb0f40046bc95f27a205ce2b59bf2813394c4063b74d3745504ee1c74c9094ca2f4f751d1ba2065705639ed8eafde6f563df5e545566cc7641c1148b2761cadd1bac0c9e6fc4e9b3c8ee36c91b39d9728929af305caa1bc8bd6c3f65cc602dd255bc238bd2c6005f9081d1c358660b81764c60c96b0c0c6ebe5ae24b2aeb627a35d3a7976fa458ad7b55a6e469fdb7de1e83ddee53ed1ba1bcbb2b2adb1b542b4200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b31f8d7bb078f35d143ba521f929ba2a6a117d37194917856a2d9722317672162dc469cbf3a3531ac926b38e9cfc41d88ae7191c5095caf85369f1d4c839fccd70983d44adfdcb80a48957d493928b6da639a360cae8ea6a9eb28f6dc620508695092701538f9ab5287e99868388d874b9e4894eb05ade8bd41f05b678c28b2ce1c794625124fb767f0cc4736613f750e274afa1f0256fde39ed26821e3d607e8aeb4456e7991019acae1b69e41099ea37ae28fef9ad894189bb5222caf05641b000717aa37e123ca81147628c7e2033a81d4097e416a7091aa369307e312dd6ed80d1ad4b6b5795302435b060d52f177e62d7443f19fc2bc5d493929b993a13cf58cee61d728dd089fbde7041afe7ef395a4fd66d4871b147298dc9ff4610c82acacc2e57590912f9ba2407779870848715f914fa8af3eb786972260b64eb880e874d99e90abc90d342dfc84d7d3d82cb2493c40d44f75f573f7484fe2727a558feee40173cd80d6cf3244035a4c47a9968d3d91c099a7e71db0e1456071311c02497cdf852ea7373735d22890a463efd8f5bd6536fd6f3a3bbfca666f724965b9c638525041bbfa268888e1c3e18721e1215682eb845288b74c55958da25700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000733f12eae0b5b2f704d2112339dacc6170ec4bc8d400dd408ebf758027f3d07d04d7c603ff0e332faadb8982c8f02fa4d1b66ba2a0645b4846ba82e2caaad5182d7ddbf4951c66ec6670bc29a804d7ab818d6b4118f0322099b9003d6fe4bfed7ca49e2478456fd4009fc5847616e1e619eb00a32d49a2ee1025d02852c56203ec25ab32d962bac69a7211fe4d38b74e5402f790949538abb64f20877dc016a4847724ca1c7fe2919281266f3bf3a7f3b878878254ef49b4d5cf376d23d77be5253ec20bff1664af1f0e62193c901f54b52cfcd17946d8d38b3214bad6bdf685e4b77bd73d448ea8055084501ded2e2e70cd16157361bf4605537232492ecd1c1d3786f9b141a9ebc893632aa94d00807c3ae49f9d25a1d77c2612953071bb391dd908cab7d610e4c6839c3e43a6d2d77c7bc0a6e4a7e1a58acd28fd5579b038c4a124bb8bc0d7695a7a8b963f18bac9dcbc8a27eac25167631bb1c005d937063168724ba94bc8fa607ef53640392d246f0e88ff312ba2e3f7cdc38ea362beca4c8975f475ddf22ecd42562801b524e826c286cd33bd6e46c58101a9ede23509bd2997d4191f29c902d360d217ad60f9ecb8be3b6e5fc8336a8583f642da1bc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a5c0324b4bc419df2cc17ab359e685f6a973931732783acae2b58a880759189970599d876124ed130ef23b5853413b45abdc2132c670973876b7cb92b091406f4f43c5c1b7c9279b4d041af006c895a2c58fbc06a24ff2b78c5ceb5106bcb6426fd2bce9e2874d4dd58be40dfe72f4f38d19d7d71e163d37c56b63a87a02b8ebdb6d4e1767a2721e8ea091f52ecc0ce167990fe718f64d111db3f6e0abbb8fac8c3e7b14ae96d9a76d4c0e444b3872f3e6eff22cbcb221bb1c3f72ccd2395152338fc3eb6c350893ed285ede408ec25dcc072281e91c763e955bddda063920b4a0a661aaf7945634bb685236a3ff9a19ecd526066e76a352ee08f5f470c4ae4d1adc0cb1a0994e64774a23af382831957ba18d420649115fba78414e010bc9e583997dbb5023aa8a46b3674903c22eec6f51cf55ff944b333de0338cdcbbf1e5db67f6f9cb2aceff3b9c48fc23eb4aae92af92d66f8acaf089f55d5d8307c8ab69326b7f595a836c955264ce4e59300ca2674f44ae3222d3160eee211a11be96e02cb33a77784f6b202f4b7d9951ce89941eac5df4c271cf2a1ce856f00b63b3d05e924b5b77306d7a4eda0c758ee7c04ece36105c99bfffebea427a9b70154000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007928e7a12f3dfb590c7bad7f48beda5a044952933d192446e786da195f84da34fb05535218c9c70d33d21b266caa2adb3beec8847651f7181ad2146804307b68e08951df7fbff67b888bbff50518cd8dbc51846ceebacb473dec4e33751e31c0f8ad30f4f2d4fa1e584d0509e19e0e5d48e5a3a52cc3211762b827200dc2fc81dd8d89d69fd109f06493d168416142a0638e8444a59d3a291c1a68ca16e637b9f83c1c33fc3db0893fbd51d1f5455dfff32678868f2dc44249e9c63688dee368eea5d43c8324f85551e7cccbd93f2090b70cc6d36b52c3c86b54e2b7627a25789f78a96efe11bd918b21cf60f3cba7857d906976890d2d06949c61b8ce365dcc3b47c35569e5bb02690b0d87c2b2635697d032380f84c43199046cb1336ded3fda4a18ba7e63229033fb1aaf67f366c999a644777d0eceacf00db7ec341ae0e20a5e44ad6455f88567ddfb0c52108c18d8e548fabf9b364f552a936c9e7ee7db01b32ffc0cfca6e20d17877017cad9453446183b5fa2c2dbf19a9da6a4e939a93689bcbf097d226d94b12728a4df239bd1d96ef9e3b8cdf8eda6fedaa12be59bad3b8baa41e7e5979f007e2fdc2edf5ce511089a062a6c832206edee2d8e18c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098749e2b056cad1528017b99eceb9f289e17412f692afcdcc39dc29af738b628668f46d05a5349f9ac8c0b72a6fabeccf03446b2cfabe0d38fd9330159065dfdf92ff0606ec457e45b2634df2472a4df5b2c9b68af13668fb4df9108faa92c252f691e45a2ff808ae40e23d461ae09efd5f369a57a7b90901eeaa474d13854f301b8568188c861d0c047a13695af6987753a9b7fadaffa8ef48e0874e458587a49cd3b5a1266405a11569dfd93bdf152cdddc7cedd067b32709555915af6446ea4ecee676e6f5c6ec031f5ca9b8f3068674ab85708320ebe8433a2afeca0e47436d6b45ae303415f9eebf59afab3b5bdc9906ce16cf0fdb3f7f3acb401bf7e88aaac6327a884312a14167c34d61e0e417c95d96eb30c274313164b90539f09da2213eb3bdbd823299df74313dacb4fff23e31d268b85475dd43bb872086db361786bc7aeeee3ce8397dbca8f3d2068233da12f475cf1e0c44ceb4836cd72996693b721c5af808f6bda03a37553ff88ff4c3f0c27bc62e4ccd02402afadf704f519fc165dd112e47b8259f7e10202ced253070061dc5a629763ea80c95117b97e03f4b906f5fffe503427d43e0467279036362075d84b2ec2d2e3bd87c0d45003000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007807031732fb2cc6479bcaa76e6161ccd6a20204726f46dacebfa59049605679f5ed1ee5ab93cc6cc8e23cc0299742302d9b1801f928e943e366f413b833fb6f87600bad34f74b1bf0840238f75644b2468855c449c7636543b6abe00694e6555ec4b804b1d45142fc79cff91145fa3ba55fa9fe4dd0bea26286b65a2b73c285c58d1cf5b4d8d3b1b259394e321a48b1b5930dc3b1cc34439fd8159a2937d40add07b65cae7d8f0274b3c08ec4f21dd2039603456be739904a5438cca219832fb7d255d12c32abdd1a5b90ae6a03797af2e34974fcda4ca68df1a28a0c1748c18d0bf606166fb0a8a41b55fcc18e615067373d4f2d493bd1ad56fb2050f36a47c7d843d806d82bb68f53bbc16fd5e7af3036af739c86ffaa53d9bce93bd8bb460f5c12dc4538807f76934adb16685eb81e98e5e838fe402620b4e6004986028ecd4bbc8c6bab64de1eda6153ca064459aaeedb92dd60b450c8e08bdd605d6ca4304cbedcbac9a9cff382f61999cc2ffb61541675c5460d21902dd2bda115fb12c603bec9b0ece7118d86492628c95e8a7643444c14783ad14dc13088bff0b105d5ac0167e890b8fde49f3f82fc5194f878ca0c44d30458fa679237fb8336e6000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c38a709f2231363f13ccda4d03c72b95f19c4bd8a8e8899ed6bc7e1654fde45affc7f80b9a23a903da3652b77936cd45f36959bda15931b78cc767027bd63612b69cd73dff7fec51edc706cb251811578bae03d33c9efed42973e0232a73ce5f1c4c96eaae263e2f2bc00b7f5acced7e98e1b02ca1f677091d0f1c9645f30a17eb3ccd78ca08bec5646157f0b34cceab96f159194c707dfb2fc8905f248bfcc74135351a44807cf056adc1682bebe4d932a4bde484bc26ae4dd1ae41f36075423a3969d7caf02d470d2a92d4add857de11c9965b36814909a40d3d08f690df298533459a2228f7b2a5e50316f8fcbb7aba7bc0d1705364067e9e760e3555aad1ebdaef52a861f4679686e60244f09948a08af64bf6988b84af657fd1d75e0737ef1b6bbb3c5e5f383b32fa91d2ef5e6f87d20282633814f8a712cb38145b18ab859ae7729939aca624ff29498097a0b4a03e7b1f2bc1f9ef2dd340d81d1f376e7f59bfc5cee73b59ab165d8dbf98f526af57c2c3d11044150a58e8649acbf7a1cf89be173c1e61a090b60fb73bd2210d641917843c7afe8fbcbdf89d3138cb91cb2adf9cacdfc11250aaad66d17a6089c60dba250a9bcb61fdf122b0e9dff81000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084f6b89966c6d83c9e343575ca7deeea0464e58ae71fab134b77326e6500960d3e62a01b2698b2cb8792ee67e0148582f4ff12454db206c7fa106f96c8586d62238add085f65ddd4c83f0595fd59aa6ae70d03e52cfb89f3f6d773d5d1333e2db576293e5a565a5e0edb92d65a2ca3616260d0703a5299b779c01995a4a0e20ef3a0f7ab8cb6f9b338eca5258a3661cc7157a9c6a6f3d8994c12ec753d8717be3902f370fedc811ccc13f20e6b82fa7d0b5c8089b80d59d79759fd31294db46e44dada8a54b4ab326deb76a9767bbb33dc015892a0512b0b452f624f01fb7d259d4a6e09d12f006b573c3bf9bab5a0850e85ff079264a751e58c53f204ff3ea67a487f389c9b6342daca30b8b034db160b101f31491bb583e0878115619e07df701d58d22be691c727a76350c5c331d0d6c3404fdabfd04e3f7d61d38aec56d79aa9026df6f348b000d1e2b740e9e12c31a5e2a3625bd8cee92984d7cf5749b40050c08ba8f40e438c994b62554ba2162360dde566e1c1dd89b43e4196446e3855d88dcd2562320fe14c13e94ef61a6e5e199e61f95a2df05ba28479dd86044a3536d9fb91faaaa7c5a6077eb17735bd48e876899f45c4cb64b88b2d78040a2e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f577e9261e83ff4bcca3e7595f2f04ab20ddae163dcf0b8c2086660f1cd223d31173cf9e575f3f697ee5a6faa2708fe14be6fcf88e9fd9d5dce7d4ae22211f7499a483ea2e2c65def21bf79ff6e342421c136fbfac0f15fb63ebe76d1d694a1a1e87af4513416a46b5085911a0368e6c0597b9705214ec63228a608c904a5b8fe6c294480f02f1971f44cc6424d4a402ff98a36e733099ae22a5d46e56e37f45567e8bff0a4a4d5c1437ab959fe6d6e489a73dcef8e2c2a6788c8b751c300c14175c90d2aa626fe03b70260a3c036ac4614c9e1f4f4c81eaa1711839034c4609ba01324428f4c68ce58002b2903315bf02a41f1dfcaef1bf0ab74688051593ea06ca2bc3c071a87b07b24d57531aa40c45dc831045f57be4144588bd244d5d5e3129c93c033825fdcae3ac6b5dcb35b8ba44ae8675b6778a8fb1d25ddb67030f6a81b62d608935708135d94dc9439df778931a2a2d97d159d7c6ab28ed6b4f6b73c113c630cc6822f6b4338f56c8481d9962bc6fe2dc38e94afda05b9342c2575624dbaa50472ea9de8e8e86dfeafab1748eb8d25ff3c404ce9031ebd124c65110c2e39662d50a8602107ae70bdf8fdfc502756ee64c592a94b3a9c552183ab00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b57bf27d82004173253b2c85f2b07ef14ad84fdcf22ad4cbc1d8f5cd4342ee68563da8721bf33e05cc3f5d741bf9c1b54279f859b84989281bdedd7c932a115482ce06261ed096c8eeef85df17ccbd780065f49b751708d9cf14fc7592ce7e8ab36ceaf19b954e3e852bc357ac3f73c7158e4bd81c7cf9251c1dcf619eb40fdcbca94b984de7ed35f8fd7a121fdf1412957415da164f318537c1c0968afc417535faac3a384302eca02875b319f87ba75c7367b58149aa687a56402736d3e58f53182e1de718ac12532e14744f86ab1beeeb27fd4c9f5837bf1ab1338bed3840c7701387e13bd2715b94c991b3dc470b5b20ea50f4af388863cba3b38827d30b017f33503e08bf6454e2cb86bd214c133a9a1bc3418e5e60dd18e92830d1c20049120a875acfb3436ea8aa6463c5fec1ab365bbb141561a032faffa622f96302f634ab1e7e41f9bc2cb97b48f303a108d5790dc002fa3e8b0e442fe5234d8d6e21dcdeaf820839bafa33eee84555c59c910ce7d84292e6717f6c34b672d3dfcfec6d579ea21be260d4e3f54c254be2a4269c8a16ada760a678c9ffab35d40f4e6d01b36aba5ae142057ad661365b8a89f874da908641c2bf843c157878163fb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cce2e1e1b435ff2016728de0641c13e8f1eed4a22a599b23907415868257d60930d0f37189276b793e6c51c59941ca8d932762511ee233c0a51ed0c53213fc2e6526d8d767d1300dacf0240fe3d5b0b970f885b9a9d4c03fea32b3876a062d56f36399011bf99ab7c18559af3ae80f83eeb65a1c7aa6bea5104b88019780c16372ca25f8bf4fdf20808c15ebcadd50e589ce4e50192522351222fcc7972fe52fc836059d2f4e938c44f58e18c2bd6d4312c65ff2b83c041f9ce8bbf1b960a1c511f2781477140418a7a70905abcc6b04dea5268101ceb827d9aaab4bc50f781c34078950f6e0d60de31cba338e05523c120f1feb34664313f2c9dca63b2f89b37f1a1a7ee9a9c50028ed5abdad9037c63461e454a6186ff2c2a606e044f38ba136353159c9b233c0a26b94aac0182844ed371500a9f626c8b79029c19343b10fdb8dba03247210c10e07b33f2c4dc47c38e5b914bf798c3746a6f5bf7fec6c286bcfad70635133bee6b001d5f0631827a7a0f28f848a3b58efc895500c332f676323a8a9af24e28c284d37cdbde2595007312391944987554998ac4597d2a0f3beecb1414d9272d1d712aa390f6f89717a2193722d530c54000285aff4b0dd5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086cb00b28882b80ae9044b3ff520b517d064fabfee1b4e008d95b594c1dfdaa6058991ef6fbe997f1a96147a1bf7664d9202a0f329168333eb1671d3b6bb83b66e40795d9fe36e6341cc67a355330a557d26c511469c5583ff53a16e530dc5c168ec0d2838323eeae64d3c481a7b579cd142f805c307d217179616c79e7a5cff30e37b207573d970b9a7f7b7e0a08484ff8e773b1068256f8d75847d8642e5b51cd5ce94a2deecf6c6b9f7b807597b06c6bf7288b90564b87e4c27d27e20d092c4dac2d51a3a2aefa3881740f478026aa5e9bbd6685be155c68aec8f2f2526c250646df4f1a9df11c00d6cc808caf8d768c0ac68d151c7f14cd8bf20b14eb20e15854c28ea4256044b9d79656cd113e3f054572810ec9bca86f14996b7ce2540607f53418d811c1c1d8c8047d1cc046d91763dfa556df7871d364131629e8a1888f06b5a5a06ffcc54068bb056c5ea860e0ff7c500dc5629205d78948f722c62811ee072e900820912d0cfcf3f82c345da22854d09b68ef9be094d206ae2dc77863fa63205f3c1f9083fd5fea1a13afdd87c0188b127b75c6b61b6ad47b71f06b274a8be8a1b612209527e20a722e2eb9887a086d767ede0835eb22ed121836b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010cb91c53c60fe713bdc4ca0093bf6200813c0f7a3158fd6b056715c204be14c5ad97abcf39977e127040227ec4be7d3f9c4885022d2ed90d948ee441c49a33bd6d55ea40945e57cc6da0382b524abaace3d5a1e5947c81c0dddf2bc2435162cb59e922b206036478cd064d6be28d66569d6b6396c49d1871a103aeeb830599c258e5f7646eabbe1363e4e20cc1ca396e65c486a0a6d16d2d254d99f1a7fa5689ef790cdd9a5a4aff68c623dff9f0616386e26aedc5d96ae3e6015b7392dd9e5defd24f63dc54199fdcc9bfcc4c556dda737cbbcf05c719c604d3f4203634106190e0b532a81b58581d2d1da406141eb9eeeaedac01221a33efd18cded90d418ded51f628382bf1befacdf1cac918dea3eb63efa2cf644032cb956d7263e0dfd17f8431769c0e45d5d60c2e45ad2b94a651e3b1ae1771d6c483c438e4f6b17cf70fdc926a86768098d22b40df52c069cbf84be2280d457095b6f79b2827bd01e6104dfeedd9f164b661a70b2a57ebe592fb63a635c6416074ee772fceca5b0dc6a5ad2fd4e4e3c763de9bb41c4b01a4c9dbb121a7cd5e514873d368e977c4ec06432ecfae3cf53e312e67549d52ec85fefbd3c459b7c93c52ceebd8ac1b0395f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021ff742ff509a721fdc5c90db569e25b8bcde886aaf7b8adc027cf101b0b54385abef2286fe365d019db3ebb555a8d8893ed99231d1cee8e0e2da7d4d520474bde0a2f18cb303d394e740d91f8782003b1b5b601bb546c23e36cde6bca86bd150b84c758af9122cf9972473f6107df816b3ad2d239d778a989fd90360cc6096a0716a8a21b87a46be4b4a21344dd2b575cd0133f72c955538ac4fbde5662418ed76e5915ea36c2885d52326f7b03af0b94bb4f6b6e9b5b6b17933bb959f09af7d2c7619cff1eaddbad43f632cd9207d7356ddc0d6071d8912e0d190bc06e4024dfaa7fbaa52fc8db226d7ff7ab6d27a9d3d373c40b903e7faf8df4803b47d54f6e5d100abcc2e5c8bba264601b24789e46244a1a6b5c0e22ddcd82205b35e0daae3f62ec323393748d4a2660435fb740f2c1109f117be351f04abc331adbabea0b0f71bedeba27a4589f6ce570cc8520e0e60e9b13c21915fff16e14dbebb605c1d758b0f99dc8e33cd8c9b62b5d074708866fc72fc20bd1e76df94395ce05ccae2e2591f57aff4e45ae6756c7a573c57ec172ea83766335991d5a7324cf69f52ffb592804101d3769490d3978a83e095dfd75483c272ee8dcd5ec7759c6e48800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008836de09d2c33a28b1d1aeb704848be49f84aba549b4e4661f5a1d0a36aa7cacc2cc69930c73709993342a90e14b7469b2fd60601b57fc84daf77f6bd6cb331ada9fe86eea3741ca0c83d0287aa98f5227e4ca5dc319d4cb362ce902d688986bc8f80b02a587a479f3ff9e0c68d493530207f1cc92007e937c73d042524bb06623a683af5ee4a3e98b5c5e9794321befaf40a4d7aa29a006f681635e037986666891444ed835dc80a6d2863f80f78b697f1e68249ccbf5c5a4c699dae33c9295885b4daf725b2ee61fb5756a869a5aacb4e4b481e526f3f150092b1a187f8d159059b5daed2dbab8825dadadef11ceecf45de456d3e5e501b2ca99113f41501d0bb5eaf0e98bef0960f4e4ec967ad70ba2de392a33bdeec7c0cbf5e19d8f87fd0da4a0562815de6ee423a7e373e0f0ad1d063e39a059e8a10652d55334bc84be68543d38bad6da6052d6a5886eb50793e5b396db6a0069272f1836ddd2ec9ad196a530bfd44e3a4b7fc4454abb1481bb1610a676120f3142e20659f76da290a7cc895ed52832e29191d5a47786441441626e2638c2db982345ac4d669abeeaf7876b00e9134e32b0dd1b359977030f953e754c5f76e0784eda99e0d27c3d3cc400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e5f56cc822efce347fc6e132ee0a9ec1d8b21716adbed3298fae398cb49a4afa8c81c37cce30ea6eb1b267a18b1d21532bc11d868d3c1d5f533263219c525471c9121c579d0c7a5f3e1c83834c1cd62cfddc60e3f6c74fedd6ab6c4505ed357d85493d97922a895907cdd6a99f8c04c36b65c7a31200813924481248cde8035142e5bb263297f70570689ec7cce6cb37d37a89a988c5bb3d5159cb01add9a1370d792cde780fd556c07e79b3c7c875b5bebd7a596b704f8911731f7edb66c23507b80774e25a7c6d0c955cf55b371d5498e77aa2bf959fe5e142912cd0c28c67af2d90f06efc51e10d308645ff1829b825404e7845c19bf1caecc5dcc7840f3da2e5782530f72d2c330b96176021a2ec7750ca5185004b691f26f136d2a80ba0e0994f7f80e31e61d5c9b971e21720e2f93ae3e813eae5e28572d55999109b40bb8a51d44e2989ec9ebdf915b4c8e8cb39a7da4bbf0943c6cb962991484936e460472e46c74801cd2f36b10d2c47fda3facf515860e5c9f4f3d1e041090cfb03eb637c497e260d594b225a382d5b9d57c709c474fe2e02a4693aef5a95c1d43e5abe1434d6e403bc96283ddf55f05b68d1ae75b0b35d9a1a579316f5486378b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024d04c1f7b4b9f083c359f4d0cb9beb122915fe27321199d89fd600cf2e4ea2afd42c1bb11c1d61fa42f0b926156659ddd322b611fd7185c248bfa19fe0c6dbc1843b229fa7c9fa4f9350b10e3a0a324dd8e658cce38d64723ed700973db903b7de3c9ff70a8baa56a7b37e23ed94ef97a2504a4f6db735e5daae46a663b6febd38311e8eba232284291b6fcd7971dec281e6782ef3c1e62dc33d19fd31c7bad856506d71fe6110ae661bdb34d035b8f10a453dd6a580b94f5e5b1a844050884c09b3229342fa13ea61019a55f9e125777e7880aa5b15b1e9e5d0ba64b3828fa958bc67e1d57ab9e01b4d575ffa811093e4ba696db7f6fc7009f338eee853463b2293ea0494a6caec289163034eb9c602da9468959f74300c452fca2fa144300c6f08026b5981827ddd7c01b2d2f62197b05e68a561cd13e0cf9739db4749e9ecaf13fb931e276f5cca8f19cb50f4f89ec42dedccb14672ac2d063229d4c456327a97eec8eeaa0ee4104989e35c51e6c73e866beba247823fa95f14f486469a54be0888cac8b5521bb6bc3839ba27b21d112618850dd71063464a239d00fe2b6b54180d7bd736b2fdd55a312afe5e51cbfcad02da90e6a7c98d27e0d2ffe1ffa000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023c336b687652e4ac94fe9d2da9b24dd1c984ce8c663e8d11af347e0ce67f4968cd2d12917acbaa50cf7e9ee027ca85d3de6d96686e844266b48a8089817c025277f61cd97108dd4cd40974a8591daac77f8735fc600d4bd845f5c1e3ac6ea55c519d26bf459bd948890999e9d3b4598decbdb14883aed0bfb919a3ae51fe80cd4dc30c02dede60f85314aac6c3b33f60930adec03f89388fa75b6fa117b3d9efbcac95c59edcdde4c75e0ca0189d2c60180cad7dbfe0e37104f408cd6a7c1d54cb757de97588b3330b195ee4a9257192c78f9d63f2112d8f915f6e9ed5326308ae13d6da46eee268d6ba73c0e789ba73390b21eb5c59562be4d9f1e864e6decc239b237f10f87d59202bc110360c33c955cf1813d1a6b8adeeed5808b82e1ee4018abdc7304bf29b4e2abefb9c7341416be1fb26fdc3658e410a2cad4ea43dc1a6f00b003356f88804430c10a47621d0352fbf25dc0220a398103c8f73da7f2a1f11dbc18a28d4884d48c92c6e6d8604c6b68c0bdd045469ccc932ef53a47d6cd772e47d2036e360f3b4f382dbe316b12f65ca82ed88d637e71db97cb51e896688a5f32ceb58b66aac3b866ebb0bff34c06bfe7a1051ef2dbd43db1157d95e60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a25e353dd5c414cbabbc818d7c94c7436c5d2d0434280d109b44219765feb70e6c2b7c3a3a851c5fd4ba6cf837aa542e2500b237b0084f2d7f93c694e15bf75a7bb8e2461093e44f9da7893b7052bdd20440660278ce842521448d049f1e6b8d3c1fba4209c95ce1b3dffdf93d94108736203ec69f5240f6ee684376c8c3724554499a34447de0a1fb47155e1a1c6c953bfafec477442c8763c8383dc114d5526de2884885ea2cd3f108b5ceea5d1134e7bf2522c946f7aef0d3904d16615be0658036f14347278ac0114f8ecadad9f09bdfa14f53206f4fd14a40c8f6e912fcfdd470025d92bb66ed63be54eee4a6c43539ab67c795a02c028beceb8ab834648d739bcba01d312dd0a1f7b29a2869cfb108656134434cd1ebd6ec62fd3c6ca6ec074dfc3693f98a83f4af53ada617b77f40b5f976998a3227d079b0eaed793908265b17d1077aef06c6a4a6a0a76aefb00892b1b9cf979c07d705b19e3691ff51d4a42d602d4fa63668eb42817e8f348922cfd6a557b556f24fa7f1fb606a71d194267f437f067174eb5c52c97eb7d02157d475ac7f44de41dbeb5d1bfcf551c40b67713093c7ef266da05b63a224cf84f13a9c2f7b1f83958deb7bad056d4100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002472e6649d4a576a0e823ded5c746df2308e527dedcd49bff83235ee420f77d63526c351c07bb9931148aad2570a4a3666c3f6b38df7da2db8a6af55be1db49d04a9daca12b48287317c5a6fbe9733daee1639f1c9c32a5d0b11d3515c781a3c32c26668bb8a9024a7a74be66a10c5dd746dd6dee2e0cb83542eb15709dcbb268505a3d32b90f9111831f30c6104ad359bc58cf4e310242f4d2dec6211d3e894c89dde2246cddca7ba6aa65637d8e010901621f412bab5451e864f5df182c778e40cb1f4494266dfe1a5dad538110b919356faaccc64e99521f5834cdb0e9b262c82308fa7aca9634c9518087acbd11e575ff44d8f40f4efc3502c05799810b4cab47211e6d3ac21e57e2541d4fb4dd3931ac050c411ac8f0683cefec2e8887fada94ce933f080ce2c13f304e7cd35746e26c26579610802c7b3b4e2dbf82e1d76a312fd6511bc3cae27dee33026225c7379c418b714ba74de7db079cd3a60eec87035132d713f3670b59b20ae86741fd84e48f4b17b880c07b3ef91456167a364aef8140b3042efaa08f45aad80b4dbb5ffdaf116c5a00e7aa98d7cd23fbab7f43f089c3592bc0cafe1d96ca75d97224060907193029aa68a5f6668d920a4ad0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000881d84ebeb233d8e2e40b5fcc1427765733257d17e5305f995ad9c0cf548d3cd4430dd03f22510a03c06efa4b6dff4f9209824d56610d15bd5f0a403829889526e819fff5a62ed63f3530670776570f51ed51f77fbe6f6ccd31d14e8fe09297fe33ceaac7e99a96b7c86de8f1fa85f357d30ebe21b7561c647ebc8fe536f56500e7d173436ded38de1af7ff577179688d4f2e598fad272009abed9edddc9afed8a1afea5fb41b6018d3c0c3f4cdbdd076059080ae7b7debfdb9d5137bc4f27b5e343d8411d4d75eb873817e21b69d9e1984198b4411f3e7af5a70bdf47ee0fe1288cba1c2b8ec5c0bcfc30de42d1efe3e7b0c95ff30165ed903d09ad70ad32c05f8255c783e98980774bd45293e9a24613a127935383ecbad309313096060f5a63c6a0266676bd7c6c324ce06acbfa860be0a80011778d102aa1fd088b450c21c5aede8e273987790412820cd769d6ab722a874454a9f3e19faa1d620b3ae40afb1a12a4a36456dd515675bf1e42cbfd4a0ca0f40ebc61bb1a146aee140d533c4e527a5c77da46f94521fc98448dd7f7b54765760b05b45334678652906ae2bc3d3cae82fd6c11f1087f3913ff02393a1a1796222bfadd26acbf7f5a49603c450000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a29f24178c0ea59114545f20f40c13eb46e7eb99c445e090c642bda3c01ef471203fc995a69747dfda605c288d70cea1f4285bb0013e9dce4584077da22173d0d30dcccd5fc2b1bcdc92ad543d5325ddaf58f2321a3a0cf3bc149da3bf82e09552308107cad0f036027373ee19a87e717fd02b61f6085c1515087c6d9d596ffaea5f00c179b49c002b9fe3603f4788417a7623ecfb6de4b571ea77648bdb38d3237a8780fce59396e8a10ff7ba0ddd0d211c7ce3419bc2ff0b1060626b402ebffaec72bdc5e9fa50efdca404a9a4be27a77fe3432573cf3f32d783087c0e96df7cfc3dc8f794629e0f1edbc42960a1c9523cf92147c8af7286d9a075683b37e2e7007bde34ac1945021f3bd4cd89fae81322ac0c0481d01fd65a968d7b4609dc8aa1c4712a21e3fbf7b3f25d14e1feb027d4da33f145eb4dd8f923ac0b5c7b1c0de33ea435d417c13cbc2c3175dcb21f0744bdc4683fbc871331f412f009ce94063fff9582cef0381c7e7190b08a2c9653ba06c506068f5971ca53b1408e7bd22f7ff1f3bd7d3fdda369edba78d8518fdd27fa0370168ec3178b7355394b34fbe0f8471b4cb63c59294d0c0109c7989cb0f2f3ea1f4e3675d938fa59de16c28800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001317df09b3436d069497f614e9511d454a75c72a8fddacaa36fbf34d4d0fcdcdcde1d4d995fc3dca3a8c7346853318285e4747a341cd5c823ffd2d4518f35db364504c48ef4f4d0f280b152c26638a2a0ec798a4b7c51536c4ddce94f71193069b6781bb62c91e24139f035e136ea896dabe4ce81de647fb83ae3a002e678ec63ac7503ec38acf08fbc8caa9746c2656d10f9fed1a2ff6ea4fb18e8e669632c445927c77b5a2cd82577a4b1f9e50211f9e468cf14d7b6532cc097d1a4b7f87773ab034c90347b2ac6788ed8906d760a7bd27b441c758ca317253f3b760068e46143690ec6381f05f06f682c880f5f0403d544e062671fff186f24c5e548eb838b4c71ad5f183a6117b6fcf12f42a3dd88042b8a8ed84fedd266a723d5106618cae538b8a3afa8d16fe7419550d6eab2e95709dd8e4969906e6d57a0b62e880848076aadcd2e212390bfc2b16c9b44c6e306e6e9a15f25d24b40bf17df1130f405161e8aed53ccfffee5cebc69fa740137debc3cd4b01e1a2da6c433296fb8d25401c0ab3a41569dc2ff2e7411a827f7fbe4cf00e9f00fbe04d581700d1738fbe41908dda5030a20dbcbda0e75cfbc6b0faaefd3b381ee3373d50b7d3a484c68300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b7f69396815ac7abcbc1d74249aa1479f4c5b5d557f461c96a5fd965e6c27b970febd2b2a4639dab8b66be263ed76b6f80f34b26eff4065d9abad2a6d1ccbaffbf75747a3a9c7a2978b0ab857f6f5ad230f59d8fbfd635895962435ee9dca888ec7e5f8485f5b4864d5946c7be018abf78c6bf368b7708f99490230df5ae72e8ec6a8e7ecf92b05196d2d80139a0ce6a376001b1065fc16a75e42b0bd99d505be96fe0105b000fd6dcd6596486413dac28d2f49531f1eaf6702fe639f9aab39e90888d41fbd29e6a0425699e64e1a637a6a24397ac1aef6c5f5d795fe825cee218b542c03d7c07c52270b6c17e41452315fec719f312b65dae7f887856b9c92424e90dfb1eafc0902baf5d8b9e4b5dce203999a0afa30d19da6b3044470a8e9f7bc4645ea1aa23f5a4317af2a6b0d9f026980c3f5c964afeba632e88722cd7ed62ec6be457ddd09200e39d6e40822193df44c94dfff1fc0b60004682598dbbcd31f53078501a7c367f7b123cff5e158a3f756a46af8b7304d819d5ac04f20a690dd95e95dac884488d18272032a1458ef2207f5274dcc38bdb19e3bf31dc29dc53c00584399ecb46ae91efc108c75f13d8a4f57b269ead6f362b9129b3538ed0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a68b127986ed3104ca1afbd3e2d6841a985ef2fd75307e15a3eea14b2afb1c6be3e5ce0f521a0f529682022af2da783f992cfad811edbd7d89380c6b26ddfd5cf61792702f83ec871ac729ef64e4ea6b8140f5eef1358711b4338107968263919b8ae8595a730569d029e859ff48335642c319311d403db72289ef7f4471a379c9a7a2d058e76feb906358233ff41b40806c554e5a576576164bf21f087b7dd889ef90ce7c3f8e0f80ecf9b8dae29b5eacc10558e5da288e77af0b4a6337e89c1ce00f0038b61da42dc1fab47ec91ba124477f741f387c14dc82b9ea24b6a639ae32e665d96e75e0ab1400430383d4b3f9439ddc128a190fe9f2881ae02aa77d75309357295b5bbef25615a1d78497074acede9533ba962b8308050576a721c47d2d18513fb04c64e7965b763230596a11571311518c1b325e9980d4e82d83b1dcb3ce6a9b5f5330b0a4f6c0cd87cb2b822e6a5dd7457dde518ef5717bc4fe0668f27a8769ea6fad76525b1a85706dd60a9cd34c152781bcb8d7716077faa16c8b10d1965e1134ea646f5a26824294a0bd908eca7ac9d930fe351c160df05de16dc4f383b9bc79fef9579792de98bac512f5bce6d8355c0d893e7514142bdf9e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000949b47f1e1c000069ad5ca53fc764b3f8da782b057eebb0707c69f29a0d874bcd05ab4606cf58ff730425a653861320fc691ff97f300cfae3a68fc680611fdb18c60d55dabfce92ce7d543ccebf203646387504017f748da20a9f96d2b3fd4da69cb5cbd3964a82e5141560bbff3d7ca52f1f7e4621f1b2325bebefcd01b4870b179afc0ca5e1e3e3659239fe3527657d18fe3752c21d2747394d75a7739b2e151ba1b99555fe072cdd8c3c8d4aceb735f6b299fac9191b2a23a50d84c1e243106cd3c8d145c75d4ed4f37c0691682ffc21dc470831f500c024070aca63c5dea282c580f757db94d46916163a28ba6fc753b5a2e6defcd958fedc13bc004bd2340dd9435b04432540bfe2d899c12489b403303c61c7617e02acf8bfb59d376a1b0d58770fc4fbc8a38e0ea3e1a46d70e347b14d1374f439a70e93c1184651be0d4855ffa27b9359eecf42ff2aa06b90edaef701a70c5f9d602606e204747653a9aa8b7a956017c40a34e0093aaeaee224db29cacfc3170aece933d51847d1e642d86ee5b75bff20dc77584f5df13433cec91492099111f7c4c53244ea5574003172128746d44f2558d847befaa8cbbaba2816053c82aa7825a50be5a77c297280000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a37aa74b90502324dfb7baa9a44e439afefad005c5aa2faebfb027614a5fadaccc5023d573eec4ea2821ece4a07025f156e66a699be8041f5b6df8f6993cb92cea376fb0ec9e97c76405d1b64de17feefd1fd35a9db6181ef885d4624e36c8bc87facab5de3bcef13d096bad494d965ac654e15d7105cfb701f5c4abfbab9bbbb79467a237a5b900de1d8eeaaeb39e08c18493a5916d77bc10bc90652fd0d022b41e22df40d8ab7be7ab42b9f7dfaca06f6d7f470adc8f427889c6ee61be706af8ce9bbfdd9adcbfa4a547f90383cb2836277485fb10cb416e29e8779d932e3137a9882f806dc817785115b536480fdb28b7c4c7275a3bd4f95619718a1c2809378db15d3072d7379cfda196240e5f42953545624c3404099b56b842b8c895c20f577121939981ad4e6eac0ef38d7d5ca61a007586455cfcbb6780ac9213106d29739b3fd979d32049ec42bb8a912f0b44da806b2afb69c1d8c808083a6f3e93826d323fb664a68fb523cb2b39b2f44c644081d7243cfdc1427ef2c913c5233de8d972c45a07ab00209f959a7a19ea8b03386636e4d3644e2dc82054bcadd3963d8b7ca4e252c398953e0746847a37a81809ddfb7abe81f8d90f1f97cc4ef984000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084b8f3409f99ddbea6c570bcc7c786123d7e0aa46de2dd2aa214bd5a3d422277627d728050572ec7e23c9c0a1863addaf86066d673e36139c1e3695f35ae55b7c568c48e5d7197930963cab1cb5833c51d8643c38614e94b3a208a48040ca058d04213302fe1a33f567054b34b9cbbaa17ac06e532a200d455191438ccb3e7433e12cc3ed908b8552adca4cbedcbc27ddccdefe42d1a410b4cb544894f43777ce59415f7aec1970d67def5264abeb0847cb63d79a4b2c3dd18eb8b76bbbed9c1b3d1f283ac1d000b6782b27826311c907dd5b4140524ad7a8c44419484fa02b1c05954db8e6ce21e71fa37e0cffe18b8580368ad44ab71b9b0816a75bfb13a05eb0a04499a47eefbccd1daec81ba0861fc97d83fad3570513a8eebb5225ddf0147f3d749ab26efa759c9eb934a6854079ae38e3714ca5dc583ac0253fd745bc33d8417a33a4e44442bb08b5071fb1c1c9004638686a860f20b277e3f3336d5e0c4b796d3622af2091257e410f1be5755772aba2f6d527b6eda72e4543a4db4262ff57067ded63dfbe8f56c2cf1c3cfecfb7d73951f0ab5ae35ac8a792e82674a33fada6ec01553d9d25ed4d89294380580669021512bab211a571a6f46e9591200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ba626b74f72984cb183ef35197d3b555ef8599a02834605fc51ff23e579f1ff83e622cc9f39f25badc6d5b89b2517b9d7d5c99f8e27de167234dccede3c768c7b8c92a3c7f0f51b740b64e912d184bb52644370f85f9fa1f7b103b19a2e3bba2936626fe17f806c01d1e94fc22c2a4ee2f6718e1cba195a0662afd0eea30a41986651ba6dad099b0ccd09f3e7618c54371793e95eed9dc9eeeb10e625ec5c3904038dfc437fe0ed0a429cea15953163005876c10ba312fd50ab47c53249aab6be98d0dc1d03cd6c96a24e24b500bd90903d7ce708b1dd5d7a536c280f55806170f21488770c2b4cf5dd14163a440dbb4512456d7d3e3b6d6f6c308a3aef39d50f33dd366ab3009b5d2316e4f722eabc85af368bc04b08f59c0f2ea8ef967937466bceefca08a61dda6853ab26f999c42286551c86d335b340ff642dfa84f6d098518f966064286d9e0199277d9261b090b51e5233e3e1239f1276ce382b78e350ddcc49a493a564a3fe683613ae40638b579860ffafece9d8d02b94726df46f0c68ef268f36f52dacdbbc0547436481a1883cb0330f352a4da79f07715ac0a1e1064106afa7c098edb00cee53b2ccdb55796fcde1ea560495cf1ecee4eaf940000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014c13ac545e150b54684400ac87586f31b99e564a9b4ddd1217869c8031978d50a0dd1507940a110e2c47a5aa197fb99b90d986fd3d82659f29e28fa752881dc3b2e0ab9ed2f2278f182e6e24a8aa0801fc58face2d6ddc6f3045af777c8023feb9d155cb7addf42886d6edd15258c99bcf594c2a2ae6252d2ac1deb1bb76c455880cf0fedade0b3e1a710c662a008989607bfc6b905a90c7c81cf0d46abceb965ff9f389ee371c68d8215c293a9eefb8589da3fc40996ea1d3e0fb2c56ee6bb1bdc22e8d907786b4e9bfb93d5dc2ce0980668fcf2125358e773a94d70c70c9d36a5a3e950366e8304f012dc3e6118fd4896b27b5b9dd6a51fe6a2d8e357bd1a19ad3b146961da5145aebdac53d9dfbda0157ec4693eeb64a0639b9476ada6d5f661a99f14a09f0a98e9ac491ce3408ba907926a78e72528640b60aa36dcee4918c87fca731752a1d5e682a217f3700678888e847bc2b6f727b87adcd818f8a73a9a77204c9b4d2000b3e76efea5d72e209147b7cc66047611a07ba83acfa708e5e742747cd13efa534d68f83a76cc477a87478c3f4ea0c3fe967df0d0d0ac8ef6914b24b5ccd530f29418b3df1a5bd41e63d0ae4d5ad60b3738565f96904d7400000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484008c9b13ad5a0641ecba5edbc45a82045f796271018d663317154e822519152bd0b85d31c0e750d85cd7407ed13ec15315958e8890faaecf140a85feec0226d6b201deb6f9332d8eade98180d88d9e756f4604399a17aa361caf2940daa8e44082e93bd14bd309517fe3b07b213ac2601db5c3ef70f76b0c2f92b71b98444280128abf4ccc906125cf8e90f6b554493a91a41adee05aac11433e58df6a35f4cc625d6fa612b19ed8582d47f583f1fd2bb5c14b03a203cb0c77fdf792500adc9ad2078d53b2af4f718d15e1ff2e92370629ee8cb2ece0bc7c98992cde5545f568f1b400a528b09ed7a67ff78374e50904029d000c2c2c4a0d41ab913b587ce1ecd05d5ba644ddd9805f76bc7d117bef73581aa08cfa997dfb6c4210226b949778d2b0f00dd59df95f51ff83d58832b100f8d4682f019cd25ef69200353a8d028932804fd7effe9b9c809d918ccb0e84e3c86161d1677c31fc62914609ce5eb588912f9b6bd891f181e6dca0b5c0cc43e3572a4459d2e71d03dc32dce6646fcf4940aae14a88b1f17da0afd57c19efe36dc5596286ba667b04420e62a56572a01b212cc6fc8af645a0cc23ea2d635be539502b3727ed966b0943d64cc8b026ff6520e9264cbd00480388e352c752698148b1bbb82e53b3f17d9b8b487b24db1bf2b0e95ac2e6d89db4c52f197e1c6d90387359db67f465094b3038761d52043f53407532a36b11b265b492993aa5b9c9258bfeddda8c6370554eadf21d1d6194e9122a2d4b07829836924b1b3cd9595d33866b182194023ff81e747e9e1dd1bd03f223cd66e510f77ea16ea8677fe8cfc38e098a9f667c794e5c860786370da1a8418eef3257d991c0067997f370324dc14f1832bf0bed841d97b4fbd14fecd1c93063224448fa672cc9f584b5672d0514c87e50d3ba1fcfb01c4a4502e0c49dcf419328b6c1a8d477c65a0c4e024ff96faa962c654c347678c2acae851b337cf2909a55721bdb2507084e6a5c91dbac7b38e3886ecc6fc797a7472b2f1601d0c082512b783dc9d2e6c1e4f01d3d11b15aa75ac0b10f8d798bd185a6b222503d8b32be8a42c181b2cf0ae88fc55620a68abfc4ff373489846dddf8adb762e83c13f167c7d7afb6fa7bafdedc96de7235586d4cca04b2c02d8479444122518de8fbd1d04cff0f49f290e06a7bb20d84578f0f74ebb94137f025b73c0cd80a84ffc660f58a4ecdc43e16b1b1041c07faecefeb3bca922d40abfcd8db6a485d8ea647314a5c54e266bb18ca84a09df12de7a0a931b26231d539abf4ebfca304c3f524511f4c6898ebbbf5b2377f0607917dc6284618233f6ece79cf86a9ffd9f08481d07bae20a4d8ac42d67017d70b6f5bead62c008951251acd2ff9a29fc9cf82f8b0b0767bd55ac3c9249a9253f7ed80cc828fcca7a62e89aedfcf7aa7e697cb9ef0f32e5730ff727a9ec942e1973702a8a06393e3dc7d9ccf1398b83a6c1ec105e20c18b63c55dc264481f18318d62efa6d5d25d3981b985aa0fcc39eff71e3ce01ff5370733993ec878a600657af3d248695b7a37772e0fcee764bb58721fcf8209c476f1d85f7a08e9e42493900134370815189237b6e05eb061593991357f832c28beaaadb5164d3706e39b563fdbeb730d53873b292ec59da80d872a3b34162f2654f72471bca1da702acfaf0fb1130c6cf65324ed63f21e3d7ea2f37f5edf2c9a6591d57e17ac653480987fd010d321dcf6051c6cad1ea1e70c6c3885b06215bef626b437b27a36e42a4b1fc02ee4d3adb076ffea4b62c98aaeb7826959ff2fe649d9dbac582d8122f85fedfa9e8307a5f647e1e1419db3668e347316fec81cdc325fe537c5b267237980d014c55ee016aea9e7fbf3a5556e2779c37b11d514ce40b16a643c05bce0a5a63432617a39b6f14a266cd24d07e9c7838be1d6fa301f5c8d37b0cc59a8f29fb9efaed2c9d94ed8e0a6e533d0a5feb34c467e48c614f75788069daea08d04fe3cd830fc32ac62e5045963f0d7a164d9ec2dc1d19a0ff6872c60701319e688417f64e06b0847980ac9332deddb48b310ae0af9b9b52b026c928d9bade5d72b4656892730afed6b743ce72a85d9b15407feb969da2c28e0e9ef553d529ebba5063ed17eee765f8e66b8a2fa555fa592f9c2cc10f6f20d30915c4a3cfeda69efcb7f65ada67dc8dcd9b6e784ba927a5393fb922850e70c6c54883c6e41447b764e4d8dc6789568baf1a7cb0a867d5caba95c0391c3a922738c2887e295a8c8b9da80a78161207e661ed1960e12eeeb34c6abce5244331db4864a7094d8bebd344074f4cbbabdd558dc250a6c8e3b3c31a608de95881315f7fd16ff6eb6e0e06e6635b9339d8cec8be2e5c51621c5f6b03a1f93e4c3f502155197127b4f269fd29326d4ea774a1e7384aa94775be8607b00714ccf3d801bbc43f87b42f429c7171c08cdb9da4c65ca7c0ebcbcb818cb32a7bc938388392184c2cd0b7e6ed802bae639b472dc86f9e7f1dc187eb51a6dce5cdad2fdd7a11346fe368b8b0b49540f3d96c2b5071f8ea49f9697701bef89a5afd4717a390920d4ba4090f83de415774b6b3056153dcff43a76cdb5bc8e1156742a42064d071b93979fc97c6a0a4ec42edd390dc3f3e02f8861bc0bd9df85acc515838105a708947a19851c36fd004ab51bd96db38cebb0d0bad507db4a20740deb6fff5dd30d9afd3c4f94d163780a3496e6a4d90ea152b5f445114c16ebbb6a440de970ae0fa68dc3b94bb82ac716b3e2ad59e5bd2281b19c7a40b466081e7aba15416b5a253a8df5f63d519cb1383f8879a329f25fe56db602242aeeab90ab49a844e67722a14c35cb3acb2434ce0f316adf1ad8ef663ddc83ebdbe7a8a5683b7210436d40104365263c6e23e724d994a7cc193895b1113ea84233f2811f522e19d0e69cd60c72df9a4aa980adeb0bdbad76a50a4d6783ebefe63ca7c078aba0200e215ec81b6bb43b9714e768f06aea6d17abf6d62be998c5acd804b72d67c9a774cd24b815ee76f75edf91df57bbdd63e8425578d85d6f2d5ecda9c1b925784d8fe797b92ff5eb83a132aab4c68eb9b8c88a65b02608405a9ed120ac037cb2a0ab52406f210b94c39853e23417b8c9692a5dcc1bfe0ca3a049b55a428ef4bb37b32ebe4a20cd4a99007d603441a23b356f9d4650c813e04e97906959abe0ea847f63ba28288d59affe2e575c252b58c87647501785d3c6a4427e125a7fabaf93af5d8a261f849f7265ad10ed4c954728ae1d1dc50af43c6bc6f3af469f1cb87f47f4d4390ffd60e89d2747f514e87383dbf7f4b3e6b4dead1f3d994942ec46dd031041b7288f556748f3b3adbf0b5ce9dcb9f1726611b5a7f6445a8c3e7215d8a22178381bf88431b2fdc261e59c25aa6aeaccf211210d3a05475176a56f1ef4b445d0cb1a96ef19a66d97a72039496e04857761b4cda675f4b68a44a90b26fe3f0a7825173485c288b904e324cdf443b5e956f4f015842da1aef840a046f774116f61d62f13c0aa98bda8b48795965debda13b845dea649a22172cd91bbf2abaff50b450a88d3783767b7da59cf9dc0a37b57cd20dbd116e3e96036e6e503bf564a62d8227299c18733a4f1176db2d3ab3fec5f9d9fb4dd37fe2b31876d93c189b197af0f5fcecf3f61d41eaba407d030e5ea9cc86b0ccb07e8c2bb097ee5d9b9c8c609230516f766d91d4a830bacdfb9333c8c2ccd0030a721d98ef27661a197350f250bfcf632d28ba34c21213f7609f10cb419621fc66802e38b5f8ce54b2b8887bd242fb5f4079d221dab38296938c7acdb6591400c977eb9794319a7c34ab97fe40727a1ccca37d7a17be79b576db3c3d9c57cd7086307989cb0ab0568d1b4bd712653f46d9f0079f0045e2010d14562cbd95514b6000165b06274494bae01dd162cf0048bd40da4b50d792b77e7b64f82fd2e816110441f12630db2afff1fe69d12337720c7b8d622ccecaf5d9e1bd1f16c20e7ee322e52103ea22c5e59c78063227a50f22dca64bb2a1c3c425f7249da4a93071f2ca1c7ccd0dfb34e103f646a267cbdfdbdc5c8ca6e25a14589ac9d3355d9f2c6d2bbb6c79f8fc60f51f33c0821a5e33aba84de88de46ef0cd0d5cbc8c3e382c257e229fcfd441f32ea6b7df52a140484c0af96177da0eb5437c9afc758aa6b14ea2b029b81d70b088b7d99390fd9b98839c5357f69e056c3c83ce60e8fc74d8c951a17c3f6d2acfa79047d310ec2daee38d0823f647f19b69b1905c6f115f493055a6b12768f52fa95bfcceb0ca32b58e9a525215876d5e2a96e8df06f2417da9517418aa0d4cb80ec2cf7501046bfea5a1bfca54f18961afca881aa3f7aa09378f80a0f2eb1928957838bdd035f8e2f761470cb2099a8d7c2dd10a2dc118cb9550bb4884672ae2c9c6fb3c011dc0ebad1a386c64f64a2927c7d39ae0ea16067824a46ab59188167c44f45b62a88e8698a2f84b53a101070af703c6e2f5805e095ceda4b15d6b3b69484409e0e5f250f4fe4449642ae0e0e47df050fd2133f6aa110c7e40d44173fd4f9db36148a3aa3fa2fbcc6a68496d217a4bd8e1816d9376c32e6a3f37f73f99dcd808103ee6c5a04a911968d95a6c4d3a8b8427e68dfa2eeb7f7a5a4de29850e2210ab1199ca9d64994fc89b43f1f00812a6d03d5c6ed6cfe8fb1094cbcd39474b3bf82fed98db58bacdea3c3a70d3dd4903aae3167f893d90810b662a4ac3b2dcb8842b36af09a83e37b640ac326b53b4f0090b447a14f560c33d3eb389715c01269d21347d03224aa36ba001b4cd0a1f3da2e72d2fd25892e81867c7195ec84ed5b9250251db7e443a5638aa27025eb41eaba3356427f5ccffc64d47b561c7f9263612b192ed10f550e8f40c19db452c000aa14b552882c0d6a2f783434cfe372dd51793f5b152030e67783bda7cddae5fad7a7a49fcb4576b85903fece2a06e48e12838eb71d39c233d6cdf5f814b1a2193b6890bafb24164c91faad686d6fece672b13f57132bd7eebec21b5b1cd8b1abf9db6be09fe6cc860d814d93f741fdf9d056a2dc5c48147220388dbea41cc8c23cacf81415ea6695d36fde2ec10651e4b2a532e350821adaf3438b8a0df59577512c08aac88c0503629be3ae8bbf92e3b14ff240145a17c8c2c97d0187fdca2560895bfb67553c08ea4577fb8bba8f11a15798b2e073a27ba352aafe43fd8a2db3b2a13006434f1f404252067cf9aa83301f4d1892c9d3f9a08329a0abe1cb8c352a4b918157ffea59540bba69a1197bf22ab1476cebdb42558893d685daa050026390debf5bda38285683b1482c5473c1d63c56f4af4b25fd76ee357d5c6ffc2d6985d93aa0588e6831e01ed7a69b69c10ce6c9165eb83f0847d0af9a89d960bc0501dc5eda41e99d48c746551a490051b33f24b267d566507c53d1c7c36b297503907d657596d16524079ba13a695521cf946ea70f7df78f86617c356fd98bfc94bf4108fcc915aabf438ff5f810e520a84cdd15f241207d919dbf89dcdd22cf6d98a6ceb0004828bfe6014c607b5b31896e88f7dce9bc105287328fde848b7bb40220ce261639cdac56e5fb0c3549525ab15e30bcfff0b56373596c34b0bea1ee007353b233110c3a776661597520f08e392e499c957f31119b50daa6326c87d145ee7a9e5fa10acfc952704bda4953006f272fe3dd1527e3f615780ed7893448628b2395c0477768361469a88f05a1e7654de57f3b6806732fb9a65754d4ea2d10d593b15fc1cd617eea5fbe548aa003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000001f118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000001f0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000001f0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000001f0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000001f29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000001f141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000001f25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000001f12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000001f2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000001f189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000001f1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000001f05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000001f05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000001f14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000001f03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000001f2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000001f1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000001f1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000001f14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000001f2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000001f305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000001f280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000001f223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000001f17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000001f08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000001f2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000001f0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000001f0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000001f172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000001f0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000001f05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000001f137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000001f2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000001f2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000001f2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000001f18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000001f0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000001f204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000001f0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000001f1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000001f28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000001f1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000001f21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000001f0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000001f0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000001f107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000001f2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000001f09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000001f24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000001f03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000001f1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000001f205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000001f25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000001f283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000001f21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000001f094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000001f0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000001f1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000001f2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000001f1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000001f1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000001f304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000001f00000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000904c905057b346844820c3bbece6fb23e4a695eded0ed0d3801cda0a0ce69dc0c09bc4f205de276b7c471976acdd2975af1d58b3510ca78af75ccf26dff3e29dae17e75632b7eb3d64442e6a74f0ac03e7dfc064fc662daf5f003d42b0182498cf62873634c655ca8f53245f1e3e3ff8224c936706fbdfd8eeee7328aee11010a342da3cda83f54c983e9735b82a0cd0136de17f21fe382dd6397d9674029c1b5d667d88f1979ac0d8784547fef9e3ddbd61e307c54d950430395797db728438aa6edcb83e7432b63e3e765997e38512ab9df7836ceb0a292ba8529937a9c3db71dc09ed2f31d397eeccfb6c4bde20803bd6bf80a9b1840360cd30a65f6f8918413f244aaa5f1bcdce006962e912a76c179d6e535daad2dd6e543b736323d75e6747843cea28f6e95d19e6da042cd2f4972778ea6c10f0cfaeea6f14efc56ec1b0db0b76af4fbb0e85318093acfc1edeba98976d356cf161b49a0880136512621176094d2cebf036f79d0807ef89e868bc09ad29fb834c5c01edde4b43b3e5c81c90303924a69e18c2c01ad470b46c6dad6fdbb404e3badcef31bfeff54d73333add7d99b0ff85af748e5b90ff4e76c31d824ba8e516080ddaeb4f43710a9cde0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4c365f6c84657ce7ac70116a1497cd35d179525973a5155ba9987426c9a5eda617d830c4c9bb89ff944b73a725e895ee3d5295c61a669dbefd19675d1535410beeaafd3de426f48309b5246af389af8f4f9eaf6112ac810ae8e83a5b4dbaaa1e4c689743eaf353bd5d85c7b8a9c4175b9fd3a83639400bb668ced174c33c12c1ea49dacf73ca2630e4fe513351f73b8aac14d16b825ade5361437df672a4bd2a53808df5aaf967945eb7d95b163bd468129d19413c2547443554ebb7247fdda66312ff906c56512bf0dfa13ecbdb1fe8d78eacd4b60fd909c1061d82c367ef27005043d620cc3523660aa0163a34578ae3318de8583e9b448fc61d361eb04775df80505257272a761100b228bf28829173470cc9f3f69871894850aae70d0b7c1164635bfad23d86789309f6160606f892e18c49fb53d87d31fdee7d2919e24fb5860e6a88d11061ded9e5e6e45ba9439d631d378733e74a64f897c351c67336d4e7d9c831088f24ff9224e3e51011805839697b60c9ae040d83bab4055ff23830c87a651a13e78226d13b7ff01ef53c889c863e93cdcedb3a79f60becebbdb38f2752a7b7a590e22d7b4f95a140ba9984ee60f24cc21f6b3d498c5c9d3cda000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fbc2565624e63cb602e3bccbf2a53c1ad70beb44ae9a9d4024ac33a337acf12cbb07e1c48b9583e2c63ecd638defc826dcad819632dab1e3640b164d19df282d71584756424b106078d4d51c5bacb365f7beb86e7aefc9aa53a91ba782ff06f5be1863a51a75722cde128a1bcd1f4daad658aa9bcae063540d68210e362fa6f5e80e0c89e914f56b70d29eb9e2097dbf9f5bcf66dbbb8460c951fffb85f4fa8cae7ac7cad6d0d0d899681fdc496619714dde2f5a5c6fa8df0516c4e943d6b98ff03a8776cad871c73b99329bc3074cbee75567592c6951ee0e71fb32fc1ff1835a873237c731fa6c367b66efff5dbcff349851fb3f0fcab5bf868f754964a204467b7784deaacc98c56f505e683fcaf30e8e58d7dbd3f1053098c5591d9cfce332642ddf3de5b610894b25fafb01d086bad679531c9184653f3d37f4f32e4127a57a979631ce67e410cdd8e0dbe0aaf6881b3532a5d1cb187b6c6c2c5ba9ba0bb94af02ebb405ba6d71e7fefb7dba7e2d49ce60f90a2cc1563b2d903e0602ab12526168a93ce17f1526d619a7734d56a0b24b30acae3233c546ad4953aa8f2aafcfe8f6b1db1817aa280f39a5c9a9d2d5c9a7ad705f8a87a5e5643880fad8f3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083d219c3ffff533d10f6d0778b7e0ed25deeb6f64ba24f390ed60f6a1c0f922de63863e3f0ced3824422a7ccc16324f130ece98e9bd84bc95c0143cb951ad4b06f7b8778dc7c30f5519a744597a355429cd03f7eca437c8f57678cea79b5c6a7959546e845cb67ed68f62c2486eda7c69f0a20145d714674fcdb09a47f8324c447a435cecb524c2e01c3bec88a30d12ed9982215a6513075b13b8219fdbfdd02c82089bbd9ed00094472fdde5c85067286744c864f5555cdd06edd37fd599e088f4ad8ec50b02b7359ec4979c6b5eb0bf8157a2b38c1d89ff0a539f700c1e6273716df99b8c031a66b63783dd07db597c675310d432f5391abaaefa860621e92f36ba2edc1893deda2aba4ce4ad8f284595c4531c5d4c9d5985df1403ed43ea04586c2391a7d975b52d4af7bada862310c39a68ec41698ad23a82b57db0556e054564d25f1e4c4e9a04dca3a655faed62d6c7b47d8bff19afc31b73337203508fcd17c90bd682077f88007883a620f0b1c8c0d823354ef95dc143263827825f993d1dc5c17cb59db9dc62610d2807f3c5c6c4e003e096c68286e3771aa644e8e54f122fd3f9138c32cc129ba0ff0b88cff3ed6d5e1fe7358a2f0099b24ebc4da00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bf4b7729de4fd5a6b08e108361098f6fc70a96fc4d264723bdf3be03a862976cf9463274c6a8a6a926157adf646dd5b42ab11525ee4c0118afb9a5d34c1e3b52c6b2ceeabdf5aaaaea08d79f92e782fbbc797756db4eab887bdf1acf0216ed1c82257be4517f7cda2c8c34c58ae67f5c1c48cb60966cf3ed339e597eff55e952ab348219bd40a9afaf851aa8bb272c432f5ea9cd4981c6365623c9de2436040393b14b85aae59042b91299bcb121d7519d78cd8d6cb043c8e0838c3f0b4efc415e47960992c083c1fd542c58619bb4f47c5b0de72d47db86fce824fd4ca944c30e08bff2805523409715a45b2f5cf13fafc4ac7750ba1f369ca35489fd39b39ca66a6c0aa14ef0a08c85bd6b859b77de3528763393428bd9c80aa242b2f7a4ee5998dcb41352f29876a2a9b789bc9fa7ce9245a07084b3fd5720164bb0ff899e8403ad3be89fd12aef2b7273c3e1adee842e592cbc185cea1010b4fc9b325bfdec342e173d8051e2b19ba798c0e84523d5362f854e6ae249318e2804991c665614adef928edd59ff5ceeb004531a3a9c20570058698b685c758468c5088a3a4d0eea2ae8a487f7bc326f271ef90d9029353289d9ff35153f6c5301d4412dab500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002860fa9c279217bc1ac5cd497ac2177178a3c48ca6d6acad1d6b03fd08e56ffadc3d808bac1a2f9c8b8bb61f21f3a96fc031720e5b5476176d811f4ba572775a87ed175d09ec0d8d0c59033df20daaf0118c751b98a28e2962f6d4f254e269b1d3b79c732d8d031322196a44a3cde63428f05214d9376801d2d69c60b2984618c6d5fe4dcd27e28d2e49854aa4e728837ed5d566d970194bd66d1f56552216382c997aa7b0d9eb3ec880ae5c8caa40e53e2746cbe2a3405570a2b5d20e79e1e1082b2803c885d9560baec13d51556e8e957275895d72dc8da4b4d413f7f4a54f83e59351715a758ac24e1ee2d14b2182eb6478e5146979e63d6c79a9d00feaf275100a92b017b868c5bfde7ff699704162ab4769e16dd422d964a22c43975d0d4d46ec060bec69426fcb40d2b4d6c0a35594790854b942531df806a9f09c7d36d1aa5d9744d4b6e73a5f2e182269b2549320c51994f5b3370c35bdec61d2c72f27d53a484577d6b8ed7785022c07e66f0f75ff74599fa0dafb5a8682a40836f46994b065e912f8bbd29e0716a3c682890c7d1593ee69e01e2a0f52b3a15a51fd9765acd73b4875ad0c25820c5304b6e040ebf0819c614e3edd7deeb1583980bd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009277ea925870102398ed153a71cdd836ccd0b99641280f1adac157048e75117219f1485ab63e7d0da2c906f7f8bbd7926cf00fb377b54454651c18fca2ab8353d9f36394026b1bd7d89ae947a5e30b71a486eade47aa96e424c7c784f06b02cd1fc4a5cfbad192482a20c0bbf05adfb0a42e494f029e5af4ebcb11b7de9a8ae8e39f178c798450fa614f15f3c03efdfe3fffd05febeae90deb1d8ad2eaf062ffb52cc17e04cf656ec02f539605212a1b8dc5030eb008e0331084ceca6127df1ac6d223451233c01afc206d5b6485a799c595facbae0faa6a77cabee15564b455dfbb8ef17d2914040b21bfb433ecdf2f2b7539e7d5494f60f0b7be52d0ac1f442ad20ad9f3b75626234cb8c8d0e454b6cbe6d93eba0354177a671acf9d1bd79a76c6dd866ee1e4c8881bc44def8fcac50751a0f302023eedae43cf4685fccc70b439cdf72f4a06829dfe6cf191cb3a96bc6542a4ae6e54eb919eb8a834ddcb0dc4fbc38af378b01e49cb89ea50205f1f14187c0be9ccfbd23f8af9e89d934e15c9d5726638bf5f2008d8dc7c8c51e060834d829355551cef48cdbbb996e692d97b4e71f8c1dc65636cd99745df6b90a6c689824f09fbc6b94c76b8af5b1741a800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c2dcab725e4686785eb2af7a0ca58f7c31fc1c980266cdcad17720829e6b5f6b3a7c4952dc888803f8a6c77a121538e76bc49c890505717e25a14eab9c77b39804e19f85a16a68a4d61852b0c87725f30010c75e2225f81f4162bee50a6bbc6286c302483e8272ef6c60ac8b75aeff8a3198214e958916fc7207fca8297b0ead89eb6218d90d29f78d6308235b0f21a52884d371419d22d3ce154096547dc1b165f02a1e4fe6268303639d55decc1e103e117d5701215fff89fa5509d3073765319e725d1ebc0ed4d5d7933018193da8dce2f12e989c369596cc034fe9be2058d08d8a583d15dd06660d90be448f79880b8a69afa506af13c636525e9b7c7d752ceda8074a4a79f9c144fd80732c3ef85c114465f81c22698d4c3f71d3e20887ff8873fc5925e98473e164fef812b1d160e5fbceaec8e9838808b9878abd57469a0ec03b1b883fafbb0a83d599c367ff8f5fa9338affd515ba380c25c556953c7263a8e8ef7142c503af4a0cbd40cda12a921b4b5d561653e75c722d644700c2f3b223373d64e7f0ec00997e0087186a67a3e4ad76e15c7c7dca5b678d51601b2740fe39ee900eb2f8fde430acda1c5fa0db0cf52d727564e10f63bc889ecf50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9f9bc7130b75ba134ca999560952e0d1b6294b60c13cb6ffce7cd6b562a08d387d51804c558d3f16e09ba0cbed24964eea9d468ca016e67668d351b39f8a7a439fcb28339033e9c4364410516f79223461b3e325a18b7b684fd682068c0936d80f8b4e7a0c4a4510c93db216c44714c324c3679a94df53bb0e4d0a202c791210f9009d028ba4acd96000b2c6645d66232d0ab664d8b08e54d338c4c399c591fc5836569f535e35241f37497330ccdf7e76d27bbbd130dfc3abf79cbe4b2394fc1d36b8d7e68a4ecb67eaeb14ea59da22e7506fdc7b7729b1d04f86276dadbc80e957f55ccd9bb956a47ef21af48418a790755e9649266818dd5a01d5b69a7a1f9739c9d1df272d6d9344ee9b5744358cff049bc9aa44d60e977cefa6e2856f7c4387e4ea6005e778df2a9a4dbae940bf27aa0b5108d9875a84c9da93ab82aa1ed812308816358cddba8c55d4e951a2b2eacf49dce298f030c482c213602f21725011c793625bf200f93eb622fb3d7832dddb7c0aa9f6aa8546c12ccbdd5defa964888f569002efda1eec4259a733786a9238e84d80ff17ae07bedd922ad0273e472226620f5882e2ae887b6d4afcff29065c87ab0c9878df361e5169b81c35600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ce99349daf791ea30f8048a8e66d769d15528071a553fc20d6ebb37173793ef18dd3e711725735f595f3afc252c8aaf9844c2f58fc768c582676cd01f820e1f58fc2208dd7a28b4b053a2743729864692baf8083f3cd3ba0dc7b1a67d3181bed66638bb46d41971ebba27d24cacb2c5e72ba5c1398529d242a466ef5b38fd4b0417cc28ae2d2ebff7bc3b133acfe0991ffdd76b41902715ca54fc256579fb80918baefe23edf801c389e50f4d5670556090293937a224902246fd3eb60b49933eefb20abb6515603b93cd9a4b73b2b2729d342badaee56b98162d17cc8b83586bc060c85958d93bcf059d516aaa042ec456e0e56308b2cfe64b920009a2642fc7a96d9b374059be33aa0e26fae30d0cabc0bad7bb5f7c3ce8a3daca0309774a010858da293c944d8e9ef322b587ebcc80b48784267a4b7139e18f623c8cff3a4b4a78cd54be1333b5e362ed7b5a87f90d9747efe4e5d72358ede9fc3d882b30ea2809b5f77cfaaf192f2ba66d26300ec67b74e94479ca6776f3c2c32a6ccd47f6fdddb46296faf585bdc15d248067a2e5e014343af07b7278cb1567ac565327dc764ba13f322e026160fa708a0842cf37109509e18ca5b7c9b633de44ed7857000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095aaec90ba2f3098020905ed08da0f2180e18ed457c9739e6f2838e2fc8687a11fe83959a8869c1057b262f2f4bf2090ec0ca0aff625fbcf6c75e2f136b0847200cff3cc0b21df72d10bedeae801c964b642fcc846b286557c62a6b3c80c61db7ce2523d1b7ca67a52b7e6cc9c2dc39b1e8994a6f286d24785617c4867ae59b298d4dd34124f810ec054859b1bcf7b5e4a0a589f3fe97ed81825d805acc89f98927b06d4d48ab116c7b5e835fb266c2c8f9621a6d0f3ffd697fa2ceae609f2ba6231b2fd457837fe11c760597204184eee9e2c9de1c0686b7f0a92917d1f56005018fdfdd772f17e18a7320fdf5e8bd40ca803476ec6fb14412f69cc48bcaa5023b90493910315156454a4c846682ad640d5881173e6378fa84795c78ebcc5b51cb4f13c7198b9b3815ed09fecd7cea3fb7c28ab276177254fc6ed42d59e59d350f1426e3ac677a751cd907482d7e951454a863834c2e58a572db325be37e78863d392b8bfb66a63f99226a2224a9f8380258b3a953d1af98cf6022f4d01a1150f478d73eddc21fbd137a06b292cfcaba498d7f5410a98c59df2b92bdd592ae01bbbe46a3f4830d1a6804dd18a8eb728780bd43606d39280af24d4c581586614000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024b91aff4aff6d6b8e1540f6bcd7e317e42bb79ae3f30eea0da57c05e2841b813ae042e3d30c31f4cf90a52a9a790a260ffa75d701976a78126b34e03eaf9cec9213e69902ca52d9d97c88975866f3c58984d173a3fcc34c6f91372933cb84df48c4d85a79d0768b58de50c527245dc9c408ad68592e43977e9d9c16f8a6c63e5416ddb065c414be6d95e4ed21c9158195484eb8024c803e4ea2ce2f910da70d7ed278504cb1bddb804e902a5bbea941846e5403ac50424d2dd2790324c22032c8a0be0abe2cb9d6ee2b7e5d7b5540c6f1f0efc2c7f9642aba4af9c11ea9f5c3345a950c46a316d7bba389677c9819d4d8b17d7cb2f52a47149191b52369619e242a955a443d1aa98f8aedaa4b18cd73487f5b88523f5dfe9ee8be6d943e8dab947caa2433cc7056e78d9817802a065f2361faca7697b23388de9462102e96e487d618709b0d06b9be0f287c7642d7b94315510a3b00a5d0e3813d0e6dec008c6a3174ecdc8b789cb1eebfd4fec02defaf3ec5c61987c6927e403f662f070117b92b843afc0c16c35f9f363590b33f897c732f3561106f017a1ea5611a0b9be605e34f09c5a936c62f340b70bc1809703422f512d45e5b3e2045562ba690a7a60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad7447e77dc994451cba80b36db2e120b7748c318384fe6c7e4a58fe580e3d063ac59811fc72cee5455755c6d08513f9abc9ed3e765e68fa6c0d64d216fd9ec63ad233c19a61a8b533941aeb7475026e56e66b470f1ded8753c8c6692758e048d11649fb19ef9073d3bef9bab6b3d9a316371dfc3c6fbadbc53b265440669b7b0f13aaf259ba69725a0892f415f3efa0d3155a4bc901cf89599b6130176ac86d53824e0717dcd499f778b9f9fd52a43bd24103a0b8c507f92f1447e687a1608127b402cdcad8e5d491fc15c4f177d88b06392b4b65edcbb95861c39a9c318d4f580ff406982380e629d924c4c7051be0984f731613c42212f760d0881c93dcb455c51f07771429a68ce138566d42ea3f905ccb49b571ab394a92de8dac24e9f95ddefe3a970d3b734a56383569851c06eab4e1ec6e85ff9149a93eae42a3364dbe12dcd23e1d783eb4d129528997d1a4bc6d71079f98a66843bc8c6489ea888434f394b96f4717e66699bbcfdf2fcc75b7fa1b6caa0bc172984df1ed52ed721b8e808cf6e6a04e1b0c1cdddba998f07ee96ba63f9306b6c616ae99b882c231d74acb8ca4700af67cbe1274fd7dd34b18ddf3e802276599280fd5216323a65bdf00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002760318114bfe69ff7526b70fc9c8df373445e2f99bd9afa7115986e1953f2a77cba26b3b4f56c463ac1cbffb95160b1d6692f61a2fb78480e435b82b22556796fab88e712738d9d52c1952aed3cafec44a0fd4288de128c9bbb3262c99b8f714e0a8424b88fed081908e0bac361dc94d55df4773d38a6dd08820b3d8aa2668ac05eef2c7936ad368c110a091e483ce14abb23f356003690bdb577e997705fb4dc90a062f3890e14acc02e345cd5b7a824226ce40bb19a8ad6a9910b6e555d2e77b054767c3d852221561b66fe8946e2b8ac92e0a0685a41b8eed3fdca53b4ed80bbd6d046fd3c1b292b1ec64749fb0cca23f408f98c83990e30e17ac378be9900e6a0f21ea7d6ea7a924fe08aa1fab038d39566327ef6eea45acb5d84b68ab7895d9e6e527c2cf961a2f9361d71b17daec608861b55f8172354cfb2eb0775b88983b652642abe9369b27bb10b1d9188fbbe9efb50674669a9db829c67bb51c60a31ee29a6183179a00718db90b3beded567b1b0602cab1df1452dac69671e7721282eff287bda6a28ef485c32820e18172e0df2f89a011bc3711e9b09029e305d22c85de1c2db8c980e56a937b8a3dff286542f0c3c3f16ad6b74fd73e0d79e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4cad9a06663bf749c9469e8671903da55dffaceaf710b07f5c853f56d62c4814aa904045fe5ae5678d078c1c77e92bcbe962aa68aa8e016b93ec1f8e5c194c286701340261e37ebb424aea375c4df9db16bf8e4a4c00f160e286279aaa20a969cd68f32936b7d6c2805498db668b76c75fa3e636ce2b5735801f7347ce187f7e562170958205460077d21eb037af409f23749c656193a216023d346e8a2c296fe0d3843674dc0fdb564af198a9ab5acdb4ec72d66b8f4c70d350e4f0534da74ef26172df6eabda25d56e2112022ad82ad141a7aedaa2efcbd745865f0cde058796b8d8d9f88304d96cfbd808eba7b6550a8c8186e2e66f76f54be4c96d16f6a0ebc6a8e2fc389c3de64a805668b48b383995ffb2c9fdc9e8d038a3425b6abc77e72743fe62db6df095cbea74eccce11012ec83c63ae2bbf9fb4d0fe3d7988c3dad85be1edebc1e08a8d30dcd9eb5b86323be6c39c284796051653ec67cbef3637cdab4e08a5ca390ba00183736f386889edd3492a590d8437e93ea11e04d1a901eb19e8a0830184382a743821c221b7f18e03327bea8d7ad15c8f0d0c32f9d18bf70b453632d3b5878ff5ff3e0c3186d7446156901f78e8c6b2df15bccab3100000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000824bbe05a6ab6606ecbe9f00997ec9b2e4293facab5912db3f0e8a83e18b484c1e810ab19c46a8d97fd0da162be873f2d04442bce4a2de0c16fc4104468e0e04609158b1e282543c3aeb5411b227b72d5809068aa8950033e6f08f507ab470123429a5ee4cf9eb91b4d976fb1860f00af7b46f55ec132facd5cea4775174bf15382d3b2a47bac3742cadf47e3da694ee1b6493bb9ec493c1ac4f2ba97316e52fabadfd13ad73c2974ace50435018132e8d6c8a3030956ac7c3ebb56536944ffa97f033ba2e6e376352d72dbaf9134ced19a7b01307741ced03fb35753d0ef1446ee847ee09cc3d69b90f3b377e69f7418bd2157f56179a1d9b486f4e7bd497b9a6e2c13359057485f4bd6feb6f3f0e204aa2738fff49fcb780edae4df3e112177c74cef49a5833553265133ce543a86ac1223c04b74b9f4f290fb9db4ab965703fd387670e094e234f0daccd41764ce1d4df1db8f7ee9cd580db99a3c744c293a9fd43c64954f6cbab2064f9f7da9042caba036d103520e80f9f23e80735a3bc8546989c9394d1e0c3f469c44ea686bc2c028cf878ae0a48c0831ee32fcab8610749b5fba7dec7fe4cc6a269461a0139d2f9a6f0bcf0e434909461340a9746da00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c6c34cc6405af8bce84e0861e3fc52fce2d7af778e555e47e223e0801e201b50d2bf40c320a4f285d86a718c0905a3ff079db5eeafa76a27844a824b2f6ce05b5b0aa60e0c5b9ad5e2db19d1b973fe6cf13c02b7d162f95ca69f610b104c740d263bee854d54ef79f7e72c3b37a735d17295d634ad3d67c220ac47dcf1968cc7fe3ffe63a983a818ea4b9d564de9c1da8317786d0722a62dc8c977b946c9586a85315a55fbbf76eba764dcdc69157be9c569bcf61dede387f11002da44544b16d18d3aaae6443504f51e8a76472076109351f0a1a715b0fdd7701584dfdd47fda1c02fed3ef8cb5f25403db223af2d6bdcad0fbd5e85acfc98281112fb38fd4dcf675a3ac754df3492c335739d3f34b826ccc873394ca4ca6662a2266a97f425e2c433f7c91c6c9cc7e80d9454c9090750e3e1e1a52c49d61f9c93f5cbc450fbc0191502d6971b9c6ce6a4125e9c71965e96cd06fe1b2cc68e417ba6e14531e5a0d142374d174993194a6cd5e9fb7baf72aa078fddd265240637edc4eb0527d5566438c6d3d5fe1bc3d82cc7a87e5dfaa9625792855db4efed0ad2b2ea50adad95c4181c6017547062e0321cbed0fdc68986b14ceeeeabcb3e598ae6dc141b300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002babb64e745a166fe43f493aabe860e71cc063bb52990cf991ef1ea593df9ef3f960b3d7272f15ff7d3f6f71393d4c6f7744a8d41c531b6f392680479766a9de7fae4b6f4de6d748082e85bc0535b0681cd7347d1c5f2e2f09ee7da13bc94fa840db048c6953c3daa7dd3d5c7b9e83e35a778eaa7c9585d3acd59cdbbbe4283c0083f8ea349c64a48eecfe0762ab896b96f8c35710168ee110203667322e1b56d55b3f8bd63aea24e28649fe5783ad8025293e50db072670e2a78a20a14324822f2e92325f7dd9acafd1ed923932807849c6c294630a0868c1673fc28cdf57a709e56d5a9731941ed0a404d91cc111f4d82a1558e23c84bf505ab3dd8c52823e514922bba3a553f9c5d70a7f51892a999c9f31abfcd79bb9714bebf1fec5ab1a450a80fc10d92785d3c96c6b9dc6a0883500cfbea417853bab4ca0a5ebe928c0ade6b5c6f73cd05289acc9cff71fb53faea60977e7cd8664a1487b84d9d22b9d0e372402bbbe52a001bdedced62f5607866f3e9435d1d75b9d8c240f45e46421e1d56a32aae57c9ea76a6df088ae66c34983b6f0cd37b2f94df4bd14d0a143267a87ea7cce2110487f23eb05a5ca474a10ee891067b2d6071b9956ca067359950000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860bf923019fc52942fd596cb72d02a3c205f00d0cb0cee45806dc95bf04e00fb088d2e08a7167f538e3df6c4389554386287c9cf4aafde12221fddbbdcff0a6df286c326e6b608919984516ccbecf38dd0ba4cba01e44a00cccab7b7ad6f6146deedf2b2f916880da558eed5f66ed46b82ab0678649834aa12c14b3251165ce0be0fd27776c84242358b45da019525de9e318d0f8b55a76c9799c54b8db79fc4a572b8dfa2eaf0a1c568001dbe75c75bc23432a2496a92653302b2e2b771cce12d1ab7102e7dd39ce48cc80af025efe69042773f4be2431499a5c0e9679b32377feb484ee72fa0cbb429bf7a1b1423117f2d1ceeff7fcaf44e328eaedff713e03208c40608d3ecc83b6d14df41ca407252a37dcc6fe51bfa7482e979387eb9c1ad319c832f8ccc5aa34a24f31599dfe0c6e1fc11ab174a32fcade9f792eae3b7b492528658e408bc161b3debcb6f84afde667ade5803fee251638f84b9e23feb0fb8cd28b4b1c1dca09221cabf188d4bf17e49cd71f8782a3ae6e5148efff09e53f1c4131f1906628b94199127b4a783e6a7dcedb40ec3fe63ab39f2a8a626fddb8768a346ab8d6cda3877cce41a9905a0c952f39d5e0b1afeccecfd8c8c0370000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae4db4057653e12c5ea335019962a44e0ed8a1e741d6dd1cab150bcab2c6f72c7bc360af1958694698312199ae7b35937b0b92fee9069ef8f1571cbd43289d34db6cf61060d4efca3031f1ebb91a54a4d01c610c8498e1d0cc679c28b0a10e655e5b2b6b18dfed85fd0827171f1bf66a3a3a94632a15ec6849ebb1f501fe9beb1620e2db491a00b4e006bf6e44bb80fa8978e726919747a0a67745f38353c0bcd11648044a02cc8c6edaec65c9d18f21f31bd3b25ffe11b30cc088132739243eebbee9e5c044a1dd2d7458f859cadfa42fd4a3f7e5b2969005634ffda08fde1c2943eb75b78c419f8f2f080883c5b24031de1afd2a99321c32669e33748206ad254f7969964c82e30c23e139dbbeadafb8eff4bb633c54c0667425abf87be15a47b979f187a50611fe5412362fca00d0f8eb4a224c9a8258f0528798dcf9d5543276df41c83e803e8196079e076fd0a51a1d0e1bd150267d820c5e802a9b32ffd5f7fc904a2580170575076594b70e80b40f92c0f7d902213c741d4c7a492be609831e3fabf69e51e258d7a26245a22769c3df362b67aa19917ab46f90af87ecec79b704266e6a2d3055632233cdd5fd2836ac0276f08ebade6b6c43d2bf2736000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d0ed600b52b7648777109f65b5b86ebdccbde5934a6f244f94b2b3d67f5857ced66ac23c32f8e3566184cfac99a057634c752d09e275f8934f6dbeb49073de98cdbbb78573f6edee8ac5124b504ec2e6780b0159342e008eb86e7e3fe5b2250ff514a2d40b899cb223df078e1a7fbb3bd22d9af3ec881145cb3dcff08cd48bf3f62c5006985ec3dc56ce4e4943ecf810a00ec388b6b99a27bcf783dae65a81a03a642d497d67adf0ba2fac97b50fadc02fca249cbabf6739e2471f586e01e395071df9637c7e801d7e70965afadb1c0d919d962309ac6e0522d141ebe60e7751521e868150435b56907352b0d143d29b7acaa41f78d9ff81c99cdfea528b40d06a190fc7db4e3c1bc2427b8dbd5a492f57d2eeff4823712c0d1a940c1a3e28faedf890097ac70eb9693321a81b681b4319c035e225aee9add495814fa33956e62cad6e7ae8429ca50dc8b9fa861345a3256e32e505bca8291ba6f6cf9ec4c7f6c58e5285ccebd66515b08d60e52dcab5e43c0b7b646088629be3cb48c1d947df6da04034d06d1cce9155fa10c618ea65906057a03a5e6a3782860432dd1ed504a6abedb0d840e1980409430ae149ccb0df8d26a708d55dddb07ffb56cbed3800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bdfbceaf21b711faaf72adfcabb0ba01471a15269f9c5a60c613812efdeb38e7a1b13f24e65873f786cbd5b6f83f926fee1b8db005114a0ecfce17bd9ffeec3076d429336634051c5dd24c762e3090852eec7e327ddfa4af9ce087620602d432dd81ac250bb88d03624068022c5a8bcf73273c8bc513fa3c8fff0171ec1204c18e70618c005fd8d2438277f23e81692dc6acbbe5707a5485ab2294a6d284571fa1edeef9b202322817a4d74daba625d05424bcbb13680b678428c15a11fb4693dfa7727319465238181957176efb60874f4e2283939d35f96235723c9ea96b38d1b84a179cd01dcaea0a7e813d320f9d4370b0350ae690dbc5ef6dc2dbf7bd105506c27f75acc441f65738edd5e2f7f74eb066422ab08599600804141bbb4e9b9a6debcfb7e8f09f0255c947a2609f09e1d11302e2bc7302fa41939d45374e3ef9c0ab59ded2fb4d977e9cd14175bb36a8c764331f259910f10b26f4e0eb44fe13987815dff7e66fc15cbdc064984a2fe6d9d3d03ba343e6bcaf146abf70a45b0f16356a3885b9dc49c77ce309b750165e92fdc17066364d26487d3c189736cf3c3b9aded2be1838dd37f979b16a460866b12250d579cc699d16202579334d40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000236d724c94c22f1c97031b65ce001716dcc84a68660e45d27d1feff5535cc3d8aaf96517886c5639740a0ebdcef4d779b018af310e6a0e897e35acb6e051d4828aa3c1bebfdb84d26eccc2d739820b83db4848e0f59d8fd32bf77a8ebf6c2a05d5170a33861f66d1b40ca190f596086da53c99263799fd6f2168f2e51b45b41327f8ebd67d9db19effe105d453bb3df6ceeda7ede69c0eff75c976401aeede60f6f4be04d82e00a4391a7a1bfb0cf7080e55aad5ddb906ac3252cbf8cafe769f163b304032f32b1f49310e5d70104456de07b090db515b2a9f2a5c1b5a14a9bb6c705e3dfef02d57d7ecabdf851480873a6970538cb02823c7386e9278b8bebc3e595494ff1a69d42927f4c44e7365d2b8532cde4f14bc32795a83cfdaf2a0c6f48fe7c37e7d99201bd71a55babae283950340a45300c55083f79b4ff338a774bb72cd1ec7412ba8465833118eb08cdffca90eef51f9aab58df2858812e837dd37f79aac690b49cb2c8c07c465335657aeedc05ed991934ab0d9312870bdf7b7dd3a4e9b9cc4c512dee24cc9f23fd692f0c1145b8bcd51a536b0e38770f398d09fa9f0dc21a8ec7d24e2ecb84a3f16d5d760abcaace3caac6c7fa041ed61bf49000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095301e9c0ee11654f5322d3ad63abebe2c2e98d40c7b4643a758cc16bf0bfb4cedc7c2d50c5be05e997a405db11e6cc9ef1b3b30ce8bdca7c9f8ec115f609940bb1b77d055dd31b8f1e054612e9b3685b795ead8fecae2749bf9f893b605c4c207089ebdb9e568702717f3bb5bd3073211e8f37c150dfc858f5a0ad3d664a49eecf662da10be08fdca3f417b7b5e2a9ddd73d6c30f4ea2af31f4fc74d99a49a12d7d1f94166114799734c169923be81da6e1fc456cfccb7b3f3817ab1be959dfa5357279af0821e6a256a4ff7f25c0752be084478622f45d463e26b1f1214ec9daa11309390bdadad2ce9c61adf66809c6c94471ee7a3db92771c1cc25a168dd4b181f4e9dc2198e40037835a857a8b4be4ac17b7549feb31f19d47c16fc873632a7a77479ebf7d00055cf60ad1d6219b6ff5c8ebcca2fa7a9f80a5dce5b501b1cccc59998d3214b214dde6c45149a288cf1eede7f0abc09928f335a2edc08fd98b283c7b01a33afdac9a4859a802d60f783185903e3bde0a8cb65d8c72e51e29233ab940b2323f9d92f3bd9933a5122225f0fb58d029e7fe38d4f5b2096b09bfc7b1b90bf421fcdc3abb3bd49271f43ee180b7b4235303bcaff4510a4e0c1ef0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000889486df36df2446b0114f63de6c5e4b07d1d1195acfd89137198a6508f66e26e7c2bca66caa0fcce5014df3b93dbe95f4acc6c1f4a63cbb1a4466f8fd381c4887777eaafdf70a87e5fe31debcc20f851d1caaf1a6be895320584d0b07393be0267df7205875e17c3e5905c80c5d3faa4887ac91a276ee116e8217e3fcd3968858e299762f6dbcbaf00950a677d2b3982d5e6d66122adcab43adfe2e25138cb3965ae85372cdb6dc2b9901c51edc10cb27acd6d4b98b285cf4e3385e8568ac69d176b19e8c26cf8487a4c57fee74ee615f259f9b921d008f56ab93c141643956406a4f44f799822c1981260decee57acb7eaeaadc107f18a277683294494b9f55f673be3cb942a4d37b7363149a200cf714b4d390aaf1eb6aecce13041c8f0822b61029bf3be1bda0c7cb013bb51f50aa93e624ff02d947c40ccaa42b63668aafa76d4e09639280f3ab97e84e6096aa73a5288a4fab0fd84b7a7bacaf5baa23669a73902a786f3707c272de59abd0bc878c812e394a6504ef30c5ed780ea8fbe0ee7590943604636ff3c1978bfd4238910481129664bcc26cd86b0405e0ded2cc2c73443b074d234050bb3f28e4aec33d01e98005a6029ec3eda1c3acee6847100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008241f8c4cc083d20c6903935f1dcb4fad17ec513095f6a1fe367af979ed7e46f5a1e9be205d291b9e9f257d94e5d011183939af162b55ccffb1b0840184189f2350140652931c4d40bbf975135457d4aa898bd4e1288cb3a0e5f48708c14884654991c672c2e15829bd387522487f282a55e4c0972bf9c478eaae17359a41f0cf5d67b3bdc8ccc5a2aecb587e7f688f96eef1d090f82b09ca2e3c10a85a6d6581f4ca81f92ac84f50b7b6417450bdd4020ec8cf99176adb6149b8a57f6861b9c6bff3638107d013a2ec83aa5ef95dcaa8b9dc0c429e5a9491fe41e6d0db9a0aca4d4a5df1349173796cac595015c04ba86083b259016c177d79ed01483e836b5b5553bf80664bf3ee8c0a259d4ddcccbe734a3b7eba94f1ea8e9ff0a426e39adb55e337a95aa7e6d5049bcf7e4f30d1707d2e2f84c3a3762604301fb13fef24f123ab2bdc371b225aaeca79d26dfc25dd418764dfde10c8849db2aab183d0a4cced543b6e196b42602c45a2f59658036d5aac4e06bc74af990f94fc34348ece0334ef29b06931e18b6341f0227f683f16b1d377bcc76debf1d53d026eb2a375044bedb3c6bb8f9f89a6adf59c2c8f9351b11e8472def5398d2ca56ac33b880de00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001092759b87e125d37910cdb0c67622aa51ddd1b05f540342bd6a7a7416beba9acd13de7427656fc0cab3d910e75ef9ab101a8bbc4faf159bb6143f5151a6f26b226c6b41b17c8cc291296e83d065dadbc42ca3bd7864968c95619103243cbe62c86b48ea38e5fa30f7691b73e5644f1c1ad3c58370c8b2d48be63aba00eeef0261bb1397b93698d975837cc8e5dae239a1fbbabac5bba46a712091b9d78d6dda14393b85577bea69dc4ae22e09cf6906b34e99cae6f4ddfb174062ec6caef549a4760dea7561f4bd2ad4d228564ba3f896107143e908e85bebe866666676409a918a21323856f4b9ba8d35a1a80763985d6cfd3d70d7a99fcfc81086fe4e4fc30e3f624ca691816e7816ad1fd5c303d538bf194f7750c1849c6a6e98d89703f17cd9a65be542b4ea36988c7f55ac60efd2a5f5245abf74a339ec4666e5f570ae8d7e8d02c9392cd14863b7be39a71443a9c8dac85dc835288f6fb35165bfbf0c365e1000f0132b0ed2406e37e8b4a1280f2a7cc6793d1d649dd38d542d3dfd65ecb2dece856a4911ed42561c9027a4fbe38a27c9e4c1b289e9bb2eb622b94aba3e0a0fc88dac91d8df719794f61d6fa48c9f2699740c05c64b3e3e2be78f691d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ac76152a6a7ad8c41f6172294053bb24cfd634c35ad1edabf3ce063e0546513200253dd8c2c2f4a4aacdb72bab360d9b352cfda02f680a2861550929be8421ed3c3cad10a1af4fd20447659e4eede857f64dab17f12e0d04e754559c16ae35f5956492aafedd2d5f045a0851df7772efcd4ac173bdf7e3f5a3609a8dfbe4235407fd7a8efb59483e1900946c00b13dbd74cfb9b1ecfef724da4a02f5c9a63845cb8951bd90a29bf354fd832e2f88e07f840f222665481dd3d1eb771245a5211c8b7cb60a106b50f90c332e121d7cfd0164e16e689837291f7a827b774a81eeebd27d72bd860eb063664d1c3cd90a89aa8b59b10e028e722d94a1db23a9a4c3b24917a999844bc2d3442aa0b3a8d866683463c11d17f09a7272e98d46c40fc93e70e33c0d1c9f8e6f7fab754920b2f93658fbbca08af8a7a386d2da36db076a736efb7c48330bfe368e0cb418951d179ab9d20f7ad9d2bcdbc0b101d53443071829b8abfb2aeb7762ea07d0483a86d5ae762fbf9d4351bc551bd9dae56a71f545692b01cc08fa812ad0129430b0964d3a8b3bfef57856d22809a54144af3d6149c80f59960a1c44d0d86f86153f0020e490198f905748a14979b1457c1640ae60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000959c4caed9f4a845926d7a923a27a71db88b6d4ff2d21e49987b49515a414169899815a97d370256192169e9cf17a94199d8e0658f76cb39ce1a800bb3fe86bab24b9eb2bb0f3a01e7c132ca4b0c107ba429f2dfb3d4f47c1958ec3041ff351867d9ad371b036079783582538152814a0ff03b06868152eb42a2b5044feab354286435800cb69aa63c5393acf893adcc61897085361cb02a813bbb1d12252c2c8c79595f129fa1c823c68c1c5339a2df6ca8c903395c7a7a4797424fa2f72017239a5fb0e9d5ddff96126beffa225ae04f5bdce70b745ecb2ca1ec47efe9025c32c228c0c7cbd7fd454a73ba79b96457530e412bce73d44b9b57766780774d896f145ca297c5b4bc079eff9f1ff353e824bb14e19140f87cc4e0c94d100a93a5d1f1f74b9adc83034f5b8c38c5753a7a61a80824806ed471014445c15d38e2a4a10f848aa597bfbc29f85f7c9e02dc25f47bbbb8f4340fc543e78406c8854e6aa115e8f4ce506ee3200795c9f5811e7e02dcda525f58afd6af79695abe722c4a9151d657067623632ff77aba8e9f99869c25c010d7215803f62866ec690252806e6349e53a9f051b43f627c61c2d205e2e18a19b7d6ce9f11e01a8c90b8ee8e30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000819fd8f9cc36bdf3c7e961b2c2fa31fee5aea8edb7b9a71a743c6e6a132ab7bbbe18c98d1a6c1b618f43c64e3f109a657d5429eba307bd8d55739b73ad18e3d3e503261b5939ae436f3d22dda6cbb28ef0049d1d691c7cbf6a9b8f3bf749d342082aa3994af681a98b238ac16c3447e5660e8cd7876e7350a3232639ef8fea4b8dee6ce6cadcb1a6f077636d647ef07207b959595165a4c1bdea2f19f8f4327e5e2d1a25cd4a7f9f98ae957bdb703595aeeb7207eb9d315179455e4b2bbd0b91eeffbec7271c358e3721deca3d82db9de7f3bd7b4d1c1bbdae0fb2720cea69e8dd586515fb7f13e3594b7fafa11355d68c0b988e943b3d8a2b6602abf890dbce3d6e9985122bb79426fc3ec1e64a1e1f071e37a3a6d4f715198ee7b1ed6a5a1169b2ad51ef13147b09858f72425244596ad12d5876990bfd402fae842cbac043a4dfd1c5078da66738479160096bd2794c0cc1c7e0392ec058242b4436be47d012204987367caf0c2fe9977a1c0c1bba7dcd10c14610591ba434d0062155775120d9e6a2d1a1597d64e42266650ed60b5599d5c6be5a708cdff83ea77111f20092cf2aef4c42e86cda12368334a8ee89fe29d351c0835d3a15c2eb3425f10d4e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040ef8c2efe81d9782da40577f95cec6b40b9322fabb2e15818b198d8c0602d20d73d0d7d6124a1853045ff0d596a154a1f7f622f206ee4551d0285af16233e50df73c522da47e742a86bfc4083c14eed921ed2e6afddbd85529d043db1c5c843733792bb0cf2912cec31e60377d96631e6f79540b5c88da00a322e98f2ad2134cd0315983407c3f6b411a3f8d54d4a8ee539e2c9877d191bef5f0783ed45af3cb1deaa809440749421fa67e84ce81f0d1838d442bb5066a74ca8262b03a7ee90b0aafe0c0fe1606affe4ffd4538a4a134e3f6b7d993c3c6e2ff9eebf3e4b6cf834cc388623774a7add318f3e56350c01cc77468dfe933167d10f1cf71b20988783fe66a1db284797a934fc8bf891fdc8936a8cf2313b8c46bf08192196b4dd0dd04cf421bf258053c92bf4d8bda9395ce6b6dfcad564182a738acbaa6b30e5b7a43d385d9b90cfee7e74d377a32e58c8797f3a9f380bc4b5e695324e21f9618537ff21b44b07fb4e4ae83cc9eed0baa38f55f11e53bc35814417ee24d13f2b5ebf5ba319c7e4acdea5b1df67a5bf359e630ac4aaf752d4f090d6294f53e742cc874081778cb6a40cf54934ae3768ae533c06b09f9acd78d64532bceab9eac52000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019977a83ae63e482f1ec39c1c713903a0694d5eb14f443a7f1b2760f638f3d61f040f67935d24f0b91a3c1ce7abd33991d64fc18b5ba989ad3b87cd81df98b86ff22f5f181401e3b8c47c8eb047ef8b3b7a580d86e7b3f6811883f4074c37971289bbcccece807d8ecdba95147871615860e1562086b2e80caf2490cdd2b23211eb9e70821d0916b7a51b028aae4de6ffd302ca0b5235914d9bcd04d4e078d1971edd4c533981cdd396e4c89d0d26b652ad07b2cc0c80355a8e63bbfa11989d88cd3d97d68d22794233b4c2e40f9e6bd9c72919df3224572084a84227c55a1955a51ded6dbd53b3e63b876b693ab41e8777891a2b84444c0bbea0f05d726cba2a96d336fd8ef76e8a0ec968bcaa8ac1e0406f5125c77b28dfe0740caa4ef2d80d83bb05e2463fd5897b7026de23f9906007680466aab667b4164721f7fa536dca04ff97d405ab8fccd1639537f75fb9623613967b767545159c80d3fd62d3b2692523c8b005937fafc97513ac869282cc7acc0f870115f39a2c2b5026c1c397aeebd19a470cccce7aba784bcaffd2ec36ea60693472ce8f8443a0ed8c4041e832aa62b5e23579ba0c91f8f4333f08b78256fcb83af35c79bf26773de1cba2a28000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024e76d1e875af336d91de22c81d088bdc6144b6fdcbaa822494404b2d728faa52a44b731d5f381a3ec5d370d5fe075e3564a4f523fdd4a95c40a00a1e8363385b9da2f6afc79c3c3c0daa0b787899d0d60b9e7601e78bc3894d2a1fa4550eaf0e90a68c3ef727f76ccea7f5471d20947fb6e05e5757a1c1b03cc9b6d953005764c87555e5160d3dcb4a83d1c913243674348dfacc0489b9944e7cd43352a3bf9b5bf435bc93c72c48901a3267cc11d61a4237fd23e1740eb9ad54f735793615a8da968769cf5ce799ecbe15c51af09e46fd5ccd9b4aa80c95c99cd6747fd6137e6a98616d7b3d14fa9b5536071b0fd404ac7587fbc860c9d59dfebbb4ed4ba737be6a817f6673cc5b35ae9509d504eaf986987b570831ce4105e0951e21821f8f4ab3399229ecf5f7dded88127400ad1eb11cf5dacbbec623a95fb61b2e580d371af9eecc9c5dc0c53cd2815b319a5e47011d72f1f5cc6434c74c5179951c1a317b80a10b5fccfa2c9009ce4018866f56ce6f99bf11ca81188d106a368ddc97901413a208acce6568e9dab8fe831af9ec480ea3da0b29dc06682b840ca90e46c94d8b332f2b0e1c6473e8d243e20c04f7f146f02af986145c04110465d1c3e71000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098b4f81bca9e51beda6472fa7481effc792b5fb2ca976117d33ed123056a935b89c5422f4d6693aae0e478ea6722e80cf0deec391184b9c8719d2e8c3af3a0b30fdb80d8850c74fcf8a1ab4eae133f5d45f39a752a9b1578e5a28a6a2de047a95dc055bfe5a99cd093d530f1202a2b1a48532d3214ecd85cab28f9a6528ac7f7a8732973b25ade413f16da7c566071c077e88222fc744df7051fbe7013eacefdd41faf84c429db60209a84ce1f2a6b3de0c93dc509b3e3c4b8a1c2db2945c2005d5bf367cb5accb4a3cb1cfbbad3d9a3d613c2631380764043b69c47cf4481851259f4bc902b5dfc9a4c550f0fc79ddb88331debb404fe424a83f5dcb392caba1cd5c68d1f1fc841667cb4c54e61a90030f502a4b8aae47a8c4de2ea799b5504e281365c3c47325cbdba3320fb882c398fa12b52c88847e1e56c3a01194b77368d2d3913cb29cde8d6c637f0e3d28d6d76a2011e9b5e4ffc2eaa725d20a30dcc4f8040fb63d4a1b04a97abbb93d95db504457bc4c4d2f078a42f581d636037b93b1a24d708d788f4ac7bd1cecd531cc16fc0695cb6aa48ef3e35531f5efc0d3ac10e808114cb8c758607bec7dc41884ab478fa833b9d3d91fa6dfc5714fa06050000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af091153544248727912dc40cda581b6a84b22d6f6802ab83518a396eb99be31262cc32c78a10f994ac4b4f39295710a0441e25ac5cd037394fc028f3a14161456e40d58b03152fe0f9cf8df94636f099bd129e39afcbf29a091c6f0cc337da2c7bb088ee8bfbb739a5ffc05f7358ee7e0f5b4ab446ed199cdb1611cc052a44dc3dce115b429b99450652de77c52e150cfa14c9dd0cbe6fe7eeda822a440af4cf903e1c24b4f983f16484c46f2cd09d1b8217c4697db7400a4ff5409095bb18735e8a1ccccb4d0eebf5f871b62d80d2daf15c3c855d5fd1166ba98d3f441e7ca5566ef32e88df18dfe24c145a9f505f03e528b896a50a89aa511617df0f42e73307c6fa16b58858b375a710a5fa502aa65fa848f1c9585b8166008ffcc2949058a9ca80cc92f181bde49680df10721bc9b382de9bb6535314f031c2c1ca0025e90dded8c30ea2c74283631cdd1f16608ab7eb7f666914476257ddc49bd82cfecf061f117450025cbb6cc7ad1521a49118112c0a982615520239d5e55e05aa322da0fe6c28eb42f636cd7c2ca0093074862d24700c93849020bfb3ac2e8706246ce7a7347fb2a59971dfe97af802ec9b7c8829bac23f5f7a9d8769edcad9a8dcd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e5879022a9a9345f5550bf65d7c872046c63cb32b3319dbeab23680040a69d5222f206fe4f4664ec34e372b48a0d435ca2d39eeaf6d704c5e9552a5562f5a807e53e79621a48bada74a610a2fe045acab1cf9d11a926b4fe6204c801cab7251d4f32b8cfc1f41f253c5baa0be7004f2a251376302e0ee9ae9d8df35717528cf6feccbddda4dc453e8819fb9ba9c45e2c26e2800fceaaac97c29e3244e7d2acd803e7985cad94667fb99a6f60f4758262d255b82e578ebb81243ed027f7c5cfee95adcc1fb31cb8869adcfb9875166746dceabfac34e210510220ce900c9e5bfa4ae37c4a25a26647d0b548c8178d1b1ba4ba215b6ffd7170b586261190488c308a41ba0b3a3bf419639d0b007ef346314bf79199d0badc9047ed39dc859781fd8bee5a0ae79bc2b725b78f89dcb4c1ea3b91f7398c3f0582f5a4b327247a05078453c890fd11796e4c13e70546c76ffb656f64fbc62a4e6b3eb1efd9d2eb718b7cbec8a94cdf567fd5ee3a74ea961bc081185aa071db622f0b013b29416ff8a9b29655efcd1332d243f0dc546710d6a9d3cc2950e851d0a3016d20f91bee4adf94465e96fb828f65b8cbbcee2f01ae4b340e918f641cdbe8834fc5f3bc65af400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002033d1b5a10bd84b843baa071ac6b288ef2081c112f3690c397063e663786fcb4180e783ec137a0ce2b3c6a4f251d7fb65530a79239a4108b8261c2eb4c59110c50f09b9f9efef0e1bb49ede6b898b09eef99182141ffe41837545f7d0a214d08570aee7fc208245c7c49bb8fff4bd3f4ed735e39265b62e9440e5b02af2d09c3f3579a86381ffee905138a777486f7c30bb637ec329c1ff51dd47da6988cfd7b69e56c9fd02041df719bed410e4c81b0f1301315f3967de9ced5dfdbb01120aa018a55d46a24d31cf75b59b2e25d45693ca80ba7aa45e325ca32f4db508f6fbdcc0e7ebf2f1f21d302115a8355f86b25ed0150923c3d2740f5f0d08238b6cba714b57d69d7a4164136148654a284d58bf9e8f568db794ff727b6df1a77fb989a6256e04c76f0d9ec4d33a24bf95baafe8b2ae4c94d4b6040a35e2d4553b9ecf809988473b81ea45c7f62d9125d5682fb643b06e9056eb3d6d234d87eefb8f503ebfeab82d9864aaeb6285ac48b0e19ff1e6826491245e3e9285f0c8260b2b70a391f0898e35994b92fec74a136005a2d79e3841c59320e8daf3b6655483b5103ac8bde05fdc17de77fcf3018f84de74bf4cc070fe0957b532d0a620344d99630000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000212fd88a618be04bdc9984ce8008ce5c16ad8738fc3ff1d474a90e0f4c2841bea63653e252c22c3534ee0cd452b6df8fa1a3c1e4c7acecd904a6204171b0f01d1142a698cd341e3e82ee7c12decbec805609684b27ac41da8914bd4ffbe63a68d2f3f45e80cb738f34245a1b714d3c8ae951e5c98441a21a41b75e5958c0f599fd5a06d9da3c563060b0e221601da1251cef10db59335f494ded813dde522246cdbb78c333f1ea3e792c5df57f5016543e8157f03cdd11d85fc0d0c93f6d541db334efca2e4398a0a972938c3226d20e5e431ca82ea605da7ef119a2e526938e997de5a5c891e531a36c3d5b3cd3e4445929b93f655f7bfcab13faaa892d5127886e52d9a2c918d49ea71d382b5c581cb359b4bf402f3a24500e6d06b2f28e92b1ab4273c53fe32c6d3e4fe1f1de1392c426c33e450d31a7f06fc2330e8d524b90b10a5f266c25b58a7b4fc82254a1ae6a3c88b99a1ef909155d71ed7b50ee72f78f9bf9a21c214f7613cbbebea17c4a0d3a76e6dee28a991f878a0a4e5c50c9f587aa98a5413c0891d617039e5fda0e5c2a87352fd05530838f52572ce765597c1d8d2f056bf647a68222ca707aac1dc797d1ef63851a0974d9dd3f715e800d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b1e85d1d721ca973f19506abca94fa63c1399acb5a99b5b1d5f312b63935b834ce3d50b069ca4eece0a56e3ccda0388d50c4a5fdf67d104dbc5475b35604f8d34ad41a5c70b8f9aab7213b462d5be6d58f5ef71c8972ea9da6645ba67b39b4e96eb3f6460da10210775f687162256c2959d95f3aa3f58cc0622208af9aab542d5f4fb90694940be70e6242c487e211abb774b4e5f87a41d707eb08d3c7106c7892bafab37b60c2a7ed326987e9cbbb10aec648ef95a51f7a2a9143f6d191eb8753d2ccf5dea84e4c756935082d45c88308dc35309ed4c9e7ba14aeb099f41ce083bd84809f8a59492957fe5474b8570523b97e064378a75d0fe859a8a54aaad91331b2cd1ad15b3fadbf2b77db1ddab144b34da2973e1b97c0fdacac6398c94f0b40b9db3994f0a358ae386fd32f9c517d4e84b6d2dc860756a17d4e846a76c9bf8e264cdce4d3e605d67ee420e7162d5f8704378dab2b3a257048e6c329fcbc129a7afd35a0b1caeb04aa0fbcfd6aa928e1a8ebabedf0fc7cce00ef230b0e2ecfc3aebc06973acfcce76f9b769573d7da09d768f383528e75c5e28f9147e6a19d1b17bcbec3e3babb8f0b5d5610aa6db443661a32fcaeec96657f5c3c7cf730000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a40b0a7db20c6ce983f8f29efbe930015f209fc5f50154ce7c2771f3a4ffc527183b1574b89d007e7736965117c60af10403d62a367db63252561c044509a9cb8babfd3574124941ca0b730bfed2d1227386b10010636d8e8f6516c5535d71c774093b9c49586e83b3d101c103e9031c47cffcdef613d0c345ef8cbe9e6b0d204d69d6711d5f06fff0321866bea85b57abb4cf80e2c2c0fdba8aa1e07cc547ff648d0e24c2ff8622cca34040d703b319aae92141e963b63335807d983bf3a359ea40d6be30040593e82834aa4bee43d40d632cc259d0e59b959ee3e672429307845c84dcc21e34678ecb6491fb72d89ce92aa55066170585f8489873da1df0fc3441611c7d2f918313ff0209ed370a6728c65679b37180b578e5fb5a5312bca4c324a0f4222e7c8713ffd59283b9c196b6e55601ac7f6ec59e12c2f5d4d8d9a23123deff7115ca050db675d1cd4b1d3baffe3368feb95e08470d074ada2759be5dd27bfdb858461a20b021f94eef6b8f653b9233dec8a5c4f16b9330a71d394204b40e0e2578a78559d997c7c680b69be1400ecf396bd7f20dfc550a64c54a8a411a9d512edd9084ee4349e4ac55f8f687a3909da3ab20035050cfd5810b67ea00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ec4d60f48b835cd9e8a97ad0fb6509da1f13bb6bac1020b2f243a16944e969f8ba8737bfdc21405732cfde92e07b3a78236c9a5f9a262c92bb80fe3dc1bfff851cf0c617f526ea632e3235798b659fb0a58f114fe06075f9d60284b065db3dbf93cb6c2e10dde8e443baebe153cbd404a72a3d559c83c8756f51e8eab43265469b059d21164e3d680be1c02d972e3306f29dd32be6f86959af90f0cfac2dbc42013490ac156079f09204dcffda754d2bab396e3550847d960c9b43aa6eaa741627196d26003f4ce50e063db999afd111711b504df10b4b288b47d30e65dca9733293cae6f475e4bedd83e4da63c92e8b19474f3f478a649f2a7d91b7e2505d229c02efa93c09250e5a159be18dbac0edc668185f0f859bbe60ca41a5d964181ddbe58ca2c4340d23401033a566a1ba5a0703d4635d435f314d37073394408ece44cfa0ebdbc022318d25b7f827482ab276805c42ca3fc93d218d38fded65f3f856867ecbbc3c89c679fbe1c7cd01b48e75dd4cddc084bb305da4f519b55cbcc45c56ec316971e660b649d7380042d785e7d1f528eaf3c5c4b2b31a403284686aa920d1336704bb3f8fd9cc6140836c084ead732e2b200995c5a96f77a28b5e800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d91888d54569f84a72352a76660483dd2cab92987c34c7485a3d8e92d89421185e31a4a62501a2b901e34434f00f7b300a9347ee5f1a916ac35d3bf52971b099ab1c923552dedf3b865bfae252ee297a33d29c150ff45120851daa10282d3aca63b827eca62437724dffa2186273539da7e2fe88761dff36d2007be1724c220eee620722a2a25d2a04c1b12ba3a12f0a655314c34d5039cd03c3303be6ddcc14f7c28a6c1c72913a4525a7ffb297c879fe6bfea27a28b5221c77fe4bf91f9925c32c730be3bc237baf02ece599d95f932c687be7e68d5b77586497adcb9daceb185f8d0c0481bfa35b0dd18d45c156dbe2e90a727a6ad7931829788feab416e3728a19b4e4fc1a2f1e63408628a0c51e39a827b0f39564dbe3c3a48fe752b2bb9ca3a13216445602b06c61325af416a169bb603f5c0f7a8fe6724d83c5d1c6fe1a76b82af15f8ec77f70524ca6106f5ee4caf0f202223f02c3216d8a94f44fcf5ae8ee0f9a1bbd8639a734b4fecfdc64c4b1adc46059b4367c8148231ca72a6bde8187c0e95f7daa8a5fd6ee6e1961711e395c5d1b0c4ff65694c4a0a37806750b0a8cff437e29045158ba09cb337390170422820379e192c2139fa52bab0a400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cb56a43a220ada1df5ba81a736a0ec49f78aaa6fbe8f6ae870f950015b139c189ab303e6242321d700c05545c26ea730e9ea44f425e2a811e114039d6b3c2a94bef0da5fea6fc00162f50640e8631cd835634a065a0a9bf1a24d6305a15cc7c9fda8bd3c4677133fe11bcffd3c4c49e764c004ab9be8e4ca7ec402cc54b7612aeb0ccd1d2271adb8675d69d212a8d7456e3222a7c52c2fec8fc8d5271c059f60694e7c82dee8c9f05e9e96114ee0795d452ecb072e185b4d4302031b92d3c82a2031ff10aa90c1e1086ec4a41b7d266cf64fdb68d7bbc737818ade13ee491d67d6813b73f5c72fc66e40be61f35d8d8b09b0adc531567258fd13ff364773f275fe11a7208fbd8ada28bfa2395893b4402785cccbe0a946f2c73d75f02b0f9995cfd9aafabdd5a45b2423d76ce082435bef658d264f85f19d901071431cef59f09a8c4ae86b9eb530afbdb148e54b8e3aebc5a70d605a0a92aa99fef12acc2c904ace67c7b87ea35f732718385339b2eafeef4ca749f0c12366dcd50e98145220040b5261f4cf0a3b13dfbcd49731f0559fdc21846610bb0ea1ce9cb8d7c4bb036f8d375568d6a4b11eb795a69b73d641958b4a29407fe2e90ec2dac7dafa8f70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000801dee87df4f0617bad46f8755c625b6611dfd3fa42926009d62dd570ab9f3955e9909cd2c701d0c08df5357b0fcdc989686c74106c6fc728e68b0d3a733741aa99743f72a4a45d6540de04b905019bd5de3e2ab8e88b2b1c5195cd9f06ecea950e27461fd599ba3a49f471499b16778e8c33b67b63efead2a26f91be4ed8a978d54961f7acaa927baebc1deb3dbc4e7286a92a7ba780707f9f350b0450898341bd17f32dadf1c989871c746f53d33a50a91ebf07fe838c6689bd7dc7bd4b00e247237ea0e883b5fce13befae93aea236d84fa4fdcf2d3991902997bbe1ce7523aaeb61346de583ed197037eaf273347e80c5d02931382772a844cca17adf960542e59f1705a915017b84dbf1b8d56a0d94060187f8feaf7d0a62c07693038af18fca9261b76a3d4e3ac2e7a5de9f8bdabc60a0699e14e21b874114bc065a0b917e432df1e099e4298a1a5a15201982eb6d1f4a8f8caf3dc64343fc7ff90fbbe117c827bc9bb1cc2514fba4279ecef343489ef2d9f1882fbf2ba6de82814f52c4c36a7380949bff39a39413285caa766690021299a4824177cb1e9fe66f0b4a40269a25cfb9a4315d16ad32dafdcedb7b0e79918eabd6ceb60f3a92107be9df700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ba0b3572f02127c65f7d400bcc00e3dd1c6fa8fb2a328587a71ae2a9f9a2d8cc8842faaa67fe0df1e5ee5d77cd5e26fbb7613ca3141acf5e658bc8b9694fc5a8ddff4b0a232526c2ecbf1650353f5fd81674f5c4265f68c1d2b38733f4faaa7b9b1d441e965be061c638f212c34bfed7514059d76574387332d2e4b84b32eefde6ff673e544467de102d6822ae6e85a7358b2d06054411ed34fbaf0cec209f8fe0b0771165c928aaa8980f928a3714d0a47cabbe4aae449625cf36f17a2e4dae6e14ab0a79a220d1b0d40eb2295971457f79e1ffb98e590965c48342fc7d5e567faaebcd422ba92e96fec9400db12f8a495cc48db6267c410b334b711a47c372ed350e09f763127e038aca16165ad27c2133c72225384e483602472000954c207076ad1f73bfb220bd107e683de5e8a58e1d88f21a42d49f3950e101b4b6914dccd0a9fe51c34d58e0e568ef5c585a3521c9bf2d44923687151c7c106bdd93ac2ff5e6bea7fc50c4e487c62fdc620f1bd3b3573653f75cdeddd8a990d69ac8f14e073ccd6c6bca282202de1ef63ffb235a57b09c5a4bc9a68ab4c7b4e5289022c948e4c2ace64284c2be67c6daaf2be68b505d906e685a7f16f20eb2711aef500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f31ceeda18278fa6cf6fc67a42f4d7980c953725993a00a4c306b3191a609d4018460e4e9e9f7394c53c05102843d6f12e6383bd07d312c8881b683b5ac1c71655da1b68abc56547d9715477abc641dc6b6eb44cc6caefb520781a2e54cd4e504b7d26af2fa3c80f9f3950169d2cdf4d8a94b265dcb61f7be2661cb6ecd40a751b9d6112dce7e6fd1c37528911b2ed20baacc5a4478743f8c49c7617f16752b8965bcd578f2b7f5e75c05f77460aecb2e0f37a54cb43b69316875db74a5133961f43c26250244c2d6e7caf5c4710d17ae0cf1de5de36379924404941faf045fdc9453d6103f80e5218a76c1e0aef7a6e26051dc279e282b25fa642802b58f5d00e10bc6be0d519b79f5f79dd774f82475ce5d7ebeed1e474916f79cd2a9f3fcd0c1b202ca30eefc151f91d5305f97aed6d96179878fca83a45a092801e4a7c0140c1d9ffc150c56c2a6060474d10b45857ce78a5db4e488608ccc5276c60da7fadfb5bebad9d6ada05a792ca0af6030b1b02f9c8546b6dc46cbe8c7341effadadc8d6fcf3451476f425e621ac759ca1aef5376f77f433df86fc003e888ea04d8c4248c0e10b64026ff152e08fd5e3b0d559a627e6e630fa6bf5120b37ed09c50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000affc275adcd011fc2490b16770f569cab5c12d1d7e9b5f2700563481e6c33b9f768506ff14dd441ac9eefe9d02742da43ad5353a75b531a1a388d222d68bef478be03f31ecaf41c86a76ddbf45923073b4f3f6447399a61d91b3d6036ac9c06b1822a74705e9f3260e248d77f041562049aaed6df82c32b85b49822b937f0aa77facfde729cf70b9b1a33591f5d8910eecd1ff65ec4940051e2d8fd673fd061f14cf1568bda2d0c9bfd103f6afc728d3ee71b32b7b4fa51223586b54960561b1643124e1512286e6057d3e07fd0694bed4aca676142da2b4a820f3d41836473f68648bd921313c34dfdb996b71c85cc85d67d146822105f55c47598ebdcbeb6a8940ade34cf797160a842640146a78e9cb4748090fe72ac49f8e506276710fe3d05d35dfe25c78192ee4ef6ec479551048e635a75e66021c02d6c146e4dab3d13fe7cccaf4827d338e0604cbe22f121a4cb185daab47d8e1822edad0514a3f219ea4cdbf63b9830f197467ef0a325ff4172d90b48e427bfb74a514c86043d9d4f42afae8046f5426d8cbf2baad2ec32df542010950d328f179b713cd0e5f8dcdf592d66575da4fe7f00637d0b4ffaf8d1cba3d98f8fff85b716542bddeb020ee00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009fc3d98c21705bc79e3d068476e475f96118bcd21b9d706b767b1e99cd73258b3d82d7b6c10c97cb24bb78e846932299fb2912811d2e896d82a77950fb0d5305ba385d3c765d2821cc7a3b6c066516cab85d8ec561d5ebd28528557c9aed1e7a1db438d3f1bfa454717326627b235d282387c6a1c25243a4ac7e13a93aaf427e73ced4aad8a63773cd3d3ec23ca9a8c053ab1b9f533857f8d73f9b1c8d7f1acecbcbfab57ef5ca26fc5b0d1a8cb23087493c6755bc9c658bf4c61f56bc53853d48b840696cb8aa76f79c73bf9a486e088c7bb76593928ba78ff52950e1a50f7cda02df6d3a04cb49d4e5f97c585c3075897912b7d953ae290c8b2a7e94bfb61eff8d723df959fb07deadf06766a323ac369ac0286e2e26b98fedf3fff43afb2518e5edea4ad7c93c51a65d4bce46a97221127312a0f0c7c65ead56eecf8f384f99a90d438a3a7bbbb86d36deb4233526ffadbd7412758b57fcd716a5967e5f75aa73ccf2b61cc1c95b9afc1bd92061f7d666a863aee26628130def2c19a4fc2d7e373f28842a56fc77d5a93efeec79aa37ad2aa1e954b97bb6c160dba7583e0f67155b4a7fc0be11dc41f136d0d46ae8de2dcb03a41f253db607f66f0f69ed3f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008abba75632c5b1fb8199b7ce9d0aa85a6aa4e95c531d243a7bbe3698cb97cc8ced36169ad08c4beb80a110bf210358ea9f7d2da902388a0d0206161526fce8b96a8cd48a851f601a26dd5743dd97c3b39305bdc9bb302e277dbb67c7c2cec7295295e42f4d332c289c92c445eb079eeec016aa207e6f0135379e7c43437c07c56e37643d0be03e428ed99694199384499b53c146f8192640c10812c3f63005c4d1f11e919b1b202aed3d41bd609ba9ce55eca0774ee30cc0d550f77d613c43791c0a4d4ec3e371ad568db71a48f7c6b94d396779df1f21e27656c1d041145c4b2fd8f26a54fe08046296141853488a59cc6cec348fb0c1dc334269ed13335ac383ef58e559952c533db867c46678e615a2b873e4212c7aa694f1e37ec3153eee7a8466f8ed15c94d7594cb2c96e6d0739dc5f3e9db2cec5fc680989bda8048b83c6f6f06592eb97a1056c76a1729dc347248e48aefa18d9e9c5262fec9f6b1c16a590651546aeb5a599d7c724b465e506efa526ac0a1b6f23e06faa0e77108096c60f3ebc9b225c15cc225f1452a3f8446495af658160f7b5b40bfa5430ed6772ba0b80a8685dd52128b58ef66746f89a7c81a17ae99b351010591afb4a6d1e200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008902e24fa7996bfc35d6fc0c41fc15390368e6d25ae58a123275e8e03f5809d558d4481935d6f0cf6c2447ea37270bcced5508bc447a2736c12c5348c5842da2e5972030e4ceeed43ae1208a285ac9eda2b943a644cf75b869535b438a47617a9df71661c8f0c1c10aca32a6d04b3f99fc32d37d769a40c723710320782d24340217102dcf62b98531441a8aabdb48c284170eeda6044d20faa248c1531f0e686af046956e76a2be0d799b662839b7ed02a0c3a33e5898ebca1d1d3ba1e61b3258844fb4628f1742ee290aed4a500133b9599656ae6057f0748234f1eb4874ae9e0052f79672ea2c68f34387c08827a96ab24ed0547f580a627383b7b91d5305b140f6998eb0df1a0d2a7efac427e64ccd654d0f3a29f9790e24e406cd4f02355ccbaa693890ae3a3c487923dce78eacc5cbf9240a940e8dacc83516672653353787223ee681606abed4386c9d69c9548a5594ec66f782096ae69579c2a08edb8cc2246c232df4b236f1623b0e78f7f4fef6ba5a81d3449af6d429c4a1995fc2704807ae804573552b626430e0008638859e7e2a72f5d3a740fae673bbafd695d6bfdb83b2a319aaa8fa7206431acdc3180c6fcce64b7ea72c51b8c69b3a401100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f52b2ca102f54b6eb61fd35605a23d3883f8e34e9cfb573a85ca163109289e6d4564041f7ca1462fc58197a04bcd39eb96819e869c2e591746ceff74328ac150fe32b2e6ef1e65a1acabfcccb2da9630abb16c76a2cd45da543474b28dae38a94cdae7c9dca7e523d1c854316473d089a2d581e8a50e9164dd5f01b9936edf96d209a67439ee0f6c1208e13c47a6aaba94d410d9416ec416d61cbfd17a0ef5d557080749b77cedb478a4772262a8a816f020f45504f9045c2c4e29d8f4afdc43fd5ecd25dcc6c6ea31ca8a0d2cf13efeaff0dc5a812df3d23413d5ef385abcdfde34d487c0fac411d45f0487e5c5f43162e5f3a23f5d40fd6ae5f4dde041d059eb0b7fc522495e01283032656cb38131d31742e3127ed2b905fefa94d073e0e015b0b02efea489dd45f79d5b3ff2dda9370fef246a5095f1c8fe2383cc77fe1acbef993af7f3716024e2fbf516047f1bd77db14f43d0d01405a67cf3b5b65936f9c8175737589f52e24e810926a814854447d474eae84c993ba092d1f5fba11e232a66436748d7ea0b50393bd20d678013fc65936e30d6e6ed25b54fe71ff97cde4a1ca04be92b186f6e40c2d54749f0eb0c43cfc7a9bc7c6b9f21828d8e8520000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000214e2f3875e38c36caf73632de0f542799292a4eb6ea4c299257fc014f69db3b09b8ee0a8ece933d8200b408c9f01b8732e47a57e7a48799b7a2a2e7db6a63f83a97d488a30478a82cf3c3c5e4e580b5554e453f8ae037f08f98ab7fdc6939ae2ead9087056c2e2395b858b5295ca4d97067a794b885d3bf80d136cc0de7f1bf68da69025d10cc2cfd32874ce9e5c6fc6f7f63b156b273a8499dd137ecfae5eb010c2efe1b37778205076f03b1d5f2da48a517e6280122a6e636ce548692d009bdc025e22ef87a4d2cf061e6a68d1181e96813dae2a664902a3ec8ac1219f91473a37c30385285648ea38d633ddfcd237ee304ae160fd561a1291a75d4c76e4b2cf8bc7dae751cb08863f21c89976548c78cb0ea811380a2298a73bffab51ee927a4d0ccd85df447a066f4b110707548a541afcaebd6e779e858212a2bb810c6dedef6cc5057e1dc51b6e42c139c57c68a369464982524366b7175f091d05755879b263cfb3bea68ecd56ce47c5cdefc13e97a19bc709d68f606c09a7fb61964f1698e07b4528f19e493ba07d0ac4bb63fc3b5f9160dc040f133ffef38872b9dc5df413703b3372f4759b0bf80684b905df6f4c3184de316d11c2ef2d32a53ca00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b21963d1c27a4ef962408aac2c610d5884eea154e6f7279066a6969f127202c7310d25c5ab8af7e278b16e3367a77a50ffdbcfbd8a9e1ba21a6bc96568ff4977721f9b7f23fcf67efbdc46099ae51d57d7ad524a23ce0a8a4ba99ad8f0d561286e15a556f80e15940397bbc57398f13f845b0f4b5459ad2743e29dec26a56df7aec143107cee5948fd6e96332ce94749b0182be097923c9d86f43ab3ce942e56bfd71a8ae67da26b67c88cdd0aea0ecc2793b590383fdac2f0b48eab12f2ed81f6d25d3c125a5a3fb3e7868137dc4434c1a798f6b119fbecfb937654656c308c0082d27622e55deff271b5a960f97f7928df3e3719a1051583921369fea8e32c3b6fa89f9d530942e2f561e03965b0667ccd7536495192093cfba5ff9e8fb6d09a32e3261fda69c657b522ef738031a9867821511a8a8ed596f30da0182d750f8a8a841fc0b830932bcb3a58cb1bb6d4dc974c74f0f1cb2fde98937b2eca9c812536ef9eba864ccce0c109f5638f3d9dd993f5cfdabc76a0bd0e922aabdc09407d6685d2538e9d5b94b3acdb8373cc1a716a1ac652b6dfa2f850c27b41cc1b9a207bd0d287632ae7285f7e26391b324ed827d4b1ee637803e6b9462ead5cf5a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027b46fc9d5b9cac728277f8512e51e00b89a5ea65a9637dbe2f0182ac127b85b46a925c54522b337111a5d122fa7b3cbf75561e9382432d71ec5023765075a5544f3f44397354c1245e2fe9c91a2434db14cf5c44f5c67be28d2c76ed2516ae6e8c6d6fe655903e6fa8c00925e6e511049f22be45ce860c69ae9f3dae9447a6dbed483ad16f112e57ae3c1864cab7d22e7a0eb2950a2c0176321aa4b480a0be07ce9ed1dc320cf1eda38aab719e0f2a2e4362e9562952216952a97a1e67da634399d934fa5af6c4cef918ac3d08e9093771489d633e10c60c79e1e55fc76bcb2bc09bee2e3271f1afee21357a460ed8a71e023e6f5c7f56a4f99cde675e0f6bbb97d6d6763755b4cd39440fc437d12d14fd73a6ea3006e829ebd2fbbe7011d816ee25d9b350ab797f9a2eb6eb89400d910bdf694766e8f2e74f925472931b6dffe09b987465888774b5a20763600da49058c6e50e03761a0231af0a858416d4a2b9b1c2230e5f75d2f881189ad8639dbd93748c74de13cef9c2be598e9923b256eed0ed8a1cbf8e5999ec2ee45cd6b26bd788e795bad3063fedf7c40470a5683d388290554c9f4cd9eab5834dfd54440657f2d45d2450e271b79fc895e3c061e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028119083dd6c113ac5e66d5ba44f3028573b39954558474bbc8221f2047b6b8763349fc18ee6526e4f28cde207350fed340b062132625f7e85aac2b0214acee8c88ed421da6a73e784e1eac5c32a7045122bd1488b1d940ef5d93a051fc35172c220b87b1f2cad194306ca4ee9bffde616b6d0cf330ca3de5c68014c3c2a017981c02e9a7f1ada39fd778b2076dda318b98979c7411e0ccd570ab0710af57ff8203726c80cf87f36be68f22ad88fe4da949efde9da5b6d2839fa633b6b9cf5b106002d8356fdd1771feecfa01d5ddedfa362ffc7f7437d1c1d6e4f304ea91118d593d8a86208667b1952db0b24af9a3d008d251dc78b20ea9fe2e6885198013a28a2c98e2dd748c4173b532754e6a5a23d20dbbd9acd74fef5fa9fc4d863332a94128c8c0959efc7ced9c9e428a719ad7a648d826035a02e220f03cf22839bf4326c9f84ee1c9aaa54d5389c31a32a50c1182f2d6a38b60794ef3a8a4bffe9ae2d95cb886cdf6cf2f4b1587cdcf6ee679c2f9597b561543ef0ccc9eaeded491b6856e975af092fac6655970336b1636782ad53428084723e2cce433ed4a5a84f3bf39d6e07c4231c103a9a487b1eed97dec719546b1e3fa7df3ccc92adda9d0a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009146a3515e042def2aa402ca02cb2365337c9ceeb6ada64bc1d46fb2866f5d9c6ca3bcc1adc8c8dc390f7510f2ba44d55855a97e92ea88248601d1b0566add2eb34f379414cde04045c9a22ca4ee8fbace9090f1bf102711bf6452724ae29462de99826447bbd9295a7c7b25fed2b1c53767d1c6d3773b24ec1dfcb97da2a3f94298e85b56cf0dcf1e934b0006bb11accd95fcabf4db812aa8c324518a9482aa1593058e8399a417aedad01910876303799d2a812432d5bc3f2406f43080c90109f0455be6dcd4c6c0c24eb6a593a33714b69d1e7c77e0d20380998e53515fbaedd3e72a255e09d32887f4231c9fb7294c58cfd24417cc7b5ed60abe71fe784d2b8e2dfe4cab6a26a5ad1fc4f93e46c3a2d98cc5af45c8f5834bd7bdc6a3230316c634914a7eb681bf81195c6e959313a6221bcab28ac3801decd929877b74655ad1919f188099153f9c1ed4d2388ba1a4c955ece97a182e542e31cceb87a3f51cb5ddaab25049cfcb3c42dec26abc667abc8ee6a789d49720122b12e048b6a3653c38c129a4f108eaa564e4df075707200ec81c195bb4dbd7d0203d1caf306ab9dad57e6a3ff27f1deac7dd5867501a93ac8c2af6c4619b232c3fdac2d1a08800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008caf8bf8205a4b3009ed6cca26ab3beacaf65e2daf191ddb45252618aa1e768f315c20ab5917996a65e41629e1888ae5eff28c8b01c83338bc94bf421f142ff33798ea1166718a0e6909c3a758cbceb3f8dff0a04e4ffcde11dc8036597437f32ff9bea4514e09ced4ada637a8dc84ed1a8cd333131d763c5a3d3047b5187814be1e9efbe55a762c129ae1b8357405a59ad73825a2bbb509c97eb611a00154809ee5efe6de930028baf0205e602d85ae459e3c2c3d349fb3d0f4061c7ac67b25ddd018637db7b8b89cab94ff2c7714a5f8619d1272c59083c603d99e22f8aff736182b7decf92ef2b2f10a2bd4ba8c805bfc0c1ea26446e14a67842f31281255771800f88712d9c2769ef4f2918647d37ee3be3cba834c6260ff0c26b38ba8f9d20ecc75cee092bc15973c64a666cd9f1da425f4aba8466c54539703beafe848f4c7b8424db1c135e038f4ae678c7100344a821ac5db17122f19d02aaa2eaaea27e8408363568cef714851676cdb0ba986b21307b77e52c0fb66771930e073f2f55929ef10c673d2725750a94f02c0daa33bb3ce429bf9cda762be15b1fc9781ae1a40351288c5fd7224badd1d84bfa6bc7ea21f67d3fc423bdb132f3763dd9800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001931e862b53998161d830cec27778a05134b7679b3febf55ec34fc81af4c737074a13287c7b4602928689ce4ab09b865e5a006e2039583d72730a008f2370c99d9bcfc890cd4a7cb7ad14cc3380b9fe77489b7d4ce4dbf2178830bf22370b1dd8d5bece71c40fe23008a3947cf7f74de20b30a2e7845ac140a74995d4799a0b701604406cc6b11e17821bb6fc61d6373f1abffbc274f0eb6c1a434eeb258f7214111068f3f003870e83389d115ded27a9f3ef820fa6af278efe06d9b2071556ae2c731d93302e0ee3b16dabed38f5ba2d358378e0276870023cefdf5991281ff011da09962a2b47fc27998759eaa0fcbd30dd785fa9620e1797968b1c3607959a0cae817833104a11613aab83280e2b4aef9afb6c1deb875b088b33ad5ea0d14c21a443fcb294c5616b11cb9ea9cc85595592143b3431554a0ff553476c6279e5523225b11aeb6a5a523b37c47cdc2c92fca5e722013f7ff2fb11ba63738cc9348c331a3cbb2ecfc92abbb9670d9595975785809325a31b83624c719d4338857574b803db8f9ce2f3c9dc2a8a7c683d5615eb4feef46751833df5745ba59620f340e67ddd0a0b48cf6fc5cd6470d712717ff5f1085ff90200782c56a6c01e7de000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017e48985c4054c9b8ccb26adb4103ed4dba3c1d8991b1a38b9affb86870858f58dc931d7b1c30b76e87953beebbee059c2a2bce7b2a9696fc1b439b84ad1ec90ebe48a4e6d88bd3ff025d2dcd02b8768c18d7e29d838e9c073d3d7f76ddfc77e4912173b951db09972554c8d7e5ddeaa133464b2a15455aec4dd60a16caca55bc28d3e4b4e687c373a743e4112da5272cc197f6c5e4c5cd38ca642831ce524a30f7486bdecff52b704ac51db38c707bae6810529b1193e5390e325255356ad2f10e64e752d7186e175f3e491d73618f3c4a0b1f7d5512c61165b78424f5eb2d4bc9cc3013fb34fe20ded8d9cb7f532ecb85ca7dd656b683ed75ccd37d62965367c0d4dacfcfbf480d0e583489947b90aacba2663a8d5c3e43a16e8095567856528e5631fb673c9bb5e776d21811956099b06ad821cb079821f77038aa52fe22ead817208816a567bdfdd41e0cdc7fa55c1061b901d34d751bd9dd7c406c8c470c1029f2b2ef656fa2ace2dbd64f2db486ee8ee553033971ffd08c3af86974f2d29f5257d12e8b3177cdfc307d740d86357a618065fbb417ce7db68ae825cdefc4fa119c5d09a09d0e05e603d1cab4e75999ca274f2dc3b1e73ffc28a279fef670000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0542bd202c27c5f53558f14873bfbc295ccdf977e4369f0026fa4cdabbda109197fbaeda895bf679d04fc76015642417889aacd612a11753e44ea1709bb1d60bdeb99732e1c1ac364e67162769ee3e276583863caaf8c5669f60d8e422104441bc6c919594201df4ad3dbbcbf472fb996e79d2151dfa5c317c6aac4be4a94beaaf564d63777fdcbbf14902a16dda52764098071f1c14e7d720fb852c4738271313786f8e68896fbb61a990112c20bbf7ecb9fbabced8cb20e34982675be437f2e3b8b6ec8c6233b94214233f366ddc8a83d15ddb7dbd3a71d416770c157d0eb5ca3dfb1dd2dfc14b2cd6747a58ee92d30cf99740f29c7b9abc16965c0f255586afbf943b40d29aab009ec9ce0b7d3e1223361bce051257c323e3fb3f773dd073da0d083959c8314042a90634e62de7d92e9c440433f86c19c4e95f213a21097fa553d4f54a7ef1367a4f54204e398a0b58ff2eca6a00d6f116a556f9b4764f6c9ab1f3f46ede4bb023afc3b340cd055789c8b75ffffdae00c020d2e405a84d3ff9542bb6b04922873273718cb9026b48fdb9c237aaaf493d1360af2018e30e16d766bfe64bbfe055474b2a9924584bfb144239e7a1b6946eac759dd146956f80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000949cde5d90526679e1c99d23134e370b6bd9500a2ec2c7a71b3e3494bfba5734ac4fcac7690c87055f080d61924ed10ead531ec452ca64493d6e95f0c36eadd929976ac3b840c1e0f3990db2af958732858cfe79715c463e4508ae8c2845e812bd6cbf0361a48c2815f6698f5ebab65291c4e1c3381d54c205e3e9089ef9858c395553ae4d5610a49afcd50a5d9ee17699eaea3e7ad02327822f8d9874d172fba5b8f9c80bba92cd2c17b308dced2564d10e6e48a534b0247f0bce2e54675c392f0bc7eb744620633603582345b080c37301dbf1ed2ac276a2ec5a7764c2e9df5395baff33b51f4227b4b8ac13e9cb603c53483daf95419a0db41380dade9d91ca133b72e55d14b7df77b6bf9a8bcf613c84a3e062df040a194204e2d49741b7bee4b3b77c52e2f9a5784315855af64a8fd62863b83c37a0fd84281f407b68401e247b622347ec94b6f19503b54c3879df0d70dd73a8914dca882b1ee7d961dec1316148651975272e69d54501c37e8800ea8312027d117cb47fe83dc326dcd1d6fa16411ea92a0a09cafd0f94110588981f2c845bd20f5cfbfbb7f5f8da3051eb4c44f5bd7c716953b497f506452e967ae9afe00ed0fb1c4133922aaa42082200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002532bde37ddcd76ec3632955a6c8293b3e841ebf1a9353347cbafc3d556f310f3454b02b45efd0ce13333ebe48f7388dc67877e91fa90feb1f6075a6c63b2c4ddc3af5a0191dab2b1955761c72ff050f27fd4ec2255fb65f6dfef72fc6f03477cf42187206b44a6e4c021d4137f51ed29c657e6fdb289bc007e06405e23d2cfcb513c8c8e4e94cf235d39a0604b0405c97c34dcb0f27996665f05ff004d9167fdc9b6ff605883c570b8607ea31f79f9220b2d79de3c4cde2a8838ce292d945712c44be31ad70ad6b2842752d64009841dfddb9eeecf22f5471c767b8e8a7977690affcd97d35c8bb6ec7cace56be3664a5a79eda37c08e50b824a6cbda2d8c7f52a25cf71923cbdabc7412c3ad36f4432f2c03cbb85cb6be02459b4ce4a54afbfe03830a40c78b46cc2e61af204a3cb6c8a0bf715abfed6ef4024cac8f89d4ddf37d77efaedef5435f4f582c6202974911883a11830da35f70e709d6c85233ea3475f69cbffe884e1192ed73883215913b5b241a5adef771c72075330210f85799b63b3c682ef480c0d98c74c587583950cba420ecd3378d1c6341d18c847e48f367909a930b207a4a402394eb3c8bc1209564235c61b29b9c8052f949048f81000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f8c0b1b156aece7e32d36c4aa9ab73a5de9e1bc53c3e2e62937e37aa7be61b996fd62f9e47ccbdbbdea08c05c46cd28cdc9d504a89503d7e6f7b0ff6534ef6501a80b90807eea695d20fb38d117cf487107ce728df33bc5da2ec433504c7c0d18cc1b106ca1cc2996f7469b32153f66deae4c4a04aa06739e9023e17f1bfdbd4ab46175433d493906c423a575335154f608150e75abf2f263e52bc0ace749d072266c07e6d3205d57d3afa6dac2bf6aba0ec44017806b1b3d8cc9a874692971e89d6ba4513879be3e96e9d5ae1fff236bad5ebf246d2cb8dfae9ee5aa08ece31757623cc5124c723bbf612b3cf3d5c84369814390f4ecb0d44f16d18d5d11b9858980bc80230d941f3a626295a4cfeff9db7f8fc8066fcc55cd1f9651e16a881f2c8882541d9a1087eb2626d8ad0f6f1f60e5358f7d991613ff0ed460fc7dbbd9b075cf729b041bfec6d284b244b941c26c360c70ce3b66e2639f0357dd37872dcd3865dc5ae9ecc596b93b9c2cc0fe55ac9ca137a986b6f5ea1d31d91b7865e6fae0d76d510a62c27559135d0194c48c51a87cb6039d7299e0f7dba71d8c1654f193685575f46f91280e2f6f57eed71c7ba1f34f51cc955f18532a216adc10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac926bced187332b5bb45ba4dcf200a4e92eab4b1921f3f0e6f9ed97b979bcd09017337831881a6dc86c945b037efff3690c6d62bf2fe90931256087cdcd2a13dc2f59b314d731b3e7b0c35aa840f738cecb65938e80ccbe87a6dce37722f7372cef071f0ec942951dae3d2fc43ab26d7e16d95fd28743514dba676d204cebe4e4dfe0c13b2d38b28cc887f75171882ec789734e8fab4c6fd085705f366b45519975287e19ab5e8f2d25fd12d2a14198873317818845dddbe3d3f86b47ace879aad890afa984781d5c00356f7073246684b08d3094e1b75548f50d62a6a94d7af9c21df5914f355e30ba61099623a414cf9008161b1aa5689ba960ce56f2b453698b6e5232f359066b370c0f68dd733236849b6723c6981aaf40db80b4a44ec19010a390ca43bb1f11b1934922862a6e07f87bd52fbc88668acb1ce2c7c98f070d4df5aa8dfffdd80530c0460ec1b6e797477c19761c2ad0258366b14ec5dc198b6cd9f31e62378f2c1bdd07f3898c50c825bbaaf50d066f786ff9ceafce03c8cbb23f7575d3a946398eb256eca912c0f2ce5e96852b2daa1830e7e971b87f832e92a28ef0e194108ac51c71e2dc4484cd99cfb60049387d17d32e4e5360d74300000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b4840030363ebe251f103f56cf732773d0b835edf3697b2206abbfd8ee5334628bee805344f640e4d6242de73fcc5fe03924fe0f6ccc3be9b1e18b42dbccc692f58440371067a12d4db42854944245883953e3592e984053b05222d76f4e69c4ad13a1b7ea6e8e217fea16b151b7dc7177464157a26f4e56a774002c7bdc67ed904cf2665383c1f9ea6ee0806b3f0fffc8345bae007ec430a8c383a6bb647e73d1ef31ada4b4f26849fe060e7eac7f61bf41a4369f0bd66d0a052c317232cbf1a3c9f0bc108f0bddb74a3f6f8c9144678b6a493a5d19da6b7f8643160c986688efee7000e2714394f81c14230e0859b64ef9b8c013c4e0f663820f319b70f7b670206111eca058d8172b1cfe1b4e317fcb405c11dbd165339ed07082d8ea13bcf69070079c93cb4f14f286c9ca8ef2ed46acfd7ca5d7ac90ee0cfa52930b8a5e3259f0b43540ac8809441fd0a32f57f57688e6112c74ec315da842f3d0a5c86541f130f63afae36741c39188904f43538cec8786fc095daa0f75de4007de8e7e77dc52723df8b18e2132388f4ad70ff93362064a96a21f2db5f16fcc326dd185a8ac400b73a9e7eb6e39e6b8ece5059afc76c1fc63e2ae38d0b61f1e74e098c283ac91bdd2e8879b3fc32fb6b36a989e8679522e6cbaca74077697e563be70058f3e804714a2a11c829cafdd75dea27caf670624411f9b0e29e192acc9a449937da61081d1a33ebf1f012178b5bb28342bdef69c670d052c5667f0aa97023c9437b4214ab33a600227ace5071bc3b36ffad48946f879e729dee58c39625eb87cdc96e1799335415e154bafbb9e94e8facce30c425458d59794f2462282cea17bd725e05e64688ba1b52ef8fd2f61ad76f988feac20384952a8148c7778be20b9753af19e3cdca35e8bc784014efa88554cdac5f4167f791c19f0e59ad26ab68840e1d05e1619400b76d8df81360951c2a87f70d599be2ea58754ec798e015dd8d0f2a0f2fd2998a4c42c138634b4c34c3bca3ceee0d82080ad266aa6504db519fa82101b00045a97d11c002a8bb91960d98f52332eb2773c76b12938ec7e013549eca0e30df658f77d07623437376bf9d1a31878e892854f14f71cc7b7cf3a0f1812128b0c50d8395018b9994de5f76318dfe977241b7885f4829c5498aceb320ab09250f4720ca60c64d060ec4d05d5a0042831f68cf119c5d72b7735a99b8e676660871518224452361d648eafacb4acdea8ced54089166d003132afc29f3ab0edf26281b0e56e84ce649f02a779442a3f0654fa1e7c3004ca1f3980df11be9f4e32ebb7fdc476be3e75b3b04dca37a73d94a6e5ca778e8e876940e7034035c9b692a34195d9a0f868e18979d43de217b1dc553b0204cc4567bf5804443302b6b0a297e404caf003b382016de79b50a83d1008ba2c1b020ab758c9b88ef6f41640324b46ff1c4fdcab989d4c593d64bc902c02701a36b1eea7ec4d9db63896640d9047d2ad459ad880247d2efb5dab48f44a1b8da9671f19942131078a6ba5ce78a09779f0cea89d638aafa48e3a331be834fe2ebfeb053d2eeea7dbb48c53e0e48118198568143de668b6ae432b5d28b3aad3ef614be21f1e359b9b58e945c6c382abd8654952f42f80a4ee686a9746a15ae6156bd75c7dbdf064a408544e0f2f72d1caa2457ae6a498a30c03e68574c7f5097d6f3ed9a69192efff9422ee6774c29d48eb17b64145e066022fe60e1701f569340708f1f0e9d62766dd66135af642e06c9e83486cdb20fa33b44a1ce63ce12463db08ab9bf0b5e6725b5a726a7eb2d29d5457bc1fffd53961d048e00cde5aaadafa57f5d564fe093eb42699f78cc20848a4a6a1b692ee62189950b7b7ddab42270581e99079b780895a1b1dc825a0427eae63f700e1f5b4298712b139e8f0bac6b544badc75ac6bc9921aa69abed234c4fec6e566ae2a626d51d8da6c4c8557191c4fca4656ce9541ceb2c7d56050ed16f3da6cb515a78d5ac32a8a168151570959ed000ece060fc557a1911e28a1b7e70e424349b08051a646aba8cad55226b4837304fbc2e53171d1cebcdac6411d130c121163381e25774cddbd67394d84f34d74eefda5666cc47356cc5f39417680d89a7082479596395f76b1ebe17a5646464cf87d98e862f743c9fcd93b80ffbe892af13f0edf05c99df660509b3ae6dff550a58135e97e16b41369624cf174fefc4c3c896a9f1d4373d275f7a79fd180b2f6e2e58edfc3619eb5bb411f304c4b4bb7a974f695b52b40d3e3f8ce0f299789d4bde9a63c33de058e4176c2426d8877bb0d2fd757c7626d75ffa093af455a06a2ff25f55029a3ae76de09c551c36f8d41f17e3820010070cbb554ba9cbe7716c58a3098f3593ff20c563942c1bb779e7ef21c42d0017416dfb88b4aeb7bacec978557b0e9bce50d9b2160a6f1187cca64f2e53f3f47a8ddbd918831f74b154ca9e488e719d4ef4080154cf112a823fda37dd7370296fc06470569fe601e01e32e4fa280f98e80f265957dd580a3c69cef498d141dd219442398fa7e173f4b6b0515fca757ebe5ebd05c71dd300db7aac61f82295ca24c241e26019152d7ded58aeb57ede4b4baa664681ad571a079aa0269588de7bcfb44f488b56fb70fa4d6398ab0757a2fdbb8d219984f121ed4352834db459accaea8ca04660b1f2769a9aa7d90bec4617c578ccbca9c624ddf9b02a688a3271d84caa46ce29297870bc2594e3941efded8f3b227d963a2afdb373ddbf4b7da2d32b4b861087e8ccc180997aad553345a33e92ee1cb24b2491ef146ea8f28daa88abf4f1a50cd8054981749dc7ddf661a1af3b4b6aef8528cc79c1c0ca1e35d3ea793454a9c2e26517215df5637dddbd9f2f64fc7c5d4740158b4fcbc704d05e05276236743a3b81d527f50e5362f94f5201f0c3b54fe42705a068e9f37d6d44ecdf1223187307204d0d2a43a63f168f94e94023935ec69f10521409fee40937c6b251d8403cdd510120b0fc901fb7a3672c33d00463e60c225f33287c5d6a8ba44ee2abbc0e50ea4efc1291f7bb5f58159eb87a2efa554f27e0a0f6d0adaab54a52e345ad8b8182d246b058e037792113739db21841fe2d2434251da00df714d4be80a5cfa45420d6cb5b6afad7e9199f6dbce45f9275830c49ae36222ccfd1d87b1e0e812f6e4a05c3ad8483b579b0aa4f81262e74851f231d012882105ce3947e72d4c4c0239d6680657622a9c82207bc36dacf03de0204f762939846e93766ef867e086aeb62a21a5b617272e3ef9be36660c0a5616c1e1412e8dee749a4073a27244b62849ef7f19c9e147773cbe844431fb27250aa10fb1cb0be4790bb97652799e2f4665c76f8a45fa5ef9fc6c9a92db3f2448f250c045f61f15b8933eecb055d0b19121a5c5cde3292e328baff8b47272add496409e3ebe52b00241ea97e33201e6caeda49e9e6061ba5b1c82b46ad2f92d92d512719ee40b4f8136f70e0c985c970a65c63403e345f50ab63502aef4afb464ef20642ee75c2ab633daf95c231148546f0589e750004b30537faf5dfa8466344b92491c8ab80dff4713c34bf0d0219048b73a4fc129a62990ab034c09dcfa6f84c2481f239a0074e07cfdba97619f3afa91acae44a95bdbeb4e5e3efeb0cf40b150a5ea7779ab2cc83350e6952607779b21ca1895a1ed83d0aa2d617bddb4851a1093b5e1dd97f9a87fabcbfb38307ea1c26e9756bb732e3b0353b34545ce50f7c15e7c82d0bfcb082c7ac13695427763d16c51e9ad35fc71f79f98d1303af6ab401bb44cba06006c709de6ec4673f641672523515d37cec498927c8d5879d02670f1ea5dafa1fb0205f74f27c2e1d01f38da378da6e38969e2ab73dff769e35531b8ba93c2847513589e771b49f08729def1fcf54220584f82081f80d32a60cb006d46128e3b06fe868dd8d44be4a391b3e703d50bdbdcd385365881062db0fb82d478bd9480d5cc1300c0afbadf32446c9d1574e114ce3db15fa1e8deb24f6c016daedebfd0cda3f8eaf879c55dee4c8bd7a515effbf7894a9481370fe3c50f00da950de1a37e8dd8cf6d26136decd479075305cff625b32645a9b5993d06863081452de8cf1be571cc07bd827bd72f981f14d5f1660bcd13d319466f422343e1d0815cf81e614df34b19980fcf5aa4243a9f5bb67a884aa5cec40f12d8b99b527e0b6929ea5d4340916fe5bdc65fa1f23ae3afcaaf1460e807cc529ccb6e7490592e63c28db783d23e9ece5e7ccea287eabbfafddee2b664bbcb9d853ec782416ce944c3a2e95d91e4e316f35957babf1f47ccc72dbe6b8c8ed02c12ab1268715eb35cb5693e235252d981333f7ea9ef375b52d1c541b8849a4d2c9b11c643d0a1dcbbf45011fc6381d07cad77c093eef0fc391d7a931bce41f8e2a8ed9d63324e5341ee5e4452d7a06132569f87b40b1b9153274f99d45731de7a4c855e9f70f22cfb273d8d1a3c3d277b94933126ce797424db695a0354a24a953a5bdbdf410aba92d7f3be38ea15cbda0e63ec11e257da76b92db525263aff1efb1fabdaf2292ef409f9b7d7d575d40bcc7e553a9d086d1c46a6a224efd9b62dd20e25aab25604a0f7790342f33953235cee3e6a5c077d212764c59aa7998f7c4325fab7b05e2b2b68101b1053bcd921b3f75c79dc7bdcbdac438518c54b2da908699e41d08e9b15e2c638bef1d3272f19ee5d6cd450986407e6b9c9270745d85b30ecce10c25b78bba5fcb60f3822e4e867e8e6102c6fee2fc2487cea9d9d2384995a628232e86f0fe6d5991d3676e1cd5f1b794625bee9f96633092b195735e8c0c225f1b7a45a670e974a20c4d3c9423c15e23e8ad47f187d4fae6a2bd87a89dcd104923a6c4d90bd6fda517b9066f7bc83ec33d3ba4fdea4821c77620ca95a8f7cfd80a29229889378b7d20be1b26029b119a2f3f73a3d30418596c72c75dd59dd7080546311e649ac949236c76957fa401c0dfbda7516fdbe920407c12cc67406106207e45737cc836e033da209d29c3f059c08a650ee4ab93ce38c99ba840dc52110524d627c793bed498ca54650b87566f0a124949908e786404a2185d54c1d6a81fd44653d6c17b0963a11fbff62024f0cb9ec235a6a503aaf08581c30c8e84b7254e1605563449b496c5f22a6a866d2250609ba1e2f224ed939143de8e75378a1aff4c3e16533c0cde286723488c6220ba1116c4ce6a4a6e6e52bfbcbf21b0161f533d57b78fd122ea1088acc21703cf8f8e5dc4f7efbba1b9346050315588a12a0e535bb29ea7ce03905ff8b10d0c426b37c84430393f3587e8751e8982ef2d1f9fca2719cdc813eec01d2e2dfd9a7bc31b2a3ffcd6bbbcc8a1714fe01f11b72b6788fc7707fd0e31220b2ea31f46df4dd0aea8eeae79451b84e180a31a6d4529237f72de032c5efdb62cf72155d2ad59e5efbc023a5e2fa46da06972d9950d2d63f95b8b0a821126c0cd75014d220cc6180b414eaae0524cc6af7487d2a5e12fe38677558cb889c9087e377e9b460498e4b8a6e7f3b6f1f6925e7d2e691dfe22c75b177b14a0e757079a36bf3c2b48d3bc3d6318d9671c6dda90d193c60184002804efb47c6fffe864ff33ac2e17920df3a145df209fdc8534354b2138104d0c6f8807024bc99ae2c971c4e59f6889a1eb9d403cc3847a0809173e794cb83a23e2affd13490e2bf51e3f6478e0b8ec3e622b7d1f41cecab48a08b0ebc56eab1ffc0b5257dc6082f182a0f3a14c581073e7f8fa2f994ae37b7b553a12587b02003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000020118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000200d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000200a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000200b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000002029a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000020141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000002025e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000002012978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000202daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000020189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000201159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000002005ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000002005c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000002014d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000002003db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000202ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000201213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000201ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000002014fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000202b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000020305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000020280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000020223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000002017a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000002008858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000202618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000200f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000200e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000020172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000200b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000002005bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000020137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000202e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000202297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000202608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000002018373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000200422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000020204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000200afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000201998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000002028d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000201da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000002021d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000200ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000200e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000020107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000202f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000002009726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000002024f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000002003c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000201fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000020205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000002025110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000020283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000002021cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000020094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000200c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000201f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000202421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000201fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000201bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000020304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe500000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000008100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810400008100000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015d91c86884705d76669e2ae61abeb9ec2e8344c4e09b13206db56f84471de268523c1b57dd29faeaf655215290c193216e9e0ea4ed2ebe9bc1e583ef93bcac1cf0a9e654b22222614420ace4cb558b2855d4d54543daf46ccf6b5311fc9976a84d6db0ed6b9d4d42fb21dc710326eafd364fc203928976ab2095daee3c99340078fc313c05d100eab54b81ed053ca17ecd1ee989d96dbeafa2b3671eb0f8f63b53d1d36042eef71eca3c805c28fb5983de6114c7a94bcd7eca54f35418b887123230ee809ec41b8e92bd67521f58ff51d1a4e47f2807209f69674b0a3374a2383a017e58796536983bc67c9c60a5ac5dfa90cfd58cf6a8f7c7e4089b6402b905a93dab3ad50999cac50b86c1199909b186c5816f75c53547bfd75cb5461cbf01af97895deb4e3d051c5d0eeef5ec09b7233c0e500e182b2b35c4268fdc47e8346bcf0442a34733e673c32322c9b1325e995d27cc72c1bca3cda6c7167d5138c97053a720ce329e16c7754d2a53f0b379bac1a210e993c83e9e2a12d5309161dd4eb38a1f98ff11ce87bee8dc22522e7947c056735fa200b71b002c2398f74b6f10952d7b53c0f53da9f05bd115a42abd76bf435ecb409624db34e04b29c39550000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302729650b9aedb4108e4d8a8c21cfdd0051f6a6e5a17a94ca24354e407aa4d5b31619db6639d3a6dde716e40a0a0e159e4257a4e46e1aed5c68dc3d2b7a9843f1bdc1d451ceb38d147d671c55675ac1688510bd7db0f7f8d1e45c9fba352bfe1985d365fb755237cf647ee7f97f31aaf32b8e6ddd09d1cc21234b121b030402e5877918da1fb06a557e3ad0102749a5890041ea0974653f0be6a93a4c8ddb178784fc8df0117ca25be4e52de5b05dd0e743d7a3b4a1218ad04ad1e52490dabe353c1721c102beaa4da66a6ea369b7c854f16a2a5d475fd756905d557feab7c1bced69a2a1de55cf44dda0c27e7b859d697dba69d2b43d2b6bc37a1f4c22b5fd70d29698fd3a47c18fc8e1d7f8c5513b43c9a97f03733fef92becd0ad3d0fadd5caa14fbbdb5a4636fae60ff80e9c5cb8713cef9b2cda7371f567905a1494ecad40700e2206c5a2841f7be98dc63be0c789372f813fa3d1c8294e3cace54ae7960a68fa026d161fe1b0b24ffdfb2b5ded7e373eb56947bd067cba9d1efcae75026e984a1cf6b125c64f7ae6b8715cfc5eae29b56cde776754fa86a511ffc1bfd2e20673e00ecf775f8cbb508d7936f875e86c9050f867d5f81192e9451f711460000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000875c2ea34517e714114074120546f43d5ad4b6e6d95064ec372efe169c849ba21f10a1f58a9290874bcdebb6a2349bb8757109cd8177f1221477d9afd81c60562919d41a1df335d489f853866a32ca4a1fd6664a0516a4a3c204f1f8fdfa99d58f22f98be5be02b8b877c3cf9705b92ce5cdb992b18b1a7514b0875cdb85901de812f1bcf0e3eb90a3f273a2ea098656e4f9edae13d8ebf0755d87f04dfbbf0be6f6c0b822bb4c8ef6fdc452213ed88ba7abb0923f45507af14a49de5e069a6ed3679c5178c8dc004bfa1fd234621b266774abde2936133047916b6f77d0bdffe4404cabe6bb26289ca895224bf72dcfae0ff55604c4b018462d93ad8a774f5f6df861fdac348960a74ec2ed648499d56557c4380c3969343c1db8b339846c5940dbb8dec5dfa9141b0e416bc6b8705be93dabe52c672be1d44026b03dfd9fece28857c0e637af76d70755a366d6e460395d87f571718b1d911afafd0de9577bafdf293eb6e0a1bd973199a266352b84ee58718d721ebfe6e7780cb98640bec813cd4352ae8806514c661ded5cd1cfa49c69a947dcfb4bc0f89d8c498a7e57fdd1df7ed46298eec263c247b3425de3be9042a710d7c2f347abc8a644fa42a7ef000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086c24b25f43a4333ab0a855a19c8c9f99a3f57cc4a8e5c079b8af0b3099a28e5d6bd6c827b4392cb2eaccbfa11a91acdeb2206e7b810acb09cd37eeccda752d5028f3680475d1ea035bb1217a0ee2a6f3aa92a6c1248de83d6933b7fd8bf94ce50e62aeeec2d46cdcd942644ed15b81956cf6e53c05d41e65547c2544a480c774875b5b1d93d3806c668abf49e387daa33eed4272be3fc939ecc7c8a09b3a09a3607f7576013862b64c0faaa03a1ea8313c460b803d7bc4979a9645e3a78ecce054437918319fc5551a90667ef3a46402907f90f5d8cf1b9fa4d60363525cc9fe53bacab12750ea1872172b3ad9f51e3feea7d8c0fea8a2f0046703418054d319e78d61e5f0c952bcf6ff57144e5a00bf3bf27e85488940746e9f7d009a7667e3e9fdb8d6eee63503260bdd71c7c5ed51b56850875418e86b78d316d2c20cb15e8c820be66a730def594e0002b1e32e098c791d092668f262b4023857b10fbf0404cf82a87cfe3436060663eca6b6f9f3bb9b7c5267f66b03f734be092efd2c03e176d0dd9017d4f3080b095804d0e5d73b3a5d9037a49dc580c7a5db7276ebd6c336b2fd6ee944d466af88d6122ae1f044dbc9fbb9454cfde6e2b604394a9f2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006bb01365a60becd108c0c4630568fdc8fe4932de175674c7aacda06d0f7b73c21e8e5d34df3d4bf0612dfc8d7cf70978ba8fc56041905e71338673439de40609527fa4bc49d2ff6542ee117d19b543314c4e21870f7360415d881add63b9fcf42288d9836eaa774abf55818177328445de653b0ee49cfd5cb95ff4c11e4c1bfab2ff423f9d0c4696f0d6398909676c6b0b69dc67484029bdc16889034fe724170854396a0e94fb0f251ce6542fd08b5b8fa4fc82d90c45e47921aa42dc92aa80d51b9978bd9683567941613225e3f537c03c435eedd39421471c8fd529659fa514f9fd1f9dc88a7e39ae865438c960b703e92a992893a4c361cb622886b6c40a31c59a1e09b40d2cc3e696024c3b6e9893ea2b957acb91c796f178eb155fc491c61f0e9ffa55a911f6be5bb6b07f0d4db5181b55d0edecf0537efc3ee1e72eb0b8c662bf6673acd2718d0ae6ed33df31206a735f87d50ce20f17624afaedb47f1000416b057857758a4f2ef7d101d20c3ce2d36b8b2efd6e8361184c1e706c19c5cffc2847557dfe042c6e31bdeb7792a111671c3e141d9964605b30ab718b9520d14a37ffe48254ce33def2b8b9c04fbf2b1f70cd224f15de61d5325325e96000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085f7ac2a7e6676cad5c54da28da42f9ceb4f7607bc7288dc6ef4690f8881117f4a1a931b18e50b3d74990f77eae98c4e66049ac250f909decc32ab88bb531217e0ac17d9516d606bd821f3aec8b2b623ab0a20157264fa3cc80e8c7aac9ec509db7329c7fde459ce13de2f23f1d8bf5534616255bea00049131d050890c8092fc38fa0eedb7999be47180d4c81e46aecf94545b20e9cf49ce35d678d83f51d661a26269caf25a31962752caaf8f933d58c4c4f1467c22db9bb7f5d30ad7b1a8209349bc49243f593eeb5c763b6dc916f6173e017f846d261ef83d9b68522bcde2d1516bf988ebad8649bc0a50f208e5fd00089109db36145f7fab470ee1401d9f8d21f4618c82a4487f88c0e26396bfff4d3625371773a19b28be04f24210ebdc26c9687961a41d025eb2504928957e76d7e2b3a89001d0abc776d694dae00dbcced2ab7bbe6bfb552203249d8f20272129b3dcb5d2fd761808981761976cdf89c17b61ea78c1ef3fc836d145ffd77d120a8513f1e97eb6ee1efca9682b03887e49ad2f0976f459d8ee196bee83a18747a8105cb2622471815fed91c7e530e9254163895d2c4c8e1014ea88bfebb08969f2b0edd684d6562c90a12430d9dc7710000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000155c738fb75f73738460228fddaf6b7c9d96510f1c17224251972a77cb438837f70c145f3c71ae87dab63e1f8d7e14980304b91b737928794823eacc7cfc5e59b53d019cd19bf2955fc7fb1b8b116376bc9624f5958ed1c09c082a437433fe0fb4a1691a6409fc014b10951ee456b1b97959e42062f4e392cbda7ecbbc77115be6bd59ed239d35bf0fb11cfb5d8c0cdf76acb860ce308ecd780605c87358601285b30f2637f5c75af8ee7e3a5c2f5ec58df9ccb842596fffbe40252a36bbe6af85ea89768ff705fd851fabcd3440302c476bf8128b18659036c6cf47885ee83ac668c2ede3bf472d4cdd10589bb95e99e60432bc548bce26075df9b58c09265330763f765d3536953e9b6e3bf0404ef54f2c5111e0a5b9a79a95b8b91f0fb568e84d211af3d21677c4413616acc19a307b9e165e88bbea70c7ca60fb74652a4a0b9391905745c21db0318a14cdbe3d89477a01e51b8d8ef4dcf892f10306c114309eef25ce389249dbb943729859e06bef3b8069ae9c39e2758eaaa837abe69ed8fd4e919f906224f414fc97aa446670618405e0b1de134c310b210ead4948872894e06019bacf92d27af0bf42a4878f6c74c4f167d3c560b6f9de57dcdaea2f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a453d3acc1e2819c001b713e6a2555cee5bd061ea65baf9eb5b0faa0ee20aa053fe9e5213606bcbbec2b365e4dfb0ee2283229f346016d3f376eb4bd9cbb34769c9017d0ac81989423737902ec1092a5641bfdba124e932f8cf5b24a3eed4fadc95a1045c2a8da227caedd8907bd2a3e7e650bc9781aa1aca96a2960fa07feef2e952fd1f6b9c90be78935ab7993ee5ed9dee0f6b1f282dd221e68b9ff871d447eef12505c36f97f99a2f75a9888158919ab3fa536dc046d3fce8140f6ce9f77fc5acd05b12cfd687cd6eb55dffb62c8f37f406a92a27d8864e588d83abf104c8a5b678e74d854a25f34a6dc84d1f21217fc2e135d56bf8be94fdc8b5f11bd8b0e590450060b08fc9dffb9db512233a22a5d64563104fc994aa74dd2d3ff4ac6fe804ef4634e41b1b4acc5a2365a502f5de8d9535db6e17427e40582beb14092fc4fc38c3d47d99c7304cd3e1751d934fb856ae5bec9301d46ba88d7b4253f0dc0ace40356ffa55bf788a9444217440657a24ca30ad602f5769ab9e66ee719b396ffe4395fd010f5af27f6790dc073445dc43eef4cc8f4c3ba931d3453e458ac487b7d9295238ff2da910484201a8b43426a542b415165e66d9126b05335ff6d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018fdc58739c656adb6f57a95cf65a395ef4dcaf12e7816a36fdb5438c369c36a72fe92d000fcff866a9c58a438cbcd7f082d78d67187aac42ac8559df98a4540401b6775a0fe10ff59278b041865fab29da03ead462d30f01a2f08d43670fbf44f16ec80727576cc55e15bcc22b2d73a22b38bf73f7495b65cbf3455747130b832f4d98e913c6162e7f5e8c9dc9e334d7d5cb22f266c514eb0e9816b4c8ae8d18eece3f12d2da865320fd953ea4069382c9a84dfa2b38dc1d3ade5babf6c9bd9150d21a7c7fc33a3145699e951c3ab8869652649b6f4027ff284dd75fe31799606922fd98032042abbaaf1d2b9f6fc9106b0a163ae6fd91d75636ada45bea91afdb1c6fdeae804b106cc3813c4f3dd8698092febbb19235398c987e891e65da916cc35255bb561430435a2fc861313023e2a762d8a9f719d82101855a037cdc73e33a1fc9234514ac83a57507d1818c00488228077c125af6a4065ed89b3713d8d7825aaa3345fefd13b6d6960dc8cfae3f4308da52b6b278a6ca678edd02c0e399d2999dfb2b61d892e36dd0390987151f0ffb725e42a158a8bf1c419a34be4e9cfc3af3a9fd5d950f862ccb2cfada87ff5ecc0f09257d2692f526f550bd3f80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000969d85ed6900508fe9d29c402f0dc56687af08dbb20f293776218aaf109d09d83e4837b00edae4f830bd3b5dfdd0ac27de27dff3ef08520cd95adbf2912c9a3cb58417e76fe9e0b7f4dfefb5a469811a2bb9ad94e3722b405617e4e9379c272dc736f8b0f96bdca3254f8ba853d6ba9a5e1d5ee9c2c84524e0e3e0c4de5ca3b11a6b90eef065740427b731364fade45ed55c2e819962ccf481ae0361d157c2d60fc387c7bf7b7f27d16bc10fb7ce31c57be8e136ad1c82bba7a31fbf1b3370aa04752f205ffef70eba1fba73adf12af09960014c8d89c13f6309fcf2114e2b99448076c0ab323d521872c301be0a41c9d6fd12d3d033b737d872a2358df83f97b44ddcd97ec4b9014a01805a59bbf204887daa65015361810a6ef6b230f23a38ccf120144184077b7545bebf4e662ab583e638720c77f9802d4fe00d8f28182fc56987f012d72e84a3e311cce9edfafd5415869f36098b6ce55ce368ae876fef43760a287d2367a1cd58e03c2fe77b345ba795688647c4442e43e6ac400d741d27d11885d8ead16253651e6362e724d8bda86dd490133b9153aecf8f24b95368d285763320a6a80c8ea12bf620f501025a21cd7d6680cae6f06679f4137535bc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008978e806b3705c234ce4e32d0f24eefe53e76a96cdc44034b20107d81d8a4b64ebecfedb3f6a04c3f736f82338c40fd1bfcc543947d1779286b06bc5dccd2561168d1e0909b24abf85e7058f3ebe5217c1b85112fa4325ad5685809fc73dfa14cb59e18bd9e6e05f395640ea823a151f9a8ee637d845570ab6ab7baeb7ff83dece2e6b2547ea18773de33a93128623833545d9885ab1b6d3ad283e9acf49194dfee43b5dc914a00e306169435bc67719ab493a39e7ea59dca3d40edcbd8ddf5dada0554d4fd563ea8e7769136bd9faa9c4c4d82cc8a31c226d74287e48589dabe2f20e039746e6d6b2a2d51bc930ef0b270a8d540babdbe9410602c383a218c24083fbc6e3ddc450fd8e1369c16715ac9a9e34ebbd538db75a4b72ea6cfffdb18a17e73334e0a21d34ecffae9c20c34099a538e9e95f5b04b25b3e7e67b85c0f0d4f55f9df827e4088863f969c2d34d622da4e8ce40380cf0b5c2a2e95456eebfc58d06048428c3c7afba38c9cbbb82b9c540b8b3c6fb29980310512d260a532945c1a0b59c1e49e374296a8761d2b9132476a3ea41383b6524b339df1985cbad043720c0226f629d526f7199350f51059ef65d762e192d29809cca15485ee7d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae615074fa18135df590fce7eba726f803dfe13cf5b6ebc0da20b444e00b9deafac0978e5cea6aee81ff0f1cfcda61781a149d5fb45ad2e25afc72b227fa916652eb5394d4b28cd9318e7999adee4407e86e34fb664e628cc841ff103954fb3aa36b024e4410c29e2f899398ef52aa748c93d4d6a68c60b3a1b243ff521f79d603a66016ae384801ce54e675b85dbeaa3ac98541a88d975b8c7d5b313d942119520583643807e45eb6345359b739b0ac7698f2af21e789886da8a79ecfc3a902d82ccddd71e31ce712c84d4d7d2e8fdd140cc8ede366e7c4a698b80e4a1fb904ec871474598de086917effd2f524a4d439594709c5db254cc528b8424dce5e41ece6dcd59d4a42938337e375f9a418deda3eb1b2c2ffd40e49b5370c6369750391d15a9a6eaf0c5d7f5455bcc596bc5e0cdabcfae6a1f346d689d890780771df2f09975b098e272fda3f112996bd4374144cfe50f58c4cc09a4eb77f7124dda07f0454df82a68ca0ec7d4cfe817207fa2fe1857c846ef8979d51c927fec95e7588b2276d50aeab18ba8643605bb22521f78f67a18e37a135a8e4265beaa7cead39b9922935695dfd8eaf3f1eb82bd94618cd0320170279a13862a1b6eb2329310000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000947dd067d481ee08ac492fbaeba55e26c62e727f7b41efbfaa346f3cf1f2c0a619282a9df1f477c375537e3897918265700bd6ec15f4c1352c35fcf200f6ac2ac00385e2c0baf2110bc0562c5fdede70524735c979f822cdd09aa5e8534bbb657053f73b42b73a0aaf631287c302d33a6804b48ed1a9db5caa4b1eca5d37f242f438710d28aea1568c805c4c067d395199a9bb226dc3277928082a26dadaea6cf00a8fc93f6bf9cc9efd41aae5f8b668a285c6e713472aa8f417d3ba5aa4ce092d43b64bea1cb88b07bc350c1b83ce62ed11de7a6072b68327d6fc76bc61b42fbf38fac99d67b619a2ca32740ae4c473302b85b5fa433051867012147a72d4f0ea4a94f1ba14d149464ba8120ae13c5b0900449f8377f12c7a1e862ff4e30bb90b0dac126f5292afa69d81f1e7d514435d6fdf81c908d3d01496543b98a7dff2f7868bee5464ba26ecaf8c966b4f51dc68a4cb1417e6de3d95956484064d123227531ed523191f61928b500e6742b1bfe03fa323c7d5fab41a4ab648c381021f0bd18191bfbaa3baee420ed768d6b47ce84932d51edc4379481df0eafffbf60731b3ad4a339eab27e39bf4153faed86b4ef9b27ed8a0c984dd0d3efce47235c400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b908d8ad8239528f2218e520c39619daa6405c9187e3d7b71d884eadeeff2ed85af830c46ee717caf032aacc1deaad50a05524d6cea765f9e6ed5e3d146d03147b031ed914566580911b0df2f36461ea6a42e1deffd55527c3653863ace353141b175fdd504a46e8108dd26058d6b10a92669ac5edeef240d077c06982f0ee4d1cd40e4f7ec65c6ec20a54a393fe9445441cb79b28857ad5c87fe41a2b1f9e5ca41c691d32eedd521ea2fd4b1b5b3ba809544c613809f6c932df6b24d3b33db10e63c26daf040d98dd986087a3e9d4990fad5c1f8c74934a92a0ebd40e7087f265793866c40a47230f70c607f682a8efe99562fb98d0035299f1862826b60ac4bb0d5a06f6331491ac3caeb3a05f319afae9fd1e7562060eaad4930e941b10a86f1120eff8fc5d035f5877922aae9e0a82366141514d46d0732fb461e90d7a4be4c4069ed2157d8bf519da8fe78f7d4485e68060f6cbab803a6837f2e5f9bbe6c990570a789f94dabd3f56caa189ec28225cf7e4824640861f16351a91b3a137a92a602543b8127a5be267a8c51ca9cfb3341f63636fc6685d20508784ea29f13eb2d4031625095b71da98afafb4e24acdb01c83710cab6034664caa19e515a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bad894edc047b70f1523b72c884e9245e714eb472d71ed58aa254e20f98dd8a6da6999a55e4e744578305443f449ced691a24263ab91cc27b9100769d26f61cae900444ab2f796c758c6d2b7220e163fd91cbf5b4b20c9fec40306732b4e7da8a4fbac9a785dc7a58b4ccdd9a5d066f0bcfdd056f291e14d6737d4a0839cea5e42c7c429e576a7c91eaf4a7339227c7190bdf515ff242825a5b434d38b2117940fecbf6666413341903a1641cfc29e6d01cb41409419da392f0070d416e215298f7c8a0e3adbbefe235bffd7cf01aed691e021c69e0989f8fb003d0e6a5f9ca95f014c44ac326f4353802b9b261d6378d7234d02ab2af1088e0fd386d241792949a86cc8b60a5c203bc3ce6c333867cc0a97dd17db5c4ae3b970c69cb495a3e044c698bac180a9f1b9afa2dfa74e502c16a6d5d0e01b5c631254b6ef16eff6cbcdad02c6dd496ef3b520f20f8c71290ed3911c65cd39c17457b1ab5ee77f4c5226ba9d3df7349d1ca8062b9d708dfe533479ed2f4bcd3bed2c0e100b185bd77a26fa7a428f4556247a0730ee1561368641d91a42e2c36599b999abab6afd24a62a0ee789b545c64171af29cc7c8349cfaa5e235d037b8a51c6be2f634aaad2f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017973286ca751bb71be1744a5f49ed3353795ce0914f7de7a65f1ee79c70345e181724a70095576632d395d35084cb3cc76cbba3fb8537b95750a0d9ec35792e41e5068d1fbf8f884497b51a2438e1a95df08086a99f4e5f04dda80343bed00e81d4a9d91d820c110e61275e5fe0576bfce442f55ebcf4ec68936782e862c89b8008e186f6f3f01072ca3cedb1841f39ed054ea753c621899b2671eb273833d73a431f46bea7e388c990013622c3468f5e643a3433022f5e3467e715fbe5759284de0b9ab3ee2e4074019a6652a816c1904c0af590f99b44ff4dce783e2f731e4c5f4490e27884de376c97d1ddd80b24808fea0baf3a41e6a9cd2a227c3edb4a2f738bb54fbde02b6b2a93746a4e1a58f5da7464f8f7081465e1c596c0eed96d3a311c3d0e94bfde36c43f06bb931c7bd76c9b6079b2086fff297261ea347a5900e990c5dd6842169b94383d4f0a9d79d5695f242da404b6b9c1d315e5b147e98d54ed505e187cb6eefea28789f26113fda3cb9d97b305399120fb3f96771c6ddd3bbffd284b77e0694bdc1153def63165f86fc1dd1532596544fec5b4309c077be8db0ff64ae6326a52b195cd5b3707b5f7d178ade972ecc26e85ca3ed77660000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102fc9c6b23a07ab08e9372834650e0a2c27f3d2614fa2aff0770249be21b2c78164f1b765add68edb0a3ea9a90b3f1d34d0b6d29a915b6f4f87fd94021d123d5bf111f9df3ad3a77dbf73c6253f0bd7dd85a9ba9b779a9655a189dba58b91a5a2b366beb091761b349307a4c92010e5a8cbe4ee18d8ea0e527961536297eb909d97dab05246a21dad897558f2755c2cfd77910444f2b8ff6d6015faaa37cfcde98bb77a7dc69c52a5a8a5a8a722d7c9951879fb07c4d2e2c915a4f50be0af799ec55d6255ef2a4188101627b8f0af5d62593fca8ab40e46ce868eb556d6feab42b2d644c6d5ad46adb8097996639d793b18f028858ae0444b11b2ffbefebf3e2af6851a4a122905e990dac05ba3bfa7b39bbd9d64cd934cb2598d091c5384a23d0a3bc9df812f970fb0404626124309bc4c525d9edc8fd835506b7d022f61d28e0d43ea51d9b6586468069e8d5b9080d1d655ed4c23a8548c6eac071d0aca25c1b369ea4fb6728ea36c7cb897c84e0533fcfa9bcf1d547e0956b7f713f5e92c6da1ee694ac1ca0ed9ec28e56349aa2594213d3f5757fe2f414bb89d50d2a319141f7831ea17806d945aacbe4ae50cfe794ad7053db3813d8c7ffd64268b5fe9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c579a830f98f5b75118e7acfdffd2c2fecaa491af50d91e686d7d29ad9ce8ea500e2fbffca81480a8f1fcad230227f31eb6de7a4ec8e745612292ac2f8d6396651f8e81f42702eefd62abb70b06404d0dcf0995edd38101f29a845d092710667029f367b0c6378949172934f0a6bdabf808c62d7c850e9a16e636558b2a796af21e1e75e171814e9a740aecbd8b55f08d63e25befc06e40f8ea7e5ab84d5529f9c2b9ab6b6ed22517a9ff492ba6697e39a79e7eb5afd8c9ed214b4a93cefa56c04716cac2eeb800675c48f418268f47aab939cc3f137f2e3fd87af880df146be70fe9fbe7c37b2109da9d000d8819222b91e7e126e7d290f6270c9e0d3930ed57b27b3ce572bf6224a6cb3df31c2a14b529538fd20f64eeb2c8668b92b8d25456dbaa3f6458fedfe5d605a0e6dd4e882c05afc4ee9f340dfb006775b23630e7a7e3a34b33cee05b88eca9f32a129295c85bc8751067deaf0b9ab2fb74f62e1de0e788d083bd2dc99213d6bbc5faf6ed9dd76f8c99269312e4197b95b20c9dd6dc96a2cf503e56ebda23fd7d379d5fa6ea6315ed1726b0bc1a40c4a2e6e871e7b731a9a8fcb1ab77452872cbf5d8bd6a43a27a1363d9f987ece12ec33dde8730000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302b2e7571a0c224bc12f78b70ed604c8a2c51543c3e931fbf9780d167d2b10ec3e0407b0af24bf2201de1768666cbde264e4573066d784748054289d7a44ce89ed3404dafac88407f0bd8fbdd6e63625ce4041104caecad3489d5ee7c7b49023512f6e9cb00fca97af0b804508cfe8df6444ed06f51462c140459322571d68cf07a2213fc1b45be97745067246fca92e59a884b07c566353ac2b6920e31f9ac1d7eaf38541830f82f0eddab31039e7a7c374bf205318ff378f94767c3fcc34812a9e00ac8ed649a15c3403ad2b55b6c9b425d116588caf56d5544d05180effe12e1a2890b0df0848f39bf61a78a8c1bcda09328ac6e991d27de9b348013d5532b876044529605b4477dd040920cf27f40e504c046bdd0583176038fb4f6c6fb79a5b98b80e3009073b8feb5c6c128749355c188387739bc352a0d4c53d170ea28c76b89f4ee663bd38809e6286637074ee2698a6e3932b08e77d3ecf836c91078603d65ae902c9cc3d6721cf739357ed785d90c570df1e52c369127a780d2229b2a404d0edbb0c2e4efd839b36f9a370336dc5ea348931f219698209013a180c27b09ff6cb88b6ae5c220d7aa2e500197e2237fbff793dabcb3407537a17f430000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c969073939cc61d82876f1135883b0d42d9786f96a90b1c64dba1224f4c6e4ed45a2f8fe00882a9ff5819dd007d76096a9524f528338c1215ae9271c3ecb33933a4ceb2f4b5e97b98b0d664a6adf171b42128537a3306a253ec0555d133424b54a65665e9c7376e78905682179e61ca8e15fcef965e6dacaeb20144815b671b20a93ec07ec14310e4084e867fed84250199a6434dcf298a33880fe7cfb9bfe7ccd44fc7db9ce7659484f133d44a7ecc9a3a660666283c663b0f798cfb93458ac27c5be7b1a827ce914a14b005c7512bbfa8a092a0fe54a003ab8848a3c74e0b6f402e02cbcfbce80f876b97eaf8af1427caaae11b40056cea77f48e5974526353c93d5f5d7cf57c90f82447134095843d0d7f5bb43be434f6342c85c7eed0e2b068d11cef7ebcd373752ed8995cabed3402eb9342869e22998134dcf8a163ffc4bf720f7a9cf68cac011587151a066b43fbb65587981dfffafb7b1af6e82aff4fccdd883630de2049e0274462337b5ef4bf72f5c5363e4a7267576d8c3f87c26cd13f78c3b180048bb66e0a594e79e7ca75e8877cdb9806c8842be983d93dc5a73ffd392a3b851688061b01f67d228e83761a56801c96c9e0cd84c9455580000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f524d365df8004226aaeed10cb82b9ac165a31a3e3fcfd4a39423fe119c02243bbb954be620b19a99d9636de73a552a0a6b7a4a4b9a82e30e63baeaba7cd6db32c90774d7346cc9518a406fddcfcae2154ee49ddc65bbb95cccaa5c35b1282eaab8a70aa492e64ccd578bfdd692e7bf11ff9a080b5d68f6ca36f30ef0e59b5f01e02d317a3c70e4ad3c5ed7ca30627719982fd8caf15562f8a8b0fc0be770554be09921878ae878dd1818043e6bf2ba999a21b155554a784e82969cc78438efdc6502d8cccd973435e408d34d69cfabd75899601f5299d7487900f8f5512180d7a80ab9df747840380a4a8e3447adc59caa74f38cbae845a9a1b7e887069b690f8f78f0898cb392ffbfdd66e4d422adbf9c09e59f3bb63252ba834b56ca43680268d4e584b0d7fb136d4bc2e439b0710a602147383a2a162ed0dae3daca0604f7260487151dd2057715b65a4070eee2f77912f2f538a13242f99fa2116c89b3761ab7dbd257c357eab27adeacc720097d398ccb51d644485f955d842c79a53e6ff8789cf551633df8aa27793f1623be432d2a2fb87c446b172a364b073e6d21148f8dad5ebe62f677f519758f0869a3a7108c4ed3eb2a0dd562d26302f6f80000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081a7528d0334ef773642c28d8bfccbaf645c2831bed1246bc9d712f5dde2f749fa505513463f4f27a54c599831f53e61f3f7458ad47af102f3a289b9e64c81ff52b9870ca50ec46423c12ac15e73a473c8e57d0af39e19de1a2ee83202cac920a960b15fdbacfddd8336a29f8891aa3d274585379eef6e766b68f1cdad6456195862d8334bf17a57075f5763b41b4258fc2651c5c2b2068f2258516cedbffd348a81ef09643d4d0aaf0500df1cae38b907849d2f387218176df5818e20576454280ae386700adffcd1d911ff62f0321fdd06b22cee0b0ce9efda622da18034d765f954506ba1d07e087497c4c9abb571a6979e65e633d8e33f7f187cd797afd5a76a64d5b9c2d054b0cf11746420d7edef401717803ce231f0f264d098554cba208d4f401d5bdd3cefefc3256af13e900849ec9e29b3b664ec0feb0f77ca4d64bb58a586092cc646115c2330c14f6e6eda14ca5295d7ad7e7e8eae0fbd651af4c4546ed7600332a9d936f19969f486b3f70c283fbb8fb6629d5cab20acddbde9c8c4c96281e3a5d96c3b7bf858a445abe05db12882009d64bd4b0b2a8cf204664d3c877fe02e84b62dcb5245e682429c1f7330939bb5221d0185b7942ed8add60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a561f9f55bd18cb7b0b1618a233d164d573a92eb1c3d0f35024d129b72dc102a61819b2e1d156aa24492068c12f5640516401e850e5a117c9a16bc6a426389f6d5ea47bd71f230a2aec972042d4d7cde7f29c08ac17b8fffa2a25ab3d75a292b83201701bf60ca6e5755217cd2cf4ce38d0299a8e414d0b9601fa8bb4fbd14dffc492e6b8ae0fb5b33ce0e5237ddc1f86498c1dac3addbe8804c551590cf92c2a28a1f28bef45581c619b5ac786e3dbbcd3c086078b4d6d1943d46a82c901575d23bb8cf8796b8483df4777c92442c2f3d3657f5e152768d2e6d3a05af398e168e963704230fbc399d4673947449f7f622d9a9e6cdd899f8d78a2352b7601373a499633e3a308ddcd0ed84e28b4e557f6d42d1945ce4c0959cc02fae6b29878c23e50934cb89aa963b45270acb8373ac44c27c294d1daa1b556fbea77646c3a0b17c6fbbf10e98bcdca86325cdfe0f10de890c99ce43c79b77fac62cacdcac757df0156645aca3b2588d329467bb9bc0ba8d3bd9b08fb1a8dc9c930eba2c4eccd73041ee123ca043c64cbce584ddf87dd3e07a9c64fde06c7862bdfb32f49392c5277c719ab47f5f4a6d261b8f812620ccc2c74b3fe5cde73b6d49a4ca02d2920000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000874ca77a9b2993f3613385e42e308960188f9590520d77dec6b050197ba244a8cdf40b502263c788d29eb8368dbc12c01b77e6dfd61393302dffd1660b2f1595559dbda831bd633623af1ff3da33a6907d17ec9cfa108ff584fe470c222fd99d5fd4c411fabacd12bef78767c181c84fc9addd023b7a110664e3b5206762c461e60162646ce103d112812bd0cc8fa5ddb2504ba8208ffd8c6a11347ab164054c0ec35de42873b1fbef8b0bcf753d6108f12a4b9bc99d3db6946bcd1f156725f4a1096acc99007304b66384accd6f021c72772c3484b54d94ec2aaaaddc4f0016e22a202cbbf6888c865bb1b590acebeac9ddbbf7016a6624a9a71d12e640d1ce25dd3fcd16a0b3e7b58158219fed7fee214597251c3e3fe5b106fd1f5dbcb5a5ace2e3c9dffb029f94e189c777b5cfc7eb9cca49c9ebf22e1544fe7fb84141b059ae62ef8cf2c0677d523bb5ab840b5d58ab05fc7c6c477a4147c787f97222d0a7f82c98e2481c5c25e1272e7609655b3b8dbaeb0c547fa240f2f562770dce6114e9a32eac7be643c5cbb7527809bf71c9a51edc3a94f361e43a23d8fea3b2452f82c8cb6a9f766f12f9ea32f13c29d56192be99bcd1d48940574dd652b00990000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021443cfacda4c8bf79e4dc573b0135072a597c49a3e4634146793608ae8d32f53496b55d3375749fafa12f6fca34262b589ba41de64a7c24bf5ef37aeb969ad3319b9b952d6aecb92e2c28d4199974835ccc34c4d9163cf2581c11d5cafb3794238ec9fd25da5ddcc4820f6933f207433a2a028b587785f4f5f4a311908990415fc054aae3cdaa64b14b4804734c1cd93303d5bd8a7d9dfa7dae04100c6c8d5fe3a15a17a49d9d561dab5db5ab32c6f26d2f0da12ecefeef916bde14b30fabca975db4bf910efc9a9e27540c0ab3ca122dee01e447e8cf73b356645e6c7c64300d35612387aeb1805388040d4efc210c67ee5054fe685e7e4fad6a49f166053cdd63f993f72e8482c71e235c4694e4a53eec5a4580f26373e6a22dbbb4def282ba4884987a84d9265d06c544dc0c8e686a0cc9d338bc8040ff2b2dfa5008daa33721ee1a928afc2158915e7b8145b35b05ebe1cdb29c1a2693a60a0175aafa0ac5cb80555376e850a185844dded4ec873387542e0c5eecedfb88e83d6feca03c122016cfc56cd20d098ffa5f46a1e8311fa1bd7d77327096d9e8717af55719e0d8794f2a0c7d8e04e0f472b6ddb2c16335285e330e5679c07ad75cf2509af9c1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091fb8513652226eec791b132959f7f7024178b62411f55a5d773593594978b60070b0a3427f461321c1e03c170e17ccddde71c11b698b00152489135b6936fb391d906f00d26392c3a1f08df1772a136ebc40d0051f69ea938ea963d4dbc30319755358fb9f10efc4d90a1ec48b3c9a40846d475949aa2879ef61dd13478a92ca38c94cd2c99ecc2f09742ed3f4bc26bf9de24333404e7657e708cc2be8a674be4ad1f1acc41598884ba1bbd16becdfb9753f9c94ae284bae35d4830903cf8d6f3197416651e00fb6896e1dd4296b75eb859d52e6d19dc791bd0d5b9a959186ff09eb06170e1dea653aba090339ef839f7024e26dec9059b9fa127b941caf1bea4f3ca43d66671db42f7fb02bd18621ce52a3810ce314654ccd96ffa8e4c09ab045b045eea955a0052a243981ab0089ccf928d1987387b93cb9025a205c146bdcc7f692ad8dbddad663aaebf91e3f6da0be0544e6f35f64a62036ed6e54656dcea480b6a92ad21033948f3c56d5f0460867e2752fe98ad5a33972eda91ebc43f2e4d1ea0993a94ed95f5ee6288a61491ea96851cea0e040dfd560853046089c1f4f01d2732c96166c75e69e6083e054bd8fed9142db1a70c3616ab0df0dce43c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000309ec2b11b62ae4c3b0ae8435c7565e234f1650c6a6ecabdf326679b905249d13b6bd49c87fc38f999a215ba44c15c638e29834a41217ccc05e30f1d3dcfae0657f09b8efb273061b16ea656e54e19d2142317d5df005c1aa22732c2e10eb29e114ca652e1b9e1e7b2b8e92be196730074cb520fc25e7eb1e884be87f92377ab3cc1189e4eac886e8b23c0521bc6f54e180ff4987652507f7e9434c4ed1d8ce984eaad2142fb95f681f6c9c34aed5918a08698487474b38699c2a45bf1ecd02ed7e503c9c2216e6b4200ec4046623b2dad45b038147094b482198975823f0274d5b6283f1131fa5566c3b32da658054ec88dfcf4040ccba995b8a8930b7dada28a8a4ab95c594a9b742b1d7f23c605103fa977d41c68260c2f687cc1bcbb0d5d4b6f19e44ae531b49433d6aa8d4f35f6abf1a7e40884e603c35a9adc85de636666c6bf86e108018a30462fc9c6136b0edd4644ba2bc1911f0b6f507bcb516a1bfe8c346733ab58fdc76947973d37d9fbd46b5d857af280ebfeb5a5a0f406034152bef7142ab6dc48e20307ef7d53cbb96af4874989fe1d271d6431e101ed358d2cc849130b4f2aa8f08779f5b1ea71d526d443882f9552093bea857b59e3e0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093f56386a89779782f6b90ffd75bff309b039d344aa200f816424c948bf8aa22cced64b839be1f89d6fe5333345decf15dadc61bdc30babd051132581cda2a99dc68bfc44a198a9f2c6d4e29a551b9f39ff3c277a074b324eab9c1a7425983bc2d98c0724b5d35ecd46b18647dc689f933126d5eaca56948010aa220a63e9970f056f13a93170bc12380c6881adcfe208998a6c8138aac27c0a98c18ec3447fc2d0d5f6c0fb0f3d0a3a680260aaf31571725c7c4df7e1abb365f84d603a36dfce1742bf98fe6d7206e9e8dbabcbaadaf8dbc9e8572e23f7118b2e95ce7b34d0e9a673f48c6b7beb36ea63a9c1e784a9739abfd36b3d7479d03c9f3d4af4a5bea4f5e3098b3ec7521dee771a26ca33627067c64ab04104b93d881cdc0de855216e9b4fa97cd53a5e8701a5ecae0bbf293d3d4f80a7589ed6a218900c85859679b248b1535eb878f8dd816b9087fdd4f270c6de9af204f63e7abca7abe73659fa63c63b45d0d68d623fb783b0bde20c221f6c8fc965a69ce65e8c3b9b60e356ededaa6fa64b4eaff40e0129a9f7846c5bd7e2fa0ac6f6ab971ebce32788821663c2c4df34dd2dcb7b2565cc9fc65f6a6580e4f5a7018c3661ba6aa44795e32976e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162df95069f5d61f3c1e13fbcecda67cf7f2161cd1a70c5a1c0175086b6bddf8d3e8c15c050572fedb0f0bc940ebfde15ae24f9369fe461f4e51bca47d38d432cd8265be429215baf11f0e019bf3772d84023505713cf92461afc3ce9397763a36e2f38d4b480cf3672f538b3f04b813974967f276d28035b708d1373789cf97ab88639f3cdc2f767dd4b312f88518bf2d867291995fecebbf253207306ed2fe76ec0620c7bf70611cd4fad9043842c849a642ac1e0052f69b0f903fb3025d9ec089f022ece8948a3667d5728f8b4c5b34f10ce087a7ac30cfbbaf607992a030d28c7630de81d9db9f689937aec1a6a85817a9371881fb35c975ed5400c4e7b0bde9904d34f2d50dd1290295fbff23d795a13099fe25f78dc3d6d598f0e95e28d270941fd1ce12a94ad863bfa047bc974399cc7ec5e608d9f16c9b100f72c14bbc2507efe17c8a8c52a5ffa9e40a67808357f8c80ace4f53480abe7f64371a82fba14e985b0e895bb87e47803e08f91f2b58cb6b715ec3376d9d40d85c5bd4d69054fa6b21c1fc5bfa93ad172c87d73a21a63d930bf76e9eb98a03cb216bdfaa46c649dd15b29433950ab423047fb8f23b79120a47d4056ae3da2a661cf958eb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001df7b99a07a04301ece55a3f50f5080cd0937d906f5126ab8d7018be278e4559a454626c3f55eb5b3761bcffd5d2216b311a989fdeaba80376d8e41e4659f5767bd4550a9359c81eb607b02d944a910451e8b1f93700a6b52e486b293a2e391cc8c7b152e481ea119b809004df40972390dccbcbbe49952744f802a252120b5c363ded866b25992dd05c1b1cd0b98c86ae3d3a9cc249bdf50c29c5ed106a0ce3380fe1e236ba18cd6ee4b37fc2eead5ce287a1d1835445851059382ddd775d16c26adbdf7e7973131423bea934c8c032de696446b5c8b3f15ab3531acae5beda4b05380d3370393a52166c5eef706079ed99868073a3f5045347df279a18f4ef8bf95947ab70ee8d00f1ebaa7f84255274730a60da95718da80fc804efe587295dcadcb786e71f4b91c433471bc2d7f207193ccadfa2727860ee8294f4f734817ac1c4f45d873da2524e227bc513f58d8b8f44b092967ffb901b3bdc573e43169bd4fd68f78de8e82f1c4f6b25ebfed51ae486eba17eaac604fe236cd20f2f4674090d4997a2ef202fb0fd503a5cf45872f3ef2bdfb2bd975427d3d77a38db08ed904d6edc3a1d064c39bf9924a5a191968378abf98ed64d66315824debb1bef000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013b95d71433e82492400c9342b1e7bf3f4979223c5c96bcd3649fed1876dafaefa6a13f1c04eee428c99567cb9b2fe04fe5f1e18be5bec6f55aee42d1d83eaa35280912043ae0d5f804fa8aaaca6ff275b39cd09f8be27f45ef4977ca18eb18946b139feb85db21125c52ed3f9a43e13f82cd74e5cad9680a8def463a9900e2bd9e9c7d67a015dfbdcb0fd10096149c3f04063e59b3a33cb50d540f079be0640eceb4b29937fa7e1eb77d1ac42a06262f2be97b5d6d2e1fbb0283efe914da93040355bd385a118a7a61822b8a71d1716ca427bf4270fcb6e512f4f4437e32607a8a6d52d5a268008f27d9dcf1c81d887976b9f584c263dc4b795b152ca2b866427f6c3d3b1c54d0e4909d44008722d1e4c128f5ffe1832f3e969df993f048d9ae68bd9f35aee906f09fbd4370288bf2e699fe3d69c588fc2a08a46f0d84915dbe06be25e0692c9c9a791d55b464014002100aca8f546add6db429463e1646b0b512d00b57cf9587b21384aa95769cccce20732a4c27e954e840793ae1d0c397e163f12394a67133f89e06f64d700a90466dbe1f6a034fc408d38ad8c51de4442f9c0d830e4e2e1e86a5841a5b70330c12d15577b2ae2238dcd8d7f22c6e09a4000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002733b256d853f1708f67d337dc6559f077c433c12e1b5a38aecf4c63cd6db4b28cf05c860df480c6033e59830a6529a2d93a1299b40f1bc7864c0a12906343fbfa7b59f1ab9f368bcbd9b98bb771c2a637404e37ac34affcaa303fb7a11ea2bcd2f9d338d8ccc3ef899cbdfa05204f435408b6faf711a3c2718bd6b46a3c876d10e14d8ef40c8e7deb8ac6bdbae69edf71d16122fe549c1684a2dce92424fb12aca2858dd9084c6dca30cfecbb3212ba68c1d4d4e083ef6692f4fa899f70dc9f47ef15530a24e6af03895237083a900067981f4e2ad7dac4983988db5e4f57d808d00c20c4c78aa18441253ca89de291885940ae523c1115a95b3a49a1fbac7ad72683a0be31bba7d2d7b482e3f6db8330a1c3f21b6800c1f8d6a837162a71870d6d3e6b93e6d325d081363f3c4b2c984b0ed99f4c2552b53d3a5bb98930a5d54332870537847215b5ca81a0aebc4dc1e8f72e09cb20d0140528eff94fdd2b87682295f1c78f339ae518e76ded8f7e5b7e574b624c08ad740b852144dcba6f4c9d75d5551bc891f5c06b20be09c2333395865ad3e0f1c4533e9d5237693d787069e5d54cea8031810c59e2246775724b6a7c867cc133e0d57f8c9b11dfb57bc0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000796db1a9a4197e71dd46bae909c9f31705028008e0a2c84b5f45a0b618d845ff26e71da28ec24eab2cafcdd637089f123ea58a68e5299617504aa61665c1daaf5a4c4246c9d577b7dc580b8e7250967163ec8fcb7d0156fd4d581bf863606a568e138239bb5c0deff3fbf9b6960eeea05fdca5fbb1cfbd1f4da80750961e809288f24bcab24282c996f81f9de165072a0f6d5cb5f01402d38acabd3c4ca4782aa69613ebe781b7ac6ddc084d82a290708848dd8b9d8b9229f596c24fba7de4fb16aad2e47fb9cf59b013bf9fb5c9829be26d7df664769f122111f81f0f548433a3208591a966740adbc13ca2a344a9c3c946795eb956d50abe9ae1950bf8112b646053b42a7e6385399377adbfea9065a97bc3de2de4e764fe248e4e09d3c7aae5869dd0333152879a5894f79d77007ce38285d14922ee7b4664d53e99f09427431ea189b2dd64a090366b6fd0fd81bb79ef360f6a14164a84ab6da64da520c173ec8338175f9d2eac80c926e9c8c9f66fcc83d8042bc4e8600f6f219acd1fe7b2c1c78e7b3ad7318f4482371d2f695576617589b6864aa2618e20d27b11cb7177cf13a1011e69ca721ca63359701bbc4abd8cdf93e556fdb7752de3fda9f400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002028d748f8bb8aab9db4447977401061eef672516287f6a836f05c2774ac4fde8d6c3937695c82ee379125f5fcd72e486a3f9ec13c979aaa6a2f262ec345746c990e6cd63c96e53dde9bb2b9ca505cb3c9fdf52c15099394dc733086d5ea8636db202933955e0bd87298a16008cf21ecbc4106170cd3eb6fad5c527ca8706d4dc687689c0078bc3c013cd3110a4785dfb457511f33e6906e872a11386850deda8878fea839bf7a93b6f90971944ea84cba5ae315b77a11d0cad52f67390d9d435e83456ca1e52993d577dba10cfa15ad66bdead41955c25ba4847ec8e1313dd457d7a819dca7f4e1c4e57fdba2bee424378ddcb568b6549edc87132f3d8a6c60283422bf5b5fd626f5b4602ad249b9db34103dd9f847e2499ccda6ee461c266fe9d6842d8a7335b62fcfdcefc6407a5f1dd310074333d72945f4ad29f239d7d00ea74e950cbb3db35ee352d3945daf07b05a0de9f45061f75df139552f2c23210edf0d4326de87d518ccbfbedd06423d90c2b5d2a8478a28926cb23a6cedb38eb8911f04297be474c6ca6bad78721097d3b5f61a5f17e3ad9de74421b167969d04c8382b7d318605c5240727c62e8392c2e7050c7b31564e578712f808827083000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089e31c0bf8619809923b0509640a59f8e76169b84ff97b27e5085ba70723f0c410736a54a22f8480db13b04e6bcd62c69bac7931c5abc0decc139b545c96a0e102485e544b6d51a4f287d5529c2f4c41986532ceb199a5d76c6451237f409cd1f51e08246faf4c76d4636cbee817f2a252c134b9ec8371bb35e0e761a914fedd80184311b04fd46ae9f1e78e5bcdd06d3f458e342a231605e8ea80cce681a9d699234bc83ef56f984d96017a0336d4d08785c9a24546f4ffec271d90cdb904035e45ed31e680eb7f1366482108c5a36c0cfbdffc0c79134a001ac0c42ed633282e82d65623ec957cb38307b13e5ec36ca737702585b78218df5b1cfe30c1f19590191c802f4f86922e90a01d6c184816d8af887a0437fdfd3a5b216a3e181045c355761f8ed6718720f5a83cb17f1f33152ddfc61ccfe67c4c31403c7029fb92eb2f4c85b159b55ebd552afa3977eb07f5a9da6e358bf3fff706803b6c340125c2f7ef12cf24498abc8c6293995bd028b4d118c52b344ff9aaeb92123eb797cb7a9909b4b6ef1c2a15c3fecf88258b8261712ee4a3de0c19adf6561d99f4085c49a6d93b2da6700083b086440eaf67d1e3339c24a7f5bc9f4c3755db895e5f570000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017bc432cbeb1bdc275edec8458b3637c02ae4e6644493c43d529393340f25cb2444d97fa243b9bd71a3b796976d838489f7866adf7e3f06d156837c8d2a98422fce7e6b82b4a5ca3cf1a63cc84e4de19b298d7962258b4c82cc5ad308777659b13e228a48aaf4b3cdff6b8797904c8c92f7c01bee0f67b03495645fb4eeef1ede351bbda58e95082265c75ebbe25f0dc82bf8c96ab39b07661a6cb36c87ceb6b18665d5e300afa5146f84e3c0a7a1e5fa5776a1d62629544d05430d74b53ea972504415c82abc4c9056b703d861ba8b4c2cac1fb7e185ad002f2af820723bcf85218f74e88b348ec0d39475a6cf628a49e953944a0f5cc567d8800bf5ddb12398eee02e1b99c758fb5164b5a77b215f442e2a93976eedd7e77092980cec1304d9a436cf36aeacbb6009d6dd6205850d3cada66938d604e7a026b926c25b4210a31a5430726a3b2ff2064fe02e887b3c48596c83965ba6453a755f35a669c687345023d43ed194bb9e3537fb202f73a7f21d7808a10de612681641f280d242c3dac3a2b8fe198c56b1c3a5d3947962f9c791e0625eb202049f2c6299116f3a35a4407b48f2d8b3e5267f683b7f0843512c43f6a28b7af9470db8155a34e25e8a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087b3cd95df3286d167e1d8ac2b1f8e297a60a75c1cc1eda3be769fa3f4e15f943b2150419fdd140dd028cbb93c7011e792b944ed0e2046f44821c87a6933dffd7339a159378666fe639570e6ad80c50bdef1770fdcc014ab64c88b76e0e84e3d07864910a07933d2134958ec35721018346f36c00eef09eed7e31e489c4eb3a89a0e1c14ac493d1a0c85c9b2ce024a8eb781cc16fdbd09644b629331bd49db34748ecb64a4548d2136ff22a766de996ee3ca0106da3626ba2a76305fa515c73ab6fa24a4468905e518e6d9a7505fbe23ab9369cb3958f26a96d367ff2e53dd6a7296d799ca51567230f0f38719d682dda33fe28e08bfdaa4b0f01576853a0bf356752da7dc7839384432a1ba6765e950123999fe6cb4b9db83d07f5e69c43d3e3ce34d575431b35f0be2ea5f60809667ca101280691b8a5aa8533d538172e16400fdef992e11997c9eeb3c554e24bc075ff4c540f38748b5fd834076ff6c393e19d887eb2b0f9e611cb2d98219505245ba79ee6fe1f97143203da7ce9dd370e6b34ec4c66ba802081360e0a4da0d3397172fbd598dbba8cb34a0757c0cd8321039d7e729e33e58b188ba6295660041901d528410bf7d218cf7aabb8c1b629363000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022ec568d7cf3fe502d3d1d7c06c237311472b7831ccb88bc6df97c16b3343a6dfedccd2c94ecb2c41f48141559daefa43ac24ba5321627093bb072c4e926507ede79914fcbb2763fbab46b0e41b81b5d32632e83c49974dac9f12ce53804eedc9ef9ab47457c4c87ad6e079524bf4903632c6f6ad4799d4a443945522d5e99829e24d8d4ea9bbf10ab7f256ce8e55ad747438c9afac370a6197b3ba296199a52c1ce34bc512f8567ea4da8b32a1dc53927e70f5f2edaf23a7f1af373f424954ec324790900d90dc163f2c0971f1fd24fe6bb93988373de0d3bc63a888dfc8352ac2edb0f020591710d7db0f4f47ae771ee0c19e5681ec519730e3f3ff34e5b782c288c4290badebd214fbab002f8f3af7ece20a9746355c5066018cb74bc7d423564220a7d0ae54965f820f2c4fd33b61bb35d22b158b6d274b91f0ac9ef3b7916acfc392e0d56ab3c827fb2a6413b3f039a18c1728995abecdb7bcd74bdddaf632f3857ae8c7c39ce00b5ee42029204e13e934313f8d1e713723f90fba40510962f68f304f3a933b2d72a7e3ba402b3a0b8836fc264035f557458984009f588b87f24dfef5608d82297ddd5f3e2ca0fb8ccd0e1c1dd3cd31f8c1c081a5d0039000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004dd59df50ffd463d6609af600f6266cf8d82ada3422444288656f338863425a018697ec66500d8f1f0dfd1d7d64478f52946b65d0a9951bfd3444736db9bd80f2a79e8f547b07f78922cc3f85fa0f71a7d065e3c9338029718dbef5eb1c6ec5b02543ee12f3f6276f1cd52dec1b5427087023c5fe483893918602fa04f0730251b5f2bb17e51189ba463e36ac86886ebbbf6c4bd2c40cab25edb3168d9f220b8bea5369e1f7b7f2e7dfeae5af9f791e67e3d3789b5b5a232c0fbe79e67d93a7e6834cc4c320d6c38edd2202e5bf6ce8801c392c086ff3aa629b75d4febd8b1ab4712440be03c10b953c8b0aadfa91cd8ac397d1bdf73420c11105fd1de7c7259e3ece2cd7d7dc818d4a26f88b730040140533af442b9e01409dac3fbfff7d6f44ed0f4ec91bb4a802b4bada871ef75f25a7bce2d3a1ed99fc50dbb3723070a31b84eb80186267430419ac5472a394735612876edb823ea237f502960f5e737549cf4fe80d3b5c7d3d39465ccd718d9e5eb0e01b0b1dd41e1febf3d7fcd1a7a15f85ff12bc1eb2ba0476b4b4fc482c785eed0ec1c65c6117bdfe5ddc4a4fa3313438ea137423c4bdcc71457d47133b53ec0a20538b1683f241b72510f989f0540000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8b7e4f5c30d66f9fb0dc99ddb4d9466bea4a793b6b74dec6f02a71ad763a1c56f3e86bd2a69c07087c7f9ffc916c61e9fde58fd3bd78dd237e4c4d0949eab0a898fe2cd604afcf7d97251de7596c5cad556d2f5c4d47400be3d0d0e65038de46d9320e93ffe13dc48f3e7c4f0d0e2985066ef3f828fd07797e9924581f4f8e66422f5918efedc54a81831eeab918bc10197015d651d4a99d2002cfdadcde9a1ba2bc3f8cef2960e82039b0b3acf219fb5c83bef745ca6a0081b8d0516edf652383cc731c415cc398be033bb683fc6e76e64d9a0a541abca289ad346867870649a3133c61e84b3b8838543773358c7b6d9dd2765cbffaab7984ac229de77278bd07a0e6ca3557bb14b85ac69dfd7c644d6c82aa9253792e197e4a8a3f2db1a95399678a3b8b43b6d1f5251344ca4777c6c67ad9a8733dae68c0bb0f5f00fa4484ab662c4c9c16c1ce87240c29d76ec110c329db42de7e20b42cd8db265a5297de29c0d1dd6cec244dcfaafe987f59ced62de40fa2c5a7707de74a9bdb982313ccdfdda7b7080400168a4407efcf8c205f4175133399d8e45f05c8bd0e1ce3c0bc622ea4004a441806492e968ad735678fed75291a51a215243becb864dd2e15000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002faf38cb5e9a1218fb7b5577831df1c5bbf9805d0be3c69d22756ed6182f86cee6c24a196e8e4e607b1e0557890c85793392b528bb72082652e551b96b9343c952ef3ac1581554c9f30467211bc118cebda95d47db1413015a5ba158868e62810b3d193a3dd417d1442d70b6aafa64c5314adfb75477982f9aa5714cb62c6579ea2ca70da36c88206d00ac2cf29780c402d03e2ab869e8e27ae2812f15d8c85240e9610f1556e4974e8c7a9440c4aeff9469a98f4f4eb555d0a896bb8ed18276aabb2993768536394bde1900e031ba2616efe0074c0c33acf48c6b79a09f7983ab54bbd3dda08ee154b2c9c947d9f7383961405c582de29460cbb2f757a4659cc29f6af1e383dde1d5ababdf4a62ef423a6f85558bb4ba9c085c9b8bbad99042835b799a8731a7d30e9768f0e068f61c2224156f45000b8c07700a630602020bf4958dc06eb1f2128400a26ca9e163156373e5c9a4b8155e3a0e12c34334288b4ee3ea202ba98f5b355007a42d466fd57d9a764a015d07921af7513571681653324c2e08df4f87d9b9416cd735d972dd45daeb5e7adae5443779bbac49ea0394833b904e3afa78848d61cae193096ff8dda70fa4222b2e48b3bbb8a95420c4d4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085fc40b82ad67adf32aa0768e31c8851e14a5a94b86ea32ef0a13d1e88d3c8671da069a82a521585e392a5409bd659414e25630963b2500f76428e50d5051baba5177210b50de3082ed6de8c04921b9f58744e2d51995a4ccb8cd392112ece7330ce546b4f4739386f3c2b4a9306bb98ec01aec63e0271591a05ac8415e129e06f291a206776022be24ae673c55dc2639dec9dbe2ddf478e1bf8797bf2dfc1366a0daf373f25cda9649dc1b4e5d277d81d27cf1a7a7f2e7fcb2bf077a39cad1d13af484f1a0d05775e7bf78518cc1780e1f026c587ca2041241cbc848bdc015b61f4cc731a316a8c704866ae9ab237b48dc3c611258a47ace751d080706eba1a415c1a01855ec1ec4bdb97072dd3d90e44a30b48d22548b0917cbfb83ecfe66727bdf2b838ea095d9b16a72c141b64efbf66e0def2d54bbd6dc1ff7c6ce808c586b5c3e3832fde25e02155b65065ec37dd4bd10f731324eeb10e66202f44637e6c2adaf7e76b57d81c229630b448a51dbd6bf9dc16f7d830f7e879a9b3bfb49de5774542ced9dcc1568c3c6c971db9e97048031d728a51aef9fdf805dcaa7720e6ac49a666bdc9c197d0cf73f67f6591544c05d8bc6f2373e18ae1d307e26ba40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8e494f04065958909431b2dcc40010337f4d389de073f26ac64e5b2e6bed165c5f8d9f8af3358bff19a1c7e667e7eff6d7eb3bf5805517c12b235ff5c6c5e8fb87eea5593efaa57b44480e9d02c4db6296844d96690f946ab94e18c321922972f237f4e97cd3f7f23be1766fb51712db9c6d0e11679b0b9eac2a43303fba02d2eef922353915d1a98f3cf48f91367610242508b17ae19ff62bd51077729c80862b200744695ec74d2f97f540bd8c2e876ee8f723b7c13312d3f4eb503dd22b9ddc54eac01fb3e047f025b7f36f0ba7f49f3c669b4799df3f2cf5f11389d21cc9eee9999b53fc474d67cff9d2f598753ff1ec11e0c814076fa47489d16b06299104e6a838365e2d47fade013ac847c2ca001c8df2ab9bae6cd858e7be2d3230b1ed8e13ce6303e70943a31000a17a98126a3f2771f84892ef5773809e268ecb065ab0871b0a759979ed8b73e9cd6ce85aca052e1e718908850c0b856cde56240d168fd9016c4eb94b1f95620392647d6ee48ff924c631c375cb9b70a531b3c0267576ef0e6f651b0a3757f42274a7bbebbab03fabae2155a183a5bea45935a2a6fa95eeea2786698bf49052953b9cf25297272418ddc48f5d9c95552cc0b0c2b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008237e153f287934585a17b1115356a072e7d61919b2fb9aef61edb9f473a0759e5ab67fef9ce4de95f29170085523207c89b64219dec6307bf91ee1bfb5431e854fa0d409dd7a0456b63c1f2721cc42608ef41a961818f70a5c1f61f474b6bff78a74b8841d6cebe22709ad557fa4393cc45488f258af7de37ebd3b1f9863dd7d52e1a1fb16d962dfc4db9b6f036d6331f33bc7acc5f38bf65f182bd1efd4670dcfb9a736fcaa6698f684072bdea44e6515532d0c7474d41acceae0390882053af80622ca39f89e739d8874cb03681d04c1a46045ca599e62992393305080c20eff0f28542c85800e12e0cdefc6cc86fe7c02f7ec2b51fd205b5525959003b2e84924cfac383ab67c871301c2bb9266e58cef409c7733ac118cc217ee08c08e240dd832b43c321e7fc12cf1179497a391a23838c6aa31ba4c765435b5c5a29cd39d7dc004bac6e56ac14c8f8418c208628463b81d4e2ef6cc567bbcd358b25183ccd8a171cd051ecfc8da6b3bdea348b3dd3b172a421bf7372d695d45538354f725958ecb95959a56f9480cb296bcc0c61a2a9b8816a5df4520d8732190acd7bfda0101a55ec84e0271872220faccb933ab48b0748d0487251127dd61603bb2100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000926950a5048492412229763dd66c526d1c86fc190cc47afad2dfcfe0642eb31baf606be75489216865aff83fb8a244e4ee5897f0a1ea665e9804e604243fcaa939045c186bae0964a637d07f786d76b678ea71b4f51f31fa970560293ef0528cdfc9104f57b16591b9d7a21317e70a521decf3631db8fa9eefb068c0d9a2b0712d6a367bbc4044d43b3410ed130a0400262b46e0855b1a3ccb45544114b0d1bdcae5c59774c6a061d3c21868b20274cf76bf762c4905cb5f331817d4fb7cfb52a4b0e07ec327af06cf09f35ad6cff66a1ae11177fb03a6b221d6ee859d75dc1888c1b761447f9179e80ca7717ffd29f513b8018ec0c02e3e15c08e39323b843a29251bf45f4ae92752a476f22d4bb85b8378fbb4ec188920ad159f7cf1fdabc975346ee0a9734ce53ed9d91b1a4834cb8e465c9fd2fe138a3e42c7af719e0d4fede4a88f919f3219aa2cb9da66fb9e5a529fe8d828e8eae5c6c74c5729d13e377f2f90c004cfa05694e2946def5e8be9d9fa1fa13baaf5dca77c6e289dc6a352d035b2305830d587864a774fbe898b4bb21d706ef460f25856f1ff3942e592057f1da121758bcddeefc22bfc088aaf10ae9308e9877d01ed3f3dc72037294be00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ac7e4d3c8bf0c54cf6ababcbc0de7cd570b269a2df399a521a49a973a6885098f3291aad01661d043af226bd27917961bf4e6461d2488fa0d524c3f8575facd42aa600514a9faf9b8fca580ca24843229fdaa474155bfa15b57af8cd30376e720e7ccc6444baa4269dc824c99882f27583d4e4960be6bd6153691db47a971a448b5d91fe6fd6ad67713634b8fbae0f59d8abe65a634602297b7ae030ae7667b47ef1fbfe0dbfc3b6754ac580dc0bff131ef157c71a5a2e106be7c53208bea05a083204e424631628530e24fa148c39f28f5b24fd7a61a7fadc4adb4636a7f29866b0ad9a28f062f3be82db9c40506f11355339ac3bd331fdb6e5142a8391610811ccf706151725cc91d6d8ea74e20ccb654bfcf5d6063091a17dd9ad568613a3503ac90eb27713de7f3c77be5df3824573a369016e357be02cc292ff572f38bf845bca57a4a8e5361fd4ba021b093a656ac1c930a65a3fd461444c8e6d6a71b0b0efe27af3f35f7eebd293aee25f133971e317f962bb5461c945ea1173f637514b7e50a44359147af1e0f615818a88b788dac2f36e8d0008246d50f80afc5591aee3e8b8a88730cd61bb2d623536901293a86c212c45890eaf860b1c0f96c0c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002430a97835c384445a2c00955af6b072fb6f76aeb93c5a4b5156e2c5880d993d3fa9e6b165ff2746ce02dd7d7172a6eac04b22efb2392253806b64feeb35c27da4ec3b12e7f0bb2e0eeef53663def9b9712a032ee307db027ba4888e0afa2188fce2a6fc796dee3bdfdee1b1e4a114df43f4090bbacca74aff779a467075b15c1970fa4abfdeb865565a7aeacb609b85af8aa635e7214898c50a67f867e99881b096e210f312a996f2bf3741f04e982a24229da1b54bc13ed3825a9f0db1008334229deaad3b66761ccb520bbc4c41e2cd3c3783906c62b26b412913fa02a3f32e65f62e3f3279ac196b86db464b53218ed588c663b2a2d44cde539a4bcd59d4802e35eff95a650ce26b1b6017c163d392a7d4357b944023b8af9e834e2ab394fadc52604c4672a4fa2dd97e1896fc1c41c1c93f5376f6e6a1ec72505d0b874967a0f0f7303b2235729a0f8cfbee10b2c851158307fe0826e8a0c42e7595d883f604a56e18894d7c79d86949ecf00215f2c7e7c21742cf79b130378fb1f64c532ea97e3f90073c5b03486a7edcc4c2979764e0d52472551be91992bc5833766fc233276b9f3108d3b72d549ed2cb0115f09caff354645953a832ef8eee4a9bd800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f4b28aa8b1ad17b2bc98455a6c89623714cb7ea085fff1b825134c7832007224fd5a1a58dcaed06bff063d9b6daf25f0079398936e09e67af21fb49a153d325991a8b7ed4c1d12567f4aa87ee93e8a713a725a6434809a190fff9495b5243d14154db97e4997ee1a420336b0fa7924bba8de6e29bedb807de24161d5b6ceecffcb33823fc7050c223f4df96f5d0256551366e9292ecae5ba89945143dd031526de0551e00496d80c004d10b1c8a7c0b86b60a69a021a10580f54822801c8b61b37992a61e241a59f78c8976946f3aa2faae3f0239d5a1cc25d8331da9f53c80b94bcfda392b69617ce278c4e37e8209caf9b7294a3c07b674929ff70447ae740625e2daffe00176b40005f0e7009702f59f988f85f9a5d88dfca0e0b753e4ef5fdcee06f8a63c4503c9feb887f358a37bb7427ca5dced8ff649d93c35552496f447942d3c67b0bf48a796e4d88fb531bf1164684438898c33fa9175bf30ff2fa0fb47adfaeff5329f4a76ec275632fb532d3f46e4473fccd4e9c2d16f3ca5f17f5a0da67eda498944953b9dd8e4165c90c205bc3c38296b7131f984d401a8c4a9863ebf284f4993572dd65b54678a70aee44a2c585645a267bd0cde4072fbaf00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001886e43da027e44d4bc200ea06e83e3a5e89bf4d9371236af87a849d03790cbf3efd11d72352a09f864b168e0734018bc0b987a0c2ad5a9d9528cf84c8a3672a1482640ffcd0a40dbadaac858a643ac6cf90d93cbdc2b1b288a7ae0e21b60ceaa88ad0b05f62be7445ec77790db0a37b990ac7d177628b28d1ad43ab5d9042c1dcdbcbd217bb5f75b81e2e909568a2538e5494f60e548914e217f7f7a66499602db9c2aac93e8c426d807a11ffec2b53103835fdbd383860b953acc55e8816b896ce390635f3f13e337d04bfce78f389f8be2753ea005385cbba9ab84c0a9743f86a2a62b49dc5987930a9b0aadbc435b0d8a5edbc5703a5470479a0d8b19e49aa2f4180c0933d3af2d188a044030217ff6d44d2b72ab4bf3774a04525d0cc7228f07fea96ec3ff0909add4bc7bc0c49c241d1edf4682873ff0f4f9d86bb47b484fec18df613e6559afb27c392dee75cf24fc2af1fec20eed8f097eb541efc29739ebe4d1e83676188a304a6060c50e1920cb0238624a88f94bb24c14ed4df4aab9f9041be06021d382bb5f9d5bb193291b9b63a78df336f7276d70443ba3a2ef65d5cab25438c084da78b4350c77600d7ed0fdc6d900125f467da4e0686b031000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012708afd70c5b3cfe9a604d27bc2510afd13e6071b4dbee97519ef684c3d620cbd85660cf503ee21138f990e3875a9750443ab7b03a7579317fbeec87663ce6a8861ce283a7436b0b28ae5e3e408023c6bfd5adb612a9849b3c68c27f3cee328556c9d5f4c545cd324ec2637b0881f26c4f264a4515b4985e14eb586c5d20e0bbf6988556eafdacb327bdfd34568711f062d0c263f3fc0ce3557cd1e541eeff52191a18ad4a54b05f6517b38710acc0ffcb6d98bc510e4d64ac37db51e6a0417850b1914b50d6ac7d248417e49e3013a06e432b6ae94d81f45d1ce4b5733ef28754c90ec621744cd0c4d5d53fe581372c6a03eed1bb37fb8585ec00e1aca50cf955c102cb5dd3ed2b0bc7d8eed0250bafabe6974b00f82d190711eb103a81581d634317e2e58d1f43243e2d075d98c8c9f7fb855220720906e09c6efa968e4c8de1c6b933418e64c5ca8c1f90a740b1920009f073585b6ed7958b732507277ad63bf7681c3ba4ef15ec1f391663888bddb8cb83f4bc284cc1c9aee4bd169461911b37a29f400418528f229fceff3f73d736810de5a6c596d8a99a0326a76e19eb73e4a002cbdfe2a1eec128694a1bc7aadfbe9d5fde7b4c9b79aa85121fdcf190000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a066f840194de85b1f671f2698515f4659f7af0bf5446402c3968a914daafb4eacea67c089e1e4111091e62b3e78867714216332ba3fdade2169014c48bab23b5ad6259312e408e0e4702c8ca17548cf1ea0f248f0ce54d182a5566ece92c2f6c470880a926b641c8cd60649381681ca9449780f7e10da139b61c78fe60e22a83d7051ea6f0416001655887a798b70549d3cc9ad9374a920f8d25f55e9c00b5b4ca812c59bda6f151712f16ded9939d203271b8329cb8d73f716f979eb5a83bf3598eb4f8aac8cae53562cf3ef861b9575eb5868a9165da146e60f9db0b5d0cbb82327a25ffb678d7f985add9f8408610f4fb80101e0092a53df58c8cccb969a1ce0a94e9fba13438841e6a31c4d3a1c2e9514a678e5f4a014189269d5b0fa84a1aa3284889943b8d2a46b7327af43a65d5f0d53b8dfd7f837c2d63d1305d50532039214e0ccaa06eb02a56e213203400e6c44092b339eeef20f5520cfe042b1b6cb0e1231c1d4f2b12381e43eb03eeb594b1212283bbbffb0e8775c50d8e455a76859c989e98156c4eb6aee0331e5a0b17510d5347c879ea62314351e1a5a6de2be21eeb95c583c1bc396f7646fac42683db15469c30a82f7df264767bcc2c300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002af9ce37a3fc4a81e24f70974b77caa868ce1eeb9a643c05fdf2a7338700ab985173e24844c21dae489377a9d0126932b11ab8d51f1fb2ef3dba790178496fc50b7d3522e54fb54694e1c0b357486635d6d35bac6d61a3773cb1e00a733fdeeffcfd48c13381a875e3bef9beab87555d9124900cdae44556f09832764005aadcc71044399435e42cca58a95780ae1770e52ac5f26480654bd3d55ef1d38ad8dd1d1fb75a01f1ccebae4d773ae12a5f622eff5a34bbf4ce206add266f4c181533c8169d4a40a9660891ef58dfdf353a87114e24581b5798db4ac8aadec732012de5db4bf8b499485d2363a50c142c475fd08aa829a4f2f1a63bdff8546b30b8d0e10d9d6a45586c9daa03eddfa3094419d4946e2061d95a9aa6edd6bae42c6bfff682ea860ce720b2988174e56c6b4dbe0fe77d3c239b74db131b928f16e20b79b12201e62589906473205f5aaa422cfa266142db4a1d16d61f82fe8fef3db3ef0ebe1120b1f633c848f233964841bb5242707864b6f0bcdf024fd804fcb1a66751e6a729df07b23cae2d67805c01fb3160a749be0fa690f044266b7be1f22560e237a951b46e52c2c5f45e78b4a5c183b64b8b06091e5e21541ce6156d70ee810000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a602ade1c317596f0d7b3f10c8aeb76ef4e3d8f56de09ebc53866c470ec505226ad9f4168945342630707b01a8ad712d0181a69ca3704b0e01319c9f70558bda449f46d2720e57caa7a8fedd1be10d3e23bc0d6cc7d8dc1d30340b2b1355ed05cf3d25b2740b8576c4ebb61912e048178be3e41f3ce331fefcde75daff906b52ff5aaf5544e213c35e908e2673665a9cd62ab5497184c563bab38984167d6aebcfd7a231f6f92661ba38d40f43bd40f3e38818d9d19a25cb04f4872f21b31ec4a75a4cf1071d366771795ecffc6ca18b8a829cd626e5d65e83337f2fc9b3af1940d243843502e1ea3b709304074f6104507fcdc48cb8000991dd111ff2270f787b46bebc76dcb8bf72ef48ae760ad9c5a20f5732f0cd0fc6fe58f265bbd7a36aaa428bdb63b0960d578ed1904f1fede1393a4c23f68003dfab6e36b1a00ccd4752387be5a09d3d45b4ad27ec1221ac22b807c103d9c0f2a7e0efbe0814c64e361eb77ae1dcf00a7cc687982ef1a265d4196c0f938e22a810a1a67a5dd3792e6c3ae49105be7f2da96fda7dbd03d3b72669475e6974766ab9f824935befcec2a634e3ce1870c462d2e82f0346a772da6a79260825e0000b8e2139be76274a32c9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002def3b97433e7b5bb21c4a884c6ba4148fbfb7e4e4cbe9876688a3f8a6622c08a071c8948506868ce1e42cb12e5e92f8027dcdc73bdabc4f9f4cbc98c9e2c459d134987296bc05b404a6259afbcfb9782fee04d004ef9ea10a95451f52f89911e6b39aea88bf142e0114295539757e0ae7ba789aa5212200ad5c72c33b4fc0d6f848cfb5a518a976056ef0218b3cda238fdf0125f884400967b22b2a8a54ea1fbf60bf570002fbf99959a351393b8384c7747902d4a120f28414a21835417127126c52b5524900a95a558d345d67bc5a3219265e002ac3d178e08849019b9411e2d2d1887c70e7d5394c0017ef0a0e02b3499aab097badf5c2ccb4b580c88b57239989b1f16030473563e6544f330de5c6b9eadb6760ec6c829fbf2b1be069170603cfd2a3f8f524b76d1614de579a646278223979c7d70907997cbe7b4e3d35c1b6e6dee3f72bdab2146c1ca9375ac995956afa6ccc373132996772c82aece5c75e1b1f324e44285aa316f4a1922b7549a531d18a64b948ba889f90dad653cf415f1356fabf08522baf788e215ebd7675fcb4c1133b436fb55f8023806a0da9bc2f867ce6a8041e806f07d08a8a03319eb60417c266eeba6a342c3f8ff65ba00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f6298e03445eeceffab1c167c57633c0a75caeb7693d1bf7dacc954ec92a28e5f5571bf6454a9ba0460a6953e5e8ee75894f3f13ff1038b2f9a1eba6ec692effeae94949d51b2fb3b0f36a3084e720964310a9367486d94463e2c5d3c285f0a635f055076d4540a8258318aa59ec418e8635364eff967a20d95dff65644ff7b2fcf60af24cade4493ac85070e8925abbb99ebe6bf1143a2e686676453cddbab19176f8702735c87b48cacda3f660cda6cefe88c9817c5a0c0875ae434aeea7d2b95c355a5b3c1dfa930f34078d4f04fa5623cd721e8f8dcc0522b1145d9213f3413b11567c087453e3075c8638d6bdfdcf9b02b884843d39bfb99880b7e68edc53d375df86d13362121b4e7915803b9e4b7274ef0a29ed3406cab6815b9aa711370d42223fc9483b74cf12bab75ec22d7da6d03a8356ba2bf9197bd7fbde0cf8c48e6163db739a31adf2188d85af96bde47b34fe1e7ccebd34805687a3c21a04bc1c818161a27bb1cb1a64086620023d789bcc5219c871f5bb30d089f687f0f609c0bd5fad3d9cd2a837b09581f0287a14f920cc23c1d1acedc692ec72eebdf511b2f9a9ddeff0ee1208cdc2836102830d67ce1bc52d8098aab132d4f61ebf100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009890ef7080e1fc97ba7ac405ac5d60ef1cdc6b3d0244e9fd195c807883bc8dad4f98c3f9aa9a4773c3e3eb980f4ad0be30cd2298275ee431437864fc7771fc358413d747fd5b56f4494dad90ecaaa1c8b65cd48e380fe3b5e2a5d9e56f40cb943f82a95eb8e12f9651650874d9f8408d2f2b67004d51aec9052294b45a112391531687b824c14ff66a1f41b5faf6e46e5f07f79d262773df69f17dc279dd4c43cbb009892aea637c938f26b4eda1f1a90e6ce3bd18b12c88fd28f90f4e3c4c0216c15e9c24fde0aa3d962eea193c919623a2a8541f9b072756463d81d2cd1c39ada5d46f6e70208a78833b10ce0b7f807289fade727a78d730016f61bf47f04b1d44daaaa61a9ec9538ac98e2f165e3280712072519953b425247db224f49615769fd53945f7be34e999ae3132d61729c9e076868824ab5f887047d162e5a61691740ae88ddcbee50e9f2409ab3d920b681c4a8a31a16d9b48868c5119db23360a0d5364b8d8ecf49841c345d1cd975b3d43751ed1616722391e9dc6eb5bd7a83d3fe73446951ffd4c3b018ac7649a8ea124296c0f8d9e980d37d28a746ceaf215f8ff416c30a2e63aefca2dd85e029c323d5c4c502e28049d6a2683bfca51560000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b04360611a5624bf67b1e4079d6388ffa73823204bce3a40c239b3d7572123a4d569be4350388eb0d00e44996e37b6ee6e7ae8862fbf71ec5e689f792c502e5f61783321b4cff9ce510d11ba1bad48d9cb4a0ae5dc23c43f6ba035b0bcee1c06ba679a4e4dfa3c44f68d6f620333179d97ad256179c0d32958b4656410e42f831b7130f80ef351a0171993341da9dc00f2f8472ad730d1196bbc4054c05b0f7df80a799c32f90a87c7b4de6e287c60a0699c777e9bb98cab2393d519e6f9a30462b6523c279962a81f70062e6e8b86cea7d1829e1272dfa4c1903fa5e9a26915985ec62698f0a562df828a891e5100edbff5575c6015a9b80a8772cd24b5351e689a1f27fa8b2d0961c68b31260b28cf312ead7b82b7d36120a20efee5b8301d028cd1470213091ae9a2daf80de81dc6b87d4b95c1c91cf425a4c03d3c623c61592f9198bdee465403db37376b164b35fb00fb0b53b2c9c3f8d7e2fbd822fba8e2e78d2b618178e412323dc257453f1931d4c86a61dadcf5a34078ac8240016ad5a1908bbd2a994b3ff72fccd383d3cd55ed0f365854db71e8f1864604b82ae6c22e5a2b847a38b0c6e7cec3d8061096fcc76674bd45079977231dbdc8eb81e500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008205f010a3709b150ff93d6e3a6d3e6ffcfadb916a27c42c81c01b850f6ba447f69e06a3ae1ec0887aec175882e1a30c1ef655f2800c6e1b2ac37ad941e0cff232c05bca9fac99422980bceda6dbe89aadcb5742e5f7bad8e2ac6c2ca01ed365ebf00f9d976ad0cbfb30f83f6f68356570f96ec4ad1f9b82b70e000dd8eabfe96e1ede7c52ef34f973c6bd05ae4c47d17c445e7f67ffa2c0ec56d424d08fddeb056d528571ec1d8e78469891ad0f783150198b09fc381a3eab31e152188ca0e75caaec4f689e670601a6891032e2dcad82b262bf24647b837d112471a843dde497b9820b5d2380c561e187e00d7fed1bd6c489a04b7a12b08b7e63cd32b32fdae5787e48a5c42f52f687b1359df6af24e364cfbb02a1f0e3e50df7da61ea8da814ed54a4d98e05022b0801520bd8f8e305162d6ff6c42ef137ca3e248df121d855236cde4271b61e671a1e0d5ad7968a23560f194e1f74a10b4c8025a6d980a137d9e71626cd75f2b3dd7786390ccb8f1a7391bb3daca49be82e4c4a5fb57917832b8d3218c529177ce65e939cb368f0ae626cf70aaf9062c704d868d4b9feeb3ed2d32a00efacaf596484fe77732c74f1fc12659909a97b99f5d42bc2863f5900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d4ee58ec0cb314d63fe8eba27b7b36a31cc3fabb2301296e0722fa429d2497308920e6fbf7a7cddf2dafde72038b188026e03275784c43b67d40d23876ff213d4bf8ead2bbcb196e15a95ec29222bf0c914284dd20464d48bf845b51adfe9d9883429a94169085fe1489c73f9eee7a129024c3e3b5c00ae01e0ca9b88050c30d903acaf43987de252b366a7892c3ab5997c525cceccc7efae842f6a63d913bd0007a924f4cc684bdac3fa5f00564d2e296d2c388c33140a86bf3d64a01537f2bb5d0994988cc5c0df67e2c50ff1451ea8e77ac9dbed36c8f3ed7fb08d9bcbaf701d247f2553562dbe3948d481a838dd88b11782fc5ea63a7cab69f2db04d8ef95f080c85a74a97fea072aeb6c7dc0cb47ada701928f94661a74543ccb86cd071d4099168d64b6de4f52028e16862208c178fdcc63bffdcde259a64f6e7acc66384ab5cb6b1af1881f41475977b7b55e7c90656ecf7cbf0e18eb2f61c68680425097b885c58ce71f89cd8c27f96f938ad804dd47716e68b5bb9b09820bb7655dbe9b42a9bb69e31ab4e9696511d4ba9afc60a47b817a276eef8ee33e5964779d9f4757de115c7986151c88826b68ab0c4c1e7883bf5a0dfed570219fcaaec8d3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007695607d0a8bb0c512782e4281066f500446c040caaded15f6e7dab20c8c58e42bd8c774d734b85baac277218ce607d4925db50c702cb74e2a900537abb42f3f5a69ce7382cec60267b06ad88194604b55048b01c2304d97cdafb1f1de67c4b1e98119b0a8a14ea3de1ae5f030b3447c608d0d2aed81934f9d5c658aab441363fffe4bf3ad855608a1bd2af8ef8e68337e53562674af991d5c2f93e83948f60b82a5892dc6fbea7b6542c93f04b372f7cb7cd3101ad8257ccf0817085ebedc8e25a47865360fa8bc1642e963458c0cc79d40ac1a8df8395295b57ca8047c3b7d8d1922fa298e4d97378f588373c21eed6e7333b14e1e1337db7cc96792f9184cc9e8080600b4fd5249b82f34591fd2792b13ef89f7ce062b0ab1e54b3e066c1b3e792b51da5243947e85bf472127e83212952395de52d7092df9e9ff6b43716410544cdb64b2b5e0f30ea761e8e56dc0da0340df9f5469baa48d4f42bd1dc5c1cc7b4c2bbdfdbb1c773dafa2bd68e2e80342e7d02408f33a0f792240e11be65333c2d3661374fade29bc6c69ead52e8adacbdc841dfcaa9f26744e18f4fd2356147042806a05cb9ae91ac359326d68d2eec3dd4f681a6fb9069f47c073b2247000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011a76c81342318f237d4557f6b1d8d69786d8a80bcd76091844321f8736145009767fbe3e1beec0ea1e451e7a79988074261b7570103f42241bb78e750451b4b4c7cb2d34b4dd48f316375e79a6653b1aeb3551da49367f1d41fb79b777256aa646fd2db20d7260f0de28c2adcb130554c8f91d908e94a050e310105b910ae089d6df578ad13bdee3675f191401264fd1bec55c6f1fc89fdb5358c94458f9dfd3896174154a98637e4f27cf7694837416370597d28756491aba38b115f8c68044116aa850a0208d6d2a3d3568db9f14a432ec9d5e138e94ebecb184d9d781d1ab673588d550d245e6ab07c527983bf6a501f778691a40efc8545606f754e57e51ee0e8391b0cb4949d186b7658a789afb4dfca55b43aea84a8653a9f5be63c349c245c787066c4da04c0011c63627915623762b07a07c0fb16044c5177ee9e09479e9c16719feff381c3d54f76f4191eae30fce880ab56baaa1612611ee8c1d665f67b731664884c6303dd8c332a6d1d13aa2de5a8132f9a0c2a8bd4464b86928292719e137156c01988723952282da96cf1d195827c48bd3b1396ca886913abe673ea3d2cf14cff6a046faab2255800242b1a69b0180394d4afb41db47d54b500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ca720e8ad292c114028346332511f283cc18564df0e6c1b0b8feddceb2931a8d41a005adc50b207f21ed2036e75cd09fcd8925aacf1e277d5f3a3072a5493548b47aff1d64bedc9ba06b302b2216320c0e442175c048b6c40e200c13951af4a059fa49aad7db5b1739dd9c21a006b82ed284b1891b61753fc06625a8aeefa8451d604b46b7110a00ed3588d556922166c936d6d230edeb550239704970699ee886278f5a7f7a1f6736408768bad3e0f666773fd971a98aab18a8f3d9e39bc35ff869db32a303c480d5d3a1a38594cf3a27738378b6ec9e9a10d2c9d6ce1c89461c2af974aa1d8b1541ed4a849706c8a9435eb807a88af6c83925c728749ccb7fb4e22a85338a1152951a26daf2005c64cae91f2f21d5d14da09787761d25c301d579eb0f6bff8202171f3a0a7bcd390b3aa51d39c586b88fc08b913c19d7fb3eb6e7c77f6d7ae9db1ecc1e9a8b9cc2db9b59b8117e6b76d9d9aa6196b6786bf3cd12f2f32197e8a0b36f0fabdc304afefd6376cbddfe0facac5e611ff15566ffea5cd8738c065df941de9e716fd22ca4348971080a076a006d37b3bcca53226bcbded518364538a4074bfdd213e775ce0c2468ac0f2430b250db713bf69f35200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001586e7ddb359b82ba426db9782df7781704493b1e9e08b2b02ef1f6a65b744053c143af7f3cc3b37335b061d836d71bd24dd966e0e1ea17ebf7af1f2a38add3370c01fe282e4d7f338aef498dd9bc9dbb76b5326c5d969b07dbda6e983bf16723f18e9edfca91ebcbc3dbdfe683867ddd1a9f8029aeb6351a2c1dd32140c341ffc8be7d7a7d5ba975190ad23fed1e25794845606a7ae69a2b04e67a812f5a39f06480e4e08e9a227f1b266251aac694091074bb2c99ff20ebb5b60cea10bd1ac7825d318ad692a68b762fe4c582cc897538e02723ae4d440df857c9605e1c925fd60b71a95c1d70e1c6552295ba0da76829df67618fa96e244e7ac934fea849f641a1f11b8088efc8b923dac51f29a86abdbc7088d69ff76b47b937f88a49903cb5f011a56c71af9e9995aa97c02face1551c578c0a8778dde9d5607f56c5f7e9f56e4ef717dc3817b3fdb731deb7d5230406a94daf0fa0ab825987954c7d2cbb03cf2e3743d03b2cf05de933ee7c6eb0abe531e8abbf693bd8cced8166e1769401420fdd98c9c36d09bee75323152597dc696eec95197b10395a39346fba5b21ea5092164f15facdc4e70d76c7ddfc00d68c617d0fbd3eeec2404a4ae26d80a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025406c26978d69fb467c6ad5bde6d801de1e73d294b36dab6d86f6cbfc1d958da6aa6b9b7a16e2282c384a7efa9b7de71a71a6f7c14492bc3ecc6a112bc7852726909086c7294b1c993762d6139be638e5e5877fb7cfd2dee9fcc13015f3628847419b79d6534e0feaae47b941ade3dfddd1caa855ae0a2b05026547058857479134ef309c71741795d143966183e1b28d2c98e7655f0469f61f5f36468fe6891b19b33e38a5bab8594ea2dbf6a4ca17049fa2db755ec14eb59a0ca422cde03ae755352cf9791a235f1762587f056e44cf953c637774d1443d2df3e2c755ad8577dd82de01cb2e394ac9a46c42520c9f0b651f7d93693e41630760d124a7373f3c82a6572f11c731cd6c19385878fdb623cc0c2c7c299c69d8111cf2cda74f4a66662d8500fa3946a9a4c15456d308a22c6f2f2a870742d238f5b0a0610bb383f02a8bbcad777bc0b97b893d198322cb66df7399e1073e097b7f941e6eb598e9118ac1279af4fd56c7a2ccef6a5b58ebfde5dd3c56ae7244b88c8b602a4722cc672792782130dbba2e960b430f64a3652495b41b65463410ceee4fcfcd0540a682a4592381f658293b86650fb07249289c7829caeb606caae377bfed2f34509b00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484008af5c981dabb405fd4fce9979c46c4ceb4fb3e586679f5e1d2dc8a0144fbf2b1ee7c1f95ea98c69ddef7cf2834095b3ae07a1d8e764cac851d487c43ab9a977078812e30c3dc62a309bc8df98bbc3cc768e82de3c4f445b546277adaf55baec13d1f8ff1f09b9971bf842c8a90470c661b38cc8f9cc65f82336f66e149771ef1331b122f764a9c66ef3ef530b3c10945e25e705d7b67ed7e5d1f96d38adbb402cc71f8c6223069d41c2300e07365511019ede643c6ca4c5c66a248e7cf014b91bb8363e04c15eab4c533a546f5ecfcc8d82c63bc1495c899682472fe0f3e20c262198d0badcdf10fad1595cd8912b5fdf23a17a340059e2dc1735b5cfe5637509fca1fba1351e2b4ebeb31cd03ca510495cde4d1d6da2e560578e451c0f304116c7ccfcf1c86b921278291e2416ec96412a1b239a66791d4f4af88f55b98fb209a639cc612f41776457f9c199a6e56745ea7a6e0abea3841d86ef8e3702f0081c11881b7c7b84840f07598d2e5b5b5b11192eee7e16231c589cc52e968daf860233dd1f0ad44c794e636558d4fc704157d3d53804bbc351f6ac0d96d5d8c7042d929b1432dc85de7b536588b5d737f591970cc558c74f6b7d9f2d26288606e91b7e8c941320c7d11662e83782cd5c268a3939b91f1b28f30312e4c544fa94cb25b1b633e634b0807d177dbb86794923f4d11d7b970adec54c749978258050740d4f786ea23964b46126ea289f535fda1d981311742fe552515a67744d2effc42bf7c2de46ce72f4e613ab0828f963e18f35aeee9b72621dd4cb9ff7ad558d7f086b273e90da7f24a9647e6d0f58505138c2ab047f74cee227e439a444330e5a1ac1188a6d3d249c6bc25b316cd3380fa21f41aa3229718bbfd55c6b1e7c4f901d643fdc0af91ac89096bb9134296bbf03af71c61f938a6d21da1b68ad21914d231e5444c9ca19cef9d517b478f621e89f061885bda095f218a27c235d8e9598273d3a6f460f3cdc632fa622c44533858244db1de9831644c10e8e0150957ed72069167e15bcea002fc9d8948945be224fa1779fa46334872b82a735ad0528212a4fad51ea1b30e55d8a11f88d00d345368b299c05cd3b7696eceb68ca36729615f0e42ad52d6a0df1bb52bf465c325095e62db778d61c6d765c883b3425db680488496d7050b54eabca0ba90ed855a804176ad58a62496ea53915e34bb61ea72c922be57fe0b408faa0a45f3d2bd3105926855d98c70eec45f846f032a19a4910e290454b720a9507caf244c0ca9deafed0606ce6ed71363b97f0ba33d7f9a01927d2101f140df9fbbbb72763fc5f8dbcc8d08afe6da5af289fd3826c11f4d42f7e448c214aa142c67468be6dbadd2f45763c01459b8dc21e9cc4e176e6d1d114ed45683387a3abf07869d899e33f16e73ed88a8df143cb34582866d064325e124149f942ba0483dd468ead455e661e8ee8a55d9ac35026ea49a12a75367f2229479c3b6e31412afec5c2783332f1887aae8287072e1d0bafa352dd5ddf77171d1bcbeb497b98b5bee1af8a2321879851e3fb1646d71233aec1ed29a4fffe282e0125dc2d492c9e4e076954c30a34c92b526ad33cd06f0dca01db48e58a316f12f0a277c4d3c00b689c93e6e65e34a1e35d7d0627635eb7608ba2ff9eb799872a3d6e57877dd6c0014fee445e4625552500c1b6fee87774cd31c09f1b3dd8880b31a5205137d7752cb636c4e6a7a0dcfa99c827bd09a84dbe9eaac0af0980631480ed9c5546736af64f6eebabff3173d755bf4310014738891f4116df489a870d274ad5076e8ee9d9f6ac87e118878eff0fe0ca44ac339a93cb7ea8ccf2b98c2809ac594530d1ecfdd9b2386a3a66bca35dc7c8630aa492cf9084d5efe593f10e4070e05d97c59365c3b1299f5fa330bfefc5267e90679bfdad7c1ae89bcfc21c87dee1c3e08ea38a906e0ed8858224be7379756293ad4f8648568707c59f08081761f5f0ee47ffa5bcad0100de9a40fe53596fe630ecad81889806bc8d860e196b463b8ea7c9ca87669d1833ee37faf79a746ec1052185d1eac40ac124399015eccda46292ed4e5f9bcc75a46031ee9892589bbe1cf6bb1456ef8af848a0dd0f09e067561643c118f7dd48954cd33a212c4cd941692e574060136626ceee0f0f0c5ee5a04f1a8ff52b3d6c37bdc21c91af5dad26100443360275125086a7331c57418466529b6ab7bc5b3e8dedbc680e979964bf295fb71ab62f1771ba89420c3d570a43a561dc19888cc2c30677c71671d9d5a6e4e531fff6d28532eac07d24cc5d21c8cb096ae2a835f4f329320a12e727c09a928773c154ed0714438c600bb95a09ba65cae3ffa19b5ae42dbe3bcc4638107f85e1477c5796e97192f6f10bf3e9ebdfd10826289397ba7c504f16a4bf41b5a92599bab95f5f84692d4d352f063a117f786f0e764a449eea8960a5f220f9085d5d0cdb50f73457a5c96a281de4346fc0a2341a30edf9ae4a4667a32acdb6f9eb0443b4dfa2e2f02b4e539a1d7200cdb83ebe5ba540e2bb8149dd08ef007aba0dd5c5c2293346d8407b23761241553f97e8a0edc5c61e46c35136aed0d7ee3e058d9b024a49ed5c30757b6116ed83e990164e7b82b0eb9f99f5860dc24a591252481ca140aff9d6b7bc237c1eb51dfee9685df3a902a7f20413c7d3f7e1bc5833069cb078d05128b3b7b6050aac64e8a937f49b1628d1e10085fa020081460bb6bd44a9092d53b3325382340bda7be8f29e5ef441b7b5bf6466147480e07ca591d1832299a38a478e59486718405250fb3eb0650db2c2c7caabd948f58cf4321684beee57116c5f40f964aa01aeda6575fae248bd857a5a2e5f0f19bca8e4cc6f4612d8ea80d512965223694016c026f9377733881812905530e525b9d2129c4582dec9eba0d1f9311b6e9b4d058721760c3aeee29d14b29cef194ad612b697fe654e80c4f0c7b82dab365e141e39c493853553301ca678887d52ad89f1768d35ded5cccb5c04b043aec941bb3039e6d03c9d898bb1633772d844c5757232a2ffc868eed4a23bdebc508d905c2c3a578cccc984e54a00d3593dd13a06e0a46c6bb96edf4b156600305965a60c12edb76536691e98db0a4c8729412296eb7ec7901768398a7c1972d77b1820c91769c545d70978b152ef3aa88f3dbfaa986a1d8e9bde1939cb37c5c084041b0d146f2a08e04f56b05796a02bc48ebd3ea764f09adf931a7db9527d792215524c061b14f269d58a0a74143d03392d805ad9fb95bc2bd6e2e1fc3c9614f1f8a543299c7b8b1cabc0de4b1a96df27c62889f0190e7858445802fe5aa26e8b6bc8020dededd44cfc4370ede0856ac02ac038ab49673bb120441bf67cd4bf0e16ff8a031ee7095054aa8f0f22e514ab978753bcd4b002440d77181833c935509fb94f2972670863d1288441bbddd4caaf8a608fac815dd05245bf736e661a057b1580274e77977001c2c5ae34266490e0450adc2190208e10617b62e6d1f91681de3b1514820f8c4b0034206701a0b6afa4f9e121612e62d641e8ecf6e8265aa0c9880c07335a8a74926c5808613dc1906a5028e43d217644ee8339dcd2ffd3a3c2d00730d13b6ff82cc72e06b32385ca6cce3179640b71786c0cb4fd57b244ed6af00d6ffe012fd451af61cb9347bd04d2038d9d41b3c4d8cbb2f4ff862101f2559902e482789803b6527b019fb0cdd0d6a57828544befdae91bcfa5b5ff77a54a220ee400ffc5e895c954aba2b4381f09d39ed34ffd305edf2c91813d5c4b8492bc00976dadbdec86726096790941cb921e833822225c543b976b8218ab585f589b2b8e552c250e7379f4c79b628e3cf1c8b70737d177a7f6fb2182909d9f119d5d1573f1eeeea0a8aea8e97e950aa89ffac4230b10cc192e3e2e25a5efd3141505034f209b4fe5afcf68d093a5edf6c4233c325892446313e7aeeb9a29d7fba30115539417f0b54fa93e1665f4ad51a5e08e22c7df294d64b8bd26b4892aab036908da4d19741cc3d8225a264a64cf1e4adc4b2651323e5c2f5876e5f895c164111bef92d036835d8ef64860fec24c8a9c89e4519d4b1eb6a2b51ae25fd526bb7f1203c1aa1e517977bac87b3b90928e9d43c588e77378328e8a115a0f858240712ee4a8dc545491d814c4d0436f8445c29b0aa4593bc67f87f0963cff6fcc7d7009f0efae1402819e94aecde941bcd95958c6c308bdbd51975b00abaa8e97211122a2794ff1b7bb7b303dfda8d782c19594d354b33f98ec59144751abde3d543d04fcfe96a6df7e94fcee81ec3bbe5ed1d564164db679455d278e70e901dc68c92f96364da530f55841fc90d100c9e36f1ce83d8496aa26b410097f2119debbd72d9324d3c6ac5ce18d01d0a8a69f0306471c3ff239edc09a556a8543274fd2942e3d7e7604cfcdc6b1499054fece1e77bb4463e64659183a7655b1f5b5bff82014811b432c684217579fb16178c70afc32cbbdc707dff446a0e81ae57fead2e917a13e0af0d4794df12f9eb3f1d84ea6694501c9858eb7aeff66c56368a605f71ad99b638525f5a8b749f2e9fe2a0c860df3e21da65dfa9135810c24288cbc8c08749201135acd94953bc07aaba30dbce22a496c44111758def257213b9d47b51f7e211e9e937ac859154a9b9cc9f39ecd910a921faf3497c52cc5e732b492232f8954003054457327bbf9b6011e28e96b4d84d3d19f1ff138c237ef3097291a219bfdc1e36abd17ac4d22d8b56f1e3bbf5fbba2b0c7705686cb2e2ae310c46f095482eb4baa7666e17e7be99307bd4e3b41a4005b51e95c1ae47ef241df618926db9898ea4114aad41ca5d00316c4d1acad7aee9bc8c5eaf67f0f806ad79f9c0e5c776092fe7e9e71b667838253d0d076cd203f5ea36625c36697db64db7c3721c5c9ca7a31f517080023e2604350651fe646a3a7a703f26f3945eda6a7dc34232bbe73a22edb5c98ea8b104cfe0c606bb96d7d0384fa77a1502ca73386ed1b1b2ff8e3824cf5902080a9eaaf775c4f6e2f88b081858ae5a85d7d7d6abfc18a0f95715c11ab9cb71344f67a6141a6ac898df9c1ee8dd02689fe710ec2a76fec11a1c61b6f1b686b99e649d4a6b1042f6cf988bd4df584728951c85d77cae73c2e30d0e62665d18dbefac25ce0a040d9250534191a3062093a317bf7ae881b29022f5e81355a0207307ca841eba2f27546605003866d54010ecc7e6adc58721501bd14c93da9c2167e97a09434cc7c6a3bc4c2ac814e2703a3a25dfd328a3280263fbdb4706e964fd22fbb5b3a93aea0330c9ad7d9238922e2f31b6cf367b63e2e08133c3b786566c2f6df8ce41e5085e64a0ba0504b1ae73ec684a716866ace0250916ad3bd6956b898a95910a623514352774b5dd6ca1f0ad086a1ce8d0e492ec66ec2201798406917dee8484841996855b462e3adac5ef75bc5a1f786a17f2aaf8b522a01b72b36625d51b0bc97c1d0af4e3ecc4807a691ee7289a97689ed2388304ab4e25290056a7c5d568a981eee443bb850f3c5c824ce01eeda813b8c1cd9759e0a95e65fe2a77b456872bdeb026332f846083d10eb3658aa230a458518ec64300925fa001cc7a167c728a5336ce75666d1fc18f8b9e82fa2b49420cc27e5134175d9a12e2a347afe4fc1c0eedb4dd20644c2579ca77518c719ed42e31bf762ef953d966fc201b65dc500c12255264ac38d60b3577e703aeec26cf4c2209517df2d0fde34a8b3cf1c93e8d8eac9b873a6aa2b5c55012018ca9d9f259b003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000021118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000210d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000210a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000210b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000002129a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000021141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000002125e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000002112978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000212daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000021189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000211159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000002105ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000002105c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000002114d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000002103db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000212ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000211213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000211ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000002114fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000212b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000021305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000021280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000021223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000002117a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000002108858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000212618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000210f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000210e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000021172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000210b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000002105bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000021137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000212e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000212297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000212608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000002118373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000210422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000021204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000210afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000211998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000002128d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000211da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000002121d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000210ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000210e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000021107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000212f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000002109726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000002124f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000002103c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000211fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000021205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000002125110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000021283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000002121cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000021094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000210c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000211f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000212421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000211fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000211bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000021304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a971e96a6ba7cdafc07f6fa8e6d624d68c6902dd420f1a71d436cdd922d730fa96091e00233e3cca3c8b20b50f322063ac88eeb844a9fec1ab3357aa3059c3fa00a5444c8b89d57ae86ec776d5c1cefee7e343d8a59eddb1f4eff49df00174539320280cb9163f66c514d06cec96ad2cb0151c325f12bac75d599f238ea244caf025a4633b6e766bfd120bdf50dc4722cf82ac16fe338b68418924118063f7bfb9216101513b10cb932694d8f21196502fc86d0ba6e4583be2917c5039d76d3558980b03115b1b3760a5c4d1d1b0b0ea05b89b3830fcc4aa16bff84cd3b4001f23524bb47dd450ba15cd238f044f087bfe5fb9ae75df3df84622038b3b1ddb0ad5b81e03a48a4144eee091d4b685ddd44f3920dcf987f98ca17fe9c0197e1666c8ad1c1073d9ef8186c2e1fddcf62f4d6ebf4351cc41e9b39f7b9f8b64f1abd3a6fb545a009419d6ba7c169f114a8fb9bfad9a773568c29a3c95ea028891ff4085b48c19cbda3df335223ac06904bd91f571b90d5c962a0271e082e4859a353942aa81a7d512229325b44315c3ccdf6011b7822110feb33944035025a79dff4315b1a3621af4cf7865a30b689d1e49e425301d7813204943bb171837e4e4ff830000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a03c01cf1b890bae22316da078de84e2561fc3359b554faff71492f81e99cb227536131cd131341e2be31d0e56883ff8b31743c0f8205605303476181ed21089c62c90c473e4f44f56da1f0c7417edb285454de5b1f0abc6083c6e9142c007abed307d281def9102725b90862bd7b9c9a72ee0ab7de09c079128876fd8212cf9a2c55cef5223245f5930b7f8fa375cb5c10e4f6fd23482caa11b15a159705666727964c96341a086f43ef303d32b1c81e857bfd1148a32ebcdb566ca15774b88099539baa5d42a9ec12b1989c0f5f60b64af8d36fbfc1b77509c7ce6df98ba4bfb355bc960ed084ce2b0bdf5ddece28c09a1720b67007d1b903c6148133ed8e4e70c7fd8fba243ecad4496789918192e47a183b03c634b67a1ece0cf35bdb1fbfa1963717af53d15c2b2a0a3d92927de699829922701546b7f028601c8df9140cf085731a5470ba183e0a3fe972582b3de2c2a8a3025edb2680aa51c2d40e1d98b06429bf1ef17697d8d549f22c71e9be8bb802ac0c9a07d8841084f60a9db56dbc94e0c7a6411ff7a6d3d0906753087aba53e06dac3979725fc492da0b70f7b7f74708e2167a6809d1100a7f6172e7573b32e4ef46d56591d67494b02832fd20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2da2c20ea54205aa03b31fb4f96672625bda6445629b70c0c11b96b84c59b5484412909a33f9dded88e61d90c0d0c678b137be8deb079197ae3164848001993b1e9dd4390fbc16e3dfa2d868a3621abf9d71c2765715104706872f02ed890ae9ea54274caceca42c54105ba6ea5ac30c81cd7a920a844cc1863bd0ef7904f88f6e842e79456befc97572b998d04d29ae8438c3099aa7c066bd8fe85ddf6c476be522dfe066f044575e50a59cb6fad841aa69d564dad6aeb75012a4dede1e1865e493943396a48b03c62143b40e4d200f0da063e7d06f1455d6824dfbc80b2139cf1b9b9081909d6deebac16824a15d72fda6824efffb2c96aaaa7059730de979473de3573d287b43864168669888e1e7191b4d06b2634e142439c66cc72c68a3961680c23581261062e377a59d943e27fa293db90e3b49e292a71f431c9b74441d000ec49fde54ef02db604529b7fa90d8b098f9abdca6eebacd1e0615d0fe5c0a6c0cfaa2ad506243579998669d8cdcab8731b05bf1b9a35054f0adc54df977017579d6d50ff22ad4be56275337dd7ce9379be68fcb9737e6272d1f7769e5e5ddeb30bccdd5abc7f3e3a7f6892865ad04da43a407b5c2639be6a31b0657e280000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000931fdc40301169a8f7a7990f15ff541c44d7ac7d52c5513c22ef6f8c72400113512354844284a8326090418156c42f286682e29791924a37ffe2fc6230fd463b1d246c385e98cb79c84bd158cfc793a34500946565fc79baa53a0c968109e418737b19d2bfd9f47a226cdad337d9c19d3ac7763072f6bb639d4b565b5d5c28967d5703350e51ed9fc9ce20f5be86de152e1a49c37eb2730ccbb0b691ad25b13738d1f2758e56a10d946802062a56fb8e6b85a3c866b98375b81359e59e8d0f35f4d3d7ea632576687452ca1dac9ecbbf648fa0074f35a7d9524a4915f92d6c7e85cc7b422dd0fe3669ed3a8ac731e56de74c4dd89d363b9b42460b52de71df087e12038be12efadf7db1dd0ea95dbd2b435d33818f3371a91abae086fe461f1d70e2bd39f50c5cc7ffa3dec97335b046e7a4814f2a1ff94edc7bf4a90caf495081ce0f32d0eb7498e0652ff15098cb2505e7810e703d65bf9c93d0edd8fb17e36a3048a2057339adec59d0d2760d467d35c8c9c43fd20d516c8dd94507a45240344dd54a5c9ab5d5ebd1c716d071adf888032dcc4c4c5592e823274d5cda0396ed88b57d5eb92981252b57a02509472d70cc661402702a973104cda7e5b96600000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006c65a061913c6850a7f4c6ec1b794cd1bb655a7d9073842661095f216e7ab55e5fc62e097465e3c5f1bb92a85e2ed5ed94ab4a64a689237b8aa6952782ec00f8b2a35478416265e6d0575e4cafbc98cb28240916c1afce2b4192fce01c771bcb3970e36c8100d3ef39ad19b7db05fbb4566790aa3cafbbf889ef8c17c059852dbd585604d62ad8c5cc81a07a58ebecbb7a1eaf7ce7cf6e77aa4ac111d1717de87ccaa90ff2893c298a9a59b7272ffd43040bc886ec56ba019b0a19df223cf3bf2b77a2c41de9994e39efa589ca8070dc25d4bb46e330f50cd1e0511ce4120b39c1f02e488e7e1736992ee9f32523243f88f7c986f8002f33cde0e27c38df32dc4548a4266992edcb129feb224beb481b0477d4420b037c498284765ff92a522003ce0e9c74a48afdc363c736020525e23c6b8be55af231f8274ce681e7be73b0107cf5028ca5e5c092a4e4ec0442eea2c681112048e19428f32e9cc87cb01a310f858546447b776a085d82fd8f4ce081078335f6b35c696df81729da2f9f153b429cbecf13c18e84c8e5ae30f2f4d6deedef6354c47a77f26cc4a80f0768193b0aaf4c8242522b465fc28fd6b5010c9fd1563c37930dd6589a6014fca454d1300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f41edbf9c6380dc2e51d4c7b2726a58d6272668ba1a4abc5ec2aa2f9ee7a5050c83ca952c8c58e4e4487ee7b15e5476ba2e72a45cfae9b11414d55519bb34079d1b5b50f5e71efe5bea9d50069ea73d19b77aaec27d4a9e99129c1203a9b8ef544809023c1e76493dcca4370654ced4d5c91557c0f828fcc665a65e016fdbfddeedf6ed6ce35bb88151550bd41157fec23036b9f61c94bba908e165d4e34ea95fc6d11080590311ab37bbacb385d5a369c693e55853c62bd25b550150f63af08081612f7e1a9a4bdf3d3d461448f6c714c838c6425c070ead7e47ddfbb3abe4ca0f0d1d475c46fefe264fd5d19eb22f92bfca59426cfd165af3172ec79031e069bc67b0d10108a1eb943a2dc6ba11b2b41214abe30e78dc1dfd2296a953245fbd4d4d52bc94cda0a4caea608320fcec5b8e9c167a76c64e921e855db8d9144c1ebd3b14505f8a2d647299adaf910d7d574537f053d0e11f62d6d48c3e83ef01b5eb60eae3c6efadd01220863bc8e50da17eb40be31f556de5c9a1fd4c4be9b784d6f16272a38695a592d9324533353d5ad8f121abb2b145bdb34eedca3fba1a4177e68d5abbb6644edfc724ede85a3ce7ea7758440df86c9750d11fca3988840000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000904f96af1e7bc1609e94d8e6cba45dcc409c543e7c3e63acd8d77a21ecab094fd4065aaae778f935e9773debc3c2b8fb8bfc9680b899eb1d34b835ce6ae3a5d14e68459fd5a34b1ad0b3d647bca826fafb5432353a17d42fd2cf603953e4508d2a239be9862adc3240b0ce9bda9a7620ef347479b2a7b00e8347cca413df6dd5715b28403a818075fea798a937ebf70a82f1124da148092bad44777fc165de0dd16d872ed0c9ff26926d2408232da33a7ec49c1100173ca395ec7aaab9453a898493c52af0016318b43bcd1d095a708203f6816c634faca229fb8eca16fd41184fd1f10671fb9f436f36dfc7faa967adbb5ed94dc2b3b7fb9de1cb2eef1294ed916098044c346aee06c7da9b14b09623e9a7d30371635ccb51cbd01fb352bd73d56dc9284c45239bb14ff0c18b1ad8299956fa55c9db3d5d5b6299764e7d95ccf04bc04883e032d511d3af8b7896620c8cf0f5959e43d22d935879f46340dd0db68e03b6dc13ae400bf52efc19766685a5befdbe9df9a1e65731bd3f851c92c244f59e9ae1faf0ea4740d65c6615c05a90303c33dd5f475f40059ba4644011de596ebb1cccd86cfadd32bb1c47438d893c12160bbb9e26a3a6307ff460e1b6c800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009857dfbc623607171c29b710f36d992c8be75a7908711ee90ea98874c442de03d05d50ac29f51af539e287898d47a282954370dc7d29aaddace68bda17d43a1fe9ceeed84d59813ac16800ad967cbff86fb32d851ff37e10d191593001d12da776387cbf4d7bdc25640d69c302715ce562166c38bab1b07dc5c4e04463bf1710cef5fa03517e17d070b1dba879cca0354634d3f4aca0ba0142cf385b602dfbea71c91224c5ea92f15da86d2defcc8683444635c6dc950aabf83510761edb5ec2c01c6c68f435cc05fbf95f61cb3cb066c22c264579fcbd436a953e5be6fed83a6e14e5706fcff85ad417102b304d95eb17b7e2541bc423b70d2913d55daed4649229014d9bf0107bcf5d488a8d80fc000c18d7e7494fdd6d43cacfce2943dc93d223b4c7dc0c69e16aeabd7e2661591f721883aa38f7332f6daaf6f29a48e03c2ffe4c7a3f94a0a3dfbcb52c8a593f4d94f17a6175bb470e1310c7c112a97e6743a236aa7d9abc73f140a8d3099e6c413cf2b8c532e8c401eb100c020faeb6eb74ad644c293bd45456e949b8fc022f7bb2461dd27de2b947f9a93aa1ab6b4477ee0d63311bf7b923ac4d6c949be7278fae739f303446869757529121284696710000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a35de9186f85099e6353007c7979b1aa2affabf3277c5c94c4bdeb959149f8c3ac6d5c7d80ca9a2a69a2864c7dbdc1dd929286124871d23d46f32c44930c7c90cfaeba8bad0932fc5380f93a67c0dc15a97bae13d415381ffe79baa0d118fb712304462d905556c12a3f26374dce69a84332dd8f9dab712b2567dd1d9984572805757b23f3b57c0c780119ab5ed074f299430215c6d4e7b2c310c0964613f2ed638a0fd3b6d2bd792d0e5d9b9b850657de7cf6eaf9ec989bbd0d4f3eb4ebb675a41bf485dc28d5ed17ab9e03aec744a0a379cb41c5b0b33f45e54fd61fd592d2b3864357f5d6fb23dffde4243135e978c9898f2cb6cab79a0fb6762698da70739bf4793ebe90c4bb2d30af04a755f3e1cd25ce3fc2ef26af24d97d442d4fc4fb04fd5f75510b54fe07d608a1d4c48aca415907deaa633dc755412f4b8ba9f2741962ef8094d030edbde0942a3569400c8defef7366877eb439e185fcdd23fdf6a67012a59da2edb3bd1f97cf597e125159f0225853f3680f526070334fc51185a4686c1188088e9c741b03ff94f7cd4c374e66097b63a6db75b6dcb9876a9d281ca275979571224f008b6ce98ba269573df6f3e37e1353128d40a732c2c7866d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad6783e4de5a3eaa4e70bef4359febd959eba45e7140b8cc0365d5c70e1cffc36a417cf15d86f6cf45ab8792ccd525b8f37112230ed758c50f4c560eeab9982caa507ebed867875d2f23f0a3cf22125a0efbdea2906df30f9c105de5b9ab4da48b0261c24c91b15826004bccbd0171adcef7788b30b74844c58b3484826ae76173d69ba5d2efce289a1efd9c24c67115c6231e87243f1ead3ecc1ed17d7a28d057938d8a79b32ca5fe5ff47fd540d29efce3f2a2555a07376530928538fdb9ce47f16ffba82b6664a1f9123a13e9fe37b89a711697b5891acf930770a1eed08f0178b51a308013c90c934b2b4dfb7af401a6fc6fea446db2a29e2378b0fee532c84d2f0528dd248de96335bd800f234c386f61bd1bd61e96de4d15a1df2b61817e9812ad8acd040229475eb358a65c90af6a47e70930ac4003234cc9c82c2cf964c2c9cfc527b0f60ddcfcac1117648db1b6486421b030e93a6f78879e5ff7e79a3848b7cc8ae042e510ce98558eb83c6b6c1ea4aca72b37f8c6e166f9cc7a5c91875d9e8aa7bedc84a5193180955e8841f19764f1ee6d944d99f491c7a143e5928e1eeeb7672ff02fc2b1af27984b2810a4c32eef07b88ca4c6bbf510a6db61000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084c925638cb68665682b117e13049db7612a6f5ab8bc87d4e6ff506aabfde708e03c7e621102c82b8a94836e31bc6e3a2f9b89da5891011a5bbc30b568a7459348a1e0670f2b77b538d4a17f114215880889e821d88c7496b7c331481e10b3f47e2ef8f0ac70e5aa8f19e14d0463b51b9ef3e93484bec099d8720f9397f00c922a624efc7f4b71f7c0422f244bcd77cecc1b9db65f8569817feb0cfd2444c288dfea88198540394c7f1ce5cc21efa102cd9660d346579d478e598ab260356c5df1943b09f99fb1aabbcf73eed3b1ef900b960595ce1eb1465fefd230879c5cf80b0de1432c65eca779fde11587b187939d124ee2ec8377b347303cc4d41f71a88e3607f511ecb5db9aa88d4b8a4693e2f44ee8bb89f04a2ca06e7c53362f688b3290f2a6a7e2edfe367fdcd4f71932ffab36850133335e0f6c4d7c0b6dbe1eb2731ae6016592ced2bab3392ec7a140d4d062aa3bb65ec96fc9a34f349822c61a7c9fca2fdd64af3749fa35594da6de4c3c6c183ecb247df6d5ccd4513dab98b47a2a1c6af84590976ee8c86e064d812dca263ce2097dcdf415b040612dc79060390cc0b448c862af8788990b5c82d17fe327ac4b20a5281438c8d8f23e2ba55a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009321a47151164ae0f489a4316ded18362d874d69cc726553a56f0913b002c3bc593fbfeb8b60661c6f3002bd3cf648181cdfa30387589d35c8e43f3db7725e356fd2033fce74d4b1f6ac0eff5dee302cbcd0c3437ab4dd1c586622877608b205e77f540c7eaa50e6da921df9fb7d8699312d8644c40594d78b8ce03e980fe9da07c4cff851638b19458df96d9386f30697079ea5f7c8bea22faf36d5dd51d1b017e00ec7827d6e51439a607c0310398c54b7c042658a44b635f96922b9335ccef32ea34ed16c3f51df4b6551ceb6adc8c7aa14e3de3fe146b12a21ebde085c0f81765d369a5da6e65712a39f32dfe25cbdeaa156ae29ff6c581ac88f2a9c4059415066f350750356bfdba47805d1c911b6444c9ef1cae0a9033efb445a9ba98a334202051ee2f1ddd4faebd717afc9229758ec7dcc1042c258f850c62a55ff5b5034557a1232abde2919a8876007fcd85e7676bac83b6337869966f59acedf9df7edeb15179a50aa7c45ce62b4dba6ea7e61bd4fcbcedde8d48656e920481f7ce91fe329aba1d039b364194946e734bc55956d7c1badc4ad40ae269cb2a281d323a80e7239fd28cb3951c9a4dd8eef4a284f26f52c07ec557668a1c9603638c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b3e71a31f29412182494c514b229bed00e4fdd29a601614a828fae27fd919c7a6f5b7664c1b9dc138da02fee3601a323928f0d298e1d821d3f1cc171141fc6fb9dc74979eb6e782f5e6ce5df8e6a598ec4075f6122cbbd4601266b97910e0e34f3a6f0d45e0a20a07f38bce51063fcb9f866ef1dc9e1a1e1d49e91593e999493f7a2c067057a4c39d526e2b026020bb0375577fd2777bbaff4a40986524363e2303736cc42811b2708e2a55b7dd164c3179883af151edcc149970e710db4ff7c03dfcf17d87d61001f948d62662e397419a37680afcd3d78a4dd65667deaa4857f9eb5057b3e2395ff6726ba89c81b958d029c1097a14c387bf5f982126e7cc0d7bbaae00f599a125118a2f426c3c45b1d15f342f050daa1543dec34b0641b6299aecd35a0f9f5b68020a8e496e46847880f1a7f1289c7570a99c3982112cefac508d797da6f954d05b3185db5d4c695bf66c0ffed9f272207468e07c1de29e32f809ad3d0b6a08445aceb59652f08bd17a1e30b702bb16b1ee82750ceca3accbdd7870276421c20e5271f8916cffe24bdf582fb103b158862d8ee722e449f4252b34d75e9a7b2d471a2449dbb85e5ecdbf14642ba4e246464013632b8f8c4b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d98b3c3d856fedc8b255267405094e7f46587fd89667711ba384740de389b15e3cc016329a9e41b0ee932e2771c2b3f18c46f60c1bd5bdb02c1427ef9d7cd03c8c09ba1ce7c89c281c4ca4bcb8ddb9f7f489cc50dfd9a2552a6afc24c2ac30984c1dd4eae84afe7a83c48dcb66d0bc559a08118e4c082ce63944ee6c3be23d8dffca6beea93daf52c6437d1e9c95cb4153968e27e16e10871a9282ee43bf52e17a726cce5e27339818eb4e10e80663ee24bcb378e8281826a15175b130679ee3cc1ccd0ed9b38ad126cc71d76227be5c981b0ce9f18e1a6c05aade7502559c0a634bbf857653302855fc76ce3eb3c95996f5b625105fa681dae61ad61e54a69dea5571cdae8651d22aa79c8980c9e03ff109ede175de1ad49ab4b562f9bd0115569990a71e2a0008ec275a7a963baf988c8dfac99ea51b96eaebb01188e47aa4f08cb5cc98082c87b19a7e61cbec85da6268b8aa52bfe5c7200849221b03ca0f8f988129e0959fc8b6f16c36e0cd830f9be65b539f38c81c3b86ffb6fd772e77bb858594ff71bc1739268f635ade5d6a5c9690f1c1d601d9de8b6ceefd82db59a645c664134035b4787a49cb8269471c6f592bc705f7b8a2d3cf4d3014ae33b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bb8b48927f2373a190e2ca21b217e1c86a45d41794adae518578e40b7c0d5ce632c76ba449d926cbbe56323cdb5eb8ff2e3b6788f5f4f314927aab8fa9f6125565f474dd5b2d1f1a12c1c12330fafebbc72acacc892d85f43397c3b7eb89ace565b8022ce9505e532eb9a004a91d279cb7a62abbd125d0bcfd8c71a1a7b5d62c7907b586184f5d4f3b8302d7d43ec505f92fdfe6ad825226ebd5014b0e3e5cbc8f28e9f6155e3137600ca88490fa78226b028128c9be4d734d858164c2d3fb61a6323ff3d97b94bb99ef196fbce1eb71cc32b08d1c59738b5ccfa69f10bdaa0851493415a2de35d7e4d323fc3ab496f4e45cf40f9c1e1905edd5f93b39961c0e60ba58f75a669b3317414520f7295d13d5473dc28f7bb1600c399157f1475df3b351ceaf7ee8e4959ab0fb35391659860d30736ad2347308b46567ed5a02f080f7cc7a9782f738f5dcf295c63a740198b4a6f553bb51da194129c68ebbf5773065f3d4080edbf101f6931ef7464de64b9ccdda39f4253167f11d1438506bc0640e15b8ae9839984632ab043939c011f9c72cf8cf91c5970e5fe3764750f21d424a5f4b1d46716d2dc570e90321ba8614f9000e5be3322f7ecd95a486dab60710000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000abc6254f68489a4f5fbbda1e099362a9879882abca5fb16de3ccecbd7c00ad488a20da7eb763a0adeb8b264500d8ad33bb070cadbaa29dc1caf6ebe27acfc206b8af4d91983679e2b54532b2550f185a0db28e8a291740c114dbc6a7c17c199deb2dd2ea5357dda96239b15dd268efe7712767aa1a30f30382a363205017956276bae8c011f0607ebe7f0a1906e1c28bf62e76584a1fc18c084c1f742d35751d7026e683dabed9131dc7ad03e5d987423256adf6fc2271b5d3e64ffcdc3af1568e6d412aa9eb8003781281140720efa8da1c502d6af6a3adb8adf5a74ab11aebb9f85daeaa2cc3557e046a4792b63bfc361f59160cd62bb0aba9a0531dadf49b892f91a7583bd8a00a4aa7c80c07dc4b277c1e900900e5c28f16a544bb5158b52c24cd4dc59303b3c97f39eef0b85abc4a08fb79cf26bbe4ac62f8d93b6b2092776e10ac677add960e42047086d60d25217ece7c8923c32ec1f0602fa830b78a56db8595622cdc7f909b32716b6203e9a7224370429fa79595e149aa4ecac0b1beef7b3eb7eadd04ab40f660cf2e8bb68ebb57c5cd1c082eeccbed5ed07e62fbf519832d556be15f7d6725124ecfcd8dbd0693fd37b27338583f763630f14f1e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac9e56525d5a0ff9480085edf45b0a0b5a7ce7361dda802e0757a2b7f57b4413b8ef8aa56d164af8d629a0bca65c191ebab7c2b26f4ec6aaaf586a73c9e42d907372e5ff6942c45256fb68ddb0e41aa916129d4049d433bf6d63f87084332865593103437a0ddd0219ecc021fe824b9fd65204a6b3910c25bdbed226a8ac7acfa1906df058df2f79dee37bd957da5a84aa5e5e88ca42e9ec3f06729c1dbde99001ad323746a50139d2f760efc59daccfc4d6fe6cd747353dfb9633d2c91f8fb5c95036a8dfb41a79d0448c3784cb3b315deda975aba06b42dc37ae289192ebef98b3b39d8ba9c6240f6c86e6db40e1d270f20ce804a82e32dfc1134d0ab630d5fed20be4c449be8ae35b4047819845c9d4a177ba7abce996162b871bb7d725311ec062aedf1638a11f7426251ade13658b7e1fd27d85536cebbc4d4cd560951a59f397c9a3f1e81c1b889dd73327c310760469fa57af87e3d58589d1f7564fb16009a5a5123f4be68c6ecbb67c67c63ba157ff600b439b03f4bbec5497a23e92e8777b26d4b4fb6e8d241da6d4620f406875bb570a9cf6451a73977b8ea7959f1521c52ce6623a0cdcc8938d829f093aad0fa795c7be227587b651646a1942c5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097d4ca4c52f6004216f136db4db5984953c767783ff15355813d91fe2c5a2391475ed17b6c3620ff8b15792f9a604d57e9b491a1d7dfe8d91706e9c4cdee5a890139444f931a6a22470475a653f3a528a9854f751d3a416224b0aeddddc5d609385520d522abf74bbcb6fdda10e2967375dec9e29c471407787f1c9c7441544caa1078e6dde10815e322669a19dcb1e65ebec9425d5c79d8302b0af35ef779d6cf1e830926102ecaffd3c7313bb2d9d84919e095e3e87376f6ccef9eaee74512e545c0d23c98a5109a44d4a917cfc76fdb9b13f902ba2eccdaf1133eb110f2af61a3302a80a03d68ee76b43fa0f5e36383747da509a5f593fede383a7e1d8073acf53ca40aa6b84df52e1a265ae77c4bdd61566b11f98af8456025440c8fa16bda0dce117efb1c27980709df14b379a52824f8a737397e261da4893751712c9311a3d040585a59d0310bfb5c939cf98f14d8dfe7af2a04843f8963c18e81b6ed289896f4bd401bcf72516d84086916e9f74de7da177718e039b0d24e04a15c0a8383db623e36bfce90cff20c82670347501dbaf023cd25b39360e5b060d4e682c3ace01d7b008643ecfd582fcdce49639e6a612fc47386f2ed72c9ce502eae420000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014fe662e6fcfe00a73c4a4a9811fe92be7a2296f79a03e8d0dba2c0bc8be9ebc6c97cedea1a35c943b2b0ccbe21a81fcfa53225b351877b095106e7b90b601b36a3be85bad956e2b46000a20466f19088ea4040b037f9fb60e65f65b3a11840f85442de28efbe95acfa66609205c51ef8cca6fc724e9a409b7cf5ffa422adb8cd38e43bcc1580aaa6be3be73e95d64a82443174aa2b9007dfad9b4c24b42d743a04d340668b038b733a37c0dfcec0a55f5f38295d9ab561371626fbbe2ccab4ae45cad2ae4424a792c0ccfb9eafa2d406b10e2142053e5460cb071f4d56ec33a4dc6e5dfdc5495b54f57aa3c89241d28597b29d3612cf2010acd7662bbc301c450d357b5589ebe6789ac18f78317207b12da02d781c87c951ba3101fd46da8c13c423dbabb2363430012616428198c8827a37e339b30c961bf30c19b5e02e69e54776429fa3a2c478a7f1066f778f6d10bfbdfe4ec6d3f5607113f2ec9ff844890959e1613eb2b55b048c5bc2a3029a41d2efd7ffa21d16ed571c35feec770c2f413562f64b33a26cb84e1f80533bcd1464e54a12cba21922997fb19271be4c14e0bbf2d721c7fd79833f3d10e0a175751e815ce56c4de528acb5a67e6fb1a0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029ada23c7c97696964dfb4a30c4fb5ab0d17b0cd94dadd2b20d4f17a16340c9ce8439c18e4a4aeb4fae64b1ed6950d63f44af17fc0b090e4e0572782c5d14ba306cf2d2b1c491d62d932315129a2f38d059ba198f694e2a961a0862705587ea022342cc347136c1534eec4012ede19762c6b155d4d486e74721096c45a831a2d4ba0f9bfb223df6c6a08b71a1cee7f97bb4237807b4cd26c702327cd02e666d53c122aca07209ab48431eaa589b516b23ec931a0ad5100f4c2d06e8a867e8ed1707797491790768c47b35024e1f6ac716683932f77114f2b9a340d813fa83a87fbf2a3d2a8cb921f6fbde961fe856bb450a61d50a0a52f62ed0305218ca8d2f65506a8b9ab9d2da393cf8c3cae153374ac3aa42c54c44921cef4ee6193184829710b5cd16b8fd5a786af40892fe499d81ea5db712b68d791b3e8dadb979c872272ccb20df3cddb76579145af97570757a1faf42586576e6a79b0579009cfe8b1afadc387fe8e6543de3337d53ee0131696e08062742621cbfce092d4345365b1f07fe2eedc5d69fe38e6bba0e62850b985e84b73e260a28e684093e37663ec53d65708290e9228b70641adb5b0fb8b7c63aa752cd1bd3160302b4bbbff1474550000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac1692854f4a68f3573f92900e32e182f4f0960423ca59bf88b643fe1557a3ca8c9f144a17cceb01e4ef6a01cdea177b3b3296467bb506e62652b3aa75e42e804349c9fde142cfac9084be937a6a20bd809ac8f6bdc299c245173877e6b3aa970b9ddf85e0a3018204e11e5cb369c69fe0d8c2c849b7e0e47a05b4832970462c9288d2d018569f4df47214f7dc74a99850aa76d74cacf764b03ed010ffc1c86d6651b5fc94253422385585d382ac4ffae174ad9f83b01581782415daf3b25009c56dab2b7cacad7b4d75bb21cfb28cafa8ac65b87be74257b979f8daf3117c373d26e037c4d624720a17a266777f7a0934eb3433a1dcd752ffe12e87d0c6a7555bb94a3a9de82e5fb9372a4c94ed9136be795f50f49a181ac837541f5f2e64e941726a5841a3242764169c475197eb42039684ad5b7e230b3e4a4cb60f07513596310453c4031817ee630f2763f57a6f7f937e20d2705a3d6a2b6ee2efd465435f2c0b698fb81c84d770408004d7b47cebe35979ceaeaae4b1f294fc8786e7467fb0f15122b5d5dc246355b2304f10b562891e3d07b55665940c7fb3fb8e44e592526158e1e10911fd2cad352e53538e0077e433fcdd93970cf0706d4a029072000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089d6389726dc45e472aa374fc3be19a541fb33723df5ea21cadf3a2e107337838348ab3447730f52bbc4ec16e576bb7745ca9625faf34e9a6f323fa1aec8287109fd93e9fca806965b46c24512323364f98f11b19aaf26de554049132c063a21f4142390e9b03b3897d3f0fe76fdd39011a133ce117dcdb36a8217718489d8652ba907fcba17feae65e59d01ce8c737e2cf283e0c483f53e2fbdbca623c3163a9b991714c4d16a4c480633273c495273c77d8f95f7a6f0f3632f95f8a1dfa498883056b1398af66e5c174e69b17c4c4a22f982cf30d0aac0b886f7bc582689735e4d12dcc2b685b951e1bc2700f9a9d6c50c66db85a7c6d6ae81b56f12d9476df1b3255844a1828f3b30d637fd7c40ce3b4164b5882bfaca102ab0ba3d6947c25297034e81f2f8972d6a0745a2ebcb2c986d045ab721f94ad2d348a10b0781133cd997a8cab91e1246175e6a92f6eed64f98fe91b02040479987aa86431a4262769e9852b151ec5790d693120431e3a1e86b55718f18036966c4d99ef789a417f6a0fd879532bb24d655f658c173260ce9d53e4ae5c33e77818f819299564040efe2e38e25e0b40c3663dd6457e9cfcdfe672731acdb8fb6d00babde5158468d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002dddb41f388592282120cc260abc7afa6eb3cccda1ef340260362628ec2af1fb3ce23488e4040f03f1d2c0f1f35a2f4ffd13958d0e7d026fa76ae30458be9189030236fe396819b1e0804c5aaaa5a8faa58939e51c288aff701ca4f47779306f3f55cb0f26b4f733485efaa8e1a208691f842c83d1c3c511914f8c10e0e27f319042427e0fcd32298dc1177e40a8c7802808e219b3dc69dbb153886501df6d2e6587e8d941ecf88984b2a8bf9d8ef4db7715fc7d34f9d2e096f534b840a8d5932ecd4bca9a6f8195d491ce0ead12317ff42b79f554869489fd4ebaa7710436dcbc8a095d19f4f8c5eec4ddc8375eb3e663d7c9ffebf35ccb5ca99679c470d397d11e8d081a4319fca7c2f2901bd7ad212d7e6912aaf390ea1cbe4873ef7e165ab65eb4e593d2227ec7280d804f16e323fc429e31b224169f218725b0e1959b849dbdb474361b1fd8f1e97a74b76ef55e45a9f41e919f1fa73ca5cbae46220dec97ce30468ba7fc7ff829155c21bfb40e8f01192c7371c60d1f0ec22e0bec29b4c4d725a6311040b7b2239ff10a66e338d4b757cbae0dfc884694fa1b4feaaf365f3b5a992daf2722caf0b848e397cb2bb2a4af8850679a4b3a46e2e2e9e6bf1f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000707ead970ccdef221ca999e6f9b990a23aa655c3ee6dac13937e2dc96d8cae758b9887b0b897c39be2022d0515047f79dbee606418eef5fa3ced178f96c57cdb92148ac152088e05fa3804d623750f7e27e17aec0d9415c6a56c00fa50820f3afeca8919f4990691779267511f1a8dc8a504a06022ced07ac379831b863ce8e0a7b85349819348c13091257ede782d075eff6437946432ef2bc491ed1d919c92201827a51a169f923269724869722b3c4122292155607a62cc0ef150c5c62f445e07bac776cb8b8b667ec303bb5cc83a691c10e7d9b3de69d32d046057dd1b38880123a34dcd4142befa7cf4b2120a6064c7e06267ea5508736c4d4f8e67636c9003d48235a6b1a6820d13c7196affa3c76d3bb8ef0e2f2233d7819716198ec75d84c7ca94237657786500eef128efaf0b56a8924c69a58fbc6bbc7d71ac919360b79d56fd09b28721f2a0409aa16609a3581b096403a346bf01febe7b39be150fa3c40698117591637bf1f864ee6c5ef7a6082ff1938e6d107a1edf620bc2ccd76bda973015f0a34382d4320c956f46780c137e767b373f9c175a966da7de8411cf2228b499e2544c5e9eafe9586e23c05eaf2ba5afa7b02fda71129268d3b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000928d4189bdba78a482d06b8d9049277178b9de99b1cd6340834de7409be8a666dc334a147c6b32cc5c290f4df79483d43fbb14752113b45eb86d2f633243c1b7077c49a3cfc677fcede9c0e64f7dc66b2f88319e33ff5aef585e284ac7fcaff4ac49f78e0625ff856824d844236863770eb6a7908deb531f392da07470fe102d19bc27d11b0fdb1bf90f8ab601acfcc0b713a793a38444dda79b077f53197485b83fc2ecc17dc64e127682186f12b27eecd56938f771c30c8f6eed31b0806263dd0d3c46834ca79c0fb3d547acace074f61f75a946dc1fee4690fa418a86c0d6815728d875cd052fcc2b4f8922b2c51baf8be9c9d441936b1a1710a8bd420f46a28fd9376a802116e4d953cda333e283ac0c5fa2a61e479beaff318205cb80d801ccc68a8fd1582261190f1a70a1b54549559d01efc23094076dc0699936b9ff3f05eb914b56e13c992c4bbad8e6b53caf9712c86f8543b7cd8145f6ee12d53b26452206913b80c09720eac8cb97cf52aab7c33219458a002354e8448ae35818462de7e843da5c4e57a6f85b2529736ef7aad201454551764aa5289daab5c2a322e6d931ec3a89a5cf0f11d87167fb3d3e33e7b620173ab7c913f6c36e94e5bd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a39395ff08854d43660f0bf4f7cb9a3d9deed537fa3d03e8503a965e21fdbbb69b45c4da9cfbd8bb3f114f861611b9752ca9d9e213234a8e2bebb186c30905e21f520dd43c5ad77ac4c076ee550224026122e28c4b0e93004b473643cab37f7dc6e0975019eea2ad6549b25b66d36fbd1b752566b3abce3349f78a817591015b197f4e77b4b6cdf40931e02982c116e06bbbc9bcd5e86e9e03c3bc988d8e4169f293410c240e3ca5d71cad356d249ff0a17b4ca88b5299757bc0f84e39481d99074ced9c394c8836cfae7e73855204e31027b60b1b4a6f61135561e3d87cdb7582f974ec392911abc2c0b8b376c669cace1bd4d8c63a84ccdc8473feb1e410ef34d0ea20e81045f41ba5e6188a34c840d7a88c2e9b83ad3f981b88988f83a1feefe7f0215d2a0e0f9651e42200a40af57a653a64903d1320bbff2aa2b3f1aee69d26c37f0afe05ea5c175f233802fc88dd25def2e9d2834e3eb1ba38cab2a0dbd069a474932eefda9f3150d73d35f07f634d44b8dbdcd7bc6900750311c22b23d397a797fb34965d7cfba74c6d89a044e1cef3fe0eef948a66fec38a7cd64d0738d21ea9e518a59e7bb76192dc77ea997dc8a298d9a40f537e0bb71b649f73f0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f40ad3d5feadf0ed256b2781b3a734765d4f1911cda7fc3bf3a4af7b25159e876cd2565e3bb79d6647ca1f8b4dd25de089038db4be18566da396bc13cc37e741c5c0d6368c27ddb3d14e98e6218e7060047c943b8d6eb5fc558185de7454e8aaec917b287d502c9bec59fdf6ca768a4ad1e2d53ff9a5078e10f758566d53b213ffb2b6f72acb3c7075d171d60be4588f30454bd78534707409d0d4ca8d5af7320dd76c2d950de3eb83c03ed94e5c0a602093e906e31b36d7dac22e41e2bb19026b6df452c925876fa2c0db140ce927494394b0321e466350340ab21fc8700fcb4b25313316ccb17a0f4e86d8285a92895388c0d82b551f262b0a3af32c6331c47c2213a67c7c47ca53c889e944c23ccf2b9b5bece83aacb92e82ea6929038e8e8b2187550f13a321954de5650224eff5e79c23a8ab4b67be46355f3b4e88bd82c143a84c0444a68f727fe26a6258239b1fe1cffd834667e463f76afe95ca77066989d6e45d65659a09261c7e8a71ac6ec82576e8775fc89101ed36e303156346f6648fef02f720c2d315b6496abc1839d5089107bc324160191b126f181bd919d39d34093d350a82d9f1e125f404406dc780477cbe826bcb4ce0489750a5100000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad90f26efa42ebd4e268b8b12a7bdb2b8219c14df84b3d7954e89c90d474070ed3a113daacaa8d850345d1ef76e9eb7f4d77bde9ce195f144793dd3663313a5ce39c57351b8e937426475209f86dde2cc13e75ee1aed27e3386a8e97e6c74bf172a72e4e374da051c22671d12b3d0f44b7757d17aab761046f7bae7e8b47e92b76bb6400a6c5ea4f7795adda650ccdd7161b71ace1027b38903a9b9acab33f595d9a6e37a20daa23484d4a2ea81df24f510bb2509e9b22235b84d1930db827a92dd00a6e90a5cf1e3f9cdfb7c41927675465df6a45ad24c5dd27d551174142ec7680e95aeb0ce5e70be874393729bdc0607e9fb1b8a242c0a9a90fae779d8e73c2da2a9082e20b5c0fc1b2ca6df5b9b0762266b44aeef7148dd5cdd84bea5b88272a836b1146997ef8483d4beb583f103708272800c1c2a148e7ea64e6572ff9662cc7c7477f90c4120630b2a4d106f1750b87b123e02f3a65979fe7e579bc30e2f5991bac04daa36ac761ae2847f200269048f3728fc7cacda35ca000b4146270dfe8204d9dfd873e8a71bd0a9de65565aaad1a31ee01fb5b3193b7064b362982edb8beb601843f916822566a8141173a790d379baf28f1a0e0b84ef751b681000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022b54e9270f2b25c98285f60d2a4b45212cbb976b5575da9e733c2065843dd42c9d9bf7235d184e54892acb1dca5a04555ff5546b11e01e43a0aa5e7032dc3366413d3a2337894cdb664f65ba745d8165ed0b29aed7fa8981692d5906e6f1d39dec2be24d001520be6a71af1425cf0d05c043c9d658fc5a8191f39da1478ab4ea6da2d6e234b51b8b3cf74a8e468bc8cbf4f2f94221edf4b5431d165bb7e5a2409f74484af941eca0664b2227ac71dc1c2b629fc3576ca34a4069b6c939f687e9e78f887ff49a99139f4d78938569daf63b8b0b130b1e1c6b35c75d0369c13bb4f0135c92127646898d36853129f9e89c37861f32e81ba69fce1d5f139665507e735ad7d6b3649bfaa460755f37771d5171b768525294916faf7c0ce7ac6e058b6ac3e41783608fdc9e0e9ef5a016148ec8edfcf8f0f64678a9c43b984e1631bfed02ff00d3a339c5bbd4616b51932e6997446ee24c8b9d20da5a6bede7221b09c2f5197dcac8fdaa138a0f1e88e6d8e677d4fc085f1602bc51c026b73e334696b3ff0f771e0f0ea59906a3d76749db00dd6bd47cb1f3f3035ac9847353eea0897073eab173cd972fd7c697d206bcac97d576209b07c902d4a76680111967ada00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008405f44104ccd90f245cbfc75498f65ff202c421b6efed1210676782724a3f736851b754478cf375896f42999c73fe8ec3165a46169c1d4b221f3987ac4d443466ca487215e75f6a511a18e89657a793ea88ed89fbd023ae7e3e1ee16cb74a9e9f170de651f5333f817df02ffe4d56fa686c3bcd792eed2c213e5abf0e0719e546716369d597f12542e24d6c32cb86c38dea36aacc7a4bad6292997f7738350d87e457ed93ffb25af33393e32901f87737ea4fd4f4579ab741d9dcb04c48fba75edaa0d2ddb6eeb207d64964b100274e15ab71a9a30a7eba8113c3fe42f3a195d85cf4af395b9eff3cf80451cdb6fa66893800afdd6d7b4c19957b14e10f05b007442d9412ca080916f4f7e367cff09f5f87601184d036e63c33780d76f575b0f708249fbaa55a2bce51e8f6b90a09f5bede531d613fdfe830c955e0037c97ff573b6e051cc42e70f2f3b9f6c317e32b51f76c15f264f51cfcd9ee69fe053c40906ec26f9c19c78f0f8ac378fde36b1eb1f23f4475a314d652adfea1746f0d58a04e2cfc024c0a0caf96dc5abd80c9791182468503530e7e764c242c6410f949be5a9026c2c253a957b1b9a56d8a659bdbcc3ff5eb1db2c089193b94458761f400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e81e94bce21f5b620dfc127425ef6b73e60e06d0aba99cf90da8ae26efa90c112f9805f150e66c626e44c797f5282451b82bca83a73a5c91ffc071abece755fd7997b267d7bf39aadd5ac3c3f642436b6a379f1c7dcc0fb58265110798373b200fc27170e3ab1d810586d5d1c540ed67d056a4449c3128685609ed8816f4e15532b0977577d9fcd8035d1eccbe1c281a5a2a7ee888ea971a30c1f2d3925a36449480c35f2c564ad7ae3fe48f37be60a93a8788d02af022d381fd534e953e598fd22d174f4d63e957f05c67a0e3e7ec0af30505b878b5bdc9a2fe1d0bbd43483f7c75803d0cc505c0313544b2c5858e0c9e53ca89dfd58339e531f9345c2f3478b74dc8633679114e049474b16f3b564d7c69c9dfd08fa8bf123acc6b94e753e941860fb1aaa9710fd66164df53481a359e7c96a802c9f585cb2915235f5a921c5f8420b0ddd5e1c26e15d5acaec64930e19081ceec9a366740ceb4978512f45cbd8db05d771b7e31204d01b9033d598df2f2f2a26cae1b3981cb6865e12c04c900a666354e6d020d4839036817e669b8e152a8dae5ecb6d6889d1a59487518f0905eb8c92b97f527709c1b1e689e28bea16e33dedc8752caed7cf1056e74d220000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000155ad565f43eae46c52654b2e5ec612cb173790ff23e46125fe5effc49440fac9bf645a921a16dda2fddadfc101bc84ea58a9f4411ff5769d4ba69ef85b3def0331a5ca7c8f1d614401f77a7cf3b0c641a41aa42121342398018b812dba8cb85f8e814d089460e8a1095d0ab5a47e5f8a10b947333680e4b97ecc16c5b68fca0498a8e2a3cf0153d8490227aa3ae3ea571f8ee216aaf10d0d1ba3b7d72e97dc5784c08f7aa00af63d4124fbcbbf4f89e8c65ace55edeae5cd878704d9d3b39420ab369a22277b9d3e4eeb67ecaf65495d0670ecf1b10f18b448c2f048bf7ba0178df9fec21edbd1b74585c6b9615fb6183bb75b4899ff1de18c149da8ae6d6861c261cbbb1cacbc5376ad7c1e44bef533e06c3228e9e78e2630faeda9f5157d288fb08ac965272ef31f5628d64f23e0d66cf2652603bfb074ca8f9c0d694b7a81a344d33c8b526d317ebaf6b813722141bb48e040fcfa9ec0604af00e1c71302d34fec9cfdcbade40c076fa6677b2405b80c84f47c1d9977275c12095cc5692c292b75bc2e525819985c8de533ed2ab20a7581d2150710372f47f23d55454eff27900389bdecfd9d7518b7d155bb90f4500ff28b1bfb6276502a2e32124ef088000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026145857d0589e3f021357d49b24bfa8042124c2d0a8a7496764121cb5ae70bbb468795e055c1f2054868fe215a7f153896593413eadfe5027b63d32bd7baccb2221327e285471aa106a130ee959bb22830b2b177a29a2e6062c5ebd591b8f52e6ea5b39659164e2361c97d1b0a504c5b8ed7d84f20b6eeb65db5c5dfb84027f79a03b42631fc4cf20ebf8c96ed17793e57f932a4d39b1c12a0d1af056c0b302e9e9c4c0e527a546a48b9078c47f0d2a49997bb4796d5376953561bc6936ddb6523693ee185bb7f7e28b426baeeb2e22e48553031fbf495f66ce7e818c4c6ebbcbb7fcdd883e8b94f1dcaa42a79a96e93b176b07a91fb88a90401f82fe69867f2bd393b27b05b3de33b70eb21414fa490982867a04ef2d11493bebb1e9a73a400e57ef9cc2a512ad307f78b8b9fa3180960a71094d3e0aa0cab64e62131f3955ab2d2ec706cfa635e36b9037bd372d07cebc73849a61ffb3f8c32112b714ac1478d41cbf89f6966620f34bfe52c15cf95a2e1420abd2f6bf1dcdefc464489aba8021c9e7013030f9f4329ac45d1c0f673b8e1eb044e0b07ed36eeb3dc108f3354b61075189589c42f2d291488a60dfe9687c96488fe9e403de7c34b9c8c231b9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014687c814d3ae0904267cf35342691a50b817ec8aa4439fb42ca9e0a8e4424fc40fb9641d474455d0f391e4a2c9ee472169502e438c7058c77515fe1d30d7df2c46dde43079bf01fb8d620f966bcced1604d29be3ae00b431797a48242828f54d8d239c9415bd87fdd6e2a7fc002cdc6f893755fc8d7b82c9592305bae3f0d599551ab52841b24fe5e156962b8abbad9b4004ca580f74a13478e31260f50798608a8160315faa7296df24ffefb56abefda1eab183f9952fbc79d32fe51399976a53a875c4f0318091b898dd6da9a1c649533e6ea4692a189ab59ceb11e55c74e385a9e24c2264142e2ffd43ba25d8bfe33d12974d6dc60b441edb5eb8cf2a3ff14139688d565690fe458c144457f8bff714549be2c862854eb1e7670cf6ac83871b7ec04689dced95027e96ade9852d1aa37ae79b3e26c2a205d2ae794626169f5320c3ed90084e4eeb4b3b50b4a4acced0166c0ae39afb906cd129f09255c9c097cad4e4bff273f326de024968544f94f08b98479c940ae4672f5b8a0720b238bef9b93a2bbee19871e63173fa121a0ac0159141098fdec14b1d6e3c5578eff142580bacd4f0fdcd521904cade8ab849795d2700b8df3ca02726d5b039483830000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000248a0de024121fb8e06cae9f5b8544641bf6e7af17eb312d1ada6090fa227c589180ad3271bbb39fef7544910981e23139a242e7e54560ceaa154e4473ced653d7639bdf53da9b62581a97b62541a75f9d90683d58a0ebdd176f051f1003c3fa217e374be26159dd2ea1c20598c7f368512d913142470c1df3a657bbd79efca5902355e161624c42e52e5fc28c223e2b91a2151a7309ab98482dd3e4f8b32f9baa7ef82ac6fcf2c7f06b57c0d98f6becef312681428bad3339d8b05265513ffcc522df7cb12ecc7d92398e598cd0b4427879b0c97419a608cd6c225d5d4277e27164250fede8375216d7e9f6ae2ce5749f1f2f81d23badf4e57bbc91e80397dc65cc83eec50dd9a9e30bb53c0d65f54c8233b02f21b3add1a03f21e497cdcdd8a1a35794a0877330ee40090627de09dc90d576cf27c66b1b25b12353d7bfc9886b0a36fcca5ffa47cd2175c8924a0d57c8f8e2f18fb2f54fce4b4722e65da51c9d6911d8a195912ba24eebf9bce4851bf30f2e953a6d58dc9ee2fd226488283f2633d6e706969ac7210508552ecad32fbad5ac9620c9379c2a7c2648ea1f46f1469dffdba8180bc4f824b71bbc7e765401df34f7deefe11238632218709625e5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a26d7a77c7bdf50791d91e52de169482855ed27cda5b075a708863024b669e17cfd056d7e8c7ab4095e0b836e8a97a6164b70dd8d8efd8aaf101edd5072c9842699497b6cd08c27fb390aa330d372890ce33cf2d68c6affade9a5a16bf534d5794dbcb4ec6b88c1dcb3b3b8c23176a828c24f308c33c7c4e37888daa1237bc335dfb0f4ced6e49e92857c83a8aa3c0c5c77ee7f676751b2cd450e36e5dea4cc171f9caae6b729e7aed970fcbf3218e44d59ab9242b20cf27221383d9fa22dfe031621d6db1b50b07c4e0a914177d160b7d787df1314d8ec840577a43efc9a9374b3e2d51248d675d563532667439d1485ee19c6d9ece49013cd66584672664a02840169764922451007e8dc5c9d8ac9b75dfdd46f6a517de89f8db7269c31afb756ca39d929576c506f201686e247564df6dfe1228df793703cae750da8e9107a9f7783f2e10c8afda9ae69c3667a57447f27569b25c3ea7f5d97ae157c28af019e3c0dcdca0fde28f33c0f633d9be1765022a004be1363143c651b372cf627f718d42f829c5dafae5d69693e50c5be5ad55745d6077a83d8fda81563003699d1f7804e7f46fcdc395b15de90ce23ad1b2f8ec65beb6f1d3116e4375301c030000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac04ab48937340db68e89a9e2437be8e377cf5edd3aa3c7431dac87ca1488e6f7bc2f42b6f7bb3b93065c18fcd4aa9f263fb16ab9b096164211fec3ef424a565d1ac95ebb95963eda52d455170c1526bace85e103157288eb1bce5b4fbc8afd0d61da51ca0af4fd6922a726cbf9fb2bf42e8f05209b20f6d5ca9a9c2f556d34dbc3849b84a06358d1a31af6bcd044a944fd7d4acbfdedebf94bf612510b35d4da1558f38e6c7d67b721c95ca49dc502100aab8dd17905782122849aeaca62d42a0a0d384539c7e0ca053b4136beb2c90a42aba22ca693c5f1366c1ef4613b0a7e9ce19e5636174d2618d7d40fef84741730a4d0b04f36e9115965686fb1de1f9108efa419e38f1b88c21daefd218d5881712da6f5d448ddb53036a2a12bc3a8f9bf31499da1adab14a8b2e63a408eb93f02e997a768f2938ddfb2f339efb04514f91a9aa62b7e3dbf52837956b29376fdd24cdbd5bd5891d2ba0aac0c3bc28b3fd52344b893241f558cbf07f35fab0ff514be923c79a068331e755012182ea00871954571e901f4e845f35fc04c08cb579ddb570ec6e2ed9465e69a26a565c8c5748b5c994e5247629f9433cb7431d8630a09dac118f97babd715278e3caaf4c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015403edc8a3ce1e034058cea98cee61299619d9ab8a681428358d583abfd58010c0e3a9997b71f3d4adcb3cc8e27bc0bb1a88c9be006a281b6aa45376d98186231d5be3cbeddd9bab8ea52a8a2f068c05e62ad46eec02d35cdf0403f5d80e6973fba3160ec47b6c6a20c1befd4c73cd5983ffa8c07c34e2a1cfe44e18bf2e18254133c80dad16fe9a955cf00dbda08958e385cc4f1c8ae18d0049d1d60d2ad7e9ed66e24c102c60ae6183ec95175bdd81c9540e50e67798257400abc735095f3230065796a710818be7fe74d91428234f35cf758e1599f6bf4a6eff8a5b2b0687c562663ae17846f4208a5abc562a4073703f5f6f54a65fbb210928c50ea4a3b2e281636d57345d7bd3a979aa5c3020aab615a2fb80dc53656c66ebabd5730add350a8b13f0fc6489f4bce527ce8618eba83ba413758db824803275cbcae6afc768baacd99d8fad30ae24d548ef6992b4b495ca10bbfb683a7b31a299de9094e5bdace30d64e91d85269776dac6828c46735675b27dc909c5ec142fe75f8f048648b534eef149893792833bf664f08ae157c2cf2a9643a3a8ac2298820ac3b75094c78272d1d0ec9a2e35d630b29718addf957497faf00f7f3a4f38fa008046e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023fef3b631c2be21ae12352c76b381227ffc65f9a54c03b45344e2330db9b028209efcba2d23734c55f619bfbc7d4621481c117e25cfebcbe98a4797a1f73eba0840756c0300fe88361fe7b45387cf6ae18961d3cfc68fee4c0ec02f411527d83e10c7868b552407c36b1fa3cd6560be9def482fde490356a61d687466d67d0ba2552f366799e62b2b0af6e2d3422e89112b53c563880e705d3a9c166d139f0ecf09836cb73711f280ea55c20dd50c05f4c84768eb349550b20f824cd02f64bf0372ca2da09930938690e278af65b73e3d9fa21d6c4349046ffe2bab84414dcaf85f1b6f5b7538f8df1319172fe0fc658351dfc6ae3e09656f2296c16923be291caf1bdf51a7468dff7bae45c6445fe02052430fea1e7c94a9f7258ad88af276662450bcac1a06cc056350f98f092d7da5330af4e2c2a4c14de80f82a56f9a1e61cf183bb0cab8034ac1e760e793ea3162d7cfdb0138ae7b7457542f93c4837770521e58455d01fe0434bc0cb3d04a74f3010be7a048ebacb2453acde47e7c872991f030e129d1fc4e1985b8836dc134467b51bd0f9daedd9f40f89929f7e312d961227f8986952b4b2d1aa1f92c525726281a8e69298b3324391009af64c5b500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001988a5ad30361f2d90f89d460969547720cd42998fdba9113f02520c0e38ffab501b433517338f2828ffcba38382cee71b8f209ecc1db34ae4dd92dd61caf78eccc0f6b7e50266b89b3de2134e86122a9eae6b09d6abc7b2471ee2346e2b100b2333cc4ec566b3b22e4b462943072da342d7808247bd6d16cf8bb8336c319c66daae6f1f505d6afabd635e66fa9f04354c43713c39cebec427d01018960de8c75f6266000e93ad3636c1672788bac5b8ef1c613d38d0540f90cca15a41910044135553ed0a67a58939347e99562f3db6cf490cbe29d998e3d63557ed4f2b498a940f311c8de2e9bb50eae01b43d56cd4e67bd5c4fe261533611b7b2186cf1237ae9d7b99b1544ae0a7b0d60144ae208a0d4bd6e7b880d369c3903597e8a8791ce19da6792418b61c30e684067b5c4e78cea6d7584fccbcd0b632d6e246de648e7917a6939cd9fe5d60b1e306c7e89c3c4ff41df14603839af9003dc920cab9f124464ca181916e25f7e7330a4eece75fed09504051f4dfb2d352acbb056576bccb07a1e0cd592eee1a12e04028e91cc4cc6de16cc98426198c6a6f876bec88a410325b7a104a62e279ef41e25d567fe55dd259a360163ba499d29e6c992455bd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008148e1dcd338522b518c4d118c1b6f943ddcf4d734afd613416c0df0b08676d92d891a661df14d83747b39b63f3dbbddae15f4973f5711fc074a157f2f75a52515764367f867153188178cf2069266c54af4acc1ed790964beada812b09a8173b39ab3fa4b149aac343ef247dd8261f9ee1c73275bf7961c0bfe68354e5a4d040fa3846991ce8c39f9ca8bc7dc7bc2b712a151796a5a9c4e35e2dd23fad0424a80a789d4574a9aad5c027c88de75ad17bf8d8e41e8963fb74326b425313142b6ce5dae6079d0ffc358f20f1b52b03dc83cc01d976f0938fece7e4c9b823dc7abb87bb096244be8bd3bc4e8474cb1cfc062fa06cbd163cc199bad10d2a408952cb4d2165b3a421afe81bcf836ef3e78f435afbd493bfc1d9ba2a6fc10e2d9f738d9680aae3410fb45e2ca2932d7a767b446f657410fe3ac7a20faea972c6ae8c5e736e6b7be98e0b7c3115888ff29bebacff20f05bf38ac3882d2a51864557baaed89f457fa07aa5c2b1eed3e55060b5c33efb4d22689e84bdc4294becf4d7c31801fcda167e89a124c6237e46a237e953351b2e7251045e4eee89354e26118b7c50e7e4d7f94ddb09488c92bd094fbd0ed35b9fd775b900e939844c77a882270000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029314b5ca420b014d68aaf17135dc85485586e33b0aa5d920609b54f2b35d8dfbc9f23924af68f56ad8569a81f02497f592d17b4d09be9b2de1dc824eefc3f4f2fa911d18ff39b85519c63559f72bfefe475d8c5fe99a54ebdb8aa07285a1d68772b94adaa6ded6230a973008f781875e6009cfb015ca787f57e136aa4161c373512cfe7a463607536853dcb0bd24565497c33667c5bafe5659ec59242710c518cb2de567041f7d57b3160222202db75b14b1c11b0c8cdc251901dae163571f2ca3ae197b0291a38595685592cd52ec109589058103def0d7b011d8d7d11e48a1a5d5241cfa359d1712de7f7da480cb19fdfa6bee10948f41e167ec79ca09563607589a44d0f29bf45b549d99c6bf463046895705037637e786b7073187a85bb25ba06bf30cbce0d86559d5af8d25a1bfbfcfef1ab2757f3d4223b6c56525c067818cdfda26037b222702edfa49d68d4863af6f0cf7d92a16ce3caeb695c352633e8ee741ed78fe099fb290d9d30c873a56ec3732dd3a424803d456d7bcbc1d1dcc70e7188b2a4c1a5c77d87fa3907475e75d2341757770f1a38c648b02654192a4cc35dd1b9c85ee30fb1a9ab417bc40d8cddef9c17d93a65c2fb88fc596f0f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013ceb6981271e88b7086afb5c42f127aa5f17489e7eac6594804e9b04855a08949a977c75fde9a2998e671b35258bfd76e93613b9b65c339e5111b78b1a43eb8f7f1d15de51a1c73a67e9020b0e42d30055c68ef0e5207a2ec24b8a2447706249e0955889fe668ba061a2c1535e846c773a1281631a16ee5aac47b8f61b7bfe0f4f72e2dca683b52b07d0fb53f3073d86e3bd831f7b0773aa07649e429656dffaa2d760e17755dc476b2391517c15ad0fa23175643f3c34410b2bb0f08715935566d051ba9d0a86ecdba1af500a1fd630cf06a2c7fdf9b122206efdfce2f5289ba29628e191c8a1bda1955ccdac7e647707c7db2a00fcd1789e5f1e0e0e954a1c50abc880daaf9dbb569629c0e4b5b9a5eacb0ff5e035467d4f411406e8a2bf7231755381ce270ec7648ec5bc9b7fd52eea14d3999bd0a1c6a3a72d8b398a080c25be4902aaad64d96dbf769b3919f6ee8a863da6247793cbcf425978743b9d09b4eaf7a62db436e90e2c53e396bc2d66339cf3c3a392ff74d7a9299e9a46d1137f7d9225f0021171ed53d3df7aa46ecd21856e4ee68d818ae218bf1ca942b68afc442596995a9b92aa913be0f4c86b881ee3548c6a901400786d190e7a407830000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d398d72a64c988950660c44ba9af7e0f571c7354926f3b9af07bf03d9b263d794dff97313dba7d2b97bf8e7c45b867ac8800cbe8b0b3b327484ad8b9c56c1eba7ac1a3759177da0596aa993b0c182231f4ae1013bea6c4928fa8100dff3d65a7bf77b8d675f371832bf26a149bf60ccf83324d88417b8f522372f3eccb701a79a39b6646a8ef8b450692005d7a0b14be43f6de1f95418bef13edbd9686f436c29ac6ca4aef61817386cf269ec75abf741a11f56331c3cec0c60ec2c14d780804f432c1d73dad446082f7c4a939edcdccbdabdb618a88202a63f53eca7d2a73e8b3b3c5b092de97fc7b8ba62425d0cb2cba5c204055f6c6ef607505ea69b02bb11283ba9560d6b8bca564295dfb8c399564b8c9e19c2e0fa03f97b4f01638fe22a6d9326ff4fb36c329412f5bf1f36e709c240af4d6ab6eb02c97b8c415564545a83225e9c906676f03304033e3b741f8e57e362a3872598fd186640b7125c9241d7a6ce4a0e4a40340538a876160b1c3b0b6ad678a5923bf9908cc4e01e753e5d7654ea80add0ceefdc4db203fd5ed9259c17e8c4827d52f276357f00ca4718bc5549e2708aad9d26207388707e0e9280c8a2f4d7dcdae8192c7e3d65080400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000344143a6cd3ca2c374c781d966d9a7ff2e3a9f22721a170d3cb2363a4bd99fed04a7df8563d1511c3ab6ac0e8e572b5d71955a87b0fb697fab478970f5c21fc069b57aab6ae160d526124a984fc062e524ec6988a70ab524afc70087f5d265e52131b6e52ff951f85b68edaa6716d02c52bf8719e68d78da61cf145f8059d6992874691cf3ab91b227634dde48ee5464703daa2671d6e12687f0450a332b95440db85634830d161b3c6f3bddf257f8f3e358a020a92a925b91a2b711c4141e883cd0f7e71d2b5588e683cc6f0f16edf4b5cecff3ecbeb80f0004176146f57cbcea1b3161e1354d4bd7904d09c762d059b73135655bc96adf915e3a74683e15b4cab937e92de364bfa98d0cec7caecb335b52e0065a17e8295c216373ad3232d9f5d9b0e7f769715c99f2d1e648f2c1af9153ec47fc700ff1f6d9e828f6aad1797a6cab23cd79eec254137eda1b06483bba89cb3b7a1ad9d4f199cb323ed2cedb30f9b219ba5e70cd1d18fcfb8a4382bafb31079360228eeba2d8a5118d2bfc0d651bc618157262bbaf19382629e2be61fccc3614bd0626db46891910076fe31f1d09829041ae6ff8c0214dd7a363e75b577634abc14c70ad9bcc1cd3b80d2c40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000284ddca0da3e14ab5cf4824402fef86f8ec26dc3b1870dc3796f5d78b03b02b8a0e2eed45ea64412e8ab0b3b2d7437aa1a02bb5ba80c7af94135f3a613886a8ac535979bf2d56deaae2ad8a11a44bc109569b6e06491cf6e0757f1d4c3530b0e5cee5275932d1278f2d6d4fe05b07563db9fb1faa9620e9bc8eef94caae84b12a67fcc59421693dd2801013fc50d4cdf62e232d22aa2dd1f6de111d031f042d4ba9df4dc753dd39a156d78d9fc390e23f8375f9b8d80bdefdb1339f85c172810ecd49764bc86b0287ee412632ad711f7d298ec43bf3d7cb1b3056bd901184985a2a195a49d53d0a423679e7c6bc8f82410e545f66e0d7ffa67984a9d178937e72ca8b256a5789d56e64196c06e3468486880e7d9f0244113f1f2026b79180805f7d9b6763d08ba1358ace0c69af8811a8f260ab1d50c3ff191249fe7bd2a7985ebdaf20d4b88b29ebf224a3e6d7c63abd792fe8eebbe9aa899ab67b0aef1ebdf27c5d08012153d263a8bdbde4f091f9a49451323f381b53df50456b61652227c18bc25ccf8e6b36b41709aa4531ddf9be82daedc9a081a5b7e3fe497117b5fbef864d7993d870eb9af2b6def6950e4ab6429f259370640ec84e906918d9c84a900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ab3e835d8fc8c23c1f273f9c486610042af90a11ac79db60c89c89597e26e29a19c0178f54ebc58f85758ee49b12f8d9cb5d8490d90883d1dabf5f4782a55f5f1c37c27d03920c024d6c1ef15b8b5e69d621847d8071baab4378ee26d1fcb8d2f5ae296095a4d85814b8bfd96f6c2553af3628459752d8f466afcb524ccf535d97626f58eedb2b9b63b08a99a73d47f5ed54ff2dfd1775f467e0f3bb50d208392de9434292056ef97f9c6584996b17586e0494c65dd88865c8efdfd49fa2db2559c2f53e9bacf95182adb751f23a94df5ddad4a193988eb1601437b564d3a5c33969bba125e3e2d704c18b4e9f46c2960a0d854d437e4318d0d83e7f142469771e309ac3c661b1abdf673826d249c0228d7c0f9f2ca0b7fd5b12a0fd4fac08e0c2b2fa28bc2b2ec0d2aeabe5b37ea3ad7f552e7b3458eb4603463c457544717d78994453949152c4e6ff1785b4781c3fedef6183c6fc9410f9f678256da685fed4e170d1fd4e90a7f6d8191f2ad7b88b998eb79a545d5ad19a36ff5e4edfa2dc258bd17e08fd07954b033df08ffd18ecc81d49e7890a87325648b11deff1ff5befaaa3e73e1a4ae77b09ce3cb46aa605bf26d3407305e3fb2c862546f00e1f30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a52afaa93812d496a1cb43d31ef7d1c9ab1f3ef6ef49b007a992deacc239d9dbb63ab4f9418a26ecd745f9f20fe61e486299d16d9e6121d23a13b9ade81f872f066f4dbe46f1b5d2500befa50b3a971c3031ff8edb674eeecad128248176af6f65eb45a802d051af0b54124db43658934c76a9887de9eee0889bee344b46d0b79a71fbd1ba28e335b2aec99b3281ecda6fc612ad43e12bac5d9d277dfa48ebce7d146cc3e530a2487ce3b68934bff90d0f30fc60d5233b7775cdbe0d1944aa40ecf4a354b8f33fe2df132dde8ee32790ecf31dd158aafce6d2787db36f4ffeb6de0a58f251a18a3acb795b1c239ff352b297f77cd2d84e1af3f8ae8246f49b8f858a328e5b779766af3bbb1ee45107c8420a77e857f8fd17a280d648e7326c71542c34778cd834b094b018eb5ce1c4d696a0098a038ec3d4ff96a75995e3b1c1ba7139819f1f8e8d82764a9c4c4fae569e04a7695c6a75ebae008f8d0c6eab25020a90281709c016dc2290dcf5fe8bb7375a4fe370d09897ba6d4746edd32d8262499f0412ce6fcdd64b05829e6b64f73b268babe19f88d233cde80665ca7df6eb5680ac2e37cfe315a622261885807f8231230d26b6da5c2a00562f965938a5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083b7d4fa317e7865bb858a22487db7217c86ac67117e8c420145253b2e427887b5725802a5c17dcdb3a4b12c6b9797d20565c384727ba7caa7eb230de2f0654039f9c19f7a2516d7ecfb642d11e1e5fe4b33e7182b51916ecad6ede456df57e9472f4f1142ae54a7a8981dbf8d651910c4b377422004dfb22092791c073f5796e1286fe4a5b3c6cfd48a85b0a0ed8d7d06f38e518e465a416cf644f0fdc751ce5e978eafb02b96580baff6516813e612f09cb5de7e5c83215b41b9225cde43092b9379d422c67fd40b158b0eaf9c84a7b5676af3ea198010218eb82c983711080e83e9a1b234adaeaf3c9ccc2657a26cd764bb790f8d3ac4b4ce86ba2c9d6b279ba6ebdd9d6eb153fd4a45caefa133b173d29a59b41d6b5bbab3c7521eca4b615a6ea7bab9b7169f143d50c8581d599300e6b9d911112d34a42dba49809e03676c52f518cd26dd59c349eef812c6c515b1d4651064a3a421ac03aa3832a38bdcff327429bc5ebcf41021012a3ce40dcdff2b2b8d66adc0ba042b88169ae40862af433bf8b0745897466cb9b90a91a1a2760e4b12618096f5f9c6d9c7fa228e4fe81f4fd0a952cdb008f343ed3db8c4e8dc834bcccff4a890686c541493a1df4000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002aeaad2978abbc343e999d9e98faf59806f1890abd031dcdb84b3b3380de82fb9ab4d5405bf96251eb250c89037a4b89ee87272de858fa92ba1c979a7ee7d0c3939f4639185fccd7fc6581d1d070483f43185bc112a31bfb516b8e8a3958b2a5d18f26bacac8ccf8eed06f02cb01e39489116025ed4177277915d5faf7e3e3228d003a12d5485cf31c497ec882a630746de76038decc600a4a0a632cc99c484be6c22bf6996489094cb82e0af3feb446e08cba02a4759c2fd2192681d1265a2c612df6d35eba5d11350e88c6e051cd221867a1970b762060aa2edc9fd56e93de23763488c8e90d9bacc5bc9dceb3d45430165a9e201fa9c4fc2e2299390a8cec0727dfd1661f5b9fad4b8aee94d29e72a8590f53a4956dfea774625fb27d7173be31feab242b55b71a0aede784a0fc7a0ea1fcd7e5cab40e8f9c1fcf1ab178333db759234ceb786f514642f7d50d1afc567e84ea28a91b1d56f8e59e63c30776b32693b45c6b30439b9288a344b9be6c39c77fe26c0ce5febd631c540e7e270d40e6a2aab8ac4fbed37d89f650664d5544befc0e8801679f9d40295c9d12de4d98da16af8a29012fa29914894c41e6427b7499622d419aa9ba9313b402f95fde000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093d617d8ef5ac929f75f6f175a7fdb06bcc641c3efbb39c47ed8fc6d3e4be93df386872293d9671b7a0aa8c58e9509d8d2de1e345afa04207896bb4a6c40995fd9f8528c860d0544375466509a0921a1bb949cada869844b069b0a768c4b296783b4f5d16388026578059a56a3950970cdaa2d0baea584486a096456cdffe1adc18456b6db61dacb93ae7b52d84055f47fad9837950e71dc3fac9ad18c00039d80098a2d7cacca7934c3156a3c6ab5acf38718032739531b5ab9ee2ba0bff979b827409011833d89b772a1ddabdf54dc07537c420818633283118d7cd81a0528b633313749658c4866b5dccc295b4565da9f9098ace1d2ae76839855657e1f2fb663ddd0b84bf3967207da7ede794e0324312bee8c99e983e04b8eaa0f07d57cf69a82ff4f89ccae4ae856ddc7c8b3d2fec16eff4f95a9fe83343f931d2bbd3899a0700916bc3c6a18855c37b7011d26117614eac78089db7aa95cd094f7dcf6ecf55e2689d89995bef79a6356d7a885b450a3f1562c2bbdaf3850b0a8a6fc9d0442d9d4fbc23756e76c0cd3ddba8b813863e20533b45f728115e22fc295f90b7c54a702b297e6ca0de05598ee389aeaf5fa1fe22111fe365fdaefa0084efbea000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c93ebcf6e00fa19840387ed2beac1507024c76949f334359043bfc8ad27189eef55b1abadd35f22a44f0e6d1b5518b1bacbcb301810fed9e049a7abf7ecfa55a944a10694eceb198df116d09f87cd5678c6f7aae28b9999d24f4b26efe361bfdc53c3f23364569f8fa9f5df999d373445f638e16f94032cb17eece9e8f3cf76e6a2120095a4e892fa7baf76b9ae1c9a5c31b066b2b36cd91ea708326695c77b93ade50f369b4eb4a2bee9fd554ebcce4a5da1180c722d1790d2d669176b6edc47f2617ecd8c68f97b7733c84e8bae844074b31f03d3956bbd6e35b148a7b5f5c4bf4e66af99582d0658b96a0410d0f439811627bf7f64a4d2e99bb07a7003d14d037939fe203dd407c48db02b4a74f4e95a1509723deb675d5c5d18788b8d504bf8e40578f7c984be0b72fd76ca368458eef6bc6490276d5c4de669a68e55a1aa8bf7aa3d6a434e64b9ae7a5b8efe47a67da98a81bc49d34469e59eaa63aa5873ad5202e96e08840f87be24721158d28a77fdcce1f7cede1889a9a0e8792fa2911971bbed71ce79b615b884ced8e0061e5dbea818b048b962d2fa283bec74b229a1028f0f9944de84a39d20cb807ab938052c850a7bc1b7aed67f7d769b68d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c013047967b90e93f3271108ee44a64d692f7156bf11161aff88d6aa5295a11a1312e96d6d9b4bbb6dcd4248b53cb97320e805420e7ff07e3ac491c4c4bf2036e9ae927c57a4b238c281adf4c9ea502226d3310971b37a532791089cc5d4c4191ee84717de12b54d4e592f919e286bb786297053a5e2b314266f2530c1a2007adb14275ffa2b6f244e45645507e62ad71971035e1089fff28f7fd692cd85a26d4f8b647fb1a87a252cd141e8e2ec2dcf11eb575772fb2f08d9d04b374a694d707e9e0a5c8bde515a07800bf315b8053f5746ab414d2a92d96e46f3c71d26e75796a2100a6467a2224a1d11b46e3f34ecb30c2463188560f803298276225b2b6dbdf631aba0007de9aa64b7f4ee8d2b88b8c7823b7cadc8ead857e641161b0bbea0da8e3d2ba9ff3341e3c593fa6df61a1dc669115663d1b84b598e8ae53d177c9a782023e8b7d301e748d675dd9f6d2461706d6f05f87dc2fc86e26df5636142bd5f257fe7989a4a084ca1f45ceaaa02838b694100698bbd9650a27a433ce5fd1a56f0829e0e0ced56272965d3f90d5d893e964536daa035c9a07a375e45f5857d4e390526acb69f3b737b5ecc1f05790ec12d4f0e2f7c51a091cd615b140c000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001443553b02cbc9aaaa061ed878d983761bdc7fa99eaa2bc6a9b716ad5ebcf87cd2f27a0d7d46eff17567fc7be8e5dd62e82e9884012fa08080a8685df082854475cd5104e8798a8d38c2eaba142892399dcfdada6d69785527fb94ed85632d45884dd20c3164720d705546480ed10decdedab14bf02b41c792263ee1502fb39691b9f4d99e7c9b87d229b51b2ef63c08662abdcecf5a43a9126f6f9c4208a0e3bfecb91b731d3c0b70d4122aa5d7f6c50ab222039ea343060a00cd69c3132125d5339d563c5fa80d2e0fb7b9648df5769f60ea3aa3f81c3b3d83009027ada65bc6d787a7e5e1fbeead0fc8af479ad38465a2023046f8cc07ebbdbe51ad172b46e79855fd4b3bb0835d27acad248cb445eb19c5230ac1bdb0153e810e11fd2c936cb3504a4d917a4360c656feb3fe731799fdc61484355e51fdec0c76cc3dcc4a9cf853b394ca3867f7480c6db37872ff402bef5f7bb16abdcd5332a1f9e61571f59bcc635501829075ac65ecef766242322d3256627929d677475b0213d840f4894b2b3c43576a4e013535cda24332b9eb5ce393371f59149f70809016a4a074833d00763c37e3b7fca981672133368d981f5ce22005d4e97317eca50785ecb700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001664862110c386ecc04082e184da0ac5ef1066242b6789ae9964e9e3f3f1639fb16d6ab279d58cc4ae6f09e72b2654f6b96aadae039daac9bea82915c130526052a40763655f241dee6c24684fcbce39f16e4002d0949938bbccbfeafb8f6f11f065289c471eb9ed0fe7fd565460dbfb3980cfbcb544a31360f7928187aae57ec521066299e610d414158cf4417cf2b6aae6b39d33da7d40469a71e643432491fc6b187024a15fd39606e51f45296d844e6bf74ce5eccf51804d6cd2760eae2d53baea0be1722e8b90778742835a5075e8819c4a18806e3b739751117ebcc97438a195b1705d68ef086e578b841a394523aca8232a4c329b7587a8c79d46dca217a31d51173678ecb729f6400cb528fd515e8cd579f61f480c7d264889a3118eeb6717efa673208f9ce7c6385c3fc16659a574409e78df64c8f15834da258c16b2435922436e3de3eeeec843d80e0274af60ac99a8fd41218552f84a78305ca4296ed52d373dc45a86292b77780d7967448c3486bb4645cdb1638587e1abbc0768696782d3c38bd4955d3f05f99f8b504f12134844f8a6a0c426b7ede900dc3ae1eaa2fb239fc4d7d9b31cc8a1b9eb41ed59a2f25c305a213da55c3c103d2b5d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab1d8c5f3f70c1762ed4ec3c2a52ae932aa22491ff33e690a03a6282a7c10e6965b8b792b598eb0d28e89dc81f751b968f294ca262efc2bbf4d64a7c1086939dbe95cbf440c900a10a28561fea726169c4799aed48fbd80d78f8c4927ac572cdde7efd12ce63a2c7095d7abbbb0e3749ab4b3b7db6ebae02bfac184b96f86d42d30f42b4ea2830b5160cb4cd0b7414fb63055811e740097f96133e85b30ffc975ff2c683281ef6e71833454b04340abe0a2b5bae6a3a1dbfed333f7a2d05f48d2e62e11d26d43a841968329164ced53f1914b56a5555824a83b2b738cbb6e0cada30acee6bde8f209525289d6c12968a519f319292be8ce74a9017fa50973b1bcb03d11ef6c6f499f8b97e95384c92719e948c14b40cbaf839e7e0c727fff5badffc1d3a70a8f5049b8a382f150ee9f4c043f177d93c3c8f7b6952c5ed75a2dcc4fc36266e77076c782898a97a28b5af01883cf841293f30b2f2badac58451ff70655b40096ffc323aaaa03ca99b8cabe10fee7cac13bd752f564aa79d073bde85f8aa6b6419022902c520f145bb44d76b2bc52ee52a421bc0fe35eda873880feb158a21819a4d14a94dbb74de543151c236989fe379ad0b87fdfd6f9cc1cdbd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a27e2bd54e03e5fe058579c2703c4d5496eef2c20efb2ff76cc24ee45952e5b3423e426e83dbd9cb77e5094cdda24fb051dc4edb8410e30b7da0847ba1b0fde9f526c65135cf2c9bd197485b0b955d339265a0af98d7113fb40466fcebc23dc270ee733acda4bb84b5cb96dd7d1387f0576e4ecec407459a02f45f5834d1fa2040070b6f1ab4ea8a97b7a84e3c38edf4c64f8673251fe88fe5703b7b853f72a26fd82d33e821e04b2bbd426e732d95fc304bb37606a72af76098d041743a55e0e68cbd8c3b040f77a3914fc10612911fe42272e01a0ab9f67a1fb1d4cafe7ce258b4b3ad0eb8ea5bded991b85b87569f728fda31f82f93b255d530e1b156a11a08b5a91874ebdef08a81f17d2c8eaf07f700b0bb3ac82eea10348c04bbf39e41330634b382b74f0ac6bb02a2430ebb5ee7cb4c34e515262f84b02c77ddba9cc9a1b46ea0e45af1bb06b56409ffe804dd807fcd00b1a64de47bd34203d3f1c6ffa4815fa476b1cfd74dadc3b7c6d85f03093badd09b8e91e32d0f0a04f41423ca8a7eec015036ce26efb9873d434ff8f79e112d634e2b9b94be2a35eae38d208ee2e19033877d7997ee43a80495af2043907a80664224e029ff4502ff67b8ee260000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a58b8248eed18e38058253565e60d23d9f60b54498645173a9ac5c6ef42807a6cab26329177120b06715571a9df31300a8452e453b27893094d7e31d9bec816961809c4782f7de3831e1acc2679b358b6276f3778861abcc0ec3cb2cde406b8e1aabfc6c190be134d6eaea6471e8f40d0afbf50140204703cedf2068c38bfc28cc941239af7ef724333dacd475ae7ecbbd4cfbf774d7aa53db06881a55d1b22429a801e47acad04b163734cecadde64df904e60cbb1597faf2c6b416a4ae1420a1891b36a70abe85f3a9b8516bad4970ae3b9a8def5e292b3471c486d021e4dc9dc2084bd5f11fe94bd9b4149d6147bca6f2dc11b5a54315ce476f31a1e88bb6eaa3c5fe4ac8676a29c5705de1a025cfa48470a56191f9ca749b308beb1a9f5e03e0925896b66af7b59b35759d01b6e47c68431dd749d9775a9b313f4f856445de803cfaff7a1e9cb8c378ea270e24a7b98597cd4a4bb308d5ec06e0f8ffe3a892deff394239164a32cc723b7342dbb62edff1464fa936ebe288875e9319553a5fe6e3a8811ddb0a642bbb2f3bf10ca7b7a06a43f9e6c5ef92ea80861a5468bc82cb4aa7e6396a4919877b114695473c004ff8b1cf424cbd6f62f2a1154770a100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001164c33a9fb144423d0d4e610a6f96244979902618cdb6df4a54cde73d6599f56c335c2989e0ace9ff297725cce6a170ab81aa23ee1564bc1bf468457f816c5a6fd405b488a67e23c83e5b852abf27da98828d935663224087bf13163b0c1005a681d46dadb4450a2aa25b070ee36fd73879950bd74cc277d60854675d78aaf84210b90b2b6e1a7fa6eaf1ebc784a61a1556be0cdc9ff3174d9dadd9ca387df23bedb4dc820c5fd4620a0d7805ccee82500d2b10b9fc83964439b61f9d98647a022a96a250ed86ab87be0888056a5cc20818872704f5770da75de8fd0d62ad9dc36e8216fe9e20e95884c15d24559de34a95fe263a631a5eafd928d43ee644415c6f954a91e180d482e048d84ca39a15c172b08fb950571af952605ac18f6a7c86d28b73257f76bacca00556624b61e0566e6fd2a1a0fca5e4c1506409683fa2d0abcb3456d93ee4c98caae7a037b62d1610b2e5b7d3952f6fee02a36d04d55a276aa7037e97883f3a32a5193c89a3ce842eee6e6600c6680ca5b7013a69012cfee70a5f9f7de51a0ea91e541a7f3418c4dbdd2bdffd390a45c3dfc19eb60a927c2f9b970ae7eeb017365fbbc19a16f03935cbd62915e57770779c53cc96aeae000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084198026949d40350ca4cda26872ae044162e9330a82083b159485fcac3db4ac543ff188706868be1f6ae24e06fa8891766e212a5a253fc013162a5f3e7559d9862fbcced93566f2c8bf50fe8e1b40280facce1e5d9989901a5522441f817972f33cd0275c91fac495c51a45c4b1a827ff8124233f720bc9c948e9b313c77d334d66c853295561098a42de8fac2d06c34093d5a237416b79835b71c819676791f5b01c8f32e1cfb438caf5b74154a50bd5b1eab808a14902e22500bbec4c3af936aa33c2ffe73e1da79b04ca4cef4e5e2d77d035a698762c3588132bf3fad6c8ff060911682f99c1a0f8622ffab4e9f5368a6a8152147ca929c12f8af03705f5ac32bb218927350a92320705df337ddfe106abc048a6c3990150b7b764068aad5420e97cf6642c625e93ff34d2041d5a64e8734e6800e6b574f6669b43ee69d75f0b16561f43664f89a45889ae73ce78bcabc9c66151df4cad06639d2b6c2d2373094eaf22026f5d08c1e393269213b226f69ad8f938f194839cdb1db46944c8630425ce85b0dec88de577432779cc572e5e738224220f32485d86d6a95020736b423b6543258ea4c9bf79a0b43ab68d55a20ce9edafd04b12d83487e1b6c9f90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000269a5614cd0c01cadb715f3f82ad7eb3bc3b630a146e5a688b897d7bf4c77d10a9c56f120ef26d49c7e519496e5934f6ace5adaaac3674ec83d565992f97d4c8118b0aa8335c29c01862997b112db3d22ebffe2fd52c144a1768dc83be56dccef32265e259829e5e218c04043b7b270d9bedaf6494d8d0ef455c4707d80b19f20c6c841e0ea06d0b2a7c29a5677491f720368368b56ccfe3ce7d5b477b4685c65b7123ffea3af50bb27ac1654a4a552fcc1168bfdecd7d8fcca1ead31ef734b75ed87b9e2870ad158f39536e0064edf200ca5246d9644301c927bd594632b354b1b2050328c39afaaa8921a077389a2511f79780e49e470e18aa1424c7a9c488c69a80a5002ff1d257ca5d75c3bf75ea28e4071ac109945754322f617fa5b4c4e13dba50f1eadd2805e0588072bc838d6bb8e198c8d2d5474c5dff3f0de799d3ac20e6512f47572afd10e822c7b96dd1ae055ec3ec80f68fec9a902840bad824fa1a3315fbbe42c97165d4491acfdeb4d2730da53030078fb93df5ce5dbdffb1d445d1eb58fccaf3fbcd43c41ca42890a71dc24e6f034cce8d149cc5d5449824dc0287ed04e27422e5387ec7d7f4c306e7e776cb814cbde9effa6a1855d6a7dc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a704e56f2715424212490648b57b6aa0ba6d73b9f05aa180b0feab7b560471ff1d0a6881679b820be2758acd9979bb1baadcec54354e3f8e4cd374daa0cec2b9d30aef127bbed397b8399afe93489a98db1a5c6f3dfec2ed99d504ce15aacfdbd30e74f27d3aea6782b7f5926d8333db26d1bcdbc0f60188430ea9a9a99ad012dd1dcb69010ed243164313dd42f43af78884909da41aca6a143bf5c2814438d580b641d0409e0c1d51981f695e2ad86c887073ac7c89a93d05e5c4e8237bf8b6b7e4e34f8c924d040eccd8da04f8fced03a3073d1381e1ad1c4ff309aca9309cb3d33671b350761962f8e02bbece71c833c8a86baa3789f1419c27be764fb79f4923958302eb644c958fa9cf022f5c3bb56a8bed3277b3fdc2c7a814f6fb5900b659707e321df04294debc046ff53c6634edae9d8a2af0b32d2dd75a85d5d267fb121970409abf97efe7e246f905157348bd772bd84ebdc2d53961117d231928148089e618e3ab0e71af4beb7408434210c5ec5538b42c1b0f029d44fb4d362d503826e53a7290cd294c5285531c01a6c3097460f74626281a247bb377153272766db2077cd61dd8b35b90151e6c5d6ee2a97cc614680bf4da3bbd9b7106c68100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e89037287e6605650d1897cfd2bfdfd994d22bf30edf9f174179e66e74c36304f925e6d7430b58ada77f2079298ebc812a4e7c17bc0419d2b281e954ab138906cd47ac9a47bc31141b3150bb3feb881fd0ef3299f96b16166b2ca69527c979934325cd8a612f85b53f14eb19146ba0be90cab150f53c09302258ba3dd326f82386e8d346716981a591346ece2d077b3c4bb0dc0aa242d78acc9d83313f64390be501e6a6fd892e03779b9c214f16e4c5c1aa0577787dc31a55608406ab235c6d606b8b1787c5a2adf6d196990df958cab354267b45dccc4918f5bbc9f8196c25172394411e6986390e6051139b5e324847fd6fd52c745f5f5ccc638f23e14a02316c6d9b1068519c03f1d2b3fd94019c6d311d81313fe3d4a9fe16c08cbc5de4839be620164f005c850f503822417cd54e7061c968bab0542d78e6cd07487387acd5ba248d66bf5853e42cd5f6b8c154eb3b8b484016c4819d8a4d16ed40cdb8cbfe6d1eeb8051328de13dd5c9d5176ce95e928a106e666840dad74eda17e8c72d18dda0edf2a69ae6341c2ac8d50266d8345d42ab49d5316cbe0d4d63dce22b3f28dafa71596017ced2e8b116411117d519bd2ff082a80661d70dca86775f800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000150d3570917bb97cde9b6ef6a6af782453079df7bf4edf05a250bdcd67c7bb8763f9d751a14b8a15030c26e25909db25652a1b91d657ff5a96221eaa8c4db71efe513838bca7dde08283b47a066cadf8d6003746c092eb442fade51ce6cd744d19937698d2e532a24a391f3ead37deda06ca498cc0fb480903bbbb0e7e8126b5e48dfb267f4e9e3aef59932df117d745bcf15104fa21ebba33981479f7191031f0ffd6f3ae032a5dd643975f92e8f098fe1468ba0c4e037c8a9c70691521e6fce60050ac5a400c6721f50d3e52d0f96429483a6b2a898abe4a98dd647bef3a2626648214ce79657566423fc028764229cdb9a096b3842eb6b3bc2845a3604777f2a27ac8b7d3e8284ae6daf2fe1779886d8af9b3d64abd59fbcd59f8e20d52c99a32b39bc9e2a50299e49552d028cc92cb48c4ac41e4a026f505bc882fdcc8ff6fd9e039313e8c34907b1c693584e1f9ea5bb1388f69f3ace3bdb83139a7a64a61b88ce150cc4e0a95153d6ccf69e68b55ac35e52b67311de586f258131ccb45bdabfb9982e1827c4b20bdd098ab307b8cf1facebeea06702d511b046f1ffe3d6ae128cf6ed9ce8e45795a62e1b0cc5c297f349214528b822461ee922ed99ef00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48402d9bbf4f40f69737d4bb1359dff54fba2a7ec152808dffe9a08482f9a62b104a23d2044e581644f0d0bfa9d6e8a9125ba767b6dc41f1775ad971016ceef0a99b244a63c93ca4248fb5356d5c76d49f2ddaded167ab158a382b18de53f93393120ea66a61f3958ab55608eb8449a7de35b279c8735675f3cf39ec9fc5cb6c3d7b267f26d99750604819a23ec64d8fa66eac92e945d69ae915bbfb2197e4b996e2206600ae98a150e090a542c348068a9429776a4dc786aea2f0c4ee313f21e18030112e3700ed843d13aaa4ce47db95ca03a42ba235469c69e908563562daa72c1cf01aabd1bc49355e62e45818797c7d25af8ada4d4fc6eb268f874ed52c20990077b0a9551356477cabcce43973dcac378b05e2b298dad7a7cb86de14ab52d509e1d75763f313bd6e9979a41bbdba59e483e08c5584440f097cda35055cca4f12e9a61ac6096e0b5b55232b7da45b022519aec0f390c2408c7ced2f7a2a6b892551c09c0b8ff5a14baa46e984771900a9c551008917618e9f8a9eddaac927ae0872ed813e49507c2bbd84fcda6b7300387445750c7582db21ba2e9ee8fc4d04250993a15d1e9210bb9036900ba2bfd085585dec0e6ccd43443fecc87dccf6b5166466551b9e0d26d2aff38035a43e9582e3b23c95783d467aba7066a22eea200d2d8c6ce7265a90538806af7aa0add80067807f41111af564ca240fc278551c1ad5a43dadbc0c6d375fe5af9bf288e1974b7284b6750efa8876a678c65976721ef1248fa98a13de9e3a751e0be286169430f1f0a07ad048796c043ac42711021443313b0642e82da90535f01a50b9be837a16f79e6dd5aa949c19a31da6f22703d35d1177080c4625f7ab0451fb2c057e8dd45bb662b8416d1c17830b42d73a0c8157d2f32205281074426175f58a867f72ebebbbb9f0dc0bcd07af9464b65a041df9aaf3979320f2af63837851cae5a6c706fdbefcc6ace17ca937e886789608118fc06008f2742a0f463b19b22ac1151871a1579466f79daa1022f82fd5a72de576bc142faf6ae211942222248ddb193b2f960c2af8c733ce15b68e2bea6408abfd23dd8da6829421f52fdd4037f40c5db3bf9736840d4d18a68d93c522de0e46b59c2e6b42d850882045162f5d57ed14f62a2cf8272dd09e428252c83796073dfa1184a3bfcaf765b49fbd76f27c5e480556668ddbfabd3fe0e4847358140a5b6e2dd378dcf298d8733318658f0645ee3bcc805a20a08d98b8fec22206f22c773116f4305fd451eb40cdea399be06c43fcbf15b4db359dcc0995217e0c79008d2e5ef81035be2854d1182269f392804b69f4151cba7b692d381466b2b431245f64120b762bc3225ebc7c78414adae3f8ffe7ca167373352e51a1e3086c4e053d10089eca6e9b003ccf592397757e194c427a554e775d5ab195d50be9b499273301579de908553155df3e12237a154104f9440dcc2f585231d88f112f9f912cfeca1987e4abb40d33e7b74103fa8d58dc61fd5ccbf55eeec3ace07d5c9ba801fc8cac2d878fd6f79c8b7b070d3b0190a81c6cbdcfd1a93594396dd2612428279e4a0522abfc8685eb9cd2ec2b2bb1a4accdb4add513382c38d434b06b4cb91592ca0ac6ca6d866bf1e788270124b2899fb02951dcf17c32493c1a71a353862b3a9c7240a71a1bfb486d4d16d13c7be0e40d87d4e2b916725f6da5af2c7e7819a0737b6a754fefb10a60315e6a33422b69b0248ac5454929f03ee54b11f4c106a727bcd945015f962856b404a6f96b8aeca4b5b273b418f68f7c9e7452cadc02295fd1e3f7783882504287e05c4f431ceb70cd3b64c949c8ca5ae572d48d141293aca19d56c024f3fc7d04d5b24cfd89fa51af92b3da38b95be5478cbebcea0080396766a5fb6b7b8c736c5b07809c314d2ba61e9177c767112ac10b13e2b5298b1ea037de3824a6c029b217b5b390c5759ae15b9c16bab2d09d91bbf847c91cdc804aa0c76f15cc5fca819c9da17326a994a10c36bb68880dbd0a10270f75169f279fdcf71c205fd1acabf11531203365abbc2fac4331c2f52fd7cd0880b2168037146fa1185fce4d6667d8436132571773987c2ec8aac04b7c6a3c865ca021179cbcb473b7b4d632fb0bd734ea2301995a0b697acae72926dba0fe2a2afa2161b2fe2256ecdeaa17d00c6c8b1b9cdf3315b47309982891a460050a32311b06e3cec829a1ee8d9688135d47d00b6de116d911cb15aab6bfba196248705ea90530b5518938e9a2de5a1f2091cd07b324f457b6dbf688f9aff8416e49e93f1d11ebde8d4e9f0bbce360d750373476d3eef0d015259f1b643845d3cd363ed12c1956054b5f95f23fe7922076ff75ab13492810030362f6e679b1e87fa1bb23ff2c099169aef06a2d11da650bb2777c7501641297c02b1b79f34cd4f3009e6c421cf26e8bf28e16c643d61214402f926c45abe775cc2f1b9a9346f3b79724f69e099a549c3b029e82a4551b07870a4a592f5e237360dece8d5d13002af2b21c8527cc0f322529fc9187c2734fac89c07b10b8dc7f1913c2c70b3329a8cc0c58ed00c98f0e33030cde3e1c6339f0a0c4ceb37b5bf1e1caf81cca830ed473aea7532cb7f6c91383ca54f9f4ed3ccfcf19f744c031829807399ac72ad9c1b513d52e2c4a3352efc2a9b8bd91a743350bb0a2e074fa1b72fd4fe8e5a0963f198df50411739d249f32bc77412d6212ba59ae332a7cf332a89628d6a522ad7fefb468e51c24fd164eca46b073398c6bd6fdeedfb2cbd504ebd53650051d1adabbaddb1110f32ebb5b6e0a202ada39d2d44debf57f04ee0c405cb20347a6b5b029b39a130876e1694a1e864567e42f3ae7bf11b176b0819be631fcd3837fc0d93cf90283401fe29002b5d8f96a388c9af719fb7f869e3cb886e4274e30382d17481fee45a02fa18e6792fa9cd0f5b83db7a1e61e3b88946dec82c99bf01d6556f286e658a91e26b6a91e9d284f08ce604cc70dc82307bac974d97fc4d88d937eb1368567c30d2b45e2e11070874a1e76b371442bd5e8f1ecc9facbdcd9065ee8cda5d40d6509ccd1aec5d99c7c425babb316f5f352cfba3cc5d2c5884b7ee10ea92b1e3782112d9d8a279c586da6780233ef9e135870a521d1e0653571db8004a19771649a2f3f1c365097937e8a043040c5a3a161e709cf7f44e3798c1f1aa83bfe1477bc14a4375094069e71e4192baf62ff3a1f0cdcacd188367bd1d7b3996117f52ae8249aa62a53ac2a72d292f3df6d05ad4d67c38a2a80204c66637854198060190e18182975c444e00f36c5141fbead1e23a53c6cf551d648ea3ccab12e293a4b3627988530b5f784f2dfe79ab3b1f81dbc889423b886cf08397b808fddcce9d5d0025a29f5c217a0a5537c9a0df1eed2253b01109a913a40c698ad1c67d1b327f4214b4a4afff0847cff866713c8a1f938935ffd337fe8bcae253cd21292a5127730399fd0cd6610afd605183d5f59bb0b3f65eeae15561ca31f7f0c9e067868a124aee007a2e05cc39bc2bee4b6c9d5ef4f2b2905510a040c674f80a0346e686404ed5bb62e184e10854869102d1a9d7a1e5c3378e6bb98bd089099d6605d7ed40fc0e3c7c6f9b07760f8dac511d135bb2ea71b69d9ae9e9a4963d6bafba573ae17d66e7725e28948fe1e465bb01ebc64c063f1033431cb19c74e7c359e4fac580ae71503c20411455b6d1f86618fe261e354cd9bfa30b671954f1d9154dfd8a0062db905d4f3454ff4428cbe471ab4ff43859bb7884212e8738285631cc42e671578d76b6f60e324943eeb80c31340c3a0c3d63c3ee12795df365bd3c2aa187606c99e310ba4be62ac971ef41baf60752067b2d05da4e168b5858f666093d1962c90c15236cacbbc6b3f49d6a260faceb593037578358ece9514307ecc53f604184aa49447d988fc79a9da54a14776fd36c07ca5532611ccc3912caf6f1a963f0d7506b523870ed27ace246379a8c9cb00b60cf30a9ede9f852c479677286ea91162dcfa4fdcaa94b8a5333b46705a39ccc8d057075ccbd309f9ca5f6cc0bf8c09ae44599a043562272e251e8a9020d2341d0d5130029b20b835f13ad36cef22260aced1ce2c7b1da58638fc424bade17a7a2b052726b47bf7d3c2b48762c3ee0678d8649def1a0e3bde700974ebd8b4752627d1afa42a7a1dcedd6ffdd2b8ae07173769caaa7971e2d9c40e299a810ce24cf526b676033e7427605fc591124003d66c89c7d89deac4c3512bfe176ed16e188a8dbcd6e8bb988ffc9d1ce466262d74bdac71f521d2e6c94f2877f3e83cede61622fb84eb8b4f9f15cac35bd2521eac085cedaf33353d286a5f3b1793323f1c907a45ff09b9cfce2a7b0982af341795894dcf360ec4a8c68c0505f01fff4a3fb294538cb000709c1439a07dbd9108a949341ba291a60a4d210278cfccf4a31c3c82ff0ad8ed73bdefc5acc64a40104a86248b4eaecb15fed37dbdab405a94b1563f375fca931190c5c18888b5b3128c29b97017ff0ab104b5df6794a7c0a54d3ae4d9998cc4776f4ad17ac5e12809bf3beeddc3031ae2ac6a3763b6fb43cbfc0effed4ff6973cb17b513f1bff280c3c4210cfd2503d048b5c7734da15cd0f9fac45a8c3df465083cd5d73bc65250da98da98bc72d3de2c107b57340bf48debe0fc6ec35dd1879ba1f9cc016e8a31b868b093397ac178fd1d2ee760fedb37137f533db98564e918b4bffedddb0f72a67e4bf03d312c787d1a5f0b133eb2685902396926e17f8425d7638881ccb572315dd6d21dda0c898fe51fc414496c8477edb6c1bdd4c5730b2fd163a6e53ad2b5067aedaf5f2fb6ecdfc05f36cd8d4547c8141fc3241d7d2652690dc77b0a10fa78e4459febcf73b14abdbca18a35020abcb4afc3991f151d4e7fe44ed4ddb0c1f0acbf297973d03c027839df2bf0e80954040bd41577aa54b6d0c243bc974246eeb0abc344c67189ab6e24bdbaeb140d15c5295bbb9d05197ce979f46d791098c6a3638848e52f507e4934f36eda634d2aada23f2f9f86ce55d542a518b4d016a292db88d06a882ca2fd11f3beb478f73f26b83f44ff1688fa568318cc0791bb29e5eb53a4824283018fa63614c291e33f8b342780e5eb6be9ba52119973c00001ec7ec7c1e06b1739b01ebd9ec0cb9483e23131e946031d03042b2d7acf92783d480a44e13e60aaefd7486fef8d90fcea84734a20374277b9ed666c62760030c9159d44012db4bc27d8d8e1610135ae68985c4863d0c70728542b872c3e827306f07d152be93d29fc019a5b011da7fb9fb698775e8fae36dc0d53a2ed3df04cdbb3ebd70a3ffe7d95ec80fc95ed0a85765817197c83095917c2f5fcb1a42046f457b009af45dff8a709f51f89977ac8e0fc832beeb706565dee50a58dbb830030dbe5da2365c3d0ab3a9ca9f08da9d9ecb234909b874b31c3cc00a2cd9272f5cdc7b996e913815bd088e88ea0a037058c20b46970bf5589289b24032a4b4209e5b8531bf56895d88e2fbf220c8921915def9fac8c0cb51cc81d639e590b121b54392f4db5dba637cdff6fa3cfb0ea1972bff3a11d4a38b1b9e6473d9d69d12a7cacbbd7d7c0a268e748d686ba224bcab1963b7cfd87caaf040195b5cc52c1c4eac065ea59f350a5fe263dc21889b68b8bed2e2e68e57a191f2b29d44e62c25b6cba91f1e0d64eacf3ead37a1646f6588bb0c47495f81b05b95674773027f0f51ceca15343ef9f110a2ef22ba9861373d1a0472b5a6eff59193caa5e9b899003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000022118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000220d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000220a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000220b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000002229a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000022141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000002225e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000002212978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000222daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000022189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000221159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000002205ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000002205c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000002214d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000002203db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000222ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000221213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000221ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000002214fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000222b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000022305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000022280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000022223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000002217a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000002208858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000222618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000220f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000220e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000022172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000220b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000002205bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000022137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000222e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000222297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000222608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000002218373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000220422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000022204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000220afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000221998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000002228d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000221da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000002221d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000220ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000220e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000022107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000222f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000002209726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000002224f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000002203c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000221fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000022205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000002225110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000022283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000002221cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000022094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000220c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000221f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000222421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000221fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000221bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000022304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f01dfb2e929b3363c0d10a072aa21f1cb94bed97b568f030b4e78fe7312b7d0bbda3146f172171b9845420a38a325a8bb1f23e6493a51fc6896c08da106458f658c566969cc1352db44cbf782239c9aac1d63b4ac549b7b1a403233023a957407437c9d2f8450222deeb8965b12aaab2a0f63b8c280f85342084600646432531423bab0c67d8696792caf4550973fbf452c9506efe59a6b8c281173b9d6e2b4d1613d9332c2cb5bbfc88aabec4dccac777c66cc67a3f0797b151178fa95fadbed9a8f2ca75cf95fae3b0bf75085a7bca7e0ccee06acf2c2c9c484333cdc4e83ee123d6833e122ef2f765c70fe38aadf6996fb00b3b3bc646ca0954e5056222f3c2bb057ba6bf753b45813cdc2cbd55518cca31b5c77433630940f952433dc8d081c2555886a7bbbdc60e5cea3b0ef7b033343a4c40a765541a10a01dd9af1686ccecc11ffb35e6287a3f51d9c5cb60a45b303be818c0332468a1e5f565aee32ff7c780fbb8e6b8b7ea4fadc5476e3788bac28044a2afb57cc37f9b6df9bd3b55f59e7bfab0827f2660bfa3abc1ed44956b765bc32699456c8cbed93a2b325897a39e10716649e82ba391bfd58bc166d941d38c4ffd6b955093788cdac4589b5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009741a4294c67c8157966a54f219257b479d0c89d8387e62707922ac5f93bc73a0beaffadcc8ea4e4211d58f5f6df81bfadfab774d107962a2c2f6d5e25ca9066d627f4cd5ef19e19ad3eb467bde330d89ffdc121238207ec61ff6a1e7123a8fab6041f6b83589af1ad7dd9a27ab02673926441f4a66f935456e372e9fac3e012abd5206a59596df7aa2faf2832ece24782960a5e53636f4ddf5258c99d8219a93a8b81047f379468958a697e9b858ce9eb6ce890227e2cbbee6a9af6098d0314ef56070f3054ea47b5a84238b1f989cef552d16ea3e46def109585dca272c578a7105a805290b1c27b60162985a5e6938f6afa2045da3697d912577b2746c9b0fecddcd3e8149ce8e61f2d1c37d88c05c12a29e84033c02397ab3596a7a6e308ce8ee3557a8da2b574cf31e873629dec44dacfd0c5ca05e86d23242aa51d12bd4591ac179105778ffbfee98128c0f67213260ee831c79427faf737ac4d204dec62232ad480a46a6f9b3d933686c44377ff6cea40e24131152d3f4f36d4ff7d5995c9b259503e6879f4950d191e06415ee5c40976b056d3f289078907071b4a4763309087c0eea031320397c64631239e76e160d73f09603592b4626f01e76f40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000926ccd4b3d87a4080b1fd319fd49f310335b4fe22d000d57bef6dbc47ac90209489b915913a3cedc6d7bdad40426e7c3c7f5ccec24bd38a2fb7e521352380f7c416fe0c5e52f65c075e74ad32cbeabb81484a04933f41c649678cc1bbee516e2ce4f0198bee691786f11f0f0de919128d4f9d764208ceec3de336068e84b17cdc45fe9b77d7fc3a98b45c7d0b87c59cd0c38bbacb3e3de97acbe64493ad694e8a702b00b786808cc9b29f6508a86c983efde1b39b3358254ded8f1d6e5bebd66dbed15b780957cdcc4b67ab394b1807a1a70eb9db9165098a911f84cb759b3d3bef92195044bbe85a30ff8c672fc8051e807c75c74eb2f5948ef85ec5b5bc46f8e23a04e2e7baa4c154e89ae739aba8b05d5561ae696911225f4c28209414d2b8ced16afaf87cf337ed451136fdbe67481508c3b9e60139f2a5054f13c2fb016aef3ea2d6046a793a05984b2869f3e2d535c864a97579d1c9b21c41dae00f65bb7dbe529c786299f91258b500ba95ac9459c5fd3a3f2294860dbe3f4be030613c72d578e68a31cf1387d38a0223bad4f9a0c5a1159e3ddaec4932e20cef7cb947388e4d651deef2206e7fb8ba3f2579a96a8092cc32e3369e9ee54548825a61e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083dc05641e1d29ff297498b6afe5f9f12e9d274f2e662f0b347aded8757b0e112771579c567cb3ecc23386cda27ec4a81a0c98b33830836cfee4ac99097dbee3ef392caefb68b4549f122b80f6c82ef6a109c2d34ceb8b5e21fbaafa074daaeedfee5b2d0e36970a4a4aeb85a996ad65547fb969fa38e62fa443d6b3b0aede7b5decc2225e05beb29596c7574af70e5109336060b829ccbe54ec81764d01e720fe6cf84d075861b8fa7979495df58664f68b6b2659ca76491c3a20e12210d639badde28062ff6423219d8a66c0f283380079c2bee29d84f6efd71c011dc44333f71e9461302287c815f83986391f91496f84cf5f5f2f7d313a05795818661f46c611ab2e3c49c8d85b19bf0eef7e01967e0ce818710a74515c84d80ad35cc099ac00ad96840142fcee658d8fa79ee8511d6c75dba94569e0fda65f1670fccfeff67a6d274a7ec9c4d147834822afb98737a1fb7c5d8337478c35abd03165d5bb84ac63402e623c47e6e9b6449144f67e72ff1b33b009a2f157fecd93c35afba40adcc615691e199c0a0b763f973973fcf35691ddd039388c1e1cfc5fea177836eb0bb0bc55aafff6cbfb90020dd6cab4f31dab864f5d58bd65e19f11c7f6501c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e93bd60f0d9d40802f56af4c8b82d99a3bd73667abfcda6822327df026d95d65d2a9c11613cdb9eb9dba8de84e6e3eb502733c2f87a03952bf792aea820f0890ae337ae65f4a088a24f40f67609917d596e98ebe7ac42e828a9c8b1d3692ec70fc23c938840182e64062dba06b39be2061802894e01e6941094da2aee8e5c0cd6a16887b41af5ebf5679ffdc4f260fc4c1da1899c43d9406bf8f9b2323b685978b6e2190442fde2c232f9ede3fc50316a4f6201870276eafc978d4225a9ffc32c75247dca66e95164dcec756a04bba0e186765afe5bb3dc3614324db509500b482d76e0a2b25e38d1ec4ef1b35f6c1d6b412cc6de39b2590017aafa97e6fbc56f2afbf626c5f508acfff032a2038776642dd43666b2024a784702cbd39df74d7e145c41beca353c144f95c16bb28a0cf8494e68a3a7e0de24a540d3ef8cbc9974cbf71ae22b1d2004ec3938e47121c4c61333c652fd6d6ff902d2080c61af0881ca603dc7fee1a503312c06a4fba39282ded3b3949a663787fbbef01061e336900b7f91dbfaafe61e89b3fe3111babaa1b599e369550571d154fb64e846d6810566a76190db598808b3742aa4130120ebb2739560ba34827619004a4c0cebb700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002769c9796b5d2038cfdc8ade3574f502bba0df836c532d23e10c66528ef4c1519dd371878711462a84a89399c9a0d450fc05d8a30c6fe047a9bc90e3e06c7741265574f361cb28d86f23eda73b12e5650dd7a47f54eef7b8a10ed9af0f225b06d806eb9458257829093896091267a8cb170cd63869d2054b012d917f38cb2654019ecb0ad82874f64a817f35ecb7f2c7df3a909415d496130341f90a3a47b85112da9ed7b855045aeab1eff1b5d81226b50db57e5c1c10cb88a3ee97d81ab58f3a9debb14302fa8e91ca8b79917d10e95b037cb2ab8a500bfbebd8979b2f2c12ab63d0b4dbe5245075ccdc1b0d131d3403d5ad951f31d0f2e04ee0cb11a119183035fd9c8ff6abf4d16e9ec593168d1d8b4088c3e5b9fe89a171bb3b5a1f5b5da82d002d5739fb17a0b4fdf3fac32404428d671aa4cbe557e6dd2baa9f3528573d9ea0ead2aaf86f5c60976a33b9e2b89f31c00dac7c353fccf6f1767035dbecab25ac9e00919f52e3c10265e11ba29c6450254c3f6c005c5f3f0b8758155322f95d79ec1e4168ed7442080cff1439caf93a55e91afd255649d9da6305811762564ab521b88bb0559ff1c31ffc04f509361b4a3bd7c091b8bcb12105f458ca9b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9f52b2cf265b2a365689975ee04bd37a5344d83448192b057340a70f2768538610e7a7c33e63d4cf85b61638257d8b348ef83feca3c2f1d6c660d53cc2d5a562c7d6d84d908c87be571754db430a621c57bb7871321155bb30d517af369ae79bebcf1fba504273bf7022e2f7813cc530656e23838f67197ab467f6a025b2e6e6268db01475fbf48db8b64a2179dde4a446574acf84d616e993f1de04647f67f1c978ed57055920cefc645e42d10c9d062cbd4643f2e3efc653a86eaad91e67eea900c62b1d43091a2b79850062970be360512c0413f064ff0edbdd379dd288464481a62d6a04a3d4c2c9d46c3390b5d071db1570c218284e9da7ee04183380feddf57e89d0251d38aed8e098c6ea6a88b46382c25c5a46b5f735f5595ae925befadcffc813b4e546deae737db23c2cd9608e514fac15e7bdb850f7c79732e43f329c608dee4877788768ee1bc4b7f317d8968255e566ad135a9d620ed5ee4b820807918221d4a83b94afc63d518e1d2e8185c9fb2d0db82eb3528c5ac693990f16b644e58369af911f5f155a7a6d182c8727288471cd2777ab82d986d9cdfce0440fbcff71da692deae0f9acd7e63b51053770e705e538e9a75e3f990dbec6a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009fa34df794a1c2c13a4d0410da673ab42a67d074b804a10ee9083a71477a7831f006afcd7f5d4ceac7ba0833cd762f31846edc638233e91b0c0a02fd2b5948bd7800ccb5cea4e2bebd04bdeb0ecb2fe9860c84761bbc2892d9b8cddb8aa20639ece987a9cccbff330450a450a4eed12e9f5d35680fa3cfb81482fdc3a73a8831cd4a757fafa894814cf3662852eeccc02ec88477609ad40287146cbd4ec0afbd68a4757a09f66e15c0a67a5eaeec9d0f3c29d54fcf666b75121bb97047dc07ba13d8d7dfd85e0fef877e4533f63a61978e93326bc281e8915ba573078e07fe334fa828f2810da95a66e68a9ca927fa6b7ff03d16dfdc24b2f127d11b4635bbf891465c3df45c658e5ba15922362c42df5c99afe7cd23e80d4d9f4fc2b917e17565280c4dc778bd93ea2c1fcfb9057d04b4db5e67d07dd1995098655ae963bf3cfc1e3c122ddc28e49ee8317b827041ad47b428fa99c2e82135dda35e5ea338d65790f429bcc691065cb6d1e5270c01405b6c1158001dcde9dc69e9af225973159c2e4be42e902f764c721d3b1d1e6a079ba6b739f444e9be72f1a3c4de12818610c242b4ae73e304bd47ac6ee52ff240ce3dbdee3475a339ae3427b0d3125cbb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001559d0b39edfb974f4ddcd7563a5454b499d8177e261286de38a24a830d4b5251361694340f5f32802c25bba28fd1123c272696439151fc8b1226956ab9be8c37ee46be6c765dc58eee56881fa76e252e5afbd0414ec393696e2b32ca79914e9a6764103d979c9ed71a9d6f0fa0959c7fc8cb53f567cf51a5f4bc99753f53b840594811498d5885419c4af0bb0b4581a12566215374ab817f3b081b8e3ea6df8087f12923faafce60324dab5c31bef71fa28602aa33c4d4553db892d27ccfeaa7c4ee2faea266458b451dede8d63be9ed8b08f84dd219e0534ee465b6062aa2b5949ae3a5512c01abb66b551735dd610f85aab9d7a6ea1259fe00984d727f830b4fa08c1e31c7e0d770ac045ec5f20f69e992a3443742b2128f3e4878dc5349d5d8499e30055da1e1c982b49140fe4fdbaadde9888988c7ebef73383252f5c3a3ecad14b8cef295c712504f138968b08b6bf5c1be74ffb6c847dc4f1259b65d4ceeb902a9b2b05492f4d2a23c7fb460e6a389389392854ee9669ecfb6ab15b35b73ef02b4a47101042e002128e17c7b257d9121d6e6d48eb2536c725a25e3191f0aa706de203867e7d67f168e0156152380f6f64fa2780c8ccb6f07c42919b780000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000077ecbefc1e883b4712b37e3f8cbd16918806d34e35c96892be3bf0650d89bcc1f52780f022737e751b9c0493bfe0025c551bc1baa0634d8830787012f0332ba1dea5cf1e1c4dd1abe62dede22c3abfa81edad5513800a54f0967162770e33a75437579bc13bc86379804253f82f07eaff203fa6566de106ce7231929285dad9648ccc72ccf12d28c3511abdb1a95eee4427ff641e6cf34adfc1e40fab73cdfbaa8254620be0a8d554a18fde563a94a9e438ac9acd18e1c7352a5859f5ee7bda001439372d010db715c286646988865e5f6f1abf299da262f3797e6c029cbdac529e81adfbe852bcb299b432159403198ea6a0299d23bf13b7ff6bd60459a69a937538721ef37ca241282dc6574a5bef2f376fb273a6a98f77ea88409e04996628735af4521744522c70e68763596fe7da84b590b9f747121b7a2a97c97dd49130e0d8597739c76fa87b4163921f9e1ace64deb34f8aa24d8823e1770f2856b308e002c67c1cf97b1ef6c008ec10e6cadab8a1a950f31e4aec1af5e8816a68c0f9b030563afc0a67a64f1209d2bef50620ca3c92ab1fc4f17e9f04aad36813e271fde7bcae252d3202e43c0a5ebab46ead7d4b942a78878bb1693f89705a2bc700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200267254733bef71ad65512a8582eb081923af22c057be573c167644a0e762dedf93caff7b26d0aba86edc8e8b4df823e1eeedae81dc7374fb14aee60c816e0c2b81e2165a5e519d6ebe640771a7c65aab1d9a9369010a466ed3924a46748275d63658ad82e05eeec53c0a100a558f06b62721a47a28e4cb68a717b8ecd814be1e19072a8b5bb6fe8b1ca90d8cd31dac4b289313cde44e14acfaee73fc8d12438f34afcd64cbee998f63f65a7a6fa683b69dfb9dd170a73ee88c549f3af63dcf242a8db3565a701964d7d551d166248d2d1499681d323351e99809f1463e8879fb9ae542f9b1d0459d16bf052df17ee6097170a7fb73bf7848333b5e598ad18a5d6598c09e3cc7ff633fee1490dc6da732db7781282eb003a383050a6decba623df682201f7a14e2a954cefe14fe806addbc036ed39f2e2d4cc0783aba40396a15549d817e0bf1fbddc1d72fa3c263bfeb1773b7319062d1c18938d658c1ea9030f8f2af1e670d8d62be9e2e7a41129a5ffee1ee60f50c37f2f63ef593c8c47ba3be4e3198e669376f373420a23a049ba99870458c40dfbbe2a074385711682a0fbaf1fa2bdcf7bc427f8990975541cc10244a617a7681301771579c543cc5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017859091db6bca82788741c8176ad0434a9f68be98a386ac435ba73338346485b79e9bc77b123f8baf4140872a96fda50a7f5daa30895573892c90e95e43d758389f2fcbdccf484439bf7a6a35a37ba03c4c24b49aba4c207a51cdda22ac427c05a33769f93275419a97ba91310363b115325eb37bd2794289c7c11cbaf015ac33a9bedd439d32cb8347724838adc5f302cc5c9eed4e8e26d6072891dc0cf3da15c036a8016654e772dbdde84611b0266fb4383bfec1518c11117ac32a7480c8360086768721729909aab83be1e37bf2496a8e551835e3944e108f49a350312330c27ea3c5e5c3b062053571c212c4e831dbb11d1c7502fdb5f093928b236df6bf7dcd3964251a87c3d28535431d8d153ec5c7148c7e526aa225b888dea4946bc019db5908993fc1c8394ba89f4071ab48eb9fd8d900ce5e542fa60b042d301d731083dd32e965d19e34ba35c8804425b8e6a7fef97d55e7179ca312d593226bdc44954e41383d7de0ffb044387f089c47bd6169a0bbfd72932de528ed6dab1af907090accf906eb55763309d6be98eae2df8b324d50c2b6adf679baaa067bd118f026ddab8bbb76d6f5bb04bbcb83ec87bcc902faa0a756ff91fbd17a2756a300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b5385468b44ab87c922ef1a71032a217c4864c2540e256d8f1745134ebcac2e230daa0f05ad80562b8bac4a682b705d00309cddeb17fb93cdefd917d38b343a5239ebd466472267809f30a7df43a47e8a2b9e88afb5c97f9079d5069dc43dc74d6b57168a501296dab1f4bb1d060ff3245078086f8935cc1bb305be53ae48578acd7e0002bc9b9c1241c0a831c1c37ae017479825945488b3728de709adc6dfc7d470b991ce672b0acbbe9db6b6766ceb98287b264d9178bcc18520f4cfa625cb7c6c583b1c7fe543f7d3a75aed6cb9751028cd55bf37d89924334a0ca865f7a51ca37a9260d2853883a933405f73930669d305aea339e6ece36a3e36f94b53ec7b9c9415ad757f412a6f29b94400fbdeb2d264f5ba9a620435d6a00d5b87121c256ee6cf6ea6da79aafb3d717b1ab7c7250bb41753fb6a300d0c9826dad0da128737efe010442e909d7197817cd1c8fc5ef29668aab8464e4a33f6138fa43624a890b40c3e6c01a6141d2adecb08b2d7503599d424b2554c7e47934ac3f655a1ce5328a76617a80c4ec92afa51c117152fd5a8c9ce89ce93b7da5a0921eb43f83b4556bce0c987180fdd15957a75c5cc0b3b4d400485c3beb14e467993d45900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d52accc007b9100578e2301422d2096e4c6c6eeb6531a75b6294949ea9774a621cbd9dcd834b520af51f68f145f85692e1be948beddeece5753ee492df4af3bf5f4baeac70588e2a0b07f1c2b824f60aa80e6f4938b1c97b19cf40dd1417abc234b67a032ad2dd90dbc134c76f996bda94475167d7e9610aeb2592530b8490e2167ab38f310beaca0fd1e02df230231fde3d7aba51b51a4f0c60b460ff48bb05ae514783198fbf7332d06a53a74fc9fa6cd0b7b23ba0ac0ef7ebdd2d9d4cc0ddbb2723ca6055849f1b286ed0c8bc2b3b725b519a55d7e2d756a8dabacd79aff59761ea487915f338e06b0f2ebd00c826b51cef88c30ee1a307bcf8af53a987e6f38b25a94b0c219b03b37487684bc9c6d9804c0a542fbf6df3f41e0ea7007f8965016d81068d4eb46be67854ab7c99ec5a3bdd833cf6c6e0301c2a1d648611c941e4a1253a50b6472fbfa130f7db788b825f95ae7c46067b1ffc151525ba15a5ac856133224d34b13acb4e35e81ec700932cafc26f15e19b9bbd3e93c5c1a6b7b9a60c90f0cd81b8f7b6fe2d42939b9095e2ba5ddbe7510ad7c0f042555c2bde08d64c708ddb851dceddcec17bbc756e37032cdd18300d08fee5de511ab7f2200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dac2172985ce7a5b637e05bfb419b79624593dfffec2d5792a5b808cafe5177995e95fc34706fded0ac64aa1eb139731294cd5e846c0e83fa9a595221568e6ebde405e4a0d30d5e91877ac07b26e1c44e2737e5234c997426aecbcb108d7d70785fb7a753460de6dc08adaadb5645fd1aa6336d767757615f3c2386ed1eba91146f0b548094bb981cb0642e71e3c1a99277159d7fc68194aa7b0a55dd7fa59e3255451a98be9ae75ec76cbc891d2d81e5ec9f4e94014c422e26cb5a15cd89757460a98a2bb33b9e7a0a38c4514f62831c420f7e2bd2be63a7ee2f64e0558f74ca3b2b87acbde550f4d5138549cd94c8c454d4cf8c11f3be1790d3ad5c9977da17431f772bdd8040c49efa2ef82f7a163ea0ff408fc7ea21f2a9ab1d0beb87047f6ead42d4a2793860b31d976e2c047cd7dde9e95cdbc5606b1ab567122f149194f54a5200575659aa6b5c89353b7119b5d67426c835f606d840313d4e8364ee4f1c2ce00f327cac7dda18f9c2d4e9e41e156ab57e7c2d6329d9b01a1a20240b61d791b8f19bda8594a0b1bc2bb23ccb733fcd7d12cbb88d3b080cf9ba1434f173bd9b9ec073710c65b5557b44a8639019fb808830beab81e9d794275c7ee00b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018795fca365546e20708ef8d6397fd9a1aa862c6dfc0ebfa506834e052bc34860cf0abbbd22dfa9e8a852608836ce09ef8d05273a2cf61ddd8b206dfaeedeb4c9b3d0ac8b9870bc3611506923403bfda8f1320073f0cb949877d7e2418f0629350abc1476e8d3d2105650cf22be5242a77203cfdf84d2b8c575dd4ee8291946296a247573deca8561c2cc369f46fa679d690b4a27b2cb6db2e2ad4396a481d4a15379880e5eb972f6f29cf120e23fcf5b9295cf6ba8a491303ade483299571cb28756b120ddaa03d87132d4ff3f59337b1d2efd426aaf02dfb9d0015500f8d7fdb57b3f4803dbff16ea55a6ec121657e3d6f035bc41a2939c8f7355b698db0d210b633fa93a8b5ec55a0089616a10b8a64e3ce47d1ab910e653b4f3658980d6d1e25407d3878b7d1c8a191d4c922ec7a897d59cd5f749a881edbdd07f9eea85c4b10af1bee7f3094a92928b4e82999f81f5a3e29f6356d45fac0276ad44d28920ef5e7eb986de07ba8d098e6b673f458aba42d48ea44ad88555accd1c8f22a2bd901477284d2b3c9fd3c9f5fe303e5bfa636fffcf3ded702887d4c75a6a7e3dfe02370bb93eacb907e51bfc93c2c5150bd655a4bce5f975e15c1434b623ba3d500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c66305a64e624cc2c8090125a52f7337de2d8558ef314a4685c208908982228118ea6fc8626d3dce9cfae8df6f142d9d8bcab4192727a245ea8be172f84233288735c41688d48044428e2af7e1ba32bf9607cd69508fda9f6d0aa579b6b064f4e0db7a347ebb3abddc439e67985bd2ca25a9e3c32b9197338158e56e21b0274c27a6359246db2cdc1121e92245e61c94e9caf2502a57c14f4f850d72947373183d66de624744d50e83f9094ed7354e2f217bf45abc7e4e56746699d6bc6beb6f15e133563c50ace3ac83dbe22882f6f6577b26e16dd05c72d5237bb35953dcd87c0292e29e2ea2d171d2f10b3f95cae266cffd33b620086c90947aa2a3fcf9c61ab264aaedf777d337bb7604a477fa774b9ac9f6b936d2ff5a2994769fe3e28bb81e9e773d148b0bc1654cad6fdf36ff63f32549cfd74d2005cccb8c675d40c5be8b3213356d9f904c0d36802fee5ec2dbc5262f359db9b056519ed61f1396dadcd80d884570724cab6f6f457a97189648addf3e8c164bc2b41ee08b15e5a5e31e817c3b82ecb51b1c47b8c7b70672875b478f596883d4fb32521a6a993afc535f2b3c6b7b9f7696e9c9b2a41a07b8e76f655c5ca102f624716d9beb6639ec400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ec2a60ed74c50c7b229250bddb486dc78a790e0d034d95d9a38b7541b84d96d1c5ce1eb4973ab4dc9ede5c9d70d8cf0d744ddaf055fbd13b1126a7cc94f75844d57878d618e237504ec62165ee300cb10d5f5718f667cb1186ee99ab96b4098e7ec259b397710ebd2b0f1a5d1a468e95f74b560308c2af9ba8799891b9af51719c490c8af0e3f4694a02fd9a4e9c70b80c316ce3eebcddc80c75bd3fdf980b0c0815ab2cef180ef88c94aa7f77288f5724163029d88549a5a47c353e1fc161723a1baabcc9e2a5cc5538c2d7200c36d8852def8959f4deb4e819e3265bf3354fdebe7da38dbce5e4ca67f4852f294426a080f31a1b8c476445173a3772201a6cdc089c6096f02852886c1635773402c58427ba0500b0babb108bdea68da43c343e64e26c54dc44446794f577dce6d1c86b1a55d7e404ccaf7940842e5d17cf04af136073c6b52f30d119ecbb5a39aa5cfb9783e9e9d588cdcbc1d2d5dab653f9267343e2ed41fe02ea5ebbb3486bb614262912626e2a25dcb89e759c791cc2c1000b65ee1e6d5f7df323b9f27eb4b3d2df26eb52974623924dd10361a4e1b71010af4c00e62372048ffbe9f40b9a65d65d725919cfe0956696d676e170b87580000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a372b20d9c97979293c7908191508345f121d808760e45f8cd6fedfdbc8ff1adf8a0e8016f0b49725400c4350596751d703c6f5cc5a52b8a4c558750e653d6aa2c75605f4208b5d4c190fb00d70eac4062282d23fe7a4cf3bf717bc9d860727ddf0068583b9b32d16775b60c5ceebc3442c08e998324a92ffaa2066f1d394814ecd81e2bb7077de118e47836976c352a31c3363b545886d0377630642507482d375d45511320cd939c765797e932c83a2f1314aed4564b07861af2fd414e64aedf64d080c98582df967d626f0b76cbbeb99dff54efe10c6d41b4bc45b6824a4edbf2312e68c0e764e8fd4199f351b081fc39845ac133bd6cadf9ae25944e207a8e01b64bc1ac4ac451bc41b7520d2d77e066493cd1cbdea7dec16d417bd17a6a79653963ad9452d34fd0279812a4727f17d32fed9b701e7e864891fc480481f0090fbb14aa5d0b1147ab17282d2c22a03655bf9d93d95502ba64687bbdfb5e6431be591f304d4451e2ba98d5495c835afe978ab370df002d5d6df198892144d7bc104dde259634feae4d66f4741f5c86457f973059babc0516088fc8c822a9e73243f0a6634016db50697a1ef019fb329cb7ec6db9ee89dcf3c6b28b8be291c700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e0b08bbe2dbf6c36cd11be0db541d81fe43f6274d6319a7440906f99cf9d9e9dd05b091ce0ef47464ccd46dae3bdbc8344f8cb1dbecfed39b8f9d23c2d91d8bb8302737d54ad9921189afb17104d04b0b50dff2edf7e382bb7e281a1ec1334e5333f34e0f1dad3c76c2ebd7ef210c02b60c48144db540420953d16f96ae20466ff9fb7a6bb641a2c264060e80d134e37a1edffc523a36083fdd38fdba5e120890f5a74cf3bfc33672acb814295fa763a53d5dd8f45c7c000ac56f347580e7d3ea78b50feef02de03b8304f1c61c7d3f9815e59a3de1306b04e1d43ece9a18c7e056ee938cdb50d61ceb2c788da440c90f5395a09fa9d34c9240bbc24033d46adc881e06f7e10c4adb2808ae5ff3c46b8836dd10b16a59f49778a466ef81934df3a4c1b395aa66f1df02d46263d991d350edc6f9866b21c237365fc97d78b34b19c6ad0618c34820177c96ad4e5257b2803c91ef7df098b60bf4b1809c1e1a0197233fb5706517990442e89a52a6c07c4ed5d83833a45f442a49ef384a67194cfe91985ed388960d800ff31d9758d90d45169e4de42d741af5f6b4e77ad6e0471ccb08cb19b480dc3ef0d172fab23eda9751992b6950126f2b42b5cb2ea2b4c000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002992d77091c98c6e67327e9707ed249804148363c1eeb80d5d285f3befa21638b4f973d7ed0ab4f8ff4f7c1d2fedfeb0693941294cafd4cd30dff62b0cf5551a27b642e89a52e43e441201eff13bf33875e6fc6db9399344c2f90e8052acb21a84f813c9bd5876c3b45eba73edcea6bb96826fac9284a53b2daab55bd4232181bd1ae9e279d14613b5d52c836ee5cf048d1e69d187688658618ac16129b13f19577ededc5aec74fdfeb8fe0601be643cac89c7f41fb155f03574dbc34629965d77c44c19b5e4819f84d72b231a3624474e34484124caed58706e1d7cae3a33e7f89bf232c67ab6bc120e55e458cc989a97119c827c033952cc15c4548eb0d6a5745ce9321961cc27d734c0eea266dbc54a2011b042196872e6af48c1d7fe979f260714cf1c2dd5f3966c6466e01b0d5e2fc3abdadd17816ae1e65108d1c921d6e774602136aaaf2804a35973f56645caeb12e98a154c38f2dfcac3d3b546d85641a01b39952e67b28b5e2cb74e0515baa3860bdf1a7ab95f0b8c86bdd2c910c0b04de82546b1cd33da51ca550250cbe6c2882933ca8666806b72324fa2f0ed1a18503f245d3e0592f0f22f79ce91354617271ffb927b90829b9e5b7766ccd70a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac8287f874b84320b38b8ee2e181bb1bdb79b3f8689ea92ab8bb4728b4299ae7f37f804098f6c33dd0c2b3ce64df1ed8e245e0d44922161199f54635c71d087409a5045338c249e26976a217f17796c0108512078f85792d34872642dcfcc009e08c1e0ba9d04b97c217c088d9ca583273e366d627fb893ea276a837e29466506491fbb6f290f641f21c15233f90d22684b4c5deecf07646c412cb53ee26cc5a7cf5e49f18b7a3f5a92890632f283afd5f17bea575f84bd82ba546d9e2e7a443b62102848bead044148ff1c9eafdd59d6c58876cf99fddee18de4e398bdfa87b6dd812e4e18a9c4dbd0c39d194cdce6b65bcf5fd47f048820f1395b2010fd4444cab57280ff8dbfb29c5342a3dbe27d3817cb05c80f493a8ec9c9ad21644a41471d2393a8abfbd88ad3cccac4cf78015e131e1d98a8596cb73f35f34e3df48d0acbffa6dd7ed63346df5a20b63ad60e7a74fe989ae5d839a4cde09c91edb5192b284788c2dee24ce0e2cf427c1ccb823f504c89fbcb922b1e57ae0badfd34e31ffdc4d2b78dd0991b82d53a067dc8232db1f6efbde6a0e3470bb2826ba092069c68e19366b56e0a05b23b24f2843ac4947f5a9c6767e6b191fd2b00db160235a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fef81e4d6783b428750c32d69be33de12d20939992bc387f95d2a6a572ae87dd7e08d561c6300288614125d6e20304a83ceb55e50698bf53c47d858a4e6e0fd74e5fbd42456fe66e59914e918129741541c19e80491a8d4714a961cb43aeb65feb14379f368d0289ce766c99bafab7df564fafdca745663de7ad460626a0053ee90615c09883f6596d479c2742cb029af3371f22bb50c068716e3e1c72d83a669d6cfe7db13fb0d7ed615bf75b2031bd98b762678040449bc1b33e7529ecbfa166af30ed9da3b08eb968a824d072c8973af475a9ec7ca35ecd5cdac9b13e752dee1bf239400dfb0515aaddb2314a4f1ea1e295da5fc11ee484869cf9922596b249c9b63746b1f4676056ea57589d4969d1d7e1c995291a216ad3bd101b3dd3c15c3c92ad5366a95e72a1b747183424f54ccf622d8f87bd57092101a0470afbe73d8e37fb1c8f0b8156122b924c5b77ec33d423ade7f5704b48394c00189d78cca960a93688c7f95cf4a0a12c5560674d668f02ddf757f149419e2bc551e4308a05ff016265458238475f942a5c9a506a6f09c16f3da5ccc273fa15eb70f30312f048e5b26f1cb69e52989e0174143dc4cffc7c70f53b09990e91ae6a6cc3a8500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b3759f7c4a6fdb2affe5d35d7ab99ce2ca37cd42c14c020135f3ea399757071463924379b1d364790ffdcd9e3c03c7a0b7e6ecb6e62f260e2759df48414557ba0dfdbe117cb13b2c9b255520a8b58008edfce9d542198148b36ccb41abb4174d6631497ae8b725a16429c62fee918af93540a1dd072183a09eaaae7f70b0d23937162e37109480eac23bf9d00100d03669c86fbf1a274535ddb9a8a15ab54b9b66094d8e1d409facf7c7d6a05550c6fa01a2a39bca3e73a2720df1584292ba26bc646b02234f717491cd7d67ef1edb903119bd01468d31e7e83d481553a7c43510a03bc1cdc3861a217c17bf83d7164eafa70316d866302f6ed1d026c97616b4ee78b1eb87e017827f887f996acc7e7db8f2cba3e22f7f491747a1bee252819b6f3a80eb32f8a3bc4f930d7b73e1a3185c9781f1bec6e8d27814b023ea6bddbf115cbd6a36334896a6ddde202a556094b01dc6edfe5307bf8e5632118fad9dfc5c3d10c72a9feb842173e4251382b5a8f45f21bceb020e2c6542cc82320464b6a9b2dc8c86942729da742a831e7657b43a1bed057acc535b472dac0475c670b81772c6dd32fea5b5655dc77443a707088e6c4353bc5974668d6e983e8cc74ce0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000811d4758a190f83a95c713d27a036ae3f846fce2b500cf3f040fbed5eccd0e3496c79fa8ff3f7a58cc9b32eb109d414b52c612c7a467320f81cc48c5cff740395542457aca120c2aa505d764c24521890162b3783123eef79fb40f3cacd9ce24e3441e9e3e4f4a630d359e6f398284af0ecc7815b21891e0a0ba1db751ca17eaa236a99ac1327a28659784046e237fee3ad574a23ff741eab80a03c6b11b4319266b7e4241cda814c58ec991e2ff220343c381c84d6042d2fd5afc9d37984f5819a7fda63356113a67de0d770e68c45d2b7cfbdcf5f89b6b420bf08aefed67eca254546a0409a93da1b25e8d8210e706362d7033d5495953aecc944b22e838b3a65b7f9d758e9b83d6b1a6315842422a381dcbcb96ccac4b232856ff09ede9c1a87b8c859ccc8514732cca91ec9fc7dc240ce059432dbb12a4c00352daae79efd9c60ea155d7fc6dff43bce21c8f492799f57102c486ed62c76b2198136f0b2dd3b1f969f56234dcaf98ed3bb94ce965bc31ea1c569fc3384d3409ca7527f6c77e8c3ad5de36df35452a6ad0fa5980547c39bd62d66d466eeade15ba1b313d7e73edf7293c8a7f2e91265034b60d576c922215988cc6e5971c7e78ca7b2040460000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205f4e2d084848be98a1225425f2cc72f5e527b83e290dbdd89e23d0926d4a738debc65774b01dda7ff37ceedead093cac575c4c135c017d4dc5c864b421b7ac18c4d7da79d156e919f266541ca6a05f01160f7dbf9144a30c53fe5fb25389ebe373b1b88e768863d69a444e08b572242a8b356c9340e85bc85db754ec2dcbbe88684cbf997f9feb61facfffac662c81b49fa3bba319e813586754f362cbea0a67246ac09ae4df718980885d26336883c7108d1b300efa042782e8e5782ea4927863d28f9a1e3110de5d53e90edc88528e0537fecb8e73bbde1ce20c96e11f5eecf77058be74e10776e3bd6a884fa8246491ffa84caa550dcaeecf146c90f826b6124766f2e63439026a5cb4b5a2f808cd176ce26ef55e65366ddd2acd617baca2ffd04c3dea3a345f635394ba84cd83c7be4ed8365d6e6d10bdc43f9db64e9c3962bb83aa6f767f50d16693d7b4158f7b5ce8a977508cc93cc1f06647607f0040ef4d2b6e4c8ef1cc9de56c841bca8534635f2521645702a8682716d5de80087475b529ee1c20efe501edcc3cf7a99433ded93b2b5f8de35dfd565dcca3f4c0962dd5619692f1eae4e135efc8c43dea9b8b4ae77647c5625a084b5e75109b1a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c72e4636966726700c9d9b3a16bfec54f7441acb480ec933d212b7c7942c59a930e881b4655be5372c3f21c9a3b6753a8efb568064838075e926529f7ab57dea5f38f99f630ac0bd8036f0b304e7c3b228e37bd13f2dd648df9d05559d3cbfc83f7087bf3bc92c516de9a5eb075d7b14bd020c77d6199b066189dad5acaddbe877802f42ac3478835092ef3185486510bbb9f48fd4271ada71c999176147f38f4ff78eab3d6f1ca252b3326dc27555e92a3e736ed7dd9ce76998540cee00df7a731ee435ce1aa5dd834e852e61bbf4a8e9d91018d0a7fdd60c4c59bf63aa83a1106db51546b755609ac78cf448cc02027d921ba513c67fc5e30dac40ca30c49cefdeba76b369e901a356f962f3324008d302b3d8b3c4768f8bb9ef7da8e7418c8837cb81169fff113e1c3cbc9e1cd00edf6bb554bbe8b5bff88362ecab5b6d19d0679ad0a8f8a9a75ccf4fcb156b25fa0364ce5556be34d4c727e191fed65bea7243a9a0f7e3e938adfd9e0f258120c3be5153c94bec5027345a3641a648f8a6ade42738064a74d9d9a7972269adf59edcba9b293659476634909a1a3fc5ad103a5a9ee9a96cc0b7952aef02387338e6a1506b5f7872a87aa528fd0e31c77340000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac59772ed39c5d6ced4da6dfa5958510fc56020fd312d9f16cabaeb496f27b0b6c93800c105dacf7bd3f51d048b064dcad53c8c05b6b1e075e71dbbb99e142c782bfb14c3b6d4608feb1a743469f09249ca294831a64dbb76b2283f0745fc210a9efde7d4946b96f286f5db8c83c1a6a193fa0d68b5ba4ed40545484d62f03238f296aaa09e77b099b4046be3096cf78439a051ede6d81f8bbf5fb6775fb0b969aae1b62c7bca56daac1771b31ae967628395cf9e598847524ac489a5e3016022ed70a5340ddbd0396a8f90374480b9adff839b6d150b4f04393fb62375551f61f3319b0bf9b8e85c7c926bae9f5440c578b44b4225d2cdaf8d9174d96359e06e583e1558e6399c1633ae9f7a721f7119f65a60ad96ff7d43d8571f1247fd4c64162e1457126cfe9e702b77a29729a5d8a36848d3e46843b565913aeb21bd9acf0f45821e6a447399fb2175da625cdb84c4b8dea15c93574d7af41c567d265e73ff4eb03f6bf96b4caa947d2705a9157e62d8e1621a9d7f9b8cabab275030382ffd8b31d1af4de96e014de1f2dff9cb3a52b0c2c198e58804ff82e0e6d0cb6ad728887d9398a881f06079fe88a17b8b9b3bb6b300bc6393b82b35fedf73dc79f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008086e2fa393ee09ec787c6bf5bc47290a16849e9b42b6cf21ab5f36fad5cae2242d973a08eb6486e790240ac5717da04a5d5a36950900826910d34723fd9a6cf25f6d461080a4c6033a7b9b144bab79cdc8bb51ff18fd135076a437d5df0c23b39d3f0ed9fe26e60249e3a8d2ef90fa7e5cea3d7e7776bfcdc381e95321d7bb920dd00ef61c6fadb1b6f6df1cfcae53b77f0cddbe28a12ee8f38ae5d62b6a157e8429b6b83fadd3c4911c1c628e00f30f78c9fc76597597e84e6350515a21d47d1a468d19ff16c56e84768491fb919f23a54297eb10aa774241c4934135494d6770c6fe59c4183b0f46a61245947818e9db5e5b52dc5f507d2d9d4ccc03a2eaf54fa4b536f43a19ecfbcc803f583a65f6ed29f3be284a00fe73d2d45b50a5bc59b050e47ed0e27e6419b989bf427b0c180b3052e99cbaaeb6a2a0388ecc6d7d29653b84f77a0cc25d19c82e12aa19d0f1b084511d27006610fd39d6e0a67f783e5625b277fa52df3827d41db6ebfc6cdef12c3ca0c29c1d2c9510c49b198cb4b0845fc4f48ce7d0c647b4c21f5264f0aa396662229b3466b3bcc274829685c67b3f7f43e49deb52eb627ecdc79298036f09f141723ff87ee79f389baa56595b6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084dca0777bb5a80feac0360d08ab2804ca7416f698f55221d01caf152aa4fa5ea539daf4a17add526924dbffbadcbc3d7d5b4a6017734ea6e9255d668089387b458b2edb8bc2d880acc4793814f7c8cb00682fea1793ff70c0bdfd31849768ffea9d5dca28f53a91b7d4fd3ab25c8dd332e7f4b2025942f2e1ec3f2113b389f7c30cbf95c908a55227e60cfad62c87580e9f07c3a09af3ea9086630c2a8400ece70de6434f68c437e162ff96381154bc263bd3c305e2f990a171de09f696d78469cb51817e2523b874de13c797de7f590037e3391bac4d97369183461108bca2ed6f851a6fa08e74542f9ff8cfd2595cff088d64f251c9e8939cbac861c19cc01ae1defb01296593ee26e68fdc7a547afc9ae0f4d6ac228cafd305d099b93d14aba0ca5e82060d2768ed15724cf4e90536abf13c3e37ce2036917afe29cfab1561a00f8c6aa6f19266dceb95e7f4822c02c63b7afe28368dace147e521551819eacd82cd3e9942d2c812c9b3a9c2facc0cf24375d2b243edf2e28d427f0a60f36aebc926fe48f69e2a354f4fcce1651b579b18ea2ce693c628553a3a69293a4262e2740403106f8b284f736aed04ef3b4dd6db0b6f2592e9aa10726b50d8b91900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c2e719c79c86013aded13ee783de1da1bc4587f1a7502dd2274375e121a3e38c8697f7a693ec3a42084ae8a3261ebf0ab97aba1a7558c9c3b239e63cb53e03a9a6ea247546b9e8fe342c4685edfd9513fd5ae9aab67eaf52a5634441bfa043419ec5b86b7d29556c9a943f23f6fd5c44a9e55be96a4e3df6d85f63280f8de497cbf87d7a4ec64724e7ddb79ab04701bc9b71c4ac3568df61c8ed070f1d1a89e15d9a733a217002bb2a8a123d24bd7ad8a55243a56e8a298cfb0d5395fe8358206bbc07720029f4d98e8cbc0ef89147621c3d65418fb24406737628eee40102efb1c0efc81a936c00fcdc19484dd23081dd9d1328b61aa5d9704bb345da02514309a35231fbb1d79b17cabd82d528fd209a5ec8ad1fef0e31a88393ddf06565b5092fbd92c623d9cffdecc96df45767d7076ba9aaf21f975cb2dc02f6b8883c385585e1d4ad5285942997676c03d71d131565a8411b52331221b2477bed9091ad7aa447e6e52c432b55e2e6f3717d92b20e61e1d8876c84feeba7a43b2fad8bdf860a15768b4f51cc76a09093bd0a5ee0f7b706c1348269846f85e8c22dfd257033d461640d4459e2ba13ce30e6dca968564661ee5189584b3d9405239bec1ce00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b0baf873f5fc21be876437d764db9617cd5d0625a9a573949adb9423997e989559468bee724c1c8b1e678496fe11f0c4c7b8e66d5e91f6e446800988df0efe4de50662e32862b3e8f18583648bd76ee330bd61fd196a284cce04a372588b4e463cc0406130940ec07ed28b653f766bb046034fecf0a3d6473196c7fb83204bbbc186b8ade0112eefe6df83689e403913b6e09eb5771cdec1769820bbf98f8b8e0e6b1ce20fa6251463e26a9e0a84ec0c8c67a215e0fff77d3509c6e8f37ed40569ffec246a1094642763083feed59d60cbc6cae06b5889cacaf40292f5c06bca573761287a30ab8a885e8725e62906f3c1e63c8795714a002dec583f5538586f482865eba991ea666d6158192d3c2e9c9164015fa241c37202f3bb2f9166177f0425e2d52777e2f5a0502cb6c2afe98ddc9895fc62f5147d6d68745610c85c2ea228d56892245188fdde90fa9c3010f9610752239e082da2e10f7dc5ad6ba52d578c922d3084e81260e2dc4a9c996ea71ef5c93c04a71cdbb596542bef9d6a6cdd9d1a3500a14bc74fd0f1fe3531cdfa253a3970bfbfeec35d62108d09f487a2e81215d10f175721ced1fdd9430ec9c0728e29a53d04ddcf17486137711aa1e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aee1188c1065d613f88fac09ffe04f293502a9f82d374450c69aef9db204215dcf9a697b8bdd54f1bed707b7f95a039c31799aceab44440897649470b3d84d80d5fbea52b3679e86323de43defbdb0f71c516c7e3e847f4aa65df0f27867c64b9cc797b6cd367dc0b92dbd15668a7bd1dad99609669517ea44284aaddbb2cd42d2bf5ebc8755e942e40a6e3e4f275f26e01eebff15d22fdff50b21b32a29297319d738e2d4bf8bff59f6af3fbd249c6edd2111647f4d955109c1c4205614d32a028a1c39988287119ca99711f1900935b8d2c369ad62a75a539a15e14e62e2191c5b8229333e20f97756d0d173070a2b20dbbffb4d7cc1610f4066c54e7e515181d5fb8fdbc647812896d1e8ece6602a7cd357ec6a6956db35f1456e38a80bd2aed12475357cab992fd3f4110aa1950b7ecfd28d1e289c56926af8f65ce231ecb00ad8806bf08e479d7631f40b2eef48aaec80c20d3a3a630d38877eedb9b23b078cf6e50a68a1e07348985168ee30a1918bcaf90fcc6214dc0a59bc1934f2f1c0efa1d6a1754327b63a27349f473f87a549b59f42f8c34ec431346f4c0e564b7a453dc5816383588ca8464dd1521e7730f29baab288a94f2e196b9ac96b3b330000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa57c9df03b97d84c7c0233e10fef853b2b92c0791287c7d1762934e87b1e64b40c5d6e3b57a7ae208ded961f664f0be721456941fcc61f1f9dd0d129088a756f22fe0aa9ab3b736fd8b3742fac5d88b593af68825b829693c637ab4968b09e50aa1f942bf5f31cc462a290a8786289b68d900fc92e80aa08783afbf6f6808ea503762f5820d82e2f65c138e2ca970df1ebdf51ec4177e08814c2503e6c8937dff7cc85798310f2013f63bc1a409496dbc91d0f46c9db4489524bc3b1c51191dfcf90f41d6ac72d8b7cdaee2c91675ec670294e9c40c49937dfbef02cf6088415ccfec34280dd0a984c69e436a7f411d80d7e5dcf41ccae540b34e93e40ca3c748292462b80c85920aa45783a35448c5ee8b8e7ca6ffe2bcc9edc86ac4a74680b0f7b406578e17fabf7f476fbbebdcf5bb6d7421b702dd381b7f03170d1028712b7a8e44ee76e007ff594ae5050547df600ef53cccbb45e8e5bdee20bddbc64b56565110a38b0fda6e1b588a7bd29f33a74ff4ff4d2505240761bc168722b55b4b558281d42a6a03c0aacd194f86224130f7d93662433f79f42db2629cd8fc77895a1aabcd7bf116e59de9b785a4f0ceb82e631bb15e4d64fd5744921d63e5a900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002957e38920ad98f088745c638b336d43d189e494265e9422c612dbac93f1abfbd6b4c844b3fdf2e7b988ceb61f0d3bc377a5e19a90c53afc92be594aa5adc9a6f180fad4b79f342829232a8a0ce29bb553227fe17e4cc762d38676a9ff805f96274ff4cd96cc5b6537233611903d63f0c97845a49c9331271eac9fb68f87a76e2c46e3832db847311b2307642c5e0a25077fe9a5229f130c6063f3dd6580ac11bd04bcccb6753422a10b2cb56090969d305bdde9828d8a6eabd2aa0577cfb04d638d353252714859e571d1e07d9bc80f8154e82b37fd3ff97356dcc1a079c92d5e1d738b47592e02c92b128445781c232108eda5427b47f1537fd1218f0f8e51c6ad2a4c34d8ef023149fa646e75fb1f743283f9f09d4b67f341d34666f19080861861c0866391c77a2cffd701cfb7b65f279aeb812344b0a103ca9bd0a9e2e7529bdd1ffbed61a3f4b0e758c14e50a0c7703cac4fdf4637976c4e6816ffa010bfaac348c704be8a4ef3966bbfe4ce0d7b588f4a33f40601b4efe99b75532c57deec1168903b34b6e3dc99ea36c76c3c2db4403eb39dc1f482de7197be697a00a0b0bdff432720257e2db09aa24bd71b03c52aa766613b5d25a089b357e18deb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000862e4cbd02c83cc455d3444fa9690fac9327e9b4e6f22fc50f45d5756b37098e121fe707b35884d9aac64a29a50399eb9f1726dc6cc4a987720457bb67e0a98ed7af309c9fe8dcb289aaaa32ec34f73e56265255cdcf40956a59f956679d23985f80d883aefaa134f41daec7891f92dcd6cbd782a4604f5eb1567a752b8542828cbe317d5ce6ac60ca489fb1edbf326e1605749af6fea217021739894952cdaa6108aa7d013cafedf8b04a19cdbc7cea2c568270b4dfd8f681cc7f5631a3d8df19b669c8fbc0e99f09786acc289220c5fc271ecd0506ff99709e169dfdb9fe1f05863c5347aa9e2efe98cec355a5e97d0415e27f2d510e8696ac5f6de81631efea7bc4b9fc0f2f8ac7857293d0b3e28e1bc03f1276a3d13fb04c46a4ebd987b7fc29d77ac3498a5331812114ff6a1a2415edf2a35c3e80731cba82a815138a804c3645e18d58f2c89310a52916924a116c6582813bb73341f5e6f6d896924d53b3e4ab246c63b61c8525e4a5303c9d2f0bbb4f06aad48db9a16823975742c448d5fb3ff33eccca57a3664e4d6718d38189c19506e0d2ce5754e3658174f1e85657d3ba67f9a85b27adf615a494f0c8438a4d68591618933bb4a5722ce9cab23d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c97d3c96550aaa1615151f56990260daa438deab490308c971100c700aad87c213caef79b3de3ec9a4937f9eab022ddff576d54fa23745dd2a9106e73f1ebdff1f91434470ebd563ceee38f643de50b1f22219bad0e249677e27e82423d80bc3cf52fc72841b377b836df952a31bab349fa46e0433d816bed4c23ce2eb6dc5c6f3810bad59a7ef90dafef3bc691d3950d1df41df74c44f81ba3cd42334476f588905518021b74a8d615e4e8ce6fefbe8be27feb78cd00599f5b89f5fe7947c18a77b23375bc411014b7a2ec4aca8363c5dbbfca6d05851a6f1712d48cb9eae140438f781b7ed0fd75425e938b3e2dca4c81c47d8fa9dd1c63b21240bc0f7736b40981be1729c9713a00a6f0870f2094218648df02287521039adeb2338f566b48fcc8cfb046488ba919d5fecc7a59effaa4bcdf731bcfbde0ab77e2c8f06c353b4f4b3a1d1d098dae61b6adceb7da59ad1e3a9c32a667291c5fb0e5978be1f36401831603e32ebd327b9e859dc4d066c233d00c1c89945508ae4d61d50ab782efb9bf43f5322a2bd6e1cd96e6ceb62cb6c80ef2a47c28879a1cca8de730a507191ebb1209446b1c762897067c19b708bb2a35d9fd8745d1fa6f4fb115c3b59f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a7bae22bb9a238daeb7d9fdc38dec28f99338ab85a091d251a894f9222dd34c7fccae4849aed924f0f85ccd8f49b25ec50cfd197c543d64cba5b4e845d85f992fd4325dbfa92601ddc6b897b3f6ec3342899d181e5b603dc564b3c7ab1540dd3478068d712e8a41a88ee4a36cc38b75be8a513569f8150825debf2255ea43b949a524b60e7dbbfe2c3b6606d77a1a0ff8bed330841a83a52043b479d238aa8e23e4ff827090d0a42f99bee71c25b01b327d94e97a1efea01a3e3a49c0f04cf1b1b814e5880e2a999d127972cdb79a03f94b23aac270114316f43c76555dbbae9b68368926c0f83dca9e03a99ce21899728505aa768dd3024e37f79f6f583b1a074e5d2bbfa1dcf6c3ea56a0547a735de54aadc80dd789ab60c9cb2d94baa82409b58e0a6dde0cdfb32ef74ddf27243e3f4fb0aa6ea3754c763a0695b2bd69e32fd83409042772e06f52e4dba2c71baa7ac84c908184c8620834e48ca786f65dd637fdf183a403c8d067b2ea7be09ed79f18cce32a7f7d5e021c66454df1c9e835687d97dbb19396c56bb9b9d4e1151ec372577ce293770345e38cd31e029e70166c685d484919cd17a98070118a5ce4d4a3a3c9f60aa4827ede6350abbaab6600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d491f85a4402bcf14591b934275aded47e76f29012e82f27dd4eb17437084bfdf274ec90383a81b301a521e804332a4cdf776e17cf2143769a9050e9c004edc7ed12c8e1080146ec2691f163336fd6ed7417f84b0bd93cd0591d2fd43ce34b4de747393a4204a65e350a7e9ff52e34ce0f31283146811536c50845974c225b900623fd517f3b802f8d0be4ea03ad03bfa94fa1b1e7a6c9e4a30cbbccb37a0b2bdbf0d521bf987eb6d7eead6150378f0f3d3928d1f60a3c288b6999e40315e2c156a81b7c9e0fcdeb1d97b3936a9849d363610f23d7d1ca81856fa68ec92beda2b82467fcbb291f0903fba915df13c2b3903965fc6418942c5fb03ff7e75181d7a320c00228808119c4d2ae2342a9ac32cb2f41af085aae48279ab98c270c7b1f3f13173ea2c7eaaee4746731ab7d080862d4e6e00a053899f3cf4c2e6becb559c519cbbb18df027bbb01bcc45a00843037d2b5a2d9c3c5c4fe13a57cc34cebc06ce7f991b3020e4517f25ddc28cb49fe0b532d53876c492292b8326bb26f4cc7ba10c9f017c73bcdf0f7f854e445bc135b0d6143002b8c07d101a7edb178616118e435efeca0dec578ade015a3f3a33024467a0bb3f83bddaf4e724c425839e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8f4ed7408111c28377169b08e56121be12cae935ea303bfa4e52bf6aa2bab94424fb1140adcdb6a90c902c135d6083c77ffbd5d5c9dc5ef08cb3b66ec56855c43033b4c23197ae179a82fe26f087a5932b693391f1ce1d7549a7a086f6c640b00fa51c99c70a2e3e41849a98a5330e1e635ae38068e0cd70cc1792c9c83ebd9d48399c2eb52d7daeeb69f1e07f15639e78bde413f012182d222ed5793a5248dca895094b45645932df3005d802e1cae4041ec60c0f5f4a474f3b62ac8d4d6818c87fc487242bbda013f0e18666e6804c8d0d8643c13b278d48afba37da97e1e58c4315d790687b23ea7a9454fef7de599e7360522bf39febc5f1ee0644ff67ff7d0b490f4529401ff32989c63427320490e3926fc429c64b82e5bff3bd4596d30be873c8bfb21698251b5564ef613d5d1b9142ac6a8b74f5d68797d39c61cc3c88ae9f224691c44a70186a8e4b97251546c03947f8aeaa3995411f871781875bc7f50c1cbbd486f36e082ab008e887f1888c1da129a80fa823384cb09e82b4da6f73bb2f431e76d6b8341350bd1f73a0285a0817d799e9a16296ed7407a288ac12c10c57cf3806b5fdc5ecdb91a9b4180a709eecef027c8577d2fdc97e04cd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120256c210d578277dd960901e658d175569d2369c5119070e8bc47a36dec5be4d0edb7c037932ebcd7f2b3f86f5b62bfe145c7ddcbc7cb23c7087d8b4b357fbf6b27d7ae49d1895f69f491c62fc8cf257023a054783bc37dea5c3f280faf5a64ffb50a5636942266f8be846672555b6c7943407e4c4a619314c9b6cbb3affd332df255ed63cb7ce84f9cc3fc9c4418cc626df8c6e11b2fe7a98de37761ec89d1f23ceafa7f99c6f5900d1ebdc59be271d73b05d8914238c09d4c811ccbb5d7056519c1054f67ff88f8daa4015c74bb1605ca56b26b5527d4b27141be861783e4a67dd384b6091420b03b79619d750717896c84fe65b411087b694fafa8ca541c3e3ab793de3220ba028b5fe5f3ca3e0d5cf32eb43f9d52d9534a5d5933029016760cfc9848d1af8dd2142d77552e18ba2df54f86c7c667dafde7732db71df3ac5a83999a8a787a66d2b4957787049a433e599c64c7f8c18ec4bc4fd377907779983046f95f8cc3f7fa05ffe21a945870c7b861325153ee6bed0172a4822165af822b06e14fa9fe25595fd1371765d3665fc219de674df3c5e69af01cf93f64523e0b5fa127737eedba078fc205d654707feae07cec4c243db0aa1e3f37199bd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e75b7ae706442b6ff620d1fa7e005fd3dea706bada1d1a1d50e55ae247acadda0068f12e717ddff2051b562b4c06e59aee731c87846032e639ddeb3c0fa7a2eaa95f0dd96894e19123cf58e99fb6918e230472166a19227429968c40911ed40e9be42005dcf5fc9e24d692de632d67b5506c74de56dce409ee2d68ab7c0afcd2dc9c9a59077cc53f2297226aff65c6c393da9e3b8a8669d4189a10f0ca8c70533c40fabf8ab8c15c14f26aa812887a3a69300c6ae78d909e5b0b638c382a061fb5626bc7df808480a81bbc0d46c47a43c2b677aea6a7465d84507ecf71737be7e4eb3bc3ffd7bad6407b68932d9cb1eec2ef92fecce3b5c2ce0b7138a35170b018b90684af8ae1147c7998eb89f8329454a4ec4dc51ac362ec4fdce1ad936030a5e232b2b4fb0285009f09cbab9db67290bdb50205934af54fd73093ca52e435109cfcd78fe02cb386efeed0f15cc60a69db37931caf80991f9c84d1ebf4074167429af183629201b7b4beee3d00cdfe86c5dab24d090968220c0e74262d42b9b80f32dd59c79cfec082af9baea7fb480fb97416327d01741b2a8c05ac7ba3e4b843bf72e5bf529395c182c1e7a4114340fe4184d6b43560bbaf8839948a39800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b548a651b9a5f2e343b797c1460d21126270f40347bcd0869ee95292862dcb250ddd6d901b631188755d38cdeb749e04ebd7dcb090e03da5b9719e1cb3b0bbb7a21e96f42ca1a7da7b01b4ea34aaa6a9dd74daead2df32cf5c6306e752e0a85d4d7a198d369755b3ca0f6632f98e9c12fe3fe6fb903a958798284f690bfb22eb91f734d26f4375be6d2f179cdda4b1228fb60a100e2b61324a0cc7cd97d15328120bde3a4331f5f9c38f2dea060e76a395e5cc42346ed387b9fe32575697c3817cd5d6a2a2965afdcda45f5672036bf166d1c8bb9e004e42b03583c8582f625561d5c73bb89b58f07c5f550de4e3ae09d109125b1007bc1fbb5b4fdec53c56b06e33be1bb2df8072e6a6cb4ebcf92ca0e08f8d7cd9fcfe45e66ff8a39642f5cd654acffc161a596b736299f262480354982a111c34e2168a3038ee342a08616c525f44125438ce62e8f3483d66405cd65b2563ce3db4fc67e9f11520a6dbddafb17f33d099df3b0f16b605322fe5adfc5f3f8aa10083599f8136e452bf8e1c70ffc9d7fc73910d7a43be94ec7becbff41f2d0226e8123f27dbf7a60f8032113c7ff8ff4a44f23d49be62737910f21c5d45352d67ec9970bf4be37b280ab94c900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f1e924f6d165489e32bd78c83e8905af2980fbeaf8c6979f4db8f0a20a421982b6695121d86b661f9339f76175e39364288cf455ba755a1955da961712de46031092abb23ace2192830a5b3b84ed1a7a6a8fea986912ea05eb01273b2699e8b2201d52592c3ea114ef9af2e6e3f9fda7ba865b157d0498bad370cf8996a24fd73855b42a893c6faad5fe6f74f648027ba6e777ea42e38f12733eccc605fed75163facb03ab31f086f98c42564cd598affaa85f0c168b0e1722889de99363a038d7f454d9a2c646aa40d8d31700e8a7a816860b1d442b8c3b8f9dd8cee21a5ebaf716f901782c5dbc8076eb27c9beb698dc563225da847d0f83754d2e7c8d59ea84477d8f2e9529f38c2d1e59b281dc3c77ce2e2f462366effd2998789c1c187cdd527a792c1948ddf9ded859a62bff64b794753644498ec616553447260cda80a42f96e041e3e5696b99c03d30ca3107caf8e687a6de0b9b843be625f9b171132a422e3c14c1aa7e4b02f4a525ad6775a2210a65bf0cfd815a4793f2a27cdd97230f03dd57a71b5da6bd462c4dbca2c8941445ffa0e6ff5a2cb1fad035f6c3fc3e92fa4e18b4bf6d9ac939b4b20e2fcf63b17abc99fe6384feebc5276d63711000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097ac89add48ad5f33460a8eb54886532dd9faf9f40bb324a64d3771b17d4b3d25bada3d4658811f21414d630867516e8ab1b1a0c2eb1563564d2720a7b5ac6dcc0b657e00373b5b9912f23c9f074d688ab4f11e511f1c10783323ad9d604a10497db881a15434799630180f796c4068357626b91dbd8d3fb8fd2dc984bbf9edd97a0a65ec8cec985fc90f291219e1bbdbe1af80d4edde7d02ab88fcfae3f897fd4e9d19efb28987cd89f1ae49e3a13f06b69dd0f1e78a69805fda9d3332e76c272a3cae2b810dc3fc6c2733f13c590dfc9079dde7fd746c6b5ac75b07db2218b72ef9e3fbb3c4c4c4b9badf3f4933d4c31c5f0737f0b7ad07b5551f15d3d5ef915c2dda26433b16bb851a5a675a9ef9026d72829a79dd223bd09af5fb93e844e2517a756340d8b31e4cb5ca422f4c93cd588bc93d351827aeaacb64490f98b11c205693c5a9c85cf8615f7525e7527b915226b3eb5cf0ea38804bff16b09e6aed5e2b87c103bda5e5ae49ba46db5cf755cf6e36b418e6aeb878a29497ea845aea176669c3cc51e34b3cbb2be57d50e19925a89047bf1928ec02f4d324b1944460ec9b319d6602767d2657a0ca5b0a2b9507f2ecbe90e899e27ccf6ba25f5ea7900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a5fb3a26ed623e013b426509419ddee4ac2f6b66b0497bbf8fc81c26b0e147f80b6e29cd3c5ad40512cc80ccb96025079eff5c7f78bd9f9d8f0b50b7dbb3194c848d848eb3e6aae2d2cbbf15386a2f2a4764d21fe1a8ab2f419d0e141c5ce37eb2b5434a3175e6f45fa857765053d6a9ca35db9509702a434e84660dd63b862f3cd41a4d2c244b96bae42e6f5a3dba7dae260b4992bfd9629d939b6f016c0912bde4c28cb69cf5772540048ad37d30253faf64ac18cf280814592c176fde767928143a87e066b8bc517a5f4ad57576a07ec024dbfdbd097448d061507590b0f987ff8f66392aeab9aca0305fee429011353f65bc98a1916ef8743a07a0b3ee0f07cdcce5f53bcedb5b0cd28f79073e05aac56ea243e6f3558e255ec1125858485fd4fc20c522ea2ad60f1b51718ae664df90124e82b2f90151a07d4aababd9b75670415599381e623cb3cc8ae098d748e29fb0a86473288c3f5228a338ab949605ab2feefc2ec94aa1eace6e97d23b2ced09485b026c75adb3fac3796fe2bf47d13c3cd346a616fa4b925edc602b4f80cfbfeae8468927e87dba383dc5d70f273efcfd2b214f1cefbbcf00e11f9e8e41c77cf0b56d0c584d7650a5462064b7500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c4baaac5f463e587a6e3be6f14bfb83744add6291c6623602a441c0a1e8ecc93d798d42214204d8d6077a6e5a325a0ddd841fca91b45637eddc69ee88c1e8d568f9d40c4956acca4f26dc5396873ed0b1609fba556ae933b0b54bc8c0769baff02aa4d26a9b94d719e7b393e7d6f98592071465a1ba8d9126df19b5b2c518c96edf2be103f85514e24b19d70b1f9b3f1aef35a9a9a0b212130e7a743c04eba3331a46dccc954f0ec9f37f7c5afebde053ad4a1ac7b2a230305fd00a070997fbc043e529cd9c9f58095f1d3e938b2d066d316faa6b98408409bea1f0312f78e8ef1e0132f3c3fefa1aeaa0460e659d7c3133f42271d1f2873c9741a9d8e5aa9b0d0abad8026188a4e88cb23a6bfc2296890fa7a5cdd487e4b0d2e11fd09f6551b98832491bc8714b4336ac3e4db902847db23d5a09870f9c1bc5a55c94ada12cbe0c2e2213708b8851ac0d82f1573073af5cb5e3fd616a29bb350cded3e14e3771dab77f40e78f338b796d5e81513519fd61dd2defa594268cd9ee6769855882eeafc5cd4b2d4009a2c6da059838f61f40d782e7c8ed2edeb7297b59b4fa7859d7ae8dbce7accc014a5b599bc6b7ce3dc580130956aaeeb2428987de8e51a40a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a700d62e7ccfdbe0fefc1190046702756a675378328ecb0f3ab1a863f8dab997b3e8fddb3391dadfb33cc016ad3b0c56ff8a69d7423ab9c924dff2c0d73d6d38b9ffcce3c7dc7e0d1f72de47bf3e95ba5228afe387676fbf372a22941bf1352ece3fe88555b1b09b233d7bfedfd897793bd41db1bc80a6ee7bc30e7761fe6d3e1a6fcfd35ca7bc07c9317c42dfcb3644bdba4dba59b057741978e3cf3daafcbc4482406157ce3f97f3b0f6f26b22d70b61bebd4347e4e0b05a610ebd9a42c8a240f62d1c46794667f7203223b146bf3d6abf2087eeea48fe990831e9a703ebce3bf85e56afccfbad79fe892a17478555be64f5f1f3bfb9345294ca3667ee75caf6cea264dd33b7551f5eb1511d302e243204c588679d60087cf2be979cd705e844aa5ff37044d536946478dd4fb482ea70793cf4d03571e30f434ad84d07d5ad8eba8938908fccb7478d04a5684735987e8ac79356879056fd9e73368509f1ee4b1321ae78353630568ff6f1e9b5b3f748d5ee9044fc91280eff83a936d2646221dbf7db0d239cdd29bdd1f4754a41be41fda131d15ba81b19d278df91689e99aa4393a582ab863be3bde5449fb5cac54c7305f1e9b00e694f4d1124e6088900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a119019d2cd8a5f7070dbcfa9ee62faf8b5d79672ea9c7ab5349de53b69a63ca1fa479fe6de87f2011d942f2383b1c83e250c8d2098dc403ec017654a775baada6850e056a63912de631fa18770fb03d87265bca1184ba70e8d48c63e982bcd71d34f0306fd51c4a7bb7373099f0c510cb4cb56163cf40bfea44ee250afa7bc3ae7b526d4f466d94469d480d5fae7aaac492174e15f3baf34cb1e70e8cf109be3a8df5a792c4e4fa197804aa984620fafcefd78dbe03bd401539385f0c818ac9456203281cc8e7067fad318f1db346359657eb9b25dc6925885a01ee53cfe374975d04b585627ddf9a6358699be6ef39576a8d158fc2eb1f056341a90a47769d9174c47fce0b9a0e21bee7d192847513bcb6021c0f145b79601efb7a44711acbaebc507cbc35f066b3724770e13c5ee043692198e52cae74fa3fc7271b463da060a5e80a92f23ce400be622ecd97e6b20b360c48875751c821db769e0efaf978b1231c08873f66904b38b51f357644058ba169e723c8d01bae2863388a2734481bbc08e0c2dd50a65d380aaf4e817de60fd94e057e7998ccd39cb1259f8c027a22bb95c1a689a80038c6e1874238baea98be1ee294927156db251f17711ae4e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e308cee623da093efd25cee1402ceda283673e6f7761f6dfa97bddcd664adff2a5986f0ec1242bd6efbc5c2a275bb8027aa6f2cb599aa5a500ddda0f27b6cbddc6fb59b4ee3825356b89f191b6c5f2b26290f012351c4181c599d08affdc0b85da48b048ec2269980e6063bea4d0eb8a0d929dc5f810391de24d8b90f3e53011bb110012cf0baa44764c44ce7cf22a729454ab4fcc6d9a6d775a1fd57e28cca3bad39dc5b539dc2bfb6277ac1a42e2dae140b153453694bc5fa11273d77ce04fe750731459d526c5c38faaa9608b33cd91639f9a5c53dbb1477bc91ac23a7734abde01e6cf9d9544ceb3fe6aaf72f56a18745511ffca72de5efdb39d8bec91fd266b0e6e0fcd8cda4d811dc5cb54f5ac2cd5dc2cc9a2038ef75dfde9ac11189f5b1eb4e7b45ea192b2e505e653c3dc19bf7b63681cb5d66b3855563b5ce3b459b90a46e64074979086fe37714a085737711b58d0dab0b4739aa7f423b86e9c815b7783b085184829ba71af3dc26a2255ed6ef977e5e960b920d847a3facd06fe7518a0818e8c23fe7baded76502dd20f61626245c1d57db9fff0ba08db5105ae7179e7e68af6c57e27a5fd9b2094db461deacffc8545791af7cef450e33ea7b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ec615d3f27ede7caf9cbba8f747486ee6a12bdd952fda91c84fbf10865e300234c120691f652c638b88345ee2c52e8bd18770c233fa6a5e124b61b161d63b4053d47b458d2c93fea5140ec425e4acb9a0c85f47815e93cc6c4cbc2750734c6011260fc59e2c9f97cfa0d55dd95a518058a772b9d48ebac5e7aeaed80643a773f3fa6e664aacadb96559036fbe0f8a83343930f778721c4784c2a3b862d701d15849d228f001eabaa09a48aadc7cc4b64233ffa9020a223bb731d2b6ccc65b74b81f645ebe94dda3008cc5ebbbaf3be1b5663d8d92f72481e70d918d9449afd5614d5560e2f89b7b8fa8ec6800eb0c97de0aff0614ee12139d606e2eb133e3d93cf0993811e47921ed97da7c38185af5cc76c59dd88e9db8555b494ff5b6f8348687a0a9be2c9cb7bb05123d719d014e2d59a6fb3f3421036fb8a9c22e4ca927a53f86d524196906c367193b9db4a1e8e1f3252678b9e1f8df73609ad96c33f10e6c4386f84275d30310a88b71dc32d32fa31e98e414fc2df535bf63ef7b76c72d4b9a78d133428b546ee364fa761b04f6c87b28bebb0f168b1bfc1cf82f469bb9c84ced609b2c86a2a4b57aaa6f87e41d36d3751ea50f2e9216ee5db0810a9000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f80611af901c6148d570d107e867b988871123c903e07036565b978a76c9f1a5299c8ea5b536cb664d595890ce001640e398de4cc9046f48c3a9057baeb9584f7beb0599f8507dd929d04829a3f579434edf58040d4540b70a425a8c52eb9e8ec1ea2d0c5d897578200a835ab959a3b0ca014386191fdb60d0126c668e4249bae41f1b66c8858b42b9504a9a4165ee8fe6c16b98cd3e534d370fab2ed79ffe8730bfa728b15a27a0c50ff1eca3cf87a6bc3dc09fb4d5db7eebf8321de763f9379497881dea421baee030db7936f3fcadd7dc62c9300bd33e60d733a122522d83ad8690eda61f2f677f23041205c16b7cff26001daa422e5493d67049d21f3e5951a549930e72033d75443aeea476e6d833dfdf8c530f809dd6db46542c214f86438d0491ece171dd2f7a0b4c7b92a33cc9492988946d8654ca15b19320b978949f2fabb751f3f58337aeb1d4f0485ec5cbb0bf207a533f9e1adae8f7b03416445dbd8a841e00fa3abb8fcef508f8e734df78c7b3cbb49b62e0f880c7439191ca31e5164459a4a191693681e28b042d4e7262c56ae810329a7fe45a004e7ce99b9a315605db95b12e5763618806a18a39d4216146541737e10e53ff4927d51b00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000909342ccb1ae2ecabd8bb82385ec8e64341fdf0ee35d3f52c7cff97d1a0fddc96728bbbe9fa65e205b1a9fb568938582f00bfdb1703607224742b12687183f8428a545266261d088d1e26bba0706ed325d802dd024124a64240862c7cfa57342183a9875c2cf31d4fc4c09588544d6e45cc88543398edf2fe68414fd7b1924a8d76664b60290c144072de16941b1652de8ba6b4d77791b94fc60490f5d62fc90f94ad58ff2e5bbbacb5a6186ff663afd4d9eca8144a4344e1ea14f903e89e0811c3bb6f62e82f4f3bd76d0bbcf167b2d0a302bffba8c90796347506fcfcc216ab464bb70f436d0abc29a4915b14d7c37e886330d7696754e12bba956e60b00ebfd4348ea799b81048973165db526dc6a47ff29a8faec70ea74cce45de0fba540d15bb5a25921f16c786e5f91f4d020ad91821c9ae1fc86725f2e30b2e45e1b21dad77baa485c47656f5452cf631f76a0d2a28ffc633c9583cfd21268a639ec2d0b06a670f31953767362e8478b4418d2bfe498faddfc63124a9a9c482255ee13d8b3b2333fa4e206fca2ed15c7fc5e59c853078d137fd04dffa7559e3a392d4c1788e8771d3bfaa7f8efd014dcb0075327c372d98932753448c97a65fde0569800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e3b753caa09e8e0bb0920f9195944efb8df36e3d4bedf41be06ef169d587c36a7b8058c14819d10444bc1df22654829b41b0ff5947b5269ec381e695878fda4709ac1aba842e5219fe755229802ce0fbc54fbca32ce0d74b6fa5eadb1edf9768e1f7efe35973af26943d8960052b9005afda7e7eec63621d6a2feab0c99e7879520cf485fee0fb3851616cd8af6ba949187308f8681979afac21029cb0470ace673626c617526954536877dea349790090368b29da2597758e9cbe9728c4e73d66b9ff1607b13f300dcd3443b3bd6b3e5a75237ed74671ac87d0b0244076414179f73ad1f4ced9b647411de9603989e0c13516e10b87ab6287447550983ff49b3df8fc326b3485fe2c43a9b078812d337c2a079dba265f00ee6f47c2f7538d23ca79becac1de7a790a1147bcf955be821c6bbcc97b5634d4fcab64aec838cf06f3c34106844fc6a5e516eedc91eaa95264e9a81824da592e47399a137ab35264295e6e7b6de1547c2658bc95c7871ae52dbf7218f28b2c097a6619e1d3982203e3f0db956e0b985196cc15183f24c2b67f56fcd21ddeabc8f3a1b9c2daea87c1d3b2ae3372ea11381b829654ac14aa3886bf06016e597a9bc5ee26508909eec0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aaf75ca59f7e4d3e8678621324d0dfc1a6f3bf6ddb75f90345f5bb4e170a3da0f737b14ab9539656cad8218781e4da8ea6024939e0a7a3116baa59e31ca0435174f25f404a772b46e622545b3fd6c81772190af979b459161100d0198b7b30e313b1351eb0cda8fdd1ad6f158caa8566130ef4a035b177efc3d234afb339c2a2aaeb892e629d3366a4ec7e1aa0fbed5ecf3319e2538e69d687e5b7c9c6323eacdaf48c3c37a0977ef7bbef3eb0642fe16ea9349afbb9ab41722188cf9216b48e6cea2a6439dbe1d5d4910e7a7d66987259dddbcdd4504d265efef4632c980db351e18b03d972b259c15005c81d89ac04c942e19f401d13fcc3c5b3f5ca123e5d27eb92c8319ea89916d38a55638f22858b3e34c59f5e55bc6a128c738b92532a867b0e1a0b4aa6d25544118538dc5edb995ba81c723df2b66750ec115cb189a40846c90cf5621da9747a05c031cafb4b44abc395b0288158add09ca6d5386907e87e64aec532423a012eb2c382e6569f32d7727446d6bc4c8cb2b70e11069c98412e2ad20c22d5abbd74b1f3fd8167dec6e20b1ec0ffabe952e8f480e6cf7f71788d907e1f0e2d5e4a9e5559a068d876318835b66c246c5328ef1a644c1b5eb900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e67a88695e3547acf8884c60a75a27a27cd93ab007bfaf3dbd351ed8cb2b9a32b2f82cbc60991d03ad11aa83d1691d2754af45410e41110638c91c2bb02faa23dbe6d8f2ecb6c27e167e05a06e36644342adb3de0aa35dbcb3c61370569282c5e4c13092933e8a6d754bd84892cb29625a818c80aea687e23706d9f640e31c017b1310ae46b599f58753be32bc21b9a17f2feaf7a09e807ea36e30cab92cc9029fa0d06352f5992a483f7fd5fd72a8a68787a6e21b59c098e84c229ac0fdde4397d3856d0e6ed3742bf2cb129671c2153e42ea8a5784084f833974b423aff48c7a1be80edabe97e6d0fe006809d950af987cdc76e6959bd92625445e01652a877fb7833c5e33fe3e145a71758c562d77362af76fdcb0a8f8ebed637afb3f56510877a1cc66efa2cd01cfb0a7c13131f31d5972b51ac9d99f66673a36241c2d9dd66227b1e15390b3fc988fc83a360b64a6ec6ee202c3baa556d4ffc84a482e7f694c017cac70c7c4b9c9a27e257ecfe247cee24ebe548858849e93c69f46d7f4f94d008c96fea3da6edefbdb1406497f673c46abe226733b2adf1ca66deabf8c3197e6fb460f634d3a531867ee9b87a5baca1defc285083a543c3a95cf0fedf000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a21d5436a74d8b216e2c9d3ebdcdefbf86636b81db19f01d52a6383d3c133c9cbd27361ea7bffd4ca33e685d947cdb3792b74c86d30eb0e2c8ffda99e06f25978675064889a30a4607b2469b48e18e6552e76ad34372fc8905b061ecf394bcc56381245ba57497ea12b938954e51a9679cac40e67b3d403a0eaafb1d868e2f5fb94fdaec78c295cfea5b36220b16b9a534e265ee534cb9b21470c0920957848d8b2afe069ca3e3ff515c2f4b39d2d5aa318f1b8ba769cddbc31fa6c41e6333c670404c6b11e7f5c2e834f34449213641a013ab20d309b51211bb79662d18522dc61a248758eca77ef81207c7037056343350fc996723903bb8a4daf9524b2c0db0221e5a852bf0be91426a80698d26eb7fd563b0245028ebd83f98949697c7da192d9565320fb668fa9576903e5bf9c78cb0a1ebcd14da10cd451d1f02e744562857d908e7482578401cba0ffc6b4928514813696efa2c31e37ceec17ac9d0b58a07cba44ed8283b2ec5ae66d6b6858a9396a4ff7702b07081f2c98a2798978ea29afaed0edeb5183068b5823e4916eb381ee17d4d99538364d280c4c3ccfd6d47dc2b610b7b346fbeb8b100a3ca5afd54ece832e9bb5ed6dbdf7b4b826fb70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000833cc4168be8a9b9dc4de76256dc14bc0331ca43360f472d5f805c17a296190f2a630a7d7904907a2a93e7a22a8857bc62e49fd8e419b2634f170f59628c0cc49e077c8d2afaa02b08fc50b7fa66a999ec47de0ef2f4d38cf342061ad1442cd3a198dc1ed62c26fb66687356ed634dbf7ea9584a5406919411976507be0aaffc8d875b73961faaeb970aa4bafdfb54cf59a2ca24411469a963bd5999c0c9aa99b8c99913d6150410bd35322436df02710cb5a622bd01d331d0fbd0070da0f63a2489b59ccb3a9470db67fc06c8696ab6e9c0c4293d0257a422ef52204092ec8d033e0055fd4bf29672307bacaccec93c4332cd48464993e9158ee146c3f269eb8ce82bdccf608ddaaeac989e1073ba968251339be08925d94aa7735393e937ae30f624306ada8d7ffc616fefa72107d8d2243d1434da9cb47dc5ce3542d7782483226b77f359c24b2f4e8742b874c87829b5651fee0f8c97597334258c39d98572b4d18c5db27e64e0b74dc39021dc51730fd3fe6a2b21677e6c9e86fcf2c2a8497c88934a5626f7033fb254c460bab3636fac26632f137759a3ae02ec1847bcfa9f70668ff4b059bc62285558007b81a930453f2e915517971854813dacd7210000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7285887b1989f68b25de8714c7cab56d17eee4a6d07bc3f447a9ce8f3d438577ffb8c9d5f0731efdb4126939a4ed15b09addae43ca0b8a92f9fa94d6cd9cd2db34be54f3c8a2343db3199b8b42c826118f2a2eb3b9b555f8a81926daa24fc07e84b82cae2ef2bd85346f008daecc332223de26c6cba50329318a0a9a4c54d6987b176ff274abf141718c05f9176547affb90e27c49c8c37d0ec0b8e22a2e3147bf0377e911f7c4518bed112f8a43f2c97d1893ff7995e1033bbdf2f358d954d2d5d9a8a412e020d8a007b22fc3e14e516eb7efd5161b5c99d3b66b4399b4e966cae6f08ec418f20bf4b56aa4a3361e2229ffa4b9c12e07451128b6be9aa51d105c9276431d068c69a16ef1acbfc46b73b3f8e1afd6dfa66daa05b313dfab172ccf95a1623bd0ef6a3d82eadcb2a0d8e847cf02af0be5d11cb8e34f7dd923a3960f3d93adc6fb38575be42cd56e710e379b9893a4375cc0fcd9cf3dd6bc8b02dbcd25809e920cad60f4225fc7fbb4333872793e5143b9e6363f4c9adbcf83b1f8897487e329ae5e0c8e16df0e752e571b7416740c85a780306ed7bcd50ea11469110be0cb0acc1bde531a25ff7e0ba9950805967a5b8eeab6fd4e09231fd5481000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086c8bb6003010b5f3e0603ba08267aef56d62a1bc2cdfac5b44811810400e2ed32b6e9ad66d29c0c72676b3ce5b88d2c26498236cd817f3d27c7cd3af74bac116a12e737de3d2a3ea54c458b59350f2268afbad08b90b4d4a57bc29e9ad9d534fada1d8eda849a88a1512c9a2acfcb895ca13e9c31c84b72f577f872e0fe9b9c4e90af043e4122e96cfc5e8cbfccdf98ca32f885966c8eb36f91fa8ede95ffc2f32dd583bd05134e45030570b71e4e43c20bd84752cf3b6eb006da6b9e07b0ee084fbbb51c413dbb4a91314148dc4f591e2d52a7f4c6ff96ac0ae8ecff2b2a2ae153e69de39cebd928c0e54e07a62649b69034d4dd5d5fd898f7959a13eabfdffb43658edd0016c587529377da9539a7cfe16063773368e6f1f5fffbf0ad97af81b053b4d188effd371bd0c058c3cb470f4c1f3ee842a39d2e37ca20df8910b531ae79dc1d63634723d75b5d00961676c2ef950c1bf638a58e65e3849df1f556c5680ea4b7f099dce4a488db0f882dd933662ce647423c2a64aeeda7a1bbfe7b0866f43087e68e6d7adba06751db903dbfa357e0b9f5ac62a8e6fb4c1a523713fdc66c8983c16fd7f195923b6c48cf00d2f14421eac4ed7385b8727eacbb7a440000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a44fd917862e66999684f13b0794930b2017d90297a7f2bedc7c92ad1fea829f8e2594a9799ca5fe254fa47af5f2163f0efe73c85af05b298510d8670d20d525bb4686a45aa502fd1d8acdd7a3c647ed8a1204f3f5d1ef46da8e710b78aad4f9c35acd5eb4fb8b208c87b873b3dc2b1a6a913fa9d400a4153e551c627456c604dcf5ed9ce7860ec81d351a78aedfc7142adec988cf2e69c6c6e8cfbadbfa1373cb9884dbb94c9a4fdcf0b7214dd6ada6a8a86c14b1868dc1891d4317c31047bf2035f878d66d3145e78a3c48fa87ff15516d46914d5b856a6023d04827858799dd9d48089e25e4281942c3c7e8c975334d2f63c680f815c771a0d2eaea6c46f179b1727b14792a354f476e03ebc4b53eb5e9318bbc2a1b362849d3b4361d0d3578bd51b7204f6d8d84bf15e520b4e605308c9b1cc946f0698aa8847d22db4e89f82e54cf5f470427f5066acf34b31969f7e04476830943741a530b35db1267266bcd2279de425a35fed5f6468b0eaf32da70ab66a69ae7849ea03f02d81c3d6d70591f8acb2f5d4000eefccd0c3f5654f46bd18f2233627eb0f561b291e41b14bd37ef1eb86b845d3f1b9a828365653c7ddf7b3ab4a213d370b31da76837683400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ed50d52e4b477c66257812461bd06a1cbc293a6721fbbb6939fea2f79a47336706fdd32d27a70129e0aa09f02fdf2ca0393da169988d25ce66a806a117836e8eb4fd13c96ed724cf16594be70ca2866edce8140e320c59adb74b3c940f2e1a6cedc9dbe19659b1ea5520585a179c00f8452c711de6dbc37c5ad1e0cb4b7cf2c9976bd3fa6ff16a2a8ce7dd3709409388706085e889907f4375bf52e71d3231b4b480230286cf85f0b5dbe8f9ab2f5a4f863730911db8e694c0d6ed69d40049d84a1e85347d6ae6fcb9595f0b875d5c7ee422890b3fd9a05e505cc1c00f24d0b784e52621cc1fbc915566f96b2e195adb38a6b92278ea777ff40fef796f6234726bca32323d2d600565596d43aae6fa4c47a9b99d2f8f1bce251b8e34875a5d46a5a1d3657d649189cc9ddcefe97b7589fc881dcf162c5bf0311cf1d5104b210d7f44180c2b589a163b047f6954c5c8d163447d598da11cceade4cf119a3b3ea1df430cfeae5f4da7146b9bf7e6289bd1ea6fc6af5ed9fb436fa3abb94533fc13b4c50b3f54b72d51441ea131413a515d94e7e2f726c234a63ae534ac8deb2ab0465450dc1fa55123bb0d842b12a6d48efd8af4d4c29c3ed97bf6dd4e65e2b7a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a70dd1db425b20c7d28bb817e4f8408fe9e88c5e4fc3881eb94d2df0507838178e43432215d4fa53011f914f86c77a21bfcfcb58cbfb1027fef52caa4b7df7f877154552d7cab2df15db65e4e95a672b0bc9f33d195190b91c5b2e536b75b417cb6c8775e46f39f00aaaf03761e94a4fa642216b056df3322f636db54e46ab8ff684473e3db47fcc87c93da3a674fee6963eab5d3e3c4fdcfe1aa1ae02eda60a87f29d622e61c2d4f652a639fc0ebc89ac98a8462f72f013a5aae67914a3c805c11a4b6c650cb6a0d68ea37e58113764e3bb17220af12ebea202a2680575eef97e0c7d7c69c8221b84a589a833ec8549e02791161477d3877d8607ce49f064129b1e69eb91474bc0bbd6d31301944f59422c21ad72ffe39789ccc8bf9ba6b7f2546f56b20dc27930240c4ab06b4419661b5cd302278df0cf4946b6856ff42baacc6776c3486dc0d2ecb1f503fa85da0d38fd727d782eaabf8377057e9f1130986e9c96ceef5e4f7637316dec28e29e6496a1fd822af4913d32024c46e44d61b6dca00ff3ab89d2bbf2b0f54fb91fb3b74bf9ccbc6f2bc0e53dc43d75f80dab2fa1d2bce2a4f0b97c2c82e09b01ace081e6f44484582d8636ee34e5f1dfab58b900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002570f170a9e3bb6ed402a7c964eddc5437665a596e63f49cc64435a891031d839e0ec102d184a5b8beda0781d253ad2d1a1d279539218083c9c353cc5520bb94580802c63c43d04bd3b854c1080da9960f82fa3369be3980f3e8e819690aea5684d3f0e6fbb74ec7129976488381f24479d9c64e806db4e62282174914acb1292e13996f7a2721d427d81cc82b9e1eae63f300370b5e1f513103979ee947e47099e4452e8cf52b80c70f22ec8c87f0ebb8eeb6510e934dfeffd1ff4be69ab2cfcedc1aeef6e625cd2c756bab1c32c241eec496df6419919f46390bc706b8bfbd2337050d6fd781acdea3f4faa8d0631684032ca16974d46a274032c92397bf8ef48c9d14acdcfb407cf09f97562085a14302a19e72aa319279e5f92fafe9cf51f17588939337656a2a5496bbafd92ab57bb2ca0ad4e35d55c8faed863a4dd7be74f20572953f8cffa3e42e72fd63b3fdf4f96cd9ca5fe319d1325c781d4c8890ad16bdf4ca947af1836927755d9d733ae193c21b95fb7b0641edf8d9cb6f3ce0e189a62dea695ee7b5b4c1ea686b06dd31a2f021d10e2d4f13c68d0a2da0362e7e2dfe696cf76c4a25d73068d6901fbbea75a06ddae8a7eaa69cd378d8c88f4b00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48401d5b6a1d12244be18be7d60022a4c6acb81fcc3479d73842c6313aec975ebcf62dde39223036f82b287972871c7100ac75935f15dca71bdd69ba7b8312d186321ed63931d06ff22f52f732b15e0b26d5e96a6606197a7ef58e27f9b2bad9d35f12eefef418985e8f16454a30c69d51d867b8bbe6846ae62ca26f2be72ac9af1b060a81501ee8269cfba816ec3524fadb66f9ed8b0a383c9c185626ad19ea2b40270b32095cf69922d021217bf6f8e0c2e05ceaab9c6f010ed72753ec431a57df260cb11f61d80da8c8fe73632e89fc9bf68629fb5e858844eb72d69762643fb405ba21e551ca48d0fb81b194718e436eab479937d5676636ed3a9452bb74ddd02026f9a42ac788c09ad0f6dbb6ddc87963affaac9cc0ad0b2febbf72072c6e01229c72f1fc1a71f9173ae526b516a023acd5ff3514de228aeca34e3bcf45aa7b21af077bcc6f7893011242ed97ede5446a3b27c75b102af03f3ba00068d9429f277326a9c85b5e11001f9e53a6163ecb6c3f32fb59480918a05bf71d02df49a225cc406d86eae0d0e701fb36d7a1ad78ef7642234eddad80741f00b52036eace2afcefb8ac3b8687bb00b19167f32e6ede3026cac5ef2be91cd9ba745302ecda1ef5814f7a1b4685c8fd51e14149b873d1a58dee4f17914f4ccae342a1c56e6917792c486eb521e23d3932d7a41db33a88e9be54a4f5008bcce1c21b9e968edf1f0944a043631dec54bbf5cd5b2a83c732fa62e5f7ea2cc21713d16331aa527317a9b703d6371fce851fb340f42fb680b9acfdc017cfade9859877ce216958321b4b08570940aeee64830e403e3ab2dfffd3985956b71fd268969e0361d2394b26bf2876622456a6ad0be405550e000d6fd3c439075784c5a853c6c252360fe6051ce54dc8ac1cb115cebe65e2123f4ad7c2407b2507b1fdd873b2e49bf0213f14dcd12d8d50e88746ac52cd1adf7db858c60f5370c8c12526941dbc59baf9f1072f8a41924c6dcf21254cc2f20c1cd253e5543b93bbc01a397d81db614438d50d994195c7b402493efa5e415774e22d39551e8caa29144bd9c7f0da0012d7d615a022955897ad3b5920de618e44f71b88d66d95cbadeb5f7ee631b00c6cabc81efc118beba404b5bd71002c92593db6b5439fb9ec3898cb2409ea0c303943df2c7c79263d70ca5cfa83ce16af9b4818a6bb3f9ed2b30c9482434321a28bf46413992d60a8cf3429f0334a69659949ec718f134d4157b94ad8906428a631571112a89fcea1f32a133ed11b41d7fb2c66cd6894cfbcb379ca8e00d5112c06a28818cd8e68a17da326a086404a40658a8b20a9532bc6a111af81204b3e4c7c2c0f28927d895ea2377bcc7c0a01466607140499080ec6955f096a6551bf7b946e7814bff4e35659765ec4da9abf2cad5d25f40ae3f0c937304e8d3b559c6f6b78a22db6dad14fdd52173b5eb93657bb6e28d89c7f69ec1a4eb39ac90c6162d4e8780534619123fc183173bffcc5a875988653bbf7428b78e56da1ae3408947f55b62e6c02625dd1862352aeda741a23486537790824b50c7f8d112d8a98cabae0350673bed656aea2e95801cce5b41ba781dd08766198f49512e0fddc418bf8707800949048ce90332b26a8514adde66574192a19b04fffaeb0efdf96927c8976722672372a45a9f7175c0852357c253175b157491d23cbe97056f4d03f9d532665231e70b7126cbbd317be00d78099351e4d7a138331ea813e957db5039a71b7f31d221b9d950bbcaa2a5688f753903e5d54d0b4d0e99f670fc7994e9b81b7ac5025503afa4579cde309fb7f6f1af7fbff4f80b6fa4f304d439c36b8ff021bf4f5010200e7f2b66ab3aeceae549e83ce6e54f00cbe49edc82f3de65836455c378b04836b7faa7c97b1b795daf8da3be90a599a91c62b7a71fc8eb2d67086ba57bb256da0f19c132fc5659365e86d4365078b162bce8fd2c8a303a3028a630f797825c0508fa5399331e3a2cd0de173f7984f063a2d2004354a9399859966726690078fdb0bfde872d6baf2addd6b9aea081a6012df5fe17e0996ceab2098cd186d0e82c0dd6467837e4fcd21149aff8ee9c1ed1066f7572e159aee356566c5799c06025b3a79dccdc90ffb5e7e8c034ea658d76c56c37cd1d378a590b7aeec4a711b45dd425171a6b799774a6bc051ecfa4b5a3b5dbbce6d59e77e4308bf3318cc270c889bd87ccc5969b07463b5395707ba36a7a5bd1728a5932b28fc70ddaa8b050f61c74867f7549694c4cefd69c648b5d1e5eb77c78ead185b6b982b6cd6962160ce417e74f3413e26b9ca31422efbef82a0cbd9f5002c16c9ec867fed805014674c686c1156ce111ce059a2eaf3513e1700fd5f99afa2ebdbc309abb1ae581e6e0164676c6ff379e58ac3d73412057e0a0938dd54fc09103a02dd50f1c6b41632dcd3c470a0fb39104ee98ec63f55cf90007d1f77fa3df22e339104b6d1601856ab3ad1caea2aaa06a17ee5078636018d79d481d0bcfa483d7319bae2490317958d81e3f80720a359205503077316bd6033c71a3d1124ccab34bf35ab0a2d04d0ceccd47bcf0f349263e1d2056986bb97125c38856f3fb0fa5800f77d88362d7082603c826e7af395dfc59e25d0ee7eec56772c72ef878e1431eb0445092f0b2045c55b072acbae288b4188f44c8250d010b48a92c1843b01324328060a9209bdb86c4e75417514ec2c7886785ad910483ee9838268fc1e29b206e042969e26ac12acfd386312c8c493a90c79c3690a6995fc0c08e42d188720eea4aded6e11e2efde678d3a3e0a6e4758c0db6fea28ce944c8b6ff96af4ff0853035496d325908a9466714a485b406e8cce66e6553aa362efe9cc700918b81d6dc0a44af340220133eed740a500c827e558c552eebc742f9a7678bf73407c22275f3b718a1b0eee94f50f22154d890f3061f0b947ce1a7c29fd5e4fcda63a9399d45bb11aa81dcfea113ff93068438fb9809ef7f9e2095c7b62bc45d819c6cf48284e8290e002ff6e87efb7a0db8510552afee19c3e1558cc4cab45ba54188aeab219cdf85d1c52d6c4eeb89aa3c08760b542d0c6764d259e3a6c8f36632db685ea17da6f712c290722692fd9cf8d962f8afac5deb89ddbbdf8d9a9a8169e0898387bb2a2a52cb7fb98ec5d8c76ae2c6705a84bad1e618e951050efd1ecde76ca98b97fa5860f599c146b68a52e8efbe97690edeca94d93acd75294503360c3b9045a16aec81f1d66ef260d9d72b09861c746dc96a1542445edddb3e16db3ed478485c07b9f0b8a9229aec2024aeea2e6e08966c2a7ad5cf00472ed9689bcd0ba1e783a6a2e130233a9cbd6ba79e48a35a904f7bdfc7b955f82488daea89181f1bca1f95d661cf89e146263ffcbb3797ac5888ec97a69048960f4da7273ef55463cf4e11e2f2aca59aa16548c6eecade74ac4ab4db54159fe48d0d8e3be6313de3d4b286701155d606d88014efd6fe8efce033d9e6b10fd6d021e8ad16f937cce55bcf838070d9e242ee07788363288419a760e3fb9ad264ba27ee489ac1c720bd2f5be87d011d271ba35b40916c5e0efa5dbb9b1c5aee31428de2a950bb569c268b81f772f0b3dd51202a0c784e834e2f25bf4381a4429ca30c495a14a75164c98b052c34929468e81cb2f6f819be8aa381f8fd0cb324860f7ea4e0301266874e6bccde38e263e9c6058e6ebd768a617838720a7dc9c1d77879abf105218e336ae4084caa70fc0653df4b94eb2acdcfe694c2770fb6e84c3116b41f0d47ce555b64d5246f618e52417cdb136079b5f3faf64ef7f456e30468c149865e6bf3e1b4b0f1f017321c9c77a133ce35a45625eae35818dc64748e706a43d3cb7e296db5fde531ed71e632450d281fbb5f017bce25b3add4250eb2845b6f1dc1786a30a6561368fed0843850a1dad1df10ea63ac479a694ef87c4c4e1fdc162f9895736196a890558112f111a0c3ddf5fe618974d052a6713c5abde249ece4d66d973b9a1a7095fe32c1b98e6566de28a6198451f03ba350bf1bb97fd62645eec2d7765bb5b8ee3b920e5f9ced5b71ddd31d2b509e8368001cf039591b5389d60e363bc279bb3c2d61edbac1df669eafc52eac3b8f72a46452e4138d1165f516f743649a5f2c6fdcf07b749c468914e261f7e9d49215f85853ccd436ffb94ff5ecbeba663d7808ece0fa96661abda5d2fcef7abedfb532a69e4f276088bd4692e88cc9a72bdd53e50071d6a34698d5b80268d94df85a937a420e86b98906bc2abd4e43271312ba8a01eb546f90df302f788051b1732be1b234d931af116d9c09d0d4f3b81c5caad130dfc142afc58ffb2a6052f248fa56ab06c20d4ac3970938f6a0f441563f65fb009cb97a2d092fa0e26ea5a3c3a6985648245f78514b66445e5e3da4febe262b4190636fc8be1292ed60b23194a847c83bfb2d125a9bc5dd1fde49657ee115bfa08d900201db6ed3a1df17b76fa013f16f794c4c90792da643baa997c2d81ddeb034dd0aa465ef13536f466d97baa2fc19406f54a4da3e787bb9ba7b081e7b6532a06179bd7154f69c6d7f2b11c0086546f4d2c5dc9529864428e9e6d8648fb6d00b6ed577e1e20c081ad79c8aef22119ed0b704c3e3d076be264a27207805e700a99dfb31546f6e6cdc80dbfbdd16555b5d4584493cc3b72cf32f5aea4936d570d69a28c4ee3ca365aa2152b9ed4b9dd7bab761fb190151ca7c7a1d131d5f12a0b6f27d7f026e7d28b8a5bc4df615ac4ac5d8572dd739f91afae802ccaba0aed095cf7d6d0f047308b07435b2f007cbe8d6c1e06fb422fd6a9b00081b60ea56e121b67d7efd9d78879a467455938eb30a0e2b86e2438147616a88bd960f19606015b0dc13ef4e8d1d3784c0d372a785f9a331602912a7220b5beeadcb2aa4024226dd6fa46e0cb20efba6a146c1da087524a2aef848c5b6c3d550e0596ec8bfc0ec87519d097eaaf1c1f4225903bcaf2ae17174f0cef38849ae77ca617476334110debfc31a8e6778256c4a5403f60009165bece7379fd10a74ea7002c0567b614c70995ad2f8f8f5afe83159b120ab48ba2201fd4958cb939b0376df14c7ea20e1fdad4166601d1535139e6230516332b20ad0e0e66f23a861e0dfcf8cca71119d93108c4baca7818af80b78f54ce96d5cae6b2222f7ed359fb052823efeda012f53294dcb79420470c3c770e1c7152630a3a5cd280e5ebd936b3484be119361b386e46f94b0b13acc7025e7fdb03151796681072653616fe95f58257ded5872ff32f513a56ee38b0cc7ab143a0fc0f41b43b499a3d135a0c0af88cf21881110da0875fd4c1548816952ed56d94348c965d19b545155b1eae36808b6f74fccf0f8bdad44dd6afc7a3ea653a7261a0f95291a8f06cde358d6d6448a88b970858012f27e94b2589c7c3cd83f8a6da7f43c349900ba32c57cf172854773e9893d12143030c92dbea5c5dc690784141540736581f5cbbb9404d938a78060b5e9202288f138ba4fce4c5598bc16f4f5dca533242156d6812aeaa7fb887076a4e1a5f0a74353ce66aefb0dca95fba3e2a13e2dcf553702c34689a08be836d8d1b3bed0a5c0c4eb19abe8679f42f11dd717f5e3ad0343ea12badac37d8bdbe540d49be009398fd3c55037041758fab735f7385766353460a388a2738db2a46e6b8155d0d3ebe1804a93a7401a7dbbd3fab9ddb69f7319802dc78eedc22d069b4c143381825f82849960d893430229fbeab4c2a0dd88364aff71d98c93f26b0086ae939003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000023118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000230d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000230a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000230b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000002329a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000023141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000002325e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000002312978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000232daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000023189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000231159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000002305ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000002305c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000002314d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000002303db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000232ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000231213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000231ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000002314fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000232b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000023305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000023280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000023223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000002317a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000002308858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000232618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000230f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000230e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000023172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000230b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000002305bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000023137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000232e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000232297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000232608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000002318373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000230422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000023204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000230afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000231998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000002328d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000231da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000002321d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000230ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000230e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000023107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000232f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000002309726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000002324f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000002303c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000231fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000023205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000002325110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000023283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000002321cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000023094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000230c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000231f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000232421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000231fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000231bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000023304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000023000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000273f60b8990e2a570f116abd5e097f28ffc78a02ea876b4487f3aeca56744db69e6502d6496429f283acd85a34f07f056c4dac2377401df9ca5118e4accd768bc321e105bb9a770b66fda4145579e91dfef6ecf3e3536c4e858201c29b03989c00d30d7c902ea9bd0cba2ea8c3a1727a4e8970e99a010e967f501ebe24f73073f02e692926b9ca47808355b0c7d97e653e700bea564077d1c5761592cfdf270c7bf6adc7ccbf11027ad4ccea4fbd550f1cf002b768e71d3d7f4800870f106791269a7ef6abf99a8d96e8c0055a7a6d3b0164cd068af0312451245f451e8a7c6e2358485e26f74612862e06d600c1ca911509dae9c7eba5a8ed1b2c440991dd9af4d4ea0b2ce363bdfdc72a66d2afb1d72ed2d6672c44d7071aed5c19544ee9e602f023170425c6ea46255840189efbebf7857bed5b77368cf1e6ca774d5323063f67b1c77dcd1e31f51e467a29acb8e37ab16d3adbd91442200602fef6339c2415049a8989858f9dfcd37f01fe10b92aaecdb8bdc5ece0c577dceab4a696fb3aaeb586e32150a33855466e11b84de0905d18688e5e056b1ae007d44948059d98b0ae9782b180463ef61c006b605a0877164b9481bdafa39a478f0ab474e20ba000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095fafa64e26f8894739ed85d0ad99aec66b9d20e82f7233c66c0d44485f07a173c5845caf9f58b988ba3ee99051b4ba6174d721b5acfc2bbdd489bd1b6cebb6864a0bc98a8f07cc17da84b6f60f3621caefe251ac3ed52826c7a0ac110be7836b10d6231576f39aa7c0ea0cdbd96aaea604f2f3797b1463e6f84b66163d56b91d479b6a0578e3b4192461bf0f27678d8d016297a65d768d40cd58db47698d59a623cc5a00cfec70e9f5119e1a3a9f6a559afe3f163e080208dd3060ce685c47d6b02672a5ec6b9021da460a2954d3e6094470234b8fca68baa166cbfa9fc673a067190e2121dab97c95cf1c308b6fd8e96c1db0ae7689a7f1d2a66e50f2ce79a6d9fa5873ab319fb39175fa5ac65464ae5c9b5e1c40e8aece8eecd8e9da34652b15ed0f6dbf78deaf910673689ded7e28671cfa11660073348133c064b99b59e22dff26c64809d3d68c9883dde78d433e780fc610e4411bb5f27c08af56cdfbd491bc393fec2b46c71f386bccd88b6d1611b768134ed9a3bcf61b2fe160027f11f64209bab705e2aec9ab69f769354ac79c638fc3d5016e8165ed5f1f087726a6dd1fd9def771a77388ef8e642e1f4f73c265bea10a0b8de5250ad0575742a56000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016e6485e06cf3df3bb464bd9998939d06e9dd2fa7e2bc4d9da69c5fd336c22d203dcc0f06557c15f50289422de21a40c32b3b828dff805619eb2d2968bc638961754bd59301c325a31c6a1ed75896c703405f2d06e583ff381d2aec29cfe1bca5167febb2fbbf9b511d9cfd1f97d9993c413b34782d2565e062d6b869cad03d41149e96ed821c847ac861c00a48a7a6ad47ea22cc97855562792fdd0cd92ef71b5920f0194c2e55ef492640dccbc7f8859387b614add5136356422b0881bb5e0d687566a9ad84b454c822f42a828ca677f0ee8d316318ed77f0922626f57482021b48c41cf2f026153c80421996f78dd17488566c8c7989f3d43a06a5870072ee2a3804c5d45062dca3e21f575b9f15728a67498ad215129fb42c23c11afaa6cfa85bc6287799a9524169da6e3360689f42bfebaff35efd71dd06d2374666a73e93618582b0eb6992dfe51e057097f88ba2cab107b459ca8da168189789c36c5a97db8f122086dfff442f193cfad392698c7f877a9a26a19e304fa269d63041fbb692b666ca2adb2eef5cec9f7570c49a099fc98b2079fdfb9bd3c004c1f5427667eb6e441e6f7014700fe99606a6185eba8188effab94db0b1e267013f1e9a600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f12d24a1bc5a4b02bb7b5d2426c6519a54f0e00724a98975ea72a8c5868a954a0aeab3524c2814095ceb4e3e2d57d118458f052f285dd441ff3124c038e82cfe437e92e990e88afe36e77e28c6663349e0ce7d03a7ac31785c6f20715b721cf9e5aa37b9f916d367925ce043a976eaac5027d40427c773cdb15abbbfd40304f78b85f036b8f8b6cfe2329885cef52d132b0f1f2344498f3621efd6d6812e97f437ab40a38bf9f1aa6bc8a93bd498bf50a1815fd23c5017fe46f81707fb89dccb11e6120c6e980023e9f951507f716e9bd28e23b59dab1a212dfeae66a4a0f942de29a181e796d03ed9bca5b7cc195b720c089d3aba441819b2c74c9f21edcb1d3ef2e5ca96dc6ba647d1643ead99d07ff7540ff6f5b1bc08869726638c308221d383e77a8ae4d45b42df04390b18a2c26089ad18aff425829a52c07632be395c6f6303b5177f490611e256cb74a5c81e1362b4ecdea462779a243850565fe1c3004db08593482af93354761a089f367940286f3e7e6aa9faaa6d1472f3fc42774a8ce811248964571876a80c6f51f29a3400905a31a3d29fca22ccd0dfee83371cdcad0fdb61a85100f431e712ff33c46b56fc242dfc8bd1e320fbd088381e2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089beb62a71b4aa5e0efcf8fd27e126ddccde034908a5fcf03d321b21ee8c71e129b10fa8aebdc7334a9b866bd1076119f2b174e80ecca4e70661896dcbaa86e2703b1ebc094d10e66d7d38309e12c34833e04e6b1f9611eccaae5175d6762fb5d1116d20782de5b9196508be690a726378c59c17c8475a02cefb11d1212edce92cbc67ef93ad8204ba6dd6b4bde7714e1737e1697e3d846e9517b866237458345b08480bb2f4b672bdb04e9268c90448bde169da9c14e3069282f6a77f13b27003b29d4bd8a4289f1b1860c8cf39949f6857eb2016f5d65316b08462d68b7b9245f303a7d5c2dc3ee57243c3b75dbb58ec52b073d1f837bedf67008b27dcd50f9f0975920c7a3fcb5144db75ce383514ff9e4e1287ef82d640f005e5d3fcbb2c6d031535fe96d269c1c64e864d05384e1292cbdcc0771f6f77e9ff8be4a5ee1ca76538c60ac820f94c96358406b36612de5c95070a872ea3f7f0c18268c15b56299b80355aa77eb31271c30e0f4563f995dbd13bfc8b028e348197888e7b7d4e34707d1d88a3cee096f8f5606a19add89bb72584aaf5c3fde4381e2725ba2552883d7f849965d459c1670f2274311a8ea2c90aee87a522ebcad2ed4ca216e2a00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000278f0302b2feb618c0f17d68f24b387602f113d1dcccb3d5105b1a281d3f11e8ebc0efc6e25c5472e9e255beed668dd125936d89cb6796bae47197b9ecc920735125e7a5cc5e1ff0c4b830b237b760c601bb637180c8e9511e57a05c5ffc14642f81000c6c89e65c4ead93dec51046e37613e9d0deaaf6e415abf71166459ebfdd53714c3ec99f524e8d9fd4c7490200772c4904dc7189d0d6c1facdd91ae2937ac5f30d5a866809a02a77a7507d055e6dd7a839133a54ab5be753db4443c6766c6ac0fe842b2709bee2a9a7fd4b8f7ee2e97a6f7536ff18e22a833ccdc7eaf98c849099180202209df6b3f897c8ee61866cdafc8b9ff51a45ec4c64762775cccb84c6155847c3e808c8d2a912225c722e6cfba57ab04b70b3ed534348cc58bc24535182991fa3f995d9b6dc7216bb44c11dd552788612625ccf6dd1944113eb15cebafce0ea9453a96e2393e1e0a1210648ad92a086030f879c0cb6569c353e806cde1fb9d2509b899db7200ed082caf31769b63a8c9d75c7171a13900a89bd690cfd089dd83f553f003a9bf9c4cb691d04d6f131af41073af1070f042f22974df5ae8e1dd02b6ab5fad3a20f142f2c7662dc4e755d5505abc5ed7923708c5900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e17af7b9dae15f2410740573d828dda24a35462fc8a430b68df04190f278184342b64df6f42880d81228c9c92db222f806839c5cde1ec7811b5ee4485a8332660f031fa53499bf3e0deb5c33d0e4e51fc2a982e27cd2124d915ad4af6677717c2e5f653a437f3380b80816e67b4c838aa39e3095d6f70a430146b76e0949380a5020fa8d11423ab62fdb998b14560c7cbb19b7c1ff92688b6c29d93a57ff5e90313c3414cf89efb919c6ca72b2f8052391dedf443552fbafee29cf21660a1d4567477b7aa7dc489019d59cb4937a0404508b18920e60050d2c357cbea0c8834152790e4597cfd9f99b3efccf817769ec333ef1291b29b0fc5f07612418e76598a858a8b05bdd81ceecbd15ab6182ae96c8aa83cf45a48a9604cab09a642e64a2e3ac47a6b844da9b7a9b7919de3b9ba9ba80f7b1284ec276e4eaa94eadb093e28045d726772fd152b996876585b0efe8f615c82f228af7a666fecec7fcd5d9a97290ba02553317565ff40ddf05e4251edd0037856d05d94fd75abd0cd2c8202e57080b9b3f1bfd7e9d7e81038408aaa7282d2a24e2db0b33344e00186656ea175a9472a84cc45757126e79d24d8cad6604ade4bf23b7ea0efdb17fa8de147c90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000accb7b85af7f9e02354cc7f6fce545c3b3ae28b7e3936f992291da4a0be27882624da9d233670f4cd6948846fdf454d8711e142b409bc691555a80858931ad83af2b41fad053e87adb9befc3c5f2e60e943f5459822b67fc21250e2d66311f661c3e365807558ae2c60e81513ead166d1ff87ec278afb5b51ca62a19fb3f173b27d28d53ee5d48d2b03c335a21a8148bde6521f84f92eca0b953a1f8fd9f99d1231902109f92ca06b1afe2923590ee345dd34b551256cdb2272659d65516baf166d25ecb24b59c592f1409f24a0b2b465723be2e5b0af874b7f2c64a220c4418f09a8f6961c870726e91a61d56ea9bd99eb445687a193b6a7dbdf4d90a1e957d086db1233b9becce77e6d0531eb2bb2c5aeeeb0781c94d7162177ee90bcdad6873e368d94073afe9204fbbc9a3e2b1ce33347d4329661ee7aa04ab241f3a1715d53e00aaac55fc0c09392a52ac601dbd4b4c641308b4263445f81e53f40826db4ea025f9b783252526df1a4c1e4465b0ff5eb67c4e83bc8baeb391b9bb11ff0b7da684f48f604bbea3bb14f294bdc665be186347a6a6c446688c37c794159c328679dced0dee222562df10910efd52d676491c8b89286864c51472141ae77ef300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000505cb944c735428748b3540074742e8c963001445092d060a355c0b91f36698f336c2e86fc3d14cca1082fc2f1b475462ad39e46972a595ae04ff89d550b9584e83d4933ca53f77e7800241bdbe9eb77e10fbd4f802bbe4437e4eccb6e2a7caf78ad8d5f335f4a235096c40e5b68e13ac719245e9497c196217c6819aa85571a00e435869e11b9e70a677c2138ffc54445f556f3cbaee44ad23ce38524f3a3407c04dbc40b8ae64eee45ef98613d4135e53089d6cb02044017969d0a4acb23de7d1f1e461116d5c92728cd8a5ccaee79c5ec6e815927389f45d1eb545a2a56523dc9cf6664fb7f099edc9cdfe8e2cb08aec399b583e1ea65931a06a31d20abfe8cdce49be059fa0baf06d38dab182cd19f33b95c0b293d86b9e3e0f7a374b2a7742291bd0795a91ed4f06de3cce639bcc0cd1d388e837d87ead095e33f47f8903c4976404b12c6e746072393f5a814b3192b082dfe02474aa4b59b4d4f03371801ef5e4a1ed80e70a6fb848c9365d4c2982fd297f9ea6af0d8f6c48eb3230323072884a651366e74c5a6c33b614fb88e5ea80b7c6f8036c88e9e4ab9d843ebef5e084d5d43579cfd8cb0243ba0b2fba4cf47bd627eb07f70f38bbe67580b2fb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002001be0c805dda17bbfe797b6995244c9052fb325ec326e6ed07e531396eee99108f808b25d3cc68e0c6f4928904899d313f5a7541443b823e0334092578d77d3e8de6dfde09bd8024ad04c7ae8ea7733def5b5b475b1a36aed3fd1e649c7acc02cd9d7eb415e7efb94f05cee6e3a6149ba2ac9e01174c4dcd27aeaf62e544087c23a5c9b839a4242cb3fceed992673404c99b0ad1592df68acb60f2e47c2b6a6f48974f9468e38572adfda98bfafd82d3ea22e045dbc62718135ef2c387499c181dc005376ff53b3226a8e446924854bd725aac199ffbbbc1fb70f1bef15915c72dd71fb9350e5ce79c473308cd4de582866c851bf08fb5f7ae5560e4ac103a5dba7e6292faad4774bb444d2dddee03d959f98f64c4d2a0bd18ceb4d050237a258dfe30cc30ad8a13cc4bc69f26795508647ede6a895564773acece13c3bd9c4801c411086aa07dea11cfffc481245eab48b86ff2c9187e084486396004d6669a6245b8a09c129292923234f78039948db78de211f6606d4e76728645330725423a0e275ccaee846c30adc3cbdc4773ebc27d87e301751d4e4f8e19d1248fa68aa00a9f8cc5668f73c9941ee6fe48168f10da15514c01ff3ce3df8e6261284400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a169280f35534d6a871df710d829af2cfb899959fd94cec2e27d62ada9617e38631a008b2d72a38c5afedeb68945cb3fa1e181984ee884c1aa18a20acf47543fe87ab6084cc7baf5bda9da669a078801dccc71e230b2f635efab813b29649fb584533040ddb2975570c73ec399aec9cdb493bf167534dd3b66c1e7a2bc5255cec022885ae7c6c2f8f604680053fef304a4673e5b8bfacd0664fa026505a5f57a3d9875927b63d6ceac5613f02d72d82f5971ea110df9b6d284445ca2df0ec9a215563cf89b909de8e70cb1fb32ef5dfaf503667e56a6cea1e160a222a106f3984d2d0033ae89c8c21014ca603174bd4b4b85bb39554f671a6152db1a6839e1caf8925cd4d6487d58bdaef90347ef8476bc09812e3c5aff8338714631a8918057e0fd0f23b0c5fbcf213c2b195e7ec3fc040b5674334f25db7ed769224f9cc6c85741b5766f27b1478ebf48cdf2ddce25e9a8be88ef5cd6b0cca102b38e9f93f31e0785159f1e4156d1c1f74f45315d8386282c03cdc37b2955b4ebb2c263c93a668a0a978fe7bd12d5503ae8b944e1e2c629cffc3b7c797ed6b188e5ad28003808828b03c9ac4562941974c226210b1f7964bdfc4aab7864b8b3133e3d712220000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad408d2c554933c98f4433b1f91f4881be3c961daf80d99b4df643092ef7aca28907b7f6086fc6a6e1acebac229fa9b38ba6480b6f1ff5f24bafb30476a19d1dab06407b03b94a4a71cae395539b5c5a264a7985ea05de76fd24dab01d8fe571a18ec815307dd2b4766ca2df814a9ea7fcc940217b87465fbd0ac1fb57ee9e005e9b482b9a449211e89da4536a4e0d34f12ee4c9ca22813bbe1658e25f29f78627c88d765755ef370f93b975725d548e6e00511283e6d3e744d5c92b7aa740b834552adf4804605256be1bdbd80d8fa7ee0085b64c54283829dd224faddaa06c317cc4a2a098c476b26504e4546c041934dee5d1fc62c42e73a7cdb4f1fec5b987777a5e2bc70394ebf93856fdf4156209c92da3d613369cce4234a17d3e761b6f633240c281f36bfdca3659388531aeec466baa2072d509d157a709980bcb0cb662abdd488b376cf3335b3e49064a6bf3abd8226ccc231247826125ddad5d5daf5cf33399292aab80b0c32cbdd8295a6f210984e8edd4d355b584647deba12fa4a71ca85c4541cb2dbd4013d380b9e347c67922de8fc0e824e99b57db6b57db7ce3bfe5f4ef6ff1aaf31afcfd387c20de60f98c08575a32355421e5ef329f17000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a61020f7e80ee6506b0b10cb84b71caadc9ef5fc380ced52df2e7de67a8075b1176f531ceca77d2d500ab1e06ac591febb84a2ac248818df2ea453badcf7bd05d8ffac8d9904dbcf212da6a0d134f18de3548bdab62315e8f5a4841818116ea7a5898bf95d7c4f1fd5ba19a3e7845dec45e582815ecdf15760a1c6e4f91b7eac4768c901071976e150b0081129ab1357fa8a7a78aa19f44474c116773481948168c3c12238d224d796419c5962b9836c2c3182bb0fe9427230dda36f908bd7c89ba4eb55e589c189b00bad45447275410cbf5be8d0ac62fe6a51c4e2203031ea9160a516488bdb5026bc86dc7644278344dd9fe57449a84d46b53aa9abaf16b79735829bdfcaf5f057c6251ba297101b61d3ad2a1aeafd580497278a189624efcc3b0a814c5bd5da563d51d7f540870b5845c821e9e7b3afd98a4303e334179f342e00bd836e5744b2b1a1efc142d7b192fd0018f580415fe4a9bcfa5c0ceb20d733cd99b6a8cf8481dec27ba6cbab0f1d6caf856557c2d2f5ce713752bbb7f2f807f850ce93a9a3edf13cf96ebd8ef7ae54404131c4dd3e6d5090b6bdde8d461f5593b92011d76e04fe78819c07c3f63cfe4d8438e5e9e72b43bc18d5a4450000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae5409161c42f1cdce188ef04ba5a75bc51c5008a1c4428b36990cdea1d15e1cd3fb7509e186d99dd268cc5b7f96bffaf4c0ff5782d9b9e120feef0c0f52268cba98309bbcfd85a87c4b77d13f67d9624888e7effa4a561a7b7c751f2b0cf51f65e3cda44e7d16aeec98fbd26b6c67bb44fc987750280e3c0c156c6014c7be4d3016ca7efb2d2fdb961dba4833fcc7a2c284cbe80adf693113ddeaab2e509aa3c255c8cb1edd014e1c8be41dc9e50b30db5e6bc0f59b51b9693461d6e047fe87a138222c0a6e6ab22cf23e11f662bfb04b4493806153feaf43018c5054c889802f2e54fd3129d87b490177b219572b1339f8826d0594086c774d9879b292195fc5eca6ec4df2b9f86f7a479263088ab2f03439d332064c0e9788cd39bc4e9e31b7f82ff0dd0d00c2b0cc22e8321c2d2894b0628dd351327b6f139a66d0b1d8309dbd39af2003359039c17b5b81db3e53e09ffd6820bdbce6ce57768eeed548c2ef9ae1f5b14b229e0ae24b51e423e6870d32ae1ce55f52993611559e3ced6b1bd1ac5cfdd12a121c407760ac2332019d806aad0ce4cf3094b139236a8b19c8412db42515d6b36779ff94dafa8f0830f8fd31eda778ef0e2c7e83ad10c7f5503b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1b0ff97384c725c452077d466eb3898cc616ec9f5a7da7474fe7ac9bdbe0bc84652b4c0b2da7a449736c3f1ed1e2cd7e938f8efd1a7166293d63d8256723df88313dd0f9f24aea01bef0d227462e5c28087bb69227140ae75849ad36639669450c0a4e213ff4ad6b941ceb121f96099d5c76db0deea697b08ef5a98b07d59d772ff054d1233ee9dcc066fec082a4c612d8e072e2ffdbdd66afc0fba706502527a3acaa330e643de0f2bfcb26af9ee4ad4969878d21e1a533e8a78db01980de08ac149cdb0ea1bce1aa218889820092a8e01fb86e8753bf6b1dcd06f30fff49a95a123e3b25066e50d12ac145176464b2c89cde0de6b7d3a225824f9b2edeef81885ca59adc44acbc71bf780b2cfbca17212d50b6d7c0cb8f8ee07b91b7a60a1b9f45889fcaf670441c97b86561959fdb6b3667a0483dbaf54396a1660e1ef15e1998403c33bfa35d5083fb21855b31b6e5f61aad2e0dfe21fd581130b93336d8886d95454cfae7f6084dc424712b22650873635b8f018d9d57c178ba33cb7eeeccecfa7e382a4e3b19c6d56a9a3240edad10475988f8ed253fb8acd3867ece06a839b2ec7fec22909597effeef9dac6d2d4220ff138ae5312ba01c4031abeaf000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023de3afb1ff3a67a4a30935e31faa67dc7a1330b84fb1c31191b52db59a160350e67e8c106bdf56f51edfa42f987c100a72762fc580496a3f7c187f00242465b689a227611a6dc84aae6117cf9d4259a8919c1e5ae51ef03f9ad0070b8fed2c874bdea8e631785e8b41a13653ea655aca56b2f53367fd389c966815c67fe6663c2bc3330a7523d946326cb8916c39aa63854bd030add4a3edc3618d0c5437718b46f3b672218588ee7f9cb6dbde46dbb3bd5d2e8bddb2009d4e27aa3a4e49e9ff3b2b101a3abb8a661901f80d3f7ecd529a379992eee0ec5484da70cfc431affaa799c5f9d549d5a9d65ae81e946fadf902e9fca6ea4e862c39c9213770870e491041d3adc6e23b10563e4ce9b03ce9334b536baf4c155fee4dda2ee4ea3079841a7c204de26af134aaefd98b62921f69f92908badeb0556d482b2cee0cbf97ef3c1dd8905167a6973ac861cade86f954e7c06f8de0a0821f47a3e2dd80f78d1c72aeca3fc2c4d25cf439d5977a4ff693ff5bda8d297e1476c754c09f10cc5345c915fccc32ae8fbfe95f36398c8021732f551b95b63ad56315f0ebe0adab22b6ba663dbc1e1211ad7c53ff005e4400af8af3c8d561ff9b0f8d4afdc294c809d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089b2abca824f19d4be6d6e70e07ed5e3c2d8ffb9d656bd2744c4e443c01f8fabfde2cd5f38a6a96642696cf0dfcb6e07158f23b53f454ecb1c67c18219a4feb48b89d06723bf6aa155e022826c697f23d6e475978cb832e572f111e408d34ef5f1b2b6f86f4add33ad485ffb61fb01793182c0aae6c0685e833945ff868d9db9646ed70a73695fc92d513c7f9bde9ca0a346155f54f2d1dae5936f15bede4a57a0f1f880f3dc4424da66e047787f80f49c394dd41f91e8f2ba0f8293cccaa1c8911abd323ec1f04604d10b0d86d939290d4735e663a29aa6abd63251819804df9bff6ee872ceaa5c8ef83c95b9de6bff58d476a680860351b0895612cf71939454bda5079190ef1ba089629039f1ac222f7f49d5f2f8d17869eacfc60af7763dac32bf366ab1814ec4df679b1bbad2b8d1b2c41df2b25c8aa209cee30a5d7ce283a8ef249b4671bdf5623e05e0367b1bb06ade09b02459adc5085ebaf30bc16f560c808301062f44507403fc242e3faba1a1522867d9a2c49dd06f24c1e10dfc731a072861967fa0bad79296bfc1d072f5eff120772a506ab970b6dd0926f6b873a950db0e2c694e927053247de728907f0b2f8aa0b93e0366bb6c74506ccedd000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ef1cf50d9ee304b29a1e72e064e3c4a9966c1910695e9da893f0f297a2416812ad3cf17dd76543524bb8a62419e01a2b0549511f452d7de955a23fb003afb3c848ea6c1c54c59be43d38f56d0cf292f2935c39204813e0ce9e78397783d7fdc9444f9a2c1fa5ae31d9342267c0235b167bc8e0bfb8b4d261bb90db32b5676cafa8f34eea23d887d190af6c81f1098a99fd836c0523c386283290a9032b33dcf0613b1fcab7448361df0fd234e53b13cb09135da70a67116ad31f321462578be4e6411b0783bd33e1863fb62f11719bab0619142666190be7edf5346fe472b7f097eb851cf7998e9a573613f2539d49f31ef9b646b33a09d94e41bc3db3a0e81da321e3a4bb318b4024c349e4a1155a003d207762cb231b12023ba54c7a862fff00d732464b4cf0ecab6041b1edbff95faaac680e8202216f91c0db5143c873dedb229a861b861d2cbbf8a4f920aa80055b2c4ee02b3840b1d1f07aa7eabb2f143a395b57e05f94adde970a39db64eeffa1e113ac21293372085eefa3cb796119fc756b610f71cce66049cce9eb22fbdfde1e99cacf51bd27443e72a167d3b3790ecb4520d080586170e7d490b7fab16071123385240a6f990382d248ab7f47000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091c0967d2b333431c02d556076a450bbec39a9893c0872b581da3df598ce13403d20790f9b64761fd73e4a27ede9a9d9cc46f98ea629dfac1bde3c84366d98a0e3ec344b478026ec27ef10f8d125c9677d33b9c5b164345042e31e3f455c002b0ea90ab1d3f185cb4d832ba9d88b116d076bdaabab3d852fec4242ebc8fcf74652aa2e01b2050f86425c9543662584e5322734717a83404a5ad5825ecfb50e8b51ddae3be90b8726325445d0c8e4de39a9222a604df2255c8f9401f00ac69157b6a593dea8f94496e273b891e2b3c13af0511038a82db193c245a9598108c319d1223791ccc74e97b4d6c27b1964bc934009461c3a49a56459b11a0fe8cf83654723c8a6977772c8bd588852aa9bc5d68bf82fe6b671279866d48dc47bf93d7463c37a51bbc4941bdd17bd2919f0d45495cc9ed4a4424aee9dae0e5fe61c1ca348c9fab73e59254e8f4fd9785480c48123e9207702b8bb1b41042b62232224949cfd52168ec4528ec0f3f80fcf3bbb26aef3fbae074d09df1792294a73170beecee228a1b9534e4b060296910b9730488890cf82777e368739efa148886a4db2e00a6fc0874f91d054a05b192e4d4c7ea2e9a9f4a0ab60e2dabcd78e187a3e450000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0344f9384fb11415de214a3d880a888503a1f07138c0ca211e6a6b249d81bbfadd9e38df0cdaa6381c27b6d5ee5dd23fb1d24cde2e2d0b6acfc3cc5dc41c41b5fed9e523b955448b53ff38cab0db8808b5535506d5dce5fcee516e9d2f1e3f82f0fdaaf5a32b7dc2122342ab2da60c3444e07d01ee0a42c597d072bbd23e815e2f3e00a83adbe9b7fc74fc2f0eb9f6cfe7952509f779888bb334ef751e8192e27a6d9f449987d1abe0a0a0eb953718170c346fac9b7543d9355640f7ad7e0fd00dbc602e935bbe9e40b5a5ce017430cde535042269faca393c637db26f878cb568d1f1e9df37c502d441ffee8cdc7e1f3d7369895da34b6a85b36cc901512771cd52009ffea2c440d6699412c5b09796af481d86c436be62e961a13133499ba621896aaa74cb81e7d4cf0178c263524fd75809307660aeced35f39e688aa1a69274227e49d6d2774d346fcc20b3769cb3c894b97a34ecf40cf97e41da008504ccb50baadc39ca38c30b5d7d555bd9b93a0613ab2f9930b68e92c9f308d59e3461ae7ffbc0804f573969a6ee66adf19e93debf3d5af40d30a7084fc64db9e5da63f82a9c265f8ac9b0b39a2bc8f4057acb6bdfe4b394b318b557c54296a3bd220000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a340dddf21c112c404abfe3b3eb7f8c943182cfc12675cc183e28f3f14989e42a3de8d1670fcb59dce9ae781dc8d4f27d2795b88d0c0a2a1dea59c79e2c55003be59e8263f8b65e5d989ead50f473ee5f7ebf0bf37fc1f63309c10628356f0e5b7c82ad0c51e84b1270da2cf56460ea7d6ea67a3500179ad7c2d86681f9c93ca9e9b055c14118a236f00a2c2dcf5e966b552a70e7bebe48a51b66fc0eb1a049c39ede2df98eb148133389deaaf1076e2d4b5a34a6a06868378f7ae507909980d495dd6b1ee0a23720846eae03ae34902b728634cabb64d7c6998cb9c665daa1c34d6c28c3d91101d351543475475d66273b1a7b318f89c00a88b92c1bed209e74cabc23693b5ad72e6de936ec5ba2474ec7d3811188c7ec014d649072b4d48719417caf1d8846e458adde96653b0e82ad845832008305f0705a4f1a15d8cda45bc47f6a735c5eaa510a5006f061c58c756562032fb11b7f537b2febbb52d5284f38958d8e90f38de472873809fc88902491f74944deca016b448e3b52f149568f1962a57a12c502b7e45519fecd97a8a975be73e5c931204fd9e35342395738e10a4bcc426824716f3624d40586da993249a9e89142e99998d1796ca13db948a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086fa84fc65bee6c1b114fdfd0c36471e69853bd912e403eae8c1475f2a82ee84082dadad00efd7bc4d2e7c6f21763036456f2e5c1da6780e8e3a2cc23a16d0c038509ba6b3cc53fd1e937544014ac1b88d5c3bd4f5cbb68fc469ba49215ad628a1c6a606c4fd0a2b8b19670ebcf1183e51b104e165d3c6f89cdae63ca67170e584d09bf98ddca3be542d5373246ff4b1219c57c788615a65b3e5d57e7d1ac32f29c3f0a8b2b22936687087fc3a79b7b5fac8a2eb8f93786bb2e7537dd39654bf2c855b09d576248785f94867871f16d8df341288ac97a2d223b4e90a65754ba366ee61ce21378f3da95c18534fc3cfd0d8d8cf42ebf68e42852098808bc5b3f8aaec889dbe09e1171e9fa4ddc0b06f7f522d330c17748109e51c346c3703aac081b518cb7728ae30f5d5164effef88fbcfeee81eada3149b2effa586d7b6b754414e307da1a8ddff05a2768992527a6565097f1fff373adb1111c6a714c9950a5427253c1acbe42d1d36f7a304069ecafc851bc65fd447d4c602aacfff1f098cdc7b5df1b0152db86fdca0aa6eb840d0f97c6a625f24fb5915bf4a18e79370e76093d9e7ab310bee15dcbd4fd69bc962709f0127963edf67518ffe390616793000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080099bd6a6ea0b6673246206d77094658f4e85d5cf9d7ab7c44013d04a01b4fe585b5359ae2a5a0b2f906cc6617a847c1a107fc59974bcd8395be56307ab3492072919db5454f43e182018975483f1e264d867e56ec51710f2f01f50b2aadbd03b5c895b8853d004611d103209c6e122b2901c18df6af954b7534a9c61988e850e01c6a88913638063c9f28660a54cea10f3f1ecdccf77541736525a8d27cf155fdf1c157dcc9dc891baf2e2a20a320d885feb5c89b76a24f1641ca21897e9da10c711885369159a4b46d2c9dca50036362ed50ca026dce4fd518b5001a09f0d6bd33a26daeee3dcbb1426a89839e16dc67e0ee2b3169db86868e3c3e19a7706e6666c19fe30772cf22c3525b9eaa8702c87df5b68a4cd100cc0057d815f731fb6aa56962f398ebdd406ffd7909b6122cf7cc11032e2499a5af997f7d4e93a369ad815af312927ac237bff6f74d378f2b0dc7f585a72880248ae5a855eb784ca95a97f2787b5ad9a4b994f84c339da416c97ef1e57d9e7cec6894ab883926e826c2b14ed1a10a219fb6f610c125af81b9633a230cb757457be774a014d0279b4df77e725710a39e4a93b1d896e6cd3f9dd832b98dc29b27ee033ad9a1740861100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008dcd9a40aada76a29e10056d48dffaa8cf9300c498f2a9cb013e3973b83461a279051480301358cca2bf8b2aab618a4727c0b528ae4d9fe0784309dbf55d9568b42dd3e9785ce3a622ffd81e4f4f03926734d0a3506402bbb3a2c5283d9cd9c80a661852bea0453c425961ca927f3e9f00bac55f54aa49a24b7d5ec91b00b5fad9051068b73773ee8aad6bc99633daf7faf5f488d718952b18f66e2f85ee8f8b17df3129fe20002eee7ad66ffefa9b0b0de36e6b4eb9ba2de9affae5ac68ee6fa9d2ab869eaad51d319363271cdfb92d385b62be6a7e458d04d0c231dcc4b1db70292cd934eb092dfe6607499334bc33018968266215e60bf9f0ad1a4c46088428628d9b5e1f81f07d5d33cbab88bbc6e0bb53035379a4943ca417a9f227780d0afb354403ad9fc9f38b85fa97c7acbab1f68ce22230c2cbe95d1ac0112d05a1b48fbd3d9c36f505d0151e462f8b8beb465ad3102622830024791fed7229feae5de30e41029d5d8006a6760c5fe5e462f319fd45216e67b4edaa7dd2a5f6c9cf0e8212ab65c88afe13fae08cc13a9e00fb69165efad88e1945bdb6ee47f71bbbc4bbaa62d917d6203e5c44f663f7ff02536d3e110803af63d460755c1f2a78cb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ae48c29cfa63d6acbeb5137c54b8b5fd4004c7050d6705c176adc76c96f1b36ac328435981472de3546fcb5df1b06bd36d84bf4ea4d8c60abd328782e4f959de2e595256c8669569ac5d86fac738a1ad608fed6b1b89dd60369a01b9d18004dcf3441689d24e49aca17283ca6936f6c35054428afbca7e28b32aeef40cd6f50d3e8e29ee83c154057ed38d0f248651bf74577167e4e08cc5957a7acbfb9cb13bc5f398b91907aa07997de81fd34837f456a9756605e1d93044b38ef102f82e2168cafaac07919969634e066ec4585a02673247655897bde24599de6da884de6c8012c1fdaba536b73062f5a0a5595cc19759d5721e223094e6e487e2fd99232622ca66b44277d77f38d1d8abdafb2536bb4e482fc437b158e959cc3d5729b0edb717ab8b3e0860e859219f1bc3cc406a24e43411b4a5fdedf5fb33259995d050f6a0d8da39aa30b31b208e446ec08f913910d4db914c7f4e808f2c36178988fdd8b43a835bdc1131d0b4607aa0b6aa42d27d5ce51335b72dfae962b24a8f81b7309e4400b9a194bc50c7f98366f3f7a5bdf5a1990e549c000cf784470ce68daa08b6ac2d6b3d7f63c615cc4fb1393a38c7fb50c6c509861c4baedfd4c48498f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d68d3895e36f8b5371731690441a79323a6d632ff999758cd00f29caa3c040534f0b3396d4e38bc5630a4f775f0b19894ee79afaccc33b60a841c26810ca42ed3b6d659499016eba7240f37cfcebaf60725ec90132eec9575b303d21c89bdc12b61d02f17a030cc813a727c6c6bba4e737233a01b36d4da91ac94456750b41e3eaa0289d826375283db1a78abd3cb9644f877c1bd962b75aceb177d38524fbe627d7813ccead2171ad42faa346162711c733cb0cf8dd895ff1b0de62d3412ea67ae9cf5430b085639bfcca2a44cee614243d05c3548695ac9c2a6475f168e47bd833d866649c0ac9894ef5c9bc0a8712120b30e55a26ef420c80c2a6e99ba3a342fff844f0ce8d3f38bd99f1e96330a247129a08b94a1ef1b198c38d9a289e430d85e8adba42c3e380bdf1425b177464a75ae3eac3bdc553cff82911e4c94c0ea6d793478724a95440b331e8470fcbe4d8a04d869c40fa55cd82cbc741850d702a9397f3ad5bd388e2f41bb4e5bef0c9d0e9006288f8830a3154800f3e5b6d2ac1091202905b97dce7576fc3775639c9df126d7da9bd9ba8c2623a23cea49276a8ebf5aa3b2e3e15c9741b95d3b7865ae7777575f1197e83bfce83e7945fcdf000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005fdb7f6d451d11c5641f0ae4359bd08b498ef822a59ada760c6a9f644fe4ffa5aaceea975f485ab18244150fe4567a9b499ed940713400aa891fef143023739a7a3402a156eca3bf32f5e987e7b77350b61c9af48637705f12310878a03ebace0acde436362c95f945bac9de580377188b9cfd242434153c248dde93b9be935fd5a84e97999b10f453088ce48fa9ca02e96dc03876f10bdec508e9a95bf2e396dbd2300c513a6e1b4b716484fa06a6eb36d6645aaef011c73b33c7bcb33f9b37be6603c47f192ee0adc74c834abcef5744b07fd34011ba7c1c821b303bf8e8422cf39be7a4126356e154939919b98ed04956b7bb7e411f6c360130196d22ab20a774f17a855fef11d9298d22cf9c0aa78415515f9fed0a418ea63882937b8dc6fa954ef634b7a18f130bbecff1d3e2d38aa532e3a2353154e86abb71c8db89ab49312df4df38ea7d33f5fffd0e4c23a7beac1ac43ad00f4547e90d825d3bc48b3a39e75736e333f443945e629ddcc3ee17619cbe4ed067d307825c4a16f573eafdc771ae43a83692b0cb71d1271426c4ea242acc8a1dc9e7a930d3fcb7e29950b0b61cff0415a5020c93b1a562b5ebaad727175e307dedbf3dcfe545121a4eb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027b726f82d3679187699a7d8e8a865eb78e07de024983ac311962daf91ec436756bcc093cc310be2056e084a39b667b2dfe96b109d0c6f65f97681b975724f54f91abd04e8ae6f87db703bc81f976a91ffaadc2182f3aa72b4a6886054ef10c7361359a6777f00543b358cca1cdb82ecd15636d80518f9a4fc2cbf59e01e4be2ccc01f77eb3915b3d58f2150c4370e6648bff2649396499925641415d64a6a5839e2228652b711c35f77bf1fa16b65ddefe829dceb7a0d8e52bde969ddbb7fec801d1139f75d835a15c96c4418bb43f8e9bd1f54fe0bffcf16f47dd91c9011608ef1c86eabf8c04ec12669d04c67a147f6743370a810aa4a7e12b12640800031840747f90f438a106613956cb9a93d421cb59bf94c588550e00cad4076a10bb81311ed5ec4fd8b267116ba4b6926e2d348429355fac29a9f20136bb4253eb2f7e0651ad355c88b890e957c49d6e4c44aeed0b22289cb8ebb5fb96abfcbe50d3424d48ae1ae7688cdea92cdfd1dde607d89d3f3f60f804b29d8e70005941d87ee0d8d4e0b97a395646f76768b4711c3c9465fb3bf73fd09e75227c22aa4f6ee90b50a076c9ef9d91f43a44ede36a87439a611f7341a7c33628ac88c554e68969b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002926f2f8b80530a29a72019170324df7aa76715340d40374d6d7a8b7bbf7c7ac2835f313111605d75c9f1c72b996156ff6d63553c20fb46b214c792b8567d8ecfeec439f4b6da8a32ccfef5784e655432ba9f15ff06482be9c600f9ba252a9a22b95e19980e27ab3d7dbb326827952bc835f4abb258f6baf293b03bbbd7148f988bdf044f08ec1c9c8b4772a7c28ea04293592b6aed8dfd4dfddaacef481479baf6a57d00c140359a9daa229340b8c358f9d1097ef7195eab977379b932077e9a3eafb7a329b66e246562a66483feca648fe5c8f427e889a631699cc2890d7f09b10faeafec3f91786c9037a3a21a4912eeaf5f49d5ee018182007bda731f289aca263158e3fc07916101c9a40675bee03d8b635ded1da04be2e4e2353bac58c2ca9b637387e8bfbb934563587803ad3200e61dd48d63a6dd8eac4c1c4ffd75381ff67d240536310f1e64cacee7de4cbdcb20d8e491da0f8cbae522942323633279c5d98480f55ee240e92cbf7e90e1293f7883dd733df46ec8c721aa262016cd7657c8c6d8927f10a82a23278d8c1fe40a7b6ede61c5c5c86a698aece03dfd9fd2fb5250406eb28bb191fd74f2601936571935cd95c1ab1cc92c4cc88e9cd20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a93930d65d22a000c11d45c7fd8ee8b146dd6610ce97a8e073b328792fab636b00bd5875bf43fa99e84b77a5228a36a7ce2d65c8432b91cdc21428765749ac3a6d2c119477002644995147649008864b042cb5e896dee684915a0bdc1747048c1dcef68595172f97734a695904cb32361b7ac5a9555d7b89d51119d3541d702cafc10f11f613838df229f989beb4aaf282938c25f4b0ed0b738a23aa79cca53c72ffdcef60e3a9543c5d4d32dc66e8885fcd1a13744d5e8e700606b9ecb9ffb752173c643839b7e6137552ea57ffa9f8dd91c71c2b7e963a1ee555c9eda9177a6dc06c60fa3799e74f539cd0829a7e2702f72835dabc3750d6b0681ffbe57b699e0414590904c19d7479aa62b35d5708a9f2b6c6744e39dbf3a379f6f9e6f2dc46431b56e3169b04660cb2dbe4bf0435bb3957c784754f92b3a38c7b6b34adba75c805118ed63a125b47b6cc2f4b45261c7f60703220226a9ce0d0d40fa182ba3cf62b8a5e720eeb44cc6aedc2b0cedd814da488b7ee3d5223edc0904ce1c161dbe28c504a3ec53825ac221ac0c6cfe3fef2a29ee3ac88e751f9d315cbdcf37b69f7949f94df87d93558fad44172d3bdcd8b2d2d7c6602deb1f45d16a735e31e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ce21867857742775ee8b8a32d6ac942ec2175547b0c5e369195bfc9093bbc863c5779489b1962f4bd67805731fdd189071e8d045134d8ff927f8a570f67aa6db47c6439120925ca3c1f96f298de243f7cf92b197b0639bc96411afcd6e39d4c20c8a8c12ff41e93f2d02ca0caa7d6d46b39194640051051343156805cae9213a585c66c17ccf6fbaaa9b16543eef341d8b0c5a7797992d62251cb47b964f90f3323a5f64539910a91648ca1a800a59bc84e910fb2ee54826eec95485f9d1a3253dfc3c38ec1711aded3ceb7e76b2fef88c3efd3ce22f3e7fac2b772e7415d92c7b17a710c7213befe872d3a36bfa0a303cfc57bc4252ea1b9b9b1c7aa6fbd90c491712b9d3a1c1391e80137c500630715f9c17ea42a7a4e812cb67a3660e7ccd4ce588c8b60deb4bc3241319fb00029f18ff266e124afb37edd05225efc1c1f6ee848821ed2340df088abc5e44ef1fb0ff041bab779bd814672951fd53df60c9afdfcdc3dd2f2a64ed8a1abd79d34cf8544a5c27c1f81ef50188227a17589d321fc8aa3214ca88b96b72f84e314ac6ad9b67db067f34ff5cbb8861b552b173f326bbdb3797517a57b43726f2b555c09cb2376bf70554216c61172763e84190900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002570afa26cc57cefb665ace0a528052240b488e02bb1b43c71d79ac614006ab1adff8895c25cc6fc6e929f2ca92ecfa726c104fac49b3a08c9a17f4f0fee6bb8e6235a52b14485226edc12c264bd0290fafa1af6565aec72558525a655880ebfbc8e39efe8de6c70279804732c9d102653862a1dc48192409a69091309fe8e86ec6eb02adcd8b2913f198b0407b78f29ebec1edbd7e75f1025df072ceb14fbcd34b8c1761df0f4b28364098f6f054094f1508e3111e7e74e66bfc85c7b1f304a544af6aab235c2849b5c50ffa3ce0fa1a6609458dc992a5efe5e3d0355cd120e3d5a6255ebeac7706f9807371c9fb90f8c985675de7adb93d0bc24d645e3d3b61e7bccfad3031b97fa305d73fa0ed7ed778a01fe00e5be577d6acdaf5426ba3d9562e3d44e2f266955bcd7be427463038e64034a7ed27f9fac4faa233fb268bb784404b961a4f4b4d30675c20eb41b77771acfc9bda9218a48e61b09ae023d9183b9903d81092c10accf7fe074c304e5038dd33809393c0b919874dd9cc5db8e9c6bf11e2e59fa17133655efd036925e17ed0a9037622befc630423818ebef908b639e49106d1c78d19a826f475734b74526d00d2ff77344ba2744b99aa22cd300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009081b9f5e1a1ccb2998a727969a05bdf5b8ce5a09bb9699fb221f27a2de51f7a8b3ef73c5a4d556951dc11f92587df44141521041eb37af01964a6b7441be6a480e9186231ed291be6c5a463461a15cba319eca95a1b9909ab8aa30236d2545ffd0aeb4fa04f778e5684ed3ad66247d83010225a7e6438d0bdaa311dfcc8ad9ffec073d54729e24e023ba8e4e5f1cd0afcbc7c28f1865416ddaf1f2e922b454fb746dcddd1b8d2bbea82b55bf5f8f0fe74858d11c05faed8040d7f85600e6063291e35a48d2a06acf19554f7bdeeff277662e59e25b251cf47d5cc6cb478fe16545c90044a8a1c0c68239f2d5350c93880e87f507a76d9aaa67a6cd72c485626487f833ab245b46990194d934d37e7edfc4a9ceb8d6720997e9a552d4ae3fa500c225486c5496e1e72c3f1ffb54bbdda41b3c3a82e22a617e32fee06e0107fc9cb0e1ea475e5f993888c5c307fd561b6b67b6c4f932af32771b49962570f02316708a11a8350b6098e8a629bdccf7da0edef8a89f95a6a6e4c8db9f94495dcfc1b137575be5975f629d2d9342d400f554cb48a2bbefa77dd3fe730eca80e423c19642670136c3c06906ab1ddb417a86218f46a2096be47fb9d8981e44a97a09700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ea9b277eb9f84eaf2adca2b5f463835a2f3921d4ded3bf84e078e4bc5ba25817487f92de05f86e238a43118854a127c1239bfdd8dec768336cac8b7cd1da3e98efa2da6a58e1834d3970f60127f35923a990206570e81c04a37ad27ac33b0bab685ef1306d89f0bde0d3058a04a122ce60a7c34f08b4490385282dbe1465afdf9371a87fe99e459a55244cc004a6b736c1a618f4523789e3758aa33227bd67747f4c7c53900df37754d39fbead7a26514984586c1769e11a07af004fb036c374e783240db2f3a4b8352d609ae7b032d7be0077c0a85cb4141cf731c1a161aacf530dde116a1953023aa5c446857a6df880ba1c9e2f6cee86e7d4cb3ff7ef14179134375a87d5d04407bac60c6b6a162e6ee6fff7e9a528cc221f5208bf0681d5c7f2d5e2686f89265ecd7e6b26dc78f3e708d4048836c66b3ab5c0e5a3084810b7fbffb5aa87ef9f7c84ca1e71dc97f1e42ea6dfad06c1342dcfc8bee250f9732b1245787e08d268502e9fada573d0e41dda18a720f51e62050a16a1da9f1ddfdc99435428cd874c317bc8c5d9d5453b4ab257d09a1f078918519ddd8ade71f45a9c4b5d055dc6c320d0f5ad5ecd62f992eb784bcd22375e6d888b8aa5672740000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000246b1f21f3ae7aa8a9addc32f18338638deed1b9f9953e284f06414c802bc52405fa8df594f307d9f8a628b39c256aa88f02bee287bd84c97d81c1ed06ecb873668a5dce43843136e52227b97e82a721652dda843d07d6f379ce567f27d555fca32baed07058e5b7ddca0fee30a932616f42d9ac14053c2c2141cb6ea0a7ca669182289fb9457145000b2b96641bba861251dbe66ad56ac95eca109c3a8c4d967884c024712ef9af0b17e136770812027cbfd300efbe16b4c6933faeb6ebfeb7dde21c4e1c01d9d74d9e9631e3646c8b27bd08378af2e8085df663d72a6c9c2846fda44e8de8635da8604f7304197eb730875fc6f8a3d0a01baf86f3dba27b40e5e4ecf3053ee9f0121ddeedf1d4c00287c5c7cf987c22fb5a3d641eb236f504fdc7e0a0b7a78ee5981515f583dc96cf709f4ea501e8d842cc151b6f8c1fdea53a80fdb074e68f4feb23595fc664e277518743619d6e34ccdce40b11ee686fbf3466a0cebdc1d53e06209b50aeacc728b3be12d339e0d06db437bbff4843c6a2eab15eb39e28589b9dc40b34470d871a4290ef509155d6afd4e3aefb9b9bfd3360671f6c634f1e260cc87a70a6b7c98dbd1075cfa0561785292d54ee7ce13ba5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096f3ec1ce924b022b2ca688cd53a58c0857d9ea8e650ba95039b0db0a151e0ca4bc8d64a4a1cf9f58a2a47291beda666b48f69b5fcf35742d1dc4c118567216e3f6bd5bdc83660a1821a9460dbae55a1229cd2eacc486a678d3e9f9eaddaabe86548d9e65289974d6bf87608127a72f2fd47da1a5a5b7fd78f1ef58d48c72751f7e32e75428b4389344f001a69b6b2f691e3daba327a0120945899162b31b10558a57cbd1c3e78b84dc83ff9644d0dc14a7a5c96c71ceeaee092e92be469e41587c721734edcfdbf7b3c8dbdaac5a46fcd388dc21ee4abfa978e2ad00e9abcc90d3bb3615c4c4810b0e9094bb3dc5574c6c9d52d6c9a5fb76892c5472b8db36bcdab8a81b1c9bd7eb0ca15aeee9aa751d13e483309b26bc18a5e8d5071933e77db871c09dac12af3bfc53b28964da83604b97a0c39bd3bdc7d3a315779136fc3f5ee31ab18edaa55517a7fff34ed7ab802901b6641086afba01b9f8c3608d09b976cded048564f392920d8ba51f60fbba09fab7ed89c17c950c54a5bbabf50ca70fbdc82cb2a4afbd44f1e8cb3bdeffb9fc0603ae41becdf3268ed145d64b2c75b3b0bdc2e489ea2027046a865464946198dd4d1c9393432c123545006b3ee1000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cc763a1f3e7d436bbe29a5e249e3c4c0a75b89deb19077b277f2e4c9e00a2599c6e0562519fc811bd54ab4743ddb6f93f8e3681f43d42a8096c0f2f99175f5fe6621d573816388a2d095bd6a0130155bdd8d9415beb9269f23a0734005228fe0a7e428ca7c5bdd9ce2581ede5e882a43f3a32951122dae36c9cc3b1070dfdbf0b3140a730ff58db345375d410ede58cedc293678b79d03e88be2984160163930c250c1869700f9193c75b84f73fe0ba9e30f5c3a8a087fa1fce454bfe28f64412c35133305ce94e641860442949536c385f1ba73d8bd4a61070de7edccf0f9edf4b37df2b9376f75a77908c2969fc6885a6984622342982130376d9d75ed08a3448b3a64c6bab6b8b868e09302c19d9df2af66f876077d3109e6a34e56abb071b92e1af40e5c2aac18a6d0aba9a87e192a9a69655327ec18ff25efeb92b9d99c44451b56ec5fc5603ac3fff60d840f1199247e3c80a680407e34fd8470c99fd70168f86dcc69d0879c24d1ca98ca527e205b2d95bbaf21b65b4328b341581c0b55976a6d5587c3ead66628e00b537717bb94014bb7c5bd1ae1ecc43a18460309ccd6bdaf51bfccfe1e357438a1054e58ba674ba191949b29efff4c1f4719632000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a75210d315c75b2287a67e4d39df8097d899d26f321276e2b6e664a84947c9fc332d10da04e864a43db2035bf1cdf5295d62ab0eb49ddcf4d8ba1d6d2635b94a354123016bb18049e96ddb236d5e9a5f542ad0916d5f4f7dbdef678cfa37f541a1c0706c96c944283edb3be35e60646915b2ab1764ce9cd0871a157bc05809df4fe50cc68fe7412d7c8af80a156d6df289172b3f64896b2146ad2e01bf803f45a644ef62c26539c905dbc408d76304ec39c7c6a83e235d41f315c0a1cc6c03ef9aa956429c07f76cadfe9a69fa7d3d48c12dacac93fb44cd790a1da5709231b38adba5293fd8710f98d26db85e08383423b19a7bad0d53e0057a1634ff79dc7d52e2f24ebdad951c62a0a092f67b4cb1b9fab4b8e86e5b78d330e6208754cc03e82a77e7b223d7e54f0644a564e23393f381945ac7ce9620a08531f33806d33746adad93e354ee4c0350fcd1af223db261881da76ed358671f7668b1275d667a5d811550ea624d9ff58edd9a1793c3d8e9f9cc26446adb8610c050904e40e78dbc1f4cabe5041917379a1bacda21550baa0ba43bc1dd5bc7e47fec214247ebb04520989b79e71a3aae5d8bc6894794260d7dfe1132b835b3280913c9cbd04800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c7170aee810b8137dfc29cc569db578b93e5ee82a447439ddd39249c3eb9422d705b3878fd6e0b3f67cbc929d22e211586e43588c1d07bda6c5e2ab50b09cb7fd3262a49f82407adf9b733083e3204bfed9dccd3861e7277852b74257393b291ffd6276def2b8ef6e1d12658dee57a444227511ca76fa01393a2428cd81d1622e0c5419a8c89cbb8906bdc0b116955c2fafb4959e63b09b01fcb34d48493f8ff29382d238b07f68a82fa209c0a212a4b32ff84d62a5f1228dc2d0da93ba981e11da470bc41257e743463b915191f70b87c7eeaaac7e929ce921619d8085f621604d3c79bcaaabf7d3933c79b8fb96e4bb1df46f4f95a6918b4aef3f39703b84765c3a73597065ba446ec9cb4c47d22ad5e80b725bc8ca11d60f36afc2b730227ba24817219040ceba84cee0cfe4e5610fd5a2b91cb5f872177c591223d99ce4564634065ed63330021d48969685556e3becf92e67a4a73dc8f2a54f6781544a5cf068be162981a97e53e286b0e1c551dd0f3549d69ce257d5f60c519a1f645c9db82b6c34cfaa7c5b8a9623473a2ecc442d1105ad2546824dd779f61d4e33db097fe48d76d0f46ff6daf50e565ae0bc62eab5a2409cf88f43441074b5ea384a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a833c83294a31bd81e3ba41719341b46a108b6948888aaff8f837ed0a0231c88c536444bedbfcd7497b43f86fcf0b0d57488377eecbf17bfa7ab7c6686d9ea5ded5cf0cd156792c6c3116d2e1da282658059a67ba10cea6756e5bb4cc65d867f4bf56dbf6da37cda979b4e9e39a12931edd6f378db95474f9c390713dabe8a7dfd6c535790885fd0b342adf47c46eb8a8da27689d45c054bbf8eff04cc9318a5c279d49d71e6bda5e266fabffc1ce9fd4121b9fc7c04f75d1317dc27c4b01f94036e706758bd484139870f0465fa7031d38ad5c0ddb090f47cc4813f9afc093c69509d97a088eba5eb682f63e66323b54997ead48c4ddf3ca352fbaaf3224b2e955c328f382df2096837a04bf769e89a37b8729b782cfd63732e1ed890f1d6de59f1fa3c3300bc2d1d510bd97034911704043326fa590c64012d493421aed9f605a9b449363109d191258072d930aa84d1b0994e751931c55c16828fa78e644be75a0040575018fce5d1c23ec6c01901f6d357a2b080271299ded2a05608572af3b5fc6dcec1b2af8ddc2f211480ed6875b8d35c582617e0e0650cbebdf5c2cc538a5ac4d5fd5a4305ad4ee3919d481af48856c24d31a0e27892f9811b0b0cd000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d5a09f7a1b279cad9debe8438c3528572bc8a9335c029a7e82f017736d5225df52d73a6e0e31e29f74785296b87fd2a138b5f2a89f20c3574940cfe70518fbea64a36d700c3dae7106e861a30c2dd7dfb445e801d5346aca609016169fedd5086d63d6042d9703234ce165a8dae866992bc69a5522c8330701362d7c73d1566861d23bd0c2ac37ef1a909714205584fee327ab35b82307d7305cd3d8def75f6c4ce197deab0fb177295929d692c03c15eaf82ae028ec70ceb13449ef666b42ca0aee6f2beb7cf8222bf934c6dbc3f340bcca1a0032dd4369a5a6628973d0f61a25f5e65ee5b01e0d4d3c59beea697ff7915d7b48328862092e04679daa911357e1ec36623707c49b7ce89df8f972a2ad6cea3bd898f3146ac5eee271a8004800774699958f8b28982b74db31ac7c22b6c279433ea382e6d97b2506e2c55b85ba3e8be2dd6a7a27ffcb5d2c2f862dd91d1923b82910f52010d00c71d60477ead9474a7a4ea29cb78cad9817da70566ca156c5f1abd59471abe96fab2f790351923a157ec5f95358426b03de85e4b48f6f13b2e695c28ebba625ca5142d9fa6e7404de1e9320c08ff68b9f0238933f6b21bb875f59abe92fa95d73de66efc16700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e94895d0006f58c0b2d35349be8dc97ef6c9ecffb456c5d5ebe41af6131020a1b8d38b982939d837c5dbee372d88e2632f8a4dfdcf7af5ed2cab3b14ddab2de600bd6bd2ba11b976b955df0aed13711ef625035b1fdc4b27b93bd58ec0933cd451c2c90de26a1606de2e5ad5376f606c3ce084cc096bcc4e2ac582ac8650ac5a34612ec0d9aca336e1c53aa778ce3f06bcc38d6135d90f963f28623b56af51e3c70745b8ca4d5442fe98fe3b2c1ae54c2a69b7df64f77eda8341a8c2106c11ceea2d0b7ca0f44bb82dfc70a677d2f658110934ebe03f00a8f18341b4263140dacc9fa284955669ea98e28f82560ba10567b3221de6d9075ad81317345a57217c063446b196df9de556c13888b8a523c3697f5407362f509bd94330d3a6ca1e1fce51a543e629c1479daacc446f58f206f7bedf423b9fdaef0692db0b3b860c4e15e2646a8ea38949972abbc04e7e664b1d8780360b90815ebd2daaf8c85415a69b9fad68b6b23184fa66817a005ea04c519abbb96bc39725d0aed177ceb68b2554f633b8b15df52eb04dfea80e3aa38ac70a1dc38650014ed00ccb20c8a026b774064701ded35a3da42ceb0c48ea451960b61a1b704605d51004fcec08e6b82000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098c0a6b98d6e4b9798873d73f76e782882d608d67afcf8a3237f3e85b6b2eab266209a4cfc2acf6596ffaa08f85048393939de17c351ecce3e3c7da151b25f71443279ef4869258e69c99721b322381d9a5e87cd221cf1e5b5fe0afb89a46db0e987ddf3dc7723b617c51697e016775d0c6a1333f5d13d71553d5a3384623cd69c9a06dbef0700db8cd1d6911c9a551b618bf99e4d0457e18718a28d1981161b4dfa6a9acf011a614538606a918f6c5c40e23b1ef4702635fd466461fe3572d5e9d00d5f573dee18c62dd6349f1629b754e44a122dc71722e3215403fbde7f574a500217f3ac0e378d1410b262bb4ab57afb17cc87435d00aa8a50481e2de01e68227538f5599c565852e46b8188b5b60a1782da152661989fe552f692fafa76e4249ddd81bdb3c58550288738ec260690d7282087b5c1b05f4d2e242da1390bb68538877f82b66d4c2a21682e8a75c000b204866a167bb670e7549926053c7dc86269af6d0d2cf127e3e71424f44ee152c5d98d2036947cdb40015e900fed8403da6a75611caca0df20e7732e529e3463999ec51e1d1a8b97d93f626d45c7084bfc0b535fcc6e2acc76f96743bdac6e4348eb8074a5e4af9b6c68f39f14aebc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3064be32952122f9c1291ffb200954500f9a14cf51bc69ea749407aca0f47155f49e65bd8856717d5f4a024f4c2bcb6d816250f6c25e14f611eed16f267bb1b1b13ea17a3699f06e1700d70580ad3be47b414d04c8a0d97dafd5059dccf6eeff42ba206ecffbf540ed6c2588ebb0ab0a0005031a22e47c6ac826a27af3adb3b12b870b4d3870b89aceb350fc5f544569c1fd8abaf250b7e7f74f8a795eb9de8d16e5fb4b77a8f64cc64d0722d62c1f6540fb4f5bba5423501ec3df40253c8bef59ca7011c3d64624a8b1c88ccceccda259cf1f88e1b91365bfc16c31e690cff411317cc5556409a1383da64b4c04f932d0b5e32513a895fe209500439db8a02a87f5623f626229e2c0ae8ebfbff12ecdfe8c3c5a95599255b2a0207306c3567bf570c9e7effc99319ffc3896190929f81e18714ac1cdb98525be2e349d8b45ef5567b4e75aefe9d397359b6dba18656688ff42d4dbe8a670626615c3dc1cb700040a45cb57b152324ee8b593bf2d25e2694f65adcc00bc4ecacaa38aa8bd92880510d7e3ef5f8560d00a3d00d7a301fdbfb1837d519a4af6219aa2a8135af3cb337ba467e6baa6e74f22c1d1aaa31b113304dd572868bacb21b8b27859d29f50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a91c8cf65f8c86c8a96330df9deaf58eda2a1109f7e912a9d5fd75906208c60848fb91bfc2745a32662cce32859d5b920680a9009ad87715739077f4ee2d5ef9fd13dfe0323d222dfb52ac0fd6bfe6dd6c4ce71fc10a71a4ba5d5acf920a911acb16f0be1ce14c451da1414634cb7b3a20e12476f2ceabce0026b51b648aae577ebcbe1989c359d236d38444d811a99524a6b5dd65bc22ecd204f17426c6385b2876cdd71c5498f9717ab97a730c89cd0b9d8d35746bd46f53c4b0691ddad50761f9e89b3f03baebcdfd355b78dd72886e6d712f03e549da13a90b02358ad3b2b3bc752100ddb95c6cd4c32604eaad0cb415bbebc98767889b36069457455024760cf599164a0a8e45c4f769c2b6a494167f7972a7ffa3652e282059ccbb3663cc6e22e76611d9bdffca8bd8ee1a307bd5d219052ef924197e2f79095de585c9d7ebc6b9f60714c37f409b0acdb71407a0abca7df911272796635318013e9fd8e1402b081a6268699cb8a2b817f3801afc1a739d4767aecb5a87c35bbc6be82d4c460a138df96fd9d95ad0d6084b70f0fbc98d0a3b78f15b27b7cf62d3282ac3d9325e281706f41f3ecd7b7ba9cb1ea270077e32bd5f18bec90c98991fc0e5410000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae5c07b3dc2ee750a79de1f8be69ebd80787ac51cb169849a208ebb15e53ef3ed7fdc1043a19dae793ee60e20bd3fc8734a27441b942d7498f26683e8c80fef863bcc05881e4d8dc8ff49406ad70da68429d8a4fbfd91f5d9c1e6e740f37d14fd32690df3cbd1280a48807a8a8753fb29465b714c703f7fbec5195417d73c643d2bd046c8c00a7608a196fee78b03d69510b4d5c74a935c806c3dfe125ee7f4b8542e45db170cedfded15565e11ce29d698bc11feccbe0004cf963ad32d5c7421ad8e13542e53a9da7119953cb61fc4286802eac3477e580f7c8c976259e65848f424469d303dbde570ca4b19b7df9872f260e8beda86df724c62fa0d4c9a7998d774e713212f7a98943a463a68cd1ffe7b61a33829a9aad730602e4e24e5209c6f9b8d0cfb8c7572482d5ad78f5391e41ce1e49fb94fd93186edb9b30f26bec4095349d293643310420e0197148bfd67129d5504e5bb4e8d33588b0b64752dc9043690fe8f19a8ae3158e6ee1d409cb06219b3593bb2990fe0cbb0b5d648f212a0a098b8f376f2c3742e55ae94e7b753b502b9ab1caf22204918c17ad0d08ab8423d1ac62d1bbb2fe323a2921234d47d2bb268fcf9827870a96433dd6669f0b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011a4c310801d97193ed291267db065f22efd88bbeb567778a6339d8cd4f1cd7aa98ede47ebeefb65061d770d32f4171d3506bf9569cc68e77ac2282653c6ca65d24fbe623986f2e22de0e1dd92ef65d1ba951e81db41700f0f430bd43bea84352dfd1ede00740e3068a76632dbdab6a371e246d2ea8d03fb2e25ff1db65f4e15366110c1590a5ed6b6d09e089e9b67b3ef14554eb9f88829b55186eaa52623ea04f1ad276cf12ad5aaf6f1b8202a78e7bcd634b69b4ab8bcaae5f548306bafb78211f50feb5b703fffa9bc529005d34e9f30b88a1de1d9a7033df92c10acef6d7ed581b7842861adf9437ee3a8172997b8f39b2bedef598543161366efcad982d49e1a675419436dc50817eaddcd3d8cc5d599115a740f51ba6212245debe12894e76a8c18ff8bda0ceca56f86b8f1e92763577e61a8da6e52f2e8122445bf7ccd1fe2a76b47767c4080b3fad277d2e287adbde1ae68cd46453011894b9d2694137ae10cf8f74e582244ebcd6a3779c9beada6057de31cf1d067d188f460ad12d5b39fd342082c46762af365de262ec8dc3a55ba9b6e10e14757510ef6900d4f62b44ec7ea042d7a6037b0fe2821d189538e5157398236cd606c194e348fad180000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800c52713577b5109758020e0956fcae8aa121552787b4005a58650092c2a17155afdb1bd4a0ec59acac2f5af2f016acf005d5ee2c450a3a04b60d9c47c783e21cbb459f2fa98064213bc4f3ba25fbf3f1e9258ce402780639777765c1a6b9f867c5624ec8f1bd41e34bdc5e34fd3e609864bceebf89d179dbe9bc28b91b98553e78120973c759e89e96978cac7df6bac19f035019454b3a8f52a530bfecda644ac3563ca3d6e08bcd68d1ebaf49c202fec9d602de4e5dde271799a2237709c93445928264294c2268e60f692b5b229a2decf3f1b7f40e1861ca0e9a6489fe2f4aa9ff0300dc4c9a15cc5fe522067a4f6e3ba7573d8e4fe7f3c93c6d4f106fa903474e93b0715c4c9e21c95e9016e63c948f4ed45172ba5429ae4950a11efe05e6ef00fb913e8ac58cfdc40df3bd6bfa69e53157ca9a277d67030afb2b5899798a0cbdba6305651fb20521061c869a82a79f2698dc1eff1ee88c90b2f0d193a54f05ae1df238f3696cae3f21464bcb2ad00e1a8598f6d6896e90d18318473800118935a336d7211c3aa08bfeaaa3c217986a8c5b9df48fee08eabe74830406d8d46d45cdfce256c1cefeadf66200591e71b1b866b6807d30592a2c12877a9f02000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020ef814ba3fdf3e58609023b63b11e1c8d3d15e6a3c7abe3723e2f8af7b1dc54ddb98ba3ffb01b20cb1cb86a61593b38c1af5c84383860461a435220f308e977aceae4ba885df39a7b422599b329c8889a8c6759ffdfb19ad55a5043574eb754d3bef3b4d502e92516390aa76e164a8a3b69c6113ddd86293c2a6e03bc9e7c9c29088bd9d4137f72429bbd8128b1c422732a5d61bb6146f17e3605d5fd56d717baf195c2e091f4ddc316dc4ee3d6f8d8c3e6ba30102adedc9b46d3f13bd12bee7a34eb782f4836be00c19431eb296ddf1a3ab8d0c16eeab21cbf18d3150b755086c2972e4b10fc11e6e7e452b2a3d03b5bd88910f0849623bd66b30ffca35eaec64f8ee03e5145bfb0032a2ca492e47b1160e24746296c202f2695637066a598d0a2475a4e7d172ab06f975aef6b81deaff339c56343ccf9b2146118a98f3ad9d8dfe45a02acf0bd8c92bcff9e985e2bb4692946213ebbd0dc571631c81375faf6ce9ce8a40b503607343c77747323f31caab1ae06a3da5cf55bf4067f0c8e1dc39221f06d94ffa185539b97825ba5f9ff94ab562144a9ca333ae7f94c126ec47beb20017f916d293221b1bf6cddbed010dfa931728685b82b40c902185375d0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020845ea3fbef1ca664b7738c07ee0be4f84a2e95b232ef6428401ec047974b3f6eeb73745bc45e5766cff191421fbbae6778c7e2c3577af43822f17a00b7c5c34fa97968dc685e627500a5e4c6f841e730678ec38648a2e6dbbcd3d2d0ffdbd0c6b6ffdfecced27803800f6bdee8d171e2d9616fb46e772a85b69ed8b5df6f3fd80026fe99f58b2f30dbdb9dffc1050ca0055166aeca9e6045baa79faafb6ba304c0ac2e5883f0d07343dc183581bd7518c2e63f73b8b0b81159baf1e37087af907166d2e53e5c7cd543763401ca86b30110583c975692a2c22efc62651acae1fe765aec23e639936155834b4b70bbc3a7da556754a5e5ed953f2cd84e5316963ca726230117125e41fee79f51ff2ab8dce3e9b9198a697169862c4dc63ba986f612c8c3edb4e0fe262deb18fc31767829947cac586013e660f320e37734b31a2d162f9c38f99b0b0c1cf63d38e2cfa540d9c8f87a58724be831757a64ffd12c50f2d489990c0870bc317c95fc33ba41d3d18caa75331fbd042175425b4b588f83cee66df555d4f0b73fbc00043d54a8e49a95b0a9a4ac13e2749edc394ebfd46cbd971ddadd3f6c40b417741c40fcb1bc41a9a81e5b18dbeb1002e384a9faa10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a53d9e3078a352211cd0f46926158bdbeb80c514f48fa7b662dabc4394b0931ba8b231c182d5e2be60402a8089c440c7c264825dad24f00b1e8be8d11c2947fcd69722114be03e613876c68db7bd230270236dc72fbc693ae65413eced736ad373170b0f746c0f6951cd7ec9436d4aeb16aaed6c0658b7c2238d70f8718757ee708139347feb9b1987d48724daf4a48216f160a217c4c148403595298806adb3f21d285e21f83e836d4d2326ccf09670e445736004d5504dafc780b088cc72fce2e1d5b36aa54ab3334d1fa9b2284f5ef71455b166ee32c6145439b514faefb6d1e776a5d7cdf3360d727134b2d4bcedaa315c9569fb7e08ce66d344309c45977d7bf1cfcf76033063e1d861806620532d6fd7370fb6d5d3b0e6ad8fabebeb193b61a46a5261cf4ad1aebe2b3a7e6c52b1e0c73140aaa1a50168277af081cba308f94f425163d4eeeaf40f12fee6440b4aca2fabb45db9379cedd4ff5a89337403faa7d0d6fa699abe8add555f5091a8aace98652a2802def12b6a2f797746e949a1ec6d6ecfcdc4d183dfd5d6a6ee65508a34a1d78f67693585ba743e80c879cf62eddcc3f9466e4c72ffeddc5f040711d34141223de118d69e5332b803b02800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ce3200e2c9dd93cdf0fd367b186b2d8b022a46dcc3742a1b7b37882dc8e71c3de5cb5eb431b69e640bf7a71a7dc73edee303823436d4ed0b3845c2ac8a68cc0c5f77d7f6d84c68740ebc040e96ebb601831dadc519f05687616ed57e967e4b33c53ec28632074aa5b664651f5cd91370df0c7799ebc85c76fe01abfdde520298f0bf6425c88702ec8660777362963ba5bc95432d1e4c3c429bfb873baac24200d5b287309e0848b120de26255e60fcaf6037081a66b439c121f962f011a7725ca49e0935f887a3ed07b3ae3a23f9cce9963f7ca82d6e11815ba0132270eaf3d139021e76aa20e4a02398fc57947a432569b038d5ef249bc44119d1a2c8e2b462bca54b3b837524bcffdda1f8fe9acc321218d7bd2d0d4fd8cd702e31d5e47a23aaff7cd73608d7e397526148e76c76df5419d1c34129f50bbec09ab22f18c1a2e9025e6a273d6d402fa9026b49cc5dcdf763cc929c6f374b2403c733cbb8b8000afe14ecb8486bea150e95b99f0a8e7ace10501061b8044ce42a18d9b44336b72248a1a683e03a87696c836917c71803ef58426f08f8a1c5b305cd0e8e5c577fd3ca3950a2e658f2b2bc26670f6833614e6eab324315e488c74afc6c9c1a70d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010de19958f02a0bc822653eedc308171a76b733bd536a22c40552c94b256d397c2e618c5cbe056393db0bd653174667cbcf17c290259c306dbae851100454b6d652cf19583dd8be2aa649d85e01ee9362aba3ebaa3b41d64eb722fd396b30d4dfe75458ccb9ff779a0a7d8f0696e31821178f9b8e772396a7d150d1ce1330691f5b0d1e67834c2a5e35e7e157658a30da786d09d51583c8c3066acf03b9c8c5809145f4d26fddd340416e086a168c463b4deb8a77fe9fa2e16656456935e20dbf74972ac1d7e81fed0b5424a3e4810d0c0a6ce7ec5599dbc438f4a31f8348f4422166ef66e7a5eec821a89289a568f99ffc6c2387944344da6c48c402dd6fbdff1b3fedac050e006b6ae4ea740caa360e361029e97d7c1d9cc9b1ac9c7eeca0eae780b54517d1fa7d1c277eae2e94dea09b652d13ecc7aa87224775fbed65aa0106a691b7ffbb1af8d4cc9b0d0ef1ba3c2e9553920eac9891168439a10e6c180bc338fc1d021a7f5af49f28601359572e853a7364e5d96fcaf7a734961058b38845788db3af56161459a7d991c03f43e5da248d5b49527bf12d299f85243d750027ca8db766a9d9dc5b7494875806f8e8728c801c7f74a1a1a41521f3fd0ee1500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cdb1a5b261fcca912620854dd6be83f96fb1635951ed5108f41b1b953617fc2ce22dc8e71cbfef22e1034edfc026711efed9fbb5ff6ea7e503dbbff25a3151e62d6dbecdd663e6b3f53a8d679b44f173585f806f3fd8917b694202a217632518304e36c3c5d612cb7e76ba9a5d24335102e13cf8ca4192415de4d57b17f5fd0690da0a540831ab4f425e5ac528a8c06fc7d70e057a0b615ea69b896f9ecfaa473419f79cb86b5dceeee2880560b96e97aa43e8fbe1724641d4a5b7f6e117fc0c845bee57fdb2b1acd7efbe9c8de34b8cbedce38ff381085655d2589384897fb34087fb52266339df26bec3c0b4d0da50bf868d9c1a079a0c79591fb450b8e3e26bf28506e8eb619c15eb65aa6c27bc188c94ed30432506b61b71ff5fe25bf2330c7bdf5a451632138a6d5d463a1ddd07a847c57e3075e2630b942f193dc617ade2a177c836773908bbd0fc1c3bb20fce8425cec3c63e590aaf63092c990948ed2de99f9fe8aad6a11ad851568cf29129572e861032b7390866f6e423253f45ef1cb590eaebdf293e7033de94ab003172d6302a2a79f4a1bcec81c758b71bafc33c4cb4e6b9cdb9a49dc450b091ccd296fbe42e46a6311b2990ce58d2039ec74000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021da078d1275721623a1723ab580ba8faed1ff96d8cde46c14c2d772effb985b4fc5d9a5845eec4763f18336b9474cb2111dac3b93587f53073ed3f460df79a818ba7fef5925488912513d668770ec6e94381957f100224bd4de14ca05e04bd84b29754c357dd81afaca473fb8521aa2127f32596c38c775456d30e8563b7cfb74a9dc3537baf5ebc6fda8dcb3a6e4c3c2c16b19aa485dff3938d373ae9de41fffbffc2ce909e9525278215dd98dca0e202f0e0d4932a952730221d4d033b71c485d64722b7d73d8095ca0b3165a8879d2672a3f4d5d33043b6568e42f46bbbe4ae941fe4dedb8a4d23efc429fc0b71627b352762873e02fc5bc1fa29b5461c94d63dff8c7e74d95f16386a87eeec2c943848019a0730e5b2c1c6af46f75435db158656a56690f1f86594a7d51c7c9af1e3cf716edd0561adb9dbb70d503d626479d880aa49c9d72eb4b367afbd45cdc7066583744eb64bdb2687c15e0fa961a341ff61e60cbc55f6d19859466acca42375ce4865cc7b34ca1f6c9c7b73a5bb2adf57a37bf90e4dc7ecf926b3efd6e363d26d882323b08bf4f9550d629cc4c1a3c4979099b71106291b42943e0c87b552be3264c5fe42e27ab0aca4fd47d56730000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000118bdfa2a1b705f764310907b1ee97deae5b67882447ac4cbe74886a1312df9f3ab589475a31da312a6e1af9d36877d45aff2bf04369f2d26a8886808e3cc70c19cca691853c7943af1fd29dd89ee0afb4e112182ff350ff796890eb35cc42aed5ebe3394fbed8ed92c8b732b56329735c56b07a3be7c1b32695f98684d7084aa4d913da46402ac34a4c5fe998887ecc75f9d8b9a824866a3b6f4999632398c5101970dc467190b07ca71b67223a769c14dab98b3084b25e86836b47b0499bb5d2dd72d15376d2cdfa7332ab8d0999e64443a329486b475a9b3e41e8ce094b7b846fe1427d1952a87ae79d9fec7087de0ed7c9389b6fabd7b6f32e22d4a330261ab933ae0f103d57a71eb7bec81cfd283f8fa223c1d5b49dad115baa0c7447d60fa1c69eb6793cfc0c9b22350fc83cb89d7af4ec99775ddbafff12e97b2bb32cf8e0574b3911c075be5aeafc275661224af9b708bee64ce4f478fc3ca9e9de90908ad6532535af1731b69cc9a5a49d7ed0906811a21f673e97b9cf0592294d739bbd518861e566f6db41ff2befa97f87867403c18c38282873995097cce433a1271eb94a186887350feaead47774bfb49453de278c5c8ccbd6cf61312b5e42f40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a070d898e01e872c21ebaa01208f842448996a0b8f488737bb1406bd691cb28f3ce09b2565278fd5b81a6a640eccda9d314dc6a71687dce8bf7a7ef65a27886b57a27c22a47a3b8b9494f626ff949add6fc6806b37a343f80d322718ab4ecb5d01b3888db9509a037a9eaa047b4cda333d9416cb338af63f6126f00cabbeea5f0bd039ede4bf82fdd90d552dc3dea09f28212eb7f4570ee319fa8069deb3dcedfb66c80fa30f01b3666ef239642dd33f10d0dd1f891577c95230de7f1d5d1f68b6d34cd5ec19fa26908de452ff518ac2a173a82cdc0068b71f52ecac83198ce07514cf18ff7e05d367fc1c33fa55ffc68680c6160f2da136923d3a42cf3ffa7d2aaa6d98621018f5db46d7081f2782aab13a21ebf53ac59c182dd9b0df6685ef6adfa31df0905ff08d9a0958362885309d0992aaf5974d2a7aaa9b6af938e232c678a6e12bdd0b1df28e5ae5a0e42d79cf3ba0007b4cf9209d8dc81daf0849f22ef6a10a2d5c680425d751f50697704d30d865eea85c15953e6c0412eeec8443fe8c16a835c9a109397a35df0b33fabccab284c9e314a026cbc7ae45e1549e37bf3ecf58d3670240ae8a2eb55117f7d43fe35f530695f5441851e9a646d4e56400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000950e7a385ce51f57f8e0a2efa2688013bb502a10a18cc2f20934e5b5065db26e2f386e5ff00450c9195f96d437aa5818b7b9d1749e501474191c903fcf3e0fad191253941d878a3c1562240c58fffd6b19a007787cea10ba34ef64dc4bc24b7e84f8f39de13ce505674990ff28603fef4e5f6857fb84d1bb9b14b33fcb3781a062bccffdd79a6e6754c4899bd0d47cdbc1b57f741b75be2d02752c91c0e5bc19452edeb2bc2fdb666b1226b075bf5de76e660a51173eb1cd5d039f5e0882a7777e91882703f380a2cacddbae6feaed1769fa584edb97e6744bc2b3116a7825ff3ee42a8551cb19c85e26a10388f968f0f321f79bd8d663d616f9db0b938c8110ee582705aafe6ee31e642dae21e37655ab17ea8d00a3dc479ab1f58a282bcb79b2cba2afd2d1141f68dcb98799ba1015ffbd595746d4523002bc334ea03ea7783e79396f75d35b0a286aa4e51d80c14df1ffc468789b21df9bad76f1e4091f3dff8a46aefda125eb7df4d54e931822447d1e27141a2b9e70e7e2458dd1e056ddeb12a8c0fd1a1e0d0c2890509759dd95dae8df9c56c1980177e5c09c763a70f10d201a5fcc0eaa6d4be4cf3d8beab3772c9c0d8135bf563bb091cb95a08fd86000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016e74512cc8203070a6c49309f69ee50b9f7596fdf8e6db5f3edebb1a4bdda99fee214242e20da0de2d10ee8dc93a6c5a066f6deb7b14900495dcf25b1e30e8c57044679c01f4e8a8ffe5f5208b42795d196a69b17920ac6cfef7a5887c346dc2ffa86591ff664c44d8e7816c44b766c0b72ea2e20413312831a24a0a317a3a0f6d40e117e74aba01d0725196713f1edd095d08bb4d9107b58940103b8e52831e5c4aafa02417a1ae0798ec7c2f289bd1addb0f84bfc6c9da3ca55747ef3288893962921a6ce3b39b381fb0456fbee4e1d5f02eec9f4b2b2b7e9315c2206cf22a54795f529b999dadf424fe5a393aead1d09adcddeced891b95493c7f4758995983d789f5338e1e2add7b43bfc5e50abbda0d8f1bcb4e8beb31a481c1559ef4fac6862b257d1c953d285d828afd0f6b095cc925ac557f5600cf9927b8a74e59df34f611fd5ff8018eb328fd21646233b4cd86d679dc19c58274aaa4790d9f5787d55a4d9301118717ee7adb68c9b95e2e92fea2bc203577753db1903602f6f8cdc2004e18c65efe823759c7e9db9c25760e7d20dce9b2b81c88b41abeacff052364ea7e07ceb86de1a95bc3d206e4899838987184599a446e3f7ac5d4cc3b65000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b419461abd6505c3fb617f4d5f3a4cd0b1b49249ab218e6f5d0e5ecf5391780dd9c3241fbc61b7e66a9aab99b67b980a231b77051854a1600b0b771e8b0649006d1c8a9145ceff26a12c4fee8b7b40eaac971991036492abf9f9e59184c57c9e7b86d6ab32b7d55d7f344c571620fee1ab08a2d0884d5ffb46d6fcc985c8d36d3a3a250db06358c3554fca261259aa943f540882036356c28c5ddeec2896304c8a5efd061145ac18f7a44cccf581da63711d365f45146d07beb6bcee26fd1eb252c8b3360c9e7d82ae070862f08284da2d1dbbc057092279b360f41e133c3728f2d22c0711f7e761d5fdec6002ddfd518659022b956f176db4a6760a9a99111dd5e51575665aeab1fc9ddff66b74e4ba70de797ac5cf3f24a824ff344617c3c1f5c9707c3a491b61f7b172219e7f1aa339f0c44b807201da636962ad97e2eb3f69f53c33b00696863666a226e0e51eeaf3ff6656d2c82a7c3807d352d7b178e79518b985bde8e49080e51a07e24f8e6c8b16ae2538bfd4ac244512eae95c1f2c2848885497b7eb92d8b393c0c2a07c68abc666e467b6c2ec6198ffb47c4531c3ca27394a6c6d4e0e62d47003d1d3190cbddcf78d97a3458fd95ee05f048dfe10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a17d35bea11bfeed90bf156022d3d52b8c7807e81b90e14155d0f1eb5b93eeea3398ef722e2af1ea27e178104a5561fac16596c9f38cd800d14601ecb0ed5e152489af674a1706b7408d036b04071b8773ce56a25c2254573cf87b11ccb7397a93844b792dfad1880a38a2e7dda0a0b639be85addbd5dc3df5c1ed1baa2831c71d55f5e44481e0ddb352daea7d65004347272666b960e0deede416ef04b148eacd7987eab6140c42afe35c532de66488f50453d6ead4a03ccd53220cd88f2993cefdc4b806d23694a43906b1207ab7ee1cdb6f3cad15d8e1a3714369b8b52ba37813bacd1236a24092dc78355f40ddf2aad23e813073455e2b4d1569bd16c09a612ddff16d36bfaa2b3dc3cd5cee814280efa38dc2ee9316f5cdbeaed08f870d547627815a78c41e764ffa6efb5dfcb01b32f71145d847a2ed9cf92185189210d09bed6dac7712aaadc6103e5a55d64d184690555fd91e432f1de6fa261465eb0e4eb699d5ebebea51e0462612c6665dc3900a8f8b4fd4b451478c5efda5386e630023f0ec6bf5e251792f057aa9aa452dca9162dad4bdec8b7dd86924a6daf4a94f56a594f32c706dd448ccfd88e88c81a7d83b85a16318ca3d3049eec365d400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cdddc2b34df62b9db881a47335072af643092fa6c65db148de74b97d2c4de94eeb980ac4e63e4fddb0ee27e5874a61d1db519d587c8f8404770c23305273cfb9366f50536563c76c7362c89e8b4c3175f329fb99cef61e574a7b4ff0bd34dce33db9f83f13c87e18d1c5ffa281596d726d6965f1aac9b215bd99447b5735bae7ee244614d5de1b070dc638dfe0ef7469c135dd08716f521a7dd7341ae8a0a1942d5ba88ea49e40858853f6eac0bcb37d8cadff10b2b36ded74d8b4fd13faf791e3814e510d1945f0976d3d416a15a4353ea61547e7ee69239f9f9c0e57952c433bcc49e4ac3191419d82176464dc7fb10fad00bf86044b5532694bcf3ae75969c5901e34050c3184fd2137424c4214a3377001f791e7c13521cc7e092ec8c316691fad729c2999a0b9d18bb5913ff9361f53f4fe0bba8c9823ba1df21abf57472cc5f1df7ddb8385a3ba75544ed12e6f2aad107787449feea549658a94ab5851d416ee12fa1032620dc3d15af601c62debf040a0cf958fea3eb7a92c1983c41cedc8a209e6e1a661c9432824fd5cf07b43b0f3ecd1ffc38b8110f29e017aaac61ad378f19ddc0ecd5812b7e9acdd5c15aa80e26dc7569ca8f50cf5445c74e32000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023513ce92b6a6ea204cb3a0cc5415d95ee9d40133be193cb92422c8eb445fc601ac57a03c1ca4a9f9c1fda8237251ddd31b85770a4bea36c100a87f96cf50291debab072054e412f6a333a3b968644164981978cc218354ed306598581e0824dad569216e1df4a5ce7bdfe10afb9efe97a7d720bd26b9c6512f8a35dd36555a46caea37f63a14fa470e01fdd4a13363bb31405856a50a6df9f66f5989d279d0ef9b2ff302000a968fe4b3d19dc3befe86091c9bf986f34a4b183f34198452da167e17196e1950922e91f282bce1d8b875b2f28dc260bcdcf8a2b7409ee43acec5446fc972d95649c646611252eba8f2ab3840ee474d51b054742b6c302350956130fe4fcde555a3dfc9b9a330f69c073f4fb91b017d57584a2a1977b788677fe93fe9be405362010d6b9146ec63d110c1ca5ed96f2e416d6beea1bbad7bc8e628f6dfa5cccb1f42cfd8912aa8099fe7b5c174650d91fca94a163f75968cade4b22fce9448639ce1c70f0a117d5e8748a2c5e8687304985d09936b5ca62b655c44113b6de98e1a21d6635ab332e0fe486c254742dcb0bbf33f29a79f34e0b21919172b3e28b3d56ad415f5eddd5895c246ab9928fbfbb417502ff6d2aaf938b1f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009370d76521962caf44ce8009f2540340a11f915c2d339d275f35f9ca9f29c1bdcaedda0a192bf8db7fee80f42299900886cc21cf00bec8613419a996f2953be0343e1c3045b108055fedfde9bfdbfc4645f27b1fa826b2d00375aed5b02e1701f55e8308b59559ab50eaec76a4aa6b94a050dc53c546f0c2719d0a3f8a2640134bea5ee14e29b1845dbc115a0af82add394423ed39266b1c286208727895c101caf4fc1c01383adaa393836ec914a47fb56d3562d919e1f0fef3b121eb0f6a869769d652b19343e68e478bd1ca29856243d4530dde3daba0941fbcabd33261585daf16a07ea0c08c559c49db6982b750d7f2dde0f7b66867ebab635340253dc68ee60ebe06465deda47625c938df6501b906b34e7328d1cac3338801985e3967dd815b7251fb4491c6d25539c4aac6f83a3d5f6be81cee45447a97cbe7a38b9694cf2f4f8044805b6ed3e7b5266337e838ca65c38c13baf08b979d96eb6edd69df135f9e8c5acc27ace719194a894194040c5f8bbaa669d76e427c7fef1ded425e86b71b6062f5f19f4c7e1f1421de348840fe5b80e77912b5d98a7702e61351b27dcfa46e27899b6f1799d44ca0d3bef18f6204752e5efe4dbf0eb910c89ed300000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48402cb8e7e883fa2f1e8fcf31cea61e87216fa614d88607cf223cca8329441727822dbb10474b05fae3ad2d17877e72850a632807fdaab62f31b88761a02781954b18b52cb8f9004aecbba43d4afafc015ec2672d24593a59dd20affd7f49f7ef330813d619c1c97a6338eba15f465633b1c54ea58b63429e346e18a50958afbd5407b6c0618498ef2b6a7da122a65b0e7aee774f3172f05a4613aeaace8b6ea3ba240fdeb05e022fb7cdc9452f34a50d0babbe03e48ff6b4a23bd4e8c39139499d0e8111deea8be1ff21dd9ccb7478ee9985a9f7d1cb0e236c419392aecf42bb55108323e130fb561490755a5a671785034522947d58a8dbd208cd6717f27ef4460a3c7a4e7d1d380f9db2920140bcfa82c2836f4cbd75c7711a30352b1511411711ca8fafbadd10950d692f48b0f824b2055b3d553b4840e5c6775a0d4c3d950c2dedcd5e3b092f5f8222528105d3d8df65ba3c2a70479a06190b4d99414caf7c0ed72d34d8aa6b1afbd887c1ca9db8768cff384108992feedb4eefa8bf2e58822587d477f0442bd1956b141250cf954bedb726e673f484f62e57231c00ffa80903703f744b4d696831f2680ea8d284bbc96b011457fb407b44ab29133ff1a3e80f1fbf10a99dd76b36f4a63809fad796355f0dc98fa218b3091e7c659b0337bd261ada7921d5956f5ca4ba13ea5cafae4d636aced8b5735fbe073021f6db31d32e9cdb683ba8b4d79463bac5cb3c0a64f69d9a1419557c7a2c89f501ca1303882120509d637ddbacf2a1a981017fd79389be9d283a46e99e223868080239d6561c7f588ee99972981c3c370013b4fcebdaa52ac6f36e802840a3bc857ee2da79010bd69f497e7262fb814800fdf6431b92dd0638000df989a762a56249efcee70ad36327d589f739365b6ae259be8c22edb33d761a35256394414c6d0be8eaba1e466e2440f5573c02a593001aed88f862077684fe25a92ad301562782f2d6911742b63f9d0fc262ffe051839500bc0ace5255625eddfa78f8c7059c50546afa1b467fcf4d054904ac57e5f1b4a0487d5029b39dc5c9af33e09e2ddafef44af32ec0ea03c2d929ea041c55a9355d1928c7a8a4df4c0631d1115cc1543cc5fe27171c387a95595c70c18f51a630fa58df3d5d5eba36d9bd08f4bfc09e349a453f16f3bd69a1de072e8077f4038e9aff956552d79d3047f5f0485a416297db1666209f7218520ae088a81352f6659b57682d6e9b7a607c9937837bd3499d58165c113dd77f32fd5d80c00524416bc09d0263e3132c5a267ef9c8c9a1761c4d401c0d52b66f058de1d8a36b943d4d8d4d986574d2336029cd0cd88a9695be4ca87a09567d09ba10c34792d6a45f468deb640b83d5e1dbf88ab8e27e65a7179afa5e0dc974a053ed0665ecb4f575822b44eed219f2815dd2804c65a968ee011593cf15f9da8136e65094033580d4513261123ee6e44ccf87bb00a46e8d66f9017f10116938a5f5c81787dd0abbb1e49638f010547e51218eb002ce247e9276d2088c0f45791e686bce04d7b85662af0baed106c187a2aced3bd99d900bacbd5603e126f750b26dc261ff42196bf7efee25cfad21f0bd2171fc7ad0acf3f055f9cb440851e62823d3f15c82f1977c36591888e5acbdad70ec32ed6a55d300de3a647326bbfae333a66b925946ac4d4fc94b57cc45b6b16e291076f8620f6bfe48c52e2dd2516c6d3f3da24eb436bf8f563f785fcbeda377aaf91162283348f0c6683f15f5dd62c8958ce23d032f5681449bcb6ccf9fbfd5a175d5f080be2c8f6366c71cb7e76f39586c047adbd20b03f23c7caa0eeb9ab940323354b05a30d8e0d71523992c2c880d5746502845bfda23bfa728a548e60346f7c12a51e96b7ea9488b2fba1eb248f04c69fde9a8f3248066629686f58ef408863b2e100a838e20be190234ba4ee4c9c062ac5db84e22c234ddc33845b93643c00d9b6f9b78d106428f2d6afecd200215d5b343e90ef25d38df98a0d932734d6ef7e94831ffc09890742712b86f1d33a713b7f7a881ae4487192413538d23392ab4f47fdc1465cead0522c0cfaaa35aaa3432fd391c5cc010663e8e22a077d964a162f75459c16dd3eb1c643c39df2a615a8184c0409f502b1df47d6d1abb5b2e116f94f18da44e785414c150fdfa28af0ce5bacec7e155ac021e18f295ed8bde964cc2e4cb28f8c440080d1d5416e9de7a7ccb39e28433cef2516306ef86145ed47ab8752abd7912c312a567da36e1ae2733e61ef8df84ddd47cb380af039b5d479eae96feb7626bc524fa7b49b5b5bd7246fec85070e5a779d0330a79468c0ecaba7e3d32ee687ab92ff1950b76215287a629007162879359aab7537372e592f1ac45f2d5cee40d612ada8e5a288d1f174aa98691ffce5f4295778b19c716b3d78fb376d401d269eb2e23261cc7546f15a5a188f9535445f3d13788144d710aee659ee2f2499e22661f8ce90a75419c088002ab1aa43cef0cccd119c89aed9d8d1350bfe2274690e3094a6c4c2a6959c27006b616a608be99406d4a48c511c0678b715b679f03e76928f735cd270bf2955f3ef84e538b35606207048470225776646624c5c7ad1d10182df33319f2a6ef4a36c9a36935baf5bec958392cb577c9ca4b5d00ae65cb98082b1170cf08ebfc1147f3565491364fffd08b0859300687686058ec9c32bddc1de33be62c07c1a6709b578eb0d8c495462a9c38b9618bbb320294186c8c83ee0533d1937fbb02450dc10c8b1918a423fa51b23c51d56ad2aeb8aab9cd4465340259880e9e24d5d79f5f4b991cdfdcc5872ea904f7414638cbb8f2719bb967630ec5d5e9b8a42da0c1d9d764696906f095a9cdf078a94651d473e6aaf8fb07f2402d7ef29d558798e7bab053c3a02a1e3ffd5aa5cf87ed79b8004672000439230a1ee4c8ddcedea5e5e73ba7d7e3f4d4e21b77e30b90e704d3d0cf616db296b0e529f9bc9974655343077c3ead18aafc9a4d4908fdb7d78fd8f46b484da19e6d0503ccc1f66389dc3ed075549a5d0944b2c4bfc68f81a689040bdabafe5cdac07520ea5079f6239cba3dbaf838ccb21831ced64cdcbe765a04909bf5ed7d9cbeab205ee332bc346222ac0b8f302a1bf97a93605ff33ab7c122454e3a3c4f9fe2c001577c2e55af2a4d501adc5836603d82b07d7e09da68ede31497c7d73062720115ae37497766ca52529ebdcd5f4056a13e5b6bd587de1c064b516961c63a6a121982457ec5d9d79b42d93977d4376bdac49705cd40f55c3c42953bb4b813bdf901a2095b8975d09168bbcfe428a9b90c3a686b24add19ebb7ebdd03be2e1f804302c1f31b8cca21efb6769baf07f0190e16fe976ffb228ecbac59137868e4d3a1f3aadbc1c269eaa8e35fcd0474b0d2d805aa9e101d1e0beae4e39ee21148e58255d979274176779e322f3c83ea787891a74f96170e35b8873f603c3afdb032a2ce72e6aa789d556697e23fbde1a8484e0af9e9d975dd8d1721848d274cc9ff5035327ab243d56c49e32e82940762a699aa58279474f97c8dc83da1300bfac3726ff2f14fc523cb15465f17581ea98359c3550eee6ff941815f3d92fb70d76a00b81026984a59df6b58febbcb3152d5a1f0f0f8b38e217fe098c559fba80180c0b1f05bc4ec7c195c22c2c276271fed70e11e214dcb798ecd4836efebc368684046127a2e9c91a343a8b6df976190316ea867633c6947f71c4adaa777d7847c7270f3fa0b543a7432829872976a0d6f9553e31e9214b9cfa3b18620560b948c01ff7daef540f99ff675876df8e842507181a51042bf790e9462b0dba139711c72fcf347ddf05ece1d639d0a509bfc116cc80f0dc8b670729adedc41341e03eca0be89336220750b3dfb4af5b23717f41f8d5ec61742c75ac06ae9847ed6fdca21c6e8fbf093641c776628d168c22589660ab2d98e6f320e3e684cbd8e73b77b827a198da47f3573ca2b967973b602b5b17d07b30a5030646062bfe94f4559b4013ceb77adc9fdd2273f8bff5a7a2230f23898186befd99809d308f3d42c031550a0b423dffd643497b046cbffda474c0f4a912aea7ddb17c28fd66638cdcd1d705291cc97e65d006167df4250b2dec4e075518cc9947ecfc5a97e2c46bec3e3d1fa4dde54dcd47c0568108e30da3ef5b730b8233f3b5a8ccca6c5c747e303a3c0a936c9b3d714c374e428f19b237c25ce5e41067bcd247d976035a0c8c932ab32fdca65dd65271ab871bb4281bb7204e36ce966692aa80c198ebcbbd4335cac80f3c59f450827148029a9184507ade2b9bb5ac0319add8fb4779312822ac5fce2919ae68ea1c9e130390c38b159c39c5d11a11b2930a30b26a84c1f8edccba1d0f56001fa05e36f25fffaebf5e1c46e435d7defef53512f33e7dce8b4cbc4eb21f4414746850acd199c08e50dc1f555da87e94938f8889fe1ce7da09da750ecd0884cc7547bac76c24636032b740d7a54517a60db034147486b17a4356be957123dc2c4dcfed7e8c1e5dc721372a18cd257eac1d43f92405b79540dbfebb064c17839b388f2812825d32f13843d88b23a1a3168362af0d2af7a61d38f3bd0c550109da9237da4a731afdef702fbbc5e3d26abf88a12dc367f899f0a04a3256e32e0bf10aa40be5df56a7e4c94f3e508d6e5c6df6561f3140f64af75441022ae41ddb0356c9715a9c477b99b01e680528f790d455e1501ef2d45361dcb91684502ce62c8258ddf2d13df881e4816839157d064d6bb9680cc3269cf21a842db77e1a89863464155d403dd31f53ffedd20f511b9ad4b91c53592e2706fc7d1d6ec812beb74da7ff2130fb048e095302b2cbe58292b83125effe5eec344bf6b4911d0d3bc842fde53b3bd7b53078750ff2c5dd5ecdc1b7de6ca3a1be69298821fd380346a21042d75f2f93cd62fc9af489336e7763f94f6648cca58b1466a086229a0202c480456968db346e6ed01e044310d1e01921375b6138c7d8efe4c0a6b90524a39871294dfe8ceaab4d704312d86c882c2e4bfdee2073dec2d6d61481ffa51e040eb659491c81e68f0a5123888db0d68a3a91bec62d62948080d9c2d7e1032a6861daaa0b990bc762b88fa71c0dddaaeadaf27f9ef600de0bfee2970698d127f6f4bdad18ebfd705077fc60452c6599649f77acdf91a64de61f16ba654263172267936eefe0a0fff2a55a537c8381c52732302172415f61ab499273ed3dac09071f60d46f404711ecc1544d63d5128de10c57c9092c1bb224cf9b2e0d0132175ac4cf8f514760befba3df678e7d1172315c48a68002a3c86642f217a22cd90d681867c22e9af96edb596efd59fbe623b98d6cb6e0d75f2fae730b2819ea502dd46e46800905e504d55516d8559c9023b0a7bddfa9fd2733923f7025ae495e0a4ee1267300800a9831352e640eb9937b51602755f2dd230a4667ba9db48ac203c4b3d0e4467ded4c9ab0cffbc7f6e739cd2f7912b62d2ed57ca1d0dac0ce29110230de2aec05c9d74bd74ccbe84c00d0ff17df3911c33e42eb3fcb3c8e67561eee7fef654275b60e389947b7c139298c60f3bfd0a261a52df6bdbf13e0be81116baf10813dacb9b3c25090598126d3f931d8d5c164272c17ec0b0ae76e40e61a3f6e332d29d13b899fd4472b34a6d20ca6b0045756e504a9bd8ac7b820e5c61f07aa8b1402bb418002ace7aabd56fe3f26843475e3766c441943ec1c55fe7408cdbac253abc2d4183b2dd30e928755876cce390eb9a858c5a3bbbf8ef39eed003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000024118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000240d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000240a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000240b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000002429a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000024141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000002425e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000002412978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000242daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000024189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000241159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000002405ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000002405c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000002414d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000002403db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000242ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000241213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000241ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000002414fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000242b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000024305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000024280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000024223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000002417a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000002408858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000242618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000240f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000240e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000024172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000240b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000002405bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000024137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000242e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000242297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000242608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000002418373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000240422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000024204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000240afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000241998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000002428d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000241da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000002421d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000240ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000240e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000024107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000242f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000002409726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000002424f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000002403c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000241fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000024205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000002425110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000024283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000002421cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000024094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000240c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000241f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000242421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000241fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000241bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000024304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a21dff7e953220372faf223cfbda456e8bea0ed29403a57d6e0b5cbff07fa2c1b811ea0c2fcce7f4ff1c8cd957b99ade0a97e636ac1900f25d556667ce5cc4a643534e97d6304c9ee984c9caca9c4a3e1c1dfa2d71a03a4bbe76cdf26e2ff8b5887652c8638093e54355de1ebdf0ddad336af25b6c36743888234a966fffb7066bb2bf456b3ab989f0cc059f9436a05cfd6091b356fe3383ecbf4a491f691771d6edbc2e24d1f997d220bdbff5fb0f532864200923f85a13ff4109d8a606418edf6c8ae5a31d5139ad15c39ec1498347b4f288dcfcbf037b9af24551cf706c6a5d70c5559c6f1af5210aeee3d4e28b06bd60092cc63716f84f546b19f4bc5079e166e929db87ed6f015b56442bcda99471ad12b48c0675b586ea21abe28f76f3bfc80e042bc5aeec20b701fb2230993238f19c334019ceb038563d525fae42629732ddaa9b1761ad0a542ee7eb69d39360c8dae499a2e7d8dce33ad01cb5c4d2ad551000826ff729837e0d4a0a8a0ac5e40141ae837f0d0d26681ed58b274869dce671fe057e9ac837f12012efe70d1ca2ef82ccd9db6aabdd3aa24c971efc87f2735284fecabdae8f3107bbf4ca6706fd4eb1aa17944c08ee8a4f7dfc7bb78500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a31eb97f2951728a7d1ef79fc720bcf4febfaadda2bb8ccd526ab9f0cdf9d44d0a5dac33cb5298d1a8666ff67a1c5f150c8fdba6b87414a57699678ce79818373ad61d89189d86134bd6474627a8c4ea4f0e2f055290bd3f2ae1c1626dbf79d7cb20c691482253a52ce928b6d83f9fa38378b2a8fb89b339079d3438cb797f767e09f1dfad89fc592c109413850e94935ec80ca5d54ae53a672a0ce23e985abba26c1041e35cfa81146986a8d31a7bebc9726fb19bcb3620792c1c0b52aef5e05cc846506bee00b1734733b36903d218e0bf5f605c9e79fc43a8381c7064e3f8b5f016d17e9a7fbdd60dc1a3da5ecedba02c14ccc13ccbf15fe2908844258f42069a5d8ba74775fae499327e46db50bcc4b9eeb8232624209abf1a0f99e6353292822626bee0654ea40acb85cb797d41c471f8da859bf67f7e221465f3dac538b5f026ce396f0b7e28fe9ed1c7735788bc1217888ebca8de6a0d986dee29527969025938f8ba17dd145fcd98086925b1ccbe3dd453c0421d063e58b0f3bacce7ddec6a22e07eae83d4da385f15de169f86eb3d3472f817bb7f22c3ee0980c531a75727defb094e8633e4e5cceb2fc030cbcd9de1f0fe9d8a68f85f72928d150000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ef4db5abf767f859c35a6ed38e6ceebe7670a23bd399285f8a934527d3325895e74ef5d3ff9cfc532ac0b33ad6a4d14e9fe31892f1531d6fd9f60b637b25ab6ef68853c2fbc91c9e782b74055a1754d4785c2b01b90aa439568f3368fe213fc55d58fd3002b4c04aa0f997ce8057d38e3a2a5008b7e5766bb7520d20239cc19b035b734dcba9ced1d999bd5aea99657a2b14726f4b297467574e09034ff55fdfde33d993f184f3417a3f91cbba02bdffa8ea6446b91ccc66d88540ab083fe4427df40d3d6671578595c30f52a1b3e681415145d5029773673cc808e86d5b7155ba001950f0eec9460a465781c680407f2d226a9395bbcc26d078857d6a89b744559992cd4ec7b39f6b62fadf786a67a04a9d104e01d11670a35221c555e44f41d4520838ee2f48096bd818459b14177431ec5ba94a2de96044294de4dc65b60d994e891800c91a95b6ea7edd499667c6bf86df22065b7c0d098fbe4716cc37e8e77ea781f8b4119272103554b3132938247fd63dd55f7faa62975ac11300dd73d9e99a3f4778d765dca937093f110ad0f4d54bfdec68cad00f82b899cc98249ddf797f9fb545a982836b1f37ca54d4cdeb0f3de6efc62de8e6533443f477a400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b0acd2d2891c69747dbcd29a01c69753cb67c221a1949b94faf41bda2345254131568b9a43fd3c51b8ea96bebde874e5a2e8b211315346dae954ba960bac8f74ba94b4436fa0893b99056e0fd334b43509592a5909544c23271ec049b76dc4be562792cb25054330776c57aaf8a9751b003bba60dcc1fed232f5b0a3319a6f6bb5bb92793b51027b9c135ee698ef146dea77b12e52bbaed0f6761aca8cbf05d1e497aa23f0866a0148d28de09d2369e9f32345a731cee4bac2aa597021fcc30491b551859a6b309358f7f6e0288e518651809b17ec5f46ec9eed7be82c1515576c5b602a02e34de3a96b7b0bba45bfe926e1259b5ae60944a6c6c86380dc7be49fbebc54913e7b24e1ac478b75f49d5f43d6f7cda6f74b3bed4aca71a380010005aaae05d91bcf09e04c103a667092add9c5470b80766f21e0c614d8edc36e41c9f57b267dafc94b1ddb899e57ef04e07892d7bccfe7f92e65cad1eba5c35e8b9f4ed2b8a262293dc75ccdd469e981c86d8f43e171a71545e5a154a2ecb1657373db7c01740b5916a90ca05d91b719c2e12c463f5839301b0d4b830275924bf1b41f6079a6873060313552fa14aa44c4e53e515df4b53f94b3bc3fa189800a900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b55b8b2687c9b135ad8cb3ebed5e10decadd74fea0592a5acac4a405cc3886772c3d52e61cb2511f1a448d96bc45c6e24517fc8f80db2cb4e4ac8bb10f2f3dfbe585f1a83a01e0e8570d5ec5dc24c8b7a3dd87f36d2f074d6d5b59eb3657ac2ca5b48b3c2cdfb82fe46aac522ac6cf551f84bd0a6d5da8cf24c52212215fefd1403827e9414fbc568a5730c72788a43bbdf0cf5d3900bc2a1f0441d6b56c8ffe264c1fc9d8af351dd0b00cb619001219884c5bc42f882f24541e938c6840137557f682f7ed27670d85064ba3d3e08d35365d77168589c95a1ad22ad25c579121f6823c10ed145edccf9270485c1075ac9b3fdb4b0fffaf17572361dc7f138a4f04db92aca6337b2660afcbe0d2c5815d1828dfd8270eb21395803184a7121901d184d307d76bebd7d03cdfb8c26a926b3c378dad85b57691459202c3236e7c555bae46278364653bf4d64e368950e64b96b85dc773701d8206f9337d168927aa5cac1183164d07c261e0e72ce6bebe9531bee1115b39ebfdcfcbdb17f94cf5a41b017851dce59791bf951ad8de2d094c701f53aceb4d4fe7852ed4e49be3052758af40eccc95bcc1cc5ff7d3be2e17f44d539485dd3596c227079e58fd4179a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e53951a53c72f96d42a5734c044f5191d2aa509f1805ded9ef7ef0aebb0d3d2bda26c95d1ca0cee7097149271884cd243657ecc0c785bc0f14781d3804ce1050bbc9c02ff4043de37c2add451ad750d50bd44ee15c6854ff0996f699d0f1e839379aa266bb84b2b4e1634708253682aa1027eca1f064427907404c421ccfcc01fd098ed3792e787569c0aae0e37c4fc16b03df724c42173f59b4678196cefd9000d140c60378cb1bba122641b5692be0331c64dbfe7e1df280f7865fabb082a69e1b9b33f6a9c33a8017a282758b4cebc34b94c00f14d87dbf20655223d2a71b4edb17a039c896b6c1e4b834b84612d1466d5fdfe66f1a717067b07d7dce009acbc9704c6cf67f3f198116660aa184e309a25835341103da919fed3112327d6a6ca5db96baa649e757654a2e0bb925fc6583fb3d66e9253e14fb61d5270d51a26b1e494aa11dc63b69cb4b26e8297f74529d44b256507817077bd672f63c4699528b9fecc810c125261c11c47dcf986332a4a26538b706225ac5732c68fb21cacd11accb9a3e2a48d603033a6b90c4652190c7fccb1ea19f11c311869957f9d2940192ae3c94687eea8d6c1ef1d76b68e873e334b524e2435b0bec8fbb9f00f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012b434c1905275b3c7aef9390c2b15a422a9abfd9802dfdb165df7675e8d70df76c12048db6fbbeb9b67ee49f469b3d7d1516ae2ff338cadf8e91aa228c6cc1269a364b7ad5283961b1bb5588f2d38b4ca26901158631efe36301eee5836cf8e4306c140f7b0f2d4da3a20bfca4836a0f8beac7bdc12b1e49199fd459d13c5ecd0812b370d2894a0e4945af8349d113c102a10379f8dd0966d647a0fd4f6405a6b9ab88cc0ad473379a2c699d96a340fba1d2c7f0612bba7865d6870a93e9ec4e373745a1e40f57c524dd1953d6be023ab66a8d079bed8478bfca6b9dca069cb6df492c9aef6accda97d11276774902a0bfe995b83b7f0d148adb3a62a4611fe5e7202d1cc7e96c3396fa27d772126a08f67be054e1f84c6e5a03533e0099620af59ac2ab41a26c21b96c29afd436d14bf6bc2baba72c8695755250b9ec25eba16a8089ff947ce51b9fa1ccf026720df4d646857b5cb0d27e0732f54be33841d2d18d2da723731c5d507dc6445f58bf4d5fa46f1febb4f2d734cb7fad70237f5af7a95d806b8eb5a3fc88a19068138025b28298fd6b21ed444f874a519e8f2109df904788dea271fa794b3bb748f78f8b0ddd160c7123e9d0f9b6545204e7774000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090851dc362f948770a77da42e8c8b0827ec8acd8edd2f48b76b23aa39e0fab28f2e3516f1cb62c148765b43c1fcc86e01d120ed3704111353e215c3b6f0e371d1094f6b0d30e05f3c93b625ddcabbc2ceffb3f9d204010c6171d37fe92d53f4bae2cb07461afa7f6aa1370bd162d980308c4e4ddb4619ad449a63a56cedb109f6ef8e3f9be77f7eb007ce8e7d7da2d10386ca9797ec3595935c77edcf8d590a9837a83ded4a3a57e60b13320f5018998730a6b5a58af1c14fa64bccca0299218ddc983349ed07e9733759c5fc7e9931ae8f9be56dc1348ad5adce69e0b7267c5b8b8376d43605502f8cda5d9deea1d247f2fa326b31bd8dd8d1754b05d3786345d0ac60430e8c7d095a84e26f12cddefc1bfcc2f9129373aca0abc95a6eeacbf9f12ccf7be99fc2dc3031d2be44d02377f1d13d06396407905d202ead3c3fe98b3e5655da5adb0c299bca83b44df84403c248730d6522167ecfda875e52d61dd3e6dee72e126c7776e00cbb30af52b81da15ddfc8c7d434737348678ccaaadc157210f943ba8a0529e4b3372e521e2111a5f33eb0754abef654743157880105f4d7d3fe19bb46fbaceb1fd9abeed15953d2c8ce1e6fca0122809f69139ba7c510000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5cd697cd9c535fe0aaeca175a7d9c13d344e68cf73419abff2889a8b480effdc81de66c42ff8ad83a0eb04c5738c4326b6def9513452368cd8925b135d127bd8892882c74d760418a4d8fc5561f8c189b9762a0cf82c2ad1ac9d4fec8e56acd0e10875e4f7e9d40cd87f0f144b2ff18585fdc1b9c1024176535055d86fcd09b8970d74ab27d7f938edc706f189dcb2830b1fe94dcea1dd69b07cb7d590f13989525e845f54081588fb87ef3fa36bb5247d8f2dcd3a6222c4675316ab6a6c9583f31a67e242979d079f0de815f25011fdb74fb3dcdbd39d1aad45047ad95a39964779cb8b64cf3120b5c61bacfca27e94481fa4f8b22646e8b39484b819f88f90d078cadf97359565f083b04fe47b2b7c43148e87d4cfa9545e274e77fec76f2ce57d662a44470e47eaa6962e0910185cd1213d28138c23c50dcdc6712b72a62b9fa3a63a0ff481b6826ce7c1a0d4e917324cbc2517e047e777c433d0782b44e987b6dadc959e9ce3e78dd5127255f9267bcc9b0778a426636d5b37154fff9c0dbcff24c531fdb577550ec7ca5512a3700ccc3d379182b958e9dca4d433d5c864b7afc636bb4a34cdfedaa0e1e03fe43784323dca0c8e16fab8b2c32ef08b2a0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094d4b8a2273df8cc8b8362bd87644c3a5bb6a4d8d54d276cbb50d10a5d406218fc1ab415c56c855a52678866a461bfa794158f9b0753a0c015ccbebea995eb3b1afba9b84d606949614f349b65226a9275a2c81211570430c5d35405eaf9dda26b972c59a0351b4a6e2632fb7b907670d59519833e403d34e8f18d4116d6cee8817ca19b42d12cf96ab1594654c5f5d07ad3074d33835878a773a2554709f2c2ba303c1f85d7b65311ad0d158fc5d985e062ff6a580b403fee037d66baa95ba2e8ae548d1d5cb3caff610e7c188754248464f7a2a027b343c10c3bc30da52635988d97b5655868c52d54d9b2d6a94f97f3fc219f390cce71c02c08c931a7697c52c01299a2878ddf2154aad4b17473fadd8522437adb31330e6519a1f1f0b9aa2a2bae08a767555e4212a8ff0fec4e77d8d02d99ebf1db625a513375c993d64c2129f2d63b453640da86b1717873004ec415fccfdfb4b3dbb5f66b6bfef0e41044390ee201e01e7d2b01894e4068b3f702c48e8558e24ff0e9ee75b93e448da78b1a85e16f54f12005395e9da7cfa5d0c495ff689562e96b4e7936c11dbc7bd04d11ed6a644d23f3b0b28ac18362607b1d017541cf476d43700520fd01b5062c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091cf6bbab5d020cbd95ae48b2c6b42f2d9620bfba3be20209680b4e3cbbf9123af72329014f14d7245452bfc5a6e30a2284bc4fbba14be5e73d1c989929cdfffa78ff754b585255de20353492c5c389d03d61fb5c3cb34c70393811f759437492626fda89fc903987936cf356b751fcef402954d73d65f8258a02b0dbef8db75c00bb7bf9ba24b06fd71656b143ad4f363ca552666d09db32d4c9a1c8507c47b1b9b028832a3dd29ea44d790e92c573eff8762681b8d61b573a1ae32b4f87753e1fd71013c729dc6acf6253ca1da117f6ff7b3b97e42f7aeb2a338c95de83a2ada4e9505c8fb30e8bd3b4af105caf4649c09de55fea6035c470881259a7b7d58e4c71ee88036f99f3e6f7f80c9625d39b38d9126205a3ee31a43668779989c03a36236e437d18536f1bf9c838a50f32932c416b7a21680192c067e9ee0f569b6ab4fc80bf74d8c7deff5136b18d9575d69cb735fce44615c5c44e3caa5a21e4caff1e02dcee60d525fdc16ba1dd1da110c9adbb740f8d01cefd63b0d1b14d822bea4b29f28b131521b0a04c255eb48d85673b5fa62c6c3062285a2e737952c3669669c84f145f1c68ae89cb6c4762fe5bebddbf2ea62308672bcf317f3dcad70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aac255adb9538b7ee8f6e20e452d1b2f6e8296d16af474fd1bf6112deeb7ad4ef022f56b75669390a01d34e23e78ba764621b59151869fe6413ca1329cca45b977bbb9bc6b1cd7fcd596fcc68aad2fba98d06e0ba7970451d5a3e2bdbee2552b8be121f7b866f9ac561e931c14387cb602440b1dcf0c62caced5149cfd66a44e941440434504074e4ecf9c0caf4f8cef42adfd26772a1fb27295f3f4f9fe6003fef52ad3096132c3c7ce7ef77a8c6760eb613db7735e525bdce9fc2eb7503919d43ff1761e7b3910fc314fe52ed8930c7dc8e36945ffe551cca9e40cc09dd75fe177ed4f66b867e0438e32fca1d450c3f5cc57586f47443cbc3015134477e5e37e0a732940d949ee385617ee37618cca02ccf7caafe5eada661ba3ebb0c2054b9e486146aa29a23b7313d9b73468c219c76d2a3b82810a767adcb056036f2b9eb7f0cc30602646767363f71353ddfa35736d31b2e518ae7a19595c6066d0530e5163a67cdbd24940fa9ead2c2426da3968c825b6991fef61d2d1875a704def33aa9e91f9b8e6725dbcf15edc3b68d413598af7ebc3f36270025398c4dbdf073520ce28885796d8a7aefc5e09870c23837b142f0c6f81a24203e5a1c3e220b3e4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001707fd62e67d1aff3f3c0c729df61c1957812512eadcaaf6bca2c1574eb4ab05fa2ba1e6cc788852ed70a073694e2e88943a21e9ebcf46f82aa3edcf33890a119a4cae8cd14b37104284299d9342a01de618760406567d9c0fb6866cb3fa28a6d38d8785351ef8fdaf0ed7c83b0237295ddb5737e392a0c94363e65005aa7feeecac4b8b28b417942907395abb1b8a33bee4b92289974aaefdb569ed3beea3a6ac33f5a74b43e226799defe03cc40b506fffcc3e79d8f53676ebb7574eebe99bfd4eea4bae97f9e7946ebe0bcb5fd0df8e908dbd4da522f878300f04ccde4495be465641c6a77f1d4aed122f18b80f7db6c43fa8f58eacce086ed365039e4daa662fb4a739bc0a5625f65f47725f11bc97ec978d959ef8ab90778ce3f0d3aa6feb59b35312b8559fc5c0cdb5b46b157c6d4b7243cf7d53be27da69b189f87ebf1b7240915c0413dc72c05a8ac95a02e441ab3b23bc2cbf4af21f7e5b616144277536acf003222f1e03d32f8a21ac1544e9559de01cd7e7d9159c675245a47319e1c75cf97839f81e955bb849169db4864f3fc1aabce74980f85c7ab11a8686493994c32da61fc5e9474d36000b1c224fef91e8af46e0d5a6bcbf17ff191f0f700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001845a6e88c1870021df8b976d4da736cc0b9504730c38044935b25cc4610f3377e669e6943d3e50f84ac593fcfa1052c6d0d410d19f6bacd744b2ab773d57f451f84bc2155a36d60a22dab71de2ab9184d1cc637c811034e1c675cfc451b215422b7928ba24bd0f5c3050cd8e15c6bf1440a4857dee03dcbd52be20b39df5a50171909ea06c5810b51f7af7c466fd60d102079ad399a3d5764f8dc0ceffdc64a1669b042c79db9a6c6ee18c71efc635e29b03ad2869dd1cc2e3da1b5058604e6c23990757744cf386706723e08df4fc23659bf2ebfad90f6ab266eeb20bc8c52ef7abbba41bda15450f32d51e8026b9ce6dd7c6a5323cb51ea3fd138ef944c6df5ec209310bdb279ce4aa7a04900b3f132ebdf63538f8a4a6f0368b3f8bd52772d6cd4b910dd40104adcd946ea0751a5dc54181d682072bff89607d215494f68937b241837bfee06ff7fca327ffb915325ee982896993a566a9377c91ef558bde214a87326d9953a67fb9c1ded024a85cd9358177246bdc802bfcc99c31d92d375a5efc36d11817358c6b7a25a1147acea2df9237cde8c6ab92b246f2dbaf467ce7149fce781c832292939abdcfda39806996d6836d33e3c6d297881b7307e1f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa0eaff00ccde7b6703246412633f85548b7c19631609112bc6cbbc721f430af6399e11107639374d8645624f0b2ab4012162ecc44f20d29a56a640ea5e5ba6b8a4919ee0608d6e5287f806e77edeb654362e02d336ee18372ce941f7288207ef45eab30f2c4c86d357dacf445f314d525060eb84b106731d23a2fe49d06ab6d46ceba432897a28ed6e4009f0c924ca4d8babf3a0542f9df41107dafd3321e92c1cc6f7fc8d008db2af8fed3851e6cce8f70b216d386e377e06bbf4d7926bb73d5283eca3c0420d54bf4e8ac6a39f20f5be2ff1c56db3120d268d83db3c5f5a255793e60ba949571a0c3ad912cb7c8245b7d59c24e472f9e208d0f9f75fe18febd4bfdf4d9db0fc8b34d2b6e2ff844bd76a89f2a5867d13fd1690fb8f25b83209b4114a799eb46508e047d25b04295287b9c1d923e48cb2d22c9c201979fb4a958ab8e8f8c0cfca1568e48784cff292fca3567dec949105aae07bdea55a145bad72e18570d9277bbfebbbb7b591d36c2933f63737b64a0e65d7b1aa8e1e29e533e1493b0ea597b3cc9996087e3d1f82c07c58d71d17f39fc74d39052e00eecf600e47ea9a5b53245e025a1b589a7324244f36dd8909d4b3d151f61915d08f48d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023a499959c657d1f932ec537d7a148e05f34df72b6c5d470ac5aa9d5d3b5158f825d9c61ed5711d5ce6954018e969a2a48fe847ecb6075be9c08d087558034917df84ac4cab30cba679d95cec4f3410b04dd139f4ba3972def7913569212e5fdbfc1460e99400b23140eefacd2251b56b467d2f36cdcc3d0d5e05324dc542ff2623726b8b16335579b24371622f82226a994f37e8c3c8577ec562b33f0ab477a161d5c4af4d1b1310a3bcac486b65ae47fa3fcf035ab43d4952fb94cd3f281d5636a6bc449e9db5129937076c0f0ab038fe2d2603561accc9eef01ffdfe8b119b22d908a223e2463d2f2ff076958d7f246c969e924a475e598c38e93ccc38f7fbe1fca3395c2ab04a4103aff70e1fc66c6c25c1ba3fbe1b5612c51e55022f6790302be79c1b0bf0841070768b4cb13c82f115bbad171f3d7d4645b5dcc3b54ed7a8bc51e5ae2208c605686c5ddcc89535ea15c3a461401343fecc89cb48061797b789ae75c7cdb513dd538c008c2926ffbd010b1d797faab84fc5905e9da6db1706ea3691ec696c2c3d2a8ab84e29c06ad66b8b6c53fb1fbe643c17673061772fba1ca5d526f87e57fee3b649487b0c2c66b64dc9f59c8717d7cb33ec602853e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025443f4b0274918f97d1ebc9b8370b10b57dc39c523a2ca93bc6cc11f1f867b69bf9e436bcd75d944cb9c16be1ffbde672057aec6496c7b75f2a47647dc7d4f7b7d49ae517c5ca0bb6d5c3bb9c75da633c6ceb63711809c71cc9741fbbaa5b8819601f52520f15f0e73e8233f7c63714a694e0992d395b0edd6b0467103dcbde92610cf08fdf3ceb4296c28be756dc4c4100782ec6636b5364bc1194887533b9c0e8fc062110254031efc162ee8f181aa06ec98cc8de7c0e815c1b435540d6e1230d27cc4090bf653613741961419d1352a436011ecc5dbffd43cd4bef742bcbc51f486dc1e5fe7d41980c8ad9359b990f9ed317bc73b1d8e9abc8ce24878e4702eb13224332c51b6b5af7ede8520dedb7270a4246d2e05ce6b674ab4cc8b5fcb4636f30b87c404101e4c87c0b623f1feb9c1f15d75d454167d8093c97d49265fe225776c5c00ea183e469ef20995892079fa6c90be65ecadf7ea0f89c25c87e99d11a5400bb5ff09ce94f83e4a79773d4460970695651c8009fbd4b1e9f41f8811d500a85b2f6e39ce6891a4191de7cf9a9064e6e51614170eda273acfd7548167b3177acf2e2da97e8c17bfb96eea7bb7848baa326d11332707ab81d4458f200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009fa0caf16558ed4baec5d4a218d9431e7ef40e98021d5565f44318153125a656d684602ccd471740ab627ae2cefd4333533ab11e7ebfbf9bdd6b0a91cd7c0b1e817895a6569129fa00c691877f1fc03fe20d5483a56cccb0e42689592619d2218b97ceeeb7ad2bde00452cc000bd2f1985190666d73c87c86f53105fee3b1c788228563d5ca5252005a1add11d687da2fc128b319597e65abab02beb5779b297903f8195dde0909071314bd59d9596cd4debe5a0deb7c0671ea0bc3592ae8109c4ad1aab5b9643396c83ce0fd86eeb6af6518b96225f153ae0d7ad5809f8d64f7b2385530fd8142e7cde5f6af5ce2f73507eadb86f91db8c77859f59830827cf5bfe3d5763951c8942b8e16b87aa64d0d2e93c2504532639f65185bfbfe19ae22bfe57d93370c763a623b88c7ccaf535ee267ff6833f0e00cee0bd83c0d410cc1383f8da8c7411f3c96a23d3a0dc71732eb76acbe53bb7d25727158332ba39009c783eb0b3eccf9b3d4b0e759ca0b7f3a8e5db03b79dff361461811fa06856b5635aefbc2df8136e1a2bb1fe40fb7ac40d554e666a0f2618ab07a86c35ff167850fc1f6b75da488699d021becf93bef4a52822fbb37b69958b5e7729a0aad34300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d5ace0a6b6d1cce724611c330f04682154ca51bc1b41b48be0afb12b1988d4b343027e552e231a183f4f95e48be0f5cda64f6140841e24f1b3d9da5704ef8b9706eff035f3a53080d605d5e526b49127f62a7d7c13a8f9d558a5248dcd01e4f56e49c06af55b86b3a8484b301de88e4dfe8eb7a4f3224c14ae5d9442fcdbe61ca73711164ab8129f2f0b54bf5c7db7efd9c2152d5a843391d0bca61e01cea4db9b5017bfc68244b0e1a97884c2b4a2122b4631b91666ad88d0e9449b81637fafcd6f6b586ea839b273a9a5dcf97ea5215e79f6c1b4875c417e4ea190abce5282c8cbbe5074e30ae833546837d7106b123af8424004416c9342412f3ffc9fa29fd35fb132622edbad3cc20b4abf2a829772f8f89e7bdd0fa2f4c8694f74d21ff300525f5a390959a46ab9d79dd05f88ee0d119dcd29de3b20e530a4ad405e9008c4f4949f794c85a66ae19568cf4e677c5c54601e0c4b135929c19095854d47e0f582ee02f23022ebd79bc1454278d963db42f7d39f501661a40e870ad4b3f7f840e7f55fd20f96e55ab2cbf71681cce7594f6e420a8ec4fe5bcb285e668f8a7ef64ee5512143f613bf2c2dc6c387b61aecff7256432abc774a897df7fd6259400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009944044ef059f8767f62c26850d0aecbc33b8faa8a3574515ce290dd9a9c374bc7518655e18a31267e37ea06e37ea144e13189e873ee90e0628177febbf1af2b4e8a92c2db5cde43fbe014450c8e29f6af868fdbaa35468871008509b3f96530538f9f5ab48cfab08c9fa5097bdb6163bf19a55463f10db5cde2a6e5acb03d5909312ee4e2482d51f5e12605a90c44f6e65b7564c6747fd45eea6b673c867a94a2579a5dde644adb7279d382aa7ea7735336d13b7e5b23ffea52089be1cc56f4ca51435518be9e734b810ad4226ae5f6c00abd7bc14f6086ec6b300e5999ead562c4941ab679bfd0f18e9b4c347e66f7b2f44fd81edc8629dc10c113f29077cbec9854ddbf8f08ee5b0bdbbe0ae4fbb4f8925cc671d0c15afbc02125d8ca5931c1498fd4773937cfc454a0ba92b57159e6c1fab1c451541ab94cf186ca73c797efcca8e8ee85faa78c81cdb24559c1e54ce0c56c9785ae2e1b4d1ef804b0e3c264005d9879148d8c1965f7d5be0592e36eba433888bf65b19b690a1e716f293b7bab4f9429046abaf9cdaa9da7cfdcd52af3436cad9a26c8fceff20de62802d1707b3f730a26e794a9737358bf29962e207731200bda6e9771080808e8033a1b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085e7da41e02c551b608a9eb38a29886507f6ab9153383c99c3fe367c2997ae66daa84bfc33d30926b8e0b95e284a7f4265c914a1f53a3f62a5e216135e9cfe2b6bb66483a841b481d1f308a930bbaf36602a9e44e403c142c5f0264c725e787e1ddfec7939cc4020faf012b5874a32fb9254928143cb3291430df3f12aa96f8c82166611a93f581882e492e04b95bcca02b291ddece0c9c4498604f116c03a7e2d803c1d8ae51e27c2ad0d2a161ab14448ffe787c6b80af1bac7cdf96b638b5c037010b1d7aefa5436beebe5f7842f36d39b738c117296954b5e90c52ef3da573f6020c0693281fc00463ffd0417b740411af14fccd3e5aaa44d73c347cca7cbd6cbb3c8ee771a5ec7d62fa89ab30b72826bb7206da187e3654f0497487af16dfe1f46e92869312c177073ca151e389b8d56648284a714781796f9e0119bf9d6c402dd2b84ff931499259279ed0c77f54a7598a5ceab189c22aeca1fc605399fcd7dcfb68fc010de7622ace7400321aa3edd7d0d0676077e421c0599ecf7f24e3698f54a2414ca56b888dff94b9f137d8edda6373d7ad181effbfcc234ce3408552cb7c7f4ffc63361b387831986c934b2d894d789b3513db0b8147d008c0a98000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088ef9eba652ed96b79fe8ea05bee5b1488c6e49f85b01978922773a120d84431d83f1724b5c04902d37bbe231e6daf22309d7deaf3d1888f835111f5bf32b477b2c1ec00413e8e30b4f38b66e48a295ff5479bddc220cbf0414c71b6106c9518f2f22e171443c80bc900e7f240daecf3ed4e526d5b6cf5b740659f632e77a644ce289050e7e19c4bca35ec44b16068dfe2d58ed83e57da77b85d034a3a15ac9f104b8a0e1b9465ca53cadd17c1ce13958edb4711a9eeebbd82edf98904ad716f20bebc0d16c6b0adb6f7df26427723e80c57be1bbc09260a7b6a6cee17f132e5052fc93f49ed295e0615792cc1d748e2dc56b1748fd4eb0a734b7f18b4fb8ed257e43566a848a18bc333941c0d95083b01a32fcf545dc8b6be04f003685e721d2a41ca19146ad4be66578b2b50c7759a7a5fc737e4f116409db19a43a3e46502450a211f251bbed4f5254c1f1adfcfd4049e10a593f3bbfc5a3e18f8ffd30ef9614dfb2af64248fcc676900f0899f4550b1fb1aba85100ca7a767853f56899447c59253fe39a76bea43bab64f295faff5352bc3d5b4b08cea9291afa5b5944f83f77fb8ad610528c62f25e399464bf3175944ff63b82d25ea66a2173fa2d237e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2ed1bfe588ffc536549e8026d9bbe24cff53952ade775253961d145259add0caa65f712f92df148ac20581dca2dbfce4a09e9bc1d41befb791087c254b50048bd03bf940be660f9430d1f3aa0f0c50eae129f4e628c9a028237f3e57ca017d8a6c9be39cc75b5937ea21c03389188386c546eb1b075d4232e029a91ad091231215576b9e02eebfaedc83378e5ab0e6cbfbc18b1a6aff48e167b8d55d40c887da104f3b69136493eeff1ad4885fc67bb8b75bffcdd6cb701ad338eb6d679b8c1805a3cb9c7294cdf5017c809a4b7b636c7f58dd732bd862580899b9c9fb97e5c508b8f0d3ee88af08a2d7837b1c787366c3e0c83b987769d7abca7ef008ca52454ec55a7bc8459a340e7ea29693325874b9fb61f8d60a4efb815bc5f9e90b985c4250ffe4b4ae2df3804969cc11785428a526d6c00ed1c275d02f6ac6ddcee9c1557f5b47d817609585d5e4380e0ffb4f412c53bcfe2847faab928f3c404fdc46f10ecfc17e3bc5aeb78896725f3afb4b831ad618a12f94cbf64914e7326adf7c2f8bdcd1f818a21d76a7f136a68eaa075816f87b018f826fc18fd66beb1425430559c63c46e4f644ff1879f9c11a5d5e9e8e17195a41095a116fcad74dae16c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a0b04e4a2bb6a78e0cdc4c4cbe550715d6f52ac2601e806084d584670288df264aca4c8166789d2e8ce9a87dc8760b954bb0f0d0cecb42ebef1abd6e46ebc2ce69b59f0a73184839a5924c7c3401fea372fecb7bab9f4b12d9ca58261e577d9ef813d0ba35fdcbb6d855e3f3d92d3ef228acb3e6807ed4fc874fd83b1d2c5998d6fe473b8cdc6b398cd1b19e0c423213d1d1051fc30607f9718b4eff505b90b31639a2282678def21f9e03c10d4ff2892d01ccde99b386eabef747464b817c9e6af5dcb3ab4c1b2261583ff5ce390e83c4a0dd4a4a0805c153401fd4ccd073e9f350bde16f68b514dc65c44153ffb03739ffed726408792aed9a67ab292b0a9d4f0823a093c80097c0f36da5c4018301d33af9742dc90a9f6dbac838bc71b399e1af67534dc00a2fd91aa859a9beb3b76414bb63822cb1ba62540fd167f5a3e17ecbf5cc4c17b90c442ebdef432edc9ad9cc574cdaf759436c86147a9f6f536d7776d782fbd7a050a4c14e88f6b832d580445c70172339befb31948cc4e5db4c0e17f7e1d5e08087a74d80961e349fd967ab1dbae5bb416d3297962c2958eeadd30d282431b22450026558fa23462fab9c3429b8d11ab144c62d620ac5b8a0c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d916762db4ae3e6ba395398acc77957dd3c3123584f8391691ad136856e6542dcefbb1efd229293f470f8ee585044c4122e3577dd1baef4ff9754e1b5bf47d64608f0f0f0e950ebf1d9551a228cbff31e9aa43af520953954ee6b86a62cebea090477f98cc1dc5f168e07e5566d38bbe45d16db58e38363156cb383571d7412b305b645cec320a207e407ceccf30fd38447a3e86ca82e919ebc029b253c32a2638418e4eb73321292ca3fb94e85656eeb0221995481a3402edb98add77a7dbf983ae7db4f39472bcd4b34647a36b9caef73fb33c5a7889feac5a856972b5a3d904405471d317f45ffd0fe4ac5255d776d08330e62653672fd0962f29b360bdbb0f4ed4e648275e9f6a48ef4af62ab1becad3907455d15b6a46338e27a8508764d9599eaadc898fd4540b455632508eca5ab9ef79ac19dd20df1df9f7992768e5fa94f68a40d44eed28cb75931261786d864cb83fe32b55d89d9a58118dbedd6d4a74082bd77bff00cfe7b87bd95dccf2394f839286857edae007d8bdd7b09e4a1194823cdc2738c3e0064c44e46dbef170d92923a9511cb6e033a9e69a6e573930763aa1c0020e30a4e43bda30b48e716e4a0c4728e44e86332a55f38e555550000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000873807b67028f8c112ce89d49cec63f54a93216ab9ba8ddfd81d4bf05a7321ef3d6c7c60afe04b58e64de2839faaaf8de7861a4c6064e8d44fd6895d24820a2759b7bb530099425fd9bcee4b5c39e8f17e28c8d654ec8d4be26ada0dc9580bb33692a17b3a3099711efbfe53c072b44a4d5733bd98c904e4e1115916a55f6650596808a159c04a3e97daa345d3fa70611f3491f45a6da23855852b80de2a46cf250933cfdee7b80400671760d85ae6b99fa5703783c9e43c148290d7fd5706adb7cc4569bda509922173cd086642db8810ce29f1ada50cca31e6c615094c88c8597f1ad4d05f00ad4363cc9c50e5de0e5f729162cce7a47f40d374eb10ff390a3d53e8399c0d149cf5f21d7712bb8f3ab64256583d49d3dc07179e6de3d247bb7d5d3648e26c648eb057305332d731d5c0879853136eb47aba393023498c2ac6f31c4aee86e6d59f482a1a3cb0fd518646b2a9d84a960935171f9de00ff27adae1d868042c48862bc6e10d48ec413272f24ded0f63d4360955caee1778fa01aa644e15b8cf79a7327f8b457fb632271f588bf031dff158cefa3aef9bf854cf68c93954e409c129f3b49817b41b61ea779d2226f02c7f01d09b864f9a80e97b4e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085487b9f298cd26509af2f65944ce23c6ad790314f12a0e6ae09c46548f7d2f1056e8277a1adacf99b9be61e3039570ef8ce1c39ceb227b2bff287ff07250eaa26eda73132ac827c1a7f312abbaaa284b374604cd5c29b08f57ef08650f638d52ffb3f0cd74dafc16b90da41561c804ce055b8f03a7a9807792a07625f9c4556c4be251c8fbaf90121659034391a83beb3a21d4f0548185a50be7917cff475b3b7c3b7da9c448c420337c77ea78f437fd994d81b96c28a6451963539bd2f73e155c397db02c3d1c974583685921acee2bca5db33f80e3ecd8fe3da9990796b254d201f9cfb8e9cf7c20819b5cf8f9d50f71324a5d655077c2659235ea36dd4710fb28bc229ba86366d834c363e4c8eb393e8465150d5c2d9867962cc50f10cb39cadb34d2b2ef8b35d039ac1dd61db6156d1847c2cb9c7c49f079ea2943dabb7d40eeb7d4c007cbb18fe3a37f75b431b35d639d1bcadd2735f0b1995f5c2534f2a428084d7ffb4ab7318b5cadc896d38f69d80c6fb11b510c1f62e180a4470d902075bc5671b0b11cd69cb68f6a4f56efc275fe21e061833897af99aa56823c00e7dc82ccecc5e239951c1df0c88d6bad7cd2d9fa22c114997a64a4485ca5bbb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ef68535adb8c8c087ad7aceb31e25955e79eaf47794bc3fea03608d8808665f147fa28ee8af5c03c7fdeffbc199cd7cd8572cc9870161a241051c8b0bf3b58705a2a862eac9e55e8d9f68f25a7453ce413e53215cf510dac7966f286a8fccba69fe20242f6d8d087c6bb591656256c769aa18850e5aa13916ba8e8fae07a12081ee94b844fe327c5ef79cc3d24d7661ce95864feaf9f62117865cc34cd8ea8e5c15e70cd9bfdeb88761ad14de1611b1b45edb81c4deca8ea908b027463860ba50dcbc1c6e2dd31b067084c42027498497c7d9315f4f49f715b9de136451cca503e9226b7b3e3563ecc1333f862a374ee31be766aae053e121cd50344f16933c63c46b64fb4321e90adec0472e4b4a1a6e2d8d861e6e4f15207e141107c5fa96c49b927a84682ba86528b7a151d91bb53d08f02f158600bdae2e6ecb4b93c9efa410adc97ed88416bea4e8eae35acb20487d3daf0b9df3f6e28c5f15fb9bdc92244aacdeacd043ed297a2c45864d29ab532df49db8c6d2c448be2e641688bb1316880ec52a0a501d3e58b292dbb646280512efa9cf177824f6e172207672fe9bd5f24c688109d23398ef0cbee30288533c75592fd411f64291210a4fd61bdb1700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009090f938933fbd685b86557fd12b9a6326afe9666a6d520a9711b2b780b04902881f871e40081be489e2576875c0feaaa29902a02066277bf6dbfb09f4a266840125b943cf7f1e13e1496e0bd6bb76ba0fcdcb55372052efbe816e0f44246de9611f379d8b1499210ebb19f713024be1a4ff85ef92cbc3fb2e706051e811e24603aea1113a27cb341f2f37a3284f7637a417cd9da08c61961a240599498d1826b5a08a0f99ce08db4d675a9565ad6ab225044e56b0d21875bc9d271e6c099f51c46cde1c6e55c7411691a95f5798c280aa9016f629a763d0b5798cacc5920c83f5f9361f27834706db8e4077d2247fb57ce4ed98a6f6104d0ac0ee6c4e19f47a20d6f5e9e41910b07a00d0560938202a17886083863122374d92764d7b6996db5ce0356dab90b667cc69f56757090cfea59ec54dab2ace7075f833097ceec6ef7b451c420b32b627c088131853cc07f2e1d248c26380831405eef6e3077757d8488db5f7ed10148d9114ab02208304bd07925f9111737e8840d3f05cbd4d7f85f61d3f0b817802d68e62efbbeecb6df13e731655b6e3ab57a10ebaad6d95475e659a1d5d5cc0bc8160a9ffc8481d12451896608e04642e6e6e90ffe859e806ea00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f72f0d1b35e4b0b89fcf24669481373a33a58ce8771650e45f88cb4697b160e00cd1c9e8d44bd9e180954d3526661af2c61ea6577f856a33771d04342cdc96f2b4a1ad7f9ccb7911904ec16c2d099c2267e8c9b862878163dfa68417a8a861fe5d51caa061cfddd95fd93d1d2ae2cceeb1d8179f5979106f002aaba6b9ba8b84af5ebcc894dd3f737365ef87a2b5729b2a49e868fe1bd11d6b2767c785f2877c771cc9f85a03c4ad5d6a9fb7b920948e76bf8879d7ff8d920ec44e9c4201ff6f69777487fac5e2333fab786918b87e8a35ef62046f99ab83500a776ad5d40329bb9cff9955a5a0067d6b506e96fe85784080a5cb23cf03b5d4c2428f7e00a5519422769ccb97806243599ca0eab9a45d36455552f802b6d1b073ef04d7b341a4d7b3a6d251a34072165ad7537ca097268fedf6925c4bb344bb0adda8128d8f4efb5f4f38d5caf86aae01c48740576671c12531525283b18baeafc1b107f06081f1a40f2ed1aee383ad5ae2f61365c384411fada29c3e297b3d724b4ef00907d4fce1e191f8468f70da3d0e8a581ac1b78e000566eee1e37d398755389708c09de4bd80038daefe81f385c05c8878f01db1c08f33017cf6ccfa59c5392250200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008727fe2fcec6e90bd6a2f164b75973e40046f0d837937401954cc117a1d29bb702d0bbb7748d1b51011bbbc2593fe0f02e15612b899626f7a27fb536a8035c5c71b4420f2f6f4686238ec0fedf662131622f5dbb193eae7044461814b3249cd464005ec0fdf66765bfb17dfc2d25a65eae23a6e0550ec0dc416bcdc03d488358741192d80b5d9680f0292143887837e2a067ca7d9d8e38c30ffab02016a6388b20ddd857ae7a462417fe3138968b9efde48c5636c672e15c45a0f1dd998aa9b6169fc5ca44ea9341ccfdd01fd770dec4ce1cc87e5defae80fa0625b20d5c03dbc5d081cfbb4017ba6195a18eafb35a1506b1b7ef23ca977a847b3fbeb31912ffaa763ec7811615ecc1194fc59ca367c542fe51b768415bc75b891a292b85f039e67df47e80e485d5a6f268e08eeab4801976173ca931d8b88972c62e49820b21c06cb3256bb5cdc1ba166c413d41e58a61775e12e4956178834f754a19ffa6cd69c6e305ca413f5f2e91df2fac485a6f1a2bec255784e873353c2e51947fce6701a9ee9fdbc3f1afa369a8a6a9842d47dd722a5279584578653cf6b3f8bc0a97d590182cd7e2fac40695dff8350b4395c903efd7dfb64618b34105d79291d6d500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002555d1eda9f2a8b5bf1e2ff052dec40dd815a7fc2dbf76f6ed0d6d20d0b6ad92b049a3f0d741d146c21880e4f0f7c77eb3644db95332f696e1acd1c0b95b5fe7d3fadfb9ab1b349daa708525d4e3132cc6cdc8132e2259eb000b7145bcee0ef1cfb3fe4c6dd7524aa32ce623517df7b74feef9cc1692a6aa0939a899576a732b6c2f969c8f292a9050213b90626016fe930ad7b8cac7297a1220ca9ca1e131a2b2eaea5e8eb0786a39ac2fb93f20d3f2569e709eade1ac25d97da54a8e7089a70fafb8050b98e735bbf7467a30187cdb3cccb7842049e479d626c65007a9455ce371d05dbc2bd22e13a861f9327c4126139e8eddcf867a3598be70e755f6eaf4826b88bac67235473e13595506bb9de83e634fb17bff1e421ce8951c146d409dff827ce0a7e9deb3548ab5c055a0579f909337337c51780627c807588ab8ef73cbe408a382ff6c2a974d08ecb4167919a7e72a335b454b572b33484075c7305a11dacf2b169d4516f71b230df14f27e2bdca4ffbd651d1e4fdb9c8d9fd74f729cf2c87fe8ff9918cacdfdab566fdb964807e19b29304c5acd79c4640fa151293b75b43307e78414ffef01c85552dec27ea231fd5e0b3803de91128330226695400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c38e0b4b840d527423ea4e81a982e27e45a23f2dfed0bd307221b24fe7189d4c5470fcbdcd5b708320804011e11be802767efdf55bba30d5c05914442da69609097a0592f8dc24f542c5d736a8ecc1d4b915ebe4e0f50994b2550ec3f91bbe0a74c5fbad73089719d756ca2d1709e04780fb26edb7b767f29d017fd71aa8f4f92d8a5e1702ca0e0c2f304c7c917661525e3080bf4ea88302e661d29dae22f60647af06b4ed841e2a8a1372d49d39b58a2622fee7fe6598dd43fda444b93f41e55c817ebf03bbe128399d4a48087eabb3ab87439f879634499051669e4268caf9ea1ea16143800d19888dbd09e05cac79dc8c49ba2e9b098a6a2145c3586cfaa8c30127d45e2662e47ae539b74f56849f8334967861e69c8338ee66e99f51e0706ac45a75d8811a370c6e4137acd8caab5e31ecd58d245ec60bd3bc5dbc9afb6a5cfb9cf2f998e84c52e55a5054737777e5c536ecc3711f14a67e90744e30bfd0a61224d365bda6dc74ef582b5be12b8b9c5ee6e2982497506419dd59dc0cc6b2e1ca54c97d97a71608b9ef9232ae2b0630f0eb4fd64b047fcb494f8ff4f0d9cd3c7c1ba21a025b833036f86a1fa3a5477334f4aaccdc4e1ee51b429c8d0ea03000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001708a15d831760d9ace4a07a671ff55bff91911d667d1885a332aaf72551dfe1fc42b75cbec19607fbb049a6d68eddc282a3a63dbc10bc38b2ace8b7ba6bc8d0677c153beeed360ddce86ffd98f64afc98e35db138476ebde88746f2e4b1bda600b2c7bed82bcff10eed76b643365660e1d5d447c16416f5f66316fa396eff6d25d763120af7fd9a86388c1d7ea49dcaab467773412470181463201a27d1867e6197da0b703670af7d927f951ce9849546efe0dc19faf64a88d7639b9e1abeed62a11c08c61000b5d95486ecc78b55e7377623dc5b999cfb42fa482509aa65fa629ff613f79ecddba3a57caeaa484788b1738045188b2f9a22ab0ce4b2a4c320c745a0c4ce72101d4a2f4299f3750b67253d1e014cc4b296b18ff151da95ad039116b0701dd3013e47768161cccaa086130879fc404d0f495dca7157f58da3ec6463ae6e64a8114658236228ffe9ef728d2a1ec802157296261bb21bc5e4c86bec2f900b3cfcbe8000a94adc996d66955373ad8dfdacfd7dd3a948cc3a71e59e401e84018e195eb55b3d19cd1d7e1178b1351f758ad9409fe41ee9579359a0b426a812e31a239b789f50ca08e8946684613455f1ebe6a5d05ecf227c06be31600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008440f97a7539a56a95027413b4b0c289eb8dc0792e0829a59e64b905eac67dab46c2c6f03544e00f108ba9875d6221be3a117a11f322b314c1d3ef9829ba017b2cc3e310d11ac3e0d789ae9504ca97ab886b62308efc370cc07a4adf3f33efc39bfececd3048469ab6f850c2e495688380cac1cb0db8d25954f5a9507a4b47b60461d6105a77c628598e0d67f6ae633bff835e2b5139d7381702f822acf357dc7465f42b189878572bb7a10c7fd3e5b6dee75d589393a32772270bdd91eb39a7ae696e8771c4645c0e1a8a7c93a89baa84aeba6c68036962fef9abca6309f8d514965b621c61f5dac087172d23dbe4ec4080f21955ce62559e1f84fb98ef150102b9c5ea6b5afb37584401353c55d8f4523cacb97d7e5472dfb8a4c0cd3442024307be08d8397ec4dc4072ba13502907f4c84844337ed958a1b779235bb8d83a7773d1e3bf142c676211080393c2e7704b2bd43105d915cf7ee3d2cff85c9d0e86ad5f889fe2273dc2473578d373966516ec2175ccf2b875a3a80d0246eeb922540ba531218cf0fcd8c2907e43c2309f569e7dc7e33f43059db0851f76948cca75e2ea0325249f65420ac4c7738f562a2100d8116afe6353eb14532c0bd79cc000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c6bf15861de54f003cab264ced981a44eadbae68e6948b2e436984f7c0c04361d2556e2a1be3dd1bc443fbce153934c8886009bf69d6e5749525580eee13639e94486e62d93d0d28c9869c040ad1c718c5362d02440e7b25bcddceafa7a4287e2cbbe85331cb57508723544664c3b0b5ef8a444e8cafc8026a0b6aaf44f43b62d85a739bf19b82a7badd0a347dd339246b70d729b914f37038141dda7daf2f3a00fe3caf8ca87205a4de1c9d53df75e99d6d30b779fd046f00a0bfb3c8f653d676c0ee50d871c2bfa968c3c8f26ba630fb9cc2307a1783a0dc0d8823fd3280c1282ae88a156eb90e547e39a64a01a581cf87544e745d679b8a1daa1d6ec4fbef617eedde8c42bdfcf0a447f53c52a053115cdfe5a4acb7724e7c9753ff60bcef57669b7e42c9d071c91435f9a60c6f10cd3b3d36202d8bb99beb9aa0fb62b9c56ff6a14eed6b2aaaf002f2be8f454db883056358a02b8c761bc02e7ada8b4105e3db19a12b54ea913947e15ca6c6c918f8cf5ce049b553c874d1df41061b7a4fee54c35fc4f6d54a864e1a24e138f98d3a038058c3d8c0bdc7268444a3a750516fa286bcfb9beb3d194bf1eae3ab19a9b1f600f3268801ea025e936de03271b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c24c10811ba6fe0916ebe0804be46b4d95e83b7dfd04ef644fc03f40e14d2bcdb78998f798b20b3058ef1b7f37eef3e424b884fd753cc5910506226b6c09582cc0112500c7a057bb518cd276d4780be10145d0177bb927eaaa5d45f8945fd9ec6a6352e9795577e9d61459460c0d0eaa5c3dba69855b2b9f5395e9c3262d650f76388eff29ef6d53886a5d825fcf6a7604af816c9c63b9433cce670238c75cddb1e3e38b4bb5661c8eb21458436f616e197d5a9bb263e7293d95d9ec92307b338babf975f43469721d3e985e4355d7ae93b4657a094bcd58122dca83f2546d6293c80c243a31ed094cc5f58a4caaca3eaeebc4b80e6894f1398df7a710e7af5f568270a745d160c73c21e57254188247b5f1404390b75f8df81b33d9059cb736e339370c6fea2b5f6af0fbe1d9347aeb738e7a8c00da0775dc88820410d284e7168c9de733a9d373844066f587fa01dbf2e7ec36910b070ed9b9a290c4e4f7784c18c6843814d85a32a112c692ed806ec711cfd194d31c0e830515e3c15b43924b564e5fec28d5dc42a7c36d98083bd92868eaba77fe17de221645d90aa163d0f2cbeb4460fab7fcd6bf11050cb45655a69f24cf517aabea81f5fcb94c6003300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009063a250517bf6569afdc257571b9369e36f95bdd010d31075e027b6bb54b6e68348656c4a3c59a4187c9a4573d68f093e4f5aac78444988c4937ecda3e79819e1cb4d00ee03f6af504f89b96f6740a89776670db10bfe8752bdd782f0124d4481ea89eedad9bda130e80c61c773b8047d1426c1276773b82e53df399fe31bd14d7e1df1978fdf7bc3ca6200c908020f1056da66a454d34d85fedf725016c71e5110e450842370749f2f816888a8eaa6fc0b9850a440c77abd425a2786d1303c48d9d071110368ded33ba543df94457c76fae11f55809f4b76cbac30c22fe38fd5ff7f1dc72152793fe0612997853809913e3f2853d4c21d446ab86b7b840e0b9eae0fdab1167b528749f5521e783a32c131f2219070e6b1a51400dbc3e682341d40c4031bbfc278c1a9162a11c9516a5e843c7838ef54261b60bfcfe602e6a44ba3de8af0ee06bbb446914639a1f6d29262af433d965e74abcc36fbe3bb84465bab86a16fd3dcdfa678ac90167ea7d7772a923961993af4c78f426359f33e980da91a89b36e78f3b6e101d6a5d3093c2fdfe480ca3c1fb27719da55e07ad7e39b2bcadd2567ee0925510d8af2a731f8e97cf6bc76305952480e0725875d4a700000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0809ebed5617b943a6e6026e6b70971366b08ceee958d35f0dd5dffde5a973ddf21a6519612f05de3ecaedff5f6a104859979f289df720fe730260ad92bbfcd00ca0fd00ada439c1cd098de3ccd228927bb50562b764942b733026c6a5f49c141429b980c4f40470ea589b6e3bf6029b9d19ba051122b5c9c903eb18d26f03f2bf1b1474334f04424e446125910f764d6eb08668dee623841d485f87eb49c85eb2cbeb259493d80a3e26e93b81ac671a9c5853133e3b0dc74cad6295e5d21844f3dafbea441d642ce36b2a31aefd0f0cd302ba0c39a909c7308cbc25c96a2dbc4997cad77d524de0d4ce771b5fb582775e5605c4e23c281f466721592951d51a22fe41f0e0ce4eb5a0c99f25a9b7ba3d5c188d59c3e2870cc13633e3cc6e3ead3afce2d1e6dac54c01cf246d596a49573c2a178bf08b645b0519866fe399f4184fb48408e0b4b1ade2739a28877828180742e048da095f1ac3a4af8d3ded43e22fc3de28e4119acdcd6cefef9a7b58522e5752b3574d11fa53663e004be584a10dbc6b336eb65e947c668ac5b1a5f3308a34cbec0e9def1f76a5fea2fffdf31c600f1db376398a2261b478c351f08d2fde78832c7ae43d5ec863397abce480100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008def262acd9ce08908f370aee9750173a7cfb6ac48c699cc1d01f1cfaa611b3c96c19e962e0bada8b0ca4862014a51156a9aa7ce919b005502c48644f1f473fcacbab5a0cba961f39ccebb6ba14ed6a1881ea7c7f26e1bf1a2c0860beec26719889cafdf507f1879612ea61134ab81e3082601cf3c2f3d980d09b264667f0cf438be87f6c1765227cf38d39a0db0c84fa413f82768402027f2685c865915f0e6688779b0ad4a5056ee71687ae182fda4422b233988e54de54956f7c839c7011a4c9c09717cd0e6eae6d9c328eb3a538d367b6136770a1471933dbc0107f504834e7dbdc699eb59d389c7d6490ed67ce35e507f95a3dff61ff6161911027cbf8da4d02f62472712298f3d16c897084a9e56f802e7f31cac745db0f0d611bf5d0578a416423845a6bc9f951a5f8501c81f4988a92ca2e5716ced4bf4f45bc11cab7b0403c31fa272b0da51553c62f2de77fd42637f49c11419cbea1a4255d050bc7688b7c7702dd5b70a9afde2784385e5cf46945191a770d586414975dc082bdf6f35eb4deaf4905b748027b39621ed8c5b80ad862ec579e2c923bcb8795ad59041e733bd86687675572665dcfe5494fa107e10ba44329864a5bb00ea397c4b9d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008dd4eb2a05fc8c137b655d28163eaf5fb1718de1e6b2238438426755e87d64881a17f6a013971c14a24cb4e3626d5bd660ff22e486bb7d7968adac50ef9e12f598f3d2e4d9697c5e08828abee4805b279bec94f3853bf1d57152b5d9616335d28f3b1878a5cdda25f87a11564ee9cbe483ef49666291230799fdd5c22596a2fc0111e5e892e6dc7680147acd5de7f394f3270fb519ddadbafd76bd0712018c10b1fbaf99e05ac31615e1146f771616219ade755cd6cfd5516c1ac28cbd16e6a899810198a8fd94b83530c2c9f34ecee6773a0605160026fb021a9aff123661a3746590dbee6d067cc15314117f2959b1dbe5352eef723364ab8d4e543e3c16a2c1858d6f076d7b1a12831b905e40eda46277d6abcf2ba126884988807b94fdbfb653facac06dc7f961a8cf56ce6b48bcdb09e862030d421a4eef16d3598dfadf4e010aac7e4326b637aecb7c22fe6e5d77a05b752296953dda8b20d6963d72d8b0562e095b37ec5b3fa7d116472f6e3790d2fe6a04650cf30d681767b9132cb27d13b52c4ecb6e1ff1f2786e4541869edc7dfad1b7d8f7f1e557ed56bf968e1f863ca23c8a220501a97464ebbec29290f509578ec92f24b23f496f8682dd2dc70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e13e265c55c0bfcb7aaf8943ed21dbda329502638eeeb4c5f219a5b5ba5f278d36e6c3d8da169db1ff6b8999c4a58cb37d26b74cb0c70d2f9b15dd23461fea0dff2f090296611f45c1b427fd52eb2a969e5db81cf61215faccc86188022f29ef2ff37b4e3ea8ee04a9e254420928e4e09baf9e85d191a6f0e7712b0a20277decc07d291c86e69618850dba87e240c9adce76591e8c1043457cd6a1558a775dabc3dec29f685ebbbf22cb677c0db935007225928d04aca3602015455cc286adf56b13ed3c77025d086db211eb9230b5399cf5687d36850bdea0f8397615b4025c61c0f8d97984020bdf58dd8589d1956451376e611fe09289c00f77264d56d369dc80434c8df7b7a322fa0235f76e8753b37f350710383eb7e16eb6aa0fe2910934a1c47f4dcd910d21d02804fb9b528c686f972e71d432d828f3e152ed8c0f6f3b50add7cce6a8a2ce9695a299ab5faa67f0bf0b610fc759c0fa10fc3201fe0252f46db7ab018e52e7a7d217c0a287051eec6a63111f402bc2459355435f5e2900b67a5c968ca6e3866445a9e2a771c4c98ca5a5f5f5eb0c4048be72cb9bfdf864d0ad758cfbc07f1b40242aa91c695579214444bfb1360c758ebfd4b256a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015b522eb795c2b8928afd334b67de1d374b5c41ee1ade3b93af49dc190a0fe2ba964aaee53de2762347641a0fb3ad3bdfb4196eb02385e2dd73912a8cfaeab346b7b24c4bc681f0e25c2bf02c06d127255b5533ba6f2c12d7b9d3cf7e1d729d405b408ac8ecb0fb47aa77535cb6fc8f8c6873f752cc63abb52e41a0a8444fa62286ec8068753c058ccb6de4a24384a58eadfaad1eaf1e61b3ffb2a4df413266e88aa8c4d53bb4f8c99d60af6908d9eddc2dd1cd1fcc7efc45550d6f03c7a1915df473050736ce38ae87e0169b272eecd1bfc091f7ad3a85b5bc7f04330bef11de048777c657c7289e356c7bbd90000503f5a907012f7ec956f2f1cd057a3844f684a54f8f4df791733335c559834ecf45d3410ea173de525eeeda735603aebafe1218520a71b1ef2aa2f6dce45f4e5b18f9c5a614a455b93ee47981731f45db1a3bc4d93642335f975c5e44c644ea0df1d8889de59a3bc4dbe320f5d46da0773b53edb5dd2f672cf6660fcdeacc67d301d494fb86a21c301b81cec51bd0494ac2160f977705070c8503d43c6c93ee1d1aefe5fab76eca9da17e17fc9ecc96ba0d472254d18c2d7834b6d6d07fec6503acd3ae4e62acb8339b2b3a7ae5414c9b200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f9794ac8d37a49b15aa0b7a97c3f4a2771d45d9f855c71fd22a1d90de78e829b32ad0311084331413b767a7761d8169b9f76f22a65de44b2de53ced435deacb6fcf88a2b563e791bd40a375999c5a77b4b37738f0e5912398afde8287222162c027abb4293715a36a627e57df651ec1ee3baf63c272ad9459215540aa03bfd13cbd26c83ba2fecadc0131f54df9999703630a09dc27c00cc002c40b431178287c250a58770089f95a9b30af43e17f1fbf4fa8ce00cc7c1833d71534b91bac363532a0154f87caf1791177f2a833cd523b19e65606960722cd35b5a744047b87aab838c2645e4215131f551d5e59b2dc36d9c109e44ff9bb9fb6e566fc0836e2a63c579ed8c4f77769ac6265acc811707cc09bb452de42599955a2545103d8d27d12f3de1ab5faee749d58646a22f2bce25c7180ebf63bc7952a482e1ccbc41d162d14847913066918199e8d1713a5dded9765849e77be8b2996ea5bb4cc5342c5a1a97e833b0d13c3a60b71f7737f8d0978709b9a6db8ef710c81aa6dfca0f4990393871d5cf1fa9747b17df7e0684babf12eda864f7e670ac7df53a21b4c9da62a204dc11a4c7daff30e9156935042912ed51b294efb00285a36ed73455b2c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e120f63a2573e7d0e88266390668a73d261e1f4d96c9b48daf4e80f73b4ebbbab41612e0b81273560598d7b181ec6b4cf7d3d69448281a8b8b1e2d760f07cce63ea8972d1fbf007dd49e090bc40ada1028f01749b87d14ecfeb621871fb0a8236eb59c7be2ceb2ed98da8e62d1dcb55c835c8fd10bb3547a11257c16d3365b0537cf76b32810bea028c22ada55844a363bcbb268fcd6c8800338b0eecdb8f9e3f149c23c6961ef55524e6ce7171ba12bd7b8b0906cdeffacc0651c5fa6c0ef5e26fcbca2bca3734ba1b73bf2385e228f7885f66ba36cc1980bd22a84721af03ed16f9702d617fb7c022348683d9a7ae192d6f62998f7be97ec2c05bcbbc6cd57e1b1862f67169426d27cf7618fe23605c3aa983d34f561e8fe5354730448e8f0711d9a9dbd9f92c6647b890225372f529d95663b03b426fd44e9714473ac6e8fa21c618c69955062a068f0bfb02a27aa47bb426672c1ae2cf46816205e75c39ddc34a4123f77900bdd19b77d5900b64e2f0064fed58559e7ffc201e500e63ebd6397646cf0e730726f4404d0634c28f8becfb79b7783b5dbf1894fa5e4ea2a35ec5c3f7d0c43e2761624bb2f57025486185a17076d3df5c10ef52cd9c7f0ebe00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c472f235d7698d84de48d5a9ed38c4ad6249298be7fb8aa05e95401bc5715d84261d30dae924881e4efdac17d9188079fe5e936b16c5c1ad4258cb60d96d264a4ef31267dc9e6523ad5af7f6283626f50caa5bb2113ff7e4ce5e1547f1fa22d932fdffef44bf9aa6d4948fe6e47741cd8059b0c4a99e81d63e9bbc266c441fe2da24161e4add75b5cf27fb3d7c6c53e01c9db926efcb98d142286ea1fd1abf6abe575ef7683aa83cff861fc55c823b92b5e211fcaae747e5cea6e0a8c6d17ccd12c06dcb76475cc137bd0b6737be3343908461971a02873b82c567a7b115d3d6e3a9bbddbe0d174b464bacbb733ce1ca7d7bb996362e91a6ce18feb7d3688548bc77be512125efc8612567528dca7e0fb07f9d1cd1714da159bb4b99d961df0ced8e8405804ab8300891dc5f2bf714f6445510bc6a47d0e36ca2dfa96fc847c673cf32fea30a9c3a6957d8a508895035158a20e9362019dec2ad04f24570cdd862d75de79448bea04ccc37d9b0661b25e5c8c330a7675f89994fbdbd49118d36ca2df95d62f8c258b9e311ea5290306e699d724696a6b7671d9e278b91edfa7e51623acaf85e91c2fc0834f5f41b60111f0bec639d9a3dc2e5f6fb58defc8f7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088602974a2f750df6d72e0a162941129bc7d1f82726a275c85c399b9decea3b67203f9dd9b19b1379ff38f2581682d4694028ee74fbc206dbdb5a4fbb2cf0fc7ea72047a2941718fcef0c7cc3067baa991c8f731bc7cc9d1f00e25bf24b47481c6bc83f921359a763c9cd14242c144b32392720dda86a73a3e351a67c42d4217f00b43e438be4cad8800082aac9b679a119451702c415dc30f0479a901f83014f1dc8163380a3fc05b3056ffef1cfbfd1755707ca9b494587b2debe5bbba3c70cc97aee7f12754c5031cab4262205a749fa79695de58ee394d10798c4f7e7b26a1547d036bde5b02178cee26484845f465f6a6bc70cb636e330744ba809c5818695ac57fed5f3d0ef7e482330974db2538c3a731dc3d57c154e7878f553e65eaf6e7588581f07185b725b548a26071ef4c849ac02e5110f47b65fc6f33ced4a05f44ce4cb6448b3fefffe082b5a1d206bc61f489883db51852a79626d2120bf63b4c30e765dccb07c2451f09e4df5aed9dda86aa6c9d3bba430e58837c2bfe53e86d1fbabc4f0c2d67a05dd865f82312ab87f459e40c55d4d39f3ec840ceaa56a9fd5ec3b18c005fed6f04335687120e34e813005fb9838be061e9160fc00d440000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000863c0536a7bc0d2e10f00b3eb77a7fc804a133ae98d24467e8eb5cb74af20558b4f5e8dbfe82feea63e7ac10b2dfe57f5afd4def035474d54d673f05d81ba3a0553b40f20bbd6a54e64fbcd9e8491ef92ab6ff0f4c78d70400f7f48c6f9af459f4f9abf60b0a12d31f7c9b64f8c9efcba5d84fb222ba389a1eb4866337f8b95e25ba04862c8d3cf999781cb58d1807c8345c48587f0db32e4d1edb89674ba920d4b46d05cdd28efdfb258ec98b93a4add92658f7eeb61b70cc0eb79d500219d6794c0121dac69a5c0a950353196c775633493dc34707f2461e6e4afe2b8d23321a6b247d8ef3ca2bbf9352641799b17187398f808436a8ee10c940495fdffa049ab8f27091a62eb27c73daabdda4d3cf8f5be23cd9746f79b191af9292cb0ae14146f8b4f351fd41c1d3cbb4e8e9d06902d33db67dfb27bd6abb1fddc530a30ba01de699c90fe85d1111ee0cff62e71e927f115f5517fb04b9873fab4e969d1155eee2f9731418ea887175205681243111e87178eb97563acf851e72bb0bbf70df49e7a828c6395b1b74188571cad31cade76d15d7e9131f8e5837e18d818a4ce1f63e76a388c7762398b3f13b7502fe8da438c1c197e3a58b18c548884d6ae800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b6f472ef79d13f4c11fde876b8694674b0f716c2998efba2d68b0c8151fc35f10ea983b7a70c1e6c5594d3bdd52de9439becf8581b1b59cde9e55c36b150394e2c73d87c69a2a3f32b94c3862e48fb91f56394d64712be21020256749d7196e85d9192dbfe5959f7ea667850dae6248c2f5cc1aeb7955f7e6bed6516e30f5ab8e3e415b79de470a91c51cf404c112791cd17bc2627425037a8b44d1e8a941a591da7d1f858c73a12558e02e3cd9af01b30d9444732b70a636d9bb926e82b3c4d7c4b57232e5535574c072e390a083593e70839bce40928f001a7720a2e301c0c7fb5a731d5a40e00fe48e73224a44cae8d11e91a623b0045fa3f6bc95e9d23df69871147abd83a2ea0ca5425cce5534d47f51a2c61af289f5a332c05ad9dbfb824f30cb72c02173729ecbecb37ffe37608381048a1e29791831c0fe75144aa1aa4756b34ac2625b49b55d455a8840d947f70188e2b3008f3e56b322688384fb94a462c447b33961f26c43f87cb085bcfef594f01f0b2a5865e40017c120e3c81cde0b0a368e25082a2add3e3238f8501398df7d0aa0c594b91de70d8993aae81921ff368aa8205b748635398ea83d99e199d880399937b69a81140731d06400000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082473dacd7dc4dc51812a6782cf7798d9b24f429eafbf5fcd65bd1e2941baaead42b37c497c88e9ec22a27a0343256db858287ca1157823fea95d340600dc5a94e1d80d2bf7abe16990bc88cabfd28ba3252b8d863e361463716ffad3afd5cb02488532633a4d22d6f5d3c22f7a03761ffd2b3d8fe3b824fc2819e4be41cc5b53b932fc33328015c8ee03f49c592869573567809d9d360fcc495f942e8424242b344bbd7159a4397acc1de6126f6202246c09153b42bc3909b9fc4275e674985bea6bfc451225d05524c79f746b7dbbcff21b1fa38ce3675bee4483b550986ca5ff8ea1986000dd32c7a144f37c13def54a6eb1e45083724d86ed1d81a2efa8167c1352aa2ca0b77a0be4c082eeed6ca7e38b0caf265843ffec30cc6384fc9b6ca5e2d9b0e5cb710356f37071d8860405acdade1f4bec6899a6e9962f6a598cd717625b12ccf420383dfb6a55c8002c82b780b245225f81f22ce72a23d0c91a452d4f6e818b8ab291105de176b3906ce3c18775755c3f9480cdd03ef0bd94938d6d21bc67e4099158c52882caed6c99a6b1a3fbc2e81c192081a828165ceff54c0cbcd303d23790a8895887c7785cfed5917e93f3491a8681c419683f1569d9400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001868324ef706fee3df4c2ecdca089e05c1b099fc6dbc95525e3a730e84537e40e62d7acf8ba1b6352daf73aef7ecdf75587cf364ac1185d2c7d627166ae6f99a77326f10a129266a7305b76486cf295d6fc27436c20983da38f6be73a9f0b6d04aa54735158028caa49874a1a038a2e997da279903ed05b91bd38ded9049dace5345453284d08bea5fc7251087fa36a35a1a92860f441461469d09b94462ded70b6786426850295f49e4ff1e6ef636ea7ceea92aa88bccfbbf10221aa552131f1a655eda11f6bc0d6077953afcb4d6853187526a3ce8144d41aa52d359e180b746128f053fce2d5c8a1337577db3903c88429f0ad59b20308e85f3a398b899badafa838e374e9842b14734d940aa22d8610cbdabf6e718b03c7472dd70ecd2e77e085ebb273d5bbd42570d681e7bb602b48be82cb39b6d1d6f045ba33a1d0471eb470af34d818ed119bb7d4e31c39bb0e37fa4e8046ea8cbb720ae431f602073b410f5c5e99e70df46fecce3eda22a2edaa43dc2c2cc7112a780bc9cc2eced0cdab04580c083ac6d32dfe20953e0efad880cde9e54bf397b6cacb9bfe01a8621a33390a9d62a3dc889a660e3626b940c7769b089b12e9bfb9a4be933c3116fca000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098c29245a54dff44e16e48377f8c12fcd83755fc3222b315756d7c0698f48f709eb7a6f58c65e11f053e57ffc8d1fcdaf81025344900d10ad7b81a284cc1fa5eca67fc6b3aee37d6220a02d22e32e0742e9497f8acb6f1f2b094da08e73183a78178ebe79926cf248f3bddb9f7b11e7378a1ec7210d17ee9d06c28306c83665fa8de6fa02ec29eda086bb34400bc4b3b6b1dd44471ccb160ee06dbd5face07363b913af4b75c3c46d2f80e17e8da61183a121daf5ab76acd5ed716a37e75ff3228a3fad73180c38dccc3241f3a74688643a69fa1fdecf3bd57dab8b3f71b87f7f4c32b58b56600658343fec902ca797ab8c3327a7c6b2f0ba1a2acf0e7c8e9b404335769a5ece0c76d196aa7340b5ca59f824abccd98adfc13020530208ebdb4ff31767f885c9cb2babe2a2103420fd9b081144afa26327c7f0117c870a2c26508400cfca1a604162ec2a0c8cc610feb34593930302d788d20ab72078464105fb425a61c0e98484c0cea50e2ef07898624e25013789678e2d805305f488f3325f36200b049c8d131807c7b748e79f73ca0c639de5e4655d378cf5342f3ea41d7aa9c4c98a08cc18a58659b4c0f4a523858f672fe5d30d88477d8b2037ee6bb9700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009617b0d67b398bdcbaed29f2376aa8add5181211b8c07016a27ff9e90d59fefc5195ac87e667398bcf2152d115b2c20f67052ccbf46a9d660c2335756ae3689146eb6ef1f20958b1c0a3640866599efd50b1b2d25ef3241112ffefd26b1cb60123274f3ead3f1cad145331691717d5c7463d7a3389ad782c26511a55dad1d7be970a482c464f41d8fbd7a50aab43ae4995e900425ed53d678bfe872c762e5bdb29b633997a6c772d661b9d0e1ac986f986b2db344153eca38bb1c5af51b3508a0984825ef6fd8f365cb5210de54726052e3555b5afff8ab640f89d0899bddba9302fa381642f7cc141cd6633f758aa6763bf6a57bc5df06cc174a736189110dd44238bb95130a1a9d08a04064c53e0cd2e2681d552f60f56565a2c85dcd4a9788c93a568483f9a4a7847decab0d228e0491620ee52e8c94442c45c3ec85a89fa42c285ef3d2d692ab729f188d00abbe1c39409e9482046c1a86262d8f0e90ca92b60ffadbdc07e62b9b0327f2d62d2141a4ee8b90e6e344fff925eec715434d6e5e469faa309f880dd8c2537dce9fd3fee971f9f92e95d608a653e03f485ce3af5be03598857e2342c4229414df7673cf1a13e8d4d0e067508fe2ca17ae578fd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d7c9aa0dd0024daeac8b4ce1ea6a43a7ec3cb4cfee7627a3357e60e846db7504d63aef802e64c5dcecd5a483a592b021c02fe57ee203d16861080e3072a4574498927d5ba36a22f4c4ba5034ff16db521b31fea9283ae575cd65d0a6ee289c60f69b24e9bf8c55448a8a149bc5de69d9e0855d6732632f6ec3d6517b0bc6bf11138340fee0cd8fa2450c01c154d140dbd8b89084b7142164f3b7114326e186c5d3851e7d6ec52d7a4ab5382ecf4a8d6945d929cd1cb4769814cbd158e29586c4d36723ae7b191009b1898e7d1feb119f8425badd3380416589f7b66eebbaca5d80e7665716a9029e7352508db08ac2fa0a4ee145d7f41b887da1494d83904db461cdd0fc7ec2636f51678daecc6508cb6433739d628ac6c4bc71b451c7426a1df06318d74c3a19c0291d220387abe03c502d8589975bb98bf88969d6aee3a138e5808a845d79222ce10554c857d17de7492f67bfbc168fffe1d765cbb7652b846eb2e8b03af879440d28b9b69a5140681bde40121f829cd0cccc8fa11e0275930f0717232397e1eae30182b232459a0c896e078b77a07bd671fb023cfa7cd696de8aa824ff9a6b4e423e5d1fcd4e9688fc0e217fc24598a0ca03139f901af4600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bbbd484c4565076b355bf337ac36904a602ca82a16d7aba3a670bbcfd6a8f1ca73d192c644a3121031cfa2ab84035d1af9814f46db1d84aa1738b4677692255495035e3b8b93b97cfa01012dfe86de81b07dd3d8a6b407341edf7f9b1c71a5ba0ee2473d9821a2b8675b0fed898325f40c710e48a5123744aebfab7486cc593f63a6c05f9043bc8e7c28b44cf9a7faf3d2df2694181ad9b3296b1c0ae7b356dee0abe0154a6c3a45d63e471b76f59e7ad3cc5a81d4656bbc5cf51868db91dc8db04fd6df49597a89bf4db8f573f3e4dc7978afd91a7bf6909946d6fdd0978306f7dc3a8d1d20ebe9acc1d60c9a6fed55d647169199aa8d958ca9762ca70ff5af208a6997a83908909628ec09cf25cd8f5b3c05c1ddee06ef5c12c0ac14926df9ec9c563c0d1d53b9954ea4e65a2706acd662a66d65237441bf3b306e2887e65d901d21659f3f382a71d44fe269dca50028e9d2d5988e04589dcd186ae60c82d91e726878f1a42c4d5ec2a898bab40e509f286bcfa33afbdb63171aad7ac8d865a22b1086aa778146d36ac2a4e6691360e7481ee685c6c5c5ed810caa820b221e8ede8751793f32c240dfc5945ce3bd824474324268e0da8e692bdac78c3c7c20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000822a57e5c7b4ac4dec58bafada4a82added6d0eb7fe3f9ea4d8a8029f3f1a25fbb2932ba9375a68cb005e404bbfb37945065a332e977a080675933b21a56781036d382442d1b0b6a87f4d13f8f72869d3bc76802ba6617cb7cd383421d0f5103b8d6ebd41df7ab64dfd77e4a57f5edbda1832dfbc81ae1d2f7e307fd54672eafb71f04f595093805bd8acb7e734e917069a216093272060b4e3f28a3f87bbc81160b70007d867a651e03562c419f306155001b4f4b9103365f8cf6dfd28b1f742f18ed8f875b6e1b9e1910fcfc366786e3397e223a4ab861cb0903dfca22e53935566d5ea104a61f8fbdb615ad36b418c99aec8f16189fcf22e5f3e870ca8fb489226535e6693aa8280ac16cc4bc011046f058e52401e8a925d561959f22b0b3b2042fa3ea6897c9e58becb08dda7192fdbf7af344678bc651f47d9d66b1f2b3fb5d47726da2651b9f0e46c88d11376758d77d0a6273a488cea5a630b0d047d752ec1255c44aa364b1f9b9a4782c3a23bc1c2973da03f30b4596d9a141abb9d8e3b3aef0d19db700d9c30f56a3d2116163b066ddcf0f3fe90acaa6f3643742fceb5356de2a9957f34e80a85c9805a8d0f733b15dc5e55e2510de6bb9aef3999b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015a2333d448b0947cd2de46804f94dd98bec51eef3215c6d3c22a2185948f106a9f2feec0bea35a1c343b2fb8c3d989f03f526f8402917bf44b3d4082ea80a15e8f67848a8daa180a79ac8dae32c61254006f1a09a1cd3ad42f5ca25213097d22eeda1672c072d6dbd76f9339c499015b9538efc4f09a3a9b42c98c79925fbac4b94bbcec53a32d5404699658adbdfa9f9aff3fc81de66997afaf9d8f7af7ba620a593cb59bd137da728d208e8ccd00d68f3b278632d2a99a64f4f539809cddec356cea73f73dbbe02bd25e690cc00713951090697ead7904564e49b5cbe2d33c24065c145018744c7b127b0d69f1744b4d59498e7ef6849b658e0a5d83ce494123a9dc445860b31d0cc493b7aa5205eba23356b80dc651c049c64ea229b7db305efcf68193cc17cd0414d5cde96f20d0ca0e40e1e559a6fa07456248ae17117a965d6cdcd84b21b4edc264713a44149e3a56810ac6433075be1d38c6bef51494f3bb66bbbe202e8c0652cc97da5246b2704499ee4d73106c40b7b3cb1b045292bf550a92c17c6808a82c17bc9a4866bcdd0b8b361d78019e11722b6ae3e8d5813fb728a93579379ad881df2b29588873bbc373c559ca2d18fbef37dadbb77b400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001209113da1a03062c3a8ff42619051c8ab6ea93c8524ebc34f7de0c08564cde1b43d142ef71812a5863ed4541ad220543a9802b322009df7db175c8305de7b480d7c208963643bada9fb6b248332e630e6a2b3664b1817c29c3942df0f961f9da1cd4652f5ae845b41afbbaad499c9ea799f4fee1d898c1749f84793680a9316c594f0656c6496908061d93a20b977ffe3a3ba7d3b296653144e8d7d288659ce4b74cd72345985dab7845bb5664f3f4b161ca21432764b31ca1708a1a8541784d21a4ae51ffc98ff6da2c6f6837a9beed2293788a24f373e3fac8fe62a937981a6bbffb56e038f53b5a47dd88a4278477c6ae46c6ffd7de12966efb2c537359c930b9836d74a3bc380f8f4c2bdb2b7b841561ef0350092d60d08872aeb4e5e0e5cb04b351a64c3315ac5c4c8190436715b2dd70a68c54d5b4119bdd1a02bb313856dc00eafa39f145a5389a16f9a98be3ef5b1684a243a9267182fa5645ff2541cd933f1a504a3c921e4edcc6ea3f4aac121f12c6cac8889cc04ee86faf20f602e55ae8a5e302116fb5955ad3df5dee427be1eaf3d5a5f93cd659cd7e310c8a0b1b907baeb96b6a4eb13d49f4e3e57341c454f2c704fa9e945fcf85494b4c393000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013f192d6ce4a16f90e545bc3328e3e87cf718cf7e57107bbcf0e3a405b3aa1af10c418db909548d0976c0f17b4b84f7ec4dda63575f0dd4154f2c97bda33731514331bb6bdb907a370e4fe1cf0a08d438fcb49958681cc6ab4c973d2e4fb7cce371bdcd16fa14afb5dc20128c90fc4036bb5541e1f5a60feb36116f4edc06eec53ae3ef945f181d63588c635379008f8df426178f32c60b4ed46650bb56f090bad286dc5a253c1dd2b62227990ecf82e558fc77c20895f7e5847219c2ab0ca706c6674f4e4b999c8ac5fe098c31ee0cd51828903931c078abbdb29b15e92e44cd36898c9d45a5fd60f964d3bbe7904d89271850e3d110e278ffdfd47177c53aba9444b8cd70d28e152d1475a6ba378d3eda4315f9d488bf2d2465def2fb360489add407265788f04af4d8f0959fa0031bb14a6bec4221f0b084e866e303d9f4563e333bcb9581ee75c938e664f4258eaf09861580673e29b77ea17fcab6d7e069666e4b4a2dbd32919f58cef4ee3aeaa6317ca740736dd0cdaa798571e4a74e30b422416b1dfc007b7ccfd5b69fc1fdf203679704ae24d0b2c53150dfa4bbc290ae35c32df54b0a94ef69eab96c92b7ed748a2638a05e59520a03621212b63880000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a59437c171a20ecec7449cc55e46789bd8736805d9ba3f79c98797a23e6f5b9a480477bd30eab2eacd6cc698aef3749151e469c555e7c95ed7974e757911eb2555cc1dd02daa6521406bcf5f7011b6b6a494c3414596f55ad7f414bc728408523531a3d124bf37661abb8aaef4f54e10b7456315f94f3abd1114cd22168347591f5ce4e7763bcdfafe628a237a060b90b21ddf0c711074437db3a27918ccbcdbfbc4bbfecb03c4ea4a886e0da77867cb5d5d12966df53f2e6d47f934bfce3bb98324d1d1252f78d6aad32a0d2437a6baf5b12ca932b79d856c9ebe9c4a09e9c44157ed1f680f57ec89f6421fb5628d58e72f29d4f22854e2e075e42f43fa9fc7c00a21a2a133f68044af37a771b90be0fd1bd22c5440c67277faaee314d240d3109f7b896ded6f8009b15ec5a5210fa069cbf97bde3af6767e9029737c840111516bec256e1ddd7057c1d703366c0a3da09bc64eeadfa83b96fef963fd10e39cdfac5663ed2ad7ac20fe335911ededc22aa925736925483af9976f2b9dcd86f54a6e1b20b18397616c4375b980a17aee004a646fa89cfcee2496b7b8a5fcda914bb9bf2842926a97d077cf480b499ed0646ea0836367b7ea540817076c6580790000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000970a25827f8de632cc3fb033ee24a4d55547dc096637b363f1da5f73197330ec147f8d3b198cb9165c32bce8f906efcf5a43d2bad65effd44f17079e3568df83bffc150c5550ff5ff3d7aa7a04956090d0929b87e252f9cb6c70371a7cbebbba225937c679a8ddc3afd1497c3ac8651facf09f7b66771126da1fef567ae76a307d28972d3fd771f94552ccd1c2163c7f3b770655d9c19c080d3cc530ba91f7c3daa1ed9d4a823e70d01839216eee12f263f714de51abd0b989174e85621833e3373f2494b418a5260c8cb2e7c4139dcc3576cabef29f19fbd47ec62ed7be6742c86285bcbe28c2fc9d0ab3ee0fe27e983de496434ecdd6ad3442ca19207be80ad14e81ef21080b9b9e99ba9be5a01948465d2e230dd878322b5766d4e04789c8dcdb74eefa8b3b04696edda75777e819e4bb096506879b57bcff595c1404a9189a1ba77bd8f50cfd4047d2cd4c2759e049b0550bed2a0f0c656b93d181b196572b157026f391c4fd65f131216ddb4eb0750e3f6ec4230e96297d274eb6690224e201330d4bb88e71a8d2d97418191a0ae8d90e1f9ef1f636e5f96f183aa5632e82677ec6b377c0f9f5948c3d8ea924f785eb701f09759ab6e7f5f23b677343bb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010dc5152da79f018825cae7fe5486bc12458738d6a3ba0d4ec42a0cad5f4f178060a2b1313cc264d8f499ff1fbdefa0f6dd75a9de6386064e00a4a1d2c4a023d050e6e80c56c26a9adba090d10d6a78e4ae943a37754f82a9902f325e4824a7d3a39f6af9358f77baa3cf7cfac40d2548718dfd5be95980fe340e79b3b74fcd7f2a0881abe78128b8dca5e3e564ab9f02efe294bf2cbd82c080b6d5ab85cec5408772986f506c6dcc66c70c8d7cc09d9760b14ad88caa3743d4a94c43684250761880c689b48214404c666c822e78dc4de9c2e3836bc73c553a13761a8d2efd44593830a6a45e08befb16b8e601b0a81b1a6cb640fb24647c1e4c6c658f4bdb714166140254cb9a890bc2707188aee2440bf93effbfa74f2f7e04f694bb45ff9654d952345f3ab20b47c463d22639b6edece98a048a11dd880f1032dc6166bab56d701696c81f1a2e0e2233c23c9b4eed37456c11f2e823f0a212612b3783574c1f158372ec2ca6a4e2c014c5ee94a95bb071d5c49b117a657958371ccb34ac52aa6501a2b179af0d5ef65943b35ae3824ce86ff5e8c7a378e5a8a9701580db3cc16ccf6530338a910edb66aa02fd1007a597eb4237d9059b9836f3f37dcc5df0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5425e4c272be59e510a1c2ca8eb08bdc38950b536ecaee5ca7db4a1b95562c67913bd7d485e09a29c1bfb515d2b4b00fae78991ffff96d1e028fda73c8d60406968976b33315549ca53a62c433e74788bdc063919925f6df3464ffa8610db41c3b0b81ec89a78b33c048fadad906fe8ecc3c0dcd9f85e6758d098d85c3d908606a5a6800ac4696960370b3b0d99e86986667da91f3739efe9628f5925d582f520c3b9762de3c8e52c847e08166623876dfc1b0d8e70c60fdc1739995c0c3785f8651446deb7657e0fe3c9e182ad7bb759108d7050fd3f39c5f5604d39338fcce70962668f4de97450c62b668d86a607425724b5739268674d705500c9fd324c4ffad279a9d844e31c232f034313d7fa6bb7259b7cd1bbb62e91d6a608f3871793000e9b46403044e3f4f06a7ece58ed9f44a63e5f4727f2af8173ac972f3a43823a1d8870a9a10e31d460bd2ae081515294ffdb85d9e820f0d84fb1e12c30ebb5a05167e5644c5812be5a51e2792d02d0bdc2d122abf75fd2197d95f5ccbe08902d9d40905e97b50af00fbde4fa541418b13b002e621ad4f5f86bfa1a66df3e113df34b4436a48a3730b8b120d01d3f17c1e1eb01af0ed60663bd05f46877750000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a64b9ccfd75bf9430484b29364b3ae971e975923fa1cf90f30106a2efac66b1c370276f96090150ca0653f480f67948934fbb833ef6bf4be53659dbcdca494c1bca82dffc6250b17693623cdbff89441a5fa12947de36293e07638a0e00b4b29d3d09bd455efbe0a0368e1fe4c94e59ecd9be07e38c3d901a4a1deb752891086687f8c69f9fd1822cdace66ef7d658c5df2b1f8c73e741098357a6dc840c772d78435fdfd5d6c8c8afe6e9efffb69e24713e8da32b0fa91807f59e031cc090f2048f8200398d0b1fd3b85b6e31a84c0b17b0c4281f4d3df88e73dee6707f5bf67802bc0fcca932a74ff219313d208a1d5acdb8dd5e49979231cb9301aa905b8d0fa02892b47d8d350b0a53821fd21fdce1634fd717c9ac049e2764c495f70ccd3ee067a0024fac4c666d887bc3dfa4edf65a3b5052187c737d4251ee97896d8afd5397bb8e2821f8e7a1477426d38ccd1e21485032c7d5fd434b96a0340420019be9ad306dc1537e0bd9548ddbbc5e64677481305349409cf6a4391e00dc492582a36e1421dee003b44b12b4aa7c779eb0d970c41e3f0d1bf27e4c73ff964b165b24294a23c8bc752d32a3fbfde877dfd09300b6abbbbc318056af259fe0b75500000004000000000000000c000000000000000000000000", + "1eb66d4f1ea7cd3e1cc478737658aec8f12b281e451941bdc48f1e9d91beae570000000c00000000000000000000000000000000000000000000000000000000000000090034ba921778f6b7a53ba0913d1a9fe25b8511066153ab5889f961165dfb5a9600089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00b9297c0ba7559abbd713d4ecf549a98e691902e030a01be90edd9712d6865e14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000c0188fbc5f2203f9ba1f36e3553c54a07d34d04d75ea8d252327e0ad2fe0e3f2fa000010802607e45798b87d702d9a8796d31a626559fbad8ea83de0be16537382a8df6ffc0000110018c82208d422d2132b54fb27a704d5dd1af9320f53f377c3bcc11005511b37d6000011000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000070dbda600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000006d2335882eeec89ff3fc05920e19622d186ff141df1812f7dc50f8948cf0ee94b024abb40000000c0000000900000000000000000000000000000000000000000000000000000000000c205b48400e3316a55108dc99f662749f73b7ce3d50373bd9da13130cfa30eecceec842742207b0b4b09174f3cdbc2b98bc9c22d8c518216db8ecf21846752280d358238708e3eae440b2f3d58cdca5e642f35172e4585f7a9ef23cad645995c015dba16722522a2847d1b6856b85903b49fd359928c0f0941bfefe3e95c871508a1e925e18ef190961f589490debfc81eac2302f1d42f988ad58f60a81c8ee15259a9ab41b9c543aa4bc15199f4c2013c151a732e5d97d913b8c389ff9e364136e37e8c51799005d0e41d9465544df3c76e81385f3f416e81091065a03ff40b9768f4745038ef5b12edf0782c7da052f843748abcbc3fc21357237bf19a98abace0661a10bd8f8d8415bd9babe187b9216b4f6f1e84486309bbe2b8242a795840198756515fe1497d7fba4e4c27a4ec1f1d3d561c2821993abcf0b0aaa86f7a49360fd5206ebe5084d82e4edab1d01d2640109bb17c501a55c3d7746bd064c9104bf535a211ec9ed176d439ffec59e50c21ca8eedde3a1d3bc14a6794f4dc21eec302ae81b7fe95fdc533d560d902af78bb324b0173d5642bda2be3f3b276eb7c072e6a52c2ddf4f4c90745eb9b1bd351e74b23e03312a7533c552b629a4fcb0a4342c8c0afb047ea66f6f946b205d98d4d515f579fa55389e5051034b4a550eae7ae3dc0d1c34004b8e0aa85377057aab4f2bacb4a21123060ecef4b519fb5e698d70441fdf71f501d9ea33ee8363e5def18cda719176e443410cf141ed09cdebc809a32df27fabd40bc96cabbad112b210ddfa445175a1fddbe770fa3da43d908638b610b424ff0e4a297e5db6df641ee643efebd3d45c3be223336ebc209413a8fa7417590f5371cf7aeac3beffc85da8a02be6db438e8c71a1ae4c06acc869e0e69d1f4de83e1792fcce5b88a931eed1856b092533752d35cfe4dc2e0efe35163b3d182d845eb3c6a2fdd6a85e8790cd2a04185e68ff9d43ec5f036f020385c3e3de305ab114589d861d299f372ae0de1f1b3cfe61e127392a6e4b929d1324e280d12afc75a16da3c7666ab80e4776faf0be217aa76af0ccce389e0a39cb992bfec722721be2e5b3e508e3d8e205664b5494912e6c05d2de654ca7b108a8d4b066b707538d066cb65dae78c8b2c2c6d5c487f0793772c283f7aaf23fdad046e88e932bb05671a94134c157aeeb6e13fa065f25ea5e80d6d86088fa1709d6fcaa2a4302b8023a95634fe056da330b04806dd56c196a3b598db52570c25381396f856116becb4040d4ca7500e535f1d285bec635fd8037af803dedc9c7224e9969a53b304f768a4a2a5dd68ac4d4a45a38a7a607bbcbbef16ce21a8f38881abd7762be297f449d6a2c0064617e199f736895ed8aff442651441adb50db89ff848b6ece1a3dd19d971a4b24838063c7bae2c9e5aa0defc0d9336fe3a6da973480bc52892d8bc95a3d90b18edd3213660f322c66e09974c126f4671fc7bf403b5cd9770d1f0417d1d1bf83f5b4326217240b94d71fbc4ea2188a789e0e6acbb795aa8ded205e0875b8e28d04569b2ad6567de34e83470dd39335425094a6f76e5f76ee9903960ccbe8960c03c07c9a08f3e419bba3cfd3edac8de2bb1d6604180425add815937c4af02163b5b0e259cbed0ed21b644eaa85a0671f8554d085767f292c1809f8f981231910f4566202a729436300bd47cc42005a9682353172c75f51ac06057c7c25845f05c50ab0aacfae159ceef5f3b72393b80bc363086e26c96c492817ff43ef839357d9d061189f35572f146a5ef22e5a2febe70a4fbdaf962351eb20ae0403aec30d987bc596e04854d95a9ccec583ee900185868a5bab79b81b7a1ede0a5bbccbaa7bf009cbed6a6b6434e6a4a3d0e2aa4aa5611c34ee3146c8521a7d71dbede3116184c5e15e8c713edd2a87f44a242aeca5e42a55295a97e5321edf7ff12cdaf8ae7e0a42eef780b3b999ff0f0efe2858826252ba14f718a86610a41da08de166088de770b2334311eecb319ba87b8a7031e1142241da8a2daf0867dbdcd548121ecc7891416f3c1774891d2207755b73b267b9f9aa80d8e6ec1dbd106a8a366435c0b36e0383bf20ee8dec2050975341fc06bcc91ab74a393a1cf43305c9c1b309fe67f7f23daf4b421a4ee7b82c513f9e30f0e468e575008520b99f23f4a8c8baf756d65b437398644e3b50d05a719607f2e41065657f8f2404ec94123e641d76bc2bd88f9fc76605aa70ad06437b50f6581eb5070b7a13a21df75650af201b71be5b2514937a9fc38b4994e8ef1b89fbf478baa2fe55b4bb056a96d455a1d52484bc4bca6afc68596455699340dd7e60f375d7c3a18b4660206f2940dd246870e2aff3bed5e4cef9a754777da9b3117415c30e0eadccebe8139a0ab1f94078a80a0f8f44512999fb86d59973d27f07e7d52d65b691e5f6af2a2edeff76a2dafcd388c932caf9d7d257b97d920900ae4c08beee070a82fd99162d5379d3969c89e152af64b685b657e84f480942e0fad2d0263e65786e835c25adea0afd769a1d32659347b15ff6944c7add22e115c6f094ab179c68b98edd13b6468dec5eacf53ee0c2433fe1ceb15d4c6d2a1d7f85ed8cf9bdca06c038cb1e84cf0d741eb31665522ca53c91c8de50741913521eae36ed8a3ce0649be19e0ae0a830b25a9920f41179afcde9d0957bed83319362bcf717259418aa32c0991c5d1ef709891e77ba7286f4f0ce5c7a0f74bb39f52f301dd984b9fa7b01689f1424e9add6491960b9ecf5505ea945becce85d4ecc58484ce716303cb14ac3e2216505fd5f008656c58aa5da008c2c8dce538866e1f5bae4ac4e697098e5f69b2dc8b0af67779fe5603b5ba39da879eba9a8592a9a444a77aac2643d605a05e8400215520947b3158486ea46a9c62f02c5e19766eabd46c32561c2f800466b9cf213f79cf348ca18e38be003c5c310aac55b079481ab9007a0bc6f2424f21f2d6210a23a2dd1bb8dcf0fbfdfdd509f1162103138e2b7a7110a6c5df63ab34bd01826a2f749cc20a49f2e4f8e47dcd30042011a434211f1d6f35e8f665c1fdb03fd0ba210ab7ea5b3fa7d75ef0d33c0eb3442640327bed6db966f5de3fb27cc901e2fe0d9c04d4dbabf46d534c3ce450647da7072c2ea52cd64f63ac72619f886e7256b5a6b23313d00b0d0d41a0e85084d520ee5e3a78a5c5bc715dbd2f47cce101eee952611cd65f513f6ca75d695d54fe1fc3846e4890d0d7a55b8e7276339ea13dac71509d658f896f3dadd963e9e8dcab31300d1e4c28264d67db353a7a9a501a599be6b8827042668a05e87ac56f61ea5d514323790d69708062b6c6b49e022a42bc4b91ea4487ecbec47b6b22935b9b1ca7bc5cb59d6fe9b7c78b232c6871a77d5597f26d5d0079dc147fce7b77b234388e899af1350b9c1477a428116b624bec3c9a510db878ad91c3e2b7b7aa94d5030f4265c9b6e8f2a3935367b01c22e9c1de9813f1ff772afa35b2aa26da644afaa6983b5a5c628a8144d1fd55b1208e486e307ddd603a18b0206c0924b86ecbc933828b2c93957727eb84da3af0b2bc8eea9d28f0f7fae356c28367545ee2b8b37cc8d3f7b11aa6eb417d82225a0099321490c9245183714b3bb65481abdadc4296351b209723ec3d0920c8807920b47b437945945280fc07ad42e1287bef312882f579b2f8b92baeea266f5ff3e27f2cc364dac208d80b04322ee392ae8418d036d15b4b626c21b0f322b7dde062ba08d5246b2ca46e6a9b70f368e663593742a29fed29f463bd47f094b1972290a229b4841efad2324dd63d69175b4c944d1137403e9177252a7da5addd40b400972aa4119a1ded1595c45f4b1792e3783ccc8ae640e82a464b3e7616951b2212067fe345b29f2476dad4019a590c68b2fb5d090269bdbe9aaeed8f822d837bd1cb524d51525a830b653ed22d64f6b812f8ae4244e1f51af0683674230c6ec7c14848f94e6b810d88754b5299908296552ee7b20b5f90416b204b2c912cd6e94023bde76c52d7f4e61335524d26a1a995bd771c20081d34094755e1a12b65c7b2bfbda214e0b35db39ba983d710bc614d97c95f0b45a4a53b11394d8ed435bce1e2c1786a482a7155e4b0aabc27bd0182a40f370b280137dbdc6e109c836916d23b112d8cc194a03f463d91dd619c8f3edbd71740b64c3995e9492a0d02f21382a3e02df5fe1e0932d5e54811d6b235d582b541b8ea3fbf29a427995c5f1ebcd0ca9443386b766a8bdae674083685d2697777864c9fd8260d0b1076e9020428a1c7530184726c77e7de4db1bc43ae70f3f182c9d5c4f470aad41e8c8f8f513c62825376d96adb8a6865bf7cc73aa233b2f50911bd25ee0cce5cc7af42773401b21b703563c7dba8c95cee71e77de9b4211a6b2243f6b4101c9002348a34372fc1d89bdb3a6ea56a31ee45b467bdc57e559612dcb4b06f94164b44106f6f743ca1b1240eaae7dd2c8c869e2aab8fb3ab37f65f162b3f0e514d0aaa518ea2057332161b043f6aaf0ae1ef986641feebea108f4cbcb9890e4c1bf9f4a2073ecc4f51cbba81e831e67d07e9ee1478665b1851ac39845bf8a1c7add82ded3b3d13c7b04b2ccd41de9f708c8b839037cac70a1f233166572276aeb3413bc5606c481b30510436643c384d0cdda5b2494af41df7652bfede4bc107deeec3c6454040eaf304e39aa71428d24a9239fc57aa9bfac48fe05ca9db5d0446b71a03980c52566263ba911603aef6962cf05fb9613664727bd0a58562dd85ea961d50116690f04010c2b6405e36b2c55b7db4e393659880eafd83fe0154e27bf58a6a7255f5d6d0d3270f7d3e1b828318e57e514c4f7e45f07b4572de67572964fa642fc2db25415e7668ab0844a2ae0108f840d8e75b8150f343256afdb6972fb6932ee4b2e072f769cc5a0b47f5ed68df8af8fdf27e23861daf0beb0ac06be28249dcb94ce222c6752b8947d5dae46a9dab3af568f6b83f7907e04ba1a8fb14e6db1cfd6e7c728463abdd58d46a5e7388fd4ca758eb74c4261ebcea4d21542cd63a4e2745b620310c9c64d75b8235902f1ae6d0ceb57b4ff1da31fe21bb3e760e93e26c7a7902aabea391d71c31a87cdaf83cf172a459178f1e9d1e541a89399aab3defcc41f01c567de8a81020369f45487fa0d03982eff73bf2256b0319e21cee8af6c224600c52e4e69b5f866fab1960b6cfdbd3b319b8aed023d19c3594ecb137d7903f315bb16d1500c8d692939846652937100b3d7d6830f13a0cf1db6d3980cd28a7e03f5c9816767aece53e0b53ec7546921b0cabb329f01fdd130a66cb4a39634b726afde460a55155feda7df0cea2f41046c99af681529a03091688eaf00c35ebf03e02345cd0e7c5131bd36a335d46b3865e57b914db34cee66e22e187759412d0e202afaa2ef39772a8a9d10fdd3b96c83392782bf8113ab329ce08fabc54ee90de982ed659f8cef3300d0a238bcac6bd598dce0b2205f040d9feae2ea30a26920a8ce843cc2c8b5356d2e7c8e7ef13d173c0e998b5217ad3c99b24701a61ffe1e3b039fbec650d264ac586155298e91b4e00452782bb98ad607b92d13d494512b6be7b3acbb27cd4f1bf1aae1664157d023fb8ced35130cd0b090f821a74f8a144d55c125986a0ca95d1f7dc1a59997884d893eaa530ec1c4010e7c19e916c9005279876c59c39dc494af187de381aacebf0dc3d48ef02e4c27184c34001bab01a2883079c8dcc3cb6afab210602bed1b47b3448c2caaf3f48bc6e41dbf04c7003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000025118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000250d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000250a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000250b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000002529a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000025141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000002525e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000002512978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000252daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000025189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000251159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000002505ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000002505c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000002514d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000002503db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000252ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000251213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000251ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000002514fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000252b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000025305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000025280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000025223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000002517a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000002508858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000252618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000250f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000250e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000025172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000250b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000002505bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000025137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000252e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000252297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000252608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000002518373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000250422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000025204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000250afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000251998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000002528d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000251da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000002521d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000250ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000250e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000025107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000252f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000002509726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000002524f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000002503c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000251fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000025205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000002525110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000025283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000002521cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000025094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000250c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000251f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000252421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000251fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000251bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000025304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000002500000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adef5284c24cb41c64020b737e5126e55208f743c30bbf4315d136611d6cf6ce27c9232f5a2a043b56a5c6e1f92fe09b29ce237b8b4188e692b224c5f48687d1acc0d7938bef3040f4b5212bac8883554d20a7462f7ca355f8cedd0f2c57bf3f5f569181b8184bc9c8cb785a18b980b94602665bd779d21f21e322f80355f7144ac7051fcc8e04b5deefea0b5e911130b4dc78b554d3bef3edf4323b0154598d7aa8e9e51e94776a5cfa2d4156e377bac6c62d0968eef86f17cec837d397f4ff3315ee95d34243b1b308bf7307649227dc65134680eaefeb7261552b84098d90265fcf307b79d87b426f2d4e0b2f612ae3ddb8c4fb93be1cbed5d213051592c2f6bfaf9679c821c2865a07475e3c04819d9315d6eef421c492d10d7b315b2f38dac8ea83d679e931c8253edff7d922c0e86faef4ffd6ad5e049fa99a3be6bbb60b6575a9b8fde22c21f234696f433224437aa6c9e339ab89153a011977d5fdbc033568cd472dedaa3644c7a603a1112370cc42353050e52ff087ad126c25c0ea7f44955076e548787651fa8c5d0cfcd17e0d8e7f39db63881d6a3d5cfa1736029f111620dd531e46f40aa59a4980cecf4881a95a4683af8ca07d5d920f6e516b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023ed3f7b6504f26148a7b5dd9f3c6f9d7290773faf1f26b4e76b9090f26d89810d9242c4e3850f09af62d9a24cf23302ac30de573b92b85764c8e270bf7c7a6ac6f7752340cb12a41f4fc8549ca9f3f2a2a1653c58ace7a9a7b295870d49aba451ed61dd5b26afdcd5bb77c14fb9bc9e1ff7250a72e7b0dd7d0c6a447ac95b03d0ea56d9e2ea0a7172f053170057c53fe5033a227e35f3c754871d2a5d9afb19eb9248c4a046d01c722646cfcf20453cde084ff13b96f938ecb788dba0d8358e8306af0a6d8fbf7f0517244c41e0c42ed4f2ef5b98da88fc71b10b16677200383e41081d35ead9933108993775a3490564cf279d22c16812302618d2568d6a282e56849f1cbb6f6e393963a84308410c998205e1a913dea07f0796b4a1b59ba985e16ca2400044322aec677519061c1b88d531177b23b8afe7b63b0d8f2b9fe4bca474259f6448da2e5fd1fd63b81539c8cab6156f6984cef569481cdc00e2602a8f96ec61c5606c90daadf46bf3f88a8d9e0e9a7f8cf2890b354b9bbde777dc361aca7bdad1c63562f4c7c7cec3899d4ad296fa79038dd6a131bb88de741d4d80ed37275b5ca257aa77b864852f1b12e4930d58ef39bef37c69d20221057c8100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d606646010c574b8d8d17e84d91d0ce290cf53cd3c35d85ddba347837ca1c2a09ca279420e359738822c2f7f1729aeb52aa74587fcfbd5c0e33dea06f06bab9ce80ea6d3840dd78548fe30414411e1f97778100ad94e9bc5d6f8c25ace1d230084acdb3d894fbd5b4fbe8f0986392b4bc98bbd2b8d377f6a30c36a49fb9c2368ddcc0999451cefff7ea63ee325b02c1967a192bdc1857d59aca7bc434a94d3f60912aafb488147841b38160444507695568e3de52cf56519c60266200f06631e707f454ef9f167f1b1792aafaa2e682ecf062de8a37f70e18a6b16da8ccf35cab46a85e0f1ec78c9b6e45095228072e6bf9131f760a3ec6452c3892098582c7edd1ff54b188a2cdff9bf8559b473240a59adeeda788a791b1cf7aab0d3530fd12eb97c5702ae72d2ba10f8867cf16477990957dbad68dbca4375ae964151a3e9581874d9c3963ed2c01be3a792010d33d1adfa36a1ae1ede2140b071671431425c46bf3f18965d2ad2c68870a333b9416b9ab641e9dadcf4a5533c56419c591d4b30221522db3ded83d3e7e7dc57ffb238fd575bda4ad6de2e6fd845422dcc76f6639f31d9e8d50ad1b3f2e0ab7a529047b0960e3aede822e27947fa966008b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027616c275681d75ced0a5e70c6ac158044066d2864411bea30b212d009f19a37644debda902696a54565338d37246bc6755afe2434998058cf6e890fb5d87b01bdfdd982fb24d70c16ad4df7d1745817560f361fdc5150a008cba58213d1bcb15e5a77b11be24266b65175da3e18090bda7e5a18f9a60a8f4170b4ed591cd47771aca1e5fe3b147dbc49cb1dbb2db6e8f537e4286479d48303ae9ef2f3510cade1dc58740e9ee9fbaff5dc30c5afbec5fa93375675bcf25e48d4723c0f372737ea1d5f7f818af9caf5364a6f375b4487d996e84426c36f627d24d124075d657f867441b30929a1f20841330419826aaf20edcbbeabbfe9936fe59d25c08ab4ac407039e40f3969f69466973eec599159ce324af394e5814797694336dd95c8ad41a850941d4fee6213ddf5375baa1223f6cc7ec423de47f7ba3646db8ba15d313c041b67babc2fc5925fa4403f74e9c0a3863e6081a9e379993306d282f74164dd16bf3afeb6ab84cef7f09a1c1215390da07292fcfbb606f908acc9f8089531d389d4e36a8be513cf9fb9e4137cb49be593181887e6bdd217ab7f1d6fd405156557c5215d75a388edf9587e95b10ea7b100af2f01f2c333405aeaea9e6a9acf0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a366bde9ce24ab068818ac5a6e78ebd65b884130d56a8cdbf3a9fad0edfe352111f575c761d1312779f12279307733e5c4a07d77ebfdbc23cd714fa3a11025a715ab19b50fe016d0ae43dae44dd58690f5e14c506d6dc9960a91c66af4c5559bb02c8af08c0ede0072eab4e948d9ddd227673a911f68c3aba6aadf289957f50765c5a5bf9e2b3975294676a5598a55587e8b6c62384e5de38a53ac82070130d90253c09cdba6ec6091c345853c6652d402b6657e66d28bda1b28cd38c8a2ae5b560e41756d061fd0ebfb239714804fb792a65666efe0d60d59f0e4e292d922e2d18df4377b68a67e48424dd9b40b410395653b10ffe1a33bd9a366473cd33538d771baa0292b60a0cbe1f6477639c4d1c84b2fda8acbeae525f176b764eb8cd8889a6f11aef128c611abaade312c64e6826f5580e53f3d4e0894b239983076dd50bd3d4f69b4656ea4f68cd6426b71b1e039a88d46edc7430fb1aebb945eac118f27adc2d2860b33375ea0fcddaf48eb9e5f47cf97acc75e7ca73f28e8cd6bc75064a5c238a150ac28a74be7f72635a82357361366fd13c817cba3a24a40b66b4af8594e702b0f3616365738aa99a699122b33903dcbf3f5a05098aeb219673900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c82993ea09b42d757a1b7f53d3b3e91a5a73e9682e31b52b1d6fc8620a96a5e46b8eff222d9563335127de847e3f3b10e7daea508d40711b57d2e94b3803012986de840540010c4f09d11bb0478be5aa24960a2e6eef74f66b1b5461cb516dae34dcc563f8793547890416fca5b66ad292b9d48bd9f4cdccd84db8bcb6275b848472880ca112a2d958e193da6185a329e1af83652a07deaca540e7c385bf4b166018f99c9715708b7290ca360bc4786c62d9a956babc46a01db13b26653f5c5c7a1d95993e221935b1a44d33f9982dcadb260cf92a58f2dfcd3926529f1e3d76582d242df04c29519fa56d4eab09ac3637a0c9e0bdd2793396af9205b27fd17d931c29970c226f6ea59e1b1136e69f069c2674589a3073e3ef11b999d81aeb9bcb2e836e3cb80a4f56b93bde991f25a8411b60a257bdc6a9f9205a2fab8532d1a41caa9e60a670dc0310ef11d31674c90b7d6ea695c416eb4d0e93161c0241a8aad607b138a0964d3ee4343e8e08e43422e893393a6eef48754832575024336a94a1faea3f9c7f0ae86854714cfa27dd2d9ebb57f7e30b1f82c8b59e305abea1d1f0837946b2d742fde9d773f15249314340f06b212c2c646e692b34e4e5d3b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b60a0eb5ffd905d5a897477b233ea9fd0a302db0db0924b2724c9f6be8a78909499ab7775ee180414696b9a79b3602273563204753ac14449b29eb1de03650e46e857e74f57081cdd5ec81480f12675a9eb64ecea88dd1975147e3e4d512c463668f6752d87c70c2194db16c3bc7f738a34fbd0211ec23f13afe8a05b3eb7facb560fbf1764323422e3ceae1098609fa065b00ad8116c72542fdcab2630e18a2e4d32a1cb3b99054e1aeae1b579e00b29b489f1cecd210a3518f679976af79e9bdee6daa208d0d8d6954493c1a5e1f157e2abc2f3fd7922143bb3e2b00e42c3cae642c29c4b0d12085a6874261a0c7e2157882b8033860ffc402f0746394d0a56ad0d2426456c0c076bb85e6974689751fc73d93115e04d525012d13400b258067051f3b64351e185acfa77444329190527e7ae44c6c0eef92019f881dd3b783793d28de6c9e9661e535d7919f4875fc14d747e6941316358f47978d134e2b46a4e8f7f68a06985be6bfd2e7a1bb4c88d2d3b6b3a1d4eabe97a06b8139c7606f4ffbfab738edf03e79cdeafad4dc838a4fa247fe818df464db358f6b747c545ac3b52cbf73aa3a257c22b2e9f028e9eb4b1f1a005794d042cb8306aed96f583000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088df63c5840cb7a5510956f7e862704a0cf80fc65575d503fa9db83427d041567d5c3608c85b0faee4103aec5f07989b7d2608780d96e8c9010f539c3c2f244633a015075e5e6adaa850fce52541d3469e5a347490a88a17157f4b6ac1ad99bf93f046e507f7f60ba8c39fb0dc01036b57c1d90b8286a8f9ec458eb7778b0a009e2833386446bef43a6cbbf567678787c97057b0aa105ef506949e047ab0f74d92f20d5ef63046067171026164c1b98ed4ef9c0c6624627bda3c724be1e8731047955ef8045fcc2f00f1055f9f22619eb95e03d4289e32b85700c51e71ec8761c2ed5ddc0d46844fcc70649f794af4f04d2875aebc191d1711e32a93e1c95f44048ca400ecbe54d32a5076646cb9c360a3d732b40c17b404256d4dd506caaa8e5c94697315fb99ee5fe6fa245d3adaaf0b3d54adc283240dcccc900cde8bb8932e0b862df1115f19344eed77116db0e3ca1661e1ec81586fbca5a1820a9f1fd3580cb4158e7231642b7508a3265d12cfec38c0f483004f569774288d46176b712561a283584bed318ff82261d8b268256e388444384b699262b1e13a590724bbc5551dddcb6382a20aa5ea15a281cf3bd665f4463a8785c0a49c1155f82739ef000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089c658f99fcaa72744ebc7566af3168dce894312a31c0fc293961d22b352733d71cfee690b97d63069b6fb9057e7e20c0a8b19bec19f9319915a16aaf9d000bd76dfd39568811d74c600c2b9fec003f5519948c064b49e07c6f258a52a6474e11adb53d222f81957e862618118ea13c237c8689864db9084eae81f9815ed25c85963db9a71d04f549b0b8037963a474c5fa867209d893eeff5bd8ef31076524b4210b3811a7575bb332030813e54abf2ec40f3b788d739b777d1aff114b68cbe025f2986f5a953693c661d46554538f130a35533e1f56100ca878a98f33751dea62970d4ee779626cedae9820e13c9283c47f6a695ddfe1ad196fe070e63e7bc81081ae25d584fe0b41d5a39f4ad7302c64f33019777386624c492a1e92dcf883f373fdb170e601e1918b51fc25cb3521804e462f24b74313f75e14dcdffa56e60c5bd392f19b09510ae92edda0eb1fb193730387e339fe0f7119ff55615f1224e4903daa49d3dd8f7731f81606c31e41955cab8140b97d47a37a436a42ef2b3aca44a10eeede13ead83023d2ac9da7bef170c867f502e04639493bb2cea2ceeeb5617b53a1dcb8932efd4ecce2a0235e4d533cd11e988510ba1c3f6a28e54630000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7b47ad700e34744372cc3d87e31c7d62ec6fefd709b4b73c8b0e81fe3fef67f69bf9ce0d093b267c1dea2486f71029c2878c3a81506c642420f553e211f01d0bbb5f21e6091b6bf2243b38bb550fc36fa4faf2e0477a1c27e26b75f0e84c32efc02ccef720bfa586acf572654e6e077a7c75b2cd880ffe028aa4fb326d45feb150f8de974d3c19e57ce50dc1de5b80c421175c57282a4dc75602d36c426a0c6b62bc33a28b86fa1a7451b9e520d351a37000cd934964d7c60a4de08720641988cd7f56f2eadb753a39989350f3b8379c101dc661cce0e4a40fdc1a5dd7f55c9dd9e4bc282e1bd123093a902fae42110f3444214cbebd7c38eed6427c18664e07d14ee67615f648145b2e3fdbbf8d600fad8fe5305ff24a21bb475a9d35fc8197ed391d7b80bfc737bb654de9af4e94ca5b1fc682c5878b95169877e43ea646971cadac4c613563d752538bb2ae711bbc31794b1782a56f6515ac205db7670c653bd08336aefe3019d8d5286f380a820c2c4de9dc2ff7a9bb79f127ed143d5d736dff1c64b97dc9a4a726611a404e284cef5e114ebf0409e8504656c70ae92d37f431413b74f11ad092239a89a8a0cca8c97c4547073d084a77ec1a8e53edfc500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008020d2fdf965615958e34a1305e65833a79445faa79c0c3b7708e69511c28ccca32c645ebd2ffcf0fb061848f505fe089eef47c348e3d9b7f292d2481e600ad911ff5557b52a9f6a45f7d7df92138fcfded780d19064973263c17b286ff566ec97b6645a07cc22c5b1412402c4f670146dc43c6c82103bff505c46e2db4e77388fac6fee929766a2ca3d24e23d8fe96140c1299c1ddae00a5f2ad2abbb32c93aed5db9402aa3275f11ec5ada2e2f26b7f273454b6706dc997df1067c7b507a80c8a3510889f2f664d32f792d3851712401d06de7eeb05048270071682c8e45aa7dfead5b3e43676269ff49c1ddc1151aaa7da29107f61bed2fc5c5b05baecdf5811375a5055b9c68917eccdf685f2b90166cdf60fc2ea2baf11b81ada38a4a867f66f398c05c733da6bc3ead5a8b3f7fc5be6cb72e76e00fc5f3b30c94ea312a3e5c35ef587ec873cdf98ee3740168bfc05fb4f431b655d57f15b79c147b704d4a46b02b95781116bcee1d363ed430853be4490385a65784807807b0179c8aa5f7fad394d198fcac9572af5cb2413dfcb6a2a9f3af56f21abf2e07c60e2fbaf92263a011f2ac4737a2d7e9b43b60b99df8c421b7ee2d0032218316b32dbcb1aa00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009aeea313dcdd82f98e0d202c7ace8e3a7d9d9da7ef90290dddb823cb47f74dce89a529be9b17962480c89d25902db546fd574f5cac39f74ee987d8b5c5b6045286499f8260bcc3abca8fd3591ae6106cfc720687b433bc63d74b8e94f620a2895b6621c0d4fdba9f87cd9c22b50e5c12e6263657af42e0dfbe94eabdda4709ef750c7b3e221eeafef2d70c2f61c7090f4ff66807716ff927a6379629a79f3ebe336246adad82140c8ac2880916add4ccb3cedbd99a1fd42a777721193cc304d6cf254b60d7214574fd66db8fb83edc0b8d6243c6c84f1c7f3c84c11250b4b6e9c741f6915f0ebe527fc5936c60d8d1b7dd831364499e1dfec704fd75b5ab940145a0753b96b9aefd6c7c142b34352d53f2f786aa936ee9669dbd00374e375c4e767f4e2eb8976abbcfb32912202cf9779d0a06443575016bdc6bab502b7c2fe488208efc888123ef0723beed0f09b9490d34f188b66e5a7a39a950a3f48cadd9361fc26af660f163b8d27b3cbd7f6730af31548e777ede99de7170db4974a5812fb53e08d5cf176af906bbc7b6891a91cd02105b0655e133aeac75c39ef84deb0f25c6cf41a505b599793290f470f8d59fc6e72ded5cde4e7b129a08ed188ee700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c4a43cf853631fe6766d30a04ad11e5f7f0a2d77ce766eca7e70f08dc3b2b3e8422b3635c90ccaf7f280da93b7c887c3875572c18c888b41ac0b178de913c77b7f29c4ec34d5931553f0b51a357be979f96c7f4bcfc2566f0c3d1656037e23d291315aa1c7e17746a9cc630ba5021e4f0fcb87b4a0de21aa0121a898af8165eb2afcd306c1f75fb5b7ba6111345bc033e4c5e4738f8144dbac0ded6f3629468cade4da0df850d133219de9b47df49e43bd6b1f41935a605bb69a556c9317f8d48a2cb3bb6ade5d7b5f9619e89212e05c7055a7d671c690f5cef4b210822b701547d046cf8633070e99584347d17bb834016e5c7a8a43bea2a8ee8e89f32aaf12b6246a3673dcfdc1aa46c016a14ae5c939774b52720375b8319691d71389bf5209d215ed52551ba6a3adc329e3d9074ed713f9c6dee56cf35b25aefc1542b15bcc827afa476c1d80939fcbefc88999f0444aeffbb19a0128ca65492a7b8f0662abd2832ce97c42f882002cca2a5804ee42cc1fca71d09057d706f3219d01c8c4347f337b3cf6fd04af9612cb36f6a6c0df7cb96b4282d58121a290e59aeac662c19b9c9be3ef5ab186dfed93a05242c0bcc60c8496ba0164d4800e4bb8012360000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a623fe44774d19b482f51b25d3b6d5a0ce7c77c95bbebc19b5983612a8db94623912a7cc1514fa5f972cfa0080f0f9708d9ffbc403c2fe77b88b43e22116e4c2075e790c3254b09a6e952f87ee48844111c5587c8a4c70d8fc74d37823dfeb0caaa52817fcc2681d6efe04a899e90386e9be86cd3a49a8df3cd305c830baf32d9687ab01be8e55ceaee54313c852f61d742bf1551cd18111a69dbebd9f62377d22f67f70887539e49c4112daa94d4ceb985ac58d766fe19cab8f79bc86eabc27f3068a56395e768f99f546f68c43d11e984989e6b92387fa61b06f4156111b6c3f22533435e24476e6937516e2fce08b235d9bb00b24090442ba6b8dabfb10e116ad0e13b1b0c0999fd9ae07d85fd01f2a3e65a579add1b207be6fa1cf366d79a9078f0fe19e73efa8942ad7d855a6dae7e63bfa17575525f5138df84b2d160672f8f48f2a30b0baa6ebe0d6da07414afcd77321aee0af3c90e75d5aeb85b9523dd48e72e5ce2e37f33d69bd1798b95c277d0c8cd7f0d3883fd9680e596978ac471424aa43b3ae4d224119602509f77b79e547c7429ad6aa91877b9c37f11b5c4c7b2ebad22e7fde7252bd7ba57be5a161cdcf483bffc3a532fa83c18ffcbc1000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d073e8274888e8e04b78a49a6c23f73e9e56ffb91723501f1174623d3352b7f1ddc68c3711848f812b1552c0c85476ae3c9eec145df16fe8db4f460d7197b5f2efce1363332d57d7efd3bd5232b51791026bc22d774f19e443d577f922bcadda9fbcc122b7ccdfbe1a570456fb81ebd30f4a0bfc9f0a926ad9bebfd4d5e09e3fd679282c2485e7f4ef58e02def19f83571365d94faa42e94aea6f548c21c9b8145b55abcfa9e3b9406cdad31411e5c25dbbda2630b8c7f72a76e7b79af6720a5b20d16c510bafc10c6598736a664b9b0006295cd3c720dc9604a9623b5623801a33ae7a1dde235f5199fc93a5e38626fb0bcf30ea0925e2361bf4d8431e6ac65d6ef0a72f16d231b3ac54a21c58a211def0e6039049ee56a312403e1d1f217437b776802b24b9dd3bcddee1ccffb37da4da69430c17408b615be8db80346f55c609b279f1a5b77138e38057b20230049147bac97758e2622d6bd53cb8ad61dca7f0b41150457e265280bac6f7a1a26415aafc0e3f6ce5cde28ef1d87dd04f68d5a44238ff07b7865aaf754e369af840ff5d2419a74229d40ca08084b30163d4db0f846d4fc57842e15abdfd46c59f86007d52550c4756d5eed2ab21acf6d88500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009fcc7aabd15ee13fbb9a9a90fcbc91daa9c82281ce4639307bd3f72716ab4e645d457d1d51eedcd38fc38b178953f16deb70c1799f979f45beaf1f8dc08d5b35e92352ca03fbab9d1094a0cda9545391d8d7946b21b2324d9c34d2a8628bc1b44120d783e1b6d4081c26b673e2da53dc2b6c31060fedba656e6cc200eab3944ae45b950cce2dde7e3c0992054d366c309aa7bc66241b2c762c08790475d3c6782b397f7a219a7df5efb81a3b01b56297fc075fa722e9936f235115d1b45419310c3ba27a19a15e87e39f347d0544ccc088af44ceda69daa8dd4f36fbcfeaf330fbccf96a4babb69281a1c1bc864eed0f4b0e73a7fcaaf2e9a1eeab93c83034db73244ac58b51684a1b65ad76018c4bfbc2a4ebdfdc38c429156473996e5aad09d28b98f8ddad775cc8c9603687e01c8b571a1b83f3c10e76e23bb0192330f4ae8d0f9c8dbb13c1c14fb485314bc6ec03d6fa6119386fd1d1fd314dcbf5fe36d80d2afe40f00cd8a72135e5059ce9b143632647b0bbaefb4808f98e4202123faef387ec276a406bce6d1ed1a0be7d3f48d41bb1299e5ba6b7a0fba6085af2aab1d78acde913100dcf2c8dc10d7094e3ae81c8233168f0edcdcda4adbd0657df8f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000829921bd66c65ed5fcc66ca665841ffc1ba57a07f324360a23bd2472b009d475b1cfb2f8d638dda71a74845f75ba48cf908687502fe9ba5062bd3b632a81e3c7f9fa528a55da84e91940d7e714ffbc5b2225d2ef13e9699bfa4662d926df91c084ff8587c8fd91afacbeb5c9108c7b692297fddbab0f5d2f721711b66a98d091f97a97856b065cfd8859a6d56daf3d8dbd3acf70b8ad77d2982b84a4b5a2da7cae6be3f75b75645bf35ee6753f97f63e0a19b36983863d512760d78b4a08c72941fc2a575556c6b5d5ca5e3cf3b0386ba554bcddcd90cb12f181d3edf51be5dc670d5df1d550ba3da637da44e305145614b6cf1e7be273557da0bfbd65493b0e69b9c83738961eb2b90dad3488b8e6348738fdaba0d5a9b25e551fc50d3a0ab7edce047d10faebd485bd09f8faf1daa9a7bc53cfd9a9c0879bc5ce1e9524a62ec34811265e55ac9a1f8b15bcef20c4bf4be962d15247ae7ffc021bfe9745748376cd4f03458e0250fa91b4fee5a9e526b40043239418d9066f150c018616a27bb462df081228df2bffbc7fadc9c7e28609c071d23e1443305e8e6a755a5471d6c8d0084eb119c2590c8b7febeedc65774a62bdbbf049ad6346d85be4bd5542cd000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c0e21150a5ce4d4f33deeca6eb7e9e91f28a5a557a9f68299609be4ffd2bd038094cbc2af36f91ba7461b81b7a3b735c52be1c9fb266c9e9c1ba176ad7e9ac0de503b398b298ff1a62067e453eafbc5b3ba3f194ed23e630ffe8b78b6ce3d86136ff2827919c1b264f697ed28ac807995affbae81271152553288dcb098a42de42bdc2400c8c7e4d0d4031a7ccacc8ab8153cc68f9c13aa43cd114b12894666e49dac306f7a98ce1912078afac413067d8efd7a95a14c113ea5774597ad2129d89cd1e4413e60d5b15a0a89d3449eac65c1561c967b0f8d0d03fb122f90448f4c11c91dd76b209eac65c23708b07c3ed36275fddc61db77678c6ec561124af58d1ecd23e89ce71198571fb9ca63783d5db19a316e06f5368ceb967491ee11c229153c0357abd472d2eeb324833f49a980205b7e472f19833a3b7860cbd6a2d627190f5b0e8f2479b3ffef31ad8b5f8d37fc12ff822ca416ae03277b1cddf5bc53c635fa2da4b8d49a509b88228f93066e7b09e9876b777f94129c1f43b56e922df16c559e10d5e3c90d46e644511d4a3c493f81dc85ca606579f346884e68bc309a9c98aeb25e1c8ee0738629ae5d3a9fc0fb4cdbb9340f5312f2a30ef576100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b6e64fbb73d65a5282ce4b2e2984200e8c853239766a37794d52d7742645c52d1bfb7df2abdf0559e2f0ea4693ed71fc5d86ec4580abb81f940370525c6273ad8af49008d2b1070acbfd2d3f5c40825fe5f59530af41a159aad03d26717556e0cf84fa21ec3fe4d4f0a4bbcc06fa3d5d6c874e8ceb7acedf6b35c74a22d76d2650220503e7b5c940b67d04764e151d8424d8d8b716251f8509bbf6e928fbc06ed965c0c22fd31947f50caf32b69cb78721cc6bc65d53b4fae361eb6a6e35395b7b5185c833dd2a20277cb7b9d3962151feb825524c8bf4f9d4c98a83721e47e10eb0a7445aef8b99185b347254a5894064d811627f45d362a0f14c7a39d5c33f9db71bb1f146dd967b36def23255bded0ca3a994323d1de55aa5a324efa759201b0d02bd14042bfc82dbc7c847a83643d20d3ec866e7304feccabf326da45ee77fecbd6ce5a6b59e0ef9883f1b567ff4c121ff42e55cd0efc6d015c3c4a080b40124de6ca1a9d5234b9883009775e5a292207bc99ebb2eada9b845560b53f3484d0aafe12d546fb501b56b5e22da8d627fc2fff5abc28fd0744954569667ce6a3a0d936f1a4d69c59c05c13c6d6e918f74a38462b3188f3a643729b3d7805be000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cad01fb098d9e51cf43655f6f8cfcc21505aa0b4ec96f7c1769654da68793ad3bf17d612bed1ad7810ea5dbaa9abbf450a71934d3a89131d9f07e35f7c456ba407dfbbb7f402d1e4efb50d53d100781d0746dbe54fc2a663bea24e10a217fbb1ecf3a9040a58d7a7b5c650ea2d9100d5aba54d49020e3cff3bb2136283a8c8522c8e6193b37d1afdaad662d47a9d4b19f10670c1244aa9fb981005f8eaeef7ae18aad7c39412c0a701d5d04c257dc7171c6322d0f59da7687ebf7b088f51e3918567b0e2750ae630b23ce452a1e98ba0459d02747c3b3dafe707b61a7b6a19ab882a54f8744301fa55945dae0e2e2d395f51715248c4f085f7f30c49926accad381cecfe570a700d1e1e00c012e7ea17b110ccb268ed69564db5069b4801d83234d26231ffe4c41e2e8e08d6fa4c6ccbe091250a87ce822ecd823d8fbbf6e8f3518399c2b77b8cbf1a220ea4ab4125f89d0061bcc8ed35cbf18a636aa49d3cd067ec85dfd2776be43ab2bedec08101964157453b550e68ffaebd8cb6131938ea21e685359157be3f61bb0b95ef3ca4554232b7b71200a7c34e771b1c6a0e9880c1958db6a25601144f0d3a2963dbcc60c2a9feb77b7f8508efdcd82589dbef00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c50a2bb3fec7999bb32e5620d011b252031aaf16f7ebabf16dfce932bbaa245e9600fe943a3b27f624146cf8435a74511382d9f1f611e8ad5644181cee597a4e0d8b3f7f16b722d52ea593d1abaa77b499bfe7f3277f01e872896e37f1d666c03cdcd6f21ab3b72075c745e2c0bacdc4f7678fb3936ed977b9c62e148e2c078339411be0fd358afc6dca35baecae6d9d79dc5e647b2a4601d146fc482b7272e25662c9c7360ce451cc39642e72826fed1719394291f9cfd3bab894b6b1701b67b42c7f9dfd124c91f4e8618362e1e49ecb24742508b12b249066fcdaabce160dc49ab64066b3ac12f2ae22c35c344a222d2acbbc38042e9f4531fc22ea85285cae99ccb392617349afad18ac70d921c6ca458ae64149dea3fe8553c3d4ed80be30c6736d935b888f73f50075544984268f4c2ba2794b20aacc2ba06bfba03f0058462c205fb8d7946f4fcbd39794af2d1efcfb9df0ca7d0f0750f147ef85b816e9cc0b50f1fb0334d49b1aee3698cd7c19615dd6f3ef1ed14464847a173abf8a9f2eb2c868125a353a39e28004f4b5d258d64f46d029146b6a0e700d3946c6ea260c6358c464c8d2322e0338172a474224767e3b928ab77e55c9b1ccaebf692000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011e4bcc17dac0b79826c33778fa10d1fb8eaf68ed9c5c781169b90b1e0a4c7e54825c8e3fc1b0902749f4e19bd58039d5b1e82dec9eb2259719f90642733889062911ead90bf859aeb93e1d218c27d5dbce21d373480c216c326b178c74be6f9014efa9c711a3ee35b44aaba8b0304bafa8a8434fa9a2b6bcf471e4b124fa89759708588f21a99e8172e3af15360b847c34e32f2c402496e7766115428265b61732868c534728b5d32705e67a0d14630e8a03f82a34738edd87b31b2ff1a80c02ba1ca197b8bf5881c881b343f40b7670bf2497807a2f54dd3f9639c8968994f9e7d2ba1bbb9e82b0dd8c68aa218b9078a93138a3f5c16644a75aefcd84ee84c69a9b47e9ab2b3e768bb653ccbff6fb6b80b82394482ea38199f599c49eb41125a3761816c146b940427a134bffd47dd21d0a665889d56651d19475e6a313e052f52d6e3b2038421cebe1626422637345c43be438aa87de65ce4973f56393cb0915139c38e0a82e69bcbf3f6326a5c43a9c13f5b43105b620dab3923bf0e2eaabefcf15a6895de597067a1ff9e2232a9e41b8d52102dff169979f10cb6cb0dd891ceef80a5bccbe48b80395e60ae7d79ea32b9b78ba7f59d8ad67a1b5e8783f700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac05e2e1077c6304c8ef2de0fc61c187347f955e35b0075c05b31846fb0869125f9823eb29d44b1fcc52b8aa8fbe8ce0b3a5618411aa41aaf62491f36ba1befcd74027e6f532f53bd736211b0e7a726ba19b0fed44ef1915ecafd2b70f38dd89d0437278b1ccc0e7b5b4df4527fe94d4315233a43cebccfa27202c1e5847224052f89c76f6348900be5e6c4842b28b9c264c70cb52e2b2b8e2af23de071ecf2a23461cac3d3516f78476a2d3fe6b37f5dc1a7840af3fd0fe627f2d8263849dfe5412a9d7e13cd1d159867ccd20047dedf3e3349b6c2d58eb7726797a000819ec4cdc9fe7841429fd2f5539370f97caffa0c9dbafa804c2b78e17de60ecccc9ac30f6acdf0c9c54901635f2f44e4a4a4d451190ed9dcc3bd8067203c84a15c4c18c6c7a3a5a2fca7ef266f5c44e4da6df68327752134fa16650bb52cacf1d800d1dbc8f3cb6ceca0928c58bea3f70c645a736d56781f5cb95f8b12006cf84682f13aef45177450c33d6de3cebc394232082fac6dccf707dcce63e5d605cd101b1a1f6356e7740129601dd7c70005e9717d8b9645515265c03ab2ba9f83ec0de020f07b372ad7119c0e5e581db39b375bd96847f354c22cdc73997b7555dc19d40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025e7754f58e7ebad44e20f1c831fe692b20b6d8d8da0e9eb441139ad33f77b65d3742021d0a5b12dae72def495ac4ab4afa02cc44aab08779877860aa5bbfa5c1fb9081d5c66889cedb89627e159160af641b8dffa8fde0c4a686ffcfed78f55e7db2f7e2f431683c2862a23c7346b3b83cf075049424a5e82812b2c65d20289ab380cc5d783d84b2f4bc0874ca4994a99c8fc9ce9d6a8863f5690a45e3a27855c28d49cfc1f8ff1615f45090ccdd8a6bc95fd79dd1207c8b27695d7a937bd548b45603a88477389c4fea2503db1d841e1d32c82cbbfaae9306392dd3cee98a4817bd8fd4976eb61ed6309a256e683282e5305554927bcf4e40732bba54f91365e38ac4d3c01546b7013025e6714e61cc8da2e0377300217ea4bdec49696c790a67d1dbeac3d5af312c94a8a9530e8bf48e59f890aec3e66fe614638ed2de2df76261bca59917bd8cbdd40fb8b03e5c43347da9bc61ba83c71fa2370094f5411ea1918b20788d169f281ddb071290696642c9f04568586db6b9814c70d55d51a42529740032b232d580fe7bb8b42057883a66dc98ddc30836ce1e7c0aa97fdefde7a0f9f2e5fa7432ba86185933834bd1eac39f9a49ecfa683654a377b9af78000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088173a2c99dda4af3100d1c82c0d491ba3c11dc40b56d269ecfe9c3b509416ba3889f040a2b03d879d7d4073be4ded70474e847ce04b71b5111da0596d0cf0ba54b9d5d3c94a7371963795a9640f4e5901f32e034ab0ae33aab67ffcda85eedbd7092c905959ffe49acae86d2073a80f4057c2c67dcd9773c941c9d44d6297737aa425ab406c4d1e40eae94a255059c704604db7528adb65e69ad0fc32f10250538abfcbf632d4dc178a92c2aa0b78a68f5e33774a8f20798f98ceeb69dfe447b05f13f19ea685d7be9e2050dda7e2c50c327a58fcbea4c716e1cf7d02a7c4eddb31782aa774285c6d74e1389ad4d6ff6887871aedf7a2045fc6e202c954028a66940896926c3eddecbd9fa1639bd721ddb1784fd8d41bb4e51d9bbe0beb8691d8fa1825807808c22a928612af9c2d8fecb690004532c8eb9b910cc1fb3634026ac15faefe4fba33f78ebcce30dfd5507e46da2da74c4f303e3dc6e388cc200b0644a998ee6ce89b202142786c443cfe417a1dc0f425d40341a2b083259241741d0eb3d73117ce14c33695349428b43b885c9e39c35a9d9ab7be525fd4aa67462a94a1800e0d65ee1be53023e78fefab9d560805e7c2b078c95ff72adb376a4b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e508f1490cd6cbb4c56a089ddeec7957d86dec9df9fa7bd1f82bc66b1ec9892611724214dc9d7db51c1072c8521a7c14e7f0b04a5ee646ea8538284d4d79253318f561d978b0947f0f29af45edc221fdf54aede3003a4e305b1dc76c77c6ab5a85dd70d94dca599e12ac1ccbea0beba61b6b46f9ef99af667b3a41bec2cfd34aa08e2423a604266b8d8dc0868df5f7d51b880618eed49667d9460cde47108f16abaa8d5c613f29d3c7b2d64eafa3bfa120c55f59491ec6aac28cab45f0cd5995a2b1a258731e5786cf83d2ca74d304893883faf8270066baaa92ffecfbc40895ae2adb7c0a25860fbd5e445fd78c7d6f38425c1ad8614401b7d8321fb4365049b02bf72e2c1401b18e06e3a562fbbed9a1392f04ee139fe7952af7a7fdf2e04f7dbed5a177ce0c0f34540165d36ee0de1875b1612da17310a8bf65676499d832b264457bb15837956ec084fba16b411a6e732c0094f814fcadef10e533c64818480e868ff14b4b3e4cfb9a401d49f409407cf3c2c541d0a7048941c3f9c99c5037c722275110cf79edda4ec904269a34825bc8162a2f124f3f99e5f51621b2c22370e05d345a0345183b8b79f664f4d217e844330c80da70af41cca03eff4e400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009217bbdb77d25d98e4538330c8a485b02f9afdfea7801ec46816a2a2b92d90e1beea2702b5c9a49160fd5abfdc2b4f39366bf7124cba685fa5b1bcf9f4d30705842e7a01666c4a8a95baf69b3de8b982d1466c15115f7c8d319f69d13c906766632791b86eb18d473247875f8bc626fd1904161e791e8f907a5b489051b199ea75b8d109875343922b9958c2def1760db540204b4473c32b316d4148b4bf9308d097306473bb1daaf4c5a1584bd135c0139f13365c90c9cf22ec32894822df4905a653ae7ba3f2a407d64ae4dace818d9502627abbc5100f0199653afa59ea10b04418475a7079dd0f6d89dd3e78100f95a88190403409661588afae9dfe3294ab4233dd2f2464d2231a812dc5a1f1e45510543a87baea05d21f59c09fd314d584b3f375a86d430feeb24ee0948063ba60ec985c40ed8751f19c582cee0bdc439d13e48790f04b1ec5f786143ea294adb2504b5e7edf063fc720645070df9db4c882538a16fb58b8d2701cf4aa7707aea645b8c22f41c30620668fb816e43588393d4f77bb8089f2f948c9b5ab792e98250bf8645c1ca4239f7c40d7b9d92b72fedfee8bb3bfcfdef9d5a5ef8e8873c6e6ac6e3fe42d84f9e47ea01ac26ef7ad00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002698897f098f048c4d5bcfa0530822b645a2b1b491c35714761508b8180383bcb38f10e31ddab663803afefbdde08e2585e1ff915e37d28b935d5391b8c968f8ccf8d353093a64632e62b148ace7395a3e00b87430a55e6497a4e3cf083c639aa6bf53b758540ea0a3478d969f29951d182055cbb596e79c917dbc9dee9a4659b62cf0079d9ff2edb5bd3d207fbfa92f020d02d46f459d987fa4f35cf9db06a99f4451c6ae688de81363aa92085944395fa9dd81311cd36a91abde4d02a60b34787192355092cb09fd1698e882a0824368ef572468957751b9c17f5d9cc78d4cedd01f42f32747c737956b395bbe8dac180a91a1eeee65ce2093fb3506aaf1bc47ba976c540a68346a6a6607fd7840f9f14be3ecd116b378594c69e99cca27d31feeb9a56dfbb1c9350f059438c4ba8104563665bb154b17557bc2f1046a995e00ab26a155bc479232c756e2d5d092bc0a256e693d1d1d39530a82d1165131bb5ab7ebcba1edb15b6f907b193f9c91e2c6d3dd6be9df119e859f2a93511a4a10626e376cd27186f97b86b046281cc13e2c62dc8f4f099832dd37ba8e3440d0e572ad733f1ee202e1f27acb738ecc3b9ca773f29eeaafd0ded649cfaae6a92f630000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000163d665468945b07a6fc1138fd752963a772bc5e19632ff8b8a2197f7f9403d0f2ffe9c3fba062a54425294331516f77a8c2ac955e959ef537e610c637cd185d25c13cabe988bbe1400f0d93ad8c762c6ba80a852bb29be03a172dc49405b59abfc9e0331f7f83213cfd3a19985927c991a6edef83c87154ec35fce04cc0d3d4c3cc3abb2fe6b4e1b0c2e685eee4994c78273ef7ab3b373bd54212e53ed646363498448616c3eb31a429cadf3aeaea8125e0d79eaa15848c3bdc2566446f7a7a4bbfa3ef348b77518f766fabf7c40f31bec144572856614296698c2862ce77843ac3357a420d347a0b6554910c17280fb56a02ead8c70e3087e8ef1fb5a98e25f16264bb2c96e9f51414506700f8b8d017166e0665a159c35ac2a4c9a64d11286c98313e8a9e3b181ffbda5b4e26b9c37e594d297d13d5dab60dff5ac9a858d7cc4e3f45ee7ed1bf88c06b877c2053ce31cd9b29b6482fc41217d3ed08291a0b64d97a61703133e5a42761f815e853beba49f6abc7fa1c31abf20c26919f07a0d7d2e1fec8e4d2ca10661939309fbb914543f12339a50e428ff05264cd75587a39d83c878cec1012a391db477591ca2c569ca539e2b23d33ae4992a4acc927620000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad456495f2ddda61804ef19d94b2099d8782b510fb204d29e43527b8f8a0743d11cbf9134153177508358d1585d2e54a1d1cedf0568bf009105e7bdb3596fb14921f879a81629dc01492c329fa553eff3d7dc315f1a377f11af0c7cbeee54938c62fc088bf139719b396f223d25622cdc2c80c31f1e72ecf21cd10edc3600dc0e178991fcffda983f2aa73b4b011ab07b971294e5ef8b8bdb9d15c7d1de1b1b996dac99941ccff174d58e13a31ccceb0eb0388f45ba4eb779545e95d82e983e56e4ae6447cd3d9a7f1f9875236113c73157625ef7bc007f3b84a648440e172893720453e06f392e362fb2fbba5b80ae5331f334e495765b950885a764a572801915ca2036dc5972b357db1efe1851322cbf61affacbdf8afffacbcccbbdb82abd6e1384aba7266c5047627f256903ea666eb16372d9060be24899c59b3c680cbd448041a6671f9b512608bf3f350b3fee7e5ae94501b72d95a74d36f4ba031e69d6c4a6c13e2f28249e73ac8756ea94ab605067f652520508f1352c54e105dfa2082add88d01acc32f664973781ebcbaac00a5dbc278adc1c419baf4e4a70d5b33865664c3655ea1fbbd9fc90b25a2d7f5f7a882d6c38711bbc4655ffdf191f00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad84288ac571f7b287cd9b906f51bcb9dc6991c729011a5d7ebd0852571d215708c7ad3fe499ee47f6166effbca6524cba5e6997f238bc4e3586fddd6937ad2284d33f18a97570f8e98ab71a0f6ca1ff36ab8902bc276a021dfe13fe7cceb013ce386a6f3c94b7abe3d57ce1a0434c73e2c433bbb2ff986839f49943c107185e6763b218f6e2b5df77bf7411ca191502380cac94619cdfcef68ab0f2837e97baa08b15931a8ba72862871d8ea843d33ec1e17f30899c6102887ab5427eac7b0b0bf98fb0c325b6e71017de96e2c8ee16775779fa3312a76de77e8004607692f38d68fe66a59e3704913594bde940500cd65e4191b6974fea64ee66d8a0eb219522065eb188b69c1f2e22f95b138c46800d5310991c01cd4dad8b24f9f6d425b636246da78c886a4a418a97728d319c2f72e3da488e9be114754fec677ce296bea595c66f1da32acaec90538a8e310d7784635e0d7dd05bfb4923d6c795cb632eca257e7db533d01ba1c9557ac049ceda6660e513dc6f9f60a3343caf01b4ad0deb016930e0d0962fdae0397555f62a68db345780ef9ac3eda566935b89d68b165ef872feeadc7c71c66acc01f3f4d450b97ae5b6ed3ad1029900d26e9928464e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e0216a1c97d12752e8476b2a70a529836272f449fb502a909dacf78d19694e39d2450fa25e94cb0948a67b5ad21c787e97c829fb56881da7456b88a867d114feb847fd647d88ba5f4d368a6fb0165af3159bf339d247c508cfae1ae9403fea2547be5bcb03546520b3c46354dff1cf337ec9bcb48f28d2dda55f6c50ee528976628a22c9c8cf5341991d66b468fbe2bea05b8dc9e357d045142816c1e3a4adb694c7fecc12e4001ae2e32e285b1d45faa26f1c6fd84cf62a7fd0b21f9772ec9ddfb0e06f5f2bc9e9532b2f4c1268c39a5a7e7e7be370360063de520b6ed451e1b3979d0e680efc96ef5773951ba95e951ae95d72c6a1926359be11d5dc102b0fe617c0b40937a516f28e230b9914cf1ffee740d5b7405d555e5f24abf487ccf67db78b8d66dbbd127bab59385d708d3ff56056c6cc409dd6fa7310e0ccb61c8efa76b2c79aefa023f1765689ab1158ae761b0ee32b49acb00c091c614553efb36872a97db3cb98881df10b40c8f8749f85f2aa8ad680131cad058e776766c1c04de23c60e8bd6754420e8d5b6769fa65bd9b287c7758b06ab697867343ca17ef23e8f4c38d4ed37e86748f7fa1f9a66957e419ac2fbdb924e76e2e892918cb2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095ae156db46dc575558585969ea6cdcba317437f8cfe6fb2df289dc34b679f3eaae9d2bd62f8c5dc89a366cd2a55bce3c7acd2a11a56ec59d56dba5c23c00a34244284a4502ed20f371f82db6b8181f7c9702c6bdaf16c4056648958a798fb5116d42a3bed7d034339fd521131b0456d47be1818cf6afdb11ae543016a661f2af93884ee622f484383d2ab78a71f272a34f3c7f9ee8efd1e466cd15fbc044df27ac018772742905536635736aa2fb5b8af8601666697ecdc0bb47a28bf1a28debebc8ef6016232fb598009f0763568470ef8d13c8ec1eb484d855114a03e38ac800fa803f68827a89c0e84c6f5030a2c3c6318fc64c492191ab722b2fd5de3015615e4639b78974fcdfde53e4dc35783a371097a6b9c9490050111c149a9806f4407931b584c3205aa63c3fc2bc761cc93e5b8fd30a442e2b398d66f777e02899b068f721c95bba8b7c1623615ee555bf26dec920b40c2142c5fa04482b5ef098db6f6c6e9577792900eef96000dadafff72ad776e958cdf29633d717deeb74e63b6cfda04078c77e05a3510d9f7d1b95364525f16c82b2109c5278ee326d3707dde2f0c76b4246081a55e9e3c3d92d7bd7e9edfec5cdffec6cefbd3bf8a09d500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c2fac0b6ab65c1c145d4b9e3cd69fbc31791bffeb9f4b319beabc295cab8f9342d6f2d23b4d0dabb6886a1587b3f817338ec9c730815e672ccee7ba3afc13fc7de32843987b993313a3a04ea421e2848db2d8f0890f7575ec6ffd0e79fe31b5f29f6c84de4ab26ace205f2f1746df932d03aa49ea0b584af1c651c5b1fc3e921b9c8802f65f04aae842ea81e0f3dc2f9e26271f7ba47b764b96abc919ae905b291fd88cb596e2ac1a37302a8ccf9064fcd2dd2163540b2a2d73884160f772c8906698db641831d56c7373ac28935abd1328e273a7a03125ce1e6952bb694242903205448b0a163a3a0c7206c98a5cf076a8780f351775dcec457b0af53059e44655fe35b6910dafb6bdeb921d7d5f163cae787cf4e4076376ffa289210d48f007fab834b540ec4a36ea51ce758fce9ce80b4ba8af202dc46d3d7e0ff1315dbff3d32cd45d016ba022be66c9f5b6799396eb7fc8c7aad6d698dc98b212391022c692e31f05c7cda0a027c39d3c1e1a6583015dbdacf272c6cc0cda5253f40443ade9495861dcf571170c43c4a38e280db113eb6dd411299e2ece8f4caf93f8d1540bf3e59b826bfc5f51f2485f9b2653e68fb9e55fec70d7fe29262c4fedfa9a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099ee83a56d1146e4b6c38c77d5b5036be77740cdf58d27c19e2c647e16a2f17cd101e3330338c87d3c2a7ae2405dc82ba9a66a2146c0faa482b4b8011ec24f60116d909e452f1a4e461236a16f97a524e85f9d1312a664796bdb5a95386880bf2611a65083e1e7f37de4428b77701d831430bdba481fe29e70310cac56730b8e0b4d468fb79f2db6b3e29438a4a26de93e35d52f75d76d9340563db81fba6e831f05eae0d12e898b8a44b9ee71a8f97362160a0c2c81782115e90b4cb90295971edbd75969d1539abed17eaa1f0fa77493116dd6bf64ee5940283578756ff39c612fb1c856e61781df29bba02b2bb6fe0cc1696b2a48399d3047c725c12bebeae95948f0ea797a8634986e6f02cdf61fb480d592a91892c8ac6b2d004249f3733f8ee92f206f1cab0463ffce942400802548767de21d99640efa1f986102a99d2471b7fb82eb0cf972f10433e0a953b9476036952a9fb56dd590b9c839d5c8843969052232f402c607fe1be159555643bdceff6bdc510a8d33b36d601095f77ec025070b1726fd05d6f8efeaebf85bf2591c4b0d473a22488a9f4ee41a0b2b0492e1e89fc2653cf677c3a925c18846f88c36aab08d9b10484ff9730fa58c3c2200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e9e14f0d61e593c6cba601f683508fc122e660ee3eef4f2c55b711624e708ca6c10d871b5b7c050d71e91e7c33c85e8e86cd3f02eb51ce151c0eecedd08d1b83ad700d6b6066a30a9618b4685133ae6d4c79b52c22ea035b9ea23e50bc88b66c5c6765134dd2d8ea05b2f01174b5c5cb4f6a04925f1bcd9f62430fe6dd6228d0601a477eb411ced50ecfc1a1545763996846f493ae286a075ced780fdd02d55fecc83898e1eafcb9de3d4620c506db2ebd28e235f935a9b429f2ce1c8a594e6779f35116ad5422709bfb62d095149b72283b74b6574c212f49abe8d8a860bf77b4a3a3fe804d8da48cfd4a8527d7ee286cf534e1571307632dcb0ae711ac4c03ba586670e22db093f6b17eed33392abdaf7331f88743b4cef80d13cacc356f604ec3788550715f8ac20216730c8187bf94ff7a3122bd5f54931d93c9524726278ffcda318f5a6e117729dba59a9c111b7c53b2233584cdc681013b036fe05a45d634838ecea497b649ad9d61a0acb3dc58ed45ae66b735103a6f467b78989d1f202c42901c7914e4f4e6ee12002303ed0d15314ff5d334396e480183952550a96bcd07bbbff800a5674a71809a782870c7f4235757664eb4f6e60e89c9f7c3d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090e48dacd1b730d9fa1586398e0f87c5d00f07a2a4eee9d18decbaa46dfdf0d80f042c096943246c9b15942054d5caca644b84289eb2e9170169cc95b8d51f10ad7b16943168a91f971feca89a30a650ca0a00751283b5c47932c297a3a2c6f33ed1ef975baf9c85e2be0e1ee246cbe5fcbdabad4c893d2f607c134ecdc4383f0e2f50373ce1a5a075d1bb94e7e05a8a78d5a90d526be7f9ca59f743c0322742b95fb8fca9ba25a873742aaadc1d21cd2df5390ce294130e710d7392b06d11e482daeec30a7c3aed5a43066378b89f6faaf1b1f66814a0e847dbfe7e631f9900b38a6a20b75f6eb9888e7c7966ed8ed0a6263fa694a5f127aa27266519b7605ec8a12971fc1a0971663919134f4a66950485ac4ca78aea1ec76a9486431ea85a9d50384c1218731ecded7e31a5103b0738ddcab5715b7b560ea88c330e9baf9606f4a76794dc4297ada4e3d87025b782effde2568e168278b1f00e983d06b2a306bfeca7303037712cc9c20539b6a3f9f3cbefee26cf8b1dddc1fa743647ad3caa2a2d53c2e0d98bf36e3633b648e7ad9b1baf896b04c5a4320193c45866053376d11aaf858d41d0ee320433ce7c75368a8d2975cffbc6dbd72305fae526be1100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f6c31312c3a39919d4685f7c69789c482499e28200047a4aebce5b8dc941a979e3bc22527a8a852f0c0b61e5301088e48820f7e100b78975a4c93344f378d9d5b981495f65dfbe95f6e63c83fdb9d00e2f4c6f477fb725a9a8d30118883a10d1819a10c1307d7a9422f93413242608a9bc23a3487e332cd326c098313558014b423cfc47f726a43a0044197d909f3fc6acbfa5fa4c960385906dd1ba7d61c6ebe703adc422b7533d5a533f4b63a9ad5a44c87df97afaa23cfe112f20fccd5ca69facd47810670789042f3c7e0181578d16580ef882d3cb0a5ad8cc1a0f56ad80cb8c7608e0fd6b4a4dd26118d2dcb1046a3c27be6d9d5df2946de11386ec42e579e945276a8fed469994896b5e67ea6c588aeeb7a18a553bdfce7d87299ff0181341a62fb292c65ab1769c259d78c76cbe6142ce1245b7cc97a61e245a948ddc2e46b33f0e22fc1f46f720fb97dbde38870b1ab718dc9a514f9dd5bbf44f27d3b09a286252efed96dd843398e111e60c0e424e3e5b152c10b0a59369497f8936b0e22a7d9b899f4056b20145cfe5d602db853d69ea35c7e87494856f01ce1475952c19ee7a7c2c79aa6e3e9c4ee5644191f834fdd834787803645f84af87242000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b6661774e3d1dec34d0577abbee3822117776cdcf8940ba309c089c2f5372a3b382b830a9169a6b54c9a8d6c833470fed99c533567f8944beeae4346bccd0534c75e4b45cb6a4c9a22a9a978800c9affd021b9d79fb3bfa50eb1d22cf34cef2745578fbb0b4a188f84f68e0d5f2404044bbfe13cbfff259e0b15c5399254dcd7e208677820c0cff6669f9972687d344505fe06d7a1f725bd544bf1f0ba9291b4746d556d89c54684abc013968a3cb0c43aabffb12348a2bacb1053630f41cb387f660e0443dccb10299536021b0bfc04598d3a03e79b2f971294ac79b3c36534bdf0cbae4fa0fb3aa7cf89b29f85f7db880690326ed7b646994037997ca500ef7b26486d7e28aee01fe71ad066ef48a10a930e4c3357f7be28ea1239c964f42295c8f4891817840268923894069becb78707f96b8a56e150b7c35371803897a3327e41daa3f272ab1bfd0f1a81f2361f56b97c7fecfedd910b27bf90212f4316db7f1cb82b52bbdf8d5e251d121fc989f54638c0f0bb6d5691e9ab02783918bbff5dcc2c6b647a4b6977ddd0cab963741f533517e91c0c177860e02661d73ce084660b0afc1c60426fc0ae6f426d69397b5995a73a60909f4e1a75d111188b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a415455ee68f6b2304ac8f11c37f42f9bdd660d791423de55dff46b09cdf46d5ff30b16755904447bc5143dc5b9d2a5aa691f1d7bc24a2bf021b1f9f4932cde10be1afd19e68d54be6420063a58b030b5e9a426456820bf86af2e2a963f3893bcdfb9a30ebc8ec445284faa39c456fd96f2edf99f88578588fe6ceb8b64027e8b5548465ea1d7a1212a51b75cc5c63eabec1b6ae9a2cadadedef60801164194fd4c725f9a247701d60bb11b0466b26966662698a0a0d5e649ff7fc8e932e7af9b9f3dce7b48ed0c396ae4461c80e474f1db7d3707bf838f5022dac4c6e13d454662fba2305a18c2b7820463346203d9a3d39a7033f170f5aff24b9b620ecd350506348b64723353935edacc8b820624244380cf2d92c7abcbd4b60c356b6274af1bea054bac84b013793483f2962125e933d1d8188919a3ff07b49e1a2a0e2050c7c6e8f906a3b4c0516a96e92a4738925fda12479f3b53d47ba14b9b08d745995a3a503b909e5a52a04205fe2011cb0c7e48293a78b928de908bf3d8da8b69c9be04e933dd293b9bc57ef40bafdfe44b866f6566fdbcbea761044f6cbe9d4ba27c130ae642acfdc990d6cc60b6a07ce64692617a5208d45f99fdde0f2ffa0f100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ee5e6672b755beb5d17150c68db00f48a806810018dcb77c5d3315ba342b5d3bddfef012fd21bf72741aed4b2f97df2eca19645cc43fabd8e7367a11f1f0ae3004f747635d08e1ef76d4e76696bfd034767f5f19a78b45e78249e511638cc3037e9eb1e97a99a5a439b00d6fc5acd90bba84b927cdaf248f6381f99e8c2b93d1436deee7208730c4d97c5d0b0b13c120c4d65dc2f6bf4007578863dec1f44a46a37a7867712ffe2f8eff19db32919e23d03768143e6942b12d7555057c7930a0aab3df7fff3631e6d9c5cc83a52c41384d58c909a838e489d05e7fc67638f7ea5a15ee5b9595e28fd422a45b62012c86e293020f6f652f7959310e19125d02a14dfe4c305013ab44d63fa4d7922e3f616b820c4f8d5833d8cc0487108ea7b3aedcea325e94707d832da4c59f4b73f1cc6ff32e70f99410046c53faa01a008a3a56e0046a744fc52eebff3b278326559190552644630e3ecaf4c72547cf6372680b58eb413f17b718a8c3671c6e24b121266c56ee0e7771ac661a70c2810b4f06e50382363758bd210dd4a59c7df6a7e8dda5a35176c7457919cb0bd05dbefda44f2ee50c2b294cc498b90512d78e6451e2f170e0957bc14b55daa6c79e7523400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e20cfed9686d3a0fb00a986303992f73b6f1da97e3ba999b53e2ab45779a12d4cdb35fc9389111bb6c6934db9362155eb0fc31165daa4dc06bd8967127dd6b9b1abf4ff66b5f93a95bb7bb0103ac9600dcbdb2a90a822f696f2c8ecfdc76a9395d19686a4ebd62a4a592e59f8bc0f820ae91384500ede5b40f5961b3c4c93abda749288208feeb06b7016b32e94c4c72f96cd4c3091262b17ca0ca31bcc22e80db2cd8661b3bb0b542e38d25ab66b99874d2d456cc20f6c5d50e34fd93a60d0592e72d0f206283838e390a3a1fbfd73d2c8c3c42aa6b314bb35a801888e7f40f17b37966125ec6e8e7fee90a42a4e8fca4bb379c987970219fc5a1f0bc1887b8b320c3d60644a1624bf762fc82a005314436bd6977f1aa6d78964bc9e694e4cb19a9a0aa9b375a89ef41970103897accc6d4aeebe1d548d76e59a499fc1a94b9130216a469accd7bd852d30b110258caf6667b247f02c9714da56821df64cfe6215ce05ba1caa127fdea8d8e625bd0176b9fe4cb55e05de22b16a1182c6bdbbd7525857cb9122ee78292a35a6eedff3cac0f14058202b1e17f750d9d76c6d83d2c56a7423bcd07867673f883b3a3c92ce8ec391a4406249eda7648c9c636a950000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000262948904bbdb44644973b77f5b8561937db4af61c0a136466c4ffba988de1bf6b624f52092e832d189d5e3f48029ee8fcfa2abe64a4aaf18059fdd49cecd06c276b31745b31b7ae3cafa70fb0ded6fc44772b5b6e0e80b9939f9dffc11afefd7e397855c77c18e303927870b498c07fe47ed280b59efcbfb25f1b976eb8f51fe35945e134ab2bdb4b6428487159936e6d001ac0bea1d707f7eb6e7e95fe820420ca0c68647d522dab05e216ee8224c4eb881ba154884c2138598056cf5538b798dc6523968dc62fc3b7076b3b60efeb655053b1bb26f170a9fcb90e499854f5ca967d1b2e7d615204a787bc4db882be6dfb8764c7adfba3ab0b499846f9de9c0cd20ad49d405c68697f9bdf48724673566b97da468cf987fabcf3450bb9fc0f6ce5836dcf4cd1176f29c5aabb8e38eeb51f7ab9e06d621dd635fd02d363265843886859d32dfcccafa9241a29f4ec2fa0bff885a599b2051810a0ad0ddaeee6f3215b6a9d47be46e5986785f01fba817f64fff2dd77c013bd2f5233a8e4670d1ee6aac9b2eabc4ebc460ab3d0073a0e609b3d68886a5460a6fdfec4d01b395e676a224d6367657131e69068667dc50f7c70ed07e606acea5cb90612ac60c427000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016cd0dc9b527fd6875355730e9a8ba03418369c05d52e38053f775553a26b298cdf634c417169566799bd0f728a2befe502560b5db418cc2330715c9ff0dadb91e22c36b9ba3613bd341479d188cbbc86b9ee084bcb5f4a623392e9c0a52672269f1a1d2b339cb35589896d1318aa9f29df1536015f0f2161d232c99417aae4a2fe040377a40e02f2d9e450f363eb11fab851018a33ce6bb0f800d088d444c5d39b89a7272b8004a58d9b58b0e9b959c063688c51c4821af290136637335598574c3228a1ec31c1665d93b6b5f5757c44488d124c060f8a093fc75e8e30e89207fccfdf4c7b90ecf39bc1aeea433b5f24503e92b061f585e71b64ed17935a6b4ccf69c1d40837b4ee6b79b520d1c29c6fb0c1b871fc6c028704b21a50807da25a769a3bb20958ec83ce9bae6bfacf1e93bb5eb9d77f6efb2847387f3d4ed5d9d565fe9ea2a10676fd90d34b99b4522803878960442a482799522570b85433dc3625f68c35f6735112707ac75a29fe6225d38dbc51db3c88e38f2a8a39d60a3682026225e8b61d1aa32392855c82690a7f13d41ae7a756f58d073af3da3727239e795b81cae5693e91c2d72a5c85a9d1a370a4cd4ab7489c38860418c1c27cc5f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004c718a1a4fa113291ae1f60c9da5d64ef4c76c11e285e93add100137cbc496beeb65323c0410fa9c6305b45e7a3ef96560baf1dc3291c736029df21316ac561a8c8d43867212165963a22a67f8fced1c2713b35d5d72394aab15b34c5987413ae607c9baff8d7fcc3a86a81f9aeab9401b0fe0b2644d53cab9d251b09e7776ed2b5da2297e1d8d34eefce78b2c40161d2283d7ec17cef0cef83dcdec1fc1db51d845ce24230a250150efd1122006d183f7702ae5dcef1bfa879498e4545a841448e7c04a5d23938a07fead43af29f860ce0477191a46fcb3176b09147db9408f826e92729b8501a3fa82de145df702d071ffb04a9d68826f5ad5f403ff25317f587b7b2969bfc9441971ade9dbb200a2e40aaaa443fddf82a9dd94ea71fa9c22e9522950b4299ee143186a95a6d0d99a6c04a93d205553b89f8f1f216bb88d5a3ce6df69de93d8450df9fb332bda94c759c8f0b08970f0e191f385e9161b3fbaef405ae411d58cd056a812cb3463aeb3e75393d3ffdb674fa95ba42861555831e2fe0dca80ed52683e68d9917b039b28faa71502b8bf2cf0fb541a5450b4bf8de52ef8f7e70f283e217aeed3d85fa3c7e09ae12c898d769ad8a5b46fd546db200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008aa422991f2d3382bf6ea8289115ceff584e0f4c45fe187c344d27ce9174366da4d5ebf74a1d9095d5d52b8c47d2d9e7baa9264e92d16173f3eb290d7f394dccd21207f347bf37fc9134cc3849260b1804892eb67feede746f802696170c498c73374d781876c9326d03f80b2209cf22b5628c9600fb83effafd0a6926b4a3a0ed590081c91959b256519b7ff2db51178b18d18ee2993664a26893194f6defe57a4d39859c1ccc2bb737bfa985983c806c9c59a644bd0ced099ebac7105ba81e0f8da96525b5f9dcee4a21f299b62af28a8c9eaf88e0515aa53a46383f79ae0e1d753b7e06d82e5928b24b14cf83179780afe9556631bafad57f6c016a0be66f7d1072a719fa1cfdab7907e878935ff1da431225edad2fee4013c5e4fda8ed0496a76cfea8a0b770302ccdfa47e27417943a24c36647038b034f2082d7f3629cea9d66c989d7e3eb67918b5bacbd341ca18e184a972843edad327aa3a56bcbaa9ca9cd2df1886044d7c556be81a5ce13ef90995ea56d4d01c5c82e49c20a03c96d8bfbf925f33f2350db10c70a8c3479f6d67bd5638b1286e35a3f0fe2a0b76a5f9e2780b0a3f55b8e883caa8f8fcb660bd840e4ffb3d3db34413e58d2ac001200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ed4e0e9b8e8dc24f5ddbfebb21e031fc235e6fed0996762f2b2dd9346fe757d49dbdbbf255a3f463f9d184140a2de96965490933d78449061c6fbfb027237474b95a2d4dfe091724b3d468e495131b21e8e126fd01af68da5d85624fa77707f7609547e180b5b1df9124729604e23919fe11a893de6d213ee8db1038497c1e50c82b79f819ea7c628ae75abbea11f6e4128f47218a74426edb2fd571e12c755564e24abb15b67c3fe7a676440c13a1a3add317250931e56b4d75ec37322817d603460142c22412627af9b8fc2551712a2c09550ac7be2acd029cfde1c53b7a7e22016bb63362cfb605b934f23a913ce1c62b1450b14eb3530c19fe0e25f49931fec93272d498a6e475c05046147afde125506fb00bdfbf4e5e91851db2d1a7a69f41b158c2c244585cfd26a83740d407e5f179e0d4a7b9296704add2bb1b0ada3e682a7e4d4b731d02707b1514cf3021810686decdc4ab87731d82478ad28c6bce94172e248bb1ff0812aa5f9d2e36f21d36f459964707b00eac09fb33a4830c04f04dc4555673cb7e764de1b90711959095ae1382d4452219fa7ccd2aa4a74f3c2777593ef76c4bb0408ac4a9ab271965021af668222305970490c82f6593600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ed38155aebae8a81ef80615039ae10b298787e76f2cc206d0d6e3b020238d0b082d7fe3579be9ec9bff7694e3b40745f8d6bc85b100175a45e90f920aadd5c978152b39335f3a728ffd8015dc10c39171610435d72131ed53f398ce72b5d25fd94a476b8d989a501f8b4b7bcfae77f8c05544f4f7b37bc6e22407bae8997dda19f96b196e6e935db6d6b399f8d2d5d4725d499eec2fe520cab04d429c819fb6f39ff7a7e882affe3300210bfba5993362b593642e42bff9b260ec88eede777dc49ef9032b706402c6d2f6ca5384a0fb5d82087053dcee1de2a1b0e7b68873b4fc9bbbd94a61212414040807e6689fb3c6d759a088954d30d6533bfbf7dbf19a705f5184535a5b84ff75302aa6c9fcb627b1e45f496c38c6e6cad8cbefd28eb06dd5910523d7948d672629926989a2e8c8965cb45d8ee4f27be09c35ea19ab70a1357c9bb74b922786021950d5582389cad7e45be4df5f8d8cb35f2213d9ff83d152fb6a03caf9d916523f2deade270016f9c442b367a8188f4fd44b3596a044df91dee949568b6d9839a82ce8633d578cd225407c8fca0edadbae095a1115c7d053541e2bd1d00a2f337e44c5875fabd257e10aded5962f4719231912ebf0560000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000abc5dca40e61544ded1e6ef2d04b3e591a9b57f8d3489bbdad3e647b17bce61e48da39b1ab3ba13a412b63b010fb6baf2f8f2029caa44634e9def6a9ccdd68a729a1d0f399f5634cc07a53ab0900123a2b41d865ed3c0da9a9815106106b62c909c7599400266055fca0f968c71e2c31b80a1880c65f725f48e98caa4243fdd00dfd5c4ed3cecde6614cbda54cf36631a17972e894457c0f3cc43b4dd7d0aa48c2fdfe70de2674230a511af29d510b60902e9245c53638c50f3381c16a3246cd16bbc884da133d72a5bccf16699ddf4dee594381a1cc794b459a74e423add860744e5b34186820ff2e7bfab58a2a60bb19c671eb20c06d894f99994a82221127c6ae56359999f37120c497b218a2c80dbb2ca1546ad1e08662f0d3b6db8934a9e50275aea7a3eddf6298fc9876c491e59fabcc9a958eb8ad56d60beeee10755138535af7dbc0ccef892171de596c177d7034646d9b33101d8cfbcf588574f00f9e8d6ccd413e3176e52140a5e27de312f1796a38bc3a1e4426b0d6a950eb3c6c1310552497526bb04c77ede84662b3d5c3b59863e30c35f129584194628e112b2be4b2346b8c56bc883f5f73e0e1b56874170d96072acdc24daf90130ed878470000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000acb26dae344110beb80fc6407cbaa34d59d2c0db080c6e1f8fae99db19a7cfc67da72eda88ed6bc461148f33ae559ccd62cbe3281244b5d235202471e3725d2fe2b0b28aaa530455d742bba4a0f109c4a94c087d39a0aa38fc7f96126da2463959a005a3a8166342aafbacaad5f5491c2dd038dc038c2b218c5777fffb55b12881dad225af512156014f06f3f6b3976df6e03181fe3e0cc77aad2fd3d604a3201b6081421c0763ac407bd1e79454c66151bbc58c61e317cc9006d030e7190da0c0be340ac95eb6bee150047dd6815ceb0e83c980595fe031b67f7776824ea1ea911ba518128fc46d4b882b5549eb6a5650c7c1263104baae914b9f306f6fcdca6fadd85df5dbcc8da28d8fae0d712bd138b2a7eee7205088dac2798f9acdacc5f051df356f2e9d287dcaeb5ecd5b7f6384c287b9efec0baae528472dbdcfc97f3d725c339e22299de325b6ab8ab0bd7485a4f6cead1e3e98b23748c273c9f4173acfc862eac7e0919017534cdc82a71738a9ee945fc8d2a86ab98ca7aa39d60f8f782b3d9117d76327e464590c209a32b54e3293c21bf6ddd923d210a0d6060e683647a92b83a6e76b034fdc4c7c2bd4f51886c9ac80cde622de7817a9db9b42000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005ebc1b5e3f749a1b983f331d61b1894fffa991871cd4103a779463368316ac063d5a20d4f590ba0b5f4179bb7b5f74a0fc3ca1ccb1d7d9fd24710b24e2db61c29dd610f06b7caf8be2416d40ab58fe9863ca5f6e84eb91cc4dcc78205d93ef3da8438722a40920717e2da33ae8963f7a2872f00f6f05879bc26b8a6c4828f832133175246ea38e91067e3ef3e5e6eb06932007ba7db0bacd66b8c3cb61704500336933f14fc27a04b13b6da83192b0849cee0a11accdac36c1439d606051917f1a1b909ad9eec652a6b2d5ca482307111477a1a2522ab65e3a9cdbddac4c9d01e85ca862a4ca6e6dbe9e47797c9edebaf403af7f7af57c2bfc23ad71460d55e3feada67130f1da65853e2e4fb6702a1afc9db5b68c4b4bb257d96ebb987ef2fa4dc411731184d69969da340215a5c46cff4430135d8e3f01fbd090d62a99020c32755a23fc18af5e7bf1816340a857b21944d524ea177e1620a6bd54ee33674ef3788fdc2072e484417856e21369dc1aea6ff59cf3c3158c2df1007f7bea443e13eaaf36e98fd45b5718fe88c160ea504ef90f11b0e49028901c4b7f793d8690ccd883df2edca4a97c372934ed4a35d0a205f9e69693f314c98646ab372322c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac8c35f8f669df01e6236a7d42f1205d2b5478dacafc12a81d9150146394db632c2fc23299db3b7638014e016dcaff3af9f373c5ab90d2411b423c33a7f2cf1d69b504a6b7a3a9bb32d0ba735db7bfc9c11de56fb21d73719afd70e98bd5a8d28a7ede4e86c8a41681c20ff720269175766f3516c4f44a4261417bcb524b47128f240e2cf8d2141084f12fa41af80a72712d1f539c35ba5533fb4b95b593927b8cacd3c38a1344a58dcede48552cc072a65afe790ffbc7aa8d98e2e10a9ed1e1f43edf22fd70ef2e25d0ed836ba8126bc7e13c0f7335a68513ea9dbd69c035286f25b5615f997da79720830f9405fb48abfdbb26321538c39c9d43087d7a87202998b0e7e2c9358e5d05de83e051675fbf3ebb3bced921ba6eaee219d1c985fbe7fe5b317e28b7802745655f87a4620f0573af6182e43c944cf3b266171c332058fb1dba9df551e1cc4b03fdf7067d39918c3bae7a7765fdd779716ad0df67a5676a23527ec0c498a19d2d7d8bfc9f43006ee32f4c9714bd553b4f0c5c028042caa94c4eb3e53d270be92ff52fc10b63a112a3aa58f77c060263323fe2ad7569b4412c30b25c1e095fb1cb9793ddaec48535539947c104d7676331c9adedde93000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094568d83f536df4e929e7b2e8c9f431350e4654f12476384bda0fa3abe9a649d72928ef99081df5fedc3f82eb017adc4d6ae4d7bd220b1f35730792c3d543790f6ddf990e357aba70dd85dd71fe4c00086f29cab217672fc0d66665b8461d4148be947c81ee05699fcbec38699f7ef246f63cd47739582f1edd59db5f33bd89e7eddd4d5ee336ea8ea0ad776d12b03e93485d24b51e68d8a9ad20622d556ca44c81236a872961a72fa7bed8eb1e67fdd77d0ce90eb70fec57a1a591c074196fbdc264de7ae4b418d4afcfd3e6400f79b320c7336a9614740cbe1cdf91f80047d7041cfd97d207919e3a4834e60a1b96b61c7fbe4575dcfec20bffbb0f0d6e7a0bd978aa181d30996fb0f4f3fb0eac351a2c49f930f815b9f66fb9e04f53cec8cf8f151a59b33a1ddfa5d472c87bffe0fab409e0f30d09cca2ac69c3b4f0c4703028edec71118ba2fc9f8a7e09d1f81200c5b47f02df7df9ad628d9ec303eee383bb5b68964e7b77d39d6fb2cd01c42b08da77c68bfde36466a4f786c3c4d9e2aacb63031f690a7039c4a0faf6561233a30f443ba97d32e2284816387232ce51c57ca31b21e3efae7740c5bd56dc5f9f6609be89d4727481b571bed59f2f658070000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000225fa293e4a4eac67a999b63c7153ba91c4bab7ead0341c6a05987ac183e2a7fc78274190effaafff0f84e34785c8945e915e1abe2fc042d2292426ef468e8bce36e265c802ad8140e0100666f3edf3a1cc97e8f636ebe6f0b0e49980a332e335b6ebaa67d6b711596fa00cd12369d583cbd4b59b6f664faddcd95486b4cc2bb32678af1112368478a8f4ddc400c7ce0cfe1e52c37048fc54bd08536d240576da2c4830d96223f0186fbe8af756035ac0f141cb8e60ea21e7ea86329d7756bd322c113651428859e00c45b14abba0027d02c5de48be0d6f5320074b029a90abd6ca5de9907aedea193e510edba7a3e355d685366fa53edc6089ea71f019b332019992ca0cb376584734cd81dc2171482da5f254a0c085683cd147a46a90c3604bc26601e46c8d3127e42d2e43f87ba8cc601f5e5f12ec45b0820c12177f8792bdf735ea628b88a189b02ee78b654c3ddf1b1ef85452feafc025f996f22daf96e7881e5ddebed20740f80e22ad116eb81ba915225d7643ea1b296e4f0b68b4899c4b1215e876c4a788e9e0679c24eaba9400c58862d70047e5f4fa449edaef5b3bba96a93641aa8b6cb8ef1ea77aceb7282fd3293691fc47a74e6811681af4e950000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae56d9c48eb96c852323fb8c087075906083f41581618a88a01793b228e94fab230f2ed43697796e4deda23681006689075a0c4f0dc40ff26e3226b2f4ce46746f285fd15dd3f8baff928e22c9adc66c7d5b3b1ed9596f7ad3866b2d12666c5e9013bc945fabff474460c088ffbbb34703dae37f134ab0116b76512fdcaf0a7739ccccf9d1e4861adb89e8de49c36a9a31dc52024b595688f00de8da2a51c547dea0b79e7ea592f201ea43fb8094136c31e5267c2fc9827fbae8b6a27ef5cfcde2d20b8505d757f604283ac8d32c69121f4d5c3adb8448e2e912bc7f4d743201580f2e69bd7c95e30a8052b04edc3ad7fefcb258019c3edb3039c79668b637509984501389d66e04e713b84c773ef307494b03903e8de7a86d009992e32fe463ff73c8d90f76655562a1cbedc978b10ef4904d3be724abba9741a6882c87313fe158e31af3b64a66974733f176cd9b1fd2fc173c98f97d56c07eee6d7908aa68034128b948da05fd26c3c41c3879aa57d43e21a55835f2000713f8a4efbcda8e26b944e63a6d49d573a52e23ecb7d77595af40aa746c9b14edfbfde0e2767b1fcbe21038814e093f3fd6d5448f64a57d69733155565f94af86e9daa59a1c552f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e7a34a25e179cac8ac70c33f2fc8d455c04124b6dcc93606db1529d9cace248178066a118d2a7b41b48203c1be150e5ce1c8a4965eaee7e5617511af071ce2ffd9d613e6476acdd4219c2014c02fa8d107e9f320295868fd45e44011b87c0f5467ec32253108ef4cecef4d72971a1f9cec49ef243838e174c8d94ff9869a37aebd1a86e944bd52955e0e39ae6582fd8a5960631488e812c56c7a8382b6fe188a4f41e8c958a67a35a75e8169f9c2c5de4c0e859053961fc30aaf7968938036f933eb85a506901818eeaeefc251dfce87851a5c62b868507f2b3852ef7f00dbf9fd4ea92de38e07dc4ba3935b911851dc71aaed1ecdc122659bcae156707287e353ff82b32296938eca891baea35caea41bb8b925f094e0fb90b40c4a37bf822e579602e987a5bca205617b427c65e227bfa4b6d0d0066542ceefc4c2ad0ba0a9b845206105c526b67d72877772b7cee5512a97f05aacea25d6065fa5445b8cc2c3114083479deaf02cd04342d5c202a78d4e0a5a1ff83b4760265fc4bf9273170d653c196f41dea6b354b053b2fd69c73a4c77c99f1ecec035840605fc35b11e1d67c8017e6a96ca95540759dd29fe2be89b9a201bf0199b947498028b16222000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098ef3a836d9c2dab330c159e647bff4972597f75498264ec2b977369450338fbf18a591ddd864db89529040ce4f86eb68cdfde7add798762cd14b33fe833ff61d7531d86ccc44604bbbdb918b55c177b735ec6b74a288334ba1006768310e61e2650ef369c586c47cc3b1ed8158f0387720e9ccd2b9b4a5f1e73215777310ca3bcc920405afb8e2c7ad72b3188c53d1ffdf6bc602fa65c0d66fda2a1a9e8d550459442d0ede0011ed4acc71064e39ff79267090915b48497c6544fe48613ddbb0155ad61f0d9561a06af21454b1ec7c88f93cf666b21a1e4f37859b012d503e6c0540f99034b3ca007a325f41a24357ecaf4f8608ad37eb9df6c40a4d7a0f0ee1373a42edfab18aa0ef3312fa7f909e4ffba55573486fcd38698be0df1ec2723895d9a4c58807e10dfe0c93c73f575dbec4d76d807a6f18d4e7ed5169e9de6f12507a467d2292de8625cb8bf4c01a1a0704e11b98fde1e841d2008a961ca62b23ff36cab992bde0ac7c0f4a1d01db2227d220b78e74c78f9d1984b37197d6f1253ab63c8b51a8abbc6d527fbead7219487e7a6c659cfd70390f57dac34df555083bfab63760afdd47c37409122d7d94037ed6e77e5a8e08a0944771249bbb07000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ec7a1af941d03e2bd6051430b174638caaf75c4650ee3a52c643bf317e42f6a1c11748539db03a410875972dbd2960f052be54cbc6589701c9e874497b7aa7a69adbfcd4793d9989859800fe780592dd0e6409fb347e636fd76675e2e9900b9e09582e3e4c7a64fd71fc5108d6a5f38ecf52ece86ca3a8ccb8af90daa092010dec093e5142a8ed20255054ca8dc361bc7eb682fb47576ba4fcb577816dccbf3c53920798a0ecb8aa41b570e1b55262084cb4ca64aa0567b98bd02737b177fc7195b6af368fec1b8aee702bf95b846997afad76859b5a8e0628e8c7936324226d1057c6d23a95742f4dc58a5b1c7842763a661c55e67d31769b4831f27ad5f6fad0ca854f6fadad5ade949ac47ff6cc1c52564e2e97531d40c50df579f23f3af6fe8fdb8819bc6b40ba2805efe8bdc9552499600c9e7482bc99137fbec39d1af0c9eece007f7d13e05f8e0e5140bfd4bb560e0053181d60eba2e65f300c4c423101d81c06343216abe800d659dbc4900779452a8bae0956b42bc4586bff90962e530608e633e43feb44dd518f9bcfbe3276fee68d2fa444c1466e86e8f955b1c8769ea302c843d77646cfe30932bc7b5d5c79407c6fd8fa297e9e984260faa55000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007cd8b6a4b23cfb3f3eb8bc106069d8ae3860222c65d7f0730fe5d3d1882bc0f27836658c760f8a75d8982aa083a8edce53c0d32a2e1f460af731faed4dbcf4953946cad8322d79d369ca9f837a7f831b81cbe8b7ac09549ec03a8154acef299f71434133cbe7469f40d6807e565dfd676fc34f9ed688d05d6eb5e052b6104eefccd2bcb4107e194e084ed7413b8b12abddd4eaae0da491bedb4de077cf8a8ec597f04784d47d1763efa3c11f191b874788e878c7dd84669fc745ec468de6c6216271b71d1269677277c9fc5ce96cd1d00e090f1c176244fceddb002eee11a6d67e9c25303580ba2e4862a443757a509ad63f287b34e3a86079ae778816b70daec69aa5200db5b8164977ec50275c5cbbccfdd5cf990c68e19659d27f2520bd4eff4fc3c5337ed7611a7b3a1d74e7528662a056f2179a73e4f1167a3adc28678f4cdc2277f12fe28822b616f6be0cfb69b393e0866e72d98845ed4d0e9ee1dc056fc8f5cae7331e40dd745f47d7b667fc189a42bbd939ca4fc0844f1888189777c7daa91cb2044810be3fa8391c859df0aa13d30f869e5b8a136a6050670541fb79dcd60a422c5cf2bcc04cde26c92f69ee0a581703f665fa3429a9d2379a86b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009222873b688f118d65f2844ca61a46c4b6d5ec933e8730550b40280eb2216a94789eeb6db1d045646c0b3f3691d1e8282383015d7495b2f8ee84b0fe6e4d58005aedb80f82c8f9bc42f3163a8b1c8efd4d86545f2124385e6712d7b06e5c084233fb9d4d0e4292ef2bab5758f1a3d9e215013ba83c6f135d0a1d307fd01b81c91a3c0bfbf7709f24754d1aecd9021049ea93559337733efcda03a79d5a25ec7b8c9c6e4bffc8ab69a0130023222b93cb87c6977f7d6d6e3efba7ee5ec1a72881851842875827b6e7b54a0e58726b0acbc4ceb2ab24ff8b8f1484fa566fd1cc45e3090309309ff2529a69bcb9b8b96d5b9b5689f81c02e5eed663987917431d12cd0c164292c533eb41de697949a7fe31222dba60c0b9f1c86dfa622148959ece90a23754ed4632cb00f6ce2072feef4aacf64ecdc0f3d5ea99442dd524d9fc555ed2da907abaa1d655b85d7e15048bfc989c95ee50c195aef7a34bc26ff8fd0b0e0e20e8a74c687c05ab0d2e9ba753644a9070087296a47d24f38b07f234e35e53b5868f82fdb7ee0e785d8be57c8dae2493c4b5d29cbee5a1b2b091565243440744700a23aa3a9cd3c1f735f940cdea496cf78689b9af2c7ab3d2b28cb55fb900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a77970bc7f4ec0c2f644c05851ff7e84701dd15acdb57b8b995841b4e187b2ee02696fe37d216a292a9e75c61ea262b4ae531d02f49c8c447ffeeabf5cf8e73fef01302ad7070de9ec193171f5bb3c103b8f5a3068ebc7fe835f4b876d5b7dcc4416988dc7a2a6a9e91d031617fc68edece3cbe7d0fae9b5fbe6dd89e2c7061e9ecea9e6370acdc17998fd93f4140ad81b773e5bfcca151798c124b523472ace13c1e96075f2db7f6411ac527d8d0b17cc8c68a6f47a4daa0de955352c860570a195f65cd88c9d7b119a0ccf322f4aa26fe05bc48642c79af2bfa428018586ebd4c4fa273f3eddb0f4b7a10f553fb5b027b8e1a344a8029d464928a1e0e6bcc476ab9f38a77a68f87f2eacad2f0cc884ae39e69939d02fb5f9bf4b3edfe20b587326b95d357963bf9b405d17bfccd6fbe8751229960e70f1e5638b06af57b77c2e0475620d89d545b83e5f89992bf092369893b6f6db9d943a2b2055ba7b53063986534d2de332948e262677d9465219a1cde09617b681efd48c6bef17c75699d7949375fdb8d86b9b6ddfa50db0dd61caebd6afa2be9c89badcecd9de3ce98a55ae090b5c330e55ed9b7dde29fafcc05f7fef650d4f1ceef832d391a45405300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002122bb95524db22b03d328ed7df37d74234372ea20b335f9bc36640ad517cb71e563107a2a4acd41c8c5fc72747a3a66ae9d1e17809e02e975431da1aaf18a36b1fa0da93f17bbebb072dd81e68b63dd0b753c0dec14a2856725a82a838eb6be85d1afecce7e3add7540e489485492e7a4415f85135a752f111a95ca7cd41281eb5d2989e2100cd59b996bad8b723f569355389740ce2a3b426d69466cf6e0462fbb46df9ea95bf600abe6dcd849be3eec334a9b4392e5e5362d4e27acf7d19539080666b5e6200035579e0b8e5d0b8be8ed0bf151b9ce037d51ae78c26ea2e510fb38419a2877c7a0df2db6f22f745b53a5698aad166d3cd2b9e8a14874f3351f966897ff66e52a3925573b0a6024cbcd93343eaf9de2f063f42499159b7ea6eab2e955abb7a9b8766cdfb7a2206c5067a2446fcc4ec6d06403561efa5feb2e41c53e20914f7fdb3e1d0a252cc94eecb7fd0be64babc9fdc2341cc117d254b0ba9239693188fa7559466cc99b04b4b57169167e629144136ab01f018085e5c69b4db2a3493229f166681c0f1a8b465f5d77b00e208dc822d405d0039673ce6d89cfd19550f3cd223b05227ae82eeacaa0416834f75192288e33d7bbccf5a0c400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b4f752e3bfc7ee05e9b5f6562096435cb826565050dab234fafcc5f7d57eff1fc83acf1e8f598ccfd4ce1f06e56d8605c8f168bd235bacfa34cf5f2761cfe4244c8df8c93b710632019384d0873dd74815725bd7047e0a0c20ecd0a7f2f723c0aff214837ae45be31b25262d2c3464bf81231feb308cdf070225e52209dd2cdd327fa0eeaf5cdcc9f9e179a8a70ee333cc26e1cf4def0943e33f5316a71b28a79429f057a197998d06f555bcd3459af9120bc0c2819376fbc594edee91613e7b217593fc6896b6bf439e8106e7e8b76601dc46fa79a1eb549834fbe53ef717cd7c6f6398791a763c95feed64258170c876fd36c98ebae6138da4b50cded654509c230100e4e4c60740c6f5b29acaf9c8288ec74a72ab6f92c766721fbb38b764eac8ccad548a70821a3cd204bf54405b4c4cdd7ec7616de31ff739394d231db81a4b36c9c871490e6c9863106a6bbaf83625c807fb8f85ca37700d533c49868594c23e52d496c948e231a22e65f7381f8e45bf25694db386e91d517d16170b6b73a4c6048239beae87e9618cbcf4d998a31add8e920976e96e7cb0a0570dd0db8af4c1c723bced4241fd1f183ec8165ffacf381aa8effae6e05142f8b3d6de1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099104131a64fba81671f6190195df4fc93c36068c8f65860c4b8d1454bdede2cbcbf147507493b681862e6dcf8cfe2a84869481b7b962c6ebed52f1a759c0e4f28d9c50b2e89148f17e171b6ef6dd56f290ae793fb5ba4fb74fdef8e705f3ea7f2d287694320c21de5a7b290fa4b6320315a2b33fca0c31520be290e15fe892bba685ea59358ec9e53279968e26f5a34a653ec0dcfaf064a6b9a9841762cd03502f6abc7cf3462bf3558152a2216f289f7765b13d92238d51bfe88cd7fa36284e44271ca9d8c3b3dff3c87b7343eeb7eb322a085366bff82ba2885eba9ff14054754b6408c663a688c18799ff2455a86d9e3487d1acb107e53157b90192a220ab781c64466ac04dd5253de7bfd684bd4a11421e9f7de4d26b4020635cf4ecd923898ce542d1ca4be68a71c93bbcaa2b36c0d228e3d2161b65e1c838253aa34ebd6437a11e48476c9aa4ae312a42b51df0685296c5714f6bfa857c26285f871d8664b73a5a36d58a1a629bdd3ccf019347211aa1ff493cdc207c3e72013d36fdf738de0ce987812f83c48a983b741581032f947a0a084a550277a4d94c5cb9f29f05c3658daa6ed82d9d99879b5c5f02202ce9c45cff1d9db4231284d9651769c00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484014af71988c9f7c539ae7fd8d770f1002f37bc112e09689e5a13bebe46a078b411ebdd44df8659b2c5c1d7509d7cedbfca842489bb4a8ab2baae1400dbcfb1c191152b5fe04407b02c6472af73fbcc00f4c4428c6bb557a967cceb840877d21ad25091c619fa83bdb94313457060f1eb94f5c9cffd32ede61ecda2ffd54b5e31419c34442b3eb4139c87827e45c88df56dbae91d207ab889680699c3c44699a0708f246362ae17a7082470772f111ea88579e95c4ffb7f6d9e96495836e7044311441018483927239ad432b82622e5896fa09f9ae4d0192500e1344a4cb6409ad298dc0f70442c898887135cb7582d1988a6fc5f7ecf6615a1f51d763b4b42d3100caa4393a8062f6f4b064d56251cb7c4539d8e74075d0f5beb0fe3686b85f1a1472e81f0d9c4cb866f23d7746759266b5354c26681f70e21d4ec36f0c82914c0fedd22370bedbf317709cb28117f8ab5b978b115cfd8e42a9af511336588acb1e700f67d5524a29ba008aab2be916943f6c126734048293e88fa0dee85b8a520bee28b8de919007875d767511038b83cc49866532511ec8fb78b76f238fc4ea1cc1e77f2806d7b4ac62219b1115d9bb8c54a2605e77b651f77510183c454d9812acfce65844cff2165f7c29dbc79e4dd865b2753f044351189fb007231487e72960fa07eecb0a7b6f286f46ae151f5ec27ab0bfc6c9e149c88ba1d30d418976160b6c18770e256c7d84683bf53a3ad6ecf78b41e6a4601623c2c9da6d98565a290f9136ab653f63ae3d793b4f85794d499fd0f19de960f3ec559b5537da1f8820d2a73ec2cb39d2b1137faff4e3fc604f7641641b0bad1691bee4a3c7ff88b520e25d8dcf23832526386b31901663d09de5d74a5857e0230ff2e93cd277ba77070070946dd3f00ece939b29bca12579d02df3bc1e90a29383a04663da0cbeea255ca31ee4c860c810b9443e00873c202345299210bb5c01f1bea17c324590ac0a078940f96d1591ee5f87b5437a15c4dad39a1baa6809987669f294da869bf01626ee1b77c6c31eb495dfabab0f2fef6dee767a4faf048d3831969cf82dff0e0cddd129665b5abb84764af3743128edd303c0639227a16b39b0309b148fc5be16f81d748ee9f671764cdfe15195c1005288b7457432547be234a9513378d0b8156114ea13834e60a2cd58600c30940358b3cb0e513021153edc1cf3cb1ecfb00176d5c71076bd7dc5b4e03ebeb0b3a0b5083d01cf078a8b4c13fd9beabb77462652f91784348724ee49cc9fba01ceb6e1dddbc504ce5b41c9f0b467b9e6fb791cb47abd48d5398cd7581c866fa5df318aec894432c1ceaa9997202c1d3ec9d513efe57b13957673e3041fe8ec27b5f956cc6e0bbda143e03e042d834431466111b2636879af2d471d6d523a4ed05f637cc1334ba525b1d58efc36628353d07b30088b4a680b569a69b87213f1957a5b464c3b639ee054cc1d88448efc86fa91245ced08de071569cd6c8167a5a02eab60987213f5feaec848ac51a8bfd2b6071693a9a98c2dab9040026b950efc90ba6a5cf06580d26af1a6c53bf756501f152a6399478ce86c50e75ed22b5caae80e68c273fab324a034cc6ec6f276d6044119023952d2e2179bff9b76f87f16df8454e68056310685eac74ca5f0b1f32cbf13195a9fae6339650ecd27d95208167e70294158d136d3a9c2e90eb27d11937529a6d1237f1d80b25690e9988fdf8084abbd8f8092c1eab3f20b6db4c750a8641e8354b6d80089ef6710ea1b9446f5cbea83aa901238a71ee608292f6f064a3017be47b041bdf0605ae558a281c90130c93413407b91f8460b96b2e914627166119c388d83a1ddccd2824ba2de3794dffea89ec475b1307aae2e5013cfa2dbb02f005d6557960be953aabedaa70415353a372eec056ca1a3da56f4ee514167182aab1f5da07bd418380e392a6ceccbb817d49199dfe59357793daee8c16a2efa1b42c41fa50945e4db928722ddde3c0edf6bb6cb3fe0f0ffddbfa4fcdd430e9a022c200e48595f3c247e3315cf685e8494589b81de099f91d90b96008cc2a82824ac64cc8403c64d8394627fdfbb468173d51a09bd94a8bbfd537886c77f0f902392ea007bbacb91996abd072535f145192c1c0c8be71dab468714e69d69ec9f0086cb7ca31a6324cfc80c178211ace433842fef3a2d2815517f18e4d42bc90d0eda0c65c7cbe7effd2c66b53ccb39690e1e9bd7087ab8e4bb6390030e2b212f01b9f6beb0a17b0213ac58ae60058c58eefc76b30fbd27d3d58911fd76447131034f14cb5c406af4ce149a860b60091582b3ff7468929dbdfaea4d69c2a75a121e632afd7f6ebe88a1498593b7449ff76c345fed9f0411ec06eec6ac9275a6bf0763a5604e2a5df0e601f40a2036f4756b00cd7a75dde42dba41cb5c108a186828a7e1bef1f7eb51730355237396a4634e5c8f40d9dd6630b439a12a2a32bb0c21728da34da778ec20a0150f1e6b7895a2f218c8c670c6c53f151caf02e62abd0a717775ab9b653f79b42304ca42d8f993cfb7f7aa21c7037813dea5664855ba09b024dee5b0e2274b78f74c41a5af9dc15707a90999bdb7678b86e1b332c91d193a555749b69b29000fbe5da14d4b13bdb1b7dfe730ff79cf6fe380a9ee0d9d056db7899f7edb052cd0d8c6a9c12a0b1d9d637cabb0fece612c1e270d4f804f2a693c86c25fff6f517b528bd5d51015bc996edbce22e71e38d08eb0cd36620b09a744132d5b361abba2fb078726d6486dcae353d7e43f7029f3e0bc24c94d7012306bf5f318cbbba28dcaaa48d5179c760209e3fbe439d513665b103cc56f2505fb9fe48427ce78697efddfa0eba4802aa403e0d8bb8d82fb249e82d38177f640038eab8dd731fe996a1549cb97270a9acafc5579168592b342b3fa6f81c3904e17f2b8f05cb649ade02896d53a15e322560025a7917d8adf89e32428807473400521bc350962df28c7631b197071d9e06ecbdf1423e8739fbb146d727f9f3059278723d8b884bd4409d5e3a4b0d54383b24e62f071c3f48a9cd7c8e2ed15dc520abcdd5d1d5596f097ffd672ae73adb4a4bc3596ea11d001bc008c570c65a06d23fd9a41e732a79af368be33530c8d9047731074902c473a712e5e61eed8c94d08eabc0614222e332097ccaa88cae7658134aaa6a928714611d3e195651ed43a04cd109ae97d97ce3c342aa40992c52eeebbc28b8372df4b0a57c4f58f2e758513cf5ede4694646253e93c308ead5db3444ffa29f5b2696cc8da183290f01e1523f1f5a45167713babd0d8212d864fbaed5c22b45b72155fc4af81b356a4fdb711af75f572cd64ebf74fde9e5e365749964b88753b7bc03da030c961f0ca078f24de2b24e2b160295b422f96e2ee2e4904594db903b13b9a1ceefaf05afccf812a98be5672797b51066ba4ef35fddecb0d99dbf2b72b413824bd8b8ddea233ba28ab6224238d583032877df58e3953cff8a0c2780362c3fb8440592af48dd4b10ce54822de14d7efbd26e2c472bc547275bed033d411827dcb3aa81ff29ac21525bc1499a8b2dbacc283964ec700e52781f24e680d2e0da81750294250552e8f094c808ae6eaa93346668443df120510da2c60238c574b0b8a7ce1d31670a6f00b668c99d78bdef05e46db5e3a7abedea303f0f146894cc2a16ac591491a37611ae041fb4f2f07f291820ca40cf2444b10d1e3ea53af552ae70ef2da601ed5b12049be972c23099760cebd99d2eca12f49faf8c45ea9a71f03f0c3aeba604a4613d3a7aba9da0299f2bfa680bb78a39b2a6b6d4be826208a6dd8e509d51e5e4c022de950043b8bf8d15c336bf385f3eafab6fe7bd66c71d4c6ebb077e9d017b0056cf94d357a6a31bedf0acfc237fb67b4b252efcf10fecc5a8f62d071369a30125c62da4dea61f4c6e1604f797410a4f11b8f08cb86582d8833c24ff8f5cc012fe653aa66c16f6fe37f29f1a1eb4d6b96139a57efe582193d088c8575c008780edefad03e628017613e1f8fad5b504e83b67c68babc68697f8815e4f706d5e51c1b3aa499d8c16993274bf046f4b0649bb4be42a8947923fe821f891f81e70110e697a2d4d4de1cec65c4d764b12488bb533d29b8a5dc267dbe6cb4607a9b5d25f522e2cb184139eaf2fcaac8739e5174aa72912f2356f13e5ddce750634e8a01a2538ee2ccbdad9f11f3b0a2cea4193f138028c74e885ab73f1f7de89901a321a9da436b6209a37d0eeeb55f1d1363b855dc908d295c9bd0ea2d94239c927f052bac7b71bb651ade38d787e3c64a384c1fc807de9877658272d7e3b66cced42c5afad75bf9fcb5a0f0ab10ec3e15507a8d140cd2d6892863d4ca6aa38ab886301f275fb3ff6f293e415b65d179e63eb60a68009d763717e5b1869f4f0a63ef09de5298f7ef90aa138e02822bad99ff5839c31b8509ec6a9acf631094e2f21b148134cae4e1d25cee5624434f1201529b0a0e32ed75e93ec57611e3fdb78c612c3b8c74c97db12244feae4bff4df8bc819b73297797d0bbf74f9a72e6d788bf2665c0a47f82b442487bb04e7e744b9db8c956878a4912b7008018292ef6a3e229ebbb4ebf986e3b8e8db777840432e4d8b628e37ab831a07a91b62973efc6df0d8846b32eea8abd9af645b53dc039097fccec9f8be40e8a0c22e09ba8c7b16605b883816709ec665cfc173ce9515645fffb0a16fc9338a1b85e3b2bcec49ba5009da9bb07925cea619b391d72a1f2d71fa20ba88a5a32ac55c7e01ba3e66e2f2d3f0538fc5c6d855197d2f6c16d7db9c5080d7533ffd8b8cad74e766aca5ace00a7fa0ed43b5b07630946c2aa8e44684d781e31afbfc3c2c201b8168989a77d03a2bd96f7bb5479b9e273dd005ed533e6e181f920630394c5ac8813fd26af3d2c5835e2030d73273ac72b23b4807b9e72ae01d814c9cd621212e5b2856767741838c8c9a82e9125fe62de200b2b3192fd3c489891a4c7a9c5a34ca462241a20216835f9b12d1a8dd1278195126b5b67b2104043076ec6f8f88551c1b6e696f62f0755d3d2ce285246e4c002098ebefca8310f684373a2fc50084e6d4e343970029a58a717845c5108c9bb86410dbd05c26a057069d17f92735decf994f4652315d43e8cb521e20859b3cd069b7633c12168b365b893dbb0081822470560652d163d0d4859cfdb922af0fd3cda9e7056cfd9cd2cc46ac540bf0811d0365c681b1de6b81ab0b2a867252ff5b679010dea9e209b639fec933d23909c3d6bd0d6df223fe2b1bfb6882658b63f6b692d97eb984f62817b06744a1b4209c2bd90ae502e89d657134958784d4e045f69f14ff07fe8bc3640eb903d0d8547615846378515c5d8c2b8a62905afc0eed751d1e6cff46e75889095784e9dff16a163cecac32cd33fc90f116cba01a030950ef99aa878d1c721f4e8f3fa796b9cca635cd51a09b50b15ae7f400fa5e44d23e4351db0d0bc4e23517a12c51dd2fe3743d9a4f31c63806fd56b8d4f4c8af1df94da195a46e0cde48d527c5ae33f2e0d2851381e1980050abc2d6aa21517f08a5d4491453fcaeeb9308300064f5cbb910d679d4f12f8807d4ac7c8349dc953461247103b359e2bfacf2f337dc1357ced387a242b074fcde6ece3028ba300d363722c1b77d98730db9cd8dca02190f20dd25cfa0324454143944a374a2417a7a1a66314a3d861121011c646e16bd071fe31586778113eae247a459eb15f050122beb571bd84ba7f27be2be9f218879c0eed16166e003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000026118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000260d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000260a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000260b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000002629a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000026141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000002625e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000002612978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000262daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000026189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000261159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000002605ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000002605c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000002614d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000002603db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000262ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000261213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000261ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000002614fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000262b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000026305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000026280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000026223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000002617a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000002608858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000262618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000260f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000260e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000026172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000260b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000002605bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000026137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000262e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000262297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000262608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000002618373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000260422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000026204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000260afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000261998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000002628d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000261da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000002621d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000260ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000260e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000026107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000262f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000002609726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000002624f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000002603c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000261fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000026205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000002625110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000026283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000002621cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000026094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000260c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000261f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000262421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000261fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000261bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000026304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000284bf2d07fa33deba57987d468aaa463a191bbdbc82506fb93b1d6380881e3b001729d5f552a83841ed077fb612315bbaeab1b81753d16f0f3f524f331aa217ce315599ccd34c27ad66442f4bcf2de41b04c58c8c896b23657ab43a87591996245ad97e427456a35794581e599c7dacef24c310503da8a47d7708f1e5b64e4b47c890ee5ca7fb88ee0c4184ca96836e2577ed26118bd50fc4f384fd621c359e58573b4be83546b102754baf717f09e422fadb7b422d391edb98d22c530dcd5b6107c7ff9296ca7db2f8b7bbf285f4d80ac475878f72422cb5b1d3fc3a09171f0eb7d741d7daea7a5867ce401f993491867736b01c5af8fd71bba3725e01cea56e0f4169efab7db391274690861508b37d789fe89a5ca102697c3f6905231c7df8415ddd803c4eb27a71c019b01b298587cd98814d392407cb0d0a58353f7ebb753fdfaf459bfe7f123e82367d0f0eb6d0350d36738cfc97bb81c4f16747f0e984f4a311bc625692b02db8ea14f81ffc1dcdb73adcc6cd197124c06625e543c9f07364074769ff5b2c43a752dc5f55da576d2b670063ffa420ae1411a9ad144e8e5ddad0501f6666712a3816be73c3beb4f726c3ebe7cdf5c38aceaa0a4966f4500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002409f70646dfa2bb6cdda8d1ad19241b62625f996dad9c226826e0fc379810ebd81a92a98de0a1149f378d86cdc54eacec40c76ed9295980633af58dd3bfbbadda2b542455c08003e8e8ac116337ab0207c8994d36e5d123a90fdfc17870a36d9718da2d4f8494a60be457cdd1e972f978e0a42b4d47a4d0ee2229b4bd106bbcf612da28c4f898a1f2e5b8276ad9670502b037cb497d5a0feb89f36087f2c972f61cd2354bd1137f32aa5f4bdc3a3ee7cebded7298f1f7dc895f69dd1aabcb3abdf38ab2296d9723e945ed72e8f4fa98bb1ca51cc5a3af38f3e9b420208c2ba31b82121784a4f35b1b21256c0923be6a8ec5c411dafbff70c5b59c512302a25e82cb9edf0006fad3edebba8d439a69b4bf99c8fbcff501032b42e97c2a4b19a62a37aa5df25d69565c20bcda9944e647a974cf561fed513cb607135bbd1277b145af85ba06d8a376f038bf9bde137f21fba37a1fe56f002a7fa72daed90bb2523f62de1e3fb1d47c3f27950e6ab401df2826dd9fc824925f9366a669efa5269742c69e489e92baede65abfb942d20580212e37a5b151f5aa71eca161e29b13b2b8baf4fcda24526e0b978decff015e1d0e25ede10fbafe357a0ae5e0ece773e900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009af16407ef7ec4d9860b44a312e910c7247663bd5e04c8bba01474ddc1877597b7bf3166ecb3049b46226ebb269c71b22daae230dc7f131c3a4877357c8433dbcf1767379deede98eb5eb1d5ccc2bce5335f1769015e1c265c22395a9e6e4fb0890e8f8d28b9ce71d9d4a8a9e48ea5ac6cd9d5c4880e79d9c7554d68bb1a84199aab67f901402ae94d9d4a5ecf052fb2a31287b6ebd31daddb88946edcc0da9f1fabf4afba697707bdc8e60ab21e049225f22a0a495e200df7076812164fb7225a6f52d9685e1119fb4a90c0d7fc979486a1a3ffe66c8292f00c8e37a9059899b60dffa574daa6ffac008f87faf97c3bc0ab7dbc1461dc5c5d728cec9109fe40c7195f2efd466433e3d71f500bdc3fcad8862d3739e4398b7c380c603bbb796871dddb7860f94e2045c645d9eefe23057e8b6ecc725cc049ebd16b64ac4bdbb7a376b46d0469d083fde20053b55aeb6656964966d711c9682a5dcfd127d49f1a17542885ae238398f0c02e2c8638b79817d631cb670de981a9778faea4f62ccb91af2050bd225e0c2ec03d7b792470028f0b66112a8be17f99ac1a06acf21ebda9e35671888fd43aa2cc937eaa3827490882a5358fcf541f8b6f9792a56840740000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af4d2d20ff7580fa88e7cf9b3c0d1ad4178fa1ea03844075bd6fd01700118d887c57ab53cd12bde0e859098879bb9d026bd3b50a8c66a3d802f1183e05128b9aad320a2eb1b7135c7d54d700362764dca120a508025fc8066b8a1c25ae3e717f30805ab2f774aa27c5621ea1105a4d6df1414dcbcf024e311f6e6c91e503d4bc9dc88dabb1fd21d9dc425ab37890bbf8601c057784b2701d878d669f729b25968cb4412156401a4e2b6c59f8d744a70e07fe8a6bc87a64037d821ffac29631f4e1a77231d04d7cdfaac3f7c530cf889f5578f3f6d2c8d5a93b0d2c23c61db4b55b44ba6ab3a42cd99da89f5706ebcf22659261c9cc1f29dd39af8406ea0b467860afd5b9a5f666595289cd7d9efce9edd684bac3fe8e3b4487d0f532d434daf7b7587293d0762cf058dcbeea685d06bcbac553017149565ae3e9fe7d1f5541bf3fded0255c8afa152e7245c49fe8753ffee9103f91d9f2459fa66b329e278651d2b68a20cfd7cfd517b83e56e2ed917432b360b2bd6505cbb8bf35dffa1954f92063df2b01d4872a7788243d0f17963b025409a53e73aac1edc44eb7934a96b052534e2a2f72d34cbb8a83f10a18906230d96cfd851491d2997389e038f13572000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085c0fcb228b2720fcc9ba2fe152a5a4396e681fc592deb68691459fa2a683a8c0510f71e5e3f75eaf2007728a16e17af5fae60f404592f504659bb660a935c16e53850d43c382eb62b92bb1f3098ae376a721afe939fe6f2994869a063b89a67513f856476ce0fbe15c27c0f55bd6631c7a2d6521e8535ecac5d5fe7a1ffc946c9d91ad5bc881f32329b0321d798ba00e35c04679c1421e5ee25f331d23ec650d88c903ace5a28e7d70925ac9d3a47556ee1f0222dd6318ea6cd3c0bbb5df9821946a94a71c12199936fe1d1fd5e2dbd354dab4c284384280486c350874f67a7f153fbf74cad10479973456058fe679d756890921a3593e1588a0ef0ed5adf8abcabb2704b48c541d9cce51377cb60715bc790d4ecf14a1afb33444e3194ef82bc8c810c9e91adc254e079d0b6acb56f8160d8078049941c046f1630bbd77906f72e06ac12447d67df116b76fa0ddfa43ac91f495c9891dbe5a004d18bd2155b355f67cc4d3ea0e356acadd6bf980c018e5114f11bea2ca4ece4f3f78534558e956c7ab4975473e3e1996ed918cea510559e3fb94bd21cdad60a040117f811d2bf47a412d6d7114641db77bd25bdbf7748cd2ef3929f0e805f3829152c3a56ee000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094e144274457fa160add850584a41047f82962da0b87fa2867b0a2a839b5972d3b3023773cdb04380cb473045785f2b88a3de2dac08c6f058ba9143c0e9ab1412770593c220840f703127073402cdcf1d6245231036b4877ca388c6fdddf0d29b503d1cc737dcf176c54a4c6ac3eb1677898189091e0be7b4bd2754672fff2c969281ccfbde4d3f2ce127750afa7618aceb7c9fb4c691704bf499f243268e2c49a6e5aecede90e9499136b85b2e2daac51c31b05646dfb52bf5016e60eac67b0dbd9c9eaf620a67280b2f2e88e0e00a690be3b318a9aafa6faa3a8467caeb725087632c7c57e15ccbb990445cdf46049f804313e6cba286865f01cfff88c8d13c2139528dd66c455497b4aa520702621f8db2f026def97aa709f0a99b60385f6f6ad3e2024bf8c67370637db2793fd53b30c544d8e9e3cc936a31542cbecfcf4e91ff5df164e5137a23071db8bb70a15a254df11f25354fa7dece77d65b4344cca88e9f4613c466f003bc0d0ba8a027c2265228fa80772e7fd2931014cabbda9281dc73b3e1324392abdea983e582009342a8b80c8bc3612cf758b65ff072736b715e68938cc697602a8d0bbe65903fd7b3f0ff6f93b037f2fee07167b79f60d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d6e05394dcc7db0784283d0c44fa7fec8b38427fedc9ba4938c988968a9ea2da3804d15828be5aa1c2b103b45a361458c0c513c841a45602afd0925b18e78ce908f77d3b8895c7285b778c4ca00c7557a5e5a7ea3e3d636d58e534b6650161a50236f6dbd90ade78f6d26c2e208fd2f5dba10d9e6025351f1d98ae95b3a734391d66e35f6df4abf9d428ab295e6a6c4c0a2bafe27ea2883dec89f7f1ba74a58190e1a0cce0bc7b9b01d150eca301d1e9d1b4339b5dfb5213d564a9a826a5139a79d98696217751e0305b81a0d914378fde843f1af2863e0ed78916051c75ab3f6fc08805c1a9a60b66aecd87ebf65b3b05a0f3c2f5baee563621a603986abf182e6af1a72d2729bebe6399babf4afd602358af5dc9b1ca6a866208779bdf2fc4c0e7a2c68afcd87b06085cb33580d622267e442fd82d8983e0315667dd975261303532eec25787f1f7397ffa851b1d052fa4ea405e49860e7d167301fcda581e2c7af8d20754f14ff5ccf477ece6476a87f60dcb49153a818347da775eeb07ce9a8f3c5572a0b9eab20219ceddcafe2a0b58c122192ffb690dbcd67cebfc1821709ef21ecc39c4c0af63d11917ef2e5c1799a117ceaef107097281daca7ca820000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab808f1c8247594d8f8a273777efe02fd1271583acd93da07520bb7e80804b61abe9b81469b9681514272d7667d45e311599311fe8dd2b1dae1313ed0accf61bbaad17f52f50cbd926194a29b72a1b060766346a158f61e6f66eb7dc43ded205b4e95f57b14ed6cd88858be35e9091a8ff181bcb59329e94faab04c87d8cf1a9c67bbd8520cf4508605dbda20d7652343d086f7f4941bea1bee2fe89e75aa454efbb6899531ab725e8b8fd35ec92ae7ce0070a9c4116abac94cc7669e4eec86d35a95ca4b457c9f60e017a9326e45c2a11acf2a7ed5c6592e23a0f817d321435d6cc1fb0812723afd2c8c1f5264c6c11019bf15e3241b3caf43db4b2b6cef8a2014469b1381958e3957e2f7918523d80cf24a980610b81d77c8b97ca38f56ecfcca8823ccf807f5e5eabe61730dc258fc25677920f657425ba8854224903eb7d01b8e97442d1842eb4cbf5e7586e1ff5146e410ef8825ebc3c589ae7f5c4f36bda3b24acd628adf23bbe715c5b058e280c1f638f11e1a2d8d34262b867774f4999cbec6cdf4a9acb6b5349a50b7cecbb43685d6dcca0dff9a2b5d2055ef90e9ff2cc01591373c0fbe02872884c3756307fe8ad05c1b28bfef163fdfb15dd23d10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000975f09c13d6d145822b6346757a35a2c794453220da85acc7c55aed1b74c40275d5dacaa084ed83263b5bc18b734b834e72f3b05af15a9f6eb0efa36ceb649ce4f23fde50cd7d7908b95dfbcf0374eaf4fd4a0e8c7de2b92873511e23e00ec951a20223c9563e0778d0c7ac94151e2ec4fcbcb6125e2cf037c6e2dacce3da1da0f0c95f0a0851078ab788688275a05f217f9f63e6b9a43043519c3b957dc0519519f923e5cfed5a2b7c6639b5d8f5ee73cde53a48a131f6565e3ee11d1a4b430312f1518dbc8f71cad8a6eceb13960f77bea06df2e3ff6553410873a950d02b089b05aad118fa0728863e64d1c6a813d712fb0c0e05974a2a82de3b1738e6d8f958fe75959b416862025b39e9520ea3f17f3ae39ea0a9393b47fb8fc6b411e0ccf16b18f6960df73770d4ebefe7acb3275efda1654121d69fe8d56c82cea38cc14c125cff177b4e93b5e0bf1e2474f024c3c043bb64836d8c280d5b922325eafb5be13acf887b72def866c0860c0372487598775c3393424b20ea5fc44bc971a85252d25510126f84523ec43e3ba3a597d80d44b9e20e7b7f06a66e09fa58de04d28c788b62773627682bd890c3ad41d651704f9d8df4caa0821881fb414fad30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090c3311f8d4c82a3523df2d52e3a4a4ed3ee0ee109d707c2896d41a92712ed0c8519e0e4f76d728c70a5f70fa612f4be73ad45c1f6cc59709fb951fe395823b5cbc6c87fb69e0c0b6695e942b3b0294e5b9d949260af56767e9792be9b7acb409424ebdde2e2f5cf1b95daf80a262228912771718a491b93b090b0c0fbef6f5f563e9bbdb006d33ca91711a0942b8bd1e60a88ca76de843ee1c52ad764e58a737ff343e75306d800e5246d51a011a7c2ecd282ebbac12b721cde8b0c2583ccc203a243bdde6ced5a56310e8bb648d021eca521bc2635b6d69fd003463aac532b2f67767cb303940b6ec81c09cb24331d722186e92b67abb3907bf81184519557a3caa7fddf6b1ca419c4f67f132b5e34e3093f6eac383abe4dd4767ce5f8f98c8384a96db0dcc8b11260a423c9877e9528349729e84598aa44959f54163d97133516c4b9f4cbb127ca617c0dc947b6e447d53d5297adcc86b6eae30830800c097a50f5fd9a15cc1afbecd2ad2f61723c0c8e84f4987ac7b329b87db00c65d5037c5ae52ca52c2d4232afce4e202fe2893bb8796799205f3bdfa80f00e68a86dea1ee6556f504c9ba4752a691d192d52a882eae3636f8999a883fa72e5d886b00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a99229ba976e205725224c2b7453273297e0668d83aa6fc8d8b74ba2a28d946bdad0e52ba924957acdf1d763c4ab94a3957fa5ee7010c9a1ef22a0786369aedc233a532f50bf3e9308a63f7936cbd35724270699f4e9b71e3c5ae2a49a2a228695f42c95ba0b0e3e8b89c2340cd2c8145574771f3f31dc068e3d30087e724c596c404ec0c7a2aa66e87210ec7ff9823d3412ae6ba75b0db0fc8ef8cf74a825c25d1a4cc4a93e982b9a4933fb3df59b42843d4917072c11561fa7e2259fcecea7a601cc7e8cd8179e169ed84f9584163c2dcf5b97396b369902f23d273a7e7a3ec6a27e73a64dc2b5c8a4c8761ca12f5ccf221af3aadb05755727f7476010b1b02b8250179df25c22c1cb7df24bffeef3ff95dd6a040184a55c25dd75a89ad98b197da13daa93de9624702abb7f8e4fe02335fc264f62d4c1975eefbeef792d7dde37dc0c184fb5727f56f1dace7e85dc13c2f9a78400a8f09a6f3ad6e11c19f0805526cd09bef73653f082a480179288a3636c389edc55f8685f4feb429a3488129dfdad217f5a4d34bd212838a42a871bff5c9d6b303ed98c06c3845bd8cb9ab6864a1af6b4c144dfd25d4fc07e169280e648936f32c4b87e675fac0b7fb8cc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037052353ff16699b3f985538efcace4cfc7088ffcff7769240942c22d61212e692829192e05633ba80b2abaac4f1c392125f39826c6852e02545667baf55b42d5b07216264c19d506fe19033e4c2f47fa5f73ae1d76dc2f58d61247f61f0394b1d504030471c4038d0b7bc74701064d2ff1cf7ae9aa33baaa59776e0bac8763b210552dd8c3af3eaf439959c6a714ee2da00f08b4b9e9e86186893dbe12385973fd3ceea080745563398611cea25709910358a03930cca9c4b424a18d871c7ed4f8a59aff82cfbe69bc39c4b4e7931459f0e1349d5eb757860a8207019b8127bca7a3e812702712e14ef234e5e2e733a856f0636f7b9fba533b89345a0f31aca480b02021f648c721acdcd9acefa2c30d116cd61d107cf402daec2cff632b2bcb6e10f6d379fe762afd529c1fd075c4fdd6d2cc551c72a6f8d5648c9dbe781b1e9919003ac13beba83a756d14673f353ae59ac61e0b3c5516721f5ee051fd7920beca5d2e027dd2c8b6f3d1e5eb58e4fc423966910a17f36d782670509fc6da8bb699b5a3fcac003d2f8fcf042f197a8d0cd44d34c7748ba1a18f6a3b4a23b7980aeaa7b52732132d1a63522045545b05f4d90c13a111f58dd81adce64d941b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a019c51738339fff8509ebdfeeb05d4f559215681dfaffb9385b60f00518ef77470112bd00c5f9f50e9f1b85d1f1a435c2fb7e83dc2f27e7257e1ce3f59ef5dc3b735e2211aba9df865ff9aa4215460229931a32fdebe33c1d015fb0d84856eba5c2244636c9e32e101cf29164970f449c17d84a9371af718bea3e6eed5cb34aad1ca8811d1be15381b844d7163481d5c44f2f91ab07d273b14eb86c6052c685ac171ebdda06e97d59f60510b7d4ba727e56f14841a37cb9ee0e0c469c3ac2139d47873ca23952291f6a29b13f6edc5e4ba0a92d8db8951f07a5f9015db9f5ce67289122b20aaf3cd87d7595a2864ac2d9afda62e8a6acebbc077059a98db7a26642acb91119a4e30935fe82dd6d821e77f4f9e48e949fc83eb038676f3f856cb431e0d6bc31240da87147983e23165206b0f0d5be065701f0f235f9da70c18cbd6752cb7187ae33b7e7282480bf98d7c31a313054f7224fe80aaa1c9bf759f32a1e526e9d88eac58e760df0d410a1ac9c4d907264b1c8079cffe78d5cad35d41ff324cce2b05df52c0936d76c4df697323ca26ae5c3a98f3e6fd997796ae9f5ea1bc99b7693f033c6a11b61856bf6278b3aa974afe9b6c6ba94012e06d3767900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008edb72a3a0a187d4ad95fd6a3e0eeaca2033db66687cd81a2b155f2299a5fb29e3177c2ab8aaa3aab6253176182c47cf9dd00a84feb372faf5da41046c5d3a28ecb20c2070fe9abf11efb8d762f95649ddcd43241566484007219ee7daef7901ffee37f134e1a70570164073591fc95d4ff73bd8aab674c729ad3f3ae7e5241790d02b29987b010c9c2cfd6a9ca72bfd361d0dc079225549d90e2530f712b0e2446a9928e37fa2bcf72d296596af7fef226d804a8592c9577dce05692748055c6ec85f06591cdf0ed621e1c18b731529d0470c23ed0bf021fc6587363df6dc1f6f3dfbe1126d745e924741c49189292ba911ea4d34c666499ea3f52e9ec2a14d55af80d981986edc4321139beccefbd068ef1a6dec516959677780f239f879674e92675d25558967e02bc983b3da7de361f0fec63795d46be5825b46cabb4781e501a52a0e2ab75cc0eb7b51afa3660706b859e49370034ee06da59910ce5909a2205d2e11e4da5009a946ae5138f3b42287e2ba8e9a10650656bd9c85a628e25133c026ffcceedb439d27abba113538da59394492931a7b3f76d3aa732d6d33fd3bd35d96968effb767581fde0cf012e637b38b049abd8dee6634d54adc688600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b0c808cef49769bcd0a244a4f7516583e10d0960be9a114a72582be048c95fc993c6f2280c82d4cc858c45c5d7f6cdda5b062d04ba02fcd6492183ef4eabd28b46a684d4486a1fe4980bd9b4e78eb533b4077a798b8cdc859a51b478d81e24a0b52c216e467bd7c10fcf2fc13e60d21f9342c63babaf1dd933a8ea324e263157e8a026e48a3f90e7ed5a25eccc259d224e0edb6786891c9973275b6456ca230e079009b8d5f4bd89015220cce547f2d578ced1c7681734b2d5e789ce20c8ea31aa0b6addd8df0abb581ea7e70e34d458dd5ac8983ef482a8bcd58a76ea2637dde9eed69e10b57faf8f9c21fe2468f5ed2ecf27c005d158806495b76dfc261ed21af5c79768f4922f511694d2705eb0031c6550eb8881f4c28b171e7588ba8ef1d4f7bd05ebfaebd06e2f63a8f17f3c100152256455732182e0811927634541dbcab23d6322d0c478be2fe1bfd0d6efaabbfde0208c9b0f8d8c97aae281b8bad3d7dea77867d5c6c78d43889f02b3481b26f29067a029b759d402ab0383a41a56187eff6987b8a39bfecac44996b314abd32b3563c4fd2f7937d0799b7d10e97c3ac2ba96199fedbb2d6b17762020784091e63e098fed95b89905aba2b8c62c80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000895a2237d2bc1569f0d7ed653d27c35b7b919417d40854f57821d758c1d64e08fc22567a1897208cbdc93326607aa104ddcfaf74631e95c001f2eade5417f0e283901cee9efc1e724db2b33e8e37b98cf7247f798aaed5738673e675ace7787a25858e0cb356143caf52bc4dce478e0b632d60cde7f81b1350eb7bc5f07ca5e53e3edebb65405b6aa44ea2d5cafb789c96ca4b7260ef416c33b10bdcf3f82857ab313addd26beede61f41324a36f96f1c537076d7a0ed0ae78599048c773bfcfeff9951c6f0fbb5751d99957f8a4eb4f3f088ecf092e16d91f43059846698aa37fa8b9af4b0191deb8fb6399ef37c1f04a0a8c94dc61f4baba7d2a2be51084526f48f2e1669300fccda4df9a67ea12bde348e81efbe1ac598a1d858464b0d8551c52eaa2d0ed62f25f897908bb7c11dcd2a698fe75e6d9958349ddf7f80260ead8ddb14488db6c24f98e59a1228fd69dc5c5646e8fd9fb6499bf0f81bddb107fa3168c08302ae2a7acf5eeca597dde620ab89f60e09478d79433110389b88b94ee011d82b4e7ee4e8ebf48e1ee3b0976a9ce6f46492c4d4ecddecaca98786a9baaa26946bd1af0272621182017abf382b6f1f6ef8c0c5266ea7364d0f58c7eef00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fb539fa1e83ca5b173e90b0ee6852fbe7d6cc8dfdb6e247db1677e96992fe19b087812a2da146c8391407725d1ff4584ba4827c71222305707a44a8f0b39bef8be979eba3afbfcd0003774cca265fbda93084632d029cea9d69a6ab96a3d3b08cc7c3e38a2b2ab62d41441d180676c7a90f6342d14a7d2e1de695c8ff54f5e1ed2766d671c8aabcbec1c69bd31086907f73c3bec10f1127f834bd03254de436faaa2a998a3b94db919b75e98ee518481699fd7f8a1b4af531c72e2ef6cd6372848cabe1fd5b5ce0cc72d90341b3eafdf88fa51731200f2a3f85b32fc50f380317261245c511403ef5a2b04414ec2c8185b676fcf107e128c9115a9dbb8033b7d6977baec006f256ff6a9bbb22b6307d0c5528f6f046998f42754797e3f129faef9e722703e905d24cc061becf85d6a56b9b430043f2fdd0a3cbe5d96b9865d2ca6d7a7dbc9f668d8f3974275fb46bbf61c53499d047f1ee035e0cc585b8c662229c568d1e32e7c7c7218736986210cce2da42d22c7337271735835c0cdf90da9f258dbc29df3a40e9a0b0cf110d9d0b6a293f6a528ef21616d91a936d79cc7b20f6b98c80fa27ca0885a9602d362ec16eb4187fdd4c3295ef22cecd3d69a6e40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac147e7606c8019796415072d9510ae2d9febae96e7c08dcb35b605daf28e3cbedfad368ebf51bfb56116a3ccb59a9f5c7e45bc255e250c72ce1d5789b616058b24e98d1d658a10112e78cc2acfacbf8e90244d964639627217782324b4e4ee4ea06e280a29fef653802e7f8a3d080308510c65f36ce6b6b51e4a9c39e0dba87cdfb46e40c58777a9d63bbbcbebb9ea3232ae14b95920040e370e136f5a713cb293ad8b8d61c43d9a9d01aa1df46d4edd232c738e73e16bcbaad9b2f7ea17e526e7d0225ea4838a36dbd7faf5f02985e29ff698f820efaa72ccaadb138a35261c481bfd2f82ec6c6c824c5a368629d1aee813a73eab710b52da401f02274954fe52d5c7e858ff02faab145a9d2a66b38b909a742cbf4128b5a4f39f545f60b30f0e5a0f7b331acff27767c4700af84a5f30df37b76ba285186e4a3ea6e896020dc1513ac7ab744133350719f4057495e2d68c4c5bafab2fe6fd92387462b62c7fc0d8f70384419db04c7c6688fafd9df7b0aa90d28d6eb54b698d8f022b36e41d9bf6b0118b525c2693829210333173f69d15c42825415ae72aa239af05017a828f1604975760f72bf79775b336d6dc47776f2f9a32ed0130c20e9031d1201d200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ef44272411e5053beba7434995f7d2d163cb2e07969da4fb5d64b619c8a3ce259ca2313e2de0861d53b5a226872035a8d216b781b7f6a8eec5aadd5dc426a9222174c65c70e6e9381b0b60aa14fbdcbd3b8c71d5d307773bd964647855dbd2ce746dc49182fca05e142a3b464070473c484d7713251e894e250f81d7a4d6f4d600db343f6cb32f35bf31b6d224cf88a46b91ccd895cd3bf6dcfc395a992e83b19921de71baacbb6b0136e3075809b6e9cf6c683c073e54e78ce8c2ef84892982bd835e9fbcc34fa4bde42ec01850d33ac13cadf206c42cc77884ba75eb617f5f41635e1e42f05833b40318c3ffb0b4d774b2009d41c487a5c986ed6dad8cff876b012efe39f209a1f66060fea9aae58b5e241cbb063562e4aa82a5e13ee79b8c107da7d1c220740f73fdc6f1939abab4338fa3efd52918b3a925de8e19785a6f1f3ed9856b965cd235c94af3ec9bbe5227c78b9bf6be497e309129af050d31ca642383a5f727c9d990b7054a3f98540c2d6675bb67f40d8f6ac475209b916767eda79b6f93f83af58b0bdf269d8a720d5751e984139721603af7c834efc00c286e90310754b32470dc9ba44d6052f2d7328039032857a1736ff294c3de5ede00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a180e9281bec060b3b9812c0ed71d1f54dccfc08c794820cc75bff156ded5aab61e93991592b47b6e8f5bc9d49e3524dbd3d6ac026d29a66e4a6dee04d6b4a979625de3b610e70a5bcb32dacb3eac5ad84894d7082f18d997e6f8793042fb07598ae884ecea34e47164c1b2de590501e5289a686f2166f212b07a47c2a08179a49513c434c9741e078302a909a0c85509d6fea18805eb72111e13f1c97be30e0f8c3a104fb8a2fd8b83f24cd40c4aa0982d8c28555efc92fda59a4b79d3b344843bd783c39da0358ed51f9a5d7469380e16329c8bce59b720a9d23fd14f552e4142a067a68d11aab8490e0da2632edaa25541bca2b5b547e637768dff4116ed8317016b25f70b6ce8b3fb390ba3aa456e11fc7b91854b03e3b6e5a7338616cd2bf75d4450fef06828f7f66e3cab2ad1df68e2d5b1bc4b128e32445a94d8e79913a08c91d4fa8d2afe967c0267a4cc3ca8f986e010b8e3de75fdf396f28c915676e31c7e78d2d6b543ab5de46e45fd188eb7b1c9548fe3aadbf7ab3f8f5714bb7d606c7944fb4f7053aa0b48d7d8ba42a1320375735788156f8eb13729649b92bd8263411d5cb96fcaf92e403a108058680c60ce94a5b187e8a8a29734f72c8e700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c2660729e56aeebc427969d1e74e98b9c0e0b13e46d5fd89f25c1d45a53e585f6e97d02fd6a8eacb3aae2708caa8af61a3dce0d9b5a2258780f4bb28d60e61cd6720a7be44a29215c1bc5ce1f806271e0d07fb190a89ffcb87c9d3ec059f827d5efa51e2e362bc8d202bb33d44147538c0e4cc8f073c21b6fdf1f778d0cc5b518a4f2131236eb933f68cf5481a7050a24a3bf9a377b9f96d7acd55ff2c290751e4e30de8d8b759d509a829a90e9665f192faec37e56a7ec48c9e8f26fe9925c12596aadcd72f7f5be907491998f342d8a7500b694e730707caf286b278495c00795ebb6d1beba8a359437a800a33bd12a8995d5f7b4b8b78849587673d6aa8adf31b312c9dacbdcc7a6e53dfacbc8bd0115f0681e93760024db70b400aa5d044f44a54a23fec3fd3730696ece23a66cabb3f5ffa7d3bcb364e450003d9466c655491d089780cb20d802bc99744fee3a14064ceced82cc0be90d25dbfb7fa2f6a591f76b829aa6e90c0b419b416319dab2cf6c208ff5dbb1b0ae2bbb2ca1fe665cb4a323c5de6d1f46e4280d5b9100ecc123ec0d20c9da125f8657f2fb2dcc71527b9f3d7dabc0a4302261aee4e2b8e0630e882ae772514d1b481bdffeacaa6b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050879e7bb4b80678e2670aea2ea754b5912688eee7236d77ee6d09b0ea8a1de145b15bfd755fc4411f8acc3c9661de79ebab9cc5debc5b3f94aafe86ee97ca816bc16b16bb39b9a8fc82bda74593247dfaca0b3baa0462b8809b90a9d032746a090ab1a1b534cf44453e209035abb11e59be87329053346f09cd9a5f53d0c0bea3af99b3de65338ff21e7fe1df60d019f4de78e08be7ec041f142c80016575e3ee79c2c88a4403ddea544daf6881bb153640bb6aea775c84b90b083f6b82d317069bdc76079b7afccd1795781264e0ce851ea1106d72426039edecc4aecc3dc9a04557f714e915dda5f2eee326a5020a7a33226bafd91ce64f5bead045050fdc4542c1f999ea9f424f6550f39978953629b4fd17cc2e6c559390a1145e9300a669fb25b8392b5c98c588742fb41901b7957c8e20592d8124b4e686a650c5f398b9219572d467bafdb9e4e8dd6a114973fa92ad22a6b5a55b379be39d0d488f4701df32dd4e3812927562f4a131de279c263714e331cababa1a139a2d64a761b3d34032aa6a3d67edf6d99b071f1c080abc9c9ed2c5dc23aef603a2d63b60d575f482b9a6d37182eb55e1772b4b184cfe0252ea272eca581fea2ad23c767f7530000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000855f728f59bf486961ed6ccee43f518a8c17fc88ac2778d5f22b2b8ffe14d50ba3b41ba28bd8e020f29ec4fee4ea3828a7069846d323e8885e845edb308cdb6a5cec32c69854891a1ff2c955dde0021dd02b5c0f5fbbe7b6620d1b39bd18a6f3caac17d934bf9a895d8e96a317adca7612974c5e4e79bd3eb668cfc2ae86c99365f13b88c75e101adfea20a558ee19e1e27aa1e2a345ccd233e243eea4ac88561adc58c336417be93c398ebe4924424ccfa2773f95f23f69e64b83405af436f09b52f5b953338b5df78ec299d7478cfe373869d2bcdd94f200d8051f3d079003532f42f35861ca788a0ba7d458e1cab783b4e0606dc1ea5d7d43500ab08c6315fc6cf88a8c280d0253dd2247685b0bcf2e34635d45e631dd7f910bf492181d747897cde4054d713127d61c33b85f36363a89aa3075d506330424b7a1f0c901dbf0418133696ea57d6e028e1a675c4870744e9ee862a6413fe5b9c3f96581bbaaf6016d7e6814da464636ba32e027cd88dc8fa007eb4832651fa3b7e49ba5f5d041303df56250e7fed706d7559cd3551333ad260c58c6a5ba581ed8dcb0d359c102f4167f845980270cab0734811aa2fd4ee9d1ce4ba739d55f2a3b4b1f962b0300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b4b76e65e748b9202fe316c4c93170cffdb7cecb45db0cc6df1ffc1f52c3684e7338524d006463e2555fe817095bc4478a356a7fca8cf121244b68ec1ca9ced7e730551562b1d0fb530582307bd6079e642d4c2c8c2a8306ff4ec17519caed2d0af47908be6994728f630434066fdae712b24f6e2ae929fd964f3820506085f7811cc5959c16057eb435131ee821a632ce7588aa6b1a55c08b766e0e88937e78c6bc99a96f019cbf5cf767d453e0550bbd17a2374c8cc3b09b14be0f41f4982c8d158a7bd40cb117b2c5404fce4de588eea5ee24893b28b8e06e90e827d4b9549404ad8321d636032f34ae39829e72891ac79d57b5874173e71ec0edbd95a0bc6f46615b4ab4392529a47f56f1f54e8ce7d23b9863b90e6f00e2df8289a427acd054fab6b8802dc9bb0bed95f4430d5b52c82e60de0f865debef0493d0107fe82feddb331265f72cb4be3d58332b55d2981517c1772797deaaa44f083498e80ae89960c3382e481378da38771193a7302381850b233f94f1dd02241da2f45e8a79bfec9c471e82ae82079a5b08a0e735b261b41db4d1d3e8fc6dd6cbc77d8082fad51666a0df396e88c41d6d4ac84d268c977a856578511bda31b039972883c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000833f5fe79e3f51ad31706b990b6a2391eb37cf8aedb437b0651f882637497893a829734febe8ba53040cc9672e8bcfcad1392d620f2444cf9878d9839943ef26512d8118e9ced71fccc4c3ebe5209fe6784e36a4d5a5352e49802ebf34f07a6eb1b780505337a1dd5e5d6417dcb1fff65daa9989594a4998ed627cc536d3e8e97ea856ea24a06e37c367fa4479195f92e7780c1e1a1dd4539d01f907143e690c66a09fa0b6b4bbc33e1b378ad44e18946f0dd21b226c131268300dce5d748df94afee858be2f94143d8911ce0a5fc8171dad7cf1aee4887773532b7e84d50e3fe106bbf516ca4b84c3c4a77978708314532f6fe7d03161c3659f4af57ef5ea65c7b02fb44253e4ba18a898c9cae589a411643c2ec686067c9fe31b40ea9e6c32f1d766359de0f9f4eaaaaa4ffb52fe1663bfcecf6228a313132cb9c78b7a295ab3a8f1a7774dcebd673ee92ec380802ee6c38215726f516e0e8634e6b90c95c2f24d68e109aa3b9c0e33dcfcde88b48a46898cc249856149d9f3a11a577354d50925a81d7d065c096c4642fd38bd654e1b18f7cbafabd919b748b78cd3afacd8c43cd860b26c63ae02484a35ef911c0678adfaa81f43b29f81482f85aa7de50b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cb50fbf3b060123cf2e18a5cc672a80461143781774f2f39ba96bd16f5a1080e6eb404eb9d55a97e27d7358117345bae6235e1c04181d67666db60ca524a00cb860b1ae7dcab760b845df6bd66fcef2a1032498e817165ea2eb7409373fbc825aa795794b630b09c54686cf2485762a0f887493735b3ff6bd544fe65631d4760b2cf3483e984fe9477527e14c3fd2a3cbf97c5036d7644465a33ded52970d6985bdecc6def7689c9d595b8cc99fcbee3a549e5376e8bc9b311144563af29e3ea79d963025e0df0032a54971e77f44df9cd7edccd54e44037eb42655edfc44710c33170259aedc7553927724b5a414bd7fe454e55a14d2ad03e3f5887e0eb6fb86676928cfb65988efb54eef79b4f5f19921842daf6bd199e687ddaba35cd9b133b43bce40da758bd2f9c43f98c092920165561c48617316f2d4e3d1c34617eee538a782743dad2301749d91101dfe93fa92c4779049a2a23d3dc736a23cad3ab11f3b05f014cb2216a429f4e883546b82158ea6eb8cd480ec8cdd1c46638464733e5c4796fa2da685b59ffa9934fb0257e268a50886aab34aea388b784e3e7db13fc58e24f88e910ff262b55ff6cc00d4f6897b08d1ef4f1aa23acef4d6e2920000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a27ade807d13ad4c79fc5c171af7057dc6b6e9445b1174fea39122e1fed4ab91c3ac06ccc71455347c76c7066c39daf9d75ee457d1e5ab5e93ede8d2740d0ba5fded7be01ad202b31aba9cb252f38932c9c05754bd7ce7a3c23a8cbd48e9bd47f07495984bb890841f2ac018843d0986113915025db7f6c070a4744cb8387ad261109bf3b5972758b2f59023bfc6a03384979366b77ebe1c385d1fcfd0f14796f7d06cffa81ddaba43076dbe4c425eda83fb9cc49a7cbefd8d589923789f4c7c74a457c765e291ae405d816c79e20e40045a891a06d497655f5972242af6048df5aeb30f7452d8170e8817d9b6f9b9a88e444bc901142b6fc3b6784389dd130fe0f784332e7f0e48d28c390feab028c2af17ab9785a8b09ff4fce501b8ccc63049d627701748df45e1655346d70b6d93f93c2331e129d0dabbc57def3ab0aa7104be5d43174e7518c6efdc17068d9feaa501407378f908340124953071e3ea4afdd466a70edea90b9616d82fadb6a5da9282caa8d3669b73c6485c392a326193db715e8bd338f3cafbcd89ba8fc3deede060c85a355bd0c723a590ef0e03ade3ddf4a5aa52159c5a0fbf427185cead15f692a5b4879aaba09b59fa992cdce2ea0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad3347fc125cd51b5ac964705321e89cc15fd29e87fc612b3c72d478bbed7c24bf6c54b9b5ddfe9bafb4d05936f648ea65d4cf9043d481374358a327a9b7dcf543a76d42a43d9b24f8e7815be252d09e458a0454caa546d3ac2d522b380e8f2953ee4681b2b8abd36bc3bd94590dba101929cd4a5315e03b94923adab2e8d91026b676f8fb1ff7b138d95e2f8547b631ba4980f951c9fa8a8fb78734fff432346554e85e56aac47061584f15cad4c8e223417d7ffbf93617c6a5aff4150bfc3806ae0f64bb5f1b46ac50212a82dc2cd1858735962771b21957184f96ff0c149cca0b9a5a5f25963e108b1dfc1410873294626887faec90dbc6ce14fa197c72dad7a482710a246d3ba9f618b4277651e4a60727053f4f40ed56670a90e689030e53cf2ddf2f4bf78dd8b22536b26b6b90a242d68603cebfb193886dbd0fba9f9f513ed04fbc9a370fc0f7a75f86d8398479b72edb6d215792e4f751134c3d13cea10d2d05870f9281b51229d3d8cc7c2c70c33a3249af63c6367d4f266b3629689a8a9e99c55ebda2717cda91774ec901b5970537d4fa06166fbd06599220adb12066058bc270df44be493c2a3bb9949b2628d38a44124d1c73cd5f2601e17da50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adbd55ade3f72b603a901d0fd8b574bf6e5be3581ce9b06a45b83d0378b0014bef7dc3cd6005d587064dadd94ca08dba55841de956b5be86696b764fba36f76c67d31b44f109fcbf72c52bfdd22b0546623ad85a5687cad263e8e3e6dd35514bb1e95ca2db70e89ef86a4d4a8007f0883396921f6814da904ee740657709c4f2e68222eecda2ced6862fe3d7ab492096615c1224f4a24da171167342c2bcb5e543fa64e6110f84ccd8512a3a56d05791d6f26783c228aeea64cd8a4d1cfd0f983d84bb5105007ed81183c6434bbd6e1199cdb1690206d164787878e9b12568aa60c520e1533c37dc897bd5b8ad570235a8861e9eb618dead544cb967d462bce6f2f73fa5b59a42817c03e23ae32340dcef3f2ca7b5c0a39ae5377291779c835720234fbea17b8a4c7a0d93b7521ac3d5f4ae54b9438087bf9e480491ae690be0dbc6713db3403d8d76869392e0513f249c1c0cb0f1e5d9b11fac7f36d3e46a4686d378660ba75b19c61be28f77cbb12377e2a37b7d19e0509835b9d85def1d347631d0c60aeab03e50d181f368ebd5f282085716b52706a9085ebd496e4d7a45f6e13c64d0534dec471de8cf45877530081d7cd4431556bb4360fecf1cc1aac4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081ed4641f16050433c8e39989c67830285582fd96b92aef2dad76bd6bf2040310d0ca28a88f6faff897c7684c7cdd15f5509cd2c670fb98999a645f611d5a726ed9dc66b28f81c7a696a42b7570168e4caa9c4875c9a608762e4262073d98440b2692e423435375531778623ac9d1b278ef7ff4b9535563edb19398db3c93196d2af4d19e343179d13bf78d75f08248febfa05c2c1d06797f34db47690b2d9f81c83cfa3f36944bd95ceecea72ffef83d5ac0cf468c49db16527efbab83fd91d324c0e76e74ac889e7b61f7ef90c4222f7af9716dd979b3a3615c4e6a8cd3d3304c869b75c38b0b761eb5e6dfa3b7f98fce6fc6692c6e8bc22cd5eca716e0e9f212fb33c9249c46001f4000632df35bb92e5fda70f4b93b8ed5455465c49afc3d486c529b937874d2ed731676917561f9c67626cf4dd88159585370ba4022abd55d0828c7a4f114b0d5615867faf6f9f47c5f71a90a8cd8cc5e0b4708d18fddb088f7c1829b4ba2a7e5adbc86ec5a672831b3ede2aa28a025949c62183b58ef137d45f2ad0851088b3b0839c9464c9947e1aa97eea53aab73d6626a237d370f460f91e92dfd52b277387654a35413ae43187e3ebf8c38ed76eaf8cb8156022310000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e09c6e4187eeec7958b8e80e78b50591bfea5c2a782f1f665a64707940908731e072c1e987fab722acf9e44f88cbd73fd09e5f03700b0357c8c48c0b1bdf572250ce7f69c3288fdf4eea5b3c6b160255a8b31047f09a54c8ce2bf869194974f87727459372a8b35e76f37ad3bfcf15c8a22f212877b55a0184db2e13fc4c1842b1c97ee2ee944f700f1deb8ec43f585f207136f8215f672663ca723b3cac3b4ffec4dce8e4dc4a378a04ce34e6df8eec799fff1e5155d74e6e7ff290948d16ddfdd7e47b4309263c291e027cd32cc2c9f9175ba9e42d5b7e5d1a79f9c29d68a3105d432ae64ab4704fb52ef2ed40b11a7d5d43191e536881b65a32897fb79ca29f864842713b250fa612757b5d56e8528a9c84082e563a8b89b7601af8bddc2693de8ada267efe7d5270e71306b009326b54ae68c57e39481569a69ea63821656c3c06395155693d887960173522ba2882c56234d2c0a0f3178166cd096dbaa9939e3192c330f8895688ce81c48831b4df0b3e0e8d6ebeb2b082f1ac4e97d45e049f78d095ad32c67861c4928a811d473769215f326b7887fe04e9afc458fd9fc1eb30a438835ca6f274469b9ff5905d08ce6337a3c64bd01210fdde78e5200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c80d658d89e15e306f158f20996119eadb09d0ed2b42af76ebe69e99a94732153d90f5f3c623f8b0a7b9360820f4c684f7032f8dc3dd52618c66003b7e1ca29a738c7163fa57e8d70f4cbd19ff173f3777f346d0f85f08d19c742995b8f8206c568402df7e717bb22f00136d4784facecb59a88ebcfe2274a47eb3dd96150250ab2ffc4ab4df2e269cf54835be921eb95b6b529c6fb013d6bf5a1ed73284977898a42697762b467cde91f2dcae16deca96c0a450d00ec32396c1410b3a06c39de571087a8f58993e0ffaf76c0a4c798587eb3aa650334aec66eba117e2a046df42b23665a32625b72553cb5cdd40de489f12e33a6e6f160a3ce525744eb72be3454972cdb467b7d312ab391f4ed9afaa83d25b4e682d78dbaec03ab558cf7ad7fe0a7e14423150dac8789e66477c9f990cfb1e299ac07eb3baadefd9ed110fb3c35a50cff8bc68a89b934f1a90ef17b591af35c9838e24e0cbebe3396a1a4a4dd0e8519730271787ccc8beed6060a789f0686d6f76d2e58888c79168f5a3c3456ed7ba00bdb6dce912f5c94a5aedcd40cda082886874ffe77eb80bed1f3e53832ea623a9b1b844eb786d65c23bbbbad4cc653e6a27ea5095562e88f0bebd9ab00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c605510eceea985bffb4916b0e976d8d702e132d93675cc1a9120b3215db3cd586f791385c85e46833065ff6421557a8743343dfe6483dd975d7bc294f9f317d32f009c126e46467c8328caecac4b21e53a79faaf791d502f3b01cfbd26cc85f7a2fe8bb91b4a22f8cc82d29a4b26cf49f5f901bb6e70fd62295bd1d09f59059a0a79495b2cf50a10bd0df02360c029cbbfd30f341440c10017e4e5da966c5347f030d52eb2042466dc796deb3635158e9efe78c37b2022be6a8f395d8f3bf67537a4c04e900f58b67f2d14f6cd18f9e14908839eb6cf0262a85229c04a97deace2caae221b95be7b1eea105ca2120a451dfc1413f33f0de9adc33dd207925624cde38e079bb93c0cfc13cab645b8718075f36203302171833d13e8e2b490c10c0afd5ee567a9b120e81de8a2959557dd93a8829137263728675f1c37c228661b3f31a2e2ecf0f153c04a6394b75478485e32b32b9e5e7cd048a16bcd25aff8739d0a45ed577bbb012c168fc7e4d1b7d72a2711ce2685764c497aafb235fca57ae459a7386af19933d9bd24f0834e63e364b9106b9b2338075314e12a8565abb890a48c119ee7b8f8c7f3136324fc6506a32900c1e6fd2a09c05218c0d03dcc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c5fcff21b29315d539e49cd8b9c4c386c7c6cc337562530249b320e12f923d4a1f26056ac969f79461f0f4e954e1c8a872b388b7248ad300806acfeaaf309c926b58fd4feab9e043778428ac83f61f8d11cf85f1a8c197eaab3f9237da24f231723451475b8a8385858c60b0ee2c047def38471e986ce4c105f9062d915bd1f5dcc46d66f41207cf805f5cfd842cdb73766f93314a8092f0a3297195e0398cf2c18eb72c9a105a4c6f3e112422328304f4d008af8fa6367b19c81d0616d92051718b489dba673d7c1c97f9f37cf81647e134576a9e1983ac1b283263c6320966d44b38b3178577c0ccd6221bfc8e99abeadb08503c6ffa0d4ec53d5b24e7ef55338a0d3170c427c36a4739fd73116354ba2adf617ba8b0f09a5b1417470b0e93ef8ad566157ae52d1d937bb9df346bb9918dfac9123bdb571f68f29299a3bfc1f4b5a58154c05f1047e8d3305b2c0f4f217f2c88e87e18efa030d68618f165b3afda8f38a90aac6026be5ee20f1ee2549aca4e5847b913d709e8369db503e36235b0e5182f5be5f84db078e8be5ff760343ce387377bef185da0bcd3f9b52d26d1f69b8b749ee0fdc5d1d5dec394da1326054531a75a6063d45436d6fff50e800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f8083f77267cf3bd815e61b658c4e1feaf040e82a19c1ed2cd7ecda39046614d08d5225b4631465b61fbe5c197e68fac4d722abe4f47830fdab8684141daac2c007111c4fdb391ad33bfda76388b11eb5d235054652b075c818a7a740d307b71bbe5ea3a768cb15cfb142011e28563449bf0ac5239cf662dd7795a5fc77c9314be5cf7aba86d5bdf664a039832e9167d2cb405d423d8c41872a31bf6ed1161d9d2e0c55a9b9f7ccbaac7688f4fe76d3c9c07403d7ec57040185db529e022d0224e90d3f05a6c7a2799710ea39cb7c51a96695b0556ef309a784acf224c16cd22899029ed0bfa5a372968a83639ffb532a61eae73ec69f5c94394ff678e8f0f2bef176fe866c40d924621d8c6f5aa2588db29d2a5adb7dfc9c990dbf05c4132804df4d560bd8d04fdf0fd577e410dfbd0c1ec705237b51f1f70c51388e76a469e31d43e0e4e7902d3e7e2c9b995a4eb41b1cc3b93c89f08e07578c0a2a3bab03bace42aba3930d35c5156226b8f7a35eaffef8c4d5635eef0e5140c104a7bf26e3da41ff1fa348b4e30f64e0c136b3ea3888d2a5b9eddec0a45eb70ba1da0a009ca8c7f55b85bb1e44a554b847c472b34f65ddfae4fc7b5ffaef7fdbbdff68d70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3fb1ce41abd4a25bd41f77cea3fe8d8f2007c7a5fc17df9d4a0ff6c576e2fb3f95db11eca90b660231a6fa4d8688aef93f958d7d376bc17240f19d521a1b284b9fb88dc46eaf5094dff4ce4e5075f609a797624ae121a0633b199574a38097d6da46f0e2bfe4729a1dc3d0d7b9570fb363068b4b6e38050f9f911933c1d73b81c9cf140ab47ec909e60c33dbb7c0404593b405b0f38d2816438749b271cbfd7133bc101a9b68051532c2a86f34795eb3be6286d8826903f859118750adc356d9c39242ee3ca28b8311ec5d90a36b2eb2538a8002dcdedcd6ff869a54d298e26b268b77d013df8d22b85d8f2490ced20a55211dba266daaec6af162220c5d722a7bdb1635e0386228ae8dc17581e92df8a60484a8dd61804f11097e2e66f5287917456e186327129f95fb30f99302002a3c37e4cbc9decce220413a2b118ed1129b337d7abeb4996b7372c471406a229875da461213895b19571571e314c4c43fe23d9e0719e0d36bc6e90044cb0754814a50b12379b7510b9ca54469cc55104efaf9dd2b3e07f3ac80f819890f5fb675414e854b5fec2e84a1eaa644a57f1447efedb72bf081107047c7c856ea104182d9d29793e0cdea0c4b47c5b31ed49f800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e66fc87c900a729e2dbf955a555849065db9f30b308aff11d3a4bf7f0265cb253cfa1064fda95e29d763b3bdb6564da476a925a5f8acc730c15a4ee78bb6430b2f984fcb72b1d7aa6a648023c9fda1155ee9681072bc982151d8ac8824d21cbe43128f4d7928a17f0020216afb73a363496034ce0a9949fc9d1f3c75aac57fb4fcd04226bbdfeca631e3a690522fc823af96b0ea5eda7c3323997ea62f4b48d41b01163b63a0ae8c8d314cb200eae503c0e99e0f79a8d0842eae07dd5d9b92c506a2ff2e2d07330092d2588c92c22cf1d7e7110b978026db1d66dd81dc98a357becf1f2d35f16a43474c0f160578310772881183e5de73b778a0487f47049460ecbfbf26eb8443ed42a2a1a7745625556e644bde37ad65bfde46ef26cfa357709d6ec70fde9a38c2836da7fef49e53bc066c70f094374bed7beed4fb466fd9e33fd11a08b456132e3f0792b14a4126ac12772f1b4726d4b525993d83d96cbe4ab52f3a7fea32f332188a90ee38ccbaabaf98015be975cfd85402393ee8dac7a0cc96aa07be4aae2b22e3cfaa32f2b2cc4852d1fb09227d819443b61048bce52b34b1a760f0a9596833e1198a3150f78a366506d67d57f761b2bee0cba89983a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d823f9f47337c68dc895f5edcda4ed05a0e8999e4cb2925f882d5742eefef5976138bb9efdcec262cf937f01aea268d6475da49b722b7331936d35a8e49e91dd6704bfeca46a422a0db3eb13ad7798136fda425982e1ca73f1763e472f67bbcc471dc5443419054965db1231ec309bf5ad0be2e587108b159c29e7f89bf97a0abf1018e2dab753a046552b6deff4196126f57e67589db9167bbd71109765bb9999f8cc3c233529c3c92c53b225f9f5d84cf08425f860be78293cd0318d89904a54e75aea0b8097b84a36aaf3e127aa1f2233671a95ceceec76e9a77ea15ebcdf4db4717fe63d887c9b34c3e440ef04afbff40f6f7a42d76c96eda6dbe9fc0f950434d70867779ef903ddc820e31ea8c623a520dad392027a7a58bbed7a84a22111368dd52b53c30ca982ccf7dfc23dcf60e5503db17e95591f280a8ce768408f7de4360242da75e3d7bed58f97c74b44e5e4accab4878e3999a06dabe24a3b5c82cab96da0040a4463bff797d3a6192b1f66e4907f7b7629cfb7f7653d0c7132fddf086ec031766f862f71bccedc9afe16c25dc725e3e82acd6306159efac5f5f58994873e54ed03db3d4dac95c4f405d8b2be2bdbddf57412697de6d17a75400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c4f47e8017937ca94b075ae7501c8822a208af71cfc2f7f9dfbb258213c293378b93dcbb377c6b09a9575a30f814a6a329f022eef407d64ce81591bd649d52d4fc23fa0c74b7f4a584331ede40ab5a944b70a764c84d7f7cccb373b543ccd717418e1ad730d80fe7ba82f5ba450027889d22fff999ecf1101c073c204a52aae8acc37d39d26c673aa0fb43a4a3a9473b12455336d11a00881dc7506d62072a4b74509f756c959eebc16843d0a21a8e714014a5294a9d49402e47965dc2d160835526486c8f34080323a924c5e6344f061fe5671ec23abc2f83595e7be1c9814b0c777d77b294ed0005110e5eeb9a21f7c735a3db934872bca0d1a8e1dd9a697fe3817bd555b509b641bb97a705fa220bdc579bce45b98897f8f539a5af731da0391c04308ade4d980a4ab53996228c34f510cf54cbc0ee0bd2242cec15d1e21839977ff689c487a972ecae159f9eca6feab06059823c4977bc4f6ad344a18326b3e7bc4ee105322d8003cd286a168e7756ce6d6b510cea6a9fb8d3b3138f84f796c49161cd71ab4b9edb39372f68a617607e1e46583468ac64a1212eac6e177e232823610f6da1cad361af6205485fff742bd4291544bfa2f1889d8463ae56c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0520b2eaac325475da96b7d93f39fee09df1c666f2607cca2dc95f9352d7c88da8eb87f2e8719ad3409f4d54c67af7ecafcacba23ae5f93d102a04e6b7d453b2a1ef5cbed569e2031d404e3044c48a94c020a32d25a73a0e606f8f3943dd59f76736b6d22368ad52085079e91df141bcd26d852a96c43e1e431698806d99c116088f996c950fd7b786b78cb0f8c63f5e93369687357b2911a681274f16ea03f94c4739dfd194ac88f9bd1ef5ddba4b33510a7181632f42dd31f7da29ecdc716d4043dc400aeff6b0df534e3d8942d4a71492d555c889d00c1fc50c11355fa504bd92123e158c8871f1bfc8b7a37397c5a442a493925aff3cec56487e91a48e528d218ed698f87fcf7a23ab8a2f760b656ceefd7b7a7fb73fe1be7c93d2b1b9dd54aa78648fec997a44bef2f3ea3103da5981b4176ea3fef7f0b2d6b0414257c9310564c76c7820847003b4ad9365d9e2d379247bee491aa168f23bdf03aabb0303fea4521ff89fed0d77e6df2c47bd9f7300e77e25a919b5dba8b37525e5d7a188933ce2dcdda8ab9f2fabad16b333e5956806c79e1e87d656c11c52319f2b7ffb69238a52ddc30dc8c3d08290c94f89d48b7a353e6ce1eb40fc1fc751b8dda00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008623d7594f722e5da421b1b78059b65ce22876d17e77a85e273ea74ae2ca39bd56792bb44f7eb2102cfaa58d49b80840ca6a55c6272475fa12810f977420d7571608bb811ef97bc9b43ad70d5c0e13ce269f503fdaa82d7bdbc3e5ddf84f3f57999964fa0871dd6f3f55c4459ceeb6a98a08676de6ed79999a79ebf1147c9ee4d4803cb887895c0bbeea25d1c1d6ca2307491deca6f569a27e4adade59374229b2f2f9252213b31edbb48eac7297dc95665216a7f148f6e9ce35baaa03b1c693f64b3c00a5b6070d148d3b23e6b5cc84edbc5f458ae9e4cda391fd929b97f4e1d97333b7e7059a07d4fc75ebeff0d74bdca6ed26066263ad142cddef768fbf6dc0c8082997c4ca3a893d2766987919439f20967f78529afda30cf111ab7411ac7199cf576ae714f1875c88be96aa3a627ce1e8ea478196158a42576162e38ca0f332f8db588769c6ec97a708ee3e3e29943531925f046125fb1adc939afcb2a1fbb45f2990d92d248b0ee1f2dd4cb171aeadfe4c5aba44824df6f2d626e5efe394905b49a78d87f70247096512ebbaff5d3bcc8e125e0b65b3aaa1abf1ec476ce173b8b48e6518916496b61cf174de23d14c4d38ff5c32490feb75a6523fd1bb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a61e0c259406c0777eb52877067ff630af4ff8058561b42cdc7a467ea4b6d88ed7c9052a189557773e82dcd291aa4e4c775cb165b2a63b8696808fb003f99782ff0bac0ea98fbbcc9f793ea6a4932dfa6ac96b3b614013c014d42d89fd36a8eceaa2e508cf5b78fd821ed31d9cb10dd913901441f24ffd4e360ea2a1a345882d5559124cdb670000cbbaa13213d599cc4048e7e4d1ceee1eb2aa6ed889383d7d2e9c9f438aa2ac31ed60e9ae0993ddde2d03460b5481349311a896bbca7616b29ef624b2449bf60a1b062abcc5d539a6ff4b8d26429c166767c4eb60c7e461f54b235ed2eca4d2f13d43c8dc6c7a5d892c4e3a7675921d25e4e330945fad99252cdd4e42aa070392dd0f9ebff3f17d69e1395fcaaf6ddb4b9f277d9d0207093995689b0c9908510b24541fa861020a8ff04acab3f4e628059bc53976f6258585ffdf43355bbce5cf81ca634bc47e9681176badf524f3886692686d1c357b25b0eb8e8267396318d8c86f4ea93aa92acb751d543dc7248b2bbc6c4bcb6be076adb17f562cf20db4750646a5d0c762e2d317b9dfe29a30b287e1f32dff09af7d2ab3892613c7849516dadd8708a572e8a491ba80eac98274f3732ef9e1a9bd86c200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002afa85ffdd40b9f0d2a9295395db780a3b302ab043a00d4a8db13d6c0f3e6f20dd0870020b73fbc6acf6ed40207f5a917b818fe612fc0b362dee3dbc3c02f190d44df3b237cc9c9fa4357a5524e8329134167859012d47b76fc42506d18d1e13a9da3fb9df156005f818a50e253a36fceb73abecb59bdeb889b55172ce3c9a1f6d85b070feb0574e4142646847f745d72f77e60b8dfe3053c3023e9103563afcfcb291d15c55bbb1e49163531e5e12df9e5d13207af7c84cd909f36062bf75eb4d84360ad187f1f5ed20cc86098a1e259e21c5f4b7142febfcb38d53ab00c284600459742e6fce6a57b95ab3e6392de9854ca9613ae251482dd66e5915a6291e461acf00216aba29691d294516789fb611ee2b8165110bc2082aeeb4b0a19e64504c0b9847710050cbd0e6e2d0c661a633d67fcf6d3ec8121c60b892e8770a86d1ede9df67b640b9c4720e87d2b278a117fc52a0de3395c67aef4342734507cb0e78634645286d1c912a22e10221d5d0e75659e0aced503e8dc89a5ecf1a22dc81aa20081edbc8d28cc652f03324fa65248d11ce9c8f23829118b49f5d902fb0aad058159c7789fee6807fa6f9196a4128c870ec6c1f93efae65ba5e8a70b25f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091fe87790903744f390fbbe686517a474600d05df86c365d3b099333a12a403c4d9dde15d1f468181a136fb73e86b972d61464185521039a809af0cd348fa0ecdf2b84773ad7cf498941ff7a395a205c790ea5939126d2dde388dacd9531d8f672af3adc79daef6553a8ba6752c0ab0e5f59bda4fd70ca7316fc1fbfa77418704a98c548944c15ca3a842d1368dfc06f8e3a693728c36c755648d3ed1a583fe766522f2d76b6e00db2752647341c9bb71d27830a7fd260530e74d30193a644dd77aa2e3ac041575b0355a59eaec848d0cb4da611d236cbfe664b472710ad088a940cd2499b57b1ea134d2acb974d00214c3c31b59f091a40c347fe36c91bf92996c19d551c051be4aee221c64286d75c0f0b64f9a5b84b884649a5cb0027604b3771a29506988bbafc1c0a4a5a99a852bf8bc3f440431d102b70ac81e997027de5b8f209e4686d0c1e91b6c2d9e9eb9361e9af42e96448d0f95a9b0bd23798184cd1fb4b9f7dc84a2f794785b6504264879f4b290edffd0d18e6294f1a705cdce1424b7ce943719d903dd233e3a8b5f8b8e7f733eb37f82da8bc2a243351544c20a2b45d794c2a0de0356349a34b825022c029d80f4406d30b7a77c9aecb3bd700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009fc502d15716e545b109161d4c75a16ceed54b134cdcc6acd5abb29c143aa402623d424db03863a7b928b47210f1fb95301f3af5fbb24cb9fd3e614ac7c8cbe5fbb5cf8dbfa3600d2e9e6af5e8a82380fb64b3d5cac6ed814d95283939cccae49bf8c792eb767784b240dfe4e5b480fd4b7ce02fc45a9b555fe003a3bffc79c17aa107a9a33e88f0a9bb5d2ddadd31e4ab449d7d5fab6fef5a43fa91d81c772ec68641f23233945dbdb10cb6d3a81703e54dd3abd67e3077623402b475fbb4b00949b11b79e7141ae6a753e596d468eeb6aa08d00cb6763ee843d7e6e5297e2c7ff8cf2a93fd9a3e7e8149a21e4e7b1ff1bed6028ef8b161dd8a8970b8e9c11d83c440138371f0c1d352ab198a08fa4d3f9730680970e5b5bb6be7b096c018fd200723b7aa1d6ac205dbd48a2c92070b986cc8cfb2dd6eaacb709052eee2e106f1c7316ab0c560d27dabf8282346fd5124629a2e3b885641aa930d06e280635643aaf57046451e6b049d35bc168775f15ff0cdc88c12807d2a72ffe3646b67d53c5b2eda91082bbbcf842f798b0b22e15c846ae31977be5a82b68d2e821e17c3128b49d7adbcf07c8d13b60c95dc7a628fc83b732526bc72dba749a8ecb100ba00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009aca418d392a20eedbc70d1dab44e2d0540f7f203b9a88b193a0b4b3b2bd3c86015e113e6ace940e38533b3df1cb9ba88138e0a5beeee6a1c021d5b7cf42e3273dae7973419aa8384a09935016c61da87d1977fc86ae24177267f55d2c136067cd0d70d32a14d45747fff2870d6f48f92bf00a546f3c6a30c40a145b8060a9a462241aa7460f09c6fe381f9e4953f544f6ad74e7cfe63688359bcc8245b9ce9d903f5ce299b3766ac4d66d97721802d24f9967d5f415b203bfee665d792e9744abe4e5b14b7492625b25de34809c52df26e00b4b1207edbce2fcc9d97371ce0c6d458fe486d6641048a77ff24a1a9ab21b3371571d3d94dd8ac83867a494db63cc4c76144475132d7234947a0d4418894c1563c341959316a971db6dd3c89fe4dac060ef7561b422c846a1730c12a87bd6f9f46409c0b92bae8cb6e2d8b9f16148078ffecee5e67760c50aa8ef2eab44dbee1b13016e31d4413586bcb8aa6dd6ccc5de7f3db02c93453137ebe6b57bd2b07798ed2e24de82afc320e60e0f273a2d2ad3ab8c943e4e376cbc94062bd7180b9039ac0f59b3c5eae189d10ff103f16796e33060ae7286860bf987c7e1d983517410f1a340c5614f809d2c77ab9246000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014edba24c9f4f86f7436bb4cfb9f39d8b75d4400e5fe1ca276b920fa7da97812c1bb03f83f69adf4953154bcbb664a0f72dbcd15948cdf60bc41396b5f8224debd0ae88247aaaa834b09f09411109863314e9e36f79abd8d6f7aba01ce3c47efda4d38e6d6f3c3720839393d56e064981cb62157f7fa24cd976a180fc18051edba02d9b6050d50a0ac26fcd743c23c11aefad799be55ec881ddf4a4651465815727f60953adb945b8e6b36acbfbe2df1560ea3c47a9f8df73fa558cfef82c0db85bcb417430fc5754a2843fadebfd6a1a90881dbb8584d597b973ef91bb7f64d1ad2dc088256792ec88565fade69baccbbaee2f301440a0ea70ab770d1f9f70567449e58f5fa2b21cfb20469a2c368742f0b108bbc3eb6875e158007d8d8c8d317f8c95078cd94d49ad2656cc0a13092e8355b89dd291d4ae399cd7bb8db2621967b64f60fbd32718945108791de4ac1edadf34c4407f0c2a4f86bb796ceef653775f2a933c553c455ee131f81fc3fa7c2b6c4445a0245bddde2dab0315041f838976caf4edd4a59a4942f356dbe63ec13cbe235c6d78f1d864e5c9565a5c2dad53940d13668911a5adff7ca10f649732aa1519939ac5488fdbc98e6ed681b8b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6c0e3bf8fecbc063bb5b82846e3c1d68ab8694b23dd7cab0fd6d91c89d24ad006e46a4e8d3b0cf8300f8e786120807676bfc4042e85797031387941d0ae941a7ed15d36d71b658e48c1efdff18ea7c44e3d79bd89dc287162873ad933e97be36512ae781066cd6757279a82902e1497384780d7cbdbaf1ba55f043b22c92b80b3306d6305d44a4d5c7367bc090b2160cae46889beac516727a81dcc835dac7cd5265cdfcbc1fdbe9adb37588739a438acdc6fa524ae3913e9554bb4303b75e6657a85959abda50eb5c15b2d96dce0fb806fa203fe28c25696f480c295cde6940df8fb878096161f949263ed7855beddf4d4ed592023e42291d79ed5407b471100a9539e52a6279db11e89124d177812c0adf3170ec29a615d7f9b83050fe0fd2b9d4324ddf5def620f4b1dd64327cbb54052c8983e225f27d4be670ff07035c29670b547ef25b21106b72f40fe8674723d6c87ce402f57bfbe3a8076e7fdb56085cee74e4734d09dd4c0dd9d5770c8255c38fd10d6910631288ebe72830fc99cd0d1d8023f52a426e24e10348f72765741b149e15ea24df1cd73574a5181e6118f6ea3e593f5820641b2b4d4fe606abab3bfba3239bf22d19417e8fe9d0bd6b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008deb617a5fedb5ba6c9d4c093d7185b33b6ef4e44f471c2c3ae0ed6bf099f3ba055a936fdec8a05735707f1e6bd180879ab59ab5b0a9dfa42ad80fccdc8735592d11c470fa016fbe6d59a1f228567da65d8872b9df7b9f9391c59584919146f985070043222bc11094815936f95cd7d73d6095c2b945f497efd603a1c5c7fc8ed970621500fde64921a987ec05ff02e7a6ac917841f795634c2cbb88c01fd477542b8d8b6bf86fc65b6a15900d69225a12975d2e6ce30f747e6d788ebaac00fdca4594b8d14b7054961024b2c65bfabb314d9f57cef051828d4271e02ae04e851543f24390451258cd13bb63f87d2b55f37c34d1234355382eae9b31ada2e1e04caf795ff0e444e8dc8147e2455fffd1435503ad93f3020f30a4ad9f0319a7ce58c73fca2ff8274b170293f4ce278bd72731deafa568a67b64afe9474aa99b085b64de80939572aadecc65108e1fc8cf01c898159e7987fc41c0961acdaa12f23d98faab0c105e38e5fa8a06966e4451872b8d3cabbf1e21ca557ff8f6d94917cf411c0afdc271f986e97feaa857c4ef97e7b7e2abf226176308a2240f5095e6ad41ce311833b1ec26cbda5548abced220173799c922062a809b9434d34bf58b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004c48c3e968840ba4df2e8d4e1221cdfa562152fe4d6fe56748847358b285b1aabc64a6d83dc27bfa17ed072d22d4e59f96112b545f5cd75cc906ca06c3c07160a46f7d21784f89a8c319b9a5c352b3f7ea9314bf5adf6b7d6f9767b57813aaaeee79a3878cd4721c1db8b23cad8d07c853738a97bb6814bcccdbf402ea9955d67db941c5e2e3d914794d1c8a89cf7238cfff2b104b3e2d93aa0b9c24394f2b3dcaab8c49f2b4653e7c2f7256dd3b69ff086daac4627ee229e1b31ee309e8d6565ad7853a8e7fdfcd0e080110773c12fe1a0a42d878a1a991eb64e1647ff77639660c9c2fd0fc97bde029fa247a19afa8ced41b8401b5c15cdf5e60452a48d56e9a10cd5f838edbdc9760672d2d8745f0e68459a43c6476b62574736aaa3b5f28e48ee183cb0e91882d763d5c11938b34f0110811b1f8442b174187da2d54ca5ecc3f9f6ea78be5c4048111502ea8bf7f2861e19564cb87c412cae51835128f71322016f64abcfce0abcfb7c5f2386d43f821a0655cadda0a4e281279d9d3531227459560cd8567392b7773c1c5039ffefa23fa4f23d7f6a18322d2398879016a9f34409086ff0bff43b36f938a01a15923d9e0b0535690e1a13fb3beca997af00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d2fea43b13174b367673142bcf7e592c6b2c75214ede058cde6db90b0b937d73d770dfa6733d010f30f70bb4bccdb3f5b1dc4ca136c365d6d24f0730742a384de2ae0f2eb0ed92d3015548eeff7a0651ab5341144c73345a8f7a13c4b28c672828dca585ad0b7bdc524b36e83b88822c6d29fd922bb57ef5a196b29ecb2cdc202a64febc26447a3ea0d62caa924fd105de741152e618fa7b18d3ce714bbdd496280683f2e03b766257ced5c0c9fcd26e71e51d9a94ec6de098a2847c06f3f2f75f82d86e528a08c73c6d9d3801c6116b6eb31c91315a5a16faf17a53b7c65539ff3a88b615a5661169b7f74ea11e6dd481be52b4d41b158af2e2675838c7ced32b2dea79f17d06fef8313b22829f195dd486e229fbae2fc5f96c1bd410a9f2f371af1d1e4aaa673db5b52b404d50151bf3b7980760498d52476891d4c151622c3fa46bb1a7d3239addaef746d825812dfcdc40ade962e28048d1f69eb156727aafbc98198e45ab6e1fa36f26fa42a6f2880ad0456e8356482035a198778f65bc11ba9a6562676ee4830d978e9292a87e6223d1c19e9bac60e1e975f4262ce4c5da769cea7c5403b2de1223cb3c22254bf2f0aae9ea20312d49a44d3d5851504000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083cf15ff78328b2f079ea1d18c8c5d9d5038168c365926e87508f75830a144fa3bcba9cf336d8e3e1a33810f9688685c391a725d6963cd6f7858a198a9c05c91420bbaf54c79f0fd8525fa7a75cd4979118d4121c4671ee216d7855ed5251c52b03b51b00bf6e4e7231666bc53ba2deddcd9f4190700f69675d292f0c1df5a79b317981d70e009fc0cebd3db2eb95a26ed2e84f9d8c77a2220080e951a347aa37f6292d60a73e50b4b38190a1180488c2e531858b0d62f40631778a41b67e99f5edc9b613433c94a93aa3546d3c3a7e1840a5b7b0fac95f9245b3c18dafc418d7ab369ba364f9f30559f9da7655c16457fcc75d8497b4576cf90009ab7fb406da9072b1f1583ec5c597d5dcb9938eb55489f6beccdd4e4ae3aa8bbd2a50e2586aa85c903f54ebc8f9896081c97d40815c5430418524d122abe7709d0febcf6ab79b8edf558250abbe9a2ce663a2cba2c6eea6ce2e2563d3727be9744273ec28b17f61fce1c316a7c046d2b29a27de8ecbc8c49e9e9c281f530f5332564a2d26e277dc1c9749516cb1f16d5968974b2b09b8fc1f79fab8f359ed8e0bc44f62edf4f187d88d9d04d6a7969cbb9f8207164080db651ae231ae4919f4d50712824e4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097fe38671dd5a2e7d81456c9fa029b06e0f967a7695e038b389f0f6a8b8ad5c1256a6ba2c1bc474ae9061eb0afd249daa82c7401aa0a5f1064b4269d9ce06a58d63af1ed57c4b246fe6dffe34a2723e2e98a3539ce21be1262b3e704f7c2f866b3a9df95cc60ef56c11e3b8ef4741116084f1726c38e11553d1eb82a41b436b7efc1c9c3c48b516f9503a4c215e5f013b8ba7680ef11cfdac0b1ca49c598a2354b9455202d3ffa0245c55c77021e66e4ddf70419aa89a6a70cf17e2dc350d6c7bfd49944923ea4e2e151dc18ba414c884a2e0b9dd297bc429e0138e1bb7aa1f6bb95643157fe9b6143dfe23acd6a3adacbc3123faee501a26fd15743818cafe727615a20d5b72fddb8ccfd6a0777bf2fc8e7fb98603cd05336fe37018a3dff9acd2a035d8b22acbf7c3099222ba1ce868f4aadbd9c285a5cb569a32df0b1afc8ce24a02ced70e5c4404c8e7d0b338b7c385854bfafe7916cbdf0533dc5e7e4b13f276edc2181a32e9f1a3353a50f4eebd66266556eea0c6c4f3ac2dcec21479fc56371e2e766c22e2835dfc5c75c900ef67f915088b5d118f683f81a58d03ca1a7804f4ed82c41e2f2b221d10b92744882b96f2631896f30cd64c92c7bae2e430000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000987f1756e804d1fcc637580e637cc4a0f7c6a93da088731328b89abe33e9e35a3fdc66be4fb4bf03ee0d497a57f715163c247dce5a361088845d60f5f1663bd6c8bd34fa61f49318fe66494352c5257b341cbad978a7637c7ec0596a6f30e75e7bb07c3a4e07c0e2de04a76951b9ac6c8d8166610baeb4c62c3731e587a61d3188d5451415b089374122e1230a1b301f8e57a1659c96aec55e1a273d7401c422e27f77cef61d104b27585e024f6b88b7c57a20d35b9b3c89ca491791aa383c07bd8af04138b64f1f1ad04dd532515276ffc4d497e6e977b40c39aa28861102980101787ae731f926cada64535e8693a923e3dc1ac74c603ed086c915fe28281f2d884636c240d588b46a89ee954dd399731a7d0ad949d0bda3268b7d965e9c5a043d7b8b198b42f0f06d98c76e231645122f97ffdf91676c1b61ce659489cf911f45a57e737b4800620c3e165e40d1d829c3e706a12b3e7191f8addf2514fa4175e54dccb13e77cd1ade1075db162dbdf9e5026794a9c317aa06d4bed5d326884e0162d996a8d3669c443b0b3366635647e60629123b1c52366b1b506dd46759b3d42b7685a1b27ac7e1d23bc39a30cc5fcd86acd93cf0e409dbdbdac2dc916b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000905ab6f3d60921a6a1a02c6b74cb35e2666e3f287b12f13430135e00e6d6cfd2b4d07c820b10eed7a9099ff1c7f13255a91bdccb1476f4092e60e6c54387f6b9c65c2e90b3fd2f9dd3744696a55621623a80450fbdbfc43c6acc0a9994b2cade48de8a6ca5fcbf1a7b503d1003727bb90124d28d95a0e3a4eb0da3b3beec661b297c20e6b1b94a0e5bae24fa5053ac0d516a3c08454b41b4f366a6f9d5055de110b9c1057c4d58218696b04739b90d8bd6de86a8ec81c36a9db53b66a7c4bcc1df86809d654bd5f1e42129c445be08c9408147d599119df5657e0334f39e9b2d23b2fe78a67241a41c46091052fa2b975bd19a11a87f49272a0bc15901c941ea6372171b78fdad308cf31662db4fa3e08a343bc21fa49d672d8a52cbd58206f4e462cc02e4b2b317310645f1e01ad1d035697c30cd5c0aa01c0975d8e3c517377cd0ba83d2cec0762b9014b740e6589ea0f08b910a233f4c6348e9475f01e516e3794f2cb3039444349910d8c5e00835ebc0cb8209b974a3c8ba68dd8becda5184d12a0806dc6b83970178b7bbcc86026b24f7eea32e3ae71d677de954039509c4ae22054c730d9912c39ac39028fc4737c7940d1932b8d4eb5a5953c5c040800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e348cd8194cf13d6cc164f7923ae547aa14f62ad606172777072e8501b7ba2186ac7d4fb07070fdd7674f6b4717f20b6ad106b49e03a7a11c78e976daf96b5bc10031c25ec19655d9db129b7ac454883fcc9e163bb36a2948bbebca3973758002022f4477a1c864909d7450b4d2fda3eca295b479765eaefe216ffffb18c45d0493719f078451c0ebd7c5fc56301b86ad046eddc45e2013aa3663f9c84f208570ffb7d52c016e126aec11a53f0eb5c6647cf0b83efc1f5cd8f0c9b8a4b05f74c255fc0f2b22e5159e19140e1eb6bcb47ef3b1a19da0217832b04e78aeb80cb7c525929b2e42687b417e5adda083496dfa4c180af382569df5a4066ab3f4b90a9c7d01d450a80c91ec60dc26b0dded0d83af09777c6e796724a78c8d5da2238b613cb68e1fdfcf32492896c1e214235602f7a45ea84ec8277c527dfb12b7c602b0373e01e920b0ea188d95f44b920ef66b6777910b54db5dcebbbd2481869ab6b9199533419f4887cb35d85c3c9734749b9fee52570a7f92d3d6ef1f3e2048e34057d49c58a95917c612fb968f35ef8e6aa1cd10e4ac4c2d09cbce1fb7bdb47275795e0dac0b866967869835ebdd740df4a7427054ed9990c038d2b520aeb3da0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000175e7c56bb69c84eb17f6c49355083ec4f71ac3baa7e1cbd68bc9f2d4fa153d9a24d096c8e7cf6f39eea3b8564f74c4d3ec97964d600ee79601552a730f202a2e2afca0f47573e88302893886d18d9a1314188fb744590a0e305d276df88fa9c1fd751fc7d36317088392ac150efcf034ee4146ef83855981b4b47b8c8ad4f69787d117dbd0a9ff87fc7b60a2b89c804ac59f7b689e98f56d8f46299272fd352c19eec11beb4dfd9988e9dfdb534665af4dd6a732e269916895c78ac28bde3209f95fee75104b7c8c6ce18bde79355dc83e94da8b9075b81a6b59b55ad9165321d9c4b760a79363248c59be52d4cac9b3bea3543a4d7ea1a62cc895ed8e4b2d09acce5359a998fe60aaa26917e41dfee4bffb611413a49ca3c85729d2c1fa8e1e40243c42a3411e5bbe795ebc8398c578ad645f3af00fc514c8495b1932bc758e7dfff41d2a1d5103d00b27ea4569e7fda41c08ccda431570fedf7017b672772075fdebbdf964a983a9b6ca018a47abb2487475daa1940443c2d25cce377de2d59df3fc1065fe33a826f1a2d8f7431266b5ae520d4218df74110c7538196c573ed3beaeeb62169c0c2b6ef731c065d9b3bb910bb26b99cd16e5d3fc0d92ccb7f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000386109c7ae74f8cdeab3203900f9086bec73f492d28af1a8e26cd802e51610ded099690536240d3499973c98f0f51abfccb0bbbba093c741afb1925af5c4cb13acb578a86469a5e5906a4876a6f2ed6e8094dc2d5f41eb1d5a2fcacafb323151f950f93822899e1efbb8f773910d2640cb05b1dd18f74f6609c91fc8a075ae76ad455091232c238afd340e5923f0f92484c7357a43c1aa38aecee1b4cd1ab14aeb72a4a823fd9ddbae5edec0d0f08b6e0c20d2664ad647c1c5cae4fffd2416b8c14b457aa19857cb5879ebc4e95dffc0597796c6e8ec02787b705edc10734fe863e24d458dc09472a220af94efa49f5406d1d6195918e16349c4d62f5d2d138850fb7aa6d022a67566cb5267359bc4f21a4fc2f152c9d0bb91da6700547339d693dbd01a596556f906f4f6dd22a6c90aa19754eb16ade3e0a22efc0b3a77ce74949ea56f0403ee8d0369f9f595e7ef19a0f6a77c4d3c66a9da2413a06778258f1ab49faf9ab31bb97d0af6a9b98847e37ee17cbf43dc47164f4e8dfb3e8619b201415c370538fa3898d5a2e985c4260e72e5269550fecfb2d7f5cb2ae8fd3c0e6c8e1fe680cc45699e4883987f66a429ee644620b20f69554698acdae2c416600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008486a607e39c039fefbf72997b6f2093a0e7ebfbd64f71985ce73182a1269c7410233e2679200f5c73ed694957e5ef2355356e3695b39846ba5dcc275ff96aa8a242e9c1d98ed214842524a0ae9a67cb56e260743da063b6518f6f695c7994ae60d55a1a207a2b5fa5fc9d17127914aaca8e848674a4b2f2bb273c9380976f84db0a75d023be7d5e8fb62fbe7550a5fc9f1bbe54d25da4c5b1e5676a3b7f2ef73816e507185265b7ed65b8cca4528726669831d76ed91473579a58591b30e078dc0693a5ccb288b7605588a1fdcd76e540002504a8db0559e2389d012d525ede3a4b3010f19390c31ad25a5ef393d1aae249981bd0649ebbe32a6b0c47db07bb27770e9580cb97b30967eb3d157834019b74b9eb378e43249365885cc1a38ae277af1aa1eba8ede6de9154effe77a93437dc6a5f755b33270c3f4fe18c142f7b65758120deff8749b22027f9ee4bc0dd8106b7ca27253c8665aef35bcbca87de5e0027c4af8f75475bdf0dc446198a0c2033bbabbbc8d97c1940c17f2b7b320e0628bc72107db9b988f139896fb81e6c493ff64e09ec1aea11835d615449b9a4a7ecb0efcc06709c5046bde5706cbf4bd629d8e89756d63b3a3ac147a26875f20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000211e135f997f01684d35b7f2e7a6cc4c1485fb19ca78811afd384aac2aeb12ed4c97c991dea3835f4a0c59764d02e2d60bf4005f51a30e9303ddf893c3f8d108c376175391b88cd02e7dc19ba7c10e137054df09fa08a55818ef3ecbd2df463f3d64dd333ccd321167921ca33866d09cdfd640e8409f9d688da127438acc31d46b6aab2121817bc738ff6f8dc5d4ed1a3ea07aca176b50c176a52dd0c180e39e6ca0d2bf2d130dfa214036fa568aeb5b89168de9da4d6e19aef73e1fe8f764feb2b605c162d2c17146fc48fd752e7fabd1979023511d22183cef8655ea552c78592a65d2d2344e2b1776a46a55f54d3e293653575103293d09c54ce1e93ad77d24dd964423e3a8c670df64e83505035bdb294a62e5a283c74a2a05e37888e753bddf01d85fa0db001f0ca56c0cea1b5db6ae0ebc915bd28d4ffb74b68d048e804d4d20cfb98528693a496daf052560987c2cc1af3ca7e535d5793a30352f676e373979e1cb98866bb401bf38ad97f5635f171b6bdeaddbbbf263173bb61ae0a696c80472c7d21e3875fac8383a92031957391a5db262d05df2e32c0fb0d8f0087677f0dddcf78da1ccfbc2c4da98ea522779f717193cfef01708de185ff86b61000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028429c118c4b32d9c91eb1438b3524a12771d85e1c2ae9e366e9402117f1184a1e8313028701ba11417ab6ec3fbcebbed1e98ebabd86156a1ba7610bc4d9e3ebf0762db759eeabe3ac49e3a91ba8e204700d518c98c0d22ab4580eb540e410a942750d4490610851d554d4e8eefc1a0bbc2f6af069951576588b30b25105b3a366612f5f02af0b4a6d8f7fec78505449ef820bd8a6f36f9b6bf6b9b758e0f1ee95ac038b2dd4bc10ee72c4dad4a276e0fe5452d4b406b2a013e98d5c168acb41f1a79fe7c5de81db4245407da734bb4349586488edec87ea204a010267a59857af25cd64160c0c67e6a7677c0f8244bc5d04301b1ccfc0311fc50fe88bec667e63145174918739edaee293b16cccedaa078bfb2ad2275db1bd396ba6146418f23cdb2e312ef73e848e70e033d7310465170475c532de83c35b53be2133772f350fcbf114f8ea08f014b83fe8bbf3b780cfcff907856820a877f4a1071d2c5cf4f20c22342ad8d00416e08ba564c9f7743bd4aa5a2ec7e3f7400838a7b8a82cf21f836cde436b197e9fd1bb274ded57a3415adbcc686730ad1262762095a08bcabfc0926b1b98c3e64034756ec354140a1720215b505332dc5990395400a7227e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093180946b62b3c129a52b3ac0465b0d82b1060d77d959032e1b770af1ac622d190960a943b44b5270bd1696c52e5b82fb4e85cf9ee886fd2dcaae79cb042a2918874395de094bb13ef9f33ef401ba6d6a6500e3482406758d52bf3af66f19e6abaf7358c7e8f1d889b93f4baee42292c415247754e61f2bdc96473633cd3cfd480fa33b17120eb3dcc7e106a4a8f0e0427d2f9e9b9b5a966964f4176814bff84a458cd7f6712b19c93aaebe30663f429601d7d283c687333ddce425238cc5cc62d1f245ec87748823d2a650850e3388f09e9916a4907073ad653b54b8ce300c01fa2eb66f75bcf7b464bca0403542ad8e96d66667697d4de3ee8ff2a63eae357c8dd2d0a7bccd774a25e2407667a71057d4059aa3c49f8ec7a265136b8c0c92353666d117614242a70004d2abba1d1f4268bed94b15b3eea01a25c9792cca5d78a46d72d3cfe1ee53e5f04c0c98e605469709c75a3e0656ddd3b6bdd711bab6f07a9a74c89af6b6a5527f61f80e51168754eadf2d9b5af6655be187db1778c5515a5b7e4c80d2c1c4c0812b66f0d5417f44a262723cebcc4dee43d0a9063c4a05c8ae31688bcbc20e73cef1e7b6337efd4ee80832f5e6c09d99569c5864ce68300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001730ce24c198736e36cf8b2ef67ec3fcfdbd39077d5ce4ebb587d790ddb8fd1132f533c1941d22a66fc0e0cc01caa9cbb04baca0c33c891a0aa96a91db2991fd5ef71b9558d74c7391c449dbd8e119727a5eaae72579c8b878bb0feb170fc6e0854a8dda183497ecd267d10234324080855b8a69a306f6fdbbc218073b78066b910c9a642e9150e7fd10961aadb237284f461fbc65be13716d9e4b96099ab61f51980edeff605753d7a19bac243de991e9c749f4a466f17caf8771aaf7d8caf68b1e57d2585e470b7d0e4a92b570c53d5e71bf15949aaa150eb6e52494cb3bf36076f5816fe9219e00d47a84e1135b8a1b3561eb7ddce8e6da13c0ce006424fcbe1b66aca1fb967a067e96d4ac5f24465795b780eefc6d7380c0a6cd690b8085a4a86e73d8fd7e328e6034dc889cbdd9d8fbc73a2d4c035fe70ca317b44f13ece3a34790557c9480448e80eb3a25a7903a09f99769844c6b43b1283b462f83c6ef742d1a13926a3203ae593b8a99b39fd9d008b3a1378ad3996d805cdac7baa4d0c0bcf648b387b1879b2df0598d16c1909e9713200d3c44b86742c97146b61a76b8cc3de50d70c20c6270f8cd7807e7a7a1f0ac079bdc47156a74e81bb6581d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a858493ba258d063c5c1062542c3fa1166df839aa14be45079f87168c7b732cc195b111307e32d7132adabd926e52f1ddbe625e89b817072b6e63c4cdfe9a8fd01d02b84bd3a9c31da4c97112de71347ae9c46624172536942bfbdc6335e5ad23e35a43507197d1a2165835baa2aa77232bed2e5161b60a401e1d4af0cd42d75958db31757080ef065b6cfc324a7deaad97e6ad60e8f03b148a6babaab6c133eee54871cfe012d54298c299b9f5ea74aecbb3fe354d848c7542d1639d2cdd1ccc5dbd1d606079cee4ed8fbd475fb7ea632be8bcc0b144fe6cbe8fbe9c40b75ca0b50c84325cf6727b666baa195c45ce08098cec021492a62f630302a6bc68ce77bf5e84997849c7d804d6a9318bd2dbbeb60ef92406c89084b76cdaa8d3fa59d4517a36880f768b79e1ff486455b62f6590919acae89a869e4bdb069ca5740e135d651761088a00574165c844ac1ad552dc98afaea3d870214257510f669016fad3f6fdb89c4dfb37ae5b089b9693859f76b8a263b9e5333fe9fe8c4b83cde4df659a3a5e6ef837c5efe2fb62a70a9d44ad73fe26a3753fb20dfc62f3900dd6e226775dc716e28cc9bd84015ef6a2d7b3b79e1f1cfb2c8b18cc38c9304082f000000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48402d485fcfa4e3e7526d2da920486ca211c320d1fbf04ce59eecefc5142977e16c0aaf575e459ca20783ab06cdafff98fd052fdacdc6367f0c71631de0351c962825c9664808786e6c6a9175fe7450d446be03b3c2c347f547698569110f1d453a27fb822b988b93bcebfcec0778e21311a6285013e6eac43112927f0065328dbc23771413dab024481ed38ccb35e911cddd955c45c05bf05432cdebd25e881e8c0734755724ace2828f26c1fd16f03d98e2fea1dbe00ce98217c0596a94b708e30fe108782cf9f05ac1b3f95bbe0e16714a3c52888c9c8471cf7addce1f2ccbb22a0e8a45da39d71df6b47f9c29e87d11441f5f84530a89651a844cc9376b9339125a8b81490894a4afe4b7cf505d6dc7d64138a8fb3d7533ef8941502e654a3f0394fff35005b38ab4ac7a5b6468be46f97d0c1329c5b1f0981c68efdd41fbf11f9c9a70f24f2fd87b99a1d2674fae04645e1bab6aa26624f89b45f62c24b100239008b0c83e38259ce04226a8e745610548f9b18d85a0445d63ea4369c4187c2e752b2df6c2db75c573efa469a14db30d30a734f727f5d770cc07290d50e84618b10c324cb0ddfd15c032a526298e38fe11623aacfead926fff5946889c1230005d879a5c8491a409dd46fb09f09bd1ef52493417c6a4b253880eb9af26e5832f4a625d1b934430b5b530abf5077cfc4e87714ffec1652b1513ffcb2234bafe241209fb43667cc2c9a7e4e5d5d83b829548c94bac4caf2bb6d7ecdecb797c570d92021dee07afbb3f01c38777e65425df6ce04475ae64f5549b6e97221ac4db1dc60c00eb5629d7f09dca5f43f9adc4ac6d7ee6c7f7a6c16a3a8015c119222803d15da89540eec80d0ffa6f58721a8fa9eb7681be4b3e8b93384060f1a56ca114ed0dbf9bdb129f6e392b79aaeb08cd064b3d7674b1842bf1d58f114c4897a12b3b8f3c98b219100f489e30dbda5612256941f824f285d87b97a09f9bab79a3109cbe208233bbc50987128112978f64b44826ce85e6a460408493f949417371164edf0f331569b818bed8431c375eb6779e807400ad6845abf309f08beb1cf12bd35852f6b1453fcacbc53d35456ed1b23bb66485be1ccfa83b5264bebabf81098788a7f8c6ea9c77df7d957a40f4f0eb5c84549cdaeb6939c7fab439e1dee6011497051c262bc6aa531d26d50e2c61767cf1320cd92cb39affa27df0908dbf2b0fa1b550e2af8d00ffd3eafcefbc0e8dcc97022c5185c0907cdad5a3e0aa093005ebe94bb603b18770567652805b1bf6eafb650ed41543befbeb4a21dd884206d13f1afaa521d48945301bafe29aab44ad88d88be831e3cc72fa55cbd58d2c2fce7e493c49082c79d3a1affab3a82ed5721a3a66ae6927e05edd604da089bf2fd9c0c883e45a14b82ef1a3a07a46c70e9412c05446f51aeb19440f448e7a9f1006046f9bec5e91a9d1ba64aec692f243b943f256e25e6ff95b9884f4c381f723d845737b4039b9bf74a0d6d2b19f50a88172dae23c84384c734782cc37b9ba0d3aad158ca3e4c1dc78035a51fec0e02d47022947e8ec4d183f4546ce7b5c83048fa10954557dbd8bf5e8d549554555de46b78ea07cec85ab24c4936029dece0e2919c49333d7e7164d5912b711fa67f0de6a93b52c0ddfb6143e3eb32d69ab048962e66a3b87ee907293e8d28133f40b70ff6592d72576c42feda67b1075932628ec6dba74e90428bd91ff3482435d8365c54c41af1df736e587c0706d53752778491eb98f182d84865d045a19db4c89dfe5a73ebab58012db15a32b6ae92b1200dd5626075c3782f50ecaf5b19cdc3e86a512bc899fd97a9947ca6d6d02280ae6ce629e1693c9c2a502cd29648085b727ca71f5124a4e7579589583da445a09a2367a01c49811e5928824495ff9c31de24fcdc06faba121a272a12a2d26222877e39b6b7be36c4c10c690b094d3770bc0c46126c1ff25ef507fb76aaaa42c11a88bee4308500a0e04faa13ea3cbb2ace8a3ceff6dab06a7230fe007fe7dfa0a6958705afe8844184305e83106f739087d7ccaa7bf67881d9a73d76215841f0621eb8fd87312ec35405febc1ab472f69471f22189b98321ebea45a04c5aaf20f219e366a1ad97f43f7f5612a88bb62b1ebcacf49c67fe09c94d70f6453f7a4271197256d496d9fc7e8ee812585892f8311b7d08b713e577b292793a67d13480a71d0a467249acfa99481a392e592b1a4467aa1db78a196a519e98322ce5cf229c96b088bb83bd00902b4bb5238d0475a477b85b2a0d40c96dfd85e8c1dc69e159a259ebc46e27b4f40abc59d55b11b78b3bb82021830884100c2fad3986c5114e37945f2423cd1c6d408fa2e0b39976cadaeb1890b928e37281bb7263b53d210a2212e8320140c6a75da8e89b3bd1494f47ad2a3302596b1d01919b5649d2827a8ae852d6a63313269f8105658cb47a9fa78c675956363e70d4b0d885a7e4604df37eabc5e9bd01bf05e2ec5b2d43707e41f25116bffe1e7fbaa69484ef7a21bbda8a98564f323df610ddbb6c798bfd7bcf6ce1938653ce1e738de247ba5940daaac044480d2fbdddee1ee74703e00bbbb6e951b7f1eece0c865b3a6927f38000a52724c49d8dfe0b49df56c5bea11a6424107d28c651350a5e79202c9611d0a11618a62062703e294fa23217a56d78df2bae60a1bfce40c65e6a6a5438ded247a9f6177c4806b96bc130827d6f04dc0b638a04885e012d95384538f67ca4515e017094cf416dde75b7fe24b2e60365fe9c32d2a6dd11fef2557059b864a7c2a00be12317274c8f3ac8a1847165c9bbd3e9c010f2d85584fdbd830265f061826a777869b9ebc29c6bdbcf7cd50ad1306049348a105b448e51e1f86641f56f74004d3586d8f4c1c03488f3e967d0ddd3fb397673622eed14bff8e31bc41c2e2bc0ed8dde8754956a7ecfa24806e6c32c9625397490f79d2d3c7a7343e19de455b131c1caa7a1ece3b2251afc79dcc2558d8b3868eae8a70f47b490d16185746902151fdaba6302c6483800d1ba4c584c6d761b667208e695ca2d841597ee525a411b8cb8c12cf6e49fbede51c7d9a21bc21a56e1619109a106c8ff4e99197ec321d3f271fc7b21441c62e0150046b3273965af0248d6676f195ccf6aa006a5aa9103d38766e512a181eaef12cdf37abcfd429c8d2c73edb41b6afb9ae8edbebfd0724784e23967a54ed797a273362d89e271a1e3b7af5b429f85221fd13b722c41c417f711d5b59675e34054456d7152da01ac96196fc7c672e32bba0a05033e51dbc80a032a1051fd496bc781e25d9c109318300b5216fcf14c4e91d258e31ca2e7e9e28bd37c34075bce102c35792acb44490748c83e5ea91ca3e9ec33249da1c90cc88a0ab771c732556650cb2ccb2252cf2603acb4e82237ebd837d20763d2c13f1032e7ae0e8d7956f0a6791667481cf13601a8064e664e414505facdd8412aa59bac9ae263e015c57a50de4f04ed17a16a01f45489642e10037ef9191291b1eac6ec8a08c9118f31e0f90e3562e083517b1880382e9f8bdc4430179ff6d0ca06db58da964bfa22396b4924b657d25adaf1d976937822771462b1c125340038fdc3d2b1e9d23fcc00fac03c8f9ce19aa5c23991fd8158a327b69125ac6a51757e28765c0504f28b35edd9729497fee6bf8b103b1a5fc6e98fa449bfc3232092fadd4a52cd5afa463f84906458d8793b8d9218ef878e26293b3ece7a2c26e051e4eeafe752674683aaaa48d6733899fc91764aea92b6c114d0fb8a0ad310613f47ff2fd4c512af8698b0d58f13f2785d6eb8a9de28442d66540e2943a8ccf2478baa2183848cc88762a6c1662449df43c5fee444a6a77c54b8ef897fe8f25143341e0f72ca24b2000a5febcb9a84216b30322421706b21b4c0ad354d7e70b216769bb61b00cfde0be9d3b4f2fa8c615514baa8f3ad26c8d1f8494bacd212d0066cdde3cb1dc557d6abfd07f5cd5d44865588608519072fa40822e1557e6e908102aefe51500412e45afd4d3b66ec36c70d9040684c4e68585dde14925a2a32771810f942a4cc5ccc2e330f2e8ecfe1ec796ea5794e60a301aaff81924d3091b0a68c86f43a457c501502deadf799334cdf0347e26eb5d51e97f8a6d2d8b8d234dd5e2242c3215ff68c0321103b6ab98dd2e40c97c4f75e6d7c9f82f18ae222fcd64fe7f025f239ab8f57e6a1986b1580fb4b0f6f5e52083eaac7c4959f8c314d89b84d5a283aaed576e8bc2baaa5d7c01b2ef025b15794242205b08ab1363282bf88c95dd231325b92b0457af73126cb0cb448677eda0c52830a75ae75717185d1d22853020b22711c805d269de6cdebfc6d9b85aba06d1100de61846b6b9150968bef5e4a7e5ced4d7b5f9e70ed5689f98a6f2845b1987197aeb9bcbfda91870925f8ace3a8b42ce48fd47392cf33f29eab5a9baad522d24503792fff25215269a4a3e6b793f9cd61109ae1660ad66f48dce8ae642332683a5e86435cf6f1c00a3a94b3bbece9a9645e3bec4c0e1084a361f7896459677700d33fb5c367d1fe56fd3f36d0ab5425689f60c506edee9fefbb3f72e9321c68cf1fc32309198033ab2d25fee79efbbc53d2c3ae1baaf44b819508f4424b32b6ec42cf33ae6ba1b3578bfb28615935a943dd3b617214dbec57e7d32b2ebe079b2f9ff5074619d1f5af1c59f04cbce305d8f87a6a990272867b15166b01f185d43a2f6e3b872e325069d5ef94c32c356658a63030a0bbf5d20953c3de71602bd0fa7850a3753c6253d10d09c1f7b40b51a4fc9a21901bdf2eb0e11bec90fd708efeb7d5bd55ece012a051fea9abaf0080548603e921af87f7a11d50cde785a0cbbae16b258d3310b360e5d6ed139fca38a351a17392426c1b1c2c739a6e2518994183b7529b1b423d663ff18a341c9b2ceb2093edb6c74a923b1477d25e139c2ed1a86fcbf8a5b2cc016b82e3868dc27c285bb4ca63fdd76a056f181dce2643e84a29ea9eed4fc2647f73d8905010246264f9d2efc633d62e50f4e7738d337ac23ca6018b217ff03d2ea7f9e04c5be31431ef70b027a6488f5ec1d1507c89ae53eb2703f5e864913b346fa5489a249e51c0399225481c1d5dad50d89d3bbda3030f88b3e7998a828a873d39d0050116e1fbbaa64dec54d373e9406dba6c893e771e65a432b33ea063aff080ee56bce21b127d03b7391e6e6d9f2c689fd9978a1af26c34029a5842d9d2d67e4fae42fae5f4b4a082a6063cb6c1240f7e6c5e227d9cb1902103c5525b4c4adbdb0fac084c4eb0c53aeef101c0813a334e903a7da96e467a42f90891610a26b50a5866548acb6884b4e3c4b45fd0bd8c7da92a061de89c56ee23cc511b52903b25217ccad756f1a2acd1867c038e5c5b94450d381c657dbd5a7f35e1afa87f4f2ab2144c3c08b42243ad118f2be6595e811541e20f41ac9de14c58402b378833d962a299837e879b9164c501744178db2dac0b3dc961a0246029f2825b7d88876960db1e0adc3d757e8fa67cfd7a1e5b52320d08d055e60200396d019eab31fa551e96fddbeca3764e70c44f927c6d8b0b5fd275557f60f7f137a1e28069c63c95f6ed6f64801d712963bf9f6ba9a343d2065673bcef5ed3c0852cb2b24187fdc1199935eba88cafcbd535b2553e57c2841a681590f8e2e3b8b18d62bd1ffc8d4cac5b9334b799a055da3bf3752ebc4807fa93d5b755245cecb7c6e0430b5dbe8a1b08116234a82a771a78749bbfcc88f47adf1a2c32696c7e56698003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000027118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000270d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000270a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000270b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000002729a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000027141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000002725e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000002712978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000272daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000027189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000271159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000002705ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000002705c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000002714d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000002703db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000272ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000271213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000271ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000002714fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000272b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000027305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000027280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000027223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000002717a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000002708858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000272618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000270f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000270e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000027172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000270b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000002705bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000027137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000272e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000272297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000272608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000002718373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000270422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000027204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000270afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000271998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000002728d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000271da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000002721d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000270ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000270e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000027107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000272f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000002709726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000002724f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000002703c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000271fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000027205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000002725110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000027283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000002721cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000027094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000270c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000271f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000272421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000271fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000271bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000027304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000abcbe2036b3e28272685f140f9c0fc95251072377c2c11443d303ee419d8188fb833c18a5d54e7fd24c85bdabfbbcf71d61ff89c06e2a0616e9911e78de8f65a5f08e3bbd1386a1e75b2467239419785e9451bcf121dd2b3020e46c077bc1d9bbfd5f145a64ef7907c96bfc26f95dce8e04f904ed7a82c9036dedd5504aa5228ead4b1b705f373a3fab32a6b985f053ca89d2c762586ab7b847fdb293690fdf6fceb2f7fafc2b0f86e419ea93ebbc7d678f3c451615abf69c1fd8b3957dcb38d550072831be47f1345a216a835c84464fabc605ce0791a6c1e81fa6b20a2e64096147f33f55b51ba320c43056fe67783900acb7c6d216d014412ba25cde50c738e8a747e77f3619fd9bfcc35cf9669827adbb850a64f012a076adc403d315e13a9d65361e0f0ad9b2ab3573e9faac298c5ac3eaf9be9bcb1a676b9c31766efa97d116c59b2da21203146964f189a85956182690e29f24ca889bbbb1c2fb9c36a81da1aa7a3522e597c34f5e8b171db79436f13071eda28af965d3c608726f514c365a4025f6eeda8abe4491e6157ff46192acdc3b1b13f66689393df33dde0e9f729eca06876bcf578128a4585f30af959dce090ff1a2efb59ca15b46ec644f100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a8ba209803ebaf8f87dd0fae2cb9b40ecb566d1dc46e63b1c164ed3de6c99dc2577440c341f489d1b6981672fa1c79f6cdf7ff5994c92852e32d348d1779fbc84f74fafbe63f9157849e90688039787f81f6373225893d296fbeb8aff57e99f8aa89dc40da8f13402a436b0c6833f5762fa1063d73d2285bd4a81c8e8596cf1f1a95f4189236cf029db10d1e8ab85e40f24f0798388f91fa81b8bd1d7b01d7ae6f36691255f5c946d38c0f798050d6530faf0f4032a58ff1cd5b7a2bd643498f1e37042f057c1ea31d8deff4b93f09124068306c8a2d97de0e7fce8ca445888920836e42894b67477f014f1bec80bdffb15d0b403f69048725e41fd66dd260f44465d433065a59a279a36e8bbf0b73f8ecb7793ffbe7ab327bfaa18e37f3b31d17b859257717b3a374ef35e0b2bb2d0a713984cbd9aa897a357d67a58d84fe5f0294d9e502f23102c78dc39705b6ed9145b50e8b381f99c03d559a83fdcaa862aa5a556a5afed35b6b5d8217062825c359d24dc113535c002f05141c12271a08d59f1d869e2896ede853d56af6abe3cb9f5f177c6e09bbb8cc3293b68d03997c9ade1fb570c946153c26c53ddbf5eb656263253ba83b43a29cef3f8e4c196f60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7304bfd872f0c9d924ec2fbe240e9385298a533beca4c045545a98c60f349abb7f417420fc60caa677ad49d42f540b0f944b45bdd4b11f8de7f6e175c4f4e1b48fdcaecfbd068d54b981c8ca6d0b7d392f84c4e6acea2a56e70cbc719469c78cfc82e40db8bfee44becfa9c46cce971dcb0e8c02911fa9d205b6b858e4f3438a83b8cc70b49a1106ff12db5ced2492b1fd2add3b85b1e3cebacfa129682f80ea5282818e794905b219c6f5457133b255629060050242b2db8228b25104c3b955eb67b1c27632ca799414f32184d05ac4157e6aee8fd97112721f6dfabe92f3b1c8b4c2a2c17bd93a20c66f5009c95e4508458f0a70588bb24638de2087231cb83324518ccd18658b054e3fcdd17aa6512dfa203ba9227d97f849545f2440d51bece21258822f2a182760c4b2913fabf2aee932956983ee6c90e24bfb0d00b4e334b35a1c45dad0acbd383fd22fc72f03855f2d5c466fb20b98cfd7d1e4230b5c3004fb0eacf64d143192857b6ecea32afb535040033d65f44a7518af6c634b5062f9f850450380ed0df389ae2c2c7542f6d6c1e24d5523f5a93275664b795ca08e51dcd592c4fc11e6e0e4899047029283a8236e63a6d76e53124cb5eb99d9300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bb15fc77d9fbb8581c2f521bcf5b706b76ff5092cd900eaf729f75c3d6103e0e49202df454238368737272c218156b5e68761ba7227a135404f0bebd9b759f5877f49a159fa2fd00e86a730656755310726e4750eeae13c752105be10ea8150d6c7bb059321073e4dd0922d92053ba6befaf8c6f1b5deafc5ad9f47d800074490decdeb64c477ff15f88c710063661118405a51e71abd39a6e33c38878bc17124e66d58632fc4065f0d75975d61e5ed3086f3e10389699d4641ff7233d8781f7f64c9f22d119f997c5a333a4c34400b27517aa092b7d85f610cc17bb2ddb4c35a014dc22d583adb66c5d22a6e99d43e6910a854cd4f123e0d9407e08be74a4b24689d44889a278bc002c05fc992c4914fdcd67f487fcc669a6233b4b6511774821ddc3fb74e3431c3d16ab9cd52d9e926bd5dffeefa683c8a915db48274e84eca8b153f1363f2ecbf835acfdf532121b4b907c97c33fb94d5a940800d544e66a3cc1eda9297ab81e01eca87ff1a13d58a86c561ee153229c2501be2978e2538f814bbf562504a7fd70bc396988ed833bee12c62cf70f45f937f1a3ced56ac7e7dc19b5bb8fc3f215dbee3090d36812fe7bc10b395f4304065d338a7af24a171000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010cc37660fe53f74e586d0a4d38267599ea438415bce8dc7c5bdd1a9bffe20221fe9ed97bd84693706066e614daff07699424a1e7ee53a413e7a3cb9d81a174f05cf54b130c5ddfa0e290387469c247ee3b4d736fcbfe9f25c3b8926c770ca49f4db7c60a2ac4a5c0897567a16bc7c0001ca06bf158230be252fece333c2c75fbef8ac80a254c3eba188209a68ba605a5088942862975bcf174d36597568446c43a4558b5f513098646c62eb0d56e9fa0d1f4579d71c9e0fe31001dcfa3862a544d07b418a87bc000847650ed8d2e22083362dacc02c70c9fe27a1d0202192c9cd923961c96d07c1240d4dd803b3679107e3cab233f9292f78961bcb62c0a1558390eecca9841bddcf25f4fd1457c078679826338212be5704b282acfc2f52e374229ea1a7da0ae726a7b76d2225c0ed312e33026329dc742561137af8be681db6fc9fb1dd460c8271a94738a2a23b023ae18f250c8e5c7c1c2bdec52a64dc066580399e1e9a8c5996ff9f9dd74a0966cc445e093de618b43cb350bcbb06779d64b2efcf5244cf0bbf831817cd56ca49466939c818d23d5382cce905bf753e62a7abb5903357884b322292881bffbfdb5d042bdcfdc54aa3c4b9c22c6c52926700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f190fdfc93d7e754efd1f0dd33ad63395e317a01a1ada68b2029ee7bb329f2deab910a4ed0c4c24ce6984fbeed7b5e3f033990858424a96cbdf9fca1e1af21e5cd465004b062718c71ef5612c935e94bd03adf570b4125c0afed732ace70fc278682df9c5d52cc305bc7716f320296cff6152ce8a7227a865ab77eaf0056722f285403f03bae80b349fe451752be4180387784fd58bff62ca5542dd844aa3b18488a21dc0237bd956729fa31bf1ea04a3dcbb7b2524a6a378a18c90c2a4627e84a00af68b40975f830c2607a09fcccde2d42d5a20e5e77999a1da4e3d6d65e255e583f32fbdc962eda83f77fd831ba4dc9059df0c0cdd3700ca48f752ab9daa6bbde10eb6519c173ff6ec655b8ce9dc59c28deac2adefea00fa93e03057fc8d558117d0ecfe2fabc078afc82df38fcd8597cc3208f67a5605d90281ae41d6bd88d49021eb1a79536b97ebdb517de058ea1d74b178a63f7119ceee75909b90c9bda8ad3f94995940f3db4fff94055497df3f1b12f440ed294bd2c47cb665cb0ea4d5114f3f8ef1cb298c17686cd7b822645eb1816f8a7a90a1a01fc27f626b3b000f2708c6d74d52fc4f5e97c93a2e115e69279e631ceee7beec658e35b635f600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ea76715615cb74f96463c19864010e302e4c40949cd6fb7662ec93ae097d9bf37a4710045064fd157227a62e40860ba81a023ca3b115f28123bde2f41ea8f0f0117dad476506fa53fbf1fa4140bcd54f786ad704cc4ac48f553302980fbfdacef71860eeae973567af67e2603acf2cb2b1e85874c2a99aca660f5b5e143793f6bf65434932783a93f490351bf33024b87aa2b6dd8d4f791eeb64f5cf1e6d84d4ea848ac8dbe9dd4979f9fab005f8f966ec458bb589cceb96046f9c650b94cb8ba537e7e6ac58dc0cbd3e3fe081a3ccb7e4b81a1c8371f030b4322cc4602243019f335905d672267bf4d85b7edfbf6ff1842f4e82e1587fa2dc1ae090f5c25604a24276e06f4bb9189c240bfdea42696cb640e7b569a98182e66ac5acc364298393ed3898252d65d37973052055c70ebca97cbe5eb0b28351ca7e5ecd8c73c2f634e7c87693492fd6d0bf2c58cd98ce828b51728acd16b61e088f2821b010d9f6952600905013ebb16904539bb88b814bbb7846bc02dcc123f0722def38af9a459bc46b20a013e374cd832408d3f80210807291eba7b1f462f4fb95fb9b5f91ca139b3432827716ae2fe603108b01a690c94d35befb5926d7e1c29d8170c62c800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a77d859052957c8efa005ca5314bed68c06a540bb9e54dc07cd5213c5bc6a2dcc6bd62d28a36298bd0edbe4b03cdb207673b5ccaa0762e57c1be42eef1342dcf89d05ee1f1314efa9765a559b16d33d9ad45e392c1d49561b4b15b38ff9c706533c3a71b6bc08e80738702f9a78fe61772aa30f31576a790e7b955c8c1b317a6ac3bf855d89b4b06e58ccff39001927d218d1423deba24a22f86731dc25fe9a27bc4feeda4ff26ca1c8225d6a4c7eb97e3e38d7efe0496b15e6f41899a3d4d98263d97c540f50facd8a60dd1da069126db6bb618d10b7f17b42cda0ae65a279a576f6a7cb02a878852fb95f379fe6fc9c8888c7d24a092c7b49a302c05654752f8494f52223a30352790af4ee7b151e5061ada5553cefcf13a248f8422196ed5b1f03db1d9dbb3eddc4477f8a62aa16cc2748224d1939fa216e341411f99d53fdae4c1be72e3750e8e68a02a278a5fdfc902d7a8939f04e08d295408399be0576cf8c387215371010b79b6202c07297f4de03d72ad43ca0b2823a4b0a018676e46bd350e301d259119dbb3441ea199ba4769869ff3ecf0a584d7063283544cc0280563b6e97d1e6993381813aacdae1a1c17b70fc3841477f46b892dae085a600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a86061a27581403caba5c63251f50631c1560d7f75079005df82e29437f0738247d7707a2337483681b29be10ff37cdc7e8d9f7ede8b21eabefc4740d2bad2aa620b695ceaa0bca7b2dfdbf9569cd692280f93c4852dad69863ad2a87f48af43eb04d40de712e4c0a6fc29a0ea254c357ce399767b639cc89ccbcc1a79b669bf1ff9f7b183c45e966a7ab329545bd48021ab870c08f62f8f2518a5cb417ef18ddb7115a47c284d1ca9b06af27507018b836bec6c597d35e0679fa62bb64981835c029d85f1fc8319cef9f0b069284f4d26d28fa1121547a9df724352094d9df42d9edae06fc4d04c0246dd5e153ab7a8f195fa734edd20cbd53aa09e6c988aaeb31bde2a8ae2af19ed4cb7fb790f1a1fb1b3860836f3f93df611cb903ddee0e76812aa2f24fe8aba72e330dbae02b1c370030c9b0326e01ecc744d6edabf056649bdd24aaa55db9b4d180862a56a60ea025e7d5803ff2359d17698558ca472892a7f66167c2272722a1d5fe36265008d230d11b8bdcfa0025070687c9a42fadf9b1ae37547d05afe452905eb46e457b3307a36d1bf6746bd65efd3f710a786ea0bd0ca40b61f8a208f058f5557b01c21accd21cad8ea7ec8d288fff38c8d57d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095257995264608d3e7bd5cbdc926c88d3aae5daf1d9176c0256532a1d6926c381706e0bd47f2910709f51694fb70e648395c031cf460e60bb1c04737cf6792c6f61222f70ba8a6b7173bece60bcda948858fd7fb448bf3de18faa7b66265eaaf0b755eb752722c13b1bc38a986add6038ce5353f313e495d952145351f49e1fdcb0fe40025748c2d7b46abae36be6dd625dc7b625608c84a7384c58a5f3a382d8ca3264d86b2291bcd190f473586263911a33fb6ed971a558392155216a59d35e4cfa80d3d16fb541780393fd0ea11eea41d54ea70ff472b325f95fe964b4e61a274e0727e3c040f762151b6cc898103a151e9e36d50761bb4b560e36483901b625b62542c5fd1fdcc67df673a78871dfed49b2e3cfbbf9242254eacb1fd55c5c706d842a34d6ae86f92f74d5138db04944b970812e304430a064fce718dcbd198e6bd08f5829d2a140b408181e3efddfe9b784ede5b8317883d03b3f6baec505ea8d8d5383c1f8713b077248892d3405a052d1dca2e48c9824f49cf7cd70140c3af4c232ba10031f15b0c89c53c6a0c6c49508cf672f3e0437fe95734d2668ecfe36ddac91611a3493a8c5651a671a4faa5d67c5c6ea1b1b2b7b1719c4f60970000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a028725d5b4344582e070ad95a970a93f29855922ae99c4c28f2b59a498ab331afc0b7fbae8be68432bc6aecf2bb757ecc789e4313a8cd7d00eed6cb868ee04057fcb4610d8441eea33e39735ffade7a0c5198d94520899176fc7811149fd65248d66bf2b3f4ff086188356d6fa074f97af63bb4128cfc16949f0b37daae45d7d6c5d83564023c3810d680999aad47ef415e0938cd9dc1158655fa095a56d3d99a1cbf9a3bdccff9783c2560eae08b8695c43bf5b167df565cc56de8e8d0e36aa4eb063e061737c755c24baa14b4541759a8ee902dc5320de20c67032fef36b2747ffe292e1c6c793f53d66f6c0a7438731633681ac8a071ddc409b76ba3f0bb7725d6b759b2c4841fb550715797d46b7f0e97e4474990f6f59ff400e8d7e7217677d31d88ce39ec9f7d937a34baf727a8ade4058c453fff605f9a8891b48cc5471150d04a5446bfd241a5589640be440a391ce0d61c36fd5f6d42edef0057d9278a990be02d15c297b9711cf2c370092f6434ae5f8e72a9b56fe8565b575ea6a372199175cab79e321f6d9a137cc3cf125d3061d10387f4a73d1035c3efc8f51f215686d0e4211ca8047a84715aa210245c2c10ca1742777836aebc80c0c38c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006c44939d6614a00029bef344ba138d1098871c2480315824055d515865bfd23fe02bd0a041f565bdec7c2b67dbf2e5d88aab9897d3350b644bcbd71621510cf7a09d03e497a9d9115ef7837c3717fa344a456e3b8a2074242e0fc81e87e4948a1056cb6c22d51d0d2b59b6adaaecbde7cce55d72522346732052949e18d5f9bd9abe059623ed50ac478bc63a8c4a1d36d8ff90c20567683f4d0f8eb4f46450713b4cccd5a5eab4be05134def90a2eb82f6fa29c2083f27f529d497f99fbe9add39cfcef2eacb04a89bfabc316b017332e6defcbb5f21b0b23dc4816e988b642cf37031a725a21f98c754467a72a371ae79a10bec552a412c44070cbfba7847f6da07c6dcb60abb5d1e854aa1b038fe195abb906c33540418edbe9f0ec5f1527aa9eb5bb17109c913d4cd87eaabe01fb757bf3324c3dc1055e3093ff1a0572d649c0b96c04423b83ccb4b722583fdf05b5539e87a4c31d2501145191482a22edb26269ea24f4c35f8b73287bcd3866ef97bc5040195d42bb7a98dcc8f8f71981286e1a1f4e76401e4ef0c74cdd74ea30e5d4531625172f53ae936b51d477035aa44de82eed50ed45e968533643eaa5bd26ce81a6e53edab03e14d9ae7aac532400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ebaad92a33b18cb184adb175c659b9a88deff6cc193d94298dc4be8902ed524efb3c06c9710d678b9440a5e4affad2859cc12996d800d745017b8bad86e44abf4f9f39650d838ebb2cef5bd5b5b6c2707d806c74f03c58e1ed24d5dc7990329ebc7250bb43436a4b4a8f15685a278380afd9b1d485d767ee87bb4ef5e17177dc9584fe3cebc57ce35da0fbef176d5f2bf4e8044eaa92a2b480e406316e697acee63cdaa8de78602dd785d18576f17902c58ca70bdccf24ec8ef5c49e35ca81e8d2a590e97a796c174f674cb8edcbbc3ef768cdec8beee1b3e81ed24b2016971350c8aa86f4bb075b029ac4afb3f93480e5ad7aca4c7e42b4d06c065c8abda78391d062852dcb02017cf39b6ed82429096a0ceff9cf51afca569cdbf4f84b07b56614cfa4c9da90f34fade51e9d1a80830ec6d9b0e22ac0a90dc4917d9acc665fb6782472755b6c364b3ce761816dd46c8ff7f253ae2aa6cb68296d580296fc9cef3af7f89c44c4c5cbd66141f3faad776b27afd70e1f81e73aefac9656b6ad75fa69eb53a0c3500efaf551ba29ea549ceea6fad5524b8408b1eece0982e5f2250d4216521a33fc602b48589da5a90c01bc000681a58ca3a25dea3a5d0ae93b7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019260a8eb65153b6eb225793f5e4dfdd5edeadc15d857e6a3ec0ed7304424d80f5b341cbe177643354b79b489ffd8d7af537822398e6c8490450a5307e780e7a257a1a8d5c4cae623c9a2ce0dcdf6a9d178073d372476d5d618dacea4ad8ca408cb29b7102aa2caf99c55ac86c1ed6450091077707b06f698d055ace2b45331fcff9e835947a9bb7da17cdcb650ab61e7aecd9e574d44a0a03687e2beb918657298920cc343221b1c2002e340900d531f84a8bea189799e1628516759370f12e1a54f9c39a82263386a3479baa0d1959e0e8614574c9776da2becab4b91cd548e9b63409608fc2dd5f58abe880e14d3f77386f8b1117f5796eebd16c458eebf4f7e1e1e38bfd058bd9db8bd862cd72d098d3855287a0fbb910ace80a2218c1cecf124f9426108cf31a6ce66ce8a1b55f47a3503e7b045a535cf67aeba9be2c9a5970f7576b4dae1e5e8d2b87d7417670aaf4f73be7dcf07f5f8f8108f096ea26aa4d4e804cf6c4ece0e421edf859cec9959786f221785e55e2875688f0cfcee87e5b488a86e6998d6868580a95eba4a6d16871c9e60bd279f94d7a228f8c7acefe0dd16287d2f59ac9f664115c77c3c1bf0f11434193e050fd8eb8e42398d9f10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110ec9ebc545ed1fe68ba0f86bdb34eea98b30aa558cc68870b99c9c9ce3061b9c6d3396e91a58cd73a16949b3e8738d98bea104dc0c5171249b632b7459952f6d6f481b00dc3c59d8649d10d37790622091c9096206b0c6291b04aa07fcc87b9401734d0bc63428b6916c44a96ad29452e06cfe02c0774908a33c9d150c7f602014e8b601d42377cc41b69251f3a3445560e5f04b249aeb0e698df30837aff041c911a3bb97012b6d1805203bc1cdbf0fb24065a9394367b3c8639b7ec0a137091929d94dfd8895f65148b4e0a3507bcc99a4afcc78f827966a8f79d3b78ed925986a9ba99e1079cb5a015c4920579db9131c9cda71241a617e3b20f417c485bbfd8c0a2ad19fad95845303de8c8dd38e003c2ec50a101249ec23bc6bbe1b3fe571a11fe26497da2a4443a5014a3ebe74550382771ec20cb1fbffcec2d11c0e913554e039af3d4a1f6d52672f0049b60fa06c1bcd2118c08c7fa1da569a155d23af9cecca35e5548565e95447182ed7e2c317a94135dd524dab32552b7c11f139806d459c2953b44782bfa4306e7eeeec118c8d4e8a6cc1234d6b60b51efa011a8c47d9158ce3c684a874c96fcad4cedb62092a1d6435e4816208ce656ba43f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c44caa3dc279c05cfdb571c45d406da6c5a7766c7d4df57f0e4554935476e1b587b58fafc6abc6d48f58ac9825bb7ebd2de0957c489432319ed878f1892cc4e513386e3b3e832fbc5960e4aada5db1c97515abfec4cd4c838ce68a5db0036507c7811e87771e8345857afc55e2ca0ca10f3a075371a62010003468442ba217d2456fd3745a44fd8560eaf6613635874d1073f3c5ce877e686a50842db523222d63840a33655a745678859e23ab893126689b76b6e4a1ecc4fd370ee4ce075bded43f8e13196454fe292a1fcd7c6530e3517ae4d6be5a55358cf18c766845f7428dfdbf1d32a3e7c168173a76a52e03b31350cda48dcf79d334fb2c13c752647b26d42b66dc74f040444a19d625c753ed4bb3663628bb86a26ae3ca93c8b5226369c74113ae0be53be4120af8e36b07140d564cb040e5485f931a6338b21830dac24ec6588b1f73a9b80e85d48d0bdf0209f8b6367ece2c51d9b11c0f613ca2b775622d2379922a399b48fd90e2c9db952387c3e5ce136ff9dd5c2da86259457d221d2c128f835ce56425ea583ef31586b70494c4b477850d34aeabb7acf651ccbedec1995d7ff4c964253a9c146d8342e8f50d52a0b8b6bde1fb8b7191640ba000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098b844f34b49adf3cb5c0f1b79aa6d4a7ea4c17ba5623bb9dedf0f96c37a05603c62293af4cb7d2307da3e5a1dbef7e46d5f81404f5b5487dc20037d14f398c1435c57067e3805904731f1a7f9da4b4825c3bf8015865f978a13b52e8a10930075c640d12a71cb57273cf02a7aaa907c7a6c2da86bd5cd617bdb5fa72a5032ebc533aa6c406539a131b3ff83485ff81135949130e1fb58146c4be7d323b85d040688772ec4a27e4138eb2c3bffb489c8ac43bbfa84351d8b6a0248b675f19bb626153965f4fa8787ddae74c2e976992cbef6951b626fd08d0115c32b202178af3fb551e7e5d29b99eb068e14a781be8a6bda64666c740700378b73c7c801d997cbea81caf471d866fa363e8baa0b7832e7888d562bb2d4d6710e96ea84b95dfbc3e36b380f5248e60e4075159798748bee00b65e16f3d47d3d8134e12dbcd768e70128716a289f73f1b672b8d7c2df7d6cd8e2d4d40775f0081d282bdbccee42a51ea57b4ea706c5bcc17b3ad2eba0d86c56c4a2e8b0fdce839887718cec14036687910b167c3547de3c76aba1ccb16f0d2f1e5c888b44a034a71a8af3d13c647fc7a680fac0b72aec5e1dde90ed07378e6d7e7baa1d5154abdcb1081f2f2db1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004366e28ab2c3353342f65ab868b9fcd607fae2ea918c44a9bf588ec73bf00dd96a256af197153208734a8406ffe109c52e544c1784fa9dd34751993a3f3fb200411fee9b1d9914b12bb7079ebbf01f9be052f393445360b824000e13acafbc5b85fe08b7e8953c0a662e01aba0a9735fde13828f5f894075739487b28303551d334652379c01a0798a3ff8be14ee9f474894086aa59429471564cee72f211f80e1764090bb433a9445e56f851df07c9f6dcff622755521608502b1d16ec1ce189c9b283a108f858c87e078be435f8a301bd7b155ccd6f0eb268dcd0bac78b15e00684dd5b61542ae804a71c6ca397f1c82a6b1630d4a529af636b425b1a27b96ff8381eded9bd3afb8971d43309341dd5dcc2674be2b07873c6d98a8efc79642d888c6a2a40d87da558eac4c3ff40db380d6ca6d78547eac73c8e69d8fcbd5fe99afda4b430c55d1c92bfa7051d147d3672ef17e0c1a2a126106552422e90dca5c4786eabd69bf62f2207bbc97029d7fbdb2be61993661ce04e62ae96d005eef2d05adeb62ac57bf558ad4ecdbb41391d9d9bd809eb41c790ee597f8ca991cec381306663883d7121061388fbba724b97737560385fda22f031f32ce84c556f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a95f6724e8432097389e7f082d325a8070d2aa1df2ab336934ae00f332197aa3179b15a96b2f9451e8f3d2bd4682f246ba6c5726754dd2514df5a023b44d1a98694307fc01df3125324dbcb780b1281e8a2e96bd57292083d3e5d97041b7606906c0a4bfb87842ef2a723d5823cdec470e0d33f4a665581f52cd81c4bd99415a6e5e5c794ab7c3fd058f8c0a58582e82c3485a63cce008223a06114c038c467d7bb715fb4b4351c25d277341abe4294641d712f55603faf19653258ab4ffc2a03f62e0e935b53afa5f5e153fcd0f9ea1b9c9ddf5647ed44259c83436e44a6459d94c1316a8494f2bdf25901b765acb129b7d6a8a74189d2263e70751e64623be849f5231e803776a3463421403ed85813af372cf8a806a2c1a8c2fdb85b12b5634fc0eb4f0eb4751fdeea17e90121e98c7c80e8faf16b01acd13792e6b7b78105dae404622dd1c5aeca3ddc6ec06c90871cb138551ca8ff499affb316449394d28c62a9e8d65657120fb91cf96d02984b73eb233ea5b36a158d17b2a89162dcc696faa938f45c65202207f29de256f0917cf80beb8ffe91cb52cad257bac2850d0971002bb3edf6d72e8ab7ca2f05121a8aee8598a1c0c985f620f80b51c99b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080a085e2c1b9e682dbb5bd94a436ce96e4ae24f34588071434b9890b5b36186744900636473af024d1baba5c2c8fdf82a3cc8390585135c351ba2cc4bf4cab000d1f248fdf4e7a976315bc3fbbf23c1730087b10f569554b9f3574b5c8c0283d1b7f0ccef2df6332c673a9ab13d2f1d4978b83f1fd816f679ef7b6121988f13590bdc2c0b9a011afb401e7763950930c878d17b410ac4df59202a226a4c8d63e2183c4dbbabb8cee13eabfe9a2d85eb0b45524c7e186360fc3d56211f975cf58ce5009d54d0283234f870bb70d6bf59f3f033c500d7d59b29924afb4e295e79a09fd90704b428a5bfc5e5ba121f1bf06e2e34343eb20ac3514847f756544f184a8c150225660b4f11e8738308b2bbb9a7b413a47d112f80dc725da99e0fcd6d6276f64b4f3266d19acfd743737888911aefb6f240a4a17cc5fb8723c2e373890a85c91607111c205060d81f39ce69ef10de9b5f8dfba6079ded82be4064e395852fd94bbb98965953210b9f24ff0aa30dde04436e7f823a589e7dd907e69d6d9698ab3957790fe3ab51a85ff0330c98ef4475b13cb4851459dc6f93feb070f11fb5c0afc075e806d4f592435e67aff16137a832728ef125ec182f5dc989aed190000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a72b283d7ed5cd79a07c014988f5352803a79b5eee785cc35863fb41c55db213eaf878478353bc578a1cff6a5aa81c68b59dc8d23d3a2deb5768b94ed8914fae4e3e289fbb11752b6d2c098656e4b80ed79b76d107716a307bc4c917bbbbf5f773751b7a08ca086a9a446ac0d5c645258dad650f0f545f54e1a7cb745411c44bf9a46ced7de52cef4fe9f8b3c2dc7ad7c92ced518af57d4316e4fcb4ed059ed40d6f216c073e4bbd6b86c42f1bbbac43fd7056b9d562f525dee67f1d7c949ee992a06323694ee7d9e2da4d6d5d73c8764cf36cab95ee31712388fb2175982aba68ded09b87e688fba934122d3dd17b79501f65bd7538f320385691f30685a41157f19522e9a4e68b655781531486c747425df10f95126ff4550fe75ab33b718e8c6068c6f36f91e3f6595fd7a285af8616804ef20ca03d7910a2dfbb1e9960d557e121362ab8f7d14ada1dfa1fea3c4b35d916b1b616d87006a6fa03954256c7494bc0044d21cfda9d36b2378fc68b2fa5ce3798b2c91cb899b84dad970512dd8004fa7ade16e83edbc685e86127fbc77eb5126892946785a60c07e2fa45d169f34bf33af4b9200e4d63510cfe7388937ec3daf878d5feb9cc7f62854f3dc3630000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4f3d47ac88d171dc03305c14103287c5dd86c478d8c532fe9b447f0492b96038908aa010dc323eeb78c2d72bb696c12f62ab7411017cda23da1aee1492b5666085e865257f11e3b05323ab176ac12ceafca0a9172dbebc167c00ed5598164625e707e071fe6940aab0a5b7ca9c932abcee6dd4095d709c2989ad0029ac0c49cd82bfe81927b22f47fab8a3730be6040197877eb2af3c34af9f1f9fd6c16a949b6f796337d5acb22eb54116d2679849bb494f24d8b72d96e34af4a4d734a6fa00f75bb635f226cd968d68f5870141ddc83890276d48d570ae470d373b5ab53c61dd8179661312a551ce90633bc60018b047a4e29a57b1c6a906e658e82165469f8887f1fe53b050f7be047e205b2a95d621fd7621b5c4685dee8b1285efe4002cffd8edd86c5c255f04433fb1fd1335ef4fa6280205360869e142bf707a46b72b384c8c3e37aa06ca5e0b0a709125dc232a8f4680c0e6f73c1b43733d0c59af8b45e3e6a00abc75c80956989193f73f8b40c3ca09682dd4f375f3a2e730dac924f9555bd8ffbf67d0be31dc5a3db131672bd34a74d78506e754087577c01db93113c2b60cdc159276dc3aa5710f3f1f544b5a46efd980583ef26002215b08953000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099c27a0772c96f9c61d35ef259bd48ed2b6607e0145f0b5dd112cf80183d1b574f8d15b8cb44f231758000c20f8612345ec443a9482e95d05b2627f2b499d68d2f9dfcda2d446c672687b86d5d981ec503d9fd090485badb49ab3f48431d3f2fef30bc8fe32bf921b9e265e7408bc6d2787e6695435088f341489e3ea41e8e98edfed704ba81a55c7cb4a8c6b2828271b0ebbaf43f1f53af2b879f9de442809d77cdbc304f308d8c0783aecff5f8b4f12018eb1796e0d34fca0f24d0b1ed87004ac0d502e050aa461df95dce73c57291ab385ce9206583a8e294609d82d459b37ad61859638eb5607f60304df1800c89426b0a86d489fbe54057dc9791508a7ca74d715b43b98a8ca084eb18086d973e05b502662da31280d4a6c71680680fda5b1a832c6d02e82e5f393106f44578a858802381d3c2466d18a4de5bbe4ed24b1ef34e2d8483b19e9c644b36e015fa77ec890f6e2091394be7d3bd0ab378d33984a84c8a2370d71467f71642857cdf77c02fd520682f29ab275ffda7d0334d8bf51d7e1a792e1d9a3c8d7009322451bdb7a83d2e1feb816866e55e4e5d1dfe078a783c05bf9721fd3a89ba1a2991390fee41fa49a7e08ce501d668f681f8e23f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021036da63bb0d494b05a0fd068ab4237931534b079f48638a1cc0dcad515e6c2840729baaacd42240ea7e1941e5774fde0b3250e972cc6280df2fd14a1c2aaf0d11b2c5c4d158a73b3657f8980289f834bcaec1627bf91bca4865e16accbceb537c75595264505c4192436346165d9e4f072b65ed093cbda18c8994468a87413f652b9903432f8addcc367bb601ea6b2cf5883d9b723a397d1159ab51e775958764af597e01f5c858727f622c6360cc7f445578dab2752553f8d4d0449bc8c4c67784ab52fa989a512378fe10b74406ffb233c4a14dd91468c6aeb53105c2108bb8fa02164e9434a7850f113cd031795069443d0f756a07dd9e6753eee46e211fc979847b415bf0aadcf46d49e3a910b6df54aacc6eea21134bc75457875c0af8ee671a0e9cb2154cf54190c3218d4d8eb1a6d570aed43afb3d53fa39e8be95c64339d27702fc17eac499610ee771f0cd3aff53ec69ba3739de1f905ca8b4097cc73acb63d6afab127a8dd7f1015c1b44dd144368e43cea3947ec2d21b8a2923101a005b6841b0a3bde515ee0c2560d268c12c85c90f067a5c3c1b6a04cc17a6756b5f57560e1735e30d50142fa24df43558a916113e83336b0353bccaa8a13f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d882209e78e0d14cc96ad9701c9b9a180b771efc8d35cdc3a096f9ad34e9c0434c303efee0ae05ed230f35b3cfa1d0394dd45856e7920821e6b1eaf8756ab860dc84ed1f6895b3c723a34dc852ecfb3d37627c668065d34274881d19d256050909d02003789844d9474a9b3aeee30d071d19eb2327ec68bd4037e7056c59b400a00f9b2a62b805a6110a55c2d2198c1cae3cef71a946e9cd213c7b3cb89ab1d64a96fcea67a8c13c7b28bd7980f85ae660c1392afc07fd48ca54af684da3740e36eda77b715a4d7ec78705ee931c1c755fe2f70ff6f9afcf7280cf47230a8f7d4cca444614804ebc0e4650c88d75feac208ef5dd2d01f2f10bc1136f509a34d8623622f98a7c22501c993f23713f41fb2f0266958a45724069e2d133659e89f23ea343ba02a2871af0f34d96000e63c5aaf821b8fa58aa3e1e99c45e85a6e9725c1358b913b1bdd57db36c291720bfa0861e5fa1cc981f8d47e07e41a35eb201afbf1bf7968782277ece999fa9fc39200ea9f6e9a4a421227950534cec900972dac1cb93330d71dbfd95fc078f809b1351c22aedd556e8d3d2c75b4a60a6c2920d6e9c7182cdef21e5d169d935cebe5a907cfacb1551303c6d02a9768d9b6d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b01663797800c7732f31ac2d5d1da767186bf78bcafebdac7538a9a127c9ca5eafaef99a6b410afb2fcc3c39d58c52202642a9be39d8d975266a05f7e41ca1118fe0970923b88ea464c83500dbca4bef8a837823619de515f05778c2b0688a101d49ca309c5d6109b621c96c9f7ab4c4652d3fba655b6739962cc572ca3459f2f980a66ab29fc3719ac3d37f84c8fe7e14ba2d8575fb972d02507cf3949062c20a563bbbbf8d1d38bd34ee2c27309a6d00ed546bda0437a2c7dc4f60440e038e6e317fe99c0bff6b84963ebd269e040439e3d1b1824c0326441a7870ab24b7babd46d1ab076bacba2d92a79e9233cd69d3a93e6e3541182c0e1fa6ac1bca5bfaff9ed466dfc8bf42310987a090c22061565e2d985fccfd3f587d9a06e92d8360cad7a81619767612c75ea015192e2d689c8555f679d685b6fdcce2edf8bf896a3e427fd53a85cbc577f74feb4536ac13bf981b204dec7dbf932cdb8bd0e02bd27b7a177c9f53858859d30ddcb3344274967492d1a3eebd257fa302d805ab3168358b5fd5ef1da3f5b8982c743bf976cea3b1601639e4c2540175d7f4439a22ce3014091a384a6012af209622a5d9cf71b519d122e8852a830533cf992bec585c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000966cd8df462b3ad452327ab647b9190e2fe01d8a875257baee1d968523eb3a483de9beae7e99d43adafba2ef73d453bb4c33d3928a23ff630c3e911e627b261462603850d2cddcec235d2d8f7c997d510e7031f65576350c5b39bffe87fae905c901ed4df7fbbc826d9a991824ae38417b0a62101dc346ae97dd7b2084fb03e2a4974f9275838d31d6bd96b066cfd6dfdca53170a2dfb2236dfff9ee2bf63f5b7dce21dc1ab87b1e8481644f17f1c641227705cd6525641f5bf268ae9013ee735b1d1eda62cbd5ce9d802ac45db1bf90e26847c2a4e683304eba3f11dab517905dc30e56314772fcc05c126bd41cc9e811647d1b9705c36d89d01661e651430c6f0e47ad5c06d0d0faf7e4e570f51cd83ac09fc9b3c7830d2bec64077f67023ff7695a9d76377c8c79c500c9ace162d0188c9404701107798b4c84edab0929ba3f2e6d49d237124f620aa937a057e17bbe654dcbe8a1838ea6479f03ee7c8df72792ffa759498f88ae613e54dfc934e33567f6b2a7e3b80fc95e52edd0f2eea36d5d96482ba4640c5c4b86eadc179243def9deff829dd1a39315217b1c005f520f56c2a4b04cddf72e0f3454b1241ff61b4f1bec47af9d9db5b9d510b42fd1740000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b015b5cc38ce5c4de4dcef080c52d9a0fda5d00250655649f09754ac9d89e661ca6e3d8a2250e422e0d9446afa328d6087feb32c9e51fe034f74f53aeb5191e42478ff524b9d7632c4986f8f7e659c1a17f023f22c7ba753264cc9b2ece64e30e0bd2f6469ee88d4f313e7907b8a1eac321c9d4a05c4cd3b52986dc67af0f16fe90c1d1943a6c6183effb3f79346c49d1498a1da74cf54c9f1cb2b05476d7aae62a8440d416cac5b5e88697ec5f072123a2208e016e0b67a7746e65addd6f919bce8c49729e021cee105dcc41e0b40962432e1ebae7f084a89d0af0ddf24ac209496fc9598b4609ca7d83b7846bbc90541c730b91bf3ffaf5ef5f44c42c85d924fc8edd7de346be0759f11960a3b24fa93e37f1e8ad50a0a085d53032296d2f77eedeeae1de5dcea4b0bcf18ed7ddbd711e346fea20cfd06f43c883cdc73d6b84e3a0b04f14dcb8542bc613cffeb27f0fe259922c2684de04a6a74ebb7b47dd7b3f4d95c7230902285c307756168c283fa883663b8ec791e49d70383c424f9c89fa2411495cea4a2890dd9deba3b9e74ca2b4f6526d2ac9ea19c8fa81955e2940d71d5262265c276ae4135c5115908fa7d01804291c143fc59d1808303c5ebe900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e1c747532226c87125b709d142e1cd0d8e079d48830cab0f0f5df86622398891cb21b50325ea85209c0e882d0baf43139de7ff9f011decf41073846c3efebc7be405f2d28335cc30a8db40a741a63f6e542bd480cd8694710d81937abfa7b94ef2398ec5f7e538b4f0bf406d7f670ce25e113e74e86ed47bc1929ad5d71f0718e81317754cfed35c168490696195d1300dbf78be69ee877b1bb4541d25c78380e252c78181de78cc68300a2da72ffe62554d1588cbd87b256ec05768dbb4dcc5406fb6b5a122442b90fafc9637a4220f9032643790d51ba5fdf1a3071c7ed057c4c9789ea77ad7cf2c766343cafc200f448a0761f0fafa3ddac3aa3e85c571206b96d227cf2d78bf82a063daf3d8463a1429559aa5f8dec1b8a808f5fd98cb1f05e09f3edccc8fe65d317a4f1ef8da758a9061654a3d48e96d9eeaf5aee5d59f96b08ab667d360a3424ed17582c104dd05b24c56a1510dec927ec3cbca4c79cd7667d90f6efc11567dfa7a68f688d9e25c58fbb210c4bb758bbde3437c25e142e0516185867b9cd3db6933d6ea28a78851d9c117f777908920d56db3bf1769c8786f498d926ab56d39fc5daebd705b792998b3b5a161c2136d482cd76de714f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092a1a3b56eb00e1b0585cbb76c29bb960a9c872d270e42b6d108a4c05e6267255268dcd00adec25b4d273e56b917500e6ea944a586aa0c8314ff5f1dd126018c8a424a21e6451681975260bbf45381f9bfc0a1d712672a6c704c751d46941143f802ee71c659a88f6210effb344fef5fcd5859f5951e0da27ad4af86ab96f84c0d49b87458150852f642b594ef0f736d419f7cebc913bc7107b7cd694fc4357f78279a7eaaee0a8f6f1529efe9f7c7009bde2a4ff9b49262cb22c0a9336dd5b2a9c8025a65c3cb1b09cb49d52adb2becce7d4410798179ed4c52ce5ed9debc3c55c936061f232a849da1b867d45984c854a6afe45a474a17b22c8112bc9e8b7b906900fc0d3e0250b983bb08e770a680cf6346cc3150733ad6eafbf9e78fc1e844a854ce2211c90a97eaa7387aec7bedcb9ff34eb83e0b0c89dcdb590077c9ea882faf07fc1a930eccdf28dd5b2ddaf2a1bd73eda71b50435a9efd7e4dce49caff24085cb68fc06a72a26a3f54720d7737498c1cf292bee4540d34174c3d5c6cf801e6c62b9ce8fe1e5c4826a3aacbdacb4b3f1d6e954bd7dd4e8fa0f8c162768d5fede26f715c88a727540594cefb8e0d7ca26b2d4097e0c1e2f0112182406d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ce4e3134cbcb7ed72a71965ef5a0f50d6d1e3d38e9d43076196a2f809cc0b01799f7afa4653642e6a0a0da9862b7401234037a0a23edaf786ea3e6a8cc24e450f9f6f4dcb43bd1606d415e069e139df2ec9df721e679a653cc9b0acd873af93d04378e59d44d0bb1742c45ff823d5bc8a3446e01976d98d10d4ee92cb190f06773226cf8dc49c6d841d977cdf857e50e896469d13d7d3f9e4d1d017edbe2070d6bc1bc2546ac18d5a780d81615ab616df360cee73476c963bba3cb659c847278ebb1dc659573bbebe41cbfe4821b98a70d9a4bb10d92bcd2d74d7074776a0ba43317aeba482e2f92971f6688f5fdf8099264e167f27d37093aa580af364503ab3cc76ab82c2b97952633f1c34690ee9c03080bec3bc174b7a4e698a0dadbaeb4b050fb8f15799930a300fba1f361aa0c958bfb946769bd7e3653b2dfd648659b47bd001ce4cdeb9764a068b510fe736d6163effae5b83bd5bffc3a97fcef404c992f647bce4b6fc85c7ad96ae349bc9459d01f08cee5a9c890b60f20594aac520737cafba2876063a20483fd5331648a028d2f042f9983c4c982f16da32cfda63440726f7da73013be254bf524808b15db13385a9252120e9cd1ce09309c7bb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001edddc1301df29b6f0dbd28e3e6cfe8d1fe3b1b5e3b3ffca7ad0ef7a4a592b4d654ef0f2d5a9abb367862614120f25522230f1ff0bcdc2f81a9cff498228878f907a53b8bbe4275551cde43fdb99f2e56c1282159b78e5373ad087f135b3ee5c6b14f234a3616fcaff46eab65b9b5ab65837a21b028314368bb199cf3d14a53f6f9a8d98b9451f9f971c06c728d8cf4b1dbe16c82fd49c89e77a3c13f4d4ba43bc7a2161fcfd77efc945e07e9108b73bdd9f02473c0a8937932facaca58d1f3538a4f85c5bd827bcac01748e12e9c07796a23b2d6bd533c968e628299c80f92c9c7fa15cd1e7f544cf28d4d9de77b2692ad0975afb0faa0134f67e8bfa0b98833e5c330f84aad7cb8bd74b17c23fa21cea688e91c87254e6bf84f95e8d54e04dd2ba94e3053e93cb8119eb0fb65ef1ef8a5b456b780457b4515c27a71111f989ec1464372ed77d94a139ea46b443bc89f597a8a1061980616ef8589ffba2cde005b946c0a85f7872d778934126dcfb546c0f6cfffe3bd39e90b9fd14e55a6f99c45714331384beeb86a1c0be7abac59103a757944b9bf0450c94f44d2b3dc7b26027dd8a26019df88d83073161acb3b9d62be9c835338f4e9fa64999d25c62ce0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a05a35ba2399ea6263803138043f36478e452f42bb47558fc25bf21c4658299377a6417fa7a3e8fccae234ceb7e4a2f06308570c2a917a4617a8a3e6d585d0deb6d4bb74491c2ba5182344f330f1cb580ecc4ee7d772baceaa7f93cbcacc34ca27063d343b9f779bb9a4aeaab0059cc238f8e77149dd8ec83c5d3fccbe8c849d58ce0481a1575373f1f91eb3c0966a892ab2d5103357f0e60e05e2fc52a8000fc47d7381170a0d06af9e5b5ec4e6215e238c806444c980b52eaba9dec6204e4241e3d9d27f84159dee8732ddb5683e3c92e5bc53eb17ba9f25c8aed572247d52797a1e76f45e4583d1ef3216230567dc9e803dedd8f5b62db486528038a2e456632948ed5f9e9c2d837a0abf82e188c562bce59d8cacf05ad5a10be940e33481b30b12c35e54639b9cc4814362d419905a9be77b53fa24c8084c4fae0ca5db9babb689ae4e6f9c00384355101aebe3c0a83dc2102f6afcf1c666a25d5eaea7f98541b3e5ecb12ddf91241ef274235e0f9420d7450b373f4d6b85984bee7ed66ae629881b421eb45989b73778973ac1d6bd3b6a21a498a6ad8631b2e440444733ddae87d6368791d207112e768da58869e224aba4f608c88100e239e031792bd100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000291eeb714043b16a0d3d4c8a8a6526f3b7fe5116b9938a451e3b0f0f2c3955cbfbf2b186d69184d32962a7dad035c0cbaacc1d5da277d4d919abecfbcbe9f709cb96c5011c703912e27f9da965e9011c280c4ab00fa34b62177a3d57024aa0713e5789383c92cdae8820fe03208cc58a791453c16eab424f7e83c17b5302f8776b2bae84d0a3b84c0d789d261ca7b38dde912d485456535d462ca785dfc60ba9483c2a5212d91ec57609ba3cc4b54d811c8eff1a205ac85a71efce021dac94a589abbef6f93de1199726b69a86a24591dd0df110a9158dd462550ed4ad7bf6351fedade90911253d978dfed6f01c15b36992d0ce2a5ab716962333831d49836e806d250a7b0d3f647cfa2a1dea6454b710ad8acde2c5575162e8a3e0ef21905242350529022edb6471d9ed4c641e0ec73733a5413d2adb3afe83b41e4e919bdb3f6dc3ddf28b69e840f4bd1ef8aff3e3ac0ed91b9ece303d8952ef63af23cac51a92489bee168a47b2ef96b27c2b9d2a75a6dbc37ff8b68499461770a189320e57fa9ba25f94f55fba507baebb941f61d5bb05268408086572b134c4916cf984eb85a85d13f9dd6abd1d9e7e7100d1653090a24fa7369ea8b9f33e40f2e1be10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000955c4b4e1620bf88e7c7ec52a021f1ca7eeae81f77624c8d34fe623d006829f4d525378e231e0ea0e731ad139303f37be6674fe17e649aec4cb7d091f4099577e6cfe6e5688fb0c6a8ecb6d13840d9baf398df1b000f66700ef8cf8198c411be65c814f56a1263fe8c54f887740141b39c1239ddc36f2de7055e8a6ec0e4227c80bbbfcb8d0e549fa815bc26afd511f39fa5c33174b0100bac0fb261a3e56e0c10a17bb5b55e77e37bfe3438fd128dcd5c3a3c357d93bb32c84a422eef96a99aca315634befe774345dc5472e87b5905f7e12ceb59765a53005f4cc6fe2004d3c1cb834c443d4e5fdd6875fd57797e2afecd323c98c63051fdd01226bd7d40af5c05e232c95b801a736f1bac7eb649aad818594548f369918d2b83e62bad9bd3f80ca56f384ffe0ea09b17d189f6078783ffd58ed127b4a84464fbb66bbc7a503d026b67b8008782b0ad52fc0e8ebb53b8c8e008f33fe737b5ea8e0136a3125dd48d6ff4319ef58818fe226839b935d0cdca98b93a71d7f9ada3eb65a64ccb7384705e57b96d124bcb0be7c9718923b3d88ff0bba1dee02e5d4261492993fb64224510b8d1e5e7e83169542532a7aea03381775a3d34a7d6307c35e6a3d60bca00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c32e6965abc15f4fe8dfa71b80aea41d00f888f4e5862f32860fb530abd6781bfbb13f8db2f3d9fef27f3de4f5ff6ed06597041ec9cd7d8270be7f4f70171a34b8c1623e658c3688052f7c07df89d5b137f8c6029fcc70612a1a154a131efd10721acce0f6b43c6be07eeab9098506a48aa0cdf315d1028b13a93cfee4a0883efefdcfc123dfe37b353cb7d2722a5b383b1a2f365bc414a3a2517739b20cf9b6eb21801527869053fdcae8f314cae16280f49c8fc1a9f28a50a955a59a33e810a0c746a216e19f5080581e6468d4227d4280a129e5be2ecd2e3e1c699518a84726e948db941d98746b1339e646e282daf8e7fff1914df4bdb3175ed02b9ea2b0b7aa6a1a47dd88aa287f7fc2b535e04df957001ddc6aa08ca82bc7a4b73052e02224d6f393fe13c19a52ca66c8e161b449a7d34f2cbbe6eb186507658bf88ed00c48b5d9a7b8992add8af0901d6477843975f9abed194b4ce4715cd7888dedd4cbfa196470b4cedd5656bb41b1766ac3e1eefcca32413c5631c7e1e041526e8b9b98ce0c08bcd66c9de274566c6bdcca2e345706f7f47fda4065814531cd972fd77b41415aa869a49654d24e48d85ac07384b75327ab467a64ba0db64c29b3500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b51b4ee2afd62f045c73743073e6973ef4e1a48b7beb1167a31f891d0b1579aab5bb9373d74190115151d39bb18e11e9147549409008648e554cd502527aa9e82f1e76b77005d6e725a6269f1e3dd600a0d20466a75c015a46e12d970de57adcc2d4780d7d31cdf67b477237253a59f1e4da983a6eaed173ab9150fccc0d5c4d87dd03caabef8ef007db20c75e5ce2859c52f8f7eaa312b001b811dc58b44a41f4931c1ab9b85b23a8460902397efa3cbf69320d5a3798acf687eae5241d613efe5d740ed164d41a83b1b38ba39c216e4608165eae6b95e3bc1292e858a58566831c7d7170419837e11f62f8117ae210a7b6d6b36cb551620f3cc5ca9edd4e72de53477b23f5dcc673d7057eea5e4dfc3e767c7860bc291a3ad9f67c8e29a84cc423720a5ba445ad93514d2beb06599c7f3c39a4648e0d194cbf13c4b7faca5d1cf0fd727df7e74e4ae8a758b72fc742ccbcb7cbf22369b358f9556c5c3c6141dead11a0052db2374299a36e0fdb7b25b2fa2c14d286e3c50ea816b40d0b3a79d4b94f6537906595df12baad9bf2dd0c6f3dba067b6f276d968ed07f608413e0876f6db8e463f807489921b24983e77e7a08b6b36fd76bb890765bff5a4679f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5f163267cb53a89595690eafc043ba10cfe93ffe2e674e4ada4c4b706b9261b38d98be92e140d99cca31a86559b878f18e93a4511c458d6894e61d1f6ea54fddb21bc2462a9f2ae18943b7e41dd7e4313bcb9e89a73974a51768481e0398defb6c4f9b37eae6e8c3e5975f72afcca909b1b6255843c9b8422b8859f835e48eac658125414472c02558f984a0196ee826106d54e09cf566aaa02cfbc0241fd670972fb4370e9e32684283ca279cc59d30a25decc39ad6499c10e952c6f86e6a2818d4858296c9da68339ce7368882ab78d11211bec59859eb9aa9d8b8b254ce47c795447ed3519c8a5584845b0ff51d688486acd947f3f520984db3e1607a02d3346b9500ff31179b86278fdeee659189f5968c267490d7a3b65dc945480fb24275676c36626823c8768515fe7069faf3f54b4592099d4f25bd2704fdc31053e9b376cc5a57b7aac31ff1724c8f4e532fb7b68cd31abf77e01225ec0886908f64145aa23f0b155f669c1077958479de153e5859ae60e67e6d2da5b669068c719423f8da1d3ce969094077851dd83e30d840d007bd840b52f3a4db1c05134edfe829605fcae92cecb7e5693755978407c6c430ed04b46c3c37991a3e3f69ecae3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019b3d84e8d85bfca36a187f98e38e1250a989314ed6ed9c94d95c24176ca97eff170e7377401411ac9c3af32bbf474a18b97ce774b1a3de83bc4c22471ead85bf836fd66e11ef34b3c00a5ed1de6555e40b1d88fd55da7ec7c9225193718ccd8272d85e9f1a579a7bb9a7b228e36cdbcd3cb4d01a15c6bf3a866d10ed783a164b42dacff0b94d00b9dadac7b19d633602160367ed54dae2dc611aff5026329bea3a7162e5350774fbe0fd2318dc65f753c0182820254994dda59c8ee6e45fcfa6c58258003c1490f51bdaecf4f075e638e2d6fac3abfd4dd7a0f48695cc89254f2247180e403ea66486773d1a808c11f359887b51488aee1d74c5ef5d7e9c703dc443cef0afae93b489a81674670800b13452fc65ff34b43b801e5b4151d80b54443a6ea71f756e661feb49e694a1a3d37ac166435d1add7e5cb1fffc377f7d44f38703896596834752817ffb1d43c102c333acddeb9c500014bbcc950073419924d9f77732ca1e776429dc017aaac1f54c724bfe20746397d08d331cf6d8cf9f06a25cbc23bc77b4c4b33b0d071efcb4f88a281559336014f40d5f020cb41b1c9a19bb46f3cfbbdee62fed1f3fba92cec60c286409208ea412155ce99b859180000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000974a591ac757503c32665abec6df46c40d823f28725cc5359f3d2479873803121fe74f702bf2e3c85f8d6cf458ee5304f8c33c99a2bb0f14bc7d7521026310eb27eb76b25bb4ee5fbd1154c678faed5cf6c77d2a504f2f84b8dcbcdbeea384821454ca3027f2c56e478e3da6bfe4ccdaf58944e65b2d23f8d9eeb22ce801d8807647876068be155e349def8ee7241b6f96e4f901aa0a11a75aef0e37bb5eb38c36af85d75e7ce61b0933a9d308e024082d05b1b3b056dd3cc989e5394032ba08511af7e6acb194edbfdbe969d285516a41e10246d5ec2a70df7e50f3f84061f36798407817a9cda9c1aa53bca0be61aed3a5fc2e2d1c7da8b7c2292e6d1d03d5384fce7619f34eea3440d59ba0e427f7dcc29210533220b5d2e4f56685a03959d9b16e482e15afd220ddbedd062d56c4762fec459732b974de35d6a1c4a4493b57b064cfaf4af5c2d523efdc3fa96d7ea3e832ab4d0d61768760aa23f7913f74dd84d045421c9d48e5a2d5d7608a76717860eb1b32c87c7e0a14d8afc5a7c14d6b4465b9b01727598d94c84b7a162a79b4f439f75f432f8446b3c5fa59e97f84ece18b812aa9fb2d8b1696d0602ea752748aaca002aff7c3597b52c109928cb500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009063efb9e426450646ce04e822ffa4a66ea8d3f9b4954f382f394ed52bc28e639f27357fd264e9cc84a73dd1c9690838f1242d73b0ea9631ae93a2b3eb0256894f380dfd44ac8531a2e268abd5c500d910137c93ff824686d66ff8de5c0cf507d70cd038cbafeda8f8e50946b320318d2c3fec45361e394bac07eda7b2dd9017b701c8ef5c6743b1b8283739d0fff6c24c2e978fe6971ae14cb9319d551dc58870a23dfc34ef03749b1e8ca43b868732a70321f29bc21fd23451d736b528c882eb360e595861d566a51b9c4551ba0edb570864320932e5b5abce1d1e0566fe9f0c0f3621338739a0be4ccd2cf84e192613a04e017d481e0256a243e773b74687d3712281ac296539db4b30302913942e26e12632b01c9bd33efd63a212809786801679c88689d2cafe1781157212f06c4daf9bbe12fe6b7633b888affe187d9c532f3a9aa36d40b11e7debdf867d919b81ef8a0fa9e97757c6995b5bb0e1ac38efac8ea72024712443d99ac1719d1d6b8980ea0ce8002b5683167060bf9c9d5ace369c68b0f42b783f0248daf09e4dcd4ca9d2beac780ab2d39a11ded1555e14cfabc7950750752768f96354b5cf30e42ca005130745e773ea5cf10b58b5c985000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019c36c6e9944bf4987836fbe17663fe612daebecbf8186e44ae04e5d58c3251088075456772535410f1706a5b3ed4e488b3d533f3367cf237d14629d524333c877ddcfe0e2ed47e269c511b67eb18c9c1b749d2249c831f923b15f2e44cbd55149532de825aeb1cff5f5e3d98a6b21afb85514550f8f8c8d54200586685959e8630a135b3de4ffe77916a63b68f3a3a3407e0f6cd679636e837cba76d0536d8af76a7239a250f0163e298b75bf2ead51ff816cd6304502740149c601da042bbbe4459570a957b56a29e4f53536c3c79141808fa9a4a41b8a0a2bbbfe644d9ac060fcec2b92cae364bf096c50e7c5fc1ef4bfc63973cdd6c4df927f19651141d9b8688b1aa838452b50db0a5e116358a4aff3f474dcdc565f81fd54d4da03fd5b1a2193eb356154146919eaf648b46b69b432542f86903d53569123c6e07f767d268b5d5d82a61592e8d2e26d6245c3bff8f46a96b18dba07ba2ffb076123a14fc046884003a5622cb4229092f8b9b38c57571ebad990b61931e11b5a0b3d5b6d9195646aaf7f113cdf66c99262d277cd739c361097ed18a4598cbb0ae4aa8ec016cf038600f0647c6cb821760aa8cdf08a0672fcd6b228c94ddea90f900f8e7800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860473aa9a6afc3f7585c73ae65905d506ea27f9d83a219a82655a006f1de204955f7f1a63377a79e3826926c4641a862822f32ae00d78c5a019a7c7c6e3e7010dfee1a66b1f0cf6e8e5b9c233de5ddcb9fd24474a7932a16395cdecc81dea4d78be2b149c74e4a6fe801ae92735eb0b9cc4acb0e8dfc3bb15fb6e7778bad0cfadae672fe3d66794f2e0f34c0967f7b293ae4d0bd023a6d734392476e4d968c6ae25a7cf3f58d3fcffa0dcfeaeafe4a040abf9dae95a685f870f8263409867681754524f804d114694ff82153d6d6f96f7bbada7a27aff899c44dfed550ba541beb02a55db9f5fdcbf64be00200b3cf261181b63af91877f9390b91f3faabd021f45d6ed5b170ba9cd862949cfa9871791198ac44513bb15faec0a7d4e4af609c1c70ce7c6023f5ce94f5966a5dd96067d477b5598a8cff1c04f157976f31ca696f7ffd206f9a14337824f6cda3b849eb83002aa501b0df7d0c355739a131f4dace77c70df584dc2175b42618ff21104ed77fec6b440e9456f3790af5958ad74ce19735a9af2f24bc08bb37716caae86e3f89e2eff2ea60a2fd6281846ff63efbbcdfede089b518dd3e2ec34154f09f34c155e0a338415c528aa727b4de66f20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a49007f96b3d1df2c11c603b46b9b6d7bde443cd5c7e7e996070ffc417dd77fd529271f6edb9f1b261399688fba93d4dacf9324b55ab913fa0b0f3e4c71987b3b068d8e97890707bf4197c482202052cf91ed5655bb69067db7754f8c3b34dc1b251f4a6980d316d129a6076d2c8dec71efae9e04864b693e48e4ad9f5a99ec7e71ceb46b8b0546fc5a0db345ec855f452d8c1ff4a6d39720bfc23c72ce21a4dac364df3ba685ee1f5cd21a053555c4ef372315598d88396ec6462e0a4d03facdd25daee1211a01022ff2f071a44842e772b46f0bc2856af802ea81f43d2fb1bb5bbcde5b4120ffdd1dc843fd86d6b347592ce63d25c4666858db7e9d36631f666dfbad171397bce00659b2284cf4b6b7f571e32de8796ad5094c29c5d6637139d9114cedfd24bc6d30b5125a00711db98bda369dfb2afcb3d1d0dd6e8a273cd284bbbb208fefc3576a73e45baad15bac4ce8365af09eae9bfa1718742be574888d963105d9d25aeea64d19b083403343e7f808bc743450f2abd6384c9c4be48916ab0f4e0131c16c56d3ad6af92b97fef55d2a2ff27cc9fea5ea9d7345c35b92bb6dc56a80953c3ad66b2c2c4933f50adced02489c374434729f0cfd81c690000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e5568eb5b0897e75c4768aed9c2e9d9a23adfea0db2b336c9519b7e9417182a971d67bba074d9b0eee8254af707ad4dd105e076d867369912f27ae9496d3fe852f6a9250229abdf008dca0c57a3ab1ef6a9dbc9d0c5ae4216ecef670b39ab626c04b1cbb0ccfa8f34d697a8f00ac186bdba6f3921b9d16b4daa0ec41fac12cce3bc57d5103735c3982ce1380ae3d4d1c2d1b5067ecb3a997a25efa604a6055f706273983e9eeb2e78db69e5f54e701cc78f11dce67ebb94926ed96f18d96151a5c7d070b2771879ebf15acb283e5779e8f7724e3e1f100f0d9f064b1e9b46b1b6d6aff8c579a1b6e9b1fd434f64c9e281d17e40abcd9381edf346f6f7e0e56baa0e6d7826dae3270e3ce3bf219b4762b2798d6020a7b88bbea82ecc09788be299d4a3dbfe112e0d254d1d6fffcf37ce764b1f4cd76a2324d6588cf01720db1538d11e03976398ba26a0a9fac64de2312ad65e81fd8d3a7bbd7d12516f6a496b5df6ce8abd22cf72bab40749811189d2ff5f567edca44c723645548acea663737bd85fee2483b7cea71f0a52bdfb1f3cb590f7c1c00f01c3f15573f11c16858635ea9bc15490546ba5c61cc2dbf82fb650cce063e85826b32d72e9c2588816db000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1353d322544d8042cee31e1d7e7d5cf156f28b7c3826a3f3a48b0a74020ef01fbf9b0c82f21eb6e23ba0efe22fb049836b6b7732d436b07d6d12c7a9038a26713c0d2d9f400c44b1648c0ff7793d28d8fbbbe50affa463a1c4480c9e581c96bd7fa575bc0e56a5d8d498ef0b4a90765fd821551d5b9fcb4141d21b9886c769a50a76a018aa203856a638c7da076bbd24188c5f7aeff2a4a899db5bb44d11528e2b4c2bead64d41d6b8522991d7483abcd2b4ad2e727e339c8fa02cadc6e65646cf75992ceabf5fb73bab0bed3540c252b15e9e979ec788fc048d00226b56c10e76fc367e7cd3c7934ce1723a7d292403fe534874c9ef28042d516a6b3aa8d5967490f391b8ad0b9f8dffb8e4f330254e3b15915acd0f5dfa8d6274b43b59436d3337f6efeec049d24f6210d514a7ea27c32da8f10ccce830ebc497be55ff7326dcf59e5d420a6a1d995036dc2cc7f73fd75ae4f8ea9240b86a74e206e911c2dba28543ca81677d3bdc4115f1df76385657fe434e441cf590311a05e1bfe6fc5a1459f827a7ed9aa93861397cdb85df5e00d900e51ef6d6319b00d50d6985f644e5087916a7b13f4838db571f84ca69f2df6f50aeb63db7080e140356fd2da000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089663dca413e1a513b9667ccec6053c44843291dd9cd0a5abbc61ea14d9e48011bf95813241db5a1df6443daa4e1f4fb7e431dc47f8a2f40a201fb324f522961e4c8b4a35c482394d164958a4e8d48d15518b72e13b0e45507e041c45a9fa858707d5b53ec4bafdd405a5c4b885b7ce5c988bed8c554de82ea87bbd14d8630946898dd2d9dcfb7b6bfbb84dd10aa4592041f472984587abaf8ae02c6e1974164a95684c0ad68831a8458fd5ed16e8209510c5761f408bae9442c973b2dd64b0b60ef0c86adc5f4b76f0ee3e248c0f4655723b1d6aa46ec0465e1e7425392a456dbf841e96fda7e133724b4189e7fe1d7b58aa5d1083a2b2b5b39dfafc91e474b861dc390d4d4d6338b9fddb35a47898097bbcd9ac49a032f863b8c399c6871291bd22f11dd13c9a4b100de0a3473f12f90605afe48e239c239fb3368cf01273db9732fd64f89c7a82be2bb53826ce167c76daf6504c716ee2a44c6b7dc47628c51e1580375b36c9ecc4688ca58e38ccfca1f857a59c747c7456f00fb76d1c452bc96179e6ae12f4a0eea147c1ab77574d21794a6e125156ceccb69f5b3e7e63045eaf34c4d4aefa8d2c0432f216e663e37f6fdd87a5f9a9952cf5a2c89bd45a4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012e180213e33e9d79dc4b65b350eccf05c62199036be15be07cee42c265ed88717157af6a66239fb48f00fce7d043792eaab217b7a6d010903085c86f90c711c59d0d4b1946756476649a4b9f865b89cf5e7e43f1a525f0d0c6546e3c9cd91c48a7158d0b2d39fb9092952e3449bf4c879b328ef14ca505d181546ae8266d70508b326e09ca5cc2bce4f9a855ed6bff0424cb4f4d4d3e3fc43ff0f83c11a5d9807f17d851763b80540ddf15abb1bcbe9b3db738c9a83c737c4dd35375db8248f32cf4f476a5fb03b7b8fb87a27faddefad72931cd239a87b306bbd1117844eafb2141bd4e9263f4a071a39b2055e40556c7d128774caa21e844b178f9366e7e3db373d5b2705a71d48ab7366249497019fba5c1c0cb6046afe7b86a4f1bc79819a762d7a3a4c16bfae914ead70b72840be9e1fec62747ff504c9aeb54f072216d59c4291839582aaae768e298e2a8e587c95993a13ff504580681016be211df4b14c27db30eb6a34d3d43519ac84b4d42c70a5aafe90bc1e6af78126a9451e6fca1a29aa36463e7dfcf2d3f91f56db026c3560849b02654fdcde9d8cf559795ee0ddbc71ea0df5700ab7e2c18a2081c09ba392a279254059e467c058d9501d2e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095d1cdd9f5bca297b0aa4e0604f9db9e74210148bc92dcbfcf765e6e89b268e30a553abbc851caf1a2951240bdc34cd49d976288b89d45c5ef6641db5a3f9543c87d7b13a806e0017915f002a61e09f6055f991b214c42b3d82e57f25b3d7e034a34e4736cf190e45ff8e24581e982cacb3ebd5629ce49b60e08ac4b50b294170b4bcc31e091ae26be373fe523228414bc1825a34f4e4b4d758b86434c396c2e7862a63a289404a6d5949d96be5c8ea9e7124eadc3d545b04e02bcbba923758a844105a7aa9d97e91bad1188a10cc40dfb29943c8150462e9de274ddeadbb45bf516ac0587705b0ed76c077151fadc317025d3d01bed80ca885f53bbcc45db2ac87b12f5517a13289240f5edb904c3b87d5cdc8a4f450fa1eda4207c98e2c1351510b92e8fa4820edc8551c6b4bc492332d84615b2c46df4ff35f4012d1e2b720a2b5145d71bf0f849f8175d648aa8d479b7db31f6fc77aa45ae4485a22fd2159936a5b42a61da406e37cd62c7f5bc77923c12f03fe799c4400868cc005d35049662b04dc852a43f4796a906ddb97ee1058ccb88e6aa2f82509fad33b6ebeb86cc8b0a34e162027e2452f2ebdff92f4d98d3b7c0466f0550d060bc0276b62fd8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026b19accccdec1c4b423abad561f61a22c9d61e73e6794e55ba9fefacc85983f14859f19e98811736f7662ecd1fab9959f344c1abce7c59e6f07278a11cbe88d87407847af97194ae3d1d0782d68db49e127f49bf163b31343dae8c07e4c77eef4af8adc81a4b1dd03fb5164fcff01fef8e3a23da25f6fa2acbaa04ae72e559bcd2b082dffb04095c5d62258b8566c232057673a1ae656ff7dddb6548e945b92a72d1f42de9cfbd483dd870e47a57ca9fe7616a8990fa79443547bb1b9db0569bdece1c385a1912dd948eb694e95753f1528b9945cc49f0aa76367fd4af908a6a59848d843d8f91fe76e59d20394244e984169ea686e87f7a0114e27e69480fa5696c67810fc91d71a2158b109b4f9d4e98823732fec97f3c3ff05d5beef899baa05db70c92e2aa222af43e67463f600493a7debaa1ef1c88fb220f285d516cef8f3bc5b63216234744dd0b59891f053377d1eae2e32f1544ab7f3ef3e6339d59842cc06f9f6ac844ed9d0605b861318a56adcc04d426df09c46a2f770c1f1e06411686a88b29b1f3f756bf745bdd179ab50346f279ef9f99a2231c05ae882de91fbb9e02db1aa7ef0cbfbe5daf8acf2f933b173d5eca84705d81ba30525071500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002df586bc2d8242ae2d2d76c5b63037dc3a918c0a672b57302b0371352e9a17f7605ffb377aa8d5cb85b2b9ebc6df0fafd948aea74757de7c4dad8889a395194cb1445d0f0e8ea5879519c8d1761bf797ad3ce2b16f7de2963e224ea7f3639c80c26ad15a171aab92096c3fd2d88880d753ce6f7014aaa23a06cb339a7ab3db0a294958133186f2ee66003513c47fc63e1e61e73debce79433ee786e95ac9a313a1abf37d736bf2522ab017a0d9a221e0c7e58b37cb22a8c9f185cd475a3480da75f03a3a838ace290cc500332e42cc7a0ec0c87509dffc152164d33fdc706de064a8949fca8a0bd33dfeaf1a2857a1a18bd4368024aad50732bee102fb47fe68323c267dabe066c1df57e32c69745ada389ba4b37cb3c96ce0503559a9a984a8ffbe16fdf7d900ded93574b8ad7b5355f2e0995b18989f7038fc81acae63b22c8321eeaf0cb640bcbbf0bbbe63b8357bcce48fba0ab59dd70809982c180bfad0f9fdee9a0802d365381148cae32886a21e0d62d0be57ccda466f3c9e789780eb401aee2ec6f7b48287084d04f4e601a9333bcd0cea4656b28c5e972dad10a8676a7feb5c18608a92063ec5b064e69d86a7e6f934eca1f9cfb952d3b27bca411100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cb5a6e6a0f661946678184dfb03a19622778357eb0c3bc5d211bcb40342dbf8959663e91f1af59265b27dd3d0467137721efc3207ae2ea5b8b8af05ea9e4fa14e123494610ab331f597663365dd8321f7da30eb6dd890dd373d20be5af4cb41e0c59234763b594b20d6c8740fafe378540b159aaf01279bcbd23a8fba23d736461e065c5aaadfc4be42f06a3365dd4970901235375973496cd0c79ee1ad31986b14416053fe0678d7384139c8f93cb902ec28bfbcbe84936cbb94656ba63a4172a6ba3cd00e6e54a01870e791ff322b50b3a73c659b340f379e4b1079cca760d27660b127d9489b064c0173c16e143d34c1d7d7790134728e098d59fd86cc38f5ee4caff9e95f6e6ada3c23af97176e0df529354c0126271980e71fd77693f72af4a667fdf83292085ceb228ee7b639d7fec732cadd3e57f07f78772f98f43d49ff48db37578cc8c63b69543759d695c7f6c64bc35e0fda01aabe97a9e56127abedf060a6530814387d96e7d1546ea60e364487d7c99b96d265e0b897bd1444558911717cc1ce38c3499bb42410e5193140b3d4558ce48b82336e776a8c4e4bdfa76307a130691b89567c598bde5cbb451d9f0f40adc5dc57965a2885adac3d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c5826b4bde0069ba97bbd6a209209e036addb98116de5d900f40a4e97440b5a9553a029c0a5dd445710299944251155ac9c15d5aa599d1c1d40afd0d3a45cb48b73003a4763b2c446d75fdcddbed2d7d19b12d4574a0929cff0a983ef09f11a7922b3740387f18b26138bd04c56d520a704dc204afa035006e5416e3cd0f7cb19eb36c01628b5dcc3218693941cd5ef731b6906206522d8be3c267df6e67760e86345613f22080496fb5fdc3815879d327503a3ad3bc4549f42c73d2d55f39ffa252b9d68903f582953809ff111454c435af1d820feae0e4854a3aba3a430a40f66e77abd1a3068ea4142fd1604b0fea8ad33a802109722de25d2a3c39eb4b231e12527844c2be8e4530670afad99e80202319b8151f59c2de7c21e965de94363bbbc81de4e13c3140d4f2022281db77b3032c862dc3b7fd9109fe40b695d1f71b2facacd396963c38b28f1ced8000cb0773001f6a57df8e4dc2a1f30c26a851d9dba786b5d6998d0b29effa38d1971fc7a8709f5646453f8af7f4252cd03609b466b013de7afece13ec4d8f52e5647dd78782a2155c74daab5bbc3d6cf60397c85e67b3f5c1928dde76f31777bc3ce22111ff06dd6bc25b0a44162fa0b4d80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000912d5c5fdb1e389a5637630a48f8dc57ed24d0c654adb388a5cfb88884f29b0f4bca98ac645c4a54ddb2b4ddf1361d46c386c3aa2f5734bd31a6b9290400821c1cc1e1ac8ca32d51be8e2e346efa9892e3d1b581f2aaa71ea9d25205b3fdae96442685afef3f4c9cf11559f3c042df6285a8158644b6f629e211a7edba470702f01e6976ceed7ab7948d373508a13e715430959bad3c3751faa1775f3342dc305c4651fd9edfe889b3e18e9ecb26284e05cc9c6ff9b3e9cdb13a157cc5d52c7afe700cfcf9888701328867c02e1b6cf8dc38b3d6c2ed3fbfbbe7bf6d3c085b35f89bea4fd95725bac9b0249a7565be58e4cdf2b808042cf508edfc252321337d3e3872d1ff34d4a8c519f7b8366f3b3c57d7e25c51e834d6a305d7a64615f57f26a07d101f4a36a7c1d4b69d929f7da98693a804c13b82aec606d63c6012c6c20b00bab0e99249afe98ce86494d2e7b2412fee2e78d10c60f7087e907a67939f41553b89d6b356da60b79c2de25f4b9c2c4f4410fd5a98e1fdfb845d2600efe3506492eaccf87a9c5e0f015e70e83cdd2850eb78a0d113f16392ec9f7a0587e6b2cad85159a9b65df1d79a4cad8fb9e0b339593f5240a11fa493caf304608c5b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b9dcf7bbe105cf5fc41effffea2d3a944c17ababb796c125aff29e9a00425989a1d9cf12a19d74047cb84ab990bfe49bbd05d304d5de31c0a491d046309baeb87821b3d5d3530afd4bc8dbd0de2f0f14338524c21e88017fa57518cae4705fc16810a738eed812e915b1da36d4afb54d27fa5fe1260e1772d62d4fbb1ebc0f9ccc2920746506d4c0249aed7100cd9fb3d798a142057bc8c2587ace316a6ea922396dcb35c48c4fd0228a62fb1df29bf744fc1411bbef008ad6777d3eab4447d15df4aa7f9775bb00449e15cfe95d9305d22afb8a860611dfd569f050a102a48b374bf9ba20ea5fc00a1dd452e6d989355cec71007ef038cbd4aa5bea169765e9036ada8546b5f754f8e4f7e60b8e98637aebd81d354634ae029efc677c95d357a23c45254e055b4ea9f081988306afc9e99714dfc713f55ffbf66da08c3c439d9e30761a7ae1b7cd6a7efed448fbc59a79107ad4fc3c2573c087d61486d4f0cb24aff26996f6e1759a282aa12d32a2b9cd4bbe13a1138dbcca4cbbe38e8babb7d517eb472b67ace86b8e7bdfbde460133bcce857f40d8afc85267a2e9cdd6bef22307eb00494afd3b564601419d7bea58f2ccb4c9783d2b5da5cff7ad48df0b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b12f9c6955b2152b0b0ef8027abc87b6c3dd24a03f279ae7ff2116a72f45faca02ed16e6a9d72f2d989187e7e40e83f1239e0b67f4e622fc59d9c467c69123c693c51891d968c7beeae37b1e488b337b66a9ad888381e7b2d77155c42b90c6a49a5f3f3daeb6af7b97d67589fad7863e15c5712307c2e5610c316e1118767667ad1da27ea64bef605a5b7485405c1a02ffa74437a849ef9c083450da2b50ea0805e73c77ccc8602abc8f29b54806393d6a8f113577258984bc743de5c75a65538bf74ed323d6dbcaff893a3a1503e4aa3edb808918ebd13e3e73cb0739052b0fe7b15e1f04351cfce4779f803424b4b6bdad6997b1c903d22418c7158887f6a5c8533f9f3bb1e67f21d7eae5ccceb006810c990e6cbf64209596c3d61384948b72ceadd7ec5f21f82b6597ee65c880bbfd2296bacf7a062cb9292376874439c3cf8b7e2d83e81ae4677dbf1dee95e3a5d6aeac4b7f5d412b0fe0936d25b012132969ed6cebdc741f8bd84d282c6fdfb966f6a177b0954790fa89a17280da4d7bc25dbec08a60c00e3d6166eacf01f56bde31c4724fa371d39c45f9560bd74ba5cdff07856d961de5c3fd14797f69ff3e6ea4e89eae619c46ec3f77a5d222f070000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa9187fc27419b443b91fcb22f19a39aa9f7048c1dd15e2f896d69a4fb4b51c1201654d182f2e0974641575557891a431448f6f633eb7a3d2e847e7f51a9947e3160e3da6d3b1278d350d2d1b622873b23563045396f3f0919539d180f43d990dab0c1fd6ead3c9d49ef4a0b1c89db0c4a5af31a14984f82b57f8d6568f75590df5e90a2be2e6b0a8cf87c2a91c5768085cde26df7b06343094593226245edf7eb8d56b0d0eca0fed2d81c3b4c879040c20b4bbf5b2b43fd227ca3c231514fdd67afd47d782c3ed7f595bbbc03d0509689594f945dc75a67ee71f658fe522fede8605c0f3b4d82edad7bde543f857565ce3628dd08333a33438b256a5ab26fc80f251d172e7bfc8139dcb33f560e63452906f54466bf54d7e6b03f95d064835c1c9ec5515245cf7199967dac0982cc452f225e890912783ade55a645b7325ebbfdb9ce4b26f970258af05e773ef933012a73212bf2552b7dea1fdafedae89b93c1627cf1f1a82ade8e978101c9eeb2d3ff70b4faa92d2f008c0432415d3b38ddb290d0c373590740118efc05ea6fb138afe808d87039b3f79dfef7f54170ba89376f3d64825429f919dd66906695cab1c59c76815fe592455a1c2c692c2aba85000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004659e42cf044a20a3c2f3e124ce94d35eb3a054f4c3019809eaf1ac32d6035c55edf0a4330b78f853b787912936e5f0ab601558e2be8791ae3069bf153f3e5aca2206be49cbfcc035d04a629e2edb79fd5be02875fc0de9728e3e1c49f8dec9963bafbf11c01fa8723053c05bb38b1d588198564af34cfb77cac84ff5f020515188b4b4e4c4c6fd1519d7d6f9bde9aa57ac4107de9ed611830ea7c6e329ec01696f39ac1b3c9ec7d7a59b089783ce8f84333ca32feb0541b4de0ef8199ad962d00e9bc0c7e85e74a0e175fa0741ff1084e07c98052582328280e800f85b6b686f9ff6c6dc4aa6ff5bfd23cd3e8165166ad438537a3707b4d37e73e301d91d1c5fd4d923ce8b70be265d9bffe401024cbb44103550d8a0d3a0a724f473f57d657cb715216ed954223b1d0a325baf06112e3912e8a6c07f2ba651173939ca1e75b47db4974cd78459a9162d1038393302fb4bbb1d5c91989e5b8872d70150e83bab5ece29840a85ed1fd0ccf54e8389130492c82bd7b1257d825839a13af4fe00765c8de1c541b403382d76e3780d7e7292b0cf8de57d2ada5e71b5d70d14810ce4a0edc8bec64b1522727944fa2acfa583436eb3d05ae3923b6a7affa4fa85bf00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f3be6185ad47c217d54da3e8067ce0ebecba3c1cb1080fad1e4b9745bf5760e65948c3fc3d086a6899195d7a6d7092097b3f9552366d94c6ad35f93aa399922acece4cd51f183a65ac09da8aa474252f7aa08b5452ec245994eaa9e2acebcad0b52624443fc56bc6c1f5eff326635d54e00d18b83ed8825a496fa2eb1fb4a77398a8698109f587cf2bcbfea8ecf80c8456319d3c30e3c42c0bd06114eef82df9b5d21f9d595f67176574245dba421281705ab57ec244186d1042fa004ae161b67cf4faf3ff1456fcc3abb915a6898358d0b68ddb17e884c496c98fe3383b5ff0718066c4aa2c738edc1a80a1f033686fe213c9f57dd9842cd093c539ec4be21894d58ee1af0dde84682c847aa0c99ec8019f5c00c9b3b39fb6130d84dff7194e2fca81e65665c5281915d9d9dc2188cbb01c71d0ac5ada6a56846ace9d32d641a67468c6135c58a6d2db43766073cba955cdef8e15b442f30fa4747e2b7e7b7830caef62e13c5479c0e1d8c85370a5379cd0e37303918e2db60e338e128bbdea70fbe1c2b3d7c0ef0ea300e8e2c30e837c0486bbdad4a0845db10a964cff0c7820a32a71e8c96de90c800681535f065343f623a0c38cbf57e2b5ce77b3fa8270000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000946ac88718630c83585511483038f0efb3e296922d10afe7ab5efdfd311359c1b1c7bbadd3743b94a1484c7230c15c01624831148e4f2c75793988c828de8b29a244202c5e89a86d938abe3a7cbcd47f1dfedc836412e6aabd722d7e7ddc3441c445eaf686d0239eb038e83e4e6f96e59d7b87a7cf845af4d0630aae879d6573ed1ce8caa20c110717da8364f5ac003318252338fb655ab971698a1d521bfe34cc5e2b22635cdfcb339de4ed065b2a367cac768c5803aa88ba76ed170bc51e71a73acade6a3e125a7301984c09d0e9c08948da11dd443165529f3eb761525a111c14cddbd9af2663763f221a9930f86e26a892ba1975a2dc230ce35a2eeacc9f4b72c2ba6cff2e896d9895694dc15a147d084653a6af0692b11daadbea4ac8f3830d1af235de7c686b957ba33ee6f20a7b69f72db4e2b32f3a9caf82ac90cc394bc64140bc05f2458a3ccbcbbdacbe2a84615ae7ddf5eae0dab356fcd16929a4a66ef92d729f2319bd141f8a1d89cb028a9856df8d827327dafb87cbe90479e91f1791437465e9d8c326134b0b363dfb683955a8a2e223fe27ed345e268d3ad0a4aa6d6e88c31fe37e6ca6fb263154204cbd2726944ec9116c06eb6147ecd28f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ea842b75d8fc9ae0bfa504544e9642587d74e1884449bdb1714b34a9f8e7d78279ebb3f72d8195aa9de46e3a475aa0d90c42451b3b85147fa3cf598e3b22613794211db02e49b91ab64a9991afb10dfbb0c013dacd159b18db7a62a7c756b0e23ae0ffe881257c83393c1c0f17b5d7deeb47073e3e70bb5de25a4468fb19ac126a6aae3efb1c94b0f883177b8ac011b08ddb85ef153a55ba372d7964f9c93ab331282b7eacd599064ed709bfa7432ef9eae65777ef35da8c2fb6f3bd79181261bcf3a4677647c5fe594617eefa3ef0232b429f034598b9e86936188c0fa96669a0e5365077ea172035787a6414ef9992e657c919c25ad326854744e688dbfb6435d6a72789ee8cde8747ade8506f13e91ae05fd921390b279ed4d6e6bf8bb41531c9ef80bf1a0be547adec977f7fdecdf6c70a042fd7ceca25d87682ad466e33f70eaccaaca752a209e014342b10aacfc475fe20d8c4edfd60287c200c48f5e082796c6cbc752af1ba86160d9056c149f8f93f15290bc17eb925e09c417e6cf41c38e8441801b1aa87387e7a327000b0cdc480fce18e0928cf31a8075bf0ee4f7176e9498c79dc176d456fa0da23556c1f5b960caf8ad8af4e1392f434db9ae000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011145e10a9962025f9ffb44f0faa5e297d9a00ac1a8da349af8ac1f4c73f4dd9ed4de4841a566333c0ac46d23873cdbc91eaa3ec6806988981558523bbc2bdcea3f16bd4163f24b7a7c1197b7a31333c5578b93185c935a77df82e2d11e4749d29c755c6e2e9018e8cd78d63fdb3fc5d7f332cbf87332c9ab7c649057a2c5146b31ba8bd5ffa2e4461000cb3fed7193faee9e8fb6d3a0f11640a891f703b275c0f47ea8044cf37d04e0efa040cc7c22b76d388d074c21c0dc9c544b5de4e7d6fd75e1b77eca805aa1350d39435ebfe909bc5291f992b42eedb37536dc3a22821bc6ba5120153408926767db4f5205f7c386f6727d61d918326122b9ccddf18062ecbb95deefb4c3c1ab39ac1f01944db80432106bf9a00a09e4a26c109ff5c89683f3a7ca7eca984cbde13db651514f9579552acb90b8705100a5743e1ef35d59329f2aaad4b7e4c5531ab7fa2859e2afff96f84d7d7d5fcac624b30f72169be596e6d2eb76220161ee166d1366f1e56a4a1f3bda90207ba16430eecd594db177c7a61f3adec4aac4708be7079df1be8c6e25bb8d0b93d51dc12657360ceb1b0d6978579774fc50aac8a1fdea7958d0f54cc75b721cd38e3a40e7fa3192d15cc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200d3e2fd5e53dfb27906df94e78f3c53a7e71e85249b7f035bc0ecfd03122426f548d6416a358caa17ce43bf83a18758fbf6d86899445c9846458b188d8ecb56905f79ce86f188478ca52e7d809e24c2d580a056b8513e8b1cacc12aabb3ce87fa8a3a8f97aec5e687505bf10721a545faa4637c9b22925ab199161d4619dc052886420016c5ae457da23095020741ed7f918440a7d1a319a9c9cd7042792f8550fab94b42169e4dadc0f82d4bb34c0082023de38d5f22d0a2e101c7042f5a1513f7e6adef9bbc1020b727c325693120df9fdd4853a40dc0b8ea17f0b02cf40990c3212adf275e0fe757e017db677fd1940e4a2eff0ad32208d7e5c23243ea7259c58ab3d76f67edd0a24a2adf994a5e55844f25194199c1e3754083b9bab95d3d89d5f4fc93bc11cd2710ad6eebf6aa2626626f13ba4229ca50a58101d04954fba91314d4983083810ac8e372a92fbe8ac3fd0c6fca7d0ef7a3533514d4ac4c51dae664d4446d5ac809a28f2c236ace0a759b5ca9db770795552aeca1b3bd95219fa30cc2e43f92987f1325cb8b82868e226db5f0e5c002ff350fc37317e33762e8d5d74df115790649cd855125dfd6d155de7e155471fac2953735e6db456000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093087dc4d04c8c18ca8cf1e163f574da35cdf2844a411e0a226526f693ed016b0cac693d3ec1e1305862ec28e48bc90a31ee4cbd38aed3b84822a5edb773437c20c2a10e67f9f7576d6030af4180239851acaf67c58a4f95d055a8b3e31f47ca0c3697a7c68eb6fb89e124798d380a655d44a86dd6bfb9165404a95fe37327743c6f3e81442b8596ed9eeb9c870d41414c7ac11061f0f7a5210b2fa51cd6a8f22b52443ffa50371caf7f1bb4854c6dec328c5d789df16d62c714e99e4cb856edb36528c55091fd39094c2475c174d572164db0f78df6a67bbaadcbe05badbc8ae3a8358ee472cceb18b2e4f2a0480628482abaea1d8a904da157fecf6826f1d430387b30e0977a3efd9c3aeb8989122fc7a62e28ba78fcd2b0e507c4af097f136995bb11a534f6970df0e0f6d9c28afcfa59c96e7e36e4ae8c3c7264ea1ba69598a630d1ebdc314635d386b0b09c0d910d86eb0db7aa05ce55f5c9e60765121049f636ea532f834fa24e8e80733a68bf7282ae117365223da720cf3f75ecab3054869afaa6e2c7188120f96fd5b438c9146222e6b536c515729cd46a567a03cdfd8174022da9b687e04db43b731004fd152a63e13838f11ee7c3706cddb9eb8300000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48402039e404d70255dcea38e8a08ef9afc5ae115e76ced019280639173c4e78f785022a3faf00ceca007ea4831060c0ea29370a9f9ea6da80b548d74b6ab8f0b1fd2b308ba16191ef4100a5d3532e5ed8ca7f005cd2fcfeb3802cfedc1f159b7c240b624915419546cff58c1ebbb7c718300437eab17eae855f3b6613bcb6d31e6c0caa486429847bb362de8336dd807530bcdf80dc4e8b03e6425222c5739732ec0f4710a08562147cf37071b08713ad5e657c6ee7b57f2bfa11bf74c38573cb192b5a1881bbbc930d9a03c36094967e4f9048fe20f155b5391cde0de3d8147b271a65d0fe80f9cbb5500b34c80ad447b37e2c5527ade45422fe6998d6efe8d60e2a89f25a379ea2275e9b86c8779d6daab59fd4d8b6e5d13d005c5ad3dade8c290bf2e26a91c5923691cd3086acfda63f2ae3d9f94c2e87e352b8f308a64e6c791d48bec84582725f4dccceb496778fa14155bdf1755d9e8edd36c31ab2d1d1e40e19a361430641a2789ac1a05a81a7e0cb438a58726c113b3a582f1762bb0bc42ce7c2113a49fde0012ebe64765fd8e6a7b8dd56cc55f2380ac7f615e167937106c679a5f09a68b4ee05cd23b3d94d0af1430709da2fa0e1e9f1ec1d2cca32712fd5cf516a9185efef071d4e04ad9d5f5681557db993c82caf3a7b09f217249b2321529c325fbf48c1872d01fce3a93a5e5a66b376edd34d1c887c25f48baf5f00054fa6caae61c107a5b6b02150c45f4d73a036ddd40e2195c7f718b520810c0fa91ae217b96d228f4984b4f8fe155965e53e3eef27db6b42283bf261b5cec1038fbdc64726c838487d7f4c741d3db57eb5869dd4b00deb070d34edf84516b812770971ce276ae12546af45541bf017d66c7e12c101e2da5327399cb66d68c423a93ff992bda462853fe1bdf8f81b46e845439ff27bf25124b5d97c5cb8fb382c824d51291c84cdf54326bf6211d0c3ae4b1b10e3a285f166a8c1a7008316b00705ecd3e8ef595c531194b742c1315967d1e254c13e2448792cb84acd28517000df0b746b9d3ffd52834f0a7672febb8dc75e5a6d2d31a53430c37667829c652536ba0931366ad2d2e1a9cfd134e65d657fc4885ac562efa9fd468efd38ea25131bf42331349265b238e3ac52f2196d603f4770e2a4c3dc924d7f6d7c1d68cf1ddc51c20ac39b1e8e1c5d224a0deaaa392ed7198d3e388b0aa3e9dd7deb097c1cda8f0f4e6757c54ede0be02b69a9bbbf45af3eecb335794aa1e34e96a03e2a17770528f9bbcba33bb13e1eacfe2e6fd3119a53ccc3b6b03c4e117cb73eb473099264772aed950519e2f44eeec45fdb24c38cae6507087ec0a3529825c0cb8a2221bfa1864b5749328c5eaba33b1f41dd39acdbab18b7b0a60e10b40a8f530a1445a8baccbeb23aa7410d807975a89692e0f190e5e07c5ee79ca49706d82227013969f9a28ed9db86f25800a9d7d93efd5ed4b7a53f457652293bf29cc972c80504e5aa3fe11ba8ac75344b1e8a63e162531b2e4f34cd6a87817b68a52935e81de260d317a52a091198f7aab75568600e14cacce39d4c24dc364ce84650419e2ae983a340a2d77cc3d0197b15a8ec5775d884534dbfcd89a8c4ea9a7e5042fb2dea9f8ae73833a3e6317ab7ed9259e701d56820ac9f453effce3b2266fe666c1290f119732eeb7653dd1acb4f8dbbc192afff677fe1864f8551f398b901a7f80c5342dc263c4ef995af3b57045632a5040cbde2093ccaec5b11d38a33a79f3103e22f6930c975ea82d18c1c192896a8d5e521a4f5a49c4062ca4c67e7ed856323ad2d5bc9dfbec9d1fb08c4f88309558e460c4c0a843991d467825d5ce489480ac9c41c9dad12c62849c330503dc28af8795dbd80330d094e373cfa2be8121710cf08f5755e6ae48b5e998c9c38044352158f44e47eb2dd1419fbeaee1f389922ebdf32745547978c2cc233bc590d558ba28893e879506b5d1607518f92a7931fecc8b3740cc8fe50a7c6f7a50e0a1773c6766b127e6a785f7dd0cd6221964f21eccf4602f4a5e1a794cce8f706b40b33f570e351f01b390ef0809b28fe2843079980f77d00abb6b372be29105e478a0aea85d3f810676568ee16b703d6bf212ddd374ca3b6111d4bd4a0e32378f3c8d3dbcead4ac853bdbc1363f1e7676d9b07cd0e7420cc099bdaf7d7f50fee5df1197052fdcb55062814779d7b6946e3e40a5ec4af1c464ff5346ec590c817025715a8cbc25fc4069af062b710f5db12bc1c1c300b9efe3a86f5b79f93b2eaff8a260dca2035cb04600ba30d31a699a6761387a986b32688fc1be05dd85b6d821df0c0db2d1d4dead72927d1b66f6f6bb21600b83bc342cacf7f392e4bd96c4d62d37bb5d9f2e918e47963537d9ce227692b1633f8058a1f4401779e7934d247754eb55443b7e03d5f2d3b62105c8aadac24839f5a295743e31ece3a28535f940b374d8244cb9766365b3e9eb8293a3b1513ff1e4e0a6d3375d4d7fd497da07a3702cad2769690576fdf6bbaefc8f293d51233008c748be6f49ebeff07568bae09514c7bedd143607f3ecdb0fd212e639e0138a1a654212093e2ae6b1454be85d4d69ca66782b43da503ee2902d5d8d9df03ea10ac6ffcb21582800fd8d6a537504b9a7b606febe454410bfe89a3fda33d1be732c4300723118704e918608813a17645031ae727b2e3076cc3a201086caf0aa1345d0e58921d25f40a3cc226336544ccfdf4a07bfa2b15e82eefc66edde720b43ded7188c660a0875d169a990346709fee1915cbd229843b8638291bce4608ff67cca12f13166647cf22648d023aa597434476f298141fc833fb8704284c209611a033011e177907bb9302a8c593eb9142d141ae5a8624fc1c69490e79bb400864b2339ad698f34ee260594602ab8e0dbbd3bcb1c79a439e81744a5422adf1148b6d9806ed7536c4278eab69289e17f82b769eb95920fd31de7e7373c0efdb2ae0ca608608aebb4cf919690e8830fbc67c44e33c26075ff4044c56d6bcf6c51bf90beb01cd3d509c88cdfa642f213d9d80573f03dfccad3901849ff002cfb807a438a527495dd1acbbdb43bbe180feff240e8de4b899d06e002856d0cd3454135bf5b7823c38ab2cef981514470a4e7e75cce99f8392a48bd6fc92b2ac51472bf9e35d561d4782eff38a487176381621fed6b65451ea7519a39984b014625006c5fd32999939976f7e6586c9f9420967404c9caad1ffb007cff90a9d348068035540227838ee807ce04de15748fc184134733f43926744405c60ae18038f70027a6b317aa59411c7680086411adf8f31df34bba41efd1f1b9164b85b62e2c505bad38fb9c9318f74a93942634316b2a424e948003e66015f24e00c6a71266b113786a2e982af37ad330bbe77fb6f5ef7f4691fe2b593883a2ba2443d84204b0258d3f6779439eef9394f48399e4962ec7bbe69b5f22ae1c27eb5980a600ee2247e816dd007eef582bb88fef191518c5626896ed19e0b88764db1a44d54f9cd28bb05d5f0bf2275d50997bc9cb4785dd92e57ef65d7d7fc7c33882babfd0f7312ff17897e943b19690f531fa2cf08b81193a0754e01b78cd149b7456ebf14a82027badfe45fe80ef9d71e29d011a0269fdd54ebe983b5d1455229305eefd8182300e6b98218a16867a0d0ea11c41a8c9f55403cefa7a1d4280842ddec08f73a21701eb2452dd2cf99ea9d560d0edbe6f281bdddc1f3981f3e29c6a997c1e2020e2f34aa115e53885990836cfefe467632ab09811d175ff1e43d59e402980197008a3c6f9e2ed661d269412d4d3d4248bc899e3be21c56927bce9f6359b73aee15575041573dc8da93fa1bcc4862b49f8e94806ab5b046700eed065f7ad9e77306316ad1c25180fa92044e44a6eeec24ffbe1a0fb5a7222dbe4ca36e317a902524d0e43d7bb984abc7dddb7dbadc6563011220fdb1c776675a56e386c68cb25c30282750c35c22d215c2cf25d19714a29558bc2851b0a8ee071fcfcc69f814db17dd9711293b9542efae06cd9192f5e20164a456e10109ef0da8dc20e103051d0610d96974e372d7a66d8e22044fc4e5acedf560ebea58cd8ba8faa4cac58b9a24b37d4eb3c4c273c9f6a18de57e420b7af258a8fe3070ece94fe811367deddb2cfd15a798615460013edfbd68e34f60cd2722fa5670f0cbecf987275ba877a10c1a713d54962e36f0b79e07b18e99397c1f1dc4d73ea3adaf60d3ed6877fb8919e2fd7e898a74e69666d1f40eb6fcf4d4ae8e103e06cfb6b9e994091d5e9c9b2f5d7389c2f348c207e4f0d31f8a005345c52df7aae2663490f9b3485b62f32d064d0ea716a29f5073618c3c0f897c76275b4a7cb7b70b09e9402252c3f7255821d617f3bf37761e94401e6ba0c0f2fb51134d66aee0d8feb3b66cfb725931a713dd042aa6b21506e9d663cf069d8f59c2699ea4b7591cba88b09b24187437c61d0b2807ce46ba77dc1240bf6c1f976239c4b7b6078c51b1b70c3171eadac26817074e89b6c86934f0673e928e09c36423523313537d33a3b62185011c606387186b6aae8c787b05f74c595ca7d2dce8f92d18b6a403341f7eb4a4573492f12c1e752605b87bd06220463a1a58adc04c099681026752115dd3006a8fa697c7581ffc18cfdf997a034824f792d800a8f3f5b9a01b3a7428cc346910d1409dad392aaae214dba4ef1a0f5eedf1fc5eb78e5bee4937bb8891f8ed311e2d7d72fede1146ab06d9b3197b56315a7f699dd19a600bab879db3df131fb0796feea8f599046568e9b7225ef2b0110cf71ba7e6570180007d9a86cc45e93ae53b0ff33b971ad831d73da1d3e4e997d035217765fcadab0d1a82eb3a343db93948f18d0d0606761f0d9356ed703bd1edcd9af0bbe50b120704c1042a5e2d0b32cc477e79d10d782a535601a9a2afaacb050653318679cc2423af2fb31d4cd58fc32559110f25a687353346cb00b87fa5a8d1f920f6c0f9ea7f1378407f04309ae407d19470099d46ae14562f87e3083422aa473e299a0efc1ebb8b4bcd6f647b5b10f820ff00f7f07f880e264b652da1378d5bb7f0bb98c6f84d9f921e65fd152d14fe1d1e26b3c1ca94b20a8caf5b03d80a08b74e3495d7b1376dc3860284036195de6aca3010a19d26c67d4abc1d69d67f04eb9f5b14c97df7aebad0b13b03a246833b870edb10642223388fb1d33054e6bd21c73a29a292ac9f6fa1b9e6d58a2c42842a2d5963647a7a8d8ed76a1c8d8b562fcfc5daaa5d37125ca76a3b463a9e7c05fa0b429c51c88afa1e7bb0e0721e28e2ec3617a89939b2dc5993da9586a34b21500354dbd28aaa81dd372df52092fcad4c85e71ee26e1c685c980e0fe424ac1b400e404f94a4ea4a2f1f19906294decb325769aedc0b82bf20695099985861ca8e00e298ef9c09d75bf04b7644a45a43603a4c5971cc7c0588155c7d39dac887d10bb0e151346b4fa34e3bcb538412ef2e876213525753eb67f659c0d54b04d5eb2f3685f5e19694c422ad7d0bd5d0e64b6b0d0fad0f1a61b48bbc1411be8d0c282e751e1478b250455ff668e3c68482ad8f0df7ee26cdfd5127d325bc1460fa921d03d1a290b12555941a996f790dc0820e76be3484e35762e04874cf82855f902e1b0ede01e7ac181fa0156b7b5c0c85bbf2018542afd09a38cc3811851446072e82812feaec983f29525b758dc112fa8c1fa3ecb305292f7a051ac0cf35e5671f13cd88c69b601e8117d320f1bc0f9101105d589cbe34db7c8be7ca96ef0380003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000028118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000280d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000280a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000280b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000002829a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000028141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000002825e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000002812978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000282daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000028189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000281159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000002805ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000002805c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000002814d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000002803db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000282ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000281213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000281ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000002814fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000282b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000028305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000028280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000028223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000002817a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000002808858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000282618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000280f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000280e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000028172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000280b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000002805bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000028137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000282e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000282297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000282608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000002818373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000280422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000028204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000280afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000281998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000002828d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000281da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000002821d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000280ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000280e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000028107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000282f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000002809726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000002824f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000002803c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000281fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000028205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000002825110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000028283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000002821cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000028094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000280c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000281f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000282421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000281fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000281bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000028304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe500000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000008100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810400008100000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005c017887deb4c8f69e13bf92b8fc5e46338c1c65896b5d77b304f41e33fe76682b12b7f5ff3b3f81b34a33dcaecf1d6817ce8da2c2d9589bf3c898cd2955d13197a60678e3e777d98315f8a4530903d548bc667f17bb72c8212f7c12fe4de82955997379fc0d09cdca75758847656dc3e2014d0aeb82bd8153d85c1c2bf2951e349a8c0c778f1d9e2e76fa7122c89d78b653c2c9a7e761383644ced37e263e19f9c215d4d7143b69169c567ad64c8d03bbf7538bc2513bba088360081f48c0961debd85873d89d267687ccda475f9d5a65fde0974c665204b36f2826102f913e1b065e8ce03406bfd429b44a9aa27ff185fd5c58b71e386543fb573898c36a0f20d02324a39468fa7af6c88885d150a7543f8f88ff85347c13b2a00c7c8aa5ef79e9124787b07fc5b6e22650023c99e78c4851b5f5a78e09908487d187c2a361bdf379b2187f32de14d9713c02e24ff323da91bc7d4bf5f9b0701409607bde7758157027aec20b16875c58d0163ecf374806393f669856a778ec64e32d29c6a4a9f3b38a43ae92ea278589ce58f53b079194a439ca6988b24b7011842532de24d9afdbd21cf960a6433cefb897cc2b5afd8f25156a3de5bf6f70900f506dcc20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000992a26e43f7f38f825e5147b74cb6eb007fc5a0c086946b4e8847b6f25aefcc9b53bf347a341d6a3ae8c8056585161c563956cbd918b55e9be77982b3a219610b8ea980e3a70b1a991e67cd7f47e50b80b152fa82f50740f5cd7b26b6c567952f66d496ee93184cd1ab445af8399f93395e9daf9354a3b93c8f42f543953feb38b16b8a7c262b88d57dad450d93e36bde5cdd1c7826aa2679d002cd1405050871a9d19a11942f1b9d16216204acaf09d37658363fd877effcfe375ac927bc9f5c69e6edd200a43fd05b586462af638675a54a8eb31423213dfd46cc89f58651a3753c7e0428a2417d076466c7aa45455ea9af274e0184a49288c5a9c6451c9898adc407fbad4b3b7d29509e72a39e14ef2b5de41c0aea7022d75f3c8a95b8f6f73795d5e72399c8ec05f39827f284d43aa20bcbbe0fc10ed3dac44986df5dc8da038baa9f36a60038ca3863fe34c405d29e171fdd2dc597a286121e4b204aa83fa949695ddac2d3e3abc00ee3dd75102c904fa4949ede4dc88bbe72844510733688342b05107d154c68c6318e9dc16f4c92e0354fb50f23be5aee3bc2b831aa212c357ecae5fe50972a015222ef5e95474a8be1925bfcbd466a9cd023d7e9f500000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a737d2da01be8371d268ccae7a1c83b1e70b0045fcabd65e331c41a0d92b38d4468bddb2ccbbfd1ac8692cf26cbc7a1edc06b392c4f97acb0430b1aa240fdd855fcd06c9514dd6ca39c9e1edc6faaa6a0bc95e79d42fd14bbd26c3bac3a0dbd6c6d112c8b56cbfa52ea8a7257ad512724b5361b4a3642740941f4df883254a01a5a950c343dcce70bea2e3f8da77d693df32c02837fc05803ed56b794ab06230ae14ca7a170971c9237693ede8e98eacc1235d7a9bbb8f92970f234b666077566115b0ecb21a4098242e2f6bd9a36015885a4fd7f8b2ac0a06dc78d5f13368c8ec49422f210596442ab2596c6dfb8cd81e42b8b751dfb8d62b65893a876a218391c642afd8684a1d3c5dedea85a81e2fc07b99a1cd3f66f3d62da38749b91e7663adfce676150a18702918e22c9f8fe56b1cb5d46994f923fb9817d4d9712f6604df4084eb3ab6a4d4d5ccb55795b5481186a51b494228d72f10a874e7e9a5a2a7e4e342dd222f90f459d1cc24d5879d283a16dead55f111245dbc3ba87500d4691b89da2d8100d1b5023f7c2dd0a60c9bd1da363fed8caf84590ff39014d6fe656d0e821b5c86d417e284177e4abf6925ac4c2045553f26363a282c4a9571e40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d5d8e01fb3de366b847a8a16e9212e4dc38c46a872f0d433b152c0bbcb4354286e06772d77af02794e0399773a0ed59f6a8fb9024d2ea6764c68507f730d716226a4e82542c364d090da14391c72d684c3fdc94de185eef77bfb5415742073b9c0ea624b43b9b1512661a2a36fa9eaa8f38f3e2be2cdfaa2dfb8ad28697315e1c6d47bd6dea2a76a833f91cb6d6c0d5a8cb6a2124ae6bc663233b3e843712219d36c98b9d41af3bf2973f1530a628c278b625632e41896d649bbd27dca989cde37c8d85d162fbb19b247ae4bfd1e801c71f7cbcb3d600959be6801d9f5d3963b905f7b0fcee996808c037c8c09575904af36cf5122a9242d618e10b6ed1baab0b362b2501fd3ceaad344a1eb8d66903eaf3881ba8e103d3cc48fb001771aec9795f477c56b7f3803d6a463ba02344b2f6fc10fb2fa13fb21b58118fd8c1cb10122e53a42b431aceca2125f9a63bafbe291b64792cc941754acbac1540847a27b1150d40c289a44afc67fc6ffc066c7eaf454d4d32900783e833dd4dcb5be67fa0dd60db4ee2ec405bd0a1041c0453868f7c493712a06b0ea026bb4e8cb4ab453c8953547db48b2d1de0a47c4728242a821836524949249cb19318f5ce9271100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001967e36662cffe78e7d5b371a6d1469670bf3e670d1cac076a5fa80d010b38b162b4988dd4c15e4ae334da3289d3cb6ec0de76b024d4bd1bd41ddf0ecd831510df975112580ce31c65a323a2204a02ad086f1d3fb1a67322ddfb3e97c4c0fdc1d6089fb517a29d50517cd6d257e68ca40986b3ca8567915a2444391b5c97e5fd7bfb0ddfb15b4b5bb30023887f7ea3840563ec5a461772d0df2ab077fc3359eb2916c23c5ad38652c02bbb00acebe11b798bf0dd6d66cf61b002eba95a1fc3448bfcc5bb1867f64ea701cfc38d53b56e70e6f9dd15e169d05482b246ea2e0f113c30849382fefe1db69aee1d7dc3774fbaee3f14c089999423365cc941614081b1b2e19abaaf7b3ad5fb20e8c39df6b2b1a1e0a03000fe5afd4d0f3ea2539b612ca95a9c6d5533cf5b2e0489f8fcd49bbaa953ce1ab33557c7b446b3dfa953bd13b68a5beb3ee7c43c3841714b00aa522c9c1a6ffbf7e4e48f633b5959881ed4915237b553b6da4845cf6c293de204aa2dc2267d4576021af5cb4e1a5a8996cb110eef593b91b9843a5e319195a85432ea1798d6cc8af1dc427c02559cf52afce25d31824993b3692e6a463453d2c792348d1599b00053fe062791415e503c6b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009302ea4f0179db8d4542ef8d1b9f156cd3589e6a6e990da57ef5dca7f46309543142073711cff0e777456f7c5d56fec43f88f8d034c6c68f1acfa892742d9de7001ce41909d88a0a50da18cc9ec2bd29041e29a626cc6863e0a96aeb079915c558738d5c395d0ffc99ebd4d26567107103fade0178d0995d16204b5b45306e0fd469593143a3427aa1333b2ed5489f6614b726030d5a7a97058e96fcfbfc545851310249e4a8d9efc559fa2d0d52943f7d3b83fd6f1bf7537608586c29017bbdb4c3fa0f6eaee5ba91414e094ce5e97eaaa339cf8517a32c4b48872f4a060c2bd59e2d926b3c020f0fde06a8df2b47c850cf1718fabfa2c5b819cece82a26f67df92cd32345698ece23ff91ac5de6fcb5008fb565eed2e12a4f189afff0af0569979ebe47570b0ddcc9735fa41b91d4a38eb248c5fcc8175e316a7461696cda12176a6d7679d0a17be07f57a7c109c3970a3da1a2a3e2859bb6318372798932b65ca46904cfd61eb96ab5289817356fb0cd7c611f736c9c44e001648421ace80d3e1c589a295a8ee7d567c6ee6db6466ff497771afc7ff8926c23f204b6a439933662975c5a0a862fb570dcce648cb1f0843776cd43e1808f727a571c7c9df01000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080903e36b4278b8d678ea3bdaa5eeb87973ef4ddb0334e61dd1b9a5531d05f50ed8dffc7d9f46a5476365282f108f09aa2ffd716e4de3021bbb32be0ae1c4e8742ad3bab385fec142bd5b9e941d5d2f7f78a3ce8c9caa546969b7d70214add5b8a6e80408492d32bfb76463f861321c40044f44927616c9d3cc152c698e14dda5fb8edbf62ad58a7d272a06cac54859645e675ea045813d9434c11bedbad17c060f8b7e70db167785c971876a4fa9b8e2b2a1d0d6490226ab4edeac577072c82a4b04965b5317c168957b05376c46b8b5a40ed64738ed69e5bc6f663bd12f56ecf1630ea753a8315b048abe41e16eaca22b8bc5c78a00827e0ecdc4bf0425b86413ba29147fcafb915929c86b796d0b33aa20073f0185d7f4b32e115bf99a7adf2fb1b0128adfd8e1a6835311686eca2e765bf97e4162692403cd47bf274a4c8bc997b8cdb283bc00a22a00e25fd204b1cbfe79f4db43a2c94a44649aa22831f67d0f25220d95dd0fe5aa486b9be11755856221c7a385653ce161bd2c3a9bd63b466debeb1290cc61dfbaa38dcd23d21a62c0d1c3fe922108abdcb90928225b45ee6259a805513c297945e944c2e3bad2f4aef5d02985bbe6f3c4a48ff1ee4f30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5eb0b5a6c895ae0c42501d79e0875c2dd0a80051ca8a9e0769a1d8406eeef9d5f8c94d8ec6f63ed7d10676d1228265bf3f58dae0558a20a6c45abeca643ab7a85481eeefadf3231198b1a6118ac0f4b79465b989b3b5b739f1620edeed3c06440849d7fc26d7f3b343155be2cc19105f8de90905c3a480f0b38d83321a65338d10c52aa4665800c1fb1f0681d8fed7add5c012944ee272c1e39e393a823c17bcc7f780dcdf16a374d86ee9e871076792b1607b0724d20261d3f500e85849c4e163ffaf6aafb316ff7dfb7afc55b5d980ba63fb9e6a0cadb0f8b8d890f5335afdf2f3e879567738a94cd3ef7f995ec582168ffbc2bc0b83fe6d2aa429dc8b6bf90a53eca9f2ca5a18096f214bc91a80eee5195c4f8039e572130a222a4ecc23d3dd1ea9146f7224756d94c41fc6b58237a6e03cec3df0ddcc195f2dfe78a71455c526f4d9156bc6a8ba85652f421ecfc8ac5717c7bd7a5f677cea54b81e6cbb58bf503fd5babff74fafb02c5fe4c2a6ac9be1d8e601a799a9e156cd9077f0fde050fe0d506cd3ecd66dc3b0786c709fee693e437576d65759a9e9b48565cde657c7cfb0976703d57cd724aab0b7f8271172d6dc3b0a12347333d8b1afee0103e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ec3a8dd113abcc79e4e071f52f51dfd3707c502963a542a16f695a2490e1b735c2265eba4dab86d3e21af96e4b20449697331bc80779f6b40ca381865645019e1a84ef2131e5e71b6e7d5172188f848fa910df5c1790a2476cde0bbe60e557be39fde0cb67a5d5c4ad4f4fcbaa7c64b5d39c542713118ca9e06a04142dbced64145871c05f8f014112d9b0af84f0eafa8a4064d70c5d3dc0dc82ae95eb47e971821e9b2a9334e601924548a5232cd3394685f5b0d0cd8ff8dbca4aa3483649ac5a6d129d5c53e638de7e9855c9c48d043befbd5e49f33314325f53c620a2b1accd543da3b3bb706ddbd8c147c494b4ad2a51374c0addfa31401c4277ab86c785acece2987c1cad5a82f7282b942e6f38ae66914ef85a073d03c4661e32bbd19a4c894b83b3538f1e3d8899c3f9a2b860948d3eda362354d651582540b7b18c665f5c97b6a1c2687ec3ecc3e22f3ee9fab735e94a84d51681c5d51a8bb9c4c74f4710663854f94f97ac44ee0a0d3e8bb574db9cde82dda60a20c4393c5ed208e2233a7b064f0ace7dd7d3958a4e0fe586abd9540a7e11f4bb9fdd4d0203b3261abcf4e3904e54f47bf6e4150b73f0b1be83c8b5898865056b4dfc4e2e45ab11a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000836c4f19b9e869df3cced4055b2f05c0def71881dc09d45ed750b4cba99de9ee81a2ddefabd923a01f75c5550293ee463486e0a4aebdc45077010d21e721ec99f307a0e2fb9a6ce40e2bf34abdf8640c91df84096e59ddd1873b56b287a8a980cd62514a97a15ec7378faffb3179571fbbfab833e0026285b5ab1209e1667eb558c658042f602a64ab99a4f7a8f6f74edfaddfa20f73b6fe7b57d2d098b660c5569bfa4c32dc0ba5507535ade4de6e9eb460de0b809d7de9bcfe07c6382f8744381a26b5270c6e17eb0e5ac54c6acd01db49555a7f58e7788643b274df815b009ccffa62b5d2605c315142bf32c9c7c787dc2c96e734433a978c7e3a5afba41b74df00104cab0574298cd5c9834bfe4e29d424c565a21f7ad707e72b4b35e8c39d6fade3c32304fd290e1ffdea7005f0b17c84b8cfe6046ee54954cd571b4230f7a6ba2c185f546552837b75da2f96b4ff379f07b28b93f28375b5aeac17813eb5ec7b15ef5da39f5d4b1bd9c75b3a56f8aa244f625f1ffb98b2425c1d6a46f512bffb9e12b32280d49b706108697a731ca3fc3982acf38dd882003b21dddeefbe0260487cf6cbbb541d514bde1949f140e0b33b7dfd35809b5ec1ff556385630000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000197fb77f43c4347c79f4274c96e1eac854af37f43e7dea4d8ed661df37216d0cfd61e655187506580a9d22d12fde8b35bcea3e231d275142db17ff385955c21de7195fbaed8c5c78e5ca6c171df24847288a4822bd9f04928b4b75317f28d1973f58d875075d4538768f50dd2db3b2aa5ba4109ade2b78887fd9fcff9a390e7a59d0a53285c350450bbe05d785196aae139223da4ef7830faef8f14e6275bfda9b63dcaaf874eb847d0363af33abed7a091bb40e3c72f9a23f67649a80cfc8df4285e3fd0b5025d8be36b0725c916e95e97040846045714463e77f94993fb308759cac4305d33f484eac867b76b06430cee4a7bd0a1aed0291284023accca1816547a0adf7834a7b1167474885322ab6dc84ae2b2fc5e5ae91dfb221503c8d33987200f61b39a02da92f42e7f54c1ecdb0924af2f50d5784f8a96fd54a90bd78f4592c127b2db59680f10191626c93a9604026e5c8d09f4b97b7af40ee93e1655385583d36a23ef57a5350926724dd65c910232069b05a64970a3364c50449b6c8665734aff520629782c8a70c6fa8532feb7f33427ebd20678b7448f5e9f3a57b8a7583d9ca197e17e45b98edb4fd4d3e6fc57880c8975c239314cdff571f81000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e62281b31f0f0c5606fbc50744a22487e392a2e11353a7b21908ed806e8a59dffb2852550466e3d9915d3080c87c935cc25443dc6bf249d0fff74bb35c104421c6585c1d25520b5abf1506f0aac6b864e3a56b11392e0dae8236d605288e4fcbe07746293f3bd185eeb976a6607841ad5f55374f54850040cb9daa893d05d9714992a12cc19e0d46854ceccece701933558e4d9f896cd883f3a73c6fdb533d34b9ec8589cc6b53db7bc137e9472a3a2b514bd2193c2bc640beefebe5e73519a42d1e986d5cb6752ddd554dd9e3ec5828b345ffc1f4113f011aed885c3acabeb31adfa31e1f11385fa47102a60ccd26e428fa3312159af3239b08b0c829e8752c6b88fb5070b4b8bd816ece1384bf13ca7f88d9e3fa54bde6d15e863fba7e1f24302963d7789b799126f0866805f90b05c034c9d76efdf8601755b0085180f94d4416ab0945a307c74c41c54b5e833a273d5c7db34f3902b9d9163690a61adec2ec7bcf284dc58a10aaf7199693eef497a44c8ad5ce985c0b26d0043c33ffe8c40ad7814c5bc9a49f6d34481124d86ca4929647b8fb108fe01cc35101c54a5a4d24c00d5dff6b324c78295427c8bb46cae2a1a87f1846a950307acff350ba6400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d573fd0b1b060189887698d700a08bb63229104d75878be4a2df431e8e6e4e329531b5ddb5c10fded055ba02bbc0bc4093ea664fb84a3eae24d10fbe1804037f882daac0cc84da2a1d307f6a67b69cab7050a9fdc6a53e97730b12c0922b3d728c590106689a013fb188d444c4c1d26cf6e2cb1b3449b1dd498c5fc75f313ca55d718d475edba0984fd36b5e6fb97b7bcc0764578001fbde0e7f64c260e08419eb50d23a7deaced19b3a3a49a0923dc91df7fb9e1e7d3099f059212084cff467bf1b3935ae9ae3d96767bd229ae746d8bf7d3cf13197545138e16c27e9e7a8186987699136dccb6295e82d63e0103373715ec8036d198558478386c3a96a41ba85b393729117e455541ef729efc9de25a8b53e4d32ae2d9a65e062b002dd2dc8eb9821eb8e880f2114cd3e466729a745e8d2170625682f7b310b0ea644bea40346d360e4495e5c4fb91ee2fdabc707b8abeeed2b5b516f1e5ea37482e09589d5db8d3413e52cc3f4841ee27460838d5d8314900bbed4eb752d4139be20567ee914a97435f8c62f6059b3e6348697452d0e0cc4f598b65189f2fa978ba9c73d753f20c133a0f9234c3401f289054d06ac33af84a7cd2b45b2f436eb5b8f7d4900000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000802b0eccde3a4b1cf57dc53f008bd2eb0ef981572b9a031ec4a61f679afe8a962ab43c11b2a3e987e3c96deaf5e6db9c8fe66349d7dcc1254a71d476b9f52a9ee859049de252fee2d1ab56855e1809058347e33c90142beeba2da894f1c7281e0115199a2906c8eddc2c9336a6f4afd987638db1e42f181ba0a41bf8abdb4819fc792bbdacb8202ac07d0632fda360efedf9de60f563ae9332075062f5acb9d8c44f2694450452f8959b4c60a8427866897a437b3fda60a500b545940116acd7644663763bb70e1238c086e103b12bb138c66f0fbee4fd0d722fe43ae2c503e32000ed031518a22d7fe0d248d087681ca66176e6d4e4f51bdf768d2c83e724feb75bd24ef9db567f830b01730ce43da93f174677f6657bb5d80f11cc739c8dd6af607dda19fc180aeed32f107392afbf42f9038a5bd64fb8486e058bfeb2fdd37f209ad34ab47c6ddef4e3f9df777c7a9232fa6b97a86ef7f78d67aa6f482778a62b61600905d719b3ba8d0ed1020d73a29c5a6ae2f7529d7338010b009ed86abf909df24fb1e5a53df9704d2c7f4dd6ba971d1cbe65ac0955ad54fc7fe057ea31f4c8c2bf17d22ad9b39fef6e5e1988847012f74ef602c437c72aa541f87a7b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a68e44918506abb8f65314f27ffe8568f26ae0ab4decccc620c28013346fd4c464b6142de8a527d13c7e3971c7c59b2dda66817ba7d623f3f0c5eb8165929a8d44980ed50e4a248f190d10d20de9f71271f7427f24e4e15f75f583e0123858dc6c9b36fa935cdb67961b6f45e4b174dac06e45e6411c376708f2eccd8ffe43d594dd5e7c98184fa94cb47bda42bec810b51b246baedc817bb369e57940aef58cac825b3db61a12911bf6148e74e229e1a0fdf75c584d93b4d041193051ce3f6fd9d1cb618c49d18e6b2db9f2d07b97e98f4af318053c6e98bd2285499484f5dc7842dcf559652fe8caa518bde95ee1aeb2a8dc26196f60e3895e76ecfc5083d21f55d1e323ba5a98de539f4a7901937bb06d5dc4712af3e7a0e7bd400c2827ffda767b746f66daa364c674c1b1024583a7c9a3719ac2b398dd8883f3760d5ac0bf5f0383d905a0cdc4fd63d9efbe8acfcd00e4163807348d6c179e62eb5846e295759726a6dee5f8b31c8687e9f903f310d4faf8e7ef9d8348e2fc61af76352f40107cf31a089c8054f6c51bd7dfa1d92f0db2b7a7d07bc4f835e58efe98f55f1c4eaeba6dc82fd269d8824ad6d319a6996db7f7aa137ac00a91e3d58b85993f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e25ea29884665ec47048bab3410900eaa675d060cd8205e18f2580157c25f2eb1afcae9aee9352fb7acf9d7732090d61977f752c9fab9f38b058d6282a82e90f6cb1a88ff867a52bd0515a605c92a1a15df544bcd5df6dbfaf4c5c4060c432fff81835cd3e214a6163bf74195cc0ec69308d2a4e95d630d543ac887761e530ce3f37c60f1d1bea1ecad553087718cbdfe8e622a6df135a35171e6b814bfb49cb747b712c417a5ef702f99dd769fec6367d21283ad10c8c7ada961bb9236832c17d0278e90289217b89bbe7df0f480eb95eada840b967fcb8b4007e668a2d142350a4db663dd373d91ded89f43a6e45fb2e489349f7e2a406708fb488e57412aa23cb7442f956e3bad88ff27ea0c966e6e0e4f77c6d7ea10463ad084c20bc42f0e8cde99cca5559a054355635bcf4fa99fbe795cf1cd963dd0112c3e468f0e2484f08e99cc2cb5b321467ca1f4d7200f8771509d5143ed3d8133c453cfa00e47c1d7f47bc7d103b8157585f503361faf00ee6023424fdd8f1abb041edf678b44976589f94ea2fd202938b241e7a1683b6831773c68728eff55556f306ed40906ccbcf0838c6b6ea4473d98dd84f4f28d6704efb01ce76f4253cb5fe73f2e95b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a9a9ab8a09c593dbae2a984a9fd4a60e62082a86e9c681573e1c04d0bc34d717125c67b3f741e75d920f5c5df10f575117156482fd3a39bee53758ccf46c91f83afa3a93e8c6875e4fe4f3db6afae0a5917b451404f06e3099f6fc7aec8740c95c95e76cfc1cb6b66ac5f1af4590e27e7c35f82a5f0014ce8c5377f0f365185a0eb4607b1ac57ea08145a695654c039a23e38dd1c7fcbd6c201ede7ae96aa34034f0550c67722535db1c3d4389d1c2e6eafeb45198439fb1082f41ecc69b60a675a9f54a71efe525110345fee629fb021b522b5188f6d4c178fefe8d09ddac25e12c0dd5a9f0a505354b0413cdfe3badfb226611eb0a3dccb053a3a2a8fb3526eeab167961f3f246e8462854d4f63d03a6bf8b607a9db0de06e1be38868a019319b520f12a15f633f4e62f7296edd6fa16f806846a592422e8d21d680632bb30940a1b03b49d688859afbc6f74eec91bebddad99a14b5a6b62ffdb0ced5cc52b25a93c1c6150e30a63bf2c769705f34d0d56722ad4fedd5f7e257d9ee7de487d7b2e2ba73fed7958d1fd4175230105ce0fd5826ae2e65e0443fef0f458a65ac47767a67b7b9edac70a99971338d76661e0d7180ba53f8457b75463a4856ba95000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008be9bf295d7ab893bf1872486be4ed5ab72b094608833b6c6bbcd313bbf200ae66c818e52e57c2e5ef29d40528c7e16b101002f236dc17d9af5617dc5677e89ba84d53a56b365c46a24f57a3430409d08abb3dfeb8a83df8a1fecacb824c24b2507cd8698da5eb6c6ce1f382cd61698389fdb76ee63224bd41ee0816382a965942b6c035934b0b894b3f2b4b53e3da213678696e9c5df2b464c587835a63cec52f28d8f37352e8735e652405db1ffc03ea847cb0b62a866ad87aabd5c37a1ad313b42ab7fdb5e1631abe516941cc562c8547531a6ea0d1e21f3de32f61a088563a34d8370bc9b282b8b9a9b332b733cc988a5f9bb25ef1983dcc7b997d104a5e92fa0724baae528255ce8cafb2181ab87a85fdf39f4ac3fdc9bc19e9690a70bfd066f3d4ec40fca8e8befd3b51bedcf846ab51dc7711f93a12aa99c6e826e498233695d6ef1fe9a34f9b8230c1ef8dda0cbb7442db1fbc1bee5a175ef50bf27e19d54753ad14360590298364d17a829a5ed0d22c2fb712df2b4929ac21ee4f5c383fcd2ee238a7cc794be069eee4fb217fb0667354a370dc5d9b6ff0fecbc3f146ae1dd804e50bd4a3cdfb67a804d1f849c849e6fc619cacc6e0140e57a9a3f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f918174da84fc7536bec562fbdda6284e59fb4037277f82f8cd5924019105221291c1afcc60c7b1d9a32f8d5a7cc52be11fe1a5c6f0959b60f4cfdb60b1cd43a1a3ef0acbd2dfd8d5bf137d18c5e12ebde50a99eee73f03ccb3e184b00f25efd8e70c55f6f913ec56ce0a0fb963eb0166dfd4562486f997716ce7a20afea8728f17a1e22272c4b670cd19b9ca9de65954d4f72584be7948e8f449be6ed9b56b7df68c1a9fe79780a3f87e985c550030da56470ef4db5da7cefde2b036bd9a04fed0674557c9c8d2cc74c6615b1d211c44aa6a59d0682e33f922239df73c534a5d15e6b9604b7ba654db2832026dbf5177785046df80f6363c9992c66e40e6717896fbb4061e6f874cec30c91d9f9ab52fb5e495ea3e4b3620ab129062fde0be9efb341321ff77a1bfd20d8d19969cb1dc1e56e1ff9468be24451b996529451426d4dd96ad62766d238d1dc45ab52cea39ef85b41e5206711ff3715c1ed6addee17fa7c24613502651cc4e1fff6ed841fee96cc011637e34e2109a9f80b031a0df24a5e7b1bc63c906a079aa73ab1595623280e41dfd0533a320de47f10a0222dfb364716e61ff482d5e5b4bb161d055bb5680295f44a459427f19f9e811fbc70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000844916c22b9c866063bc72fbdf1e1530fba084af803e7980a4ab90919fbb25046ea759e35cfa02fc221e5b8bb0b57f3d598503cf5ed1d7a75c82f450c81765a49fa50cc249364279c0f320e78bb815da4ce793a22c9310a89db4b6bb3b2d081b4a5f9672bddd0655fa7c3abdafb66c9dfb00becb566db4c86b00a4c386077b4073e6ddbfca99196ecaa30354b52babba59588c0e9ae2f264211c987bc2f4174de34ae9df926726911cdc82f8dfcdae65e7fe6a9d65352138f2b4b1bc23b92fb5a991a9d4139ded3e9c8d0594c36e359ebf672b7c090fa11abec7e40473bae914f16f3972e451fc73a438d0c9df91554efc0c35e25689ce95bf8abf932eb70d9ef98b807253fee583e7f8074012a30a3d542127edc304a348557172c04f7e0a933ba0b5de71741c3a5893eee33b3c8fee046882575a89df349353fbf67e98f2c412030d2cf8e2b6a42ebb3c501bc0e69b22229baf219f008df131dcd1e8bda64816e148d76edb51a6a7cb1684dc52349bf4234282555f0133b9d89d0882dc13e68700309cf2f3db7ccdaabd7d65dfac73b9a9ac9326b921d85c0f2eaaf3893d634d8d13523ebd4801faa7112953e7ad86e3da3bd39ad758370381cfd0e792763b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000abe312e43260cbbdde725f8a2c69dd8c018251273bf83d0d3009d9039a322c34431f07e5b7a4456a166cc56f4ab03050bb138894969a782d3fb6ed0dce44a2702bf9e026245329b253d7682b11eeb1de79e3edc769cc0c399c304dc399b668d9602cbc2befabc78c541318d9a768c1bdca15ef8e6f6014056f67ef0bfa94950376fffb2ab9cf9aa7082496a6e3028464b94a7213a348a68d9f5d7e8fcfd26707909cb922fb8d5c1743210dd3a6f34f13c49f20d3f906f50ad6b9cd17dc197c45b665a45231e1e560d12f66b00f1ff5be8b0799793cf35909164c55855cea6db3cdfca78f4af0f7e689644002c3dac631a50003eebde1b7fd48424d7b4f154ac1b0b0b69a24167ece6ec665df39a9480a2d443b7d8bab248cc7c8c3e13fc11cc6498a9a119d4d387a3c11b9c918741842996d41f5bd106f22e70eb6f2134d86c100ee6294d80f017cbed21ea67568861a4bea127c07a1c6d3bb258473a3c4ad53610b219303f232d1403cb9201d2ef6b594a87ad217433e373725c7cecc51377963b23da4d4b486f6aa908056e98a49b5dc4ac0c01e65b28b46fce1ba25431088c58fb9cef94eb9b6e578bb52a57fa0a4320f1079e3dd419280cda883961cfdb4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099674fb377abf6cae932134ab047374bf9c2fc6b6773e74c49e2673bf30c1f2abad4fa478000aa0cc6dd557a05832394461dc018bfa77d33a8308f6a9c6fbdd1f273b9705668e87c1fe5110318505ab370754d23dae61263180dffde27ab314fafb93f792f922387d0880ce8f636b7a9761ba895c435b48eb934e3aa9650efdd706fef99b03541aec4dd9d37cb809f596e528b71210526a1d9db7e91c41ecbbf8cc70d54d695134f71969cf27f6a5fdbd92572c5f54d7ff0733ae3bf972ea3cc610b3f48161b681262e24ecfc801186017aa80ac0f1757af5e6fb7e180c40c564aa3e212ca39469028596479bf4eaa54ddee048acd2b05a1c67c058883c500ac20b8a7bac2a9137ef81e2ed43f6ffc1e43741c874d89ec07d076fa121822e69f577fff182eb763fddac6aac6e690ec80b2e1fc327c2fce320306501f68744e047b3524c139e22bc1928dd38711536616fda0a2c2de62f7413fee3b4b282e16af4baae63876c9e8b624e216f776d4db88196197acc3eadf718a970b9be1c35bdc3c585324f6c9beb676f94a326a4f0fb12bbce64179f0ae004af0ef0f33dcc77896c730250e42fe110ba0d3bb38772254dd61dbf43cd1cb10ba36ba5ff3bdb8df000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d26861c06582e94366f70693823af856029ef36bedd684658a2fbb112b9273cf405f24eac5e85b88b12049ea9c1950267b9d3aebbb5c873e5360ec7d513ba2cec9ffc4977a5cd15f556ce6a738cfe8d459ccb16ea31be5cc72f9b3ed4668ca07757b9c860d20e64f258b7754a17521fefc6206de4b0229ce7529f72468e4329933dd760091ebf7ec9fe44716fe0071665aacb334d690f8d0ba7f59f0dade4f6cd1a3e470121b258894a7956391729bb0eedbf0d8b4dedf2728c765d19c20e1baa835c1d19975ff0d4eef66154625ebe7e4de21e8194d9891faaf76c84dc0ac41868a7262e4ac65e4bdb658181f06f94e3beed5ee9e9703e62547e70a0e067abfe1f49bd7b9dd8cc2b9b7552d11c1697e309c4cc60fd121a27c1f5eb4a4ee684c55d38ec661ef44d28dd4d435b4e4ef1271687b1e1182a70461ffbc4ed33034a21c038f5746acb2fd58d16c6fa86b3d4c796ae2b46a1e688d97f1528ea722725b6eddc61eb26e4fad56b05c7df0092f0090495315859544c1a4e69c6f6f2114bcd3cdbdac11986937aabffbddafc2e936fcc449f0ca785c0d846dcaae334edcbb3e95a599b030d3eecd2b668ee4695604c42084c12aa003285c851222af9719000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e87ccc17f37549a84a34b32040aefdfafb699be68f93c3cc0860b0d507ac4c2abd15cc60dae13e89860f815075196dac225797b92a5474e51b57075e1ec6ecc2ff587b3ed29a5298a97d741205c9dbc244f82ce0459c7ee4c2aa5e52735d822cd04c869db17a172906bf3c48a7676b3084f6597a228ff885c3bbb28d265739c58364db61320027845740ab6583ee619cae9a789e8f9a546018419d2f81340570e74ffb0ea0c8e7b3796635fbd1d4c2cc22920ba4ab15767b9c8b933d80ee4cfd16b6930791dc84e4553c355aa9b1d9da91cadebf5e6b8980853815d8c615d1c5c2747b3dd7df0691caa4554594f710be08a90f56fd2c32b3412bb52e5135796afdf2e0822a766e53928be4873d9fd2b1da81269f150af8e9f26a793305192c7a490ea4c1999e2a55f298c87021d9714e58153ff610ff9bd5dc912c830c7e20d558a9e534fdac759b6b5d6bb14b4117e09621166821edb623fbd3a1dcc1e50daeb165774b3128e1eb4e4320055889b6eb5da2597851b23643b0772ea78dc4993b6ac15e2a7d0513060929d6bec4f9090cf896f8ba7553de487e3cb540ca0d86a65c310c46fd8800735235a780bc60a410bc4e6c1e1cce9dd67986e5f3f624df0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8fd93bc23ae34c3fd73268db94ecb83a51254dbb8c4edbd74dbeb2897bc86dcba68c98bcff0057e77c553eb6c379ac80d58b0b9882f3ac46c556c40398c32f9d7177c7f4726974a824759f869caf229406e3a39b455558f0f517be7c4e758fe9245e6c11281dd72c5751960e0a19d099739d79abe560833570abf8c4e5107d5cd494975610151fc31259c56f7df81232c0afa5120bf7d4e43f9d9078a8e499bfe5a5394ff6564c1634ce69e1e8ea2c44d254cf0594beab6fed671f03aaf7a26e8b5046e8267f3d8267d885d7a582ef844b4f8d3942b01943f5f66cfa67aba40f3cbcc98cf1f547f8e4db3d8c59ac644edd83265c6bd8d3073f0bed5291d950796198c1360f472413df58b5ac64302a57d8f7df0b2448db6ccb642b4495be0b3ca02c7ebd58757191cc1289248546b8a279c50db6bb1bec1d97b059c52532e82fafef311c6f62c865d89ae1d916257e6d4fb21a89800dd93780b3c333ec695fe2db42275850dfbd9b8818bc58ed708520ed69ca702ac09be24cff0df66b56a334e2244acb7d1f8e479396971dcb5a36fd62513bac9f6210c042c2710164f570ec9a28f0bbefd577cbe6409ef4b4ae0ffd12f0d1512222be9493a769c9e4f31d900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ca5bdbe15b42ec62214ec8c91d699f5052a4d5d92e0007dccca906850610d2ae3377ce82b6d4ea7d586c2aa19688cba06a81b0f7b07fd5b9aea234a30d57230ae102c90de1993cf710f7f11e9da11ca6f397707e89aeeed0a481544a41004aab3a5cb0cd70677324ab99267a21853c0263b239c8aac461aaa26fa79c394462e03cd3c2952b809d1e35a7cca7b138bea90fa73ed489ba16283f62adbe3b6ec77fb8e7fc65b08cc7bb4d7bbf128481c3b9a5bb5ebbd425410ab4198b700a410c5703b42a5115d37b263d82d495248a10990e11c049c9ac43eda98f499955c8988f3c8f7ac3db1eee1310a61edb5aeaa4bfdeb78e44a8a04e0680fd5848b3b09b8911b8b9e51b50614d6e461c419f039c959e044b9a75b0b54fa77e632894997bc2271b23ebfd52be50994bfde3feaaf39767970350f3f123d053905db56cda7c3329b34a92cffc3266f4151210605fdabddb9ac859cbd1375b5857c04b8fca19018cf2f7a1c3c9370c55de858ced5aceb93de118ca08d7c2c0643c339045f5f4d159d516c51ad299b043afb6af39e140a1a8d5531eb5e31f544f2e700eb8eec5834bc92713b5b40e287e1d8dca590f255ce9e03c7582a80e2ab7308311fd55e5500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002105e6b7286504b56eae9153e566b52660974f642a0c0e8bf63bba45f10e1cd34efd02545f73739f5b3727866e1ba7041fb340f75c46b33522fc0990dd15caa989f23f431e639db1addaf8c117f3fbd26a90dc206a78e04f65c40599bfe097c6a1e52ff95167e220d85d2f52285378f5c076fb950cfddc2dfe90e149425a5e218d4acd0283c388b6d22ae655964f40ea7d1be9085e62994122693d1696af119f17e4ad287e25adca54e9db6e29403b67aa7efc0e5e0ec2676bbc4eaf5c7ddab0bfd70ddc436292c70491fdc56193bf67257dac92a12db5ddff71ef654c105ee0b549ddf39a85626b85d3f7305eb37675c743d4a4a537ba26785e280daed485400a07e015d25e6b18e13b111058205bd474f79f4af4864361a08e1d519ba55a92dc00b3c60a4f3ff79f1f5c2b7f57f4f352c20b61ecfed5e052368b4c9d49877581de11c8ae941d5af46a6e3c24a51a466e9ac12461e317df4cbc4aa12a251f87283ceb6713cf0b26f1f50ced2e52e2c4fe48993adf47c01295f3f0206f2fb3aa234db8dd39994b1240c0d68d7959cb5eced038ef64e61ad63a08ffdfa4efda3b404a919cfedf281aa697d4fd4bdffd5e8becdbdb821b8ca359f2177148914fcc000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006fc6f145dd9f1539ce490eb0f7777637a269ed48eddb7a18f9aebbc6364b655ebb65068e6e1590d40b4ee36ce00af08107db3907f03f223f503edcddeacc3a061800ee0a34f3460f313783988a5d31ad2b8664e51e1e3295b7d81e4e9ece39fc52c5b719a232c5c48dd48ea1306b583b67d9aae0643038fe02b09602bba31a37a48c4862c92d8c98de78d66ef4f5f955b53f8fbf19949fd60dba1e8ff56347f475df6493800062cad3d542162478f370b4e682250a34deec04c89db768555d7fd73c1901494d654586c44e1406433716fa4b2a6918713369baa3aed0a9a7da760c58aefdc3c409c3bfa530ff0eeb0b4ba2933684c75bdd2ccb90e3f2f04e65ea11bb3583426e8401ec5bed79730bde11ad93caed537f8fdb0bee7e8e9ba4e13cbfecdf157c74f57a3666028aa7cd9de9c38b7afa002a95655a8474611bddc774cf03950af1ad2d1bf4745d6360ee0f68a11c7c634e54f56b6cdd7f8bda3a7b91ba1c9c2613a8f92a2d83465bbe9bccc6cd1910858a6b468d67724f10b0c4c146276fa79a10e54d2cafc313112c7f573511726d85ddcea1bff91f346303b710dbc55d7798b8fb858aebc983a31ed57f7748f025e797ed2f652d6b3fc484ae3b2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029920e858e019d6c1ece0b40cff218c0a443ffc63cbc2d7aa213954be1417c99e1e49bfe16d411a2f2cdc9719eab75bac6de20de366a5c6679affd7c341eae4989cd944defa09ca7f02dd74b26bf456ca785e52bff58d81fbc11a8c0da46345f854357320bad5e10535559ab4fd8b5e0bd2168505831ebe0ae31f4db60158eb1ff8dfb14a3a4e468baa269d6ed7307bf7ab9be3791d0c8c74527491e01151cdb6e1298b9afebd667fc274cdd69ffa6bd730565f8b578dad23204fa920cd12aafdf0697037e8983d1ec1b80c583c58f0b7bd1f7cb0a988d8355936be2759e13a01f39c77a1251a7d141d0db676a3e66efa8a537a7fc863b162581bbbdf93297298cdf885573d6a318b60201f129e537fa722bcbe4ecf2787d984f30698003118b7739088b007bbb284ac1d445bfcc3c67fc06a662245f58551271ca591bf1a6f7f041668670a054ce6a52f1ebf46198ecb237d971fbe097f31b3aa1cd4362f3ab832d7de3405983032768820959ebb31df9dbcd649621e5bda439a01d40619dd492e64de7e525cf6ad9bdaaa3940eae6389630d9ecda4aea641e4f687edf75a20b33b06d2feab2a8bdd5df06e14c1ae837cdb869f4a72d35d3242b0466c3585ad0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aff5ab1cecd97b9a425397d1ccaf4cb737c093ef318211277a8fd03d82b394825243fe4a8280e03ffcccb8ce384c3c2434880518df73da163fe0410ca8a7adcced60be64ea83e55609423a569ac24f5bece4665c0771784543078930a807723f25f005b0b54bdc1b3f59c69ed3d2f4cc7a59ce482a0a971338cbd6ce25cd33ee0f114f6d178782008a26f6e3a94c00f70ebbe5f196259fdd3122a3a1b66b43fdd7d13bd95ebb76fb7b1eb04111c1c8e462f7f4247dbb2b704e9253f4c49b7733c617d8810c56f3844b25526e6b68e45fe857d9fd0442082084cb1ff6498720f0ea2945b392e52363f60dc05b1afbd4114496ab1fd9e65e9825c4d6b0106db633f30184eb5269f49eea1c220685b4949b731f73ebcf087927a21349c43f2689003620bef14d693c70558ded809f83882c7c5dfd5d0bdbbd849934de83899e1a64d990c229136d2676554820d9a41ff8a98405f66e6664c0529c462283c3242ffb3a5d6b25fc5cd94ba4b1165aac1790f55915c4ba526a286f9b172ee209998ab49d9e2d843ced98202fe13d2787dd8e25a18106266a05a8328e64d09a1f83b9ca1477c131c0e61b6cfd08132ee1b4ed36049caca9a7222d25c8c7d8d61d3a7fa500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002128574a8cbfccbff6a64e470690d0dbd2c7ab0a2dd8d26dae931ca48b5a541a46bd19a5f7f4adfacbdbce01adf435b41aec79b5504173f9dccc0787df31de6af2ab67a8b9f3549f4d511c8a0302e115477336e074473fdba68c57fa88006b1ea9f71c2bc40f1119d8801c2e0d751c9bc5cf44683770d1b88957ca135ae4abbdbce58fee7a142b8ffc6a97e94fca876f17b53ed71ee4b96237c9964840477f98db747de6a24d05560276acf542d2924a8519cce04ee780144515e457afe7a4fff559d07af3a40398867e79225a93dcf0ed26d495aa57e95d4287abb62992397925af9277e75d27f0002fd128ce68a2b534f3cd225e655d5a07f0ec36e2cc72d97e095b908d47a66b0a90e11fe0e28726386031b055b31fc0684ee847a4dcadce3126386a4973337631815d09b75ff568f5ee0a51f8e201a3b3dc34cd29de7201063c4d7f6a6c92e300440fee6f6f60df64ff983d6f8c04affba41200c3b1569d05a2ec1e94b4be042a7d76388e25eb025e9b8ae18301fac6a8edb56c7c4bd0e73d8cafbb8bd94276de115ba1f8ff7bcbafe7ed3690d3b8bb9f7dc97cef0e3209df94e1e5d6ee97d04279e39c52a6dd1a37bccfbade549335257741bdb82225bf0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ade0e72600885b472654ad41b546ea1f1ffa68f6b31b188f550e977136a7235018fedbd700bd126688d948a829802d3aa1fe2dc1c5b6c01f78b31e9f9d1bd9e86b69a58e51c2623affa2b536a3a2360de960c45e2bcc7f1625210133d43bea1c2dc3f76fd630f8f37a037b95fc970d8fb38a472a1bd2b04fe18289519620a1d32ffe417b2bc50f5b88fa98bf425596d57df992494335384ace325cd35849e03e5a77fc6ad9d53eff48e243c2d381e9ecfc0181e609490c77280c4be32c1cbd2b7d04f731cd2912eede6a5d726d07cb5d5e344b5c4857e6f32aaf9a77d744840c9c00e6ca6f32988cc368fffb39940a90190fca4f4e6442d6f839f0ae69709c5666d0ef210573625850086f69931c921e51a1e8d4822e41faea7e225acdc5428ffe647e12b0d92c8df4404eb57e29ec564dfa4ac932fae0c2f5a69644b3c12f26c76bbc633ab3f61ca3fe9c0249ca2208786ea66213868838de5d8ff61b7f0f74db6a4f3f6cbfeb0f6cb59e3845834781adecaccd27d7af62dfb59b23bcb275477e194d282d6003546a8743fd6c67be0ef8870b2d7978fb8760e687fac6054a61faae037358fb3dadf0ae87865326938431114896c1d9549876e1c6faec8d828300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f231a0ff1bb55b7011b015edc601c66abe9afabcf39f9c6e9278aba417449c3148574d2be40b6ce30e6375c4a3176458e52dce07787fc9cd2f1a3fba86e7c57a69c168857960f4b1b31a3d24ccb5dcbde52a02247dd74526cb3d21ff27b5a61ba2040fa9aed5a5f5285eb72e3a7452c18730b31be652798ded2d91d6519df49f72c78f19e1c5801a246acf39a733949fb177ee3eb2803f8d89b34be9d9f94552369503bfd373aa6ab4099d9091414c64f4d8d33cd0c0dfc6107a725f685e074a1fa21cc1d2c6d2e38b82738f6f43bf338389fc1a4273fa41681229413cb92d629e8b7f2a8e4ec0079d861644c113b2596cd2fcc162816db97a6615c16594665014e180f0dfad9de834888946402edbe39012efb77e1c4551a63c52de32999401db305bb300ca8f9f92014df28d0b93c30f2ffc867e9e99d4522cbc44819144fe47b8abb86d51bd883c642a16515d9f39fa9a121c5046cb663e92f4634b44a482173847869bea27f2a1baef7b95cf7ab5b3aa84f3f54f04176317d33a4ccf1a2f88aaee11ba9f6a1ba5ecc9d5c7f33ef832ded0563a8ac22f1eaadbff8bc374628d75436c19e3f940af5f280e7a17289ce39e7348dfe121ef3d1e6f2644c57a10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa46143a2e94d55d1eea0367ffb6226f585e6dad169a4df81eac8b1dcba6285c0651fd0530149eb258b8159e2fab9c82b02741a8233fe32b1dd0c9331994e8502bd7ef911e4643138917c26363e04ef49618e9ff3fe8cee7c43bd01e79dd31507bb77afb20ef0dbbfc6786c2011edfb432205c4f4b408c9c845ffc6940dcf87d4d8e08efe69435fd837a77032849d85ee0d29cb0afe34724c9ccec34548038290e732019fdb292872475927fc471c418789b31b861a70138a01d77145d34d70837fa960fbda0fe835df3796071f05bcd1fbec043fd4540d487d9ca282b6bdc43549ea2468446792616ada446f6b1e538a1844a9f9de65ff9ec0cb3afe5be861ffadfc19c2930280c0d722a26c52f449a4c7a7535b2c69d7acbea83763bbb80efa0f09bdb58ae6b8d7312dcce6e7a5e00441add6a36e6d4ae4b799773e5526d56e37a83ddbc10fb7471424978d4dfb5c196b555983b2096a0d99ebb2f5c9e06041098f775c935fa4912cff7568cd2708e9cf8cda26faff23cbc7a404a492d67b0d2f5badc3728cb7d9e8a4dc559c7d25a0919d0725dccc0e3f61642f252c1ef074a59a5fcbecde9ba75475f83c6498e39135b993162e7b1ee3eeea8510329d29100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d48527452b07577bace18e2e1d679506763fb56e7c5e127d4adbed8798f8c990ad0e0a19fcb893f88145ccce040197188bdffd58ff45fe1ff1a0a2fa00b89aa30c0faf1b2761c8a766ec1f13e5ded818adf05388cade143fc2695fcdc15f30a590dada4bd942ec40fbab1976fc2fe8778fd942aff1c3acf5fd17dde1acdd0fdae31183bd7cfbef9dc5430b70a52486d93e2b2988d950ccf3ca1a802b34bc233508507e1bd53ca4616d6c5504e15fe7b8daae146be361d8c439f9b084fb6d7a0aa5ab2527059ed2010daa6c9d70a2d8be34c90a1a7fb68b5a9402065eb6c3b3cec73802a2dbcf30a67d4bf2631bbb58e68bf9a5262b721f5348619b58b97f82f50aeb575846057c900de68aad1ffd812ccfd0a8f89c0491951cfec717e76408e6def10d55879de3811be7218b15e03c3dc094d39547cee9ea23c083ee8344eabd569fb23d9f4b378e4c272c1286f8acd3b34162d5eb991b718f543f5e068de443e766e8ccfb814e470d4ab2dfda2c8eadf49b2129e40297159bded7604d0135c13c9c06df22cc02fe8c911328f4f5ec4406d652a434973fd0b3077c51f5671aa9d7a2280da2a267c677e3832c9e57762a0cd95651b95e13676ba2d6ab03e7a6c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a74f1a73c005c8312d5574c8ca37699acefb5575441b7bba27f1fdd5136bec0878c7e6cdfd773b284766e34d9cef263b474e9aba1fb97a7060004410284c79cc7f8f1181ed312d3cd4120e0e03020f96afabd4c5f6d48193685679453ef00860b4e93dcd707a042cffb01f2d791892aaf6c96b23487dad7bdd765b1b9693da1df3386bbadb6abe3a5f1ad5b39755274ccd836a17af3bc9a63e4c677d59353e066ba94052b9b41b5c46cbbcbdb94ef4b90f35e79f7e701beeacbc1759ecfb9cbe23c1d60dd68a7e2b3d21e5c083c9a1a96178bd95c9bce713efa54f4dfd847e045f84fcee9f8c090e96c50471870194385cdb9596a010735a7070b0e3030d89c0fa099b2e31163a661ca64dced491898f84b7ca1444cc30bb66fb9d1f153c9836de511d410b9871a126fe15a8f3ded88bb19b425a2b7b9a53a76fef253bcb8afa1bf5ad40eb39f7d85dcf4f0878b8caa6fd04c1c93b6c6f31ea175d7bd09b23ba237214d1d3b5528eeb05d0ccc7772ab218bfa89cb496b5e23da317c90cc5446d424d593251fb5cb295f7d9a4cf51c506cad5236899f8cfebae7c85740da0e768070d14a93193294c0fdcdd8e3afcf2b655e097df3c17098e3cc37663f5d3adbe0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7e836cc9bb10b5ba405d102c7e904cf95cbb3c9b94fd8aeb9bbd74df69cfc01690cb2cd2ab725faccc72d6228d0da9c22a08c4137a78c39baa59acfa9239c4341e2ba8ed63ddb8964c80c898e22f677920d700be8f177608132835b2aa4bd4fb82bce433e939481d2bd97c9c6e1d1a518c750d5273ea759e2098d1d9637a6c22919502b1037069e0099270d0be2885988a7c869549be0c2d051a7640fe9faa68221fbbce9c29cf603e4304d11a095be870485040e7d5cb66368031a96f85007041e80f4d35cea43e878f48cf284ee0c646c67c890cef76a1b0ce9f6547e30c99acf80e9049762abc8bd5ad5a6a80b91b564b9cbd1e769021f4964034a59b558eeb3f08d40d246c7aa50bfa7317b5dedd5828840e356d0234e8200a55c4e2c173566e6fad788bf071969b4bdadbfcaa09351d513e21dfa13c3047589fe32b0fedd2643ec644f95af926d0e72b637ffbd2040a93d0101f733e7aeb0f55c2fccf6054c2190009805156a75b6d8c7a365029d6fd4d75d347082047e43b03ec50f1052f5d0e28455a1aef53c0cd444843aa81e0ab9569f0c78991d370331f30995fdc0afe5f4206f86df845e30c235846d6799a4ad7a7ce272f513017cd87aa226c9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004c35682c8aa51d5fbe7b09028f81ac7bb466ddab2f3bf6a02a7a0432b8f487297f6a5cef2b6fd789366ac828bd9815ffcced651100263052e7899a74af79870464222d4025aca1d15e2a5108f28d77c3c2d1737e41f44f57abeda99c96257ab948fcf3ec291e9810a525dd99aadf7557efa1be440b8b6424263c394060bd422eb081072c3e6cbc0fb43c659c8391c5e3c9f2ac30c4ca242c4b2d80eb2023a25c8c1f6c4da9304dd535b28c8d5b8439bb24b17c38ac71963b6343cf8890edecabd10309e3b3be7bcb99a8ade479e06bf96756d6fda47faabecef8cde19865e280a9d844cc9e5bb03e633c21ddff4db305917e2bc652423b2dc224350d7534e76c880afd557bedabb0d4f3dba4a3e2aac5ff2b1963ea44294649f4795bde75f916c10196cbc39d202399505e384c22652be152da94c3c983da3f373886368917e7fa5127c370d0402252eb0c278c76940e0453ed8b56546eecfb71fe575c591b037ffafd4e0d72104d5238066fcff93ce838eff1d82b540db18628b2db67778e060926a3f30fd066a629c06d4f39625d086a906990ee968b4f29b3947d290c519d4adb3b980423a6e485755b85062e795d367e211031ed1d693653210c68a2cbc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000897e767f6044ea6a797b9befb51a57cd613fd058271bebc5846977ac01151fa29c731db13c9b211fb49092f27d331813af9213d20ba02e8a9724885e632e1824dc91d085cb0b9771060fc94dcdd491c14f5b13a2999fa81a9b353fc4b3f125510c128dbda6dd18583321ebfa13c4fc83174d525d4d2035af8d31c4a161d6e51195b3da3c9c082bb4f5bafed19a833c05397598f6699543967a3a027fe217a9057748356b7b5feae7111bfb96987282c9d17f93f7272bef89d5e9f28bd1af521c3111762f24c00d8b99ffacabcfbee220623c02fc233d4ab42b3fd8f018dd919dee954a3dcbf8bf2f3d9850556a2e8a6e3d2e78780c911973415b936aa4442f7cfd4c1ce49726cda6f4b070ede953f0c4ca34a71a208959646331b0e29a42fe2da2aa965a61663f8da0cbbd390a8585a000b67ba2ac71b2d0c35f19b8a98b6daad4bb8dc576d069cdd63a1560737fc19ddb7e6cc30b5dbd040967808c38549ecc80894b7cfb19e2a6282ac024f740602fd1c1e95f993607d8341d176ffa1417ffcaebb66fe38f46b93df312e4fccf6cc44f05c36321768cf825c7960a0f2f093338b1c694bdf4885e51b3a0a87b6a4609cc1dc6e1e4b5fc2e1564bcca0fd4411b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000207664f0ff032c235a996676ac2c260e30715b739b9301f55968ef856738b39e40455f67d6530a49834cbd62eef914cd16816f1a3934c9d58682a70f294452dfcc55d6efc7ce963ed16ae6f1bb5592742b95bc2baab993affadb663f92ca92e93956dcffa6aa59d59fe4e00c95f9cd9277383849c2a1a3557bd3fa854a542a7582b2458695c2cb0271559fe645b9bb563a256d629a44b8c1524677025e0f57adb9189ff8572efefd569774e8f754036c0ce3b3dedd9b14e243a15e89ec408e4e3e9e1abb37975034a43feeafa169ea3b09e865c1fc63aa474f94819e8cc40b4415bb58bc7a880336e90e8c24a48fa9a828d9010f6f31dcf78965cf3920e1124a6360d02efd416e08d8322bbff3e11986a2d0b11df1aec07796f1f0681e4e07c620459258ca09d6f462e525ddb7c96d89f69a8102e5ec8decca5b9e76c77d36da0f22ef95b3185e3abf35d322e677b2e960d1be02cd317edfef111746ba94b2b982003f099e5de147a89f00a8897cc47f214b61a005bf55b649ed1a868adbcbff5bb72c995a0e4b612e72bcd1c040d80394e329735436f841dcd5cd83d6455d45d1f210cf46e08be080c5188150e3f8ea04246cfb9ffbd2d37a441540b0879613000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012dac460f2d9bc08e4e1f0a0444ad22bde6cbd5cb6a6d8a31d844f39b540f4e0c48e9f04d7df2fe7c57eb67731b69c3ff6f44a3f7b66de21b653e844660b3d5f62344af7d10679f598c2d1f75500d93960a765bc8d8e55f328916c7c66c0821427d9980d52efe857abf2ec9371a882778e70987523cf3ffb3191595aaca1f4ab366bfcd4bee3358b13e6fbfd4cd694dfa56175def7ed8d632913f8d7d22654950d424ea3ff7460b4005f222c37a386ab960f087b49054a460907ca97f6cb5cd35264b47991da0452b1225e63e0d06bd84ffc84084edda76a229de784d14d8cdba161e9f3f0b80c9ecaf9f8969e5ad87a0f7b0714e5a680fa06448b03573cb10f8d9ae5fc93a6db833ef981cd57fe30811f3fa48b75ad7c37ddff46a970b2f7fbf2e253d1fd2785c8e7b0bef1d957e550ef6ced51180aa33677025f08c49212b739c32a1c0eb6cf68fb210aeb99346ec9111728eb761631b833c69eaf379889e80d8ba5877b241c3aee2a4b6401da38f9b7aa9e2dd0316616a501be3bfc79fdb0369e174151a1f0cc34af015a22e0f94d3ee0567e745759a89ccf099feed868955f165f8447cdbddd58945019f5a46eeafe6f7200142821e852f23780f915973f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e720d54acaf8326930c4fd31c335c023ae3371f8cb40a4da828ddd48309a3905cf6975fe4ae02197d9d3cee3de124d964b3639fe8ec5a15e99cfb2593adf138ba4c6709bda18897e6891888a0f99907b24e17ea0542bb003551fe1a0dca99dba8855ec99cedb33472dbab22bde3be722c478a220c533e495295dfe7a0d2ce4b221154c3eb72dfb7ae60f6dcf66a2bb8c4f540bc981b14187eb3bf651bb8a9637ee74e82a81eb0545180f22401b1149e64f30a36d1761a0d3f328b76e95958a9cbfd71cd9f70bd280f59741a3683c7e578015612a3e3dc700b1a8ee6c1ab74f0eacb9957b6a7c4d775be4b6fd4b031c2eb5adfdb3f5f4888fbf4f153b3f3b8a2c20083bd153ed0443d147833987c64d5c2adac51824526b7aafb7d508344ca8344ace49f1add13a3fa543c9f4d7ce6035e446d96c9416f9f7f63efeb94d10934343d68199e2a7845131c031170512216ee9ed6c3bb7a1373442c877e3fd0476a3078e77b857a7954c4b22f1f0fd61432540d05bed65d99291da43cdc394f08c66b8ee163cc75809e8166e051447a400cffe35617a6ed499d79e001e080615abf44a67c6902a4814b1f6d6861baf44a522210f331804a6544d192fa6325dc4600000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000259077c3b298d23f21eda101c8b40ae95c467f1d6e7b9350105a4fceb0366f72d70ee4ca84c87ead014cedacf166baa251b40f59edd8220a3ded646e292bcef2cd06b04c661637068ec8093331b9633db9b9b19376c3c8aaf4e4f883b9e0cb4ee4709658bcf975a5de886c87ef2b47fc680ff698faff23aa9eec13a2174176b96562a035166bcd97b68e29347839b3be65cad6fbff3a1a8ddd4726e082dbbf621c671530a128b734fcab7b1b551e2b445d60fa491c15d62ae8432309886424ef96cd7d138f24ff1376671899b66766a43891588571fe8eacd372706e5085530fe4af5a196700df59c6cd5229e082216beb1ad5d3827d44c0808083770d039c9a1db7892040f9e0c1166545de29e0aa06d67acaf83f051a97b1f419a03f39291b5777adeb707c042d591b918b42295ff9e2db926c35db1a0d4b5546962df1a902748d32c1a9ef4267232c58ab7a3b9a1af716f1032d2713ae1293895fa234294735cf7c518a89fc3b9f5a87988bfa201e5009372eb80b7f6a3c3e643398304a799489f9c9c04c5e4ae7e4306b8cdb28ae1aa3791c4e2991ac790a305e1d8918d736962cd17f83427ed3911c8261ed08dbd856efaaac7417e6fdecb79702d71cde0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000069da2fa447449902e60bc9d85d9009a255c77765e40674f1888219b1ac0e07fff97ab7f274683f830e952d0d0de2b507a9058e76358b3bfb38c3361335c2df44c163f66ab45309b5d56ca41c4c859e1d6016d9505e3e2fcb7920af0cdc292c65905eecc66d222ac4409c0bc0bff2c3cfcbff4a77661773f3b8c6792bc4e48a6f39595f336e6654c2510386171b85632d6f9e5ffb0ec3c3115933c0b4b02010c4c0150b0b7b0751a72482cb713ab15c59b209c1393e7716be5f0be2150577fcc91b4f3c44adf58bd97c284de48daf05c9d5235584c1371d0d68df05933e54cc576f6bb90421419725c80a4ddc80a97bfd0a5e543448e7cbbb3e248846d1dd804658c63d8226a291f5768b432084f689ebd9e991e67a0fa6e0a399d22215679df7638f0dd765f3adc76fdcbcd182e9fd4f5a68fb6b5110a9bacab1662540664d20689e053f9c17d00b5ecf395808ef6ce84045b4c49514bc669b2d920201c5c24899b0c2d1b75e87df61cb1d78ac17b517d45f6b2bb6c269c424aa47a30e814e1c07af753e202d0d115f84b5fece18ece80527123d4b100b81141ead5be63df5a4582ac1c76b44ed3b5c537760eb23a32da9d35ef13493c60ad4a76d9f5dc5d69000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091f193a8d5e6d46721f95954b7b8fe73c0d7f9d3f63b8e8d3fdc002fc30893deb6749f5303c2120d9144e6a6587a1db162a96508fde6a432d60d678699e33cf14ae7cf3722436656efcb500f28cdbda731cf151c738e073d34a25a7e50854c492fd9c13366a9314f18aff05b96d5d79f32bf2fb21c5dce530aa0236d3aacc87bbb3dc2918d2d5f400c7ab9ca32841b8eff92fa2376e22b9c57730a68ffb5f604fd26078efa4b396ea1a44024e32956dcf509d6e7f2bc57cd3b9db0d02db738372026ebcab2d5619b353374e2f91c26e4b28af5ee515fc421820d3cc9df920cbf609eae20a61e9651d7a7b3291d49d30ab22580f4741ab8b7d0b78cf7a979a2abe06f1d7df77649023b038f98c9f5c9227d7d205b5188fb66b92a5e13347c53dbad56968e3d74ed49a631e177cd510d79f0f33f6d0fb696d2bf7f2e020d43bec2c57403fa421da39d91d076568fa6b2911417d7f02127e17736dc1fc14c2e2bb1dfd254f33808a1601915918ff2cfd605804a19a3e813f560bce4404d8fd81fb77af2844fe081fb115811c071b3de7a592d4c44b263be8d97fc48621cd79d43160b0821de5f2d3533dafb64093690eb60a12e78536ece869a74bee1d3da17253800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000433f836de4d71225e8ceb70a724cb6bd36163c828261aa8a215fa89dcdacc395e6240d8679f26aac7576ff2b9d0279de38f02d3a9f135b9c2fc34a92a88daa3280d712aaaebb87cd394facfc7dc69ba77aabc9c47a0535b61b92bbd83aae4c9a2d91aa8df480920d756bbba6bddba1514ece884810ce1e90499f7c0c5199c84681a252e853cca56d0a68cdd4b7b890be92fcd9deb9365c3820fb75f6dc1da8dcf7d68ae5d2e2f76f7b3cb6f80bb33977e099c2fdfd55f59d65b07075aa85aca7a2ccc2b849bdfc08e8333907c5bac3cedf0e7ef4cc10bc4ceae118f1365f8709ceb2b99ffed02d8f0b9b427354a335500cbce5c3ceef1541f51e4aae188f3fbaeef1a739c6ce5a6d12eb026cb33014382e827452904f593229e9514d5c6a4b4e54e418232069446eafb04a5f76e8f5a6d6f92a6f5bc9abca89aed12a10b508ca7c0640fc35dd31fc5d50e55aed2df9b7e1109298ae4cdb3db7f5a26c91ea69e080d465e6b3a30d934f96f37025ed49d9595417806b6f61bfdc622441d13f9bcf4393257a7d49e3923bf0f2b849018a9277eb0ca7123f317be35b00b4013ecb5045cd21596550ebc36c9861ddcb6f07e6e63943c2a5b9d99a2783c37f7ae8cbc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a58ad9f2e527e863eee8916cc36c4af758ad2e6ae346b393c97bbce9acec9346a84e68039b62b57b5a359f8c3d535e6f565a853cff958a03bdb6be09b4af0e941578b8e7b0fe9a1bcc520943c7bf1e68e81b0ea96284222997e0ac888eb4b4a6285ef09ec967b524918ec7ea02617e33ff3799867a269a79b7ee0b0fae46ac4ef9cd42b72591a07e74a00717f346ac940e39668bc8d66747da887e782c3c26b1c824e75a383245d4d0c89d729930e47bc7d3e0c33c067b0d48adab1c5ecf431a90fca56a2f805a3501069310e1263f9ecfff097360f3acc08496b336d0b836b501c6278b7d0b9df1f5aa3acf918b2c987adea0ec79aa3f134dc2892a9184252335e4a9edc33377ef1721b7c1892ed2f347268b4f36e05e75bd1131cad4cdea3624e5035a945f032de9d72b54cc66aa5eb68112d168c5d8a6c45a2d0204bed08d0288b240ad57e0bece692c769231299ab17ce1f8a27f4cef9c4d100e1c71ceb4a3da38785b2564014ce89436b25f81a238bcfed8e940c8276b858d12eb3b87daf8553d25cc58f8e43a198168ca90cdd1400e0324455b10648e5da3f952e7e13f28ea273ddc636aa19546c04cddabadce2e2cce4e6d50dbb450965e1600550d2000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008950981dcea31af000f0fc97adfa580801ea5c8e17d49c97f4f300244df9247824167c6e60e2c61033ffc0a1f6ef43141564adf5d80b4cb9560fccf8ef4643d445b52dbdf8552f7b7fb75d5185840e386539d236ae9b53456024504db3e3990b7a7e36a0b946e75610fc97f2bb085a408ee1c405ba64b2c163b851d15632dc9eed24eadd88927afb2529299049748dc74f95ba59b91e26b33eb5d1ca49b2b2f847b860fac85fbc802670e6db5744da66cd86e6d9add2be301392d27c2bfdbd2082b7764e188c62e6be633d2f2d7ffbb74f3c0e10bf15676dd05e1e28cc9cc89a17243628b03cab15bcb3731c0d3ce74c8cf80570658337133458e9f542cff0388aa6f9f81c47dce7605dc05615ba0cf92590f1b3b4e3fd1d08b6af69b0c2910f254b93cba390737b40b209fb2ca18cf8d02c3f78c755297ee5b958ea3ec0b2a1ee90ff1b9103b3ce43e60d33878985831e33c89c3442a8ee18a14f17ac585e28518662e5ac990f7bf0f9ea84f8ef67bc535ceb45ad3aefc72593024d246fcdaaa50bff36cd0e842bf346483071f52f26c945c9b984a7a4ff1fa291dd4b4ea483104df0bd672fb938d010a7e9cb4593c7e95c3ca58b26b236c96ff9ae5bc8f99400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ce5429a232e7fdaa69121efb4ccf39f0f19695dbc3175759deb9d6d4bab4ac900c01969effdfaecf37032df18e1ebaa14f3499cb745ffe97e3c16259ff6789c9265124191520b19af59f37c42023fffb47b010e49678229f954c77ce4b18997a44c7ddd549cd721e8941ed2f6f9dc1b5c46d34f189094c0b1af65145215d0354516faf4689e31308ef3d2d68fd4abbe0d3dc9d841bb49aa5818cbb48f8bd8aa0f7d0b73eab8c52598a96b46955f96ec639a9a5bd46a04185ea53c74f9d54c158efb32f85537f76c0ff4aee3f11a1653bb4dc2635c409fc7a8114496af45124352a468c68b8419876cd6cdaf2a0e0485d9f520d32d6deb758d646ed64e91b92f923d6faeabebab0c0805903a4ed122ebd15d45d502709b4d68e948b862b04240443bc6474fb849837d2a45c1ad9f881a825b3658f7bd6c1f7c2f5816327e3c37489b0cce065fd26c645308a6936d8e688fea8acdb5243a7f5bd052142c972c8d8fa191f0700fa6aa50a13c0870f1568eb59edccd08cef846747425b32cc97bf25f6e17680571ec33aca213066ccc08ecb53a5ffe87ac34843cf1b2dd47e5db0a0711c77966e1296a3eb9618fc4cfe7d7627c5efd7e27b4b8730c241ef93aec4d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021e20ffd24a0e03c8aa3c01a411426cdaf0d3e9818ff35e8c1c8f3ef835b53e9adad310259974a0c567f81be3fe60190d1c98b25ecf9493148c7ba3f6e8f2d5786d104b41d90d2a7daa150f94164e85840064d1e377424b6c4de6d653d7c05156167fe2c0be340564b5635ff6bc3967c535296301be7fab831d7fdf00313a84adaeb463dfc41923fbf0886a6ee540d989793b8b3d543a625a5f09a697f116fcaa1d7d400e85df9b4c61eccea977de1e5553a4a1fa43e1892b1553bf6b7c13735c599adeb85fe67b2532de3d2654f0ce53656b9dedc0862ab9aab72e8884057d3cab1b2cb03147f96f1d358c3e40f729b9bdd40d9d8b22eef9f12787155fc5599aecb10412b2b250a2b60d84b3dc4056363e06d761c5678d5fc6337ebfc6c378f83f90c432d8e4e6a54fc89a8094059c70f3ab4496cdd43cc2152c20dfa71a8578a86777a99fd3cb2cc0fad2621bd11c8e3763c467c8fad421dee6295bb5c37a196b122c1a19495379aa4b0b9bd63e5417ae58e23fd9588052d3754cee9b7cb58d8c0574ec2da5708dbe2349db45d91e2ee347b9abce417198823a9f0b6568e23dfb67b57cdcb7011630c7e36258d2fc276f3a030ec7f9883a650aa0a715fd60d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d643aa4fed0cf8a09a5e0b8ebb80950664df5b4e37565a2ef82cd8e87b6458a570997900d01c1fef8f56d214b78deec8bd5a3cff02f8862d0a1f8435e21bc98eb07a9545ec0c1115785c443cefb6fbd0365f1c9b15a7c9ba01722eee47419db2270f3061387a5b776e88e4eebdbbd0e1ad037fbc5ce16d50ef7924e7df2d3e26deb557ad2f87c832e119c543dae91c3111cc39f4197f600dc2e4843234a65d8c5269131619ee636c1293b31cff115d7599c2ab7c09be144d2ccf6ce7be8cbbe57efd1c6e0d96ad27c7c816e889c013a43394afd3f5f948d4726d520403520a8ffe74bbc6666c2b2e63ccdf567668be1625403457c7149720bae5aae78a5d0df1d9b93c9b42ffd193992344759d2c520fef5e6287e1021ccc78667394fd3805f73dbc95bd3e1ff19d5a0f7f2136d88a1ade38b47a91c4c0a0c803546abab64eea9559af4509800c5ad76fdb8131eae780a3a93faa32e31d68f3aa6b519ce51b9e1492d65a2ac950105503f5741eab0d878a93d46df1b75350839ed41d2e1cd80e0126a6cb23ea13712a3debfc874cc345853e337539641499ff77ec306644d0ba290dc74522d58dacd41b474a112568af2a43dea6cd66a1b81fff7abe6b4cd3d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d0063ae86d975c712243e04a9e07d3295d754684a4cedd36918e914305b8ea5e254e52aadac95a396dc909fc9394f689d94b13fa679978dac95b01605c2df1aab9c62ce721c6179973bf891a34f34a66bafe9705ddcbc0eb7c84402bd235db13bb5ff6ca4f42fa2326f6b950eedc6683036d2dcd29e2001a90b94d3488fab6f30d36b141972cb9ef33c0fe638aae8c0488e78dc1142f03769fe4792810585907456f8b2467b5fc4cb7ef0100668eefb6fec9d794473a0f3e25ef8e8db40e3c8c41bbdc593d2501785f1dddc58ab503e1a2657b1790b98f389f85f8182e482caa4c386f4010ffc8a93dc46b81e4f530e78b3d61ce7d316e2623aebae0def3a044abf5f5ce184a279bf07544afd6a92d28712874a2a26d0de74cde03e22d40c926f873523de78a3481b2a072a427f8f2af4337c0eb82b973062764ccb19f7cdbc85e313befca37c6e4c5727fc6f80aeb79a3c8fee8e221e9a0e14c16e1e7643de312272bb2576682d7930558fbc1ec79fa05b566e9bf82692bc0e92eb5eff14bb439b599c6c15cb73d0566e479c723e8f1ac57e1b402783e11631299b8031dbadfdf3616129d6cf6b6d0c98b169f32847b7f07fff2c1f437ee0c3320e61b9828d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b861e714194544586c170c1922ae3c4637dc155313b7b77cf640dcbbd13f746ed447a8be22cffb7e752d250602dab0777c4b9150ef5a01e28138531244d3a033b48e73a073d4afdb5c9128a0f7bb3a1158350168c62d380344a56c60e25a21bfbc7e807542af4c0bf861a3a116e48a6da68446c4db6a4ab48b811d8a5dabbbee1e255b0afa1e1a33707c0f87625dd63b37ad4e640fc7ef2ea731820469e29d5ac1b7f1f2f45b230506a221f4250ffee9c7cac1859fa4b9b7137c53a9403b24116225c5fd0e954136d14d7210635824b4f6a061fcdad1ecf0696cde8c82880a435923dcf7a71b8c9681150c49ddfd4cb5bd159a98733471cd0465b547be0310f49232fe02e6da951b12456b3e4ce6a4d0e5c126086bc04d46b678ecb293c201b250a722c989296868b00751bbdaacf15671a50d3eed03948cb625fc2dbf8e8f0304878ccb0087ed70d7ad28b4605fa13400385bd6623b12ad84a171603900257057be28a1777c767d95ca63550f2121ec3a2e77e23c312dc4c9331702ca84031bec6e07f8bbf4602616bfb01d0028d2a42b69a36eac71d7b90fdaf7fab309d9a29cc4e5c2cf722687da3a4caf75e3febb393fb2d41666bc7c03e740dd70f7b00000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093dc1ad203659449286d1922efec6dd6e9070fdcf53bf3ca719be3033b154f62a8f9ddeec7678538bd019d3c7a74ced9ad98a818f34b8e047f32fc471c361c6d14fe1a35f86c809a966fcfd4ec5dec38127bef3e03949f4b4bec754a4efeebdc54f56db49d7e52ee13d521c783acbfe6f4a0332a69da4688a57a7a35a9bdb2ed12ccd6bd9b53fc1c3eb17d485a19b0a1d60b033d808780674e9a897c4c2c519af11720a7a89beac2b16f28ebfd8fb1c1ec556a77e1c27581232dba20ef7f48d9cec49c68ffd6c256119e71cdc941a6ad86f00f76081e5c2854d7fed0de0cee02fc62540438fefb11903e5b55b16ab0628727064157b9e850e4b5799ca112d29e6b51c5bc1e05c730b0ac64629e58345010f9ecb5dcc1d2f7915a02db3654165230e0628d7c415479ed31308b099838f0d91cf1c53fe0d51b9d3f8ee0e2b32ed27715dcbbee564aa59a2675ce520b3ffe84aa91249e09e1da69bc658bfa0abe34b7e4a6070e71f5e74542ff3ed1b33cbe7e09579748da43cd672d1bb5922fdf55fe21c666a6a299437dd796c1657ae02424867a3b091c16dbf226d61f71970b2b77df5cfd53d79314c44db2036e06d84c9d44c3356e848912ed137a16f30135eb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001babadbee0e76cfdb2af8a56e5695496f90da6c18e6534e44577c4434e0d0c596c4c396b86c3d632c1ea3dc8e6b458c3ad7b49efc3f021030d915a026744ca344066c56da60350e99cc2632babfd3c014291cabc1638e932ffc1da2a8087ed765a43e2a069872b31efe19ccc5ade924288ebc9948eaebf5887d15e40a0c670d52e6dbd38ef12b1fd4f362d1da93ef27a5706cdce7d956384512dae2aeffec782eb3da0cf9f22a8ae28f2c36116270139c6fb7ae505c9f5500fd50812986643d04a8644820248c56ca24c4d0382b7e8feb7bab053e4303a0c4ca5b1e24c35de6cdb1c9ae152406e1bc4003518d8672b451db10f427c82a5168a4ef0bdac77314919b5590eee14fe2962e3c3d6c17c2ef615a7e45a61e3bb03ebd30c05a8ed1214c3bdd2ac7b7f6bd30daf340e365b8c81572640b078f57d74d4edf076eaee3aec3eaa2172104f7c1c81c2440a7070adb0b42887725b352fa3cbd2f6ca81346f1ef01328aec4e8ebca675167f2e4427a122006e7718f7d6db7b19bf20f7d70df0ec584ccd99dfd10b2de1d8d294c7b95cec6882a5e1687304cd7c1aac6f1c43c7f91f5cb48273ab88408687e2be2cffc8cdeef39fe42db65bfc43fffc0f8fd82200000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ade8b1dcd1808d12092d9d701d60271dbe64797d2eab3fa14d1c85ec4229b85417e7e199e39e967a733b563976c6250038b5ff3bdae99ee58a850e99c5270dca39fc2e1472e2dba0d8065d9f7dbdb91beb1276c98d8f3981af5985f25eb8dd2fffb6172247833d4c7273298e1ec0062a9eaddb46ac74e632c9bda95b755f4d102764641496c7372e122a6555ec4f6570f33fcdc5b4924995f68a366481ed34052d7b0f7216048994b036a86373c4bf42283a5dd65244a51375d1746f8c68a7264db95eb528872228cd03e6ea17ab2a463f79c213fc701c0302b99f390b1e521041c2310facdc50f5344d1a6d8b2c82e5c0e8f85ee36a2e46072ad4e05bfe2155edee03c4a4e26ba4ccc4bac3ba3b3439487f7366f4271e9d675ff8aa4456bc4c4257c292238619b821ed0486a83e4f64ea3a07b06c71f5819c1bab7b32e3b38b32067308557a5e428324f112542743711ffcd5234bb2921b248730ca4c5a7cf6e83870db23d1da7bb2bc6ee1c623a8f09adf1bbdf44a01eabd328a4f39359168dae5b8c3b3171f2f617c21c35c0c2304f9e0239aca723c11d82091cf4be2d91507c7181868a0b6ff399f34b711a1a486ed38216b27316aa564fe9b2b9ea4f7fb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f2861a5af500c349ee2014ac48203c62694e4e6bf91f233027558418f65df1c6515f41e5ff5882576f923962b2844183f5e47d12c638f55b7381dfb38ecbf9d8925c92653d79e1e45e244da38b6cb3923955979589f82ea4dedabb9b1426cd73a92134d666be6d2c5aa13f9f184daadeb561b303a9122cc8e3f51dd0fb48ab6b660c228fd0d4a02ac6f9e394e45650e2e6d0a3d29eb6673396e21cd1263f419a51492aeb08bf3be13860c1a11624b77940877e9432bf01710acfe0b143862228d8ad2e4d919591632f2ed3a9567a2a7b718c1e6bf79ae32d5be40fd417ebdf0fced68d3545f4b50938f145a17ecd1950d1c708656d41d394f5bb4805abf2fafef7f8d703c6798c891e7d733a908f4ab707573409a87bdc8420e055cff9eca7ceaf7f397415d094a207ec8b49a2f80dad9a621839e73a327dacafa5b50e6b7c81fa10c1e2028bbfadb15327386e7980ae7f0d8f8274e1ed9336d0e29a912d6b10ad40d4ed65dde0e1e86aaa0c53a49224c4ac5bb56c9f791d2e0010bf021b3e2addd5fd311af612f6a8ce36e1810654164562e53023e413c7c320eb37823fca169098e9c773c3b9df3b8e5e9df789c9cf248c83df0bfd02f972d981c9fc598680000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000260f7429f60fb0188683423d717edde72f80911f146f54873642967a6db3a657a1e64cf1c6b75e5d0f50035cb0f444dfefc48ad9f896f291336f5e25059ac3359a380b82a1549d2ea0ee64316c4e8fb1a666d77885f4e8f2522546e43f6ec36787a51456bddee8178731e8b832e3380e0cf3c61242faea588b897e5d9dcb5730cacf21cb5b752b9373b14539e1f507b97fd26993ecbc9b20ba63e4c7f03823c5601f7ec1927457d42a0456f74ca165ac72ca1fc217d9a507522f08463f233518f2d91db223c0a7f77c61fed4d6f958d47d96a27b0741564f82095f18737836aa20f2d2a21b32f29f778c6a3d8ade4b486a6d0600c2442fc0c4a25b1a4e85f4000ffa9812f701860dda3ea22745d5b62075e617508b1db33b1ab917a9783bb174cec13aef2c39b109cb28692dc2077d26e4378b49529f098da3ed47078e3473d2dd1627977d73813a7a4809d573905935870411d24fdb16acf2028018d018276739a1bcebf8297b424f32422fed24d9e842b903cfaf8aa4b096c6a7c5944f5f4a7b2c0ffcab9bf01604a844b46238691c42cc365246665b960689246bb9361396f3aed24f5c3fb3391f87790680ea249f354c72ccad9a31c45ae8ae56c8e0334500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b94434a74ac586c8751b9b9527ef439c5ca1446fbb3e4ca54c0e4ac68dff126733f146f5d88b8b7855c1759a5874c16d77fd6292fce235d671791111561b15329b4425508eff3aefc0189020b64f95cbbe14548b829dd6033c9c48972dd7cb54a08b3739d1dc6e5d70ff7879747765d1b0866e65f80f6485ea805d9eeda4f7174c58535ccbeb6417d3ad3cccfb45b9da985ab036cb6050942aebb50c09bc6d7eee6c71efcb752a993bfc114ecad0f026b08e84cf970f832289ca39e4d535a0dfca0d8e2a3c0a4cd999448b4c73aa0c87bf13c3b8bfbee3b2cedf389571c05f36b94d3dd965b88ab545cc294bc7542f66de10b3c334e71530d9011ea3ca4ea07edfdc1125f0db459e2880ad7f4ac5dc6308ede33553c91908a5b99448b6f473ff51d3ffbdbfa0e880f956c482d41ca63a42c9dde4eb0e10832a6430b028d9e270067ab6047e4e4f8888298accf57818e5ca6592854b85e58b8d1c4e8a8d92e14997deed906918302ba1e8b12daceb4f63e43a69a71dccf91ba3c9a821bfb7aceec36ae12f58ee5a39b7c6813e41f5b4f9132b036d6a905ae3a5b502d099ce336c73b622acb1822ab0ffb57eb60b881c531d1e2e06bca9a6fb9aaae52327e36f200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ea22c8476ab3f23208cac47b297116cf26195eefc1e61f942bb0633c7be5ffb5e5ab59fbeb4bdce5e1277fa6a6f1ff835449871358fab75536d56a1d301df69d59cd8669a572c765f0da7fe66ef26a0a697d1d945676e5679ed0e79373bc7c68f1dfb88614e6a489d6b42b5f54a4572e0a0533076345431c1629e5d58700ec2d8dd76541cf10e0fed4ecbdfed41e377b61acf0eb062b7b4d01cc339a5d923c709dd02fa2c78f839dbcc9ad622bffe2ad221cd6a8be3f71f27818e31f3ec2436b5526bf407ae602e9243c0e7523f771a876a7870fe3c6a72ed5a44b1c281036d04fc080ccd3b88806c15bfa1c0bf4534ecc26c8c657db975f72446ff55da9af6a95d0dfa953e423a8c542b58f659ba0d9655c1850b675873bfcfe0cbc8c461b2e080c8d11d5875107b92222ecfbcade2295804f5d2d5bbb89e72a9323128b4130152cf0e5e0dc11449fb050b14d403d7e988741b385731f90c734438b2ba9405cc4f3de0af78780b7e23259be540eaf3003d47f8f20863865fded61044d860353ce5482deaf60484d90881654804d933c5fca6c0f9082b00e73507dbbc02c1bf8b80d7abc77e42b178198b46b48e28588073b47534422ec77d4d0322e1ecde48000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f998c2037c9b1f81e4fef5ddf8d74a7836cd8e782218925a548e1f12eac405ace835c5ffb1c857c0fe8d86286cbbce84eaa9c82c733928081159d7201193aedb0af7721c8494a51013e5d884435f8f98f741c531c97ca3b55b90e3123b8efa2742e41f2d2569809c642cb3a649772591ac70286ee92601cc2179e0a501a3ce579d006ac8449e86bb28ead4426be97924c8555ced3a9eec7460396214bd3f7741b590de76b7ab2b6233d90de45bd063fdfb6a3a54cf6522f8cf4c35fb4a4fec8d754adf84c5ee6b797f359dcb3706b491d29c2ad26547f7ac7cb101711a8cc7d035032f4178f955e1dc7e6a68ddc00a4e699f8b45add972f2c0c8d5c3ba142dc06161a4a080a4b3dfc315e546f8dacef83dee9c73624733f2d9997131ae29066ef7ee926e4ea3d75494d6a823d075394539a4a987895d812f84c910d29144bec04c6113c7d92a4b7e66e449919c277c7080aa03a54702b20219d1603d79107abf962b3d0ab130f016b5bfb0ef44972928d6abfe52849c3fa539e1df3cfb42c8f8778d28a9c081329c155760adeba64579763428d3d7f82d9abdfb062346be7c440c824077c95dfe7046f741d2828246fd55ff34e2294ec591be606e990a8dc70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af291c19e1490f6c512a6b75ee9d6a82c09f96b5a9c70d8f90f3474d011d3e78a2cdd9879404080bf7d2c3db01c6d666cdbebed30415d2db006a699058bcdb13af346eef37b5aa300933457547bf430a8ace93a085cd05a031ee465363287d77de946841f5b30a2dfc8c087380536fa5b784c6eb53e61aa12d096f6a82279d21f213bb5172d4a6f1b49e7e7082bed927b8a2d5d214589004465721ab93995a646866207b21223029b7bce5a425ad4f8a74943fc77d63d87bc787cbb608c4eec175b73baf1d64c8578db22252f4b0d0e60b17df38d4725bc17cec2d69a182009aad2a4b1ce4e284eea01e3d22a4df0ba1fd5d813ec4ff0574b9a8bfeddd6e043c67fc61e835c81bee8f55a9f1015f16ce3ef409b0849bec1e88aff16719e1698d326a161a8cf47993550bc9bc9026663c88112d14ffb8480ddd68f58c22ce0872c440bf1b64ca999b4b649aa531ee8a0fd9ea20cba44cf417133b75f013a49a4ad8de54a844431ce84e336569da547cad8c7b03241ec9a875b335a3a049617bccfccc6766a48b4ee96a8e2efd325f4dbd1cc0e2b54604fe64099f4efaf473b950c0b5f649120ca9e5c68e14354aa4a4b153f4e7fd31f6cea0632cbbb9ef8a37cb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d718352b3646eac3b63f8e448c88fc0d30cda23ccd591460a339ec801544d0ea4847e8fc523ffdaee329e3c2713ce9427d18cd9d22b1f57e5caf02c47bb027f89af944b273be46994bff86e73c20250f8bd6652bc6411534d58d7c8041481d2ab32d3202d0c07bfecabd2bff3a4d47e19e3c880233d36a29104bd31e7f4b3563b6e2ce65619f40fd2b89275706a3d8b6da982767e4d0cf4e2e6837492dbd1098796693d124181d945f4f1b4c059006d1e46246dc4c253d92ce6a449bda4bb5cd62c457826079491f7da2f94980afb0e1c03ca9bd78eb93a69fe200bc592193ef5c2d3d3f20e553e70e2de9f3e12f3e1b06aa920248e37c67397533209c527604890d8e54f66629f3d980bcf6cb44cd2699274944ae2221dbd56958d5f46fbb9c18eb7d39b803cc7420f60f68188ee3966972478644c2f8aeab9a13e6c63254f1ebfc7492cf6f6ab63a90b8961c77126d8304f6afe896dd8db102051a74139a8e9f7b385a12442d12ee641f1334517a44eadc273d3890a30204f9d3743cc3bfc05916970e51e7b257ca788dfcf9ce9fbb6f6f7054e35d46eef9a8e9e07fead1293dc6340cf169a9a90c277f3feb8e7bc938df1713537a4424616f5dd169605530000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000279cae54da4604194eb0dc739ac0fd3fe300e50bb4f278f2612be653fe3c6bc23ccc43be20e7b66b61f9f12b6d523a26577ac8254644a06fd8e0442f7c6d1addee41ebd431042454ec0ccdce774865399741b73e03f4a7f91eb87d70f578e5ce4b628a8b0fb7792df8a5fd35c3567b973b829dd84687ff49f6463d4dd1986a8c5bf2a4cab30b3be89d502ec9cff2c7bca430b5b3030da2bff12bc548d53802521e103ad335fc22e06a31fa539ba12acc05eabac1456a67ee111f5ec6fdf699a7a307fcaf218185dbd32ea6db22b87d2cb53f0256cb9e741aabf769e58c8355297e94e0f87b776136c3971397a87802fad72b15250465570bfd38f8b78cfc50a4541537b301fe50c539abdd3e56d000f5224188d8a2321c04e8ce3149f276355f6c15ef17f44578ffeacf3aad3d652ff9a1ebb6e31a3d441a639ac633050840e7a453d22f17fdc9c2ce223684a0a9b885780b0eb1ea1441feb5407802fda759f8a163111d0d49410cf2ae7c1b1cecc0a0b59f6976b8f9f8cb9c31405f7ddf9a4d24dd38cb008b051cd631faf575f3e2b2c1f44ba9d1f5957255d22c4240669ebabab65e43abceefeee8488a8f9b5e4685428137204eb1de771928e344548474a600000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48401c4b3857eab7b4e2f509c644b5b34bb4b748ec7b565bbe7ce8eb0a8952953f3128da1898cbb0b53e0572df93e590b2b24644c27c19d75b8de371bc73a1f93b5a1e3394786948e9fa8b85175ff0dfd05d749a37dbe533b155df832cfe39c208770ed2448085cd132778a79f845b20ee74d862556cf6b0d1bf4a2674ff9d22a28e097b77951f5f9ff2bb596130a5722cfc8c2793c66bee843b21fcceedfc8c35c10be7694af2b5b5b2195bc498e4c39661f068b95c0ab494f530d43a025d7648ff1ede4696212bda654539fecc11dfdaabd70e85da413b5ce64d8a64ab6a763f2001242bd595e115e55ee8fa631830490d8d6e2c3523f38aa04913cb3dcfca9df003b02332bac7bee8eecfd32ed1846a72f12dfd30714ac203cefc8abc449eaa411a0f27eb56cfa1c8d5d0d7cb3a88dc075b38fc5cb3d647444e65c4c1d0a8741b1d51e9675e8fbb10a168fbab1917d0bc9ae2976328349abd6423be93bdc513e3011339fdb386ec0d3b266fa6dcc99a09afc72a2e7edc782a6891fbe760b05b19032fcf64fbe88f1764c5d88f1d80d11e384205583cc71acc8c7e630264d036b812e6baaea23d84909762cc9585885be90c66e7b171758149faf6ed5156ea4129001a71cda05c8200fe42a19924f389fcdfe9fef580b143cfe8f56d0655e7d7841c1f4a6ce553871e962967260643ff52613626ec719964e194d55dc25494fa4b2bfebb74cad7b74498615c1572894eb7700f7f9bb8ba713c0aaaa4e1a9bec872180bd3e14545de0dedfaa5acfa9e8e15abaf6dc7f276fad7346e56a6e7afddad12b256b8f06e9256bbde0796ae33e31bcbf98625d5e50c592ad700803d4f850d0c778f673fcccebf8b696ede89107d5e193ae3e0c8b1be4ef2844e4582effef3157c186ce153e1068c5c61468b3fcb4b2eccbcea4e95f9d9e918c7743ca061d92b751dcd7b386645e859e1c191c90e9e80005463f1d496120bc01e64200957880bf139dfe976e0d7eb5acfc247716930f542cd034ff7741955bdde1da328bfc51b7afdfa7c2bc126a8248b6a615eea3bb042d1d939f5778d193c3002ba8081692011798c460b1974c9fd80ed768603f7d43688c48577321d9fa1ad82ea04c88723406cbb6c96ea95b6d136250fcc6534e45863cc457acf241b9522181ceb37222f685f4da69b27f77836a6f467b2b64c71c4c8e1a0923e17a7c77af996b8dac31f166c268ae8618282c91cb81cb759514beeed5ad75bc37f0836db29c70586c91412d157c202a0ee018838385ff75bb4b64c150e1469feb41f4daecdccca3c7100565f3396da0e7573ca922569da4f640582bf75d52a80c03c5a94d8b5c169a82b682201ed83f7cc46d8ed31454731b408612ab9e010e01b4565f8639fc3c8dd1533b7956fd12e38dbedbeace8e703f96e4c19db00630272b0b9fef471a9709e2edcc3a714309b566351a3ff7f72010b0bb2ed813ddf3899691cd696750582cc0050019d894f09c90039c32faf2e98816cfeeb4778a16283ab8e954ba1b1b750216caefe2f6d55b10239f81516392ac0b9d6f0526b9c3216c5b471a90a5b680f269124c7b14237a8288743a0185a9f013e855b34062311a1398761b882b19760112fb11e9bc54e06a2bc213af14ef4ccad966253a3a71d5dc7fb0d7287e349071995fca554777515d1401c9e59ab506a501ca3b7b0ac58de0d8d2c2fbf8581f825c8e8a5b4c7328aab78eac9d318d25069f2cbcc65353f90b5d3d249017aff7420ca33d27132d58314f60d1d3712288a839fe9608a455cac2c83b924c6fedd2c171ff2abb560248d97bf816bec3515eb473099254c398247eb9ebe4b6c00ce2d1463530db48b5fd7d716d8934f9722a7e735e7dbd8bf246fce658d9ff7a2a8d81dec58e81c8b466d88bc03ebad20291de9ab04fee9075cbc436a32f9379e42101e216954b271d90562863deef4199bb02fe7667436535597079534b23d9fcfb326dfe71e43591a033e9beb550e47c4716211a50bf38d25df6983c00044c1fe231428c4de45dc76cd06283d06ab4f34fee65d9fcc0347d390079a6bb8b8c14034220b4fbcd3a259b6128d1aa776f69d5d0ebb7f508af10ebbc98213d20a621b890e6e88dbc700e686b61f3bc01d01cb119518350cc7ca5eb77a84033a65276bba04316ca6c416405bf570919549e83b124c0d6ddaabd2c87f0599b839ca3cbf400ff80bc38ea37979c14145e01c86da5c4ecb8282cd110924488c520035b2e0c309d5954b4fd77c4b0c792e6724812696f63c022c593b0905e50be1c71bd4ce57151bb961e84d6b03ff802be770c420fbb8271c417882c6518ea1693703c60966278ad74b235fdd6f144809e58034cabf32c2c417f63e68cdd612edec3c4d6e0720f50ccf506d6da3f80f844c6865ab41f92e0d2e44b100fe97cc48888228c714218b7c0321185593bf9ebf65a9c87a8d5a127a84b9cbb709d4ea43f85ac06ede147401efb877bbc89b3e117005be6140ebb8cee11116495dccfd5e3a584aa1b4030cc3c5a898ef079e6fbe8d46ab3b6b56df794df2515a98f5ed10f51e5137681b7ab8ef614a9349a04cf1fb50b0af5ad70e1672d6f1022d1ea23397c12682ed2bdb07dbe4ea41aeef593bea63eed6cd62b30b2a33b186f5cf58cc9b26c6d5c709933cb2978bf27183491c9adb4a016cddd4cefea6055d3f2571390c97141dbf0449ebd15416eedc8eae3165ed25f1e151b9323bfe33b7fe3219dad7eca8bf9501729c24f08c72712d10fafe45763f1b0b0ba7495920b31b6e6cf6ddf02fa93315ebeea12265b09bd44109a1d34b9216454338dc93cdfc5354540b1d83e533392ba33730e4b13eedbbd74a033d549b7823286e6888198a4c0d37b7a473fc34394012311c90fcdee171a46c25098e37372c476f3a7a5253cabac1f5e22b71b859aa0e09326cb4b84c2e60ec0095ca07605c904951a5f047ab6f3b226a0a0bc7e4d32915bbe23e28f45ab8e1113a97bdbd8820b02fc02eea9f4938d50f93f8103ed82bf5b5a3de5783e313b685d2eb40352c671e6d656c8d09b6cca135f58a0022fc28bca8ec7d528f4110f8e79452b9e8a6efd6dfae3b6ae84ee3381d63235f5ec42e4dc16f707b7e99efe26a5de7b026c0e0e3f3b1ab2cc0e70bce573c0999d1e001a7c58ff135ec64416d051ce8891cb4849464082a420ea28855c4099eb8c6c901eb3498d6d04e9fc0561a098af0b0ee05a05243de7a9732e9c1abf8fd3abfa80e889d7c69021aa1377f3805f7364e969ea2c35fc2987ac73871c340d4ac9b37181ccfa56f561fd825a43a4631e13fff600c6f8ccec3e4c6481ce02677f9db52131ed06f0e0148adbc0c5e7dfc16b5fd4e8128d72c5877c18717a1eb52bf60402103065000c41d953451330717ea63f30ad09e06c74a25b61aa4c822a9de5f481ee810d5c3a3d5e724c8bf5c7494881c4070fc65bcf6b8dfefdc1c91993a90ab066bab830488b376e055cbe51d315d24542490523c353925f8b5d8865a9d3eb1136ae1a8814591de8ec8c2a91c5b40ea438d0e00dafd24678147a435e4f6fbbe1cd84e9e94abf59479bb17f899d285763435d983c062d2c7449fd12d8cbed014120c76db4edfa4680a05b87310ffc3d5dfb2a578ef267c7b72ed3157052110bc1d9c876db623620ff6b5d01034acbbad5c2788f2c9eb772ee28944eac41e6a042ae373c93918555926b596419c93e629f39b0099792d2638b2ed1652edb8dcdc0ba422ecf735166de8ca98472162c8226b2a775178e177b7558b95a5d353d800163596dc26f2aad3c59025791ed257dcfcaceaebd03f1d3d834302f19344171316f8589252cd8cc5144103cd5ce768e111fff98566a68af802df2997211496212e29a63f635eeebf8afc4ad7939633a8e69cdd80d2ec540d6ac0eb60ed6102e9195e1eb10e9d11e6502fe3917c6ed17ac45b577454087b2187a9bbf12ac8134708722b56ec2262ef1d41926f0eeb0e3cac84846428347886c5b63ed4d14c9e4916268db67edfb8d3103f77ce7f89c95bfc87e0b15b7ea6999a8a4b66f130ffd5061fb27a6a052c18922912dc18e9800257a6e8141343be91d645a865c722cf7c25e5a34348aba0e96a4045d7ca6eee49f8133ea998daf67f790cb812768661a618da899f6ebc1e175cdf59f92aebcc4b2220b6581c27d932d8464933d4c5f8761110935b8db372dd9b60215f9a2a2d62d156e62d4139cb45a6749f6154f2476c1de66f59bce6699dc5b513bc9930a7a4a6d98f26d6d91398d8d3729d2f9269b504c525ca44ae4bbaf42a769905e0a0a7c304294244847ba015d7d9be87ab294e0c383afb5b59da3070653e20a5384aaedfe0cdebe2775e28d0ca893a790dc98b0d75d34be728dd031c878a10ca143ed894943f8c57656234b9c74e987635891d19fe0cdcb273f0d85102c076011156b979a69a1b4314f4a4bb304f8484c2ea9b274343c44d6103f392c055795bdef84e6931b5b50265d8cfc5f1da246d6c59202d424ffec8786e570d2fefcfe647a985ca27d6588d3c143c4a2d7e732f694e86005992fe715b347c6bf8edec87aeed4cb58838bcd118dba0d941b21b9c68a1c2003bc9f28b84a7df3d45c079c461119edcea9a29bc67734b677df7f8502345cc06b664250df6c5973044ce63a53b54f5765388fa2aa49525a536c3217438b4bf2188d23f6c99487767c60b88a938036a83e53e8d1ccd96fa0c1dbc8171bfbfd61c474b7f5b11885eb72a94ca0b6193a695a929b27200cd9ccd937ff1012d95cf028c11cbf45363170b1277aed3b9c2a859ee9ea50cf251f8be15504146534d9e1feabac13bea9186a18fad415cec794be9def21045b44d824e658fe62b33539e03f3c57c4ad2b41b508e6b266769b7364e86475a26fd996c3db323a3882e595d15240d2b1196f9601597383d361bdc967cbc78ec907c1e000384e76c14b6e3fa294be63e481fae1daf019fa08d276cbd3e8047d9bd20c59f2ce76348eff7edb11f2be18caecca6b17b97c3dc509ee27a568b704c92a621e9f70657bd609ff19b2be8a83666e650fed4b66bc95d1cbb37d02740b84391748d73a3a87b5fb74daf234d8512cb63dfef0c65306d45ef1dffa8f4df179a0442c2b5dbdd22f9d3c0de19f7ed3ca104d3a99f024e3b81a18ca726cf5a4b032b310473a2ed109b91dae12206a8d8a3ba8f02e9b29d36ac880541e152474f845eb95ec49776f76f87a3b90efdc5532978f2b1d6b480494b6a5d0c4e5fa7a0a6e404fd7832fada858c4f3225151349712aa6fcc95a2f606fc7fbfdd651539e2977bc675fded267718163aa2b7b8dc9c409dfd60a750fc894ab33471cbff0057b37e9cff36ab2f3ba5f0a1a28ebc807e2fd1b7a9e3ec7248df057916d8031384f838d8f46e5328a99d0b0b01b0c25871b8efe13cfbac9c6fa7bd6784012e6fb1a4168dfe23fc0ca8505c43214ebb46f6745a7b1c199b8a84a4048348b14542373b9e8e40d038a95c501ab3d1ac487db2343443dd0b8208e2e777446e08fc9b68668f44eec4c87ac5c4a1fd60b03705de7bd5f9c54ceea2c8ec3efa148948847efe1510feb5a63697be5501d2e24cb4b692ce1ec1bc6ab787cc13819d5283b819a793e9d1faa9cf0a2cbe12e1acb0ed360183d538a7ddcea422797b048248371f4cd1e822d2dcedbdc32e6181af2b52c13a412360bdd6314f610b84adb1330556bbb26b670d3e6d16436392a1d53fc9e39dbeade8659643538c8b80b1c1f53efdbf364a653abf50808e7f4c3003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000029118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000290d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000290a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000290b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000002929a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000029141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000002925e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000002912978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000292daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000029189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000291159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000002905ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000002905c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000002914d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000002903db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000292ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000291213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000291ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000002914fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000292b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000029305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000029280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000029223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000002917a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000002908858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000292618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000290f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000290e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000029172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000290b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000002905bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000029137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000292e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000292297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000292608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000002918373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000290422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000029204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000290afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000291998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000002928d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000291da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000002921d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000290ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000290e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000029107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000292f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000002909726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000002924f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000002903c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000291fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000029205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000002925110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000029283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000002921cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000029094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000290c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000291f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000292421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000291fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000291bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000029304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000002900000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000176ca2ba7d3a5d1b18ef2d43593446711b458e3328fc5950a14e9b38f36ffaa142d9dff804773e07d9ed2556daba8728db2cdd7446bfd1299194f0e4f98ec62bd8bdbb17a8a08808fbd33544609fe7b36f0e894ad244bfbb359f1632e80c90c34fe957980097c20dece65106c2e8291ff8a016222988f64c5dd0d0a7992268118362245f677751bb2d709d9e8c8dcb8d601e580ba664485e2c8503c5c265ea1bf96cf2523fce4443c97fa4e46c17928e0f14e091a95a0b4ec374bfda031e1e69cc2e0a89b1134d010684c6acfeae008588f2d978c2241c674caae4308e79003775462e9f7be4cbfcaa2df75754dd9aee53ff6ce15588858ee9af0d15327807c5eb02ca2346c90bffd6d1d7cf16b19cc1705dc1a51366e9124e74394997a5bac019214bfef9e9f7a6d65285f6f02fc6f81ba732f90cce8b8d95a7e20db63d5e42803cb2fa0e3068a448d258309d569e6b6cdedb02338fdaaf3f9731db7de2b95fccbd763c476148b0440cfc1651880b8c78293b73861337a4f1e87c1117d35bcce231a08f37f916f434a77474b58ff706a4f839cb3d0eebed52bb957745b35e0561552bfd9a66ac057c2061d62affb2694f5f893fd858b44e03bcb9e4fa7a82c60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000217f8c54b0c907a9dfbdc9558c48c70848cce12fd01297f73c7f43a7d9e824c6748f930e285e6ad9ebc66e0887916c5e6ecee3f490e9d92eb72747f264b7c710c67d8bd970b52a8f9b397d476f5f45979d26173cefe9a10c8f4b445507c95df1da998b5d4681856fc99cb26b03910a8837e37a39f8d82472537bdbbfefd584be50a4a2c1060fcfb6624ae151d1a4475ce92d0abb5a1f82e108d0e1e1b2b399bb48bfc9291af93d56569149b8709926e9f14fff52fdce616edb6c55d32d826d439be9be47e26ea6a7e4c8bc151a0cc7534721332f08bc2680eaca09036d37cddb54177d0e842b1d1f5b2be3026192cddfb4cbaffee447ec45c792bb823f46aeb20642829c5202c207c69357c85ae81f3ed1b5c6c5edbf6fbe77a00af361ac51e40e343ad8cac8aaf940b05855cdf870fb6f0e6f981c39cb41ec5dcff2dd93938c873fb058eb1c8442dcb5390da29e0873c3dc2f0349dfa912130ead8624bcfb5bafaeb557cfbe7a1ce4d56a94a529c29b5fbadfa72b39b16c2812f373c61c3b1fda3bf6b255973a9c7703f7d645b70d8d998a47ff197de2e618b38e0cedb8b84cb2a661a3e196593bca24617f554dc4f75407d16a185b5ee32b0c5bc22d3d0e090000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000220d9131be12309ecfb9ef6918958b3ae22b23e71334cb18c6089893a4a191402f3ccf26cb97d017785eba5997cf40a6f86f78f87ae766a0317b0a6a4acf8619f8deb04ece89a9d5733db369fe9504af122a68713ae947383f0d46f895f3bd4a1ee19f9cb50d57f97a2438fd3db635650da46f0e91af0b5414f34f4a239dc8ab32cb14d3a4e2ad50ceee64de8c1ee01777353259c0757314605c513209c994fc81bf073b600d1906058d26fe81886489f022693e0a9012153c53f33766e0710f5fe3c2bddf8c2d3b512abd379cbe2d3fca275256f6f17c69169e48e90e1972f7a0eb0f40fdec5bcd64c712d416f2889f328148eac658f9fc17db30cffb5c79ba7091c3771c2173845149161c36d605b91893478b55ad06db988732067c7264828b21d871949a7fa626f357594423e6afd5d9abc1ed9a5ec124275f985ed13401a4d85ff66f1c0d65237fc4a4f45e998de166d91603231885ac5b6719fb5ffff1d1efb948aeb424a6f65b99c040f4d4b44f7ae3cd07fb86a8276c1d413c0843bb1c963148beacc8914a04689c8a2a0f9a002473ea5402ec24b64af86681eec6c361ee9a7da43d6fe912a159516db376344473186a1822459a85b2ebcdd8ebe9f600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bcf61747f0ca19d820dd0b42e6c3268c1e6af8d22fe0043da080d08875ab45ff1ae8a6df9367ca2e57944d8cd3fc8b6373b6ee13265e4bc27565c869a693266c70085e48177443a2422a68e44ff2e05c87af05465e1cd271b9c74596ea2138c69477b759d39f11142bf19ec30780811fba5686d8b4ddff910149f2736cc0d1062bd2f3dacc0a73b9bb1ff2157d5934817203911493576f8af7191fc92897cfcb9fc76c624f495303006184d9924dfa0e8e6fc0ecab9c82affcfbcb6d8318a56bcc88e2553cecf923dc3f8bc46fd0221441d93fdd59811df1ebc424f822188f802835bc8a69cf3d49127a510080d50ef4ff5b399ebd22ae551582d970b3d7f3bd072d29e3be27ecf9353832a4ec05bf5b2cc3a55d00821488b246ea86d465159077b06269a17b6037b7914de83b2d8922cd0b65cd64c137760332f143a14e1394fa14cbeb1dbeb3b2c44856f168e4c7805049cbe8338a671f6cf85f3d68dac1831de35ca65897de8e0ed661dd7029540190c41e941598d087f5d63ab9dcf9721578305313972564f83b653ff2fc9c482d92f7779a2ff9e66610ad97b8b0214976cbc683f4d9ae496b6c3ffad3deaa05ce0b064f11265552b4c8bf817bf4fe0ed00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac9a044f8fcdcc97224064596244aeb3d98a331489a97328e6ad7a84f8f88823cc7e9f043872cf081baa8064d928350fcf11178b520e36f19e344f530fb54d01cb94498d5adaa74d06c6bb69ef0cf0e0adec58d933d999da7d230903a4b28aa27a6cee276679e72f9f20517613e92b0fcfea04da20ea646401349c6daf960e3dfe6c273996c4eb4784be3a3851024666ca5fa834264e9e3458c83ae83e8b75f4a444d45c2cfecfe0c5ad826e4bfbfe939704f7178468aebc24a18be0ae471acd69ca5b06c1dcb4b5c76c9949e67cdfbf15a3281d735468f2098eac442185b8e27a37379b7365cac0840b631005b8c4910fa2e7ef447a702367694f5430cfb263034822878fdf904beedecdf8c707a1f8f450ff6a3a438026bf33053bcfb888759f9cfc4b9ca8fc2d0515779bcdafeed59f2aa068935ec540866706d4ed149a57128ec07865b19dfad00282dfb9079b0e78b36d1008211e4740b72bb649fa77033e78fd396181d2e5934c83db0c9abb8040578f5fc0eecdf7e0f4bd50a66881a9856da5bea5f6825b173cfa25b5fcd66deb6c156c801da680fa5aabbbb56b94b3edf1023e5db026bf5231b5120c372b617c4688ae1a7d298660e5a8f2128c2760000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a425cb9c5b1c6f1545fbed26078fb43c8ed844641240f7486d178adde55b6f3dd4f61dfb1ee41dafc04a1b34b80c9c1a56acadfa96f853de189e67725b675bbacc2ffd9380086def3171d43f7c5eed3085d3af3e213d82d6d976ecceff06ba90eed64c6c973443a0c8ca6daebeda12f0caf7da32bc96dc3d5cda4f1defd564d366d09851eef90a2a275a492787367f4e392076f6939eb72ccf0139f6a059620613bffaa49f08959acd4c975775ae67777f044801e4a88152525e1afacdf1998107068507d1c39b016f8804ff67b5ac9b8dc9c2747e4484ed82644020aabbdce56e4f336444214d2ea2a0e22f33252e9a6e6205d6646465c0ac4ee438c32cca2ff22bb6a092a86347bd5b0383f9ced1bfbe87ff0008a6f0e78a8488c0f7f6a3a9fa6b0dfe36e461046e21afa624b08dbe9e04ec92f9c80a9c56e1312a7ac69adcd5b4773e8b9512b1d6928eede998a67ed7a376e58ef9dd7ff017c5c13cdd52a5f1ed6f5dbeff2878a7096463e19caaaed9fefe3fcdfac6154bd7b7d304b1d6bd5720dc0a56626e96866bcc8fb51b1c3aaddab83695c5fef663827d314b5da07056ea4825b810b8553312972e40dfa3a46187881bb032cbd7bfd79452278fd87b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000853b72b86defb9e243c7ad2bb1b4f548fd020fb24aecd6d34a3b10550efdef54e6be25d8d3444808e0952babb313642716e3d57980294a16ea9745dcc7fdbd1beaf55eeb45d2795d951d0885f8037cb68801514edb0e0c01a9c993148ab415f77a8cec666b2d1fe7e5a8febd8c101e3a7b47384163abd5d4a8273a24466036a89d1ba3ca9d99f36559ecd23b4bf7f47028b004c7aacc994cd37d15f8038fc2a047d15f8fad2cae67a546650af1e9a07aebdcd2147163ef28417171c1f79395ff3ab5590f531fa5188f5ad9b91435ca034c6051f723ea8f6a3142231d175b5280c6e3fa21e1058d61a64de45f43febcb74f21bd8caa6a085bb0994896ab1a903788a7653a21320debcaea331f25faae83a89f58358593d7016d4065fad4c489618d9cc52fd0bd27da599ea000f5ca57260d7afb6e551167368d64ecb897862cb137ee371a5f983510b76ee5cbcfd414b46c59d07b2fd4e6da5f2ca0d06ecea58948f500db0df7f94f86670adc884094630374781cdc9cfd1675eb45169fcde1ea296731cf195609ba268a709556227cc3d2f9d332c110486fc117435fddbf2506722e6a9e488b150bf9a7ba6297e0f3e8ca5ce404361b4ceb491ba3eda66073b000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002345fb21a4deea8b47b34dac4dfd833220dc12d278723317c1fb9bfc1e10433ad402ec516ad299ca313bfb58e1476ecfe90ba79bbcea14bec68610b9f46110685681b01d9f322939d43ca7962a4643f0507fb089ce603e43fb3059bc8f18cc0aeb583f9b781660939caea55fde3d5584789c0075afa863bf6739288627f26be7d4a4f82a018a1ec14e1f47b731c9aae8c1ad65945f1490140038d95984857cf4d42261f491fea8cb5b35f5711f076025b57c9d8c4dfbd8a92c8a3b3535b64b78ca9d02a87c639b943da48afb56098c886897c18601e4f4ca5822ab81a066448de401d2abc2b7f4f7b25ae81991361e5269f0314cb56e55da9f5203c0461f8a4b07a4f5888e8e9e2fe35b08bed10a4d9c21de77952e064c5bb638add8dde3fad63096be26f9f0457a726efb472dfc1013eab6efe44494938978dc53135ab5019e7bdb9cb98750c86ff239bfe5f1a4eda006e81250b665564d4b1957daaf94befaffa611037f4da69586919b77e938a2ec1ad69cf948ef3965d582d8f0193bb8aaff4c917c8b328a78a42e441fe346d583e58daead0f90ed2103d2db7635e29a35b1d118fe038be83b38194fcff66470edb336dedab3fd8de9d9c130decc3e0326000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f44d29bf81c5b8511d8516457a44ab00d4cd84b1b5d19a51ddf143ebe36f44f1064e8a27c7a606ef253ee775023130a156c898ddfd5b40d75b3762f679b1ffa6fa15a4ec58b786d0f34965c3e63b6f30ab9a1903d72c71d359aefe82e0f7fd79c41d59a9b488a8a83ed448f7ad0e10ebafa89204c612f05eed4b84210bd5abffa43cd8dbec1af0c4e20471ae8001dd2a5d08e0b9fafb92a9bf8bf0af1522ecffc5e17884374b2fca0165934c0320fbd308b04ccc49783829c50a85346de47a2a4474d0db5d4a378a6338c3fb53f710c0839184126a0fb899bf4e51249681b5e63de75b56c615189c29b25390a8f6d0a1f1862014eb0023127e34473769f87679154d47d7c783bb88aadd035bb086d74c18064e9e502353bd4623cf33f0865a43f06f4db45f85c16da24821c53919c6cb4a7a333b04fdc9ecdcd47f67beba75e07086c939bcfe7bfd6a90294b10e692b66383c3357bd76aa4ac1466dfb4f4f83670212d577a478dc1f263eaeb7d234b90caa606e39035c93f44ad3492f1f681af9b21e5e8899428e9d326e08154c06f67fba0785ff3ac236c2180dcb400f7a9195d0a1023afd1391acf10a5ca88a4b76e8a2528c067a66e0e55f21cc84c53460000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7d19d663e0cffcd652565c4ce02311e3add59ceeebbff72976f6cc1e47a84510359b293d44f920cc76f68019e2b2e98d5ad5a74b833035d3380ce0ab4830ca8a5c1325cb8e561de1ea2aa8704292f22222be875c30ff57fb88184ddc10b7aedd9df95b9671f32552980f3bd3e78c2e572a1caeae44a936a7bd18b6fa1d2ffafd1466e5a5a5bd8afb528914b97cd02b20422d03080fee86331b78827340af53a9abb3c7f3750544310e3914b88216a045528b991a245d284b76e1e940874e35377b8420b8a95819e65eaf4f9e1a39bc01b6c217aa8df1298854094f7fbaf1d3d3dd23d8e55d3aa3db49a8e0368f4653c883d75297437a264a5f7557d001e1b0d7b07b4943b3c41dd93264e1e9b6f36850e64116ef3579f81ea00d2b58a7e2382077f9edf2bd707179df21d5d1082a9fded711c40f214343e8d2aaa4158ddafceae333b9c7e03a34026984e1cb554781a2c74fc7fc97354297036a6045d6efef598e562c3857df325ae522979d2e9b628871c799cf673c9dd26d824c1b3af647b4d6f62d72e5b9eb38ac741f3c47f4ea614cb808fe4ac3a3d72a51ee04205aa007c3920d5378afe2bf1046d65fe705d87a8531e105a62e2e3907b76147f1cf4ca000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094c525d72dadf9cc09f9ec1640d3694c2df200303934cf4405dc11c51571dbce05124507d34cb973a8b45988c9bcf6c4418adb3702663ed20227578d7977f8dde2922f9333f0267972e2dd4ee08d47fef574305c092322e922d153b2c9aeefed08bfa0ae46ed35d4106df002f1e7860bc6e50cbf6bf5ce579520c0e0d45a1a23584c19ad4c46e7b367bb19b248c9f3b2a6d27db2ab8a4d53f79400ba0881b85a5d885f7ae690e01fc4befe17ddacd5e16edb68a447ba037e822ecf8b3d55e422bfacd02d72b371866c3da9f18187580f7f9eb1d0f6589202499c14fbc8032cb75cdf8a3d46f69b21783c5f29c46f74e7ed5f99372dc74b20c04884bf343ec05e3cd1c70e374636c0aa84364e0cb3541a999dda40aacf8bcc73af3bd2f96f390d3c84a44444cc72e0836bc5d5400a708d00016d89f3c7210ef9173714e00acd43aa7d11a613b171cfb7e75008d87ba23bab55023cded988d86c67c43d5a45ebb3d3cca244f48fbd6c2517a864122b8b6e763a2a2e22ea7f5e34486467fc05c3816c740e04ad32491ef5b029748b8d44c10e482b27f76bd7f051e28ec35f749343951d8b1c2f86f6d797e3ee5da321fe0974adc846fe6c49f37d249e3c65e24e5600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009268bec1861590a36903c00d379c918ad06711651ff12153eb1a696f0a8c97d01213cf1fc80a509709618e67a470720d3d5c7eeac482539b5b030e827433ceb3e5ce6249d767445aee297e3588bc6f106fe582cc1265e6070627879c076644913527178b09a5d667b96c35257809a286954ac63523159d3e227f1f1ae92ddec22780ff12c5679fe0c7fa81cb6fccf2538a9fee57ba18ca1baf64f6c5cfc3afd95830b4c876c4c27c61d12a22bb49379ddc5bca016fb88216ef6f7504f5834c677dd256c72c393653b044b06f29f96cbd7b261fd98fb402d2f1c67f6f9a79d6985e628e3aa12cd0c0faed286be5d15b44b9b11bfbf99ef8baae1a447e94330dc4ca88dd5503d9a2d1b4cfac45846bdbfb199a872ef80720492508094291dc0e0f3b566167bef5762ebd07671eb5e8d8551369ed937bc63468bb64836a22b5b1a5a19986e43d1e644d5208914a708c316247f74d03780c10698f430689176336552f0d06dea9647eac8fd5522a91d5c5b3bbc76a961355b78edd21df0509cc913de23bdb260108f03a466c9656457073ede1971a84b7222acee1b3b88da5faaee32b44eaeca64f9d03ef082eba14bbe2063b037f919099403ff279cf557efc44a600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ce249fc3c27b53e173d4a96cdb88dee87eef804b5f787c6a8cfe73901dc58a563f676040928bfc52f60ac35c07969581c61915c4141b74bde35ef099af497cdff61b9a691c0059849e8e87ac0fc0513e1f9a6439a0a61fed8e46020557d879ca647ceab0a5b8d6563e5941c7ab0a4ced5dc348d7f4a1ddf8b5823e4ec16a5def97be338bdc2ea9da2df00ede07d48519a4b0c6871e0e7cf4e4ea7390cdf104c574a2a4940343323c8e6fdb0802f21c026990d56d391d764b28ecbafe0e1e0a5bc3739913718548dc365335c3190a59b9b31aac561a49b6de27194b9c507fad0d24b444f2948d7a4d94b3177905d333624d7a58f43450dcb67e030bfe31082f4c1bb2326a78ca9b4421fcc937f5f0ec68d8aa8f24326d99454dd8163fcbc8da7e76cac17895c69dd4c0c1eb7cf60d8dc841b79e3d4a7eda9c0271608ae3f5894a03add055880329e7feb11c321c3493ee0d0906750cc70523da09b8e89e8e8d675a99672f100bb2ce8a9ff9c96a656d7e92d6ceffb5e8ad003e36b04499ea5fd09905b375c97fb3ddfd30e9b3bab5595101751559cb876f4a586baec21cdd5f62c42773277ca1901c62d40592ad5b696c6ce1363a6d0e62e4fdb54ff54a611ac0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000145df665e39a220d63b16f8364dafa54bd6ee5fe35a83ccaee5f6f604e2023a41dccedf67084ff486b40f79a2754173c1d4d1c7fc31a1aaa6b3b8d5232fd8d644ec2880dbb17c8f51588521e0f5b1d93a5b4ab260f8c444356cf9eb17d010acb7707d9e9612d5c1fddb13f9875bda74b93be39e227255a5c11d897c005270298c2d29cfdcf751e4dd6679ac3b420fcb8dc75c7d543a54948107a199f999e8f88ef934eb9dc8f9d3d595c6a7e0a5f513bfa0ab009daeafaa3e2631a466be2945f660c68fcc521dc13828aaf4c0b9f741b8231a49b7b70d331e207bf282b962bb9f23535070a0fc4ed489bed020d948c22eaf50c2e91ef0386c1866a20ab3722f2cdf3aef1f8b2d81d720199c178c17f8203a331b6d4c20140e5c77b2f7851ea5e8741c1ff4bd6c9034e7ee98a2c98d6caf6b6f39a2e6687a2e944f3f764dea53fc0a777d8f629969034bb63e102708f83648e74fc9039ca7c5e86f25848288e7db7da0a0d1e4e5a02e91057f87a4325c3db0ff9841eaf0e3c8084eb51eca3a84a7616b9610f0df2f2c6c8625c08309e4c951b412267e6fca48e4de8916895d9d64d9ee69146f52aac74cafd9b67229b27c31c6f691776b3766fa5167921917ade0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6b1e4ed35a747666f67eceb4f68ace7573b1b6c4787a8ed555e22c08eb911bc129da2745aac5ff91baf832527e53198f727c0dd4ab628da084fffc39d741f1eb3373cb98f4ecc667a026f4a3f89e1273cecf1b17a568cc7a38e62da653d18032224124de7ad771b2849a438ddb5525c4725acdd2f8b32a86ea5519c8f54f2cfa9dee2f199d440919183caee5b4a8279ba63bf725eda8bb385fc4b0aec84f1a99c803be7377d9eefb7509f72f0de285cf23090a4b1562c2bbee4791d84b43bfd54fce0a0eaafe6c2c79fbafb0e65ce8d14cfbb02f73f38845118ffd2c351747b1879d80eb1760e58aa5d8bcd62437d83f8be7ddd4aa49f069e0574b382ac9737c4d3f169a0c1ed3d76bfcefe0819cbbcff279939c8863cc3da680193411b6cb69c6846d539b360198890bf3d7b48517a781feb38fa5b6de3eec3d401f9ab8c3641bf8b30cb34a4dafe9e0efec4f7457c290fd6ef78f8112ee3faf1be1972af2cbbaf0f991693f490ac2fbbcefbc943cf7c8f1e74cfbf6c2eaf43e338d5de206b3ca865d8e8c8503d3a10f6aea71099f4f27f677a6745b81fc8dcd6c1fdaa836376dcea4d0caccefb3aa07f828f589375b5463df1934b9a4c5c9245114601974d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008df52b5208717a1bc456b50a608c0337774fb23d83d2d3f696eaa50546e9ed7c479fe0b1651c63a20f2b381e73389a0a2a6c435fbb181bbbfde76ef5e07307eb4657ed3007908700d1aa2f91e7d14b56a25bf9019e19ebc02ff4e90d5c9b5a958646e298ab34aaaac404ea734c5f7453e090d55c1cbdae414a3e62fe6d9057c7c4e0c567931f63fd6f4e1d7459bf515e0caa53666cc107370a77bdbb7aa297698a1a380fa17f76e24c08ee913844da226d4699a342d395848d2894a4dd1f688c96830998ad8869900a64390067d9c9188778d82f92bde91e04a50f48691e7c7f87b01b77a9ea3f4670bc56c2f3f5431d80d888ae1ddfa47d0584c79f692d002a141ea98e8cad79977a3720e853bd7c53cfdccd650bb6686bd1a0affd2dbcc560c1d8e884bc39c6aafe9e1aebeb1432db1f1af1f63514b73aa7485593aa67e6b579c3c9cad25dd169010abf0a990f7b6d703c5e09418511e90144f3aa68fcbf0cdf2cdbbff5c403af8cba919706b234b87d465fb0aa374d311bcf2b47a60df543dbb9794629f7572ed8d3413c2eaf78fc69fdcc2a15e7b3d0a9337daee3698349b4a257a7b70c3b35af605254905d7458e1ae36b808e9a98d7cdfac0c8f5dd4e2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091a6737629a37fea4b09c8db3ab12387d2efd19ce7b234880c0f1757f698e0339da12aa00c69a827a71d2cff681ab42e12b673d7e47d6f579df185e0314a7cbd8e383bcbfea463f379f900482bc71436529562b566bbcfd40eea5be5a0e82422b20bf1d4d597ec3d2264d4388f9db93eaf6ea66d6d6fea2e5958b2d74c2fc98dc0c38e97790620df6004cbf30942c7fcd6d8be9640deb0386f557f60de8160f9919a7233b83ff6918ef963992de19959b6b3c0abf1cb343fdf1fc9095c6bcf5f6f465ef6f0f862517e03c0c0db189cb0bc9d961a6d9bb9446fee9fc1a07ff4145c77874479bf18ad6ff31c68d8f705c407ac672dfa35c9852c73360b6f9edfef0d85c4b46938298a711b6533a71470bc5502c8d5f4ccf9e2954bee82621907c7bbf6edf49e619a9b21c9720d8f1765ee48781a9fede0a269bd11369eba907f79de4b0b215b54b7be669d6aeff462878a5d7b881f4626cfde47447d8b7ee0afa51b410c3c635a87363dab50f44ebffab10ce3b3bcc4e9693f68a4e8d2c6038ad0842704b21c2dfb7402aefa92cda199ba587a89de9ee45b0ac8711fdc4fe6711a7d5315763835b837b63d85af1b955f079b746f1c0ceedf94560222d8e7da7a810000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3f39de61cf060528d228c610ff4e0894ef514afa0ffd27568e49cbbf9b6747f7444868b47e0342d382b7286caccf495ed2f3d4087e71f9820db19ef42451ae8a1246dee84fe93e3ad3351ae716535039ea271c54763ece0428fd41afa2ad0bf845a071576597aeec3ff92c18a957c014a9725e611e868b1bbc770c4e8cd15f9fb0042e2ee7beb58cbd5be0772897853ed6c39681ebd36b4c78cbbf3d7bda1e028984b8ba9363af5f9879b79bffaa8ece58ba0cba3d3982ca9e4142936dae69e0dba831971de2dacc17f5bbb45cc9b5d0ba4c0358a4558f00e2a4ba35b9f11ae95451e3e575928cb665b115dc195940e6af9bfe55d524eccb023a0d4916b639620f36e5b1d7e7f387d10cb827f2f72ab6d877f3ed32c3a26bcad7ab13f75b18067765f7eef69c653050bbeb6e66540f7e5fb422169c723ff679bb10e89d122830ce7068fb0f45712cef9f6d9dbf864035f3d17e6d87d542f639346014cfe63c59b9c0045d0d7041b33982398d863d93fa33b4be5060bf5a79d07a9878a5944ff3180d0e3f3cc44ac25e21a559a134f9bb3cc8b525d4f650bc4a418c18a1d7233e24a9e7f49ef00de19ac2c1f7eb20dd7dd861fa786147227557ae5945d6dde6c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024ab2c5d284b709e3069b67904c31e06a8f72e2a5dd71463e3d76d5535782d60305f243b99842ab80709ed9ba50b61524daeac5f82e7a1d1a7faac7bc5e022b7f11153d4541eea2402906aad79b4ac7616707d9e308491fafc787b08561f82d0f77cc726e5edf31e0160839f9c0ce66206c28635bfbe84e27757157cbe68c8c18e1152f007b13b310ddf4b082f835e74310a4f4c6ce9d5b4f7bab868e045d424ce87dd65c199a76cc18889c8b27470cdb8e9109668bddc0f0aaf6f2daf7d64630d9901269a3c64cb567c52babe3c67414445b81147e8d7db49d2810cb838cbad9735e2b61e3ce456702d49f46667e77fd405ae531bc0dabd26d1fd9eba67d6b20bc0cc76ffab53729c4fdbf23a9151ec510722fd96e8b34a6f0c352f3caa14c65d8326036684f5df4cd4c31e68d0198c993ebb0bf0b2acb6b1e76059dcdfdf97e21c62fd3e62cd73bb3547e1f9ff8b79a72f9dded317391d4b79d2811b9c8825cc9261f87945db53d715d7c1d62dbb68950a59770ea39c3eedf53f2ed1f8e8cd6c36c4f0e2cc6fe20ba1430feafd8f8a66590442a33221c4656a06d6efabbc8468c760efb965fd34bdd4845d16de476fdf2fcac78946ba9ad61cc6ac6a9f077a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae3ca3c73318c6b4b88342bf8769749a8b618b26335508b4e2b11aa4d1820c90d51095a4d27841839736a3e1d361836148c90facf30fb4efb078f430dcf2ef28b1d5db693f7e9d46bbf82b32da7298b280231fc7b63823e0ea42bd46ec61e29b6b2742bb581568063d1696b7db5dcc8d00b897af4b1b8aaefa43282c7de2cf86d02585ebcb9b10446485155483809e384647e5de763a4ec83ebd5dc9dc2d243897e471a470fcf292469983e1036aa7275b6aa6e9f84d94c3af0b0214a4277d60d5953eb52f9e2b45a6363e2f59511761f7888c27ef3af8c95833613860dcbc1eb25d309b76b20b721acc38fbf2289b0769d78539082c8452c6cfd152f0701dcbf66c7528b141510e9e588902652e563a567ad11e6b9c6148e8766bfa4a04aab8e9d9d3e9d7a67dddecdaa677b80df5bb8d7280cd838e15b847dcf1710cd26fafa4f7120e4bae8cd92d99bd7a7588bbf80c8584fb1cd8dfa5068b7a7ec2792c015d630ee8342ebc0b76772484fea2902631ac42e8c73c678404dd2ebdf6f0e8b3c2169a636a94729a4d12067ac7f6110e9ecc939399cf1316dfa9310502a7fe30d9802dd54b627ffd68690adad3909f294995ccbb0c3043ef184713ace7b056bb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa5a9f64159bc5b29f530bef6ff381dea095cb2f7d421605bb94bd5ef49e692d702ac359c755ae41042597e4d887f7290708fa7d290c8677be708fba2c33dfe32006743e2159b601b7455bf2074c30ef1419d008146d47a1c249e4d0eb3f24478e009e794588691c9fd751ee6e8cc7ed04382a4d01cf449309fbdf5b3d0fccbe64b7d6a63f02573d0c740e1527be64caf1e9c2f3142b3e5a0a57b8d2d5bc2740d435170181d5cfc35a65e3f0cd28f943a04f615ec4fafc1c33be4b1b81920a8ad47031f2472e8ebff9d97043e323bb3cde8400977c966ce6f1705a4a8a3c873f5a21674e918df5a77fc243756cde7894e43db219af0fef320de302aee7c32f36a58256b7d32760742239bb8bd34f06094446e3e66b2e1526cdb315cbe04d7dc591f3fed76010d50795a5e154b6a1f9a31c785eb1dff50d1c6e00ab8f8413295049f77b4c42242475efe2891ca169b9c007b5dff756fdd67bc9a82d98f7e006e16f0156e8a0d16179bbbf432249c95a2ed8afc39f19f538c8a1016a06a1557c898abb6aab9175f8eff8c0a5c52ef565a4e284d0e715ec82a74232fee32d22803cffb79e4fff253c9afb087d6432a3235649b0a3f3cd5cc18b41deb9f42cc9dfc900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000684a4f26410df409fa86c9835281d416b8026c2f8f90d68c01b3cbc817fdeccdd277257b317c65ea63ca28f05fd91f60fd163e6aaea3f36bdf2897ed2bae5f9727562883b63796ecf5c15b0965e094abeab0c77503c373d130dad553579d2b1f2ba3418bc1e71aa13df9035e1305920f3bb9ef4decc093a14b7c05a168c2b0a682ebc67a67d996379b462710ac46f946edf3e1e948cb2f0b3187d744549a936ad820214d0af485d43001f3f7d3f46cabd1d2d94243cdd3da310f9b7d45afccd976a1de6374e84c40c5b7ae63edc89e019671b01b0e476c2292d5f8c4942d984eb6384f4f357b168daa4ee0459e7be870dc1cdf499cf072851317a4cd5494f7cb5ce2623a227b62d26402932f7da2ee786ca76a48a4576604549147340f265c264b614b4df7d75c08093de92854c1448789f1de1e78e387ad28be6c8dee465a0cb4937877ccbd22a91cb5c1f76ebe3b97b20cc14cfa36131a7e1874f357c17bad86ab8b2f5ecdd53ec57536af0c38960079328d8974cc6dbb0d567a81e9cb6e2b2c4ee61b131c76b0f3928cfc7930f6f574336e8ec42a3928f89280c5e4e2a3bac528bbb6a97812877869a50ea3cb72cf2c2ac0185f1683cb1f7bfabf1a2056500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d85eecd2f31e965aa58bb1292761833c83bd2c3abda7975659baa5b189a3ed1a04294be81e6a6123f9fb905762880ec16e9a1dae4214938fc533d83bb9db513b5f65096b37896ebc19830c6d1be53eff5e6d49373691367038b12effa843066ae9291be8f2a1a3df55320e445a4ddaafb9f76c678a104af65605132870481b9112ad411614c0eea67efb6e95b1333c2b54ae15e3a132198d48b6c488da8b52258f8a924f72205c49983078936efa7a70d2ce435d098e63409a785405bff9438b86c2b35b9649eb9af4991f60a711f0cf149e095813d75f3a0443e2384ed2ce1840acd1d30956213eecbfcb8b1ee11221e35fed152dbd7c42e5c7c738389337129f83563df898b30d9417e96a0aa1e825ab3548f8432eed0dde63b49387e46b3f99bd206eeba7e909bc7ae4566990ec8cda1e213c02b96b712998cb8201ecd2919100548d44e3f00d8d7365033545bfe95108c1467b9a0e2ab90b885dd2b19f19432955ec879179b97142dcf4697a9902aad961ea95296a7088fe7ae11f51403644bcdb2d11185fa4179d6785d7c7e0b2b0e113855d8e38da5cffe84800e7e0e86db9c9c552435f57deef80a0058faab0503ccb4d7fa92780602ff7e5a498a7f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e891624376dd83f4b3d3573879a8589d8fea5e0bdb4bcc99c32f52d8be1a077729b904ff3aa2fef755dcb2249a524dd9a21d7981d931a05ee74eb763f5fda7558ce006fb860225c3ac9ddacddba45550bbd83883761f83946a9591c736709d5d29e5a737a523c8a91abc4f323865cb1446a3d817f1661e95421072019539895fb063760fd898e7999b1a1c203a5ecef95650936aab417a1abe78456b13058bcc8d691b91bb6cbf68bb9cd88467d42ed16788a64b6e7cb9ba9130e77147bf4e11bca2c0574a4569d69afc6ededc7ba322d8a2be6d9d6720c348dfc468ebecbb23b0876b8a419bf56806d11c48644ba0d5b69b10723a94968390fe9d68ae9f9ff4634e49998cbfc8c50a3cc75f3c443be9ca01ee9e06332247118f982bba1799c4ef9133b331ff81e959ff38ad9a67bc5f4bd69db26e0b58ba68aa4e93984ff1f7badfb5eef9eee9b65fb9224c059b5c016e70ebc1c0f892b53ae0eed2f39e9b30ca0a7f67d054e4dc70bffaf32489c7529d754b7b1a56fc0c1917364e46e742465b99b46f240174d099585b3e97a7cf82625fdd730f8a5a512d6a095ed9f3ba6bb902230e1a72dbdf3d7ef0ca6b1919d1c2dbd156f8893b0526f5d3606651b2a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001092eb271ba5de2f2ffb5319e2243c0f9b1bf13d2144c23b39c78e67ef668bfe787133ceef3a26a7bc143f2a9fd19cf7d6d71ca59632fb533cb4ee45ffeb275ad46db7201b24d5df637513325479cef9efb6b10e502e971e5ea32f4997d537c022fada1f175dd61972b794b0b4101f95fe70fb7bc6181d14dd06893fd92c7c54a82fb80b0c5738ca761e691ab6d8c844b5b275ced3bca3f08166e4aae110508e127ef5709e9a3dbe62e9cfb0887e3a554efd546cdbe14e3aa3483f5f1542461587f8ca2ed8961df9d240e26805f172d2632cf704cabe9b3332183f637e9306d5508be29cdd2aee2b1595c10a53432485195648748ea25fabaf3144e1ec7a55d163660dac2b65ea993ca6e9a355f4025870421b96dde43978aa3fe09f456793741eb0c2649b4a82aaab904eb1285cb9b75e65ed52dbbf7906ba4f210111ee120f7772207e521f8208e2084c1229c9f48864192e5c33f6c765d2607f65b3c0118b03cc84a74bbc90293fd61505ef8fd01c5b7083e68b7180db0cc45fafbaece7f6a0a4f0dd4510b6d9841a2bc76cd638b04d9d30a077fff46573473baa575ece1d9204181b06ef9abbd8799dc8621239b1a3bddfaf53b8354fce71182ddc0d992200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ffa25c8436f1cefb99422efb38deff85ec5bfea17b5255776e9c0cc5aa1767d9190769dfc5ef056f80bb6c08e8771f113baaa81e3a34b0f901d4d9082ab0033d2a8672f74bf203af202c05c09374e408f5bf658f471b4feeb4156abd2fa1f2045c4dce9d3c6b93522d62c1ad45208080264836b7ad3d94c7d0281f3092754c6499043f475a874b17beee9ec5aa96eec5f0b52eedce074911bbce898eab1f4cb8d0d85622c8a81ad08d568f043542878c6fe8b7d751f5392abbd77dcc3fa48d2a1231081908d10f004c11e9769ae4c1db3a6cc8dc346c742fb74189529e802dd4a81e476bb55c4fe5bee8ed20c5257eb813db732d3eb4122c1650dd117cbc1d0b5c04f3f69b026ed947173b710c656cd6f4036c02e30b093ff2f3610f212a5d500ad740db59b54eaf32be4db934c506ae10623a8cb06a32e9de7aafb270fb4a8c0fdc5174dec9c74d85d80c0737d2744a26006a741ef38e198e07770a23ee492d6a00f268f5f31575f53fb534024d774c70e99dc0e7c741c3a7dabfdc163022b74ee6377849d4dec8c9be78215297627974932f0312842208c878277d13e60b1d65b4434cd3e87bf16ec8d62513763fda0e7f17f9a31b7d1a62e503cce0eccee000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024dde9515faa2252cdb1fe4de639baaa31db2879dedffcdb19728bee2778655f26981adf1c772e258f601a605cce52f1da3f66196e693a1eff6289c5c67842145afaec75650cee1e021b5ec3b6d9fc87fd666fbdd0e3edd3b9912830803a1ddd4c611f26496bb7adf759028677faabc196d7dad88257d431afd30ddb34c331a49cf927cc3952aed71851ad7ae3c23ada0b7ef12ef7b404c370da45ae188ff6c65fc45e815e790896778f1eda9072e16c88dc75ac262da3a37a22108dac167beb0b68494d7da8d4e197c95e1da8c1fbbc1d6d40752311313afc36c9ad5963d4ec0700a26ad683ebd096a9db8f403a364e59d06d0dc35c8e528c97c08ec9a4947d113e873c6b52367bb4d6a181ac502be724e6ed5ad4bc7ff40fb5fd84e9ceb2db49752c641546c7c0425479e7eecfefdf8ce2cd6ac545a9309873f3cb073ce3f8bdadd5f7c681fc08268786e14faaa74325fc230b4ccef58010171152bd00f72b1986e649e893ca21efb51c98dc0c0482c02d5c7e2406ba19e275cd55501dba13d4fa0c26468ee23aac977b8e84767ec3837b9e4283abc5931eaf52c4c2000d3da51ce7a7977cff629c6e2f310d9d06854bfb6482c23b624fb8ae9fa28559eae800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009aa26f6c7de2b08451b5f55d162a892c22977abb5df6687f2270b2f9c88e5742b44ad92cbf98e1a57b4b178f038054abf599c766dfb05868bb0021bb5385433b75b566afe6ad7e66538b54172c6c53d4565bc38bcf194f3ec08db3b8a747640348539ab6efad3d5978d241c4aabb7ce8e52b3fc359cb33c77e22309f1c402afcfaaeceda84cebdcb63a99f32cbdaab3d69be7103767d88a95413f0e133196993856d309380d38c1801f3a3349042ad73bbbc563c0a277dc3fa0e04d3c4cd4ad04700ae0d38f661f46de691424aa50a5bcd48a7585ec9dca9c182b3330787eaf64da4a82ed0a72ca3b938dd22220a5e495eb06c590b36fa905288d1bc0b0400b8930216c13b4b98419e5c19f5d07f0f393008c05c27a2716cba50bb05f276d94edb42990f9dee87c697463cf8b86a67b603724edb61f50cc6a10a0e1b2501ac3aedd6b3c8e60032cc0efc1da42706ad8a164a15a44aa3a1ad32af62f48bbd899f29ce8715e1616764187671e606b4b500ef2856703a8fe46bf6ae9891d617da36ff886ce91c0d4359744531add5d554e15d24db3209d5428a56fc8cc66340a1d4417fb421242ba397eb7a3db16f04991ea5a693c99f59228a1a36c3d37380e87d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4f7154b5922b416a40dae2133ddc3ee747179ff02428e94fbd38dfdf28dcae90ade9f78ffc6be4ed4c518603575e78ae85d64f1effb7759a9f737e73acb31f63d9c14b8f6d8cb3fa8e07041624817bed7774e0bf7137f012522bff520a19de10bc4e392aeb80a461092759f9d34ea670ce332cbcf86b222328d91f7266b2e634e64f9413883857b88e852c45920bd87ad70c93973320dd4ab8b0dc5ee87fa6088c8b83c2872ac369ec71212a50763cb8f5d262c0472e82e8f4de3b722960a953a397086fd054213403380f2408723da704d4e2b0f20a49a7673dd69f97d20aa0a7b2db10248102711447547ab4701eeda1b57ef471f3ccac9f2e4220a9749c2eb64aabb7c7d105fbb5f0abcd3e44dec257d4cba58ac335bee2dccb7a6f7e69ecf2083def885ecb2d957bb0c5c594c332113344f5ff4b2cb1d533df2fa22838499a2b86ce93fb63ea721d52126b191f3d63556116b8a1815189ce8c845b901590c55695d5f5baebd558c2bb2768183279c6226ad913e420ea1f696f94f0ca998603d88c91c734b65d78c3f7197e3664c0dc64e68a0607ec6caafaf4600b6f134e03277434649d647a5ff68a6d72296c5638f174d4a567d9ad6c875157f4ce3b10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000980880f18ea6bc830f9f18b8fcf40fc79ea121a0132f8b9fb24d632790b371703328d2213f9ee9370d3a345f04e5cdda0ac290625cac8d315b737372289eafa912a097502b2da5c64f946987b1a863cc9f7ab6eedf030f938dac866bd24fa5980dbbcea9bdf07faad24be2b328b5af048ab30e036fab437b2314bb9b9c53ff1bc0b861993618b1387556343b8085d391075c5150809a9f9ac92feb8ad9d69312a007663a0d33fa9aec27b7c493e4c378609afbc58042b1dca544b1caa1275e3945161edd4fd4796d7e271c105176be767dd3a2ae629d6754362f0157e469dfd0c4ef606482e5a582463f58750b76b35846f5516475b2ef44651600a606aa4804a5ac2f0ad39bea83ca3ae864336a03af9f08fd3a705b1584718c8da9249e25cc1083261a4459f64daa653439ba8bbee2c26e815892a26de5ea42b39cef01f9ed3efd74713fa5d9c94dd4ffd3bc7c055c7301aa72b74424e111ea80e2e2bbd0ac9490f86d1dafff54b89d7297d7066eb03cff8e4ac923dbb6a3082a26acbffe9fa17ab69b07c0381c4128b12aa4034328c24e6601ce13dd9a553a143d04bc68b1544378ab3db9f25d42bac5396f98499f556e3d50be82c816c4e22733b2fe448100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002564df3444c3d471f473d51a6d2e560ef4fd5682cd3a44cbbc2ed8e6a74aac4752403f39fd5964ccdd1d7ee0f8d7fa4c4a9a10de19152d561120a0ed27d84f20a410750a62ae0d72554bbcc91f019319bb8a7b0cc4a4e9a880db731a25bf1023baaaffe4ef5b16f14af73812c86b9a44207f7ed93cd4940d476050f081afe9240a5ece537f92d320fcd1a6e0a7175fd6d0cd4d7a43e2c6707902c400e416641e63abb7e4c751bc660aa8268c57dfc3350d3c9ff839a2394dda7d836a63e6516d16fce566e2adc6e568bc3bc21306a7501190419c4f5eb9eed861d0585db2e203df4dd5c568f5340d9cc623897c5798c5e36553fb1af7786c2c3ea8e05b3e49f5313d32996b55dd86590f792341435434518bb6892a8846ecc8d0feb712dec528cd923a46d5448ebcd54c816d09243d73c2f95099ad051c9d80bc5a80694780ff4e03c8f695be31cfd96982906f9f7ea94a2dc131aaa1c533a4ac86d8126a9fd33cd9671a7de42d50ba92ec967e10daab5680d40c1d47e0d4f7b57e6f6769a84598da80739a90b3f140900357fb390ab194dd6605563c613a08934380811ef5457c63365871acca9c2953e33f425f00a1dfb262ed601905d4f29adeff2655479500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c680081fb92b84ae2469bd6605fd14c37d841ef847f3a05b625bdb9e8a4fd97f0a6da37b6b434a5c43e3faec27280919ed8b1c4e0569fdad1ab992a96109923686fa49d5f54eda995fd3f7b9a562f7c3bf8c828a4a0704f6194df5cb57ad1a63a0a1a82d11bb218a3a8e6a6b1e5e165cc3b7fbf1cf48db112bd525be7e7be1cc65b1f78c57d60c700f0f7a7e9c279871cc66e5ed0c40d7ac2b71a375dffad65c6ec1058e50a9830d7297891f48716411b8688d81ef5a848263e834ffba744af0b3d1f48c9066c17f5800b56508ee6e7d02e784ddf8a24988dfe8f36f0fcd3c063a0995a090683484e5a9c8ec3ce8a75b54d22632c8dc3dbb8ade1041d4cc14241131c379a8928081588f5e3f381a8530b27ddee5405b65bb8c5f3caa97ac6efc0fcd0261c495d859bce944fd939e9031a0a71d4860a7d9ef68589dc9a5652d8355d549d26f97236d5a847964a600787b697fc080877014b196143cfee344652cc6b2082a9148bf76773dd3991d72f90c5d7df1f2940e62d6d7e9e21400c0450a0e6e2a0a375399f53520d7492e1efacaf5b2cff6f404e08c2f2a0433e27b79ae2de7bd80e75829a494168efbdae9b9b2a3abefd961501d0e3422fc2a76301a200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ac44c5a46847e3b7dc82eb7f940700b93d06bdd14d2a7a6a0dd23b001cc7a83407ef28c375f23ccc2482711797115120904de9f264d8abd3fddbe5c3e1fd17c044b6d5f1e7956cd47f436399da6dd9960a73f8d67d1258c9a2c1ec151431bd911321931aeb2e616aec4874141ef17beea825a9b13bd81468bae92db52c10f05a53f40933a1a9e0497c8306234d248c337aa4354d2427ae1a75e7744d81224a6d96cd3786052225230abff933171387f12441317b1b80ea795cc565dea7b948da1f7d9204be9889c1868a37161970a8dbcf4696d876ef85f530e2ec370b74e9ab2797ea0a1f7c382a62f76f72331eb65b5c16089da05b4a028bf1ed582584210496ec048a1e75802204f53a41a92f5c71d089ce284161ae8cb42a708e9f7ff235a4eb76a96309f4859ef6d9c3513e70e6bab28a452c1db5da6ddb35c7b08cceaefcd88538ad41a492763a6f66a9b33532a664fbb8f7f21cfac95a446c10743905dc83b60d3bece1ab98dc2672b1874f61651ec7dad53f5fd80156a9ec7c84790a9be00e4f7b7d0cd44190c4472b0838e8c28e23a022417ea2e758bd47bbfcc7faa83143185958ded256bfcadfebb9e4da91728d4aeac4262be95af64912421d000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a6fb3485f3a88a9900281bbacab7303016602f5992a77a2e604eb6c4b4290b03b7302a16b4294ac74ed967082fb040072c5d9c916cccbc513247b510fa485b818c5de95146c5116f1cf6de4d037bd25d5939afd2de232f72baca20c4deb7a39eee4791f28defa4c2cf46eeb9b784f7fa935fd5450fb2f8d1fc77ed2d3156d30f71ad9461864cc6f6ace5e10066a55d873c1f7769383aa04d19ff4a539d21b993b3e08ba416edb6c50ef77f7a62f23398bcb0a860abcba24fd0b4c0b083fef6147e0f9dafe9517dd2e1cc21708541fe877c2085cf5fbf5dab23fd82eb0d4afc544b2e5c8663b800b95d5b08d4bcabab01f67e11960bd1483cded70ae8a21844cbc6278389da257627b1ab2c21eb834359a82507915a7b62bab1a88e2900fe16a9f77182693646a6b2ada250f746686e810f5d5c9797c1d88f89aaa36fba029a0b12b5da2310035d40733d081cdba57e821829ad02ed9b3531f5edbf5a51e657cd2459828cf8ca5ad27b89283be9efbbbe023fadee314f4880da8fd12e1c34589d420a9edd63e49cc4dc8a2a8732e9456586a458f559b77079e58e370e72ef3fe1e5f3f8d81f2a088b22a022c8a9de456f6277cb9aa3ddb0272ae0662a52e3cb40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000858d187123e4ccaaf6abd1cc42a8178402d14fe394fbc82e62fcba7a6f955ff9980c5ffc693ecf5bfb234c175d256f44442a638393c9bc6431906d739a1ef6f4845f8fe0023e3d99dfabd8bb493c29005e0c633d3de257f6c50e5a9eff74e486f5c5683e144762946ce6433d0340083ad4de4f93422cbb89817b8c8ea94b9f297f4a8b3b695ebc08b2bbb1f61263bed86d01ed1911a2f65113032d5ecfc92abedc644b6e4f860a88c9f4dd85432c9b993d12de824778892fde37a0876e8a14b24e3b4ce9e934d75b452ca0bb29a74e9c730719d07aedd5179cc920493139e36c850ed61ccc09adbca37fd090a1c85b81761e6a5d1ca6e887a7eb7a1ca4b279767f7d4532ab2fe5c9dfbbb50af04cd6b1713f1ec9228381f8f5beb8142c4a7fb456a9a2380232750af1e85edd81b3ad9a7ec6d6acb4664782b1d6fc5eb7c272117bad3406238d0e5ccc7e653e228fe8318315f9562d6ab09830826a4f070905850ad833324856940950f48b81b8e166f60269ed5b0a9ae311d195b0d93d08a4973433f6cf27928518817a0c224cff480239d30ff414b4b7c0b306d6aa7396e13f1033e860a97278feb678ec5be6cbbe39c27acec2205ffca0b026a22b5ec0db9b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000da8dca44f196067ec57ce8f8941154842ce6f86f78194551d9fcfda7159f3eeae263bf045e7dc340e8f5c523579b814200281c1023bd31878f75d44fba23e09aab7f3e61af1968a1d0132f1331f2b7c99dd6acab70f711af315b8e24c7cf42d005a4fdb91c576fedff1e062fe69c73c0a846d485f159f651a115545172c8d89eba1cd3a77ddad908516fbc835093bb5aa8d8a3d545e400e5ea17226e0d19866f501aa0c1f3111518bc724851d404889e387ef68a4e1892ca9bb3aba5bc263851e1ed356ae07074a162c88a2786183ea88ececd5b4e4b7eaebc362a1bc45844cda8874f234166241dd30b54d07f5e79208e855a4034aab3f7d89b08c237b7c03c7e6be69e500cebe0eb582f3e30b897302a48a8e2a9b381fda0e0b582f681fa2c288aabe4a991879bd38288a5ab4a51f3e21430e515f50147717dd19b76cd5e52a0790e8d8898b79afe1d74883b87c7e3b71d0702693aac09725eb24cd0e307171370a3a2be334c1b6e0f4faf6d01784cf47b2255b5658f803e154dfa16a781d48a1b51a82658893809c62d88e778bfed25857996bd9955d13235a352c3b4016290c06a0dbb792bf5a00be19364a51ac34f81bc9ad336fdbea776bc231bb684200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a63354c50e5816e309317c074b90c84d7cd114cbcc193e1efa4e4282278b083de288e1b903edc0fcfe82a6082b40ca6ed8f947816c56cfbeb5356538b3facb1fe3d0cd5f18f93944df3650a91b37ee29d5210f7b4d6e30e9c4481eca903be21f78432b0aa26f6ad1573238d4347b49c88dd0cd1c24609d7dad249ed4acb8b9559a85858df59e760a032607dd22b4141cba26896c259888c0741c0eb15f0143eeaffbe039ba575bd3beec38454696102b6a73531ba6a51da9a42b66549ea495a91675818e8866763547b43ffcc44cbcc87d82421e13af066e007f440a816363c13d8f50aa2fd57a7fd7dac847aec6d8c6fea0c6501c328def8e4f10b637948219beaf1ea1421d21323307ff562ff03faa72dd918b8e98bb3509341b03342f6ace8b6ac9beec36d57ccf7f94c62af8c03cfe65a47e0d7ba42040d42b8766ff14ca793dbb51e9c9b95f2aa388c914cc1f8391f8ce251ec0d4b41ed947b8483d0202ddecc156827571783b1fbb9acce5eb2c212e89e181edd4fb382e4492b577797e7ecb83b83715412dcaca9020926ae171219b04bdafac2e98d4682f079d418c8dd93b8ae547f056f5a162ecf3265ba1588501c4c43035359ebfa80682101633100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c43d359c4dd11dd51ceba6b3f4938f130529a8848ea6aa5a23871ef61e6a9dd9c84a127ad1cb36334d590d2e352f99eba28e240b03bbe25b86be66b9b7a1d137de090f6bf252c3e6765b3e5627b7397aee5ea97643c790065a71da8096fbe0a94711b56144453c4524036080808a663502249237cb85aaedbc65ec1aecfa621f6e19a961b64a3e064a34fe64671e85c819d0fd60852e59dd9265f341ffefddcb15d3ba4a17fd2a0bc8524173f582edc1d43b59a3618ce04f416e30574252379a77375bb342dfbea36f8790d742545bc63162976bd468e2f2698790b94e47be31cccb9d35314b7fca2f265e9a8771d2fb9cf0c5266c85cf04dd873d8505dce90e789330bd8c3f3a4889d5f0452011d11b99f29f3e5accc947ccb71b378b8a062568c4fa6a8badc3adb7e7f2f0419591d644c7870f18da910622e6c0199271cd4ed90d5bc54f86661cb75dc162d71ee5fc107b4fc9e6eed1bc93afd5e4437fd5e49150238d0b6175b46ba85bcfe49bce26f0cf9b21bc9db32348b704ee8b6b9f3da84cfeb3a94e67e034a462adbbd5b827649b0464f1ec156f8c368099618880bdaf97d7a35d6bfe2ce42b5aed95e4d6cbee39e928f92878770efd6b57508c24000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000193b1112d418af2538b684d6fb344eb722476b3145a140b00d1fd63e9fec503272d7e974d976ff44d052111aabb119be504988eec3b6aa6b653537b4386a1deed994c369e5827591d37aef0bd0860669c2bd85b72793c7d931d8de90c8b45bb921acbfaf7eb93f3f08a4d53f665f9ffe023d456d3ecf1a1a0ecc0de7bd87f8ec18e5d305f8582c4bc48168518274098d98de4cfee8fd15377276b0a027d2d769117216ceff40bddb652367c6c6f4ef2d326bab5d6a309c4f4ede2d1b66a1cf40b0888107b52602cbb6d5adbd9a664a8fd0232ed763f5f3e173138bb000a4638845de064c6c99881df85c6505cd1f98bb7620a0a85233ce659f1eeafc2f52ef9f06153112306dfb58c2786613c96f06cf577347d072c7edb1c67d4f037af6a1602ffa10bc4ebedf82e49c919890887c9893f64aa60c92829b74447eaac5c812df6951f1a318b5748eadb69d86e4d93910e0d7e938c2715137619f6cc7cfdaf1123d7378807318ba86e80a362bd193e6abde6be767fb7987be984dce9873089e1433a7d77bb4c654f5eb6f37b5072467e1b11aa9f342eed1620696adc08106db8d810f63d4492cef11feda2ae751398febe75bd2845084fc64a76a95951bad533000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082833ac280c2ba8df1994b2b3dd7dc9fd20f076c459a0d47825b10827c77ec9dd24a612cb46afd0e99728fba0a19b4ae783c9ecf41153c380d2068d570d188e75ba3cc08131819205dc530b4fab6816fd92ef7b365ba985d686629225a8f43726db3bac9537ad1b830ee85d5709cc110bf2d355ef3bcd45920ad72141f2bbe54f8fc9a40f43276244fac9ab6b509d0f9d150ae138fa07a93b3935f4d470c38e6ed956c0f3b3a78ed9732592aa0194cf6b6de8d34a92cf6407b651338702f01279ac502d27dffc3114e30c486cb6c257b7bfc35354d8bb98f1c58dd883c38b507d34db2442182b88d4a18e4f5a6fbb6c3713c68e4668da1531479a0c5506fc66c4e52819ef88897ccf658a8c7d1cedf91559370a5181d59aa2670bd4afbe7673685462a77de692af937a249ed77cd27b73ac72699a119911ffa73d0573191bfdb021933874cc1521c0739ee81f15d61b4622e47dc50ab008ecdc7c371f33aea4f3b6e3635810f6a918a5a098fddb356a186939b96dc21246aaeeadeea15ca3bf63fac582f6dcdb7e16e9e5afd6b032f452854c4b2885e7aab9d93cf5368f4d2ae04be86c78209ace477a6ada30742abb675f969bf9b2751487600f75b2a4e7cfc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d0df039044fe31b9641447b7a0b5af96269be7f4c7a8c6db599b6fdef06dd0d22ebf3f87bba161ff761d759e00586f5fef8f14a017f0fd055bcf1adbf5f4b3918255945903bab45b08ce2affebf63b9ec880f58940634db58877e39d460c7f7e141c83bb61751748ea89fc7960df3ab855875434781531c81b0a4ee36e398d9e7574b715decc6bb1468f717082778baac4f1ad084184d3713fa5ffe6810f003bcba1dabbdb16d25b37f01b68ce90701c95df2c0315fb0c6e9066a31292581f50d8e20ed0efbaed041e0b22a3592ff0399e92654788baee1e87e866716adfc3985d4b6cf56b3c8c6a6e340e12e86ab482f75746ef335771547dc2ef76a928bbf818b4f5b8d9eeeedc0b533a09d3e9679663c1c7c4a0c594d8fe4caab0af672d221967ab92629896f74506851dc8cc4648a890c913072d6a1c1a896cb1cf8e84ae72f50f71ce825b8fed2c2a7af59821e964911daeb97987d1cad4115a2a51ec8c03434210b72a892a76ec7b548c9918ed1c6179cd48846ad73bcb40b0db5868a9a2d00142273962d8be04865292131e0a37e13f143c1573cdcc166acf9a0058cffe973820b749a7c2d25da18a1e9003ef4ea8b6bac552e97e178860d62fdbd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a647065b158633fad852f77314deb15f29e98194c8949c0ab08839e705f5d9ba49dc43b9260e82b64a7e1bbd6a3a96ead4f952463006b050943e51136c27c08cd0f887465a7456cf119cc15b616c122d0846885949fc30c2ecbe98e325d778987e8218fff16ca8cf23bc3cc0638da74a58f49925d8d128302906a6cf56122381f78abaab274192f54954620bd29d74ac10ecd2cf7f532eea25ef524c3ec026e2c1308f785414b5b079d2319029370b8516e615052a5c5dd6169fcc3d162c8ef0e99b8a9837100abad8390e106c1d5b7987ca213c39faf317496574eeb1ebdc963eb75510039b3df759a525ba91018dd9e56d2115b6bc52f9c243e5d7f343f1b1bb8a7d1e65711929f50a2bf841729f3cbd11b8d6f0663b2248993156a90a145a33487f879e74cc76205bacaadc44f72f7d5464acebdf74c34e9ff050763efc71b308224c5e0695688a6a5d87fbaa7270804a6960db3a0f61c41ae962b4a05a13bd95d38fe4fe3eea47362f46c66d61c14cf4e0509dd95bc6be6ab9fe3c09af01adafdce3dd90caeb206f77e22c4de22b62c78ec026252789de06b4a6430dc79266aa8edc8bec28bcb872231829b3ad2fefe039759d2f033527cb007aaa460cfa00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008010f86b9a5b978fcb4f2b0565cf87100a3562620e4ad7cde0f5faa5dca2028f939a1b06526830d1dcc29d5ebb4cd02229798b5eda0ddfd1659e8a0f4f4fc22294d4cbff7cfdc959b2bd4ea06299db78168528558212681c331b72d949a2632d5addaeb341ddbeb3b7e6a33be5dc24cbb6cf4bf80dcc3081a88442d915c9f067fc83b4ba2afc542275cdcdead35478c14061a5f59631f41ddbe4a43e21174ad9c214b15bb29680f86efe27bc3aafc550ca357575996262a25e9ba3cf4ff5d12b613ed9b15288f1bafe388dfa17fd7e199a035d56c2e76b400e878ea5d4461038a2d35bfce19d8c9e719d08fce37abc7c6060e5205a7388b9ffe3bccba4a379dd2cd666a160ea7cd297c2b037a6fe18f4e4af1d14abc089f534ab17b8b72b9abde10851c7a07bd3f5ee1ddfc99dc9d72771b60707a88b1712a63135209fdee76a3664adb2eadf7064a16186ff35e6d45d257b76fb61bbef28f5d7f12caf73ce10a48486ef5128ba3e5ba1bf15e47c8dcf3373f5f8b8ddb86a5b44de72cd7aec9c84ce9d5df93b14731952da22c44ed5975ed6bdab0c833dea22863a22bb956e4282924666cd7cc0dff615b35ee993e91882d7dccc5ff9ca43efd060f2660bbe890000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064131447dd891809b09d4b784eed7a1827f8d7c1c216958528d6f63a336903b5c62d5180ef322aedf294b33f41b4b995594bdaca23854ae42cd1377853ddfce22ec808a63b6e174bcafdad9c1b51f42d55d6131b22e3ec3045dc28b6e17e8026fad7a1e0b4bcf05b27588bae13594e8296b7e0be4c2e2a184a310336928677c41ed1ad812a4b538231559aa482d60d5cfa832286949549449719a164b8eb26609414f3556bc2498b6f33f9c9067a119fed0c6acc90dea58384d2acd331ed1b936fe0b2e6da7eed63e85ca51d7b640d059a40657f02aaaf42d774449b23efb1d0d7c3b586c3445c9175d886981b722e708807137ff53723bb1919d463e3199c7ef350ccaee3ff9277b74deb605befc003218477b05fbd2f1e13932c762a73608c8c9452745f65993948ba1a52b2a12faac6173d651dbd05c850ebe5e7186a4a5ba61204b014f4cb53a251bbe8dd2bdd497267d2cbef250f69af9943ffafae528045cf0dd7e632f839dedd8814103e6dccb32ab697fec7ceae436e512e1d97469f32351b9ff1b31f5de91800162f92ce613f45fda1e1799864a5e9b4773bceb8cbee6866b900011743f253549cd513655e7c5183e1c4d31d71126cde62c648408000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028f2c099bfdbaa3416b78d0151a4e4c8c44d7e5c81b0d37027dda357be1ff242f37f93c6fb8fd14d591d81694b38b1eb1765c1cd8c7967a8eccaac01a95ea75a0ff40218e75823a012bc012f6d09eaa6c99b319d9c65828669300ceb606abb2e34cdbfee38c0d738b7ecdde99a52cf00c6b8c6ed0b92ae0f0b28b1ce65add65e5885d0a385818199111fc2bdf11384e0538de05083006c5ca9bafbae4072bbcab54faf0c3a71b380abfb213cbfc9df2466e351ad848044404fbeb3f6a2650de1b6b4896805545c5cda685fabedb6c3cc9d3caaef06e1f455e5a3c2b686efecfd39fb29cfd55ca6a8293909bebce32785ebc3bc6dd1107cd35787cf715575fa1ec17aced72960a298c5cab03e3c06c62d18620fad28649ac75d3aad069ee535e949a03f01543dbf073f6d844525dfbbff05d4d044e0f2e8cb4f17dd181bdd7b7db48dc8846fd9c3644ec47164431606ca5e54191be3a399b59d8c9f80ec53541d15d14dc5c50e5b3d2c5cd941778ae971c8cc63a74bb642b5fe9b220701bc5d88a064c2c8f4fc4cbb6ee53724be5fc6f393a736917577de8f4d84fbe7e29fd9d8a5ab4393b4f71e928ad2d0cd455b5ed2b32ad0c6bf7afe9627dc89b57c37bae900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002794ed3b27401e0cf7dfc47703379d41f4d1547847098de1facfa3ed21a8044cdc8d6a316803e73d76c9bb01158ef8436ef63b3d3c1c5cc8293ea74232e7a4c07bee9bfa75ee73f320ad2be928c2534e3ade2ecdd1cc1fcf1df0296cd727202e1a12812875aad756cf66706197954fd787b25667d2c1cb56f4e6be3d199b99aefd2863f22ada5c38abea63a124358dd1c071321b7a117fc1f632bb96218f14de7d655623b3e2107ee4725ceb1043d824751acf008122028bb6600b4b5f8ff7cd1d7ff7d35a20b0684afe4ee0fe2492715796d818751c9e0184c9ea7302c3324672dcc00ebf129486237f2c572eea510e07524022ecdfdbdad090960aaf6a6677a299d283edbd4bab96b9f953a4102763de4c7619e6fbf594cc7afdc2ec8682eadd01104bafb8d79c78d4b42353d5217f6d1692e80893c3bffd081a66117336108b30e960d8e3f4c4fe97b88198f560536bf11ca141b5b18cf296f1b7492dc3433ab46b9de8cf018153c46ba090d94fa005e10a247b9a52e970f909e4631a2c35c904b675ee37ace19e715777f8d737513e96641ffad1b7b01eca7e207f6973afe900755d716b1f1576c6321dba6e8cf33fcf6cd321862e0c2c218cfcadac73ed000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014c3b6a99c2ae8a83a5e853dde81c4660ec18eb29e8ea07ba1637dac9ea1666e060cd593b564d35e36ac703ca7594adc3544faef678f1e3d0e70c074c2677ed60c26e90b5c523a8d927cb6c8b40a957510a520300d6271563835371b3f146b9e81af673b15b1671896566a0dfd4d86b0bdd68954912fdc88d5dac1a44a79ec4c6b45a9d43c684358576f48dee2b0e5aabd5e1b58d16ba626109c1657029a6ce03c81b7418cc4f88ebe196ea48facd81232a07be9cb6c1453a5b5aff07b5519e027ebcefc76ea013de159c50ad424bebe8ab507e3b938926de46cfca48756de25e312c1d77bb6376c6f7ca4aef66e8a31de0324a30acc61055c61acec002e324c4f7fbba0b956488179353db7a6d472557107362c4ad3c3cce25aca4720a818822471d18629a90f74bd709bf6ed063a0c6340e097b9988a171d125006f6ad72f9106e150deccacebc09773ea6dea4c323550274461ae0028ef41a59525eb34ea7e8927809695c974b8ab23fa64b6348b8b4e8a8b810e565be2dfe069a0939e093591c113648e92e93a6a994b4b60247183af61a8fb3e56b2d1f6d80f22829131d515b978e77ae8d88973296479ebe727c4b0cea98adcc8a320aae83a5ff2259300000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a109c449b4309b554379d7021ab7b830be84c7cb9832dfe06ae88dcda705c07b12c2cdc046955f2490038e79c11f0a75c0faaa448c0fdbd43ff9091bc2627b80bacdddb477f2ce18be2e2b16674243b9de3293412f55ab6d19f77bef2b2e2c0b97a7cb0b344bc9263e52f8c6ef2265abd2a88ff6d7c6915777753056787af42cf9c85c2ac0ce5b7bb14914fa0c06768f23cd042e90619949466f34e7fd658dc7ca1e592c0793043070f10af5511f913fc1eaa68922ca189ca066dd29459c886a06fd056415dd96713b5570107513d13afe26d3d19962cee59c631a9feafc8e7dc5765b13f08a181ba6373463f1662717530ca1b69e18acaafc4c09084508cc5ab85e234956f325fa13c4f5c6684ac7bbcaca34a236cfdaf85efaa4d89e4efa468daae4396b649f0ca78a4f64c494d844391070fc7d1e927090f906a0f5a13f530376ebe5a383fbeaf69342074ce5ed5df8ecc188fbc619cdc21174478b8c3addd6e684cad809359c127f46f4f1605b4889e30cf84e58fff9cfffaea025a8f59a6d680ef2bfd8eebf4ccd220f08b85dadfe592fc5880fbe2f18b5787776a3bf61f5159c678e875499ba15d4a1c8a827ec01f6709623950419461ae908b7e214a70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a26371d97c6253e2406657c83a3895b5d628ad29adadf9f496097b90f82f4a8fc1258af334c9c5d2cff133a00c8996a86cf59b6d9581ce64c763457a8fe5087892c251552f155ef592e2a6d484067a289662c15c2a44be48e66597b7841bb001130f8cbe2f105ca339283e07291910f1202c3a6285db23a99e5565a82a535aef15f57d9a85dd9f33af40e86f0f4df70fe2ae12007b83993d08908d43e0c70e5b3737601882a7f35eb18d5105d2ece875a45b886230cd66d311f695f15c2f39a0873d8eb0e956490d362c9301fd33635193b3cc9326623b3d86d37622a01e20035bb5e16399b27be1753ee6b8fdcf78ec0860c722563cb98c4bc231bce45f59c7b409b0d2f567d349f75f19436b901b82d8c0fa0e19c90d5d75042a9aaad3839e65fa69d8f9a994665d01b45d512663145f2ba68423c00aa75b3c7537b5ac0cea53daa17b06b9caafb874342de788ece6758a8fb26526c3f856f1fa41c13310e38865e67b6516c51a80cfe333de6e81b9748f7281b12be165b84435111507c29637d68bfefdbc85db8566091e8893df3813ce24d79cd54a7902e4373e824e48d276808ca230bff50fd84b17452a87b96fcce1a9c0281addbcd89da640b93838d9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018bc8549c18678dd41e3a48cdbb9a7e64db9a40ff421eef7e7a19da6f552a04b1bf49263d96c78939ba7f902346a713cdce73416fb1bdddcff419d552427d495c455c6a291f3c3a1db7ab8fb6d0ba65d0cb3ba86ad7ba80bd3b87453a47eb60834d7de8e55dfa2aad46b1735d77dbcf73b214353195a1f3855cca89935ca220dd08afe7a75bb4790ae0f4dbd3acffdaa9dce9e6d2e51f86b1f363d5350a253ea0ab391dbc63ae38cb49755fd0950efbbdc8b6936b7ed06bc513c6712a6d44f17ecaa569d37b979e2e412c1e410905f1964adfccb4f291ee8de24c1f0e89c5bc67a006a402c794a90a906a815ce7e10ad5ef640c7821873cb006f3c1b46c224fd93105f5ebce9c25c2da0e15579eb7681b3b627dd0706c5f07e4ac71ac638d18eef74a3336318f98d8b9cce28ea4e5144533f7be6eac207241f426bca08e77e107238746091ee7add0d084313a4053c6a7ba8b3e079d222bb71226ce96c7dca6e165c41eea17cc75bbc5cf8f3f5074ff4a30e7dc35f52beffe9cf9fc49ac2daeab993e7ce064735fe921885680f10acfda7d6a5c3c05cbb6d92fbab97a8c8e3b9d0280f29d84db713833a1e5bbec094381354815c8af4d4c3405d4ab76010092b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adba2e493f98596bb609e0ceb07d4d22256ceef5331b59095ab51598b5757f0a547993bc48d81d941523a3482cfe32d4841e432bd999a4036dda0aaabbe58bcfa7fc19f21bb7474b51b3be9b20c4a3a57e8a089a40d2ad1eab8ad6044991a1ccb83fd252536cba9e4926b153e089587555945cab51d5971db941d87c7e53a43c0aec2b307cac64b444f58030dc61503e57f095354bc8ed839ae341a77daa4bd973d8f57d33e386b055d0db2a5ded04c5f18d3d2f225d2a5a593ecde647e1ea19cf6acaac18e950e043649161bda84de2e2f43e9b2827f26b035df484062d09eabbedc1f6339aac99bc099eeb43c25389a898608adbf616a4483a524b2306c81a3b79ee4a676062118c9e7d2f6a6dd673e64924e0c552e011d993ab032f57802297b04ad64aebb1e3dbf9939835dfdc909f391e92649a87292a83796714b78b8f606ff9a503d61c2de16672b6faaf8644c42b835330e87af7392dfd7854394009cf0e33efbca912cf338dd153581f720d4bd1a1403fd899d7f8cd0b9b37b41489fdca5e6e19e77096fb58bf126c4313104f05eb46c781a4d62e0242e38a5aa4519a37130e0dcdd031eb3d8a0f4b4f43a0751470070f1aec5742cc38147308845c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000129e57b1b467c46a959b1c0e7b4a92b4287e37d1d625073432f187b52dde591708f56c4d8a198ec1cb4443519ba0504fdc2f3e3b354dd892f5c9d851249b649f81ba25eda864340b6b3811e1874f6aa5fd93d0394cf64bcd240f46711afac71d5ceb2ebba41a628c38d96ec035e038a503b196ebcee5c838c7832ca6020483a50892dcd7608beb140fce7b85a7c03d6aabf93bb8ac03f7bdb604a0494a41ac6e5231eaa80982906a34f8348b7c5869c533d413356ee3dc4a58bffbe190f433b1fe5263b13e0067d73f275b7b4a6a1062689aaeb9f87cb643711b0eb88d1b5926397a4b08e9b985c8332b858afaa37c38aedcd902e022fe503181f2a78200cfa1ad33cab0bdeb5fa5e9edcef6d5109f7cc38a3541fa534e8667674892014d3f8d2074020643ed279d2371fd9899d5138557a734dc66cc6b4bb403f4b0424236e46d69b5b207ccd7136fef5afaa64c7659b3f2310a357f906ac61b52152a5e119520b52a6524ec3cd405b8cb55c19d8f998a47ecaa7830ac894e5d9b6d7800aa94418d3cbe97d78f2dc38668422de0e73f1e2a27d833d2e02deb52009a0bdfd9e1dfa52b8a4bceea4efa8416506aa49599572341d4a1979e0e907a597bde7dbd340000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af19b504616bdbf0e6a87dd160e4db6012a66e210b912c11c627190789d6cd7437ad9a1e0eab261c8e2f4509b653c04a3ad8a88f9ae469d580aab2a0fcaf18672280d572e334ec7dce947fd5aab3d26e041a394c2451fe46e97a25e8bfdeed255fa998ba29155b9feb07c66d7bb626744728e27ad072e2bef18449bc8ab4b3905c4e04f02a61c19fa3a8f588d9c238a47ee733a7a6967223710141ab9801f251c96ee0ccb1bc7a12fdd46edd6c1b74f95e77a2f358112f39342c6e22ad225d366b5f5e7f3e06888c2a351ef5b2a5ada96e6a864eee5f0c8a61d476f1a646fb09fa66b7cf85a27ffccab7ade20423013ced9f99489fe39bc3f4b121bf73fb3dc0b2eb057a4fd52d3e6a73563f7b85c32e309fb5580db513bfc17a1bdb3d817299a0ac8c791648ab00e5603e2227f8c854728813bbae6069b45e069dfa6db8644838d54db773ccb0ac41600f77fec4c00beed7e9fa358c79d1088cd6c7ee890685bec3aab2f011ed72898852ce6500eff1bcf9feb502c199a62a660bfa6e961d16b82a9d14f6080793b57cfee95d1ce500c69132d1dfe360ad97af93ff127204e0a33caef51460d78c1f605812c81981e03d3a8f80a4dcebfbb5af97531a7388900000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033b06d74a5cb82206dbdd1e3e5b73e7305247bae6a8f54589ad427493360041e0103d5654a063095c8c8a7a7bb1c7cdde0965d9a67af35b8f667ad3194b81537ac065f642443bbb54e68e55976d4f36f6e7890abb1ce05d5778f3732f2b96a2d33050dc4153b229bcd43c232cf53b8a16821f6af47748596f98a0bf59dd034459be05f112fef0814c00d581b7278ae1f0dd06482b7dee7dde16f11db1ac70b7c8b5f440294cb13d2719e6fd152adf69c0ce60b2663a6fceba1a0bc661ef622296a57174000f2331a6ef06279ae9ee9cd9dd51d2f73536b0761451190e306acc2562a214db7af495fcf99103e1ee4b827e142820657a560641d1f2e401d158f1aef5fecdf5477abb932981d1d97f60ece237bc8c80ca0e78fe96161e597e4cd881609406b26cf7f5c1787b809a734067b76aacc46459866e0b57183a147b6c57b42f16cb2abad620ad76d364a96389ec7013c91a836381cc8699bf4b87c1d0008efa30fd0dadb3d4f2866e523bd44ecadd4b375c451c7f5b7605a55df5ca6dc65945fe2ebf6bc72fef2015803d7e4344133941ee9a4b3e1f5806857331b02a077f31e73975230e9fcd973db40366be8499ca66d806a9572c6c4a7cd8e58f7e16000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089255e83c9417cc32bca61d8b815d8f32aa5a1ee8f89fbb8aca4c4f8d47ec9245ea0d864472dc53918d2bfa22c89279d4dc0ddf74a556f9403dbe6ee0f96f6ae98006f2548b8331d60a3352eb67242ecaf03a280855fe442322a9b22585c0fefcc1dd8d1db60badfb4b8442129c97b3ff1c773f9e05ab884e311c29e2be7eeaa47fc6babba1c0a12b1c80c335250c1a601facf51b4fbadd40b3795d12903fdd29904bb9bfbd3360a68a297aa85bd95fec8b898ac3b03613fab1e02a74228e28c03846b2aeb872749cdf85ba7c9ff8c6d2e4098225c7b70d971a0702f3b99cfdaefe02372696b9db732b43fbb890255fce8060363cb25d38fec2ce3d3b0d1c5683c2674e6c41c66397702dd757e5e2485d26b30b89f85c490ba9d6798853c24e031b98e9818d85b36a871b132d4fc303c43c2044868742aa4c0fe622dd54b18b585e52fb2be5f4a82f11913c6338056e979a940e4f728733b9578d4bb28c53eb05e1d2ba4453fa6aa42c4eec7341c0223dd5286b6f2dadd53ae9db2346883addb306a63a7694bf6fe1d450b2dd424bcbb9197e201de5cac95aff57f09731523c39fd0069767ec31bbf85b8e1786551109d8c9485aea70a32752cee6d1d490c8cc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008845d23eb1c83bd5c9691f4e104ec7c2f90b2c54344f573c45711c45ab5391633e8dcdfeb30650f50cc6cf7394afb8ed0db8f0c16897b8b2aa191392591d8eaad0e958b3510bed173f64aa3eb857defab7c282ba677c9f5bcf1502b41d12c44145e82d14b6122a10feed2e4b87dad72e8ca0b85c468d18b0af54248d1613270d656ae9ebd5ecea8988bbb087afe9fee564c7e2169cc4a872a9e6eb6376f36955d80c036d84a50cb60406d5d642ac9880269c9b1beceb20055a04e3d5a977acb8bfb1d597ee64768c751e35ddfb9ac425c317b697347ec7fca4ead5ef119e39429b131c4c7d76b955888c67c856edb9c1132dfeac7236232fbf6a5a780f9da01fbe31fe6484a501e30adac6aa6496ea6b0edd17d899aed89bd28cb2d77d83aff1ce2f96d059cf12fcfa1b61e26aabf6cd5e0e585cb58edf88a17ba2ad3d2f12405e840218e62f0c9672383b55c239fc01727ed8b8f33aa4f9389d50f25ef8fde0fda6eefd7ca524c8b70757aa70736da2d4a248ba79afed01b6af5aeadc741a5d07cdf9f6cc97c201b836f2c29756bb3ea67b46effec716b0f2d0ec82bfb4b23fe33b4318910e0f13402d540699c4421cb8bc31cd3f80ff9d27d7be6971d6adfc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000968701b73e75067cb3d518c0021efa6e3b6d264a022e5cd9e9ae54fabedf37808c32db908375868a6cff7fea6c1d9e6835380b42aaa2479013c6ee31edb01ada5039c2774273b1007282efbb13449173816d45ab3917212206a6a15068ba1a31b4cae0f57a4937934a4f25ad18c8e5524cdfe2faa9388d207ef5845ba17ef3a620fd64989830fb37ec7a417bdc66e91188da5bf9dc5ca4f6d85d382ab8ce3b07b231554799ba4a4358faa73eec3b4ddc7d1e979fba43fd6d8db12cfc6359c72949b95a0d72a98fe418022457cb2380721496521d27c89ec81c9f08adef8f0ceb79450217fe4aff4de20791556e52df73c19cc76508c51cc266821967bc64c133b9652a79f2fae1e6625537b3ebe6c0dc988e1d441e9f7892bdad4df3724459565e322341c427ad4d2b7ba9933d11a10b047bd8dba51553a961a87c445645554c6e448fb38919644475b294987fa05aca8e80040e47368733389eea40e99857dfccab49ff3fd1f11e397d2eb447657517cafc22e474d5d8db6c98e29753eac5ac2682c6270015f6cf677863ca606827ae199279bfe7721a7208de8cfe4a6b0b74b4e5e36564ec5b9d7057c5afacd24f49c8d818b773126b6ba7893ccdb234be10000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098ad3e14718c84c557ef0f47a83f36ac70bdbe99af94f36d50304a206d7e882e6929397d357debe7c809c9c54d59e153b8a4f9a2224f4cb1ba7926350c54eab9790e739a6b613c8322aa58696dda3152534baf5f425367deddab07cb6231e92ff4caf339f72dacca89997ccdd507c535efa38e73c6069e543beb9fcfcaaef3a6519776df7be71784411302b641b52d0d45e25e4e060ce8e93b4130676d675db0b2ada1fd65df5acff64e410939dc1f74cf334b23819c9d8fee824e3b5f583ee614b16e656f3298fabd9252d1290d3fb20252159270c56a94eb995b61f3cef1763c88d2a17f732439cadbf114881cf6fcb559b0d6239483cc6426f79cbf5c35dbdb73775bceaf16a65cdd12aa450e1222ae6a2c0c9b2c441099c95130d815b52c02dd434d4dfa39edb3a8b1f1c0b38371290cfc173c2e82f650b8cfdfbe04c3321077382a45fd6341bf35cde72a1db97bac95298bbda6dcc448e307cbf095b0c4ac1ff9092687753f948ad0e131ad3615afdd252c270f4c8cfa663692673ffbb051877a5fc49a17bfb59134297b010788f5a235510e261b9203cdd87805a8e9126c6fe89d4b6b2bef7ee3b245cad6967bc0dd1eddd65d25d29bd10a32fab6265a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000156f635a76406e54430ff0fd5dd1ed9e80b9dc53a3798b6040523cb9c3f9e311688b25eb0070d6e9b6568e827b47885361d7b6321aa816841b37749158e558b92b26e7e3568e95f8bc112fc0316db0cfeadbd0d496890d6c473cb90d0d33a99731c60651e8c3739f68900d14197d87ff872f85c1d9dd8c6e7d8197061d2cbee9d1f3defdd49b267955e08a992eac55a5d7262390015338bd37b7a4e8c64f88f760dc75e7aecef1ea32f9a781993029c5a2f5846a75157459ad0bd3ff8be33b985c5bfa126a1c57343abb37302c24d78e2abfaa67b7d70022ddd1c767593674ccef37456d81f3dbce7895e90057db8db84f3790602df6ed1598215da4b600987e8bb6458f6bbe7727253d267b489c1b0df3738b2828e02d0ace4285eda826ef43d892a76311b3804e2b43549291014d7050349a10ea6e90ecafc6431ab60f6337e430c7961827b1aab2e86de89b2d9b7eda320b8cbab4c28ec543e4a39945796442d287f994a7d5c445bd212e3987f4b3c98eebb1e7279bdf388c9c0ea2e2c5b9aea002a96be03bb6fea91bcb714bad09c3a19c48094f9b06ad0948f5b003fbb189f60dbb4239f26d2ed18bc51d7a99063e2bd580b4c986f8751b711dbc0e807e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002233988752ecc17fa6e60348f2db3748b6ce43f000e10133415366b3e1fa3b263235da8dadf9927e1cdbe4b5df9b0c4df681c2fff921e7a69dfde781780e79fe022fc03e0c62ec50226545415e9a7c1b93222b90564c25bef1de0aac9c033b8fe5faea2067cf0baf8d25efa5297ecf92fef91bf5d2838feaa15cdc83878e496a29532d225a5abac0e3232143d31dd6d2ccc54a462664ef997a2200eaf5e703c15d79a29779b6694656648c3efefd684c0a0bb2b9ca71fcdfd9cc371f049c53837722433e6fc9df76b791b39c5d8ecea20303e21900c07c80554f91749bb997d8daf15bc06b34bb995e2ce3515743e717d51b06c1869cb0afc20614f652e4effd33d9e126be778dcb790dfde00ba064891b4f04a2433040a9742e763f257900fee26e43df60b70e07f3925787cf250c89b29fb1d9d53a34c479e759a1fac93aeb07f9721b62d161c107a8fd97df552c9551cf11f83bf1fbc91d9b3081982cd27fafe5340076040bb5df9b58be7779ef1063d0ea34b1c6ad702d3d9b3da241d7e2611970c9a35c4b0048c6fdbd389ac98424c6deaa3b7af4f259276bf3db601f80425c98490eb655647194afc3505c6dadd1bb01efcab1674940804202db043dc800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c6c38c9f21696e5249afb1407b1e7e867ff01db2d4ad8f0176f785f02ddeed9b919031a0559ffcd6f94ebfd243a557677e58b1af1f6b1fcef66d11c3e55b8e4b101084d12918bbe3a70510fca0b0efa52d522da86c44d6993439a132daa690ff44eb634639d331348e9a473eec11e696edb23546a5ec96707600375bff79650192a513954c7d03273383650d49b598b60bf9799b06582cd34f3d5f267bab36f49fdd4002542ea142c3e7abad46564c4e4ee0b4bac0ad743b9f00fcfe540440b79e5e67c5bbc1aa43b2e2a66300d2c6fea78ff2bbb5d7a01b2c9f0b89c510f060b2d10c5e25a2fd211ff12154783315c4e66cc69ed0836ea0c93209063a52b2fd5d7a0aaa430fe09cca2d95fcd550fb560bbe63e1cde28479ba4d4d15effe300c86a6defcc0191deac33feced78fddb1dfb1ced6a8ec45c9d786292e52973ad22356300a7c10785ffac07cc75360fced3d55bd0ea97fb52a1cfd6588b11ecd154803029190c1315e4e89d9aa0d053370f4a0868eb03998305f350437fccbd699e72ffc53416af468489cb6dddd44b7f413e904314e4e7d326831b22bc3459a8a39cbeb1786b577de0546f8b3a705cf43692bbf6a78c8d128db0d7b24b71af15600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ba6f730ed630aebed1495f2cff3b83f7c481966ee91272768e1114c6eba0695cdda4bf44154af15547beb7888b060a52af3e928030f435bb2d6f9a8d8bc2412f81049374a3d27d74c7124fa7063e98659ff9c5ce76f0060403226694f91fa72711e920766f4fb6e51921df25d342480e6c1bcad9d162807ec896cfb06999fe1d02447db01514974de66258032f3e23f2fccb05863269092225c03aa9cb9c8dd59bff499d1d2a9790eedf661c106e98a2616412efadb1aed3297063a8623941e92fb189e9e505e5b2839ad45ab9778ef1c312cfacec592cad2ed4b73bde7124f338223ba8cdba880f6bfa5424806d0ad9850f850cb02499b419c3ab99e93ea32f505ab3bd9a093e8e4c372981e449a6741cc70f8886a7fdf67d4a58dc76d7081909be19fd77849e70a834865e338197357068580674366e205ee65a24cd57c84c53411304dfb98f3a6f7d718e8c91e4f3112f92214f17366b5b50d1d4573d5b16640384569aec6a2aac8b7bafd5e71a4bd1cd9cbf6f7a5f9dfade3499753eecb7017d1d8b37979f6dbba033205d6a7efeae88d76fdeaf464f7087ba3b1ae8b760cc5f8668c4c1ceef3ae81b21732248bc2552c5b6a7f9c78012432b60987320f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002177ffafdcbf8ba51245c05cc21ecfa32b7b54dd417dabb26ab52be0c09d4362a53e935fa96b16f6de3e1f8e0feeb384cccde37218d3745ad884ce2d1bccc276d3b0e5685a5b2748ec7a71971eb06b3b3fc8ad62a92363030fb1d03361cb85cd797fd983717d4206c96c0b8590b109fba48d0631289d534adb88654392ea4b793acf2c5b246ed8b9f671ffbb0ed155b729c9c389fd1b2f0733310c5d4057077b2ff5c5b3e68be0f10c8f960069b9ca658cda56f851c42fa3eb7ca6ef3fc7f81a874b4cf2ffa247fe250f04d675d3e5713265a590f42428712bbd693acc27d4cf9d534411422be154c854a9568e9a3cbaf7df0703ae455269dbe80caa85808b7fa5fa90743971ab9b030f940ef66cf9e1d66c7e011c2d68e8bcb0c9ad66e91770b18a717fb0919d93b4e423729e148de11984e6b206f41470c8bf8c9a420690ef919199c57dd39563934ce180c4defef7bbe0916ac784e0c1f8fecb4f9c721f299814cf824162535652e9b03a955d3fc4ee9ae3cccc9c30c97bf25aba4607631d4b53076ad64389dff1e38170bcb520e0013b9b686098e256ad6a33cf62499ce13fac000182a13389d525b2bbaa48034e0c48fcd2f4aacd36b3c8eb93ede060ee0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3e6cd6b821092e51c297c4c89fbf90b31f750a6444e468f3f99f9e9de0b9fceacf5bee3f1025a2d3c127fb159aa6807e2eecb10ada5d4feac24711c26dc0fa6557575e654af71c5aa3828fc4d17cd0327a7998a6306747f5ebed4729a41e473aec9422d3c6f08cc73442afe6e71a976388afd362bba70a2f22309218adf2fbfba8cc6379643d3b261cecc19a813ee24513a26f21fc14035fe13bad7de9ce5cc13eab438a35955883062939aeb0caf88c00cbdc3f9700dd222364856ae21ea6d983cd8e9ee23b75e09017595435a51a30bb9c0f807a1e97c8ff7d060762ffb9823ff347e7c5ba31952ddc38297c6c718349596b43daf515fe8ca197adf1be88bffbd5f7b37fc9fd4da546031bc783483241469cff9431df1b40448adeea5e5772c7fc0b11cf3bdf693b3d730617fb7ea8f1248ffa08a4c63dc83bd6d4e63f3c23e8fc2b01a8bd6d138dd5cb6bccb1f2eeb3bd06058e2c50e5ee5c59b39a3b41c83b695b571e281ecadd763361fadeee07c63ae5019ede9c6e3eb2cf1e00145662656c3286cdf6ca31d57f71c4d9a926be54112120affbf1c79ea4bcb190c2ba900fb7b249584f8977f6f8e1ff366c4a90fba550a98171f0aeec10c20e65b0e0c00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48401c300fa75ec534ad1ad30832fdbf0824d95a3c4c4f57cde92cb6751a7ec18506236f4e531be60acdc4782d1642121e15234b37dc388f030124bbf272e9e0053a067cb643667e2b0fd97f552393ccf8b5e22ebdef58b37e243f0940a645b8bb9014eb39440034b5158c2913a973c604fec7ba60633f62ecdafe284494647460311eba822300d2189664d7ea99c2b21e2ec33dadeac9cfe757c498aa799b08f34527f222ebe9993737408b42104da81d8ca91e3490a4353a671f5ba5d56121e6960e07bc57d423a1285ab80af6948620c0a3d0c69f418c69eaef4d801a68e191f328f5fc6a74ffcd79708d5d22e2a6a430ce63a203bccb7212c2e92d708c8695022e9845c88b55ee32a36852c0b7ed71f686e615de7cacdb9ecae7a8281286840c174eae989b20649a6cf1e9a23c02d41c24c9d3b168645e070ac529276d0c2bfc2611f9a44c18c406de3bc8ee92bb8deb00c6c90ead174a66c0a7f2d9c0cd04e41516bddf4623c439b77f00fb7e43fab9e0e42081753bf960143d5fba07c98c4a13f891f084bc677e8d073f3a31790a03ae7ce334e1588cf21894f9499451d79b0553453f5c0df619e8ddd7b3c13b30b7216b70b56cad74a625cf810062ee3bf10b96282edf985e38617cc7ef51c1b6831749df1cdd1dca72275afb09d9dbafb40f808d6c524438f1036accee61ff034c56b9b7d5672299f33c26272d4bbbd79611a82012ac05b259bb7766a3b070ad758875839fa6f6cc6bce46fd4b6a7d2c0d026b7d40227a4ce9157b75771383ccdd6ddbba790e1168bb680ef2b2ccab1957009aa45f8d4ae04eb7b1111f57a87fac7aae20e194575c424a2cc9c8cb0bd6872fac67c62ce393ab85f770fb757de927fc9c30bd0043bc359483d94f74968c29059b71282a19d4a5a7bd1893d4e236072efa471fc0ad22a97cd3ccd2f8345b730fdbe7b7a0401e4a7472e799bbe1a17c5c567f0e38dd1d420889a8ded1c1fbb2076c3cfb5853e37d55b40fb0e2dd791c3f91533e70ae6eb8e5e209546e46bbc92671284efb27799177da41fcb80475f225fc6680171fc48898ccabe8f6a2e5a117dda07ea0ed36b74421820de0a6bd65e15b4885f96caff16cf871e8ffff482e14d0c97f219f552eec61c7962563db59345189e264b9a010c792798a58b57b4d029f6179578de12081653a363c3265c8e4b78b28e1224b65072d879e22db51311c723ab2c17d949c351b04c553ab8433baedb61c53b04ab1b4aac06aeb9012a81d37b9d44b4ac8b494602d7fe33218690743f29d6dc827490b509fe52f619f262e14dfcca71caf8788ee38f7497a065c372069ddfbce0be1a57ad6f38c3278d003301981c5605fc6a6279a7493af570d17e1f094731a2780d1b3749908ee2c5a1def4b2f60a40b6fff752e9bb3f98e803870ee1ada31776cbd8cdf5b1e8cdab708b483cbbe5037c684f95008f2f4ebf8cb1518b2d803569f9ad6aa19e1d206161a970fa6f81e69a3cd445e8e7d2ca309bb3979d0a8b5b9a70fa1e34220800f352f5af7b24fb2beb8bab0bade3dcdbe224d6af44224f7ca9bbb43874a0b0bd9ff0473d0bac701f8641af0a49814ac73e6d4ca170d763fbc07f0ac62217930dfee1a00558a72f3f9e50728b062b45affda26ce596d6fd756718e1a7e5fd172c99e2bba2fb93bbb84c3af50f8bbf5bf3c981c65fbda04d547f2486ec6156c75dc5226175c2553ab036ffec95fbe536d12d1c7da7f1b3d064ea5c1eebbd479ddc9ce1bf30458469f631016ae5173a6375d64d8ea89b6c243ec49755d699c18b8c0c418f0cfe108d636fa6fbb679a753bd3a82c6a87c087fe3ac6c812b80a71b275d11ca45097bdc1825ec2c7eceb4204ee1153f506fb7b3d4eb9ab2d760fe7c14ecd00b5d3e5eb29bd846260347fe3ba73535198750265d6cf829396b443ae4215181ed3c36f454f4d66e3297d311f7df7d03a701f8f9f9e5939f27bdf44a877515f16dc4fc321d03b6d4a4b5e00f3fc6fa35bebd99c3a5acf9a10b5319e5adcdbc823c11d7e869d7321fa53e26e0bc4ec63d6419479674e2a82d7bb0f903819121717d1b5ac080cdf94534a361b72c9c1df4623cc60d916bd64472179f67fe3b118254632c6bd09f037ee2c74b73264882b47dc4674ce639cd590a5fe216f05892b04c66e55e0ffca63f8978e01d4b3c8ab8c3ca2ccf48f62e6669040943f05646327e5055f03d7246e1897311242b4a01d531d7e3b59e738869601df393082aff51bc390e8d9e01529800d9c444e1febab5bd76e3333ffd3ff42a2a62c523de5751650f1e094675c575bb0cd4c0b96d3eea60c1fc48c079413de0c16fa409de6811a59517b8b243c41e30284e9843516f607547d4b6f794599a830528bdb2f8615116d309427d707670f3a8b28ed80412f3f8aca9a9882f30911a701a0c5800b550329b4d60853acf489ff708c01b02d33c27affbf51dca0c9e19305ba917b9658253e8656acd5ba8739beaf9a22cd67e277c846e251af86c8544119ceaf19a3f71d55143fbdcaef509480798861ea0ac1654413374835c677d0a78266ab73d92e0c53cca646f7763a1cbfb461bb1172b25989b9c278321a1e58e9f444e0dc3afd0f7eff692e417a72f7041e3647480fa1f5d019a410f68b6c02fd1d6d991b780301e839ae6f9caec4dbd1449d2a07f493838924eb2306ce62a0e4d9a9afaf65a81e923729c1a2cb7e8891ba711cc3221912bf35e3b7cfd7d46e04ba0d8c449e371132c84034a7dcf492981bb9a9f9814b59bba8669c359f04f23a2fd8649dec1b14954530e4fe68d0aee45906aabc9fba958cbae9afb91b00225308755b9ff75b0882ec37fe15a06ee3e323cf21bf358c1f3fb93fd1c1f80137f38db42896957a401353b5c1966ec2c2bcf9e09f8f286592b38f2f6245358100393afa489f16def315438ee4df8e09c1aad832912b9e58ea7024533fa5a6873827d4463f3f69de710e784bbe6a004673295ba5c6dcb311ee1c7dcaab9c979bb2035e7eb037c6bdd52bf4e4c9c1f37ee0cb57488d334171975a8b898c1b4d46ad65cb380e357667e01bd1d29eef2daed4dc941daf83217c26edb0476f554f94bcbde2b7d87fc03a02047000662db1fce24bfdf038b477063e6f6359656b598905b270ef413bd57d2d02572dab2f2daf5ecc6508469e0e4d57fed52de0167395ddf6f5abcc92e1fcaa12dd17c084a05d2a4b3cfa43ec3df6ad8c5387aa17589c76654bc263f404af52192830d4edc81958b6346d77f45ac9ff79869332616aa193d753baa500db76f3208530182e720a4424ac276e5dd389eca9e498e300cc0cd4a7c419403c491303113f24354f73bae3549a36643ba6d27d0af827d0008d711fbf3aa540df1c8cf90ab99baf9055ba6e7fd85078b7fd6908e54a6c7e81ecd3f1a4e98ffcdc8d9a8a09a5c401a2f87204adee6165923f35c520e01e16168f57cff03277c75965a55f237e196370897df39ec0167a2ab44ead942273971f6644e769ae7d2066b7cec9175c559bcce9ff537f3f6593471946dbfccfa1d3852143ce3e4c66226c4807fc0491d15a318de85d42c0b67fdfa273da601753e6d9cebff5593003f64163c2511719cc31eaf997aff39b8475293ac4de339e894bf5da781e3f0c42694acabc0b078f9eda3b50cfe37cc7efb34cfd4bf6cbb68d64164fd69329ffcc80dd1c446b16ee37ee280874e728e2eb21539d3ffd28c14172fcbb072e0d09de5bf26ecc461f0c7a9930105549d093e3e6c84f5e310843d008fdb669aad56136e12366c9d0253e2b0b74e0b1d04c46de7a06c10d6ac5efb8fc5c2a8cc154f26e2216bfad050f45467f04647e98dda538be6db603d3c03ec4068139d9f3d7beec925f51b3742e1a58e4438733bb17b6d02cac79904119f99959e9ae35ae37c590ec959de8fa21761e0ec72ac67ef58f47d995223a028fca8b14ca362c8443dffb920ab897511c7c3c40426dee0ca08b309338ffe28922639963c57e1a4e0b8e5ad18467e7a800b4cf73fcb8f7b65bb24153ed6c9458e83175582bc71a122b3c0a48a9b1adfd0ee71b5ab4c3109e23dde4aed7b65c87753e4af829a2c512a0895da12393cdbb10ba2421483cedc538123d8aba1bf4530e15ef804fddd51e7c6e80119f6ceb08086804c1581ffeba8c47a594d4b00fefec722beda20d314d727f823a6c238736131e57babcdb16e20e9283d378f9bee4fb3d26d1025892cb2db9e9b58e8d0c2c050d01d3a22135f795cabc6c03b829f5db65c63a1881b3b5e8a61de9de0a8fe72b47b371950abf6ff1b8dacc9f7d62c9a7619aac74b629d348a35583491934171adaea8c2062d0d959506ee5ec6855d52ae71c20f2db7c026bf2c200c14449c92f4341137a9d5ed38659dd88ab7d01adb9dbd89b758db65a6046aed09d1ab7bc0ca3c67aaf324a72743da7dc088ae238faf1e198dc1c6075bf13af59f56b8cd20f6ac98896c3238a5e4ddb5b5d9bf710b4ec7c4df4e130b86c060f0ee74ca6401cfb507fca453e726c09dcdaee3391e54879d45e1da7334eeb48c7cb605f100e1a626370cb0c45b1cb6fec9e6b8dfe577a2a939ca68045a39653e93e4513758d1e701e226b6d7f91384a1b719f0630dd9d6fd18da60b030b8d171b436fd09fac0c5500e85eded9c3be14ff3e5bb27f5d9be7a099839cd9905bd8c5a345a574f704af6283975dbef417ec0fde85a8e7844068b93ddbb7ee478b22e3bf4e6fa02b082f269f683ca48074812df2c566cdd93dd928aeb5f3b05a20ff60b2c13daf0a12c7322ca72a0beb55490610649364714bb43ad2e9950b5b35f17ba46317e6ac1321967388a8f68eeec6a7826ee5a6e92b5b17e867187ac979d708bb15d02fe32e3fc6ec175c62e0cee91f53d675c7146e0d2d3afd1c49d15497a1284c9fc9c80ab9e9afead60bf7e7da20003f43b68f63e157b45e0da85e375787ea72a8b95105d0f3dad540fdefb9a3c5c80a184724c2449d5860c5b774a359e8cb42a6557f10a908af95783d8cc52c5f11a3b148bd3021c66aa8410a691efed75939a0497121eb177adc5562b86db8c895fd526ede37e6a19c5dd33bf983392df8133f55e22c10c40e67a611dc451558a79d42926d65c9813388301a47c48112d76a017f700e8bbf2465277a0619c25d3ca058da0aa036cff6ba8b485b2e0256fa424bf42a1b5655a6d5e4c08397af45547458ba95b935381db94db0486a8c51ff9a2e46aa101edb938a5be290619dc08a6fe12b49f9a41de7b5031bf0f04c8446c9ec85a108410590788d99b3cc886393d99a2da017e067318cad7ede41e6416ab800a5d408b8918e0f6bfe7c6f536f57df83b231ee18291496d9108e6d4c421b6c75d3fe1d833a4b63ff11aebf710ff08de31ae4e7c97083499be8e35176f27322f46f2a1a6c8178f1b0168eca1972ef5cd253f369fda0d977db5d7b0e52dca8aa56f1ff14de41c544058f3a3ec5063b95b6b35bd243a1a8282252e6c59d70a0ff070ea22b6707584e8a2f996dd32bbfc7af16ee3be9af6e53203917bc08f3162c13bcb61c23122511218fc5c1e69fc4fb844f7208680d2a534d6330d7db625471fdf1612650a0bfc7b1f98e8f6c467b42be1696d04b2857c50e30e22ce9a281a20f2dd603a325c7c1fb5857e8a8bf6444180cb29be0973c5c7e9a42c5757a48b37f3d0e0ea3a9e26999f51acd4d2a310907a0dc0cb257332bb3c1f3287faa4e745adc0910c9e1144c98d859035e72c15668e01abad7993166bf88943b143f55ad7bd2ec003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000002a118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000002a0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000002a0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000002a0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000002a29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000002a141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000002a25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000002a12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000002a2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000002a189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000002a1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000002a05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000002a05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000002a14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000002a03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000002a2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000002a1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000002a1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000002a14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000002a2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000002a305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000002a280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000002a223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000002a17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000002a08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000002a2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000002a0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000002a0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000002a172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000002a0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000002a05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000002a137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000002a2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000002a2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000002a2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000002a18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000002a0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000002a204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000002a0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000002a1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000002a28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000002a1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000002a21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000002a0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000002a0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000002a107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000002a2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000002a09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000002a24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000002a03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000002a1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000002a205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000002a25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000002a283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000002a21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000002a094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000002a0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000002a1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000002a2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000002a1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000002a1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000002a304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915f6b580e08ebe3a9ed8ffefcf4077522f4264726c06e5b348822031d30f34173ded1385c50385b2b88bc7070aa6560db5a44044a8e3f14b2a95c4ce2aea02f85cf8c97ad2a069c0c34bac8ad7681195a6daed0459ba1d00508031ed8a5a44baaa93b63c80e19883e913a6d9877d7f24fa34e846499c571e05a26a0eb2b7c5afac3cb48ba745cc0e186bf0e7b2d65ea769f27107b97bd2c412c530e6e0f0e8c44aaa755d362f504e8fc14544feb9ba776e8b2b0885926856f8f9b2ef6a10597ac30cb9fa6c6fc429d5f8cc89220f9e91b79b8cf5638170b5a5474cb2ed324af9e82282bccbdeac1e4df62acb13505880d0e28e70e8cd5f744acdc6ec81264f3290a0e38154660510fd1b517773a2408a83646aa4da329fa632348a12100498d1d295e4c04f942f3ee6bfca284bcd8accdb16d2af4cd5e3915a6eb9211896b212d239b8e230914e018ceda23b6dc8f131d80d2909c95b2f64f9a980dd20660bc8e92a27e0d5a563af41890df4c8ffe6f41b6b1df3fb605c2f6c357c7003cbe496c3ccffe14befc6e0983d027a86552db749700fb89d7545258bd2f81b7936355c27f0805c9a5368e27f14c2ac281c843c524d3a8130d04e8d2cf2dd09d7f6f86000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090c994aecb68de0834f2d7e31d5d3001788c6b1d7704230c3b5d7cafcf3114571f341faa86c5b714085721e001297725ae47d62636479745f5004d866dddf979b628a73b761b82aece7ca08b180e3b11125410ad201e72b179bbf993653fb4f0925052c6043225434d25a845c4a2e4e54807d5d74509d5521908f3364f9fe338586b726dab7f39bdb8450a37f6eb3eaa87c15dcbdea066ba3b396b3346c2837db338f682f19b5bd1689e3e1bc5db99743ad1ea04acdd36c7c172e6d9d7a64530c7c55f151f56fe89b21c3668b824a1c39609032549fcddd991d04c17b81c307f33ecaab86d9ecad6167247535ad0db2b96a01e685a2d514f52cc73b6c8bdaf2cc4fc708d1105fdf4be92c107cef187264faee77ac102449c04f7bf730aa29b0adb8c2bc449bfafdeaaa71fd2d1b528818b204388fdc2a14aefd2064bb5bb29eff2c5cc24f63b20502dde8267ea6b8254779e25ca996b952ea7a907322f1ef40c487597e82c15fba154ace4c71c382aa543ad3b2f9b8039297d730af667b1898dbda8bbd2402e42536a9b39997b2d443234c1cfa49a9280cab50457784e6cd39ac71f24259e7ffcd6e735c1f44e8800102caa755b80c35d09022aef8bdeed7072000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022c0d86337840e6db92c000d779f03161b19804c59527e9fcd9f53370790631bb19afb4144ba62236e9b08c9b8b4ffc9f4af514700f0f7a5968b847b4216b1b249ae0136d1e03c54f79377e67c6226368a53469985a3ace708019e49701aa432c57e78766855d9e914e4786c781a77f3b5ad857f57a3c816281cf206271da7818e257bd9463934968ad53ae6087fc3a387c38075fcd9eddb89848ae61983853396ad9d592946fbd9c6fa3b05353811e757146bbf2a61dfe39016a51e6e8be7561b4acc225d61498ecfeae11b8489b7931dfd6307c2c481b20057f3c8c4bb3060059dad9e93a3c98a88512e6e7030ed6a886883a4702faf45b3aede441572de7f356c01b3c6abdffca3a1334d58e1e23d48c009cf0d7c020f02835a8658a0e35aa15904445ba1b99d46b1152c38d33254cc476083a5330e9931161c67ed062798ba1557edfab8cf94cefdc54e748f646f03d7fe824a68effe45bce90d6032e5c80d426ab9c758e9355e2e024dde4c9b1e9081443c15eeed34d99655ca0576674cdcfa2290562530486fe6f1f64b9b33965ecb0f7f0ed6777f6da0355424fa37b6f075e78194b855c7656874e3b6fe188009e1910e3736aa1609ad8201c1ede3890000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8f0104ec1a0b7b5aec306bebce4d5e99cd82b56ec360e071cb7fb12620e72184b66563560b2f7fb98b260a383421bcd3d4cce9d5f55981ccfa20091807d8434ff9d90fea8c414733fc78d88f0d78a98006d1c1ef7628fcecaf39378d7409d18557e0428e605acf37e62a3a5b6cfd8318aedb3f7907d5404cee4a110788865f07ebf60aaad92f37311c82432d22482f6ea258537d12b635ce24d76fdf7c698253b3599ade57da4ca79c46bb8c4ca3bad8644692669747dc84b09d8b834ab4baea87c746df64425ca9576096756c6499a057a533d9e1e2bfb2636c3f3b5e54dddad936b4282a20077ad78c6b26c1280f83bb68583331445d52db2e331270ed541de9adc746612c2a404e97e7ca5a07beac32156fdb5664c4654ee96049509bfa68efbc914a2225ad4e5ffcd0d27985efa1cdf370b7176e8c34ae6a7bd8ea6a8b7d3d2687f39740d798e6929f6acc89c44ef5fe3801edf879963419349c2e3c5a9e0461723e986587cfd19d8b1b695b950ec995aa9d9e3f91ceea80d92b58fc41fab2118694b663164e7a2d3ab18a3e1e02368869c4513cc8b9e988af82a33cb27d8ffc022ce474185e19d952a98df1267d790293c766628190fcb42039ab60b3200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cbffce9c6bad2c5522b6e6327d452f39a1a0171e9c9dfdbd69092f933628c81769703d1cfc83f4ae1028c0c81724d994b8bec0b70ac75c856117510b022e8bfd4dcf19d7e9aa958c035f5ad882e2033f4201e49115c8dfbebce9090023b9c921fe1e2768ae4af06adfa39f985f1d8fbf5c8d4d210e8ef703cf9e82aac6a22e55fc6b5b8ce4fab06cb6a99ea118cf430a3e30de694fa2f93ea13d057e93bd2f7fe7acc4c276f748635797915cb3e5bb7e26f82fa9730abf080dd6a409eee5ba825673777399f7b1541d121d1469491383893829450529a252b3c25b3078167a99ef45fd226b1f00fe5a50a52bf40431172c0549ec4bf47bc5de5ef4a12d382ca569d0e3cd585944c992e49c2f34ced598b730f34274ad69f5d8f02904dc4cfa8984cd8b27f6c452d50d967c480255b709d18285299fe468512116dab74788494ca39bee8dc8ebcc88db41e502d9116bf9365383132e45180d0d97ef9fa421d45e989aae33ab368a2c5b8c7370b0cd8d8ac93917958eb8837fe4db7d10fd1faa39a07db4978d002cd275903dd2a92501a38ab1fa095e3c9e855dd59b2fc51824ff809be206821a7b910aaead1e47016aaaac38a09f0ac9217f229a0a5891ca4f700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009158cd936312e248f37448d5ab3697ab18f7191c4a2e577c21719331769360815f044173556ed71bb544424228ebc6394872b3798c314f896b1f35077e43e7b69510fc55fca5fc30aa2083ad7d46a293433b037d945c4d4b8f1d69ee74ab727ac937ede4b82fff7404a4b2482d74535c4b5175fd7aa598bc6fd6ad2d6a687bae98b9a1095feb05978d6fec2caef6ced077f1fc5c91822b4e7462a7a6ff27ce01bc17a25d55349b20cdd9c84d92cd8d3aebce476185208072067aa034b771e099afdcd19333c728121b3876e5726b6a3cdf29e572d39e236cf00ec5779d1539c4f2694d4af385031de4546203e9a65951a938d39854d76413ecd69698505b507735b2b969352301a058791e9794a0160fa9fa65ee8a0aed64c06c3edd1abea354133ab028b42e22ddc9107c27ef0faa3a15fce3a6f6ee0b8b6fabc71ac955cb3d470d0549ba5ff073fc9b6c68d96e771e838db6a728768f6afb839198d620e99a4a72529ffcbd8c76c224f98ea6b6124e982c403a93f9d912a6dec7c7ac5507f3c6aea3d851da9b399f89041d2dd3d02c5c6e2106888c93e3b87f6de945cb0d7a29a7ba5bcf073f11a288a10395869d0e5ad062fb1a1b8a7dd7199e787c564e580000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000abe3779e9904122a748bddd7479e905c9114b32d00f99aefc2b8a7d29fdc16c0afa2048c3a56cda3edf8df09c01c1fe525aa5526b58337c2b03bd64cbb9a35103eab1c4ad875057a5cbaf47c9cfbad7ccf41e631e7b13ffef2fefc24f1c8ad8d2c598671f408a186fcfd7b507a35ef6094b101b80f77685c70cd9ec39c978609478193313889a8a0209eac97d62f8e36ca414964e6ea47e7d201467e238017b439f5def7cd85b7cecbbf3c3e26671c103ad8e02ffbf427711762019f4fdfb309a045934b4c4398b3da0eb95406f904c75d5af621cc8ec0d35b0f696f41cd01391b24e375d22eef3e29180173e488ddd6753390ce0f994307d306fe5e5df0056c0af8781de15ae03273423d0b5e5df3a5ff609dcba555afaa749bf120da569495e077d772ddc723d69e2fb243a8647cfb2778c94f153f158937b4c675a4393cf84946c4c676db3b078b241473ffe56c0f9bdb78157074dc40eb233fcfd9b728cd4b4b9ca5de05e683b1c952ec62a52f25428b594f037ad34cc0f1ed5959fc2327673d4621951671df1fd28d9bcde5058effca8f884d50cd673f2a7a23cd713f84a56460643fce6819ab4a0e82ecff44e6c94f01faf4b8f260b9432f720a696b680000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106d5d21fdcc7296957c7ed0472b865fe3b65a5cf874e31d14685a4e975e58d8127cdcda7a4a10553efa8462fa3dfb9b6af3c63ed4875a16e81b93710f8416bd0772eecaab74bebefdbeaead2200bc6d1abf1bd8482c9ce54b1fcfdc036a9f6e2fd13002d1b5d24c94b34e0a6030e478954b1608c636c746a706bcc5cefe8746c1972294340ef19763ee8b06eb21cc36506c6a71db61333500814060b4b4ba2f27d737ec8efee91b466b55ba5bba4aff6ccdad78fad8c977b8f156b94a512317411eb05c909ee25995e185cbf48922b76bcfabe80554f262326750dcd82e39c8f7c6d3293d4c32b20ac517ea49cefe60464d6b671b403d93875f8cee96a5ace9bc93e7560f409d5b43db783d2ce045a50139b50035b9da9e44cc4424dee39ea9b33c7d65407329dd8a457e6d21b3f72b61a5895ffdd7bf2f810cac688372287f3651d6792869f35f1e2f925fd7359cf5311aae486530c8a53da5cce9f703158b2c639e99d2c6912378c1992c36a9147c5f59756f8038734c9dbe7b3bfb86d22b77d7af4ab2c8130770c25f1d44f8c94ec641267f47b3edde03298efe4aaa25d9226c03856d93f822833bfe281eba80dda1c9da2bff8aace27a8a6796b58fbb5a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086f9334e42ae46b5450af65b0e150f942ab818bb53d1f849ddad1739350d50bc64b7ecd33a3ed5b9984a684d15536d8fe220672195b72df8e31296f96b25de70560f6abedc1d72d0d9a56dc89af472bb9530835c599d5a9d76652e479943c24277a529eff5827fa0b6eda3c15b6f25347e7cff78be04d81c0a312523e6d303be49f69a09013982782b2048613c3ea7acee08caede9ce3978fcf38cd123b4f19312af24689c6d449dd0bfe54079a0a71c680705b884446c6b80cf7eb2a83d90e86c3cb8f1502046a58e9f050908de3b572c505599a321f5e7f15fb85fd60ee578502f646d2fa402b0e1089f0ef44a16e3671cafde42e601454329b394a7d5b32dc1447ab9196f446b8c5c9032d833f05d9d38deaee08fcaa91c353fa8bf5ce21c425e167075a02e465fa7d42c7bd8d72035e39c5522eb4256c23cc3c697555b30bba78b066e5de08c3326414dfb864029c02c65ccb836b9b6331fe09259f7f14cd5f6e45bc209429dba547b9869395a0635a5997df9aa82d348b15c94a6ae03ac94bc34123fd4af744771a7ea991389e6727af0f03081ff095740bdea3fcbeaeb0c2b8ac556f414b999b4b4068ee301bd49a48762370b68cf6859d9d039ba6bb1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024386bd5888cc7e049ebe0e391c09fff99f900f589dfbc29dbbfbba9348e7831d38fb85dfaad8543f08b07f86bed532c35d8eec580d17a3cdcca03c4bf3477eb953ae59dd93fd9ab88d9984bafcd5927f0793c279d648205820ffe43d1bdca186f731c1ada8cea7060a1384645d6ac0946f7b2cea1a8d3cc29ae5ba0116df5b98a8df2ca8870d112dc80cf240b922d1bba9148f56f1701e9ed61964506ebdfeffeba8e10d37dab905a7e825a752595f0b04d88a000223601f0b5e148cf2eac1f54b14a7c333793dfb546292b51b0b34cc045dc835faf4bb6024114184d0d0aede8f4f4526e8864489e8dfa2226107193e02a0bf3778e381ad2c54b22a56f32e76c390765d3187925f7d22ca224140ac37fcad3c1084c02ea88c12278e39a2721396ced38516aa44b32363df98c7f02eb94b62ac0e53ae6cdba2e1b9f08cc9c8b0f5a0e48cf9babe686bdac0a4ec7a655bac58e8d3c6417a948ffc7ca8bff0f6502fb30d3137d8ceff9bb3cfa8eeb1995759a4c70b7b793bfdefcdee2fc66b85a81bc99fc07e3b486749a5c73d9dbcb9938d05f10617cc0c0b7c782da17a021bc9630f2615fadd25db8ab7acd49cb2b8bd0f027168c703a7c8a47c90d3e2f7cfa00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1750a19829355d3ff126b75da196fb1d7a3f3dbd88c6e940371671bd5d183843119432c5c69cc0fa216b9ea26852e4f50db817b159e53add22464dd5fbc7c4f00e3135ede765cee939a30b13e6e3fb8b6ee4b8c47a409b859735a4843b0c56124325f003686e51e7ac890065dcb03c36de056f28976314708857611eb67ede0398fa36beaff95176591953564f165b2a1064e5d657adabb2a6d9ffb66dc68981dbd1180d83a443b2d35a9bd7e71b595111c7d25b9045b0f1bad326dba122395c535e948801a56d645a2c8243fa9eed75c576627f940f41bdf04e8c4a3251ec49b5f619cd6d13563d958d3e114f03b2fb69e814698a86262a341d9b2ab9623392bf4e72c1281b445ed31dabbacc77ef2cbfb2feabf10b69bc4caab6e5a7ab1d3140a138702044d60de53a0fef941678907cee50fb76e3e7da97f29b6bd184464fb3fa097bbfeff88783f72439797f93369ffea4e05ba76dd5edd41a367191c3980500f7dbf08be9717eb06135689db6f7ab35d85266eb05095f6d17540bc3cd0622d70b3e450983abb32d05f1630c0c81da53c77d88ab94553e3250100e816a134a8d7812fa7d77a24c804820822e0a5561b10bf2182b25c8c9edc6bc3885190000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afaff637dbc88552cc2d17c99faa72ed23a60529254b2545161fc43ab0a7e5d05d58074fccdd3390398029c66caacd800c698fde114ff936d01a3762cbab2803eed1a09cae737b79a8349f88e40ebf78bca2d0baf6038891def0e89261673ffc1d04b71ee915a3e2717f588d7c2a61902aa21c07ad0dc26dca077d4d8ea8a43e3224fb18dae17df6bbafad8058088a2c985d83352565e0931a49978aa6ab14aa06fe3ec81dfde52e81f0dfaebd17b5b727581f0737ad82653c632cca3f76cc4347a64b266218a0cb7c58ca273eebff8b7ef500fc9b9e3395bb0b8f97ea1af78cd9653af4b9d4939b5a2c30ac0f1f870d0dbd77638911cb728985459f2ab7677d0bc4212a2b811f78a64d782e1ee2b04ff86e768e75b5774d2ad30b4212fdd02c601f5d7b0db475807a67a0d064f9851e414d715b89796d6d3288e9778a154b7cae99f7d498ba3cef55cebbeaaa1160cad93f35feb30ab708bd1a1567a629350ea2c7024ace6f653f574c4403669186169641f4f783b288da950c220730cbd4fa1d52840262a639fcaac127fa2689d1459452295b1a6a8e085bc810c58d8eac44f4427a293462e7bc4b7e736f5cd0fe62935cc687f89c2bd414230f87a01189c00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9d96fd5b42e8da7ce3262776ee791eda73c126c740edc7a4dc33e70d8e309d7a66ab5f5f1371e40eea4a0eb144255d9648eeb363e3f7080152b34d82f3a7ae7290f71e3da61f80c6ad3aa88a64582ebcc429519a9bc16ae8ec5bffa57251e53bb10917eda2c20bacc558a89a88d93d58f8e2a1b7bd1a05422dfcb3d98e2573b53f20ecbf97991cf8bde3c58c6d02c1d3487d1ebd172b689692565795ded02b1ec53e49df072cbf82c81581b19cb62ba6b1345c9db18b3c45d3beaa5c8733eac4552ebaae30ec84044ad32ec53e39b25173cb6e3dce597bace2bf289539aac2843ae487a7c4c76886020047ba1fa1aadb4bcae5493477f39422dac9c16d3868ad9b3410d343d4ebe92a706ba343da1f7d124907892b1c0848fc6624eecd2a43d18dcfc3d397800755586aeaf307effd581d98b889007ca4fa3db054ea629a13f48a897b12142afa2643dbe90c5cd2a7acc013618a89076e885415fe1100af09ca1c9460165504cc8a2a2f8a0a08bd339d94c73b51cff1233a3852c1da49f77d25c3bd5f189c0f81ef4e85399d00f6bda8263865e567ddd44bd83a229bdfe89b25365fc786243c8894df045365536071dbb012b01e3a02aec1aa6864ced0ccb5100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d0e8a56ebe6c35fd8d9aba28edb935349f08835c9a7d20862efa293c61c32d3fef8bfc539852b3eb0049e414f17fb0872fd28dea9e80825d29f5312ee3b4fc86bc5420c1a0f58af14622b34a990cdd8f1936e24cce2ebee4ed0bd195afa046c2721a9fbe4f18cc5812bf4126b0a18b084dad869cbc4b5eb1f60dfcc60e9e5bf571458459939163577084f414edad1e92630550b54aed1fe94fa8ee758ef3cb26d89f5353b67809442e83c6117aea992dd4b21a7304629e5dbd3719de4a54c931c1c0b4499e115feaf7b56e5476ca2f1f83491e1e8a03e0806181d89f65a4d277d8382c80d13dc2a1e8b80bcd2ad98dea3171e144581f2a09d2800572edbc1c979531288f9c2eb45ba1aabdbd8de8f40814ff6e9aef908ade93573da68e77eeffc2ad08139b1ba2afbf9ec1860333b20f22332a12afba2708be63f91f7af96cbea3dd42df0fe06677babf57513a20cb3620703aa8cde9ad2b5f1e6f7fe399ebd7b8eda34f358a506276e8b5e4fb542e3e52f0cd47c5be7eddde28b7db818fa02089bb51c1bad707fc17726ad2f44cd703a99a5d1690b46d6118398c461c5707d63fec0891a11f0cf24aa3d485841b8e5d975dda6a6bb140e3135bfb42fee3b4500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b8e7c19460c101fd56e9e2757029366634684f7f2368b94496a41a86fc839a9b31f41a4fac74d1b131dad9552a21a61cc4e8f3ca3aaf490e73f89bba7110d09b564dca9c67efa74890aec80f20c0c1d2cb449159a16645354264a120bac499406cd71c7e56102c7e335fdbbbe4e86ac75976f4dd46d7bb7abe3adee0ae4a29a6f9f2fed844eab59eacd5136bba8a048a64d882ab1386c8f6b7139863cf9e1a6a2f4c7dc1a0b74f718bb55989c045cdfccfa9d68054519b70bb616ed1ff4c4d872b706e778e2f031d74217ef786406fd3014a5f8521b565bd884f7be424114a85fb3c0c3c3b7c1f7bd23b1f6364f38d31f9c15882516b676b6e722a1f4bd8a97a6fd56f7c172938127ee1ba40196d1d14b4f9978d9327232ac4981fc43a36e45afb97db9a01d43c04bd216c41215d4b6a6e1214801994d1e5f9f4cdb3a8f4ba7c268070f8072e9f81f04949aaf8ac9fd8ae0748a05649a266edd692a970eb127b594df3621544963e6f4166e811a69a64413a3d6bc1adb91da354c60b61323dbc74a685bacccd27ccdf7ac4bcd2e86b4885a713e47e0c172b2c1fe990e80bf9161e25fc8e1e8d76e7596a4f0b12cf40d3f90c7c798d1f0f7ea7f37c9cb0d92d100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f800dd7c37721702c540409b226471f23b04a49a309347a5ffac430954384c73b12707c8c6846bea641361dfdaefa3eaf5346ce7f1cf15d9e3840e435d410fea0d0d28bac09bfb2447b0303dce3f697b88eba3058a5cfe4eeeff3fa2134be40696e60ce81383be421d98d9d8468989aa4549d7ec0a4723309d221bf0379bda17285b9fbe2861c96b6c843dfee94c49201ae1c246acc899bd3c6aa81f7dc66695ae393aa3dbba68eebe7937483d953a4b8ffcc7595b68288db2ae0935cd74d273718f12cf55314c204b026990fdae03545c9e9b61d2760223ac76c3dfc72faa8912ba73c7e841f60aae617a1a6237a0916203257ef5176e6a7a2b021272e7e2019e8235cf869f51427a24d5d51b0f85f9598142a0c471bb8ab00761d4a7b56d152beaca009d94b6daaecac54b041698ab4f0e48f742cf42e703875c46dd0b21a932e484f7d8e9ba9921dfd5c44373e808be5e50936834f7345c4afbb7156768c931b08da7b016a834fbf7806fbf73df46c41ee61924d8660180668ea53e4e03f53fb8e411c87f65192b0ce18479a3c483f0297862a1d3404e759173e17e2037cbdeb054718311ecdfe559f640bdc4bcee441378b93d5a35ecd005e97e75ff28f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9f3ad06ef87eb25f9186350431dede502e5debb11021a088983598629138ba21b07ec3724effc423036c9e1ded4dfe99c09f3cacf9ac63e0185fa9aaaaba9c7a7bcbdf81e958cb1096951204ab7b8cc0f98c4782a1df81822abf2be9b1876b891cff95a291c2224a28482b5443345f5db97c8187d622a8966c209474d4eb6e622105ba92e19d96e4aa895ff078782097ea90ae6fed5a246c30adbfe1e14ce8800134a996fe20e1164c3d125e51e8821503b2584b33039f142e59b3faf32396139fb693bacc003194df23383718964dd9a54528eb89ce78c5ad0775331b34d441ccaa89d560e5c6accbb5014065776842ca47b9d122b84f4247a5b4abe78d3de4f3353f83e61ca7c7e903e0496748c25c11c5348763e109718a7c0a4d62ec41d8b5a70dc2e1d505eedde7280b90ee243c93900e91db020df7362009e8f089338fa8ed1373ee1cb3f14a313ab6f629e04ca79bd4a443c018e6c876e1da600f2c3f48903c4a35071cd3424b628e8146210f6c2a3540ddba87940ef4ff74b2cc756de7b8fe6dc5f66a035b726ffb5de67364108dbe9b8f086cff2358f9437c62dcbb4ce53b91a99b9ee3ceb8056e0f6d589d62da850734b37882594d73f8097a3e10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192fa86a97e0a08eb6da55d4f905fca3b908153292fbe43ae1a6e9957a263d3d54818946431131b854a64cf884a635b4a4db4c3eedeb0e75c1aa0fae8b06e3f23dd997588f4eac5d840eb1c394c27c1912724a383c38f979fdc788c6c11ac912e3f91e5364b393b7c972aa98a3f1dd545c85645de953cf8a4d0c9132ff19009d153176d8225ca979323baa01e195a8ed129b94b744abe81a6b9f1bdb6cd4e594143d309ff80a804218663ad5e2cac392ca689ec3d0ed9c7ee362d444484785673d18a7c13b6f52eca73aed8c519eeda3dcc2c0a1df0c8e54c00664321d820a4f5984691cd39d1c6baca959a833c81968997ffa2358f284db0309dd41a0249144e7d4b85beec6f30df55f8cec8a1ba69ccde627949ee75e3b8eca9fb8f0d6438efdb3ecb64bf709a7b8a28c77f89fd10bbe683aa0852baa3801a82f17431ef34d4c7f3ef52a9c39f560a50e528f097ab3ab51f7c7407c8d11e1ccfa8b8b10c6310da50ad43f746756c64af1ebdcf84553795ac53077acb7c6f8b525f4301f07c218a3f75d6f3994e93aefc8ab5d6c1681a1067d322281594b55c8b6c057c321225805cd118840292966451ab9ec8aae0f8efe727ed657e517c5ef33822deb59600000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b02ec4a2c72ea5be55f77ab7cd3d64cf79964ff6bf02625056b140f51560deb6a96969ad3bf71bee53b1a60d67b021d2190bc4692baff458d5920fc35871f53bb9bec2e0e28b7a6f89a21942a0c41d0b0a598d4af6913be52d641eae1de26c77c7515aa553dd4b9dce9817d21eaa600f72a8621c574ae9335a27b89b9d3b3808bb81a10bc16db7db0659ab19b3b99bee03e695b14a0fc8aa3029507da90f5fb2652d82afc538c09112ba4c85b334234ee08fdf8cd8c455c02c041016628bdf680fd3e898c53a9950d4cd29a6e30fa26d98ba29d6f30f180fb1f6e0b52e19f52a3128e291508282b70d80a661a459d7e6155b0d9fcf99bfde26a82ea67c99a3500c35cbcd8722bf21f1b3a3427be00b3e649c50359f29da91453972e7c7d56f88c59a9b399b8d550a5d0b470ec9558a8c6801c99a6281d95e8e4bd3f01eb52cd91e5a19ab4edc1698edd804c2e7522b0c6f7f9986d5f0410248bcb46981c28af2063e4aa36dff586caad32ab45ef95b2cf7e637d81b5b0102711d84095bfbdedea168fd7f4aa5185011e19801f991a857b277880e2d84592dcae62f3ccda2a0b2afcc06b37d82f05423889b29968fac61050bd7190100f95062db3708f8782c8400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000818ab894aef8fb43835963e9dfa188a3e58a9ee27a3652d46fa0b89e63ae6a942a98424bf95ad952ced5c6b8615abc682a1aaedcbf2af463957241095426b491074d04624589656803ff936172091c8764d4adf05e66766551e8592f5a79b7dd0e8e5b37c744e09b870d887865ddf7a3349c385fdbbed8525302ed74a34c6e5208907b5287ea50804cafb105e232152bffa70837792d2fb0d946a69c5600d425b5f3edbc5b329728a22413ee60889f42ac536d5d92757b4376fbc4afc85842c3d6bd0e45c202dc8a1d77f8c2eaa7bf4fa755e402e5a2037048520f8bd793695d278f6a3f116bbb3e1749c76a519486764fc1603cb4ed71da7a88979035894e2872ae92109d11b6618d7bf31600fe96bb4a2e26c55686e24d701512e1058fa561618390c0e68fdffe72c519e39b8693284a918f351cfa82a635c691119c7029f5643b8f60564b6663e439cb73bd2d36bdac8d5ed51c71285158d8cd2882307600714d763c848d41bfe0fdb5eae7b660f66d401ec7bfacf832f7ca843e612dcdf8227f0fe5b8a90013b3deff8083e533ffdc2fdb47a42ef166c2f98054d9a74f80fd6c2478190b078fbf19cac5ad5d9aee31630c08d96f45626199c5262e755440000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000196519b8d5e5be094bdb87b3bf0ca97d6e052951ede5bc59f646b3b69a354ed186d1e4b453e7c84d1dc374be1ef83f56bf4970a1b73f1db4b5946bb6bc8aaee36b80efca7a872d600b2483857aba5c0f0a102d0c653fceb5de4994320e58a058acabb3dc48aa1a51ffc3b95f328ca7b2d20fdda1b135def7cf5108badc10503179237e182ede4a1e42783bedd1b782656dab7410e419276eebda7ccf58e406b2bc7ffc74b527dc3562a7fc292ca63e84e5a798ed3c0e879c07776b29b9ca5476c1a654f1678640e52f2de672b98930d227fb44d3f266f2c14c9b62f50ec84435329fb3fb2d8787e38c21589a385b0dec9fe5e3ea0e2477fefd6a6cfcdb95560d91b6dddbfde16e03620a33a73b379ae1c6ff59a97af7d7d2cfa176001195d2e2a938451cdd8473cda7a5564b06817e0d4a584c2276256723977de6e2ca333ab3a2c4fdc5ea9a606c66b52a87ad59b9bf367f19f38159447fb62919ac28ef663c9b16aa8d0d57a55351a0709b71cd13681f4db021d67c4d9a18f86219cc11628d249ac4f5f5c1cc745de6642647064a575bbaa28eeca3e7248e68533880d8f61f9b8e105f1f50204c295c460f18ab9e6a68373f7cf4fdd18d133296f4c3beed5d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a7555fd7011ce814136ab1ad537d242d8388334b3ae9ca38e1d47f6423af9cf830d3839cdd0da1bb9581a5d522c429cf822736847e47274fbd3beb2908db4808afd67eecb02ea79baf503796e8b36faa590b3c2ce7dc4c7d29e58958958676eef1083c847d87b3145275c27770dd8c0199f904a8745657cb96417710e58259e2651456ac0d9e3832f23ce5c2dd7b47ed367bed209c39dea9c07cc8ea3c57d29fcfa1bfa2c0ffcaa363620aef6d5e071afa9911a162ff970bfd2e8ae1911904ac4037bcac33224e53fc3462fc2ce1c241cb487b621231ac0f5a528a44b8de53aec011ce112c12086a3d945144b8464c2692c004fbcd6e1bf91fa484bebdc506156b1cfb4f9d07de2869990ca47f9ab0d7c9cbf7ae47d358606bb06f15b37a54be8ac0a347394263f13216682402cf284f6b489f0f73789c350246cbc4a6ceb9dd5712f8eb1deb1df80ec8f90051e7916bc4ca84552d4c84ce350cecee2d772d01e19ec0ed4c0472604dbb4459f9c20c07ad0d0d0eea3928ab48ebc7623b7b3bc04218c03b9c725ad976385b2594bc43bb938af9147c2e25383bf6031105f2ff7767ca8916a89a65f6035a9679b86f29765506583b8b498cb4f35e3c138ae9fd80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7c8d9ea2c166b084f88d28d8d7e7a308c28708315d82b5bb434f976d007c3b5b5a59c4e6040c4923609163de25dd1acaebb49bf7ae50d6f860e8d164f127121d48f4b414132aad2df667bc8720c09a1b5cc272546d2bb372d3fcc577a2afe26a8400271204cb3a8be7b0262c409bd778710078d84959d2d30e9c8634b89cbf7a862e1dda873d280c232843b25fb61511f38686e97b24f8f233bd21a179eb55eaf9397b3842e83a9a87681ad8bd522d0e92bbbb4a715c1aa2ac112a5ed2f2fb6e508f536dd466048568c5720e76b9c75bd889f4e66823d9d9b81308ffc03a3568c0043994f97ab714885111f1ead02b807396b8b7f874fb2bf478e1df8fcd70790e6bc23a36e24df6c57fa6fc27cf3edb0d593999341f374cbd3cd0464fc0030b67014fed414d7ac90fc644161d51c525919f1a2150c7d9fd256982c0945f0d65fb5b21ab773be6e5be3e851325d7695982bab243c2b4d1bd11803936657aeb8c79e686614d1580cf4f6ce008135006324291fa893e464c7129d84360bd142be364979dd27895bb67eec729502f0b8ba2cb0f25d84ae91aea6a42df48fd5aea0bf0238e406f724855c57b4c92e6f6adaad6601e36d12928746ff586af7f6b41b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a42a7bcf93957f77f35a1fde9a0d515ebc58f9b0870edd54070ddd18b1ceaab10c539a3856aa1e0b497aed190802bdc43bea14c341cc1c94846ea31e0d52e9a8db16f840895ff11bb0edc37e3f7123100d4c1684b4c1b55eff700d19c70bc4a12f48d985a7561d6f64de2a2ef4f67eea0cb48b2371f6a20d2db90d49263eb4932cba7738b455eeddfdefb4c30a7eb12454c1a535f43f53947b8009d9857df235f6fb8eea85ff73a8192723712913a405bfe641844f764c3f61b649c1983b1908837b898740d64b1df2df1b308832a7eff49e718ed11f7b01f2519fb6a495a11199bdb1fefc3086042cb651b2e2b9f62fd195fd0d7095039135d3385bd7e7ced42a9001e0cf0bb8b1fc2d34e271ab5e061edb74be699c52198ed85b27176c4de129b28eadb7c11c32f76deebd174ac0bfdfbab9629161a608a8c1204259b9c6f65df4fc1aa9639cbe4454e2cbab3cfba89e36c8ef6bb6a6b31084147b8467b05dfe8f949abf3bb7ec4d08bc7aaac90bdcc1403f47e74faa22dbeae4179a17131f61c3aac3b2b079caac438ff2a209eff682171667566866c03c06d2367706360f665707bdefdf55e9151a52203ccde7ece41875ebaa4d6f8314c900a745041ed00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c4760157c429df70aebf28d8ce334004d338ae0298b3d97228ec125d812a7e7aacfd72723f9196aa4b3252676d3e8eb5d9404b5e8111fdb336bdee4a57ccd1807ecb57bb2ab05289d6bb44ac58d64b895e88faf6f8322de8a2ce954203651c34bfba5d8931ad689567ff57aba2878f0261bebc8133ea86b76912e69ef5848bf35484ddc3186e6d2be12e029095aab6dd9aa5de481d8ca2c22f2e74a5cee368c96fbeefd3c85870fe4b4e74f11cf6b3ac8b17ccb964b726e1f5ba36a9bb2e19e93220f106bf39c2ab296e23409741f9e24268bc049d7dd9fe26596346b7ca83c0d10093c6329a303b71ca9569c4b38be62803e334eb3450de7008bddd76b5965795ecb533bb56b749ded33c359b7ec2da6fcf4653c3c1b4cce4be2d083fcc208db3d43d29cea19f1767298bde242c806235bdfd890d63fe109554436cb7bc45a923c7a80308be95a310adc4968ea8664bdb90cf179ae0f01d9bb72c6d1184f1cb1d6ef42f75dbc7526831ddcd21edd7499027288fcf74f8e33db6eb49bb7e09340a11ba2a05efd2aad02c6c9f470a88a33d6b6d53d82eb747a6f27dde44903625ad289c8e42a51d817c70175a356c31958eb22ef971baa7ff4738b08221f92cc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a6def8c1d5d023a7d8003f6e3af2cce283ef06411d4f91ea543de534431fbfa9df491104e11c00a9f3d73ccf246d731f8e76e4f0fe1574f309bcffc2ad91384777d56066d4e7d614ad933a9861d3edaeaec937bea3f4362cdc7eb3af12662605907ec071899622d81233c3ff56b23eb53c68c91cad08ef80b3a1653bd2f1c7c0897cf40d4df3809743aa97e52ce9446dfe86e2cd1aa1d09e83d5aba35a478409f69f95c1beb2e8e8c684d6af973b912ff5663bf3cb05db53b521a18e842a3cf5220093d5083e6ce02fe516d85b1e5d5409d2577fe42a4a24f99be8b68da4d4baba2f872d8ce686bc762deb208136e741bc05910e7bca95333e8de2f3346a7b50b2b2b340b2bc11c80eaec2ebe89ec75dfb00bcbfb78f6c5cf287ddae60c8c3aec76b50629649752f78c01765db13059c5fe71e6313bbdd74a3f3878f5c8fa61f38e3a8128b7fead9529c57a034513e95fe08458ab20aacc6c4148ca09f5b3894c90f34e6b38c5123a09f582042aa52521842571e0e9b86a299b2d8bd7ce2a9c48a6686a2560f33caad1642c6083b816be1cf2980472361013056850d27fe8141668703cad3c6fd668525a06ff27ad9f11ae816f528dd90db2724ab6edee5e9a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008483f0fa5ec463735da15dc8e7252d098ab73734d6a40d5eff4fc33df28f367ae9dc4bad509b7a21e4121b252ac2e4dbd86af7423ed288e8a1a72b6bdd70562d3500de7df95d6aee78d2367e16827aff0bc35301742f75f88f7d09b148116b149f319821511aae603694b49c39247e47e332655ec6168af00064b993b3badab2345bdc8c41cf4adfb3cda34b9b912b7e900b44d843a0ddd752005a428a91abca789a39d27113b6c587e407a9f54a077e6ab7f17c42c59b50c2f594f63f6b6f4580ec8e03e54d99b03b59b2d6adf1e89862b0f973c3a2da2d4c9662046691ff092e9d613d8333f2a49c1810da50c94bc2382753430aff3392de274ed5bcd984c28e55dc8a32ab3ab7f8cc5c9b8ec2bf87d31b9b6a5d29edbda67a410766b5589e5d86e773ceabb6350c488d5686109960d83222cf96059f4b195b4d88d75b31d46520b9a667f3a520c7ccb353748f90d4e395606dd3ba41673694ba5203705c554789f2c9dcd3e58e23965901985f4d2db5dff4f47bfdc3d0f796386c8dd596ec162b3125d7efbc9938e3f50619bc5e61f5a7a76a4c17c6723d5f59024d290602a5e2af1f6a799971491e58b9be5e065938ade93375d63b4f0dfa153aa9cf20b000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001584f3b6d7ef1e710c98f2d6b6fe16eba27fc3845c7e39e247ff7c5e21c0a98841161a60640b7aae3ba1bb8b31ecd3e7eac71006f6017849dfeacd4f75d0d532cfb9c16429371254accb6885a617c104d693c0a3010b1f619648dd40c27e81287e5d5951dd23cb8803d0feccc794c7696554a53a0fa0a6a374b4c796213c03dbd98a5c7714b0a81ce027c235283420f3bdc252ed8aaba5967393c1d3811762e11899860c7192ddcc25340c5c09108f044d24cf5d4a34e3dda7eb8ada40a8cfc86c3d7c82be670ebf5ba0b921883ab41aae1232bc2f05d49826cc8b507458426e5453b1be0446303d26641028eb0a63e72df86cf80f767a143f15ac07cb0e05cc1c9b7b5818b79f4c0bde39e009ac32ddd09e6fcde71d9be27ab922662d4c66a00631f0210d1357443c488b3d85a095602d8d40f6197dc6f002633e937fe7016a2d44145d21dc78725b9abd645160c56b1cf8c8f924a7f59409ab70b8d7d3d2c50f536434c637ea1e11867641351a0218b6e8805c3e0b81944e6313bbaf0ee5b2e8510ae803c0ec5de3c51cf96eb454e1334b19e3e96b824297c823d62ba2ab8f4157584cf0b94c4de4f320b593b6c458af2a9affe99440dfe4519dd6c2d78d920000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000929680c38b0c63db6df8d3a5619023085e249225ff9bbe2753eec71e8b9b0242253d1697ed50debcdf824068dd2881dbdba9cf25f36cfae8ff7c40f71c97b95bb90a4ad338fa1e7f76e86f1ce2d6933aa8954c426677b779e923f8dc9becba9c10f9435f16229ab74c24d723824e1b8624ca5c72bcb3a3e4e89485693a3cd5b85d03c91ab50bc061aca52044ab4b38898fd718fa1065470364b48f4781305d7e670adbfa3d171fa8fb17eb103ef31e0f7c9d2a20f75dfa9166f741b8eee0506a1fa32b1a3aa26d3483278356f45fd260e99c1c337df6c0446aad24550af13c7f3846aaa3f428219a3eee4d3c563d54be375c2020e8e575a138b4ca5088a519f68ee9839cd38de06a4509dea09c06e76fdcbd1d8edd23a83473a29e71ad67e96ffe922554dffca3cf7c07a87a677706dc7650119691baa1c371b6e5f2f60cba21d7a0df72deff27a51f4ddffb2ead72d1e46b077da3aaef41f90e5433104db9979a9c54e8420ab1456f3ff5b14053196124d3c3f7d17d7d08ee7a1ee03f8beba0acfde633a2ebc6a42f63dbbaf379ea4e8936889b871bba1de6cedddeb8375a189bce54b5d8c3d889096e11afc181d55fabaa32bff73bf9acc7fa7e75c27e0d9200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002dec6d3b419480198eaf564c63a6b71fe77a31810cd06eb8022ec3a9cef8b62cd44765d382567306fb52900c54c6e4c67c615b6b25fe7c5c31f93b9f7a8ffc136b48ba3d2644a86ceade25d3abe22dbde25db0d412dace8329d5efb9a35a71c978e445e4a6bd147078ffc59042e88511e43724d67b20c14dd7350aac55224f8d4a2804ff5ce184e1d32fd94f13e9e03bd3a24609ece513217fb01c1fee2637675100a83bfc092baa00812f3a465d97ee572669522a751ffe0021659e3ea1478164813e5fe2a6da4071cae762b52ecd1cec1dfea65efedd7bd110b9b66024234773320637744cfaef26deeb71c84c7c67a176865a7d461f869a37c88af95a0f1743858e37ef1d4674626ffbf3fb68d3a0e16bb12470e0bd1e6d68a747d82bf9351c7099d3abef674273c5ca28ed60836bba7c214caf9c256d660484337f7b17b8350e78fac5d03d910447b54b2f6bc91ebe5ef82b59dc26e25f422395a10eb80ca07085a217f2b04cf9f5b6ca722abe89bb91a259fa90ed5e6f2f1ba4948dee96acb5de12ebbb95e00c11fc76f92877084ede50d9e74c2f5b8ba21f05118abb37fafa00dc91da103e9e7de79d2bee6a5716176c294627d6e2dffaea5ab98f09f000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b119b9b18c772bbc688bccfe980983dd586f1c0fd064d83217ea279b7b26f585bc97a1c078826ec3edfa2ccda0037630477b846b4591e630c6b78ff337dacb6d1bb9ef5a6771ce3bb693d67e862ddee69a2a4fc48f8791d9a421b105c3947aed2b1cbafb784045d30462741e9baf026c49342f55c3bd287eb8afd742aa270894dd83cf94702fe4a59bacf3e780568249d5c44476856372432c7d7b4cf87317d3495fa44c118f6a43b03ec10af37983f93a65c8fef4ef290f31d55bc686c8731fb916d379997ae15117bbb886700ea675277c1fe534b669ec410d9dbd96531e62653bd2a2328d9260129146c8d6d81f93de6b96b326090aa59cb2b39de18f22c4f6ff4ea54fd429860a11ff63d0308dcccafce5041e05e6bd1c46cfce7e413f6f796b382807245de418ce973e315e47b4b2ab23de1d5fe02db18df4e09d973c0c2d523e91cfb962760a2f06358053ef75b5ae04e239fcee85669aae638a46fe904568459fa8511b83445235f5d14b008a455c95a086a7c1b0eb36fb28581ecda3c75c188bf48d553e7d1948dea218957dd3494787e69ffaf1e75da5f8fccfc0dfe40aca154511844759007fdfe5e84829b9d5415aa2861e2b89aa34b26642a39000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087c11d5e390b501334199ee65aba5a0730099d9bab521f384c284445b1b60b81d178a5f514630fb88d826f22a5be125bace0cf982ee0399196aadf0827a7a73f43a137ff930f74854ecc9cdd7400cd6ecb1c32d12f7150dbb48b05d1f4462df7a1937f816273a9bc9ca89d6d1d9425a423edac8f052b462d1bbdf2e6564954d862511ca055607b659734e978597209f98f1f188a91cd66d91a458339386351098c2f8d5bd0187c5b1ab3cebe36196a0e37773dfc674d3e5af6e313ca81f83c896e3ca4aee4ed2e8f3de2292fec4dc86d7bc2f68112b4467c8fbf2ba3915e8ef90721cd852170b5e343f375060d863880ec6f2df74d279fe9f9bd1673664653476b664a4e99b79d7524d8406bebc6c4f40b870e58ca0fec3580c78d84dabba0763b55f96599ea15b1c653f42f2f8c8b8ef86618d1d5089f1e5ee289b5356e512d3a4878e31e725005fde8d1e8ab44d6cc97dfa3a9f0f6abec718767774b04a63c4b02a3ff7934d61d05171f85ed0792708e61df46b37e59d1a1bd593fdcdeb8434656bc7938253c4ed44eb07a6498f674f4ed121673b83caee28fa6905fa8e3a9237f76709db4258f1e162d2833916c2016610e94bbd181de74a049ec5a5651b80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000155f9f305e12d6f51e4d39fefdafae12c20aca66fdd1b047203e6950c1807e33eb8cf28a56c3c1ebbfc5b58a9fbd72b0c427d8e86fb30bcf226551b32a0cf337f5bdb62cb649e6a39ef6ed979d76ead357e948f2f2f6a132320e372863f75a2cfcce5023b3e0e1a318bf9cd7c194692dfe604857c5e9dfca7d3a58b3d202b0752944249253050c28617c13652b7d215a7d4f61fb9251f84ac3bcc84c7db0d0ba8d06f88789a55e1fcda803799faea5da284257efd20f0579a96a93bfebf884cb8235877e9adf61d634be38ed46f4e6d57ec09c26234c4c07140feca407e823f14f93ba4446e990a94d476f81ed72e5fb0aab4c5df8adcd9507790dabd3a80ee222943925e994ba0d289639465ce14208112f3f02f50b4b76dd0f545a29c1888dc78c6a3ea5e6a5763da74a02ad96cdcd43a7f89cd8a5ce5efe6356534caef66a1a5ac6f9b9333f7dffa4b3433ba9b62728dce2243dee43910f6378d3e3c899e7e74c757da15a5e18729aa523ad655ef8849831bd912eb1850f3824490b2303e7fee5aef74cf82c882a95551b592b9969a3a2d6360248b93960bb8cd3480e1b87a24934af181291a79214faea97a9fa7a9ab34d94665c7e3e86acc1cb6fc7742f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002decccd201943203b4c6e4e09ea092796fe0a8dbea920560310d932b18685ef257f932100e132ce867de4a2e5b7d48f4da7556857a1892c1dd1a412ccb73bda5cdec71b76e51d7a55ae8a86f0d59a72394ed7f1bfda1ffbcc986345ab542073b3f16f50d8f11ada8f725612d577996a068467ec6b51ea20c5eafc9906b3553805f3147246ee1263d8303ecf8b19309937d617d78bb9f243e3046083048a6d857016a990de1588e63a9c9c6dedd7d3929014c1b92525859859715e8413ea679b36db13e8c9868760e55104c9a8c0e3ee4444daef3243b5a956c970ced7c53c04fb6d51cdb2a547f057ae58820b80059236f19cd6d443e9c6d3d53f3c54ffc3a7b2ec6dff27a2532d7b4673130144353999b49636947b60e8566dec37e6cdd2cfe4b72dbc50508bda2a7f75d028e086a8941803cfdb2bd6fd114dcb5aa964f2574e9a24657afcdbb10f210a995d8e81fdab691c9525788067af3ba865cb70837b8f7f90332ae1e3f59ae0ebbaf613c8c607c8678191fc171fd81246aaa58f7a03f6a82c95d5f916e92c293ae0062552be1d452885523f3de35a93a38063992ad7b6ad3a4e7fcfbd69035b78e887194fdf063ffacc13ec0e443773696ca5e6c85cc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000809cff283b8a7d5a86e8c6f535bb0f00c8ab7a4d392f03aa2ab7eff85b66357b48022766d4d1d1db09a3394318fd026ab438448721dd046576953b7da53242d0a3f0138377f0f09ef1a1997288487e50ddc446e72172d17420de8c61b4a2d5c9885a116b2252a3767c8e44787c866530b392caa6bc3a2ff45eee90bf83213076481ec0bc4830929c72608c80c92ad880ede371ebd1899e5ad3cad8f63f9a8887095040eded7069fdc9129f79567940808751019ab418120bdbc0ee907df4343c5e3f59dbcf77df825057638db9f9bfe207c35c6d1b135202308ff8b5ddcaabeedebe243fbbceee4655fcef128eef9f8907d2441a877b416752ac2da0054f4fcb477ef6231c71de1552bb54ebe8d20a12dbe02ae4c6ac546cac64fce6f979288cb1b7d618e7f9fa0acd0b8c4e6c56b66df8cc41c433453423f7a08d929cb89186d77d421560e8ac9b0fc66a493382d74baa67e7ca77fdd7da08ce3376254f092036f4269f37b540c1455425af56928064a698818e72407f904b3cfa8c904850ac6efacddc6d1f6a9547bab39a566ad1bbd1d379269ab20307dcc8f35e6f4d43a5675ac5c69338a5e6753f60683da47ceb476613a8eda077f4ecae4b958bbf27c600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d19845c02aab471390527f2ba54b212363a69108e2d6c81bb4ead99d4e08cfa04da6e9d4f7504095d8f5c307cc8e732fbb0ca411522e1a1f22239ff39ae6542c07e369da25a51a361f11f4579d21e0881552a3e6ce07c7699a0e23180c951ec35ec0a663fcbd59f197dff03a8c7cbb08c25981b29bb86dc178f9bdbc09a09a87fe2772385f8d713afae7c69bfa886ff89c8e9a4e839c852323dbfb5686a594aadca0064220e964e4619da523eb017fe739776d185490628f4b1abe27dcb54be63c842b3df6de5cf005b1f7e25eadb16dac1ca00973f3ee51e9351594d9bcdf952ffdf57fde86e2db10ec269a800a55ecc6cfcbbdb0c0c505510b5de6ac69a5bfcb80e9987afc5fc26f8371099e0b73a8b1e1cf899bf1cf9eaf6ad9cf19fef2d07e51543c7434df11e8352b67c4c8356aa27ad533bef20ae2d89b99fc0c4f79d4de512138b2ea966d1b70183388a320330f5ba3d961a91a0bf1f3827310edaaff9659b373b565427a0f8167d4eb46ea725bafd90379d13b81348fa7c0c4214beed116f2705edb636e6e9e6e6fc95b07c8b17882bc3dbb321ebad1aa1874221b921e3c2788d56afde11d25e755511bf9f6a2126e913b93f8257dd90dcdb40d1dd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008fdf2b2bd1f6254127b2af0eeee447a628479a9c79acd6ae0cefd2a5c0547741134f78a1d96d0a9e313c47011ad1f8d37723b18dba1d6420e7a3385e8b7c9112f15518212ec6c8e10cc2fba8218a880a311d781b8c4e5e27ccb7ef36b8d3eddb3ecd4c199934dbf89092763fcce1a9daa886258d0f0ba67b80606b6c9ab1665f7eb3bd5b15b6f223a45f563d54196091143cfe74168963f553861c405a60698239300f0335b71b495a7b2439796a02367fc0abe104b37dc39f6ac31fec39ec6e5683f7e0395da2b7184d1ca4d2e02b6c1f3b07066895cf1982a19fe6274e9c0677d9a2cd1aadbf2c66398d50d367332b2e32fab67116850eaef52f114deff8559315e33217cfa53839a64cf3ac56b733a26ea7d8d87e06d414affc0e50e2be7a1cbef3e7ed7bc776e40ab939dfaef86a2723f40627a1e17d54b82e3968fd692a4d133c2ab2b0ac4de2ee4bd3506a78adbf4f17f27e9e046c3d89ee0b6dedefec658e5f395e7f67ffdac3d05427bbd349f0e30a5a3dc741392efa3b2931fc6afcd99c8ab2f7799cd6a416dd22a955e3ad7c1a7f7f638b6b0afe5ac871093023ae36ce687e54ef3f925ca960318d87118f860f9d6aa5421ba140200f14e7ce09d60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9114a5dfdb6a3d15004a0a24b13100e3752e785a43da2d9208f0becca078725174655f78aef54b3791f087f3c99d41d7827369ca1aa371bb7c746d911ccb6323fd3dce045608150cfb5b13c9bd806c793e7f4d811326ae150e73dbe47741fcfbb1c611f1b9d91137329612ba48afd39700d3887ea784d30d3a52f56ba9e3fc9e076905048d635424a008681289ea59465ee535c4f096a5d884a237db93bba9e26422d8d3e018db49f6298990a3dc225a09c3cdad950eb886176348e599ee45d4458a0e3443fccec68c536dc1ab06751800eea4ce2ab44dd2cda46263b836b5e71cf731c11a4b93ed34e895e6db18c7db4b30f0a0ec914c507de227ad9f33e404cfba9ee893a00abd7fbd03db31b839e9e468fcbc2b750d4f754804580cfffcb8f75a47a4a4e43bb4b937cba31317b62102fabdf620fd048dc5dc146939e7a91081328c5956db2329d97bc01257f0d7c09e2c02bca87ec5e502fd835efbadee89c3698a273beaa9c5142dd079962a2ca44b84b076f64a8b80c74d147907e50d661763ca57c9e0dd0ecb4e1d5d2241c336938d450dfddf182d42dc09a090ef3ecd1d49b33562a782bb102d4ecaefab9a5f41f70f737fcf632493308009a7fff710000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028da4f46099ae331a9595eaa186aa916fa452473dca57d6fe7c8592cf2c8115aff78f239ae23028e6399db7ae39fb4788df12a99c8afd8c116f8fd4661c3266aa9e5ecc46dbd80f19e27009bc99073ef3d75abfe4fabe08c98fd3c0e33d5480dc94cedf17b884bb3776756e4c716e513ad6e361bf797ac9603b9d3dbf40bae95ff3c0ca3556e36b8e01870778abf0360ec0ef0316a622bd1ac0b66cc6f98469f5d1234bb2970da0f51fd7bc84e45ec2f82da46ab57abc3b6af7e608535da0e569229e7a3bf24606403543563697c01b34af9df326e00839950d3f7e67d38deb5209571212066ec093869c727799d3d04b9aadd823f0ea6b644d456d8c38472496a8ce4a2d09c0beff0ca3420db38656ad923f5a241b9008a425206a24e69e543f8af8fa0449d7f7d0652b9c18cc82e1a44a8ce61f6a4f96750dc4707fb7257ff84fe31fa989b15b4d14df312082d401c3ce3ed24a7c4235992f78f489dd185ea3fa2db54dd28869174fbe7ad16ad97032fb1aa5d0f6a52f935fd424c91752a67af53e366213daa014efb1f976ae4738850183c508d9650946ad50f367853690f6f62b2c81885fb376eeca70ecad241a7636ff07fbafde72ecc12fa372f6288100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a62560379f298ad4d765974e17498be4265ca754f3e00bc3c49ea0b4b21861f4405de606ca247af0042b8de258646f7a6bccb7516bc8c8c863b03360ad441557197fc1b6987612b79bdabb07918dba4b2586ac13539282646d36593a413ce294058a136657145fb4a08d6a65b15f90b3de03a2bdc4744a5dd41a6bd1b5648857981d8139d96289d86935ac99cceabe6556da3bca83a6f8070b6f5b0c316e0977e88609e8b759c7ff3144780efd6cc0a2efa2c8fea14bfc172614ceff31e5ad8816a5583382a515947bc9287180c00e20c6237efd3dcf2ad141cbca81f065d61b576ebb89e0282bf073f33ecbfd9dca10e01b1d04bc4e9cc60c8e3188eb57ef921f5ee00310a08175b75e89876904ce4f850220c5c6eb766c5c02ac8cd971fbca9b5311589f5c40ac063014f4386c8c562c4b24c1863dd1cee553a4e6e0fbd38aa2ab9b334a5d5e174790c221cb50fb03ea0d41848eb8af361d8ad0c6fac0bfd1858816b459b305c714a7c6bd0e68dc1836310037aefcc405edfe5081eafea6ed8b24b46a82412cfe112058e2524c71d44f9709f0e3410c77444322a009c4a41f8687220b28953f1793d78e5fa28219198043640ddc145eda7879e18c819900b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a67308cde456201894e8cb571597b2f6865c9a7db4c1b6a56291cc14f96cf178d456ba753dd10da3f268540287ce3ffeb18f5cf63f4b17ac4055339e49265a1333c8240590b75a846f385663c3f71495f383fde5a5401865ab60688ccc513d14d7ecbf9b0d6bcacf3bde463b3e22824342e9e18666a92bd8e105987ef2937790ffee6bc42b2579fb8368b96b263f80bc4e603b54587076b54386e5a5b8521bf67bcde07315eae6495258425d7c31cae192bb31161f70603da6ad691866ee6753fad803f9c38963353e2a52913e3b1a3c540ae729f2d926e8c485e76ff9f674db2798a87edf1d25df9587d7e7a47ef65368f12f660f2c5ce32077f3c858cf07d73f8061d5cadfe72851cd22e61d53e8b1a83eab51cf532bfb7964ae790940e1d3cf15233f8825186847415c039b3cc7b9228e8fbeb0ba28788367c05f4182e706d803d6f7f7d6a7273a28b032b129736088f0801dea446e2207412ba4d52a0605482deb5383f742951a08f4cb7b9ea9713b604bf40276effcf9496d6dd50784d3873683d4c197bb8f131347523fb0d9c113c6f2b59140856949400ac933e9ec2e384634ae25712d05742cc94a2bbe0dacc97374505f34c36c852a36e0104335100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002568ac3a4ac6c8cb267cf0560be7647319542d271fe22ae4763d5a5e7418ac698a564b4cb6e1ab4e2b97ff37898aab2919f376e1b0795823a616209493d1c8ed3a2b7a38036430116ecc05ebbffabd08acb73d53146f12f283e9d820cc9b1da4ffb5e87a506263786d0eb5c782c6217ca0b79a94e6f02802167c7ae53173e6edbf1ff00d47fa0dbb482712d92ddd22b6f323335d6b4f81f1492196f8c1f076b300d5304ead245bebe0b5f649f5d4fe754db6ee7b19fc9311847bddf0b338f2f3b54252fcdd4723c672bd29e332656509b2ff0e2af041930b316b14d4fc5bc960be2ebabee641810cafb21a948b8e3fe5faa86f7ea783db514f7193173cb66092b657700bd1ca2ae51e9b670e9f0ece19cc5b52ba92b9b5ee96d5e3afa4998d76d81f2033483b5ec3bd7309d7e24f7149ff398ca1d800f4fee998675f1325b9b0f6f26984c93df5556aa47a748b69cc9b14ef62aa72dabc8fbb93933671d722a2bd6839a10c0bf9363d122439b3af5c931cd0dc68e499c78a68af314aec3ab528c4ba4a83b13f1410c41c2999dca5049eaa6e630984b58161b5a869eba76a0f6b04da12017a5f750a105a6fbbf04fccf170f4d3101cb5baf588b97cf7f5fc7d1600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a72fd8a8c394b82548b17fecfd3b3cf053d970259d0639ee259f5531d86c24f7519d186ecff2d446dcbc2c526a7dd9015682997fc93f1007cd6589400efb205f5ca065e316e406bb4c6da0eaaac7b7b53d44985ae369c61a22450135d44b074970ab81cadfa8deb956abe992b750c19ac355cc7f32b88987ed84fb90027e57e5ee1cae78d744771fd3461585a4968db9ebab25770222492fb7ec204b1e107ca99f444e860629a77e711d7da14ab27a3371160d02fe3122bd3ee1a0c67703028df54ec446eaec304da49cd274d027068b05ca2725263c6894fb7515c3ea8aa524424888f7d97ce46b0d360ff22d6530a1c8856ea4df29a494fe8b769e49474af26f84b19c7bbcd2dac8eafd3f259fd263ab83714fcabcdf802b7c06d13a3caacb1d0a16b24ae4afffedd1a228de6b1482eccb944639f44b3beaf393659118bae6b8642bf1234888a71791b0fda7b6a70ec6221fdbfd15127218804687992787688499d8d81b6555ea74369b0d8d5d8c1797b7f484648e800e3d499d135cf062a41d5a6f0fc9f264c9d26bbdc235bc5f4f71d552b168ea9cc120d6e8dc27beffb188c3dfd2cada5cf9131b1bc62afd7e2eb27d09b253c7a8635f4e6339d8ee513000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015c9039824a7e13baeef8f0438ede20215b1cd2b97c89edae1f047711f0eb668fc28c8a66ea415e783ace3b97be554e11227b9b814ede630ec72852f22072d52c8c90c0478bc5d3952af2e15ec143a13d1861f19f6e8264f91908252fe9e5fd09ac4b3fdd147b6e0542b08c22b52a8954fdc25c7a45c29e6a1f8b5f21c35db2b6e05bfeeee939672d01a93a951c626f44775b62b2b762d05317ab59f63de23037f0c741eea9d8797e2d6f7eb95a2981d79436430983ff4ceba3829f4b436a4143e4fd865b4fd5c982046afccd79be94fc5876f8ddf777a1bd4805228613f67611f76546ba1d12fe2b9ea53db4970691f60cd6af49357b0e4366812cd02c28a3fec98ba4029ec10575f9441d620615d387f7e8511e20df1fe539ee3c0cbe7a5cd206b3d8cf8efeb1cd4eb979c673ca3feafc479a8d46322e74d9dde1c66f853f4954476571be72771b4c83b0ced448f4f35885a80dc3e6298d30bda3d93f45fba27c89e0b134b779ac2e18ffc105f024aea3aecf703278b51c234ae5dc3d2a2c2ca388dc2b7a376bf93e14c528be7668dcdb366291bfab558c5adc7fc03fd079637d186c437efedf5b481b61a1b29b44cb7682b6a539036283fbc1ec982481cbe00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ccae6decda317f3ba7bf990ac7c6325f39141b8be27425f0a3f36aff3b2bcc089898e43904f7fff16fb9d02220f535509365b4416d9b3184defb9a81f46918608b925c96b7af997b722746fe6a60817fef52b91c509d5b5e5397d947e2571ab18a95029f2b6573d7f4c9ee802297e987241115869bf8b354db2884c83290548c2ed42a41ea0967d5ac19080c5bcf07a8f6aa96712134ca168a48a256ce5262d2c3989327034f7eb734c3be7e7e59867e57280773bcf0c668f60f44dab9bb67a40dea3929dbb68f3f1fc01a8e965f5f578aedaaabc6390c6ad223dcd40512e375ece3beca591a1ca53991a847ad6fb74c4eb5ea3a680f349a5c53083460c77d8e57a1ea5fac87181bfba82dbacf64bd88aebc8f76b1bdef70b65d64b53002fb77cb2a9c33d19e0b6495a236cded10d73a1d35d35a572c5c0ca3c0156ae509e3298ccba827dc1483516da66792222e86c5607458340d6bc3dfb4cd6d5e1241c85e6fd5c1f876e976b11afb598f21049704685e923f121bc8ca973be36beb4710bfd7f9bd9b3358df669f4d306b4d134b55a0e13db48a864c838678ab543b5514a772bba218b67130aa59fd7cff6f127ac44dbdc6ff5d1875ded1ecb8c8e6f3dbe000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092610ca72628b9e9fecccbd8af70775cfea3ba0954d8dff0dfb4ae324fb957892fbc0ab568d8ea18d905a8a7a094050b1014b226fd7ce45904634a34ef247dcccbf8f813d87e7c7ed9ac621cadcc92afdf3113c0df07e15001fa49b573ba049a49a20ba49fc23e6c24dcd16d2b41a97a053240de9c3c0c10c9410dc2a1396b5546ecf3e360499a273a4737691f81f5e9647983576a40190d467839173e2c6d2b0f87df680e6f9b47f7fdc257fb4ba4045f7d40dcb4038f0ea623e4bea6d60773acdfea9749301ae84628a075381ab5a683bfecd9292c45b18d84387b782f84623bfe85e4e863316d24c3064d842c21220a48f14c7f50782f66b233bcb9c2fff77000b71d84a33692c9fd6a2522fa8147bbf57b07adaedd591bb5d944c379d1bf4c5dbfed7fdc8352ddcfda9d679964dc07ba5492675710ff4a1745587cde6c11e40933cd166711635e9f399a7d9b7d772c99e61917ac10475ba9e64590999d9152f2742234693e9359910861d04381a2fc0d945f19c837d0388c4ff9fe489bc1bd9cb4f7c4b3008341eff7d06f2c1dd274af41299f3ebdf11fbdf543ddd9396b7896f07f8c9bfbd66f395d2cf12ce25c395d14d1f472ffba93c2855cdd3fa5570000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105491f8ddfa34af425608b4fee05f46213c9e806083f85650e08945248741c4733e52242e0e66acbd5023d7be9e9fa24f8c3224339ae147e5c929f3ce83827d0f6c2d41968bb2d8370ef6312b49a31e5a25cf486e67de33ede504eec550de11bbf0973d101876456bf68b7dcddc827e9eecacf7829e08b128e9cd44ecca385b20e7b7bc6e578dcaaa939df0fafe9366e67dba9815edf5bd7d6d5bcf228c443bd56af0e8c20f9c53b48d6caa7697dd0fba0f4c45af8424442399c27b39fc670d002a6082be0bb2f2366eb4aa1fa1e31bd02cefc2ca85d3dc360ea18d657d46cb1795e829f3bbef731d8cba7ed9267f0bd779a82760a97e35004ff6c7d7fa17adc2f31e2f56f881f89762d88065bb99ed753c3bd248177bf768fc882d08ed878cad1f2a44306b72904c2a00cf12b809465bd3b7ca87fa5691b7ec171ba92606e877adc1019673235607dd920839ff045883799cc493e95918b31b486c04c613cc0533c5490102b0db2db7a443da18521b30ad816eb8f0ff2fc7073c8536f55fd0a3412cbe94c4a7730f0c04b08e70c693178ddd610e1ddc176401fea6f35e6572bd0f8f3c8bb1ad9fc6f767423a4e6a208b8ae979509bfb8be82b2ffce01db2b1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009792c8f6127c7079e0c542bbd385e83b115dcb81d0e2a0ca7db4712fbd97f7fab6036b8bd38f1f329b6fd178a67eec07318ae665bbaef2dff8fe72d36888d680c79bb677f4e9da7cab424cd0d37edc3f06637bd5319997ee8cb5a1c5f5c4585073d34ee0f8a39bfb8ae03fa2fc1e03542e14652f471b94c8f97fa1f8e22e19e8d60570dfe93a7bf1b697a4a44ac6d07b6c55fc199c4e11c68cce011cde9e90dd7928a1d3e835b9c94866dd4ffc982f841237905a4a7f080add2996b7add050b5de5cf8b95b795fa8fede409df2780cb2360f731957c122d5aa507d2509b3182aaf238cf20f8d4e6a40cd066dce9525d26ea2de941c11889e05fc6b43f96d46c99358cfff7a16e2dcd4001017065e21e4cbebcab884d9b084a0599bca6cb46a1a66c97432b0950adcdf3d48365db904dc936206c11dd884b9d1e99ce076f96ae53e47f186df82253a6d6c72500c32949257c68c21d2d2c904dee3ed1979ebbed385d5b05f169228541e0f60e169c2aa44f380b790d297e6e949239098cf281592d92473e229f360328282b9a343d8a02291fc4cd01decd28852f8ab0ac71f7edebafee93da7e325faf98fcffc5bf5f8cb60150bada860dd710115130a75f055600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003012f65b8a7f481d5433c222766cb9572bf8a6a22e92b34bf912611e86c8cd25196d641e512562e8d0c089002deacaab75f0213b771dcc06289832d92465d16f63df96b5577138187450d37d3203317aec7cb608b4f6a0a2af66cee69efcb83b6b6843420f681ebc8343c32a75463148f2554d1060cb5e7712332dbee7e63191f91a1f5658c9193d7152658de26d0c5d6a5949ff8613aa7a59f17a464de19db913720187d443b261c80a8d8abc955548e68693d5eb64a99f65dafe167b6956844788a16a3d36fe80c395b1c8b46b0f6e8cea729d2a83ecace6b8a66561e1439c07eb0dbd56c77771cf08e7074bca152c4a4a7677b2d9e283ac61a9df45ee6a463a5504924f59a5ac016cacbf35c5be50f589046e6a218b612a58f2b4500d38bbd8aa4f439826b82c9d61cfa962a8daa68ccb3063539557ac43af760ab09c6f75993cd6767d38bd3c157c9de5bc8e38a494ad998ac00c2394e898059a3b87f3814234978daf7ec5833acdc424a62119cf902d8c2eb85ad83b05ba034103c9ffbd122a0f27d2cb51ed67cf9af0e6a9c97e3e01e2b6806514ae70dde809e0cbb7c4986522c40fe0dd4260750a782bc415a8b8659c56ed82e0aaef89c609392a20fd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000575e659698364ff742e2a4c44d389c1a432b0e977e55057d0eb5afb349887153bc9b8a2d6cf6709bf7420378be3b8e4874c1ecb09c2ff8d9eead8d0c32537a97427a1365847b4507a1dfbe631245dbe66c880985c32f8b8bfdd0405811c3cd0a80ae05c7597ad34533e3a1017c905092c1f04263081f5b31327c2550dbb2690295b8eeb456b5505d997246e39af584889c34251f64e61c56ce8d7e34754b1f8e56e4ccc26806cce39e04962bd83cd5406ec67dd5a8e34b7df43c31cc58aa8dc13558b56652f2ac0e9730296cddb6c54e37e74a72a905bda37af336db12c1993cbfd6c64fc35a9b4da17c2eff4228b0eeba72e63c0381ec43550e55aa05df79b6a0649ae906f477b50352e918a4e6fe8091297bc6b9150ec23ff1d0166042b270ce96f79764f253b17584f1ee9218a12f38737b2d31a47336bfbbd7bef237d710c4f50dfe1b21184ac64050f3ed6bdfb076df7f8cb172ce7640768aafcf6b33ff5dfb94703f6a207250f33a3212763142dc93ec1bd7f11eb6587e2b781d69ce3aee8b1973fb314cafd88cc8d3c50dd41d98773e24fef374174296de6492fd113aafcfa7f447686aed7cb38b1b979a3fd1446d03723877edb0e249e98209542630000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6e1a375af761f97b59433f40ddd979794cf6c80f399b6646a5254f779a776fc44da3d94b86c80c79be8b4ae90bb84d486a8217f7a103332b3e8b36ab2f38438fb74d276dc9a60ffe4871ee2ae5b86d217832768d2b46ebe8c4aa599cfb08ca6e8223381f08f19a0e4d6799f7a0916247028e94ece7791eb9c71eab470f5d711807db8448ca58a9cbf24d24adb18b83b934bffdf788b2b043601895d5e4b165a3991169dfd14fe8bd92b79ec9e0eb0de55ec02c2de278fa52163a60a09f08877a074799e87eccc94a00e184d4ded4836eb2af139a26ccf400daeb8c8cb4f5d26b0d48054dc5c462260b4396e6dc003342bbb94aa6f9ed05f75f968ccd9e74c36030b18b29fb1d841d8691bd1e277c2595e1a2faa96122cd90b77a236795b05bb230666a41a6b060e0b1d41f0ad01aaef16021259361f678bd8baacb003e5f89232a5f179906189d13dcbd0953f1e1d64c0358b8a8702b858ecf51119e50546f3b2f6688272671e462ac34613e9b59c5549b22ffab80a4f66fe99b963d5db4d1b3b7dc53540f4c88292b766c0ac2ef6a516986bf1c6ef6bf3459859341a5b79cc4ee7c48d62817ae89cf38a344f933d4099eecae3b5e1f84ade8b6bcb3b4cb020000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012f28ee368fab03c57bc2153b8612e87cfb17fd897863912b7dfdd7ad22cde433e03f48c225e442a9dfc0ec35f9b0e615ef5ca176210bb7265be05277f6b75bff2828f67bf7d9127d8add96b9c62820f7119d9af84432b6810b641e5bd3c9c3153664e644bf5d64d1e6c007f6029cb03fa82fa19a03e58c79871c88209767205c1edaa699c21006af652eee479c2addf1a8afe52d89703645fc94007fd94d0c301822f246a7e42bca56c11fbea8a12334c6c76d756e77f3bcec2dbc6b7b8dad6143faefda9dd024f0e3782e01ad298067be0ac6cc63ab8b70855786fda2c22f2b95cdb08d85a945e15b57a615cc221a72b7653311e83961dea335a7ce6b6ac82b2575b513a42e1f4a96897674a2f0656100bc81aff5318c77783e143f11c6e0e7d4d50b41abb15d66d6e6be939fb2b6ba5033ce419ca68e8a9b39ace87fa7cbe46237403d1a8429a7a9825ff06300d98f666c77664eb6f7b5a261af3c6005acb8e74ee32245668ed66c272b3572832e6a2a9afa215b502e975d1687ae4cfc3fc1700446eae169b2ede2d92371f82500c81cbf77be1a2773df8f77caad5b3487805f3f37c9bdc0dc9ae364a766c76bfef236bac0106668ed6adf3c3d69530d860000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090b093ba62bcbb4c243bb87c4cbfba61c63b817982b264c77ebbbaa36b67752373d94baabbdf364abdef1304560c8f834241860a7768b7041d987c4f63175ff92c408141ed659d0489bef74d13c9372ed1ed6b627d388567a67fd3e2065a1eea4f266326abe28ca8ad21489ddbe3da932863285eb977059df232769755cbd4eee59b5b81a4666e9de9bcf876287fc2ba78d13e9f906de27b2de5cbf2a6b07c9dc72504c78436b4b4702fb3acc39acd60be10d44f734285e8e11febeb900a7320df52b28cf9481a7f0744a75970834b2a5706a6e71f93bca0b160f772d31730b283332237c1a16c1f531ce765d4d3e3b8e4199af1ba395b22279f080bff5091c1dd152317a4e62704e8d253554f916ed2ceedab6f0ff106037ad02a1a41f4e77299434c7c0b48fd8ebf102b73e529bb69f973ffda0e68eb38c1a52e4a2ac0a787d5ef334ea240dd4805ba2d26f2b873d0e0b28ba7fe89a59e771f036e54e2fd09921464a693fbf624daa37c4e3e2b6de87b0a8e8b1fbf0df8be4e75fd32d6d927204def85b904aaf5a903626b9652bc160f52945ca7ac61b5c9d46e0a75fa0620f973ee41cc0fd5f25ee535dfc6eb9157a9b32a9ceb2b745ea67c1f2a0e7869e2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083760b69d2a3f6d8511a34115552be6dea042cfb22d5859ef507f1371a36507505013307ca9aebfe161709792756b9a6feea508fcf7430d105432dd7b3692d8b9eda7b8e3d13fed3023d1232db2878fd8d79fb507d86ec24ee4db577e00461f97a2442de32983dfd8ab589ec734b73d16c58ab1a7a8543d3731e9ca5ce85ba0717373bfb8403e5eedd94646e68771c0893b88ea521b184d470833f9a0db2f0908ebce08b32ec2e72e7d351541a6b4fb68491840bcbfdea8d36763752e30f33457e6ca47f8afc53038d30eeef426f645f8e04320285acfb2e2cd61888d1958dca1452db6bf03c07e5fe3a5ee3eb6e44e2a3e4d7e442e71775440fd8f500d886bcc6a05cf7af5d77bcc664d99f34e5af26f04fd2ee249add904f3c7542fc46168c96a74d34e14dd89bf66120e49b73dc1c1051f7d43662fbd0ec14441a4259464915ecd91b997d28502e4371d3c70eaa86334dab6b70bcb9c8ec9a5810ba1529c174064734caaa3fcb9b950bdda2c4999da547096e2e2214620d7fc110a6143143301a51dfd3f89105835366e4df1570d0166941a08af8a7588cc7b7133f41e30d251b2b9573bb88184a161a7c5bb544f9cee28ad25d2418f98c7c6f2d1e2809210000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af97e697c5834b4510b1f9873e76b452ed9180e3ce4eb353d38905d58c1ca8d1b38354abd68c81158f3b7ef1143026b34acf1cab705f20ab7c7c96730f6b7224c9cb317f5686b55dc96de60e5b454c647e50594876ba8f32e773bf255a58bec61c070ca46900c694cfbc42236c406c0dd973b42c8b8886522f75877646dc02d378de7b399ea31a7fe8cf55548c24fed13d98c9f5f0c44352d584a07bcfbea79610694aeb52d89856eacb391c1e4e1712435b955396a46b8f5bfa29b55c325186711f6d8f34c02d93e01bd7d5a7c9173e5f3936a423fc946a0c433d7282863a7e2aa799e731c79617272b873c13b75553ecf4cf86bff36c4f61f63d83ff1352baeef1c1786d7d768913a4ac206f18c934c9d52b73c707aa22c36b8668fa97201f2df432eeed83b96dcdc9fccb0d3a85d763ca0057998d658caa5d8f99324abdd27183b08297c4db7bd52f884310a735c9faad7e1a9879148c084e4b7d0154b434371bb8b362321d65c03f3e130c138c8aa92260da930c61f43d576be4b5b4e772bb399acef1a1d8748c8cc2de79020226a7c068d3bde54d5c6f12125dd7ea1238acfe3573afb15da147cb9e3bf7902f40b70d463ba516d11a24e64874f73035420000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a93af3ff2f178fc1683e1604d38b28a5feffa8732be54444891a353d99d3935131e0746ed687ecd66cb5c92c1caf41d1358620e5f59abdcce68b4c0b15ff3e59dc5703dec696a99b0ea6e7399aca8ee1916b82af22b36f5957780c04943041216a12d5f4a28484d34abf003c1588b399090e1fa6655ec3c8cfbfb00f55aa25a2be3e0bd2789965be26b22de8f10c9c497fa60013cf6e5c8c486f121adacbf4ed23a6e588ac25af218e289c5a1cbf3c403fa542af4e2791daa3a44bb899641d425f9c4512f3dfaac79ff46134b4205e8dbf9c0f25c338311f3b739b696dde02c2eac29c98f428cd356eec454df37acbb592b59759262a2298d58ce9a67edf83085dc71f5d7d7573c862db265d3591c8ee36c14bdb05c4359dd091f1c0812f063c55099c5b8a2a34c49dd10506fb33c8c395172624a1d9c23cf4ed4636aef7e9d13e11101c03c4fcd14d70fa0d9608989a5b85dc441c90ba1d4190fef89e73d21f0896b116800bc8798a670a5560824e87b16b9da18a199a963ad913a4c5326955fe20dbe6c63dc502d4248760a9a87b63de8445e1db18758404e550be9e3103297911160ccb78ffd3ce42ea9e29f68a6f5b888566cac4850b546f12068cb1c1dd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000248b28ba0fd59c831c3422d2c43caefdd89c53ef78593bc7837e38adda876ddc79a0a230b1513b2cf7ccd7440ac4eb837f508de6493fc2a8e259b1fa1dede4f8258f356a5fdb52a94a3497900bd8fc6cd2dd6dfa1d4aa83ea9fcc2f88506ad682b06779a256d91188bac9a793c81393bd52e1c57678e9757a5f6e215bd933cda53782882d425f97934a9110c8f0ce0cde76565fc884517602aa1f00d3a31233e71b8e988d1a430918d012aeee667007e77e9eca5cc94c3ceb214d353fd678bd5920a002691c517dbaba10df68dd495ca27e6be10631fe2a70d30f9a6ce1e778a15481795361ba20ebcb2af12d13171d5e45019f5c9bd873169a01140c95fa3f0ac95f66e5834af779cdbf5fe41a422b62d628e3a7562340252ddcdd6a659f5427039196483adc9f0cd19c0db81085922dd793552763415ed7ba5cf5a39e68b0bb467fb48ac76ac48659316f1d91af53b9fd1cc2502721450bfecf58c543e5a61e39978c1494211fac12159896003726b8c3c53c83ad9559c94421a39cb17bd0851276aec98a4b47f02be6ce2179e327589dc73cdccb64681d8100a2500f9335ab919f48092c2b7eebab3af947f0f30987fa722a7ed4a7e21e1aaf521eb60e77a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002eb0756544b970ff5a8a8ecb4c440da33c039ffe6d5d6f93126074f53e6abb377732c2988745b02e8a342dcc5c6c2537ec24755e37b19cf0669b1306d7f16e226ea4391deee44ca81d145e29edf5b17c0ba9e07a7b5c14cc08e4911c90f746f3d208c084da5c0348e6da8862bdea641c74fe6714cafcd3ba0d15baa171bf072fc2e040720a2480ccc8b9b536e87348b765a05286f3dbd2e2cf2b7bb25cc8732f331352608a77fd5d6c9d4f4102235590afd0b1552cca497b29681719eac3017b215c5fc874948666438e05b8954c592b3608081a30266d696a99a2c2d980b53ebb1b17a645ccd8b27af8172db91a6b57dae3eef70bd5e39a5453ae966aef9f26522b43f18671a0d377311eb0b7d69812a2d744f48cc824265a4f1f19fa4d0c3f4d22bcd2a89a1c3d55a7a6c0b8f8b00dd4685862fcc3920790fd3d781b0b34731852ea536693d24024ce82e3dd20dc15f42e41f6ce2133aa94f421a14935f653a79c446c320a14c194289a6697d3b168c861afeb90543f8a3302769c37903ae575d9b7f748208d6804433bfc76417026833996cfa8f0993ac483076af5e37b049b1a55117e9b826862a43f33ee22243bb467cb69f45452739402a1ed6783808b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ecd6481226aac0212adb87a5537a187b600ef1a15c03d6fd8b2c645199b2bc647fadd25d2e612610aac57c5d781a3b8f2625e451cbd6a22f4f9d10e5538b8df42bef0306c909e755dfbe1a65137e5b4f6b6e0d9a1df9f08f76f2e3337b6e0d9853ff7099f6825d0aa9b7f07f7c3f3de43cc204bcabcc8ae4a938478e8602e863045951027ac01dc3e999cece9226bbe9055615a49aebc735a2befe71114ef2254de5b81149cc6e351c38df429d14dc7f1efde75541da54faeebd83611f4e30164981e5ab3d7152631badfb4a5d57fdf757218de5191f51a22b5ed947c4945cb9b235534d4ab652e80f9f3cd0bdfaf7d910846bb08b26c4015a6e723ffb6f157ce8b1772f3afb6700cf76158698d7b93a05f4cb7b40fbfd2847e826b00aab668bd0564d5aba15dbd7ca1b5895a11e6de7735ac2ea5d0d15f169bba7bdd1975b0a07d35aa293d3bcdc5ac61a8fcbd1d62216aed6f7df6e5f0d12150555a2e5eba5e0fa2d9217260c303ea46259c67395fb8e955f1a3abfd3a5c9b5712345d8851b5bb345e35e88ecc4ef8d7a77520d24460a16a590bbd235e357571255f28fbeabc367ef53e3cb26819dddf5c66ad554c03b59951210fd59f0b98b89d59a9d12f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001233145b53399ba985972b5c9fcb74abcef069f1923f48d13937f9375e1b4ae3fbb7337ca8d14fccbefa5f64762c4112084b05acdd28814e1dfc5641060d8e246d6ab838cbc2306b74cad65fde89ea8b9e117797110bddfec517e6c2ddf58083b795f4d8486515059bece89a3499db8caf9d3bcbecb2b1ccd7414df811125c772fe6e3b58d99461c0ecbb57fad23b2170d867c40355635d719a96a9a0f0c90bf75ef527fe3a8a7a92636874d4a8290778ac771c836ba5c48ad85a0c4ddd4e89449a2615950794794e73ba615e5df6a162b446bcb80ffb759b4da57d02ff5e61d83020e9335d9497ef658e69b9f4a2bac4f50475ec21715d2c8ddd80c3bbcfcc391bd965ddcdc5cf1ce45481e724b18a470c0fce8af6cbfab9f54aae63361bb638f7ed184814075017a4f4a17fefc5cf8ed3c94ce4887a60ee2ae91ac467baea7ee85f311d2e7fcbd64cb4386d30dc6826da8c76b7bcd6451c6492fdf8ceb237a09fbc8edbf90c9700f879419a815ae3f41bb3cea58ce607706302887e1255625bd8a8a77bdad8cfbbdb58205fd6d5d9ab791b84902c69cf07ba29201fa3018db9518b09914e283131afba8a78a916ef79174571e0b42568bb2468d0c0e265783000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d44fdc8caf411eb80be330af81db371bc3f9bc9b73fa54b737645adb05e6fe31c4c039c504848e33c47d9ed9435f7c3a28f02a374060312d8321c2ea5ed569869dc3320c6695984691f08195482f1b6d1afa72b22f7999067dee701f2434bdbb50b751790cf21a0ab847de62a65db96eff2b8e0b615b6773c4fea012ede6d99cc0a33460d5bd5e9c06241a3f2676bd76da15354cf33755586af95a5e544b898fb4fcbbecded6d9c24cfb657bb64ec9b4114a001b8a96ad07e8ee6b938b3b513f7adaa8bbaedb806ff7fd41046fd7dc7520a3f23c07099466f1cd0824d0ce3a3d9fc94d611e6a930d37f177e48de572d468db3cec612911e52770c61844077b7dad4f89483af3f3bc22dc934efa17dfa95c30a70a5c8dd18763f8241702f2f5c6b776aa1a1e59fef14debb711254ecfe0eacf36fc17943edccea1c86350ee311bf7f1330471e3bba695e21b8388f16b5667aba6bfabc814125b9419d0909fe4a19500d28a466c54b938acd2f516e7e22c1b52d8d9891fae91f6b5755b2cd842dc72574311a22071aa9de76bad84a7f7ab5d04d375c431668330e4025dee95fc2bb5dae7506e7811d0a00c8fc189c3b2dc13d797f2f28ea7a5bdfccb67a68cf4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006173716917be418623113ffe182548d4056d43671ca2ece1fc116e0a1228790f1e11f1bab193337d8e46d3f0860cce75236229e65e431c6a77bc34b79d35ce050c12c1d122edf631b78cc838c8cedd55aafe5f42a767e3ac1bf292621dae0efc870d46b702534cffad835f44f64e865d10e952c151d2c60912cc97f083b2f6c46e3be3b5564f657fd69564018c680a2133b5217f851a86af0d10e68d4867c3c2beac41399bc29a74f75f1a8b025cb04d063b8e061b0d6b60303a575331a84fa031a4a7dd72f1eaa4e00465f0906de99d4c725b161754554660c2d130d3b765b969384dc11b0a336379fb3ed330e1948565b5590125d2f1d537290233854561e2b15ee9d1742622ef18c60234001b4de75d225304a330b32da343504a43d433ec8e4ffed0d736f05561861a90ab79156f678d555b55e5f323ef019e30f5a9375f9c4fb43263d50d6b754a996301ec20a2f6036dd6d82bfd86092a6dc4f0414e12991bedbe04613b0f673071ef230ba8b9dd9ffc7d22913575402ed5f431b804ee7bb2014a9e9d437e6a09e02a073fa8772255243b9628a33e64dfb5bdad7e7b63943e3a313b048bde5c02d9d88e25e80f9c7e17a28000b616af68b64fa964f11000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021f4b951cab0ff9c0729c231fea9b3b2c27c76278796e40640f1233ad7da8d482dfce2200fe7f612c4b935c09ef147c2fb87dc11bdcc6026a45048bd95d6019dc1760caa9d06c4de87d0b65ffb4fc9527335b8e7b6c0de57a4eb959fc494c5575212b38bf12870b906fcd36b016ac186d8a548b9111cd39e01313b48cf1aa7a78a2935b257b9e187ed19e5aad4e0ff5bce8ef1363a5e298efd03f24f20ab8a7c71e4e7c7e639b657d15bd321cb9bae61552da41a3705299b7251193858c8e07ccfe42ffb18a0565369a9817da741be8540dd148931a3620f5b0e1224839f27f7ad3d70d2cac016c8c4c6cd7a3993ba52a25e1e52a9b12b2dbcdd14c49de3efadcea6b4d119e02cee3b08b3eccb1c299fcf10d23707f0173010e4f17840c3cf5e0ed4441561285d9597dd7f979e7d8bf18a7f6be47a7c8a50a07837d2cfe6967c0928a7a395ec4da80b164e614e19dfe27d25fa9527763ad5ef70f58ce6d20c6e32a85411ea411165c0826eeaa1146fb7668ecd68988a2ec41d9ec1d5c6e1e94ea66be7e4b39d88af54e1331f5913662c6bf093c9d32aeab7018ea0c2c9da0cd7df5ba7ead2535f58c3caea33de7bb2a1f8a2a0610db119eb30d37dc749bfc5c20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000929daec2fb7e6a30ceac9c6060cf305fd15cb48e153b90d71b57bef3aa55c1f7e4767b80c145487517384404986a28186c30cca8e1ce7e1ea78000a143573b57a4c2ba58405b202611ff8e1329011cb4a35c354b3f821835f56644419d6eb99953f2a8f43b59300fd6166f89925d615851702be12e05de21011345b7dd3c7fda4fa1f9f7f40fd9180c5ae7e2a53f9e2f5343e9e560f80821206bb53ab97f848dfe5cdcb240e387d089a0edd18dc2dba53d6e866c8cf7ad6747b3369a9e2342661dbb172176f122804c3f49bc6d6f8b79c9c6e7e1ced8fc7560b9eee24cebdd50f542751dcc169c4c3a478a0ffe05c9e2b02a701315647ead1716396a0960f82b72ba72f6b6e298f704267afcba178226ef12a5e618a9719274c678b1e9843e3c581d4046dfa5fb30ff08c1c66724badeb1370e670edb0f03daee189b7f66f098b2e2c3ca9833f779ba331ef089da3398ec43287f37df775ac388853ab888dc672210f2e4c65586768e442e098c47d5db13fc7f87796ed7f425efae1b8a45dd6ea8d0a80a34b5f841d24bfe1ecf494e282b01ef2a17cca8feaff50ee57d719493ca3dc389cc37efa5cf67311db559c462836ee13cfd2daa55aa5cd3c1cadd2d8f00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484006af8a3cea2b87decfdae118ad40c829f6ebb9e97c24ba0d12662afb2f9c3d3c187572cd947e9c70f121a59d275beaa7a892da5523738822554fb28ea042c63309527c9af6b2beb995a023586a4e17b628585e589651832b65e13f783bafef97032819f61d51028a3b49a5284f24fa2aeb1245bf544529cc8691634b33e37f4d1074b13e5bec1352eced48876080b45c7aed8f934218fb1de0b09900d5c870d92f08d6e510b366455806fb1145743f689446478abb5011795c76393e556d6dd32e3cc4362aa644da1cd9709f48f70379ebf680baabffdfeaec379831dc0041842e3a12868646f88ce32a5f5ca6148c6b61ed02c5780ff034f0d4e48a7f96b07e19a1455db698d5a747011aade46b6578fc05fb87aaf90a8e32d796b6898d792315b2e1b40e383a6960d5ebcfe501179680bd10067896db3636313dce71f753aa284c8af5b42f25bbd8fec788e17465d3b7d0e0ec5b876671fe7eeed94e902c790c4dd53bdb84c94917ab41a4c0b955c3573b41390c5242ad9c2c79b3ead4622c0722b2f5845d275540011b102ce39d67bff41f08a7fbb8d1440a6a465dae62111d092f14961ae82f5853a7813ecc2d186a6a6dd96ab26a191617263b74c5622c119ed7910ca94021cb6866ff1282d44434c7bca48219acaa087cfc74eb99667f2d37268c0c9bfbc3027e347e46eb4eb3182621be6b31bfc7e40c4500385df03702979dc13786cb39a728aaa4a3a1e522a29aadaf8ca1c866b054656aec853e81289f1678861a7c2eb4a7329a8d6dd13e9ece6e2fb0d05f42b73467c5e1d73bad0dde709df7e654b693ba2bef6683ebde593e04fcc90ec8131176c00d7588e6ca2f488f98ac087501432c8154089ee62a137df70a48a899714647cdd2ed30addc0c7755996a6ed19da4c12ada359568f3237cf15af6892f9ec85265f7bc1aa641029969c1075e588b04b3c3acb68bc269003a6a656b5d455e2bdda437aec6c8cb2c849672bedba1dd10b18ce0578478b6979f1c5918efcd2e45e0adc628553a9e2bcece7ba838660d301e77e42c4c5a3470370b22cbfc9f40a5b4c328793f7c041c17b32d937ad49b1a13da4bcbfbade2f0f1b639ebdff7b4547416f0532a9aeb09e47b2d46c6472381bd659a0d2f99327c1d4c38670e87cd0da33a8dc87e0a55083f930c071780c5db0c1fc77beb06df9e9ed00466b5d3b342f2ca54e1a502731c667644b59d2e6411d805a631cf351aa84670d830c29ef223c8dda3436c3b972465171e41292769312a2dff7b5852412c84bfec1c3c28c1231beec83695e6151a875023c6fdb7125f3e3d2410480fef29dd870754ca4b58639214c54be492332b0e277a1fc428961038a2bfcebee3d13f295fb99a829ec7d93125249d329913219e3a1d722220c20ddf1dcf0133664d9facb0f8a787477905808613109771060c95330bddced72d66451d9756f95ed18f7e340092e1782a39e79b3e60c475070570c1f798385dfdfe6f2dd9ba96b1c9c24f68257732494e1791d458cf091bb90e084f66c742359c71a2218a967235f2e532727e511dfe4689b9497981ac89b5290fd00521059c67b6f3b170e0e7ddf5f43861f9f016bc1622ffe8e6643459592905c88b8ae90c374aa44e043d6bd8370f5b955c11512cd1374fbafa101de6f02ec9a5e6ec3282506cbbb85aa38b5792987d5ceae32576caaeff18d94fa441132d95fa6bea95cde6b045750c9b50e9e179814958df8e76b263f6b8f5a3a58df818944c30e793b1bbe8c8773a529dcafa4c1c5c0a1f3d782fea31a81f1051adf62990f0f0c8a89bd529f436ff41e795f6f8937b015bb09177811836e7dee14c692e394a92371df335feeab7ef1570249e27b1005f175e89695bd9dba7057b8b6000cb442f39236a12409bd78fe7dfd7cb61ae69d08289cb21a9052a9dc5f0aff7290bc04e343eff9e4be13577d8f1494464baf3a5e72293972ad1e3f5cae2fcd303f2f3904e6c797a88056b2e76277d4e7cb57a8f8aa193feb906c1e98f8e147d203921670556fc3b8d0f3bdf7fccdb3abfb938be4be6bb46e6d8bdbaa01e202b1a50588076ef6ae02b2c335e6bece86de030d22f6430fe160e5cc1957051d8a4077744cedba5501300d05b64b33b866f287d08b23f8fbdb1c43878463dfdf0b321894d2ad66d84fab094551dc74bf76561552a74d8c063ad5afc74f0824824ac1b86b0fc1138682fdd59be390836e9e560fcee6fe6b495661227df9cafe753042c0775b1c3757d9ccd735ae92ebd9f85432f9c8cab4816a785a0953ed764b8ca1d90a8ccd0d6018b7c58dd60c5bfff0aba5af6fce8056e0fb177e32606407c4309104e0e63caaecbfb5223591afc6e77e288c2618a94bf23b5d0ab1b0ed8352a1d1a74eadc8f53a6755d58959c56ef7b19b6aa06aff2a089378aab18ca5e655008a890eb127f9c43c634df1f004f665c9581206ac4e31b91930767e4e7616b4809086e21e6c1eade0c06d0022c205ded9c33feeb1943cc21014d664f622ba9621873c21ce5b752348df6ee5b79eb002fec231b0ece9e842456e17e5cc34a0d66212c74be09b008c4358fe93c36acd101d246d1c8d48a6535e96e44f3b5a60109158cfb9ad83404f33618a95013100fc2623dbe7df3afcc955ac78d4a5ff634760acbd64b8d1998a236802891fa9b4299ade60fc222c5085b8700809e47ea8896266acf89048ab8266e6b398b3abb826976a555eecc0a6382f0a4f054d0ce37a61a9b28332752a0b47b8a5783037c6de273f4dddfd0518c1674b76fdc9fb40cb324d07e463d1771930f099037c46c983601a15ccc2145951101a7e00e9a4b62c10d911154ced1e607d88c50584bd002c522fe1f1b9c84518d097e9e429d9a4f8d401861cc435a7740172d0db97ee6bacc307d57ba075b1c78a38ab400b497032d351428d8c08257ab56957558e9c2c7608773282776b14c470e52272d1340ab24171c3cb0effaad6c098b388c8975e20ded50c1462d6314aa779944896c97e0a8de06f6c4aecb0021858506dde67157fcaee1ef2d46153ec2c3a0a017e6b69b808a027f05346bea589f3c4fec91b6975970a10e064f21ab8c89f8457b99271417c105d1526b7f5a413e0c45e83dea3d5b7e68993de3df275b9a1b37e9f68b7e018204299d39fa3ac1a23b2874fb13e506e958d62b2e65f7dcc92fd653603b66d2c51862e53996853a8a6b9973d3c1fe9b361ab4e8e603f6c7e0169f07ea8fa4295a2bac63227af29827a364c71773262ae896cf7674ca7bda2f5d74fbcdc75f0b99299c76801e1768da67d1619b3bd566a40b3a240ef2384c21f54b749b314c5b22050a88978923274bc172461d8221effb80e7eef6af343b237389e94f2704b5052b7c8acf48b005fc43f4c3339f9436f30c9ae1e692bb05dc33a73503702935cc0726a67d25e1ef6f5361e156eec18ec22043fc34eacc3779eb8b308077ea181921ceef9d5b068317cf93012260c776e2ef0df288b3d28c233997763c1f7c22050333e26451f3ebd3064cd518e7befc472c31ae96fcf5509e542d3a764c663dd81f174f26a4715ea156dc1231f92a229c5069b6e1b441a603172d8a7963d9be0d23da1b51944d7dadd0ff046aaffdfd333daae36e7cb069b51b38d7f6c2e1c0ef0c6effd4800e6a32e3b276caddf349fbac768301baa1f889a7509b73a4499ae1017d49ce5968ad066f2d999425339e9f5a55ba6d94644bf59cad2b1c8762538b2c8eab5e2d752bc850474bbc42e80b5ec169045cc54a0e26ed9bf6b1294468c727ca94c671774373f6d75477afd472a739755bf02861e71ffd1441c3406999bc0372b442ecc80de6c2ba5b2d9b4054eb49691bfaf1479ce574fd5330833f15781a51c20572a455854418e9161cb17e80ab7878b09e3e914ed10238b4507306d8093ddbe04cbcd7bf36f451a51803552f28b02e40e70981c95a5211bcd39cc26b1d2c50d7ffb6b343e54029b1c97d87ba7f100f449c2b17288c9ca920137ed2e516f1f57ca9b3a345c9b776433acbfe1bb36fd20623bfe5ba2cda092e340621a90a808a77d33036edeef20ddbc77cd4a6d4e6518e460475d30010ceb6ba7ab722062b327c5b1d5c7a8f72c839d66018b93cea449268d42d143aab298352034f662d90a9940dc674c2c884b5f2769ea869217e566f4e9fea9a4ffbc528cb1c4b521b3d886f4b07c52bc6d7fcc975770a6e5e5c262d62e58c1b361021d33e2f6372264541cd3a0e0966af44168264b33ac46c87ad3854d7a0e2f6d3273166db44860cf08eeb86aa214553f67c46b2362e3374a248cb6e6b138d9d61c4a34a119b6a1040e4808c51a6a4167ae2c4baa23c8ab55b33e7cb847309c0e8fef3ee6b508a160bfc04f9506d0ba4b6d4e9f17545bf6ec0c66de274513bf452dd32648fd40a2bb71d400c093d4547b2718a5a5c6c67f48235237dbf4bb4c09a1beeea74a15b17dbaf83ccf9352c2a042c7189fc982dfbd3dab443e18805595a75932f992b6623504ef88b6f0f787e099d2a081be52ffb667782b3893c78d6074cd77701cef52030c97a749b62c99d4c290217c66ac978651a459f5659520f75a5bb66a65a3c07dada1a9798062646daf16aa468d41cb6ab699cdaf4dea74224baecc49f62ec2d6b98d725372954accb43218d2bf8e35b51e308940ca63661d550af0a73c7d7001ae5926345c9cf0485a1653ff3d3eed96c29231861eb645cb9ddd6489ecd110f627d11606b708b17fead9cd2801fb188aa7d277b42c6598f1d55bf3c316abf2bb8c9301f2c472ad4c46ac77a64800a1162184e2bd3fee70f29539b53d81ad81c6e0d000c74018e0f1a7d7eb96000a0afc319aab107e0a2524ef6b31b11ac4c188abb3f08694ad6ec510fc27e770353f83c60b63d301ff5d05c5d26fa6d85ef0af6f84bacd5dcffb0ddd66a6cf4ff81481e09cb8d3f1cc6975b66fc2bd03bbf2b5f5c7a768d14a0cd3e8843c5f11550be0b6069ee2e61f3240dbc97c74336e400d2e2f21aa7f7e913cbf0ffd1a8e525bc403c5262f730e263525b3a6a9c11f01bf25a8a089e398f0509dab18d3017fe218f11be229dc6ff1ec735a21eb5a20c07168254e10a6317987d1eed7590de57b23eb08030a8a2fc4d3243549d1e0cbb0d45e95bd5a480c8966487aadb76cedf398d14d4cd76792334c143170e0d877312146f49b4b28351626666c45e42fce87ee780799ecbad54455cefba0eed664a18e962ac775a2b02e6ced763286e40948f35341f7543a623f042d5434fd834bf20b2f3c2904c13c03ea6dc8cca044044279c0047a0814b07287ce34cb3b7a9982307731bfaef6b687f922a10f5826c72b836b44f672f934cb3f39de1de49f2821d960f8ed47b49e643473f55ca22df35d02a6b0554cbc85e23134c5ce3267904139d5af3899fae1cfff178fee427a651ecee26edc268a91c68a347c43dc5b2180238cf4268e366afb2ddff08144de95ecec239c02882f971bfe3d9cd29551a4028265ead5f3df556cf3897f231c2fca265ddc7b4fbf7d150b122b0cafde4f5f81b04ef2212dd0d21e952d3d5cfc91f24a25c85b947fe71ae877beec4799eb99222097e618888a2b40d228798bcdfe5a0cd7f53df0c198089aa91ec0187536bc310c9a521e06ddcb8c1040dc6cbf688a40b379432712ac310e221929d1111c4b4006ee9598f3a049cf492ccddc308bdf92f931dc10a1dbace99105c39e6ffe1dd2d80531bb2f6c391def1c281decd1ce15f588dfd364f33645d73c77ee5e73e43003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000002b118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000002b0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000002b0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000002b0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000002b29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000002b141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000002b25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000002b12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000002b2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000002b189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000002b1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000002b05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000002b05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000002b14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000002b03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000002b2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000002b1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000002b1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000002b14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000002b2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000002b305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000002b280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000002b223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000002b17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000002b08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000002b2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000002b0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000002b0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000002b172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000002b0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000002b05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000002b137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000002b2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000002b2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000002b2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000002b18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000002b0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000002b204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000002b0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000002b1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000002b28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000002b1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000002b21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000002b0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000002b0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000002b107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000002b2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000002b09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000002b24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000002b03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000002b1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000002b205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000002b25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000002b283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000002b21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000002b094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000002b0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000002b1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000002b2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000002b1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000002b1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000002b304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c9f8556b5a873395dfdc502854b57cbb49d87344f574ebd61c1c408c733b1d105499c042047c31169d6b6121beef84c61428ce0164b47b545bdee2807d9c533ac3bb96d15250ab83bb056bade6e6fed4bc39747b83f402cc05074240efe2d8a77bfb364c322e85e7e00d2aaa1ed4a95b4fcf737c7ed5d6f8aa7f2760d57c61d32815caa4ee29ae23dde6c8629a0c2da5b63c0407e43b087e0c63fd80328b2f7e6ecbab891f5b14b37ceac04490558ac6edb53d059c71adf41dc4d693fb718c0adb7df61f40f7f9b5be2e54b024bcfce463a2a993d9598d4cb021053204270bd18c984cc27c8fdd16bba74d477490ec6a8f0d0e017cbb6afaf60a1c75b2d329bc9741ebd79c48ce5ff039ab327e0c1ef71da0492f98c744a9baf10195bfe057b4ec322a1c63c201402a6a01a693e6d3a013099e5beb25bf523dbec14aeb14925cdff69e233410c352e81522dafd9151c4e60592c7e3146ebe979666f1baf4f4b2ce6e9370179f79c06da11feb51317a7257131231c84704f709f1c4deccbb77ce5eb1f65c3d19fe40aeee3114db5b8eca3cfdd972885256be5874e414c53cfa0f8972cd758bacdb40ac007a034e62b58c3e09be0fd8d87c5e8c11cfc3b497f0200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009366f9c0a1dfa5b6af3dfd3baa96e09e2bebd3c6a97f0cf7455147cd373d3cba9b64364f33018fd70436067366f89077720ffcaf9c64a0e2481175bdd66b1a5d83c978a75239735cc17b20c327bfab4c83ca2c82d5d54d7c17abac31de4533aad332a7a4eeff2cc19a295d2a41e8f894bbd69830ca73b2426d05101a8aaf2513645c5d018d02ad356c0f3bf249b50b1149e686e9db0b4f7cc14db4f1b77ef547a366ea237dcd95d41404815f7df9c4039718bc1972ca21a476ad24809a7171417b58bc884a44a6fd9123fdd3a3f6a49712418274074b4776e5187f119fe79c47a050b1bbe6f5cbdaa1b4d4459993981b6f8124886fc748aceb1f185e86426c4ef6205e9e88c012f64a078c486aebc100bbc8a03389968e74f1d99767997cf12b2bab2e1b63372eca875cfeadb7d0054ad1f7d8cdec396c503d01b754e02d1e5316f4a3a9d8d9a43537366e958b0e842e59a8fe0a4bb0f126b533db60801d75d69e4cd7eaa16d8a13deed5cd3dc3c51adb47c1e4fbf1bd43cee2adb3ebd76698510001e1fd1eda57e7e9b904851dd0c80616d064566586ada537c7831d16818dd0e1b66d017b5d8850c886ecd485c0fbf247d0b9a4806b79fd999c513a8110b5500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a30403012d5645cdca24475df2997f3088054d2e61f2dbd393af7c34ae899f27319bc9f3b4e2781193e9f11c09a62c3ea9fe49b0935acec637a1d9c92f5f17057a95880d0a831d77dbc3254c1217a1a939b25c48197e3a9bc00e2c80847c51e2f45d7ecea1ff03d08ff83bbbf0f710670cac80925a9728d78b2f3d290d37eb971a3fc60bafee180cfbb00249846de875484abacd5b5a078df39fdbd4ab3ac38acb336950aeaf9ec571eeec951e056c60fb88d5302cac755855a7723fb08c537f59f534354d0dbeb0ec4c6d70c665187280bcdeed57f06c57e85558bd82826e0c32f14d38c328c2be4f13ffd54ee907323aec853f9ad848688651fe58b394782056467a3f722d2fd89097b9c52042d0e5cef0969caca666e020587bd8516b2473d4875c549bd615f515f17a2cc1ffee57c58ee7efb7df169880ec36ccc06529ae7c62585c55cd5e5718e286ebf782c7a615399e645c769f299dbcdcbef5e15f4a45d2fe709df76ee8a8077e0c04c9fc99c6d9616c83fee03e34fe0fc484e44b01e54d9728188c08422eda16fd98682c92c6796aa6fba6316ae9fffc218278e9ea698acaf783fdb17028a5f2cddc8aff85a4432c135a7149c85043a15428504910000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000845a58ec46722712287b2d8c008f7cad45460617ca44eb5b01087fdf05f33927229d93cb0b29ada485fd5e8f9c51e3c7510fbf8ae1eaa6d5fa6ac5e237567cab4d934833a58d59e4225c873127e47a7b832d64864438dbc54dde190190170f04681a6463466b9d8d987bc223e210fc39b3331d292421d8de2325859b1b48cc5865f50d6d4bf7183d069b022090ecab95fc57d84029f17b12ae558b23d85f7c36a7335993c7669751308be856fd3764572378ec8d32687ef51bb954b7ae5ec042eb7485b7be75e712efcd60161374b495f57c3d7e406d329616f58a661625a958f36d080f2b9ae608f5a693e82a8b530d48a6ca52bc33d9ad549e92c9df24e4893a31d134dcf9bbf01d244b358fa1271f58c945a941df46cc3f39824392ea0a629ce8604400e8767ecb5dab2cb8a964a99b338d9e186c8cc899be69955eac16f15921bdb1d284e7c90e8602282b64155221c655e6fcebb1aa4cccb11196727851c62d569a20a6ff52ca624daf5a54795523e65ec8e4f4a8e25a198e3cfd6a2156e114df8fac1bd9554648da6f1b2a0a52f1581dab3fd9646f6f826eff87d70ec383c77b4a1d6d32be7d2c20253a24c637024857c9d45268910787667c3df041b30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000107e9395cbcb2dd88aa51644792152eac21b0c05245b0855e302c34b1fa1339a24fb5e0580a7e97987771afcfd6fc42ab01a978f3bc601346319cc61d8c55b40ff33b76994ee202940e24ce528c3b2f8ed48ea957dd1a2157a32c1ba34462ba69a788c9e2a25fc2cb790922a8727184d49ffb5b837e1dc9462ba15e3b81df8968335d05f2a3dc450acc54d875c0463cf4a210c4e2fac2ae3c69b879207a32281d568e7fcbd91c05ffbd536bd46da0583c83480a605ad82f9ce3a7562ac6473a921a3662b54222462b60f05a154ae744aae9de22e6d0f7f99cac77b8c5575347743a15ad1bf04164a2dc212a5b63cb0f88149673af409405057de5f418faafdf36aa27f61ed9dcf0c4419f862fc6d15a27aa2183302d5d39a9ada726a1e3e786037f38ee04355e6bb35e9eea747731803997e16b063001756f079decf69b45d5e8cd4d6c92450fd0d96763afdfa9baecb6baf46ffd6f5fb40fd127a482f65aa853995fed701503592e1abf4a8a51be07b39ba0a11bded3c51e3d9d1f3a14f84f2f25287c2db95ade94e614122a4154169b07028554f71f8dfe7554808ebf3534e18c9f553898861a755ba1eeea44259f6400656c6b75c82ee5c38c4e8998cb0c30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6bf73bec748d9ee932edc7bf0424304bd0814b19d443fe1005b127c2043735f0227cb80dd1385ac6ae138e477dd75fe72dc02e22bb3defc054bf8439f60d1ef82d35c6f6a22c2effbc120a8dd4ecce1515676f563829051f285cff631a5cb8e4149cc1c512c96277b7825ef62c8bb12f9e2302bab50cc137db9fc6b0a87de15197d5d815bbdf47657370d6a8279f326dfc1f44672cf354d8b2d713bedb245f870c678315e0692d8c866a6dec6b51ffd6132ffced7993b83370510d51d0b2244dca8b9820fe7d8050d014b5c03468ad96c8a4b8cb1cc95a656ebf6c18a3811b78a7e244c46023d6fc9a6c0e619a081bacbca722b8f64c7b69a56affd952bfc68112a3020560aff80b247b6e17ea15e23564915c67957a611690860d5947ef73fca301c7ddafd1ddbd3926b3eea618626cd5b12cacb246aa20a23aae42a7cd60299e7a2e07ce3e89b5bb57733db8e491177532e8093e23eeb85ca40a3771307ed9347be0a3861de4464407c505da146bd5275ec04590f15d3cb014551beb2acb6ac0f6db139d789a1e4b95051d613499f21b4bc6f077f340cc08e0fef79f6e5b88a2fa759bed88b81fe942c3ccef7a36f3ce8f22d5ba47073a5cc84f2dba77f0500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a9a1f7bba7b23b54664cdbc4b547fc3a0865113fc81100d1064d2412be48fcd38d2db870685c85f30423ef87abe653b70e4be56978d478299db603bd81601d1336bf0c29941a389ed7384ac703fa0e0bfbbd64a7d7cd7cb29e178accdf0c3cb32a84a3fdc69ccfe3187c34b471db69ce4601c8374423a906363df70ec1e1a8c18fb8ec7edd3430c4f8ab2ed43f2f51fb9d951adcd86ef31e70c352351297f3bbab7c3ad2f4ec84a293431ed06a2544bb7945c423a388f5922b94a72d09ae05f5ad764690cee6f5656ae843f6e1055d230bad05b7cdd226a5168df60ae1f739eb5186bf8e80003b380ce6af1c4fc43f451fd1bcbc571bc54db4cf3d5c6c3751d9caffe057a16afa7b7550b0ceba5fd20bb2859eee05ed44ede1631d751d44823f63145239543e757ab6eff9f76cca390a1298661b31fa7ddec404a19c83536b2d8ea77e4836fea135ed639c4da70c189ed84c5134cd8f17684d3cf7d05542fdbb99e837f5de1b95e027eac7f1fc8a80226a81c4cf4099d70feac7c76e1347a03000a3b8cae3582c083484dd7b11e34f810a96ab14e42748837c7fe014a1a87a86494da5a29b36cf694bdffabd0d8c18df3f93b56f7d18607a20f284d36db825000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002aa7ab25c1bef952c5d187d8b51e829ceaaea40eafcb027ae4da6570ee0780db6cbc9befb171944143704d627661b4e91ac86889574e143d97cc1d13d192ba5e467f4d67eb565aab51f9931f098158118b2234a2046174f6a4deecfd780c173301cd187e653c55ddbfe0e89c8b2a4f111d32410e634a7772f462293e96edf446ae95b41af51634cd05a008ccb44b70699b9a8624db350ff9c4a7a94ff0ed3226b3a747ae5df6ab1bd0e504c90a9342e4410563ab7011527b9b0cef9487b74b22cb00ab8ea2d2729c479dc75e8bfdb417af4b3d3cd3a533b478e0ec4f096a8fefbf4191cf6f2c2c8c10441604605413b5f9f1aa6b3928cbe00a0a0278149ba6762b7fef58b1d156968159a4084ef30bf7dc110e48827d6676c764a4c63a001dd176514cb4f11d25dff8dc6b06d2091185c5118519b94af351c9b0fac08791dc93168787122f037b3683b9a4fb843ecb8c772fb4f1be29d8f6c4b7fcba6f57116280cfa34117656fa656e55afd913070b234293ac26377e1ade356903d09c32e0556e6b7180aa4ee815b0a0dc0223b1fd8a8ed4a48ae06532377e9c6cd90becf72e70fe533b916757a729ce773dd26353ccb613dba5baab1ab215b0873210dc0f300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002561535bcdf903ab6f9f0950c8dbac1b257535eaa39a36422f9eff989d67aab0b7cca9c1dcb79d7d14cfe4d51e85a30dc205d3534657713d0a270bbf3b7335588bac3442c80409d96300322d00c834e30038ee849547c8260fa9ee91d729a05642bbe82280dee573404ff32aecfc468718267405af23d21427e8a42d30940f8cdfaeb62475fb7908abcfe5784a43370e904ac7251db15e291ab24378a56fcb84310284109ce47bc7b3e02269a8e88263b06a2f4580ac3419d66344d991c506fee8a5d3d8c968225f8dacf8fbce2005b76f7833f6181218442cff118542c09a83a4f0f8683f5811553d8240606d65f7f1be179d93569da0eb465df20dfca181b3427a8eacb19dd1215af43a8aab094f2cf0c06bef36ef1662da07b002b08eccaf5ca3cbdb691a28f1e7876104af4f7b1561cef09887adc9fabece9b41d0e1c68e5832f9ae78306f13da0fc54418866391dde6a63ae2f5042ace92ed0c854f5b1e2f56ecca78da4fe358fde353e0b546853f3b936cc04b7bde1912828c427cfaa1ca36f68d5781b0bd688076732e9e759e547734248164aa9be01e38a9c2c9e509919909423c7b8949223d0bd8033d47cc4dea8cc0be0737e0438744f6f9add64000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000546e081c100ed9e1006725224d1d3749792f257124abf125ffe3590118632e068885e293a33741c5a8a95822af40774ee53b6bcc0d791f49e7d88ce33f58da82005f8aa712cbaec4e6b363310c20f89164e69b3ee5d56f311c387703ec6ac53030efa024d7c222806084446deaaae8721948756f96ac32d6d6d720fdd0ba4d3517d87618db6fea69c0a0d43b00e0b3d42c565e3f8a83e1708493dfcdc2e4eaf89aa059b5f2c6ae9d9e243754001e8674bf3723a6027d27acf293d7208a52e11a3c1ada073502fad8460eb8819363e5c64193d0e0f80a219ac7f0363acf124ea829815518f4726cca63b07b6a88d9cf61af0ca1e7b4079dcb75cefd079febe0e5d7be8f9747df634e29bd098ddd2c72b12c643b042ba2b6466b9bc96b0c250deaefce0a3049d3717e47be39df599393af982f1e8263b0e405b3618cb8a6b550a592b9d2d321227f7eeadb1b8833df071e5bc1f84e1ddd6d6c20e203dc9a1946b6c9da2289aaa00162620475479c9d4cdde87e0924b59853cd3b326a5faa57f96a4932b49b38750e8e5bbb6e7dab51b1b6f600b7546762fb9aeffd059f0f049299381818c4bc8ed370daf93de9640ee1c525a47b6774bc814d2f5d1b98bb4d31200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f824431ca6fa7f4a6f626c0f57db7c7f38bd64458b2b7b4305c7784c3ff832ec950bd322cbefbfa90afa408d52575080355eccca4d8583909245037da07d57f6d7f05b042fea897e7793a2ef61ea319cc080f2db22e175d8130ffd1d149e5c1792f8cbec724765b1cd12c35a0eb7b3df0190ed8bc5eec893d4ae11d3d24eb08d497ceb681125c9ea9f285d2f8d6e267c53dceee10e48fa81093a0c84a3c54cb925c38fc250dd8878aa88a82069bd0beb19ba5b85221c6b1299b2637a4a52985f5e8b72fb224e82c220cbdcec592e34b9742adfe93a59dfb92b4f04b2be4d3157678bd12c2c32c228a57cab00bef7d431bec32967071bd0143f60c645711003ccd8a435d435fb70f0a1f9d749f1dd17b30fbe2828ecae4d70bd431bc34cc117ce22bd5dd547f560e35f7fa95bc4bd80f2cdc877ae6d18683676d194c5307a37d7625d42cad1890b5f9a98f0e8a48f45c1e298209de5c26d450b7d2813d1def6590ad1b656c01c9c35e430966ddb89e38b87dcc8e72301ab97a25f78d2bfec4a699efeea5d6b709c9b9fa53790fae79063be93dc79db6bf8788d8bfadc8b4cb8b98f4bbbbb0d0c6eb8a247b38412f189610c0a4a216a1d4eaeac03c6b767c278b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fe1954daf682b4e42d9fbf327e66ec9fe51548b7f0645422b5a58515c495215b605ce17a23dc46d8114e715fe5aa464119a0525c8ed69c7170b15530aaefbfe3954b23d6ff4a8f4cc91a6e63009360a373d7ca756d63cd6159ebdde241686e8cdb08c1905ee2d9ca7248051c2cd54e4f8b15337421a79736ef8c77a37a844d75d20253fbe9dfae9bfdb3eb416ff710cf0c4de6d482fdf07d40b7be6ffa321931c03243ee6552bc890f81b8e41f4e80a61d494630aea1a6cd39e1be590e82e34b9e13589acec82fba290cdb4087ca8cb996b69ae42d1dc9510da44650b42d465aabf7922318d3bbe53e71e06fc5ce9ca1bfd543ec81e16001220c5f67371687f90b4027b6a4cfb3d0d29b8c8ce14790f2299f5524cd590f8a7850167a0c717f086b96162900f481c446b9b8cb0e75223c578369fb5615984332ad3bf122b3a45d51a93cbb6ff70d2c28738cf38f2839d88855fc144be27325f82976b74208e717c47835d981a3c498a526dc68595f10f9657274f14aab21d192e9d0478a43b76174d2e6fac9a97eb04e4c636907af79fd37bce9ac88ca4aa2d1a5abdc7f2dc5bd66b37b90cfd15bee4aeb50fa3c1b58f8ece16485781c4978a98f4a4a6ec688700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e7fa8ed71de1d2cf668a727d1371777adb91b3d69bf33638bdb69e00e5a779b6dddcb520f6c53f0744a5069393bef500892d7b4800a13477a338ee731113e488c752649dc0de1710175dd6c2cdca58c16926f7543bd98a298265e4f4d20c978ab892a61efb3c1a5b4b4d99f2199306aea3e47f6346364321e5c24722a85199f59da3328821138264ed509f4105de66d9d5f7f8fe61e943e6d95cd633847af9495f597ffc510047628865794f94a7a867239d097cb7b69159c7c4046eaada1c1cc1358b03bfa703b940f9fbf2cbb08277292bc2d22e40a8ab69c0d237a0a53a757b1723e0ef9c8c29004adc8b10481c7d97bfd6689615e34ac220c2f45e2bedfddda85b7555445645c4e5fe880c83fa70dd42edc5830eaf0cd087a8e19961b2b05ea41d906643b800692c2bc2ce59a3669118fcf53ab9ea205bf35e1fc536a0522bce9d00a9dd9ee776639f91d3447ebae5156512be1eb61339c907f2e1ca7b2c7d6fdc20c928f1699db7cd47924ef4dcc5e8dcbf78dfd1142581654ad7d891455d87dfb3feefad403a0f2cf7a0941b63e11effe1e74c7db73749c0ee768d9df96661398a9422f8e878f1da140fff3a35534d10c1b26fff7c3e07d640156782a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ef3f2b2cc171e5c78a664887aa3d09980e701d5e796f9b0bc205b2f32c47ba0799a5d0d8e0a9276e3f81b0490240f3b8369bd4c27e16605ed5b688ea0869b70792fb243ac5b069e16746d1b9df0f7599ec7ed9ee509dcb3c228c175b05ed909729b23d0055495e6df20989556c3c591139b7302ef5cb48334073a4e21eaf1a7f9236613ad215d6095f8fc39f427d089aab0344e6233a6767676670c08521fa267adc5dbb03eb330765b78067c0fa37a79f41a9254ec0f100ed2f18b7017eba862b430764772e5936e0c20dee21df7ad73e8ebb97278f9ea6aea23ce58395c11ef04b79e9448bcb9e5328b0d5d511c1192176606f1dbcccb581293314050dda7d9e7ee4ec03a45f0bc0100e5258ecab8a5264b0e21ac8fa6800d8cc9581b2162acea802161ec1eebf9847393a4ac5b68bc5065a1fff2fc72374f3f1d380f2978e616924eebbf47adc63608f772e9522a263854d4295ea38bdf1c740283ae7704e7be44ed968fc5ee6be8771821224a360eeddb8ea3112069f5baa93ae744767769a48452533060f3ad6176e2e1296a9a51276dc4d1f108a4c64e50ee811d0143e605ba014128d031ed5ff91dd3d21920be1ddea12b936b22d601d8f56737e4f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000222209b8dd7b8fd328ac1e6848110e30257253834d1bbca08c522e0386e35870d1036bc3846fd19eeab7f62cd7a716634b781c15775de3adb51bb46249db0470ed1fda749b70143fc6b17da5a9743bafb483b032dd9af20e06d4ac2e4fbec32c6557ed317534f256c8bc5d83ee3805abf75782cfdd9c3dfac39e69f4c910384c2c7d1be7342f3a0d517ed4594745bb2eeafd240c12280553c3e2e5814ad10a477153538ca8b5e47938e5766fd0170034080ec5d58693429699c8ac47a080bbbf67ea7ed79c452a30af9a9f91c18381966c448e38b67c8ed1c4349360f7b7e25e113ced10f97f70da44127951fa23faf1b3452c6a01da8deca647d362e04981407a7854fd94926a0ff4b4d1f80d2358857677d8ef41dfc903217fb0094746d24ef848187deb5ef439134124cb0923992a195b245ba8f39513228a8a38d5b7de835e992cbf11aae56c8247ed46d85f4c09cc82acefc1bdbb8e337c127deeffef52495b768b544ab12f17f94e522cfc57ff551b760d7668fdb51ecbb877e23a4698196927da770bbcd22104d077ddd7277a34804af6b5168a481090a4f704de8e2f54a06527bcb1b44976d890f5f327755662998108b090e1f15837e64cf77250fa0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010de6b50f9244c6a569adac250eb71ff23389222f6c8da2b00ef72e2560aae9eff43f0e421526afa57375131b5d79474ba433d6e0c9a52c6f15defca13fde15e0a1909c8cccbcdb96322701fa41d3f238995d8e033273d2e3d97f627a432acc947994bc655030cdf25b5d4b5e970a0020771a874f54f830d78bcd8f3c451e4bf3ecebba6dc8b9e8d3af91bcfcbd2093c242c81c65d5c977b654caa06476106a456c313ba41882988d4a4cd11747b73b9e0368a8d2680f760f77e7478824a0e66125a3ec3c74ff30aef018f849732fc5e59377f73d89fabd11ac9c3e4ae5c828d60cec5d9d5460d9f1b4a185cea28dc595d2b7e9aea488dd8be617a9802d1c9fe98d9b56e2ec725255ef2b42b0de88526cb3d855a3c1c8a8b60b2a9ef0f4cc6d8af737d7be64fcbdb117b7985d3853ff1859e4b568d15a097ee6baea74d98b82e855ab7ec8429ddfc784b2ba4d26b1de624e5fd0fe16dab1e3d93284855df9887687a4deeff75a17f36383bf0947d7e07f347c454c6a97766a369a136be439cef2d488954edc1e9cf2e1fe1512c949cde771d7352d160dcf853d67608c6a7982a306d3340784160d5e38d709d6bb7b96f3155ed2bb7bc03016c0cfeb0e1eb64200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a21091872e51a718d0c58d027e481395f1672139f525329c3d82ddc188b4cba0cdab0f762241cc2ae43de6402296b401bed556befd9c9258ba49fa8fa18dcd758386c9d2a326c76d9e76b76a39fb913a595b4b195a03baf1de4c13822cdf3634dbd0a6a82699064bb5590410bdcc7b0d16e2ef2c9b43da95eccd8d71d522b6fbc8e9bae9b76632230946d4bcda701f3766b9064ab13d7248368096928960d3f51659020376a273f22278938474d152c21ec8114f3c0cdf01dfdfd1f1cee57053f70cd3418a84a90b44c56d5dafafb5a59950cb5e38cb7477432bd310b764118fdf0570240707edaef437bac898271c1a7b3aaa2583e1126c00dd19ab5c125a9b843e55e43a97ccb535030316f48eb1c1067c15a8532966c1409cbdc3510a91b804e07e7aa6e4847ff0cb9d56a608e64276a68fecc86e93981f75733b5ea7eddd4fff021c426ce2c9a1e1b50706516f8e66b2822e7070febde6aca5541c2206e978b5fe54018af530df23b485cd84bf8285f56f15b6144ca6b5e3bbcdb607292191a519b7c62f46f71dcb83bef48c7f29bd6528701fa5820e5a8dec02e8d9bca42ee897ff7672d7f9f94dcb5748821726dd6a00839cede5aad421c95cf2c14100000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a640ac074ab1843e0c6d392a85e7c87727b9e9d7ecab38655a348163fb5eab60356b83ad0ec5a1168e5daa23617d62f65daefefbfb5cae0e54af8877c19435dac392674b4a8c76ea78451b839a5fde9cd7d42f81037973bdf3f8a772d5c8dd7d761457add29cbfe8a627a7623bc41d39379dcce9e9641cd2cf9e7e3c3a89485cdf503682a9e4a35db5e4b3d5a77f8243289549a2e2e0efe2be0e7a06f76c6df00c5d03ead094ba8de06a2fd48011d994f032c13f31037917fcd7eea0131d79253a1bee0d1ad86f171f3aee19550b58dade45cef2e6ff5f5223a9c2fc85f8c7f30a8082c521cc5f498491ba1be68c7b210d800a12c2032d7e3cc7294e56352e17adf3a7e4481abafba5a24ad152a1fd7feed312af0571764ae26d7a0df838393a279fe4efac2de44f1098860a8146e652e4e5c61509af0a6a8b5121d9dd8025f68c0c31e5875a68842b4173e0e75583f407a5872e06b26557e1f6087d94fce5efe6848ac299f348b0598415029e1b6c704153111a6a69529cc8d39434a0f3e58e7a7276de8728971e1f9a9062fdcfebb87dd892f4927adeb432ad9890ee114a616726efba8f889766b858e7720f43617c57349b696d11c5ea765cda3927583fde00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001099004e88318ce2699827f71a981cc9fe01bdb137ce6478a1215421d096e97d02564621cb1dea384d7f5bba867eb8330a21e925e0ffb964065450be4da3ae833ab7e36db20eccac613aa91cff3c4227b7e9bf432f2314144de561c5a952bf17d43daad96615d1043e979877d2c86497b0559f6da4e055d04f94ff3e67d2c02a01c50c194712a9a2d952bf5ef8bccfeb92a99cfe487786fc1efd25c87822232aea35b8136aa0a567bb0e9cd04200723fb75843a63b50cb511558780d23b20d591567539aefdd736fa0ee484e777bb88a46b204582ba52de2ef23e8cee010e6e3ff45eed963369c5a9fc7dc22d0067d027dd97a4e5bc5bbaa3bccdeeae3b203de0fc933a2bd575329f80809c3880fd82fc9acbae8405a58b338edefa0c1869366cbbe28bcd210c1de1ec2b4d0ba481a2072492267c79a4ef20de32561445fcac8c00eccdefab7675b0ab5588d91a3c17f1bf39a6c1a99a2ebb00107415cb9da0d80f77bd0ad6cd064c07c8851a9fc5d1641135651bfc8e19dd0c38131dede8edac53a1ae92d49c0bfd10dd3c1cad37063e11f0fe1f85e70660f14553a2c46e337d9354c9b5b64edae66a11e9d5ff2c0730e227cf210c729de7c8887eb66785d5a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015d9211204f50580b1a8ae6c894f5e904a7aacd3499c55e10add91b2764bda99d86e5d17b0f9005a523bea0b5ce539c48fe7b2137780a796aa0bd7aebceaadd8e200b55a8742e9321d507dc2126b44c3a6eae76a4978a2a9e60aef0fee7fb6fe2403095d01009052d217715bd423d6b35713cd915d52af883a45dcdf401f2dbaf26884b07e2275772b66f0ca4d5085457196e35891840dba6041c51d3c35c4d40dff0074ff07f99c08de09db0d94810a31a4fd183490755018e15856c48ce9799d7d1e795ab462520b5e312a17fd2d94ef06f34fbd5a313750783a473ffcd58c9ced0507a9699d20bf7925d3fc7ce339a3507bfb86778760e2f371a4956d47f4fd2dca139fad0c86d35bd3b1ee2ab74b937d4304d0f16ff37d3dbeae696150030f573bc514d39f14d29cbc623f1cada31501d819a5b0efcefd7bc20a9d965cf55d168cbdebb3748e2b8d6e596040a30e4abce720cd7bccc7ef16ce32585a217bb58ea4871d3f645b5db1efe830e2f6db9cf88f5b1ef05dea02051272960efdf13de1eb8c44a26ee760247f194a7734c487f33413bfb7b1d301af1b051560281b83a7f075ab3764be6368cc1ef44e2237a03871b01ef4d529f17ae8fdcc4d52b600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ea7981ba86477be3b22729a0177411a22ecfc27abb63b37bf68a8d1b274a0e4dc0e251dcfe8c60d1f985395c469319c40a578492cb7c7ed62f5fd34832c9ccd5cbe8e6cd385fddd8ae54a5d1bc6967cc2f63fb5d38fd83d608a64dd0a08276609f07af294eacb89cfb5d82b7b2600b69e9838e6cc272272abd9be1ca801620e681bf689c61e3f9645cc2572c21201b142905124c3824606225e2913cdfaa0002dd81c1872f04922363df0ba9dc7f79017a555bcd545b55d7459e33cb900bc36ddfa45f5782742f3d1acfffef0487bfaf76505eda1559859cf5fec386a5210be2efb07d167a528a2ca22e9e59c2810bbf2851c9b1a912164061eb9ef523b8175ed3e4693a0e9a4625e7a433dca84749f70e89509d8c556ad3151b32f32d37ad04394e29d7e82911d98e10c1e4ec359198eb24e2aecca8496f450bc7a03342afd25e80d51927c46c6630364bfb7e8f313443a2e2285abae44bed47cbcfc6593fccfce88fb450726fbeacec9bfe461a0aa04ac98a43662e45039d4bb851fed6cc2ae9eefeb2d7ef237962a9b9519a331827bf1b81039c4209313f1ddca522af8d3223316715a3294d4d47d9d13d987c31d4fe51693b75caaae1cc1206c4435fbed0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000236528033f76a0f52ba548ccf362022ab46e60be267663f78e33369251a77ec6264182617131705f56e0fc6c28bcf93c6541e97aba0b5e30cd4e5b428ffe0e8d2a4e087e92f0f92d94cd0c911569fb1e1be5d5c44b2704f766ffabc26dfa5f7314a184efbd42ca3d6f255ac483f92f1a5e86b8257c6e225a440b941cae9484d65568484bb28f9c50d014902090ab22f9aa4f1819f7a73402874891df0944c9eb8bcf033f9d299d3922251f74c591864a1fbfb516b21a7b6c183b017e30df17c8f2f65ff5e6e78bd0b73b5a0d387b0fb5c8c76587df6b55510420fee4a15fefbe07895cec77aae7ee76e89d7d639b1342a502184b04c8010d57a594a6731d8523c5b8eb2b017032cedf25b3e99c20d73982492268a8f7c86271fd96b7a5a877433e1b301c6628e9652fabd99b4bf1e6982c55d70e550bc48626d1fe7d65a23854b3b80e8df1a670b898c424bd9f4e65ef7390ec81000ed7ebf9e4f773026850e64fc74b0c86185964368d15eef857b2597b7c2d59e0d81bd89ef7c4403aa25ce6ab68ecc8b1340f13469eff82dd9124aef1093c2bc15a743fcc5446b05debbdaecd704a743b7eb3b65e6880007cdab5f31294944e91d887e281bafed7370f1efd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a4f03010762d0c780888ad0c75b7fd3df013b85e4a57a2448f012d1207288767181b96798cabebce2b40422eb06f4dc6e8cd43fc4703d5b82cca40dbecf1af686a1f5ab5e9ac32f1f2b6a8a0de081cb09bbf82cf47435d3418c3dac398d6cd84b70b04f6839f5b2d75907973643614a88561ffa2224efd178bcfde2064debb8e0027a8c133d543b40df8f16e673f51ed8d930029b5c7e0f48130b6b8c25864b4b57538613e4b89ad915fe99090b1169f79e72c3f8a57a792a83affaf5b2c8ca4985c18677d42ea15ccfee6a404b7e99555d5c9a2316d58d4d4633f5efc798697de732b09a2d16222e47fc2ec39f2f202266619ba4ffdbfeb890d64240dafdf7c0ddaffcfe86709e7e1a0537334138ae5342b02a053076f3fec231c0b2e3ba667678140d3428f62db07af755ca93e5a5047c1a2d326ae3fdc4d719445202a0f51a62601d10a01dfaee47cf701099e04007409bdb813de50ba027ae8cf4a609a546db27e13a2aa5285978ca83b7c8bd8737c84860a5fc75dfff4d342213d2a33e471db2bab8765468d16af1aaff626410bf1e2189e84f6b478b6d08d85dbaf3270d32c32c3da37158e895f34ec64d75130d91df42b7ab223cbd2131e0ccf223ee00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e9151c5f5986250d969abba3365b0e0321c330d1fe24c751173f3f98e50425d124cf8668393dcc6cd09e7314b8318448212592a222209718aed9916f2b3e20e0fa88f97ec8dd7867f1c92e6d75347489a52ce198a3e2be3bd74d2199c2e334ee31c61d0c0f74340dd005d3b8af0b3188556514520012f2eabacfdab2b2332a21c9ad332e9928c8a3ca8042665873cf7b118d1ea6c1ee578ed12ff5dbcbca63524ee37240ecfcdfd89eed312a65f59ae72aaf8d9debb205beed24ac218c36d09dab015fccb3ffd89c396d11b76ec1bd7d08cb6c146f7658c45b69b00600d1609bf02d6c26f736268928dd4e0e4124ceecd646735858942a835decff1b074548b5dfd96bc6ab3a3c6e1adbfc2536587a3dcb0126b82283dafbd750a5be52bb2eaae1fb8ef3b0a68c657bd939e717060714ab4e3da7c958cff59ebe1b7ea70e9948bbbf530ace2b87f4c15f99633a2e8f2a43f2c2ee2698ab34d73c968c720c8821e0cda8ee94fd2b6735fda347a3b747aef67a5e0e7f4007c18cbe6e18080a58fc24c375cfbacccc012756632df9380615c19e05850f2b0a98366649f69f3e667b3e9a734c3fb3c91c8f4c2c57ea9f6972e5876cda957d910ef133f4a13e6b7f6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091275c60329642f1daa54cd3a987d69037baf0fb055c25068ca978f96b5072868756d239b4b1e68b1cc7266bd2a52769cde011815896402d4681b8348c05da98a3380b5ba00b0c4ed3c1077629e379274d97e259e0ab0b875b0d4721cf18b24f6615f175a5e8295005e40921f907182bef924cafbd8a412438faf148cf61b7941a0bb2c7cffececddb75eee91ee76794d9015f4a191196ff8d6dc3f0a547f80620a397c519a029eacb3f7348688436d1d1c2e08bcf3012da20b8f9c20a40306129f202e4d965ea8802f89a18a5b72cbbaf1f8fbf71002e10972a28247d6c7e485a92420f332160b6a3ea19401b13cef5ce1b6db2869d191a35870f47e0bfc308049d19c8f875abcc1e45f4681e9b539a7345f82f22ac816159a5858a9465571bda3f9c58b3f93be9e65609e191e3141c30e6459a2683aca355d0a96b3c1ab7498621b8e05f38b3e8847a6232bfa0e0617041e4a8e872539ec5371890475c12b6451f6e1a091cc12ad0bf7a39471e98c6cbd19336e97a6c0e06f24a731b2fdf629f5b9d748fff336a19a7ee1d85e4fbd3f0ff4798bc23c23eb8ac865cb6a0ab98068f666a5cb005350f472f86e2eb01eeaacb83c2194f45d2813e5daf130e0b9c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000875332fce50ff7acb39133d5818a1bb3d5b00907fc24641a736de797433038d9717032193201278be2c8189deb07ebb373f48b38a32bacdbb26bc508000a26bd0636173f66b5641cca140c1383e99be1c8885d30a829fb693c801df28a35fbd0f283195fba50c4ceadf1d74db6be193481c5f60e92abe981c49fb5d94c6fa89e9cd7ce0483a276da60834db6195c199651232514a825ce4b6a0a0701b5ec257782f1e4a3b4eda484736d3879a3befd8165bba98e97b8bc2a3c2cf270ab27bf765fc31d3554d9c4661ce96604a759be2d232e75b866d67dc3c28dd36d7aa0e4732a0c528269306b7259bad3809c9c2017bbd06e79e1183cc87e43efb4f494562fcccd1a3db2abc357753ee6f48ab67f67e03f637d912bf3ba2ed143e393c699c6ae2a706dccbe0c3f2a1c1dbb3004ffde544d39bdcd21b5c7c4f36ac3d6fa517ba4e7fe4051ac0f6d33fca9e55477aef586fc81c98e24c3096fd6379a2cadea7f3a4674014a89218d582f384c7f200706fc99186572cae34d5ba0e47414da5dc2db73e2107bb2ab7b25a3c6ed97a91e3dfcff7193bc6b4ef48dcf080df83f42822db3b44da65e1bd6b5cd0c6450da210de716303123fd7de84ed7d4f42f8fd1820000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000987c81584405336dd3c2cb6422757744c86b195e6e46196fb9c7b7696b920af2b275da14ccf96dab3051bfe47021243c63c30573ea26834e1ba7549e33e7a3fe5cd4d73c9bed22584b783bd60dce40482a79f5b841bba99afa6fc6ca7aef8bed380ee3f66f1318afd2bf0f36db15e32c1207d1dd79e1abe74df3dbac6a2d36223be75875a84b8f5566c40023bb9609f59c4661d1e92ab48f67c5346607bbb13064c170d2bc78b5d91215bd2a9886681a27aebe10196dc8464216960091ed4d8672fb1a6599856318bff146f96d06e00b2f36c96eb8911ca1906ca6d3d7fd1806eebc9fcb982ea531362c52129ebe3718254bb1f81bf39bb1310055c25d643d5ac38b468d73a91a3d273448f20babc1fd46d9c7d4037630c437c9e40f969773fde1ad850cc7ade06fb096177aa748dd076f35d3d54d4d1d6148c1b1d560d78a47b125e67139460ac41077857accb088a8f3d6bc2285ece2ceef8ace0129f2508a0e5b118b2ce54cd50e02e2d4cd9b235ba479e392404d0df9722798e257ec5b40cf7508493bb3813d9115277d2c4ff0d5bcebb338e4d75f558823592acc092f217e1fdb93b4dc08f2f9a487b0262f07b398f204191882096a9f9baa466ed5d0aa00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ef6a88f2d2b76de23e63875fbabd21c899eb97f488b90aa411d861cc98f108985d50b2d5ba39c43ae00c364ae3f8b01c7390fda17cd2261490c9f792d4581af20a23fcf71468fa5817b6fb69863df69d03f9fbaa9672e89be08e6f4e74ce2f1f17436f09328f0e306a9c24ae6ebb3b241ac28eb85aa0d6acc28f86129e882def854a7e33a9e17ae461871ca44db2f9531015c0f27cdcca738e35400142072135f6f6a30acd375a840df246016133c0f480daaea2cfa8f79f5ca51a7ed3caff9fe8c43fca3fa8e3af5a7e2c5452d761f57c5b0904bdf862daf8bdc10f9fc817dc993e65027f96ab040a7f831811ae30208e0ddd9af13e82556599a6d6393a0c01369265b01d248402d83bd66784e19bef92b39199070792ccb54c3457da6b581239947c76c00e5e2ca3bde91564c206fec83997db6254f2b17c34e312f82bd216e3508c57aeb56cccb979af8be9809a5925b8fdea159e1f691a06c35c521f9a90d1fe9976e8e610fc793f39e8b447079efdb78732ebab497a4b5052aaa88c499a4cb80ac07bc5a68335cafed683b4d650dbdccb95167f5e9dafbe8db67df63681d9aa22166959ce914faaf38275404bb317dd9da91c4a35d88e38d586aaf62a90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000233f3be5de4664c4ab66c518eaf8421eaadf12f8ff79d6f3ed82f0b5886ed986b1692d059bd2f0274b87c2d7f8f6a5ab4422558aea79b73bbdb890d77a2ac131333b8ab2edc08d4ab5bfc79a52a33749b0e8c4b2d670b6c24ee7747d929c5cdf09836cd239d1186736e7b2bea54bda14dcbe7a6616b4e0aac77e9aba28fb6d89a825cdcc84b156f497b70baec1132c36f31c70cff52d65c268cbb717c9fc15ec25a097aa283bd4c4a152826d381b3275d7d9fc128f3861d2e3fb0793ce6376afc251104369dbd0c44f5b2e5a1a6bfb901b6d63b54ab2c3034c0d10b5ec2ef8657fcfd429ff59a597785e1465fbb79a3da3b92ef1d2f354dc709babd10b3bb96b742634abb498c0e74a13824fad933ddf93999a820f62c8c3d438c561dd73c0e7ba4f85f4423322dbaf5c3fbb00d53605bd5bf0609a503d18f366638d435850f614a5455672027ce67189a85eb4b2eb747087015e12db8bcbd957666dcf99d7abb0805f996c55ca56c5f0a137a7ca61da5e1279c7f6fff46127f799246310826aed1b0566f749bd6668d999138097a0f751b894bf4e04361e2a938229eaa30d69198d37bb6266327c464a234981d8f64890ad38120015a67d6eba377f38edf63b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000943562c7dbe213fab0c72a4e9df2e072c45a5abd1a583caaecb0cd1c253318eb94ff3b9687a7d3be4c9b2a40c4580f4b04da1d863cad9c73895b94e84f3991648ee6f2a139296fe953443e2b5f52c944b2487841d8b6617b57af112552275ee7c9af45b91503468ce3d0bf9bf446f03d1ba95a4656d07b11e5cd859357a91ad67b94e230365f9a80c9cdb98a05c8e314fca0757fdefc0ea868c9dde90e8d40d1385f69dfb0c5fc0b663925cacefe0fb286cb6c47e9c36ee55dc696d27159cf2e57c6d3b461732bbb1a9bc65096617e2e052faed92b27bba8bc687a3fc3169fdbc1fcb298b3961e84c0028f8b244927e438ae24c4943693fb1e4f9c5be6445a2160ee5e2634ebfe313af5e7a48b92320d4ae39a3064fe25bc377867e3d3e4dfef25e454b4fc32a2f5a025ab8c4faab892cfe22d3c547794fa88c100f24728195a48365f0e363f13640bdcbb3fc8a6a2f11e438978c2d94b3cdc98a4f980c1db46f943d171d474ba1474f09ca131f9f65cae912054fc6ec1e7ec9d21fac22cdf02a81101864e187223a6297c82652cfbb6f44323c1c3acc1cb326678566c0c49b6e70acc071b0a304c3aeef4850878fc85053c67f962c76d3f18518b7a8ba432290000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a671c3bbf3fe9e3921a401e0c960ea5ba27e578c82625d4a465b4911c60fb9129f5515600c7e4047b2079d6afcc93e3348df740c5c4c8128db97efb6b4e6b885762be2121c84ddfbe6a5ce805191aed1145b2624b31bbb333f0d1c30807bb30aa9a12ce5c7b212e45e5a0a552925cd3ed1035e17661b844bd54c50fb792388779596974b2163f4f3257774389ad996b5a899452c8bfc55d1ac8ee204e2da0c6ea062ca1433a9fb2ea446b4d5c186d757c0b9a708c6aaee70f79e78569925b0c66f3f84e051ea4c9f26432464171f2b8c4ec363b893b47c233e4279c5966c17e623dc9ae63f708f25872db82d7854e055f1819a061aeaf24867c088e757b3e3b0f820f9cae2e26959879fa3504400be47e88aa5375db93e22205c39fdd02fdf4215138a41260d5ba3d5242f9eae36b76551f758d7903469054b3b111754e9112dd5c30dc588e8a3aaa2ab9ddc94dee88b7b18e780e20e67d4d2d15f64dd7956b0904723289a1d58dde347d49294e55049d34ca94121af680b218df2641b6830c69fdfe7844ffb23b9edf8dfb926b2f1eb4a2eac02fe5a66aa7f7d6b28496a0c54dcc6bf6ac769d48fed51a6c616013b44eef16b20ba74cbc561df1c51c038a75400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bbc5911b9bedf8873b1296349cddce3f8842d3766fca63b62e698b17459e87c6bb06b156cb757c5b5b011cdcc28a6a59d694fb69d2dd6ddfca9d065b86f97d115c4cfe476b8136ea80bf3ae0c0c3fb253ff918e334641fffb19b34992014cad12f40245374f77441f626bca308da73f13ffc2b33311403cfa313e847e890b3442f5b0c56fe18ecce6ad71f88593cccdf1eb11d87c57a358a16682091cc63a2ab840b333394886961b300e6323bff0aadf14e6594ab175184e58fac279477fa44b6d35e33c8c7e57151fa3c2952416db43c6c8bb318b0994a6e6d44c97b011888bcc514c4fbc45974e92b6df527b49d39cbf29618cacc30ff5ba90f85e9f3c732324584e94b43daa59545e94a33da4ae869286626c3cb3078fa07856ae081d21db41315691e17cac0ab0784c8fdec5520e992308f28fa1060860ef5d58a1597728492013ec73091590ab616cca92c68dcf3a93011465fdbd4a8cd6d8d41a6b88a1edcf5f4b8885906af866f3da180c01b124777adf2b82e9781abcd8180c2ead28cb537b064678b337482d2e66e5c31846b0d45934e72a93e5711280c07639ed75c3a730bfca89f6e727a1cde83f422c9336a51f044b1b33e763996667d428a70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093a28365b6cee7dabb9fbf2db2be4a2281bd463407b69b83bfa07158237f4e2e055db72f054cfbed8b7effb1d329817efdd9f5b4c7bf213db1019e4456a5c3455b976d010c50af42cab9900801249e83cbdc7ad8845865f66a13599f37403321988d4353d0499ffd26faeee88a3cc847e860fea4bf996dd1d688827dd34d6b35700edf9ae68d2e41079ab59d5a3c3ab1317786de980c1c59d6a16d9a228224832d5a0489512ab87f6528bdaf4ca5bd69c4c8c1f6f7c6ab5a0174d782e5bd025e206b2254492464375b6c8f930b6b586d3a1c0ffa2e48b782bbf60379f4c043c78b63ca762bee935a95df4b96985ce596f5d53d99dd3345ffa84121043e1302dba1d0b503e0e3128f8353622d170a8e9f3b006836e19de2b2a8b6a4766e1d67a4508ec7142191a71ea228a4e65127e3ebb587913d8f41b5fb5f082ab5f34e1b85b49c77c737c57e4e127f35463d4705840c65f7c28c67321d2837387e5b1af3f6cee337f679eda2b60d9c77a2e8eea4c1b3532dcd30d5cc912361d6110bef6740e579151d613729b656f5801f9101e238a883b066f6d3a28bffa4b9874e105e4f03505574ad44c126fa81217ddecec65efb96b5b085ca7d9d71d72c0c0e96467000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082d19b88b83a07a4d7d89910f6c64aaccdae832e57686ac6778610e1a25f9636d4f04e90cefb49db8866cd1d168a94a1399ca15093f24e2ebde023d6c4b86972b66c20b4da4d610ea7d767c561341243be7f92f71a52aeb9c032fdd186d5361633c9f349b40348a37f09096ba00611486b653e368df3d8cc6babc58de32d5b8ed059339eb058650ccb8f534da80b3c8bf33cd602035d90e635a4ae3623b946858dd9b9f46b5c8bf7848aad7a4e8aa45de79cdd8baa504fca164a7b26bc5bc57a94167df1f6fbb416bb8e7ad78e8f7c31c55f9344700156dc804275513dd8e73ca07be262278812b6a89b596eda750a50121f6afed8d648172d2a89f4c88bc59ba471a651ac8d892425aa66fa87d4acb4d59cef6bfdf7cb7c9000a38d9b1529fd4a63635a2bfd83e70c0e8e5ed59390ca8d7903da73613b0fa4da038377d47f5c25d577eb16650c599ed538698cf00f60adca2c74872aa2055595a0b27427f61f5a3057ed811ad121bd140ca595813658bf124684840c8e4f615c34a37f8ecf7cc7f6bc261fe470e1a531ae69e6ece4330f040913763fd15bf80e660d8d2f76d1f85ca041e8ddb373a18b0d328474fef9686b7ca9e8e9c24d503820c2e07f6dee0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000929ffb9615849e1446f59090d472482f42b6c2068b0f4e2f7e5ac8a16376ff5ad219ed70336d9845e856ad63fa13ab21cfba279c8e068380cf7436270fc5bd741772f3185cfc9306d04da00470027c3c23c7cb39f5df01d75e326214cdb64a397105d341664325ea761bf4d3cf8af9580aa39833725865885a2ebcace006af5bbd136d2ae7c51344a6b74ffad1f41ea1ce2cb4b508a019aa1a159e43ad465a8df6df134c5d317d4d783c579f37f71170842b0e6fad45b6f42636f60310d1942490f4f0444e2b27732841b4092694be0502c68052e3917ccbdbebf932fd6f2b687600b502435dc70892720a808c7afa5b4b49416b3c05e85ac9cdb704050549a415b6e4a051143fbf833524d70ac1e1dde26120c5d627a54e96ff86a6bd0aff88f1b984b845d944ef501bb946448fe874bff75caa9d511ca5863ffad3c594f17138645cf615ef8a8ba798857409f13287703ce0cba4013da05fa3bf20748161c0335b22c5041750ea96425b166b3c556a8ca28c1e92ef55990af34c3c71262c662f7ad90c1323f6c17343e4075fc97d56cff7cd0d8131497a561554acf9eca0382346ffcd259f4233230a39de1ae947e2068390948f5d79d8ab35a527819d85a000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ed9a86b55f72af24a55b5250e35c0efb94fccab4aa0862ad222a7da84d0492239ab7e01d3d9a90fc693c52ceb93c9b429c870f6e459f7b9b37ddb6f89278d5008affb7133c0ec6d1d8dcbdbbfc864004afca7dafceb7edc7690e186930e62d1bfb436be23df7b0b2f144fe44a0d86fec36c43e9205fddd716731e7e0e9516731d71510889296a2b2250a2f9b309320b8ad24c55bc06a3e4340b598d879ee1bdec0a50cffc0522e59f514a64b73c4c472e785990f1a672756a0aa284bcfdab9a6469db0c97e43bb91a2f246b9c02e1edc88cad8a0048160e7e974a6fc2b12f88e6735af484b4c8065c81c57dddc49aecddd7e003d24426347a979b0b587d051d4e709b6e0b35d48a4f9c14a84dc4cc1f1e4cd3b9d974911e0aa2d50ef20febcb8751452bd8f29c948cce2611b894adaaa8b466b8ca16d55b6214470808d1bcd24831dd4eb2e1679a7a335c238d1ca92f59527a8b9b24c5f43ae7b97f3793252a06bc026fbe458414df8ed5e5bde9a3cd50f1b4dd0cdb62264388ba412f777d309de9e7958f7376e1af9a1b97e646c7c8e8f5e1a39e6c4daaab9bfd2237a95d863bee72233825517489b90b25768c08b9c79330101f34884008f2c787c7f2f4f4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082f3fd0f09545d278ced9c720a6a9a0abcb671fa48f5cdc977f7b724126234d7b43f23c1914c65eaaf100390bbc84775f74e6426981c0809991431c9b5d3ae1c4a814ef328ee5c20e044afd2a8f3169a6dab153cb128549789719ebf68420f85c187258ccf8c9adda0ea16ac6a4ccbbb006b18ce707e5a003dd21c2e9554ae3c3191f173a11f8a3e37ecf2c1900ca0e12866179c0bab819694e06001ea2a5b9bf6df8b95c84d94955bc0cd3732a2387c8d2700d91c90fbee7a39da40fe2f0763fb4af35c181f3ed098d5b42ef5908dcee09526bcda90888c0963ea1d5c76fbd48794b09ef0f3a7af1ee5afec5f0ad4c28161597b8b174a073108beccfe6cf7d527f212206d38f34ff92e1ee8cb837da6ac83b643cf9487cb69d405cee5739ec3e1887bb896c6a9c9545aa4f22cf004eca50fb107777a1041e68a53a9f9170e01f4b014703f9bded04d07f9d7233ce7b0cf26474db0940dc164b677a1b2e968d6576ba4d2e1d2784af4b7963a184e857e5d825458427f4dd68ace8a833d4fb8db36661e9a9c2764d22463a389e104734a69060f6275af76a06864434a0aef714b2328514fa501cf268b8dcb0afd0b3c8ccaa37318d87e2e55f27780571cfbed1d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009262074be89361c13cf72c92062caf8ef4479c59f372570e7fb79253e27e7f9112695764e8956ed9e1f99d30358b5d07b8da281f88db57b68aed5c8588be1f33c25590c5c11602980fdb40701011a4e5877e9fb6117991d55113978ab66909dc85c01d368274434df5e667dce40be1ae4df4068da5f883549501d51b4c8c50a308e7eccc88767ff0ef9cec3b1ef38bb9d9a7801f1df6c49518e6a4ab81d52bb5483d3d369310f04d960f63f2ae873d2eabf07db40d6a4bdb05aff96940c55d74df6d73c08bd25c9fe79e3ce2d7c9dafc3179d159b580cbad3593829097c2392fb0370ff0810cfae509020ae127091a5269cb377ce96f4767d44825470ba277b4d8c5166cf6602268fe2a3d81c418ce7ac1fdb402cb02b8d386f4d3a4a93b9e57a90468c125e7e9fb39b8b2bda2559d259b783ae72cc5084d39a8877b728c3942d56bb30d11c246522195666efc7ee7d55494601e74a0cd5f3f91ac439ce5038694ab7b803547e4a4cecbb281ba501f10a3d0bf7a25b2ae1186c1eeed148e5ab4b78617b5cb317df5cd0a07d3e67f27de35475da27bd3aa7faa6effe82474354db80b3b079750565e0183091219631d074f6a92f4c9a9326a46ef903b5dd9f77d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011db817511eaa3cd0428e52a52c0edb00cff2693e83563e6095bad61bbb880e2d579344eb0d51ff36f17e3d2e041103e3c588a38c461542006a2d3c0dea6009f73dbcdd94d7469a3564f04afbde31126c6bf25e5e3bf1d77d9b766fee2194ef6249d919b5c09da114fa247129c4944890e85d0339ac52a2d51fcb0ebe87bf7a8333f27d696067dc01d8baa1c47aac0282b031d0cefaa1f5c0bcc80de561a656a8b5bcc9f7bde04ed059d62acc4d560b030d9207ef397a8f46950409296646f1b3a924e403d96179b87e2f650af32e5a284eb3dc3d45a859d7fb7d083cb0bd38c43277b92da1319ab59ffca401b8cbffda390ecd1ae5bdd48a6616961464402850223dd783a89c4efa43a5f8a3b76f6d7ea8db936abad7b40c44817c6c379e12bf88d84632ddbd7d3c16b16af7e145972a01b88add2a55363d3f1855ada26af52e244d243a474a8c5088a57b221bc03bb9863452eb6f268e657d380eb0c361964b24bbc0ebc2e73ce9d4a7d81d03212c6438d41187774561d2883286e4d3a3637e71a295b9e5b6465ca0c3421279fd6613997bf97f6e486af0ca598d6d4cbc2e773262d9a8e0bd2cca10e2c33d4c49b6aa94ca133004541610b31cfbf75fc0841000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099527584f29be90aa15a9d293d9efbfd8401e3727bfec3bd22efaf33594ec6788cdb02dae868d504e04f2a7de47134be0fbc673c735022eea36f915b9a803c82984fac2d5e8b499f86542a1291ab3ca9986bb95157b9c09b93bd9cf964dbedc5143fc292f280f822f86560bf6df2fe1fa0847321dd3dada9383d897b42c2a62148a0424380bce35d96d9b7270f5e444f3aa40563812582db8937a57827a7af2e6ae6707502e55b350b2d46e74d3ee4ed3efa9ce70f40f597ee2e0980bdfe7712700c521887b62a00e1925b738933db3d648b39fe199a4254b3eb3ca843a2edc2c786755badb95572b222a448cd32e2f49572b9378f4fbf4ade8e410e7dc53656e059608855cb9e8cc7ae61b582c4575249ac9ea7f49045fbfa26d6084f4e4808af36a4b2b964a6db3260201be39722175caae19d98db8dfd956b02ebdf22d3aca7fc14aba71fbfac7324fe242ee8fc69fd777c47f3cacfb7dfdc4fa6b3dfe25422048aa90f06b5b50328a791236b0752da73c5b92ac126db1d4728249e0b348dd460b6c784b3873879e819a8a5ed795fea725a2e93678d89020a6e4b29e793595b7c267f26c4fab25b2733422eab8f918c4bc2c2306257cb716ca56cc12d0103000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014ddbc5ad2976499efa5c496f63013c6db091bf8f25e49ed9ff02c71b50f45f7197033c53eae1e3b0e9728115632b1acfb8165fff3afa7fb1596ec9aeea9f5249720fd7c40ef073ab8311986e68b848847b9a5a8b5de4bfff7bb828af4ab096db0c58e7361b16ffde56354c2b1f916ba84e699364bb430b14a6749ebcada33daedbf51a561454d38b3e6825cab61ad9ade41d8c8d0de83199116f8d28ad9f00acde5816502cfa98fe19507a689a7bb22d87d3865eb90df2331bb6a8c9e45033b50457ed0b8117cc3863372ee8cec1067981195ff150002be57d540b5e3d959c7cfe37dad9414afaa0485a21ca4a5957998ba4115711b4da87798b559f6877d31c72485c3cb3995b736e2522e6465cd5e840cf7213bb28f8c470d888a5dfdc8976fcf98f0b917febe2cfd7637d829d6d39b4ae9ff759a4cabe8100b3896a02cef6b5ba79595e976cca29943a825a2b476174744cb080cd038841a8fdae863745b292daf86fb096bf017cbffb5d033247730be00d6b577a98764e104083749a790e9150ce81c03c085937ce6d3b9092dbd19712cabef4155f1e9096ab62a29b6a92d21b0ca2e6b050e09ff947a8a61a262a92904d594c8d8e2b570e398749208af000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028d158064de049faee643ec88fb62f53c29111bfd659339be144d034c6a79c6ea50da6f42c627cd97db15bf6b55ead7df8c60b6fbccbcb4ca7869f3a24d2a442d6481549ac19c14705ade6d4ce7f72c6715ca9e7957c4520b2f20a889890b8fa10f0626878858f89569927f6e842c1a58e5b2f578902ff11245cc0ea2fc77967bdf8151b12c64be1282304dce0cefef06899a7e55032d8e66e7aea3d07c7307ba0cc9093fb1090b3411ba997e943d3ad3ac846da1a92ffb17e17f6aed067cc4c1dfa6097500a9c1275d9880bb6155ef6fe752d2cc98e14ef039c7e0abb17c1ef2a3b73d58c6b95602c9ccda0b444234f06cc82194698d85c0edb56e20f2b89f1b08d5af83779e256510eaaf34f5f4055e364d8c5f65a43877b13e67049a3a358abc5ab459417e39d07176833cc2da2e3b4abd1dedd0ab5a23a4ddbd48f41de97a19fc3da1d7ec73913f0605fa6547ddfd75b27fb4da41360d70209a9869e40ec1a126a26976ae2467251262f684ed9112f27c3ec00d02f9c803a30f276b4ebdfa724e58975934e4fc07edb1c9235055e168abf266a1c97fe003298cdbf55fd95b6d11c7abde7a10e4289e117763a0898dcde2dbce88e380b88042efbc495aebb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cde671ca6eb9c7034bc16607afeeb47ef721e178d1493dd4f52b0d61638429e453312f51c564200d0e1bb205a715492914e176185e590192927864a73cd0c5d11f4bff9fdcfe970178e0971aabab388e5d325fa2786bbfec868c4da156ab283a47aa5dc14c47bc4dbee9848837d1333d3b0eed04b17ddc32fbe8ab97455cf7550f3a42c4d147272335b9480d91e020581b4aed836387007c664cbb85c87277fc0b6c8712ef4eb2bdde3beb198616787f07cb25ef33b7a4f71fbe1af23dfa5c609211916d2d143fa59fd555348836a82a8d850fb116a9fdd01046f6ac53bf39e5e781a9a94f0a74c29e8724478a4777fcc8868caa8a0e2f42601efad666819dc455ff19ed536be8ab373aaef19280714138bb32defb0351f2c6f3afaba04bf8d4f3ff2a079a0a44aabdb2311cd72e86263e2f087fdd8be1767fd55ce90004281e8910336120b104a02943f161759f1b71227731df8e6aff0d6d9ccd7e7f02b9e9f9ca6c213ee2dd3296c7f9ab01287b9304d89c7ca44e3d8953f2c9519d8fa35e0ac6cba2440aa5eebd56bc24e195d3707b9bb612006fcc8f5ab072a164e70a16a87ca4df87ab34ae0c97cb6ed72fb989b8eae5a823bdceeded92b48d9d3ce350000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3f5764d6c0bab9a7313698097eb528c36dc16c3cccd5bc859628d5deb82b3dcc5bd9a91c27ade29216e314318ed5c84090f974c2f1f728851f92a03c5368fd9aede7ab6e10e4933549817b6efb9f5c31efc82c417447ac681cf2e8d08428e43fb0d9b280b05e52c9933cb8ea09ff687d9ef975752528102c49bb2dbb69d92c57a5603c490862ac24be98d9f3aac6cd3656b31f03d2d7a4d2fd88535e52244a86306dfe40d8a38b48573cc4e2102f666a02c487536264da26b57c870f3be35819f262aa4616fb603edbabcaf03d88297e7da7ce51d75ed53eac925516a69991a73508cc0fd3777625679e3fc1900f511dabab1d0edfeb31e8e550d413130bdd28ea8145503cecf3a2b2b05094a89b2a324c26222cdbc3c577366b1f2553a99f81db81fedf9c1a3e1dd263868c7da0b66d59149007aaa774ec31a67f393f59b9f97701a87ab3d4191cf0b3ca7339df07245796a23c18d861dd7fe0bd56242d338c6b7cfb8ec7dda91315b95c6c20eda33e3202e4f8db302738c9ffab057379d7b4fcb6ccecd59b3425a0fa5008922d01206a28d04d01da7e5e7eb3895b7fdec16677576741190e885d2b35aa89f9293fc5ae5e6748024e6bd5dbddabcae43ec940000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000191059cefc2675eb3b4decca22cd3c734ce459c1c7295f147355e86fecc3b49d6377db3cefe474d706668207da3814f5dd58268cfba104b369caafc65d7b80806caac857be42b6a11ac98cfacb2bf10b95dba8b43da9048932d23b485290fdc70516a2606cea49138ed22a401b224cb617e6e46a8c58b4176b896076356d5787255a9cbc39035fc97458d46e625c460e3ab9fbd5d6a9a1cf13fcfa1bffe3aebee7727483283e6a5958cfca4d607fe44d6f4b1ca616ed33ca46787ade554ac6e235749415792180e69c5ef409dac824317acb899ac609ff0418ee5b84c1016eb2523fd13792e43b2e5caeb5a86bf4139e059929b24189c370b771daee244b4d8776e7e16a44d47fbd27291994def20bb0774f95201a0d5a753e791cb6d9b46874af432610c89ebdd3a8327f2805f5dc3c437e26b11f0ae876d8dc104f1ef7081f8043c014061ce496eb09788177c628512ad3afe9da442368717d8b563a1e7c8876d86e9cf5c5776806f4514f95b95d28cb3f971cf30b79eb493360df7a8220bfd89aaa59001a7452c47a329c274339a7c94f7df6cdc96a5df20c83174e8ade5264d3bb6d6e1570c6aa5e9ef16b7936b82da4d2245dc5c8597d3e4b30f3a4afc9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096356bb511dbd2ea371111489d691c87726620a4ba5ad1675686e885c5356e78286d5bf50659ee65e01336fa9e52bab759118c96211e5feafef7014e795ac719f3397d69a617ca197872c2d9279544ef3323e9336719b9e970a3bdbe5d5d8cde6a2e261437b97ab65909ada2d10338128adf045daed78bf859ef17254f892ffc0cc9f67be72088174ec28a5ecc5c3b86fe7220174cb1d9df67960028fbb2026a7964d385a30021c446d79edb179c4201689bfed6400f55cefe1a2bc9422f13662b88ae5dfc48dc1245fd0441825d73bcae953e7330b49e359cad76221eec0ce4571594280b6d6ec113cb2b27fec9eb3ae72e694af812ecac9b8d89f26f7468b83740dfaf987f5e8d9a33bc81c6850cb063b846c3c627aca74b0cdbfa8a396222f52d3555131ca50b4cf6f4995e76f5ce92f13d047f13049ae8731d899eb29e4a52e92e279434d26b22d06a532ce902a329281cc2428516b350d86ad880e9ce83a96a2cc1177842023ff2c3be65045572200c9b9cb8802555c34a2c7459ea701f497de5e9ffd6ee001a833a39f9f1507f86d77713f7d412c5e7657005c873f8bd76a8c82ed137cf7fe578bc39028ab56af022a55fa80a1cdd4f811fc4b8e2fb7c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a76e3f780fbe584a05704d4245d5671f70ae225e2c06fd3cc78018872830276d888929434c1cb15db9103c650e53fca00d7eecc32983472ae731339693e08919c1483ed965f9a7a2d631726c9795320943341ae05c5ecd216bdb8d53229e4bb416d951830eb1925ea746e2257a0cc207c488dd3b1cf0b41be16e78168e496c140f83d28f4de33c0acfde2b9ae741836d945daa2a67e393ba048f5edfe7ecc860014631a6aaa63cf4aec689c90d5efb52b7025d6caa151c9f04724fb269b4b47b18f7ec9f873bde10a5805ce98491c5ef8b82eafc456c61bea8feccaf112f76068885904dcf93e4de3309cc532b28e77af4d396e86d92822af3d85e8b9da22f624e9d06bf49e339ab3f449440c7d155ed47002682e8a1ea5f642598f6fad4f1d6f5f8ef8556bfb1a11e17ae45b79af7cef786a55f6ea9d1b770242ed4d0122b1d0e0215389e514861c2046f95311aa7fd6bdd283b7707888c1a37c060fcc686b736185af06b8073d9dae94eef3396277d5754e05bd2634d7c247f37098e762555a7305a5e0339c8a3a23dbd2ec590f6e5e02100f6c643935c370ee747a7836452709cd0617e45fc74c5e136110ba26e4332d63caab331bbb2cba0677a7141e66200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bca856e7a67df3debc904b778c72fc0cb25f37329b0a3eeec551c1fa4353e7970b3f1f3ca665db6da04cf32dc870898a11b0997c784d20a131ad904df29ea790b06971568de69a403d87a6e185897074014c20cc1696d3d4e3a2dfc06bcfe61c8dd39cfb5291642bee82aed19b57a08026027bfe31f2930a6d08b9c28e626e26636d62969e1ac7a5954ae882ba7d2c99b50a3e7e2a1d126965e6a5b118f149ec9da6b9bdced4f518f2a8400c22008ddddde955abce8a084a071d2295a99eccf2b94d56279f1c587ee8dd5b7160153c0303336d6a1ad2ccd992f473e7764752f8d1613e8cac616fa833a9ec2c6ea122692174ad775b081ead4ec370f9dcaa685d6a0efb32dfefe6a1265c5f9ba93d3290d5a3580a4abd7bda701af07c86a21085a722f1159147b0f9e3758cb2a80bfd316e452c65b4f0f3a888f40af4e3e058139ea154063d85cb94f9d9f1c45c47cdf3e191fe9d6d13c7fb08ae3fca107f53ec7fa424078e2f873b9b4dec2b9df95da66d743b733e7f0c411e97fb691099360383483119690e92083cfbc623aea429f2d4492513b7f8f46cad9d38626c41ff2b623044936d74bda6a5b1891f96888bef0571e5f97906bf6f0f5a785ab0a7e8300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000794dc74191dd7dc3de12c02783c475ef535774d9cff0903caaf60661a51bffe33d22bfcd527698b3b147506b95eea1882112c5ccd6bed5bab8912d82ac655c8c1bf7353ed56c7677efb6f5ee6bd3a26671def3ff73d7c914a2d624cfd541fdae70d700b00f97b1123f8217e6367ecf4aee3fe55111a96992554f0323534489cc11d25c6fb341ab4f52151b4ba4e422bff95555fbbe0b914a26a0d837269bbea2162631f0eda06be03777a52e5e607776554d626477d32fe496628cf0d826ddc584da3f69ba1b321a38896af01561ed683c9c74e9602a31583278676fbbc2c854bdee374bf7cd86e9557e7a2a9f041d79f5d3a01815fe4e88f6c9392e7bdb74afc7722f71bcfe28a28c2ec0e69b745a4edebf3367f9f3fed7cd8fd02332408c54f06de1a344fd8e706bb7efdcf34e75a43b3a3c38e87996cecd781a0cf4da8538c2299a73a3e9559e94ac3e072957d3f1c257e17e3bcd40c5ba2847d05cba9df564655b31bf023c510ab0ebd67e9646eb1553f755b702fa3bc15defaa3f4930a55118efac217f31c68b6e2dec6607b54c0b731be8916ce865d924abe383667313e8e2f85352ef3847ecde22defe4da588b1acf03b75a0d4bd4f587c77048a5f1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084691514ae64366f3f1454af8d8d02f5c526718fa8208f8b69bae55c0a9b5158b9466c736b4f0e379d28cebfa03f046420e4c661fa944d1435e5ddf8e8cdef1f2f3ce434afdf7223a333f3a9b8393b388768d45ef572e298f40368b6bf13184907f1ba20bdce71535f4eb04a021a3319763e1657866614ade6678c04fb33da90341ae0a8b4f335a314a41f74da6eb2f40e602e5ca0a3dc520a27472157f75bce62704887eaff7eb45864013c8216e26532d7c9e82e79b31dd926f775fcbd2fda1538dbc31203ae720585fcd631b19f544402ee024717a71d3ffcbc5788f888140d0a885d339432e3ee3019436a7834839368c9325196063b212d4beffc297bd1dd470c3493829c1426343870f8062da24ee5d4a56ef5c1bf754a04ec8a9565bfaa0647546bb0813c0d2439c34126613cd5cb714ab643129a78f87f11e8ed86db1e738ceaf0a07b6ec60fd10f796ff0907ff78318365d1bae4508c8b8d772d46b6bd6a3a2ea66c814393d5c56d1edbeea1d6a81a4ed5af9bc038c992489eb48aaa0b35dca5e8069a4ee7f6fdb1bd4f605db160bf6df41ce54f9546d9c398108da1338f254744e8420553ce3b1bc401584bb52eca4effc964dd25184d6e953f6c1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094b4284ea16886824d68ff2dabb2700c8fd90fd6f91ff318ce30e8fd42a5fa1c36e57d9619532d3da4ec811c06a61ac83058843f5975cfae24db91e8bd7e53028322663d6ddff151dca208ffd920812db17fe31ad0e227c016a71f60d287659b259510ddd9ee741611154b442a17fbc999b1f498775b84122a88c6e40441a256ccee2a672f57cfadf71e5d4b2dc537157e5356128b89086f916fdcce32c527d830718a824c2d9a3f3bf4a0a693812680ffb0ec8edeaea79c07625f01babce7cc6e30401086c3ef26f0068e6d4081137e1debef1debff014fcd167e67279015f45490d6aef26040967e374c0d9f7b5453da18cf78b89b1c8776886ef81565b9883ad90acac59e2acc805bc93de9bb63abcf6243efae6e74dd5d2fa4922948de5cb01c423ec1d2a72caeea912bc768f4fa842f03eb604246334e040580c19fdfaed4154f288de910c0acb51553becb44cf839094d33c4d652ba4c39a3eaab1109d4d586a05f80498d873015761fe55a45842258de35f5fc7b89754ff02032055a1604851a776946fc0d5873df717069f601d05eaecc98b21f3bc7594b1d8704c4252053724331a8298f5160db629f90f746d2cb58340701beabb9e02c79d746ae400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002dda28cb60013c6db88849ade28e7cb2b50fdc908bf80b5acdfb233bf0155f142a9968792bdd44642cbd1acb8379dc253883a1174a26ec34a631e093f440d8a39d67646251f42ad832f4f4ea91fcf6a8f87f7a35b4e6a067feb5998da46b196979fb39dfda1e3577aab63aa2969443a9ac62093dc33cc01d1dd81420308bcf2bf7f789e06ea3734820160c77411c47aec4ee2a00c5be0cf8a16ae25f298e12a69e2bffce2f968ad5bf7eb76d90aaf5ea1679abf032ef6c53a49cbf334e03a079db239887f0b9828b38718a6691495bab76eb7b02e0f7d1ec59cf3764a36e6d6a5c5fa117412ff7d8b7f296b1407807d0762f38169913fce391faa5fbb05ff50471f7d595cb23e81511eb13c0180dafd3701e993b8380c0c7b626b45ad479d604100566581184717362822d90ac50d11b62350591f7f375cb030fc6beb371fe0229a02c872fbce9b81f33cb6f48c1177f1412a1dfbf6055aae821a6bf50b78c223360de5389db2fbcb2ae839f41b8c5158e89789e67383707a6115476c0c561a900697d50fcbbb8c49db947e323b4dd2f2d55fbeccbf2f0226035150588aef127a33e1bf2a87f705c6b4d17f9cac0deff3012cd5dc66087c556da2035abe56f4d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089dbc873ebe4032a34181a086c5791b429889d251fcf3f79fe7dd9a9d83da322be426ab0d11e54809908ea2f4557f4e0a3f896b3489e250b8941a61b422af9d824d4c03e2ea7c6a0e17028e81f391dd35389a0e7fdfb755b6cbcce14deae48732e9eaf91f239164209bf983b1601ba012532d1e032072ea57df5fe8b466ce590a0d2d3bf4966e63b8c711050b05f1ed1ed6dd14d4fbf90e456138b9fba4285b2aa0a1df9fc9406ea11bc600203465742fd093f0bd7fa40ce6445e63f56d3fb967ef7d5471cb02d03efb7a51762c4e716cec46e31c183d324108ce854ea005d74b8900f7488c74bc7d84c24e2c0bb9918a15fbfdd0ff5be2359c72ea0599b77a005fa0602481ac77467b78e2c57c5e85b3045353f997db064cf61c9a6f29a1ae9bd6306e3713c9f274fc07db2115b0d2c69c17677d4199ff7b39661f25a5aa3b204b90194d07c2589d8d93af63574ac7fcc0af79acf70df9d26d0c16fe1d891df73152dd05632020451497aaae4db9c51d665cfcbb5e300d3ecd1adcb24d3419b48a8d8e261ea06699d90cca84594065861cde5fd8865a0f8a007d28dfdc84b96506e3022acfafceeb1d73f0990e14defa360784b635f74b46621f393e377dd8100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f4160d3202e06ece150367c30d1670f8127e5879c26429ccd543cc5a7b3975ab60b0cf909a15fdad1ed0537e58ef8f9073e23f6557dd68666b70c0257022607615cc1c77dd285057b1bea2a7d6f0712e7a7330e97d417d0b1a43fb7ceb5c0a192cf160cf956a6b175a45327e728d13cb03d139770126e900338701472d956a6c94ad4446924846bfb55b9bf98c244b4c6bd97bfac2880270c5b7d549ce7d3feb8693133a69ff590d129ee7b4ea294b103ddadb77f9d33789561bf58c867a963e91455e3a03490a7a47be666b7119a70e1b0390b7e98d021676b15b6394b4122cbf8b76cd18831bb1343caf1ef9ea1950269bd14cd4205ed63e811ab665e9704720e3cbc0d42c93862cdca7c598333e4c3f9a25a3070f40bf50109d12f041d78c1504afe4ef548e15c8632a65e3a06d517c9353e34a0e04bde80a3316aa7ed4240e4888032609fbb8012fbe4786d3fa8858bdceba441fcc0da2ade063f8d7f6d10d6a01424b22dfc70c4be07ef4a7ba67b5b177d556e29a9dcd1e83611bce32a4243de333af9d792d46f6f8628abd62d8e840c9f84ef60712f11881bbc55148f07146bf5869a7a2e790f37ff80979bb6353f7a45c12c1088b20ea4e1c1adfc8f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a9ef029a8823ec0d69b2517bd9d2100390fb48c03a59663b439d831bf3fc47fbdfe870f47ca1506ef555185239f3155b7e930dbb748a154d61a47d1b47c22708ac03da1d381ab4f0d3004b0c4983ccf11c51360c7767f46da0d3febd8d5c27ee24b524cfa7550851e17a30cfb89efc3d7c9c1d8f3192368799140c4e70f18b1a18666cc7f1c14dad1cdcd25d403170f996d7445aaa9473f6feca22b2fdbe8a6c6bd5c9b426af22719702f68e1ad4f3ee2ce25be086f23d81264f5dd6f332adceea67e20a3a1fc6adb810097bee7de030f8747518fe71af80f0abb8fa8666fec21b7b908c5cb4c08869eae8dfc5224a99b7daaed88f078c369c7404d7687e5460f9012526741eec544bcee145286e2148ccca08aa28d43f85eea66551cb0136e10ad1dea03bb8c9d7ad51cbf2f93a4dd9d6536ab39061b7f49692642a10d8f7fb80638f577cb3e394ff67c080b90c23d515f68aa163990465bdbd77326d1f1171e432fecaabbb177b87cad1c41ba0b7d4f48ef7c889d5cdd31c1bdccf43663591d29a51b5d6311a5d617ba8ed00f6312aea9e8a88d28fc3a8373f24611f92a8384a7be1c0214e1de80f0790b31c916710068cf260674562f609d4d1828449e08000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098607e78d4d9851c060de13c14a8e9d7db546b0a884bbc1947ff6c06f522c07a1e78ff90455302c49c5867b6cc60953a73c7a9ab048f8bb710fe49ff920ab8cca32585f64b809d23900dbca5b86eb88177accfc01be6fa11333e57a2e23f04c79cbeac866dd287d138e566f705edd03a96dda356bcedab29fd51ab35b6ab34b062dacb38ba3206672d4d18d2c58c5da750ca43f8f170198a218265455ea4d5ab7e63dd47c3634799fd208228bd271f14c9bedae07aba943de1d6ebdb72a408ae96ffc60ed55de54fa628c1936c55ef07cd5a48bc4b830ac30ff4e88034d5bc1bdd006bbb7eefca9136b9a78e95010f7462e390d2c9d0715361133e509307700e9b6f51e03f24c4864545a2d386694073877eb4bf99d6662d0a913abd2e7e47f7c91a2edb2f72881cff910af6d909dd4064324ee7d778c08b008799f8a9b5fe1983c86fe1d7317521ce17dd56f860bdd59555bb02cd8cc9a97497bb2a8c6809a270088a6cbb5c18258dbc6cb331f11a33f6d99eb8608b3212a2a9f156dfb1a98c73115259678f421d4411599e3d42fcbcdc3f85322f89e9079cab2081cd2b6a3c9bba683685f74abbc3215c8f1c2dace870d17a065bfaa0cd3f0f7a8b3c4842d60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006a920d1f0766a4a63d6d26867f8dc11eb4436c6ba7920326e8bf735ae71135b56e881f11281229b28bfd90fbe0a8562e0419cdbb688dd266248de3ef1f6bc7d52ac4a85bf3af75972a279af84a77ee6fb5e61bafe93172777e7a43281163d79400a40c63c0f9452a0489589ae1666d47502f31d76b2ab61a4a8fb8f5cbafcd6263c23ba8b940c126d071992881ad736eb1373589163b38207c42fe2989057cd310ffd25a2629a30d5f6e2e3b2a86f02dae65416e2fd2773d05a656ee1a1eab0b613223f7505e520b194c5f5c600b4a5070f783208262b52372e2bd49e1db69bada5bed73e5d83a76a1397ffb867d8f950463beb72e59e861d7fb636d4785c50e8d8618a6fda15e2a2742dd2279573ef79cbf9da941c6226c78ef450a2117f92f43f40a87b83c2e1bb1f79ae705d2b376dbd75fa5b878bcf91fb7feec111874cebc408c7de5019c49528be66f03cd91e375ea00aad90785bea1feee09247f5f17acdc7b9638907854f38b6889f8fbe75941828edbb47b30823a5d1b4a7cb5cbe5f33806018dfc348ee70ee87727280c5efcbe8d16d72f8bdc0f4840c337da7385da9ad789580f0fb664a9789d61cf8f783b40d9c4475447cf099b8dbffbb1d50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad09d71be41416acd09b0f8e551bca75d0acda594f4ed8982e9f96ba29fa30c5a18a4883a5010bf7d70d9e93cb9b8386037062112c95461d55a0de3871131386a19d5a7f45b64bd58af3046d9e8a98b7ce732b771cd527b090f933d363b89eafddbf269ffea3baf74baad201c6a84a686ee18e45c7e74641631e9d5a88e506a23f5093b2806fb5b9c0c5ef66620382eabae27e1e6788a4e17b123fb6dec5085329fff4282671515f12331ac1461631ec971885f324bd27f2c7eda886e2f86183f9144019aff2c738758f3ce9c38f5c9176926425aed7cd3206a9cf1fe70a9c7969d32a4b9c47d01feb4b8ecc9d46040ee1da0b9b5fbda1234253a761978a70aebfd67ba707fe7daf2880536e22c058869a7ef1b6ade20cd4944174d31aae40ef2d06bb7e7da49c5fd1653cd043f92c138a1dd351fa4dc20c861128df5b087b51dcbc69c2fa1a18e70edc9622a9e8847080976171646f82a4e972385027c4990e04d960b1522271a13adc52ec9ac625cdffcb512ae7902c37d023ab9bf0abfdae825bc85d578f6d8b2b908f7dca50455a055f4baf44eb805889af4440129548c699c9158e7d99c2f8760c748dd8f0181a3630e07d777e2183861fc1cf3b535f8800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dcd7d488ae0834b897264e2229216e4582ea7f7d003cea808ec9a421ae610a9b2952c056d76238ec4fe5c70bed0b0109b324555e8f69a08c48e29a44deb38c9c75e6696712829dbdad3eeafe865b62474419205d8951c0f23bbb93726b559d398153894e3c7e2ef4d7e696a76d3f8dde0b767e1fea49135c7f4aba63cf0becb0058d206532b2874d0c7a7dbfd2c453d470f179dcc43f879a1de1363226531b334f4c5a2b7d788acc9621c88dab5dfb414182e975718396ffb34998a0b4484951eb990afd4ed5f88e9da18b61c53213f4e7719d12474a66a8ececf676e94fddca3a94cb779cb9c3e621b7a19d5fb1562247085a81f4777587f8614de9bc9b032cf48a7ce2811bc905c9f738e17b91d52a72fe3ee2ff72469588626927a8112d23eb829a629f06633b139c49c600d27104a6eababc51f7a6e4ba1f383af7594ce882bf885f5934ef41ff5e58fa1a5c391566e2c0b237050cc4724eb63ccdc06b739a813898c9e85f9a086245e3179315dddfc02269ed2df78b22ac6c4dc25f306c81a160dcfae5d37df36f418349aeb5bb8e52931cd85fef9bf25d99b7aaab9024a8d719f6b4a6579665ece615221e21ccca3da7a7c0fdbbf43aca55529e36af700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0a6af33332e99d0588fb61f9c90f1515057887b7e8341bda8e9b826dc5b85efe772a8506f933c69524f9b33ca3e034394dbe97d17b869f7dd313125d2b67f21a560b94d89e1721b43dbc97b1c1db94e470824e0460b118ee006f760091eb227947c4fd2389dc06846bcdcc65e6d118c85354c5660cd0bf6fa91fb2ac0a6d2f70247cdb2df66dd72a0b74c8f20f12a91172b236d2fea36b3cd40f23f2c281d34bd559ff6b3e849e6edbbf08617f69e59b22089a394e23ace50c044e8e8e0faa548a0f28ef149e48ba16a81bded57286a1acd6b2b7444ad80f0076932e876bf21f59cd9d5246090b9e50329d48b58236a488a914c5283324f8966f00305cdb4218b8a948b5da49a8400d135ec5ca7728ae88e43230bb4396636cfab22c948efd00ab0d4c4faa22d2fac40f0b6fef623108bc0cf088dac460bb53e993b97f6bb156d19552c2e5b58a0a77b5c064cbb3e2d383bf98c187fa3a8462ec02b9301cf3859d18c37c2495791a770e3311c2962152b0108d3776928cb0320c693354b0c17962e6311ee86629595a0ded9eaef4b73009de5a6ad2c7b19fd12475e4d889e5ad88c25aeabcc7e3618081fe2a5bba0f1e732a38028c68c9f817da6faa96d2f00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000278d948632059d04baa905c0232539fc4ad11ce49bb0d8ebbffa078527a028536194a2438831f5435453f0a18251399966f81a3d3b29eee8488a763915119e319b77899e1ba3a549ec2dfedc9e77f1faaafc7080d82cb0d25ae9ea1f9d5c024a16c85de55d2d9aa460b3aacdf7964273d269910d7783f0c4e2b7e3b09c72c4096fe0485bb093a7dd32a1673717043e611656240162dcff2641a4765c223386983e3e84d039cee11176006d87771eb6145a2c5bc5a8c5bc3dff6c0fc3fd006a5d60c522f2ea983129a48a046743447f1751e831db5e1b965eeb9d0b4cebb593516b701bda2ee8db681f500ef760fe96ad52e8b73814f58d8e1ba1e30db8d4bd742174630b689b1f8610c740cfe343cc6efacdbf226fe034cbb5b4cd06d0594c9a182dee7bc2af7507d5b2144c6da71d571cee2991102dfb4f062225703086c9e8382e3bd39d0fe64137e560450aa4cd286818892de7765909886dabb99cfe209b0f43f6b48fa10bec1c2acd65228f6767b570182bf03b2fd4edba9d3dca02dfcd3aaa382057caeabc5ff2f16206e416812412ebea75a90bc2c5f1412a936408a147b4005e850dab937c38a3658fc8f4ff8e3112b0a08264391c0f8926bf5c155800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002621b347c665d47c06cddb895cfc48e92c7ff4ee719f61f96299ef87e01dbfc84ef61bfe6c1e484c49ecd9c67e2fa617182911203441ee3641693810fe98b13a056152a2524b5d7f49ea978175a52a92869311409a239232c1389ca03ccc5bc04e331ab3d0f86835fb0f682863838a02b2580cf51ef82deef09d206688e8982db52621ccd5a8c8984b0714b0f317569917e93a95423478819bf8ac31d84082a48e8ff6015ec9a42482839317eb9095aeeed0568f9e6d6995c2a881cc0930d529494d5dbf22e0dd445be083b8665ccb53c772f5527cbcb70b4b645c40101252cd8748e1e6db7a70dd6d07580438408d6b0ea3038d0490b6f992f5f329500f4fc96ae117dbbd6151ee51188a944c9057ff38e42ae18e884359d9633405a558bbdaebc9ff8b0f24cb27ea159703d49e8f44a9bb09777b92093098e9489877b2ba5104fbcfe3693305d7596fcbea0a664560fd8d20b7e2e88f7941b90a2e5e6670354a906b2772ec72420e4d8e7ebd812ee3d3e3a9293585deec10b09e547b707704f69753d7ba5f9492c20aa2bf20ce34ac2794f539aa55ffa0f842c8e7593e2181a76ae272f5dd9a1b8864322b86d0053cc0598af980b017b4bc5eed19fc8df6150000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000936822be08d6af5cbd2fa7b9b60378973e0e74171a1fcd58da72b32adaf658e517c146eb9b5b3a36c3ba1c578a780eccc99eef478d966deae2bfbad1ca509fbe537dd4d4e17c302d0c60eb93a5e48e3af0833efdacc39ae9cb8e3f43f6b3c434f7f6b15b0beb7108f304e5ed2eaa87c1ce0a6d27dfd58c029db0ae193dad765a467888a69dbeae4a81108b9c88d7f0b944b136d8504f980d3a92aef869bb256d8a7b103af24d4e1993b77d1a568620dddd607eb42763eeb68285058f1cd98fbc97e2850a7e772dd5ffd57c6fbc9f5cda626e1bf2349d66b134d1bc441c64181bca39e1320fae66fc40179789bf586e118aa14b4a11718a6412af92723b00c3817dff43f35ba16f5a4d5609d271378283740ed422d9aa1415c233cd6029c74d818379298178868f75456af3f2d2dd79680a19e4c24098a02dc4870ce694bf5de256ea7d36df5318e3384c2b46f68b176d4a307fc54d81d3e5a8691c48c2877d7d4c0126056ef0c9d0fb3bc5739fba43e199596a5036f05e942ae6aaba5d10e412dcfa560d0e46a5a012f2925f40fba0d5e462392f0f519199d778ccc99d2b3b29e4ab7fdf21cb5411364cc2d27c7b73e5071ba84804db5a840dd487c6146024bc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000836e4b15ef5607f3040f0b0c678976c5e85b1fde35777e05bbc9edd801400bee2908cdb4bb39df350d205833433a63d0b35ecf966fdded1ed2f922f0c89bb5905050558981a622d8a349679c2be10e4b1a955a1a7292e605b02c8fdba62f7fbbcc1ff6cbc168a9ff2c1f65cbab4d632f1fa2dbcfaac44b0ee8ca64afe673736ffb918bd89a631de0e1308501fe24e1647ceed8718516506e6806edb208fa2048d29bbbda9ce17213175307b453bd1cd93b599adff5f077ea65848dbf6b427cfb784cd5f886106b348d625f20bbd51a782b8669cbec64ec4b84ea642b736e38858e0a9547eb5bb1fd27933ea1d2a458d3783625fa5559db2bccd00445663ead41ee19d340dfdc8b044c349eb305737d0b2fdfc9da8cf5bdc57bbb65cb1eda5ea21a2c9682765deeabe3f6ed67106f735a8a8813d20bfe52732b0b36ed938b36c5d2a5af2ff7f4039c77b930901d2dc15980ca46c4e355a68909eabc194f10767c6e23b0c4d4d933162cf8e4fd0b989cf670f872ad70985cd2dc896ecdf07a44c522dad4180d8addf7b289f7e9aac3b27787d4d9f1731585994bf2a79e7a9cf40b51dc278a72769bde0b544d916d86dad36fd224ba3c51952936c01af6f779dc2e00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48401746ef12928167ffcde655668200c8b3125fba78d9bf891a6476eca409c119751eb800fa06995439844101ce3c52adb3a2d9f172ae5eea278981552c6f7d5b22189cdd4887436c6652c8d546e3b0448cefb4fb0dad27bb74636aa94862d311d30869f026fe9e2d916c07784748c4fa12c4402f3f7d533111ababb7a6f685d29f149b170f9f67001a91c1d5a3dd14054dc5b17a16f3e5c2b47dc69a471c65899410908afd8ebbe9c102036ee6d2e60ff0939724f391166af7e513aa8cb6e2054e15f33116f8270780685e1a794527f69e2612ea33489290bf0b5c8464e1f371e9106a510eecad81a5a36b49ea54a9804cdf776242d5b7fbc2892c16b8fed0f78f05af9362c21c8ee518a6eadb69982fcccd144eb043bbdcf06f7fc5e6519b2b351958a135f9c470aad99096269ba8bfdf539843ecc81119b30bee66e731658fad13673d946d7b39c2fecfe21256fbdb5a308da3c365c506033473676deb76d64705f93def3b74b947a4a829a0b233729219ef6eae8a61e5db48ad33e61074c3bc18e394030525807807f092140d5ce829f77bbd4b7076ec8b072376b5a13e135401d7bae3ec7e122244dcc842b307c2df255868c68bb211ca86accd89fa4ad4cc0f14b07d123a812db805d59771e71d8eb627e0012e7783427fea36ceac7083be2dca1051ad69befd03cc3be4d11ddcb9a71f0571b5752b30d4d362ddadd453491f481679adb5da97a4a1ab070657ccc43701acb3f38dc7b22939567e195f40e9259831389bfceeebe07df3708941fb812ebdcfac9eab6610d7c91b20f2721a4424f9582e32c5664ba634753cbf0f68510b1a89013ca3d2495aed305391a439c109c0ce3be4991809f0a7294c543bea2b448295f52862486172abbd1f3e4bba3d06bfafd4073b5871db06c1215af2e39c24d9b94dab163dc1dea7a095d399f4ce1eb7c1e2aad67a84f242a88cdbcc2c991f48840d0409c6f519344be45b3be12208521fba58fd7ead15b7dec4daf765c1fd42e07c8ed7407a0f2905c9678df59d116f690d8b65a4a1b9e651e7f8b03e2bd79d6e724595dd2dffd2eb494e717ef3166aa5c56ad7e7e6c8f41477cdfec067b88b8031194d07864658e0640da9f05222440d98c87c189da70bc6e6532578db80754d249e30f4bf1be890b07955387d020fbcd47663397a10f7c45def2852a2744ced8ffcc4522d2f7b62043991b1ea1b4240189f4b397ab2f72f9dfa4a402fb6380f72c0a5d7e4e638ecee3a3f919305d26045c18b29e48f62bed142ee41b960b8e172b09172735f745feb5e9700292805106e432ad4b367423090f1ceb3dcec48df7352237cd1f5eee1aff78f1d702608c27c52d6f46b31c744757bc80ad1629fa6434c2b4c8d7a1c34494cf2f68d0668323a059b8dd9f68f90cbdefb57922f0e298fd712d7fe22b01fdc04167d1301a2a458dcd8be0d42d75331ef06596d77c55edfcfd20cf4fb1886a5cf7b628728b23dc11467fc16b216a2baf9d0233d2a0820e689d19ed5708f6c70df0f6f5505005769cca3959ad6e35e4a4c36f0b1de09f28d9b4100f38c15d2d39f6373f410b5aec11fa4e8ef41aee5b00813f4433d79a76f60af64d95a5fad152f6a3fae0ed8713e6600ecd2f4e892d199940a231d3f370783b288ba9eb839f4222a5a80085c8c53b3d26f1ba28d96dc44aa7e37be10e30b3d3e1f421945672a74ab7af418082e158bd475fe1ec11986598b8bda1bdb2e3d7d6747f26a71e4ec2e6488d319cf1ccb857930eef677d432c71d59cf72792c1acad7434d944c8373179a919420b1da6e9e592209a75815ea6370d29c4a5605b7fc5bfef8f0f71667c4ae235c048a7a6a0981f00d01bae2eef189694ae01362c47b200013ce12d1c1eda43e0c249f89f62379d71415f776c2ec03014570a1190d473b7e550943896489b5165f0c83c9d8f7744a9ac7c3c65389b97f6c98e22704a53294502acfffea118a33f41a06ca4a940c098c6b8c66d3cbe3749398e737bac4eeae3dd2f47c4893b607c6098fb05399cd2aabaa19f3d7967731054404ed0a1529801f9c9cb4efd301bad61793a1d4e342c285dad416f3a02e7824b7228ff8cc15e3dd41071abc559edf170535d1840da8b46f208254ed04d75291123fa561f6474fa8fed38661c3607cc71850bfe61640c9432184c798d88aa9228e0ce64299c9af138d0cb821a9a868aa148d2e83ead5d80947a342363c7039b607016b1a28567cd35760267a6246435f0963fd93a4a7e8b501d493a3d0a1b4379cb172a37bae59e3f73f01b002b1baeb1e381e5ffe6ebec0a7bc9377516eafd2196081995f0108dd3d3f0b016d1e9fcf166eb0ebfee8d32de5f60d7fab9276baa2fdef07d7bc973a490fd9b997397654240ced97872be314c33550c7fd19c36675a540373637f884f94f11f59170ca2b1df9b38f73d1f6bc78b148f32a59a1676b017c333e4c298acf7c933a30692486125a09d9dfb41056ce329b80cb9edeebe49dd00baec7c7e11af1198c75506b9b0b1c2b6f66743b912738c09d76e4525eab9ce35b14ca15fa90fd087f75863e3e2607402b6ccd01fcc34be93e35a38fcbc9cfd6ee830fa01e734d91970dcccb9b303129b7e7b4606776f515a5dabbddf296fe1716af0b33c45e99dab8bd8c40fd2fb0b79a99afc8ef16304fd127b0f94c3ba6b0b598193d92a9cf06fd210eb44e283441216aea8791d769116e879fceb7bdaab116b229f9e6a54999da09294f5b0e5514c802426e8f6ca2228bd4627503eb112d319e6af30a515cab90b93883db0bb21bb79a32d77f52b3516c132b0c3f038fdf5af55ec02f91fc3e3b02cef4080c460c78ae233a7a06cf57de4b574e275b7573521008e86a8290678578c9132740229b251e4563432ffbaa624cbe79f42c0b4cceff0a8a2df0eb3c74115b03ddcf22fff62d24326bb4c4a0be9d4a7b7f9b59d8ccc2ab727737bfcfcffb2d60b7261b5611203da882ba5c966fc29fef50796bc3e4c78df0e08721c07f544f90e5ec0159b58404d42c92acb678f292cbf1ff2787f2cbcf1057142e6ea708fd69fe7510e4e157b766a0070e60016fb07936ca190f08b8a944a6b35895a67658ebda85204d727d772a44e9b393ef1c24bf8719a19bd28baba9e9ab2de7227529a577fd0b8222bb8db654b46131e629e3cd75de5e1865341a2bc239f8690831d80d258d121ea89d4ed183d8956d6862aaa31da5d600715823ee95714e399f68da6b10491d6b2d277289fe60fa2f421bc795e83bec4c1c280d68906d474228492e88ab7f00d3468304d1047f06371d7a4452f6e311fa625fa18dafc26a319d62e67ed417286745d33c4abcc45f0af0ed80c64eed99770a7c264aabb57505d7fcd488c2ba0c6045cc7e961481a6747de0291c269524590322cff21968d9103a9eb361aa6c0f60be681acd71c6215d924e7cf9fd66b9523638ac7603168ec6fe37898becb62c8e375d241d31dc10fc7c6c5d4de78c681e19b94dc46b6b7b95a923b87e4431114995d28ad97e85d1506700948817f958695a085f5d11b9bf305a7a738edca402491a89b8a8f656edf634b54e7e967c412e966d3f53d255b1b8acc6b98ab6fb1615e31a77518433507d79669d7ad43987f0a5013713108615924e90a6d09c38226f9673c38433e017ac10c6b7cae8753016cec70dac9ceadaac416ea5d0fa042f68f52dbad04454b5044a55af0d6ec5597943e36f438612ad229f9b9c9364f213dbf0031e8a67d2fb53d4ac4760f58aa0ef631ec1030ad091a614baa3705c912abf3d71505e84e1c3dcc9b58436bc176eeab4afe87c3d5466619c5283eca2a02ac0de873581351661477abc090292202fc5e59d1196bce0967d03be831909ad26871cfd7e8c4bcf75ce10f39798e397f0a284036b001be1826bb648e415bef31ebcff0494b585ccd7015a6c0ebf623f3ae37b8406f3290d07fca08759e579c40e06c2bef35d7f3048edc2a9bfbf254c3dea3b2ef385b9c13cbccf55f443c1fd2f6d3927e5a7b51c8900c14742d71d3466fd52e03dcbfe1c4a04ffad2295c98e0c907ec65b2bf9f45d32c82fbb42fb026608264ddb80c641283ba742e567a0fb1965f26dc8432b9bb775f12f727592993f95965180c95d96c6320ba86ec2ef5a08fd56197d3fc5e5b8f1bacff3ec705c3e75a4030f9f9e435b8f7cbe1cdbfb4a1f206075aea09fd085091f8e5471f43579339f342d561ea09e8c8e1c9d51cc7804bc3cd5d2ba86ee30e0ba1af6427ea1a458746e12fdde966da56c69caabe5f423a7a7a9da84526d9474044f0b5b10147f2ace874c9376bffbb8710a482947c312d97804051753530473bf9c2095ab17045e1d45209e5ee5791b45d17d8b0bdf2dbc81c794e2c282d916226282ca3a732e6ee417f10b96d795703dd5d7daca6e0ea3d92a178f1535a0f001069a077695373df9da020521ea415e59bb2b00c698105e101a60efc352940957ebeb7f5111b5866390055fa3bad133078544a9e65a2ce68eb0e9aa66202e0c8e335fb93e815866fadbddd7fcb202c6779b7051d6582d296cfb9c225a9bca810cf34d41208d7580f996fb184b67076e6ecfec101e5d18dea8f60108f243288e311f0b6a44926dbc8c4a0391b7084ed5ba7f14f8c91b2080aa383192575dbaf871a02ab174b8d4c0e49ad94e6138698cb6cc96887bbd00ee91140146d208acd7a42940d7b08b63fea67b488b622ba8920fdcd4c570d72f5e075cc99bf9cd740959e6016d3c81033345a14e14882c0d9d82e6efe1077a1b521bb27ec5f72aa1d206d575e470693a86dc9b9194b7a13da78e807b1e99f20f6126abf98364f75786960b5363f9ee7baceb71c0dbf95021177cc6850ab08c212e51d6eb8aece874e97aebf152e4c9e56a9759eb7fb6db4d35a9df2bb779722a9fe2e826e722959aedf3eaeff9529b6c4994999417a631c3373bdb037b580e08a682688162f96111f120244c57f895a58a8567bfa2a94a416552d9cbf92c601f7c6533f7b7939ed86f9d5950232f1d71dd96a3b2ac8d2733482d0025ca2e561b9468c703d4459d2610b3f43b4c2f40a7f739b44156c0f9e1e2f1f60416a179284ac668a5c835630c105aee19c62ee5184272ae813fd00ad693097ddadad9600146386a7d75e0f9a9a3dc6cbb8588020a4ee37f25019ca8da5787a781005bcb01cf21618fa7c27b472b7200bd38db069420ee4b5281de8ba689c44d7170ca1a135b76a23d7e2a0fdcebd6d590d4cc729b825672ab2413f2ae0d18f1a9a518e32bd5aa49e3452f95001daa4798d958b149463661148599ef896cdf7d8d9fff19045e53d48358bde47006ccd7bb877a325d5bb50dd435b7c7f8a5d307b7eefb2908ae7ef494c75b9c1ce8dd4a1bc4f715077ffd96288e79efc483bbf6a58ffe782856cc446ac08066f5580070fc496f60af0936c09cc2c29d8a9fe5245859ea0b26b031e59043fa28466dfb6f7742886942af3be5b64eb2ce3754d55d704875c22ee041a9710246a5854d3d672b074b44e7d31a600c7be615804aa2df8883b33f00e1fb28bd497de57c2eebdc4a689cae8cde1a7b1170e36ff66ce733fbdef50818fb4a8999d73d673b5f479dbec6c28184dba580e1a2f5140090921433ff6fca29148a5120b784b290b6206df134e2856ba47c04f9cc62e90e813b1db0f7819e0778f5d233f8d515d9579deb9250d3ec445596039926437632adbd6001e14be40e06615afc0329086db3c0e4d1b3e276eba38dfa4303162934b36dba012778b5003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000002c118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000002c0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000002c0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000002c0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000002c29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000002c141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000002c25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000002c12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000002c2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000002c189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000002c1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000002c05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000002c05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000002c14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000002c03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000002c2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000002c1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000002c1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000002c14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000002c2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000002c305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000002c280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000002c223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000002c17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000002c08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000002c2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000002c0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000002c0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000002c172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000002c0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000002c05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000002c137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000002c2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000002c2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000002c2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000002c18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000002c0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000002c204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000002c0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000002c1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000002c28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000002c1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000002c21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000002c0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000002c0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000002c107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000002c2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000002c09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000002c24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000002c03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000002c1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000002c205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000002c25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000002c283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000002c21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000002c094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000002c0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000002c1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000002c2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000002c1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000002c1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000002c304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000008100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810400008100000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082e940b2be8cf9d9c6e1184f53c61d03d9c2e8f6d5259a8fe3d3a992d7c506cbddc843d1980ae4a20a0ee7feb2a21637f4d1a2f2e12fd9d8cacd333d66fc98f48379bd35bace44aa3a2f18ae5dd29af71af117f4c9795039c2cdb5f6e6dfb7ae752a0f068a66a48e147deeba0e4cff382b0faf505f228a722d0445dc87254f784b0cd6a0ca68fd3279299bf3ad25b939dd33e58e691ae6e243ff852bea319f180092142fdb84174d5e69406d08f1e873c24526e7b2d90cdcc628b8b288880682e17cd05d24b53be083a13a7929238f0634728f2af954e45d707644670261b8b4c7ba690f1a872690ceaf0d33ac441ba470178009f5b20ecf831f8d3447058c8c1047ad169e01c5ba54e9ea0d901d9ce99056408cdeced2d9c86036b8c0a0a71cfc5fbeaf9e6fa4efb907f0ced84550c04679aac8c89a371c60a0bfd6eea6f9f4fef6afbaae90609f1c7f5666a1d06e4da817aa53b8b1c56f65502202e7de3ac61d8f81352a62e357f160efc6c8a7c7885c18e54a3e192b44908cf360cb432a222c4c5bc17e04101d218a76bd436420ba195214378f551bdb202e017aac6ae6f8f9409fa517a6b52ff8bfb7c8f92342fff40c42069c2c202973580eb99e5116b80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000277d04e7843839a783f9fb1f107ad24b67c29ca4aebeff9b43f59d20fb4696e3f303def95161b913914cbecaa41365f48481d1d88419f291dd539b80a35ec2938a3db1b0bf4eb4c8bf4096a813801cb5b6cdf067a366720cb3b1b41a93ff1219fb97851abaa8dbae2d00bd43167eea601766f705730c2bbf77fa46a4dacda6c8322de7f5cc30bfdde742d85ad36f1adc0daa50daf339044db800844cfd96d9b72607b5bfea6482edead7d3c03a89f13b5594f785fffa1c521a90154934532c774986509757443326841847f9ffa50706f949aa6c1dbf3754e1a648995e4da8236b798149f17b528cc7ec4cc8b73de71974c376973569504729d9aec55d776d01ee3c5b03091332a485431d8dfb0c762f561d9d11a2038c80d34f0b3c3d10a7500dcb5e75e64be782758aad192575ae3c39f3b4bec5b4825daa457a4a9c72e98ca5d0090da3e635bdf22d4f2f1016cc48e26ebfdb31851b917f61272d367de7415f0261b6abb547a2afe9c73b754b77b8e3d8eeb81a67435319872016f9d6f7b296dafe52023cf9e0ab42795ef50d6aeed02663116538cac20f0e2afd7c3a57e48848887a946c2544776d42a36be4eba68f044ae3628d8da8adf9699e306ccd5700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ce9a75bdfed4c86dfdb05834c8c706e5e3720c68a84b3fb6d53fdb19887e214f401b158910ae78eae61145da583ff28b50f9c0a95083b41de8c586cff15136afb12e9549c009afdb569571f751db18aef3c41163a5897db95367669841218de37ab39fa911af89b1a7c0ab1ad344223df16d5a1002c453537fdfe40c24f4433f08d2b5edd53fd6518c0066db5746b4db3968d93f3a69e8c72bd0a497d5a2960dbb65377a74ef2d03330b0743da8c9e939b569a049fe71474532818ddfb1931728c22bd913c2950aabec565923a12384cbbd90758481debfe90dfc1e6df892c28a1438532e06e1dfe196e3ee4c2754c807977beafde8d5d12c318cd7e69d916c4c92bc32a5d15d9e7aff290db8d07ac4c9e46a3d815cadde308c03226997a4daf03f6d6f0d063215dcb71ab26c4ed41620a1d71fb4426e29b05628caf367ad19f4d2bd0d36a686b28877dc7d91060782d1f789667811069e2f22e7c451647848f017f7c0117512bbf9157c8ed1dd5bdacbc1cb258449565e909169f871bcf62d02c3be1c550438f1512296e4b8ea8ac1aa5582c75b88222bad0f55030c55b1afd5677dc2170419a64ebfd72c10de6ac40b0356ade1550f8b332aa90fe16db5c6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093873715c7347bfd131f1b9981e1d1c7afba144fe95e835dca16f3fde231e43813cc8f6ad2a7891ad4c0d2399b38b60667ae50d1abec5d19d9680ee0e119d056dbd61dd41aa6a6dcf9358b90752dde5f2e9c63af8d9a186cf308bfbefabfbdd61c3f96b9e992f31751aaa3de0433a62c16a30881b36b36dfc73f1121bbd0a23d9fc0443fc08c537c4337dd1b4d614ebed71d4992a8ff2d113f74a6fcbec39e91f99dbcee06a4b5fab535a33c5b8e2e3d2786fa9417712267e03baeac634918956e1454896c52928d5a24b5376828d95a476de01e8b09bde93a34eb4882370664c5a03faac3e685a0e2473d34451f4171840e7e0af2043c800fde7220a9b32fcf0abd75328784d4f2abfbfa290e8800371f6d6b222f9f98babf279c92e0aa355eb84d1e7528aacbee35a6d82ad126de318057abb7992d51f40f724840d589785c821e425d983d8baf9f57d17dece4e69541ec56e8853261b5b07df376f949848f7fdc1ca223237bad5bd3a976510f96b7278ddb7c8aa1e33628e384c16eb0ea5f2ea7aa30498d9112bb6a3808ce2ae6113db93c34f8ae8c0605aeef5073ec90f671101405d2922a7aaee4d6178baf6bf0170041d04c4690726e2f3d90de8e5c08000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024d079bd248a99ae71171133441954586759c587649c6eb9261b4bdeab350a8f4cb3e4ba699ef594198dd9beb2f1770d36172774498b5caadf95a7c63ea9f0401fa8f25b75e9c57024ab98571baa97b9eb9ee386e60ba98b5b7a1aac741d701070ef9e876a034d2613acea3c8a02df3e331a70113b5a7981c1fa7490b86b29428a428f707237ac0fdf4ca019d4589507dbe4de23d5203a9e545e3e2087a304625570102ff145eb8a180c59bd35eb0fe335d793ffe1dbf55f919dd4b2bfdf5e98c0cec558f70f94499f44881796635dfc2330046cd1ca598db87e4339e4f804dc7589f9cf10dcc7dd7f6728a0f04e756dd7613b56fcdd5b950b14110a10c40b5ea286309de13511faf8174a3724583abba4899532c193bd586b385f8099514614c0c42fa98f4f07301f4c627ee2b86269494952976f683e6b65164e5f2506d17f3cc43c307868c6d98501d2940d59d17721604000f6dee61a292cdef60f1e92dfdb9492acc4405d968209811ff5b3bee0ea84c7a6db938d1eac7f2aa75bed96c7b819628c4f3dc87a9045d408adbf9f0291511e86dd702606a1535f9672e3e55c132305d8f790c41386ff519a028daa1ed2d331f14d675929af4548ab150a59490000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a133b5a1d9d29dd748a30a1a5af733cf5f72a584c36aa5153e4453f1c4cf2df495e0d1014f204ec0ddc07edbdbd8f15bc01bb7839e0e7a089c5d1761a90acdffc1cd8bf0669e1593e3591238b998e62313868ca5aa5ce252b5ee69f2b6936e7f9d4861d8c984c3140dba7f8e21878da87941b276d338308a854e7c6b989e96ff9d2f7622803d91587de19081799eb84fd1e0cd3f1bd0c82be3ab03e9fa3fc9da8b9a5916cb758e527307f50c9cc1950e3839e88ec72ca3755775832567af6da354fe22aea0efe2c8c09dc5c699ccb32c4db14b45fddf20b5d6116809f1fc4dd59dfda98ef60c3178e4af815598ab65c8a6fd82835db4a832e6c16de4067f76458c5bfcdffd53293f151a98bc1caaf46e913bb72f517879d40fd5d805109609ea7ab998b217e6d676e47bc77aeb288da1f3a3812e0ebca3e30b5a7b7785222fa9ee40a37153b7875bb08538c8eb7a723c96c40db5a12598b90cd53b023774acb8660e91ebbe54bc6b729d75efd559989f763a10eb7eecbec2a2247263213577eb3c480b934099baf9d94504bdcc87ea6360c2b0bbe1d4fde50dfe5c982742caab0252e29c13fc378d6f90a4d19ed540678d4a4d27de442328ee1f2b7e9d72d2210000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1950c2f867c9d095e0616421d0361b82577a082b7e6ca2f6a99e3753afe465513f9f638526b9e856ffa6c14f489e826e42e1fa875960489e7e36c10885c1b1acf26256fbd1e950326e6aab063311a3548a601f0712bfe86c9ece5d8703f077bbbdaa4f57f1c269d20bff4fe725ed1254147f49b2662059fbc3359fee12ca0a7a208d787bb4155fa27dddfb516f335baa077462c146390103eaa5e3c0876ebf114c876ec28f2af4fa70791e69f41f33fd57378954880d085976fafc771f40034433a6b6f3659828a173c585c0ab7b163effdf59468fbe0901718aa3a573b342d0aff86e685ad838df619ea7feaa1171f02a50f7fa5cc09f1ff18d8afc966cd6ccc65ce5c6403efaa556e07fed4fc6dd50ed6141ae27471692213ad0f1621b3d47ab35fcf37c51f2c715888e957e393af166cff34079d1efc8ec72c8674e019ebe4c6cdac89f01da7b7c4c68471ba401d6e71e0b3d35759e5d07e16496833cd8c688c0f0d79d0c7e5e1e2e6bc570365a17e8ff30bc1392cdcdf134ead69a4da53899397c7f5ca8ed7a787b693204594ba380504519f1adecb915afa49466f3a09adcdaf5a8ad48367bb11af0e65cbfb7d0b3629ea4031c2701d644dab2a2c258f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000952d040905c3bd309ef00b9d8566ef881b4f0f512b27e87f7d492fd92ff95728daaca3d94178db5beaaf09cd95f5d45d69edabfd66d510d5a4f09bd2414fc978479dcaabb4432a322b6e20b67d80d82b630ba1f9a14e44270ed3ae21d0df99b7e06f1ce4d801d4905421319fcc0ae52b1f6e6c60c27a0136c93c859f9ccd0bbe96436100fc330539889c0d580c67e3603fba556e660f4bf976ce8ad28185a8a1b93e0ebf7ad66cb011d81c0eed4efc44b70867b218735b5283d224f09d1d907f731ac4683bf447b585318f1cf9ac90a1824d88c4ad2853e92f49f68d68807940b4f75b4ffaeec659e033215bac550ea66015cff908c0f9366df7efd7104a7951d66d1c339951fb2cbf22a239410dd7f5779073408a7800512e9048f986ccc4092f6d7242730b306decf80d3ae02f7500c53426c00decf4747d4455142a11a73c116288c8f22a3b8912dd6f0282529c67d9f8b55be2740a23c79f743d01a770a7191a6e8c26e0aa234a039baeed4ad9f4cd2141a93566b2df1751eee690cfc1d5bc95d5f28e26da72110abe38a0b42c43e235a9bd418780f899292f48259510167de19e2a9480f3381e5323de56dadd37c184a698e947228898cce9f60dc31fae000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a84432b66325d200fba8b6c11d222e163434f17e3c128458679c180b5f6260b68bca07b102358d718d795f1ceef3fc416f5269bb70d4d344d73ecd08c8650c013ed37773dacfe4511928f748c3760630e2daa1e3fec6814c34ca4bb9d161d8eecefd225b9b75fca5a651504bfbe52353dc9dac9df532648445ec8a54799bc76eaecd2d42fb70acfc4768c30e81522f0382c8e1d7a88a8c3beb5597c78a8b778d7a4f342dbd8983af28dec7336c9827cfdeddd9ab33a10a447a9b3446531646266591ec845b1aaf7e7b77e622087b57ef0d9803ab8c40abd94e62cd5b53eb763a49fe682946817bb7001f2d02c8af769954aeb760a9556a0d0d2d2a48672cf9b61dfbd73c0cb712ddf444362ca4211ee8bc22bc7ad7f78911ebb785e723630889bccde9cec4a08714defa2672dec30927e0c427b9ebca0ca2fbdc5a6dd2a579a0892b3648882b4ed5fd6dc4d9b0931225042101334502b141ea50ae4d17adff08cd23a9f865cfe76c7079fa23aa0bd196a7db60af400e52388dd1677cac462abf87c7c177bbbb57fafc63d84766669f2e361da76ea8ce787e91ddb71437a0233e3450c10464dd9c0b480efdf8e9174f886cd22ef31c4b18784d00118c597eca00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000450f150676bfa836a8848178a2293f817c0c5b5026a2f9a75dab0b7d38f96b866a6de7c4ad92e5696e44ca7ca8fa2fdfab58d073e834e6c3fd400a89e98180a5008090f41190977e4cf9b3d3d0eceb32127f6a61b46bc5d82851e7bcd59804d2ec5515ce34e45da93baa32bfd247688bc2aa12596c04f31485806ee65895cd3d6153a3a1ae3de04a83ff608f6abe98192bb6fd54c97789bb6e44cb37b6150679ad5a58a94641301ef647a26e4dc565dc7bbcae18b20795d494bb0ded93d80f1902212f1202dbbbaa1ea2beaa4a3680f25f5fb9e2515516bf097dec40c311e881f5c608d8615efb49e96660f3837d4253e76a2d4d0d7b3f8ab8bf81ddd9c3ef69cab61c3e0760fcdc1558a8370a0846c85d3b6ac1506ce463200c2d6d539eb2bd79a33cce15cc1a9ee776fee3bdafad675a5ac87ecbb2b67a1ff96d829f93935b83608ff2389bb360f0a7737032a982f1c502efd92b4f773e7868d5f4368dae7b37f725b9040c6be53bd147086112b970202e3d3e703d5c531097ab4202ef12864869b4569cff05788ff5b110811b22b4237a9464304b7ae93602ffef7e70bc69e8c1030501435491d7d70e53c1a8984a2c7059f022012b95dece988cd0ba32e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d60be5eaf85c4fe88ad3e5862e4f8e9db24f251fe26b978cd666b9593ade3e43a8d4dfcbf643adf8de4e3ca25f2a3429e3c4be5aa3ebd0e5bcb77154df5e0018b5f9730d3a9f2def4b7c905fa4061357c6828bcfee7d29ecdb618c94e288299db4594e7bca34de91be2dd44a76f2d5ade90a10ff7b5428e1a27bdf618d621476a7431194257b9a51ed8fd69530a95e76d46fe7f8acad8c251f73205cc0de8ddb28faa285edeca88ed1bd942403fa1e664f7dac9bab9a7800986679259c7bb2c5c141fded334e1956a89b2c32187f3eda6ce1a45a2f5d8ff0602745811d88c8357a750acd1e202ba087b4aea2053a0af51453a27e9e29c971dea1e351fcb74668fafd9c39bd28c6fbdcba0abc0076a31c582e606c9c3c5586237ec4415420c789095cd143a0389a70065ef0b001da4e75c186c7cea2ac43231edf676fb5b34bf5018c8bd588b6dce2089b58bf56ea14a0e1e357bf723a989de57e7b30a7a668f5d3058b7d1cd4406da91c787e7b64b83acf713fde2a7c106e6dff6595b843ec4dfa61b565b68de19645e004a85cf2ebb752c5588c83f37ae74d4ea3936a6152c72da2d77a49f72ff20425c159de6955fabeae790544edae4833f6da378cdd71700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009878b6175da66e61b000af1501fcfccea9c6db04c7bb7d084c7085951cfba7e3fdce5f798889bf97d4d49921abca4ebe4e75dc0d308890fb90450fa45677d5b3bec8817ecba84a30a9d98e637452f850fa4f638897bfa1dd2497bedd35df4971227284450208f513d48eda0ec5f8b06675f061a2a26f2308b9a6ac4ed10b62f72fb9c92bb91216987f169e994fc239b71b00bd4035039d28398e8a5da04b90d4b1585c76d7890fec784c20c7b77c1147b2070d66694d4892a8b9ca6939a2f2826b4608ed13ae71813197dd954b2ff4f5b6edf3406542b2dc37c4b68f8205f1be7aaa3673bb3aced0c7315e55a5c7fc253588d7eba964c2971bc3dec6fd468a69de9d94c683cc7c63b5097a4515b32e6fd6fa74bd341a43ac53437be780e3328bbe133bfca939a857c8714a952e4683922a6e34c8e6978c6a986cbfa76a31ca19448bf00d17da279e01d8fe1f3132869a9e05e5aba4dee855f5ebbdcc9e66a916b2b4d34f1d23db42ad506a262d022ec2cbc66aba82eaaa2d78769d1377c28cf5f30141d086bfffaebb38b8f355efbafc628bbc994e1f6a8f4495303e053de8cb42a786d8ca0f8d90e58583d594ccf44317c24872501da4132a6c6ddc085e702f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000834d709af99c0babd514d38b649a1ef8d8ae88fe5585c13eef6ba2eb33bb3278ca351b8dfe3cec88db4ef8a3678dd9a8b8d15fb099cf2ff3d08befdfa8b1bb650e03438e654b88b0b0e6978ebc86972555111b9840b2088c559f37a11df945f6fc0c562fe4dba20e002e723cda6d9cc078ec22c33b836cfee732806fc0fdf8e8e5002b065348bcc3c1572ccd38ca6315ee05ef4308627243548b1a75e76eaeec1de1af9eb0fbf10c4615fe7fc81480576656785d95c620476c03e0308026156044dac02d95c4687ccc2f87be4950eac645b3d703bd2d0ba16af1e16da930684309404b810a0aec1cce90aacb44597f223a920cc05ac20795bac02f92f97f83d1509116456939aef9305aa4f25221969d206bad20c13e293c859bff30d166670f9b8a0a78d804729a4b2ff701eb56c4b3f5dc87fc0e2e4a105c996ec2234dfc4b5e621046817435ae38ec08e05c1fca801fe75f6f1d6d536bfbee31fce046a31d15d854a0fcd4219190f10576d3e1cb29fb08c2fcd42983516c67476476c3ac574fea161fd94e5136b75b76619c2692051d37e7fb96e41d35ad51d28610879472806c816cf15a20b0610e5d959621d42066e9a40bf3a69572dc4a83c9e49ccede00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009441e89643c6bcdabcc76b6811a04bb76eba86d70818eedd3a18e8d6dcb862f48e5ccd2d4d21b18807f447f3d69ffc82e510508721af8fbf81dd52584b1e32aafec3da9754bc90930233faf465d27bf6bd979867c554312f84e5342a8822ebaf42c90dd278e5037720e065d7bcffb469e325d34734cea4f34131f131337c96d27a18cedd0f6aefdbdd3456329e7855e80bae0c91581e1710b04448b38f170375a1449bcbd5ad79cf366cc76cafcb5242c84b369ff7e0c5550b20bc1e00f336c9c4d6b325db6b63c8b59b37d06fffa2233283da65a8159c418fcd074ed1b6f4edc98ad4a44eb8b45b0e11807bbf28935e5e474a9f8f9db61cf7605ab9323b429a455f39174b028f4717a2afb0749181e085e9150336dc868292e33cb75bd8fd05eb27f6514aee9553cabb37f296cab453d907034d35a965f1237af166f8c23134cd087c6cb77752dfb38ad7add8a122dd86df58b529d8f154bbbf594c00c97ec4bf40e7c8d08463d31830df90635c178449337fe50b1f34fac1401e1c692c6e828479d2ff2f12b91af994a403face3329c98358fafebb63a44a1eb32b1ca9c962fcd32899c4cc4d4a9d244aac8c7eb6cd415027a3550f96386816a3c81f883260000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027df48ba0d2729eaf141dd133632840fe884657ce6522f04ffad94604274cf6f1ccc9158b1c314c7b87686d0946624eea9f0f0a9e3a01abec98a6c38fac0e98b062c196c1a985adc2eaf5e98ac8986500a5058ade0530fc62e4e7979fb58f2a2667c7ac552616c86ff6d4c6f3386709f0898aac543ae15538fef3e25d1c0522ddddf9159f8a0b33f951c59e674717e973222fb8bf0311b57ba1f6a9c5c6ff54e5ec3f41c398db73c9eefa40207ee5f7d94e5f4a39552c1bc7ba9658a31830b4d85352130d42024d063964cc535d008a5aa087c5a676294b1860aeb1a950872af81013266b03c579fb6ac751b7b39d407aa271ed8f9ae0c0921cfd6e7b44880e35263fb87004e6874534c7daf671a3fcb210ef37cd11878126d3fc27e004d293faef076363fedb709206d2721e55f9ea8e80d36088ee97b86da4ba5ccda00094a69b56bf6d5f0fd843efe0eceddec68b9d3be5c7e8e799fdc2aa6c579996a66b38a2ff3051fe41126bcad49b7e708dbbdb5a7f37d5c879b4c48609a8f15db4ba603fa6ad7cc14db04e9aab0089f20c5a28dc493a087305f3d06db617df5a82db3fd82aa5d335b8567a6c9f0576f74a1185aa0f4e3437134aa1d40aa1ce883470100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001be3cbaf9eb31fe363e9ca6fbebb6b537da714d63796c19eb425a8bc84fb1c15aaafe6d3902fb122d0fd948ba207d78ecd20ad11ab5f65db5ccb3e43585f0c84cdace42a7c40ea84e76a99ea0b00f0c96eec1c39c7a8ddc720544fdb0261a897b7f8b369b7e42220e5ba0999094630611572cf68fd7295def2b773a41c56af4d773efd682508bbaa25eb168bc26186aebf5ebea1ed2325b95cdd293e94106cf9fa51b2eebbced3aea84001f9301f9ee6144e519f600edd505f8665c9a72002e74e34bc598cedf91da95279d8297004c64acc84da4af50e90bc0573f822ec8b9b9e1a5f6b9d95150327a3e7be5f2ad300977769147476e8ded6b4409ae33372e27b0d15130ca19c3937ae6b7bf59efbef384e9e549a832cfb11095a80c2fda162a0fd1d9d032b9ffd3204d37ed2c4f9563d993b691c293b684ad7a299b8ea010493e9ea2cff4a6e90f7a457e81987a201d48201fadcf441e4189096b5a5a8f070d7585ff9058bf1a6b877e17b14490261a766a7c5e99f40bac81ced77365e47f9d642014a1d2bd0c0d446bf6e99ad03ba32e4ea682ba4430fb74c5ff9880c9aba1828d490e4db6cc733da855df8d80393527040d12832ae7926143488ffd9cc7400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f443a6ff8eeeebb047a66eb547ccb24a236e66954785543e27cf8e862fc79219b58ab42727991e91b0464bb7a9d08107463895b8a48ff2c46aaaad7756995da4f47ac57c2bee50e13fd277b8c4c63bdca6c4e0f86781fea3427013b5381b03b0d27ed6cb984bdb6ee0cb873322ebf360ed35a3f3d9b925c2d520b2fa32b81a01ffd850ea15bc9f77bc397b80279b7e658b98b0f2282eef5a27d9547f3c1b4b3339d6b0bd1692c30486518630d33ab2a7e444541d37be1559da23eee6027974ce0f943cac1bb7f4fae06ffa884f70ccaed951ce4b6eb0c6c811436f57d2fbba73d201242450513470310aa7bae6b00feed263535ea46666d69ef85ae4940eae5848c8e9334231e3393c4b98706ceb58492e16c8ed790406ff24fb6abbedd17b8c1972d674b807705210233413377d29ba53aa1fc48964071aa9467aa1018b21a117626fdb9e93409bd544861e86685fa759b620e969a60cfeaae55b5c40495d5f32a01be46925e48b0d2225331f44619696e43500fee313267200027b0de8a6a024e76b7602a3e9d23b472311755fb11896da340305b76764f18c04279af612548bafee30adb4e3b226aba1767ac50db1072a22feb992e82214ce98f8a0bb10f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009015781134d003575bdc6f874cb6c38e4b4a2cbc4ba739afac0a11c01e39d066a65342a6c3a6136f527d6305c6cf9682dbaf0675716c92b8695cca5c97eb2a0bb54c4033e9a45d7fc126aa7295426e1b64a374577534a78963c56bb0aee66768a48710fcc401a752dcc3d27938a304fb311fa346d518b4e0ae74f245eb5a7ec1bd6b4625ac5bd2c817492fef262c8be269418a8299bbd75e541d84f8beb64f29c54059e77a7f60435e481b3050b2fe545fd2e96def941ef58d28284b1a39ffa203c2f0412882cec6ebf5a3eada9f142ee0a03d2823f82d4212618177dac88dbcf27b44d2f06fbc7eb45bebb9f3804d6906256633d9db4c453cd4340f13df53604faa1f39de52e59a50345c87aa3fa0d1b4a7546f6b19bdaf4e198ab169c2bd5b13c84f729f5af797fdf18e9f2c5f6329b32fd4c34b59944d3ae5ece738ea17beba5a49b44f560c34703677a7ad62a0f3e0cd4d855c11bb9727b80e4a43c2b7882dd131096f7e6846bd6ce6de6518d591beb2f72f73580102df6954c86f18fb2c9bb6bbde39ca149ffc2d64448da662770569fc990815a952156496cd8b730f8a0c7e7ce030ec0d521e0256d48ed810fb5c4413e11adc19b312d33ebc104c036800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000481d8a77dcea4f2afa0eb6170ac796e6686fb31101a18c7414a0588866cb61b640cd52ef480da81a327f381a0057c91a7ff3183e1c19876ca2c6100b19e79088af2e81e1e683c01b958d16016ef4fe7878480c8a9b04bf3f850123d1ce0072e8d0d79b2b557b4c24418d89f32084d16c75c059488d501ca9d0aad3815fb975a526d3d6928c9b4308b5a17016cb9431de353a7daeedb3e16f4af1bb930033e81025a4726da9e1076bd5951efe6bab945218c06f0463b22e2fa310b552818761d99f3a3c34fda6d8a188262ed42be5fd82b6bfa80d656d87491eb99daaed28ea3a53f67b3b577b5aedd48955ae6ff2d0a6b62ac5afd74f4eea37d9c1b9072f0e69315b7511b04058e529a7f07067f26f8f9bff8f613a006eba8138814fd8704818f736a2cb0facc1350ebb416fd465a08d9f034faf898cbd0789308bd2a9dc9602bfa7316268d64faacde0b8bf966234930aea23766619953591df9ff2c50db4f58afacf5039343be91f7cd80e2449e0eff8b713ca894627855c3f3bd5bba03c89957ed17fab2dedc6cbead15361cfcf8c8ee7b71167c56b3bd5b0165415d93afaf02a69980be6d7671cc29cf41258a21aa94645b243034e22e14031702a796fb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e55d5a00aad08431b8654b56a9acd30493b1e90a284e58eaf9adfa5fb763681dbe4eec3baff639137aec884e8c7e1e1573ea1196e69dc3bcdbb64416f8728a1f3754325d2516f13f713db279c1507d461b3e0c92111e808f3a8d12d627689bfc7104d479f94a3e151ec1c9893009f665c6e223ad21de245381a2e8fc5f2df67d5ad4b6fae057aa1bc17c336c1aab919a5aee6728bc80ff07e3b888a61ac031ece10e48d6b7068a7c91ef2f4b78be6472147da771e174370bcee9bb0b0d7c378bef5440ce3e42f1445d42311ac1fedb16eeadcd9f987bb29ef39e94405d3ea8e5b551387f9225d85c228d98006dd3ec91658d2320378802978f35692725809e9f9fb1ec2ab4ba03d6a4ff56833a200276730618a71667ae7ce96f73406c598debacaf395f050407a7b2280a665f6594e4c69468a2f8f28784a79100205a134ff2383e46d68efc4f463444d17fef36a07d1601f990b5c6218fd15a6d8cf407da14d645172f8fc9ed6d86057be13bb96a26d898ef3b0740bf80c59dec27e1f80413c19ea75b046b9d607edc0bf94164e41f912209b55766ba73f21679097884c9ab9e55ff69dd5d48fdf450aedbae1a2b6511e8028fec04510328a872b9d18da4d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e60b76e039024bd8a6b57afd90933320ea80337af7a04aa2db69ea7659334dcff8111964eaebcd0a6cadfffe42dc0ed0f0f1a146c626b5f1dfebed6e97b091f9e7c305dc77c2766d4f327a412ea7b753f5c80f8c6ebcb70da1e71354978bc0d8af8b8c6359a4ce49e54d8ffe9f48fac135fa5730c1f2bff4a2ffb53bc2e1e494203dc874bbeb82c249760aedd85ef76fbe4bb024cdc333b204253d4e597deb46d8d306a08cf6dd5987d2077532e72a38e8c0c047aca1a015e39cde46e5cbd71ee7179daacc08bffb36891a6cae301c9d4384f14a3c14cdc69d629acafc41642e72d17937bf45ed8426d975574495f5e4ce3424963813055a81d1ad83c86f7b5e5488109514dcda5abaf6ab7eae03801b2898b9c73a4d5b056030ae48f9316df54ae4eecf919277cdd126e2f906ce0bd1f6eb776885b3886005c3a324377e0eaa4c0ffc41aea77cc06b68638576cff1591cae0ba27419beebaf1a0b39219b80cc069b22da4f1e109903a789d3ec8d3559b42d4efdfdc6f4f5c298d076ccd305f2d7179a7bf93b6f55b1dcf5afe14370729c45b03b44b4df002a8dbdb856a23b37db2a246c69131eb93ce9dec9c21ddb18491132b0632b2b581a043674091ab800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf46c27717f1c0909bc0851d99cf1d7b4999981e9c33553a5f116072dd988bece02374d0ac1b0bad77cdec7e46626997ab2cc6b39a64f7644ad19bcbc391de7cc135643dc37d2fcbca46a803301adaec9b65e616ac21bde3f7e1672af00d13f7befc875cd1e143d8e1917ff39365e1ca8ee54b770c9e2f4c9f143acbf68e2051b7bf3f19352eaf690e57595352cf1e3accf11feeabfee6d5fe497eba44f47f4bd081210c1b64607ecdff42ef214b2db819d6709b59168cf60060335bb6e6b53bfca09b270a4f4b74b3a56fa0a3c5a9d3e12a5e1445509f92c8f98cbc5c79b668a7c3e2fb157b4a0e51d9893f5b8fcfde74539419e71e8783ed1e7c8e6f26a0c8b4ee084c03656fef2f9ad662ac7c210692c2c95db63609614c43a93ee91c999c3598cbb77f7cef142d35166b60da9cb12bf25a02afa95ccfbce9b93f764aea9dc8ffd1dd85774d15c108c9bc03dde56b29ae2d06abfa29dec90bbf713dab56ceab73f1b52be79ae129cb567819bcb35ecf52a791f260988e53cc5c1520c477b8d2a6239275dccb87c892969f27fca6df5dc4a526ae8e343c85b689bb9f7bc81d9549cbda9deb5741263476727c4525b56966239194e327e02e6c275674e8f1200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008785b0f10528fb1f7c7439eb7eb67b873db394f2352d9b5848ea78aab84a7e33e77e3dda2021ae7060638185e516c6a1521c1de97eb507101cf66aff4759192a55d07ae94f5e987bb660354853ccd0d98d79d734a1d824cf852fd9141b7c53d991167472d5e01ac1ebc0e976e079c4e18bdafc22b302323e04f31172852c529ccab634d361f838e0d5ed0bf22cc064451d562a4ed319cd415b595c7925fdd7b101a205759faf8c2223904264091863c3a1284a65a77c65cc15fed1a4cad6837f68c6d93dec9a927bfccc35c2dcd5dd986726afae13b39d219d45be33345f3b3a261e8292414bed43742515bed104a1c026c38263655b662bf6777cd05705a548939e731f3aab7871e6e0f6b63b30243578ef95c3310b27a5d004e9975a05d82971ad40bd4d5a4e5ed31551620a46f6e3eec6f6f250236a2624bf3d5a35abe672dff5f002ba9a7c559dd89813f4936e951291e7320fe0a97d1612705c1a1a4e29dd6615247fc94df34fe1dae5ea0160370e6d553e5507bae09f17467eaf79f094452cefca0376488c7a511ee1557a6cb960580edf9c4a29771bc0289682a8639d024032c72f0699e351fb1a75beec205cdb7795fefc0d4dbf16c390fd6a218dab00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ba2098327266f2b5fd532397451c3fb6adbba49b1f4111ae389c5b1291809a4cdba9c0aa340751c7c422105416d32cce19a060dc09764288b8bb86e71672bd07268967aab77cc732b496212523ce16c12611e7b4fa46e3e796d6c791a0522383a2dd3fb19f0bb8282bd6894bd2baa6ea0adcbc16158b96e299ea2f45eec05fff6ae5af192fc9bc2def16b5d24aa371f9b5e08d9293cf6ef5bbc029916e0705172eb685981005e1bcbf72a866f6ac3cd0ab32b28f329b14b50461f3db5ab8f63aa07f1b8dd842f0499160cde6d7e3dae476e0df261eb07224c1e8ee03df750429e0bb78d5e42f4a9b2ece7535fbe197277b2e8f5fd73fa09b7864e898f10c1a46551ec897a0a6e59e018900135a4e9cc5eb0518053b6e6dc0f6a60cc15a2b9ed63c1ee6b315ecf141888b9c0d87936cca8c5b39d1a7cf57f24c8e92abafac606e6a5cbb8f5f852fc0e109c04b5637c6d750e8934bf5749a9952c33ec08071e710f78ca6d5177886689ec284569ef0a174eea0ac27dc20e91cfb104355c6a21b45afe238fc4b91959326901f1a99f6d2fe3376d44b6fbb0989ae876870869641afe4c125e9ccd1427661f265b64078e0f8b08faa099011ccdbf7d17c993dcc44500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008450c96f85673c4127bd477baeca1e5ea27c39220dd9dda59db81703abd08e400a843c55eedd8fbf694b2954b8a15ee976e762982ffe849d2effb4f4616b7c97ce0ae1896165dd8db96555ab0050d04d6081b52dc2bbd34df37b663c088c86865b46fd90c0654e0725071ed6a7437436d55bfcc4e9f724a8963466d48cf70c175302bb4b14ae7ca930f0c24bcbb70968d1daf7c79d3cbb7bf31f93464ed4807239288bf92f39384f783c8e82518e83f403d3072a6b9434078c152ba6982c6f7d0c09ca912fa6dee93b2190937bd9b21b16dbaa11db162014dd56aefd0931bd136aa3634e0e28e07262680addecf4d346b4084a258f494142482b4e5345c32f9b2eef580fd82c64abe5b3a7051d1d7ce56ace23e3d4caf95c4e041f0f716f33cd8f469a31399fc039f035104d4de22ea7c81004c4afcd92a0ff7062f69b7e87dd6d9c53ef79f8fe88f096b00d518a05314086c19302db7f7cf48fcbe809c6f38f848e057bf60e48f1c3589277f23773259b1a2cf7d5bb0a9d035c09d780ed06174a1d88fb09712c26576db37b837aa13725eb0dae1d19323fcc96ea4e1578008870e249f543a38d3fa300bb0978676e06b81f1944cd6c172d128f091958efd9380000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000acc75c554644866c2e980d18de6d035e04bf02c619f00f664a182f17faad46636492ac048eb6183440d32b4035aa31ca8acf21cbf3eb3d6564a5080316ec2a4c39ebe3053e913274d9d047edb5c8557e92163b275be2c3eeca8d1f9c026d335ac759f4dab2224e5e0318bb85594bb77eba9384499cc9887a2f3aeed63a7a8b0d5aaa6719aa9f1afbc164c2d30baad5f96f99245f9c57bd1f308637bafe2c38fb8cf04bcbbb28a6acc190260974f4aa5b15213551b32caf2be6f02650b00abc43c7985cc9bddc22809e3761e3489f7f48de681497b183593e627c9c3e7ddcf5ceec5ab5b57e735dea3cbb053a4611317a4fcfb90e636ce1aa1e8cf12888056ae85ad8036ba8e2b6ab6ef35191ca0d948257f6f1a8ae8c2ea63264f617822824167eeeecea5135b37080b0bd6eddbb358308804742d5d44fa5c5e0124e8e3e339c12cc1c2e8d2f2dded78dd812b6c5d54fe338bd8256b080b3153ecb91cbc2f78016ac5bc031e389c96f088fb4df09d25f58decaa1fd100ea17e215bfc329e703bfafbb8ebda1fe96ef2e78d07e7384abe0ed070a0be9d208c611f4386b2320564b71ee362c2537dcf5a210a292372510f4077a0b60fc62f1292b539f91c7ab6d90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000048ebbdded29a6f0240224cff73743a6c0da36fb52c6b5b1c905bfb12f5f7054510b1ed29ab81d69c0ce4a88513ffeeb0513222520699e140e65379e6ca121fb444fc6bcfb2d49abab5de8871fde8e13a1c2a316ae3a5016c1282b78aaa71b15e80372eccff350403c8a015b373950711c53ce51d30542f11a356c60b6b77477ab6c1cca5768117efc9c98d1b4df7086bf529e3cb94720ad629447cfa1501dc548b8337c0f2cb7da53e6ce5bd500b96960e91e59086efa3e7172d93095f7249caab850ce6f900d954c0cc9d7726401d35c8c0c0d0bd379f11c3bcebe453f1c8829cc9a7680974aff36392a5979e5cf0efb39f34b6b2ed7b31863cd16cdd2b2b0403cc83289b93bf8c82d95ca0b46389d751d555d392d4f1bcc0c5fad44540c206f6f8ce7f8405f871da15c4997e3c3df0d931b15810dd8f5654b4516e1930545b64008f90687af127604a9f0385d1aa0c7c86fc0a0e5a6becfa27ee49a000b53dcb7ad601041d09a7da964e119f0752718b91d232a1e1278fc242b7a9eacd7e5730a0c9efbf89e8aedb45dddb70d97e5dceb1578ac8408e3b85a4ac95ff3871ed429be25c5a8d0f282f96a9e950b28372cb1a60f1e3ec3436f3ac56ae999bfad00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4241bbc55c0984499df7261aaa333d46c84056f7eb9ed99906e3e3da210d5d2d3503e743c3c865e3bcf73f701ae022f43a11f928e1b8d3cf4395b6beab3978658db2dd9c0e0b3a7d8e8ae3c4cb12d64708f26a6c9cca51e74f62cc13093e2d5590e466ea67dcfcba6bd8f41e2d4a4bb1433bd89304b45abeb41e6f41f58703b63f34bcce224d5f9242865a840fe86bf1156f528ded96821c1d52635533f1a093750f6a779db52e4558bdfcc18ef6b8e2852d820bb2cb3f072fb61517e4e0bafcc0932cca72f7de7215c1b278076a1af54c33652097099aeba62e10bfffdcf37ef479d6eb16946edd46b03f99db6b6651a3319ed065630ab0f6b0de895455c15e653ab52ef891299f241809734a3c7a8d2eb5d1eb59fab629534e52d2bcb23b72fcd669ad18a550141b03ad035ae60c2c1922f1fcc6f175bf80581b24b29f4ed1f10edde68dd208e7dd77e984f7cbe3689966d8cedc8f017b10cb41fcb2d872d2db62083a6614bc2286d8d8c84813c4dc57c97a46840ba8f449bab02d1feb2ae394614b67bdd2883300da70bbe55dddc4020cadfc4d06b54f6448421b60033a1d8cef84dc4d4d1e5d7f183f85551552f51eb7da68560f3d35641482374a35a000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a55713e8544c40e426eb8fbe93635e308118a15c48e1b21989fdac546658cb946856ad9cbdcf7c06871edc02913ad5ebcb9d61af5a2418c7a8a998bcaa8bc234f50896c8c56ac46007289e1e935093af22e62d4c8641438a7faa172341fb83c1495235ab836cb2682718d4c5625f47cb416b2484908f4f32e338e4ca6fc94f41cb34f1c688192d2884cc54f738e8de60a007f985ba45296d8b1fa6030ed293aa0b6c1ba0dac9be9a4f299347dbf31a3396bcbecebb86ff7f44ff79d5f1d18077e2daf93ac93eafe02970109136bebfde5b5b920e1fda5ab4f15fcc93252ce85a1e62567a42f79c610a8da6ac58281a28dc305912be262dbe5783a5bb8f2d6c763a8924a34e7929e3b59f9bed697f86ca2b6f4d1fc534b8102627b3de080cae27fa2480fd4e1fb1d392eaf669f5408be343d755d38bd98401412cc34d15416f77c7d29564bfd4e142724338f7d81863d7f5649f0a2ce5c9a8230990600fbc5b0ac395a5910b2bd05dd596832c767a907789416dc8b06d915905c6ac04f84f981442c380685fb6bb13869b3ba4a25d911b25ee2baff7f9a2031da7b08932b3e5195fd75a5f8d7a9819cdd151e69dbb37134fa53f47bd6b5344eae4e9570fd81d50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6a959fd5d1c061f88308921e7e599db67b11ba276f90f7e3242f6d3323c3a54ddc4a45fb6fbf9cf0208f54fdfe643bbf760fe00803c1107feb2c6f7e895bed33a184c3a1b3c8421aa5f8aa0eec17b866277cffc37e2e646e7e9a27c9fbda8a211e933cd209bc6bb23002b39039575483d2c47549bcf686d2656eb7f3f36c8e56606badc660f583c4b4f7bbff8af841b9ba1e14e28759ec73c95a02a796d0deb1dadd4b033220752b7ea40a027d509fa26651d26f1c516580616b01b696f2d6512aee3a1561e27d1882a520826063d15e99913aebb579e283c21b4b9f3c0a204ba6dda40b0aaffffff45beac2800d688e5e904531aa5a8e787f6db5cdbf2cb5a779b65395de071286bc1b940a0eacf8ccb463e658633382f9f924ca77a3094d3f3f593f79778891ab8576807e690df88e1ae3b44b791bb427b3a7b13a81afd5182169f5fd2728732ddf55fc5545f5a7373367c662761b4d3c92703b6892462ae285b498eb3ce5470014370c6cee3142941a5cbbba8307f1bcf89ca7fc584faadc14017a88e46f457342c401c67e9e1fb8e291b6f7a2b835a7e6e4ffcfd87b85ac192283bc203bbd38659aab7c8c5c7c768b498a1b55381231940ab8035b3fb6000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ab03c3976a6254e55ed5b549583b3ca6c09149c9042d8483e936da1e6d5e119dd796803ca970b5929740552010f9e0a8d5afc96b10ea18b0e087f33d172ff84ad474d5f224eab853cc1e8d421e7f78b4f8b2512c372016d75c88620560179d99ab1b6386c293ea5cad922e2c464c548569c3bbab772890ab2f42efa69edac3ab378f13a000d3d466a62b427a1949b7fae4685e69d4fd3007ff8a158ffd9c0ecaa5fd2d765e3af68fb59afeb5249d98b79c6f252bd0cb83569486abf46a6f21c7f612e7a01674971ab6081c67ee861889bad7c8dabed645e009ff2c7d84a4984d2f0b897f53fee8f5eccfbe816ec5907ce4c75b81a73b0077399462866d5e60a25217c8199c6321638e275bf493cb7915b737ec287aeb89628275bd56168d56d0295a678a42c8a1cf70bbac00f1dab84281008d554da73e0f9cdab06e759ea05ee8b8e3d68707ada2208e6bad4d9de7970d3cdc1c64af2c5d26c9ad61c197399963dd5723d40dbb5ac9d1f1801b8598ff7cd34144a4f9c1202eb00ef9b4f90b0d689df3edd7ddd4e396011e3c4d061cadd5260fafa65e3f467d511a14aa7895ae577a1b9d4c6677d3811fa91f54cb038a80e76e6dca7d37fc4e9bb0ed05e0bec00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000287b52325b5194f00ff8e071e898100eeddb5868e8ae672c58c4b834f1d3e41f539156d73a1bec74a622a7e8a4f435e4fc9217c73e4bbd102c0870262ccda1e93fb9ea53c25ccbc5415c0a42d818c348cabc67cb9354253dc0e40ed6a5b4c225002f8e0e06f14a705a956780282330d9c04dc4c78f0bf60739d92bf51aec54c0da47938e2471d74779eba1bb33ef993b1e9878e2b41b715da5a91887e966fdae996473fc307303ec1e3d868c3f3b967b20afb9f6884c3024b5d44dd296f1ae3ffa267d8d6af55c1fa93bbe036af97cac1c7f7daa71c79115eca0e7fa6a38c9b3ca7037f6cf172235bf666f908f5ce446e6edbc6f087ac6540b1c3677614e7e70719d37bd233091cbeeeb12dd6643a5f80bd6339cedb58e0e5e40117784d78a387c7bd765e5f230e976b97fb7f285788d9acc16cff2ccb6e34fd622b44e962613ae1a206c64828bd4af9a30cae5996ed8c5d4a94a115a08f81a20bea6abef35b53f69d0c1e801e14bb5ddf79b597a3f0b6c02db373a53671ba0dba8e7ba9bd3da129dddbd32f455e346c302e232cf88bca86f978512af5cae7a906711635822c61a3b914272c1c945e2f96df6d80e5862f0318d7a7d454b40b8a7d2e9837fcb700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c0f3e71d3fefcdb38f7fd9f9280f5639737642e58c0a569943cb00c1a1122f1e6fe955498d40bfe23f4591d92210b8a94ee51277889ae54d291f898d5a876441fd4f0f0b4b072ccdd4a974373f7e29d3f296899fdb9c70ddeede06e3856c9c9037379f67f1d9f993f48f4901ae53414ffbb4c6d67c8606d3628ffbed74ff6a468ffec5c070f67d70bcbd269da0ea4edb4d0fc9ae2c1c8ca5f65db61f49043d7318aea23e8b90240f53b34a4b91a1a2b66161233f613cae25b49fe19b35427a688e91910b294ed1e6c852546fe68195d43883bebcbff1f40ebce66770e624497254170cabfb4790e85d7199e6c9c391a2027a7beab91bcefa3196eff9d6bf34c69b21524e0bd1faa554b029f3c29e80b0c0e73b17ba60e9e6cc7d3453a9f05d6142fe2dc4b25e349f9babdb37e9d17a76d94a40f2b172c2481d9986e0e42788dad7a7f4f085db033cc6cd4fca200852106c918e5a5a279f48b0d4e20ab07a54d3dc95bfa1c23681944974aa5a5d705a17cc6bf5b44e0e2b55eab735fd421e8c60c5c593ab53d232c2ce8be6b8b0527bba4f3a7e90e2be524e0af1cfa4725e6f8fa9c797d1ec2a71197bd0773c950fd1f3cc0a95254edda7f200c694cbc4ca36200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ad74c3a7438067f9f87fdd03f0ef28518115f7681ea6f82fc47c20b926c6c9ec50f4d968b42d80e519d7582fa82b5eac702f23c86eb24aae0dca10758d646027d54cff7bdb15873d1f1ef4bfbceaea34ee2b9b22ea391bbe85cf9a0298aa97b4acbab59d71bb4cbfcca084e4e5e712c70333cb03ae465b45e6ee0d7d8bcbdf65b26d729fdc04214d403dfd29a5a8405060d07168632b034c96c372672f2be6a3f479fbc3c6851f8367818fe70aa848e12e33256da1da79a3d8d77a0110ba29ea20ce6bffdb3ae8aeaed47b8b808583abfc5cc4b6b8d60df7ed2937ef5aeb0c93d644bf68a701e0d9cfc451dee42908077419f8fc9342a0b59e85afb591e1192e88c6eaede248bac6b7407399680b77139593798d686a532827e933fa18f3a8a6b68815f56563776df16b7864ae53816427177de0389474544a29479f305318c216ad36d3357a6cf9976a06296f0fc05685a52947a63932b7f7581d1d482a12a9b32507bdd0bd3e557765169b2682e78bd46ef1d32584d7424737542e701dee21c20f104d35226a9c17695b7bca7246a33156321eb913811835801eacc99b4b83a8d80c64c5756d466ac199255beb1dd1b3a15312b0159fd81f1c2be268a43d10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8b19040cc9dd026d970fc78007c67570227fb11ac29e41075b9a95302d36a02109d34f6a060ca2d0e53f0386b4f6ea58adbfe92c2f20ebc42576f2787ba27450562ade81848b9a782b83a8d2d41b1f0191f764e53ce4578855b7005feabb698b5cb6b40384d12d9a9eccc056f56a86e400c10d8ec0b9b9ab9f0e9938000c2f22aaa20a3673c39b4235baeab436ae4ee8204aa2e1792c991b5112f4cb19bbb67798af51301f13f399142f48b903e5fafe2ac6152982945c2ab371e0b90f7bac4bc664efd550859449bf37c27a0760347e417ebe6bb410ddcee1ad51ea7eb3e56f8760e7d22978f6bbe5f8dd460c29988300d7fd722982049ead082a0e8a3675ae42733f5157b790e141a4995e23c0c7df99fa86e7a51a61e596d3ef2ddef6841e52cc4fd235cebdffc71e7d598e4ebfb0194bc926097bf12e097789ad222aa5885419d38381085967e5136cf33665b2d2d265b279034bd9db70eb596f84516851f45264fc36abd3e9b5008e21a4b21388091ea30e963194b87df6b8a8d59b4bfecd7e3bba20532231800c517eae173e5d19e927e2082bc5feb7451eec798d9125c9b6764d37038d65224910ea15cff0a7ae44bd4df7d99761d3ca1a57d30d8050000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000195709dc3fb0464d229f209c7efcf5616e22c14410489b1b6dc9fe8c0408e9658baf09c47c66dc5ffa6f58dd6718613c173e0615bad915ffa94a038290f0312339f6a9b17091ef72e2a6702841ba0381152e4e6e3bc1c00967f927c6907192617301c8b2445511b19d26d3ea973f958d62e4f390340c436a5b9c2e12f572261148de2b520271c459c2981be44cc84032824b41099f3bfe74e316beca5bc7714adf09c58096591886a0a88fbcc3dd7943b0c229e92025df4ae1b11c406d62dd59172595dbfa0006b4c8e59b7b54aa140cb66bc0a4267c1010b927c6cbceb6132ab1d29e796112836bc03a79d6234a52aa1e7b1cf8a7001e000583cb969d8eb7e04f205320b8e52c692b550c554da35d34be7f5d3349cc15a28c2a36f71d9ba137b3ab15cc12c1e67d54efae43a6c03d2838f9a6103120e05fa438201d30be36f337b08f1e65e8d2ffd9582e9e8742669f17c05de27721cda4b6c52c756c41fbecd05726a58aa9bbb6a10101a394ea5f0af2fdf5de7f5f0a6943cd401724d4c08a34b51c907c2d5af17f5adafd886328b4ef7859d1b406e27b286eae4f390d4c15c0d6078272d1d1f45c9352408d1ba522102c8f050513117f7f36d63b11cb890400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cafd1e025489c38d792096d77a430717f89aeacf20629da15a54b4df182bb0370a49adb2062e49479871057285522a4ae9c020c9e98a1b7c5c632f1de7a45f487a00b9792ae27fd5e6beccc26b6bff7d70d7694260efdab68365ebf285f8acf2b2d46c7175ff4cbd6b9671348c8d260bf8d73f424e6876db2104ec31a6bc1a10aad683b8ac30a3b1a479c231b9674c8033888429f111eaa30b8800e23543719620fd941b950b2665741a834c69fe09cd7bb327895d5ced299fb18bb2a1bc8ca1f511216d036eaa1fe820c05ab0460a482c9101ca382be0e46f1c44badd5c09d95c00493b71fbc307e37820c3d76c96dd213588aa2f0b52c3b1ff051169a1b09a2b46da4de77774410db10d1596886ee9dddefaa45250eabde7db0ae63a5286a7010e16ece1a72d4eeb768bb260c27b61881f79f7c368cfe62e77b9a6c91f4a26de18c1519994d9726ee0d80d8d5d470f787bdc6dea56b566063dc87feec4f093faf9fcc84ae560b7f62c3ad64640a64f6730e09a1b39ca23695353b800b3dff71860d803e6fec12acdb8572d957ea572873d0b83b606ad2f3a559d637afabf63f21c99cfd2916aac777712efb375b432f899892f130c8c3a39e5ca18b78c6770000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac1b52be22bef4f784ce817fcd04ae5101cba2a1fc0665e07381e3cb1331a4aa60846268455c6b6e8dd2e7a4c9500c5dd9860745e7d5e3c6ff0d77ecc19b7823472df5e9f7245b62675c1342284a823bb98d89bfb39243a287c42b0e16ad9a7b10c1c3a2d8350ac7d7ea0effd1566835f6a73cdd13b6c4d613798ef36b39bf48455da42d45ae67a4bf0cd211a5927fce77286c712f3a2facd267e4f9e76687f7075c0a8f67de73086ca4a1021e6f901d78712ae23b948593592711a7e5a75757d688ea12e3f4320b2c1064776ad82019ace4b4ba31636a6073bd51aa14044fb326de327c2ca2bcd72ff689c341a6659509cc00e1af114322e866ace0e273795713a1e1774ff6c658da79e398331a1a23706c859cd62028afa03027eacffe1d3d9403b983a8e631497bb8d5ee1cb219b1aeb66e0140e0f07480a5068934116285b1ea1a91df91855fc61887f1ec1e39c14b8bc0c51dc21ea0248a7aa212d95f6849d10148c477cf0a232097fd417fce74f57be05b59b7e2c66727ab5fffd2512bef94db1a09e66fc7402a2d602ee84ec5a630d1c4089daf159b0a1b655865006b09e98b82bc772ca54134d9ff8c568a8edbe23cd4b873f5337aaf7f6f966f984b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090b04360a8adb8f09574619601525e5a034f6d7044d0191dc99eb74d549f62260852bdea754a03f23a29697909f4b92275900c82350f4b99978bfd73fdfbbfdea9047b67218720a535ea534fcb551bd411c6acb4842778f6ae979829e8b55062d2db5214925d58080b70594de1818256b0d8555210101b46e71ad98e5bfa6fa22b92ec29f2efb41cb487d2eb59ad704f5e25d8abc8af08bded6857d86caf35b7a519bcb2e33813c4c3242b525d188de40fc133d369cecd0297941cfbff8ef63212c5db62babe31a296324155f3177a39c456c6643167960d86105665003eb0c733636777f5f5e7c331ae077224066c4f10f2fcc13583befbeb8306e65f85f323d67bdb399d15fddd490e7ca9d6f373da63eecf61e5ce78e229c466be87aa6d99c732207bf9253960ee929a2e8f406f0c90c7b2942e8c7c7822bf9df170e569dbd4280a7fb70d85287b7bdf008fd545d19dd8cf975a8ba922f1f318d25ae246978fa9560dc4b17e2d0a2607f11e002091bc9a551a365d63adbf7c31a6c6cbb53c0fdd3300bc96a052781f7b5b8081aa276351a4ba7ec4b435a1a64ce9c7b6f5ab0f2478bef58d719c1549ee87bac85e7605c9cd792dd46a2862e6f19771096791000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024894faae0e418bdaa7a52daff6404b2707d2f25200bcc71e8221c2b4fdd1386c3a83888ac07373a559037b4e66d80423deae4574ad1a03b96048e221ca369642bd6e98fb69f9872dc763c13f2f9b8a6ffeb6500ee97a81c851099bb271a4760977092bb162e2cd0586661d778e2f1536cb4c607251122c4da913547f3d9c913442065646d6ee57443a95b0094d485b6047f14bcd46593c047c63c00cc6c2e2554b55cd6041785685c1c71ede1ff21477561f54705724b7e09fc942e67454d0a6af2724f1ffd2e441934e994ca0bf873b9020e97ccf22adb02cde3f8628a63fd01dc9818f9c71530b5e1726f8637fe8b3d96ef14728774762c47e71f9e414aa693eb9531c3e851574adcdd4aab25dfb967424b160699671b329ae91ebffb4e8a4a8772b8209ed1737c121a70cd281622db87a7f1c9bbbce8c1b4fd18c5420d4bebca3a5e746d9513b307494349c1fdd892f962a126c2a116b5deaf66d2747ede8e0df127326edf8f8c05e605afd7f1e11b81f28e8eed5f46f4656473158b4e885f5c50deda1ebb4660a8e9919838f4e3204d2e314cf6cc084e99f854332ad3639fe2d6c88c04da9fa61bade8c1bb6d532c2cd647f61bdbc2ea62bebf2e2eb12300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000420fdcd83163db72ad2445e66f59b16c17a4befc5cab93b6448466c1749d35ecb31c711a4198aa2c8ac1b618187f2907df5b62bff9acf5086bb86cd2aa4be271c04f180930db3ac229a8400390a3eecffa6d5a2c1a720b3f42906f4cf34bc394e49c2fc7de7a138eeefa977f4370d9159901c56da4175da4ffa4acaf68f7ed960de4c590fdf1cc26eab4d59ea43bb6bff58eca3a4837297084d1eafb800338713352fdbeb6ce123d857c0850e551a540dc40923b8132bfcf5709f6c3009363db8bcee6d47a067f50e956d069ef7ceeaa242ac3f852bd65807037aeb4ff9f6ec63f207006a8d169c9be0c45e0f1b16f6f1f6c557e2f187a728b58910153dceca5561a20ef87aa4b3a7cfc00f196739f437892b098d4b75e6f31cff5ff329fe2af9abd7f608b1e50b62861a42811f4bce51d17e25cf7a308f4dc875af0fab5b94e2d2d1ca7589528916466aabebbf11e54010517748deff37d211e66d7f965415a8cc0646b68e74f8fc3f08c65e943f172cf0b638bf72c95ba7c6ef2ff9db148bec3cb541a390a167a41c753134e03d6e175a82be0e3c26484fce312e81ce4f7b67b52c103292dd3cfe251792f47b2f88612d7e7b35366e7b05c24221a8e67f170000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2fba8dceda94b17a354e412ee31f48b378c454f401b28b46c6954edc90b719c2862b952f32902bf3a8099351999433a9a0ead270123393f9320c4ab8d6a4c86392d0d2fb58cbfae507f93d75924764a03da02541a78845768638a3bdd94bf9729e403355350a9824a1e51df29e1514b5eeb96be56198392a98e4a74916ca1e21399bab4464a310b4129d0cb5c8d6f27fa6d54deff26cc07c633c688618e00edd6c75ccdf2454b395dc84ee5f07d442789c913d6971aeeb104a97a53faf408c7881397930b8d7fbdcb438411bb17ca4e3b0befecff54f884b2d7054435ac8e863709ecce2ee8016a5331edc8037e6038fe62b8f77189781756205bded5d7af83289120a222bf4cc15d281e835364921ee9a93b486908a5160b35272a65b638e0180c812efa3eec00628a9f7bdae19b0a5176e3c8edb7a1e8dac6c5119ec1bdf73afbe2607c3a4fe2fec462d29e58042f84c521c0524a01bff7bd4793ba70f1a074f52913fff2ed395ef44f5aec70090ee62b980b1f04888dc47488c63bfad4cead11326bcbab25eccf1ed294116c80adbffc05708e29d58a2cf3cf5663073619b3c7eff54e9db0fc813749876708be87ecb82efe4e2f5c6f7a0f2415a4b880180000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a02d05766feda2b27674cb51aa78a7411aaa03f701051fb700f09a5d43ca1a80b02195af5d19dd3cc44e0588977e46c2e85e1de279530b9b79d201fffe7ff052a8d1a4541b03ea5b11fe9178be5f03eeb8d8ab6dc894f37dfb6900f863392aa53e2a7ff634f6c38ebd22571acef96e71e78ae56bf655b3ee6b90410f0f7d544ed6d4d12697fdfbbcf054b5f631126faccbc518dd2056a8bb6d25d5dfeec383869cc8422b9ca2fc0d79595fd80f9df87b470f1ae2bfc6fcd40c06a09be0399c58dba1f07d9269ad1ead9ab12c7abc29fe16ad6d36805e4641c4bf78ac9bf407bee5b5e1055a2d9ed9f52fae150caa0950ae3fa8fea320103b3e4d8a1f02f4506a29426632f169f49e3a15e9c0feb267b233bb544af96402c52499f4a63e976227924b4f84beb6ed7d4b55858972f6b278a5d38b309c7ddcbbaf2f5301727c4f250b1619d37c39851cbee19adc2e51244351adb2b67ed60be5a5926ef25424aed1c8d27decc11291f544cd3175d49b38cdb27136d8311cefb2ff848b65fcf287fc1de032f090ea6bfebb3be5d888e9bab68b3c332236d8903f6c36434fd58f358bbc8fc60e9b2893bf50c7145402bbf711b1e44263f743f6e1f3f099fba3129e1a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a7f1b0a642a047ea35257788b49266382ecfe6b640c9f4631b2de54a6fc2ba001e6eb1d34bebf7e6caed2e104f15b09457c4abc7a58f123ed6905beb85a6634f84577ad6204137f200d7ee22abf46f176ba598ac817ef21ef5b65f603ee8f126939ae5a1d9372b0c79bffd40a47456eeb796051361f428784e8f34e057345bcd82afda404d04e4502a0476ebeee44be624d8976ea27a3f41898b91fe7d43ee33c88a138d39e4ecfa1f175a481dc75d482e7411904e3830548cda6eb4f4d46f8d843cfb25de8153d931298aaa43a8961b7dcdf1e0b75f38304cf50abee38ab72a7bdba0ae7b992db62daf1b48b64595160f0db612a1d187bfe845150cc61c92351a8eb82864f7530094b5e367a3ff6365bc5e26b7b7e893072fb68af02cc873bbd2d63dc50504644018dc496d106b7b9a5e6ccdde59a1a39affb932a960be5914a1715495867d38820b5cffb946daf38df74b4e9a818b3883e81c858f43c6952936899b585aee5f19fe75983c1a7bff0e1b8f5028a912284d72151d31167d756138f316fc410b575125e23b4c49c52e849ce63a3c99883546ad5afea2d495923434508fde226b5cf16d40abd2defcc5994fdda0a336dd2b7ebc922c03187cc8e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a06cae961e5c23c68bc58897d464dde69ff67847577b8e2db0d7874974b4cf06021070b4c77796992b30a7003f9b4bcff8b7cf66b82fd656502ed18517ac38c4ba49fdd36ce07681cf1bedc9536c175e44df9c68caea3a8ea63f4caa8d867dc3a13a27d6bbb8192fb5c98095c61e837a98601a441bf56abda793d2183df54274416140ccbe880c90104037ba20605f67d01295efc5358656847ff0f4568ac46f3276473f6433f897608ad51f0781b981132fd6d3f57db6d8700e0a468040301fa6aeaaca2e10f56f6e30fba8d2eeebbeb527db0c437cc37945d5267398a61f1128e31a36dfa285b15bbea1b09243e17023b88e625843f4dc0ce0a5da8e9b2e1ccbe63a25bfc382d1b40fcd5ddddce71d33042bc3e28960243fd7a122179e9a674f66d14276e5c78e72bd0c983bb6fac2c2b50bc1dc41c7235300239770c49494ee4cfcf9ad9035808cc5b481ceb31b06cdceb7288834e24a2e3ff7f0d365fad28246ff9c6701bf5f5a93e064239988947d3e12b58d9fc453ca37c030c327a2d31675fc88f4c3a3aaf86431ebca7514cf1115cb43286a0811e07659562fe6920a8084f5e71a6e72be35d46bb05626549eae0a3aa04eb6c4cadde9b176e7a7eed500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009266f71bce76b2b5f25b1421ee89b304d0fc93aa0f43ba6bcafa1fba011fdbe52631cbfeafd45b8568601224862810db06078740c33f4d439b60d18112776d75a211ba45dbd4ba52d9f5119876da8fe77751b119ac7b51d22191170d4f2e9eba7f898c5640f0b0f063cd386160fb3751ba4e0e24781100a2757d7b6d1e1b0e08b110d5e010b00028c77daa01b4f606acc794d9cbbd85d159d048b213677e7b0ed2813618e4c1b6c239055ceaaa38982c4917c29fee4514acc9ddd7d686e8b66723781db04696134ba19fd5f76b533e7f5dddba3a24daf33ced1c5dd9d5e0852d7039074d9be996888a1a71fd6d95167b633496d878b713773ac9e52552b8b632a37a7fd9c9fa94554f0161592998a318fb272b69145198251ff66947efd699d9c520132b7c871888771d5a15e8b1875d5912165690b87c5908859d2e7dd128619d2204a2e19763fc3c01d8d8a303e61af4e29bad58d2c8d35a3ff1b3ff86afb2efb8b35dafdcc5c69c86106fa8c442c4f18ad1408b47ea93e91f446bc8ae859c6a31c3ace75cbb3d913cf889f903337864886774e45661ea25da2f40211659d73d5d13ada8504ed264c4008b102ef784fef5a5672ffcc4738fc1fa6af12c415a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f46c4ac35a701a5f6aee2973a5726957c6d7aab3a6054f3c598036b05c7c231dfb20aa722cf682030f1c9b98ef88a83e152c5c59a91e2bca2035b2e502c9c2678ef9c1c991c0e3c2cd646610e99d82bd2aabab88e30ecef9fac1039acec3d53fbc1c87b2b8d02a54d9ed5a666838a93765359d73c4e020cca65f034531a27ae8d3efabb68e121a9bd3077601c23c8f509d95f2b63b708e1eca1cfc6c114d16b5cbd86ee7d6ebca4fbae05482b7352d0dd887288a869c7740d1484279421a8aeda0988bcde51ccc1a19f80bd710d5713ca10e80d25bb182a2ccee5dc3fd043d81e0de9a0d5ee6da92c3b445c97f2b2657402570d520e95b33522670b2139178b836d4469a18f147451b6a5ae657fbf4d95ecc83af7b790c11d84168b7838ccada3c2b245919a2e0e05af79a28916607d9c7f158ec6acc166d6a0f3a5b100f988743b44e622587b0e4f1a0cec8aff17fc27d527ec98681857c328191c08c2afb57c6ce4bad5fc193308a7013646792776c5e95cbf42e27acbb1df8ce0fa789f0480dcc7985b393c9ce5017db24585a64fb03797bcb967318e3c8218a79f7e13cb02a818c1a9159a251dd85e95a7f5686c1c0abfb6497e008e626b56e47d3b8f8f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001349cc5e89e603613e14005a8b0a486c1c059010026b11821c33d508ffd124f38d7cf26dc48cb8e3a2366da1fafc193830daf9aadc93120db09ea898510862b1028b30bf420c8b469413983f343c70c10d50af62e108fa778e8ab6b334a9809ff0d59b764c6db580c08c08fe0cdc3922ff142537b920172c1db6e86550b14f9f2a900d3e219c30af029436896d335a3f4371d5f18bc18ceb51c8a150f95c74b34ea66dde97d4472fac98cc66a6356ec795716ee80c3901c78ae68dd12844cd8c7d1bb9154122eef23452d6fff977762ac8d2d916e6ca6d148ded56244d8dc0e5f910ce82dbf9b81a67cf9649224c51d5bb359f2f9791132d33839821395e8df2ec0783fc9ec46b203ef1ca25f6a0ccd66bd426317689520d0e72f6dde7f486cef5f037908801c6c03de561b945f1239651346551fc713542e055411ff88edd76f8bbfcccdcc412bdb485d7bcf5bc047b66c928fc6381490183a80fa79f0c513096df28206f1c25814581e5263ceb1a7ea876c1b43302eac844557576623732a480d3d6d7b0f71ddf96c7a5224dc6feb704b4a5f78d2b13627c909ddeafc3e579a7fb97a07edc5dd2a5d6d73af8f867e54270d3bfb36c50466f5f1dfb3cd3820300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e06b7914568472e4f9edf2f05eb5c1a062b169603944a3ecad1a24a5f6ddec42c22dcbcee85b6a98bc19b341bfee4de273a589e370e495cbbd73a7fc0a0d322053891b888d04654deb6c5461f9a4c2fdc2623040dae92f7f4540cab0be8b02579aedb383b1075a44e8c37d46f663f1e8ac2c798c29f9d9d9c9b666b029512c529d0cc1ea8c05b961f67b30bc2dc2e61d13122e8ba7ec9c387606ba11c47ec9e9828a2bc63b8eb244db3b7bd608198659f35572c5f00396514118296a10c2cbbf3de03310ae74c35bbac6356a509fb0d2ae892051b5defb9b3dad2ca7cdebf4dc609e72e33d8f725dae9c1c6d79f68a5daafc1624fc8d9301828becbfcbd550f1d55bb5f9f19108b1a58af9310e194b302e89b05b35fe99275abfd7d0fc753b165c789d9a32b33a0f91d67f2b4b186833c08883a92a58fa332a27dd0577505d05d3c84229ba682682e47906d2aaa5d3125f1891fb4fda310c0598df7699c8b4e4bc39ecdebc41cfce65100e4c0ae9926d0865f5cc2ed907c2a4c073620e8c14b450b16f9112cab3f684dd32f6dcb3054dc5a889ef22f881158b9deef701a1cbc4e63b4c7fa6a331256a123647db6453b269bc331cb006e7b0fcd48adffbac2a500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009181cc379941dfffd57d4c5554875d000d9c4a121b28ef5054d06f32a5ddf4af01e917a173879e8bafd337e73e3c2c05615fe15cb0a42f3c30a0c861047fc19dd0c2098fd409dc3cd9d9ad72394b38512e9ab01f6e365079134d7601b97d8b5d4f5756613b1fa1ae6053d82f1e4f08c5cdd21dcd6c657c0e20adefeab09a45f970d7f956d55557e89c60fc748fb9580d52676ab7eef04cca13b07114429f147021d75bf2726937c1fd4f59655b9df1e81bda2d7dc0524f42bf53996b0fe34f468ec070e0cdefb6b854eeeb2307d805deeb082ccd92e8d0891c8051dd0089ad5169d2e0caf6041b64b3982c98f28a9c502076aad8d21f4612af9aab39617aa55863c1bc177c716c390b2d7d32b7fceadebf50fb5ce0e8685f621f2f065152462776aeeab046a3d9538ae8792ba3f9bece626904205d7fc7f05eb4a9e8c60ae3d651d9e64a6a02a08245267fb619d4bbff5f111fd9bfd9336ddac9bd61e1d9b0dcbe4bc562c53a40d2a865600c9751151b343f413a642243039f8342043a34f68ad3f55c8bc8c5f837669f01bfbca3e4e81fcd6e84cd1d9cda6a11a04bc041f2bc3858fb1f3d0ab232281887693a9456d058441af4183c551ec9b839b3760101c6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084c0a9ecaa99d1c195b67dc7de087220969f43a052c6b85ccd827c0cb864037b0d6ff8ca9ca32c52e8fbd3d0ed5b29cca4233ae9c04e87f3054f60d54c7f619ada1834d4fb8e936f13b861a4ca3dc8af7f1e8425f5e68d2f5848fcc5a7dfb9733c85e1df63fc862214728000ef5c755ffc9537408e240d93f98086213ab0aedffbbe2a2b17dbfd940f228c3c423bca74ff77f72c2cba96654510257536565c430187d8f7ec50188bb3e586a7337fa86fe0ff6c43bf3a74bf6d12bdf558b50c6d79d766f14be2b4ef5f68ecfd061568e3ea79e85b477c7d698da631ee88ed4edb7c3581cda7f708d1361a80b08aafc932c8589f3eaaedd32d4c8c2ad2437a9eea48a7d82dc7d1aaeaa64c15a46474cd7d9f53d9db81a9cf5eda4b0d24fe2ceb5d8c0ee7305280aededdcdf83dc3c0428257d338a5e6e718c05a8d40e0c666d64902e2743c82d52ab3eca5217093132eb385159db763647cd1ecc1ef180045501bb931d24ed122d05bed9ed59dbaa47052fad47c0a63b90b7dd9e1d1f5122ff4bc9830c53c263351bf77f7e88ca19b548adc2ae72428a83b6480e7d9984b5641e65d94061787a332a8eaec45668706c8d4702c6497e3eb6eafeb215be453690ff6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082596f0bfabfb096d706e6b55c37f88a540a1e89e5b5b84e514cb190ded234f8439e5cd1acafe2f1bb5806040c34ccaf74ac47ad892c8abee258bbc79f96c581afb613c349db557e27eabcaf446073c1971c1a544ad75252d66fe40ef11aa4d37ae8dc9a58509095789512d95f58dc5707f4fb986d2c99d1aff1a9bf1a94fa92333abb9a08b34d236335b14cebaf81005f62d5490c57b1c2f1cb9c2e6fb58073300f646ddd83ee1f9269bd9c1c0dddf904565134b9f1b63c043df51324c97084531e92bc2e7d922a9bc35bb760729e32103dc0b97d29d7b9bc98ef10f184693208c2a351a3ac484a584453918ba9655dee8d92240cfb63f1fa47e649a9e31305deaa42618af1c53e012c8c3eb94b4a35753dd4d8cc11779620503b911db52675bfddd2e279ab4a596f0f107116ab94ddf56fef790695020da524df487197d069e9346a0a088d4adb373d63bfd67173336bc1bd7c66a2deaa94cd07b01787e6f3d6a8f0a072a07329cdb3ab090845d47820ac85f8cf4a28cb537af71a6850f067500522f8c6acd4eb60c8711b6281a0199a31482bf3ea2d8b3457170c4dbcbe6a836d0d89942983f2cc520566caa439d78ff9fa637d77ca79038c06d3bbf3c30c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a992b5920b41dd83a19c9a88792a7f63b3c747eceac4dd3b28452fea43ab479b3cf30f200584248932b37c0b2bee49ccc33dbea7bee41190011248c8ec01281e1feac81f2fca726be4a805dcb42dbfcc8aa3d0531f32dc3646132f0d28a25770e96b6c6defcbb7af2793348b40e760d7c506e28a17255b4e3425dedb81c9e3a7f81c62ffab64b3c139785bf33d0d55bbf265c983f92cd9083e56697afcb8dc0c39c51babc35f7d636318c917db4bf887b2d7110975ac1010138b5f1d9885513429f6855ae72c5966386d7323c93ebc15076bada57af3fe55718514392718d5650e9cb015e46fe1b0ace2506d4aa95680cd45194387464fc33b3759f0c0859e01311e95f0e99ea4d177a44874fd10909951a3e93aa0bded74cc6a3f3d7e6937e5482a1bf802a876f735e4abe0e0f7e3fbbcc70ea64069111863566202f8f105f50ee12249d583240c84519eab333d04a47da0461d5a71f15a8f7ebd26ed8d3f1c4b266c952ef22af2f65fa69857c041f87f1abbfb6c09cef01ea413a18820c957bf201747945c4884ab4b854df060f30b1d1f0eee39bcfbb9c8c65e9a25ec33e70487bccf7d615fc9b00ccc06aca999937ff5d70e2e0bf8f09d8cd6aa19d746a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000813f7e4930af6e735b0faaad4002b314b51596403f1afa7ff01f7063ea8ba9ec7e5384fd25aec29adad7e9b0004598e699cfb356a0e56cf65b8908ad1892ccaa3c6b1ca20214050d1c4d689a145410574e3ebefa714b492f341f8464acf0a3ca6af1f35117794d196f641ada866913ae72b2d687801ff30f2f2296ff89c85d3cb19de89f6cce00dc80ea6182aaf9099ae51e5d5d3e2619da01a8d999ae4538bc5b1e15bf494f0cd48d404d1dd33dc26a48b07b5e783970e9cc079794b7bff1b8c2bd11d49ba3124069bea43f70d7c20dba0df65752304d4b87420f62900ac105240b63ff4fa22695f630dc6ed248246378d85662f09440009089f3c450ebb3cec2562b1c681f51c8b009509ab9942f548dfc233eb74a8bf410762585f8e8f43d4bfd5156432269411c434f87d6dd4eb565357366941e5889d25542e67d8009302da71c9c8d10182a6067c6b04bd5b8cfb958524ef7b376ba6d0b94f4b19ab0402a071d358b233d01624d92b23de735563eada5702f0672ead6db2f9ef7eeabe59602c0ca5a146f92a60344905c2c101e2452f0965ee77f29833e1f7ee440893331dd08287b98d013034a73b9a05ca26ae65bfb876beefc55c7ea819319bc671c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c4379759df43edb5e16e71b8276987049b20622590e92f1e998447f18621bc8db2fc01bc583c6bb9d61e9938e17969acec07b11c929aae21d4b1a097c6917a2c1dca54f10e0044a43b29e870058ddf14a8abb9efc5e3216ad45f40771b8fc9289987bef5ff395a8786a9792be1e691e81299733767222e2b7396463863c0c4b8e936c922447f27076441a6cac4a918b99de0a174f2473a58013373878a97c090f4d482790cf5e7e81202ac62d56d7d55e0ddf232fe86d2f271ac9bd60cc6b11dbcef18f67c1f9a3702df3e7589aa445ed88ae38ada53f56c21730e397de83e069889ed07259e5dca51bd3bf7b534ea9af8cbfe6ec677697789f94d34d5f878002d1d4c8af62d4fa9487dada8b1cd0ac017529b290d5d14a0bcb0a32100f499af1d4a433b81108c0de1b53d1792c4af7039089f2297688d74adc8a9ddd16a3f73fac2d5cfd752fb7d337e9e5696061f763fe5b3eb3ca359716cdd65512f792d59024c7dff5dfb3e56bc6ba1d502817041e48f6c995a1c56a59c014717da4898ba70b23d8e5887a1c80b219a85115a82ba56b8272dd66222d5d3f45ef1a33c6e43a940df255d42c8ec1c28ae8f8d2b19ed3d7c6bc6f27e79ae4d97707c642610000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ee723743117334f8db452fdc1b7224b327a657368d0520365591395c316cc3ec420773ee8b4454d4385ed39bbfc64b49a1ceff64cb97144b0834a4dc5f0e8ba15ffd6354ef33f9aaef9310fc38fae0aceda440faf8785faa58929791ceecd496b247e20b92680ffaa96a8395ddf73ae380ac202b0a478f9a8b7d7a70a2e4205e3f8e881611f0058cc7c3b1d1b50147c02c4eec2294de8f1d1b7607953a350fd577a7a2c3ae21ff33dce19ca96b05e8fa855727ee5beabd35551abb7966c3f4026aa88b61621dedc44e5698fa5ab08cd92f12c2f0c329e537491a881ef8d64a29e5f87e8853debeafea61b3e1d269d08b84bdff6c5c11426de8a3a5d342aaeb8516070d98de45677583414e1dabba2840c8eee1f09bb8abd500ed63b8aeb10ead5898f2f3dbb2fe9c4a383eb436ec2de41745801a739381be4a7a8cd0700bd6a400de9a233265903e613992cd792fde4cc6dbc91dfcb1f479cdf3fd001aa66a856375ff5860440a10f230f3fd3cf024f3dadc96830eea695b45ed1ec4bb7d739fd264f624b22eed60efeccc45531ebbe682e3591d990f0fbfa33bcb527c42d5e282d48495bd215213e601e52011a3e0f6f28ebadc6509486947a7e331465d52400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d850020b631b5a786ad3b9716066b442eafb98befc6f327df606f64961cc3af676f03c4b49205d5070523356c93ef8c32c0df64a254b89f91b401eccc2e7415ffa20e22c409a7702047a2249e1581812c291ed2dc0c43a62011c2017af7a1cdc46efc4f44e18617e737c2467ca5cd24317bf811d7afb50076f08f301df44ac20b83ed126a7a93b269a6f0d3fa637988477c04ab84e0aa9c348169130ccc843fe5f8d01f3171c87cdff86b66f50120f4cae2a83793dcbe5c0e3c184b54b8b1dc80bf172f58bd3a167ae83100411e33ac01f0376418f36dd416fa9e87f6380264b53323311dc43ab78782d4b9f330b1b10ecefd728d7f0c9a8794142a081b4bf4975b19caa973a01d2d52d270512ade91b7e9a21fd791f9c213fda3a05dd30fa51c1eb4d48432c3f6c2f6835f9f0c1e6d506d7c5f178d16850d717336762ac2d33f23a692fc6886ec4e15dcf2a204a0ec0c776e34a069d444ebf638927b2366559099bdd917d576d94fd24b8f8bd8c10ba81b54e4afe1f49a575c8df90829918a52196f154f538c5f9291806037c68056ba3813956691bfb6cb573b69a51c61cb6fff69e9e62d15d7a655f152dbf1d3c0a41b3df5395f053a65fcb1888143a1d10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000973ac228d28b6ead57a1a5ce6c7e95d278216d67d317af5335f70e90f88e040d368b4ce46ce3b8f03e0f4c35978ea275594c6dee38bd4744cebb6177d471abc7a175f2003e6b5c1eb335f373e54e9302809c135591deb87f5bc6752e17f9b84b1d3acde5b220eea685367de52c122ff67c1df1d4261398acbdbe952c4cef225c39e9dab6ac95bb75570348a02932d1d0abc40467f24141ca414870b303780d6363ac7e3a095ed6988b22425ffff9dc414f7db69b2a02dc985ed7149657f90b92c87c7a44c1cd8ede8b6d3f9d1bee5ff2317ba0bd1db203f04aab1d7dc23fa5af8b5e94ddc2d7dd9a2261e4120a80d2877db68c449b69cf991fbbc86816c69b9516b6e3f7c8fb63765fede6c61f9025f8f8cefc3fe22716a688380da37521db0ed234bc792a24bebcba702ef81b7933107ffadcc7ac55ba5d6bfdf80e3e7790b0083b3c757b6f46dfead2d1e7ef5ef1393881c44023d2883b33ab70b6fc4f0b6ef59b34ec453cc63c0921b38dcdbc6e37d852abf894b24e3eeb0b8ef153f87ae1ec4837726c2c9a0bf21ae3d2cc5dc91b6eeb72ede19998fbfe382a8abe5f816f4548fc3e24ca0d63d28312951223ebd7b07b35a9c4712fea85fde82e145a457f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cfac0b6066bf1be8fcb1342b65e1ae456f088b37d3ebbe3b977d807a26c9acec6d74dbfa9be0ca2ab749f92ffc13f18e0fd649832298a0bf2c585057444097605ba8876b647653c9a804ea46017c4a511929cda5f8efae0cef6d436ccdd4d1945853afdba732634fdf23f47cf4604480db4832c729d6e40539e32b98651caccf593fd278bbe42c4be4ed8000278ff35c558f7a3f0d6e4538d848cb4b42928853d973efd36435812c7c86c1b87ce61b5722c56cc205931ea78ec7a72f244fef2139fac8cfad33ce2e5260e1ece4c7e8be129818c8edfbff23ab91de54d2fce508a142f0037a70f085866b3f14e0bdd4872fe3efafcc85abea0d11cf2a83ec736e5cedd0236e5ea445c6edebb4f5741148a3743fb0fb16562c4154c034ad590d9dcf294c484d6cdaf8705419cedd6aa3a4f9325749b9f61e871c84c807a1278a2f619e3902cc20d0934e56d99618dac7825567c13fcf54c9a31718fec67ce76ca9946d1931e1f7f6a6da78e78a752c0b0fc21cdadb9270a2b085c92f3591919b0c127bd1c30cee47bf424a450938afd4edd5415fc0e1bb26139e38c9828a39964d7898220ad978ee3bc6ff891a4e1c27a541e1f1a59da4e42747b55f6b2e6a22500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cd760ade6787881213fe9083fdf2fce3b903797d1ea57740675fcb4f24b44621feab115abd1bcaa793751c3eb4ff9a6060b793669994a545f912547782379a3630de576ef342ffff5fe629779e6f260b97758b26328900d10f4f746ef491d6bdb40d5bbedad5504a9c6d0bcc330cafb47b8bd15321124b5ca761639e0820a9e5c77b3841b153aaf1b8b9b42abbb542abad1d86b3b4d5fc7f83716fa0b2fbd6de02c4b67f716b3a32390a5e2260ecf2fefc29af85f86bc3545f7a76683e9ce1e3df449c3d8903fe4c567e8840a9984ca1610fce75851071e1d64b1206a9e7033437c97277a45c81b12d953278737573c91b7ce0829410894a43c608b8aca5f61c56a1d96ef7472eb7bd0a6820eb51b2c01481ef636ad1ca6aaa311aa57fcd0b2816e1a390f9fc516065354f7d8058e961873693126aab9975963bfaa2276547e10c995fe99593fbf930e14e43c1931a4cd17aa84355799b4d0566c4da6f4139825c51362385f7a0621cb582281080932376f3a1ccc6ead4eed1c5fb9095c9a6a49b8b125fe7bdd9fe9c913acab145e41332b3db7a67dfe34a46656d25bef06834d4b48c94acde21db853a61e8215752e7e38bbeec7f4cd0f816be36a1e61983c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000df609532c072a6cedda19fd619b87b8f511fe55887f3941d1a6cf47c915c071c720cc923c647ca851c6deda89dd88519aca88ffa78f11c50e0a83e0af28a167586f7d15a9203e8d9eb301ebfaf67386549cbca0c91f0304e8a67b51e24df799be78af1644416cb313a2203941f094c217c1e8f3626662f3c7088df547b11dc6b4e4438e7c5deed4c63e02451a8f9541690a1a3bee44b0633dbc3e423cff6ababd2d7556ff4ab700d383ae5f178faa397e25e871309984252bfbe09be54b56c82fbd1cf594c2dfd24557f19b8699d7745b9fdc231f95e25d96274b70adb9400c29a16f7d2dc462698b3c09d937c50cc69c9cac6581c5f8a9ffc3ec8838b5c99c1dfd1f8c98e59c024770081fe65b3e863ef97f34299a1c2078aaa3fca8906f3ccf92832488aa10819b47cc5ff4201039e8118288f6af0b732145bdded8901552d700baf5f3716947255fabd37087a6f7e769e53157b8a3fcd062732b0fdb49704b54022260ec9994a20c79a2e716488fcb4fe233068364764678b7cd5ef01ae26dc4190a004a4e25ab73ed592a9e884d2a6316fee18d6a76f4368bf46ddd4472323064515b7e7482797f74b7fc0b872928856e81e64ae3588030a3c4c553c60400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c3eaa50bb3bd221283687b253262d26ea946650b1dd488ce28bd00280dc7fb3ae5c22dca4cd4d9dac8d82ea46a7fa32c6683b844b49d9af46482201f2054388ca8ffc28db81216addd7655af7c76aaacc9906c5c4813f6df7ba15536aec04503b69f46696feb0069a1bad5164ddeba4e28e66f8a76134c82f0359aed9f99415561e07622fda37b1efac7efa2d4bf667a045d60e5871068dd09dc176e5cb06610e3e696f3a986e9dcf70cbf6c60f13fb891e03c37aaae7b82b349614c8824ee3fa0260d4ccf5a0f409d43b38bcc4f26f5f6ebecc6c42d8f75a2e4a44c27621d69f73634e016bbf5e6a589297deb87be3059f45b786976faf66049b70defa8b88dc8dc744e4677c1e13c8ecaa05d1b40e8d0803e4c4ebe213235d5a0486067bb164ea4d2d84f3c841a15c4e249428367aa8f18bfb7b0d3d2e4b1a0c943d43294fa04edf7e3e8ac5a870d514ba3f95c8f5b5295f761f077ef552e36e7102881a87aa4ffb0f6051a72f9fdfba9f9db0b30874d7a4e38a44ca30448b0776d6cdc78b7f9b918188ef91124c3c3970aac60dbbb385a6e2cf6a760a5f1fa288b7b04e23ed572464f2c78ce279974507cbebf722b52e73653226feb4adcc5645b333badf000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096b8821e34cfcd192c121d97deb6f54c35f677999d760b287ee364f95374840ac5a99b82060db09cf2162964cb295d42f84e2b28c4e3043e77db5a303717b4404d389e71e18a6d548fd4acbe5a901ac37441668695e60dffc34143a901169a648a359a08fc906e0634cb0596e007273e6c54c7adb3fbcb97517ab7fd42b80cb12105689f7865b4c3209506cf4c9c6513d37e180f895d64f60cc51f5413efc3e9477b1f9eb850a664aa94b1d3d7299297b403fc26be4735d191693509fde4d571a2e273b2e8082b7ef72ff71683d136e644672b70402075e5c641936e8f0ac25a86a92b61ee1f428b92293b3763c9929c9589187a78f8452e62a42cf968467e4a0471b91c2699a01d6898a162959913aed058d9453fbe326faec005448f29371e68ff3793d4852df70046a430746b7d86adeef0f1fc592b776e7d78490aa8d14b16ad36dc52a235c84263cedc9a680e9afeb4df6d5bfd494d01b3ef41a50a7629d8d5e5e31d1e93e9600f8c0678eeb7c5b035e49f4e4ee55a2b8403cf96e410906249c4d0394016b30f8a244b1d58077afa96d62f59cffb8ece61e0003f4e5fc164a7a3495e438fbb8b4dcb1cd5cb507406a931f715a827acc77e7d4791bbcbcb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008491466e49155d299b021a26bc7bb22d66e9bce9d40c7ada604f032dc9f8469ddbc51f9252aad0cbc8c0bd7457257422e0255f73246e9450cafc5fabd863f545cecef28edcb067e116d53373fb1ce8337b1fc2a30b3603dcb83b528119ca6b3ae16bc9c79cc46eb22c4850f8e48a586453dfed05817fd8f58d18d7cb537e0acbeb81810c9a72c6f9ebdacbd06d7b671ddd866a8832e80c590fbd330869e67fe7e160f01fc675863e6a5e39e34268bb7253b67b5517a987e09951f7caf1d8a355b92684c9b7fd00a6f2d11fd7e76d52fa938f286d36d1feb1f7985b97c729a90445f01790aaf8961c127a739caefa94c71a5062a0452a3f084fcca2f2f9bca1a54f14a81befee304a78f59b896f79fae1db6885236e7c0c7f8013c00a94c706d54de04ee610cd16f86a61f1ff95284432b0e04311f5cba23d092e8804aa3c5221d10a40c62d3afc12f87e69f2bae4a5ade7ea176a75d443042cfdba20dfed04b3220fb4d32d7105f556742da8f1df67648fedd0484f3742f91f58cd0f20e20bf17197db2866a0fc1e997ecc80403202c0ed633a52b58ba22c409a15c4942f255523cc1cf909c2905f9088dcdb6c948290c85cb3c2f2c4b29d718806f27fe14bcc00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48402def915b80b5a51823af0efd39a7ca11ea2759e6f6f86215cf92fa23c694e2aa19a3d0f9ec7aaaa82a0b67c91b8313bcad0c4e375b6956afd3f61be9e21b79051feff58d1426000b7061082b019c1c71dcf6cfaaeae80dafab78cf81ea33fecc2c1524c54fe88372288bb5ebfdceaed897dbc6fd29a44f256ddfd938edbea8850b2ee9e57309c02415b84b296e427ddcab5173656da52f7747b868c32de712680177ceb81eca8f115cd42307a228d27d61cbf160e4ade6500d8f8136008eb5e816b15ffac8a6ef17a531c077b0ba0d334f40de95df12ec10076860d0502d078d1d610fad9999059e43de1db052fa8f3416ec43fdcc2247217249cd767bcae41a1ba96913dd4d00f3f4d66c9e8d379adcdad7e3e19822e84351f74d1640f6caef014cd1ed312860135e4349706ba8f16e8558ee8c175e31b18ae2ef8f110acccc27575c0a325f78057f50518ced84085e5f0cb6f110f81216ca43876d3945ff7f2866b6608573deb228771a93085e79ebdb8e50996ea53fa0d78c91af1d6c8bfe114268b7828aff47a338a1885b9071a93ebcec2218190e28d69366b91a3efb430d15180c37d7ca6956799cfb9b20a3c40af42395b517f19ddfa2bfd213bca4de1806150c9e080da377b5111b2b06855c0a70a7fd358b04ea71a0ba464d78a89e27296356dddc2281c2a4bc620bf652e8691e9242a5eb06a08c0d1841203dc1b109004a59aa6f7b535892b36617a8c72bc669d9f0513776f6855b4f0e153d995e1a72903fd9f6a049c9a236076be4a31d51bd925dc67d9a04eff65fd54afcc7f416e0a7b9a986466781dba5cd5bb4e3915f95403a9325718ba8a6e5660ed32416138349471a66e53e8ec54af3f4f49bea8fd250ab684a6a35ae36a39ba5c9c13022d208dee7a217f9d7e5936232742a99b43210e969003b4cb06ec99577c55356086cc825e902de2cb7f20e71d6d98151553c4fbdcec4c37e074cf34e9b12e16518e3afa4a9d1b8957126ec37fc75d085893178f876535c541c9a015537a7604e0c21075d1228e38abaa865ad327cf6a27da5e009f86efc8930edabcd57f74edb0383b7b229fc293029fbf6c1e5eb041b74ca17a39ac34c107e32a17605755ef00f1ac7eb876577857423e85c44311414e6e48cfe7534003e4d247ef597323b1f021945a327fe4b106ea3457fe3c05d91acc891b892cb4654296fbf260a32a29a0cb24b4838facf4751c36a0ec9d9cbbac057c6ba4764d19f3029ed7dcbf6cdef159a48a535bfc14b4998bbd0c01979838dd30daed26fc0c70b8c7d104ccfce1d28b3931e9494449a567dbb8251663526e99aced9c752b890c028dcd220cb63802c699ad29027c6bff51e1755a3aa88c37ea31fbb1c9ee4a5d7910141162c13a02550e517688705dc8ef85af79a67c9755acfa4ec5a0392b0b65611e503205ce52593a5191bdbfacf3820e4c7ab23b22ef969c112d69e058ab98e7bf29c2152a7009e1867e840a979eab86280c0ae21fe419d0124c3fbda9b3e8b7c94e7a52c900758bf89eda7a5bbe7d4ed28cd6f0b2178cd53d13103d0ebe4e64ea7b2f5e7521c42e91e6a7c9db16f9f68c420f11209c9ff65f7ccef0ea01759dddb821d70741c1e44d1a11b3ed75adc19fbdba1f9eb5a1e643c538373aaace62483d42fcbb416425ed1ef9ff48b94d703280441e05d158f93c16c9663cc4bc8f798ee34c9010dd02db6dc664141928492b945be2032e0cadde88459a7a9b1b0c80c41f1fb172c0410658a64337435dbbc0ac6a253124d12b9c0788a527dd92b0d48c0f1338216461483f6a3253a2144a22a54fb19118ddb6face7cc955c18c6d4a7a91acf2f2d85b80b8a984b7d887e46dac1f0b6ffd9c8fa163cc937a8382942558a50021b1d2fbac22d11e868dd43a36543b0b44092ca6d860b565763290da9abcfbff351056549932370846c459a0a7d6d32e673949488413ae20200d186d1988b9c4dcc1f08b4a83ce47141a625bbc02a0b54d073d88d76528178cf640579bf2e1f03cb05b52264dc563873dd552923b9cffa57b048e0f558deedf02e42bc0acab6104120a73841742805b6d65a594dd4711d23d9e635511b4e3eb4d5a8bd3f217f79ca11f25e7c88e013691a28665ade2212e926f1fb5c7975c3ba96f8b4c3d80f47992e7c79aa46aaab79df26a4801ce8ea9c85202a0e093d25027c770926f67c62c708c77a8a4f95caba991a27999c698f5479e63709ce4d3fc9d7aa3c5f66c4d79c09565a0aea52239fec38e911dbabdb2ac1dc42e1e2aab8b7184ee871e5fe14a81616d0bb10b9b8654cf59eae76f20a3f0c3b66cadab7b05ec212a144b35eac2309cc4da57a76ef94ed17434339ffe7cdf3f5a72aac5aee05b73152dc2083be5e29a0f2a89d42e2b4792483b8a955b2db4985163b929d94b94e0ad8b5529ff91828f35eff634ba38e119e09ffa6d613fa6cc5fdb52d02d747ea87947ddd7f4a1f11788a3c54121b2a367084cad6c31ea557deae1de73bacbfcc4faf7f7e8c88b52e1885c4295cba192460343ee0068213b4d52c5e8b40aa866bd5ecb9027449242a8f9448a81b6dc63461a0f3f2c9d918de4b2b415fccfb8808c74b3423841d0c24dea48081a8009d2ddb7ed467d1708c6b6530d1ea28d465ce94c241adb0ee5d005ef3b0740a5e12ab458aa4577aaa83fd2f8d46423243e4527671cb5296c95d04f4a6cdb8abf0ae20d3aea78e71f622726e33cc0db1e391de4ea93b8f43a9eb0c754ee16a52ab3fd1abef699a498014745b8cf528e481b30a0b81727a47cf762cf2d2d0801412a41585535983b815bad150d6cd8ec81d8d0624dedec2a98ba90917e006c0e124a8649540f0172668b739669763b106f7c9f15baee1688feb31402be6519f17fc9536c874726003015feb7e6a4ca15e28e901058df73d0f34eae807922337b9365c998081197d89543fb892cfd10885f489253d0609d21537b8c41558e224c607352e6e268b384eba2b858a55faeff46fdca4358f8cc25507908512bd7301dfa8876c15f6fe03ff197bc9ac47abe5ab7746c0e7d53be7f853ce632bf1a45b0577252e6cee00b26e195770fada652ce1c27abb17ef7423a68a0dc62848f157c5d520ddf7ae7347be57378a87c79366193680eb88c175f6c74130910144ec72b7df48f922efe712157dabeeefa6aee2defa63e7661806a44e57b0e02c1851aae78718629a8f67174a0259589cf27b41f28242e07dc3a522eaf2163f114c5b4e0eb7ead5c9a4db32f08692200925a8c7c1b4ffa873c6ce445393c32e066111cc38d8b661b959836b8d6d61e9efe73edf6206bb6b6f5692080e22541416788b8841b8a8d25a86b92a3b06cf55149d7063157ad1c7d5ab27f9bf26a6961c4db39e0ca106d30abe42529423ede2d566b2be6508b172290b93f4447f4f0b280790e4ed7a506b5d1b04463923a0d2c85e4020019b6e9c2983f497dfa9115e24751288f9c225689ea69c9863b9b37363119eb2052208ae25d2ff133c79ca572c3701f6784ac4f0946f67dc3c0405ef45bebf76ea064da8d64aaf4fa496b4ed007e665de73a6735746bd07780f120f5a8e230735c7426df36877e3af35c959003c00596f0922c20731bfd5fbe1ad1cf518309cd61ba8ef778962bf82e1de1b20d45cdcf4c95ec31cd162dec42958c0e93862fc1f1949e8ee8ebe40109f1439314c4ca16bbe1623f3668ffd7e11180ffb2c1aa02e058a5caf20736824a15562d301fd60df8cf14912d7d392621863b0979b7bfbad9426fcc702475cb43c4153d25e061d525c34eded371a9ff96b76b2f673aff2ebd15e6f26eb8535d576991b3049471c464251bd925ae972a6019cbedef44105a844174c814d86978c3a0d6ff0db5d531a3707dec1505a38b11ac4d0d82ed3de7df1a0bfb6511c88cf59bf6c02b1a834fa9c53b18e74accd99cacd616cbf25ee8fe9010dbc4b8de0b32f864132df2e8b8f00e34b0d3c992eab67c6b4f08f190dfad5bae79fb39cf601042867e2dd4b36c8c69e793638f4e29ebe7b6e482c6e55f72a33327536a05590ebcea2f28e2b53c3498629f92dd680d2d9404576490b25b04ee565dfb97b8d860f7ce60052e3da7291abea4a191c64ab0b8ac903bcf217a8d587d89d1360c21799276f22fba9647b342b1f81d6b22eb8560c8285cd40702541d79570c9ee5ea613d8df71e091ae544131028efe4f0684dcb4ae2ef36816c40c73d9abbe6f9484e7a7c4326cde43eeda583f5a60371ddcec4b81ff700777d8311ef1f2c3f5dc214f82203074d2ce377b3e03cb384ad28cff5c7eff3b92458d3558c3cd332a48e04171a45095a75b1c30b9dd9155088b2d8f80f40eb2745d0bdcfe229b4054d2054a7f5a923c53e77c47fad28a6242401ef6c7c4fdfd2a74d3e4a716a93097c2e3d456373005d9356cf3d28c80b4ab122d48a3446d2386a4331a1d2d37ca93de71ba074a81bc0b35d1b933ae99999c951ba385a1635ee0d6a7d1f87f760cd20d72189c7401d83f85e9966c5f6d5b5af020e204cfe3a07b1f1c6f2444efb83a9d33f2608752128ff44b608ba94c4dcf7e55bee167c4b8c57473d0448f2625b321e2d45ccc923ed5dcecdf1d6f0ca5d4a04493366a51bd4b8fcd3b1a001e5f8c291560f037d12ed886cf84e75e1c9a211febfe293ec9bddda0a2772d0d89c2689cb25d73e320f2f191565abdf843f11abc9b388af4351246745923cda40ffd4513482803a0517e67adc47ca58892a8786b96385f72e33f4d32d83ae29fe52260ba1a8905caf15aee30c2b1b49a1c9c166a940840b21ddbf9d9126736d4335687a6e7a95a26d16e2708069ceda26a866be48ea6c05f5aab4b40b77d469d3dfa7ddfc2e417ee01a7a5dfce0747c384bf91687ceb2e7f9d3e9f0af52450b75231cfdcb652ac0da2001846a538b1bd670c4ad2d7c02bd8192bd4b1a0e466d349a924e0d81db45d616c3ceb3064e47f89534ddda5ab4f6c41b076010bffe3eb0d4fac8caa67ffd87146f637f0dc28031fed494ea93352d8ea0f5d694e8a9736e9c8393a7ebc9361d1a1df20593c6a25ce4e96742f81abc1dd525c29ac7080e83219a00889dbcec0b17c8310b6ea0c124ad1d7ffea74b6395d0c979822c1e836cd21e9e923ba069992f03cba6b5751867df7b3500c41c300e5d82d375f04dccd5ccaf6ccc1dcde276260d40f9df3409ab415310e8c0580fa1504d04fe5ce11a7d6fa0117e51c735d922d6603953c84f66e58931e6153f9e352261b8448c97619e787d271884dd4f71148fde27fe4fafe31de066da412f1314f4c878e80a4e7eb5d850e6a47d5605be23260b4a41849f69888df69b558a921d3a73d27eeb1ca06c373ec99d383517061c5c8479c3e107b7556c14ecd1a30f8c0ec27faf48cc5a1f9b7856ac413427df24f32d52f770e85b56c8db70375d009e293c8a2c3f3bbf3955171ed02527e41c1d15e2d2872ed812cda2b1263eab8c071fd58fb7a90465107507b568ad6af8f70039ee522acaf77168abc2ff4660eea254b53a3c44ca40bea8ab2786f176cffe1c4dd5c464aef0d85e4347bfdf72c4a436f1a4e174ba8a7bd8f2cc6bb8e43a7b2e6412ed515b0fda4179f539c3be4b1324b419d748a12f3d5f424a19664ab392294a6d1e9560f25788ed7371e2467e7a6432d27902394712dd832cbc8fb501a30c360526aa7a167ccc1cf65efcaa487f22747267c4cef739beea0a6fa6fa8c3a1b29ddd794da40ae1336845bd1c6aa7898acd324b5de229b12379b31153091c4003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000002d118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000002d0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000002d0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000002d0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000002d29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000002d141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000002d25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000002d12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000002d2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000002d189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000002d1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000002d05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000002d05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000002d14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000002d03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000002d2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000002d1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000002d1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000002d14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000002d2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000002d305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000002d280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000002d223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000002d17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000002d08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000002d2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000002d0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000002d0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000002d172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000002d0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000002d05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000002d137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000002d2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000002d2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000002d2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000002d18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000002d0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000002d204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000002d0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000002d1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000002d28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000002d1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000002d21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000002d0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000002d0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000002d107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000002d2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000002d09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000002d24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000002d03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000002d1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000002d205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000002d25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000002d283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000002d21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000002d094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000002d0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000002d1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000002d2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000002d1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000002d1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000002d304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000002d00000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a77479fd32a158931a86fb3f43a718df9abd955b3950a329f4b66049b91348670f17dd5b4cde4043e6fa962a43b9ac2a5354fdeb3b8b4363da3b09d993cf5bc526188d2514db49eded97e0e4619681321380b51e3cdceb339c39202937d0098bbf8ceac18afea9a499f429d0801b342ce15388636c3b8bf191000bb885da491cfcdab7e16a33a15407c36bdbe44726bce4d051601e10f296844a2bfdfa38a173c23bedc94a504d726683aacb7d8cc4443f9900e64d716958c39b46e47a362a95d4b5f78b98b4706f5e6134c5219289c1fa6741633e4c1eea792a45d168cc01dbeb7caef61b7b07e6cb3c34d39cfde458c6fed1418fbb16f9a6ff1616386367575d7b20222d4dd4cf7ceaa8256f4ff48c5f637efb8d54b3620b1ec9fd6fc74e62bed2148137dd869d2e3ef53e95da9d647916528a64a8ee10c094d64956f0bd3615f1b41f17be510b24067b3511ee680ba0ba30b17ab26b03febaeefc6cfb8d258cb73fd4d1bf7ad94f4c46550934b6a455eeb8ba284c687c9b870d4e8e296d4a829fd9ce5bf93ab6831125b11dafc44a174606c85919b53b5f8c26670273e746ddce90289a72005352d3216b67f737c21cb67026d12e3b201254ef870a8041480000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000301e438b609071a5f405c2529c252801f64ea536a4558e63b06f1f64a9c9f6829c57e53fe8e80201a279088e4e14507f8245a1867fe6e9813d01c926e11ae990a12cec298133e1e8fc040ffe886e2e8090f634f3d0295251226ae6b0f72e8c4e81beb37cf2b34f751e727482c16357f2237e342079599176153fc152d60d5efc617415ae3e2bcf8b1adc83718bfc98d3db81a6d63a50e7b8b5c56ef1239ded5128f6e8c098c73e5a892a7f58d25f07c107f7d621fcb4e42c528569857bab3d96c3ffc3b0063eb1f87f640d8066dca6347684bafece715d026c62fe64a3bf54b68315e5a8493890dcec7fd06454b091fc537f3444b9ee557f19f73d1cb7652474109da86bf90dc8bcedba27975e758c6ca29aeaf46e30dd2e486634c4dee99ce6edf953187b25de73514c463422819171f8d1b1c83f8a8648705ebb46e8206eeb598565ba1efd1f15e19b1e4735ca7c9e216f9e2da80acac15b31daad53626397f52d498c1649842ea7bb29f134605d58b6a20893ccd6b18cf3b46bcb7d377f01805f8b9a2a3fff9de84856aff9ba81a46a7d89dc5de4a4caee8933f6a9c5540676cfdbc47ff98ab82b5d180d4c9a0657e83a23ada5854dcfb0a06d91f6fe7fa5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f71abeb6e9879fcfe51b3b13cfc1ff80cbdece54a98e27b56fa8b7205084decf69d909756b6a0a8c5b03e25bea9f5fe5daf99f683941f34407d2a7d8e38ab913257a1e1b1573996fa89301718d9066c84d9f03bfe03531a1c15442509222d1c49de6eda14a49da5677a2a62dbd282ceafe061a3b357ccbbfa40644c5d2197ce1d47c5ca971d22336b0a496994ff85e30bf1810b5cb2574eaeccaec78cc570c4e2d5fe4a4a549c31b9ef117677e8dbd19f06f6f8a4472b045a6cf7cda35f1e3dc8b226e19d5cf401018ab3f3776ec4d48af0c15cbf44592191f00ad3540687b701f67b6bd7963962cc3ddfe7025280171a97cef72dd0ae349a07b6d89adab5f016f58eb6bdc4b73dfef7f6d54124e9ae4ec16210a8f0d422e23d4cdf81d154a813ba8cb477edb984eb03c41831e76297fa001090a2dfad4d93942e97f6c2fb250ee2d3af08d172354527b2992aa2fde1f243869d8f787b8f39a058ae651c116083cc834a922502440243298755c740362f045df9c02ae04f1377eebf3ba93d472f89fbb946a88c70a1df4c59e6bca793636eb8d5a79272841a0514aad7d2f3e3086d3a341fe5b76a3b29452b21e5609e32f46e9291a9b559b141de783ff3bb00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f4891f72bc5cbbc75274169e906785cb05afefa49fe68bc5a70aa6a6d55b336fdd7bbc87ca4a8b0964c06dd90e6c2f94e210e158439d3be89918d6ab159895a1a7b8e9cc67228e1f55516c5544b2ea878ae37841db5881cef92a0b3c4109b408ad25e9a99058821e1a6a3ce4dc1e7daa1d294c2839ff7f81bf9ced562afc9fd0ed10e1033f728c1bc54906f118a756a0651edb64d5d0f79e704736b5a39911bfbe0ed878f56e1d0c4986aca413d7d1330aac9d37fbe0de0768146670b14bf417f4b54285e7ac81c08f4d1ddc1a2a27201754a345ba956ae97ad49d6a48ec513db99aa4efb05536919baae8c08c636dba380d255bf3f4c88d6004bcc953882a64a02efcc783722d3665b8aa2b28216217aa19b774389b5028871903a1285108da3e2e090d3bc7b63f71984b5f6b47d6c141775a5d63dcec137d1c8043e6bf4417aeec1a89250f4a8c4f3755f601369010bcab43d56b98b176a47d844a92cb8e2e1a25865fe7cac5cdab06df2621a98469246f79ed37376b78d5a60d578ebc08203c63f9860a1027235557380f3bf7fa8d90d4ba7521013251dd55b6af1c6c26f428eb2498157fd4ebc305fb5a120102a989e207f1becc6273190eee0da5319600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eda2bc1203cea4ea176bed376d37599a8578367c15538fae182a84592dfb199ea47435389530500b4671c4e90b439db6512c9b3defe74e7b31fd4051bbe5fb173a9da2cf52a1a8b6474c2ceb847a23564a40c319d7c1fb42dfbe67b53ec6d5045208d64c25c8fcaaef260f3dbc8a119a68c56531e02008365ed4efeace33863cb3665748d44ccd32816a7cafe0f754a691df8c22580da50e14a1335516476d62f9294a183b8cba8c9d3882a176bb851500ab4709354eff4801007af06bd3fa776a31941fd401d40456870203b3553b548bbc094c26007d74f25bdd0d8694dbfb2ab874baddfc3f5da03bf9c1d0f0cbc319baffb33126fd78ca934b33cdc4cfc0258fb1ae7e2ecdf868914501a4c3cc8298a4f8087ef8487ebb5a2463e79845547acff0004671afc59847323d73dafc3df8e426b683634b0399b9347dfe9482cb748a693cadbf602ccee1a0ee52b92c7a33ded2de83c2e4bde650ac43bfa1557a3681c5d417cc12bdb3abdc933a35f4994265212458a5c17215b47d6419e22c95400bb5a6f3c338e4f68184e75b1907b1a1a5a24d8ee2bca557759989382d0d892e0bf9d026928064d678a22989447f1f7762d84fec9fd1b78b1b993f382e256000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087f4c10842e702d0de27d66d68f0ca9cf162994d68856d8bce943514aec86722d179133ab7082b2affd90238121aa7bae7645729d399655d9fdabc9e0e44306efa9f966dfaad849c12b9a03a3c411d8f8c7a0ab87a919f084cb836419a496fa7f8ac3d01a716843f08b96d1495a490b0cd18b4c7d75c17ad14a12e8204205ecbe90ff4083aeb9a3a0d20edd12789a8e62aac776c012d16d2ba06c9073f5c5d389c3d6d21ac3116c77cf048812382492a5d226fdc75626dc5051827b53b56eb2e3560356ca4fc298cf2fff3af8b8339cecabebed2a042462656d0bf57e90ac7bfeef9f7f7156dcdf609ea4074e172f2951bb4257be8a430f73d4ad7fa16f3abd91288d5737a64b86222c0a2555d115832f7103271e3906cf52641d1cdd0fda10b73dbb4669f34e47aa58a68d9c1225c1c128fcce02838c96b1e4d3d59703389b208c657cabc46a116b00c26be21da8df26fc08b9b7824fba3830faf74f19097e38efcc9a5a23bd023c00cf0df5b1a2ea0a16d922cb4e1aadc374cfdd81e168d40e5dcd8f220598be2d1551eb2a5e95a364dea28609787224ca4e6d3a4ef78239ab251463e0ea8511d31d7ecf3793fc7c1f1d44a72f05415dc20043275d865e44b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000838c6d46eb5b45e037b33d5c0184cae5d69018459057fb487be33c4ef5b1e2666725593be2131efc7bd6ab867f91ac0b2f802cfb3c92515990b66da860aac9e67aeb8421f165ed1341fdfd5de40ece66dfe975e80dc50c55fa82845be72b7a9490f17d0790cba09b6bad49edfd208d8f2cf9a21f6f3d278881051babf0fe744a3b6ed80bead5c656b3d2add2e153b5c1499719959c6c15488b019f084b2fa15c4a3a9279592d4ba714695de58592423f74e28df6bdfe48f08ad5f3d4892a3de8cb3fda93a1f0c675fffa9c16fb1aa4e2d67ac995df19368b9e7f0cb824ec25eca4e2ce99c0f5894fa94d9e1844f0ea25a8dd004b1a69ef809ee11885b1c787ceced1a44b4dd73e74713c4c076baff86fbacd5eee8017480719995f1da49cdf4619cfce6d02a7cbdf255bbfe0cb34c3a12735943f562c9ad70e2943a5306118765f7b009016ca9d2d91bfdc17d45d5fa7ed914d5cab3add1bc451a7eed65926b6b7e47772da5fd506eb65e2bf1eec2cfb47efdca4bacb783de39248a5bfb7501f8c32e367b3c1d8be5205826526a83e225f7d3ddefeb18df85564c11167a14f18945676c84c9039c0983ec01db050a72514e0c8094330dddc144e088fc51feaa30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000943405ae13ca228caca9a4e061d3aeb863d88dc6076bb5504aedf026a89adeea4cab4a1f7d1887bef04f662c5ae8080b734925298a25216ede001389774d59052aef509e5eff400cb1adebedc1acac380ad4413123f5fe7be38a351aa9d5306fdac5491119452adb439817d11bae05da9a7a991bce8c391805430c89997eeb8a2fa9a4841fc51183b0571495b0e8ccccdd6b9cc4cefc0a0be94366ec428c5b252000ada9a96dd3309718bd1b838b90fd2f6561b7b4f57f273cbdb5094be18e92f14ea3da0814a54b891c68a354b97cc396cc5a029ada4983f0bbc7412e3a6d0eda7adaf880c59435d0ac6e324d2b350c19a271062c368bcd2ac9bc757983ca92e941b51e248bc20c2a485422f24d9c55c6ffdf0e2c4070b9504f35f1aba141bde63a3b6b1113134ff8e5b58e633d345a723333b9d9c0d1c686f91185adc82c5b6d1c7ee9a634089d59c1a78029039bb8cffcce4dd2b7469e002d7c8336dee76b1cfc142f89547046c72d19590c566767dc367407ff020cfe116035108f9028db883b876e1bf983fcdb6d87177a86cdcaaba8858e724a91fa3800923c7f22b02860110d133aec741c4ad81a7745a9999514f8b95421e52f358d5e6170be35c68d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a44d6cd67a7dbbab536cbe91d4e69d7f07efbe43cc22e740398675b206b32d6820328b9affb189d246abe1254e6e95db516d69cdcd6db94d7daf1a5fe8e18e78e091bd39cfa519e6d80207f78e2ba5fd05417803dfa68e88b954df626180fba678e4a9fa4ab5257198b1fcda068cd4bf7adb5b864e38e22408c485c28a9d0c53929bc9c50ae100f387f30396afcfb88156f6ce96d9a6137abfc8ff78080c8bc699d240d34e55a34c73485e0a96ce1ff5a084388142d2ec3e1776e36e2d3c2cce318eadbcb1c4c6d8741ad39a82e45f9b0a161355b905be63c722025e4e4082086d06de927852fb8bc4690f0cbe5db7c44a6de60cef12f02c7842da58b2a4ea71c54f9954f3b4ce845ab4ea663ede8b1bcb0061ee743dc982c1f6be4802a20620ef7d875cf208191f753f3ae54dfa8ec198cb44a11ac309c44a80118518667c09c546d1694baef132626204acdfa198606c65c58f5228e5729c368fae3078280f66625ede930462e62b9cb6e332f977eba36774697e2100cc67f41ae0f3b833de617f10f79ecada0a7a30b6ab0e71334e39f9a41b7828ffa1a65ce7c5c0290e0339f896c7a5731e03f6b98e5e402bb1f3e30db9f78bed71b846cff889a7e54bbb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000116282926ed225a8d98c0f4ad74be21e77f0e2919d644ec5c40a1572e429db694417201b8bed3cb13f34958e8154718a73d6b118aa8a78e4dceb80a500fb86af3e64a4d1f8d23640eba0985d0f4f2b2899c14a78f2997ef6365fbad6106c31e7528774c12ee339884247ee4f119913bf81bd9a073a4d30902aa77f7628bc2e87c7ab79ddc4de051a159923cfd380b3839657ad577eac73879d4d7f09c8cfcb087892f42b51c9874235ba3c584871b4c23e1e8f0fdaebd66d721f7d1676db5a392a8efc888232050b2d7b4bf762307aceb5ff27d5f2842c842d1c196bdb1bb89fab98aabe4ed51e465ddc219a26daa9ad247b24067ff386b1ae5d19c978c3603389c338455b0daa591c094a1788a5f1b0bf2d28b69fc3b01d0acf80b0a0ac77b290123f9228a7b53848a9a650dab61105394fa6a78eb0e28060567a380a2859d8399a19982b41a801290736d71231c623171ab3938d8cd1e83847eede976e8bebd618da9222c1c730f61c8bacdee5d4880887498045d79227c8d8f5d16c31343ec2276a4148ae63ccf4e22ca643f7085e4164c8b3f44b75a49b1cb25e380d142ce92cfaaba393481590ed87247c7883ded747bf755ee2752adb96de4af6f61f820000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa528ae6da541f27ffa0d7ebc0971187c42ed9463ef037d1e00e70eae0075071e275ea346ba77202588781710a21e6b487eed58bc13ce87feea5bdcc8d308c00879c7d7c6cb2d5bebdead2e97fbd0b3a8ea3aac1c3395fdb70a5057d4bb8660674fd371b8d25cb89433f1768fef53f74542eec52fdd01c30c52cd5403ed309ff3f473df66836fb8dc19126339a9cfb9ebe836af1b215ba32ebeec2cc1e3e3c6b188d14dd1f16c60768639f201cee0d14daff5d22d37c6dca4f2bc9d110c303999eaecc2600b9d1df178eb8a9a2b5a40a6876ee0e6b15e5304ed5c8de420873abd88636d5bd33cc5cd7a4cfc3e185a4f0716b19e45b225cdfe32978ecb3728d6ad8b46a343430ad318e4b1e6b9cc1ef3816b09d62b02f7f4e0f3252337c2e72528a28225acb122665e245a73bdcb11ad8c11db259e7925e84364986e097533e7e7bf41b6224048f8138b5f4f6827a5aa297b86ebe825d1dd1a6bf6ead7330304cba8f54bda74c862f551307f00043b35312abdbd466204af6acb9856834caa94db657fcc59107413e3046c2806ccd8069a9eed5850d10741161dfee0017a5678df263b392c82b5611c086c3a0616f463e5138f25da8d6cee3d5090bf0f7c17e6e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022c648ad9173c51ae4e5c031a5fcb207c96306afdb052915957f613643f2bc56c18441bcafe5954566dfe230b645bdc7b976945231b967e8decac47d3ba3ff330c4b67e1ddfd1b7c71609b7bbf46a188aeb50a0c69194a9322d166a5d6d6c502ca592085c38fba660605d42f0deada926678797673b219d7afa3ad7b672e511de53b5883d58df369bb190ef9759b576a2552827865c71e60b7ee92319506b98f8a1afdf206c443c64e865434175fc70f4f3500ed2803681825e9730cd55dabe266747bdf18aa555a21c1dc525ccb49700e079bd1511beb9a28ad3b79acf2a59a8882d56eed6d52f9e7fbacf88d878b2faf5a5667245ba7966e2b62cdd408e733edf2975c5936be5c79d38f4f18199aa371283a157eee0ffaddf754e0f0c1aa788cdcc86753ad80d9f23990f4e726cfd96824ad313b5e34b266a3596c99e08b9d16a8d1114e105c3c6974ad0a785620327f58d38870815409e9d3a53e7cac88f06c77751c7f49fc7ee9725e43f5c92f61298b0a4e4827a6f4ffab117d9316f8d86cef664fa0e5342c1a9cf390ace1571f9c09a2bc8acf25d080c04128dbb874ada8545266096468f5f5f53712005934c9d9424c97c10ce9ec68a452e2de16a3dc000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025ae47043abd74a65cef3c3913adb0ce217b72f84fc57bc2a11215b9bb396f97c02884cd092ac167df5e940f5ba62e1941d10bdd2eb138ca6ee89244e9eae88d5c4259a87e2813a6ca93c654c275846fde42c3798ee3ef3cb46cdc3966c824d8a4c6335cf346eaa7008f2aef95b6238a504981361890a6d228360e7cd40270ff21f0b20ccb02b25391bcda9238869f5fc1a06038fb1533d641816c603626a3e1aa0390bcf7f7ccf92009e82c24f35cb0e897588d465694ff986eaf56f97de68003eec69085e921c8ba9602c697a8edcccbf1f6f6b9784f9f74dafc519f4aa0bb95ffb73dfe39746eb8e81287337a01790907d695a9235a31d03f04091b3072527c007e5f48ad408a5b28108791f333cc9af528111e5e34a91ba74c12b993248b45b82d5fdef27f44bec7072cd569f2bd09202c9cb1f63692bb005d683a1ed89547f175283869fe83c31088d9d1b6630b98c490cd21ee5645a93516c04217bceaef751d5678ad30206370a9e77376eaeff802643108fb26cb5a46a0fb7dc67e58049774f09305946d73a9eaf345963915fcb5f8d1994c9a9669dc6e914200a6ae18c2bee3e2d458f50b5a7a5003a72b37408080822d87212b4f5acaee8793bf2300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bf7eceaed779bcaacb456d420dac66260d269fa38b8ffaddd429c9ea87768d17b1f9ec79cb571187dcd3ecd5237517dd4bfa520496e4009f959f3813ca4feb60dd21ac46507678765051773ca7248d6f2b558dc983f792e07e608fb4497a733b8864ea88a43b54c1e56eebea95985a658d4bf9f2d136e880f87cbd559bbb06f70411aa25562eee3c26189173ee93d5619d4e0b9b693425a9774631142646f064b0b3ef798d7e01d7869bd0aa5706aeec769e65d7ed4e15c59b093206a517b9dcc9eac6d941bda8a8d22bcc259a63679e5cd910c869cfbd1e6e83a06bd720fbe6677667fd85302af95f151fdc9d5142fab6fb2bf5032fec888a4a826b65b335eba7eeb290632e1190de943e7d7c63e53014d6cb83057952e182f198a57df7d8db041453501ae658dfcea07458098e3eb0e5b56654673d61adce8591fe74bbaeaa3092f900f72462ff660ac68dd41f94bf247d71fb22ca008d895cd4405544b0265826f76b6abed5c4ec74a9d62fb7d5e86b1c4a49da01472216953634be6daed89486bb1a7452a6694c83226541d04fabf6cbb129c28f48d629f3766d069109e13ac021c9c6e53fd72644278ad4b1cc0c6ddf8ea77beeae97003fc18f30d187400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e78c9c3ebcb90b6e20253b66b9fbe5ad0bf019ea53289ec0cd789b5350906612bd4ea6f69806b7fcc42c58c6ae88b04c713de1cd8a04fedb776cb7f1cda56c05110045d7123a48794edd4a89ede34e526b14e49bf3bd4e04545ccefe9d121224d41ebd367bb0e5de5b84b40c210f89465bbaa85cd501a38c7a727656240928c0bd32ba24646a98e1a45f15268fe5398c95412b06350415016641c37b9a3e178b30f5c4a925e0e2cbb564cc584436261104e907f7a8c73d7c019784b1bd13dc74613b95e676418afb7a61fddaf7aa8be540255729f06c98ee8fe7af1f271b7eb354f91a50ef0049d758905773efd7fb80fc31b92e53e92147e2c11e31a824bbd1008eb814bd52fcec7bb1e219573344316be18e328a7e0bfb30c66bf2620db9df60309cd868d1acf62fbe69e7a2dec34adead53c22685e1e0ce3eee1ee3df64d1ad525448bbfa1deb7478e6500220aaf8959ffc3e832aafa9729848076fb1fde9db29f3f789d3eb70f2ae31c994a5481be89864f20a40eb3873c78a3dfd462124170c5bb48b6430ee03687942ea641464c2e1807f97c42be37337b0af8fbb23a98a558de938878298574a78d7cb4b686d3c67991db5d4cb0792a6f97780eca380000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000887b466cd465838e4a1ad5fbac53560c787c858afdbb9a1a2e51dd702c71c4bb8c554a7f4f66952941c5772219de638a259324dbdb51409a31f6b19c5dd45cf1333622e1d0d17fdad6c8e73e01f8e62fc5840fb6b2c29b7de4241f639e2647b5715e51adcf97f7f808209037437b8f8db0cb457394f594c2164e660d9ae10faccfd678bd1f4661cd9e9fbe85f49a434c8affde050c6422c772d8de39d9566516af3ea3adffc546ba74b52d1de250ce07cd84ab8c54f708ed1c6f89815a9799409b1b082463938097e82de6078be9d2da77dd8f42cd65bd4da0f24edc63f310865a82ec24700acfc664de642e8ab0b50a08dd56dba8a112028a0c040aa9b4b8ec3c1843f94b3f462be5e1345452b410e7e920dcce79ba5ce69c282d3ad25af2d51c3a518c2afee640c1719f92a70b2a53fd2f8c5da24f557256f355161e1e4a73c6223e42564557332452d37a5c419729d7c2bb7d7a5b87e2a4bcc7ce957712bbf16baa17f8e5b6ed48d98bb07843914fd565dc52691fc46d671f50cdd80452db446d1156a3be52c059a61148471b94dcded47deaf2a3dd217c68fbc205988cac4ec9b20224d14236ea5fd6ccf8889c5373b52dfd747b031213adeee2a882cc99000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096a656cf0c0a2238786e389e0ba6d32d33edf3464b9c250bb92b67c7fa74b21fe4bb7e39accb64b1e57a647e8c1a6ab0a9ad0e1192b89e1c51ffe87f3b081dcd83ea259ffc2246247d26747ab9dd13f1920f3091b50c3b20c475b500dbba502dc5a5b86e407d92b9fff0a957d364d888efe8be03704e29e2decfc8a7058c669d025f65e4f236286d9772e448a8786f4f78ba3300d368913fd6c84dcd5a10ad9f349fba9df2b2ab5d8be85cc5ef220555d7895952a0786439f61e51402cc08b3ff4289a39d81a2bbad93580b47e0aa7e2fe5624cb75f378dbb6f885ae76af368b8dd107842927bb90fcd82cdf0bd8b54a219434874f05e9e08ede18022d52af5e4d8a19f1b6eb3a71fb36b16ffb065737481bc87319a6b08ea5202067f321976b76116569651f5d3c72e68cc7da49d1190ce83736d893254fe638bb18791dd8f8fc4ca3ac2faa0a8398c987f5965fe7f425a93dcd8b9da495925cb3223d1022e214db96467ffa4c191e836a5c7682a5152cf9139bbceab43b4bfe099a031ce52352c2fd629668966011814b33414d483196e915118d170d3256fe04d247ecdcb9bc95314323e2fd000583a2c13d1af32732e53c48bae7cf01b66451090d182d28000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083a6bb5d9d57b527a326a439b0ce47e2755d5f79cf085e58d7a1a981c0d9c319144810aac35060a1cf045e1727451b7654f571b43069bdf93b6923028b3a4cfe3d24454b5e63e03ddf9dfc7bc3ff047de686bdcc70af9f3aa4f027835d03b2feb189687f29b248e69dc72a2305d352f1cb7d7bf4e13ae29d143eccc2dd7217e426b1e852e06022c79d33ca02416fa248f56a2dd20f9b4f413528f064e2e4d6d2a058d21a4fa1d868165046c07b5f9057ac0836fc47a0a89c30d271acb7e1b04e4bde037162c391cd4875570b4801b206a3ff1e6c99158081f6742c9b0172066aeb0e408ecffc8d4df4bfc98c5e0038c124e0683e9ee9673500f2dfa8b703b0d5b92281eb6e00ff66190f3bc8655829e0cdb07abfdc213e4636d3e04a7666155215fc8753541316d0ccf21f1f4ba316b3db8396fae0403de5e13510bb3e34720ead4b49044da5f67410b2ef012ec6abe294b9a6fbc3f44551de8a8dd456549e324ea74ffa83bd39d27f1541f8a89d3a24ebc056fd864fe18c30b8b99c3bc143316b2e9a4ffb1c98644fd781b54c67414d1012413cc5af78f7e83b4e957ee6a4fb50595c6d69c7e9fa04d3babff277300ed959704507ef08e1886c2f1154c0665300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d58056f420a39334d9a6a7bfe9ed5459a174fd6c8ef349a929f23071f0e1f559ed5111ea22630f0f5d5a08a3038db6d4d4e71a43b0e7de991163f58e1577d51de9368a10d58780617d85970c1728e72c7affd5e7c51170273dfa525c2fb7766247defe57ef70867751e3d23fcb2e9512b4396332bc660ef9c602e7fa27ac4e4340593fc2169725f2bc5126bd37036b8e70d8558dbe67cb68e0b9c7b73a18adff8575717310fbe3e1c3f5a128ff95980f1d0257e243c2d0b1a8b906412e8f1a6230a47a54afa17996de459b506103f11688f8eb9b46434c2a403d02ce5ed8655c0ae3e738f5b1af8f3b5f64901f5a61faeb926aa80fa282e3b9b5295b3ee38bf6f9f27a6fc39dc8f582d10b9746fe544565c27d51bf70172a5c563cd1eaeac3f897d1d9d2c061a3c3e822836fa75d488199a48b470b6fb96756e36b401b85f362aded9d7a2ab553375987ccb46917f2a60a435b8633cc87ad3c15b1e4d402508afa835cb95bb154ca1aa199b09e4da08c16fcb5c792aec66123397b8ad72d70187151fc21cc4feaa4ed3ee2103e159be83f5a0e48337ffa1899edcc7c58ade65176301d92eff2972cbc08e648ca1f45d2c404fdfa3f126b823fab3e8d5b82d110000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000902d0aa715776487c91f0e21dc0fbb783f8285d4d385d07a0fc5b1ed602c2685ff9418c8db0b46d3aa764fd26291bc3c2b74c42b5615ee295b62bb2631539fb91350c117e5fdd91219f5130a014ac45294260b583ff7743008d9c421cd5d8ee78240d80d5ce7e8df38ebd7a47fc5a53a0e31c41f7ce3447b92c67db655cb69ee996188e3b3c290aa76d61d6b67af00e6084218eb7805028dec2542a0324aa86a5f8abf4add4bd7efabdd98a5948487abcb49d2f25e21d0bad40fdc740c088b47506bae19daf3feccd5b472ddbcf9b7ab7557d5fe0c7f1b0651dea1e1df3e507b7dd74ee278589f4e0a628ab953a177c97dc8d4563dfc1f66540254625e5c754a5166e4ac1185ff6f65cd81437b0d5c0f36ef8a33f7fd38ce57b30bce0b9f8ce9f854d58ec9b87512eb00c778359bf6a822ebda2af7c5eae96cff50c97ebdee86202f935411860dd19f595c65713197c704dcebd081b8bc2fefa50f2f5bca03bac059a1ae9f2e11c7cecc9c789f4cc94afccb4561ec86e1114a894847518491ec64a9c09f81f68102bad4c877b59a5272d6bcbf60075467933bfc962a989619124d3c7ecc7cf612709625896dea95e473560caf2f3cf418ee0398d65c2928e42a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f724bed96ea1cf788849a8009ea2befc064be3e93157cec3fbb15a8eb2638e964ae5c2ec94c99223a75b30c3dc4b4103486a78ac1627fc70ff6101c4b7d9ea9f51f917921f262d3739f541f7ee9eed45620b977344e8cf72820a6c9fba738569778b14363447d94173e79c04f6d921a965209cf693208ac789845fee9315602d96c3f09a6a8438d7769d33eb24375b12c32f86516bfd3c262e593fbaa8c888d0ecd26660c0935aa56509e839508b5265227e89a9af752ea723346cc61e1411835fab846203d65be4f134acb98a62e2608c1cc2f62a14c3f6f4920602905241680c48e064ce22a01b938989879a0b13d8cc3f636d09c046e87af54a8c616e169abdd614d2aa9f0e34ec9db3993efab16ba74ea1eb2954af2fa9d9197784d4f6cc4e62d7300e1b531b55cc505d8a7503f02615dd0ddf3b7827caa1c82a61315cd62cda2bc390d9cf08b4960dda1f03567e8722f8d8eb46a93db5829dc8c73b6539baef484c7523893b1f46a8978f6387eb2bfa86b031521a2afa39abdb70e86abb6dfea9b1d6fbd29c013f685688f056423f48c7d938b502195c978523b1e753b56b968924809b4a17d5ca045da8d0591b3f331977b72e8e43690f5301c1221b1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098beb76aa4c0eabeb5f31bbd9b9c05f3445a4ed3e3690286db842f501f91941b831a08906692030488fab33baba0e0ee82408f4c2cad9bf961ccb9edfd100778412397ae43a209b7d799673b9791a4a9bcb45cd4942bf673853feb2ea582e14f07cf34e7191f54c1aab7279523efb7467306b761cf983a8e16401ec4c5b76f4949fcaefd58340fc09623d8a3768a4f9febc86cbd081f7fc68774024edd37c85e89e91dd42a4b02a065233909a3afdcd65ed1adf6466b5642544add2658bb83f0effb2d0a83a45102bbc3a778c466c27c09ea26f0f4ff2bb39fa3f76ecebf0dc5bf02c788befd6815b49173ccd249086308bebbc9fa50e06d8f44d374300e3f9fcd498bac5cc3d58cfd5f3f8d5b96024aa80b0fa0f2ed9b60ecb05c9ca00dc2e75b3e57c09b689b4231083c5ec3bd4e489392d8ce32cd617a37aa5f11a13193349547305705db3383d19343eda28b1caf2448b64fecbdd7f576829337a6f7d60d478214d113d839f6ab8a994a4a6113f0d0570bfe5f953b7d1169755c5b2c0fc2bacbb30951f319ee60046df8381ea23248dd870e5d39b7231ca1b481814ec12dae856426a2095de125b6875ebb124314e31f547d061e617678cf08a5ec76f77200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000444ca17f892216cd335876444621a5d3d59c6369067b56ff457b3ba0d769f3e73a8bac05e3a79c5f5cb27e1bed5437c4abff85bfcaca051ca6ff3758fd659ed517b829a4a517fb6dfb780b86b2c9895fcf30f5afe50ec1711e9952ac758c729201fe5c1fc1a093e23950fa6fae6863988063f7eac2b246abc462e35c4661198583df72672eed3baf0f2cf2ab24e62a3296ac9afd70e4dcd0cd0f6ba48d572765dad05509da781a66b4923042245ed6bdc4ff4bf863aedd79a15dfdd87cadc6c569ef34eb1ec595599ba6ab48791d85713d711adb93119ec86914e0bccf7f1825cd992353f0f72f9397af2e5547491f52b051e93725ac02ec0ccda3ad17613894535be4a853e6c82b0d471d23e1f6eaed87e5e0662f466637c915a2f9867668d3e2b1c63303f98a4e38b04432a2e23a7deb2565d2122a1191fd62a1c4492cbb5a1b0ccb95e1a600a2b2bafbe763ef3276d8cb5a15bdff827992665d3f3f94a92043ba96f56ca444ea5d8af702b7baaa6c31deb70aa4802d48185156fd43c57efe0a3303bf44412bcb4ffbba97a61ba85022e125be561e2d9d4db83d8ef60e18bb77859053d9c2a39267d3bb42fd951f435c6482568bb7ce81e65161c069d4e7600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d721dce8b5c3a9968cdfcc6450e775d4a9af825b004ea9c8a237acca23668faafb2585f4139323e3b74b5fe7335d6bc92e861f75f2f48f37825638243144ac0a7897ba9a608c3c05a36663b49b33d90028a2f4d2947c1b8ff2244890dac430dba9352dd25d92916a2a9ac8a8ed7b34489ab279b1b8fc29fbb0a197e961032cc57e5cade5a43fcd3f1350c92cfb266dbf87894327d2c4b69cda1add56bb39d0b99ba7f50e684076240d3cf82556e12bcde39cecb065bc1ff286c201994622bf90c25f9a563f902195337639271f3a0d8737df10be626cbc48101a5bd333c9d5e16280ffc691908ea979ca836f6972bbf7b2cd6b125a673569e234b210cb4f1759fd289042399e598966c1758b8d8cfc1148130a353ece1997ae4b957e720ddf71a64c24e56611035f5781aa92712e04dd661744f3ca10a3fcbc4aa6360120a91f69bf9ed0976252645072b690c944a82fd36e65a6b993fdcb3bce3ca608b04c73ce5b402b7096fb6dcb6edfa8bc850578543ff6f0f0438d567bc8ae8a33313ad4ce7738f7e73b199811932a1a0392849e11e822ba9c52bf3776d005ccf43e3358d1ce462ada71f370b56b91558874c36619ea82dc6ad4fa31afe3f353b61a4e100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f85f0e0b902a98d815e915226e0e24f4bfd3dfd45979c646642f8634e127badc22dce5238494616719979feac0253414a220dd2bdc3537332a453ffb40abf3d11e2bbe2a37e464c88b02404690da8cbac78aba0fc12289d83320af37fd8576e956978e34dcf7d7598c0978296d3b6ea00cbd336bd118d305809be9be14f69bc8f5de2940aaaf718b6e9bafa8df6cb84db676453fd131e81feee35001e01672fe2268261b86e2b412314466469f08cb23ce2558602434ae2bcad49264225c5aff515307c344ff14fdbbcfcdf2e29ddd498a9a18a0b62eac43916c63744d7820c759baa08dc27e9fee74ef108c71feac1477f01e6d02041721cc5fe4b9a78edf2b1678e0ec9ede2535ada88cc2e3bf6f539a14babd53198c6516a04c72f6eef841c5df5eab201e9f960926975aa5b4f8d1ad6dfc9cdb74c17376b886dfefce0f0f5d068daa6a0f70bb2830bc9613fed7a467177dc5b39b8bea125b0012562849c96afb322fc966eab9b29573e529d95d32dcbf221be44d5d4e0ff7929707fbb5db0bb4ac0486090cd5aedf4f200c183e766c25cfa8ee6634e32f0411282a61dd570bd521dae1276e0349635b43ee0f365e261d39178b92e16443b41aa5262fef60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000291fdb1e375c1a1fcf0b954c97e59fcb35427fa1d7eed3bf83e469cdbfdab116d9affbfce1c9b94e23013b9404ae3039a10aa8332da2b76a02669353897bed0e86f4e3afb523c255733557674efdb159564aa9470df57b634d29351a1c76a317fee63001debb419581e3bd25a2423cef813b86b2dbadde37ada94f4edaac8cd736bb3e7872b4deb3db269762a4d78f703e61dff0d0dde46d555d8a967757eb7eef799ef96ca97680c96c5170d10f02e3ec8f60f887bfa703f1a775d4446644dd570ff867629024c6922ad4cd39c099b4d9255b9bd81c79ea23e3013d19229a061f5b4d3950c0279357f72ff01e108f36f2b5a9385e86baf90cea66afb75cc5a9eebb7e375b6c703f1a16c0c65c2d1be08b39f9c9559bf8336ac59426931bbec1199d8f2d9ad0a1474668de7410e962db7e1957bc266560622cd3c7194b9597ad37290c7b60a6f9428bf731fe6a4bb88bf6e7ecff117c78713892ac60559e038575ab3f2b4a350280c685a6a766c0b41ac2f418a12dffd35d669ec7072741ad34c43c4d43c4099be24226ed41a99880aa811c44d6282aa753fd324b38ad4a1a3288ca1c297660d9447b197c010b5035fd3d4c1fc6f4973a9b8d5bf8f4d2a6f04e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5ef4af37f3186cf79c6bcf855184358f02a771859214ee3bf0659352efeecb2d5c91fc670775c559c70e5b5a39c5aea13faec40d3102594822bf85a96d8f80b2cb25e305d9a2dd13beed0e3f81085238968bfdeb5d006b6a354d63edc226cfbe6976f3272e8cde833a8e8d8e7f7b371c12a9788ccc0e44af98b1345c8e075744077478e0e153e67ef1905e0c57a7e0d3c5fedbc9c1ad91557cef315528d126a704e3235da1531d4384c3d962ea8998bb101579b5046b37f2dabfb84a976a7fdec7c7655f70135b945560d7b5ed56f87020a70ddeda80377cc8cadbb8269418c42548dab4d6ecb71d26896979f96b7dedc970c387844ff537e17af6ebc03a30296e16b4bc05989927f994dfa8b8a60cf2154721a8e2bc51013cee466e40ff8e1ee9dbfd7bdde75cf08ad2cb4ddce7d839f47d8fe531a50a3b2965f1277ab53f4c902191eeadf3cf86c57b1bb89c4bca0f3652b3c51b928096eba7c111ffa4869ac5a61d9be97a63fd656397d76a6a0f79483950c8bc00d0677a719dc1a0a5e64a89739b5232ef0f9b194f4b39166d2330d7a1094240df918ac4019d203faf2dfdca2a24beb3399e947432da219635a6dde4a147761552a331c37a5bbad4f3350000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043e8451540b01a66ab0f489d7e67ad4ab2c7fb7eea5c26d4e01eb1014fc587107bb02a2fe1291cc85f8d354b6a941c77e67009baf53c0a5ebda3b1d2d04d84f2d355a0b70e94a91ab14ae6f2fed5f643836020c80e0ac57ee04948d1ef0eccbd93272ff1c5efbc1539597fb62f9ce501b5dd71edc41d654aa91274a38cb02a8b7cc5f67578f67c448f6223fbead6c8cf4b6b2f45504a9699120727b3a6ad2a2ec4b906f121a36e18cdc30cdb18c23d72333518ad00b7756098a0a2de1c3c66727200dec5743312ece92f88b0c98084c85ff6fb8f1e136c92f47c204620357147e9cf57a3880c03647a019517a4ab683c3f51565c1b880c170a71f36b120fc24a4c568d1eb031793f64b486e94b54f7b6b69262db265a3a0e14405885f02f7d3c84df3fe02d9d15e7a1f222d9852f1426bd2ca9b488699053bbe96e498aad43cf09c13e10eadef58c4546d246fd9633b4837c287e20fb08d11e7b644c2937d03beb7a8328fdabdb8d5b5a1246ee4ec3c1157f5d8688780085cda869b486de2b9201a1480789f725d6f9ca0ff4ed0b058af84c6381fbebc46c641f3008e3143dff128c108745e03925a6663d174d285878fd1f3023b5e85d5cb6b42ff4e0ec84200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d07f07c736f07f695b72e1da34b6f24e655d36ed9900a7eea1c0bfdf57f14f1c267153c05a8801a2c2f8dfec74220315978d0c1c4deb4214667c9961376a456df42089f1025580124f254c72db7add8f26a4628a51bbe5aa090de16e057f54b39959e39c42e6d1be56b08efe94fe40cc3f049fc4f808f83f7fe5911e4d1cd9479a42e23f8166ecdb32612cc78ada02f321f084ac4075bd6ed70f5a494c66a62cd0e0764bbdff936f4f76e4658aecb6ed83bd0e0893141824650ba893a66600de607487ceb772b525ca5efe2750349bc4b46510d0973c808ac98b989dca364136a1af728d0c8a3bd5f649ec2138c09b53c8d21cf3a987213b61989f1649d1cc3b113e8328f4b1fa7fb54daf4fa7993a4c2a6067c9398e0ce51ef8c6fea0f1ccfef6f60b90e7375c295b569d86dd718a29bca72416d502240dcd356c9d0ab0551f5accc44471b624ee874ae6ababee54595b8bd8f6b76a24003ee09d1f884f5a6e17f7daad4b9c20b98c9c02f2a12d8f4fc77d0889f2c4a22db9f0248b1ef65d65865e28939d0f94045a2e2c9fe9590a57f2316e8ced872211480004a62bb3a818681d13a26338db8cecf056f0c960522a5511393f0324f569a29b8b21dbcf25d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001854b89b702f4c615eb12962b8217e0b3d0f4aa52f08c192461a7b13a00cdde8cf2a1ac7d45a08b7d1fdbfdf9164634026089a025f25e86a3b8fb5da9b833f2630a787b5b993ccdc98b14ba6c2d76243606fc2ab639993cc818d22b6bd159f206be5531978db6e1e034be3a31488f74081854ffe7b5b5b0cece5c5aa88df9ad670c8f0aee2720ee57e3000801d5be91f57c81dc4ffbc896b8a7854094ea0fa767c3026f8faf993897ee2e4d0b23303ffa9a8bbcc018f27348c579bd7ecdd857b94002fd3b3e1e0b50a38ee106121b8beb2c71716e75d453b098d674d3957963a7c5f06e693a8979298d21e53a82187adbdedbf5b09fe53f64a106f8d3e6a60fb3cd18a28cb82173b2604bbec7e1d7ec9a5c4e9427c5af8556f2e2376ee4d571e16f75c04cc007ff6168c87f994e2375abffc8a8174e276e72132c858463dedd72d261deb56ed0655be92dcf3e6e51024695502bc95260519d1cbb8eda5cef2a2bcfefde2576504447f9b4dcbcb5b4eeb121dc12fdf55a1f505bc9092fc2767853e683d15b5a8595a6045e9a7dc5fe8f5b6c6813e1a6170e71f39a5e5b6b733ab96b65f7b0ca8c45441976f386582323ef09c95921ca42fee202980f45f79f03e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f4b1bc7403742bf70f0e88686de0557a4d764ff334f89a21f8a600f71ceb274d70c91ce7139bb75ba73bff6219bb08e3f478b0daccd464792b8861fe68fa85788e97d2c741d9c769b0ee75f3779b35d8bc55b8e027c574c96e33af0c985c79c949a8d704b9317d2185829cf090003a7cf111d7ae6a3893139d9ba2ef47846eeee2e13059f55ffcf707fbaabc1de182d6c5448c4b3b01367edc6d4a7ec8f5392aaa1a44d966c0642616d0a8d7b028960627f943d9196bc9151d045114502dba0b64bc92b4b9ee1e4cd7b191570072542c425253e7f837ed92428782454f343889e41fd42597dfc7e16a1d7c1352bf7cd5cce2ae1377ddca51cd24a1657965007a9565484025adf0df98ed75d21691441a5ab216d310e02e479574d82f4a675a2831a9468cfdb1964d54bf20bf2f2f1bb20563d20d31667c12f9f42f9a65cb5de9783c53c4bd052e8c05c5f3d0676638cc404d5bd44dc430623628a237f75890fe5cca77722bb8c227f66a6b493a9b91606576cc2ab8ba2eea399420246e5773b251485042044ebb5c1207ba18139ddd1b1653f3213886e22d1e42b1570f9b9f78f6f989b6c566046edfa9a8155a56b5eb2202b0a25a0e02daf6e88b8ea74df0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093cb5c43dd0a271c8333777a1eff4fe6e1e00f590b76fa51b304e508a5fc33f5fd36cb070e7ee604df119684f90b78645707d7c44a1295e0f3921bff4cf1170caa81b6e282a0baf8590f8636c676f80e2cbf363c24441e115ba40dc7e98d301d24491a14673230ee125522027e8a88d1dafbf60d8aaf400d8635c8c32cb79fa7b367ce141122a723cc1ac117a7c391659043ad546cf16cc7408e604667cc977d4824d9a1f2c54bb903b34f7b669f906dcc8b8ae6137b19db55a40ef960ca7a81a4c84c008b9956251e19d6fa6b83de47d919a1e673f430b18bc5d508da2e14639102373f0e0f1066f836511902c440bf67b671e91bfe608fe24eef8fd1d027363f5eae8e6fb9a3e5f942be6d5d630e72d0d44e4400fd440800314cb2e920b2a768f239f5d88b0b4194c4503fd06bca1ebae28b33f90eb3165d5b06dbc08542ca6ed250f38440006f1929a495ca5a1252e237c66f406201a21adc8bb7097376d76a46adb7738a6356098285e63c034a722a737d5dbffcc4db583ca928a4fefcda6023c2bb69ba269c9e013192b615fd091cf248a8b9bdb3ce98842e97cc8dd4983ad14c490970f772943a655dbf0fc599d0f113cb5f0ab18a3217dca4f86ba0250000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aff84f973a13f5a53314a82f37f1e4eff795cae327a1c704a9640538a923ab5b8e286e6f591eae4366c62cd5c06712ca6bcd31e88684735ac2c6fc1f7a6ab7b8e465f363e6e7753444e6f020d40d8541120226066776373cb179ef91017465bfd6ee6fa3824c247a85a0b068d3fbc8d70924b73f74c1cb72dfd691cdbbb093579ded0d93839957356e764fed450ba55acbf663bb7b1595c46906816f5954f455b203518818ca3f23dd3418731203cfd673be3c271289d24071ca845b0df3e1daad9b6c459bc5d38437fe0e682b284f4ac0d23c8526d5a728e7ba09ee3cbb4cd2738cdc84dd5c5ed329042997f90f5ff10cfa121063e1232a12d392645fbc481fc97eeb3afd9363b2d21ab076ee2d2bfd12eeb41f0b420336ae01ea7f820a94680fbf7cc47c2cda487525467295498eedd62bf23665b546adc1c4bebc6e45c324ae691138cb38e886141285e7acb1fd151e36dfeb488debf1185f1d315e97d8e405c60b335f05850009ca2da6cb02f7a7bb2ec5feb28fd94b8fbd85725d5cce7d8468b38cf728f8d2ec1db207eea8d04d915496db26dcbb2885cdc09b05b1c3197cedddc521f27b2509a8db4a51962c49bb372d5a056364f2a6586fc2e116150600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c25ee3f9ccd805f8af87103a7582f3345f9469988dbb814c12f309066d07745f0445fa11eba1615c3aadb9c85508458de5b9b1f1dca593a6e599e70852ee6b18bd9a3695af642c483df700ba9ca52ec3aff0b297c3052b46fb372604aea4ddc5fc244688db654288ecf16410e689d7fc93a91f0ad6af08297d3b7ca721346b2b80980a4669b183be80f9bda41916c29c57181369144c1e6b15b7d6ff319e471b6d6d1bcbc326bfed87328cbcaef6a486cb3e09c5fb79249c09e8ddaa04a74fa28b16d9aed62416ec2c6dff45567e672bac071ca1225345597a9aaeeeba5a7204845a3263293a497af9823d17ce6fa0b511787e4e8b4375b14cbb3567a0f168546b76e0fa143f5d4a3a15a155d3ebd74aaa48c839b427fba9f0953aaba515d1dcd79e9cdf94d3a51af15bf0a0223ee53aa59c9d447c6e965823959a3ff417a47ede9f1e71a3ae9a5a592d9287f6dbbe64b3494e4eeb2b977a5fc96a49c5ef183137468e736a3a8cc27aaf7f782ba40ac884f70026337e696ca38e7da1c5f07511359d608884fddabb0d4cf79d53a580668fcfb0b9a9c82c5008febc81b893760645a130ed6cbb4187d5da1a04f08144b4471eca4cd4ec34ce3f8f88fa133215d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e2415ff7c8d643a0e5d793371505363f636b556bdb0e8d4dcd823f32e1eb1909589dc4fd26acaf8f57e6ce025a313965ba492ad5c8418ac5a5cd12412d13a6b49bde6674df46b7c68e2092af27cc83d5459a7aebe9031f549091a32de5ac9189856d01f79d58dfc56fc8456135fb3dcacf08755f794dcd570a16175097dc27d59f6559b5890f3b596ee563dd412f8099b2ce3f240d916f2088e79b9416b60122ae7092c6a21577b43318ecd0145929d23b6c9a9ebe44ab14f95e403cd0a12e7665f4c16598ffe466ffcf738701d9a2b2411cd3e99e2ca87d90a17837cf951f75174f216e1f246aa8c0090ff986565d51d1237d874a385fdafb07b754fb987e8bb7b3db4b0a08d8735097abf1b39f33203df7c8cd8ecd29d2c79629bad630aaf32b61c98ef26409d1edfae4b8e40c78d89c4bef6c702df6989c6fbeedd5e4afc7d32bdeeb1ada39f61b6a269b5bb88964a3bcfdc541482c9f5b2c339628f2bbb9391598c7eb5d9476b774a2adc315c5848d521eb03c93fb40d5a81285bd98117568827abe27dff9f3624da5c72f6cc40e9f2d29023ff365604db8df619a49c5bfffd187e9e88f94f9b718604345ae47a8b65d53f2e185c52879fd5a43db90629000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f31cf112e5cfeb84aac6549550dea81a52522470ab56e61129007efdd6645eccba55588a2071053fc54cab768048965836c332318494f29e70408f6468ec97764a5a3bc9d2d7a76bc5a81c17a227dd51886f7967db0a3bc499176a3dc8225136e49f26790e4106917e002d003956a19e2b734182cee1743875d51bfb0d9aa7c27ee5d6f1cbf4b2404c2ceb5d6212f883345c58ceb60a37c6f2f57c9058459637defbf5e19b76c5faf74ab7c163a1dd7401458ed52bcf25077a543a125d7e4ea449f53158999c6e300f042237c7aec27ad0155009edadd8b8d20fa4a699b6dd9b3864c668a37168ac068fec4220dbe16101124759d5ec6cd9a85b6c664379b3ba15e96c54cd4b6b39d89d594f6302bb0708c235c6174ce9f1afb6a1adceaad962119d771218f68c48668402dbff53edc01bdab9ca135a71ce2e76668f0b4b943155fc3631ec32d93cb9784ea35ec30ae13d6852f90187a819c7345ea77f43fb328823275ff0dcf8e40a917c515a8d719d39acbc53d92e86de309bc425513c604133f11e315f11e3489516d6b568dc22b4109776764edb4e6c8bb7da24184a770513976ae49e87fd5110cd9d90ad3b545c01752db03457c0a6ace53fc5aa8dd5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027c43dbe4bce3fcbdbd4ee838d14aec6326e4cc767505d1d79d2baf546d4fac5c62c8c3db6173fa485b1182242fc06bdfaa6eb5f624e52d6f47bc259f3efd0dda44450253a2112a17df0349c5a5bba4f44329c08c7dd9762e2874bd25ae4869c40cfe52e088ff81226f7947365a9f3f12c04b15e6f151d30baa512e1d574b902a5d4d0d9965eb2ff7ba0aed15b8599d5ca1835667f0f825b822b9a91f678abb6beee4ab4b032c3cb18a7c8100607b2cb5a16e46ab917e16915d4598c29fe56e2e4701e7412cd3a2acb536a820ff16719a7ac26aab703c12ee1a0321104c3e4e41fa1225b2305e99893ee70a80ae900e5db26813edc87c766493ea3a604733295c45a71bb2a8a16445c31c089dcfbb11b56b6a961aac24c3ccd3e2cd96efaca8c8236c6452cebd8496d9ae2235404bbe354777b61ec2e4c3323645386e9ac96fca5ec18bcd93ab83d87db0d6e620d06a2f54ce55920cb249c6714f34796a19a27f77411756ced71bb2708a26179658e670c8b9eacb33482faca365a29b570b2e3f4abf3252c96073859f9eae1201ee8f336ca926016ef58a55482ba63f8d01a73b2cbcfe99a184fe56c533d26d8c5cf3dce45cf0cfb2852462dd7d72959567cc00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa0d0d2cdeec82a52deb3a7d9f5ac44dd910fff3e378acc3415335280e3436d4eaea0278105c17d54f1aaed4753546f8bb35d00d489578557bdc66cfe5232f6b72b6240598843e9ad43c13b15d5d40be6af88060b5d14f65b9d76479c12608f440a7e6d7bdb25ab80f88da273493c868706bb7d3274fe37d5db5a343661ef9219193331f7537180350307e016ab30a89da6a017b01f0bc466baa7ce758f9acea11160c4585edcff5631227370d00df5692bdd953e0af59be36faff0fc9520d1b85be41206b00b7da9d71bdf0fb8ffb12c6f21862cc7a0f759ea4d144bffce3dfe4a4f8cdc0882a67fe87a226d87383506b628bec170bc17267010defea55f19a98e2e23b8fd98bbe1f94c5492f0d2ed55142f340e2b1f44c04d17039a4ec668d20e0917d59a4beea7b0e7c28f0fb9ab42d87d550f6d5302b718d9de1c8ecd6b8826b64b00e1148097ff1c72c1c467fba57e131c2a187a1498b3bf6368191627ca4be54039958c64a4c49a5b31f570dc1e2822b8b1f53ebe55dca407fd8c1d6fd28e648c2e729a747ec083f75040e23e555692ab7cb07f1c1153f507d3213330a757147c04d70903281a71f8bf8998bc013eadaac7420c0338808a3f491aba853000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b449deb3957b62a59c6cbae336a78ed5665003210731280eff793eea09f46d6da46f839d37788c6edd34434a91dab2cfc715278d38bc346975b192c3e5061c3b4abfccc339eafcce471c9b3021c63b2f7c767112c1b6023aaaf0073177b1d47cc6ff757668645f7ba434a158688e1e3ffce5214c3497cb6243498be4cf1f8d864b36c63fc712d9c20dba4d12e9a5a3c8abf48e1d5114e7562ce29a4ebaf7f2d5861059bc74cc48dbbbdae26c5fd8f5163f0dc2c790960eabf9e8110739aef284936ff4c76e2da975357152618d2ca7ac728f0e1f8ad589644936610c892947afdbede60bcfa6fecdb28ab11527bdd72df466ff88be2cfac7eb31210566990f1e240b896934335f50a36948f023d626fa0a9ab0ae60bcaaa6b16894ad448bb21b1c81ff1548c97fbcc1305fe2da6e2ccb91aab96ee4547d744c207c535328b4272a0e5939d57e41c67bb1c24e987e6ad49dc9e0f3676ffb478b6e33d92b5a16e5c8a85d37e55407b34ffaf50ea3f043a97ddf4c6261e6f8b90ac22e77efee1c98a048f4ac3d531fb83ddf5675ba3dce69c3647e3b48d0435a7aea06b0c608a0ac69b88b23357503d14e99d8237cd600e04e84255122a02de32d8c47389addd7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004575a1b8f8577676d95aefa0b23b64e7d24e85fb282f85fd6a8aad5b9128db0a54d3a51f750ab682e23ebbb1ae30cb31d49a131c16df05153729fd14e3b1d09d52d867ae48c5039cd9149cfc634699f71d00a9a4651a02831027f440d6fc4ebedd4acb75243d297689c22187c1ff49d0dc3ca4e9ce6bed83bf94f66d7cf3ff5e54ff589569dde33edef589a776a4fb72b84839ff2d5499463ecff7e8c55e5da79f592d8368b500762aa791d23b070b46e8f6518b1f69df25fd9c9905214a6dad10525b82c883e950de97cc5a835cfb48b0e59a77a87198b27a33457684172b9d5858a82d896f1f28b25517bd1e0cfc42243ec7f4ba99a18d8c7f327b15e7f2a99a4bfbe299549f4c7d87f3e13f9488c0d231a5322888bba50b65172d1949dd9e0894c1858991da6d099d9836502d15329831c90944cab9de0f55ba49fda96c181d06952514dfe9f3cc146c167fde936d7a49f91cbb9ac9e8f12daf19395e6ab1ecf42266c8c8eab04926a0a1bd2c5e3fb0e68fac1e502940435a9443fcc5b1e233555ddbdd8c36410b52620289d284843a94fbdc4674d14f1fd0ab1e008408b44da30d921e704199c47b4d17a05dd761d5a9435f3e2b2905301f723b85d8b560000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000acd9e5fd8844ce655f4eefb2967ca6686cd34c41826586490f8e9bdbdf7cc031129d9c0385b595658cd39189213d649a825bdc16d2775ce55e3294e891ca1b9a718d1e481c06aa2919d217940bde94c50dcddda204fe8e4a383b15a3d80cb0e6d79d941285e6ca3e2eb4a3567afae81e60750cdd964519c6b4cebe372cb3ddc83e6ccb8517935f5d5ebd965d1c5c7f493a29e70c72b5fb17340ca09ff0145a27d6bfb560df50005ace8bd3d1d2378cd354e34046a84e524436453fffbc0f0aca42a374f813cf43b1d7f11913c4c63445cc205583cb40254c858b53cf8a1681593616fe48332306e76688acb0046cdf86599a03b52580e88aca6f5fb87dc6d9c3c8257541baca5595df571886a6cf304d4da88f70c43380713149e35e58224f1baa559c71d9b227216f42ce5f76af6db503d46ae1b32ed1ce437dbd86fa062d9828ff274cee8799d438e4a4fbda5002c458eebf4586fc2ceabf9eb543987413fe230dcfb7352b7226049e97c08b0b00fae7b6f955a522f02268b19017ab473bb1b906811ffed998c6ad990608e2264c89b9e7ade8eec17dff7e560f5b80be509468ed916ef23457181a681f970ce0366b5df0db0c57214b0ddfad4c9f5548bd0d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa664cf2294351f0cb3da0c0729a7cee42e7a1694ffd37014403f5a8690e155d4d1ffe52baf3b4053f5c923df84a5c758096ff0158c17a9591eec7479c02f03a6e04537269bc6e705766fcee4ca31c38e3c8252916d84c939502430da9334cd9671b7984d89e51ca1fecef0650135222bdbcd595216ebb056cdb1cac10945030b65c791ba3954c9553bdf4440a4631c096ed2f3d189555484bdc55b5e954ae59e56d2f83248146265472849426861270af6780fadb2cf1776bbfc86f416e639a07d340d36838155c04eb6e900b6889dbabd3fbac34f35c8886d7f5dbad505f6b3d27a595166f2aa2d4dfe991758358bfae226996885711ca6f2e971a8d0e1016869e249c2242bc1b681c14a80a61dc3e8e41b7b70eb66ebdb9a8c5d1251600193e2e2491741ddcb278f352c2c80816074fbd09d06eae1ed6342fc9c543302595d3cb29dca1b11185e094712b25f3dfe8f50fb682b313172beaa23ec816f0c94fed81d95e46629a705c0ea1048cc5b9583cdce2466f7826e9b1d1f2d8c39ce66fad7bb8ae3fadfbc354fb56fea70ca882a1b7a70e834f018e8594bda3013f62e443ee93ac7ce20d7a6c01c0cae94900a872908a0ed8d944f785104f5092b11aff00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d992cdf0abafae8be40a084208412a37e4c9b26b8623df2392e26f30b24ffbddfa1bd318b8d447f5c689d3234eb6e98ba2f89bcbb60849089db22b99f2e76d22c97eb110125e32bf35400d25d6d5b511c2df7dc59009571180f519c37980e305d33be48e78b2fe6783bae81f52047573890da1be39c341d27320e31c306db87c791da8f54a415b0dbb49f276421175a71440afb1903ed02fd339be6dd491940131a5a25f485a711384c6df35aef4510a510e6c0708f1aec80b1a26a24ffbb299cea792358826088b4467b341d15b508f4f3fa5c35cebaa946d014ca02793e09a255a1d4e1ef4bc8f4e3f0d26d3baefd8ec62ee03e8e31ae62514516a9419bf4b414b4c27cbbc85c767859a53b729f9de9fa945aa7b134248de2bc680cba7e11a3b9318b4d2efa1c4711aef39556b25e4862f0711d086524300f4cb07a619cf6071049dfb5ade54ba459d9d218c67c9c71bf2015737a652d6df2b7e96946d78c905c793a344df31386361ac4836f56fc29d3a54cd3f7eb4b454a40f7fabb0705a3640e95ee74173e618372c0feda7c0e6a4029efbf07e82701aaa1101900bf66e1f47622cef420a2a091ad7416ed59a44a5561af25b14d077a3e5c5dea39860f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089c8265221cb16bd5a281e23555c155087110a89f004baacca044f0ddf8c4716acb78637c613ee0e877c4fe3179ad9dd357b426af518a94095ff80256729dbdfd94af2d4287702a7d32aaf888aad1799b54761310e2f68f3997e0264e52db3fd8a39d11ed9b02eee06b1bdbb75b82980ab4a659454392b1ea8ed7b70268c1d1a2c3ffa18bb6ac2ac8b9794448fbb98427cc86f66e83cc1736fcb11d2c8402ba4353232bf3caa6f7ea534219f635375a44010ca27a974d774ccc69f85f8c91e2ea96904d9ecaf0e17e0051a48fe04fea35faa0576b14589c1ab154e3b0378de99d86365858a6a049c62ada4e8705aebb5302df6676479d34c4082f34af14aa234fc8b83662ac88d6ce2f1eb283452634f9fe594ab1520952963982cafcbc41cc3490642fd5eb931da60217afc043604ab7f81d9f686181caec5dc5d864d79d406abe746305d6df97432c51639cfc2fed15e8ccb62da5f179bba0e3f87cfc1a156f179deac2f4a16e04b71b667f2bc208645ee62540f916c010b3d1beefb8dd0a01f7980126d931a2ace3662711319332b203425a5a15b16225f5fc3a9630d5f34e141b1846ec0563e7458931a4da0c918166c514710cb779fe80a418ec65b3c8800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b8e8128e20fbb8f22dfd2c35bc5ef71a693eb109fec602f2dab409f318dc27e14c24965d2cde3849ba9855fd28bdfad9655329266e51b2c27c7d3bfd8e5917356dd30c46044cbdcc29e4f54e5b5d49852a1b172e38b33bc95ab1f8ed91d6bae0223827dd4768a980e7e15845785acc2a0d38bac2bce72bda53f9da6be94ebae615aa14915cec44f3a9737a0d8562fe46f6ed4482803aa216cabb7fc03d47d2e1ce6fdc573f8d561cd3be05da946c2e914e20e784dbe287d1958a6caf211a998f8d88cdaab8845cb2742fa4320641e2b1fca5da1f26a958d39b89fb698d5c1dd89b4f715db43fc5c4ec25aeeaa542a612985955da7f83dcd94da2d494a4af031064391b5abdda6ef9284e07a97b8c157efc421ec2255b176d3bdc047aac0b3efd21a341eddf64e978f0a2db86d25bc23200474c601c97da0fb44bee3c18f732409bf57e82c7853acf96d3d18a5d2c9a71b297040cb8d71eaf37cee658eee9aa313d2a7d5b239c2dfbaae96ba92e3521a1842378b097702d8dc3b950e0d167bc44cc910e15b0f2d244b45b207d13c8f437bf54429805918b0f7947c4057709a6259661b28842cd21b4604bf741fad29ab92a77dda0abda92325775258a85f9ae90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab5bd391df97a87a8f54eab6c2485f943e60f806b2e49ac6ccfb9f16c06352fae1d745b45da24a895c82315e6e58e2a34ce2338be46a6403dc0b71a8fc604c7b2f88d8c96f0669c9f00a848e862decb7b34c0fe8a1b457bc27475d7a04acacd3d14af054401ab7c1ba1fc19bbc7a0e7429e91a929634c1f3bc1fa7af9ba648dccdea79c5712053a605e97ecb0902972017a7e54995cc9064b5eab25f97a3992d56ae4090d78e5802982d4a2345b0f82492541d5fc0ca8c446a75369d54b7f647e3f86784b091a34c8934abc1000b16a93659eab133ec6801e8ff0a29506ab5618dffebbbb9e5bb5f6f618980bb8cee4126000fb62450c009289fd7ac6ffaae11bce7b62a8e3634ab122b02b363430b09483bb0e91a3dfe7d71a4934b9d3330db07455d40c72fa8762ad2dbf65cc80d38ec4142776a5a52e839bc0577ed4d287a5d41fad779a3291b8950c8b2d1155cfdd9f520882c70b3abebbf77def8b62c1da17ebf32c3940c984e2361b3ea5a0fc1bfc7e35717a7ca650590858d4102d95ff2de24ef8302d9e02d4cf3a1db540aa7a1cb135328f301f79193c7eb9d602aec82aa7beef546666dc7c746f66dce735fc379a704c64cb5bef26f44e231337fd60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000968ba1900b55a7f1762ef4065531f8e473203e30603553d3b37b5023b0d491956db8d7bd633b6a5a573e7f41a282ed2f22d1676567a3f68d7f212587583e98e978cbe1320608041307ba140ec7f4a9040909f2cfe9161bfd36aefd3ff0bfa8b07a0f34c970cfe5bddf81cfc73198b08ece8fe35aff73066d10a6abe3606449cb8ff271b8c56df8c8e2cbb602d5beb98ad61c37c1edb6f4de59b46ca76645f6ab725a6c1bd92db5fe00061c0ef010a529065166b5535ace18b0de75d9ba58e727702297fde0fc1fb7b83a236c9e64c93f2a2a2d6fb9e9af4641c2f16cf88e3b2d9e9ebf93cd81a6f9aa089e5828beec25e1432e44f8c0c821f1a3e481954869fd1ac0333ac2d5ad281060d1194b6d0c08f43d8cd04b970cbcc698d3e4d1803f47754dcec0e2c5c238a9100a40b9cec037a59dc84376cc7aeb934aef29796df7ca9bfc3351487f2b8d4538c9229496d1a802175fb10eda1053328350b35b8722ec82a02b02a0298dbf4ac0fe386bb206dbb8ea7312d3992339beac8d4b8463b95ceb93da64dd8d17331830dee5f4f65d60884bbb75af46b0f5b5baa4b5d450d09db5c9fbc489fd3b285c72eda9f7a55333e56cf126e090b12e4f093ea7d7113ba6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092364bc0d578398933623695f923347cd2cf376d87ac3d5d2c6c2864fd805d0f28117445e9eb7014d2d50327f4b5b87a03d846c0f787cda034d816183b1c5d5e1c7e150f9f12b71286322b29ce5291c70808a270efe670beb89c3f7e628aa2ce86aa769d7064838425b91f07cba1904eda531fb7161b700034b511106ace6049870e78426f0576c7c396adba1378cb898fd285cd5e8e01e48d609b5a28d602b1b35875cb4e7aeba877fdb07cdfe8004324ec43ae6794253d27ca8d871f04715336b477a82dc429a1aae9f39deb31168ccb595be8217b273ea93cf7da4974aa46a643eabc1af546f842fbc8e1ea154086897d8805309e22e70637da45fef9b2132dac1c5febf7ee9e608fd0e8f8d92c46d23be84d9018163705e8416cace0b65b7a0d95f51f7dd174c7b76593d2c9cf4b68f6986e5bc75da9346a0e71baf236fd76ee8c99208aee2ca1b839d8c8ff1af124c6a0c19a0beadbb68d149c64e65d6601077856cf572b9632f0039465bf1dd375060a1d038ea83307a915524fe80209b3a170e23e6a25df87e573efa9ca9932065ea05a338dd6d107859335da560488bd59dd444e0d54d7bc09eec80ece94e3a84cb6703e08d404217806f6639f4d2f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3cd6656283e7c3aef4963e14c456419b7e9752be156c5def394248398bc1625a7b28d3461bee09d2e65fb484b66edc5610240f5658689c7e4a409f76eb8f9fe9b3f295b8dce6acfb6dab49b79ecd4d1a548be6a0a99e8a507a6989970803bc78bfa9d4c01d6cd40318cb045d05807da79783803b81b295a1cf960e6af67f862a2f3a41bbfad109b51d87baeb3b9046092badcb76b073ebc1bbad9388d1c10204c46fd0b3f3f0612f0e70c9de8ef923cadbb41a7ab746c8865391b49e6ef7645cfe5e3009e742f9aa1981f00bce15d4c2ba9781877735de83659f6050186b0f6b10fb3674278c27ca08c7227fa129bef4d7e6a15e8440acb62f83588f0b110c87d111c9646d757110565b6b152e1510398fa4e5dabaa90ead120c5eb0c9edcff57c6d076d2db5a3c477419a3ec48b561cfc3f4ea3f1bc95b6cac86a16f2270c2bdebd12894bb18b56f58cdc5338c9cdf3a5fabec68cbe7edaa1423b8d31a68afe31b20bd47d9a92d213fc857827a64db61ab790f966e303de573c4c6e8dd026c29d2681d0cb15ca91402948d49985540e21432427d8f11b33f760110d4d527171e00c090fdcd707591a21b2fab1a09206a65f5a76aa4647d9f6bb85bbc737735000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021c377511c5f2c7557be1a84a13eb50a5f98fdb3aec569af6915134c1ccd2acc5093f7f29001dda69a69c4808002934ecfc838a65b163efe28cae7994299de550ef8008e432fe3c82f26d8f88ebcf825b6710fd0dcd56760cec3de3096a7ff400ad52c7955d9efe723b3a2a60b65eaefd6fbdcf24affcf83db45e225a52d5acd29cc42bc2bb6cceca3d987fe8380245e3f1b2dc29ac06e7ac3ed6dddcb86e7d2848ae7d1840b04db2219b7ae33a77f50b4ab8720fbec0968e99021f4346023f44c7da603b5c46b56447c4c4d268f62a25d2a54ffbd10f65971f6e40d1f3fde9435072e4931b838cb447f7ac3f397ec80225fd1befa877625398dc257e188c5dd8556b9804702cb7ed9b56c8b06eac60abc31bb4fc901c8424192f592ce5168b596d9f192ddfbdf0912fcdb5a9c5a9c823d6d0211a1bb3ebee423c29bc9ba9a8e9437ba0daf7be9c0159853c8e6bf662a38f8c91d40786147fc7cc69646fda69f32f8ce3af813bfb15bf85aa016a5ededf3a73731590aa7b7ae5707a60aebca20ab8567ad553b34c0f9384b515edbaa970bc1b58936ec1db7c3d138c36bd908c060abaf59cd4c6d4c1fa38d97a8fd2c485513796b65e1d590c7ce6a5993475bed0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000144dca5307184d5fab9ff98939f0bf4e15a45090796b3cad799e4d1b72a4b317702f190bb5855bae33a77b42829b291b7cece43cb4ecb6081cbff85d0b9e86e881478d8b81027ee8a7741e7194d150571d1214bfda3eb2a2667a3d8f65bd61e10deb8644908665344cbfe758668ae0337ff8ad729e1ced545476b68e4c2e962f23bac53231ac254312ad9c4b4693c826009f71fb985c94eeec9d6e2e68c6b6934e71b8a5baba8712f57afc4fca0426ed9f142a01df112784d2c00a2812cd98d08e3bbdc9260719c9cfecb3fa530b6e914fc0bac6ae7cb8c3f497a0e263f91a8dc3c13e08c55e51b88e28f2490f52b027a7d4d4cd4b34f60e9f45b7348d9eafb68972074a2eb03793851e048604f43d4f7652391d8806a3a8a0071022009b3f7b5f41b5d796b6178ca4473682d613f18e9c8b83eafb6e51224597ec55636f58b989df939f6ff381e160e5f17e8de37a4a1a907d45c4029cb17c090fbd849729cc76f1f27ef167b88576be90579a8633f86a94d5fd1aae016b94388ffe16b89b34f21825c9c7646ca4642979484bc2b882d3e5f035f0b389a551b725177eb0ac99d63e83202452c401abe5499bca6dee6d2800732c55315d8f9efa259af8b2da4700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001739d1c11365b2c2a11b8971d408b1513f59680c32cf190f56ccaa5997dec7ca66af92db4d763b01b23699c2c0a9a01daae6762c572d3491fb36c0f908d66f42894927bb3ba296e33aa29301a90a3c61701f0c083eadc3dedb04d27f87c28f95f9cd33c0b1b9e14b7817a1157e50705f164f0b9ba76894062c31b4fd0ae97f6ef10de2b8f7c577827f1d327eab21293565c941b086cfd3513ffe613bb8a69b14e7ff759f585572858087dc14d086edad6aa6b6a9991f91c03bc5a84ca4a366680a46763dd8985754e3e8550250b754f5e11e1dbd910380e52c82118142340e2eedb387efd17090306bf13a0d7062f0854c8aacfb1b306a555c819dab4a3800fd4b0eda6f6a749153e4a34c14a30ac93cb0ff97d1fef7b325cdc02b268cbf82b7dfdad3987b90c21c003b63be5c577ddc70389503e7e34b440c05ffe55ccc217c9866cc9a8abf0e9fd2a67ff55ad97d0ad26735659e9bb3c9bdd88ed86aaacae4d99bed7cafaebd5cba55af26a2bbe77ef1012ca65d81b292c2ce6785dc51edf55627224e52103e3761cfa6ab64ef835779133466e2fe4d55b046766debfb316bd54cbaa8d044a379ce6c9ef6d9202c24856558abd6d0e42b78709b9d55c65e27000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092c362797ae9482d2b5f187dde341af0ece2cc6c079ff0df406a964e6f6a1ed705a6d09923cc0bc4bed882949ed80db74099e5bd63223e6f565d25fcefba8c50d5312cae6cf049aa095a4acb96f256e6cbc97f4f0e7e31b1d884f289c7ef7cbd5be4f9dbd62be3e5939e3a48953ccf992027aa9c72cafb9d72b0017003a8ebabfe06421bc9e9a5480c70e570d12042bff44102da1f96161789a8aa68199065d6a693d736ab880d15195e23d12c887d7e49fbafef76cdc89995086cd761ff3d640fe40bfe550593d856b0352629b34404cb8b43f4013ff793e331c5c575925bfd65caa9bc40c59fee8e87e26094848b0aa52b85023c4d86f598ce3fe9f0f7d290a9c52871a16746cc75a1cacce148d0290410d9c46a58f115f2a20b69a4377eff2207ac86095d910d14a80e3699ae2c310ed52f1b773d90ccf404d38d5fa75e0737555311b3f6adc66261cbfe8176dfabd4e9633b022cfcf3e28fd21e91631ccfd9341093299a8ab7fd53051f531409bf29e40cc17d5ad5a446249f740e7cd88eaffacccc6255c904ed5013feef40b593cad82c3f749bba2ced6bbfe888a2469226f92f16317e2dd5078184aaaad240cad67d774c7a8b6615e9c2d531c5f2112a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038d8ec4323197594ee513b95a7b509118f2364dfa0ced411a7c149f44fa490e5bbab64bf0562911051b20abc724b5365e3c658e957db2d89f1e74803d24ebce96f7174bfad6968f7e5cfd348670c900cd53c2e2e63c196a84c13da2beb98bd4a8fb606d0cc6dd4e9e14ccd1ec4752c4fd5aa4895e0ee5b9d010e304bbba373f8b5670dd7280f334d245109041e51e7ab2b7a017b7268ce6c7cfe9e628c9b013b0de94bda61adc62c7bd6253bedbb363d23276792db702be74c2c7c0245a9a7e9b78f013ad3fb7cc6ce462a0bfcffb9b6bcd226e3f5ea19c4b2f4ec0ace9fde11edef721e75bf4d3ba16f76312b8ee7ca8827760eb6b2bf064923b68914ad6422b65b0e773d051f550a4fbab9135bf22af0bfa159f5d1590e48f777e2744897b72068c262c1f610372b191d1f5d396817c32da33c9d6fbcb467f15d7b6fa6e2b19bec01cb37655267bb8c78516d27a4486ae5f05f20563c864f1811a8098c3dc73f7e93b79a091881b6ea0fd5b3e3a990a9329b688cc90ea208393b9e0392ad5fd44f7276a60dbe2f128dfc356ef1d9abbe92ebf94a3f42b7ee7d84f23fe51244644d9048db1f20c0f6e0855862ebcd04bf31fd34613b543ada3f3050f5fc6be000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092adf099ffe05554eb7a84b380f780ae7a2a0d7648936b650375747a26b121a7ddff96e857d55612c785dc1108e29e4ac90d57f7371f4b023b768cce553648179e994e93efa2f1f8480f4c922b2a58b66e58f11737d804f1a41a117f60b2cd532953f777392d24e812ba049a3562378eae6bd012fdfd2c5cce6b253d38593a090fb58c947225213557ed7a6077fcc4f7fb0ba41ce580ed67747b7c9e4fb2fd2fa95110660d32d3a9b5fef946fdc1514575726cd8f5fc41613217663a52d4869cbb890c341f9ccd8261024077a1cce24de032f1b971be7f5cfbf1c274de7d3bbbc32159dde2701c2c66a9da123eb91392ce75378bb3977f10957a56e0e0bc24969d0038541dd04d797c3522348d282bfc673ba420a3d02ab1236bbc145fa010fbe5ea02eaed7fa04733b8005fb029da591675e6f0850af239af09f9170e4d731c01f9efe9918e5a6853363b59f44235bbd4e36464639a5dd7f32b879bcc11c8a0ba285aa20b5609ca31e98c50370f21e1b487e94312b4270e365fc04762eafa2001373c69caa1468d4c57fe7047991f75ab6c7f4e0f5ae9793e497cc404417afec75041635a95a6b3524c2f7390e52e83e2f8ed2d9a69b383cfd30c2973bc1680000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024c7add437806b9ace042cf92f56e10a6f0f6f87086334b54fcc15e64f55b7548f8c81c1cfc8828b26273c82627d759c7c54b2ef74f83a9fffa67bc567981eaa9db51171854a01245878d36e519d43c2cda97677ffcd1f9c1b6f00a0812a7c18def1209bab02d0859d0afc29eff08ff63284048283a10d501848fa87a3e91c0bdcd2d187d5787e2deb65c0fea338d3b6782e89222eb5dcc3c3758b9b7957e6ebf19103a896dac525263c7bbd33491ea4f9eaba277b2cbe6e41da0a9f28f2db36bd4d8032b200f28e7b865f50b0d1387f0b7663d04518d64af7f705709aed440a899411e71d3b1c9a642183e6db74488068f289f9b6e697ae9d25b0031ab3edbc67057e13affd6cb7faed81a361b0577003293c6a18b1d2fa8e54cfc2e51c227f12f48bdf8cf36044ce1125033b40e7d4f42c26a45797da2423dfd679295d19c008d6fb50799d1da2f4dd7ca58ae849a36f093bc180265a5107c4d7dc5451605debc2aec38e26f9275b96cc2766d796ed86d5fcc2da97149f726e538dc9827f407bbf17cf5df5befd7570faf793d4e6b3a5ee398f4e42b545562e510faf380457177b18da1a66264589ab4676d70ffaf4dc138ab887b4b256779da7f40fe4fe3f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000248afa62f9b181b4874c583c2644095f0d6fdb72cf02b1e210dc199100e4f85712f530e1d6122537503b2b6e087b28c22f461893785cd3e7563a8b28fb3c0fc75d2047879a569eb82438a8cd4fd9f3cfc085452dfc49462e63fc586c471156de41d92c7dd6e4484f9a6c7aa5ac740f59c0eacd4dfa273f5290fc9134273b5d03f8acb457bf05187248845c4f91eaa1de5c29bdcbe41239e1e776590e3a7b278ccca3168d82c8387ec82f0cacc3c1ffff41e0ceaf865ed9d45c3bdcaceadcad4b1ee65230c702ee5f3f3241a9f3407877b65dbd64c50b176727b6a34b89dd529bad14de30fa0c4ff038145e16989a4831c4056ef6c778a6323ee28a6548af52929b6839316540ac7cfcf358347cec28b411b0cceefafe56751e92d712a6c4c7ea9885098b774783201f2bde964649a64127cdcb41959048b6b82aa063a1e7c68955e5c2e3b05c479a23a6cae2255e7f28593f3269906c31e12dd4b7ab7eb7b58e1173fb218bda508bc3ff0cdefc6169b31d9cd10579e20d56ebd18493f2ae5817a5360e269418f69bfeb15166f49538184203c79b59fe71a5571e7c725bad02de827971de0a862c1c6ebf09234ec4adfb7025985bfb27e20b268475cf448e03bf00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001613d4555f7101efc4113c38caabdcb9528872e4b18106bef5b47d0d3e7b00b4d00dda664d7cf9d6ab3a78c518ad086fbfb7606c1aaf81d0ba055709c427eb6ef6aca647209a1ba9362be2848b74e11e7ca6238841713ec23124e140ccc3d4e655a8a1fb5471b6bb9a7b32db6c7fbd151306fb1c2335d81b21f5c0cb460ef56d75aa5200da6f57552b15240f11fa3d90f4f8a7bbf2a1afe82c87e95270d2977bd0c883e6cff7ce01ccdf6bf1921c521054b686e3049012f1ce69b4736bc487966a481cbf9847253fbbe5039e45efd654cb912810d71a29d33caa21333c8c210367c3ffac2ffff40cad59b3fc754c6d7f86b46136ac916517c3ae9741e612603e4c28c220639101072bdd0239b5690a65d5b29553a4a53dc211ab150a7af802b5076bead14a1f6081eb72fc92d5c531e30e8ccd8299160ed13302320315986acb0340211f6a97b3c2fa37fd4f98897acfa09af99b41275435222bd15555c4ded33ea0ec537cb74870989543a0e31767a6650cc5f265ce2145721422c5920095ea1592378f45b0edcf044274945cafa600b1b5ba858a50f15864c70a3e3599614207501a426d9a35620b991d8e79e223d978046268905a4c59e78ebab1954884b20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a70f562326f884c199aa8af934a20949feb324965496553ced85656ad0f7962ac06c2ef2e3af22380e55f23b8443c4b6e15132567c85771d5609c25c9b75866c81ab58bd6c23f07ab9d1c34f21c32e7cd26cfc68ffd48aea0c4031e2d968ae17d6829a68341de7c5117b72151bbaf286adf0c2f87ac0d635573b076239bbe02d520186fa5b9ec1f475b458e06e8fa41406607a1b8ca8727f13abd756de77a3c71ffee53a0e158b3a32f3f693b8849a4558cbae9583fbeafeed817d26651d7d7addedf58dcf6b09952ba2f609752712adbe061dfafac819d8f9ee8645283b8df47504a6ad2dcbcd48f16c3f174b0685e7a4fd1dce53de928e714d7be8475fc8080767bc38a6c143b4e8b7d10742ab5657d773fba87304a5858bcf6eb61909d7e538c0e712cf0315baccb9c5c092e7dd487120334ea21ae1c828778180aea8d87fc1dd6c46206a352cb2632303b40ff43c73b0492c6d84df47e940b35d91466c817f5b4e3ea7ded2b7cc0525ddcb30065b15e5debcd0862ceb8c288caede1dfffcc0b82d6356e25b9f729bb08ad2d0ec8b86f878c723303c6845d6c340c363deee977f4d708dbb2f54771c79c963ba93c8b93a22db7648420819a7ea8e3ac61d03000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ef3cd995450c5bc06bf9f09e7531e3ff7824c9f3dd4affc71bf2aeaf13d420edd334998c37e3574c2a75599c15c0a69df12782842bc8dcedc9cdf1e2b51d43b4d0e9d4393cccac7ada8df4729ae7ba0c671560bba3a26999a9109e3a248f1acfe9e394533cf52b2833d84dffc52a59c9027ba9070842d95c313fbfabaaed4717dd3c4acb4f89d5f2910e323786849a50aab99c1345565bd29c6c68b0eb6448333018a5082b7633bc222bafd64fe6b61fc629da3fe7bdc34e002bb4b4d20f0983ced11ed4f6db4b0405af6c26f006ee00d55e1da74abc48f7d500c56deb6a82bdc70dfb1c44cd4e7078c99a3909996d189591d977eb527f5c38871fadeebc3fc385e09d64e3ee79644e98d75e0eabcb62114300dbff02cb25d99c6e4ee8adc727ab0951e224a90297219c726213cda18c673a7261fc711af2326b2083662711962d2d1d31d631df6a848d603a7d766677d6f7aed9c9aa1dd92da68314152a7d388ac31bd872124b80cdd33d295323db6500f512e55a6285f611b5ad149fff5ac476d3a4e2f72cd76d3483e45cddd2ec07c6d7ff1470550691e6d412b0cb7ce7015d9bafb966b3c8901b24b6a648fe75888f004b84cfe86b4d79ffc6127d23770000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000967d423ba0bef4de98affa6e4ce1f88feeaebf9d5b1e8406b339da4087c8883dcdac7357de48abd72f40eaf49dc7c62d0bf4a20e190966a7a614e4edc99efdfe03b1c4bd8fe3af144c138cb69b66ad856eae009e483e4b0b89e2dd15e367eff24632cae0c654f95fb7071585af8af7589a856b0740c7f89eee5825377f56e68044af782cad47160921e68fdfe7a299f7c9ef93e9650f5b6d08de2ab38bf8c3f2d86cb1b83469935cf1159d16498024cd5eec5fed32bf4e513093c0eeaa60e30fbe97a118634b2e5c73df751168d41e15c5e91863bb492d6a24ca602fce8187fdfe34e417829db3fe5edd282571340cc4ec27c0e6ef836161d99241cc7f114c75a07db6aeeab150952edce54aeeea2aa7cf19613c01cd12897e4159179be61787127710b8edeeb1e809f9e8c9ffe960a2b4600edb743c4879010834a2b4db218af26b0afaa7e3a064208f09898544e4ca5e92089b82c16294539b67f1d7b47eb923b1b71305308e67eccb0ca5f59997f7a609ddb8f0929629dc2b260dbfaa9ddeb8a5ac32dc366268d3f590a3f170ba7c22d9320098fd731748c85be27aef15f8a1828bf73593404aa23bc4608295cc4c3f2358f0c7673d62bfd4da4671ace05c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064415d411fa04ce9939f4ad250554b18b4e8a59f94dc6582e05339467e4e9b76dc93586ea089b8744ff2a780ce42b8acb53cd597e8d18a325bebe2e716c0d07fa21c10964aef38f558fbe35adf282cf77b19c1777262f8769e6ea3e84175934618fd530f937ebef66668d2a850a34dcfa1bb3cfb35749b5427e67c1950ccaf4f84ebb75494a72e198beb184b4e1f51e7c6b2a86b21c72d8736e1fc475604f78da6a520a963dafe6ebd39123e82aeece9082c1ce06f69b6731c18a3967681cf4d1508501c2850b9eb2b810e67aaf9afcd8af44532bd5afc3222e6b84c70d429aa71c702f8454eef42db7d45289ee2d5a65b8777bd47709fd71f00d39426c3a693c05c953eb8ece3d5a8d588e4e996bd70aa1b23f3616440561c2ca5012ec5b9fa4112dcbfb231b6527ff14e9b1f92b76a64a18e4f8cc95abd733f96419901a41549fbf72f963f9c248e227b5bfef05a743173e06c824de7744a5a677fa642c4aa7bf94e3fae5dc588d17a097a9c19f5a9d61b7414a56a9c5d82f176b4f520f56e3371b49d5d399de6ef973df25c64f0e2a8d9a5014d5c3316ef99d36e3932b892a6684ca4fce7688bd40463f940e25b6f0d95f142cbac8c7fe8e5b06a8742b0700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002dbefb05d90932ae6ed662b15771a2b109e50441766e12e7e880f4046afea5955a89f609a48076c28a6026ae59cb6bf9d46fcf2f6c93e67f21b0cfe1b0f559f5bfc19e2d23dc34945582331f1509700f5d2015dc975cc3909e034404d6e6684ea3cf79fbac3beb6bdc0bda7fe5d95fc0e111941e1f44cf223316442c54dad621c07c9eec90cb7c088fed7e01e7e7190407972de0336516f7985a1b3f5ebf3e8406ee7ebbfe8029ec41a5083a9ae5cf05c00f9deeab2dbb0a2589d76e66aa2d2ca78e1a513ab5368741b5c30d91f9bd2408ea396910c121372f00c317d9828e7a1a7d6ce936580b44ae076125cab1b98a4e5c6538aa4ed43ab6e06bd3c3ed449b347a49c708560b069a1e6d01c2bc7295c89d4947c20d61c1352a8cbf76ff3bfd51301cac8f72447ce704b1cd43efc4bfbd4e99bb0348e0413d92e33a973d2d5acec11002f7c244881e9732e4ba064a1b24b63411f990881b15cde43de0286202993e60590a23d38a1da886c3426fb4ae0d33f416ad3ee0fd95ff8f2b2bc8f9edfc3b57ece786363b283d399e52a0994c0b304d4e9c29547607fee369d4cf040b1645662680aa934cf923d7d69291c3c4e5b130781dc759b1c2eabb1a5035777f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011d8434a74767065a68c643f615e3a05276fdc008163a176a53fde7b68c095840eec5434a4c411008fe42ad344e8db8736efab3e9229089f4639a04d633375387b81916c5a50de7ff6404946ca8f28cd57501eabab80bc23e211e385d6b5b1e1464eb8f545996a0d92e3e2e467f9062c62f4a749e4fcda207b7cfc50ce2f31b0fe4a374d21205a8ea4646f8bed6342dc898df447aa5dd86d3505f41de0d2156a74b33f79fa184cff8bd1abe8ea0a7f53b68ef9581e8dff37cc7f01bacd5c439f70e051ade50604e2dc9d3eeaed74efe2b547f3538c2bedeadbde2ed77c6c02b72eb92cbdb5aec8de9d5b75815a9251c78b987741b5ad625c0d2bf4092e32b19352ab1e1e1b47d0907b4654d8ae75d80944ffed4992c1fcff185da1dec01ead26e41d8725736ef55543a1306ffd6fd224e6c0aa52df30d0103baeebb0f1251415edb43e7cf0587277b9cd0ab188323f0100c0518ea68b55e6fb197660178e096c1641b9458a1437aab2ca855267f98137493772fd0e31a0f60f17cbe35920d737fd8e08b95ba3a71b6c691624301743874c95e4b1afd6580a7a12210dfac43fe2863885aed1589ea2ac62972a202eba8154306387d85fc73a6bc74b3b16efdb4900000004000000000000000c000000000000000000000000", + "2eeec89ff3fc05920e19622d186ff141df1812f7dc50f8948cf0ee94b024abb40000000d00000000000000000000000000000000000000000000000000000000000000090094ac391753ecb81321aa78449569fb0db5efde4216c75c9d867bae181b265400089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00b9297c0ba7559abbd713d4ecf549a98e691902e030a01be90edd9712d6865e14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000d010ee41ab93e2f14e41572442c3c5f75ae536312d294091f2f2992290a25be99f000012c00f4b5a0a3c44bc772d0eeed02ea175387ae273424b99f68cd680c02a50cc1f0c000013402db02ce139d9391f94485e2e9bb8e2f7d065d9dbc4ff9e6aef3fb49a030a7733000013400000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000070dbda840000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000006d23358812131f41026c5ae82fc92974ceb4e884220b9ab8589095b4930c0609af6c32650000000d0000000900000000000000000000000000000000000000000000000000000000000c205b4840076ad7e8cfce7d0ab798033452ad717cee19da4e0b739b0121d788798e1f03d91c07ab98f6b38c716662af3698d4db800f7bededae3eaa63f1ec2d75ed876af41d817b577673a6cf84c7066f980c705821f4c842b1495f4092951f57432be8f01050400b2130dfcfc274464cbb56393664a633ebfd0dc7f1f9d62321284109a82fb9c3f3a5e09f1aab6a779390345f4409cdc17b84f18283dcdda64e0fc5191c303e81b7eb591db3a2a09cf07a9983abf1ce27e825e81b0a498e9a18665a4a7601ef73237dace2e93d44d33a40cafac89d4c9c0ad7516681f02f1fbc6171ab6517c9be660426cc8f7eb291af23c1a21e7eeb6632596f0fc2f8b3d4ef9ef251a7093d607191801f90cfd2c098c8442a30f81f2ced952d32b78a871801f948d478045ec72fdeea8c9cb472276ee099bd002fd5aba57a544d4b28ecd05f2d566f0d059b9d81486504031ee7364601b1ad463d3e8baed46a815af0be8a67480b0dd72a43e448cc5784a6f09fd7c7bd408d1d0f4fcb209e3bc2f37f3d76c069a63811243916d69a21264f211fede76eeb3e1968a39c07f5e19786df6fcc865dd18bab01bc78917110f6c7993a026ce51d3080aa967f7f26e61ccf5b46de078326b20909ae0b2ae64e1dc13324cbc11eb8567009c0f167e25055726f81ada67635a831006bc35da8da2a1b7c590cfbcdde7f84c672c57fee464fbebcb55de3c8d88127044f5f39081e9d8c2c2deb3bdb6608be475107edb6dd1767eca3dba7ee85c3272c35d99ddee82665528fd0db831c8fc82a696272b55adea3c073f1f241d6f86d00fa0b3600cca8ffa3f45eb9c431f6b051cba708775bf9e92fd32d3b6c8e3c74158fff14c67cdbae7e9fee6e49a9a61b59b6ff1c6a11c4299a07de861bf29ea40b48873de746d884b0ef88167e82df4627f521f101ad00b131c60f0516d77ffa15463a8adac7104daacbbc0babcdc38f28881f85f90e4f00d32e787fc586d1cf02d903ac3a8dd91fd7681fb25a94513700626355e7f91eccbe980cd1b140d40c2cc889a91e0230caa8303d39422b782787ec3ec1ba2d32fdcbcd10c750f2e1591b3d32b2e47a7912bbda631feb372b108e965341ae2e48770cf29f725971a1bf2c8ad27282e1ed12251d89f1fb97bd4dff6f0695fd62758dbecf2095c8cf6eae05019f573a7dbf903b8011fa6f01ea6078bc5ebee32a616282f0c3e78f4155310529b4d0aa61a513cbf5e45dbd7fad11535575d89dd3138b8f225ca6292ea55f1cbe9a0c638860e53a6a0d4a15d61c1b8e2a0e29cac7070e545502f37c308ca90dd12db09d598b9be2ebefafa23ca61f6e7fce639b045006629d2a2cd88afd2017f7cc4e75cfdb8173712ec32ee075e57515db08e2305e52f189a404a67762d01fb04bbcbd2c1b94c3f58296b779aae445093d9c25f6af0f34809c176a46750e1e1f5e6f603193a67cc9dbd926dd923e8f0f9c46b89e95440f9595094931e16a286589603f1257af1cde950c03086627fc85bf9ebe921c7323b5ea791a22105805696b6ea7b1ca43ae02185ca721d263acfa5d5d864c1f47dac2fae11694886125a1217987fc27fb79aac341592058bd95dffa366b6fd40f7d8b98c6d6f271af043a3b6728c09d9be7d7fcf0bf207d13f4099eae74b3c22802637b6847d860ee26c5408b3f970874eeefadc70bec393dd2a73046b6e767f4dd10300f9fd6d9db27dac293c8d55e16be1f1ea6b92955d4d0eecc42d7e7ce9b63f4b45b00d7512508bef3cb14c93c83a1e424de62a5c6e1f380a5566e162b2b9531fa7d1b58f71709bf0f055745986dde0b9215adf20d51e89b1fa8436e20074e87cdebedc79f4c009e2d822e59b608ea9840f0ba80b5ec961851b8f3d6f6f67fb2fc93d6f59d0e130cd270aa0989f90a948ba3b3f06fbd320eb6afe53eca0dfcee6b005496721c0348bf9d0c118d553ff4ef5a1de2bc4d57bfa98b14beb3cb071c9640bcf12ad31ca539a519f8f09498012a6454682af84131b8f6f769146391738cf0ebaa33aa2947bdb70ec1a18df2bc679afb58d4a33a50b09e5a0fe87b0e33055ec795a98b1be71e92301ff00b71f8119ef8fdffd6bdc0896ac476b2ad6f48f8e476d0f469305601a7c63ca6b98c27120878dd7550a2ef77f380cf14ebd9052ee7f78e31261046c765626abc4b5f53ab81483cbccbe7ba6e69a9717b748e7a18f71644b8cf0ffa4b1bdbb55644015d1d24a481854750960c818f14d8f868f21b461c75b36c00170089c0c55e7464d0567cf965735c1730ac3aa82e8b059b30cf66da7204b707a751f269232470132d6e68d7758e3e72dba66123fd49f9522dcc2f2d612bee2b2b172efd719d77500ab08af2bd21f6d476b70fef802c159b6f85a8abac47f82ba26b718aad4c9a82a248b36aada570e949063d84017527631e6d43d5beafc322efad863c710fdfdc904feacf67d50b789952fb9d7269e8c46d673fda1e2c46135064a64d58a4e0c7d2a549c2216a10468667fd821d7766df655440f5ba3e2307fed2f974e863e1b7de4d9ca5fc5dd44f2c7e7a9ae58a5283f8fcf1f0ca74b614202d04f5fbd8e309d372759e20ff1399ef5fae785b9d064337351bc8ea1743010093b9ce0e18c87e06a2b7383f4fb7f605f871c3009b11f3a88b5b1d8bfb030cf97918674bc78682c41676515850f70339694550fddd499f4d0c9ce43ae44e0c3ee41538b31e973090eee6a3eb118314c0833564a3b8840d08c57f007e5e721e35882b8af07ca1206bf878c899769f0513af1fb131b65b6c7f8628747cf4e222ca1e01f78dcaaa8476e33d8eb908f4edf0cab6cb174cedd87b58ec9d8a5fa52c013fb2e0de58f0fd901c6f7e29931ca7b2931b3ad4abbea13a6bda7f81ac464002f3057339d7d8227a73bf6e42747b86ddf7e31c1720caa06dd7fac915176ea425198cba9ca92bbbc9f023f6a9036c7cd006257ee47d4b5ffaf9b5edf374ce7429c4abe48dae0ecb8c7093e595ed8f4ea1a4f8bfeee67da160a026ec7720700c172addadfb07a414e4eca3988e8252a2e2edde10983cd4e5301c33e7dc9e4e0200f5901b324fe270b5228f66dbbb0df3ba22404611c6ee2e7c53aefb8bced4f20d770cd7df8d225765d39099591165b2183eb2c7c9a4d6e276f99703c81977b92409a00ed93a8565ccbfd3cf4a038474e6cd15fbd43f0f8958bbd3c64fc2878c24e3e4b4e0b5034f36f4af39076c094c5462ebe49ea721931d65f344045260be112b558f5ff442bb735f267ef5ed0c84772b00307830b8e813bbc3281857f1ef095f149350d364e91eabd90a474c03406db710223098ab3c9095c5351fad577527750160fc321964f98d9748b7b0086314b3f5aec1378b710d254b4ae93e045410e01b0071c76ceb82f64323d0a994db47bd46de83eb84a923475f04c50fe875153ea87e72af15dfb3538026c4d2b674a81f2282f44bc4738a0f072fdfcb94152226ee957e73ee240467414206b815485b898959ca9b4f4c2827c2ca4b1450ca0dec3af1410829be33bb14a546bfeed7b2be8768f293b823e9afe854f150e7f728ebdba0bfbe5c60de78f77b5e37c164ff2cae7c75013255a280465fb7164f782b95cd484701695b619202ab4c18fa5df277bb46dea8872713f09ce0c05f958828c6b3d6f92d0ad53d4b633eaa5669b168e1b91364173d499a04b838101483561ba3c19d17e558cef4f833f606bcb67df6e904f77d67daa63d3c3a37f872ce1d056b5696edfcaae3a0fa345bd2beeab214d89ff4f24cce08629904f27e43ecc511ecf00058429281423c1a43b119fe62cc81e7769c139f4ce27499d47fb615f50f47609d8d13f1365fa5c5131bec906c1fee330a1eba6b8bd91e63948687d7d508ba790d8829d63043436ada295fadc006c8512a6d158e6756768c556b8dde1e1ceda645db255992aec5e67e283a3fbda6d05665cf2ec41a3dda88dd3177991e26713745740ebb8d7d0ea03be361bb08b60ba04d05a96bff50d9bd73a2a1d5740d229df9406a4fad7923262d8f353e1d8344d5d92e625a6120944e6b27c38d530136f935cb7bb26a66a7eb6791af77a471a96cabb55c2b948e1cf6a6a39d6f94259356e5df95c1d3a35a197703533e45f5328d771a1385ff6454ddf7f84db5440b0df1f22432ce1272ddc2e5a54a3895920c47ff6fbaf436155adb4d30cce761291524f25d4b346105cc4583be89a615b675b28df5adf45de12737b7184500f000da3bda5728cc19d4d0e62d6ab03a2e950b7a66994241a947139c1ad4fe80b71eea7b24265ac841e6b32bdf6b95e178fa145e6048fd9e779e7b39f20d76d82a165c621ee6cda00ad1abc1fe3a7ec8b324dfad773f3781816490a7a0acf09a5124f7135f59488da96a8cf0df4a0d32afe83f2dfda488573c99b51050b443c54d1d61e2f456ab6bf83227efe4c28fe9e314628a7d225ddde504aa19a90309d078083ccd667bce690660b499be55b00f150ead16279c2fc786821dc9e114440de614f8511b09a624d26b3c19f8be10b143a107ceeb0ba232b9fb4ee2fd3d9e8bdf2c146cf468f36df8d1a39cc1d5b5fd36efa92c9e3cd46097c02225ea66a0e3a718018b699fe8b65d7e3a947131aca46d7717575bb342ebcef7f23d1a7116eaf4010363565da7e468fc7801f2ad9778b5effc4f31f9ecd080e4cf02417e0244a319ee5cf51d96d9162e6f581fd81fae67519e975611ee97dda9fc5e872133b2ac17d3dedcfdc4bdc4c59e5a2a88d851c1914caa54940d00f45e2f6f9f9d053e112c391b07ed6000b211885103d088f18ab8088628b0d8c95afa21a9c5c0f8c7b0114886b5f7a95adfe0c69309b1dc47a210896d9e795305887ee77a388227f2430e1d31cf1795db085ad51918ea1c22588fd812c25e58e819cc7019dd98a2f2f419ee7e74fdd868c7aca1d6859978305959f062283b7b7664089a09e104d0aa741f1e5621ced998f27f1daa5328420c0e248079b256174eaf62dfe0aa7584af2a0363661a1900441866a1d592e409136c40153ad1a42f733ef94e7ae44a12456226143b8982dfdc13d76e23c9bc15c8f993dc31b4691fd3e87cb726fe07466a00059945094fe62ed6ce1b107b0d493fc1a613c05c811ce37b303f33b2524b3428147aaa76c43b58ee3fe6142c1bf5e213ca91b8a48798656709100b34dd594c7c13724e0d6c2fb40fb8a6751bcca4ec8874b55ddd2014c28037fc5617e861acc00ffcbf79645a6bceb472686e79784ebd0dbae7a84ddf7fc89ce1a6cd92f552c92e3f4499dab1945fa8d6068a9effc6714b6703414abdb31c203d66e9de1a78c127e0af7363c6feebd2439c641487224a793724e2b4ea6b3d1c1eec04ec2c83e72471b0679708f9df473c52c8996127974db6fc4dc567ecce145c07031da695f81e63f6d63323b106bcff2c7ebb354bdade701b110885daa50105dcfd20ab42942068deaa05f23cf027199ac718c9266db4c5d2f4f6a90e735036831a2fc26e3e06b6deac797439b1a12f2d9541955e45054bbf088128a7df24b6d49c2e70a06f1b801d8a84dd019695d92441333c32d1a2cb9e24b7bb74e1137c14ab6b8847c709307b9671f1aa16822405c34bfe2ebf040deeefd421d2740a53749f8c8db6052681e343bd619cc53830d0a97e57d73a2dcb9b16ef0c213fa6d09c7e09dc589e2036f39ea7238ec69a8f4b4169cd9348aca3e959b87320466717fe0d39d6c2761fb8bcedfb235e5c2e941e346ab3ead2de3e8a1a0be642db17d620c43bc7bdd1003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000002e118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000002e0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000002e0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000002e0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000002e29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000002e141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000002e25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000002e12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000002e2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000002e189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000002e1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000002e05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000002e05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000002e14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000002e03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000002e2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000002e1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000002e1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000002e14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000002e2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000002e305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000002e280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000002e223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000002e17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000002e08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000002e2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000002e0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000002e0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000002e172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000002e0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000002e05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000002e137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000002e2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000002e2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000002e2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000002e18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000002e0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000002e204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000002e0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000002e1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000002e28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000002e1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000002e21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000002e0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000002e0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000002e107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000002e2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000002e09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000002e24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000002e03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000002e1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000002e205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000002e25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000002e283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000002e21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000002e094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000002e0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000002e1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000002e2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000002e1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000002e1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000002e304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cf90dd448b939cdf882c21e276a489bb79c220ed8d6ec4e731a32bbd0a9ff162b7d80501768498a63ece1bae374ea791911fc3f3d65c48f5b4915fc072e1db7ecae2cea057caa01e3aa3ce45628db1dbe7e072b66fd019e717bb9cfe21cca10fd57e5a70c99da18468f8b59cb3e64eac848380a50238f13e42789e9cd6155c69f127cab806832de464081567757995b865695a063497a0c1ec1c808d37bd49fa3b9eef041fec6273dcaadd23b61a51a337915fed9c74ee5ea5204a178daaa20b9bd777f0745f770d1e0c96c565b019711d191ee0e0c17f076fff9c0f17bf03ec2851d52e3c9a8a87ab6279548eb2d7cd6db145f68207c7b2690625557ef913ea47fb4ca3080d6795d70d710e14db6dee7959c21a00ce5973b87b95ab06eb0caf8b6515811f9705c8d774a5be2c6b58d40d09b319aad7baefe8bad433f863a71f0f52ed15394ef39c32eab483b294661de580e45f5d00510e7cca5b5e4ab78994d85ec1cdc2f54af7f5354002b7c55976174c71213d08bead0fc23460a869dc977924b7f68e06a8ed5ccdbecfc2ea178b28d145188462a2df96ae4d12dd43f53fa8790f92dd4db225241d03daa0676c22d32bddfd117718a9355333c232ef4c90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f3384a0abf631104b7e7307b76a92c132f174dbf3e69d0b90716a728cc4615725798b5f3713bd862abbdbdd717f15f619916d82908f9d3d2932c73e5929e48ee7559f6eaa281a4f3994bb3938b18ec02606f2423524522545be3f41aad33cc8217752bff761df95d041fd376c46b2ec3bdc6380ffea37a33533a175bc7c7c02ca57e2efc26e65d187fd60d25dd9421e392ed8fff922864357bd79ca532df944ed7592c28a907a7fcf1bac50a04725a0d1b0e7f0fadf744e25940aedecc23aeeefb17378b5932afcb7ee1bcdcd24730e3736e4c5dd2db356c0d823471fca1ed124efdc0757361ff42196b32e19e86248c176c041e9f0aa5f2695c41163b5314429be971e5c70140afccdfaa1597f0743cbb05ddca07c76a68b9f5b266973ff0f0e8966b73476b1fe8f16f3154fcc6d284fe793e9cf558a33febdba203fddd7070f319795552cbac54f1b9fd38926cda4b8b5e0c2acbef3164496444db083c0458d88b55dc25ef059f10f6b1e1cb18a579f7435141d26f93772f1257f8f83c33267d1e7abcd410790518d39dfb9f518604dad633c65310b2a75a18a0fd567a2767bad93810f5b13c92ee6329603d889556b8c624bba67b4abc19afb383fed5b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b4b51e2592569a5db6ced353688df564215abd49ccf55a8879dc56e416ed18edc7b8326461addd9c4fee64c49a827f5497c383437508f16a62e1c9caf29953f708b7228ed6a220fb6b4743f40491c523ee8b4cd4d87d70c805cb4f9e99fbfc736fbf9a4b02e2e756e2c4f80286cfe36e22b3bf76003db92b8eb8ce177a735c4ef2921402920c520acca8fad414ab1b18b7fca402a76510a2c500293f7dd11240ca525375eb7f8ae9cff05dfc0758a120d5b00f2f318eaf5890dbb6e1c57bfef4f6ccd0ff919649179583b51c83f95cadd6f506fb9296f1c286351a5110701e8483f0fe1c7aa0b8b9691a1bf525e0459b13c9f5e836bde116f8f84ddedf983b264e136202acade3d44c9e432f36fb53229842c88698d5f099fa0fb8d54aac27d30949a5a783053c8bcebe83be9474ee5b87e9085e1ed4f6d4dac5d6f552d6b20e6075db37503d83c3834556ef588d67519506e98466dd2307b4b54f5c3d9f1baf03ee1e654e24727779270e84ed39fa624181e97ef784ea93452afacc3f6a8a56fe51915adc0506a34a4d0097a7b42db39c34eb9ce673c5b061b8ee13376ee848b645b824bb4699e30d77144aca3a2404a9c0aaacdb1ef3d53d2f5f4478c8aa0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af3a5d92edcc0ee139011c25de95e906d60c396495c042b75bed70a462a1e8d9ca0e6138808f8e15b734fdefbf021bc824741cf15cf6ceea5c1803582dea3744f5408d25d534ed6ab2a0a434612c6df60acfa3e53e28b262bd5999f8bd9439040dca442d6ec133590c986306ec87ad6c4a2beda1c2be313d98846b8fb8a071513f7bd0159b939ccb33f2b27bb8cacc1b6c368d831f29a8d2a2b4397e45acede5991023358adbf2ebdb3b2b64a9293e506f86850a6bff948448d913e248677a7c00fc062835bd7f518af9bebe571cba5d7c1046a3fd490193c100bfc16ba1663204160cb9d8e3d1c5ea4283358fae3e0ebe4a5434694ac2de62f7d417fed9abcaef5f1945f7055b8b0750b4d5d89f7eb0a7309e8110b87de3c47e8d06c69ece33784295ffc77ba5f5e8191e8fc0065982c2172f50a6266319ec7f8fcb65270650bbf8c8b984033062114bd19c50c4b52f5d711e45018054ee75e85e44a85dd81fbf544744a2d2bd72321ea64c17f93b5019a58657d8659c1c649c77a357a7bddef7971a86aad3d8e9989835806db4f2f210e69ab32a767b4b6af2d4a659dc306b035f062801f2a7fc2f8302bc967ef6b1c7e6c1ee8fa83a40ddf630de0d26e06a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007563dfdb04ac7a33c9c0fead28b30f8060d94a4caf49b6bd75c70348b2a2c7bd28886111d3c3ff739de40dbcdf4cfcc60401324cccdf690cf265e4be1552080d3eeee2eddbe9d744c76fc8cac5a4f479aee8edfa88323e1ff4f02f89812c94d9ad35746229d9b3d5ed1be6f17c17ded0f59ac15616de214499b131c25dc735817cee262524d54daf338ffecfbb2d72a231d12dbd6e7813f92722727051247af749add8dfd7b8789dfdd93228d2c434e7770c3e323361aac8a6887e5673dde1f8286fda00d3be668f229b279ee400f627c77ee930c3ef1d442485e364df3fc9b0386d0d88905d62e22e8206c77dddc6c37fcea6e2504e542d0c5545a33ba7cf2daafd336c0b5c7243fc382555fa202ccd7bfd99a945a5ee59a1cd8486e4e65ddce98e93a2312211247e7c239bec9654cbebc383d7e2a9f481752fa5b2799c52b42b89f9ed0a129bac89e0eb823b65231811c1be4755f16089bbf4791371ca588e98c08c710642b1dbbd3c5ed3feff0f91c04bb4b11376a426d5d9b7d3762ef52b359f0ad1ea19f94a5e34328cad852ab194e73bb791a49e43ecd7c3ad20adb7b6e74d5b291e30259282af780ebc5a32cf6c5082c2d5586c25a033fcf76e91c2c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008be5a81eb87b1a2fb71829c98b1c6b937754accdc3d56517fbd6904f4875b9556872c7b4fc1efa9ed2cd2be3b7688ad25115e39b83f8121750cad777bd5ecb809412a31e3baf3bf4efd271c50f6405d71d4795c3c340bfd465402154bb6f2d30c00289feafc177b2b607807d4477ad012f4548bce922a3867cbbf01892fb9a1916c85e21cc02c62e601ea09c390bfa7516c897fb7710f8915f4b6b750df78a0ba06d389363b7df6df5c21f1cc20ad153ce9d99049bd26f431d51eb1d1c529e601e054f8e0861a7077ac399b290c9d35838146fec6eb44ae72f53ada3298b13eaf091661730156c5253a340b1f877a991a94865bb05b740518fb79a9f23666a6992d011cddf75050a7f878b3a210063fe32cee26fe1569bd4ff9b5977448744238075bfd5669cd36739997de2e452440e775cf63af24972eb9252e987a7612bcc395690fbc6f53c5b5b12638f967c3be2bdc0c3ea4b9c8d37041c5d7eccf9c94ecaca4bad77687b360a1edac8db7d3b03e3830bed903e1cabba0892c00292d8670ae7324f38428948a18da4ed5f5d81406361567a838aff58c545a21e26ec6c50718f4b2ede7d4e614ef39014747cf6729befa210970754d77bfc116e2795a5480000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000194af5e9240c64000e394f60b1bb5844c9597af7a6881e2f67c89522490b2d31fc46cd50ea2b09adc646bd176622f314d81e4771de401fadc4d0eb22e80f134dd0753434e90948cec4e0fb4225cb3839501fe149ed5dbec13a45a66431d9d07185df850ba497fef51acd6194e330e98c1e1d4a136c2a1a70df5211700a232f55fa4ee1e4a86c0c227fbb592d67668d737589a0d88653ea2fecd0f82bea13714d4cd12172c4f282e6eb6fee322bca9a5354beab22cf2278d660ff372b6601fa278fecd4816bd5e2e00cd125590e7d5458413e4c84a2a2a9b52cc5f9316ccb109cad3d9b106cd74fb4feb7af3d8292322a0bc33e3baad25feae7fecd45d209add51ca8f1ee4c1bcbb79d7b082884a31c53a50f4eba72ec3c427821537df48d78e7977cb378a40e8ee5e83511e107950f549accf9c4b265ea400d05f86c606605e009161360b7ac250f7cbc378e85cd9fc3d593655d7593615f8fe95fc2b680bd08e7afea9460003ce668ccb893bb1491c585b446c21297ca32530a0028f614183bdc5529ee907978267c42d3a1f49046800c0eb51255ce0000b4e7be623a332e3293a30d8343ff5461ed678004ca043540e5a8737a9e61db91ce6d450d65dc1f8000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc6590e98699c3aa9725d8faf85b9271845e37ef429ea44e91a705b6abf6cf729701d39e66e27b2ec862193e29b252052e0c3421ebabad743077b6d1e777669edd158b0e9019c04648fc82d9fbde1cf5ccf9a0e2f8e186ba15d6cc1c0eb67f527234733037fa4fbac431ec3e50c117db3df4699da11ddf1ee0d72133e8313343d346f9eac07237dc977ca544ea4c36c80888b7e9d2039e1c544926144bf346741b77319c24ce4b05d3af90117c242c9586d4ba86551f11f3c968fccbfc9d8c10d0b7a4648581f304145d5ff9106dbbdf7f6e390fde348e0fed8d3098cbd402704a12466d9ab739df6b3deb4f4ac467d51478ac9d7208e32a25090c996273494e03b20680935557307c9b1f277cb1bc1a313a2604d4920f3e944786603869008af63046956306943402db54ddac405e80632bbb12d3119ecce88c8a48ea37f37756dd50d85b1c5b5f7bd9f5f542fc0c4a7b8e047f6ad68d26c0663e9d2f978a262dde40d08fdd71ab32a847142aaba15cc5754595bff338f7c9b8831764cc6d1489ecebc543b392005ae7f0eb4a5313089d55190bfa6d4e1f8d1b5d0a0732abf4ac85bd22231714f3a0fccc1fa9e960fd2f12dce32a213821a07df2dacfeae9400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ecea2f1c884093448544719c2403e90ae58cb7c5d74d1b1c26dd4b5090b036477a01da3809841f2fca18b6c678cec2f08741b4cfd5196b38dac505b844c8691f5d0059e87a5e9701468e2d6067d04b67fe91273be154beebbe2c98fc4e1d862b737fb4ea8d3e2cc10f14a56be6885515f57f0667ce96ad5618705ae3656a466ab99a4dd8b2d413ce9a101dbe5641fca1a62f71e166531bcfaca74b405960724648f7db189344cd20eeb0c634c91a79d2fcfd4293c843056d9a7fa33ed35b59d6d118e4c1522993efdf750efd8cd0aaf6dd7e29ac9e9cf255435ddadbce493cd6bd648a84fb223b7699440b5a727c213c98f28de5871d69615e843de75969c6cf349f4d9c410bc027e589beae0d93830522f4d7411b34cb839c8f876dbabb78b60227ec7882350280454c7fd01fc1f441d11e1c9856fc46a8a2d2e2d2aa529cafe3fb3e06a7117eb8c93be9ca701218ce2f9eeab95876681ca6d84235e0979695d38027406241fa33b0f0afb6189314a5c7f33f14816649b3ae93719373427ac40ce7b7b6f72667a189692df927709fd1311ae34640fa4aa9cd4a33aa4fd3c05935d596f9f3bb7ee0924b39c50a439a7a66c2e89e1e7d4a91f533639fc0d98d70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000201b95e06b8d54c79d281a3d5c4578c55a0437f309b3d7837d3f6ab8719d5e51cc3aefd703cabe6051289eadc665f878c46bb2631322ded596bdef182c17f0f47434689f4830dc2799626062f3fc825fd33986fc4c1ff71aac9c2ccccebb0ebe85335ccc2c7d07d6c1fb75f01112ec3dcfdd91ace402b91fbd3df7dd3914f8895454481b053618a8dbef60309d250506e5a741f1adc908a362be16173604c51c944499fb1baa4b451ca6d4db9f4a0c3a2f648fd4374e7604c22711a97fb3657a50ce2f4a9be0464af4f9140ddfb8a910251d140bd049a51f414f208453b9875d31872dcce9f3f5518c1377f3666bd195003a87fc50e3ace15e00be81c4a73bc65439d38b70f563ce93eae4842bf612b544130e7a6f608f709c23879cde7b469dcf37897b373006d759dee62bef2711e26628b4b643e9f485d62193a5983773e66f7b3b9a190c2eee8e7b315c483727de7931aa3c42a38daf918073f6ed9f75b84e894278c8fd3d0f5ada12459f46018e33a6326a088d27cb257ec3c1a9fbceded89e2627ea3b547d0e06fdfd8bf7e37110dc0679ad38c353fb8a40e87ab7095ef827ca07495f016af7d96e5a0943e8e52587663f2fa65d3c3b50abd6b5e46c9200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c056aa6a5b2b91cfd6e32f0253705fbad413f264845638f9cf228bffc21dae77235de94fef9956e35ab955f11b0a867e0ce9d1c47fdd34f27e1ccf864ccd6adb97416d1f54c2dfdf86facf4d8c280b036217b3b45b204aa03652898040ac843913eff44bef89d1caeef15c1acd2d2e2a14ef48d798b06868e618b0dcb99a8639445277dae057425ee8af1f747aa16ee0115deaa8092d926d110a99898a1de089866010c0f4993e8c326053a77a7f6396a9d34b69300997eb66c35d282a4b8c9477bbf5c137a7e10a9115d6847b4a62c37c3471a93a3839e203e0266107b12233839d348a58043ce8838d84be5647d69fcdbf5656e67383c5205fcb91a931cf5acb056549f23e3dc2d1fd2447f9a561400c16eb7f12811c74d2be392e24454be8be4c267bccbedc5ea567a363f66cc04aea89378ad4ddbedfcd56d454a6c69779fb6c925f2f5e2e4cc1b5d25f36da3dc15f286d882f9bd4fd790809979f62c43ed9918d1a3a09208c9054d4d6a2c4ee3908d0bed962bf25124d4378775c07121ba466a4152b30c641996c8c330bcf776bf4a3f3548840799a40156a99b9000e886f6f2b8c698f4d246954edbc48ff56e413937783d64ccadd0b041a018b3f15000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ef0306913f9302df0c07cf0ca4b40910884a6a617ac8c2feb5e8ae4d1bd67af93722073cdb40f7132c346d66ea66ea59fee87b3a8f6196dce9edeb544aad1c6c25875afa15b15c247bf6a75eaaa020ba568727382d25ebb6dc53c28f85e2976f0b12bd0083f608a0efbb6f6561b3f3d04d47e64cf96ef02e3ef4ae4fa77e3fc0be3e6d79daf34038f20b962f28b86194d06f62a89ea31e708a4f91cb6b182ffbb07be0d857995d9b075d659ec64d40fc3f31d7cea0b87e7168fec5e20a9b3a9e65430b921ee49610617a64549d449bdb053586521564fc2f78f86d372665b5f89b1badd10392c4d4dcbba55b3e52d64a030ba4103bec992023e66ac0230fa328c747dbdda795ec791526ed97d3f0efb93265c8dccdfe8106eb6aa175f2ec73e2f044670b9c43befa9cf6c5e25f7069af48e81bc99ae66c83aeb7f6208fa8a2c856247e018c389f850f316012878afeeb92738bd9a3d4c461dda56fc94be365e25fc4c40c9de6e4269111d4b1f6dfd17752b4e85830c58bbf9f461d05df00793676af061f2d9035a03ea06bdaf178dd0ef0fa5a315559d931e9feea5946357fdfbeaf2b50a86cda2cdda01bd1168edb43e5f6ed3a5213f3edb8c2ac2fa1c6cce000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082e3718980dde09cb67bf49ca385846283d487e0f30fa7ca54055d55d613fd6e02977e10268246cc68d29c46509f7e20bf6f7c677b9cb987df11599cf7cf40344bd4674bb115f376529826d9b8e677971069ac3dc27d9f9f40b82c6eca511986dea71aa57669eace5765ba61140b846f6e750dc8ed6cee0fcb25d900684c9bdf23338bb26b62ce079d59759c499f049d5a812a78f545f17406353edce89a8f1506f66d1c549ab1538642ea5be5aadbb5748683e698428769ccce826c40c635bef558de644a1eb498723dfc35cc1ea6bbe8e2c13a806974a46f61a582a7e7b12f2b4b1da08bf578d7ef42520ccd7c97850b6ec882a7b35d79f218d7eee032abb2f7c1bd3c2a2c56fc94576feb5dcaef52d71facf0d3c7086c27dbcfc4af6ca0cbc1c05d7eb102005f5609e19dcda4de553452a94d2f97d07c4c71503919aca4686f665fe8adcde6d9fabfab63473f45172883dc849147bb9e48360b77b0121c83dd562851d1b671a65bf0506e863800426c7781211041b1225639fef9f2a0c4e350baaeaf5f7a55b08a62391d440bf27fe105fbba63668b0f334e2a58e3a395ed520acfbab12f9f144300c4b91a509b494075d44208239c393dfb636f5890cd4900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e53de1ecc656709a2c3d1b3ab07a75ad6fb07912ba1a1d95810e3378b110947463d3e7619256e0fdcc452b82980a28bf7aa568e88adbdc5700f6b1535d1579c42361099ad44cb66465341806ecdf36317de18a606c7da3bab5a24fabe4616336ff58155021deb05a85cdf424ebca79ef828fa020ac3ff633ded605d3c37c35393d017ec9c9c63ea3b304308113fd2b59d7d77eea76dcd7594c89fb6ad24e0bd881e95d8548eb4685071679693abc6930e8c794d94ccb8e1e1786eea31933b3c75814cefe1ea6557d3b314553d351c02ed685b3bc39adba6b63fb3079f0181b210ea4012332bfe699dd38c73514dedd11a4e3a36bb696c5a0b1842ccc28d26482ef9f25aaaf133a98ca5a33aa1e4ec6e54535e364b2d00add6fe3a3d6f9cf4a7b56c8a465711634ba447430fa7847e42a43d80c68db7c823894dedef8a49f127dbf1537e8649c995c9766f654784f9c3bb0ef58c0256381f23353e9b1c5eb4ec33dfc7e35b9a9cb4a032110d82fa5e1ec7309e7c473f5fbd08e4b34ce73fdee6cfc7e0959aeea98287d6aa7ebecdb9b7f2ed4eb3a55640857a8e77b4354d8d404c30c0f5a7eedbedaf358b0b15aeedaf873e7feb661c54c2c73caa1e7523b1e4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004af9ce4f8df621a7a59b33bdc064c45b622f625e812ca90963dd2bf06322151ee62e4b9cab1270b29ec6b4bfa9970811be7f6835145d9a626569018add22c6974cb93be492db79d872332b2bf72dba0c0078150418f8e253e140fc7f26210299b5c9c551355023bd013ca3c60b78a878c12c7fc5d7b7264fa7c39e67143d4101edeba051658e250e5c65b5e37db7b41a73c7396cae7aece1c5047a405bd240c7bb8160f215bfaa2a060e0692f25c993ec8d17de52b5ab31081384f7df68f3d4a0773b1d9206bf21e2a509d0946afabc39592d4df8f12e76f2030571059d78d1c5bbdfa206a503b0d6ae3c77486a4591726aa8e27296e7debb128bdbca42de7169971feff32d5998010a2be0597249262804dfce8283b6a54df5dae5457c3f37a32f9fb262e57ef253ad4d9680fb9cf021b7e8a4ccce18dfdd4496081d5525c25a1401e5594c0f30141f3d879b573ab458aaffc69f744911a5e88dca010a22a1e189f564bc59a2bfaab85af26b8d3543e151154c3e0e09845d6840d4334e09896fdb796cf2bb573a87cc37dc0da1ec4e4ef4f6d66fbc28128c6a20d1be7005d8a537d8a02ad5d6d7b89c2886058d0d067a78a67bd0dd60937c25b7beb4f8047d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16f2fd804b69f44fdbbf2af40b22c8bb02e6eb39593c47270b9cf753dc27851dbdd0c819448c3966c3705da6edb04224eb9f2ab2e47d107ad3de6f309b395f5ceaf23acb7b29bcbb62497c03946b1aaddc2aaaa13e94affa17a58d64cc425cf532b01617a550ec373dde0b4ecc4d391e1ca73d9754e2c5515ec8d6bb0ded79609f194aef653bd5ce9c0d4dcabf6c2188597ca0173c1b9ca96271289a7e2c08f0ea0ca4f532771cac0937ea789efabfc59876af3112f8223b873114a844a113968aed7ac438d856224f53d81453d684b09ffb7ed5dabc7c0197c598c79d3c5d721cbb5202dbe0fd358d0afb8f7af348beac71fa0a38cc2ba68a62d7b69e6dbb1c16d8b35456d129d98e4d106fa80e7b3c05c3d530c9ce5922b2fa4a1f4c4a8ab151a5c8cea87413b26f3aa140e1a44a6aef61e56e793e560acbd26a85ef9a75900bc5f31e6a6a57566e4123a76d09d28e132c8586a0ef01acd1c891e95b0a644c217182d4b35c165c9092386d1dc974348be4de5905b376a0840913f9ce84306d3cfcac80abead6043de632ee5d737bd4091bbff3b4cf6208d10f0caa375632a91cda749877a0ea63396ffd5f444150bbd0af57aa33d1269061a7249e162428700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009655e18a57af1396a5e60a719a6b3f468dbeec56adcbe94b8433463c5130f8b6a25fb2880d24c9534b70f73f80d43ec199f73c36e7262a27b9bc855469e3553f12cea2a703b49e56f4388aaefdf9f89307d5d1fb348e57f9ad84c1fab0da4f41ab887f272e0a742f639706096f1f4b802768b5a64bb719c7bac2a5fda96eaee3b47ca12838a9a4899df82b07c3787440bd9939595e3d2743ab9a41da564944d75700621bd038af6d68d20b1b1925754b080fd4736168e2a669965e8d555bfe28b30b5fa49f920a6df6dced4675583c6a9e69d6f7b9e1b7dfb5c02dfa8f8bb3d14e513dee9bb603b74be2b8c79fdec01ded1d0f26196629686cec17c1e106b9e55edec8bb214fef8aac6133a881ade187077b7cb5e035213c6a0b273080fe0189b0b9354581dc88e7992538ccbd2d986eca97e7352d28e0f69d1c88eedfc2d358b3f51772aa80375fd50584062bfb0180f475d96a7a155c0c9b1a1f4198db5169557df2d38ec6f33310aedcfe8a63e3d33a00941f0e500fc5abf8dc11c4d7112f6805bac6550e77892193e2c9fb9ac6db6f7a81d394e612890ef3bda102d6aacf676c5c8f0d306f558b4f274257a45839d1bcc38a4ee80e88d88881605accc87c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f9bd74a133f472a3c73bb2fd52d13b8b2d60c32b7ecd2a3ae8e10a140c4a63aab7dbdbfe93a9609137ecf0f699f3c9fe99a4f7177b952c725b5dda3b90e60801921b34282947eae87685c3e3624220410db5a31da38ee113766fc5ab3eae76dfd2b9a2e71fb1946c38e74bc5d0f72983ac32cb609ea08cbeb0c0b90f6bfafe6f7c6fe70a10090bad16c402f27660f4c31e34b7fadd0300efe64c0a2f1a741527dade095ef892424740fb2e180298d81110380bd8210891f54b39c658d6b6430ff053244f5c593154b2216b5140586114848cbd8ebdc300b352717048c12baa972ccbf3d18d13e29f001f62858bce1c30c0c498da8294f8e8b7c80226264ce5f1ecd90695154ae43233327e9e7413f7723cda381fd6878bfd02b30402b95da378e4179823ff59c76990efac213ff810c3d9f0329efe7ceccf3a1ece016677243073cf226e929942ce17d2da6ec5cd2340b12c7da33c3249cba25463d76946f8aebd20c0dc1bf995ad26d81d9ddc4fc36f4327120b614481f51a01f0b1cbf665946eb30bd78fdc54885cd53e082181193ca7cc56dc9848bd50449e1b0f18aaac3451e7df9fba820c784ac34d14358ddd010cc24a8b5b8cf1b484a0254bf6389e0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086d0ec3583699f95c6580cdf6359258b8ffceab4ca71acf25d1b3ee7b7524dfd1c4ff572a76dd62169eb9cf4a62163bb706e710c27e078f6f057fb1a79c98f1bbe384f648c74fe428785bd5ad2c5f9b5f6e0acbe54e3c5f9bff8f6e93da6abbee3669be938857b09db376b4019915fffc9a529c448ebe05b6ba3f70333e346b0fbdd879798b4377e80046a74dc2c631fbb65dbc32842b2a3903278aa54d6be10ca61a0425a8791e7acabf48e830e77655c350ae5724c68937d0118ad360ca88e6a1ab0c863836ccda090639eff4fced55c71a7381ef29e44f6bf9ffda5afb3d70628ee8510b4595f681ffd8f27a28898bbdbd108c7dd31d263f5069e797001fb6eac0f8a55978ae98e0c54fdb2c47afb79f7c6c1591cbe277740602eaa2843e8da989ae889a3e0907e627a680e6849df989850c631477731abb8b2fc6b2f9ee57573eece8e282cb6ef4a1eec97d4d138b5a3fc9519fedbad138cbcb2c87adb03af3650b065a5967aa55ac3e7f1cf15e1a883f73bb4dc5f4afb09b22aa081c01207ed8afe5bb96e5bcb10a342e30b8c99bc1649e70af475812c0b1b32c060971cab0fd0a1763cfd2bc44a24460548cf117583b32fffe373fa391c02b7b99bd0180000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab6e8dabe427931fce2792c0133719f1828306f985a428ed462ac7ef5ee7da472a3697003466323e25b3f3f1f411b4d9942c4b67ef4332a4aa2b422b2548654eb33ec92a541e74fa75acc123cd9db9ec3d601d6c286d4eda26480d71a842d50f94d17d0a1b5cf9e2b8661e5b170f52688a0fb59162d8e4dbfdbf9c2abf21e1fb2bffa74afbfccb281791284f903f77a3195860413cebec313032f7133a2f6ab7d5b1fd29b86db470796dc55362b74c8b3a09dde6f6933c0b30dfaf53321cf468e7d7c6a9f3445ec22e98da7689aa80bc89b38f1a74f6b89ed35dc8b679d98b785a3b27817fed3d58a214be86bda876b3054a00155bf9181db6745f38a4cbf0f920fa253122235fe565e2d1a5f63982cc39bcff3b390196e68244792413f33259b434399c4c61b9dd5453b76761878049ae838bbba629b564ebef421649cf2a332fc1fb9f2c3968257225d3d62b20fa7aecf0144f5d7ced485374ac97cbbbf710c7098aed40f3cdf25a4f4d86ecdd13a204b7eb83970b09f531b5e064718db9c779ed45b5c1ec251f1f2e2737056e072917f655ea533451bf20e88b4082ed0ebbbbd6da70a2782dd25961449e53d9cdc72684e4156a59d876b9e6e43cc903cabf0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000236049a24540fb31d97715b937060c19b830d1a4c8c103d96acd671b0f42f06358ed3e54925b112012e014742fb39bf8fd5c18b27d86479f09d92686a48e3e2a6adec0f2b4b972f6b5fdd3fc20f2dce74318a63557bdd3acecfe557c3aac9f93bf68d2e7bc58f2dd21e4a039474b2164375ad711e954d1dab2d2480d3475146e4b9d0b45a26ffa751065fe80f71d9afaa39c878f2a378709538f0008057f54701929c148430b91072b9e8cc8eeeeef4a99cf64e0a542a1c40cb2f47957f65e17642f35bcd8d8956e426e93adb65d7681cb7029d8ac70c193d3b9ebae783a6ca1bb5ffd8e58d5a47ae95b40a8d2aabbd40c2e4b8fee8611a931e57b5f22d58321f18b19bfa5f836f973f76436b580fa541c983598858ace7b876ad71da290bafd38bf66db96d1e7c5440c08885b0bf390ef627848da296a0ec7f553184eddbfd6bb1bef92da99236edda5ed9fac6a8f39f3b3247e8b5756cc3c2725fe0e4ab55d4f3f6f121673c20ea991bc0868ccb487f474c4dc4682c5abe2512cf7e75d18783135def9aa28a6afa838f17ea42264802c12be943b6ce4da8441c2dea3700fe07b2b1d959c2a4050c9fe15b5f6a54541578183016a8b373185512dbf18a2e86b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c9e3c060d7daece8295d19d6618c1561f5199083a90b5ed9dd84ceeda319a7b8672c71c869e4e13fa3d40fb87870ffd9f23e834c3f97c46ea865279b41f84183e0b3a03bc4b9c341dab0ab0f098380896fe612afb54694c6cd7700d92d7c26b52d83eabee5cdff593fc9500841d580dc429c03b9a777388f663da83c6968ce5f26442ca695b8b494dd33aa6889743d46b0f40605faba96403adbcee2ffbd4e6db3368081bb38571e4e3f3c7357d9e4e04e1f5792378fa8aef4f9edf6e62f37d927a3e0e0fb26fd68025fc64f596c969768a6fdc3138d5f05946a83b73cf6ed0940f5014a28d30f5eecc857032c9cf46a8b73f60109c7f398f53d1720971d70653f3f635ad41c981d0bab9803906e18cd723de9595843061bbcfb7d91a10cac6d4e49f1b8e1b4b38026c25eff912259b8a294a48c776a605b3c7755a74ef9ebac3ceda3abcbb26fab7e8332fe47d1348d98591390722b8223f2db201093d0c4341b8c2471884c429737977fe759b39878c2384d135b5cec97f5d5e13c0e51269b284f8e25af972857637d26b9dd9fb95ab1fcf48f314902119414391e2795fbc48e007c2351d972c719d8b514aa6c03ec6b84051f89caef952c1abebe4013588000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019c3a7220caf818be8d029505c81db1ec2868225ffc4ff0288c762fe21b98696e1757004d27a64d5bbe0783bb4b149dc6072663782a170edb111e74676eab9d6fe644d5aa7516e5b658ea989d1caaca838c5d3f507f12a430c9326950a435676277b3fd2f5679fdbc491992c4e3e1b2966b41f01f847ae50d1822080aec8457dcfba9b27dfc359c588ec14e638df1b490cbf3d200a1c58df4513ea451350e8bf9585f54c187c90a6e10d8e2244e20a013cb41c18fb7de31381447a4e7f6aceb3529832ae82858afd0a6976203993d305585cf0138f562e36ab65a444dfe45eb3d92a913e430f5fc83a5d81a8c2252cbfc2dca17c66850eb352b070177c2181367c6cbd7f6176e173fca4b5687c9009d35a57cecf0e249b9876cfdee63e65bcc65541a850a14be07612944b1c2ee3e7fb85148739e9b50a2031b36d8bbeb753b5a17594f8112436ba32378c4bdb05aaef84713177cd12d1a1f98243fcfca114d5dd3263bc68e9af33e2f42d46eedc0aa83f68c321cf23f0f1e0fee1fe6adaf0d2765815304da007b91715715a9989e30d2f36824e1e9a5bed6b47e66c57392b1d38d57a3a887010192929e2af74518370c2a00854047f41f916f83e227518626300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f6a9a497f968338684833a1e5804dac48db4652f09ce1753b6f656992d78856fb60d0b67a5f4c3dc52226d3bf0afc4958619b4c895adc096f42c6474257786a905c864304775bf4e5ed406200aad4909c38ba442172e7dfdd94ed0bedcf6b34c36d0acdbe8fb999cbc24aa81124cefccb4771142351ff50198c1844ae52d22180b97307150a08ef38773f701e67c15506432f052fab5347c53a2c66bc0278fe1d097bce2981f40b1b57ddaad08e5e6da9338923440cff774ce4bc17b7037bae2049f4ba7efd8ba1c4b389734b9c6a41297be2903ae45deb804aaaceee85605ac6a8cb21c869c07f8d3f4c7777910332433889eca9ebb05294738cff3c4319d70f3f5b7ce458285868d13c2e91a98549d6ee411e4b7e7444c74159b586f6c98b92f51c5a4c40d4de210cbd21fceb7eb3c3c8934e8c8cafac32770da956040801ab700496466d63be8d2949adf8fefdae30374a395a5a313f763d60aa235628949362c4872dc9a65bcc83742427d53fe3ea9e24cb7b34abda3a3f006e5ed37bd1a41a4de79500f5dcac1a541687e2b707512758e39ea25aad11c9a3cc82d32d74259b924b683482b6e4702914a6719c26a9b6536e12f1bc5da8b0e5a870e72583000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025727491019500db149146ce3aaa4eb9f481691b1d7f60e5c70ea453256de400ca5cee2f783f9b59133bfe0057902e212457314d208896ce6547ac08d966429c4f1f0f80dfdd16e27a199b5e2ed2224fde642226986c01d7ee69b3fa9d36128cabe9c6f0c6e371c6b50453692d3286a166a8ecffd88e44b5f8e38249d6dc0cc56628a9bc260a7af45cbe5e68a88ab96421e961e3b39fbe71779c9273c2b05d807cb96519ff9e3b73f382116ddaad24e85f89e779284130d76433e33b45d382a2b60cac914af80ea9cb2e46518e0e61a02d3a4dd918d9181b9ad0ec78a27dc5752a9fa22f07edcfbbe33d4dda180e725e56c73da8adaade95b9c72b78072391b0a279ed2a71a7ccdab54c7338e2481475218d0449a9e991879433a5052b9a2550c418c7c39678702d74e6402bf6c4a55fbfdbee7ecef5ba037ed6a8ad555593e965315b52e48358a594578e54336f22fe92a25a6a29cd712a4133c7298c1960daa177e6d237dffec3e40de3c3a98762001b1e5b1b3492ec3db9e1c4e86b60b3f8e819e7ca134567345725ced2c212624bb29f4cb5dbfa212fce4c4b4b29299044bdac1eed63f13952ffe188e26e071c13580e168d4eaf9878cf0125e84227cf0d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aefcddb2684f5ecc5dab400b5e974580f99ea1ef28b6a30f7a00d89943522049307edd937e9b40f2c1f957f2552667c97db4f708172bdf80ddf6d29a3c276b5c9415f362337336870b18919e3bb720bde31bb48c4d9d8250c6dd91255b120c399b66bb3310bda8d689f6a42b2c2298f4be103d0b9723775a5ccbfb3ae51eab1ecfb85e38fbe796fa253e4b3ffedc8aed5310fd440d99a45741a9d42eaa6b905f118400a528ce1ee8ad9fc5c623fe37e100442ae5fa2c3349c52aa79fc30d9896d26317d29f50e3d6287822eec32bc4e2396cfa475b662fbd16f779dd61f7f1bd8703a0ecdb78de417328667dac312720a7f0bb951a780039189bd4d7ec0ba0b954dc6b1a7176eee9bfff2006fe054006ed6611722245e37815dd1287966b0ba6696bd22e03df926e569bf6b54bc1c492ade4733202ef2a7a4574fd17c561db060235490da60cb49962edebab3baccb8c269240e748af80f1cc5ba9d490992121b16e7b70e9ffd15f0f70f79ae819c700657548e1d9b33c92a8b49969c8f44be2ef1451c91944ed0f6434017ebf253f596b09ee7a4848b71fc80ecd73ce34860226234a8ab21ccb0988e2177aa3bc624d63e49c64652a5cb691baa39fecbef1680000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa7fa3ec152d370976d7a615756616772a77796a1d83c63603286c73c76428eb377834f93eeecc6dc33761b37b7970f50b7ffc7a18d2b47f953843a12a6dc15124f1a8847f4b5c98ed3ddf458cfd98dd80ae2aa0749c4aad450d78905adc954750aa98def0cc2471c5f363876edb2f151d84d9a1d090ef887e1873ca454f0c11984ae1d1e026f8013b0804ccbd477788a78c32b4bedb9e84cf8166f9631f0277c067699082ca80e04a3d31c3811f54b1cb2a144a057eada82dc8d92a4b8ba405b4dc7a1099313d0f1c516c3b5775f344656be87ad3457b25debc6f4619b69931a2da847074441a681fb0bdfb71d8e7f7d81bd75d82a13a4bcd3e6e45d1bc9eca9418e939d8c7da216ae87a4e335ce25b0ff5499a3170667754c8bc0f9bb0b478909fe81475c3b23e7ce3d54b73ad68d10a8d4f9e05f37901a9a6a25bce9af534012dcc7110bb485e6d519414256aa652c91f60d3415e651124a254c2b1d1ed4cd5f9a01862098fd387e08662fbdca72bdf2350632ead2f2ac961827e70333975cabe1ee0f6b9ba1f8e95b7b4e10db4d0f090cdc0b714dc2ad380a8cb03c24d916fd1f845769f19a3c43e2f038ce7b2e8b6d42b6c9200bb3632089a589330ffb40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000188ffdd4821040e3dc3bfaee010579b7e08a025182ed7944bce46ce238bcb5b9289ce9ad7cdb1426c2b324122dfabbff221add613546d8028d68adcf79c758a77fecd1ec046e763938cb34023c89c1d0564cab97c532cacd4fdaa06590420b7e127eb137c5408337f6945c22ab65d52686b570ec1885cd1c47cca44ac50a02e3d760f7d9d8bfe049ca27d43e3079d7ebee7d4a5d41719ab45398fe55439e4a66a542c85d586ef9366bc94a4b7ce15bfa14052aff625482d8545f41c86cbbec35a556d15f4f8142ea07ecb4082a66fef7b9a07164c6730f82ce8a3eefaa5cd364c6df00260e1c9e69e13cf29ebd778705517b5ac592f1f97c2195d065e1ede2b876a78324f84593f9f220251a7a071c77bc847c434c059fda757ec21e7696773f018c291c47352bd21740b5348fa8d6ec335deee218c25edc2bdcaf1b6b1b67009f69f406a55d3d85d7bf8d71e5c5d71274f2f90c178857f9972dd565dce4bae7204281c9cb63cd8e7735cedcb03be117463a9b4b07a8410ded5f1ee83dc2a41743e7765c84fd798ca6e5b70bd4000359e9000066dd3646a419b268185bd07d6f4079443fb980b14c8828a24e74ba4c6d1a13851463d534dfc4b30f6d2ec56efb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086ad21f2492e1f6703e012fe8b65395e87983abee6b780d651ea73121244e98a4ce7eece60e695949668438fffe2d46e34c1c1bc14186b6190edb1f03ac1af8412a996871bd3f1a3a279403fc7870eae6a67711415492283374d1efaaf93f8829297ce57c07cbeb15118adc921ad48252d29138ca54df8a719e1be83ade05505b8877d71914667142b1590114807d7a64fdd7b4cc1fb69ff6244e293468aa8d70c6a57b4e2b5518aad942e24bc8c86f37a9549f43db0c3634d50d90c977be6921775968084df094948d12811f0c7e9289d5d13a1ac79ff585d1cbebb4df6ccc461e12bde8f1396c262d0fc74b59b501e3c7454434fdc1fd331a3aa8436831eb15ba7efe7f89d15f38d439f243af95850b160566a4a6fb06cf0bf8ca652bed71bd0a2173373c23ec6c896fd28e7209a6b05bb3c518cbf37d3b3c99d04b504fed5427f58b64e55305a42ab813b006fc52c78c8185cfe41a35146b014124b5d879138e0284eaec23f19c1c2365ba6cbc66bc8339ae869818f826bffd80a968d07fa5c838c946be1173515122d76135c5bc852b8df4b5dbac27a29714656de852daad2ca991334f5ff5c8b68f58e488e699aa7079c9f9abc1599f843f3a96a6d569700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e42a50df41a0bea9258d86331ef698f5613c57b26cc72f6d6b38ebc3fccd3c512c8d2e9ad107a215a267ebec780afb90499872400f002cf2fbd4a26c9c8cd5e51c1b152aabede62daa48325acf5cf0f1bef6b189b467e8557e9bea4379f3176e439478a7ce3e33369ccfbfbb6b4505f5cfae9d86fe355625a775725229bf6b4c49d4a7bca294b9c06a0bf148b731ae9a27db3e944e8b4931eb5dd10f131b268ec619ae83f9216cd075b64db4207e76885d1b5337e3d26890d4e556aca59510c81df609ae9730d493edef5c198d6f258d7b2d69240b46cd735a035b1d631570381ada69391f28198745ebeb839978ef60effac0e81b1bd04db10c12645e39454d866dff8d9a71ad8458646a0d863a513a6c79ccbd249d558d269e95da31d56ce4983f9f5c5645b2d4fa5fb77677c148b37817b7d2a05bceccae1afb8bb5f73059d646fdb6821693896f621ea9d8007d85a04184bbe73d93833a4f15622f99670b0cf53d629f99e5ec7a7a2d75728b59fff457792cd9d1afeb66bb8cc6bf921089b4f5bb8999d14ea09a86f0f4f07394c992299ea4b2471338e453a64e3b60c31370df2eb5fdb8c84e629dc05ad06fa957e910c9deabad120808a88cefdf0b7d400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e41821920d18a9627297e813d666b43e8e6dbd26440ad6a567897d206c52a81a1e042a8a28ee72e675f57671505c961c7ffba7f476d85b819630ca6dce748245b8c99447c72b1c0fe1538ec572049f9a7e390ec18ab124ac9cc69a7be142b04e6d333893c3a24b5b9156c5947b914094f93304b4e09062bb4be52e01f07dee833df02ff769f0ffec6c9a7a33bdef060754baf1fb8f7a97f77a6329bd3639365d7def064b38574ef19d3b26328f6c9036c3efa4d982abb0b768495b3b5e408a357c0d86a901e0f7addec10077fb972a6823c10b0b2dfee0386b8dff3fbebc0e8e2c10624d0f9b9e5badb4bc75946c20a81bc2315cf52f5162ea57c524dac577ac9ce40139e439090f5b38b492a54f2d9d1091378fcdea9a8c65399b996e7c449b4581a857104828c59247f7e59bece227d7ede04216a58ebb81cb784ed422736f95e8c4bbc7f396b73b5035bfe56fe4fd6b2b9a3b40d6871185f017ac5602ee759ae3ccd353e4a1442da81bc8c07240d3aea6ba610a83247ce268c4bf906de2e0f274e5cd1570e1cc67347f3bc8409833cdf66f5025575c3b3d9d758e1ff409bb115422ff5bcb376de42f07a136de1f6bc50cb32467be27a3e64b8f0226267460000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000118b248a7599e925e896eaa0ad05c5c70d6dec8af966a717ca253edc03477da3a99fa7a0b3a9c521259a702abe7e7f5860bdcaad6c6f17a022e27dbb61fc25a405813c2f5d1dba77f8bcc6383f51688ad880bcdf1b3371c2012d885a7a327ff60020e7750f5bb1ea2579edf0151a2fef84a840eabd9cc1f8fa635f46e0a6842578c7940edab5035839976221e1c806c79840ad65da34a0c9c8518de53f910bdaab58a9751e5afebe6413a87af65a33a5cd12ecfdaf95190cdca555f8797f29d6b58df633b3ab28c4993d064915d76260f5534a1c3c16cec0f05102d7787a80cc59f256b38406a5ee0b1fd9a01b78dec063d8c7f2e2a8ff12bef81ad45da867ade8caef9da3b67c76d9b5aa2f2a8f0d91e02ddc42fd3dd88bcbcb37d9d6cac2ca66ffa460b9978b51e0d1c4e9cada8a679ee4e31fa2c6f72a16c42c4bbd7007b4d0b0ab4fcda8e5d766a850143ae5ecc19a94f66c9dfb24a3f29cc503ca9d135ba58657dcba8ee6c807f8bd5e858c704ae9d0585d85ab2f722376222fdb6caf89d2b910e39791d58f58267cd25d9a66b836f2cf47c0735494344121ce78246963d2eb66aa6943c4e8ccc3aecd868bab8d66789b91426bbf946e5618eb08426d050000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000160cb05e66d2ed2c56a027f495ad014315b22b4dec5c599ab09734be055d739c7825ffeedc8ecda496da372a06f084e52517d2dc7115d76e695979c76d27f9ffca08da9c6c07b07d72a1d43fbbe4199acf9b80efe8dbd27988966b6724a7f5d77917ffbe04614c5f9c148a18b7cdff2528c5c4282a3f1d47ff6f4b15474a05e38c52ee9393995938bd45c5417b98edb82855d7aa0dcfc91895e55091b59b4264fedab4cff9d7067fac0098e8ae0d0bab8e63530ddc8f544269640113730e7dbf19571594d7a29f85916bb06c614edbcce64ecbb6145f3e4e91b566bb9f38d6679b696974c88295451d16790f5fc629e747725a40957894afecb83b3cac92d9e976d0f11b505fb5667b164b1206afee787a35783aa3a7b0607ce053e9dca839c72ef7901566e89334595261e3d88f734c9d637e6dd1520d3148f8962cb8b7f8285efdb0329ca4b09f82a67b48b091161bb6c6bcb72cae68d2285c6e6c931f95ff45de5ec032b7c16ffa51b2ed85b3a887a4cb5f78c33513c9d526227b7cf95fff08ae72adf6560ddd9ff6ac25b3f0678037adf29a373db0834fb51ede0b57da1712de871743355b6986b378c2beb7168e0d20147e5341c300c6ecd313091395f100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b5a684c16238ed0710e4198d5161da6c56675d17e010526cb56dc93788646302caa15b1becfb24bb6b2de331a7a41bf61abdfd18708a4ed5cce96c78d4013d8876891b10651a0df6a603a301f24d19bcb7441633f758c91aef84f784be9bd084173e91d3583863f952dfed00bfa345a4afc0a82ce468ca6f3368c46017f97e7bc795313458cd396c0028e52f1dd6a41801f7745b5c964f54cebbc0af25f7a100bbb16d2bdcc004e62169528cb7069d16ae159a729a2ba76791cbd50d14dc05461a3c8e554043e9676b3f83548f8e2b19dbbd15646b72bd0ea2f96e20e8b7bf68dea4cdb6d681e93a789666c422e612a390f5f7d286411c230f937b29cb5e0025f92b259e20d553e32cffc7d6e07adc42176e59636621114d7ad256be3cb7a8473e50f2de7aea47522b1ed0ecc8453bfcc11420ca254afcddf56df14e2547e52a9344be6b9bc29af497204ec5e938391a45b321c6674d25872da27fa91678f247b65c38294386c5cdf349c8f08264dc30c0bf9613a5e9e4221956f1c8f69a7d91eb52804f7feb9a69ceb758c2ffb2594f33e649387063993066198817e65776bdc9f4409e3d4c82f44975615331e511c547c6230e72601e122b46b068601a0fc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c561bc56e598b180cebf7afb655b0f2f1940938f2de79cf20f36a780ec66099d0fe529b600abed44b9d711b4cc02ac266d63de5c988fa59020bafd0edd55e3d801f30c4405a89c256c6f4793be0e8d591ebc456b1b6e5c42a97792c78c4fa0859c9d212ae861a332a317ac908fbb85543e111ba476c37be364b9fd95318d2ef3f5055e688a1e331b3d029638e11932dd914c507a707dc1f07f472236bcb065f948701f9465bd3d95a11f6be92dd0a0a8d949ca02721382c495d0a90dd9c2b535983d83026a217bdc353a76646517c73f4b716cb3499c710b1fcbea634cbf84a08a9dca9fd86ba658091ceae15e634b1d5599578428f3d981391a0599ecf73d754f52611571004c45d02781db883a3b11bd76a8f9367e4a12486c6f974d0da6a0c2f4df3eb185f34503be17bc4b9cf9b0a5891b02d78fec29a2edef081d3540a56793210b47185c649bbae46f33d00da6f73ed00d892d2c0159836303adbb29e1e88391b88badc62140af86b8f7aeea2f69badabe311edcf69c0a0ea395f9f7d6dd64e3f6f7933955e61bd16f1427e6dc2a23e2d9c09c210a7e1fee886726b0fe5cb503f8f97eec14fe934fcf2e1e9ecb3435c2e05794b0e71267e15717b58bc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000167e8a2f41ad8d2daf648e2f90d20ea4f9efdf124523c86871f9dfb2d9f79c0d51c9ab9d21834bb44d4ee4c53356da99829d89bd76d421ab953287546b665a6f3a81cae556c0ab412bae998a2a5ae2445577712e37102ca40e94c29abdfc61d38db1b3288327715ce93f79c335b5254c81677abd4848b1c92e5037798a11b6dcc77059bdf18b03e15a662a79dcc936867115833c5c67640bda718ab3a1c1e29af75afccb6acf1e3654f5bd6f131061ed74b5498789abbdf29eb826afe6a4eb101c130ca355bd0394eab01906e676e037a81b4f8f5a218650abc8bc597a9435dff2822cad2d02bd3d964328f1253445790348518c041a5eaaa68c96272b05fe8321b882c0347cec58f059c01ff03b6c0e3948f01d1c018bfbf80392fb88cf775f91bcac093ffe079ab7c65a7edc997614c122c2022fb0dad7e2abe78b89021592cbd33936fcb18d2c6546802180c2033e51930b457dcdd5bbbbe123eff655fe9dad3b1de9187f7b90e5de83e994b25638718f99e5cc9b8460873c438a058363ff6d479d3534f68906c8b49e8823ee4cb0e868a03c12da83333236d0bd7a5f937a6b02a98cd24d0f19bb9912e6f9414c73cac77afd6db226916d8a00a2a2f2b176000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004526140ce2bf4c44918b2383a7fdc0645cf7d837d851f0e95b5fead803343f27e7874a217d4b82ce115f3aadf3d2606ca135588a385bd358135c858b13ac9d14dbb5c74786d67bbf924b2e93d969fd96010aa1a2e0888d068a5c4a345b4fe88115a49a53de96f49bef640f293b0079fecd70be7d55b7dd736da045d0577ee1f76fdfa4a30b36c9165bc269ae10ec881c3a88c5640078942384c7f3b7c39a49ff63af95d72ca13da62644067fcb251e0ca27b99c54fd64d265e547a257ae1a0b4938ef2379815b0a08f2303f141a6ba8dd00b7ff5dee65088368a785be9fe7fa1b0561a56962cd518cbec95a59e64a024bf6160245369f3e3f02b6980c61d55f10198b86753ffd0696356dbeb07096eeb5e4ff93269188b3125da8a08b010fd10c261daf600b8417d73737210a16a68a15c147e259540fd4ef035e4dcf221af667eb93e4528fe249d2bfcecacc295b71c9b2cad67d0cefbbeea96401fcbb37427107296dbf03a44250443cb089fc4a78039d842be4172fb330dbaed11cf51b36c72b963ee586b89cca281510a9c08f735f4d971c3487ee9ffbde65ec4a0b408de82c644a5f14d09ca248f84fd4865377cad69d06a6761b1ad90c0d3aaa1fb0b900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ce481f05fa286b32a25ac577bd3e2823e3bc5d40120d0454b0c6a37b0063d3d89812e8c88a3564f782a936dfbed706feac80282f3686dd00b13d07f3d32c35711055e14439d33945eee302d32b96bd991bf4d1956bec3cebd237291ee711865a3e1e9072c460a91e9afb07b5f2df20eda576b70e24192436a1cf89a346705eaca92a1311b8f37c9a2a3cdcef1f6dae78712d13604d55b24a3264c7c0d40fd207c1ba5184840939a5bd6d07bdea40746f88dad46046d2d8780e73a9cb9181ce1a43c44d52d70a2940a918e6528d468d32ff0303cffd50e4e12ebeb0a0423eec95f4546c8bf95f99afd31dcef42ffcc897dbef2d7ba3e741eb6f1ed78ac0c7a39e4230baf5fceadf4969148b41c892cc0a593ea325ec6cb46126b81b4ca8a788ae337356423f8f3ed7a81d903cc4cd084c19280d461bedc5012764f70a3a3e44ceb42717f98eb769774ed826da7e8e33cacc01c7e543dca0f9081d0ffeeee780ef1f5b004908da4b385a59d68d8d444762f05d721b5baa36fae5708819ecb316b0cc21a65a59c92bf8cb50eb5f54044b5fe40a2600fd108f89f9dd8e1d2be1d7ef2cba5b1632702726f9b457eb3557a5ab5429162068c4089830f7a9a23b04d640000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071bef1792a4e7fe73fce875102a962c7c308cceeff598171b684b5f123bccc0f67dd76f61aa3616cbda8479be964e376a51d6cc4d7b8981eb0d21023dd4e84d03bbe644b02479055e82548d7a8c21e8ab1800835fb3897e3baf757f48738fa173ed2a3e8ea64501dc306db9240dc843421a15753c780affcbc910f17effd35fb9cd23f68f8fcabf7e76e0fd10279fe47255cb74c932fb028d1f6fe9f2dc0a6f08f71d322c2483011bcf020dc8c5c810511f9334cb871d3fbc9cef4c37f24fd286ff1639f82810a70993e16f699f6d38902d382fcb3408abd93d8ca80d7cd210a3e0969b9794675e22508fae77245bf85500a9cd52e3aadcdcbfcb4210e5084431b001dce5c6d6a5c65a83c28b54be40e3b7ee20b31b327a3342b3e523191e15cf9512c566ec0c8c85870fae60d7d1254bef6320529d0ceb5177574882a33ae4826fe1e7f0849c400eb128aa6c85f2e6e5660f56291f50532754810e9747ba8a2639cd6324b6646da70ff2da44b04a8f909052aa2a05692289e29d6d3f100b2077d515e38983da58bc0502872fcd1b223392c78d3d75a40685e81e9d1647739325b726b4a0269dc3a0b3dc60800728dbcaedb2a28ff2d30d2bf49f6acb293e360000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000133591a62b318c06680f8de810ee9ff2b2205d8b6d4e4630f6ecacd667cbc5dcac3e4b8f6ddfff97ac4cb5623634ad2f13ffe83e28f40fb000ab4918697b85d4e4b4d84e86ad242bd6caa6e1adee8be7cdfb5cf7774c82d922611caa9630cceb3ef4ee7e34cc9461351c491fe2f6b3763ab01763a010dca304d46db610dc26da5fb436111c49713408ae009c4e6a8443f5f1da3b077d9e9e353f499862778ebbe9519ede5388a73684c0f4f7cfd6aa2bb903e8eebcf0f67354f929d5223b045321cf89bf116f8c5f83fd4b57985e8d87b9e826025603c9cc92f6fe65a0c53eb09cc9805bd6bedf25b6fcb768af709eb71581dfd2903975567ade4703be0aadc2c3e50f01a20ca5efcbba4df6e8a622d0b27d904399a9ee36b99388e3e93e0d124b9f375b6ac7c2bf3adc0b3a3dfe686c17d641a046be698dc309acab4db7a89592fb871bd7b7da81a5b3475f017a6f0d437d2937502dd43f4ecd906a5e47171eebb03827bafb9317cc8717bdfec1d020396a287ebbf456db071434964ddab5cb4f91f1485b8fdd961015e38c9a5bc5c1c48d22cabe41883cc4e4c01f304eef7a527cd63b12cc66346495333281a4af77096239e766336f83a1d5aed6ff6fe16700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a5c73c295cca605ebe1225a93838e5c9037223cd4ddf03e81c27c92f9f2a1ae3a9da908313bb3233eb8ea8327ff1b7bb1738636c018be6a0819635da5d0995d79771c7e3ec37aca3a653a55ba49c7d0bc518bdd4df79039f0dd5d3c43f36155f4593f72393a65783898de03cee242f4dd7824be28ee6d818f42cf912be55214ca5b00ac441560ffd538f7af5de2a0685d57bc6a27736e55a67fe8b3944e173c6938ba38a92ff091fdc2f28f7525980e231054ef538e992ba4947a638cabcd3bf9d8e3e921cb44c0302fcb9b12eb0dc60f96e1d9c608c02609a40bb7a243c25ab3f18d27876a8a1915b6b5a76b53cfea9764457d5e291b3d20dcd490c84e92deef5fc09bdfd0fb8276a12432fc07fc22e9b66585a0e3acc68422faf1415fd7742756c88d6266e4b856e9f8c90d144bf3f28523677dff1a65cbce95ecf91fc5dab679c2ef5b1c3a83ece5d0b2c134dee6db34295b1696928032b206cf557eadd7ce3c3b6d053a5a1283033c0f0f0d712106d86bd6688d659d730cb2eee73fefb63ad44435a816150a39782a5535636111e78ac988f493a3550dc169add9cad245166ce10c11b2eae4b63e0cc8c4556d2a54a1a153377ec18a25646d7a3184967300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c19c4173dbeb95e355d8627691731848ae3e6d356619f7ef3ba6cbb82d89a6c900d608ee3263ca41081e7fa71ff4bd1fa3c831223ce0cbc7e24d8c5b61f600b46e52b663e672447856f93e7752696da4445f17fa80e25a5ce234a44e48f24e45a8200347e81834164912cc16ca0ecf183ea707b4be68c4a9f6e599c34da9e02518ef11cfd4a0653ecb642ecbad0c78a18a006f15b7cc0c990365ffde6caa710e2859abfab1019a6f5daeb575000db3ccdbae8aabe9e89c8976432b856f42c27a82af89c43abf53a325b7c9825609be8a73940ef39ac3aa9fbeaf332bef8dd12b9d037147747f5fcf26e25721ff54c2422213d220fe739e1ce422cbe417fa026480ddc60f9562a6101fd4aed534cc4ccedb711b6e2b2d8e40ede210426da4aebe96793ef5f17b596bce123b5a399a687ed9c1d08166267279ab33f385a7ab9b40d15013a131d7b6b8b35eab326549cbc9f7a617e4d75e7413def15b2363acba1024f72f6c227593e8b741fb9ff438023c0fab7d2198b4926b1a6ff481915f3e7c3b9073269443702d3ebdf631c82200649c22f3f971487377256cdad26c78e0f3d249407b5eaeb1ccb98009f9eacfed620f47654bc819dc4155b5f7411f321fe00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2a390784938192730af73e741d532c01a5d504d34bd5ed6ccd74b189ba288e63b6b55bc8147764c0c6813aff36bee22216632c32fa7e6d75f1049950cdbd746921eeb3ceb24cff5388e589f59ffa3b2f0ec15f303d632506004fdad0022aeb7a03a69603717036f45999d1a89e73fa0f68c76674c365dc39231143b2fa392225bf9ca86b0a192c928717d62c608b2c430db4b8ab02871e527922a876bbe2b67c3173ed45dd5c45af61f38c7149e482672d9fe9635459e5aadbcca8be2149d8300340c596c9d7a711cadfdb360a3e5ba9b825cb1b75ad43761ecc6384fe661ff939df4d22f21ebae0a971baeb30682d777603ca3689c47095972b659979939dc6b534c302dde9796fbfc6d4ea983b1f2dc39992a5bd050adf5878c27615265a647925cbaeddf4fad137f029cbca36572aa27abcd9abcb6f0f479bc20c8af7f386059a5a90e6fb0cff9d01a18cc16666eed35fd8db773ed9d0c618012e9beaa93a2930377bcd33584e71fc154f0fb640e343e61f48eee3653e4d438009fc481027c55fe70ab5b0898c62334492d8f9b995ee25ac50ddc4be2baaa4142c42c5a2c191aaa3292c7b85153a473823a008a017949f1fa7e85d349843adf6fc48881d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000190da76885141941be31bc8e10db3bc5833faf578bfe16a8ad9dc2ed4bc89b06ccd429f404abbf653b372876ee7d01f012b9607995bd9cb26928496f39820f0428e7b07143e46766799b95bbf399344151cbd723f624eb52b460f41a56794fa9b1719d818fcd1b3a974e584d1b4dd97ec405c1a2bb4695cb15195750a13ff6c9a3c4cf73b3288418f74d1ac03b7b1eb66e4e451efabf69c0f751a26faa78e8072c5fda74e1f517b1bd456fa167b829a183cb5ff5b6418b9a1f29419b970b653127e9c4887f7c285b3767a8449d765bea7c8c3041d25aa6ee0b5f6620e50592c06ed9eb26151eadda81cca4c960d1ac4125e4c786871c6e8fb91097ff19659afb33beb52a7ddf141d0ca9688ed732850ccd0b3da64a285ba94118bed9e507a779991df47c2e4a1b4b53f6b0cc281c6966b51ed4a6a0f0aef0d650445f4a104e2663fb9372baadfa8d4220931328dfd2edcef4bf1987c542b7cb159daae49ac042570edcad618963db5a9a5722efe6718f528a25c854345022e7f58778fff71d1bcb2d3e6d83d71b13770f9abbe4f406bca6f9bb594a884da3b72246633a477c430bd661a9ba69a485539f83bcb93a051e59fc49cf1821f57fa1c851b01e13c56f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086181a6e79b47d0fd32a655ba0f10aca4611b8a48f0b534096e666ccb4d7443d25fa710cce5ee5dd9573c7369dc9184d15449bc4e4cd30dc314bd2f315080b38fda3ab459eb4b5e7190477802bbf8b19b9f27efd0269d75f98c09d815038b12af4515ce77cbab00a69051096783dac59d425f457813a7cf00d9308cac1f0983d5c42e01c39be0d6778ee0fe4521e68866937b4b44726de74cfb7abceaa5b9b11cf766b6e7b68a3934e235fdb3b71a1cb02153c2196683548323e01e27e1f8cb05bb7d2e6aea93de4aba417c399465d8a7c76514f1063de05c55ca184462837451e664cb691b15c544a1bd742fbce753721ceb50426f0862bb9fcf122ed5a5aad742e7d67f385439f6cc13dd5a24f4444db1cbcd6665b7342980a6c09090d1c0d8e5565ffe58dc75a58b582254cf1c5ac1b636e9d74f9f7bb06c531dbcd557603f42d858eff57f307aed62a0cd4a0214056c687e9da2b0ca9b68b2b2c995fd4654841514b365d5aed25b7035b4e2dec0851c3dc04b27bbb06fe8c4dc4d0cb78086c09bd6b2e4c61ae8a374269d99a9fb6a137b269b062f9a0244544030c40c7418c57ab384f88c70dfcaf33f23bd40e2d8f6a1ef0c0b03039e5aaeb7afdf1dd880000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000891e05ab2fe8010ba6c43a2f63f45b5c04b20895b07ebab326ae1ef97b9bec6748e93595b4444c3f88d7ab1a878bf5db5eb03bd560c47e5dc2ec33a243a318dd8ca70a2e44840487167c15b25c8b8142a124e5d5a6b52724336cd1b319effbd14289a491a39826d94f160ed55ff101b489c0910121815521a07cdfc394f8453283c168c14cc2732aeda6f6281a58cb830b575e34c4deb7d5a4c3e4d19ab1740d20db78a198bc308edf89ed4ba7cc60af7f4c83fd9558ec30db284d4b66c1a02b3fb6857f6aeaa17ed447ea149766ad01b0cd75f85e5db855d56bdb858567ab869e086b2baf1906604bfc6cd0ea34d4453610a9841717823522af4f923e9ad544e7d1142bcaace46d12bcef44898d66b245f278b752fa4f5c757fc5f425b252389d17fef379dfd62952d5801c5b8848d8da2f04097241dc20f14fa916396f12c8a2caf22b6fc143c7e0a17a310d99a2bc5f139be94c944f893988f4fc2dd2d134544267e9dc0d9cd6e4663d17bd3651daefc1a97d7870b07e0a5891d5151958552632a9f7fbece567660f42ca9ee7c02f2053116ba088fbab636d2d628d81619c957467340e2cf595546f796398d7663c66ff02d1588125977c1205933e8fdb9e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087ab3b3f644bcefd67a7e813a712d49bff69f8cb80122ca5b74efdabebba690be586e4eee682a88e71aa238a99430e35293f2247e171dda0aece17c13635d7660da08fd1f2d071acf3f1b4efe51cc3388ee24d85e029c293278a8d23bae6fae82506f333b8769d1c0b956485540fee056e42e707c0a0862433dc9fb935155029c4bb23f5c1cca1f884e26c3c54d92b33b4f7eacbf304a8b5068ca8b39f7bef295109b27bf9c9a09d738fd251f01c438040becfb4434a75f35a471594f382640d809017e0f4fdc114e5fb27e0b8500b09ffa64d1479419fec5f554933c9ccdab64a534e5380b6933ab3c62722464bb8d72d42578146dd1e0c2779266cdd679ec0f8597e8ee520de940cca7933facbdc10767f27a17564d06f6a1878944e933968b7d47e26a1c2a2c96c14588bc1ef6d07f848b5ab0851c04b3c788fc967edfd6188ff4e2c8f283b4f8433d755f1ea947785ef3ee32ad60b7bf838e212ea16f30ed05b9324cd5ebad17fe0924d6644895f71b116f78715936f18a2e8cb1a5821943cf187332070476b75ba23a8baf5a64ed5b50818dbca253751882afb51cb07aa376570245788a5ebff64687f87eb416d03f9351e64aca1de8789bab3064ccd3d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011bd1c1e0c585cc38fb3bb3b559156b134bb784d6b86a9257f966c53998ecca911105017933e97c2d693e773cc5683def0472f8e7dec59d09d6cc4af514574cf0f8148289563a60d18e7810ef3dac13bef14fad742810a7f0a96b5f6f78d33b41137b91ee5a6d8c2c1ca5ec1166921c289fdef57e7032468f4aacb2cbe44e76220a5caf7d833b45049009751e3a7a3db33ea677af08ba08a4ccbf9930ef386ee3468e5d885771743b3db5c9f317b816f1b65bb1b1c30d2a545d78e7dc73ae3acc731dda7a5b162723ab608bcce21155b7272aa68bccdb175e54e8af8ab4fbada8fe25b76c739e77497e22bf293137c6f8a21b19654001f87c7db85242edd7445952e272c0c3b3b129be2c68b19e57d9236dfc77fd02d029e56943e724b4eae54b194285847f7efcc5f6fdc8a817a7b452e63fd59667a7f7ca3d389c961c79a3852366845beca85a55e2f9c048891660808c1d24e461e9200032ea3e71bedbb5404e954193c05be7eb1be5dbed8fbee9e9128bfbd84546ba34a1afdef670827a0eede4e2e39cc39bcbd8f7c89e062245a961576c8045381400bdacff406de1355f3821b00aafd00e45856fe7c4f87bb8aac99133b1db68d711608debbd3dde3a300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f4fa6003e0e24be0eb2c25c40a4b4e47cdeea1fca8091156649390c6719fa9bc9f8c0aa514c35cb188f6353569269b70989a58fbebfd239f536446c788b3e07a06d9cb409ca1b98ba16fcc05facb31a33e6aa1cc9996264b18a5df0c7102a2d186d4205fd5b9f3b5f09bedd286e3d386779b33ac22c0418f73841655c3d7557f006b4cf00c970725a3331d609a4e3b443e3fae2789142a3aa8b557a5693fa0f9280e1e5e161ba16324ca9b9a5192f4b151ac8aa9471d33cf1cc47ce1ae2f896e41a82a06028ce31248329c33aa8e2cb54dc047613a94af7c8d22ef93ec749ae90f40ffba5fe9daa14c195e644c65fb8dfd38bcc7a9fae8e8410cc5926865e1f00d11d792b27b9178a8e1b09a54470393bee145f9dcbeee2f6cc9c057aa520027a485f64b12d92e71e67a995f797ac4712f83e02ace72d0118a02f701a8015129584e48a42fe39ce04fbc9135ed20df4ed164ece355a3ea0f63d2c1df6dc03197eb4387e5d706e79d12fd0500cb8389b88b2200d3e19a5c9a36020d52385f876fd741648ccaa6b077d462b51769ddeeecb688fc1a5383e5c9fdb0737ae85030a18120402b91afcd7e2e3936c7d36f6ae057288cb65df8f36777df774581274c400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ca29fa3eeb24e384f8d47f0fcf0b35f5bbd7a2480f0151b6ff2d9d38e4d0f9b1fc4d7e6e7ed003f577b6fc1fb92ad26d5ee9ca594e21ae11c13e8f732f2de9e7a5f92aa27bf56dcbfbf7775d598b7681adca41bddf932cd0de0190fa6d68b8d528cb196b2ba558837d5803d1e48308fb78a24515c71094388aa2d4b5ad4a9c15f987a68bd313941068881f362c02768ae270cf31972316c05e661f24e50d3b7c2192cbbf1b1dd2035670e2149b0032a11ca0990502a97a99b4ee53ca3409ea29625f1e0280dcf9e099df583795503e8d58d892256d21a1cbb22271b759cf1e72655f6eed886c1a014710f0969e6ed7b71b37ab0e69c3c5de70490367abbab10590d12507792cc3efd67efe48ab2087f1fc4fd7722cdbdbd1e3b408575915bfb526fc4b5ed3542ce831035135882d464b3f8055687d9ca6907244779b5daa994bf03f9a3666588142b94f1858e8913e7a27e760b651ca23f61ec6e03fee48eafb75ae6d9f1e8347a96c7ee5a165b544b76984c82a06f0460c3f054f2c1591964caeda02e27d3591c4ee9446b379b40e8a7061ac16386d0e597cc3f97efdcf18da8dcd465b1444aa6f5f106bd352789beb7b04f36f13a86a4956b627fe772e79000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e28e36bbda5cfac212d4ec0fdfd88797bd1010c2a4e0927898dc10b43ca03b13f8dbf76576bc4512d7197c3567825f048e38fa6fbfdf11c73e8a3b124a06733cf4a64f7fa76e056020c438ea78b7cc0550ed492c2ff934cc2e38d0b59c7eb7b7039a62f8a2859c4ba00406c401fb2a2dc75dc1c646915e4d4a640181e69ce9aa9b12ebfd998f6e37f281bbee3a1c104fc3671496069b3e7bde3fa9e4a30a1ee7a0055315f10f31ce11f631a9d8ae9a9ad6cfa0e12ed522b1254f66acc32be21c3d4d8e3fd3e31bf690efb3367aa91291f17e2968c73ded83447598e2f804c8f385daa123eecc859066b419237048886a5f5fe87b2c211f64433811b58a364d92c088955cc69ff00df104576d66a42479830d45c91d23e507891791f564d055386617aa854caed741520692ca7203a438b163fc55eb9959062e93a230a58817fbd4cb9f1e87fd79a7639795bdd5ccc47a112486ee96dfd2f60e882ee2d4d46c9502fe05cf57ef6e72bca0f25b045af2d1881406d620dac3ffbff9d7bbff19725fe9bb59b7ae50cd98718d54591bdb7d3fc5cefac7fa983d219c362f4558d8fec3ec1a5f2b373dc4bff82a86cc3b0c00b4bf363059bfdb557c9b4ae091cc201340000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a877cf1dbb348ba2ec57df9ddb6bf41b1b70a7fa47cd276dd4d36e0c431e5040d9fcb649f72ea10a50552dbf9d0cc846e945aa3501760a64cadfaa5ca71f3d8e423ed9cd624798956004fba0928dcc5ccb4cc386fded7cafb612a51f6e7d477546da6f9a03225bda4fd39ab8dfa49c4e94b6a2ab7751d8a693fdd36560e889b268943077b0696fa3aa0ca5c8b57f9272c68fe2061bb15a2a5b7ced53537b5b4a1389610e11fa0311636907aa50a5df27e363472deb8826e4bc84ed0a251ffb9b8e7e49d340750ddb95bf79f8fc7f040186a8a93e435db0d29ad72f17e202735de93f6a81c263df780b4093ad3be9faa3be59052965597920d2ddad5f97a966da4ea9f687be9345ea50a8e512e6e742e9a3f11e081a47546a882ec96f72bf244a411e1a064ad016e76611ff2b7aa52cb76eed4ae47176c7a6f2f302a704ea516e986243b5daaf6e16f5c6195f933cced0edaa79fd27d1cfa4a34e9999fba42b0ff4c91d6df2904a4a60aa2b0ef3d6c23e7db5378111269d9857a8d2d9da05e94a294e9af7e7b6adca32bb7b1b378c39c0eccc6e8d8100c39168c0f9f2ac433db063b8206957e414360678f3878d749af024153357fa4c45167349c93083e6990600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009841488191fb98c20bde208223708fb58ba910650b84e5877991fc35567fffffb10d32f6e1cc16c50368693dd3c99dd9412cb614e69afb8522f7efb464293b8d65417f44d70ee73c8161a80892ad49d17e0e4dc04cb107dc79899eb20769fd487bf036fdfe3cc2e61a11bd979e7b3c9721efb479e71359bbd605185b4ef95a63255b32d056a3144ec6eac35abe370d5342aa2b567d24ac304ff6ab9a515f0506bad54f5b82813d9a7d87938cd93595db920fbfc264e27d87de34a8effad94bb292a694fbd46b3ec9b5095ff8da193cf30b9813cf7425dd1aeda7b03492f8a9cc430ed72d6ef47a84f75c07459a9ca3b515af63af96713c42966b04a7ad5166547f906fef726c5cafef78ce9d9c9e1db0813b9736ebe98cdb7ea25ab5d4d81cecfdc45aef4bb911c7d7feb6dec232e2962b25f52cbf3b51d62c52cd9ed10e4e81636a8cea7e715f62df5abc97a9b54a86093d4d9ef13c177d1db02999151009f13f7ff6886c6b7d6e940aa3a577260f4558d09fb37b511a7e1d218fdac16d5009f6c1c05087cc694db19ffb18484b4062f95bc3818304cc517974371851c7400fb43dd3be605d91998860b4995666ba0b41fc5428539e3a4b9871740ccc4a90d50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000237d2ad543e90f20698a21764d7e9b11a212693caf5f8e4f353668dbecf8537f7acf520dda3396053ed0cd08d3d3201ab1688db49bef803d3a0c18a696e1db1195ca0deb0e3f48c0af93cf5677713608be559fc9cc41091da6abd1fae8cf171b6bad0696e53c7bc098db98fc27799f71efdb5f6bce6fa43e2cd6917adbdabaa75fee9125fd10ef4ed65b29865cdf7da33e2b5be16614a44b99264610383738a50d05ab11510cd6a54e3159c584393792747e2a97e52747f0e0c474336f1dc0fddff8d8595037687d1df31ce0365f6f5999f10551e6d1a60c5b505e4db1ea1f6be3887ca7b36cd6aed525bdbbde49dc67a14209e94f8ca4683382815d1031a8f6e9729fe8fd6e074a785a1feabc91cf27a4139b63d18b64a343680b91caef596310acdc9ea345a41d859f4acfcb2289684ab367a689131588e2fb0e19c050b423caee71a7387054d8828be18e82a465d9a67449471c19d84bc8afde77dbb05571c2b7fc64112e91b45b0a33d5f55fc13e948c4961c1439f59fc07750ff0e3afb710389ff38cc3318ddc438f5918982876eecc1dc7e908b4f9db275a063db5f2812fe22f076482e65292d287f01784b11e44420ed27402505417e7b5d532f2ca9700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000981de50b152a78d06a3aefc7141f128e90981ea5753ba63f1a37f7b7c886c31da8e15eb8377c909368c00fef04b6b6dbf3c5dfc735d3364876340ad85cf6d30933642a6d47413025808c94cfd1a1fdd47f0219ca2c530d602664e2e2f84d314fe5b808ca25a8e384b5815c1287ca8aeff5c9432f36922c5ec2995120a0d0b6303453d5f7e7cc8950c0a61886fd4b19596f8d220f5be0aadffe5f3d95ad5f1d92b29dc13eff9694c98133bd029f66ecf734032c798e83f0f1461b3264c80c312eb6e82f96a4746b5ce080a895d0db62e91820228001d561214cb319353c711f567346577e9514bcad67c2b94f397021b681802fd0943399a1be0b95f9ef0d07d8401496fb0841440bfbe2033b9376c5d3e7caa081b364cdf186ba0218be3a490dc37ab2e2d442dc94f193d2e0a052be9341affc2c1f1732070cb82fcf0ff842fc6f950416268a2205214914a450370d0efee4dc72235710f6bcd21c460009d7a99944e75ebe50d6c02bb54ac68fcf08fcadba24a17252308305e48706d05b6c713ec27e75ee17fca9e66b2779d2790ca0c8d3f238a3f702bdbfeae2f8a5d2ffa22663934b56388aaf68dbac84e6c2034b144412a6efdc619e3a0c75d89a8554300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c1c42c59e2c7a7b47d5c52c395948d3921731d2314bda3b18dabf5e66f8c72d1706c24f85d9f9b6a760c2eb39fe0d43ed54e3b1ca0a9ef543ad61e51173a4201e4edb5f17c103b1917874377e4ea6aa39e054c5f9dd3dd608ae871eac126272cb664f61b48971f770c01ce4b302cd7a03c7de5b7d06678df33154d9398a57b702923990413287dbf5dee72abf31c5b054d5590e0336ad81d52e2fb4f9feae63339f6c669b464483f5ec233a21e02faa32245249e08efb3eb2e9a511375fa6bfc0b1f029230a7aaf47392f1b9b22f4f58fc1eff62928f764eb8e2df7b90efe893cecc4cde37de5c898be8cf8cf96b9a962608b3bea536b553f7b616cc73b2052cf0d6de5d13b5e87a9baec1ea7769c8f86b8c78af68d111dcc1b278eda7a2a7c47963580194338b6ed431295eb8559f78f13173f80e96e21e42f5d9a8b0e8726e7339a006afdece90ba4dd2456dd10de907459c975d73c814e740512b47c88fffe14cdf8b0e86e67e77b731822a5feae10332a91defc15cecb0da6db428a6f6fe1f943bec22fa34ee6929ef04082673e96d3c46004fd70b77743e5c1f9a2fbbc7a2dc4ca4188500326671609be312fd87b20c26c5d65dcb888cfd40b9272674f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019f160087498bcb3c453be554da394f48107f6a217a81df5648e77d859643133e46583b9f785ddf7620e4efe4e0afec000a115143fd811adcd15ebd1d1bce1eb55663718b84a2fa9a98c0761003da75df94d6dbfd91f653520dfc8f4c4ed41a845b154334e5915137fe7cade457c543474fe9c9abd6b371bddd4f026ac6a51416ad45745706b06113d75cd3348b4b24239c1ff015045bca9a1b7da2d1e8578bec2979aa5e3acc7f1127907c12b64f563f380dac9994130c04b204d7f8d5b8b92e21a78ed5ba11efac55354319c84a90e9d6662d1a89c9f936783779f11409d62d552e464e1474cd747d5c9b41eec96937d6bb6e65bdaca2d474d4f5d058e2d46f8f1a73562843256727c900c4503bf4ca0fc1ca9139c4601fc2a7f9485fcfaf9e7e126cbc290c54d4c2ea3f67ed1bce7c5cf123e15cebbb4d33dc4a6bc562bf44ba6e03f0cb5a8e5f4f30faf8e7efce42c795ebc501d2db5d6b1b44eac76f2cf99a0c8e80bf564e2a03cc8055421a85269eb571b1eb3bad20d260acfd08596e449503527dc6d19d51bb5b12cc7b143af1c3fae35bc4a19ca64aaeebff44fed45253f46312b313397b9d910a854c4d5fa03601a4d2fb2d169e755a0f0bb5eeeb800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e2f2ff84695cb07867c3e5867db21eee86e1735bac45ee16215e67be9a1a3cf19621e491837db228f8053ddb71cd075e1d01ea1a5fa33925849b5462a2dff610b2a0e6b45543de82ee6da2a53fc40637dca7c4c681c378691e49b7c2a62d7864c9226c71778d9e037c265684f7c5eedc64071d4626b0e401ccb6a93ce1b1053d000856deb011f033fff98257561111314d53b3b38b49d2e20fb8933a25bac472ec19858a73c70ad6d65965ff55366a2162624e1400fd330ae8d9e1879f6a181952bdadf515c1b6199b04da3a563aa243d2f0c2c84b26873085d1457fc24b21ec911f315498e17e7c3928fb310cdad9229a39cf9a012b8d24a99137b823243e73eb604f083854d6756f678edb212ef4ad623f2532859fe350aa00f15c8f14041086f0d7455bbd3f3af7adcecb7b84ae4b41ab83997523f1d8bfc00dc6e2464d64181861ffa17ed662e8e776424e682d2b305984081d24bc8b27af891b900893206c203174426f420b9bb608c59603d2dfbcfa5c3f4113041bf212c762ee04ffb2526350175e333666d7c8a865550c628fbd56a8855ff78d176360089fc699bb74c4484f634a2cb4f0a88802ba8bc1f73024cc3f27a2f80a4ad8ccae26b45ae9a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d8cfcc1356a49ac721efc824dea3b9a41bbb85c60e680f86b7fcdf9c4066ea441db0be8ec37a63730694887c0356009e6007877b51a2f9ed0810c9383bb6b2d057ba3bac686e6c1b6fda30e58807ce2abb8df4725608aa0009634ccbdfd0a55f6bc7ef22c9f82b739af5a08b6685e841eabd99cb2580e7ae537c86acdc7dc3949f7fddec69d2ce3eb46c461d94af3ad45c6c5cb65ab80a6acd9da5a62a2203e1c972ddf3e4f292622e2519ec6b8dd9d0d4e4a1c1032058159e736b4e78b38eb43839aa696c7dd7561924a58050f22877ca6caa63b8ef5fa22fe2f36d9935ae9de021699d275cd5c9026bb977772eb826112d368aebb347edc1996eb942fdc62312e7d3b70210e9b31797d49feeafc4c909920e911fc1b2cb72e5b0211098f7d88d2cb07badb3e4131b190224469088a5f9be259e3857913e664db02472963ebd71a118fe42342b2af22b9fded6e79ab801a23a55ba445c8d78cdad4eea6e00e92c17d6c7370d2e0c6da42fd9cfe6cbf20484e7f2d1adc3a55c629aabb5eb373f76d27c391addc8f00288c26504fdefcca0666afd3b4a5ae3e8726b0e65db7c0baf044730603d86f730f40f7ffebfb222569e2b06c28823844f5a184cba7a34000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008056a43831b4525d1e16b898914b2d70c18fd6d9345ef3ace81f3f688572f0857e117a503918dc8b765e778b420b6e2ef6172357f9ca092561753890dc89fae110392e4ace61f020bd0649da9d3f21e0e2bf410727278b3f4462476e9421dd77890c02dfc6b4d81df3f72e8e580024035a2193c67257bf961bc8f83de00a7b0bacf5ae7e634ea1c2496902f9087e981e9209a9a8d0215a069a584685d1c02e369f9beb2b26e3b12bef6da57f02bbeb98b7f333b30324be70ea03e0fb643399317a92435bb956771d1681396f6deba363cc134e5c18b515720a90b1cc80127ebe36dbb1c1e905ba998ca35dbaf1519439d3e08c419d212bbc187ee922e373cdfcb01932c7c9c40afc8122b85fc6e66af59e858b3f05241e6f77fcf40342e0e1b42fce292d9de9540ba46c4133aaba5b2d26b2622b8e6661dcaf2a65697ddfb7843777bbbeb938bfcafa671bedab3a1b4a170f96a9a101781ca8891337699c2e2eadaee48491e31b6e4c2a908c1d2f4f1ee3f337fb2851aac3d280fb670ddd4bcf214dfdfe54ad7591bb3261a4bacc290d79be4488947e97f87c9d2239359325ad579cfd96abfe3503d776ef7b233b65d97dd4ae47601103067682e8242b8f5039000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087432765f16fe8b6235aef2fdcf0e7d02209c85555b75d372d68fe7c149ffb40665359c9d9b908e58fc6cfa226cbddee1001e420728b6d841b515777287d421a2f4c01688a090084af2cb531a2109a44cc1199d249038836a50d823ac91e19d30c0cb742817bfd8560231440dd02245e6d07df05875430a7316d158314bc02e5c1b98a570c1860eaa996a2b235f92ea337da40799e3012aeea6df3644c7efea4d3ac95e87c574c762e738cf292c58141c096c6658751bc5a51ca229e5a0a64061e8e97440f5d84f68af9ad0a360ccc4402eeb314dadf47d899a1c32b3f37954fd5e29b62df2f8b42059e17a953fe5c4bc2f0839a3eb34fcf209cb75987d4d0e6a363204e69821a22edca4a92347c3991ebaed9cb96af90761a7a50326af67d9d7c29fb9a920a06ca80a0c450761ac1d51349aec2d931c5257d9906076194928ab0caa779f20cf3fbb1f1409886b4087f8d6d92147a1f8995266bdf509fb22a1eddabcf675e70bf4cc9a7e45fafab3da0bb72823a70b9be468397b9dcef04d6ecea4bc8f41bfc089dbf502d40157fea0538553eafa607b6fc44ee1836a4c0df4319aa401ed5e5349858d449ba63ab62690784a0b685ce357bcf3ecb02c094f44c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092b422aee26e5aa83a82181f885abb4431ea85186e8f56791085708c4df92282180c14645c6f7934df3b55208a526f96cf09d75b58e5c2375e5c692aef3f6f01bdbc67d6464079fffe58b75856e666dc465e6da51132cd489a98d9c885d2fcdd2950cc884a60d2a45fa5fe722216de13d71f46a29fd2c95247a3ef7be2cc8a8af9beabb070fa58e698fd5b226d793ce93ef421977560b47cf58a93fa93a9e799865433305bbd5b41c6cf43be1b2130b7739c232e1430e5aa8c017ae2b6f1f0b998aec8a17ff27d4862d296f8c9f45732304a26c4a56084731f9009e26a653f1f494f2723afe72136422daed8f5d35e11cb6b8017a90618d0b23df30d7424d9bb910273a8648fdd07fbdf6b8d96f57ffda790b8d8514480f5bcb9d29972707ef01521b23e7af1757c395c33060204f3a63910bcfbbe07560445df4dfc1121bfb4602fb753b0d0ef35ed204420cec1f1b59d866a1276db9effca6fa68fb89b02559b0c673e90bc6f63025dd9af755ea8a647951d8c0adfdcc4987dc8e515875a63e2674eea6e17ab4bbd8e3fe33b4aa448eda35473e194360e6e99b9b445e3f1219b8554994775851b321fc0aa9f056c4a9ca097c890a87362d792831406d8745a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009eee65271c6f78c96db4c1ff6d19d47092762905cb42b75d5ba711138e142b7b1d07bbf4d706c387adfd0ff8722b66fb89d2741e97b9dc86d5139a957d01f8bcd9092df0ba8357429d0b0095d0d3f53744fb224339ff19d79a474a2d79c9b1b534f3f2a6e644e82a79c52c1d9f9953951d6817035ff7bdac89175e7a2907689a437c9a0e7e1b9af708622040c139fbe892fd366c48005c19b6a6f8c6948ca117fd2d02eb5d0069e4131b477ba71fa1e791290e46c1011a7898d2791d38269e9a0ee77b60006055c88f7e7de29e050567305432cd54caef68d5e82233463fa27f5a56a20298f9732e36f37ebdb3dca04c0e94c09c025add525b5809757b3be9c8ffafb55d096f6de4c9bb6c983e43c1e00c97906679afd738116ca5bdc49d550eeb1bf4c0204197edfd01c883243dbdf884cc06c26d2b05605aa6da4184fee80455292e9904ef924027b61c400379e1e0983694c08f354cc8887f5c4d07c5f19fec6b9a1baca01ad258f3229f7aeee7936f37c72877de6a2c768d8007b1112f0b8e4a1305b531cb12c0d58985706a52d6c43500191eccc973b06b9f320c55d59c920685bb64b1f219e760f6d7f9987a92c8ec60dec76ca6c918af97740c0475a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cfe5c74120b3d5e3be8f59f9e249e379647c2c000dbafb2193ce7ca521cf5c9d0863b6bb35b54d70db3132f789272ad0ea139bf6cc8c0aced4db579d93087a2fd6d4692d5a92966a6a1c9133955819c15ca242cf21fa611b645ae8fdf0a3639df682b3e82b7cb77be690764d626c9e01f4c0e977113a55555ed8ed3eab3d73f08a8fe34f32e9bba7dd52f165d44be41fda2397dc1647a9849bab8f6c718d4b506a9a49b9df03ef75079a87dd763a74522e6f7e5f9bfbccf4aba2e5f3088970e403744ba920da54b14c566e2f247c457efde5a92f6ebff681ec6f4d5323bf3f1c0735632c187fd5dbd730e7396eedc346f7edfeb148120cd197db28b7c86c13b961159b58febf66f0811cc6e41f4e9851f6531f0257f93ec377c9aa989b120450fa553b6cc956cb2272dda3fce48a3c134e32d33b3e632a3d06f1e11c07998b46dc74740f36dde094b23870eebe748d9390630047cb6d30e1fdb550887a795228d7013ca2c14621928b437b2be2e3fbe9b87c5d1f77266427a261885db496115125ffff5e273a0166939ad95fabdf0a1a758f900b3e71c91581c88706a928fd388513e25b6886610c544fbd5ece45d5341687085b2b14ec4b16f673673ebe1df00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48400f4843be33fc123a481b1f95d6b0125cb1c8f8318ceb49d00336db18d7acbe12080e8ceaea9cbec95fddee880b259468eec818e99beb34094e868fab042c03b62de984d6cb183ca81985edc0b62d1ca4bc9d7ab88be50ceeca8335419753d16711871978f2d56ccbaf66132fe7fe84e8aaf5db15905f81b32a74937c1d57ac7f198792c250907798cbf4a883001bbaf6f34e743436219820db207684136e05d914db25c8641e069c8791c5f39969085412f619aa00c77514d6651493b269ca62042135c502c35282d9bfd0f5cbf20f156cff3577e441cd3b68d87e161e5973b40a11232b2f2adb11b89f1db64cabce71c9212d1c5cf3dc4d85b15660e78c0c9112e28e4b3b2cc591e4e721ec035bbca1f0de507e5d406ae034daed3acef631fb13a93b57dfc294244c05ad90524ef4856bc623e32e904f89bfd1e2ed1305c9e1151e82181169b4d74a5ab2d7db75829118dda24e46e3c8a405ac0c463ec343ec12e7bb32b90dd128fdd230579cb6cc62137a7d5e119de842b811ea0d865bf918186b7cb974467b3a6290266ae917bfed2a013eef870582f7ed7fe98e1bc992d223a25c274542fe976099b2c5eea27640966d2c5019305c33dc8128c1de742ecf12b5f890666483c7728e488ae8fe3a4252ba1ebaae819effe369cbadbb55dd0b084da74bbd5e16adb4d435b7d49ef7144c28f075cbfe2c6ec95a66f41d5ec28c1f8a16049a74da91b3c323206ac5303ce680dead2afee2831c58291aadfb0afa2a7f27999dab5c9a92095866cda63c027e32a21f09a7fc2e2bc4e5107a78e56025fa77a7d36bc3d452a5b30ff961669193c2962539a35a5265d0d51d80193eb327508f98b50e3f917a71b58ba684f5e78fbab19dda77bcee596324d3fd10915d06a5f9b101e6daff0cf7c86c96a6fb9de9a4328aa4a6bc4e791c6c9a36c3a12b087309df92be3d5ac84f557df51833a574be9452d515eefe5429776e9600d31e24772b55a028dd84739ac0baf029819e347fbb339c78c05d5475f1e5acef7a531acd95805097955649881aa552e01f6bcae7a1d998024ec56efcd122b347bef30e725744a6e46cbe68e6d07b7b339ff659f05b3e107cc1f3000205e9f5d030122448ca24ab63b7d6c406d381788fe04eebcc0f7f3b4c84e61d496447a8f783c51269da3a396fb4aae6de8221487c2dd7038614999c21bdf5702b7a1e307ef5f4031abc8b4a0874677ec9a45294eaccfa7cd3892c5115a18dbcd1d9512cb465f0116318e3364a6b1c362766a0cef5303b1e8a2884e2ca8a3cf2b0d253be93471b162a872e6b312b9d631e5bd324b2c1b6d4e1f870b1ace197e78b6a34615f72d22f5c2d94a764309f82568e55b71e72624fe35b4cb090a5be048f5ade0023925406b9e47b52a69b5feef1a21289234937d73bba02b9096f0588ace2c1ed2edeaf0cb701aff854cd87e8d7adeb31d984cb86007d5c2ec554d503d8a34b66037e3a2429fbc137b2a729d18f86cb4d28224b64d9547f97efcae952b4df43645bfb8e192d1fa8e8fe925d67f66ebd61be67151b3dd54d9c0e051edea0a67c9b67444d0f071aee2c20c2b87ed82f4a401207df5751e30826e3b59f577648a0d4e05e8e28b2f932c50fcda994a0692c5815555b137af89cc989b27e0e96508fcf8943e416d576c6f731c43d4ed562b853294f6d7d11147be8046f3bc52b28c3cc5cac121d7f60bba8060d886c42aa3ab4e3a4e10e065c379c6c14a0d46a0173c0935d5007079cee8117d4c3c9b5240082731d97ab496cb277501b610539f9ca3ca3ead2227b8918dffede0c22a46bab2910f459f4a0bbabf707ff70bc8f4a33ab82ed3c03b9a8a89a89feb13fbaf564d3565c9166a0266262a58958252b2ef87a69d27a0144631d7c60b48a4e144f42289874678537e510cdbd4f4d89ab82e770884d251929848988d87379c39609dbd6fba6f050adaca04b47f32781e071adf1125ebf2243b44f2cc55d2fba18cd5afda2474bdf942614354b93d9febf8b25150f22dd07f3661ce818b72f1683efd5b2c6abcec808ff050baab8183d12225b431e12fc175a47d322af26603335da6f35c3240366fbf8ed9fa4153388ab3e12b4e2b8be0f19e2319b18744f58dc455890866e58190b08b810bda09e769661f83a4c588e2550371b9318b11eb7b71c5417f22ef5e668455b6b01a204e8ade81d0e3ed2902cb91585caa0b465317dda04eea9b5c95f94b1f8658377bd9b87bdbb719399af16a1648b5ce800ecf616b66e6f99e39997dc844b8eca5e0de78a71f190b552b302f08cf25033b772912fe3b091d8dbae2ef9ede909658576a9d52b58053462871f69da30bc98080775b60a6287597d7966b265e014ad95f528799cc932b7d44c147f9c42d3fc003fb80b99b79d8834cf95687dd076fd5cb723ee9c641fed894e0aabff853d806abbd8d27e3057a0c1196640c0b8cf94ff4a2aedea31e4b9193a161cc29cf0b8d5c9f16f4cb6575f732ce642931a14044b2e31ed2bce7b4d574d161cf73d6d59a7f059a4f0ab8fe86c61160df19e6bc9c7931d0cc8b3b51741342eb180335acca91433ef615dfff9ad10bfec9bda433e9b210ae0fd5ebbfb83e620fe61021ca6d035d4204f1763f51dab428a70a9804b5f26e5e1be6067f24f602232a768070e0cddc4100370c67aeaaaf15bfdfc9208d106bc4ea2298bd896bd0ed98d542e71df1f6d4041c13147c58b0389e50ab963fd44e5e3002f970a746524e047c00b820bb3a1ad66b51ab55e1fc6477f7bbb56d3a77dc77fbeae83d8e12b8d6dbc68374e3905350ae2e78d0500d81611cc01c1434c676b9f7e40b8d0cf0e3a14a45db9b36f842bb209a0ec195fb4ce6cb3e4212eaa78796b9d38198cf040089770e1d03354eeb28b0ed2b498dae9b576c8e7f41c2ad9227fc4c3a3128a992da6d887cfff6b1ae920fb4584f7e96ba5d413090529ec39add90c684a8eb7ea006cdf52c91b10a76430a2b1761f5d32933304052434e2e3dc6d68787590091a287bc001b706218a19e19654e6ba92c7d5a0aacbe6894178e7315495f0ed130314c646d082299dd6c0dae065d00e928285e86a52404d568c10ef5771158458e4116f291fb03b35afc2b50bc5fcdcabb85da0e5cb0ed473e558c25905299286d910e3c06558ff449160ae8a8c6f99e071cf790b5f2fbe4235105262bf728d6e0b1544a2e721cfa36836d64ba796b776c2a669bbbb0b280ba1f3b8942edb67c70326bc32ffc354023e9c9a1314475c6a0577070787ce73f4c80d53c33a01e1f1602dc365d094b9e43da82c9018db1ddc91cf25fd67f3e7e40142c7071387f2d0a4195468632deb18c6dc3e1b175837c712019d2fa1104a3c0979b327f5ddb5bf8506e8f0b3a6e03b7c9295c770f75571fa3efa7e7a112567b7ffe7a5b108435af4043fd9aafd2c260c79842943fe015d3154fabc49e676acfd68c5cbfd7088d0511eb807b5c6ff81000588f95fd8b6779c3a4b36ed2a67ae82a6f3dba2ec6fb0cc01cef8dadc2702b3ab33d53b42cd13629f3c9aeafd5366cb4a1642cc5d4f843829b0aebd45900c4ccabf502a69b3b6b67e60be493ab3309a8873f0c305d8849d1575d9b12733566d12f6f435c3fa64d34be82fb2da574dea7c2953397fd21b1e0439b9b79d1b9be82f615e56f66cc77dfe0474f12e2cd8da45ef28d04bebfeac13f0ec2f58cf2e2afabe8ddb78cdb5801ef7aa6b315d3170074f062cccac453f0ca3d2f8a4c163e735b98131c728ae6a2ef99f4661197027942b4b09a0062f8a096c06d76d9661098667604b4105bc043e8cb7d1c72f62ef3c8071d9c0197a93258795ab28fd605288bc157f142149cde7b84d8b6adb78bf8e15228f88d6ec972c18bb00fb0e79191e1686dad5ac376b3f5d26316bac1114212c48fc603e27df2a085a7dc8d19f66c84aac8b988cc35d355ba42a8feed7dad4e4400c38a8b9362d6792f810fd3e4afd51ac415a5185b183d09e44a573dddd32430997c637ac6021a487d467a4f772eabfc730ddb890e411f6351e3a8b755a094ade632b03147d23826e63edb469e4b9c7cad74eb7ba43f3369889c366420359911392f470fe5200ee858db340da7ec76951e53714a7cd138dac43dcd3187d07700d591802e2000c4af4e871f3fa9ed99417b06dffe4612d15dc5daa8a38215f27875b135bd005102ef72bae7eb0cb1397b9d86833f61efcb2dda12ffadc1a4e0af774d714a0880c7610c84afa6f9c30960488a5c206ff4c31435ad2e830066e8417e4fa364cf30b59fc4e065ddfa7d528980ba0ce3c95931b19bae11230a4b761a6c5bebe965d02eb00e10d123ae51ba4ef03a8b7526548968265fc2d4d87bb3602a878cbbf361ba9d80954a976847925cb54619d645873ee76273305741cdfca8177655a91d4297874d68aa28d5683d58f7e84e99cf31e21d0b7399f9c33d18e25ff74ec09fa184a0f058a0c73d8a6305759d0f323729976548a409b2e1c5977d4111965f48f1a125cb31088341b37aaa218a64f8595f9fef24c47f470f09d3c651dcf6e8f850131aa35a1ab117b951363a3a5be4e1ec14555ba54590ae22cdc613d9b8fdbcb1cd63e42c02dea1890cffe6f0cdff4fd8395d1adda9f0034fcee9be00375fc1a27fa051a47c90f0d4ad9537b730259784e1293c5692a79aed3deb3407f80648005b6f6ac2a90f72ff7db5dc8029cf8f6a878968685d4883e98a23dd065397b6d0f8a6e9d26542c7194ef6887761438603439d28004e35689a724299732d094560ae019201a2e96e5772ffde7b50c9fee54142833e024e39206b35538e1b4ce8209eed20ccbfab9b879e9c0dab79549689f9c0f4e4160c50d48188bb559ce280c251f125a700040a053138d774a75b500956be5ddb179d4d6e6ced219973485032a0816b8dbbfee5d4a9644062894437b5ef6abe224309f6094393f8d02c73ac429e4544df81c429d011bbda22283b467b932fa8e6543f33e6e6db06f29caafd50434d40d2a64c8b76e8e4493b36a048a05b37175eadbbfadbe0bc07b1834a36b19ad0ef0937f85653fd04c468f57d1bb30f66ba1aab2c2479e0ff1a52de5236f1e066caad088031858e2f420db9755960bc635b9f78ee1929fb6aa3046d827231326649e03b4c4fbf09ba01854e76174f110326006ba4a0910840ea8079122650cc186f8f5dd77cd09a7cbcec09a00ccaae1517d55553b6f84db2f725f4c1fd62b4c81c80818f59c277697445f8dd504f02ffaa5c194f2944065949f87ee0dbf053a1f50a1e57ccccf8178d7b9f79add8d66a1ef495b5a3c408a295de05e05ab1d96ce6cb3e71707c01ab94cc6d44938f622a947437f4f9081d41ecbeefc80d70e8c313f506caf2e138ccbb8c1fac22c548a1cbf2eb7205ca4a0337a237c39f315c21c60da19c17c510c6289ea93e57bfffbaa5a71ade5395f01a589e38c9ce626e0b346bad0ee1698df4ebd56102dbfe6f17f283fdd5f808be0d71216be386d03ce4e3a00b1a85cc0db97eb727d03cb37ec1b9c7f94be1a43aadfaa95fa785d0eeb8379f95f580d710529fb7a9c0d473a9e05497a82028b08e1f5ed8a63ecd821e08883043dee3460081e5825a70648e7c308974ce23beb2d30492eb6804dba11adeafab984192c5557f3684aa8574904e37ff16eaac3cd3a1e50f74ed99b722eeda8fb4fa5180c88e532b9b5844ae3b81320cd1f2e408fdc9b15fe10652b5e1b872c96ef55019ead6ab1850c2cf489f841387a06311a527382213a2b938609003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000002f118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000002f0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000002f0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000002f0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000002f29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000002f141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000002f25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000002f12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000002f2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000002f189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000002f1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000002f05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000002f05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000002f14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000002f03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000002f2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000002f1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000002f1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000002f14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000002f2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000002f305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000002f280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000002f223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000002f17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000002f08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000002f2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000002f0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000002f0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000002f172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000002f0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000002f05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000002f137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000002f2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000002f2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000002f2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000002f18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000002f0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000002f204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000002f0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000002f1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000002f28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000002f1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000002f21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000002f0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000002f0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000002f107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000002f2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000002f09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000002f24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000002f03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000002f1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000002f205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000002f25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000002f283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000002f21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000002f094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000002f0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000002f1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000002f2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000002f1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000002f1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000002f304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000002f00000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000970725383e2cb27ed62ab1b3a95637e7db5ef52f0ac8e57717d584d0ee6317c4db90512fc0928c9b6a4ebf5ec67887d435e117347a1784c00e519a2f7ecde46e8bf3c8bddfb61dc419cda7d4968fc9f50da59bb48e89fce1b2b3bf441dd566510dd09f739021642aa596ce09348ed1a845c3a9d0b9f9c21803edf0686c322dd01a8b14856572044f177e5c7419a5cf9a46aa2f12357c4b38ddf67f7b9e43a40cd6628a0c90be885426a8b57906d46c1b594299e6bcf73f39f8e80dba48debca992d1dc80c7391a8ceeef618e87fc33410e2c673f066d0d16f79d9fff24be6a30237a8d8c279950b9f909a51ef20e3401fe1f29ec4f4fd73e10898eba2dba85d9ad2fcc2f00482557c96e3c05291391f251297a01de118a5f5ffb6879fe09e332f03747a66c2ee70bf35a5656e32a106100b60ab91d1fa47a3775cb9fec6d9f262165befe9192bf3855e190a721157e55379d8416faee9a1cf38f2c8694d4aff03f15c1aaaf746ee1f1eda906de31ae2b0a6ec92a3485ccfd71eb6eb59ad347acd8b6e68941e2f7702e0d332d891b98de8251e5bfafb7b22c58bdf6aecff2d017410377bbc9359099b47fe05c4bf15d0eb52ba027ff5a1ffa5f9864c55e7d0ba70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000119d3fbd080b115dfed6c49d6c4f7088f98a4948ad901be18f55e539edfec21224988b482e42d714f0982a1e42631eb5adf536e94886ef2d57de1500d7cb6cfdecc845c04f85cc2e60c9ec30717e334cf85987173b73832ce5b7143e9c35a8253937c0b4f5d7c90c5d43e2d393bf863ad66a7f67328eed7fd46136385ed65f724b814ba51f17b42d012cbe0170cbb199fc1152aa45341312c58a819e4b861e06fc4349fbf92d131755d2752dc77f186f9a18572333f608ce42526d18feeeaac14b9719dcf27c310010d615c4bbb1ea6f5773ab5499d0b5ab3ca995596c991f91a9f7287299832b44b718f33e61e0ab1c1f6f9c506bc20238e5bb5c84479dd8db81043f218b04b2c7f1b9a81f4ee028887ce833fb96f205cc32ddf4de97baaffdfb4d556ab82e89b1be7bfc8aebf7097c287d905e4b853821096ca27559d02e11862dc2ab7315bf287a1ddd4f94f41ff370a33b10fa58c8ca00b1718026944911c177b629c03e59d04082a7431a9afa48576e9088e5da756e334fddd9abe63fa4116f237cd08c926361bf008b7a085460ed03a101f58f11a16a6531ab2d79b8afc236d746c1e93bf4edb8e3b6379d4a80eb99241a89f137ae06d8fe3a0aeed8290000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab931bb3fbd4beec2aaf49509ad93e859bb70281c7d91619bc119fc231b6cf32e7db3a58ccf61e25bd54e43870bbb3db48568d487bed52fedd4c2f504f29a712c29756a827711c35d564406bd7df151e55de7f4a700ca0c97c57adf814a0e9bd626d4f96fc70981ed1ccfa54e2d884105cd1a53d364939ced6b86ad6e54319164ca203bb2840b5b5fd081a44ab8a77bb336ba677899ae1d0794ceaea2685e4fb396f4f53e5515a68fba8652641c8e4e4f8c6639c77c35fc8459388f71b390492e9f73d053ad4be58c4c93070c0b1980aedfc4cd412c1a48ef77832bc803e2100e7711b3e8ce4a6ff1b21b617e5c1b0ac3f18cd734e8ee1be29f3dd81739e8fd6026bc28cdde36a4dfe8a8994d7a7529be03cab222388561ed74cd1ef5d3f80a0bea230068b0be0a46949f17b94d6ad6a3f9c08e53c503c1e871d08e645bac6ccae53bf0244b292e9a78b6f216f18398580b48348faef30143e869f3fbf3c7e5f38b17464e5dd034d29d215db5032f94a27c3fcbae6b96d8c652f85ab730d38a3f99427682615bc7aa505a8c06cf3fbd7fafdc9a67264ef474691f5554c6b55bb455c6230b2ff9693559cb0e4825bbb75d20c15a8b621032867b9e68efc6a02420000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4b7ac1f1870d76fdea5e899ac1a82dc250316041650dbf3b8f3ff9696b62109f7fc21bdb96af77b75d762a0abd0c3e32f1b997400c517262e1bcfc86ead3a4a66d7cf4445a88821a0341118d45c88aff8e1c9dd552e928f049e1c3da2cb78dda68a683f18d42603214b40d27e3102fc536dd205fdcbef292f7049591223854e4ae20abd992154bd11d9a251e4dc46990ae171d96213755accc9e64509ef26fb27907c9a2668d8c5b8c13f0ebb6b8721912e1a1d2af73baeeb4e90b6beea984eed8144d8774b893b0530050ba5c9d5f1fc558f8e4da498ee114002e87692044fa42203882c00e6a73da89b8dccf5c1223c55943e2d96bc21b103f55b1a6a28a7ec382a934e0f0cf1f6bfd6191c00b098bf8b565f7a165a382852f987743813a88569b04783f0b8e6035cbf238d379f23403ca8625219b5f7da9e7e0c7541ef8f4766ba1b0635b4c03c1fdb008c526addbeeec09ff53f271ae3acf316e46b1df0a1a82065dbca5243564564f79dd00e1f7bead01a38071ca967439545a597d91a62f842ea88e3b461c93a20df547f6474a675e4e9d3664cfe273f34413b88b8616aa8dcf1814fe26ca77386f11542ae0d2a4c9ef5a8c2db498241afd0135029bf00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001617c24f7d552bf80721fd5e4b543fe6ab8d6438c6444b04068d3372c5dddea35b40fa3ec860abf695240519301c1e7a85990840265115a80f790e24fb14356ae09cf159f0e1f53322a8f30c2a24c13b0321f4c21f3a607c4e30085e912d155262c09423b388fb1466fe1af8a66abf69033a9bb9c649e9f485497cf5754caad6e9bff22f5b9ff80945e983ae935c6ef5c92921bd323eb1e33cf9ed5dc18d828caf5c0ae2d72c823dfbb9efe5b2c1fbf6d3c62a863c37aaa208677a6303a5849c0eafc0ac49ab98e263c7d22fa36cb0aec1dac776ced8c7c7d61d73d070c7e6b3cdca85976f7e0a0ec87c42da1b9fb9c28d5d27b3b5b5883366fdbd15b108ccb6e41dad227c6bd2a48d4d648dce95f3513e88aefac74cb5a80ff761917369d6da4d1d9f07b625ba942d4c4590658b36b6de87f6cb2fac036f18e1b7e0c6c6212dd6f5a62cb416129c15314430da70b69556e5974218680c388db79d554a1cec50b8166ce942afa2a8784a73ac9d3ae0d6a679a8894083b987959b40d227e4571d9b34a27ef5246f5215603c7a09ebf66aa247474d51b48a0fbf0d33d2bc4be7ca464e0ed3a7e20258f906a5cea0312399e5bae501559aa1a0c2688fa87f3ee2be00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e975d08a8d8dbe83b9a2359b4352e9274c3c13377922b8320c6010ff8523c356f2058443702a63d085fa8ca409bc8c199de3e56c3bc8740611d54bf833d541b2ee15cadf980e0d713a1a139540b5197854cdef9f64db861252a562dce730e38ea9c3a137faad36975881722c703759c7dfbf0715c3dc29e056d6c56ca81721d81d128406fa363192f082625e2beaf8f17bb9b09cbd6a59aaf5a58009f904eb5c45ca0f88a30930dc15fded699a4f2b306443c36af9e0054f26a9f83d849fdd700f950bf07ce1b10b801d356869a8f0a16ec02928dab4f3ac685f7b17312c078dad2b27a180f62bddac274c84d3cdb8c58c5f601897f15ed4e9f1490d4e69fc766495a0ccd5ac114abbb12c45a6fe4f4a4043179e8a657cd9bbdfe74c407dcdb2a98eba9ccce50f7466973129230492b40c079cdc82dcc1cb0461f266748a78872ebdb956a7b9e42fdaefbcf85c62683f395e39fd6407067a4fa7a8320bf8b579bddf708bc4d3438bda4eeef0de2869996ac2783a28ee1af33beb87036c2fe5687434c808907532a93d3de99f87b05d841c30516fa28006101891ba49fc1d4615ebe3b4e5fcb84aff47d314ec5fabc80acd5866b8825d2c27914b24902f0049700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002085934e92f763e96e3ebb154f3bccd56155df4999599ff46e00c89483c8498ca4d0be4a214efb8d9c3adeb7ba90c1ec6256c9a7d343e75170d7903e1a0849f18850aa2de41bcf4d85dce96808cbe71a91ff75858e00341bdecb9486378d5fe43e6d0459fa744b14f7f7c0f483cdfbe423e5176b42ccb8549d36439a8fdea90be7b6f280ff49b7b926a609b3dc15aec1fa128314dee59985e448b17bc5b50731a1d816a72cb3737d2a2d16364a81822d1d83a6c60084ce1555cb68ecd33d612f8aabd42a0553811f5c43937b8ca6895fe08024a835f3c3cdb3c6a503ace15589abe784b6d3d4fa1e326a82ed45d9044552314e1ebd382e2595554921f44bf163b3370e34c54b9b7811426be7b8cfb747feae47e370f63199d697f4928968e970754fc6742b6be7fdbd0532c7c8aa2501d12dd582b204813ac6355ac83afb93e30012544dca10feed071fa5123095f2cfabe25d541542a56acbdcf0809c20391974da52e6f1c44eea209e18704eebbb14794065edebc9a23280b91586b69e99496442cdd70ae0b9fcd363a398cbaedfbc455cb64c01fc5e468fc1f9c0092dd9ced7689b41d35f8349eb6279f5ef6a930fef31b38a0bf75358396d6312c35fc12c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018a2cd6838e7d8800f581fe4c0d96d717aadd4e1503636cc9253cd2c39fd55c83cae84ba96ab5f213b2d721e195b696d0e82bae0437f0c0d24b4aebb2de81485a55a006f05727d6fc4e5e09b303d47c3b84efccef424003025d1d43b1be28e7443e51c915dc0bfae8e360434a28b44e81e46b458214bec26f66646a6252155714ba3623455e9e736298e7d60885a1981b6364998142ab43e0e7fa432793d2d79eeead9c08f6bbf94f0dfaaf5ae92ebd7d69c1dc27b55d26888a6908032e3cc8d95cff1a118e08bbc1631e30be679810a8800ff5fcb099a178a1eb8f4fe2cdb188781bedd5c39890657d4ce2b076fcbdde626e102980e306a17bf956c1da2c96607ace29f65b11164678745a6f49d7e0c1ece9a986be1b934df33a2b8e2bca61fac2264cb020bcd5c5b0780a80a0383d714e26d19279be4bef80fc5a0b5cf867e73ab82b2141d4ffbf2ed7ee74cc8e8504e2adbb150a2a6dcfe3e060e8fabc2b86ea431a8c12da9d2d639dad6e8d95b529b885402958cb1e7d58096b2be42378262385e8cbf7181c18f2708101b86057a751790c9aa2efd07a0f040916cab9748cb26ab0bb97548d422df71e00c518242561614725650e6561368b40ada26f4d900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ed0311705ab49e24d3535886523fd4f12f083980e812212daf002569f1d52b9cc7b03d9fbc981379498e8271d21e8b58c805fcbd9f746fca63fa131eb0b71537590ffc239719c83ea5e62d0f6aa9597abfc9c06c77c439177684fe0a636b4069bf75c9fd54096801222d0a58871274a6d9335c91e0076f7400d99185d6b0b587878b455edcbcad151fddc263a78c0aa23d8636fe9f0a2cfbb94ec57ed8d0af6d203ffdd05e55a826fd13558c815a15242a5728df1b815995e3a7f99a981e96e0b12b5e17ccc01affc7e6dff407fecaa6e899f0ab87574ef20be320ebe183c26cba213b9a727ed7f58fe7ddd64daa55fe3a4f127cbd8cc781a2c39c5f0e5189898a2ad97b9ac4d5b4cba50eb30e2c4eb3a9cb23add6ec1824d29ddf5feec3b81fb2f64225bb0da6035fdfff9e9c0e73dcfcdac87fe48f7ea99f95a2882984a30e4314ac1368579e8e41d6e0bce4b39752782a8b740c22a92bface8494c2085057c646d64a1ee98d72e713009f9810aba89efa3164a32bfaa89dd5f40a139fd8eef8e3b410257b0d5e8e2df21a7fe799132d210481b9b8d0dfe3e1c35eb3fdb1e99d9218074075744acaa8d421bab9a92b971acd46efc284d67429972ed227fa600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a554fddff468808404095769fa38c42c55f835a01b3d212f853e39ff4dda5f9128c361f72020d5881d5f13e65edbd393564c6ee751921f5a6ab5a3e27c20f16701ef9d172b5177c76f056d923945ddc86f7d3bc72be5c125e0eb2bb6827b99c6d13a81d40c61ef686fd39424061a9b3fad97c0a6a92d8e22bead327ed007ddb5a610102cbeb4aa70f243adb67eb12cb586925c3ab4cb4a195a67bec5d05a319fdad48cec2277d4ae33b540db16a42e41c78577c3919782337154517a78f9886e2515949631fa4817c13b6c4bf90bc5bd5f01c73386ee49ce8af58e6c585b3b8cb3a2256164672efd8918a24f00d3687ad68f593fdf9a8c22135cc9a7e12ccf6edf16d1a4a83c149dc09d7a9910443a9b5c991f7316aab5390a53362688b7ddbca4323a2810b26cc68b10c032b82f689f4f94e6e706b4cfe6bba2dad7f7b000d651c73ce5a77c95ac18be3cba3e129980561f83b01e4591a07f88bd6b7a9feac1f3458423d6a041da2d1d7e4680dc921643e038ded14d29e3cb60b1940f3fd7de786d87d7ddf518caf853b629a3f5b2b660924cb6969ecfceacef2fcdd20f534cfb02670d36a98b7c66387a77d741f74d43bf36aecb36cf217e664700d22631800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002680b546431ad4d0bc0041a48fc804e1c91c003eb6038a6610684efee74f043b2a69c52dc858b76a2143920f8758081a64f49419603ad937f95bbc80d7b25526e78d4c86bc6b1b05c288b2feadca5212a8be1388bda24fddaa9d1340dd0471b0dfabc079d24d09b8e59231a9cace3cb0cd35e9b205ba374780ee0b1ed0569e528f338e4f8499c968a76faac4cebf9342a5c99b102583a9ba6b5aec6e76bc31071ca1caeef4b8bf37cd28978027a6cde1f2547ad772a17c8dde35b92aef511e3dfabc907d2bc57f04851434a5a286b5d2f6bea574429a3bf754fc0663fd01076f780be9448231017dce2255632e49f761efb91c749f1e7e6c77a919f7cde6741819f3b5d6886fe47250c8f6c4341eaa387a6ef767e8a6acdaf39e1c324ed681e6449f1d882aeda220b1e3686517a40b81240bd68968892ed97c7f1df2274514085f758d958c2fdc063f21039fb74d6504bccb364fb82174b24985625e042fb18602fd01013093e325adf6be9603fba7cb0b6b97fc2300c1b9c7ac42f4ab801f858b2909ac6c55188d3cdcca694236038beb07d0472a0afa6e4c215234042f1a9e3fe41d2a354073971e3a5df4ff11589e13cb34ba33de9e903ac4ff53f10af71b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad094d1c2ce10f2ba933fa5a86f8bc877669e56fbb1fc4d2967e7f782f063e872a15315bf3597695d2a71e5635e82f09f5212bc1e7e171cf15645a6cc6b68d18e67dc0f696d5f8db01a898ed3a8db871f7b39293b2ceee7e15a8a28f78e653adf65b9a3309e9a1fd12df74ad6dd0e6d92f2386e95d5dde58f87343b40f9a60786eda20ee317451eee8a7c35b1af8e6b20ee26436c1ef552541573c6ed7e066536f22a9f8b43f7439d84f046c45d041254a01c268d2170aab8c1cda69ead6433ba6ec89aa01a467d2eb6b4ea0623fa3f0a036a170c72b0ed395e0e772acf0f8868235ca6c8e33ccdff8542f7a00f9450b43bb566f4cd4915776f46b7463673c3b107d712ce797693e57878d615190491afa67b616cb75dd0eceae4e661b021af711d9799c7d940ff3c420975dff311c8fad2df8648b0355a279e8f3004afff5374a093a32fd0b2b0dd4b236df5cc8a1948c852cf0c2d0cdbb5079d2d1f2056ec6119d9bf2f3ffa30b726b0ea84eba06e6ec4dd18ac793caae09817fc75c19c4e64a50628274d013b2599877658466bb3093ba57424a7ab70f3affaf795a51d35f8be010d6e67aa2c4628377f7abb0404d2d9d151f51956510ee6a46071012f73d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a88c21e5a06c2604c23d2956f606a32d830688d5c3187cbd4c407b824422a369649fb03894241726dba93b6634616285af59da59fbfc8557d4e25a9cfe9040b8eca8c666ce619acf540cf331505eb996d513b113717a70429c7b64b97246476b17e695381863da005d1de6f33339a0595ac583d91b62e9a0296ece0c6442821b53577f923280f9b47339b8a601eac8f16dfebb77ac92c4c9095b2023c0682ca2d17d4adaba75bd27f2dae79031d2a28847719d2ca38b5aa0aee70479e2b3f56f90fca1960cb7def3fc2cab19ecfb309225b0f03c4f605b183127a9cea7371910922162f86983a699e192afe3674a68839e9e4e87cb78fe719bacfb60cc844c251f643d09cefd19e68c01d7e289feae5adac6a0304a41c5e99d31837f29bd0e8b4506e3b70ca3625ac5b2f943b4623877c50cb623460b6916a68ae01005e1de4d35afc2ed0b67f2cccafad9f175588923a7ef269f677e3cc5c7829331fc514610989e0037a55d5b65773a3e1024bea1898e5553a56d03746f9971d42986609d8d17aee92683b7abdb966314a1d2d49b5f1842112a3984fe8a54161c36b466f48c887fda4c4794be78ea7c8c0e2a438ee3c62cf103e52f2fb2c5f49913caabe7e60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000825e5ea0e7a8ff5f698c9d5efdd836d1ec42a075fbb1479de7f6fb9c619c2af89771e362cf5f95eedd19df2fa11f82d9641d8a4f8f31e2705337be2022d00cd898870503e56bb37e87dae24543ae4085f65462a9d7f6a948c5d414db3db7e22d0eca2547a35bb6e4a3be7444167ee80b21d35a85724eed5fb3d9eece43e4f7be177a99d466573a9e51bdd33e438740366ff95eb449ec9576aef6509cc3b0e2646639b71cf12e486cd1722e422ad87f53b952188cc3bdb22c46e6b6548922f93ab6d0e7e6cc06982576ccac703c382ca5d54585873ff0eb5d50702c2f92812ba458956c60ea50095425a734b48ff21a0d735fff6738635899fe4153fe80966d11b0cd9b45e234836030045cf68612b24fa8c7d40cf3fcf081ab83441229847110ce25ac3b7ab7a69f2a76ae2e4ab17386c0be4cb50ad01b29c4f1d8a80a3e8ade6777b65e2f41d698b5c91f71ce92d1becbe663808a563d403c70bb871362f43c0a294bc01b89d14ed4d32e772eb78aba6dcc29f08be9e3b2d29fbd9c0220c9ed927a4ae5a971bf44a454ce5d3d1ea8dd3aab4fc58972a5d9e31fa07f734c02949c2af0f3dc7dbdc7f37cb49ff39dc8b73d1090e06861a7328f150d8afcd6d85d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0fed519e71346b93bf977d67de60ffaa0c13e0637754878aa163821aacffbc3a5784641d289ca8a35394c9c0c6c370b2a7b14fbfb1fd3caab4b3188bc227993213a53249e2969ef101864208e116326615a517f6c3f790efcaa59218972714ab582b6df745c3baa1648abc23d65440f7eec2126b46e1afd355fbfed0646b6ae441118d847809919c0ec93bba44f7e9451ddf7d552f013dfda281e94851d158f677bc11c8c170b153ba1ae47990d57edba3b53075808f8434bc9b09fade411118dfac457ddb52fef749145b8f85f5ea5749c37ea569db40e19485600e1e42ebdfa47440432ae2df761a3c086569c1782765168faf6d79ea594f64885e791b459b80a8fbc5c07a7dd2425221a446570725cb66e3457afc038f82ae09ed8b3f7e4bd0a9ca3151499c034b4a1371a85f6aafc7f881658c25851edee7b010dd29740d1c18fb84c608a6994539ef9fb3da9580bb785850b29aa7162db508b20aa0eb9a50ed500b34c47ce46e2445e470a872b57b38c880581be67ce060ba734456c2975bb58c17d904c350317d6bd29215a7a6299ed27d11a942f2b3af938139f0a37a59c32aa3fa19399cf4ea1fc143cb0eb8e779e21773bd7ef586cf681620ddb3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027f1ee526e532cef7167a9e0b26868f8a7eb45b30c046e72c080870512c6a746a0102344ef3cf77697c21bb3e4f7b8cb816a1094b29e2fba587ef3a02bc6c1d8f67f48e04c38a58b9478597a130460cbc02a47c762bbb1b5923840df5967b9b54c549bf964e3c094a17935c8e572deae9f279000848e3d4702a608157969be67ef85cc9e6e9c4e7da50193295e913f2acc340585a9e9f621d4880aeed10d67db3e8a849dc696e870c5a53462be057156bddc3ce5127257dadac8a5a996f91f2441696a818446b7dadece6c9c0ccba5a0acb822354f9094d8b84e104576c9b41140edcf9d5252df2b87eae1a1b990ff41a50a62714398f1ebef0b3e33d44f49649c6ade08178f3bb98ee520239661bc9fecf409b9394542bfd380834ac592f5bcaa2cbf19ff4b85893169759844a1b455fa5e4ccfca6af897ca70bf78a2cc4ea3d018c1c126c91b9ac85024a8467f17a667cf3ae17dc34570bb8e6f476cec59370772262f1c6b3efd361234ba51fdc080d6cd1088f0401a62d8c5411a20e1d6067c8e87cbdd37f4960c019cd780ed3fb12ce64d04971368ef201cc7cca79f1ae5dde9de3fddd77de4bb788a64c59b7b644b91a66eb9016f00023084c3221a5c8b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ad24f1c758d269c841b6b2df65d5d04074faf07ca4e8e2f58b371f22ffcc14ab6b02b378e6b4ed2257c95bacd2f6c93c84bb76b55b9314060648cc3560fba4d09e81391be25cd16088d363e957f6b467f8fa22e5ca8a617dad5aaa0f003019ec666e8aeafc437899fddf7e9ba3ad14676575b9a2b19b63d0be472709abc47bcfc01a9f8e15f967771a8c22376c1118560a7d85b398a06d053049ef714b1c8d89fa5813002ef8778cffb1ccf53e0e16485714faa10de6422b488b2ae59090ba56ee18a57b3cd3ef73da80c5978c52433a73d68cd780e0d9afbd938c2010441ed992cfd2b87abce2a7afe78addb004c13405ad73892503a5286b61b27a052f8d308cc8291b6cd512c9f10ae21452986b4c1bdd58564562eb94d10d96aeeed546c9321dc89b866864962a2cb564975564e49f5d19750812927eba41a021a520e405677514869c8704bc8b485368c956d18ab8a25f84fa4a8a4175b7b0f6f6e36c12cf20acf27bdf77d750881025297185e8e80daafb4ae460fc7aa1207dbe464655c5fd9dd1e9a1d51937166008156c7bf698c712ef9181c8be626cf94467d069fc9067a22370daaf28b7f8ead74ddfcc80e176d22c9084ad8fad57cba8f4f87ca0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000218bf56c4f6bf669e53bae63f8fb495f74508017710766426239998c22b82a4092816b6a4f1b3fc2d63bde3dbb5b75a6d64922affcbe09077f1225c50078ba2f066a500d343d657ac7b61fbee2af55fbfbba328eef434536d35270e42f2dd48e850990dc65db4ec7a83f64e2aae810752c0e17b64c99676e7cb75ef1e5da3f55d2caa506a18066eae9bb899c3ceb4cd45aa502f516e9313c8bff16a38b50d090622ab3f12f487037f0705ae8aa4b1e6bdb6d2552576243d9face8389760cb230d17693fa62b02af44b63477b4664c5160011a8d859c3ca034107118da1c784febdc5a12a00c07db3d7bed1771bcbf3796f494aace907b5761a0fc1409d1d3bb1a187951c87310670a8e0ee72fc08026c821b88cad4129f3ced8fb6b393cca3faa63ad1a029e59547e4349ea7a5c1afb2eb06f5e8e097d5f394d19333c94a98dfa01448dd1093746b764832b85299afd1c3b53bc603086653f3229d0a676eae66195df65f0f005827004e2e5c3c4702bb6a51587452b5fbe62df54e0f531c3cee3c5d00578a1bfc7a708b956564e441953ac826472d907484a58d4a9b0e3c47da82ca3320c18a8987d132e62ad39d76375afbbd936ee715cf3c25fccc8f65eaca000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c8425f5ada78b656ba8a8371a3094e443020ec728ad1a814cddafae5d546afbf1d2695beda44bbde826843ddde20ed11d0efded401e6d35fae8db79def7dcf1d9a408a78905ecaaa86b1e39981200632dfcd2f88bdf8ce10c61d200d96cc07adfed3f09749cf603f38fc038358283d24e3b083bcb2df6ecfb342770405c0f07f32f73cd9cfb581eb48f172c28dcc512c1b5e949e1f2b5f5a6291c730bf994d646e9e9b3a6adaab95e959e16b7b77d78bc83345fdd7d8e5b4a2eecdacf81e2c7177f8a72a29d0e4c23c4252a3a63071ba41bf095834f073d1ad0f9c94cd8585b985ee82cf58571eb60d92a64d60031c620106b07b6df539409d343a3681d56b20690aa668ea2ebea905215b0bad629c4b001fe3999d1f3d7189cfe4cac9f4bdf02f35f06e32ca71a4538c3101121afdb7aa5a270b212118c707d6b1bc6f17ff6fe5bbe99b45c947c6db41e60776eace4ad3eab15b685e3963108be1798a5cb24022081b4ff4fe05ecd8424d517e1aebdd42c3abda99a506fbae6c4db98aad3fee75130f7c32e92a1409685cfb205865083c3bd393c04e0e0e32941258a1c3d23b177087b540825376a8df560a0e95dcb0667a16f3ee69709e7caea6df9c69fb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000137322c7aa3108c0c857330e86748bc5f8b56d90bd27f1cbfa8bc02607bd0ecf2f4ec282bfdbe37aa666bb668f50fe42f33c7b4da7e7202f06969ad429560ec24d9938c37a26651a2c1088a8f82fb0ceb4a4d90cfb48770c60bdd13f24af09939400e520703994916bff5aa498bb396d6d933c59e696bd47f5448de18334f528ed197aaa8cf811cec1acd64b53fa0d50d633ab98473e3ebe16624756af9fd725e48c485dda150735db1e334de3173a03c1d9c16697d6fd669d908098caac13c1e4c9fdcb3df0a86649fa37949717f5a441c90d19210e6ec4895652d24106fdd53cb3c02d1f885d0fbb596c2100296afbee143e81eba3d96415866eb91e97ea215344ed943ca1eb64bb2feed9fa5568842a6db5f83a198b0a0ee92051525d898c89d7279bbc98ef1ed324ad02e4a54cb58925fa6ac05d4c2791bf6c2ad13f633793d5e8b614d9d4537f22166afc788452b64332455e36c5e3b66b0b17a549e58e7288cbc8c14f316a1384af0a9d580b96ddffa7c75d0c30584db61cf9df4512c149d8a417fa5be960c48260b925bd73a1146cbed3b808795b7f05d1f800594cfec91101d47a452acb7bb02f37930db6d34ff1f27b9f90a40441e1de9ff49e04d500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000510587e3f4b7ed0f4b501425403cc656242c590c702f5d99e37d0fbca0d77431ba34116b2f55f745a94536845ec1f97962ffa9989e5c7acff81862d2fe5fb88c06741157f812a00d81898067906865675c792e0c7af4bb32f93251d48824ae1c3b5d6248a7e2d5f797ac9fd5f3221d08af3a44d9465f7d6915075bd65df9965d1ee338de8630bcf23c96f93c604678c4c8c561fb5562259359cdec8204c7ca037d072b2996fa95793bc8f98a3e11a4b545999a4cef89087dd8b9ef5e1d39cdb6367061664dc57106c893bf80a42a2b2be5612ee363ff83859a6633714e1c660b5290ff8f1ed5d26ec7d12cf5cc346ee551fd840ce4bd1e32d82d1966941a840249709fcc2977820486b152e7609ed83dbd2b7fda5de1695666c67556c042951fb42f225a18d5d459dc2cded81dd750ee084acf6f51c6f63984b6ed07953918f1f0185417df3f62a5ca1638ee1a7732377cb839b03c44d05b4518fa86f5452d041785ca7e9c0c816cec8202fd042e55f79b9e591899c834d81b02c61fc638b9b872c34c064131980a7f017a4a67063c8fd5a207081494ae6b1576efcb3c14168d90c8fdd00cf1bbbc8483b43b76a7b38a546a201f36301a987e883a04967784d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae979bc90d5e92ad19a9e524e5a8a69a8ceaf10d020199e18dd093534efff5f05cfc7c88d2dccc01661c81ebb8c5f8e767eae3ea5c6e516232aaf9ff09e7612a49fd56a03acce85db68032e566a9e794f1f572df69dbdd9bb9931ff5bae7b10ede808faeb58c9c5be300de69b76e8d5c306061924555035100a55c5ddd019bf116491602ddc2d4b0d8f9279359b7811590e53d7d50e86dd1821ba962aa147c73bd03ac734a30e76aae8bf1b348fa2bea55b1eba72d38400b447f8f6123868f03c9ab3f6db3ad3ee01783fb1295e9afcedb67803e036eff7fe42361720304629705fb47757200e3929f2ed0be3baa93c2357afa2e298fb9ed336f71436314ba7b1b5547537335976efa2290a78721050e867d423250aeed3f1e62e8bc920de0c1eece08d89589e3683fdf01e710bf27cf6217e70bc787d428f77d8fd653093879329ba28f4dde6287f7676e9e92a4e7c5a3cb401ace01ef12480b00a6f45baac5b94db48b9677bed69d69c599d10d7684eef2fa05735c87b59ae41fa2fd51e81bd33b3d050877d8fa66186dfc94a7b05cd85820444d2e36f8b7aaf044453fca940fbaddbd0e10c8424e252aef5a3932cf7c302f87ecc15b66637274b344fc0398000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097404c71a446f1a43062e5d2599154ab1decdcb74baef50c3f9bada0e03f52035f38ad510601c0015d179bc57461fe139f650f7a35ad60ec74ef51540bfa4000da2cd4096cb38cd1c9e0612f63df9f2de7b8e308a51907b628d74c0166b01d11c54344db14865b6e3e71ce372d290941ffc5d9b090662e9e80479e7db0053919c600dc6db511655a4bbfec5dfa824b824742e6339f8e4d98f791f8700b49f95f1ea301ccae0f2a49f7766a47777319961aa3e5da569e87d3f42d39bcbbff5d894f6fbb30908ee86eb82832b25a2b28d4592cf5bbe101328aba83bb7b8a8e69f7d0f6d4cfe8fc0fe18d1a1477a3f466fbbc0ccb12e47635a1a3e977d9d727f0bf4f150ed2ba2d56b0999c36bf7df8f8532c2df55ea439fb9580c188bfbac277dd0e3c411edecbfb03ac30c5d3784c8662cc294e5684294ced2d238fecead2395dc49db3d338ac3cf3c87967d7c196c0e23814c0915097f214a564306f1e1ba0e8906473b9bf7a3942cee97a433f6c9a70c83a7d6d4b938e046820c7de0c0ac86831251214e7c2829fec73a8ddda8888443c5b239350b0a40ad4bc49e58d9ddceb1344dc6637d898f7313adb3838fb5da0e2ed45c384933c56a2d173e090533c40000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007cfe0021d20b9f13fef1d296cbc023c35c70ca00bd26065f76eb2b7e510e16906f897e1fcbafa7b7c3dac740add33f4fe264caf6fe27c7ebc2b4aada0a83fd1e873c656b6d47ba2f2b60be9ecc3bb8a50dd077e95603c6f607752d406e3214493c0adc99a6f08b4dc5a240db7fec380ab8a4f22a5642a14ee31f146b17fb1ce2adbc9f01b694e79d08565afeed51488f51f4364ef61b8bf986357813e365b675af0634bd4a0dfa9ffe250461f7b1968c64320023a11141ea323ea89ba5a1cc8885419531cdb1b55b2c520c90244fde45fd9371c42ee7685781b6db5cb21412e6068e5ef12988e0cae6b8cbb961e195b3ab8594e0398ce4991dc9195528e4147335b15aee825f6aedb5bbdfc3d9189e9beab781cbd0657ee589217bf9d2ea1becb2f2a22e500c66853e47b950eb03484b2334ae73081c93224bd5ff4793a84d5651098905edd7227bfbf1223cdedee0c1e185975093e8cbddc8a5d79548f12f2f3f5d60c03e6488dfbb5cebb0974146cf78ae1441e5d935d8c745931e6ad5f4fbbd2d4a7a01cda0787df3660b048573a0e7eeb70e83cb80cc69a552e28be601cf7a43c681a9bfa57054db73be63b03909b847f1611f8e8b86fabc790167e35d10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000938d1a47a2a8bf6b07c7a8bfb0d3b381f320aa8029dc3427c302add93bb4de0ef86e35eff4a4db5027b042e326a0182d4a70aacb2a35274374181433779f0ae10bbb5f5bf19e0d6fc5ee40460c4fe84f15a57d2fd6c9ec8f14ec06e138de86f0f825f278690569003360c34e351f27eded87224a86e4e6c0b7e2927159ae593fd6f0480ad7ec903975c88a12402059a1907995fe5847669bf746967f2804eb9fe243ae46ccdc2b5a4164e8b44f49155a5efb8b950ba7cdace6ad9216ae19a8f579d827a23b5f4cddca7851f0fdc5b376da104e624415d9e7a18b622e58840bbf4276ad19dfec815977ca6dc905ccab4316303a004a12370fa7ceb26dfd7d63d97da4cafdc3a4699b92e1560715ea08d305bcc8e53742ca0c8014d52c3dc7b60cee6fa882e9f738d4f1b594ef5030f3d1983d97a1504d45d9481a66ac602491556bcb5b1212a06819f3563c35d5f85595db69fd2e3b30f8bbc16a267e045556fa75be5dbb3b6ada730be860f2f618fc76f8274f35e25c073b79f4a8c52d278672a06cbce97a5498c7cc66599f44b161504a8ffceb45002aca2abff4c81f2d3eb682205bd3b620771efed940d48bd797f93ca2bb7476519f995566717a285fb5cb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000995d2ae09338886def5736b4a293467b8e77c008762073107ed67ac536cf99642926350189cfbaef5f21599db4f9b03d43907db0bdb1f34fc186109ebdd203ff770d4ca1b85327658119770bd1a877d2dae3e5630a6938f4ff3163e3968375e2cbf746f6ddf7b6d3e64cf470b87ed68d23bdebec6ff6a57d922a5e3b051fee8ffb90a9ecf28e27086ad603a574c3ef7de43650f2b8cfb30d76bfa2b28eeb79279bd949fcb7d6143383fbeaf2eba42d1ac11279d61161d5040807ce510543af7cc0d8f75f976e890cef6f414c046f64589abf162619ae364e43871c4bd2cb85ab8ffca04c39ac4ce2148eda3950f82d363c5e69496dfecd180f7b35db0f7ce943e76c4302460201c6e80a89c1994f59228a3449ae882146479d309c48d7c68da01ef0f44155c9469897c74aef2da1f5299a21378d3385600a548ac1d6ea11d868bc8fafa8761f4c5a2cfc8a34f0a7921684539cb3e2207b7788c92af47999689042f34353e11d24dab7ca6ec3d1bda7f7669f8126496773d42d8b6b5f2d6fe4e5b5eecf92c87accbb30c5072bea859ceaeeb030ce7caace350d9c6d361d9fc6694a25b70911c221b6bbec6e77a2f91ecad8d1600eb5f2aa7ca6f97b5034eb368300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002de7bb11cb59beccedaba585ce624fe3f510a1969702c8932629f28b44687ab71b328453767734d74e12e2eb6f1ebc56dd813a079896aaa0611bdbd2d5b3e38b924d4e67ed5adc2f89acd00bf8f865363573d32d8cedbe82ea879eaa0549043f8206a0bf3d32e0308874dbfb2094ab74bb741c128e238b157da9a9a87da387ea894ad934fbcc9c0ee4347424a8ec6a7e34204a0fa27430d5c6e1ef008960ab3c4d7ab804817dba1693e2ee4c177f542e81ed286229dba655e55e207b426192d2a82f0bb5ac0af08e94bfe7fae24a9b4e61c825418c283a9897cb5e91dc6a729999023969c7c85d91bfc33933c3991ea8587cdab9b95bacd6bb463cd3d6f88f4e6de2912d4f0e9a31dd2c45c306761f041744e3bd685b59c338c6c244731d1c4106daa15170d71ea5b0e6f7dcea11cb0fdb7545419d41836e30e5f5f5f4c3b3f69675c701853bd748a9af24e77b7dd69e582b1a3ec47730a6bf69a247c1c1c239baf4e1b7126156405bfb22fb23f6fb298fecfa055d8e2fae92d547bd7e46b5f7e38dbd2b6c36f99882363686a6fc8539343688b040613c0f269a554bad85bcb01a61c34af03f506dbb581b2a928bdc9b208a9adc03746e2798139826ba27e32500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf4a42b3ed076cbdf2ac3553daf68bf78aecd56b59dc5031f52c5fbcd7f7c8cdfcbfda59340960e56678a3fdb89ff34931eaca98ca05b92ed3ddce24ae9e5ebdb13b888b378acb09c0f9a5a89091bd376a32071d9a65272f30ca7ee09aa2bff5f2b3554aa05d7e5a74acd6564a3b07736705871a52ea4f075b01bafefcaf4cb19206ab726731fe570808e3910ac1e6f72b88eab291b4617cadae7ebeacc5a0bed77d9aaae798351b82a96653bb69ff926b4cc99a7048d19ecacc7286381ec02bad9cb4c2f5b8f96c172d62684feeee4eec62f08e35232fc0ab3a479dcb22e181f905460e296592e9c21b8175a1dac802566774a6460837c55e61230ec7dafa0515d5dfcbc8d7f64aa89cb4891a1f3c716fdf457b4ad10d0214175a9f13143bc496b41ee4793f53aa718436d6babee21db5540bbe6eecb0d48d863f1d4de9878b483972f32284cda0674f9af64eec12549baf20c8275a15163fef4130d8bb4a06280c70fd705b0e6a92777c71d8d6a3fd95765eba722d1abc1fa892afce5b4c2e10fd6f74ac09146fa740faed57c367412cb063dd3d308ec22d68398be6ea13ab863a94472756707bc1ccd2fc3a93c5e9edb09ea1325070d2e873148efa46c340000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5a51379eb28e1e7b2c32b6489c04bb497d038e494fdd1062f96de0e0dfc9f3b9ae64d6ecc9d44379c4a83af76069ddf627e5613ec08f1b0488de9515c11fd28fa8be5861cba56158447045de24a39e8fc5f30af4e139dc3fc32588133747b53591e261502ed88d58fb02cea54e390955a5da35efce76449fa8ca4bb6ae2e28e08f9ac6675dbf9cd388b1949e8c047592ba055b083ed80b80b198c62e7f41846c108e0a048cb167d912c6b636ef6f45f0b53729561d3e14e0d6ef68bb30ce5a652381cce61f855e5f7f04754c2d6b4eca07b186035a910d4b2f5326b9c680b768cd6806d9f4f2d08c6a556dbe6075a008d6b97d3689755c26976d4f5878ec8198ba252acf7accf61ea1d71f58063e5f3488c12866d936ec9a30aa3566c507807940a3749c7f276805d4a55cba8cf59e5cde7351e5d65e865fb259f8dbcd38d0f1b13b744bd1f9d4f0498a2b445029e300686a1df3ac257e25a322d993ed88e90f50c325b1656e71595482ddb5815693f4b4fefc8fa7746aa00f560afe8b913863d02b8f397baa991a3253eb5685894c19f75ef781695519d2b4fe7dfe76eba6b1119d92e5492c31a468802d632052de806bd7509488cd8cb919ce186ed667d8b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024fde06b6a39012b9868accc99b40e3b8cf1c93e039c2f01fb09970cd6765ad74cbaa1b0dd56beb94e35bc06a7173bd7c39898744bc2f0c28b196aadaa002809631ed8cce87b09d24a903efe6726b32f3e8e20b3a485b5ef8d06c776519c30c052e7eb583ed7fbeb556babd6249402314df5533e1925e722363592e5cc5876b8e88eec9d4c31a5351f4422b889a96e54cfd72bd05796d8c3f4147ebbbcb5bc4c5669f58c43bb3b72eb35df517b81bb3da9e3ee190d7502f4cb3e705503341180a17f73a8d1d70dadf4e2d84dba9193143fd8238371ad89241368646ed2beb16b4958e6d9ed58ff0085422d05bb432cedb77c51e9559f299b5860fe8a0c486f044388b38bb1a80f042ada6af4bbda1e1e024ef475b8c21607a17b9cb123262204121a5955c0a8b2b6e1bac0ecd204a91813a907eb3173246a4e4a5b9d9abf29ec66ce131f8661c9fb94fc5b4b0bf4c6c66f105f2f0e866a59fb574a89eff895585091afeb329b5a846b897e550422ceaac7a5a8841522c035c4856cbcee3d731e3015bb533d5188940b8b71b71bd3f7390e4e75a3825185fa873373791500ad87337a8bc6704ad5b92116dcc87ed71593fb8f5f2927d1d3a0744bcb66023d092e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090a6c41dc60f876953822c332aab2cbc57190e21f9e030bb2f70264f97ac66da2507ec1a27d8fd97bc67452956ad93c1a051587fb8d4b7fba390a2db86f933f0d9b35847a04aa7bcb0194ad9d981caa5af37727ac213b1187a63135de8a81939a8b4b23316ddde20a9ec2adb8510d1714ceaa3e5df34415d5018d4785084d04a8bbe996a2b9648d96e82585f0d08b48af9318cd64ecab6712f167ddbaa905a772c6cba27ffab7c8acca408f990d8b7c1ad93e0715642bcde334436385dcc514542fc4d57b8a864b69d2669a3cc72b895d9e0c8335cb186caf48a9798b81665f3ec2de7c997619603f8852c3164f91812b166f0f715ca44bb1a76456567bb153963d0d42cd7483084c895f28026bb9720b4075935b7be8d5196d0c7870a944fe9951d83a69606eecfb577a52d564c65b364bebba05608cc8541ebbfb066b7e2544bae8eab574c1446cd7b1248f30df57dfcbc5e5702040b33bfc878f2c7951be698a0183c3cc7c97c70bb15a8a346a9a5ae840eba57eb9f344cc65971519e93c25c71fe6c5877de6df4bec59ed7d6cfd2c277eb75ff7d56bb787d5b4511cf39a22a334612812f4d180adf8272e96c1e1275398a4ce042241fbc6d7be74af7ec3100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002719774d22e47c657f31d61eff2215210c657121bf3655320140fd594cf855581b6c0f75e8c39cf40842f7a12867e69678e7d7dc4a04ba5ee2a51aeb95ad7ba31e36bb6cd9c997c63addd94a10de1f4987f2d41c9e7b947d68f290da3ffd199f93c0531ecce5ca4632ea4718fe609d58b928c42697fc8f4d17d7a24bba53dd26d41649244acc084b9823e90db569fdc4aa390cc9ae34e20f4d990ed1bb89804614757dcdac0f22bac28cc36ee2680ab9f05fb8164abcbf95d7ee16eae9975983916b51624ba9b04351016c27b3db29db6eb2cdb898127cef160e239b0815007b3b913e63a5877676a3baa6b3813abad6f03eb23c63c24e9d0117b6b1898dd84749276eb78cda9692f2aacd8b89c993d7bd08fea731ccd1b246318f28b839b02b22c999c8b9c588141e752a3acd65edf5785eae970290b35ba0635b9e61a34aa1af944aca09090446c0dd6ec2b20da38fb22aac06246a1b24c492494e28c576082f997c5907a30589242c37893d0ac2e0172939da18016daf9cb04f555b397dd41a6dc82d009003019f4269824db8e6e1db92113ccf87ce2db293de8bd0343e0ee0156742bbed2f0d39864166c4eb79feb8431e462993d87aae1e09adcb971d2b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208faf06f76c8204276fb5acfa9b49d4fa25c6b65fffcc6f9589bc65a6dc25f26f2986ac9f5478b195e43eeb1911b0cca6ddde0edd508f79b4d0c932e3f243ffb595a8e264288400738e5d442155311884dc6ba6677bb78245e8c4d74933cabbc0d603c79049bf259ad1a6ab2178b451118f30f3eefd751ba1915c20af074ebda1f7397f980626e00847e5a879d9b691e6d89bd4e895d64276d974c4ccc0093a0236d4d0469305e3a6fd968e4ee61d65f7e180e48c4fbd083a537f90850b73d6788ba2966b4567ffe742aff5c7563b2abb87ce65be8e77ca3343c46ea2dc6449669ae982dd61b0ff29becdb5e7786d9650218eecad6ae1dcb53bac1cd3348ea23c3e67c05ec4c440f1e1fb1348e4d3e3e06f901ddc61583da6126a9ddc4f13751a121ffa5e265acdac5c12d0f4e80b0868c5503589b94c388fa23f76eef06c625d892bd3da780ef725981d6c01dabf80de5c7966a3285636a7fa757512217c9507cfc45f298763c8ff905740c23f8c4d2b214610a53f200bf9bd8cc4c6821ecd5946d0d40f1d88156b68740211be398bb0693ec38afaf35cf9b8c0d1db472182b38fb90698e4a18ce21be82059ee099c0ba615db325d850e7f8de53593a38b83000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021872f8091cba863a233bbb8087461687fc23a752e9a367e1af36cb0450ac65f75231be1ec36a5da173e4fe714e5729415438f676d53764e16e985e3dd979b4acc2782b9699f0c9041357c52759a04c4c5d4eac2eb732a5e2ca7e60b18208752ce6659b7d34e2786251e7cb7fcc5d795990f353cf477cdef6990fc76e4325d3d96df27bb7bf415b74b995c0d21739478831c802ed5729af6c628e0c6e15fb28be2206f165739f8baa24225f2028d65838c717fccb6c400d9d004e9f13e80b35b5aba567c72dd9d869cbba7b46602b4df3d37dcb278c637bf5b988f46e91d5294296dc1d1d60223f6c37f5b2dd37b7d30f76e8baa932460ccdadc18aa86fa09ec0c2ac8c73a64ac8d95f1237902768b32fcd383b63bc13dbf74adae7a980ce17e54f08006cc32c8b4a4edabda4657d4419ec6dfbe0e5e3a15b1073325233bde0cef89c9be6695fed0ad69b9263fcb5a365f9feda525c808ae1d832caf2d6e2211d5ff21b1e819b3370ac564ee8e5fa799084abed7752478c90a6e2b850554b143fbca9e7b0f99f133a7a35c8cfa2abdfb41228a1fd2a390a7c6a6de535903d95c2f7b68bb0b69ed6238767e487c0c2b6356a4e8ee73868d58c462de27480f9a0800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044bda659cf68295227157f60f45afb50ff269f3e3528e73a69ae8f2bbb5f493eb6174e40c2be9b937c7d4ce2b9c364c478c18b769ef8c5e150ae0ae23e3369a110317cd8b3452a59486866b1296ec34d58d1612eb41851d831d4953b7c98428c4a36a90cfcc6b1302917066c35a54e15ea6152311c254f655659c03680d6ac3a9686decc76b4891644722e0c9790885b260509e0e99bffece2d2e65b52e9e17e620cb4e0030b357dba3445fe55a16ad3375081c54ce54253377678afda7210dffcaf6a36d81b28a002e6d1379b610ec2a815ca296a4a8a77c87aeb7a4c4ccaec3bf36606d7876b9d8968132c44bffbefebdfe92c3f16b2fe58cacc75a6a742fc2c47576b181640a4d0a1aa6d0fdfa6dea77febfa515b1f9f963e78c139fe4048aff03de1ca64bfc95363f3a75fe048ada4e8c2d29321888f079d2d27269c77895e7cf4ce904e340c9d03e98a0a2831a46975d71a029044419b31d89436d77f2c911105c828bfa278bf94944cb84ca92dc02656c96adcaa9c6e43a19ce8c6dc95e8e2e56a52372f0d2e3ad1863531be621ed2b6b130ca74954ae2d3971da97f808613a71a613aa5b5df2a8b762b74e93435ee7cc298fd820b36f816475054940000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5fdd663cb85dd92f6bd53037042ed92baae5a973453cf9356ce21689bb013c4e25e12404f66dd39c330c488af2dae60a7feab8e8fc77d262e24cdcf8da82692b12759e88e75bf323507648831a6e0f739f24b08b2a1e9af2b7d14462899d09d533148b8f59a74d357bb5df117f0ae080052f32b110b80a4d96929e5168edec8b8d6a895d628beed03c8d00dccfb67b356e6289ac7a295d4da785dcf3779192dd60930f9efcf55adb3aad9ace303efe95b0cfed9fc830537eea7e715c97387dc040a72aa77c864fa6a84a78e88a9fbd74d734e99632acfbaf1f710704c993ec614ae83e84daadfe7c1c26a9439afa100d8c1095e4608367b2042e03ed0ab3328bb336807732f393a643cdcad87bdac07704272916d245ba39ce61e1d4d385bdb0efb1f02d4a7381a5d3c5582dede24667b91bb023f8819e61fbe24d3df11ed392deaffd806478e52708c848c340bcdbe7a853e78de3e969dadad288a5526fccc1f0eecc0c3ae29f74c619ffb2314389169e19ee7cfd164e2fde32b1dc3a74d6ea0b079aec89dbcdd80e3eae044975241f778841e5836f3838753f5c574b2cdab9a0556a7ef2f41dc63ca653b8d953d1660b70830a6538f80c31b09375c53e3d70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a33118907d11738580b48d2d41b0c5aa4f4fe4635fd372651816a3d5247b53c067c11414c4b2056c4fb5931f28f83be5068d59f0dda4f939d12d9a7e8f00fb8b2ee1a35e786fdc43d554c24b554b763eb2ae1b03e4b2468081c9f2de2020a95c858976b1a5d82e4c0482f48017eecc2015a402fdc2619a028e67e31b6b294a32415cb3d82feed0f89b9c03913ead262542b5b0f4c1bec1e037c317c9af49fcd5c7f8d7cb540aa7605420cc3a61d568f7f894c62b7e674364d7fcc38637724e225d61e3b950ad64004a684d610ccb9dd05506b2d6a3fd354772507750e590bea61ec89f23b6acf52dff8328115cd52887840fffa303b627ed9a7613719f0eca82c7aa0b3b648b13f9e41bb4df005473eccac4d67ff8c8b4f8d207ab0780d87cf00b8d0b626f658b58d65970e5998b1d6a677b180fbf04e402736bd015703c753b464b2e566a9e2417c043782fcad7da843e8ad97042344df0d68c16197c562f35f3d568bd6d1fe9efae21c6e5410b8ad40f0d8745a6009cd438520a1c36469d2a5c43d9a84a08bcb88ed0ea181b62a70d914747bc505047f4d853d1a7e766d4846d704bfe23322e5b5a77b1f54e9a7f442ccb003deee10c3231cad35576cb594b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fa752e748d2255b97e8de96e7ebdf4abba81aa716c67b0ed8cd220b9bbd765359fcbe1306fdb47326bc0f0d74997c01ce2a62d6f06abdd503b2157565fe9fb2fdc6bf4b5e69e2b1e626bd2225ff4554074203d1849baa4743e86e362a324a49b60f9ba0054fae5d9ccc928952b591555abd75f1d62e5f2ad43d7a7c9c33f7187182632f898d4cf46dd35dd4db38d8755a8cfafff0c9c035e4b015177c13959d098ce3e926fd3ff1e6fc609f306ee8b450ed704de6d7ce2049733151a53dcf61575a641e2f11d6b5f7f34a3dc6d12730602647511b51b0aecb1b8f124756df4d8a8b6f99b527a9730b975571a2df01845b7f7dd6820c5bbdbc720649a646e38610e3554e763795652c8fc985983b6acb3b809fe68349f8027bd7bc6f0229bb043c0b455e6194544dd016661a0259c8fe79c8ee03ace34c12b5dac34adb5a1fd31eaa40210464130d06d474647de3c6a0e4fb2bf77f64c703e315d4542040c8a2271fe39fec08a76cd8bcd697595275f7a9015d228c10f43346f0fd198d83dd0c713f0a3bee473010e539c17bee5bc3199dfbf46f266a5983e198f7f3152f3a719cd077fbcc39da496c33e892410ee5fe9b88c26647df8a1b85fa221423a64d7d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001886f3fac894fe4568dd169e28051ca4914e52ab0beaea353028cb7aa9a141c1f4ebceca40f207a9b92b5c49458d7078f4abea7b7c252875ab50cfda61e1b57a9cbd698d21c876dafa242020d94eff1e564b53dc36992643fbd340fcfe0bcab655b1aa70f5c5c15e209b0db4562ad6ea251dc1566630a86ba69c0b5a984939a2008fd20e471c8d9239e31f361e6b742c79f305bca3ed4562302012ef3a30cf1c17e5e9c39ac870db3e65a88834361056f8d19e90bef1d22863cecc3586c3b371f4b25a89445cbd4ef4017497506cebe5ca79fdae167cac074171a89f9b326ed63b24ad2ca37f671340c44f9f3bad48c381a571d3ca56afd08131ccbf1aa7f3b48e0717a87c9dcd728909db426dd107b4ba8083a471252f597de89a8fd92cbed4d9aa52836b5f39902dce11ea8457dc00332c4a776b2ee86641de62e4e853a942fd7e3d400a86161ef7e601aaa04ed96c1b2d1bb40814f85d6351a96950fb4b1d1f0c5b4fbbf6a684c589d7caf2240d58761f24efc5fb0568997ae0cdadc2a5b7810f1d480d140ae461e5739caa41000133a0c5383e7b6a2cc9ed82b82ee298b89945c7262045612b0c76a6f506bbc9a7c5248c496cc97ed5ea46595056f8044f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a61276b7c5dc0cf9ca95d55bf00a746546494e46c12b01e1a6cc8e3b0dd1baa8d46c869e9c76d06b8a2ea4017889818e5d1f3955ce9d9e7d92c6c0a5a4ed276107b1d2e215d0bf717ba2004bed31e28c3c0765a44adcb98c1d8ae3953ce1968de27c29730a88ca3468274cb87584fae91eb5f6986b6ea84dbca91300a8419b11ff3a43fcf15dec52adc5a18f87dffcc8a56905ba122add335394933d94eab4cc969460c0145d74c07345fa12217d9e16c0a25a70a20c6b37ed7b1568bd075f1bf60f27e6a96a2c086001772d2b4c6035adf6cd99c5e8e2583c81df0a97aeed13116340e7244650ac74a0b17ccd6c53f538c903c6d279d75ea49aab13509ec4cab88ca7827a88437b84defb0c0c1afbea26302561bd715c3213aa0fb6b43db263819c348209f93f4b8bd5c5d26e074dba2730ee804a883061b126e91a6ab850f5325dd3a3379a6e8a280815e19b0e0b2794d87115dc783769d5236cf3c8033ea9af5c4ae09f11b411651afd17e2fd5b7394c92f191b01eab43a0aaf63ef4846c964a1d88599385540ab0debf660502b3e63898557410c7e73f47c9b9458c7d56ce29fa42e05acb3ea27ce5fa1137cf509ddf8f9fee758ea123fdb9b5523c111590000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000980e0dab31663076d065f3602fe02c4ccc3be6abd2394097695cbc24c65775d59a100e016a846c35da24d69553c07d951b0238d56821b4b38d205879ab3cf901fa6ef5fb7781a10b75b920fcd91da706fd23ef9c82b994e80018ae0e9dfb3417758e6893c821f10929ad4e1229a0dd61bba0a2d25b61195f44922ba9fb63cb4b70c4d6ab7fce00e13b298c4ba2e689c2147e3b322385fa5918ffff9f6d54a69f8150e909eb72299a48023775d62a407ac76804ff155ff70f8a37bbce9985031122c6ccd71bf837f4fcb897ef66dd7369e9aaeb3ba1cb14e9c71b710748fba3bbd88e2d4b5b2026ba674c466021d1794ecc4f5a72283a897bc5cfbd817745191818cb73fe07e67c849845c73dbc69595e09fd4498847893ec5ebd09ef1d1358d8237931932c1b10ab937008cf8a422e069999234f01e56367ba94de9784f048c6b0ae6d9e0aca9ffd24d9eed9269edaf481704585319a87d9aa8dd7208dcd6c213f5098cfa7baf295aa542e401f36ee9fc5cf2a68655841e97ca3b246c66518ed7c0b4cbe41719b7bbb796aaeec88ea1191051028cd18af222dfe409b619441393803c2051088f5ff4179b14f480386b3519159f4de8a5423ecde75138fa8f6a10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a266bf082e903e8a652b257383aae9e57a77393a2e65012ebf056992eac8a45a28397eb6c33386986b4bb593ea4262dee2ddd872dec1e79516f381e1f1d513e9fa6fd37874522c78e488469780dacf151989a7dfac3abd7ad1c7e2d93225b14e03ecc25cbae036e5f656273d5c7eb4979666bf041747a270a659d91579741f9ec28641b7fc5fda652897b66736b9a0b91897360b3b802738a80bb700fd069322be9f6e933fd7943dd7759329162adac90e81e1c3f5f2b9fa208b4b0fcbb138e07975be3a30e44e29455090cde43cd25196dd3c0120ea9ced1cdd2d547bff37d8a30536cca84e9d8baa8d1a2fd29012f99da50cf0159d57f0a8d2a332bdade890bb380a95f896714f03fde371bfc7bdbb2b72520a07112396447cf1bf3717c902e44fd96e638ec56d28faac2ec88574084087cb6b9ad0d4097e87f142dc09017add7f8e082ecfcc6c0a799b2f44e9d5da88f2f39150e44d9e1a36bc4abcf891e77a9fb5b0a88f4b7ca6fa838a22748c74618fdad3c47629938f61f2c60d6ad40f46ead827b5b73e7c5c1cf8b1439f35951e432b56b03d8850f2dfb02b26fceb59ee7c77244e1a58dbdc7e23401b927d0d283af4f66025227b596b036b8a521bb2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019423bd8132af5bdfedff78cf29e5bc7b8fe39b5e21d162a25f16a6d13e6a87a7fa4e4785c10e5962f6cfce0bb3d29ba2408aa32f7d9c11b855aeadaf6cde54a756ee48d4c78af25ae748548e70a4e92eff4dcdb9c2ff8d7f5f67fbac3c5af2759c55fbb77534ec82b5eab837d6224a431c82516b04cf076be0ffce885164d3dd90262823f95f3870e65393773fbf44388960887afa1242964934307e7dd7511a664403e1154e94ad6f66ff5e23c327b33c1bc5f778ac2e6593390fe0dcb70e1f9e7b0e685fde151e95ca02ef93a221b2b48aff59601dabf087d4063595330b3f3d0dd0b9b7bc84a6b284cd7fb22fd62d82c4da118702627cf3bd996bb404ff2aea6b1fdd4f2d31a31ca63c0d42b649badb1627629fea4f5be08b87abd205b9a4d35cab504874c431902b5b4fcd50834ebb14fe0e9bc34094938502fdbd8a609987533989e09082184e11d60c5437bb1befb61f6adce91992d4cd2505604c8abd4caa5eb4772297f5e939cb9e961e83848b55c1b56cfa6ae1174a6e89cb0b691a5ec0d226eaffb58d573419f72d947600f86665f234363590a196db06c88ddc0065546f5e47f07ea365be0e52ab82de5357620ef27304864c508b10c44e74efb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6cc95515b6e3e9a3166d81384d5c18d711a7caf869667295b697bcf109452ea052a94e456bf1b312ea7c68a502efe263f553582da61440eeeec373d2a2ae697199dba2584e5591709d31306fbfd49921c96c036ebf5bfbb1597400c7a1431f7ab04388c53da5c632981c967c7f07f6632604b99cebea3c51cc1b84cfa074f53f546ee3ca317c5ba101b68e9bdb3f0a43cfcebec4220aef288cb91b0ecf8ab439c13440e153eec2f65c49e04d5170646149c5e12e9f42df1e71376e5f1c08c92811b4c25e5f8d34d21770f35a40546458c7c93c8299746577810a2388ede1662a022bac3ae7f261e693fce6ba7a20673beb5d75b1ff50bf22f4eaaabb59d7ff5e0a4ae21541b83fca1e3fc6e72e74fa7b7334a3ba71a0139c907b0c71ff0cdc25b0520e82dd948dc977549965cf23730392025031f3daa3dcfed94574d7ed694beed3ef558dec892ccae19bdbbda37a111fd69a716834b068cf53f6d17d9db03f71bb75da12416acb7943f588d1afe9a884461c043975e19023c023f8ed565706097a53552ef706668b1884ff3707a078f0c878eecc06dd50540682c0725bbdf2a748ca49800083f477e766d40ac085ab0c67d47a30f9bd27472e3001d48e97300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009211b56198e3448466f80575cb329778cbc7f418424a00789031749899dc943d9030506cdce0b0f260b0233fae39a7c24610a2a9e962cba7172d83bbdc3002b5af13a30fc97e66dc3a31d06738b3e64c66817a27155d0cff8faab1bc1638456a1f2d3532faa64e45d3d7804b4f29b853242d55f1d3e60b8ec59625052a77c23188596487b24a11344117cb8d6730de272e9bb8ae55279253fc6f382baf5a8e7a2ace8338ca610966802daa6536ae845039b62f655eb49dfbc62ac4598b1ae47b800d1bf2366e64e513511c5b1017bc9bf39d60b72afa43cad1b6ae7cf61017ca65d7e281404cb7750974bc02876ade60e79de6d65f4995332066198a8dc0aefdbefca3c4d3f7a7df00d3b622aa7c1ccbc7d79e9eab8dc79a91cd4ae598076e86fbdf758849e1a6c93549f2d63c90d8d8b1ba6b161cd689b65f4c03f11c2f455e63c801fad5671c9e28feb86d7caeb2e659e16a45ff312c82c00e04fc01c64cc642a5440a84e58db366f98cc2213d7300f44043980be109df5e183962c8a5f816d5cb43a6ade4ecc86cbc0a959323377bb9f4895d0258219b1fc6c0a938f0484f2c7d56d6f9ff0d3be8ddfe0854293269a2dc2c028628f207127c0190661baec100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d42c7d5c455210ecf0c9aa30edf0bbb9d127a800ccab837ecf4f58d713f6845d123ecf6c3e23cce166bb86b563a748d2449b6a4729fb568ad9c76563d11ed9ecb9d514823946f7e7286cedcf269716b758c83a6cdc49fb72d84c5eb32faa3b57eff1b52c359a4c5c2bc86131b2a5fe8f44772db58ac7822005a328ecc71fc14daca5d69ad41433988a1e255ab64ba355788315b124a52f4b27736892f23a7ef59f387bb073320aa42e68622ef8b4154000a47d4ce9e223fc0187a8ee6c48559e6b1a7c79ac800ce5d8754ac78e710638701e7b4225e495b665e6004222858a545ba341e7f96f37f8e28cd972de4608216e5f29fd799d2c7bee939d4e5064814f57387890aa695bcf99a2f5b207ed66be9e3e33073003cb360cd6b9a89c9af9952c8903bda2c41b3e786f93fe69f34dd35a3ec94fe37bdeb42cb1b6b55b9c12f9d4f8018dff23583ffa57bd47a4e8acbfd6ed38259eee774ce5a1afc14c59ff0324532be24894934a0f324b5c5f4dab8afef7a48bfecd43bb58b3a98e6a4f3b48d186833088a77f421481c4a7c9814f48d8c8c8d2ddffbc96c08a58643690c47f805618c0f0ab7ed0678f0c8e63e59d34d9381b09201108b9d67601df27d4a140000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a31c46c8b602148a715a9a7ca0b08095d50c35ef420e6292609915d13f8c702801546a6a1410716ecb7045525211e45d6d766629dae3354bcbd4a5c3864e30029b3675a01953bc68e1ffbf7b71ef161ad33aa584ad38a783af7a77e8af7963552c30ef22ac7a2962021c551b4abe0f000babcbbf1220286273a8290f142c51265c1d596ec3a95697bc8fd895ea8332695f1f64a8be939c26a350f442279d9930d798c24380975cdbcb44038b05bec7d895505ac13e7c35fa3220c341a28a2e5f6d06afb8c908f17b1d79e483165d3ad39abf0a2da70e0554708c541d7fa2ace78ec5b42e40b8c1c08e6a733608eaa723d7e8eaff3805f01e7d31ebf8debf3a5301b75653630011946c8ec2f31fcc652a18e5817690085fe2eada845b52b61df8dc6aee7c43fbb399c7d84ddb05022ac5890c9f8c1efa1a6c139199e75af1471747fde01e816dc2a0569167fcea79df34dc2d343245d6685dad44d3a86ff5e51675b5204cc572bf40d5613c0367782c9e9b2a5ab03cdaad278d7586bbaec1394583976becfbb54227b6eb38f6a21abfc62f936b0ad8980939d80eec49fdf6801fc730549f44ae3cba11072deb4afde728c13744db9ff4dddfb50780e74d87cd270000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000857add41e8094b93b2abbe1063123bb382f20933328c4cd3c77c36f33809683b958174c14fb8c84b63e3b488172935d82cae51eef4c8ac1354ae9119537da4efda43cf911ac54dc1c164f6a02981b23b665a54e65279afac0db875a8a03ae183c14918574dc1aa964c933ba3fdf8aafec4e46d99a57d347d1be347c626c3ce216ee11815d0374bbf0edaa83aaaf2875bffd229784063047757564e2a8da222816bab79dd2bae96d394452148b3377229b641b21ead9d8113744cb727b9a2589ebbcfa44e8f950ad4c07465670a4aff6ce9c1059f6ca917d7882dccb06ddfac9201c39be6d7599d09d24d57f643f552f73bd4dbb384a1013b3e8cce425471807b322c68b21365e2a68999666ddbe062070aa8ecfe9f0d0865ee30446ea2d4a8be0e41de5f90beea055c5b9b49586c87fee136b9c81f190d30fe00b3ef965c62e7a33fe03b7853c034e69df2c741e97d831eac7582e1c02d25d2f0935ebae5f4aad8d80bd3a30fe00161d6b6a015af4b7d0ea6a8a0a6ce4126ebb3304dc8a1d4ba38fe33e364218c3498c9f5bd5d07dd274c9fbc3b6aef1c307d32ea02dcad73019943fe595b3d1a9b8aee05bf05459efa9f4efdd38f37a12cd1f9b7ced4e74bef00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a44edb2fc87007ecb4dc6a8e6096273d88c02d7c7d3416f2e7c465b72f3571f5294461889ed5dca40ef2cc9dbbff20773b2de2169b3f792f020cf298959607bfe2cb0f8d61775c08221ba54359ed64b8cd810c9b4d932ae9deb67cc09324f697b8e0b35fb22003e27148e5ea9189f1617a9cbc63b1a36ae72bac963310da13ca2539564cd620b5baa2123b8b8eab5df5910d5519e9c05c2bc1e10c6ece31db265bee75446f9efdc40e4694ee30cb18095036b9723aec973fa04715034c40dcca5d029c7f2e01654daad70708780467de5f3a9c534d8260384215c67bb35bf7f1e76545f1a5509ffba10ab1ee7b08418b3082d5bfcab3cff35ab1101853332123b22ba638752b840bc7f4c5cd14f1eae223ccc7d85fb1882e23ad0e1e4c3d0364eb06c0cdeff92d1d9426a14c548142684657158c6ae9c322f268d7496ab7e575d5cd0f6391a35730aa26e56185c571b17b335bfbcfd628d691f13a50453848a576b60ac50ed1cc723ba04c5189738c8ebcd2f619f9e77b6fe023e4f5d7e8b6af13d8f9a49b8dce3c6993d24a4df54aa82d421ed9c4216365ffdd81b431c3894323b70ad0b3a6f553d79679b5ba02c45e70c050fcedfeba48cbaddb7bb3edf90000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086add22767f48cae7f1197ae7f99dd2a6fcc1ef034ef1341d2371ecd7aeb3ce260848010480c819ff57736bcf0398e77d4ee265d78a774063acb2cbb15ebac5468674aa7f944fd36b79b0f418ccdc50f605b7e58368850558b4f64a0de384d70a7a4f8a55248c0b9c987758c3d7f8ac0fe0053dee0cc71347c906a638e1bdf8ee14c416eda8a39c03e63bdad6f18902e07b3d8285cfc0b92df4d53d5178e8395d1a2c01c215e7f134902339911379d49c886aed649cb918dad6d1859bc425c6277eea3910dda9ecb24b59503934a51d52e4975c4fce09b156cce1c30716df4c862b66fe401b64633ea9d8eab93cf59025901343871d1daeb721c6c3b5a94126c73e5d083bba8409cc8e544f5fedf9eee459ce9b7ad7173b51508b01bb78abd300521db3c919f3325ab91350372d7ec4d876b8fbb810d82bd9c9ba4d840f42c241dc77d721be24e31bfec7a55a452b565fa288cee6eca8f5aaddc9d31a88ac9ede08f520aaf6e46f7ec777a42a6bf11d1d0c7e435a09f66a9b4cb0d7d4f9ca433111e6c8c72eb9a1e2438a767007ef9e177cce4874d4e47c969779b9cfe5226b1fdecf3917f0503f3be9a3621e3e4bc000ee9e092c9e5ae75213342afedbbc40f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af7373d78ec08e7016b03cf434e58f6a8e128f485c34f1246831f32cee4ac32c8c8c5f6dbc15446825c0d0c83d2f1ac4990433cd77d0a3c30da3d98ac4649a8eb19b5f8da9f96b50cf4122600311976f5e974a0139f6f92c7200cd26a58bbc315bcca38ec79ee1ef23ad6f18a7caae498dcab316e15061d01ecd43edcbdc3ef94a5e8a5d80840e223861b53489b9e809f174c5429d1ce6188476342a6121c8bbb0415a96fc4c6e53b3986c2da1d623ba8531bc3f8de500347616e8a779078127601971495fa4c0e922cfda5f29be2d8e949f9627e1774dd590a54df92b585df1047b436c967fe6befb95dc2aacd689ed75bcebe769a019fff690be5110c3fb5f2b354640fc79a442f05d50866e5d83ebb82da0bee187e4fc3c509107d6f38ee87d364c6c08f534fb28a4eeaebea810ff421a2a79d0351cf51654eea85d186b56f1d42743abe5dab82a57c1f37de0e8bb358176035ccf7e8d14af87efa8a737bc0c4a3e6c36a0b79b6e0a5a641b209584131f5bad15723716c1a1e71e23bfbeeff7695a54263d4624b29576d73df7d50ee58ab9d880724b9922c3511c1527df35abf23301118f7d6eb8cc5ff48a67556d7fe7e2b2f7699c376336f38eafc93aa00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042bb40e4937b61c8644c8061fcd4cf934f0d2b5c471009d7f21286ab0e2f26bdb47b2157639ccdeec78bf2333b0f42e667c0bf339c3a3ae8695654e2d33c9b51fa03f355cd6b98a524f68eb52d01fb9096fc59c0ced4722a313e46e6995c4aa2e8ad00da5a9b0a8211fc532d10ffee5d9469f195544c066e51d543f09e793510c4df2ad5d3137a72c4b93df88b30a8563b07bd0d5753ca98dfc232e642c4dddc93cf33b5f6919604bf16d52efbe17ad501d51a779f0b36f37ca941d81a6bde5fb50f3d8da27b8e9554852282cc8ffe728080d724774d41f3dfc0e2b33d7b8607d79846f2dcc1d4408f30ab0961dadbe91c312216f901234ec61d886a7bae66ffa053eb90398f3a5b41e34f59f4a696b35ce033fbb71538a47023f600dc1f962ec20d99875a7f53390ca0319050ec9b27809702f7616216b3d0091338134f38045f74213fea4da44f6e16f2e2d4f76a02bd2960028f77c21a4a49799970732db012081e1d4b216e083c81f6c191b35f5bded74b2ff8ac8315602b561181d62e3e4357825f4cb94a93031a4e34d0a37bc6e31b1112b8f8f213b8094235f8de5d43807d5fd6c997c2545eb463fa14f3d1b51e370385bc24ec44ed627b1df971b390000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a29bdd73eabd50cbafa96b18578ac779b59236c14c998cf9478811f3dfd13a291947c07fc1cfb4f04ab2ca51d5f7f722ac2cc905d6204457064c1e156b7e405ada99e283b94d5944498372eacc9fd6fb97999e5c9c587e8d81bf4dd51c1ea926affcb9f4de10d26a3b198bf61ba399368a6b254fbd6fce7ffc2549db2c68dd8beae22397ac967348bc93a5774388b8b220c2938d732007ff32b3f73b2379e17ae519986d0072c98f100d3aa22cae1b0c93df43eca8be21dc0112ec91f364ba4ba6291f0423086bc9591c6ce0091121acaf8a90ab10fd8e05ec590f8223c7de5023d4612a7c7ea4403b08fc8f184bd4b007807f19ae2304d1286821483d5fd5698dcf79d616626d6684f0bdf9be6610911a2b16cd1374b6f7961f1489a3e3494a09386266b2456b33d170bd289a4aa95fef8f3dbd64dc1ff4f7a0e2425b1331cfb95dd72646a28bd80875a7dd909d5b5236c04c2fd1f0596ab0ee0ae557dab8dca8d04f496d3010718662aa84e3b127c17544c81146b0c49f0c133206f605b4a10917221efb3317748b140550455719effda94fd2f66e60e7f22f35044358df16176d57ae418d4f5413d9f41adff7ea242c3d92038a060ea87496e42c809fb1b30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017392a2674a3ffc46fb2732246b04e26d7ade11eea82bb3699fc91432b024de9264492d6b58c1982dfaa81bbdf2d4c42f3da97570efcafba54c5bade8c348d47b1e9c70dbaf84f407887acc8cb36ace314571656697135d6c3760922f2386b0a0aba60fe17b3348b9af226466d52e11417df1ca8fcbf7a04d84f225e72d9e21f66af7ee212bcad2ee1924437ee0a44aa11de590e7950cdb6be6148c96c7c5505a1fa9bf041178a55908d10c0bdd5f8c911a00ae9f5301e7105f5da515cc7280c339a831169f2e1a63a824a0f62a7bbfbf7c984025f81144c2dbdde53bd7fc50cf3540793c2bf95a7ec715ab65a2382e92aa1475a43427d377f96c5b3b021ef1ef374412494dfda0579baee2b6b20f109ea8f8d982352ae67eb6be755efc6622363927fc5c1f0d14b479d6b29f3a5ea3c84e64e076d0a897b4c42da82a5f8721193c89b28e63a27eedc297f1f840c0bb52389cc87e064a2679bbecd48398368af61d253becd68049d14d77811928b56e90609685b0e35eee70b2f43f421f843ca2ff36ef2aa0438a3a3a684d7ccd39ca72b35b43d5ef6916e0152f958b6d09b1346924e92ebcb66e19ae83ae7940a604eedca028336ead177f6b8c9dde3616490000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000909f76c0465dc144a7528f437b8d482613da00425f989d25bb300596befc7aad77faf8a810249c82302527b71f16b6cf7b920b766748b8486221a379b04e7a62013b1d4cc2483fe6bf0244e9c762c66982a99a8a143738a975cec6c0665038a49ebc03ea509d00fc71454c204e394f97c9c1b6e9e41c47d1634c68d58a4c4bf80cc595a2af752af0b8f56cbbc4691f164a94578fff0acb346d18aedbd592e4bde21bd0f8a64f8b5e14fae4cb1b23385e83a1bb1e762f49115ab8df04da25bbfdee7c17325f41e937c07fdbd198ef492065f890bd8f2c928176b7f64c303dd41cd970c49e6bfd74fe9214bf6fb3e147f62ec04c3be3ee5d1361296189c606c4eccc69c21a33728c332b1f29b6e829562adc7d188218e39fbeb0cd03c06bcabaf8f5b6b4929d9738dcf9f7fda141c8e63716bf0c86d2cded4f9e0d6e7c3b2ec138acc1739cd8b2f00a136fecc5e08dd9cb70bafad19b02a392f2a05f581590af75ba48a20178db6f075c6d03e0725a9c18ae5e4d9bd5f8362940e83d9cdc23ad4c150fa5ff7eb0f540432f82dc1e33859f71ae208123ab9b913b54d852e1692957d6b6740364a1fb8d02a1261e1c4248ec76b48231dda85e7c46947eb585c87f7900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009dfd40d0c1692c43ee09742fec17658b580853d0f00a9a86acf14706012bb7a2bf7fa7071b97263071add062a1261cb8cf0a0625debdb1b65886dcf0f83dbc53136849a1d2ff985f5a2b9a2db82860172ac80d177201b2be9034489d56f475a92cf0370af3b4c85f07017f0c2539149de7edf8c8f1339540f26682093f9f31fad95f561e17d5d7f80f3de98d86d50db28ac89080a56530a660df2756e15f29c785d2d77eacea2da0f9710178bb5b48a0cd85b91056fe3c58c84a31f6c818cd64283f713a4e0cc06ade8dcb1d0822efffda574578d3fdb46821101f43ef1f7358bbd5620293d5e32c952f7330ca8777487238a71038cc71c74cb584574dc894248a16201e0bde16965a561beaf0b4f9549222d6157479aee025384c78b4d978c1cac53b37af7280c7f5de5b786078bf5479090543e6d75c47df040a91dace926107ef1097796bf87e5e12ad5175dd87ac4212aff814902e89777a77392f0bcfc9760301df43502445281d16c6511eac09db90d5bf1bb970c5df315f57ba0ff39737b800ffc3df018daf70ac178c7288300869fced11d99076975aaadf9a6bd010792aa7c3e23ecdd60637fc94741b0a3a05f0bcf1f4fd68f5b1a910f8bcff76720000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000175374e12de8918fae232f4f3eb81f1163b7b293c6dd61d2568e9ffa7a8e774a9001d25353899d1b0770f24ee433938ff3fe8387fb11e24a6be9dc6aa30677e9c9c4885f81befb50c3f2498f03663957ba620cf35cca964ebfd264d704daa126173aafd36e770f56c92eeec8c7fa433a89d0ea7b08e9b19d3eb9f057378a0154921435c07df7fb4ea4c3b67cccd3982e4299272a760c1a4fd0439823d507b69350b9a993737a667f1c0fa69499dc8bc41a16523fffea95f33cb4b858ffd376c7f41eec8fb7b96f1f33a34b4ee09ebe292cd6c38ef3b40ec3c9b5aa1d9fb7a4137a84965709187820e842a171e48ab6f4576933893fd4700c3f77eb2c2b0ca7e0f100149554be7a54cf24d7df09ca84849cea31025990d50af43ac4a4bb1208d932c65a1f515a03756d50ee6a2d57dd10ffbb8b133879c1230e720a4b412c6cc1c4649ed6788e29b2b5b2ed707cfaff53d1970cd99e142bf149d78b0fc859a14a2b67043bbdbb6414d8640d9499a6c2824392e9c3722f217e833ca78a65305c7f1a1c937425b0296a2e12c24a097d756b370c7b0430b9eb59aa95d000e845e461305284ef1505e6900cea6252ed94fe30b75f6020dd97dcc17a3571b2d722fcc7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f13610b53912d527ddd771c879f40933a52538eb01d89c858bc34d3c143b2bd86a96569a5ee2ca6a3e69a9191fdd415912764dfd6707f9f232db9bcb2edece12b70c359adb9cf75493a2fcabf0def071eb5c0127f25ed4794a6c9b599055dd1b6233b6c73ff7e94e7c4cde95d1ae06f1e1bbcfb41e8c2fc18c2ba9c7bdda40f820da8e32c0350a979cd45ca6c16105123e93fffd187e56f70724957813b33868c610124e5c10fb56479f2391c65580debaa1181b4e8abd7fd0a8c9f42ce1c0c6b194b8886c98efb9f7acadb6b0431adbffb17a08c9a358f57f31573d301edafba62e8df7a69f1c595db3960903ad7fda7a8205083053818274093839707ab23908ddd0a17b90435e517f262ced11f3108c0e5bf4a0fc58064eeaa6ae512329c1d09766468d813a1c18c21a96c51c522be2ab45f1eeefa91ada4f79779b4209ae1b1e0d7c86fcc2ce79fc9d82574afb66b22995c372eb9d6bd7c33f04c39dbef6953ca8a314d9da458e26c63da0c3f14698d43e6064b84edc63011d62362b92c24456df4dc74dfa878b34fd081515110701124f36ca3c42179a8ecee9e20bf3d68268e919d67d2c8d3f12bdfe5b127fe3f256e2c7ac493b260a932f76b0ef6f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8fa0192a47beaca2800af7049572c6e0ce3b325d1d88d5f596b3968c6b79758d46d1bc3f3f1fa4186386501b2fd6654bea7f6029001b99955ae36ccee70d0a4411ab18633eb9cd0515cc65e38ded4985fbc1c4b44dda648eaa6f7bad5abe1db44adce5fcbea42e5d0d1949364d731a4f56648bdeb5050b6a406bbba5f0f71e4f89f2da62b10becbddb7696ff6e97d70be1d80061706bc2f88e2999fb1f14179e88520f3c52bbd09a8bc6e624aa949569c89e31f4f57331ee7e54c26f4b80c4f87209b33ad99fd8d8aaaaa2644294198bcf6328e7916846d2eaadcd836443f4a65a778ebedeb632329be0e91921d19b4045e755073ae65c1b1a11baadacc2003e7f51c843c171d26ce5b6a92d58d30c715a690d583bcaf73a4e24cea88a0a107fb470527977b2c6e338dbaa69039fe959e5706794237730e2121b6f3f11d6bc7d112a32309364426e692d1d003319ae8fad6f253215c68cde863cac190f87e73b18455b55cd846132fc69cbc8a16d78399d68b663e208e92cc0b563788c8cf55b108d982176f825a32b8430878433741cee00f9ac04e91af36fd1b3cd2b9935257fa191c5a01d66b44ddb26d4e427c63c2fc359f2861b271f1600380fd7f66c300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001afa93e641832946e46ec42c1e0346f77de1a774296b83975eed1067c6589c118e277f9c5e1df1f9b763c7e6cca4a99ecc3ac7504e082012215a1015384cb4413cdf9c9f2cb584c6e8000b6063900bb3acb00e404ac8af17e174e34dbb1296abda4d072720a9010c3bd78a894ea0849515e3872f299fb91742b045e8610a539cb0fa6b972e5bebd9827a8ee4e41457fcaa187389058d219989c74d1872cafd0743d5ab1050283a5ccfbe24590665b67b9fa601f058a9a1954955d8e0de0b83fc123dc10b66233df4e91fd12dc53df646eb8881c8e6d47f3e84f3cf12aecf646cd723e3778e2474d408f1d8bba7759a3ba9e7e166570d054c41f9d12b815208f24bef4f46a98cb8c0b3e173782d6ee63a1a3aed52346ced149b507f484f51b3c78b58f386b891dbcaed34a1c7619164d82b0a54399b5f51d38ffaba5f352eab0eae2a79745b6a796c94aeb5d5fd7e037ab56c73c84f7660940d9b6381d42fabef3c948e51653e47397ec81f76e1bdc3cc0bcbadbecb2ee216ca021296520e6b221bf9d8d7f58c5c93b1e4f3c2cd4a96196a2dc4d8db954ac8c6df3390b416536b14eb54248816f1ae70bd0a6328eefef60f31c64d0406dac77bd24e11ac7e27fa00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d4f7b3027f9cc2276c28401f818e829450555ba4fe93974c2c52602a2084d60041f08e0a8c6474f2c940161359de0be15af0421e0d6ec20583d3a24f3bab78679aeedbc577f8c3f04ea8191a0cb5e4080c24407981468b01605d7d1ce5a17edc7b850cde63bfeac2ce545cdd7e8f6575e402ce98e143413aa7d8fad7c6e193f62207e3d6d5db1c7ac823417a80e8c3e5f694a99d31d4fe7a6ac750b2f448d92affe75e9c4df12e67fd39de4e221680d703aea3dc0fd23a65d53e68caf6e110252ced5500a2e1852eb234fcff1a6ad7202295a5be96f51180d3368f3e3f4474a306439d6a3b0114c96ae3cb9b4e9012150156ed479d4ef8f25249eb4d9e6eae5e88855359949699512e1c3ede89ca1c142d50acda767f247a4c91157c4a9dc70d26f0f93c1b444e1f4a937ff99411a61053d0b06bd03bc1f27090fcb7294ccda00e1e19ea3399b42092b51468111a7d50eeae4ff80603a0dbc971c85cce40f1943d626b0849ce92251d8f40f37e1d1f7472ecd30c27bcac2a7bbd75359fcefcde30ef3f1f6f9ad7f483ebd13f52b57da0a068ff2928002e3306266b5100e4b0565816433845e357783e6379e264702923984f57ee9d47702bfe67c0c348e97a40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a81711cc596f2e7e5c834f4064d1e3af8cbc6de162d9681058ce3c1c83beb3a6efebceca64f9cc3a31a5eb034f3373b29f9956994b2b001635e65709001aa09346776968407a5e53ac94df345d34900aa2af7afc803b790d2e1f372182d53a2f292de79ca36711e32ff1f468f5c6fe438bb25e391a889c5985ec8961f10d0e88c659f4607be10174380c945bc5604fd10248cb57d956e2a74b2413891dcb18c74f542eb78c578ba676f8b8aebee486099cdb8fdfaf96fbbdd2b3d1c4eaf48f99e823abc25e0df921a5f8d78a49c5899cd444669b9646174d77a087f684fbbeff50b392f29d242d15d6ba4b30e8b2578ce9115f749fc887835582da3f4f1f4df529aa6f5dbec5ce6c11a70ddeb1cd95bf510fe192bdb43bf4deedf10b5b0d7c6ae620d0a15c55cd04ac9841f70e56756b8171c78e378256320e480df223a4ab5485c40efde2e2717ba1c2bc80b6b4c1bee2ece682478c2d1a4f8667332e93c492a6e1955d72bf02b21de0f3b72e87e9bfe2c6e97924f15f54e885139aed0e8212375b571c809756ed0b001ada5b1807d45210a84de0f6e6a9e0e3d4fbc92c9ffcb6d1991373ed0995e5d1b1dc6b1d00426ca2d6acc6b3c5d55bc35cf94630cf02000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081597f4784c74ca023285a4931b911303cf1303cea48066dd1dbbaea02936c83d4d33eca0ec7a70a54650fc98788714eefbc98da02d302d37abc544f77f6661ce5aea05bfbe2ce513f8e8628f66c287aee758210ee8dea92eefafb7cca8ecf3ac70d51e861aba86d8ad8d5af6d58359bf99c819bc7bb6d830402a07d46d007098b14c5aaeb5533b76475b0c0a16dda812320f24b4c8d071b76b31825240bc9b1f6a981f3f5943d703088f3acc739552a060efc3f13f1fa715ef5e28981bf88c233504efbaed6d2011abf7fc82154a80bab09db2bb9b3cd59b13696b97fcd458a598cc7dc168d6c26b9695a3e9e1fcadc4e791b7c9dba7cd176e5aff436ae6d54ce77bc4500421c7351df1ade4d6ca081f85669159d799613e39d6e599159fa9de7444b1c78181a0898dabfa859cde803bfb566026efcd35dbb0283188bd05a85072f1ab8614fdde9587bd7456bdbd0a6cef5d21f5b116b9c3661e3eef127416a31860e990fa346c7f5637f68199dacfe5a4780ad27310728d00f2cebd575f3dc8daff3a97acd9bbf49293ecf938ff78cf402d2631670fc6e176b5d1b092047db03ff9fbaf67492b73021e04a6df9272d03a5f9570cfdd9497b8f39c265b9cb9200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bf1196d739f71f536dbe97cea0fd06e81f15b5882c329b03b757bb736258b8e6020b556de10c1f8b57e3f9d806cad17c6825e0221d8a6af8592d08682818980eb489420881827512d82cc48c14c2a1f39a055eb6faa2be33ceefcecfad286d0e5230167774a8e774e0c4f40cf180b2d054c4fb60ce2a215796cb4e1ec2aa7602e8d4fe3613b20fb34bc42f1b9d6a53b14d4ee8dc12358788f9a9c7138ee17f4d31f7fb07ae79e0d98e54e042f4a04f69fbe2463f6926db236bcb27e3c6e63e283aa80ec6e811bdcc70b412c801dab0caaf1df069e2d17b7a55dc1dba3f9067f136ff253846cac1205271aa37a297160056f72ab36db60e327c818e4d753be3baea59cdf092b5e8ca9ec535c2a7e89343d4ee2e16a197ef58378b200ad56523b19007e7cb223a813a06d824c671c329066ef538378f92c2f6c256ffe265f405a2178f58ac95950123a013c07cc073ceb7983f0f7f41d4702d52b17b32c0bb890613e3c31a1c7e50efa3f51bd763180201b8704e8620407e73871f90306498970d5d0b015587d40b15e7c9e2592c1364dc4e0ff990f0c5ce48ae649a9ce477ba7ae12ad896796314d06c6df6a25598194377e55f9764a98815583b812276d353c00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484015b7eada48f9f2d367ffac3393a11d2b5eb4b62e4638660260b83161c6c143f605a2d874c37afded3f086fe37e607100e3c3a6eb8fcbf9cf7be28583c40abc3801351df714c3dcc6f830852839aad85f7c492b667305554d496d7dae6fc90c531f087ff187b010f73b6df2965791666809c89dbd22c46f4fd3de9bea55e29bdc294e239aba9177f4141e9f45f46889e3a86fb3d005b4840b63ed9e2270568d6323916c7d61692eb187de525819f40e936fb3ca55b59e1a9545c9bb028cc7598b21a0d99e3e0cee6a07f507a6f808b416c1261730e5b0f3ed7c25d12e5e8dfda823ea6c4553b120264010a00eb4b366428b3448197635394006722c0bf9616c400d920c201ed21056ed53b43abcfcf240a4cf09e44ac96c99ec52c2f0e2982cd829c47064d934dedf72e7ac1a553f25505254e9e74693a34b5fc9964102f2744a0e0028b8d2c99a4c97f212760110bfc8cdabe62992bb8d7ec7e0a207ca1fce2e24ecb78d1f564959df7c5a4c034d876277fa254c0c091302455e5285b0058ddd1f1a110093e003ea1262610d4bc8adaab3135662aa8e101def1a73028338763f08f3892fb43a045d6a726af35a98b8fa9511b3101b158ae4585133dbb8f1da1c03eeb6b4c6ea11ab22b230e5687057dd754a81ebd9f2a6e1f55768cae1c41bc81f263b7c9c3efe31d8e3416e254d6a62bcd07ffaa47f3dc7fdadd37ee81a9e5402ab78870559b9a7386aa26311b668fbf5dc3eb8c70ac24662f52d997608bfc80800d5c0c2f23b36d9b14ef0e0ef5a50ef8cc8851567c50e6802547e126ac31e28bd7442cd34f6d9e470745b45810a21065f738ede0d278dcc96319fc2326a6f28fa031551273b9455ec14edadbde14f673ad6b0428faa8419cdc35a953fbe0a1e4bc8afbbad769cfc4a187d238183c1ad0ef71b1a2a3e1911e41ad52aecb9fe2a1605b6b21624c171cbc9cc22943e5e51ec666147ddd62164af253f2cd349ac2374315830f521429bf250f43aa6a02e6a789bc065c4e21c5d3f33592a10d44b2d870631b28b11c298e0e5aad57e3c349fad015bd71b12c2d567903ecee2524314cc1e988b53e9ebc7408e6df87604b5ced04690f47ba637d401d69be0a9ce1827d89aa5c8ed422426d9243c14faed0a612d01446044dc5fb483596ea68ec1f907d28579f9ebbd4dd94e35b76bb839a07f8db66d29c4a3fa04964bb1c8eae7832ac686baf00717b55b6ac5f5ce1f571c6edc139fe145351ee48f9e8d862036f511fd2c5451c4f063dbd0291c599b795be313a921e2b2769f43ece2122a350185054612fe5d871be48dbf55626c16ac62dcc8345664064d41e48b2394a25644fa0b472137bc1fdcd410f9f95d175214809133b04946db42cd087321b47318ccd0224b96dd173ff10c83422b91c2f8714fe891aac7d75173e3755b18846eb8ca671ddf6aa73db8317f5ef82b5aa049f521791c22569158f1900c4f781e1ecc225b20ef8f840a46dcd642be55632dd736d98b9626e0e8a0e31768278e95f8851ccf0c656392124e63602e064ff12eda930ddd0d7f20712847729c591aafcf90fc710391e769fe842bff787710b4219ea7b17c073d19383493e25adf116a0a619a00102307de983110a1b9b14db8181bd3d9ebb20ed59a4b0c9bb54e410c02f990150227e4994f2b45b823173b477bcf6118baf17726fdd5a5559c16cd71b752bb480e04edb7081d181b248f7bea0513e6698db79552e0572676483c279ceb7825c130579cab8092bcf8451400e5111090d65b29d62f1691d14fb8319682b6a644c207d1851ace7171cc99c7b6812775d2ca5967d676261edeca5beac265dc532d641a37142d13474cbb722ab66d8e09ad29fcb556e832d8f7522ed2cdd4e00363360a40a5d66df7f236aec530812c42c1cce96bd4bb5a0a78e138f77e3679efbbce1b754049ad8a193f2097d8e03b0e28c4c7db74a2c7cda2681b8bfbe6778bee8e30340c6741dd06c8a19db912668f24ffc5aff2f5c7423a263a0a931553affc30198aae132f0292d192d2ce69ef107089d25e290c43a2efdab4e234d2ad75f90e0c6478e683980471fea99174ab34676b44b5d80c248d6f434de8320e0f174cb916898931b2d9a3979061c56a5d791f03290e92ac48bef9865b33cdb95ed18dc608d9ddc4e014b0c548a77a387a4af9eea1567591ec48fb3bc8424571a4fc94310990d0b26658b1c4150155cf50ee3b81d3beb3bbaad9d2245f4263ad4ab72ece1176998c5cbfa80fcb125f44009e41fc3ec1e743e881b45ab890d705acb8244f2dd19f9d5b9a226e3c43d6ca5619259a4b6add03649e5643b2669531fea0dd87295f050869630e706bdc5ff5331bfa902b8ac58d4583f7935f86c4dd92d27fdf240da8285c7303e68beaf3682da4ffee06a6926449006cd87e4ee18e56b2f39d06c738e61e1b3d40e70ac7ab00e33d262a196dfe832da64d894e458523f4c9b81208804beddd755655eb1e108d3be91df5d6898bce4aaf3fffda1abcd58015ab243b10ae2fe25eb487f539f4810fa0daf8c783bd7aee9c7d7bc86cb1cbf6630c0d26e36a745b6bf4d6c916d6af5c017d04a3b7301d9d378ac3d0215a48f98afb0e24929ecbeb83d7f51ffb12b7bec490c2aa28b91df781683267aa3cd4ea83ba17c65fbacbdef494c1e0ae824280df2babe9267e2def34bd8d2a7741171bc828164d920e86c15829fedf8dfd3cd27a7e87850fa149938b3940642bc35ac4fda70ac3596a728d6814d2cd0ea87bba9adb929ad0d3899b35cd64a3d25ba8794dce0ff1c848393a72d75e1a0b108ac18a0c907b6e7aacfe934bd7a0f00998d5c2f210712432234ef920c9438f5a3ed9f647211ab9576530823b59c615c970017b484008a19fd38ef57befbd9da0d11a55b4f745774a1066483426d11dc56163d7cee5177d5715c6d110c9d8005073f5b81587d329384bd274cf59403824a513ca095202411975e6cf241085c2eb88d223a91ee0675226a8c8e42c0f8228e79c87592513d02c353d5103860a813c7ef875d5b3810270d51ef9d0fcd89f4b7b2a1da7b11313f880b2b6911246554e237b4fccf88cc0cf99a77d6723f01ad84b8b8a35ce0c2a958cbf313a9690d0fbda6a4e0a222fa373dec3957962b0cf841fe3212b461ad2abc18992445df1684031c6b0cdbc700d748f1d63b73baf4df0c5988a67f8036bda0d2f872e20cb54dcd73bfc77dacad94e749e1bd3d47dbb901ad84c11162938ff0e64a4c298a08942f31db042e1c75c2d11d381eb8e3db7dc7ea7496d4c10abe5d8aa051a319dcdfb4d91774062be1da397186e2b7c5c6e747f350ab2e525ecd5aa84834420337129f5211dd1e1830b19f02260878d96ce180086c0c61f10d388f9540a24c24511393788ee895bea182d9b5e1d9b5f0cc14eef42998d222601611ddce649e1e88df3ff06428b06d2cb8fef31370ffcf9d52dc5186e02342f2a2891895a1fdc96085e4a9b84e564e23d0d070668518bbeec65f2781aaecf08bd7948687a9cec2188170cc231951c05c281c75c77a56599b6c6218692cad816ede7f8551ad50de2a93ec77008e673b4021d6e23810a2f0f1e1218a72f0f051924cf575b473a4420d93e51967e5a6833a477ade59e9348ecc1df3b6da1678008c09ad83f182f637987d773b43a56b2d56426af94b9e9c115c831cbf1b5f1972becd5bb1f13250b2e44fb71722a234e704a9a85aee7eb843c6d39f18aeb498a2263d608c3d1ed8d6f6d963a8e707c3b04b36180dc554606eede4dc7933b87c015c44d433a4b145d41187161d562decd30c5c3d3f749b67dafc9143f83684af41117d3246c860775c1c03d8af6648a44fa86afd9f344b78a989ce0b68b8d3aa0231b3cced076473827cec20e0baeff31cee47286db713b0880078cbe39f0cd4802f7c2627fdbed02bdae56e41593d308e93e0432953ef0574cdb887d60c1618328630cc8c1bda266df20e605c79f9595fd2f321ff317a6d5aa03d52c32333cc6212a933402690e2846b9bc363f513cd469269852ddc3d5ccec0bd028ed31d7b91f0299968cd019b04e21ffad3f9519899a97a75f15c9459858f21dbea7feb7ee2216ccdf56d1264b8010bd1742a153855da2dd9e5727b384b2c70814d7566c06232cb0361adce330e0791dbc95ebe57d3feb6c4bc2f8fd4652b77fc04cc993221df34ee97230d765c84d730575ec9304de04be2236e86be4b7450d358a221060206d52af24fcf1d9eb0363e2cf5f289b84c9338a572991f90396b83db8d9467a0321d83003d5a16e2926ca6f9f1747f6a23fc89bc562a1deb079c496940c877e25b0f614b0919cbdc06f14b01bad5814cf585219149bb66d099f4eb5b7e125eb12ba2edb0885ee3004d77bfe994dd94508ea654b5753ee29666b10a74b87fcbc10bd9b8785099413422c3069c2ff554b74be5789581e07f573e30d5ea8c3969c21606542342c9ebd753668d071799f58c9f39b6afe3c65cf5782a4a6de0614d31ef45b80877e0c3c07747aacadff3df61225b0829b74f426908bbcc8543f722117490b34b2b173b1b6251acbbb47223b6f080744ac49dc9edec1ffc3ae221bcf2b664b78e1640f86cb68877623f50b9bb6a24148e6c25b5c2b8155ce0cb5ced810478eb9226b68f23649f7fd449fa7d93cb6585960cf8ef80ce32ae1c97e990d1a89c4ae9a2477de91b1457e6c26f10363b1382b7eb506879bca423a8ce99cd92d34574bf43457b9981529a18380f6240f81eb1aebcbb7f343525f1be49d88081e2453fab7b52901a9db5536d294738ba5b0a7ab8ffc73387adb36811feaba21133cea69aec03edd3bc2bbcb8e6864d95cc98efc13b7191a8dfc4ece3f6cd9d82d4703d8951f543f4bb0fbf86f73567955f8d64c488f54cc1d251801ad234a6c241e7923a37da129bf4b85f35f13b28bb1ae01c7d23ca22882e2ffceff94649a0a095afc15cdb647dce06fd0836b7ea861b8a815afe3efa8d6f5907adb8a54900b11a455e7e1c5e884d98d06628ee8639a597c1d7b96a0a698468d542794ad4d27d10b4ec2a05cc269a36f7fef029fd8f9101a8101dfcc96cea5a1591161a9f82940afd4ce8015bcc52f4a5705f2b97708b9ad8427300fa21c570e5b717599d81e1c030ad44845450045a41452ed5dc3ac3449ada78e8a9e2cacef7d6f53bdf60006cf8aca95838d1a18f3b1cc909f389e088b57342660244bc878d546b464651e2a6bfa3f3e0727185586422e5693eae5c5faa98ec76a9a77254de0b23aadbd1deb6557c2964a10405d7a936b2855c9b2930d19570b0841b78df39a2fc5912100597604d977f04ef7b696add22ab3d954a6632fd5cac868cf7caccc35d659e014dbabbd39283e1e66290c2c981458c1c06b3a61e86985fde5dc2c57398035c21ea24c3ee55b137aaba4cb9d4d371d254a06aebeabe8d906a8d73f1d261210d9152f14dbd2e5c8f817e38dc0d2c19364d948888e21546c0935d8d054ac56368b0bb8596314d0ffb9289bdcd702f4407ccb865e6476ff58a35f7c6c0d2210f2df2eeafbfe7a08b509f9b3aad467d455424ae3f5aec894c3eaea09cfece6ba91752169770c2b460e48f11896a014fb3cbb9587cce5c5abad25da3e7e44344412601b9a08f63a2b622ccf21119d5cc766872ba728483c39574342f2a70130516342039630701b6ebcc0b829b8f5f3c5d82ca37aaa74e0bcce870129eaa4ffce39cb233e37680ee9d8268949f2824f678ce7882ed7c6c79817d5c64713e7bf92d04d003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000030118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000300d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000300a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000300b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000003029a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000030141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000003025e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000003012978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000302daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000030189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000301159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000003005ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000003005c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000003014d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000003003db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000302ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000301213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000301ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000003014fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000302b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000030305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000030280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000030223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000003017a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000003008858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000302618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000300f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000300e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000030172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000300b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000003005bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000030137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000302e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000302297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000302608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000003018373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000300422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000030204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000300afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000301998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000003028d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000301da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000003021d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000300ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000300e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000030107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000302f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000003009726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000003024f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000003003c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000301fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000030205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000003025110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000030283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000003021cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000030094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000300c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000301f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000302421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000301fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000301bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000030304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f1c6fd18e8f16a4291228b47ebc192e1b58afb8319b0970f10be70f4636157b4164fdc159a547d7fe032a1c6a2550f024d93b24219677b2bdba65cad03e082e2f780f3678da8fcce115b0a7cbd0faef8e1237948c2770a5d720661d34c756d10a2caa4e592dbadccb149351be5b0dacd8b9b67fd8f73f31d0a21e11f49aa477878485483d3375347b76b933be89e3e51ed004b812402e46eebcf3d4140e36989030a143458b3c650cdd7a751d0b0f20ed786af9a18c40f47953a1eef381f7a8f067f5ddd7be92af77e70813d7f6f3bacd9bd00d2bec3ee1441f428b1ea09dca43ece5f41c624e7e2e2455c2cc310db7930132271682b974c9b5b16e98cf56164de17d7f583dfc4ba5cf2a74af7fd463a505bc133239cf1567be473be0a2d1c36473a3a3ab627930512da6f08322367f48245ff50810dafef2264c2027ca58fcd9d965bea1692abdcb1791021e860bb7377a6705d345cc32881bb5afb76df04d0bfa367117fd619a91f8776896f3aee72f1894f76f8a6441c908d02b8bcdbb636cee121f891740da9e3b27fd3b03235720ce60961537ae390c27a0892c9170ade6e2622ea56d8f501726361cc8524a0418c11ce40d38455bf7a585ba92f309bf000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090765ef6412f09ccbc471fc7e3c724f50b131de247fcae93de33b80d63122661ff98385684935fc009f024e26ff5ef33303832a93a5b523477b175eae973f69855255d06ed9e72e7b654549d2fee836b6a4f71284737d7dd36ac3e9565c658b65e0ee9134d2cb898fd36307758653d7a0992eff1f684234a1ed7fbdd1f14e57cc826a601aa474938766bf0a115394aee9c2dc280791e8d808dceab9ebb787675847afc3533f92b5590df25f01a3c7f4793c9aaf95efe4b7d99f81c78c27f67ee59e3029b6f7203c08d1fada96524e6be1d999cd5c030852f0c5daea9faac59eb0487f075455433fffa6cafc9e596775dcb345873f667f34d07db8de856b3620df3f15f2a0cefe5f6a52ddf97f5acdbfa76da88ea37daddfd919affed6b900844c82d474509b0d4d62ad21b44b0211321126b5ac11a71a337d3a432fee6a70f14c97367195d71fa7e574fdc09fad475ef6529b51b1e9d3eddb44e0792149201b1725cb3873fbf1e6c8879ae65721cf2dc41e69344c9b90a4910fd5129f80682f4c849f2aeddb8a99c35f57e58dac8b4012805fb67d81e508d732770023a09ab3c4f80322d536b303bc3b0391a855f978c36387a9c975ecfd88f15babf27651e0500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008dfe204ed8990a6c6bdaa7919c3edb17378373145a2b6db716b8f0c570ab9e2ffe1241dbc339026cee94cc9be0bf767f6ec973079a96fde4356e392e9fd9f6785b19a8844468515ac4d4fbb69b1b88646216bc74d0b407f4ad3cc08617d76f076bdebfa5011e983772b8729e108c7a69af4416cde8056f849478be7a04684745ecf816f14a0e80819dc692696eae06eea4c9ab865db642034240235109ed3a864e273b8a9a7dc8359d64f3eba7206fae7bc4213bba224ec4eadd20a13fca94a29229bc61e419a1a87ac39913665893eff25ed43fa1b7f8163a6d6fb8d6479182f5c3931a19c26a9ecdf033adc45548c5aff1282cd59f55aad9a574513bf28689e175bc9c4ac914249e6b553d41c3c5c164881269d2c02c95f687e6a9e86b4280cd5115fe98036cc6f8d7acb582fd49d8c59f835569ed56613ab8c7b18bce95a119ce20810da8ffd8fecc3a223690d451d1b515c6e4e204442fe5893e0e4a87b5052a4c9603e39a90320022901aa9a575cdd632df42b05a96e40aa813517e7d8855f45428c5ad8ec8c3baf1c8559a4a99aafc283cbd25414b51b26ae78f76ec5538a816d81ba8cb96d0c32b94dfe91378a31342b7a927fe539851fe57f158dd180000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a591669cbf11d3281028e8d7688070f0abc744e93ea20c88bb3cd8615da56d77991b40ac5262680498ecbad0198daba7b3f54ce8e39ca110029b7699d6f3466cbc5309238bda6d3a322b9782ac13bda50480e293f84e7cc8e76eb10322ed9240b3a2c2128908563fc446227bf325837d07fad398ed5845b4c4d9b84e3eb647e972ee4001f4ceb7db3760b19d3ff84dbad103ab1d6ccfb529efb678bc9a8fdb49b05a3b96954d29f9177a78a9d2e6d632c49a810b8e9321eaaf2c797e2ddc6331db0bbbc3b26754d41bc72c5f9d8e7fc1a6fce53af441d051aa2b777507b7eece01502be3617226e1794fd8893a7a5dcf4946487f975e8bade59a6dec57915507b95cd1ba32797dc0b9ab4ec6450e316313e94e96874eb80b213ef6abf3f8c17ab9e8eacab61ec13653abdb4db7b498543eee9c6b785fcf1669e5481cf64485df30382c03f58c835ae2ff0c3daa2396a26356bcaf95ce408706199ac117ed04270ffdec973a1ce1c5aa75649208329f1b0bd7b85bd90cccfdc508696e50e5fb0175f4b8107575200ebdfcc41bfb3c6a88c602f35e8f844621061f6d9678bd71a6b747ab1539d625495e4107d6e84de1381bb0ae9baee1ff5040c25d22b88bfb300000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180a3b4d4719f2c444baae1661d709244e49e42fbc11634529914f8277f1c5ccb3f24e256b0277ccf50e31ed88a4b6ab4235a4b37f29f6b3f19b685a82a0a30c045677690df40380c8b12db6dc755907e7158612e223860ca2872a3befce95ff9cfcf32e6233feff85b060fcfa9b7fdb3397d53641e8c55719ed301528093dc4bab2674ddc55c4c65b36c6f2b02d7b8921362628e896ef0172124d0f5fca98c874e84c82b594ccc1c9441547a805cd09509d4adf1c8ea50236d134216ddf36081d0d8f9e3c055f2715af1eaa9bcbcc7007301a6d0daa1832641adcdf8bc4cb08accf7463dc5183af37fa24f290fdda9a610072d488091f48f00b9dfdbae97a894f1094cbcc0f9c9c4f5ad753efce3962e9e4bc3bc003e742f56386f954c6898f1afa8576b3a9af844369ae5a98428b2f1b09ad80b758c08c2dba7a303313630e83850972faad44fb263f895a7d6aeabfe7dbe44067f5cecbeaa82c9537bbe54ba3a4ad872b1ad104d1a3c394d559ac51199d51f4002e4e94d30f88c21e842900994fc46c1f90d18f1f5778d599adeb466203a6342cdfc01f73ccd121d687ff0f9c3a3d6fc10febe758146c5c35e01149ecab3a4db92bb86154e935ab2f126f0a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009775381d5d75d014fc957ab1552b97b6ae3a55098c3257089928187edf78a68b0ae528d313f881ccbc2904bffc1d744b13fe18b4dbf5258a56c07571e9334cd69bc5496529009cd39225ca022f9a8564e615f7b84886d5e8dbdf709dfadab9cf551fca9cfe1351183307920383d9bbc748f273de605a7022a66ecdf91662a9566912352a40d8f3c279fa8040e25339aa22c77cfa496ef4b928203eb20bd3b875c71bf9f6ec2a20679ec6fb3424010b43eda804cf6ceb416368e622648c516ee738a878cd5ee4d5025ade2daf6a23fdcdaa02a1ee3e3fd131976b2f3c53b1eaa13c99372ec46ab7507b5dfad964b182cff2663a7e7612945a72a6f2913795e1c597686f325b924ccb1810d0f6a59d4eee8ded002f3d7f03cdaf85615137e06db3fd77d8596b5db03db79045dd34ce38f0d8375d8c761368aa89a66b6b893a361765956b78b6a676b046c4a9773498ae9265cd3ad0377fdcd50b25da02ac403e4f2db428d5ea59dcd506ee7969ede5a578cd48c1ae2783f538f213551c1020baa7a7183f843286f36da63646d03919bff99733f24a9ced698e7cf692c2f9cc6073d4852ffb924aee9f29c48233d960ca220ab64d1fba03798e41497a23fe560e2600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ccf17b0190a01ce5b132aa78084358dc95d24ffaa8a053a95fe36af1e728bc9228036179d75f3807c297fae972441824793a98045d30b16d5375fb1a1ead86fc2ea7fc200ec6e824033027a4d623388b3f8cb9bc5800e301438b396ed7ca6e0df58270819415143edf2da1f635297c596462c89b531acbcb5465572e52b9cca80daf07396cf12e4f8cbd2259f72a4ef76ae71bc9b67f3c12ceb84bc5753a0a84743e2bde58bec5ed4c3f20624cf810555c1e21d8235a54ac5373ab7c3da488251ed39045f88b9b0ee60b6caf28d5402f13e077024c53cdd59a4428fe668c8014b7dc602fcdb6d8dfeda0f781f1e133704ca14e67849edb48fa1a5c6346ed6ae2bc84b36d213e7a93f57302e69461f15d2cbef92d240691816e48d84d8e10ac9581ec8aac1bf04521797cee1c212ab1a4405ca55ff6f44a2d9c55c399d0c85421a34d2dc9d263e2fa285740ee81643245aea720b7f5ae44119ef7fd942a590b0bef86dbf5479af47017a44e1f972594038d39035e68b892c86a74b38f5d1134c2c526463011622332ee6bbbaf3e92d95c8b87b6163ae2ba8c59f046b84745fc0c9cba86b9c6dab216fd4cc7c89ab7242b20e391db192bdbee4b59ebd4bba6d2f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b810d7aa085238d142d2a5173caef8ec98274b259d4c27887e30dd2b6ddd97d4f96b8219ec6825eb494da0ff103ad9d77252fff71f356bcd6a9bba6a1e3e37d590fa60455831f613f79e35ac49fee654fedd22d4b6e95869b8e1e6b89ec9992d294a8a65c5f57123ade12585ae181a0cb73d9a0ef2e082f501d5563bb1f1d15827b51972695d1a0f72e83e19fd3ba1c32b72955dff2c78e142d5eeda2a9e1de6febdb00e204c8bbcf8a077b386efeb7231a3b3126f2c503264ba13f7c137c3ed50928fe46c75ac6129bd424eefdf78c1b53abef95bcbe9bf4f5e856e7dd528ad9f49ec18a12559e9923d9586bbe090315c702b14df4bf3a594372b1f0416f8a9f3b6be99d2ff54924ae5df4c8681d1bfd1764072df325035ba485e5683aa5fe453c21ed6ab33cb60b28fc1c07f9bd99b64f77ce1c60bcde1fab319ea523dd3820091e98783b26045f7b5922be3831b2c7e70d07aa06bea8f88e80cad40c3899e0679308bb7637dbc7c0b264101e5c98f31e681133aa25d21fe59aefcfd26cf3b5e0f808ef074d4c3a92fad20563da0ae829158d48b47af4c33803ae5718acfcc634bfddb9ca58edda6abebb242917127fc7b29c01b102ae2513556c29c302d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000944a94a4fe84ff59d632038ae2a3df1e91f92272f8fc64754e3a59fb5951862846569350e47c5ea40dbf5b87e555675737ca3770bb589999781a0eab617611f0e3e465d17b7da6b0f6760eeaca4d1b4a5d9ae5cbf9bd2da8ab0a9e06d92fcf6c5200361084e79d1c13ad2065bfe9d6e62da03b29a1884382bfea19ecae1ec1f385446cb388a18005d4e4bfd1f73d8b42e8546f5bd8627d4be971aabf6415e4840705d4b0c9b89b27a45cd610d6dfd7676923e27f6ac26da4124a3050436b52e8bcb5bff2f6da9d807da2cfc18ebd6378c852ef1223b0bf0bd3079dc41321ff64038ec98d15f8aca210d1fde13dc2bce12d8237486c8b2d2bdd8cec7771fd2b4b2bfa69ffa035d5e6d7083004de0b732b02327297df049ea9123f2c38bdd702fe5f8106c579dba8231035c64a53824681501d91a81aeb697bfc21669091b5ce374f9cce15b5f3423705ea31584674d2096a734690c421871ae4c0ccd4cfbdc5f4fe46a1562bb6538655aeda7a8571fced753fd17d9e24b67b72c1848f7dcf5137c83ff875cfe63b7dcbb8758ae5c2d2f1002eeab123d89f7c860c194b8330dcb9c914867e3755dba8d27c531807aaa25ddfa3d3e805d8baa4df9a2fd6fd212cb300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f35380a7bdb132173bee67e163248c6298c1dd4911ad9e7bcdc1408465937ddd081fe5ab3f1f74d48defb7c1df11729e63f4cc67dd4c19a543237cf0bda03f3bdcf7df8106365faae302f2dedaac082931c372552c45bc4a3a4cc881b130cf748c91723d75d5aaff4c381ec9b3deeeb8875a8084a28dacbb5a8f393d56630593b9954b692e5cff78366ae24c5043410da6f24f6f5605ef49477274d94d6b31e1b689e6a36ed91ae95e2f0c80c04e5487478b1fa76a2c092c3b582b06a1384a905ba3aba5e6f023fe111ae710ab73a3c6c6b0c2f5b215bb7ea1b0b64baed5dbf0a98c585f476bbe65ec841e59f5d0af5877f55888dc70939c7faa962fe9d81dfe428b905e8a778e2ee250731dce8e6903ee0f9b6e746ca7793a8e78224a4545638ff63e1dcaf5f42449885b8c71ebd923673c91038a43813821c664543100ff18d6f9677aeb1f6593bb120549205712bc27a95eaab6539d2dd54cd89123d10afe84aca450c1bbddfceb7b275706a58b40b75be543254a7ffeb05784e578809006c2df2ce26eb5742f004318f36f312315966ab8a7b248c6cb19e66c31b458e7d5008daf6fb5b8f3de9acb62e8314e54308b4d55fba50422f3d9f5ae839b0ea23000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083b8ed3c54862a720387c170f3422ef78852b15f99b043e547be1bb211eaf994bbe29d2fcaff17d54686a7679e8307945a8087157b9517cd75594ce521f87d97971b50cf851ff1b7e919c4d3c17e7513209a1e36d2db458561c4431a7abdbc229c726354c3becbf955d78da36e333b5900bf9d2d2449b5f00c3692a40f01a9f31e1be9385f06af9a5356cfc495367d253d7c1487aa8bd4336434b45c9be0329fc0d17f829dfa4db7ebf68c131a0c24fa2d03f3d022e1172cf6ccc979da902cb4c553a103abae67674b4e87754a6287456a4b7be27201d86b9121bccf3351ff03f8c1e3909111c56af777beb9cd2ed485a89e12338311e6153be1956ec0315c18302cc3388feb3cc0116069a78eb8d927dcd81e7a7c94189b1eef9cd036477ae14266b1fa57edcbb32b320542a254bfda86307e58c0d1751c21da21eaddecd14a8025b5d71a513a4c82099194829300b6dd09e27ce7425165bf10d9e91f18bf280e796682f5dadd4de55b3bd0072ce2bdbcb5a1ede5b6805ed09e3b2ee546ae0591146b82139191e8ed1aa3859f5a98f007381dedd65d6ced2f1019b56a3357cb690530fc510d953286ad356d8e95e201efe7083d77027cea96de0845e742147400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002794a6bfb94a828b727070304637d81d2cae6c5b4d20f8d57d497bc3eab8210dd1342e212314d36126275d10b752b75e140f98381e2a6b777bd0dd9d5801aef5133312bf9d23e41c2f8f7b106e1af5833a1713bd8b88c28a6aad39cc2504f2959bbcd79b137bd7a7c2a1ef4ed9030d6124b71a078d7a18414a56c9f710685b022add71d8c1c275560af28e07fec51e5648d8c5a42c059237dbee582f13ada15e8bf14100afec5f2a9f3144fe88839bc7118b3317ca1f29264d891eabce8e87e1fc163a517bfa9616396aba46284890c476125a2a62c042fa660bc65c3dbf6fe03d0071d586371b3620c72132330f8e7b6e34ff78ab7ad49f251c8dfcc81b9ffd4df04b0a38bbe1e59144aad09b171b4edb2cda961e4cd1faaff35a3bea04b54d068c83aba4440ac1a56ed3159103e062250bfa6c19f128ba3a5a01db0dfddf1e1171880d4790a304634711b88c4e94cfd5964c2fcf6017f5c44429d196d6aed94c720ea346d182a08f2f322d656bc780b4b302d5f09aaddf1684e81c1b930e5d5fe109139c9c73192112f5d1699a5df5edcbfb9a35468c70b293620bea5e5f50c90648a461d3dfc0474cfc60f9a136abb1850ae8042bd7de039bdcd481469aa5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097eb2cde63de60b1e771855b68fd387ea789ec4677a364fd3aac20a542f4d2be1cfd0e0e2082c837c693ca5ad18a460b854796dfd970522007118c6b45c34ae0f7bc1ae741b4700d2e610226338ef1bd6576f58f0f7bedc3048f7c4ea78f7ec53b86384309e18f34d886720ee1c6b564b46608c1cbf33a88056d8eec539bf28b2abff902baef523acd89e57ff495c9db6e0c9a349689a345319fdc02960512e0f0459320b0f240c998f1e6774b3144f520c163ff8b4be54d2b129db87f81636af026237d13d787cd94594471e661b3fe74da1655b931107178dc3b8abc45f4995e4e4e60d29131e0a92b081078f34b4bf83b69cb6111b8f8f28d0bbddbbe70d713ccc60887bc97960298f16a98cc0864883c913674b45d94fda762171c8a05a358144704af8f59b76ce9b88852e8306c01156c2482a8320af4b6ccb185877d404e862b3b0965b9593d3a00e9e0a71323038fb5dcc189150d597e2bcd816a67513a8fe454e1d917450d960a181b8ebd3e613fea75b0feaaac0a347b27cc10b2b3facbe22f9fb261d2f714380d29eec9136e0122f38fbbd2cf1c5770685ea1423f4ffd956f3e56fd5befc5ab170a30416a421b8dbefb55eb48a85adeb3238f54b300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f23d1d14224e16ed7f771d9a2c764f51b23500445e63e3fac53824dfe7ca5502dbed7328bfc73a5f4f27fcf92b4144ababa5c72a5d9e3b9453fdbf4901461e9e20ad75e983974e733bed415b3418a51e1d2f2abdbf3b9eeebf0969e68378b497a8be152992f5fe7fd5fabb71eb83b7c8e42fee8b2ab1dc53e484bc3c0a2c31e1c80925510b9afec5f96c5f36049d2a769af0c4ed8f01bf282cdacc5d696e91d99c999ea533a5ff4348423a6077cf43cd77cd46c161952346c5a0c8408da0e2e34896ce62229f05523c5462dae250315b22751da9e9ddcf9b5a1f12fb6b6ab5f63c66af1ba13299b68f13349db2a7a074a6764196f8fc49ec09b3cbfe7d3b0b0d0ea3e434e5acfcbe8b547356e0a822b1b80a589b220822da1af2bc34e7bd3c3145fb648053b3949b3bd6e36ae9e79720b38041488d21956f65d8acf65c9d9cf63a60281933849325ca5029f66ea2426cb09174dbe198a0a0f2ee7f7af8b925235f572f4e75abffef81ccf61cb0bc6c84b49fa78bc35c50b693dbb59c215c3093b000ea7303fcdeb33001a8fc299248c470355f86a32bd09da37d2e21703c6fc0df9124bb6ff5d8a01e38d0d37228544e3ec5370dc5189a117c6c13afb2f232c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089d8fb96437f137bae0cd139686e374ba97c0e0b522ac92f38c9643ac9c0dcc0d3b3329a3e561a044b8dc2ae8a1f30c9f430a9e169d4507f95d33444c9ad497b24bfbdb97a7ce47e1e8815864bb7baa27ce6511718f0c7f551673580a21905c0424ee99b40cbcf1abf4dd19ad5dd770af2ccad262ecc76391c7f3a770e5fe109117f300748b69cc9f2e737262e6b50b06b13ecbfe27dd0e4960be9614c18fefcd59109eb9a4bd800065ee9e3374105b15fc05faf46e1518ea6ebd5c827b2c2d45df7846e883d71045c7004cad5e46085b64eedb3835fa02a013212b830b607b7817ce4b505046f003354130b91535e86fd97d8696e66f9962804eceebfd5d2c8a56d047581bb7319b61d7f625c92bb19777fea0d331bf9b41d4b403d71ec8a813f76d23c2c717f088772941d456c2c6f7b425918a0b29ee6e56e3c996c09ecef063d090e84c452c12cc6628aab547c89d09ef2dad1a9de7a2c8d313220ed6d1e1b0f0666983d875d86915dfdec220eab3bc01c613dcbde5785a751bb8cee6906d7968019d9474e8b8948e3d34ec804fed8d8cf657b4a5b80e6eaa9dc2d22e859a0db5655dde0681f9dc1828662fb6559033c5c4d35378eeec32b32fa0f796a160000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a455b31d8820c5aa6ea163cf40e22098f79eaaaadb3d29d39904098570aa0608354b7b710cad5aa797ea40faabad34fa5926276f6e3cd78f66667535a90805d6b1b1ee87743e6fc5bf8ab1400cd04f34310aebad0431e316d4b8529ff1ccb19b410b8f3ea181c1be890bdb1fef02b68857e710c353d16bc20422474d899bd24f68cfa4a182c506f6de83f4fc704f0f021d0b5e07520b89e43fd3dbeb225f7b2917ebba164b4f300a1a758c9953123b1b527b9005f81172dacd8a1a3f381fd0cbebe794686d96287fa31ad0760205239fdc93729918be7efdf79789a24b94b3b8f7704d5dedcc44607cc31d2690cbd89d8fb0009e73ea2c664416347ee0e4cff779112c49123515dfde4c6ab7fc99de10bd3a554d0baf12a5af2aca5c895af75621ebcb9d70d461bd9b267d75201ba3a2235061926396cdae58726f483741cfb849a4d75a310e4b5d1b96c3199def489e63f1c648f203f8205772acfc7d26bb48fb6a5435c4db0bab59fb334c9d6f7dc751331cbb9c8572829d43579bbe67e9856a8d0a07651d115326998471a39132b180d4d691722997470d421116e65f42114d7c63202bd272573b4a77b15712d1a634500bb6e2146209a9f92e2a45f0533c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f6bb087742d8973a68f20ab638b03f11707464c502c88a8671f8b2df80028aee7f7b157ab29b7990682c2c97e93e3a3e8ad000986e605bc5d8104545bdc0132f0bd28557eaa9cff918d30c2313f59975b695e9005ec7e28e20d8f84fdfe6adc21f6f2cd52f8533d0e1143fb875c0632def192fdba9bb993ffaed281dfcaa7b3ab030d2f0dd7db78dab637a28b803310b8aded7ffca4cb6088b2b5b200a27e47e25efa6e11fc0d5fcec6b305ec9264a8e053286305138e9f8e7975b181c5f915c7a6852bf27892a1845bba5b4ed8f48bc533e795c2fa0932520b81781f18509cd75d18aa1e1a6cfa610669e01551957c93cc22b6294f47e4e94859b1576b9fa540afb6d3b0170acc4fe308adcdd8dbb10acce47f20cddc9fb65c459203298b5dd1f402100c9e98a44ec95659e3459e0f0c365116fe4c2608ee9398a445a255027eb28aaf3d9bd14bf418f371c9b69c7a826842aea51feb892d16b9d478fdaa66074106f4726aee51fe56da22eaa57371457e9b1a71f62ad209160f09c074aa49f8e8bdb8f1cf33726a7a063df9a1ddec00ef2ce79891ca44acd929fc6465344276e15d885583b6268bddf9f00832f4ef9e3b40edaa3af65c3afe2a7bf173eb040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0518683d1a68860298c75b977ed1a4adb7abf101d575a053f32acb7ef971d8a1bd0fe5b8de06f337be78e6b98e30c0f3e5908f0f7a0b35676efd0007dc2534afbfbcd4a0739de52cdd208a0faa0c3c6831bada74c190155dfd7e082066753b020054cc3f96abcda4b4872827609d2410793c8195a280f9c8e264329cbdafe1a119b99525a0d3d3333bab06782cb41a39069aba40465b5a4b1e8ffd84bda14c58713197579d567054621ab8000d89926d711ad6e37656f6d68678b915497b235a9b3c0a7a5188e06acfbd8335a55e4e55307ebc21d00a63c095d36e14b532db64b7a2d6b3541488a9dfd3b0d1fd0341767c463543f4d5e1c5614a26aa931cc4e0a38f54eb1e129346546e6a472f0b411f72e5479405bf7f83ff4c81151b7b358ba051c21002b021cc04767720cdbbab09610eb0e4cd794069b06fd57d66b1eecf28c1900ac9702fdc57f4a67fdf5552b41a364ba33ccdee085ea79aa30b04b8538061ed7e4beda2b3cdd8d2db261e5b143c5c857efa3f9517778d39319c5810e08d9d190ba4938ea33aec4ba1f59c6ebaf735314e32ab3440e236a1d3f6c6a7b6e2bd41e6cd78b0315213a8c29373f146ee334d7decf9b9022e744d277c077c100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cc71a62a9880227b9381cbd3221c9031e8aa02e3cb608d362dab93f63946ccf636b736ae7dbc70cfe41a906dde109ffa51f6e33b9e2bca0fe101ebf9f8009c6794fbdeba62f5b267d47802069a59409f5c8939504e40296bceb3199152a1c46f759aae548ec870a5d6de396b7481f0af8052f0dd8804a81019964877a1b4f05215dbd049fd96a5d656a45aeaa36232c2ca96c5afaa29f96dc5c422e2f53a0cbadf408d745d61ebacd40cf5295eec86eaf37c06ee757dd6bd5976d9505c77fdf5a08c644979313e33806d705a1176e9b77bde085d926c4865417dbe73586db119a3247474aafd6784609b2f1f7a36e79a8b0e6514ef16ca1f4b77a588a6162d12b3af8faca5180d7c534a83deba3b2d34782aed6f638e6c375b0dec55542a11beb4fb747fbde05e915cb8f12019c13968bcb385f6d66f38a98c9c54f041e5e1162625d30e897386338fdb67dfa7aa68395c6c89b60163807d0b9a0e72f774cf193d92e9efb5171d8661972ae8e7691f0c4021bd785a8d42f979cb9c13daee86e608e59d3e1d5fd8e57eae3af2137c1929b9d93f2ece7eb5ff36030be8132b7474f4bae5e05181d11816af00df1870f011ccf84f0c6cda0445a243f4bfec9db0700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f9e1978492153970fcb9fc82ccb60ae5e0a4065d44a46ffaa7e7ef5b02b1046f3a483712c8acb2818d41af55b160c11562415c995cbe098c0e4886d3fb087dfdf634a1f2e2eadfecefd6e2cd154f0e5688609e3c49d80c90740dfa18cda4832ff98eea81f5bae2ece68530a1b68021806dc9b0d1c079b98bb70b3506e63e6ac3d5ea9fe180688193a8d93b3b580e7dccd2abe82d088c1bf7a3dfda6580ed8fe5da40081d1494237a1e38bbbbb0b5b4855233bba09be226637f81bd8f31a9f0ed614d82da031102d3586b34ca83548612273188266b5a0dec18279ca3a149d913ad68f24aab28ddec55c6280509ea2348ddcbafe23ccd1ee51f16546eac9428d8d04de2de87b9771d42d6413ff0c3f20f4a5d3e4c571cb4749d9d195f8f9c09f6fbc03221eb12b4b8f3c27f661e6bdca780e31aee06093728c5356a3e674c0db4bfc59b3a7b1b9275cdd97093dbc71cd720816e4d6258c381fbc7f98d83663efd400620d61c96bbaa2b2ddd01fd36bc4b077ebb6c5ab3d2f9a0433e780fe16faec35c170ca7c0b91ad2d14d8c98431d4f00c6f32e72dcee1b44ca2820cf5e2fb2928665ac03c0e96339de4c101548f0c2d4e5b93c8534428843afb7c80dde6bc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b175618d10e932fdc23dd1ce8729c2b5dc80da7ccaad661f0d1d21d423d6770431fea97dac59c005ff1192656baa7c5e3b45eb135baf3c8e4538950daa4ba9a02829a7cd3ca3628e6025e4e9121fda525ea53ab9e17d5b24589cba379fc0dc64b3c46929fa71b55b7ae4bb509341152441b00b9716ab30bc233c79fc0cb9977fb648089446486c9302685e0a655d9840dfbeedc7909125a9bf2fad9a76a6c0ac79a8a1e9d3fadba9438d9c4f0844737fcd2caca405242f250ec93d0dd2c1583b9e2a0fe934f8952c0892329e26384385473a75712782f713b682c96d6f6d78ee455172a1a0f0afea450b3d5d1d4b821772cf54313b576392ee41ddc7084e77a28c7626dff2981d3dcae42cd82263174eb4d906f8aa21fd7bf5e56a3bbd38ae627cb9db0b336a39f457ce44a6ab28668969c9a4f5babe1f0c8280f1784c25e2e8058cf22ac099b17bd4ac0c730a86bd85ed5cd3d9625c51d46173414a9ff2d2938190cafdba6dcc18a8245428aec9b82fb0f7dd242ac8eb15fbd08e7da6d7ca10b02f68302dab8839d6114b46fb25cd849f4c15de7960d319a892ce2a68c1d6d069cf49abd9a33997f952b30d11586e8c5af8228bc93a9697773513aadacbfde00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c90d2fc0f071a68ca334df32b8b4bb5f4f3ddf04d5111590a684ae313aa9b99b10718d4fbb8ee4f9e567c0896f353d601c86cd63c12ec4ce0b5470ccedf3ffeaf9cbed3671ad0c22b9f48fe52c9786a702f92ba7b9445c3f348c11b0e8ae4b486bbed8e24bc3765cced848bafac84473caa9787660464636d7f693cecc78d86af095a87553c894144a78c9281e6a7ec75e304a6b8989c94ad74d0394bd403d9b9ac4b51ef9c8a64e81569d7b6d34f59a697a0e6acf86706b2e32e61d4962c3ea046243a415165fc6d9547a6b55ed2f88c21f63b8ba783dc1d3ff19cd3794af8bcaea54bfef641cc66ef4bc047bfc827fc57965ab2a95a3693d22282f69e7bfd8cd39fb4109f7d004870e9e3fb83d4be27721214bc6fb6e58b43edf57658d46c7fbbd9056d39d0f4e54e001c830914d1f18e008825f559798928f412279854def3133a6cc32a9b8e02844162320c0d5dc1deda36f8b2315a7ab58a3f61f5c6c3ada3f49e24e52ab73832c4e2f7dea09d6f6598810c9c511fd08b9d6f3e43d93734b0a91384ec1fca475486a59f51c9185d06044ede9aefd8dc05b91204286f8a423878064ef2924972bbcbf0737cdc1e0914a3ed841bc1ed3a427ad665fc4e3b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081912325a6dc973bc67e85186a71f32265311320bca7f30aa4f62dcfc45e6c1d7a16674bc6621e153381d7241910b071e74b941bce02a0eee937e0fe518d82df15b5d2edf3bccc65b2f20d0ed649771558e34b04980470404916c0877b8a37e69a502ce183456c60aedef1256030854445bd181c8bd4541aa6c8bd4f17ba9095e58662945b204edd1d7f19f4201dce56ecc388f2cd58f3dc620403a30d006298dc66f36dd3de934423e9a85052ab8c4e6861efdb2e2570574f5271c6589b26964be74f55b2c2360e24101e0bf60aef9900ce711fbf27f0c3be6cb7fe109355f460e56874e6604f6035d575fcd488f0c36517363c796200e9bc276d6871775aa442d42b1879232c6c499a54d008fa088e501537e4d6f6c3be4c90edb3116bbe17d40fdae0e9e6c47388b5c2ec999717dae0805576618f597419fac4684cda90759d14e06fe6d978ad590edd63e721ce00eb4548eee3f3ddbb6e743602cd41975f88e86c7e15051cc773411003b8105855c7cd2e64ca17708978c9857c9a4c639d10ef6cb36170d86cdfce71fc295935cf354278b6f47356a712a885228ad53a85d04ce07cfaea57ef49dc88f377d17497cc7bdc6cad721bbf50d3eac1aa0c5690000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027958b4c7c146800e36933241b8da707a64ad43cd3ded0845a662e78e08d169ac8e654c16607b6b35061725df089dd1f510b4c18b0e533f04c3f3be76a3ff88703cf166ed900943ae68edb23e0ee84b6806c928390ad4472a8169557a548a0cc8acc71597297973c8b266208df110df77f74b3c15f8840f0b13ab5f3c81fa200031c736ee4d9181376b0127270dd6f0b1fa5e7faee78aa0be110131181f389ed5fec5b0fd0344d226207651c8db802aca615724655bdf44e5ae9bbc5036642e376f37410d859399355df3dbab3dd6c12de515fad41b45c1353f3e7e675f22ca567cad441f9a1bdc4123eeabf55b61722517d162407983b3c9864c38fe41078d49c95f4ddc66e709f4968ddfaa0517fd713347fd6b023cc9518b88d862f746fb0f886a7de088f60e9652709fa78cb15486af09f43b35dee8475c8156a07928825754c3970513979bd6b3615af0727d0947adcaa8dfdcd8fea141761b2d15fddd99ab5cddd43d9407aaea7b7f4ffbbbd9805717815a094aea9af2a89431ff4773c3a3de36ed67c4ff1792ca781233537ae113a8169cdb3d1ef33e401dc29e8a72e029b943623835f58063b29ff8cefa22d7ea2fc298e8904e20186f0c3a155bfe700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009806afb9ce6e3b20e626a92f7d0b44fb9883e56875bfd37c2ac083dd9b4df26da82977b167310cce338daebbed81a51df2e54b9cd606a1d154133290c9ee7a2e38d761d2746b759a77ad3f80cf91c48668ffaa0ae0ede3f9abb2bfba0b17370dc7140dfbec721739581d69959362c7e30729052b6ffb672a1f1868a131d1973d6660bf080fc53505fcac028bc62e009ad43967771d1e20ad4050e5ba3a7b4277066fbd779b1ee70a877ca5d9ea70c16abe7b5cc5165c77c1579dad63458af981d9187df5d5662aa58c6e0ecfe93fd5a897d317bb0356f9e8aed86a2ddb67fc6f6fd74ea8b014274cc2c710a6cf114e67883687fdfe8191361618a8ecc18b6663ed89f9f719e4d16c11aa52156cd25788bf4a44737304465fde52e243ae64d15f608c392e097db7812c01aa0db81fe000b87e42be5f4ba0601f29907182924dbbb6c56d138eda09c8dc3a0a525237101b53a1de0104d0dcde002569db1d63285b3d1c6cc7a6724d99f7065e9837bb1011217f2c58e218d3880ab1250ca0a30304cd52962dbfeb01d916d36ded2808d7525fc630a544cefa9010e770eab59c6037cf22be9264ffa0871731372795b04ca5bd7a1da41877b7dd797ceda5c8f5c0c60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aec7626a19c10df9d40ecfd431be0da5fa2981c2c545891fd6c90d66c6567d899d7aef9399def6e634099d1f2c82df75b86466bfc706580bb1d51b2b86f50d23f687586cb410e4a43faa0c26c07bbbb8d8624241b1c88de524c3a7f639cd6a920afcfbbfc4a4b1950d7f5abc95e0f58c8939d17fd4788c4312ad3a3901c805fa9441b7fc90b9187b4bf61f5dba84b3dc9fe83c6d84a8866b579130096581e51954dd49fda27b5946a48e00bb37d0dc40c02c7f1d9ee5616f767baa1dac4eab67f355d6927bf328da187ad9fb04a8aebe3d2415ca5644689ea31c27c984d7667c3b7875ff63cae0d8040efa8c9173371202a5c9a4c729b7a8d38f26ebc3d6ebe5da78cf125cb952c62e0932dcebccd43518bbe217fd4ca1d73d63ba1081de218180525f32c8cc4099ac268b6f0688bc13324ba0cde20be7b6005f6d6f85af1ab6a42e76138edaa7ea55645e08f0ad9dacedb8959c4916c4e8af131c4c9bb4efb02457f36f0a464b7d4c5f8dfc50cf470cced0b9ad37b7d37163cd4d96859ddbcea794024ee90a0b882375c96233f87c7633f0f47476a25d5290949b0b15935a7e95fafa4f0916e8c36be46ac1717bdba60a7ee1e1c1e85b18cfdbfe9651e5bd0c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c641d2d09301a6756b1e34995723623b5faf44652cfcfc35911cf66669a0b20af7948076ff5129ba65737e557f12de9d7ff28476345ffaf1932fda2eeb396d5cdd42ba56f078011d7310a92022366afddd587a0923c0be17b49755d06182bc4860b82e8f8bf95b8962ae1cf6fa9cee04f4f76a89f86cdd3df35aabbb80a9a3b50bfa9d5a5f66733bceece9944e53dc9ae5c5aba2231c40f09db3f41f7585b096e0707ff151bd80a98db3f14e07342214b255166316ba75b08f0fd118090ac2f99e28c46fb079d5b7d1f5d49c29302e86b71af008ae96249ae993e74ea75afd99838b535931810b401c217ab1fa244d33854ad0d0062b0a241cc12db3d3362ef91ae72e25002c3f418fa767f34edb3d2209c9e9e9968b27d4fb2e889fb6366ba6a8ced944748c85895e64e01a2ea0ec557b0c843c631a98c54628c9e7b1c1a79bcd002a95ec715d1be7a5c9e6f9d2f85dc493211b26e3bca83d00e0fb0458b76ab2f38df8f0bce0c425295c918a36b31c1b3fd7c4f89141fd70818349f10c7fa730104735fe56cc93adcc9fe0d5794ad42603162fbd574a35fbb75dcaea53dd0dca67e9bb7551eebc5b5dfc9f1fbe76185648388e4080fa067c3c6f3f21bf6400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f7332f031901b781d3438bf36bd6af4a97b92fee211c6457a2611bf7b0262be1e749ef7c864d0b470f6e6b71d6ca7795924aa20da18cd600f416edf3496956be1774be80a84ea415822746f3c6bd7281603045cfeb37c57340c094b0b64f2c938f7fb35579c47a7586d439f7bacb7fb1d81e9b8aeee06a28f5398ad847bd561495c18f448ab70a3f12e7cf9eeea47f89279ffebbad5dc4caf3352f2889a20c7597394f1388692579b4c6a202f490257c44b268f1ac9c4b0e90b0ed7ba5bd23457d175ff7aa954eae396770de4d589fae482c54c9af45a464d3f7bc03b8c4a6c987c6debb9286258abb6ace828b499246b699794d0150dfbf48b720ae5f901968f712c270036e302ef0dd0f9baa4953a649988ca4471c71df9fdcff0e765143d298499e9f82cd0cb6e1fe471993dbbbf698d7d78fba9e4436aba8320375cddcdbe3dd5ad36dfa26711d5e91ca501151c9de40c4b50d6282c88cbec4375c50d0866882f7fa8eff861e7efe5853aa5cdaf187244ba392595e22446d0f69576499bf38879e380d729dd40d93e21dcf680572d61e2481f1698fdad4f9aff23a69ae95be6c91ee9b893b3ed4ae0c25b2e21ebd225bcad6d614fc8a86ad3d902e77ac50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000298bc0d90efa140c064e868a68960a7615839108f6d87679399fccb83da44271a00ede8d967f985a794b415623efa3412d53c1b850fdbf991272e8801a817b972212f0a210f52f5b21c775ad20ef0bc077e6a2d253860cb7e1b0619d17284de9f0753a346b6b608c2fd99086abf3b2456840b5eaaf4d145da40eca7dd6c0dc7b8af54e724727ca5f926744b5a3d738f9a031040ed972bae57ceb2fdaca2e333331bc4b3dace741ab2fe4deb3f322d39abd8c48db6667f54e83c863f297c790bc0140200e43c08326f521d117cbfcc3ca224485dea8e3550b60bbb5fe0d8eef421a7c9eea4d6a9f6032ff48e1211b503d665b35d608a6f1cdc58b5bc58a82d32a7634fdac0ca0cc3f329d8b32ca18a64b4ebfa27d59b3507426482fe092de2b872cd849ea099688427aa97c3fbc5f6b560d55fe5c6966b6a126153e604507c90821ae4177e0a2c2badfbfd2005ae9969cae4ddb6eb51532d5640699d60d7cfc0eb7bca17acfb14df7cbe453fd8a5adb87e99a9a6c60aba235b97f060d14206c547443ac6ff55c32d622799656e0ebc0277f39051e031f88762e9d1f7534edbe76e07e09c30bac894d67146a775e6bc6f2b4d32f91df910bf214abba1fd6fd0284000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097080f968cf7aa61099af77103e9b91f734d9192e8f77964ad1de4c56e7b0a748e70a8cc9df9a29f9f9ccd63d24a91abb577cd30f56318e527b04c5066059f767b1117b9d43d47eac4137e969582e8f145fef32ff29cfa7adb2fe3a4d13c2bc9f9d117c7420f3d1972d9455964a9271b6e2b9f1a4529c59d64d8a588823c3f4f073d3f5b67cb1a359ed8eb700108ed4c6be9d1a2102193b865391a2ad5316b422c97e6a36119644b0f781c621b0c1a03ec5b319fcf1990f32e3718d7452a5b701718128f419196a9b495a04968e91ec0a341fe1e6ed70f04004205e247cbcf269ec16ab70d0e2f0aea3c6bb5194d2ec854ed54a981ecf77a5cf9dbeda01029ad3a6ec4c739ea77e8c0536cd894b8bf8400a60b77e143ac5c7415766e33fe7db2afef7d0ffa2bb83e8ef7b2198a44254aff406aae6a4f3397c664cb771e4d29177a349a89e1619bd60cbdb98ef88069763c13c2c5998129038d2f42da005d42d6c439f5e233ad5ad60dd320ce55a8972db1c69097ea6736a821e25a2779047a16048907bcffcf734cc9d33999bdc1efcb4dc849d09ad7d629c966418b4c2b37f9139dce5394dcb7dd85fdc6f5bdfb6b2ed782b5fe63e3b65ca75f69393eaff29e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af29ee7e67a7ba3711e1af8be0541f7dc11817b136e6f7bb3cc340878e5f3483d04b97490595cdb0bd33c56729ccafbb176482813e8869625ace0cd288cd0efdbebdde534381fa61a0bf477db3c3e257897c0c3c874c7829caca6635b80c1aba659bebbd116ec65fae40b5086bcdfc9cf01671d652fa37bebf066be4c6d0969c22120d89d94fdbb978a511df0a83cb853992e8811b4e92a8f83f5b24e7bdd918c0ba1eba98ca9c3dee9cc09b56b2b500f6fe6267514e55578ecabab463a77dd8bf1c4f13c0d5f5c9acc50051783f518f700229e21915e3182c4120de05e1040e87f4592defc8a5662d7de38327aac57c98cda743d62b2f87d5ede67f47245f056d8665a6627b3eae97d53cfb2598a6e1dd740dbfde24b5cec3519e3e397cd0b854829be0f70335e657a6c78d164af904821e420e2fdfdcb283d7c1c9e8f648c98e05fb96307fde77126455181f77eb90f9fadf184bee2f325ddfe71a27328d285b098857499a08096f52dd4cc1bfa26b95a2cf09ff2488e77f4b2a3c95b3bf9cc2dd9aab19e86efa2613b3860076f23634af00f2823179b3d5dbca2a663d81058d7fec12071ba776f30d9ef6169d7100033ec5e43d3cb8e2266bd179d8f67c7d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026e64cbb4a964398a411124716dbbee171000537e0eb70bccdd392bed044f7b75998a309e10e7e79acc410544b62bbe0b3747e4b52930140177f24e04dbcd31040275e7a32c9215b8826e0e4d28e1d703099405fe010332e417defae5c8610d984b46cbd254b3298c393f5fd2e470b0bee7bd4990eba7e154e37e625f4480f6173e93d7af4a7a4b1682640adcbbc47fee5e3e7907b3e57f0f28b262b073de309a7b2794367fb612748678bdbd4150208ebf93d5ce617e8ab6e25e5c5c2c2fdfdb6339f2f5e79efd4684bcf77732a7372512bcffc7adbe54daa057b2f032f0dc74ce77ad00d016db245569e6debdafa17694649f9a2839257227b95f9ada36afd45f3176a4b2dbcc687723e2868de46af71a992076ca0da089614014188e9f943542b9a96b6cdb954467eae2bd57d68df7fcaf73753f3220182a2da53eb9f84a70bf6f93014d2a549111300e41744a527dd7a7803b5de6fb8ca44bb0bc1b5fbc85f42c266699aca91b55134d3e436703892c914edf996c5d2fc719919d6ecebd96c8385fa2fb4f22a5e448ad99848eec78b1b864ddc9fa66da1e37ade91e0fa49701008bdd8916501a1d666566a1dd2b90e941af22cf53eb1e7a42524fffda3600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009227c8c223c0352453a66155b3044b1b790bd25791c1c0dd2c524bc649bae1520a7c29b4d2ba5c6397e84fa4724908cfaf9d77f70b675f017f6f3c65df797592aede59b60a31e3da78b56b1b6ed5b0564d12a9905648419bd14a8868489b872cb5bb78d99fd64523a48e8dae62df31701e3f42290fa8073d35da7a25449368f76a574fefe66739de6d02ee40a1b672e42bdee2def61ea5e835b3cfa5f2710a5f688c26606131ceab335653bdc24605663e531cbea3982d782adf07533c34f97988d7f334b7d2c4aba4390b2b4eb56ef3955684011dc3f15cb24314d3b5796b8c3d80e0546911f09acf2a9bf08aea5296143c97ab926d9ff1a8b59da7d5237957d825944835d023311ab444d5e60890c41ab04c9df502603b407811333b7cb3fafb25e7f30327984cbf0b9a22cd89f0d6973b7bc8d7ba79422d371ac0554c0443cdb54d530466a3de4e615e5f47c3e33a9c50a0a4990446538abf9d808ffa7f713466bcee5ef7fa2fcccc6c3f3dd0db31276f35ca1269c0c3534c1ccef36c44c88622b8429acb1168cc7a82d14ad286e795808ed649613f1ca4002219ee3f67e87ba80ab4b534c71edc17c110dd63cf9e6a400023e64e7fca1e23b4035596eb77000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022e215d7740b2a072a82068bcf13a4df97ef56dfb2f56f16664ae9027693e891b7feacf20321f6998ad661c48ed73ef17d439d2564c1d611bfa99e719ada76bbffbe79a87830c523d5852f75019f3aac5926d266e8903ce1a4e85ea5509ce7c867592a11715502dc5c005654637a66528d1325e5fdc4ac5a32cf82f715b4059c2bfb77088a6461dce51de9c7d5097a6cd0933ff45bfee6d2da3d682750457f0408c38ab67d467cc57012cce7896c318023fde949c086a2c4e03f438ec39777b599841dc641067f0025d893c98ce571727f36366987d783f2f3977709f639c1c7ad173289b3116973bc9ab76c7eceebb0089761b59c8aa0ae3cdee0cd165a9462382fe1548d8a94bea5a3fcde76be287cc3a7392a6399ea6552ed7586ed085591136ec918ba9076b3dfb000b868143cadaf77dc4b0fb19576d394eb6bc9c6ad302c9481e453c21924802897f040af76b1cc229b6f44b96b45cee3886ef0625411320b7c38e75da3624f50ae9514caf1ad9cb01b79b14987a5d4a647ec29f7a334162ef3107f6f6a3461fb38e168258a3b698a74c29ae4ad02db914e6f11bf173a4ba1af728e7ef544a691e123e22d988e7f7b1e2c15e7e76eb5665f0d437c663400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009187d4a16b3667c89b893aca9d2a9b5cbd07a190bcc97b533659523c279256a68bd280f89ecdd8038ab762d9d06345aa2d44d184417a95b1bb818332a54da7f3895111db525f2859b16815d21711dd7dca48924fe7e7a6d3c08f509f4a6d2a94c3000b05a483b77aa9feddb65d5f217f18835c5418f3100ed6f82b856455334fcbcb971826470c2cad7dfe9d949d81df872fc1170afd83853fcae788c91551717103e521bb689116bb35befc61b336195fdbbf67d8af7ad48d32c87e585136344d1734d4c6cf7af126caf51c9c21d21a73da6a2a53c16b3835e117bcdf05777aa0895ef418590cc67c1a7aacbb3846b7f066a94ddc792e7622f9d563c2ab8e92d7831791787477a7b6cae695781a5ddb9bddda20147e279a42c6bc37d67b370cec6dc69f62aac07a703609e224ca2bc24fb11837ec4d9f45c79ee438f8fab4df542134280ea075826a9fd9e7410a8dae9203a56a1d9a8864c43a6e2ed9e559bd04898a94b91467790c18ecd0273f901b157ec4d11b53ce4a065926bb937e3d877728bdc6eaa5951515bd143ecd14719d1fbd44fcd365c7101ffc0711e631f42ec98cbcc8a38aaa0f7074a406703ba89372103ffcc474e0526a4bcb80298aef9400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa8cad0c8ae5edf3f29ffa71177fc5320e00dc8a40577b4e828189efad1dd339fde351ec46b15bc1cb76ddb6cd24e5de7cfa6a07084288e8678349d5fda955209634a563470e115b84b223a167eaf7a88947d4ded5b34fc4591bef20c626850fc4f9abc791c843973c5bcd7df888eee08fb0ef72e8dd6c0a6ae2b4161bd4a577ebea1175e7794e29b0013721700abed50ff894a4eefc2ac2d2adf2c7d61be1444643556c2a1a17642b80f0a741ba90697c2d55faac867bdf70314979d632fd6a56a86778abc4bd5a64988e0c29e6c062a20f087e4a027597ae4f2179a24cea71d92a71b685635105d6917bfc48d385a3c61603212163f85629adadcb930e4e3cbd08e20f4a9ef376ff3069427741ba4cbb23dfe5d409e549cecc284add1dad95a31e0ccc9d041fa64a300ccbdd38f3611a714a84620044f661e650360b4c57bbc67e10d021af1fcb54f8fa50f21ef3f629c3d715f9f29728d91ed642db2c074f82f0e1a19a4ae7a43a539a0f9662726ce0d17fcf24b7eea2da802159b426d1a426a5faa9f4013be1f2fa65182757d126bc8031f369e063e420d70193fb7505d90143cf734e009a257c59e56770b88e043bcdf2d012423a775836911d1c6760000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000817f5911dfab733cf463d742177af96608e003523f1d257e4635af5d0ac9a708bac4ce6aa4106392b267d21372d8f6f47b9d5635b81496a37f76daff0dbc83fdf03fb3bbe1c012fd5f11dc4e773d258e4c229cc976ccdc211339a7029eb542b63f3568fd000b70fe81754b916a8a4cb91096d18974c9f14ece7a504b5a0bf4085f318893c860d16ac9cff5f9009b2aa69e89c64b9d9f44a9810ecdc155314388db0eb14f820ef352b46325338015c738f4813846b180b44d7ef8459a1130076493ed1ca5a87a9f82721721fb7d26e603c54bc3e0115118e4f2e39343b34c144b9348b13f86941ae1cbb8ba6760d2ad7966deb27fe2c70333eefb007ab9f391a1302577ddae3ba21a291424ae1d2f24a4292f22ae8221534ff931f6300de71f71615487c0403e023739c67fc5e467d9ee517aad33f3407dedce51e338215c487bc4d1459d3dc644debb5dd11f17ddec35e37a71b0d9a2a20e40b916293a39cb7f81495f3661858e3e3c1eb695ce4626fac2a24553e0bd3e18e7bd1128a7248ed4e35c0e0269442eef28b242c060936c0a5bd8eef34715cb763fcfb0aa0fd69b108d7a5d0078ff9ece24660fa545701772b7fb4d3d4be2d33fa1d92689af7a7454000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016af943d7bf77115c9281567e9c004cf6dfb40d9b90aefec520388facca39ed9468835809f639cc5c6679ff63b213472e4609195709e4996294734d935666b17a3cf6e2692f08497637256bb9732ec706c4ea1aedccf53bbf7118bc6645339e2a97463ce64aed72ef2e19c4a5aec4e0b04cd5a4b9b3232dc4b1d12924174f24b13ba591e247f9772091bfc18d5c6c899bfea4a5c1342e4da7d6c68add3656f018e186d1c175862c65b87ad2c9c4927254abe0d672550bf26ef6c4fd2904e31cb737b7c850916bbcbe4e669bd2dda36c5f998a11e76ceb1516ff093f3a7eda78f0c177fd2789aea1c850d3c03f9f7762c94288ecac041687820dd3738c2806c7e7a643a08b0abf1be395f16f71f4b7b075b39a16f1e36a775eb16b52c013ab485c1ad637cca880094f10d4e8b5f5f0672324da4fbbbed3af1037597c474d56d991f1c0fc796b6d5066690bf79e166eaec1303573835c0ee81673225ce2015f8664f04701a3a6dd43e6502529d073dd2a3c191865331644137c5252762984ee25406bf6dbf0cc1e481f053840dd6d09eec39767d4756f515ed66887170936752dc47142b2df54836310432235e24e1d2f0e888fb93d7a9e2464a2375864ea0978700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fe35d4d5614dd339e4cac07a65b648b95883bf675a559897cd0092cb9d06a6e156fb23a86a7cdc9b9f60513c13749e9be5ed9217972b3d2135614e87cd8600e2c5bfac53c4afdf174a9e82e22b9a8134a0b0a15a958dd4b2166f553c495cd58f19c63d6ab20e9d2e47189527083fe71c2d7a2fb9e8ffc7d3302f36514fc27cbce7a81ac3842f5ce7eed26eb5c5051b7d77e4948369ae41eb5af386cb8a6c99f8bd1e3a3207b3d9622c53b030d953a7d6de0bc71c01206abff7b6a3b6369f57b3c1148771edd58e7fc8cd61ff7c42cf45850ce9f62dbf9473f95ed3fcf81bf9690132b76f1ca8407250b709ff66c559ba51e90e106eab86ae97dd332b55a20ac36228db2008a35d690b5e9373e473b3c7a59c2f569d6b97de817b1148cf499bfb3d1a6409354e05bdd7c56438a65124c9adc5bdfb7fadaa041bfbe449b4da29245dab3afd5e6dde1408c14b9c1738d4589b80619561284c1326c0d390a83a9b46c6e4bff5c1861b139f46a7fe4640fbaff26a634ecbf005e8b5bcfb428c418298f4614ce78241df7d9efff15b415b8ef2dee38eaf6ab6bcd10be6e202b453613ae2d3565daa0c8b5ac9a0a58251cbfdb3505984a88be3b5e1e2e1ad21fa8cf9e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b19bde7821d3b014e1439fc4b0c9e83b0ad9a95cf5547ed41daefe8fb9baf049ba81ae0091ef0f5ef7a234653601387ac859b462aff1c8a203ed7bd0858f058c09b5c189886c96cb977cda87e6e49f538eb68808bbb80e870cc66e1a83b80112dd8ee5bfc8d8c4800d7b53372f61ad492cf53e2a420993801155cd1e12cbb0d58849eb9302cbb43140c34405681beeeb37c039cba5ce477fda05a2ea7460bc6e24f67dd35489aede2c5ddb05581f1e367d7643624fb9bbf251391d5afa862587a92e26e023fd64d64cf01ce1364c40cba878af20dda35d408601600491581ffaf04501e121d437bf05f9750719e4191b5f5aacd878f3517694f01b831bc8de73770013fcdac9a32cda62bfc887ed53c66c2cf2412c316506ec3224aa1a6680be89e4f5442164db53e3864b7c8389217a087140982df7b33caa056578080176f500ed3d188e0d09487da588db05c51df260cf2ad73e7736ad3747b7181a643c6ef2d073ac66b6aeef8857140401d48033f546101ba066bb764601906f964dd1dd012bcc364e1cd9e063fcf2051d2f6e2038715e9711c09ad5a2f1b95dd9ce6ad35d0372e15cfdfc8472f1819f5ef5cbc73b00a4a5414adaa3525d999fa6ffc7a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027b1059bed247636e659be2d3665086d44c4b5758e123f53f112b22ac881b79805afcc1dd5c3dce72dc7a47fff22fa3d094f4483195b2d66aafa980a5b2f3245ba476a45d9f194fe89e170b8164734da8ccd1850f2047a2a39926d259ae5684d3411fa9d059f23bc90c020b07aa295ec380ed47b0d1924fa741e13f4402da0235d95adb04523738a73314dc6d1ec1cae17c209b4681946b8e9a9e485d4f1a53a854e749778d7577edb08eae0ed7c5b999df9e3a43abd7c948ed170c9d19db7613f49fc0284d6bd1f0c667f4825e8fcc4a622b748080f97d61b4cc53a466195e562e7550c15fa002d678df22b8a214d278e762119eb71c2434c144fa9d47581359e09b6837bf62c6ff52db55fbec9496259c472f53135951ef4f37c37f1214c91c09f0a7c1be5e86c66423a4344d1f4217e1cfb58dd015c26c95507db157c4a1028c909b9cd3eb1bd181cfeebb972d3b3165f36b7b2b6f44cf0fffb3adb1577d0ad62327e0474a304350c6557ed885917086dc2ee721289ad3d57233408fa964381a34eccb54ca57b91565c0c7ed7893d98a49cba759904e5989b8b58f0752e8aae046e541f4f177b0b27fe360b3412073702f8d69bd4c01923aa42a287c6ceb700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c1d8249f9b6c9ef4f64092d9776281366264e7d59d5c0b8a18705cd50203acb8c23cefbed23abe9e8dc685dde8f23b1b239b452fe6961c83af00b716a8b70755d192d117bafddadb6dcee68c3ea2b840c9f1ac0af52c37dbbb21de9fec94ddf838ec81d02df5c6e8a90ff16f8f65237769e2e9ca084f9d244c0146484ddf479f6b9200846be5b8e851caa5c7efc489c9e190f8dab5f620ee12c0b74ef01e309ce9907278f35de9cf6eb1b881c1ce272c16a0528ac87ad2d29588c43ed6e12a2775657c30970ca3f0e3e1aac5ec5a378c8d1001aa4b93cfc7170f8d6e39cda9e80875cd1b80b1ad8278b428eccc6fcbf4b79a2159471471e067165d05dc2e84163d6b0f5f6e5b8c0136bfc5c119a4fcefc3afe77dcf2e8c70610e8c5fc571038413f87110cf2b4f3f33ae52a5a45e5bb231913ca7e9f355f07e93eb98ed389fc8226e2d6d3b5e2efb1e894f02fc41f055209de951571915af8d1062fd1108b6bdcdcba06773948e8e48a9fac9fab546db48c5e8ee7197360cd51775fc163945df03878dbf32a1eb582057055e600f0a4895edd055e6ad178ae5cb090747503d75101937ec61d5d1940628d10ed26081a57fe14bc3d1befbcf14f7187ea65c57f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a78b001cc58105e89426a236d4742265d40ee090cd6f90fba1eb2bdc90c764cfabfb224e2658c34c3a8a8acc713a0bc241a62b4f78aa03b75a0f606dcc71b14cdb9efc11185c084df2685bea4e25508ec65be05fe5593e5fbcd24545e83fee7cb5734b2f94e70a114285b038d059de3c4632d575a28fbdfc41f8df55b699a82d1ae4865da5ace495b7ed5020a203ba5e8546d169e080d9b7fefb90f983558c65171f3ff42365d8db0fe6ceff2eb7e0fd8efadfcbb160bee6a3efbbed6d8e6d1fc100bc4430c4c901c092f82aa78fd88afc691e33536b15752c974ac28d02aaa9470b4c354ded7a66b284117aad9092f6b52b13e3e984ab067836ef1abaceb45e765c52d279e319b8824cda996f82028810d40421589a22139f0a7e97a66788f47d0150db764553dd9357bcf1290789b3b9631ee7ec5ebdf92692a51e3646ebbf767c0f0fe0e222d0feb71721a5a9630edf4db2c94cac48c6e8ce1fd035a3cd2f28d9857fe2ab29999826170050bb8b9a191312568a32f622c462fc13a0b5340670091bf40a8211c9a3d37ae4def55c0b5d6812a8412bb9d07a558b70336c316f7cf95556e7e717156e17e0931e7e45d11143bf3653bac5da427ed814e0dd370000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000823f2cc55951c1fa73b15b7ae7c2a03468737e22dbbfca064f675695e9b9fbe619191297f8805de5dddb11ce3c66a968f142ad750bd7baca12e8baceef9ff1687b46df19b2d83e3d54a73875eeaa067ac1f53c831962e04b950521a317b89db7aea4a79d65999c62172b39c885a1db18727b31dfbf88e57793afe0b5cff5992f6c4a4dabdad34b83d813a30b46c0a9ef04b0e32b6cda46bb5fa8923c227a13e0ef705a6bc729912f3503573432bb4c2b9d1f0af0c7805e52988be0d7b44b3ee6c3daef1d505a438bdf4fadfe0246a35e036a18e1f50be900cae4317773b95538cfe9d0bc800bb75ce8217bbeb19d5eaa44bfae86a1ecf3570112bb714200c58a9f5e560f82e82e163f8b0ab07180e26c593fb4fbea0e936f76d60a4314c3b0146f853c735510330137d7d2bcd4dc448b68c03233939208f30b69dd98466559520f6554692faf1e3a50094019ac5c1fe6c9b72a02e9dd0c5ff209fe30f9c3b32a2c5d9ce5fa5c4ad516134fd9baf5a87e77c4a07f58a3db50d84f421fab22640e3308b38574244e99fbaae46068f0755b79b10c9e6f59f2b49e258f52d51d379091caf46ed75ab7df1e49c5f7e235996980367234cbf7d10e5afad379d15021d000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fca1767ebd9e171404ffba8107c56eb67fc20ead87689ef5329594a9744af9d5bce39f12451154a52b183ffff2a2cd6babe89ceae851a0f5e056d5e2f4120f5ca232b8b0d9124fc4248a32e1b00c2da58a013b690b74dfda8111f7864357a742c92b1724329360d5c56c22de537b6e1253d8d2cdbe9caca8d7979e6cf58593590ef53aa4b3570205846d885408e036ec90f0d928a46ce04b9e3aa2abb90452b68ea23564c57a166925ab48649c6cb7d0216fad8e2d18e124100ea14d714e5ea4a6ac8888d17144b5eea9134bb70bac322a5d4565156af960fea2aad9172a58cfd934824fc5510471cf390462eb1a9e8c18d66cc6ef9ede2804f247a24a2ecb441a8e2b3c062ca2d75d92d7d32ff3222ab0fd7c37dc4f58e505a6aa2d5f4c9dbcfdb676ca9ef570e0ae9eefb55705e13ac0d70de5a8ce841e7c6632a8c39ce836d933dd81f4f8c5cc20f9b138c5c6074fbb3aa3f9de47a538fa9b4884ee82aa76e9e9ac59b23a4cb3418b48dfb0a0ef8c4084e0ae8c43c6ece4cf6ebf68d2135330088c29b454d8c43ee65213f918e0d1fccc8b7c6d3f4b77fc1e0dba4b2883c96efefcee384db8db975a0792b4fcd45cfb12fe18456f724539da7d69d35492500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000654054866434e0f684264e0d1f05f3191838f67ece78a794396255efbff82eff031badae7e65d519c884562f6c91c31ad5abf863387cf0f32b46fcad8a758dd8e54e0063420e1057f7fe1937adc6428384b002869edc132ccd78274760e2bee798e5e528648d6e31d37daf08209e9335f95fb795bcb57fa02c3bf5121b76ebcc9da8a114d01ccbe085c2fef2bc92dcb3cb7f6380c64f3e237b3493b9da774f3c941877d7cc68bc166ced194d3493e8525b744e8b55c805dcad37cb36ec50c4e833f3189c27d211b660cf417e6bbadcca745a59d276cbdaa91ecc55fdc6e42f6af6af821450004e4cfa5bce4bea23284d7b159ef9d0ff1fdfdc025d58418b6c8960235b9cc01b4f3f2ed7427c8caf95f3ff6f9bf763def4401099977586d73c6d7a3f3a497699e52837a3119917fb25825e4d990360fb090540c2ff1c59ebe10fc098bcc9922407d4bb59423f5a547f76dcf0836d1f0d434e80de609b9d8800d853a1ddf681bb7333692255c32e549452ad2ad12f73fd16d662aa4b45310c8d1fdd1e8983dd5607938a9eca532a723f82f34f678b1c1e3432e5950b4d18a48a7c7f4f15fee8894bea6a82130d0b78c8847da0297ffca250a9a8d7a83c70e302100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f77896fdd616628c6c2fdf6c40c63f977ec59aa0f9104caadc423cfa6ef110f65ee77c9a4006203c43bfb884963229cf47771dd33cab0b79c7e597f2d354a79f8e95676b3c862394a8298454399ef2d0210840ad5915b883b81267b01eaf9e794f78f19a4ccbf4cfae2188cda98388151cf2d8ffc37f742ae4216a44b0c62b8fe35f5619ccc758020edb659189dcc6d8ac807cefe50fa9e1686235b559aa1b109af4d4514d5721e82b0f43edc05213ea205413eef4ee1d3810f12b822d1a27526116517c9fb8b9000186a38346a13845f7385ee341984365eb3593919df58529be10371d997a80b8c5ffcff93b28770a0d8991224b9bfe7603d2b4b748fb3762e1626d1339017c36294b1605ea0eebc21f321a32a748724182648e8aaf3b59ae8a7e2c858a7611681ad3f74d890ad34836b1e5459825987ffe74c6fb1997968038ce06ca5cb0eabfdd94306a0825e27fda9e811fc708d5e1f67d0be6400b33022c2e5c7ad91759d1f7771d8d727afdeed9057a2920c79052defd380dcfd98b6d3925a2d3261230ad6c03c26799b66b0d7ddd43813d35a72f6fcb74a673603131f007ed7875265b89d27f272c71431792852e7e9cfddf7fa75f2e4875ee1929200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c5b9af13e13d60b7aba607f1e6423c8bbf9f63ec1c3ff6c4ec32160de002038f6b6e6f6860df6211697b42e4b675ad5e395fb34f31223cb2f0ffa907eda999c0fb9354e7f9acb73f3d35b3abda215a1ddc641650eb6ebe618dd61de438bc7bd9694ad62ee49ecf5a0040fe5eb364a4ce24f15cf4a32beded1315087d08499f12f331b8e0b6e093a1c6df61a61a1e3d186c850a537839bc291962f8804cb4d1bdfe39c76108bebf2d2518dd943b2b6321a6f290a80ed16f7bdbf17056173a14cd3b74b86f1fd767d0f02b5e067ceed95ab512075f4081b0162238405f5b5b93415a2da661b2985465ddef7f296d7dc1a92d65f0e7c3bcdf626703fa886e9e1890af43340d1ce6b6df4c7c466382a26aa95a5eec7c0379936613f229c846eb8042b472c1c5c13190273582fb971640bc3bc2769aa1ef4950ba443aaf35880623f3afd4a5f431724e04b821f60ca2141cd1beac233a505ddbde288730a8155062b6ad171b0dcdcab4f21010ad8818a410db1a8a3dd48d228f14dbc7286a9e86137b862befc34186fa6fdaffc40fa37159eca31633abdd776e6f7b5bb59116431d042be99d7716c0c6e9a2b722ab19b837c716074f0b414f3d66a891d0e6ba45f720000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000941fc693ed2a01c6fd6b24fff77437baf144d7e4410ca7a511d1180dd284f124e1d2bb36fc2b757e3cc988549d08059af4ca52fd0ab1e92486135834c1ffc436586e5b858bbbec07df7a0d82f3e0b25aa6b22b7773727af62fbcfce83302d7f245e578412d642090f8714e24872a7b19a284d1cef278e80e52cb86ba4ec42b3434a295614205ef9cf6a07254643ff0db8a027b67846eed304841e9f946b4ee69be6fdd9751d100e58b2245465c1fd8b4f3bfd27ce39dbd14003ea39f5470172cee51eb893a92029c978d3d7dc845168e8835bb2d1aa9d0a0ac30571bd78e5763409d0d578fe3c7084054b690a988f3e6d9cde42903a6d663296591490413f914c2a92de61323737b30df5c90c7b46b09842db63ba102abf9ebbf016b713285b548864ff53fa76873e2a6df343e38dc1c35e0e7dbc7eb6ad3788e609b520c7c979e07a76b259aa38b0e4941f8988255fb0a169b75ff58b986b7953d9cf397e8cbe8f1727aff80d2c489019a3f83e8f8210d5f3d4cfe3ae15370f3e63b3f1704c384d3c30970fba378338025708bf3bb43dcbc70a7a966f9d6554a371f245290206f7df1e4100427dc2bba4e6b02bb33ce76f51af2afb445a3ce086d32a83d37e7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084a7132f48269e6085f531f364d404749c20bc707331bf3f39a7ee92745c822f092f4587722ab358be5904a7469f9cfc50414db8cc34dadd3e816222f7c806d7e7aadd71ec2aa8085bbfbc40df8f5106923bfb748846d8b0ab1e877c4bf06fe02aa6d731ce59eb4ac855ad15b4b80a991e12b4a4e23aa13591440a025c7be48fa83d9996dfa926ad1124b2041b96b211c9fe92484812b56e63e6381e99bb9e7a06f6dff0f4bb74ac36d8ef4537702767d1fa0947f14048360d5e6eae7cb31184d482bfd3c0e06cb140d068626cd3eee9838b52553eb35d20daa3427a2acead7017ac0887d942f9f5f50d513ba24c6f3f02efede7caf88dde4f3904b6538be1f268aae3078f471490a84b28890b007a8a7565e167eb2eb82f7103837f01827b42bd006477c6066c316b237aba389a3f4dd1a46548d6d177490fbf70891ac63522235018ef00814fea6354d7d3f28c97ab3f0fc5041a3a62e29546fc2d3b6e87e416823fcbc32bd6f5a2df5ddcfcd88b274d896ce4c0f07244d325c97ef39f31d99704421767d81d3bccd25348c22c51a7df3ad17abd79730584a7fd87ee267ccccc603b83f1d08e0e9ba6f8af97208829c3172855f013311272c19ee0b8211e2e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ae01f8ed576f2b15c22264d59fbb84339d36b511daebaf10936dc78213c0b6d33140149b99e5039e50f8bb4c6e67193d7921248b638b57414d4ca8bba7c5ce6dbd392a60a1836320362dafa76d19c545b0edef1d668198aee6ef90861ea9d83a23386f7d3dc525797842b6e6ccd1f07f7766cec6ec394ecc1f41fd7ea9f5b79d4baf1240c4e21e29f9e8d8b3bfac93941af0ba48f1e44527cb9385fad4530473deb7068514e00497b6e5a0f68f0070b7ed4070aea7b67f38c124aaa4d09cc8c5661ced9df1ba341d90188402ee01daefd086e6c7afa1d96d741501be59856251e1687c66333f6bf082188eb746c0ea6bdffecd7799dc0c71bfdf3596f3a719d62c26c33b54bb5e1c23175536bc3da2420cb247f5419c569e72b25cd8ca76879b60fb80b1da431fe8ed0019499c23d2f72a891531feb8309bff9feaf17ff080b06df5eb8bb60efe403db1c96ee1fc46c67b5ec6987fdf6a36ee6a1922be1c5cebdedb4bb2a97d686e42bcf62e527a0f88cecf71131bf018f4229640fe2fb7de7bf6a7c510b9ec5a55e500097961c9aa2328c77af2ba8a53f96c4b67156b5a96a8fc67d0e17918a3c961d9fe6ed3ead19b26a75404e78ed30773b6d539c9645480000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aeef26c18411de7c7f43945a103c673599c75d585a484e2915db2f86073032ec9a7fb85a0f422822fabf5c5e944cd481ad54e42df996ed1298b1e4f59d24030ad15b2e504cdb3f1467b3d8c6c153be58205d0a185feb1fd18d264c43fe183d26e48f85d9d9ecf6d5d47aca85085b72667c88511dce94492ed298e04e868f87145020e55ab959e0db05b3f104a18daae20b221a4973d29c3a409119b2ed8f69c3c6273ca1dae24dfd47c1e7aa63fa6f532bae46b0e6f231b96fd3d494b312c15612d679f9e18aaafbb0aebc45b7265e20d5fc6771ecfca88b16a5a3f05499d7cd57aeaa70a91815c3459b24b450b8fa2c7f01907c6dd74df67b5f8fac853106363110d7ef0725406cc9182b09f55005c34477a3c76d05d97e1104cc4d38490dd65c75773824ce2d56430fff8044eca256e5904039ff70706afe502634a72127f1d1884308073692a93ad74e1dbd67add6f47105436938015926e4ee70363da06e925dba8bdf410b3e2f4ed8378b8c6f822fce3733f1b745b223e0d6cdefdfab4966157a3f60b2b0333ec475bcf8e3eb2338075758afafce39c6a685d649c73116b498d7791640c519038c1763eba502a2c30ddcbc3d5be75b948e13ae4cd7067f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005973ea320e03ecd71918b91c66f5418dd7f3c477ab3ce1066e266e8f576e767733badeb4ee4b4373fab648f6163976b4c3eeecb6ef5328c9e802ce14a55bb62f11f81e44cef36857ed4873b602d2a15afe70983906dd2b827c915f5130ba1eb0cb402e9bf56050c4ed48e0749b086d1c58d89a0c79f154790e6b920e2c2602c812c4e51e9f944af38630559ec3a28e28bf23a9f35e373ac11d01bded5dee7aaf62269d4c402a46bedc23e221ae52d746a55b2a7124fcad3c1096e353bdac832e2fdfe720e137ad47e57c4182c606fe344bc2da75074d2b55d3c37ecd5c61afdb9f460346f4e6dae9e8f91d2f791491822a9cc5166430b9b1b87f49f0b89cd740048bd36b411f8822b9fb8ee90fc2e2abbdd4dac2691707a2552e56f73eff47159c2e2ef35b3b76addaec3737acd4066ef984731ba60aa307db237aa028a65796cadfe74b1317204d9faa055520c7455d777764cdd66c5cbb3ee88751004492d8f355e0fa2075599d3c2c62eb360f5c18e8933a1eceb53cafd666b11291abe0884f42690ddf83259c13771c7d0d654fcda9edeaa759edbf37a29bb7052e79078620dbb355ff8dc8e8def02bbaacd8e0904aa16c82da44b18e115e9fd752fd9ef0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000875adf808db1bfa59baae20e446a1f179a06e411673f98a9207a0b6deb6621caeb1995b24fa5802f0150662577e878ec41b6e3ea8725c54d7ba8683ae32526ace8434d08c8d6105b8593b977664708ba6909705cd1e6b681a4551159d378fee1cee158627e74061f9f8e643f69918272774adb605f3112c598eb1bcc799c9d6ed770c030ea332d52d97a2b57eac7ed69c200fbd500f1b234ec41cda103146ad7b9e2370bf4724d611a074dea71e3f246965e5fa661a08bfe1ed785d99a60e01c90065cde5ac9d4346458604268b2da6231e48ff3ccba3dce62c5b543ce322d38cd66e0b7d779859b28a6681b279f5310bb7c3f5c268ab629ed3d1d7606a76a5c3fc26b0ad2a97bc8c84412b4a5acc7b1054e6ad89e8f23fc48795a3a3a05e90081cc625b426128be1572f8ad6fb84022934fb0216f173f20fc3d35df1f3fcf93a8840d31c4cbde4e9365c6dc75336031b26733cecad16a0c25b94887920c4c5b7f7ef9a4ce0b3dfb2f179d330ea889b399e35b972626a2669b4e3b142ffd835033a317d1a93292e04868f961978554ea39596a9e226afe4ff2aa75e9a6425b512f35b2152e5fa416073a01eb0b12634670b1643fb1047d1a969c4c291bfffcbc000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023870207e758f4fc1b532b68f62bb1d8e538d8f43810c6287626bbdb5646abc0a125f3582e3fa61a033f3287d16cf5bfa6a1d4d539265a3a71effd250e6838a54e1e0e76a9f3af6b0e61c37b3d3eee016bd11d9fc32b1e98531baf56d0d9887310b26f1f91c53e6a93d5ae1bae68a1aa55404ca7f8cec85ca577d3639874134c545da65e0ae93f31500002b2de03307de2d1712338829aa32efaf6d60f569d4b63a88a8e045b73cb4f5b621f9d8e6ba9451f0331c4df6de93db5226679f710b5f865df855a78e410bf0b4aae0d5cc4d61ca488259e373d11ba2d7219710d0020288c5ab5cb3ccd9f84b817e01b07627344f063298aa4a7dc90886ad8ddd3a8f734b5a967bbcf2acd465f83be37de792e6876aae0ec2b0d46f4285323622eee9380927758121249e23e3feb97bc5792b6d2f74e667118b02928fa7d4efb6fb74df74c09c9d24856aa28b88d715054ac32fa3bc1f7a25e4c6fe92dbf4b53dfe2c54b5c31382034648163d7ad0da0a6093327d5ae99cd30c0bb9f5c24618d424958377392ea6e23979ebfd3dd50130e66914638487ba4287de5aff6798f5a57bd1766f0327e76b7b16a921082dc374f8919f0b40cfa61148815d5ed4ed5da699f7400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bfc5e3046098823aa3bcdfc24ed0c4d0f8b5da2b6cb9ead2e6c982e167e17eda0339a98b7233aa1d89d8b91c5558b1eec3a3a8c297988fa402f8f87b1b1b28b121fedb63b565a35b0fbb5244c6422edbfba93175c7c163beaad911dd481c7373a475f1070738752691cf25f322d9fc9b7d62b88528f702051f1e1f79443053cff7b05651e57a93a46c8e3d7bd5c3b4c2fc57b1752b132a2737a13051e9cef90ca970e3b973ec4ab7a6760b09bb975ae00fe814db61a22fb8233d4c2c67227266f2eb10c8ce54f48b1ca98e96e37387bc1298db704642e4dc683e14a25d6aaf7a6a014c9f6a119ac149cb3e6b3c74cb411253ee2716dd9023fa2df4e5bfb0ed2496a216971c564b0aa6a0a67c70879f0b6090a1ee41e573cc64060aba1489b5519dbfa146d0151dd2b48faa068e6b9a934339c77449b3cdc611310db6f4cbabca9b1799d6d08d5c9f7820dbd425562d151441988a4b7537fa39b3393035405e0c92ea3e7a8ac280788e3edb46bf660a0d32a6ebfe2a81afea8e56bfcfb134c96b6bf573e80dbecece189179a9c562a68a903f1eed1a47c4846f31804a44309e54660255f4313fccc60e7f39b46195f7cc4a6f6dd079670f004935bff9cc6be1b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022f2dcb1bf0304fbc06fbed6b9c37226526acdb0eed75ad31de4d7667d3fb3d5c6a55c65d6748d61d90e30696ec817b61fb7db7d744455ec357fb5dfb0fee2d7424422c86fec5989b5a25f7ab9f53314a4a43a6a83c2d82b061cb133b8639a35bb1b632c0a4a0e5d9f5f525cebef37079a48cafecf262eb69d1de7394a280a701d792a11128e2fe3da0993803b963d1b472b9f28b4543d5d5eb251db9e3ee745cc7ea55737b64908687f0129233b3ba62267f63bdcc0e79ffb422f8d2fec395d70a4717657f658adc4f1f8737551ceaa89642ad5bbc75943921b4cd9511595b9b23333014e7493d99255f55723c0a2bdb21f7dcf5c961d0cc0c5c5d403c90fefc1d675c6d66cacc8d809ad904a459e9032d4ff3e71ddcb427d0ffb98f4c14290d4d9f4d8c9e9fdaf72bea29863961af494744b08801f35b8478e41db8e32e62f75a8475c911cbfe1dc3daaeeb82ce82d20886311c0b9fb14d83bec6c762af6a96bd1413fc59efe01d266023b87cf652ec08e231344bd738b85d51aad194954bfc64d8c72fca2acbd3e7bb3f0dc788d4172deb985ffdc2cc69a102ca773f0402ae91b6ccb8ae7ed26e553680e446e2129246fee7e45ba05effec5aab11c79e17c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094a25e8aedc880ca6dfcc3115a97f1ad665607be2eee1d839f6fc8f75d0bd897fb58d5f91fe4ca2c3f1fda32eb6c8e7f2ff54a1713c089713eed7ee04408fd6ec8794f08e1d2476080d36c08b140137f60ee1d3c434a1f8c41f89412f245dce79d608ba554b1d0cf415289fbe77c5d30b10114159e9bbab067c61bf96386605382088bd47296d2d522c75f901609f5fc428e5958ac942319ee16a32cf42f9067b59eef92230f8c536007f51b2d5f3466b39e95e8d1489923c479c09beb966d8e14fa8a0c8c2387ccc3bb874b8a9162773f9ba0a35e3c31981b40db34b93a8f0b841992ea8b4dc469e5afd80c241236a0ca5fc14df2eefacb67e62431d9165e9bc92bc133ac50639e5b0247cb2d6ce6e34919b10de61f9b56dcf13ac4a0ce8ab2cbc422a32e523c3f0ea324c922d3670d6aae8ba657813fc0f4a3cf4bab94e1c48d094455a1448956c4ca3695c4494074c9f42c7e38a69cf2a7583c460615891a68a2490f7268558c69a7da5a24b71414cae4c7b459510c0de9863545a6f6b5d7f018fdc8d6b36dda897cab0aacf6a8bf5a7ca3e0e26469d4d3adc46ae2662d28823632dd32f54740e810ee208733f4c76e2e3d4cac8feb917c3ac4d65157483200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bb812fcd1b17f992416f822b604d234cfb450f144ea0f253225ff34eb15b8a5955da9bf16395aab0f3cfc2b5e9541bed2da8db0288938ab58951b3bd1a38dad1f699403f274baa7913d0fe46e0efbc5f4487c1bd85858035e0a3c35a0117ac5f105f22788aeb840c08356e7e71502c1d55c28a0c8553fd057ab391c568255d301020cfb1f7b7f8cc15002fa823912f4888f678049ea75cd36e60387e89d3e9c26253e572e36c83fc991f80c358240b3dec80500b298396ee1a6770ad811b8947059eb3a4d5ab3af70ac6e89427a4b92db2050dce7908338c62273f79bb08fc9fc7f01528562a72c8e36e97def2bd5c5ba6c9c0b854c47381de51646d60112e15e6b977e985f2ad1a7f711dcab3bbc7f3bb0836f5b2af4033428db7d68a94eaaee4ba239450512b51c9bc8d3f68f648ddd5f9635fed8688d5b48c44820a742513b63faf151b86edd31d517c88f3b94e783939192c6ae78f94b8235e19c512fd1917447e3cd53aca3e634958a1f56c6cfe9e1c6b1ece9efd87ef393d6dc9cd2912d5c75294b170bbdaaadf15b32cf17def97df3323c3f7795fd6c21a9a5587a442b1e95316dde91a92be66275f95a408558b7f309fbc5f9cc3f5ee18286b23173000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095cff5be7fc22857928d1ef5a6f0b8cb9f78b9180b03c155c4085ee739f872c52bd909d48c84f2e1b442ebcf313c9f57505757b81e01de70f90673b1c396f733237ffe000e3586b91540288f965dd24637738a60afad70806bac7a10958ff5bb67eb6324b0f00b67589706f05833dfbe06034fdbad856857cb64a0c33067ed1bbbff498a19790d6b52169a975c874c0946e34912d930c7ab0dd05fca98eaee4e67a5f5938e3d72988becf1aaf83f0c590813e3b5c1e80b3ced713cd77a05824c13378d8fc1dc70a6011012e17ea99b6987ea7b8502942bc334fd8ee7638a380a98946d69bbb7155761938fbae34102291c8648a088d6e84be049857946031186004dca856ddd369c60ac3b77d75337556a18a26a79b13012bd13aa4c25b286f7dd202262c61de4f60558abd3d4615177559017864d1c3e506471b1b3f55d9e52c52dbc0d07d0a89a796bec16bed0299a6c03c58ca7f66c367d47e5991139cf795d668e5d0d9ca7a8769aa5599cf2c8afc8b59a76b4f313e41a30223e8a20cb5b3bb8dfc52c56a8353e1ea1008a195cf28f3e9024ec2a9a9339cf14cae37f7ac99548f38057e9b9172aa5363d58ed738a66472fd21de3b574413b6547b264fb3a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094ccde9512a564107bd6664fa13095273bf66a98869d9d353878cd1b06c6658d0438381d888bb5edb0765e938ebf295fed415172ad0cd4f10ecbfd00cc91ff3a04cd1f7eb742d607916103d2f5dc54be9f8fb0a322176b3403f7fb8338edf5c5262ff4d44b49ee88105a6d0cbe8c7e573b50cfde9895d2a8bb926cca64978c917e79cd365c1c44929dbc7a3878307a3fc6661da115eb325dd091bfd217588ddaa15c7bc3c648819c1970be23cc9e9eb06d5c2edc07e73f1bb1a5edc89246330c84d8d663831b8a5162a530cc672f72c1a544a41eae50295e0cc3df4581cdc4f68fef95c2a45a0689a5668c3e5bdfb0f4fbf6624407c4ee5ce98bef9a75a005518f3e939d4cd4c9e593ac17e0ac1ad60ac07e655dac3aa8102c0619bb9c7bdbd232a33d6929b53632515991a0bbbb95462c960293009945158d4f6c6d2b3e4d41bfc81c3c9316d86e9ff3e532578edafdb62a3c47f86abc0bfefab304ddd4009d8a89e94e908f19ea310cb8b3aeb2617d66413237c8aab787e9ce713e943516754a91f31f4b6c6f3533cab37438e2e0e459813578e3229ebf44644db7a9c1a5b1d8c7a9bb91fbb07f5e074aed7127efa49ce6fd9b49e6436f42d253be3ef2ec250000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000191565f2047d790d695c39a3384d90841eaa01f2be244787e3632d18bec10104337c4a169e3afd0652a8278d3375fd4f8cbebe0cba4a6d71234cae8f324fd518a755a6d11bdcf9460b23ff95f48df5defa52e4cf43f7c9e20ac0b7f13bec2edc0386eb7065047b11f57a95ffb3f2bbd1eb9f08cb926184733802325593f61ff410275784dd4d81dfd4ac57ce2d728616c50fb84853ef924de8d7fdf9acb525af716d6e2a02c90fc95adcd3eee4b5512dfb39484e8ae91f3790d12084138707415e86dc3b3becd346a0a1d774f9543a2596bca133b03c8b85c7fef0800496ac6dd4b63f7a0b700d47715bffbeb5633eb0686c275458d94d67f9f382003e0b21c95df0345d8acdda556e72d6793f5ad28cd0d390cdc4d1205a4a885329410f19389f4784d6b71cc9297dd09d7db009d3c943b85e90e86f1125d533738e251f687dc5450daf90bb8873ccee59dd80a533a5fc5219fa30897848ee1e06ec8ececb4a3db25385e88151bcf4b388871aea8e6c0a7519b085b799433e0ba7c23e0f094661f6e8f0684518f7e4104ba7c8e70531cdd7937c5f58df78940d40a45261f00e6725d7ba749843344545009dd92c643454ffc80a5acd80959e9666162908b6ce0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000118a55beb685325eda0e45cfb0a6bffce647b131dc3b055b7a1a0ad322388ffb5ebf7b0758cf9a2d3615ca792eb87084a677b0abb5b7dc87cbe87c4306c2f5a9e8d9327f7fc90fc5583f4c8c65857e026e3f67596c6afd5fbd7fb7927915e0102ce2c64ddcf781ab51f51a41e5c74a4af6cfdb200f7266fc3c0dd8503a32845879e0c16af82cc2603753619609ae341d02863dec392db1960f2b8f264e095dcec8a499edd0f4ee5c279bc149789961eefa00504c57937f18e164dcba8e161c1dcebe48cb597e4a4f675b3ee22b2330b13ddaa94d5e6226444ca6cd51e18b0344dc967d92abfee2e5e930eb5b9568963ad97e70486e801b48b609bd8a51c5905428b42243fa14c2c7408d2235134e48461db557a7d46ff746d5d1d978810e0851ae9b21a5758f1d6785447592f73cc77807611f200b490a9b53f30d76c48f8c80d595703559c1dcf70099e79945ad51df3982c58606d6827449b475836b7cc789fad4a1fd515177e9db1615f99d1c8823edd759e67aa888c6f80028b95e6e0ff8833f69925ff8593d70af76f408719c328bbe599334e2ab2972b193df91322b3ac25b418a24b598e9d2c846d9cbc343faebf9ab4e8e6be9f4c6602abf1a76c72a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009322567eeacee6e7753c51644531b2bd11fa632c07777047a365c496139d18c026caad7239beeb7363c84b91626667124ec1fc2d9e3f9907fc149f40c90c7fe7d7cf44aa003edd0ae9e89a5b1594343d229b1534a1d525f8025f20f5770e5c9daa54cfd2681102d7749eea1093441f93fc49c548541c9743c0625289093587f48436dbd3b1b2c5a2f9be29eb28db32a6e65cb9dd14cfa9a87558fc2cec54fb14c3a018e91f9ea32f99064fdb4de759e1cc60f429bbc9a3a287451d8495f110e2e694bd1a8e0889ccf6a49ee1b85ae2921147cf31f40ec7ac792f0117bc86db8770465940e1031d9592c45d06ff1f9129b282d03ec107de373584547bcd1de1d97c60fc2ed2d9030a29d0335d1d227928a8331d909fc8c7c688fd94209f3750e025dbb5cb49935928eb74080e6e13baa9c1355af1e4489c3e974fc885ba8ed4a238f1a1172f695af1998fc1df417be2e9bb2d7f08293402a47dcad20ae17f9966aab5ca0e5079c66f4b4d42f8cf1a0e0d57c0f6943aefb0ba5fcd84653402a593ba18f712241b76110413c9eef2c58b2bf3488d22d4bd3459444ae26df34239ecce3ea7ec5c4ee149a59f90cc1e920dc796e4ba36890ac3daf8484c709448a82d00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48402d8b53111d3cf0621599814d6a91f926b215b245faa885f061dc9990f1784acf1addcaa8c53624a7a27f2287715fa6511143a96214e4d3e9ec04d444558a513a06e380c9699d0668faf2e7ee5bc8f3e12f6319a70afe7ac4a66ebf643028a19e111d3712dd23ce7904d07eb79e7fc9c7cb68accfd5cb94757f769c8bf840b29f1e5f7fd09389ae80335dfba570ec9701d76ac10166feb5ae380476775f1dbf1a1b81567c5d30d33a7ec82db9549b2669e4bfc155e64d1fc68a1d624e249dcfac16ec7b794a0599c3e1979ad11678dde0bdf9a77420efc53a8fd1db9a21911a9114663a6ab3a1ae0d316a9b076a1ea65b7e0e141049fe6cbc7ccb3d058856931f04e6a961466811b1221ee717f870b6410bf92cf3975d4c4e307ed9fab2479c6f0f1d63115676eea8be59235298a7347530569897aa34ed285454f6b9175b446d22171a5e6b181c89bb79e1ba13a618e11632df7fa6ad1befb940990440d8107e1b89eba63f3322e0da7823134805ea23eb4c1f60d17354f3ab824980863f3a0f0d6f3eeb31bbd4fcbd4633db614c10c2e85de61c3e1149d9e6a9430b2ffdc5cb2b1273e74144bd5570ce794b8ead1e041f4c84415393e342b9d61e23b928f9c725a4c209119f43b9bcf184dc6952b1d313cf8ef31ccc3851244c5b19275e554517bb15af653dfefb294fb66c80ee35f7139b0b3add91a80e73d0506e320854d81a05c4078b9daeb6399f89fa832dae85829c833eaca77201a958ac3ac194cd8f1478b3b2c2cb91ecae2e09950fc1e94ee34c0e331d2401dbbdb2e87a9386776a2ab58fe4b24c8c00cee5e0beba1c9508420c78c6a98980e1fe1e72a3a5c2891b2f1c42e866cb7eddbd6a42668a4af1b2f815556d80e139206aebd5179ba564871ec1d86fb9814bd0907cf19e090d0e092164ca171452c9555c0852f4c2d30a4426a00f1f4c48d352543f26f977a4ba16db0d769cdaff2ff1747642cfe2a4ad0d26e5c263e07db84a9aed7444e06322d3ffe30e1733bcecc9e8bee508d60147ac11f478dc2490ad493f4a3cd80acb0e651285b16538b8d62c5cb178b48d13dcf12c95dc8ae04a9ee438899504206b333b893ea480247fb9c8e657814447326b292b2732b5a3855230bc9b3b8ee13a71fbba988c7138d11fa313a134401c4bb64123f739029967c21f449d1254fdd48e75b2cb9af69c805085ca65d878d09f46c126a80c22d28b860d6cf51e2531c1ff9b9152e7226100c4fa3e0656fd322552f50470d8f53b559aa8555cafb7494d5b795261ce3166009b79bc94c12bd14db181169241f12b2d2771f354229b1ec41777352aa2db759e3a3651e92cb368b1f1b32d85849f87a3519272230be33d51cbd587dc40607271d40b9a8f12bf4ed4aa5a1551eb219d13a3afa6abd1d9328cb1dff69abfd23bc8858e18ba3aea5f0ff4912f539724317478082d81f01aeeb9359d4a414944b8346e4dac0d3db3e24a1a9f00eb638090f11283514d7c58f23d9d3b75072bdef1ad3abc6465f56ecac9b5c029a259177e1013df7a395ceffa5d23951dfb57a4aab4ecf43fffddb0c1ead4cd0165f1c17e3dd84d491ad67a0dad5066fd5b3b32dd786d934b02d5adfc123140270aa87209519204402ed2ebc456ab5b44295cf8184d9ff7312d7b12ca0a244f0400bf2efd37d7f06f1a75467ea97d15c27549e536199e7c679f23975516721c1b95cc80aeaf986ff7f09fc37c0fe2f2f93e6684fc77b53dbd927517bc3faddd22dcba7f5153d04f09047bcb85c16b8aa6a9929ce97023c04496aa5998aa3dc022a49011d5f5fdfc536e90c693a2b3f71a3f393e4c14ac17b1694fcb1a2aaafa2d1e2014067ad95ea5d54bea1d650731c71d94698f1a1de3529d31028c114f5a2ea782d72308f98b56c28465bfe54b13452b1345ffe2f63d79ea9d01fcad053c2487c9834e359f78b4a66f3aea804ce196a109a85e3a7ea92d55dc22d8a69c600fa33fbdc22cff09c0c38742fa5c8a294fce2baa83ab1ceaae21ed24745758250e355ed50b3a12dd7d274fa9f6606256886a5fe4ec2767f19fd711b0e6f4c5050771afca7809e1d9e080d8f5b0298bfefc2852488ab2172c3b13d24bacbf609b1dc95c5eebd280637392a72e5f41871aee0656c0aa649574ea94c65a4f4d05e629f6d96cfb777a9ae2fb36240ae5daf2f065ee1d5c61a88c71686e765ef8c8d807486e3ec5132cb199b609fab19211a61c3bf7121cb67d05f5ec428a42ec0c7b04830b09edf9046b83eba2b60201acb98d1085c3e1b871f57e851674eeb64dc3191a038e288ed7246093e78c8106867ae30314a06c96bf4c8a2860c8857a0f8117fb95090f8edd1cd9ed27771cb2998a2fd3d7edbcc9b4662bea43407512c59419955fe4136648fee91d19de22af458c265e07ebc6f2b4cc5e2ca20af2faf4532e93f830ce33ec628336bb3c9a06d36b21cbd33a6c750b3627a7274ca06011c8047f3389c428a70019295e21630ff775276154ea594e1518f27d9ff01cfffe61263f5dc20e6fd3711510785d42643c7e8b50e671527d3f69c849138cf1a7e78c02591f553423e167c1b651c66e378809e0c50e936a84fd1f6b1b3d724f186a2822fbc5fe1b7d5d8dc3da36e437dc3232e49928fb4f9da908995d16c7528bc33609f25814c2e7f5b92db111e55bc032df5faf9fd3b6abafd18c3beb18b63ab2ad22598eb07c457a96533cf4cdb3d39d36fef903553de403607f98c2cb990985c627482394069ef703762325d4209845c7007c17bca9b4482c09abdec396f02cb808c85aea6cb733860c12c1182af3478e57a4b3197839a41c355de4ccf129f51d0fa34f577a4060e7759102efb13ae8239f539215b6c6aca3c4387420838dc5ac400985f51fdbc32d33c4d7e0e8df4ef22fa1d44898d14a21d81e107eb6a0ef56a70279a5b8421f8cd149048c86b2bddf7cbb05bb8f34db00cc981f26f36b55665d26edac845b3ab8822bae87717ab844e865688d55303b20684469584bda534a48063e0187351284adf9b46b6f48a7bae2643ba4c6b9d6dfe2615ebfb3dbf889db2841b27e366576fc2ae563e6ea975f383b83f65d3334f2974c6639617330feef21628cde32f02ffbe085ed3520daa36ac27e23b25781933a36fdedd93de974d8018ee1966215de1173f758323112a69ad6e497bf3947e98ec9919fde226fd0fc18f07bbdd7f1eb2a43d88b8ab18eac7a1c32c2253eb152d0341a1aea77a634d02b2836315f773690d08b1cdf59e00ffb92d0dafe95e8a899f84dd669dc86c6172a17df9335c3abffc9353be8e1c0017c4e0a55415d119d7f5ad2dffae5aa00090edf6d492a158c57e7460ebc77a3d39c3ed12cf71973e469741b2480caa974f2106d836e8fe7622f9f04602971acb85be26737f74a97801a69bec9ebcaeb1472038ccd8dea5936aaf312b56549b200f9ef7adc9aab8bc73e9c05304384692b4511013643aa32e997814a263e2a863a414dda5934a0affc2f0a3fe2438424413223d3282f77c6e5d61642f3a765822b55f9029db1e783675d9529c9a26be5499c0dd520e879dbeabb76da853448c8c2c11a22983fae7a7156abbf70c0a6e9584709832a5bcd54fc1fe1155ed7aa23b0d4fdd789b095c70dec80e88f78f31b1ed127454dd5460a5933847ece4a6ed696d414c16d230197692f92594ebf00b5e0c5122ab8735a18065c154f8410c59d6ae9e01cf1e8ecc04217f353f875479533a50f0846b698ee6e33f4c7fcd0ee95986c2ef1b201b19ad34e22feda524444211426996e18906db2893afe21a3e19d3a14f37426fb2a1d77205d6e5f57eed7fcd121bc4cec8fa600fa380836a57e560a6b25627f96f74ea67ac7017f0feda5b7272e4e4edefbcc905f0c3066695c40b20efe00e9bfb50ed8339e7331188e01deb80c2fe1fdd66f7ac2974c3d6d1e1321a1821a38ee01bb5690aab7910581f81252045fe343254325387faec304825ae23e000d3c83bd6aa398d54082500b8ec422301d4a0df3914fab293f195e2fc79a3fc3562d321323b084ab6ae3a7fe03f5ac0172295d13adadd949752023785340dc70781b6488179e96564e74b7a0abff7e1aeb32153946e262ae766165959dec2e50b81c0c8bdd7a64e8afb9ae9a0bf8780037dec8c6328bdaa29668e1f9385cb4c5400e853b47837f947d9c54728068ee1cc9c420ed057d442c8184010575acbd77e7db8f4dd9722c9ed052a44da3dd402c90a3100350c25a63f75a08300b07919ab4410c349ff5be5ed32d73531983992ef75f84c8b7a84233f4dedd89a98c0a19740c9328ae135b46e2981fac92a2dd1987a7743622f7186fae83e627600c67616dad09fbc4cdafbc9eee2e66bf475c081b12b3e591ec2f4add9e743ccebcca1e8d67df750bbedd16a835a3e3c9330c18bbd817aa5e55161454339c5a58523ef9da04478ded420ad7e29654086d71d70b95652275627a44b2e3487fbeef34daf0e813bdee00526241fe34d49a0b66971dd64297287603249ae8d83e945c8663839b574f2dd1bf810456ab839765cc080af0e79199d2d05809aece72347fa0f058d47d13a1c3959e9a209e20ce77a82b1214e91623568fa78491375d807f4707ac923f1271207f713a48e92b06436ba0302c6f804723fda882ab7471ec2b059af04cb251d71a3197a9240882041072e7279d98845e9446dc773d073e8b01c11045b8fe31d80164e0cad4b20fe57af4e613415b3eca22a742c7acda30301fa1d2a5ce25c5100169cdb6bd1f3699d5d0832f153a247475d7db2fdb9aad12ee03a86608cd62b0e702f79aec94dcf1a6d811278af1c196b185effc5768ade216394259f6aaaa6de8af68263fd5de2752fe0619ebaac03b70d8f561b2828cf12c993453cf05b90a60e32cb0b95bfe0676f0010d19152ca4727ccbe0dd5faa1852ab6fd7a540f201070e19fe264cca0f9fcf7b204f3a8b264c7601211649ec4042cf8f43975e9dbcf3474bd1459b3f74694d13136f14ab46084c92c7af0648d0b23146350b9678a6ab70dbd62028dad9d616400fd5a236363b83539e212b33b03cedd188715e5ced3bb0d029ae4f7655ad35502ce603a6ea4eb8c3dc137df30a158cd48ec5e809b4a24f414671c2ffe87e31e9287929324560b359b528df84de45a0db8ef09dc3be533c76381336ed631f5f210567f6f65acee5931020b7613fdb206c95e676d59342e8b4bd399dc9a862160c03c83f04c5892fc98b04568a0d3d4bc3cbaf1e04e07b260d7f63216130a0fdc2190b36f4509600d657b4e44ac36e07386a8f0ba2d0d227609cbdcac06bfb79ae0009cd47a513ff940b6e377ed6bbf2039b6c16aab4d7716fb2bc218fb8c63b74192db7f7d96bb446d2b71474a2dd1e2e74227c4a506ed27676556d2f102c506b0f4637dd5d98c7f2cf81583936967aa3ad281d0243b345293be5debe1fd54b7701c063cf3321e0510a534a084f73626eaf32c745a4c8cfb7e6e097a356ed4ae10d9f38e5301ed64eea71ddbbde36cd6e326d8936694528597a076d46f53b09f8044585eaa052def08ce276fd86ab54c79e1b11379257665de86fe563d4e3395b0388933d5abb01a42358ef4d5dc0b5ff7935279c09df31b3a755c9eddd9738ca1921ac20afa92d89aa5466e749422d8f5a4c4bba478472934e8c60d9329970db1b176e22cc310d84ce6d5f4321cda08d9be3e6b6a7d5135888ad1720c874415b1dee56b522488dcd9bd54b4727b8caef23b01a10fd500a13b6256b743f25fd86003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000031118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000310d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000310a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000310b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000003129a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000031141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000003125e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000003112978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000312daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000031189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000311159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000003105ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000003105c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000003114d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000003103db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000312ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000311213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000311ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000003114fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000312b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000031305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000031280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000031223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000003117a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000003108858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000312618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000310f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000310e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000031172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000310b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000003105bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000031137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000312e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000312297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000312608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000003118373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000310422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000031204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000310afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000311998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000003128d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000311da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000003121d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000310ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000310e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000031107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000312f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000003109726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000003124f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000003103c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000311fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000031205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000003125110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000031283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000003121cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000031094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000310c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000311f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000312421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000311fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000311bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000031304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000003100000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000964aa64f043eca30b9eeaf06c39df123f202512945ad65dcbdb5445155ba533f3852f842f01b42f96ef910e4a40c85adf97216f4e57533d0c5921140c3a2974521fb185ad3787f82a0fe4afc45aceec13a9625205e35555e99bac1b8fa5f5bfcbc223c90ea82d75b1a572a849a9e1c6bf9bb45000ac9fb74cb1f15bc645dfa8d56ff1a942bf17a187f656c5c2cbe19a1f7343925ad66ad6ba6719290950886aba4d68aa8027f079f450043e06ad5203cf71e37d13f2f667d98b56008fa94df765c0772b18b229aa1102645d113729564e4d746900470254c276bce29ccc6ba069163fe7f79023a2b6705e7d0bd00deac843022581b3e284d9beec495f9ce97b9f985652e4c9a2e48e243a69d7b8c299eee7adc29dbd26acdc4bc6e0ed624b6464df6848f92c7b4c7d29b995729b793b6571bc8c4c7f27b4c9ab3c787b0d0ee883c595a791082655a4180f474e054fa02ded186e70fd1c48856f5c24b19741e63f188799edf3c91f2fb1c1733d76d9126c76b276ba2ecb7266db78b19a722030aaa30d423e51e466099e83deea1a6025f24ee6ecd5c475b2a8c5b1e2f3fe1502a899cdcde569a41cb7a890f57d3767a70cd91008a7a3d39521fba7757c8b4726800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d1ea4b473c409e6a476900efec8bc4ecfb929fe4450b3b9db480946dc2b12887cd230b0b6e6cf41f3cc0e51ab15533e33699ed1d99aa4e2b4790fd75e268309c74d9b29352adcbacd81a8b9c7ec30d564c031cdcb024a7f595f98c7f56db3845e02c2f11bddeaaf543e0a965e212d8161cc3bffe3f7d733cf24f13bf5925dfc34f20877294de1f5586da62a3ac4dd5023b57474a35cc9e825ae413676fe68186386ce2834c522fafafa5729bd36bc4d65ad10aa1533a3a3d66e0aa0170eb8646e9e15c6acca9327253edfb2b93868e0c90d32f4734bf5f269e0847c2fe61a2ad0eccdde88cb07e5c397abc0f7164217e8bb58d9e1690dc60d30e822e74a225fb5f944fbf3b68339354a53ed00764da1cf465e57659215660dc03cccaacf5066c13791c3e5e0fd20b8ed538154659a7059cc54e3667d8582cc34b7320108e3020d716ee43f14f7ad4c544b620f5f454e16663c4facb7e94160e9da554f166067324b6ebff94aae64d9fc0b708133fc92d00347686fa44d7a4d2199aec86f9877ba935e2ec366475320388a374f8a71ca13814c08d05534ffe4d4420c007617ab053666c90663e619b1454331c8500b48fe98dfd1d0f313aa3dd74f652d3ca3c80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000855e3f846c1f107b6e5c0fa47d05ad5efe8680fc276d251c94be3da84babf23c8be324cd57c5f69343e22648927a567ce0e58379c01e3f3d3503ce2d540fe510c929672b258d0779f882b387df2b7645b9011e6bd596f34d499009af8e915bbf11bab40160102b7a50a8fdf0abc3b4164b96c0251437bb9ef0b549a74c55ac9599495b043f9c777dbfdf45e1fe211f3864e087f0de760f0a13818ffc4db7d514c9478511ddb7844420f5dd710cacc2274b02b36a665c9a4c48f1b773b844f475a965913914517beb35ea604ecc716254032ec31ac061a96b25e3d4db5fff04d2ca2ca9095efef3c2a7d0b381555f829d6634ba4b0975c2a7be5963aff8be768c6a3137ddca5ff72144cf05fcfa72a6549aa7d50a6a61298d5ae43752eb55e5d795bc8a669a2a55ebf2cd08036b2f39aab7d5468248ef5751e02840b197dc364c788207813b6ece0740ac8198bcff97dba08c871f0cacd538548c5e7c4ac030743d561ba7470465521ffe5418946728f372309ca50e72c9849de5c40d07e4fe0586559a313d5a34c9b93e991b4b2c3264092f203b856296b6f2efd53e7b0b27826145b8376af05e73a16f65ba545c686d10cecd8b4f6874548f9dd111a9fd2ce400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c186b742ec02015abe8d9fb0f2f65e5768cebbb46375535657f417474afbac2880c8346cafeae670636baacc3ffdf1d82be31ca9cbf6825346052db4da53d0335c18423188eeaa9119bcd920859d939af9b84f0acb493b33a3aa6d6177cef5be15085dada69a483a36185c8351727d97f2792905c1acac6136e023fe3f367e3858f5c31e4d6a8a548063c628f41f498d39a88306a2a5e0a01554021f278d65d4c788c7a56b233428dec9a325004e07fce6d1bc43a008e024001bb4715ed9c0c32f1a4705e8e34a064574f1453e370d07654dd50334bd82439e63f947daf01ba42c422e85ffdd08caaadba47a142f489d20a81fff04c5d43a050dd982e9683d89c20e6383645ba3cdf71bb93c81ee6b18b2ce13de26976e5428edc3c353a8a0844e2f9fd1ec952833a02ffa07cdbe5bf2ad7f29cf5c9d19a263e4ed123d8ef9b5731800de525f26fa92a7f082c71326b4fc4ed69317c238be797efb667c39f742fc59cfa466ed4d7a6b6f7c64dc09268995918cd8e5612373d7fe80ae2677ec988fd4f1ff935c3199a9985744b000dc91d3f7c93dea1619120e8fae291eb52db6803fd65682316978a8cb2433bea5fd4e34b05616907f86e8b9d623063c70a9c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a410d5db623dbeb50faa302fc2fd725d23041045feeadc66fc7ce661efaaf8bce3c52a3449a565018482c3de721b6ef8023dcb2dbf8eddca07b7969dbf03659999841421dc6d5c7bc4cfebcee8fcb455e1366e431646526d5fd3c63e6b6242b2a6d8f5a19d3304972a837bf5a49f3db7e545e1fb6f015c601b8f435b6a27a0e32ee5dc3e70e95ec726063c4d0df3e2da4ac0304c8a825b9824ae0b80918f740b2f1a930beb70c48cb7d7127fbe898fe7292e124cb39a934627a776445b56b3ae941bd4cd8a871523656eb2d82cebd371870a9e356d26064f69594ce32e4deff9ae6c043c84effa3ea6ecf64d736ee82eee15a2358f90fd8ac820b5156a88c083e95038b4576d94b379f7ec01e724c12394da69e810cb5e725318e24c52b55fd9f0c54de9c8fb1b0740e72703ce476b00c75403964d9348ae4124b06081dd59f4b1b65cd202d369fbbf839818734752e8cc4d380b1dd3d101a813b21c45e5d8f3b187d72c6fbbec167b7a062b6a3a90be8a9edfcd5e8e109d40c3fd4d6438d7e586cd8f8ab026c8e110fc9f3f7c2fcba3c9d81f7cc8d34eda099a94f5476b0262138c488c47207d3f621f67e261d4a8d3f3df96698761014c96c72fbad4708cfa0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a47336ee998c074d64396131431e9ead92b740d0bafd4b56e9fa215f43dc79a270dcc141a50f2130a20be40927e55b764d105e260c08418ddbf1b119075b773800cd452235e47495c79a48fc2fe61a3e30e3000e175b826219bab08f85ef00049d21b45e1159b857a45ed86ec7ba4cbad01ed158b839ca596b8c8f4444f8b12f8f46415d61b679020577168e3e797836522d05e5912a19e8614c0bafce5e8610eeac824881443299f275bdec2f253e54dc3a79e99d0f4960876d70cf21620b652d9832123bd416401217933f8f80d47363317e71c61b58edd98b4eeb319ce4ba7e674ad31dc3378dbbde037d99a88924cdf0fb217d2da6c59ce9cafbb5e03d50ab5bda66527823f025929b1214ea0c2482e912181d87557d5cda90be4351ef90a0149ad6a53fbb6de251681d481584080bcc0381efe4cc6ec77c6cecacac587aad3fcd4f408206efca2afebb05ec1cb0f810343c62e23e3c6477cb99c7005c3561c7d14e48bc7b87313e11263aca18c45ae75664a53b407fb770e8d2125799ee7927fe3610af5527b83d358d774c0be2dd325a19a22286c4759ae8c038592c82d0c427887cd809d3b73336d0b688cccdfb88056c0ae99ef921014cafb689f4e20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978618c57b8b7aa1b9bf3accfb6ef4e355a5d3e524df7d102b07387d7e3e93cab6dd3ec907269b3fe98076c72d91ed8c3328a219e0d314994e30cecc3aa43ef044904c46ad23f7837a3113b899084f6f57db042a983b867e4fbff6091cf623e51890a507211a1dd36432939ba370028b629477498b281cc4b1a1b5f6ff268d4b06f157e31f276a528886eb3ea7e3c2098ba625fb2f352ba6c203380b4c1942a8abe4c0b2e5d286aef190664a42c37fde7a2cda0040249d94daf0f89057ad39f3734d188e547e3034d6db67f052bff4fe729160ecc223cab2f35a7fbb254dcece3db5cdbcfc9f82530e45e044e7d25baca21b185438e0dca274835851e4042a3bc99acf4b182d43c20b37557ac7215e97fd13968a7d8d17067e22101622f3ee2a39ffa8f31f96b4da13b04229e45d9051571736922f9a85b6ab7a21976179b143fcd53bb5ab7e56e2eeb4f935c523599a087d2df58cf77a9e10a9d045aeaee279d53db288f96ac8a7755df2647af8a9e29f38999715b29b8a75f185c1e07e3b88ed5b4b9cc45655d6aac60f942570c5db839ba1de1bc023747f84140c387d71962c1a95e327415543e6f4e93ca5bc8e60331b52f91823ac594eb3200f64ed950100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b39ed7bb8f7c127aa933e6069d1a6b2badd3b9d49db4b36dccc49ca1fdec50366d09e68e623d0cb740f17b6748298674deb0d2f96e093854881a663799fe4ba9852ba9b68f3eadc6a6fe022e1c45e7240b62183ade9ab65cbf476b075db8b746f8436d167a2acdcb6bfc9236edc40fd456363d61a34b51cc155b492b5551333b5f7115fddadc10a28a29f1cae8e1904e5c0814f9cbb9dcb494ea2a59fa0e2f819c71d88051916b4972f3ce331adca5250bdc4ebb3a258a8b8289dc0b8fe93a6a387b021f6933d8bcf8c65c619734da5d1d62b726a878f924c56d3e766072a84635350d76f2a4a2969eae2ea1cd7427a034519263d83f18d9adcc9785269f707611aed21437a420e7271f598d7511ad3e3d8497bb55041781ac1959a59fdedd0db1692eb2097d96b9994045ab1fb900b6c25a4d4f5c2bfc684f763da8d2f3631a6f60a054c9093962e928dca562a36cc58b1c96316465baaaa35f03337636510269f4cfc2a908283af984a55ff60c0146bd5d9c5cff917fcd59481135e81e1889edff8aa7d8fd05e1ea21c2fdcf23ff93e9d7bcfca121132e72c99ca2f82b1ce2271550e2a42e9d895706fbb33bf55ccd4b71b51ea06e993ab4c8fd058dcc9b7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090580c75e995e98748b118573706191a71e7c011cf5b2971d1486d3123515d00326a68e7d1992318b097c229af299f9565366ca31cdd36d075321bf309989360af6ae8c8a16755f68bf5ba1ba08a469c042d53a855715e897e31d12e5afb6b28ad6252c0812584ee034da43d8fbd98df60ad48010500d13308a012da9c7d4a65721cddfb813212c54f2ed07dcf3f8dac8072db30cec5ab003ce9888e7664fe37c3b5686da3fa85bd78e14642a559b684b6af693957c0ace5410c97dd2e88d5ab8fbd15e36636a3b48b3403dc8d4f5c0b186f0fbd986bb6712cec4d77bff0eb34895ab5f0ae6928d54bf1211b081fc6814ac9bf21c0fb9ca6c93f2f483b83dd137a6baeaaf3629c851682e696bc4d512d742fc421cfa25f2a4a13555b29c91a9131b2d9ad843109cce4cfbce333b787f04727e36c5cf055df90af08285616461e4974a785be458c2244c01351b6bc1c9a90623c02320009e5caaaf1fbbca07223ad229e22a7c0947f4756bfe326727c3c4a39b01589012d6015a673c7c8a371d8f906a5bbe25c6e481c5b6d032a432146b88aade6882118e6cc8fc844f4e4189ce713e45aeb3633052e8b4d108afdc9017a11e4ec5075aaabe53602385e370be80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000172dc5197f56d4fd14eaa147b1d53a73266aa49789be3c6384dd6d026d4a9f10f9a37c28e1a2e3968b3acf03189a55a8c693e2ae0ee0591bce3f11bf2ab860c1cebdbcb51be7eccd13a466d736fa973dc6a0f71bf90f4a203af13ad75adea1a9a2ca3cf13785d5324ac059af4ac987ad54700c4ef5305b996a67772677cb687d79e820deaae3b62371678c849c6b494c3aba0fcb11906d298832908601199af8914da596d2b5d346b08c94f27f3bf1cd3f24d15c9ca864e4deaf42b4fafe5d6ff7a6308df65f224cf0311b1f61839ca75bb2e67ef9ad29953d899a6b3036c79b9e0c68271f2c069ec58c75a9f559f5590f9547e7788746a7caff9dcb36352ad2264c384fa3eb7aed7323b3cc3f0b0ce48f9fb1d3a0d04afc4e5409d0f17af62cb2eb124a4626bce2e72fa6861bf7b569ea6c5af23b3305573587632182b323f3061ea7fff786f94b0d4fdb7fa437d943be105f958cc1ee7937ea756a1ce7efae15016a182576d49384b6c4288c55c85c69e54937cb8883c3c6217f958a1e99fbaf0131c971e30881635a4360339de1b364e2f11d6fe1f185277ce3e72da860d4783f00b5274feda1f2571735eca282b5e849bb3fd85998d72c840be28ecca9ba00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d3012dc9171c7b5fcd43e429e3e32bf41ec67bd0e09b57d6bd7229f765fe083d6455f54335ccb59c3f3abbaf74b373a616fda24bc3882b7016f4f0b9e6024ab30e9461ca0f213848260e818d93b3e53f101392c488ddfc4a5688367a0509b56f71b755cdca95527293a7f64109cb071210c1f56b329f52c8c62e9d7a3bf00bfd7f14262dbfdb60b54d01c4d3f1b4e738b89ac79c148e0b6e223ed70c1ec967b2859d54dd2c58a99473bd5603dea7055d07fa825657cdb988562df8d2fd73a2aefa73c7413e281d98aedef7b8fc456dee0ef2ad73f3b1a509de9c0c1f7baf6b0802bf57abb7a37e4aed58ecca531b06d6bc415e742979f4a3c3580d5026563cef16f55c76cac1939601550611a2651093b8416dac93598af80d87366017c46924de4bfb8a28b3cbd950a299d3314c1e78abe8f237804ede3b68c9a84a7a0f79211077e35b5be6a4ca3c27a47d6d0e39845bf88c6da5002151892355b86d07d723582a1ed49a76f6f5eed1fa7d63d1fa3162737c034e6709e9b10358055d4344e08840d44635403977887cdd6516d55df9aeb1705b6bf58a020d9dfee5197f0cfbf48f46d071f7b6b9b973e5dac18ff16074fdb8362fc812e8ccdada110b8f54a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007596794fe5ac5effcacfed1aaf85106bc8d68fb88dabedb7aa77a6dba93be8bef8c2354f17f2b56ae17a53e5490db94dd33d6e2526f5750312299da39afb64140b79f3eb6fa0666b4fd34991dff2da3bf2ad22fed490e27101e62a9d6e182e786801bf4d7070ec07f4c44d460511d76d44d994bf5f36c3321319b1284b18280284021d3af261e8d6dbbdb5e8e2a4bde7437b2be3d053e379a08ad699648c1ed14a66dfd29982d50764e965f4b5bce0ece7226c61fcc2a9c86026037629ffb1ab86111dce771274f1a6fc034d4bb67828a5afdd8a10bdafbb67bb46ebae1f951aa55e937dc7b5e966feaaf59cba83a05c466e00e17e7e57b747a780dacb58b3dd52998bc058bd0b8e3002dffbac9351ab096e94c7a15b1e8c930bb35929d7aa5ecb27b6f34de77a8d478ee33c415c8cc569b7dbd625528c5680846741589c086bba4a31896a100b1e619a7e3071277b25ba2e9634d872a0fe966e0ea52880e30a863bdcfa22c6aa564727b92808b86df565872e8a6644d63519e46632bd8b2dd864b47a8a6ab62572d46c6c39cb0ac411baabdacca3dd79658cff8b9dadf0b32229c4ee5c48f243f5f27ae867a77af2684c5f3a819bb6f646782e85698b197b800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bad17ba27ca22dd03df3d92b4787b04d6d7e8e4296492616abf245f8789d1b1de5b54bc31b902d78519d3939a89537752100034cdae57de9c5f238b9d2cc575cff166c558a6bee7af472988b7e067682fc4eddfad61d49b6eaff7ea7e747df88d0d6037f0b5e6487fc9c06dae1cd5b58e04ecb5adc19d37a79cd12f9fd27892e3e149eba7a3eb6cecf2dfe70dcdf9318917b2baceb495b0234cd65b5ddd5fa344d5902617edbf649eea8995f624375fd8665798c1f7035898f1aa175674a8d817b2e9839931c4d9189e93b141a8a006740d789845fd30781de78008e4063967ac8d187c77fa251035b11a97829bc56cb4bad2bbec51a765038cdcf2ac916795707ad690b6521ce44e294e386c742615239a2803f6ab641cd7c43eba0977fd3762ad7116a0705e49a1378d3f557fdbb900ab0419ec1b13e5d57105758bbbb4cfb307166bfba1603cb0da24fbdb686c7a0987650f6e03a22e802f8830eea558696b110954c33da8bd9125bb5bc7a35ae6c21cebcc32f02194761cb565aa4104eccc755c039c9d9605b47679796049d6bfa5ad369f4463c88d1ebc9261841ddaeb3859ba41730a4a833cfb2d51741a37747c130bf6f5f3602cbb28736e676dccfe0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1b5902df9518d6b8e910cd7245b971f513f1c38abc05891ad092c437d081770114e1601fe71f3aabac6bf85d84a6931fed1847c3b613b3b7dffbbbc70cb051a4fce5a27c40b2794b232e1f978eca25af65788f4e16757353cc967960a6d01813d0e62ab2c63353a40d45e24d73ed5802b927266160990f9b56010f391037e9ce723ebabb799e8ac540f593517cb94d1905bad20260e4f851236bee3e778417f0265c2127bdd18f5c00b6dfa0ca39cba1079067fa697140e5f5d3acf4deac93ad07c2c8758e440730a68bd69afcfac7dcc390198043fbdf8614978324f2529fb8407a89de5e7d073c691bca4fdcc3c9e93b98305a2afe6c4116cca995989d980957acf4b6e435a7f215bb87f462f539b7834b08e9faa4ca6967f983c43c8161ab23b33cac5d859b32668e3a0e3982172009444f87e07e93ed58eaadc96605128767f5a7a25615cf0c4cacfd725dde8666c521a45beb005298f45228c19f707378c78c3d7be6463896c95f5d1818f793f0379d620841e58b0a6d8fc6c7d9bfc529b507b66c41fa5b4763efc904b74a40580e132b122404d3fe6ddfc1848bcd949468e885a07d2698f5e28bb0479696b64b9207073dfe2d946fb7722acff480795000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d8d71699f7fd7739ea116670d8c12d8a77b903158e64a5391aee5e8277b6ea7c3a38fd435adad304092c6a2ea0eff77b4c596392b4a3a940de0175b9b894b07a2a27ea040a8a0fe6722ec13c6ad4efd58d46247abbca8bbd9eb276c85db3e492cda4bf15a5d9358f6995a486e7408c2e7a8ea9b7427497ef0e6138fc6a93a1d13cc41747f63c42faaa501b453d89117a57c25644ca11934cf440f04f08b782e25b1a7b7b3a89ecd1974e91915e35189a23748b3a84b5b326d623770ae0b151a398540c127bb41424c67318d0db55fb3f9ee84dcea0efe59f3cad64101e5bc453aca7e662876d4db39ff3c02596a02624fa4cb29cb0c038a358a568bd772349356465ef776656f6ea848c8b0cc59e6b4f4e9989dc0331c651c3028e5690e746a025c393b708e23c2461decf35ef5eca5a39539022d9ca528c1e0b647d4b793eb5abc7821c57f9ccd3cf63ebfc1e10baf5de66fdd48c477f0a5d1c505373ae412fd67766f324f1a24aa6a4d3e181d3d6c0534c5a4d07a7a60c02fed500024839734a51c8d9e9268911d52216a6dd3872d341be0241a6366bb3d3605a97d974efef6cbb047a147397702b35d14fb07b1fe2f784b58f3299ab13e7ae2d379b716c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028e3468a98cb8399b23a0ea56c901b6fc7fa8e22702fc0b41d4c4a46265c036f1a4e2ed88d45d512334a1cc01bce51618325d6ffde3aaea27232d2b88bde90181aac57f78c89684fd18f4ced9c7a9f5575703e8e471b45da634e5ab41c2e24fb138bbae575c03f6c6c5c36ffec7563ea3029a170bb9282f9f7043895693518b670f7df31dfd50a7705237ff4e955d6af31bed23e9fe5bf747adaabcad5e9cd4905d8e697ee281822e67bf289042af88cb0b36dc5ad5c5c2792042f5a3a33a30954a5d04b34a8193ada8e325aa71433c4e649fef7b33d63161a9e2c4e34dfd0727e366fc2c17d93d72e3bc43ecc8be4439e08678490d50408eb233f442ca8f7d9590793fcb7eb781ff787b8205b1c62e203b6f82de0ecd1d78410e3e44b27c05bb77957ca22896740ba5217aa96e2bd3c15e965a7491bdb4c0e4f472aaa897252f7cbef3e891262f7d7110fb9c39eeeda6e1f6a4a2fcd297fbe41b1388ae084c529fab36a7fc211683225629cfff586e08b4004cf8f5ed99590588273e7b1e87034949fc45871785f8cd5dc18a34f7d256071f07abf70692c369c9b105c07f477325271c8d5ac32ae38f692603f4c40ea66ae9064cd597405d4c541da7d5f380000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab2e126febf092985ce3e2e6c2e13476e99fe491350dad9517189808f9e40498f6cae860e68b7366568af44498de278bb41d482ea9478702a37282575f030dd9b8c495a654149260fc93f7923c1b8871be8eb44259ce28ba9b0f6d29e3914fd4c4cfef06cb3f44c428326da98c56d8c76fd177aa57c79d70b68db7098a78867f6929bf56320d0da6590bb49f37d542cc62dba38649cd708315a92fc2c18b3d41f1096801e640b58459cd3b6e07db227093eb307e886de768aa66626d91ec4c692be24b18d74131d0b99a37bbaa971a76dc9b3a3c76da74462df22cb2990fe59df88969f9269068a27b3f8fe7ff0d9301400e1e30fcae840ce93ab66964e57247dbf135a942e63a22c8483090d625c3eb6e8f90edecabba6f7e9c4d92c4ec03f9914096eeec6dbb52c63f562875469bcfca49513ecd4ef5df6aa480a40ac93a0349c05b0968006f31bb45ecf5b7bbd685abf94c61ecd15c78b2b9857b103989f8ec2de09794fc592cab42fd196f3f1fcdb996f3c8d9978c1ac0c15354c57a99d506ab9b2c0508caebd97ca711c1e3f4aa02348f3af013669e190c9466c78af809d9f55522ac8f8b31c99896690593e7e7e7e17b24ec054edca26b5dbf735fd80e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089a96cfd8450e318e849fe468058b44fc401e811847c9d2a04c5e14914a93bdc47eb23d245fca1e66c0e86afde451d3316d3645d754f995a46ba385ab3a6e6996356409997a16ba00b76aebee2ec931f751473df18d6972fafc7e7804f98625c4c27a02371c8be4cbaca6e51a21bc75d40a56290084be6bab6820c9229ce1bc200ff9ef91c1c240f685ab0ad398c32651148a365da31d3c3934deaba5770dafd8812003bc8fc78effa04303c74626784707cedefd4be0385b0c7f711f15486fc5140af1504c82889329101c4373e8effc5881f9817fee659622dcb9f5379456cb6a1ffc402cc180dcdcfe181f1073dde1d0b2be2ec9ce9297f1c6f1f48060500204b308995c6d07f3351f339a4a7b69cf581b979c56801a8dc758e927fb6cab13c2acb4c18902cf2ed7a92eb770765ecf85625b8e3636cb3a3c067f051db8eebea84e38a39b3ff6f464839af76d6f7d05d826f2f9a62a023daaa5b4a57b0b67101e35aa614578db8ee3ff575eede5d889c39f1d0c4cbf09111bc8a6694232b7a5056a5bda9e77f78ec8e87d9d512f4560bfcafe83bfbbd4cab279e4e136951b28e6d00dd0ee13710e5609deb7845774f708b2a3bb6ce5eeff2c47990b02367050000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000906624f10664a2532371a1b6d13f3e05b59fe735c3c72392615b87415ab6c01bc26fc8574c58fc6ac3d5a264a4d749de05b79350880d45cd6386b1a6f60bf10d55c75dbb4ca2983348434c1cd555d7ea48fe5584f23732d5feabce318346a138c692328af1ddc50edca8e5548a51412f7c4a3b8f99b7883eeddbb380a37b69f40a9b1c5199fce4b7a9fefda0e527560cf31a9e21d9ed8932ed803ff072567f83458eb9b1e3faa5c060f4f50366120638b97e27eb828ae1953f8a4578afbcea8318411ee702305505ccc0f6450100265fd13ab35f718a41aa941672bc7fe73a1884eb0abadfb5cf6a1d745d5c2a4b892d063fb6c7d9f5c6c7efe09eb36c28181c4252477be2bf7c6cd91c145bf6987dc08a72bee332f51a05b34317ce0b1fe836c01e601e616a596e4d3b081a8ead5d812cae12f8bbdc4bb51c74cb643e8745fd863a73de8ce4b0d48ad91a318727c43053eefab2d3023fc425b38e632d1a0de040a2e1bd227d82b74dec4a5c12db9696f8a66ad4a25b0b6789627ee5e4166cfa1bf4658088c0dc362901d9ac0c1855607f86b6b88d9aa601cb0905283bcffebdb34e4df747b314f50534c266d4cc37a2acd553c4e7d85eada36ccfcb4f1a094100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d3231c9048f974edb9b8a0790dba44eb3a3cba9086c29b706b11d7579659aeb2f2e90ad6624c118bb003eb93ce84e196db28dd3bf12ea54bb859c6eb0b2d37528aca87b7db3416b1601213631444e2ef1ddf789dbb25206968d158539f61f0758dd0e2e9fd9b88deac0159e18bfb75449a741b6487f969d5937d2385f53306ad5b72e89e4bbdcd97ccc36a2e202a232ec127af2183034c8f15acd144da43a862a4b28ae1b5a71b4a6db8a6646e47d80641b3f3ff9fc11b0ab1655a5a231f3f2e1f94714166712f32962499e148939cf62d7d047944cf4b9f5cad92465e1cd685cabecd0aa9df0c3eff8544fdedc07c7fc89b389b70dc651e4c86aea37377c98c399ca3cfb4438036af12f72774fc978f5e4327aea2af113ebca5260501e612e84b8292ad6ec111f81c33374fea304acd476757977a5fb2423ddbd6f2e48e91075550cf17d74b69ccf50a928286151c87b74a6407b4c8e64dcd849abc48ea658b6bfff5de8ad517671c4dfe494c9be6cc2a842722a7d3df2e235ec3a279c47bd63f678739cc033041a228236821fb9ec754479b51ee6a3bc5ee28edc7c01d313680ee27fe430ceffb7e4f87d29e518adf907ad49d97ac71ec3099520a4171535000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d8b40139712e42213dfcb12eb1b797c4c094db764a7f6df87be61342183e55c21bbb8bd37c7d3c44fd2c22f2341d102a48832ba7611db61b375c977775312d27ab47406c5c51c8905db53fc57256ebea1668ccbee589ff4ff27665392bba09d3fba81a37911732b6781a83e88c410a7d9df8d7b73d4573ffffe29a0bb470cc35366ed64cc74ca5413d752e36efbf841a5a4ce5c280c28c1c2e1d4150903d7d44084906b39da3608b9b2c8a01543618706f4525f2db43f186f7452e77e9083f9ca29a2e978cb595de589873cc21a33fa3524c128b191a2980f7b7b2b363f00d93dd22750956e168d65010069840da3b4084b3f20777cc535935cb73b1652895cdf636d6f4338885e5591cbba35db611bf7f43bfeab83738a56e789b57ad86233040e956fff81f12e04db6e02d7341b130dba91abf3430b133ce7c2142ca66752bb125455e878bf408181988de51ae40f793dc0bd762f56e6dc0a43d547fa218a62ce3e4bae46baf64346b19da62553295c07599cb20c1ee9b8d17e1f858f31882acd31d250cb259bdb54e03fee4251fed83e1c05b9ebc989c96633bda48c2fc07c411cc139130121473c94eca773434b051e40d5bcb1f41c939e4b0a53cb7db00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001af8a6e2a96d466ed154396a2cb5551f6de93980aadc3bb42e146e3b3926f8f484bf86646978d6ae8b1991c4b2987fa9f30c41f99b79f7a1136e2a1943261f4a6f98edd238de266f0c8d08e17dc706d668f033877203bcc3a8b62bca0217913540693425788806ad8163bdcdcb734891aa0b776f7c17e27616da506e07a3279b54ff2dc2a8fe8dd7464491db604d47caf7ea1701c4fd454ff2ad3997240996d2fef0cade37f7a9a14a1f551d59d91371bf2ca3e202a6da6f6a34e0a06324907638523b38feda280952e57cb1b0099a634a881f6d2e0aa9ca986ab6411b508ac4bf58d95ddc596447f7fbdfb26d12b6596c843153c4d904a73daf549095e6c7b85bb1174d25c8ae858a70b037d3ebe9ecd23aaca938fff5b1eb2c4dbae606cc9354f7576322e8cfbed721ab233e58faeddf971ce06e723861a97eae2dd67d08480391b805ac161eef6840f26a86ed6e63489e3d2e6f82c16fa57e66a50b6d85a5ef1dcda27283f741b080dff0bbc3e273a1c118546c0700c70430f8eb462dbff2fc89b6667aa37db51f8f6ca0f4020e0d8d4223ff304e304953e6f5a4c7ed39d8c635e150bbd313c021a50dd5d8c90ce11f2c2fd5a83bd5cf24bbb58c994d129700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b766ab96229ef5a8c5d7bb081bc2157d2515c25a8b5735a91d9d70d8643c66861cadd9992f52b0c869a1625dc0a0d2dfd6743d23862e23264eca29f69540d79ffb4fca89672863bb1769bab0ecd69a8f06c174fa20fff0cf4bed006ade711dd3c8b02b09d8c9d23c180511439222103c39815603de03afe5e061a20ea525759e95844b3c77b0d6494b9e46e4de4c42f281d8aafc2e04da85a02be2b197710d39074db6e4f7a059d5960c280d511826bd7442a51542f771296c9c84650d35b9da77780dda84916e56cb95f34c7737dc685a82298c24b8a9076298af6c11d77f43ca1b5706819aaf502682b3d7b493780e9731166632017d81e12fd787bcf5649ae20e669ab16cc33de11acaa21b3f3fddd4814599b5810af7d48c6a60f2c64dcb35555ed28a689ed342bb4bd14b3a53de7a0ccd602aa1210a8760d4e083d8f09d9de0e93a6a176c2bfc28b30c7c2281ab3d7b1ee6ae66fe50584449507e54ba663acb9a721f381d31b6082abb49412cac0ad4838779d387f17b6a8933d278606f8518f2b26cf525d0cd8dee88d777afdd19ecd81fd900eb19b64aa4f3d525dc20366a0dac76a530edd260c1b94cb6b7ad4b4292ee8badc0ab4ed453080d9ab1b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d19007bee593a8c9310e75286cbafc2535a3a8a5d3da3e48fd70b97822f0e2ef8f92b206e8a61bf739ad5b5004a4d23c3e06ae1423d8cd58c4fa6f01d0908484d03946a52254900ab40f8da74db5bc9cf9bfa37332ca5059f3b0d7f258ca5ecec63f7c3d72fd872b6541c9d57d392cf59b6229e749db2c6ba15a193d2e6579bc862564727674fb7e0aa6faf2502e982acb359acce9e17b5b9357c3a14878604313ad478185d05f94cfb5cf5a7b8419751654dd68bec9f81666c7249830704136ffeeb62d780727351898d64e769f84cc9562a3bb9413da322a3d0af837c85564be5667bd89d7ab1986bd6efe5a26b74aa4b43478689ef2867ea6e7d99135726dcc2fc257d884ef02cc5c88c8c0be457997c312060ee3906d78e9128b7b5860031df1d7462f99ca9dfbb35ee61beeb2edb0eec00b55f4aa19000a8a1b0d67c0d2362d1dbc8fec4d0de13618426f482b0dbf8a1b7051394b2d87739d42dc761f5530ac8f37d6cfbc177f8731a9eefcaf0cf643657a0eee560dc19446b0cac6fab9cbe6f4cd4bd83a09c6f8aaea36a0ea9901af782cf558727343a3cbe15c425f8585cb27319247013ec8a062b44028fde106f16219165c0cb2f6ce50435e8d0620000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7fe082eb0e864560e8a61a55eb622b98cf79b1cbb0b7bf73bec13b2f7bbab476055ba5ca1465600ccd3147034342ec7c9cdef60eece3423192ce1190d7ca9dbfc53a5d8b88ea3b20d1dcb7807cc6d793f945b6b7cef8189c275eb205da37ed0a06598ba5cd0890d3fd7aa6e754fa1be100d3dc0636cf7334ae024975179a81a18efd92907e703de26bcea540022963f39b653212780fbfad15fdbd8a39ff55c59c0a13312cdda8d3ee754ccf54ee9d9e2053ca1c085b49d1d0fc9674f5fb1f59f5b86ea0b3e7a42d931ad2d71f6ed8416f84b8ec4026816627287283cfb2e91112fa60462817436e8a56356785e22590b4c494bd9eaab475e1b74ac904d055d3666ff3c60231f0dc75b8d93078a66125a2b627752feb344d69157c378c23bd46627f0da98b1e9d7baae93594ac892688a4927ce91ed3a07a3445add5bbfdb9c3dcd89bbbc9c8458dc35d7882ede9a437f154d24a058cd8d68bcbbb5ec83ad59f353531928c944eae9bc9de46bdd12b5170da9f425fe861a378839e29cbad2b72d9d4d7a6519a4740cb04aefb612eee8a39a1401ffcc35699f38cf7daa01013d78bed2908c2fdffa75e6e693531f1f818eb4493eeb3144b32fa97adf7d14c5b30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4c5780be1ada84918e7f25956a63049eed98d467cd99b7a420a2c3e041dc3afcaf3bce024e749f6cd6dca580206d646cb50e5a267c85a4568d49159d32088c0291a536404f487303dcf7679a7f0df5edc0bb2cd21dabdd6a733eff51f68398a739ddb196a2bf68600fd6f7366001e05b257ef3de89ce8c0efa9819759dc524f7b3489881e44f3ec76a812fe108d6260e63c86ee4a2bb2cc20b363cac58ec2a951fc895154c7ed6e45e48dbdf163dc2bf85198e638026e5be2443f1b93518a746ee560701968de0400da4740d6e43fbcaab39f7375b270912dae60e8b889cd51c2df273dd8255c6dbdc94e21f4816647e0b72f076b5aeed3512e10f0bc96db6ee4ef70c8e1bee2ba70fc02e97b8f899e4f6db1f0b315c8a55738b17f2ecfe60ae8370337715c5464d0597d5eb185de4ecdd82494d3d5c4be556507e83bad75342d4d4d60941433b9bef08b03af15c5560a856cf96d688690632e97d39367393a7ca360f6b63f707136e4fb2c1ff0cbbe0b8d74cee3e06770a2debf056c4f133a03a54a82db6fd1063394ae073ba3279682e9eaa34bad0f7545e3f4845c7997c934f93cd55ccc7e260f99660d5d9b1af058905c7556bd2d65b30e0d324bc3a6d300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bad6ffca7d13f7f19401294e190b657324478bc7837e2a1eb5ffafac1fac98f68357f97d2f849284bf0f624da477b3e8c3430c09b26e75346162ed36a650541bc46f6895fb6d7fda87c1f71edecfdba441d79f33c5f94e4d12e1df94115ed93ee6b2cdcd83c4b9531372f5e6133b7f45be9e1a8823493e808c209ed3d0a22fc5398d6767a19373d8d84ebcc6a6aa3c582cae96d16902bccddf16fd5b56fa21a234eff0d702c9a8d2c7cab414f83630030e44ce78376e28369beecf0bb8d1f3b7a3ce8ed8ea76eca936ed3a55915a13e68a63422371e133c23c44869dd68d66ea0db419e44d5076bd494d3f2f3c8279bb641b6915140b858b7a829af5249c32846bfa61e19615b3b4f33334922e0abd653344bfe6e002d22660abca3f2a4f643e2070a65740b41bc430897fbce2063f90b58b0101381c0d9baebc554513a006e334352749ea5a2e47a049940ad2b090d270a94e5d1c11a310f42f4cad0c4401cedf5de57936f9af857fd5ae346bb33d80829b3d397db8813ffb730dd0dc5bc53480ecc47957334cb8934457963bbeae6f029ed3dbb1a34c87dfd0528104070388e34037ce5ac945f9e8b1ec5ea41821216bbd0de3ba06ed9a058bd950a78cab00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085c09a94b4041657167c3e044d40c1356380733b4be4bf3344ed2c7eb350970fbc9b146f5df2bcb7544116f806bfc07fd603ffa59e903d4a53b73c4cb40b877eca31262316f424b7b7ffb2de66c40ca267f8fc78b29ded0a62536a5a5cb6a9c345ef29f72d89ca7ee0d7b6efb8445cc1c7cb81d7524417221cb0acaee24e1062080b3a56baea1271643789e9dbe6602a5e2903835f180a9361e41646f606f517d28d9c5ca417c449fa06503af705509404848fea093d4324b61816cc91a57f20f821648a1ae653b6b477019615cb8518f7f8f92f88e57d2f974d31ac841e8b17736072e1c697783292fc890f0be75619a7079164f62272e8d0887e4888c1bb388970e0c849924cfc71142a152532e51e7d998b0893ca7fa2e38e5f2fc0a8d90f89a03285ed4a9289ba90fe082bbb993d78260f1c146dc99b1feb790bc703ee13ca88bb3c306c5f9e11e8492294e59308cf43a7241ed4666146001aa4c63036ff149047cbba43e1d6c1db3317232b22bd5be68ebd1ff90ef3145b47f24d359f116d24b77f1eedd154b0fbf7548428e5b6e682c8e51966820d705f9769506a8c3d2c874cd178e34c8e7e77d0f872ce464cc0ce299345f54f577c675a2cf679c340000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a508f4970ac6de51e0419b252da3e50a9fef205faf9c3d0a2888a11514dd159cb74e206892a3aaa8e96c3bcd165dc9120e4583d38647d893cd7deaa6f7cedbd692a0944a5552dee1990df6b62283e710695afc806bd73e974a0c609a0a8d9f1542bd62e6190a813cf3f8f8f5e308f9d5630e9e95e5bd3b1b0278b6cbedd83701b10c23fb3d240ff08ccd0ddd61812bde80495ab68470bbba1abdf1f9bbec9c2e7c75b4a222d17c86dc9566f3af85ab8819a7c43b22d052fa5368cf2709fd5ba537b136a103b92417702af17b06fd9783676bb6a9c15b4e7f9f27ebc249430994a46ca29e4624ac045f59466b28734cfcfcf82b067e9174861d600b9d9d64005b073c7acf3b2c32ab1b6428a2a75bb795748a162fb2bb73b35054da2a43cae9546493dbceaf5fe99e4d5de710f2e47d08b055290f476432be12f8be8a89fcb30af287b8463f6dae2f0c6cca0b288677e8733f5a48cd2c19ebc976eb98357960aa86dbeab9b7d6f0ed6ab051a5bec47a17cefe9bf6a28e0617c7e62be99db98a006010847fc15cad8b704354e1ffa96246182e463e7ab52196faf820518b9cd00965afd1177d5ba154a7edefa4fabdbf9345e81cff23065711b9df48239fb9987c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5b5fcae536de8570269b18a4cd15393745e179e4311db787034bc5583fb0455cd8a9d3a6f95fc116807989e120f1e2d0396c10a437e19d1b824efa559018b4c63c764380e3147f31720f4dc78f43bd09e9d32dcf7e6cf25f8ecb71e7dfc90feaa0729c4b18b11a24d65aa78dff83a6f427410388ee94bfe4ab2d4323d9a66e059166574bbe08685b2d38b4d2c2744d3efef2f14d21bd6eec7435ed2e2e4abd85562382d22d66e31e0d005bebbd005e61d1ad6f00a91eda2cee403518a763b89409c6faac240e903994e56de2aaa551e51c2f8f20b1383419fa6b26f294f0e8cdfc9943f1af8b0f6fe2e547217c56c4aa00c814a917c7c793473de368f04fa355ddda3e0a4eb52550400ceae9650cdb472806f939afe928f282fe26980ca8cc660439a4d9ad38a899e92f3a7ef77f3a8fa16827e4cee550bbbf82306105a5485173408de34517ffd7909c5818a696cc569f5e0612fd2d4db7c526bfa84fac469c1410a5261c03afe553c552cb3a65b7028ef02b8dfeda3922fb286b13c55acfcc7442061f637cd1048d68e4e820b6a4ba16eda00e2071d33859fe0d8af6a20d438f52490194d751d557ed492c988c3443ccf64829a852a9d8800f24b9030719f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d69efd648b3ded826eb6f05b0b9f9d05d89d14e8c373a61f3571336d47b49ae45b24897c2682d989d019c530a0c9ad4fe2f2493cd34afc33f45ee752cb2041d2d585e743f7ea6ae7e92d05ee401517ae5cef285b0d81bb6d2e5ec43961313f1ee124b36708ed6f0e01749c036befb0e75c1b79431499edcaa3fbfda5e45427fc570d495e006bf3a99dd6f6546a0c235b00dc9db1d41e7419b897c783a795c3784f7f5f2a1d86ea8d4d2791596a7daf47d831e1ac677264a624e597c75eca18f65792f60e193ad20c7477a3b4f28605e3b81571bc22fdbd76798053377c059963e4e4f1449345ed30540df9920168cc5d6aefdd4953cfef386479677f98db276e57d8563d002f784da9ec40d71ee28446956beb3f951f20dab7c5d8f18eec7de0258cd37aac8c561b2af374aab36500b54c7d08389c9482b0c532617110b38f0f773a45ce9f2b3879162b4957d7e3369ca692a08d1299ed2da407b0268cc07be5239d2a5a5dbe566a0514537375d2fc126a2bd0f714ef7cfbacac9d58a8fc3560f1dedb53ff412a150170db00ee451219607e4eef5aa4adde72cd6db0f4ba27a3fc2d62d1f77b43893f3883fb4c984c1ada4bdbe19aa4b8604e506fc5df3e53000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008fe55d40a795915aebec45cc856cca36ce072a70568769bc7d5863d178195e2c31fda5ab466ceff891a354e615a45e5ff54d384cbb560f843cccd9083a5561382b1b793f51c76a0978af953cafa193ab24480d84b3a9c2b4c07160a0927ea67fa1810ec7aa905f4679db19f4cf116f8498fd8904d5ae846cb54983738ea2f38f04870f195fc4ee858c5a48792bb60561278a734d5c9cba0fe074a6c35da80ce493beedce9fe2d2d0082e8a5ffcce7b07dd81ba03cbbf5b8aa5d71aac714cfe7255b72b067dbdddb4d4f34ab9a8a073f6d02ceb6fa7552b10c601a736915411555f0c1554f5316c811da23dfaf7b440c39aa2d047dbe789e458783701d4d303507c09dd3f060956f69398309924ca167e334c382726999f6354011556ffdf8fe7c6c70b06cfed886ea11b1cc894260b83d8098590a23d2677bfc12a79566f2a4efbe3e830e50aef6aacc42bfac99b388729d7948bfa78941a017f49f2bbddb4ffa311a745eb4beae5c63939fef76c0cd4b11c98ba8226d85cb076f5ee2be20df41ab7a78a7ea400cf6b6146b2a3100c85d65bad40265bcd8cde009e79d5f0f35485193c540f4125ca3a2cf00bfe0024c57cd3303cef7434997b4b6697f9c4375e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1fbeea50cbe79e11b108bdedd8037460a6da3e6a2b2238540f58655e82efc68d681bc4f7fc6610b8d023c5869353d610085a9ab47094dac94b5709267143302f066c710122ba2de1b1885b976a61fcd63a2bc4dcdb4dc2f25771c5e49a83b1cd8822fed8a4ebfc295b23c8464430c09c58728078dac5305a2dc975fd29074a72b85e38a65da9c83eba9b6a495c6dbe6baa6e325df9c4104c4b2ee57d37707b549cbcd8c441b560b99d93208295f047ce7aea82adb4a47fb5dbc9cb90885a3dd6708e78aab0e6411b46dffaf3e760455d63ce953a3ece2c8e781418ca2095d883357c9c540e477b22422007dedc9b0f2ce1735ddd1ecfa57ee239f208af48b117a9d4f6f1d78cbadc64a182526dae0e2bc3f60016b9d7d37c0779919e70ffe7f9a36cda416f04bc094f663ac9f3a23b782454d580d938caefc80799821ce5fc50a092d8eba6d6e122cca1e5be4381ae97451cb996eabd646ecf40bb195c3916bb5585d76002ba706f592fe340ada0fba64d101fb5af3a449ffe3485c2e9da31ce5f8254aad81e650e0316080e0443447a9627faa87dd623c988000048d63d50203a3c05a0e83d1364fb78be45aff3fe9c1f9dde9a6eb380df46f608b08d8db3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098289b35302c5565544f992564a597ceb760abb6294afe4f2fbc64c3e3827d6f3b175162f9ff805e0ae966da4e7cc26db0ba1793913f073aaee3659d8624c1510686915d12abbb88e6202681cfd00fd4d539fdd7e8c7b1453cca363fbd91de432856268f6503d4772a8d1a106f3b06b330991c815a8c3384f0345ab17b1babd46f4dc5d1a3a41bcaf947180df35feab98af6267819dd398497ad03c72e81bbda698e66b6f2514250f40080b4987f162c05f1a108a9e4fe75935afe39499486b77ef5395b30cab1b1e2d4b5aa87f1aebf3727297fc5c56505a64089384e34b8676fcb89bfde2de6e25dc498d824594e9ad4f83cd5c3404bfe5f4debfc3e76518a40a37c4ab1e708ae60b0245bbdfcd9883c435aa792ffdbcf60a33cb90228c0b3176a2564e740684fa6a3950bb7dc2e5f7272f2f10d92e08cfb0946a9b0c0348dce1cd89a564a99770590c96449b336d40602d3aa8609f0108dc04f78ea3eb833092f5fe1a103113aa3c42d8f8ca2474d10a1ba3490add3b70b573d626a682a825c72812fbb15fa44384ac4f3ddcfb97f0114adcf54dfc7334de4b41c9235578a0ea5b113e2dbd44fa572abd24df4ea1c9774d1e8a8be96fc9b4efd9a9b6b65d000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008083f0279b5ee6271812746493266e9cebea381d303cef0ee7fcd82c9f0805bcf9b6d133682c4a6839008ce9545679a76ddf76e366d4fbdd5890003205fa944d3a4da10a3f81bb38220e4955a3d172097737fcbe12f0bd546b078c53813fa1b4b1b2e38318e3d8dc82e0c1f6813f4fdfbe340c1c30812997aa2b180a6e72459b816cf75198e4e133d7c51b86d7c1795b5e248fd0aec5310b7caad188fd6735d28cd8382eb223f388a01d56ca4bd00926c8a13e6518dbbe3118f8eaf5d11c25baae12a59efddb88822354053e7de67d1bff76ca51b5aeb62f1d2d67074068ac77df756e98d286d7d3f3cc5e35d104c3dee82aa3bbab5e6ed6151ba3ebaa9c3c7f9606d682fa378318d94b96e415cba9835ef92b1f1aaf3ccc30a71eb7dca0a38ce6f7a0d56d8d5bd2d5fb5cd9df49571ba4ee2384692848f121f3df3e2642dc6fa62f31c4dc564e80116b62322568791a669fb46603b9b2e0d61d04e9d9c95f9de68c2c8d2ece5ebc12e858101ca2c4306859f96f7b439d3582a3e0c52d89ce3c9cb950587496b980639e2b08cc6838119abd5821a7b87034713b6d518da5158eeb57a04885602f7062990d0bd579505270652cbdaae6b5614e494e8443b956540000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a89e91f9b87996c2db419c7dc97db537b7d86dc24649751d6738ac0a023563f97ad6e715fb35430f21accb4d5603d370b218f34f5cfe1b9498bd75b2656ef3a1970d6c3fc5d3cc0a627c16652a334fb461be6aed71e7737c13076424ecef0d8168d44f92135191d7a53036dff3871f27389cf3b9226d4322f9079f9ff22dfa0658136fc850cd30d33a1470e38ef9cf58d3adae051e843787fcc3de6289701475b77b1b0e203aeea9a0a82635615134d78e076451fb8977de0c422e6455591e99c777f1925c003539b28ae6b61187c23717f7070517b92d8fc41836bcac39545cf12b87bf7160e38c80e8682e8b9f892dbe9976d1276c6cdf18a19fc07a2d9f2855a706c45a23d6ba211fa604b4a3a99a4c2f41bb9f3b13d0c02aab2e4f0848fb906d51f1b4d7d3f0ec5327b7a7fc1bbd9719aeb973c86fb066f10351a7dcbfa765b03746156d7b519243c90ffdca9549508cb613db0dc6292c80eacc2b552829063ac82a31dd5dbdb0d438fb9577436d8137374e4abcee715a143693b310570037f0ed14bbe4ce630d0c87c016ac933275868213dd9890d8c5f047ea31521a2d32b7e2109e028d0c785fa34a2710fc6081e0087ea916ad95e0cc0797088892630000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1ec8b979d31890b2458c901104aa610a3be7c05d91db8d7afed49f510c5f95adede8000437ce3e525a0322e15dfbe25df6a3a010b3764fa9086a8ed0a14a7d3ef1072c5fc6dc9eb32b1b080f9c6d97124822ff01d4519d9d5a6dd65c754e938382c7e8b2d38fb269b422d5106c50f4345873a26ce6a8d6cbd7bbf324db8818c5f652c4e9756b00e3b9016b9b22169f50a201e073ceffc1ab21c7dbf27cdd7427e8f39cd9676f7c900b7ae173484d0752c93678c8f3ff74ee6f1d30cf4c085d3db8c3394fbd9d1021bcb25a58a997bd6619dcc19cf0ed4056dace9530fb310db1aac6955af0cfbc153af7e5ca1ed9eda0064b3ea9c972e04e916503510b10f45d4b5f48a58c19a3e26d90b2101ac7f5597427a82c94a10f040636b591c7e02cab21b859985d28642ac72d1c1231fbef1d52ecbeb62f11243e76572650ded92ca842c3ae0b85a176d392b4b16dd005e12f348fce9de7d108cfae826df54e91c1504f0b54ebed188a5612d08ba9ced5b2a4c01731e0ae8988cbfc1eab70427faff01ab80d87cb729e46911ff1426a8549bb5c28cea6af3054ff4ac5b7fbf48edcd81b7fc90ae7c9e2f8ba2bdca01f66ef389431abd81e6aeb95d22444ec0d92569000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f567b9bc6e8ddf3132020558fff750af7cca4808623405eed4686253b8b0ab56e836276e4c6fefd574e37ed142928a34b301fda4c166e4bf6f3838d9f18f682e7ec725894ceae21024cc1dc1fb7f21e126772356fc51ce42fe2b77308cc67f30e7ee612e0406898b6a51664bdd74c076b7eeba8375a3c6b126d44457a1101692d48a94f4e3cd9737c366e76fb32dd4cce30152b61e561556510366adb529991cbb35a0315668f4973eaeebbefd3aeaa7baf408f260ab720b0948abe0b7ea1e37814c2ec75844a71ec92e7fb88ae95d8c247660f52e4e16c06429f7637ab929ac061546b7000ff53a58a8f09ac281f53d96cc613f14fc2fbfbc121e1e2ffba5cef0f38eaf2132293e69aafb8d8c2905ac8744b50d7870cd5bd2a30d35e40fe92bdce8484bed930fa2fa5ed96ee23b25bcc1983cf164069e9f954cc769c444070d1aad5af7315769127542406b7fe8e1ba85163195ee2a8fac7fb788bc55441bdcf1d7baa65d9423de16660bc7d23db22e1928cf078790766360991578cd337b8301bf5cc2661f22e062904aba01065d801c025b17f2a329ee63ef26ca7bf20decbab4c6fc8f38bb80a45930e5ba73bc6f16cd53cdb2ff87cf1732b431476db9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098629b68def6415c725dd66c0e924fb2e598c874ed95f0ddd022c714a494b48fb8fdbde895c6eeaac3622384a78ab49694c962748e64f2454f4d693681e86e1e37559870897173d263582cba211443ebeb0d28cd1e9f8b689c717920d367f0e1d62738156b7a9698b74a16e19b32e8eef54290c138e77aea71ddd17f444bd761381686d1bfebe855fc5a9aabb594a1348cf5e6bffcda930d70df1b158c3050a08cef2e2f8a006da4efc7b3cae1d3e2279d4a39d63626aea6ae3d699264d06f36b0a2d0707d67dc8bc3c1b5307bf828f0cd4cd4e1a59c177800b836623c1c7bfcf790891a14ad2cb76255322c40c47b546acbbf5852d1e28e50e1715020b9d30c0a48b6d640ad620898b27d90a29f99c2a41b0b7c5e94a75334228b051fd6a3b66fa776dad91e77e4ca5ffe7bb6de07cb304043d1ef697c152ec92d6ed08ba3aceacb363d743c039eac7714c8397b97dfe2cc29707a1d9247273c0d1ed359f30b3de5d6894eae949a18703b070ff7baaa92514fe0fe53067a76464f4cae526e090dc2b4ace3d1ecbd9ae1ebbb5f15c79e739b8c0f35b37c3df06647ec7b5e400064ba8103f68c741277c26cfa2192a1c0307e42aecd8dd09288e8eb5cf50d132d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7b7276eed5675e2534a87561b362171cff76590ffc77791f867b255fd5e44cdbd6f7313569db71b1512446f524bd8062b38b2e6f5e5492e3427522ce989946e4298f7ef9574bbe0ec635dc9f95eb54e10d8396fdcc1d156f9e432c0a95664ef3f0f2cccff73b0d9aaa1b428da6a8eef70c236da90f4168ad1c98cf1355c21d7f44f7a346cb769410c7da11781d85d5e57043f779cb642d8e02e080d5e1e1ca7ffa8cf7e32966efd3d7b0469c3b838d0b8642e170aaded4c2d1fa9d13044bc1bf7e91a969c5813329b10b69c4f4142429386c728819f16404330f3c8aa7dbfd1bd7353e113c2a2c7812ab214d02c82468329f618c5bba6c98a574f133a9a05c157117f7d087f62221978df6fa111bb403932880bf723042ba761a016ddbfae16b65fb7c88a1305d227e8ad3f6b577314a093c9e63e2453307dd6550f51cd57ebc043a965886055c28a84f600bc1514ca6425f8d32641e9b2f3722c0a6f50612a8c5e1dabc89761819007c807f2060599525486df50feddd156de6d792ac3febb762397db82a48c01c08771d27c41dbbba58e664f916fbafb08c4a79349227a60278b4b49757ef6dc1b88b4b8477b419d423db65c289df38c7a2a0f705df783b800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bf32fb6daceaa2440f30f78a08f0cd8f6b77db60d0249cfbf1a8d05aefcda38cb419226c53e3b8ade557c0856371ec3e8a6dc6020ed187d2936aa9ed2b93a8a4886276dd34cae1c73e9888923743f57232aa269f3ce40b94e64b6be966796adbe0b92212a1145b94e8b9f4410996750e60102107f7f5772a388539399ebc9e6e218f331638f544c29ecc941c14eb987a4f2a3c81ad9ad88f4aab167240ebb965181b2f6a0b2e3a3f55f32212ddafd444ca74126b3fb0d53bb41026bf6a2c80339cb220a8adb3fb558f8adc6ab26aaa4795b330df7c053c2774c2420f4af98a63b4fd2b365b48c80339d1cc35081ee94e3e95598ac0b8cadf804ac8c4166be3f0c6849f5c8e62b47befdaa6be23aa12b4ecd2b78f9c55a1a4265916a201ca31afe144b23da514b9654df52aca7da0e5b2e06dac35f3e3b5835a67c221400f1500253150bde4798d27300a300401fb3ed252a5de24b3b2db8f84cd6ad0b64f84630cbf33f28489473e798478417b5f54adeffff548a0cf87102512b757c4434858ce4081f4c808f8a91613ec23b015b051479c2e3960f490ae9f335776645d6096f079e55ee4524aa2c21c4b5f857143baf3bb159fdbce49a50510fe7e80afe120000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000149422f1ecb4c8f395e1e114ca9653ba460031d91ee9307bdf96ae95f3d738c91662ce07f6aad4d89f1daec6c50cf9b15954e3ae26c0586e2cb94d62d6994bff858eaf5e9104d3309dfa557afe0c0458717cf55fec595f9c222529da14ae9e38dfbf97e8c37e9a3d4628a868e2ce1cc7035f466c21868f71eb48e8314e88517f38427f558be88a88f72b6c0978aad0f168e080777e3cf1acf44a474404a7a52e54fc8ece354c10200679ac7ce543a0f007e95d82bf1787adae2c47055d36f0d5352f67c1eab16bbb9fe04f76addf4f9df3a2fadc6166ec70adb4f232d5bf7d53d8556f572991707476b9789ec7825301e80382189b4826f08a7f8d9aaa46eafda5b20bd5761705439348c5c7a241fca074e8d780eaea7d313955a007b7bcdc456e89d846dd16747953c4376ea9c0b730e2ae7fcfe19bc07f28ee0799fa0abe8926afe485fb43d0dee67d256ce3307f5e741e049bf398c8f42ac4debe3605c80eb9db443740e4bc43a37ed927487428281403f68f19dbd3bfde0d67f1565aecd5a42f4707a0fbc599edf589f3b33e352513288ebde550befcd3b07c162c0903ba2a5d8eb9f6ce861544db74b3ed2fa993e80dd5d690071aa75767ba692ed0b72d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006a8bae173f6f3d50b5dd125d9fddf7ac9e06ad9e1ee9d5738cbd3509c2c51f42f835fc9e495080e3c77b466150e2e2d551dfe484c0876a57e1bb7a9c585ff12ea968854c24722cd0d617b2aebf5278d12fc88a20254255135e881cdbdc613f2244c1fb21599c325d0ddc7ddca3c28b2948ef3c5e56bb857fc375a86b18ad333d1009c1867a2defa8e669d2c3f9900648b8a7e9761205d39bb4e672d999e08bc121d240ff3d69b593b48687bed49a9ce20c5a3fa46b844a59727b4cf8827114a73ed7c3d600d7623d95d06cd49995648e47bbe9e09abe73ae12c57ad37559f972ecacd94587d9c8ad77fb613a6db1e925ec7015f74d15238318b2ef6182a05094c89d5541831c0ae762488a7a7ecb783b30e2c6d14bf16947886ae3059fe5b4ae1131e216f801c62ac887c137f3715e2f47f8e7ac3d23e41ff05df4adbea9887ffcd5e270e1f12c355f2a0e21eda1f4fe010f046bd92cf2c1b341a1b1381433ce5c6d96e9500b9235dd087423424861ca25644103a0881d8bd6090d8bd569e23795a86ae5f22f74039f70b2a26d4968305cce709819f5cc24729483723584a4599afa1fe34f5af0828dd64b6d04a1ee1a768f406213e03e8e79d8c096d6b96d600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fe63bdf007d57d01ab595feece067f1e19d66a0b046fb624c6b9855ff398682e227045ed85d7bd9e4226b79256c7b4ad2cacfdd4936aa4c9d51117acfe5a9534911ffe1ca2f910e3773d6ca32cdf5b8500f723d2a51f7bec47a07cc3ff5297fcdc138abd3802795afd074194cfeb970a7a095ecb93a9c19d79926d07394def25e3f4026da9ff3ce62c709794d321621cd92adc4c8bc867e4e30da6ce3b918f9a9264c4c78db04f7bcc28fb61bed26a1bb08108d7a78548134424cb3c93b0966c16a1ca7620d4f3b4227eb59e12025d4d661cdfc1db890387e37c123dc01871a7b01440906dc0b2fb449bb1c0b36f5869b4bcea3616437dc82006b8db8b5368ef53b88d6e01c25b4a3d5fffe0cc5d8ec37b3951d0ca394ad3f24a9da2ea6d288329959d296efaa541b9213a91654a286b6dc3a2f7026e607e5edc3cbbc6141e7edadab4923e9ca662cbbf3bb78ae340d960b1c55dd627e06cd98679d516d4cc27f32ea9c4e43159cd75d3db8b0c0827ceb228e7d3672a87d0f9f8512e929b43b70f052e0f6e9d7d5dfe2e32046c17c0560ec1ded2d4a5a7d2769d7697634dca010aaea7b84b95a9f460ab1b7cfc50fd88373386f80d5e3417951565bc035603e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000233478efb601ac6c377822a7fe1eee9cec65fa8fc6c25217f68286aaab34964e1dd565e466b1ef79912f326edc80735c504f3908545b86232b126b988eae556299685e7ae141d950ce4094bcabb0a5c3615df605cdc1040db4e0d9497f13a0399caeb83bcba4ef7e9c4e23c4ff545dab69fd6c4e2988f8d907757661ff191b7cb9d79f4a1ef0044024ca8e4ef1e7a9009158a178532f462799898ae4cef6e4fb4712b79163768680d0685b2b972d28bea0b4991958f62e7770445da72681854349d3e332504ef9f34f0af4dc71c85a9f965bb1a0f067b91bfe62606a9389aa3670597cab7dd7588efabd4c91ac10e1896997ce16a60c286ae15f4d3dcdfd6ea9a48d6827c02b113b4389808db0c202027075357a40196a6fd3818c4d18960868a8b0eff2192e201543063df5c3c34caec6a8e2c603093e19dba0108324e29590f79c811fd0277b656237bbb64e7005e1fdbb0744050f4cd75a7fe85a4b404b2be93059e8c40f968307dca7d81cb4538398c00ea5cd2176f371bcab5cfbeb0456d34dd7c3157f03c3f29cc908aa9821fa5ef014d95c8630d3eaa7afca5c0f68b86ced578bc6aacbd9b8ab8b97d945883b9f45134e3293e85309d4a37e4eef79ae0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015ec9488a180e9d299032f62192a4dae366ceda4335880053680a103f23f99ab454b4f66b331fd20878a61a5058297e5e9812461971cf5bfec96d74db6db6b8e5e164995cd0b257ebd75b04d8ee68a61a1cbd6aa22753f1361538ecf406ff12b4115f50def7d83ef456a0d7d40df14902d80bf4ba624e27816a2bc536ecdda5346afbc9c5c51084f492c0921e72a81a97317a53e16d52ecc5a693a55fa90424ece99a25689f1be09de0445a2e9369a7cbc647edd881e2260ae3e8d37ba9631dc4befa675e8851ca7e86e0201476ea0045b3387c91a1baf5e37ad686ec23476223b8f7d03beb1569c43be2410d5dfb863522905a346ea68c8475e8f3ee2e4dc53580a08a5925a61cb71f206ccb666ee50b7ae5f4b6ae2cedd81dbe3da6d88562b079eeb89f3d7e203d56b89ad0cda81e577e57bc7c8db990e6b29b983f9583c24967284b91e4f969be38482e416115190118b5e3b7c2d06b961504d0015b6c2cac251eb9245500fb7677e317d6aa788f37f9b0140a4e049f29678285930149048e8c65602450f26804fc0e71db24ef81b48ce31741883f0760c685672836549e9778359a25ab7fbe32b40adb836fcf221d0fbdbe977071c585a34879b726b03300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c71b59396498f8a94823490c9d1ce82bfd783a733bd28b316d4c58f657d960852713ab687c9ef4466af23fcf5cfe41452bbfc0f60c1fb4ff6e8622f04ab4fe1cb8854ecd4651e2b7bd6127160608a779572d997d060c9baa6836d16dc432a451dd942a6f0b0f645bf9268a15a264a42fad8c918932313d25c3a2d0f49401b0fc726e1b38a5c7aaca336abbaef1fd9975c40226b95ba0ea0273a677d1251fdbccd2ae0c14b944da5166cd4ee53f95c1713268519492a48dd7be97cf0f974e36572ffbfd4aa382d2f6e682ccd30cae91073c56e9b3461178315574f25aee90137d1a8bfcddb3a6a0cf63619c29586aec57edf54b6762e4351568b802ced13f77bc373ff2d40420d10f0b56eb2d34284d45e714dfbe749394ee84ea15ae86e2a7c31c268ea565978192afbe0d005cc46088f9dd322f58dcd0f9e63823535c632fffaba8e0aacfb3678d321e219e26ba72b049772490e34333c5fd18ea640bcb58575ab0cf268890289ea625ec7d1eda1703997d75e8fe457298ad48b6a0fa8df1374678c2e2616f87d3e4885bd9c0f48bddca6760424e5d70705b1cc7084b6f29239d6108727f9be0739e31ea2e5d4cf8a4259808fa0b445472bca9ade009a11ca00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001316fcafdb16b5c391e409d6ebef008e62ab26d3e30e06e3eb5b9c24a9c613683cb7ef0b4aafb13f92421b60c6e3800776bf3f200e16bd38fc3441be8213debf3a5478f43173a4bbe645ffe24636cccf310db29bf8e0d217e370e3231b539a5aa88bf0935d7dcb5ae1f4f701416dcedc4935112a5c5fd0cae55779dafa94e54f5fb73fe3bff002b71e2b2ee5cc229cdc21bcb7cfe637c3a77243ecc23c8adc4b41ed7e3e2a14d9eb3b94beea3273a6906cbfc0376e82b73fd9f7d562d1e97524557a54f14e221057e819776ffc66c29caa9b66382a89c5aa4759af7a9763a22c111318062e69803a0d976b1dd7d4508c8fe5e682c3b5a223adf251da2575b1994657cb9f062154af7446a874341ebfa18f115293513f240f72693293dd2fa213ba8a22ff91cc430cf2d4b8c1e3b92c0bc2998864eb519ab8cff6a96a16f512f1d67d1356cc1a4128cb0606c575b600b6044952df981246629f4d8e711fd093f6b56425bee6e613e100456c3ea4f9230a76a4ab9c99f21350593c3a63e41f3c90cf72d2d64b48751edfd6f329c734d436601da68d50884f3bfa1abbcba59316aadf27fe57a023f2fb5c09e7f86e71b8a335dd20fd8517aad7e015a548449cbc070000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac386e98b3ecdb8289cd90308af91f957c2becd9adbe1bec02d664779d728442707e43c7e93025b35d62f02ad65f427abba3bc133cece17da61c4a9b8bae058c05b24ed6fa0a3d0a2639543413ba59cc26a3493ee4a66df5adbe224383b8bbee5b756c77cf5231be7cfcbbd203f1066648f1c69ecd761e6dd8ec334fa47f3e0bdee3c4eebc2aae8552790ce42354d99e0d45195f15cef16dd2fff6dc247336902db4cb651ba05997395bdd07a83efe3eba9a6b01994d97d53162395a47d1e9f74f9828c9be5a8e3f8bac6f7332c4b0903764848f5e04f92fed55482fd526394502d69f7b94a8dffa4748a27b0fbd07ed796ca9af7c0b0de39ee15d0a0755cdb5dde5bf77c7a2689d78cded0ca34ad1a2bf928e4eb4200fe945bc877e6bf3ca306656d19032bd410e8a25942cf7314c0e53f81100557dc433f9de236f7ce218fba321f5bc4473e197ecb6515a4f954bb129618b19f41ec79b90d4f99345dbb6003d10bf861d8f814b0375fd97a6bb7c714a926b1203d7b5358f53477cc3850bfb266101f37e825514b1f1fd1ad318592d23565f70cf6f2da3007419cd158def8473cc49f9a0664c91acce40d3a477c853e0b55c24725ad7a244f576938f70b40100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fc87e3e39f1c25d4615c37087c6df36b69413ef476fc49b28bc837a4c5f4d85fcb8dac2a6d843c037e3563ed76773e2bd73906baa6b12278fce2a2a38c5e8b84289cca24109161c662dc667f35fad03fac1a46c616a37bc90f8d5b8baf56f1d87acb6699bb92eefa678006c9fb4f510afd19d415d8a1a4ca0f1ca87e92b48afd6b9d3232da7e5d28cb93daca0e7a2327744e70a701dc27b9ebc6c322c8df3bdc839eaf2cc880c6c900f14d6ca832930847dad8f7d01dd3ae55f0e7d618d31b3a93ec7ac2b37a68794c44316e7592684fb09e1f6f2cc2b10d03bcb678932c3c96e90bdcfe945827f71b8364f8c005074e78cc40a2d72f883805fd389f0e3a986091daeb5986de13910e386d2458e713dd1ab5a6015e74a522f4395b8fb22e8ccbb3af22a07c633ae00aec4cc2ac754bd84225b84ef2af8a5226b25c37d471b635d3372427c489b7f507456d3e65b483bdd0bb7b49891820df77d1bb4b00a8855caeb5cf2975528a72319c4f559dccc1124e47ea2ab6639e0a6042d16835200b2e41ec3bb9ad2e60cab78beb1423001e240c5da9204b8994a8eba9fd8d81f6221a4fa11faf95bad8e3098982a2a42e729062da202e58a0345b531abdfc9ad4fe3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095526ff70afbd74db8ea846f88d3914a38d5b6f784db9366d103ca199671995604343bbc1b81472b85511ce5d84800ee9b587540e58a87690c7d3485c540c6311c3271355c26464d34c843036795400bb87c922e9276895b6413357bf04d54837bfe5510fba198c146207480f9a1cfab9bdeb7a10a00f82a39654477582fa85aee86ce5b5bc284e0583d2d57bd1b9157c439150745e02cc4b3bef3683881c8fde434129cee77c6fc407a03f96bcfe5d8e1e04efc7862617d738b66340c17d4e066c01b14fcce4ee6e34666ac71fca461cf00cc15ad110c9f9101c21746a0e18673586be1b3f5a2bb9afb2884389db066eaf318b193a699fc913f699cad9e2506b447889868815d05a4cf017776e10d1e7c6e7019ed4c53986b2412d6f54097c2b99fbdbaeb631896f9b0b673dff49edca98c595947819716f5c99b307bcf64d266bdd8b47ad6e42fd2ab8ac7a15515509510a7d149cdab5e50cc1ca550fcbceac06563eab9e47a01e0e5a3d6fb7397acb427dcce92044f381975f681be4814272a034a51236f05f9ce3c2b66c6201081fa745ab5e5712551cee456f46c963742de7bce81c64206af002a92285b0de107f69964b8aa95ef96bc37362ce4be04fa000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084f002277e16ecd80459fd982cb444f23781f79bbd414254515b4f672f2d0de52e831d9598ad0e4603bbe0be1668c9ba1d5ed63bc4342f1d109e2b250b992382b4ed656d8257700e4fc5700c78b3d3b116f47568e3391254a18bae365ef06089ed8702b655d02b40101830af27e8f7e6a6ce52dc43537eecaa6c251a90d253b18c34cf606fb00e5c40ac331cb0125e9b2f56e6d5fd3a2ccd9e28c9dd81aad818748bae2cb3768827cdaf234c3ab7d865f66aa277da52b2f271db78603d716dac5e70fcf72b7cf55e2751f3360917bd655dd5e76a0601a5054edf84765ec4ff386c0475863d96fa9d1dced5a2f96645efb6fc2c3e7ac6875aa759fd30e1c4f04841207edd95ecfbd5e0c03bde736facd79f62e2cf3dbcc5c8ba119c85c2e653edcece55fc5dc63b653badfc9cf69cfdf24bb867553711825f7dba7a1d42d1fdd69e74573f3560f7e88338c02dc4256ada0b72a0e5eb7f590312cb468bcdab6c392b03c056e8b0304fa88d2773928542add0d2f2f7c5a4934c67cc8c3aa1d3259d4a7ff6ff91c6e37f203d784526263f463b66bc4e2abe056474a23ca4eafc369994354a839999371d8caa962f99efd48b137a8b91e4b146155584f6658e3aa04000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009221e09be2777256b72cfcdd2b743aaa55f4c1bb74116d896fa64eebdab0f2c9f4da850662e8836eb51c297c5398bfa37aecf70531ff09f82db805a5a32500d4390b67fc8f986782535ffe5db05c0a69d31c5b6bb4dce3434f5399da873bc78899ea4a922071b53d8cc6d9e1645ae14b9f0a6e0e55b893c60f23a41e597d2b08cff2d6275981f1dbaa7b7eef9c816f8bafeca89484fb28248e093fade261abd43fac4501f6f11b1ecb2f117b82afba8881c9868a7f723228416c1f05fee63e12d12a52e3e879b405effcc7a8c9a05eee3419766a89037df00e75b3dad5f2477c52a74b902aa949ff2efacddf50aae98f76e012d7d99db0b49285f3a9081ba8667f55250fde47a8e6510d956c41c68b1df5eab14a2cc2e28fec4473c9a3a7c36c3ac145427ab3e16d457a66c5840718ec155cc2114db1b2cfa2914a5faddc44f4d7b017f45eb139c0db6d98ab834f548d0e083ddf147c09ed57c9f9d172ba07ee19fdf94d3a1838ef89ced9871793eb1b7f6470d7dc997b6c9ccabf8c44598aa9890a9a585ed864e7923c101a7cd9bcc5a1f363149c9f863617c76a4a3d8906993b4a6f708744805ee05fa75993f7080cb8155ea820f14cac6929b508bbf693a70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000076775bd5e90038dd5fc52e6ff9650cbf69c12d5871a3ae52f0391fc8f1fb000d39aa31c6557d5f63b465adba88d82abed3ee47e16b8f24ea9100ff8335f3930afa31354f556d216a9ff1fccd6e144df191cbb92a4feb9ccd3388e29f2522f486f489bcc730453ab12b94a378d751b0373ff3885eb53b43c7a66867d67875f8afe764fe0d69aaac23ef51f23a30890015883ee49cf745de15d8224fb7ac47e88158c9a54151aceeb8f60f937bc98afe15c9391f7c7abcc22b403e1a83c603901ff0ce4a3bd7232a917b85dd6dc9e1e4d4126fc33a18cbbae8e6d7eaad02a522386174aec6f7a5fb09c71eea48b3858feb6c6f3411e62ca92f2410be404ffaa9584162d9df4a0d52105b1000a241d4f230bf52100cd596624e29ba48e99603c08802e8e6060a009695c7317b0e6ade41acf59de79a9afa6c3a79ae1651a0f2ea03bc3de5a3b364190dcfd8fbfb6d13c03e14dc27dc5a160ca399039e21d7377e8deae8881a1ed913a479caeaa414f4d4f448c962bfbb2f42cc995868f52e45995de782a557d14f8a0aa7100b22f9177dd680f063cda675272c7b98405ffa93540a27a18fa407417011aea61f575fa5cd69f837085a976d9f0a741a4ad5210a9fd000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018444bb650fa3442f58f8217f90896f7ce732180e18f3b200e33b9d9d8009256f53b45f605adaea6e6eb014e32dad91bf9556fe71ffb15e04b917b1b0a950ac6cb65ef5b90909574337c532f7ca006fb0b6b7534ec9a40e91306bdbf1fda87d9b5b1bde4ee93ebdb0bf70f2672d6b5246e590bc3f686ff6471fecbe63e0f8fe228d2fde7f78b60192ebae2f774be65ceb1e6fb8ef931e6741bcea159c193914fad37b54661ccacf3b6699dfcc3bd3b1478e060d61dd57d76608387dbcf4fae6be4e296b824e27358db4dff89358484a48abea3d7e45aeee3b3ea18bca5f0ede7e3f940a21ad00d6779b78acbac1ddadb5051269eb4b8138f996fe5cbe778c1b284b34f4fd1de04bf2c25c179a16117b4322774f793805a07a55459ae0bcad95520fa9245c36fb9d2e67126ad03388792f65f0ccc39ce1036a830e69fceafbf7ce4136006b89f4245246da870d4e75c1526816baed5fcbfbb1ffd11b76d8332eb355ece242e1953f359529cb9a586c654cf1856ff43210ed5f464d76b00b7c2d349c2f267c0f3aea8ef4c8f594913ddf66f87e21ef7f7540e70df7138d0829a7e2a6c42375eaaab14c1b8d4779b9b74a336d33a485d7793a0489c3f4675330ddc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008265f41c3495c33d5e024bd158b4d1b0e0f46f64acff4976923921ac8ce38634c008c8a72283ce84373ecc9c7c2a9d5eab2da5b744384244be8a3800cbe6d598db353e81ae916882cf08e1db596c18018db1e133cd6d580bfbe0b27baf75380780bd73e44a7d2e9c4f3191e9bef1c50e8d321d1eaf02a2f1270b39ab7d4f557e3cd39f343b8614afb6bebc3399e3e447cd875e90a305483f9444100613ed0ac6f246ee531dc7495c98d79adad4f46072448e19702625b13f097e5a03b01ec9686aef6294fd5c2ccc12c2b3f492c0635289c08bed554198fb2e6c6b4e26685c485c8ba5a2578a5084d6aca75a5ef50e9011c430f0dfc9364c4479606da7753662dfda69bee48a98a6f406f999a2064333141f08844a3891de6b8aac11458b409d1086bd2a163824b36ddff471a383b02d12e304e7c62c188d14fc8418cd3a6573fddfd13a5c238bca20f503064f4c262bd13519a604f9327b57e5252da4319e63d822d9df7e44b0457bd2d62ebe543a36457bf23be8b80b93d5bc1c53564e52cadb08f72adf973e6d00b40e1676988b5f27c870d9ea3f660dd320efa17e874186b70c4dfa5299e97b99ad55614e9944ffb6064a673cfec83db4002b647743b8a9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091cafd2eb58750c02fce72cc810edc69facd6deea8accbdf1ab643bc85c38779192d4d82613d6419f23c790e2d02ebc6828e6a193bc3267db7ccbda4df2aaef64e8c3a3a2f1fdf96ff0760bfcfe840b95aea5cf2a737f77a606e323d11c7bc1a0e83f411c02ca2949b7050062cd1680c2623157e8d82782e0067841aef68bc57e941a6e271dc82a3c87f28354f0e9eb9bfb7da5b8dcc9254e782db61ce87fd7b586c7feb8e6d6c42a685bb8c947aaef0fdc6f6cd457ed5ef4d7d470e5ef61931d73ece2e7ea081debb0d156e8ec80789d053b1758bb4adaffcc876f982ea8413c244997747c676f591a58a206c60dda504f01a3edb8981fa72d4d6c368861382d94819114157dbb72a915fa1679a0be99f9de39f477ec528e2f019543e9ff20d60168531f498497b0f8300240d0df84a4a754c201054eb15fc5a0a5e6399ea366e59474e9afafa9b01fe0adce12e95c123d1f2b4b7839f0ed572ae4f81c4904da90d9b6fd93f0fba7c2f7b87e5d9f09e1659d58ff9595da6332b56d557853c50fc9412c6086aab257c652eb9309bbddc4afc53e71dc0670027010aa406c894c4468d931d4ed3ecc206119919ed2abf3470a5bab3b88d4e550950608c522a07aa000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025eab01dd2a15a5d1267b315d872080c339823b01db4f958cf01a7e3f9a6f0a011077a6083f589518396f0aec07f42c91f262bcfd39bea46990349d5ac3f5fd5620bc338dfc38e1ea91483a0fb12e34d5d2a2e3509af19bb4419b87e017cc13c74331739bbd634ea84f23aba8d2ee17d54c4cf01b9ae24619210b0a7cb23903441dc6bb0161422f98b5e93ab7be0693447e6c76bd090ba7510cf7f1f8623d21c37db2bb135fac5965c90f493ba224742859af2ff1f4682a1f0f96b0bb72368a4121c5bdf928c5ab742de6981db279b4d483110772733ca05c11b7b2b0dda008598d46370a227f7274c68dfae5bd657cce60595879d1bb9cb4c7af966f72cff8ccc922f3f223b858b3e02fa376c5aab3010811a85319551ad217b3a89632cf3343cc89bc5dc9012318492b103331aa4dff4614c9cefd7b1966e13bcf37832748895f83402bd66fb7d5daccec72dddcc3f0aa76a279fbf68f21a2e472799703ce8d94e1c093e414828adeaca9cac1be87fb4e2a3f7ac7c312fe882c02ede2fdb2dc89138c5f854d461fbe2408d35ba47b6228b4c24140edc1ca5a847d4f5940e0dc1fcb71209579a812c36e2a4d3009e5e525fe7aef438db4accf25393578b836f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000463394060c1558c16b20283c297ddbe96fa4fd079e0803186b5a91f3383ba03a12d4978359a6cad057c3cb80b7f19c95c223f1664a3028defe2a965e2aa127335a49da6576afac61733ba8ac0e6ebbea93d03ab2b3a054ab58c238e8d621fe18c9e4a8e349158235b3dded11d827800b04a3b4ab0002ea939bfab7ef86b79b3ff8f311cba2abb30476c957fdee5fceb94376d264997c94dee9a5922975ccdb614cbfc67df820e2b7aeaad4a9d238574bdcdeb90c8203938eb5e7b3f2a2db708ee4f564cd359d20c01c7b16ed3c3a7cf74c9db4f8e667b33f52224743f9d1db2e47bb9b0a839229484ee9a380c54f00b32148fdce5d17a529e824a2a3ad12d87ae54e2ab7a9086e8c5370fe05860e4f6e066ae3a93939fcc93b71287dd7168b31883af66c36afb42ef92c413c3fe4b24103e52676fe385358b3b53aa5ce98eb0f862c3ddf1a0ab5e0a36ec6374cfe637c7ef455a8d22744ff257a5520f95fa1edf1b3d603fff3c3d4970f1b1ed2fc623d5415fcf926f9b54e45f7e5a30ce554cd9158feb4750e1fac342cfbd487713ef665d4a12ac0179d7b1de9708cfa28ea9a415669d84abb16c7f53233d02e3e09cc4bde279fb02a8c45e14f667b3ff9c7400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002baed0ff2ea2aabaff9f6012ea7fa0c05baac9838c5878855add740cfffc56bf1e434b05ccc20ad96ed7fbe3477385b62744770066d303c4f81fe62369ba10a6af1271d975ddfea542861ac65aac28b092899de3ba9d7be26e7bdcf823c01e90704e8d0cf60d3faef96a46cf241c9c1d598b3739a60ac520aa5e72fa8aacb55f497ea5c3a7bf0e55a10e014a4252e66946a1b51c77b787b63dc26c912e329e76dc065cd6a8407309bdc44a28c7f07b2a0e343911eaf915b0dcb29239eef88192426d5fa3f4c70247af8aabd4a69335fae3b6b8dc95fc57a4bdefbc30ee03c46d7a649b64da302dc038abae5968b10beba7aa7482c19c43262f4fbd1e85f1bf5e51283105ae8f15d3c31e8d5588af80badf7b86a004a413c6ecaf15051a0681c7784b15473ed57349fd3c3cd09ca08701a896a2b80eafebe679a5054ef0d1b846416e22a7500831cc8be4a8518c0b6a9bada6fc17ad433e12e404f0fb9baf5261d3c79cfcafb864772d23b7313094ed5fe28c8aee489b987ba480a89b368652f528406d2169ed195700177eca8be23464c3b03df1fd4d93b9db0f40f4a1d2165a5427918daf3dec9413650b89d24a17153501aa1a5a984e9debd5c82e857fc75c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cabc264f456e3cb13bd5b1a1eb643449332b0eed52862f02dc457b27f2f5542462f6eb45879d34f28fce8c66913e7a1ef4974ac1d5783611d8cb7c25cc82b67b2d9538bf05d93cae667d0f60112fbb4b1db0f5d0e91482e71db7a9a8d44099d32790647b0b18f63167c56b26f31bddd8a5814c810af845d3bc85f75ebf1a1101c8def6f9e6526f4841770ab3648b37b3e163689bf3e22ce190ab1618fab086e2012123b85a286067231953512a957a4b5848bb958c8067f2996a49db44dd8bb0181d7832440686f9aeab12e6b358e871f510dfb690beb05ba130e1aebe96c3efef5e12ec0985b2dc4bcd003c121f2f55a2a272cabc9e662f148b1accaa1b37d27013309b2af2511d3f0748f64d7f1bd54e38c2603ed939180ca687c020d8bb286a3dffb52e0ea60439a50c879378b9f6b9d0a8b6ed5244b3c724411fc7e385d89000ad01980b5b6516c906c653cd2f0b789c3508b0873477e8afbc50e98bf381af7a14b03ea596224f35623d245a968abcd52cdbd50ad8ad22d9e1d7ecbfa430ee1df17052527d033c5085a56ac5781a3cc87e3e3811a3b06c312b7adb02c0314f06f8b6d30d8707fd64c639377abe96598079ee88deb5d5b1a38d3d86b2e0000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fbb8e3ff3092a1400335d9e1ee75499c00d92177a33f644874e78f98f1c0cd54025222fb3b3c48320d987a97211ce3f5148c440f196f3fb2b66f4851863f37d590b7ae286ff8c8217730007451404253764822c64cd707e94c203a1ee0d6ae21e66f53b4041142b0b78c932d233cc5135d6c571b43abc2c1aa249787dc03c8092608b06ebc67228b70bdc3a3e210ef213fa30ad15706b2427d46fe635ad114b27a7817b40bcb22c9f1e57f15ebba2cc19ffd810a439b3843055c6ba45106bdfa2680f9f44a95f52226de1d1d233c68037290691a74ef993137575d7c2a0604357ad3bf947fe75b25b9fda0f01870930b94188fa7b0d7b13e62a0eff994e03e3b79c685d9af7d86796c4c6fe230b68574d83c101a0384e64d1e093d1ea47ffcdcc8a5cd80fc4d37ea1508f9eaaef6a458ad1eef8414bdedf099b3bd4c3bf0e2d79ad3c41d4c906b481406636cc247dc4643fd4543732c3db7321b288a9fc41c516539e6c50eca7a3130a793dfd02d6486bded7187f811a6703c8edb91440b672b1a7a79a5ee022d9b1c1f286134976505bc9ec057e1a2fc4147915fa54d2491597ebe4db3f6b843ae9cf4b1ff5fe52269d0921160d889de328483878f1670edc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008655c49e28e04fae7b7aca801e6a1edcdbb4ea759111e77b078178646123c688503bd054cd813b45154e086fbcd5c373800fe82bd96bb6c6fbc17f2292e47c6a58e2de446c7fbdd5011e3336c31fa5752bece5f8aecf297fe9ac253fb2eff09359e8bc4bfe74c2ad0cb4b44b60ec2ed2a262f99bdf97bb0111e1b211071fbf3c046d1d5b89424d6a3cc93c5455b598e1200bc33f208e5aa5a812d4af84385a6733c8dbf7a3145d9b5f733aef4582c944a2da808fe95f14f3bf0cc81b2d82b431a100a747ce259620a2f2a1554ec302032ec106d32c84b9b88a074d4e8eb1f053a0501a73760c851cbac6ea8b5ccbc60ef4e3023d6282b80b7df6204a4016efa9aef6d890e7c608d9e55d956e446b40d06eb296a890c886abb76e8bed11a9fe550df68f4981c2c971e57b19eb85f2972c76539d74ea5f451384896e860ca9d74a6b7034b4e95b3eec28be7e87ce42aebabc5257645eb8b1f58605cf14e70f797913a4a7ffbb13cd9033bb7b6690812df747ad392637808fc20e489572a9310402a0721aef475e93f557ce59b0946c04fca5a95ffc6a312ee8e4d64ba3515dd2d95a054d82b8fc28f4f84af1bb91a910d059fec1c9681b5cbb50af4988a016a94b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001944f71cf6c38dcfa214b6da37f04d2c08b2aa3bd445ec72d7548f6d21058ab43aa93f1758eb5b705c36948aa65b3145fa2f17211c9780f6039ccb3964aa16b49b8f7d8ce584c3479280780f8a5561233624ad13f2b9d8c0a3cad787bc90598d3c7c11f932f57b176e83543ee374bcde9d97c4da691c4e313e69f4499fdeb058439daaeb491b8ce0a320dba3729f4488e406f1eceeede418aed3aa1e86f85b8ccbf47c8265816f558534e4321b6286b6d82c8464e0e72e74eeac1e7541f610afa83bfdcab3c4ec1b0d1bf3827f0684cd7dfa7cfd8475a39e954cac6d57b11821cdbaccbd84eef36633f018f8959017083b5e965438f8effb96a7afd61257c35b9cb94811ddc707469abbba3f2e2f75acdf46923bfe83e5209b80a663e8208ccaed9642fdc3923525561ac85cd83498dc319e9cb6440934e5cec8e10124e7437187a16fe30e2a680c9842b9f913c2787a6dce4d4950f8e3deb8853c7d77e2561110796f8e1dead2b4bc7730e7d179d2448da486123cb5b620a6471dfdda1683d5a1d2651c3b514b6104ab26a3442b079327fd84149970633428323fc056405f1da1e941eca046643a1afa86554af4e3c4d9a523ad713287434cbe33b7ea14a52e00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48400651939532bd9ae73fcee262971f5dd22eabb4104a15c1881033136f5c31983f0dcac8d57da5c871915d2f22db9f8a1bb95f6f729d8d32afb57abfffe4d35cec11fb73fc74e340091cdd525af9dbdb37d7b1f41200a01eaa7426a8fad0c015a11ef775d43d4ac245a8b1eb7c3e540188760bf5187cbfe8c291b30517d880776b3057cd7a7c2cf5726f36973071b72bf048889b00806d81afdd82eb64f5126dcf1947083d2ae4a08e74fa689d38fd8b7be307cf468743844121b5f3b2685f3fea0253fc0b0693fa03335d74e3878ae90b3ce981cf9170227e7d3859493b7139470c52f25c7ddcde1b655a0de1391983036413e4afacd90a1ce9504d2db86f5848202ac415c2dbc5ff68733989644236f8be5c7d904837c8dfa6ef55b9830e116110d668d4b410b6a2295e353f9c839664c737ee6e1533f7601dd62c932ad870421c1c2f14d2bcc69558f88c3b27d4d84d77c125351c96d683e2b0211ddbddab6e203d7224e7bfbd13f52cd46ecc4f5078846d9c49aa2d5233d1ce86d64aef28ca23e9743b2a6111f21e4a1405b24aa06ad5943806b7a9fed23f08473528691d890962f8b067615b9cc8eeba0d27e2ba9ade905bc454f23f89efdc31300fe1b6c712e1fa0a699ef312fcbadec763cdf319941ee1491d09f1fdda56e41f6973e9722d5b4afbf71d96b3b150db55aac61a02e78f01203faae023ff7cb8e488638d9910d4fb00f72d27927fb18b1f3abde92864bba402f738bbfa1924f9f5cfb6bbc82655f4f6ad903ed4146c50eb38d1b7660c67388dbdddb14b57a47de4c414b3a10c68cbf271142a7312d1b4478b8c8cfa9244de5a1f28017e5123fbf13c8a512d1f4019564ab09260010da9429f246017ee9bde362ac45c130a3798b2895074ee04c3607b0e50f2ff55a4f5c411ae846ec4cfd60d89da5d4c482b33826eb608e62d31d790dea25f6af1636eb940fb44490b5b33fedc0bd07baa4ed9da7a2debd9135e0fba3334007a9c47e87dfc1dd764ce0217fd0537e701975783ad0a410d0f09882775ab28369e5d8df76dc791d3ffdb38d0c05e267faa7eb068e2f669e905051d5bbf9c8581ae3494fa73c1aa102bd644fbf8313ba51aee6b0c82931a934d2550e5a8868f4da14860128b3fe7f90fb0485a907d1225be468150bc30d8446f1b57f77ac2c045d8e152d97c3d936a834a84954f0a03e1a589765274def9e40220628b383ed969d6a1ad7537d8aae9830757f7f4fac75e8981b3c4b63da9a5d52c89fe9e65ad10a1406bef159ede5768071d5b1c15f1ca5b93db51e6c44ef62f0d856b505c563cbef9c006879368dc0dcbe7f7ea35d97998dad4f5ecdf15a5352734dce6022795a4dfe48cdc508f2ab1f1488d38a571ac006e188d2bd822c524237b135565c23eb772a94d0f2543411e9957313016d4c586589a76cb435689502ce4c0c0b82202deb6ef1dd7e561bd7819d29fa79a4d42f0bf28071788370cd525435b4460a414d5a339992c90c270ca807ee9097202913c4ababf65cd81618706b223399c6592c6d7fc0232804bc5a6acab4bb624012b7e2a09692a6a65fa72174e157fa6245ccc51c8f20427e69efea9eb4330df9b0bf8b94ea33f07eee41a0392c1f82fb41f9030b8be881b62f1f3b7b0f2bec32bcaecfadd9822486dcdf722ec46ea1bc42e5cf58fe50c1650ca0ab30a717457978f56be66b7afefcd642229190bc9e2e29a04e50441dff1c5edee44fb365d9a5faa2766ed7a5ad9abe6b814bd701cde5995484755f284fb2a64983147c69a737505e9ee51b175ced873fd033360149f98aba8054b19fcd1d7f6b072c44ea7012b4ad17cbcca08bf888b4c236341ad285a13fdba66407abd2f93b4164a773d5be603646397f1c817baf1971ae58318a20685411c8ec40bd6557259f7e875780897ea4887685fd1826f455c305b6a55f057a09fb9da666f06f8472b732a4ad7ac449f69ce960744e11fcae521a327d36ce6ff643e4519e8aeba334cadec580e3564c479beb8b3b4cc7af35f1d5b100adec4c77b89e8addffed04af417a66645360d482d54dce21ca10a0032143fbb9cd9a851879fc2dcabb013dee80c9c6ed170fbb3a677f5247ed1095b59221ada1ec231ac6c121571e637cc402729a2c297d80cdcf76cb4fe71e956df2b0f3cb922d4c9917a61f6b59c0d7b37af8e4b4f6eb64b4afea621fd2d9b9c8fd41026dd50cebaf2db92a788d84111d41806a1041787dc0c77047e2a172c9e25921f57c65cc5c99457380267125fa8e4b8a1ea96ad6d03b51e15caf1cc31dfdcbb24c9d4b62762392e48c890d86f60029613a23ed70634b53a8c82b319f3675abf10805cc0cc7b3f7ea739b0f2f6926bb5ba82eeb5947e6f49a2773a2d43cf4fe4188eb2c66b96b1be479b1fb96289dea9f6557ee86e5b09f15160edd5db39461d1cda1720ed75979a1024f7ac5969da243cd3a232b1bd44230f2062dec5caa4191b2695489085df6e626fd8b73b8af46e945a5005750bd087176d76729ca791aa0dbd8107a4e579f604d17c5e3b048dae4c374c4094d0afa6ca418b31bf9c789a2181f3d573d40180f30af42f5fa5346d6331e942c5ae8b93c9e20c20c50f78820e650d33c4c44e6c1ffc261da589cce06deb7f5e14f20dea082be5499a66858f2ac8ee54d04cb608d38426fcf31fa126630471a1f623f8078a38f35853daf4761889577a81b46aebf27e9569d6fec26af9a628552ef3058b502ab37550bab4311fcdb32babb17354806ae0298f6cdcb894204ae617a2f91452d28d424c9224091c9332a7df529d65456ceb4a8406daaeb83032b51f7c4d9e8358bff614dc61162665d3d2170e703433b437d9faec8e90edd621c264d04027cf485cc43eb073704010faf126178842aecc008eae3973cf6bcc84cf85519af6c53d9b56298eeaba990ad1eb0dab1bafad01e08b2b88e925e1c5b2abd498898b68b4cfa4e80c29714501b43c0e65f2dc33417f0dd7ae51097bfbba8b63a841d1ca4b4f631128cb55d62fb472e0b11959fb76e7f2048c417d9757917ea3cc31aff5396c62362fdb38e21a2198e11cf487757f4cc62541f75027645e98323481d6ee16ea0d965c0b0d7d0c1bb30eaed13db956ee5b627eda391d6479a6f0bdff62d9436bd7fec667e4aa1847b2487bb97241c0d9a3e9311101b265ba8cd9f8dc9f39417fd653c612c1f00ea9d7ed8a9fc723e66053f5926f1184b0edeb77d356afc7984492d6ce3ba5e6192f33a034dda2a424bb87cd33b8bb4f2b80704e8ba98e9a200ee30b698bc1e60da01c66907fa0dcb2c73e60f36c212c64beb26bda4ca380cf902b9695a587df0e01f27b75cc9fff3f929ca7972d4d83f9f28d57db15e3e5f4688692b21b05722478053e23d05a1d3b8f471d4d9b378cf35873f3f09fee32ed1b7159973fe678004aabba02a6cb8179224ea5436ee4af1b0e4a28376752e1d916f4b6f730e0f41ff14991dabcf6268e958613fb024515a5dd0a18106373bf480a11babedcd22a1b8226ad67fb4cbd44b70220078f242a6c69f4481f5d785196a403a3a9be03bb19f1ec94788bdc081a7c9e9468da2c4deef5c0b83927c5abd0860cf32947b5a221b88f5b4da4d4f3f1aca1f0259ef8b647062620334a50422d75e2d0ca0a5de50a90edc94afee2dc055df8170d48db8f28f3563f5341701a0446ec40c829902924a5f58fa6b1b4b8813dcb54e3c9f9e400b3596ab2053d575ae6ff7a2ae9ba882a73fcdee35da45db34da320ab83cf81dc14ead9d1239ab2bbb73efe6b52106c21dd2b6d7ac8269c6755feeb1d23daf22c8abc036493032cb9eeb2f4ea5870cf2a4e4577f41fab4e2318f5cb262ebaffde1ab89d644a6a0039f3874b909d961b19b788565d1d810b67db4e1a2ffa4c0e05ff8344ea5e14c83f3ecfe344b2c99d2cb727d852e488c8942143a6c24192489079deb93201edb26c04835e6762b4c825ac9b0a5738e26ce17b9eee7bcd8cd9952ee803c708ce840b4eb6ba6b978dfe13454897264075bbeebcda0299280767e02121b1c3135ec61e8d0f2ddc0ab598044e08d32fbc598b14cc41e713510d2d6c6a6a2e75cb0e15a3d49d24d7aa39b11ed2b755aae635b28a2764779735c798c0faa8f2f921bca30edbc6fb9f0527fa2467f1bc8689fb40ac544096f829cfeb3725a5ef0fa634d284537e9afffbb1d926614e9867596b622191b15ec4144a39d5c72ab44eb658f56a9ba390f5d6f69e2aeca87b97e054fc7da9de631defb1c7e1c2e557a3572271f56c3768d525e7452ba0ea59f11b0c739783592f76cd02f30113380555da064d5d22cc42e129537a2dc784840842929e613966c041770cbaa46b3b636844685e796c45ff58e79f0921934cb239e3da2f5af96046e79a13a76936fb8c083fcc48a575bac23c98b28b0cec1898f01646bf8c0946b4d5066835d25373d09bbb59a14ca331e5782185bf132cf3c5fa5b03e4b8a761ed69c3696e48af2d320682c6240cfafcbb4382205709b718623120e25678ca3ea02343737271fb066f0b170169c3b2c50cfc356151146a67db6534f4967f25af68f2ed0ff9ca393dd65c6536db056923d9434db6872eeaddf871dfa230ed4ed2c965e469367484e4c1a54a26229d74bbeb05d9651c05c73043e73848889ea125b3445705899f2d09a05292aeca690aade6f0fc898e1d9c72fc7fbd017ec42fcc4b1757ca8cce0bba65dbf410209db1ed1af843c3d42e0dd4816fce2e541f55e1d8cf0d36438ac5684cdd84966ed5f74d9b1f279fcc1081d9b6f844e4d0303d6dd8efb35f35f0ee2a3b7bb90bb370c8f5a5f664eed806353b52c99ea0a95bd21a9fa0f4165aecf5f576643a9a59df304391cba0109428767e15b9b3366c6cdd9f74caeb3003438d57a62974a0c3800d188f5bbc72d705f16e34232e0ffb00c8b03d0f15f3605639f6f99f6b9412b5506a4da13fdb6630102132a2082d032fad8ab27b3971df595e48909a78ca45fd38cb24a034006b1857ba55ce6d2d2c34c46cffb8af64f4d7f63321975a8b86736147bafe2ef4c92ddfed64a5824b38986c81327843e0cbd612d48b230adee3d3b13c07f686ed1e1383836602e0d57deaddc0659bd6f17c01e4af8957368993392be5101b3d2f6e0216e121d2d5ba27960c53e967756f0094daf885595c6b57abbcf772bcaca9dd22c14d77f48dc38bb6fd546daf06cb9fe20b8be2f50f462e6b1986d98ba5c44e00862335c97512b0583b0fd8d5cd0dd506793c4ae3edfcd9e86efab1c770400a26717a13ad0bd7194a719e53a084ef5f41711b21159e1de6a8b39060a7667cf526d65b57704bda188d08772c01f0ae57e914e6c4547c92c469f5342e389efb38038fb8ae80605ce1fd2f175bb9659ed1c6512b015a70e2ddeae436e6e360f362185fd12cb603767c9abb2a6fed1cf3e2b5e02eb971b11acd49bab5b53c290573085f29b61242859c0dbf2793e739e0517296f786933f177912ff4db41c9aa525047ecfd896e966f67d905569f0615162cf35b1a027771891de79e665b1ffbab2082575c463f216d23a804a1170c47d239184a6d1ea7b28b892fd0e6a3470e09e22e6dc845f494ce5c510239fe052d62db9920e904c97fc23e84d110a008d74c3094e240ecf0dc311c61e11c8c6597af09891d5035d7a2fa0f6929ced313de3ee14fc15187f8661870fa0d0c957d93db16a2c17677232ebfdd4ac26949d62943d173991ef7fab9075c1587d7703f040e90708649c00cdd796bce2d7bfc5c8d3b5003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000032118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000320d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000320a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000320b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000003229a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000032141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000003225e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000003212978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000322daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000032189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000321159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000003205ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000003205c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000003214d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000003203db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000322ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000321213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000321ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000003214fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000322b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000032305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000032280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000032223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000003217a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000003208858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000322618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000320f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000320e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000032172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000320b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000003205bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000032137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000322e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000322297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000322608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000003218373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000320422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000032204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000320afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000321998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000003228d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000321da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000003221d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000320ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000320e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000032107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000322f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000003209726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000003224f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000003203c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000321fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000032205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000003225110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000032283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000003221cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000032094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000320c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000321f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000322421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000321fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000321bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000032304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe500000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000008100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810400008100000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006294a79cd12ab145d3e11eb0ba26da12f514f95ecf27294bf8fa7c38d563237f4a6a4d92fcf86fa43a6efea763eabcc0f5162d1f1483705873575a51f0d17fe73f2e9a9943baade8f20a204ab3daf7ba6e766953dfc8e1071662b04d4bbf796d17d55af7ce52cece74d10a68d75a30669f3fa3ff63b101dbbc7f0974e596e26eb65f895ebb19a0b1ca76f2bc227f664e6d417a4eac96a87e435676f58c611203c961ff7e9426598569585cf6a7df3624ec5e4c59e89fc787aa1cca95e1850184bd2d9c9e9f98de5b1d5fead302f3c22a2c1cd9b0e1529bf0ba52590089e45f537d4960467829218721d4c635a94f55afb296eb84be4134a8838b4f13ab5b40f534b3a318bbbf8c5ae373ed0b6636e45c228aafd285d0af8b76c83c1ec178efcb6958e503b4bbd4dd9a0b976908d324e29b58185140bec4dc195de8ef4a2f0431c7e14a54660a3a00e6c359e4fb8f442e14034258b77aef362e52b3ff3ada3269e12409d81460bc4aac90bf7fc53a96922e14a2ea4ebb5b735c859a57f0345385ae940cb17fa7cff3c294e873b1d74903b023047e1f3de2de0cd1beecab5dfe15f04ff7e1131d88fc456dd4ade107b9db3aeac9eb2f9d2ed824f53cbd0e15c5a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a882e49a39cfbf0c64db001e0897a0876c265e3d92e53a2288c6bb012375c33ce29a2fe06698415757b62018de79a24580b1dfaf5800a044c682f1643eeb53fceecf109e4b1c00c0c0db92c24d4e1c3dec318fd0a42c0bdc899641cd998d9057a9820dacff188a97636c183e7709d9f462834f28a296d47186daf3038e0f5d5a229534eb3a8db5d8251d3350cca0ae01417534fee2c2e806d34452b07f5e306265d954128376e21c6cc88054d6c2ee09c6791df63ebaf82e51ea9c25cf2bbe4df5bb7cd1a49cebeb8c78054cf95415d017df6ebcf310a694e939ec1b241a432f5eaa7275ed8ad94115d8a4855823c86b5c0bb8cd42821fa0238843b3fc49e62caf213525223f37a4c979658ba63473d4509939454f26186d21249e3243ba979de0da7a5fb03f648bc747ac8db55ddd7bc2a582fdf44c26f3ed2e7b0dffd75a95d38dcba9f89c1547b2733229b4759bc78ea1946b433eb694bc58fc4e378bc6e17647ba1159e971f8617e279e3eae7eda5e091b598d702de95587e105631b48a9cf982243c60a50d631fc3b93bf88e24157e0c4cd01ed5c0780033b694de82d5b9cac42afec1e353f442fcae67d3a0e87f08e4ae72dff075d7a3e73052eddcfc000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005baf7934576cbdd277be042d841c622df8b2ca611537aa541e2d454207fc16d997e5ef94ef20bdb5b6e6288523674d7df8e8b2eaf4d471b4b225dc4afb86018e22f492eb510dcd45bec85d2f9eb254bbe305bcb7f2f402363300962f2433712081a9eadb897772f444eb0a60676aa02f161608eaeb2847ec509ddf728c6742208345693f8cd4cba6b731654dc18766801255dbfaeb1de3ebaf730f2744ae7d6a7be7a319c32478cbbe4255c4b4af163ee0bd1af3cf1ba9893e9081dc767eb11ed4ec6d00b0c4f271d1bb13977031baf82723ff738d80f3d5df96340059d9244d34eef02f8df0a1496985ef597084d704f7fb7e3845c311bc103a34f39436a52f8e69c28695197d115a7beff2e9968981f57ae2a6c1787f495d248a4b349c466b273f4e0295b054c99d501a5f38bb6697144f135313460b1b823fee6094a93dfc3f71aab4c8562457d8fd6bc7351b89183bffc12b224bd5cc1f653f6fd41efcec34b4579851ee5d97cd6b27cbb24adb0f4dcc2e1e75314a44dc3bf3cfb51478219d4689605d346fd7a46f5345f24992f4994d2e2aa9799c50aa13a694d7f492d30e32186e038a9180e44931c3782684a2dc56a88c82d9196d5e81498f3530e8200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002946cab46bd08c9f0795a2cb16fbe2ba9865f15b520c5bcd6fece622b7839270124b88f36a5b8a3286821776745246b597e95c20cedf94ad37002a40274c1c80439cac4998074178d78b4b818c7d3518fcdf7c6ec14d3c584b8f6182f5913f4994a6dc4cd48cc283c8eceff29d3eb16952a4a95161aa65f9331fbe0e2aa437e22c2d5672f2822a83b2bde3dbfa28de2de0d647edf081b802bef42a3682931c09be2ce53022bd669895da55be11bebd405a737c025a61c7bdf857f2919593da24d5e0e23b445c2728dad62209141ed763e5ce38a0bbaaf6f3b90986967f6b57fd6396897b570ffdb00e2e0c0622ce219930a1fdd7ec0efcc2f32a1b5cbd084bf59ad77a52ab6b54729a86b221725c40d4f7c951a95573010e85169d30adcb55463019c78665b71f5dac733946521da030aa923963f57c0c2709371992dd03573f7e5f15b30295c0527ec8c22ca6e35e95d0efdeaa6370b5b9da9e948f665ee31da6e73338d5a266c43e69f55f694213fe833c904bdfe13b2f30139012369ca9fa3d2ab9e365b142f5bf8e11c4ec0ad06f27db35776895a846bb1f698f2133732905ba14c6bc6642444197f9633aeb9f4011845339d7cf8c6cdff12ab3691bd94a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab3ac208883ad9107c219d2789efc858bfc4030d58ddcaa75180c36e6e1e7386b8c14596ea77312c7ae890d629b332f79cb258783b346d07ffd2eeb9b6a9f386b3c3e89fc0adaefd39f8ac44ce34c15a25f5a1306b8e7bf582030407678c2531687b2e486e91cb78dcbfc2cfee04e25fd48a27e164240326824f80c16d79843f3d43d8acebf77fae317f7007c33e1ca08433c804ad0a1e4582c874e9ebe16e15951a7b2800c8c0bcec9f2e5912d72e7ddd1ce6753b9de4647699fea58b815efa7afa404787833c81f53a7f4f38e5fb25457b27861a6fb1e02b68f97cf4b74ef14f1fc6f1b61ef01bcc88c65716ed6f9f9fd3e6453cbadfc05f5753495478af0131ea6df3d072c42d33bbc58e5371e4b2f1d091d5dd986018dba6e7e3f742578308f523a8ea512d4cbac459638f55a6ce3632e583bcc3b277e4654a349df0cddd74a14e2b467da8548e9259a1db1471c05f520e66d67f7383a0141bd91e342defb1ffa06f835e89ef989b0b6f2e569558d7e5e05538c25483ca4d9b20c09b7b229c8a55763e7242388de476aa29d6bbe79983775758f796b0a98ea29f88845a34fd018ccd62594cf34e53e608524fd0269358acb661e6a08c098d8d39d15cc96a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096fe4bda2c8de27bdb7b5717fd1fc06a05900440527e246bf21b311bfe0ad0da903356ae6f17b0dc953c9041839bc73b4418180e79820542fb319a03584735d8698e1acffd023aea113fc899b0861d8a1531e654dd82963626dad174954bdc99ed4b5ea8cc15945f26d9f80ca9b755beae741eec82d9f465d7329822f916c585c8501dffda876db2d1be37758f4609c70dcf8338d32cf06a27a16060f1959619fb95b9c0fdcd2e1379418e27fa61e4da320a4a81777a2aa00772ed808f9a94596f1dab37178c4892eb65c753c875be6170ebe1897a724ced883f55b2cf14634a8a781579bdd59f6372694df771874907f1d799439c86af7421326872ea0df2efec4cf7049c895f85d2eaacc41954d9e5f0f9252ab6a367bdd7ba346b1e7c7049848027b166002b9407b40d03d706daf86264c3755b9d868636676d3cf9a5748981fd030d0783011d45dd73b6268c5daa5385ab79f2d007eb921bd43c13adeb9ff4803a6f9dc35b1f77a88856a9c5b620a39995a1c0df72af58ca14a21635937ef56e09faa274b5669e8eb6e242bfa568bbe4e45f3577a58b31bfd5600644f851b224c45fa44f7d5f53d3b3855415e99497e64738c745bccf5860a6a9893882440000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3a059620ea7a6af0a3961ac24c5aa1d4d291641ba8e29ade2ab279316ebeeed933952d3586c8383d0eb7e6eb98b4c7b436767c995b5ba94d45ca8ba6912edc1b7f1c77fec02360251d0f1c6ab896e9e03b56578423c8945ec74647d4f9db86bd1643f6b2a1f34de2fd40a92d69e1df35d231aa2299dcc456adf71c48520c86d3db49d6b0ecb59602deb4ac6eb6efc6f0e7aac3d73913e9c5908869593edefa67df1194bf0f4b3279520be7d43bed5d87a9571467dacfe44aa8f67a9068e2eecbf575b3156512f6177de69d755a0c358abbda393ece10aaa9bf0895de502f0ec7c90a3c7c2fd03310c48d69455b91de9bee82d34da8e174bda5b22d2f4e232e3309cbdbf70c40e170b100773616017df14f0c103d1cf380edd8ef74cfc6470bfc7f551b5626eada0ef22b354e31608e54711910dc3dae3f0669cf64806b18cdf07db5e7df6314e8366b72193312f1312bc1f2f3ccf676b4c083b5a9fcb7926e05a421340d5b72d4f47805a62a8d2716a9bc24a1598217c086d02bc475ccf4f14bd6cbc568b0b7a11cdea08308fce74c38fadcbc3e0aaa438860658c996f114a56bea67cb6908b1c9b4113e94cf34f0ac4a2adb368537d4f824b2134579af31290000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8bc2aaf79c7f28794542db8dcb6244e819a22e22539e72ca6fc84a4d986d5ddcaf6bcbdbaa8d668418b1fe4f6df3996f3b241ce577b16c05d1e9263047189dea4b9d745304c1e295ca92f62297deb6fc6271a79c1f6c76b6a2a75a0132cc5fe4b596bf5b79ecd946097ca920d29bab6e2b8f548164ee26d89a36d9237017a3ae9a38bffbe48d681f52129b081451b06be77d545c3ee6d547059fd60b53ea7194c69373d6d4a344d9388110acc1cc2577d309f47fe8ca2054bb52c517f4a358d3fd2abeb8eae34d49709a987811a9438cbd892e4bcb89203907dad37cd746cf2730ca3208be096060286fe42d36a6cb261ca3c7e08fdc3b23186f88299dd6655a49d5b1af32fd2c6dcc2bf1a014e5479357bf4a2da29e458b13ec4d2de6e036d45fc2cce803dce375c4faf67d0b9801988d0594ead4d26cac35486f85611d64257f4defd986d549ec3b4310bb6628769d9c0c77171b04e9ce54992109444dc36a26b473d636256285900ff7ff06a3d5809ad71e47ec178066776cd968a91420347e5780cb500fa04fd864c422ceeddc5378778eb5c92249032a0feca65e8e06162a17908fbbcc604eafb303bf5e0289f62832a30ca135b92e2abb039208d209600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b73f3a61319128ef2c288135ffaa5ed4c35fc3754d34a994f5e6c75e1fe99cfe2cbaccd51941287e646f351c7da808d0b59cac535303bb7c5164d235d2a94c37d376fcbfb1d63ce219e56fd603aa573f8ac024194d877f4a409f47c47a898249dc43c2a670414de3c7299a3463fd3039279a7c81746376359f78b73982a1e599874baa8e3d95044efc5c7c06c5a1861ae633ba1c15e4130d95ccdab01c233297f2766fae520c27313f9c3eb3ec8afcca6109c7c8448ec7f106ffa4f3b2321dc1962bc07129d6a173142067698bf98b0c584d2d355d6f448fdd7d3fd48ead2a6c19235b7a15a790ee0f63f2b6ef0d569b4e5c13a3415f6679f6e5da6e8f2834529d21e37c116e3761279af9f06181f3bc9cc41e8b98c6526cc80e4610a4cc7405e157b32c88b414474330dd5560a233be793b26fc046b39ea0ff8a27d31c3be0dabf09810a4ef4fc8a12b43608e313d5d2919ad38149a014e639073890c6d8cccc7bed3661bf8ab5c2bfd266a17e6ca0ccf0fc8c6930dc042a0398ac549447da4b363b5cfb839235d1389667e8056fc529f0f80346bd2c1c7fee16d035e47ed7707bac9331b8a0b9c72bce37f95daade0fd4f5feb6478e2cd27142ba34878a690000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000963a54a875a049ef99365785dc6a0c7a8a0dd2f3df58eb9f5ccea982493164a22a24141af3d600cbaf2c3f3a76fa4090db89acfecd72994302c83b2d404b422e69e3d0dbea33024c3c91c959ad6acc21b2672617310eafb394c94086ede77995a18241d760bd908bccca04432cacf5668f66b645630972b11c89564a66d07085a89cf551231248aee84cbb106a81b8b7252118fdcfbf338f4b78c6ea6a0480d812b52a970a1f836c2c769878afc67e18b60e5d783d8a35bd15d5d48cfba374c4ce370a79466627fd0b353efb01033371285d8ed1884631a9629816913facb13aa738ac536d2056ad021e11b10b80e942e2df950a05316a79479116d6662b6a18473c962ab395531869e4a17cdb078b8d9ceec203b823ef2f690053b6934ad06eda4c9d982036ddb38a4869655848dd2f26067fe6278b99c853255072c9676ffd12a053fc877857917d11787232f12172747576e6931f3e1c1eda9dca08d7907742e8758e5b8bf3006ebcd03810ccd5a49c46bb7b55e02696c96cc23bdf018d70a63b8d17245badbc236eb8d01844a57fb857312545be53e6febcfc6e7fadc6caa45e41c3239e52e01dc2068b941886475498ca8cdea4bb15524939f9d85147e00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3e57b30298f31a28240df96e219e0363d75a6886479a799de3db105d0471b048cda4fa5dc133558db7d3db52f85e142d59be9c3c6f2b20df91502736e26009d0112ab578cd86cbab4d85ae44be536044e38354266230ab394052834d62fe0e9508f3bf47987b61ffff6fc262fd733abb7bd723259dc760c796109e738dd8a745dbc64e2e02ad8278982032032e4511f39da55774b974aaf588bccfe7f4c188519b9e4d136470eb6992db77f8665bccfbe20a45c25dfee686dfb7788aa4944948c648f6493006ae763c9397579b0be0815033a898343fb626bf231470138ac71337903f6e0c2ea690a24e3883704570c0f620ee60c86c4d3e7f87ad0d17cb058b3bc4bb76b0bb69a892d90448d7f126bd1e25c7952eb2a45b5a879635bdab6f95212c47880a73a14c9d63e7c782ca33977c460211f1209cd65e8347bad3533122775847034b79084a699c7c1f2a1b1daad34a2d7a14f722446409824fcda2142a24b3b8fec66ae0b1599d41f674df470f5ac99c13015c08f85b9c4a512f525781dd71fcede033b2282da24dd9e558e73743ff09dbb59f43217691e204341de65adeb11f158aa7057274b93fd6a462c2bb2c15bf88ff8f6ea03eee5b09f7c687f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014f1d1b5d42fa8d8922893b7a4e75c92955f63941137271277594f2ef001f279d02e0ca6bb3b7c5f5599df7041fefb2b8ae3ace977c5a5e70c2b42e42ddfdceae118d662446fed30e85e254fbdab6bf9967ccf81f5411e322f54b948efd809fc7bb53115f6531c74ed03daaa0d32a540ca56f4aefa49ef58b6f81ac1ff8d812dff50c277488e545f6ba17f70235ec62a6226556bda836de15411ef8c560cbd3080a092425a2b913c9b51c6bc1f65023d22ddcc9292647d0a0e3be803856cb9c75d1d2521b5bd0e973290fdb34be6e861b1493010c54490218a2914510527995bbb1e5e7d819057b5ea67b66115aef39a0a2e2b95578ddd51f87b9b933deec27544a9837d20a0df878aa57798c01331fd776345199183f4211fa69535c5bd468aad677923f91161ea3e3ee648bced6cab8e8d715910eb87a542d248f1abe8d35edf2ab02fced8c0d0634cac8df45236c080c3ecd72246ba2afab12a49968915fe97e1bea0b0f60c10dbc063b3602b800fe9a266b087fe42dd29f9899ca64f8d9cb061d15be792747fad004b00883578defa666247f2dce2c932dde2a1011f51c4609a88e9b8fd4900b60c198422bab1a5f78e2774d5ee6832db15c14f781adf0900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e0c20707999762dc0b2b10128fa35fb1a3a894be7cfa46e1b3911d42b89c378a0799cc5e0c398262571dc255c06cc31ae60447a102ee952adfc40583bfa97cc113a31807d0b96042e7c06658b85021575e42aabaae7d3b44cd6b1f864ba9cd2fe595485269df05b1d618db80ab96f7b79b0dd8f55cabffa37ac43c8be84be8edbbc7be0fe00d15334e9381660b93dfc72de44ae91d6b3b75a9de505d0d4bb9be7746c2006640012c5892f3d8ba0d1d9c95409a7342fdb2c5e7b40f4b0e81e10361a84104fa1c4b9d4feb09b4b091993e46a37a835de706331a78a4b43fdec981b3ed2f932a86f08e41029ab05d1d414570a3134afb82f7aeaa93f395125b23f139cdca3b2fe193ba058736c9e2918a52e2d695fa94310e289df829e1c89bf20b60281cb6f641d0cb3d48a9d57261ecadff2d3e42d090b786a2b53282f4da19b86eea2ca958110b4b2d96d6ce71c150871497800f98de7682b4a43c002f9fcc59ed8f86f772525d080c863fbee19821cfe4e23418af4b3621861120e3d763b682c67bcdde27cf453eba0a1b19f970aa78f7480a9a8871aa85804d19c6a789eda8f941758ca52936447b2d484bcf9e8cbb17997965f1e129f912e8a0c3aee958f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a88c22b35341145f09c5a2efd333494ff6258eade3f423b51fcf7c196a903f1b802a236a90d2f607cba284fce0704d557a6ba41d6bc5bd0b2108ac9e4ccd068ac0f4d058d7a186654490c066b8ac7500f48f37d3e9dd69c0bf47121a8ad238ff4e20e09c56d325673f98068368731cf755c01d5568be9cfceeb31d6d3a2e0d401a80f6966d3ea46feae202e1c6078c97b90cf25673f0e194f530d032afe518496deca57c60d136d8027f692becf4765b18afaf39d652f466c1d0a1f11eeb2354fecadad1ae797adc2e58e22de0248fb54ed200e4c4398589882f003d0d2eaa8472e9980afae889d5575c867e3b19fd713cabb1df7713376ac548756362f58cd80eec12d466ad4baf5094dea310013e1be0b45129b33b3d98e954afbd2bfa4aa876f7b77d30c1ffbdfb207db77d69a09e2adaa28057030cac923b04383e043b88322abe95d8abbb54858dc7ef7f268ee8b7175750b7d71ac6057c3999150f0aa97fd89785ff21f8d3c5cb19d5dd37a5c51907eb91887e1d485df9c355c47b7c0949f67e702d5b96f4f03a8bb33a7123f6cbad21b0a42bf5ec66ee403db88280105acc26ffa2f1ad0c8a322536864c9224861b7252234c2a2262236b06e157613b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab3339ee55cc5ba2e7f067c298ed07cf9f40e61aae9ec58d88879b481ddf0ea83f862b0369e9b11cb9dee839600bc31cb3c727cb8dac77b6e24732307874db0ed39186be476215897fdc0f5fd64c288d1468a87abdd08639cf315d90646407b2cff0bf83c958837dffec5f504a2f506c7fefecfa3ea69717ebb7b5617a843ba4635c2d39da646dca9710e29d39af90f03fe8d4c217ce991ce55d60baaf40d648340caa0b2245c5712e71ed94628c55c877d516cb24fb5059704ee9bb7c1b8c3b1b0a326f21be3d2025a31af265732fbb7103bb60b238a185fc5aacc8225ed1386c4833dc1f52679c451a6723e44f1292b00b214ce289a60892f2b7e502d7396e62163def8dd283e53ebeb2b6895cb7eb43b2ae7440b7e26f838d0b24c96fb7921c46b64044c20805b077a5e31f8669b421c80642fabc957683d22a7d21f1c334590e6c064cd9a910b09f9b9f83145491eb9a0ffafe4a6c7c30b73fa68d705c060906998adbd7f771442ce1ff0fbf611f36e74d8595ded72efa4ff0802a1d3e1b3cf1313cb4448632f326cca3fd2f47fcfe7a05864a2a18c5a298782a5b4fc2364e44139c253f7708e084a57b7b3e4ecabfc8734db872810253bd1782012239110000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000241edee015eb61ab34a9e98eae8d8f96c2788607c2677e49075e80490cdbf595ce52f132689d3d869ec45e5445473c908a493af66ce65692f67dd8e76b68bf09e79ac3eb34247ee40ec8a935235422c3561b7e346a974bef8e2f531df5d567ff61f5e416cd5ebb13b1f28a92b42d88c453d2ada5ca22e810af22f02fa114b9ba21c37121bee6d49fe189626521bf19c5a5abf97888247720b6ff4507420e18f46d0f9d10349abe3e61c7fd231cfcb5257a95e526e73fb24d931b43d0746afe5fccf789ce7d1927c41b68a2d92b424028cc28a7d9f97947efc2ee56d469d221337c220fce674aa0d5f15489526f49aca7addc1ccca5380f8b9f43bb14399f99240abf29fd50e905d1e4e164b93df82f0fdb2355cd53e81795db27593f0b2ac29821557228eea1ba77b3a517060b09ec72b8da40a6550bc73350e7f6b1c8cef684b844e12c80439952ad3701413cd034bcf08df082bb47db57a9dbc6c034223890b0dbc359a9dc3b4834bc7213e338ddd3925a178d29dff9434313143a229c44a90afa004dc7684750ccb8f4437d5850c7a2ba5a6e6ed27f240cbb3b23ce45e0cd09cb3147a508920e7f90de104ed418478fa886dc63be204f4bda4fd250f2595c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac7fe0a81d1bd78b6bea85d31d3b957a5577ea468db7e70652c86cd6abda6992911d895ed663ba6a70e04481bd7879512c3acfafc150d4771ec0189cb553c0fd7576eae596b7e4d0c8ddaee5d2638dd65b0255976dfbb84a3fb48864256adb06ac199bebd3c8107280cb0d63b583f6f5f75365184dbcb8d6cbb8a1b7aa4b04dbb93b1105d3eff159d7b6cc5f3f4ceb37b9a6ae94efde4ddcfe1d4c45754f2865fd3d648fcabc224da056894968d5e0b8ea3f20ac8bb8fe4aa37c3377faf565a3f3b2fbec671192f296bea7baea10b89154be1a0d2aca4f3ef4a09be59538b718bf39b645c0069f29b34df734a8cc184e8b37529049550214dd06edc427bd653ae89bcb1e9c6b373669309d5a56a41eb58b74933060c829dfae5077cbed24491e84c1158ed9af49df30d5e371470511df0ea22df360b6e1c33d2a0c51492bd8400348598fccf524ade35a6502e2997a2183059b899bb426baa8ab1ef673cc196e67cc9ba548cd455e47778f0e6b7ed4f116dfa028a182b30ecfbb6df2e2dc5144fcdbf2e80f30f4303f58f4399429b5a54da9416ea85ecc3decfefd73e65122a2e04063100fda8121010b539c826d6a888a7006e59937ef2727674ca9669539060000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aba5911717af34a4ca04249244408a01ba3a04abb058b1df693ee9b46b570b8f050860e8547119e388167e5a94851f132eecd8f902fc170fee742419aa6ddad7da692f13db0813d4452124bcefd98cea5dd2ae738a52804ea942bacd8636802c09092efd400e8a08071e1f6ad7754891315cd6eab5fd86f2f07754fdeadf4670002d6aea7803afce26b5731b3d23474c1077ac4595eac1b7559e40a8a94911b352091eb803d737a61911a91488dbaa0a5c9a4f8dd80e362e5fd14680d3a877fd9a81a36bb34677577fe0e61cfc5d30ca85feb9bbacbcaffe02f077539a3de36ffa9aa2ba8f9ff4149b8592503f05838d48f1095528faf8515caf103ff093a80755999b631c74b88bd2d41db8a7a5a669f063bf9f44c663a67802386fcc40b650e653ff90c7172e61081200208e4d452347218c6690523fad8334f40477eceed908928c8dd7e7806e1b02793d557a5aea991b38ece10eae16ffe18423282d42d75147bb37c7effb8365391807cbfdc261fb50cfd9805e077fdb264644796c26d5dd6e0c15645cdda0746c5f98036ab0afa97912dbcfeb9dd893ad08eaf10b7e9f071030a38112b0b0e9bd3dc48c44e20cc0377772b9455638c31ac13c42dca5c10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa981f78f4de18d67f0a08af17f5da9c2c70c3c616157042ee716e34a50ba23647f50cbd1cf9d18d3a40e709fd93e6e838d6cd8e59dba1d23b428e1729dbfc7e7a1dc695f7aae5ac0ed540024e83bf0311640cefc46c1fcea0faac807a8bff76531417f6fb2576bda056f075483501fbbf3b642593efe34c306dfaa7273dbd3e04d1b0951a1e2e067ef1c188b6d9084156a1990722530a48a7efa3604f247c18959001065c3f481fceca8517b1e1ec0406b0cb72b3d55b7ef1d22bd19030bf13f574bec33c50cb5f3a8a9e0d0bf6973697724c0796af1f2512298be5fd2496c89c3dfc28b5edd0a054a466b6b56a4a63d18cb3637500eed8995eb4ff451f5f61889b194f2e87a1996b4b4b30a007bd68f4ff1c61be6c863f53e6b76d87be627a95d8e1b8f71e3dc07df7fe4928a49ad9d1b2a3f7fdfac113ead26a25fab1cee9a2c2601ac87b02101250f53257b77a115983fe7461438f0939c7a2aaf7940f15e5d3fd54b65e9dffd67633d2408d80afbfad6e2cb0a38a895140d74a381b5afc6b8d51fd3584c6a5172525482d30b091c8ba4fed63fea8a5208b2246646ec09037a18df364bcebf8247a7bad106bfc240e14eb3d7a4d8e323a1fff253f278de800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ff18a742571f8df55235b0c4dc90fec1ef258f85d3527ef08d1fce169d2b023b7cc3de6967901995b0b6bca4b0af6e0c2a2e73f1e302caed7e11c912576cc2e8b5b3735307e64ec8f24629bac2695c107866640252db48e2411de94496edf3531a102b812c37be85392057a4ab6120bd04e931482d8165d4643a759dbd0a516186832cb2a93fd65a0c5e866ed7b73ca133a597a63c40c2af55b521751e69dbe8779ada95d5c430e996abb7e867d39876bee6bd6669942b83ba77b38dc4d8d152af17ea2af694381c3f22de469d0f9f1ee743ede5ff720996e5b08dff46dec23c3fb7fd5da330a769f027f76094f675b020efb7620d17b70b4578029f759897658fb35bcc159c91e65af25c5760471d2fc85304b7f75d9c7fea898100fc9b3690acfe6dbd3bacb1458af4518b468e7a8fad9cfb8f0ea1c47f6d37f4b524ffadb81eb690d2196ceb40a0995d36494b17c4f2b377a627356df562079da6e5dd809d3bacc6b7a563c13668ac46fddcf8e8f5e688a226469b5dcaac68cc0632c6d56c2e10bcd88cd43b00e327f22f44ef9d741106d9566b6729db0ef0c75210ae0f58d88b6026c9ab06a185df332065cfc33b0b7a9eacbfed5907435273c768953e700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009536b9f973feab7a9905c0bcf6a71dbf2d49dae221702ad6fed5367b75e9599b32db9837ae336fa3fe0c753e1b54ebb7e53848e7d04e1992855d328dec2448bcd344377d92760827ac4e868cdc7b76797313d74d3b0654f23c3831fb715425824f760e9bf60d7a36843cb5f8dad8107f01f900cf605e683f391ebb946825e6a833faba34cb4221369f51c47839be2d73b1a94dd5839b306fcde1403295a1a786a22af146dd8ce2d45db02ce8ef3fb4b1de7060da0ca13b77ca4ab9d0c6a45d6c1f4e6ed2ffdd9fc01aaf8d159967e1b8ac2259d2d1f78e4e5436706d5491b4e0b275594d04aee12d4a6e4d62f5141f324a252fb0f0a51eda8a91bac4a4b26298ccf61bfedea370c60739ef082c93e6fd0be31b146dd0e22ec13bb438750b28588676994aa01468d28f5b5d060b8725cd9ef943adf270e1871fe2ed8de5c7895f6debec19eb6373970ee228aaccee7c29487bbbde5a890e85ae8b13ce28f8ff1df52db3a2af306a7fca81dcbfbb084cabf5379d0629e46114ddbb96baa5264fdd26cad93fb161ef1116f833f80a992801df381d14000cf2f94e036c95d87ffa90ee86ac2fc2e4584668420f45d949baba5d7323771bdf34ef2386c2d4d317fabd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008986cb6e4bcd7f06841a383c75350f2959fd340f8c0df640daad8107bfd7b47fca603f7b40c9aff4e83db34114e99df2c47f38e7daa2c5c5be0f20f7b05576b9b5d61db332b499df0dae981f6101f2b70bf6cc6600289195317933fe28b77809a5876a4ddaf2e8a9d11685591000d1d85b1c072761b84ab86080f9381b86abade052d811df99340b4b744e96fd07d90e35d6e3e36c71ba203f4d2e6225fa47c8d20bdcc54262491d1f29e5162ff84aacf1650e8448483d8fd3d3a0bd5700e796b9fdd425ff658483d93a0f0b8fc6358329e90fca48ddb8be558d970b26b0ae0bc92124e4bf24d832d5c0f195ee5b19e7a0e011aa8670b15df7111da09a3a3a75d544b5001dcd307a5ebc47e5d42b4082b38fee85972428077c9161f9fa600aaade7bb4b8170f7653e338e4d3a08ee94da2dfad8f21ddf83e42377eae5ec319338309d44cf38aff8df508b445cb49deeb8bbc7cc7dfe61cefae84f8a8c50a12cc6c67bb727e2d29faf8a71d4eeb1cb99be0d8faa30f03fc29ec66c5412672258ac993a7f424e3d7ae3ec95b26b81d795efb910e1116de2bf961e6d73ab528af4e81488b61d792c2483db3975fae7ba78c4b8b884b8e2d155f15498711fbd4bb7a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aec0c50eba0cc54e534121b988061516c3c61cecdbd8ab91b368072b2adc1139cca9686921070621a0e89e30004c6064380f9c604f65a10362e1dd0a89821f61352cc2173756b50501e27caa811f8a1c0a5fd474a193c7c8a8a75fb0e2dadda325a31ae0d8a258bad9e5c855fd966ec3eb3f93e0da4e7336981ac681f50b6eb388631377389ad727f8774e7f355f75f1d17c0dda6c86eb050b1722c7f0e305997bfa3ac1f513fb04303ecb394b7e9dba8b708d05f361f190b729936dd2691b5da385d004237ffc57244ce53ec5c2fa10f8c89e5554c929bb19784a484595542b990b4bc6d053321c359537b72f14dc14acede5395ed6925364dbe2714036c8c9a5732fb743d39ba3255e1da5e4f4084c453076f998459125484d5b2e5b67b1985cb4e941692f4f54c5de5358b80b65a20c1a3808d67bd1428aacb5d78f0c7724cac36a82ee1c0ef1709ebf4e9994d5e19c8fa98f6fe85284a594fbc3f594119aa9808e68270579d05e2364e6e2217f00b1223b644a7ab4ad63206933ccccf579a7f2c1c9fc7d3c0b0988e3836c003672bf98689a328ecdf4bcda5e4d2ede606ad9bdfe502ef9136ae95d0dafa0efc90b1b09447aa46d916ab4e0a02df16522c200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008bbbbf659d7b81185a8a8b10ba763c8938067293f4b1fce0f870e969b801ab85362a2220de9a619d348ede6e19d464540628d9f038302a9bc4a00969dec283176c51096a5430caf66bc60d7785229bbceae2feefaccb79ed2b0e2af4bb3c7321792e892edfc6ea3e0a926a170a032467034abd5c566adc3ce04c75c6c299b2f85c449b68034c8268bdb03f55c6904cf5945afa5df3f38789d994e9e6f21f7c6b84abb17c1b4eca1150e6f1331f0654ce2e97689cd3579ad2fd4ba3cf49cfe384f262741ab850cf6e60ea38085cd4044694a5ecc8e406a0857b89ae6b00d4c2ba3f88f0e5cf20e029ade2a3727e6cb8b250b64040143a464f94ed86ac23ed44df2bfc2d36ca4c171e9439d0181b93e5d248d437fe509ef6a9a3b7f9000fe997e694755e25651fec9c7e6407778deaa13f3e2d5270f543844cf345b5cf85acd56bb81a4a7a8060a6295ebf0eb0da07651defda0067aaf89dc0bd16aeacd085529a00c7e436566adfaabd3a671fb880375e8eb2a64300a14be503a981816ac8724cfdb50952eccef028fa0d9f0b3b57edecf3247b28fad230ca63b1c24be474d4a040e131e63231e3ebbbcb864b9d793d704bb1317cf59d4cb598afbadacc798f8000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009012c9128271447ca0081673c83487ba16fa1560ff8e5d1da3202427a8c62874bfa1f539299d42e6d42a07e5f165bca9809aba17c3f1dd5fc2150bee10f622bd503f27b5bc0c021d9a7eeee915c214f22b0fabc53aa8e1674fe2fd97cba75f4fd7afb98ec037c70d42fd70fa2d4065652682d3e366327672a86893fc17915b7ab932788ddb40412064548b70ad0de551c078c051e00defc251b7e865a694c6ca7eef5c14470df19da497f8bae2d7ab319ab3b2de60cceec8c3495e120434fe3c03c04141148edc25ed8417126da19710e930d76e4925e5ae2570596a07c68f70cf6c2a6de0b5e6b23b1385405bb04b60a0851c172f1a1678fbdc991b4e65e1550a9587afdceee24c5281fd89422f18c0041025e60fbf46b51d5320b0a77d7fcd4a9615c12ed02eb6e055c2ac1963340943617d45358aa1653d822fc4e85660209e9a467acad307a43899832102f4a0094739a2b3dcf90dd7948ec46faf8e79b70d464f83aa50c2919d63352e94742fe12959df8dfc67da85f6133002c29b2c43bc28140cebee6537db6aaa4095f1ca894bbaaefe90fd36f970a47b5c695b8b8324a46fa7be2b09db0834bd51d89d0c1edc36a0d9f29a43cd02a19335a2a231b1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cc430877ec73e22aeddc2058b1d514e9bbd107524d53d500b3dc39b59c94ef3b9d1f8818656e8191569f8a037d27fdc8fb984f0997c8d5626eec7478bd7f469ddc717e3ebd32114ff65ec381155c3e8de609e3cde0205a28a6723976722cd58f8c81e084715fe7fbe6c14a80bc6696e63aba4b9dd058c847eb9cf218e9bf618e9deaec53927539f3463236dc9d8f76924589052579ce597fef583865a5a856c346b8fa3b8d06512256e0491dc96a1135759bd65b24752d0ae786beaac5d42e9b1230e78ee02eaab1790b2c07e60c9958143c791554d471ace39b9a55dde56dbc0284a3237e515cf6d57e33279c1daff16bb35bf08b40a6527d90337ed302677e689f1c796f80c48a1cfd2e2567d023e7f6349887a7f986e281efa910875c21dab6da5f6b34755d4c4f75175f75655530443502f25714a2425b6e8248fe546f2f2d8895e7c905d205e187ccb1415799b50981c2d2d49a7c9f64336696c976a8f0d888eb85eef82db078fa6df124a3bbb4b909b4866cf67adf68b27d1147ca419571443a79c98c755629212510962445d8139785cf0f94996bd5376aaebf7ed1a95700877a60470599f299cbf0ebdf396406c0661cd312897c2f862652736e0900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a1de27e28fc09553d6dc3d9a793e2064e1088a9e20db91de8dc4c7f0d93dca1924c5e7623f45f460a34e874e2fb360e93d90d1c5eede8b649a1aaa9ceb187ebf1994c8753bd21a4bfd631939f2cea5c9ecc8ad3fc76e82745fa599f13c9b53f034ebcc37afa7e62b13257595b6a234ba048a5d0aacfc80f6271d859a7ca09ae92fb48de7b4b581e6d9e6b18c5a7871be27966d69023fe833585e4c0209bac12d47fe37cb53344a52fdd20d3348aa1707295dfb1c3cf09af76a29d2c181bdc6d8532eeffd517835593a4f8541a1699c8a8a51b6f655702b50709ce659344a03e11aa7af89c9e281dac0c1924454cc8ec595b4ab2c45f00180426c9ee4f7c4b9d0d925fa5bc0e85cd382eeacf5dce70eb574f565fa6bad71e2b2a0982039db03ca6e9196716d7c6d4c5acbe22c3c58ddebba727d8b20ef4909dc285ead9588688930ea5de2c0f1c41c67b452445b3e941aa6f5b69ea4aab5733383f154912bc7c50ca510aefcf08ce5749d4eeb63f11bf9f0d55daa745e61a6553c058c6f2250ae2769398c5240cafe9ac1cc81862805a331e88f59a0a5766341646a03471220f650a364b7d78e6339da5fa48cdfddbe572b85ce70d412fc01f5be3e16b3a08e4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a684f6104a7f2529277ab77e46e1563517b8c3058b6d0cb6df2efac3e32cbfd94c3e0407c3bd39a94b8d8c780164d08d51da7a1622f5dd1648c7bec586eb50a5a15f97410c7ad59aab8f57df503b87e0657f4b47159eebae572838be0c7aae5a41848dfa17b428fdaf214bf18a8999d5b819558eebc4ddc9f7303bbc67d6634843d5052f4c0e90609c1d23269c2e7be2ec77490141e198bc9cff2376f19e783c0e4e27b5f69568191a1d8c2438ddb86352b8cb8d4424156619aa782ffd2c6bbcd156367fedaf9f4d8d70b0fe8018593e972dd86695c5f01a4b5db2bce04713ea9d171143cd7b3cd8e5e780dd183c2b7745002680882d404fb54b8ed901515365ce02a3587da3e1f31844b47d7ecdbc85882d5ee909ede58ccc158506cbb497657b6d5c4c67dbe37c0fc196e492f367c3ffdf13f7e2b429093dfe187f0bb805fc652c8dcbcc70debc1b40b536d3a0c6dfee27ffc4c812bb22272cb8158e2e53a8b1d69e955f9cbf194593ae27430d0ae07de06634f5305d376f51465927c21c88f9378ba4b9311406031a2fd2b4fe82e05b2117ef689d92299ec5faea6371955a32e83ef72e4c61cc9117cc0cdc9e6af529ffda8266c708144a837721975402000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023b4d95a0f1885551ac61b59f888ea9d7b16794be25549f48a2a659757e6ea7505e52ced73b548498c42132dcdcc6a856befdd0058826336f2db848691f82925d57d34c42623b2ee669f040eb2743dd5fb3fac36c13102b273fdd4010b63bd2fa98fdd5d2f680a2a082084cbc0007794b3f97123f6aa2c173ed55146cc76e39851c9b034f200f026cac93be0bd8cb25706700fd12598792e76a712d5bd3473cd2643ecb61dd096b5b880cf16365a3d783b3c5865bbe23c5c8fa876c09b76176940787bda66d33d4862d286f8482e18fdf2d0da732ec005c274c4abf26ff8c59e28db0fef39e401ccba21439ed4d01311a5fbb11f298388d2a7f3957d9ff641311f69a03b4407557bcf2f2ee7ff845884abba8ccaccea462b81b22d03918a4958575ec2edd1657d4c954dd4981012e442052582e0dab4f04c4aab6d94f2f574dd3537450cb7ad1eb17e4644b0341b396fdc3a9a9a86c361a3ca2ae3d86fac38803a1bff993e9694f63d5d214ae5b957989642f646217e73dac4af79719a8f643caa531a25959d2e4e959f546279ee09569ce44cd69a28998af7ba9570978dbedeb85e5c8621369a040d7a1b43f2582add778d595e2a03ddb59f589f383fa38f600000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad78e817afc7bfeb8482572719df6616925ebcc10cc236f8266ba74ac26abb8d9458f7a99982cc83940a9ba6fa1b934bfe1f7881ab0f874fbe8ef5502abb15875011737b1418c8f3ca92a1641570656ebb7608d6a299929d799e24469d0293d8ea6a027d3bd0e92ee91521eab4c6df167303331f81ee61d37791d36c028f8c5f3297f197dab452ea825f2aff11e55eb8d4dac2d9828518b17e675bf6092aeb9de766d10b1dbef43f6dc3b1d730973760724b9159f725419fa3c52fce632d08bbe45e0ae34a9519bc7223e0eb635fbaf2d1afde5f051d58724509474a37265354961f189329cbe212dbcaca48728263e25c826daf421ee260f86eea9ec0127a688190a13d3f5f57b3d5a6cbc94d616d06ba0cbba5b66d973c0d31c75302fdc4e37630b07497f4974a13b2d83011b1ed969b72ebcb837398079bf12e61096bd39e4e464b3cd07b6015a3f9cdb4b4d8a60f14797440479ef8a79f6447b19c684fdfa4d5e469bd20c46447070313b027abec4201e9e1a106c03061fd7adedf6fd3d3b4242a8c0d037167c79ca311072f16dfd80aab7fea75e2cdd7dd107123d58f4dc81717b2930526548376e7f62c403cef7f7a9c345b2b769d7fce7eb30389aa2800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008fc6e546e3136a49c13383328f4759d4509c87d5317f3227faf24dc2fe1b6318ec16fbaf0ec611022bb98c8e9fb262c93dcbc289284a172f0a1d36e6c40d441d0dc705619328f64b55c586ddda1c045e0ecdcea505bd8969807783b40e81d132a8df43bad193d6b5d338215be3dff4ac483d778a0c8693a0af501299c41d2031d75f51dea4d65e3856dc4e00e3bd3aadb841c05d800648c20e78d6ac85c9e31cfc31b886ef59b980763828bb38a90bc62c7d99f45d40c0737f7d712a724e09ec5b1c7037f1a82f0e0022fd3e1c95fdf6cdf448863c253945a45eb0a4c48470e3cb5ff41c2fd92b08f95c79f30c92a0aad455364d2b71b4e34394325b33dfdf5325b5dd6ddb90369ba8b301c2fed1afb02565063013e799dba73c93a1f58042d80889105148e549b28876e410e15f711d635905e14aa78779efb3198995d5f8e237f2b77926d46370d2273b4d0c44fa2cf77c5d28c97feddb887b1667bcd3cb4cc0886c8531166685882e6bb0a2f79e8f03f4a1572600d17f1ad01a0f2285f239e1422835828c5e79645c41a88c8fac3f52036bcf3cf074c93e8577b1d7629203045cbe56530953e52e7f488208e0fd1b1338f4c90c1fd22ce4a29f511dc67af300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cac13389b9f64f51901a700a25615249c4a41511b917dd0cfc3ab2e5098b3483b4890becc8f65e61ecc1e359d170a5e8f587bb08342f607e385997932f500859332fe22266f2c0fd2ef5505518dd0a22a93236518251459a011abde5da7a33153fc9194066dad050ddfa4c27e661beaa102729fb1b47fbdd06185776cc1d84ef3946214cfd72c3a8967b8b893bdacec70a6aa6f47eee52b377623982e74a41b8fe3a53d3e997581ad046a4ca13f39af517399519a5ef3ef90eef7f7f05ce8f9e34fee5b75757d4073915dff88d4c27cdac74c1331567c656fe3257defd8f6bd8bbcb536c1c1518dd48ad2718cb753482a651bcf5b1fe4214d402e6434dd14a82fcfe487639e951187dd19422d321f78efd6eb9b4d8af5c5da7149427be9aab6c3bf7c9efbe0afaa79f103e29f4ada0bf660bf67c94b4959f334178e557bc1f538c7c068684d1177ddca642c3711c2c54a18a11684bb2f87b5f2cfdccf393dd146a917f488b0227064d1266fd8203db5ede041bfd8ee5a6edae631e99b83f79d3cd484f9b7d18d54094bf7aeb2a29ea15f451ccb308cb661aa987547b6cf7508c49d0714b08d90ad5fa7c093797ee3b7e7568944085b1d014dba411c45cf27c400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b11033f1a37aa89b0fcaee7e62f5c1c51381b48c1a3d3236b7abf1ff8e74b286863a7eca75f394708a58058435fab6ccddb565eaa1a098b8d95f4a70206ccbf96a71b56b1fe7e64699870d3b74b77b4624f8dc9a61105ccaecdff29a7080bfac3bb4e6827fb5fba62e370a58b5fa06c982c2d6e80583a794724a22b122463f3e0c2b976cec064b29c5b27b168dbd3e20fc1e2b9944a5d38239c35c0fca3383e879d9f7b925af7b044caa83345ae12afe4fe0b559f27e4ff3d7a03d511ad827a714bded290d5109216bd63add922fe6b030031024dc5f26cbeee620a87359fb93b02e1e08b2eb8a54cbe7db75a5ff40627386aa9b428f61b86aa459a5e1e453cf3f0f0df577c97251f946185bd6e63db8579129d8ab3da84e343bf8042e46e401338902f4d54e6765f0827bb7851696dca94d8ba19b0d87e21270c79bb6c15ce3f27c9d874f059e4b8e40a2883c4eb00ffb23788143a420f43311efc161672913b89a8b7f4d2e8951b5f158e5f9414e0a65d402857ccacbe13240c4782e23c549d7628bba539d7543f693765f70c171ef8959c675c45232483c4b261965798c90b09a3cc3f966fbbcd1b55f8a2a5e7ded4df3084bedc7de22e27e37b649a65ac00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d6b391cf7e077a193ac265d2f1f26490cd81766a4c4aa090aefe2ec54f6d918cc7212ab739e0d28f8ceb8f358340c7dd611a75cdfff8d1a0294df2716b1c4784a3d480cf23f8f548d31b3b27ccb37019f2e419e44a66c89bf3b9ce142d65729183a3bd2877603222f086121e5e62e027dc4962c83a31e4200d7a4e45a379497daea5a93da206dd8c62255c2f213c152b455b20daba3b764f3c1c3b7f9bd3aaad7f4574d177e79aeb96c66d5746e7206bc6fe28692c065dbbbed9785aff1cc9e83ed153562ad7df4bccc0c9567b0a6f4339333c959d11bf38c0096a5a817f6e8852b275ce7f13ab6823b1aa38106c76e571d85a124b888209f65952e67176d54a59ba81f45f7bc1f8569350895221037e4f053004fc81e290df8fbf281f04a8c4a0002d93c42b247de1ab4be9ebe7f3c20ad6400556f451b08d944f5fa083048eebdb6ee3c98d03746e16c9fb1e0b53bd47de34f3669ff61174a0a22a9a004f4cec62ef2fd5f0357190fe4229c839fe4c62944f7b4022393fcfc27a3770cb3705180d8624f9eec4ffd9ba354485453400488edc1f2a75c4d442b4b0b0672d34e79a781a93f8b4e0a3fec4434bf0e24d00940a017b23681ffdc6ebcd3eaf7234e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002481e482883a0c5e660e695eab20c842fd456665ec07e27609788390be4683ef80e5430936d1c70c6a4d6829e2f5ac716df89c0eb0ef751014d56ef92664549848474c04854cac6b5a10f9178ca96dbc9b2d66640f2766cacaaa36aa9c7baca8a886833c0c01bbf9815257dd50f957192e6de796041870a8ba29b3be5edb6eef8455b48811a54a34ef3e0429355bfb437719abb5abc14d95760e442ebfc5336595bec2d9c36d97b53e2d97b69fd3af785fff4c19a7913d232513247be4b5d936197afc4ef00ba38c3a5e741baecd98795a00be58999eb059012a8ad19264affd0b9a9c85aa262f939c3f3046bb2224e1a2763dfd2d65c5a4e6dd9931b2fd88f9189a32818347d075793d2600b610feaaa421ab2ad1e1ec92f3d48f27c59b4bb261c4a792197e833c8319443d8ad1b31f3713753226eda0f606ea33d4a3ee23c138a0fc5406eba0809e6f8d10e3eecab862fa9125d743a9917960998265a30845199f4eb80bf2e1bed5b2ba930a12d1ac42c132ac4811aeddcafde4f22bc145d4a30d33d6f8b21058b007706007e9362d7e8653de6b98b63be5a8acd6b3e25649f355194aad6ad1f03c1b5a38b585e58bab58909d9c0e49d44b0ed34764efcdd3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023fa5b3dc490e68bd91129bb2a52022367e58cd356d58af61135c20982a899c25814c2956a06096e20ad30b7fafe105e2a611a6efc39ae6fe273dac38ee96f76ba315cdac0db1df7e4626e1964a99d0eb4f93ba8640f70a0cbcb19564617e9059dbf07f26b4402abefee9337d0aefb3e080140c0600cf45c34c88deee0713e98dc28a94cb7f872a45bc1700c0e24ff0ebf6b6f830dd11edc4b665bcd7ed5a162b35bf0ab97608650ebab64a7baeefec902f586ed53aa73befe7e96b6b7aa913624056b060af5d807f03a58c4709bd415f2d77487d211536dc0f270155fce58d0ea99de06e49feff3a07f74e5a78927fc450bdc0e56b3f80bbb2254e190fa727b0a53dca72e483ae7193e2d3d74c6c779236c22c3a109d6ddfd033c4d11e9aca8ab69ab2f63032d44a499e3940036c0b402f6c56dd952c1c091f0393900e6fdcda9ab8cc9cd5b830007797c6c9f78c6f3c62521dfe1fd5adceef877dd575a5d71fc8d5ceb744c25fdcbc6b6858ce7b4743045a18745ad4a59a4022c03f8bcedd76133e50af37107b90a453d537937f481b5ecb3d8eab91f125110608b356ae4e15d17d1f3e0b213a0f1537bd23f0fa9f0ce5acaaca6c8218ff3cb2fe0a873027e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010681146ac501b6b70e8492838e6f3cf086245f889c5249efb166df73c19b678fbbb8d81a86b3996fd6c1622df8c009d6213a69d662fa4ff16876955d9165a100583111ddfe37ed8d82358615f282ad7ec74c2dfe65726d79997fa3f6101a12960a9191e700bd999a1ad9d2b792909ab72ce1b49db2fa53e144e42f479a2f4d823165ccd8ff65a05d5d679573511949c06edc05119f7e6c0993972397a529295cf60bc944f095b78fcb2f7bb175fbe0dcbd94a2fff715f229a218eb6f4968079d69cb7ca7178794233b70f08cfb70712104f86be0ca045b957bf153592c2399c34265cac80c72b6a7c2595238b7fbf3fe1af9d1e35ec0a15df3f6b2f67e3da0ce1951e620398989abd053f270eef8c78c2e759d1686847ca888aa0bb1ae20fe7e6d73bc8488cf64e392117660b98d42f6424f97e34aadb14435ca5136d4d463051b0baa9a947218629a12fff00a6195e33a53c618a853d2ce7f3249b1a0b3f51bafc52eaaa7be0d5949e09cadc0ffb2e5837fde91f973b727b3c97dce31e2e99be499e848e8c1c0860ea8f877a85b4ad26f39542c6023bf7013b2e8b595f18f6fa7fe46cb76f5d52cfe52b822680eed00471332377e52d8cf26c771cc4512ae8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014e867b7c20e820cccb1fcb1808ff324a03fe4c5a8af89304a87656b598c5140fccf9d27c573b7786bde638480289373ddb96db4434dddc350a6a080d39683740d6f9ce0dba5fc178d9fb548245c72eba6485426245e23b45c06eedd4082cf1fa81fe8e95286c55e291e244d919a4170f2e6d7d20accac468f74c5c3fd158736a515469a6d7a8fce87cc128cda9abe6835facc43422d565b06e9d54fe650c8f2a31ebddfaf022f06191265e3451b5cca515675c1442053b4ca2b66583cae4cd5af6199e66021c8753d4ae5bc92bf9b9708ff94cc475916944b632acb344963fe24303c4f7eeef5e90f1957da60451f398b24de62c51c51926227bf7bc2d62175ec0aa1c04f37f4700b652ad743b819f937fbe3353f0e1d92ed530b3ce3862d96d56c2419de1139085e454dcd671e3fe82b723d9f37e5cdc4fcdf0f2c722b8deacee2d9e09e4fd14551d8b4e1b6c0194755c9b8d86d1f8c91a9090464384ed76a8c7a53244203e67a3225eb11f25db61543f3ad051e5e9df72adc39b00cd9503c53c210381974693dc482f33b53e5399bde632393d85cea0556fa9e8521a48bfe7fc18853c37fa6913a8120c0eaead00866b533cd6dc3e99e72e003da771033d80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a646d67ff78ce12780d51a517979f206c6b31e64bfec418887e88d4fdf535110865aa3566f092443c1b5bcbc04aa08787200b51b481f7ca9c0ce6f43920a669a900278ae5e153b81f4240435a6b10760667aa1135cd04fe07727744cde1c50ee431a9a22753b90f323d69f18a4edf23b79dd68a8a3e9e085b3579d88bf1bb75f9b50e740d901ca811c883fa991e1036f03e0a28acb5b267fad6c0484a40b67dca0461324832769fe3092394c69e23d6e629ab56f05ef58e0afe5394b0a5e44670c3d2548b398a9ff28097fe2563ff24b35f596200264a8636c13a00808976f11603616ccf2a21e1170ea307f7f61e8e1d5af554660f54fe7b5fe5fd5231ecc495f7a01b55c934aad0e4c028584ef9ff923ceba90cbf9d35dae1c6a1da27ddb5730bd2430db42880342e7db2705c6752cd3657645eba3c21c173b8fb17a3c4468f509fd2b643e4d7cec37d2e2d1d41c2f336c9c4e933745d8cf37db8d9ea8521a021a2f7b0878b307ec2796714d4c01664048f3129801afc6dff5a8f3ce7e27d88723a0030e078c92553967d557032b2e70543b32ab449d3e638640b33c5f44f7ac32f88798c0d1a0f93e661a5bdbe3e0556e125e224f4a17196d843ea31eec8e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b3e86d87046fe7d452e7f204d90a89cf47b7431aeee353a5cfa10b5f887316475b43f5e7b996e06cee55732d292ff60fcbbbbe7ce673e36398aba2a68e3ae8b1282173a8e830a477daa96cc540ecb607487bb8751e69b823d4b2d610a97a1237061139096219dd408dc5298753b4ae5f2496ccab103fb1b0c832ea4db34e3c2eebb5fe21f486f146add66ad8a618c1ed03305eeaf04228cbb47b6b0b891a4e5406d8ea8b23994586a004dc51838a74e523dfb64d6615c6d65a4e4ecd64d0d678e871ac6faba03871d650de3ecb6cb6a6d87fa27dbdc2d205b13ba2604afdf1aef14688c843d418e57d73f7a091e1ca33503182db754e188c9e46453587154610a457dc7ebe8c1aa2a0c8340f44bf87896a050d00de0d52c299ddc664caa4b31b6860ae46a71e39de5bd41fa9d64c77bbfc0a30f60a8bb534da499b07715bc320ec34950a08ed23de56049cf786797ab8af826958c72d86d29b0875d5c98fe583e14b200a345511a4fdad87d01c49c46c57ebb674cece338bd61766b120d320aeaadd63682061d60809fd701656517362047ce311be4a8b6df3f0a765ece27177d70dce4b17fc85588f87a2e4fc6f22d9c50b860808d774a35e7389dab4e570800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d90be404ec4336c35c166a5dc751c50b37f1cad82220c97a6c74cab9a97051024c2b1a4b6e21d789108d7d4e3209fe4e03caaef44dc3e7c2b4ff247662edf58947cdf11d9c71866dc3a1606798f94f8d93aa5419921e135adbc2af913b53e170f6503f981f031a9e70c22ab416b85e58ccfa45af3bf2ad04bda4a519479c7fe7a0b002195dda5dc9875ef06ee9951116a33df616fe646ebd0de932a12b264300363ee75acad7b9838b99711b454b0d6d300c5a621d0c8f02887ae16f4e7c29a2f7d74f553d6c1e0a33e3f596e56f76a86aba6cd146d4902012ac26709b71dd7758480c5feb2cfa490a07cb962f8eef6a1470e3d71a8f140f50680e1439bef66c3f07e0bed44d0d5c076409b18ad0938959720a623300cfbba5f7b5c674088d2eb1fe6452129f74141a31a3cc4272134122f1f008fcd59bdb33052ebbf6be3461a7160c810e53a496e64dd1548ea2f1ea0e89b60e6505aeead6f0ec371c01317d09eefe23cef89e4fe95bb555281d7e4164895aea1fdb6da333487f40732df3fab009ec93086cce70f6f98027d888cd17d4e1fb373146426de8a98236f9b913e5fd2ae5b48f4fb45660f0d7b2c98fd9b584ebc4da804cce235592cbb19df7759000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f83ec7313d739653c4be0bfdb394b5186297d7bc4bf0b3735b05bab54398b88bb3e2417e5a6c5f6f377ab889549244749f656c04bf12c6fce2aca9135b3b316d0bd0255cb3ade84c6fbc608909eabeeb1e8eda3c339c59dc92268a883a1f186b412a8bad8d821a6973202d14fa5c13851d23cdfc361fd6976909dd144e889bc290d467f5a530b899df222df94b3bfceafad2acf842e96cc30c7e14d88506678a3fdd1565ba4c59aea49e0a688abee9d01ae8ac9b3874b7fd775103a9a122cc2172f00212e6a8b81f4d130b5f66de8092aa8477240c476cfd7dd7097258d8db4a94db36b4334b928afa81245969a7773b94dbc7772857d940c7b396b0ec27b0279cfcf83a1afd7a27232d0cfbc023ec7d0d61039d997d030413ff6fe99cda73e0bdf151ddcc94aafb7dbd1c1cc5183b9a08c50ce2dadfc936f0656c0a2a9ea4b591a4d6781ed57a98d65c5153da4229b7806dad2e3c5295f7ca85097ec1e5bcf35b1ca26751be3f7bb3fa3d9c2fe64c14d1c882d738999801c1bd1f86b6d8ca2329d4b42fdbc2bbbc7688ad2d26dfad040646a3d171d2b6eef0a858906add6629ef42fceb7cd21522254429740f3728d89ec0c184683848d59b3281b65eb0ff00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a775950cd6f556151e76770928ddb5de19b07e84d46c81111dfa20fd405d2aa94b0b74582199838514a85f132162eb3ece4fa5fbd44764df72b4a2ff4faa717b16e3eaf9dd1d66125596ae20d229dc03aa0ba472bfe5c1abe82eea31c55f583edb51efc72bc9cb04873c19fdad98fcc8831e878c38ece963468204f64b29fd0adb13e7a4dba7084929214ef028cd32b408a976d98f3fa860a2ef97dbd01042773a69b9f8575fe73b3ec6766efe31a39b52c16442f89614ec306adb668d4e36d5dca937c962383b56f56b4c5c9482b3a7486a66da8257d469b793f437d13b8be6598033f1648e592064675cf38de65db39cb9f12a8944d436a12357607b289e7e5ede03b52945b1360e5f9bbb789381968096a705b1d74e3de7ecdbb8bf020eb079d8b6ce008ec5960c0c79c4185e981cffec1e44351b11c4b261c9467a7a4d2305ba7409a2d8abfa5fc98b64860fa4b1159b8dbf2b343319e97b86933f4a110bc180296ef584360ba848a4c8ae11781101922ef0cd7d6692cbeb7191d02001ad71bad037c8feb5d46b2b7fea895f4f0679decf1850c0bc60ece563eef88982903614f2227f1389d91bcd815dc359bbff3829ccbb6f637dd2bbf08d3b88f73a800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d8e3340395193f1eaf64f8505724435742faa2a0e11dc03a83e2431469014ad1ef76929ba8fb802643a02fd10cde170aaa0df22fa52f5641692a4cf599b0b6c3b98479d1cce569549c51dc1d72ba92269225ed365176f05d312801f5481c88080ccfa84350b5b5ce951f0489365562465aad0093355eacfd6db052c4545abdc3952bce361ef39ad8795320c4ef0a328e95df85cf26e9d70d63b8ed6aa674d0c4eed0da23dccc33278916ed25e74484c6b064fc44380dce15b5eca349f40c566e53638ff13a1aa1241ac44394527800629d1b95ae5dd235b401d7fcf0f3afc538cce57e635b82bbea438ece684a6fe63567f7d8f65993a92d23c225f8dfca8e9e628baec7ca890f82e7f5a007c45866f49c119ccf93561980b1d3c4aeea3825d285bfe08d4319fa60e604b8be9022ef482ec5ffe7828b2a8c98c7388d6f67d5d28db406ffc677d53d10d1959d25f00952e55c3264117eb1c5e031482cca1d75e7938541f0cf04593cc4ae26aea3c036323d0b463cafd2b7f7931fc24327d5597e7a0983427700fce8c871df4d00b6b227f84ab40ba1a16f38dd85d0e979e944c5d0e6bcb5a6d076647e1272aa61869aba82ffd30bbba9c41f2a7034b5a9a088300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c8229a8d1931978f0ddbac5dfdbe03f0dfdabbca68a7e38311c8a294534d6d272f52147e3775897794811165926028510557ffe9b66392c4f858e1980b0f9a3886e5a95b0a64c789d51786fe6599402d0f4f79554c90ad2b63edce97a0d892fd4d4d5aea1bec790c126c26980ac95bd712f2626dffe247b9977476c03f006e2b8e35d41ac31e3a36d84e14a56092f8ef2813377e8e58fe835ec8de3bb2537574a2f61fca63d1ce30a215a6b150ad57ee11eac016d7f2a8726bf80d92ef8db09edfddd9f74d4d0ebc9fd079d0962c03e4bd11cd2658fc60e37215bd6f3cef67c3a542ef6795ec4a129e996100fac74d56dad820e554686e45f015770bcdf872689d9888e28db2cbada9c7c075c6f703264c64596669605e2fa29a1dc53c85bcea3cf54a2a09bbec4240eacc5f48bf8119235aa89679db95eba02aad17ffc5dcde6daa085a6c5f8f815a0a22b494af6304742b4323964fe7e5af79bdf23075b376320586710eabe8e10875d221e8d122368bf2ecdc4cbb20090c94391204d9d36b04c29d09c6c8f04aa4d40d4c50d6e11f43eb9d2998ff3c2934e50adae64244f5d2d6e911aaec41d7e758b1b08a28481688aa4c3b3e7dce01f6b7a8ecaee763800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f11e2f6fc075f56c6ed0aafe140865dbb769010f311bd35e5cc369bba5a8159fffb5a111ebc4dd0f9bb0ec48646abf33cecdad176c8038beda13b885c16a4d470317b3987b23e58703530ad1e3c25da66167159984fbd6c687b07869a53205572ed1b885fbc2b408514aba5cbae3554fe2338b583d98072b50c1e921650a989ad711e75c9f669768d2eec1c16a5b1dda63d64ac4f3374904c39458b6c1e1b25b5888154f23cd126dee0dfa7798e995b42e05954c4634100298f12056a6b91ab60ba28ddd2927b2cb85d4a75cb24967c6bae8a212c3c283b5b5a78a194e9fad431aa4f14e6a56489b0803e2a6c079c2640dd806cf5c400fc46c3a01685d4f58938bdfe2dc345ae0a893161aaceed8e82a86d21379b8e8ee656890bf8ac5d1565d187695709f3deeada9c7ae5f3e5c0a292fffc0618445976f58aa576f78aa0ca5d328c7751a385f1326634b70393cb1da683902be975d445b4807b4c136056b02aa6d88c5d8f4ce652d5b71aff2633c3537ef5d135bff06cd43ee2a69790a443a9898abe593e64f923d4122af978cd616eedfcb6799f14357fabfccb22d063222aff9fb39a539776c6b5ddba9f4e20de3b5be7f7ec2de02a8b855faa8c7a93a10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000897097e85c5524756679bb61137f0c6d2d4752b06391e99a1f3748c8e4aa90ab148ff7c5af0b99d43d47131916b8c2082d912d6966489e130ee797f5af9b8963fe3fec7a67f6247f59064ca0b7b765ff97147f4355a94754ba40757e641e97c3e35e0a72871966efa5a3f8c9a44e1393525d7f5a1abcb3872549150dfb66daceae995f2d113bf08d66091d3ec223970db4053e81cd346993a2a8fe76ff4e851af55b8b0633900a32daa16cab3297cd65daaeec9de37360fb0cd1e33a395c1727d2607138e8d69023c3d9e1ed57414a180ff47e23aefd7fa5fd2880693483e814ac93709e6bf78151b9c71825289b34045488c59e36b890ad9e78e2af089fffc0219e9f573be11f26ad20bbaea59a6d5829e5e0a6db17af7cb5be1e255c08d677bdadec0204d1a0e79d4a4af7e54f55e8148f6ff4ded26f3e15a84a3416324a85b1efb436c6041fec3e97650ea7203c5dd578f9e46d4ac2704055cc271296261f45e37e69610b9610837cf3b68a14b92be886ee425cf581509af3bf5d2c90790e6f6aded598bd8740a53afd848e43aa0457efee229353ecdd5b54101a2d2e748f4db16300974de17f0fa144484d1e631a9e794df6c9d1582cbcbf6b1bdf53384e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e8de20a0c928ae7081abf975198476afdf320d3f4cfbe67b45c6c220e7e701635a58f8e7d9ac46a8bd0e9ce77d2b198388d748ac8826c654f3601c462dd2ebda0a22ec4e9b0d498798395fa8c773dc19f72bc0806090593fea7997d2be5c17b50b9607aa123aa0380e2296b3a3485ee2fc379197f165df6a84909c7dc53ca3e97e904ddc97e0a116ddc02b3b974af6c2f9f93ceca5ae83a204b9710858a1c046e1efa093ed03ec1c7076725e35b4877a6d32dcab9a87af425fd9d6f96822bd8d02caeba08370299c1976bbc13da5e19ae3473a3fd3380cc2d950bef31a205c9f744b57ec9ce68501a1653a6c1fa0ab8b7226add19925db16cee681878ecc6135e2a1f5d7b2975b667f50f2e9d4c428e7ecb173f8d73caa39a3bd452a5dbbc0c7de1f8d32250cdcac19770e370897ea424877870483e7b9c483ed549d8bd377edf1b8facc9a1cf3a089ca15c847a4e56869bb2812cb75760f58dca83087f30315ac001920a8fe9b352b70ec713f2022510627e73bd5342796ae864e718ac6bd0e187796567eb20029f6c0224610afa280e7db1dfab1d9fe793d1d0721857424c6708bab715903341f21c2ff1a307ae11b7fdc2976b30384790b9d2219fabc6d2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018e0cc4d41b672638aaa0e6614f7fdfecb0037150830a4268ca93d667ffe1958929aecd0914bacbcbaa3a17bdb7510e7e7fb7a1422460c04405988d0e65b5e4aab02c9f092a50a757693e8daff7f606654a0cef6f9e9f6b79c2c8b6ecca8018e66204e162543e2bdea891b69240385cbaa9cce44c1afb9de08c1ab1311919c2226f6af2666c911a9d8f39d9e45e430d16193166e096ed36a0199d3ef490fd7f7c9c630b0f5c79c305b35107696072b2a30a7546af1785b47917499675b46667619ecf0b98b9b6359dfe513cd872a45ce80a1ea39378dc74f6d9af90fb6d262251fcc3365299355a9a89064db79a769ce3057238c5dcd23d441d96c190eadb559578da400330012d72608545f251c868352a140a7f633a47740d3617751d9592985ade71c2a48a03a91faccef436e6cb44a4a146a06d2b4a9c8364dcd5b9cd563e935ecdaf69a36d8eee289d211a1b4180c6bb1b03a48c6d4858027a0f18726dae033951330bf31de77bce862b42aabdd99607ad835b5d999c3648159b749941356ab8f139e7d9dc99f06383bc6bbf60ed951eb4f4e4cee8911b03f849582c9a4ef3c09f36c70f524d685eaba3bf5a4a7585089632499fcad97df6f5259dbdf9d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b47e5e70c5f52d0eee83def4d009bf5a3faedb97a7df8110bc001946013ac447b7b75d49cc0359998cf54dfba439ffcd57a351eb842d59a91341fea0b1cccb5c48568d845e5e9595e66cef7ca605a8e43f7857abbb5892a8575f65e4705e406adf0da6ce0d7042ebcefa56fdd67d133b9873c03b79a546a05d0910e2fe1b96aba96654a68be1b80bf2b549c7739fb44377e8b642a72c419791d8e20b9bf93ae8c8f847fb845cfc66d648e52b4a63d55b61e885ef85e14fabb20282027449c0455f5aa45e01dda88ee7f0b5a7aad2779055d4aa20c7ed851b57451d2fae01f38af409bab9ea882cc0baebc2430c799cd357363a272af2be99eef2fed305cdc2fbe204342edd855c084c7a5826f5807435a85ec001f25dd19d98af2eb51a973a3043db60b0609b380d06e8a80f141cc88002f5a68f6aa900776cf7dc9d66143cd0c05156cbe84c50c1aa1474f78c9d7d859269769d3d73f0d20072ed8110f72947ed4e0af788e29963672e650795d21b097919310179a8c059a73b30c9b0854f7739aa95ba6395d249e8dbdd6f0ccd5641a8289eeeef81704e34f788ddbdd98387ff59970058d172ac34f1c19ebf5d52b6cb3e1992e562e8557eb7eaddd3e590900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e85e585cf4bd46fa31badafd37fac2bcc7ba85944cf9d905a0a99f720fdcc8d91d18dc9feb966e1783358d7883206c762f62889a29c29564a91af31af3cfe3e4bcb9cb6e8cf624cb4f042446017a763d89245db5a66781fe7b7cd1071c53beed276b89c7c1ba6722cc93788e7ab79a094f2405e5498c0351d5a8e104a112be8991447f6346c486e02bba8068f24bf1b55b1a8b0896c7e24db292d2c7fa74246a7a60acb62e6fbbbebaa5aa1fafbb5524321eca5f1809e15f77ea6fa47d0fecde8bf516cfbc1fed31b93c265d62961846aac8f0a76ffbd08bb5d0247de233c073f6d288bbb9b62f1b48b7aba6963b5fe0091a3593fefa76d4acff0f4102583548b6b7481a118d85fb942ca5111b985405ab3626184564dab2488cf2ed86f086d05b64ce0c45b4846eef2ccb51230b972cb3770566bf4b2e08869da58a2d5f8dcf41ffe32c664febb915f3642c0ca003062e07c376380465055843e606d2143b981ebc2982433ffa02a766f0fd720ee531f2c00b351d0771d19c00ebb1a895c75357a154e58121e8eaa3ebc83c21e9022e7f36fabcefad97cdad2bf900369708c43f043780965e084e0c74fc5973deadc7db0754857837534e0e17bc1c2d7acb9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091aba57ddbdaf3466ed9357bf8ce7b17b19c042535e40ef1d066b5ea9de05d6311d12f58615d7869a7d63af0c564d089a85669a94c6c651846011a1e1251507aa9a95801d59e489a46258bb3f0d0435c61141bf16524b10a64dfef08b2169df7d30d7bc8dba2d46065e5c9527de56185c0b894a6dd9d1c05c992f4fea071a63d6387ca7bf439e5d8f4d577a4d24a2dde3fe436e625a70ead659e09cd5f6acd3b53b1f76ac9de67ad22b49fc813a22ccba34fe5d15aba19f2f3fd803e5a3933fd6c664eee17ec4d5499c8ea11769397af361bdb5be326faed29c325321402626c13f0127f4ec6cfbc329858ae33012cfbc3197730c57926ca2a0556bd210e87ecc48950b650f0f985d17ee213e512e8430ef9716203f37260905a5c3c48c3433233e075dc0ce8584afa85fcd784e8b0d33714248961d0e2757a3fee817eb1e8658c2bf29373dc90f082eb8dd44931f26d29f5f24de1a9c5e8336492e69e024de70023974780bf665418d5580db4873739228d7d3ea3f246956719ab1c625714e8777c3085cd19ec784c583f8876b79b8b6ad41913545d020b0515610e17e06b745fc9e4c820bf1682ea1900e318ea94ccef10de51af43f2da3317e924f90df7d200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001816b3f67a39418be795665a9a19647ee79d13340f091c107ea94e0b4a5f4fe4e563920d6055ac7520607fa80236b48bb29e931f47cdeae9bd004d63f5accb95720b97d23d8a56ee71059b15256b66879324ad31ac052a6b03eb1040c59ba8fb04da0be23acc95b2ba675261554c8dbbe457f812e3f869fbbf3295277318e3a1fcccef0c9a226d5d577632b4199828f1e6cce87c0b498013520653e32e607202cd9eb3ea5e1558e45687a8653e066198e1a28657fe1581fb30adc1599a6dcfbaa2d3039c0862fb2e92096de07912f121008973768fbd2c1568e4b43515a6acd913cc7fa6a0c3b107112bb96cea38010563e46b054500fbaaba0dfe8a2aa6d8215b976f4449a77fa7555446a030a95c2935c1406522605ee1a7fe2dddab824ce87b32606d9e32adda0fbe7efa5d1af51af7293bac02c2ac2fc9f23eeb0fa7974de3f0f2dd0bf2f159150a38e1e1b01d3fda6117eab04585da8ee4250e1a4cbae8afaa6d68a1e62e0b90d1c3fc5ca9514dfa34eb8dedb96c43a7fb43b3dff53c6b2f7982adb0de78ec8ace8cca3fbc1ab69df7180746269dec12cdbb601f01c25477a422db442e05e053473b51a60a4bd24dd325d14eceae138ae691556445d90d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097fae466a914e484db9c2167816e89d90575c77dc950ac67e172abcd1b21e5e8569bc5cc66592b2b5107652b83fc5057ed0ac0dec33e7f6af3c09a2f0925facaf94e19c4c9b4cee34754583dfdcd37fb0410fca265469ccaddffc244822191ff761809325590fd636e8d26ed75304c36c6dcf1a2ef027c00526f5fb113ac4abccb68e255105cbf4e52741230ca11a94d339440d3fa477410c5577a2f31f4d65e776149c70aee19bd74befa26141e0d4249f6de1492ba1686a7255ea0ea4d6588ccd08255523bbe9a66185096ec3031dc48da365561a702551169a418b09b478f19cc4c27c6cd1b972a51f94e3c4f425531191b9fb718ea3528c3d25710dcc029d40c0a130f8fd4fc94a47e0f5d997ad6f86fe6ac818ac425a3a172c4cf86d5fa594101aa43cb440d9cd04d83299ff53575ac1ca83e8bfc4b784371d95839063d9fd9b5829af37ebdbb320c8d9602cc60642fcff85e5cfb8316cc4bf1f4c7930ddcedf717f75f41655b815338f69d69152c0adc144c164180b1a351671aba505fe638a502a4b628fea64a513c878b8e1f69b81041a16b3ec2fdc62c7161381f2381d2f1417d56a577ae680338002d67bce268953abe6f4680c3638b9f7d4a47b300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c18d4285cd9816e89cd9755e19cf8ae28893caf468166696da97ae8c475fe7e6b16fafe4e65ed22341810061c44da7eebc869930195d65ef9432d2ff0b491ccb862c7423c12f126504ff9a9630ec56d40063b14c9b6bd0cc18fd4974b3bd894315e5741a6de3a6dc09bdac620648944c4d70bb1f23f6b5640fadb8f9411c49d92021406447543000c61e890adee06e3ddf034ac6e8b8b9ce9968016e50e189c67bfc320d4c51937caa1ce3a0060b6e89444531d288e1aee50b91d779983b24a0c48cbf922ec5a1921639adbb5ed960e61af5ede91c6ae190b6629c5b5859a71703dd36d53f2cf6a690d01f673a3521662010314b861dd4ed6a3027a3ba4533db04d42112a7a04401f8a64fff62cb4fdb18faec33b2baa5380052d07c9a6cb7469450526174328d7af02b18a35414abc58b2abae43f82a16ab4086e046c7468c752302d1877e94b91193a5065d5eb58fb01ce80a77c13e4422266023593947ec315bf2c9fb600a017fcfcc5185bdc78e7eaf6408d82556c44b8cc4be07a189bd21ebf0f531c9560557cad215a6ec7a343b0c5dc594e4b8237b74450601b6745e70d2478f916994db29618a1c6d69d1d35ce06581794d0ff73d36dfd8ef6d49830000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814028b705371567ae74b916371ed5a197cdb9f20e66968dd91529c2c44a5a560e60138880b1d77b55b3c8cf71f3812852ecc9ccf549636cb9cf447ace0e31706cf38d820bd546d4d8de61bd9fb9422d6fe09bf2e7199ce13e4342989293fd3eb705d0bb3da6dfe3c9f6c1370d1dbb9998456f51983f8f18926253dbd7d23ffa04090daf09ef6230854887344ff1cb9dadab6f3416ea9c06aaf28597ada7f46da522af8a33febb3b55f3ca992b87975501471dae58f0bf8a4e9ec3196cee83f59409d624e6bcb97989c0d152d2243dca65996b96ccf53acc195c6edaa339f242658f52814099ecc578d8bf280185ce37b1a0dfdb01a8076484e41996eea147da2352f12a150e025fd61caf583453f8bf83ce85bd27c5f3f2a0686d4d3eab9ad6eed28a9c5dd91376d633cbe2de6817d993da342dc16b092ca906389bbbf2d7d297c07051fb4d3fc271794f28420918af6e74a5c16ac424cd182697428821b9dba640b222ab0a1ee3536ceb9d91f5d460e3cb364cc331b4a72f4d3037796f62ea97ef0ebce032e618ba3a7173567bb8d7d167b24982828673f97bbd21913d7277b28c69e305b6e263c22860defa56ed6ccc4326cb423625f87d7d347bac33640900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f8e44ce245653b55cbf67a77948b5c990959d26a1cb69350ee15d0bff35732719135b844d09dd181e0c72d384587b9a2f5cdcc66e0571f191de384a9e9e74eb5cca85a001c5e9f59d5058e2fa52fe24df13faedf86e9f2fc3ce42715a97b6f4c317de737be9a5f502212f11d89945802e15b32e813811a1db9e70b374b0151f1cef8e9674e95124cfc09bb5e62c581bc4da5b550c7daaef9145a7cdb64826cd8b685827ce76dd6c248ac35a2c897d752dc40bf294e2dde2c81968574ce904c01ccd7fbae5b7d6243cb30169fdcaf2898907faeb10844b91e5e33d3075c0687d64fe06e6839c2a51e9d98ab1d6a29c28d1273e54c6584f40fd5f526cf8339db1387902a29d377171030affca924406f62436fbf6b589c72d101eae76e7f564463f4811bacb5fa84377bba8188ce920f1f29b5502d5b277f2e882bdac90f27f08b55919a222f8969492f001d09754de16711374bab581aa814f87f9e6df68779dfa43a1c63a2fd6c3d9dda21378bc2f92ec95620cab8251c1b702a3f73a110c6946db05f0f30b8c4575ea9ac5b3cd388203e42c3d736b53d7bd162801989bc9a6a2fa8fc79b2ccb2eae0457a4666e0a8a1ca0bcda7f227c585b7ab845c2faef3c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096de6ac0bedf0b5b7e487e53cf457f95c86e29d618b125db56094b7aeac353ad3c6b7e02cd3af9afa05c29d5973c499b9bb95f77db1fed6c21cfc277afbb77b2fc68ea9827f5ba04d2f7393a49a94edb6ffc3930989117d01c807b55373b97af4c210becaaa1bca06a727e03d16de6b1374ebc3cea910121e3d66dec0ea74550fa21cdf65d620d5401259673507804a0d757d59a15413c73adac41c928f853705a95cd2613cf2b4f856f7261306ebca3e69548225a8fde668657b0b98f79a769b4984b0d736e8a306dde80bc2aadb5f992911986cd3f57bba3dbcbd628cc48919fdf0a75b902ec70a012285ff6d8e5122bab1910d34c765a3a44b555f9a5cb8962a6da5f83ece7603ec86c3b4518a6e9a0512870f2b4755990242236d17f941badd6869e417932c127fd55da0615d8ea0b511c070303c2cbbed4dd49b6935aa2181f56dbf9a3f3a0ecba7c9d8db51726431ab88af2035a3d4207676074d82834843941793587f73b0dc6423d887634a161486184e2a93134223456cd9d5159ea991b41b64eb3b94fd95fdc49075f493d70ae98f326682deb33ef9a7c9da0691eace6bae22db264cd281b802a093f0900ce35954161854691d9bd2a75e0e0d88300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ee84cb628d08bf260f1dbceaa9956ae029e96937ccad437c707bfc604c6e93102de6a2fd66a85d51d47af0620dcaaf45c8424da07cb5388eb4dd92704d48b8ef23f226a00f2a0f7c494b03c8c8633ae373cbd1d63d58f2cc1eaec5cf8714455a2631930026944458108b9a5506cba3555daed9010b42cc103ba6564eb7bf62bea9100357455caf0fb8b51425c1ce9ef3b0259802aaf9708f658662511cbf7614abf76e349aae5b0b7f1f867e18e39acd5eae86624975d3fc45aa335b86902d26c919296808acb7398cbc381886c6a5e479e80f76ab6d0ae57bc60b7a0bcd36d3202b633c64f699de983ab0976fd8e20e0168c9ae621bbf45b31752f18fd5ca91b332a397fe79e1c1e6dc00d29c5fd7234f2846740faeb61f9cfbc97941061b94ad5e5912113542b77290d661625c676a01d47f1944637970bd49de7f5e8b1e2180a7ad06942a4b256ba00b99338af7524ca5091b20b661853de35d34b6b3c6c2fcd60caffabfa6f4869f71183fa35ecf96577b1254cb0e70ba6b60a2e6de68659feec1bff91bb8b3dd66761a6350846aeb239f6dac6d2b1c698d4f1d023032cf232b5633ca49c8dcf6d801a59e86fe7d5668ed0f6b3bad454bbbf9d416dd32800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f76357d56fc62264ffa0fc5687da93db61508602c86e156fc5a2046003f04b1212045173e8a0729ed62e1a306d6982a995fb2ab3e887327ba32dc815071ead482bb8052f9d6a2f2ae9e5d8c5f4a7f2456808adf2a84f087045bb2c294f8fdf8578ce2802fefe0cd27ad1b2a5b58ce8f0af42ae3a79a1a84c784390bdb19b5203f110f2ae36b915c8ec74867a9bc306ae15fb3490b5b21c59288840492e4072e12d91275b782385366b1aade6f0fccdfbce8516f645da7c55980d2c1695996d7e1606267213b0a51a782d47380534b5d7859fe8f470c9380cc55d5718fc361b95f0a287860e90127ed7aa392f4ccc732299b985f5dc7a3bb75132599a60354f6f4c59b3695fc4cc0bbbe4416c67d60311269a2a5ff258c3580d2c7621e3a8a6fa6860e7d09dd9ad634bd591759a200698fcd7eb0d144887ea2a236f5c685a1424edb9b439f461a4ac79391aaafcd02fc9f6c60568a76c1ddab0391b6f331d45f76a608ccbeb4882061cd653bf17cfa904fe812d35b1d0b83a460e230749e49b35406c07eb33554f15f96685ce08e936936fa49c9ffe6dd99ef7cdea4bdceaa5f2fc5434e6004735e4da019364c10a0ea03c76a2255786411fa036d2f36c6e72a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000892d4643458788885f726113e405d7d3d6e92d3bb622883b6f0efbc1ef16cb8a02b1716b758dc9cb27db005e84287a4c90c5f51044733fa289bae788e6b439d8ad3ec0f8850c09f02f3ccee43163a3ce91bbe7a082a429c5229131d7162a218f55e7b652103131d9a616168047c6bc3fa72ad6565780193e4dfe7432f8020825cc45983a12259f3974977eace225d91b8e3daea49597e09320bcd79a5d38987ea109a9729bbbc3bbcf63bb4855dab9b4922b7dff06a738eb9e71eb8bcc3d41a6ec49b103e403f5bc8b0ad5da16255531794102d876029b9a473f4ca55cab676fdf86f1bb4b69b91593650caf130cefc8b43b8a2838feeb703993977588b769ace9bf6851f8fa407b972e78c2dffaa821ce8a34b82d21f4b9a4a31888638d37961dd25af20ff12644a00b7e9e898cb5563c8c636875e3059386931e2a93a071ce7827eea10ceed9e65b291f9bcd39e47810771e843dabfdc4d2a0b54a02479cec65ae4a1d8adf09d45910e839cd8c69ac34dfcba22265c95773e8e1605bd91d364270a8e0b958f2643c23ba18771537fdbd83e0c1e80389b3a83ad89db375fd1da92bc9569763330596b0f4d8169809a56a33f504671539fd436de58d73e0bb3a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001528b58b7b20f4074666e0aa2a73d3c6293367985ebc5a0fc36c1ed360ad10088ea93f60da9d431ac692b6f0f7618092ec0a064bb7cd0ddf68757a86e2c97c059f8f58911d52fa8dfb94116eca0061716f4f195270706f700a477105c8db743bee2fb8920b372b44924c533f570b2c8d6b48497a2a8efb53c0822e8a299b6f313335ea7c594e7ac737b88890e7ec4cf699819100de8cbe8b749e7149188939b43ebc9663df8848dddd3d38b7ec1768915a94e0ec572dd398a68a989e86814dbe4f557dde47e5ef744070997279da6c9c7dbe7ef27d26e6c3f5241cb474c0717cfd66d2785c8761e384c9f4cb6cd06941c9dd2834877382fa24c02e0527072377a028463605d50e9916e3be3354d6c8f49e58aa4b30a4b0d9c2496107c73aae9a92e7f53c606c35f13e6e825a991dadbfe428ce522938afc8d205ee88cd589f11b443618971eac1c45cdb291a03988ddbf62583e922b7badd09517693da12b73bd093d9135cecda8262da938a23ca4274af45c9f67592d3ea26bd3407c7cc829340d78b73d3f358641f4e00b8dc2ffa9778f1eef28e1baec4ceeaef377eb2d7198c0c1fb1477700e1911b7879d4afe78c1f21aae2250c7eb49e76ebac6bb3e424000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093fbad951b1e96acf615a76b69c0fc40dea65b322170fe0f0f0d908d6b8f3a0cc82a0910cee9c9c389386949142ecd0977951759643255a28b32931380039ec08b9ac47e1bd213bbae91fd7610f9cbec75bb3feb6162299ef081f950fd69fcec3e10f064f0c29607679fd298392dbcc2718bb71a54d2231d74724692bcfd0f9d971191850bcae257579e9ee308bba16dcee4ac8b1d58b63d029643aadaa8699b7ca05dd11ed968e77900cc8e7eae3e390645b36425d563235445158a97d40c6422e773a45984827311f9784a58647dab7a487e4757a00e781d693ff0af628ea84ff406807b1e33c2b777a1f967b2717c4ec950d773cf011d41cf657d4bb78de65d0314aa64740e2856f3de397997c7a9336d0e8b7639f6cc8fd60ad66de7fd923d26396509405b88073448b017b4411e68b16a1e6082ca77235b6a5fd4d3a66e8b8d66e03451fd4368746aa42a8621b80feaa372212fcb551c1514de3bb446ba654bf4c178e1e9295327a6f7459f32f7b976c0d94f5b98669345a425276dfcaba845a6bb6823d7ce276c13d303618d2e7e12b5049db05afa6ed4e2ac45a273a6be83f9a563b22524368988d3d5cee28e63e878538a7d3748dc1e38e05ef8e2190000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000868ecac841e9397229ded988f3486b2bfd2157cbe5e196da8c37d0674c68bf6a58673b42ab59f2e5917f773c6491bd4772676361e37330006d5756643d38f20e729946036ee6fecac6f2be927beb3a264af6183e27fa54d2e9b7c5adecc4b51d657b72cb5ed4a9c91ad6a1d9802ae6185b5ae17e6524c22a1657c5400f03eef8002ec2a305cd7c66750c0418839e71502d48a70efe6ffe602fb0660cfdc19cbfd7b8e04da2b803ad8798014c64e5534282cb04756d682f57658be60d9d7af9d5aaae0701d75cd2d2a8f3618d2d2cd895a1eb04bceccab39cf437d0556faa1bfbb3a7e295bbe0e276bd3fffc3f227861b107fbb16e36e07991692b744b61e9b33bb94ee4a54ede745acd41de6f53f177def87a2e4bd61ade0c904b727445c486680382d740e5126ed6403e69d81437f66e7c12ff910e3772cdab87d01571837622017496fbb452c23590e4a5708239f216c1801b1dd806cd75b4401c104f566ed9ddfbe17ec8f99ba384b05aa3c055a03601811aed2af923188a49ad2dc5af1ad78ba8ddf53a9ad809d87e5f83ceb4852858d7b695c5a38b16221911df8c2bf88cd3eea1d61751a7c7025c22ac22dc1282e5d04e9fa7187c0e5a762a4741432b000000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48401788d1676f26245b0ae9d757ca34a9bb1851c63b22b0231d1c320674cb9431742e16e28f0b890641cfbdb3641c5c5e901e08051c3a26ff0f40939a5d6926fb26056b5b8f432e25218c44d0658cb9e0c9f3d1d9f43081d7faa159eb4fe6e2338a096a72fe2cded05dd68f8016c07b5a1833d423f87e06681582c71459a3aba2201e4dbd28a9e1da7e2cf7c96d55811f83ba7549e2b54224fc503ab056519941dd0a3289af42df41edf79dab4209ea12123cc30b24c21f94e5a9c3a1f7888c081527c174cc2b7f7be60326b66980e129bfd1190cc8741664851592f643940db426150a59ecf36999ae1e9b3cc670da7c52e9be8a559b3784e85545c5a11e1f7b5b2a249d73369665194207a3dcc4b13829a266c0a3355879b065099f6c684d95371b28f2284bbc78d20d53190b1fe6f71a6ed982603a2b21e7db8435f8f3c7f3482c67dd3d7a1c590ffc500836f8cc007d2b82075dbc55706ee5cbe1f588a642d020698eedda5c53674f1fb8c882ec4f956a08c28541e76d5b7cf80f6ab8969c2d177916a75b14fc75f176773ccfbdad1d35eb1ccb52634033e834784e4751caed1f9f3b3bd03bc7723058004e904ca928448d28c87991b45487f6e55cda4d588518b2dd3544a9d547ca96002875628545a2e9c092dcbf007e7f1ebf77bf37aa84238db697a3d98fccb42b8c7c9a8abbf4f44d3f999f97810b70632c752582773723b19651c42f810fcdb5d9c204c97c74ff6686b0a518d8c92e1cbd15928b6a5b1ced3fd535d5261c3928c746a7405b44fd6638a0d759db375c05038864a6fed1079bcb1b394e4a0df0f1637177a79d2f415e730816a7da8092f2ba3110a8b18e2524d664934af3138b6338907a264297daeb1717e107837ea1f57137ee4a050b2587a08e11eee6bf0683f2b2313f840ebd9150d98b554825e08262ac46417122094fed93e885856551e71855f3b63f86c35776f1878287fb082ab6d4d25d3ffd18c0fc57cbb11a9ed8130431a1abe1220a7669609102193788e4b99f9582f80321687d048944bb64f2636743601ac7882869f94d173081f04da95e8ceb40aa671de14d48ed847b68adb715dad8b364a1e5faff8fe31ed344d083aa97f39b825513241201c4cc154646d74464c1583565a47ebb92713030fd0030181407613a060bffdd1650c0245b75d8485dc2fb3e3e1decce7cce1e4206a3faa465bbbbac3225d0f9cbf027a183df7329e83d23d8accea46181ed2365878ae22acb43824fdb1214e751d6855fc51611278855d8683bc82c6aa2ac2ca2adf4a5b8598f4fbe671fdb1886dbb3bd1287c8919ad051a2305648729828285a1a7f9732431273cb2e129bd5668f2300008cb2af4ed6a665362289b196875dc7abe1b78ee8ea794f91004bcf4b4a00b95d54e99429092655d471d5d074bf16558cb28f3ff472331aac1d936adf519b16c947f28b1a7d56bcd3ce113712740c85a666ce80f4fd3aa2701df92c87479d4602167e40e9f7b0492c4c7c7e7213442b3a0ab106aaa36580d405b882111ba674e0c88a7b9664d110993d803beaedf13e7fb706b1d61d6ddbd227f50dd460494683bed7c098ab81bae167c9c130dd2284e39b8f897d9eff292c1b2a64ae2a79dd52423d9679c9d3375285eae24382620514d74947cb7a18aa662638855462e56a726f6644fafa5532b4e119e43613c7dd77540131aaf5a4561718ca31b35321c16666777ec7e3822f5b609b7722d0bf5aab0c19249890181aba0ca72a93b606892be12203eb3889da4d653bd91ad750e4cc19683b1bd126d8bf2167e8fafaf3cab1744173373a2f2879462081a673775fdc98623900d6998cd52faa1d14a0cb84fc7a552b7645f3390098ea3f8e11b4d918b386d84ae030cf0f24725b8501316881e80ef7788300c530b8dc978e618a1f46866d35e846bcc02e078c2c5ce92a9e494fac970c14bd97f6580c52dd9ffc7b17a6badd3c606a7b182df0ea352cf242bfb238ed26776330dee9bc6835ffab16d71d5d70c91cc7cf6808aca19b3a486702fde908c3c622cad03b232feded65b298e78580b9ea2518bb0aa4a7343d3ceb910f1eb854bbc99f584e453545545077b163f594154e5338f619cf3c75c792852d6c3f066e3e1188a9f338dfee3eedd8d9df04afb37817a834184f365ed781e5b414b832bf9cbe94a83b75b3d483a2413819a152877633900a2f4185b9d94abecbbe12af7eb14170c760363b3dce565644cc7c46f7f08f2cdf1519905c4986d706d7f79f98589e7926eda83b97a01e0f05d80ff92ce4399f302607d089c327c9cda6254da48836de31383271c6da1a8924ea785bb43174186d19dca451c04c3435966ac131047fd58ba994976f60422c6d8b4dab2686993257001aa0c8fd2e831a3bbb5c08c9e78eacfa430c6e019492b8c2fbdbea06e3471815725a9e1ed1ad0d7627f3223e55be8e6649a77668948736f70d914d3f7eb522166a4eab2dfc61d545b3c0dea26ad71f2fac471df8d013b019061294ddb9e8a9287d0b5d682dc5f52829ddfe75e346f6d6c33e637a015806b1734f3384e89d7321d9b7168be71406041ab63b59f50f07d94b9d3ca119fa82fb2ef359f11758f502405dae4da88d1d1c40467e306e23cbaa55a00145e40ac77c297770c95ab0330050a096afcd64dfda2977740a5f09cc8dedd36b186d00a758e03cd8eade8377116a4aad78c5f59c133f449afa750c129dd0b23ac44ec79aac03ebc5f0670e340a3a74433ddb6222135ef24f33762bbc70bd685f34aed40c3ed8f22a8c1691d91f8bd2cad488f2690fad0bdbf6ac1e5757d320bb8ea5f5fb72edd8e48bdd10201fd0dd15070fa844dafeceb06ad32d74b7384d4411302537b74989d7b9a356e2401150e47ce45cf55f107e2bb02253fcfbcb6830bab4f20741fbecddd42fdf1dd7174ecb22f10411208ae2c80402b5141fa6b45647a34a570fbca45bc8942334192f458a6877e1993ea1006fbcfc42f514de50595a64b79505e7b64bf9a7e1409e292561771f3fed8dc9aa6082beebd1529346efe39819f7e60218840249fa895f23426b050365d5edf1a06ccdadf6f2f19adcf0c88c515b3948426e474edfc91819b9b181f02c6c52ac78dc2a365b47fe1361b3a0e3061528248e3f9dc46840cf27403705ee9247e5c832f3f4f53c3edc81373e4fcadc6975b6fe726d3915e060240e446ab1cc66ce3a58fbc502bec2e7f98ebd4a7931a643b3347cc22548fc102613cd86c564e2a68d4bb0234679a8f51abf9193d741b9f4fd99d2e3728cc4521165d3017fa6a975418dbd6a414f5fcba259ac5cc867e5b3988b91356b7aa92f1b4ee63c0adfe4a6b0139dc5ec5a353390f3d7b6410b31bf2228f8ec7261c3d5301efd691ee132603a08e292bf9f07c9e7cf6d9da95dd13e9cfaeac75a56d97e067d59c0ac88af3d6ccd195e5c1ad735f8e0c76c6615b5609eee325901c0569d0e4ff27cf2b71cb0c70973eb38be35e07e7e98257eacbed4a4fd5d4fb635d0d619117999b28a085786a92d46aa402b10e4657f020ffecaa22cc407c7e250066a0759343b8e0f591d4b874b9c14290a27bcd8d10b9a61dd1088f035f79e2e79fd046d50241d6351ba91b217de20be599552fe75173d4d6ae95c2293f81cf8c43a06aa278e36dde60f7d75cc97efbef43dd2122911c97f76acfcfd334776fd0f3a0cd475c8e361f83cbecfeeeb01ca3ef7905a7f2877340d05be917ebaad834de922d509ef72e769b2994b280ce44cdcbfaefe58fe6541fb47818cad3e65b6c1081523ad17b3d125156a4947e067d56963e4b25db6a890dac7788ac455c927201d13609599c76f96ac94795d7d4888b66aa1c32d83095793b727fd0990dd2f313f20fe79e09ff8240adad3418cea7e78fd9717a25c1f4f8d2e47e346ca3ae67e9428f6890758ccfc7c3296674ce30d643124ee6e4a153529826b224a4be13ae9482d10f9af28471d2e14a6ad2ff07bcdb25a6b503d1d4e687b0a8b0ad9de721aa52344c98f19fc8dc9c633ccb7cc0439c4fb7ef2660fa6ee251a3df62553cf6076004305aa4384c1780452ec245e8ec29a30d9bb894b6ad0711d1a68b45a6373802e9d6a9584871fabaed07998a0b67b9e3f63a54661aaf46c2f89d1f320f171091d9a07db4e63d3ad5317f9b72625cce860c8610b8b5f1fc40a5773441e6e7c4e12efc583faa5d507b8d48c411cd508dd09abc7436bf6eefec3e3efdc91d392cd2d92e464d6f593225f9cbb47227e1dc03e2043da810c06ca8429cbbc26caf2a30eac612630ee2046f4633f030617ead9925a7bbd22f3bc23e76b8f89196d1ed92302460792ebed0a0f715b3a16c32308a00fd1a5135946334434166b7d59e8e01a0b84e8395f873c6e8e278a4f7a0af1b393c3a742463f822b85882fbcd968f82231944e59473a7ee05ba234076a28cfc2930f8808c7c5590a7fd2f5eee36d7e27d7b2194dd21a065453e833097168ef53451223fc0f0a2da9d42d5e1228c5c7263e681093434970d599702d83672e862d01fc14f204aa26044e7705c718ec0708d9b27e7bbfd53a16d8f41d1c82bbbf34504c389e556668a59fd3c46385fd572c5f62d75e648c33663512018d69c4327980d07ac663f083320fc98943331aa0272b19c4d26e3715a32f87b16f388ebf53fc99fe9ef8947375c019c31921955315e5f37f5f73abcc488a7019610b65537688a5dbe0318af9c246250300eb4bcc01f16958a208e3861640825db08f2a121fd9ea4711c357e1fa7dceef3c2eae31128ce15b12d411f80d2a38d881f6b96baa570d9f62a9f49c68df8c36656296a80c0b63ec74b0d6054b0a1481fba6633f3c9cdbdfd6fff889fb93c60f7492855105118fcb693705d78327812f8dfed8c50a0680f09d245acdd2764779430924e905e37afa0fa3a2102091e67502e6a0428f4d4da16e710ca2d0b4a682a78de19c0ac95472281cb9552c9c552499afaa646eb32ea43bd8a55119937e2d68c8a47c1e1c1200377f8c3c525868dc0e71f71808ab39ab89c0b4e5d048f582d310bb8c192ff94e15ae3ced3e4802ce0b24db6362b926a24826544f6ef1d43735bab7280b5872262c41425eac80e2b1a68ea7dd8729b5ec348698e993fae46f960dd6ed0059c7a313c8328279c2635ab3c700bab48b05442c67aaae5e5eafccc683a4961f90aa5cacf69d969162c2279827c3892326aa1d1013f054d51f5f2211ecfc4b267c3ca68d4de328913ed81ff02f7addaf6dd019308ad8e6557fde27ad8a5ac9283064d974c92de75ca407633ce55ee9bc024712a8643daab795c33ab3811e9a1a45437518da3f8ead3938f015059d5db89a1dd2e043ce3750e05b864b265407209e8c93f4eee5014e0891aefc5c4665a78d38b7a7a74581006f8097b46dea0609d306d9d640574df8e74deb7bf51bda7d3b21cd96ff6b060e7574bb78f78c900fa7a54eaa411fa99d3a6d21a16de52f255dba1b65912a331b157b47586ca51d1104a56dc9b601db73e67620481449f6681bd54b1931335d369d1ec79d580a5212827b8ccfe4022e3fa9cda278bad7d793fdbaf76e4fc616ca739b209616c51b0e5065b575cfb3faf9cb9873c0723aada54f6f5dd5c7aa0e4b07a4c7bfad64db23b0c0be62d1217c31f63044f785fd27b34793d4afd9b35837c4eecc7e0eab602e269a9a50606b2b61a68d7ad1d15f49767724e9e97cd352dc83937edd3381320a193b40a470168d532800accebe06c26f7040ef1278b3f161c35a1482b93b08003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000033118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000330d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000330a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000330b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000003329a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000033141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000003325e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000003312978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000332daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000033189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000331159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000003305ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000003305c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000003314d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000003303db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000332ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000331213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000331ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000003314fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000332b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000033305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000033280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000033223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000003317a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000003308858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000332618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000330f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000330e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000033172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000330b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000003305bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000033137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000332e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000332297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000332608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000003318373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000330422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000033204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000330afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000331998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000003328d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000331da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000003321d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000330ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000330e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000033107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000332f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000003309726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000003324f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000003303c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000331fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000033205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000003325110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000033283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000003321cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000033094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000330c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000331f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000332421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000331fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000331bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000033304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000033000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008fc0481aaae589cacf509d7479cf8a290141d87ca0e9e726186772a7b41dc9de8fa45f008873ed3ecc9f176a4ce285361a44cfa8d8554becd0caaac65f847a87a8809ad9557b3eb9ca07deea11bbaf2e50f4811134a8a1a419af5ebbd7c7067efdf12a9212098b44a3c1a59dec0a68eef960b8dba6665e0613862cba87a5e565fa6fbb2603ae2f852c20ad0c806dd2fad41713d06e1b274d8f6ee02b931623e619492d8b1e961690f40203655ed6c8571ca6f1690e79cb4edfb9d64a504a29effad5c3e9eb13e353610c084f1fff42efc6a2ac8f62a954c25a0a05e899d583bfc490aa3831c05ce8525063094a9cea1deba057a4b4f51854e0967ec729c695f5c570b1cacb409ac26e9ab13877ab694d2915aa6f838987da8bff617394069bec3eac299e15295febafba613252d21139a0f323e514a873513f11ad0660d8e44847f2cea6395668ee94edf19ee811a0dccbb288e096b25df6170db800f47d2bea692d7382a5852d22fba6417caf5485ed8004b23ee29ac7ecdf3a6225b0459d679ac0310316dc5b99fbee957c023a885c308756c264bfe842bc5c086c051b0e016fa765fa349c4c590bb59a08d52f6f92337c32bb5a31ab3594fad6941beb185800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d4dcd0418441d60d6a1489dba17420ded5df3e0057e800bb267879e099055cd46754f13bfbb07dd144f417b306eac3cb51494928ba167f635071b980a23e2bc22a1b5aa32c5f4c7dc3d1a7d0ba4eb914818ad0a24de8e91e6f0c7b4a2fafe760645312967dbd4f115c7e3f14db655eb4474750a661adfd39f20f7127428d475b81246ea48d3976f6c6cd56e5ad4867774b955c98138dc13723f049a792b6dc9129fc17c998af455fdf9666a4a145ad3ae7757eb854632a9adb0bb9944fa4f05561c4da4c1365893d2baa497e8833dbd05abb21dc7c1c24a6e60a03bd9911b8e64504f6d7bb1545b5be39dc24ee3ee7beeaf503091c704a3fe56a61c4ee80efa221a0bd7653fd6c6d2229b3338cbe13b712d4613b6e982a65ed29bf05ecc550fb40ae8be7e3a9e863df38b6b884ef0b8d0fcf2033d00d7e4ffc52cf0a2186273fbebb9f9f47b2eb2c9a996ef7d449d9b19a8e4d49720e1b318bdabe5675947531e932f648dc230df93f7c28dda9840c7d6d9fa194431690bd979dab98602089f0bf601e335fe846b87e977a4621b79c0bcbe9c0690e954c1d489d1cfcb5089b36bfed99f185ad6b2315e5b646a1b40ee0924fab4e16aee2b04133c9284560ba40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aaf0742916ffa8d615cee8ec4069f1bf3f5fede2e3447edc5adb8abcf79e290cb3a53f64a13201fd07d0cc32e1705a7bf7b6b08405b3f85b2c560cd3cc3319e916e981caf1165e015a4a4b812890cdab2d0a4b2754120f5414b4d60f4754c1c0a14ce16ecce87bdc05b9e108385bfebda5c68a15d0f7d2815265b1c7e1dede64390f735a78772cabd4060b5d3399080fdfe3c14794405742256e9649413be43686bbe8ca973470a5eb160a68fa643658b0c7c6a9f265928283d9fe62e95e07d3cd7d24f30004314b78be7f47a059871fb500955c56d36996b349217abd4551f6b59214fc887e688a9aa8aac1dd7212c8e17b2fb56935bb04b51c479172c3a6764d53f79c0f7c359047a785a2782686c63f82aa85c460a19ada3341b0088002dc186406f577ec5e6b90b86ea95181769f43fe19200694a0d31bca4dc825a1a34c1660f9298ab5d3fe43d6e9e25f8f0cf631ea2eca44e1e961ee2b79757142d6c121c17297416b836c96597ca075d88f237b09d28da7443879686a85f735f31d9786576250b8b5ebdfb1357758968c8fd2bc0525ba79d0282bcb405f71643ee996340697a2edeb0db10cdee6b77ec7e34314546c67ffe83e108bc5cda0c258c77e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008997fa6ba4c3d73f18ac09af95a3223a580e818f0cb57784817a864aaa7d167bb1b1294c77dfac5e743ec67ab2dfe5d60ee7f252ab1d58b9aaf1b81c73b82f681da70c9c77b7023b6b7171dd2cbc2dd18198945fe707f127e1f0d8f896bc525fdba5ea619539a72d009a42fcd1477c27dfccb35429fa4f01824a3d1cb18d7f8754af8130a16ad45fc69693e10631203ba45f9f0420f51651027f0fe47e035cca86f0d6fbebe64f735ce09ebf879003f317f19ee40897dbc84d82be5a6cb8266dc8804c6d5a638fccfd2011d36dce676c4164dbcf78d05ec7b360d7446da6dfa2593f726fdc27f4737c89ec6cd10d8d181a0b9cd73877d2725138e3d212465d82f107147039a78603850e698dbc5a624c21d50584769cc60c6009349aa7aaf522ac296d14c33dc31c50f4c455cb7197bfcd130a9ccade4d27a5d55a97206e18aeb859d7650fb4b65bc88b674fe10dfc615b13fca27cb811d3fb9f00de091d3a3dbc6b27c623ff763b5d98a4553bab0ae183f5a185a1c14ffe89fef85473fa5ba7058dea7a7cb5ab22d72faff25acb13d90a060ac4e627a1c765181954f4923c3de18aace8d13c31d9a63c3dc48b0965586afc7cf9174cfba44ddb93ab36bb13f90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800bcc6e84d5d846f144564212a050b619055f60774aa1ffafc3ac81c3b7b9286bc9177f466cfd6cd78f4dcce7438dbb90c830d4f711bd4595ad76f3c836941541ab870a7cec0630fd6a7bcc4ed4167160d5792426bacc9c629930a75db13d0d6555058888696ef861e97f691fe904c3997237a17a176341ab4cf2f9031719b57425a9f07078b50ae37d9a4e251e9ccfae4e758260a76cf8fe71b1bf9215de7a3c85ad57092bd63b763276bf1d02ccf8977e9469fb4c6d5c9ce035a8e50ccccb932c42b263ca8f64d35af19aea570c5ac5d9ff64eae5139fff42f883b2a2fb20d0f18a64df10081a51a46cb54d8191c7780f09fb61437acd5a5df4a4bec42893272277d468261919204dc15b737d220b8f251b4e5b4c57e5ee91fed00326e8eef73f5d532c70c5de27341baa07aeaf30f9e7fd76478b22de575d4923dd6dfc070cb6878f5343bcb0591db1a59f3af5d739da21e816180fa2912f9404772f6b1109e6fcf24df02e6b4476bd99de934964179e05c3616a6f7c0a91af29a5a6e7c943be24854213a7c63f1c21e81e3bcf8b3a689720a3fafdadab8c1167c296d91681ed30f9fddd827aecfb908ad075f52cac51473dd556b1b4981319e69ad0af9a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008315a2101f256e7d802fac33831316a839061eccff6ff7d628ba605623a462b36196ac21be2dc4e52990a0b9926d4ed14f7f2c800f362dac43087fa3536f5d7487d2b3cb44ad19e926ad7f51a363d13459823954a806a671ec2a5ed3e2427156f563ea97671aac3180150f71eaec03cd0733d87a12d78286e299a027f6f03d680a6376373e6e61820d86d2b94ff82af311284aa8d68d380450e679de31c18cb9e7de714c4be7c4c88fe8a6382f2d0ae5acf0347e2eb56d9f616366fee9a3c4f937fee847a11c29301d9b10857fcf212be0802494c77f9587eddf2c46bae3c1ce3f191965e0791b554441ea8cb8e0f51d7a133094bf71eb7e2f90bce6870a917622d3b8c2d236ea2095c8bdde8a3e032a2960cd3d72227734c4f9ac78dc8f48c446d2ee448db2cd3e63c3c77a428b680a2be4a77e1cfa6ce589051701532ac6ce2e22f857f535f28489e21a225dde9e08074137eda2481af5a59e747018559293b147e6967556c955a8aae11594d88a79be52a98f6946db666e4f87467ab36924517b69ec158f6f57171583041d2b4dce40c94d5d468e4ee3421a0326f07b014a18ebd45baac739aefe6f48a338fc35e7628f631e9377fa2634b31bb6ad3d28bc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000253eb3394a7902a4d61a226b8e38ee4f2de7312a50c098a97dca85d87131b806cd1b3bfbcc9d0ce08c219bea12a446e4a8cc2d228c1cebda8e65eb0199f82f4c3f87890bdd971ffc63685f0a3c9f1261f46664290674f537e7caa096dd82f62f9ad6a58b40acd4b7fdb2390eeca61f59092eb47dc90e6829072043f99f15dac2bddb37884d74acf88c57f5ca132bcc24ebca4b08a6e6189b1e2d763d9b4bac89f706750a5c564368c450db7140d953cc95b10e55e66af2dfcce30b1226410b3543aff725a49f7633fec52a00305e15bf87f46313e25eff4ffc362d7b54c4164e82f633ccae2efb4e98242831d83d7bce25acbe197ffe17a153e1984a3d6a4efdfd8b4e5a5bbf728d7b953003ee651641b300115bf057a86b0e2a5e7266e9a8952f70f8c774f857087bd53dc6279e9f6245715e619f7f49ea3a3a9e246ddc45700dd535d0ed3a22ad913bb8cf80129008627e125428e5a5da875148439ea6b5ca6aa6410b793662d737f4f5feb9faa353714635dbd62f8d9f03ab7f5ad68e518df89411e535638a5e89103ae6420804d79e2630bddd98750c74b126914c88a56132fc118d9c541398383f23434500ce71a31126d6536e128bbdc81ba05614254e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ef14552a77146725091a56d5ec37832322574e8c3cbba265471feedc7845ae0dd94a492efa4519dd7eb010e2bb23f803c7ac07f13c356fb92f2b116d11b3b70a67c6c48c33b9f764426df2f636a00e600c8c093f41ca523cad6823321c5b2d6643c982ed4e90061cb35fd085feb97ca98466124e398a0479224b712d051facc8a2e27d2103ae8e86fc08bc48e868452c3a13aa688b679a30c5d380cfeb9bbaec492e4369ddcd6eb90f0505c791a5531af4b817206d0ac7c7490076857204d2dbb953bff7e3988ce25e11bc1678ea042050f839ffd55108ad8d6c9f0e4c542a824663a53838f7d598edbf8db8c467c408c1dff6d5e229689a7c032600195ae5512047fca0fa4a5e5e70da99a571d432aa62bde928f4a5fc94e66b87cdbac869f1b5b820ca7f279c0d3663a72596e1c58b29dae6cfef5b06f535c29fe3f9b40ca5c773c963d6605b2ad72021f72a62bafcbab1220197413fdcd67bfc70c0ec5f1827d540a8150dabb544a2494f4cd6e6264e811d66a62800ac0ce5ea1584b3f7bff80f638fc309672d312e312d4d0e6648fed8eaf9a7691e127c4ebeeb8bd339f8e2f599d07f94468747522fc7d83764f232d07b3da8f4d75b7727c30eccc0a8300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d22efe07913805d77124747bd131a6e02d6e6065b3bcffa706bc5ba227267a39dbd110a445d537ddc4e4c9c3d202a87e96bd1f6feb3d438137538f97c401650c697c2bdde8e866455198de6d2e9088ce9ca88f1eef2dc7e89581d97465606474572dba7b49a6557b54256c3aa21f53fd045d354d2c03545068b2294a7c4fd69739ce4bb9fc7e346945cc84dd26ec9e733308ec565d2557b6c041f4118556cf13a5aaee6783431e36c5851f5bbccaf255fe4cca7b6b3e1088a2e47cbd3f78a11494acd74f8aa01d2baf8977df26f724a79e47d650a36cea89a2a7836d96362a008cfa1ef2d3163a408a29f071f59d9fdea262c5dc220570584b62825d8fe5c05855635f34a2902335aff9158b3e4084aab1e942fc4d9b0715dda2f4b92a036d4953a871a6ce01033a54dd63564c6fa07710dbc99801742176d72c85d5dbba8e0ed3982fb096bd276e9d95c02fcaece146c6cc60dd29b445aa8303c9895a6262dfd2e5e3cb555c826a05e853027493455b2faa1cf0f4c42b1bb8eea7d40f6acbabe5ffa6f5b51304ddebee3b738584cdc3bce8af631b5907766b87246a9bc0572a2904b88c0a096409e6e0f3c48975b78a71806c4ce82526a111430051eef0dea00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e3fcb8df2cf27a1831f6a554911d40b06fc9bea00e771602bf443cbd3a89210474935873709cec73309dce016f0209a360eafd4b508f3a936a1ecc996cda9e0b571daed183e5a5e0357e87b1203a270d198529b5506697499ebdbd26f9b4d17db2e2469586e4d438664d404e562e34c20ed6b31d8a5c63acbe7b833d80a90ba8299bb171b96d788565703cf93e94b4f372e34401ac398cf47bde3f5fdb12f19de8d81bc370c39071a38d8af16a735e027d3dae0ed7e3c78c97525b636f457e81343a0333f64325b0fe59b158acdb980839a68e9e21a8a0159c469ce70e2170a1f93e275a2be59c556f0d42b1e22b678a989b7ecb8dceb42496acc17d1e5051e331d68e402b4a628eff43d865a7f9cf712ecd3d35634a92c8579811aea13e059716bcaffaa98f7f2feba6de26913c0cb741feea432853b5fd2516de5c4220ef9b52287f4e4c542a38f4c841eb3c13e85d22b52aa6b6c01ea5daae4d5a84cdce3fb64f8de47ab53a9eaf4de50e8c2287e49ebc5185568b7e5a34079c2db2b893ad8646fa4029bcb4af713d7586cd5d09fba622d04260e5b74ddabe24c336f75871dc209589e8c32cdef8d620308e2c52cf73581c522eb0ea346b492ff036fd5740000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a05f34325ec3c833072c07aadf40b278849440aa5e310329ea4634aac4dd976042d338d9e65a68767bfef7958c7aa879880bc6ecc7b1d44e32dcd36de728cf8f717cdc9a144a3fc3870bcebbcf71f08d3fa01e376797ef8759ef063cbc70811d4317d4b790076b8efbc22f83514d72a116c8e3c5276d2c83bd4d4e2b62961a1fc05d8d168963610e0c715a431d4a1af6b2ef9e5d78d9f780f689fdd0513ad1daf2596526bfbf5f9c48d8ebc8cb899bc373e8cb524f4126e8a32dcdd9324191c61bed3e5e3679200233ae30def6e9baacbc4ea5bfbedc3c19db28629e494eb025e4968b322a4521ddbd4f6d15318c07d73cefd24c0c90eff9b35fc6ddd763f1eb01a46e68114d15ef614c5880c79117a704725ab49b17da10cc2e0a31fc86fc983c3e6a72720c8e7dbcea6f3e4bc0c6ee5b097b3a6de0ed235e263aff052f5ad19dba20906d3573a45816a3100c9b573d70588718032296d6dae6a67e6314a8c53191f27ffd0eca5cbb8a5a96a1b512a7fe861b5391ef00a76eacb2e18f7c3ccc9865f839a8bb6ca5a16beeddf3d65bb8f24be95bfc794e52246315effa88ebc54163b1c810ba4192d738911fd771fd5fe1d90e57b5c4debe98841de9c8cd09f00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000220e48ad6c48b64d94f689f6967c4eb92775cdd62207d080673a23e3ffdbc1c0c097e81e359b6aca234465aa4976c169b4c6bf6e4c1246d42419f04ee60e2e11d53c1580af4ba1d2f927b8aa73df9f32dddcdbd4c02af47abcf740e6b6a2a700809387d3bea72a66518b308c20bd82bf41bf179bf5422a74f5a7d75af883a187b8f401460e57dca5ffdfcfb002fefd2ec23fbec58e8f1464dd4a57d462bf05bac02dc9e11fe599d0587df5f29f1e6e7155de80af9221fd47dcc3b158cbf062840b0fe2344397976ed37a5b7061419fb0bd9d812f83724d3a9ca27466c1dd1a586f16fdaf02aa99e8b22d1f70f0b4b3b45384a03fd3b5c9a45d933054c607ccb7ae775fd3dacec9703f0647b90d3f3176ccbb56c439f3bf021fc53f790c1f890444284ceda90429b5161c8b69b3840f7700474b0f75b919b5c304f2915170aa5d63dee1bc4c8c863a3e8e24132442b5bb65cb45669e2457c3a7e1c54cc504ba1084b13c888f933154d9aea5a0fe081d6095dee02fc57e1f2fcc50478c45ad7c73f9a73d4eb554f8d07ce6a47dd97f813cdecab530c86148d878515c1bb5946d95ed9e2001c1a30bfb8527fa1224dd3ed78ecacb217ac9ad0944e9b9d3acb9ce68000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099b6ed8c5be584a7357fe3fe6b88031020bdc7a3cb3056d99707515d4eb077530181ee40669a6b845f210ead47b58d31421af6391495abe847b6341d62b6ad428ffce2dc6bc298712619ae5bf6da913be2537ba8aadbb7465a0a3ddf379085122192459be9869e88d671fd444f88cc5fc4dfaa6760ef57eb2c3adbe64ed7a80364c9843c9cd841ffe556317cfbd6b3062863b1828889486ff3641320583f044fcf146117020389d0ca8d95fbd7cd4506bb6871c060cb2ccd83fa675158b9b448ea80a57693e41cf0a14392c7e85fe19e03fe2e59a3c40ae9fa5170b9b620f35c8977dbb4e280f0495e038a9705a2834869c0a407e5cb1a8ab90b29b4cb7385ebd130ea1ffade59af393894986c01c0bbf92c68682456522674f80decaa98f0f69d60d9e43508749453772f941fe7d0065159c46cbe364b2236ee3686c129aa43fa9dc4715985c34378721e811ad33f40fb96af96bb217789c61d3870bcf4b652395e7a160e42c9d388ccdb643ed971e8dd20dcbde7fdeb25515a436cceb82ee3dcb3bc50f3f0b348884c6598e8b1f2730e4f3b23c790aada5ae056a76a677b13c4027eae274437ba5da91546e715ac215849416b8e94030e4c37b41a24ebd803000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094f42f9dc0ed80ef7a9cfd9130e3b45c55a40b9e064963347b2c8567c81693b45b5142152f405e21e2350ad79a7a23c6ed0f3779e29a998c19d773817fc4ef1e76b74d20377ff719840019fd765e91c1a262d4a59ceeda34f3bf67896d89213f558a82ca7bc4f21efb8cebca409629fff18ef4495d2c6099b08cbc9f0369a02be919199e1eca976421b23b5dea8ae54eb4f870d1992a945031cba4e7dc467850720915b06544f587ca94a9110f830b7a353803954218dc1c2cd335e98fc25994f3f8e4557c5960c28b9e4e80898efcf976d714f0352c3a2990317b29e424241b57897eef8fcf1aafe44342f39bf066e92f928270a8d3a28e81fcca713fcfb2ac2459936ae928588db4ade4e8aec576bdf811601ba4d99a8d09471769eb84dd840b10d3a2b9e3222989d9fb80b72113edfd4fae1e6117cb8e13a1a9e67b13557476d921346ee3f21d69ffb5a434e644a9985bfcb312570173ff494a709629999c556d7134dd431d00abc2bb7846e49da37e0038e79fde1377fa8c1e94a2969b96da2ae71acce1f7f8513fcf8a4315f8cba437b31d5a94358c31e48a667102ac3213501107143c5e6a23bf9ff724b413f9acc7e8bb2a566195baf98375dc3deb640000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adaf139b920598105d0626b424d0a4fbcae5f743d4c058850ea1615340c8329c9f543fd3a58156221f33c6a72de2027ab308adccbc83e91f3f7c262fc5e4bebeb010823c8fe086cf383cc114c962e2d0a153a1572da26b6105cdd9f1078586e667d80d78fa6c213ff8069d7cfdee81cf62e58f91b1c5037bab7ba954ab6721d2d142f67844242d7018ac817c34dabc3f5666ee39245b59f93627f9da8b29a525e856779770e64ee9cbc26c64a7cf4eedb022a6d83458e3583752f54335d999aca740ab691e5f98a2734998bafbe206b3daf4736ce6a197de685cf7daf000ee41bf473e44b44b125c1e73a63f5b7e16d162fa133bd4748c7fc282a52da105544fc406f1a6b69752cdb97dfcdd8edc102ae97528bc44810a07d8e9035de2cfdeb4ac56fc76d4cd713579c64565528bc37409c37b8b1c4016bf7e788c4c76389e7561c9f78b3236a38fda9efc01398ff4688ddb8a6ce8003eef6273beb16510dde532cced4e5a4f68bac310ad25db468fe82125458896db27132954f154db59e4b1f96091d2ac96acf54747f37aa99253d22bc217429950fc4920beec7167fdfc6aeaca68dd015f9422bbf28809429fb402f81664e5c4053802f8738096d94598630000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012fa8507b8056e5e891ba46592867d2151756e4e22e5d980409d3bbd7492e909d96970e2e2edf1ae37b8e5dfb52b9f442a7f7f9172966228a3ca131352bfa97267b5e19bbd2ec35431e0fdb8ee55d187dbbae7921e8a961bc9f5030a0dd6e9d1cf04475e8d9a586334316dd1ba6240998adc2ad1a862bc8ed9347e21e49c546f69144e051985fd07ba3db01174bc75d1e4f2e02c66db98b3d0619c3516c9a5a4c0803c57bf72ee752abca280648879fe25e93b2b18c8370eb53b86bcf787ddad7785980f0c8fed9ca65ac7ec4b6bd1adc48254ddd7ea500dbc46f037b68206c23854cf3390ccbdf41af4699a40a123e5e21e3d5885c85bbbbc51e9229962f13006b4e0ad2e821f8db690230245fd2a687c939304d1ec414670db9c8f72b475030d1b9bc6a1d9eedf24e2c38bb14554301142617809f52869ea3cc278f03a90ee385aa9d3cbfcf5bac643fd0ece60fa3cf8659d03102a269df0e691d2bb4566d9235d0063bc854392e2e0b73efdb5a1a651c6f3c19849fc1cd05aebae6973364603821a1bfc87b33a23088a39e4ed3bfbc74dd9db108a3c8ab08fe935c5fa71b1bd31a698f0e3480a92e3cf2484fcaf732bd11c2581a70192c649ea4b7ee022f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afca02547a71f37aca7773d8f854c5f1e1f0d5a9d6b0ba372f6b6a9d3b443a666a5c60eba053133941d015335a8857cb54cf05d1eb79eb9ed7389f24f5abc359220081fb7cd889ae96d7b6cdc71a9f1e7ccbaa5aea10dfdd86d9e21ebc5817d5376f13e1519d7f4d20f5e0e0ecf3fadb4499115531d817886754096f4d7f8d11814e6c9a4eefbf1653f2c4c7219fd9222600f340462de3937fb153881042958c1e97d2861b282bb95e894ef216c7f6bf8623c132e730344a67019782271e7de20a0b22dd8ee2fdf9525cb88ed2efc85b3b8cf5ebd14efe4d99c38d1bf3d5942ba3210ad3400247b805b45593efa42d385fc06ec269daa14c671879188984dc5c73f0f8d10257911694516a425e9e24793fa0f7cf05e0ba3565bfeb0c0f3ed4d20f927bcd9d4969de4e08d7bb6f5c914f77ae6960c637870a4566b568324cd5db545b602eb2442e0e91566b70b81170097ced45858d02dd14599dec9d0dc3640c24216f721a1978b772a345cb127020696c9f97669679385982086568f51918962a7a2c59165da762950b7044e493d8c5d739cdcee3be26ad889a8ddae9a601b3c109338530e975911c6df81c545a70ce7c9a241756a177965ca82779cdc9207d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b2b47532d98d6fd8fa65ff43278d51301527cd6723750e6f35415dfc2b38950f7ac73fe27b73d18e7193cdffc962ce0b041294c62baf11f80d8dd1dd2322e8eee40d5511c73a89b659a16cb0dc6a222460aa3d599b4675eb0e480522e12f60f2294eeaab877218e894944e98a7c795068bd0f169e4f1302bb58887b1044476dc4bbef2032ba2b0875b9e477e008d5bd1343ee8edc4ebd63aa05233b04e35882127955b5065bd3ba81b420ca12f115c31ce8b9da817684f8febab5f649e940396703cb2b0d802c5ee49f39307d5adb91044f92b3aaeb85a677c55e797c8a71e55cd7b033cacc9dd63d387ce6b78825fdbc9e61cd9a46cf0bbb1707719cc6bbad6dee7d0e0672dc278e1dad5a1a5b5344f5bc3209375c9f75189f5b6a31a2100235f495d10cc10b43ae226c41cadb22486abb49ce1afb276727f2b61e8420ac04cf5e450621bcd17636c9e70bc03b07143ffbe17e48ac24d4845edf0f7e10936a940a35f92322987b06e7fa03ccb21f1a60db5e97a50f224012bc0ec2779950ffa3ad90b2f38f7a28a43991a7f7e6cc5968c3158a2ac4ef1cc90796e9f0584b1ccfc6f76a5a2c372372aea416974674962eb2bc21a8ad63f6091647c695de9b3b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001808a558053ab9daebb76163eeae7d13a3ec6e7447b8c04bae2e7b36de4fb0a352d3bd592b179bc741951561cb7584fc05a4da0bb996d3d0108bf9929a9473b25bca06db0a0742eae92c6ef07e687928ccdc3b3b1a0db388aee61e1a72e77aa5600e206a653f1873bb1c845835ea62a1a67a0632c53de456b9d8262947dc59a5d441bb27647851c7e1680ce291c30a330a46be6cf619e00993844fd90a10f220886ffceff55daa1539f7af71d403a353803eb505a06d079a62ee6e470f5601c4074240bc3ca07d91c7df4541b8fb2dcba6ba4c21f7c044538b809793d3d31e03782480aefe4c96ceff4378463e7a51faabde45aeb7c0d7601e008173f971307e5a33e57ff78fc9db77d47fb3cc4ebb1061ecbb6a8119b3c4779209087f1edf2e53e86d9a9a14ba211ab6521636fbcfdfd40f0a1eeb1291aa126ee272e363e9a5f97849b30cefc06254db602f556a6f94fdb1be41a58ddbfcf38eb8707e63e485bfca6c1a3cd5183de6c20fdb6391d7059e141d13ab584f638cf883345f6b6c49fd4db0555536ccce9e1b81fd1a1a0ceb2be3c967a8b0558f6747de5a8f66f466cba3cdf189136215f37904ae88d8f44723c5d8c390abc97131cd7ceadc104a85000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016425c6e17f428c475b2fb451ae59f13771142faf2c521b51a547c14c9a3a719aec77cc7ff66bcf0a35404f7f11fcb234fb7df5bffe47770f1fbaf5770a2cf170005070de318cc883845edbf014f93d4a8d0e5170d2d359b5a1fb319569dc1197f10ab7927fdc06e292d1fdb49da00176de04bc62de4232bfb23b57d897366e7bcd67cd336c92ff534b727d9580da44e1977c1ed98f55de60dfe1c8219570369e4da13cb6afae4c582e22a419fb76a0a59f052991fc8c985d461fc644de0a16f90363ad3420ddcef7e0d7adf4d85f5281e7c0406b97bef82a72f863e6afd51c1384d80b5bf81411fbc18deb75f43d0845d438997dce643164216f66f8ea663a860835155a3489b7027159a9a2d77c432ca969031b23c06d190d78994bb7a21f7e8f6eadd8b94abafd1537d9a901f973999b846337dde3707f91de398dd08c6f30c7202685c729a63e9ec9b1962ba11e69318e422edca289dd62508db29ab4533d16a047c66ee4ec015a87f02d0cce9a93240292de240e99dd802f87c30c6303c8e40ce3455487f76e96488b0c7ee1c6d9eb8612215df62c94c9f36225ef2f8aa81c92282da859881c1d75e37da4877e958fc1f1e6be4f95e19a08d4c716f546200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f9278a4d5e56bf9682dae7e44a1cfc99d965dbfcb198e134d7c48d627056c46d663eb5226ce7f4e0c2ab4d3f186f7210a47987e3ea2ef3a206ccd40c99bacd60c4500b97278d279a18bfd00c309ea5bfbf2e5e413e703c137e34940a7c346d4ce821076a63ada0fadb06c4e01ad274f1a067d0c080521e5243e2a4a42dd8b603f719b6037031d27fd79d26236130d5e6b8e6c3f77ff43269fce6988a2cc61a08dd27666ab6ff4cae05f0dd56296c2e8227f768c301cd4cdb0b606abc91ed205006422bac09bdd684c4b87765f2c3291ac217fe6b784cf9b331e1ff4a9ca32bcdd38f04e365582688f1fa65c8acd7114c8e0e146e372d7708d9c4e815b7fc4c7b664aa0cdf4c749702d2451eebe35917b93bc96eb13341f225b588999b32a2ed63fd48b5cf81be3b4a4ffcf02e7de0e6aff6a05ae5043b80ec6e9442f54e6f9643df97b7ae29909e10b04b018eb5ab8a40897da69f5b1b0ce1d479b049d06bbb5247f25d25ae5eee7805a84411b81dc2929de816fe48ea13aa584ab7595a4dbe0331d19985ad6de1f2ab492a4684ee9b97518c4433cb917a490ddb05f2ff0e01e3c5a3bc6ced8ec9cb5f31dbbe6ded43ac03ac233237666a6cb1fc198f24017d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024c8b62f2dbd1631bdf54da73e5a9579dd4ad635135d6afb47c91b8a86d30ef1b491e47d9bbdabfc47674d6dba31305491b1d4df7c98ca349cee16cdf64fa48176b0c8e809fc89a560e03e5f65716cf437affbf940a6a5c911c2c3639d701ca56ee43e707cb3944ae951f3e80f3e1f07ba9e186276271ec292720ed67f1e5b7fcbc06d65266443915eb207d8a092c915797ad531c9f79f647359f2d515d95e88b07123b146354454cb2c7ea844815ddc190a4e7e0040bd2d77b034966de6c81ef6db793b8c3c7046d060718177c94ad61f7d12bb40fa04819561d0b5c79a219293d5cc80437be18f6ad4778f48c3daeff047d8de4653c50d9acf4d023581df0bfcb0e9189a74d116d5cc7854b9f3b1ffc9b1569e25b4da1d5525d94f4e289475b80a787bcc858382fb82f3a3f3675a41a7837c3b3151d8f070b93c63300dcd16c3a8d1967b26632e12e3e543aa8cea736787cf59bfa03ec1e34a64e91d4ce0742afdc835b26701f9f6342547b8764b1760bc66fab02e1ba9ea1ff4dc10cd3a9ee9f5e29b793ea53bca70d0be0e0d8100d8a998688b86b0f9da7d188411f7690938eaed9f05f0c97125eb18613c287bfd5a43976dd2126dae2be9f0af12ec9b55000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017787d6edb7036d1137a772a92a52d7332ec0fab072a0de4c039b3e3092245a87bb30e72a983bb0aec18e67c87cc1570475b59dae42902f433b9b125f0014fa6a33a256e4959eaa4b3d5d1b917f8b0b1d4560fb75fc0fd9c26e6641943103b807c614a317063baf485def3abd4ab99aca26f85c81c9afd5efe6271a630faaf4091827a4414d6d480cf7b820b5193eeeb31e8236d3052261a6d1531f7de0816083c0a4c902f2b3eaca5e0aae470d0d23654829304f6287758a18aaaae46961ba6b0301a3bc0de757d7d94cd04dcb3662fdce12554eff0fe090e0f4b8bd94d69fb444235e276ea9a5db63aef37ed5165b53c2148775238d30462349bd55b8914237dbbe0cdaf9ca367384b4776d0bbec076bb9c682357af4d47a6f372b8accfae4d1d64793ae2776a23451e917a9366a755c47940a9446040c514c58cf0f553737dcf97facef0473636cfe9308a6154312869db41588a50ae68ac2cc28fec7c95c97b3a071590bdd46a17cdc990c3622f68b35179d8124ea16768fd121362663f6ecf9aae57fc4819eebd3242705a56e237363b0f127325969a66b4c3654ad9a70859a8a77d80df9f981674789a6573dac7fc5b87b4c6affd9729517763e18d8130000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a79604ae702d74fb2dd1238c0883268f8e116cae09398fcb743a21bdd2a412ac32e21f3d2a5ffeb2d68f78f98a18589dc5af78e1e592c48f592d276a7df2839daca27af0c84059dfb79116fa09adb3fdcff11833ea210d1a0d9d10dd114737a41fd0e96a22fb7c784d8417b4063a46c0ffa6dc4b9fe94669b5363ba107c3cc418ba9fd011a425b94dea5e6387815df647ba0bbf991f18b1063e4abeb3f06364984f633d703d2e5fc6e022b51906d7dbc2fef081a4337ae99a2047579d738b9ef995bc1b82ce0bed989cad9cc4adc17f44069965921557c169903c921e49b773bbcd446b52b73168881d3553f3f41393a6e9c1a891ca30d94014308c644672e2a73724fab663883bcacfdd39a7a799d09c9992b4a1b093b85a08ebd14c414a3c30d3e3f79d17890a1a3b781941e6983901c5b7c0769167447b6fba126b753a1a83362cdc4dbb81787d3e1b78820d62775686c5551f0ebc1f94849d2de853b938d20b231bbaa330154aeccec77527090d5b9b4a2d0ae683b4bb50c0e1ec5658dd8c276e2ebe27a0d7c5bf4cd0b895642f465e8579e6f4fdd1fbc32aedb17ebd19ab1b2a6dce9539241813ffe111b425c4fd04030f1c7179c90ce6d3a95be81d9de0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac56d7224ef25cdfa0e49e0dd84086bfb74e7a7aa9590deef42bffc7153ae7387fb9b57402cbba323833a4843d71ff2b703903922cc84bc32a608d480a9b1624fccbc730fc480b47656456c3b47f0c828d719f649c9fd4546cc5e896e0ce4b2541d4d9cdc286f7365264aaafa73f03ffb2c50eb574211be27817d29c4ee7a1a64a8dd1175dcf765aed978daff0f1157c8f29f2eee0f4e402d50960753f8b5ad004233c952c71ec152814318fd14862530aa8f743923d32dda6d70834db173285c95279c92dcd956966a67e0388a5fcfbfaea0062a24e560ed8fbe78ade8012e9cabd912b49d5395feeb750db658efb2101e53c8b64a3f1d0a33704b742ee7234e16258766ee18c8989f3c9a5aa0473ea7889e5a62ce15434f641d98b094023562dbfb12780f127021810faad2ef75cfe5cd6b0244945b705c065fe526e7caff4a294fd0cb829649a459b0b156e00491711c140109d5f995928709ff2a4f2fac40459745f59e720d7a10077e8608f0d62d6e08ee3c763ecd8cf99c96a4b778e6744655af1018a91cf11ee3b7cd1b5504e3a417d84e7f135c9f3f8a162f542f64bedc19b91eb7c6988bf32edd034bec1ecec346e9ed57c6e2b1cb074db2feca58a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d069727e35f94fac63ad5bc29945944cd1a056b4593769f5b0a88d389672f9d70b1863123827c705fe69987d2d9e9e25d9256a3f66951008af0f4f47692b0f2440ad5472ecb3cb059069965fa1a8c0eb209758179aa023ac5d330abf12583531e78f73959648e22842af04fc6de6b54cb9824beee2d9cf95ca29f224d3dbca4904063c114072703c19aea1cac967bc47251e7fbf0fd6bf300e8c5e0598acd7cc8cb81a89084b26b241ddfa5cb0da103d48f98966892e7dfe730c6993d25805314f2961d25972ba85eadcbbfbfb81c1889ae0f1cf782a646523930fa5d16a79953227956e2d0f19df6ddd5cf1e1162cc24ad16d14975499568e0fa48df99d6daa5efdce9da03f558f95a6054f635bb0505b19246395dd0080779eae73564cea3635b2190693e41abadb06b4126666035e55ebc30d25f5384b30b866f12139925313368178bcbbe06b7816c066aef271d7f674d313e225ecdcd72c7bd0e0b84d5172f2dccea829688d4148273a8952b8d68c16bf054f54351af6f99e39eb0928f01cc35e848f5053626b582364d10a1513f000b172d0d23a0888b09b469743777c5882e554f217b868402bbe4f396a900dcc357c5dca15d5954764a5a08c5c95500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f50bb715dcebc151967e5763ee507a2a766b7172318b466487c4c7e017fb28067b27773deb61532fe77cd45ea2d9a7d0ffca01da91bf7adedde3e39c3bfb869d990db83f8d4bfad124040dc01dba921248bc53b55cde20fb9d201227d57d858919bbe08784e92735cb5e69a8ab60aecb2728372180c41945ab3b265a9e7a62c02d43b9ac2c1195f9efdd113eaa90e02ad35937b289ed0805bab088d301371cc36c479061e008c409c86533b5f3120363fbe0108c63e1c3edaaeebe769b29c12f49693ef1ad711e83b85c481f04b08f481943ebb22618ec6b1a46bf5c042cf67620a18ecc08e0949f8929eee67b3eef705ace914f564e135e3819ccf752e72ad817e57b9c5d0e561056b0477af4c624afcc03bb7b3d1c65ac709708eb0112ca90132e4bbcf0d5de74705b9efd082ecd9912dc22b09ca27f1f32fc5655e895fb04dc860989f7a9c40f4bc34d8d807135dd5da5fb52d8366d508fcb14db73d94b22d60c2ef8ba26fd1a107119b1d4d886d1486d1024a5a2e796abbc9b17d73e9d95d60e22401af9f6f1c4b4da3cbeaa5fd66094db3fbc5c9ab54f8721fbf1ece72389e446a6ba0ec99f057f4fa2c0f52c3682484ab5111b478724f27e86982e4d10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa03fffee421ead9a457065206c6e8181c4f5b620b38391cd6625388286bce1c97dc75d17ff1142c8f7ee0731f7e8c9ba10a7af23b35a976d22e3cec67c0f8498b818e9e58bf9a8944fffa1b57b60a9089dbc5838494d85d11bea850af1333c41e6083386173032be792e4621d3f052d6c1f7a337c309e083f99604a0fa1880294213c7098e35157cc42dc8ad34e300650da7c8a12ca4d41124da40fa444cd820815a00c7a2c504aa16976c7ee970d1f12665b4103495a6b2f3834fd26943518b377edf430283463c229a465829424d38b58b465b2944d41d5fc3bdc1c0fec1150d32fe15d4b64fd055d1b71478dad86c21a949577302fd6c274d99892d135070ca3e5c65f480b7d6b4a6396a8700af471b60550c894ff8d4a5bdb0ff8f6e3a0e37deef8a68f593e406eca9f6b42ba127da1224991ad4becd8be92372778a2bdf0f404427ed1d56f2f44ec145ad76dfea2d8efbd074effbeddc61406bb7e3014cbb7ce3297fd7691008add948b9f406d58442fcbd8609a3db4b71fe19ab7389e9aaa66d0df60a8eb13bbcf9da9ef654b2410f9a7cd1b2817fcc5de14692cdf8a72568ff2f17e3a61f4aea3ccb63f875e0e509aae1081bcb4739b8346407b56870000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0ea2ac7d84d9ab274bb852a54194ce7bb06b9134393c31d4c9cdc45050dd5162eea747169c7fe7cbaa573bac7308c7bc7a06893151c706227f27f5585547b689e3f6b555df5fd231d8522060288ee7822e4d9e3f603a53db1041e36ec5b761ae058e4af614662ba829bd7ccb861e1720d69b9aa804e3ddffef4368df19731c0ac61238935a7b56542437b44cbada7132ced6d72cd19cc528de912642ecdf929385c9c49ba155ca557b82c551967c1c35b891c41752c802dc5789aa930d02dd722e12a2ed379c1ba4efe7196ff2fd22d438d710764b186c4a10578bf831f0bdd392a8cec55b53150954793cf3460ad78d33a353bfa57028ae17fbe67a30857988ac31cc2bd0240db0ca6b99ae04188211086a3eff4577c7ea8797a228abf702ece8f40c9f81e31b68fea86706a6ea44278f7817faced9a6dd98dd25abc7f308a13ea0cfc24233244a44da81027caa5c63c23363d3269cc6b8387a76f01577fe62af5850e8da91a7ec9531febed6923fc194d5f21ea78e687d99f34c4ee9740b838aec055854c69c502da4c4596fe5cd51f18f21391a212ba4a67e4b2a04115ce5c5dd2565b34ee9084227d1d01cfd9281a51ff1fce263eabced60bf34fc891c8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018a335fe2e42067ed2b2a1e011f7752cd88b720ca96f6775c9babf7855eff0e096a49b1af51cbf0611452703b0ee99b2507a3ce9c3d43c3f150033f5ab529539e995fdc1e599a5ab0c774e5b0a45b7e72b04acf5dc784dcf84804b5065ecf7ec36e916796d9b54ff3fe5a7ecb16c4e682ee384a0d82a2bae63b0b55ff48dbde418f2e25e0ea22340187623af02b5140dd835efbfb49f3592caadb81081b02dce7712fd3cc055c57c65703fc7a3f4752f5c261900999c1a44255b8d22bdcdcc076bb2e10c2b9e053cda288e62346ceb8f798e0e1e44f0ad2372bc53659905f6973bbb965bbb87f4f07fcfe6159ad15c4dc279dc46132c98cc5a6b8b36fbf1f59ffb1a518cc831158d30ae64f143c9ee8346729560b319f99490c090f135db0ca82dff2cf11231c71026740572c091ca3937d61e4082c1a546f7fc1966250a156c31298917d431ee7c0fb250c4a86eec2f0be34213aa7b0c90944d1628831a6b0738621ea4398ea82b9595bf56773dbacc2790a47a2b76fbd108e19754d635649a5fb78fb8d414bdd91e9a6641b2c78507e0bc431322fa21cf0c2c0ba76c7b4ee9de0ae79bf295f80e132cf92246c4e89b09575afe241bbeb8d3099f239ad3851200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ab122ae2c9e42a92ceba2f3de5531ebd4fd7c092a9a6aa8f56cd6dc93b93d33080edce5a15717e49c656c3783e319f4365a6abcaa8b551534e3ded43fd7e82be7a468afac9c60c719d20636ab5e1b8ab63cddd86e462f66de53732cbd42689e7baf032db7212d8b21764aac08c68cb4f957630369a680e12a77d66dbb2b2079e36e690b2a85bebb47b3e5e6ec6f0af221d98849f2469d768c15685c0220c830743e016ee86ce6fb945f8c7cd1bc7b5ed1f3ba1c5fb4f7da8097f7ea773ad904c81818d27bfbdc69bae7a3dd80ea18d7f50f85c4ca7dcd2262177d3346c6ebd863210a1856014124d0f6d171e521346d7786ad353fe51afb158abada7333d3201ebb143d374e11845ca8ed80ff48434a4f77ea4bc9841c56da932ecc7ba1cee879b985b3aa0d1008eb69c0770d0269843d2f70f3456bb32430cd6723a75a8d524699b7e540ed962a440a192f33ff2d23ca874fd198ef578686b0b07ba1fc9663264f4621fc41c3430c79f096fdc3ff0f474393af7a7a094385c1dd273e06b52272536078eabc3334dabfc1297817b4d70d44a808dfec54be406e4e6c494d8fbfdb47b0214c50e7a211704f4c1deaff3153163d481171d99ea89ddd4e9776e58800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e2de8fcd3b7b6c849edc324e44d2f4a4a216cd83fe72d2d4ef18cfecf40684ae82b07462d9a9710274563b4427477cded07e2598e93f36805ac62744ab8f457881e24ec1a3726012f4e2968f0ff9a039e326aa1a021c1db22a0585e980462fd75093af97559220954bd57e7e05ad767bb8d5511247316b5965a767ecf8991092322514d1d1068afb3fc21cac92a48ee2c351657954baa39b4b4b9c3b8794e7f36bbb2c9f7e1a856f8b33462df524e423bbd3ad72744fe81eadc0ae9925d958497274112a5eb56d7102ea00d4f20e53ac2dbc628bab2478a09c8f977d362bbf960661083c4606edde93892b00ca6e5606c6f2711b804d77650ec0761ed822c2de99e65b5e8644d80431ca980c5e1547743e7010c81238d9d8847f421a938ea6269409c27e8db8379a0d76f0e122bc6fedf6e2226e0681d257f4571783489bbfe285828fc2d64d28ddbf7119d5fe3c66ca00e1feb46f4810a16a5c8b0bd197fb2cdbd7d6bae0675e37978aaba783b6997e04775fbad1939703395e1ccfb92e53ace338241dd146c6a3514b07a1e708e080cfb1d57053a9a83c2094bc7c0f9cbab07d64a7cd6e2ff6aeb3841165eee3d7674182bc375522fbf26bb1014765937d900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fb886c81f84b8becd79bccd2fb7cc791f121fc86fffa21debf7aa0e706b006b15150325f775ce5629c312914c7631843d040e8846a732969a9c3a0c65136be483aec3e3783493889c3b59ebe8b59e8ce7f77149f4359a1f62be0f5158ab81de8accdb12d8ec2427ca63d83a7df1fb3d91e2e986bc7f0cfd3eaf148aba48f9ebc7f6108a62b6ec5e40dbe6611f1048d2da8857ba5f05166e5ea6f16a12980b4f8da44e1aadf7d26fa9b2ab0bec759627f2f327d9cf5d5440051275cdde69336db81ca811bd42a313db72a551659e2635af8591bd1926863bb724bdaa818143a004601d40dc1382c684f5053b37f723e0bf5b07b6f08f603b4e91eec7e6646e0ed800c8534727ea4f45832f5d6d08411f021b8398fed962f44b5ef922fe631a6659c19a11d7f7ac3e7b2a2502ea841a0638ecb69e9cf3466df879a148499b1747e9cf93fe9717852fbbfae15d6f456a1f7fac6fa76b437deda1b6b81de06a04256bb6025057e1e68e6cf5d8d7ca50a3b04e8d928ddcd2c54afb5bbb85040c56707f484d9a1f84e9a745f3d6d7ad816c11c8dfe0c7df5ae58ce80e5e4f78e0f7544926e8ae0f310c661913953952e08f4aeb9845b1622656246ed6b05d27d161b8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094e21671f1712c4ffb30f5dfc9c33e6b3e377c3bbcd7dc29fc725a1dc6b6a0f958d30051189a7b22ea39fd3a47358a5e042497ff02a333465fd06210f79b39fc0de16265bcff197825a0c5a3440eba477e8133272a152d07d8bbec2a5aa3bd44ee4cabd84110605c943012d48967496d0c4455292dccd6cdb742f4f2ddb9e0cf267d52a5d71ed9f4a5cc4f2e02a1e5bfd5974d22d5e6794b1e778456be6f34f22d083b0b792fc9529e3407d10127d9219fe24bf74d909624d2e16ab9f123d557a6a0e63a858993fa0ce5eaee8dc3747fe17bb8a414b9326b2347ec74dec53b4a0ae0b8f59367fd25b8e00a1d456b3a6c096569b004f8e1dd7c7a6f34bcab62074fdefc4a5c450d7be13cf7d35379ed1a58e04414bb91192f47f2914d23791ef188dec941bbb13c7208efe4e399e05c565f5936dbafe8cf1d1bd93449f67cd892ce046f3e1d4c6eccc60f60a23ccaa7c554ab4dc30a5a737ac5456e2c4b6d4cbe3e771932b97202f07c9314efcf9bd9bd616b8262833d8db85db492735f4bfc5bf36c00b7b18e6f33b4c6ef6bf802dd66ecd8d63dc8c03d0a6bcd4ec1c85d49f884590d58cd5ec362d4c670172907e9ac9a3fe930f14abc0b2a70e9b0f5ffc7a600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e9ed5efe89a84cbb7a1fea2058b065bd3709f50fe82108ea4c54fb770bfeaa4c5d5f70a1dc7bf4341910a2170c38e196bb663927dac07d6eb4d6d3750779a776130b245c09c83e15ccbb5c4d3e884d0e031ab55d429b24cb4a85883f74543aaad026f6280f6ad88e686f40c52e0bbe43ca15a6c918ecbed13d09b5240b71d16d2403e8b717acd393118a38a3cf4bbc6688ea2a3474af763a40e80815d56095d3d08abb370018d890b1a93e7a0167586dceee64e44fc52d608f0390020f79d64b856c5bcb31129b6f88e6de9a64c85e73e5de2a70b23bc73d40745609f41f36c6bd014addd200104cea513b6ccdb6f853ed15b16e78417deb6ceb4e155d29f4bff92629f2224c9f90e5a79ca6a64d96efd32617cfc44fcc39115136fbc26b0758092982260bb948704b2be2241d47bf7bee2938821a18cab4c233ea4f0dee19da969a81dabad01841e92d01d05b9d54d71a8d16af5148411e5075d36c38ed6578d60f00d74bcbf42eebb9bb733eb1551fffb8e9083e34a98e71f5a615d2747d62b387c0ae0b33bc63e1fae1df1fd72c14925c91e3737a3ac62e69d53328f3b47c2e933d8edbd27a3d7f09b3930deb884f46226f41cae381f26480855e33495b60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a661392abfbfd3688b813af12b99aba7503e5bc547a87ca790453a1745e9a9a7f5026c01fb2dc673e3e8e642058bed94c8403a532ca3ef698b5df480f6a19352c1465eca0d5b9fb718598df4d2be06a605a467aec3a71c7d1bf57d9b2b57e7e395e71c0f7bd6b2d64f2faabea4b8146124b4e3ad3cbefaed9da314578c66c4acab7983883f6965d0d5ea14b060e15bb8fb918954a6b9c85f9417d9140029380f820555409861cab6e728c44353793e0c4065fc0f8174c3c715da3180386d9193616ad08fe0474325dbe0596b798115aa875372ab584c21c9fa2a7bcdc4e78be32e4aef3e792db82e1339904f5b22256278978728485f0fb6012c25e8dad3af27581b58b2c140d189035cf873476efa9d9b48d853b34d4da92206639e963f5eb28763c9506d78717e4b6c3703f0fc613b21b5aeebc74f4c641a70b357285b1de024cb321d68e9c6a6bb6f849e454faa49db619ee7fd614ffba1d257405cc50717adc44c3326a0a59bfa3b26d70f402015c4c525a210a89bed7c86093ec50ff6d13835bd9f38e0e177dc241e96bb21325b2b616add85f81b9f79e2e43f98852019d1947c27da89b4ff6f4014557fb43405851a1f4da03deb780b5c1901939d6b9400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000efd9f9e59a38bbe9b6cf90af915197aab20131d4483aaa9c1334fd5d536993856661116c2e416d652630b4cb4fbc246699f9f5fa4dcfb022ee543644b7c8ebe34a3b6fe3d7c110837cc012441c1d7800b253a67d62edec6677444fc3355aa146862bc926d693efbe9ca43fa5411ad1136a0931a4c06f58b8d91addef6a553897d0fccc0f59d4119d7e5cda44ced04b4b2bd3ecf5b3437431b4f698121b8b7891dd948e9a31fede2b57a27724497379824529e19f0ac7bd267904253691832c1adfe6e28b9e3ce4fcbc8dfe02f76d6400f6711324bc9178445c555639615d0231c6531b28a9004969fa307fb7cafb5bf4d884dc5febdbc9a9db826216c49ee62fc844d750dd27ae1ebbfbf48d959f6ed2bf5087a746971f370022c419f3fe8a297394fafbe3123c2ac11d9618d5911e3e2885baced4453a7efeecdf76e593442785556e4d951952542155835a15e4ebc7bb683e1e8db86942609d8c8fb0cc69153bba50b5c2b4a76df2c2a27830e50c947feda1fe162f9ca67110a3a2fbd252c84100009532400ceb5b6381520dd580d1104df58e44064a662d9280193e1e17c0440e67797b7f1ce7ac51d53110cd24450835784b61043d9e35d5d588c8dc035000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087527aeae42e289fdec34ab334f1a6d0db065f88a9cff53993a45c9c5cd202ec4cab0e458357f62e6d33c69430183f94ba53b716040507eff961bd358bcf2985b94798055f2b3ad37d629646532f1e3578c0ddf2f977d09d590b075e349344852d7b9defe4efb9566efc3d8e78fcaa2b23fe33887aaaf96698b51a1e9d4397f79ea7aed8d988f7e338edacafcc8c4ca241245de08503e5b82032f38fe0277f8ed2dfaa5262de7c00ea64bd87c9c1af0933d15f8726bae2519c959241e185e67d34d45a1a9f0b26922f35772c33162b73731b0832b157d9ec1a8fd05cee2d221ce0236ee72f07191ea3211ff26cdfdf85ac107390d3bbf272dfdf2e00f5d184f79613fa901000045dff02bb545892dd2631e981645e5fb30a7d3e719f65972353a76bcf0e5af94722ad04ea02539f0c807b66f0c26d2a2f15bcc5b35c1ac30c367f58480f2598705d9e40f45af02d8a570a253d6ae525401eecaf85330bf7faee7b6da55664fd6d59805de4bab57c39e83ec581bba646366faa755311616a04996dd53766bbb1aec9dd87ba6fb312a55566e8e780124b4db56d17eeb289f336b6c87cd3a1d10f2125d6c87ada82e21883df34724bb5ddcfe444b3d8eb1dfde52900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d8e13d06e5dc5374d79b799b6490b38d071fb732d2f11cd6d25c7972c9df6f213cbe8c4bae637e3f736d79d11a68acfa6851cfe0088c74a6361b7b6c1202b038667abc6301c697e446fc54d972ebcc665d212ac96a3ea4fab85fd69a97923de276d1f783b9664d4050c378774a7803e1b6a0dbee1881a2677599f11fde1547e5633e6b09c75dc2df81ac15f18fac1e6e8e67ed10fccb754dfe790f102b48b387610ff9a56169bc16d1915858ae7f589ebf4b8d3d33e32234122a163ccbc6b00185f6c3d5883d5ae9d600f048a48b9b9e46146e2ca6f16f90010b9591b473df05fe8c9b9058f638942fc6214999ee8c593af4dd2ab74214aec89ca3b28f063e00de02fccef05c3e144fc96916d0a6146e5a37d6894c79987bb842d2e00fdccb9c6fbc4a64fd5615c10bdfc1bb6b61aebbad4d2a154d5fca5e3e7a9d0849ae3a97d857f85ec1c44831a3502fc525b09b0814354d4a2b5d678fcdf6e01155f1dd497920a8034d2db4402c903a3e16b4ce37cf189ef7b8f35dba0fdba4c303ca2bdb2a0ca957926b6951ea009df05dd9a2b1745678194ea39fafdb34736a6f4c7a09ee03bc1bd7050c09736e1f08b4bd13f01ca43cd738cbd3111f55540ae8c34170000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000157a3b320da09eab0a3406b59fa072c9df323ab83b865d35a69f8426d1acdd37fa9c5867aa0ce1011d8e80dc3976bb483d4123190c1ebd22ef2130fdcb760b9248341c2b21bb95c9d2ad33afb827225640beeb74534d70d9f7abdbbd5de25fb93aa1a43cb3648b651ede74f61816e7895b9c4243034056c9123db0779b7c7aefeb3367ec42acffc0153f257c12c01e1a65ccdcc63ae5e5f7e36b9cfb347b993189f8f00c8b13c675a98ba34f4530b3ef176d3c058faebbeccf10f848b8e3a00b142e65fbe433aae378c1b8fb3d2890fd1eb1af6bf3d53f787bfa635871d7d275d8851672beb0734072880a38f0d55899d4839cffcf5eb9fd73f043b1ec8eb62bd1701b083bbfd93f15b2bcd48f57a0da6fc12094343f4467ead1210d657b9ef6924e50016a67d9e712b6ff2be377af425a954c33b6902add6a7da9283bd99eb3571edae2c768cfe5595068f5e158926c617cf34ab2621cdaaac4b088b8d55093468d532e6b7c36d9cc66c90e451d607215b597918674e6e80e30bc185fb60728d85e78e5501beae1c62ca8dc6fc31758520fb2c381f1831e9a94516745da8f4a30ab003c25d03fe2c77e20882fa3d1eaaef82e0d9e1aa1d4b59117061792104e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d88114c7cadd770c6e42a7f8ce37054e180a7046ffbfee13fd9a431190ee64fa2bf0997d800e1f1ad22ccd00ce58f83cb28ed7c076e547a4684352f486c1984463d0e74e3a4a3f2cf8f4dab98a4e92274ccff06726a716cbc51700ac8763d68877af31ef4cd41b0d9e963e41804ee6bc6f0faece739df47fc00f9d2cd1b958d6da91db1fed1c15807b6b3f923bd233da601dbf63e983bafeb64cf111073f1ba227704b83498fe0c4ba3615a89a87944fddfde159c5864231abe8d3c26b6faded195bc4ebfa71ac1cf6a59265b8550c420057fb7d0f636394bdfdd5f3ec5d38d8ba79f6c6f96316978e2aa6ed48165ac1532056c4191c3a8675d8191a28d06811dc5efeee346a0c363b1b721b70cf2ede4f861d233fd734fb77d4fb4de272465d7c13ac34297af0ab3a9a393f5c3249c623b18c7e815148c15c30eb9148c74b012c95962c2491c3b9ea0e1bd16994dc2d9b4e2d61faa8636b23bd4ab2fb2ec5c044bcb726a7f0e1c61fd8bd20721fd741837ea5e7f8cefac3edba3edc237e42571f8df2a50bf981eaae635c328169e128d16f8aedad427d51a619ec7a2cc469f62fdc469466fadcd2e129c5e90c90dd352cffa69331a5354306962b444cf656600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cec536c458270742249f19d3731113a2045b60958fd2c108995f91d8bb88a5bdfb53913a2373e9955f5f1d5a32c8a6629e20fdc09cf7bc17357ebcdb9a19038174b431db586ff8e96a85144d1ad8e96fa767e256cdae07cf261c66ee3e70c2bd0da8e40ef7bb90f97fa1e8d4890da36292ce7be18526257f15f8c6a60d875a9863d809197183b214121304f763d08e32ddd16e21b90d099ee824115a38821a3966286a3c3920a8856627303bbb0a6839f5df7dd5c85706d90e476ca5459409430d899c2619b244381e80d416c014ad9043d8c211146230234200e40fab3d7387bcb06f664ae84a6379e609089fbf9681c30e896a35752e6de2b7a2caf574ce8bccf4b5d76e53a9ad16e95598fd5387ff83201fe6e87bdf8b76b1c57195db69447d293e608e5b252b5fdd737e1b110b358f2c34eff46a9c2f92f567ba78257485384260ef5ff25011ba277ec0ff7ed27703483094616242bafb5944a5e9af4f0f14a8054757cfa1c69a5cde7a293b1d640e1364359604b95545b4e520aaa6420b4b4effa0277f1cedb375646da8c7d51fffd756690b7d6f757bf2503e7a5957b1c07dbe7c8427bc718dfbcf56178cc1167451e38a33b12435c6842902ee82d87000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001497232fc425a04d0a95a62f216b1c4457412bf2d6845d43a60f124aab5641492956ea22667fadab09e361ae29502c47e58c9d7ccda9d2bdb102c782564fcd29f08a44129b8de415ceedaebe94f410653b96ea9fda7bbf73af3f2049a8a1499e92fb884a7a37ec6f3e7a0629df1490424cd3b89a246ed4b38ad8cd20f82feb31251ad89490a18675e9297aa231c7cbbe6836cda5c99f1aa858bb0b791f940997b0501efb40d8128b8d1a25fb7c29902a3ede79733dda905b5e2311b26cf04c0d7c14244e167b11aa2a702ddc24383c2083b4abeb8d8c640d21faec192a2f0db9c9c6debfb9e612b704308f5baee8add02a63bfa614ffc2a39a84901b18fb1bed5884460d8a8806525acc42d722e3d834b2db888bee76da18f006b3327bb5d0bb1bc02eae329be42dc8214823f000598d6fdf5e551a93afbb9afacfcbbaae1f560dffd3abf97574c3fcd3a382686ae13abe268b61af41a8fb8a83fd6a27c08983f4ae1a16550e0baa474437450c5846b3f58653440de4f8d5c77dc42b5ce448487cf275290ea680dc0f2cbc587a82d83aa97e3ae958ca0f3b0532670cd33dd08117ce223b271b738e81f1475c33a25ff44f27539d063a90c97ac042f941fe4cb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080ca4be567fbb4afea3d2b69df7cd2eb60722420087ba77ce4e10da39203775619b0e23982562ee40d265f42a1201777e438390d47fa6bbb0c64247e7ea694f8217ed5e670e73cd7bfbb1443a6456dfbefdc676fca058225e46a59644a15cc337f71a127f8e4bee48b060b4c2b8d276835abbe3f38f39f5e553d175d2ee2a6a27a2a92e08a83e78b304ddf1b4e915d66d0202c09d76d5751b7202a4b4f4d66b837a41ed208bf4027f56af10ae7659b82a53d3bb6c38cafd537c07074731755c1f5f4a8d35ab52ee69c8d26053e36a74b98723716d4a10a3b62ca8092a2e4b30526f94bdc1ed0fc74f30dd96d09a0ff106aceaaf5245108e296f06c94fdeefcbdc0e4c29e4b4af287c3744f79d64897a906220ce1b59857a8f0ac7f1407f20018649c9f01c09e156f242ac2d7e7afb03323330746d4704dbcada593a892e851d30cd2d04dee18e90b5a5676a4f299eee1769521dc60d85f2602c964889974575fcd868e611dcfdf36fc26f27881fd5d911f7a7c087a2a10bcf1f591d7ecefb7ea6c4549ca813ab9813e3bbad4cfa1442b53b9bc8a1493fc9bf1bb4a013b4d7062ba532206389b4c6400bc5d21d32d2754e0a8ea71e4d07718009918f12370af51000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017564a63ab2a78d421fe245ec62d495b41fe1d5efa0290fb4f3802cebf3f203252b7cdb5b802b0d3e28cdcb27692838da43b75b128fc2d1a00218b5109f2af7425e49f1ca001fc0e284b8e51d4496174cdaf094e9a98c3c8186b10ff91370476db304e3e51ce197df2f4fa02f5c29a94ee26187fd4070eaa3c8a7abeea2d2b6f9b827195b7884886c48db164bf410d38e957f1ddab794b1e5578cbfbe8c14d8da1175ac1bad6c659108b466ebd5e5f1bd9948a6f62f7db7037e8b74421173cc44450b596dbd7a5834a0a1a0ae0a77b4069edf1271fe48abc6a9173fb427548bcf48d765cd866fc4dd546e884e7e19536dc57b8196812c837d2504f9fa15107d58b4c9c0700e87a63bb49f9f184fcc7179d6e8e87fca05e42fd9f754b3da408ae72401880b16f4faa300a0353fe82ab9a351cec9eb0e4feab9de81fa5075b3f13daa4042a5a6bccdd95c1d3c25b8c4e35b5b2a61dee19e80626417ad41f09bdf4ecb8344c6e36b524111dce5d5a27b77d247b8b7baac323554e864658d32e75c163102087515e6edfaa1fca25e5ae7bc8604515ccc9fbe2b4e0c8418a14ccba3ed8949d1e9d409cc27b056381b5c1019fcc89085b7b0af85e5ca1650f399a8ff600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b472719c7a257bc788a6abae867dc21006e282ae8071c09faca7de60b951c3305118121520256761f2b6b21073512fa38aee090a1237d2a1e7426775f60adce1a43c45f7ede5deec9e398a0f20549d3795ff8e70b279fa09f30e839834ed975d6439be910343f47a1bf52a8449b9b21992ffd89ebcb6484c290f3c51d1b3c7f2f215bdf2dab0861b2102fe7d6aa0ff323721e15277c1b1f1877018a3073b23088e9f3873fc14e356fd3298001e515f0d4826a776c6ae51d11fdec449271e7eb6cc886117aa849b9f5018f9ab667fa6832a81371c966184477b662c861d1935c973a88adee6ee7890bce1da1cafae408db9aa2aea5bdee8c2465a9a0a70aaf8e2dc5dcdf6b5058e4236e7b731778e3193a86f0ec76017dce0c715608136940e997e84e6ac0424cf454d0f2b64eeb6cb98aefffb123e65d435c0ecc785db4b31def16487b5863831d927939dc024f3f48650e8726f40e69001c101db6aeee9536b7e101d68153e2e2f2b3f3fcc03f36478f43577a4013430f6b777406998027dac171a5c4e3a64e4ef92c8848322a97f116ddc74308a692118a82ab88ce7fc84b710655c83c8a7a2f77c4606d1d266c5b5455d1f1794d083933d514d57655fd890000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088561eb5487ccbe6e31d661e1303ed367c22a44d78f0a97bc82291f3110ab62aa5d8d908d4a5f158633ec2b9c8c2caffe33dfb0b451a30c6d8737a47d6489a862c265a123f7a68c67ff63246253d0792c5ee07956c9b2a830a548c5567aaf2e5c78edfc5473cfdb952ae6b5fb9715c9e377e8648260dadceba4a1e8dd1b38e9ea1bdcee25a48b158a7e5128abaaf73063e65e383c79b96398f02045f58a395978ab7064d07d3f54ca1566022f56f60fee334da6fcd1c65a57bfb8150d2d945f32ef12520bc1f4e3fb6476d87cf5390aa386c8ec469515afaabea3345b17074a6d93b1df80207c5408a7ee77c79d4195825476f84d5ad0c5d6d624e21a0720376061e482162c7306ba7fa6af5dae48423d524e700916fa2a19e9755295fc38099160b32551f6119758f1586de0eb19c7f74b33693fa26094b6d97e7639d52da6ff2a06275833ba02d5cfeea667a91f663ec72421d57de623bd3e1abd0f8c87e2ab5592a65283f08839a519e05442acebfd63dc991951c554cc90f8513afaff1e5b7718f60764547ec9aa57c4c480954852bf394791dd4f46f5f5213b1d65525ed9e523310acd0edac259d8503890ae06d68c17ae6762765afb4535b9ea0c743e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089acef4770a517d10f5cf29fdf01e52e72f328c0691af55b8380fa81138178e1887d9d0808ac40ff4da0f0ff3ce50a0ec7802b37592edf5270a6ca2eda9ce095875ebfc98b3df66f79ca7f69df933165ae17b9ac6863cf964dc4b2cfdd29d9b0a75de40ae9b899a8322d05fc6bf58461ca96528578e59d2b668ef2cb83028c5f89579cbd57ed863892b8f6da299a646b4cc1021cfede72ea33f50bafb75813691edd436a98bb77ce7112ea2a3f815de542cbd45f2aedd10c71a0fa14e4735dc5b08e941ebc9925c829576de8b2142e1f61c61323d6268753bf49079968679871633e83403d43312dbb41a389731cd40203488e4e421e4ffcea6d3da1539aeefb02d24be4282a7c0eacdc941d5f00325efeee40849d8b6f286417f22dcce708b1b45c97933337ce034d36763fa09a8bd688e52f3e5d9571a19a054a58755c2f975145a39324a2125ad931eedc34f7767b9820095cc7c32851e14f17b183ca1ffab751d1e1f20bbb732f8e8a21c7d7659cce3c7663e9b72534394c62cd187a85cfa1f4b61a229ce17a2b120c84ecd4331f0ccf716473410659ab9f45fbcc28f933f440c1f17a0cbabfb62bda1eba2c1d6a83bdd70ce3e0aef0648052cf2dd83f0f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a28a104a7884666cf9e8275b0224a88ca5e3399b251b855ab42dd84d523e58acd363153d88a94fa717e833950a6a2cb662243036d115a354f396eea8bec901a5dd57c887dcda0a29ba5b99a473bf14d82a6c646a33d282bf7c5defee40ab6a289564bfb74c86d3f50473a5e69aa67753718b8f9b61d175a5f3f9e716f98f5bfebd1368ebeef47fbacc3699e3f556ba91e56d9f62393ab43ff9ee88d827f96a4c88e76626ecf6e650e296537f13bb5de6e417e55f8e030cbfc98d99736e3c3793b4119bf00684b23982863c90ea146a8fa3202e307a49fd4cedadac663c750efbf57f01a68386cefb77d3291817e3daed7701f627594fd8d045be332fd8b29c0fd4c2f4f52d53ffc25390815a995d92462a6bf91af49292f738736303abd43e9ea5402de64415a00232e2df2fd13d0f702ba6bce0fddad6151ada0941a23e4d97163cb042cd40e5ca00f6746554994e499d61875a4bf3e265ecbd52794df81c8ce192a9872aa10c9e225e26a2466390c02bddf8ab1c44af9a1d86f1ffc70ae016c06f223614762e4dd5721ca23b51cf9174ecbe88948b3e2f60af3fb25cb5e36329fb43c00ef0aa532cbb834548ecbbf84123ffbd3cbe1c360a052c1c6e58bbcc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0a17285d1186e87fffaa4c87a3e21c05243f3d6001d6af0df386a86ba23f707e03e153edc545e11bae5f1a7c9c810cf2e9eb11b2654897280e55edbdcf94cb04fb6a29d90edd20a9c357aa985dbbd0beb2ff0faf5b8314f59a9ab904ae01ca08480bbe2019e2adb9232fe3a1e81fe0993ad049b821d21eda4131e943f379c70e4eb069b61ba0897bedbc175a294467c73f38fc62c7eff30f78c907fa441ea53090748a74702b78586e7098ed8aeb463aa3fdbf67018da4beae7f0d2e0fd300595e176e1f289b4d5ff7033c1c901835d0c53d6fff21209ff52610be7da49cdd6c8454ef2f2d68ea6d90ab1c6721e3f73677a016c7551ca56169429ab6652fd9fe5deea8f3d8d65db0bc10f8102069d560df7faf6cdcdddc4c572f35b1527f2ca634ac8a352b9db9d9d25bcf78eee840a8e79b79b282ba0b4653bd32d3280cb6e5d80ce9f268f7c5e78cf65e4e0f80843fb19a3e694943adfc85b88110ad785904fdb1ac278294d834f2ea8cc68836b641f0c01055234b6432626a891989afcb3a5cec208b2d05300be363f9f01b4bfe197f6a5dbc7fb99af0b80cb49742abee57c24cbbb8d0f639eba69578a5a06f637644dda5b9f11f1e337949e01de259cb8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104966d6927ea7599aa26e83a374980bc8aaa925fc26054eea262abf4733a7523617b583e9edcc61a657b4a2d512ee34b85dd5c2de4b392085a49af348965cae29dab9a999fa77e9ac5502670e234c625db5149984c9d0f9811a69592d5cb41baf78c6c0210b3ea43e2fa154ecd99102358e59d0a17cef36e4cca990878cf5383475bfcd3efc105ed5b4e02e5e54df6ebe6c180c5021b4ccf56030af35c4a191d58a169b915ff4bc9d48243f795e562dfb8c6c69af00cb61837f615a470db5c4e2631f653bc93fe7454a2e68058da998a452fd7d0a4d7c95b68de62f8f0ffdd9db283b1a4a7b6e54856202c90d4f3d80e12330fbe51bdea06a9f463375a6ac830beea3af77ebf0e29a07edaf75896907e068a149a113fc0432fb45d1726e875f7b96ef2e789632fbafce8266473b1d0214b75cece1b7379c8933693690321a8789fc2e3f121aca06d7f2733efb6b23a1f4932853c2ea4380f516d48d55cb68973d9414f8b4057b0156a4f7357435b2c722499d55220f8e8a61a761efc7c871c52622f4a9fd5850d7c7f56a1b29778009c3875a5182eafa8883a87093091dc5a6d4df04c64ffc5fdf44d7b398eb4515fbee955b1ce5a17f059f5818b6335abb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014a424088d5dff2b3e148420067c0473e0e3c806ee49bf88920f17a3d219e63ab5e4af90fb7a44c6e8ac509a65443baa00ce4f95539677ac5975b084258586f9b9b906522f84bcda1b2ad8546d1d76c24f69797b4a96084abd2ae8b18f57cfd845c92f078a40f46f69d7ffdfc0bbe3f6ef6cf44fc6007493d8308916d65d35f73a97c318773da5529de432f1367f3bb052cfc7f5cfecef67398413d958e3351ca2c07a94aedfbc93978d3b85e7d3354cf3fd688b496bc6cc2a1bc0c8b85c9ad981dc4f1feebd31540d7ab029fb946ac8a5e0411309c4458b8f72fa0c2ce0cd2b1682416347f79f94c437d209f546bacb046ebd6855e7a402652996878359c597bd16b817b313d1d109f56aa5495be88ab3d6184197767adbad3621a52add4fbe7a8e9e2a99e044cb85ab0b563f19062a1453bffea826543c1b52f1343ab70eaafbdcfec85801cae23e1a4abd2313e984645c018dfd78b86baa0059a02c713c374525417f01521b586ffa86cb16fa20ac5ee419b68eca05bc3e8a557074f53674ad2e49bbc23119a9563b60d8269bd61e26728c00585f621435ef1d393cd06cc63914518ca736adaefd4d51d27e0db6bcec47d79af3acfa2b80203cd7716ed14c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a46e93f2f81920851276a8c487501177f26d9f9b118f79710bc7eea2b87f4198084c25b66fe3c8d4b6398b2732be640acbb8c15b704c5e48dfe713e7ec027c5714a93b433f344dffd2a074a184d42835e272d21f5bcf0d6eaa81a5fc0d14414aff95e9e9828affababa9594ee286ccf69c747d7e199dbd69013f5bffd0dfb7895a875dbbcf3b23bbd854eb4c9ba01e7825f185a7dae91c4c581114585790a74a664a916167914b3a727e592ccce0258b68aa439f61e0aef81c3ee55791da3c60da3fd60c2c8eae8b55553e53e0e4ddf8d00327941824f21ad7b7042af78c80e325fbf4b984123edaeb80d633ee7e5fa26284a28883a887c0069cf0bb1d15d53e043672e6bc0f34d6b22710b00b329c201f30cd787f6ea5e1d9f508f7a57831f6327a87aef2aff3d5059abb5c4de6ecc6494eed338087fff12eb7ca0e629b29a7bd6d63f67f9c92bb20123ab4e6bc79a006bb32d06688ddf43a43e170b9c4fc726847b35cdafb0e145bfc2dd5d1f25bf03a3f7d766daa4009d5ac1b967a0305b3d63a0557f4f31c1efe776569b5a2eb085eba1aacd233375de4aaef0988f03e721a073637016e4c36bccd2849d69c12f511e94d6a9fa5d1e6fb40857228eb6d3d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094e5d680d553e3c9c0a7c0660b7e478bce7bc47c1f92bb89235b2c7645f5bca8b5ee98d0c1ad9afc38b8323636d5f19cd8fd3266fef299e00679b427608724e3415bcd8a941fe668af1e47f25377f29063d6145edae3340edd4d78a9a43cb7c8b1b501e1d8ea247bc69b18f7dbf97839109df87bc3002aaea59bdbd70bd18e7cf56519f699c9d9d6dca41e3ae4ee3b8deebc6f2272a2a7888fb051dfb816a29c507b5e3adb55cd84cc4270276916b5a48ae1f10bf490ecd478de05167978c5e15b313558d7624035c65234ff8227aec782981ac0516112c60e6a537ac22ae886566f601f1a99427c13c32d22f1e53ec3a305b3534635eaaed236160cd225e9e4394687d6d966c73e9b4b82ddd04e183c5370f7f36bbeebccd576ce37b2e7fd14b18178d8b4b2d0de5e53ae98bc091354a99fbad9fff33dd618166c43504d003e189bf1c7657df02ff2a778f156813db60670ec4f6d0a54da18b2fb52b3235c99b592abf5a3caf45ecf75c2c4e56187f063f256e81df930ab877971b9368d3f24c64c3e1212744e8dd5ccd045e77bd69980d69bf7c19b958df3e6b132422f78e1d060ba93bd123e73d4c8819d315899626b50d89d369bad7fbc49d2c1d7d09e3b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a74e0477bb9ba464a045c17e68d464603c5f32f8181a6d35e4327f718cd78cdf183dd9180459ad3abeb13190a7ba4d6a244e911c4850f32adbd13a7731d0f3142ce0c0ce8c2c5467d78a8e1dde11728829918ce10f294ca874f306eb839e64aeaf2f87131388ff3e84435d49779036f1b4c1637de2a3851f82d3948bc0ffc2ca422bdf689e7bd0e2d4c74421ed4e3539aa2aa8fa6de61f33844c09819c7ef24caf08ec134fad857b4623b189c814abb8893083ccb18e73aa546021f965933fb7a1038166bafa58b5d4545c126c979e73361d4e249438bedfd181b72672e1f696817cfc250f29c08c9a1f1e650b9b9b2d8a6812084b4fcd1cdbf7269b78b9925f3cf810567728bdb2901d8b25b0d142a150716af12dfb978409e2398cad811dc4d5ad6d45cef202003807d30bb2cffdce96099185f23667ab0b270557ea00e2d5a3bb8e58b7398768b71a19a7496b2f50bdcd60c8039ecedc419ea319928bf474868b527fa7730bc835b40197c0baa0cdc60efd825dfd29731c99c84bb0447904d1ab989445a0daae97ddd00ac47d94f92308474b562a4690306641f7e5634ba84423333fbcf37134394cee24efc42c0b7a48d4691a7e3276896e364094198e5f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b21c91e1078da86fe35a5f6eae6258a83d7fa3ebd8e1dcf0ae0e26ff87ae741b35d50a1c6a22ce51b7b5e21f11f78ab02f71e4d713c264492e83001684933c751d130ad6f1b66d2042dd11137dc568b85941171256e1a4136f55c6dd917d24f39fa402363ee06c021a6978a1cfd375b8ac7946646fcde3c294d31f0337e2dc3b7c2cb29807cc6f4c383fc5d9db4fc34be94018658a790d4f1137212fc8d94421ee5a7183fdebc336c4c98f95bc4acfee52b313b9155e9d6085d2d0510f17d86876e02c3eb14c97adf4d9cb9793d9a11df8340b2fc9cf309db2d6aea571e4da5bf66c71b3b402451f04d3cb9c3e6147921561829bd7a18cc08f3a65d33165561ae83a810a30a2829c7d00634d37d2fc0f68ab686341fff7eae72be72c009fb2f068468f2d829bdeb743a99a36bcc102944f0cfb27c79b81f2a89666486f7cf11ddf516add422fb45642ea6424161cb430dc47b88292b411ed14b9dbed1f843890cc86042f07047bd429d4f47c5d4972614c6ded70e7a554f42fcb7fa2328d31d7fbfb799e5359cdb7f04b83318fe68d9224fdbc27248083e14701e01dd9509e312613fd0db0176b6d13f02fb0057b3222fc63fee382c248ebd5bca24c952881e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011e3b7e5a3e0d69233c8cf48a468ada3a15c2fa1adae1f61d5a995891e057ffd57efa4e819c74fba31b5a0277416da78658704002b6f511ae49cb1ee32955af95dbcfc0bf36b36481b24bfa7b17b36925736475cc0716c6689955faeb04f370e84e8be29a21559c0ad37c43a82eaa64afc5a5d8e7c17d1f57b212578a0958bf5887f9f402c8c7d96f1a574341040efb1b4b12bc9083672fd19d02b1e776f2d8c690ec3e08b410ff9060073720efb487e44640b78b41f778e13395c85e8c70cd66ec14a35f29743e52bf0c7fd02f073308b57ffdcf67caceb753f376ade0964d3c6417e1b02d70419e424f8109c98342f7c208a140467d2ec6d914ee3dc68de4a71725aa4340fba5643729e5ab2eae48d3752faf3aca39647f1625d86478a0ca32390df35046a589b81da50f19b42c582fadaae3d8e3be150227b9a81042f1e2eaa00feb057fd45ed9d1c055309acf8022923e9ee9f2161e4729f7977f5597ea2d5f3d147998abba08017ed1cd85f84affc6d41992210168db52fc727c10be5d7193732a6dfdff8fceb27726f06fb044c18c0ecc53adf6af97e9c6da5bb7d130d6c9e10f0dc5164ce4438d86aa089347e01a384fb0ce18b5e5722cacd0028425c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000acc0c5be326c444f0a892b4d13a8c29efd4f19d4e56610b284265938abf5081f3f7b097294c25ff52c5d6a61cc2f46b64dd73c9e66139ce5c4ead27fb56bebd4bb2805123c2e480fdf0c9a105980d351c284a0f25342e62c4c7328e740000843acbae93b5bb723479f4d6fa70c992ac0a553cbc6d91a4e733961d453f37d44f46df0542731faed1e7e4fd0ec3bf74a719c9542fff43fe2b5fd6c642d0bb11f4d6ffc19e3ae4c308eac81b1424e6c4990a2aaa80b2e20485c13fb520839a845d63951de4dcaf2a2230ba2888f4c9b344fe0648da5fd5ad0375cf24f76c5bf8ffa956dbfc1a0c07649f8420cf33ed8703114c4c9a357c593b7d8d61d66bf9cb77d99061dcc07e7ce899530ae5abc29985dbf40044d920ce6f29a542404089f5aba1861b854da89c9d8fc24a18f16a78a063919cd812b1762673f43c2a03ca800637a61f4dfd88ac6cc6810c697c3c11aa8dc6c7f3bb3abb5be2c3c9b4a26597dd0a8d73158aae0ff62bb2a0b8a16a651b54fd7554b23b11ff89dc002b6471a0619779cdcc473cc0e516b9e38078e0dcac18071722ab2d433e9757215f438e2ea8e2fea0d08c2762ca1901ef16fc14ec9108773dacb9979653befc9adf2af7e2d3d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025483360268b583f0eb877766df0db1515906f2669debd20c2f47a7fd2d7f34fc586c26c02b91c231687cf22713378b7edeb181ced4312f3d7a28a38c8b62307def14fcad52c288688923ad7dca1d09d7c025d10666dfd8d93c65cc0d04c40bac0d36c3d68a734c854677fd0f33d16498ad6d4133f10d7c9faa7125b0b68cdf7755d4d8499d883df7e1aeb9dcce313ab26b4135ed8d7faf601a2028f5f83da0e653f798d44e9d2c38dedad684f7680462ed9b3a2b2f8ff67fdc1ea97530c511ae82d410206ec8609f3cfd49828b78c2a9b345322bf9559aa9f90596802786870cdff93be10da822dea910fd8c67861c9dc7fe37092d1fba8359a11bfb7b1bd6b24774d0913576107bb36867696fb1e28362a99a067530132ca965ded9ed6631bae7433a312d63c28dd6dd850f4d892fd00f422ac45b0723fdf9c7ec9b6ad5894aa328b00305ef87eb99b673b4c99c27a5af2d7626180e9f227ba5248b2aeefd6c5fd49f2edf95e498e8a9e68bc2280c24de4fc6636118c1f8224e67db573473257f98fa9fce33081adcabe5d6960b559675bf8c2107169ea62549e4601a720151cb98015ed48934043d3c5f1cdc611ba005792e7795c6e17fd341171682e0282000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007750c4685f5a254338765fa1a411cb36585641f905c9bd506a9eb9bea785e832edd7b3a979a23f25a3ffcefd5bc4c932497616f81448e27a24af3a4c3df9bca15b3353a7c1bc405ea1d6ebe3076ca3ba5e0cf754fe7f32f554abfd03abedf7d6acd47a6fa553df6354ac49aefed360ecb676fb2a61c78dc8dcc6d957cea830bf399b4ddd67dd6a700045c6b9a9614a0e55c2cf4ceff4002601ec9b31b3ace3bb76335af0d40f6f0896a57f27c3005ebc20489265554bed58d224b30b131f3eeb3b4a40cbffc0eceb802acc2dc6b7125844cfe9be9b53352ae663ddad6108c5c2976e586725974af789f8b10328e2200934a21bc727ff0d71ed329fe0c8248414bae3339875df00bdb5341caf0ac0222d57fadca51ff7a495649fc56df34073132fe09c4f9e8ae6eb85bad3d0106b9f86cfb31344f99369db381f25e0ace5ea70dbb1c6acfd5827194bfe514840e11bb4742dce6dbabe35ad22d1cfff3332d804c20c68b8e0611b33841d6e9b613f82f03afbbbefa50e2d64f88f3d7351f473086594f7f554c1e35ed746cf95508c6c4f9c25df46f301047dcbbb1d4536827c5a8d3f2f90fbe21c2c1d5264ad76cffb60880e3f6a9c07bc86809d46fc8a3de790000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b02361f77d6423348a09cae35c0ab70d5a20833eebcf5c3fe7fef6b8657d0e4082311f1525d7df68a32eca8ac6aa8193d182c0f7da5f2b459011e14439546c5583b54c5ee703bcd86b3f1a531f3178bfa32b3ca87506b92a91488971698d51df1c26d506cbf18385024fdb9903cb270092999ba47195a2b0250be0e9f74b0bb78d9be80fb078e8953e055170cb5d427c5fccf3e3cd26c622222245b6b1274a479c7be5fe06e40f0f843da8eb4a8d1999fac77a50a549a6900b3acc8a18769a5aaa42ecfe5675bc0f3754b6bbb95c9889c35eeeb5fb01b9f527789448b2b61a1d6b41ec74f36bdf696246479960a970b9ade056f6c80134c17efd2e26e8a0095f084800fa89a2e29414286774eb85be05d85be1b06e7fbbb7579e4cb59f2fb1570b3f8b29e858308fc0404961b7107728356b89af115e4a4988cfc4ab543d80b861988f81025635707d0fb6bb369d4abd61be40be19653d758f99a2074b7b5c16351c34fd5fc26c8b5362075ee92e029304889698cfd02e5ee3a3f526a9e226306198846c94c6f1b02673fd95eaf6d50c801dd65367d3ed07a2bd41deb696fafa48a9e5f3bc9350fc3cd2558da5d0b817f8de07b84d75b5bc309f9371849ed5dc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053138a7e08489825c9c00d34252ff6039b4c828db916bdfe1212f4fce9f8cdb1b0eeee333bd67fa00f6ac4b9a07ca0ad5310eb0c8905002df419925bef2f346710d239ddf854ce9d5c4fe7ad0c29f10de76b08af783079a256612838c138687c197c28bf667363d6c6a743ceeb9653599b7bc2c7c508e5192368cdbca4021da5677f95e61a0add657c795b5516ce2edc66cbeec9d6f148c11ae6aaa960892b6ddd1507792ba50c181c4c31baf33c556f754becfa6564a256d0043aad2942cf0da5efc64fae690d5bd83fc2befc442f672fb6ebf703fabf6c679e8434933f586e5eb4187ac57ec7c7d5eb3caa03237933723e7033d184a3df34d38063b9197798b3ded31eddb78a6e41e0c78c8332414bc5f74c670faee7061af2beeebd34477f49c71c637e7e54cab6331dda7096bd9abaa546929d5d6ae49ed2045de65dba2768e47b6d0290473c3d16402049ee6916e46685bbb43229631e9c32a45758932bb245607366212a044914c3ce23fa38e7797c63486f04777e226684008d735721db25185b00fee859eb7e8aac0187613010d64639892c6677c3c1249759cd8c7a75288117bc2fead6f201a37d524b6b5300cbd6fd82eecf652db4453932310f000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d75a90de66ef4bdd3426d50f5e90c009b06be542ec160c4278f0be0f1cd2c562cdd105757f0bd61a01594190f2c9b849cb5dc894f6bed6143ea26505f877995c836942962ff20a2db2dccd702642e4d935a2d72aa59cb5c96fd3a6dbb004d810923f2a1f2994cf7b6287f6e49ed8de97d3b4c6e89e275bb91d1d5943879df18eae15a8e004f87720ee4910e9c204e221454061b98be45dc5db9179cf7c593f72385b279149c585fe311257964eb1e6f2420a37787f0a12e660ca7c5fe6756b6e9930478803c075a4b9eafddaf8de30cd2495fd4fd61051581b8eb044b4e5d4828dfc8908c701ca67e38d4a1b9781b79f252e81a7e4d993ef73d1e81aa10b357a0dffe0c9de8803c11bc76cfed8fafc5a2f6e1671697039b272be586d51e74cf3f773d538066f0785bd80c086e575c7667e38504a1ef660a2bf3140949f33a59daeba56f53b523d5813935e990e000db9bb68b33fadc6b21802e5c295ac526e194f11554b3766391faede8a5d71da8e741016022732321f0d09cf7f0a6f82cde49f1b7bcfb5aacf10af3c8f1fdb5248899bc6d66d7e9e6610dacad1b1dad36d49b97f323ca93189a6030e9aa744ea14f897e0901b49f226421710ff6ed8e439a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cf9d613e392ae8b3cb1adf2bed4f2c0f55baf939c1daae989421437b5c58e36c024555c444c5cf809a656a078af79807c93a813493fc8f436d7d0895dc32ff2676c1bade8bb42b7ffc7f81a39b557cb34d31de642c07540cc7fe20e51e1e4834f0dc954605620b9f5489d17450b0cfeeeeef90a230b87a755a1aea1c1720f1e8f24fdb8b0265ac11ea4af3364f6f31690af4c35601795dbb76b07efff0e9792c1d0f4f77aa1e1137d132a83c9b3d04d8dbc6ae003f7e6be3ae1a70445d5c821c6b52277c2975675c142c7f174b4027c3c9904097df6af0604efa21f725787b28b72aaa4a45ec9dceba338874e9095711782b12c55e4d1ecbd40ac9724ad8ccfed0a7321e845a55f2e0bb17c12eeff15e9a8c738f5f855bc09acf4f3b08289e56abd9725a6c0072bcdb1d963829cf83269573871303b426211b47ec2885a7070483b3393ee1bf26c497945bd8a24108561158072a2692a6308bb1e1506d8d572c7b3f7e9b6ced33ce4d0816ef09a6198e9f4b5840d3c1a775c04bdace6702ca477b5a613bcec13875297f7d29a224b4d90bfa3e761be3e555191de7b85f1678da73b248aee0bc784a940ce8b38defb3eaa1f8b751ad31c7c2e0e826f40f7ee3900000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48402ea8f97e0727ccde3636df7792ffb5df7c206d388adb00cc93f65777b709464f0d9ca2f87c01494023c290d4eb39349c3707a4ec732c5a8b1d12b1bbde138dff2444172bd817d96e33dfdfa29cbecd8dd862ee9213719b43746f16f8fc6a8cde250f6f8e69deb978280e6ad52e661bd32e71695c146d36c89a24b7147c6bdd98275e45999ce209904187019ed5a1e96bba6893b6a854133fcbd9969ad1c4bf4129cdc417ce131efd85f134ae60e6c1b2a65971131ba0ade5d7094cb03d8374b40efb04f8ae9acbc2eaec4eaab3aff813293b295e125db3faf4d42c1b1d4947e50ee32a3040d3e348265d74589782476c64a0b4c75140606a005efc7d6e4027f62f1d4d3302d97853b4026016d677ed05d1bb32889766faa09d383426af63871f165fd07f44a35682f36827069fc0e03cd137fd825f7ad48fe0e3b204c7f9559a2bc1d3da85094da5e4bb684b2b82fc0ce66a0f774c7ebb98d5d1a6baf199f5e427b10767b154a6ab67fdc8f836cb748749e13105c0afb3a5eee0e5de750254a12c5f23c1e27881ea4b710ec4ed31a15bd06a6e5d3e80932ed4298483cf1381e60359fdfd59a706b21c1e36a8da2a8bc73f913d77d72b08e63c4a602594e6fa071ef21a8eb7dc6f2879a68bfbdc89f8cff254a331f3415cc50b57d322f274973c248724d2ca3332d158a99bf1026494001be9e416664bbc6d7b7f3e438b52f60a2d40ef6e8294bfa5ad15de552d0eb8544772d42e5a237d196cfaf166f37158360c55ed6fdbf5b40fe92b2636ef9840f84e12ba8b1a7aa982874cdcf4242f40790fe33440ff6e4dda228dbd5f67c0518f383b76fa0b7d07e73bb1a187656377a520a5d2a2ce8c0bb4922a1443e2809d819416082fd07de0c54cf2bea07566f5d51d9e4ee696c6e271b2f7d0c7598e1e2947253d4678441b23c09de410af7afaca05f1dca02436eee76e99315fbe45dea9f65536f313869ec8d4194f9b78864e8a076ba7054ac5168829cd4cf93896d033e5142eab1e50a2b79056bdaf1edf48481b4135c46082eafdcfde8f33a6178453486f1685130a671d171a3b148bd98f4c26528de2cdda2d327f1f9b6d442a3fe81352192bfdbce9187c30b0a5cb6e22b91297c8bc8c245cc9875c000f60dae93ef73f92e6d05f9111585b2eec89262eaf1308ab4ce2405f27bbcf4d12852ebac8a1e7f3326800fef5e5c195b7c9af454d2b8e845243072d465d47ef54759804c593b8b8f4b5b0c9dad06ca5acedff0c40082d45ea3a2e22f334ed9c3ad04dbec066de3e2dbb5fec7d4024167f78e278810d1e6ef928bdf4b3285e4d4d924b6bdeed3ed6beac750d607434b4e0fe9bfc251f3f3d1efa5f1a79e60cd96b1c383c1a17dc2fd01076c4f790aed8c93c3f37161500bfca83c7d038fff0783ac24449553f3981df838b6feec6bcbed964856d8d10c311f87a0f81efde2acba04643807e026dc00bc942dc1bc66d9dcbf07275fc1a841d0451118a79b6e8b8d51029d7b1b702409129c02d19eb56817a10191d111b1877beaf467f2912fac6d071884e2977a77dee6b6f54dc99042e6a30d0b4ce292b3c9742908ac6a52efad56d3517e4d7bf49b092d1baccce31644d9524808d1cd2df485a2b121e8ec56c43657634708da364ea9e0775ec8cf6a03f70452cba243c21e03405526fa401b8d94c17652ad71a25e891abe8ab01942e58be442c02169f2e6adbd71683f0ef204eb9f180545c366d35bbe2cb1c044a1f7b90469c1f064ea6e095c5747d3f70df7a7b10ec28c863e642811a0c8b0c1bce5ef396f71f284f0a59a72e74863d00df8d8390211b71cd6aa5704742efb7719339f6e6e1271e7546b6383e8f10db22d9ca34eda20bb79980eb9765f9b9353d42eada2e3ed511ca491029764234673ce85a48ae5e2790681c0fca2ed5a01c3f5b3302e94e682db36dc207338b217e79c3456573bc2565041d48adc784e28170c4273116b62d1ad9b8c06d3821a02bfc81111aaa1512a2b03fc06d9d8d7eeb9ed986155a3f211b11e932599115659123ca7509624b992e4680dccb4212ebb9d5751a96995c7f0d6ccb2395210f01fba11566ec9692bc6d9c3eef30ef78faed50f934c8751bd00665e14e4d9f3fc8017d7f6ce3a62a16e7ad1c855cec049b62a00eefae4980270fb8a93d7eeb327c8d015a57dd40fcf94de2556bde3c9d731ee606c4660e0ecd1ca953cf4a289ef0f54011264069a4d3f0861341dc81e5927771ae6053496599177f97cd690d607e59a23478b1c692a1b47a37582e605094e1467fa7e0faa5060f810dea929f0bfcdd5cadd7cb01dd0dcc6dc90f4f5e29dba03ad38ea564617518e3dcc73a90b0f6e9ca6298091e1d9b57646b21dfd01b5f90a0cdb47aea512614924a116b30c411611c0f8ae1e315af5487c9f09ddb99e0fc3a041fc294451015d7212146d7fdc1039c15bcb906189f5169a51c3f5c64c7eeb58cb40ec05fd91c1e7a4fcef7bfd1dcf501419be5ca507acc61dfeecfcd69d3bc4ada2099203a0fbe06f4ed47d837210533d13a2d189f23984be78c3d1b706dae28ea2311822a1c6e1162f3acef4677650472fa7dc7bf728ff1176e1c4697aaf023dc7b2b1d9815642e04d431e8ba20dd335b18beeccb2a22bc6df6c6d1d75a45f284f7d9f7e6159ef2893b582e7811fbcf55a34f09d2b21e95d8bac78ee3996d70cd3b6c85fc17c07c275df5710ca14f2e21e31b0550c02aff62d95b7ede30222fc38d41ff890e94fd593a81a8b1e50b4aa5a342dfd7f228a502f4ed286d970bf6d193d727c421c9dac0b3f22de88615d23113ef0cc5d0d5aa4d75d01497a4c298c9bc3554cc2a597f7184d1c42287aeaa1f270d31244265ca2ebf699c6ee5e7447e138bb35d4016cdb23cd600c701ac5ec9b9d2b44b47d0dd70ab7313a9cab8f3b191706233402e74ce07eb8edb70acba02a3c39d43bc4bbfb173edda3c54112a2e3cb7420d78195c83ef03aefff9dd82653ccb5c9a1840b29e13cf0b5fe47391dbbfc3d58167082463e6dad4bf036eb1d4d1cc4fe332f52cfa670826451abfa06869e9ffa34623eb09b109b2a0fe8eb12bcb6369c801570e3c074f07135945eae24a5f57dd540fcd312db7b9d4a19898d29d4947111b13d4aa8a5f41d68afddd359c23004a8721edb17d440d5e20fb3222a66ae3b8a10d7787eb2c1722f68e7e8453f27cdc4a23699e2b10cdc59335a0c0ad4dfaba0741c3c93368862fb10ea650883fa493222d5c32d1c50d5db15cc2409972db9d195a31ed36c25ff047f167a3f4f5db776500abb9058162a55ac7ea550a2081da69c84b757273b21122c4dd95cdcb9012cd17876b36ed2ccf92d0559dc387760cd196e3696d5e69ab930ca82f8ea447f196005719bd4813ab6efd6be131a370ec3ef7ae5dc0546971cac8e2b0d7ffc9383e04e44baf0bb2de29c142ab8e18e35da16cc9669f66f1417b2367f9455bb253ac1c1e903dafd8e9f7123fb46766c7154dfa2efc311413eb48003decdbcdd794732a1cdac8cf7130e9f8ff8ac487ec3d059b38c737067d7b1c7b79ef022b713ae218d30e626bb42883ecba2778589ada78a3f96a28fef4fa9eca04ac7e362fb73e0943093924dc151659cf79d7aa770d5e67bb300ef6767392de56b3715bd30c24013801c1c1c650fdf2253126852560b619f4a40ea72e28de3558d2923137c8fa240774905000670313c8f9ec0736e7edea69fcc2330151540f0406ff5f08afd620eec906d50d37ef5e2505db2c35bc2d8a76eb52daab708d769f4d66d3208c312c8c4ae52bd3c74f823770af5d9e88fab443bec518b2bbf516300d6d47cec0b3072f42cf5cc3cf0a4ad259a0aee2710ccc083ce04cd3a62e5c58ffb3198b64c31429eb70306a3cc23cf0f5314bbadb19b014d2990bf9b148ed1bbafba1c3df270b8b09884b6a5c3e888ef9c65ca8d324361c5cfca763a80714fa5653b9a3bd51032a909864cbe7dd1e0269a2df4357e00335dce605d75353ebd620c17597ac542d8cdf486f245c19954b24b07a7aed6c7d4cdb99a50aef1d41ba0f276eecac4c267ea4fb1f8122971b13e71893b1d7095454f4b3e0db961f6954fa020875a3fb04d345caee83079aa4683439ccbbede3bfc086fc962de1d9963b74ba1786605000ed59aa30d91c9800d421748735d92e9dc7a650d49d7a4f23c156051d949b961094175719985feed170b13859e75336a089d12f0b4a37d17ae633522c892e911b9fa079eeb67189f1fc9f95f52d9c444865ac434a236f61e5d12bc9b0b0f33614a6cce5ea6f7c9dd354469726590e476f3717d897fa36d881bbade5e1b20edd0260067b253ba3a6dc3978be24f64ff562003e65574fef04ea080548256e652012ed8f87b620a76d2fb6b29927ceaa70b746e5ab7b7c2f5feec069d352235dc81145e6c66062f53e8573847030e210ed764d963c0516fb922d7039af8b85d7f621fb6d35e0b76ea7056d809f8afe5c00b857680249a6ed9f8ddcb09896e8170c2c8bb2abe50f7a09731fe5aff35e60bf35080a55aa4cc887efcd96fc3a7f98bb0c48a2dea3ff00c8fb990961fd5cd551f1c3a02e06bb35bcf16dd7622cae4e4f0768ae57b7c5e8d15d32bdad1efc68e9623b7ba719721c08984d0a1693ac75ff0b4c690db4a25c9c1a2acf737dc0fe720b107378c2728b3e282fa06ab4b19510290d3c30d5e3a6a60056971cae8eebc029b400a08221a9e394651c20838b5bfd247b95576a1733eed136051b8c3fc5a1585b9f99ea75402d8a06f40c57d9959f174d166cfe52b61856459d5f4dfdeb1f91f42174ab22131e137b12f398d9a6fd09263e604567549c46676ad0127efd961ee85eeec51b679e35804d7f2daa1273289a96cb7a43c1fbee0d9908db5164246a1ef76d361aea941613ef800d7d64450fce2387f2413a5d0234ebc1a26a9ea60af19462c7a18d24fecab73e840e4aea2760f3525333905013b088d90975dba1c7473be3db2c9b121e419c6c57da05122841cccac6bc39e520c52a20483f443fc1a190d3df6eee02bf0dfff32f3a564128bb880c062c10406456088aa570a6882fee21c8a8d0df0369ff2f2ba0144f5b0cfcb362a2674f65396ba970d15f869ef47e4ebfad414dc7a7050479ee0626a4092cc3bcb22fdf9cb838e79029f8ea0393b52997a6bcd58ff1923849e89a1c422343c8bb85175d89fd4352afec8bf16bb8830c46bbf1adebb9a9ca60133c11072e96160c84a20f672eb70c063401b0fc36a7e62f73b21667170dcdf5e8d93bf32f27b36697540127c3d645804bae7ad1dc59744a511c753f76ea4b9430467566141f6de8e26f8a9e9e95ce5f275ae59aed66bd56ae5dfde4744c754bdb9270802380bcb2464a8b17cd44f33f4ddb533203e5511b7501e14568271a576ba6b3512e6daa932f71b52e4099c28785f477eeebfcb8ba5d3ea7eb6eeeb94025f182b31095494362771220537f7ef1f1e45ccffe3a666bbd7a5528d7dfc1d7e70a36c7136d232021cf25c73a78e3e535168985ad94a302ea31648506e17d097cc0b49b02ef63ae9f1f1fc78d7f90c1d398686b0a3e99560a6c69f0d426224c9d17e6da1ff025b9d1d888af46fc2353f9bdb42db37ff5e0ba855e3a10ab12dee64156fc083aea22657b9de57e2233f7888c38c67402a1707fd2c1d04b5151a7e9decba0063dc1cfa57892d90c801aec766076e0a30a33c5a8383bccc3f63edf2ac8af3d01cf4b0a47c2b969282036419011fae164822b0d6f2b3eba57d01303bb2a0c07003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000034118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000340d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000340a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000340b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000003429a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000034141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000003425e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000003412978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000342daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000034189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000341159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000003405ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000003405c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000003414d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000003403db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000342ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000341213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000341ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000003414fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000342b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000034305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000034280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000034223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000003417a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000003408858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000342618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000340f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000340e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000034172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000340b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000003405bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000034137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000342e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000342297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000342608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000003418373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000340422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000034204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000340afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000341998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000003428d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000341da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000003421d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000340ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000340e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000034107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000342f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000003409726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000003424f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000003403c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000341fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000034205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000003425110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000034283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000003421cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000034094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000340c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000341f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000342421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000341fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000341bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000034304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000990568181c321653cbadeb8fda5b0d7ae34f8026ee2a400557b1dacee0ae3138bb3557f21148b106959a1ad9dc012d97d9817ef2c727b8770faf49fd802957ef73e1f7dc9f0b184ee040d7f020e2a1073ee9b49a87b7f2eff6a90b774bed881cb1f949f48363850a19114308df5187f2642bb63073fa3f377b56559b7054d33341596c25a62a13ee1ee85688f7ba51799914fd2ff0f4e734560732d5df2bcf8333259ea99f25e502db756c1d4d7f78932d64af5a8c6634c0bc60934514c8e5f09b6aabc17acaf4726217432f6b823496e6c56cbd15609d22c2e3912deab50cfad1d909d78f74316cc1f62c604894afdaa3dfd46ad28a29b17c80f28dc74ac7d11a8b56e485dd24b7faaf87c8c53e430de398fccf99e567ddfc1b4333208199452aabb267f829260dad34c2fe6a6bb378b44cdfa6b88038233c51d2d44f8e6c3afcfc9dd4fea2b83eb57269fe212d6c293ad516929e95de3108ead413c295fb89edcd92d6f7f1a10fec0df40e9297d0e35245768755de68fbad31e28ba3dcd1e311326b506002f4b69db34269c202463f1a74ae0264819fb15ac41672d5aab8eb7fb0d8b136e3e8b23ba50ccd2b2e960b6ac34836f8fc379cc971c65ac0b0d16a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009448ef69fc5ba6b27035e98092956cd30d61cd5fe0781473e0caebc14de89814af25c01aa15774ea1f53d772e5c7acd3de29d156caa5db3b3403886a545b38bd253baae90db8f9cbd7cf732dd9119c6d155471fda36ce04cc3c06b141ac72aa989dda1edb89ad2548321082d9eccf478a83460ce860fdf377dfa6278c4d7aadc8a190dc2867bf8c55bd27a2f9ad07b048f0df68fa25eb28e54e47a601b83f5554d10fbf7a6bd3d4e61d26bd16f167ed420da30faa6b00c623e802ce893dab2a229b9d0e7f4bb94fb407d67edd070ba4be415f2cc3d1d931fb8c6d3d9a2d28fb8bcd639a4f9e7dbe17b02e348ef4f7b5443f6f4e4b87bb30ad0f58f427958a0a96c3b4f813f90bf11503b56be38093f05258599944bc315deec98adcd155cf444e165d9a2869eee23e71892d295fd4a013ee7311028f2403b7df9a5d3ce6941dd1f52c967cd849e274ab2a539174556673ef8756d57503577e6b18bc530e4be4881b185c5fde2d85ab542e2463f027540622c97e81225fed2ad2a9673783d8131c600e69ffd59d062e5d9b0f3b5716abe64267d93fe9a8e1bc75ce993fa9afafadcdb13f0cf5cfc40fb666750b8969ffb331f36570cf9509866386e98c93cd7e0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001665a4c5cad616974314602f6d0b8411615da766206eb0e234b31991570bd0b9a45ee5a1a33167ffb08ed9c9c3693476a05f5fb135f36b7bb02b989dd982b838d82036af5d238cb4b26e24d69165f41fc4831ec749668c50b1562439824797d5be278469211c04d59b2fdcc92318e3e13745a4ae668ab3dd07ec1c87dd40990a4f7118557b113529972dcb32cdade701dc70ea4dbffffc18c3e5fd55b45d6d365c54f08f86b52f9b13cad77b102eedda27baea4d87ebd8968f09eb26eb56f0b2435ae6b55a6f9075a374b1e07d32a44fa6c57db939eea258fb79b8ff68bba63f4c7a5ad4bb4d3d4265b6d8dff79373bc3483cad92e21ab5923559898b7c8ea0d5a86f318cbb1200fe2a39cf021b1adff3c948a334da5417a484f313b8c6ef357a91ec0d37bcff0efac936e85251a93dd011f5bd268007b2b3f6b50333683a1886f1b07f5ea3b3870a167b5e99c4b1c8d6f29bc19e5ef38de11310a9ddf606df363ba0cab1476980a8abcf6fa4b46674ab1a197140834da4914794029a155ff057e15e4cd9712789135578dd356ed4782797c4612eadebf86e479e22361ca991ae6166122a1e75c6572e295808c309133e11405bee3d4c701fce2417148bf04200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000da225e0fb98a1e2d5f35d42dd293193d19cc2fa7922cb67753359a296bd8e0637023eb186a8f391c34681866df45dcc03af47691e0e8f1cdc26ce4df89440b90a94977e20c14fcf72794622119bac9e3d58c1622a747a03ec3177e92f02d6ac220bcd8448d5c9e6dddc03937bbd27a29b61aa7c6c3a2bfd7201a11c0a43106cdd503a3734ec88af7648f680e49c5a3d75ee7471b1326ac60289ecfb4b59cd46b7214b0e12e884ddcd01d7ea1aef355e7f1f04e8fbe8c8beecc161c65628babea0ab89c83d4ac53f63123f510b6fea1c7cd8c740f6fd94a9f3701fad5e9b9a6e1a3c2764a26dfb331606a84e9f6618cd1702c81d40349edd06671d50c4bcab87f59af7358f2d9b529b4fd9c9f91ef8b181ddb03ddb00d38f2506f2786fb148174994a68578079770abb5f24e2bc35e1a48e7a732d6eec1ec70083f851db8570f46782d6d3f97bcda89c2b29552080e187fa559912b627f866987eadd0946de64d9166057893d02be72e0c96e4f4d9a725411feb4935005654c4f42cc71e90cc3d19e7c0f7d946138340b3c9546844272dec000d2414893acc573534fa8632b274b3ca621fd9feb519fed8ba5e9b858badd027220187b3d68f0c7ad1b49aaded400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009942b8b26a581a11776d6e158afa4715a28997ba1a08db36a0b8c219e66aa9c738b94bec3569c718d5dc873e7ceac64479a8fa3ec0c787332efba1a7255ab8a1addf4164edad85b2cc6d497f886f645a3587fc5793299a7ccb1802c0ddbcf6d15ea1305a12bbaa550359a747f8dacac28e0caa3d7a06baa89ba124a54fea11ad3a4507aa7d71f51a46a76d6ebb2bf5de6b18cb6f8c2f7b1d4cf46b88f8a0fa2e170bb35bbb936eaa803eecfc18c909ba6a6eacc9a092c5f3499bf0f7e7e0916b3dfd76253e899eff210f1c7c947ee6c24f2af3763fbcf70cbe76c891172972b84a50d36d91809a76bebb843af1bf097fe2fb14e3b49a050ca8ac46dd4d8fc0ef0dab5111c18216315f09f9c01494fa4214263fac9ceab8c7a1b4574a4483179bf3c71976cf1783f4a24edf72dfec03b39404e819e0de34088ea75af0760b30769bbcbe4950a8c8d2450265114947dc35628966ea79b6853222154d4855a748195149bf80db2c27f3912de651cde797fcc24a0412764b4cd390c966ad2b8e41606eb2204068ca22c0a738ea4e96d91da11f06d6aba5d85ecddf1926f9af39aad4d907117361be36cf35e87beeee419712c032e8dca595ba2d418df7bc3c9ef36500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c863f64699129c8c02d1523fe27507c52a17dedd55f1d8f499bb4721a1ba75ea13b1d5e29408db3d8b591b610284ce8d32480c8dffd2768f98cdacc24979a80fddeec4b3eb1782ca39314aac47186399c2298e2bb1b6c928001ec5e22f3a2cb1492bf03f7b801f64fd6b5ce44fb60a8693b90d76238046ca9ea17a8853c90ce3b5417fee1fc86d6293b7a6208fffcd0c32422802e3820e4aaa10c7bc28197b625f63b27f08b3cdcad2d9418604844dc5c32dbcdd1a4903b91a0e156bd65a3fc0ec3a895348464cdae335e262cffa09b2fe9d5f5790fee099d674d58867c58b18871427cc9bdadbba22443afb78fb0158c159c2221ec7b672083fe9f9c52182371a818d5986e3d0bbae2e0ea1b2c9f14c2223e639f3ccf36ef36d0aff8018bb9c1950fd2974c674af27749a57dcc169d611dd8a9cc408ebea084e49575d636173bc307b01d89b6b4fce93a912fd82d7995e69413ef4c03385f3129ed6b7199d3ed031794ee99255ad5727ebf2f9bb16667c06d206211abe1632eb5cd101907ad384641cff2baf45959033bd9ae05aee6c4b5f74f36424b0e551a247253706521374c95446fd9397e7434574d4d251d725574baaa0fde7c65e6f0dbb69742574c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a13f0450d7e8dd8014c58ea5438c9452f3d6f2387f9cda8f21749fb5c378d8c1eae89fabf3b67ed5a406acb6811bb7900eebb9faf231dcf630d8b4853ac48c891050878544be940656d7d1d808fa1b70b06cf5e676dff50433f82c97ac6163a0d0dee5b6300e48a4e05f5b3d9b447cd492d02ce8c68c39c029d3ecb82570bff73791f5c06edb82c9b6df9430acdbe8450303cfe8f31055e590dbcb2cd5989b5401015c6cccd27b7815169dd7a92e2f07c8c96802a54bd10aa7d0fc244d90168314295e0e13cb247d627bc2f2f5b7df8e92af1a4a5e1c4fc8892daff38f881029f1a842e361fb50b3d605fa4eb1817da1a36c477b6f7ae9bcd09bbeac38e9632e0d196b9770eb1909e3897b2bb458faa9536944656c8be8518df065f449ee789d9d26f028ae53125fd871ccf5ec1f7c8e89c7232abec885fd50fdb48c5167ecc57be9524cb07b4a0048b115dfa01e7b58ec53ddda70a9d8cbe81e0849f5c1f6d67485e76ee9b3d94d26cfa361273c5135bca3a6a46512f7cb5e43e1ba71b115e08fd547c3bdf2a929e9ba5aa02a04d3e7d77b07b17214da78de05f5140897f007aee7d6108b846aa915e0dfce62f4353ea8fb1b5470191bbb0dffe7357b8c30c8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020ac056e726abb40b988d5a580646a5931394a96af7a3e53512d7e7072a782a74a67e334e861049d38229c5835fb68f3f7b60784be7218f68e5b22f6fdc9a661682cbf594499b4e945b85c0f01340cf0b916486536f8f80bba7c34cf6d3860b478723ae14c079f817153c8154eb17d18a3a9c2176acedb53aebaf9834f0cd2e9ab448336a58712aeb86b1ff7873ffa8130f11f943f510c9bf8b2fd6605e668380c9a04ae9d698fa4645adecb046a9e432aec1338a5212109185283e4b3431d2fac57e550dc5f9320a604a241439bf42b1ca6ba97e40b0fe42d197504180af0c5b2e4da992e5eaab4b1b503b7f6b8d96e16314d0d20c564156467da8639b3eb4a518ea394fe3752f8d93c80056066adab0d166bcfbdd04957d3bd173082a511454d3b6b8a05b2e164a564cacfe917af1224f9aeec4bc80f269f56026b307100a9e6cf7b5282e28358538ef9b0db5db1b0766e99f3b5107b83b3d9230b0c256b0c2eb90eca023dad9998c47f3eb47625d6d5b85718eec716bb4998629d01a3b8ceb03ca08dd9beff36c4fd005ebcafea1d24725d2c4b6e03accc7bb07f0205f8f438894f89292da8b3ba71db5cc9f5948153e663dd9309285e41a68997fa6340a6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083c2c4e73b55e9806488a1ffb6cef409b005788f8549e6ee73b370a77c9d211e3c7e929f5ff0e31d19e73b3f1ce233244dfda46d76163603a5bac047dc5aacab8ac8492c86e1eb46dc7cacbb56c568cb7b1ad2c8ac1441bf0a77744b4fddbefb526a34fca3ecca7262d8e8c60d2655d40a23fb18c725335a75e70872bae98fae70041946e5422b2446aa89de2bc1d48f5f16d019c52e949a5974b7924859253ee1d298c535e03063bce5470dbf1d4bf22cce27cc622d09fd0593ca7739366ff9042e5e04d04545c30f18183787ddeb0eabe17f9cef7dfb5bfcfb8c0062065eb531e269b03765412c15332e49daf420639874ce11692832751e8b96e19abd352cdf7267f72c192c663a2060f3c6f93301ffc86d352fad03d4e6fadad7b2afcc050833d8036ca4732d95c06b1d8e46c8341fdc3981e33f6a2ed3ae9d53b6061b5c09dba6a42bab77fb66ea394124801f929c0634314649405deef18fbdb6c4e0151a5c189ee0799f6e2fe8ab75b9b8ec1e138e22e2a20a362af179ebf9dcc8437fca1295ea51afafaf18b9693c993420b62ce78061b44f2d8c84d109259e58be15627dba45740c59c28491758c5dda73e432c5dbd97476dd0ae928dd201920fd93000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014b0c2f3af2d0f55852c43fbf0af385c4bab5f84600d80bf77efb6ead043bfcc8732ec0a9e3ad2e23fbf516e16569f666ab71f2df1127ca0337949be2c6da91b47a7b9414c96df915eb92dd15fe034c18d7dc285ff17abe6dce888baa616898a8ba39ea57ce276382e2d2a2502037e501615b085109febdd4738ebaa33782fbbe4b5307b54f603a5320728a0ee5bfa9fbc5ab67751d0bd57e48a094367790ce64b9ccef823a6d90394202f8a4a881a9f4f4b778e2802d39b827d681330615611e474ad3b41838c8e5694f96607a3f838071b9945870212995df17ed9493ff391f09593f2c2edd97847826a5f5de9cfe13e53c21eeb399b142e55f1ddf9820dd0c7e588eb9ffaa8e813d1ffdbac26467ebda7604cb15ff463207a1e3ff9e8e60b5716e9e1cbd8bebcd8068d95aac919486dabe628f6789e3bb2da01f1b2c7bb06ae934c32d7b0eacc7a60283748dea54383fa27a6600c563ab343808eb98eb5c16091815f66ff52017a78adb34e271bee92a800673402c84268ce41b8902318ccf5dd3879a08d51122a5827d94ff1957b584e7d85dde63edea2c6b21344962c2219a021258bf87be964de09cdc551fc0e02e53e4c1ad8b8b0b9260d8d0162ddb000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001aca4aad76ea8b651b614ca09192121cdb7a884460493555eb33363d6f2cc6e493362409a63c420b8801cc20d95a210aaf0bdfca26a18d2962969554199864a401a320911b3988d166302369390a179da39c39eff77e7188000e968ceba050594799cf86573e197fee940a61b75bc08a008487085f54414b6082a8a44971b7bfb39cda2149701d629e73eab0155d0ebf8aec1e97cdb79242b8b2dc61c6a3639c484f3b3e1df256f0771114c2b4f83bc2929b10839f91c7cd39c5426fa6426ff8261fbef412caed2635d06173c5d885f2d1aa862c425987fe0c605a6f6086b74437746119135dbb3c5ecc3704d8be5997d027239c29a0244dc938a73748299768348f889c981773165db9e6d50dbed5c56816b96e6b339f5bc79de36087fa148b7109676eec79445d65d8d035b5dcf2a0194759f91de7ed86e913ee7a07d730bd0f55831657031d6eba6edebfa7d1b5daf8e17ea0546f4abf846ba48e8024a9a853a025b8bb13dff3d181efd488059a13eb7319c466aedeb1cae614051f3c7789c1800c64f13534b6536ab74e07523f7ada7f6adcb53c214c0c3eb333bce553e01156c0f55feff4370bd54441c69f47012ea9bf9954d7a650f2b77b635a5692da00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b62c81c65b406c274ce4d6cc1fdd0096517a245598bf08cf2bb69ca862f6c12171ec17001ef54552750339f31efac16434c6ff7df63116ef5ef2e11e1525cb3dfbda58db5bff312516a9147895bdba9893f2963d78eb9daf84fd1831d89ed67950316d2a8afa9a374229e86bddc2d6c8395493449b54f0896f67e274f3430b38f7d1d503205c8c97c02bed7c9b74a600c795e2407d23f7d246593a9c07d5b74ab6a05a429dccecaf293f75d31db0b707d062df295d6458459814615b2d1958321be417b0da24e70e963673deda423f4526859042dafa8e810f107f889787caaa8a8100e8a1ce3fc2a67f0c062886ba5b431c894ce380f259430e5cb267a411520b5b658b8a4811ac0bed7e730a84f1be6fdfbb9311c066ede2d624ec53d5b4048d949882389c9ce10509918e5fd84d4a69decb9ecfbd4d1cc63939e2df605b48929e1c7e5369f9b8371da0a00f605b15afa20cdde91204496d15eb1c91349221dcb5e391e392a284b2410d661e6fe1fe3ae52b61cfb81970f0dcdc31dc8f079917e6af841d5080ff1982a374340bf83bf76fac801aa2af9b48918fc43ee72a6611522fc02716ec6a66f622cfa113acbb6800391babd21e7f7e7342b5faa740800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c4b14af7e2990082a019beb5bf1462dd7f2e327263ac189f838733fe14b2b2d14c984e7fbd587c4de40bed63cd561680d096336bf015226ec39b77e050057ac43241ec15e347596a61af4a645231cf420ef28e5399f23573de607f37de6094f4bcbabf79bc1d5a217d72d0a46bb29956291b51854facbd491d4e09ce2c9671c10fbea310d2208354b7576e5be5ee47d179029eaf9fa1744b78d758304d0728b500688d5ee98ad1758582d7d690ef07827f54d8717e63464851ae7a37a6ed4209dafc4ee1538bbf833859c87995ae83c09e44cf3ac43570946a807aa5d44aae5fe68bb61c88aabc9541c5ae748aa5b7d2d97b8e675cc877ce14065beb61155e782d091822635b48e0affb424cd8abbb1cb1f5791cfaf60979b8e86ef090ba8e13336c0a45acc21e5f28c52aee5ffe88cb7ab7288f839a1d2acb91dc94348c71b82944c442d191d1fa9e3f4484ae4487316c0d711e2ec598754bc09a6b9034a99f2a5a310df1ce85307509f48cf1858fc97181ab8230a1f77cef2f03ac81fc425d5d46656e18d16c0b7dea1a9c3c9213b655e747a20e90ac1f98e0a47edfce35f0855bb94ebb78a54244f73a7d8c0470f54125f90a1bc553ca3f9ca45531b62e90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adfb87277bcdc7cdde4bdba094a601b6ab9159ff890c15f17768d36c070d9778b87c8efd9f05ac87adbb67b113f0e9d002afe8e97315d8ffbb643c6f51a0a4ccd2af154d3e39c4590447b9808979549ee352709c17f96c2b60c22ce0909b549f0c4db01f1cf14f52adc5182fa9521e280db16bf4fdcb21354b07d1102c9f2ef590bdde935c0378125f9857444b8cbadec9796dd542ddecc338d6074aa40644b2002445638f1648e50dad8050bae529cd63b82489d6234aaf22df35e02d5c4e0ab9ecf047dcc5129005dc4621a230b23ac05e9aca1ed0eca0037c6cbbaa707fb1a1fd8e5bcec58c68c951d0aba896ac59ae7e309475071b8ba3a5ad3c69bdc650f00c3f76e8adc22442ce096bb0ebccf77a63d19a086046eb430ac34ca03a1baf16c9c21e5884195d2ab24401e827806505f19dbfedcbc305d25502316cfe15956be855dc0a97085ea5405de3a01f006f7419609f0d9f34ec4916fab0d55c2cf92dd1ce841a3b75b51e9bafb2ebf27aa2d873632198ad6aa091d254455c3d50934690cfa7ec964f94e14f7e37e4a7c5d7e94456c5631c5ae7bb2424c2da8bc08ad266257b1ec2ecf358466a3fae42ad4a4d4e333ff75601235a3eddb6e52900420000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000299f8e1b26b08f0467c9213ae3c747707d77a7590aa97a42d70f6f743e5e0536327cf58f0d82d1f790ed3e7a8db38ef9bb1848914617a5967348055078a88523d62849d787a75bece2c1d2a36a83ccf2ae1c2eaf0b1147e95207c7c6880e58cbfb410f6d7805970db39162f6f5f42f772566069adcdf40402f84dee2030368175885d14760e27889af95ab43bfc38ea655dfb6b4fe82f46475eaa206bc5bdd6cbebe3de24f5025b1aa9ff10d850af85e51e25a4228bfb393410727d5aec276bbe8724f4da84a463b2c7a165a0d89a9f99ffaaa4057b4f4e498f6c2d5462cdd04855296c8a5d0440317f58e840882853549cbd2be71caf06e4532ccdf8fe121efbad229017decfea2c99d7a38e0362beb363ccd14a52f2843dff2e75eee1f54ea454109d69766e09709bbaea8d46e2b68e569d83635fa60a6d01e422d896d8e866f75dc1c31b3e4f26eb6d8620a6aae92056f943b397ac8d45ef29ccbdeb777742cc629d244fdefe736ec466f178a6f9da05215ec1d6f421f2e9a4880e019c8deacaba15895dbda59baea75c317b8f12baad21722c77c3062c43a2fc4a9383da03c9c68ce35929c1f121097a68413c20911c570ca6f580e56ff3a4fa90175c4510000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad3256e74b7c6dfe8ee0c0fd33e7eeac2303f156254dfa82ca5b7da30a18d5a30e911c28c0ef7786e71ad0f1abad8dcdcc202029b202866e1be78916f1a16797144a6bf5f9122630c1b2acf0214a6d0025226c5f37e8dab831cab6b495808ce7b1c3157a5ee6d0afb93c2a68db165cf6b2c1e9a4a23be2b8295c93789a1738c5178027616a852110d252ea2b37a6870b80ed2e65ff5fde574a903e2e6755d4795f3e04dfb24cc7ffddfce68df3095812b093ef89a1f29f8a392d5d7be002adc4893b260e3582da960467c13f8ea3bee3d13d4c1dcc3f18f26de50e32b2258fa78733334623e66e51f938c142cb95d3f57782bf489d9c5daea9bc6a6496c4ce352795044e427db224e41133371db84912ed07d7e137d42a2934f49b5515f9c06c9f20d834772a795f963e820b9a14d005fb0f7b3ef4840f5dadbbec9a0512b788eef5637be2c26c19e126fa580abc4d86d1040f569d20d27f18dc6ba59ca6a87bce38d8ca72703d767b03e8e4ee0d351553f8f8731fce7a2d803111750fd641c201f20e78030bdfdbc5675ef8b9df4c1d294ee47fc17df7129394630e3d146e205c6af3b4d435828925070949c2f56af55a81333aa7c6709bb7dee888efb7a7d6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094da3f7b395319911c45382b5e1fdc72b1de6d0b108bfda31121373fb442b2ba2bf0a3bfa4d1d12ebf89cba229dfb3d9862bdf0143d3d28c7aa26e9608de7d1306bf3ce78d2ece752430c4c5a83c1d3c8eb04a4d480732ac3fc8ee450312f689fb2f481ad6963cd05e2b115ed334d1de7f47afd2bf80968a578944d238238f1332d24c98749e9b939d0d7e3b6e70c221d315663f89060ccc425b1e15f4cab1b4c55e97fe7de44cf65c8341d4298153717066b50d857cd1097f5649c0e96d50b061e5f8bc1b48334adbbeb12bda238418713baa43cc6e4c9c3922149361d7a4827adf71db060382e5341d935c87c4852124e411bdc86d305a1a2baf1b91e9e27fdb205be4f2a80fa1b6c95632be1b1f9c91217e00f0d8175811f0219e253438620af5034819d731096f3ed1af0234725b0c1aea6a20bedeb38eac79d520c968ba3c23ee66c3444fd01c0bfc8a8c89f583aacf3a34ceb5d886f3778072ea8dee400d29ff47467435f658cc2cc24414e2163651ee7acdac2f16e83230fb8cc70db613f1ef9518cffd68f17419ef15926bf24975a5690bf4bf775489f7878fedee41fca7b48a3a06cd7d60f57eb42159e48cc062ac2966c5dc3f1bc80a97dff6ea8400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc63f7cf2de778b9fa4145a0e1c421fc2c1795dd941a694cd4f98373a6501d11d0ccda166d051722a8d2e9b9ee5a3258b59a6e6bf71b0185ccfc65a3efeef0c3f07e4145b45ff81886e0ad807458bfa5c86f2c26871d3cb50899a3a495e66ddc3e577a52af3b30f1ba05f2d3bcf155ecd8e637c9a39fa488a62275fe32d66d8449f8e2b830e0ff24f77cbe5d8d3de20ecb4c113eb2971644d703f35809e21ed1f47d027867fcaa46b0bb660d30f9daa5457dbcb827d59bf346146328eb92879835d3d2e53680f8b15db17e97b445ad381f675c12f87e43308a141a170f174aff2b536f8aa738b0f6556624683755a51e2250f3fb029f37e8ab44c70c4a74465a81c50b69db395beb3feafe04da8a4a33394eb29bd500de6ddb9c6586351d5d6618cf877b769fc750b3cf9e7a80ac716cd8c469ea5e506ff2db4304f881af6c3aa0ae7a7f902a4aa20bf4994fbb95946ea229048883937b90bbcf8e98e8dffbce16e8c021899a1cf23679de5a9320127955c9baa1511b51e22adfb774afc7b0847607b0c71bf871a39bdffa29682e1c2d6a391b93eca7b2760c8da31bb379169e0fe519a2a644c235eb0456f6fb7bdac625c84e8991a13e26ca14078b6f34a2500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d00bf227ad0f03c7faa5c1e4bcc2080e26e8f5427b418cbb2a9cb23b754039386697f9b8e9c3884edd8f3d4523aed2a3804b48c85107bd70c508afc2629755a23394492ec38fe4cfaa0fe4f62d1f0dfb4b643454494db892a6ef46b5a80845824094c438dd29147d56495eea7d9ed75cbf6446f979a07c4bc7f73417e22b6dac187bbc1462529693acf0f0ba7943c97bdddb72643c20dd9d34f2c1eedc090c209c518219b4db5c06e638cca4d62dedd53bfe32b23c5deec837b8c0a0a65c32bd48deedff48bcc708fcf8407fc01cbde9a5e0d788023d0d9e84574c5fd1f95c4d84a5deeb9acfd31f67e4a8cc9c21bd83af4da9e3abb3e8c2fbe54ad8b7ea8bbf7aba7ce98e3733768c6d4a832e5252f24e582d15e31b905d835c4d3339b90803180f085bf64e90c19cb3f06315400914256c8cbdca335d851a543e8e2d1b2fb48dcea55eeaf9df740c5177cbd5bdf10ba677f01d2672dd26ca0d217337bcf951dc784fa5d1794489ca2e8b59e009e6b5b3cb45c8b0eecd2f763b9299729b4fc85ae91f91854564823f587b268434f9438b878005e07a7f750ad95ccf57aa9d406c5eb6b0fb2d49371e6d98445b6b44b07f1f3113230ac5af13913df6d289c16000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011e6f08e3184c7bf5c4498d0f92bbe54b9c713261c99654797aee42ce768b01367ae5a76340bdfbb9f4d74d5901e5f20ed6b8a064ac43cacdcbd1ebac5ce0a3661809ac618ecacba56fadc6b9283a1ba7ccf8b61a461ce0c519e7cb5958fa4dbe727d55e5fed50ce449f6146d4cdfd357439565bfa78565cc5097e7fbfb2ccde491f95c1079a9d8a75c70eb4ea4808ea0026a771c3f3d7ff49911d1fda42e7d9998f4e0af651562888cb5800b9dcf3358cb130fb9b238437aa2fb12cd6ebd23c2a01954193a0d53e20bd545258430253bfc3984a72375fced7f379ec88f620a985564efa5d2f399e4902a740cd6822dd2ff85157ff92ab4d2417409b2dca5251a34a1299ff45dcc0e2f0a16c3d3d4df06983bb142dbea37ba6f0c2d4f9968a9dda1764965631de20fcf7fe93839ded9c0a9369e5cb16c196e5d1f3fd188cb40237c0450b7b4e035c0e6394825716bfba13701d323eece728300ab93c41d33b4781f00c9803f924c7209cca66f87d15af7e0c9faa16d7473d0ac8c67f54de0f5b0bcd06d3475e56cc1c2ae3e25a1aaab9b1ad0807636123dbb635442f63797888999a5313961cd5cfaf35f5316162ecdcee1ead510ed1e4c0425f9fb1f5ddd5450000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af7cdac0a36e86e3fa221cd8da84ecc592a8d8b6fbe021eb4fa36bbe0f2cb8521ee82f9b52720b7a2a11450026c789f220886a4734fe4afc6099c03eacf89c3259a5bb2f78365b083b73853ab02487951e7267879dfe5828d9d1c04e04ecfb9c5b62b425bd4b63caee64dd230881ce8c4154038fabf5041e2dc9c64ec87f829b9bd103f53e04f14e08255bc0ef201b847c03677ca91153e532a5e7beb858eb2bf08fcb906cf10708753029f5b4c72a11f11f09d1bdcb98ee7b4d7a28beae398a0eee9b8022e168d0360ec87449be4c9583b58f3cd53fe2479df478ecdd749ef58e46ceec1b52089f3cfd5868b3ed484052a37095f031e4530d6f35dfbc7198e30b363c5250ed32d434261f1bcd147afdb18b75a19d921b6e2cd20c671a33a6c60dee8f00dec826cf8b28914426209ec86a4a37b97912d0b165f710aa968572d5108cc063131cd5f4dc6399042622fbe5af8921e09e4d46d97c97d5f70548cc025df36388afad08d1841556084510c72c5217909c10a5884fc480f7255ba22a05a14782039efabd4e53a148e8ad562d7e1224ee65dde27b63d3f2b66273136d5a2ae579cbee818a706aebb93a8c50e2459661c63aea5283adaa472b05798f9f0c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000294fec51def4e57e892e1bc31b43d2391e2a2d25a199ce02c7333762051e90c204423e791affa933606d4283dbc3323bfd98cea3763bd720c816132350dada9c8fd8ce5c4593ec5e6090b7168eaba0e1a5fa8d75abcf7b1cf46d458cb4586fa6d304494d207ae607186766341a806bcf8ee6dd131d6239ca098dc198d9c8113d5de43d8a5280151319351cacee869e9621c5aecda0be00415210426f58f180e991877cb196653428fa69f0a43f5315516704dabda4cf49eab00cdc3d681099da2f143abb7c2a5b692ce79fc92cf7dad322ffc99d2ef17f8e475c568bd1ad65f2e01d17ddf865fd971c48c9582a2255af9236ad92541c86b25d011f0e0548013283219b2b2b69d45c79b28459f7649468ea40d35ed14c2f9689aad8578a4e2c4be733f4b8a9356b9a9a01fe4decb1c777a9a5f8916f9f6d99e552b20054f1bce46214052ff096cd79d9aed91156b889c00c8249bbf0b46caace7bc16fe04406e02640770408bfe5d63f750f5112ddc14806926906a0a1a69b57e51bea5b741b92acebdb2deae2adb581ecf66c8ed05d13cf6e967ee340de72dc14757ce52d73fed7c2e483da5ce1879b3b5cbf0f3b029b021b534d0304d68e0fd8f154d9c1afa8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027f74066bf8898b94e32c5b7eb82d0f88aca4584f5caa10886934ccc924edc3f8a8679d0533c0ed11eb9388a278815ec0fe963d8d84c30ccf89b0582f2eb5e2ba7225b7ebe819e84a10125f464eba36d1c727a969108f0c66a247c1e6f3f6256a46e7a4ed15f83fdc093b8ad9ab63bb4be114c68a49213e4405eab8dcd1749b0430592c7b96728a472c092445af39f9bb32a3f50c250348229ce52a4bee498656d6fbc8259578f7395d716e3ed7919e28002a984a9c03047b84fa6d27a8e3cb68d227ed0ae668ec68e2d7cef34da3364cbd4494fe6a419a6a27e33557360ea671bbc53987b0ee2db1bb1d0919d32a9ae1efaa4819fa8253e390933142aeaeff569c49ab02e22fd8a0b95654eeb30140d45173ea3698316a1548cb9a2c0d796a56692c0037916702fbb19805841ae225dd2e4d8088ff3f229d7dc0f3d17d08d6bdbf520d2bd1f10593f51e13de5b622a3c4b5bac9530a938703f6fe58b91ce7119d544fe1ec54daafcaec451bb8d4482756ac695fcd953e0706f7bc7319f41bb817e2d30f333289d848933dca2844e5074656e1d7ebe3c153f31d170c0be1b891da91002c8a6c37775f5b60c0f07831a4c709815623599b1a380d537e12d001690000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1d441007682a040f147eda5e066045f679ba94ce02c3e410fefa02e773679a8275b5a37b17f2acc6ff04ef25879e05700d9888c6326541c9094fd215abcf0f990feee6a21646b0c336793bb41d09e95da50bb6702d2ce777311d297c27c7098dc405af7a7f9f6fce9276da7d67ed809349526c791947b8183d766cff7361fdd6f9b53005fdae6af36c122459208863de2181f24ce8a716b0a9ec2e6ee03615a82896679e65ef00956428007fe481c30e83747224631518246371334be6e7f91d15d75bacc301c99c296c1a06f76a2cc36ad5566ef1903e8605b9e8496557e05360ea2f7e70040f2d14858f5e4593262d51f895dbdaf7cc4d24677c3229b572c4e8e7d1e67c4d90ecb84d3163e42806edb02c2c67a95ef61faa7cf07a7eff428392490c33fd74fe33d9449f985b42ee00adf6486d5958fea06cac5d23455100427881b4608658e3f84b14aa60ff6a47bb1a0d3f45f5aa5c1577fe9eb0add1fb4001a358585421ecc26f603b356200985bd00081429df57eac392d3c2946931c4ac914ac2b279f8848dad01abdee896bc461329514d3a56bf3d9ea428a82202f26c280564bc20966874ddd0301f7e5bf5dcbeaa9a0e7a62c618691c105849f17900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001150e05a3a355b49649961148102d8af1a0c8e3ed2d16d3e80a4614d0fca16fba5c00accc73ea1bb9a11c2bd8493b88d53f3134498c275edbd6e5dfee9aeaf26e1c750d5953ce2a8efa0248310ea81224abd8f98a16c45511e6e27209b1ec9afc34c0bd8463c70c4c30f4350c916dec45f6c574332833484379432dd7094cd88b31ec52bab3e436c4b628fc20253413160765e5c2b2b18e1d17e13f6a802a03a13c65f3443a52439ff9f0735150eed7c3bbc9da01e76ae784512697d2da0ac4f63ccf6f48ced73e13afc5d0d9e1acd50aa9e51c57bbc50ae4ea7c58bcd30077057bdb82a99ffe45fc15aaa2f90417a9828962ad57f4c617ce7f10634b9b2b1eba217cadee1ceb4283bcafd3ef50ba91ba45d36794bb0c5630e1270bea9bdfcc02f0ea8bbd24b91c995a777f1efc3ce7b5f0178307a8dfac8f1a95619261718c64380199a4ed73c043b08101845427110e43e9a84a613f3099baf4e809b381415a1fee90ca6f594eaa05144371de7d3eebb35fa64139fd4012bda31da3b2661a917d19ee55c41f7c78fbeb4586ffbc602021b4cc5673ba129c3edd01afb1fec6d43bbc5b5803c3dfca9b2f8d58b71a05ed231af2cee1f3aa9a0a5e537ec306cce00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000895dd1b3b5facb2caae8c6903ff57b8014d7d41b4136c901cf8f3ec0261ccbbb1162b78237e43d52ac88a18c3bcb389b065944de6d9f1f07fcf94f3ab6ee365c7318911367ec60f60562c1a611fc78aa77489d43d0843cb210782df108c62ae1c4d93de9de43a41f592262496bd216c93e8b0a6b11759a4d3fa86430403ec6b6d8367f841f3740e728a3e29c652db53ab271b42745a9ce55a07842c20261c63c690b3b3af14c073396300d9a0b9d73243faadfd3fc11750fc22df10f97f184d75032dede45f85becd6ee8342f01b43f8855c53fa132b70baa5198ffdc3650c675217c1ff52d593e1e14a741816ceb978cd20c33d8f029aebb48103770c6fb6b20984b3b00154e4e28d3cbe8f71d924bb8f4ed28b7fe8ec59ed3bb5f790409d74538b2a3ecfe5ea1dd43ab870f817fad8e93736fa9df5c3d14b6134a1d973dfea0d8af1ab979e8d147f0564c26af5cf0221600a1d65ce97893f78e4bbda6466bf3680d0c52bce40552d84a87a09440bea8d7603bb71e240ade8c5786a6f138793f3d10a25facd28b952a64294197c4ac082f7537c567989f1c2e8a586f3c316d9a95a9d5e1aa7c875e607b95d17ea7cf200ab94db497f2c769f8f769ad856f5000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008bb6425264ca5fa7ff09e6f9abfc41d1b499e1e63497bed952b5b30d00ed709fbf6df1f29fc7ff6647e8677d91d0cfb4097ddaf3e1d5d60f5d581aa75e1eaee5140c8bbc70a89916c8c6254c942f809c30d2659d0fdedeab733ed5145981fbc73935fe29da2a30dc38c7587963ed746db2d8ade3db80ec8095434ab1a62899907dbd6b4f6a6c3aa2d3f0208034e5aa5fe69c149f3d394dc9ce884fce5a441b3d75bb7cfa07abccc2cf69a2a28f8f82b7ed97fde21d8787746d4b7ba89e52afab57b4f85d9f6557826a5e56231b9b1f8d318a504bf1aaf8cb91ea3b9b1c2e074edaca063d9054eff6756b81fb6485d03321d78cd38e5241e12f25b075b004caf7871a6dcab8fbf87e1c4a0f3e6b4416854e6db7677bd6b15463c3901d42756e15954bb3e887d4aa86ddffe8a582b862dc08ed9069981d30a22b8beca0582360aa0fab4e556cbdb91e133c73d95c3de38868a3b018bdc1aedc46149a83dde461679ea010e817a290f451820477db479c840bc5222c56aa2f20b3258f978806e5a64eb770aa921f5262efb6c7b60c566641fc689c658e2aa4739e96ccc16efe0bbfc8eaad3256c122c96fbef183a8f721d3f8e2aee8bec1340b628afcba3e578d61000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a3c10d43f713dd8015a0e443db7c9ac6abdb2c0b89952a6102b08db855fb6bef64aa261e70fbc86e46a589bc23cac3bf177516c6f674a2882aa10ede93d3e28893fc429eb2a71095cd44ea8eb2208171d64f05b7d5f4d85ef517e5a5711f5dd7e2428c54e01dd1c98c1fe63ed4016cbcd91b8da8d16ce0e63fdfbc83669ee72d9b88a1da73e5b5250406d14cf0f027c60820f7285bd52596539a88c76c3f90a4c1ec2c7b64d4df08689129f9697d5e75886c2475fc50e39b11d5785f5ab7e86107d4d6405d730a392a552581218a8066056ada2eac1fae54411fa617962f25c9f00f412c1d9ce9267ea7c24a88f4cbdb831a39fa384a9e898618725d595802539f378fee571513a0c7e5106165335f315f704a56b601cabd19950bd3787a13d63d090f0c407b2b0b8485ab8c5c5cd6bc6e2c996c756aa57511136705483717c95909880730019397965587d3bc356cbdf29970576adc629a756af6a175f04762cdcc48c51c1bfd8470bd6a6d51ec23e464fe1667c8b42e8e02ef53b22abbb9ef6469641987d612738e73ad670ccd9a8bb7dc6a6ce7660a9d4d13f3b1838170ed2b6af8ae493ba9daae1ca85bcb7739d0a4af46f5ddb85d98f7d5c482cb83280000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000127e75703ee9876d62395e57b1be1fd7fdfe437d21b9c0fcc75a9d71cb61cc857bb9ae28941554f4643cbd72edea8d7d6d9c0d7aeb70a6ec560a38a3fb0ee9d6a938c4ab7f85c5a664e7447fcb92b8d50a4a57f421bf31fa8dfe9a1587e0e05258d421468690163b08da8832f029bb93cb2abcd5b677949f8326671310827204a154025b030640130984e21338e5cfefe80d53a972de31cd51e052603ed9d5ede2406d28d0553eb8672354e17b95ae74780c28b2d2a323456fab04311a8ab022a3232fc34128a18e6ff112d79b0f63f363fb33ea15a9cf531efedc3cb91a0f1745b4f1a8135a6e661ce8ce51142a2b88f3552d6a3912fd13daf2e762048c93193e82ff547ad85ce3c3d18879b5ab69884e2a08e7339aae99557096978b147ced70f144b3001cfaa487aa835854cbf1c41334160f3e3ec1ec476aa744d33fb6dfb11b07f4ddb1ad7257a9309a1d4f370465af93443c9df2885e60e5034749d82692b305e3019dad9cc2bdd826fdf9014ecaf8a212d38eb5df5ea2b551f51edec9e11043878d0fce8467cf3683ae5f9a4c6b80d93762f3299152fbafc6a2add2895ce5733e85077dd4db0270c342b5492c8a450d57dd9db33d51cfad503c46d9bb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d451c8546d330f923daea7656b99d19308a458a93d2aaa2a94edea147b94a040641064efe58d9ae4a9e88d1a86b421d9cdd26757a1d259e3ab0d664cc3291d37c86a2f391b0bba03d49fd05dc5e786f9345d74b74aeb49250e36329362d4611434585b55c0cf38555baf5efcd8589be67424ed732a8db6bb40de492c8520fd4a39f542df4737fc0c3421aa7b1e676a5c04e961df389b1d844e0957bc39cdf982d33758af22bfd1ad3ea54d905d5f8becd44dda68108aa3a952cab4b93a7161d927aba7b5030267a61f67b450de4fcabd1d3568db9dfcaf0fa658d6793a5f206d945832b6681562d97b9c24bd52cdf3f756147f9108d2a4ebd5866233b7eaa8e157575923b52919111a6bec5344fb773f622ddae8547e0a6eafba93a1387e2b95a731fc4983dec3d6cded94f2d11b316ba19883a5a5082b6ee4094982be13f04d87f1da4e46a89379adc7163859048fcd91f846ead7e39cebae48cd2a86c82d2ae1faad576f6d76b625bfa8a4632520c0862b39902f6a1b02c56958afa5a09adadbbee004a6fb78b608fca3d4fd4af2a99d1a1ffa2157b2c24fa567dcec9ba91a923aec673ccd3002c6f4f006f50f915702cc7a1dc59f61ee192383173002ff10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac2b33dfbff1c8a7b44cc823b463c886701b6f13cc8355cedb687d3f1467c4b3a3909985ae6167f76b85e5d0a3d3636c0f1ea124bbcd2a8c08b2bb09cbad8c524fc2ebbd8ee04ee833784eca556cf2f15db27b715757d6a36f845f8ceabe0254d8916be2109c674b44dd70a086c915f43dd62ace1ae90c3d1c619f9dd5d7259ad216ebf2a02aed11fa517cd0f2af1c13ef5410d9196ade78cc2d269a21bb4ec98dfa1e7e111594fa04090fc61c920b457457a1b92550e4e0b14a54316fe332dbcd303b8ebb8e7da45f14fe36d7b409d108ffa1112c318e41f8bd1b9079c410c72cc8a9df354008f3598a156045c9f9637fd452b8ad8480bad62c2aea1e2c41c1bb360a1aae5e5db950cd9ab986e91e44d7ae9a406d1dc8de631e68e4c9d2b1a9ceb1f068d484582a5261a80c28ef023e35de06b381d198cfc45a87dc913d6d371ac749a758320876438c93498da00199117a1c98289da2d112b5a97290d9e02a8c734b42b3b8af1d91da65c9c81fe2e893d063dce1ba4272d902ef9e43fe16457936ba3d395d44eae8453cd237f325d9a5c4afb060b651bb9f9f86d22005228be4dac38a03c1afe33bb0ad6f9a27022a1f054e8acf94c4952aa609f7f027767100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ed616e579e107eaf0dbd519b4ff8d1c69b07c8230227789c51f2165ac441c5ea233c8cc3c964003347f610d7e5861ae6c31e94c17c806cd58bea55e8c9c0e8d85c52da026ba3962b031db27e6108903ec5f28f1a844d4ec24e09b17a1e085bf38fa995e849cedb27928b21662f102254baa179bc1a49b81053ce0205b15cd8c69d213247a4d50e724a75dd48525e75a850aa7393100eebf9b966fd2ed9eec4d152388c73e8696e8adbc266fa94f94b9c9b94cb9f8f3454cbc8d9e364833b30fd24ada0a7cf390e4451956fe8cd271b39fecb97b8ff22282a23a00acdeb1cb4d4e10e5a3ca359ecab63efa400d13b97429dee399caa0ed7e6d42f7c7e938739fc7c1cc1a2a54c60db149fafb3f1f13d386d1ec91f2af34e7a58400b1436931798fa64bdaf6de0cf324322bd2c20f751ecf82645de369fcb19d005fc18a3f79401be823ad4bb00ca7c173d0c86b55ec0e2b32eb279ffab01e626671e1d92811991d5a83efdbefab6a29ec20e021e8659117b1d561859b256d0b41a8478a554bea61c579e520a6486fe9fbc06faad2ce96e38f347ae2dcab770467f6afbb49fbdd2b5b433d11fdee1652b047559f0635ed999d56b0debfa1f45a2c8e0e6e76f059000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002596d550fafb9318a0de708f65ced588905aa06aa6b8cf3043ebb9914c2d821b06504a71d51503b9c369aa44dc96fb3c538b0b8d1a824d8edc37ba2960b568118193bdaa0e721a674280ecab52de999ba7c9ba2b7466a92ba2aedd71d5aaec0f6ffa1e5d04f825c75539a9c1d3fd9a031942df6f59a837b1e00707dc69bb2ad2c995b953a70093eceafabd7721d967d5632e62e25ad8827a03ea3b7ed58dbd355230f90db2a5bb29f6de644714a4c099a1843b50ca94ff088a622d2451c7f2575193fae7e209d035691c6256f355e153eb879214af1f7b5803c307a97e3b77f4d7915e42550d7a5cbf3197ccd3fce841fc091c2ea30da5a95522df98e791368d3c17b22e49a82961aff5bbdb386bfef2aa8494c9222fb23aef2a761b58838a245ba6380ead7e0c194cfed06cf2c56413c96986953ad20b4b7ef736e85f3bfc5c8edc65b84cdbe23b7cdec97ea8f7ef29705cfd1440ca9dac3d56792081a54aff01e81f20e3ffd00cd3b68b653fa890f1fe8df8a892cfc03732043a6d1453fcd57c5337b7834ce22101af9b450f0fd0f281ed776f4e3762e49bb1a7348dd94662b9f919395bfe9b92d403b5eed264f3a41b63a9edeca3f9074635fd61a5657c7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024cc8b9521321a3f480a921f89306586c81974f3f674b711c57ad2a8ef90d50f83548b8f0a12a0e4d785ccdd7a1a67dc4ecb535872e945a90c9a6bf36336ffb46cb59f6a9900e9248ea948c98d5cd39da639c43e45893dd47bee07f1daceca66dd34fea1a3baf89ff0c3cd727fcb73db46bc43df991ad4eb89f28d67697c5f49517930343d84112327e1f966fbec9b8f3a89189abea3e46f0c7e6d1aeed8346d42b2ff46f56e9f4668b664a7a11776857a4e651b4bc5f2967115dc539c652dc8aa1cf6cb8e26914fe1b60e60d418cd343dca6e906dbc5216bffd2f036af7c2d2a0e87827ee00b7859da0d6bdd89bce2866be942d3aa54428b3db0b47715a3237e28701953237915472c65b90ca79f0b36ed70a52ed637ac3cfb9952b30c03b324fa2d16ebec7b715f223f895559281b75f5d85fc2136dee286d5cad20f8bb7172bd5c5af2f2a9421b6543d86f98b1629c5b7a324b671a3f0542c2a3f00d925f4a80fbbccb999d6da12869aacd20c7af91e87e5c1c368a459089068339371e9fb09b59c9c721b0d5150bb140a42fdcd55bb94b15f79d399e1a41cad06a177e04846657b4c45cc6d72609af91cb67c333580239e81d5d8319d4f75eddcbd2a2746000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028f3d4702921ba019e17275a3eb265ee96650acda7e8876254dce5d8c58ef7609084bd3380d1a6882e307bf7de85658d7e587a3078cc54f0c74bae9547481478351210dc43b19ed137447e67900ba7e49dfb80c1b85fc09335543629ce8d39865f556c0ef111170d2ec4dab6c0f1cf5eb1cd5297458fb6b9cfd3b8a736b5ab40e103814120c451bc63eb3189c10fdb19b8ec6e12e9cf2602034b531182418e7359d6c520925225937c3888e720fd04f8cc98c268b9fb8609a08e8415e986324898bf9e64abe84d5a1521caa1ab67232bb208a6d94741cc6979d3ea5d00443006190c2ff952fae91cf0570569a04925896089f04792a1da2c927fd1bd06b0aaca62bcb076a34b2b06d6a817b55211fc5b1519dc161895722e960064edeceb38582368e8db002d1998927127eb670dca54cf5f8e76310e4ffcbce7096053d205fca74305c02440b3b2ace68d7d8fc98dcc2e7b6542f0ee625310f505e480bcf821c2f676b5e67f8594f494499ec3b2d91bf44c9a37982145d22dc24ecc235949992b7f799d7c85c502d869e4adb5653e1d2837bfef69860bc7a7cdff8ab8435d6a820981d643fda8284e4c9681e605ff727f0905732480dec2043b9748d26e9e9e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f9ccd9829c0d0dca61ec8f850821d5293335405e0aed68e561b607c8ce0afbcf7fec8b8816042cc8016b926ce7501550086f3f4d5f588ab54d0aa7cedceb933f924405829700de6c2e50e0ab524411b27c418345f2344ffcffeb7481d2b44d4d724a58aa94bd929cdce37cb6f4413c29bd8467aab819f7afe5c726be6190feee746de1fed337c87abd8ca5c8ab4ae7941151d173575f3c8f2f162c81f89e4af92b52780e128957794a702ef07352a06600fe5f902d1e548cd0660a396d12b6083ab1a7a07b43891657fa7e52004fba413b79d25b0e9d93dfae9358f2a4419c6e5f739a8a1638c321b989e56ca83c79c2f24bc5d7ce13f39e420d659faaf20f1932f21155a073e0b3fe68ee85a64531ceca52ac1b7bcf592552b92daacd5abd5836d43ae6dd1cac273a71688dc505c4338a51e42258d532a04f445726ff35cb7e8140c026ff84e1705951a293941998a47adfe30287a5ffdf2b3f7bc423d9b794517c926741a0c933cfb7fcda2dff6923e95acbc665532d0c19a8f115c5d4bb1cb776e3163c16c51981dd75c631888c3eba819fd1291a1468ccf7fffbc051bbcb028b32c1f2c6b40854e7799a790a4dbd17e49d484c2334b8e5e8cc8cd7a26ad000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080b74f9c68ed284b692d5985a42b9ad34a56878633802c811529a335bd4b22a4b53d4fdc5f7ecf5031a25fa0462a980de86cf37d02386c782261b24295f6ba2fbab5fb31c625ca5d63e58299c93c722ac2a8d31b33ff5dd312c72f78a79acbf97ffd69496dafc0d362c298e8f9009b0ca0c06915e5b7c0512ed37dbdb437732f1ab518a7362c3e7faf05ea1468967fb56b9ced59c441a44faaa58135dc0d23c3327811c935864993cf01f1baba0f81f712c87a948a80fedddfa7b98add79b7f4601f6190dd6556ff020177bf4bf216cc64b7e4c7f5074b989e0cb2e5a037abfd4624d51b4f8f69958d1e237d3d1a72dd866a8e5fa40640735af45fafe52c3308c9ed3c329e84f0ddceeefad0df981e5c2c806f7c80d227b041e0919f7759d1d6e26fbefe55737611f75cb45df54ff41260141954e57bfa2c63bf802594a496119980acf8d03202a2936d8d27d5efbfe20391a3bf7d1d07d6a5e093bf078b426078c4accee745fbaaf1e587aa8a8f8e5225026b63c60360d6576807e9ba571bda398b4f2d0175e449e6bfb8383dfb33f8850eafb2deff7118f909d1904e50188f597a982a292d933c5c6e64bf693984bc79d6274cea9900031a398bdfe723ce55000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092acc5568ef8b296ca9aec7a66ab5a3423975e691a40f623a4a40d1728adff5e9244d44569780f3f3089dba40e86bd57a91eed5231b3c22422cdd49b30779ef82f5b23d03c0852fd3369d26e2a2fe1af0c2bcdf68d221fa43526a7864ad1807a67922ecb23a52cf520e6f7e7f5c545936570d85d526eae973dc33fb6d91cdd28d1ef8afb542da178141d27cb1c7c2b9b6f4d533ff6e88f1118dc207cbf919b38ff2c1b4e98fabcfa5c75919a3bd2f531ffe6b0b1741c99f374ccc165d49d647dfe9f1be4600c7df66165bd26194e249152f1a92621124c03c9aa19f3fa7e914ddf8cb75f5af0076266410b5acfca6df6cfd6d63df34afc58255a02747d4ea0e15933681d9fe0c8dab3b2f8e70a0df8f1c68fbb830d6d79b832e2bc356442b4cc72c0516a0943d30434b97045fa41b86ad1f4c7d2d80cb104c746c48e56e1a512985f70c9e57fa06c8bcdf59b8879968384d7e92905c7421f84d5ab46550a5aea1600159d7f53c6c144d33c9e7038eba9cd92ebefbc348fba2df757685618008df01fe5781a9b9c766b2d4d1516bd77dce56b57aec4cd29af04445e44135ab31c63bb69a9f8d811415d5357af7271efb17480e33bae808a1b1e7879919155e26b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ccd84fafd9845d4562af9ea3a58cc56381acadc01150f28a21850e0f23d639b259c0f9c92a4ef8ff81ffc9d295785c03ca4967e90d68f7e7aefd0bf0b049485287b66eeb09b405df362edb09627e1068e7c437397be9537884cd709c6e87b4ef9c65e0e50be165aa161cef863134b84b5d49e7a61822428a394c7aafbe2f1612062d42eb6a2a28d308c51c30fe10d34700882fe6ee0722c4697650538144b7ac689b020306e57920def9e72a21d015b393d31b3fb456bd9d306d09e7875142ba3011524f47f3ec5a75ff1eba08412a3257fba954e170e0fd497a5998849a009a2aca695b094e9ddf88474a66ae98d55fddf512fd17f741af997720d9f58539b58f606356eeecebf32d9754aff829adf8331f054eaec072dbaf9af7c77697d6784ab17a199a4595c1417ff202d78b48f837a7405ed56599dcf21f1eca6b6ddf7fb22616d4cd8036b5a39f046d28f52bb85ff134108b881400a39b57f0785eba857e544dde17afe0b73d18a3be0af7928e158624cd98678e52e92d11a27ad80299b966dd2fb6421ec950e79e7599610626a1613893af5479ad78cc2d907e604d5e326f8e970c04c96d19ac9eb45140a1a78f75170022e24a1be35df5a48e3085f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001af9d77632651e2ce9cb6ad35e6c393e4007010cccb5d90843388a428514aad05fc61ad27cd2a3862d82a73491a2529bf244c7c0d71b9f0f4bc462f6a62a26b4ebe7e33502c98c10b29e51b9ffaf24a379a04977dee365c071623477de869cc4ac8c0fc01cc9ba0b615d17bfa13352628dc8bf4853ab2c880e431fa011a759a0b8a5c505d5c327481ea0caff03b78d3af604864e2edec2c711d01451b4cfdac439e1c8f32d8318267af916deedad1dec6a987ceed3132ecb76f4d8dee4991664b49d154598ebd9b799c79186254c57f3cf33b6aa7cfaf6e683851cc4ee501c77cffaaa241db50f56c21b27347aec3a13cfc86968c636551e1f88b1dea602c0bafa31f0dda63f4594e3631644ef607f76ba8a7cb9f7bb776b7f340bbba41b0e197a6b5b9307ce96463fac6bdf121fd22edc8b069fa060fe7a93c63ba61a8766ee4d32009673eb5b37ba9944dfe2e8277f813ac957b3701ebbbc785835e621c4d652adfbd8cc43a8c8d6470bdf235f4719c8483174ff442a100c7b6255d9dd4159cc836030a7b1aa2b341ddf2b86cc79fb6795bf24fe9b00f7f63a4e67f82d42fc85b2812a742b47f9cb898b63b05ea0193cc0d5493650c3042ed4478bc126c1d1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012ba2371fcb0a026dd4ef9025e574d65dab6c9ea39f1e293ff5e649f85e373444b10aa349ccb70506c7ce6da950a960569d6188924d496b8f099cb4ccc587d6b7c0d95ce8cf956241326be7cf9d0e2cc905a99f360ae6e53b59c32d31ba57af04ef5618289860fa5cd05af29cf0038cc9578312695dda82304b8375aebd3899790b750c08de8b944c17b2a7134980d42625248921efc6d4984b2c85a3543260cf1d2994a08b1efec3e1eb0ba870920c3c6484099d24c499bd4bab6c26bcb9ee05b77c659951f96969516c468cac8a089dc1227468db98b314f8d379fba21fabe2f45158d4aa698a9987fa0b01509787ba7b7c9401962a72886490b88aac3d3c8c19f53c8432940b6b98be11754154c9270e34aed86ab24d1c84195fabddde0b85ef6d10dc73b9804ad385e90c9f58ff465e819f1831bc2f3047ad785b54661391eeb266f57a581aebda08190247fc709236618e2ff25068de505c696169dd6facf5130b7d835c0d7c77228ed8fbff92a6957e8e86d51adc111a8ae37fd20c6fd221cbeca2da0a8dc75302ee869fe9cc135f65ebb834b9b7116404a74b271914a88d9411abfdbb161b29f05f6032e5347e55cf0b2c326f2c3929af9f5251d7ad80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000073a5e8852a0b56b308c4496e9c1582d9050545a15039bf749d8705d79ddf4a2a107cc9aa3e966102a386e7a5d83be9c7a4bf7a897ffbddb1b08eb1a1ecb44e4c80c6536acf6ebd8149c9b54b78024720fcdbeaba046007a9de959eefa732a64cddcc9a65afa872f0c402ee3c0046bb1e7b14e6f5ed14c35d733df4f4b860c5edb492a8af8bb836c95ec52a2cd046e52e83e96f59d29808f11ea090488d0ba71e5d2814e8a3723db195435731be25d0f71a775f02bc2c8b20dd020a942c25bc551c454aac4ee8e29aebdc497924332bb115f0975db221c65f4c52748d8b44b1256b948861405cdd1fccdcbc1f325f2a7b7c7c97f705e91e145c020023757f4da82425103014e98448e9392aaf9eecceed58386fe52cd9e22d8fa81d11a8a1eb10ff7b73ec5c554cc202bfeb0fe4e694dda1353d7bdc4767556f3ed604813dbb3d1431a591bcfd7329c92538d48303a40a064e5dcb224a7bba0247c324affaff03102f9401ec7feeae6e61f4325992c15cb1178f2aa8788506db0cdec42c6011fa8567d46951daf671c6d88cc59103acad7adf928ab89a4e0be698d81cdf4ec6cb46746d2064ff3f56bcf4006dade1cb6183cda1abd1200b4d584d27e9e0c315e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009459d1e0cc361ed158a5b7fade069dd522b3e2b67d07c34abdb6f97f73acfc9b1576826ea61c7fcdacae621d386168e0ea908e2f99da07ff6d69feb7009725a665cd728d880614ae00d21afcdea7ac7947e40f8cb9f87f9aa53db1603c4425bf36fe2965d60711968318c63879429111c711e9f35efbbb0213abb69ace477a5c6451e02970c7e6cd7f9635dc47307aaa2bbf0cdfcd552f6e2c1081aeb880599fe1e82c6e26913a79e6552357990715aea9b0930cc99c361c2847206dc4ec8096e209cbecbc9d2ee664ad7866e86ea2370199ff5f3209234787accbd22849adfc3d6f76b93883a1331cccd4ae010bd6fcc7cc85d06f4a34efecdeb44cd31e1e37c16792790e5e2c0108afe576926ad0e4cbad4f16aa693fc71fea76379b34dac57d960bae4a236ff24a1f1be5441c821fc6ecb93a438aca7d0581f8ad0cf0ac01d107fcf078702fd4a2c99c7a75e106478043e18105f1d29ff0dbcfe7a9815b18fdaac94f8d477461d7602b46667113ade954fa99758e505ccfa9e4f9f7576130c847ed4f897c003a8d9a7defa256fe7d493a0b1ba46e6705d26264810aedb56a5c8d4af8f1c91f9f029273dfb21129a9ad0a95d82089242105a989ffd124024a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bfe9d99851b54cf66c57935f054434c1d30f7734ec739817f3cc2a2902e9729e7f10bc340b071ef622bc29a5e1d43d34017bc8d6f5ac5cd97853ed4c6c2be583e174746148d5309f557285b32711d8e4c5739f97372adc030c7135296993ce7bf7dab0d405e422dbcf29b92c2e140b7d4b3abce503c20a09fd80deadd78c2f7594959bd72f110cce4397c8db349532c297b3208c8b2e07bda02f2bd1fef6c24e2409f3fedbaec58e26a5bdb804c5a336a9c14afad492332099a81951aebbdf64e7737bfd888f08ac03b1a98e9f14743110a7ea123bdcdfce6179bfe13216f0a1c352cd767050fbd97871af738936fddc0c8a190e78b43d84298a87140e5a3598fa2e420484d2099dc4db4104ca7239f444081be71c238cab490370211c8b99b26d9187a96b45b1d9a386f29a63b4e3fb5f66c6cf3f035f99b51b73363d5e7a5f612fc15d945eb5fea94ca816e0caaba0d6e5cb5bef7fbb612a2df36f9a0abb5b376cb1d707d44ccdd770c4e9639571c48cf0cc6c4eaeb7bf0ba53f571d5040e787225f344ec2fb362fa4bc0d7f14ad433fa196ef9f76b90322645b160bcfe469fd86873eddf396b9095a3d84ea9aa2720c26048031f1c89c3d31c5e84f16f9400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001adced06ecac35d29940036352a8914c0f79c07ca0d32d6da119ab91296fa1d5c836283916162a1db5173be47a73e9f1defc394cd8cf73cfce76bd38165743bd2ff41f244f38803bb62bb34ce928cbd8e43c892b0302058b52967bb303b4f08e5c8fbebf73bfb278273e764b8ba2886ea154cf9bf70efbde4bd91c4108e440cae7b2b4cb0a74b273f17290b0d95879cb9d8daa28cacb41ffcd9345eb40e0775cf719a85f7de84bcae60e61204176db34c18f47ba1251d29ab9d9f54050344196a8cd24ee7161fa19e62cba549d739d5af0b42d75fa6fcc5a78a60a325db09d883d2daad94aa8d579ce97b7328290f4692f096bd58d798f9bafe81071414688b3a4c285ce015b72def8945dd24655ffafe13f03da8527cd3ed4172fb13f5e973dc144f663fae9c14d61d98c22ad193d59da1f4d11c1075286a35e25bc24ed93717ade254291038f29c103fb43f753a604f12f562a52e7e25ce774a3a731251a32a4e7e0f4cd7dd1bcd25709e54115f0ba7049a2a272afb8dd65044539e776fe23098b4d8a6cf2764898cc03dbde37f901cde6d08c102137bc6eaf7beff697fdf93d6e5bd54d4d4193129c287193ec8bbcbd0f38177194861153b9c57ac26b51930000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab90ace97aef63e6ccb9606a19be15c794fed8a682afaec54c73720a14a659c2844700fa2ac660c286e7b12b0810b057e8d7370d2b1626ed9840c0759b367d1c15b2e49d15a1beebace7665167d75618ba4e1605ff40286e4ca09f0fadf8e55ce517dcd5d733acc9dc97628557aa3f2c298ee9b90a4c9a15a683cd9b49870e7be7ed9dfd78ab7c986b945db7bdf96bd04c429710f8a49625123ede6d9cc7bedd0938b585e1d8fcf23c6d3cf3d912661518323ac37d815693bd0d035eadefdb2f4b92c7791376ab30e1322e40d858c729a7095ca9d8cc0fb0784c39e8e90e24f5a238860e51a8b4dc0a30ef7d2430e23e41d2096de0403ea24386e6001dbc22364ed72c551c520b4da30406f329f10a45345ec407f40e45299a3b2e7adbacba821ddcdea52986c7a8cd4d5fc033c6d1a471973f25d5098f9d558ae69e5ebe128b97d2bb78b906a7c72f67d71196163df3ec778ee7b8b89a4f960444dbc623b1f715a9399fecaddec8bfd1faa0bb56a85c4e78325e4869dd842c02977464bea578a82efbb211fd0545a68f473d0db7b6b1594ae986d61e7e0b377b39418f6219c965b66f18f21d3d29e560d6ef92087bf439c7c1f5183420bbc6007e9839421e7000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001aa6ece40ae9860fa9e68cb0d443c95c59c13cb3ef63cd36140ae3d84f95111882e54ee44957be68aa47e5d1d0023566289261ae2cd0da99a69b491b280a052a8efc3e87ab5c4dc7de48a1ad3469ccb22b27489e66fa617ac44fe38f98a8f176239d4d015b261d6bf718f6dea96dba214bd156d069668abea8023be30b5c2a1f370e2f664e7063737f0548762d9c8ce417df4fa85000ab3499a1fe660f3037afc687b5d409d89cb7d314ad37100abcf2325db65a351bfaadee706c93356d45ce99b4ca84f118658367cd8349c6921cb26bddc47f1ce8bc45496ded2018aa97427b8fd7f5348a0926ef5d8ca2eb692e042790c92fde5acecff7d0cf49a6663f8dfbbb3a90594b798f1d4ac49326a8a9e331163e0808608f03ea412ea28f78083a97927b9371a3575a703d3038012cb40f1b9334e1cfefe4ef21e6a5a5f1741740bd02f584608842d28ac2a4e5059bf8a83498803eed4aad3271702905c20a3a3e39e2ca9b09275bdbcf127d279cc5467cdcec7730f12c0c55b2cd753cf5554097041539bb9fc8d6d18a40417540bb31b302b0eae0e7bd09fa62c70332265762bc2dedeebc405f9afdc434e191f4854a7f76043cee7de4e95ff2205fa69485cd0a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fc156cb7c4f60b071579949d1a5150e210fac8f388e5af834d574280247a9f3ad19aba5ee9e6baa4200c30260f7861232ccbfc79efa1fdb53a09e20dde33f25ec360cd20a1cfb77cbc134fb0c90d857f26c5ee3932a06b10d8539d8d1fbeedef134e3abe9e285d986b48517c163441969c9822f7f462b86e11ba526016b284ccd0dad3e6515d9aadbe33706676d8c45c254665f46d78468e9145bc128a6a2a09b1d6a49480e5d30f0cb05aa9892b9f680b5a74c27c31d1f365632ec0124a7eb0fae103ff7c122280230b8a983dfa3dc207177e8fc9b23bcdc3adb0fbb65de7dd3bc8874698d044ae7ffdec7976e15c3c25a294cd1734854244cd7fe9ab722ef31ee3299ac83f5b078570c2326cef90fc7f4b1cc6f80e93501f109c7b773aedc93fb9ea7121106fd5a3e62c96dc73a492f02e164680a8dd2f6696f716680d312b574a9d3422b22161621449e75df2f3ff2e77d0ae33dcf6b569a20508e0ff37a6f3b5f0e9ce4d0f5cdd786de6776e55751c71f3d15426120c9b808fd40a4d0a8e34ff51890908b96f47e9116234e2f7aa7e82363a8b363f544eb75de0b9d4736d6c4e15d8b595f2f11b1e138879e4bf47d576739dfff1c55de66d6afbb7450710000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a376855204b9627983de61b52e109d757336ba25c02a1d3671149a95a10bef8cceaad4450490c44a8b036e4ff7a0173f0d66023f2796075cf67341e3cb7577abd6bd69bb5af6ea91816b9d71f21d0b9b0f08b81fb534597234d0fff911a779035b3ccd0f4a9f301671499a8e60a62a7967ae0d039d7f152153ba0c31956a1c58d03527e9ba40efa411981cd4e3b258a376e95d6976c9acaf784a4ccef955cca308741a94129c25ba810f44739ae8ade6e2e6ef64de33eb491168b149da72daa5f95bc24cce76967b5348f03d8f79711beae91c7c003e54010e5e009ea9b64fba4f8f93145afaf146cfedc284ff6459571608193872a33b50f717e6b857ac2444e3cb1e523ab753b52970a02cb9b071996d73f3fd7416200e59a23448bf5b8cbb499fa2dda18067502ac146ce7bdfc3e691afc27f2400d1104afdad9c8484e5c1ad438ba6c97dcfb25750091d22d37f4931346ccf1bad42b8657bb5fa88b6db3b6cd74042fe755ae9cb39f37c312e2e67744ceca8ae109412c4de527c270e5085bbb8000d5aded24b1ac6e82090328b4ed60c67a1980ef59f31ff0813ea6294a375e595458276d35584ea245accd6a4007159ce732b0351e6489867d259b997c000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009544e572d4859082f9f2e3ec30fdb6d242a405d147827724a811d8d4f734d0786c7720ffee396f46f77bef6d9912c69eaa00ed68fabf42defba87c8b1d0afb4e415b22a26ad902a7e4461043b7d325ad8d936845d4d03518ff806d650aef398fc952c94db61238bf278e600bb6555da778a67576be7a1c94cd664a60906c7c8e24373d93ee9ac91101b02e291c85d04a094ca7525a426521764dca11e8296776f84f3cf20d65b60ec02875cab685a2b3832bce649d2e2d4250bd517b405f85ec91d694d9550581acb6b2b73f9dedb099025f459e9f58b2383c01e982458196d00ff5b18132a8167f453f4210567e3cc68858ba717dace0e85daea3b12ad0cb3419fed1155fbc7e60ebf10424dba5767006842a84e6e6326ec7aaf1b01a9f37d68824a61cd40701389225a1a98ca7920c0712ef229b170ac8e6010d2562fda062f708c7fb4d56fa5e47c7926ed3b8c65c505c6c81475e5f34936e20992fe387cd421348ec8e5d15e95d8e3cc3be98ce1ae6123f51d2939c6b3d611cf0f524eee14a50c78dafba2bbb8472e502ef683ac7ebd610ddf0da5d4eb0ddab85fce4cbc27a8b218322208c5643107d9b4c1191697fc791b6fe0ab34df48df687f6f82cc70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000802a05fbfb78aad78db6b88412fdf1916d8f97a67cce236c71164496dd10a6631fdd0ba3fd7b6ce81db433352f2c7d4799a5d45e34002f075314b28e99ef8cf781c890fcfb8148f62e2fada739348dd145afe526cb3d3f62e59b691e885d7ff85757c3ca05599ef0ac9728e7d60d4d3a7c77d1a84389159672306b178809193e4b32f8dae6e19798f2ad2709313f6c8d345f43d44ffc66f357e5b24ea3191ce77d50253bf981964b3d08c3b299f79aa8034c7e38c4ea9e6ae22ed2ce65ad1d4bef05e9099edc50ceb3f972414a8ce690848d62d8ee8bb45155471204338ba0f4687870f80996a547d0e5e4fc37bcc8d8e564b89bc4d538f2a44f1caf16c921f92c9f263083723caf65cbc8398da4d286e9a15e0cda894ada0ec193bad6ff89eba4ac4adc82826efe82a25c13e2428dc639a49b5e6e3198c24f825a3e4228ea8bb0fb0d08f3b3039036679d2b2fd8e4eef890a1a11da7d68d6113f09bda326dea1369e2a7fe28d61299e773b9601d3565763fcc604528a11da7f117b02c48e4a47e325533450176c205e6b02e0be928f40688b566d8f1fdf4e0ec717005326c4e204fe74d4085874d474208fa0c8b5cfaa52c8e32f8624a3ea534960e5b1598800000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000affa10ca4c23b226538588a1c0511221ec2951f70e6dab78aa74d3631d3010af1ae7a979847b8283fd06c546f6c86e57b4d3e6615cdff7cf5a8fa646fc8786884227e79c714e00d207fb6b1da68c9ae0edea75e8bdd9834c2f6b049892b849a3a96da6ec77ff687dc2062c3107a281dad9dd4399015829a6aacf573dec8bbc499aaf2d0472848373e99fe867fe6555b4f90b43ec6942ccba8f24b4af9b44d5ec37d600d4397251289bb76484cfedbcaa728188d65c2913951ba0834efe372076f9a0175095b18a81646882ecd2180ab3a31a426ee89a27a46c0967ead96c37ad0ecae0218b5e922f248fb2dd41325bfb180e8ab0e8148b250ef75d11460e1d900d3260da04fed803106425844a6584e08a4e7a62799f9062858f6dae9f9fbae1f8e6d4f21eb4d4a653176ed1dcc49f6051022c23b102959b02ecfdc97eff66b75af01a88a1d08cfd4985a5bbe1814979711a2d8405396937cdcd6d9dd462376903182f837a7347b6b92662f9c1197b1c6fbc053170b69a9858e06aa6702387d4f786a683e3d31b4123d7b031adf9674f1f871e9deb9e29520187c18a7a844bb6a67bec55e1dcafb4d68feefac89afa38bc39ac1a4e320d15af77e806d689c0460000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000866367e1482e0434b0e2179ee2f12794ea943ffccc4d3fc8bd5e990975fc6135dc13b6cb7942a1db7fe3fdb990cbde4ab1bcc8ae1bb255a281bd0afb2d7b2851e9d131c6036b3dc23a2100a25f88f3738a4f89370040b8c9ed9ae9188ca1967f891dd84b01eba8e59e8e9db4b9033bc73d79e8430542a8048aac25716024dabc645879e2078b0a05eb2f0f754536e80c1f349a970adb3d362fdd8005fd51469c6ed44400dfa7a8fd526a515307e914040a685ddd9b9d09f2bf475668b9552021f63f11ad5a569504413ea89fb6f0e3c15b1487f23e6005651263f1b81a0962ef531e315216c365e89e5ac6da98a40973e984da956ac93ba004d6d1832bf8be325d73ddbbebf498beb4850853bc76782dbc4f4565b0d76a972edb40572855912a8fe3f6768be4475a974986b357f55681e48cd87928ffafe01bd8d0652404d92f57173a45e7a70a2f46a5608b2b9a898420ec05d8de35d8fb91b71b53404f4d154dccb0ddeedf60ffd8693ebbccd4cd1bdf9594349533337e1faa820d4ef68b8a8917862e78b4ee4e88ecc9e2d158972d83237ce444162b7eade8d02845e259c34822bee7651c4f76780a5d56d4dc9ea7a708c1bbcf18ba08b624af0282835d820000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac4a9fe9eae2bd55d79d01d8cfe48d8b984c3f6348711b2c4e73861ffad33abbd8a684eb40196fb37db96b9b5627a1436fd885c61fac8e4f7acaa768f336bda143c0611acca26be8a57a3b9e7d777dde37d0b31e711dbadf2264f9ea479856f310f7a290f8cfb89274223c2113842ed67549cdd33bf1b45c04c0e6c6991e463bd99cbf2c22d5f364639d3f3a8f82b0f141d3717184a24cefef795d6cefb7bfd765d2250dcb6a614741fcd731a82971931dfecc0351e1c825b92a83111ab2c697e91bc7dc76d645ddd48570a2112932cfbc6dadfa3380325a34ed1c0d2f1fb24db0fbe584341d97035b828c36d46abd91d006344429a8397e69f557cf7fb111ac36c90996b8107a1b67b5e9dbb26dfe5b546c492efb451942ecc5f099f771f16d489b4a3953abb745301fe87a0c9ffa56276a7bfd3f39bea652197a47e4de661b0054b17e2029e2319200b5bab64edf3419b0db3c19e62e5f1a1a2f643225799fd90e00caee535846e232ac017f287fb980d78af28bc8aa1d6d9b4aa9d42e7298e4f360262b8506ada73f36e65f8d17229832f9ecc5dae1e681bc42cfc961f1449fd03d5f82feab396f039d25762dd3d7c7816b2ecd4092c2ffc4de4920d5e46a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000859f788f500b24a60814f7b1ff0dac6da3e2397d6fbae9392bfaa55c0f516851fec502a1e03f68dc3896b198b4b6399d9376c695480d8decd82dd732116fdfc6cadf826d61fd303e429b2c9208faa47a1ca64b0d4b55ff72bd9d9aa5ce4de858118069733138a0e286d0773d256909249d32f4024cb142f8692eecccadc9c3ae3f7e451c44a25d98c14c11fd65f7176ced0000bf095c0b9c49a46cb8d135d436f241d0997923770681f572bc289470cf862997d97fcc0493272de03568fdf04f355b0464277e32d7f336344f71448c8b1f1ed669a5b12e4f03ecbf0ddc8607c09d2a8123d376420cb1e31ad184303900bbf76a44c09f3bbba0368b32c6307fa6a0e04e3df1031a2d297874fb883d10a436aabba4f206af32c1d740802723d50b1f64bcd86ca50608720364369acd94616e2e64c6bb6bde925d5de96ad32211554fdffcffd5dabd700119afb387f6bdc2b3aebdcaee3cc0d03d8d2fb595de2bb3e713e277b5310ecb7734b7f56c5af70f9f34fe64e54c9dca275e160d3462fe55e39a871efa1a0fb9afd0e52a315a3ddb7fadc2ba34587778e9afcabd082581c2a5b9d82c5dc23ea3d22210809fc837ebe591dd24e8730b7a013605e8cf7e80a30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000acc4e67de94d698ee8407fb3793f4c68d8ab47228fb13e1d95cab583d7ec8ca6b898ff4fab3f81ba931f855a8d4e5df155fce3343fd25608b4514b2854f6aa9f07af90ef8f1b4ddf0ca7d5c7dfecf982598183e4fea4e357c97c5e595ff7694994f8811c187bca9d09dc1318f0e492285114ebdba36206824497ecdd657466a34df43ce864eb33988d3059bee0539ef984844c2faf74d60ff98f633f8b43d04475953a6509f996894ad92e29ded5d2d28fe21ae8781fc22a4270f7112ac2590aa9d201ae4e65917e972343ffaad0719c67547c8c226d37bec61df97426a997a8f68ead91f7cd957d489984b6e24dbcc53e3b6745e3ff1b46cf957a727e69501ce353176f9d8b285fad4ab2f3251ef71f330fca4d16d9d81a93cdc7398d9b5e20293dac0921d5f6388c71c37af0a87913ff3b5cda119959f693a8c10731cf01bf0010ff2003d2e604e23acd52ede02692c95bc9ca138705c74b550ae19a086f800e21122f705f863c0360479cc9f8789b1f496f0d5211b5f838dd12e4c3601af20e3d1f97dc7e68ed4f6b3445872fd5ab605db4e1adba42949652428df53a18ecaceee1fc469ca485e24ac68e97cb607c05a78596641b1193dffd770c5580e5f400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a7d6ad38dfb54b6b9abfff35b1833500a38768e99432b0f1daecd5cc266a18f21dd50b5a889e8f7e01811270839647d320e634c13842da666ac6a395098c9203e6601b6afd704c345f1c5c8f98575ea85c476ce8dbadc9d2b700e437589d12c1f9bbd0147d040d182088c741a24d9882e8e6d92953354a73cd8fa24a868594bd29fdc4c6b1741564d725468cbd72e58611189b0acb0eb050ef77c4bd9e54e5dba55771586b681f39d8a8e62db2971bbdaf8d80a53b01056c09be2f95f8ef51a246fb0aba2169629d6a0c78b3d425c0f47d98929491d48870af750a5e45037bceb93f08eb0e2a8d2ffad1e5463c440906be9659e586d85327453f41f306fd7953410e4544587bb01ad7bc614738f342d65b5d64d01d6d83ff899243b6ccce19c7c47301c6f7e21b7a1defec94dc0f84b915b5b37444ebbfaa8370f2fe73aa540eebd552ee089ada26dbaad0aaf8b6aa4f8bacdce74e141cfe2a336a9b670ed2c103f5a81c5044756fbe4b0eba28cdc5038af35ccd6c764d650a5d473be3b97fc54d66702635b7e08ad0477f3e1cf18282b34baaec36fa8b2412b4f7ea65b6af37b91f5a6aa73453de0022d707acbad65094374e5186db29c7c929be539a24d8f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8977e709d8cea4dd8f366db336abe38db57f75c88fc439773682aec6c599e39ef66e8ed1f3526c8879accc281284513f670b16cd3d919d09cb0cef1b3d461b6ffb57470bde73172c2301b2f199e43c8158e0ab18ea4775430014abc4216b4604f07b530d81cc172d98064ff2f924e67347c3cca66cd4e5a51922b08c32119afa42a8c941dd9e26bb68269f16009155db06e12d736feec94f3a92325168a33daacd52a21c90ebe649b969a6ecb46f129bfee57f4a3b87057c3d47fef145072871acad65f2f4f946219993782352929074a4eba1fe5ec7329d8aaa674ef632b5efad4a9d63f2057c669a7e483bc470a60d309091bfdc2bd4b9bcf7d8beba1f07d8b2b8e8e22520153a972350115f197359f9fb99486d361c04a5abd13088f4743f28ddef8167861788c284966516fa4a2a32d1c65d8910ad4713db1fa52fdf3fe106bc8d967250b827195bb78bc52492a966aa9c5a20b679c39be5c2886b687d6ee32a0489683edf8a27f7d4fc96dce0049590805beb12a0c54d0680c36ae8bc6b73e77dda85e6ab7295b015050b73300903b8fd7c5d62897494a0e7d53cb2ac5dffd3ca0d5abd0a7084d7485e7e404e218fc1a4ab9610ce8fab441a249624cca0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000acedefd4aaa9b1705264242d00c5f11955609db12ac2529f20f971b5021b819b0b388205f328bb9153a197480c15cbc946437723c6f3459f579de2de25d75494b4e39ed1af917410fdb5e2f5093ea7981f823778c6f4ce180eb496e846a8ef2c7b23df2c9900a91e4539d635ccefbb7df580c099f22e6daf20c7f461416dd43d5a71d06902ed7342fa0a401c5cb3a89ad0f64922a881eaf512f103086e8b52c0a448f64ffc497b151f5bacf341f32ca57fedb914be6d179d6695829ff413dd93dbaa7cea58e28ca146740e6f26037aed8abb0b1c6ff9a026aaa73f648b66d6aa9d4c25fb38733febc5e2a0e54b5a18740932de7ecd6da3461c1674993d1474530aa023e7415de8fc25050a4549cf300d8be7449744a79059db0579124b9a37c792c47c0994cc8a1a49c8b32d3a9af0affec1051ceaf00f37ba39d39d6de1a191435397744c80ba63280626b8421e3e446b7ecd33f014744aeb32304f971dea70f62e858714277b6f48e9eb579e097249ed2fea8f0ec5d9ccd17a353d495daa2a74cedaa119af9e216a3e0151ea19381306e92ea78ab30437597348776e011f930f0f7ada158a97fa57263094dea5283f85710f4d648f145c2eeac001d22390050000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000996976afd14b10633820fd3061fbff5fa8efd7cfbd25ca3318924362a85c82984b767c99482f85b354a0ae9a38433ad33d52d2ef842d6b781be2c210bf7f98f9292cba612929ec8711d3d55ca50e8496317383c91d2d39cc0f08497e4138dd77117b9c452e3d0323dfd412fc6b9b356ee53b00045184274e727520752fc15ea3ad19d2ac92d4682328a4057f7a414b84bd080eb48a171791a0a4124e8ff9dc4264bb2607debd908f32228e5c4dcc67802138e04309d0aa075bdfaa65304f4b499854a4b76e9b84c5ea1be0df738b29562e3308646242173258c6cc10179e31c61fd96884f3f11a93d5d7cb8cef638f681f9870e13ba439f0f231921f90c907156c0c454f3b187bf2ec52ebc2dcc7df2069543077f62bc259e685590859fde9ce3df45a71b01dcbc12ede0bac9ceeb11186085a2fc30a8f9ae448af5998e167dafe04d0d25d84f35944902736973e64c2517bd4972c9b49fef5912ddf88bd8fa7624b6274a30b9129d198851c075201590e36fe650cb32bdbc20551ffe5b1cb79434d36f2fd3fbf8c4806994f0588bbae2d17b88c6a5ccbf206955cb1f1cbf90597fdfc003e693302b1b56b7b47e5886ee09eb90b31140f292cb5de8ad00989af00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cf456d3be4376afe8e0f42d548b0dd60c13ed875b393d9e9ebaedd3da37a4a40a8c64f3464d7d296e327f44a31fe842d46c66db6ff4c5fb4c90829bba92c14db7fd9e2c94738387d481df77d4ecd8dbc24e0993be019027455c739ae38da30abe3e8fb5b78421ea6dff8e66a2f8cf80ca1e6b4979ed83a0c4c15868f674de6e278a4392a38dce04a62d899bbeafb71d9185d33f02660ca77c7db267a18f0d234e0cccf7aef341c3830d106ed3c605041af036b7c271ac2c1a038ecbb2fc1f9b3b9511889e1fe3b5fccf3b2c620773debfa7c5817318dadcbe8393703015bff2f5c3fd2ba7600e0c83774ef486b4b316ac2150d8264792d1345abb46de6af5be93372b9448fd57c568af34db05be3631304c1f6c9b1d9f3cd914458f17115df1172db9593262353d1a8f1f5b6d96cdf9127e3123972f066f79e2f46418ee42befa97bff3dcf0741a8c1daa2efccee32270f544602fef52e482b0b1484252a221575dc7d97499bc67767075dbb0426b919fe36253f1c1fbd6ac822185b61fe75baa43b76e5a1f97c548ccb2a54a7e1ad5538d6c9a93d13225311e8b434d5183d6e62de812056d8fc20e76b0f99664bc71343d858a9fdbe73ad3a4a9c82078d0480000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000259ff72170bfe2a346a21dd4a810dae4d1b12cece2d9403943088686f490687ea296c835b110b8d2157b6f033f6a00bdd72aeacb400e20673537fac894fc65db21e0939c373a05cd5b5ce6161bc29dac65c015215d09889645098616882e3e19ac14c627ba59c5550ba37f322b525e27d01a31b01483a1e141fd046a9fc76218a596c3deb677c53e80e135c38ac63c9df81a4a500afec699d3602f651f2547cf176e2494471809ee7cf272e9406c71cf2b9315f0c5fd5b858efc05d1400889486e771b0cbf5d2cea5fe10c3e1baf8a801218d31443658856a8524df88e3deef103c95834653c9c88f257f6cc4e531641171754c6fd5c58c8839d8ba007e730c508f91012be1471d71627442eb047214dde94e28ade5537fd0ca831478acf8b10f5b72676ed61bbce53e134d747e259896ae4b3649a3eefcdbdf0ce8a3665a218b0c7d5c2de48f51013fc05d9f887499ddc6a875a7e9aee81a5082ffe737b78d748adb89fb699543c240378499110681f43e507f6ae3b5909956baf29f4e2efd250bb8b8e7b482666e2654f1aa1107b6a657459d2d6dbbc6311d59842af20d1350fd1ed5f91eaeb4cdf44bf4212703b751cdb6e8cd821c637dc73fa0bb0e350ab0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae8e10e2961826ae8da725309c22bdf3bdbc3b3b8d63031ad5629bf25990fdfe7467d49b1f53585b70835009cd63ef8decf7c98683e818b927ddffddb9505a6d66a422f67fa51214c0cb9b06624ee1f6b812adbf2e34e4f026d24767cabeca95cc4b4ce5c640a09f66a2021a7777568a5a19fcb43d9f4136de164bc2791c6226085bd990149ecc6f8f13f2a1b6b52f49ba836b918aa6d948a296b667ba24d3c342fb891dc62c84779db030bf18d80063983701f480ec8cc01993f5bcaf79cf4f11db3125ffcde0fe8ab5108036f6a139468fcb45ce86c5c9fdaa397afc9157c4f49a5a0773056348332e53b94530b170e57cf58c9c4ecc0a27ebdbff91b6dcae55c39184bf5efac25f153e2fd8ab1e8836eb795b8ff8d096f32af7d20942b947dfeafc53fe7ccad83faddf18311b43825e79d2aa52f3ba71368cbd8ac8d8e7894c3485c7f68e933742e03bb949240612a34aacd722bf137ef3e94c49ef9defae0c140050548f81805c7eee7e5d867c23af30005919787e844bb5026240ca219cd57b0d82d0769a106eb5f8f9910270d5766079ef70e55d95d665367f1ed3856b89427541754cbc5d7dc3b2731932c68bebdfc2ca19f6615b533b2194b1a07da3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084197afac0051882fadcdb334e2d862c817d0416450bb6fcd0542a3d6cfcc447ef322f62e0377ca6b1d1656fa5a77025cc383d302c7980fe69f50be15c602117644a95134f1f9be036adf6989fb1a96c00286b81ee0a8c6dafe13c5cb6130c170017f40af92bf630126cd8ec7b09e7a79a0815757436ae3adc8d07faf53cf278020a220581931bcbc618228ac8823d71ace6da4108d863205480b1c8df41dde5698580f5c03dc9ee4bcda927cbc3aa2bd0936c4da8aafc47100455a45c87415c4f5a109a2fcde71a060e6fe0d4e8536892db2123d2161def8c4dac4625e89aee8b44073966d0aa7afc8b4327ac6f5a027f198875541f8ffcb79b7b60a2b4dbaea96316b4fb6c72fd2cae6def38dfb39739d449d070da183ad65ea0cda408c5c3c693a4d6b49a3b2620cd8bb57a0e4038aa4449fce16b331a8774ec374d7193b0e377a88d84bb8d8df0ce77a2ea337ff84a8bb77d4f2b3c5ec1deff2a9e4a4c7738d9e221fe3f99b51fd62138e7a0ec5781ada02f1c98c3c0a8f157e513e4a4cc81196b345a83ccef27597986dd6bae944a0a078267013aaec5d8c902976e615f0cf5fa3af494680d7cc3b9ab4165922c294f818612a6ded92fa5a49fed875fa500000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484019dee79924e36e238ff21fafbb281db0bb0b007ff7ed59bfe6127ce18abbb3271420c9953806a317e637f441a8effeca335f45611b1c920206ce6ebc63d4cfe92f8fa6bede04007900eee7be2d197c980fa315fc727901abd9e39d68763ef5c0193dfa53933ddd60d1579706783a1ed38fcbd642e3c37e9a66a389ebc8fc0c1a0acad2136c805841ea6bc4fcfea5b08605e32247a3e2a79fb38dd291d13335ad007f73225fdda7ee9e465b374358670f041fa27fb53613a3187c8dbad238b9a8085f644bf4f9719cf731f7c953ed4bbda57c7bb905ffa15ecd1d1dae2e18121711906321819a7c0a7ab3904326cfca3da9e036ce10db5342ef04cdc42aa960d3046f35fcd28400a6edb368e2f062239631ff516fe9771e2b7b9c88b4f9de6a531a07638fd0100858afe4d953ba2c317b36ad131c70e648040584e2356b7d3b0323dedf72144f8ef30c26c1f0a181d6838dafcd366eed0474a47ef0332e05a307152401503a53cdd8c5ee479e6d06750c29d6ed2f41f3df7e8699198bf565e36809d8ec0a4176f9ebcc16523d120ec374926db565108ff1c55c112bc64c01dc08246657eafc2bca65c855056045de43609c56f7b6a1a194c84cefb2449f6298e8192ca8dc10a6531a6939e1a9d143f27fa543ed9c88525879945d59373a6807cc0327e4b9a2889f0a33b8a5701d8c79de06c51e71714055353272fd3eeab377ff07073a7e99ce8a29844c6786e16fd3973ef4a90908fe2c4f046d218b1ec30e4f010865c67fc71118f7775cbb1ec9676e1abd0f5a7a17480833539d09c3813beb2c56e50cda2d05b6adf095c0c2275744a089de55421e7f962bcc1aefc4693ed50af175a57d656b19bcf6dd33ac933e8f0c581c3e70fb52d26b2d09cf7930b0d412328d5b06a386632f3328ac77263e149da5ac915fc676176942e574a0e2a23a2c2a5d6802f4d577058212294097b87d614f55851d4b3592fd3be6c389be2113026fbe3b68bd2b7a137ca54f7537bfcfd1681062ecd94c0b7fc54f71e54735671bf4e280f02a39b71a528ef68179492aa73b460becc79584d088b65e78ea343c2c849624b1a24f282480b07311042878f15e339a50e0e7274437ef849a1bfe1a0838ab0f96cdd9d42e8fe030fdf6e21eeba93a04a57e5c8a68e2631127f73d422788d49dc05a332508c447c8dc941928cb710a05d489d42d99c248bc6b14494c24af811f0c6e99fe1219ffb79feaa4a5dbd3e9764f04e2236f3f8d157040f812299120af50c3d27c52a14f025daa258c73e0126bf6ea5dd064ea144331db1adc1ad5ea4da75f2ccd914c88fa8cb6b0304d868bdb6fd748a946b90a7ef14a75ee0888ada3bd5bf8501c2de61ce7f5dc6ce16d74143508caf099d3d884170a96b11bc61e992ba3fba982230ca1122ad7276f29fbbf4ac9020945bd1889158aaa9c019ae833b2f36da6772e854186d68704d8b672855cd40bab6c47a377cb7ecc1d16c8a04a5881385aa871ff8fee44e3dbb4e147c3e5807318cf5860e080394247044452bdbeea71f2f845789fbab68cc93398962f1611495074e01ea1f47209d113b62d06922adf8b65714ea546a726973835ef9e609c1a4856e3985d54db87ff224bba4d48edc72aebfe5093512e62f0c261fe7a42e3c1d03a9d3da3a83f828310033e751d7ef08dc3133d15b38dfcd245ad1f645d1b2d841630b3e18d3d15db299202f97d297cefc3324f80ed93c23eb00cdee6cb0b1b1ab1c42c667d5f3ca01dab90cee7eb320b47654b392948d46154120c860716bf6f3247c79543332ba01f4d8bada5d30e57c21e5b49f4d7ef4840c534dfa1f882d134d804cca38ef45e1aa0fd8ffb8d8a4e92ee4a7761a3bb7977cad65ba6146378d5a1dd222d3ca3db16541e2bb3786d8ac09da8a28943d009d036610455c51d0dd6f9ca2675089d6700431fad8fdda33185c59b4d71f6c8ce748b91509d5d4fcaa214737548da878f28b3bfcaeb15159a36ce988784dbbd75a5892a044a2893a6e1cd980c58e310c82254778f18a4947ba7dcbd8b4e8a28235906c399905da8b8c91eeb010c6be2242150755b189011d4d0d6bc553268cf75c1f0fe35063581e19fa3faeaa005d45926f432104993d83883dfe9728a003bdfd8a763457ae5a74de2333e0ff1a6253f1f8683869fca1fe8e9e3efc5f568c0cb10bbdcf3226b4bbd8b3d009e5110e0800447de0ce579b28043f8d03e683612107cad67cbb1dc8fc1a94da142c491c18110f761d403fa633c608f463765f1f9ecfcb65ba997121f9bbd264dfc59f31ac60adaddb58a4ae9ca545a9be394472e7b92b034859cbd914fdaa40f6968e3ab54048e8875d47f8a050d4ebb4985cfaba50ace4318ee214119b3b4ea6fea56751a0ccc8a1183d824255a53672a7274b93251d311ee0be5d2a1ef547d089783bb5119b482ffe9c4d55823b99576099eb49546304902bbc05c9d79d40f17b040e73c14caf58398ea4fd80b12542e1425737e0216f05e46c8e599574073b943b26f8c30606e9aa8c6c4ff7010f760dadea451b692b331203044ada0a396b40b6eeb5925d0c9309b3da7afd59b3dcfa816e6db4687144d4fd33cd6a106fb39f1297d510610ac68cb6cabe5c2d7ae064fe3ac2a715dabb55949b95fe68f3cd7960780a10871e76c5300268ed306d694b36c84445c36bfda7452dbb020d4ad7b9a8ae6450862d65437b2f184ab12cd3d78346fc4fdbc7d52cd436aa32225d1b91c9ed5981da9abf52a47ac50dbabbfba89deff89cc6f21501b9099d7c86dcc64f85c19081d1613a896d931672362ad4de4505fac393b9e46bac85b14716eb8e20a72682b2f7af3277b2e952091f1ac70dc44ea06f4e0abad18ab9283c84f8acea343534f401d83a67866d958a9e01be5e463b798f17ac1e4dfc01e234ea4251b8f309c2a9c0d9b58229e22cf2443adf9b993d4aaa9a6191802679487ae5c75fe43fd7d677d286d1f3943595010da4aa593eda80cbe4d6a502a54c1461d47f4a7d67384af9a117788b55b4c54602db69ff9d44c600889218700882ae7b78ec6253f441d425d0094a658b11b161964a4ca21a4b46e7e79cf19784b633f841f059c36332bc10f0bdc761add98d0881b7c1ace8f08ecf4863a6f989cfb9a95169fb626d6385df91fcbf2fd47cc4e4d56b437505435f6da7aed2df1388b5ecbbe0e7183fb030e77039c6a3ec31937b60f7c4225290701b70ddcfecb8cae9855a2340a1a88e49fea1c7a27fead6f4b45f61fcc620d4bb4b0e41317c21b3eb7026ea340ae116985e20e6fe3a6a3eaa69c1ba6b0fcb1a36e60ab774fdd17c409d0beef89754db511021c69dd18878b8e87fa22e168c84f079e37afc4ef373b6c5981b54849fd843112193eb0ed4b335a9c27eed423b0bd02b256780ca9af17766156851f1f60171b371be1eaf7f22afba59286d6d81322d52cd45f9d5052c7f0af6d8f9dcedc4acc0c20128c71398b755aeeeb88c7123bb4b0cb6feacec376d5b55740a58688655176027c691b8b4d4400ba7d27a0df21421e0b590aa0c4018c416f445b91356ff3e824c987edefb3e45fe1f66c736133b7f3a1e3bddf7de1328de700b54e198daa4513f5955d5c64cb22628984bcb7167af27583c2772fea2924610d819fa9aea0420db9a142b566635925315a3a5d707276ba5a91069ad1da9d275c4f29e868e1ee1da25660ec41fdbdb3f1f3046119af86686bd745ac4543067725590e6e4271b91ec53446bd0f25cc296c24b3e098abb21d0f9bc389a607182b8105c01b3c446f2241a8f76d52f7cb40588ae2b6dc13e38d4f31b14682596cccbd682e67f72f8d26d8961a3f54fe9d388b096bd20033c8c4b33ba8b8dd5d23c4cb213e3b2a173c0a772521819012f68ead3a786c0ff05619084f6c804881f77ca6d169117f50381ad6c64bbe0f0e08f17142a30e31055156849b0d2ea5fafbedf862f3b6a8c3ae24be7708c594b7de94bc400dcc6fe2ce8122891c2640edb1274aa605f4f359ac135fc718a6e5b06611038112a1de0a346b46e37c6dcd9839d99adea4424675b92d71a4714f1788a5c8fc3565dfeca749aaf6305596f37c9565989f27292527ab1265a9764a9e9748b161fec7f7406ff5c0a7e6e618d85d57b7bb43a85b6e6f0d0d854586b0ba569704743f635b7e864f525fdd8a766597cb972932ca5b2d4c420dad0f8ee082cabfec5430dfc0d9bd30308af3ac72cae274b051388726609bf41ef9b24860871100afda58f3def037b5733c8d4262d4748c4b9fa38f0caf4f44149d5042db9afa700f708b9c10ffb5e22ff20ea56fed3faf4fea4b340a3c8aa025365c45b68c14609098e587c15e3ee8819d811f2c5d74ab2b8e1f729d86bff71ca185e8e3b8ac4b5359ea01c54e54692ad97e8bd85a5cac1791ec4aa4eda209026c201f9444e998b958d3751d913b7987f4995cb4935f2aa4075011fdfc1e271c1b49818b9247ba26a43289fb51f213f9a8cb6f4a5931456763c2c5ef5f04f8139dfc083fa86c0f0d8a16e31b7ade01263bf94a13d9d0ff4d7ffdd72c1aaa291ecfe365147c74390d9dddfd19727ce864cfa6305e1da4ef3c82c362e71185801fc1cf5ca355ee7806fc9e8e76465c65f87d8c0ab0b17e3c6ec0d26de9f0cdcf0b4ab01b24f1e1c1a91ad1b51436e20d9024739c7737743eb5cfbfc50f91950612c793cb3ad0f625582e500ebca37a9f23d20f6dc043b18d4ee85d6d6161b07e303fec07a6ab29202d502db62f1c61bf4b00e88b29049f2eb4df8301844ae836099b314de9957ba03e42ba4fdac0ce5a454edc1fe2f98aededc17e33b84401e4274f0ac822968cbdf5744e71ec4228799378fc439a9786fa307a10000db3adcf21a46cb0cb987dfee02131ab6c4cc084e96e0a4759b497eba95acbe04a070e970c1c4de3b413645b886cbd8577865d2b46ec66d6ddbd6c2267dcc2c6e597babb00b921d0c07ded439cfe3a737c6066107d5331802e7e2c799d0bdeef8ca3db8023ac426e9a46661d5cf035f2cdb24877dca60c86554f40ce89c8a3bb77d00cba0bdb4f708cdb70d06571d583bdcf450295ab19e565b07ff0926094cd0560173d2669b06eb2dbdff574427bb62547e645b47dd8ec5863e5f23634f4976ef5ee8a023282bd5f8ed51baa8ab61cc65a5604ca9214ec3e9b03c319ed7db88ec53ecf0ccd19083ec540a1ad38ebb0a590d251253ec81af0130b729c7c9491bbfe850901e442a6d79100417de81f161c5c559d42f12b26af54d3e5b0f860369a9500950de47727dac3e2148dadbccae09f0d11b9fc488d1e94c3f750355e7e13c2dd03120c5e43e8a61c3bb945a4ff410e8cf7a709de79ea47ed457e1649ab375543d0124d0c4bb6dd6749407c6bbacf49eff23bb92af1d318f236ce91259e433a208a13fd1f1561f6b308ba75a1255c083ee340bf281a31ebd6037b3d00864a4953ca042023ee4abe3e6f4085103d27594add1bfb8c2f2c1b44721a56e71e6507c8352f67c2154f3afd1ec8d5e2b0133a3f7148bbd5eb20db2e7e8c0139b7d7a3998f1846587e7ba02089b953c7c617ef962111029ec93ba23fd974cb54d29be074670c8f6a7ae641a42feaf8688673103c4382bb9a83c2e981b75210a8ea1f10d73e16326afd3d379fd9d91a196b1f02bfecef87335b4114ee928301ece2986a71df05693e23918327529c957b8dd761a3a4c81b8c6d8b88b886101ab8d407cf33b91f2b8aad8eb94836722f4e4900fa7c15695e46bf8fbcfc7bfe7f2e63743059e4003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000035118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000350d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000350a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000350b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000003529a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000035141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000003525e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000003512978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000352daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000035189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000351159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000003505ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000003505c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000003514d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000003503db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000352ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000351213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000351ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000003514fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000352b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000035305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000035280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000035223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000003517a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000003508858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000352618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000350f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000350e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000035172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000350b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000003505bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000035137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000352e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000352297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000352608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000003518373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000350422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000035204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000350afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000351998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000003528d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000351da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000003521d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000350ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000350e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000035107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000352f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000003509726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000003524f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000003503c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000351fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000035205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000003525110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000035283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000003521cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000035094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000350c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000351f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000352421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000351fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000351bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000035304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000003500000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7a09023c0ac43beef4b9e68ea900ffe36ccff54d821f7a57f67f3587f436c995c698b0591383cf03c65f4add2fd7f3a9c21f6ec041a130a426eedc7cb63994dbcc46db526d5dc4bd655bbd69595f612e452ce03eb88425621a8f15bb4ed23b864845ba7508e516fad36bf6748242c1cd4b9fde3c98d7ac6a29c8cfaa0adae29c8e273525c40da6078d7736bea612216dd3925cb78cb0cf03c828aec099259ea94692d18ee63ea91211c5214fafb36ff3ac0b61e886c3315f3e9098ad52549345cfc891ecb142389ef83e3c342d9f5350520fd90065a8cc39de351216544f17436e7153f2937997fa292990cf9c4b42f055804fb230faa0c6516927808953f34b737a118ad479b2d48ba06ee12975a1682dfda8bff99a4283f821878b72daad6157ac55899aa6813676b0c67ffc40ad00b55d0791ed3746bf71c374bcd3bf082e8a3c26001c42323c336e14d7ebed8037d45ae6efc36fe9ea2400921a6bed31f38855cabdc21f78189ac90a35d4b0cd6b84f95a8b382e747016adebebaa8ac2ce6b75ab3b51d680bf480a071cfb8edf5129a0483f6f53861de9d8dea9d3407320ceef53acb528dfabd826872e044eccb0f3859d0c46ff7d6e4ccc824d5f272be00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a579c18ab73f861b5ee5232c1f43502a732f7aa209ce47c941903f12dc224b7d2cbd08e40c2cbc6e609a03f112586a8616a9be1cb0acaa9ae29f751f4b53dbc767f0dcc1a14872ad90f6d0286d55257a124f93d2c7fe9fcaba90902c225e51816d37ede94004383d6463a2bbc4b5c69f06cac399309e174b78183ebd26f45038cc7704e75b1be6e18f90b3c55d3bbbe92902970ed3d23b983dab33417c0ba4d6f9157173070f157bd3bc5e8733af1fefd32b3510c9066dbbb3f187b8af87763c43277e908e30da1cac991ade74a1950d525a38f3f33b16ac7071fad8c0063a5e62a042a85e7e350b0ed8f138bc8373b836205714533bfd13275a4376a62e1989d63535bf89d30761a91c01b3755956e89005ef963ed86d3824e7ba3f2bc4fcf59d190126142ad0f3674b776b176f44e2276e06a7f13648dc918cf259c7a7bfd0b1ccba6b8cf8e1f9b504a74e9b5428b5bad5eee964fac68b3544da37655fa62fac5628d07a87d55b8c50f3b188fecd7b74f7b99941617059661fc2efddc493c2c8a5de9ae4f12e53fda6eed4926ef3093d8492f3ede2222f4550aa0c2b965d201f8dfd9a3e081e6d1f6aea203a62fae495c4ef697ac91748645c64fa49beb99000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002508cbc82e657edb0ddcbe6888a5791f42c77b3b7679d1a3fab744eaa003342d0a860cbdf8436757705cd32ad806acea0685730e2f3a0174fa7b71f26b99c8f52a63396d852ec03c9a86ca27be0450aa179041fdd7c8df831e1ef376f255ab9e06f47b29c8b65e00e1d64f150a9f14c3d14b55230530dbb9035bdaace4c8658475b597dd61bca50e8b8a66f05db59be7499e423d734052ff7d7d32540dd973076c11a98d5f46d135aaa7514dead455ce920434c088b7e38fce77f1eb2693b534a3bff2f90c772fb5a55c393ef19b920c08d3447257083b4ce9a046115a61777d6f0b2e33958bbad41034547e7a056bfe30cd3da0bcadcfef3ec2a2f3533cbd1fa5d431cec11f8420814d97a43ba26b93e07af2c95af4a1cc2cd7a1bc134a90cf98379013e9e4d97c4ebedb5df9259373181104da7da3df79e0061b963623893f83f032662c4e9fff7f2b73655c73a7c02196a068764818bb4e662686e8ff41488f34245a00b62a5055a350d63420d1aa2d2588c1e48c5f769582e235e1b132ddcfddf8cd25192f7171e379235c146501fe5085db6d841d9f901910f1e092efeffb725873035455110e36c9b86e05a3ee06441f7fd49f6d1bd49ba6692f0125f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008fab5bcb8eed01822de32bf58251bbbc5bc8f6f0e09f0c621f5c09fb4f0fc4dd4eaa390cd8e4d6e7a8644e1d5a300edbd0da11a1bbda50a274fd302fc9589e4cd286191746b783e6e63f41701285eb25ee38ebf62a4447d7681b998c705a881bd658a39453db5ef5ba96637eef21fb94bee99ad0070c90ae9ad62c74249a286aeb049a66010ac6515ed0881c804dee7422702d7b3ec436e6f5bf9e30cffe62000b2b69d07e62cac6f316780540967390d653b5ccae86eca0e8663c81d629f6e9bb3cbfdfc2373315e9afb29c19caad1533bbb6c6a7602fde6fd0c6ac7c6f3ca8bff496e56bdc4e361b03ffdabe7302de75b2cf5ae601f80b0cdbfad9ed6f0108145449ebdf65a974099d2e8a478c3291e1a13bd6b25029e9576470df1020a773d6087d0711bc8df2d70bea85a1c8ff76f3d3ef9e3f0cc0d52c1b7405aee97b5aae76942e330fbb42f53f9273c65c1f7de7259f71421a0fc2baf5b56951a2da71b80f454a9120eeb41c7aeeb6f9ee4675950ee897459ff9fb7026db567bc8fb0bf5c6f412e128ce3e93640d7d4df22bcc8fa588930e9f0f39e3e64c311e0c9ffed0c58cbe20d50b041bee48ae0452b8bf6c563924cd18f83b3fab923e6ca48a7500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a15f0cb3c988d80617b335b6a86142a2fecd7e5ec1d1c30fa5f2286eefbc6913cf393677fc0bf2230b2164c64f485171133c76f093ea432dc367853966b27cfb009f713e58c6dd2b9166776a4623feb1e6bb24198c356de16336b944f878c20ded7c80a1debaac9e5dcfa129b1441bed9de129b4928e43366f28981794715403a21b2c8c1f7fa375de5ff3059daa0d86f6f9bcefe3784e017050918bc06764198d2d54ca5c61e91a13ba48853685b205e83c10b2f5d9788601724b87212aac65cdb790d24072fd325582729368850bff8c3b276e75a018eb2aec11291284d15818797ac28728b5556dcfd48f344353c20f7856b533969655a60020a77de2a102322ffb2cfe91303d2e02d0ea5c4dd472e91abf32f052a439c38542fb3838b12dda3ae7932dc502cbd89c8cb5ea6c4fd3f4f1869d749c4c087dc7d3a37871f856186bc651146127dd1af3e583f9cb208f79d84e9aab1bcec024edc889e2c1b5283773d212dc3775573e274470e7d19e5f4a407d7dad5668114ca8bcf2a424b70c3f4312c96097e50f62cb06b017c18fbf944162124eb2ab59ce1a3438936f8be3f1b8ff9d40ea6625834293881a8cf90ea98bb7670a51d7ae89a21ddf1d426cf0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab0d68e1b90e9c52c05d34aa0efb71e251acb49ffe48864754b4eb2130aa13b0652256b6644c4ba03072de55da24722630e5f65c374b16ca256a25bc66ea5f8b9436d96877b3dd9acccafc31078d6be30401da65acd513133af7a629953a93f1666e69637c650c1adbbbfad38eb0e0ffdc089c7e6d14b0a8df8a7d50af79c21df214c5a067273d3a3abd36d0180ad3fb9ac6f9738704fda406e5e072e8c3e64a03b090d9ad9e8889f3452a2b59aaaa54ee3b9ae78d3863b15cc460a86fe6d7c65a575b0ef380a6f13a048ba0bd095bf2ff152fef8da660087b5f6ef7d9e756c3637aae65579fe8eddcb7596861bc8a906807c696baea2c19fd8b463f4ff2b58af527139f89e4273c967728422204eac963c47366e9144a1564c2309204b4abac3947f12b5ae5f5507ec2296b420ddfdb2fa93233227e9bee525bc94bc892fbd5367505d49feefdb279548947b39054fa50889e12e8448e6a4802f8d326eabef2dd8bf0ad7fbea7ea3b9995b8ca93e6c0d95e9365d300517bfaac051a1bd451c83503686686ac3d648261c0a5d4a3f217d58bd687feca925b477c1bbc3ad202385941e4305a432d7c466b0dcfc149157cf446560a5be17018dcaf42da0dd0f7f5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087e9857501f11b328d55df8ed323704c7ff6731519353e7dad2ec345d919c2e6457b5f5f81578b742d62f4257859cc2d7b101ee0d381c6ffbe60bbcd5313ce5467cd32ea7e798f0442b9f78e048fac64b3c8bddcefc3d2e4487b4a03ef71399328a36154a36dd6814d653416d7d27156eeef5c8e36ed4dabde8a7e6b589f0ead58bc49391f651ffd470745b9fc4477095a6233da82ab51c6b79a647b1f34996e09e9df5646410f05357509ceef311f50e7a8e3bc051bb277409fd4136e953e92244f50b7c3ae7fdd95babc515c815cea81b1d9624457886ab65660f272f8c1ce7e8e0dded9acb83ff5f18f3e32d690a6f4573889dde75973a9210c3187539ed625e46942c7c74a455eff1c77c3444fb7741ccfe60edd033c0018f8c8690176573fe5b61f059a6e3cf11c39f8a3bb0c54c59dc3159efda664db4f1d03bfab2db707f602d9bfdd574177ad054a02857eea16773c930b40b79a5637101de7387a07b7bc9ae6d5a19c4e6d28a013a7c283370264d216cc11f0357f824480913bb740a05d7f171c82f87318e766ff06a1020add3e54817da07b7557e48fa42d8c510a2b3293e63bbe0b0b35c4efdf0b829fcef6983df6d545828305a773adcf851eda0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815121f3ca2959d421a5b394acebf178467256f3316398d65ca2102372e37391523b7d4b04edc1239932fb6618f5af0fafac8712b68059802b175560936450a2cadcd0027860af567c1a73dba4f9e8006469567fa8f4883e86ad34757e5d0ef37fc4c757f6728aeeebad1876a93bef6f6a55b82ee317fdb40262deb9820ab200f02b96a27ac1bf81a785603743297a03b9e5590023330e4b3282703baf6f8f44a9123a971c7d9b4687002bb2185678fa8bfd24d6b39cb7d5a3eee996843569cfa408fb08815faf37cd8796f74e37088a02135e7d8ad6bceeb00244ce065208ca2a7bc6130702cedccb48087183be0fce1dbd198ba013ff117963e6a0d9db51d2fa34f00734754029603cf8e2f37abd6624e8d767b9a25ea7430239c6e75d35f92b43d23b5260c3576246d9d1892d9b399f853a48e04f53c793a15bbf590e3bc00831c12532ecc9b76a25d391f61ce0d23cacb2dfb1c0563c201b7ef8eb4828ebaf4120d56b88f22590ab63c1162240c081fbf80ac25fc6652b7dcbbc32410dc3d18267835aaae11543aea14e35a5c09099ced74daf93233cff8697fdf36dde0da3eb3c3bbb3d9c75f499b5b7bf2740f3a231e4c0b9daa1661c810e65020b0de5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018575476cc1a6017276c215a4723c81ddcdc105a13a911776e2fe3d2817202df104d6b87f9c8f050a9b5684702dbb497ecca26ee5df423e722a55c54ef508d903caa7814fe170e275501091e44a2a4b25131e55991a5657b838f1df183b577079c42587d933a6b81ae81fa0acb0717c1b979b1900ee00221cf3a0cd6014494e0ff46509612f5c96e7af2bc9f2b34319ad4a5d54b23c7c8cbc00cbfb3aa1c44b44b9c00aad07c1d5f5882dfbf6916734b8cdc8c61c2f436254f46e62d0a01278386c85cc8ae1274b732c5295b80042cf3fe45283667a035d1bb5ea094575c0169470a8eac722e0e58fd761805ea1e1aa801229cc5903b683cea482e6e834843bce5ece2d87efbbb3c9b5163b0bc2f21ea276c57d156ce2e47381a9f785e40a45544d72ddbcb70d03de200a4ee11e69448d32b5d45d74b3df5506fd0d64d40075fbc551dea77dbf4f5876387a60a13279ce6804cfb6bd86cfdaaf478b2c43e2afdd5bba2b49f6e5bc52067e0a710ba8969a01a1cfb3445ff619ea4060a52f4972f9dd19dc156e97d1cfc46053a9cd7337e455c2a64ee82ddebd863c249dc7a34a826ce2fe6b1be77c436c48f6dded89f449417e3ad300b0f9c7f0ad24b176dcb9800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ddf4ff74a186a12b3b3137d8bf987b8f849f511c52c7964ae2655af9b1289ba933e7395518332179242631e1d301f2e6e12bfb95390c677c780e6adf337f93e8d44192efe556399300dcfcc02e2bd76917540d50204ac5033005ca975bafbcd1e6fdc777121036a53ceed0e47f3e1e171ea5c9748945f3b51d71b0231b9204b9fcb2198e79b4885ef077b2590fb942787a719b9de3cde5be1704ab3b80f83eaf6efc53551be24d5a0c7a56839647f8471cb23c590ca3cddeace993273452c0e6e42423b10d47e241a43089790aff7ee50ba3ac7a2bb36db8ff5a1c098bc6796549aea5d190a0ffc661d0e3869cf8395141cf631dbf16408ecdbb835a9fe0f3add3f0f9c329d5b919562ac1db7d04e1e02b9277c546b5fff10e910b17e59c7b25112f55dfc4c4faa922462b8c72af0e822509b6bbb53f3648625a8fb27a09e4d4f73377e4a4babaa24a3850612510f9488c942a1e0adf60a9878f8629b77a702a8b5c3b4fd2a39c835884a75ff3a124af30f8404f411a43f10e247a6ac87c3a5e4e952ec4d9962e9151e34aee561977a6f29d4be00ddc3dd9e2ab9c9c701499b9bf74938befc6829f6599f4c86e2a401e2cfecf464b6b4c36e3501c81808bded00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b3cef15daad717a767f03cfe981f20df335071a045d5cc6e5898b529c2d2dee1e82e415a23b73d4bd75e8902f9f8f20b8f760dec22ad312a1fd5fcc49ce06fd766b7ba2af8f06599bef7b2e763b4107739b4605029be6f74e557e5195e80099e55dcafe93e447da18ae2fe18a404a6916285ed772a1c5c217763525afc60bb142800562c94ae5766cd70a01d664c04a5aceb1120d95edaca13c98e872e8e5b218226a72d7e565b9ec3d651e8036fb0386803444928998de62773debebce3703d4906125a8048440e32e34a8352f062a94350bba0e65010024b14abe8cf34d23fb7500d7ccd4b0739c7acf1f9942207ee2c521e2a34301caf98d4cbf384628000814720955212defd2e8761e4179b22e1c5861a5595fca9e67bb5c72a28b6f062cdc1a456a5c2e1d12b8e2bcc1e9d9156d0460a421502f6623ec0374b53cb457d0d75b2da88e6720f116f9c6537a982293243b02a8f54e451504356651c61bd9b08a21b9b67382fd79dfa869d84fd1e2821b895a255d0da00b24b207e314eed2b162c8babe8b5f5e3beea2e9ca7d8c4a36871163560939b64ae74a42b86efa0b779504aa553f216918042ec73baea75c886cedb8e8ecf763655ffbf8384512290000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000246c97f1fba3fbc6d3cee88d7d5e0790bfd7797d0df6c9d9a3c7454e076dd4b85ee01f1c459a3e0d5471a75d824ed0b43d2f539fbcbf6b6679b37e14fff7584eda28bad8e6df8063d5aeb6043477cced50fdf4802f2b01efd8fd6c3c4b5641cae89243f2eb0834aeb8724c22bd53433d6c77121091eb750ab73d1bf42127b5fee365e50f501afcd17354ec5a57bff30508a1402c0a4b3c5811fd066f37e3db3e587989c8309a7d6305b9482c6b802a2cc9c74e070856cdab8544b98ef77477afd537c8e7dad83fac63c13d5fda80ff96e3783086801775fb3e9e422aafa5d12b7fe34b812e7092ff53c5405580ba8b9970dcd4f346a39bc6ca4141a6273b9434d1ec4961e41a4837492bbde5b053b26da6a812a677e257b6114a6ab6ab909cf35680f870c2f35661c8786f7cc121aacb57c3c9503a586e60c6f888f1667285a2b8c4ed62435dbb12541c3e4ced67d741a29f1a1a74a21350414b9fdf627fc3f3d02a654056da982faf6f7b8c502096491ddd01ae7861a3fa059739e4332475ee97b350b4f57979515083634f47a74119cbd93a0cca322a0172f33358276d2abc961b7932a400068cf6c9a0d36a2a193caea552b5e6c6c1b144ef3fe20d2084030000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162ccd14038e27678f0ae97e2dc042bda4fb83057f194f3685140045acf1f3421d51ad3fd5bdfcd71a43a803fbace6d6c6c1874fd7f2ff8aac191127241048834ddd07bc0cc17c63f8814b0716fa14c1257d4cade36978622d966ccd68b44be33405c2a51131086c913fa1a40cb09454d1270e14fd54b1e57243021764241baa0301937ff56ed64cca185384263c5a7c48a83f4289382ba90a93d76dc59f1edee5b05777c52cb01162208d3c46ff097decb8d463c06f0a189ab01cdee3e96a181d78b5efd7e027251780781546d01d4039191eb6cbd41fa1fdf84cce4f8be40cc34813c7669158491341391fcc6ad2d1428ca99e0d2c201b0783385bdd6f0b2c114d93dd259f13d1bdfc7bd479f14a298ead5d95511d73422e8e50da9a6ca0defa7d9e1a688149c1b02a1bccb35d04a5bfa66204c4ff8c11b2074199d6f436d90bf87bcbbf4c4902b812371c72bd7ec433050700655ddf3ebe79265ed289e6c44ab79711523c53356adfe84f1f0eea48bd3ef33f66d12e41897b4d51f4a7687b666fd001088c2d03797601ee3c1f967ac18149acedd8fb2b7e81b155b6c48de79362b2ad285ef048b6139856e5fc75bae8a97908247a1f6d3676960fcfcc602e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c1cd61b227b0bf48de30974443ff85368602c2ede33ff3ea1847071fbd735fdcc49265bfc1809f7a386bca0b2d6ed22748fbb37f0c6b75ade731846cb3f2cde221ca9de6e6f2851da0e78c63e4dd923771ba175218a95b1744adae2db0e736cc303221cc3bd508b05423badf60ab3d740b1c3c87829b4974c9caef6b642c471b98edbf0fe8306ad7ef192c9ac28620a8b4b9125a5e6cfa24909e8048400537afb595660ddafddb09b79f3f6a19e488fce20b0f1a99764031905f6a90776bc94d1c62ae1ea1957541b1ecc22efbb18e3d23300f0e56155024866328bcfa6ff384f4bb997c6a40653736f0a1ab4053052fca71e9dc8c649fbed43725f1c6923478967cd0626b216e6758fcf7982d8c940d3760394985def54c471d0f6aee42b2aa30441a1df7f822481a9c4e082ecea0c3bcd98adf3a0188200f5fcb756216ce9808e4b0f7d9e7fb8d4db5e1cc156d9b7d558d1db8eee5f1d64e3c0831bd42c0ed8e303e14ddd3bf2b529ebe4be846442e582f1f1d212dac2f7cc06349b9c6cef2696eeca391d643b4a392aed715d6c14d42e6d57a3b6ae7b3a93588b903794056a3a44368d8fdff7f7e5f0e7749ab468a186256eb2a976ce41641498748af800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002dc2c6794854bf5c0891008e0559809e6e16e6d71ae26e97c9b6e78b757231aad9e975c4e4e34b7256bf6bc92e9f5558a459d01d672c3774f35fe797ebbeda7cbff80d9238d3f273b57c7092a49a4b44cafd156b0a514b28eca9d28e2d9021beeb74c1efcd0f10b12a1fc660c5ce2748ddc61199b0e4927d2f7d194ab4776eb17ec74ad541c8b2cf5f5756957bf6616b31b3f46254ac4aa7d9aba0f5047d31d4a9e74e9915ef5a331c22e53bd88286e1eee2f8e5f74e5149b69a51e7bb959f0a6797150783e7a7d3601d0c3dc44b3db99ea2700af4fb021fba6055f26ccf2f06fdbc8c8514c9887e597372fe84f6781ec14abe79523a264cd49e80d2887abb483f5065206dc53182e7bb20bb13511037bb761dc8d425129beb9ef23a72302f828c5a23716d1c200f4e5bdaac00f7ded2ab671ccf26f880757a0999edad0cf220491157056ea0053d6abd1fb7fed06913e4dbdd06ec4de2374bc38e47756bd466e834335a51223fde9e3323bf4d812f8149cccbb976e41c45848cacfd05ab7a4ea769cc276ca4df169d354c4da352280c032101418c161a55bf5964a8f4d364e52a20adba6cec741ea08693d7822be4db34093a3872d1483ad895a1a30d0aca8800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000492736a04f3df3f95a7028217525a26f6e760e8f57a3e08fd5e492557cc30951cf672e8829278321395d6bba20946a97550fa2b72b8a3ed4cd22cdb7588582e661f0e0e7ecb1e634cfd0dd90912388148db0423e2df2d496ac3d7aa12cd59e5f533d003702bdfa45d1a7422a272470be7c41fb90d920df7d886095aee22074c2a49e9b99edfd60b31454cb65f933752a4d4c11636fe8c871dccf96d113aeffbdec6f68ab3f7984aca72c92b1406b8931b63558174d275d1acee68518c1bc345972fe4dfaa5048f2bb8c4258e634e6526e1fcaad33525ad84a8ff2db266d22141273d1fa5bf071d73e53288ba933dc3e99a0df55134582e437b60194b98235077d1b86dfa47b1cab9ba4c0176914cc49c02283c316cca843e4ea5a072f4a35907744eb761c63d14a1b769140b2a92c29d951a889dbe961e111296613438f50c0a6dc2528bcd35628b1bf526bcd21e14fc1cbfccf84be1bf2ba3f9bb87ad81f99364a43df15d13dc9e120b0347d59dcb2153bf5867fcab46bc32613640e4bdb888d1e878ea3c2cc76f2359bf34d0347155396e6c96751833be681660bb3b31b13439957693d79b2febc18143a5222f3ed17bcaa869d084452023a7c0f7e6fe9020000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000925d2d45b743debefc423e4a5b0af47c6e6def37eeaaf0efcd56057060ac729bef38bd0d0931aa2da4d2731fd66fe3371f094ea94156d6aa75f2a77f58bd597b6f245db1ab72e989cf41de54d4c46c4d92014e2e685d3d269ddd664ca1408fb3390f72079746bd95b11798d6139cf851fa64e3e7f23326f664eb5180632b3e51bb26d560b04d727eb961784999222e20b61307e3f7dc448d0eb3661b8fb7fde03e26bc0963cc5590f8865a5e6a6f583af8346ce40e78d3e292089fb59801b00c8d40b63fc5cc9c16d07c7378052e8c632f2ee96a57ebb7316c3175e8ffa05d767303b72f773cc65dd40e35009bdbc83d555411f8aae3523553a3d7cd366591a80241d659d09a4689d895941bbb1ee938e57db4376189571159e26b9c3c82ff14c2ea644ba0c65ccaf67e16e81aee77b1ca59aae126e66fab6006e7286433be8f351f7fa3f897e711c620ba077ff431f1769667313ea70aed601dee77ade78389f7aa0fbcae74e1e7ef04d00fd19a55b2679803eae8d32a11ff4c549afc6886db02f0de7fc3e261e6f5d4eb968b7e3c3dc1a8a52898b6820611841b688879b73e4893aca384b2d6b636dc4eda99995e057d3035a4367480424dacedb67cb6d69d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a682274a1d7802ec1c8a636b9f10947e332c6400d62dfc7218a246ea9418a148d510a06833092299ea1b0531b0554bd0461b0e456f537caa3151df3126b84fff57995516b4ffb8a3ba1e65fec092e7b0c8e4e61d7930404848127ae9ac929d4d97c34e1f235ec6d2fe692c62ea13061d976dfa1c875669428cacfc99bbc3fc1c7adce7f7030c73fa1b6825a628d89c3c26f8e49019658b767f13b7251a6573004262786ee51670767ffcea9711d14505ed8d3a579709c022b313b5c5496083704deb964a0308aa0b6e5c079a9943f77ec6b91b7aaa1569253a4b520354b7b725acd8ea51525bb76a05460a0b1acd76b6207f5458d74c32240386f3e23021c181e1b0500ff61ada3ef4ab9bde1a0179ed25442abbfeef8ec3af9a8739e31ea24f7cd0effc3dbbbaf079d4250d642aa3284412568075ed41b99ee03f5f6a77f87d8cadfbfb47ee506553a745860b1b3bce9b5c337458f2b122c95e60c2e05baaabeae83b3569de71bd4bda567118d9757ecb3a9aa238b95b15b5b110dd0512c6032eb74c816374ed0bd047e0b4ef13bd0ed10edc18a3a173203e97b05aa1676d62e2090a6a54ebd2d177a9331aa05a0ea219f692768672e0d784d621f5a45cabbd000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027132035e7f47a2cc4c969ae79d1515c232eb0b8f5238c23c898279c576b50d0a948582272b1b25a3a75917591688f76bf1c00704bb87d64a0a90ea47f48f438b2bc02f8ef4db15dca3742611e2b09070fca1912c9c31976ff3912bcab536ad38585ebcafc8de87e3bc072742c7845c1f33165afa6cdf1dc329593aea9e4d1921fddcfebb3f772bcff2eadfbe1bc21e843afe877387bccffd5f335a1695a7dd9b0090eba55469bc00e6bbb62ad19743d20e04fe5cc9c1a2405ca8e8908f34188c578eea1a665d65b810256603721d918940bcabef4425cd560cc5ddbf6f070684437c0d41beafb9721feaabbd651dd6e989df01ad17c13d1ed7fe767e3b541814047f03429e8c2392de4ab188baa80ad28961361b0a93bd9d0aa411f0f1fb98498dcafa14b4813f627c8bae7ffd428e324c31139d35d778d012dd333356a6d2b1a75eda0ceaf9e968011cd57c8bb75d9821511430365697ee831fff3cd0e9539c174e4f989e32f7358c3d79c82875a67b741c1af60a9b02e69a0032f2808e813e698667aedb0b060439e44c5ce85752f4b61064cc5273fa01fe94f0d3fd141d38b813dbe62b6b87cfc129e6da2a0c301974b1523b115fe2e436fe17b204a286200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b87050fb1e58a737a02317485ebca2d13a826f82873526245e04f3d9bc1280b1d5886971671d335090206d114c2dad402074842eac325f80f79441bcd54be1cd15e676a57d11b97395a1126e33f6a5c5e80304fdefb74b73d2ed92aa98859ac86875db593fd9ab69b9b9767bc86fe148f43ab2cbe7e430980195e7a3f59f820ac0bb310026d533aefd5c34922e569a9c4c32b1f2cc1a7712f01e2f1b00c20c5deb3b48a985a207137db9ab52e24cc0a50072139e89720a861a571fcfddf53b1caff9ef2e6388fff859468cb618aa97e755d4f1118d22a415cbb248826b33128b095a56b1676e9572b58405008f7b8d85c565346c9e6ead7f2b252b13d356fcb7378433dfb4a425af29eab7ec5956e7e271ffdc25418ba59c8a4c8217fc56b7603eec2f89d6d4dc36e4bd35164ff7e79633e591060599c080733b4e13cfb7f4c159d420cc70fc17862ec47bc16ff387dffe898c0de8e6c9bed5aa3adb1d2417d7f76c9d957225223f662383453191196a2e2679d9322e5d5bad69e9fea704407838396a8e854f9e84a8a713bd8c6e33a5d9631b59756d5c2d544e17df161182c5d2fae368001c8787e97d239ff8e58dae5e98426b37ad2d352f2746129fbcebf0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000277655435fd579a43bd23b9cc3e576951584fe6f74e98f200eb8000e779fe58c2336b95c136740b67946868b5d13368fd2e5c29659d5512189c35fc16bd0203ff3e0d4a01f474133e984935e77f3dbd0c4e49aba957f3d8a6fc56e871b6a4d7ca06cac67caf52bd6ceb437c27c651ddd45594b99714d996d8fc7ab251b53869829b4b5aa68a933dbb9243d81bb665633064226df91818a26096314a1d3edee2057406fec5e892ba7caca2918bac574e6ac6f6ea8938e074c9fbe6293191e10ba1328959f12b22f40a2c990ddff6f94c93f4837e7b926eb8dd9eaafec621a185a34f33ba8e680854ac233fc622e91bf5c49d8041e0dddb87f0e4ec141c2e137ad899cd5a2c417a0321bcf65a25e3066d9d304884efae0e070d5ba26becdb6d1463e2b8dab4f9a141de35137f30265bf95c3df08d32b3fe992cd1925a2434a51733615be0e5ae4c6040b1dbdb89a39aac04a5d5bb537b5d821d1c944b58a6dd0c2cecbd5517a98ee36c8a5a6cecaf4b65f4432d3febfaf21a6f686797b4e1dc7d61ea5b1c7e25e61b21c455688f429a39156c893887d513051e5d470565e65c65aedecc6645fb1fbec193f7f95b24f0697e7bdde7098b5e41d75154a3b9224edee0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a945df04c6464121c43ca1d23c2ee7ae8ffd3c0db22a98038d273bba5b8ad6c9086fef54400aa009a7764f6102a7265d5d0b91799f6ffdf5bbf21eedb494cf3830409ab71db8eaa539523b5fa6b81088ff2f284d780f32cc926bcb79003828c02b8c80c5d86fa35324f51bf601032e8ef9dec8319a154b3806cdbdf5ff4341031708d35dc3ae532bf54116da3adbb2698f1317efff93fc790866c8b8eba50a8c33c5753f9ce3b48b71d8aa2d25bdc659f0ed2031333cdc3b4d26c863238c83aebc4845a015444dfe7ee200b551de158faf707a4950fbcac3bf6bac672d5c0360bc61e512cf350549025c4a7bcd968a9698599ec6879f73c090acf7b1442c81104ab83fc5b01d5cdd3edb775e49cfc282f9aa9b3b45158c138d3530641427cfb3f94309c5fdacb9723d5d3d3d9b39d27e461cde49ebbff300a168dfbf8b296f03357fe4b561ae0359d5a96c9f1a043c46ae87b297c8eca2fde477a5e31e607b5a7819539c349807c305b2074637156da6b3eb2713aaff7576822ce8a436c507756752f3812de5faaba5c1d1cb917dce4d362a262ce44b2e909a84ee0db3dbfad9bc0440aa6ef3f3ac242a9f610aa21ccad7939c34ebd71bfa5925820ec273fce50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1cf66020cf6a76d1e10939fbcf8fbd4b97d91d262eca87a351d88cb70dca0ba4e87076ae872807c326f7c706d13b371d2ef8d5764460a42d13b368ee8a16c872fd75afc679347bf2d842136fc1003fabc5b05da145022d8d5d020b5e4d73d181ab5c3084e6c61a96d49c062d9ce0cb67d733392f5f8926b2c857d3979a05a25a0234c041b0953ded7bfd97133c1ee5a2cbbe2e3d15444440b8418cfb60fae642433b380c0020c7cd1f850a6e8670cb660afeb26ee0f21dd8f810ff46a7b7c962641dd7a56b9d90cfa9823e62ec45adafe1d30b68613d19e7c1db3db9972056ff3057fff15661a206b68d9acb9da59894ee92dc9ff2604d1280be9b4b4f86b063a3b8aac2c9da2be958a71f4b3069be5d22daedeb5c72adb595cd4de5b8d8a18f2f68e56845c22133e62cf9710b26d9b0535fec81aa0b869a890643088fdafd003dd192cc53adeae27019ae357062f2577431dd0ca8baba648cf53910991ccea798cc76c763b45ba9824d9ce6c5400cfbc9dd1caca29909d45c904ae2c9c02f7e18e1c93833d10e85ba144c817ed5d955092f7de3f4695605e51400b59fd2d1b545ec9be9112017822ad686f92ed964040db2a874df84348c2c33051716251c900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000564641fcaa30c128f4413b1147a115ea8073918ca8163d89354603f7881a3f77c60ba85be4ea5249873ebb5e2997f5c7ad4cd9d71ca70cb59e846ef0ee8ae7c2fd22786b4adc156cca85b48bc660050077155b7bd60ab68c472b6f38d8b93185948c844ebc94ea6ce9402c6f0688b48ff987d186aeb00eff3a20f819eefa3dc565d756673b87b613d9a1d4a9c98fcd7fcdbfba06cc4ded5f84d828ee2dc1991d40af6dbf55bb10da5f6eb1a0b9d1755163a70c63df14458c2c46d5021241d30a53b8227398454bcbc9cdd1fe2e791f71d5793595e0fffcfb5277959f229199a40eef0f2139a2c41de34de8cd180f0d3a8f4047568bad05d1e6a9f1104f3c7a4181ad447f6d103402a25feab7ef8eab7da7b3ad243b1d7003a1532b06ae71068fb81e05e37a5abfd533e830301640e4690d43ea9fe78654e80e088b2245016c7ea0af7ee5eb845c5ffafb7d636202003c803b38a0951a351b714ee8b45e6be801f993126da4cd5d5a4f22f680b126451d71e45fe9ea30f96ebbac17219fd3fd5fa3ebbbdd7cf8c021b84dc2e1c9a9d04be79658d73b1e62f879f575183f5d54576c91db4229f0af0013c66954ea21c64059a0ed1a10a159f22732d7f2c6d4c6800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002da7ad3f20807901c5a5d9b21710201a25c947e89a21aa1c2fcf780efbb78a5b516d2c03a9cc63b69c75f8813da14a6afefde3eb2e20763711713728d881c7c34a901addb3c80a582cac1e136fc3b5edcbaab49e1e3a745a68d3988df5a529ebf228bd8de0239317f6276fe50c0807cbf19504e563ff886638da52c25f7658b4f18338bbe6717b81d513645ec90f8633eaf3f73db91a8978a2fec673e0060b85ce0320b08b1ded25273d8469d608ffada371875efd0c67c37f7ca44f828930fb44d220c7eca584c6731024b079ee6bd118c6657505e6ef42f1c3480d7a7fafdbcbf874beae1bc351fb3e3cd054a7d3ae1ff0a1384c15419cd893a753477d124e1d7dbbc77757694940526329bffbffde527f7bb6e31af731bbb50393a518011311bdb937bb25d256716ef20cc3685937c84f043f429eb74a1d373daf5f903f2bd14249893c448ddf8b7db2379a1b3e94dcc8a91a8fee41fc054d25cf70579333f7ae0f79746a4fdef76a3426e85c2d9deefc1d9c1c03e2fc0c409f885f07ad634529d49d2acdc40845a56240c758a2b63cbe5bea1b57d2ac3dd7e79bc938002e6f6e866b1efb2de5b14b0baf0518581c1c1e2295ace267b09504baf0ff5873cb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121026a650cde9584bb921d791a646daac93cc09b6caf00411f4c4ec8f544b7370648f3462f9d419d864c995bf1fb72c339ccf46667536a2f0313f1acb3a996002a771f852751442e4b67922eff2aa049838da9bf6fec757275705d8e8a4dffb22582e2c9ca26b492ccbd3d7287f47a88a73c4d3cc6a9f762cd067d072efe48fdba781915a8a84e134f0a30cb92668dd18b40e467c4448ce4f786fc9c540298fa7a6ef2258d16b3bdc5423ee032b3e2e7a0d3fec5e8aa5aa680d080649d08aeb27e1a18704c1b18c494175ea1c6e39dac4ae5164cfca9408c306a4615cea495eb4735700d37832f8e8fd12cfeea20a6e0a4800d38e3ccc69c0c079ba32b1ebbb06cd8b763d39fb60fd0153cee4c4dda89a0e0706f5d1bfa32bc85b76078e8a329708cd1e17f8a0af890ac592c2cd53e24267d76a809cd2ee7888583a9d63b38c48a047ced73f6672b8c285d2c5c6875bcd6273a5707c03554be42fcefd1ddd8d72bc9c80186dddd9f020f1b3e16fe4d85e5f9b45e1c549f27ae32da77c3718ccb5776ffb8f93ebb5f61bed6a17c7bc0dbc86936015802a44418d46ffb6cf6129cc4c7f12170af44823084b6a1b1b1bf4dfe8850cb91cdfdae7be9e068f8c22360000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038f1c7cc814003b62c5e99e251bad0c2e73cf4563ef4e612f55a185f796623e658c4ea1798b7197df137a0cb10a7ab8fb9ffcfaf1d8eaa1f67f823b7b776e368d5c1621f75f6d5f7568bf16652965c63ce913d1a941e3858b57540445c4157e1580c0a428da6dbff5fc5c78314d467a802aa426fb2599945ccff46d430467b3ae54de987b8951eb6ac838a97d3f253492fb078f51f693f1fb7c4f4958aba5e162925ea0f5a52bca63547ea1e1e8ecd45c31acab1981ae6cfe7713518923605f77b71776e4a6aa80f2a43f6300d8f3d3fac5bbde7e479d66ab3844c32de6caaecfcfba4274ff29ba377f67f91a1dafe062803ee2c372d5b0e3dd10e82727ba5282594506b46d24a66ddb045f09c71a1ce715c505d730f5522093ce84e8d8e33218338561f121cd6959c115a891d16ff6a9b57e4f35f9e70315de7fe614788e4815e692fea9e0c9f5a9dbfaab8dc6eea09043a022cc72e420e22e7bfcc650814c26b2c2e790147bc58e20d0cddd714ec0afd21cfbab281f091623534c0fddbc3337862a6c05055f5d8936ef44e5b3dd59f48a0b566ef69e9fe58bb610cf15dfa5c75ad270a9928dc3488b367d48d0ff2391d1b47c4e4eb797dbda13c3fe35e227000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092e73ba9ee5a07f17760d6a9972b5a9f2a8a9de93c70d466407364d3c94b34b7c07db9c066f751eca866f067d29ada81a11061a0cf863e745997d0464e73cf386b3739f1bce3e6b8526bcd8236e90c9435c503ce5960fd79e24a25fe6dcb031df94b41bebd01b4e86a03d2a61efa3e70a22c34797d9a07a98da1be6c7bad5c21e93b9313683bc30816a180e959a0b04d863a974204fff589b4bf008ea9fdf87c4c9dfc6a455979112b41ff9e233ceb4a7129c5e6652bdc1935b77de8478479be1a869ce926bfe7c5beadf374340da48e1ad03b349a1f2030c0ed6f9177716f4c14ad05dd891e46d6d261cde0e876591236e3e6bf125b91beb3aa8aa858ba9963fd6bee48d9bd22b73d2dbc2cde42a4bd106e00fdeff0340f65a7f3fc02bab55e15a08337bdd4bf27799eda48236a64aae2c7d0fab048fe8dac5aea070817cf9d6ba59951d8429ce418b82041ccad748e664be9b70a419dc5f19adb95cd7fea3a9f3ae22f3783dc03189bafe0a38339e4ff529e6de2e161aeac9ac1a96551d93489ade343679150b2f359a9fca68fd589cb373e0826f0e90b82657f6a5fefa15acd99c48703d9f29714482972e04337f91b251cc3922f4c7ea9e6317f0d245d5300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f67243271841c3a16305b4b411e98cc310dcb1126f94ad38b6d15a97fd74924a36881f9097a8417dc24df4e8bc0937d644c918540b189e66494ddb5b95b00d54bcb253559c1afdc4341332b0000a1624dfc5cc21dddb58d005012376deb9f3b8f377de42a79563686d32aabe70eceb831ed144e06a3e03883e886cad5dc070dcdc7a995808030025dad6668285dbf34a7c8e30b4f68a455c4099409bca6c7b60937b3100a2a70c200c23c79ae30b9a0d7be844271a0ca61275f79231c0dcf68f190248ea1b5bc388ce42f0fbc162fa23e4587b7aaab3148f03765558ec41a29b5c6efac409b1c192c58f62dc5b8632221d5906c836bb6df0b6c854d9cc06b9968457c83f9362a6fb92989e797d35896f9bb92e902517ed4531fa71971c348a8cea578b6c3eb88a1a738aba1855eb7448fea6f00940e474104d6e0fa470d2fee23a10a505607802070441bd860aa045314f95f2b225404b5b6ff03b01e05f83ae9bdf3c3afce9f498ffd7d72ce1aa9986cbfcd7d295a0e4470b2b7ccfdaccf253ded04a4e27e6afae564a27d9b23f0a1c6ff4ffde1803113222debbe471ba1eae0e6f1e22cefc6e6540996bc5423129fe0de2c50788807b0dd552bb4fe1ca77c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a6dd96381dafd1708792f0cd1d79c03ab333282e7413e5a649735d526341cc142e1b8383fe64f139fac7b25f58522f4072b8d073439f81665806a56a43771d057fa256aa88b2012583a53bde76675a911c54b65f36a8d13b81778204bde167030737b89ac93c2c5234d5680b33cfb1adbf5103d327283eee342729d958a34ec4382f27b0ed2653a29ac0e0ab3ce019b9f0a68c2cdce9e3cf74a467810087c4fc11d03e1a65a5ff1f2a141ea02f554f11e338b2398c7d0bbf22f99fe66b9efd350982c25af114ccc0c35adcec01b072451c5e9f4667f855a42454411b7089672ba54f8194cb43116ec4e18b13e93c750a890b87e607f33868b8545f8d41954499334e119f544570c6a97d356245ffb418e1722ddbf7c9527e7211ef6d53d1564064403f7901891efe288613da47a9b3618457501e2cfdd6a90d5ef8b58b67ad43ba16e236f11e4fe7f136fc8ef81e859606539843109cbd3f4a5c13be31f60683d57e5773ab8e14ef205f18a11c9aa1adb6a026e48ef8fd97118d04ebbe0f8abc3b85a4fec49a9b7efbb219b7dcfbb567b01e858af4b23ecb8f57adb7eb0f2076eeb4c55cd2c699e6417a052ec7803c687a7d37e839a2c624b86a457ba07d5c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c19ff09d2366fed75685c38a273abc097481012c57d2bd7031521dfe9089455fa508fdbb673abdbe12debe15b956795ceba92308f0b65b646f4086107c2c5cab788e8f1fc68347dcf65c280234c870f2f49feef0373b9e8fb5970ba68fdb9e74f8712ed910991b6e559c4ea8dd094f92694e94259d323d7c702e05de47a33f337b69ac7ff073bea0a49925cf23566f14e5da3ecf97bf6058c7afad3835a59f6db051cfb1b2c4a9a365defaac4b0a34e6e8e4c94d0a9d0280e0c6c6b7c12336b0af544dca9e91c42389eb6f1f5df843aab5fb5782fc4c4dd8b34624bcabcad34e4020f88aafefa7faec3550abee5d80b9d5fd14ef30b611af3070602e0f2d5ca9ff56cd9ffd247b0c82fb2d61c6b95be7161966d16feb3ff380f42b891a2cea0134b5b3393e76972058b90c7ca2400de234d00d6e35f369537f8d5adbbb05afdc27da77eaa3dcfc960241ff63a58aa8e85032da55df40b49db64e9f5f3e56047cbf419f5bfd1badf6b8888f6a585a30c0a4358904ada061d25c333b737178edc3ee9179acd4309c62535d866cf86df3bf3e7fb1a2448ce2ad1f3e685aaffeb22bc661779aa0ca593a2482e16d6dfb138d56a1ed584ff215f831ad69d7cc6f16c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000904c621408d06d8453429bdc89694dba517255ad56e01ebfa60401bd86db50d52fc378b41c74d409395244d7913b8ff06ef068230d30e64abceba47dc37a6780d2c4429bab5d3a4bb51f83f461fabc31a64c3a5eee840a240b7191d1e64942f128bcb60e333c3e497f6e5ed391b26ac8ec0338b80e95a774386322bdebd4ec86088f493c3a4c9050a0cc1c6ab88beb96dcf3d3cde7c5c3e83a543442055e715fff970f96d6d44d26d7e78d43b5458a8ebd7ddff77300089d25170734d4534dd607fbf6c0cd2dbdf9b1e95f5f75c2064dd27409b073227b6dbd3f48102546e37c4d64e57126d929817c2f66f093b59a388898764385b67a019422f53319edda721dcd626be76893e2b1468c84b5b9bb23265060a05d0b061b9d20418c586570d14c24d5717a3c7a6798c5611a6b64f94c01e7fa501a3f5f6c80a8834774ab9fcfb0d8c0a8834441851bcf0be1939cfb9a0f5ad605104674ff916277cfe31a036cab073b3ae43d27d44d15769e2e9cfe1f718863fb26a86a4a3c314fbf27c3d670e77eb297e7661d3bfcc5c5982b99b45ccea233d5c7a49ab91095d8da5686b0ae6fa317e222fb634323a10b9a8c7a091215853b001dbf22575df31e762912c34c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001367af0518fb61b174c5e2fdad71be596b1773332b574f98e62d7d824a020e3e7fac3edc0be2381044d3130848530e1854f3125a1f8e5c9b1150a749dee74a099b52d1c24d3cb02b5d8d58a8c696eef8a55c314a34213bc6929eb5fa29dfccd5dc7b2e0949a007e78954537578220778285d88be11c91c77ce65f2ad50d024acc456269b93b775aae0cb0247ac912a50d574cf6af73c67187649d19dcdcad7589b4081731a87d622bb109533926285ba6613fde3ca4ba98cdf3b18d34811455fa0620fc50e44052181b52d17456df9d2146a78512fc9cd03712e689fa2d421fd6eeb86b129063d2525fb7a7affeb96b1668c45d25065ddaa319f0a9ae44d3c55c4b71340794c9339e627c7c4cc06bfa4f1155f5ba6e43d73800ba2e2ee2102408c2b16c2abc2423988ac6f4d531394fdcfda15453e4d04f88bde1a65d01cda4a5e80af79f86235df4dd706a65a0e01a1d1af5ad6fc8cb5041385855e4303e9824e0f519b8e7f31ac36829602ce35eaa07700457190d4b39591f3597cb3b2687d9cb228b5e14705f8df1d74a07ff21f6b1fd0360993e0c4031e720102ed8efcee483810e3f3bd1441794166f1168628295b2d1f891bb241b08f18fb5b4a1719910000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111bdc1d8424a3a7cf8fbbd00ae8491c94e8c9318c465988b5dc24acb836a4861bd7c869e109c699ed28f463487087596eb30aa9845d41cfd0346f767c2d64149d8196ad8d63d7f18d317fd8d1c21165f7956578b179414916ef7f028f7af0193b3a6487c178272488c8fcd9b9a7e7ba3e8989b5b86c62b00a93d72890e4f85896773e7822cb09be539da74a61e9a2a272670265481a1a9121bfa670e8d24dae10b98acf4cfe04e3ed471fe865488a47db4d43d7eaf41e7be08a5a07e56556685dbde61de1174c45150bbde7e96950f52cfe8db4dc550b01f49332df5536774ff05a6f97fff3b44fe7e99f81f57db7a0ae314550db267549156b76716f8657401d21889413430fa8124aa6b91bcb7cdcc3a1803e5f74f07bf72ae822c197247ab32ebfda2f1d8abafb03bb5ed5f9a4745f8e690c72928a93b2e335136997280e3382523fd5a161686470afa531d5afed3d0b4c92b453526bdf3016688506c300db30d7806c933840303c999b0ceeb3a75a5479d2fd0b473a86cee46b0feb887913f764722a2145d090218562ad08bd030cede1ebd37bf78641eb44b8b227a20cffa00b454fde9996829e34e70f1f959e57a37d414f09a479077e1da9d3f8a928000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085a0c2ec81a2e09798638ddfcd1cfba472788055d0ec41c13499edf58df5d8ec72f4ddf29153190d1c89ab75a3a4a00171132df9524f44a4df5c6229547e2c8a7777941174a3cd828b5054ef499464aa52874c2742aeb2fda6f81d78e5e44d237e2358f92851e98320863278c0bc338c6a86ff18483c3413fa2eb94f0420f2f7c562a6881257477adde7e207065b43633f0bb805ebde760e9ce9a88e2e91af874cba2ff44b6865eab5f526c4de81d11dc2c10515a447e98180a2b66622e003c60140163f3fb6055728359b6e7dec10b4a5cb363e95bfc7e2c26a79086187c73f51470cf5b8a10a0549af5648a7fab3fe4923875f16dbaf727c8519a5ba1797ef8ed8dae25159e20ec411787af8ed8b82c5a7a050da8eae7fafd1fdd928a2c7dd0b80a287990c96367cd188fb307bcb2ae8e047a9532d0b6b4fee339e050b64cf1dfb0deb30507610dd7e01ce83a9b832cf233680f9f2d269234f960876aab9df413c7b7784025e652c0c903bec1adfa8185bc3168ff2451a3adab41700271d2b6bc6c341e7d848b931754b3feda6b6faac8035e3b95a82ee571d98d4fb4542397fb6802a7785a298f26be46bf2768ef6ab1c13e2ede8f855e22d1637db990af8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012021f834e8b41f4bbe972a583814b28b8fa85d1fd4e6bb501c44c141ca874a20d2a1b2842cb0cef5d7c6dec46889d259f9055597cef16ae2a76f5efe91ea3930b9666c24c21d56744740b560c2360ea5acc781248a6d450b938e5367096c62f7ce8cc9b7918e2cab39c2618a9757ab7766f7d4169892a9bd3503ccbb9e64a1fc98eb8db032d067a0ab3ece26325b6218baca13810a28414e7a5d5b88758f3f52f8d8af1db2f1eb721a3fcd0ce7733244e6b11e645f8da5b235df522e51253349d248f47f41ccf7f7e9e6762865fcf4d806b6f4b1979e338d3a05c504935c3529f82755b695ba5f69172f087d48ebca79af4d57bdee8bed7a2c264f62d91ff9af89445c9420400d10f55940363b67850da2d3f3015ec8612204e7059c51d95a39ce6854c7932afbb5cfe4d80c93c81f8bd5a382bd30f7d118e50a517da3d4219911769a56aa4e8b92380e75ec1de8f7fbfbcfaf72c615a132b20758774c60e0df8cd38371aab4c93ffca69a7d486bd67e944e82eebad398746221cdc1354a4dbd602a3b0b5fbb675f987bc8e5185b558a32f3250c833c11d27110b177503e5092c32533f01dd138c6c501899e48f09fdf68d567be86cd1bd8dc210c636d0591d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001437218e5481e0096224e976162e9c09b341718647470ed9b8bcc36c5c69a260bf5a0a27310302553599e24f1a97e5dec26d05c8c92608243494860cab12d52b52094613f0e31572a081de94d5ca8139b7367172b12e777afe693ae4e0c2c9ca91fc3cd8f20ad7890fc944dd831cff2572935eefb23befe24548ca713113af4e86394570acb4a0e82852238fdf77a45633286fed802682dfaf3ee4d0d801729b0ddec75649dea8ef4968ce40d400a3f0761c979d9e78328a56e55d8f85b5cdd70ad03f8196759438dc9d7512e66f6b8b6a93a4db8aa77b9bf2ac5d89639410068c6336bedd16dd03c301f3d90252b6fda0f45e3967a1a63af2c1780739acc5aa8dc07ad070c886de443d936f814383baf3e9908376bc88f355907cc21ef23bdd49ecb697654185bfa944a34b778bedb62b5e462f4f0a6bcc4eaedac4067960ccac53f68cd319f60414b82aba21d2c47851434c60be8ea05f02b47a6e89fb0f6886d5742ccb9490ae30ed94f55a820bc3dca5dd631fe8621890e905d5050f34522cf5b5fdddfef9a358ee1799c54fa118e1221ce0b1828627f295857b4df60d284688367f6c58f8eef156471afe82bd6f0258d314e1ac40c7c8fb9f0809103ac800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fb430d00b1d68ed8409daa2847807a517c3b6022ed661497f8b44da316f3cd6ed31506bb3949c70ef321c9bc33638c4c37fbdd44925ae422809e1dc9772c9f5f95a1a0ac11eb43c723a191085f06c16cc24db572d8ddd392609fdac3230afdc170a55cda10b7535a5c8563c8002524233677cf9907e63de264bf5e42dde93a9f79f21c584d6daa46d59283c979412f1b57a514ba46b8f1cfd1700ce82860b1df48d118a0b4ecd60846eff4ce1dae12b212b99c88ec52ecdf0991b6249aa0c31a105b8497a31058a2db88cd710ecd8299e345dcbc21cca4eb0b26c715a6e146fdaa14c9358cf08c661473caa3046aa07f74697340f162b919fdb9e71a1c1846f48250a392be5eb46af49ed92c221897c6ee7fd3ea72ac4c48c7a37145ea61076e7c9b89fe52e45699a1d179f50b1f6bf56616b7301d89abbce5bcaac21a73952ec888f7b088da54030b50c881cd3161c0f58b7847255cce65e9a50cb7e069d3c559264f8543a41a50de04776a01c0d59cc5a1dd4ac05f7dd5c02cf83095ebf9e025fadea8ab72493a9a7a5dc29544d255cf0785623661d8c61a9206c75f54260afdc5d6b89de24b2b5c1144283a77b789c371d7a4de0ac5d39821e09491521dd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a15f54c2bb49a250e480c70eba667d60fac237436da19d59871098cac35a87c2523792f55d3e053aa46c2008d5b0ee19256d2854eb89cfac688c0c2f5b5c68d1c66b91454f474cd20f27473b04c1ad0af655bf9bd4b565dcb921ed052c4c5229e0acaaae8404ed24f9d77d0732294bb3e63616dd91da2b67f5ba74c811b1eaf202bf8e2fa65c6d1d3cf589ffacdcb730cf7c33d8188eedf0cbc8c96b9a7e8075ae5fcc9b6ec35ac3cae4ea1f798961bd269f1b49f2f3e0a59ab8eaa82d1b2bb69bbf7c190a55bd8f98ad8ceeae3db90b4b07f1849c275ff691117052fd7022e715c56d3aa8147e2f33840f02aeb8b632c7f4c5b3af37ed2ffc24aac08748f069e2f495d4a93611ef4ab333846725484703a0dc46baf8a8760b91d5bb6e2e973f45f38cc75ce970f312e1536736513e8dc752018ab1346dea8419fbacc6f9901f410aaf718cc0ce4b9db203e287238aa961af2918e658b1ce04e4c5e9e6592129ba343e825d234ac6cb8dd96064dae820dac67b114e7e6da46f9227ed34532fbce61a1ae5a5807f09f972be32bf9415827b8562960bc8e1abbae05687c7391422494d62834283dd434064e96d856ebe40ca765418ba3335d2d5fe7eb6e8105fb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab5e7c37ed8a8d0a2bf6015d13d93179f157cfa7883bf4d01e7d9e7f3ba28d765c50324832000a0decc7a138e2d81c176f706a04aa77f4a04059e91b4f7b3afe028e232cf26a82031aa845639ef0df955ce0810349a702d6e959f56461d47098046a006b458b9e453f48e7321734480865642fec1bcfabf3bae5e959b096b012b33dd535ff4dd63b862de85594b00ebf5816113f643e9f1f5c71679449c7d44f5015d1d8b3c493daf33044e9787a13a45a258b2d7065521a802afad4f73d9fa3de40f47fe378be02e4d3712af83daab76dea81cc004c33cb22c7a129d4ad4bc2b951384c329c16d743ee5309de254ba3e5f22128ef30cfb953cb3fd5c2f9776263bfd29265d2968cd29f103cd3ccec76341aaafbabcac100dbff59a3f46dcdca185578ae28111f2531a9aa5923401851a703f0b191544741dff38663ef5d95b33ff2ea44588d83df731b1c6cf2caabd7b748ae26dcec2877bb2aaac7894528c98c07fa168a8557bb57627d39180dd4e9175804ae3e1a2c274d1834f20ab7a9f6094235f26e2c7e6e8aef6546da9a97f2a2466825a31530dcd55a8d7a5bc03f1b5274cbe3f0d60f6626e66b822381e703145bc680f2493e1a4c018dc58d20f14f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000289bc85b875055225c76f33dcdf708d65ceb481d0a4d911cf3e69701b63ff44cfba01ed2075a70e300c3cb8c862b07d18d87e907066617e64ac681dbf1a2725985e2a51c8f43977d840b916e24a42ddaeabda4b740af0b6cc3270c9e57434e703bc150bae7077e3f384327174e5b67c0cb2edc365fa1e066ae8fd2e0941f1db32f3ebd9dc11729e54d9d7b2d8c24604529a5544390c19367e4e682e7b98cea977308a46181d60c3625812a7a4bf4478f680d17251615af0accadd73e3536a8694bdae4c2e9dfc3d7066e2ebe03846daca44b62ebc0d086f6fbba59d637fe580a4ff1d91ab18984a0babc78ed60427538133ed61a57a4153e2ded477e1e2f98b77718f9c3e841e4e927e42049aefa2d0b6b81fbbb3b45a443769bdeea382509fa4e2a4b7de1ac8aa0d2af65e4ed1a07d6baeba8446585f58eb897ae0ca31aead28b59ce04ce06b7601232b2924d561f9e060e5fa01ce14ef737f90ed4d58a50c66336b82d41816794658878a369e0795025c35b423265bd19b2dcdbf2bd331ba23b8916c18301a97d1f1dad22cbb1581fb03f4606fbba9fa5b7c5288643bfc41e099313854c5e091424eca16beee790d5a14064bc2bffaded444767d7452fdc1f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e5d2014e1169023697c9686a411fbbcc2823b35d1818274187eebcce8627a2c7a2db8f6a9d0d9b5eea1b06586f77316954ac5dfea8918baedf8fb3465d2d894462bb8abbfe9bd30d6bd822203ecdd802e62cf70242162a8815f1057e2936461273156ad2aefdf3ef19d5fc838b197f9970e1b26af66efdd784835428f83f10bca29a18c590d141c117bd470a90fe1770e3fc6d5d1f7bd3559209c0c13ed68b07ed09080a2b7574ead3e47bb5e3d7dd0459e70cba23ebf335b09cd2a47eb983999351ee012396603288dd8f9237b0626cea8064759083f7b8c5b5971ce2864f156ab127bae8df78ab597be5b82ee9c7453cc22e1926852098fea0ec845c973fdca1d607d68b5a58d4e8b5999e14a98e31e5c7bb6c246270fda12432c7ac6d44602e7ee52c7721a505c991b9c84d833820d92bcfe0efe080715fffe2ae1667c1abf9c272b0853799201d0612a8f3fa99b94f5fb224dd72651a589b8b8d77f2aff2710442740d4ca43abf8bc1c0c6be720662949ca66a29989be7dbc47f1267fdf0fc54a58fe4eda01a3d9f46e581348d66fd55b187aa2933c671af430cda9be9931509828512670a4aa996cc2b095a497974275cb31a6c451f6bd591d7c52cb980000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8b0a3dc13cabdc10bb44712c95b62f14d6db164c64d56cf2e3bc4440f93ce95ea9a38784067bae5f3d848bf60482b1a3a6bc002ba2052ef8825848653d073fcbe4d398e9810f911749379395a1f58fcc85d896287ee0e97dc4d25ebe882032d8c517ddcd18a5aa2236bcca1cdb2cab624c9a1fb501e02c12c95d8162c48df3c85e60047e4f0327884ceb64bea79a9a64ab71c890ecc5dcc278f36bab1c703586ee690fbf3430e4f86d43ec6af47be667e947477ae8b3fa45653d9d59e77f6e1561cafc3968217f1166f30317c3af7526a842b988d23e9102c62138421f0f7bda9460b87af52dfff162e890388bcd5b2e79ec11f0e4294e096d087f6b436dadef20bcac0c989247781b75903f451bc08f52866934b480efacc3e59625056ea4b792ef84358b831f299d06c575f701bca33be88cbe273d8469e61a3d8ecd106b0f593d4bf0892d2a23520469e391843c6518026512251d6b6090f6228492cb96915ee7abbd805b21d4070bd6afd648371f90fd51a20329a3c43bdfbc9327983d8b52f5db89334f09cd3f7270c6c9ff2a91acb5367d590430af0e83a511e2569fdb091055eaeeaedb170b431a08659ea196974ca4f4c78b9cc812c6a10e932828200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008979981dda38ccd5b1dc4ed18e1fbf9eab07a0c0e29854e0fa7553a7d83e00d8a2a43abb02a53f8362d91190c5d1099e9348bd99dbf447341c4074fdae41b2166d37c4bfe67a0b574c87f6122db7a8ff0a5b095212a1a7dfe3b3257fa10dcd0489a3b459f87bbe121a281fb2160b03ec4de305705c0f589dceba3ad2283b4a037145cff1ef75644f73664a197b24c3e7eff8ce62c260d65a756bd2937e330097ea329bd8d040c4f0b43260065b3c585ca0d57da9f131a62add183a4893cd1aab60408f18ebec07c21af65a76fce19117b15d4824268d0bbad630a93c9dc26dfa695f6bd2cb4e9966782b4e49261ccbbbe025ac8470731b1ee6c7c797477fde05604b2515fa32e970a99dfedd57dde3163364ab7ca0b2492f70150f5c5894d90f01b017cd72455696a3dd87a27c80ae0fa83367aba6b8138d6bb47d74ee1453c598eeb20d42a977b82bf503d09412729ed85cce13289a51d49733b33cb310e27991db760628a3789c9c6252d82b1f0da243ab10ae3e64894ff3d7d2c05bcb80fd48daf965fb8f0d814b3c8fd0382af70133cdc3e013279472a37d34b1fd50fc301fe7ae5bf98c2c0dd0ed7147f8da1dd4235aa1976034a378fdf92db45758d55c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097c97b270cada11024befb20187c1447d3926ce0231b696c1e064b52e9066e6592e1d72eef20eb433e07146c64609e827a39d04c3c642865c3a4832aa9269b9a32227da4e6244d8f11775ae65fe250f2ba450165855557e6b4746710138865cf2afd085908f43b34de135eff0dd1fb4dcfebad5b9f0f83a4cd6855236c2da712b223504ac4c6e3767ee73defed1b74d2bf6ff692d9dedb9eaf429a688d6ba6dcc1039dc888eedd8632135c8d880fad4bb4e82dca9052e1fcf41f477d879449fecf17c18345af5bfcbac9892720909b9c046a8753b6526898ce311ecd9359718c9fca6695f593868aa3812fcff437ede28a4f112e9f763dfbe0c630c060c2d7a833c363de79c4752358561875fdf27203a7d5595dc4a7c2899caa70977496eea3902cc6ae39f7ac7eb420332af80a595b15c561fa678790cb026926feb89e5ec508c8cec6b7a30d8a854e639684165cc0a154c93fa098f787f94c17468b347ab5a9f59a76c97e4a10865e20bdbe1143cbb86fa3f7bf18b92f3a161e11d106f1d2a9aea0bf6a2098ef9c2348d3337af7383ce3556d1f9b75483ea3b294658d8b23a244521f7701973b5910eb8cee186f13e7107e38e9a53eabfb8972a1a2be3f63000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018840a5cecbf3c86e3b0c37af0915a70ec12a66fa9a3be14b463eb8da177a62879401db004915384b3eb3ea9a6ce777dbb6fd585508a5ddf4228e43f24e6c7c07ae359a944e632a987ccfa5ac9e1054112c5ccf80bce8017895f1bff4cfd3acc04e2fa720faf065a8d601a0de9e581cd30878b02e8f1cf02810d836195280e8a238c14eefb20184fdda880ee4c263ba73203c63b3f52eb2ddd84593af5db4e2dbe182d9e9b5ccdcb23a97bdfb3b60795f078c9da6153967d94e3feb968fec82dceb8cf26f57c3fd257528c5d51df5ae14cfd273dd0f0178e6e07550393dcf75751de441e50921812602658c12bfd20325ce7bbc6964dd790e38895f3f5da1c95ea5960a2181ff9b7922b1d5880cde9072c9235b13778e55381ba558e3aef82c8d9ab61a23028e799555b418b89eb4e8713288c4b983059b026c04f7f1481564baa368e6c4980f6225f1184ce6542933dc0738324fceaacefa5e672537abd924402548757acac3d32ec36d129a04a03170e8b09a971ca92359e7bf7c99d71870745fdc73a3b4e7d8b734b52ab1a8632865e41ce629b0f6149b583be3c8a9307aaf16c6ecc351ce96cdab528bd042cae3ae62cfca680eb089c5be35ab0ca421fb80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad83aec1fd6ec5f800db8805afca33e7884b1f45a5c2a40e3156451639db6a7383a68589be01872abde7eb089333c9ea8cf9abd30e930cec02a0e298fd9935396848f53d7293a4c81dcdc3d493a2f25f4274f57549fe69dfbdf69a8f2906cbea36ea4f2e1a8de4d016aea808b3e1352779f03382fa819a8b16057b2b3055c4e8e056a6d76b0a6d3649c49744f6c72173d4fac36706c1053d515cabb24a204b153cf35647c5aa08edddebbbbb4b90ff2c23b896dd02cf5aabfada7b075948a7fbd168e50f65234bd3a2e1353aa2325ae083c6754f6a27c9546aa0ff842af10b79b25170a7f6c3ec4ed1e64a9a36937838051ec3472b03f629a34f21a6bb5ff6230703756fc49e5c5112353288ac3a4810bf72d812a3208e4033db2d32878921a6ea668bce316ab6dc8a535e2800cf3a054b17a81e0ef6656291f3924c4f509d3eece4a80d6f2876e8174b3e8e499e2603fcfa1de3d2deddd666a7037cf8e697c197d5ddeef1bb39e32d6192e11a8e893362c3be814b87e8712b33d0dacf68d6eeb733b2f953ac2a7a2e26ef4fc7599322c9ee5fb7dd3f6c005b71f8701f24d523f76447869ec404f88bc66aa3ed35739aeb45ed79a1376773c87c68a015bef9600000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095233cdaf97a020b837f52354c4a8ec60cc91fe787a596e54fa951b1c67706dc46dce53d2780326afea466cb4ea046f38f69ed7210e6921355ddbd3da23b5b25edc8df5fe4e2280399e52608ed004bc1c4cea047d5227a86dfec3105518d9d47337ec2424915b85c47c00086f2c41d66615342525b15604013bb51f2d0a900fd55af1c9930032b9f696a731e4d56f0ffca6855b207911970180c8cae1f5a29d722767ee34c8343a88de6f81d625bb5aa91671f26cbf9092dad0d9bb6c2a164ce9ce6e349086aae91b519b4a4dfbb7cde381fe3efc671f18edd99661b92991b550abf59643a677c6ad5c16a8e46ff81925e69a78e57a7e40250e5b7ba4437172ada04a48422abe53d1ae05424569bd18e238caa6553372a99deb03d727699ed63e80620e76d8f5e75cd3469434f6c972b3559fa441f1d553dd9368ff56dd1ff86f6ca309217b68f58424a6ef9e19205ba52648042334de7b14648d8f843052539dd5a7cec86c1179533638e7fa610d7687fe643cb90bedaf0867d85eb1860bdf97ef773ab7cb640fa7e4ac34c8c72a412ed3d739fa6fc9ccc52d809ef34b1d744eeb74143fabb3214768ea2038ddc717e663c4ea9ea21aa023c631c21d6523270000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2a450b32dbc9b530bceaec519b7ce9334c63f59dcaf20e5f7c0e123626474eb280c6b3a36bfb9d32533a0d083b4920d7f0027007ed3ec7552edac2bb998a9bf63cb0b999ff34cebe901e1baf7161dd91ae1e9df3b6b9fb3fb9ebe73f9a333770c5abb48eae794d224cccf56f59778a1c7437e0c140212501e54d14f45a63fd60a42f81fade91f4c60301d76050c97b43c31916eba4afdf8340d6f4545881108da4e0f72cf7efb670dbf485d71c835a0adfdd0f74e30a7c794b979e8e799a2b04de4b98d81e13b93b599c5be312e66210fdb33b4fbdf25adac4d40c145a3a546aaa28a9e58f82a1bd907afcc41833a3868666b4992d4e0b9e5e7b5a8939868f05708dddb2cd99e97f9e60dce548ba3a0ac16124963df712f54e9c2a647a5df044ace278d0f765fb9f1b5c9bb444c56f5b3b0a870f0a49234258ac0544c40693c3de3a221c155a0c18b1597ef8ce574f617afd7c4e6eda63441fd773bf40c87543a80103a62666b82dca45a32104a4ef7bd92e86bfe76c618c9654f681de8a142a905f625861bed365015018be9b4374afe2a62fe30ce5a52fc04894b29110c8beecfa19e80eceae782f6659736d41e5a43631a55649592ae54268bdc3d9e0fa30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9fc614c8495f359c412702642d3517a1a739fb2c5556406000283121de7773390fbc631c91beb7c03d503f13c59e700b956a6caa6a1fe01efc883bae6a22ca24fa058f4095bb6849e99400f5699faf629a4411b4b0d142f91f5f034725914ba067de565bc30117e11a245410e78e9bd9bebdec77dd833d1fe1842443f7a9902729b30bba9cb7d51d7c4b3ba486ac8ed557caddae0f01cfa6c81c354bf348d27da482130828f4c9f99ebf0eb0aca35b1ad8aa9f6aee0f93940fffb47496416a11adda98211ce88f30f3a4b0cc284cbd2095e77659c519da749f2728811ee762d01a932050de88527d2fd24a424baca5ed327b46854c31c53de067a10470c9955537c0d3f47e54b57f9fbc84fe9cfab2c880f6a976d6a7178e9570980bcaccca6747b18011c0d81e13f02605a6264f327385dc3ac08b44b52de83a8bc0870e3e46cf3793587416c54f242cab6c2cf69fb5dd56c8f5bee7bc20cef28337e11f6bd17fb4c99178b4774eef52d3253f63ffc26a33d58dee33f757bdd56b3d61c4483a0293e60279bca48f1c95448e602a50ddfdc599099ff5e0ae40a6efaed8d5f8eaad2898f53424391df8cfac491d6a30840e57649406f9d38fd389c3268109c6500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009895e27880aad55aea7be30920f87acfb12ea76c8c726eb5bc7ce6cda14f28b31b54e3c379aecbf232ca6e24ef74ab1c0047872a6c717930e38e4b70f4c15b4e6b6bd86bf6e3834a514b95ef7b919a5b155444c999e0b500b43017435e0e4a69a7700da8228d7d582db3fa849e3d51eb33cb975b569fc757a5e8d3435582406dd13198e70688b31ce6970a821f1d4462387a958855bba14fbcf7b200009259f60bb86b1e380867f5153a49902cfbfd43aef0f10f5a2d6b0196d44969eef7413a250ccf3963cbcb015fa07bb74ce09c90ee03037115f258322bdd94bada219d65b42df9342d06117ca89a8347b47152cd4e31969a0eea60ad3dcc3302a3e07060651bde6a83f75771a9a443869e8c6dcca0820cd35e59d14786aee73b2b8a6cbd527a31ce549356d3b754f75c66d5a9790b4934e920894f46311f97f3b446c1fa17c7baf37bed3a081ae90ede993651b97fe5e17c77d05c2ee8acfe2507ed4803cc5bdb9b53d9b784f979ec01e25b76bd81b92e4ca36b4817b0964ce82eb4c61344035e0c0a0d699ed55919fc321ad85f8d7d7fe26888cbf028770ba09dfc28d629bf7f48d13202d791d6e441f31b663e8ba18e0e65aea3febe233f43bccc20a50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000807824cec33ca6a4d8c6d724805f674d281dcc72b61b0719ee3a6354197c37cf99718bdc77a090584b9658e08e7b7f46ea96ac9c0887865b027ccbf579b26837759f4473d378efa75acf0ec6cb04d468b7a541c9ade76bf5f3b4f0dfcbbf569b961904ef7e56f512ff780ba479a795d234fdbfdc843ba3df80c5217262a2316b85e4ce42288057ae072a9d40d7cd3215e5b7acb877fe2e99557f050b57bf3ae6bc40a84ac2e6a66ce2071dc9c8d0268e981a692ce40598655b6b0da3df7757a39b1df197b1d62e3f0255440eb365f37c198bb7d4cd6acb216ac29a19492f027872ca5ffa38b81ee7763607c851e65bae9dff56103ccb3a0ea2948927aa611296766b62e55644752d645258062d0a8d0dbd2f979a603807da2ddfff5bbded27e4031ceecb93321280826ad245b6dcd446496820eb003a663df7508145f83c80ed85f52aacf722937c2c275d0a2b3accf0264bd407b8e749893829d2cc18078b5e5c729003acf4ff1f1ad3b2bdee357deaf45b7cfa40c09099a68d754c6a07ebd518cd6b416a967349b4b50f9c342814059ec2b2e693fb84da1cfe8638a38d607cc3866d49bb39f925c9433fbe7c137fdb458d0b02d78e2693ac87eabc360da2040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000910de0e751123fa1a677a94921329f67415db5564257ca2336846eef572df33ab07f12aa0fecf68188d1a6f82e02f4f7d1c4a2af2cd35b4383b4fd099e0226116aa890e56284af8b37d70eb8abd081a67468b494ca348d22d3428a83bec499a36668d19d1abff67887323bc4a5b291226b5622fcff122fc094a37496268f02487c394e60f788666f5036f32cf39ebfebc0cb3a6efa2230c7020e95a58c4aa647dffc8bcd5e3f6c495a0cafb6456a86571bef71779fb3bd89aac24301a20cb648ecbec1870106ef238fc8d535a2805d70a4198e1868b52c095307aab94e5c1b11ae4f7931dd7796f347def1e381c8bb1190437cf0042f7df6e9bc78552546564dde3a1478d1216b436825cb979dbbb79707c9d4ad9605f52fc6e5134c0db9297ec1f5f25efb0a1165c4175955725a6e0faec3f033654b44686578c8b0a5c00609964acde218bedd20576b7e3ea462105ba49a44482349d4a0cbc07ec4ac68697ee1bb2b7edec76e5a0531120d2e096d267d5b8495c83bafe646626edd11fabb1830499aac6b327fbdb41533d633f8af63c4990a30618414a619a036bc2e2bc778b47632bd5e67422228a0b1394f3be4a6d83d76a62c6a5ff10d676825d4e4fe00000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003155525cfd40a3bb4c517bb5a5755cd8f08d4c71e0be96608023f76d3ec3c8201789d430f1c8c1fe3ddd95efeba0aa99b64e20a3a5961a84415e5c8d45e4f11ff3abbd3bead3a92aee9423b70971abbf7e3e9d49b250bb3aa807377539abed7cdb1e47058a056da0b73d1a4bf55c127f1bd88975b5bd46287bc65d1625fec4ed55b890e457ec9f9f04fb194cd7ae796b0eaac1ccc3b08945811b2c7cc6b56d05c9a2f35ffe00b979b7d09d68982016f29661ba22c41ebdc129061221df9fe1f237aa67151d958ba5866b4aca7b07674a0c02f6c28b323265a5d452127c03fca9a41b1c388207b2a8f16b1b24700df5835619518288e60ef754e5bf5e5c391ad20113d51d8911cc1b498353c55c4336a84f9b904582342f60f53921d4bf49fe873c49020297c2e342428470035f4270abd0c44471fbac44eedc487bf24feb90c97fcb27acff32173e5ac58138715b6e1a7f9fe78519de05166b94986dfa1a53badc6dbac41b8fea4aa591ac792b1ee6a1e0690cb4ec14b0adc3abea352cf77605924a77340e9e6c19ba7946c30c58363de0ff8b01b81e3b8f757ed0b40d6c472d06003d76cb0cf5b650d8cffdabac7fca343dd587aabe67b233655996da224fc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c80d44bbcefb19c54e4cbb3a503085d4dc11b440f3e401e13510b722b1f79e262ec3cafc29262d6d5f04188012cf1b67de4e11a5aa624da1de0566958bf1758ee486d9a8198f855ac3035f7c837a0ce6598a96014b51acafb6bbd22500b0c81239659504b3ae5e341850e447bfea4529b40295cf6c9f981295ab6f63fca61ad8efee8db25fc0c8bd97e5f8a0546b6413395c2a9383f3c4ff1f239ce266572a1d81c8e16aef94179995fa9f81fbffc18b15a3fbe881ec7e1158ac355307d38c8c4abbea0f08d03ca7cef96848c0fa84013e39cc95a2cb48307d5f33b0fcc82cbc4d67fc0e0feba0d9fe0d906c5664c0a874dd5c0738c9a586dac52e2affdf0380ee871777577f2faf499066090d9415aaedfc11f00d445208baed76495a9ae2b73de648deef27059b3ac3555755e99651158ddfd5a0655cd5a746c14b295e5d85213ffd60677b391cda2df942456bc6ca0fb30b43c0ceaa9b408a8e0b9c76b0979f35fdcee61bbbaf19cc81e3b0b67e3a14468f717fda984eed39a4d99499c7e01268b62147183feb999b431c8a657bdd1bae5156c02cbc3188bb394b2db345c73978c5c5f85c70b1e934465853a8f8e24460ddb6f309af44dbdecaba369835c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021b4c787fa5a4d6e010e9536bac8c98aaa2ebb93d8d30d97df207018e92967e0807aa90d699733219568c086cd208c3f71925d48266ca843e87c2bc374b2a552ac1a2658195e89d3ca6d9b366070424700d5f9509ed6b077b97e5afc46fef0b472340f0660ca125ac246b1626891d8a8353bbe814f260692420771f19540648e488bf5aff959ff5c19a3cc6d79fe8fad2c63ee3a12d376edce80223dc67b09d2d031f427e478f415c8c2a2d40e4634d6501a426ce481f714ebe7bd24a99eebd8f872ff6dff7a7406aceb3b5efdec9f102cc881f83a68a69a32ada7e86e925b0fc6f11cb7e873c5d041ca67459accc85d00ed81353526c87d70db66e9665adaf425e4b13cfd86043dde07bc303915f62c0221d9056094ab0562e086add0a7b9ec8620b44cb9994716d537ef0caf0fd117f37828e65ccc8f0cd1e805cbe4425240551144d4e953d690132b8d42fcff3d190301270a8dfb482ac77046304ed62830eceb5f9e4c2df2458b14ea02a1f56d7ee4fbbdbd5b882cb1a94c58f711466344c78e8001f9e963900709cf2527e4afe2f5c51b0d93deef253bb260bb22244088c5fbb084c33f6d133ef8117410bfd509a854c57f0e6124646003292146f2e65e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000215947bad35946d0549001bd8ae8a9e7a39b0668794b3b6cb168825247cf2c80c3fea7c2e9455f5f70e74acff9dc9b632b1d56670348d971928b994c21c28940b36700fbbf55d44a78625f3eb51397e5e55d25f3b05e53a23e1520b71be7ce3b5216a0ba2ad9f150bc2e90aadbf3b9087290dce1b2bea47a8745e94c514356c34b76b47ebb5d79bbe6d1b001537b4a612bc14cb571ff7edc213ef79eb4317d28fed03aff91b8bb5137a80c8aef2f2dc2c37b9b244af2ed9c70d2087480263e0700624e3182fa35b7304ac94d1c4db879d4a55ec99c25cf5d37ff8b806847df23a03ea2977efe7ecae61d9af2676b2b724612d527b6e85ad5633068c0834bb4f323bdc7294774b318a50bd84f321d5f6383087e7dd18c77c4069b2c48e06bb8c78e6b54c2a75b76dca016d9dd2c5cf3d62462851b5f77559b769ce7835321d7c5f2de4d07537574add1d10ad59703ec5e13582a4ffafc8df59d006662fa6963a5566b31f3f1764b3a531c07b0e4e7e4f59a83f01e3ec53947427c868f6cbd88a05d8ed7072be2ecf12c2d22e188b128db1e61d122577a8f8b826a2bbcb35040691cafc897bbea06408472751a7c25826302aef4f1cca9f2f6f9b9c6f6efaeffb00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000184a02c2085175246f85d6cc9e5b078fc4e04433bcd5d0a1739dba65d999e0fb34d4762344b5a3f0b5743dd5d30b08e92a9954d36319843d2d5d33388ced94e80c264693faab0ccadec85ddb23ebe7f02c867c57618b60b1ca6d44378de2153ca03931460b943c4b5c8233e0393414e2bf743505130ff4578d896aac4c274341dd13625a406d42f9e485fc8f2d08670c670ad91cc858a970417b242e475ca272019b4985c5920f891454b94d453708c3e255f89550a769d888e1026cda7df49a916a6815e4256e9e2442b029e2fbb2798200d5d5e980c6108572acb3fcf8b57c37aafc2446e23cea95c1b90f54c2f94bdf06550c4a2d2850a8353ae033c0c37684bc89fe0ce50fc199d9ade813d6984e0c5474e08e22dd2319d0eeba1884f67eca7783a06271a7a52b085149e792e950378de1a3a43312cc3c02c14ef318db31367b673f708e4229b1ac18f6d938cae6555b97ab298573c7d668bb18d66187b08c40a0341ef70f4afe4211800caaaf2fc502c05be2a12ccce3b3f05c4273b813dd9fb6a2acb8081d95d9c3f134159671a0ffb26eee05e2d24076eea0bda01156089ccc07e1a545a2815a7fdcfdfa7fc76e467169dbcda4c868abce62e963f62f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009afafa7bf3557b4331d8e1ef7e97b05338b0629735040d64adc94356e33c4d4d455b1b2e8aa047a470230d8feb74dd28c30d9226f5498f60133476fdbe715aa1d5a98d209ed7835971c26c3f4aa1ace3e925b78c05e4330d290cda83225d19b9f2521008b0baba522d7bc5f3ab730b0aadccae66ea9a1d42321de7af7d9c4453bb6c1e5dea47c5ebe22d317ff1a6658bf98f9b9151607c0a88fc5043607d08b983479ad6d349af786495409e0ba1269ab3f123e1288b181bb2a3bf73c5dcb3e315a72cd5994d086011f30411290827a4383d7ef625d7d474868a8b7286c5c0cfe6e19f6717f9d91e9d28c70d5ab1e3ee4a1e767e454ef41949f0e51116794b888d330b3dabc1f6bc08c70a9cd0cc27dfac0350d36124521a440500fe75fe5f53607228cf89cdbf5ecd7d9a297142d6eda351c3d79e893cb01b22507909080e22a7123c06bb0a5ee13116253f8238812e5394abddbf4bd485a882a8e1141d7c0250060c2438b038a73b76a7941061b8903308f21255875b328f94edc3aea324e504de858223af656aa19e1a895f3898a155973b9702744a00336c6eb52fed89ca1fe8530a0a966dcb780f9707e9ffde73ff380f4084afb7348ba3f195c14961c6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027f16bf9f9e2bfdee45a77b308341c4501d5762cba8fd6fb457e8e87245e6a3eaa07a44eec70db5c826a763d224e4e31e5fcac2a9bdee4718796521c7a576b31b651d98bbf356aa31de92c321b055633ccf98129653b243da32c5500caa0f5b76946f789f50cd4309bd89b372dae0447452d6dfccc4930b8b6d24c677c51b9386277af48861fcdb7ed56c41798af5b5040ac8b5bc29606aead2aeab120555be84e0d1f2949c96501115c9e04b2bd432c23376350c54a72bd4f71f23b647c9bae5f7b466306a1801ab83aefb07f342e843e219c9f598588d4775536ed7adf15fcd1384b4c90f519199f325290863169ad858051fb688e1045dc6f2d1ca6c426b32d76419177ad6b41a8410757d7b293ecfac50659d212e1479be16a415f1dcfcce15f14afe0c297b150ae017936c43aee57f9ef5be711fdee7d60acb1d45c36fc10a8ee58cca04a8411b669ca0ab26c25be5608e7a4b2201c782c460f1652fa0bbe1cf006c414dbb79d7b340f474f44be2e6510275cb8affd64c6f9513416fa473e8b68619700cfeff6b7bd7ab55e98c76960a893b6d715cf8edea5675e7c9e8cb62bd7fc5e09b0372d87b9f968aa813c8583dccabfceb2a246a4fb552b0e43ad000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095315d03f27465b9579c2df6eaa00fd8cb90279235cc4e0d244ec34670addcdaf64ebca896489543ca84e0bba2dc9e34e2a9cea085440654d1645331cbd7ee545bfae82d742defb9d9cbd252f2197880aecb11c95b2f927f9eae5fd0f11f4d2010f90829fd97d71292d6d6ddb7861b600ce95bc8adc496f26f47239e7db177f3d5dbc42f4e1af730c98a8c9edd41e88da9c7dce2a08f39131bceb90c67f76d0888fc5bbf371cb660412cd5a937821ff8c422a79b5558c4e734c468531c3eb6777538e2fee5c81802b00c1b15a5f2e5aa264a553351ce9389662f149bce79afb315e5c2dcc11d851e669cb30c05889d27813eb064627e777085c13942e3e3bcb1afdc463e8228b9f63e578c08115a2e4b39d7291e2792a98bc1eb2dc9e31066e568cd9d9f040cc76ad38ae802677777b5a1386e8e6f21eb49a1b5ee92d6bd3ec3ae102a374f1e4cf79c27412402f26cd35bf7870fb3cd212bc5997dfa335fc2b5866547940df78d9405891dff2fa766031074c1aae9b106cfe6bbab982016d6c4e7edbe07dea504f207078a40ec077dd18ff50bd9fce7a7e95ee6eea9bf6343615f3f55695b391b45ede3949df5c7b8abf91bf63c508952f58f947f89f97d39f100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002909e5bcef5169f959368cf611272f690e48b7dac3ae6dc04d13f7b6dba9d259280e5adcb9718d8c23a6b6bc3f4df6a46f2590799e9491a44380f40ab2ae9d4e84ec4cff3bf697d176a9527c6771bdb03afbf8abb5278829cb2760321cde002959a183168ba61d20dcb0c844b787b9f04b8308472a40f56f9022511798bd31538953f96ad490b61d1e17c8d2224e6c85ad81e61eb3fab6a11740074459495098f6d73a7ca69c3d2a22b2ef11d18db3cf1456593a54685a663d7c942ba48895da42117249d3c5b0bcbbcc76d0e8744c6b12d7ed8121536ec226ae20c7d0431a56d781d4b51a3f383c72cbd683c4f3f498df25c44223d6d1ef900ab21c66e7d4cd7989236404db86bacc22bb16c446ca3dbaaa434336731ce4462338d98edc7e6f67b6f5625508f9f946a4891244bd27911c16b917ec810f0877c97fca33a7ba6475d3f5f1cbacd0bd7125b5ee3dedc4a38aa7a3f6fb965d6618b3afa31ce472731ede46d869b8d67d984fe7721fa07d1b626c24fb833fa881e18f9d65b4006b83214d7980399146c78987115ea836403a0292c2790b870e5b50576b74ba05a4c48cb3942e63b37913ef82c0be40cfa12ede800b5e81225440ba70114c586dd5fe000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023dcea4205ab396a32b0f6689e39fc38f8f87cf69cbc033a0afe1ec04a1e2d60a0e89c2e5bd4f0285c0b60ade0d47da62ef6032e4f3ef21eabc490ce32ac4e8d334add1b5f8bbe857cc02964815d319edb72e099aa8ccdd965af59ff28c83cf2c22c6b30560feea53c0cef43010738b7a27a152504b661e1343a4ef2029b0c6ca42f777caf96358f11e97b64b1bcb51b33aefb420886990775916351a731c2cc39a1d716c90c672609c2be3e08404ef0128ed61efa5b02c4390265e15b4e8442da9395abcf551ada861cf1eb4819852c05a1c6ab1eb5d3a3583ca661f3ed4e47d8d805a754241585f434c2203c296c5a6de16ec47ffb3c2ee11375b1cbd10631683b1b409405a4e49e8feac6a5b283c98fd448dce7c114cf91befe51d1c3d6c67e784a4b77fd168e66571b1c072c771066cf0e770a9385f79d0cdcbcd8956e10e78ded6ba83472485d52d72b0fa4a2324b23af1b4373d2381abd99d439804fab36492f634dab415f4372dd1b23e80412e1d369095f1c0826d22d2090d2e28d610d54ed9ed1aeb6725f1361d981756f286702510e97a82a6b96ae306b4f4f78bd8ff727d0f06e1a43f9be46c00cdb0e853a2a8963206cb4eff94c249f99f0aeba0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a39562468df571964b2231e86e3511b80816332335915de40137a788bb57cccfb1cdaca6620ef12ae16e64542ad2c46ab76b943041365ced219bccf5f2e11ca12aa35314efd93131fadbf60ee16f8d71859f5e2e91758603ff557abfe879fd60d53d0eb59acfc07b5a2cba047e008bd75f3093dab127ba8ffb10cf1409eaa903592d96534d16daba6735a0d4b652157562090b4d6abd069960777a509486bb03456f551ae0b5deced077e00fe8deafcdc2b35a95d6e31b098dae27761602b3995c6add13ae136af502fce91441426aacb978dabf0e7250e0772848e15f6a6ae68c595b49950158882fdd22d095593de620259bcf4a34905e25c5c53ae93b68fbc93b947edd637f1c3e6f184564fe262fb24152847f27e44e1cd3175f5be82cde949bc097377463a9742050fa5b207619caf90f4d1bde28542731b2d490d940aa122e7d353c0244d9dc91fbe6d406a0a5e54146a6671cf2233ea5729594970640e4c13b7c0ce6b19524d1e8c056fed2a1020cce70c1b31ef3e2072af677c390ba18c5775b5e6046b591c71afa8413272e93c2ad9a4a8e4ab5a0ebb20351b7441e3d515a0c203d3f306785873acf4a207ea7f7364863ae563b02dd87cb947d2ef400000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48400d7241baf8f5850250410f49b7134980d5adb783930de8500dd9743b99c3128b11dd7073fbfb3d7be183b0e16593b121b42fa0a69a45edba00671941a3b6bc8d2c61ea497d50e9059a9627c13cb9ef955c20b735a4fe55c2837e0f875d65b5fe047050a88a1a5c7bb8faeb483992a1140f1d50244e2c823f840c809fd9f8bd540db5c3fcd6c7823cbf9958ac108ee10ec2652ba5ac78c9aba088a598b2e818460fb2ace26569f2986c5a90b563b89dfd8a8c5132dda812a9f72b394669afc96428ad8629d4f54482ddd0508497e44b8987f04264b5d82d0fc082a86c410f6ed62f8ddbb1e995243f0f994270f4fafaa9502dfd0a64d62638bf36ea9d6f3012ff2bad78c405385ae5b8109c28908569d8e84647ab475ce2e518b867a24f1092400ecd584b44cfd55e3ba4267eb598d655e1d7924a37dd32495c9e45516511ed851b5dfa091491d242623f5b991e351b2b8912b0f3240370ee7fc55f73cf5737600ba96dc79f4c48fa353a02ce31d9d9de4c461a2e10e681c8797d1809fb92b48c13d03390bb0ce89268dfb8847d403b92333243636cceb9ce114622a57f00b96b0fcae01b827782fda4c9bccd435f0fe73f16ee2cb7a1b18e558aff7d91b4791a03685143e35fcf854a0328e5a25cf88058f4b2083fe98bd331473b4dc51b254c1a1997988b219acdff99672a9bf0757daa8053d60f5ba47c9b4cd85b7145cc2c2ba793526fafe2fdd7ab55cae297b8b3b1bd54b478468af933e4677ce99ad58d00b07b46142548f90f895573cc137c654e96cbf094623917d6314d2f1e9a0bed25759df30bf373edaca20c0d21441b519b6774cfad260fe98c6cf4212e5be4a80bd1857b0d93ed57b64270253f48441e6b81d0279c04c73438a7849088ef37e529c1f1aa1c9777fdedd81f2178e06ba49c17bd6e3c75557c6330812975cfce2322ddbc3983fb7abb1ae9ec6493415b37e8d9f28b444d5f0a83f0bd88843770832832f04318111a3b55763940a3488e38bde4adee1565ddc410b961bb2b8a72500127d0bd8e9294baee5d4df8b8cfcb558ab2d88369a35f098a461ba05c788f02150006d673ad539c16ecad55d6dcbd5f5de2f01a00b68c9a7fc837a3f4aa7ea22f60904ee7ba868fab64b45c2817af0ba402572e04d442652c80d0b9d247049d1369e99777d581891887312b52685f2c90202fa9f934506e2aca43e589a26f3220807685a6e20174cfa265678431202ccd35f023b743d125db6724b39b8670cd2890e24813394fc1e3552cbed5e6f822119577dc460408991406cf01782217340248fbc69854f83d58ef2229b636d9204fb3ff479dce7f16b10f453917070e3a25b27f1987e47feeb24f495e7910a0d1659f274ce8edecc4fe9e99514ad6d246251bef7dd2738a22e25c30882314f3db32f1bf6c07f606f14ac7f3cb03e4fb891a1989d485e14f25de944d58bd8bcccd47372d49f6b498cb6ad82059df90611c0ae56da59baa6e4a21e658fbe8dfdfe906166abb15303f0e6c4c438ff8e7f4ee1c7f70c1718bd0610e84aabc6c4363dbca104c920d73c0e62797a3672856c94406da357670f16e417031c953251102b96d8bc25a331ad7b3582afe8ca5b1898416e6b1e1949f328f942821f9b89f64728acb8abf4a04f855cdffaab9e1245a7c0e38bba05bc961dc67d6f3dc7b299650e16c6f48c365110124471e116e8ffbc21b4ea262ce0ddcf5d93e87216a676bb0e44abd11e41d391549e543e19b7259b42da083aa2732b65da87f8a32fc28c8b4e17cfb7271cda91df82730acd702aff00d4061613333252f637cb609e2c34888ca86e0c622dd5f6bba3eaa4c057965792d7b04727ab2f71cc76c621ee7b8ccea88c252140fa06e9c80960a4494871251107aa1d7458388a8e0b3a1b2862dc9ac43e176bf0b7692a518cde17b8e4d3d6528c0e058ae18b4e6e78a35b05b017f6245cae0013c253b9a07362ac0509d618917fe782b252ee8fc36e9d65348f9b847c2a5e02839afe6b3ca2e4a8e64b1395901beba68278ee743b98fd0a36e584cd5cf1b977783aeadf49b67f22f6f3f78432e20d9ce4724e774055f7392a1d886e249b0c49b9860432c028976b40c89389d1327c17c953fcf1d41c0035571e506c2722f34327a04886c6028e8bdb6576e322ac63490cc6f03e16e37cb82f379886740813061643c3b1d161aeea2f766f3a429d99942888a2b73c6857b652491766c39c26092a9f00b7e987b8da325d8b9c822fbe5d484b3547394e2744897dabb5cad394fc0fc248b059ac2704a8e1cecc11f0bdfb45496dade8670a6a389321bbf05a38b75d3234d66ff74b46344e784e509eea0449d22f600efe77635fe441eef7eab9159138838a9e8279bd7a88d5ac7256207700d6a35f43e2cbc85ea6e523a853690023a7000e40b789c57ef9fdba5002c9fb176fb682aec8cf5e5afaed44e7f7e21c410db392ef7e78ca46ebb8b7914a8890107d9e27e52af1a8e3afdba6b65773594e4232e0a62c068680c672d8a04110bf23e7ff5314f8742a27e207c746e17812a20b7d4646dcc8e9909909f8a1c8d5a406897d64bbea5e4c3766567ccdc67f0f9905e8f3d984ff3607c7d8e3b0d41dfa5ad7b306ebf43cc503ae79d1b8b96d965b11641b1c2786bd414a01fab2bbcc68ac8b3fd61f3da9e16c1eea5f2efd8222dd416f04c107bc4e05b6fb236153a57ef6163298951c61916c03b6571e89c656268f67fe7730e8cc9342f4ed108eb66c213f73bbf930e840d51fb078e0e6090c49639033aa93826be7d2209530481cc6c7fdbb9c9c36c55823319ac152682651c52871d051d9c4e2c508684220e339acd36d567af83cd6679207904bcc72648a5e31089b6d5a66cc56e3389db4023a5d2edd910051b6552c1a0dbef1b4d5a9f5f7da8e45ed1b88b88ad7e1ec29d02e4c0f1d7956cfecc5f05fdbe1224d66f3af811015ed49a44dfc6b1330ddb7d035d1d87abab4ea2afb5ee55fd787715bb739ecc82303bfe66f69be2e5c2378819308b62dbda26229da2624f07ff701c7906a73a1679d2ad1aa56ecfd091a2952bf65added1eabc6724df3fcffc61cce6558778d631145ed47e6879d3d9782442fbb5c27823708e26f28e038b16ad99b0bbd4c1a6fd77b8e8b637c1f1f5eebdf1d63396deece60fa98a3ab5cf91ec04f1b230a5f62ddd08570418dd549eed0cf019ccfa28ef50f18ecb29af1c34979b5b48d885a7387cd9db03e2d7308f125e825822009fb7e569435caed82baa60fe8d3425a0336170ee7bd656926bb9f778d0c2ca9ad20bbd8d052ed97cba56762ec6aa717a786b6a6efb157450d85142a8d3011a4cbe45a5d86b6b8a369ea31e5e00620c11a8b7fa18f322557b817b329662a4449a9ce36d336f88b97adafc91e140967c58be2283b0303805edce3fdc8e008e41065891d244fb6d6ba2e3b6a18e6e58c865e9060f57e0bea9849803caeb12e6328bc0d4681d01452bed37827370f83c55e46b28e8847807305af72193bf729359964b8c7cf51093ede15e33dbabb0e35730c9021127c28821d0c607c03c711576bc86a10ef8380b5095748a2677bd8fdcf11ea44c07a15c613a9f6c0726b069c35684c8f2d81f30f96077bb1582ec25b7cc770369767b59cbe40fb8953392ac7e8c2cafc5b62edfd8df013f78eb1c3bdfcecf37946ce7fa62e61a668a6d90cb7a23d6f698a09dcec1ecdd48de28e6e2ff55910a9db7796ba060e04e626a126feae1cdaf821c50b3499ad0a2b4ebfd07ca21a9ac28d1119c9de30f27ade4b07b819616d285c37cf734036820cd065c78944786f63278f9aeaebfc6b4afeee0800823fc419effb9240af9b779b080e32171f0524cdf9f9ef4287388ffacf35219dfc130027181dbd1521087029b4ed3ddcd5290570e47dcb1cbb33d9e223152944a60eea50f10390f72581e821db94e9971a01074161bbd7e3b6823ffe825a139d302c105d738d0341f72b5290bbb59ddbcaa39a3b6e5fb9c5409c0ba2195d19c525df7455dc89adfbd75ba589b6709c375d768b17f128d7c4e6fcce56a7160167c181de9cafaeecf47480f086bfb797b982a50fc3047d45cc4fa1cd47a19c283d99e34f7bd8f62baf577067836c994bfd59d96570e219b905bf2a016ddfa818a703938c5238e431998d2d7820607fa7ebfef78bc118537aaeadc7987fa8b51f7f0c068a560506ef8857dc3a0fda159a26966bd0518db5a7078f28ebbefc38182af94c9c4cfdd6bc08df6ac11500c21e7c1a0106ea5f0a58b0985db5c239cf08ae6db0d9256e1afffa959154e583cb008bc57be190181d5d3a9722373f32922f2a0b7990ce8c75f0760871e585c7992098aad751dc66e092609a7c5259f6f70510624687dd6a489d9f4bdaa32a6a8df49a55361277280e25e8a85d497f85ac21e726126ca7bc8caa3e43041f8bf6b4040fe118e7a0cc643debd1b59be37a4d03edae85a6ebffe4dac9d2ae3248b1cdcb74401a65e5392922ad41dac8e207f5073c13fa1faf94229e23342a1ce9e74283c14da1e72164a0a1b010da7cb962640eaacece728f3f55f77ce28030832b7f5e6baea113218600c32db09a02b5c74619f3adab47762d7f967a3dd94f15aa99a2c25294cfec114572912423f5c1145717ca3ddac1882e50760296850125c08f5ae3d275a6b4db94053d3b186e1ee6bb0aa30e48a9860545c70bc342fbf57d8829e881799d4b84f53eee1fada182651220b2d494e6edff3a745a98ef045e06ce2aba4275453a8e6d34d8e148285c19020e58ba6e6d661ff9e79df167806f841c7724d604297dd0e3036f171a3c24f9222abd17284986f1af561430b924f9a5a07c36870e8543dcf4c5f76fe6c7da1db41437606baf8add4249566f1687dd1163949964da012ae5c9a59083bde2b54efc1382c95113211a672c3b0b1211929a514cef6d2b7489a560c5d33ff3452169d21e394e8b36b9130fb9c068587c2c28d8535c555e6d5e82656b95e47d4b88490607f077adc63018b3a16cfa32a8b37d456f7c8a899582c6825f36eadad90607e11c60d6e439440d4514f9cbbf0867c813e62d35dc65201a84dfd04472ffc7940f0f0a86f2372a6cefe59b514398e157b150812312be04d80e8f2d93beebda017503d0662e807bb86924eefe4b5e04ed3f9f6af10c51eab85633bb4e15eeb78966257debbb0fb82ce96e37cb2a51e565911e340fd21c68781c7d532ed2d3660d9f2bb8a0f1d1094ecc1f4a0e5a9a8b38a0b560eb09ba92f43b8f637155025ea0d60b348d00bf07d508a096249765e3d872eeb2e43973160f877bd74604036d1d5f2b28b8b1b11aee3641e15582dbf377dd965ec10a6da4d6881fd853f11326af5e105ac1785efcf81aeab185a2e9e713716fb24739860ce0048fcd7d773533696f26f4e7ea8b8eb49784fa5b038f7dc04725c78b2ae468594c6b295c042d5c60cd2014cd1e710f753902a5aa94eb6b5f383a7512e9b1ac8aa50f51d65132be98fe2ec2831b9323e5aa84b69ff32b62817674e19ad5edf7ad518dd9eaff55a80add15de065e5b33cd5ccbe822dd68cfdaab64a64722dc24012d7629e4f45ba93ebb1c067ee8119a1164754092b84509218719b91eb6578d0f1d251f85946e5f445d1376fe05f59d731ed39c4d55280f01d5ba6ef82c81872e51ae2b62e1604a7a0c13daf25613a29582b8b87ffe12dd5956c9a6794efae32eb2cc79f2c54c00af911182e68af179b31f44c0c98212c89326139e2af03adb662bd0e2d7ad71315658003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000036118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000360d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000360a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000360b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000003629a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000036141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000003625e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000003612978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000362daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000036189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000361159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000003605ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000003605c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000003614d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000003603db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000362ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000361213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000361ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000003614fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000362b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000036305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000036280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000036223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000003617a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000003608858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000362618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000360f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000360e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000036172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000360b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000003605bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000036137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000362e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000362297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000362608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000003618373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000360422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000036204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000360afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000361998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000003628d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000361da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000003621d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000360ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000360e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000036107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000362f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000003609726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000003624f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000003603c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000361fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000036205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000003625110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000036283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000003621cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000036094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000360c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000361f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000362421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000361fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000361bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000036304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000003600000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1b00b25b285ef9824f25d0c6f21d50d9feb23f264097c5174c8de7682f23c872bd87df9477516c9aed4cffca1efcd971b60dd4d2826494f8ddf094a0cd2cf77b6ca245cd98049b4193bc171c00e9c9693c83c1799e91468b22383daf80e7fb1e2975653be4c06a41ac2c17a394f934e4442381bb3ea640803627eb6336757b2816216e4f4633b455f47440f5223697da7e5a8c579d65f0af1b58a2905438b7c6d3ff777fab977381e8f59a7ce2b7a404719fbae91b26892119d263f1a85381839de678e5cfca26c650c32f15ee1777ec7b9fa6ad0b1fb41ef646beae139390c9f0ac36b267453a33e76ada6d46f5d775d0ca0fddb6ae49a8a132eaed75a5bfbd6e4825a0f7e3ca5a5b308350cf6f6b57c8e8c0ff57b845031f2fa42ab46964ec0e471d61f58207e0942674b63ae0adcc1a6635b1d9c0be2a833b16ab4006d934cc4a276ee1d416da1c17855a0d0700a335044a734ce941a69ebeb5998405e5b14389f9a034ed02dd4b5efc6224e1e0f0d9856057b103d5e0f038ba001888738b1a4bf7c08bdc96b4d71454441d2d0adc7e96e681cdf8b0ea7433064f080fd9c5f9ed0e8e1afd54ed7a859c373bdf95eb821b564e6fade5eb65d29636d56dbf7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026e0c4981f645114326f6988a86281bf9154afcc96d8146e3a6d577d6a4e7f0a39b4cee7506d8aa372f57c4c7b07d24ea550d2cbb032ed8ab5aa8aba8d99dce9a686dffa51406ba9fdf640ec02901bcf1d4feb23e8245cb0b55bcf209152e788dd6e7095ae22336ab2831afc976f4f4494180e10a2d369dfcf0eed9d6ded7d00b27dc00ceb7887765a7a2cf7c52ec95f0fff98c8c7923a07e4aada88a7bec8f2b27f49c5787ced00faad10fb3ad037038b05a6774c4d11d4cc9708f19ae51644b9662fe237ca4d690bb575473d502879b7e67e4b0a81bdc2d08ca8866ea1a7f3674922890eadb0db97efafcbdcf98da119585adc9232dbe1712ba2d544fb55eabc6624462c53a460d2024aa26f5106e5b2d6e0e57b9a643235a863e09d090a49b0069fd726003d1ab66965230dfc4d8b25b4e08140501b0c1c447162605cb69a74cbf9a1e29161d13c638d3cf4430fbc56586247b4c1e833f1af6a1c08fbb69ff208f0e815fed494de8df0b1c35b7274112a6ff688ba66d30dd02e88a6513d4c44e057d0de84246eb3307ac45e00859b5371d877681e93a0764dc0107e21efcfcda81a46125cdff5461c8809e37efa9d52492dbeccae06682a19af67112641be00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b1e9a3a125694e40d32c98f04687fc3ac743b9e024e2dac5ea0e49d6a9299119fab5372e5aba84f9c076ec032ab2c63759b507695de769a6bc20a8712402b401898468e784b9b62d629bcb095fa03dfb227758d3eef843c6c3001d4e8948508852921f0e073e2eb31676dd330ea106fc35443c67ac2b2970b9467cd21b70491ac148fb509d91ac5e07a4a3f2f0b4c9db6db496e63b406877e9110b94ff83eddc92f576f0880942e553d36c7a8d992326a20f84f1446bbe6b82f17689a113b492ba11a14d8728622dd28c1e1ed93dc41f66cf7da7f6673dc8bcee2275f2061f7974b06d3d478903d9ff1a4ba7fc9adbbe1c9d8a8068d141e4e044bf2927c1c74575fe1146311bdd840db31f2cbed57b6d967fcdca69879858ec7e7eca78bdcb2993ba6aee6e7fd3c2824f08acf2bee09630ac602d91be108f5e22e0afdaf3acf9283bf1504b51945caaa54e21acd8179bd502e683b2aa9c8cc185047c3cdf054a6cb9cb73682f6b9c03a8f9590bdc6224c9170aafdbc067ac14ede666a1b9143dd7e012d8a5c1efab112da8ff233be7ca1e6a245a3c34835f1be39540fa02877b1aa1a2b2a6b40b72b0fbf6bd4ea60e80a9c25011ee5dc45969ef262df55afe50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000954e146d3ed74b8361b2194c583f47bff8d6a20627ba120302115432760409b450240c5c2bd9ec2e0127288062adbf84ee09ea999fd75754a320c9557c2ee9c8882d99fcbd8ac36db275a9b35921c3c3ed6263abdf902569fcb40461ccc9486f575921956821663b6916669659ddaf30c54eb326cc2229877f6390a20781764b7ef00d7e1ae0edad085ccc49befe0e04ca03f2f11702a75cc7f135aebbbf8892e2195327f421ff8bb970768ca824891c5a52c431533b5436b064ba3abd5d901bb256185e25c9dbebb913664b557174692aeea689863f9d6118d33d043359752f5ebc0b431a76a51db16c8a67dfd5a0e88c67b697750d6e61279c0da7b68b43e3f598ba764130b29e737167880ad74dda9c1bccc997b71009ca00ff66d85d2993f68429ec06ba5a4c5a741012c93de6b69707d15921d091f751f1da6240346525aefda084ae4dd12eed87845b037af3820e8976d3423bbd5afdd397142a7bfe2dc23f2702629c4e317192eec5102dbd179c37068710b2e1a58e049f715744c8396fc5bc1ff1c8931cd8f89b06a518c03579dd988cb652477aa9c8aa18e2013c10784c99c1834e03d989b9c7a53358d7cc7ccd10d426005d07864fa270bfd489450000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae912a01829ad001e0d99d10b25fdd06ce748689a6b74cabb08be0e52d0b9f879a7f2a0809007bb8d6b7c3660b4a20f308b837b5dfd64d4b74b35c1a373dac34c52e05fa1e6dcad2a90553355cba8424df761cd60a0308a7c8baf6ad0f8c0980270a468cd35dbe410a4fc4a4182d577ff8485ac91149d4287241c62d6afdb39e1e27fee0ebe7a2945cd77470bbb8707abede9425e271e511e02ae8380b35936087c1dda28acc2b73e3befff671f99bde9729e8000c7ad602c39a0c30a5a9d86a77ab22b68f2b4a9176e8351beeeb3fc3d493d8d52f4e2531b7af32328afa8d3a8678f571a0f173aefdb50b7b727d24fc0960133ebd830b9dedef6ba6db407f04a39005d75d66b319909e04376510dd7b1e582d2f13c09646128c7389008ad343ecc07012f3f7a05a248cc77197ae4f64266fbeb6f159a4335de2e36d266df673416dc16e245defb9fccf396ad765b125f12751599b6bf61112d4e6e5db4a22e2bd00e7442e0179f435be36a81ade7935222d3cec1b6f6b2a0cf77bfb840471a5d45f1750b4178cbc8c449539830be66c439fe0346010d7b1a1082b07fc4c6cbd2e19f3cd686a9d137bc8a84ce711e0ddb9766169ff09e52d5d8a96a39991827900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ab73958728bf9fbc3dd1d9df42584c00c1eec02fa59e201e27ce8c29050a9eb5a0f1872781995eea109934c6276f33983aaf2d788f1dfc124b7425bb173c880c47690cb8a7e52bfbc8c9f1b2f0a95f83058e26331b97911b1975ea4720253880b4e3f408c9830198360e02b0074fb2575a0db58aee64c98a2e763cae54139b262684dfc48c73261d585273dfe1119aa9535c7b69406ef9b204a70ce85aa9d2cbe0b73e4f2c0964e707c0a6c23736d72cae864389a3ccae89f7f755a978e6b6a8a8a3dcf68c96e0c9dc28f5d9cb851ec135f14249233bbaef747d6e2e5fe97106ab709f5d9af3a50f4e1f78232b6cf9b6c49b8b652678b9903c401e74fdd866f29a088ce17225295d9968b971b28a9e7e9ef5dad300e7f8d0dc128121575bb95b87ef0ebb8284aa0341d57cced5fdfb1eccb613194ec4d2cbf6cdb7ab9e1923addf966c7fbc7890cca5903f813d7ec0227b01c59ca55d5971fedd4903f14e5146a72cfde15f0584ef906320241cda9aedf0aad72691a8af890d659b4f81e458c282c07dd1aa705a5672ac60402a5aba81fbb8f6ef228d62becd32af07f3a86fca60680b003217d6b16c3459d0f60b6dc8b9e69ab3e63d8b8eb4100fb85177a290000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a043880e0d059ae444495dd105e62ac677007d863064e1c139792d700ad07fe8ff6f54f883b4f1e701c2f06fc286b0007030e8acc78e1be2270a9503dfcd39a041caf88286f06cf380851aff6f184db98eb49d9e24e8afa5949fb7f6bd22588a6f72c77d3bd290f7c403c4adffb9dea8cdf50faf02f0d113437d4d8130a690b9e239cea0685aa0f13e213facb2376a25274c6517ecb9d8cd8baa60ba3fe3082762f26a2587edb9f4ac05a05517e2b3e83e38a02f65e4bfe5d52b649939cf83c36614884cc4df399e88f929a6f0ecefd3ce21d492617b8013b59748c388dbfbac14edfe52cbe3f06ecd89fecb56377af5ad16c7291fd808e53cd2d84bee344468ac9cde79c20f0d5a38a9f3aadbefc727caff999c37ae06da4186207bf09ced3dc052585af707afc7bb0d02425ac6593ea2cbae4fb937314420cb0a27708b3c53ff43de2dc81eae2f6da1b53fd3f58f872847eb92a21ef380aaf9dbaf344da814a70f4892eab4de5232f315826c9816028ca9a911847865c5d26d80bc1ce1a6e163f0143db780cc4f80ad0368156dc2857cc095cee95f2083df7e4270a87ed424cfa0669a29897924c266bdc73933ff8839f964eb0d84419f5002e86d939b16620000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a127215f76f7fa0a9d5434b14fdc57e840a96c081edad00ea406572b426bc21ca3dbf06323daa6cfede3ceeb7089a5e2ac0d4df965b44bdedcd2a2e094cf6c4a6cd9b34cb788f35688b80f25ec9b81568ddcf26300fd88b8488b01ec3bd38768ee59fc473dce59a50aa7ced5ed58cfc69fca830833834eab1478da8a72491891bb17cbe85cb01b5d68044c2249a4be664ee87a24fb9d7fc8205363ede85d43e27e38f41a7626214a7523bda522db7ae49273e25db8c8366ed4483736b46cd1a259ecf9958a85feef89c9e88439a0d274a39e228e96e2671799f339c8b6fb0ddec56decdc13d528dbb4bf7cbfb053d853aa3116ba0064547c0f0099566b3eefd23c0734ac95851aacc2f19df1b91a61be6847faf2c9f7b47b65c8958b17770bdc259be7193b01de9a3dad3349fe8d5f4041593df2afd34772734e437998bc2893008c89a1395c9e63d0dec4d280eaa4b6bc81f9b9e567812d97deae90fbadceac36b8a4801a345ce392c3461c4a1427d56808c528721e016f9402708ca6abc620946aa7360d82c14e214e55dd5043e78820a18f74e2308ae35fc00144098be9c5b00c136ddf37a398b416d70912518330234840f3d0b4692bc44da6a44c27660d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cc6d0a6c26381568c6e18df6720ca4f2b6a7ae7cfdb20a788f713237bc5d4281cabd0b4076abeaec5ea8d06bb61be8d5a0503f500432e2227361ad31cdc1e4fb0e7f501b5899bcbf54829c632210b03ce0d09ae0e83fe175fed52f7ba0b4e2b5a435acfc1d32b1945933f2f32b0e4ecf041ae49171a4c62e334e931374f17baaf630b20b2cefc4250163f8b217c6a7cf1ff3c1eb72503e1ea39c2f9d81ef3b734a7afbb7f0d61dab553d4bfd56afd649f20b6b6bd81e18b93bb381acff90d4fd8a62d1c7787a2f9dccd8b52cb8069e73da85a8ce8ba1e5c737fd4f7abc1cd9c15e308309b1f4788e13435cca025e288e4a4a24b0a72c0690f86ee5990d14e77102ba4b22e7e0070d719b54945bf3046e8b59425e3a0a9edc643c600f866030532ffe0b67127734e85491a6313bb711ff5bd07cfbefb68cc820ab86c37cf7fa3a72cc5d77858c4d4a88addc14f92d8df2bb6997468ab73fc5eb0b4c453510cfb3a6b6030100bd2efc000b427ca9577ba1fe79c6ea7a36c76f875d2491b4ee13f13a39e510567bb6d4f0df93a9356d59fda50d71a3806d6a2a7fa4fb0c3ad5ae8c31c7e6fcd23c260b79afef67e7727b9a90cc6e521f678a25ce4dad01c301c9c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000276cb3be7611127baba906e2993d4073c4987926283b72d4d69629a1da0483bc0ddf12454062efbf72b31ae027bdab2d8eca72cae9adc93e313d3c91ff63c51c370d09ef3ecea295b299bd119ac20668158a845e25b257e396155e8580d2154d191d20aaddbf7d0b05e61de8be5a1099a08e7573b641b3ca975a5c9685d50ddf8f09ef45d38b367ad22128447493db0ffab697abe05e06c93695c67010057f271fa7457cea0aaa733b92100a904ebd3f16cf2b2df65c0b4b044917199a398c6cadf15e579e08432beedf0489b02d050078fe3afcc489d94e6dccb6ea3e311f70b602fd2d8554e5002ff09ae947dd111b30c5ef95c378f9811a1452d7c38c1be4841481dde04f2e1684724ef057b02f2c1c252a86eb7c09ee841bbd229e8d9a80cb7a5b0376c3de498627cbc25e490969501d67779f9b91ae1bb1cff94c663542c584e07057e275a108e66f32eedf04a992e0decf36d1836b277f2ab03d6a7abae3964c4a58ccda7da8e6d990855b08615b761597ccb6be8d18e7fff4df9c02ce47114d28bda2f35bf796e7aa4b2e4e397d5ce62d7485dea74829fdf511f7feb84e1afe279f3153dcae907a33681d0e7b713fb30baea5400e2445a82bdd4f86a400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002db061b05785f3e1be76f059e0c06f6f3a5d598458142c4a142f33707176b7a6e586af0d4f044c4f04fda3c72fa825a46a8e42075da7ecef2171ac9992bc7ab68c7a7309591814de341b2039e6ba51dd21837a6229b3ce227d7398f6d72d07f6bc28cae3e308de39d9e52067f09700325d45741c542684690234ee70e98d7cd0c9874d714ae29a43af1c447ecf02b2c56eb4e4ddb92340cee79111aeb6e5dd14b6f3da4beee01e6aef22576f8590826410784794b0384bbb29e90f4ad7b807470e4a93b78f155358c75942e338e303bc944e30054369a7ef79ad8dfbdea386ab0a9b57bbbbf057d2406c8a6e2b25382777499355d3714b6a39b36e9d4120b99e177fd5aca4a7c5dc9d0657c9c16fffde3cf55eece0f14dfccdedb79e0b109126c7e19dfec8d481e709af605ce9c4d751e7a53e15c80fac4cbb96a758540ad0d63e2bb5e8fee7adcc3e257e3b81afbf6127211abdff3c3f8875f75b72423f1236fce1f4ba0674b1753ad2c2628380e14d03ceea03f8c256264e34f7730be88434bc617cde59f449f74e85ce4b4bb5ddaaa14838d0cfb8d318b0734568413233c985bc19aade2a8c3ddcf0ea0b6905e6886c4cc235fb0fc9bd915fa52b8e465ef30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a29bd8c0731e9b2549c03613e24e48ba7d376c9e147bc91c940e0977c9614ca134771ec568062b38a73acca0cd114516c7e219e3d6089f513b613a567686b57b26540ba94172a9dd298dad43b6a271bfcd4bbfafa974e97d9fe46c770890b3ee612057e20eefedd32f6c579599e6e9b6f2c9695e3419b788d8f6c00e3240a1cb802f8939eef1f09d4069e34d85b8ce9c82fb0114fd0bb87a4cae6c99fe0cab952bd47fdd82c864f4c94f1e481250161d9871ca8dde3f5a6fb2825b7662c6b6ec7681160b17479e6e44985e2b8a781114965f0be08b55b63496447ca29d3d830d4f6cb1927fa5b049d14e2d9765effa4f63bf2ac14bc4ae2d8fb613f91cf52f3c30a9c0e8208d4e1a1fca4053c5ebea455a885dda570773b69fa699add2a727d3ff46bc4ea96638894199756f620a1f5f9a12d408f70d70174536e868c41ecd4eee105a8a44703ae7f89b07be7ae24d8ec1aa8c91180c25bfc42fd1793041e3550d432694efaa756e91e8237bf80594479d61edb3812c06281288607516eeae1b964b7d615bde913b3ef12aaf215ac4df809d9924b4b8d83a96e0eb5dff807e4d89b5668aa2867a74b4bba19d21a81f214fdf6b2428986e42cc5641fd379be69e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002727f65fc0307134bb21295b9cdf2894fd1fc81ed2f0b556d42c1eb3de4f70142ee07cb19606914fa72a3b828b681c642a91508686c0d6e2444afcc5efdf147e42b8b8044a58427d39ba663cc9f32ffd2b8abedefa2202baf301ec8208db3c96270e79990397a003eb11ba0d5ec9a3051c5dd1d27a521bc24d0988ac0402463473702ab8d6f7b6bad1c6c379eb932cb57162511f7f4aaa494796af51b64ab702ac6087bc870ae28e8793b843f284ebb2718e29c93dc8ae00a31434aa6b2eb7d1603775396d27fec430be87831aa9963975f2581c2e3112212ddfa1fc83c250b21d172a3fb893ebb514a3ef868a17b5dad59004ac99a99de5d46fb234c02a7d531aad588d5e6fcdc215fc8c48cc97445ed48c60f8e57a4e3662544ff57eca61dd20616a72e02616559f8a309151bcf87dcb6b34cde9c22d3cff5c46d1ece9d406b97837b7b7491a557b7454c8f97c701c408c0f81edd80967a6dc3d38de09c95028c869b6b23bd3c95576113ad4be9d8f7ebe63a3a3ea3f78d921602220f363fb8e63aaf25ed29aa7fbe612ca4c38943df4c7c12e382c65a7ac34652047a3e7377b63c51e20bbf0c216407602168bcd3da517667e7514fccf48239eaeb7fa72cb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026b513f8861e746999250711fe93c65399b00018b6969a4587186c62bbf82160fe42c78f499798ab62e186ff1656663a2fe96123bf8ce608cee77d50b37a0d98600daff8d84f2d32542a5844e75827e3c5e3174151b78dfaf8a9e23727439e7480735c048da7b96d072de197d20b5d428a35073c4f6696c644151b5063505189392a1004326344a15f2a1985293799f7b770532c345ba541631496869addd2ebaf6fe4636c3e5d099f2f0af5d6e2abd227f1d08e179758d988d28c61053181ba1bbfb53b3c5a8b498e7667a787182804a7911b2039e90ce1d1184c1d3721ed20ce79a6b98506586e7b102ac71bcedf324c52b4126f636295ccbd6c14c40cd2257f46e9210152c81d662e6106ee4aeaf9c63d3c1547af4952ed33fa896064e22b2a76ab3673afed5b778cb6ff9627e46d6764be74465445d4c813c0bec163c8d2c350502846e78f4c101b358f1385e0fd4ed0e1af500a864cdff2f96c88e8b4f06ea0a0075c654bf279089bec6b695088361d7804f7f8bf1fccaaeed9331fa672c84294abe35885a0abc62c2e80c7dba3e288172ca6cb88b8fc4af0879e23658d5fbfe49cd69930f1dc75fb6a2dddd1b7ea1eeabd1f6840c68423da8ea38c691a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c972250563866f1b854eaec85027a808d1696abb195e47ea903ff9c1bab86f4f07d6fd09357c85fd3cbd0bf8471f760e578f316c3b771baca0caf57f4e0563b4cd861638c3587a142ee9c3c56a2e6237908956b5ced44244d9dff3d90c50671d8345f5f5e72070dd7b32f8d82a60e195ca55119ba8e71e5af2d4a7232125e65058f1b9688307e781a9a49e812bfec7a2dea6b52675348ed65643d7339b4f2be9f9340d51852182157872051c89e94b9b7693e424694cc08a138b3d7053f9104f9444c806a3d1756259f6b7107d2c9e77360abdc7379f2651edda4cf558eb47009966fab4b2ed2ada6511138a9110db1015005192e0a9f65c45aeb4e0add6f8cdd0adad2b88d9429ee891875fd240edfef4d6a03c74b0b3f1562b4ec31820b3a4e71bbcef88faca66c2010b712a328234d9eaeec269664a50f0489d3e25f5736d63f8bd0fc01bdea42f89970d999d0ff063046a9e7f7aa8bdd399d50b6c10219656bf8594354c2c90c4ec24667060b8ea61e9fa7dca8e937f810c2703e193949346c5983dccbcd4e428316af3f74e6f1102343b12e2dc54dd84ec989099269c7e2fd10b9442067cd32100fe00ec1b203852a39b38bc7d00c02049c6ac57136b50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081180f1212293c74fdd3ad03ff95783b56a4f27c1b18a87bcb706c61cb2c20a3251d1e4c9779b242cbfa23f5c7c2a747c388e1d897fc6f7d4fb442f7e6cdb29d6428c511005108d1af7f3b7f02f33bc6aa8cb823e93161f012d5fe206d5524d01b509818d61abc8b434874f3a8bcec475803a04412a9c48bfdf74578af3d676d45010379bf62a1b61bd2f1346a73f52b3f1654ca6aefd8bcbd727e7c152203709b7ba0d79023a0ea680585424f0133a29365b52a1a9eebd053db647d2c80994305b42a002a4c4c1bb503be91389fb11fce10bffd19b2deb755a99ceb72ec969ceed890f910eef7314669713e7db5e5c1f399ff31bbc6d0c354f1127c499f6a05c101c13bda5580066d197a9c0850b235e574d307c2b2d970cb31ebe745ee8f8a42982800761c56655a706c5e288339af8976909929875eb8b6675676d5fdd1ad206c941961bd905f53a9d125ae3619b54f866b243a73511fdb9d64d6a679e16dad1f2ad800dc7796db78f060e6eaa8d9994f9f3c32f7ce8e841ec8f008025fd6b3b97d2159290d593868de342c8dd2264620f78aa43aab6128ecc32b00b3862fe3b3f0107e42150a3ee8c3263e2c2b78a0b1260a2ff39d1951572e97cdda54100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d76b8169a8d2a6c667a7dabdd2742020d20fba554baced653ce4e3039f3875d066df10b19a5883ce3c0ed02f7d0ae14db817f0c19a18f254933baadb105ab7071e98d2d93c6ff5de20d1c1643416d5be6c556ce9155ae6a50bc1b1d928e40e846c6feb160e67d36f394ad3ad74d6ba333e696e412087af7163411ddf50858b5e74a849a6b26d3f97f4737ac58e9eb79046d9fe6e244ec8ad7ff6e72dcdf1bacfdc9273a721162f2f319d64d030de644e337065e07dd49c8ca7fca3c9e94305fd9b8d920b892bc02347e390a6b13a1094a7791eef04a066671c0aabf35860f978f839aee1c4f374eef4f6ec4bb4511f59c6c9a7e940fd956bf1d3d932813b2ee0fecad8a298cd691e2121ba9cf7d04d87d0d5819b8c83057fac0f169eee9624bf276f1ea1b06e887cded5c17971efab290cc9e048e19479849e3c9ea744518862fb740383f72d8404f695f13a3e569fde6f980b824782e568133ad0bd20d388a0ed05c097f31b28b41847a415d1caa0eae8f254881d4d146d4c40cfe8c5c85a0d0cb4c966f38d39b4c2174b3a2763b443b186c6c410bcf987e170fa65269d274024f2781b738d63a5baee2211d9b82a425e8ba788064acb183be86fd7c91cda7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030397985d5cfe2400b7ad3b7612c9035daaf29381dac23aafbd59604fc35597e38cba3f13dc053f652cef10127f6320662529ca3c5bed7f143aa305ccb4462b42ec57b439d995606f9609550ecabe8c47eb374a79203eca7a79183e0af6ce1d2a122cc8d8c2f6e5b42747e4945af6774a5718828f26908bdc5f978960590335ac856b2358f2b47260929e77911f93b71d549c237bfbd5cc5af36e65ff9d7af1b7540fb31c1caeef394dce70da133d8ce0e193f03c91bff9fb79ead464a678f919d84e952fe61458cb36e031cbd1a33b2051dfbec56b33636574b6fbfe950377890b519bc75aa4ae377c1fe158a33f17eeb7a0c5e37858b386dde5eb5064041e9158083c06f2a1c0ceb8e24ff69c55336b9ae2b181b25c587ef21ce82d4b1307c2ba4bcbb197cabd7674dfbe948856974cc2b6c2750e29b7d07483588eec966f6ddcf7bff51e71b34177a24ed82911a6700fa2726042b1718dd69a1aaaeb02bef91649e8e2c66036fd79a3638ac8bd182804b330ce7d964e5d24adbf702a3405c1f5b04f88dfe1040f64dc0a188f3216c2cdcad07065cdbf21206eaec38909ba1bb73c498fb70cf338cafb6c4249a04153129d7c695304007f5476aa774bd0cbf0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000929b8e306dc04e7738382b76851b22c5fb5f2ef201971d477bd6e76b7952ced503662998ad40362d148fdbb253556f76d85695d79299515a422376986ff9a5b832a5a8096cf48057629766cc6f32a491f77660f5ca22d49f21cbd8782552b926369f35953f08973d7d4ad035b1847abe8ab66a2842688d577169dc326de98673cb4134c611e08f4fb1324f68cab4fd55cd3806319ac7fec50f04965a776d3c7c6327d0c424bf880a9de62ded6e3e34c9a3af34480cb1a969b5da6a7d8bd5baf66c8df36d3ee60e5d82597553c72dffa35e2e1ff09256defea79c5d406871e97ea3347b8c0dca3be6502727e9086f0021658c73c55a0d93f725495efb2251d0d2b66324ab8cc9245bf60c5f1d1cec78f874f95a97afaca71b414e762aabcd5ab443d775d14ba3031d8849e15bfdaff9b55fbb5e9619944b5c11ff66f620233fd89572e7105595131e3f38c870cf54815c85c178675b455e76113e73fa61529249c7b946a46eb89c6d327b8c86c4975970d196db070eef601dd39ba17142feea43c3ab5c4e36531a0ca8e38c3a9430c45cd7e5d7aff33ff5801914f044f4ea1c50e9e6142f3d90302c9b41a485ea47289f69b17c4c2d2e40f00e1361f3b6b597dd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000195662e12355691271cfddafd20d918057251075591b29e1573bbed507276e8f00253b6ace20b385d8d1a63ef3367ce7fb7ea08eb5ff500c4c4dc79eaa7bccb33da3526a2918e790afd9fca21f90e0aa9dfc9194d0e107ba06226cce1c6e51f83ffbadbc2e68779a83477058c8b691ef7cf0634f88429eb4670091fcbe3c8af7c71483a94064570adc44d139c871b104e734c68392560811cc88e7237b8d21420936f5cb0e74f8c8d4a8e1099d7323586e212d607ad926f2b7723bd9146b505ce3a06f09c177d3a9b0098be6da192c043dd701d719348f0c153d69348f4755a3d39801ae955e2611d4552e6005997a7258609a9dd56dab447b09e38acddf62082b5fcae01b2e3b4f59aca085c15361853301cbf0ddc16ee1dff197d15862585b14cdab7eeeb2ea4723792c95eb329bb84af2c3a847898e197480a09ba388e571356fd957bc8909352999f0a15681e4b3771a9d400c62036646ab85d4c1dd60ddfde2a3851b07af3cb170b6c179a1eecf03dbfbbf991666f1debc81f2663a0ec461c5107bc69817645a2f9b562a6a86bcca803591064ba2d7373eb7ffddb2e9460c794eee5232a0bec691a3f136e36f18327d8c754eda9d8c3d6fd70f0b3f7142000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011bd39fe7ba23a450020d46a428f54f114f837321e8756cfac1b58c534726c6715c9cb35995fb999886e27d6996ed565b71c678b5f19eb13a6a0ad30442efa95402a3b7ad8a67e732b82d3dab747233bedca422804e285a5ebae43b6ac385f3d57d5abc259273e9ae4965fb92121c8152ef9df8e73b4e48ebe29ad94ae24c2be8630df87e6ff2551a728f2374780812b7b7edfda4858590fecf11ec3c6a449c4ee416881cdb8e9d8e07f9039b1d3f4790152be2847fd93c70366bce12cfc97cd952bc640546324af89ac421e58bdc4a05ce3d61e7464b77d79dd76df0d89a3e2b9aa5d2f714672bd1395ad2a49e40ec39c790626ebbcb596638f4376b9f6857c97c6579a26ffa718b0f636f3aa0c13bb0731ea9fbeeb4104d95f087d5af966e452186e8649d3dd8c61f674f284f1e5fa86e286f9cbee13c98abcd7c25838345868ea254b199134c57ac20e3b4b829c5d27d88a05987d3ec294e7c3fba742e75f1b628c4116b02f5301fb4fc93179aadae9c8edf97cffee8edc192bbfd2efecfb6262fe6a1d60765c50967c0228edbfc1342f215f8bd387258638ba515d7d4a6f8a7feedfef908c77ea7767f92a0e957a7aa3c00d88826f381447fed54d436c19000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097105b204a71d78c10514c60382c890836dd5632e7752a81486732616272235653cd90a1fe87e44a7d6a6e9028e55f4ba107ad8a27dade445265931c05d7c9a80e199452e351b72f1842394d09c0da1d937568ca69b77261c6023505852290450aa2130ff9c9c1edc07f4db6588d1c03db3dc378861ea67d3c0ef7c269005f4baedde94d54f046197c1ae41f994f2a858fe3ccaffdc82699769b1310805b6de3581b40c0e0d60a53f953c8a4210bdf99635d5ad99df79ab0b8541abc7002b11f3dad352b554386972e0d95ab9b340d902f65bd152a80b31fde7629ac7951118f29a7a2d852bc5b73bc8281b7d7e34d274a1efd4d4693c1c3d4f6b84903bc622c222abcbc29f23e58bd9860661978dd2ea5f2bbd7be12f2b5ec56b7956965ed4c7a953ddadfd3f56379ab41e848fa24c9b2d9b1d67e9d3b3c35fe2f346cbaa6fae0ee31977052af15e2e68fe4abeff2ee1f762f9bb041efaaf70d98111441412df3ba0753a89a2df42d213c10e8a96619788129603c4e1baa4593597ae8e1c06745dfd57f20fc245724beb606997cefc3f5250e76f29f87c70bd8d6171109e1f68a31f11d12501571618e8cfbe2bc8dc5631e0899ff2322b6a1c20a6a0d48d92900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e98e275343151d633eb2017514a721bc2980f13e431f1a7d08d9a0c1b00350c63c6e9934119e0e4d179fb5c8641005cd685a4cf97e5e667338eb6de06fffe107007547ff475db2830874650abcc6af836b37287a54ee87471868b7cb02521b98da28623ac1d41f02161b785b21f084327322e3fe6003ff9864f1cbd5e18789cbf7c86a33b720e546e879d89df0138c960e1703504e724c4498c0d84441be818ec27b52b5cfd1b6e09d92d823e1c5bb3fa5549d3a8ccdd883597d660a0e839da7925264019a3cb69e118104895377d05cca218072e7616507a4fd0b3e840b79ce25b71f2aebc169ca0ddab7249f7c78d2965cb229085e31e265b0409e00b7984553240c8073c887ead3ff82624a11add02961bdd88ec1ef3288568e176b506899619daa9b5556d4dfa6ba6ec69bc8f1f674b0cc5872f06130fb69aea8f43e7a24d6362da63ae53124dbe76da601930aabbcfbf914e62f74284ff79c88df87ec8178e3b4f11fa08ac35ac91cc17c704ece7912f4ee7ea6252bb2ae39d3743eddcad8cc93661817ee5538c13ffc55cb27b190ef682ba5c6b596cafa6cb781ba817978d81ff3eeabf5c96a8ec19aaa2536ace8baf627c8fd0595a035f1f0a89aafb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a57fa81c51a628e8ffa2f11bbb29c20568960c624163b93f2e2693ed4cf19a7f75f58dfc80e2a8605012c4c4317febafae6564f9ccce5eaea014f09876caacbf616d3bd34099528c0872843e3bef3d881ce17bf9a80d07d12e903ef4de1ae44c36556501b938fe9b82f46533a496772d55a08506bbc4351b6fad36353ff7de30c00f7e202d33a36eecc44587a293996ad6a6ff347f34848f38dff69debcde22f203ad1d7d744ea5da9fd447ad8e435d9a4c3b33eb661a921a4a789f9a20d695b74184f375818674c7e60548ada3f88f4b7896e730b2922ec6c3337b24b397b60a3f3c177107c7e2f307514aae88587c4d3674bf3338ebb962bba8e20e04aeb3fc599d3f4a169efa5d7d925e50119b667ebc0708e7a67a96baa4f27acb51a280e8448895c7ab86ed6939cdda42890e9c6a79d8f50a22da355ceaa5eefc2f2d16ba1a313ad13cef5db553284bfd8a9a472347cf97abb3d4ebe363db9a928b08e1b8653b41f8297c176ae81fb20cd9f61bbde8af5ed0e55867abde662ca917c62fbec7c532bb7231b68483c37f2e99298e8bbd5e0048fffc42b202cba7220fb7475a85a54ecb8e58a900d18cec002fd10e186e0c331f0537d0e6195c7433b76ddf40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a53fd6dd66cf1a59313b42b3113085eb3aa9e627041b6b94a0b2c4d3166f5c3108e99c98809d804fc538926233bfdf795ad46f46ded8b6ead61631f18190963720da2bec85c3a578eff8c74313392d52ebe3d38f1038c9123378a2d6baeb64c6f3ac4355c6b866949eb2ee99a70754579f3e6b5f4b91966767c95cdf4fa785d235bd3af91e05e1c80db3e6e1f5b5bed12f852da37d9fc7d54fcbe59e609ff8f643e7570bf74a86a32d5de99e4f6d55e794922dc9124de7ac02647d7cb79b9a006bdfed729873f9b5c9a349555b5d34dac800f6263c81fc22d0db51156aabfb187ac1e96567533c79e98defdea4d4ba531d715e94cde6d0904db41f0ab696575f8012c99f3111a0b136d79e8b7fc3783109bc05f6509c15e94a2b5e9b84f27894295835194d152de07428082d56e16e5a7ab3ef438461d39d73cd5ee0d905b9caf7e09d1c90dec287565e8f69dd4288689a87da2024566b8b3891e5398dc36afea3375f8331a79cc1dcf514e330298e224b50233edc8709ce6bf9476a1bbe2fe99f160d46050e00c39cb3557880b041f85d034c89d6198e7a59304fe2527e06c043406d81c31739dd2c543bcc4841177ad9e44aed56360095997a527b5bc54ba700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ee0d1d6d22b9e208162a185588675aa2a1ed0d6d7a814cca3d1cfd767bd935857beb5149a14cce5e2403df18b00ec492eaae0f977c6ee4400ec3819915dc46eb775072a006426cd6cce5fdbe216d64def3a426f4f1d3ed9158af3ad7b7fca3e56ea73683ae939c792750742ccadeedf93a7f39078b4f3d8c78c7687505320cc346d78752ad09e0a7c004d287b96aa1650da15fa1a9c93911e719f5c01329170f38714078ed33db9e80b20791e60b42e158d78b5cd964877610f76d2555b69843b139b4d38aae7166feb868c51cd43bbb6e316e070e53d614d15accdf02f9030d66d5ba9d604d5fec80c8a1420f17af4031cef75028d4012f5053e8bd69a6f7ea654e8ac370ae4c279caf48bf643d14c32a5e505d73d1dfbc58e44e6310c9cd02425e2d406f59010fe606b825c0b0153cf7fd31052dcb8c54137b14a8ac0f6ab1148f83b18726ba7ab27504c1795eba7d2d83a9f653be9e4ef235932549d57d718ee4a8e35d991ec39108e9ced8c0103453f6d25be832cb31dc64c5473ecb785d7e1b440f53b345fd61c9d9ffb3119c8566ecfbcf69e9a53e6934bc760bc180d8e2827d45d4c8a02bad7248265cce64777d16a0e74cf0a18c2e97f8f7c2fb5ec0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a57af82ab9778795f636c39003a52a70f5e337c6432aed026bb62456bfdd610a2d837fdac4cb940580b50dcde3697b00eef850a2459ea0c1d3a3d3e4fedda87547d46a0db1d7d5338f65632bc8404558636adba427375f9ab7264cb30654b7329038a09d0e86aeb93a82f5ba57d513efd56c59768da0567f89b63a5222b79963cae73071d3ad40b712794f7ea8036e93734387cd2194b8a52aacd2c8c7138e723ccb3bfe1707ec39b2f9527fd15e41236605e8164ba785075c1768abb7e355edbf68722127a0711fda445936476957a8da99a528f643eae5a33dcd6d4cab98eb664b54d35a7732c05373eb6628e77d688790ceb9cfc93b5e45c99a36a28f2e30c9cfe9b70ffc2e27c6b1e1fc063fa669c25bfa03fa79cc35008428f7681c94e48fe9e3b2b4c54b37df4dccea07e30cfd455e06bde3a6f89d848b918fb9e6fb961ec1c03bc71f50339e24c199e9f66aaa5dace98c039a234dc0685243599b4064df419ba35dee8d17b350574f284c6dcaf7309ff048818a10af93a75a2abd01e42b5695ac4983f7797c66e57ed5c704d834755612864d098dc3d1674dab54e76fc9b08cc9cc569e1e6cda5628da87c6eba9f2919bbebae36d66fbc921c4bba286000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016383c2750621348cc7f06b991521cf80f86f6eaeff7868ed33f0950138ea6e7dffe5076052863fddc8679329a701eb98b2cbbafd6dff9ec9613c665755f3ee01fb6a14ebbb8246cb7f71570b407b583c58707465a585ee71fe59ea0202fc2992df8239ff57b14ea98f6eba454d18003be439180d075c1b79302bd432f122d8f8d9116de4b1de3b7449c1e3151fd83a21b17a823d75ec31fec042eeac5de00768d435740b655588760ae3696683590edd1bfc088386131d42f42deed58b8087230c7326ddfa0dc8185e5b224908d3e9c1d228ad4fef9e96aed37c1bc0e3ebb81e7d4230e14be0e6164ebf1e333b5d00364e383824aac2f8acb56b92a09453dc9085feb4a1417c422d66905626e7581e3eb867246ae50fe0062a30d83d4a67bab32bad132a8c743f18bdf1ea18fe9519c692bb2d21d49b17947ce5c045e3716356ee6d07fe43e06b5c0dce31808eb941b3e42ca4bd990c07e780dab1e395519c67c721cb687c344a1442f69b57fa88febb0c3010421f430e151c09a8e0b8c9a9f6ba106baa44035d3ddeca06e6986f3cc4159203a900b5e15c2e8bd6c30cc81acaa7e685a6d5bbde08c6cdeb12d0f85e5f77590c58cff12d5946b1a8431a672c200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dfbdb22a394e38ac77b23d0f74235e2c3bf0a913f7723fe13905a2eca6f11864eb6ae277ed480bc648084a396b0b56d48617ce23831a71228195101c51c8372e1f68de8f38d1635ac6ccd943f49e2ef470168f89d3e9cf5dc1205ebe3638ff8a1f452bb7ef0683847ab09ce13cd5534771270881431751d7372630bb7e3ced7f68e880c06fe90c37efa6460503112b58d9fa25bf2808e44231ed1f66abc709e1a9670381d8461b35412066be5aba36e5366c84395c4c68da6f76458ddbbc65cb101ca5f3be02da84c8afdd712f9a795ba06af3d5c30c644d79fb481485f0014f7cfa6d57dc12460a9740f11e444b47aad4058f5aeffbbf63784d94074c464f9f41153e48809961a111b7ebe9e8a9951a9c05ff0be89169f33b323e3ed130990c664eb77380c9884bf74b3a03b9e2b47a7bff639215aad9368159744f99d6ddc4d25eab62c739e3417ab908a9fec2181a91823d1ba9352cb8eb308dd2eee33456de1094b424ba6f90ad0ef1d28a6ca9cccd97cdd89f8bdd3bc85f90d30f3bfff233d26195bd8924b1b4240500cbc23125c3785a8edb3add444ebd485fd66a1e5ba046385af064e9dc51e4e6e4747b9a430fe042e0ad00d3632a14c138f95c69200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000846e2d271df6691436a5347fd2bb7ca7521b57dcbeccb930cf0dffa219d158c3f51b316aac8ceb84f2febbec1ba703660b5d194f0c938f7496bb11dd95d185e43e0d3f2aada9ac76c0ce81e187f70272258e6c6ed135865f535c0a3c69e0a44d26fdf17edd2b0d4c4c52044d53d493e2c566263f51f2d92d2533ffda7300e9ec5d885ed1af811863362fff380044de6b456ad65322dd7819e6fbe81016618f0f381b8a704654c8b7888d0fd17d459409161ecb0865b454f5484a4432c3f2c8112485e477b953e6d2c547d450ed9e70358cb0294b398d2ba7aa5ad11d95dfbcd2a3f63f392e87d1b3f73e7afa7fa6e1ed39376d4c333afb7a60898d3e498411456023387c63e91bd942a9ead72ce8eaf1b9cd5f1360b981da940c1676b23d969870666461a5a563cdf890ad25405f7c5045a5380367d0e009ca033dd93de7038db8a010f5c93bfb5ef6b5fbc4fb94e197ac05264fd862d9adaf18e878d86deeb55f4047eb0b54ac064febdb739dc4e7c31a644a7cb4323b8573082a0def82178842e03b228325f84513639a98bfa0516098dfaa40701164d04f257bd2225c95942f4a47fb172a877574b895e5cecdbbfb893208891d25313eb26e67ad8ed646e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000937fb9edc2b4978dcc9e1c8d60a32c77dd7a84ea3ffc6c70d5fa35494643679f1bc796240f48929361f6115bc18a18ecc03c28c5491c2dce67d2c94d3239a21fccaccf22f306772570d8c163642daebafb0b7e451d602f69342df287a4c13371aea326a128af6f4a42eee2b4890037e174bf736cce6f9bae0140aa01939fa8825fc6f78f288e31542f123f79a00d9826a1a85ad0d5fb53691beb43b907f449a657d8c602a285a5472f865ce0bf111c0bad1604713ccb8968821425b9734de6d500b8bc73285223f177f9840bb97eaffa1150d58baa57062c68256ee3c9f7fefbc25b9e431d41558482697de59d53dd12312d9702db08da6c41701eab829e8ee01c920ee798bc4be76e04c62172687da51fc817cc21e42c387e781d4a0f05db95d6d3875d42fbfa581e60b1c6ccb20ce04b1920ac604e49470951271d125374a3fb930bbc3fa6e88a8187c7f1dd31c69320f09317f07ab00bf144b9cd107bf034974d61c7256d52d9bee9434bd55ad83584f983f31a236330f13bd0a4e1b47d47cd700a585ff763f43c52ed1bdd4f773e0468eb03d99339595ab348c73fb63adf9e0d62ba00cce1c5b272acec6d2f2bc22862447162039e4aac543d195077096d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c6100710a4036a2d01423e9670a5d1a522cd02c66a2523559dd477f7e21c34e164c48726b47c6ddd6e2db8a8ab233ded82bebc49ec79f29ca322232c2a71fd07a1939ede42db3619e405f9a022542b9ccf3e655bcdb13c493d058c8718badebb736116ff0d3a1a0a3a5fa79c9a6314ccea528f126c14c000accad598897881e6dbbbab797ea5d40a2bf246f9c52cbbed34b0c3cafa805540616442a7f68b78424171a2c7759103d6504df9416ac2c7d196a57602e888a6f0982ce37eea83e455e88c40e89bba33b9c745166a3f91c8571f4c7d9002d57417cc189b75d9d2edd87f24087ae57cdbde5d63d603450d5b8eb773cf8abd93920d9f85f1b7ea6484deb202c8f687d0d201e64716cb009fc96b08e093f540fd1c4af5a5688689bb465c1ce3debd1cd2f11b37edb9d737aa11bbf4a2d82d938769289a67d09bb10849d3320390d865dea9d271bfb5a73fb40e485fde9db016a7ba9ffa5a34bfcfa51b72a1a1bf2b571c71414df9013a11c37cac35acdecbf9050a568b825f238229f863f04db2f9c9118c5ba554a18949ed02165b4d4f90c35fc7fb1354f046328e418406cbc03cd488790c061a083052fd6c2dccdc6e38c37d3e5023d5f88ed74c09900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b117530aafcc5a5b9e79137b8e53e84668ee1bdf7a9e63fe17692a197cb8741b453f0336e569b3c21f6a37bbb5ba994b9d2813e5ca600bc2f36961b7dd845e17e57b63247879992262ca0aceadc9c55e28a6d4c4e04814e17ea34b1e7dd5b9a6b3fbdf81126fc90e5f2e507830535913f12eb7cfd6c19c4f90f3ed071786f668d5b6b1bcae41c61556835a037ee28e3df985d149aa80b31f3b425516cb9328642f696edf6efa79477ba09bc1448dc0f2785934221f9bde4cc60f58d1d0872eaf58b9d4a22bd123e272a6b140ab0c09c96f6d1fe4583b1fefe98ea0739f7b92bf5479b5fda9bc02bc622d5eefbdb3e2cb45c57a9a8cc9247d8b7c67ac774619ae160999ec24939eb6d1d077521264a18b2dfbb5565a2824f5bab4bb5ba34f13d61367791614c294ecc8c69e0175278cdc81302498d65762ff1e8c9eeb577489f5afabd9bfb18c377e22077024d95d880c3fe0bd2b9b035e3f32f6c99d9577ae65459fa9b1b1409c67806e0c7da4b43fd3a4f8f050e2a26710e79d4e109ab81df05c4196be1fee23c3476b6645867acb605e4c68f46a329ab82d929139d73325cc34b1e28e46c6fcee76f791ce4017de5765adf2ffa043bf9bec963afce3beb430000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aae39bd23bfe47a728290bd76321f0ebec3d0a87302103605b004240af394e322e4760eebf1dd8efc59d6a2b3daa106d405206cd46fd7e2e660772fbc3aaf59a2c7157268e1894d23fa4ff72d33f64a938feddb43f1277f105bb5111fac0dd9d9f07b5a9562a4e79f2f16bd08dd9b5553a3fd9c0514335fee423383d21f988f6f7a57d90c881dd53ae27cbbb1e4f6d263e902086aec381821dfebdd25587f92198f58158523b1a821e26ff8e89b8c78b0e13111a715d76a22c2863e7ffd42d67a0fe889925e496160e9620f44fc1e7e93937e210561c6107777abfd5cd3ef37b37858b10d027f08044c8b584fd3bc5e5a988547cf20f51760580804e3b4aa12a651addc55d2897c3a83d14d07fe03fea56f593f1f4a598b84fb245d38cc4f2c68c850633f29cfe57b646e7bc41398c4e9c5220077611fd2945ca4c164d53e30c2c29d24c3024677124c51c3d0d12c575b898967ea28559d3e703072ed1705e31f9be7d49b15498b76f50f974fafc5a60ceba9b54bcd88829a86ad4d0a24bdf4bb65c7fddba948898f940e8ebde1e4cef8eb51f0cf92f5d86adde39618f4c73fa8911047d50c3dea62a34a792e0f3307630debdf2f9d561ea78f733d13c345104000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025e3c9ee71fa4d4ae6c5e26fd577ec64d8d5bb0db750ba9dcb2cbc0106abaf8f7cc95f6352dd2e3d5f2a51eb140df56f927d1c120d323bce79158d4a5bf3637ad9bfbd9ff181bd5c40c7f4bfa48e26c92bf990942f2d8b6eb86130660d3c9e5f55d6642c04f3d8fbbc23ba12a8c84c4eb3f805739f695d89c66c7e19df60cb957b477e7f349bd42c84e9a144f9300390c3f642de658a04ac85da0341dfc0793bc8cbca5555344481cb1358d45156733b1aa26152bdfa6d626daff8a6461cbe0bcea72c356c40a5606babc157ca7348990d882bcc8d6493bedc8af7f0a2a4f5184f9df47a9ef4851722ee20fe9df92db5b5f9c01cd56e644447694ad66b1b7c180c73132c739b81293616823c52fd870d54deaac73ccf7a6b0f29cc85e916dc44777688901ae041a8bee4a68377d260e522de60c119f82ee1eaae800e9820413a76f5ea36e3622cd0ef03cde92b36b135d2715380f6df9358dc8244ef057b4f09d9b454e0ff6906d83039d0cba1f05c891e1526aaf5ebbd56f2c1853ecb65885e4e003e7aa149ce0bd66c4631931e954f08d0bac21bfb8b15a65ff19c77aeacf0e6a1f2fff7d4ce058893b3e9c47ad0b7d8c6c6591fe8c5f3eb5201c7116ddf0100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f441a447c985d9e8a87b9df167b12c5252245ec90e12cfddb3629b90b4f7824f3def319d29a388d13154cae015d808364ea3a97a5e22ce120dff830dd24d031b30a29138eb477336a3d475e82fd1b5d40af4176529002bc39503aec26bc74bbedf3cc035c7c834b6a56d1f2165411f56c5f3cd0b4d87d7b86bdf9f496d302228059ce4ede149ea07dc9a5d5909990ab9002dbad989d475575abd3ed5f57976ea10c7b3be4db1746a047988d09bb702d7bc54a64d01724896523ac5ffe050cf05aa1653d17fa8fbb1986d173683ecb615e54d0817ce52dc31fa5c9ecbbbb3839502df0d27d72308eabaf83032efd7f490dceaa9d38a859a8ad5a118bbe38de6e283d15653e5156d048ff3d2eaed66390704c53e72f948a18cf00ab1669bd540e209310b37bff2e6b5cc760548f5ed21166f5b9499399ea8c2ffcbd4ddd09740df5a5d9c9737ffe5bc6552b539cf1210e39a513ab67f3e72a244dcefcbbc0b48c710a05de61849e0224d9ccb11f8c4c02fbeafec9ead3e25acc78e0dee8d14788e81c57891e789746bdd218f78305dee44264c2e94493352deffc0307ab30fa1cd2d607535ff686efba9e664ec900d7908936a6f9b3983f4f6ac47475eb6766a40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000145f95871a3f02261c9b2a7e0e794df8446a96eb8c527a8e17a7bb9fd54dfa85617fdaa953f71a90142852aa11324a2fe99ab037b561b019b198bf728483a4f3f06c1fccbdb8610dcd87f5b245310fe0d0959db179a5f35c6ad14ae2c5bbd52fa01f1c4315afa1f60af50dfb6a6e2d58b98d0dfc12e58ad4186fc181d5022141bc6b89815bf668702e2c8681d0c36898dc4d0657e96484f29b6b99d53f1db1f13b0320c0309c23a5344e06aebdad6eae55cd86020c538f7eed5251c82e26a699a145caf72f73b6f9c01e215df58d7353ece92c9f3ad9a840b82023583548e40d55a49f32b7737775566732fd8318ad862ebc30596cce8dde2dbbc154593e6aad7652954a3378cdc014a5459a05480531d05e8a1f3caf439b47dcd5af938141ecb491193baf7b25ef473df5f271322c94db1f518b864bab8b61ffd9736c36633979ad211a5cf45842a8e0dbe29b7b6dad9462a7547ef228a2987e17f6bf63571986cb1a27dbb58a46bc84221bbb1c124c82c2aa7d96022be790bcbb45e16627aff659b81ed51196e998ea0c1753b249405f6a2807fd723bec9ac2d52e768e8377a2a4a1cced62baa6f83c3a5357db3b7e5cfda02d1031b9d137d19447017f758e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bfe8483b281109acaa83db23ee41d908a69a1ebadb71f4fa35af143beab6aab7fe21d3dacbf037779a6560911ec23c7c07700f1e52b74376640add375433a69d66e80607ab95ada2971e679ada57f80fe96b57babd362acb0b339211a45671ac4a220b128b8f85fef30d145b115bfce21b2ae9768334bcba6daf68fd3a79c016d066eec286be56251f045d5f8b27b6c0a48795eded7851f1c629a522e942d433e9e2cbf7ec30fb2fb0075ba03bed0fdadef70c9142c08414e0ae6b7d9168f58143cbc95de194dbd72c3e560493f83c94436355fb2c71f49f59d4b761f132e3cebebbe23c977d4df582c4c60d4279b418961d5fd99f8f81762b3ed1821dcf6b9167b0541443f8de4aaa22731b9eaf6bae9f0e353c350487957024b6d9dac0fb166e68d1ad9dd86f1bd83cb146de7d0a8197ee82e8ffd3136f25da180ce6c463361e4dac76ef383073f7a097d92beb8ec3bd70582d81b190472876aef1974eff55b102e8c10b9a2ada270434b80506a4d963121932deeabe94fe520cdb0cc034f44d8e3dcba106c5b4cc7a40f65d49077b9ca059ce70347987adeca6bab040d761a1fd0ebbb7e70a617db5d614630156ec73bd11dc6620564c70175c7e0696ed0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028cd0c1f64dbaf12719e7fa60a8d6d98531a801a180a91677c4ff5fc57fe0c3dbcbdde305a185b3cf3dd608f90e3e0157d03056b4430afcb5f4fc43ab7e702103d0d5675234a98cca1bc847b7b30f9a4ba9690bfe1e1f5900f7171bbcadf174097e1e48f9b5ee2f82716a985ded306721370869812f136e7e90a67870c6dbf08598e145ff5859a960e74c1eb3fed0ebd073049d098723190d5d3656baf4a64dd56c4049077739147d3553305c301d281a11a02936ecd5e1344998847241081b625a30f5ec3c266efa8c4dd48494fe445d5202a7836d0e5647f9181d52e971097385d4241f37a7cb6ed1c4562f123b04ed43752cd153e08c86476678f1a1a37a6ebe55de29f0106a765deee324df996982d6c8b5f5e2495d825858918a441bb67e9a71b8d8737dfe916b27da55ea43caf9ce80f87d308eba980664234f909665803f6ff1e3feea91099dbf0cc5bf3076ffb69a5bd1421cf92fd1d6d9ab278f38146dbe6bff926a606d962c61675d5dd710c81db9216e6e4b12777baae7b78137b1af484c081c6937ac3aa2a449e99482608bf8dd139a0e7110de8700af89645353afddb0ef67eaa8c1d845e58a5676a33de581feae6a47236cca46bf3ca8ecfb000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b26e48d1bb7364d6834d0f3b889279645bbec6ab55c7b6584b60001856dd753aba02fd06c512b69e9a7682139460eda74a311448804160e8dee76535c84ab4fa13515039183da16fbee696beb3b46e02de023a654e17550733623a5735947c750fe765ea5e4f7912fb3d9e39fc07dfe387effbfe78e24014c2ad761ba59d1f5478fb13fa22445728fcb9daca6915b7628efde1305f2292ca8867447e6bb31f4759dd5a1fcb59a728ecc39a86513d3e513ad2b6827576e1a4db945672f51a28157a84059308a32822d4245cc0ebfda0d8d4d4ae0d074ef0e895397011f0a2791774496cb249961f44ed3f2fe8458ee878308b149f10b78b27663b1486763a8997c60381d66a265c9fc1c695210902cb8da192f4e03e3983db72001a9c5cf780225df8743c415c2f838c5c77e51c68f87aa87dbd365a4efc50cda633242fb9a6b413c4723596b4ecc6dbb672d6c11de29e88063050285eaf8602f542ccfb18d45b28e20f26ace32a25a3e6370fe5d2a97d5875762e16b17a45a39e95b58b1d18a18b09b1d73ecd7d431f3cb31ac9f436ec211cbac4a88cf25b3cf658880f30780d22ee4e045d0089ba50c1b1e98a5b12a121843642830adbc6daaa5fefadbdf8e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fb1bb4e9ae286e7e7b6b8e660b2c965d836a66c67ed3d66e4dc4dfbde750c27f557ed95406ebea5efb1bee27a6c5cec21e01989030e6f33a09801394c18e5d0c0b1b102e06c92fdb9feefde85d58274d27e7e1ea1d8821ae8530de75a0080ae7fd841c9b41b4595dd7252df319da2d47c752d21fec734d3e2a3cfed7a80dcf0f20737aca17563860e36d084164b6c9e6284a90730544f9a929ac62e4659345cdc8e458bdbfbb042344830003b8169676e68e246c723c110bd84a6445182ba0b7bf05067145e95d9790b4cdada4049e84b00b955c4b94dc27be1232ee3e52305dad07dec9b70879068178cddc926af1979bc7f0f10253b14cfbf14845e16a53b6a2c8b889f6d92d68632bb676bdf69af4e41e8b82790f609bf80133a708d3d7ffac0562dfa06f4270f36e16477c569b7a9ab85d305c11ae009539a6d5526cd4a5a247092129a230d368789a3c224c9637b08b360204d6b0d10e94bdd36db9f2bfd3b8bebc344095e3e9978ac855b63e73a37a75bd647b167b44c8347588ed375b5e9eb4950926fd406ba18aab2e1c928e3e1d09c65de62c1c77875f51da8b2c251e2fb645d17f96ea3cd1f5f1c0406da4b99a0649121515c683c3edc4fe79edd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e159935bb2da14ab7e4944e6e1e3995acb2f088995a834102cfffc8251e8a9f25464a033da43081889c777b577c9c2271447a45a541c84683487a6d48b24e22cb05261213fcbf18a6a0f9e19daf8bd27b82a3e44ce269ae0ea22f3b4bc95527a8542abf957a53421f1047bd938a7403e1d4d93001ebd980bf6ef3184f39aa2da74a55633b84407ce2c5dd9c0f55e2ec9e65d678a7fb93513f443f1fc2c98714c8d5165352864ddd9c69475caa29127890119ce24de87ad3e148d69197b8aa58a9f40a15a512400b2cfd12504807f87f93d06b5b5868d1e5132750a22932ae39a1adf385705009ae4fc0a60cfa1dd125067d515b4bf3ae541252043d24d9ca4bf0610158a2e4eb254c838327cc85f5758c01f9228e6ad9e916b6b602fb8addb2347c1d3c0aaa20ddc69a1580c522c4f5f3ac20ba128c43295b911b53f7e19afeb968b88c7aa143eefb4ed6ef7ef7f7fde37bdfbef331287a7c22325292f90556ab8f09067cdd1019749d17a7f3193e33d10d60210496aded3e67dc55f5d8e2ea8abc7e2a3d18a2c36faf66083776f681abb76a31017d81a61a309d1f81a57d6a13a96d0997c348ddad5c9db6759b10015287724e86c596b6d9b5fccfaf4df31f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a31e1d6f5f512df45550ac0a882a6efdd7bd73a20d7f0704a815abf0ef0d1e466ebc4b11683499f3a43c6b6ad2d55f0c2003134d302385caf68e398e84ac444cf3b82ecc598bc74f65446937b5550b3e5e2e12dae8d03d5d1734e0a857125e1aaf65a57c3dae0138b212ccccc2cf42d5eb71375bffdbc03e9df455e0444e093f9777ac708e7262c142dc6cd821dcb7a5826f795f076d59ff9399b69e76e7e3ca58a4536490a105fac9779fa0afc3bbe7b5e29dfea0fc122549b52af33d93d94fb05bd2109e6db06680cd247d4ec4f58e183cdf0ee0e9582222568edb47200cef7ce0069a045e7a1f71291e9aff93c493459f5f9303178f3cf1f935f1f747649cd8fe9d3232a70b66715863c8a881308a0e4febd97c10aec26f729d14fc3c2730d0f7db35680363fe566b1152498e61f700b96f4efae626f38822344d4393fa35246fdfb88626bf06b5cbc1aec89d712c1acd5a0ac1435ea6a25f1bc69d2e9049f9d1c5a69ca0ce38a36c443d53a4666701613651434d52fb0cb3e0b37b441ce338faa3a86bf822919bf55836c7e7eda15503545386d5237f6994cacbee8314debf2201038f09b1a9d4e07f09e9da0aa987ba40a182cbd2f312db325a461901800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090165f31963a22b1dbc67860c7f6cea231479278725b36839445d466103034927d237ab0e00466d27ff21a0e733257c2dfa7ae1f008f0cb998744679ac1c9709af6b90f78337b2c00a22a352c9a51d487fce17b3153cfde304bb4d2bee6ac61638ddc0540f18c5654406e3336b8973e36aa6ff0f5c8051753d4c8d8d2f40a876d0bd5f5e58cb01933f9227e6c7cfc7f190f79cd188a0b90a9aa2d72f94318697a33d59659520349084f18451e8eaf0684f26ca0c4d6ea1028a990673d21451d4b9b0b46a4f883fba77bc70db1ac2998d20017d76a0ae330f2268810dd8ac5f79c8ceb533203f1af017233f30de97a94a4d6bd08a35546a25bd8125fdd535bd3b2e0888daf495d789a3e943933fe4a6ca3a9dcd9196b3bc0c237d1083dae8a4016348f5fc85a1fde127db26eadfb9f80311fc72d2f6f37aeddc69a842b1f22a75f7b3eceabcdf65009f002fe2e790c15be71ca3a2a36f3063fc47ea60c7aee949aabc8a444466a152270636c9c90f2cc5f5bcf69af89cc0562c301c014bbda1a43a6fa4c4b37ab6fdda5d4949dc2b2f32b706baf9ff563de26284e169484775c8ea13c6fe5ab537d4fe4ea2a6dc211cb3e244dcbf9fcd89ec8a5024a3eb0f9c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081557c6275d653594a2fec0b9eed8daff5edd461b80fbb7abfbe30db9149d311faa3aa545249502234893abef73dbdfa96560000a84f4c493584c466ee25e152dccf2814840bd330eb06122e0a10dea8bbd94b37f858936fc46e0a442430feb62886c92dcc847478a42e1df18d610592ed54224a8004239c67c82024d6c486294e9e07a5cd3e4cff46743e315efe031d532b6efe50608bc713bcf6769e2af44fa34b39c81bc45ba7c433519c32fd12b36c4d7b91b664fb040d6d994464a63d64e4eedfda72f924879169baa55b8f756a16d045d900b24375f1d9eac4b150b39522bdd2cda16ace5c489981b40b907f38e23d092f1074829ce5bb9c0bcddcfcac593ab7a4450529b9846689ff992176c8d831fcc131778ba8d39c7786d96c5d419f3cd3227b0d61393e4d59b2814ec3e997d0db52abf0d296a077f7413a4d9587fdd51e3052bef19fb348e71190ea89c4985becf69af42aaa7013b36b2bc3f52a975f964535cc035889d9246e517845ed3c75aef1ef246ea1d086a918e76086691f57c295932f611271db794cca032e6ef93d7367dd5d798674144c361d4385e314fb16575c8fc9235692f5067c52a3f3f0eb6f098428505308403ad284fa2927000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019f34452b2934684c71d9852243f1538c33f14c9070321426efc34b0c58940e6d91783a6cb00e403abc650bb28e177d5f9135eea84daf300b043ecc60b09c9065b5653c2eceed7176d31c4d0db726bad24b6f571f91cc33077603d51a013c92dfa0d6c559ea2838022be78745c9f4afbccecc19cd695584b6291b253f97503080070b412f16bbf96a6678fc17bcff91e983f7509db6102996c7971e82a7a8bbf86fc2e671e30a125489bb4011404e09baa3690c75761b6d5899c37c8f23c5438755df8ddd8e15585fee4c90100810ab8fac30708fd0a14b3484f8b8042385f3549a231e24ee456d8d4b8797a9aa063935f832b02b5f4e4ac86bd3b812d29f5d669f012892d4ba179499f37b0147892d342885fdb5d003fa91cc6281de39516896439957cc3d47ca9a12eb5e94d49c4f2bfedb530803228df94a9c793b28f6a59e2c93b818a60991bb2486110786fa2e46d6cec8baad5909bd08b89342c777649f6645731929494d1fd5b1440559010aa7f7e8260de0897af7edfade09f3869a43f22f5280eb9db3fed8259e6f580d73a92914740a257e2f5c6198ae70a0ecbc8ba6583398c39d8a30d8a7fc399ee672817af836cac946484ee05b8b485fc80fa0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000130efc5eefca5e5f0fe6553f153fff5f3097737fc9fe910cdbb94f3a46954fad2f06cdb0037c3233ec2710957d0fda069babbf8f92f03640d57aa2b42ab73f73c160d6ad9ce8dc42fff85faab074eb6224e4be1f3c74e71b54113c2131ed10e2a848c6b3c8e85c44ef0a09f85f2654d4ac6ba7afeaf9f53b95ce2cf4e00e149d52b9d4d6184886574e4503574b853e39e46f5cc5ba4be4b15a063229a34b6cb457d2100441d07461a3cf299002e9d6d3c133c3c4fbc879394104fc6528a1fa3c6823378e65d80792278935fcc5e365ebb6aa507e7e444e568b309a9a4ce925cd60c20758ae6ecb44adee800e9d4af68626b03aa6e11556f3b898295c000f28a13f9489958b6a3fe597f2eda81a46308930b4360043890c89c2afe386d3dd0c1c88f9bbb6445a7bb47e69bdf67a13e3f4a602ed372af3d9e3a1b3dedc1f769b9ace82e940556a224b422233381bf1a38e617d0fb25c27733eed83e0ee431c0989d9929fd62146efbfffc4fc2ec3dfe012c880fd7e92268f7242727befbe7ba7a16c1914d69ba81fbfdec6eaba530403a8ac6fbc590c03a3f26fe6a2939ca4e56ae122f9d69544fd1d5c594bd1699c10dfdd7942142a35af68d10dd4c5ef7f1dec0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000831649e3b92e706e7edcf666ad6690bae910d7c5d7977ce424e1416fb6aae34ae1b74274f80d61b98c852e3fc50eff4c4ed0301b96d672925351bbad2a905662e99e3dd7f2bbe9f4e1352c35f82708fab7d8d10117a808ed148121948c6d0bab65e5d9b6341a920cb8ad12c2b2e7c7f421a923f9a9359f660ee403cdd82bc35e7931026c5a66dbe346bc81475fc282cc9957f18e3c1ceae385ee775ea2306ec9a6313e122558c35edb6d4dc8f807886fe1fbd0d9c2688ad71ae5a1aa13f1ed087c6a3d85e031b6132fe232ae3b58afb4795f01cc4f570aab80b3691ed8d7b37a1274dd2a4ff58137970f5abc1c04c105883574633dfedf5821ce3eeab67f9b71aac30a43f8dc1c077651955de619bf662bb4f72057c06e6a1612e3a2e9532e544bc75f62efeaca0b490ca2a28e6883aa5b0d2c2b28da05e829450fd67c49ca120065f07ff38370cce41aa6264e361c709a05417286258de38fb40439c3a21ded91ab9e67972fa9ce987bb60084eaa88743f20690e13a0cc86a29c0c236b1228e0912a64ad57e08c1dc67ef6a8ad4025666d944ac74f09c3fb50e91c9476b3f9c9045d9adfe58931b5d9532d25eb54c81db9d864f2839a1819c0fea9ddb25ea640000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2e95bcf17ec339094d6a2c0fde1a6869dd49fc8f5cede3550562176598882883c3b72d2753886a894c151682bf4a29377b67e7b192225660c3111fde4301135cf604244a93e4d2584617553f3a1b69aa4fb94885cd00fc3b985cc6a681b67777307458eeacc23456431c99673045b0e2b17990f202b33139397f63cb095b1ed4781b331de6e755e24724a8ca5552c28cd2cf30f09d883f7b168afc6213b3f443178dea19e44da04f2019bf3f81e4fc3965ae8897c93dfa506bf4b8978c0e91d81e2d857bbba3affecbf4aa320350a1fff650d28c6cca4a916248dda437713ac36eb084eb69a3a6948c827169ae0777810eadc76d33da0987b1f547c2a52666e1968e9a81ccd3d894d61d4fdf8da4ded32f4b6db039c6a7df5a0f965b0741724c86a53342f9dfea33d22eec0508b82bf8a9fb0542886eebb6fa3de2ab3ae858978e3552ef0d48ab009e60ed3d7b1ec9ae786e59f9f444d56bf65c418a7f5129e40216ca2dd0f7562c24cf83d87bd021efeb934286e709050d3c9a2d61cc8c02a1a81fdc9a622582df15ca0f0567e223a1407c06bdda7777f176575da70dee91f9126a059761cbb22488494419b06dd2afe1760ed7cc47d773120ff37a06479290000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a699a48eb556740da30ed2f7e2a7447131cedf24f353a5bf295d8ea3b4fde78e41c072ced4f80585ef00b2019041e183f9225fe45475264452a33ac711c31d6b108e98ec071a0403177025d4359e24d08acf77a7d6c3e452948391949ba36a5dcbe535278423047bfd5f78cf48887828c15113de5800d1fdc2e51292cbcafc0a1c0cb2b70623e1b77bc5c3678fbf2936b0cde52f40ce4b94eaaeb39e517d6224951294c0b2b969ddf156a1b0a874984aefae800cfd07eac0ae9016dbbf101e6ff6a83dcbf80eb8299835d6b995415da110286eeba95ca3fb630e343bf02da4f5dd2babe9a4f2e819cee4eb41b4d52f08dc68a334bf5b0b73b3b44324ca3ff8d7f9b0d78a4d2052402710078d03425a569193f13b1cf055ab5464bd8797612136ee719f9ed91f0bc0e470896c773b60c39cd740942d5ae4a687f82973bab747f57cb752f27618e5ad0357d0a5aa3e8ecacaebce368c2d2098eb593c5b49d5c4ed8a115290f02ff266e8a00c1ef9430063ebb6d1c7cc4ac22ac040b0915ea0556739057408ff2ea434e4aa182c88db742428777632b147c0e532e70b4079cb9ae1d5c2d779a7e5e2bdcf3e147f05ecf7b9f0068e4533f05b54bc187e22355eac83000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014ba6b51f79a23ddc8d25c6bfbe733bf961d2753d9f5a84389c32e84f0b349df8e3b9307f4bd261e028276bb9d07b7134cb4ab3fa9da4bcf3ed5c720ac1c4f73d68f41b3f06d67e15dcd58a67ceff0087ac2d4e4eb6cd2fdc38817a88711a9c60cd6d3687339a9588eb7061b80d67fcd4ded9453927f55940e9ac215f9819193898003a925a0f296023916d66e5ca4172b132b99de3376de1d40c71d9363eed9e9cf1c79303938fe2086eec3cb079c6d756f3d5a4f5c90db97fd98218f3dbde812f6367483f89ca3e8aefb360cc31a29ef5b65294632002de1e57e78b138f8455b27df90c44f44f3efd5c7b07eef5204d504f2c95523b296afee4fec646a2e9686a4ecd40798499816063f92be05325f1c184a0766dfd096caedc8d206794a035106446cd14e0b30751ec62f327eeed10db9d909db64805f7d18ebd70733e2e8ad31bc8ee0a9948d99ec4b5e6bd0635ca5c35ec967c6b0b36aceb196be5ca7394fe0904a332a947e79dcd673945849533c2eef0e6f51495072aa33f5ddbb2267e645d5a89842306354b8a5f8bfabd8dc34b6ad35ed9c3d83f2391aebfe45cc559dfae2ab6e4ea60d007bf3a27731697005265e3a1710c2d359400d64ebd6a7c600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a95117b914047c81c022bc82edc30f60d4e0b85bbb778525cdffb46ddcab52f93227fc9b32f9138328864ab6824eb459c292b400cedcbaf239eda40e8951e7efdb514223a02975f4e7b6d19b592a326a844b7aa83e2de26aa3a2a1cbd9463b76ff9dd5f0471493506a6ce09d5042101928235516b931721c62108e213ea7af98daa5304f09133492f65e920d3e20c2ca87e88869fba4da271fa40c98247ea8ec978c71f0f7cb90e467a17a6dd74dbc2531df8ebddd1fa6ed145801331dc01fcf295acb21e1406ecdb22c69a1c99a88834669ac99c8019eeb0034d6d2c831233ec702c94f7803a8b0ac9e813fd7763ff673c43c090cc60e7b6f7bcc00fa1b84ceede821e61c51fde3c5684d8e0e68b40be6ab4a0a4b75be74ffaf707b660b4f6741bbdc16a4adc4ddc1f41c12a398967ab7f28be5893347f3d7fc6d05493a04658c0213793e70e358f3f77921e0aad1af4e3b56dc3d9444ba3ee716727a9b03c894c7241d935b73a1df7e7aafd1e8d1af9db380cde16b5303a211c378dcb4adaf91ff37f63eff4cf8be3bd22ea6d24d25acabaad8cf68f45392a341c56ab87cc6f5964b7f1c3dd3e77321eadf92ed11d8108f8c5f6825e2e69b32fcd41cc31800000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a448e3642c11e360eac23baeaf901434a46461cf62f090b70b7a6317fccba6a22153c7cddd7bf8eb620af48a15143fc705d61d54c9ee4f0b0fbf8ad1e2b071284cdc786530238899263e67d29bd3becb804aa4197a3b305e6ba7b1e920a0a7a917b0b45da7afc150cb2391c2785dfcbd62eacade538d139e5e4f0adad2a47a5f64778247e384b76aa24fea54bfe0981b29a3a96ce1913e06030f3fec9551696034bc44c0ed4492969a0d4d41e94147f6cdd6d2568561ede0d90ec36ae1e9098f68a162ce2157467f15bdc0a6ae38e66f2e6aaab6975049d527aba896daf30fe8d05edb042bcc6a04e7ff7b52feaa3e23384155d854aadccd357b5d2e1dac938bbe5c2a23d403d198dff171479a1dcc6830743bfc6ab8346c0070480bf00a98f4fcc397ce9d71f3b23af9068b8d13d81ab61e8f1af189419b9f073dfa44aabffdf4febb971117f316c22644413ead79065e15e5d3981db5db152ec274044409fbc5f6f6f9099311420642fd34c3ccbe0dc4fc63009e15a0a7d81aaefd5516420c9dca2e19bec488389f8c551cf314c9ea791840c28bbfef4deb2ea1605064bcb93a04a61b4eb2b4f93f9ed3c449d2e1c7f5de0e1ad695e79d4ff133ecfd0e3b5a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008013600fb23fd4f2ab64460e8d9f8d133042fd570588afaf42788b4b10699828288907db6e8e3efa8d89ede2438c02c0d4a1a5a63fed8ff9a461fc8cea3688df191d1327b25fe5d2263c21af80b14880638b2c8b15edcbc4baedbd26a05d4b026db789f7437615176687885177cb7278fc400d948136d9f899c8859e67fa152d96a1f226504221ffc6f1d8c4cf282b75fe23c105d89f9893482de306957d78c1f4aacbbfb500c06339a4593ebeca9c5c881235aec3ce9251bdf7c85da99bcea66859a621c19d36276b0fb7c4586a22f8055a6d42678fb61ded25f7f53e26bb13140c32708c7198fc15b0371067fd727ce0018fdaffe10ee29fa5ec8127d567e269818d1357931c1bd510a2f05eca8bf96f9690546a15e26ee48adaf442a4c037ae698545e1f682c601a7fe6443525d2f23f21ce8f8adb72466df316faf0c25679fa5c7ceb609cb1719e51fd1f5ca9db45a15b7664c6c983901cca3edc48f2254a41cd384d4434a6228a4a01a32283a75986e7288bf40e55ad23bfe580a341d9ef8db7e06fa9ca14529f07170b41f4bcb8edb0e2e8175c9973b99700a82cff77ae853c7e6a28568933d00c1c33d3b03c77c3b94a9a79b3c89374c1c93bafee1e1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023c8ace15e19d46ff7c928ec1abe96cbeb52c8f2b29654a40f25cf5544809994e7a3f0f8897c3b0d7cafafdd84c6175afe8cd6643c09ab2615f9a5a53d47fee1c5bab63215b823cfa9a5f6878a3aba7ec323281dbc800a98076334e29623a8bfb2d973fde0513f49801cbe4715ee2565bf05e0d16a71a7b4b43633d052dcc75c850db597976cfbd3e9a1ac54f4c2d9b9271ae9f7fff324e58e32a1a057ff6d0481e86eb552dc22987ee2b00899ee902cdf6371a888a170c4a06313e45ffeddcdf7a72a345a87778d4f765fe6527ac850748cd29817c55b179198f36c7b86dfd49e1108c8a75527b765d2ae3ab318475c2b82c34b1879d6d1e93e03a5112dc094b67ea8335c49633a6e68b96e511b5146794c5a944662476840bc5e915056a8f3be9a7963deb64bc56c61b028380ab4ba5b1d049bb16c058ba840ddb9a2ae9a8bd9008df99bdf234f592c275e0b1cdd18b5dba4bfeb37e943bc1cc8856c59821058f64b45261b3e60a0d8b262728e8cba673b1a45efcc8b39e6d4fc1885c7ca82e3b0220f658c15054da1935451bf9a52faf982c3d08116ff6696c9024d6cf6df8de262ff0edf65b2d9bfc9c60afd83d013b015b1b7e1ea478995d9f6f0f9bc5b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5ea62b275f3d3232b1f80dbd5191e0c0474b159de5518d096e7bb4f9409949e3e46b4ed90c8f5368f10220b244e3af5d7801af1974c64393d7df8d173bd8b212d4c79664293ce6b4425ecef694288e5d7b4fa5723f10dc39bf5091dae9b7d245ac5f8f70a68bb7aca264dfcdf286d6d21fff2c378070427a92f6b7a85084efa11c09beb12eeb385e90c590dbfdb2c9d188b304e2f3d83fcdc54bfb7cbc427ca7581b735c0564e382a7ac334f9debfcd6f68ee1edd1d11b18e5e772bc2fe83c87e4f8a91af104cacddf4bc22d7cf9842c9bbfabd46e49c841966a0fe0b1879c2847a13eec0beb68ddfe846edaa58dd8806a70ab7df17a4f3e6ad7a7d5981f82f0a8faa181745ce195e7c3a1ac2990a4773665f7ae4cdef638a0065972a7c07312fc0dd9a5459aa0ccaec6a2139688f822019886e12882d9b6abab4b26f68b38c539cdf64eb3e117e80426260c4912b7d3be28c7f7c94c130b91800e055fb87931604a799e55764c72d1a8d66a41ed8eb7352dfa82ee99b44844386e861c581171dd5e72fb3d10613526d6ea14b92b51afb14e59a1474d4dc45c14d8cde93df337fae4eae97763405119d939bd98b01bb5598d5da9e6d55b9b240ea10e0a89b2100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b4ead0b951188693f914ab3013f6f8437fe9d167494de6fe596c18b0bbe099a984d7b5bf5c5936be4f357bf9771e8e9dc3e531d387f79b8e0713d33e623ab938d9587ea302bb811a794ef0f13e1fd18c603cc9536d3e3e135010f8a56d1a6f044da038c57bfa8fe7c1d0be64b23a2cd2a887400c76ded48ea1561395bccb0c8872056d708aa2bbee9d68507131de0ec65d2483c9fae977fdc18f0aa1c9ddabec39fbd917d1468e68227171007ac5e494bc6384ec6a54884d5077384f3b6c24da297c4b768a6cf2d168def6856e64c8f0b2dec4b0b6169aeec4a5c56c0029f58f59edcedf12f5191d63a510d2518c99f0c551a252a761f2d7eae28634bff44748efcbeba0ebb65856d1fe2f24ad80888024d050a621962778c8885dc9400abdbb2ada843f86afd412d6ef7157f2a03cf0e3fe3deb8a63757f99ffdc449262f61eb4ef4812a564520dc346882e09716a0388470719bf972eacb752abdcbabc6c88839efc47e43aef46b7787abfecc1ad636e81f82a7c927e0be0c5dc8231b4631b98a286c03b7f6188739dc8e2cdc44bf1c83289d36f6c2b1641d61dfb754d6b4efff977f3e7c3768df4b369bc3f5c4eafbef04288a63a71fa1dbf60acdc473770000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000881d0d181f188a9abd091c0f2a244258859eaca7d95bc5ece0adc2b214b02330bfd0529b0e4308bef0858e03cbac83ee5a98bf6418c77c99041d3cf0d0d5a8a728a0ba3ba6dc13f65fcb4ddc44851e0c238ed490a9af7b556167dede389c0ae35073fdac25bb7e3cee866cfd9f63decc3a93d4c0ed3d6b36aa14bbf2fc869645640dadcc67ddacd0b61f1be6f2dc0818ff1d9c1931cf94da6b21d75ac5325dfa9d5614f25a735dce7a26f7aec3dfd91aca36b75951139ca1567e21ef393222ca393765e98ccef8d77d71c65f81390d3a33fd1e1abffe8ffc8a4994b4693597f46787d5e3f6954356a2855c0d658b67ac4ff8fcdca94ffc9436dd58e946fb985d103639af9040aa9be46c7641e5abf72f9f974befc2ca500c5b16f83f95a9cd7312520214e371bf576bfced240f520ac211d2434c71d3faf85244c7b7f9ab9341d4fbc416f870d75b57d1be9bd01a01392fec1527141c838f5600926e713cacd06307be57b9c9ebaaec519dcb69089dd8b02d14c8d47b70ce21c140d863bc91683d7163e601efcbdae07d500a9ab5183e4b313a3326c3142868ae985e6375978a348940676085947a4e24c681df87b33c61cc7d2207459128151b9ca68dc1378c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adb7f416b23cdd3c712156b10ca4b44c3e1ae1877fc2190a7e7044f2684d4c1aa3efcde334fff7b5280966fc7ed602069b88226fd800253f93361e4f9faffcaad2b6a2b0e4a96b5eabfa5d5fed045300d24d9e29736e3d3876b2d89da433f1f14843808196ac48b0ad36157738e1ec745b394da0c84d8e3892f9cb25020c1450edd0285fa5dc8f2fa164d37ceed054ee3ff4c561fd796480c91660a72f88160202a9c64ceb2d03542451d8b5abb3813b9d4fa055731b4a45710922d5c65970f48e3beb66a4f04687231e85faafaece8f0286d00b95fcade8afe060618e477580619be59d215b1973fde408ac0fd015f0954f744c9bfbc1fc7f87f8df47d66ff38d174d66d8562b9a4059e9484aa99759060744c0c50da9f71298704963ee24f5e1525d4970be2bfbfc361c8dda47722a8b43616bd922b114c0178c3266b5507458ca6f8519741cce719de832299024176afbf241facf0865026a708c8d358d1c4d22d4f832d586ebfef1946eda53095499c6020d9bf8b2f82c9412dc6636af26cf9071aa356cbcfd9b1cc92eb4f377829cb35c71c129815ae36880699049d383b436633b19b6919d108696eed849ec62be45043b9ff75c1e62f9b37932d42c6500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f8360e235c68d4a21aab13ea5db1e50ab279851818db4454fe3d11994e7a837a306cefc9326458a9f21f850f0511d1c839a6912d19343b6d5706eb1fea6888633dee02a6ea1bcc4508da69c8aa3d57a60631634e9e408d1ddecf6dd5aeef345e7caf4e0c03774524311ee1148ba0bead9177c1f8a7e5d6e6d53371b927207721e680f46e4e719b358dc40cf851adcce4d0cd5401d581133a626bc7c3b16da1a285a1360fe93e746a497b72754387ad5203d135389419c6245bfbaa5c0ff91f634180d92b82d65d860d08951ec4ba1c1e00d82ddb1c9bddc569b4adc049b941b490352b027b52e73c327c76c7d4f0d6f259ebcf6c89c679297f1ea7f800b031ee8d9e6938dfbecf42b4a282bd9a3756613dd87a077dd5228a8cb8425ae57b416c1b895419a82f4ddeabf3a5659088a3fa932ee2ff36933d31d390773ba843967ded64b89f94a1e10a0249976829255714492694ed01580d60dbbe08b255b0fb05b3373ec9f8bb2ffe10dca62a0c6b8c00ccb9f0abb1af62e6a7f5e08675cac561650d4bc8e17137a61279ec7b7a8557ca8d1809aa9a8ed8baf320d91328c44c594650fd7f2e81f55d08f68fc2f01bf3ae9af2d5f487fb213533207150da5143400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000495ce55acb8a625d032a23d5ee00babca9c2f0e6f3573061b5390996d8360f007886ada58e1c4e414e15142444e17ac08de4640b60a0601b1b8e83085a95123455ee67e3d39845c98d19297d201b306e7f9e5d9aec09615b0f0675fd193e633758233c423be0429fa00142dcb1667899c11ff348a10fe4a574f191cf111382e488370afb784744202f636070773fdcaedad084420d21e940bfba2ec0390e41ea062f686fbe18f1079f4c79dc131c3d0cdefde437d94f60817844bb7017833410368490e6248f2e0cce2214a3dfb9411323cee9f6e2963297670d15bd2e99362eb24ffc3f000ebcb924c1dfa50c37a9eb4682d381f10bb272f6974d95af1e9b7ec319a664b6d336c5c4f96cb338c671a8df23ccf71f5720b4faeb73ed167ba051c5802f2c1072f1689cc737df8cbba023e8cc97143827e571bd4e36ff60e19dbe841b66666d39562de2cb09a565c4e3efda1733e752273261045637026b6c9be89618a59278d2171ce1bc91b68838e78e4310640f2e486d9433ba7ffc9a0cc140a546c7e1708e4070833dd4442efe509518058dfd1000aa2e3033cab1e7df0058a16fb88ed7a93928899083e98bbcab0d4e6de0041ca5fac8d046cec2794f2870000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2c86f77969e2371fc7bd941ca358e68075262e0c5012a7776069a9658f2d632bf6e7c1a2781cd26de115a1082deb8b7d797d349f7574fda49b2263f44bf21d1e066226c7a5a478911a0793aeca8766c2c11ddd58778985ee879a3a679df43d33cfa7509cf114bbfdeba906db491cb805188d27ce28d63ae8938e5558860986f3b1e7bea1ec49cf54c9521789f89b0ca4586133e9ef7fd8af9ecb8d51fa139693acf821c0d7d5d8dc746997a73ead111bb26834cbe1cce9c9cce0af4d93d0644864ba90200c2d7a10b13500faccf9f99f62f656627d0687a642d7a5299be8d6acc015f330e4f89825dabb43327d7229702890edb62c1ac75104241969fb047cbea866fe03a327a7c8319d69a174d410d3ea5003493700f39ca6070626aca3baa10d45e71f8613e9317495641cae27cae0a08418bbdfdd8698633b13709e7c97a94d9be3df44ecd47820ab96feddaa6650edfe0829b7dd5175998be3080547b34792cea4e94002dd37836baff8f9247b39af6f8451022a7401d9ce8a7aaf51e1228c5427b7837fbfdab9f16a635b808434b83aa244e0c12695f781cb593914e026d9764ac4365b257d730fc438a85630a3954cd2b952d9b850bd9f89579fcf75500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cda1ffc827d00577af42e1c7628bfa1ebe120a860e7c60de5226ee89797d1b9936ff55b26e1bef563d9776a7f341519ffe77995ceb30f7008f7dcb1d014ad1c38d5868a3ffd75b9b91122e3407080217d489d0c43b6e45c6e90887f0ae9ce200e275fafb1d57aea8f274ca789adc9e55ae9b15335fba85d1df27c553c08928e4ceeb8f866d888104282ce24d227149fd52c4dba7cb7b337f606cf854dbf3b029736a3be52fbcdbc570aa1150aeebdb30e9f08707fdf87c16dd0a1aba61faaf6abbd9cbd49802e94674b30a0e15578d732d3f98fcaeed235558f0419c2139242d18ba31571b45e57ec01d17264612ed2b3b50b99f1465a8ef96d48d3af13fdebd71b8bf385bfcae836d18b33ae456178f31833eaf2a64856e9aab44e8678b75b919c9ec577a921196e4013d160b39c5b72354ae57de1597af40dd57d80d7d7bd30b312987d3a8cb868eb50697a7dc23a48722c8788153211c4feb4681509e48b3b581332e7efcf15aa8cf567b774cd422177780fe708e3de4d3210f0c4bc7204ccf974117b69a5da58b2e81745e79f5c68d9e9ac365ab05e210a1d5e9c733ba58e0a714b257346d037b745d677732f96f076d66599a268dc6a9dea45a7318ab600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ed84d21340e9c1352a50301eb7a72af35cb9ba005b92073b9d48ba5a340462cd7575ead85f1846c6001e9b6290023e9446e6d1c40ea5294619314164ccbba7759870ca18de714759d2393351c842e7612d69dfe00952fe62c3c7f02edc951365e781dd54f1784cc9880bfde9fa659671cd8d969d3a3574c74083fe7a2bf3131e2ba017be5671c135ee5120733312c92f45df5aa096f9c635f5a9869d88dc4f3b988bd45826795f3c6437d7bdbece3f885e1e4771cd09f5ec995704b6c02938830923d8d408cdcdc37eb1dc3f2efa2ee21f432fe79e445a8aef280a818fb6c2b239bdcd222bdae1a34a608c0e4f46a8390cb225edc73b545db68868840330cbb9a5712c90b840fb5cca235ba574aa5a95ffb1c62df85a75d36f05671a905877d58cd18c4dadafbd583d7b08d6c621b0371bd2ea53ccfbfea2bf31039b26706bf2465a6e00c5ac7698855a964f2b55087f3694cccc4cc506385cdd82ff9efe42a961d04a9576f467c7a35bbe43c1bddcc2c1207e81af879d8544678e6975b295faf40dc79083563af8044160f82534b051da676bd01cf84053fe0de7a31bebf040c5f05ad01165b5d41043ecf9abc699be52889d83130c4648624171b0c399b5000000004000000000000000c000000000000000000000000", + "12131f41026c5ae82fc92974ceb4e884220b9ab8589095b4930c0609af6c32650000000e00000000000000000000000000000000000000000000000000000000000000090045736cfa40e667fdc5e77eaeaf2b1c8abe0f4e99ae104625fcf5b7983e192300089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00b9297c0ba7559abbd713d4ecf549a98e691902e030a01be90edd9712d6865e14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000e02f29d3dca47f390171e19b15d74925d499d678b93bfa972221cc5d9f14ebc0000000150027e75974401f16a26ec7e7e3e4ee40f59e00bac9b9d85e692ff235dc0ffc744e000015800c3454bc0513e3f0c2671b0d3432b4660cd12c910cdd5eabb53607328ebe6ad5000015800000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000070dbdaa80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000006d2335882a7e82888d71530cb2f78aaa4f5630b9d77569b908083014dae6e5358fe40e660000000e0000000900000000000000000000000000000000000000000000000000000000000c205b48401787f067201c3b48e5b2e6b52279fb52093960827c1e31e6ab6c63fdfb8f4cee0d1d895751f51e3d636ff1c4301e6130539b51e359900ebf05d4acea7c045c622631b4f4578fa5db64da7dc0bd210f331a87bfa9029ef9b8796eb4eeeb59423906f9e0d5da4ff6dc27085f4d3feaa27241c490ed476c5dd95deffbb85003a2232cf41b2276f94ed69394a235dc67db17aefa2b3c412dd6487305700fb673f1a12d4ab90778fd51dd3c56bd1be98d9920c32c9d0fd0a9cf9bf272686133813e4e1cb7f83a169a5f3903c34ea4ba179be7af08fa18513082d036ecf5af4ab3e5890881bf125cb9bd027e7c822a9c93e37bdaa5c9779162d7b7d5612076c4b7a71015a67029c83b01e234d628a3d308d46ef5d68822e585932bd8574a6ae726602308fe35af0966d201ae8aff06ed419d948c9ace19bf402138f3f34c8779d10bc528022ccd81ffb3f4c72100e6d3eed538182d54eb82cd8234b81f201ad3656d00014fe60eaab4a4b431e497c7cab623c3d914d0978022613f0164c8f10ce881801467d5c7f486b0624da7b5a013035f332a4077a9d1f6fb7c846054e386a3eedc2c8656ba166e2cf41d7f2508c03b020dca89882a6915ea855800d27acecec03e033955ffac2a96a4f3c67f719b49fd2d90e5c71e5c4f6b704f3971b219c8798d045ca198d2b1545c58cf78ee1335ed8ef453d7f1a1603143c0f7bfa0febc2b6205bc49c8b96caa63f622237aaa59d3de9b6b3815e3eb960b2b92763280c730a817303e6f69a706fbbdbb6d70a280ea5e5dfe2921efe6a956a283f38aedf8460d2bf4d784fe571302092080488e970944dba16b1c4d74cfdd783a659f3e7d95430b7ac17ef70679d727008e0a3fa615d67cb683b6ef77bef18eb7f10fb9b89fdd217592f3f9d9f20ce5382e93218701781d39f5bfce54376c2da252af902fdcd30a39d086a5d43d44f360d40c1a8abb5c560a0495a8c64c9f14e4867669061ea315e8fd23c4663d5ed46966bd08f0022c0f25ef6def06e57422e105cf7bf4ee4c148350c56990b932b385be17b3a919493cd4a8429ee500ab00bb807fd6f5d42722d01513e5c997030d69837f5e4b91c0c85e8dd32c47106976cdff5922c73c49183bc2790faa3fa68799b6d5b647b7bd7d6498057806a6394b9f8d9a35dee85b1e6f0cdf9e02d92d4544ab3d993257fa0a59e76a4c8e3b8ad074cfd8e7c2f40029cbe69b85104d0dddb03b844988e3b381e8e90ff99574a33e43ef9054e9ab780caf61288d7e555fcf2d1a6cafa1949d10494484cbcba8812ace41ddb16fe3780bd6534186c252d21a997a52b2aef1b39f11a36b4c476429fbc68fa9ad2ff69a0fb08d7620904b73f0c11ca6baa7a4f6b24f25dbe8be56309cf16d1d752cc32b06b25f499e7eac9c5a3962e6bfda6a3bc9809ac32af6c4118bcdf7ceed610de902b70527febfa1b1d8ea057ae8f952283d2409ec9d9494a1646a9103b24ead3e13399629ed668aed43f7b460d3a68d135abca123a0bc6a1d6d6f7784941e3fee2a2f6d950134ae13a4b92abda60d48f310c149dcc8e8869155493fa72aac46db08a73c90298d01e915fdbed6366cf442c0eb0d45a15c1a5c79e5d7821ab8ae970f727c05182152e70d957725dbdbfaf95efc6f2621672ef7cadba0b397fcdae105dbd0d2b8322a58ef220ed17d7d8ae4efba635fcfe59d6ae3a9a7a766c96cef1021beb833b26af74e72f2e2ac08fcf86bdcc57e440923a1421f3776722dcb380374d47cbc5db7c4d98b25845b9135f579c91c60469c7a8d5dcc56723bbbe5ed0aa3f5b361d1a97fb8778b67f0b0630ba4f822fb3df5cac01ff7e1c941f60ea918d79f285f7a696b3cb25652657d191a078eb5ea5755164e2fea438e42e8c97d1ee816913010d836a66424e1364dd08c093484c49040353d6d5c971fe1d54d9a2ac20395ab1f7a5810980f9b7c2dcae36d5b0198371e65d9a2a9201db6118cd112ad370e1103e2b88cf5dbb1ae8123d2e4681392259bec700a042b6da77e7ac30da297dbd4b995c9c20efe30def7e76941cb35fad4719a1f12f660d7404e0bc41d3753848402d7c2e95ce7948463991976c4d81544966178a910b08de45519722150dcfa415c6ae95e931bb6b52a04f3d1605cda57212334c1c6cb478ddad4b10ee7c9eafbf8a8024245cda21b038b242e19f6316050b3f7ccc35defe82b992b2f0b46b71d4b781e387be713a0089542ce5dcff398ee6421dd54b9035d3e0f132c28f1b6965f8488be87415b3211a5db9114667da0384a4a694d6658da0ab2ec29204098d77cbc6aea451c7afad2e01a6d642f4ba8bc427dae2be3648a6b4e440d1ec3c1f3abb7728c16a21f956a9be361b9d58d10e6a2e27ad56208abd231562c5127ee623735921530190c5c4523ca9a54a708854b09a8533dd378dfe274360f0bc602c023253fb0e17de63e9db7309a6417495821549bcb41884472600b57003315191ab0978f7f6105130dabf7a4c8a2ecf145f7225c15635bb09b024399203b9995ca428ea487496259e10b3c048e7059e2282411aeaa8223bf7042d8c91407e771872c9ef1b188e2b18738141334375bfaec7c737037efd01af316d5521ddf14fba02dd3c994b4f43775402f9c961ac4afa470e1273ecf41e151fb3ff8206476e5aa6be8243ae94817467e96c7b0217dd1765367b5eba52eb2e20f987d22f53fbe69b06e48a21f869b881fd8fcdc93c983f01ef3193fa10161462a3ea92a7aeed96c9ecf88a8a2851c4e89ea191f2d20df30823b82c475ec31c306027126b23bda0d66aeb19de731fb5b62df975f8e14d34a532e4275846dc83b805d3e2d15ea7de40d2f96847f54338be5947054099851528513fe744734b51596f87840013741e0f212979c8cc3e26642db079182b09bccbe47f13f68fe582e876df392065072d585ff8c2ea317f79c4784ff0fd740823ab4fb9bdb73abd42798c70c752ec2918a1f430049f3607e7b1c3e984b6c9791e0106d42bdc46fe554d309a1bf031b7744ab7b4fa2b99719e64f67da1943ca077ccbe255e6dfa1b992d6891e4d24a39a9e01446cf8a12f89657842cadea00cd1576fca3bc96b29f9bf4910ec4006c34c88ac0341994f617be1a09ce5cf4a863f1b0bd6eda944f354e8820b21a5088c23ee687061d77a8b4248ae7b6c82841b20597a35db4c75d2c8dd7bf74f220f57858574be06c7e4597fe413c518c44e6c56ea9105743167854e687493341d1794d6511278a8c801c66723b94f3eae10d3338014858dbf8d7ca6702c58f66b0cb3ec36458b8314ec1b40cfa50e78fab71e6042268ac23ee64409572c12f15d096f11bade0558f0cb845a6d50a73c658a824db9b2a09285fef48ab897d5896a0e6447d1b68ad11ae1813655ba606f72acb8847213e905024ef8f9820fcb17e71f35bec8cc03baedf66154a4e4df40d9cfa0ae5514dc1174e14be1c0ea79fc2016951b79706c0fa09edccdd0b3372d249ad341820ff67e64d67fe0c7b8c386f92eb78e198626119cddb3183264e9509d76a326e0c2db26a3d7f1da8ca9e5a98a112c6b124463f88d86e233daea1ff363c16e963e40716623c17f35a2249471291e9ca442b7b31eb330749a447b4911a552d172ef4d7e4714a36eab16fa7aa4312b4dc963c77b9172a0b02dc285e247e75ec7389232a71a081fda241c14befb1727e02f141b70be3d2a361adce49e4a2ce97994fb1d4577595d777c70dbdebd63252fc5156da810e11325cdae03829cf8eb95f673aa63d5ad0b135daf82c481e40f2463c8e11db07dac27d326032fab5eccdc83d974faf0df52b3b018568f8fe208b6c788894cb4ee722c916c19348b8c7905eff3b1eee18fb5e27b7900fec20520b416aefd04d4bc0a223cd382de6988419aba92239a617a4f603f28aafce655294cbd35df6e927109dd831ed2f3f4c9f95909c06384d28032630e2a6c1c6fe914d4fb136dfcab4a10fa6b9d997ccdb79fbc120a66c87e8b4b3cfa0ebc41dd95100ece4205a50cfe0ccdfc0944dadb5ae254c5f036fd5817d7cdb4f563a8ad4c0f4e3aaf8422c04e7bf37a398d4ee6a3241c9953228f6aa7f822d62123306cfd0cdccf7df68ea180c1b42566b80ded0dbd43c5e0bd0819ab5344aa815dc0971e15f2753be36a7350fee06263694bae977a62ffb064065e2b23489a94b858ad8e147818c3868f887797a2c4c32af88cd0333886f43d08d1ecd5456c509fe3a7530808ad870c0d7d6df666bbe34eb2882a85d205d24fa69231fcf7fef344f75d5f1fffab829c6e0115e65e90289b20470a3ef43bb4c538c40d407a3dff46b6f9160ce1779eed79a29f7b471d95ad93659c5b53389ab6d82d87d23abbc3c97efec714d7ece83eafe8fbd1bf089e2bbcce12f6655e94fee307321e0a95aad523a66b1da28663ab60803eb40c6cbf819f12ff68dc34a57cca3bf54f5e75640980146a22d98f10e94844ef024afe4e1ad45bb41e1132dae9bfe4b89c8e247e2d7fafc72d314849b1f398f2962bb0f9d8edad27195fb5043d56d97d89eafc4322af131e1a30da6942ee6f008bc09365a430d2d3b0f2a8da888ba2ac1daceb9cf2bb9ce9013b74eb91ea9aa54c035e76e46a50b4902da177dd749470fe9307c7988151400fbdf52cdc90af32e63a18de446ba787ec9fdf97f38c6b32fc40c5e0226556de0e8bcde64722fcd0d4e381eace8508a599537da606d6d13035c4d65dd51802f019868c4c438df2cec425821f4f2eb9880f5dbb7b07b0274a206656758149bc5421f89d20ceca55708753572c1df8babab776110bb292670df457a98d1499d3da2d4f8bff2c8f159d5c5f7759c1c666e135960974f7f1d59661f6eb625e2a503e0682886f4b06ff76d6243031e6ca72d92dbc641dccca781824392f1fcdcb87292316bc8c7849455bb2e569a385a25ec6ae646a28d79f4a9f305bb5a83ab1c53d286fa62d382d2eabefeef7460b469b4fbbfb369d93fe2cde6272ec652356519b18b1d5a225d626a483c3a9716ece8a815478eab6fdf481213e1547fc9385ec112f47b5eafed58471fdcb5055589aaf8677564b5cde3090f26e11d258220d35851354b257a027cf3ae9054a67271e8e260809e66f3651dc9c1ffbf75fe77182c51463bc9fbb49305ba2dea7bc95d8c07d81169284e4f4386c9bd6e831a6a8278810f40f463923005f8119940ea38e2560f90328c4075703285d77195903ad4904182f8a02fc5f603f0bb6708dd32308e6eced73ff2b847b5c93a6f1eeb45968f6089ecb74afca0015d998d70489468a99a433867c510ebca00fd0f3e62a918e2b27417a2979a8e7b6609762ebd17c78ab3f6b851bda40a26f11a4be8de084591713d5945d9a206a57bf10319804cd02c0c1773dbd154cb28fb3a38b5b30d5d9291de1dc6c65ed95c1d028c575fb5f6db544be4675148f6e01453333cd83cfc1ee25a3ae81650ae6baa8a54a7614a5c5bc402b3ba68451c8fd7c543c479264ac6b08d70944d8c9db10f3aaa6858dcec6c1ecbfd878496731e25018bb16a11626872bbf868e278a67d20824d888ee2271d3c54112b352078a5850b32bbf17929d101cf88df80350ff820afdd15aa8aac8b21d0f1730b3ddb4bc900bd9a9e69b0ef818a639dd8cd62a380a0124f22db3bae1a41332d10c5a2bf4c45746503f4113752a70153ea62a19aed45b1cb00113221bdd2b0f1007f679e3a5ae9541ec7b4bbe290d7682d85c3762e11e44f62f5e560db1d8ea1fb45a271d9d8ccc28e3ce2544003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000037118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000370d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000370a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000370b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000003729a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000037141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000003725e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000003712978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000372daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000037189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000371159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000003705ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000003705c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000003714d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000003703db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000372ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000371213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000371ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000003714fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000372b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000037305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000037280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000037223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000003717a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000003708858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000372618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000370f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000370e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000037172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000370b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000003705bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000037137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000372e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000372297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000372608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000003718373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000370422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000037204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000370afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000371998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000003728d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000371da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000003721d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000370ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000370e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000037107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000372f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000003709726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000003724f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000003703c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000371fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000037205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000003725110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000037283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000003721cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000037094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000370c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000371f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000372421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000371fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000371bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000037304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe500000000000000000000000000000000000000000000000000000000000000370000000000000000000000000000000000000000000000000000000000008100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810400008100000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026f6aa2d70677791e748efac1f4a71f89ea5684e701a9343958934f86dae001a29dd253c8902637e82b20cea3754b49a685dd257c8a762e7fb0bf363231727678d10c2cb07a1fa2caf820f3b46e79f585ed619ad08ffe05ea045a35177d33a34b4492b55dee09f47a698810435b160247702270354cbcac5eb1eb5f3d964b37d4de787f883d4fd536ee9d3c823a6c360ca7c1701aa29fe859009bacfed71dbd7576448ce988194e328c1945906fc34689f4b2f87220e4517c8d0db3a535054f4f54325d3a78dc4f628b7f1bfdde75359b65f449b71d2b652967aa8f2bb01440e15d39975503b79cae7c9394db6df12e69629096aff00f247bab9d162e2a7db5e3ac15d6df95fa2747e058ccf3650fa37b27173088de647672c6f2c5c515a518f27cea9d92f45ab0fdb9ac5ba24b4278c8b0afac9d9c8a7a28f8b0b86b35cc6b94fd91ac61324b80679e04e0509bcbc5af63b94ae3557e7a05a03e2f8d7f266dc8f65366fc17488af3151ca8b660adb4cefa77a81fcc094f6c98afe6ae85cf6058de9952ac6e8ba8892ffe20c9d0499065f0f289ff7117011057747e439a3ea303901002bec3be48e821cba255a5ea20ba6d0d9e9c7b93b684cd958ea018dbd1b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000965268f7886a3d73a01dc8ccef07587f99cae0a15c5dedd168ad4c5d0df704e97657349fe90d034be86395ed8b6278ec7803f43922f3bb61dfb6e86f842f68db05d8777fde23ac56dfd384782a9894df63a23e7cec9826d60c1038b67de97480c13927387cefa89b71e09056abd14f786364ae145514de986f8be522973a6cdd42f35d1fd1d6a5a3b79b9e43a0665e04cfc06a787212d10053d459d2f29f6d25dfe2b06a8dd822dcbc4f0bd08a1b49034fb7555744317fe6800294cd1c0b69dd35170fc5204c873718f70fec1788e8fab671d22c4bcea975fb578f5ca22af2d634f8e8c76d07c009750f80a00d486dc2a9b8aef95ea2ece46d3a04df98e78f2ac781e3ac2521c478d4fa4e20cc654b50ddc232bcad0d1344dbd366c6daea764a52f5961ccfc9e269bd972a0f9b2fecab2e8d81154d9a0e380fece0bb8ca83829b843b4b558ea76f341ad85fa24ea0d162d0b8e454dbc992711c7465c68aa68ed2366b14d566fe05d6a449fa11d63681ef4204c6c365827ac1e66ced1d4dc19203377f6325437c830220c322f03c56a6e001280a46baf91cb2b8ca305b470f9b6e515ecc844cd6dc99871328b6b00389b036011cf3cc5e378d41f0c6329cebd9400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008383d48cbce4b15a4c913700f4ef693d44b51dd29c755bc1eaf22172b66040d1632d298bcff47dc50f1acbb4b44108fdf878fdacaa76b7c9d21b43e18333ea25379b9380f1e52ed500bddff14d399d5862dc18153eea799cb838a229048c974f78cb8c1ab272c2ac9a996225653884f0ab7f33c66ac184fb1e82b7cd171fab2ed28caa31ec0b800e1d4ae26456217335649330c9f72889340c84a0e6863203ff387bbee8447c058c1f09d4abb0e21759db2a67a733410aba01a888c1e2de41ecf7edd5d69b7bb2d7441a47ed5dcd62bb0f12cb7d6e54d36815c1e5b5286645e57ad16656ce5d4477b3d7683145aeb4f0fb175e5a244843d2c2c448fa837c3a76330d11cea71982a4f4836c4efcb020d0c2c6f9fe5307958bed9556a2e2ffb50b1955cc327b3c3fa800d07b6235e69e6a2f19570b7433113632b7cdf3b5b8c8e0b3aa2ee21591e7f1441bc1481503eb2b47ae59b949a3d708fd748cd9383e14672c01f8af284198ab0ba5e92afc1f9a4436a89c08697bb50b6feca84a15188f93e3a3f41e1aa1751ce7eede154f78042c36d390f66a1ee495d8a28d7418dc55dca6720e70f869c221212713fc649bc92bad52e91e311a3f0386d96a81279c8aad0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000271b98817aa7391be82e51bd1d1699dd9497a451edd3322d803a677dcfdbc05bc78389c8f16bb69e37a951148604c3f784c825d11c78b00dc98cc0018ac599cc8f9494535aa78f64543bda653ca1fb7cc061605546a88e8bdd006f6748fe08dc61500e375c2756957eb5b3b38826f39251215bd3eb0991379e0ad97e4f6de88d38b3210bc767a47c4369144fc071e71f32824b465be539688f3b7a0b0143edc00d75259d30f70d76a1120827e451d1ef7dead9684cf0334025db25c5038d8af66b6c9b6621da8f23cb56341ccd94fde5865e23b96c6a0c8e8625cff54150fb3cf0917b9eed4e42caf95ec99229da117a641946fd9ed01273a3b2fc7f5c63761546928df9cd5c778141c1190c3c5e106695403e27e57712815eadec857d5bf69ae60e89473f6e9ed4fbd99048bd6b100a6549b31d49cb3d6816becc1b31748b4f9fb04e3ec08a41eb231fcd737a0c4e4921722b160f5b0db1c8f2593f265d763ced78f945f253b7c206ce6455326ac65487d6882ac764e44651cb3c1f48216f5f92467ebde50848873d5aa9ab16c3c8b63efd46f4a1688d67bca855f8528236251db830f37f19fe231bd0637274514007665dc1db97d213f23448d44499174dcb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000918dc0852b997a076cfcf48c3b09d63686b03a637f5d8584acf7a7722e6ea82701b61ee88aa24cebfdb4b4190c1825ac16f7091f431c1af25b7900ce2b60251477221d2205268cb8aeb49cc94efe51052107ba86741fa1cd6c14a61e341f34f5030da73d11b5aab00be5dae62c0da7d6783264a451010fd557e648480804b2fb7238da7512ecdc92a8a5c207370c4b906c1262770d809aa81b518a0d57fa97906745a399d2ec745dc0dcbf193fce91cb5752e5df0a697faf3d1770d8c0a251191f123bd4f4f99541c9005a4f351721e0c2e499d77f571d414e5fa75b50ce7fa8d8d1afe21b881185b9ce4dc9b057ad0dfdcc17108a716d900b497325af7164812ac0c5be1733396fbe2784ebe666e1fa34432f6577f171ca65363c9d51364bb2d01de2160df89cb72206ae1cf7a3c535c581ffa35ec7cf372c375749bd575492d8ab2cd01f4443b9f95e22cf38e91fc2a20d0dfb1fcf54a777ff00ef6dbaa099ba6d27e5226c6786c5a2a3820e5a4146850db03624eadd165bcec564450bf06260fc9c21073dd7ecfd15842fafd427cd92fd853d65320c50b581a73d19347fa822da1a080df64d4271cae4c15bbb15a95945388af2e531338b750dcd6b2265d000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001738b5b8db4368145be3bac32fb351ca0ee51518c35d2081acf8c917e837630eda189dba52814df04559000e85731e8a299d93916c3438d375f054f35fc3773048213ddaac9dcd08f6c0b12b9b26d15ab6a2ec6239ba1a4b3b6b5642dd18e844c7a77ac8f24f4e029145a98b887d2d475b9839b35e2e953ef7fa5d668a82d3ce51531bdaf6e08b2814f0b926d630f2e1851f4337120f3f1ada96e19237c858e18964805c2127c36bd40074241439ef25ce6608f389a744507fea163d169a8757962717c780a45ea680aebcae2f38063f491782ee9d9a3ad56f40a7887c0ec3101c552f8324e19931deaf3b1691e2dd9244181b010736651b21ded2b4a1f0da0dbf3967c4112e311ebef237f34bc2d3618a018747ef4e6d02a8eb143e0a3f092a4343b08ed2e4db84eef8fe6cc5534fbd09c17e75c01da586613043757133b0f24fa81db8c2c0ded57f1ab3705d93a1af40c7d0f6fab7d62fef23c1b4c24ec3717556f466c676df13bb972d9f8b5573ced2f4d8ab9750db91c7436b1f549e9bcc026285b0039a589e2f3baac05c374d9ba3e087bb49561b52cfa82ff8eaf362362b9a6f92808a0ad8e14ed31156f22d125dfbb234e06d414de84507c1d5f9051d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ef84877261068ad71eb1b70226b39606691b1fc785f6f3c0ea2d6d17ce81f0d5dfcb800473fa371c5a852872bcaca66abb30529139acad2df211ae7e14de52b71800d8c18648b7f16fce2a5c7417dfa53a37111c1d6f9eca537a40e75de300510fc02390dee6688e20a392932ca5689d8274bd8dcf9371c33591f8bb74ca087708c87a5ae023b73ebc16f824c8480040fd76044dcbf389eed95dfce1f9848d0572dc90737864155c88ebdd0ee30cf0c09aaf7aac0b991a1eab485c39d05ca7ad7721666004eb2bc897a3ae77ff64d194a20fb60ae3c5d992a222c78635ddb7f197f51e7aad906bcf874be231f66e88883a5ebc1285059030422deb402748bbfb659a639dfe5753e032758bd126c8b05483e9649172f087b320ba9028ecc4f77fc25df31d825e3f6c95e26ec6d9beca449beaeb2f5d9964e59847910ee1d371bee29d22fadc3133d74c2e54da24eaece1aa8c8c377eb013ace4395b5d89382ee9e314ff126b988eedd1926fcf3871e74920803e67be8f94c2e5ccd06bf9959f9ab16d4962a11daf16c8813909f96e493641b742e35a82c1b1abb399fec09bf0d3f4ba2fe5a47259d72bae2bbb60bb696793caf35519073a0cc13568e6ea952d400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b74246a38e70afbac767d5e0794486e7379e44401b3c0195e79beb149f4e51e2a9a9e427cf7a750b0b1c80b1e42f218ef6190307353e7caa5635a743d3334b63d259de3d3b6b0fd277ae0f9be9e3001687ebd7d0f2c35305fcfc34b4e4aba03390d6e2f152d2d215d35e7499d13691a5ca732204c6f1e3e27082bafbef5aa7f107a46abf0c990fed51114d7b463d9212a0c740820a47d3e78d43441d65742d17cc39019cebf811136a8ba3b54a4c1c9e254f0e1d13267849cf4263ac776ddfdaa898251c11d4a70e5025dfc1ce662deca83382893c52ed2d384310468fc0c9a199ad88b74df7723a653010aee52a17e758045ff1bd3e04bf66ca4d708e30df4768bde7385505410e3f936f5c663ad6f416eef6a813708f42f527b3a3888f7ba8197d638425ff4934461ac571e470948cecba07be2558ebe611bd9341d3c66f2e2c75bcfd0bbcf84cb6a73838d57ad70a4c6ace1553db58b9d8d9ae0d57e02bcffa468a844ac4487bfe657471941ee7c32d062830624a61193dfb1cd9ee079763a1e1e0ba860ef36d8ba358cca9199aa42317b3f61fe26aa00cfa98af5c66b7b6b2d98e9d4e5ee40c7d246b6556573cfccc5a3dd701b21c6151cd4ecd60b7ae2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011565fe99ebba48e6fdbecc1d9a6424515e52b0b719b0ae06f021e14335bd2c15861d653e796dcdc6b23fd6a064a79747aa411fe0b6f9f3938eca144656a887512aa37e96df5f011a31c76994d4b695cd8f8e6f2315b057b698332ef425fc01406b6c6199ccd20c8d1aa6840ace1becebdee0ceb591283572f46b9722504d3972d7bc5fdd17b451f9dca32bb3736a13c5b65dba14d521b92f2f174dab365e8f2a4f434347ce756c52217ed2bd48111d8e073927eb3a8429b3c62ec5155d7fa10221f1d26d9bdaec283803f9db99f770dd5ea00b6a48ee39b3c1535828dea2651ad4fb95bed05de4d4bfe1206e65e4eea591ac07810c121b9d6b1e480a7d0df8c1decea28b14b22746ea00a7bf2e63e389d4b966da726b4716abdd7f752f7961043adb3da6553567f0cb78c4381472db8eca847b02a827d99a00aa96f2e28c64dfeb8ef7f055694dcf99904f0937fe6e86e1ac0c6dac929874cd784d86607380c509b40d33e168e0f36089bc6db654f0e644e4d14bffbf748686700893238ed4c31f6e00d60fed1e9674970e2e507bbbe7994d214b3dc0a2204360a4043be2f7f2234058e47c1cc604d99dc515527d9c2506bc2697edb1f3bf3b6a1b1ad35dc6a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018f4ece23fdf4622c0aa9dc82f915ff4b34b761aa4adde7be57c35d997c9e68e3b593f168654b5fc1a5e6e6c2832855e8758c5bb24fc35866760ecf17b602be14a3c97875b8937727263b74d980e34c25d7c2662d2d0e16a3dabc0f3aaeaa666e28cf44ca95ab4309ea169f680f90241a5fff10b7394a8851ba88cdf706c75f3661b08ff293620519a4c4ac67bd1e133a8a987aff91000e2cd5014b669343d1db8d13bbf07ce672e33a8babb4c7199fcf28db5f41484a8a0ae7e08ae9b83f5d7c4510548b63a22916b85a08471ef38ebb6a03d074cd0a0c13a482252bcc4cc853a05156814a92a03aa178a3ffb2114ea9c5772b05bfaa26b08a6651d58ee326f8ab0bae1715b259c157cb14580353b21f31661392a332386036398c657d6ae3b17cf13a3d74da026431c1a984be5f5e6935ba05234a21db3196adfe865ddf1e69ea2d7deb4b98d7941c8c4b03bdffd66fa94ac53cab3e56658184f7b0d0911412beef5860cf3989f7543008a107db70fe829571cd65b6bd68c5c77710412bd95f2d4b411d85f1f5f327884396a0be3868af993fa67ffcadbd7e18b38999585d99e592391932c93bb0a201ababb910b94d946c419da5c81eb8dd8c7561c6d0d4f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087c90f3ce2eada67ee95eb539c2e7880e48f0a0e71faf81eb3c1599faceac61c8dcc0860520fd2f8fddeeddcdfe8a3a9f81aaba5a0c34feaab8a01152b97d7eeaed1e86eb9a0fd5c219519045745296a156d3c679ff13dd15edd4cc110d9d806e23d1b504e234eb8b669b07b8ff730b6347f7c0c70aa5c058e63eb9c27265b1ffe2c7f7455fa272b37fe19e365bb47471cfe316c0f90790db3435cf9fc51a38f88f251e2cdc4ce8c76f9fea6f49793c0409abc9aff5c96892af254dbb528314219971836f86f6c29d48cda784e79fef2e55c8d988c687771e4d9d3f288e753a39b0256e19b4c2d6168271f73f3bb45e79b63bcba21a67a8b6372b9b85d4750419ff55e7a132edf5e0dc1aaa795e066f53694ec3b573db0d8f243557c453b1c93be4445bf86021ee8b60c5ab20b778811b27c53e66ab24d938bfbe2373eb7c51f54a11cf9624a6b301b51daee08427acdd99fed57e80c109c1ca01e94c8257e8efe3ab1041a58b179981ca2b9d8164735c943ef7213d235ad7571cdadb513df30d9a54a329e59b490234fd547718e1f26613cd864b137c61b58419b63611baeff987a61cbed63c9df9ee5919c9281816cf6b7efb423136c9796c4d0b9507574ae00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002689dd7a75f816960f7a91252474ea7f911a83d4d3c1e4bc4334751c904c6dfb36776cefbbb11213eadeec831b16fe5409645465d15d84ca6e8ab414381d89e627a671ab2dc5d9c225dc3c85d5fb6bd43b358f4bfdd80787bd7bfd518d7b92070ebeb8dd42ccd71f0dad90673b5065a534dcf1aaf631a1b3376c09b741f3c0737287f17687fdf09f02a3d117abc69aafda8711871854365fdfec871a6f286e5700c67850db5c12580140763c38ddd72147c7ff3ce850fc5509aa34d08a4c8b6a9c7d85a57c9c12534de6735797a06cbb50a903c8b4b13abb7e6d84e0d407a3c177dbfdc33ff84581bee452171140e9804d58e87eeb934186eed5efcd32477a817e1456fbe4061cd398e4c8923dd053d2ea1f0da2003489ba2d6635e4ae9e317c7e309c6e361c180850c0642a16b13564edb8a3611713f67301e1acc67a1ad7c79565dda5dfb94e0d04853db8f46c70d8a255d3593dc458cec7ea08ae99beb93b76e759fab60fcc69a909f12149f8daae691caa8182a20cd0bc196705ea43fb2cd97c813ed901f0b3711af77783973b5103c60fd18ef73a22c32d44b51d5333fc4893a0a70afc1bb661900fbe6be282c60d8eb595a9fbf6a3fc34272b11639c34000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005fc15e5d4d44885d4b4df96a2e516c11fdea974c7c26884199efccafef2f4738b74a2fdcaf529becfee1bfd35b78825e066e88570cb1556e0461962467a94be02ebafdf2f02a32f8a832e8a8aa43f683a4a742749f9e6aee5bff4fbdbabf17546538996edd625c31a1c1bd46208563586809401e186b1338b12620fc58f6cd26937da25e5de7ac75a9f91a40c7a43083300f30badfd01d953dcb5f2a16871836deb0c684692a0f78077bf143d03deeda6b3aa0eecbe25cfe555d777031f0b5de6d04caab051d6caf19159f80885fb1898248da7c068781d20de00c8e66aa1fa52fddd9d84b7be199b871b1ec23df6a6341d8ea7d8e67fdda057c3203fd6ff9a508e154d17dbe180911fdbf6e6efdc2542b1b6beb0cff50a908dfade94621ce400f22dfd7f43959d13a4902f8c42711b85110ae7c4c5c658aebc48a0128b52dd12866710cd6382803169070802875a1f22993e3ae45da900323f3701e59a6774c963163f5818bbbb146a853316359ce7247bc5e7d4bf308a660a21a242952ef66994fdcf339387ffb4929a8a58d160c2bf303b178d2d1896d82980f449b6ffd2265f2c1532e5c190df1ce69aefce2a8d4838d6783f5c7bb5ae99916b2932406c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d05b6055c2c02e1571b6fd9660b93821875c7a2cd206dfb81c73cd02c4f789642493ecdb7ebdc6d7b83423d3bc8114a8e78889d3568eb97dd925d1cbd9e2f29be09dd8a3d4f106c91be0e70321e15e52b92161aa3bd5a33c5090eeccd25463aec9bed8a4979a70606e86b4fd82636a59b125250cc8068d2c086041386b402015584ed6f612ef44c541e92192582e19a81c0e14af5f67cffda7686ddff1016e6a4fa3d4214e4547fecbb58bb7738232d1502a7b579862d7ce709fe2a615e9459ba782c12509859c4d38a588d1ad286639274d3415f6aba6ec00999879df12e46eaf763d866d79be5c8e7e7d249d04206f11e017f292bdc39cf2ec258c9a9d6fb370295f511dcd443f4a03ed094537ac720bd70a462eaf52e125311a422ba87fa30bd8967c8c1ffe281fd059ed7ae4558cfed25aeff48dafec28e4c7a335867bcdac0986b5beeceb331df45644525299c205f5ee85b64db6fc6b023a7f31b85f88cf687dad5ec4ae7f1a625e75311c1aa34d957c815239f495582663f7f205b078c1feaba7b324ffe67702c8480eb4af36d7df38e490349c6a32f26ac3bea18535bba6a99748b692f90c9d1d36db740d3e8f92c236d299bbd306f3042ffec074f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a026f5387398e61e17f5c0ecd34dc12819dda91b146ad64c5261105ae8b1002561c1a2fed1b722a82ce24545d653cc63c688d22e63856fb91d8a012b86f473bcd05b52c698b12a3121c60ecd22031f6415b0ca90fc69970f6ac0736f5592dddc0849b5c7fb8a5c747b34c0aa8a45a994b98ef3be245779ac6d5dd1ae668b9e0215ef06b7bed7aa3c57514fc68d7b76885f9d0501d0462d951c21e59885546fcf0828e76f7893746d0e32174a3cb7ab57e159818f0b4eb131dead0a801d148b324e58aa013255c12dc0d278232a41fe547b17e25e183f081cbac0dd60eff4c5876c663b9c325e2d8abdf2c76464dc5c179c75f78d58bf1b9ae3d1113bbfc06bba41ac76adc9e980e619d2045eab5be81f3fc08db66cd9eb482ac48bef0ac5cedf1a97c00b817bb297069a14830d245e44fc690b08ffb0a4cbeca40ecb064dc3160f802734b36a634bb4e99d81ea0e5c7d3af1a28d69877c898f4e593a1b878b0f6dedbdda6465d214d9b55fa4eb425a7ee333bc9f06783bbe44d666a38811dfc767d6af5212495dca16064ab17e98c0375a2ac59d77787e38e533a4a32664ac4044e2a7d197b0ad12fb4ea90404fb064518f4ee40408b5a587dade3dd164a74100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002dcaa50b3271d107fe6e7b2537a5b495ea2c37c39f782a284b19cb46e955e81ee39ed78ac0df31b2b120561ecb72affc00298b31923136db3cd0781b6d8e10167738bb3df42aa1141ff111d478d465de58e838b632eac107e0c74e709db8d8f8c74fa74828da7ea36b9b0a7245aa2cd14b8e0c07557f789af1047345da6c1ca880844ed34255788742de9ceaf813b6645b558143ec0c33a94c07585e45855ade2f8eb6e092e9b917af204288125a0abfcb86bf775156ea5e68a25a7d672412e64726e1362f4ae85f467bbe9c6591df18800e2641b53506b3375376f77e180345f80c5eeaa5b6aa134028b66fdbd01c31125040bc5f19bca68d3ea25c6f5208879b00ca7f354da8e88364f7e66bcfc355a23cbd26fa7f4fddfb2f4332a4a265fb5cb142ce04fed7d02f3f7ae56877f1b57b19746985f61684785575a0901244ce8fb6f681469537bb55d170090313f20628fa4fb91d2dbd583573c572e42a62183e4e1d90830028b51a0143d353fccd3df0d33c04fb78235f8e2aca4c85a79a14985fd2b0e89620757d30b7f508dcefb3b86aa63250aad4e8608848a3ce5c54762b48acb6af88af385f16dce7fcb24ee5bfde54a828ed92957ac7b5d23d058e3d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000694bcf806402d3d96924abf7418426f3dd0d7d77e9d13ca065c23da2426cdc9b7578d3f4687584f1b500fc83efe958d546fd8909d6b85a9fc5f72701dc42e45c31a7ba392da8614144662b91001dc9014bbc214770eba5b62f86572ceab569a9aba8987e383ae3b3a4f72bcca6ab983c7e2b9feb77d6ba4ec9dee1425adf78ace94a46041e8eebc6a5073a6dad8b2247cb955564ab325d616f642c76e23bb358b661ed480221bf9eddfc8ad209e87595cb1162ee0a012bc986056e0da57f1300863605bd2022f83b43c8f2c2c3154c1480140ee43638a3c10153c80c83750df6844805c7999a504d402164188cd49f10750f5db9b479febb479ec17af6adc07a56ad9332589b04de3ccf1a5e7a2480c93710ac555160a73b04870647d27e12f60ffc9fc2f4687857f60734e0a1857d0e9bca35676b680826e0735cc10a310dfa784bb0151196a8326a7d6c96c4e247f1abf09672c2810117adb06236f799f91b326133491d9490a6dc5506e4fd3788fa46f4aa7c818a66134dac9d567a1679b98d43c0970fbdca7fb5564b442c5af389569fd1d2762da8dd10cec9de18fa50486681e68adceaa158c3065ce00d5cd491c533aa11f4eb0adae9648433eae728300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cb221124a36d0928ed0e96e667a5143e66135ce6d68792a35bcda68c80b50b2d5fe2b981bf4e01d941bb73ceabea988ac797ab34824c2834c41c0ccc80353c1a17b3fffac94b64cd4783101e390a633ae5e46830a9d9596ecc39af1be7e6f46523c64b5f71e54a4769634b10f0af6e08f8c09e9eeffb375419f2f5afacdbc66bfc1b52e4f8c16e15fa2888c4ed787b6cb3f4a38807a86ac3bd492b67b2cd3ec459fe1a00a95881341a2372f85a98fb6cfa74fdb7ca6b71fcb431632f82ddece0611ac65c1aecb940d1b7c5886088cfd88c21bba2602734b2b2f83e49d08344e01af693c59743bb5d0c722614aeb00c17bc9f694d290a82efbcde4cae6263c14419a12c8188dc4b8fc63c30c701648119f4f3b48f3bc61a3bf7755a71d31eef32c8ec002c693dd1fdcbaa37e19b9367243398033563410b5af26fb2c54eacd79425d9a4dd6ff5bc63e1700a664feb92c0e99a53c4f1bf39b7ccb6c60ee67b2d4643af30122db369f7b088153d930798585af66724a2852b86426ee74bddbb83d2022873dd830fcc740149396525ee74aafbe4f1392e01210f738a601942efee494a1af342cf439b136f80c39be3a04004f870aaa411a60e0ca0f5744961c530b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7dc61fcca37156a23451b6f0de365f8aafa30494bf09d281b6b35b61b1ced098b45af7f8507389a200cda9fb3c149be8b3e436b8edee907c68a6afe49778b96e24417af4951bcd64cf78c8cad1054eb1d7fff6d1958ea921e49df7dd63a89dcc42aef93ab23225bf53127186cd950c4d09a3b8acccac2c9c4874f0afd235768d53f012011b5cdc341ec77cb4e629a52499781d36b675e0fd3ea9fc82be18fef8c4c3f48102b1872b0967a93ff8042f5b9d0a7d292f750a75a1f076cdb8e62ef0ce0db0e39e689bdfba5a1be82f791c1d7760937a6bbfb8b5d44c54c1a8459d2d57564dec639d3c7937ac1957f1809bccadbba2fa38a518a2dbdf54043f68a357b1ca9ead77ebdacaac38914de4285b1e94f2eb49434331be2e5beb320d3ae5718938cee192feee92eb7184f81e7ff71f49ff703aaff093ed65f94998d3f8e83073e57322129cb90503320aeea7a470c996196f3005af6ac6be128cfe16d15afdc03a2228037415356eb7b4accba4541c5112235e0e33d64c4d5783b50b0a68369cd58276aaa2e96e88f456db6dd7e7fbbfcdac2a0b48436a5332f1357c91d7463e54f7d04c4f843c514317006219d03eb42c0a7004672397529e82d039b9e4300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001414895fe09a0f18577187cd5539134cb9c12515a555d1abdb941bd8cecfdb8a4abdb0f337a79854cb0edf3646740064a768af4701381a85a960b84037718f6f1b7c7c74a7ffd75f41cd468cd33d37b592322c11f89219322b0dd51a7f3bb339c07dd239088494e78cc2c8f535fc14509cce301c45f08b0ea77ce9690c064ad4a0cfadc5948c6aa861589405ffc035b425fab140c3d2deb71eacb43b4207360b318c35e5830836599a8896f73aaf8fe741199e8dc7508fb9d3c4390a6e895533f1313fbcd3d3c9b232cd53d269affd22265c899e1366be7856bcdda2363145016139f954248cb5fe44900c31f648991397081bed3800f6b9a6bcb4fd02b532d400c71a254f8cf40932f01527d456e7aefecc55b0d094e476f1d9e0d8d8eb4d40c27ba8fb9b75372d94e3cacbd7c50ec2195e48f60c523eac92f1fc5b9937e3f70e5fb78b181eb1e7fce541b359b7b672635a7a7a2b4168651af593eba5151dc51e1f65845c303fde971860465e3d381d49825685ef3af184f6989168a324a6e659b2235de9b38fbb580a336ef6dd1cb0bae86fd3cbd093659298f6cfbc823787413a4e1646f36156c86eebafbc89fbe8cf13f45c9a3ac5f0f74eedfc4f2528aa000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024b160d58e76a18eb1345822ef8666869ddfc205f8fcaa892181dfe40f419dacf00238c54297a9179a0d3326a3a6953230198b941e00845d6652f6171b69d1548d6c6d157d9b9ce3ced36c9d40879143743ab2f3535958b64a843088a9373371b348b972740c50aa089ab7d3e8d109d0fd56da65e2c303805fd5c57d636580fee525c3deba43c352561c0d9e151a4bbe3db2cb0e5814a8b090ab1aa98702b810a16f88a667ecd8b9b5cf59d3fa8ebe263054c445d55b3df64e536c2cd93769d4739d6f4cb5f3315668c597065bf0a90ad2511e16cd1214813e39c2bbaee8f23011b20fb26a5737d34db97cc32a75b69dbe81e4fbb7b662e3cf060805f1c6098be41257b6ba0182678aec50ec2c637883fb64166cd5a2e8d1e44f61608f1e40ab4329a5e1c1631913f7a8df4b5272378963591bead0491563a9a304c3fe265ce80628ebad2ba725db4d686f779050f1a450bd9259277e2a4aeda3efa9409f5073b32345cf9f778b6d11ea17ef5b36dc6ca14ab7182f79922e78b747badeee466fec53c0e97e1bd4ce2803ab72e1e07696d90c5c20209403ecf083f197ac68f0f293446c5ba6fc8fcee3738b4be562f02480b0cf1c3781c6d0743aa6452592049f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f3848becd56018c11fa13a6b71f1f172e87203b7d0d19cde6a5d65630d88498bc3b20025485731dd77019f617cfb6ad7eefeff6c0d3e61f807eaaaccda35899b75f740ebe0cac677fd8efdfdc153e8b830b2d8c58582c4a9b91ab1046e14cdc0ebc34247f757943dc5fe6f6fda6d936f0552b5ecb2e46f46ae1b592109f1fe4dadb75203cd915a55e8df4931129fe9d8fed3cbf55f39c3c4199168533f9a7fed8cd601dc416b362a8025dae1e9b0b54d103b48adfe21b41c141dd97b5ad6b530bb3a26f306810b491539bc6012432f302a8e2313b325aa69275268753d1800f2ffb445732569b683c7533070398dde572d95c3dc2d537b50a31e90e6457f5ee93bed0fc2962a12addc89d7a9753ae5051bb2b1e67a3720259da67977fd9c56b9ed5bd514ac1dbb6c5eefc6ed44a9bf87af118d5a4b261e5d4e9e4099b3a19b1146b5fe4c711ee817762690e6cc9aa6281c3aa7a4c104628fc3e4007b3d70ddfd1832ba3325f34f1fbaeb034073956687eda700019b51d56bdd490bd1991f5c52e85fd45f6695d31962a9717e45e781a33fd0980143a534b538cde7c1ad819d2685019c197b9fb761e7e1e8847172aab0831764063bf990635e56e7bbf96bac800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008042d5c58b4e0ba88f00fd7dada50dde6747189716e4c7f0d660ebae9ebbe68f80a6f740c97ee6639daef8b63d5199787a282453c17ccad00617cd4b99283df0c9410312ea72b240d1a0e503de26234f9108b31052a436de4a853af3d2295bc70e34bff40bd4c05cad999406c4309b9701081dbcf4bafdc15c6ecb5bf3a84a1b79a13b806ace42317af60f64975b13fc4a868e0f061fb72f166089718141c24a2b3ad7a168ca0436246c758f42427719526dc7c1d44da15c73028fd814eefbb597eef13aba1063bbe644a9196a95878a0120657a82e61ccbd1753249d1bf92dbca07b496afe5eecfbc2a88dacaec05b62b5b719245fdaa1b7ff497ccbcf811b2ce8fbe8fb9191b06331c373d176b3286e81cf7e3850689dc4a12dcbb5ec7599e9cee1331afcc0f0c327bcdc42694dd221c7f14873a3fe41f7509e106f7060812948a69a3b9cc9e5a15ec48208d4433674c41105d9b6d5266927d695c82c9f854c01d0e49be2b3850a8708f02b14856044538507a2e286c5b8eb6ef1a67d40f5214ca8b0cfe02911db16e94739e0712f73c85c4d31522b861c3aa9f734908a9a73d8585e3aa8647b738dfdc57eec76bce2a9c85ba24f0625cae1f2794f146e46c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d28a12427e620171a48d46ce4ed6b2df655deb0a37f04f1a6826c2d4e0c53b231a5d816229588cd06ce13940d44003256993b62daa5789f34fa5fba2c74d29fee2bd1b0cc8837d20600d11d9fdd684af9bf0e8f92d114318868123e09277b6fa99051d45c0a5c340ec6db436279c567d35f9fb76b8087588fadc85fb031c3eb585d9fbc03e2fe3fcdb7b58526e5a10143f5c3f66a1c602e7aecd861deded1b2454692753447c72e8522ad0fea8cc28293dac28d2ffcd50a038c01810a5facdae46469714a7340283a5da0abf26bf8ba8c4424a51a3591405be505096d7b884e5fc4d75bc89bdf88abad04faf366127ebff93fe7b412d941399874a08c4d3b3811853afe8b10d42e57ac87cfb1b2c799f31981cfd09c1dddc7a0dd8ccea32ae5c3176901ac2ee8f3fadcddf4868b4219be9c6f8c3eca4372e2b3e7c1e89bb29b2b86de8dca25793c1d4732b6b2793d9fbaf468203acffb1e1b1e10d22df815fc2b32427a7f6ff4825ff06a84ecbab55cbe91052a1f701fcca4ef6ce27a2df786c3ec523e0e9e2d4ce9335e0ae026eb2f892d522e57c9c8b0e87a06bc225b797d8a5b4c0a3a7af61c9f3d9bc46aadc01b5a8629e3541243d529ec025796e087bd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6388b6b69cf02c503430031107ded36679239a0264addce0f47b863b1ea267e8f574063008aaa1ee62897502be7b6c2f80848feb6be50878d7368bf29edfb7a1385b6d9be37c31be8a9aca4af02ba12054a1bb3b3db740d7178981a037952d73a5fa619f0713e8d1b350c9a0776cc36018694b3b64910f7ea80cbe8d855bccd443275e0523abc8ad7185cde003115024e253101c1e9116167dd085a14f97b8c0752f568a5e779b0a777c03b5344e5344083cc3a896c1df96ecbb26aedd82f4d7bd4ea5fa70e39b86f504197d5b25488b40a2874d3104d3c31312444665dfaa8e96ee62e97c1b03b193493489c80a29cb87393f852911d57f6ede40c215ac8009318fc1a48a3d08111a2334eae2a03f16900dac11e8d2a863fdce3d7ea10544646d0eec5f1d117d072226fa49f5407f6fa9ea58367bf739ef8f7f1145c8b65cb647b407c5fc441938eee397cf7ed582364ddaa9b1b09cf029b966ba497a2433aa1ca7f4acb199b5fd039496ff88a593d92e698b92d4b61d88daf3d09e1c82c51596ed51acb0c7c4ed1f5915b8443e6ea8cdd727a2ce7bd4bab50ae2365cda66be6aef60f5cb6a57db54e493f9c76dde0d0c788bd807ad9f52d5d59359903634b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c33fd89a1bec1d7fcac2a26b643aafc58b524ac90725c8bf39377da4931a04a65ce43a063c2c2f0d3419fe39ddecffaf545fe8d1c910111c7e393025ea84f09183e7dd44e458d489bd4e3d0d7dc5f213f5d03b024b2d6e42fdf5b59b2fc1bc8187a0b98c86ffb77ffe5f48eaa4445065e6eb5e0f373d8fb6200750f99159241b3fcabd787112f3bbd92a10a39329f7ab67938f542c7ec3f8473fd9f314a4e81d36485a0636e85fa48a7656c42c10713b915eef0fac2bcc1580d4005c5b1b122f5215f17e16ff909527ffdb524a669432b073eba065e650784e5120eec8fdc44ae9d328df88fddb87391ec2043904a9ff96df1226294cb7aa0676a1fd2b232aba7bc71a58de6bef721c957385e7246707f7a648b17c49861b0b9444977688ccbf9f3b03b8f6dafbf50f37d23a5ab287aec6f84e3462e75cc23d3d4934218bfb0628fa1a3d584e288e72e537d01c2669636bb081e4d491cd7cbc72c9b5bba4c3b974ae14f88bfe10ce110d6dcd9250fb33f4ce818c87982ca169248d4ffdd61d094b25a175cdc7e935a1588c88b373dd3c48f98313ebd930c7945d56fdd89368182811d22150f59bf49a05f50a8390d5728c6747d49f9512779242f97aba0e776000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026cbd2e388d21772030874f51020a70829c08f3bcef8ba24a0e5563a1ffddc84a025b86188114d5064bc0ceddb52e6d98c0626abbf55208f34177e878ad75f8883abea5c946d862f6f607bca5c654b13f597abbf9d7b12db0df627c918593a6389bbeb3b3009dc2da3cfd1f7bf0070ef2411d5d9f947a76982503ba15d9c2740b8e011f2fcdb5ef2505a8235c08573c828e28d905a4b95ecee98147bbf1b43666dd197a2718235190bcc00647b0921b54acc759441896b6f1538b5c6e21f68d2e773fa996a0bf83914e62e103f538e835de9e9763182be0cb5fa0b809bd5cdb84a5c1f4687b67f17af4d273abcdd54bfb9d99f5b85ddb26c663d7f1fc5f30cb23a5727912dd6531e49c0913f1a4da6c1f6940dd2d2800a01827f0276cfe36ed6f85e75fea8600244fd28006958e35d90a434bbe15c9b9c433a80b91f32ddebc23595bacf7cfe50ed250958e9ab8f2ef323722ef2dbfbefbcab6e214b1d47a3360657a9e59e360f2f4db99eb1cfda9ff2baff3950478fc773c851dd55280d710f5a2bff92fa188513dc44522cf927e3c175c14ec779d7bb52bc9739012fb41cf4def20dcc771d43c98eee254494b6c454ac28ce3e118c8be19003ec1f0b0f01f3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087f8cab94b8bd9a03dc2d0f21a26c275b13b73cc892b570ec2d1fd6aa25217eebfa19fc3e1a77ed20149db6347d7c949046aa00b8e8368a532b56b239e9dc29c37c8967855b7757f75aa0cdf4d982f4a807fb07360d858dacb61b0efb919b4369de509355c4fddfca3102fe8357f407320e2e16c2bf842710ac90bc2a75def11462f46b572269399689277dcdfb8a066653138afe6eba90965c1ada2041b9965bc9d970bdb406ffa84b01fa840cb1b851e6737145c5e81f7a872e5ce8f3b0b93e1513ebcff62d2613bebf0740c8df11e06e40f99097cbfe2584a32a752f6a8666c08551b66f746df5769f3e158cf94a24650f353880313c8bffb51b6054061556cc1120bdaef7c01fad5defdd3d8ba920ece72fda6ff60132f628f5bf6e4feff8cdc9826a62758bff45a6011ed27090903ec68bad698bb288317d668a97f2c1ab9dcf6d65ecf33927bc5986d88b1419d2161d8097cb99ab264af7e00211d609f1d9abe29005e9fe97e4f3217d7e66812f93b5b706e9cb026760b148dc94f0ba65c8f912065c6078b078cdd3c4b5deb046332ce3d1572694ee236d6f4b51f318c87d186f049a62caed8a9dbf7cbdc9eb8105f3e407136a03d6e1c05cd1d6dfbee00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b9ffe84dc070e2483674b95453f0aa980ed206b9d303c81ebc5248c1c740f4efaa7decd5e50f18ce789a390c0fa700e53e59d6c570a3a7edf4548291c9d114b707906ed40350af624233709a549b684757f18b782f08b7b127aaef7e4f97d063935e4381dbc111f4dd600abfc093dc4732f12c0d6741cfe874ec0a438c7f1698fe8258fee4f258dcf0ecb806d368b27f423d3a3ec76ea43ce235dcc7509c36e4910d8666085fc251193eeb5affc858c3f177a05d07d13bf09d5c1fa3b6db6c129a7264944aae02c1e621237eb76f977a3507a0257914b12c909e1fc05f309c0fc14ebe991e680e7b1439cf9b167174d37e62bd5f6be38d1ddc052de8b3de6197cbac18ac3353e157d05146863d962542bd8b8d06cc37d8f7f8a4bf1c5352184c5a6f7ac2e78062ce8041dba69da636ec180c9740d6a8607a438cb43bfbe85d53d384c1fc54d91dd08d68a63a662acde212f8047e5354ba2393ebf43c033f8e253425100f44416ff3ed09c284b23f7b11f0a7056af220114b2956110c7f3f7986d5cbf09429df2ae049e4481d8dfc51d15f616c3817f4341717a5d918275e5f5ffbac68ea096794cf1bca1d3edf9c901d81c2f76721291b26b6ef1e966f1b846000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084e7dd8a07381974928cbef41349fb3b1b105f43023ca0459e9453bb381d18ef68a2132a3b4e36141652b77613b493e710f9a40e31ac15bb35cffc35cd43c540b514882f4bef7d63374b8153ba1ba6519cf542412b6f8ecfbd2af3efad4767d4932ad9242bb7f87e1d6ac937dc11ddd5456f7ce6ef5d2b51bb6e17ba76317c1676c5b0b8e6c3e6dcd64f0ee810359c8ddb2e43d2682d044d648d4d878a0bbc840c5a9921e6ec046dda7f9137ad481d2d25b9250cb6b8c6f9f420aed82e2b4f34ed3a891688c3f894087ab202ad8e3db72f922be63d094274f1b5efdbfdbdc88ddf933b8c9e827eba97a86f225f4db774bacb5c14b3f968017e05889195f83fe44234962d44f69fbf615425f71d9c1cc3fa7a0dad1843c1fa579d4bcd8dbc60321f4766b44a2c570f1e3dbdc46c4d6c3379d2635d35f38b995e5693d7b24313d0c37849ace67ede48510198dda989e3144104509a01ab9ed86f487d067f0a3469a41a9ca95204ad4fde94f0def1606db4298b1b46d80f56293f31f52b3f900e6670814d925db10c52691dc9e6b75b9de161897c2fbc225ebb8db97f5fdd10f9b619aea071126d9abf7e9fcc86c081338237f03048f5ced6d88884f09d7aa8537c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f9f2be78c8256056d077bee9896d22f882efb523e16729e0477233fa8b6e8b4802d8f6579906302076fa40a59b4fff97443cb53da3952ad646bb722ba6c14217ddd78a8b3d286b9a4ee984719a0eca7ecc7d90af15aecb0b7f2791bed84fad5296c5b7e4be05f10ed55e7fb43c81718ffec5a6f46f98489e3ba0760752dbb31dd585f68e3b063e89dca083f0337f53703cd74e321936b2b0cc35fef6eeeba945f08b92caf5609e80fd4054ea753e500212ed0a2e2aa348f1e5dc63d0c0f1e34425579da7633e1d827c4a217fa69a0087ec36d5cd5e10b8f22856011d5a7c3b50aff16705fece7da57c1b8e273bdce7a9c7ab4e26f0942779ce00959499e202df8c7270b63d8fa6a84c00c8d63afe477ff4407743bcd0a69aa909fb39f56efadff233c147fe7be8af9592dead150126cd44c93eed69e57a34132078abf0a5e9d09c49baee81dc173af07b8afc86a6652a4e21c03cb6a83529c0ee198b3f1cce51b5baaa802b5883f90d6db00b9a689683a8e92076c088243e806ec5c525d6b73fa5f99c4230505d55569c88c24c2b24b8ef46d61766b4c044ca1105e853e1e493e988a8dbdb28f3b951501711feb29177d0a9a929956fe5b9f648ba8c3cc87bf0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2d3e83b887da9c1b4d59a8132db2bbb4ecb278382ee4cd7ac49a629335a3c0c675c6c5a6dae1e60a3cbe281f02d9a49c9e2b994b5031052c88cc17244d839cdc24c4f47c45cc2497de68dfc61fdbba934b919355f6fb590b7777a6ad179736e1f691531ff50c6e6e16621750b986de1775fea0b74f48ee954423dfbe830503d9e21a15ca191abb935dd0654938501c8203b53da15e374896721635b92f9acd962bffdacbb7c83159d298c507ad83660143afa7f7181cedf43a083eac26abaaa7686cfe309027ee587c71fc87b9b107182667cae8d5b00e097f0022189c46549e575deaf091fbcfd0df71dbacbd58ab3387dbfbd8658687c6b208f582fd9e089015fbe38f5701eece7dc9d58fed490a1766f07295faf9492c9eaa9b2b876cd40175c47f92ec5e32e1e19dd3e66ef4addd3537a2b71fc8451e9e418c52c8be6d83322d6fddef098b9db47df7c5bf79c25187125c37d5d0690bd0ace6d5682849c5015538b832cabd430706a97798d5bf7e38e601ea67bbed79dd70c62fe6b38720eeec66a502126115291f54353567a23900baf9c5b5f5283a3b23f37a40d30c0d1feea67043cc777ccf6112f2143945d156e86e5b65e147faeb63d25dc26142700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a363c3b71295ccd57d33dbaad7024561ab11ffa6b1677a15170265858a5e4ed1ef3d29e80e1dca71bcd8500867143015f91044e61f4021a87c2e7ce37cf30fed6c22258f7c9197ddf797501be569f22c681bb2c93ea719216930f8c66082724f7028274061c073f27a4a8a7d42b2a3eb5c435527ef740578d9bb3a32b79a0c9c4cde5e82a274b4d4a7b55785b5f1cef2d878af21e2be657cc92436f5b906e26be5b62ffe3dacf611eb4041b206827fc272d05d313b40c745b987d6f386cd32e3eaf68495e7fb1d1d36fc0b2b5177103468bf8c2804a7877906ce5af7ffadee290d2970ed28face8258f5599a1676105b3027051b119dca780fe4cc5f108d748819498ae964c6c259a312c7e1075e266c5b2f83622ff399c0c22498f2911c84180c4ed70d94ee0bc80e9ca0ca409d766e8ea6378f86c2ff5b17c5a373d939680331a67edbf03ff1bde3b18b795f57000035991858670b5f6662232254687cecd9cb4bc1a1503a7a48e2e710e5213ef3a2bc44866052a4957b942abe449abcb25881e016e410b28419a62311797265e60b1bbcf87bcb5e583004e718f7aa8f5a1e5989cba463c216db96a85a542c642b731dc00c50a3b4c323c67410b7a7605e700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f16b5b5ee5936c175956a562762360fb5e636946e84675aad5c7d1147a7c012c9bd32182fe1e4d58b0522b92893f63d8beca28e33bdaf2f31a38d3ef17b6806fa0da1d8cc584a7de801249e8e553283decb48c312111cec0111d1b03d58c9a9f81bc1e4a92df21e42dec13da97f734d6c07d779b8003961ac47fa1c9af77efd10d7a1599d4516a929786aa27b314e41d0af83b668d1a5cc17c14fb0c5144698875537ce46979ce05d47dddaacb9c03c04e52a7b0cadad117049f875f38410b33120241a8c9d2c38d11e33b2012b5a2283fc69e46b3d428665da9d9dbef79660588715c61b4c28007367f580f3ff80d3dee71001d0181c3021fc0718f64c790f1cc4bd48ee41fb721b023092503b394da2f4658902766604b8e96ab7d3a095ea896c45f21900a3f1cfb44799a1468f39f24a976be3fcda51e1bf5b823aaecea0fdf6653177506c1f86f28af9d04e64aefe401a2a16a22b5eb0b37aa6973a3260cf9d6961ca7d86448fcb177a625f3b4060f24c1c2547def628c24e28a3d28edaf3e9c19f9a7e33d914f45dead448d6fa8f5a01e954e9cf1fbfafa1896daf51edb3b6936260a57aaf31871c1c43bc7d2511799f18bc01dffdb29c32b1bbce063c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a7097ffb06612a043a7ce9e0db2b8da4dfa76aaf81de1bfde99756916eac222a5ca43fc4c425fd437cfd8661d17fc582db3c587b0c340edd43ba8a5fb7a0091a8b8c2fbbb9e3cb7cab687835bf568c55f348a4c821805025e31595f510a3b890476b0f2e4c3814d9d1d7c79497709bd8819ab07e23d49f94cfcb5ba1f783a846bcbb5e5c43b7e629845c71d7fc39b69e846f91aeb947aab5a7ed1f6c3df97123722dd1762c8cbf3d1c08c28f405e45f281dcc0c3786fd65d7b3e615b8f72bb1b97afbb09a373c7a819be4d02d6a029d9ea67c293888fff1bc90e4b7a0f748162d04e9b5d577d1e583f9c60e7c85d73f285fed2e140d634cb526f2c18fb176109f85d77e3c7a558d52f7c331aca609701d7bd41db1cf9ce14b242aaf78e58ea5a0ebcad1b6e458fa6766f3cad97cf27966e1773d2d350187ba6d728b06acd601818091994bc1bb1680e87a05dab7798455338c70c584f69d848c458884985e4cbf593cf5f8c7930a550cbafe3e1886ce93e87fadf83ff2321701f10fc1de96eb88c9005aa39044a5eceaa0265f4c1820253cc56c0737b33a5d4977b06adca5257f8379aed2e7a12d7b19b7ed85aed13aecbf10029ca78e1b19c7430a621adbe5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082de596a6e1300fed9f4266649c5cdf05901aa2c1517bd774523db88c3e8186397a670325226d30bd12cb2376494cfaf94809bd4bbc5a84cb79552f3b2c7ef218e5bd5edc41ca206b77ae55c598d87c1738532df4ca4fae2d5de3defffd29fb39f2a94b8b352322929d257e5a6d9474f2f7d593ff2a6bb90604dd139b7d4a937c65b49fc9e3e22fa1cbfe7a04392bdb0bba11ea008b046c35d1172a090bad907deac76dab95d03730e3cd973599d52336e648c3a8372ca251ec65de19d5600833957fa5ba72ccbc17bbf8e3d1d32a20e9faa5fa61b9ece3939aafd503a02db9033d39b606cacbd6ee4f168b58b2a36dce5e2d9ad67f86a990aa6d5d9d8c68361aae72a67741edfa30df102f2c1e0313d5439e310df8387fd5024e5080c609c7639745621139591e636d084abe7188e9c56c8bb3ff1dd5828153fcca1088301bb4f4320f0f653a7308265f01ae89a8f859eeb111e8291a7c141399dfc420965cad8576e85b95b46fc4a4ba96e0df41efae0c47b27928e84b3187dfc8ea31efa872d2ae13ab69d833db51d3d906ae2f36c7536fe38a85cbf2d2eb6c5a7aa31c2dbc8e81bd95cd9a9fda42b0661faf64a713403a80ba008bc7bb3ea7fef6be0de4900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002971e857e72433c879c25a1cd58f608886e9236cbd062d113375a771fabcf1a8eeea25a26bc9855b6cd25d47c632d9ca69941ab26f8d3978626c58e05ca3ee023c431cb957c64b0aa9b50c6120e843b480e081dcdb68b5195b20befed784189a8d30f901649ada8447a314ca3a8856f1da44cca46a5727403456010425b517dc18e1fb3d73df64d28fba34d36c5298f319fb7c8f34acbce9a0d5e4f7861773b6ab969ae3750104ce7852447919d71c47f7f9b844fa3028505fa27f0c41a1c31cdb7b2e5469cee9aae0128c6f05033d10623a721caca9b014cb5b705fe6faf4531e96bd7b1da9c303faca7ca7fc7ba81e452c2717f1a92749e5cece2547d988a5ef1fc0f4823f8722e9a5505444e565b877b156aa68f692aa2ff224d83a179eb9d575c752d172428364c5918b24150b47450f1d637d2346a572f2607a2bf1d70192eecb6ce2dc3ff2e949ce63ea9fdb0fbdd38a0854faf9a5df0f6010a23398a76df0706b4aba2ff607a3fb01c85d5ae92bae113680ee6e5d866d7c91e83796b749655f2a0b605f42ac9752234feb771818813586631a1615abafb82f875f60edf7a015219a0daf2afeb9202cd21e68feb9202be3e0aef9ab365cb5271523c0a10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000994b9db027380d7ed08bf483f35ee3a81a18b94d1801069d1cd4f7bf350cec072d4c5f142ed41f9a434502e759774700aaac8fb25dd7e95e75b173af7bdae9d3c8e711fa471c383b0312e3761bd153285dbb66b9f969a6ad41fe1eddf26e548a9920757a5ad9e2128df1a1eea29c6616c56bdd90aa2332629f82b65adc8d850b833758ed7db6d7a00c5b7b446075d20fb420de24123c16cbb270ff97877d8418346363f3842d92026545bb1d2ad9a91c2cff2791dc63fb52a79433c2c112880506e339c2eeea477f1ea1017ceb23fb2a16180e177a81f54bc8026749f42f3ff3aeb29eee20886df5b63e747d3f05deefcf2b8d2f788957da8e87e9d788f92f06b15886dc8e360728834f58e51550780af4c218cbec96ea9f1802b3929170112c82fa9359828afd6113e210068209af607208ef7db6234617dee715e0df78e5cb22a1e701bcc6defc59deda2d92dcbe8b5ed0e7cbaf6d53f960f934f837ae22779c1c9c0ffcc3f247668fddb096fa6da0fd343a80b3fac8494b9bd78de415189f37e7240ad321e83e452ed39005573be18688085f7abdd99170eb0a44704faac0443e4bfcf7a7e09ccbc8e5c7f32234023f88d874d7d318b940c4ed48f68b9f330000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000286c15482fbd480972b19892d7d33bb643f2f225f38d262e0eb11efa9a1fdc88f887f83a1ecd1c62ef75a88ccb4532bf9550c2b717a797b865d53199d5fb832845f1645e49a26e0ce027316c7ac6b5ad0a304411c6731f54a7c98903d5dc853740e62d9fa90c5ff0510d7d4361e549852648e05c525f7d04282f0815e8a5763772247446ce369da97a542fe10164639d4bd83337021c3271de94afc193fb7cd0d3ab7e23301b9ddbb88a8c98ada1e3c7d7a7e048c682865d7eebae46e272f0995bf73a35d01f0a0691e06af1c471bd524ccb57f8e41a913a61e9a214328c36e526d4be24ee4033a12fdd5053f00ddc5f9269414e209006bf0613e5383d4bb62fe3cbf67c58fd8eb617ed8390e91cd0cf8c0c4b17b2b441fd76ef272ed46cdd9192c7a16d77f0a21e070967a7a1c731937890461eb2740f0153e847a6c06bbedb44aec6a43a5f11bf292ec5d83357735032a1aef091d4a6354c55fab10fb14a0fd03b84b30b224bf0f0d8788742e53b334b53fe14614fd4a71d70e2556b15aa68c1d384e53fdae4f28b838609ae61fbc5f3d547546f628d3d5f378309a4ea06e3bab6b061be7d4197f2d881ad68384d8afb862ad091ff30732132526b602a0a3a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000961ae2a2b31dfac88d91e3e9327e71db362e77cc2144710d3e891cbb5aa49c406fe7af25ab6129ff4039df5369febe8f25200a0df37ce79e182734a5acb8173bea8befd7734e628b6b74be229d2c1c2fdd86cbb6b52d213812decccc69f3ec5e516e0f8a86b5228066d8a5a59052d695db8f0e7a33f4fb224d3e0ec5933ecf2fa7f6db0b9f9faab54d479385b2a6ef0373c9da84ee30d33415fff31225e575ba76ee252f7b335e09ddd119694e4c473b63d9567a5a9b603177efb5ba4f1c9760376677a328e8f568c85cad752a84002af6b04ee33e373d7e00d9d34c6f08a168a339897b7903e509655e8e484aabec91baf5e702b10e1f39107693b9b7148481686af0a7dba7abc676bbae531e4d8cfdbfeebebcaa7905b5f16e8a20917abed2bb670dab544f49368910064fe7a8587a1c1773681a370e31932719a5c64ca4a03b2e9bb27b0a20916fa601b550d17c1d114c92bb31469081ff180a1c65fe9a756cf383ea1a2e7e3b64e1fe95e224e144105a37fe3650940e91338de2eb7b3e19137e88b234856bbe241d365682af9a6b26a3453dd643500cfcbf1a74276009cc047acbd1e66b172628b9ae1a84e031395e4c123344a73e11bf398b4cdbc7188e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cbd3afb7c58018ce7ba604eeebc48867be4e1ef348b5042beed370a71ba82b89c5e4f89e693be4f1551247ad9d5baa00ec2823b70b0aba192ff34411020ea8d18ddf67a40415b8ec8f6f446d0e2a3512fc657965c7d48b740ed1a69786d13f568664a21c23948698ea4bb5f4179ba0cf187b03f7c2df1ad0134a10cb52434ccb608fff896190028ff83f6fd399915862a457048ac8af4c1dcb1ab3f27805b28722bf6668ffa5d18d02ee9ea8fb5b5f7a00235d347524d59d57fde7b98f46798c8fc38ec128414ebfbd6e467e1455bfa30bc5f8b00e5a17f5abe8e9083f1f75a59bab2f1da92292d6782245b7feb0032fc041f83d2a35ea542f6efbf9ea44b17ef3f3ba87e71071aa0d2f5dd351f14f9a41c997e41af34cfd05cf8567ca7fa72c8b137918ae101b0dd618941213ceb9c645066d26157f1a206d67a6affffeb96cecbfb45cf4743750a3f9cbfcbbededf9e7826414d809bb1e4d4392168e9a82d5d39fa96c37aea29d9e6e5298378b9289b380e8396c1b9225cf0981a04fd614353b59fb38e8497866f21e5b30230eb59adcaa774741395e33fbb8c9a4de1e589117113e85e53a694b1d8970b2ed79b51a07eb6a86dabc2523d13e6786eb1e99c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094418a6cfcc7575c70c9bee8e0a517c56a82ddedee46970c4d29748cf061010eae697ffc44a585798acb0dc8f1964e29ba887dbc06614b40662df9033571b4158a24298fa7dd8fba3fa45fd1ce38273ac1e00244f6b1c9e87344263ce5084c3602e6f8da211ac4813f3af0f1c1985e362bb1f52071e4afab4726801f819742238994d7a522121bff017350461c046a61a95e2a3e2b088883582812e992957e1cd3b708c44855914ffb8890aab0331d52d8beb88a299bcc2701f4075f82b90989e7e1c736331944542a7791fa099efed0401e813bc88cd1bbabf4418eb274d21168c2f22656f29fb937f9434bcdde9946821acfd336bcfc9c73ba96fdb11c1b1ef32394992725401b9acac67030e2290f455fd4f774e1902eba3ceb42bfa93450b7f6aa3cd3d24372eb844448c9e851397cec65110ea523f966e5cc1092e57014471edaef93f3172813b0d7fad5e5bd73967463a5feb373b4a2525ae6a8a0235ff1690299db39a2269ce66a058b4e1a665d7d9d246793e2624a04480aa637e52969de9baff592e52e8395600a0a383de8a8a951a09263d17eaf45fcf4010da51a922d89fe9a88689b2278145f11fdfd94a4c26e714437bc8bf76b717091be8ea2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019e7b44e57d39ac9c7c86659b2264807578c51ae36245077228c2fb6184139abb9f1e2de19bdb4945ebed0a6683cdd547b7f6aa2fe17ac02dfbd3fdf1866d0950e55a07472a524daca296d8709234372ab98a2ee294103b4c50c8b57b847e9a6fb8f78d435e468730d93dcfdf1d3c18e0d97060ed62de8edf0edeb60cb6e6bc1b57fd4b4ac62b2628726f2043719af1f7df41a3007c9956ebbe1d9b4cf5edc43aedd9b39647ad5c7cd8d3dc02d568fc24e1e7d99703bca75017f9b1e608a0a6ec685c2e763026e3cc90b04f649077f40c33d43d565273b623bcf3d2a6850c402729317db0635c003ff8382cc6349c1233e9b77d1f1638663062b1bbe348896b4e5c77b412044c2c2cb2ceaf256db850ab808ef85f6b43e468bafb7e08b363d903142101456b5f4c4f1ff8d43fe5a7113d31b47d5f9e8ff713d7c951305a4d7d1ceea79cea39149f0d037991de2b9a75ac52bab2f827350905318630b8fd553364359801c2d4fe81cd9e1c34765dae00cc447ac3ad931ab58d4e86917f72fb9f0a843b4fa06d1956150a5bdb38b422ac784c9ce34bb072615ca531debbe9e4c3a71cfa1ed9ef1dc8712e4ac1d7529d960eab33405c4c3a0c2c6e14e7ff68520cc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000870ff96e9a0431363fa7c9d9ca92170c14661405e418a6e809d2610631d55e22783224b7ae64e36b5647960fa2200bb3cd52658b13471789fe7609cd4ee9b4aea22f61fa4df67f7e8cc8bb239d9412244e5e630382831d9c94f5813915a57a9c9daf0f4e4e0c94f87ac307f39bac4b6fc3d4e8174e11256c5c2d31e8827014623ffdc70b58d00abbbf1c9ba90cd0eff28f2e9dcdb7e8980eeafd8ff73b555cfe668bd54f6ef48c9e913f8ca37cba4cbf26203f3cda46ec8c90c2fb007b72a1e6cd50cdc16a1bdf3a43b6933479aaef4a3ac25ba221610c29d0ae76edb3eeb34890a04c2312d8feca22b615fe934e58ae16271779078c86caf628cfa7fdc13eb0f3ecf58326db3afa0a2fc86fa01bc82d9df2cd8cc811f1ef7ee7f007c656b9ed2727cefd81ca2f1d152ea0ff5bbb83bf7160ccfb0ea84622491379c775e2721e8471c8b6ce854054a61f378689daca879b586850f401e52a1318ee5d7bb5473f4c7de291634567dc6f2fcece2a3ce6a05b2b2290952705af3d4c79c1d9b8c78cbb0b7a119b445393be54d91655de1ba7a51b348e8eca830563c573b0cefe1e8c90aaad16394c626a6a8c223379a7ebf3adb506d30d3d91f4bbc37af02ef35ae50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa40003fa9b8bc5e9cab4344123602ad1bd9069f5afd419220e7e2aaac81eba5798f6372d79a80d0406217754bf128adfcfc26791779590c5af3f0d07a54e758d4f5ba19b0861d5d423e173f9584292df02af71a76afe5a82ea789b4d27cd2eb14985a5f99402ca0044a21e2a269ed0b0aa833ae6a5291623c07b476744ba145eb50ebc66219a0aabcfc676b881217942c5aaf4c4dc9053faaa9b970e280c27cb0c744fcdc204a42a0efcce026088cca14fe0e7973a8e35af09cbc274a36c1489698a247cedc45ff4d5d9eeb9d8c275c1fae7d131e4a4305b449c2d964c4e1e05e9b2eed24c2ade51a51f5c19a30109c02cbbb792d4c6ec2b124a3707a823251579f4db7669652d5ebea1efb0650150b6b79ddf15575bf948cc25981b43983ae5cfb894a1e1132760583ad3a6dbe9a4aa81c40d69802eebb534dbf2964135a69d4deb7e2b5e510f100c16381b8e5b69689d760b74a954729e308da809f16d944a643b55991271c793e8c6c588c054c48213ebd3d2b009d08d0da3f280be466f46666c4f1b8cf334ace74f648ebc28235ff7df3b33f516e3380ecd6deec60bfab681c9cc8d68085b66a46af02412bb6bca11b6b79cbd276a10db704798ddc1a0e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002638b996271595ba5d7ccee5ace7aafb7f5b01cfcbfeff51fbca19f9a26c70b4af6ced8644ccc78a58a8bd9726ad69362e8238b29467721d23763711b9fdf9a3f821749751d2b24c9cb7745e692070d695b4ce40cce204f5790a209362895c4ca41f7b4303ad769a4dfeebfd2a1985d5802902db5231ec35398c4a0ac7803f496e055519f5ccf46009ee4f59ae462d14482c6185574ce51f41c167267fc84ca53fb006126ac3a6b60b38eea3c96d31face3feddb97ffd5f5fa7ba118d8969074a7d43c0e891e7e8758a32453ae8af9295544e08137b55c8deea619b829ce5ac87839674e3edffe9469bf3944b2e9ac948249e8eb193d6304849d3310c082cb20321c1c4d2e88256a4d510b8e095375d6e56ffc9d041ba3a9552f5cdb52fdb054f8baa98b22b9305d11ea9f091a0e962f9074f82ebb164b2392764ee56af6b48c25b56aa2fec7fb3065ec507dff711ea0306b524305e564682db0827db49602112bf5b62fe4cf73568c38caa73a62da10bab8f5470a36ea1df78e742d86e5a4e338d3185bc9c4b26a8887fd82d32c5d20906b4f9b3587abd4d03f98c72850424147e6322597a425460190c135653de8f426f1e1a0dbe8266ad054579129886a420000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000298f4cdcad1ad38cae46004fe1c9974f7c2d0934c5324a2df179e9ac892ece4a89f46bc1944fbe170b24daa7a3bef746ce9c7525ac9b9d91c9c382a80b58fd5bd6c1725cf2cc8037ecb4a3cb1797d50f893c4190c07cfe65960923e55ee9ff58c4b6c000fbb44608c054c77d8d8a3d37a90d2314a84fdd75ceb5507ca5a8ef9b1cb25fd0051dc351c9ee6cc5a4382312b6ef3304d6707a77c517595cc30da0c6eac68d0d2532179a51a5803125370d1c822065b7f25e234f431f5148e008c3f315f9f546e7e4d3c57c02f1fe068a9bf6133f499ee6739c09edf4bf34edc049776d434c5ec8648c04514c7f2ba2421d9a724a87fe205b6ce36f9567ad60514acdb55fc548920a185a38cda2431c741276ab670c38bb2bcc0b920dc6437e6b85887d7a06789ed76b29de0dc73ab48a187afabfefe45f43103d2037254c3717d9b08e669efb54ee2b360fa73005b745308e71b3274be19f3784624bec53a206aa0c6f621200b3c63272553e7c60dd2543a441feb6dcd567ec48af89d3fead01601cfe7ff75dee74344aa33122f95e9b2103e3dbdbcf512c3e99fcbd4101f92e739bfbac91da45c16e1a5737d7d66e02c02a134880e2a5f143da797d4e86a24a42770000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a96747ae031d12ae34fd62e6bd60561ed70626aacbe8fc59cd3c073d381f30f4768f3fc6bdd008980d774405ac6bce9081f7f2c2a311efda08c5c091780ee36200c2802fa88a18e83b280ff7cbfb75387f40a52bb3f33849a2571e5ad95248bfb82225ee6d219cfd9ccec236162159bc894eec6f21b43048393215b7a3674be06892b90ca4ba6626a4600a4f1ad1a89d226052c72407bf2b435b7af612c0ae3535c877faa9bfcd18bd7f2d7213d68e42633a914304ec4fe5e07208db19a29ccda21a6e552c935084ecf0ceb1babd0848d4cf41cc10a0e1cf128b80be1e452042431f366defff9a1f08e36b830283b24ebaf10f6d1258fcbc76b28c0a8a67364165e7b3a0e1b4d59e996854d6c6f17a2fbb1ce0e8fc7c467129c6f1f16a868bc782fc6039a4a038b4a8def553d18095e25d2a853e4322c5ba267f350ad3feb5a8b4bb351e66ef7c0d1fef8217047456274d26338568e3585e0bb05f8b186991e685c58a5833a4b5d688bf884eafbbb46a4318b276b956db4a704a99cff82b47b285008afda5a75d196a83eb1efc6c4161ef2e40d306244dd017f115f23b5299a0ddfa3cf3a7ec11d2591524a513b82378dd5dbba9bd3deeb3d0fababde807e8b00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078c26ea4b45ac121d38ae6d57a1cb4d0642063ac6380744207527d22233e154447ee49bbe2090ab13ea68293722fa64453d72ef2592a27ae37730b5f639c467604a5f0e4473b6c455e04e687e435ca2afb16a64039cc42ba472933cb6acd4fb337642df6f8a4ef20855c4525d7f9d9d22b15ca6f28797c09c9411c9d0fb2180d4c9f1d435385509b0c5ed405f7d0caec7149865f4d1650ffe351b72731bf6e31b25ed1e4c6a7838f18aae056a726bca4a8abdd57494c37209194b65b03f0b35d3cd185d9fabf2d7e0555866d029af0bcf2e285d7c0e8ee27a502a506903955fb383ebb246ec1eaf2fe195c93f4c2d29745f0b4d50cab2318b0ccb13a14f852a97e5b7aa147a0db412cd6ef2fc8684000a3b1dafb765518c8067e2cfee0139a47fc8ba071942669931aef574c1111d9e6aeca6a12cbf38906c5e984da6f7419dd1e1bc8f9538d32be3aaebc28406335f5d1b2bef4f03d1fcc6a87b43d396d8c1f689e75f3064e4b4247a49a6188d3f04422d425efd7cf51a28fcf38dd286cb8a94a5ad74f1021fc39bbe966525f4d09110e04d9c680f5b5d040e0274508f405a0b9c9687aacb903cd9b2ed28db46a6053cf62feaf356c7d593c400b37a6a49d000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000387eded4a402ddd611c8cfd4829a96aa8c4b956980d3bf527f51d5224a3813a44dee7d4620462f3aed5fa1cf00d8dfe16326aa56356d3ead116728f88e30b931e06e5aa7d4d5b166a9eef7ceae3e274f031d6493255adf729696caa8e3393a0cfd6c3f8bc1d2a68b113b33cb7be932adf9afbbb586643f6067354f0ec4eed2f8863209cbaeba6fbd27d5f46645109cc461f94fb2db2d89812b24f56bca41a940cbcf3eca89c49027f6aacdfd8d0fe6c5c28cf1921a3f38a805406a72b44ac2e350cd4bbf7da06c888c81d82552616ccd47b886f727155a04111fc5ff361aebf4315062c688c4c8e41233d0f2eea99c00cbfa204e54f8fe35d3158425e404db847660abd53116af1f808b3e7cad835ce516d0de9723efe5c664a4d64f8ce7e00f8584973c3174dd748b3348d4774114a10b37a43fd1f13a6e3432209675312a90b8e058d599e913f54e1d84058be60dc018eeca5c58ec0087ab1ccf17a976fc93620ade35d5e223d0f4a21a32c03a0125c9fd5e9195240fb2f33fab5963ae6d86690c5155bf4d07eb4fb37ef8a8ea941b414071f2077b1e3c186b3061a8d4ee67ae7cd8456c21f7762e4329830618696f98b2117867c24750120d0e7bb59275a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aafa9d098773932d37f9001645ecd7a9598105c07ac001510bebaabdede09702382a4a0239278ad82c36e02c70f3e84b0fb2cc0fbf8091c631b197363333420c0fb168b4b897ada5bf2f2404def10c38840b784452378289dfcaf263ff902c49665e1b5906ad2dceca70b50893f46ed36e46f4eb8255c5c162673d38b44ad83c9eb7e42d4e4a0d0ee40f7f6818b95ef5d1a5309dbc0f751ad5c2cfa67950494054d15741001d64623f60925cedd62c8ef69322f38dac4b3a0a837858014bb82844cad5ca2e06da31cea0f6e44dda4fd47203fbfef21ae3350054a710f82a856dc049337c452a3c410ba8ba72b2b39b2ecdba73c2a48ec5df2cc13ce67520f81140a74da294c7549b80db63d369cf05bd402a4089e80a05a672237ae1dd9cf1cedd348376238fa0a4b7d807bcba53f9cd5a17a75a9733f3f100a5f0654bab37e9fec9eed7ff28e2b5f30b9dae72f199650ece42af5efc9b974980cc56a23ad733f9addd4c2ed9f42c1bd7efc0d3a8cfb3e6ed3ea7c256cccb479619f30681d3650ceac0a1d06bdbc9a1cba0ae071bcc2aa83489b7dd07da8c952cb23d1b3c9338e601853b3b031b3818d10dbc55071405d0b2e95cac602cb660cecaa47d4df1b4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089cb162eeeaa5d91d8ab2a8da39b959b7a3baf46de90e2c7e1242c16f0c6fab5088d488152e620a0ea66a9ab602e3fdfe50fa4765bfbab566eaf917c5cd25030f2a62a4816e1274cc6d8e884f9d3dac6af1a776d7dcc9f9486c8b1113db0821971ca23ae27dc1e9e3921d6815e6509b1665565a368310b9a38559ff21f7c853c344c49025528cc355846c9c1a1165b8a3af327377178e4b2d6f1a6524893fde7ff935e2e2f01b14bae9fca1c0073709cd6e2139c536da824aaf61c98d997ce2d4ddbcfd43d6383dd117734e4b47736c0a49e314d51321343da7f965adeeebc0c9b8a6b940e8dff185714aac92038dc184f4009fc71ea46a0f3fb3db16b7541391288539a855f85df635b4058d380a7ae994d32df170e0af54477aed3ed69d2600cbaa29c3d2caad20fc292a248b932c5e78f8226e8c55039d782923a84362690524cca411ff0d6ad9e3647f21810918ea12148a11336cfa835ae12e31741792cc665d862f20d100198d88a8d819e64ba558010cca58540cd75f38949040b376ab69dc962921383793601b421167830295267c7b0457189eb8add167280f68ac7f49b11db77559a4b707b7c5329739c6bf0e4d02e23cef3a47764bda9f0e28e4300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008505670fe05df2d8847cd7b03faf7726567b94b0c4d048455bffba2b9f6e2038e4e21601aab2754464744dd4ccb1023d3013730ea6896f54dd7de29ef48cbd18fcfe87a4f320bfc55b5827109a2e23a4b47a2e5dd1dd349d3d32aaf010d399616e524e6b0131c4fb0852ad07a81d1472e00a724dd146187253bd451032ad6b898411e0aa388071486f5c64deff4098da56a7bf88b6af0d1e9b0270ac62b0d98233865588bc34ebcb7f830d9ce6028f74a344c9714d2889697be337fabc797bfc42fad68138da16d3c257d77c9acb764a5e9fb453e8da26a46fe7892a7bec820e4a2c8a077891d22ce47a1460ec132246ef08e0ea340005f25c79e875653e97016e518dc3e87d56b478895fb42a14e94390f123b8c46388a14786c1b22bb06a4e03417b3faf7aa05663b32a5689bc311f299db46c0fa789519db1122ee0bfc8141f60dcf39bcc3d71bdbe71ddb84933da398cec66c944fdaa58902e1c4ec861ea138a686679c637cc20c29efdbef3393526cacb1ef90789fd56e70c364cf85d143b5534d59462adbbf666da1c6a559c73fa634da583370f24e2eab14259b798dde30a58303443c7816bbb8496f6cb369bed1f80b3a57238d2b29288c9cda67780000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017e9a4822db46119641b338d0a07a00b7ba6089814bb7b7da8de117e2996693c3287ab350dba153cac926a2ac122f2b926f6bf9fd05ace69a9bd08e126ed16149051c844edf771ad6e7d457bcc5ea023d046dd7d98e42cf363e66c6af0de6eac249fc5600affa4459d0b45c86e0219b639b807e3d97c94003cb6e774776e8d4cfefe071dec54d7d3360942af1c08f0ba6729a134b35a51231b35f1bf15b080280ba291b36ed155ef4ac8896cfc527830b17e4dd4a5d53b859c9d54b4a31f61afabb78114df0445e7fb33215df2f108c820bbe6d8de2997c9027fb303fa523dca557de7964032e88e5b7cfb2efc87f148deef905185f6f1d672ced21221147472a29cba4b6aec87887ab6a780b5978d60aa48b8ceb5f7e2abe8dd9a5ed0efadb71e2e451163539b57d81e67b1486bf4f64872b4efc9a783e3374719e3f7ade69e657955facf512285033a4fa811dbbf4ca8c661feeee0805fd9879d930993091b596797c2135fb5f9e1096be576d9a9a2a5d91244b36cf1997da31ea16f52074d5de808f91ea29c8a04b983b78fadb1c87f01f6307f30434e4954cf6f61959c7db9026d2ac8710f52d3970b939416eb398a03dd719c2d66838d8b996f044203de00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001eff2f0a075dfd41d1f170a9a06469eb4db95e507f7b3105a0a64b9e9486fafa6616f7230c83ce8811c4b2f54b28faa514aefe01c3aeee1f12321626b8bab3399284fdbbf0ad872c1a0e7bee8724146244271213c632c52a1aa356241682263fc45c0261da04f65b081a6dc688a480dd33ec0320f8596059bcc295dbcd4395271ff2434786c18451d0ca5764f4fa26005bb9024edb17af9156ee6044f9704394a082b7edcbf03ba93eec368d2f5cbdddcd8249b11cc4d73470ac7ad8a266ba285ffa0ef43409934b72dc83ad091c2685a1c00a08d0d5964d58393fcf4103f3d61e8e8ba353c07ae9d8f822da23f00b35d7cea49d2a780255c53a95d24ed787dfdada58a1fb5b7b6e6599fb69e4e527089c8d71671c46f031fd13be90f6f5e0e6807bcf64d36f3eff39bffde6381fde03ef4501248c739fe381e22e66badd2d1432d142147520a5a5b2ce191e1ecf347b58bda2d3d6595b7321a81774c8ae6ee11aa36b3934b17e700976ca58743daca72fb32ec603d2582903c71ba714c2960170f8528716f19335b52cae6da7cd4ed77c489873ab591d89fadc7e098ee414400f316f329fdd13ffc54ba1a4c6422e38a67e273d4b77e1592c7de6c04a500bdc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f62795d72a2054dad35fdc44cee60b744f701a4e3d3563b9d3ef768fe7f401ca1bd4f9b65bccf16cf5845140393e98c95399247ab28da7a3510fd57af4a7b83467654c4fca0fa571dfe81168d17722da48856298aaa38e8faba48453f1a33133743065470ba82fe7dd6342a075d54e0a36b6ae35628f80d38254cfe58efc693b9b684d8b9e0fd43f12c6f4d16917b9f4848ab2755b7601c98c881f339939ab7530da1ff08a3a909c68d2575a433b58ca9c311111862b82f243f8208a2f12147c94c4c110adef287a55e3fe8721ef918ca70c313c112e26a7af2f17d2658167c0efda43438baf1363f7698ed23beb5e869348d85fd9250a17c2a355c25cfbecc9f5fb6c23e9a1927721c4da28659a2a593ffaf430a74f526d5a35ee380c99b3942d591fe6b7912d0a4ab72a9a3208dbb6b0b7a7190ce5116fdc7886a3ef6b8282b401ed9ca202cb484620e224617d66adaf94abfcab3b743352fae1a76d2d952521dfb83db55ff1a761c8b6f51f38c7aabb09060be9aad0374244c7c1babc0b04cdfc8c83ebab8869bedcc77dbe4210fcefaf442c580eaf270fd1560bbb22ca275896dee4db8bced2efc7e4554e5518ca9250957eeaa0d2948cfea55e257e96e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086a20d693ee661ba37398b69a04b807892fb4187ce832c6cf5b947279612483a313b8df2287bd9decdcf11e1bef41f88f5fc637c70d8fd48fc18fa8c45110fc54c1df85ccfe518d6269134752f479abf05e604376fba240575f1fdbf1e06817b96eb82476c897860acce7a161cadca59a10fecd22b616fd5460ae2c9b8a62cd2c86ec36da7db32a911e51bfb1ad7bbaf802918a08b689e75de25978397c3bafcdc1d3d5659459a3407b1c057b97c23bec878fb2a5cf6f48b6a78bba57e8853a43478fea8797cd06e44a2bf4b6495e1dafa2820e491f239eff3e589f19345b725d1e09a797bdb8452c05a9dd65e4403e039e7d86f930851e85dc97ba0b7d8141b11c3e944af93b25a0c45ef069edbfb2175e15b3452c0c010f9ca8fd7fc18010778b5a893659ce2c45acdc599a7edb1b16c6f6a6ab014c2769138a37917e97adff4e50ccec1cafa827c7b200ccb0277a19664c01eba78e91def8a8a8ec6bb499be177293ee4cb9facea78a3c9ea6518e949088032705bef1aeadc2fa8e777257daec934913645cfbfd04f12904397269432e9ee4f5da9280627bb572e9039d8b0b2ff6472aa3058a69d753ba88b8ab633337dfb7bc48e65e0aea528a78552aa7300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f05861d7665fd6e3a5401d1e69ce36f5b90ea4c39cd351550303121a19218d81acb53a5188390676c2ce71b83a8bc6b241f538349d37f41e900d346efe0e1a983ed8873d0ad2168ddf3263d4b895fc3b9ffd7cdcd18fdeb414d923f8251b02e1e862417745227102bcb99394c683cf76b143695d14df92fdc727a839e0d7ac9a5776a01ae02e728d8529b60727a5036440bc6be5d01eda23942538030b3e11130fa69ffc51b06c271dba036063db86d3a9499de7230c3e0db34bce3dd69a9b1a2422e0be7ac2d13fc312017d081a2c1d7896c1abcfeb901ad116bd4f28d02319403b056c30aa7d5b95b9926ec9e3f1781fe181556794e323d19a1ebec8cff4458facf6c811ac52db0381fdcb1d25e857022f16089847a43b103f862c788a99c6df9efe37b10510eb0c6b9398798fa52d9a0aeeb5277cfe3bec36386346f637a6422b2d04d368b2d505e4b14ccd8277acbcf2d26cf340db47daeedd3d782cb2347757b3fd55418ddf8104aaef2e5075ca5ec4c84cb415452a2e2e8b278ba873398a1b739b2e53cea567ea66f118f1f4c35ca8cf193d5817be7e324ab9c067efb9f6a1873f26ab840a1fefac9590b036a390bcbff3f01d402dd09e3002afd9f47000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a7b6fc976fec6f045af58beddbf3ac3d63c18e9946acf5cd1f3f898b50ba657fb2d8545a4694213f63f84b8045468e5756de87e9c73dad57d345e67726006f348f5bffd3c70349e14b964680509470b25e60b58fe7dfd5b6f8d4e0a67044d46a85ebb0baba360869d9a02a95a80632fceae27f08f3820d0875b67ce8c32d628cb9a277f6ef7282313ba87931f77e4130473194b351e93e05e412b0773db6079d14a9af0ac4d3ce0907f1ae3157c126e523bb4e5dc0011f831aa11ae10bf0f27f138138ad32acf0506efddf15b0fe3f16b9881fc597916b511c5ac924171374c5e42d41f102a419c3edec58f62d99d9b9e98475e83a55f58c0ff16e7d7fc81e531e7bf41567b9825d33946584827e202d6aa027e530c0b671d4e41ec181241a5065e8ef1934c33917b5d76bdd09e8d094f45bc373b0664c1d5d3980156561ccc96664fb786def6ba126fb9d2a380623673cd4f0ea4e8d72fe2c7bec7f3acff1c2f9d3c84a4cb5920f29491ef88e394a92898015f3a0164952e9e112f526017f7ea38c83c41b953be5baf64ee2b2e6cc22c34066aa32923d753e59ce8b89dedcf1db0f21e4768e1a8f934ecd59c32e839a8c89baec73415608d9964b79c8c84d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bbc4a21d29a2dd9cab0ae44839c09c1f7483723d6530593e26aee059b291f979ea887c23cbbee2188afc5d76b78914a97ffc275b8ff226decbdc40e874e625c96693565e6efa770d0f884b2c23ad949bb33202c5775d89530a8874fe62a1f35b548871cd532cbe8d973129302be2f95315753cf6f4fbe2acb3b95ae190b580cd1f8cd26dcc5e40ac0b1cb01dbe5710a8d9483a2cae3fd4c3e6000117b65541edee84b756e8285f90f9bc10150216ce71d1aae5e22ae83de7c8eeb263ba2dc411b4724930a0aa303e5615939d102e2a4cb390a4fad8424a0e749764faf5ebdd421e8d9c40773d2b711e8a118e96a47e7581a826c719bea60314607a40135ddedbfd2f079b1339c06cae4df6380bda2878de1ffca17c19dfe7cf867cbcc5a300eced109b01ca2c2bc02781c9571e68c3c671cd7911a738bf13a6f5f2e739d791384e5295aa78aa0c365c5758ea332b0c6d946445b4a49ba3f795b16f77645a8d48aa257a49f33b8ab5acfe0ff97a9b12274964d215445fed2ddbd85977589b01657ea03deda8a1049762912279abb06b6cb05a664ccd2c0dac1c6089851a1525a5beaa3c21dfdb4deec96dcbf7251ac105d2811321dff687560025a6a5f7490140000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000950ea72e46667c065fc8fa929b45ee848af4ed086d9e049e4f67095fada556374c48cc3b1a294239024c2eef587d1ce06886106fd2c51c757079181c8c066780bb44a9af82f1aabe5d2808b3dc0c3bf4943fccde83a5b418a667592bee5bca52d6287d69b3cc0de6282f562d3ef2efbc1b9292c6581c8be5bbfca31f2fe6756edce0599853798ded886275bd5bbc45f2c6c16a6244d61cc3b665021ff0188f8b1800a20d31ffcad5559fc1d096295d90d324d834bebba8a7cf87e93296b8d00c64f7a848f5ae6e0db2340f11326b5b977cc1daf8128884f67b0a934986719fda379fa3b66e7814c669c56c41346fc8fd29908ee8a70946cb4811549f90f6e028279afcae854025603dce439e53b457a2cc698d20cfd6853b78c1c6871f1534ebd552d4695bc561ae51547f1392b6395ae68e495f4ec98e2385ea82e459d6fc16902d92b16cea8a23e76320a73c716bd5048faaad2b0daa0a077761fff06c770503e2544dcf77f95457fb35283b1cf77c1ba82a331e09344bd0ba3403ec2856365b2526c540c3dd9f80a02524cbcdd1c6776186cd4482c12e52797adbac9637fca7414ae6e4a6fbbbf8f055398b6b1da3e05ac50ebd69fd3e0bb54b63599036bd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e9e7324198a80026e2cd3529cd2f81b461cd1c8fd60f2f71078629597fce95abd1b460718af65f19e80d7a3ed913ef8c31a5f0f0e4354225b004f07e3f13146e99d020e892946ba573fd57597aeb50de3083b26460f6a51343b2990b2f655150c5ae8d515d76b1acf19568e5a685ec151b508e890e26d41cbd263a3692a0e71bb428356e427c1ab95a589787c6e2e2dfc29928a229dbf37a763322691ff39ebd9d5fef1cf05ea1947764f3034b16ed2c76cdf37d97c8aab62e105ab5045e93499c27ed01f7825e4b367d27f360207a4897d2d15332735329bd395a27a7c2d5bfed3479072d378392220160f623aa060619f4aea9c48e18eac4f844ec8851b119587463d6f97f6f9dd357292a284ad7ad49f669cfa60eb27fc7d1182c82c09a456803cb71611acd292a1d139d46e9059df32ade74104286a155bf24c01bd0432755d8755bc6eb04a48cd6f06c707e4f705ddfa45fe32f74d48fcb48363d94d3d0b0c23e1a431b78917bcb05cd5bdefb7b101de15b5c90fd628d919a4657e72cbc4e925eedbe12dac59926552c5eeeab099b1a5326978908d68c75e1e76e567ee89e502ecf31703dbd819d9de06e8ad6a4c9a3642375ce05dfdb4b5673d3b18aa0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000296f3c6b17d54a706c7ce4c4fb5bdabf07bfa42b1ee5463618f6d38ab93dcf764ee354f9be473e90028412c1b55251a2b0c6a84aa95aca719ae03add95454ab931885b2573c4173f162b19c6330f7758eaab662c3afd0218b4629a5936cd442ec05d8f789a1505a1dac450a98b1827562ef46f11ad0041df73f99cd44754ba5b57e0097a96cb1f3e8aeaa7a98e25fa534ef309eb331e3a2aa2c9330d70936593869d177df0058ed8a6c7c25615ed8b6d743218e4e3aa3dd05f79814f62a2690476361d58fa4304007f57392e3d5bbb5985e5ddbc554ae46acd5afdc03fec1bc9d07b4a4ec3afde9b40ec2a26b8aeadb6aad2cb86ae98bba4ea3c9b47cb219a544c92288eaea72dfc695b44e3444557a00d306908fbcfd54d7ea5c64d2b6f8b528af81abb3278fd7bbef01c528f575e705be1ae881db9ae929016933bee0be8b14504c108436cadb7ac113e8318a8feff71f2ef8071223441100f16f7c13d3a63b9a4b381f949cbff950174d003cdf1a2627bef766436f82c47c3579d92353ded7d4951ae7ce4797c11dc3f695a95ca5f17902e25b0d36bfcc24567996bbd732e3751cef818524fc3d6b5abc428ecb9f461ac61ecc29850620570e9556af9f4a90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a918c2bd7d475d4c875ed9c5f3522532027c4a5d44eb5597657ce296a6b7056f94b71f00c2e084d290726dd6bc3cf2ae48b43ae317ad7321e2456bb2e7fc713b676bf57b5c49d189dedba6d98a1c21612c139286af844666fd40553a9edef7415a029d24d0d2284637ebc612bfa67b09fdffee62616a81a06e921962793693352557322cb06fd7d7e755c23a35063efb826f86e04efe8e91193dc19c24a571f20806d5e32fe51325c13ad40f4fff59610b0efc98afe67538680c024bbac07506e8fbe60695dc95bc780baf2adf98d2ee144870c4cb5a3fd4e38f0348bca840134d221e156432516d98f4006c6a13af1494fbe69fc9389fec6ba392125e1e67068fd02677aeb94343a31ab7a9c98aff3377623162ea1be28c711125880b5e9d10e80a502e356c8dbdd90dc7394b3d5059f955434e92f30da7fd385fb68055055de5f9e33c7c3ea259a26e865c17faaad77acddf80b89956847289ba57f2b87952cc26a7d120fa45bb09aa155492559e20cbdc87c51684e04475aa5173d0fed05068546e3f026118fa6b900e9c7d4d09b15dc6d1ee887aac7232795515ce3c49163faa9ce9248519c16844314148554b849d7a9bc09c81e21d79cfaa3e039f87f900000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b4840118fb8475036d41542ab2ff565bd019e1a2ee23f2a9275e0cb3520a1c1a2323f0b85c4163927e8693f110e7fb1f8e2af5fa97d0b1316b0799023b8303080b6cb1c6d1c6098040f14bde9b753efde3a89dd1d67188f30a20b64fc0c94244cb6d606be14ff08251c03dae808a4da94cb6611c808168f0ce5450be5b7b4c3b38b8530300d8f19df2f583beda1766a990aebc1ab46cb9991351bc17070e391cf4d6905e4e81eff3df07bd1f6626230e0a0865224e4e0ed3895a74b9e08cbcbf850f91a4d9e3cf794fa78430cbbb5ad6f7842f72095000e1e7a57fddf8e994e1376ec0e45bdc862a11ecbf11606f88b1a355434fad6c4878a7a0cee429276709e692927209548d893b726a242ad67daab86653baa0626af1c24df49ce45814565a1342402a0710ebcbe4afb71b2ca7991c334950d5307e7884ec787f32267186e60a8226d8f6884f13cf998112ed9ae68071bc3ffa6f62610d96d6132d54858bc91dd07bf2687e0d0e2fd7157a7be572701770b1ee7f9a116f6624cfb3c1dec5d801a22564c6c64fd906d239c2fa3c2a5313dfc18606a260d7fb080ccf2837cb2325a1c5d84aa60755bdcd230992af395448bd49d0ffaffa80666542ebc0edbb933da0ea24bad9242c72650c2308381e4af5058323901a2443102b7916660868e327f274e965cec08e19ca930477dc0fafd72eb7e4cc7532c144a46b750ad743b885f16380b65e278c15d3f562547503379c2cb739dc8a1403433308cc8498c000b3a0c012baba6749c2f9292f0b54bd27156a363b5733fc7ad4eeb26b14a3595a48822a434243726fd09bb4c7a1c295e21aae070a674b9dc8882558f5de835140bae2968d2f4c3c07058f65dbc929b1d3cfae602b91c21fa4d11e587c2027d152260301c10c094aa16aaa6d92db6960f87231164aada25af628f399f7a930c3c793e2102016ce361281ffe1eca8d50f279ca6e5f1f327e5079a8149cb8653e23ad2f128a630b2ccb473f1a37a24784ee351d81f5b69996ceeb7ef8a0f441cf7269070b59c134de9667c73012ccdd6cd19f3ec8f053fb500bd314db81d33d93f6601018e6088c21a9ca8cb0d2d1a554140670117913b4e43c06348fb34b3d6f9cc947278153701770f8d25f93611f76812c916138a23bd65f22a3e25cc07e8793e27810dc154e2b068187977c1f367fdb79f8f109e7895e06488b3e2d7ab3f5ccc11e0551b2b0f424df1d3a3d9dac0ae28d7410a9fa095fe5555c41b44a547a8cc4d11b9bfea7c148c94ec9dfa714fcbef89ea19b6008bfbe27c8dbdc51c9862e815a288af29143ab83d2b0dabdb050872d43444f9003330e9542e48e7ab43fd7c79d1c63f6b62ae1868b40a00f6c7465bb17d68e7c162ed216f43284f7461513935f16f7438159cc1a83ccd2059bedc51aa1505dae8ac97b70fe42f773a9851deb9c16846c53ae66aef18e93074870e35198e3fea79c1ded1aea3a160db73b72c281128e6abbf11e45ead92b64cd4306541a334e2deff86d214a13bb8988477a1cf917c6999eb1f179c58989175995bee97574181f38873aa85b5eb91e7e07f24c9909a59cf973c8ce10df31ba65000e5cc4e53560587d2b819f9a77a97c3885871410e88fbee8b73160eceb85d834de0278643fedda2063fd6c3c97a476b0c3a68d1b5cd63c9fb091ef714a04edbfced5ed8fede2858c3c1e9fa92f4b747db1f420011b03b93c27158400be60190df9656a19b0d867339c983f38db1ecaf89fb2122a7a2aa6111c1842a5bf2d8f6821a22d532a0fc3516853b0fd985573b3049eee2b07202ae9b2feae163afbb1f0b9c0a9e66980a15a6bd418d406d902cce3e33122e9f31eee432f6db0e2f6b3671214f2f77eba53d882dae404c91d2291fb292f28968f9ac17e1535a29b606ce8d51b416fabc147888b692b073851b246784de40ac8860611e126bfdeb6f6e30180de41b5c9398d097eff1263b70d2c2f3d2fc7271107b4f7304a385d4f0e869d9ef621fd94e1df0bbd82c166e550106cc1d0e503820f119f9acd133da6d0cab4df1034e7d4e78733f08f80d6ccd5d6c6a47085159d8c3dfe7f0399f9095ed953c41b09eada38fe01b3987b33e69a4ae0bd27df1eaf820629807c266ade5f1f4f915e71c0a69faf092815a2f54206bbbbd8385418808ce7e321f9019365fd67846e889fff585160375beef1515b57aecf4700d512b9e168902df1aeca45cc22e0aac25aa6fa9db5c6bc8a110924753d63e9513c198975634fdbe1f337fb4521c5c1c68a9c6f33c901337b86bea84dd1e362e93a0037f6a39070c4ce83ed918e0b8639a11c495c5698aec5d042a912afb4ceb0922fc2f271cbce5a0c9d1f6a857380ecfb70d308596acaf3d4197d0dc6be3115d41dce0d8f38d5661a537dd58f0c4709e44a38f323f67ef815dfd4dc0a658f849c1385525486b7e2dc25e8c1a19122e3660d37647a2409bae2daf7132e567667870f1954e2b4a49b18ac66a4c663e73b59cca8ea379b80b7d13fd3e0bc53167fe307181993e6e685f62089a9e92a347b10f82188fa922668d2fe80c22e9699da50297ded7ca1fcd4377f7897ad5475e1918b119b22e36c0a19399709725e61d23d2fd03a203fe0a8d5a65bd0a005e6253a460c878cde58dd20d75ad138b305a7c103de86ac233a405e5d053956b7b2e0ea9ce360d20ddfce36429171bca99482b6285c64920aa9a77bd1d1188b84b8f1690febc0841fe7a806fbdc305d739e442e1c2680242af89a8f1b40d3752c003d622c9e1419c7cab5cc6bd32e90095f98ff22ccfb09c71290cdb95a965cd6c78cddd046f14670f680309afd6dbde62b213e0c6871d274c75236368b27a85d9802913a453d23f76cb78ea6bef5a19580878b400ccef41cb02bbb73cf79aaa5e666989dd5c3ec74801b20537679fd5c9ee520641310588cadcbcbc31841bc5f1543491857fd952b38364b81a75466699f122611043c8b308c86d6a8ab0f54ccdf7b75847a90ffccca671ccdcbbe9307370934a71cc681e2fb9595b254d72cac701b612fec9fa1f9cf52f4b1cac578aea235795e1bd5f980982475370cd62f3b108bc9250b126c717db6789b45707c1e8710138c175f3c4b337b97565010c8837ec0c60ff6280b779a6aa6cdb7d2291b9e28cbe229d2f2cdb24805a369521165b7f6bbea50562cb58963b8c89a68d06306edc0ba1969d19ced621eec7732a222d2c1ad2ff478a7494332f6559e4f91edd7bce50e0c31e600eadfa81ab1202c3f9e52aca012f1db877daf16829e615b35690339761c40a73c584c90151bbd25f8b178117bcbde7eb29a822de8de8240dc0aa346da1b34e34f7f21a08015575913901b99efe6d12699836d0b20a33f3f2eff4216c02375995192089244b1e06682b850978473bda52165076b9c49c77b062a37fa8813237a8a8f82ba04aea07084a8ac49fc61e8eaa08c47acb559ad442fee2681212e83599c9ed7c9ddd281cac7d1df174a5b88e72ff327020bbc52ebf7e1ba13042fec0369a47348f5e2685d1eaeb32295ebaa61fde50fffc9a06305f116c3fa770284d9b2a0736e871d7312f153544dd40004c15b8a784f865b6db1b00568f6a114fdd002c11cc93ff49788fee9cc142d0552ab4ad18f2a0b2b02a51db1bcf2590a9ab55624a8ff646646223d0fff4e4ed4731e145e3825d940ad157af044b063077190f394a801042cc63f562b72444a612cd8fdff568a012a747c51374994f305d3be7df35bf1c7758163867f4e4cf9c93c1d43f33c62b1c1bb268d15042c8b0ef4fdbf988462ee0f775707c93c9b2736fb5582ca05ecb172d03f13629c6e7e1c68f52d3de7b5310dd4787b127cb225b0cab8f03cbea03c9ddf7ef5bb19af9305e76dfbdbf822d04bf55bdfa0ace20a79a8d057ea826e6a03c175b1f7e4a35a1b58e9f2e36503cb2f1940fce45c4e34f4bbf71e5cdb40e67b8073f64420e0860cfce41ee4e286d950be5341c7ee6f0dd6dca86ec0cf7ffecc3b8c9bd57705cb2f1974a09511544a95079ca49a876a0b8904d7b70617cfe96e2456015f24e69a1469598d733bb236b1e225251ff9b0a67f0cfe8383f6b9d06ae2fd4a758323020c35f2dda7cc1950303d80c35d684e5ae253aa9e2958803ace357816f894916606c44d7d90d660422def5b2b91dbd9ffcfd4af775e4b81e72d633306e51d94b5037ea74f7b735039a36a6fbb7c4c543d80bad63656a3220d4ac4e4cd23e74a212ed476c686429757a1f5c98e6b0b0831d8d54dbd0bce34492c459c26b9bbfc22281ae69321bb38a43e76d83870250f849ea448110e96fe5a9fcba6edc072da2503141647d0aeb6ca774dc64a07852b4fb4ecd9d1153e8111f3a4de0d8120ee122c98baf4b6c4e5dc5adcd40968c22f65e5e6424b392f5e32b2315f4bc3fa750815ffcf283e8b43f632cbcdee08c45a5f6bdf7c23d27e3b144a40155a9492b4a5207b611a073437db6df7e48ab480befe233c2cb91df6c5e1d04b7ba8aad68c462c8409aa28cfcdbe61eb5e5c4055c5df9500470163f7f20fbdda817d3bf1f1122a047b7a1679585cbfd2ef4480868181b7d920a0aff24dfad8a58ea2828b5a38037678f1bc501de72c62c655a31f6300c48886e95d8e0eb486d6a6201b4204031835a9b670ce66bb1b66ff3ff5f8b0c19cba8577859597c09dea158c2086426029c28bc26e1ffa434fa8cdd4e443280a1f9add16259633ac05429b84e08a5669099222263ba7702c68b56552ec637ff1798a9573a6411ac303cba729df8a02002a95df0321697f918802a947093b0eb10c788b29a746bdde6074014e36b06d790549620fc23ab687d6e33e2a087536e05638223df910279abb0177febce65f891bb08b8eed450db9ef54fe3c7a11ca32dc72904d9ada28f3b531235a93ae63790f3e49ca7fe2f6493756a9633e1c8cea6ab7e97b8fe63f1c741645d2e08dddf114c335f2861c5de79ea8ea477e316e63e0dedbc9e58982d359a31e629e9fa8602799ff98582f6555660d7de63c07e5c3e5552e34f9b82e7c169850ad2c6672fe2a53c4a5d9704885e636f8ba7179ec9c60fa2ae7421b1074f76bb78a0ec6d9ad1c58652744fca7819ae4c1478dfda1dd5ce0a3a20e10883277eb6504bcab5395176723247999debcee2aeb35a16077a5dc35457e3838392353e08ca092f3855a0c1d32cc78638fa18aad6f79b03f5b6384e0fe52151d94406fcb33100b045ea714bd188e2b3ed10587af44a684c163a01894da119342cabb985eb2a495d8ca4e1ab68195c59f27918132bfcb43f6f5d56bb5981f3106edb94b309baf49da838f02f9b7d3e840456c09c74aca96cee618f2246d0c2330fe5157b8bbdb3a12db16190c37a806dc3a82ff59010974fa04f2f3f4c7fad0d9473eefaf11b3d6ba4fcb13ea85097eaf5f62d41fbe4e8b489b197e02103fef42f51f6f40c7ad01b23f01005d810c1ea650275d2a72bef1bf0d016b6beb1bd4314da00e942a2ffc4f456f20c158e59e663740b7d190e20be04b172bddb0f78dc866e7b6239baefc3153fa0cb3ef9248d3e8a9431114579a240eacf66d589c4b58a102ace1f7a3929ef0810b124fa21f0a32eeece937790f510c5d843b7f9d1a8530586950582536cfacd21d2da637dca75926751e19f80deb1c2a7a0e0f3b349a16cf2b8c5168bf42f32a088cf9a9cb1feb39b167672dfc11fa61bec922a714599822ad699124134fdae41efa9bc597fa1356d4176c47176f0fb7a7aa1d14ce1b6418be6e268066464087003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000038118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000380d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000380a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000380b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000003829a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000038141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000003825e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000003812978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000382daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000038189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000381159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000003805ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000003805c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000003814d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000003803db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000382ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000381213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000381ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000003814fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000382b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000038305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000038280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000038223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000003817a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000003808858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000382618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000380f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000380e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000038172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000380b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000003805bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000038137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000382e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000382297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000382608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000003818373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000380422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000038204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000380afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000381998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000003828d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000381da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000003821d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000380ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000380e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000038107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000382f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000003809726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000003824f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000003803c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000381fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000038205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000003825110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000038283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000003821cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000038094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000380c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000381f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000382421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000381fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000381bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000038304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5d101771cf7387f215129288f80037929817b4e8526ee9d389b4579d066a1ff054d43a0842f84c6cc49051ad7b5eb164adcdb8dede89280f59b9ab582496cbd230bf2c66226d7f7f120d2b6f12eca0b71221f28bf77b317b49e67354fab7ed235c916266c1988068eac59349a4448e456f21e369557aaaee6970a478def97aa6a63a45c2a7f124168dd4569665cbfbb9ccf440155f79996724f90bb403e2ffab64449adab634578028956eeea51575d34970d5f8ddc95915a808900775d8b90cc811068ad0c1f54452174b3b7886eeb32d09d719974d999b29b910c99ae6a76ea0b26e0f327cc8f02d2d29e19cc507cbf42c8e598761b4aa1a552061aba66752bd70e15dcabfdc2e23802ae0958db52701e56f4a1555d8272b02e5e12947e8ec9e5e6ca83c9c1375a19d6f3c5c859d689e91a909837a754889fa04786d7e1c8e3d2b91138e7b1e1c68d4455a24e08df4d1a5d1bd42055c3ef8181fc3c325f151ad978eb95e940bdb3664b2034c0151ca50fe82de6f19f59d1a161ae85c287bf7d2ff6068e394a5b4cc774e1af5445efd30c0fcafed7273e5ca3136c53f0832e8ad6737e8f081106334517dca47e9c1d6c741408e64cc0d4c62580cabbb36e3600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d1ff0ccdd127f5a176d3a09f9bb09d29b4a963422bf7a10a3062a2a4a46ba4c28c16f0812d547cf49863c127f5ca29e74a334a4d1d2771df33d8d349261725dbf03e899c82f20a88376b07f99205ef0a5b94b2718359f58c022067dcf1e41d7f9a5780929aaf67b931662e708d972b5e78156cdb1bb45cb9985c1fd7c8b65ed8a4897214584efdc3fc36990e72b7ca1ad668419519a840cd2a4ef77099a3cfeadf7a44658a50ca43db6cc4376d8060482fa3c7511cdfce1d3ba7d1752e52275d68c8deb300987cd34c30f9e53fb8fe17b2f5ab05e9a02da6f244697b3ed8d79a8d904b2d40f5a4d251b98c58e141cbc793c394ab8d3aa4840e9ceb39c5f0fdcd18c1d1283b8d3a25d1a6108230bc0781474b5d1a148b380b6e74738c17b43e104e1d4c3a874a15d3cfcb68d391a439aa05d018f020ad843456b63f5c4071f601128626eec9f3dda84c066cc6e7eeb7280866292c58664aeee3863f147a70bfaa687121ddacef4680bff916a4fb987ba8cbd08698edf891e9fa36d3536847432e1579cbf8ae4f2e626b58fa69a0745bc0f33538874d0086960cbfb25080f0046f7913a51b3b78f2ba98debf4ff1ca6fb8dedd9d7433b0fc8d474072723c07d0c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f247ec6c507069980b02dbd413bb61775bb7a46c929727422623dfc0539facafcaa641999889f0645c64efa2e60fa69a88cb9e56893342d932cc354796b171bdfc7321f08f5e39f247a25bf4af82ba8864980fcb67f19e13c8ffb2b8c7847ee0d501dedb1dc95e5abc6993ad0443f27fe30aa86a3dc167480ea666090b33e78efdd18b2fee0a62bb71d4d33c628b4747a06e921bc3c3d834dd8e082e9ecd127accf2f34cea7c2250769df7a0e23ac09eedfc6fa51a20888cfe580bc592fa744a5078061181148dcfa297a34a0446a107373de5be989a1bb5983530b68d50edcba9be892e662b53031d0184bf434ce63c415395706fff57e703844adeaa4150934d2a4eb5711bd2b3cc69f640555d96274d6592b1c3711233169f128572f58dd4dd1c97672d75b382719eb1f1cfa2b170ab2f522805dc81323a627e67499a279aa2e9d63c01ef31199cf3eb50290004f801b7a82251aa447fcdec473fc0be5bbc4d7714883db6de6dc508b8d2b7c8da9c5368701320c36f8e85b65f2140ced6df7fbfec3d88d761300e311d2cd9c5dc196a084f75a306723f903ed2a828e36ebeefac0dd9d780d7b5456b0a44cc23a42e5dacf45d06c5d4f1f7c63612bd06ae00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000156618dfdcb0582afdda53f581669f017e154501c89f72e83896a2e2f0cebba401ae86d8b0b45c0fc7ac49ec9a719006c35a9d2f8ce1bfc76b38905e95e3d41d683f02d5ade83719eb8ab9bd08a2e7ec5b38c8443a051efab7f4ab64cbf404660ac155233bbf167e6c961b7fbd10d2371b0e33114085c9487360dd07ac164385f2fffa12d98a0cd765eaf41ac3269e3710bbc6a6d463e2f4a9df29301fc2395dcfd8eb7e335d7f7206fe1de1194a34d446a1911cfdbef267644ee915de709b1593df1e99f4e83f2b6557e24b04ed1202ba1f5da65123c64d1f3037280164c3e92383a468f70b0a1922431b5e2aafa4b319bade5822b0445e10450c6790431cfc3e08ebedf39b6f83f8ed6aa3f61d460652e099e9183e8ed6073042261bd5255d7e01a29798f227fe952262663d09da5c98cfde060427525b41d7efb726296d79c2ded5b86150a35287dde595a8b4d9ce9b3fe69478ac7a8cd9b7d8612e6555c5450fe65584ffdb8e5462ed40462ec1d5a614532609e77521ea9c9d624ffd1b6db78bdb71ff074e03b30bfde6d334fed9ab9a5b9639517b921374d532f67c5b011d6bdb31d8613d899e798470624bfee653c405d6c8aa1fac9bb67ddf02a9ab3b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002324d6eb8eb22a35c0b0ad6a2fac654dcbb10246aab4c5729f6f675333e33126af676720dfe36b996ffb399b3b1dd82edc6e90ad13209acd06411c413b8c1389cbf5ec4e45ec4f63742041341cb69c3e924aa7fec353875a2c5adc857da23fdf1a3b968fb3b4cc5a367d9cfce24c03c8920312900943610d023783bc8437bb627f6d39af5908d6776493d383b76c31baead8e3bc24b126a84faa88b350f578bafdd17d0c8962f09ef4b20ae4d20bc083949e76281db9b6e54903f3ef35a73bd30d975f8c401c840427b349951d29350789a0a461087eb5d315ee1f429d008624bdf7df0a2b70650ada4a350e805750de0af4fa69d1a3adf6f8059e7ed1d2920d71ec687a13f0148a60dcb034ed2c8bf61245cabb6ad048a5177f65ae9bc6a3af4890930e137ee7064ad3d940e5ed4d453c1bfaa0922d3e345d497c5d1f92a1124f0550128a9314e00067321aa480e2ea4b0f4658380347703b3d1e5cbae744096dab2bb63d8bae35df38950ebca6c7f5734acd9f4dcada1c1503ccdbb17d299ebd470608700260316e9dc2ef6550c617bc7c3db838f470a8b5ce9d8e2b4178acc9058739ef99c79637f4d9d915657ead38f29cb63947e9d0d789e863a63c2f90000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011d2c360db6914120219163d5f2e4258ad5a925f67e0dec90964e2dcecff9eb7e06e4a75e7622da3efc0b513e8133518b746a904955a5327a32dc0729cefd87f03f97dfd0832ce23c14cc6d9775d3bce59981032f51c41f56253a3c06b110d271867788c6d35ea13f41aea9b551ab6b0ce7911d6b4cb99e325550ec85a607500da5a99db63ef0809c524b7dcf4fb13838cbafdb3f705c4e1d6583b6cbde7cfdd8cd30acd2453eb53a150ea92e1995b81b76af4ebfbb6b0f211924f5733f4c29861a1deb368d2fc9da709bfb39d37e56410aeceac66b2554ec3d2fb5a9719bdd02a459f84f8f494b55666b721630f99b56854201e1e050f88be91550fb5b207ef43243edd48f31a1f86b3b49383732d604f0551b56ee73f0a0faefefa35790236b202861087a01a10984af742090571d166a93be825470eb71e7508b9c8ed0f9645d7555ee439cea800697f448272f09573939ad0abc61732c59e3dbe9d4056568593a25cf38726eef5a18ca224b4cb6d6e185c0a2777740a7dcb157be5bfcabe38cbbe5790b64fa1b10d5cfd037e1700b09b47474419cf670aa9a50ced31b7670e4d6854645d7fdf4f9ab80ac522c933cf472c2b90c3554f2b239cc461d9db290000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b5887b6880648017c45004675f5e7bef704942d2f1a365421283b8ffee5f7c17d267ae37717d6e131781f1a7222d52227d65ec94def7ef016c0ab3c66d9f377c307703ba4bf00ee8918f0456696c38eaed87685e0879b1d7f09317472903e2726a071385194326e430b9f6cd3c034a1e22c48715305926360b5211903bab20e119f8b57af70af27520e64f9a650369998f9a4bc32b1fc2523b2d5b0e02a4c8d85374b8f5f9d69bf358410c547ef0845fa7a7a21cae7bd3533aebdbe2faf15d5692e0607d78115da662b142fdd1f86426d761003bb546baa761df4c7044c3eda44112f3dfa4540d70dad2442a494b83a9a66affd20b11067e31721a1e5e77ba793cd3be9eb9a7e92993a2ff282db20a8e96bf6fd669d426d57ca5f3244719fc65727f44eb7ae512b450cbf328c1226d9c4e12e979d0708966e3c06a2268976cf82ac3deaca52d1f8556fcfcf84f2b2364cbc401e145491632e3f5c76cce4d4d6269ace59483a6332554f384871120aaf96a3537b224a3616c1eb710079beea68f1eaff98cb5373a72a2dc63e4561ce6715a41925e0bb64e4c05afd5b6268caf69a5e16bef693db98bfbc54b28890b35881d6838874f28d62e0dee900c1a22700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001683a1e40e080dba54a676cbab800a7876e8a20d90ffc7f7123af68cf42f4db1c59208c4a33844b46582fc11483b99df8505665fdc15facddf6f00f1858ac8bfbd586ab5a09becc0698231702ca1da6926230a44d01b44e8fde2b632a9dc3ba31a505472d56bb0ba49b627107857fc2f4752f4782ed45cdc590b61f8f06a3ce20685496d426e46590c8463d6d3a2c8b6bd9bc646d673f47c0732e53898aad6dde025471296f2be870df76fca2e498dc6793ea22bff965c45f26a8204c2ca3d41224cbc865a267fc2da7b0bf34442ebd9e58831565627d012245cb8f562e0bca60fb95a880921e9a0313145c4f3c5a3544b038fac9d0c846e03d6b7b70897a70f7c389b8e8e575186f6a84ffc7cf72e8079c4cb5827587d8940d4555fd1080805eacc74b79fce20d7d4f2d152e25949bcff924fff4800e49b7ab109651b57e067a8dec2b70da6a8dd47d90c11435575c575091c673cdc203def306c39f60efa674b1f205c44391605ae3d0baedcb8f49b649fc45e556917241adc7e7ae5217865c14734267038ab98dd06f07393aa6262f42a0c759c0fb07716b9ce4d85c16373dbc6e08806e3f45c24210a73ae5c614a27a507c224cc6cb442832aba7afd4661000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088bb6887d247e39e666aecd237b0017ba22501d400029a4e56a436b36d9bf0f80f8ec498cee502970b936cfdd1c3fa78f5d82175ee0fed57bc60c765f43b5939091a0339cba6a7e1e54347582be24bf65c09e5393809f5d156ffa5e6f0e6bea02bd6b9149a32b13fa556eeae71472ef517a8653083ef0fbf87e653c491cf8c4c673c181601f9aaf81caba9cc3dfcd2a1d30b9fb5c20d5c51516dae4b668fff563a54a1f778a114f528c960c843ecad7d663a876fe6a1e2a196dbd490260ff9273155569bdd23c59bada5b7f8f60ef0125f4cb98af40d35d9fe9a6ad6a29e0b519cf478b09f93826220de1f2bf8671ff2acf0b21db14418ee50e0779107d6db6b9aed966bcf4c6a56e193d03d056400f4444a47e27e2e24dd6c3817d7f24946f2c8e344f5f6c80d807156d36dceed9f0e1c6c2e0801ccef49581a751bd6f741713fd8e4838207599060c92dad421e593cc888ecaa052189963c28c7bc7cc840afb4bedec32a74ab8d7dc6d08fd3c0a9f8b998c321dee2ef347cb0e46ad88c947e946dfb0c54063a1c8950eb957ea0e9a2ffdb1d893a1e16e9889154b367ebf3f1b3933d573127d66cd0f97ea740720f301cdfad0269d57a1c6280d4585854586100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002adc0253e992eb78aa129c47581192c5645d72b2d08469ece8a3638224c2925018aadb7c943d2acd3e5859bd3ac1ed30d7a71602f8cb1b4eb57e4f1f777c3974e0395922042e40c6809f8a646cd8dc36a9bcadb4a046a84f474666d44d0447729cc0e0c43935f10d62c69762d9f93cd5021995a2cecd8b66e9d92f427790e29d2ae46391bfd7b202172fa371efbb9e86ac92292bbf5c25cc37287bf2d4d72d57883405a2d6532c0fdf5fd839f9144ed0b14ed28c181f28316be88235130f90a7dfd1e7a2e98b9a660918b265414a6a1186502057b54291590207043adf32680d610f00a89399b34427d690427d66fcc7c9693edfeb4d0176f3e878c419ee217c163b39daeaa834349ef0715e1ed890b640d329aaaf095cc4eaebbbc3d94af9e5109f2fb2197e5840b2a57f801df9b0ac2f9cecb7ec1cb7a77bc55ed3e52cdf42ee71562c7c071c24d6661293a602e0665a8e866c0f6df829446c19c3ac4481a9f970ceecfac427caaaec455bae6d3b7bdbe5e5579e8554db54e5065a34a683e515022003d2246635158b4d94b3212624fc193b926b54e03011bb4c23e6f8379a26bc8c580459796c86710fe03fc19210319b58f9a8e571bbf1c964d817ac959e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008509de67297f8ee0d79508106cce7e6f5a844c23a350a0c8c9ef694ecb04e30e028921470c3c463228deab3df7748f3fb9d4f1fb55b51f8f84df257e3f9d956f870b832b00ec053b12b123ebfe5aba949ace78c33571452d7ac7907d24e1198e4c52888c3dee6985a130710eefd9396876edd7797715e8b4d88e08f750d4a4eb3473ce65ee0d17454cdc0ca8356d53a5919410a3fbbe35a0741df27a21afb41532faec1c2560a84e35632633617299f76378a8e1a22eb1a6cc6fb72a99adcbd660ab4ddc75f9e6f9126341d36055a95e983b6a85d1a7755bf3a68f43ff0c00fe424076263526226a422b8cc78573e378d2370de339e7c6d92c23583ad9b50ddd803c8515a1050b58009088d5c317f350250496bcdafe37601b393688cb234f3ed051cf522b101d679144f7f4473ab87b1bef4a006d8189fb818d04e50e6ddf21a4977064017a6b7f43709ae7d522179a30de682bab634f07cb18614e6d9819890ae9773dc3b29c9e80987d9d675a519c6e5ceecedf7e12878669e4b3465bc4da6e83d8d4e69bc883634f8560ab9243ca5056bd40d984808955e9fb926b11509c1a094836035058c5b073833fe85845c0570ed914acf7c2b0a3625951c5161f0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088553806c8da72e126af319d57a1cb4b5beb009ff444e39c7ed2ff9291dec61f13e8a08b9cf73f51b4e75cca21e86097fa7805944e922d4ef23768a10e67b43875f827fcdc6f4e23ee643eb04f1bf0ee454ed04a6904aebcb2e2aa60a0a3b9ea977fe7b3102c14778bd99d7538b9f5ef823bd37ccefc40eb6ad48461e3c955d51ad6c3281d58b10cb28e70c21fa621d5f32f80f1df369bd37d231f437b3ebb0052839bc0259e4289babf8fd68b246ffd41540b8c27eb30f3a77051e576a738340c64e70b57f987ce258759a6dfd366b708f99f9c30ddc45ffd80609d4bd1f3cee52a3cf9cdac97eb6981720b0024fc5100b537cf3c2938fa9ac43300adb27f7d8e922d56a1adc1c4f02301e3db64a9ffa0be176ec5efe96dc4cfc3033a3f788ca140d7202ad8a6a3a4bf5924bb47dcd1afea718b5b03168efc58c1556c94f1b92d9b3d927cf8531032bb4973701fb48dbceaf90bfb42ad622157925ef8f6da918b35981b488c52d7663fadf33867c697bb6093b29027d0ce09692a7f3da96105bdcdb710d9e6d106f999083ce05966730bb7a8bddb160932b3a8691167031c5edc84b3714fbe968c383f3527273fe3a9d5264db79592210990e1885454424a760000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6e9040884e2d9a35785a47096d2b26d1fbb533fd41e838a2996b539fbdaeaa7e8491824ffa91886ee9a5892e3e2d7c6994f5cf287b2cdfc2dd1d127ebe0bcca8b55a1f00143f3ff0172a9d6d1cc0cd2ef30053d69b360e437dffc228be0528555b23cf0fc68d3db4d926df2e14b728982917cd787e336f07cba36465f0bf9610c81d41058d3dbf06b6561cfd0a8048b48ca2cac3c68865622d00486608eca7ce71a1e3cf4a989d36e3088f6a8c7059a7dbbb4222ddd627f7a5ad9a4c9afd53417e9c14383d195a914d54e98d82074a1b42b416a1a7ec2061b0e904378ccc45822f0e8ec0db567551481ea0a5831c63af649175c56b09a806898461176fc39c5cdfbd2552916ca9126674e7e15c475c0fad72552c25c4c1261f727dd259cb4b2b6df7d7453f2b13f55fe95a4f6d2b4a0562b8b301cd45e0469e6141ecffc1b803337a65269d89e5839d5ce3daf49126e532df0ad37315a10f97471d33ae2ad35bc7808623b2414eea1815bb8e18cdf9e116bfc00b1633157efea48df0ccf060464f59d810e09a7d96c71829721cd26d0c9ebea10cea55178e14066b51d34694578ad036ca1cd2bcd073b6c0a655f193474a961b8fee373e1b74b6103f4819c4c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b5279713437e70cb309ad6ed5afb16159151bc67202cc4c06f3126c7771037a0f96ffe7d1dc2739e390dbd8f13940b19f5051246b8fe20785f2a4301919238c56601a7a3b07ac9a7b65c2181c1a679db1a9d5496e0dc2601be9d95381da479df18b580712643514a7dd4c70535a5d1dd6352c0f66c6987b1428d4264703559b4c3d3d94c0c226e7716b7d53bfe008c032c7a7a5c41632732b211b48cc52f8ad666fd1a750b2b442adc309adb97c1da32f7111abfb078cbcf9331d74ec392ee3ea334ebd2225d9f5e678efb5352362a169e8545e0fa927fcea4b4436973a7db355459e95fd391b8f623ee56cca111b4d07d235f8aab322222840cea498e3b01d300e3a388c902a4000bac1afe424551c649d54fac006d72a014f07c345f120f97dcb002bc31c909e8a8dcc64deea267045ff92248535d7b1edcd74da9e093692d0692a384088130e4542f556b5b78181da330418696f9316ad157126c6884a3484e0e814700a868d3be3cdec830e3820b23ced98b4a2a1ab0ba76c8fbd6e9992886f356c9997aa59636133e21908bbba10d649420acb4f01c951f78e5b573c9f8027176f13d022ed55e9c21bb6665197daf34aaa47e47ffb1972429b6143ef1100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d3dbf00625e5dc8d6f3901601299ee0fe0a33c62fbfebf8ef5df8efffa154cfebc77d9270c82bd68a80293f465da95e7821827cbb732222f46ebdbbbd31a3c8b62d0e813c3bd53380c4a8681d4020fe60f84f7c1d3feb8db21ec2b6a090618ba927e75989d8fdaea9a2ba73e54421aae6d1f7aa7e2262a3f011a779be64c829cdac39a15da0b6e2ffee6de2f2af74521670f41e94dca7a4ade2c8bcde8f0599d47644749be5012641628aedd3514abda2564e9687b13c15040441ea0bfb4026cb81dc07dd509030f0c457cbd2d9066804b84e4f5fefcc9e1cc52af75ec737ed219314fd58753c8fdb882ef0dfd5e25e5724442ef211fe728f014edbdfb2f3ff89362d7cafd537ea7d86836bfc19a4075dc93039f26f7d4b7dadbc7a33f71dbbc48e10d81f329c49d57a80a96fd49ea2b05001c43e734b989e391cb90fbe0ad5a4823c9c8431b0313957334b562c81032640d478237a5e04cc2ffa4b810e6f4d13d8cdf9a37690a37cfe19f1141e1eefac9d1310525f25b9bda4f6a0f1f87f6994f9c950be9ea6846c6a7a2acc7029d66d3c29acca09dee5af489b8cc8fa81a5cb472208070c6913110d568af2add36482c8526069fb4babb8fdca6038fbf4a30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6ddd175812a5c1f97542897da920fd9f80a8802787d087b2c00d2c4a5deccbfcab0145dcaa8486cb728c901f22d6020245ee88742572d13abae5e1957f37fab51dcfdd0fdabb8c35af95d639b82c695fb938a1e36e8b681ad1754bf8c6160b786093e25ae48b59ce0ee418fde374448c8fe34fd3f40a1329c7b84dbbd655e4dc06f07112105005980dd46de3e00e82d08b72f9d15cf2b2279a279a0a0de11fffd26a154382c10506f10bcf834cf65f7f7bb569a270c1442757d6551d1386bf926e828b18983501f05d8b5fb2d99a052d1fdc0bd56203bd8a868bc413c8c2e21af250961c878af1b5877e79e24fa5fb004cdcef064059b5cbc35dd1a52944ebaf7881dd6516efefe3b5a50f2faf36e15b3ba5be807cb6cdda5e5b183946005cdd63a9f6255d670d0b1e3497cbde4c4d9f90ec8ad0e6363509ac3c3845babd11d70fa5afab3f74a693825d570aba632f530cae474f9098041849bf0fcadce1a41cc0857d29a67760f771b077b1cf08b89b42418874cf4c781a620c7461d4864a1ee4e06f542b72eeb049f07847462b288cf1400c798017b9345dd43647074e073fc11381858ee30b4fba670fd88bd7aab6edd5ec7ed7c2eba31d60c951739a71400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e7cc4038f0eeb3be81753b0945d2539ee0cc30de44fa771dc48a193aaa8ff36d4b33f5e432f7172f61cba23958f7bd2d447e9f58e97d393e5c40001acc1b3014b649cd03c6193f3e04a9c2f6f0f9da449b06b0d626935e480e73f05c98627d1424d9e4b9ba3aed36ef4bec6f4a5a83b75a6ea59cb323e67b8b183dfe4baf3b097c9cb990db31c39300fe9be2ccd5b898b7170c24c683f8aae7218cbc38976569ea36b2dde99b192b233192a1e899425328328bf0e4a68c3d94a75071b2e7047d77c3172a9674777f0c18b08420d6e3efc06c2dcf882bce75e1bbccec13ec786fd8790a7c1fc298567e4e9c6cc9d25a03f4b380bc8ec606d18234687eef5565178d24364811fd6ee8ec235a08a2e3471c1a903301cd92a1aacd4399b3b3bdd6be2943e195e7e57c6f44ccab2e8c3c10efe552f5f1a168dd9795ec5aaba46c8eac28fb2615bc0129c21ee97c0d038bee6a29f60d5e75aa5cd99abee6aa699a9de94bdb0a904265dbb67a078b2560ec62931db0ed6177264cf51a62749b2b9bff45e71b379b873f2d4a6e13522cbd5b7283471f7430c33fb5c31db6941d3a768fd3386274143ad62ff6f1104153e3710bac13c613ece84b318175c1ba41b9a2e440000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ada20ab284c2ad9159f47e1596e9732cf3657334a714097f243a46718f09db701e1e13eb52e67235ba9f92753182c9e37839c34a298e06809a62e96455d9f93cb60729118e233c0c7d6bc440abd2abb8a9eb0b7ea43d916089bc88cc046cc3eb16f0fd8eab2aa451d8419110c67e10024c1ec2decdbdd666a0aa4d1a7115aefb17b27160534ea2a6738fe03502f59126c4f09b2f854263f1d2472297994449b7ce6dd065cc7845c4e74246051d3b34e4e669fae8643eaf7a7ff60abe972cb46134820684b22fdd520945e5b55ecf65afbb30e42c14bd10b3473b534ea057ed84110481b6413a5c214c00b95b75471a7b1504faf794e081843e51c508295d38ca030eaf283c6a0c22a446cdd0f928b927287e15195edd4a408150231da26ee3f4254fcb340776b343317df6a61946fa050f9e5fcf64ca4f8f5b4ac4bc7212987193aaf99d23f9b3cf509bacea6835ebda1f71b9d44d8fe3c8790fe257af7073b8378322bc2f84bc1d928085c338c4e1b9cd07e3865a251372eb68ce64b97d9d6b712aa787604597b0a1008587466d9558228487014c65632e62e62056163d95cd86bfb687cda6f2ee10e44dbc1c7d5454ce9b6f586a855ea6020e9a8722eee689000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ca3c242eb2fea72733afd48e1521b096a3fe3940e6b8add42aa70b1a0ee5ee401ec966581f30464a9a187761b8338db6bd59d0c45cddc70007c8d4aceabd55e48d045400ec8b2c6353c2a7b7246f1fd74397a414e9e4e681a56ec8d49aed7f8c1736bb7c73d46dcc26eb5c58bbf224c1b3a17b9381bf4c8f1d27e74c5afc841229478b582dffc96d9addfb50869b868349a36c258e0bbb9243748f85b50dba542516921568954caf62d025a6e811f63bb52b0d2000029b68e6bd7b9e42d466e6cf01cfec8d1206419bc089558a86d19c62fc0ccb2a61ffc605eda8b296ee6d4f23769b9c209867c785571955bf4aedf0e04d5b6a0f51123f657567c5666e4673601037f8241dfe133afbf400dd6a01b2a667c4f568ec71b653887abdba4caec78f9909799db0b7bf3b391502f877f543ea7b37dc03370e6e2605921396fc54d0e5e58404dca471c41320707141543953ed9c81f2527cc9f9ddaa2a9cacc86d2be6dbaf4867dc9563875523b5daa51efd0368b5fbf5291559d96b8307ecb5289d01640076d9670aa26054e1e2012696c61fee4803caedc88eb80b632900c65a84cd0a211a1b544533bb44a7a9e0da06567c914a8520ebea7abae9ea95a97b2a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090828de15d1b5bb64283e013e89b65e96118a7d630c389401573d4fa218d748b85b1c609c9d77d0b82f7438af35b5816b98fd47118eb0f46f218bcb85c3fa846b392f1f46759b568baba3bcdbf9f020de02768da7d89dcd5284e52c9b91a68eba720b58b1d4c81d32b5fbecdae768bdc31c9eb07a16b88999e3aabcae02fb241b4321accc6b470451dac3b1964c016844edcc36838e3f832773d7be9838c90ca5299c5f1cd5e12f3497c0b089645404c4b7c05a011a098513b6c7f7fd5cd73a511f7088a6e1a26684acad27059589024d980a90aabc6bfc30eface094d202c1e1f457bcfd6e272f3b5a9846d5cf58b8892720155e4eaaf6e58aa3adc86d0730edb3cab501213519cf9195926bca9b536c3262d6d3471b0905c3a21fddc6c2e4629c78e9f225ab8572f390797db76b9a8cb9f6dc50230fc9a51cf718373591ad936a95453548fd6a8851202142f313cb8de599dce2773ec8876c3cdc93259c0d1f61e5dd3cca9148708bd32148e7f0dd004ae3b3113e66b616a5a050264da4499f5948c940e2348e5dd7c5f4cba45fbb8fa7781cfde2f34aac8cbd0956bfc0a31a33fcd0a5c1c776d570e450832744975cad67c33deed1c8e92d5916fdf5a0ec80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b05fa97a4a961c5d503f125a1d87fe1ce3c0d5aae1d1c769dd6b4de70a6f4201e8e33972e1c133c54d29fac7fbd25535bfe714904da2d6bbfbec2194653b5652f5ea0c487c48b23ac602d452d9f51d10899b33b69d9a4aafbff17b941bd306e4ee83f55e75bd41faa347e639809e4e315e2bc6ad020533fd2b22998fd29038b0393e636f204846dfcff148eaef3867b881be2f5c8957019e794b3baff300c66f0654f4c42e2e97fe52e5fe94cd0460d654db0c90afb2125a2562e5dd3e3d27897c3fc857d2b8c5456d45221192ad1f98973e74c8cdf1c9c55ca16658271665a0e6d6a61e354c03ed02a2681172bae4fc3ce370f3e482254757b078cf95253ae800a7737177121ef5a8076808b1cc9b1e87d3bd7be066914c90623c44b26bc4d582ac23fdfdeba6ac5ea56c11993471cf14886e2c843c9998d558883cbacb904db693d72032e51a474b349c3e9d2da17aa848a4bce23e81de598427205d5c0a2fa105ca54614a1bc0cc973189c530d257da23ba26e6db78f1ae9d23ee75561b734dd772c01469393c2188dcf6770c6349a628308246c983505f171adf12f4c1e0f79dec28f36aa16da58c51e6db87ffe0f1c14f17abb8fa246c394b36fd4bda28000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094f1336f1c50530dfa47abadd977027634bec9a781772274be57d274bac3b4d3ef2d0cdb240ce9b0068492e1aa5f296a2aa0a8a8888e1af8e9c470b748b8d7d31a0ecca1cf0241b667ab92ed1b2008f7a2684c2a07bef76c1e35a97a478428fb34160223391df8162c7a4ba60dae045bd13149e3cd8c6ccdc6c809251fd5c205ab2eefc39b3354362c99e827509e0c6d5f482bdf41a3a1e4c3dfbc9b5bb8d13d1b0b2e0ae313232c988bbcaa70093f876fd41313f7513b756bc0648c851890bc5800ff20e9525bf459fc08e944480713901480732a1cb7ba3b08d4e8cf53d706580f5615234b03863f28bcab5159754dc37dea0d11e5775bd433c3942b3736500ebab992cda95a2d14813ce0c5a27026385d49cc89b9097b97f25ac9f53492908b62bb231a691a7544ea2e10149eeaf4ca7817d61061611ea76c41fb5100d5f4452675447ed2beaea4736086064adb8539010f0d224b33c050d4339707ec1e61c2c5d6b6e5a48716a9e75fe20b08c9d9c646456e5c5e5a452d5dc88e50f2e86b585741cef006f494ceddbd0552aad680a77f25dd250b8f7de0c911af19653777ea650d39f5717bf157efb4db6e8ed64f5e17d997235bb041d6e0d73fc1d1ad32000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029ac8c72bf26093a707d7fbb8a2d2fdff77e9af6b99a6bae96fd20741b5089ae9d8aa6892766951d9757b4fd81ae1a66f377805e0abe7a4666295d314e7b755bc38f65e7a760a9a83d4c3b25cfc5af5b1d4587a973811ceb58c74dc5d32c0760dfb5568f190bccb4db1d867dacbe15b3c08122ab7addba6643ee2614e13d9c2132dc84c076c96d553d3625f96d31a5d47f7857ca8d4b8d1a08205f0381e99d525975ffd6b92f7424c9da3eb5966cac29fa444d41ad1c3a7da5b8463af6f0ca5224a28ff0b38e83e3f3adb6d01a9206dc348d7be60464b55f6221349816795d031dce33fc2231725bf4a9d38ca5e71ea5728f5a23a44c448aaaa337abd78aed29bdaeda9125c52ae363c81d21f7f507ea5f9346429b10c74f8b2885dc0dd5bd71dc4fea5bf9641ff27c521bc3014d9ee8746c10c79218bac02681a02c0290c7faa71047bebca152f21703dde3f0e411ccabaa80709f38957b1bce3510c8e2fffb29d14281d1d40659a7ac096797356cc05f3af5696ecbe9732ff5851f7e67edaff2c37866e5cde1ee5b65ab8702665ad742892acb009bd9147dda2910021b032397a4e856060761539fcef8bb82a83eaea3d82ec37be14c3ce810759ca76692210000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a900009f97414805ced45085fa8590052344040fbb15d55d498cfe5c5e8f099055d5fbd039817242402298f4b0391bfeec2464d380512ff1107a52764a614f9f0c13bb44b0b75638a33e2abfe6c0a3f896ab3fea6bd17e5f549ff1581f85a5a3ac6f98c253335de3457c7e1608aadad21f63c5e523dda12d4c83bed8e8aa4ad3c73619cab414cab8c888cd928a7090d2e35f58c2babe5098cb08954e8c253c1ff5b2822a60c39cc69dd58b3c440e62041ed15a01c1954d11b33048aa8335e7d7958acbc6b1564e15a0b3a1fe8f843cd132d5065e7d6dec2bf7df1ad1bd109319203e81e5881f0b34c445dd6aa18e158493c22f6e8c7a9d6e57f660a0d43869815440294dee7a67671a097effe229241ce10f817c36172ae16c0f78fe90a5de908382ed29ef5cd5e8b55108e6a235ff81980e3d3ac71a5907049095f0f8ded9890594f22177199b59063ec04e16318994a4db5db386df0a12e4a595dfb7d5e9d712038233a61760210e934fa18ae7cb0adc6052f7147f11ad991fb0b28b371a4878991240d25e17fce903c749e0a964456c18ca539b4d078daa4130ded8e5f31d7d89c720aef42801ca7fff53a39a0588dbf66ff2d901ef5763e1b3f1ac75665c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000269a741342aaa36b3498b419a53cd2af5eff4e54c37043b485e5ac2ed3142bc32f55409cbd2ab5ebf1798833cd9b1b9355c55c6279f3d3d73268464c47ebe926de6d634ae79bf48a44503a55fe41cb4d2640a3667c0bb6d2b44908fe33abbeb321e04e75b62235a5314a6ce4efc6e7fb104d6d1d6060952117b38c6cded34a8cd642acd76bcd847826cc2c2c9245944a90a9dce22595dcbfbc6fc01d188c6b2102031b2b502bf37c041e6cd2a36e307fb8488574c05734494c2721068f8f0243a582df66e569d4209c9cfea7907a66d9c859af6ac3833705d45c6215496c069faff594a0fce75b2508ff9a4522afb951af700cea723b58e54fbaceaaf5b5bfab8f727c6799b0719f4ef189a26f00bc055327f171cfe2f0b8939c4afbcfce87af1bdec558e43b84fb30168d486d70e587a86b25296408f890be54119c1b340c0d2c3bbb7873f7aba7a56e8c86fc0509471d213fda9eaf1bd1ea5423a519b7b9a0fc4d33d70e3a750dddb9992636e898dd7abf6bee9c9ae77b39c21575b039173e2d437e28dfe32bef940e778d51a88d579c6ef50e6230e38b2e2e2610dcd061ffb74ab5f7f92411f9006a00d11af5b552b6c916a60f7a9f2cf611c9430fa02dad00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d98ad686d08f5651bd537ebe163b10f9099e05c76685ef1356c3ce17b1993be36b89ff5226903ec2aee52983ea368a1ecec97f8bc4835790ef38d3b508bb573ebaa7e89dbafc0efc37af5dfe96629917e8cb91fc577216acdc61c90cfca74ad763bfd1737e6eb062c2bf158c8e6637f1b2df75cef33c9c65577cf747cfdced6f45c519c8c24bf6d05e672a9cd0d4ef90abc750a763f4308b315a05965ddc81385843d8d5691438317af68a45b2dc7327f9626cfcc3a4c55527d113c3fd4e527272d480be3b262fcaabe429bb680d823b5471e8f29bbb573c7ca95389fcd55c12397cded183138831240ba3980b15118845727beca7a9834b41d640bdcdf8b9225e3b96339494da4c8015a50536af484f4375c103eb1da194a039cb3792dd1aa0fe70fef8348cac13d798ab798e807efba34a00b51c88146a187ee5cc7a7b7a25803712e3ce1b692954ce5cc98de214477e10c403e1aa40496d078bf84404a4d4c4482d2cef33c0dc843db1e115bd9226700b2e318b40bed3d86d22e8db34356990f2f3e5ed8b492adcb2aa0be584df62622fe527bb4ea8f23fe7e1c41a635e9186c20b5866c71679d1ef12e6363cdea6943d3d7d3f224766ab78addc65e7b550000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099c1a1774a91b519ebf558b0bd92bf1a955bf62fb3c91e1ba6326b4b7bae14d76dc4fd22f541be2cdfb6a085ba2e8fea0ee884e35773f22aceb1d84f419750abbf797e086b3adb29ed7a51f2799f75836cadc8d169ea280b4eadaaeaddfc6082d1ecb8a3751066e8336d7d3fd4c8cae1b3255033f0283b7c80ff7034d3c784dcc24d84f2f104327b1accde0a3d427b87f853e3b54063040fd37440c9f8ef08198386e6ac0fe424ca89b6b99c4055142bac1247f8395c6e44870179adce870b6568da03f6eb2dc1e7a1929e64d708f1f3a44518373ace16f4ec506b9fee795bb21e5441db0575931752d15a170e94884513fb8d943283f71e385378d68f05d959f1e0194e866d8424a76fd19186e22ef638cbf537e9cfc4f5cdc5bf4bdb96bd7bd7d4aa9187d2a04714b66a1366d793352c893a6f5d1bd5e32a189d41fb5657740f6f942a9847d7eae525f6bc68144c5e968ddca1fd423b130a57bef29b2ed3fdc19b328022eec4b2c850603e7e870edd70eb6c81b096d4feb151fcb27917eb7042a2f10dae106ec77dc21c913c6d48164d159caf31bc65555cece8285995c530a0cc8140fb91aa223a8e0d2f802c41e0d4efea817bc41aec76e7169d2a19a41000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080ffa7c394c91b1be9f4751bfe202a8a0ab210134fdcaf2c5fd5174d4eec1c6913db8bc2cdeabed732f64bfcab11cb2c521394baf3b59d9a6e2805d42eeacf3740b5aca57d161b53d0e19d9650c67ace38301686a446bcaf8aadcc37f9e7bb4a4b788931d9b716ee837752a2061408964351c0bf04196e7ab71945066eeaf80da0cb5fd0d65ce70589606c70a50bb0ed9d3ff136af7fc80dce5c08642c8cdb3693de69bd1e90f2969590676bd44f9a5f2960c2dce05c5aa6d3eeea40e075a19666adcdf1e5b371c00a6136afde091114cc46d40316a2e9a7f990fc274e7ced1cf832b3bf613ce130ce13bd6a6498ec19340869c1b4c0aa3658db478de7894601487e28dd28f176cdd6dba98fff7189d034a5e484db30cf3825b0975fee60ca9855648127e41d0f913470a31504cb9828a9e6a3a3a098b29062ef7472af26831d8277d428f6c8486c78fa139f7b1c8c75b8ee35fe9131ec5f57a8c79f8fe44c108fe6d3f703ce82c5fa15da1c4ffed32b852e2b71c0afebb3d7bed5ea64721d6d206f094584b56d1849b9beac35eaa9dc623d7b46f96f6be717f38f38105fd66946039fb893a9a663594520ffc0a7751c1d831f7cc97bba471d9dd4c2f24fc62f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019387c6deeaa02590e315d76addbe1e8b0c2e5f8a26dffc515f14db1418a2924d82cbb023b7216442dc622cad635c2b8e18779649d70aa8e9a2cbc2ab94069a3d835613f5b505d8610c2ef61fb58c0e06bf902e0b5182be85b559753a7116679a76f52aed192acc9d3df908bd30f575adc9e1f9849f137292a55ca6513bd4024a5c0948395d0165968861ab17b8f09a95d6d11dc208c87d86ec5c496da7d39b104273b9962b57c6587a3c0785d26af445b7b5a469a66790f6c357cefbce843ff7bad50ecd71f17239535471947ed318be6fee789ad17e6c66c3893ee6536ae6739249d6f45a454deb915f39b889a93711d2ab6f8a149fce9602a42c26fb880b48d4122fbbbd210930e20c63c2e9f83fef0409cc0d3361bf1a9b1cbc390757bc79a07d3685a520f5be37a2b5c074e7eb5b37e6145b9b78bd9609ad8ad80b7a4e616f63719592466916773dc8be19836c54f3a9f2e340fc56cd8766fcb42c2ebb57567eec16d1bc0f8a0e07ef5ffe6ad4c7484e36e255c59e5649343479ab79f1ab23b463c08cef20a3bb01eaee9aa077d401bf6a37568dc76b7e0522b02da4957f0cf90b8cfb6ed728f0c8efc708a0bc8547c5c5d10c3c089e0b3f5be528f49da00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e94a1ecb03e3bd9beca7cf12328624afa8efa3579ec5ef8c7aa1f277e615d0f7c436271c8aea92c1880d64ee216791a6ed9b47251ac922a7c93094e7a660c66f8c00e071f4cf32e299f548cb4e54fbe93843690f050c917891adb3b4bcf89e70f5ffea20e8c24d1062fcd6e3189816cac8b096c8b7a78a252a282da6e6bdc545a199ea09860467fc043a9ac4328131c27ff4884b3f6eb86416eb0c172aa76b0a2ae4e9fcf529251e720d9c03a4f7cf79f1c42215b40378a74d72351039fd63b136b4d8f011b2d7856135d13d7098cfe3e1454228f849abded27ea21bb8c4c9266564ff24650e544b6a47fb1afb5976d7a6776c068c0aa88da754cd7d7a44e63517c3450866d26287e766e60802e9899d5eb1616d411cb9b9a851abf213d75ab1209f94d80dc93c3515b22866b278814e82f97ff97d698c5305a5989a8af15de41f63e8e7520628bd88bea8bc30ea1d24b293d26597af5ec700dbefb27a2358f11b92c817f2b41705a4965f1bf62d830f4fb4b1d6a57010ce5ee9eba70aed97656e24bb8ebdb76fdbbb4d229c67d5ef6cdc19d320faa072256afeb3777daa341c38bbd7136104c367dacf879a90047387a8c406a6ae32285b7fd50328f8bd4da0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000225bc83a32cc0dcd6cc0b149124e347640e6240d4a5aba78f80fcaa87ddd722e46fd1830e83a60fb43443dc222214f395093096b8ed8a5a02f1b6ee4e2b0020fbd1d590012f5648b9690c8b36f84256bb74657eba90d4b7dc78e08d5bea76d00071d3eaab60bb645eb752b60bd0c82a03be99f461aac4583889808cab22876d7317295bf27c270d21fc66c898e35b92ec718659054f3739b62c5da5b6f252838eb068b217a9230a1bb16faaf6d2c97567c589ce629c9820c7e27d101b83edf8be444094ebd356e9194aa1359ed5dca6cd7ebe4655800b4e7eb9aca6d8251f39d8c14b52a29f68391a789937f6b054b8d270e215e32de9ac8443f68e8bd96c28f3a37e414799c1efee4730d319da3d6df164c2269b8a8b858ed617ace5cd8d370635b1d1201cba980ea26b275fc20985e20d215027dddeaf1ad5101f8a24bdad36db0c47d694fa042a5a61b5ce568114dbdae575f28d8af87f2c1055ace63da25ae42d613d59682f98463b95454761ae2bfe6a4e9703856267339a48963277f64091b6edef2c984c85248ecff712a20fde2a32bdcd9f57b4a07f64f29619e3ee701472490a427818e87269d2428f9411ee55ca645fbda13f9f2dd96e9ee8438b90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000149ebf51a8b78411d55a63236ebe7e1fd59324e212d9d52894ef62bc6aa1471bb57b4d7d168c44d0271b547cec92e07e92cb342961fa0bee77a4e389b5c14292e032f94ef0b81a669b9fda389ec4c733447bfd3100e2f2790e81aa5750064d733cd0ae4331f2db0508e4eb5bbe78ba00d36629865f563f3135e9ed71987e14866581674cc8e955d808ec595007208d79f4b4bab75c234b79eecf9eecf71a2fb60aa5016cb558cf9abf190df47b76ada351a324200b4a71670cd677eba0bc9b3d23a455e234607d6de27d9e05c7beab9b428c45deb6e316a0d246dbdc2dd1090979de82daa58d7102914a6047903ee5fb07b6cc0e53277fc43df6994296f007062dbbcdf6a918e55012502085b9929fe5d6ace29f8f382fd878999c42d4e05a72d7146a27750d717d77eeb55170050e6bf6d0e89e78ee3e27908dec66c07436c6f4e05c6a3868f27eca54bf7f1d5245cfe3540ad04a7f23bae974f2130bfcee463a5ba7d5dfffda1d1bc64716a1dcb80ba308cd0d0bff5ebafb4f0e17b3f51fca73935e742cf739f1eab7b7cfffef635167bc54fafe0ecea079c9eb48f3175ae95cbd6a68534edc93dbda4131614325aeb7bb0b91475f1239030de233a1b6f9cf0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aaa4344b4f510afd352c117dc0a7ed901c639b9a573122455a9bbbe4f6c238fda58118b4deacfc3ce6d368d06272583fd1286970c584ed812f54c9b72593f369dff9b2bd82e159bfc3636e99589f34e55ed412381f081d11d0b9dfb3eb29fb35577956566f710724a6d4e884b89fbc20ae3fff4c02108716137cf2343cf813831df532919120583de396443fa1a92c70af130aeea7f0ac056adc90ee98c7a8b69284ff9c3f637b77ca1bc7e251f6af0bcabdfcf91a0f63679d3f1924a655f11aed9cdb7c96827371851d0ce6bba6b98370c583cb0790055522d783960af15b78ac395ead8bbcee965d2e40dda8c0b79c9632d3c028a2508e81a59782b80eb08c101519f2d64343f6c9258f967f11c2214698e247b1c3f96df9fadc775db24606c7cbb269e3173435030114562802e8b5d13fcb7b1c30bf2bf529c13eff86dd80bd0fc3f4bf2277c36860d232dc12c94ca3ef8a0eba57964acda16428f2eca6d60d1b92e92da289a2cc791e359641fbe87902d2fb77b344cad7a5a7dd8d9f0267ecf3aeedbdee6e0d65422db8ce15716c2ea6b3d526af8cc9445a57f15a615c544c883bf86f0949b566dd2ec0f0ad7b6bf7f1edcfae33aa28a2a1ff0709a8212500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008765e60dc709b20d1957a01ce33efd1c55d325b9867270be50d0f8af561ac980bbcfedc6583f99430ee31c7fe7211a41d2430fbd0a59e1af0357fd53aab9f1674b9bbc6cf44ee9f8e386358e34df3bcb796e8a282dd8275bb9e9c527b1e976e80255e4edeb1b460515f39e3b85be00fed0e144ae62f510caed1cced2da778f0702c68dec593b2a46a15dd7a7506a5d3633abf1a8fffcab11a66110477a22ac176e86225985be3e49446cdf8c45dfc2fb527970a5258cb913d06ade5b23b3452377fd3612e0c729a212ef141b8352d7c15e638266d1551d0ae017b2a28017ad1949388cc679601db85c197634efa526fb76c3bde6023f419872d31da06ea002879ac07cb6a9751fdcc207b59b7b272536a7d0f46f3bb6d40c3ce23517291d47aae5809fb827fa26a39cbd2cab248f04b5cdef5e592f43159e404dbafc90aaf2bd4c4e4e45de706df758ce1ba00f1d1effe9aa08a95c580ffd488ed9abe54f3458545d2b4f985affd0fc1b7e5e2f96497c5b5043ff07e54a092902f4a4d5c6fed943e27684fa7f8c2f45d97aecbf3ef654acf5d29b72030e488327f8a3fd28359eda6f950b8ba473a36107819e63d7fad6fd6d3ee0a64e1aab370c61591a50267000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000572088696dfa960d0ceaa191a1dbe39f0ef366771798f5db6f342edeef0b036a5533c35945019bc1addc6053f08233c9850b4bc60ea70d4b1b2c12a84a06b7d31c82b609810b12a2fed3722729cb264eb12e31cf425c2cc1b89f96b4392894363a0fda0280889b6e49d79e5448be5ac509f5fbcb14bbdbf8a671de5f50340ae40c45ff685b2ec05c6ed2dec54e43e416f42eb642ea6f6a9e70b4f7e6828f17444add48d19159f3b49113376e78c2c172790083fd5d4b108cae6309a35d095f18039e1003fdc35be94feb3eff4d44380aeb21046411e2fb4e5c2a7e741a1ea86a7b89ea31e7f1dbe52c9735de6a7847c4a7875b0e42c53c0efb17e7cfc10afe590b05243fb2bf8fc3fed37305d354ed9137acd096f7acef1cbedd4df889c2063d7eb958853f76534689a835aac60316ca935ff8691d33c7581f1c8d2333ff8872e717c465ea820ab65d4f34f3672ffd2b5c2d81c33aaa3bfd7737dd962686905d71173b649bc1dad05d1d4dbc974a28cd2936ab11d534e9b86eaa5f541eee1eca6f6566f65bd786621e88175fc4b73988e4d7e54c2461ae8eeb7f4a6301c139aa4e389b1b630ceabe9700204ac68c86ebb33b752f9b2738206b9470c6e21416200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e93a6a37fdca1461c1263f6e7a64445680a327178aa5497a6b6089379c1907d488cb72ab1b384fbaabe1290130b6d65c66d3ee8144d3733bd1b055abe8859f1544a89e2c12847a92e86284cb38a2ee1b1ad04d0fe0141288080bf644e2844270355570284470104d8ba4680d8973a04c6d91feceaed8002d16e395a77c93c2924c6193549a92a4077239a19034b99ea3d4dbaa98201a82ffa896a4e8d3cdca08946b0a57e9db1aee010cec69cbb8349867d448a67ea313e31418ae571b27d1e64b6aee071dc0463bf26dd611c2bda3d29fd1b6437222d705f976153b648f52a1c55f48c0410de1793bf437d2e27cb8ea67d82e55dc2f1c4437cdc5fa2457fdf37acba934171ce1cb620119cf0b6dd3ecb37bb7ef67bf996a1f341a322afce17eb73835be7302e182d2674db333cd3a67f245ad46796aabca4ed36436c51937a6ec123e9e2afac5ed46b78376c14425daa6d4748c42e8d6ab0671cccc00e675e941bdcd295fd52c0a3e347d7895188c7f007727cdeb6e617be9ac4a59f2adbbecfdecbd11b7dd5b172c7804ec4b905311014a0323bbe1bd0b69fde7dd2244b5a72e126ea858a455cc1942f4700269a0a32fddac7f0f967f123eaf4b17661b54c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004251cf5cbe773c209335baee45e5fcb3aebe5301cf39e62f5b1e661406721328e3080e0014f511aee1840725e5aea5d3c765ef32bb8d582c72d55d80c463a72ac2c36eff77e8f1e023a606e206256d84139748b38ac9d9d718b08bcfdb86d3113d0be7fb4119a50c0eec9b83ef6658cdca87d7bd591f5d78b370afdcbedaf0be5ae54217b291d75cd2c25548c650d04b0f675caed7d0f6401d9580f06ae20978ff0abe7a3eb64a78cf2e2b87f0a51d62b4c97926b0f68b5424344622dffe227ae67672d9cff0449867486ac6d415a9fee21c6ac782f28614a2d96b8baa7645bf32dc53b4cfa5e59f94e26926345fe41d46b50fd781fec012dafcb838d470e427601eb0a2e535c72590aeed755d8ae54154b5dc9377714b75fde02c0103bd97ae9db53ecd6c34f8a904cc020ddf4fbfb317a8c5ea27b43d509831fb9867e74faffb28b637d48f8f32ef67ede226686ba4096ec618afc10cfab5cb9a293a11982ddac73510032dddd2477fe790e47815af751a6a1276ad319baf21c1a92aea2fe2abce172511e2d5b54dab62354e8f123ae478185ae9946bb23ffd1418a02de516d75e4da7aedca4a32cee97769f6a6712c5c5fc0683e7bfedebbfc3ddb7bcf6a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008519091bf1f36bdee999f7183602f9a4a910afb6fa97747cb292de9ecda4aae7454726b880a8054044f0fc69ea70d5045731d43238ae620f1a5372f8e7fc39f533e9fd03d2b208b0ee4f0652a402237022758d1e98529d8f34d99ba4e7d2f6c28db303e471013fa6efe24dec65473a3382d707c664d0dabe5ea908f5f79357aa50b3b8dc3e089696a925d0be5fe918214244846663ef88e58a94291fe010fb33512bbc95e24428b5c9642a4a98fc2e6c489cb599113813dc876fe681ebf230f46c5b2e44377b802f19d169e067d4d7ea8f79ddaf23bb339dd6104651525f00dc3ecbeb9631bbee7f8ddedb3e6f97061a1746bc2ba80df1d06b66dd35e9a3aefc343de766792be5a73557d65ca365cd0f1a4323fc39d3ea4143f315f5fbd12a0ca9c015be378dd0b4248b387182db2e4d9b69b6960ed8e35d3fd06203ea72d9f773816fb7b68b5ed68576068ff51bc1af0f699402cb4781ae2f04b28153dccc9fd0271a6c3027cdd090c996890f70bd537bb97713b514b95b3290fe500e39568eb04bb5e5547737ddec133bf260aff64fc68dc0383bf165fa206879f7c83cb9f2257edb4b57f1e058c60cddd59d96d092c1e899583db36e6db38741a7fc96656500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001407c6d2f009233123f720da848389e50864c058072128ef4ce12fd4f1b7b50e8aa7ccba2ff931e1e073e6f09714fd6c2858d1e3e7afc96d5dfe4511cde0c74428a4fefc79ccc113973f36fd8d074cfcedf9a82b85bd4dfa21fad1a01a5b4e5549e0e4fae6916e72ce729b2079056de23bdb332853b7a0d7184475422b9410878793b4159ef50e5767c2221e8114589a6dc1530cdb9540fbcfafe36ab37212051022b18da6edfa7f6b0d41ead871139cd4703049b6d56b7df8ffb5d255b62d73b3b370d5e89e2380611452ca5ff5b534a0ffb76a4a82206aa529944832ac62efd1e5c0f52068cb465e36e3ff0369bd3dd55c886d87ed71a5e5645de3203e39639d068885d4aad09b89541b0585a3cad2db20f091966396828537eb34c33bf4e7ec120c67654e04f93b980047101c9bb2c7f45c31da9a907419eac2b9ec5fcb6c4fbdf9c2a5bbbb905df521bc8da95e6bc6393a3fd6c34ee9c00154c2d70c77ff1851edad22f28b6870a6f9a57f29e19942796e9a96b6d2679924710b0da739a7642a4f019a932ac8ce8859595aa24c637ed3fe8b6c1972566a72336fb01116f7e12dfe4020551e0d49901a43cf2209ed8be8c34dcbe4a7d4ad280e2f31521e5200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f53621a28a0778411470c22d4615713a0dd7f50e85ef13f2b7718b544b6abf0be98a5682ce0bf4d824412820ba40f8c13a1fc06c98ab18bc62c57e51d5c83fcbc42bdaf7de562566f89741ae62defb9701492b35d329e8502058607930f323951bfd0e32fd8b909244a928cfe6ccb34e508a3bbeb8014aeef5651f2282ab7c11be3e1d8e027f414d1fa8e4abee4e44fe1a9d2924609c802a02324b28eadd181dc07ac685146b66f40cf1001656d332ad618e1eb7d253e10559aa253b479986210e39f32be259552bbfa2969e241e71545b5ffad7c11bafd74ee0a80d83baf6feb229f481fa03bae54ef1950b1c383edbaad1fefc70ae1ea7c6640eb33ebe3bbcf7edaf933867bcb035f263e88409e54276ed9d9096265f4a3bf6a9908e0d8332b2b50efa12a793e85da7f336fb0b338b0ece77deb065a09c6e2e2cd670c3d1a1df4fce27a8787ba5bfc969c095575d0b5707b995807935a009fb02a62f90ac9018b9970ae133181ea1c62621242404741e84901103d5134287bf4be2a2729d3feb0c319a35f0bd3150f9da0ce2cdc7bd7c2e96bf6b9f6f6541159ef3234d2f5d28e7327eab0dd8e159516f0c41155e96c64ee5963512e0ed6a6689d1d3d22d800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a11ccc79844e6f3426a56a0ea343011d1515f311fe4bf263bc20c10d5cbdf9cb8b8e544cca4b80b492797a50c2d707a6c6b762b08b2083f3e741bfb5cd3fe76b6fcc586d316b9f40873f38a265b57d0fe68a70a9124ff25bf94807074b89627f2f1d5e91d5fb5f3a04863efaa3c91eae8f8e6b6837a5d064934d4d2213f607f03a0d44a5fb9fb94e176ba2d7883d3a4fbce056d8b2525c11bd48ef5933927b1464da93f3fbdd7920c347aa23d1c57fd01fb8c58b46ebc0115c0c32783a74d912c54ea9a5e73aab0ac7628ab2e48d2802a78740739c203319c8cfa717112f74c385d91644e27ddaddd9a9ee39b3491ab11ba72fd71548353c05ce4f0b6b0b8b20c36472224a6c8fc6b78923b256baf206006e2a0d3f4a4f80c3710216906eab12cbceb72ca5c5a0edea79620f35e61957e09aca4dd279947802cf0ad80c5226d733acb9cb5f073c399f24f4028ec943e76aaf44f1c386b90040e3c08294709936bd34d2ecb8e43c82a6f449c762ce77081cfee8441df011fbad22e9d5bdebecee7b13d611eac74df715fc1c5cd234df5e3d79604b721dc496a9b135ee8ea2439189c696a7b96f298b649b5f96448e918728c38891932318b599d41d7565c21450000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a67c5c295d643a5a772324323c9da1305c2b4e19022f25d40318afc45b6da66333551545610fcf3553837c9e9a411ec4108c45102d3ae54d0be0a425e71a541c80a29e2697efaafd6e17854b968244a22089876a13d504fc5797a2779d2f3e0a8d561c2bac07dea84ca045dceeadc0a3e67cb73046e00f014ab7f8dbfb61e00a58cb9b1c585a742c9ca34a55628251e9fcb4b9ddf12526a18391e8efeb652dc7a20e1b69f399cccdc963e1c0f19aaf2de2d2daed870488e94ce0f178115b8afcd1a6cd4e1360a2d6539f718d27172deafc1c284f99f7cda8bb19178a94bec194caa4340a76701d85c2f5b2711bfe406abef90ecfe63ec34aa8831df0387576a6117222621ca021f54f7a65f84bd55a05f843c67fa80aac5619edd766cd7c0d63ab8f29383fde42993720ac030c4ea723b02fada539ab090c997b5a78b0accd7de95644d5587c55761532c1a5c33e47e048fb58b8050b44829f563850d01f008c2340946c4cdbcf7b449a95d5c34dab003e1918d32913fb53e6b9c7fdbd394a7544880cb7fd73b7fb40f5cb1c0a7085855ddf93bcfbcae839ee6fbb98b1bb1b4b2ef456d6bc93ec33ab9cdaa8468bd627825cf06181be6decc8bd0e9ec1043a59000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024d83dc8581f7a3c04d010d26cbd0e3d21b7942793334bf0a1c5dc4f766277fe0efba1d57c6e39e08831efe837203c394b5a7831d1df8a4643b141c94d8e58528876381d877519983221edacff4d8aba0eb4f0cc1e8582bb5ae064a8a3480ac7458ba820cba44d75b7451560228c8635a9809902a4b91e4a32592f792c838773e27d7968eca615275ab256d174c9c04fe21c6670e7dfb957811388c30068b6b7ec3026648fdb1f5a15d35730924d174581d591588dc770b6f9f4c89d56c9421f75949970dd031c5ff93479720a548df335c5068a135d7d95f51fca93c352f1b219a41286db197f96d249801d74aeb03b79e32ecbb188c2ac4640f3e38e3a8eeaafefd7451f6c92954fa11f7977ed4e2e4400bc52332f96e1701a0a8836df7f7d3de911dc789b56e422080c601f1ecd038e07b7e359aada010e0907e88a5e8b021818cc702c43982f592cdbdb529394bb6be88a7211a2b3a09b1e054774083e8c347ca3c650a7f182e4282adb9b9c20beaa2c252ff98bc6a6ad774517c9d25cc2e9c0f8d58a90097dff80cb0440dce105ed961443cd2e38ef5651b3b10b57a0e77fe6aa9408de862a533bc1f0a80a333218957293582993a524f46f5d2fffa2380000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a286054992f9cd04425d5292a6bf71f02840b0178d5efaa88999ebbd29e3818447a6d490256e7b5bb6a05451e8906f9f255cfdfa0bcaff1e47cbe56a2806c0014ed66357cf42be52a9bb70398ac9733273819cd8b04f9db945c66a756b09d4aa375bd733172c58ef94a4cfcb2f981fa9a7e5791e6b16876066103d729ba44bd506b7d472dfd735213551b701d8968733d007e415859ed0d975829d3f827d61841dc8dd7d50f8be840aa5a4b735873fb9d18e2ca2cc55da71bc92f2a75baff9f291811ca69c9bb059667b30d6ecb1748e3d0f39810cd756a83d6a7a83993133a69b4f7e7de2ab6eb5f4f4402525b026e65130b0cf0f79c755d88e7b559d025fa6435fca5fb7dcf16e3e1b161386369aeb471c0de2596b2c5cef83003d9d7d4c92d6f33a6bd4926dd9379d56f3b9c49b5ebea67cf3525ff0550b371b1048cd2a9687824a10ef620c5999951c9e2fa19d3c9e5d1d93de334ba4c3ff34217cb675cf5eb518fecbb9e350b0e78f037702d3a49c32a5de8258b2393ffee385cf6027f70779d56361166e249d9afb62c8e52248126b87b9e12b6aad692e6f6c5ee9fbc08feddda9865c31a46cb55185d73be0a6337b6adb965518e58e3d44532c13efec000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022355fd572000fcadba70f23d49603000c84f7191db80f0b8ff44e0a1efc7555d8ad3318c99144295c5676522a17f7dd5cb6155abde9501afe2ee27bb69a1d10a8d0f9a9b47c737c99bc010f60cf2c28dd23156ae8ea32dfe281132a5c4e8fd5326530c0f5415906933fd8a90f5c10d942f2c7cc4d70eb68847f78b7c9078036647ff30f0c239b81f01de7aacfa272d3a46bb607fa9b4b60b93c4f45b5d2b1629df932cac321ce38b0237631980eb742d316439b20bcb75bff9213d7d1cee3bda85e50b4248061cabdf85b3e31e1dd9c204fde6fb0e6db928329522f98ca26e4903ce53a3a306614f22de738683e2c53fa88ed8116987419784b65ef8596fe2aee6ac3eba481ef70bca976d449e26342f657f3829c0e36b1c42b59e3390d9549cb4efbe7af8c4db726345e4618780fb2c169860f861bdb60f1fd0a21b4aa5466cf6794f8e409809a38e007c26ed284b9e5b603670db380e6ca92f2bb14333693a7e091777de26d9e888f1bf44fbec36a9178800d11fb4ddf772496ee801597a0ce8b353b86d0c72a8efbcc4edf7fd0af47ab17f76a53c2e117e2bdf720220f0640b0231dc1b0dbe29d78430df49ed4e977c34a3d8de142743ee6eac03cc6c41a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002134024e49c699e982ef62bd29b41a1d51f76ff84b9a7eb73e2740ac6d8047168423e1c1958a273a606254106798ec9174c8746f90badccbe8ed8d6afb2598ea084fdeb5f00f2997720768b8b572672992b5e295a787e9d9c76924cef74526d42f117374c03215097ab7fc3bd4dd7a88a5ffc1f5898229b886270a8d5c01bbb3effd6e1dc2d687456efad5615117dca53d7f8b3eca6bff78b86577f7d6e9064b4675ead102a849f62223ae7b45f79bf71acb7cb3d5cd325b863986e34e41b0bea70e0b988dd5237e18bca8e380407407b784f07edf6b23a6c9f8f99b65a26a6567683207701fe315f8a66f2562abacab4d789e5177098cd2c3c70c3a9a92910201a3311f06a3bbb20d041ab579d8e16ed58e370b001a291af68483993fda052ca67d7ae0446aad318bb83d0d768f71c09646bd615a7357ad4dadcc642abf4870ea1cc6013e8e27572f8162506edb87c8fd42c4a65c3ff39cb2faf8240feb5ec6e66ac82fedb7eb0bec2c5b1444aa5a5cb0cdb8796d4f5b947c617889718b16025e6cc8faaa3fb125643d9f2feae622f76b817f17b7b0c17b0a4f10e14f77396b038c6c7e217d14fc1ec72e235ad88a37ea286c6ad5916da718467e52a9cbc4c5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085574d53c68e22f2be696bf53e5ff4a9514ec6f66beb8dda3574418bf20ec195d28bc8432c454deb7c7187a3fd4e9c93dfdcb8b4d9b9f5d1756e830f10c8c1071c912de79a27e85df02bb7e1f90b2a076d1820e9c9bc1ba0b7aa204cd1a4f09829551de2e8b0f3622c5252857ec5d729fa5d4f39d9cd151e969071a6c56622e32b94cc8e520777b316a292c4ef9d19b67644d315079b62cc8bd970cca9280d0f16a5bda2d981928982df08f13540d8cfec375fdec7ebbbf2da430455ed3dc439f0353b6d9ad40081e817d3624b86a978bb704bb5d653444f6c61ea5e178cbb452eb5344ca2e9a765bf1cf37602277d43117131bbe2fb896b61c83b06054b48b1911f8bf461fadc5c8f7576a2ce599d6b4d17cae8062a991a8ddebbcd1787681cff976bdc9efc9805e23ed09eb6c7b0348bdf55a163f9aa24d1b91496f539bf652e4e5361cffcb5b5de3c9aa7f45c570d62567255635c674f6cbec03d6cfebed9d03b4383ec8b81e91fd0492bb3dce2ade71292422d60b36310d33a74afb071a14e9af23b9b08e93d95018184355c8c1889222018c46ecc10dc9124d6f6820d5ba16755fd6a314abd6ba1eb7cbda438b9e8a794ca4d744d1f3598c36dde897735000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026bfd7c45cba9739eec850305d3533842b1fa158fc4f586a1bf096019b7fb00a95bca5938f47640cf575a50495fe5c9d9a81720b096adf15196282c6396c38ef5c9a12c1398d5e6d5eb0fd0497c922f09eb1b6e112039909484df7b433ef7596db756e9d234b9f048623bf3cdfe7f32a0a8db26fb44f506e063387a12b55ff549c54faea11776ff2210bb08186c6352466a1b7ea078cf43807a577ce9a68b3f410f6989ca0519a9d4a8e997373735d77d1031404dfdae655ce581ff80889f058266f886e3160cb9ee86e7ae483361dee48ae70aacea340820e79c1c27f18cfcd76444b5a50af4852fb09315f9f31b869d9b60927ae20e0298de0dd6847154488459d2004d80c20c330463ae1908fe7421799480e7cf8d6e1c52b5e34cdc9f7a61b830ee32938ad289ddc31040669ab206966b4448ef6d226034ec60a0232c8b9be21e2d01d122c59f94fcf74847bb787da5b304945d93b569787ca6e3e1ad2fdcf0df0c27cc9a05beeb2408ebcdf75a6b5cef7d07002fa888900726fb60dc9126a3d2720e67ecc2d17b0d07e41505122bd5a69103cc938c8f05ab1cb91dcea088fbb80daef6648b8a0358f23f99e8666d251685f8522304645e24a097bc1c3ea0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad0e4061f34ef31d9528bc8c4dd56823f94312fd4b212e92745669bc088b60b89600fe7b26497a08c601b1f88ea8527cd834252058339b0c343cd72ab620edf4158b7c7a1fbbf0aef6fd16189263b97dbae1b206f52c119482bcc2dbb032163eb6083800c53dda376cb7ab738a1d5e5871cb804d4e6d6006e255e687cf97d2cf497e93e0375c923964fd82f68381640e27a869ae4e070743c1174ef2b3797c1fe7a37f23e4b4794a20cdeb15c2d53ffb755ec2e5ee4800e206986caf5c0b29c81a0cf4026a938aaedadc2a461a96585dccf92df6042dd7fe04037769809ca408be146d33b1f15e43c283bbded308c57477b4fb015b1f3bc44fed50f26611d22e8e3265c4e131f3149cc1f289bfab7a910016ffbca3f4241cda921640e043442ac3cdac2d7be6d4642def99ebcad6c66a6927c26d2bf8d72e26ad505a23b43df4d5ab71e6ddf03f957af8ceb4c1e269209d03e08c98425dc06c6bfb88a80de32d0d65bb521346bc05c0cdcb3ed2fe89091aa465e13b1b06b4b83280621dbb9b470c10e82e0ff4e38f2aa8708cf1b812ededcf2f4ee5990e7eb0265735fc0bee1235f2273c1d26e3e6de399aea2d9a7d413ef305ba0022bab1f7fe3e6aa3ce89360000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000294b981a5b20403d07ff5d26ea5351021c9903e011639c703ed336a1857f4965de3692bc769a6aab6e4a8caad5544357cd51cd5b40819ca929717db5d3f747901b71ff4d11b632e00f9a9581db0e5c3dcef39f9579c39f6d8e9ec6662190424255fc4d260cc0b19764a4ceaae08ab982b7f3c88ef0ca37ce0750c08d693d33eb694677ed9bd55c39f2b7ffb4c5a81194a54bd0750ed899976e7f75ecdf18f2a12a4818c5f7f0fe858784f0ef5abcf2e509f2038e1f51e99fc69261dfd1475dc6f8862474529789dbcd4eafee1e819654c967e67b92a1407c7d8d52204169375ca9e0a333669eae11cab0be41ebecd25cb37a2a55bfaceb2f42a928ac5b0fa6579eb6cd457c901544eb8ba004dca46da0063aa411615aaf60c633fe092fa0ab4d8fabc84e053371c8d08ce35013e141e89cf28dd0ee647fa8b2c50d2a0c397109ca5a1755756d081119abcda8595b64ee026f91308ede553682ba8037a202b494771dc9579443f1d2b7ba22c9600afa9afd29055dc1797aac77331bbcb6298957a4ed343bee1de1d9f1f932bb028b21f5fe6b573ad2d287cd3acf0d3468fbeee5ebcdf20fefcfccd5cf7c579f49ae5b0349888bf42096c622e42acaec337fe3c500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f7366072e5bf414d8268e230c94cfd80eac239c01773f7e0898c83900a7fc9e5d06bd534125557b9ee7aefcf2bb34dc8cf9ca6ca63001ab54c3e05428e3ebee5a9552d4a2109c85a79dd29515d2165ce76cb21d68458e0662a83c18d3f137c7f94c0ed120edd86b01967f307de6d714aafa9e2594dab3b1063299f1383921c8b276e3131bc628e9fc78927ddff9f6394ab7bbd3dde0519d12ca9528ca33d0af80dbe6607824f2c219a69194587911c1f248deb4af267a84edde55a21e1c53537d190a345951520fa68eef911e4c69f1764f502e6eb24d66c0cd7b821c79c7acb31dfb41d8565f2d41c3b7fafc6814c1f4973baf1026c5dde05f10eb4f1fd71ca63733f27d7f26119f6bdca604474e4bc935e800d6ff01caac8b198691203a001491336cee8a11e50524a61dceab71be21e9412cdb58e97f9a1b7a83111ddce5f86e26e044752dac3e54dc8df262e0c135ef8da6e4a1f2e347c0ee6d74e9a7b62f0d8380c0d5c1df5d89d6abeec9be68f65296e8984e59ff440a04ef68c7a8bf6def7fe6b62a0e30b7006748899845dfa6bc5d3e043618ba38eea03646bb1c18cdfa2771acfab471a3afac8335888bc1d3727604203e9b8e9ad9e0e1ed8d3a3b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025da6162a03a1f79cbf9efab520d161c08e164495da1ed1f5bbd81e87e6be310ada44743199cba235fe2ca9c9dedbb65f7263c426208b853ff17b573e9321469bc5101dc810a2b3e310c58160969a7e440c0eca5b7497c9b69b5111ad682f8fcfd00b01d142961ba357bb9f365110edd80a90955e5b76c5ea3e8b2f29cb33f87c42c390ab9da14735bbcc654865feb41ac69db7a72b781d70f25603a0fa74a430f4356a5d36e33472fbe52bb1cd935c959c672211c2b4028af64e08d33bd9f5606921668f7f7f1d294b5fd1a169a9f80565ab4c907731add2501a4010d710e9c115d9f0956ca0657167a33d699a949e45552ae9144fc3c022f3e802ad2153516700855665a904e8f59d1fe07a18d40a89bbcb70900d0b0695002b9827fb51e1c5ecf439fb1a4af4ca134c134a7962a53570577b33ee7e4ecf69543b62245e58c38c540044abe7855b9cdb4b739b8a397e5fd64eb83819774b6a31b1ce69baa0277dcd4a4b466584d8b4a18dc90efa2050629d8c2af6a8adb8c713bdff17b3099e74a131d8f714021256f757d037e2d4d0d49d07ae604560f6a618a132d0012c68fc36849ed3b07c9d5b65136be220969891e2ff993c286278aee9c25960738d300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009421563aa8f38bb3270772a6c9c49d61fad227832cfe9a8ae36351188c9a47349c847ba5d87f9ca9ceb9178346bf0b22fef02e6c814040125bb8b7c905447a8f044631d420ae7ab52d6b73b7883ee59aaab90917e3d10470468d41bb90d82756ab09b5e0b0700f0bc5b5e04e41f71123202896e5ec7162e09bc01654a513809b6e5939acdc3523c20dea2303d5736f8b28b5aef0ad9cf08f4a6241cc6a22ff20d886dcaa513085e2ea75883450366e24d056189f27369f9de4370afd223e323a3fda7a58a16b4bc16f78db369720107b6518ef78c27e6a03b1e62ebfaf861ad93aaa9b5a864b8bc1fdf36b552b402b480fdf6bce4e53881427daadd5cd890fe721237aa6625c252e0f25bdbe4578befb08926b064d65937db9cf89bf86b13d4cdf58a4ddb1b9686555ac3ba2e66b076a4111f96dd8edf3077bc6a0430b6848874113afd705080c4911104cfa04b6a847affb71e1856208e63a0da3c0a71f446ddae26032e913b6b372fe4691044eb32e8fb441330978c75a846cd2db8dc2ff52874b91091cb48d8c2a501f20dd606c08505d2ebd1e5eaa6c167d425e35b9dd48369b4e9d7e058e3d2eea2f443178078e6ed86b27b67f866e29261e2d4ba75f37000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084cab15df88248dc09afa65f800c7ccc3ff2be684e241e010b9de830ba4c753d7111e4e2ddee4cf1f7cd3b221f956e23e116550ad5dd702a02aaa8ef83f6886e97856e1fcae272a66c65e257096da2731863f1fa367435d839fd1b3a6875688779bbd20560a09b3f2aa21b86bc3e47962e39c52c9ade16c10f5e0e2b4d8be16cc9c72461ac6f383090b1558ce4bf8824c94f9f94d35af5a11e9025fa70d8bf657e2aacb2ad8d46720fd45cf2832630c4d111934f5c4d41f546253450035a08a33e79da5a0203b12c9e192843ab1cfa10ef0d8729b4702be2a526376dfb7ebbd363c56d4b14b341d147d7c1f48471059e74eff86c5af33d243a02d8f4ea291fa49709bc84103d45501e01df07f4f71853de321a9dbd93e60559a539cc7cafdb759d3b3df3e0301e374abd3ee011b8e36c31939a58489129595f753fce7bc7c34430bd370eeb47e2edc0e304d922ecbf0b01f9f0731407f9d7e4804d3e2253ffafd9b2b15ad4693b9fd2965f7d2a27f268f8eb03d974270ab74030db602f8a3ed7632312ade328f053fde3b2d634792a610afb0f057810bf6ac7ec37aadcfc5dd6f67f26e70e2316452cc48fb47cc3470d191ddd03456825d1656739a1f6df0d3300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002622a43bf99675b4cf3a7d5559b9d0754060c4ce1e01760dd3ad964f3e2ab40be149b809437b52a65ac2f527c2c08fbb803bd79b2994737bb8f302da1c8a4b4a11384879fd27905ab0944950b129be5f22f64e9cff033ce4bf6edc96fe022cf60f69afb2aff87690a4e833fc85b7a7579ec2034c9973ab48210ad08db4758d3985236310acba7e3a1f9314a2727b0589a9d5faae98cb60b207aa30cb8706841bd177f680a1ae88126304fe81dfa0c513f6a1f56e511704b7ff78f75a746144044e40de3562d7c1b636edcdb4552c5a79852aa2356dbb10c522b44ff9e7b3394377fcf0a30cc516d1144449a6607d5f11e066d6ded2e4fdabee0f9dc08f4dd7c2357cf104612a6ba7158ff5fbd588a6c917e6e6806891470ada6a04382af0898ce62eb53cc05bad4695b03e0758541b3e684b71e8a31604612ecd063ff6b519dc88844cdcb27c8fb3f9fdcb91599017dee8b5953c338239fe18861af89f570529bc683f14ce5bdffc17f21bebaa80cc04648e8d5d7caa09668f1b73604e2eafb94ace79b83da5067d41589ea020a81f0ba631698c73c491e05b5995af41b6a0cc40d1109368d6dff3164c174d29b1f528bc96f74a08e2948ffa1f1743b3dbd77e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a659a09e95b578685fa20c12309c36c1d004bce3aa7d673d95e10001620d6e5b8d295efdb94e417bef4d0527d268633b23f0c44b1f245ca61b575b7209faa6bb3744b8c04b50499296ab124c9ca4475916ccfd6bea19fa6831c35c877c12344733ef7bcb22450710b1f49396dcca783a92c657fa3e2a3bf2a2104e6357905f8afab59f3cf9fdbe51089da6cbaafb1e551f403867aea6291f84e05210401b8c0967c36d3d16cc56c63d337f2d6f3f4372fb73fd0c7ebb529c7a8a68e7ffbfd925da35b14a2cffff99db2ea8988cba1b7645f112fde82a086dac31c10cd3cd3659630a97ea92831a089a21c8aef9aa83ed5033676c515d3171eab615e408b65622bdb9fe097528c2a2deeadcee7feb73a58c05ca8f780936f3187f2b3e46a1eb8a5b2c2604b6142fb0116b74046e837d94b6f65a7b3eb7a719f50df3bf07d84fb0720d26943b6ac42eb9a224b46a9cc7777463b5416a23d4431fc8cd7d713b80a5b01ffd40020f185470ccf72603af57dcf94f67797e8a8577a75a4562ff78a2698a0b74d04eb69ce6469a823d38fb473c7c75d2d8f9899b782b3046f0762cc3c6c646fb759633c48f42732c997da121dcfa9284ad008ef5949c922e36be4c7c2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094ac80040af037a9e568dea998ff517313e63c81d0b4c14e7b48b50466d8d08375e5704871507d26ebc2e92db5978dc2dff76fc0f84a1f8b4d3e3da84a5e3bc8a89f461e570eec0b1f100b5aec7449e359286d3c140c4a303b5b023a2e1e6138794d968e086cd14c95e54465c288abbd5de6941329b4995b6d9e67bd20d81a23077defbf5c2c2be8350fd8e26051d2b1a4dd006470a666a133fb00ccc5739256f9c25cc31c0394a6b978130802a9e83461429a303dd47059c8226bfc3264a875ee3561edef3abb18bf2c59271139953a34d9c1b78ccaef67bfee33e9a475414ff139f3769c1c624d4b4088bdd2bce5f6ae601711dd613da952fff3efa1d24c53088292048e68eac8263287b1585a44fce5c6d58c4f88c9c41d67fb013bc31b52743e3edbfa056a7fa70fdbb0eacea4f7106d87affb94a6c987ab6552a67d748ad58703f864bc3f31b61d687673997f174d589d18bcd73b0bcf62601d914bbe9ab6072b77260ec11c360acd7eaa5f3ae0e47e80e06ba1c8e940c8fee0d6823a9680a15203e47e2bb7c2ef44bf4078d83e2e7492530c871bc167b623f0a10431b041426a83ef131ca676701b345d9847d7e789bc9c1fccf791ddd50cb4b4025a1600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aaddbc1454baa88ed9ad805fd9b773b7f3f8b83e7ff5ee006e8d01015bd2f4482de1f00297f88f9161e72ea683d240ce6f70c1bc920bb3780a404a41b2dbfbc24d67893c214e63236b46f157ca661783bdd55601e220ba6e99add6f760499444ccb81aa8d9c78fef6d898b8595ec854b66fd2570a3271c4e41b0bd242cdea798185c91bf4acbeb67d8f09b222f9467038ce4fb62bc2f7dabe336f7c953c9556c698cb981361b5b61d0a51f898d07ea7d29189dc99778bfb82ed503e4f7243e818e7ce5c72697b20a389646cd12a09806eafe5a12e23b4e5515177225d4a7f78d89dd2a00151fd91f80637daf6fe0cb2d3713da25004710266d91a3d661e2f96f289c47541a853464fe41780e1762265cc31520031e35fdf6bda5a7aa4b758a18e7025247ab9a822a1b7401953d46b6b96a3de3f1eb0ab1e7d986da984c61abbc38c069f0bb1d8c501b9b2b2e5ea629ec45f5e1cace64a99230da36706574e7c26e733cd2626baecb2c1941fd91355830a8ba1f470f453fb9357854684ef6653ee73d60cbbb37ef3b1be8b79861cf16cde8a550619025f8eb74391f6c801d4b38a21caf999d072363f16ea4f5d870d0608aecb63e94aa48b5804fdfbe3e3d6e5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093f793c075946db0686439d659162a964efce5d96604f4ab77ad7b8201bd57b47e7c0f738e3f2b1a2bb43fec584511a561f8b8e99606e0a3a2e7780c538c9aa77be5199ebbbd9a022059a5b2bd1c0855db78c329416e7bc962070c1d7fa815d4b11688af31bfdf7ea3caa15543e9e802faa226130c199f117b11fd975488472d4799e18cb2327021138a88ee20310d4317147d3ef625813a7bde7d72cac8a58f4005276f33be980cd079b507201c8bc3be07a107b3426ee52b5c071a9a8b1f4c5a510fafbe6f9a1674e0c35fbc7e1b40d5593eb17422c7ae118308d6fb47df79dba56cc697ec80e2413126a21a45198707c0756db837abffb2cb90ba9ec4704a4775a133b5e8d280cabf595c4605071297cf888a0f29d478cfdd54177ad56ef05b3200d2a620a80ba63a5d352845e50ce1ab7c8870879f20a9338845efcde8f8803cf70051c48de1086d496062659e11901f9de92068e6b5a88bc1c66aeef7ff79684ef7a2454b49fa53501b91eb172ba41778a50e12a62fb69f837a9713d0ef689ff61a1caf65cdd3f66e5e989cfc2a782959f47eeaa043eba20d4163e7e78f7853b4cbf06b5bd79d5ecfc789b573327303687e9da65b0109c950ce00c09afd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ef1589fc7c0dce045c17c1f9a65ed0cc1bbb6e56120adbdf9d751ec8f6993743598b25b0ea781f76c13f4eac154168999bc3008eb42b3091279a7f61be187071f081d120be97f385f588e7cfdb676e310e872d2f007446434f632d2d47062465d96ca094c48ac1508d3610ad78ea74bbe51bd0a86a0cca51cd5ba9a671d03ad8723269d4da0705c51a0a665664805ae51b383fce39f7897e103c35c5e89db02b68ca14cc1c07504c6d4e3450b45faf8967da0c2b979bb7c3938c75a77a7ca5765a9a008d973104f28be6cc7cb46bab62992b2c82e9ede126d3dd933bababd036a1e6f2dc0e2233c5cb9a0b5954a0a02dd52a761043458ca0a15e0261757433b9853235bc57b0945efd88fb6fdf0ca69a38838be25704aed27bb09f9a6ac5ea348cc54b7fb52577fe6e1b9f5f340adb7264fdf5f3634df0f43ee5fb65a7df6e1d7f7612c981771d004a6e553b8fb7b38b3653dc1db53aa7c2718f974fd0e73fda35def09394ae0e568d8804f6e45fe1ce9dfab8b1ee02c7305249531f62ba4289e96da9027d1edaaa5f0a73b6956f29c4ec6516fc76f130f775e3c5b4bf1f97d2832dd4547f094a731f89a88eea81a26c84b869ec1d9c6d805f12207c0f87c380000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000069e096590e6c856ce414a72df16c1a4c1ab430638b6fa37c91f4a931d1038a32063dde923e2c4e24b69710b655dcb92f0f7159faedf4473edd49a78bd90201809d35fe786780acb7230bd61058775a2efbcd7c629725462f212e9e28c6476aa4019c81d96d26ab5e0ca3ec959df1a3875caddebf64f26ce85a87653bb11a5e782cea53fdaec6a06787e29cb805b89e21f1f7578c7f6f0b2e12877c37fed9a1aa65ebb465d1c732c713780d061671bec9bf9bf2734c003d0fb4570942fcd02ed2b0f9c12f3595132b4e465a1864a2bb9f4840e6135dc6f10c701d98d144ef6fdc5d7468bff5500c69f188ecd5a7b2b0379e0407ff8551615bb09f6d004c25ebeb6feef1d1998e669569fb6326fb230d571bd305cc22e4d313d070b0048d75144e37aabbdcd8f687f3989909e34c258320ad3573896c1881c52a44e68b20acdf2f0101fca25682677157cb4e089e14f28b05815064798089c165665134eead11c8a69c6ed52fe0c4f196798250489ce427fa1b6b56d84b9a55351e98f33448b6b6a761cb71fc145f6c610a9b1462d8188274458eccff4ba27619b6026f963a5a56d4676f9c14f50c93efa25611aed150274a18004233f5a2e8c1edea505381bd100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008463f62d48ffdd4f8b7971df2409c09b11e32cc30203cb53b9b9075cc5f1af29d203d89a96a925abd9369e57e692fc11a17999ec9d51d2912986209857a94c063f69aa9a06363d3514a5efedceeaf214877652982e20e7c2ca6d2baa6d4dafa22eb0915e644ec4ce39ab9faca2a581fd30dbb86b72a802e001b8090e561d2ab7d77e2d6f52663f610b03a5c866df9e579a0bdd3a73457673b572fe16ae047fa5afbdab2970ebf074c7998066f9ec0ecfd44b4b698cd5483721602b4b6671b62aaa4d328f1fdd93d97a639d8dc55549cafdbaa2308e73a65b50260c8b3b6746a5f7408086061a169e922ee7e17d3f38db8e9df299d002defc054d93f4c75faa34c622b5b82c65e9ae936105601e3a4171e51958ae6f0bd5e0d899c58869bbeb321c09ce3e584da5085bf91478b86a9e5ddca92b7841086d72dba349071714b37778e2a5567d08db3d3b03a6431908b54739e677042fdebe053cd6e37d3a9ac8c0ee1146bab0ccee2e8316e5979c93fe62e4998635acfc7d571889b6dffa7823e5d4b3bacfe89e79d2108a9229875cf3c989df0de5d96bb162445fd28020eedd505d7e678b1d4d021347c04bc44d522ce9a5762ba7988fe59dddfb56fffc6894a8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089b71d52ae0db122c4c497e8396d67a1a7277b768e1d41295c7cbbe1017b830c331eca47ac9a1e7acf2b7980d637e7c2d832ecd7f992c3eea29badd9c60f83e6dacfbcd44f0a2202f9372bebf16c7c7daebf9af17f7e64c4e039b182178cbee8ee63a425beb0c223806bbaf3245f37ab7d3f2ff19799f54042a44394386ff4ac693a542141908f6315fd88b6e64977f92b944bee0fe38c0dffd9fae03b31a4fe503fa11f80c77709c9dd99dd36ac1cf6a93d76ef4bd9dfa18a62750923abb3e9d25f8b143f39278311bb7a2d98f54de245021adda8a5cde94e80676b0da5943484772163bc69f85e0ba06ff7d1616d58c0bb937d20dd36ed3b9eb581a2d68a71a3fcb9c7c43b841b6ea06abd90d57c6a46c2d2ebd9870e5a9fe208704d13f6c7c697210fe4de6c41f7187af181a7ae47e876ff77fe1901f13b740f5a727bd77a9d4a501bed8c6eb4f8f4f6793d9d32874a746e205c4f5a476734926e4f592cddcc67c3c6e9001caa0d03b5c900d976e476df5d96ba2a8a57f14f4199e5996a4ce6e86ca99c58b13505f0819f65f29ae1c9d7129c255a6589766f9d57e367a586fd4110c3a79160b470790c6059b63df8c13a826f671b18a63adb4bbeeb419af50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5fab44e90093aeff18072c59bf73953d95589a22509540f13f25b2949b089b76035a67202f5cf9b569324cea695de5446af155229f1fe5544fb623b8404c1453bbd3389a90aa3587ca10e0b6ed26f4075de5a5815419deeefb8618f432ba9d4e831e9b3fc003ecae80244397190bea18796fd34569031e1f38aca9e8cdb7b1284e72474e0dd645af1ce4e4e2877968a79a482079d49f74eb178d172f673f1df126dfa9ce1067ee871bd2d7116782c43b634b44bf853e32b5ea7dc80400f49e223e5b6d2abf95665a53fd7c6bfa6a49beda7eabc0eb177c1baa888821dffee69db99484163ad10900562223278a4c8120aceda7b31c2f21465aa3add753d47bdd439a8008c20fa80a42f2548dfd8f08308581ffc00a34dc0e06d81f651bcad187ff075e42ca4569364284275fff5049176ba83b9c89d00f5192255830755d4507fbb8e128de98652e21cfa276192b2bf00c258b5f7f0361684b2f73b788409e3e605c7815f1aadd3d380f7cb2e671192e1a8a3b488afb55bcac65e4e4b0128769508c58848ba8fd1ee032fe02551cce59e40c8ee1931a1310c34044f917b60bfab7752f73ce61c95c3cc40026326a6e84735a9ccaaa7be1a3120daaa52b2569f00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484019eb407a69cf2c31aaae7685322e61995c0fb035fd71455c9576de02afcfadd812a105c0f21d54e21e642e448aa37259738de8446b91e8994e09a423aa5bbc3e12c49ff5a0d601951ce5808ab4817c5db3c34d357f3ee1803c766b3a64ab0d0d136d6e5eb1bf363f80007e95a9961074849b570d10586c3f169839d586973acd1fdaa1117faac0f7bc32ccedb8fae2f4373922f529218e0be60d7843aca268a82b1b0f36b2e323dd09d4c7b77f43771c56f597ffe2063848843838583cb0839f0751565b7e13341825fa13f7783a5c257f440f77f0b7f0b71bbf9351c08b0d3c2522158e76d656e5a7788f564446ddbf3206ae4ebe6737582df7d5491fc87e7f10779466ab6a1a4ff3e103cbc3cb0001e679b44e7e365b610f278dd728218b470997b6e356000b45a2624e22c59f7f72438bec44dd1758f02a15c3facccfd353239d0c75468b12c91c98960218a9c9355b633b26f9b222f83efa6f435ec67334305ff0c1fa0d43fb06efae73d2518391b0e72b2bd54c3202b2f480b45dce6c932010239adee5438f242eca901f5a982394238ece395347505ecd5e077a88d38c2c26a129a1112465c2dee369e0f7b760992b194040903be2603d00fc7b0eef9c12567c86357845c101298054e3f7067e25450a09307ece229535e88b847f97442d9c6e06ff1b1e993a4b3db2648b3fb716565dcfd3b1fa718d8af06c08acff4308f0a1b68edadf8cabdeb21ba7a12d9e6abbc28c767d695c29def303772831bd09d0552e17881035ca35091909a00e467271c1fabd970a620ae5abf85853d4d90501209818e1cf29ead1b96f37fe8668aa9e414a1e24873d8fc170eeef4c8fe803f3fd19d620fee2136d6b94cf73a460eb052bbda674507c0c1efec676b79a042178f2c8dd0f667175add4544ddc29ea38dbb7c5be2868449f49ede5b4f88d7a2c6a887c5be7f4bb725948af667fa0e6d80be6fe0bdfd1ef996afdf3f2d6c3af14a3d824b6a331053499b1b7ec488e3838ba896686151f3a5410d9dbfae7d731258451f1f792d6ce131c9306ffcf30487cb99312c02da2a5c455c7536e9e5a410be4a33a0386c39f73100f9e0ae66bce04829e3e0d07191d9c84307de0259b560a2643d56258e29a283e199c49c6e5d058ee0d089dc5e021c798dff5d87cec450bc352e1b283de8c67cd117fadcca81c38f6fe50dcc758ead7b9c3825f3d500518a655576d76a140826b7b5b09f4ac633e603326cffabd2101a402f66ea60cd608a7d5c222b6dd38e36c0c15d352222470fae5cd1857cbc164fa1b30a593e0502d1ee41dc8c5e79413b61899115933396908febc63ef32dc241cf0751fd0c3461bb883bb558ce533b9d3085c85c42c368e8309d01c828433636f73f4969f606a0d301e1c52a65f7363e0a4614e3b736e420126e97c698e5207dadab058eb4ba612856f9b0167a500ebd71fa9919da478365f0de3fe067c1b001ee08e2db8baa70a975aadb193cfa150559554b3652ba7e40447a11e21ad23bb7ec9838d7b24632e73adc97a0e025a0d81937cae809314bcaa345ac019207c020ccb170005a6b0116aa4fd5726cdfd7f4f7261dc157389e3ab3506a591f288406bc23938eb8008011b203d3fac1766f7e9054fd09588929290e060376d2492a19a9d440e5ea77e2dcec51862ba8a98bb847579f798cb39dd8066520443434a1fb04049e7fcea0416bd8dc57a189893462769028263102df4bb9cb3284963788656ea4ad73b427c0414fe26259e6d70c584809de3849318aa499e5dc7c8a811df79c4bb841e5998285138e593f08fbe22f40315d7302192bc7c30474ba956f3f173eee858d5244b27d82b6c0e2ef09d1ef2fd16d312b013bf634f2a1cdc1d5b2630566c707528be12083ef69651746cbbf18aeba5379e1679ba489c69d2791dcc832ef85f4a224c0dc37823e43371e393749376246150e107629e1939e6c38d94d2cbd3375531e7014d7a2246abed32939937308bb3987865d0de4af3f76d95daa4cd61dfc2f0981ac4724e2235f329fd365c40ceb5d2e0d8de68506e4ad739252ad1500ccc77ca2c23988343d4cd355e403d311046c91d96027fd4d7c3ba54c29cf7cf55365af404290596c89b7c5bb90a9b68407f56aae01291fbac9d9466a0eb2518b9a6467510034f046e8e6d1440eacee45326b477c06ffe1703904993a0a22e0c545721bc2dd6c5ece2839b3962af1259386b521c845c6e7572ab6099399ac246ec05a73014a278f00567f60a9e087ee7766372ea66dc5729c350cf97e78fc885603e8d2e0c18163f0432382441f3162d1ada6b6718769d9e29a65f90ee5953da470718a42482470e8313134163251422ca1a47e1f40be0a6b7c1e58f9cdad7ef18ae6f4617f688a7320f0cececcfa79dbdab9432db141c3913d74fc80d134382d5aa175b1e5a0bc92e8be3ff95ec6b39b10ea95d56663dc61c439668653a8e33105556de174bf8d4da62ee20e822e0a0021b3a65d96eae347ed5828703c28b8f62b77e8d2bbb533109da5fd4e344394d2226205b31afb3a978b36e623213797fb46b1c950262ec30b3a5f217c19390a355b69a03a1a37885a97e49311732a064867641f013b2aeb5de42748b1463cfc1b59fec1fed741cc9c8cf375e071ea97e09b6a3202348a1b6bfbd0dfc343c91c54cffa963a9a2c31fbe32668aedd195917a93aa1923f2656de540072664ec732721e39f0daf04b00318fb64bc7b5e72823219262b0635e66516f232d6bcda451bed5f39180c28a3472bd3b662f5a1aefae97738ac2d0f6bda51d5e91d19f481db59268d3f32e4dada5e58479ce04a6d7290f5bb1a0440befb7dd12c7aaf7ce652c7bc63e6358d5e6c9b1f26baf350d8851b4cb85540103d3d062e9d3656ac67d0f7526b9fc343c8354ed10b640344c84686c11910432c1fff214802e9d7cbb690c86601363a7f9a8cf53c481fc0a05080b802d6a6d316d49ece7c169b8100a8cba12e6bf3e849d89cc38db24a6f05c1f22d86a3ab8127bf1d420c3bc656fe6c732cf803373668510cc0fd7a9d6d4a44f967a9b082be149a1f3480ac778c3baf22da8196ad61e0384d7ce9111d5c1e36e2619adbf7c81275dc1de0e814ab498123dffdd96098118e44ed12c053be95ad6c47c60fcd171becd24b26fe3ef6ca714bb512874ae828d51a99b678ae6947d85f5f60d784d01cdcb7cd5fa184a7185f0c1b0a11227f19f774a2c7075a509ade88ffa5347def0c86fd324e5f7867337bc377cc8439dbd3bcced113d22137903dd14f281d58f0030454ce0465b51a6aa3839ce640638695e3a0fa3a042530e35b65649feec90009b90ef19050871c17e040172bd56d870ade4420bb7fb6ac43e88f9cfe0a1c690023130312d8029d97e45a03b1dc69d292d35bc554403582d6f048dd96ff7a1a0a833871d2b8a80fb25c8e7d07a4ab5d76cf971286c15ec65441ddc311554a9b27d20033fc17ef91d5d621314944745c61d638208003bb1b6c348dc5f4cd95d20a5db5071d134df87d5741152582e672159b73650845bcb741a97fa9371568b624fae258c95fbd863f4a23afbd1aebd93ef3e1042da0657436d9effcce1469ae038cd639e9ba900838f27f392a6c1e392539b4f89b82a4e462e47fb260072ae11e50889b2ecbd1bb56bc5565e6148e7eeb9f30177cdf08cadd77a51cb56aa8791a7a532aa0f1f09e67ce08782baf1e24a2a619bb38a2204d0482fca0291619d00768560dea1f03d9ebf0f4e6c04036e417f45c114c5f884f2c0b49d99cef71f91ac883f092129e72d586db0e18ee6569d397e506fb98939fba3d4b8c998b438326e2cec06c5bc21e1793f384f70bb6a7e660641ba3ffbaffc776fc01227c4996062a43f11e5da602dd7e58b429e973dcb03b84bb94e3e21c3d43a673c815932a03aa5b7eeccc52991b5f2a757240188cfa1dd4f9d484344a3e2a98d47fbea7af17be0976f93be815f70cc445a685d46fe36f6111d4c30c530b531cf7e8b826682edc07ff1bc749c0ea9511be54a13e3b30863a4b7b4d199c94637099fd378392226b4a1eefbe54f3165b37d8d72e25bfdcb544c1dbb18076d5355c6e6b8d44ca0db3d7383798ed654967644aa21f1a746e33758a27fac205f1a130f52854eac71f93299cb1bae5e1dde852e52abdadc2417d72a96a08a61c3c6b6c8d5324d7b0012bdb522a4de96ccbd254543f2531a3ee9870581125f9ac83f32363fc73004a2016b60b4bf24f5db84fe88c71222c68630f46d5124ef1c14bc491bf5c0b17821c33ab508a77c5d223c650a0cd9f5a7f1457eb2c51a385b95ebe9323325009dc1636ebfec284995e93f07a4aedf578c0e2d535f28727391bc8f45603e90da65715735667860d11dce2873cd49b2387571b4a19e1ab2b21fddd7778927d9fca3825882dbd150c23018bf34546e5704ffca895cf774c90e4a7d65ed87b73ebdb4e0db50f04b607c24c1983f2d8efef61364313275c4378f8d55c5829c51d2fb99e0134e810407f2097f7919c5effe818a7ddca0706fcf5e58d344ddfee8d0a8aba003db668920c0d3e25d38be2274dfe757b27902619dd905763b2ff877b755047008039a1146174336030a2206f920e58f03edea8e957e54645202d8d0c18f54923ed29619847e27722da085d1af5b5b07cb91c0c03752dc2c0e3a7c5fed756882136857a4a3c31742c22b176a39961d52d6b3ff2dc0acc4706fae964025c8d6405cdefb42114fbaf6a1897d454ad5c6425464738f86d66a0e8a71e00ba570e37129300c20ab2d92bb1531fabcfed0b8a8ba3d0a88662e931697bc38a68eba47c0b3d12928da1e17f9677d4e1e60a007704f54e99c827011a84c3d551157ee7b31fbfab58e53ba21079568cb7769517d36d651c6557ee4b9b073e161087450687084afb780f30f0d5ad30813f3838fb60b399d6cf226765e10168361aed84dc591b1e846ba7db44cfeecee90ede10378805f1c350a15a384a29a54203f19ef77609206d4ab1da7451c7617e1deb9a865d5d349b4d85a02bf8e3199d69d33b67d5237c015f16ed465b6d66ea718c58eab4d282b6e4e42837d787e5c43363cfa5c41eb5d904b19d09092ad6778224cba95267cece96c4221807da410e0731f8b53203d28d71436a881eb302ac2b9b0fb50734048053d55e2f187c8f92590f8c209604fb0df624382100ee2395060fd9dc0cb217ae291677abee86bff5589a0873b216b8081bf8d2e3c2fb07eeda30e76ebe6e907c83c8dbb66d9733e7d0f1a884300aaaf0957927fd38d481b6516ed86e6d36a9d8832b93b3d9ad1b8f480f41a7c90cfcc87418026bd1bb89f7341ee9fe69f5bbebe6ff9548a9e804bafc3e8d048a257a695bdd2e987c729e5abfa72c8c29add1c1b5ac8b7da7e29a8dfe9f6a9e1f201616981dbe7831591e2833ed4eea8e1ce3e17826361f89bb57033f3182ee1226591449b2410adf328138b5e24641356c6540b24ca3b55e072a9125e84ab22b15e9c95bdbef54a929093c0a599bcd71eaefe7bd52b6edde47986533302bdb8f0d3470b52dabae63256f6f2f92987970be1b20bce2acdd3fdc4cdb5634e81c9314d81da625bb67914cdae641c61ef2cc01354dc2ffdbf063ede53ab13136f3020a94ab2e5f41c496b0c2b49edc444844c7028ef7eafac95f57a3fbcf177eaa77249e3bdac6bfe2d15f1fe017a926bc26ff532d6463424c487b66d73ad0e922931b028e2547433f41864e934638dbc2e176fa1fa99e1ff8ffb619540cb3728104003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000039118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000390d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000390a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000390b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000003929a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000039141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000003925e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000003912978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000392daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000039189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000391159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000003905ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000003905c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000003914d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000003903db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000392ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000391213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000391ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000003914fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000392b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000039305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000039280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000039223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000003917a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000003908858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000392618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000390f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000390e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000039172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000390b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000003905bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000039137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000392e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000392297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000392608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000003918373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000390422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000039204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000390afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000391998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000003928d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000391da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000003921d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000390ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000390e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000039107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000392f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000003909726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000003924f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000003903c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000391fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000039205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000003925110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000039283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000003921cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000039094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000390c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000391f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000392421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000391fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000391bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000039304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe500000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000008100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810400008100000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a97ea4dad05a2561e1ad3167a4d082ac2280788e2e6da018db4cb27ef9f850c66796cb0ab38f8dd2da821a7c7b111a790a224fe40659fdeb0449fd8fec1bcaf51d50a5dbe8dd01663202bc48a4ac8098066a82a56b4e9cfb73713e0a45b8c7e250a3a1e6cd9a2ab649ec05a90c679268d80766b1398bbaf148a72952fefb366398e317b164e13a5215de081667c8468e948923c4c25928d7374b0bf133af48b320ba1b89781db6e9f7852d31839a3f6ffebc0f0c2daa4a514e9aa84ab2914c75262bb6017087a0121b4680f647bd3bff6eabee7e92377c9ec0ce9c8ab1486e38899109bc94163b846a6afd96d4031c0458fcd5535eceecc859947b7754612ff2b38ab181e01789503aa593bdcc15ba779c80d8ef01573549d421479586d5e68b0dbb74decdccf3041c1adedd6d5b26ad8b4cd4f7e7ff857eaa40b736c7d240251f2d674eaabd3526d62c7bb1ed7f0fb359bdf2809c8e3926f5c0fc6a6db63a9b869e09e9b72aebaace329e8246cce3e3b283883bbabf8d40246a2a177f16660b56f96b933dd01c0ddd8a9030086a53250d232c494d4159885dc91ac7a82252b7f44c1c192fc92dc84ad181a27bebf1c6ad9ef2738eea61025de8a74206525d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bb0fc0b0d3cbbf9bba5f82afe781bafab15acfc0c69f3b8ff0c206e0542a050d29b303d475e27de2fe4bb5b10b2bb449f4ee27312361f806a898fe6ef6d4b566b1bb290472faf38f0d1dfaaea542ebc325b3c2f1e484973ada01f3a8d57f64074550b911ab013736ab3c5a383c99ecf52cc28e0b2311a30a2ed8b1508a1cb21af3a2fbcb53b62cad45968f0c5a2b10732df119142dbd062c4e0cef7344710f9b8603e3252b28d666cb6045b1cc25d061b0edb411d122b31db68d98187def046e36eb0270c3211b4b43f0750b6e2672a0826a2ef3d5c90742647668b369bfb2760ebc21177cf09286064a3cbefb49e0f468293a292407c5937760b64a4b96fa316ef35f7d367ea67a8d38313618741d8ef5b30451e272a4aedcdbb0c16e0ba47cd0b8eb70a1e247c56f5e72c06ed9e7017a51a8c359810045f509107d664b4d8752c4ed2ea2f69acf8cca5777f8b06121d46dcdf346fae4ff81e52c5cc113f169ce469f765d4f06e511cd557d976fe48cd1c1b08c60a88fcf34f7dd3d2b08268676ac5391b2b57d3489ea91347bee3c13c83f8b046274b0d7e8822cf81fff44419b0382d8ff8f9c264cb98b30444f5d3c122c0fd965db0cd243a34e450b745ea00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002135f154466ac8004381d98b64c7dfc2ecd0ebb14f2dd7298a7ee83a81c1a1c98710dd6234bd4bf9dbeee6e5b5221cfdd073be73715da0cf7b55b1b0e99ea239ee7826e4b9def26cf0ca5275d4dfdf66d3a1bb3e4a7dcf1510e51d6671aa9879330f035d6fbf7e049159c0c1f2d93f8a47d2afe9167c5d5110874b2dd7bd6ea0a7b15a261fe9310cae46b4e339e11cfc5c54a6310b32150e05333efaec4f8de24bc3bd29ca070733e9e4de5aa3dea660fa0227dbd90bf23beb7bd0ade11e0fe44d275cd26071dfefb644274691b940f0aec5c9482d60edb4ad847c99f216c29c92a68f25844dfd27a3e3d8be47a5efc2e58e5a09f984625f429bc35699b33551842e73dc66b33c5dd16183f0146de55693a1c253a324e180b14e3cbfe3dd4c02e5abbc57e667a6fc3952e631e3b5b376d14284278e64a7320ccc2f7057d43ebd3f1544562a233e2459506875d89243e5b02acce2bd8c69ae3ad9e9326af9a332a252abd9d3066c47a3c83c56a42034e1b3b9ede6d963005032bfefe0bface429037cd78df41e0c5cb516cebe66c593a34dcf77c11fcf03935f7ac2207d765e0519259d1d2ab5136234f65b5bb8b98826c25f03dbc3e54e41dd6259f232228b0800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d1ff343354281a84579f54d67152be789c5c6b952ada3de90e1920d66a0d20b1f365a06c997ef3d2c2c30bcf4f742ca1611bc2d9ab33c6001ea3cb6e5c49f7731c08972a5a86968eb1b8040418478145844235a61bc29dbd4a0ec4088fb643eb9f458287be32f1c19f2f97a676d721f1d3f4eceb11c8c93976e95e0de2094f8ac43e282ee6c70c244e528637c933ecefef48dd793c1321b1e7b0e8a89fba81decbefac254af9032326f6d69b08ed88a8febed5a4f6a5067b513a8f8ea294f7b32f4523cfc3e9ceb1fc122f3adf7123fac1fedf59620155a5805b8d583b1e52b125d2be08c87a2af88bf4e2a46df26a1e8b4bce3a92775a27224688254e4071ad2536831ebf30498c07e771cfc016a3f70b9e2a1bbc8cf3b9e7881545fbb4c678131bbb9e22d98613178adc52431e754c5793926c8f9a6074432e6c2946b7291ae3687ac9a43242440b0c8576bb42a275fa0a9ce0a1479667141e923e90e79daa6161d47ffb42d9327a446ee6332bcb9f5f2ba7467836e5bb644f68528c38e47f313e7ce2ccaa11c4287f9cd651e86ed83ba6a5e27e6ab0b203380e24bb629b4776f3206af3e55e8e20fb6f7b659dd3ad35c6a572f10d00127b714333b37bf930000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6a6f76758bebb1055461b57c44cd5543c03a140296d3b90cf6f5a6b2e202a9583ee9dc4c1276095b7237dd0b25a27403aa56c75907737e02d6fc3ba836217c21d9379c3c6d3e8b6dd4d3be2141df41f7477e3aeeb41d5b63afc334f070e85e6ba163ff9ce0d85b2c844e27492e1b59d0eb7c89a9402fd8077222f7a0bfa01e8127d550f88a4b524d554ae29df70af8529932727e0314ed7d37e8e25b687340b3283ccd9f814c16b7a8ff218c104c165e8b8a5c84ad7bcb8968e88c15d4eaf01cf762c7b7bc63d89b35afd827f53265ad5880df3fe2e118017edfd33ad6fa32b5e8065f454ad51d055fe80f895d9fac74c0d19c72ef93f73aafe5797ec45940a1363a299adc830ce14dea1f1c358999e205866cb84661d91e14d4a0a39a413275335500a95410c25325183781b0d437994b641f09d1b6874746509661ec59894467c3d73ebe3d9444f4884092c1524c55b4a58000fa84a1247dd79e45ae1c2d68723277f3afc12ca8897b0f01739840780cd183447ee4c1eda71c308335602f92808f466fc2d3093ff16472272509dc01dbaaaf9801e237dd18ccb60b751f1f619adb9154fd483d3195bc9d00b5a505533da8a0be095549a7cea0f7dc4b04bbc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009108a2d6a7ece202ed0f93a723a494c694cb75a18b9c3a850a8c10b7005fca502f627c9b364b3e4d28896c11fbf1a2fc9022db40102febfaa797bd933131683302e82c6192ea1150caeb8777b63f280125375d997d0ce1d21dc5385a65aa8f83c4e087a9e57907b416893a19860f10f4540088b0656f54c08eb8dd4e7fb1ce2129e14dbdf01fef71c8c98b149774e24e509ac3871c6119403eaa8b25d3669c194996829e7947f72dcc587a98d0b2849a96181aad3b9e52473d7a41a59c03b58b90f4aaedf8cdb9dbe800820a3f1ffe6b1087120aa32d85ec53bfcf2ef7b30cee4cdf64b20b2348f0e39b3bb699034c0fcb2d31f16c9a7469bd68a5619de421c316e3fe24ee43d443655015e119ede74693f121aca9f1c19eea5ae134b5893c8d670825c4fba420ff38e359aa8248becc9696373ddd8b5f696b09c982de3e3c66d3c9e61dc2029bd76b349a9fb987f5818cae064a3a8cad6aed13f866f58bc9d11fe0da08223164782e860d5400b66950122516bf42580913733b63f1ce2208b7d9299c9d646fd7092138d32bc90ce423c32b9946bba1406c7d43ac041efee7a8e9c6153f4873cc66aa93bae3b18de36ffce979b0560bce3e8eeadf5745b0ac120000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f5f537c03d58a292cfb275e3806ca94507fcdb1de31a64423a4fec30a4f87b61e0d5c1d1fd5b9fef448fbb76a1ab6ca645241c2d118f71b9d11859e9498ac9e0ee45704c0afe265bdf9a68c1e621e024d6e695dfeeab2a9d1b15c8a6e67a399c2bac3a75addba034786fb47ad03c6fa81a16e484963b1521374bfe5a40aa9f5b0f6dfa6cd9f9a56de2d6d76d2ab9e0deee51f58c614692be6f9fef1e6df97fe7b7aaf34a64fcd97fffc0f8291316aaf0260332694f8c0b4ba09659018df940a8042b19b186199414ce3b4b0c931ea4d724ce674801b4719de2b4f33051b71dc5f3caf7f5b3f52d7b0b63a15fdf29f9aa35aa2da4b5d453619f38618785a0b55c7c68823c7740d3ecf1f357617fb49df2f779426be40ff6a002c63f1fd782bd97853994970d3008e6b9e1a9186936e561afd6439097749c9ca5df6ee70a0c03668ffa475a73eecc8b664e3b01898bcf08a82e2b1429903f24962737c91b98dd8f2474bbd6a0ad53ab6b56330b2e6f0843c91784c8d11cf40f8aaa027f1a9d5cbc8b423800a97d5acd05f16d50f8235a60313aeda713c14473c51c8f4de9348320d17baf811b82c922da123f115660cdc5f6225e91f7825785d864df73711f300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ce6f8b229ca67606979fc1a1e46db3d9271a1701766265c3b2f971be3aaec6b2a1bd4e03eb2d2f20f70fdd28d12263556dd4a5e5a0378e81e74834a2da6a411faaf52e3aeccb6694e22bf86405727972953573486bd3ce24572b57dc3afbdc2dbf0311691d913aa5c6678509485f0e28c4fbfd0ec58be37cdf57e3389b607e7d1435c2a8cb72111fe0120252329639b6e98b756fbd2cfce2204c564b1684031f84fc1523424c0c5c800d4a4f1b87f17044e4d2913aa25b3db83f939e25d50ca0788ba63ab1516a0510830c833ce21c77b660810a52bb0cd18fe08d34f5d063227c1a01d5af1c01a51d706aa6ba06b63f68110c2c1f8a5b7b337af3a91959c30f4d680786b86fc8076322beaeaabfae2030e06c290723e2c1ace596b980c09c820b1f15fe84d17032b146c88d901f2f5c4fe25d9ff88738ef87692129e8e35296bf8af857eccb7a7d4f45986b631504844622c9ec24a1580c9545b7eaf5e6a37019d810459cbc9f08a0156adadee0b53a90ab76f06490c51ced9e85eecb5d78ac9eaffdd5d6fb3f3bd6c5136f76e2986439362a9b4958979feaedfa5f75b38882caacbed403ab3c19b5630ae2eb1446de9ffc190bb44bf6cf9debecb681e3ec70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aec58bc9b7ac5bf98f9e0c424bb6ed950ea3ae81922f9f3e4fa31350df439f3769351d465068295ff1969c082d5e6df237898625cf47d2e2e8a61941daf06cc66d40856b1397c773ea5df65ae3d0de221712a44221bfe0753b0bd94b34fcaaac1d2458d82720bea6ef66a9f1b7d0755e169f749985ca09f707b89e71b878976391067d6be5fb8ee8dc7c90d6939e95aaa08696bf7cfbf08eb274768b7b020490ab59b715c1e8355eec5cd3862a8808b4df86e4357b6980347178d3d73700aca941375e9c39822fdef26aef4dc4e02875af2198cf267ea3928476c81681ed7451dcaab863079a91edf2be36d1dc13b1a2e958a1abafec02e9254bcb37bf331d49e84f43e6c3cbbb66a5c5c489ab20b71bfa43056f8008516a014aa2e56292b35d332f4f4df49588704e70ae19cc7a35787bf97d5d3285e74c9c9f61fc3e434822380ff4f282a9585df84b8de3c410ebcd65c141d2925cb20a78345e2317bc237b2cd53a045be1b85c005e55efc0f6593dae754e9dbf75ad3ca66df5205966c76b066f42821e6fa5810d1d605d99805ee71f809aac2ef7468fbde3788857a648d02cb8091816944ed709de98eb07bb22be8f32c66b0ee3a341458c1f08e16ce63e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099b031b40ff2a86f1a52748506f0735f34d9ff8947bf253134088cb398a5bb448d41de107825fb201b5d3a044f3bf01f40d7f4f70961527409f0839789ed790c78bcda6f1dd8b72fc879cefe2a6832a4f2fb3b9f873b2d7b10b0061e02b128e55b31507090ab6298b64406d6fff14ff2ae9b4745f6745bf98a50c2cafd58e2f23fb5044c96039aa108ab6c5ebf6d437f6849a837a6f2dc14cc28d185bd0b2af460a5615e0f20c93fc90387c389f7a84cd623e1b446dd5e090df6b41448722492d9741fdd4aa7163e089f1f3935993104196be6b411bccda42cc672d4d7494d74d40c8afe560c07203c4566b57eb98f2bcdba9e68353bf8c4f88cd9f2eac9415e356da3f2f15bc0bce338c6f5681a5ee0624133102f394eaf996f1c84e1fabaf70e57398b94afeb4422586038f487a471fbe9ac9e5176d6e471069dfd03734bf74fc1b7be3bb3bbdc02a099ccf0abed69f1cf395b8f91fdaef5da4f584d44daae15194a3ac8c471b57dbfd8e5c541d8933e0cbd97161fab389662455fb46354d20e580981d8bd125c0d685b8391663189790abca19fdc7662d5e0c4c7b831cb367264f60993897a1341a6adf281f1a4df1ff162a6b89dc95e3ab2148941adf5b4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085d909faf4c48b19b8b18aa073b5348d6ae7fb94ce623155c6b3ac15e0da46cda482eb6e2ee2e6638378b1ef24cf8c5f18c1a788806a69b5c8d293523c2da6c2b409969b19b67810ccd8b1de606311c97da4ceff66c8cbe4deeac7fcef4c7d81ef82e955ebb15f73550414cbf77b2534df78904f1b704cb425201f831c70fc3633171dac4c6bcffa144dd4427946e7ded2201796e1a3c941f545aac0c986274b1611f93a9442b1b1bfa3249d57ca4bdb65e240ed450b92fbd0161572c2efd81f48e66d758e840094b66d62d0870a9c1a68a8b113b154486fcfa067aa13f4ee69652ec4a637ba518eb27bf552c19bd4752111dd7de9a3e080fc7d493b18cac8235a509e6e35f94156ff67ac2b3a327f2b1a44eac7ac666f5ed7a54215cb0eb0a00a164d77d826c04782edd1d523f11d0ffb9a2a3017c6fc1eb8871b2f3994ee832f5d17a7a2623fc4d86cae15de6277994fffe61b2cea2a79c61ac412ccf2e5b61bbfe98c0ff6344b3553b7bb5a0a19a80da408aa253e901a9b09ee6ee90f1bc863878e960e254b6ab2257f8257c79d864c8f4fefeed2fa781a81603444ed572a78e6c488ff740f4a66e1de1336ce285f10abbb85d58e4bcecb17e768475d86950000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000963d22870c8841ee9ac1b271d7ff54ead34555003e211fa441d48f99b6647f6f4b734f51ad67584c9529666d9f8659ef1e8655130608d88acde94d4efd622bd69199e13f9be7dbfeb6db1aa49909da8e49f19ea959601f5c36b4e2afff09aafe13d1d7639f6807f1d5e2a97d320736c7a965d3e1933c446124d521bfea7fc3f0f83c55b67f46d9ca88a6ed50783ea797c20ebf098d3da9539a451e6759beed5e634452394c5657f2de84fd91bbd3515e293cfe510596126db50b59c796cc306a3c3cc5d32c68d23ff583a3eb804572775e68461c80482293d1953aeb830644e9ee21686d6fdf0d149e704f5c120b57e9520a7975e172bb7cd571667760d2835f1832306c1382d3cc84ea06b3c0c426934deb2bcd1b6bcc1c83c2d6ec47722bae1764566ef2e84148914cf70268eb92bf0148eb23d2031667af29ec0bb72fa409f37257235aad389f0de4497a825bad544612fd88243854ceef86c460fcf2a90b0388eb26b08cfbef01c49ff3a675a2d8266b727529e0469007cb208d62e2cc359deabb464911078e573ed265526a6ed0798a302c0644a60e08ae18f486ee168d64f8f2e10847200711593c7a99462622f7d4bac2abe404d5a418af79cd60b711000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022e861a3135ed99fe75a5e0cbd91673cacfdbb45c64db2170508d4bbcdce869f1b384faecff1e5aa3cc5f2e1b9813515c0d8837ab106687721d90ba53c7992294e444c03a66d587bba421e7317a9e533381500c06f45e187bb3cf00fa5015bf9ab425ccd751fbd413fd2d6dd22cd1cf13b35391d4caa171bda3c43facbfa33a493b9b5f24c5966bd8d90fcecfee24509966cb05b7f3ffe3065e67f99d9eee7af5b5838c4f5a7490c1a527509a11f9ce3c6bc4e708900dc14786c5fc4b4bb44025f405fe7d348b673895ffe320bc167a0e4942d63dfb4fe2fcca4d694d5e5821854bdfb7c6cd360a0461ac7f615dfe2825e55dd58b09bd0e8a53b20e76fb6b66bdcc1c9040f8dee7c383cd8b91e75f94f0b86c4db215bacc6cfcb1e7a7f665e5a455b250a1101dbff65dd0ecf90ae4d8f4841d9567559dabe16eeca3dc21bb491cd49b0b21e8899b707a4af4df4e28904df2ef1dee825acf4b23fdf4ccd04ee9faede8f0c6cbaad2d8f836d0ae8b84c18170f2d171d9736800068c043fd94420e2014e9d1492e67b2098383977d1f084e6815cf5a2529e83b753e039257c2f4d4e88cacf74fafe16fbcc2b9118cfe08fddc83b52f9efa727a2d60d09d2adfb9810000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6e42b70a4a5dd5f7c3f4dd7af2bb44ae19be294c5cec537beef0eba5ffa9a969620d820107bb95d1b4ab7a94d956cc10cac8612ee76d39cc2dfc5e7483c28dba9de658071d9508878bdf5a1cbf094db10d3da6977fb5e697fda345e83a4e82185a5a75b6f91e78243e87b6e54fb8ee7c81bddd96a88c4e4b87f4228a4180484a85981a665d21fbee01c33778d2eff9676dd293f0a60a27348b1354e81117c206a328005bffd269d8b9fe2ba6f8764eac57e392b9eaa4e098258dc00ecab57a4c414d4c02d3e012d5f6fc38879d095b6ba10af9aa1f63309eddde1cd0aeb9d08d72009eca0248a67dba68aa1c8118d55ecf76de07affbb8b4b57b352bc71843a4ee60458c5664316616a92d1dc097d3bb974dd97239cb0d5422c1a63390cfcf6d57a98f0cf56b0571088b4ea38bca7a85108a8853decbdde9e2fb81e70df975fa03de225c92b20dd42724846a1323cf1bd72d1726c92f42250258424d19149e1d0055da3fc82005e1f260bb3ecf52287e29a2d9e7ed2854124f3b8408df9d74b5db2bbcb3c742d14053bb552c4fc5bd51cc192b0c390b11023becde5d7676530bb1ae367f113ea61a10a3a6ea07211f33826e83bdee9372f1f5975872011675a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029bd07aba1ac568357f367ac8ee1059771f52f4e54ed54f40e97969f445a2af16c22e9eb2d26d385b97624eea3a9ab221159efd87eb01fc3195197a420f92080e83cae5c5ee4b2048be35ac13513532e2a851d1a98c71bc14d3ef2974715cc26d87ed291e1c0528ff6c2847a7df876eccccfe42fe789e2ec4f859aae8bade29745ae404facc35e1fca6db887f92ee5b901b7a1032c87deff21bb1fa5bb1f771e6aaa1130bdc8be0ce92153f8a74f527f4a897a83f19e86b9018640f5882358ecbf7fe1ec46254bd5341d149cf6c8f32fcc326fe1141acfcf3e7d8ef0851b693b3e7f7fcd2683d225d1f9dfc309a383e8ff3bece7feeeefd044c49fab2e56e9f36fb196606c742070e15a1666d26608ce48c2974a2eadbe5657d477021c43c09e88c645ce4c359b6dcc60b6f7871344613d05c5528a48f2bd55386f0258444321bc98212991c95d6ed9feffd86755683b95e154e39a2554783e203edbc17cb01603b6c0bd202a709ea2dbdfa1f95f5b3cd06ac1dc46f8f64f61ef560ea9bed71104b424fb0b4ba610b675833961e31e425f4bb39c7e73fda1232ba06542122ebfa7b900c35741b7b3a5e9164cc763eae75f7af8d088ae068ef55c83eb5f3f4f7f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6623e05d95758cdf9e172c7bbdb06bb3b1a90e381df351c71d3293b9533d676e23fc7a378e3a671d91aacf0bcd1e4df82c5953ceb2316daa8d203b6f7de9d5c0153ee07484b15c8487f98a958d239de0539401ea71fe735dfe27d4c7124ec1b3e830692ccfec3cb4bbcc25a9d8d723371b83c8e32b2b7f02445f1a4970dc85a1c3f857c9fa19b0ba8a1c78899caa22d0ba51bea43bd6308bc659ef59873e581b0f15041a58e7c0acdbd7b454e5f03d4af880e4ab7e82d8308363f4d2b369364249745cf87ae8e7ed0535f5b4a80f25c276ed539a11c125f36194e2f375d66c4997894439f50fbc9bbd5fe38a6e4d4e8dec1a163565003f225755d9654cf984a46061bdeadfe89d19497b57294bc53b7db2615c3b855a21c792b84f9e1329daf22f065a96826750220560d21d1d57dc5e72d92681cadb6a14234afb8f40d36f78a1632a0d39411b51ca04fc30102b7cc68b94081405f4d68bce983999904f88b839d67a630c6d4d703e591b994973b1a395a72ccb330c6fa5c55453c001df112a1fb906fdc2411992a58463d58fb08258a6637d75639d0e53ba481da9e9e3d2a8a75e3b9f43238f2e12148571343702272aa97f4cfa102715d34316b060078430000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aac964cbec79fa12456f4870e560a050252a2d33481092ae00061a3a381f16a7457c7ea9af3802850a71b1ffdf4d1420dd4abe3181656aae9c12ee47886f7d4ebc66446d780dad5df6d920343195d3d48610d32198d08c9ee810778255ad0a8284483593b1da1e031b34ea361ad455af393be23e68d071ae6772c64ca7f2aaf6374cfde82410d321eab69cb03788cf8e39f7f00c422f2ccc34130d3d2b3707cf23a72a1cd1682d9ff803930b89cf9c17b6d059a930d76297b16d223f673c04d4d97999c54b3b6bfa8225fb598eae2bdb51b360da9b65b1c5d4e333016776113d1ff3eb1713588f46c9da93e8c8251ad927d31314a4650d3c25bdb5ce469af9934f94a2e920d52277ac8785c8ac620b3db83a1da8212a123a43022fd882553f30bbd9a2f9f2352310434d014e1f8984a72c8ed23961557858d35962a6a8c0e807e179a37a5273d83053e029c6210b27001be3028fc82dfbe67bf8a479c1e75d6f4a276396d38a9c317ebb75783ef527ca585a93fb3dddc74908be93c890f59a76989d923bcda05cc2e7fe574a8100f6f116f99a157f207c217a7fee206d76e8257b51d0a339f383aa4846b2b4dff887d9d3a1da44feb4948216ce5a1707e7a6ed000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006939541f1bb0662672edf829c85688261da7f239d6fb1c7f3bcbe19df0a9fcfb35064caf49ffcaf689a980f880868c80d9152929fa1c0c66acc73c3ffb3e252386f8f0a0e4fd0b213e64ff1f70eb80d2a73680440cad9049bcb40277574e3679dca47c3a6f6fad987dca18aa46e090e8f9622d59c2c67325f1c3deff6262801a16ad2d0042edac6a07f6383661a01d20c2893110f1da0248a559f4f0b05ad2e0b6921e144a2ceaf377173293298dbed783558d2106c82f6227ec87508fddf46c095885a9a6eb2b41adfbf72960abbc3eb69d7337257954081abc23ea683f1408e03e2190d665ea45615e1dfe9feadd764d1c23c6850234655c9e9998f1aca549c03b77c714ace42ee30c644bf440a629bd5d837211906382aeadc1fc4bd61d7b68adf28028a54fe53688e5f4e8709277e4e1fdc3aa845add47acb84e117ad57b84872eee903079d4ffabde2e48463a6c346028d0dea5feb9cb6b993ea1497960eeaf9360bb48c987e628e79d60d2ce450c582616c744c6cc09e14df7c14f71a20de21dba24c01b49dbcad5a392d89f1c3cb19e2686a327dda62c31ac3903e46871a28062b6c050eaeed7963a015a0be51abf3b83315010567e03b7fdd7cded400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e6d93f03d0c71ca1bad78e414be6f13d7486c4bfed811681aa3884431696d1be90bd49138f4c8414c5372e9fdc05f7f8739535270a870c3c869065752822705ba63c8aa0ac674b78cfb902026cf850e4f6c89837edfa124812e5a5766b0f3e955cf9f8a4be9a22ee6d15419492aa9c746b1fe3eb020f135a17563eafbcf506c761350025cb14c3bbd4dd4a122d8719bd6c2f42036c5596f1cd1b006604af25a89b31b7350c71efe82c86ade1ea19ed695b5df97be401508ac55fa9272f59aee987c505c16eb24823047faf1a13c927509894c3a2f5f1ec63be6f0dbabc3f2535ba51126a4f395f015084e09c788bbedfe0fd730a14ceb414b231e114ccd1301e09b70f8a0af66cc0c8dee195b2a03b1951e80c1daa9be238fa0d2537e13148a429702436fe20e123e81ae7dd9d6821bf2578dc56676228bea6279e99645e9988247ba2ac7545c05f38300b3c049375cce2c90e447c1d6aaee534be53bb6bb66d1d3fda359bdd4f5b9f0b7e54af27893a2ef38410b4c9e24c53f0a16c901941b0305f8bf8b1dfbf71be393a5dc77e42008e2968e58b5f04ca035d5b51761720227b2cf2e261e24edcfb87649044eb3c8f6f8d1645a8628f4f4ab47ddbba27825000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097af32fa46a7cad4a3ecf189206028331576ff4c52db2762a52f9ba886572da99f466ac20c151677129e590209521df5c40197fddf74490982db5bef148de3ddd197cb193fdf7d7c14d38a678caf5dfec40333e385ba88ada1a8034b09c1200ea796ad7f5368ba23fff525c5559caa92602ebfc828a7ec234dbcc5ee387a4d7369f478882f330abe325abe545f5de0189306d0237b93f1c52217c242604aceef8f6afd9e00402e6d8fc9199d353883d8ef0a0a5d7ed7aa6117c35f97ec72eec46b1e5bd25b838425a8fc0feac1996637176e0bdd788178b16c880ec94f3057137340eb10470343b6c127d3ce97cca8625303cf0ba77d14bddc881af2351d8c9dc67d3de22ad490512c0b4ac0475ac708d254a3249f43725c0f431a1de94c0c4853e540f103a11ff7c9f0455e454e754d15d7d45f8bf1bb3955faa7561dbc75ceab472a1b5c7f96ee7213b783df19e18ffc829607fe553cf357d47ffe9743fa8e60474bffbfe3a3919734f68742c3789e02fa4289813d88cf27ff0a0b039c43e11c49ff82ecb34ac76aa0bf6e375a6903c9bc21d755d0e1bc6901bbdafe44fab311fff0331da3785355c3a0d6ee509ca7f20f763b4737a1a13525e5ccd59a6d9a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007bc855939c759f02cdd9c4e59ff68b4c3c35c188ddbf9ef3d88d7400bfbb2c888d6187d7e22493529634d301281f3c550175cef012f1c9049b18be19a590c47d8392f3839fba9c64876045a0ad66b1f1f991751ee97230dbac79bfc5c6d3c5ed55c5484e4df5fd439b597903055e23189530ed62b6965deb992e6dee7f6bf8f2bdd92bdec3ea0be9b4f599c37e8ab154d6e571644947f15e3aba561b19f4576228b783415e269bbdf8c3f93308686e3684924d17a3a6151156fe05bd9fcea446a5031da98ba817e37f0f2a6bd7ca16b012a46997b6c2f36b993830594dc334cd843c885b871e4b2b4292c7932a4ac0ca22e43089278c4c97c0136ed67f0f9ba4fe365f6039c5f8546abd1ef9e9678f1126fef243a5dcdc047d6665fac1d863987208cbc40434bcec000aa0602420b978c7e32b8b9787328ddc084ed19adc5dab47840fb321f45aaf619483fc9a3806dddf785114c8bec5a8f969603321e667e8234dad5918bb23d21fb16b5a2093bfc3c8718d27f112890a908711094e21e13235b40156cc27a3cc55b33aca0260f7dddb081df2c887b01a5faecc64ae74e80852070fb8045d01bac1d841546096d923bdb8ca53c5d298a11dfadb66d48264300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dfb0bc1eef0bd71bb92371a1b20c9fe9024363bb65c1e228775d0559f26eb5d4061a1ed8676e3273543314e34eebec37a1892df99cebea67fe1f20b9e4a561f8931553edf241b4ea113f16445aa2a456efebae58ee179e237f5d74c5705f9e30c24085084f12bbb329acb138298d2c5e898e2e2e1a8b6b01553d1557e5df2a2810a689cdff700699e7a2cc31776267719f40c0c75fd3dcb8f1d16c49449d2fe1c12a515b83e6d28d38dd893c369a810fedca9f6f54d897eb4631c8dab160caa131c91fab713c0c00e2705e4e80233ff723595d76999582221d50d9d104df1ef1366d784205dde6ceb52081c36986cf95b713ec0c8e377897325699702d30d262384e47904d1d924cfa38e3ed787508e01b5511df24aed73c693b43a4e310018838d33491498986926c0961a6826c3d43e36097d87c77dcfc4eb6aaf6f308de156b3f3f148d8756c18a5099f82008f3c8b1c1da2c8e69d4f13155991112fd6a15805ec9fa27a086507e506b7289a176828e356e954ddbb961ae8da304cefa0d6df8f439444cd361b460d2d0c3aba4d9dd62de3c171d35850a0fe2e2b6865cedea773f3b4310e81d524dc5db24a3bcdc26f955f1bcaa47f0637de67f4f5e9c23e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000117200a6b9e087b01a01c8f6e4f0276b6003db145ce892d536793fd3baa2a27404a4b56fbc9a6b0f1773fc40fad6aebab94d49f80e5bd16612403c60e0d4d3d58224402f143d5340bb542d7f62ee82d028f37a7998caa5b6c3472452ce785b5f029d452a685a8adf41c4717f809ad41b01a08aa5dd6bd3ba36e2b07de744da637f494e401dd0dadfb80c0772e65d271ae25d0cc927432b3b93aedb352e35e113b85421bf08b35ca97325ae5a6ac1b2667dc8fa4a69c528832ef1a93245e30c73aec7e929a79e2261bceaa807db68b0f0b46c185971605179a11c2cb82db68dcc1a8eab0ca6756e4b9de0bd68f0581a2ef57bb6f449ff8d2d7452fd06dbdd9d00cfd140b626ab4805ab5521372bb3244f5d5679a9134bc0630f3fa6d5c5f580a3a9d8af40152e84e37936f8979b17565886dd334b0083a86a2c2f7844b59d68f891059666b99b8be6f2c9b063bd967661e12ea61070987018a400a65c6f596f0e183f28189087b2423b975da33823a3a1076f8b06fcfdc5978711f7dff249e9ca0a4f71dde97ae3749afa37ad687a90044fe554403e7f9723cf11aac56a89d2b6cd81645abcb24ad963e87301458f3ea1e79ef6c730942db160708756511eb83d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6d0e40852625d78d07c57da4a5283e33e7c64978c2fcdc5d9749ec733495ff7925880fe8ebd3d03fbd0748eb90ae3a7bc8a5d33d8a703b83231d2ab478d4d4ead494bb0714b33efbd235fd060d475e8ca0e8f68f9d6b6a7832738454c57f219c9f2490ae3c1878869e91e40b38ba03ab41a7e719ecfac2321f876c8c753f8767c96d71ca8e89fe926fa24dc363acdbffb252b4a340733d5c4d005605c16c972c25b8240e21e3e36c7d5126b36fbf68a1d558000a65743326f16f6a04a1ef06b2b0dec55231cc030c1d675f43eef709a73ad1adc9459c7bf448803f820fd15dde8e0a1a39cdc8535bead1cee5c13f26719b620ae59f16d008683a7d1a9b293a718f2ec83b85a20b45434e72e3c35b0f265d42303fcaf0f0a02dd5f0dc1662f5ee395dad43638486246e53fdb970dcf21846a3032039f0061d8238e738b7604e3a54d7dbabca2d5f21e4852478cba93459396c9ce4c38115dae37c2dc9132f7270eddd5ee920e6b3ba1e948a6ee7bb7c1124a54f55a870d69a3d29d681a7a59b762e0cc9f3584a12e0359ea201baa56543052979bc1665eb11a6ff06b57d53dbfd1dea60e4e5e5809eede494b4351e4bf5aa1f07981cac25d797830b28829de0b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026050d23e7e9ab9ed0649de0c4f249a1fa3bfe6d2ac412f28edfe04a5dae86800c6ac29034b7632df37d4e92e502823fea5c88b7378dca71ce288bb0fd1ea5f6b286302366fe099a67deef4e97bec0d06034dc53954c3d47d1486b6adc15102c7236f0c78d786f488d33419795f634b98b89596080b62435250556039b0c65f36b0a0874903b87cd5b19fecae3acffc71bc35f0df5bc62c119a3dd631f07c58fb0b5767c3005a43feeeb8264c0b15dbfb12904091d76ef38defdd73323d60dd7a02f4f1be7c6ad25ba8a2361c950811611024583258da07166a70f3ab933a8ca79c274ebfe1b8732ce1e6a95cc779bdf59929aefa714da6866712fac3845e08dc08511cca77ac25870d0c431ee73bd5798a0136a24ee79fc7ddc95fcb58505342ea194819dc65295890319cb60dab1abc5d859bca72bda58641313b5bca3bffd936a97417cfe3929660b71522543d81098a0499b13a8616cf64cac36953dd0bd53d1501a50fb8b49c7185e12334b4cc22e719188264e850f6af8aabab8b60c77cbb302e4b73093fd2a5556f630e537b8cfac832c9f7e264c82c94525c0ee148e01ef3ac7e0fd951b6bacaaf9ffd3281fbb2acab415d7594d5af51fdbf53b0a10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2a74646c5ffaf6c030f5782b75ed90d32b01215e7386c4650d0406e508aceba2a93333d95497fc5ecb7c96780dd5c2dc09b58642edeec622e617117f15bdf2422a8ed8c1e47897b35fdd7310136f6f29b3ae91ae9efc2fa949894eb8cd2075232433afaf48e0229cce8169a3cb2de979a90910acdf482627c5f0d256277ded61575123a158f646491ded721e841c3ad609f58c68f34ca90629b53386067c1c28a709c4f60c67e3372d76027574d4e6d07f09a18a0147208b8879f5804f7fb8b36e1ec897cab1e1799c86525f335d7cadccd3cc725c27abd2feabd990c09e86c5b909a8ff6ee823e59ba58523519974e34c71b2867bff5b7362721b9990429ef4c81b505849e4e9387e4139d16598d5b1a2fa89242bfed12d7da722724aecdc54701a718c8e68f01915cc6ce26faa7c63aace31a59c83f756ca334bd69b56b98e3cb7f63a22dbdb4173df9f742fca66dfff395cfb5711c836e941f3bf0b96030e0c48d72675dcc24035c00b58e907ddf4a6a51c3bfc2f6b45baef02e77545e6cce391671a38849ea06b24ab8d64f535d8b2454a12c16947e0e90989d0c8fe2f3cc7a608dd266ab02680cfea17fa1b9e7d5bbfbf7fa112782253eec88e655827a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084b244dea674837d8e1b54c554fc216d6c902e6410249b0be1b3e5d871643d1c5c0d9c2bbb0af5256f6ab792c90ab340b87d50726a3f55af7580ad911489a54f9e7a1cc48e65800789e4739589bbdc4c9515e101f41d9b5ffb5e2c3fe07b6d260a319b2bc3a54d95ee2cb564ae5483f9ebb672e9d28eeca447ab05a9104bc1bd92b13c8e34036661107c6328d715f4250c736f7c110a5da6359074bb5cf5d0b662406a71d88444203b844c1d0e342343cd78deb38f2efe41cfb29e137b0a62963bf5d9b05a5525aac581ed67e7bd42d21241c24ce02c23d3cd6a691c64b1f93cab57aba9c93b15c1eed3472b3e796e4f3c23545cb46011439d409292a9b206fc563a543d855c99dcf21fad06897cf940737a740450bbce969290ef445ca3b0925ccad51b8770ddb6696220113ab1dcb1eca441340fbe2cd6aef45a114bfb8ca9871ce36679f68407d8a9a56bf3c0a35fd856b6698e9e80c7c4aff270ebd6acd7a6f4529befd345208eec3eca268fa6346a95b338dc6a27b5f21561c8a60cc36228bcf7f35348291a6b7b25a8507584a6b3d54eade6d5f894ff4ac47c2524e9012fb7c18fe772661c8c7beec52c10a7b25a66818c38b157d1f52e861cc80d10e20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af657b52e715a9708f0275853fe606cbcd2833b3f5e3529e6eb8590ba4493e4b033eca67fb6525f46e942d09fc1ba4f2fbb629bbc88323f8a5680016c5aba209a3ca620acad6c061dfd21f5719f6bbf2e6dafbfa1d9d78fe2c775b249a314fa202b4bf29aea4cd5ed42ccc22ddc18ac6bbee53d0ee60437537fa16c0f421491394949de8ebf644eb3db87fbffcc344ab7750b031be81ffd38d92b6ca881f36821ff805003724ba68dff0c05827c5c9beb79cf326f72bab6b5536f06e5d44d3ae97f47bd023f17519e9c4e7d22b35eeaea0ffd59ce6b2971c3fef13f686beb2cc2349f49269ac71ea8fa2a6f433fcb299a77716090c96a0c6ee26265ca7932ee1364d49af28019482eba32d94c334e07b99cbe88ae7ed6af8cf4b158fc63b4f1a7fc161052c5b6e5076c219f997c414ee3cf50d03ee042117375568661998f4a51330789ae0a029c303463ffdc3ef5cb9cf9d86d9decaa0284c8d1059325d1b9295ce46893f10560651142d502dc942ad69ea2759d31fe22b6e7a3db45380c5dcff5edec02ea05e54c4369bde9869223fb359ef7b460f6254c75218814f094c6ad9293e66f3d9a490e6197f313af9a0c300b650f0948d028fd6a876e1e579bf890000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa97e74767b27926dbaafb9a63f67865c6f87f232c2f7a5ae8c230d3126217b09cc73f67ddf535f19b07b82c63ae55001b63c52643fa85580a7f6f7e6d1eefcae793310f8b0f72859f7b8301c6efebb071ab85729192d40570a5a7a3e21ae9a5ad07deec04aeb24665cca0a5b2af1284e49b7a6bb2a245d567933f18f49a09bbdab12de61b30485a02ea2f62416b380cd068077f0e207474a78ef4647034c0662329b0bbcfefa542b313c8f1efe067d3f384ff23cbb2a9931b40ccc483315e187a3b6a1259e7a926d07b6bd28b710a2700ee9b7e8e85f7310e881a590c9ddd39d1c9a96519229d77b79808775c3e4633bbe975bc87ddb9f4af238e93754effbd62e738b9d67fef93955af76d322b94e81cc5d3480eb1aef144f00e1cc1d8558447d34e801128c4c581f1bcb101a9ec71c121e0c19da7ea3c5d8ae1850a7e234f9b996c38f069c679488661386b3ed90db34b16e0232377bcdae4b5c45be807af4afb9c9ae88fd5bf5cd30edaeadb8b91c06765a03af255c8f29c5a80baa9e0e0b66cf69a919f64703748980968db532f63db1228cc89e6bb81b7326666a1009390ede0fdcbe7d800822b9f5476cc788ff6402f8cf9dbf74ca3a99140f317328e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024ea6b72fd59bf3610e2877087bae628a51a0ecbd210b916e05a4394420594ce300235efdd4a387f4241e5005555a46ccdc3ebae87629f1aa0fa582af39d4acfc1c6821edae93da01535c28aeb8eae6f63c7f95afd4fa59c76cfb467e926cc9aa7e147019a96b7df04eefd192125ce424216afb5c7da7f50ba3a90c672ba23062085646e8355f8e212435876c656600fe863c3ba56c9255cfec9021dc5488276772f2c00f01dbb3a396722c4799b2d997c4e0a5f7fd2b4f5d517b98a9121b750e39312ba8917de8b896331455aa11d8441f9947ea62688ff7ae0defdcf95d60a79e772a304513f9e60987c9e55bc05dbdeb75a8242cf923d74d014372f9b876a39b3ee23dfeae93a778441d2f2bed633dd3ecc6478a8d4c7ea84b90227af06c8f74ba869fed11873bf38c50998839c4d2c45504ae74d5a6072bc65bc9e6218e3d7275f49bf0fe3229eceab05a4f7d5572fffe2d90a5782d05a4b2d43d3a8951acc7f934f8c0d2a303e5bc53f4dc3c2ba3d0a130ba91ae35e5fb556dc955c0b8e3915fc8396b7ef0fd2d70be342824bdb32b9666830b6e88d7912bbd23dcc69688cb3bd39666ab4f28eb33cf5fffb149fcd571805ab22fbba23a6986d789e944b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b059e3bb58158a6bba28045a89d875eb52dc69cc6dc3aca25ffaf1feed30d07945bb40a75101cb01425fd6817aeeb1f784d58a5c1b2c33349c012d0b238bf09d13f2636f43a54fe26d9a8e2e158406a8beccb62f9ac747f7a687cfc2409bc897e1a79b2dc45b78331ce0e553b73dc1787d769f653ba6b24e3d13159113528c3141e65006744cf019930a34ea037bd6c42ed3f927f211ea7a3d4036408e7048a7bb5b3262f854515656104f1b381d3aee022246d8edb4beb718facf21d67cf1cf79d0830cf3d9eb8266485ccddb196c4bca402659cbae4b8e927515afac4d2b7b36de3294c5f09d16b294f6866bc44edb61f4699a854ae15d526dcd3efed8d83ec8e0892d331220f3cfef5d36b3cb766450bd1743d82525ecc5e8fd6ad046196477fc20b9737226921fedc49381042d5e222e939ec34e874ac40032bdb88ce699ff33bd311f129bc29af9a43b907468976e4947a51db6d342db5d9d0f97fad6f8fda5cb4217110b061541305a3a47e987f09ff07f0ab8df2deead0dc17642eddc8d9be696b1609bc0d7be0ce16acdb08c41144639392986298f37ca003d3e68fafb2b75d6ddaaa3092c1cf9bdcfbdb2192faad9dbc6afa01b662dafb0d11a86c600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b06b6c3d061f8a12ad61c338d5c1a1cea720b11a49d9ef6276bd073ebefcf6b5013249c70026e0793f0655ec4474d91c25a60f47eac9a829c7dff5d5f3ab893f1755580f7142d9b3304e85da9df53f6761714b3e46ea72de90b63075e7f141219cec75957153f7e60daf1edd24c83bd14d2062fd6e746895b1465f42e053f4ef37f855d01ce4f1522e4a6921009d74bd563234cf933df90467eae96a4a3c498e16deb4bf8945145808a1ba7b99db72036d481143047ac0c513103622a0c3365368269bfaf7fed3bdda58d7483360e658399a103f8430ed7101c6fe1200e2a8b0f9f02aa8060dece59ed5d5129543f23aeea7f8bf196e0e5af623d9bcf1716665164f64a73746aea11e4ee883e82bf29196ba263a6cf5024c60b3102f6cc26754ade92ecc8150d1113e7d183962b8c360e057da92754760e7e0040812dd57f09d354ad6d67d1f9f825446c7bb4759e72a5e47ecd9f9b27505dc72526e0bd9d87d82516ca67dfde06675fa7714670f461ead22f65201edc82a61822a2ece47e1730cce637ed15616882a4f570214478efb41229c73f327dd05b31343dbc98b439b5d641b5002161f3f57a9ea1ef5fd1f3c9334d13669287d616238c6ef922394f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d180f805cc63f5aacde394c59512cf4b24bcf8254dc5950051deddc7ebfe69fbc0420090c2fdc744b6aa109d157b61fbc394a2b389927d55258acca186ba687cfc69a0ed7cbc28c0a012a2fcacdcc7bbfd4e80e38127ad95a70301e1afb13a91829d2c8e6d1e53d5086d71179a73146298959b713671c7d103101be3271f0a5c6e7f9624b54029c3ec8769327038e4d20b8f93b2e173d4090d5a13f0b5e2bfd8bb32e106d24a869c70f0d7d82472b0959cf8b2299e99f16d7eebd9ef6bcfe6ee01a277f58ebcc6a24f11e5c1a68fe28374845c3f8bc1b1cbf595cedb6302587d46281539b6079a43d7750061f25e0a47c25b0c1a72b87e5472174b70e06ee6d94902242cb4d3d7a720516a79bc8bc12f54a1828e1a7a6aebaf586aea10b92201f0bddc511079417a272b1e8eb103bc5199f826f8527d4f62662b1af7471f3baac58457385b3a1464947c9741137a01505ef3d67a9a4f7b3b84c468f5872d5b75fd63a0ebbc0b5b6f44578d595e9784512d1bec467ccae7c13e806a3a6a2a0b8a66a3effd50798590c8a0ef9a06edd0eb4766a0f14287e46d57fc12757381bcf4cb5c1e730a162b6b6abc12d26da1ce55ea7ba3bc37cf176ad30c5a3629c092b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082d3bb3b7b57a90919640a731d950093e03510904f766a95dcef1c4052af0c5e95741323e3467aa9fa3e60cdba256cd1e30f86ed80a319cd416c00f4ef56976c1900d82633de3bc1d7abee570590e429246d87b6fd126d4f5a74e323b90924fa8cd2631333af4c790e23bbf0c1249fdf171737dc796db971bf2232f3634afc677143d8884992d8f4bc7c62319e031a8e5a5f16d7927e6b64a3f4f0e08f4f91f42fd564d662fc41e73b51288d6c08f78762272065413ea73995383143b48fdec02ccc133771e6e0824769d342eb61d6846bca890b8c70ee74af06a24b03c6a822295c2b3ab5c7516f3dadebe9a9cec34e6d198de280464b86920a4345e7d422bdeaef6766cd1af0a7fafa5d436e463b21a0168a3ebff797f90b84f45260e5269ce963b72d89c8f9fa70e702e16344a851a3eff5af628a24c7d807ffc0cfb649d686eff279e9c6e932ddcbfaf95ecabb213370310af5654599b965e16c7ff73f3fa25e0169ad0f48dade4a953346327333c67cf3783a552fc02a98f546c365b8e9ede3df0d4010fd4905c155583f35b12465afaa0bf6f4b86ef140dfe2ce133506eccf815fc664dc2317ed61cb81a73ced2c3f390531f31643884fa4341256f8120000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000259fe448354826918e7ea1df09f1a0f62f8334df027f4f6a2f64bbf3c7e33ff0a2e5d560cc95f4b6be2a78978cae39a84e285d00e901bbaf14917c4d629a880299adc5d6a5ff4a17e0e13dd16f5601bc6ecbd63ffa91b5c3af3080d9f4aa52576fb4d746f40141b62c8d2f1e1b5bd2c0b48d703d168c41791065d736216e86e70e4f76b9c8b333d8839ad608cd017244696071e5b91fb3a591676af3db3472840b0793c93902c0d773cf5df5d0412e1e79e2fdecd87bbad186eb1851392bcf2e53342dbcbc240d34f3519e4eb127edb0d5667aaa9786e48a0466966a7ae8fe1251b8b1e97a4982fd015c555da730f770f6f2aeda156f832d3a6191cdf9f5e01f0eedafcd3ad135ca760336f54ab4cf196c48abc4e140b1124e7ddb73999dcbf259c8f3b259897283807da1aed07f47575ed441d80a156308a01c97ded28ffa226f25011e9d13eb134d9bdc5bcc31efe014aabdf4d8417e71cb29d49af5c81ced7f2525d0cc112284f72e1598a2924f6768e540b8e56ee826f075fbe1bf917aaeca78068b8f02682c1310f50f0b7280d2de06c122c8800774effb3223675aa6356874c7da19907301470c61ad6e21ddc7d229137a88beba94dfd7994c783bb64400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009add3b38a5fed3983a479396be8ef4e30c8932fa704b139f86a4d9b2bdd935f72d7ac37fba3e39def31179629bf747817d7aa79786d29c6ad5cfd179c94fd073d41d6d32761bce05446f41c8fd84d1d203ccd0d11b1f0e4b247eb3129fe54d9a09476f884c09a5423ea02161ab0eb658517809a53e4bca2c69f4b61bd2017f818f91f0fc3fc04d228740492c0a01592fad1cf65b09b51b7f4fa2a206bc44a6127a43d379799861ff055abd6423e75aef91baee7aabd55199b969ca7deaa3b8a0f403cb1d9bc31c821949bb29b0096454d2813b24f587b956d7bbaa1c16ea2ab461002d2f4b4320dffff0a324e575e445ea67470812b1e14ea2e11e83c6bc0a9967a651654ced13104bee44b1e3e52c6dbfbc7ae1bf21fc39a72dbf843aa1ead4d51d6cfae36b63f66377afd5ad04eb3347d0afa04b5d6a386eb94251fd2a4b040c1039545a50f5bb050e6b76df4f6ed05d5853466a79bef3535956fde92ffebdcfb6e4fb9018ec7ff98c12a06dbb8b36646fe730b9e2b3990ca8ae2315a10c928614ae936f7b24a69f18ec66e6e1cb71f6cecc4cf42c49c761977cc1a1b760d10cf28118fa19ba9dda48648c99ae21b2aa05060d72fa24b3e788de3366b3c3a9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082f54fe1fbcd35016d65e2406ecb4238d6ef321ff85cd35ddcfc89a49e9ee28dad5424cd3d294df99c54c8efe03834f74f31e1e53df26d924851c592305668db221359160b98be685c68c14e97aa136508bdc36edf851f7b07f291ceb386571d3c216fbc9824a10d8d4348d66211b7ff8a5c54d085cd6190866aea93c332bc155670e7cf5801a1527636f01113e4919e33e38d3e4e591cfa6c5e07f541dc68e94c430484d3f0438b12cf1f20f28a4049aa192bbcd4f02c25b8d17a0b7b1b53e5dca1bb8b431a1229bf17a4d5e552d6d34c42606158d404b73722b192029d034bb1da01af99efece916352bba96bfefb7ded944e93b79cbe62ea62a77f910049461e293feab86f799197409cd66230035cefcabacc10509678e351a5df55f9852ecd0e68ad30fe3b15d11c215034fa3d560c2afa10025a35f218691d4e37820f8d0aa77bde6ef82485a75255e9ec455106bd5ae2a76255cf01b26777e862ad66132b82f74a1c15241270e4b9cba8c4f10e6d3557fb048456fcf7c60d1d7041b3ce636861f30d73e6ee3125518f57e2d394e96569f9cf646e53f3b79f1bce78758c1edb481ec384c481e51941f7026c703bae0f7badbe868399b040e885823fb8800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002638343f39dd8f19635165c971b7aa9bf634946a05a8c2ac572f62d679ec65a9ff57bc1bd251885edf9308b06a64fb2e17693c1143eb9ec6b0205025a7b151a1eaefe9dba1313ef658ecfffda67c8ac0a5258ced532e14c1cdae19d96cc4935193dfeef31c19bb0eeb492469be83bf3d441b01f735fd05a571383a09ee381c15a1c8c71fa207243cd1da03db91abb66778919fbeeebe3614aae95482268381cde36fdbfc82d64e4ff072d6876d54b98754026da4114c967909e238ea0dc1167498143825f24d7f718f5c3c856fb447ff7231e7cc416d28335454a621ac6792a3e12c1861dd5732b1c66183457e17522189436b769162e1e2e6e98a5ae215a802c35ce4c188e180a451c16e6552d7f29457bcfa9aa90355c2237076d10a100bd46abda8122248e81eb88d567473cd47d819f1e89292b5deee9021165465a7edcdb4c1e995ebdcd5500e8169b77f8f4edff83fc1ef3ce7cd4164d7310a5681245fbba851fc0b4510591e56985ad9e9564bec478c88519bfe8d3c2740b15752d8ba07c6be493b10a5c07bf2c6e1cdfb0e39f4975655c3dc5a1bf2698a9ee82b92c10a97c54ac735ccb4cb51f69eb49b602c99b61c91e6b9cf998a318f85ef85200f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ee92a348cdc1a03f8084a4639249450ecaf0423a905ec88da08508a58929b74ff4057f0772e8fac52ea8e81128604ba0cee9c61c3b75a110aada34d793a3125741e2128ca147deb424355607d0a8a8b373ffa684f781fc894e10921892a65cfc0a7aa5f908975666a68a5313331ad514ef8e362352af76911c05a164055dd28c35d4894412ade873823563ee27f466ab933e627318541868a6efc65e0b87d4dfcb868871190c5a56b0549f4f7b13f7467016b846089014e2b1f167bf805c70d68f595be43656346a8ab78be525cd82ecb1b0309080751542427fd0c1e7fb3aeebab5f842c11a2505339262e95090bca77596ff00a3ee6c049fcdca3d6dd491367d39d9756a9cfbbee6fc81ea67f200408f76b5f9d753e8997149bf9e5179cdfa61914a2261f4c3de8a351731b92c3c0ee31f8c37192c9d2fd80d539c78246ba4c97e80682cfb64837b98d12cc9652bff286913a6b0dd3b199afd06ec2e9dca22a0446cc826a2d5ac34ca649f28cb90168efe9cbbe45c3e377fb26ee778b67ae65f43e2723bc1235c9948e611116ce48f1c46274a6947f0db7903529c0abb7cd1dcf7e887315de16eee7e52e461bb5550e6e930b0c961acf420a4099204ed8d4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081fd2fb68199e11aaef1868d6c7e4189de768e407af188081c509b9348ef2effe64b51104649b4c2c8c01a6461f26175265293faf139cc8fc643d6003cc566bf4237c871e7adf5f20b9f339608e0d868512813082615f1cac0d2c647408e9a423a6606b4f15f8005bd0c3d66525ed0d769de7ae0e6efd480600be369b8a539d25348ed2fa2883d862ea162e2b4a5f3c5348914d23466e89e9394259dd3d980ce284c2fcfd5a5dc9bcf223426f112ef3eead7f6c6215187f4da3904f7b6480d599f9a7da2ec78913915b3d8fce29f386179a4a96c2e0d3286f545b8a912a5b838a7be623013d9d8aba3aae9e23386bf3e46e5c6f98d9400f368f088b93eb3d627ffd80619aa9cdc32173830dcc05f7d631fdcebc1f8f4dd1222f67564445c3905aa07ef2e2d340b442cacf2af54276b2edae90b992336434678997eb319d377a0c91f4031305292280876b999ec5672d4153fc6d5b330a7b528fb48c4729d6adac8faf2844ecf13b492c4a24b9e9a569a5f7f65f8474a575b2ade253f0ec63e31591037937b87fa2beb86d961dc1d94e4311c46bb7cc02604cc04d7f6a238ea1a53dc8d3ff6feb8e4d20e3f8a5896d8b1cd98d34cc215db3a562694077898912400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e9d58efe70039b69dd1763d601c844c0ad26358b8e890fe9f709b1c3ecbe728cc9d66505f5f652c1184d2017518d9c0770c6aef7b06d267380b6a86bfc00a93201a1badfd98a68650129abd82bd3ba4cb11bd9bc034acdc5b77c8b20083a8720b304786201d14f8d4cd37150637433443e6fd908ba3f7e4930dc7078b4d7afef2061ea6920cba2c6414257d010bc27e922828e97e7dfe6a6c1089d8e0301667cd2c6112aa423ff8c07595791c46026a0331693f3e582819e50730ea2427928ca0ef81eb759ce3359dbb2b3fbf21847a20425ab087bf5388936dc4deeae328982e574d62d1e5f9fca5e916e05497002b205b2ba4e0a2ac689e06b19f04d67f26872ade078fdaab3cf0de6104c95e62c520ae5bd382471e3f301dc0a8d1bf9c679507efb4870fa5e1e8dfdc387113d0ce522d3c9e6a4f91cd35dbbf12de2544dcb665f2928e541479a37dcf9ca4fc340a23d07bde52fc9a20203430bcac21b10e9a6d9c3b5763eb6a989b70070653d66567e51ade8284e7e8fc369ea3ec3e27cb3dfd7e9c675e6488291e95b1f3a7f1d395912c6b7bc8c50958abf889dcdedaf3e2544f0a7cceb90ebafa5de6e977a0cd3c974bbfe6a18d3ba7b8689f4b20bb0300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009319a1f22d582df44b1b2dff20113808bb5057c2bce3cbbdd8a3e6c4b70a91f0859d54bd72abc8b78c3679ec412c8bd94e0648f81807e4febadec4b216319b6f10722a5d6073189591e842ca5016c60655c41ddffbe45e2c3e3ec83b7ea8e5f19cad2e6ae66405e12e86aae5bdd7272b0dc8e5bc85c2e3773100f8304286ced0205dc46e143c51fc4982abeb03acb3d681c3641d670f0e90d961f760f287bac7fdc60e3eb1c9ce3ebbe5a24c13eaf46dee1efaa69b7b7437eee6c48f68d69baea6f8693d6aacbb7914f3b885d2e8ec986b9cf94ca69d1ba3193de6f400f48e74493a7f630eff999a87ac43fb2c7284f9566c5028e015ffafe61d6ccc7941218988125d299bf7655ca59913bd91ffdfcc3e648954b1a7fb03e106984d69ef87ecd2cab74e353a85e651345e762f1121b512629b7474dadbe45c3c0ba0130fbe2708443d88945fe3a38c4ff111dcebcb3e105f4cb7442c4baaf5aa3cce5020c61bf381134cdbbd23d67ad6e3c6f7701a2105339e4ef48e3740e9e579b91682374545990496f61979acbc1dfbfaeeebabc9d8be974a3ded1b1f5b7a717080ded3eaa7c5cff71c1c9a4b0e1ece17772dfd67505833e4a457e30397405107de0f708c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022a346bea737395fef23fe71cf05f7bba4633147f2c1d10011c762fffa596c7b99d12ba4ef0f2efaee45d9c81586475a98ea0afbdfca91e1866f80ddf762caa4bd49ed0d3bd2d87f0d813b4101200ac6f80f98d2b38e5da6649eae6f02395afddfc42630b018bd66c6817b4410117db504ae72dd67b43d1d533127f3cc291d03ad6952d6a64829d302b5f9ae7525fb09e53a8b9ec567b4b1594a55d5024f329510bc3f308ddd65d9a4eaf88bf8c3812e48277ce3e53ccab525974454d211450a8de94e984c9ed8af281b7bdc6d18edc0a99cb369feeba992ab066f02964aaeec2ebf267f977486c753b859b1e9eaafa3768140775ef28a143c9771d0b6f3bd039611caf121fa3087a3a1d4ba1c9f804257240788bed2f453c1c87142940af45cec7ab45615eeb938555ea36eb1aa995b5b69b6644397b9c5ccd0bd0add49699a5b3cea368b14444487bae65fd0d4d6be18e483149e4513c2ab5f8132dfc457143e4d30ab63e37159e9c9888bd7c2d0b3ad40c22cc94e866e034c0302b93b99bca65fd24e60c3ea78063c822252c66ae2e3348cd6d78e04f47730eb5a22cd8854204e3e780d335c5c37aad803679249fa8f5b1ea8fbbed46cf9ad1caac545a72c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000913bd721a28e222b1038eb893c6fceed53bfacf1600ca7ceb5bc85d479e64ec36c30fc34124a572651c73d899899c80091f5854ec0861ffed5d453a64fba48dcd616883cab334bf061ac1a344c18d1444459bd552decc1f0b2b7c10adcd20e431c24d649edf796fc98a4cc91233e663d5a8954aece6c5dbd3eeac4ecb51189c2b10272e9f88c8da9dceea3aa174f4514ec1c6e7737f270ccc80b338294a3a6da1eea869a269bb11be499aba7935a8efa6c4635e9023395a4fda008fb29a75d5e5e479bb707716dd1bc94288b7d41edce19cf0cb02d91046bdc6f1854b5b4c4973c88c4396b61568e57ac4a164158c6985c6ced54dbe0a9a8712419a5ed30a55f0b8a679226948ee85d489d1822ecc034bbf97d00e6c8ca5279c0151ab1210bdeb2303c6c3a244c5c93e91fd11fde56ccb5749279f345e9995983cfa6e55fca8a79e492f9f0b48265ced30b456a1b62643f1901ed94c733f287cd189c3912ca8cb5c2f8542a5e8dc9db1a76b9f04068c33b93d7086b4273039ed22987134ef23aaaafc5fd15624059540a7d2ca25380660c463d855778d8716075ca000eb875a1586671c433d7f04dc0850a78a56006b39a5df6b7871905603fbbce4ab201a1ed00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d713a553bad30e38a50717c238326f99d62d765d147f79565ef35a2b6e6db998bfcd9eb73460198b095680ac2a8b13a9d17c7e71f3885b3a9da5dcd5c86a13d24a0377977c1332ef3d3fcae94fd245f9d90f4b3236830375ce54e70083cf10ecc7388ed0ffd0652dc7f78adc96ddfec35cfd9b1ee6f01d9bf7e9825798a704e5915f02f453e4babcfa58c29c90b824294a762f5eb9f611bf9a0a93a242adbab302c370c6480a94cfbd0067dfa0c18f0c02962787d6b91d269c5a80d6c7b805eca3feac3318000e545b44fcbfd49beb3cfeb22fa7d6a09320065356a7f640ba96fed0bb3f4fa5fda6d51bdf40609a43768e9ef64c3b1d3753968952f333f92441066ca88a0633b65823e685d9cfd5a9888aff591ec496662213459ea0f0bdd169c6881451b2baf6f84d1d5d1a78936d008c1964467ee600205ad8db873d4f643cbd4166695abe2773d0dbd6f9e021cf62d0098db45ad926a2cdd3bc04fff4fdd35b5f2ed0849c76a8302eb8780ea8c79073105ddf8e3a4149c851c9675938908b9439112f31b2fb6db68a19db09b415d57f0391aece311bb2d5046b6edc0e88e75334b920378fb430fb0b861eb5c958ac839265c2dfb0d98ca8286e93005174c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ba1122188bbbe4696b5140dec489b9f7ccd427251c282c537b62c19f2daac5a60994d1415b642114258577185e93835f2a486e4d6543933ab31da6a6c11efead10415da3dfaa192d4ed538e09c25dcbeccdeafd4ec57c6dccc04ba2709ce213df7712ceb341378c381a6e2bae31088d441a6fe9845b7620430d9854a5eb57226c3f5c43ca607258db1d14c26a26bb4ee9ce48a59f01c48a7945f3d25fc0be7b22ae11616756b7a6dfa3e339f94bbb7f7a3677a24a40de3c8ac90151dddb6f2800dc1066cf9dd8553472dac5b5c60b078c26697accd73b70cee5ba7d8b090d91c38a6069904012d0ebabb73a622832c623a8f0c0f1ef3b9a8eea417eda00689007a0f3f9f878a1fca7a4eb38f7e697d13000b854fd8cb56298b9d9d4e9fdc921c19bd57396e0ab8adf77cd976f094a3be24cc6e32514d5dd26ba265a0586a35565a960f8523b395ab4dffbcf3b54a7604a7e3eff74128ac3d980538694f4fff1f0cef9451a5684a0795b8c01123200cf8a30c3b28990f66db950d6c512390ebbed99b30a33582aae4cb1cb69e967a77da200dbc71628dbf28cb164b5ad64b1ae7e55f3144c5e9d2c9eda1e3b0b1dff1b42989afa35ed292161bf59b1bd6e26ab00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e25c7ebf6b2865bb1e80ccca0a357d328ad36aa5609a347682b4825e84e1b5a6d7f7cbba9fe9a69bf9e9e9b55172d4c3c01dcda66249648b12ea2b6bc9574aadc942b381a3011c0be7c0ebfe6353404c568eb661e1864c972dbd91e4e31bcd14716ef65fac974114234cb55c6bc9fed65c20059fbae0bebed44ab9edf5d25f8562a92d096a80b031a19b3c3816935c17036d24e557113f267a61d9cd87c44fb3c830c43293ee17afadf3a3c2dde7bcaf334d71238c2045a498db8a4bd8a51c7a68ff42439620e7c1e10c6e71376755a9dff35525c2a1186c1123239a54473ab48e135baba301717e23044770ec92a45c1887a283e6e2ba334137832be22c1fced6e9322404101996d1f7fcd29db68e785434bd24a6160522501847b282bcd6f3578c887b0ba8bcd883818c5929e9131d4c29e9bfdfbf6f3949029f2985ea621b41ebdd935cc8588992cb13b92b4fbdb02aa2c883984c4781076d196bdbdf781462b7ef3c2cd878db909bb5bc6c8584b9e33a3dc16fd17c3d412920d86aadb57b6b49e0965199f875649edb60994d712fc5f02620511eb3e4e232d447c2573aaa7951def4def8871a313d82cdac5cbd70f637729ee964740d514894a89aa3f4c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c77b5b8cc0e5267cf44436c51918a8ce5018f17f99e272ff74c2785cb2137f1790d35465397e7c294aa883a790020bed2bc8f8b3f8a145f57e6211ef4f9d21aa49e2b4021143da32c6a57b9d7c20882fb86332a4afb17a61eb4734b5f5992099c2c15cce48afb7cc1422feea4b111fcf4e33b96f45d9fc6216d4078c1f1dcdc6c55b63bb546f98183762b82cd8a61c84c4b2d0644373066df0ef62adcbb3c3071e22df605bfa6043eeb46fd02c5dc68e8dd91b386ed6b55fe2aacfd361199c18a8e78a04c02f863d80562e6c46d439e6c9d26d217e9f8d6477fbc250a61875c0a6a42e5fefaa9a0f0cdb101e9cabc42b0edd122c28681bd8805edd34a4ff437116c9b417f831de350c64db0bb9c75230d90a46f1c327ac68fd4cf385aa7486987a866bf172b78a3512ba192cf2171f833ee529a767f2612a262f00fbb8ac1d4878e16047f9734bf85a2f3a8998cb23885cc4f947102db5d0e193b2d2b5404db48ef2bf058318a48aa9305727080b6c10fa09bf529a3180c6fff75e99010d8f6a3d6a33625c9ea610748828bd267e645db959be1d7e563db3189743d9a07b7aca61eb2d7531d4e7058cb9acffb451f30c5fe88bb7e8e165ca26a8b6e8df9fb2600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001168bfe716a2653edce62a4ac06c9160d55e4db5b5c607701290a1dfc3468da6d2c6ff59dd9feb85978f6b0851f3c66cde0e6affff5c21ccbb71e26d54bf6306011181cd57487fb671c3d2351214b0b174b62b27a49e1549e62dc3b852e553e252ad5d2be393e84fb15338b6df602984cf5fcfc1e9c283805842e4e8eb63d7a50c99d972410f14c9b9154aaf75764b2ccefa9591c66d82bfc9161ee5a5ad8a8094c6bc3bd2deb02eefa1284158c60b7bba55d67b64eab25070b785c3fc5aadef26cd83babb12a640999a6011c84c642a5b6492085f4608cf59880b1f24ca36b8ab185bbf9be881ef87022aa6bc8a28ee5f928ffc31c85cd150953ec9295186988be24ef995a29ba66660cfd4ab1bb0bea9559f6374d578e37580fdc7efad5fc52e433abd65cf76dd97670a57ad677cc9488c0c5c2ca7995a7564151ccdc79a627e6366f6fef9b523e780fd15f921c3cbbe664e5d1e4ad308e811477b09e563f3436459de25869a10a905393fe4be767ddbaf7356d5ce8b471bdb14537fd0fc0d6e6f454cffd71a02d3c4ca39c761be5455fc1e8dc42d50c5100e9f8affec03588184deab13b0800c8debddf4e39fa61fc2affe4acb5b63151852b5246a5573f1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099631ff1eda236580892adeb9b47dd670df5f4fcf0201049c44e74cc2ca28eac32f8cd53c41454ef27859f88542d74a2dea1a2e2a14e5d17892b603f031c2b5c60aaecb1b6190b58d5c361fc497a2b80f9857f94b0a099feb062e8e2aa185562e09f32601251c07435fa6dffb0660548af981b7ce6bf4dc7535c482711adfdfc27bd43882b7ec042499185fe4cead3a57b810d45cae483f7b664e45f9af64eb117f86c0962796f8b32d44cdea31abbc005c657a2b9b9df6f9dffd0d98de294f9251963005f17c9b47d3e099b3c9f5f900ef311ff2e6127e0e6807dc96925e76dfb5b6e742c12b70770292d2f6aa178694aac466877929ffa6112b653c7f22d1c08561abc8dd5ad149f7401212a4f43c0542c31ca7ca0cbc7aec77997b5cf54b48ee6f5803debefebabcd60ad98296ff85340a49f28a3d316cc10aaab8d6d4e14c1d800a203019aa3bc82c3743f30609d4fde62b8ff2eba58abeec77e1ca02e1634fc16aabcf700724fec761be3573c5252d83e0a08705de16e3027c141348d0821c93779e95471a77f86383fa8086f5eeb24527aec606e14da21246aedfef5e4936f1a1587431bdaf2edb34f42889c1c2b0f81ed5c69b8be671bb3c09cc53ad5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095e273371e6eb4bf5bbd0025d622a46ae6a4877c68e5c62fcc8ca713765833d402093e5489b6e6d09acbbfd930677f9c33fe56759135f762c03f46856b004511286d913a38a3ec2f1f431c85da86b795315e26cc5674345bf5c8eda8069fb8935f985da5777bd5dc8c1dfedade2c4ab3051694338bc9dcce06da1095326ba0de1b9539da80faa756f4d0a4290b44ba20ea75a9fc1aacc5d23dd17cedc124e05bd289f6864e91b8dc37451e6f68766310be4a853e5dd2d544cce32b9ce09f814db00f0b557ed6508a21e691d4db30312bf2797d11b8ddc8c2874ce5a05c0a10af0ffdc5cbd72b4e34f9632953a50cfc7502fb7f2ece9b84828c265e4fedeb03ab89f23496ffbaa26a6a145902b0013ca118743bc5cc209104dd4c2ee83ec35c3ba2a217ee9648231c892bfecf403b626a3bb7ab5f7241d9e78d995971d46d81f28a0708e702787858eb8ceff0f76e5fc04ebdbf3ed165c75d49fc632c218680972fac18da96738b48ecacb0fa5d0a48828f935c8b65589b7d56ef115ba5b368bf374fc05c7bf42e57950dcf8842d677a89b60aa75f34ea0800223b4e726a8239ef8dbd3938e6f50f11be720104b5b6f00561279083437441fdead696a5216e9c000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cef667e755503294c8a515778bcede053f5f63e5c0e9d033cb78097af60d64f87c4920d52a224fbdbd4418132da07dea1edc56675fcdd5064907d321951457cbdcea79affd22747abc9fa363873933154bef27c45aa5d9fb6808c1686ee4678a7e9f387dc91c28224a18642965302ff4f16df50a94dea9d6ed577ccdc15226cdddafa8c8de14fe00c48b1328c0d090eb667d21ddf024077e867c52f78de39a2930ba682e856891c9b5b2218d106fc82a728eee0fa6450de12bfc8af937841b8f5e4bf747e6eb81d4bd76217f6911baaa26aafb32730190a2ac40529df2cd9f2a63c27898ea0720ea529e6690afe98f2dc849e8efea93c516cf6c16fd0b0a976fa6fbc38ce78444841724426917135b069a08f2007a5dbdbf36582826f8049147fa6b2ccbf52d886e3d417b65d96a54e3eedc934d2526dd834b8bf6305c1d421dd5ea4da2beef2aabffb07c47b1236c7d7aa1f6e4ead8c7f079b440225a613bfa20afdf06cd5dc9bdffcd38d138d9a4c9432dfae07acb144f6ffaa804c17944c1b6118717c0d05a4e599b20a177100b379e6162276730f01512dd7416f53cdb4cf7be0d630b808f2ad554a5a221c7c4e538e6e722d3348bc44e1a7b4225c6a4200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2f0b3485169aea03c8f5b525a4489cce83986e323054c0a0299879d5e064de438b5f2c20710aee789898f7d518524fc8b8afd246cfa4624b4ba8bfe3626392724cefb3923e8d3b16a7fd85397b8127236891e9f8e7b1f1095dc305034623db3c0d7ed880fd06ae12fe5be3d9cda05545a7f4a6dc5dc18bd9613f4e96f2df9bf1fb22f7ead26ec0fc854f9c3f4f05aa2803e95c0f98a7e542e5890ce1c310cd660133f83f87b984e4de2f31e469d3a9a7a2e2678ada8e2adde4956abd4a665ac85e072ba49c956194b27159063d807e91e8422d2ef2f11c2e64cb99be57e19f80374d0e61508a411c44c330210415ae1ab1f242d2d0bcc92fbec0a148a74a37dd452938134dd129e56926c5ee18fbd5d181a0f26d350a974917fb62871cbe08e03fbc68fcdde6b0819315d8710bf29bc9b7f36795ec909dba79420ccaed08d6ad45286d46ba3c1a5f5749d25d1724f382f4e9b96d0c99c3b2a27f7d4a50dbdcad153649449670b9644395b1cb6bf484fb88ab351cf8d9a40a9c90ec9a1a3ebb8b3ebc71c1ef5d2b74fd5daeed4f4d2358db60273d95f5d5c9033986ccd00e274713262fd3669a7e04f88ea9dfcdf350fac5eb6030d08ec712a7c690737955940000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4f864e32ead38f7b12f1416f265430ac4495506b6ea8aadf56da9ecd1b70290d9a42d7e0c5cddaa42065882c636979b9276b52585d6c697d87bdae7ed3380795fd5ce3be5b61df29dc33fdac0027b142ded2cd63cde64cea96fa2456a6056a3c3dfaac42eeeaf9fd056a66ccaf00828899f725698206114da7b78b0d8c5d2695fc455d4971bce927b49c3fcfd6e4b7966b832960ceacdccf1dd4d84a5006ea867c2f690bb96a3f1d7f325dc759512b45d3dfb19108c453bdc099d9afc26836aca767c341579c99bbe13191e77a74f571a69b459783fea188f3d4aba5c7eb12f1dbcf46ee3e585568ee689a0484b82e7eeffc2b795aad6a0da7c9e3f48f2e8e941eb9c6b3a759224e7291d6a726970f66ad16014ee70d844f033445bcb29913142ce9323d30df340a0f8f789a50b5bff47096939d628005b80fb7776475ae27e2c97f3a8e9eafc8dae6eab7b888ff6633392a2832767f56f5cd0b34c7393fb49baa45299c8c508af33920af6cdbff1fae34dec2c1c8c5b943bc8d705feb2bb3e139ff167a9dc9a71ac478d67690794b3b88ec8321c79befe8b43629308b0e111db48413226a4a377c630703efeb1a2cf064c349e99f7307afa0037535e846a1f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098f51c6d6470383fbc9e608a7942385b60c2756b6a82b0ab3a497baf54861f21c32a33c4b4cefe85463acd543e67430ee2e30fe6d6324a990af53923925221ac8a6a488650e75570f15db749b44289bbbf55dd732631aabd8919905781fe88480ca275013559b2519b14e1d9103e92e06e8165445f6fc43c2357807043d474e206046575b70720f5a917525680073150e3d2c6622e5dc298dbeaec20c46f8375854d75348b8587eb0dadfdc19cb5ea60c48981dbc1d14f3df12f0aad08c38053769393e9877cab74646ad16a34b199faca96c704e2126a57b13e624d1361d6f34f350be30aee83dd0026900cf45840c0daa72daf946d95a25aa1274a9932401daf9c10195c9e14ffd7c34c19993037b5a5a43a38b3676eb5d60d99e8c6c91262cb154c14b6b20ad10698691b241508c96460471fd357dc56a5c1edb9fa8fb731fd39019ed8ac5be147c21c394a51d48c898034134f967984cd76a54059233e3514119c579c0bdeaaaf4d137bbe7c5ecbb860354d15a3ea28816f9438bba05ace30e2bdf5a091d0ac27dd4f55fcc034b2cf7a60af1a5c6fa14037437792333d66b9442732504378ff783bfbd99b08314261f21ea34579ecf89aabd42bb638d9d9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023c524d5944c2fd466fdbfa47e7fb38cd53929d4599e8d1561c81cc33881fee7d14797573a3b04fcd273f5a95d69454d02554982657890ddee472bc92f1817ff96d9bc1fab71304c1d26001fb030f28bc0d19375f78e68cb7bf587af35e6a86d25061f7f0b2518830d3e8bbcf0d624fb40566470e5d33061ff23f35de4dd18838f22938cad19cea890047be1c423288e13330997b40628d9257831e2575ead63eca9aff025c77f45a3c7292674c7ba95a930d483af095f9b05bc941555c4ed4a59e3cfb4f1835f43811116a1a2a1a3306157fa96b5cb0c60631adc58a4f265f5a2faa5407c4d7535671b410e0f6674265c6ed971999dba8c2205700b22b16177486604433039c161ddc832f6c5864acfc28bc72d0d4ed48f876628bb566a7d3897396a05d64d065008b139c9174899d66312da98cbc259e9efa64ff0a17283486288bbaf2b6276d775256339f169d605a7d7090153779eba489bffc7eee30fd036d7034e9cf68568943c2c4aaf1de4079f79df72c20331cbfebffd0d0d27379d3eda2b091ab6ba7a057b3c9d13e3b11143df57441a9ca7b662fb6e1b28ba89c734d3bb82db5bac4a6db5caa6c4945a1671190ead4959d7a78dd496b2e1b71592000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009499447451c3464baa815453947e1d2d9745d5cd12a618ab4a848f4f218da0cf501bfe4fd1d4f77b49dc3831d965614a5dccf03e10a1f1e4b918478a741db7006214a50c88938e64f6c8c152ef16beb2bc220f1de38db17a5ff6e156c02c07c4eb0a66b69c6e8c78e8fba7fdb18a07d5a55e4452c1fd26be254a74d457cae8f2161de398b8898b2632ab5e06c7971a5f325804836322336619e6bb859ef68c70b1491e6960bbd305c13aad519f8ed6e297c53c852a081f9678607dae728bcdc8b3b9d1c9a5c6e0da54275f90f88486e9ec66d6417ff1bf3d39a33a3709babb4ef367f5c1693143fec746bc62cd7c364528c6cc5369db18ee8fc232eab9f98b610e00905eebb1fc025779e0fd5535bb96a0a8579a88ba86542fad94fd083fa2b796163ac72f34122156a33208d0cf9287b3c266bbe930c5b754c22054f374f3cb863f7ef0926cc256d91d36fe10a3caa195fe29f640ca7aaf42e6c5b9a9e4ef58325adcb8ad2fe9bff981de3dbb12c7ad7b195b0d2a782e8efe8ae14ddaad891b29b9818de50acd33ab55040952855c4e8809e0994f1402022fbebf547b70e97d1377a951dbb228145286ce84961da7b64f8251b1584c3769e4fec0ee397b3030000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000122764444ab830053fd34bb58d9b29812d1e921a3554b42626d659740c1a09ac17de7c80f8ad81d65758721644dfaafa1d2e05b9356315d35ec88f6856743832f6a99ef80d42612feaab5741457c63d14c686eab9d9856253beff9f10852dd2356e027779b95710c1ef9aa82336c26df8ed159ac26d8437bc3b6197e1eaa5099aa27100fe2e2517cafad6ab9fa4ab2c59d3095c7562eb09afb729907457f48e2a56423407305be57a5633463d55358ce108f473273e10b032593825ca1cec21c446c9be056968b15cebe184f444e8ba0e90eb7479776ebaa3def44c2dc380691910af2808646630c398e8454d7f0f5ff042adc319e98e8bca5c6a62d7f18f1fcd5389a6b46030901c0a09313affa14126f2ec735d7fbbf5f0f24b9503ba1faa028e83ad054d6338861c7023b72ee80342402594a22a6681187fa777320769a6277d0e4aa8e489dc2e8d082a6f0d97b0c2566380ca62d0a2cb8561c369c32b36c06c882ac6f6988ce3bb62693ac28e9569d50458a86663ee84a4d167eba2a4c1bf3d28386ff8b3d0848e1f6e1e12018c248f2be21b0620c6de57124b7256286c179aa158ea71f46f1bfa250fbccb8ccb3cacd01fc2c893feb3a33978e334270de00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23e1c45c74ca7fec1792c057479b60a286cb5d752a7a25be91944cb14426bf893275f6c127b65c8df24db6a1c37526d14d75afd4482da152693badd6d0923c4d25e3617b552cf36195682ef278291daefaa12c7b3092c2fe29e4fb0d61924e4439e843f54c2561eb761c87660506fff2e68602ed309820bc72ad29e342e9f9c10e2dea44b2c20c153a1a35fbd23cb604a7c6419e8283f05fe01c1641204ab5c92d113f567ba75ded5931387db130561f6a9fea8ee119ab192d476c71967233eab6fc51a23c02a1f63f064edc6018bb58fd183671f238ec7bcdbe98c78fe2869cc68db25f89b4d26570a2e3bf0d71e772f8508c3e7379fb8bcf0c3317065f149419a98f5e8c2d1ab3d51125ef55c1e2df01aa580d19f21796a0f8371174153b113b5ff2c722a5c6085674104944ae3b21334a27e61cd6248092255d6af9b91d93d683c98e4f98940dec86711ea1512db7818191772be6fe4640dca4139119276874306aad776a21b019868ea976152261ea00e4649049a4b9e95ed388b9694621aa94413e2e5d9ca438fc529928d1216e808ae6b56c006b96df02d6980a7152926e607793509fd0c3bbc5887536758a0883720e41b7a2457974216535f5fd4f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002281d411429131fb27930b4c4a447a577c659051388c69c5b0bf9406d2a338907ece5342cf9a8e07fadadf42ccc972e8322674b2a5ae6ee452146d159626da64f4a12258d896fafaaa0219cf58c0bcbc571bc5dc1f2a4cf039d967c5a858866e1336a16de2d365aef7620c4a2931e1a46d252ee48f19a21b9a08a0e8d4ac6ba8a569fbb89a161d56f44bb07e6a8b92e3e6fd65a80bd1d09f4412ecc781f14432a6e5674fcd26b45eb9bc2667e3007fcd137e8d776aa54920a5cbbbc2760f225081e61a98930af5b92eeeeec4b7675e5dacfced60c4ad875b0d5a68354a8a790cfa2fc635d0d01f85f45fae41c74b4a159a8f27ab0c618f337ef77f689b18202f1ec90093c91f34521e289fcbef220ce3cfc1d81f8a87ee11370c2d986c57aec3c653de6fe5577e85c5440d348a4b9e1edd5323c2edbaf696fcdadfa689ad7e2e8c1ae2ca727782b2c1fdc1fb60e172cf969fda16190af308e33adb93a4a5a9b68a7fd3929984f3185b26ebf6098ce7eadd11525cdfe52173bd0a0ddec72870b50af3add3f194979d59dc90e3fbd92c05d08ed7717eb8f4aeb0152a898a7dd9767706d7fd2b95267b4ea28af4d405b68a84208d6b067c8dbbef4de8c0673c032400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4fcaa58b4c5adf401844e728a6ce43411a629f8e6bdaa1ad54d2dc9f908b5a8e5420245d5ca6b004d36b8dd9efe503a2a7ab13faa67dedbc7fad7555e85a08bca6ac0f48d5452891e6592d23aea0b66796317b90667b55ce600808e4a976c1014356e224e4a81aa47a43e04185cc985874ce1a2c06a35959d991edd6e88e9db21e4b04d9691b355d64d6c5e5bc37ace83c22a2170782f7252e43467d8b6f69addc83277cdb1658a699a93832b871b54037c34331531bcff033674b85b42b5f64478b091faace5b02158c2749ac198aca5b3268dae07191d9b8810b59785f0f2d52475b013ad8f1cdcf81f1ef0ecf5d6a7b8619d2e537644aaac7ee0169772d8b4c38a5250c1f9b1d042b1d6d4f94707df88116c4fd38c887e8035800b67ea246a19b1e82bb3dc79ee12d881676c3d975b6d54702460989921c215929422d356532b8166242cab4de6ad06e2735ea50ac8f6ae87fc1b437078b2e1a286c28d9289d6ae164ed7745ca2ef9c45f620533bbde826fa93db428271d2979a358dc505a0690c437b0762ef994484de835786518ce6303845a84b4051669dcd12c0aea9d7cf567fcb778c6d742c81dc8cbaec474be9f1a683130784395ba7de68c46d90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2bc009233ae941026f0005b8f39b777d4436add1e28f2457b20ae5806d4aa76fc63ae1e9e57f5e3b124d90d94fc4dc74ebe40dfd7e870692e67ac6b87f0f2bfe267a172be29d68132f08cd3df8bc83ee2a3fe1b766fd1886a91433f287fa46deab30c54124ad2d98e73099a501bca4974af1898b92cf39bc0f6f05001b3e96b6d60a1c4b3da4320e3837b0c17ac8c74ff3b9bf5e16f95c592895227c408f0a44f09e9e2cec560df0529e1e42f137e4612302c0f104bf5d0315b34a95f7211c6eb60a67fab1df94113642ffc1b9e15c25eb2a5c698f90e466703d0990de8ab5580e0b7f663509c814e17610c044802b69ed45070cec241dbfd5fa2bab11b410d17955d53b06e463068e6b96e622ce241b7b153a963cb56c2f2d8a94135ac8efbcf8d7f16ee31df0444fd898b6d5836eaad3c120c375f7a35c28083dc698a27c95e0c0aa64cf3fdc223f7dbc343ea528355c9f493c23af8cb467927f1c711cbd53cf669725ab080ec9c46e6e64cec9af0e189c70d06703fd2102e126d95ac4132cf4c7611152351b26160030c926fbd47b8170d3f390b4e466fd4b2def12ac1800c9c0339dcb564b8826d6197454a4b99f2c900ac612257905e2e3d587a03d90e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000362e9ae96c79b8e6e57d533c3eedcbfa1e62186143375a44fedd1d32a16d82648115feb9456e9705d34ba810168d72a087cef3b39254dcaaefba7221ddc7e6da050f8521137f66d037b023d5dafe03ed87e8d3441d114e4551953bf8194cc731bb7298826f42f0dd74c9a5df1deabc9c66e258e0f4865b4ddc258371c70d0c7142798e4e5cec03e1d4c03da066d9001f0686e278aa5906fa77141617d3de59afaf46eda4f886c216129c4bef1976b34de2dcc5137123656dce3509b088f3305d17b1eb33485c06c835deb8a40b120787fbacf023e81b96b79aa8f9221db19be4c0c8e8011160f9688ab54e8198fd46e6ea15368b25982562a193cff6909dd621ec6b9602506c8ab0a70a61b6fbc6060b60c7eb9d3fb613a07f3ed7310bf35535be630777ec3bab6f9c8037ef5e9bd2d5a85a58eb05172ad814485c894534a7b822e8a41e8a20ed0c8e54925dc86d3529195d877f3ae138b272d609d42268cca1669a6d3d4f251c58bf483a8f52a4657ad94c15cee7c1f6146ad799a8e2a14036247a3b2f2ecaa09d5269a3fe482839278e32b6014741edbde3bbc49fe4d4dcf4a042dd40df4e2e999ad8c4fc58e858e083f2e2d55da3aa18fafb3fa06929396000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005a5957f79799095a634d9edf45e8b4ecac5a19f4f0e16456f584971624ec851b2a3b81a8b4fcb58354caf1fbf1b0b50fa70a1f55942d0b86918b5a6e4e93e653cd0bfce9793dccca5a55be9d5b83df377a20351c9c3cfd841a273aa5ca6bcb0fb531ab23cf443889bfa984e5a41142b5b0d06208301f09f475d0ba23c342c6c1380d60fdff566d241233a1ddf5b5fc2fa3afecc0dde2f44244f9a41642a33062927913ea8f6500203bf7e9be3dea9e7ae8bfee28dc10cfdaa67348b53abe9c09082cf686e321c5774551c2a00d5cbfa1361cf819163989b4844686f552783cc0626ddc3728528f1aec0bec33cc49c9569f7412fccfd77876f4460a85aea78f4e3aa56a97c4231530312f482fe3ad6a8653e1e93f5f4030a5ca542774ef22b9bd71fc649a570a5c4ca7bde7b40d42cfdd18fcbbe0da6b494b0516d2591e0ffd4710f585f2752c3ae08a21020d2005dcc362818942095025fc2bc5c7be445be6f98a3b1c7f4222699a21ee046e19fc3586b26da2c071774762728adb1563c1b85ae6b064e409bdb38149e9b3481fa47597e982698c3e725d0843dbcf3b17e568b2fbd4f0fb1d3889c2382f6fb75b92cd030873c2a2b35922c5a26ee16902964c300000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48401bcf7172c1a26550397ec192dc5afa3e5645189f1c41a509e77afe722df9b5252df67c2a69aca5de8602317cd11e60fca5688f94f70a1e4e0c2bf11312826dac0cde890763a812d66bf575cba72b44ee8de29e7e023d942786d4cefe9db2f54804195ae031187a3907d15a09b7f85f5758f5e6ed0132a32d6dd4f203cc8b76a31cbe5b7e8441069c811e1cf691714637b08ba0badf5807c40340891682467ac80c9ffb10ecd9d259c8dbe07db6bd3f6b5f3ead285b658302eceadad4a81fd1851abeb36fd82f9f35e7bc84c0fd0313f2599da5bc9f37813b7b33f3a679f8f7730f882b264c9bccdaee27b77b1cd85709df96636e02d3b40ed8bd19e11e19769a25fc4db235e3d418f3ca113c60991172c3ba1a4402d789cba2bf2faa6fb7ee342d08f176aa99e44d59541f3640e382426d72e037e6ac2c5ecb215a9db62e44910bde577939517be7c9ade9ef803af62193f7ba533f8acca2fc59b19c4794e98a1c8c52b5e6ab147d87331223adbad96e0218837a8a6969d10d66afc2eaa583d224497dc00ca1a2849238ef66b5abe5fff91b98d99859677e36cecdf142ba034e0533e08e751fef4a919df30d6acf39307bf54d3b3213d6ec80a1f4758e175d6b178c999083a3d0db6e2cab57656a9d6e7c3d7dc56213f77e83fdf37f92355fb2033359f9e2d4f523d9dcc782ac1badce3f9bf58eea0dfccfa665a8582c2e91c5020c68ef75aa3f978471bb9033538ef391fcdeb4fa401389ebb8dbebe65a8d100099ca66617634f462e9dd987cdeaaee0b90e36df728b289e5f36e562c1edf4c03309da28be17b8b512e30022ac2150a0ef00c97745526fcb5145afda0454c1e0e91f23dd216d448dcfbd0b983f9825247c7f358c61772e53966ab4a991f19ba04c1b67bdcec0646355ec1f0b34ee78a67ada6fae9df2db7a6b5cef1253691a126075ada40d2d119f7f2324f0e28df02da4313cb0a1b7eb1149671778d98c7ee284354b15b84096d943377e20ee029bde16a0b6f7801930828c7d1939a795f3827fbe65a120a00415dd887a1a8fc86151f5df7313a0d16b6160566ca8757b266129310a72ea00053817dca990758a0a5f784f19b4c1beeac107995878ae71df324896c740a1e02e5b4e98890991c84fbc6b593fdb02c557c87ea4e92d6031e610a5c134a099de8fd3af627a2be9b218f612316d0823df5f756856eb2c0bce0bb118374a335eca2edc919332336529e86789e5b4915284338fe88f36f36851e5a1ae63f4299e005935ff372ea9e19c4e3f7a5078bc35e1c9ed12715485835847b299e0e8db665fa249028ff7d039df0b23e15b998990795e7faee281c149859910b776f0fe994ab67e719db1ccb043b135bc188e098ebcf4276300b2c74054f4d04f1619c66ae6b13b0c49dd239babd8b3772b630c2ec2a5d950999a67896484f23b9a4e01d353e4046c097b07d8bc8a73551632c53f58d415b0c40199cc4a6f71e068a9598cbbbb46e5637eb41a7f179f31b765cbae5c9ebe03046298a2e533602cedd26b5a97a9a85a2a5f348bce4eb295d73ab8f30d803e5b7efd258ac2aed1a07fa90a8bf7f757459322d07d43434b6262e6a6559a6a44c1073ec55c177790b473c1feef612757963161d914c889946bff1bdec452a10d536a3f8474185e41ed5f2bd55a8c530f310f5cbb759d38fb22b201bea6b36f9b9ef505d48b03f2310790024df5b6988ff80e305bdf6dad0334176950e840d842446a6913172577f24d77d2e3618e62f6abfbd38eb82066610d98b4c613be07717c0cb709b1128d719101c8a655712c643e100cfcec1c6e8551242d8dc307e62a2cc0089bd6dbd841974f70751f3e78a6667a2a08ee67750b757eecbac77e92e65adb82b117f9057130290e621fb4bcb6b65715d8bf2acb8f55f35c4467dc98a67e36b741a00bc502517b9ec850d5162841e03dd7bcdf403494c1f69a24df1686a62a0d8cb50f4442465329e060f2f9279442b51827cc041388d7a6131ed1868c172816cf3e4a1e80ef137432799f5f3352330ee790aeddea14c1622d46bb8a63e73768a8fe6602e05a839fee930cf0a6fbcbeeac05babba8cfc75b2c21d99bc86aeb88b08e787e616528112c2846879692de079c27dea92472ef67c84e4f60376607a69c403a9281522f8048bd1d55691bc631df60f463faef646d2cdb9f0af215e45cc194289e30e4ae5f3f439ba1c0bcc7b76da80f2129efede4e100398d46cd1980afa0984931d0a7afea49d4f30ad2af3a2656e2a991009232e6f0357f47951984d078c34a62c0559bc6ac4651a9e1e1f4c06e16c61cca99468805e7cda7d994cc0d97a4c2e2a90a7e3cd0880a2596986c9730a57567f62cc6a628d62c084b6c5b861421bef06fcbff73743a6a2df64093837b2cef1da96c051e130bc04e2c2e2c0392f61712178f3562cc26dca4269f6cc9a50f90ff2909bfdc15f772858d411bcc5edb1e6260c4d016d90ed23a3e2d4dc66996c0ade87cb8d578cfcad8778eeb730b4abdb202b85571c0e0c3ad60a1184a1f5c7d5751b2d66a0537729dedc09f3cf3e28e921a3a4658e706da14b959ae837671eb6d37bc84226ab113061dbee89264509a01deb2f55b3cea34f741ca6170b665992f218683ca1c199543ebd428af9246e651676a9b3552ce48e4bd6ba6048d581feeefc19bf0c6bc91518db0062129a14cc0b4ae9145126fb9d2610d689c960c6b0bf6577f7e191d2429cc9fd5997e6c74004a8a17bfbe6df06b1192678eb8dd24f99ea162008d4521d3945d0a7ee28d79b27281a5426140801d20720e3b9de661ec347f48d6e8defa70b9cc47e49de153f10fca04473188cd42080dc71532121f14d7cfe09f581401859e8c28612c44c3b401a25b872eed8c6a976b3bd10486c16f3ad76d6d6a6ae6fd1c8a4626954ca751c2c95047d2fab4a3432cb2264a2d7e2e10f149fe3df912e1984b349543236e9b811bfd11b385f3c7b48fd7279d868974a5ae0d644556edaa5ea141ef438713461262a3171f2e038e47523d5d39eb5fd3626ebf78c50afd5b15cda8b7074a1980e163cf0f4460c0f1441fa838f2ae9478bf30d5a156d6100efd2c942b3a5d03adb207f1c5611dc4daa966b25d560226e6f8faf864f4c5c46ed811ab2f5aa659dfc08b11b47cd97be1439a3630c467778eb0753916649fb4614848cdab995cb3f592f8168b9d31afa16a084d58da3bcb71e26da634150c863a73e4f670696bc93190d0203a809d401585ce57f5b273ba476ee6e822fad5efce5159f9784a36d7b090ca4bce6c12f5217431db34e9957b7487e30c53852baabadfc4807a016b7f6da1e071d66fd0f2a54abcd96fd5debae2dc0da1a1b236874e1f2d7bd3cb09b219c26bd740d34ad052a0033ba3b82127cc4a30ff62cf2af7b669dfcb4cb9d9b18b41e06abc64fcb9ac7bae86cbf063b09cbe2d941775cd2329cfda8066f12ba42bc0c825eebcad169dc3a2de2478de04c7ad5d2eb69aba3167a6a5fa51a766bd32f211f235e8a79a054bf3bd4eaae709ba4100d0bb5e926faafba4bb02c2a6f413a07a55e953544fba7d9cdf292cd8d6e2371d48ce05583a943682108f3177c0c362f6a162d8dcc5e8819251c31e4a3122ea3242bd5b457631e4abf57f1e362a625095c7ab29030837c8bf22fa990cb05656f19143037ccdf3b5540bc3f64af75591dd89cdbd023fb789fcf0998de7b449c76bf1a62ed150d21004db0fbeda595831f90c2d038383c4e9a5ac285e97f220b0df6d313a2d4d781649e5293a8e770990e77fb83e52e14e18534251b5cba5fee3ee08899681c4965bde9fd6d4c6217811993f52b2e6d8ea92e0b2ce7dcc4b1173bdc38647bc88d166a70660ff30f99391ffe19b5478024f0342e8bb2fbd89bc92aac86cdd73e7adf578e5055f50050d9158b2afc56382266ff8865d530ec7087afccf179ef92c85ac9a3e3337c149a802fff5adc6458fdac8e3d2f2b6e901ee1933f796cea5f3139d0c91673a121208a02172f05e31af1909f18249c446cb205c3e19ad90e60e8f467a98956e38bca1f106ec0a32189c524d40bd548660d15476711c98e11cd3f224a55799887e0a625283a52b4556554ef9ab1016281dc511f91d93bb15b4e12c16efb19f19e13d4b30dfc31ff0a2e2bb76aab9da740dd1d26cedff030b5d6f614d1e091d2a2e6fdbb23b7e3706a9d2ef9a41791ffe5707f1d1ba15e5034e221f842518aca58b06f8503402faaaebd973afe4236eb8d9564e9f580bc2a9e56263c6a6c271f01b95f6a1116463efa129b653d96d9e045738a74ce8e05c5de0bfae98d019cce74faef7010dc1e15572b4c9f2d0cf041bbbe6df99819dd0a0011024dcaebec1f63c54fa401600d881509bf7114d36aece62a8c397368f107f60f210e79ce208396bb344d084833a09a8e39378320a4e238ac4cc422da596fb51ed09f18f9d3779384dc3a1df42c929b8ab1e9382c18e5a7dbd652c13af9c211137a704f8c2eda2038426f132c0eb3c204ce34442c006c4e8c79f86fd0e9c65a629ce06f3450a49f1a83d0214ca249e5e2fc912788ebaf63c10369ded926aa20ec36c1ccf0e5f49926d71012b36cc793ab385b64635b69ac99c9c6ebdd02e9adeb19ec62c83efbe932b7152974eed4eb103fe60fde0f5868b945c7fe3b46b28673c4d26fe95327010b7ff70efbaa5be19a3f191cd52115e5cc689ec8516b674473a397d54010863e9c4607089879f661049ca1ea1e39e007cb87ec636c71cd41eaa85254269d1ea96ba28c26a7ffd3696b7b65fbd24cf25f2beef03ea97c9868ea487ab4497eb18fbae9600b8ef942291d3ed1e308ced020fa7c6d5b95479677282236261a9bca2a86b48122e15c333d122e9f2ffce15d1cedd3a3e271fc4831b7c956c6abfc62fdddb7c306ff1a475a6919641c9db86fa2474174038ac316674969fd165a011015b0c29212e664c4887a76e3471b79d94571945a86fa1e62666f8fe51943d01eb9eeb6b11c079d33bb11e0ed22430df211b2edba14d5deca7abdb28c7c9461d116aec2002c1ea56fe91eb42e30694d405302eab93828be1e574368b2c434da39e0b7eca81765452979650321a5b753af934c55d0911c6dc0eceadb2b93463eb69b97dd9c11c2dcfc433e03a8d8692460ab5284d63572c40d8996fdfc3811244d58ac678c041810ac6cf2f7b32ed134baacc0fbee81737ec491a00c2bcf24c6baa21b904d2f8fe9fa81efaf2cc2c19323c3eca9e138fead56e9e7b26849ab933a52ca740c1571abdd95d15971a48aef3729d542d5d45240e47ba55490ca1bd3c5aefe2415191571c7f349cc86c8180024d5b3f4f6350788f5a45d7f8151deab578c64459722d812193985491112fad72e3b87f1a4e90010a576047c4f8f6c4dc85a93e77526d7428cbb6e675435a2095b8384a677bd2a8c9eaaa2b877b3866655e61ad8491008b73c391e1959bb8c61b00db1593f7f4b62565fcfce54578663a4a1f0d77e0d8f4ff6ae4ff798ed724ec5bdada2a15ce2677976c9972b097f2cfb38fbda2b1ec221e2df60139e8254032b3e843385ed83633da984f4bb1e8aee809879c230208d67128c68e78d85f242ce373e57be736893c95ccd77a8d713285e99465cda2e5a2eb98ded5247745d95483f81bf6f6d8a8786995960b9363516a3033bd21d100780fc3f4dcb2ae0417526576fccb5b9a380664a6afa2ec8df32c5269b7deb1f6744ed5b201d4ba68c2a9d60f6c3571b03e831ea31dff1ec25bc0a0a38a8d4003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000003a118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000003a0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000003a0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000003a0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000003a29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000003a141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000003a25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000003a12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000003a2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000003a189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000003a1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000003a05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000003a05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000003a14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000003a03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000003a2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000003a1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000003a1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000003a14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000003a2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000003a305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000003a280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000003a223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000003a17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000003a08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000003a2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000003a0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000003a0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000003a172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000003a0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000003a05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000003a137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000003a2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000003a2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000003a2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000003a18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000003a0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000003a204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000003a0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000003a1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000003a28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000003a1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000003a21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000003a0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000003a0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000003a107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000003a2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000003a09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000003a24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000003a03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000003a1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000003a205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000003a25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000003a283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000003a21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000003a094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000003a0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000003a1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000003a2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000003a1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000003a1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000003a304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001938f79e9c8ce3ca7f0c1ca6496d08d935cb8adec448b8d133671020127a5d2e4fcaef2f8560a90cd90098fea8691ec727f975b071e5349bd6b45d67c93f8846973123c3fa71b74e0abc9e59c1af06e500a6c06f9fa8e48351340baeecc0a25e3bca018652292e6dd78231c5a9fb8cc9ea02ed0c06a727f172ab0477859fb40d5966da49014442771c9a9e117d0031fc6729941027832eae0dcc1e5a6485226d069908172ccef0e8d54d8209a34d08d740e80e1f3925becc2e2d48a1aaf4f6ce7b479c2a4ac19ebd09a1ba31aafc707aafad0c18cf23ddf0070f98d82c6ffedef43c1af800f1c71fe197ed26f60dc777c88927469ed797bac491efb168748685d89f9c76564f9b15a8e624fa0bb821ce30bb438ac2d36ea876dcf3576b514767ca6213c595c8d5d4ecb8efa7909e69c82e002472deef706fd300e12969e5cc36ea12817777c092c2af69e8895c35bf45dfec2f66b9dd066c908c5bd704bd020452df59627579995419a12a2a0b41f787317fa9048dd2e005e3301eef6f20cb706ed0729871c92fe8d9150a75e856144abb730ec09e3558caf4c7d2a49818dad86a4477e42332a8e63f616468c32b5a07ac9177bce07551ce6b676d0b837da28c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012e50682f1c833a2298e580976a5c364099ba85d9a522b619b79abe2691bbfe9dba6da20c8723c4110e2953d3d6072120f40a784055ff978a02856ea53f1911659e89506349e4a8997289123acdcb92fcf9e85be18a713314821ede61d9a1f954a9d210ba6107d57a482847ad415cd0e313b892783a1e985d35f840c93ae2f4de510b3d27e27ea6a7f7ea82126b8d2aef4ca21435dbf02f19460133e146af1d72c3967d1cf9b48513f7d5eea9fcb8ad361a6dfe00510a142cd5e41e073de60926701397bb688eb6a7f6c14260318397960028b738a35a184625444ca33e73fbc050838b2dbddd68d21e1adfd83fca6a529fa85de05f8987482a7f8a374de63642a67753c8d9198e57b362977d7370b9512e9010dfbe69d9479147cb743c975942750c7c709f63fd33b70ab6f4dd9eeeb5c9b79be14b5335c9c6590c082add337eb9c713940d0cf7fb8e5273e4ea32c190227adf80a0a5258901749be1f6013f5a7fabe969c56a791cfaa05eb51f85196243e08625ac0231d58f48545310d13484846f837e2e8e46b0f07eacbc2b6c8133cc6f2c2d62ebc4514f4fe710a5f0463cb134e5f1b0c3b8a6977c99f36e70e73614dee8e094774e1a8ffeb2edf66c390000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac83ed6724fb349f266adab3c1a67269bc0237c88f32fa69acf0a40bdd4438c6fc36ddf1a2580de0aed9cd10161942fcde37b28ca3c50e78e13687a43b200d36235352150a3aa3bf7b1b37b0f1b7ff940bf03a4bf8825b792aae00c3b993e2e789c53a6ee5033a01d6faa913c956fd550b8635d8c1e38904174bc1c721998b23514d77ce00b49c54053c4480519b85ad640776b2ce5d11b6701f8846723cf14870aed7b26e5c64a2e0a84135e3fa3deb9a151f8469cf6266a40a5ac3d8d16339395aa80275d9dc865ce9e6fada8a9abc3ab012f1cce490a7d1ccb6bca2fe53188ca86a675f881c4de00b3dd1c11c968d6a1585a03c303c0455a4fb8a681822a82526abdf8b89f8d93b12228ceb5fa1df6456dd9259dbce6a8eb343b4ea30ef7579f11926a0a4654b12edf87882d1af2eee40a0d50932ecf0e2778f0dd30965181fa3508d0ebf28d826641b9ea2f958ff08f33c1bbf8f3c7e3459b92b35e1e7766cc30a9fb990b468d4c5152647d4cf3669096ff9d990479bdb165071149eb240296e578ddde684f13e8bc2d2c410426b8cbf042551f5a82d04ddbfbedcacfd6eff1b6e6b3caa6c0b26257af78431d46531cb3b44dedccaf8a21e6b985db4e75f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ff7bc0fbe1a2ba52158d2196d4ab28c755791e2c7af31d762fff5a80adb202ff7f33e7b30682baa0d2585b13b79a027545675393f2996cf830fb3ea48b31223cd26325b77a8db341d31bd63ee6a46a0c5a3ab37bde0c0e183d9f28b6139f8ed04ca1010c1443ed7c53db06f09a6b199afaefd8e727999413bba48b172de5cf8ba9e2e22c20476e4a45852599815eaa649ea59a7709946c1d9d5e2a8f4bdafcc3a103630f31e3c6add45a8b912fcf1d032debb2033b9d6b8ea83ef79195bfba7c8ed401621fb04c07fe575f0c8faf8bff45d27c7cc461046ab56175dfcc4dcd3a60a1f1f1774565e77b0abc78c136e2f32d2a5887b95360d1e135ed31c473c4901a7801f9c52736df942843fd3bd78168f358e105808dcadd7e514b3cbfb1567370a253de1a8b8d44f29b5813323533d5e222ee8cc69731858f2b408b5500da9537e209408ea8a026853869f8dfee071e6157e44d2464afb946c4d4f0eb047bf06e01acd250d645de4203f86ff80e075821a2494354c315eae68d45eba315d9951cbb6428111fc8e3e781527b7f7c3fb59a1cb129f2559bd5ee8fc12942e8f0cc0135e188d3d6492962f27700a3ee4a9176ddd799709612c1b2ddc6d495bfc60000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ad792ef235ca385876daac46a3db523a840fa8959c47bfab487911e869262d27a9f59f2b8c23c15de1df98c2e061e36ccb54f737f264c89b157b3ff3d31a0bd243ace4ffd1ef4ce22f1f60462bdb1e7c79731c728908875a699cb3e773539cc58cf3df87d193ab89750b2025d803617700879744d92feb3fecb3f81b22cebb7ff98b0664155a984df6aa2f58a23da6d648ed8791e4f570ef8eca54f07165870a401e54cfe972111cc3e9d70ee4f0a95a00349d4c153a33dead732ff8df7e678893b7cfc97be23e28479db4710ee57550715d1ecaba7f9964ba921ed38fc98ff2d95a196a59edd1c6dde8d583a33309b16107eb9601c85f5f8a7c9642f290c4ea27247f686c3e89a654610dbe371cae82c952fde106636fb10555a4e4f15417f2f25c0ce9b50127f56f8fd43e5d545d935c64e1c8166a5d820cd37a4db8432ab30c16b8a54b1da9bfbc082320159198473b3e9d034580ad42043537f092b41bd96da58cfcb6d072948829b814c51f9541ed5c31c44a29c5b8b38aff0506013a9bfb2b4c4063550e74fff8f3579903551c5dce10dadd99339efb888954d885edc5fd81c6b31f29fee23b5907782296194d2f003b19662bb4474302b5b346bd5800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c1859f4d0cb3616c0589480f9d0d5013176751c7fedf0b2fdd8efd55ad518df66ced39eb4f30f1a7d709b344221ad34f0823f6402500130a7b560aa61ee9a9bede24492fe8568f5033f60226283562d54cd2bf25efe6575fa4a7c8f7ded2baeb1bf7c6e3287d8bebfb52926d9d5bc96f8d349f44546447299d6232a8a74f60e8f4a4ef43d33b33f8f2454758ffdae2ca52af8a8a79cc0fa615f8286a4a59a9610d5469d1a420ea80ffb6b54e0e93c64df0cf96c726e98b23c2f3eea8c36c97786911640f0cc1f250202ab5f5c9ff14857dbc7c0eb77b8035fc7733bc9c476a022ffa33ec6801703d4db1e6ab5be53a88c6d80f9dad3c431317e26efd6102c28f7d9d8f9c65416085d04eb7ffea1c989c4d19b6dd137dbbec1ae2d15d5894abce9eb80a7b494d89df61aaff78216f2f03b6bfb5c66e03bbbf9f588294d392fda99929604b5ca3f38afed92782a7dd354443d79c1a6835e7d429e003bd7053b1d58061ee1fda5ce21576a9f2a35a71671a757f176017945757ef68c3fec68e4941586c99a04823be864f4ebb9ff0adc9cda003d8f4185556b51bb3ed8f5f9c086d5d117e01b4e1f73a1a766f098253ce67e45eb556f8f19caaea5de95ad9c0ba800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa38f239624120c153bcbaab3ed25f4d02f5d8d3ff1885b66909f8ee95883f83a67d256ee41f17e3cb5cc1ce6ea7111eef8dd01718fb28dca1cb7d801780b23ca2b7e3b40569bea5822ca36ce13fcc27bdb25fb86c096ef0f46fc1c64d589e1a3522ee517b68773ae6a9aae78aed5817f4636cbf45e34e383c38a7d995962bffb55f486a2d5ad9f4d63ecc418061d70efd5a5a218c6735e106b8294533ea24bc32b9a234446d6186a7a737751425247491f4445243b712f72b993c27eb9152dfc5912a0756af860bc2a3b7f6b5b38d76588e2b77046d383bc27e2475fcf20b2c075c642502d33e0a130d2b8ea60fb1b63cfc74929aea0c4d732aea03988bcd2fffdfb3f7a3aaea9aaa6044c0eee3f4e1da5cb55d51acf53b2964616ed7c6e33e38b0f3cd9af14030bcfd3046b4c97a4449c0e75faccd20740bd0f7d3da0dab6a720aef248bec28905d2b7d39a85d7d66ed77664adaabe55291aae054967ec4b242b75ab6d74bb11415d1fdc75a09ed3e152e3e790fbd52232515d20509f5895e8985b2b483efbe3eafb0485c4e939fb4565eab781f8935b2ff06832f2351f6ffed92fbd6dd83c63a4e10b654baf18315193f6d2118c3e049acae40353ba2d150000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adf2960687eb75fd8f9f00e89e6251b17559adafd45fd4e9cd38d8f0eae1daa1f1eb8a3223c858e0ca0a15652c8d6f4a588c4163f16b7e825039c0b2f732c79e1cdab31871aadc1c359b875891322b44c01e562db46c5efb492df96ca4fe99f92a1cd3bd35d574576245985c786eddf1b28ffd7b96de780f8ee38e47b2a8b7903b5bdfc9b681b1132fd725477ecb6598fc592742eb93c5269b7b968fa95e0c5ded653a6a893ef05ba546d84c298e840b32b565ec22868430b04d5ee3b52b06b1c63d7f009f60995a67d90633ed54d7088848a447a81661a0322068712e328fbd02a7539b0e6ea4b463fa261b0711f7ec8f84f066811e6f8a485e1dfa00c71fe883fc172bc6557d6118906b38399b00d0cc471ed582ba26010e027a8303bde27ee7b743d9d472aee14df5a397bbb1af857804bdde22af3efccf977d6c8dbc12867a7e7848849b2e31102a0bcfdfc564c2ca6f7dbc1984e5ca39c8ec3ea58edd88b21365e83980e4ca5e3628145a97ff1d8963edf595c397f83e27446c509341c72968fe42e5009575736e3bdb332be5d8f4b267813ed8721c65e934f6ece198649bf416ed8a74d56a10c013687c3fc4e163730982b5c8e2a3fc9a3788a020224300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e79945b04f0d10aa84e29f9a6b5b9bcaaf56a9f91344bc338df73a715cfa538000ef59079f533964d451898fb340b0f54bb138d40484c2539624f1e78973992ba9816fc04fb2f935f45e3386699c42535b9ef252fd525298a12159534fc59a9db3c3e1fe51c85df5cd21a226e2955e38f705b235eb3ca44ef6e0fb7775185e57419762b3b9db5d12ca97cc42f5cb11e458b8f37ae7da8610918ce37f89587d170ab69c1fcedd6cf2c33898edc86b1a5be3e5a749ecfc1677c96f7598cfb3769f7c452da76e2f7475d36948444a57e18a17cae97655e1609e4d30d86930fa094075228ec7d18cde514e115cec430b8bc02eaf8bef5e90b69bfed965c05445ec1517e40f09a9e816eef3c88ed6994799be5b60081b57edf3d01aa1b8219ba535a6120adb3a304ad72ac8338dd721c5adb048868d97623ea2226222d1ab9f3cb1f1f2ce3abee801f00466a1f567732d7564a5e1c3ba389c70eb56ddd0f162eead8d6de2a6eeb42c501096c9119ea0a44c186c3ca13205fc7f93d436a6844e997934c030c6037478474056440c3d4f714570f558cac8207a50f1c28da898288370725716a37d21ed77febf467ae28221ac6213f94d754aecf4c33083ce7f55c67750000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000889aaee3974f7b3ebb11e09841f0097b5e254c90fd34ccc3201064d8715b8ac9f4ad6c9e926cb60eb6abdb4b5289f5bf189193a7189c0dbbef4b19a558e1ed96e7b8b95060e53aa646b452b0ad9d85c9f7dadf0243c5d77e18d1300ae9ac65c1a4586d7ac288347280dd7ec9876a1b6fae1bb0d68de359e2e0eec10c92d162852b2faf1a7ab4e23c9aaa82aef0131671fb4078ff9a9ecd81b37854712ae11e9a1a97cda05b1d03c04173ac9c40cc558d140bc9de7b8ae643a820d5ec81a4bef80b9a5a140354d3bc242dbf52708429775a54e5d268a64ab0921a225180e8b1956b7e583002634df61c6504fe412b637181afa31684c96fdbf4af48407154754733cce5d062ebf64e5119c49deaf09858cfe22b3460cf0634d41c0365ac51f6f0d11ed048559929235722fff67a3f32b024cceb0e2b8d1d85af53419510af9500d5e4b104479606ceef1c49e37833e743561619698da68babd3b634581bffa7b3c4ca5ab6eb0f6a4d9030269311863fa84238339197b150aff91c346faa86dd926678cf5357642d74c7fdaf266da23917a811fca36b96d73cc56744a0ab9328f8366283fa639fc688ab5f746065cfd283c17e64dbed9076077d6181f815b38bd90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a230ab848a94e5edac9c5fee87f4bd492f65845ceeb4adea975934914f5b97920433ae9ec1766a1314ba15d0c27365fe1768aac7f8fe79bef2c0d676409d1788b16be4820a4de8cd6e625a3b8874245adbd4d7d9ed6e294af0a28e0111859b24a6b659150134059e4e8ee00ac5e22278375180727fed2df119b7e71a99c83a82b8aca58d861d5730fdaa087acc22f5ee2e30517433c41fc307b37850554337f4bcc8d43655682280cd0018e6b3836441957dbfe1344643d866f4b3b06ae76160b5378cedb3b7756db7a3c4b79bffb5d117597026ea4adcbdde0c6f8702cf35b1f726f03f5aa263d52a5230a5a14d6269c2955919bb6540187e89fd38593518ac48c9dc07666d2bf0f1f444ca1899488b3895f8158d48c19f5c92fd1bb64b54d405eea85205f918f64882ff20f1b255ce1e3cbe4c0e1db4254ff606296de2db64bd6f4a42556eabd383e5fc0fd3e4d45eede3eeae15125cbb8ac646a95c39adf9cd29aa1092d7b0da58681f4b8fcc4091f1b66324eb31409dfdcb14018cd5c941037ec32f64af657ef67954431557be2211a32985bbb1173cdbae695100d598558c1cef361fe52389a0c9609cf9e58a97d35ca776e33add6949bfd9e38ffbda4c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098943fac819edf38ee4e4d9e83c5aabae2ed64a29d4695d82fd04a90bea6cd3b5853de47ad04a7d00b9de3f97eca9a79b01ebae02af9eff1e2e0d2dc97cab90f302a5cef5b38b7e79006a701ad9eb5af68feb87e46cd995f55541ee55bd51dff173e8b30cf2e55b5ff3e1312a7cdfc87063050834f295da9c885d7bcf9f948efae98056f58707823a835b4b05b07ffd2a665d4fe19ee34f668134cbdfc1b2fcd7389d693a2630edbd0b4aa0fee294452758b650b41ca15ebaeb3dbe58518cf8b6a31978a4b71b11d2471d17cc92a414fcb2113988947253e8300e3ca981c3e8c2b0ffe62708f0548c1c6e748a438c2bdb46a9ffbaec57cb9c08430c82699850a16b30c98e008c61b03262aa31d6db2953d98ff9d2b8257a2ef114f0a3bd1acb09ae2e579e5b135087a947568acb49b40cea2bd6baf717ff69ea26d79cec70ac730c6567e6b0539e5a77a2542004d39d1ec5e82a518499e981fa2b3dc561a8615352ddc77c33dbf90df076e9224d0f253f85cad1db8acd537b8a60c7a196d089256835783f470ae31ec5ad38a8d701310d02f780176a43807d6c82cd2ea893180617168916799cc2f0f9353e57b78e9d4148865f5fe479ff2aa97502f762e07f300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a7c5647b6750200f9f31d7e4cadaeab12857461ee6f7eb0552e238686ff97c87acb254ded361c033ddb0c090a472365de45d4e477e08273f6f50d55a55e545d63a9fbfc5893e41be759e5be5a666bdbe3c80956334e4775674c163ba7b24bc2239bd27a6db0a8bf645c3881cff94c3415e0c6c8e958e78345b6f6986af65cce659f9f004171e691a298531b1841a87f9e506ce121e7cc4d3a0e2c1f2155bb4ea13caf6b1f32bb754eec6d414cb444556f6829aecde29d63f71643004605f7df75d1702dc9142631533f4cf747c7adee3c1808f8b3a345fea062ed17b20cffd056a2163c6db7ac788862800a3d5f05de28b50b226ef60d1f0d92103ef99b60aebc75de9bed04502db2499c40c344b6e71b212c3c8874d713d0606227a683c6fbf552d9a9bb73b82d7e02ae565bac411997758f9c15c0578b974143e28f59fcf45122f37975bb4eb0bbd9b5a697e2c6f258b04684fed089737d80568efc88e078f287458c771784b3e9d92fb1401f7262e14d21f97faf87fbd782aa9f6e07cfc8c1e73d38f18fb85c3214e1fce1c58aaee0173749a5be78bc31f6aeb67cd021868b53b3c420a47de345c94725d4dd36e84b11d19927b01df77b351d437174d0bc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a72f056fcc1bbc8e72e4aeb0842662dea08aa835da0d0b054b1cdb15b635bc93c239f2387fde660da785cce6f6fe3ec3abf12edc0f86c0e4d9270aa0553f8cadaf46f5c8bccb0ff213f36f9b5af4002dc6cd2bd4e4f981a79eac8b1add8405beff695c15ba293e2507a48020bb96378317f26bc669ec9d6f4a6acd99bdaea00c6788c50d9bfc38416ddbac241b4c02a53079e5f97994819d84d349f991e1f939abe40ae2b99d31b755ba95fdc9a7f5a96f68036b88802803341dbfe6f39b2fe61d46822cac06a634aae8aa52192141d00385b33963f58e7d8cf99978df358961b22ffcb60278c9102a6f10c076baa30e3fe7ab829c6fde92f3fd9659f1039ed6d990ce7e584fda59c5b8dbdd5e5aac25d82763284acac7fd329b5645017b2164a1e42417b8f9f80cbe9e33901f361b3f087ee5954df35abc9fbdd767a4afe63217e74864182ac9e17b42c9168a96041bfb619d8694161190fcf7062e5a68722dab2b81abdc2fdadf8ebef1896d5ea59a3a81d97f962ed4fe1b1eea37e326ca5f656768e7517eb23a8e845ed1c1523f526ca5b0d2ab09e9ff876cd627e5c310663f275cd94a83092f823e3bbaa3835b812c4d54f387ca695c60158985aa5d11210000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000abc604747da2cf35c92071dc0db3c32c626b8d7f665ed331a82f02a4ca80666e71bdafd2f449ac853a95706ddcc0801eae30badf279af0e08bced04b97fbdec86954de5ca99fee696bb6f49b90238a329079960d0419b6b4c68054650544817c6ffcbee20e1831894b46dbf7160ba66ee3fe1855437d9968e369d3b4c1459b3981c8c2f3992388147f9438b39598604f7a4b9664341dab504a1d21da90433c5434a7614b9706a61606e604dfda78d3d643e4c19970ca4c190972211780ed2427ab9893bfc484a9eab180a5bf109b1f38f8d10629dbe3132bb6ef0187409d8e511ad1d5027c6686db864b04adf1d34e41f45e8dfaa48a3ce9b7d4c84627aff49e22d5df2ac067567a30d935ba2431d82b310bf006c6260fa7ba5d6d6b230f5f8cd6b983e06f3a2a5a4791b7056f1982c9d3ab5b85891f252ebd3d794853c47677c32a24ccdfa22d914e25ea8cb53fd45c3d77131217880833aa35217a59126fd0b9a6b181491be450f153afe04b76ddd22fb51d624998cbe28af98921867f80d177c36a4d2284705456c769445cf16c140c23ec90cb541a0e9d782e73cab0c0186bee19e8ad99b28f99b3af5224f341e88eff52a37c5677ec092712458c64be5200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cc4b401cbf07dfefc3c43266860ad4f63cdd3fec059a2a1e4d5fdc1f91789f29912ce5757f0cac2f429fb4bce25a3acd49c71a5c6605aadd2d38e057bc2236cc4e44fe9139b8ec323ad9bca7fa98bb933a450450408ac16e9d2ffe291e4e4c64beab99823c05037d70790dc6264dd2780815227ce86e6d0f40754b608709914cd38e02ef3eca5c32c607f072599c2e5e7749e2c1308cb63e6fa34d7e76f3d67df48d2c15119712e6634e4dea515ba7c497632100cb8f5975f28b6717719321604481f9a24837c984862b86385bc41210376dbb859c6ef32274984a28329e0e637db7cc25186876d55006128d2c784a5c602aeea416e3affb2177737862afb33661f5563840d8c09cab3c92fcad93903c52bc73fa1ffdc8039b932b06d66350fd5ce4ff632a959dfa44099c97ba8162fa726b57fee776037f599767b95d20579fe9e3345008b5a203570de89ee18c2c54140900ff9bd4459e5d0a04a2bd8298e0776f962e31809140ea68d45e16f0a04bcc6be828e1518caf7f23c370d6007fa48a20183477844f6ef621eac6dd3b98a9c1e6333bdaecd00783e4ed58ae8bc9714e2e67f6da46a973666382087b9775d1412b32a974b9f68feabb9256beeeece00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d6c0f812975ec6f669a97bfbb2b0b56ca38001e9b5df272716d4e01d07548d585948aea54102354517a09b5e8467c407a6100e5dee25119dd2d9f83289430a0d83aabbebfc2fc55f8fddf694052eb690391656c19f88eef362d8bc310305adfe598e3fe30a45ae703075bd7d73e6852c8fddaa0f26d339730d4a086c3ea1654f23e16644cf8511dcd094040f4dc677df6d17c7b18f91fc00545baeaba3b5fb531cb88f8e1ef77dd3894761bde59898be0243f9d4d152b691899a68a2deeb340a2716650d45343ee2a5fd9d578f7e987dfe81aded896aeb9eac383d85e0c82927eba3f36a6e5e816196c9616fbb806ec08ca8d3a232b99b46bf001165bee08ccb3b70902add4370bc6dae6ac2d13c776a9e4ea52e3b6bb0e76bf69ddb45a9f2503bbc388b421c99377b581c39247d058d482913fe6e22e0de44db78a96e227f4ce69ae4d5315b4547f1fb8dc521c6955a3652827441a5a7dc7af0275948df44a6d8a4bc7f805e669a04fe7fe8f32109b5c2cceaa624e48c281c729030824f9995681386dc215ba2c63431a1e37d5578cdb88732120e297d1d9446d73d032bbb97cd901279d80f31503e9e5a4c3eff6ec193eb07ecd211cc038d28f46231cf3b50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000986dbdc2d0c01c3f464cac80a1eb165cb67f6c0c9a5c6f0fe7080d737714f8aa19eebadaadf3fc78fa001383164dae41ca53d90daee59d8500f24e9048ef476e6d2873a5a753a85cb4f07380d36aaed4b9dec83f7b29d94ae2c9de3d8aeba786b0d4791ac0f6c0764d86762fef9da6f7e258d8c77e1cd8ce8e7d905f365631ca5f9de928a49a9a41940534e7a2952e0655655c9d49fa5b4395c6f1c7b902fb75cbd3a00cf6981e09751bb215b63b18ccad2784c0782d31607c2e91582ae8fd4149346a4e7959d941998fa09985d3335d57beee02fb1fc6766f611f3dacd52a2759f551105963eee28b53033b598d1b951329a98167369f35aee109d2d6018eafab667f0454eb569cf108fdc4dcee8909d0e51345aeeea6dc68e476bb9a01d7f3a1558e1cc664040a87a0ede50749d25bb49786bf61d7788c1a83ed1340be1fdf45e605989eb228e5b1422bf21994b14f3551149c53706c1cc9bb82e316240c0318a34dcc4750b36863653c5d8493eacfe3eb955462dba281625aad2f5d7539732f16c048b01d56e0049e467ec2b836cebb0c92f07a4743006afe603add36fc43efe0fa244c3fbfcac47de32f2fb52ddd0bcc1435a934fc007620d84669be1ba1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007472a595be89ce5e0267e7d41919602e09aafc39ecd029221d46eca85df4aff08e1f7caceb27dc3459a5863b9b60adfd51bb161f6be3e41badf362300b02cf1bc0269a7f7fb980838c53120d1b7fe79915ff98050435256645e9ca9c5554b4c63cd6afe644d65d32f6fa7be7cfa753a1ad7a288fda207fec9b19f580f0ff10f60875bb14a7984575af6446b7be450966a3698aa684a1885a1e349e14900205ad99bc6445cee15b38c29c4ed39cc99e52551a7df8cb4fdcfe4f0e226e8ea62d1e6ecb43b8caa5b6bb04728475d50172f6e59b40674eab8554f5977c1a5ba0d5f600da925b102dce19d1438a87910d8f6f4649c7ae07274688bb9a0b6f855ee4393959f65773a6e6e2974e4f89eafe8fb15f539b9db93a30115a66435a373745d90de4f805204e2ba3167b9e15ebee5fc4d062b42d08fd83aa436285718289bb8209b2ac966f595f1796911ee108fdba678a1f5ce5dd1b6d33b0f7bc2423bb578d4fabdc6f78fca48c3493bb42acff6d49e6c95d3424cd0d5652d639514b3c49d4e4855c168fd0707c304479d975f8558bb7cdcfe627d3640ae8170d11c126d73947f2a9e04d0c71fc81c17bc8b78b4431b5b0d1aa9190dd798b3f8edf6e6e752000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f068d85fbcd52f34b0a45e904fc31ce6bb594199bd31f4a38215b8f22114b635cc0b5027c0203e4d296e38d184c002cfdac485629978db6915cb0b73de2752608aa556d3a02f63696039e63523538e57cf33dd9dc12d381cb4f0c27c3f5507232014bdad3245f45d62d190e9ebb0103800d603cee34e4598b5da3e7029bd165e54f3d22c7333675a01dd854d5823f7e3cb2b68f21f1352eb8d860b876b509c172e946639f7dd7295497100af8331cdbf764a761c0f60c0043ad5c2af4f13fb3c0f2ad52d3c98d1f97ae2e3e6b4dbbdbac31b4156efb80060c7e4ef47c40bb326947d8c879e40cf596fa6667c29090e892b5b7a6c2b8129d888ce355daaf1a3142b273eeab681e2a126ce5297de37cf95d278b8847d5933b920f65d38e161b33f248dc36114281839bdcad6bdc14ee29fb796f3dc4a248e6e94431b5cd8f418cec235be00926d0df2778441d82e629fedf6473a9772049ff76218a25ec80c31e3e787e871aaa2c8b38a6d0f6c27f2671744ed301951c4cf2c5693741dc0184a0d5026184de03c8972892bb59396223faea6d4c43a1c47a61ee67f1b440ca4257c8a54d0ebf8e2e3387e29b95bfa3a3be28eb062f18f765ed1b95bfa9c79bba6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093b1e339c0c517b2796f683a3e1cbcb1b7fb988d76480caa34deebaac6cc5b4c6bcacfd9dbfe607bfca2fb6a2fd5b117d653713205d48568c672ab169d66c099578e4a8ae7ac0e6395593dca63e578934b86e8da7c7c11d5b528dabdc010d65da460d09c5970756e5cb133a798c308530d998aec6f2e1c0147d613c15757609c2aed9cc46c599a33a2e90d6e9b4b19eb3de52195833b503cf94e6af36c8098352dc6451c242d767430cea26c22593f7186808d116f4de44acb1ff8d317a9ba968feff4d11e61bb526c2539835750005d09764c6860b2af18c4408e0afbedd99b309f3fcb7ca33be61facd41959e62a3fb5fbbc5ee938abdce858c1b36ce1414bfa765825d95fb5ecf1bb4b8d6671ee1ac4845256a2dd9df2c95edf9a9cc4e1f1e68914964656f9b2011dd59db2e65fe86df8372dcc5251714bc2f397a956ac57fc266d4d75deed3cf3ef7d28469f9c4cd1ef113624f53832a0cceda031e8e37f0c451c08e37a2200e1bd2dba759a72c95a8bf9f293cfbac0f91f8e7bf483fb4b1c44d894b01d0386e08fc193d4dafc31a919f301d6857c1a613aa1f43d3f746aa9c9c6df4dd6fda32e6786b1fdbbcf0d3f8b64bbfdf02cc727cb6c1f3f46b66a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d9b9b00d1c191cff2a15e491ffcc0c23d46be0d3470d3c36016e56d6bc71c3aa8092cd3b2bf73511d043bc36f3d40cdc913739c1dc4f87122fdc45f58e1a278df3d4f94c8a34386e52e0839d992ddc4794948f498c2518147ce3e6e559b809433ca38ec8c27e4aaeb456d42f1d7a2a07de202feea1c121dee70c665c03cb394148747f1d096a6fb008470f201b1174558bafe800880fd1a176a248ea13704574a3040180315a3447f6e35e6faa8c1c5c05c2f9f14d7c36fc17a1e42b6c6690b6bd988a059bebcc538248db2a8ee9f8e2df0f13de0881f98b20fc53bd5d347c7b35d4e491d03ecfd15896525d46f4a4e7fb296a603c18cd45798ce57a9e18ef9c2fd341054c95d09c8adaa36521fc7f5193618f129d0555226d9853a92a0b07f118b74a36addf3ad01b6bf9c170a15a2ae89a139d05bb8f546b3a70a22b79f42dac67b0becc95814c11a2eaa938156b1bc4d41fd10b247619d5c4f53e10835e859d97bb2716e735e035ab4ae4ee339ff6c4fadceb7a0efd06a88eaef2ed6438a39d74f3fbd6f1faf178cf4c9a232b19b3929236180557c44c51362c532700b28f01ef74d82a213b4a98218d0f2a7942dfa5337f62b36817ce5eb2f093af4a6730000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a21ffa24b348910dcf3c711b8590e3a590802bbc7c8fb311dba90faa79910d488fd0b86dd6745ace5ef2e6f40c52077a791632525510a43fa17e50afebfb1a3e1cec5e1185aa1645f14caae61a7800ebab7d4cc507824ffbc4d60a3372362eedbc44818ae1957359211834a0348542777b92c212114e748da8113b9709c167f09193f972ba5bc0d13927b99b29e5aac4978ededca69e8fa3eca89ea6a3bea7e2931e44ebc1f4dae04fe4e89da9d364d2653a59a52007c1051ee516671f97e848566b771e19a86a9883351cec8517ee7144467ede0acd5a1b04322c6382a991672c97adc3ae89ecd3bfd2ca781725b1a4992f134fc4543dde199168af0e3d9d1a81639c9b5af9906d96e969174729551a357f527a95ccd1567c12d650a5e2e81ecfe3c69277634516bfc41445d9132db28777e27968a97bd759a92fdfcc27384898cff863242e6ca724e062a13c8c986f2f6a74852c976724752b1a4651df0c7a73b28bf4afb32766e2693519cd610317c1d2e65a8982b7a55e8d62b9f3752060f5db9bb621debb1aa01e897e102824c15855b3e595e52f9da34433349f82fc93dcd68a0e374317eeb3f18f7d1b1cb5b576c92b270a3ef0ad60c93c0a34d17a8800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a797efc389cbd0836a214397e81c6edd9b2f22775e17a318b7f4cf19ca78ac350108f20c8a97d39ea1bb3f834a9ae89f19ca3c9c55f84be3c80685968a177faeb5fee9c33c6ffd45d4e9b337e1271935cb8e3840f883c54b295f8ef213f3774c53c1525f81fa68a60fbfd662cde74da3c387cf9007b56a5d1ae2843a104e8bd338828598a707dcc4769e29fb77e519db21d766d9780285e64e68f900d18235693a7be08b09d679d19a1e16e7f4ec551d297b2844cf6b7f6bc6f50aa5fb8117a413e1a7eeaee757777ad8d5a4318fa1924bab6fa25378bf7ace30648ab366280a91ac5d38494922380eb2bcb5c2bb1bca3794e234fd7af2e7b1fd5fcf55c44c5891af9d08a908c44a6a06b056d6e77f255488da4b94bbc0ffdf51579ac0aa2aaef2917bd565c0b4aaa6247ab718d4276f62e6554f5802fd8e18622591a978266a3112afceb4be668c0067e1fae82675fa9130fc8d10767cfa3cf4093409e128a34ac755f2a99e824b8e34a52cda7dbd0e965c5d4e166e81adb633f18da9516bdb12c8fdce78c56195d41491844879710465203ae5e02d0a23953530114aab769b620565d6a629b901d735d024338a20f98903b4236541c68613e1c36aa5b1a4c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad3f5b94acf4a4561685b72c5e962ecc01efabfbc7b6309553601632d02292d7139677d1de647b615fd05abd5a766b11528956b79f581c1fb4c3a935e7426fe563330d80d20bd2a6089d388c6a141ca73ca31d8236c89cd821cff5b688254304c9c643cf100a2130733a8988c67735d9fbfc778f7b56240fef86a7c540cabed286f36b364b5a7c3b1e135c7c77c754821c101d533b005bb21ed52226cab58933dd25bd35a37bf40399c0da6c4dcea6818472e351ced6d74bbada56b843169b03be75de38f443246e7860d5a7d462d92351d07ccd58c9296bc86bb0f0430ed56d8ec5b9e1032671ffb71189b8ee024b4105f3e1b26d9aa5ce77b702b1d285510828ca9029607e19ac658a6e05322301775286059f634d3c6cc5f0b2ab9c4e169ee02248b131bc1c665b4921eb6eb6c0746f6bc29708bead1c1f73777f7061cdc820838fdf51a27cb494a31b0bd5708c4802f897af8c636aae8b84ab81cd964cdd362a5e41ad5a43143ddcbac14d6563a506acc1aae6ea0071e6ce2280a8adb9d07f1cb6f440ef017686ea074f08d33ee4f400d59d47f5a1cc8a8c732a18e8c26a5baf0fd1058e97aff6ff5aadbcf313399add04e2f5ef5dab44121493614bc6a3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a92ae69c8ce4d8ac5644ed04f84a29fa27af24270ff0dca3c6e0d45ddccf88ce66864e7b9e2f6022914f4a83df58f860ce0e9cc845df05a9c69978fb70c11b0bcc9c4900ae9c5259c6e714c6bed04349978b0a38db482bae5c1b99aa413ab2251732debb5adcdfdbb2ca9c48485ac706b230733f89a337b0b95ddaad5b25afc530b847d3074fdad4c506882b26997f7522df8192ea5a9873586e2791e352ae260f2dc49f37d62bdaa4fa7dea7c491326cfead0fdf07b4bc6049829e0f2d2325e701ecc22d477f1a2cf7a4ff52fa5947f7973d58ba1d9578a6a8f7666335ce9d69ac105f9e6eb0bb570993c8cc13b0889c35485fc6c8c867fb4c30ff7158211a901ba145548378b25d39e94797a0d9c288aeb2c2a822bb8360e8eb11e3a04d36529e49f7e6f04b79b27226b00cdf5edab737e90ec2ccd86790855c8f2b2f81ee3f12320f0df79a61df6387a666804443aade4b50acc152e14f0825de5e95d20b718ce1af6d25cc46697c02f756239fcd56c4810699016590644ab040cdbfb104057fb83052476a3360f7fea1049e5839b64ff7f2d825a10f0ef89b4f468f005b218395e75493a0bb443c62faf50ae6199899851c380d34f503d94c33d5ed5e9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096fd1bb4f41dece4adae2046703eaa0f3d721f2ffecd245e8009e983405f2508bc049a55de994a00b10ea435ee4d0b69402772671528110f6e122852565a67abc4f5304397c8f2d42ac4569f3fe0e26f310b866fda2051cabf14bf29af0f4926393f5c9816d012c62c408b999515ef1272384596c22ddc7699fe2200d4fe2220ec86f9596d3c1458c925a254d21926571f038ae6c4481acd2089bd454e4313e33cd15f615beca164801832f1c8eb795bc18be8c3866513404931336d9f4655a30bf9c03cbee656ef1bb06dd73e7116fc354340e450f4388fd167b09f5d3de5cd0c14ffb0a022aa23185cb59bc9dadfa4f32687603fe83df6cb6a8aa5fb988bac89cea677e45fd0042fab87f8740d2fc132dd37209a22f4beaf1eedc8cb91ff451232436ebc3811caaf4b520bb2cb00d0dfc987fb78ad10c7f378e975434af6e7e1b654301cdfa99f271d474363f5a3b538f440bcacd92fa70acaf8af0a275cce7f92943ac7fe12187ae3f2f772bf41cc584188bd091f4961f7876b5e0c225f8eb6c548c408b5c4f778406084c8be93dc015f748973ec29c91fa5846e553118dfdc7cf8368557c0257301ba05a0395b343fd7b9b2b3ae107553b70090af7d956c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f96e0459c7a9b42743fcf77a4c930d6013f8d05b996d62853860d7b1aa60b824a0cca0d6112b9a3053fd93352e808f4d7db483a81f8dc46e1ac5c4b2418134c7179f89d97794cd5af9330ac3b3c1ec7329849862d02fd22e61dedcf511125923e7969ed41951495db363ae940f8c73d938099624cd294962d9cdfedf7e90cf03b9087462136b18fc92ff7b7f022cf23fcc0f941543c285cfb8ba6f9794a1d356566c2b48eec3cfae9fc084af8ebeaf55ecf1df0b403363e815babe4d4390344f7bb617a997fcfc0b5f61a14151b4a51ad31c0c74773d489fe951fac4d8506e4eb8d1375b66eebd5672bb91efd57c5c9963aba96fda05e55889c914ec71508c0d38ebf57a0e97b9b037fba14e9a71e5bdeb82e28082de0f395659f23d1574792786361e8d32c619a70a946120b9b796e5a67f7941790caa486251798afec19e57c9e59b21b712b5aca80b73830a3b7231260a529905bd2771f81f8cff564734e83bed058a42641a7c0b4ebd9184a9f555af6bc20220b7a08ddf9add6e63ebf8c3e8f7ddeaba87dba299a32ba93bb44758d5ac85b4ebbc6546d21aaa540c2fdee4b323d20e67b111bc6ecb471e1a68b9e5f65018cde112f7f4c173c2692a1d71900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002eb2a871f6aab4f832223b3a399a331b21332dd208a2ce984f452815d1f928d1b7e080e297930a09970f9e9e72f56423431833aeba3f3299eb682723edb16587d7785365cb2efb44d2325b24eb064ac4947abc47b38da961b8f4e0e705bcd6c4c3e88b6b3b5056118072d27f903f79dbb5f5a0c47d4064dce7861296e4e332f18e6193445feb7cab763def495cde0318e9c6eec599002d834610d43880913cdbf433c0dcd0d53e70ece67d7a1acc81ae3309d87133f886fe6ee3f377d935342f66d473b7e3c7b50855cc6faa81078e99509bac418bbc2b6c1310659147246e337ce4e30da347a2f05e4433397e33af892e1a577dc469aca0ff447b777ce8d79517a8d3ad45afb4c6f45e30fbdd03920a4404e1666f100e1d485b3a92896c7b6551c376a57cdeb782ae517e54bd8705b6b16231bce5cac257446ec42279c5c3bafd9e66285831c65d255238f02f4a1234f4c4ac19b819a9e8b67d0bc65a5e402cf2faaae8d7d6942d096e1beafe0e041c966a92ecb7ed62573690332e8eb6c71a994c836283c8a1ccc644b2d0505535c4ebb3438a6bfc7ce76a1dc646b60678f3b13858e3498f6a0e5ac4f1bf03241da64d1764257731b921391e6eaa00bcad5800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b8e7489c7567bfd67de3f18018e2e0e8f0923a268a746bd2ca58686e854d62a14cfff5105a4959c7e39ade9ccf631ab9cbaaba1b76721c9be94cd665f402f72cceae14b713d1f0069e490e86aef927e76e2941e910ac10db4bc0ad7e76034257ef1372640c8238d677e3bddf5c53b9e7c22e8cc424c3ad13a5520507ba2b798eebfac0a8b5e5879e95333e04a9fe84b00d45e044d47749389a47f713b53c73284235c004cc9f4bcde12c88cc6b5e70a8a287d8c950fcd13bbd0b1bdf2e643a3b7a9730404420799f489f5ab760af7fbc9bf9e469d9837eded84f77330d4d08e6828b61773a030f1a87b2493504e57bb8c3df2311613f42bae7dba1f2cc1e21c7a0ac299a68e9876112c402b844db08c24bc2910ebb753728326dead740dbf6043f96eb039326f9018b460282802c9bd2437caa746d98008997362aec7b93e429c7fd4dfd503dde193ab679a1d438875cd7c815adf14ecf89f21f27eceb21382cc854426b537fe3ab31b4a484e9a4818d9a669545fbfebdd15ba98dd9c01838631578a2d9b8c8484a2becf43573e548271dafe81f4f8d61e9882dc520fec0cc6fe83bdb4d0005d9325d6ab9a9b244fb249efebfb289ba19aaf7f0106c32a5dea00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a67f7c9d66a2f33793084a710fb0adf6beaac630d47d92eca5506ec447b7218291d44b61c3cd2ad481bd01e5fe400451a5a9ca9466c094d06845461db4a449db0c780dd64da2fc0647ef2d0e34b80180a752c5764b2cd95e12e36150e3457bb2a112eaaeebd29e4e15c531e354aa6a220dbc4ea59f2c44fa8bf460fde6dafe9953f68068ba70633db8e88cef4a87f66cd5062b87505ab240588324b788c2743e83d69ed76cc0dc4bb8f5686f28ac380034c113c377cf89bf74fba556eafe38c0245ec0a3a9ad5066561e322e54188d7c885210b6c7b011ac1e078592f61d44fdf67deb2350338b35af29cd2e8ceda5b6ae220ae50e799d104173b72cadab560d2126a2f75a4b33d9c77d3a680befd8029828190515787986937d91d59673602b18d7a689d40a259cd31f1b1d5de3bc823a6d4e2dd84717870992cba5fec1967e3db29cac14a0cc66a5818e08a5b37f064d79114ed7b1299b78d8a182483196746d24bd2a806c257bdef6860871cb2ae1f6249c268db3cb4753651c6377275c54e0da9d5ea65234d34b7fe6a6d75b2aa30cb5cb5eba360df5fe8050159948354d1ba78eea6827ad9472c2362f47da51e87c8b3e45cc88505b7f44c59d7760d0c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092f17254871b79f3cf837f15aca6e78201d0db538eb0acaa7a34a628ec08442bbc7cddb31bebb19e2d167fdf484639f2dad4b19d9c5b1ff7f24b03a87207d00ba2b53a751e44c256635fff326af78b8ae8ae00ab4f0465c8d9d78cfe23d70b9baa7cad759895e2016e5f925a8914212ebb4f9d93bba7fe765fe137863be42ed9eab6425bc62541088dba794feaf171e33072ec4ba5e4857618fd97a26c08eb8f325d5cc039ce08f0388d4155f0a45012529c5a8ae41fa46f99354a57b6db9993c21240b0a41cf146e75c826a3ac2af84335d8c17c4d6aaa4334110ffd69a7a913c30ebe6e790e75dea15907c43b20601776cfde76060254ad1307c8cf2351f8c8d050790e62f8a03b479d14e9e0cb354a85feecaab6b22f2bf3ff6b84a50ec7cd095b5c2f2e972dda0a7c56a92c7676bd9e3ea1c837932eafff87f8f8d2bdc38a64fefa7d4e49741227c99f55250d150bc97f75f4e5fe409f68594fc334a9703228e5a714d6eaee4f54bf1c170180ed818219774185d468bdf56d9b68720b22501cf7610323f2dfc9f7925ae24fc88c84b0f3fc406380d6d487763c3896b10e418dc5587fcc11dfdc245450fc7634c2634048a04231bb51ea5ef4ac7db8bd30b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024ea204a5de0d8c76497007ced693ed7d8a1c5550b4e0dc0edb59f335ae3effbc1c0ee58e594841f3d4d785e2ce3732bccd559c1b3e73f245553266ef249a60b2f91545836b02a4ac6fa35e955c4b2d8f89e46780bdd98a8c1f9c564145c2b7cd596f79449600e0521cfe3f1eaa3a18c9dee7ab3f1658e26bf7dde25c3b1f159a7fa652c84221d925f9eda27eb3d55c0867535a1e5057619723648c8f0f561e822e87df9263b9d69d48b5a6143c922831d33d62f384e6242328a262f93b8eddf87666923d0f545d0f13ce096456e36bf38fb1248adbeadfa8edfd8349d216211086593488a77947bf0b159328c167943983da095928723edf4fec0e0580531c940f1499ea96c152b83293698950fc5df3e31b806b676837841d1093f688942f8b9980bf9bb8864dda23eba568161e191235966c094236457e04350fe8d690dad6f288a13e974a131df8f9476cc712971bbb5a7cff8dd6552d2228dc65f4f10dfec6392bd169ea124b7344b48d5147c720ca9dc1849adb1b671e7add3cf841fe3a80c95c278af4336734e3f4ecef4cd246280999cc70ae6a07a018f7971bbf23dc24e97582f8591b96e0f4ed7564be93b6f7c49f7f835da141c8b8599fba7799d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000abae66d09e05fefb78b630e9dfe27910f93cf6bf41a98660317c0c2e977192219940c3c369df3b487a06f32970ad37c5da61db56326ab3fcf2f9d369661c5e752f06e890572a428bb032f9f54c1950260b8e97aa48a7decb065bc4b24788f579a884f16ea7291be93fd3cc6426d3b9121bd03dc8455a6aa77ee343ed785e7f6fb1a26cb9234c886ce42e26e92597051384e59d7a3771953f4b02ca823227d99a6c1b6d1b05babcd49dc19e21f50a96a132f5c5325970a393e90bb5a3fc6155bdb16d1f0e29687b60bce2a7f213a508a83bdf20b5ffc6dca4754abedeae89f3f00f12824bae06da0d1551629e0be1e410932fe59ee128f3dfe3bd82944b3d42919f05a42af9da5b3a18be4d5664606298e9875dd7f251b74936861c2cdc5cc1ccc8fda5fa266c181210d5e68b0d20d318d3893a9680d92c7cab64b8212f2736e0d3f086894c2f7a83c0641d01f481f31d50c273bf774250b8a0616a27fe555e0b884aecd18635a509fd02c5ab700c9b2f1e1047733f03e336c21b51338fc85177dbaa59d9197345c4ffcec22a013c5dd0cd3a84e358af6c81ddb5502e1d233f9c4c253093f3bbab3e32ca3822c021e48605c7d7dbf1fcbaac370336c902ab424e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ec779cb58391dc3fd707d7cd58d38edb22070bc46faf7f0cd9bb8ee51fb111b851550b7846363d2e49f6c532342b82d2436bb46bf961e276df4eadd18faae2508aac7f22cbd69f60297095e9581a6dc5b0043a7494e0d772516a50eeb6c205f83045c20afe9b586def34542af8437916f9cedec2cc1f1a4af5ee7bdcf92975f9dee86bf0b09fbbc202f411e182a721b1a6bedab7a8f62b3abb9a1f228eb0560570a28d55b51d00bea11ce626bf7f220f4a74c1fb969b1c345810e37ca3aa13491061456390467879a9afda14e52b5eb0648de4c55051e3b74f100cf28590a41d1499caaf8350b84b23f96ea6bd1e66b7e6fa296ba7dc29beff4dd0ff14d2624c5cd38780c5aa4ca898644d7a43de83263584c269aa382003852fb093c20e1c0a94b6fdc73a5d25a5f6351989f9854a3f59c5fc081127c92e58aaeacf88c6ea502034ee0568bea709861da2f94f2d220e182dba395af4d9782c06eb1b9ebae52e91f9ea84b29d9f04155a14c28161c31668f362d98747fe8d91cf5ae6f66f3ea5de509c36b52d0e1eeb1143fa9d9dd4b67dd61c0433861810ac932d963b1afae5c1118bad0017fefadc9dc75b46bfaeab6feec8f6fdc54a4142097e95e452bea000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014292d4036b42360ade4fdae354395300c5b73759c7ee6969c7060e14a4ef5e91cf8cda09a83f90e216b67328a534ce3637f6cd044b982bae9cbcfd55dd0e860eb1f0706f2bb75cfd070505c396b16dc17ca511f63b2440b3cc3cc2e9f44e0893b96f52a137615fceec1204f771c437830596b57334d80df65a4b1b6ef52841db011b87f96bcb623ee7e8207583e10738671dff9544e2cbbffc7062f5e911966a608cd47fe67534d53c5f869a697a36d8ecdc39fc9297d781e66553fda5d84a128fdbb58125c9294f3c3caa25e784b076d7a816dd1df7ec901d70b78a42c410e65d5d84212a3569bd3cff675f47d91553bcc653543762b3cc24c6f3c43231dfb03a52588429665b9ad463a834b0ec8b7a70c7c9b88bb245c1b2d3e7a1b18e7e04f44ad22957046f6e392e3ccc7831f677874f7b4502f0d2d94b9ee4a656bef5268c8d6584e88327f3bfa9bc4e242c1f1e30d37000b85cebbe1816d95cc74b426057ddf5cee7c67dd7f22998d9af44ee2207620b667906c8c67a620db7f4cb7d1a660dd0763d52872ab99ed1aecd2519d10b5afb7fc717d79403108d4697c97e1138d6166e25e822922fa34a32b02f2ed1483325eef017fbf32b63382bbfeab5f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000845751db48d69c668fb796eca735f1a8b9631ea10a34045520bf436957ff2c83a8cfc5567b1ca5c6a343ad8b01ad39ee8e1d716758ac252efbaed054a60f96b9679846f48a0a0dafae8679709f713ed7cd4b29f40ccb13b3261b206a25a9c19e65355556f9fa95ccadd295dd0e2bb819c961c96374a964b47e564927b274c0fa42091418530218a097668b4e541395b574df169bc0ff2675649b6ae25c66f575a39a1218a4ed8163c6854b00dee28d5debe136ad52b0a3522e97d1309091a68949669f80793180772bdf7e1f96f737ca4dfcce7703b4c0ac56778d8e4bc9ded1b75b9a7e23f857efa2ecd83134f25bfd202e4d5566ccebbd2429de49b2346ac759074ec132dffaae510f7c73aef69c23a0a93a6dcca1f47bd9624f4464329161c18975be04bcc3b259636cc72f71e390a40399c46dd7ea1e4a71dda0679bc6636e634d2e614c85a61396b9fa453676fc85bf5c5f99e35bdac05bf747c738050c02ab5cc349a091078ea31949fc412b34d4dc33f21f099774ebfc05be2404b40437a96324e0e54ef9d77ec9ecae04e9fbc1d6829fc6909c845c4495d90fd38b593ebbde4fba8a7e407434b04bfafc4601bd3286519f38d74a6e9159ff3c7a471e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5bb4edf706200ee08b91d5d1e0f68f199f3087c638ad974bc3ada203d336448092b7ac8d7062b97ac72f87dd168e73d4b3a7722c40df907fa6d5867f778745abdffcb67dc33792283871a7d10ecbbe02820d2abd343a3df154104b8c0f18e55f1ef9a2c9172e326379bc71ef637653701f5d2bedb5e73a4283d176c207e6351b48fce5426bbb3c00cbc92a4cf25092568c1bb3a87323bced43008f9ed42a2ed9e7ec35398a499dead66d2ead76d7afa6ea5a063bc515bb9468ab1d018ea9962d7626dda81531c270b76cf425e43c866fa3d18b0d875dfaf227bcc5fefafbd67e21a67b5afbc920d27efc4faaf1cef85713340983f3902dfddc2a2415325177406e178e81f866898d0b94967baa023a60960c94985366f66c2637c63b45c62efb0bf7ea909021125bcc989d5cf5b3fff82b6da5a4308d53fd5fb4dcdc4d331090df8eb0b5329b93fa9ffb0da4fd386c22560f250265a73fed10b967d49ef58767af7d75a80eb79aef3a046de88f8137cb506e5eeef62883d70beac3a736a55aa673e88697d980985a7786dfaa409e3acb7e708167c52f4907bd1d5bb7fdb20cabc89d9aebef628d69c0ea6e318e2419f693e12cde10e281b76ab298844e69ed00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fb0106fba4bcfe57d4238f84bd61b66e93baa4f463c14b3a8af0b486d5f4ddabef5378f8f6f1fc0af02445fddc130b478deaa8e5a6694da9c032b2be283dc70739397a164e8c6f00a8c49d2218f92f1d4ac930cd97145f8894e7ed5af8c30973ccb5e8f9b2c8d23f3eb08f44c06b44053a475bc50cecece48c3e2c3328ca9d422c353eb688b48d454fb16c1cc469e36da53087ec17d5741de5bd2e978175eacb97f593a22368327299a74927bad93546afc9f9a94af73767a03135e4f9ef8df1139d27b3873665dec0505ca88da10e5e7335bc0173d3202a266d736ab26ea738bb7323b07a56a1c8aa751b0bb4a0fc3d2e7428a8a88adf1c95dd4dc39b350f51e04aa35a36b4b7137777a73faeba9a7e86af2c68c3c080c2a6cf01a17f7bcb4706083b5ff0d5f8c04bf26c8fb802aa335d56927d9498e780490078a2fffbd5cd181b4e539b1800f4cc544ba942be9685425bb5bff698e0df11df5aa609c8846e2c8eaa58ac2c677ea51d2e6a978d4dd2cd0172747cd425c7ca51ace8cbae3297a33ab704d4d2357ec6e78fec70dc3c8addff073f131644eadcaa2263b76b35217651f5fe7f7927e967dbbae011b94321e48bc9abb06980633fc5e36a4147d2200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002713efea4e9abb0975da28f604ccee68bb54931ac47a1cb45bbf892d84bbc28d72a5b8e2421aea8e2ef2053c92331925f36d4bd01f4ede6af04614aa4f0b5b199d966e93ebd2b4524aa9b8e3cc6faa64970e75e8e43dd29de1d26697c6f195bc6982867c9b815bb1f0320f7209d9a6e4d18eaa6b38aed7ed83b3f8dc2e565ab6b881240a3b4cf70c5395a0fab874ffb6f088b0bad5927a811c97ef82c745e716ed534875c7d5a7c77e62c067f4b94d4780d733a99482a766aa1c485ee80e7edf088753428f641d20a4451884a1564d83951a858aa3cb1cc3f7ffd9c0c2ec140a7c81d2edeb276e02e0f078702a7b5eafb138374bce6f2852e92c6d885107ab9eb7823c01cad0cfdb4468a4d5fb5edca3b4e701360a63c772492b6cfd81ff0daa45343177b2206902d2fa38cf2f1805e4efcac9cb597c1aa3fedbfded4e9e74caffd9394f6330165fc8205dc8cf96605fd6a67957d0b40d39c129e3a0ffcd010f0f91a38d3d44d8672ba0da54314b0d9b9776c2cf65471414a3b1c179308a3652817951e1fb91c5ecc62202ef775928d1ab9c96eeba5698522145b7f08000c7583de7c1e3746828f7efe6366db755713b5b79fade3d631b11fc5dfec23bc6adfb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000187546d10a3fa57be2adb7cdee1014c3b0c4f4c7c5d7ba8460d74b7bf4d98deb8e71281f0f38539fa637d995877f22b70048fa944835de0fb5b889cc7eac10d08b3eb74ea47df63dad4dabed2e5992d96ed208349d2f11fcead44b133de5ebd4ff6c019bb5b45b35cef1dc3d4e0b5a1936f3be2173e346cf1b640312f1bcef0a2a8b2837e7a1b0380d64a633b5ccbdc9a9750a489bc8e7d8c6a405f0b6a0ce9b0eed438b5e46d68c4252fdb7a185e4764d2c937473aca3cd9a25353177f4d892f244530c73d4d76852a27e0831fbe441f55b07300ce1f07ec9fa77e8ab124ec66d46922d22e946b98e405362120389f4e0a61ad01fcee5f4865d7383860703b59cfc3538ca9e0c1f504236a00f179d92b0c0ae828c5607d5a1ad6dd92fd23edcf5c48585faed6e4073246515d673d6a08a518fc5633f64ebe5040edbe5c3181ff12f81d52eaa492d558b67c1a3222edfe806745f4ad66eaeafd2ae64dd690a218ee67b252852375546bddb59944974b038516a5c78544e8a161ddc5864108dd281bb6e9fd157c38815ea4138e003d61185351f8b113998b993ce1be8638f7aad3131ab8b701e25afd37918289f6da721ee144b090c62e9ce4ab215919f12d94e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f163cc54d61917531a05c48ba1aadec9e312d200e2da2532abfa12092cff7e51e33c34dfa94052fd176248f7cd93872a1d4fb708c62ef8958c2be0071ea80aed754e87485589f6593d5fcb472d98a7854b97fb8c4bf936ebae24d38682773031f63e15051f059c15ad9bca9f2a607cfab67465f84c22c143069a57f4260707909c61f9c285713cb7922df27b873f033612048225b16b27582b903b55ee8b4d92c9c2ec7ae57ae83c76dd3bdc238e5ca3e3c5ae118ed071feb45b0b011ee994a2e2848f3bcd5c73af642e504747e417d81372939fac74c6f5294cda363f20718409e4ee79320d60e55ae211d60eab56f65a7bf683edf17b77b9c57160b2a4ef97abde0e1430221bc0a1a1fb0a02d9c8099a2b84e3210bdbb6b60b7e8cd14ce40dc9a6350a580b158e7a36f9e29ee9f60b55ddffff4d231d80c75475895426c917cc149c5d26c1a13b96a8de6ac2be5f78a79b8fa3ac649ebaf908326b1717d782d3a8a6b8522cc2ddc3e5adcf282420314e716885dd34aadcaa849bc6a52713593d4e975d477013a7fe1b567e9b42fec3b764b3ebd187a6dd6242d1910eb7a26410d7815d143d20e0c3456ad2adbdab4d2316eda4cac7eb491414915aba01b77000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006f6a096bb11d2a75f06436adbe0a566055da72a3e844bb5fb63cf74e0c32dca08ff0f546a1715904102f77860aac27bc134fbd96da0b317ef30af0adbb611b333cab628dda6d857538af6c2d712b4291760edfea19a7014d422f4e5a175edf014742e002561787851ffbb843ce46ccc1c0a9737cf150437f57b7c2e3db4fd2f0975bf4c39f3e7089556e52b8c9c65ea6f4509800da4d5de289a2a409d55b8e3c3da23f828488a562bfd1d48075d4ed46852079d70ad9dc14a0f7d5f4aa77b46a199b6b61f53371ea0df6ac8e620765ae9e966f82968de6c79a1cd7d3f6b601d0b165b711ee0f79a436d0b10365b5ccc1002b42abec0ae90ee857d5ee487752f63986b8bd903fa37ea10151e6667bc1dc63aaf819a64e0f8f7c93f081c45efbdf1b418f9f687ca353ab3a996e2030ec2b49d41f79bebcd73c9a3aaa61342f3297c9c3288389ddc7255347b28d9fc1c627507313d8ce5118d9032450a1a475891fbf8a4bae505db73ccdad646a6f5803c67640de9282e03df1968a3b7660a99e9f6a4772a86f75cf6da29196ff75bd25fe162b9006a3e59c3cbf3a54cae11c513fcec5927eadf2f2ff1ec5803decf47bbf2b0673cfff78d1bd6c4f2f9db5da4b800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b2c273a9828e09759434c96b4cc3c760ec7d7a2508f000b0ca08768c369730e0b6c9c945b87127e99c5578a6aaa79353f90240092664498958f23d1240889e4c97972bd4a710bd8825da0e508091ef3ded046b5900da680b93341da78d723227f6a6450aab6cebe21ce2a78f74c886632cccbcd20c96eed5d7c1730ee1e71ccd835824f92fb9e18e2144bc77aaa13b35a320d6dd846bb25a2a7ef4657707c1307eadc7fbadff7fbc78a8f29cf85f073220c3e95e6a34687102c6362cc63e2f98cf513b3b775dca43834f6c18060d2ced3c04d8c4a895db9a97c74af3f10dff636b32ad9900e68b875ed182bd40cf8504965078809dafc4be614aa0005406bad696de3687276a11a952fdb5f5dedea9df0e5818103e765719968b95133b3362fc19c0a3fbd2af4e30a3fc40aa08d74c288806d2d09f28e7796b8d7bd72024aba6859cec5520095edec5325efbc31c2e67a472e8f0fbc4ad35d3d4cbf2ec06a8d76f3597b639027df904ed482f60e68e0c8b754195ecf8f2ce56b818590e9893cc4dfb5ca9e5bf435d7133aacb7bed509f5767d572d7e077cd4727d49d4388f17e6b4d32b04d1684272bab2ad3385ca3a66009ac34b714b9b38ef64f9e72b61d300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009eb0ccea8a34df72692b711644056e5c3e8d92e488d8c9c909857b35d759b9a1a2e1cbd74b2a14934e2aaf971b08d822c0b918c954370eb57ee812afb9c63a44c967092753445e523d17edfc33abe36859cf9b7863c89f42630cc69e59ccfe1ec0c65702d521502988ba084310d5a6aae42fa6da0070521b2d0e2ab733023fda50b3bbfa6e642ec368eeec190e8881a2cc9d7cf2d05dec775fcdd4eae0da9c9c9a2528ca754b5cc9af3a47cff454f52dd256972a6610c5066e45b7141235640ca308bc7473151852f87f6e4527d10e2eb918f016f2391d0e760303610271f64d811be0b0900e2beb27e8cc88e681743ae50c1a8d447df2b9f91c53ecf78f11d9fb357770949dbd846c1cb19fdae45903b76b98f3b926a01a5e6ec269459bb5ad43b7fc42cd9dfe77d784f3df23b6dfe5a9980f471df4851a275abf1de4f62178f31094b9c8cf721a5eacbf25da66d00bb1dd8fc5085cc7e635b5cd95f745c32e380c9f7b0a90fd376060ab910343bacf65f2c5833883a8ae0f95a2444b516785030db7b548351fe86e7259ebf272b0e7e220993a0b4c0981872881341d6ecdaaa6b3a44aecdc6033a00fac18078755c7f4e4a554c28da20828e47f05eeb9ebf700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008efb88aef0ec67d4b777452b3df8a42910c9850707449f12d99dfac283cef30ec460ca61e1675d98dcf755a280e0180ceb32c881e33488a6b2d37023bfe48117de4e3d2ac9870a21b25ee3729c0c58c7a229dc9219b82999f9a31accf0bdae06b8aebea297173760b3bf1501121506c88a436cc46c3fe072f3268c627247158b17345f8a93a55566b25f051760212e39433f764ac3116a8bccc0c5c56b2514c83932d00ce2d3d1dc46041b5afb9023e40496516b380ffea60241b8f2aafe2bba72fa05a0714ae1ee43aeec6042241f01e60a1cc8118efc3fec60d55ac9e30ee9e20d26287871925c2a337919254fac0574b1925b26e1b787af057225aaf7a62a33ade19d0da951b7f9dec355922e6c7b970e6446355431a1a15340aad5c1c545aaaa1ab138630457e4712e1803ace26d975b876363b1abb0e3edaa210b3b9485aaff3d4666e855dc572ed5600f36715b46e80fd23f58174d1349de710e80778b2a7fbb9bdf7c636fd1c25ae627c89bd217e32c1ce9b36e2c4d76b47d672885cebf9bbc0a0512bdec083021ed76a01e6ee2799a888f80f80b836051500b6cd8d104235efd12e8d3aa338179c2c839a8b421fc4906d93dca1dbce62b2da945c1f9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015a3b107c0d801217a01e18071317c703b6178141cfe39cb592d486a36dcf8adf75cca3aca87f8366bd3a5492c77bd8546a951573544171f07c56aecfda59cc70f0f83f7711601732cd37d525e85f7c5bf5707f5e717819aabfb4c3c7209e3b1411dda6a83ebe0a5da0c5bf88fc7cd4a9d9d8babd5a51a5f54e50ebcc7c99f8b45ea74b486c5c0a73a3ac4cf1e561fc4bf287da8f3c7d7fe23598c4951482a969465a864b6e7682a27bf2ce35ff7544d39938c1226cca6b964a18ffa5c04abd980a644bbe2bef093eb9427158285dab4973f5ed219419240f20efee7d8d8b2d5f20aa30a0e05836f580fadfc5e2ecc9027b814f8d58cec4aeae396a7917924b3f2a600d26b0861338cd9033bc3b7f021cceced5b7cd9496422150d22bf0a9e78cda1fea6ead78aa2480253e9508ee6c9dfa55846f1fc5ff58bcb25a25012c96edd4596c4a0b8819db63b009a47eb96cbc690feeb6a4b4985676c2f8fcc969608a3b3da59bf925329a5799d24d08a194e72ec1f35dbdacdf654052ed1429538b8359242569983b849ee202e976901e8f89299cf352be2eafe643e37f433fa6f91118f3595437783c39e3553a2534809d9e63f1048b6d6770ea4618148b5bb16f2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022f8d9d7340a4849696bb69ee8ed8ea9693640cc72948a4bec23a46d1750d73e0c8b6de0427d898ffb7f61a60870d6ef12bf88785f7b46d1600ff929e3fb6b46b5c80aa3e1327c48c6a7c8a71c5d0a44899741d4c2f7f21218445e31f5ce4624feab36f2a23b82a7a0e3b3c832b2b5e3f00d859990ef59ec12d164d6324bbb84e1718451b8e6afbeb629f1dec4df32d8aaa0373c9c754c4d2d6d78a097b07822437c430286d5610b4744458e6421b2c7dad8ddddffdc06e57339ef0bd5e3737cc5059e18f83d34f33295e4df4b1bb9d4634235cbc597ea788595b19e1c0d1608907d720422ad4b6fa87d3af3e38b71dc948fee6ccf3056670aaf653784085d62896a6652360d19b68af7ca6e3a4e0e452d3777984dce8446ffac4b8954bc8ebae44531088f0a23ddda9be0fcd51c1b303c278c46b821eaec8869fd0dc2465f38de7d8f2bb0a27cc144783cc3cf038985527f39ee4dafc3d26398968145358d181efec658092061d27b049e37b12087c923e494639285ca0d9b7cbda2ce99ad67c9dd627c6daa20722b335f579f9d140e01b6e7801d2f1e455a35fc029f8da522a14d546520a3b607e810859215a306f5b6d43fdd888b9be193feba2e5186858700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c3b6d075c7f68a98ad3206b54e695c45b152d27bbf77cfcccef24b2f2edfe3ff9c3157c143ee57d654a1e0a0dd0534f9f405070f84050b40c5ddba5e12d347259a2215850cfe9f02b6a06dfd70a8224c5eed3fb1ee596a3b4138fb31638c9285382c6fa838f4e008b6049361d3763687d18360688c682042e5eaed3fad0fb71eccf037fcddf93a47a0a5a74115b8655c7edab5d31f76ec6083648f24ab066643384c4e831f13843f6467ba6ee02ad2de450c6eba4a444d0ebdceea0b2de35b5c168bed7fc567d6b5945048bdd333a9fa7413a56ce7ebf431a5a856b9fa577f03349e3386c9843e15142339cef659f011922f2a674d4431bc81e536816a2b6451b1abfe97917e436b050be840b99d6316c99824646c8ad1dd705e3420df8a025f7c2d1119118cce8931eb6969c3743bfa4859b16c4823224b56783f61e99eb7333d46c33bfed6b7908af1529197dd7b14c4734d8fbabf236e55c6b8a10ac4fec5bcaf811f30e6db1bf8dd280e6dd6b23d990a8d16672c83126a7cf4d6defee4211cd9b1209a1a0eb1d321ab479841293701fa30fbf7bdd58661a823caf6d9d5d03ec0d6e494ba7ad6686533d966af0c139fef9c2039b6a3e4619e10242e3264e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adb15c4fcda2d5d9fb5a82cfc6d5266e38983d605f974807d25a3b64aa4f718e0d7493cdb02e0fe7f096542d7ed42a626dc1c91b9ecfbad032fe52ac36926d07f682db9d402f63db8e165f4cdc9e0bf044f21dd9090f430e65fc8d10da74c4915819dcfbcffd1d4d5b176e43a8ca1fd895663de2f0a70ec69fc4ab75feeb659832bf350e1a3170417ee8f59ef1a5830b55e8419fa55057ffe07ed9babc6782ef84a870a65dfab8173f058d9d9487143412f7d5db3958a013af29960493332442f0d77afcd00152a192e7934b82f731d38e6859b0a899986d1d532fba9c2a8142e4791313574d4c3cfd3864ae50cdf1eeb5b2c97d7810af14019ddf1d5802a9c9d3890998538c867d6e18fb7fcb1ec6320d06e6eb47d9e01a5568c448fa5b8e71967a251acc0d8221dc677bb9021b7872527ce2e5018ef12c946e748c920543238e25acdc294592bc69c37f6d68ea11ca23f77dae976b0312e9ea05eba133862b27a3adf2ee131c1246a024e439ece56cf740bde5bd000e73164b1e67886f95d41480b20177efdeb95060ef1974b8900b2f4bf6f5364b13421a95c10f6f819282329ca45cb713fd7e119e39b8a8e8ad6b17ef00f4a7991b7b07ea089133b07bd400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d293b8cb4a585266190dd85b8d74dec864d97ee68dba844ead1268670b93fa4047bf5f2f07536f192179ffb261cc58436ae04dd2fcfcf4a4257aba3fc5a635c67f0a512ee852c213de5d2e27363525f145a1b34ee67102e6bfce81964a33131614426c7e2326a6db0f4eae7103fc455a0401b6d5bfb081b0cac15099e5a52e4191551ce82bb8a2d3256ae01ee1c5ee1f915f657bac76d14603323d3c9a1f3e65141445e1e43121eb196a994b1e30a8d34b55fb62fa3716cf9f7c6ad23cebe3a5c5d2e25a043a6244ddc8647df032f3a4b3d9ed451014142eaebc3a3298f36eeef0781c625eb3b01bf833e09e454641f48f9fbf4a9060d6a4510d23b75b2e762ea3eb606937493c8e7dc2d4b3887b650522c5dc24ad7e99401f53dad55ca3aba621a275fb6c94ed8c12cde06be46c6f1b4ac69ef9ee4741ee2c60e617751d9f29bf753a1b86937f5f8aa40bc579d510e4ffde9d962e0394f9493fda177f0d36d7dd7507e302f4877a20ac6d559be25a5ab81cd9add88671b5800cca1d97f8b479f8b54be43eb4b490d558e21024ab8591de954f13d8a6a19c034b5278be2986b8a7edb841053cfcce868a021620bd1e146f8c36d0eb8ba2ed1e01da6014403e100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ed913de41f07357d688bacbe30ed1d28550539ea976a7ada601a17fb9ed03c8da11d408e89328c5533f72a9daa8100a6035c718a91f8722ce201555d06429821c855a1f4fa380800c2745308e390f38df9f06c497ce49e310c4708204e3f57c60e9239156d08c462baf8f7b43a5e0bed836f292bfbb48c9d2e793db9715d2765b0e6dbcdc28f79e762efd57851aa86fa4f80520a94e04e1f43b01de1f78d9b9887fd5f034c76848902da79218046fdb4eaa637497bd5b0d616e0e4dcc797413e6e558c29db667a88828710b94c72814da8acc5da881d34f8943a322568b5417a497ae591487b834ca044b56a23717ba1d57be3d4478cf8434cb3fb39899bc84e4fe4a70208953b7e2e2e16ce08739f95a4cb857f0abee1133499df539db86b16c9155b6c56a727a50f651165fcd2776656c0b600310cf95b30b07de8434d5876c774ba2c0e9a61f8ab92ceebf3da4e502a5a8bf4cdadee88bfb92e862d2a68186d99e4bae9661562f148a953d1b3d2555e81bf18f3e26b4bf9184090f6174c29614f98afc3bea86c3818da42d9bfdb3f360a576466660c70961dbe99738a627c52c927b29aba7b6bb694003108e4d0e218c2f40c5e7588c4500603ea400edec000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010ac5c92d2356f8f7aa8a7079f48e8ffb72877c5608024bb5b9eb773707dfcb21a6e0c43300a9f2c1be4b471beec788e175ffdacd182ad40c24fb7d4e77096d9e9a22e0e944a753c09048846adac1a65a539957e13b496b7590d859bf5d23d4674d5559488b19183d79fbaf6afe804fc77997f88f6455c62b4f96c0fccd4fd5a3ce39a914c638360e28b2963470619682e5ef2d47482192a67fc196667c42981fce965a554cc07d0494a9c4549b525555da6f42eb8024b8b6af20836121afb911cf9f60e00535da331976fbeff755ad78b1492b3bcdadd5fc37899557d0030131cb7a125f38351c7ecc116aa676217660e9fffce798ac4eda93b21211515f10f5e5dcc9eba618f3090692a53d214a838da11e04dc7d5afc5c65788498ddb50cdeb5b6c48a6f2af4dc24d4700cd9988538e788ab463e357db40c7046021460e64e2294658f95b8fc302d409f42ba6253c94e38364d943047f652e396c8f8673ab8f24b238d56fb621920dcc8249e275a3dc66442c37676c593b5c1af675b716e556778aa5862d639970495a37cd3bcf6feb4e5224ac063c5ec69de650398d9710fd8ef2e8a671ccdb43165b34a42747bae0949d976736f60b66a2ce918c8db25100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fcd3f23dbca62c703ee0d4c5c53e833d8f38a68e4369a045458a0bb1101c13b1d9ab6c8d56684f871f358ebaefa982321dc8797a29a74074fabdad41fc869a7b7a37922972327f13d91a8f275a0a92f60f0c04e795dd680fd53ce9a1d2972ebba5ef2599c594ce033b4aaa3f27c53d6c2cf45796cc9a96705e8954bbc6364953442855d971088e79137304957ae3c043a31082776ed95b5c51ad732ada456cadc498c33e973c03a75a9e78ebd673c90155151e9549e6f58c5aa6dfa8f4ccfe3b7849ccccc5d08efedf7c084da4bfd509a0f77390e5a8bbe15eac287bf37882cc468706500876af01c28abedb59e4ba204fa80f131d7d65e5fc18a736f576114585273e4ca8fc264e01c4c8511417b80e464244b29ae317189e881a406d50ec12d36e09b982eaa790e1c4c5abd73f38ad9457aef01566f58864126c44f02a28deb60f01514fc39c19fdcb5aca7f8bb408bb688120b4d038c1ac6f05715bad70a6064c7c794d31bf9f4fc5f61bb4121c69f553c4d6eb03b0bb405dde4cb36ade22f905dbd1f6c7490276b2bc9db24473695df61237bab8aea8a48e40da0735627c2e891c62994fee790debbcdd519793eae747e77594abeb1976ff59fe0a1d31c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094b6c8ee11cc6d1ae479020e24e5cc64e317ba939185cdf8efb28167362cd10f9e91d66223e5b6c44a7e1c710ea89d24a0af64b1243d249b02c3c2ea9cae167ac475fd357a7c8ca340f628ea41c8aaee16998ca64991dca2c6596405f08364fb644acc5bf1a6460dda504cfd7b4caf4456051c1370b2ea686e92018f06e139a414b18d6302fbf4e5cf32ca200715295209b77d6c486e9de5387957fd55440ebc92ca0404149d91f8fffd419308cb401833c4b7dfe95ce66ed677df2654aba607d587275c6ec23fed264d45ee70e42fa78b779e1672756d0afbc131f1d00f864b85fd57f137681b2aa12e942213d7f8dc39b6ca685635712a49a2e12b16cc1f34970dd324ca6467d5afbf8dd442661287dc734941281c52fdc08cb67bda00847d1f277cd631a4c9e4e120e8a54c0de4f8fedc298e5d02de96f42564cfddc699ef45a6ca234ca3af4a187dd408e33e314f67a1ebcad24a269f512d104cc9d394508b3ef6fa6827591933f40acb1645ba37e7731a7dfc7ae0795b5737943342d3bfda1dc2f18aa3f92867c942c4dc7cf6aacb7a8115238de858ec6ddf2acc8d661c4398f19c0493205faea851441162bc6e6ee9234f90c3ffb99a871d29a64dad0200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c8a5e2ac134806f4e1e3119e5bf19b7059e2dca5d7d11111eace24c547ac67c3ba70f7b189706f5d5141ec195f03a84206de635f0b84c34a638ab7dcc8849fc3b6f9ac76b22df0ad28cd18244cebea3e1395a056bb00c8091c8e1d29231f14c9650a59424575836eb0ce5bf0a9e09920a9bf47650180584dac09769ec9182a9ea10c027d5dd818dcd52739bbb8b07684fb989cdf67df0a5d9cc75e9c04fa083d2a4bc8c301e3218f904bffec6165bb4bee753b29c9976632f4d448c6c4f7a1642c6ce41c35a44db9b8670a1757068e4efe869f7fa39e415f6312c04eb8ebe93b7b755d00590e23600127611f4298d668faf6d44ccd8f6528b8f9106300bc5a9a68684fcad614bd08b78af7a4dee8ce6e0c8990627b7cfa3e98f21f56653aaad05de9ac95a9dfc10486367ca5ea65fe98bf8963818db48f8679b8ba110ec84caa323c36310958bd2c284e8f7fd3f2ce258bee4e9c1a620fcf932532bf63567eb2eb078358a44308baaa66c0c2629e3ea365e8b14018b57a7c042f5220cc5d13642d0a372dcd597914e655466f9dda23f25e4e77dcde5ef25d76b4c0384091e094964b000261e9ace62aed553a81673a97df49c73d2178786cb70f8c89cd743d60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a98e0a14af4f6166af88df74265bf702e34111fb1fea0365a4219ace74c6fde7d712827c422171a456e5f38b5bee3bb270dbb088c387b5f824d68bf880bb9d9aefcfba6ec7ab468859a04c23aa83178c08ea600883713b8a011c37fc070fe6f6170d13860dadc299f242da6b24659137e32f537b70aee3d26387d78a35ae04965519c94332cf84f5e21ac7ba0f8b57e8c876430d7533c4c988d7975ee31b56a955c3542a498def60f396059c0a03034cdf3117895c7b2256fe4bafc5e7de74292c8b2ec00a46bc82209810eac51a95cbde9f2d940f8b20db15bf5b0dd3fc25d7bf918eb2c17fe30e86ef7c62e3ca5b6e1129627f2b9cee00339dc1d5f4b840636d36d812a5f4ca99a3fa3d6031aaedf4396e0d8762f083f1c08bd7ac9aefc69b738a4be4bf5a00f09584e2546cad45b3a4244a33bc80e9d8824c31c890acc1d4f44a0801ffb0debdca34d6956773118bb6c42f82d61fbe5ba428cffe7acd364af858c2dfff0916c106459d2b5fe91417aa6726f120eccdb5913366f5bb6f953ccc1ec73f45c29e86e20f117fe4f4ec85506d4ccda9fbce9859cee026dbd1a7d3c91364e23ece08339adc7ac43f115305ad60f6802e3ddbe6e0ab583bad35780e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004880eb509eadab0df859343a9361ebb680b0ed0ea289c930ce62ee8b12f149e0e7373b0fda37d524a2307a10319f63aaa8f11b61a3c1b047fe6903adce3d3624a378faba3eed536a79172ac568298e97ab5b0e015db8298b5aaa068990bd5e9677520816f7d2ea0e6ce896f90580b2e44cfef119a67334971759530d2ee18c81be0ff930916fad5abcaf28543740e2db4d899e4a9b5bf075a34bc6c248f77c50eddd81048fd10f7c5a61d3131bbc3b12aeb0cf8f13b7b68b83286aef13dc9f3708b99a6c3f54802903380c6095acc5f277b690db266f65a125c0d1db903511abf35ee6d138cb164389fe6116b5b2831a0dc7fd564e007a87e6de5147a137b0b185cad3adcda1c865833719a3e077dabb8b2c37f6a7a767357ea114c192806857e9ab504b07313071697e23546171dc4b0b6f404022ac1a71c8feff3d9cc651b47c08ce243954e42616f3b72d0b4708a14e6e6477f2faf735594f86118fdcba84bab3d5c155e0e18d480da27e7030e783fb94f6cf96f8cce60de454f82e9ed0ed0d523feb8ee05605919bb011cafbd8d567f5d140ac0297595827ab02ade73a24619694730e989d0ed3f9487526f914e8a4d827336557e2ebb3d40e878626e8100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009944e849237449b85b2b5068adfd23961a9bb8cdb4ffff84b11516195751daeb768cbe141410d7d74a866bb1f25ddf4151ef755dc991a4a4f0f0e7c8ed618581c0f0c04854d8d037aa4a4b5863bcca584daafb451e16d8853889080095a010038434f65fb1e8de81c07e87f2ae0415934808596e0217548d80865d168b19f066935e869e19f3d977cd0a5eff881047c5d7d755704520149e04abaeb28c2c0d06b4bd32cfa1fe3984fce3ca6b7ae793231f22b6e007445186c9f2ced9a4bd0ea7414ad72203e2753290e424d42814cdb1742c887dacbec867922b3964e685f2367efc7c31ec2c5d9f611d56fa49ea59e60eddd18fd951c4c8f8e2c00cf6edd25034296fe050af1d205100262996b0a67512519dd41856c6c465c8967928fe95b07460069d0e7687a6d6c025d936b474ab56f7c73f655305a43777ca9a8b7ab1399d3b60fdf754c2b676ccf71d4f83912ed917676ea13bca1366e9c82cbd255b9988c8c0d8185bf542dc605e7f006e4718ac15fef1b6c32d643076cebc894354991784f0d3fc4eda188f0f28823c299a9d38ce8f813a262474de103b7cc7aea2eeb68d714677c952ee59eb76bdda276c550beb4873df5c0966ad24d22490e75182000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013e3e53a92466236eb55f037ad7d3bafee8601444d59f604a7f26e105349178c028aeb1c0ca74ebda70b3606ed12ff55d0867b09a8fbbca337019c236bf88a9c79cf8a4d87e0a45b8c6eb48257d21a8b96b81893368042952c3c1a789037cad226f7542bf53a3345e1afe2471ae28d1c3e3457260127b9c8ab96ade60a80f258f4e3f0979672ac3c26288ba653c3ec96a8b062d7f1825dd3b53457d108f253e99afc279c0de4e86ece51ad8784338f7ec9c22e97b710061642b833ce60bd5d9d478e1c0258162e1fb19734134d797ae61809214aa5cab4d549e8d75c398df24da25fcf3326e0fdaed54faeec69ef3b902576f550495737750f1330a02cb86133440c6ee0aee247bec848767b3723ff0ee797059b5e8a89c9e2d0e2db88cf0daa6fe40d7d0c5f0c4ad3e86758e8092f4e8ed1c82f7fa05cb50af7bce8c3cee332b76e123957bf2520c2349cb6bde8b49efdc67e244fdc226c74c9f2cd806417b4c485669099f42ec15804d669969b2e3e5abb59885ec0534d572cc552ab074dd4886b3a7ad69f9876a803b854e0729591f52dc46901e0c8dbd3d4a8cb0800569902d6e20c1207b7caba61016347b07dc8ec7596a9e99ada501ea5e57211911dd900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000be7ae8aecb7b3b7bb1a9db69c35f228e1cff05ff2c998bc0bc625c811e24f39a1a7e725de5c3f316ad8b551b26599ce8f5a5d6b92ce2568907964876bd873645513daca693f712148091ede180896e58efacbf827ec82e9b8e29622c00a2221a24597c8b18b6dec36eecb81e90aa837e70c29464057311af436dbeadee3d6acb0a7dad845355005818ddf83a77f86773580e9198e3b1a11e5ee3b7e33c591506404dd7898432c0025ca73abc376528624a6ad80a313d1fcaf5677f3207aedfab589a3a19215c2729188dbe8eb09d9048514f90488b0e6aaf9732da6ecc22d3d5439cef6289991d2e16ef3475014cef9c8c2d66d451e13078b35336504b342f7f27b2568740936e5f5a46aa7315a5ba5c68f908e40076a71eeb3b0a7fe62d05ac75d56d78211f91262228391f2212d5df69a06d1448bd15ed70f43fb5ae0910d26c4b49531e58dda3927f5e4ed1012fe234ab5934a55710497f2047ad1c7d9f2d1d337003d6866a5bf957385dd98b5b44abb324b4332886b1d35fd1489bd47bbf541103ff496906566a83806aa5203329d478aecba47e92edb2c931e58c2b04621194d6b90566ade96ee207a8e8498ef7f37bc5059279a334bb41f2091e0396000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002149d6c06ba664685b5e33eec0ae449d08228e057a58187e2e44dcf8986a319eab5aeba8189426f70edf04c4047c9d35b60a8a4cd4ad7e51685bf6692b7384b7f5749f228f29e49d904157ac02206d66b1f6e47838daed2294f88ecff7086d9333b155163809ec5b058331e8e1ecf52e5b785028be6f8290c4645a489a5a92720b3053c76abe215efb847cde6c5017db5e28e436b82d7e0633b63d0da51a3ecb1b492d26e18557509e1587b1e92df73c9638624f9c1e350a500aa9c9c58b07af4cd4cdf19bc7732f4b48d26cfccc0658360cdb617d93b0f42bae8f481fae668986bfabfd677f2e73854853d4d69e1318282eb097a3786c8da0565a24da2a460f393675b689a97edf329acc225feb9bd2c0b81e0f3e3574a154a2825f04738e83d3498f69f057f1844b5bb15c23a310261b3a7a559b3a7570a38babb8494b40616c307bc1e9b1e3d4aeab4b1cda6757732916272de863698e87d14ef5a9b85341d5650da8fdcfd139e97dd4bd19dcd3f826116b0d4ecf56d25aae130d3232c6d3e7a8f32a89665089a251aa2e5c30e7e5e0d96e6bf0ebfabcda7c1b9682e5299679e8aa6bc8919332b0dff11d5e158a181c0e7c90d039b84610c37b701ccf42a700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002579670998fddfb4288ae029faf83f413a43e069460cdee3ccb4dfa2555e6a3f67def76bea54f91f2fe4ef785aff7140d4c5b77cee4ac18a0b945c5a364aabc7163e996d79fa1399f8ad64ef9199138d79a21e2a34a0bb9892a2f131337f0b8ae4d716f4f036cce2f9a1a8155c08f6f75827428abb6cce0ae1cf3592e772604eb017925a890dced0426bd5199911d6ef03a3ab830a047faa34d702743cb0a23f8146d805384495784353b02e57345d4202560c0db00ef0072ffd14b89464924321fe6f2743d703c02428e02970930307b643d46311bce2159635273344838b8df254eeaf0d95370506337fbb5bc2eb3c2adf464d01dee1b2605aaa8130b0ec693c7942791ab56afa50e0739c55c6218cfa168166c2e0e3eb5f80cee0d880f422898ec8bd1b48131eae814c2d43defcb057f1cadd553f50b6b69a4367a6e6aa39a7fd33ba8977a605aea945128e79a9473ac0985d7d61efdb9efe105a7c88cd0e9ffa8509a17f7d29ee5089868adb4e76eeabcef8631d8dede90f5475f4f8cd3f3917a76b8d46dc33ea1e9489f234c9810f5664d0c616c880a1bb807c3c24f2187449d74743480f302c42b2825c16c62b9c76e809116163da56042f36dae34515000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010763756583517aa72caddb2074d8b81660967284fed45970214f87f507b87abf26640a161ebf68f465252bba0efa0247fd4038b8291758b370438b1f97ffedeaa32530e064e765455764e9ba6915576df4735b7fc9aa0bdf95b4651c58916e4a1b09ec4e77e27a2bbba1a9ecb83071d38c8da8a9167960ef22c0ccaa6b58a94c34481e1fe1f144740b1acd88195cd9f0d0101701f942a732870d2f5b4567f0294f12ab3c74c6b4ee3d4e3a6c31fe85bbf02124976fe08ff0d29deefa034746df021184a61fec5085571f61ef3529e975b69437135ad6a7d62fdfb720f0abf2be2483edea74daa5b0a25dcde3fe7743a1682bc759e11ece3f55ea4156944aa99000751d3cbe45155bd81beddce1a6ed70f7bb60022966710b2088bdc31207fec8f4d41e375eab2cfde402fe397664983ccec78df001f2cd756b34c34f7cd0fdfa08a9a2e7b1d7e37a5f2bcb29451faa62712a276cf8a8f28029e2c1aacf1a8cc3379fb5f3e8e1eb8e93f237ef0758ac23fd07d04309a994940a3912661aa1c18954c98d0cc2a244aee787a3301fbf7129ef4ffca1888ad5470ef9052eed8a49e56bab8e784f55b6a693b7007fe51394180982d60edd140699dab41e4a44e34c100000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484018a41c305ef88f1724873e13cb9ef5919e6a656070bd3971a428683b64998f511a23f97b374d96e0ba38c582e261bdcee525ba2c4ffa790d92de641fbec6ae0f2598515a8f2c568b0ded3b6a458cbab45a131878c8e57df49e63a48d99ab2a6502c524df968940d300ae7b6164a083c089f9dba3a62f03b796434374d184b6480232fc4cfb720019405270acf71d2a1bd23673fc3f0ac8a25a2ce5b90f7e59fb2b98cc00499728b2ce15c44613e635b0989d265ca6c9a1cc97337a9db2a503ca1ed610e2f4c24b15b07e975d21d0d9d8385bd567dff8963cee422077a2e6b174024bc1916b9d83d17ed3d64b6083c873687994d59b7b4b0fae53ffe0c2bfff7d263864156719bbaf4a3bb1e8d80534f6cf8f34a7d6d2196372259d985c21279a1dfde770e68ef310914ea097d8fb617ecfae4398b220b67a25ff0d1a7c6a7e03059092982421ffcc8b7cfbfbe278a60034d9ac9e6a78c994e84be7baa126720821fe88dbee62ce378c13737efa84b58fd5f72cc578955b172833c79f7a82bb95143ba0e031d9f79692d414c337f35c75f0ba6d4f0fe81f8c359bd56ff915dab60708202f6b23f358ccbb0367fb468f99a57ddafc4d3a2495b42c0ff9989ca6881cedf8b978c8f1cf70f88dd983e0c7e0e5886ba7a1a678bda3bb931c9d6646b1294c3b4637d10f173a09a7edb3cac9078452a2e7d8401e5e3019bbbba4c52dd52ee1f44b74964c8cf603e4c3e1ac1f94381603a21b43aa624e9444d2f317a7410f3100d968bfff0dd48dbc057067f9e56131d2eca10536120e7f51df7e315d970a720339d550282adb9ff64e63d6dd31e0fba1f009892842f9fa8df5d11b462208dc8be7cab5a166b15fa0883f39ecbacca47008b3d017fe5f59d474853b497215a1625866affb0b4f278adbe54dbbe923f764eab9dd9844a56377e7020df0cc15edbbcca8f1b62a150e969badf078c9282cc5339c09de23e915f49b477a56d62b0871406fda39b0da2f43bf7d7d0b28c6bc3b6c17d4c624cdfe12f4bc95fe2e0ce72374c2b0dde9b196e565b998fc66e2d80d09a55cd0f0ca180aaaf17e45120ccfe2ac120a1a9e581dce557feba1fd26c21f360dafc4fcd6db81393147ff171d4d49e93888c0921363fc53c05d2056aaaf2bcb33c08303f9e1150afac819e108f388d8775ecec58b5567471248daa6a7dbf68b92d345806004ea128267e8dc209a5bec336ff2674acf6c931a677a03d0ef5612479d610b1bf12667a1d8fbf7168842af461831bb462696f74fd8f3c7db36a3c7a34d9e6c5e26566b43bedaa321b9055f3efa73bdd54ccc26e5f256941621ae6b7ddbc28009c2c7029fe93da22d72a03c5e240abd406cfceb76fce8400b8aab087d01753c257e6262ae3d0b152ed043d000748f81d9244661d8f7446239ef64d183cf1d7ced408b81c9b43c7c27e7b471acba922cb76c0a8622d930ff85e817a760f225157f2c2dd72a7e12a82594762a4b1f81fadaf10c71403f0ed45d04aa3c78ce528507b94038dc01a55e0d49aa87136b1e5239010c97b593568ad39cf562ebc5ec18e749e3c0d4b1141a104d681e19ae124e080080033143e3556226439c57aaf4279c9871cc2b4546252e54f4fa6cfd8d11eb6a4f0a5a8a330487a66ef9f263f3416388ec046fdce0532fceaa30f7377c4f2fc872e9191eaf38e09679534727aa072128f52014e867082032efb0df947ff2bf3e2bda49189e8076076ac24fcf0585c8a74045d88f8a482be4d84b4295195df3eb5f1d11dab19b0e31930ac2e8cfd77946da9cf190ef940c0630be8f1d300abb3aa8ef8aba354d0c6bfa8ae7403f1e9194d1c2272ba9ce2e89cb426a15436902ed3345b85c1d70a2eb4d0a29d49557ba553c2a39bd5a2b14e2cd6877499df8360a05df51158e4b62219b13ac650eb646fab404231ccf4e0b53db1ecf4cc11f985a651c21aaabb787153d56a1865cbb5a18255f55cdabb11bdc42ae705c2a92ad8affb9f1f5dadb7597411483262458a5d8fce3e645da1b18759c9ea0c92cbf6bbdef8599ee36fc2bc61811a3bf24bd3779725bebc30fad1d689ce867438be1ff60b563c4ecbeb25fc3a34ece9de7b9ba3d81959e428bbf1428020d76793c855d38b72d1d4db88b72a56746ee2b691695705ae769f657e7087f20d8bfb636f6e2d9a41551a100d5e9f586b5e0e3c06e27959490269f3c9e2362528b74c8585261edcb27e81608cd5f7e7548e3de6da8b2d1a51ae70a048517f8cc9dbfb1bcc5409534eab9de2fb11f319bcdadc96f2c7d11c38d1dc8b1b6249fde138dd4d7f83e0ff1d57339a739470639bb9f7ccd68d6237e3f434775bb04ff1d4aa404e49a5f2f04f564eafb7e4bf03ee78a8d3933ccab14f629dd5bb20143933fe9f57c85bc9c50b9033e11c0e03f633682a13e01b2389f1f6120fca31f45bb65bfbc8ba10264ea7a3b9dd6562e616b749abd36cb5241da8f2b14787418e6dd14a34749811a65b915836a23b50fd7516607d9bd70b7cab6afbd44b0e32294dfc9900f02e5ff76fdac0ad6cc248131a18b3411e4ce1c475a931a27765313a49632a9495f96e979295d96d226684a16f1586d140ac371eeccb9c3e6633704d32bd1a1ca6c8a22bbd244cde97c194a6509a684389248c558264c9d9ebf682b404fc83a2f55225e3218d4cc973f3177b89bdcf90012220a1889c4536e6c0a1eb995653ba171d358f39da9b69cfb8dac93330fed248284947ebe7fd109e93b0a0c2dde9bbdfe25eebab06c09e02c615226418eeaf6ae7b5f01fc85e6cc8546215d746965634c359cd72d5e42bbaf2555e83e7f78ad63d3bd9ccbeb3e11fc0b268b242326d79d897c283295d3126d45610f97da8a0d00986b3abd863899249e402368206a3cf453d276d7bbc7f9d9a38c2ab73ba28132049ca4240e303c92b4261daf7eaf358b8df3c3929fb9aa8de51bcd789b31a3dd65228df53cafdd3d73bd2acd399bb433b3edf3de1b4e008b3bfcd5b92522a1a5202a3fe51974aafcb01709c47d7f93762def4f3dc03ea243ee34cae13bafcd2935043d752f0a014d7ddb2a8f7617f1dbbbe8875716972cd05d00ec9118cc39ec9d8156f8bcadf9ffe9312369b331416358be4cbce7a5c121428440d23481087b32b89ac040b7e8114d5d05d514bc6b2e4612cc3b71a5684aec39a961307e11927af791e30019fccd66261da34b25134896b7a7e8ea975f01b68156ad27be1527cac327a8849d9b2fa1760cf275343e8f9a0b246892ebe2a79d6362e445d2b4fb01d907f8259fd0aff6ad29459cc460f8f0253c63441eed315dcd73406d1b98b90ff54edb4636afe123b00a6891ce35721b4bde23c7643dcf28f3ac236554bac350acb440ddc30520bf3007f448aa09613d1a463c375b94f9a852718771c25bb2dac25b5baaf105c17042188d5982b683774fcf21d27c8025a106abcbccd44d0b7b51782f9104b52e3c2f14b9ba10fae0f79eaac2161d69a1519819d1e7706991fbb8654d0361b4af23de2e46e2dfb0f16c7db52900dcf38cea6775521452d889f3328c74644bb69b01f50e08dd30cec4f0836375ac6611d2fcd9d64bc232f8a3a6364499d934106c8a441fd509d072d61a2d179a6294843d754ed5433fdfa0178a5210f3ac12b66fdb911a0e22853f080ca754f07b497f90671f49d525bb7d7029797b45b4ab89399d592c0c5a1d23a9ba69c2ff94d25b3086cb44d5a4739012976679330e1b00993a2a1190ab638b34792ff23d4b0a529cd42cd1a134a36747924f4c099a993cd2e0cb1a254ff789b396bbc41802a0d8c7b45bed549aa3a3e0e1313b0dbff6a611da50132c074f132cf16f7aa6cbedf26688172713b4d3e99973e8b3fc1dcae0cae9ab2e1d349326e599e60e1cac99813d674d7e92fb4da16d96814c2ad2399ed4ee4228810ccf9b51dede4cd90c664d7af1aefb2fbf7f33704366cc51997a76bde6901b5bc96be53d61cb1f899a372077c1ca2bf344160317746efd5d2837a4d2dcde1adc7ba4bcc66e76ec00ef91ae1c1e31dcf1268d516130b057da498e785fb7a5209bed195d367bb0c5ffc24e6e71c6c07f2f093b69c8400827bfd33d2586d4a311a4c09efd38bd184af49726d96779f9e8796358d65b01e8b25d7a0c953a9bee0ec871dc6354986de6b7de4b5104c0a9f5d9f82fb511c401cd6a877aaac659ef194696fcaa14e4efcd332f2c498ae1d792aa31ff05d221519df32169043a7ebf0b1781d974bf5bf2c73c3723071e62dc389ecbebfe1df9030496c5f78cf7a3a105db71968f43177602e8d2b82c9ae6a3fe28e9b19392068c678a587bd544270d07014a96f2d92c6aa1d950fc8e6387fa1f93459d0a450fc92e86768496cabb39010c04c7497c074aab096cb2e4a081efc654c300629d282012c186a636c3d3e62a035999fbb3bf7beb48448913208868259c0dbf9a4c2f295a7899c1f57f007717baeec8c8dd5aaa1ba7b9fff3953e42b7d073b487f40bd1bfa3d77a382bc70c1de4614b0f77a509f8cfc001b87d5d4718f8ec21505fd46c4a7e2077a9a4b7fd1e1390fccbe408b2f68b9b63055cebc1a7b486f06f9866950df4d3ad4fb35d2b2b75b95eac4923bfabf6f7332e953a85fa25c1ee1e9acefacf170e4da18d475423cbfce8e1c8d6d9b2801cbc5c0a092a7e03ddcc1065a030f1838c7bcf25cb340a7f8bc9ebaa073f9209040cfcd3a4b54164639713e9be3360438ab73aa05f4006f44f6ac79fa2336ec55ada9ce71e6b291f9f1b753261af1e3e23b727565d380c5985157576e42fb45a24248e652ab445fc9c9b4ab1a12652dcc742bd14881f2b1a363b2c72df456d033732d58cfb7d87cfc52b48c1c64ffabf5e2a865a58c52d1324f9608fa42d307705ff0303a450f30eb1c35cdad8537b9d2204061fc3bd0a4ececa6942bcbf2d647bfd61d18b9a1d6aacdff6d81397de53070c5a2a1bca02de9f395f78bc78ca4a0741f639a907fa5d1c1762ab13846801d05238203acd108be0bf65d1b0fe88911972fdbf175925bfa186c0f0b0a75198b54e88e29f2c2c8c402aa1d26dae7b6a26a8bdd04ffd15061656fd85795d080a23656b3e7bda252d00f7fef44301f558c91a1c79c67465a00682999450527846b59192cf3d8c199368bce3cd7bc23f0d9c4c2fe5a7f226130fbe6c0b4e82d70659968bf6e44219c81521979a78414e96d27b8259a0061a93b75aad57f33c29b4449ed24ea68a14dad365e97e5351ccfee808a68538231231d0824e36386ce906eb5cba663db530257d26b4a7c682a0ecc8aec95e50031baa5e5d4e783beb040680ec67b6b45403e03a1abd06c14cd8533dd695763d8318966d6c2d1bc53639b9a9ca8c4bf47611459274f522cd806def4e92ff00e7d90ed090105b04d45a68e8758a47b1f67529a7068c7f3529faa31965af8fb6ac2a5952c06575877619ec3c80571383ab6602d93c6b98a441620e884acb5fb15c1337fadc0e5d85a02d72d3d41c653b998d26b2e38fe956467c3a866e51e82b9494a8d035b1f1ad9fd30d36dac2173fc33913be9606a9bccebac9248e3d7982ed22b6ba7e7a005f7b273b7cd4864527f80a21263f49a26de23c1cfe64d8ff6e8fb0385fcf0859d46918dcfca91a8a1a34782ae64caefda647acebef65113c7963fc374098d3535cbed148b9b8e5e99ee7ce0669ea107a4796d873b01e5d0ca40cb99c786c4fda6b5dcef5910fec35bc1a300522d0e78dc9106c2106e4718ea8cd6dfb2f2c73ab8809c2c9e36783733673df003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000003b118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000003b0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000003b0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000003b0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000003b29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000003b141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000003b25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000003b12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000003b2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000003b189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000003b1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000003b05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000003b05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000003b14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000003b03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000003b2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000003b1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000003b1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000003b14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000003b2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000003b305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000003b280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000003b223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000003b17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000003b08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000003b2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000003b0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000003b0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000003b172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000003b0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000003b05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000003b137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000003b2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000003b2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000003b2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000003b18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000003b0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000003b204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000003b0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000003b1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000003b28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000003b1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000003b21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000003b0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000003b0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000003b107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000003b2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000003b09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000003b24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000003b03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000003b1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000003b205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000003b25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000003b283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000003b21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000003b094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000003b0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000003b1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000003b2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000003b1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000003b1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000003b304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000003b0000000000000000000000000000000000000000000000000000000000008100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810400008100000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099e05b99f41cdfc21fc2acfa5bf534af8bdd658ce21c1b505b4baf82888ef5c2cfce341619bfef24e89abd816f0fc2d54a4d3c47b446db31e49adf576ea3805d394a835224ca1b1aa7b049fe364ad625e3185b6a33231e7aeba37a1d5638389e0aa30f078b4d43d1d354409bd4d5e6ffc99b53e4b2b039fe39a5a84e92efcc08a7e4d319141ccfa9e02b58134e74aad9918264c549d6a4237eebc09979171c98e8832750f7f44716552dc56a5a5027804a5c123117bc3b7820061c40074aa71ebcbef48e5482fd4ebfd498c60d0ad73891f328d25e4278b15feb44576537e3475f10e519538ca52bc7788af77926e96c59d34fcd07551c5e4c8593573b19a361b9325f7db5b69ce43893083cb8800a95c61d97c78e0e19afd791e6c55af65bd6c9edde61a286f61f0dabb481073bfe3b7bc66368564eff0b794df1a04c8e674f3f740605c7581bfc899f63373f489e1b7175abcb51ff96cd00a3392a7cafe7e8e9db71ce93fb69cdf7fded55ed6c62da8813e55510664206d54fffb72fc940ea49221807c58599146704e3952b650e25225e5e62b24b166eb425ece893be53d558d9dadddabb87df7e9219ead96335bbeab154c5bd385abf45e534361794472c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a223bd0489ccb96093ceea21223645405b0f794555ef39702e9af705c9c48dd5f9d726a7eca163c696d68008f329449c94520e6caf93e8189ad1eaa129ac94ce09bb52e43e068899d7576ffd5ffc14500240f1c7b1e0439d3b53caf87e514749a19c802a413fd36c44fac0b31e39fb1c91f56e7b10959c301d52614668fdf1c312834036b3647ea9e8400d8479e1c35f085d9188cc4cc6d6007718ac199af8a6fc88b2b7dd30de7ee4fe39fb46a6c27062f5ce8fb3dc46ae29023fa6ad1dd33389a898fcafa9716a117b7d3537e542bfbc7a056eb97eeed9a767baa0b7d8fb40f4fb879c0833bd3f9ba448deced71ffca0c1f67d1596d8e194a8180bacc44cdfb377491c000c046ca2af67413e303de673b75a7ab43e27ebd3c60b211df429297be539b21c5e79e3f0d035f1410ca71e347b4cbf925f577f9825371cb317263f65c9ee3fbfc5fc862a4cc1d15c390800d7b2e7f9cb32eab77138cf38fe0b8d5d1824ddd7c45d0bbb238c2e6756443ce9ae268c6174c04ea852d4abbb7bcab966f7239c4f7c5f06f53a3cb23227b635895758784404619865061c5f7fe2da5355c271c58a417ecfc66308fac4df0c27d0ce4c8a4f3e37e790f6a586629f123c0b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d1005ec40dd1be076b427a7b8c0da225034c9b6d4c86f6334d391e361f3d7ea270eb7532a770bc1e7ddc9b9bf772dd96ef8b848753c256feb16cb1c3ede3244c287efa009813dfc3b9ff2363290e9d086d373952d0c052f3323b09f815216279ec59881276968b2736b7c10ce754bcbe5a8475c537c7e00b9ccf4c224d6ee9bd034ebe3829d174ad85f698aa014d9747fd2da74c61372f6bfff6b725dc33b9c6184650fe0e58a7a3a50a2c047d691bbbff2db1ee7c5bb8f94b833a041d7552817053937bca2d12dc0a442ecf9e2afea5e65938de249b127e8e919e65a2ce1708dc193de76690539e276bf627c0307da926786d8307241b6a1c4aadd192d02d853adeed6287256b3a7d80cea61038c4e3a06e82129230b4224d665694031df775f41c6e2523f6c44e26da7085190fcc5594663275c7425b12a618ad52b2c45264bf3504eb971b72ca73b3c4a6bf4850026f21020973aeaf0c23103ec682b711bdce8f42f29e3dcddaeae2c9f6d298532f59e7a2ff05bf711b93a4b14fd3e994e69bfd5eb54b5459b13aafee01f46f872351ea88966b7b3ba7346074319b1b5123f18c42b02a663176a6741417c3f372f6a84a87d2033ee40ec3be8784e6efb0e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025bbd9673a5e01ea9cf903d02f58da8fc411d86da1f6970d47f11035451e75e5f083048e7656aeed5124dfdcff3c6cb72184eb48dfb99cf03eca767599c0376432ce18180b0ec8563d9cf39627fe71780b87e7853064b5c7ec45566e9134860861d0ce871aeaa41e586009c8b2fc390a0b4ec37394216c79879e729501bcb4afb683b23758bc6b5bb6f3fb1e6b61f65ae65149518a5e12f44ea35d1b80e45256a9604b389becff62738839941cf6209291af9517e42604b6e8660049dd135c4c6276aa862d31bdfc10358d764ba74acacf4cb3f18e54568ee00b62819a5636cff65f95ba350722d78f63960c775c457302cbd23286c12650c90657762dea3347434aee419aa87ebc23a2fb475525a81fb782ce14811b657228eeeb92d9bc392f0863785b160c0b3a1049cd055c4724753be0d11689d5de8c9899c69f46ae07b41906b2cf0c24351d5dc1c92ce132971be962d9d7843e9cc2a6ea153e65b96b06ae478fdb991d03b9117a95bf7f3015ccb71b0356003a050bbcdbe6691dca1fda529f0103513363742bdee1f2574d013da0cccbbc640a0f6255feb0ac786277e2658bb797bee3acccd74782c7324fc3310b0cf9581bc53255534a2e11bc14702000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e65e1d09f54d33be0f11c14bb0ed56606026d97d7d7f7aceac8d70ca7b1ec308ec119d105ac9f5984706dccfdba944fb2f58be7b70173862e18c5f3e586b36c344ceb1e407f4d74f6d8aac8174c8ce3544a09e4a844ea4d3f6f0b5a06b2f5c23263dd24eca482e5bb25da3bd3abc2385e390ed25099016b51172f4b70ed32be4e32b31a87bc9dc37da2974e4c3cdec1099b968a20892311da43d14ee7897055c3dc0fd9004dd52211c8e62c975bb233e5555321c39161a2e3b92f8c468d40be14f0de68061878c920e71d00691e099d5f342abd544f4a5d93af9f3a5ddc1e512c9325aee7f03d2c2b628894cc0cde88d3e5347851d9764aa9ea2da50565859d4e7cecc04c0f39724774aaa804e71a1e9ed60a72bfd1996672cdd007b81016b3a423f0765c3d381859892767a11ad556c6826c6a6a9ee92b29ed0769289fc278bbc662850ebd56aa90bddb829007a72bef5f0f42f34baf520f827fc5ce6c22872c697e7e1deae52ae791741b55cb453ad265aa35d47cdffc4b804cce5915b1638873f97671e5c5f208e8998a5609eb6a52d708b7fcd4c5a1d1ca6ce6b00d0fc5306ff704a9ec051740a93557e9116545d955e964076924469012a28c828401ef00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d9798f643b2ee10d9d80d9c3f2898448d2e63c773109b7736ceda853314eda840e13d24b55c892e775bf8cf06cee2b7f401a4ff583526c2b26ed3ef411a0883b153d4c88961e4313b014ebca1dade8ab447f47b2272ec348c4ac5707806a6e1f86705212f852d59a386440cde836d707ee099174972120c35085a1086af6f3f54272a714aaf2116c6ce54c1485af1272108cbc956b9d4039cc7fc3fa64c506b7bb1a2446e6391980ad3588e13ced7fb0f855a336fa934b647fc1d70c427b3aff03de0c38dc57d6a49478def8d3fb6bad85e77088aa6e6b05eba8952ea66a8ecc4f15b79c274577bcde6183de8c1b1086e4dae86e53093c1c23d02f971c91cad7d9b9b30f0c9a3d8f9112d6e3298e5a640759a76e44456b261e505a2a25f9a66f87e8327159dfade5840032c2d25cf008277b9c3622b44a0ee1900a06ea50b789c4ab2aad0b8fd254fef48d196ca8c057710511dac9d1f380ca14475ed66a92feccc31850069dc587a1a93d15bd3674ff50206925aa71681d97eb6f23009099395fab36d305f674999a105bfde0036b38e3430b641ba80554b540b2a822de724aa5b784c3298f33cb58dff9a206289020dc30d2f357bd463341142eb67492b0300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001380f02a755930627c134a51e3d2f67f8f575a801ef6dd540ba86b4ee6eee95dd55babdf070fcc58372e79b10219c582ccbc12922906eccb0593733bf6ec2caf445163ad4b1f491876b9e225b4d1becbb025dc33f7bbc92a176fbed174e3c7f73de858806fff959e2f3e39efb69b1c883aef0699a9b8b8f6d0b7de5d45908fcc80d28a49ff76a193b1ff5a6ac7e362b8ad9fb6fc2c175f3306c427bcd0195ece72d51f3d966f93137e7f6a9641300f9a5ea74cf5037763561585d9536db748cfeec3c769f77c53da94433c4541b7713f6f5b4414cd80912907683aaf09caef330a519a363fdd19e86ecd7efda4c6cc22f6511e853eeb445db9c72a32cca9d5165c4298bea58ddb54f222b740a4a61506bf13b0945da26d9c5251b3cffca1b3d7929fc16172cbde53a947f750149824130348641c2e5dbe20f8ed6aaec13039b869658abab23cc7eed499f5f213e8d4ca26c675751eb223dda6a144c8a019cc6feccafe5809dc363ef5dac63d3fe291afbac91dffd24b66afe6f70d46eb36c89fdc7743a1f7c001d0182fe70dd25320c0b330a30f9d8124ecb902bfa71190cd868c90581bf12e5dce39a731cb23334fca2507b1166b630f06274ecbbf4a47d04c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087fdee5c24682dd9adb2692ced774bb8f6c9c55514ef888aab6230c521421f6312ed02ccbb8d3bbe99602f5c8d81557890b7d1fdc0d6f3fc85ee509a252364f5bd873f04d7acb0b1107b4a2609bcc5001e150dfd7bb6fd58ca1c122c57553703eacd7be2233610aa65a727ec3685678a45637188786f1700c99cb60ddc04eccc7ce26fc71feffe821a3785d5da982b28584cb61b5bbbfa1b9df92e6bfe045a3aa321ba77c5840da66d56b510cfd617fbb2c7b6a1886dfe6d2803e418993307650f999a9006f2be81a74098a2d3e6806fc0d366e1e9a3e5eccf9bbbb68cc9738b01829afbcc6ac9ed9ab4714f8733574615d7b67e6e3530a139f3b000b0aa7b36985a24d64577fa9b3fd7aad05ce9785c0c8f8a6e166c6822d578f0da43884b94b5704d62b1af0468a22b43158fee97eccf81d7405129e1c0a54e968402ea499dc36219ad7dfd7cf1d04f70d7c2297ecbffbd242083c1c6007ce4685c0b111ee614eb983adc56b97f1e443b692a1b37a83b48040315433b2a2b417c6fd167ecdacdd8e0636a2f8b69d0fc02d36b1faa0bf73e6a1169848713a30a59bfa27801709104a3ee770aa48fcbc0331dd0bb19ee9af0c72faeb48a95a032723748b4585100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e70700cc2aee97a55d4fd43528d92e9850fe72c8cd3637808ce62a2d188a7f5b281d40763f6fc18b6108546372a5856a2dd43b6d75b1acb84f2c0c8e6563231c667030294abc62cee854321a31eed331661f30a56bf849cd6f6c9f0c48bc914e1e075d72b0d44bc335396fbd0afaf6519ba48c9a5ace8b18d74b95f2c385943e10451f2edda71b4df70e5a0287db6ac689c25648d8d8f996238361d078fda8a967e2866c36069c4dba7b119b02559f24383ca75f795c7e46503982c39512ae4860fe1367931861433dea0b407c0e98508197ff45e86a657b36a1b6ca2546a1e89c6be1b82cac5ba2954179da855785b73191521d52fed6dd6c9dbcdceca57abe0806fb35d1cdc4e4052c00bfa1a6532eac7445f61c7ff1aceac4c4fc779018a7da2b2bab8a6f47ee749f4f9a3584d4d233e3ae25cbf4e9d5dbbfa490dcf098fa1bf546e85fcaf12f400b65e04a5d44c608655c07a4dc02b0a14a846ddea7375ff13299a16d673f89fe35c1e3242a73b7e24ed9d7f79782b09048f80f502bef7146982f3d351b96315537061a81a878f9bb4291c88f22cfaec93d43cfabf18580e540e2a129e0dd9ffed02c43f05726a1dc588834c7ba74ed22f28641c818339000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016ea75087481aed685ee2046be266fc938cf57a0647ba0574cd9edfdbcc2947134ab44259fe1cab9764c4ba88883076ba369800829ebf5ac09411f11a7f466efe377cb7e32a013a6ffec9488e607e84c6567299ecae77f79efb04501bebacfe8e398bc314c6965be631065f14b8f6c71589f5f92a72113375bc2ba47b96ee6319b0e95827f71e992de4582289ff83e1417078799c51f2ad1de3a0a940bba8522966b5dd64f9c5d6bc5e26c935324049a902ff19640ffd31230453edb1d02ccf30c43f1384c475d21383fa66efe39f4f4f51b6cf87138f7025594d6330bccda9db1620aaf1912072cbc8cd4d8d03b39db36a3657ddb11d65da93ce24e15efefddf39b479e72a4d51e7bbddd2bda06851e36bfa7c0e01b3ecd8017b5825bb0022f555c16425157620eca442ae84ee16a24a2c3fc0682bd0fa03ec24aa775e4accdb66fe9c490dbcf76785f1da983ff52d78ac9b9e84569d119dda07f5e5556afb46f12a838b49d88a5a487565aeecba2ef173fcd5fbb4fe3ea04bd73235fd9a6d4618fdefcc54f7fabea8f460a0ee7e0566724879ea8f7df3ffe8e4b13dfdc5166c306684cc8fa5e94305b98f3b9ba7365306ccf552743a7da2fe307179ae88001000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080c23681f3b3640ee362660565694510726dafa3048e9f9632440cd0daf8638ecb9316e8e86c3c7c2b00c8b1b1950794404fcaeca6ce3befc5c232db5875b8d40675e9b8c4dd9e4f1a29de098deb8678b28c496a93ece58a93993721ff12f97f575adb7af65d8c18d367dbce208ab286384f01d07156ca48b13698783dc606803c6d900bfd6080c8bc7eb96eb595e15cb84fe40cefdfbb902e567af24927e37017607ac5b2556ff10083211a84e38be72673fffccb594535d480cc215d6c8dac026991ff0b58791303c3e59ea676f81bf25f0c22275f9bc37b3434f72d1d43b2524060d389a740e0be2b9a43dd6772c6f9adc3664359c5ea79a2bda3d649561ce8080f5c09f43f83b638cc23c64149076edc1c84afad42bc08cf0d98a9c4895c914c009837444a7b0aa340c6bf802d193c25a3ba8fe49d3503bbfecc06ab4bd0e1d63cc3a49600195320e4ba63443cc273d1632d666d4f05586a873cc3c73653d8cd3bbe1d0205074ca2391ac8fedacb337805c4eb9f24da576be1dea6d11af1dc5caa12e9d494872ee9cb580e89005de586fa93d5cd479ff11a319418899b0753dffdd6952025bd0c45787395a112902fb850a5942d4460fad29c3b3615887400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009412160d60670ab1a5588146d41efd6de1a5f03e0be3822a612b203f095610763f54772f3745fc0365b3aa13435df0b4802caf21854909ab762918e4e384b67a5fd1085d7768bc8f1d0ccafdd8a6621893d0f25f4b694afe21ee7a555b08c82f5f3c4a48ef8617117c27def69f109c9e1aa6f9b9cb2cdec9a92dfce05f50c3bfca701eea6fff33a7fc0c27c1c1f64d52d10436d1873f5ba0032e689497d43f5b72c091a4c09fdeb41ca0ec0945dcf4c8c35237c444df179a17309c00ad9e259f2e0edf3cda5d1a2bf73ec724bc13f20480dc052db9c44df7e5b330f4ca4b817ade337d92c2afd3abd87cc15608b8b79447cdfa6607290a58eb5bf73b6102658330b8aeda5d79a89db53e9c98c960e966e2a9cbb412d944327158cc9f93929479e404cff528fe3b1bc07c501f33da70c7de92a637436599792e954acff07c077aa1da7fbfb8a126ec07b973e853aec3f015dbd00447e38405e7013455a26d60a94a97e4c3e10c32f6a6a26bb1cf56302a7f920dce7dd9fd453d15d351f5bfc78a54c6e2b5ed267b41a01469add1636a9c84e35faf1f3db56a0d0e88e93347908461657db690ee1b0ab4b2b29656fdbb4b6d201a64b5f59f11e7ae18280ae6654b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096ee61fe20e5bec3197bee860714804840c5a84b6406060a0363ef64ea6d6bf9e8c9c88cde56e00cd6721b05ca45cd91b9f06651d2b44a6544fb8ae807797a9075caa1d29a4ef04e9d09e039906227633e5d9587c1555f324293ae92a1c5980415f88c5ae07d4aaf7cb67d47f27a5b83e9f25475975f7c18d0d3ba74d5f4d4ed6b084137c1f40b085e261fb13ee0792c9afc42e814411973e363990f830c3179f5a0c2e4e56fd6c38fed6c9cbe3a339cb0ace2e463e88ebf8b73bf368a61e3c17c40bc5e5884c988058742a17dad7e5839549b023223e4fd13a1aa96d8e72adb6fcd892afecf1fa806263971145c34c1156460991c1255e81daa0397cf16d2e7bfc07267687d99d53923dd87cb60d9e43d89147d7d6b532217511be4fabcfaf6f21614c3472f6d628486c81021aa890daec3a30e6bb65519ae453771e42bbebe8b4689ad92a5cb09b5d8c0aaed2ec933be3f7c636dc67be29852c7ab331aae144440de46cb4b52df884576a53abe38541de72a0eaa1dd5730a3c42b1426c4cd3d4da711a2491b22d308c5bbabdaa4838b4b464524422d6e137be263c1ecf2400468b2fca87e1fbd80c629bbb6361c3d02e2e07c9525d5bf6f1332c2c23bfcab00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000846546a335dfaa733db569945c1e585534cfe56b6ea187e2b4293faded3c14883985e8ffeae287bcf9d07a903ec45506edba30b0251c6e648d977fc26b74af50a06e2439b311db44cc2c58f7a58f897928e213996cc2f704d334a42625e5d70f97278039a26ec4c3c79d819238f6f1fc414b46afee6a54e6a9710618082f20e12440ab2960d42d7153e9de65b45185f723cee171064dfceeb33f177f9d891bd4e0402c9c365da202dc20cf5234a21666b5c1edcd58ba74a6d60a5179023bfd178e460417c925db28423af14f3edbacd5756b7d4d7bb372ed790390974edb446c4941b344881f309d207784736f9582ce2ff9ed69a05a6b2c2228df2cecf856fc18cc6d2029b0a6dfd4d45e84826ad6eeebe6e5989f139a9cd8e34bc6506e98f0311d0057160c9d71fbc02ef813dd993d3455af43f0e7897fc056d28b09f362765231756ce6c5be3b2c69335544bee58f1f1fee6bbe8f0f694e5f30fe40b7c2b2fd0e1d36e07e3a0fee1d9fcabcc42d367e1739f719d3081cd18391f1f491d7f320e68e57d0f72157c18a8a128d5cfcf39ba0bfc635c482c93d6d0eea155ebb1e3b5235c8af20a2004e344a9caff53eeaeedb9df993892e9713a67902e3af6b450000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000907441ac7a7c73b148b19cfa3123fa94933df4dff801d09a69009b571bc925b863a835260d7d2a5fc7a14ab3cb5642fd95238ec5102b858002f1f4651c7f224336fa1c7afc75ee627189a4cf443297629c152eec5a571d737b715654327b13a30edc0a5957ed8df6684341e5ba842e2d9c9051e2bbf166ca21f2816e171c563227c43842d9935239b10bac24932cef9ced1256099dadce0c0ec02a0aa2c0f049ad483b9bc3f4ddfcd87021ef1de3ea0efb6dff0ea22ac5f4861d04a2a9b41c3b9627b2caa87dd96927ccdd9557485f09cae347eff1f28298872478bad0b6969d3d88183da3835e2128155708a15b4cb4ccf3dda62097dccf73da1d798a1130dd091093e4edb4251820386f65030865826e56a96f3497620ae94ba0a8aea5ae6fe19524e4ba440ced77b15a99b618872c40f932cdef3bbe79b34c978662106108bac4e98cd26835ae1e65f29af7859340d058b85c8f597577b207c23e799a81ecb5bb610c8f39ce5b6e390a4d8914bc2bbda5c7b1dd278559ff13ab6187a72f23d26fb803db61a37360255306ace28c424260056ea74a66da2a6a0efcfd06fce604c37a350a3a7cdc8e897d7097d85f46faa837b920d433ed0108e6ee5ac3f0410000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bfd33f7bf9aded73fa1bc9d5b696f7240bc6ce4c44cc3f8f2d65a25d5ea1a4201163c07ccb95a2d16e7f0f271dfd997be742508143ab11fbf09eea3426181ab14d1f0a4b7782cf7bea7b4aa24e3efd62e6131e2c430766bc4e266fb3ef5da54f98d0d8c89b06635ed6497dadeef8faf40cf633043c26cfea45e79ca3f28131cb549158658f6a11cd15b1978d3b4da378b5ce51ff3751fffe8f17af2dc6fdece4b086244d2383e8335cef917a964db7ff5b1af8fc31becc16f6eec55734a3922ce70561a60794f3ca1d208eb2c7045487b3ed04430d3636dc0bdfeb0a8c9154623a4aa408f08e813c36aaf33873fed94dde7344407cc79c1cdf5401625f32d3652917ec2b079b4b3b40776c440c3768c76fb28dc3d8cb1050bff90c0e77cac6e30f969d9f5a23681099e2a1c7d983eb1a73dece49048746531fa53a4566a755290395e776e0d9579e62cc69cb5e6a138eff488fb1fb0c655c3993ee6a7fd47458ac981ae12bb44cac7abf432d0ac35ce4921e59258cdafb7ebf1ee98d9e219b20280d9310aa62c5832fc49466805deb35b59e40754d50e41185e11790ba977f32f462e88dc8e46d6f4d95f5391ce0a01af22d955e6378d35d08f74bd6256cb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001df70cea32bd445f6c4ace06af49e5af795a8f58de6471c5df81898d32e6f8bb4e79ede214685dbb63f2ebb1b71515868839b3b90bcdff811ddc94e8ec5c5b8a9e10d6073656ce9f504517c7f7e28ee37a19e2c08992a9ef202356517d39cf669386a1bfcfdc234c0aa97e9556321757390a40c1f75efd921af4d4626779a3787ec824e4b5d55f5e32c08e13091f31deeeac5e0122926e42a656c73ab287152c9ff830101920930c0b026f4d6ab48e26a081595a8a8fc76b1d4444ffba73cbc3fb82dccd941b7bcdfacef8240fb2d593add127ea64d132a864da62f46ba5e518f1d830211b891b4e109ec4aaa24171f0e5676742d416754014f1f540db7a5d6b14aa40bcd6a7128d8402010395115e72495a0b60342eb33e66246a74b58e433087e2eaa615c2b548ca0a6e5e832da5192b176a0c071c6804efe6b587e4a640c1c9348a893af513a5e9f272446c3538fb28ecd0de5e70e7b72ca048ca1ff62a7819c77a5313a53d4efa9b9c99bbc7df0c6f3f7e61ce36fd9dbabb092ba6eac5e28a5b89b84deef9a55b656cba0308ca3f17ccb1d3d2b14d5924d91e1ab7d555113af376c00aaf2cf0ecb819f4b250c07933b0468d37d0a204325ef6d02618eccc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b67e1e4df28cb01ed65ad8795bcd25bcb25d0fece0ede5923e0f9e84b287335609d1813bc3d524db98e6f0c94cda1014459d95b63c22eab91e0a72137a6e41a36ad5bf5c551d821d0c9600eb7faf39b3b14011662bd7fda314a784b3432f61517a0ab802442b107206826210c8932fd661af3d92d8a34efe17c100aaca7a8ac04f6ed912a4e69fe727843d5a38fc8dfc79c325a81eb05c6d83c8f7024a7020a10ad02eaacbc9c9c2de2769ca0d77b7ae522eddf87add5db4df2b21bfc5d0c4f8efffc732223c27461829c93b73a0eb6e3bfe13c146a3fd4a290f6b739dec10ff6672db480abde9a64016494aa4343d8f37e7b47b5efdcb7a115de73e76e12bcfb4d79bfed5fbba3dc81a573c427bc89416f2e8bd9f0aec79e2baf5a5e85bf41fbfcd256be7ff3a67d4cd27e0ff1e3249701d468565c542fb4d7f72c95dc3d7c1841e01fb400044c27acea5c57af74ba6f9f05f1d7fcb4c4a73d6d766d06a0cc197ae096fa85d0dc87b97aa864bf601867adea5ea1ae89820026decb2eccc116afb060e07d46decc0a45b518def42e6e910e7c98ff0b4265e545a599696856c2a74e65347b79f036e03efad5f5fe5c60cf901c9446201032f6fc3082a632c9ca000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092223a58c3ec9ebedea9abade666a3a3641e262f2ccfc3604cf7a85d1007247b0f71beaf95790fb72bb3b76c35ca92cba824b17941d209d135c8088ddd77784ca0d7edcf1b4acd767668c5b2c248707e2f8b0d17b68945e798fa3c1bc2d1eb05d7d7395589694e9a6b089591f297ed8a38e40b556bb01d498e60e349032fb344dc52dcd85cf37b6bee2540b5f34d07266a8a21143b88a4797d5e323c86eaafc324696cd46393f53521c5db4bb8ac20e2979b8eaf4d8a188ebb290db6489c2498cc574928446d9b0fd6bdc41d1f77522d3667d8f03de4576f3e35dea57db3e0427746800441fc8f6d033d4c93a44b0b9b75fa61f127fd72f8495905104f9e34d12cb3ec6ccb783283984caa6fdc8487cb4dffccc61eb3e820019f6b7a12da99f9f7ae68ec0bc1240e73d7629587762df8986d114cc3dee63310d6eaa10b6b687053c90f7ec279131580a88236e289eea31b77949678434af520f60394fe1feeadd9d2f7ffa6176e10d3e169d3fe89307a1eedcc568e664c17f990ef67280772af775b53074c306d5f332dbc8732f5ae712b3703ccdf06b8349a11f6572ffbc89b006a705c38d5a654db15e7bd0f161d52d0b239f07558dfdd1bdd8f67c25275fc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b9e9e1f234b2d171b9c27c67115d0d0fe43af0b76199559c7b74a6bfa19ed1dfcd5be7717f987f9f52c827f5046b1b8666132e70ef6c61979ed2fd966896546fcc8fc793bcb4fb0b2939bee9037e37ea109405053d3e155a8197a67df261b228458afbf69e241c13bfbec86b10e222148c7e4446b67e028217a9b7dea508295eb9020cb337254fe0c6db3e8c8bb5c950862a9b1cbcf22c41f1c8f3b04fb300f847ab7653861b029096f07bd4fe6993fb3e1174a72f7bffee05091f54811ec321d5457ebb0af4ba60c61684b746c2ad4e58c91354a0051c6c9fa29492ea9da7f5336d548f1c76526103e78c8e593701986577a619581b317ee152974b471dd4ca5036b6e16719e9827c383de5b8524c486d338c9b2083497722f10628791f0b112d221daaf5f02ac17222898972b23ff1c93f4255b19ebb96a39756e9e6ba9ffc3e3c23c8743e231483b08318675a48938f4062708216904cf4707514964cceb9409b00ae636689f26965eba4560712b75dbd5765b14a5a01e59d191f4f7d50da601c9373758d015440091097892317b29faec0ca0157bab0e0c59be77f101c004ad60196325343051ec1ef3f32e93e05c94e4b5d91fb1d54761a3e9f76bacab0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000879ee72a6b9b474c5d27e1e787e85cac9db5959f068ca1c0cae9139a8e616f435d7a01d116b362f25f4d82c83420171dffeded57b8aa4c9be2b9c1ccbee43ad2181b8018eac07b2f978f72403ee3142860eae6a254d8a9a40229c3e3f53f4597181793a5002e946f5233f75039dbc5ab7e52bf08dd5ec331ae9885a12e8d93e98fb382f5650d9b60c40ab53277bad08a9ab3050f849b4bc59d2c67c64d586f89423594cd9b8fc4d9ff3146928f216dcfa6d315e5cf2bf22186d925c3f331a4cd2c622a7858af3416f5dfa1102984dfd6f745c16f50256c8b581257d5ca7f0e7643f99427fd98bf6ce5414db771b44a4e2aebaf400762527264034544bc0571c731044a1eda8e50cc08d628fa06e5806202e6de8feee91fdd5e7f9bbbc4eb866a40fbe211d8441d41e9dc659db16e10755fe5b7b892257aaf7bb1a4f6507143ecc0b79e7899fae62b0f64080caea9ed38292fc8928b199b0a6f0bfb120d5203a9eadeb2d43c102e5d415f25146fcb1c851612fd47376fe75053915b86b9270d3d8bd0501624e241b4652abed1380eeb1b2a3dee71049b8af8462ab56e705261fd175929c5c3cb9508e481e5dcd02165bed4e37defd48fac92ea4488a646fcf96b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f31b4a6c005f7771470fd254d21678dc49503bb690f692c60fea66a1eb9da9e5ad6dbb7e2c43e6a1b4e0503ff0da40a10bb24fa4588090fc985e4f95f08eb233e080cf0df5b2a8462a22a3609989c818f8950539ba4faec03d3ceb212588f1b6ffcbada5cc7c5258c699026b69c68a300becb0d967cc85cb3967ce8d777f067efc793dbe334870898a818548e3b3e66ff3946d6b9acbe6d778f1fe30b69a8be46acdf227c734b8316d993ff9ead0cf12be835faf6054ab7693545a5af03e6a3feeff1e2bed1e45066ebb4f56f54b060fe4dfa03f0332a1290505e345e16b99194ba9680f91261207ae047256d1acdf6835334b6d7c21c547c81ea614bcded59ecc06e35fb57c0768095c2d598de41a0764f9ab14f1329d57e6b48636a2bf036e7180a71c56e4f9a5b28bfa7b20c3e42e68a6ed65a7524aeb245a7db7ce9b184a8754f2d129ca2f91289aa0e338c269eb76b18889d8d4e41b6dfc3257933e74d413bb2b0ffe5361db81221d86b480437b3db72e5b32faf7d769a62b9a4f5657201b8ec17b8620bad581fe56689b2197d879b9ffdb79b5bb40a699543e1ddf7b15860b8aa0925dee7ed2b971743a9342b30e0fbe8c40b4ff3c47bdc0a7cc174790000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7bbeb323e63f559a48aadabb627851be8f4d56dceaa12fcad54a30706444fcc6939ea2e73d03fff8d59e4d0ea6e4c79060db7b7c5ae6e959f0875cd79ec6410fcdb2ca52cfc6d561e83f66d0d301050e0b0afb8e8a238927e1bb99c718079690b8a8912e3058afbde13883788789d04d7c4f8d3ca4adbf74b1cd8c2ad6286bde773e8e02eba0f077c9b5dfa328562f16918be430698975f8d64eb8ab5d329210390436889c99587d44c43ee1329e81f95964eaa1fa967887375209f32fa0ab705187e23dc65b7b237f844099756c40485d0267e9d5075c981ae9056effa5455b15964a248cd43538afdfb08823be157b6eee509efbddc989fc516ddc907eea47a64a2fa04ae7c7db6ab44747bb4bb80cfbe18d22f162dbc4046829474048bb72f4002941f5829245b062d4518de1a9d15fa227f323c7297533e10aa4f498c3f4b1f4e06a31a224f0581db86ed2a6dc57266ccebf796d6f2e593738be7cfafc9275f23d527ea486592160da393d93126d8563ce5221046f6dd47a355693bebd3aef918ec78488af827b87b7cd6d2131768078a6bb78be4bba46328f727a4da995ad15d2a4e9fe13e44ed343e031cd35696be3fd583e4999c6a459eba3870b0b900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000616d99f194a66ec0154daddfa807c8d578c4e96f9489afff42d4bbf3f168370906a02d933e6269a0c1b7ccb0c3a07588d7e6c7fc9e9db08636ecc833b69d869a62a9b11fab7af80b9ccb8f4c08a878e31f0aee67bb7d2efc7a97808373c733b97742a6cf4b3427e3f12d49d7a2145642210d44fcd82d3d806d3fc53b00898a105bf44642e1f6f7cf8d3ea08a150a189540d82cf5a0db39c899637d8b6a60ff6469e1c4576b752ef0f0bb25da566a3170142215ed812422347b7334f0fcceb00295ad52f4d0d30e1c50d3a70b6fa7c6e994081205de6587c38b0afc9aca5922dc22a69cea08a044025d8abd61a94da4b3d5ceda466dc84a1ea2b9d6a6b3f1d9874e6054b81ce88fb4c1b46384a1e97a4696ac2db7f0737a0b77d8c68fca7e2407fc2636585928a599dda2ff2bd5a4cb134e5dfb5d35e73fb2cba72821bedbe471839c60bd4503e62eb5c1f1f241b133898b18c645ca792909b0bac7b57ef2d243e32b8cb608d0f0b90494802f892f4a17e6ba881b4c4ae491ac378f384b949b4016e0b53fdbc77eec4a03abbb915f8e9f0a8c783da1cf317dc114e4427d9fbe503bc66aedf2fff1b7bb44aca4e1a55a45a0ee3bb81b28d7b1fb0dd61550f61620000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5c3ce42a6e743e0691019255477fc43af7e4c364d37c9aaeb60770dff1ca49caa29b030764eabd3e787e4f76c28528d5e40b2d5011bbaa9f9b837cd7c7e407d09f94eac4b0fde9fd2071f1932f20342294f80da8d11208e356a728243120c73152a6ebb5e1066ed7d6a4b613acf1482fc61d7b55806307762616223bd8e1f9526d056e53fb06d1225fb1b4480fff5f646aeae118622f93c8cad83fde2ece28e724e08969c99861454015bdf2e4814e22b5744ec32548066b5c82033c0c61768d32cfc88eeafc505c3c015460357c01b7efbf38075c6feaf420e1f82af7fe85064a8ac388bdda556c3c30e66db829a3dc9c205a940cb4bb2a7e7b7c6739ebec7eacd59715dd9f04f9c7ef1de3df172ce9a0138d75a93b96d9447c7a3477da65b1e62fe3ee4f47c2672843ca82bf08b99e60bc5a693d8ff2a457da6caafb65401dd6a3fc9cc938a64700448204df496485a9bcf433d348c303a6631ccabe5425138d3d52f6935fdb00da74992d2f7b0fed4ad77823cc40ed72390d60c643da5aabedd579306c652fb2f5668917c64a6d6d8c14695df716b00e05daf26990d34b7bb5e99a4a045dbb4026a68009da77d9208290e6c337cbcb5b472c4561cfe21560000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a895792f3bade5e2ec0bbe4bb79cb76dd71f424529de2609b2e799c718b71b868e859a1c4e4acbcbd0ba981d07141abc79d07c3e475844a13ce0cb17ec8ff2d58be3afc9eb881c3acecf996094d784f6a4d3b8c32515e42e9b2f6072fba4ce1444cfd9bcaac1884aecac6c27678ceb30e46218421d79c07f38e50bdcc88a265df3f89da42115febf599efb70794d3f4a930d33905e2785fd2468aabf6014c747c1ad53a4e63ad74504e56922956b0836b2793a2424ea236256098817a360240e3fed9c6ff2b3c80827ce3ce2cadc4c16f7af66ab8991d871e24c7fbadb546f6ddb73bf7d0e035467f6e4931703cf5dcbb2b5c73e246f9e9607adb23fa775a13f08544f32e86f35c11959a4118ebfe14dc220ab3acc7d2d9362f106b67097a105047326d6282fe179e14f3f2c9cabd6f854d3d6269850e12e0e2d2df6be1e0debc7a263902997d8ce190a171358f7ff6da8201c606bb627f7629a201108831813fe3e7569277ead233c3681a065524168217fa136f94916e6f9cb21f4cfdec11475ded4f04818047c2da73ecba025f762b5535a475e9aec9476f0cd1bf7695649bc6df1cf0c3fc86688969407e300341bb1c354f73dfb5304317e58c68e7f89f000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008586e67b4bf4bceefdf47675931fe4642d615ff7117e722ae752c656e37521d210a51e63e34ac1ed4bf9c57ce084a40c4a160ab05283e0a06f7b8371dfb231d659480dfffeaa0207894443a9edd41c53216b1345d89975c7fffbcc410b29290eefbe1543a10e281c841520ecdfb6f7bc35049a8853b8904784352a5492b249531104b489539865ddf0a3d1f4b3c87b9032b70771c6a454ae712b9e80a1c2761016adcb9a1f39d2440900e711ac9c39849ef17dbc7d844df51ef78b9214ab5361c49b59fe51a84954b7dc85fd364389a2cb283205fff53dacdf3d3599e13a1c20275ce4bfd40ee4fa55116c3cdb9234779568e86413c17ea961f9e5c66e482c44a6aad27fc06edb02f4f24118d68c9d6c9b5e9f58c7d2b7858b52c933de50bd6812559505e2f24bc4495618c82beb70a7ddb35aa01ce40055533b1a1957e0bb1f4152df3b0412cdcbe08108e82b0575ecc816d129f795ff053e56dde26fee102580a29c40137fc4aeb8dd671778ae841fe7fae0cf706b1f3cbc2c1508c567760659ebdd56220659b29f5a86fa4c53bdea3feeb33132298e8683ee0b9a840ab5ec15d7a6c08ffca22300b512810a56257fae307566ccfd0dbca2d49fae643e488d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008606ba60e51df371f4687736ea3c601e8de8e83d906f67b9d5265cd03ace975650e1b217922ba0e5afde6fb050c36808dcd2dad69211a823441e92d535451a32739a548df2a9acf962e7e71efdfcd571e43e18622e170c89e89ca09c50e4c925baa2f238a1abfb3f358ce5bc088d115c864090d5a3fff50bde9db6f14e0a3ae831852657a23cdfc39ca40765b42e585708f486360d10c3edcc5a6ebe11b952959f2ee64501affb6e17145c7db9912e6d0004505b8e137569787eb2efc6a45f30fb30fe72e7224cff1cf8189ad692c1a95b1319919dab5c7c9a0f734eb76d9af972d7af935fe0fcd82007bd2f98938bbfc85c97a85b1afcf2d3de15e1209e4639c4fe2d0612d1249c352d43563f8f824dc7ac111fb441130bb5b0ec3b2af20094ace9f7feab619c2ce14c08bca095fa6447810a0cf27a742fac298500c3dc0d25a06838ab04a36ec10d45489238ec3e0c71bdddd6971936f71dfdb1239a27bf426e60e3942505d7bfb6866b5ae6ac0ac320dcec52002c8aacfb13992311e05e4491cb22f34c724ca5f0df59fe4975d91d8e6919f68a0365d13545e5b2e7eaf7250c7c83a772c2710830e0967990b812622d6822a4fe0d7000ba98f8af4345c571000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022e17f7c80910bc40c9bc643091caef8cafadd5db855481f2bbc217907f70a53b86f449944f721a212b768e2db32c56c734d8eb4b8476ea90181252667ef112855c9eff1b9a2c21dc0c50cb5551110e8b6d3ee9d1153465e70a57dbd65faf988c49959801ca28476713d2187c307824be69e4c4a5a8b7c88fc7b51d6cae1c31fdad32821f97c5f3e43412a50e131849ce0686633b5aaaf5cd453463ea33c4d3806026d49e5ceaf13796c990b1ada2425e8e66199aece4e1a29d616284a128081e583640922b682b6ff12c1ca9f7d840380e89c12bb02d4639a1d7f1f786447935d60cc15b49e4aa042bdafa8efa89baf78a4e9eb68540accae4a009a6bc148f0e222cbcab08f50f7d7d948afa3d4a2589ee9fe939c122c63d8e1dcf6e281953962adef6e468a413eab3f9ab456a96ddcf35d369b43528ab33fb8f5987efa6300d8e1d97295a4d80f25d307f9cff5f4c4430eeea4bd8fed893fec10296695663c6e256d8b71dcea97302734a8fc6725e9b9e5070b683760832f0ca9d51ad554d005f41e261e56a4f28cffdabe1550bcbefccb39b6f78e67f05c7c4521291de4a8a0e25184c84b24d5d1652086645eb40b0be9d232251aee68524993561564610a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cf53c4277f88245308f9e8c8414502e8e2127b644524644800809f6ad3946d7742dcf73459150b6f2e1db7f068f98679c6de092af30e427ecc4a6c99ddae73bc313882b2227c24bfee6b857d0f591e96e4dcbf07e44f3a6ae385735bcfefc5d51dc9397f3b33551cc33b33ccb2130c124ca663602daee3e2d59d32d6b0fac9391d6affb6a4a3f2d3d96d1d0edefacbc153b08062b8c96377378334e85d8b99d92d533f03fda5c93522f99c122451f6fc2f3ccfeb54ed7112cf09a03e8511e575226903eb6016398b80741c71105a332b22257ff4f5029e2c624c636cd641894af8ab142be447852a9d1244f53f2fae5b65bff43a1bdd0e0e6e9a906ca6e04a8c72c2fe9c08a8e650bb3bcf30453daaea687891bde2d8369af7f1f5fe4d2d05e11058c163be72ec9b9d293e30029555c60e54de451531f98cb8b92f67579b7d839f33bd785b0deb396a3d7f95fb679401e0a074ceacbdc6a85c4d1dc496ec907b895c015cf3bb55ad715b8e0e6a50f59722905ac3db08a401cad63b9d7c75534c6f80c0e4b3aaf610be231e9b6e0e4fb0c7b8f5ab5c440811463464b2588806c238e4c7a9f3183023ccbc45158a24e58bc5a564bcc2a48a5984c5f8f47f1c3b20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0435ede55f2302d758db6c09b2279a1524ee92f02e6786ace093b98e855e0b4bdb6b5a33600b0a92e776afd2de54b0d5bf30c920bc180620e2c170a48a18a8ba98e14a09a764c613d9fcfa4b45f5490e47f9d4e5c6a548fcfe42d2137f42a990185008e60e5f0ae27a78e164caed67562fe8ff0907fedaae49510e69c5f9d1269564e2573d0eb1c6ee625f785f6322b8db0e33280f7bde81da45f57234cf4d62dbe8dcaacf4e6ecbf5431ade5993a04d1bcb97939ff9503a621daf6591dd4f6931c038f100bca98d2454fb65e986c0b686ddecfe5a5240ee2dd652d7eacf85a57251bfc1e949ee1347cc05399b1fd238e1e5512f4e77f32802ac685f07b724bd4e290d847192ef833c2fae81b9a29918e8d8d96ab44ef7c90e428d9cca0e89d9497559480472029ce4ca124383fc96c3583d78b8eee3fa5e1aabf5c55b5a6b2d2010cd530fc90448471a02a2877af0e79c266baa32dd97f46269b4c3daf7dc2086914c2b15e9d36634709388a04a0a8c4c8b1c380cd7f4baf9857f15e7b342bc2e8f062d8d194f1f903066023cdbcad70f2f5894caa9c8e8d17d3b0b5785fcb18027d941d29c2043e9c541848aa2ee8279c40ba21e793f3e7d7ccd4b715fd4c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008900651f63710b2441fe4ed5415e6125c1aefd029ea69fc487c2c4db6b0025861b428ac452971d362f9153da2fc9acf405ea13caac2bca89ebb800cd30b41b6af09380a2f982ac4bf4d573b6c384e40df60b016469e9b05cc8fefda1a3b3fa83292473c843c6870678aebd69cca7d0f3e4d4504dcb4b444ae2c6dc0f1b9b133b9500e123a0af40ccf9b81543115005ae1ee4b8a8ed01c1a13747b6447be156d8f0e044ad10f64e2841d976ef0140a345cd1d86bfa85c3f7c0ba2759a79fadc88afc81600bf560904375188cc67cc72bffc11c26a651b84a89c2e01dafbbcd68f88ddfa592401ef0129433aed49c1ef242b6c883d2c9c2e82ade105897952f522026fa7a0534aef452d99281fc57b1a5d8a72b65003baa86fc858f26ea63664038e91e675ff5df2d8c9bbe925c9b4709c8bff8dd251aab240e23a892b3eef724703139916630890b61874861359f9e515d45c92ab07fd6e2d6ffdf12ed8e707af5f7149c75024ae41c43ccee4cc413d47649d4cb63750433695fd438fd069741f04661fba811d60a51a5854f3d99e58fbb611f887022a9549d83e2c9bb5fef3fc1363bb5f1de32dda8bf2407e9649408b13531e1eb7186425cbc729a4e89eb1ae00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d5039b200ba415533974e7552e59b05991cd21e925edb360a62a9e74161b7652977eeb1dbfd2541e334983b9dff2285fd8131ffc4e7de68b84694a0bd636c1c5cd7e04dd6a839f6766649fcb4d4126a31323f4ceb6cac344a610b96a3895ded1de65a4430eceb38d5bd19d8c3b8f12e2a26af6ed26a72303cf86e9d7147b9a92006948dbe0c8761f2985ebe698b41713f236fcb9d8b2ede2230d1b72f9996f090d16bd118daf9dc33ab46dd2e5b0d904d21fb08e1b76d3b9e6a7343ceed9bfc21a0543faedf32342d23be7c5302dd6c97223e1881004b5148e231dddb40277a89674e925a6c7ba0a984a165ba90570080397f1d4fd504a4fda6b2ddee98795ef0452789f642e3ad5061f7b58a3bad05aea5e4e96070a630a0bb55068cd4ae239634258f0e5c9672a86bf4d9097a010905701a5aab6cdd01840f30431afb51f554e8dff30f345e4ccefec9bf1b904da9ff50ab22680c34696cf317e5ae395eebbe72c0e2306eb11dcdbc2770f560c3ac110b64947a3dba4b520d48cdd839c981901a1f02d570531509fb58f2e86323b561ff6246940d36a6099956b6f5561c211c9382e780e142294a8e4517af216d2cd154e311613922d102dc3e4b9cfaa04200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ff2145524372863b9868a37d0429c140fa30472533b7b6a25af82387f21f5c72038bc6cd18d8414922e0dad94a40447932ec3f209576a2eee989cbb91b663e792293e88bd9bcb0f596ec1ec2644782725d3a8d95ffafc1fac384507d83d1011efd330d5cfb5ac45b43b5e0fde1f33f2a0e9c400b358a2c5333266f19e5f9a8976291abd3af2ee0e3a1372707bf009caea3106a2174cc251e671e283c3b6df22ca939c7489ccc603fb75f081999e7a0328630a9b3a4ad27a55dc345814641deacd6a3220ae51d09c8600b161dac004eb176a84959daf573f7c94fcebdc714f959e79c1dd8c51508437087374f30c8a1c4dd111a65d4742c42a0ffb0489a1d607ca08729a91961d4e5b3cf6c9647efc601245e58dbcdb71711db6b6135f25150735982e8ca4fa88ed746a733ad90feff6c135eb84f4aedd28228a0dd346586666d6eee8321b794767e105656415aba746cb54908009d566deb9ec1b7006f146beca345c1f24711626ff2e9c91674dce44068b9cbc49e3fa90a684eca8a5b83b4f3cb77eda68cba0715c37798946a33465f74d3b2e3a811717300fc816a2955bc3cae4b9e53d6e35e25a31f1e882e90bddc8dd0fee10654dc8acb845e0e18353220000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000127bf695d5496065307792c5cc3e5353cced44f00321c63cfd5d5e0f9ae7bdcda4e0db8392f2fecec67cf91d7d95e8959a0162852201ea4e53a7979d88728cf77503fe4809d04a3374d99be3f758dcfd38a5139a039d33d992fa15e121d69a7347aa529d7257bacab4de725139b29bcdf9704afffb81ba9c4861a32a9ab9f6a3b77129c799e48b1677a7654855f10ab50dba1e1870ae8baa87bf317d3ac1184b151753585da808f359eba2d36edcaac5c57a9b75a9f57149eeb238f5ef45fa42ef0db93e3046215fa38d085393ecd032b50b904bda249ae825040bfa19a6b987720d7fc14b672ac700c9365d40148ec62fcb3617424ca57f22c155c32206cbe247016a4991091671d17f51fefd4149239e49d1b7477f858d1ea5143c5bf175060cb0ac3a93022a800d6b9f3387e637ef6104dcac248c8d8fca9c9fd880654da794900e146412c84df9c7aa2980699c901fd081feec63d7ef15dbb345a44dcc150c4b7c4488e032235ef0aa2d8379d70ef98da2666d7fba7f93b50426135798a3aa9d5bfe3ad418094ca81effe2acc8a10cf5bc316388581dde51f02dbef51840dd1adadaf04bd034e15493870f1140be9ee7bbe2f2261df0b935eccd9f0d3b020000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a12b7f52d7eea7234b29425adb2b7b051dcceec1df3bb9ccc2787ca2fd8c62f0ba6666ad75fc2479351740dbf7109c217687a3c02df994333141ec13bccd4b55f5ddc1efb0a460319ab5302bd8125820fe92a973323f93e36cbc73b6db3c57f6be96aabff3403ad449fc871ca01e3252a6a73ee83bc0266141e835a39fb654b5222eeb2a481c28b2a9ebb5b1431be8ec0f31f8ba7d5418ff33dacc1e3e8140abd24793dbd248e051dc6209668250890b96a91703d803601c4030775c0a72a3dfbb7af2f4138ab6c94ec3c7b33301e3381a3ce69b6063513c6b554fe46dd724b5b325dbdc36e875f50536d4cd893ec579427a0ebbdfde5c937ab35b359fcb2b05105934af61486e793c2c0451717751def25bcdca30f01e883619f639c531d21d44a3ea2ff976258a6a313f2200c02e4cc5636260ac205d0dc1f3ae6fa8dacc456918b269d01d7234f97051cf728a1aecc481f3039ce60fef63edfa73757a8e21afd3b578e06b6268e6a91475b8b6f528fbb363c006bfdebfe90bfb3c4d3e4926bad6fb6b14f1629dec9678bb922eb504a71d8f5743399a2d6055c0caec56824222f387ccbd7eb46ddf396c9dd5e9f758070be1a46925d956993e176b338c266400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b9caccd46caefee5eb8f69e9a52967c2bd1482adcf024b6e3f8e4addc0712b5ec440c59afdc040ad097c099bc2c7cedffa31c7be862c65cfd4c4ddd56055f6019d2c6b2f1caa3502e21452881da3e3f7fb945b5e2eeb1bb6f437890772dcfd3630f624888dda3f71501b5e8c346d457e8e42b3826f8f3fd1d723b7f71998e0b63c68dce38da22d65bd43206522dec97a4286f54867478cf771d2ffa98df9033d1ca797f276d7f402f9724e32c2c857bb095b445994c2559286140bc9afc42027d4ae990b4889cbddf5fd53ec92cf93c4d0f172a43f11acbf335be1f5534c1a6e82c16acd2d82646fd41cb46b78b105304d473c2a3154e28483f7a45cd828793bec5cd906bcee382bef2e3b30689af9d5344bb575e28b618f9bfc101c168e7b46749140d26ba9afeef3ee5ecab6bbf0bc8fe54a387b86a855e8bca6be8d69ccb85e05281fa85bdf3ebcd57f276223b829eae4b0ed8506ece02c76731fdddc4dd580092f314ffd093f95a78e7292b8f874ed5b3246cca1f320ae9692be860a774136ccc7efeeda79ba3e003c9612a6e29e5056e04e45ac21d0e420ff9d69fc635e3b2f8dbd40f7b992d95031bdb2492af82e75f65bc0fd395714cba377a1f475500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c219a874632fccf491419cc5883d5d6a0bbd5ca0d65952b8543c76e28b51eb7113187885e37a3615550343c2c53833b2782e61e4357618b493310bca342f744d449f89eb3278979cb29ccc58736e070cb056b57bb185c4f1815c08bd0b75b42127a4aa68a363e08c2e1e2f940ba49a52754dd320b0e0419c24b2fc8c7e6080582072930af5e7a77878376743f42f969d6a62d41deb2216a474b73bf190f0627499571d30dc98db38c0618a58a4c4e369c8d9bacd47eaadacb1170f44b72836ff6e7591e7b4699eb11fa816660628bfae62bd9f0026c02e271f7a636da96b291e24989ab8a48e5d36e899a1225620929a82cbd0da13d55d053577723804337327d5555fb7c57caebb2f4c03090c1a48144771ee3f26cfb8cf12d283a247999954681db11f93a021cbd9f748f6d3b52fa955810fd7a5c766776cf6693506cb9b51922f1f2e5bd0da54cc7fb4f3d0137b9c06d84dd9551a83f9423489caf58d1d0380f1fcfb8e55a156600128bc5c76e6ac343468983b577f63a947208411a52f95aa1eb55359c16115180b017b521cc91455921bd974de7867827303fe69ce04efc8c6edc7cd63da79a2fb97b4a3f5f9081e92ad890492e92ac2b93a66e428ca000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a435fc2a9d4ed1129c14621e378ea247d9a573c24c2b37f53dc1c168d53e90ba8e635f593815d90732e6ced2157817741455ecd79f53c11f8a1e4ff156b0779f2e9b6fb7b80dca5d857c33e9e34a1ba73403e132e5d5a2eed8bc3caf257cb581b2d63eed839dcfe0cd467e5e0ec2df19bc0d3059e8e78760bffb04e8e09323fced62a06872721125144bea51e6013c0b35e15e4b3a04fc3498ecb75422a0129f61883711192a969809e53a8f2637b1f66ab218e7fd8edbe380eaf17c11cde000007336cf5f6854b8cb5f304cf49db975eae61e430ab920c1f23e46905e745d0e678bae5758db72414d63c82e922fb86e7cd7ad98d5e7e6bc87ff9631112df10d763748638841d32767a79e428cca9c6354ea3a45aa5ada917283a4d9bb0b1814b3a391833c16b1058725c0ac18776ca8fa7538062a5d20ad10016777528d85a0dc92f6c08eb56cceeb4fa0fb9924d84597b035d502c292a62795f591be97e4532bd13f01e68abdd67517ceecd53b296a7dd5a60b6cb6d9204f29fb15b7f3b4c1c6a2ed96379ebcdb50055f74da047fb90d97bbb99e33f9cfaeca079af10fc3fe24b3261b6b7d4150853cd29ed2829a7a88bbefe950ea828d12ffe463e44a9460000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000934c5fbff59952476235820f40aee15eaf5fe95b4732b765e9103c3a3425f811c1f652332d3571c41730bed1b639978a174b30996160841603d985b224ece2be4a6670a8cdc666a216ae3507530ca4f691cc1b17df0408c0890abc6800f22f2ffa82a4391a06ff575c8c38717b960d7988c64448e5a4f1c1a8329bf3dd3d63335425c135ccd4ed1f343fb07237ff712a1762d851d0b1d5a7c076405e0a484f96b86f925a20c1c79d28e8017ddee38c42763a17ea85c3f043e007ad761dcfd8053d9350d568266a611a161d399b2bc88bef572534328980630cbc9df1c8e29252cab5c65d58f693d4d0071312ec02615bb690630a34e881c4bd443e7af79c50211650c4c2b7500ae899d70a519d6da214871764ad854043245b74f3a336c93e34ceeae69bbb59c6b758e4a791de0ecbbb2922ee8b20d62eb88b5aa26df1df9f2a952fe085d41f80e998b38f4666e8607a2303599ea62da41fd69ea7e3a1e54c9d146488cb0f03382bb8f7c3894fc85b0ac9e870368a62db115ae54fe5723ab248055f47b0ac1d72c13e6e89e3043fbbedb295ca053df9cb78f57045486ca9f33c7c64974d1ad6e9d512d30dff9b5cf46851ef5e4c8c8b6fd0ddfc4dc517b196870000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a338d08aefe72d972545d050eecfc7532e9015423e145ad6c9f7e810c348e02205c0a3c230f2b6980780ec4291e36158f55810369f04935f25f57e817b9f395f0a8fe19364d00ff59683c1e4474104fef058fe85b81898c0965cf47d273a0d67f7c7ea24659fe277edf9863962b5427a2d36997ed8237b86f73298a42d516be98dc4a05f052c00f22f0a847266984e4d15d6572c190869ef81023eeb4e4d10b5db1a00c9334e22f87b97b700bb61f56568b9209737ad73bf0716c701b4708940de71c603c72f43414caf434d3452185d1a0ccd2e26d97b190bb836ec38d88e73b6898155b8307954bad538e3035b8c625fc070c76627412e57b789550be8966fc5ca34827517762d364fe10ac1cf77092ff6fe77254739b9f89b9991b9dc58f2b8235efa5526fdf55847fc2aa1fa089ba5c0cf6fd9a205c5c387770683711bb0f9a835eba2c026e71875f113142c012e37d25e05d19799a3617e73791c0bd57c45ff41f1a6f1ef7335ef9fee4c86571ae04992d0ff98f6f6878f5c056425e5575e05f258af498d957fe944f5298576d8831fe28272a520e0f85c7808effc791712e6e58204aa03b29b9e9456e1ac19a5fee35e5250adfc6689c64238571ecd1e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c9c215effd7c921659d6c49e29b62e69af0feedb8578e9f374fc147186b0a2682cf14744ab58be7c19f0b42d6af0b9606785f84a85074fe9a16f74e408f3a7b23b47f7d2f1c3eddbac33de7d1ecdeb097370291edd648a283e555d5babd38b5a143f6ec12cf840cac6c03d7faaca875fa8eaffa75c4c6dd6f27b15c97359aeedeeaccbe78c4b90a8685a385a510b638252d6131b0a8e7a8be68ff615f4423bbde257b9780ef82fd79e3c36f9d47184561c5378da4129c94fea311dfddf66cbe27554dc17388f427f058e00caaaa758b14c3cb7b4c8dff9ca3f1e9626a9d33135a365ee36d59c97f874cae575dbb7dff44533b975359600baf777005db295df620bb0427c086c6b445b02a92b043777e5c8c690e49131b19254753c460eb8ae7cba58108ddffc0d8e4216b68f3fe5834b0a69b391866fe199efe918ef335e9a23f0680625e30930a15c98ffef4a40acaa55db86e1baa26d7b8d4a4c40a94f1f32735fa7e3576d4744f0e194fbb72b412b6657dc98c94698491e5392f69ef63f9fb39a65de7a1febde6d07f327a7003f977ec39e973ca24f2b26ce62a3b4defa565d3f8ec17c507948355e25bde3aff428c4ca4699c6b534e9cef881160c68d9b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002560b68fec11cd0f0a93a992ccb53337a40d3c62331dfb4968245a94fbe988a265ba2a26e6a76fb2384fc5b5e538eb9fec0aa8e407bbd4529100b16683b4ae91c63b8979ca72c8b9cf994a1072bdbef317b831c5559e3992827b11d7f08c5c0609fffc1fb0ce200818ede8d72b11c7ab85ec2bd273f1e0024c548b575a72d5bc548a805288e12726ae4241de7087675d040fe351886640b82e765337cdf919ec8dd4e603f200919e1d0a68d2bdf106a8f0018a8f50a6d002cc7627c194daeb5296c1db5abe85ccf01eed39abf1f0a829f8a081a2af2fba2f944d560f490c7a0a86b6faf03b4397128b4bf5a7b55a532b17f4d70ce766392e2e306bafb3b0b90336de229b0cbb05fe412dde84e01fc90085bf13beebf5d6b916162da4a53f01ed62c8ba06ff8aab596634288a07623765851b2b4fae64521d32587bf09d0d2150e2752049f71e0b9e0042a547323609fd4885ceb5122371f94629bd1c67ce982ef96b7b2c504777f5eb0cc61bddfaa4ee7f804bf6953a0ecbac2e9bd00ccbd1c7cd28e9fe96f7efb6799366312c3dff5464f1d3552e86b7ecdf1b7bfbc6b59b84b54ecb22a73ad49ae25eac661142deda090983a2ea392c22000695704de0b4e9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008aed773805f0704cc7947a5c7587463816d540c970dba6422da553cfaafcbb558314a57c6cfdfb961cb4e590d0ccee53c57be865cb310a28e94d6ce2a509d928b5dba7d985e84f6794000aff6b5c3e7d085219df699cc7c6390fff484699dcfa4469a3e8f586b0db2246974cbcd8d48911a0d5aacd4c91efd151fe131fc3552a53dd2bdbaeb0bfdd5abb130e6334fcbbd74222efe6ec25a23d260858b93669bb713a86a06f9dedc49e07d4c12688674dc19a0d8f03d78c911ca14bccb850dcf1bab0e4050dadb7a3ed2420cdc06ef6e3c9bc376c756eac50a574995ee07884378c423cc0397bb17f0331bb91369268fa3db4063e983fd63dfa4ed9e1740b493a1520f7fb90d4c8f9d2098b3b6072cb49dfcd5706e950c4b18b00cce5903d603ec31173ae0401a9e4dfb19cd2ac4fee1f923b9671336a38d1262ff8c8f1406823727b4e5c5791f89f1527d30d23802599c7d8d2e0d5debed6deee78417ef1651b08311d54414a17e9e23251750ea2c9d3e9d14a6d653209a0eb9d168c8b3e1d6f18484db5ceb03e46ac755b3df96956cb43fd6078c54cdc710bfc1a8666dda281a4094b44186c6be3e47f8430244b84bde5a78aa4329ba947cf65a26b85e66ec0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000829911a5cb390bd6c8d6c63069dcf4a8cf167e4c08d6597cba2236eace43ccbd5593812c5aa9886912d608384b0ed85f9f71ce08688f1596611d7466ac0a6a50ed32af4c073cebb7cfcba15f3f575ad3582cf9ee73ce374f4dea11ab19478d1e7f6338268d31e2d27665215e1dfd88ea510c4e9a3730f9210989e773527f2de590123b5955561f70cdad38064a0be5fe98ebe763efd40b0005c2e475a72a5c1c5c6e8c52e21454a52cdc63a6b57a9c2780561d854da837f237ee13cd7c82fe044bc16386263d1e5e87500b165a5dea847fcf9e5dae96dab834fec14769162ca26dc7a01575749ffd8406c1eb902d6d94ddbfd12d90635f108ac5e9ab3683c57612a87df2846052906749c9c61ce12a4f98e024fd2e8355748f82ddbd1156cfda59d402a6a36a312a2f9725249edd55440087af0113ed820fff3d8c808172538c094036f2c1f74ebfea626e3213008552e0c9af0b6334b972aecb450cf5ee5ad2c287a3410a13acd33b860d0390c9ae0f595a2f3e158ba79a14e5acdc4a854fc061e80881df11fb4bb8533aefd518f53e4ec5c51bf04e37c8517e2afa49fa0a214e2e8d4eaa1c289a5c9fbaf429a0c9cbec07509d96b92b9a6d039c60f1ff65c100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c4a8d33643a6ac501bae1fa9370a939b7a20a469e6d3cc206e45778b8b31f182019112d1d91f3d705e490166ba099bf9d7aede9d198e4fd3df0a960049a74c2a7337334a5e7157cd537650fbd092d99ab536c9bc2ac833dec18cfaf897052c6aa9bfa04a04df19fdff6f8050755bafc34f945e71e89cdf203e37557549e35a8bbbf1d5a095d5376ac276603959efbcb35545d160af964e72e01fd9a5c1c9f42b244f73af5783e41d16852adbabbfb1749ef35cb8498bc312dc6c4e7e55c73dda5e00ef5193327ce455405e25f966297f6a80409ac3190a137050c634910c97290de57d7c875a283ae7dc560a9dea9359cb6df28b7f68a273ec140eefbeefc9bec52b2981aedb78d6b893e15cdd569fad15052e7a2506236ffcdb37e8c3b0bda83b817a4c16eed7ad7230c6536e5f8f542d61e8b845da85f7427be457830a05a4680954ae9edc21cbe719bea626ab02c49e3205cf9301254a1fe77c5785237d39467fa39eb77ee1c12451a736455d4c2c1a34e4dfe1673140594537e1b2758069eafe1b83802248ede031fc1f083100e7818956f1c8263f6470c83e38ee98e1ae2aadbeba14861a6c3a0a9ad7774fffdcc955496e401244ee9f559553888997f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000995c479a387925037931ad593a65e2a73bf5d2a67ca259e6172c683a24a078ff664062a7dca570cbd1f08e7e70598624607c1a07ca39638ee75fa32e2112094552bbd10702d6ceb6f6dc60bfeb848914f4b8f12e078a0239a56bd56a00df50e946c81bf95f1e13720a30d085ca6ed385ce29e6b1069ebe41519c5afb31e38c142db5be48131cd05ddc1f566eb92224fe15d27db6a515881d77e623ec71db0d899bf66dc7787962e6d34a175ebf50873c85bd12554bd434e99b54d06997a74058774f455e5579eb14a97db10f6c7a0a8ae0a11af2748a1063093c59a6733bcedc48f231239474e78695306a71c9309d3e16027ee591102f2cf2670e812e28697b9d981ab287f8ef98528a373d3f75e0dea8917811d5d0fb1b0b6a6d2dd9b151e32277c7d971859b27867fb240e6b61967d20f4c29b27f1ce1fa9ed553a25e13f157b5a9b977ea26aecfb0cbfddc15b356ff633e16cff2dd2ce09023a6b61b7e7ed9c1be0a42ee05ca0596d292462d4a67ef59e141096101211b2049635694ee744d0070db5a4d852599270ca054ebcdff315b3a727a81860170a304106d463f9aadf4fef0d1c611735714ee82d7868ef045a52be42e322a931aa8b366be38975c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab59fd044a8914f47bb25cf4197e4b4c84faa060ca6fdd5b4eb879bfdfa8277a66dd58561d696d2964fcee2d28412b55d325e2f245505979bcb0927a5a798fb79e2e82d1eccfbc22b5e19d546c47eaeb1589bb541ff77ae836dfa23ce59fd3b8d869643af9b7f97fbceb74a6669ae4e07b0ae55a345b424c399c1ea9e5351ed376a8c9edde6513ff8cb29bdd6167470e73bde9161c9fe59e18e659d097bcce30bf5d7639401a88fa43b01d84e338fc4cf9833eabba29afbd90ec81f468ea44b3fd8aded46834f3f28012d936fed4bff022baa92736f1c269af2169126d97dce978a7651786e1b68d4ab2fbaf175b7586f2fc2986ca5259cbd442e5800617747c6e1d202f929ffba736e20966ecaaab1f84907612c99b5bce7e8765b4400835521c12ef4f5ed62bdb5c4e234f339715e9899d5584d087e2f83a6a86104bf77396de3629b7c263fae2c4178a9b157dce5a614cf01b92576c0933f784d3be9b0a88d36b13b0a25e2f58b7cebbdb578c4a605f0bd00182f4013d62e6a62037a301fbe6a7bc1ed118a67ea393edf9c9e50dbf59a78353314787f034bda57c2d2e87958d6e02719def67f6797f7a53dd4ad1390ce7d174ac261c506956b55c0372766e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000203748f6717756af1f13b954e798f256a2802037f8c520f2a939b24144eae0098568c6b7d82c0ffd50ec1a2f2ff3fbc1678b2a579c20ef55721be6cf2c0721f955f62211057f7acb4c3d6b5480ec6608beb16d502d91489437556d6f8c8f7e0d3435d31c4ad3f111da99935fa3b26dd2474409c624c8f76edd12e00a134b061067d1217d6c36d1e9d53091910fb47c13b92a4c775d9f49da1e397eba1e09c7dd47006f19f2909f5d1be639ab9ebc91d0b7995650a16c99e68e438c28371d340010f90c0dc6b1b6084f90d0715601a47f16485dfed7b9222cc1099c8ac4fd5a89a761045b65538be08a6b2a1fb819dba7968a7e221cfc7f60b5f9eafdf65725a8d19fdbfaa393ebb1bb1278f3c3df83a5370aa89812b179b88c9eceb9c4ad25c493dfd52b0d2775eea22ad4a50cb1f7e8939c3f2d87d5dd04149530d6f9250453283b87461f17cb6e95aaad6f04abce03ecb06d5f4de4594eab079980d15c139576ffb0aeff7382028f27ca1cb11655b4e5c467c1e8cc3840ac000b2f1f74fb71088414e7928f9ebe24aabb2b3bc4cce1e0025c810d6c8abc8a6d34a3adabce238d63442169cae30d4f8f619fb4b479af8dabe4cd1eff45dc8b8ae772b5b69330000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045ba9d5bc5b5c9c6edbb337192848f3fc45f297761971069703b6029330c1dd8e45ba4fd18469622d62b1ebfcb8fa7fb0ddea3038b9bd9a8e5bac6403f45487d8465483e7b5fc25d28422b3c2bec7ce1a1aa13aa18da0b0ad564ec5c14cf0868517eeedc884d4236edecb7e4f828f8f6b7d014c9453f53a2060c6ad37882aae25c18875fceebf70286864e429f137ee464912ef0d578b4ddbe7774c099043a9d2c83f6efbc157a3eeb1ba9f5d6a3d9aa1277dbc8d1f9b88984b07cbd161da2a46b3e146163773788cdf8b72a841c8321c919eadc0c0cdf1842c332c8419a8555db4214da9b3037b05e1f48ff16456bd17304cbc66574e8238db3a1412864f9b04250ca9a71708a8306900213a50d55992806b85cf83996daedf09a0f0fccfa0dc19943ce339a378647e9512131eb7bbdb187c86105f3db328d4cb1b33cd2d5c48065615949228ab20e734d984ac3285975fc7e7beb0104c3f158cddd384ce8f205066c4d8a60df15f813742d29cfb311b66541aa2abc76ba60debf2bf6a2c5f875ad574c581216e2c35075c4eb55d4b0e3c053e0fc9c1f8155f39b5edf51a009b596d0e69a5ef330fb83b44ebb696c08dd8fe2679c4662805c373b620d8a26f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a70ce7a6cd646247bcbb1a735ea60fb1f35b4606aa8329c92b6b01ff809d683a2b5e173acdcce593bd37d0bca99716b9da1e04e80e5ef97fa4f0d18ed690a7a36749ac24b2d97cff7f40243b05c7d03745404a04d5dd98e0d4d7df0ce86c6f9bf3c08a115a7e231fa56e51ee7e88d9034ebc5c063ba096510cf70bb3399327d4456c94be5f6e41deea672815bb53fe3b6fc405fa5580c7cacf151ae2798805c32fc1eb6387ec2c75bebf5a36ff2ffbd8cef708aade19873be2269f413bdd766f2fb17e5af661d52743ac54031a76e064b33e70752a09329d61358c02277c579e08be1cb71b69684e0078068ec9adcd773dc1a251e475880821a38a4791f30cc20cefb26c3b97c124ee76f15b44550661d1bd6d4bed2ada7683f8312e80ded8ecb2ccb2921e1f797f58b7cca80b9374c50674a9915f364823633eaf9d1c310b7fec98eb7413e06ef0714cc7992be7b24e7265758fd6679348fdd4e9c2570ea3cb05e79655e3583f6b431ace55f16ffd90e6d1e56fdb6c565aa2781fa4c0a8206d9cb6767b91c55a395f9062bcb5aa706e56b4e176a92ed371be1dab62539b63340c4d3395d3f168341bda5a629b95382b76b267ff466aed0e00703a83bd5825990000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000291d614f10144aa0b5dc66257462a091413f8c5c6d57a307649605ee20f24974a136493842f696cfae2bf9c907a25010d4fc9f3d695c7a427cb278b36d07860bfac7268cae9c92f8b6191db97e6d20cda2cb4b5e85f967fcc41b6f01ce9c3b514c80df9d483e4fb0412261ba077b05d8df7b5ef545a721ca4df779f9e44dcd68586189287acb1fb6847a7a88525b3a34d96ec201506d51800a6afe64c71c4542b60bd14e876d2aa94bcc957b194c0b0197a6e37724233c5f0645d8022462d1101b5cd711ead0edde1362d45e2a9f6deb759aa0ec9f5b7bbd2e27b395ca5b68ad9abdca195d7c1f59c6747271ec0dfdc85fbb56eb5208fcfa442f8838bb7c78f47a117d1ba4c3b15e79b87e94bfb03f7a1d6eb0021c27a5050bd6829fc740f1f1912a2d6faaa265f3e9d773190b0485163f1663e8a894d997674383d955305559dc7a9adf34c8e6d4e2ac2d9d2ec2d0b5f3fe4e3ce7f9b444b1c42ccd96a3389887f04c285785b96bdf09bef758f564d8545a68858c51dcdf223662a13f7e0504505655af43b866d40d497c06bf0ca6a76ccb669ad459fe812d863f9215adb9f12382215fb01fc799f43c87d56295e7e9e1a80bfa93633dd0617916efeef37ba200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e5c0b7727acd7e17daef88a9a75ebf59a856da246337aef3e503fd01986ced8b4ad8375b382355f0e2ef88119ec1b4aee794fc53ec2fa5b97cb25012e7f4fac871265bc13aae56ac6f8b7c5202899d5d8e466a0ef1cd41dea23b05c09ce975216cbca73f1ee000fcc6e70139c2fd90bedfc9235423ac75396dbdcae1bb84548450c6eedfa38919d11abfa73d006c4fd51453374b51a28254cd5440e02bb06b05537a04ca8fe5ccb9c16acae7d14da06f3052b4df00540e8c1120e4180ec88c2c7ada03af6ff55723f59d17f78e2d612ba72378d81aaf499e3c70e57abf3fb8b85fb66a5e7270fc64717b98b768483088c4eaee74ff7fe3a723527f2099793824f6035cce9278435781469165c433e6371a8778cee2aee7d3deadd6a0742a3832d48b7b7faa0c78142ed22cc7cfb90ed6d0c7420c7e1dea3ec74647409d234baea6e30f2f179d287620c90604600193f4f65052dd9764e7eade8a0b81c54240faab8c1ce63315852c1168eafd8b7b819589e521d36ee8897d4404164597922ec3cd2238c0c90631c73d287a02c63e71ffa5cf24ae486fbc6dba1c81fa81d847063e257eb6c0170cff88a59a29c87c2e85a0e9959aaa2eb909e1259f42dbae78700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bc594a6ccdb00ab8bb795aa0681f8ac701950e606c5daef99fc60574b5f7519cdf2833e5a2ef626db6e009b9889b2404a23ac7fcb50fe16ff0793036ead9b794ace9949b03cd60578071f06d8a4477bbbbbbdf15b2271c8da1b166f61c01648b93283745c8f61a1495e14a5618102debb93d13640a7216b7caff407b67ac7b209fcc9090daa2b4db91d25e043eca99422d0152772fc1bfd018da1eca5efb1a3ddc55844d8ae6a9948ea46a2c3597554709fef31c27873fcd9465a4953211c07c6a7771c39fbc088099ada4abd76b3e6a34dddc0755698055bd73c93faff91853de5d4fd7056b9d521f6c67fe0fae38c67df909102ab0adc41dd8554aeec358372906acbb652621e21bda74f7f3334e05798d643afb6ad28c755534bec804b59c8f1a015ff8c147fd1f6ff11b430300ba037969403cc73c3b27d58548c9bd01b47ea5b9955e0a9dbc8f43f2281cec6b818b9e7f133843abf221a4faba1d08d43a64385c95bb32bfeedb6c4cebe6efadae1b812d2feefbaf8b12b32375bacd378d317b01cdcfc185a2e38ff1c390215ea9aba40925f46054ded0c6112021b0a184bea215e1790ba00c11eef25ef007ee1961ed90ad7541f215d31e914289addd700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ef5df188cec17f4cd8ff5174018179599a95d0af6f7e4da6fd33c620b4ed64d6cf3307c41b1551f643c05890a80181f4ce0ee9c5157165d058c1e9b5c33ded175dcedcfc9eec14976044fc3c391023ecb2ea81553783ef2eea485675449676be6248c654e5cef757257c1c2a57a443d4390e756479ebcacb60d0aee845b988a40f4e266af066b5c903523f7f26f2777753fccf0fa35bef4fd68821f7970c7d9931fcb393f9e9665d6d1e97bb9b5b89923f752c095aee3e7682cb55cdb3aeb0b49a84ebad85a4eebd4bcd8d4699d207dc6fc0f8aef0b2a7eddffb9ff10fcfa03422be5f68144dac2ad63821995f3a22b81f6dc940134e9f05cccec1cee54769a4c69e53337e4fd674676f09343665944efbe760f85911bfda0831f4b1e0ac31a6d5db678c008170973013ea4e1642d24f507b684bd618bd59f2faa990bd17da11284e8ab62ea18d26b455f01f920dc44531f2256d1f23750d0d26717a22458cc3d3dc638c2c30397c0763f7e37ccb3a561672a9db826e7247f180419f58d27a9ffd8982ccf9b29faf80ec26aa5a3c0c79e6bad4ec67304414d7fa86c5d54ce7f3e5e7d253d1150905543ba57c05973e3066576c88604321d68952b2a46ab407100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002db614bf1fc67f7b6cb1921a79781185dc7e199c73a1edd342dda69fa68ccea054a4517f2eb84df6624de52c4dee82a2fcfd5fc38e9a093b486aa4fc063a4a56502214307c1490621000d3a50cc89f7907b9d6abf30536014db53a143458d3a0c1e44855e8da3f06a13c19d0477ed242e47c106f08a13b9c1b954a17671ca9f102d25968a1f3ea94f76568304a062c4e7e6177440fce2b3aba8b6265b882f62977848b25f5fe8f0eb3370b1f920876865213e9e0d36e560077017121e7b3805a526b0a901563703d59f13b0f71f2a8fcff723043dc5b3af5d3137faab8b9347e5b5e00702eaee4b3e86bef268e4b0060b6d683154ca15fb53194dcdb8e8a5c060faa528682c51f3310520fc3ca04b48e01c4b87b43f017450d36ceabb2ad59a8a98787c995bf3955d0cf83a8d93b380bddf5a66dee23b208cfd2fdeebf779659bd935491ad8f356417dd4b2c1be67732979d847745b388903e2ba2eca040698d1cf6548d83bc991c45e1969b02e4c21d379ee2d355f4d0d19e18043b866cbe44d6b11e90af517200995b9f9b7ead951f6c98dd88aec6237479e4bc2503765e7500fa9c74bd35b9449cb28349b65e458520376f06ebb273c72e44f34bf6e7d46000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ca12662c0ac82692d6774fc4baa3ad65e046cc159ef3af1e234a1a3e33ec65d466c44eec70465bc20b6a5ec735eccd2d1ce88085e8aafacc12fff45f833c6104f8911344d9a5bbf1eb6f55c2724d27667bd35ee3271d5282054e20c35da2914d499afca39f431a4753f0cc00c552ddd4b4a6480a5381bdff715256343f1c93495f71fdbe032da4860593f4e8d63aa1898eef3a5eca4055043f14c6e2665ab7b1dc42fca2c504e2331958cd8684e5851f67aa1e866a96089d04063735a1514a3fe4a648eeeccd11b77fafe71fffa21dea818d56a2504931fd982210a3ff70bec348a95507a11fe8d80cc52728be9549d47ea12b01e3dbe32d48fe98777b78839a3256616b265564a155b5536c476921e0e0ad8975fc99e957f226bf9df247f7b569197e8b9a01f341fab2dd14b8c7c9f8bd358224e7b6bb14a44ae10b641b1954dc9dc5fd95e1d665b75ac5d5fe0a8bc0823b3a0acb446dce0a4fe2d43b0a93086c93e51f872c7d68dcc64bf7d01023327b5b186ca55e4530e5ebccf53ec657ba3dfab12efd595975fda4a08bce778bcb65af116ce4b6e8bbfa0f7281270e601fbec87b89b0c50391c05985b41a788a31eaf5966a764eaab739482f9b2cf7adc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f219c0460bbc0f57865b4f6985327fc097a7306d89e63ca5bc91ab0aff726bafd1b5707da93f0dd981e993a23a5473d43cbeab365180981164bc54ec56b04e4881143850620318f8dce315bb84f9b1c8818bae1f4d4d84f8024c733ee5b4a9d07bc0c1c310337bc22a43a0095150f732a3432be87eb3cb4a8cfd771d63cb47a3f4afbeb2ac727cfa8600a5f69bf8ee6d34ca750f0258e3d24c50481758a4ddb19edbdf37f7976649fafb055b66083b427cdc8ec9f88b33a1b459bb42b7b7e61d11653159e98b45827fbe0d18318c6c050cb86074fbb9c5d3eeffb10e9bf882d370a566a5be53521b698f71d422c6d28e58b2d37073cc1b039ca1c6773b0f3169a1b627f60de49a36aa9f9062139d6393e71a8d964641bbee6ca1bc7eb800426a052b2662ea99c04bccca795aed24f98d9819e83e55c6e831665a9f0f9f401aa61f79435bdd3383d5a5e8e7eb95410541d4cfd0de54fe71e129f5f304d34ff5b3fc13f6bd2ceea0d3fc78c1d3cf9efa9c5466ed5b3ef004707313e9c745ef98c4fd1877fea50ec7045039e00efe424bab9eacd9691aeee8d5c3ff32c379540733226381a62062c362b6d4356044bd1a1ce29d99c17c6ff8163ce338fe41b7e970000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000818062508b2da836d5fc98b56f8bc099619c0f0c20df250558f88cfd72b69edc3e88f9fa643edfc9e948771baa7a2313e91405c27d3a954f4876c17c17a41938096cbd38f8c35f102f67b558426ed906b5eb4b1a4c6527c0d4197dc6c849aea08836e0f5218e883ed88f59865f3c2a4122b177c8e484049105f6dd9fee5e3bbd5666b98c141804b888e2d50695f93c8cb1e78359e4bd9196c555c4b263925b76362668e79e03b1e165346af9457531489795214861103d5f390cf2716d42bc163b75668ee6504d2696cd96294b38b59425b263da65a6fcc940a15e1a3f7cd4c268734cbf1366588f684f2232374d7c04e54c05999cacdade03c71f774c1c593185715db38fc8c211f33fe61a246320507bffe229d7f4322f729af031420abfb4632b05dd68edee46891b1c3c4701eda8d42f7e0b611f865eda3deea3bf14bb46412a42dc1032887546f4a5da8251822a6d51e91a70d3cdcc3003966a4334dad3249149beb5779e00149c7fd48e9be3b994628a3d48e4972af3b37f85c382f6fd175197d5ff7b5bc34f554c89b248992bfd83f6eedcd6e5082d5b39ff43788720b5cd318d93f48f44d925bb38421baaaaa28b5c2a5d38a6861840974e6f6f12a000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001750aa3acba66cbbe0e8f7b3eb350f1d5b508df3c002db4d50a02b41d6484805097f56cc7a18a8df46ecd0bbe89cabaa5932c25d7e7aa7d1959c4f1443be548b57d38e525d1b4531258aacdd8c68e221332559024d4f4eb0f7f8810c39d3daf88bafb737aeebd4fc6e282a3611916520765371b588591149e810868585ff6bb4cbe25fbfa5edc0ebca035f6f0d1f65c5a5547faccc150de11df1c5b88f60c878ccb1ed1bcb25d136ecfffc2c17bac34123671fe6b10a6fd57ced9aa37428dda019df336ab813dbb22fd3a15ed47c4ac0fe62ee8e88b1bd9732b26f5ec8f8bb44cd25405b62c2795c9f3b1a2cc508eedc21d6ae4b95b1954e6d0f3e87112ffb077e8ca0cb96d02466e528f558803d1966e89a651dc67e56d32497e49c165d754130dc83799b4f5421e39917b3d6b5284a744a6e15aad1adbb0d8f6d123bcba3f1912b9ff2ca3216067cec6934006b37e5ec72ace02cb69cd0e2b3672277c77437a27772cd6160451fbc91d5ddae9687d75f05c4fe08a31c25e8c086e01f7f29b26ead4af38a4ebbb7238395a0c4ca8d3f407071c4bfa1c296c68fe01c0ae7e794d8bbd64e2acbd1c0fdbc1f8fc17e425f292d149c017781e9b56a6e638e57911c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d9517ea63b13ba155b3b2d17bd763de67832ed3d4a22f68aa1945bf432af71c436084e335ed8a622e8f4715f91c37b023a82412aad1fb428aa015f61fd98dcfa058f8dd047b95532dbc265d7d3e5f46eaf55ced2d161ce22a6b84a2cd85806d5b2d95116b5a37f83776ba34648bc2d4aa53e3d86692eda4a5b98d71b12509230e699036586c7d7c1f4deed278ec3d097d76b817305e242e91bbb75c18734273effc3c1ef18c74628d1a99fac0702c67275a23898fbce38c2e2ec28f571c6dfd1d63b46242e467375fa88cc464de857656f325ab6b30b8ade87591c54840817460b2505ad0939fe464f2426ed19d4768ea7b69ecd0002dc0b889605289df53daa2526f8f4978e8c3070463d3f7a183241d0506b79acc57e788de1cb346481ebb6e77bf236780b975e3cccfe20f07fe2b3022f3f57ea4bdb3aed132a9b2e21f25ae28e23693a975cde4e3a12eeac187b81c8bb38ec69adc4b675d327b5034347dee55b8849d5604756055c423bb1f5a5cde5cb8707492dfe0619e5f075aafd91dde6f5759835d3f7517fe39be81bd8fffc9f057b0d369db2c708570ad265208ed5cced1cde60f32c7bfa65c5924f12e6b094912a9f8fb4ef80e914e1c83d24d4b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008601aa478c6b18bc955f672e3bac7696df986741bfedb7deacb7d6a2a27126c2c71b8b5da9185c2e0f03e1261d02de260a3d5344b3d62b083e14b2693a4ab0a2de19883824391abb32ce1f58cfdecac87a7025ff998fa5a5b3e5f90061ef69df13dd43e2108413012b042f2c0687a26a46d96d3dae1625bb33b537b866b37fd980af429a84924495deb948cfe6fb7c3a59ba5554f6b54ba7c0ff7946537ec0408480b1a5221a1ea8e5df70dca2ca5918ffeb9ad3e488d5796bb7391232f6301a897ec7da19ddd98746ea93273e868da5a23ad1429dab31cf78d864239bd4c8375e37c9e293ab794795397576c4c25cb001d692b1144e20e3c2197b3e3986e392da620aff2a7e99a13d9ab7617b932a387bab59aaa07d94150167c84f8cf89ce61e1da8308758954fed92be81fdbaa13a7da7ee7d37a84e2637e16dacd314e92ce42be682d91256cda0fb86bf6c1adf749cab97d270c48e30c3484b5f56eb8dab5ced3db6a238b82ed1eede0b617053daa091b339c217c5f9d06567e89a514edd1aa9d3b81d92622a1352c94f572768fa7bf90cddeac00e30c287ad1ac91eac20df871e6e7ad997b7b91504f3b149c7851554046e1aedfc94f25a66703607409e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad7fd207a9da9165f6d778a1920a268657c9de918eb21491ae6db0b43f32730c9ba483a2716eef764b35e2576d6a5ad0c2d794b645e60523970fc2ef0e6eafc7fdeeb47325a5ec826069ee0181b8eed3dbaf05943c6146f54ee71b2081e3cb8dbb2a0a7bbad7f92f06870e79792fd2ef40e7aee293a31898dfb27b73d4c0cbcbd08957418326929aff2c45b77c0772adcfa8cc038b45615b5b5477208dfa1c3bed3b8aacc880d4d66aa8309c3376f602ab8f3b39a1cdd3c987f7e6bf67cd6574a07b565109c7d807e519e474a087af181aacf10348d63290c23085ff5a5b0ad5f9ab2baecbfecf7497405320d39d78b3174c64ad0a1092bc6cfde0e2df3a7a280ced44b6acc605f756cd8229d656a538a560d8df25ec89f58c31f0b8e47b46e052b7062d03bddcc96e1c217308535022b8e9c9a79f7c49481067658f6f63be5dd5384e1c9813b89a3f1800aa69d3f1e63da1643071253df1c877fb03182697770e1e4159c879bc5e334e5c15600c3b67038e6394275daf29e58cdc1c4b4d0fe72bd23a35b0131a194365d7c47ed589d4c9f858825765e6f90768f68665c9ffa1b7096ab54c12921361738bc3d0bb1225963a5cd32d6d361837ca28c81998186600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000758cbc1580a877b077ec6912929d57ceb30953930ed6a5bc65cae0ff8af12791a3fba9732adee459cc635bbd0e4460c07c43c23516ccf6d4ee815bcdb033df73fabddc3adbdc5eee314498f5fbec7c1b3649b6062e886ccdd3dcd13062da2cdeed2500f34bbcb747d2c63ea69b61f68ac53187c5b2c1ec3160ceb0215a0148092986b54ee1e794baebc0aa16e73ec198f5e5027c90650c29d27146c23280ff798d9d71237a0795691b01c60eac487434835edd7c67749ad576d233d1f9f02af1ef9662971ebb4689acbb28af5cbac1a644b73c08e49390280c6e8c8a97b5b32374f42ba0a5400011f5509326df3a4514aa1a0e075fb4935338ddbdc9a5d2f0cc1bb34f11bb40299fb6f906792f13e74f7c05c722a51dcb7aff8d8e5fe1e9b092505711e70093572faf12c021c3a865d0aa25623e96d9c9e1ae0d6a892d1b8acf03ca083c6e9d0533507216bafe298a2efba84c4f2444cc9e8cedcffc2bbed2e9a51b31227c60751090823a21150104f7672a5d2c70ad93937860e460fe646762e927d7cd454007ef91181a07f36257596dc8b50eceb22bd095ffb1625bd71b221936b540431aa0d38654401577bdf8dfaaad9c3d72b5977a5f401486f2b1e4000000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484004400b409581d71c1f211701f88b039d5e21aee946dfb1e9c39d8a5012855bef29b4e7060ad127c143b73a96973b5b8bd29f000ee0f24455d1ae0c4ec263094d0a7a48e199409c8223ee71b1b9f56bf95c97c2cb918cb6e18b6cc4393c19156f081155fc8da2dfa64dc080526d6e5e9d818389c5f4c82b22a090985035bfed3f1a801188a2c196e242f5b5630bd81e5fccfa7ffa92cb93b3f4750af415102b1a20ac12c2bf1ac8c74be72de2b874ca6783ed9823e1d89222a336f167d4a233151a3ac94d8980d364ee7bc31d2320ca49b6db231fb54967d7fb11dcf520679352129534ecb94026b0075cf8e726836ce13db6f7f0817f8acd922f7a7a7a1d59f802e984f07a85549c3670a1aefb99b4020f92464ce08c6faaeb1c2be03e5688282fcc5b9d61996fde0bf95c75ee1ea2294e3b18ca67bbe7951256387f48214e153032f0231f3dd7420440bf9486852ec0d262237dbc5a88732f2d55f7357bc6240a5e3e5958e00f72d19838a26f2dbdb5f090771a3a71ce927b4fcb726360be8018067200504f1ca6dc0773d477c384d97e0b70b0f8058027d67d702f1964c38117085f4affb06a3f82a11da9894c8bdcad297bf74cdeca04f4ea10f6f6b311701bd772eee1c8673a06b2484dde1a56f295d84fb969525ba0a3df98024fecbdf5209d6102d1ecaa6f50ff32c0f4aeea46f1e899c5bcf032bf2acc40c8841e6bc910d92ed510af31b1b7193f33161aa4235e834513d88d0ee515f0046661ad7ed23002de130564a5a8a8c5b713e49f46b08843ec089a5a70e209a9e6e7307a061b125930ee54886341825fc6b57a6cb824b4b92df0db91e07ee4568e3af337976c058fe43f1c57c88a02d383c5cf93541f536e2fd6a283b83d896670a8408fb3c52129f038be34059cec06e948a7642eb382b7d0c02c4a2007a595db53ef00cb4217eac41bc53931ff8dfc0070afa2173242349e8ba82232ccedcec7b61169375609c851ed1ae7c4b54828b8433c29ff16150e91467e667b2548a9bc4e453dc43126b3b2766653d90088ed7f1333416d5709ae1bac5c985fcfccf8d6787a19094b2660fde9c9a5074719f3836306b8464fb59481b9b0b4b4e8b4306251e8c84cb30cb7f0510fd5199cb7e4013dde52e50dc8dbedaaf9b4b5e49b04095dc09faf610f0fbe5d7367f5e75eedbf54acd7c1974fd5c2a234a6b47580a80c2d61830f4f2241373e49b0b1e444c0994f63f8b3b2be7ac39888ebd8574baa8ecae4553c050f1f92fe635c729b72220d1708e1fc46f50e401e5d4974718eafb623f76796492a68436df67a01c77be46dc987a184f89a157cbe6fc1987cb66f22b6d12a7f242b7271ac4a60b5750eb57d3a36358855c4eb1971f76956df2feccf71af7736c827a705556358f6f89725a55f2958b9c48a1deec1be9ba20ca60f479ce6b0cf71204e6e58ad789e2fd65660ecf58843a9bb9fe1b2c87c44e1ef445e6a1181647d0895c04a19b8a3433d77922587b2d812e65f6f34fa98d2c9a652b0bad82a8d751491312ea20e63e5d3eadc22c73ce79e905f155882fe4c6eca1e0beb8b972a1f0e7906c2dfaad1a9a26eee9bca595c99282ad8ba7424e92b7c6871752abc1fa02eae8d05821677dae715b8ad4586d378226bef4b85716ab9cd86a20aad9c5ef01014ea6f209d9e28d81c089b2590ce9bf80a9239f5eb41e2e7eb5ab94067d532162dea931bf27c5c8a5271a5737c9d66fdc49aa6503364b194f1abc816f8aeba13a0d7fd757fbd04e307a6ebb24b18bc50a2b25db5c4ef1958ca3f75011512ed12f5c023b1f2b8370b522b464d00cc0b9ad2470ef2ec582f3b84cd0802bf11f72f7c7b97cec3a25c951c0146a56f104f8a3d6962f7406094f1b28b0e464a628410b3a814e7839392057f8fd56f9081834b8258497d222434b1f2763436e74efb12d28d45bd33e383bcaa98eb65fa4abcf97387bb8886c46f069e0dcb62f3138c27c68a6b7bb991a976774e0a3107989d1a81e7aa466f2b68f8ee507f973bd9df1e29478f88bdcf17781b43742f581fc6f796fb84959f61562abd873acc02013f000aefdb79a27d19f3d8a97b1da3270e32b49dcadec223d3a696c53c004b94610de955e59166875f3f52484152c2cd8f6c90c1baff6fa13b336c5cb7eeae9d0b247693f1d064d33fe8ebbf657c8d734940d65762af136b56dc8931a6eba2181f131322212bc2ed61ec37e6c6ff98414de9db6dd0e87709b5de01423f5296d0362798cd89a27f9deed7967523c28e020b6f6d234dfebc215cf28540d13fae43cb144be3eec0aafd64f045740c62e1995a4ba1b93b0659235569c8d6ce42dfa6f52609e862193814c75a68136e3c4159e4dc6393984eea28acacf47aa21f1089e20951b2c7b3f34c05c2550810ccc96adebf75adfebf5557f811562a05ccbd85e00e189d5da8e0e8daa54f85f83662ac41347f9e337533f700091b7abb9e4ef64603744196a791bd3cfbcfa791629595f2d4e85670e0f7086932cea9d45c08370d303b22726d3a17dd60f03ee6e1f04404a56bd23ddfca7974931500019a1c254f0d47a6e4ad9481df7ab2f87b42f83e9f2c2227638eb66649d0e4ceb34b6d814701072511d0ebb6494a47e99b348a19a7af8d0dbcb5401d1d215e588ae1b5204d27b478c70379baa65346d0929fc18728b3f9944a6df0b21e234ba271241cfbd017b6e159093c4f8964888e27fa2ece9efffb7d6e0179da870de8d7cdea709f7f0c6c8372baf9bc2975f2e8ed6ccd777a7dd9bdbaaa2c91765e3ad3f20e91be092a778791b8db16628597b19a6c6b457426f2c7909ccfd30a7d3dca396433bad82a8d8f4e8096812404238f8e46a5b06cbec19fe1069400216829905bef56b11d402526c163fffb9bc92095fa62df6f1a3b0560d610b25f7f6be79ed7c578d10dbf1e32914e756d1d7e3e0c62659eaa7df59c9a50e44a0bb1094f37e7e49d0792041097fc936611701c928742cf14c28752c6bf85e50622281c1d59532c5f760b211d0fb0edc2577724580cf645125ba6c13057a624bf620d02da040df1c717e9590a72288fd0f3c664be04cd77c4573695402f5dddcf06efdd7d021f70135fdeb31e24f4ba774d558bf3cd2108d68f6e8898858d2cba4ee95040851b2068f1108700179d95136fc9ec8820d08d8fec6ea30c9fd68bb4d3566e4c27e13529f31230145cb7a8e4855de2ad4f9d40de955298718bbdf025f058e0928d673d0c05d2cb0a22bfd03f72acf8228afd6eadbf9e5bd1d0af2484e622750f59679ecf512985269f16a6a322733ea63884e44d132204a35993b866f1ad55215d13c0fa3f0cc82b10f8f64e4135c92ce66d4a2774827e68139faadc52e272692720adfdc3cb581bb4ad742e0e8050abaf0b8c013a9d7e75d76f5fb36a89a4ddef9a1dcdec7e4801171dd7f8eee714e7fdea27a011a8aa9e07086964349af8fd84dbf286996d6c1a42beefc2b5ff7a49e1ea4ec9d162e6cde93467b6ad29e56f40e1dc0ca89e2513e635069e0180a09eb2092c0a2d8bce19d09a7f32bfbfff11962c71a121ea6e2e639835c7bed2de91a4363d6c2f3814c1624d6e0fd6555eb3eabd46ecf3c83905a5295937a2cafb81a190f7c5502485a6bd420675b56d704d0d30a274fb95e6191f4d14e61214ab6ccb15b8c9c209f18885ac0e9299c8dad80e25757fb464221f80a0fdc30d58c3eccc5bc89b3cf36fe9666794d44d1a70188e25cf9109885215f8a831f11287ae641b21fbed62431f7670ed98c156827e4db924818666087c0d3e86434de1b4ff2b5629bec3c5e672c7d977f2ad0be8b42b77234eff1179eb1bd32db6a78e270d8b70694601345d64caa2a24dd928463704aae4f67f50eaf320ae933ce349cf99889a9fa33108ae2ec2731774de5ca889e9d9beaff9f872f8045064e853c44096823f11ab57698b56f62a184955ea8fd462cba0ac67b9c25325663f92bfc0b03f92ad88b9ad263025fc6c4dccbe025a9dcf6498108f1e2b5402b26febc726786bf9aa5a2ef08149162d3d8d4fdcd3a4a4256053d7bd97ff3c20383b560088bbab1e79b91b274632b5a1b94c3a1c84e8ad9dbde7783f5f551c24ac74ee7555779129241e5f27951dd3917be902164161975408540da143d62d2dd7f32a9346df7df6eaac9fd1c6be162ee67bb657c50f8c510ae03b4504b30824ec3d5e1687014bdac481824d93de30365b5dc4870286555f9fba262d0c415e2763d8e22b456be4ed8229a90f3d486df615401b5022a272935dcc76b565c7bd16ded4fe85411c0c3cbcedc3bc8af48b3bcafadf6d158a197a6544cdaaaacff623fd11136de73be633b22d75c8ac8f4635aebeb088046194926a8944d033401b163f87ebe8850c7bc084def866989f2db0972c83fa083b4482f586b5c35881301a2eda24e7ae8bce4343b2176b30bd9b02ae4fa567da20eee23b12edcbecc8d3206c06153e773f1618a9b00367d735bf9f54155d2b7c76d7523dcaa4db408c611b24c44ecc671762c4bbc5e3407f9211a918ffada5e419c5a44e8942805ab91f211e11131933e29e8ef4d8286edfc2b4b972bf7f37585a562bd1b5673f4dd8f01fec2cfc560964cfe56e87753d94317f24244430b88b2f2854f24c77a0c125a7256e55cda7c98eea54996ad3307d5d98d6a5265f15815883861cb749022ca4ca2f4f33064a6c3437e7e37d48a6a26469f3559b19b1af67f125d5688f2070ca2618ae0d2494f4cbb311b033401d81e0d37108fd66cd215c20b3ad9c4a5afeb5cb29dbfc9ff6995ad20e0bac0fbf37436c21959f9f21b63bd9d930f0e12d09ee071c3505a2eff0f7acbbbb8bd4094b7dbf60ddf72056c0d3291241c9ed9eea5c180e08ad1a15a4711e7e531371478173458b6611904a8fe1471a98035c7fd94f0b1aca644f133ec6f2a6d6c2c095f48626ef14de24b50d64456e1e3078ae9bc31026217f4fa6fb2b37934b31bfa449cb5410ac46e8527a8cf750c3c0d3100453f200911f21dcb1e787c99485aa393503e30f03d08051b32da11073f71f43c1e680217f795444b692688dfe22ae627666f0e8bba62f8d1c1c72a4e4ba8143d777a312eb6360afba11a49453b3e3ea2417bf2cfc600df65ebc5230609413c2d6233216b4975090a2514c7fbe49ca9c059e5de898b2063c10370f7ba030838ce0c71925586709894001f86ea32e886c108d2e58b154bb52db360ba2fd098c42247ca626edde7710017cddce96aacbc23300b2fa0e3dd6bd70bd610ad2a4d18b0f2bf42824075647a098b5d8367f422ef9d86585b072072bdbb65e61cc5b79288c9319203e9ec100e3a17504d08f6c9584969671becc0ac5a813d441409251f8033b95168faa6c6b8bd358d01b265bbe36d06de9c082bc36e42fcec8761c4f7982d88f03203d77464fb0279d5b6819b82a2e46c35ce3bc648569ec3322178a21f8189c0b8cb68ad7505eb488d13e3988e2adb20bedf03187fb0ae0c7b31553187293e527568ca251d72c6112bb4525cb25704718ed98ff571c37792bcf552a1242f3682edd1a6c5212168dcb9d7b8f1d405628f2956fc1e12d6c65ba8009bc7e16513315829fef3ddc49ccf579627789a36e5ccdc2c9cfbdd9c6bf1598e0dcf2023fd608060c2d3bb6040d21b99a3acc74697ec0372e574485f241f80337431f0043702ff874293560cd27120560c91fb473a6685a567de70ea914849d4dc68f3a61081e934bfb128e624c9ccbf4864f5f5b25968b35e16b92fe7e71f25f814c987fbe003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000003c118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000003c0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000003c0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000003c0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000003c29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000003c141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000003c25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000003c12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000003c2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000003c189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000003c1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000003c05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000003c05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000003c14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000003c03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000003c2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000003c1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000003c1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000003c14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000003c2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000003c305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000003c280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000003c223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000003c17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000003c08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000003c2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000003c0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000003c0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000003c172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000003c0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000003c05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000003c137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000003c2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000003c2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000003c2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000003c18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000003c0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000003c204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000003c0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000003c1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000003c28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000003c1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000003c21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000003c0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000003c0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000003c107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000003c2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000003c09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000003c24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000003c03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000003c1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000003c205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000003c25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000003c283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000003c21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000003c094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000003c0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000003c1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000003c2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000003c1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000003c1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000003c304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2980989475c5040581f71e647c49175d9426b9de1049109511cac93c12780dd55987bd61a9d35bc8201fc6b5eaca60597d7af7fdee81195310ad7661dcbf8f1673c5c4763500879ffb66b3fd91011d38dcab18638c84d6ce3d61c67ec43939c40f8bc078f6a75dc8070a4c76118a849ed8d7e09a2780c6588c53b3c6b41f89e785eb7aafe61f7af99e0acb97a31202d8161b883b3f551028eee974c186a082423ad407db90adedea00b669baa40aca9cb7b6ee7adbc918fde8e29b9517b0c438b94adcd3e5f3655a54bb192ab6d9502d936ed7dfad4f7e87f2f708e3983231c933d008c3bdec596b01f4cbf441d76206c101ba1a53df24e73d084ee399e2ab5035b300ccb3cd3249a1a0cabbab40edb3962870b86502ee141003ea2e70e5b70ecb0f29b9499fef960db45f8b9f38e1ef217b1f3ecf72218820abc4490fc81c2f9ec7617c95b164372e6fffb194303ae8cb6671f034301afd9d2e3058e2b3b275bb86c8f75f10874cb20b4954c4038be01a365087787e7b4c38a6287a69f933cdacb99f131a95cdca15fb86eed060f35a7b403797c317aa8415de3acd8273bfb9723abbe5e2f6ff89d28737effe4f2de21ce4d5c9a9be518d5cb662ae61116cb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027bfb0453c9d9400fc942c1a512a66016fa2cffcf36a782179135c013e053fe62e2f8edbb2dcf5f70d187602f63da6aae3561ba4c568b3fc0654f9801b76d113d2c7cf65c6519dab91741aec6ac56e32f6e4792ca164ac8d0c219400ecebf7076bdac43ecd9e02827322c56a82538ef52b05eb9a17cdc5717d9d677d6e39111d3c434245494bc2d8f4c228d3f25e46739f2bcbaf8c61b30f3ff6a3c2c44e91f85082f8f4349bc73b6147074494295914ca7ee218c828a0bd28380f605d2165732fee9eb6746a7d427a7ca17b6bc97bda82f0c5827c2b34cd07cf6fde8764e474df00d31f860abf722c8f7170bc588ea2539705802e240aaa571cc05b61558e21e0edddc21bf827436d0db7c72598c5e7362666e06f5dfc0e60e0b204f88e9270cc5bb75f47519d2a02a4ed0a994935651a7464b4dc77aa610f3ab07608154fc2fb9d151827f97681cda44f10865b6fd07a952c9a7e8695359ba01bc9d33d5ca5cbd83c23b8f3c0ae7a5b3aacdb268a96c7826ed64d0dc051e08dc3c25af90aac158c80fc7379b9b48bf7fe6afe530108df60371981e35333870c0573506dc35d5541bbdda9924240a54d2d31daa1e841651f29e144ddc09736982cd50449ceaf0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000234e8deee0fd2057d608c55929d6f07ca7da26bff7a05067e8826ba48efa24fd678b63883685ae2360a390e5c00e88d1701326ba6955dfeffbc940738bfc0c89c433e0956d55abbedc8d892cd29fc3aecbce528d6e4f0164741d2d12dd2909cbbf651705c6e4dceae27a8b0bb8ccf579afda25c3c45422fc58d8c073017fc16e6d708a2da277b506faed68e13c7ae1cfeadf7437c7d3b19482ea71cb1f6bc076664bfd918544003be7f30ce9f373f09ccb598153644434363bb1f3b7785e484ab93c2d367ead3b14bec0560972b01b584da16ce56e84b6e2008d9c357511dacd16e47e1fb50a1a17001f2511a4e35b5bb62b50036023469371fb79951f2fd51613a8bae4251c6a55c820d20edca3ec60781b8575a4e866ff2b13f5fc1e0b2fa77b8ffe3de80c496e10a5dd7db706915dffc016b2b2f187074719b5f669b212c6b9e596cce90ee1021820b611a207ee6a51357a99379ef0595e9bb7759ea0a6d67245abd47eb5c2b3b2c4d7916020e9895c4376f6aca0e87a9bb91106af4a7bc77b766df133d5f63e70023183f01b239c1c7cf6b338e92925a04dffbdf60d1e64ea7a8a1630f6d6389276d1bc64bc4e52a34d3802bcf2c0233ace9fee98ed63a300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f583753d065930869c099c07e5da6700816065b512ceaf19de5fd12c8b8b6dfd0870a980a70cd5902b0ec16100f5d2133785e3e86892ae10459ebf8a14fd64942edddf8141313a2e313156e42c1bf0a8b98f40faa9e55541e165f23bd51e2a46073564ef5e14f2a10ae42c0aef2049bd1539cd05ca5513bfe2a0513958857d2807d5e508fa2c447ffd6e38879a1164ba0aebf7ae5a0d6718be0c6e7d376d87822fe4615276cce9312f5178b0d396e4a22dfcc2fd6a4283922f30d4dbb519dc80bb561ad5d0d6ae2dfe4d04c9dc1f5e530bada03174fec9d5524d25572a8d639fad16d3b4d841f9b9eed778de34eb7c3f29d26188936dd316097b1b628bbfe68017625aaf805b217c18d8c911491dc3b26e2acb7c07246cea9a6ead0efda5226afa7871072440f35a812a05feb5f2b4521debf9a4c5e69facce6848c535e295177b7624a06a97dea8eae5b501b61246164d3e719e6227d86c9012c96a8d54a7668b11c22e041282f72c5ad271288993dcba369b6be91ea54df79a909ab76f5434b188cb2590017a69fd2fd9fd4bd5bb9aa03b920f450b1f9e410bceef65bb80e8c07375be1e378be0e2a56b744635e284dfb655ebc52748e30f6ad0f6cb967600000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000052502ba3c671b184ba71fb3b524b3f58a6865b367d2988d8b0340e749c7c380e9055a268993e3badc646b4455faf8f62c3a1544ec271edeaa183af6e44c6f8270e98a99f712213d4c6d401403a580c8d8502862cf1bf827c0e27bbf95cd128a415430c80cad73a27eaacab8ec63f13109e08c00dd0587e101834c9e9bbe8adebc5378455502d7d2eeaaa51321433ed0f5a2bbb752f95cb222c1203b42cd2f0a32da753c5a695b02bc2e7e77b9e63ad03970b457df1a69e6a878a0ab8c5dab2d46b7761c39daec6e3b13607e3f940089c597c6113808769cceb1405f54887d6fb58b5bd09b0daef644b40ee5b51353ec10caf8dd68beab3aacb221d1f75cb4901598091b524b1f49ad4791d76340384d0c4c99f29b56dd745c01f999e515553e5a3d49a61b1dc6e3564c60807a77d9a9d11beea5a6987cb87fe26dae52106d2d7b74b096931bf69fd16992eaa4b81c3f97456d0cb22341e18594d7a6c53cfd8d0e3c0d40085ffaf627df626b80b29236f44e7dc80cbbf53a92fa415ce2755d66218879d1562e6238165c900fd53d1c6df6b49b4bac4c41e91e936518c74e21a91969028346d9ed9875eeca72d9cc81b0a652f442e75296a756195af1431e0d8f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000405e72a01ece7c6ae77c9683eb20f40cfb72e8f9cb601978efd8d50ad481634506f211bf467e3feb83981b448e31b71f3a619b6a8154d390ab41715c8dca8b57af3a79e836f3df095b3f6ffce07e2e990b3d1fe31a57422be02f457bc2b02d922a257158110e808297d0755edea33310636a2c0ba6c890c0ace0aaa4d55da6dcdfe810caefd9b89d82ddca15092285568ffdf0de17d67f603a460decfecdf2cb4149d82a2209782cd63d9901852d91a27813456c27434a6479913fa63f4392f1e6ea970899de30c169497701e408674a8d995fd6571d0879bea2b0c87db9d055472f3649477984a24f9cb6b41ee239c3a7deb4eeeffd2e9f420d7e4286f9b87bab678da4ba9872c9000144b8b40258912f82299b66ccbe53d43e9b8aa2c518000a43a6bc0f59e232f8549104148b99aae51df7448d98a73886a9702754469ec981cb2609ea87dcd874f8961b97392b99fcf5865738bcd790ca0cc878b45c474c6a893eb7bfdf93216795855f09f5fd60017f74661b3bc23acde84e57c20bcdb666656b55d5de0987f09dc3adea8808b33d095c337b7f0f7f1b29375be0fc77c381532ec35547ff30b450d95c18f95fe67e99943befa06d0f0ad87acb63d964400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000565b35801de6cfb67af075116735f40b4f1d79576a8c8fa1a824a552ccf5d88ed7ff22395eab7758bc8c9b066de8b84a1275f0bdddf7a65e916dd39696ed56de78044f7c131ee9ed0b050743165e14f8cc3ccd3c6fb8318c4443d131266e9f8e70a0ae4314b21b60793124a3471d8f457e1e84b3fdea58a07e08a320bcca74f3afe9f9140e9e9a5e92d68194973ffbb76ebd250f35202a985ed6eca1b9091a1b46fc1e5c84d240edc097e747d4d112d8d26406e49a7e8108edc3a4678bced03856839497e3a9390eb0ab9ad10665ba9e9ddfec94ab45727590cc40e44107e80723b0af22366ec615ce3c6100364217baaa9ffb67f15cd4d9ae02f543ac3776aad3241bac0ef8ad010ad4a0682810795a3c1ccdc7eff03ee50efd0bdb14d55a34eaefc1c169af4aa365d74a0a43d5ed10b1f9de29e07cbe72ac65dfced8610f64a6ea2d344d06affc7837c558c855e18003a372655e012a795b88c8b48eb4e3a771fcd755352a855bc6e25a33eaecc93c67fc7ae8758128080bcc09f5e5efd4a4ec04c35c62c6a8dd70dbc1bd2017eb868cb4db24fd1f85b1005e33a30ff3955e89e897b6db0b1342430d800fee87dbe6b02face3b50a8accaef1914c8907000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012b3a310414c4bf86c04beae0394d1deddba39fda240282beac44ad32caeb8b3385b3c9bab4ab4c36be06868aaad63f50b534ec39c580ae0a81cc533f1c58a324ec701278780a253cde8866d4c5c9c80934e03060e1d3201d3dbdcf6d59d76daeb0c3f962bde12aeb088fc4948dec5d3c7d04e730d58a4e5aad00e24ea9370c02843260d42e6fc31db77d77ba81f9da482399bce1221bf0aaadd99763d152fef143035f147d56d19d2735e72e1f9466cd64258fce74f707ce681d35696057f7f12c3a07e1432eee3bd1661124c95ba6fe53b779101df9f322f1089b3b416df7407567303c1e601edd76aac7413105dbc0797f73a601d782e7ca11e66feb2ae0288424b1fe786ff1d5cbde838f7f69ca5595bf4c387a06e956816982c67f5b6c734c71bb02a0cee77624177675a673b7aae41f1db2047c0175149ff6fcc8d777c4804c89dc596c395c193e5380dadf92f83753e1112bc0e9499767f127dc8ac482fe632a7eaea76b101b5a472b24f868995ebc8e867ddecdb3cebceb4cf5c879433ca99f2ae09501aadf3a6e218e880558926e52f4203f9380b2357c9464f782b6ba500d0f3bb030f57774b883eacc789ecef5a34a73ff6c4855e15003b9e7cdd000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016857aa2ee9982ebcf683dc714c91a96da2731339bbd0d8246a37443056e39c73f88c7dfed9c5679018756d1045788e6c8c334c7b514e87d8097837a43059374cf66e61fe72400899f5ca98b03d2537379afecde4d88a9b4cbb33aa0c4218a69e222066a8bd748b5e11f4291c5e39327e71138229a331d1f4a69c068ffb880bc24470c9258de8ab4c313e3bc82ab4213f17cdb84fd210a36ccabb7ac505c1b3ebfb7e2172e883596d24b44bd2adb45193752d44958453e29d2c97715ac15af3dc477adc9db1eba7a67f15b3fc8bf4f0a5a842b04aa1ca5da691db5751048f74ece2ce2ddf681885e75366ed59ff29e953f42613f20545416ba0cf384ec43ebf0cef0ef3c84181eaff7ceb02d6da508015b496f38ee3b7653a828561407559bddbdea478639c0abe73a811bc01e2b1900c722c68bfc3e4aa8a389cbf3391b52f109c389213297b0d36a17e47c8c5e132a945459f02ced6a270b9a08037caf132ddb4d89e26acad83606f329eb3f56b4719a315c0d6441c99b84c1ba35b27645cdc9a1205ded5adf034ca23746b6b1a2f25af4de08f84b2476ac16577b530ac274b678b56192a1448f37e6a3bb8d024240f70fa37f544d4c36e92c69f990a2b2fb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026e397ee7dc18ed297d8d1c22d6e64bda982c52c7661732e37a0fc6ffaad3abe50d73a5c8910e6908927d1027cb7e7862dc4be366855e6c9d7520662292c14471fa79969e37e816482d3344657c826b0d079a88da0b1964d6c3cefeeeb4c76d610ea42558b266263ee7bb31edc2eb05a71ee8f82a2ab9e96e491180ba39bf322379f069983b97db2244aeeb5959f5a675c69cd8cde46173a19236b312f9cef957cb6bb90b121809b0658144b66f7616ff7ad3f53f4965b2a4298ca54fde20f22bf0e3abf8d706de6be7770e81918e6655e314f0d112b73ed8f2a19d4dcac40767b3868c4133f210500446c271987dafa5293353d58b9bc5b6602141316767fb7a29b4ab6a6938700159c58567a66ab013c8b334a49380d172578611882be1e6a4a664f32c1b46fcb40e3bd5fdce347cc860a07a7fa843c3043526ee9225c54a4d0528862c1c6979ef4ffac7feddb23a8ad13cf527e05538a9e975b47a99081dab45a16b62dbf8e7ec677910adbb3e2b3686337fe66e508d5b5bfdbf2dd659963ee230e46e1b8733dddbc05cffb387986fa95c821bbe73886b9196c85b56985417ae19ea616f8773e6004c962dc20f103377057d9a19fc276a516bf987a3f79c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ba04b69d9be2eb3ef2f6d0217395e8676f4cf3f2c25c8b503855ae1dd3323bf9804b3cbf16b93a6942e8764af2e7c9902dd074f00acf6fcfbe6808a5de0fd4871131ba889960fb23174a01052024b652d5e5d04bacb45a971b11973a523335fff0a49cf4f9f2e664aa73b3e8cdcc985ca1db1022fbfc9c773a548f3e391e122e8b2d4773dfe4874f5946fbb4b062fe8ae3401889e0f4741add621a10e0a79057789bd72e759170410aa81ac5eef711831bed266718e80c9f6dae6ef2ac324702f93ead4dbcd061834fd014d3999037ddc7d69aeba8816b615130e0dd46e258087818d424e1556ec5728cdac6bc79046cfb7358aceb863945bb2a196c8b9fed75364a17748d6e3b8554f5db3637063771d12f396f9acd9b0c9cc2696a8ec5afa6d2e743fb8626317bde730bd8e28d588fc62a00358bfbb0ffff2dfc4e907c90a134614ef4e021b29ff9c35c26129332e369e977856a1fdaff8e81e03035b19f2b438bfba7b801a2114fdc1b454547334325ac2ae00553f73895a5e59496a7852893f86cd8fe46495eea6ea50d53305fb28bc4c948ed3e9da534d5c428ede56a7383ba283fea38317208cb7debf33b35be62604e21c6cf0b9227aab9d6e49aef100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b67b5d5703577d131b00ae901d2b1805dfd7c42ac197d2a38c160cb2cb5eba67e2f72668b9e9bd65a9e019b576e8f3cc500f7bc96a5d54d28c10a84f32ba2fc39eb3f4b1bcc7b31857c0c67402ca6c1e419217ad837b74faeecacc7cf41b58cc819ef7be39fd035bb3a8598d073276655299ba0d75f00ce66332f8d8d7085baadbf924153fe2ad69ccdedd746769216ff013d77a3d0f60e3776cd37fcc45acec4a745485dcefcdae5a48ec079f4f36c8553ba9d98aab6b42b69bebfe356bf8a203c0541e2b09e06e406de6c27d2b3720c333b46d77285b639d12edf4392182cb14dec6f4d28917d21324676f7479bd45578eadc8d183543160f87eb9bb912ef9ec78002a62d44914e8084726ae9d319777b1458959a9d001ef67df9baa4a24f885a73bc93dd1fa7a4d535d50214337422d281136198e8d6c4cbe2f08d6fb03a0e1daf16c3333c08a6edd9f60e1f71a57415dad077256869b9fb791612a666919c0c657063eca3037c4d4ed44d951d400af2938ae07161967d1b331b7eda49952548d65856609c36d817257d771352e70a46343e0872ca7ea3147b65f917b09cb1c53bd475edce05b822a0eac7859f320b881e44016640c64c8fa5bb0e048bdb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011061bc917ab287eb59dcf576570463a3d12c3f4f29088ea04236f718b3124ab7365602b6a57dbe4a133065613b6d864942e923cb24a55f73b4f6ba3e6997278012d592226c9c730143900ffa3ce357413a7b7b2de2c8f58d8fc37b8b666d9ef64ff6ccca11e1eb252d64f5d4e04e5680b0a6adb282ad87911f704869ff6d8818ea1ea9fb2e67e0b34027658b27ce46629294019e412c64f8e93ae7ad83f85a911f7b74abd4dacce1c6be40a4d3e08e29136659ed65672e577ed8cac63ae1939b3a2bd643bbd2138669a8ef92e12cbcd6d6f5d463d86eb2c967f31be0fce1f226dd1101638bfd96e3df02cb21cc78b25e9da4ad20560d34763ad491380656e23f5a997c70e6637bcdeb72241ee99aee9a9cfb7516b2a99c7720474492368ad39b9abcc3484ab8e949b7d4574b937785f3d0582d25218bf9f36bab53293da3ff4e97c2c48dad1ce3bb75b7a72fc5d0f53d3dd4e62395e0456bc24f8102e2aee9070226f2c8552a1516df1d8176739bc99190019b34d111693995336bb1a91b4670850c2c66fb6e757f01a2d5b9a0b6108441de4f1c48165399cd8c218fb457b5c0fac6e862b00c254ca2ddccc27d7aadff93d46456181a02720d53c4de0dd495500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e16e0494cd738b5b3ec2f7c86b7b2d2be3c7a21b852b3f1eebb48e8231ec699081251b37e474608ac23835910d5624dc599e21fde9c47e5f2652815a6c77f44672b0cb548c7900ef970b723bc224f7cef5e6831d3baf9bd372b522a0df9b2836fe10283449d0b43746fdcdc34984a921d3570f9d50f954bf17c8290c88b3332d807ca5231708969e08413c025c7f2bf58c1437a83da7d4bd0d39c89d20fa90b2a8bd562dbfc84c05c3b7e47dc0274a65be40ca274e19c47d07ca9c6e2537c6538622fd4bf45f85a6cc87e7c40f03cbef7588d313f92da2990a4dd90b38bab9526b6ebaddc767ed3a25b5afe0794013f60d2f9fbd48700532e9587cfb51946b3f89e9fbf8c1d217f25b5bdd95bfa57e3de5ba46a099458dd1b3355ca8525168bd7f243c466b193a9c5e0d8f0c1d0226d446de17890300adda780d364e95673e7102a7090ca251c2e7c05b8fbaaaebe82be8bfc92665a754d3e2a9f15d1a640edb014c6259dcf4599138fb32516d82e296a0202cdf5f94d6b9e8af388ae060e9fade1c37a2da7b5e5cedd68c469e2885be738108a955d649f93762f118df738806a547a9ad11970abf80a880a1e58d17b5647eb962a6ffce2ebf3e79fbb4d7870000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003bae5558ecc9b03a686b8892d7f60dfac3e9b78cc406ea5ba60218de2c6eb539c96c138dca40d29b728a70b0fa3d79ea4cd25fbbf50f25ebf59e390535fa40a1ed80c9c70514597b701c60d4e83393ca91c6cef067696dfd3f596f487b60b22460526d2fbc85e3ae0d67be517fb5aebf341030a940702a25101acbc8b55980895dbe84cff299f5bccd193f687413fb73e0c6c5122ece91fcf902afa1ade8390ab1406b3022f3f46bd117f9cb981b4ba6d23896c8c9b5aacb15f0c93547f939da248f5069f7708cdbd15bdc9fbc315b04084144aaa9d82ea9d840d579ba7ae633bf287e6ab3845750e8a9db135941649f8844f7c707a0134b894ca3c614d6931da6c4fabee121fc0a18e02b96187390b50b15fc29372a6b2ee347d08e82d301ed0ccaba68ddce987567470e5aba904053af30ca5b5ac759f2a08a6848b428fb5e0cbcb6c87bf54e9afe12b583820f4d3bb9631365e2f8312961fb8e8a9f753799f5ab3422e9c22cea38a0390ccffd61eeb9c653964979211e99f0be054d02350bc9f70e6bedabebe7737bb585185e87029af09705d291cfcf760b2951e3bb90c1d8b47b83e14eb1373bbf87b9a3f5714331626b49c4016b52f5a3277f4e5e7af00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e53007607de659324487f7c114f6295c2e53304447692709330d15aa298f728a6c3c995de88f0e5c77b4b8b86d04bab701129389136c60632af2aa9ceb0eb6ed89444cae567aa87469a72a0c2cfcd9d390274efca40665b34ecd94236aec880275d267dc2e870930f87a41f6d6c4c0b0ef68a236d684ce2c4c1091755cd74ec562a926672f69ab7ecdd4bb69030051950ab111fc9bd72d6f0b98d7f6933e888dcdc23688d13e4ea91b310a8fa263a2fdeb3d3ac17f314cf1f43583c96ac8d2bc6dbc4058959449dab7b8a328883fe9b6f3f9e913527ac93e3f29ec3bf9a2b0427b47c6e06303f08ce02f6d723784f2da161b2f80afa7f3ac57a7f39bd77270a025e493d5c7f411ab49b2704be4e2dc246c252c0c8b479e03fbd5209aa1591ed46592ea804f4dcc6d231eca55947a07a85d074ffb280fb046a63996f891b081e6db79ad49315d5e4e069a281edacc64028bf7be48c88527ba5e1ffda56b2a2586dd9abf9a19b5ba751a4ea57a3b6b3b121c17f3e0031c64edee78fa1b2fd294b1e0ea684f3e04797854c2308a2da4ecf3dfb9b4d9feccecd89bab3d4cfd1c451294184db0dc75fbc2cf467a6c8993274e84bcd0b99655545d8fa1feb53761377000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027de150dde72fd0eeff5bc1af313f1c82dc5388aeccde84f5e23148373c1990da8ef8ccdb44a61bf2d142ea504a5e4611de9886e9e5ca8cd9f889d001276f658ec1b2e06635fc59765143d255a418458b14267cce1a2c6c8db4c1ea327f5db1ed69684745f094e9718beec28fa743868f813c72a0ebbc291f69bb0745c7d51c6bf68f0eca593de98b2528b328b62dbe21d7b2cce866a78b4dc3e9d13de56e03c20a8b5f87c9a2ff67191e7d9b7de81f585d527ae94b98cbe730370a29e82ddc2a49519c7831dacef1b27e14e4e6fb89beefebb6b568adec36c204211aebff24c78ba4a42cb18a63748660f3fb944434797c88cb7a361d9fd370cf5c40c51e5acbbd09bd0d112e65b3486b7d31c070584fa022daf819e8ea791939d24caebfa1602117908e3b06d9ad26812425ffecef1fbcd08c5ba1d55ef62ed39c360044ef16b14b3f195ee061944a2e34d61125ba856d0d3c1b75c647627f54e18c6181ae400a63419a8647a5b3f779d22118179ce3ecd8fd067abf52d76de3c5de927da1c012fccf47d2d27ca54e87512eb2b925c9d1cfaf39ae5c21a49ff873128473a275d1d74fa19b46fa540c36487902ad1d77df52d342406ace05776730c0ab2ae68000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018b26d470ac79b208c80f93ea03a1119f1fc48c38678b6b1ff335d3cb0733114301335cde6914be4937d693e54ebe8a07e1d7dd756d938c8aeb65e42d09f6c6938c5d2b65685c350ce1801d25bca9e23a47b999e1871811ea85bd41762ef6c463cd82093cada18f5e1afbc3c60c908b8d9b29012da3ebe5833ac2df5a75368c74e59de85578477977653ef10d1d378440f0fbf4fbd669c66ebf5b1024c9fb6487c6dd0b3d4de5e4c2e4da829a3b61e97c8fc8e1cb04eea1d72a6effc9558e7e714b3c712e12d22d65d2bf9336d3e4c9d711e3e0daae4ad53bcfdde601f569935ccf70880d25deac9aaccaad8a2ee6a8b2cb8b9b4052f72349f03b9097dc635a4d546a996ce91b50f6325b53f3a6dc497b25eb15dad58f5d467de1a42159ac2a70e1c3b2c528a22079b3540ad8ea45bdd66c4bf90cc92419186deeed46139eca50e06ba5eee8eee5385bcfe761919032fbf0d38822cf099a5b91d59ff8cc72fe342160d80a01de47f9df6729d068c6b2b0328a643eb07b5e60c92e3f213303151925db2ff2fe9bd7a6b509fb56055dcfe13791d8c4fab4163d6a3ce987f11fc44027ff91a65e65ccd18516980a754512aca33caad0a5f9fba1fd21df4ab832abd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000150a90be3aa234af50f91aa67c07c7fb6ebe2b53efcad449b26c415903dfd4511c447f4c18ef79e15c2290c55b7b5e653e88e49419c6ed3755551a840e3a4d0b81f5a4b7c6ca5f2073029ea1f36272ef16dd0d6548db7e77c8e998b801b90341518973a1f0458b042f19b001f3388122520d51cf556517ffcd06788deb9c66f0be5100f98022010c50d9f2d9adfc954eb7f305ad4f3c76cd15096f209ae6f7d45cbeda81859edddc47661922647bc3fa2e983244fe238f146492fa06c84ff1666dea2ac034ab4943fc433cd047b828ad552828f009394b3c7cdebfac05e1d30034b7dac68a7908564f0c9dfd64a0868d6eeb77abd5ba0fba8f18d533bf53c017a9a211274f1993611ebbaab57142023f2e870e17e392de572899956d8fb376d4a073eaf79de433aba7969a98300cc7df5d867226482f53f74b3a4fab0ce132b4380bbd5a70b39c2d22d8d262bfb6121a4e5c7deabf77a73be2c4dce9f9f7c9e8c30c07d7c45bf28b5babb26cdf031db66251239f3422d9981de7b67a6ae1f3c42fd4e377904050483a55813897f8a6aa96f003ea8e9a20f9fb64ebbba657004df120c29107c6ac35458945dc8577d9c104aa1bb551df894fd0d6c58e23e5e43000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ab60306a7d9768f258211e6d7a4703c118f89756abb0e0369582743f27af8ff0a2fea9d04d1d96efcb3e2b25e1625b2b650f45c4882910d7554145d6e4251f38349c97c2496e4389a4f86a4e21c2352290d6d31031f8e7be8b61d58d6e39ace0bf6115ab1c15f536894c6b17f08e36339cc16c0eec1e80a27421ec008008d1f89c4d66d9f26bff818a66c8f687321e1fe27ed5647aadbc5a073143254a5422f9ef907bc50fb88addaf931f199682231d5463a268f7ae5381024af93c2cfa35a210c432bf57254e1b1674d92cc90ca3d1b4a64ef0a346550e4efce7566821b78716541308dc2c0ebd7c9e1cb846966d267946fbd63abb1dc8fe988c13981547dac7ec850fb528fca8c88ea0538da44fafcf3558d2b6b75d1275a569b487ec9bb490dca650d539de7c563445f82ff51267ce10a53b98cf3c2fd2db7c07b304994309e503abb5f530630a73cd402cb0ddb1d431a2197d03d3e455134a0d09c0e854024756eea3301a8190ee77c113244839ce81f21c69e4a34c56a342c3c9a9686e23f25c6f88fd61e0428c015152540518887347485f5ae2a2dcaf5c9ecdaaf9ad1c9011cda650ad3966dda668faad5a15ac4b053d4d76d337c7bc0635b4d385c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000297143ccc941a2f2984d4ea48f0b374d32e39a7fee2d1a46ae7d8054ec370295b176b64cfd083600ba9f7e93d44426bbaa002304ec7213257a35ccfc9b3f9c6efe4e9af0a88f13c8c0a3f506a7130709631afb4d8ebd204069f6a9d560286b7475d615a57a41d7e03f1e44090b6bba9189ccb3fefa32650c3f94529378c0c64ad4ff6e5b7b74c46820c08f21ac6465bfe63a0b2a634a0a6ec724717ebec6a8f70ec49126633b45cf7da601de22f64453ae89a0eae964d8fa6c03973f0b2bcac4a4606deffa20d3f6947efdb5c2a0904cc865e253c51191c2d94c7991797dc923fcaec45e6c10fc068653eefab467e590520b5e119cef0c64105c685e819e11f281d83fdde13a8d9abf50da1a792496e1405dcf750560e63caedb37e808caabd19f825dc020e01d52fdc29032834b4dec4224db5e8ac03931b34b49b4c94d7bccd7c24a17b4a49eccc9bf944b2cb3dc27d59649cdb618c3c8754af3b5bc5f7beb7cbb99c208cfaa3086f3fb37cc97762f28878ba7c45f391b862ff60319b37e2596be3aeba75be6de1e861d559ddb1656333b008a620e0f213ae6c80ee91bb7b0cd285eb49830d8a8cab2f3054ead593e2192440517c2ce4c8e31c1aabfdca2c50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7589eb9abbb56d401eb926deb82a65ecebd9fff9ade505e5b1a089363229d071530a505c21fc1c85898b85d13781970cbf6ea026217991934950c0fad02aabf9abe07be53473e74c14c5f20e4b3681e60426db94ad6bdfd87756cfd5f1f1b4a2cc205f1e23a227ff525f8a7961a74e93ec63962e15a4667f34e000c616408f74496c252e77ad797a71d68a3178a1c00c1349a78355a3ccd0825d03b188da6e675bd2d4130fbbdc6e84ed9c89f8f120790b355b4fc0beef53c9740941d14489207ee0947917bd28e4a4bb78ebfb977fcf133b9b8aa31acc99de1584e096fca0b747fac873a7370a565cc17d5bb551be1875907a4679e65d55ddac0be55317ae22975fdd1759fcb281a4e077210a5a42a4a5d922b3854caa5f6c87811c4fa773b32adacb4b717270748d4c80fa54343092a7acac0d57f9e25170a1d9e4e19aca82df1a5fb4f862222e328eba22a6e87c42c15f4b7b2bcc6e05a458aa6caedddff95e3e9daab9a3d51b24578acbeb0bc3782e23c84047a815cc60c77e4ad6b32ea3243e36a58fe9a52b5deb5ece644555cc2d7dbeb3c3f179e8ac4bb8ee8d7425f7c26c6be37bfd8e6d0300d41339a148f95a0b336c39c9043cdfbeccfa0f7cb6d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a05c87ea898b24f0b6c4e95223ad2fcd4a5c20b03e4c713b41869b607d33fe8d817e30167d938ad621ca7f683872e5daf2bf90a93dc50b3c2e9add4d1666de990a065dadd0a90039caa2acc02781cbe7bb20d8e38acd39502c71e17715a88fa08f7dc32e7a4e671d4798319b689784a0b4f77cc9961262095fd19689ea2456bfdc6831d3b721cb33616095601447c9efa3c7b123efa02838320ddd14f31aa08e8f0c4f801af437701c5a1fdd215c0384309d42440ddf24350f3a2233462b1ef185ee33e2796b2cb8f3226d57c0f10ee9df2df4f331fbaa6daee95eb998251e426487ea2be68ffadef98b42f9d1b1f8980f02cbfa16d81e255306951abea9b98dfb4de9371fb1c53192cdaecc67602ab72f81a38702b346c7c46ae82420ed0b53d7dc096c9d6612e19eeca403eb279de2997a61cd475d328a14f624bad44e63c1d428ec8bb0480c09d4bbfc9fc2761850c875c29fcb07f7b336d0da9a63e0b169f7a0c4849f23bcd1a64ce31d2edb0d8994c7ea08e05e88eb826e957789d9c4331712f4538fe9cd37cbf4426f16ef38dae7bcc8fc415bb45434ca899b1b44eb53d0c050170e8d1c32501d550bc70105f33ad0dc06bba7a2c37f923534776f0ec000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084bd94fd4279360723d2123cf0cda97c672878f0d12e49f97a91c0aee188240e5882ed5fa5ec9961022709d3cf861e979747c447b9ccd774384d2363dac3a078806cf43c1b646f72c96b94add3d31d9f1a7089ade2319de99cbd2aaae1162458e54b938e992a3fe3dc3989e1f69caef3579c7807e21dabe134bc2ee597d0eea7676052dad8076eba1357bf5112fa992358604d07b8c9852f3a5dcb6c00aed10defb4470cf7f06566efe344647cc717eb17a795a833bf8f4e9fce1b8a4bb7e6924906dc58cd7068acb0c91a43131423500d2598804defbe9394acb0a95a964f367db89aca0da047845673f45b8fe2ac0bc6a0c214fd1fa8d26d996fd45ce9e8d703c97144a35c1761a93481236c2b282fbfa53e61cb657d38269611c8e2a9d1493e64edb2525f4dcab74feeabb1b6706005380a3a477c7b549d3d1bea5604a1e09dfd87a435d8fdc0df6f9f39cdc1e053304f6a6786b01239c872e17ab27c508e6ddab802ffc8f1e4bc84d9ad39b40028637dc77fcde421ba75609a2631638e46ece9cf9710a19954343bc94df491d8b8eac403f15e19f674ba54ce3879566e130217aa378057d163ea05102f9888b0f9e6e617f1eeb2928ee64ee52dc415c5e9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ff3f1249da6afa7dd1cd2fd794de95651625b95e0d0f415e727185647a54e418bdc7191cb430dc2d2ea0a68d3db126e480db8cfceac309c6f7d4cc0992cc6e3503fd9d17b25cdb63909c273a627be80902a8a4e8051d496732515bc1f7246bbcbc3b32080cedf58a25931f61af608da526cfcac2be33bd85b0b3c2d76c65fa24916ab8bf00ac0bb60200794e1f48895a334aad66d05a6d2ebac7229907277da88c92672837be9253c85f03ebe2a6343331259eb6581684994795df71db07793b85ce53719889d3ed9809383ab52e749ab2b590f0dbef113571a67670c5f87a211a6720cb13c80abf7caebf0a97da911437d119d02bede0090efdc521030722a0e24a6ae6695c877f200de2275a8e5efcb6d561509a3d7c542d8cca2d23e810a77e9ebb96f7735f59549dd89881ccffac9636ce14250f21fb9c0ae0712d61e3a65d92bc8e2edbcb39f85143c7c5096bd5dde7f188a7b6315da438b69622c9bdc884c3a8f769ce04692bf8b2a2ebb8658fd006413dee520b6938de8f6912223a4bff0ee759c663d967f37ddad8f502a15dda25926b4e287685178060c16ce680f8d66a59ef5631a451e669da1cb00c3069450de71c107ffa2b43c9c23e9ddd8000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a1b8c4403b20eef1629abe793d0c83c6c34b793b7a140fda016800f2f5108f95099dca504132ac61ca638c6ba8f1d14ed2941818aa79e64f2da2623d253ade75a1c7a24b1c07aa8358eb94ffb12e3b194c2f192e014f8aac80c658a0c5f71a988f7c8ce94a9b627294babd9647bf4635c98deb6b389d1cf8e3e21a3032ef0ebb53a2a52766ae82a154b2e5f60c318bfe29ef589069f102a1e1afdd5f983ec88090c60f5d059475953fcfa6c9c386c68edfa50642ee8f4bc70d28804fff968dd738fd5863c051ca381b7605d565d64ba3f61de726efb158b532f8ccdb33f61fb826a40981b1820fcb267cbcb616a46a570147b51a353c233e11a54f66b5b45d7259df26eb7b90d09cdda5c1e334c66d22fddcedcff86d7ff999198c9fab4db5cd203acf84cfaca40331f761d2720ff01924f04f78b133d98bf51fe50d501fea04338a8546acb8050b5e7dcb1b71c4fe1003e975f0e998a301520c8905ffbe792afb43752ab80d22d0f262debe9c94745af75b5107ee224379d8e1fd7f44dcae5647e307a6870937ebdd8f0fba782ee9c8cbc242c830e5dbd0ac16a7518dad02c19fb70e66ce0d2cb107b6fc3f8f59b65b69e38159e761f023d2f477ce0b93b240000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000250ef8e9c06b1b48a2bbfcf84ec81a43966bba95d98ca3d2e1ade440c96fce9064bc515f28660c899903fa69ca2e08fbd0fcc0eb203ff162794d19f21b9a490309b106dfe11cf4a0d6d588698e6d586d16265e9093f3ce7bc93deadc3d5ad3d4807b6dd04481bdf3f8df75ca504f767943df828f7ac87bc2dcafb0fcf46f257cebb1f250ac8446857fdd541eb0940952dd3644a1364358c92d6e21ca879bc18847d5501f9a003e7bdfd15d58d7b60db75413878ca5e7e9dc5b4a87a2dba7b9e91cee040acb02ad8d6657a288785bfe8d230d8da17081504a1eb84dbf827f4dba4d07ab36fb680a271390e6aafa3ee34742348a88c45f581474dada55c1611b5b0d23030c3d665a143fd4f6f28dfbfceb6229b59dd5c2a2d2c93f06d8ede3a51c90517c3182c9ca475927040ff9998576d9bf15d7e4397fbf2696f6a134bdda3ab15cee4b8f13cc1d1cbb23e3954e969477c0ce528cc36edc28a9cc956f3aa354ec762f7ffd0e559ae5beaac5c4df20c9b495d8c6688262e8a94d02b721686e62643b5f310ca0e176d370724071ae64d02387fb2f83a6f371e68371d746bcd40f052e942e12d774ca0325c93c1da4ef7c01877ae9e9c8f56b6f60cbfdee7ad8080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000199d1537b2c56b512c893abc69f800b6b2e5588ed9a4d5cfee05cc7e3392253c0b3ea1c69bd6a87c3401a1ba04da00f2399fd64d9ff8eae6d2a9fa73190deabf7348ffd8f4a14eaef0200bdd51ab2fd1d208a1569fc435b8f90ce8c394e3645f7ada521ba557f59d30ea3c36c8de0dc79030711ca3f7249c115fbec3e8ca6509ae177b3da7de14db3f3a11d145350a9ffc58d6b1f14e775ba3c2227f2bfacc8aac014fcb45a2a27fe7a72d50d4b42c5f5bd0a71b0c8ef3f4ea137ee37f713dfbd21bd5d8ddbf9c21005fa044a1d0be605924fd69c9c658bac4c744b249d4352d5bf9736def9213e9fada84c417de9ee2d7de60a826add895130c95b696aa050f6ef8d551ea96a8624b9511d0010f6f67f72cd4c78f5f48257d476e3d6dda46dd757a51a8c30690f246ed571d33567c1d0d73d6ee292e637c8c1d9de3c460ad1023cce21fbea309d2be87b04cc791256c910ee3d9b6cd736df3c767e660e80e7c318dcba98f67d0dda41591299ef1a0528ec556ced9e6a45c677b5f208232f99dade8c5ee9f1414b81b45c02b2b2604c17cbf9e7528ca83c444cdf17e63f307def2ef1ff00c4162283e19a840ef9ad4901ab28fb790b445b8442b5a881809c0df0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000930179fe577cc8237f131fdda306d4b29a9e68c1e48e488e90c1e4df970e08efe6f0d92297de9b356183cad7a66911867bfaf38abdae5bb0e5a80edd7635da9ce3c808062b940c7c7fea6ed0bfc43dbed946d65de3a5a2d9cd68cf4247adc99e3d8f8a439f78b17d74448ce3df32099d7596c24d80bc2e138d983f7a64e16b523ef70e81034616152791fe34ffa6038bf2e8c839cfb14fb72ee6805292cd0ae8927ca663920da5e0308df5e778da3b91d21e099ab598a26754e0d85e3d4c9901b129924807eb81da35e77682b43ddb5aaa3b461a78a966abd3da84ac449b7052c35e3ea8e24e980cd35c5713c54a54eafadf3a29068f1d526933b2b723c2eb302f905211e7872bea5a6600815ea684c16bc4f08404ef5b5c2e7fd1d7170dd5072fa658005419b9b883d22e9acb6602a784423f1873a0b903370f70f8e56d93fed4cdabac16c6d5d3004f5a1d887de32c50961959e4a86a7e6598181368ef5e09fd721c92bb15727c64aa7b1c9d2a0db0a42af59e47282b2a2bc8e25b5b7c7297a01f760e9344d302825d431cdba21b686a95b89c4083b2f1b8c4f1fcc4cfcff40e30e052fee6044dd64a487df7b951455357b5caf0bca69a06f51650d565e1dc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f67fbe97654d048169ac1f52cdffe240f88c00113dff90fbd7edbef35cf7856f5b0cc8b4dcf5ee2ec75aea16a8ec2ac62c0919774b517512bebc307d589f7fba33f3b76d6d923ac3262328e3b4ea40aea10798035a492dedb617c32f0e2e16f05fcbf6a078d7e127f21efc7dda75add0bdb2e285ed1bd585d2d4e5e309ad820f111dc015e1216899c4c06ea5386e65b587588c3ddffa69913f700934027a6b223e23b37af89252f5046b4732ce2885074ce4d180dbd2ac28a3581d00fe98a734178113d7f7a44b8b11a37830dc062483243480028c8d0497f2c65e7cae1e2ab1738d84bfb2d55cc4aed86a8fb1f0dfd6aefb57dd37aaebfca516492c845d27676ef8cf00bdca8add86f71660c422b95749196ba3ea2c11b0e3e631bfd4fe3064b1a797a473371f2303b251e51e89ff5e089c3128b00b9858c98b0ae18789c7e9d1317e89bfc9c107ca3feb81c23e36fb3069aa00218ac3c9697ad5f4ee65e8bbe947a83a6d14741d6c23771b169e19b94e9fa7a58c6d3458b6a8c21e9ce3ef7632f42999727a4301df4d96775111d71a5e31597e9937a8b3b6a2ffaed02d2640ee9adada09ba3cd3988569cad54a7ad6e34f5234e9401ee14f92eb9cd47071a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000add5bb1a21e54a81cf8b016444412bd416a5fb1de4f510f249fb5f1ce087314dbb3cbf3bc336e02451955df043e9d15213e778e9a0670a9da7a0f415b6b718e6379b0d224231b7bf9b67add7db16124dd5c222f3637832c925d69f2a151072b8a53d7c29f2efea2abaa0d07c0cc4e2f8ad0d20a7dc75286b89da9bbbeb862f0a77fc43a81a0d4f603de7b4154fffb5c86a5ac46c989758c836b1ccb1ea21f1c26d88f6092cb1ad967691b1868f176a913926adc4d0c79cee45f7076113bcc1db0e7244c77b9c8f238ef25a529637ac9259a9ca50a5f520a4028a2f1f465311d3c76ed6de0da1f2945feb7eb6cba4b805dc966ce50b381e51e670fe81778525d7b1c734d020acb6c94a953b43e59bb4089eaa53a3f30618cada6081508571acb45777d50c774e49f0f1ef21c2d3c9a44c0eb65ae4cf450b8d715b2406bd7cfcf70a0103bc6b261670a21a404f86b17c6e96090d86dfa91c9554a1ea77d894efb7db9e09f1652e0638b6918564a1854a7adb6ac37ba1b04de513475315e87f60b649f287d5519a239b4203ab52520c5b8ecf2239c811ba9b463708a052b85f76c7c12920fb0ba819b3cefda205a4f034647eb8686556832162cf7a66dffa85b9960000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7e50ad925d68da88848784605825816d938bc74aa53af166c0bcb4ebb62c4dacfbdda582fe715ae9b9a57964dbb17bc43730da7f9b7852aab6f36723fd6e77dbe5f039eaa1836d1d20eb20af027bb67074801ec482b0385106ae225906b79deb6e822b32dd465ce3dc3e75ccff0cc2ec71dc00d799d39e9dcaaef9c95d470d95f77231685a14543436ec1e26a01d5a8cdcd18edc20d6feaff7010db2e9a8131b877c3f2eaa8e932b4e73ab5d39a9bc0664b68ab3a544a4bb810bfecca69a57da046c6620673d66d5ce90f666e3c6820556f6fe786e8884be83030641270df213faf74325fda6c9d25706de4e89e70061eafc5a4d7d4d62e72952fd2b82be0d8505fc5b3ff9c7e03737adb80fe99bf46283c9cf1c3a99f9419d23ab9d0c7c4f22f122ce7e33b81a79b1c868027efe30e03fe2104e1c7ded5fa961cbb13d31079bfa8f6621fab037f898ad986281a12c36fbc94c0b575edb4bfd7b5ed74de3d23fa57b7a9f86f2d3a22f33058c63e7b466b545ba41ffa7a290a172d4ac688311b9cc44dedf55a95bcc8a5f97eaf7b456a88c42fa6d4dfdf76da67ac7bfe637f973057deb083f36ebb4c38499ffb5c6579ceda6f70445a0ff659823faf95e4279e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011362dec1b3370e91597586eb5642f24c7ebc84c6f1dd88218c00cd216fbc69eef4c7c630a83f54832a506f05329afa773afaf740db70f181ab4005c393f76b0b40b29460faedfad13ac0a4efbe4104507caf04585e486bb5ad1ba77ab8df34441b490164a74b689dd5fe7d031954a0f66313fe3bc353dae1db904c6b77e4831007f9c8a1aed3140345d7d80fa4a7289ad73414f45cb286cbeaeefc8f55b652da7a21c37a29e3c0b150a7819f7e06cf086a32aee7a6f699f32d8ae612e1cfe059e2fdb559f23da856dfca49fa5545056da53c657ade5c29317db9f4df4694815e1a0870416f483d6a1ff140599d96e6ee05e26dc524cb87212689a710ec8fd39283c400b8632783da3f99833df2aefcbe460aa99f5b432834096d09395ac81ac64b13a2f77dab6a23de573bf45b51be7d8b27db98b5cd0fc5797d28d991f2f5d1455f195de72bc6b13dd1c4577faa5df040e67c658688e8d558dea43fdb7d8a341df2223eaa68061e9983e4d2e0fe127d153cfefed665e7979aa9529f170141165d1646e737a615f610c60682cb9e6218475aef863c092dac5da31322e110bffd9814c69ca8152a16fc7c93670b44f70b81455319af19c1a05fa3a5c9394ff9c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e7e2e6ba7989450fb088b931d470578ec46c0fb662f0597caf4daad1702c448ffd3e62369edbaf66e4850dc428f61b2c702eb279a7899e25d5e4d970c88d8c4e7f925b887ce0ca7f5e5051e75ae51e6c71855d3b6061eda4d8112cd2796cb0c59f78aa46f671583821e0deac9b49e120072fce6252308f4c2bc964eee9685462fe897dd8c47b27ae117865454a352fdcaed4f05383a0ab2b4fef8b79eab77ef1082f122e70135cc5c34176d3fcd4ceedf256d5e9b7d696c14cd846e18b195cba83d2a83f676f9891af8773e4dd41d21164670454ac4f6db080e0c4274bb5993396779bbc1ef8e50e3ad8b3d1199e1f0e4e283f0d1ba89c9b974aaf45c31f06356ae0ecb7dd9eecc403263f2fa88dd6df18f164d79ca9c2db8c48104a74fe0faa0abd6d62afbf2294d6c4811c87021ab9374efb1813a060b2b7b5637ee51f8756a81c4637fc32537f8390a0a6843bd8951198e9917fd455ad9e93461179293b8395dbdcb0af6011c6043ebda9ddebdf493e5275625de8c458889662bf7efab51297da122e4e26f71d5e983481f0fad7a63fd99d0530d0df37dc72f73588cda38f9de4cfd8398bf759e19c5e93ac07ef468f668a90238b972b84b288841e6e31f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1fdf52f920e5552e1d8b8edacc9c9777b1195727e64934eb58152c51b963cba5d3c737668a5ed645b8735da53f381b8ad6493bcac74a69e94887fabb189cccecb94a24e79860a6ac4c05f92f2cc346d4a3fe4e740709f4155b596c647c6f05d953bea5f6a10b4661e40a4217e6f1d61b0d678f91daac2dca50c6ce427fa955b6e6ece9ca993e912621175e446abb2a0f1f237efdde2be94d92d804f68a3e2d72754fb39b7cd354a0097edc051993b9f6f649540ecd883eb3c12f3e929252ba74fb42ebd8b47a7aa3cb6438cfaa9045b84c5ab651a62c6f7a3173265f877c7c4ed6dc4547bbadeea6ccfa3823c74347f3bec4a6d655c6500b643957ffcfd07069e99f809d4159bb1f3dd9a243784bcc6f70375491654b3aa076c4988cd360e997928650d7c2c8c4738d45b1b77c1a880ef3245c86fa2703b4aee89f8b4f863ffc90279c627fa6da4a4dc9d208b209c5985f99b489d65a2d5a5014b2a5831c417fb316989397b4d122d72e5dc39bae8cd6650e4403331e1c7ecd30b8c5fc9488d74bb3099553ebed25e0337b9ad8a1cc3e54d891290d8cd8b71ee3a446332c4e22f8a02cac1422d169f989dfc4fe230564d227ad6121da91fea927d4f042abcdb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000870e56b3616dd92536ff70f7c44a77bc6c6f4f58cb1ec2cdf201b5a56c6c9e8dbab89298053c84c171f62858337b2016d81abd5f73d71b3fe8dbf85e944b6d4d41ab555d2871b6b7c910b7b5c7d5dcd9616d9e230bcf00cf215128c337140b176260901e03cbe9bc9db45f9547c1ab9ee13cebc7a9ad57c8fa4396a4f712db5a052f081b2808c744574203f530323229cc729eaf4aed00274b375aebae129b8fc1dc228b87e869c87f56a1a23b63d992bef53170fea742c2adf314fdd351712db1ecf83a1f4f244e80bad658a585b598e53996e343eb75a85eff156867dd6ad20827bacc43722d252f4e3363c777bdcf842ee25f6122f07d6fef3e133fd3ddede04c23e88d23314af73bb52eaf4c63d192b92ec5a915aa6ddef5c9f387dec54908ba4c7b5475453ad354e9ed2e12cf43fecf63418dfb1e30646a9da43c08ac33feac651f962682faa5dcb044a7bb506042ea737658f3243eb4182c13efe258a77f07aa41e4e16ab9016b0d21107301ed22473034582464cad764da02cc61aa5f6e86bf0dfd0eb716e4e286d30de7abc03c005f479ae8779c97776b00ae42482e28a86d83e3757f6a36b1d89907ac467ce07305e072552e79e5aa157e6fbe90f30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a956f2c644982d5a7952aeb5ddd3257025047b4922080e026e5db729bf31d4478301e1f7608b7e24129b43d12a418d08a7b2ca8c6527527e8a35efe0310affea9c365dd51d1fc27f585db7241db6a2c002d6757589f43fc97cb24390c716a648f55711542688f433bd08410f17eb778bc9bd1c66c39a781df72f8f53894ea726bd2156e67bd5ee7049afb4565b792798de84c2446c2ccea87dedb1dfc3880f70e66ff3cbbca560896056b0d17df7a4eb890027010acf02a087d664c19d41a1ac755c16df8f05f388ac84d7b0ddcb22046af103ee8241e9297a80ee81e93a456fd35fe5bd57f669f3534a203466c96d6fa522d1bb1c613ec54720036b3ac413a44bb0a272f7994c3cbb5a9e1e2b04fe61510fb31268068fba20f7bac15c3af3f901060e3d8857e0a589fe0d4f5d0fa71a400c489a207bd065e11089b288aee3067e11736eaa5be2ef37f90ee61a1ff1e2de4bf356c2b7e96f27711243aee61d0690543e8d4fbf351b2a59fe320f4278762e42c460737c96bb095210a66d57f85aa8ccbb03dbab1724c12b5df7d47949e4155ccdb70756a1158218a7b70ca3bb0d490f1ffa8f56122887a2838c904b3e9bbde8a8971ea967e0cbe315b9a734841900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c3a651a017b111bb90c78ca6d3e247bdc6989597e489c4db5b8cebc05bbc118043a714a887a24d7b5bd6e595c21a4451f66fa4229b658b1dc88a34624b5345be09c1e52642cfc24c809b1c7556657d07f1aa376f8d05d1659303ed1947c5ce24f5dc555e5e34e890234000c88e985a08d0d2a87c1d8a1aa800756d8fd45fd5662584d473389629f089431bae1739df2c83768e0c9391c06764f7ea90d3d3103557457cc9726f7389381b27be4643a8c264c3d305e1d0624d73f0b0df951cb40353eaa244fb7d161e6255161fe00580845db853a0ebc8fd766993817cd0106b74142b638ba2b11b0c1c1b4b0d99327cb5e85bc05fef7d02750564781c510255254911c3faf8d969abd8c0eb1cd8dca6fcd4d94f73e31a8c8c85167ab899ee55dcc18c2f87d8a0d85a50ff0f68ce6707cc83ff099aa1bfecaa75d15096915adb4586e1fcc0a510fe1ad18155d001fca2b7b98b46e8d3a5453cae73b37c1b3b8016c9d1915d36846a5464b9e2bcfe735ae3f52827bcff8c62a3eee997b5997976b5ff33d225d615ae9df2ca4f40b452b6c6e7530aa62f4ef8815c048e6d05c1ed785b243d63e40537237a0b455a598895a9ba61d548a5f1ba966eaa4b805b45ba3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024c785b4317ebd01b4ee0d5986c2bf1424a010814850d907f1cbbfaa5f468f94570d1e1999bbcf7acfc996925cc8dc3e764625a97f480db0c7a2aa1ce09ef59e86f8f97f84a52e25621f7de92b361c816eac1efb75b5d5ddd8e611e4ede174ff02f9cd8eb9be6b2b5b779b492fee876f9af4c694e68ad7bb8f363030cc62405b8b50f41e83e665c9d4195156e31157923ed218e0608be08f4984d68316cc3e94f3fc93e96a25fc45f0d3956e0d2ab2da1977a2cf21b62413b3655d4e1f405f88a419e3239995f5812248d110e9a9a42d118693f8e600a0dfba8b615736a43443a6977f5978a300ab1fd17ec023fa722ef31e97f9acbb37b509cc6f9e70c5d308c3e3cc3be6dd0e181279af0056188da22b88b0dc595a95bd1450bd6fcda1a8a9f10cb07f8391fde36aa0890f0afa51ac08a469299fa519df2686c08db255cf0547a40978b7950366f90208532391015b295960f6945d8b28541c328758495682cd134b5142aefd3c08a294c900afd2a70713dfd8708c963a6833b7ad5ef1fbacd0987dae2a474715b9b7acc67fe30d889feaee9d1f9557e3dc9ceb8b677e16fb45439a618cd263cb8297953f2615328fac7a271899f9e5b9a15cabe297e8c97600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a60814159b0cba24721f8f877a35cbb49e26af882c0fcb145d0508ae120752e28fe7469569095f4f8a7060f089b90d671c9eb975f97292f98983f1e7882880edf93bc389c48f380ae16b01f81f7fc7e826dc804280423ef99a52738fc29b30ca83d2e31d718efb1140ac38279079ccbe2b5998650eb07784c55d588e3c637fbe689effe1d6e83d8b7a1a53c9c5b7901d849f25e171924b570a62ccf0f9161e25c2a20af10d322fb4422eb576f9de72128bc31b066a1ee6d14588791ba848c352ca32821f050e280e0917661f383dcd5c3c963b2eb040c6fb2bbd6200abbdaf53e872bc87c1f418190fe7e477390c87222344b09dcf55b005cf72b40a03acb2ba9243ca0166054393eb6d438468290fe8f574c765d9198d932e40701aedff152801fccd88d26b550bc8c4f42b6c2549b190bce2241b3ef1b9ef26bc872722c2844cfaabd2302f3bb3e884c776813e2b50ba6d02c9ec063afca24811f8b7a835a41432b1e251304ac5245d2b9ab88fea91032a5b512c0a03fd11bad85419ec55720e866e7eb9aa3729183da2b010cd3fd510ebeecd2366cad464c14605fd645da2d7c7c47a018ce5b758c327ab96d4f47a6141820aadc242277279c514a0e2aec00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008efb7e763bd032c2864b7afeb6ae3dcf5eb30c7b6faef76e7ba7c75d68e7f6a78a9a9569b1c9339b58cab22f7a6d73bfe271f9070e23fc2fb1ea4b31fec7c303d668d3676a6625c6f58ffa14b2641c02926e7f9bc214893b56b2f93536fe8686c37cc749ca936ff4e8b90954a29f7cc9621216de6e8aed7b69dc9cb29e58ed938a11f7f9c1719074bdd8d1e15df51fe3e673e34d6a0a76c984c8f5e9ed53ea89c1a75d075348a6d025b9cbca5e6796c70f5f0c99bf3b1c7a70c6cc864ed4e1ce735352ebbe116936a1f39216c10147ff94e1a65700fb7005f0961aeabdd51c7049f80acf2f6bcd145a8bf3bc791557c198bff0714d3672c275b4a88af5b93bdeb3d4a1a6729db56c118155b8f4a5a8bb29913c36a0192953d973cee7e0eb27663a567a01d82f90de20d9801068165868239c922ba360b0a5d99b3b5f7031155abaa276beb09f6de2e3d9d0c3d282de4d141177ae5ba6a3cfad0a673fdecd39a022a891b2d7629c87d0a2b9dae5db6029139d6ecfaafc7480c45926e1d415bed6020d52a71744bc8fb6d08f9556f8b905ede96a291e8c41435b47bb7f8d2d4d058982b23171a7fa85a35ac327c0430623e85709d9dd835832abde0d144dfcec890000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b00365d645ebbd023882011bbc2287bdfedc6e7a6ac20ad8c231a7354e9053e5637c76bcf26072c4389d30d6a4711f074d2f1e2f9b3992476df4a6d402c810c38bc7013cdf7a7f47d78e8ea19955b34ee34aa618751dabc66b916a1e0817bf9e48e5f5d019e60635769070c09e022ed2c5bd5fa75b5d61246fe9fcc625cb0fae654c7d89483136b3d13b2074cee21726f1871362b1df60b2ae48dd9de0495c345ba51afc84deedb61889c24af3adcc280f62fb9058a7a3e73a5fa96db531d0a4a1ab6a28717b08eb9904e24359d4bb79d520de537d098eee632d74908b46297b5dedb5cc1d9afa798c9a5db5dc25bfd747da524244ffd4169d83c91172b0d8c3002e56b8ccd80b0b5050fed4b9f9593ae991d9acfab69c0d43ed7f47e110daf41dd90c46d7c79a1577463f15e22497504ccf98c85653c7e881af10261f28443ccd69b724bd65a5dd928ff0094ad16e6269bb12b79070193f54b2b44aadb8175b325d88012c08f888a29efd276c624e31d8d8361a3c27ef527e8ac4c6016d576f79e30979d904e4ffabb123cb51cb2dcbdb6d105c1be8f74b1a5ee21eed4867f825dcf31fdcdeff968f4c68686cd63dd85546f353243432ba7ba16f673be814c60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000856e9a0ca5865ac6956ca110b8a47c4a9bc1c154e3cacf4b84e9e4ce56b785343e3886265c5a6570b5107b9a0315cd560a12d88f8fe4b08125dc858326e57b59176d117ac0f087e616887cd48c7874c32592b046f666e9447eaec31f8e7521c1de061a46eabed7a5bc18cd98548630da7542bb1737ced38e5e5e7829a599ab31a66bf54f8c4d30a0be94fe6ff07207b684329bd78e7b47359897a80b3c42dbb6692c067e2cd2fc0455b7cf0ef5779d90d79d1744aaf13bf69079971777c1c6076f1064df96165b2ec76fdad25a033197d4fe170582ac237aee6b42b4d0b8e7ac281306b2263f9cae77d0c0189b6e71afa6be80b20c1da6ad18d4bd253e6642a571784156729adbefb429bbc8eadafe9d48608f9af420296db9fd5c4bdb1c701101265bf248b227d7aca3f698b172dac1621ad1b03b08cdceaa7a99f788101f6e075af6ad389908f8ddaba98073f1c00928ac247bb22828698d01c19b1cde5f65105967e891dc1a06bf4ccab648b5b48cf21d1d6356e4deabdc781ed52e61b371833e3724a458fa86532215ca791083e892febc3d850b51f080f86077643abaa5d5fffe1d63afdb015db3bad8955a8b852c47625a8e3fcf04584d4758f57154b30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000263a45cf5f0f263656b0322ae3a03f58c72b72e2e1dafac9faa895e5aa23755aedb349ad76e68e966656e4e8e1e4f71cc166a774970248fc97324b9380f48fb9ca87ddaa57935b54d333539876c5a20d4f275d84795bcb0e81cface8ce49f7304e3b6a2ae838bdcbb078144ac22994bedc04c0b41a2150dea9535323a648f8d917611bb2d5adb8557af412b9987f2cc50b0d74660a34983a2b4d51abb474ebae504db02e7c96b7e255a8b677b7be430c3bf656e83ea1d423a7ac49881a28239a682ac6963a6cb99e0b44056942c18fef9e45e84b5c0fc5195088e2ebf200043b1ef91ddfc6085a2e06dede00251150f6d56e387a0245082ee185a696f44b31574c1f89145cd819954ed2f71c4a8ab18296a9cd618f4cb2ef58fdfbe0d5f9bd703323ab8807ca1eaa92d402d1a8e001324ff75a2be8cb80b8f73cbd81ed0946504e2878ff63aba8a6c0adedbf4220426985dcf3f1b99e84f6eec926e2691c6ac54cdb72824af8a3094df5674c8afe9c3cae24162c3fecf7fa6de0665a88fdc45996e7ff6dfc3ef392bbb15bc9d4e697db2d8d34cf3b11ad4ff63ae8443893f3ff2cd022089de8885f437e589bab6efaa6d111392eae912406c2d444438e67720d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f41881109201ee564f9bd205813c107f8b32645229a512d80beddc074920558fd90535da4dff5ac24e9ece598be385d22793c052e61bea9107c7e912b0744b3a9f192d4ef7fd2e6100360cba6f8bae7789a54fb7af744f6f8a5bf447484c698c7a719f63fbf0bf5789f26301fda989f111760009c9a7875204948e5ebf03c7a6b31ec17cfef837fb0ab1b57be82fed6ce110d47446fa272592c3a94b35885203e54abb1e0d4957599a4d2d0dca7d0c57b42eeeb87364f0c6ca350534e173852bd67501e0ff19aa264f974178433d360bcc1ea38837402bf46f505bf60acc493b8544e6b477cf3cf8c7b591a28026cd0a3aa0998a06ff5454ba3a79a5ec840018e2019a5ce7a45f2b32becf4c615bcb0f90836409512d2009601bf6e230879fae756c6b465bc5a6d6129f897984faf2b115b36abc926432970d4e5b38fe26a2b302722de2341b8fa6d8e7145987df5a1dfe947672fee48e36ba4219429db7ded569515ef1502d8257b13e07d431ca491786d2fd0fc7846e343c23fb11285d35408dfc9b5f50da8002d5d67a7e76d4b9e132f4ee50772d553da518afab66003808946ff66da4803a87c23cd6ef221543c8fb0fdfe17e8ba4e696302c9d52760e200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cc386c06bfac607f956541bfc1fd651d45d04741ca421be4fa3666c37bac63fc56adef1b3e5bd35754e4d38b1e17329b22194e72cdf8587aeba32e958d32552f2ef8572eb92dd35702926f55457d783479ed6306141d42df71a6c36b8f6529c0d3d764ccbe021212be14f797bdea9f831e1e367be7227f2d24839e47f245805aed51f5c5bb17263d41f560c05338c7dbd1c66238f1131570ec4dcb7238bbdc570593334c9cb701c0ffe5b04daca2fd8ec75328627cfff179143e62ebd0c947e3ea7958e15deb25bd5ff66142351743bbc9119b7a98afbe1fc3d11ecc117837abca31e9e31ba4502670fcb49d5fb11c54f3b7a0e828ef4dd95fb2fe9fcd8085216b8611c05aa9e3ddc1f101c6bcb716630a106b4e0b52cc6218b5a46d711d93bef3ebe1314d3053626d13abd45b876f41159e158d2c7dc631b223f90959f58b41b9345ac82a982812639a2edd45b336418aa5dc356e7896178d62681ac512c245a6c4c5c191d1e9926b7585db919ba8b7f9eb61572692e374b01a0b231aab16e3046e2fb50a80a62cf957b1e6b88af269af9fd165cfe8125e9fd96c676d215c46f1bf63dfda1e546e05e89d288f08a1bd58dfc0694d924ac5705752dd7cedc010000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000affbc5c7ca99c8e17ac21a34655e4963a4c797b03397732a9b1f613e62c35edf191df36404be92d3ae9be596e48fbef87a020b820ee7df7147668700164d52b5f7ff907e02bc5ae0f00daf85e3ed149aed3337722c803994d09dc4458ab360c8e46d4630072576a596639d7f696ded57e96958720731f39d27e2e23d7ac7c58b475d4bbdc0d6e06cf26fbb11209f5a7ee66eed2e73c36bef530533a62ef9c8386228e3c232d14d168f25f8336dd717aac838f42d00112b8e71509cb6feb2992a2629c5931b7d5e7ef7a49f291d0aa28fb260a93ad9d422a732721fc5a9f44c93e679736975a9dafbb6ea68ecdeec9a2d82a2310cb8164e64b81305c1a7d0f34a48e8f2d1e5309fa7b93a26dd3e37fda117aa650568a7f5256ddcb79dec2a0a886ff2b771dd323aa0963fddaffd38a338e9931c8e2e4fabbe864f38bf49031e8f6fc249f30c6c853e3cac46ec603105449386716aaccca3620a4c55a7961211dd7a55bbd69db5b716da6163f49d044b648fa317f83974d487a4dee6c9767c87baf5adc8749c5ce359b4de29a64432e30373918da093635099bfbf30ace995a106b20a1ca56362606058ba350f4fadcd6df3b874d489b9d2a67545ba490b46aba700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008646acc410fca3c9852bb4061d4797b4f1732310ecd682302625757ed75b4936d6068ea9b49eb1aca365ed24b31da2c9e29b176fa6c2d02e3f9e6d722c0e13b02b2b6542975e407f7264ceb1558767b2a43443e250e0a44a786172844ea6b7f1d443b6f5d1afdd3a8ded16dce7984252833f58381dfb3543d2835d28a94a084aa8555c828655a4eeb9795f4fc83e4e221b50b33862091a74df8b58fe336c6fe38d8c51ecebbcf86e903e6353249ec47dcae94545c8d9a40470d4de57d4546ada343b3f6e596760c3e7f3aa34d190f6545feef5de33001384e03e8910e253b714f63e16901e19be7724a814faad0d006ebcaf5de3f6da7c98f2c682f860acd1b648802a96bc85f42690ee71518baa3a2943d82e882ab670972eb4ecb45c36b24ccdfa93356e60473e1d742e928d5582d6fd7e406cc840c9639714683145fee80606aa86425b963b3f77d4117e35a47447a1a1452c197c4bf45c9c63cb71422f3719ec0e502627b3c64af00a2caff76942921896a243c55e24eb8933ce2aac95d6b1e7adf9a868db062ac1f86ac20cc5950f586c1c57d1e878c5cc8fe27207fcd9e18bcb62e711189a4c95da526815bee37e2b4eab0d1dc9cca57296decf3684cb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094b038dd7b2ca15ce78a3293a78050d26402479754e82a39dd2680afc3acdb0764fbfc7df6e5f26890a0420a7fa42c8c637ef90e62a91b5d00ab6f8cd9c074f8c98e318aebcf3dcbe537f4fc7ea156ffb75e9af82378a3ed6eaa36b5318eb7dd3479e4d06e126134570c693fd60e70e8c27de947a94a60cf8e51d4c6c76d8aec08c2d9f18aac260c409959828ca83774f20104605a272be6e4dcd6c53ca3d6b6d75192faa7afc888fed66fd4c4218b627097016d76268dc20129bfdb002f610fa832317f525b3062538d96e3ec1f965973bbe5008bd9e1ec53808361df0af52e40930485d9ba35708df1eac05985144dd78968fb223cdc83328319e1796e140c1408a40089014d578cabaf1df431f5c94fc32a2b5989aaa133c6a86cf913c69bd1ee94b60946b758b56ef894940f94bda1241c0d79082f1142eb81805d9e872589a0e0c426f2db73f9cd67239e6b5234f2a3a2b84bcd16daa6561eb5889f19dd2454c56ae46495fa43f2d6f7156e95efdaf81615f81a6f7f6cd2c39f2790b583b4be5283177fdc7dbec319133faa872966ca84e07b1c0be56f1fd095a61fbbbb45ed93249ad7353526aabd5c4555fb3e19dad29098ab1cef352c40f6e424bca60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1cc6b94b790761438f6207dcb93b86b34a11a445ca3218e765ffe16c5dc723bcc383ba277e5d0eadf17099c01a515b7a78909af2262eb10137c067a78c82205c318199c864f08abe151874c4b8e09277958984d3f23631d0eaacb8cbe17a7c569d92542dd49c3577fc83b6a475c363f1e306b1e1f64f689043506a8c359b032ae479d3670f9b39da2848a29066d36cd05245df8ea351f5183e42f2de88ea6f54566715b8f4e77c275b5c959bb5de1c2f222e12df25e664a07f4088e443a7ec0226d09af667facaaa0f08d109491ce854021f509022076c781d9e18f8ea880e8f636fba00fee53916eb8d771bf9732cd3887c0256c9fabfb9278d9fdc21ff5a111223ae74c85b1194a0c7dd25f41116db14f82daee30ed001d77cb8976ad06ab4b3464c68e0fa18d35afd86f90da32b9967a09a72f945eaf03b782a6736f03a365272e83fb5ef58621df9e0b5749c9696ddb0b88a1db2d0821355b874da027685a51db7fc1315b1ec776d50005dadcf406cb7f4f279649f771bd4e6c090a7dd3c822f53bc26165b500c46e67d45d5fc104ea0fa1c13965f345c0f4a95539685ef28d5113ffbe76b0a0220419b033b698670f9dc3aa140e4fa5974386b7dd6b96000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f472ce5ae00c8d990a43a1ed40ca525c74d9d655d04b9a4a0a46c26b179d3902208d9a43a09b3f55f98aa2618d14bfbb7851ce5aae22812c82c53e90680bf74ef88e0010f6e39c35957c3028099c977f5c964f3e5a2629c14d9811cd2fd7a075cc2fe382fd451e08c5f68f455a4f070e83eea0bf78f86cb8632005c7a667d623f2e4ef741a877b0ec5f4bf360dfa247ac166cadda2f80fc57ea276ffa992ce1fe5c9e7a608ff9aa194838aeb9f17ef33a5557511baec889f266532877dcb56b9b2bad14ddc05ca49d8d682232277f7338da160aa3145e637447748928af61440aec170dc9141edd41244d13c4ea8f4bd4dcc8f5761724f84ed380d8b722f4c516e8f8d2b0a37f48cc80e677f0729cf7959689170200dba75c46902a4bb2c4da7b82598237c398857c4fcc6d1aaef4a90b05ff3ac09412072784dbca8b022d3451529bd5f383ada4679a33c10915de3bde6afe5649f6b34dc481fed4edbd056e7b9dccbdd40791cf39a4cd00f4c763e26a6233efb12a16e3a370b9e184048c3503978c04697bab53c05459572412475c0c03d55783ce4eee87bfe411edebff27ebf14dce31547bbc1812552cf9495cd6b48c42ad2552f8979bf7b6cda4716b3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012b45246ee01f55df74d089112cb216b185d77ff4fd83f32e14e94919e6e69df8d745b647bea84748bc2b4d155fc3c80b535a3f2809a4b44acd00e95f6a516ca1f521a51e2f7f0f83a76ba9ce7d8ec25e14bf1545a6fe1b88dcb1cd6b9e8666ed524c3db644cee65d1311f30570807e30a8fa129d8dd7c73835070f481ed111891564d26a373ed570ab1d8e3d64c71c157c612ed27563f3e83987767a233ecf4444ac3a19d9be2564aabc905f2dffb02726fdfbf2a0833e155b109b311ca66acb5f8eca8990bb2db0a0b4d91690f002b2b2a235a6d5cd5394b5069c1ad8913c5c4777f45a4fd65fd03df939444df239022feee113738ddbb2b1a0484deeb2fb6d8c12819668e113a416e4d6f9ba5bb3985183cee6a32c6bb9d389d09c1f45be1d29af2a61cc5a96d54fb1ee28d1aaac0defb3953697587e6d82c103e8c3e11a224222a27941bae63d0386c9181e9ec488a51a680495de723b2feb17b624331b47340603da8b4182615b5f643a80d6a5833967cb94c02b3db1a8a1f23f99580ea43804cb9f27e8b2d521d891ff49cc969c5a0a80412550eb624ac8fede3de5855d4f36f631e4daec1ea9df74fbecd2df88730629ce883290a7c5bc68e1a2fb533000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082f242c03cb06733c3d6c4a6e0eeb048cfa06f76d339e8f675a8b5c59ee9114ed7e796f317609f130efa76e0520ca8522f85ef0f1765bfd8d334075da5c7e927bdedc047b8f87e591eb6bc078ae5dbde6261f90b066fc9d93ce8b82b8d38dcd198b3ae60e8c3a9eb6ffd79edbf5c391f6601b754d16fb1e3410967c33bbc418dc2a2a1e37f8c5c02fc3529de50992ed206eca3b37d3017a7ae46343cf0f3ddf86d81da41c85214a17e277ef6c89b9a985cc5576553c5a40b36d99fbe7fece6c4bb9f108bbbb6123f736de980a6b141dd6ce3dd4dc83af106669bca25af281aea2e6227d5731393a009cbfc500e25452f2e72847374cc8d5d95adbb5432047759af42e99953960dbe14c27e07a7e2e937325fca2568b5197e94f76261f4c60d0bb25fb2c03791a1e573b49a0b9d77444788ec98c74f9e7be27ba1769cc5d62e1860af678b1a54c67cf3504b31b22aa29542cb3d72fa92ed07332b34657b5c6cec9fd7d7929c5b209f3a53f6d3199938fe13baa7f24e03649849803f101b8d42ce3029c7c0e899773253f906491fbc27877780dcc15659026b3ea28d1369be08c738bd4d9432e261991a27e1f0e77955e6f262a5ab42b9a725d29793a7a90e78280000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aee28c767300358d74561c2b21066409b3608bfdc8c5ec1123a8d59d17ff0f5e6e07d89a83c75e195c0800415ee3812c9fdf938730c6de6e2eb3ed7e371f2de06d7d57cc9ade19326a5a22a9d9f0c5b6976e6ed12c716f0e1fb01e5493e60f37c932b002c8bd8a755f0d9548e98d71c517c43048d69df85b39d06b9a10d5a321534cd583cb6c8c189f66eb3c9faf1b20c844972faf5a6e81e6c04a02e5c4a9d751fd0a8da7a20e21af54e2bc0fb1824aacd3c44ca5274bda3e04326fdcdbcb33c57d8a122096bc16b779b49ed67f2aed76c78219d2b167b8507eebc6263e8fbb32859470a34e43f6cccff1e0da6bfda2132b8cb7c980fd9cb638ac6af658f315d7d9a119c48a95c117ee29aef980b6eef90f347b54914347756bf3c2c3e606af7c396ac7ad252b48abeb1b14538821a9bc9955ee78e522e7a3e7f9b8596c8f102d26fbb6adf7287cafd750e65a35215de4e420178bdb50b76b17740be983e39385477dabc82766c808ae0583da39694addc8f8e271f8a897ab707b06da4092bc6a89e5b994098b2813df4e50665c0df1dcc5bd94382500b7fd4210b334bcb08147eea628bf36e7c61c987056a6555bfa445f4e71b66e731a425ceaa3cd24e1ac00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e7e0d28604be86effb54e03fca71a03307dd4961dfdbd92e5c870ba20a179a5e66e475c5a42c8ba28bc3ba8c909bc2a6f0424555d541590393f54257bd7dc96bf89a3dccd450126dbf96e05dc34395480ff60c9979b8e27711d8d5f5556f9707665f7c52feda318edc37ee321fc7263f2e800fa414b1551b3993daea3e41f97fe80faf5c1c7fcd72d435ed08ce21f44456bbee04d75decd4c370536fdd7d26536ff05ad08c63ca847a5568da0c06da264507c09441416fa50b7c468ea329df3a94f054b919357eac1ff680d5b6f311a334f460988cfa17a87bfd8f05df1ac41c1a4673114dad895a0787e940184f031b249772ae55bf7cc67d222aab3af2fb076a8a0a955d0c78645f772bb00971244388efe7a3d282c7ce20ac862d5a7c5bd6df1adbf5dfee06e50acbfa2a67a2b5a32bc018bd95471a25bafa6ee449e4ad94ffb5310bd7c4fb92c54dff98e81e0560db1e375c4e76e3032697599ca131f1bcbcdb69faa4a055becacedc46ff5c1765f78ef54c2595ab63969c3dbffc16cfd45a071c0db4379b6ed9f078ba1f5c9f0b1ba84f2cb3c18eac3766b0f2996a74de5f3c8283a64ffd4d414a610288c91a7e85a0b6ae6cf9346cf4f29297667df9a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c5a0290db2e14cbb2f127beb0792f0e864bfa09a8fc87a6ecce6c38037206444e751a5db8092e1feb5dd1d4d91eb07fc918287e963e45d572c6a0a074811a9026e185a29db38512f59d007e5e111f79d653022327988fe2989350565cd9c5a4e37fec9a4422a074e0e09e8ccae96f0ef03d57df54858adc79401eb44e8cbb3a18d332b513affc28c15abcca2c92f401c24c3a41292e107936874a47980e54e03291354633971f902d262e15373965c1c1e9bd7d921b839e945a8e81524cc671992e696979766c719c8e389218b27ca045f9728a7c64cab1209036330f06b82062ea2047237032bf4f0ded65d2d325f6555a216ef1d036f68022f9d94887b8b794b3a687613c60ac4eb84784a2ac5aac7877d3176ea41a63d2c946fe2feb073b8f7dbcb150b2265d756a7d8d1df3adab53445de34ae21a1878fcdf5327d46dddb7ba5209682cb0765610b299cf22054ad9597fde860442e25e9edc9c2309554ef8e46b965baff046e5dffa6f87db76fc958c4ca46bf6d6a95468dd20df46f8ed88a093d20c47a26ae86bb0e0cc1317d64e9f968babcdbb2bf56f903ef1711fb2db35662933482d94fcb85638a9466a30f5a9dd5a46a66c011db00bb47ef4c1e700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cbbb1fbd8436c0037011cf39a295117508e82dbdfb4aa538b2ae638d417a526d7a84dd6a6d3b123f60e59d37c06ab7cace13b7ba230769700d8ed066bc3ee5eb0e162042f7ed07b97be2283e78360354d27c4ce08bec4e22ce85a61043f8b2269783b7ad1c679753afba23d723646317a82d3ea94c4a6282b0b7ed8e51ac1ad03c788b7505955b100f28a241ec6e183a752215f741633f8a774cc821f6299e82692a529b7e4eead34e6daa10621ebc59c088cf2434df497b996b3560e7a38613a7c4261074d43c3b4c3441a6d9f052cadef9a77ce98261074966a85045a2a479cf5d9f88deaf30313cfa97ca7a79ea624308879733899d7977e7c2bd9d3e24c986a16e0c59c3c339edd72142cbf842f4591379e58b8ecead0df0f4d1b55192aa83880a90ba81f4412f1da21a48cc8480505ce5579dadf337262fbb7dd1abf2fdab956ce2eb1e84db842168d30957a4e88c363433bbaa3beae9ab729e66ec357dafe756c8ca92e7897ddffdfe1e024a685cc1b6846baaadb05877c395549f9f7552686e149fe88a1e4e13a9e99eb9b2ed0450b704462204f32fd5ccfb32344f8c4fe72cd6e2fd32cd4731235603fcb2b936091768324a40b478f33aa105e939a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088cf94d09b0230cd0deac2b2eb34c8b2b54c5f15d94d3fbfb67c0c7b5698136f82b440349653ef4715bd38c2ab0eda5c6c2bfcdfdb6019b0d74a4cc08cdc480215fe8c5c5c78f557866d05a614339ac0f91710bfa01025702e699783772d69ecea7ab11ee8be4877f0fbe24ad76c6b2a2630947106dab5be4c1dbb0e69798c4ef82a51efac0d6d816e86d3bc5ef300dd838a4aeb909ea906935b51d51180564bec628d26f1855f5995aa3010657420276362625079c7440319eccc9f5915002e4e6afa55953e2019a6f577d82429077fcc58e50450080b4ce26edcbc434dd75f12985d7083f138d406cc3080090412792cbbbeb7b2791173183e37d246a19bf316016e8853e39a993e12f2c0cc39eae9f2702b13575160436c5f98055158f079c95fd3826e5efafd0cbf9a75dd189c0e06100dc1231c37a0e3ac1055122420d53bfbab313e8e94f5db46b3d1a37e737847ecf0ddd074f817ce85eab2cb350246f72bd5df7ac32939a16d58504d30bedbbd39382d2f4e16d19c09a3b9a63a6e241f0c52af67b464f9aa2d7ac9df371e0c5999c9d6a1c71f3a614a96c96cfcc72dc37484a5f2293962b91b545e90429db39ec0c298a782219bc1ba19a996543dca0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000206d6f285a73319f054c1006ff6d25b032bf01e34c791b5c3993e25f645e027e3a78b37f61c3c216c51b97f0cc4fb49cc00adc4d6c9f069e8e80f05e6d3ac3c3b3a3925d89f95c405fa7317e69cfea388633f3510900f079ee119d48b06f18a09b79d335b7e684f42e09cd4a24c96f3dc344c01136c8e561bab6afeb56f7f1036f107c556cdee6f6b883321deeb9f205e1a246be36668613dd10ebf0bb6b2b9f22fcd2fc7de7a859ec7e8bd1fbcbdb727a9d28ea533dff798ac4c383523c334fac099416def265146dd20fe191420dbbbafd45b5cb8c27e1487f7923cc2fb07a78495418e6eb5d8fb22e0f4adef3bfa0d5cc0ff16393fa0fa932d6f51d83452d3187ccc225cfb578065f2c014b5c06cc1c9aee687e06a543f144cbd23ccb319fd4b458fa3ba4f916432437110363db829105733e01f755059775fd6a4164baeb1891f7a3646dc1c69d8b3d43bd5a95b8afd92e23fea8290243d9fb213c7555b44ba1942dc0c912d0d1c83d854ca6ffb6aaacf75d2369698527b302ba83fec4f3c561f249b1f0ea967e9a06f56f0c9497cdc76f755c87e5a8d2f75da81c9ae74ab6c43fc4647975d822b9917c09fb4ac328ea177aca199747f272c99b99654ec900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bd54b4fb87aec5845eb2d1d16c72df5ef2c8a0261ea7152b1f61c749085ce92d16c1afe7f200c9311989f5dd45dc708628a4bdcf827065b3f07d9038bf87d8efedf59177c1173108555bf8ca779a8719aaae15b0235f3293d73dc71a692c29048f3ab55b47241b711842873809832f81bd016944a66be9817025d90ced7d5c222e1351da2e0b5128437f09361c71a1160db3a96265378e4eb41fbcd8e40fa4af5a640eff52818a48f25eb13f2afebbbf779d51e2e2c3fed41217786d18cc1d643ebe72af4293d1564fa5c361515ea4212ad41500b307f1210e06b6ee49fcc1ec4a51d63669a46b31d001629e220e6ffc9633651a9abe9d6737458be052fc8271e1df4bb7dde50b693a6ef43f87a6fe8908ec36e381797b1a2bb02b543b742f69a8e5862e7e2bc62b59ed5ffa98e2baefa587682c8a7e16f4b0e3b3143c512d9e478888cf1e25fbbebf04fcd785b0759d17cb4648f8f178cd632ab06fa1a6468861c7f8e5fbb035ede7283a78ac507d0704273aebca5a48ae342d8a507ed30d41fb80c492e6eb0371e2ca62a0a52a60df48da7b0aacf469126aeb189f6fabd5428571071fd5530eefd97473440165cb1d4730ce04f435da8f360ba883a459de6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025c3059d8d364201a94215c9c1f42a82c279dd2fe53c5afd63673caa44c0758798d45a66078d0ef6098a4e78c99e25b474d860a95ba2c3504486cd66ccaef10b7dbce7d8b3424c840136d990fbbc8b1eb703c2f6103732b60030ee4a048df002eafd07305e9c9e4bb06c92818e002a219bcc82e7fa07f6ad0ce93bebffacd093bf1f4bbeba235cefa6f6028f91652c10df231dda4d2f99eaa4ba87b5d814962a0b60fd314c4f6f2b40a5949206888b08c6476e636bfb87a9223557a252d78d0f6e134e35361fa1da21d332b3f5ec608c6a15e9e50fd704cdf0df43556488f1e3bd656b04a02b325f4525ecf730eb69714d3ab3dcc0bd99219308e4c37abe5d5ca57d73eee1a7773bd378b69158a8f18ee198aa98d01e580ab5f92ce3a31ffa67d720547e2fcc3cbb038323c0577a3df987719d9edd5cf06ee91bba5c4077f792b6a6a92c1e286008718bf99f089bf0e66b01748db0bf463be496d46bcbb6d41511aee80b98c6842edf5121be31e011dfabbd586a7ac3b5eb71a92f166639be513dea71a3e9f00355d16ea965533d149a09fd2fa73835a3ea1152e485f678cf211608288033f57affff80327235f06e92fff038f3da2a896f715e957c321614380000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2e578207a3d1c8c1ea9634d16e564d5e93194c8c4be0e1868e5b8f22807cc2c58b53878c903b62e68cae444267372b4d1cae68b30f336d37584c3077a890a2b34cab86b1f09ea0cababb0eb6f8e8e87cb2bd0b35ccfe83df7aa547b519cbd2b92724e4479dea3b6434a078ce3a7a1f10ce8ebf3ac63d5e36c90f1dd3f80bb3aef6d0be26daf53198a70ff5286b8d169190f3db3eb47a0b73bccfc37e0cebbfcce7ef65c560d691673ec840bd92f1bafa5f41ad2d60514aaae20eee5dbb043e84ec28e3bd4de7ae11412c5b208c80b1b01998b139f83590fd34db7cd2b01d3741f783dc50bbf94129aaae69c193d1d24ef4567ad55080f8c84130561774b8156f0a7cdf0303427e12fa7dd968e79b20a4f0481ee2400f779098d2ac028ed69455be14b25a4a93e676d1335c1b6be70109dfaa1046810e8446615dba2e5523e9e3705932265c1291f9731242afb5b40f3aa6bf1467567e1a33db80ec9b85ddd22f80c65018c4295ba35dfa0a8d2f73f51081ad2d85593e07b42fba23b9b71fe37979336dd4a11c909fcc451a7a82856f943f23b2f82683bd1c38bd420a379674d6688d797bb54587285e14f0194d2e510b8a952e3ba4f2b996022ef9e7bb5e59d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024cde6c6b82e7c37376f09a37bd4c84020fa057544afde5b908ec169e566a8966f06bef5c7509c0ce6e22f39d6313ad98ab922ce9f2d26ff1bf506517e80b72ce1182f2487aa26606baa79941d9aee730a194ca9f812915544d0d8b1ef8648659ded4d04e681e953e2969c290cdc04050417985df3c527f25e4f9805aae062b6a1c418d33e862a9a050633e86039607129cb15e7dd3c9a6d94e1dd5ca08629433e76e2f197218c08d0b9ea4be6a0711eb2f01913c1bf0036b56acfc3c46f1ef6e0114f0f55287ad5cb82b9c9636a6f337a730ad888bb701128baf8e7a0260e6c3636465adf44a4bc4b2f691b47c43b9ee00954747b0687990494a8bf8141dbe4921006d481f0d9830e2a150a4c015b3d625dcfe048589fb796c7b3ee7478904871cfc2e361529b32c66afb8eea981cc8bc9580e4a8a2b05aaa464ae28efc6e3973781bdfd5a8d888b5a812b441d7a5e410a30bf9b8110df2a47998b10cfd3bf72a2afd79b5469f55110d01c9f5cc16570e8c3ba6142ab7352f279cf38d48c372f7b933e7db4a8e4a33ef34d1403fa7395a0a0ad8a8b1dd60ac4e96021b3c85230f41797da9c151aa98bd9c84aebcb85ba7ab3f31cfeb4e1a86dcab07c9196ebe000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096358773d69bf4023b1cafbf978324437e8af0732753137ea14f81b1759d07d45f7fd241b2f26a95a2998efc57d0ce11a38780af94c3c4ec60f3dbeba2cfa65a7dc863fc0bc8e49237e6e406da26cf8d47e797d1cf9e6acfb0499b5787f9f7b2cc2c8a966751c9e189b579a5b7a1c8d134441a91df6311138a599cde3f158c107b6879b0a7267ec7d544551c6e33808ba1abbc16d35fd5dfb37c6051d6c631ddbd0aeac27ed5bff8f7e41673189b53dce8183b276ce7f65519c2a1d8d01adc3b929aa2ffb2d5f1b841aa7f29e77a0aa820cdb3ea0ad7ecdb9be8e4a839d2f58b6db6f98824b0addf1f9aa1f54e2b2a09b2197504069b027f41b346dee7d8198351fb6372aaa1eefb447dd0b314ad8f42a8850001b62f7846ec63884ca212fbe44aee8d878e1b487869da934d048b17ab02a197c9359cb873b579597809b3c598dc6b39414d38e7966cb9be61a2261319694a5b6c2e3e8923e626535b5415651add03109574f3949cd2d95a21498010be8a4270203597bece55d72178bb9ba15ab87e37f43cff00a882ef3e1b99863f038fbaf53abefc8a749152eb4d669da669c6e5d71ec5a8173d5e33daf7ec168718a31b1319d3141422b1e41383b3117a2400000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484022b2c1261ddda85d3a58244bf6e3fff6c9234a049c55b0dfc492b49d453a280a0be7398c39ecf7ab6e510004e8fa685c88abf1d63d239b8134b14662fa552132225258e8f7e0f5555aae2e6a196b8a916e2a31460af12225e45dd61f6acbb199304eab14eeeb6dda328acb36969d0ee11e959bbd363128772fe58668e98c96b013cb73818d971249cb48b8c93b93573b143fa5788ee3ceac317ea03d4911cb0e0977dc540d0b5231456894a2184ab0afcfa5ac4b0a3dd5a219b2a10ec4fa2db21885295190d55b342d97c4149002c76eef5dd3077429264e0ee3c4dd1c5204f009262bfc5a33a947562658bf4fbf4517e24f220d5a666c4197bb474fc16cffe50e13588eef9abef63632940819d7892068c2a71aba47a8d3ed8383d16f6ded4a21c38272a5b2e2bc20c5fb3c4cd3282b79d375f03f29bcedfb0cedab59173f32003eff608cbbd3eed2d17f8773164f0f7e543cc57abc903f17c3363379baec972db2c8a7987d27e2e2f61d56ce86374d36ca413f12e107f77f94117929f3a3542860c5b1249636e4e08ae93778c50f1fa85a47317579475e03fd69c05339369f2e037f3ee5f8ad04564d5257b15791343836940295ec24c9166f789576991c44103a1e0dcc593a08ad40188317a53491d76d8c834b5ed92c86f78485e40dd707050024dc4a0cff54da0c7b78d2cd614684e16bf21fcfddabd01986175720e5572e1f8e073ff4ec296a60b9e65814e76e231d5c1f827fbf650d8c728bc3ec46a403bd5a8f18fb7580f84e5e04dcf8a99b4beeb4d7f6fd8b9597ddd88ae99282681aca357f43c0d2f571d3a0a060fb5ab561db08198426a5709e15caf33b0dd54f117c51bd8518986a0ef1b06e962ebc2c65f0138fdb6088a9e2e3da65f4a06f252f91dee2c4ccf21fe67cf8df4d9ac282f3ddb36a49a6989a6ae05caa70cec19825635e1e0ed5f76a4a52b29a90a9b43bf38cda7ad4fc5c892dee12d0c1d1b38501a04fd63717857b9e81a078982c42a9f4f8b0d62ca25e3c25ea17c9c876683f24dbd8d591e449807a9091fcc46616635e359e0679f7b117db0e3083df38523e2a03c9edd0f5e6eb675d7baa407f299e4b83be02fcd078dd63e5d2e7151f513a1b2e443f80ed40e63f51fa425131ff88af755d95e33b7cf29a8477bb04662e752821742f8ac8606cbb58927c68e4c840ea8bd33afc801bc9c3729d52fba83cce2d490113e20f65380e670ec61743dab5631d63b36d3f946515d0f53e707b05b004a6922eb9b18162c52277ce95760043f3f833e3135882bd0ff2b5649256dc4c207532cf0357a5c13a8e7829e8a19f917fa5fa46ac5f5c66cd98c0ec9e9a773f2cfb74af426bc472745e064e3c32dafd1c9e384cc24c86baa295c53c98a468602e31c2269bbcf82783315746ef5e8fd16f03007d24ae5d02e07d13bb7ebe8a07229260a0222394303282ff42454a354a4f63332285ca7f63dbcfa4d7f1c9d22e070377d77b39ae35ad386fe31c9c9ea464f5b600958baf2e7baa9d3bedf281ab1c37afd3255571d29c6617f89f9ea35156d38cb98d373949270b79114454eaa210c3cb8773731d93da755bdd3c005691d9fa37e7dbf41f3cfe675475ca2be8852b54955125329d0d656ed80392be7aba455c9059feb6ec7b8187b7386d1a23aa05aa40e0407dd16d45037bc1bfab0c16efd47dc19078e42faf5b4c257fd0bbd91fb6d343ab37ba1ba2cd1be690417d3221aaa3b4a0bfcb3b378fe941c98d47772521813bd466b2c5709fb5e5d49d15ac8a8b5878b519eaa7f8cc0a05e2e8a8fa2d78e62fb4e8bfe2845f2001a3b0bac2cce05990c33680b365874a17fdd79c0328962fee7cf0e849ad8188f7ce72bc4194c98cf4b0adf86576a8e7aa8b62a52b1168473fde32ff188d80e166507f59521f180bf0c8929a5a5b54f8d517a749b5114f92119461b445eed8d067e9e7c0544e6b75da40c53850da8b21a9abbc04f92373fd9fdcc0996b862c9053eba4565e1cb69a645afe1a412e3f1eb6c40215be02787d38d666bee971627cbaa1870eeb80ac4bffcf5413f4754b2e50edcad72500b6042f9cd4df4c1d6b40b70171cb8da11aed2882cc6e5ecad3d0e6494bf5521212ab3d8cebd932c84d863f4deb68c51b7ab75973870313881dfaceb918b5db1481827e9224f5ed4c3a5c62795bc93d6e65f068e12f9d1d87d6e9c215502ab0220de0a2d71c8e1387af99fd9bf8fec3063075b55c8bcd59094df972a2b4dc420285aabeeb31a2ac903ac06f148903e321c0c16092aa77040bcea48b585eb18b12c25fef6c0b63a4da2b7028da9c9f5ff776ac02c8269ffc7816782492c2ff820253a3bee5b66e43686d7905ae19798d7de282355d6332e2f8fd3436a468a5391896c64f9249f9092539b472e203f8a4ef29e899bdc40acc98d3f9246d0bf307229161f38c9f1bf9239132e68d659ec1aa9b7e27950084262cfd8046cb09a8bb16d641c1b63bc2efa623cb523bd5e953b76716d7f6f6788422893739da285dd929a2b1517ad6e99ede2fa7c5fa32c30b8cce49fa222ba06b219f920d0614a30106c07800664a5e90f05eded741253a776262d1116a02b5b43bb200370d5d4cd9281bc0ab2333a0c5841d188c962e3e82b9ac23f999aa516807ff61efdd190fa328e1d488286d24047b36ad1591adbe4d8ccff339c6dffddb44562f3a8aed54ed25d36dd0cb64785ba9090718e7b432fd0286cf13818c4fd651b651e3e0d498ba20789abf8522acb7a7162a0c73f67e6f76e3838110479275e7b4d623ee65724e135a0b070dd1dea930e70a7e65c286062f86b09c9c17ebbfcf58a1be8817b8051698ed49903ba383f0601c956aca2777b95cce45bd84f3e91ab2f4b86f0d1ed540292b02067d72eec37be227cf151173c57663442850f603d09f08e1fdb3f3eb14135fc1356e089a525c795bfb6417867ace2d443317e95a59dda2cdf50992c623132356e0db7c8be22573c0ea0850880d6ad0607625d43ecd5705da2ce89a2a3d071d8b8a6b5f21e710b6eac1cc2f9d71600c081d90e786123500f14ded08f0c30e9504f5ce2c671a0b8a05321c2a1bdf1c30854b9207480f6163f08b1ea64434201cea69d616052036761b29545a7f46c120835d6a6b518bf82403f9987b2d5d2436ae6cf178a8afe5f8ff3a1730aeae783dc22569a932b76f8524dfb93fd1e704697422c42259b13981a081b4a711fc9e2bc7d40bde9ef59fde8fb84f08d98e1cde6b91f3ccded960b7d499dc198b60948b5b87f07362fe2ae2f24d7480218b021340abf73d57077446bd30504bc0eb0f2a03adbfeb603ea6f671843113c85a1389dec2ff79ba3e494e6858fefb75edd00b7358c0536c81dac73e5ccd468cc4059039495719e1f02fff366622dd1ec99d261cb0bf68dff08875c1b1ce0f2e0422fa320b0e775942b3320ea02ece074bcc9119c5480c1b1dd80a20c71ce65b3401cd94794d2f2f74e66b05645847a50e632cea070fdf4adb3c537d094eea4f7b0decc3f76a747bf210443b4fe5a4f8e79cfabc57337db7e497af80fdd7dfc8072ebd415e93513176653973f9c8945a8cbe76c69ec00c5024e28384207b3f1db0282b88b57ae8f1f6cd366e1d2785349d359aa8a122668b9b29f3b4098b9adabf03dbdfa1128c0169757360e161a84cdf17bf6463664b33532a0474669e2c539b21456356623ffcbe0fbd550a223d91752a943bfb02bd0b40a1116ad5e61d201700cee445a0e2077d05e0b657d3e359d2db2b8d158031613ec814771c6bfe985416f7070e056c0695b4d12d0335294224169558cace88c67f35f721f8e0272b2c02685b49819c2d3620caa9d4e88197a45c537e9d828e24b9113f79e1e9c51e0b093b11e4381ac7cd0c0eed51c41bdacb711d4e63870b2fe8fb40f5186a246a54274628f41ed0152d55193103acb3841fad39d702eb3f1b9cfe82fb7d2c2cb4670a3326a28ef03ec17af4d7b253dd5cab04d7e4acbcef7e58eec7de5d0f3dd07b07c9f46355147eb362998947399e42527044d5db5873e53487025d70756b1efd268b81c246b3c70d5b4fe01a54e3da45a38e1b537a4c6921006b60df762c87fa0a54e0e62969665e0d71d2a73763512c1f1ca0bf57b1373fb086c3be0bfb63121c4e44e489c43953d0359e632dba097a684c5fc270f30b99309d32cfdba216b20e90d10cbd96c562cc278dcbc20feaaa84364ab585d1c7a35fa0eb02e914ae602deacb53361c0ac264869b8358f48d8526a5d8ca64c826720b3fb0bee88f751d2b8c69a7d8b3b8ccd8c1cf84015691f2f458bee690a4a6da919b38d6a53751ec166a859494047acd4a7889b248467ae787359d7cf1175a8e823815d2cc4f315903e7e10c5e33028385d8aae3cebd846d999b21ba1bda251cd37e2cd7c62ff21e2e4142a4b2ff0c672a818a469f8f77c7cef9e12f8a68d3aa183cfe2ceacaeecf0872ea3b1afed799d93c892c51f04996de4fa5269ce3d012da5d5e116ea449d827aac0e2d3c45aee702bd4fe065282f46694f775ccbcdd4e45139cd236d185a90be8a035314a4c39818284d2f6dbd9dcdc7c1599d539c603d875fdb30c7e472812645f6078d75f46ad09b6b5dbd61f57587c5096b3c58ce05ac592d4baf7caaa135388a8e01b98f2740137082357b26f628842617e6eedb945dd75e538720a4809b3841924baad67a086558edaa26fa022be28b01d6073f228fc3180156419f620b6666d7c27f4a3a60ce85e8f020e0adeeb175f5e76a2af35aab5888e5229ce19bdb09318bea024074ce0a612d432ad4532520bce9c17dee30ff09faa2bb08b210a39ad847bc30cdee37f3208fcf174e607b4138ff149965f50a0fb25d123ca2b1d9833d6a7e55a11ecd8dfe8db2fc239911cf5cb891482afcb2e9f86df7ec00ce39436521d3841f1a553a54b6a042e7af6cd3895cd9935dbf16ef0db60a78520ae083a6ea8dbecb5274eed0e900de9ec99a3486664b6edd8319e52b6cc81f613fc3d75ec9303672207a5ec5deb57fc8a55a76f8c06b4181c8ec08f3af6a9022f9110cf7d37eb01ded5082aa1963347264876c5b99381856316b369c91e3c590456048488acebee0c6c67c38eba7f0f6e1d4235b8e1efb0c2fd2a9a1059e3a00e604ecad5de90896f0f7cd94b9d1a7751064c42f9102bed897e705ebd9a2d021b36dbe6d9483179f97fc22411ecfd44a64bc295e016ab572c87008d417fa927206dd07f2c125d6b06a62b14fe1891606217e8d93794c0e9d19d4f03678a025c24c46a361366ecab8389ca8a611b83424a37c4781586371edeb2cc5fd8c8e5d817101fbb3d71642659dd040535b52880e4814b34686d56fd126b8311aaaaca5e0162c1ebcc36de8917a33095a67d02f2e72e091590f22ef10a67160309aafbdf26820ade122f0675aca0423f5f9c6c026f7ef464090dbba6457d5dcf1425e1ed085e4c28f64279a050982f8b88508848c5280de3953d51651141cab6b5398ca52fa4a7945ccd5426ccfa9048cdac334a2356dcea5f0ede5e93d40cbc12aca0852e369bb83dbb6e659e11883886c725112420c4fbf3fef41f90ef6aacaea9406e146d6b12468010c62a8396f37ccbe06b8c5727ad0d529cc337ee9560f91376582c5a7feec8d4c0c84b926aaf89281244908d252286d852d94041925ca92e3d4b22859d418b2ac40224c00168bd42be02eb152b67ed3747b9230ce34a1a937e781a365a559ece41f9de3eb55e123e970bb094ef211c26b7a74c84e0c1f386d388003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000003d118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000003d0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000003d0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000003d0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000003d29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000003d141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000003d25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000003d12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000003d2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000003d189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000003d1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000003d05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000003d05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000003d14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000003d03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000003d2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000003d1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000003d1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000003d14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000003d2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000003d305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000003d280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000003d223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000003d17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000003d08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000003d2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000003d0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000003d0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000003d172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000003d0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000003d05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000003d137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000003d2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000003d2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000003d2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000003d18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000003d0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000003d204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000003d0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000003d1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000003d28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000003d1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000003d21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000003d0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000003d0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000003d107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000003d2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000003d09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000003d24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000003d03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000003d1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000003d205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000003d25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000003d283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000003d21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000003d094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000003d0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000003d1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000003d2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000003d1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000003d1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000003d304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000003d000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e80bcbdbde7124a4800a96a787ebe20df5005475091b9a2771713bbd09fa677a61d9a90f091feda266cac2d5dc238a604eb0244f242f8d419e6aa91c414ed6c41ad65ddcaaca8929ab185105d5f90dbdb467002be77b44d4f14f425e7b5eab0dc49312ee7ca044511417332abb7278131b3ac91db15896dbe27adeefbd499c7500a1b69d3f402fe0f180c358baf9a72e0d8a8325ba04917023eab7840471f28c984a155633d86098243f7d1745d3bee25a2431332a9eedb524f24c26fe53e40ce985a7d8028ba43df9ad5da422d908205c2898e6e8cd8bb5a5a2df07ef6de759c2d30fb9cbb4acfc412a33d96be6e4e553b6e4a174d896ea9c2bb657eef9f7ff1a2894b15b7de881027ce8e4428176c57320bf9bd6a076711baa2bbeb958acd3e8020d796241dbd2fed94ecb5c4ceeefed2364c9a3ad153daba0e8bfdfd0f6616c40b30d04d450fdfc11c62b3973bb06b3189f8b531a14d062bfe5becc4f8c46f7d4ca20a7ad2daf357968e1f83ae89dba27966e8b29404498817bd9e7275b5d7babedc425f929262416eea1e49cf7105edc22d42bf724b176de7f08e60c6a2291c354ad650f3f42c925f8e6c50ba6b853f5033082d5608e43eeab6e9395ade00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c91357a7071af3a66ef98f1ab67766a53dfdfdcf9950a3a506ad08a04fd081e794b343b55ba23b69550a741da190c611246813964b5ce614c9e856d5ad1eec5cbc4c571f27bc1e6392eea4dd077c367e3f7a0c8caa6561cc32cbbc4eeff15e9942e8c90c00c37b22cc4da9b04fd131329c18ca6a8a1a70b69fbb4d2fc96746056e1b1fcc30e22d7d9d504f4e5f9f2be619a1080c3e133e44360b0255dee183dcae72c404caf54ecb5d0a391b14c474024bf8748501942747c3566a26c527918254c8994423fb11e90e7921ad558d816ca1be8acd43411c39e560e4cc5a06da6dd94a917475cd6a81990ed7119b3dc9a2d908da320c4e0458b6648423b2f9de95361714c91e9efa20f3cafb7e942cc8d3b377949af6122c2605c7284437a84b07808b8e7deacb9ca6ce8f2e70d4ebd886dd95c8645145538334cef3832f1f6e150b6d5a39adf7a31395d9704a125ba928cb86e3cec3ba69f4d3a9973bea81bcca4d407a1c3f40c650a808730cf28b7a5a86a2641a1acd7b123290a1228ce58c8173b4b51dbedf600d3a3bd3dd410f27b21e9c9fd997e38d9b25ff34220623cf3e76af6cc5767e9eb2585b3a543936ca8e5e2fba4b83428dfad04a2488396444d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afcb53aa19e7c205b1cfb0931b9b15f575e3cf6e2c4e19de0e59b66fb3b28bf0d7aaaded3d3dc85e3060f197f1306b8ed9a58792bcb1499e456c2eca7545db98f132d3f09228160989bd22aaaa09c0949749d603c040a55ff54467827ad9d43321a6cdd6e674fa2ad1171f18487cb808d34dc596e3224819550a75a34a7ca6f5a94e7f3a3647d698bc1494240fb569be82aec2b712e30d95b9c8e928999e03971e0b961d0be75205b7857091b68e940229e72f77252039460a21b269f50fb7339961d0590d1b0c0ea337e6033980f39752f15e8cec760984bfbc0acc96f65fafdf24c633278bae40d085564e1177f6c0636ab37bdb927a8ec7eaa083d3173031814c5d8e27c85644f81246e9810decb9de0c7e6ffc99fd9930498a48971cee0e2f3d63c1369439e66a5ab0d4807ac9d9227ab0e8d0f634916628f8f55edd84d0c1ffaeda9f9fad415b17891214e977a3c98b0f8e58a92bc8f95a188972b6187834ea530e6c2b98afda9d7ca530bc6f738c4ff96731a6373c5e57ea4a0b2b6bc7ba3c8e6f51571335d4b59cd1647f712489a1dbd85c3160cbade2c027f761f3c22190a2917246d73a462a610afc4b391fc5d461e0e3f3edd9afe30684a6c7a02000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002903f590c8d91eb56a271e7b33f54d223ff7f2e9434a2dd2824726fb119811dbddc74911331c93f664d0e20f4a8f6d39e149a7d989ef7da2d7532f847776bec17e287a75acfaffc9955ecbf0aba10233a92bf6500d7b3bb756b109f5aede219fbda09fa46e87c3a56579a2baef09fa71a5d56e160f08a4a5de57452b917f06c7e3cf86e754bdb6a01b788f330b0b2bf2e6d54e1a9c8b9b1e287a594cc4f2445e9f4f7e8002eb01f43cad118b54580224e1d350e50e3250045b6f97b1c0f7a5c5271df9d9ca25eb7b4b5c8a8d338f933bfb046c846f21fec8ac62040ea00f2cb91df7356e0c3e16617dc07f7292cdca95c84104ec8b0eaccbbde9d6c64ec7f3938db5bb84db31c1544c5daa6745228434c7c0472f4349bc33010822aefc04cd3060663fadbe96250efccb25fd69e5b29dcc45f8bad1972b1156b2a852ff0d5515f844390d38423cebb5e59c7dd002eaf0e92e564f3febe745fb9d8d907cc252513a29541d7af59509e3a1b63158cc1ef2b09ba79ff56640b13b5a11cba1bee8809eaded09531da3d71017d3b80bffeb75a4e9d1fbba36723cd81ce342f65e02ec2a4ed7c89557d5365ec9d0dad3cf06514224725b4b00e914c3c19c8499a768dc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000854488831df26f6c06c7ad0029d326fb89a29c964878c344000b55ee4e4124b37168a98f6d02bc8ae5fce9b0c8f80adc0438c7a1c0ef386e4471909ae077cac32e04e0f39a158c9d745e374c5cfdde6d230f2c578c0898bedf7c1cd8a72ab3ffab867c0aa51789cb70f06ec0e3769cf5bbb6617639369c821406f8e2cd10ee7473363a05402a96fd0d62775bff4c3eab56d7cb7b0d10022155f2307615094286f4bfb5a22552abf4b6db1a6adcc29666ad3b9c44e884b7894e7d06da18f57c264756ea999145208f83b099baa579ce74dea6a0986ca16a9f3c179629a8df37c2b723bf274b753f3a9aaaea6d4a69d70477123a8a912f9f662b4809c777d79291ad58a5031f86a7dd880f7355ec6cbf0d37389070a2c3839665040472d346252ffd4c8c9625b7328a5279e2fb91218fcb7c6cc0570b34c55695674f4fbe0cd775bcf291d9a1620973b06f82aa9ef2ca622346de76aee510f1d770374376750d844ebe6c0af9052f0d9a53fe1acda452a010729986a3ba48838de86f5e485d6176d06f90f5bfd1dff5849c5e489038209b45c07569b5d46ad9a2c94da02972cf4431a34cf4ba20231e6bf851cba1c4a274cc88713ce016b0501f6911f10ba7084a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008486d5542141b2d06f638143a43e7f83f110d32f8a79f61ff1b855fb9e7bdfd12b4c2e180561471a2298dfcd99350eb1d223bde62412c4f88b1dc03b7b07f78030841d10e1c06b4777f2a13763c6459807eae3ec8e001db273aac7ce4a9880b3059fc5c10ba7a669d3c11072201ac93bc4d097b61e7c647b16fcf58438bd0f4dc63a6c93aa164371d42411fbe3a1767e154ebb68273c1ffa89bf86e3f32ef5acbd46a29d1e7125f0ae71ea1bdd37ca2a47561d9c3652774dbc4f050ab84228b2a8e9a185406265012cf35d1f43326a632b244cedab0ff75aaa7d16b850591e886759ab099e005243f55d1a8ed917747641e6e4db2f223140f49c790470c61b812ec8932667d24a033596949793da1e94cfd8976fed2b1866bc6d5ccc9357ce3bbb1eaa75898853a546d63e3d0219acb663ef74a86e78ecb4182cffcbc5eee2bfa9200589228d0dea3e5c4b4f97d0616149360e2d36e05b0069c1eefdc4e5f896ac140b10f9fca2ad67411bfa6384abe1cba72e6537b209034291644c77d602d3213534fdbedac1a6184171fdb10455a96ec5b102b8c2573541e04d5fceb940b037d0b4089ff77874648c2849a125b0d7dad5b33dd9b80ce5292ad63761e29dae000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019c3d79aec910f7e308572ffdc3544a0b98e3848cb1a393b0cc9469e42d2c7d3ac394867922891e2d1130331b8df17a8bb3c01b058b2e8be00a520e54544ba7e941d6caeecefee0475f440b85ad2a148876577d8bfa2df78afa9f5ed23870c6e0c4fcac6c04e5976194614a258d5c5dff1d38da14b807c40a1d60f2760ff9fd5f31107ae0daca21edb4f48d1fdd35b1f93280ef713c0353be08149fb31e24358fb0d431baa3e96260c18dbb9dae1f4d22c668c726943eb202d0b2c82fb2cb7595ed3da0568fb2b3f6241fb1e377a65f1175dbcb2caa8dc9769de7d450b81f9a8b3d3bfa2f2d1e4d9c3ada87a40dfe93f08aca466764797f970324b860f15524f8db5a9b8769413360b7cac9018e6af620a725659fc1dbc6519c3ba1bcd08d8c32b7347df3f7ced01f1c24da9a53054db080e35d56f68dfe79cee4701011fe79ab781a742136b00725a2574b329734179559be0d6d4b51268cf506bd6102834cb01d580a28675522aa5e637444b34091be948697c70a77009214c39b23999349c831ac74100e9e06f453fb43aef7df3400953fa0e08f45b742ad90d8b87b0b20f078176d1da6518529f858a43350e60056819b3cbb54cfa350c937942b6642be800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e34acccfc9e50043a459407d06e56c4551e152deecac38e1900e7580ebaf97210df82290fea3596b7405f9827e2b0b85db1506a9b9894cdfa14ac0ab0ea9328ebbbcfb95a22f723fd6c6df06e9c76046cb48cafbacb2f6045f770583d331534db5080e3bbcf0c012c9337316e4185cbbee4403bf097a401818f2794d588765f0a2e5728c45b34076d470fce039227442fb3aad28d2db746ae2638da4f2c41e4549d796b92910e992d5451545dac40b94a7e3feadc007ce9a72959adb8a955b1603f6ab879c430f37bdeedfb4f025444391153eea0aed0851ef1654ea78da68716adfa9ee7a0d651c07916a2d17f80e75b46cf6dfb592e5c6242423b9462293bb45ec0f1d9d9b4bfb9f2d4d39a8eadd7082f9997d1a2106db4e73d4a917e337e065f0cd749260002d03e0cb671dfbd0ba25b43c26001a3b53bba31d179547b50aaa17c64c8cb9c0456a1d1425aac6a571f036c0ce50ec1e0332606f991d8db98231d868bc7cc36fd82c6abf5da3c264cedc56c2a0de186566a50a934dce654dbb0fcbf73233d809ca3de80a69ef11abe8fa0413de2d6cfbcd35b9219f675517fcab1decfdfdc1a1f9d85ea33ab3f5b04c620999b7eb9424b22e46ac1310bbdbd000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026eca40f4d51daf903d8141d4df2538052a674aeabb9a1cf9b048dcfd78fdcc3c65e5796dd56be49d25025969c39650dcb79241daba3586002bc28a45fd6b62f9043381ae69233a86e754bfd9d73fcf1e8a5e4cf9ece829f129d11ab17b8914da7c8bf86cf01fc57d71bfae017e6fcd71e2cc305ee9f00072002d453687b1813ae97fde1cb14d2a6f9a9673d20e8ea3b4bdc2fe7af2ea11d9c9360370dfac73d386b7ffc84d1334c87478444b916a3d9c9d579468cdf55156090180b261af963f9ec4d091eb8d882c22a3dac4b7c24382000f787c120360cff2167d881943557e7ca1b99be6100ae3c2e4a48fb82b477cf815c71850388eac8dfe1f56fb3d3b60fdda60c8f57b61b016d0a2ee782b8d382c30ae8eb6343aaf07404133ee2273bb6edaf4f695617ce2e930c02b3b6bbffbfd126e53e24b43ba3e95c91506e4645bf75d018ba8b346d2dc2e9c08f1b2c3a0e0f78c1535f5e3af17510794234549b10141bfb4a4944357c315d1fa64f91d98437f848aaaa9bc75588c48084ced9659cefab3bd5113ba4e5a92234be3c46f8235d0f92303d74f590664ef5b0f13c48304b900acf29402701278aa487d4e84ecf104c83dc11200fc89b0053b06d45ee0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a685fc6719515dd916bef42e293494319876ed55aca8e76d799ab9694cf4f8377a1ba13aac29504e7c9b62eee6e056b514f51d904e9421b250df1a87bccb4196fb10a1a55cf858d4337e9a75a024f2a1f6093330eaabbfa1bc89d04405e18b7494945d6e637aa8b69eb657800bc1cfc0aaacff547b1c308ecd6bdb219b3b7eda1e68c0eed920cd8acc9250e636b0abfd88be05d534b128bf3794d010bf3697b6ea32371f1d2e5bb95ff4d10b3d93707ea4e08cbfff564bdec4351b5911d8269d732fad4ab59efc4c81051e35b0ba5cecc8941615ff67049535924dd6a489541e914115193e3afb59efc1aa2ed061fa6834d37ff7109648a56b5e4b7eeca5173eb5ba30cd2241fa5ab0bb83a3eb99fe5372d140b4703d61b96c4365a360af4c0fb1a07da9c6cb02d767012453c32a9e04eba458f7a50250ac0c45664c972cdd3e0b58807f6fd119eb7d6e29cbe1ef039fba01b4b6bf56c34d26090a29013272d091a0f362b1ed02ae0339718aeeb1df0fd6f4e8198f4ac026218cc0513ce1a7c9d18b3793fcfc8f6246824aa0b135b0692a257bd4ec8d58cc145f3572dcf44cb666e5bd93de4faac9a09a80011a9e4812131fcaba38ce465e995b20c2de053845000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ca98c1bac76b151f6befaaebb9bf7aa0e53310a2d1d15af21a7b391d4d213c29b31fedc2885e26ef2741b6be4881e43a69552f401f7eab7d1d1fc7297301d31bc27055aac8ad951bf553ca12495e6e76cbd40d1214264e848f1a631ffb4933239d3706b55b3c27b85946e873fad69bc7997f81dfde36b8a89563409a1811bd461c6bf703f831536ec17bad50fcfb767317489e2c12a8edf8411ea5b2f9a5925daf582af51398115c169bb339ee9f26a1c5ed1be7ae63f8d3775e9c27c75508c84ac5b3802cd3e68a3d475c9cf4a9f5a22538ed7fcf99ee0f87aa1ccce3db118e0e64b92895c75ae103f51af88a125595f9cd1e9e1c38c32fe61fd89d70d673dcdc7b408e1a309b02a01482c37a1077fe46a3806b24335038210ec2e0c587d7e37f1e2062aa14edfd62ef0a6e57ae046c7f2ea94550c8834740025c256f4fe157135f74936ba420e6a32eac840d6886a268309a97b496a325be379837cb6563d422d85e52603ac0c203891615a1e41a1cc2832df3c275a95706cf1011cd90c41a2cd668ff359ecc2f572553578b6f21f5c72c0b32867c9e97dca50be63c231f539a3a5724ffda5e96ca7c3848af4eb031b4e78e1b5fed07bc0fa1053c95415000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cd9c2a3915b8c24b5727e89c283330e637f5556e10be00b10daf8441f0e779167f4587117d8305debec2d790232c2e5ff0c12f805a5e10a2ad6187257ccf1c7f340f225d26c0324a6946631669d56402ed6e69ed2480d11e08183cfd53d9247cc25fe2e1dc25540a349fcc808f2baee7f6b68832dfe05851e49deb7970697fc0aec0b968db1f81abe08f3a64a671145508fff2e5f5d86eb04323ace69bcfb5359af1dcf3bf22e3493ff617df199c672b4796d0e7c4bb4a15676a22b946856f478d820f8164d0fc71c5fbe0fd290afb8be924467660d409c1fef8e9d7ede8c8ae1840ff2c703269c2e5043e316f0afff14430d2581eb6fc1662e29e22fb8dcdcda7dea56c5788f2bd87b93abe3b73caab2656230c884330781cdbe0d02dc6c6984fa9418f3cb002867e534799edceda4ed3fae59fb87c1e29b8ee75183d1c558b584eb2a702ce16071fcc07fb4c475862f3119df0fa4efa6d9d36f3f373d9c832b36717d30e6e4f25287acee1c48e89d1b97f4aca6d8edc7056a750a2cf526b12c6b7e173cdc531c01bd25327fb7a6bc408f76751068dcc59ca1c7c5c1aa049e814cf1a70fa64327b17645713e6094b8a148e1c9b4d482c17b00a4f2ff47a8b100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008fbcb67a3302e38f5d9e999777c3f7f0464d68c2ae83ec8dd26f4a59a36d7e772f2caecd2387c7c31ee99f94634f502793b87f0d1697fd4fdb1977bb8583bcffd8323f065e9fbaa47a8a1426fe0f84283c46d54b253ad51a39632c647cec31f8b20eeda2f1a0accbf5a02ea630a1bbb7a98db848543ca6e213ea1cb850f628681150ec16454aa79e97021415b14b45a620a64f99f01c69a86fa383aa13b903c46a073e558e35d8186660765031ce6ea6400470673b55c814160070f63a6c8c7d29595eb71ace677759b2a23a27416ba0811b0cbfae094c6575df9a83afca5934420f86b1074270daac4d7f4005ebd16ca91479b2d9ce67093e5edb784327d4c6bd721c7282f5ba0f8e5eda37a37f43573a446d13b2ced9ed24bf894ee584478440a48efac542c0cc57e0cc1881db42ee7bb9ffd62884458f1162029dec1f0f78810b5af1f5c8b608aabf6d41338c9c6970f2de7c071740fc6e3fead8a3646d0643819c39a38f7e6a7124428aa960396058169417b5dd6da3b247ef8306c4e18c0f39a66899ff7c20968d5d45bae1a7fd78383c244b4cf4c23040c5cbddb5025484c0ca85335da32a2bdb47c90a07b7d40d4348cc53c8b4d7345d2b742235816500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d94a114ead4cb3196b01ae02be0b21542bfc9d03a36a0daf08889ae3e37e0ac48122ea12c41490e90806f559bb5ad944291ef0841f647b328fecf750f2388730ee6af5452ad59d564bcb47bc6977a2b8c1ef0de4dcfbfbef7920f6b027a421d04da8cb7c290e2cdc79e6904816a625de4735ec8ac200f105098d490b56ff9ac94cb24d49c66f2a519d21a5916560beaca6a397cc1a0cf7edb48d05b41e9f60db98228a33549451152a6e672cdd930d25c93dabfdd977425e64ac3671b9c62ffe4dc6c52e824fdedcd478ef753823864e640afe21c21948470b0d360dae648f4f6aca06dbb0a174f5c6718e0ba72e26e60048d1d019701b797c80842ca9d127d09156c4ef2e31c80e32d5b16f7223dc81ce9005a0191cdd509f1382b52011bd94e257f252a6def78c1c12857b5c4b598729d036773b359c9ba64caa51882056a9b0bd78757c7e4f5f8d6a75c0b355d5e9968fda7681b380e47f4be5a36658740a77c6146d9d5c8439234c669f1a98a57411bb0d2ca90fa92cc3a0728382e3ce2e077216dd804600eeca1d39b5f495387adaddc624d6356899c70fbfc62f5dc7e610b7bd3173e25bb3018215d012340ca84b9a95d3381df4d70c5ae59fda6da5300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009eae517cf7e5691050ce066b023c86290b617b696e2881373bd238afdc57cb604a8e5a5484e260adb636cfed7e3008dceefbc927d72d32308bcacf36e11902049c0256cf2b4447ca28c67eb75e77a79891e5b3cc8d010fa49031ecafdd833836e4ad7f638d53d506bc7150a8baf4e54cf5125e6d7cdcf783ca85c4c731d47258087baf07d567f51ade5036d5b4472ab0aa413ab844c81437ba24862021d4079e5fc2b91c193d2598e1a91a6cac8f50a4a6bfba5ba9d58e45aaf159ce1a854f0341ede380b7b4c8bfaa2f46d643aac4ab3a010ede1581e1f0c0bfff1980b8cb2c7617171bc9bd226cc258c6b9b2939543f55786c554956cee5dd2cec20ebaf95d480455ec4e53298e62f1e2afbb7c6f7ec6175e2e3c077ce4bd880b0668650cbfa47a330bb96a0185029de911684cf40ccbea800cc422e33ec70b6d28629f951da5d98d8e4152301f61fa56a1ad74d85a522f02f7fd6087828aac13450f1ba94624c3f6ac827d5bf294328b61ef8c2a2ce18c489ee1f49e5570865f93d34f3103cfbd43b5b6eb78f6a9ee0e1fb5dc1f79982e85edfa99e7c6c86e5282502f373f511c7a5fb3a68025d801084934f65e6501e0826b021ee266945aacebeea0c6d90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017c16ee7443719729cc724d576b62e0403c7a335b4ffc235bf11c5caa783a6bb807d12c18d085725e5b1cbff35e6656497ae1f640dc26b39a3c6555d7715baf4d0388bf6f43e1d0f6954d630f6044f99414c0626225ed3a5927ac04a7bf4d8efb2fdbe72dbcf8039177602d618dcd49cdf83f60ab1ae54c71a9bb3dc4efe93f6f882e4f4dc0f97e123de20c4a1780274f3f6bbcb33422826fe7bc682a1b757c2e168db8400d09c2c0580f5fcd12de365e6d8c09fc99fef16a1b21fe783c2d98f6c4948ec0262e62148e78bdffbdca2481f122f723eafcd9c3b01036580b8196992945156c6e32f72db91381148cd1dffcdcf37542ee4e6461d746d6a023c15feeccf0a943b9fe24210537de46d6d753a78be93d43f38e778b98343f13eb65b8de6713fb16651857fc0ccec848509ed6e03a5c4aa57b3003c3c44884668e00aafbaaf26c744578ced68d736de50255657b5a773755116d93d44fdd72c8398922d7a4aff530869cb02de55b9fb50c63038e035150e9552a34e40fe065e02cc64ae360227b96b33f54a48dc59ae0dbc06713851bc30bd022d0a9d21f30ca9cb270fc8d09b3fcf187b93619f15432ce91b952d00e7b80a4176cc5cda7d27aeace600000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000173e5aca2a74fe4a4fea63b605757e57b00cb9f879913787f594820fd741b2d963e001b09841918cbfd873b31bacc45669b99effa565ed4485fffa95ea00d89dae26b8d5b2e8930a7ee4f2d558cef8467971ca1d3084b07908d1284f0152a80a4f72810742ef137436acf8d2351b8e1d8d6211478e34f0bbca63fbf4f725dee2d3aaf0dff6438e39a3d23719dd9bed5a876a11e4a416d148008eb50321e5bd19821babf7da5e597e5df44b2b1e162320e96e5f3c950b9854bb6642bdcf2b6a4932a51ec02a08193db06ce4b0330bb8dea9118090b20faf3cc6942e3bac84af2e84dbd1d5696bf9f1fe69910a24921ece699d3bebe3e9df673aaf4f7ee9d3c56eefa90db688ae40d0c2798a8706a9ca3699535c1827a35405c3f832c68ce4823f4f93ec20fa1458761fb941e4946f6639976a6a68bfc58488d1b9553e7d7f998c871f729419f379d881d0427a6014f3e5c7cb38bf4153e0fc7fbe04a20ce3fa888d04251965afe3177cc4cbfec17ecfc8921498bcacf466171a511510bfa27e53f743b0d60fe54986970b8f2f2fc307b846f6dd9bb8ca0ae3f44260303ca35cc72dd5ff31d071aa50d08f2a54d536f7557a27c10b25eba388014ab999b38e2cdc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a9a4e8a3f3bd0ba40ddfd1d96ca8703c25ae9f02778d627799c460120177a1deff20eee1a7ca998aae3d2bd5444d3e2818fc48e767a7adf7c859e4729a67cccb4a0e841ae450aca5cab43a0d909a2ca4870929c2fae82dfbb06ebc873255b902f74e1c3b8610a57d211a1b81cee457625c0b4174eadcb867300aea0cc7f86d08aba89aaca2cf461937a014cf532bbd301cf1c6e946ae3229d61026817ad640eb6dfd57f7105b395752c58b30bf0cf3814e931d26e83bfd7c64d98820fb46a4b956fd7812f419126eaea29cb005d0c9128168ff41d6a1dec1c4d0c35699bf606bf9c7bffed7dbb45e92ab56ab389c9b56ed32c7d07ca1af8722a2243d8d54b181d7cae77487bacff695729a3f148c3096ac9ae032cfd2b3f60eb919243560f76467c3d061244c852b1c2270b492565afdc1525fe52d817b8703ac8ac0e34ae6d4ad1fd67e84ee7e1f63302cd2892530a04728b6fa450808d7cec65a03c51b00642f10c1e9648c2fa1edd5a472f34a2d41546ad08a9d760e1cd3ef02d0e87bc13982165a2811e131d99be31d001e5a12bb092dddc593a37ff3a516c3f54bc9d69de3cbeff2d83deb39f790fa80582be71f54dc687ac5623645a6f5771df2ac43400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000acb7a13f9ffa7e218c09fe2033e30ace456bdb90b9302086604453bf9602a8655545dbf0cb946459e75bd27baeda5315de4b42aad5007950c42b6429a22f79af5dad5ae45f96d5fb9fc7ad2ed6551e0590e2dd9ce74b87d763942ca84d244dc0b18f1970e0433565a3601c0841b14b3f39263ec4f46139973595555127b1b81fe90d7c8ae30be5730d3fa8bec155ea8c1e091eec38e928823dbd4b54e667042f53c534f6fda418d5c565eb6cf4c1b3e104d99a419c9069926c86145c5f128364d374ef14d2ff1dd0aba765cbefb83b2685c7afcb04645c5463a6f6003bc5ece7b65b7f4b535838974cca017223eb60b3699ba8369088fb66695a6fd4938b45d7ea085a28fa0fafc141f93dc37d708701c6c51edfa128459addc69eb7da0989c06740399a826762343184f098f948b6adbea20c812f89d7fed0692d707d24ecdca8c5d512849768cf90283c6cf0233aa21f3953aad7234a120b059e41bae7fd5dff19d14e3aaf8fd616f583293369a2abee641ae79c474448e0bea4534e6a40353bb638fedbfdfb95fd14992b2ba75566b2879403e1a821204cf61aa2409d17c160b2059a7e3495063e2ca058eecccfb29e19159968e3b8a05f6090d8f0f5f8300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008405e94e0be15fb840e12e6c63993f1b517e0d72430e14323a00908f64151a064cc17bef7d4f15259893fb392fbe66f3bd332fe0704aa3753ac00ff22e12979ddabe002cfad381b51c82c1572658bc0491cbc74781d0ac0ab21629d8a354f1a207cf7be268c2220a5f398779d692e311e060a3869e74fedc3b7806341284ade00f3751666e0d395c859290371337878131d35cf27ee54574b2cdb076664a505d1447ee6b47ee7997140e9717610c656e685f9e37c1f9c7ebcf2e4c1979e30430780b42c270dcd1fc882b9eea8d2a12e3b2c208bb0dc3e1ce60763619808a8929a1d20e6dc5671d7ca7d4cff85ae76e812788332c9e129a66748860b926406e1c0d0ba42b162093b2634e16e720dd1796b63fa86fd1ea662fa9a05f7f7da3be52510ce7a5ab3a3238b7deade432ad730429f8a324aa1a9d7d93bf9dfa7434e8287e1ce7855f948edf171dc2961dfb3ba24f08d4248254e6bbf9143a92b51c88b4b0b32108a84fc2dfda97d18d3f64a4da105d2d6aab242099c905d6656ed56db0e162d8b4e04d7acabe23fceb9de7e6a765b32543cb6f947a17353d005d3efac8b65b4650a28617f13c91bdcb6060ee05b3d6f91586ff6aa56d9393dda6885a97000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081347cc813bd1377ed6b3e227bf6c83144f11335acdd3952cdb76e8d00e43bcf4ee3960ab7cbc3e30be4ef9be4c203af8e3b9019302d8bd990b8c5ad4e5ef6a553bb957cbad29ef94ddb0242205bb4ac59a57349ed3a33d572bb7fad1410e65e6205450d87e63c569921c8e70368ec52816b5e6aecc0a6d2e9b221adb2b28568573c528098b06dbb0c18161aeb2bfd995ce634729a1abb998d4d677d8d534ff49979ab2da86bb45ba72d82813fea081bac43d3dca21b2bcf5ec73ebbf811243db0f4fd4142c1c2850eb918fa57ec419b4e042c0920f48b04f6160b7f5c560cd7daa4973eb79d60aaa00d5932b1035de33170f475e741d3c136e8e0de35d67ecaa7070fbd38303b0994471fcf783743e1cdb2d13a7b4d457abd6df66b6c42a483c9444c36248a04a384b1e5968de8ca100ae0b6085397bb1e4f258d7d9954c2c8f0e43304e8e70900180dac665d2309fde71647d1ce834a6ee790c8365e21c15ec3f3b960073782c3d2eebcd1f7592591b060678122ccd7d591db8d201f206ece7530091f56557f429a9cd1195a37e03fa3bfd52909dbe8e948a0a89a48b230e6cfa5b35b0fcc0b5e472eeba698e82278fa28cf9b58a698f9528f4edd9f07bbdd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cb0839f0830abc2985b173af64729e052965429b6f1e912fdb810dff68607cf80f0ed360b904fff8c69cc03eeb4dfc55fb6408688105fd4a9e42b2c30d2ccd95f6081ed0ad1fed58cef8addfaf32694bdfdc3fc20122b47cd5bd7f4c1a4107c299ccd62c1dae924890351d94abc49a94679f8f5fbcf19a448e7022220ace4605f38b2c6214bbe91136961d8f303f642a80519423c401b8babd1fb9e47ced3350b37f87fc0f0051d282876ed0633a649d05d3f82ac2ffbb5d55c35ac948a63efaaaf9fcdec2c25acb4263496276daab515f037adaead969bf15c126532ce2acff94eee88913a2b176654619facc883d0be8fa6737165e4462a8aa6d7b57d5d67cfae9ca100569735fe137122b190627ef0e1c3f744151b2eeb5197c96c94bd1f87a0aab46f31f162aa94e9cd2b5ae224fcf95c9a7aae4619ec8303481ce3463e50368ae29399eae418a0b3afe508813d56612873fdf7ee461364ee56510e5e82f6fc761ed0843cd23e3995f7102376163a4306264be8a1196232cbf8b2724b72dba3f7fe1f9c285bad2bea94b11b0d4115601c27fe3a94b610d06b6e19b87408234ae2bfa192fab8e89ed967b7127214dbe86cffb76385ac2745bb356d63916d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a47378eb6b853fdea93be645d4851ceaa715a45e82766dd55360cb259ab4a6267629870ff516f0725998b16eafd2936da3daeecb569b5e578c3fcba5221883262ea1b1a068f923c6e4343e6400f46b3f0dd0fdb65670e7beb02d47148836ea892e11aaaa20cd15e8f772bdb5eb5f1db3e5e20709af22012784094528f9d75f2454382215a09c70b1d9b7ada838693e0dc7a83afa52e6619deb840a1becfe97e39a14caab4a7f6f11b7919dd3b5eb82236793617b02853c562f94cc910043e0b1ca93ead8c7a693d77cbd7844a333ecde2b952c7bd9adfcf54e41d230629ba61d743635800168ff7babf4b58ed490631a816a2e8c9ae93c3134ada56a048c3cbe7b3b7f5ada1f62f589ae7bad0e31dfa536b5173a62546cabac3cb703d072e27c4b5e503a673def643dc2a5cc20cc8d0bfd303eb8b7e60ae9d902d1196a28f77fe0a25127c942466900f84ccb4cd59095292d2cb1250de5affdb77ff063b5ac6086b9ed2c18936878fecf8f5372e142d74aa9dcd3f36a9fe61922e3bf423fd9316d69bb1f03bc26807a30acaa19c0aef4f3ff562a5fe8054b90f037dc0c8d73718f784c87642b7f90923a7e06346ee87b4f4a25e5a89eb55b499676698e399739000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f8a3248038c11f080fe2825f2022172b8c5eecadfd7f83bd843ad53df476aafd8c3aefcce79cbce6c7d76488f111d4468271e1c05bb7e85a38f21efaae9e84c4d6eb944a8a1e81801c0c976af89a36cd8c9bf77cbd239a34af24e16b20ba7483ffddb7dea79b6a6cd5b180013d12f308185c508cc142b935fc7edd480375a685c1dc227fd64c03738acbc433ff95ffd10834ee9131b7a0d8f8481e949b8b979f7e0ab7f6edd21933783ccf9acde1498b7876d6350db9b17404786f5330b24d7dccd23d399da0182c8e64496f9442fffd36d4760d81174ebb4255397d9a3cd601cffc12d6156825d7806ca45cbedd20bef290c0a664c56520d1ce5c5e28401c6192cac395a1ff647b0bb8d57e864879a7dd4534810e02f9adb79d26a4127416a7dea6fbf9d834a70a4b73404887b7ff56c5f654727114f1de4e373b6ada1960363caa80dd7bbbcad954aa12f3b4b013aa039c59e340bfdc0d1d75b43f661bb66de031047d32080fd3cfc478957c127e77d74946c54775e7c7043ee0228e6935da5137c2a2e090b0b1089b4128fa64cbc319c65a117e8acd52112fe1b8250fe88ae76c4525a8dd5eaf6cc0daad05b65e0b29bf0ea04bbf0665b3786213cf02a800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008303aa3cdccf968fe88afcd470b2ba3cc22bdc506c704047515ddee5c9e1e918c8fba9391000a5c6904a40680fe5292d2e4d3ceb2ee4854d8d09458c7dce747c39c539a94a8e03834667a9a44f90863c56f3f9b32862a2231d6ee483b1cab1e4f729010ceddc4c3b44f8827432be116c543eeae9390cde784c655bd52ad80453ac35949ae43e539a9b8d130dde8d56ccfd572b14fcaf2718b94b2db91b67888515461a174725a0f52d9d3c90fd2e58b6f39beb9787cce42c177b685a94f60e70682866ab0dfa357c92d27db9bc73c67fd998e28530e73179f3841e600ef849e323839f117ee7fbde16a65c1796d7c10b88cfe6071440462f75c4b0345c377816bcda86f8815618db13802d30d0ec2d8b83d7961e144edaeadcd75d63e9f7475a00fba40c25359198754ce30607a2846083d143f96133f1e81e10253d18ce24806edf09c0b7c74792c01659e25b82afe9846d6e54f9823f0a7b1d2dc2b501afadfd3872ef333d2a9876ef149791850c6813e5180bf281641165ebe59dd59073e595822bdab639d0d60d8866da2a0b4951a9fec7eb144c1a4c19d7f4d8ff7cbf32237d3a63d5bb997a8a4f6a09a39ce9edd627e627b1c431924a7b4cb07c9f8c0c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ce2caf3b4674d6dfe699b507dc2870e9931c3dccb93d96800127280ebbd71ebc08aed47fc324e164b23c1570dd95f325267165f1fb9fa06758c721456e53179040e4636c26d7a91ee94b9257b24463e1df4adcd1db8634f70fff2adada237779f94b5da497655286c20f4d9d07bf893624ab1b8c2c06c0a66499730134bb5fa3e175cdaefcdbe8c9dce866a3085f3ce8ce10d332eaddeaff411c4dd3b59ea7ba88d2de18a94e39a71258a95d42ed9b370dfc152e0a3332783791299165b9f9473c98d4fd2619bd052b500de462cb1017825a6e578d8faf17c3cccb9e3e7566f9ccdb65ba49002eebf7f0e1a6f732eeb6bea28884b5e965d429e7e1c21f2906e1d7a2ef196bf709097d6c5a28a9c9b15852e02e9ab299d58adda3653685e3c40beadd830cfbff76fe496f20f9f9fecc63bfcdcd7a8322cd211a49d71e01b5c160c2aa2af6f45bb2bf71cb7216b592b9274d0b9ab5015d2054c7258214b79c846080d12e62a2700f1dcb6bd1f4e07a87f104c87d580e6fa7eedc465701bf8d2297e9f0072bb848aefb4d8a04b44dea6f17e8e5800729509284a0a7b85461a1f85e370fb20c6ef46f487b279bfe0c9c4129c94aa8cc671743a8b412dac9b206d2c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f1e295457300c28f245e7bcb625a70b670f7696d2789f038f4e2280bf2880804725cdd538c01a664e8e750062e9443872266e7dd1801997760bd6e23faab6fcb0aea9d7968a547723106d6b30b6b486e4a25678c45d763c8dec19767d36e196c7e1fce49feae773a35951f5b69e42b191f404327e28d8a0118c0242852ff91b564f5601f30190e0fe80421bf1bbc6640f6528f758de20c224aba6a4299d4463e31195a78a6adcc2eca8899879f12cd979b0a05306a0cbaad1f59bc01a42c6d618c559d0f4d15bb64711701565ce3b5ec79f419d35302e3fd43908a779bc11c5aabc980334c8e4098caac8215c1a899d3ecdf780cc2cf014dd4d0f073c1dc11ff54200ef7d021f3a28d1915bbf0f451055b6b15696c78fdebffad6b055621c618d258e440e85a92a84751dcf056db2fd03edcbe5fb7047a4a76ebb8d5694c2f52887ecb687c1e9d48b7638492adc03875184fbef4ec7e07885890ab3c27751ec2883129ff81cf8374b6a392f36482202d8edc26e8581e95facacc56f30b7a672ddde0a1ec2dc0f35ddc879e953f0da75792d7d0d8746f5f3c7b974d038c69a104186d71562b7454d53b951bc77c477728cb3fb01052e923baeb3d1fd463450d8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090499a35737c26ed4b543b8f91d24e6a96a6642e10e8efaffc52f7df3f18f23e22a7af80c3ea9d03b28790761eb2d1dc2ea73c0d2acdc3ed9e7614451df40e3986e27392d60a5bd76d7a0168ef57e3cbfb96510efabfb5fd5d9358394cc3191dd3ddde6e96e02edb14b105b1258320d6854b3c7f741c97aa60f0ede8d58a0a5f41cae153bcf54890559602327b2e7024a1364708965aff9f42e8503f64c948f44ba550b0b1ea6ad98fe6a1d3a549ca2c5ef72a89411d3aa274c208943dc6c9af0740d50ec2eb6451a2e222085959f67adef0eb12302d8d33751a317f6d8830a64d0cc235eb87851d38fb4dd19349612e37d4f1c2fa8844c9b8602fdd1ce50c54ab3d75cfaad3ea324c8eefd1c660c2649591a713c8beb28bb0795121847e10ef8c5a860e905c14d3dc021cf6d940b2c659cbb997987ad84fd79484a9926d01743af8a92c027c36069c35d2909bfd980975f2c5d8fe5f13ea69438b18ca78ca8c5bba283fecd3b94da7956c5796ab054334393c4af05145dbe7590a15cb7af93e7270130717dc48779e80416e47651320258f8fe12927bac9d9d3f1c202936f5cde3a853dc7e68846a71c88cc922be37974c6439ed160ca83274ca1509927e7ef00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008bb8ca441c6732d76efa6926f312e797bb196e9837b087977f7df1f7a00c51be87763e14ef3588a6b6d8e1d384c859e0d42b52f1fab2140ec6ab000a5f54302f002e12df90ef9864f6235f4aaecd9edb6d620fa0eeb332beeeb6bec2124d872da13cff039421a575b5c7836afa225de8015cd5d411c25f87e0a9db72b838a0830a8687f6f3c6c98ec91887655b3f853a3e6251c4eb851733b9100d9b4ad44c98e70d1240bf4d62656d9585ada2fdd563d05e349033e028b56f4f9001231ea81c4a01bb221f59fe3273702b1494fe3bebd9b773326852e9d6eb95aca2edfd145520c638e3ac4948a7ed47cf7f8be2665fb2841306b08b96d355f2729f53fe775f984aafaa3c8b8d6f3fb6bea97fff6c493bd7d42b4bbbd28b26b180eef92e254adbe45202aa430bbeebee53d04eff954e76ae4442df23ba0b7859e2dfe9c7021d40d3589b9f0b5d8876c1b28b831d7d4c5dd217e890e5fec2df1133a1f21388f6bc10915c5f11b95aa9a50e6dba1b1761f1d6ca01b82ddc6e43fbbdadf695120e0877236063447e35e03dfc7148d356950083fd267c985e37ee6a5a96f77ad633fd8cf7ed3f7993e71cafaa8b195488af25cd0dc3dda912a7525b8b012cd804a500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a1434e850e5985d26a315bbdc784afbc308c2da66310ff320a60688c1cdfe3fa5b4cc6ea974e857e68ac529a8427d4f51d9256e5ce2b880c0e7c3db56dfd492f7b632b784db45594edf0953b5c796145d2edafc9b16768a604c7e325c50fffa0ef51bb90eba2f59108318fac977f27988202fcf20307b3ac510902813f8850936985e15e7ffb2205e0e07d1c38d04db8b0d94a6e9775cc6c72e5428de276f176d9d3cf137b6d63ea93b9eff53a413ea6de86548384aaabae7aabfd2048b08134f5b730892874c90a3f01e554a0dadf585f00bd889bfa1c430641a58d4312dbdc9d5f2cc7cd7898aea2a9c5d8dd78871c9a49d78c9b0e8006948ad1e4e22e62dcaac02e62ec66471110c91cf05a2f5c3f71c6c9f5e251f24503d0dd5b502eff9dd83e30d7d45c089833540d8f88839046ffc0e6a11b4c8c87a9a200136bbdd74ee53dc18abe4dddebc2ac491533991ac1e2513f6edb7659818f31b3997d04726bffed9324dcc8b2c1d63093bd02a652bf3107eebd75ccb66752924dd905afcf4c06329e4950c35fc22e5528021e6ec20d8689280d45241da5e35a7786512263534e269885883b63fa24fb61ef40a1a1abdec2d613837ca13f69c1572735f7eaa000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098528c547e67d14dec8656c5542947268967bed32733e56b67e23d35831c45959cbe0c07f20204a6058ae086b8bb2d964b7065231711e525abf07e97fd61b5a6ce92112031412efd0c59f9675f7cb2442a23aa486894bfd3af6b0d590c76dfc3873975557af635e28901842773954a57167a4d4f3b38e103d41f930f7bad58c2068b49a02864b9f1bba924347ce63cafee74a783fd03374d75bb6f74cbfd3306120d279b9b13672e57de4e81e1f7007216cc7fd1dc4f86f9e9389f5a7ca98bcf67e615529d137018a9e0e9bd993e65a08e7960cc475f7ec1a015549242a3a9af26c4433ae43388b1acbf23ddd8cd9ecc0379fae6cbe8a250fb975aa59fca64defc46c1ed7d6eaf05e9e9abbebfdbaaf57b616b24abdacaf3dfb145229f5f5baa8ea9a2994eb9aeb96abe47bcfd7635cd489fa4097a3845dc885d85ba885001b7d6576bb177296e1577b4da403a4644346562759802aa387290ddbbd9dcbee752a342cb4f9126f53e7ecd5894486c82764d42883f2a64f6280b3bcd5e20b3bfc5e58fedd0105010873c02bd1e9edf005857fbe7e4e132aba829d8564ba22fa7d6249a465f3386ba60c7f1af1cb101d4773cd1e2f62bc771e9f6a30049537c1a03000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015309c741a1deffab6a1fba7776374a4b294ca3f5db386866b5bb60634258cef166ace1cf93f0c7fdcab8326120781fa5d9d62920eeae19101b726e56ed1cb99dc49c57b6082de284d2a0e94ca66caa84ae7689eb701025872a898c457dc8476274dd2761f048820560278b803879bb98bdac3a83731e17220d0cf093e261147edff77be625fea6b77e2dce0a95ec1f06086e617432a82f58a96a052dee98d1ecc48369eed5f8a15e7b43676c2f08deb3b1bc2988b2254b9a241bdda33b035854aebd565dadf8090d3591318e325f93bdca4b18ea48080aecce2bd0042f59f84b24290751bec0ea17f45088a3180c210a4bb0c1a77bf5e4d7fc2430040e0119d7052a4fcdef1324dbb78a26615e18b7a9878d86b2ae125cc05de7800af924f5bd3b163e814c5af737d06bb5496274f9652bc5facfe3e81dad56fa8ba58af7500e7f41062e8e1bb210429200b8b47df7662a8ba3bf064022350a948d070cdfcefd0c1b57be4dd8c35c525fd0bd4b051827b472c8d287773c918bf4ae217976876331f429eeca7ba2b714edb7ce7c0859ba0fbf27b8b9d1cef483107e4d11f76659d9ee37490e03f53960110a1e412893efeb6942515bd443b355a5eb34f98fd560000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000945ddd56b709e90678017474606a99ab53c1a320e7b9ff6f3903f79b8fa5216528d537fc0e9742ec2f3e63def567c52ce082c96d57651ba64d2d07112de0295d13b594ebc30e23e5799c071948a7131723f82db4d9c5710d26a9a0bc11f7b08f26042208b3168e5acc3f382d3af5156556bf300199f208fa325ed5c5808b3c380811fba8ef554455b9a8139fa121eff407a693a11b56518bf5ae3a623db82854268cc4ac709a717db8095ae8bba6eb13f7ea6f4445111c6fe570adb4aadd6528421668dd6718031b9e2dbb3aa0c472b7030e02a5836af9dd575cd4cf0b30865fd4cb07e6775838242215f6c51f7c9db00bd50251abd08e87e876b5a36a37ab54141c7d3e42cbb74a21420e96bc0fd256e2f7c79a8556cfbd0da0db748816b7baba6758ab58f6e0081d217c3ab7d9ac46c3e395d9197358a08d9a4d15008b862f96cf80ecec5593bda16ef1805d4f36da6f2ea1e1b6c29be25de12957213126346efe7c3f42355eda834d498edbbd87f827a6bc3bbb538c078757048c7bf25e136dcfbf16c274178436251620a89814361898fa2ad17829cea54143e1100c11150a765e9ce2465f5b8a046b1afa8342a8c2af71b8a83731d0c37c781dfea5d5ff0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000245e34ccd0087cde61caad72831504e39071856cc66c26cf174585b5d971cd10313ede794fb6ef83e67400115ee798e6eb436a853589a5361aabb80326f38084e092f1691b3e3ad61091fc1f8c01a75655f4bc7aa93e5d28eecae0add1473b5dacb8c29687ea12ec5dd875bc25d54e59e117096774e250dd3e2f932263e76c035f4ab859347c54a605dc6b56a71509926ac63e5f840f90edafedb9f409a432e0f820b8f73ba793772d75a085e1f4cd1c0047c16d6bba073c43c3ef8e3791bf89370bd98e84ce5556e5aa63f46a9d5de3c1ea145769359ba29b50f9802a9e366fd8b8b2d4f729bda51e09ea8dd165d0423688e0a5917548f77359a9df995dcb28a2b30e393d2e5df9ece8b0e2e157e2dd3966fe153b68b5108812da475a9b9d6402d7f0cc6a88078e0a2f011c54d8bb487209cea4408782d0509f0e5974c76aac94f8b828bd99d194f65a7b1797679dc62ffadd73739867e6b69c2ddc8c770c4cd49e2cc47084407415859a780bc0ae6c52ab0efd32bb545812b52d732883d1a0994a1d636266444a961f327a45f40d1cca2289f31d38c36df7f48e6ea4acece747a1c0588fb39bf634f5b33dd5e84dd9023882190afe1e2189f0a3f4df678987000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000441a7bee5122269f82219ecd4df5385ae0a6db3f96e4a868584853bf70b67c14f623ffb8f6dcb01df8dff7d1f90605ac0055e1007ca864dd9c899a688e962b303e35bf99c9ffaf3ffef6163acd6814c298364ae0ea2d55bb45575edb7720d2278480bcee505ae76da1e976b81d28b0bc7d8fffd3d68365f1a483401cffc1e17330c5ce7f6a6feed79b9c6f727cd60b1a10883a0143a0ac9152cb28506cf15ab83ea635f273226ba846570e5d82a3b18908c7646e412c3763d5531753c8639032e005e43045fcb820560f3c4afa4579aab0a2ad97c9723d6598daf6014e93e81c9a8fa5d84a7e970fe21591a95d17835ad8b64970a783eb0d27240bdd10870058f5de7b8bf653e2eee1bbe31f850f4543b61a9c15e6efb2b771dbeb666cdedde7832b1abce8b491645bc9c18e5d6846e6b4270cd2dc69ab80cc53029ff6019932e12a7b77309c4e3c7ab642d8d74aa62d53bfb187c8d02c235ceefce04d07eb20abb54a8680957d2ee761820f80dfc75b836064a907b4a92a9bd9e64c372efcf9e1e197c3475cb94f896972a13e34f7d13a78dc12db7808ff891bdf10b72461729357c8f6bb23cb948090fbed45049e5a638e15d8c469d5bb6bbf53b3d89d950000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002066d97956c5170cac74d64130926753509670a3136ea537f42cc69681cc9e298eb8b7b02fabf545f09bb22273d17c9b3da1fd51c022c27e3d5379603dfb7ed0aa8bc7f1dc1dff45117ee076d3b5c6006f4c6faefb0cbc63ecaf7142ce6f34b3db31f7b2c07978560af8ac20f7739483adc4a1e591cb994de7734554738de34e6cdc66c8dce2c688db313fbe4fa226d961dd7907153c694a0ca1f908176cf4a6490a14e6362111458b332d4f71a2a9cee06098ce69f120211473bfdb5b9249abbe19f98324c809467350a846ebd70f5832a73ef88cffc34d3d6453d2279e602bb3c7e147f653ede4ec98d37851e94bff6cffdf09b6b8b0f48c5de274af50b4426171812946c4701e289b79d1c8bc6728f18e7a565edf7901ace1f2c2217b4837a5a25ac0b4debd5b11e296a21dfacfc976fa00234276b0d29cc44822d66352af21633e4bd2d33fee4d150dea0f155974dc1e8b0321af308c37ca8da4b87a72b8be29bad4de3bc817417fd6c8882eff11f66c13fdc9208bdf905d782914c6f2475f4c2622c15b57300d11bbf8c56ce18a6f9ca48700104d07f3729ed0630b064ea08251b0195b02e99ae527606596395369d46a658ebb4aeeebe1693387df070000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9cef70afe01d43b1d009718221a749bf7e98e60e7e498b3cd1e07e5a2b546b18a52e11178a439ec2c6767bffad24bfb8553ff7b4eb02ad4cdf023373337efc142e065786ac6942b9c2db3697067269fdc198e50a7656ad32abf7a085b13aeb1bccab1371a6f5e11180844af56b59fdbdfd738fee69b12e0865d729c5d8e6bc75a6ec60d03133fbe21888eb95a7b21b84ee325f9916491b2cbceace6a91c57e61646cc6071d60e35cebfa28b4583ba5ebb594af10cce2cb8349807ebaf96ab55a4c534b7d7dc9e1a91c2cb19f6adc40c4e231feb26dd99f2dc1ffbbe40281e605f8a3df25af21bb1b34cc16a86215a03bdaca729dd8b49e80b975dc0776517238fc946e204e5b640a95aadfbdb692b38376d1b75fbaa2ab59468f9697f7b38e81804dafbae327d33bbe0f7c7f52c10817647bb846fe3dd41eb9d24d956e400270636ac1c7715d2daea7cf560bbe096c63082f27d40b3752df73235bc333908727bc540bf774bbcd187841139ea73fc145548a9940b30356c096d2c089d79bef6021d043e3aa3b77b4b8dc2c8e4428eae37885f94c338f2e358157fab5195406067bbbbb3a6b02807197b00ec4815a64880cc85bcc5dfd73a5d5413d01a505a0900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001176d467b3825c4cc20de0413e94ca7b496a8429b22708bf8d384bda4924c700723e4a0cc4d2c85c8bab0e7419ad7ab5b05441df262849f1717c3c5c190f14ae7f5ebe51aecde58b5277d98483f535cb667799d6d4f09d8bcd33da4e16a1bf07d30c5fc5672d69b66b68dac35180d9746ef8a8bef8eb1b38144dd005c8d02ec5b7934f24aaba867b75d4c00ab9bc6935866437d29a9c6d8f5e84e1782ce9f1c3b83f83f89a72ee651d85b1f43bbee314db1b12222d25adf4015f331b272ea054e6eea235d3be4b6199c8bfaf68a4979656fd1f1058f9398590f62a691ff39c70da0d4059afbfe39c1b05d3ba4f7be467c9cb0efc914e0630d511b59981a36c89e596c7a750e05f8bbb8ed5a52d994841c665d9babbc696438023f05c6f34b1cfd936ea28fac30852e35c649b87e9fa6a2b705485289c6147562dc614328b4621454d8fc13b05008a4eb74df7cc973f2ba6a866cddfdfa765333205187444a6880b923e91da2d23e8cf2b27d82fa443dc6a8ad13ec5719914fe47aebd82bb807da993cf8c9522220089af2e54c73b85a300228fb634082d4c196e140466b38cd50fab9d35bcc64d2e13525d99a952db6ddd3e154396bd2134fc6a2499f4e94793000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015a797b06f082704b8ac94bfa55b1d1a2f9898e15203fddaa6bdc60629f8fb26fc950e84a48e3c23db7589ef33f308ae5b9d089dddcd69a40d5f97058671f4a73668b817dbea293bd2229683ab920d5081ce441f9e2f7c87d8273c0142900190416947acc5076c8c3313c7e4b0f26442d9d8242f573103336cccf1bc5fe74c374f4dcc6783cd6eec82b97689afd36e86de1b375c375b7fefd3f1015d554d0627d19fc5ea2e8b4d1a9c80cbfe6b039faa2b6bcf070904c6f8f3cd1ec4d5d43c8e736d6b17c7e3bb426eec3956ee407f3123c357e5002ac4d56796a980d69ae06956990cc1f3bb7c40c0841f62fbad0ef13d5479470b2f360ab2a33fd914cc498abfce562b13ddb3391b622a36f7895732af4b68cc2bdb35a2a4ab7bcb5b29b4bd98a4e0b0fee3fc3133481625896794b36f70228c09a332d8cb1e00fd58e59ad9782b53a73b97f3bff19524b253312dab90e55bdf00503022f7c5ce1ecd0aec720b5caff0b549de628e7b69ea876408ed702f90f87cbb6bb047c4c9c21aa1df4dd5cd7077463b174f1c18f2a39a753bc194f99ca3c903543aaedbe4490da5d6b933c05e239925afbada37e9f5c1f092426e93e1cf5ff9529e8aae81b06aaf284300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c123877e2c1b6600feabb1e235350ffc5ffaa4099af53879880c931f3efe8307965d000a5e210d36d7282f69152ba9216781d72c356dcb99dc0287c6a1faf94f8274f27d5ebb9012c914ab26204fe279ab3706bdc23f3d985b60e9440592489476cbea97fbfec793c75d5360bca8fc66b9206db7ba610ee2fa5ad9c180ebb1d84de790d7de2330fd9491bf0c9c282ccadede382ef068315815c8b451cda82c85a4e7f1427d0878a5d271a5f84b0534b9556bd269bd60970cd564ee7d106a79950c4b27241a652708c8b4c7aa42428f34d15a0280fcd0a83b09d1c27791c7b4ee236b6cd5bd9c1ddbf8ebfa21d23ab1bb4b28a8c130bf589997ab4a2cf58d6e70d442b2f36c2bc5519d95e2e411a0b1ece277f4f557e6918510151211689a899e08a9cb58f2a8f2b770a03d4833ab43a9dbff692ac9840708e5e5469cba606ad162853af937b23cf7860d628fec3dd357651105d87f2a6ddec2e31a7188f42fe417c8f0a7ce9406eaad5355ea2b6337654cc41677890fc5d376401bb0dcd83b8760b0b59717419a99cd0a95e71220a466fbf5e4ee974e9d486b17414164d9862f487fab565186f9275c4cabb9614c1c8c59110f7de19b6bc972e63f7c111940900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e6590e6daec05bb4978d9cd64b47039892ec4c5552e7677a9a74ea89cdefc6debf9e2ca8b6bdba4781a2991ec37935af14b05677a19bda12a01bd750fb1a0fff1fa32876e5d883c9324e9ae9bec133d9be57594ca56a3bbf9355bb0a6198fa3019a7c7bd525d4e5ae7b844dd7a6bac8a433bad80dc2b9408837f83b17fbe61cd9fc045340265c5b66562b2123039950c1f13b90cd145d9c0b1a6399b387c49bcf0179ed50ce9b8222b713a652ea3530fbab3258414db68b7bc0ae401a081074632f726d1b257707b6367f1a3b6c830c5170bd9eba3a78f219030705f648ed0e1446efda45580e80ccea0d03492ad7ecc1240415bb3c397f9701c89dcb44f6f1488d4739167c79925c4c049fdae3c0ac8d71bcdeb547ee966e109361a65f828de12d4ba8af9a4ce23e8f6da95f5e4764bcd8e55bf8c29b1cf844bd625b9b03747fc61f082583ffc374acc0b0a89d203b439226ca7aa6f3e79d81b322e2b510a15a683424134c26f9ff8120609daaf82aa250631e25b67e2e07b77460f3fff64d0b74e7a2519508525e5dcee7c5fa1bcd0e275dbf4f2e027ec7bc74af2d1ca5983b17bce9b351c2e87a021662c41af5c29a5f0f67f5844279e39c92f2810924ad0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102a3b6c1e51b09159eb44d2e277f76d666138561312b1a94636f82179e6f1537d01d2eb0798454e71e534c573cf337374b1867e029873613bed45c04066c06c361952a1d4b530dbad21dc627262e1e4875c0349bda027da69748b3888db4a737c5333dd8df1d0f60c4c27bd0a7b34c5585b793a0c5d5a165277c3f4a047e83abf3afe44950dc31847ee13269456e196515c7bd634a536cd721c9ad62e7521eb680244ee158fdec970647a1f0b1d13a9c5c09056b69837bb5e8dab657f0a4df8b7ef975bb16aa4144c99f827504c5770fa44aee7ed0a88d0317a691c48f98cb33776957aaa1d7c22cd2dbbadad79177e03f06d42aeb24953caa65ca438cb386fd04c915170abab0d7762e547495b0ee583b5254bc6b9d8e3151f00ce580136e44d261da507a5634f03fd4b5673c8e7e4e6acf1fee767fc3ee58867c6f29377b533312a2e5a893942808ace92dee8bf3e4ac3d4ae4141adca03f9fa46e3443363d6f463baf21aa464c777da87dba50e4e92e66aba1f404bdb2ae80bc1cb7a7de549fc32da2018d48bd74a90f5f6747e743d84c9c2c5f36ce59cff2ecfd5cdfdcc40e0c5252deac6d1bac5e7c41d775c81fc8cef7121f34e00b9211e207958cdb9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f31b81b2bf1406ab2ddf8ce39d05a963f98dfcc91783d0d044b1058b999cbbf928f727e1d538418324e8a64ba507e19771e3f5fb2ab181667587747a000e2f28c02c198cdb69a38911478ff892f0a58ba32c5b02a298ed862a46f5f700e16e5c0c3e1e048c0f886e329305b495e1936c532af8fec25e22657fe17f6f74c9ba8d00e2de15cbe932db790a3c413b895aaa0456849a616fda51fb0c21ec441ac91335a0df840436831c6208e40baee4b7ff37766934cdaa58f5bd22f23b6c0a977de684aa9ae203d616cb24f0b68f17be12cf1ccfcc1d83897a8fec3e5a9d4c3dd6c3ed9ef8471e5742eeff4cb0e9b3c18a6cda5f7e5f95bc5360cb6c12afef065104081733254da569f1f595278a70d47a5fe2dd25722596cfc85f8c9cbc3833f575850e81013a97e7d369f8fc5fd2724a973f052018baeca7e3b075d0ac7ef66122a76b5b853c5f01b20cc223c7efaeeaf96df72377512af9cc6c62b255532b901ba36fd62d80c3b3447d33a54ad71f58b5699c908783d95be519d51251f5d215865dfdb06aea7a36133c3892d4a34ea3b6c5daca29d5dc2d9b07707b2560ad0faea22dc72d0646e063b30291ec37732c824eecf4ae447b1947f0ec8922b7fe00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a42214c5492713b65d4778f6be26dfb629e5721fd6ec984363b5fbbaba1bd50960728eaabc35100c93825748c59c55b18e683839802f80d18ad61a8be6f3bbd93ae770929d59298f0ab6a2a986134b0d6a9b139168303a1d2687e92e6c69be7b704af74a84296346da76259fa3f9098749a77e88d3fed846598b1494ffd56dc8c94d8e9a6d6030270e2bd557058e9a6824d368cace7586a303542d8945fd424ca0edd0888dbd8a39347029ec57034ea60ef07270cebe39de6bb5c637fdb6ca0fda515c9bcf5e77272326c42f4b76502486b77686e406196689dcef61c6af5ac6908b2d071d554eafe964f12e9ff70b198b3857fd472e5a4f480dd7d4dab28fdb578c61373fe45a071f0c5a24f997bde5631148e98896dc6db10402613864b59184adc6f94f1e95fe2d0e7f4e44a43195d595049f94f59a8ae850b301aa9001d636ac4506c1bc861d38dbd6371dbb90933a67533da9563f63205f02ccf309c73b070e1841a500ece452db19cf4594343e738527aff6c1e69aac197614c8c8be55f094318426faf69ab56969bd5f03b7ce8a2541656b8400db4ea05f18823a073410233518c1a48eb85fe99b58eb51806f46e1eae9603a88eb78844d4f52b2d48000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b9a30c10641c633bdd0b28bebbd8141591ece2693e6abb7fa48660bbafcef718cf285174fb92cd5e8cddcd3f70bf6f146daaab17aed64ecf3e7d8fabee7700b6960afcb779142356958621c3e72353c412772b916cf9f383547b755dd0a2be7210aa7fa948eb3790ade34de7966bd07a0f48ff9a3c776933ee63ae536ec684a8252ac38e63a3095d4a7c4a096ad83cf96fb11bb7a737b928322a9ef9bfdd60fb7497e9b9c4becf85ade7029854cb80c976482b94f30e4a83bf31297b9333e7fdb73956f2ca56c545281502f7b0db02772ac012b7ed7a979602953f4e6562ddf16f55be7449742ae37881b5bb195e11ef28eaac9480ddc07ec02b6c4a7626e5e6f331a796beacb12f2d4d31727177b17b972019ab549ef92c18630edb1fb7edb872c83580e252ff69bd84d0177db2c9149cea23c5214bbf19f9ee8877b69795398a6435a0fb53abe5bc5dfb30ac6a28e5a5ef6589df392e75e1db015880b3f8e77cf1e1db4bdbfa0f4e0e4f13a1ff2013a72a9f1039fcd34aa56c2c72eb7a0c12d8dc66d95dea60c3e607902e0780bd021466b3b7a536fc874caaf2207f1145b7b216d48cafe3e0e033c12f6b4439896461bb5eba408f55db670bf092cc02f900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c58818ffa40c56e6f89b51732c93a2196e25259d17188ec9415c066f2b601bc75f974aae90497671b7b2db1f7be48841320fc974b2ead623e0b8b1bb13a9e640392adcd263f821afe950bf5cb9c0d1da37ead728bde054499494b8d5dd7cf674f26f8efb132b31de12d6c26ece67fd55a70f9699022e094bef1d5aa2c2a2231e2fe3a2685892ec06f515009e1c8f165639a74c9bb2891997d487b1835fe45768cdce1105d0ede67b7a14e80a059693619f4f0800c6ef63c4026ec6fee861052daf2dc00a6e270c0293d7471753f3b39c736fbbc6bcdbedb8f8b5b25e0d71d0c30d16ab76a5ea2f5065a9a0c346d2d671c09a6c027f870c252a337bafa0461e8ef5ee21396d8f6a219e6516412bb87624aef974733199566c7114bcd0b43cdd530a4fb01489c61955a08b57ad68014a9e6a841cd3dce3b66ee11a4db7c293d5a4a0fe04930416f02379150f74e07f64de80c3d69a24f5bd47f8626a5a4d4e2942c68ee9da01a0296e2992fa040fd5e5a80cc614f4bce92b147a500587b068ec08fa5c47fad03a91e5d52e6fc7322698c5a0e6aec1211961bf45aba729970c5b8758fe7817754744b21ed1a292be7e2f3297d8d8f4e191e0cc406168f329b870e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025f41f6ed804e1b99eef3fb12394615371e812f52763da3ffc0a4c5f509c3bea46e0b3d233e19b6d02facac02506047c55e0cbf04e8e56e108c952e0d30cde8944b300ba230b5e24de25b67eda96d10249a192601eb9f77e685efabc38b5784180289132bd08c8204e6d386c52eab8abfa1327516b5fd0c2d38108e04c2c811ba6f71e4a3150853d3a09dcf0d14d8fefa9ea17681cf72e9e87e18cbd8cedcc4998ba470c40dabd99ef074fbac4dcb4ea6bceacf2146a1f93da1427b807782a1879325fe64fc3fe8ae860ffa21d159f20bd807a7be5d09998a599434ad67a49ab82f4dff386131aa1cbba54f222e7f033be0eded9944225e72844992c52017f4f990afb5c1eab8152fa3dbafef32f84e9b1fe3c3c6022bc94483763bfc0879b0ae4312da129f080d5f55bc2bc4bf5add24d37be2f57e66e581975507ed3d208c778c9164122280629ff864b2b7681ac617b426ef609eacd949ffa492a109a165e5bb458d4500b90b3cbc97e84a2679f7e56e1c68f6c0370049d5f629f4a59d71e7892efc481dfead49faf6f9ef872d4ecf1ef7bf4ceb1311863a8ab1ff0fec7d96a1d72c4e7867b1d2f0a3698baff53fe19e88a63d130b734dcc6acdedc316e6c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f113a5912c740c8e0f08d4f82e8fdfa6250c0efe91832835670e7bbc6a09fd1cb4b83a726fa2d57e5988fb75b6c1fc6971fc9073332e4cdfe31d09dce8e555d363c2611dee86d54ddc408eca9df2cb0ffdaf6d293a85ca29b90a2c5eae09a9c372af4dac381e8ff4c219dd19eebedb128a39f75c9bb70322854e71c7aa66ef23138aabce274535d09a971b476c5dfd73a6ed3b795afc10d7702692afeda64e0ed8ea595b8598947114b8de75c68ede8ffe667f3caf2066798da4aecbadb405da4e8f751461a99d7c7352e9c581210f3b4f0672598643f9e00b37777f0780a1fb2d75ada0f040ab4172e7372c6c3876062f63897fbdec89692c0c5c68b4ddb2b819d880a626f8b39bac49e33f18b3a0044eaf647b993956bb85d2b8289546b1e2cf0d1ec8bac57b3999fd9c745b64142e8fa62b6807ea9677f34439b77e05fc3b06cb5101217fae0a4b32ae8ae3204ae750246b3cc86524eb6e5fae8483de5a622c2ec725207b9ff3c7fd91faaa882b669a96f4eab77e6f90d3837e76a505ec7ec3dd464acd878416e7fb3c5a992719b417071f1f01aa861ecf9f48ed04c1ab507c2b9260351ff3f3167b1c8e5c7bb34621272a138ccb71918a9923e86bed28100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008efe59ffb5d5e1fa55dad5b50e04ed18e08a8662421dc08173e7c9154ee967441ba146e0df5afe938fa04c32bf0e712a03839e962eac7f560642effdc539e2e6979a1acb31b83c6e09afabdeff798f2dec55d9e892855de30b8be12d978f99d6c07ce6932d97c5621e5ad0c9fa65bc67267f4e11ce13fa6ac11e0939ba832490e9844633dac0645f290e68d41711cae8e2bcd73d70bc3e890c25264aa9ead644838ab997c0a792acf5762511f2beb86f863f230ee65f7018ea09108b3caf7584ca1144ae8f5ec48b68fcfab1e0086b25b9872c5e51bfb97c4a4b1d153151aaa1ec75187eaec454a3ad6eff4b366c3550cc191e68aad23932fae1973c0723c14c7ecdf130238593db2d9ce10c224f50ae9051121b75622246e5e92bc6f899d1a70a9a08ec9f5fc595065bc43385b6112c8ac82d8c31da44780e355befa80b5937aa04aa5cd1265d4f4a7a590c73c2cd1d3b65eacdf9cecacfb2c6a4ce2c467ebf217c5946ad0172a6a22dfa7c929bc06226a4272fff983d7b0bf2dfbc99d20e8224f3005b690b0e7fa63e39ccda36646955b2262b289dbd9c73678720337c41c09f30186e1184f6288325d3cd5bffe24ee29cfe0fa40e66920ff77a8ba15bdc7300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b6b56bd54c4f3f0c3f46d155c6f3d66ff15542a36db7ab5c62a0d5076613bfac6d8b4a2929b025deb3e72e18c770993a6318be0bbcee59a82fcf8526e24887bffcf675bb4a535e81046c49a980158931ef14dd9403cb9269e81c77a6bbc71913729ba57406ed968853af7de86ad990063c02c64556b0b5f613aaa55876265620fc4506632f7964621bf29cbaa3cfd68420546c86a3a96b86efe2c581e31df3609b127469ecc51beda6d0b7ce219728fb0c5634e89cb2424cb8dcb241bb1b004abe8b3d4244636db7371131edf3fe66e5d47e8ca8917fd2e1000afc21073819e11116b175e469db373586acc6705a9b7f6e5ca1c1903d74990b44e83a09cd6de51c26cadde01e5336bb57371841bd2df9c1005c808e45b17d5513c1b135464b6b4b797b4541fdcdcdce09a73705a61358b9f6b91d94af2b5df9bdfa3d40a15c9da8c8b2875b6518b2a925bd5c8d1e3b7d1ba2494f67694b5c470b15f7650806ddfbe267c36c7faa323dd558c46ce31f39e012663a959f007535d9ad1ddc2e86690c655a14c14dfa32717f8e835493468f3e1bf8de64f96b107c567009eb15ecb1273f504564ce4f5a277e61fd6eeadfd93ba0e2918b81d45c5046182d9131e060000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000929fc6ac4820677ca4989032199ad47cef53f661e4e9b0b1d4e2daa30a75a710a7a80fd919a7636fae8c6674856808dc414ecf25761b17c3df0120384652f4264c2f4e7864796aa761b87ebbbd3d6983b191beca6430b1049f8c6ce9c71d83de01b91742a6f39684561c05238f19b0672db350eb06bd20b26c78b840824437fd393e19af67b72e4b314ed4b4537f414f1a90b7bad7f372c8988d1eb0b3b0ad01b5fd49e2d1eed47e94fb282e884f64fa234f25e5bf83b4ce6b8f260c12708cdb75631147e95c899d183e09217a586b0467918ecd5959cbca2bd34999c414b4795d0537f8c6ba03da200246cd2aa5c10ce685f06cfa968a3b989639af72e9b8553cbe1adfc7db4e2552bb2e9839040e34abe136cf25ec1874161b4615e549753a2c8eaac1de590df63b98185bf3518075297df0e79e103c8e5b74e52c21cda9536329a9785f009e23ff55f976648deb25aceefe0907900e304cb854831bfafcd90efbe4fea381538e22abac6c855c986fcb2c2081cb08f151fb90d43326d29247d69ff91f82bdd12a7bca96f134d441f1c6ce0668b3862657ee039a5417edf4af662b446712ef77efe80c349561fcb3182ed99e06a7f180b1bd9c2fd2daecd97a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083571de3118fc3df760130ccca843f95a12346382d25290b0c6db0bf2a7471baaddaf3c26a5864b55518443aada2498c15d6c31e7b48e334f154fa468649c84b986f52640787db48e93c52312f1943d6986fd348cb05ebea5dc0dff95f62dedd485d3fb5426d6d080eb2aac7ec769b5a48606e577fdd7758b7bcdd51df3c05e99809a2f0179d4c20c82048c7fcb7efb41d37293ec37cb27731bcfb3049c0195ee7ab2bd441c5dd112230b7281b6a38480fee03caf49df25ae3a60e9c85acf76ab673de9bbddf9ec1f03598ecd0b5e35593bd0950addb10879fd03a46e898feb99fc72612c32a630b6e6e4586d9c5709f86d86d674cd4f8e9502f8147f48c4945a93ba638356cb77996fe8a6c0d088593563469c081ab6bcccbd79beb0762d6777124611f32aca5bfdeedd9df0f6d0971e82aa086c778dccf558fb9d72692fd5ea7b7b196919b138a5f833cf2c8e8662f32f709f7d99283794aefb837313903d3708d637e413c37648e5b33af82bb1d10e960173742d32ba6a7dd4b1bbed8cb9f19bb98b0c559ffe82527679da57acc721f6d7e305a00d3a84b1c76b2a609c4f3fefb7ea74ef8d1d8421321ddd7682bf2e8a3d1d7df031d3c7f6a6b6f4db02274000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e9b1533fee724df72cc6ce6e4c63e6314697552ab7a61c6e7b266c4b468fd821ef2d2c9d90d979a4d2361f3e89eaf543bccef3b47dcd43ad4740a9c0dc99fa61f4a019d0ea98507a872c0298d09cfb9798d0ab8ceb817cd818df3ab34eeab04701d331d8b9be61c5cd1a6670a0175d20095e29a9885c15c280f514f60382eab8fcfd9e2336599e67ae2e880b84737311b3deab0e8560ac1dca05d363f938bbcf86be23096e86286976b1b1e064cd07d253dd56d2a2c136ff99289364c5e7cd6e74b1d4fc535ec8805201826d7e5220b898ffd4cbbdf8e9f4deb8c2a6b1e337494bad7048912cc37c8067d51403744ab174039bdf91ae0514f6ce5f733732f5b6606260c8b52ec386a7a898ca12960c2dfa01419260d1b302b91152918b91592c865cc8afd59dbe57b2082f79a81b9c9f809611c9021b177154a96baff04c44881b345ed522433fee7922c8b95e4490e52640f72674811c1eec8ad83f04404d42aea0cdba6309e4c38049b1f94401a842bba14b176cd8c073d8ea5de233da8134f63b9a45c021ff6d7e3d826cadd4222be9d13b18d7a26eff61756692cfb0db88927385f638586b892cd1ffa73e92f72d140a311898105071dd81d6572fdcde00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000784679a1a26ced60cc42de5a0a1e0e3574f91d42af0f68cc99261eb938c377f384e88fe1816a8e97e9ee4472d6ea70a645f0f8b27df66ac37b0fc49bd85301439b2d393de962af302dbd142e72c03f273ecce7af00c49ab5fffa1bc308da8309883f99ec6e28398769c36d97d1ddd711c5868c83470e890713dcf515a7f27eeaddf14d771ebe436788566870fd34f4ae981ea08d7f5012d202d1f0cf239115165b2f86c73301c31ef7fff23eb7d73cf19bcd7d8454b7f36aae5b7a05674dc1e3f301daebdf11970e50af4d3e4af32d29132f72d6a1c81eaf6e89c174d58ab593643fe868fadd32e846aca5a849c00ef4c8eec3e2a9d3d568aabbd15702fe212056a3af95f49431b15c428a3fff6b33693529b4a09ec50e75b727436d27d533ee6991a93a06cdc61cf027f017b9a3291f173bfecaae5b03d353aa31ecbf4693b0944c3cca28c1717dcf6e1a619f504fb7136ecf3cd804d85acac7aaa939976080c6cad1bcd44f734b0a85345d6de58b79fe17459b19bf9ba6b32f868824becdf608cdb0fe5f17601a121248f9df384bc3cfa04695bd99db629c41a73a5811346f2f97e2d0a07716c98bb86f1ba2744707c40b3a338d996b361353a366775c115000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087228676b2d84faa793a9a3ab696a11eebea54615ceeeceaef19d12f520606cfa244e60eaef51aacad8ab3e630222bf1db89c3c2fd570f619130e42450234839f53a930a536e29099e21bf39c300e6dc3be9c5c073772585376e185f74ea922ef26342e5375a54314a7dbfe4203956554532d8d6e21c5d70bee824c9cce7f1a5b4de0844a59a624f8ec32b5b828b718ade98b878811966a40eb0305b9e13feb0573c98b2d1a16cb73074c073fd736e4d6f8019dc7047d3699d0ce62a9d82d13556fd5bb62691b41ae729a9918396282268b2b29888edf7981279d0bbb2ab023b89c09138a259d7e96979e65bebf4bca75adbe23531c1ee9cc5e42fa86c0395e9d8970d7c470b8453f268cd7123f2989af995675ff8901cd1cdb369c54109db305f9fef726a9a0dff9cbbe0cc8819133474d31faceac06ecab4c8013f21ab53ef062c8cec630ff998cd239eada71e93a30c3c8322a59ca74fd53215cb0ffbacf3ba1ea9568b244ac26764bd5ed8086f6518c42baa9b1bc2e4676befc715d89c3fbee1f79be50c1c96a83b0caa2586e630edf625a6f14c746be3fdcad2574e4da750ebd03394763865a91915adf879ed75ba48ca0202c1f906984a8b3e6f825bea000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098bd4695386272da51c48c6b8e2b5a377bbb88883885675af0d48f3c4fc07fe562548f3843e63c5bc17ddf0095adb83c673e64212c8cb90f2bc4825140b1413c750618400b45d0f2462e9dca4a01af14a73349276cef582d8a7006e606b640b91aa8314b2def2b6eb531a8978207fb10bb40525961dcbc759fba88b77217d9f83b907207c21e82761287228752113a4d8c3b613a853869091ca5e5e081912639f1572d91ab0d9a748be26fcee6bbf061f745622006df69eb6aa92ef557d5d357f747e13827f8fa8f6cefbd8a83f58061fe08983cb0c93b4b10bca1bd2226feea29ebc65c8f39e55133e91636571be8f487314d16ddb5f7b6b532ca9b86d60279434751cf6a01a6817bd300cb1c2fb022d33633ddb72d38ae8ca06c7c131eaf5493382461ed3917748f6f02ed2007937e5c0e925a3a1c3c07fa6948a03cb709a8d29d49d7dd3c91f8dce56df90e3f6cdcda2f3a9acea284a7f0599084226c2bc58e61bac87bb13580f43a785181ee86ca47259b8896a33c951c13e57fa20efb90e2188131f4d83d3152e38e3dc573b6bd1c074eef9115bbbdf427454fa093849d4ede64cfc2ae5c982deda2ebf63789722597de14198435ddf5472282f24b7e330000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9f37cfb96f1b2ba89e3ab7d6faafe69e01168aa8c8d5a99d7be162dcdfb2db2411ded1588364f224494d9d3f2d00afb2f0ce732261089758bd5a783fc27c8d97e222729093bbf40d74305e29332e0583821e80a341a0586e5b3372d8e777fef44ad06df13c7dc3257b81f36605d67bcbcea6c01050cf422b8fe4366e9d87ba51dd3f7e37336757466072da7c5c597300fda7fd646571f24ba53b7f2e99a73c9444fbbd4f06aca384fbedf85f7821696790b128fb17b89bb9a56fb4273df5a72bf63c683e10dab2631752dfde969d5a95c41dc57782370eecb2189af887dc37e5eda1debb505d8f9f647aee7cc99ae98b563690243fbac6f9abf0e10041f36d3bbc17bc69772f3757b378fdfe9ab5c2d8f57973926f928b31e45d5391e9b2466f25ce96a9e4e8871ad5de8040e65f46251a1891c7b449b51d354ae5f2a2701686c7ad32dc49cd7db660fc0186af3a8d8f08eea3a1515d91f9c16989f66e0b51c29712ee025a1d38e0e352bedbc5f4d5d9b614b97b21a722832125b2430df550a32294a47cbeeff926704d2c709e7ff32c5b4ce6814801a6993ff0fef0921b9e45e700556df0d09b8756e1c8dd0c3c7140f9c500be71177b2768471c7f7964cf20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a886a1fd1d9a550e4e7b4236686176c3ab204f693eab070607bb3b544733874e342ce32eed6a3f9c3459e38ce129b354bb9485cc85afdfca28f94291b917a9e79361c8c953474fff7ff443350000c779dea6b3f0ed39a3b45ca55da7db4352d475c32ad7a23817423bcad1483b4b54822b637d82a9f4af31ea11dda3c53aaebdf8a4a133e39388f70eb792b982e89b6d9a1e44fe7e720636e171180a8bc106134e400cf478b42f293aafb1fa36b22eb050499553c2ad6f71e006f81b8c2692abab3867c47a84b0d2824e6be7ae672725bf4ea56075040dba1e8bcf6c1aec2d5a9432c21ae989f1ce7ca716b61d3aee8e4eb36eff980d41d0beed05536c94764306bb294b6bbffbb47c31f63ea65e1e910d39d263ccc349fd8dbf93111695da2c41ec140991b2be3c1121785ca57a202c1a757ab410acf3e297e4ccbf813f554af2e092fe0073f77da2dc2316c67989df6d9b3ce21792695b7071491ca6db6719910092632eedddb72193fd4f9207e1276095b414525ad5462b529f49b59e1f32583102ee45b455c3e844c04a2a57758ca263c92eb85eaa063db870c2ef7a7f3f13ba8715d008fbafadc2875d9b1e44e027188fde9356ce52f6ffc633aa0b78a70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000897c932d0239618f3b889dc92c5375fec14fd01a10934bd2486915ba7b8692ec6ca97e354b213b5804c9089bbe05472b0994a3ce09a790f4e0f0ad9c04734ce6a40894fc5d52b6a9a820232ae7886ae7a42044036fc8ca9ba7c4b189df8eb74c8385f77ccc7d540df19f4c659dadf2033b86a5989b0ba49008b92a376ba2f00d60392a0214a276262c7080e1dc7c2bd573a6f6c214a840884ba34ab64bcf7fe2d15415d8b2366e0b3b7130fb388a0328fa6d73342a0783fbc9cff00ca10e972783115acb37ab6fa1ad2d60b23e49496b498adbd5ff9b0aeb33e00defb2301638e5ee7b055011b74403f52f581a9e8a84f02083eb2aba3d082ea4ee2d10ff19844e80654068ab10b70bfaeaef0fcc3e3731a44b55cbfce54302b9bb0ab34b725b5fb970e071304126fbe270168e732dc3ef442d8b7b552508805509f6268ad3afec456e52df1278017e9163f973a58cf1238d0396d92d3e23aa4063306178adb0409ceb902b85e719ad5f75885eb241e63c63d2989ac22a4933689b2bd669afe47f375ab318303d0955cb2362e2abf5b7d69aa40bb37b1bd64ceb0176a0c67bdb2d22b65b4f34f83fbf340c5f33a18517da2c355b2ee97f97d4612143f060b55000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009429a260b51ccda6fd5ac61eacf955ca43c37b201d3df1f07ecd0bee5e3d0e5ab00809e9c98b72c7e715ab759eb49eb96131277b610b8a2931e4ad9635a353d49def24fb6835f5712cf8ed24b88df429b16330730a748b2fa9637df02d1b130aeb596908d29f2b3061524b14dcf9153614e9af8f29db1a647c6955ac4d72ea90883ae4605a2430c12d89ec74940c232b5d37ba75f404c2be3f637a7b8ae356d223d67c828e8bc65bd13f6e4c09c050f82d875759980a7fa7dfe735a00ffc246404e044b68d6a61b9c25449832a90d2fe6ad1b7e1fac905e2db7c32d51a447b45d41bcb0c9ad139075b4110fb44590ef2f52c759d5f6510339492b7649b67daa3ea9c0ded340829ae1f16d04cbaaed5b7cb374d1a8ae1b17deae0db9707fb4c3b6bbe77299561d4e5622e9dd42e20e968d7efb88908f8f2d235bd4da122d97a362fdd41a58ebf9290131c0b085db8e3db63763e54be05b519dbf3b5bdebef4293918ba3e867ec5e7b95fa0ab9bf8c8629af9138e61e884d80ff255454098594e2ee72128f7b115f092f4fe0e1a17901030de52c3b195685f85544d567620e70395ac66e697392cd8332e4690c1d9c04413cd6d3dd5d2fa7e0c36ce5f6354c40d2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027daca7db1ab7c4cb50f3af33fb83427839b8c51c2364c6b10d46cff229d4660c5b9704e114567231f0380b6d2817e7030723266d3751b2fd3a13ccf3d3c1ad9b6579b78bf36762d9617fc80a7a2d727a7c4f1185006e239f55f40077e64daabf3d92247d8a8aac30a1bae285bb4ede91dabb8b420f167f20b5e0e09da452f3f9ffa86a5a8806581c5f313e1f086c3519b4a58f79f01bae32aa2a52e6478b9106688188c67d4a22d15b7873efaa495f6b4753c1d6011ce6c66633cbadd032dd62bed20731f1771d8c5f89c8818bad93630a6c0ade6aa6f48dc8b239c1644eb1deeba6ba0c888c209265a0d57ba6750c3e91dbb3786b0727d7ae658bafc0c832d3dfb834273aa9ba9a92d174f53849e4b8746199c095933ad69a496770abf88b50d3e717b082a1ce10bc8aae9bb8ab17957a9e33e464fc70785a28351acfc9809ff1d697cff473569787e985da78c2cb02d5a60f6f0f02dcd9efb5bc5d77d2dfbf1e0d3620f6994a304edc9833bd7c2f43f6f6c5f034b4f8aa772bc9f93af988c76535ac903c5ccba078b40223a448e92b4f4601adfa83022d9307b6c4a435acf6318b8523633a726e4290d7236a8446493ec7d88477bd3b06789803992e5d0380000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5a14b7999e5a28e7d434fb36874d0ce3a13c9feb5407ce92d942c7b759ab7ba99b056f71d82c7117a313b3dfba3b4dd6cd19f1e2b389f93e3e56f2d9f83bda04b681971571d4b31c136260f58365db1a5f03b87935b4c95a621c4c68ac393f2c0aeca4dc2d8bf11f8f07cb31d85d0d6672c8424ccda7c55f823d5debaeb179febf14d5f1214420960b37a0f3b801af4e5c80f3c54ff0713dbc935e630064450097e66fac37c859398071c0e20d25ad600c1786b75f7a17e1165fef6e92f9db8886f22e5ce7297f68b194e67f8d9fef53cb1b8d2dbf6953c871c318405bddd68a083f579143ff0685f25f1a162047219a3df82665c8a443f6d4f8d5e74968ae484f05f3287dc89b80f83854e5bb1121ee57d136b7830be0950e00ab9c159b7b433cccbb5baabcc4e971c0dcfbf72be5e5e9d8511cecbea9f12888499de31abf2e13763c333bf5b0a830317d9bfb60836f2087e86a5abf17fcb30b5b40519e2310b9717bc7b7c4dd03b1447011cbcdb7034af963ad03451e3c72a5d504efb88967ae2c63be8a335c7cd10e46fdbe448363743c125370931a0ce2f43fc8e7ec379f2842cce17b5c0d974bad89953b426ecf8640f8c2e5bb1c33090d03bf61c7cbc000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015b96d992d888c0ffcabfe12f7e9718311a2f966bcca38bfe857b8f812db48b996be6f8c65d4b25cbaaea9ea1e27b4b1fb73791f3cd00ff8456dcc2dd830c1c5ec1ece26dc60fcf38717e497ef38ba4512a980d718b4f869b92ca71abbfa4048057fa4d9716be875b0c8b826dc878c8d8a1baa5f5c4aa5acbd58fcda1dcab2b923f7d0e5319971b7d298ce4bf1e5c2a85032d4ee55497044910952c02e0f8f3dfae2ae2ed992004fba6b4c2073f11d10d3926a9e73563878fe958f05c50c29e41383703f9b90a0abe2b45dc3a32522ceb885d6b820015144c2c3e647264d75e175037be297f591e447b19e4f2bf84b44893e89557e37416d873cfbf8c35d88eb59118c70e6f143d519b077e46ffa4d38ce3d068afa950496d38fe31a729d70524335f87f99fa3c7cde024789684b41c3517a9a1e21ac0ae38b21a369c35f24c2e71cfc95c59f5fbfa49e47d4f292e40c8c70a161ea29a8107a7aff25a7fad2e4ce89725057aeae9eca06d7fa60238d1507cc8040411c3272b461dbbcbc105b75429d2c2b1d59b189fb9943afb52727e3fb991a948f39fc6ab06c4fc2e0492acefdc59624a67f1aac1ef13b7e841f92764747b562fee64a37515afdfaf976f72000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008caba88fdf6e5c5b581ed9e5876fd2422dbcfe301411b151cf4641488f4b747ad69fbc76f7cd78b47d5c846a5bff3f6e7d7c702590da28bc14461d0849de2764cdd62dcb96c91dbae0e2022c21ac5cea722fadf6e019c3d19f8a8f5af8f27331531add0be468f5cede1845f21f3fb99d1f6083e382fa13e59654a6bfe8ada77383e5fadaf3051347ec996a738bb291940b4a51739fd9c5772e9fe10a325a6a5cd188f6a2995dfa9bab5603810b1189105275a337db227e30a1c31c9f3adb0c75233b7c8053b1fabcd09b7ad0cdd72347db6fae3fa73b062274e2f195706d528d2e131103dd612d271e5905d7b358b6df5fd13866830ab863d4ffc056bc0101cd666afbf5bf0e3f2ec4e0ffdbca81a8181796568f18a73f34ecc68149b1d782aaf3322e6bd827ccaa929fd2d76b742893aa23621cac9b24ef2dd06afc149c27a023dcd526c0eacc40f91235c106eb10d96d1a5cc3fb27a7802da3db76a4405b192e75c5596c4ac3ab6c4eaeda0f44c81c4c0d2c073cb160ee5b6d9d46a8a57049f66e5e8304f102d758f5bb58294cea2e08d46c67485671c36fa89176c5c0469d8e1520b1a877350f45dde67a9d34024b0aeec8a7c408a7a65c5ca14c1ac297d100000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48400e90ab63f650d04d9dd3c1d7672126c5babcc77462dfd2d6e8c4d3dbde1395a005efc4f50fe2e16610be124c53a21a1612485d4865549f458e6464634b7773171a4c34f86945662fd6db1b0f66c78586de8672410cebd874a7433aea97c1624b0978db223f0ba71ae1de40ba08441c96d6e002a9208c115b04b3ee90ae69743d27e4599e8684de4e4811e23cfa21960400115467b95ca568c4a90e426fdf3054296b413f69617fb62e34bd40b7b103a378b42b033ead09c0f6023f0b3dca46811129da30e829df796af9cf880d30511eb8b48d91e32131e323fa21bf4e1810c81fe1962a7ca770f51a2012de905e18934ddec9a124675d8aca0c93311fa420830901d79ab5a0de3fa2ebad8cf4b8242872a678fcb54832c5a427786ce4c822222f14f44b67a1b6f89468dfaff71799023f4831721bf5c5766722e2a01db05adf078f40a42b76bab65404eaea12d35c6882c484ac2f32df3acf677fa950cab5da21d7344c62b461de3ae055a460e4aa4e9bca1354a6d9876133b62478209866860b556a6647ce8e410dd6447c8acdc835715adf5ff4d352e6e829fdf237567d3000af81ae3472adcfd120c810c06ad1ed021ba04889c8f8aed94c1d4260ec6b57061598e5f5286e6a9bdf1d3885d505dc1c0e0c8c2997db212cf2a1c51592dfa816995ff648df810f061fce48cb145ed45391d0d78fd179235a236f92f38b998b227abc539e0f26225d0dffa732511859028f7920367c52710dd27cdd314cb4f51aad80c34483eeb4cfd6688f03ae4ac5a09feb13f5930747cd59de3393e427a7231a280c69d93fed00e7e8f5944c3bf34ff3457c8f06de325fda01ad060cb1d10b5273644d80363bcaf0ebc793dbccdb74c7b69828c46595480f11b67abb9e180f76d369808eaff8982588ace0c6c165d0713e794435432222ad918a6db3355803effbb12a18a2763c9927b49fae7cf8f123d2f4f98c72070fe94e803a1bd71b24053b6a861eb6b2e9da44f45dc89e246105e33f921aeb79461c38ea47ba52b72aca10e9f130332ab21ecd3934220cc6c036d4a76e1ccdb0b73827c16a21981f0db9aae69927608ffe23f0b7b3f00061aea98a9e2f7541cdcccb4a292a41080729ddc52f0e458efd2efb2cad719cca698a7ed41438ca536de6850c9cd859a41708d4bd5b4a6dc60990008af3a925b0a87fcb58ed713a36d82543508483112ac61753f29afb0073c931e8e10952751d3bc551c6bf7322be73418fa92a98e3c8ae09bd5878a7aacb2eb901194f98a11ec696f7105bda68193d9e97b58e775071f61f514592b24cfee7661a780b13b3ef9a71f0083bb38cf820cb954c4f86b566432f9b55909b8797009494bf659631098a9e345927c5b5bd4fe8127534025fd52e1847d85ed5b7205da6715288c27a472c9caaac4279615f97d16f76b4d56a6532203aac89b79787be62285709920fbb0bd2141a0864a42ebe110fd6cd4c0ac0d31bcf5b1fa7e7445178e160fa892433c42f1518c22b072eddc0ef9a2aa8ba30d929597d48e317f3974f515771499ff4d8825e47efb7026a31731802faaf435746184de30e9087d96b4ec3f4f1083574c0903a282e8234661362af36dad2163c420dab24a6ebd75a294b6a76b4b1c6cbd548741f4e5739ad543b77885b8533249d1140cfdb2113df20d5f24607c22cec1af7fcd8a8a7be2d8191d5201f09e8feae0ff16794a58df80ba7f8c00aa7744afcc067c6ef2e2f31587109e19ac8aabfd51ee1cf85ad2f9e993b06b118b5c741e26dd1a447cce0c374cd4290104a636c9e0f0225407cbe918f3484267181e32a081456846effea553c3125d6d6acced1770d028a317d155537118ef8b1f1b47a2bbe72e82f016314f33c677518fde82d67100e6215923c7799f04ac8abd5cd14dc6003541550debd75c43ee3565b11c0a018e9c681b17a0c7f20d1448741a77e34c63270a99a1aa0ff3b1bc7d9325831161ee90873fe135b913b0524e489ac2cbbdb431f137e23b746c6582bbab18c02d0268935608ec142a2c28a0248fca5e96f6eb53fc71d554010d6f32b3790e047c02605447023a4f3aaadc262e87755140cc65962c751fd2bde5805acab319fb0b80ad748d705db9b6f4da965b5e11ff3132b1829737820c0e5d713b5b3b6f80df32205c98222b4079a8b4d90f168863dd11d1e2675e9b9e4106aa4e702cb4511fb1a9dce2f0fb0fa61318e1f6b52dbc507d846540605ff4ef8b76a8c82cce56e2b1bd25e58236293d23cbf7f1edad0805f855083267efd4aa17097c1b621b0b0801777b5459dc1ef583875c76408908cf4c06e4c1162470d6c50fe5af0d0a78be31ff3f06064ee0a9992c5422fd4cd19642ef56e7e9a88f0f5fb4b146cd8b4f70627277fc7d589940a2991f79a04c80426e172f4595174a47c5a6911faeeabb46e18a98f199ed6482e03dcbd59a19ce77d00b15202d96e028f86d49aac1b942c9d106b9a0d222996420f189478e5a2770b8003b5a70d9d0f275143418561d470e207e38d667d0ab3e65ffae65652750dd3fd9c0a41d72394cb2eac23c4dc83c2ed0cb6bd50c9f54213881f14f9ff6817a399b60735f943ed965c33f15f796acb5e035cea591ed3c88e4164ad43047e55a67554c7c013d20ab681b2dd8178337eab2d1d0b4318cae733b50fbe1fd184da60bfcbc251933d40db6de73deb175958d80f59a17e6540be7723adab00b90beb63ba2a247f1bfd70dab7c4d40266a2f5ab28d6ed68cba05b1a41ab21a67040e26c453ecb641c4a19d80c517eab3aa49f5a0dd842e374b7dac1245aa1e221eb228ffb704d4756316e7bc5bf9cf0f34be3cc1514b29e8fce16c89f4a7e5370f1bc02aba608c7d7150d542ec62dad606d6cbc40296b055dc63befff3f5c7244aeb407d2dddbdb82a54f4311f2020ca336b8ba2400d490df2e972e32a1270d1e76a5e76cba517b7c24a40f52fd03fb4183d8894a0949965d9ed5424f4f8c62ba8e773961e359f6a3fc992440a514da6f283016b21571fa4c61289a06b17809e76a2fde7fa5fa5c49bba2a189e59142dfe7fb80cd2bc448ddb9c2cc986fafae298031ec49b01f03c90402ba371c84930d693941d106a9e5368260186a36fa08832690ac28cdb7e57845826c11ba1c683de91080ce20cc54fff66121d7b68720bf068ef094beb3808746e648b94d2a86b41cf6ee821b1e185f5f8446868a14162b399e537c77f34f20d44c84e48e9eeb691c7deef0172551d7e73e25f119297f95fc226b2c79c7165409d59bb3538c117f3d542dae0620def1dc96742677e5b22b6928cf4a89dfc8263dff4270977cfcac6f48cc50003543d8593a64fc6eff49c80a0f44d2cf2881523335100e445c43c82f7616e51499e1ae84cc02358728c7fad4e5fd483593e22edbf53a95a26aa8e23284dc551ba869714f5925f0b7b0f7caa384815ec356e332027bf305e1de0cfb704ab5ef07090d62e8f579030d17cd2202f36c11d38e239cbdafafbbccd69b6fb125ae7003076c1aee5034aec5655b5e3b5541ccc794f70b1784859b196a29ec0ef4ca8a1b5719ee4f21f585bda05e19a41afdea1f09e34d82b7140b9ae2cfcebc9c104309f55f39c547037c189cbc3ded258a65a22863e46aaf34f805315d637650505e2747a43f5066ebdcb1364745365b7a3e61de0816238299212b51747f4000194d26edcd0447859b11c413dff9a8510721d3a249a8c8790d4247a8f1ff7c05ba4507b6f54d56573ce4c65ce56d054c47c0e21813b93448c6b0ee63fafe583c3bb122f4ff24357257953935db3655292a16b435f273b12072857f4101c08e0b6a391770fd3b70e245dab04d5f98befc3217e5afbeaf82c5c250b40a5f400888088325d44ded6afc108510d2ec152d1fce13363e5d7d4f0d3137981c475c95c81b6f00dea41d9383b1aa501fc5b425d424640acc70c27b491f44aa1e590f55d7692d19689d20ea2a17246fb98fad82e1d1776d9c12c9903a96ea4daf48139661473a0029b0672e34fa0942a4777fdae8228ffb51cab6b97bed26c87c40e473ab8b25104a078595ed31adf79622e0a1f234f77e0eb2f8b9f029839777238b19e3a22f163090808799a117d6b11f8cc041d36b90cdc7afb4be366f147fd7b661ee203d22aca1eeb7c1557060655051bb68f0b2689e4d2ccac7b123c23f930fed06fc2c21abc4e657a245564218538138075c594b6c3137d8615d68790df51d06c4a47e172fc6410083387ab156fb63790813b9b427552b4cf96bbd52f91aeac6eedca522a6aa8bdbc8de4663b5ee06217b419dabeb3f1b48375e1df362b961e7771adf11eda9e46b04808f79a77d539ca9745378a869502abf530c929b2ac240555d0b109005bd21912afc2a9cb069a6d8f867645edd1485409d321fd432490cfb497817f02d9fe6b2df1294d619f6403968372eb4d226d2681882acc8c182a35a4b7e1789c86f3f41eaf0167c434b0b7d540ca425461bce61c0234c142b563e60756c2c83576580d7fca0d924a7101e78cafd2fe2ea95e92f0f629ae14634858578120a1c6bdfa3ee705e3afa39db12d6f1da22b834b4db8d7d1010fe79dadfcc44ad1d38ce8e6f24f8fd9e911ddca21ef3706c73392ec72d8c90040975111238765d2a327e93ef2dfdcafc51b09bb15e2113c75a25a00bee91365c0b48d676c81d7e2568e4d6e111cc1d5865ce04a49b803379dd86ade76bb3f0e54beda8f82bd6e625b9870363f08282a189b01b0ce9d1f43e59b2e4ec5856a170f86629a5d5b72b26fd31abe9d2e56adfa8a9ca957dd788fa19bf470e0b893e409f0b34157a544c19b51eeffcef12a567ea08f2e047341f38ba5f760507924ba202a9d74bd78ec903f76303dbfd04c54feb1b5d039b0ab43f87b40c4e47529df034beea45e757dc192a7e6d7ebe6190a1b0b49e5d1353a8009057273223cacd042f15beb56498222788c8b531cf9e7549dd899e3376e29c54dc8f9cb7c6af050a66c5cfed2a33842e760836bff55162b94df0bd6c231616502f5790062af10af1175102da006ded18d748cadbad222476849b7d7f1a0bdc35a8e171faae44d4718b31dba57b32f307a7c63a70737dd1df97c7702f165cdfe8a437ad346319a9658b870116830b6d0b3e38bd8513c569b028bedb8d6c69ffa719abb1aa42f5e167d306285d76574b14c59b0def39a22b9c3ecdbb5ce0d974b14d13212a4a08d5c716f79bdea3825d0f9f2b9dd4bcac88488a0903c388bdf0660e866464b4e1f9339492feb706f7af05596e7b8683d5e3198dd1636b6919b3dfeedf55b3f2437fb0632cfa0b1c2a7a1fa18b1b075239b96fba74ea3dc628ec5f9bddcca553fb59f908b22864ea9dc0187dd25eeec69d9e39cf031d9e72386fe329ddf070b201520f355b166d8f14b22d7fa01933e94374fcbab0d58b0b83ffb333df71f0875266572d733fef13d49d2659d805c9974dc6e8bdeeb60ce0298d1f1c04819fbf6dbd38360c1aa0770a2c1eaeb42bbdacab899dd4a8d970846ece7a0384b5f0a69796df23c0e41eb5078c0e6f05742b0f07575f439833de1b63eeabce03c3c41639f5fc580f32c28a8e6316e4a6ea9ec337b7f80658c107f7652b7f47d7557887b648a93f501893e94c2a2adf25a9d71ff6726a646f76790090ccf7d664b6dcf141665950db714e7481f3246702bbb18f2d537738c4163cf65276ca42a8febd8432c27f845978cbee7fa005438502615deabaf19ef819d72eb1514eb791790037264faf75cdc980a8b79c003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000003e118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000003e0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000003e0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000003e0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000003e29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000003e141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000003e25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000003e12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000003e2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000003e189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000003e1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000003e05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000003e05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000003e14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000003e03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000003e2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000003e1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000003e1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000003e14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000003e2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000003e305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000003e280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000003e223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000003e17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000003e08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000003e2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000003e0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000003e0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000003e172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000003e0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000003e05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000003e137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000003e2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000003e2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000003e2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000003e18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000003e0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000003e204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000003e0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000003e1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000003e28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000003e1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000003e21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000003e0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000003e0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000003e107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000003e2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000003e09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000003e24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000003e03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000003e1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000003e205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000003e25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000003e283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000003e21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000003e094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000003e0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000003e1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000003e2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000003e1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000003e1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000003e304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000008100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810400008100000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b93745c21cd473c4543de053e483cf2a13febdb14e3b04f69617eb28b6a709464b91ef26597c98da644de5a679547964bce6984d4dc688aebee338c978cdf3b92060b3dba37221eee0c2524dd7936dd581656bd24b4911d86fcf060ea8b5e7359ad5cccda4546bc97cfca6c82390b0be895c363d12c9666929dadc23c40b3705967e6ebbb958efe7a00375b1043bf0d1088c16f9ba3fe262cd0e00a0cc963959d82620c60b4474b576e770d245d8e6ef87dea41d771ac783a4eec53257953dba7c20104fbf5d8df21595250a53d52df0746e46bb81485eedddb81e47d3e298312909965291bd77a024d457cd76c253a4858dc50860e376fd248dc4312b63a6bfa56c1e6225231bcbcfce96df969dea1d6cb37ae67eb7cee596fadd7a8e8f17711e9bd596d8b176f6ad752b19b7d3a2522762f3f2e900891b6e929162ca57718949c4db629e7b040b216f9d8696087a39c8696fb52ad19662b2772b8549496e4e16050d66a7317b8096d5ac5d9140966d60192c2d5283d539e6514f92427f4e4918c3a51641c6a47e9622b1d56d07a759f270ba7e7dcf84eda4d6bea3b06cfbf93dc6223a5c38efe8388e1c6da095f126ffb665ac2d1f4b9354b7e630cd080400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001aaf44f49d0ffa7bbd9a87a2f405d06ae2e14a61003163139718cb58e8d92e622655da4205782cf36c6c4d76920830c3cc0caa00fbf90af6657e72d1c3cb6fc331e279934529af4546194d1bb4d09a34e5d2b17bb90f2bccb94357c691c8bd78d8767b328bae30ffb9aea7e73b884beb0edcd9054592868b0eb2ba315ea77a8e0a436f43003d777dd1e0ae7412b3d11f9d71dd238cba3aa2c6601edec542306f4c1f34d827c747f4566b26e57cb7b2553f3081d8f31db92963c45abaf696011b147bb2781cc110360b65a4645b6bf11e43d9979cdbf8416f6b1d87f68761463182f71098271ebe73378ec130815f1837889a6742653c776632d006e43ebe061d79f7d1c64d168962d4482919ce7af6560ddb350996a2677c65a576c7e9c0b1bd5ed1223dd7a4f0ef57329109dec66fd481c18c9429e01b913b3d4e365810474d305bb00e7beb992f13067569a366d0d1b1375a462af0355a45bf25bc82dd6255232c655b59fdc626757f8629d964731a0c5d11138c2f5fed7aede41693a1338441a818347fc3c64eadb0173bea35e9d7030ec743aabce81af1d27f44a7d6770904da91ad813f12136b622f6cc1b303fc3f0904470585a3c36f2380f834e4baa9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006f2f695d366bc6d9f748cb0c2751987898dbc559e60f841c9b000bbc70ec9143f68ed30269b3ae604f196893ebfbe707fe3240a1023414a58a253bf13b2e73a472c781bcabe966a19c2865caaa6cc5efb6d758947e75afcc03834fc4b94589134c91d06555f35e0be4cdaff6c2be8b74ff93e7ed62f91cac2ff8f74bda78f1d4882346914f189bf96edfa5d57fd8cdb5c5993792c7c4747da0411af0acbfef0df4f31282bc795aa60039b1db1a21df9067d47462e914268e5d5644656d72cdc40410403c6d0632f54b930808c31468db5e2ab8094a05569b6ee5880751d17e9fbfd9b6824acb47ef2867ea48aa1bd743e30cfc0617bc2241730e423a8452e5bbee1658f1464aa14142459ac8d210551ea4231c68d31617eafabeffcd1624b45f26716615400dfeb45cdddb71c292ef0322af28d7944bb3e987091bc48e732da255c6262072ea39fd741599cff8d6b517c90b1078c4b89acaf58fae7aa2a7cb014a03c01b982f3ff2acb3d1462b5a706e205d47477b044807230fa8672b3e86c0f8452717a68092c8122dfac6ff1f0f5840f08f260560766520c1e638e1a74f4b876e9eb44e29a033eb2bd72947482f0f39b837262e2312ee8295a9046322a52000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083f0dfcf280bb24a739f7f2ad71d1663752cd58f36896701a65865ba02387ccf21aa141e7cdbbffd55ec7ef9752613de497f7eb6a908c05f5b12c55e784415c2435e25a9ec7a630136bfbd31b398ad5b642a80f6ac1997c83b3be2b34de54dc3c669236034093586bd5719d2d205a5a3d80fd4de1239fe7bf69ae7133cc6b408288ad64751e945f1ba446cbde72ff43a5d8246cb51bebb94a5f9203ffa0cb27f647682c31003cb16e2e67c0c5118d054459b2f989898ea9d82fddfa17721e5460a3b8d124fb67aa8d4c40051eaf45a098b6894181331672ed4209e70622c68fab004c11009141b7f17cc6ad8ab076900463899d563d577bb31f28ed1de2ae4641c3fd926ac5aaf097a361402d03ccc4b0732ddca3ee0bc316d29464a6bb0eb80b072b6c49a82b50e19edb3034b79091e635825cfebe8835e74f8ab6efa113dfe9954f89cbfdcb032f7a43995ef4a437f361a5222716c415774b83f9778b8c1992618f4dc14cd56b347e2cbcd9ff9cf078091bd1594285dbf885a660190af7899459107f8423fb1223782dfd00fbe3f87ca9b86d32047054c9b31610f683a5cbe20e202290ae83b86adc5c6db8d89a640da4a0818380b227a8c5a7dbed966403a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f6963438fe17a37f512bb21e3af957b9571f599d7aa5d466c31f69e6f4833b56ce3d899877273582555bcd6628acbb7ccea9a77c3e418ff833dc5709c543e29718757f6167787680958b1337e057fbea31a9ce1a2409b51fbc18d8a3a42819e3a72e62ca96a9a7cded9bf59020affdd735c0d8b174b41eda68690d98577801381bf1ec3a4fdd8d3f5aa9dfbf424b97646cb24a5234ec4319661e3c124ac6db37a89b880c6d3d75f98ea5d0f948bd5a11e3a750b9c8d95a43d88303b2b6bf8cd393a077338fbdd8f6028502c8a868e19a33e45208fbc961faefe134f750572b9630a84af9294d8df04f304913eeeebb7a78badd3a0e002c52473eab33552cf242f0e3eb180f40c446ea91d8df3fa864bc3525dd5f413a851cfe595e6f0cd2e3c21ec73e0c4970d66cb55d48c5e5b69c0ceb01a8365c10fd81890d967e8f434b41881454edc5cad7fee0994ffecbede5b7579487851b072da81826bc26c06daf8f3a89514d16c61c70d816f4c87915788eafb1c71f938fb0784c50d617abbf1e37eed3d965844ddb0d809ae5c86e0459d55c8ff12af137581f08114c07e21b72c92264372c455942496af51e8b463568e43d976ebcc05a5df3fa65a8804a137a600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ef1eecea24ebe2755580100ff1b51fd0ca8ba19b65cf41b7e97ffe9db9cc1210e8d3094c4cacbfacbd4c56480d73d8aa6e03238f17453e208bf619a3bcaa9820005c4a480ee76ac60b803e077c212945003f1df35da6c1d3b8b6f81890154e4696eae53d3028b243b5f660a163d7cb71d6c527f0713f04bb06619fb34d00f0104f44a5d47794ea026c86845a0058252c735bcb808de4118e3d0c12f0100868a83a7e7b992f11bfcde7ef0eac0e7386e11c4256223e56bc307d5773a2e07915abe1382578d226c7519aa867ddf7583fa4fe604350aad1a1365efd15dc8248d7f74eae449b054cb7e74e559452082be08f399348dda4cff1454f8608f7149783346a8a4e27fb155e5d3ce1c93f59c2ab38b185230506b70df660f20c5f6927d26c858ee67a30252ee7af7be3e749cd03ee4553a9627adeefedfd50380c055661216a078733ff879a83535c4e68863fd012a5c17bfcb1e6f45f8e8770f27ed19aed9669e9a191288f1271924054661592e4723345ee723b0799cbe29c6e32a5c7ad1fb6d7f0fec931bed8ca69d45952f57efb1ee85ed2da00f2c82d2d66822d0a4e22b029864138bc7094ebedb52178a639e9889861491a36b0e2e0c0d8e990fed00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008da0c3f72f534ca43683df964c4368e459ba4cbd64325c5e20f242c4d9af347355dc8c7d96044c7ca816cdf0bac04b32e279431662e018aea9e80dc7fb621813a74caee9f36435477fb9d45dffe8e2a7a59cbcbea709c74d86310cf5af2f6211b071ea887c8baaf7e8d36a928ccfa06339a794b6d7d5fa9838d3a9ed456977d5a8ae0b5f737e268826067fa8779195ff12be516918231e23cc338de73bbec0f6b4cf8e2da6c38458750f1d761a98a272a6ce7cf59fc475f1fe7612ad701801fe84fa8dc953b1a6f73d2ee75ed95c807cf4515d1e9d0b13acfa21b7a23834f14fb6266995d8cde9dc0e12d3200fe440bd90d9a8b037dc3d689067750aede9c26723096f7396160c24ee78022407161c70c4a0fb05ca60c0461623ed46671da851e5b7aea5f83b106f6d11ca7f5aa2330b8bc6f5b5973aa969942b38357d34242d97dd5107208cf9745248dae5c260d6000c458f140e6d2792058d9fbb66ffb13ffdce64c6e0e1dbe3da1667a77359be173207c2cc3f7f990426808b8a04520607bc2fa75c3957b5414b16fd6e2e29dbe4542c1e1f51a8c3883cb7fccdc62f1b96dbb455c285e7ad6d2b810d26b1ce3175a0670f3fca4222db9731596ab523864600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a954250a90f86718085c72641526f0cd7b5ea786f2bdd13bdf2615862a66188f419dbd93141b01afe056887925ed43a242676043b3f2212423a046e411dc49c73acc70f8ec43a5eb6884ed4aeb1191bc5f2429731fb6d5bacf0524d3396e23ace30dada97565465c73e3f14e93edbc791bede4113751015eaad28f88c8d33a0d033106b841944fbbd166a1b0cb0c5598f5c8da19bebe818db32677347e7bb238a6de7f53b234d1a392ee6ccb9c5eaa325a7bde12b0f1005067a408402677d328ccb712b26ca492fd0be508253a8cb457c9efab64cf573e646743f7b2b978180a5ddae3bae2a9ce389e0ad104dc695acf1279da7e7802476e9cf0f2b36337154875c4c09b0074fd46c23c86386f5b2249f3ef00feeeb45a9fb6dcf7166b589ca6c64357c45a55f8a5bdbd95688af9be2c9ff292fa4e60617b3d9752fb77167afe02302315a67fcca3b753e2d19a93bdebb5c52679d41b5e4223cc34f18bd3ffa30db39e819b0948eef715c17c99a11621ec8498145ff7fdccdbe226842ea861d06c1f90d7cd2489bbb9d24b88205cf0fc04ae9cf93fd95951f184a080b2c409c48e059b3696c7908e392836e0155188850e0e5de8da79a81c2e0479b3010a8990000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6142ceec7f577d75475c3277189e8793e680328e3808a56b86987d732af4ebe7d4b2e5d34af85494d23db8f661a59c5297bcfeb2e16b06cf508bbe183a3f33a8c5144c4edaf7d8024bd57feba6c797ef47519d7eca85b9309fc7b9613ac49e19bdb09cec86cdea89c1c85679b0fd24d66dcd6a73ba25a9b1b134e697614ea073b67fe2605b2bfcd1d88cc63c09666699773d65297bd8bc7303544812a4a911a768d2607bf612b5d255502ef1f0094174962da4a1dbee5cb9dc8b32149af73098d477e684325c815927f26ef4d57a28687d099d16be7ad6705deb93e5506c22a5f74a791074bdd00aa68a352d47a656a630ea4e526110053fabb89a041b82b1c250667f307897769545fb571ad70a073089e9a874172105969c07dbb069d5ed1f1966e9e13d204425bf95ea5583fa25eb68fb15bac8cf49344f9a8a34af220d8ff4c47f2380d0e243f241a8d08e486d7e86d27b7b08c9840aa2422a7cb86b247cf0eea5bc764ee647a43fc2c18abe55517e0a142adc28a116e8653509aff10909051e69f0daee692ffc6305a668051298cb6029aac0adc28a48a1a4ba1efff7fdf23a8eadf83c77e082d7fd7a993b52dca445c5fe816f9ca289f159ed10b210400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a73e011dc62c1847c1dbdb70961631a0a0dd3033e2ed0854ffb753c65e0577f556d0e042a7a37f8af46d27c4eb9f572054555f4aba9c871417a7aec1c1b121e57e3e3eb09b7456ef183deaedeb369236fd40b7da872e01648a57abc409f6fb38004c6138dc1d851fd38b893136a1e5a70420066828f2c3afddd4c6d1205d1dbdab49f6c1b801f3f3efc15de68aa6f248685e5bd543db5b8d676cdbb280ce1ede058abf203a50303403192f3fa2677557f80fa86a85f6c44686be3428cbb5d32bfe719df9ba7cffb6920eadd322e17870aa76c9a62de31f8df519426d22db65441fc0dd673864a4a0d1f9c1975915dd0beafe1add1a80db781e05c8c71dd222903f6c461918ed91f777b96e1e44ccd465d2a379a245bb081552ef539f6e1f747a54f67ba22d50560ca6a7432d9790635b2aea23879ec8fa31ec75883b0337da60867299bbd2aa545e78702f485eb2ea5cfff0354ca427fb9e48c854fb2bb96d324850f6e1fd3886af6293fa4dc47a3cae5641f3bc5aff2cdd97c435d5ef17c4d15aeaad276e84c0da1722de896a85664a24e5fe152822972d21e0c5d6b5562441931d0f6c938bde6a6ad60e7a77d0aebe4b1155e691054faee6dea3ddd8297be00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008500a6f89be0c736ac61f9a4b523e35beff153d9c9ea066af26246e156d37df0dbd500b922d5d76cb230da566f0fb5ddec0d29e20b661f37f12ea678e0493002e87b2a609c3d02f22d53b30d4be5cebfe8d0bb320a3f27364c103720e72f0cd253dc257fef0206bd11c241d64143fe7cb4c9199811bee82e67d77615e78cb3742d61ddb3be4d38ed3e277f7a93cda904d733086249fdb9458b3977e115825eea0e86fbe9c418d1c4204c0c114f9acc989c1bbc213643b771ab9aef81463f42b57d4f8e8202b7010a4663e7881dfe7a138697275bd54eb21590712f386a2e3d5fc469a5d544092e4d747227175ec54af34b20a8b936f0278f996b448c747ef62a28f559464de6add5a3f77da8c70d22b61fa56e602a36eb231b31f11557ef029d68e2b4bea0bf0a2215ec4c5a1626e369333fc2ad3db9a578021252911713b605752a8b3daa26f7262cc99fb574ab5f578b639537a14a0a1687079bbb1360f6bf216d79f305882d11cc88b7d4899541e072a94f06cb79eba378d443b3598dc03fcde7d6216108912b44eac36df983a2853ee7dd856707f2c04b73373a2ec54e702a7ff14658906861cddb4a958c1ffee92d9a4521435577d9c757e442fcb31a290000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a74918cf27693ba1be3e14d9718f1efcefa52c58ac490bd14b61488b2b47e9ff246ad18038f2d1351972bd61c4637bb6193da730694bc18552b74ac712768e904d92450502a462619a8b38076433eb01e875a31f792d15081dd918bdf1827898e67f4d91e197ec76cad4d0854a5a8ef14f8e471954a527111d3ee6bc2f08d23fee3ac31bd5aef65f8097b3104e10f2eaa7629c78d90a94e870a5b8f63c51a5c9cd6e0728e7eb26acf46574b93ce8f9c18bad6d98afaa2cea2ae0683f35c1d73acae8cb0989559d9f99a8baf5cea641af302e71132b7d32d1b89b560cab5aceef749f476a2d876cff169803e32bd438ba953737f1a08b5661b3bc9c47ba5ac6f725da87ee9e2ad114ba63702b6e66c045b306bec22e17260b86773043e1add8dea597cd025b6d00bf9ca4a11d368c385a2a2b92f55c6ee4590d0cd691cd22bc1288caa17ae536440c8ef42d4387636507484f1144467bb1165c0ab0c046c6180838573439db2821dc6b4ac22ab241e383993ec1d1cf6293d15ca9cf7cddc874699c5d76362241245c6c52a0f47a03d1b31d58a5f1c4a11a5af9be910292fc6e8979cf5dc8a36bbf2be99a28a44ea547247ee04ddb8d870250303048672538a6410000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000126994bfa11fe54284fcdc1de332e47f2b8802547dacacaa45ec1cd2603ffac16b4bc9e8134655ac336ed712588b49503e55ce7f2325a7c3c97035167ffc7be91afc2abb74cf7be9621dc788402f72463b0ca7c9eb38ca31d1dfac6f679d2b4d1faeb0b915159255f2abfe8fabdd43633cf442c15b353a5430aa9800c5563bc6b0fc1b90c2a972608d870171456ce783f5e07e3aa7f32fdcc80a905179ed744016e1011d972e43b4c9a3b45308426f56275f3373f0c1928c54b3b66d3dd88bad36936ca89a926e70a8e677564dc1e584ea8b85f1e84c342d860c2078f19198461c004a92ed481fe03e5060b49dbb20be6b052a4165d72b35eae8e849bb88c7eba49019dc13d49ff16eefd7f2acddb8687e8386998e9ca1f385bf551e963ecc7ac54b1d21423ac7701a0a7111fc272021145b5d88e488eb9c77c5fc9a91f34c972c9f273cc49648d6d663128e94fc1072e0e691af635cd3f3b0b8f53b9970b416744cdeb1f0c4ee848741bda74f031671c28c612cf8645038a7263033d63ca8655e97933750399b82ae71724d5e2581389e8a338f1b3f0a6a2077569a9cec11c21332cccea4814e122afce9303d0d3c206b3bcd5d4a74dac0e2127924b994daf200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a14a691a99821804af3358f0a3da35aec0088162b005fa222e7bdf99de325083897f3f8e1927c3d4a7cd42b6e42e549df6b99540d34c4fd998c2b6656ba5dbe09da8cea816df49c1cab2c78dcee0669fa0c81a53da6f218efd517978ae9e9926558d32bf78fd91e0b5f0368658f22dc9751b5f90271236117e84baee091a907e81cfcfa06c6af21f1520cb1f151c8e028d2a378fffe4c1edaad09b2d4fac561ace16f79e6bd84fe1ec124a6f45226a3c9e3265b28cefdd52d6e9ad8cfe6b0a47b670ed98e1ad35ab4cd96c8d7deeb3acbc859fae3f195e166b343e025ff676d47f23fe57bc6c45539d525c7652c32cdba517bf116099b1f0155fd7bc4c160f6776ba6f7b0f35a2f11dc383be0e407f8619c614209f1752fe93113dfa8e7c17fe4dce1a70023f886bd21788defb1ddc7f97b1120d2e6cc5357c0030c61afe85bb5b145c0f247df8bc988cc7f3fec09f47485bc9c23db7a1223e17879bf2b52787489a01c6c20191ab6924ebdab16be94b03b2f937547e58a0ea89474c7c28f153d46e47e724bcd1eeacf2b691b89246dd27aea6c35229a365b88fbee3c4395e3303728958d3e3e49b6e0357f0b7788f42dc89a5d48887684e28dee4f77266de500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e832eb4989b35bed041f8e56bb30f3c33e777fd3c7059733d82240224c43bb0152e61464548d6e912f1d6ec1382dbd020c45877e1ff911d27a6bfa59d7e182ad5944266d46b55916c97482b91b15c8fc0f9642459734c1aa5f219bf9467504a09e883b86fa968c4f7c2869ebaede0d995340cb64be7468712eaf6fcfdb5502e5f893c066a359cfa11c1085893bad923c346c1d194ea55d468e1128ac27aa1e3934bc7b922c4c7dcea8087a925be7b32fb3b0d7f2a27ba1d03ce51732879392daf95362eb4b7634382b9795221ec35496f6b25656cd622a2cbdf79d742a34c262143a84e7ad75e24d5b887c19afa9ee8d73cf43a33101acbb8b16e8afc20cf463ae22c1a08bd71a7105c21933bdaa62eead1548f108da491c6ee2280abf100e99f18a348c746760108517eb505fedb7815b7475654826eadaaaf164d8f996063b1588b148f30bac3bd49f4dec271edb1934ad8a2e8a2128995851acc67692df5a031bdf62a80cd139dc1f5b3ec97f2e34710af8626d31b9e4bdb7307f32b287a372ae9a93ab57ec43806ba4d49971c9c1fee010d40f3ded3e7a47a775da19ab8e09284b889ae2318d4976dcd4bcba6d8cb09e720ccd95fdc4a78bddf775b525500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c761a5875a2d81d71334d7d9618bc87a3440ea5135b42c2902fd72786f10ecad4e026b80aa6689795902e8c6691da46a38c54e04db4a69afded84f144246425eafe9813d84834a50b73df09cca75dda4b365ceb0c277ae221fc90e0433f065aa1d53c59732afbe3214b0b58889eec60b6b2eec8fa090044df8d53bfad3c0c47c98e57c158cc5f7abb7e31fdb3521ed9d4ec99b5c33a67ead8680cca6d6f861da3b80b1a3341dfc2e655275e6b42260f41836fb54d979072ff4441547248fe05d508aa8a3e37296814216c7530e6040f2d1443a9e97f4ca128bc0957032f917dd2fff790aeb4c670675b48bd79e18242e39a143c572365413051b98b030827968849cbb31ff9309c990fc1670eb5095d71e731e23c9f6cdd74b86cae86c23c45c76efed997efc1ce3794ceabd9421614e7c96233e8bc4cd49ba26bd18a3b8bca8c40a9e05236b203cceb45dc57ed1bafcea9204332e20339f6713b675a482016e68d4bd37e4492eb5de3e75f28c870c93eaeeea6f0bac6a6453f5f25163a8bf360f83cd2aa6ebd12bb9b88ad489b5ab043f8750b9a288022c3ffd54c5efcb2072d53fbbdd356409a8b637d405c1e6d6e33ec5d801e4b347e8c4429b5214b59b4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007d4419f217cf55a60561c57fb20b99acb5ce798b7b4bea6ddca05702ef88a5d94a723b94d2401f012953d006f9bddad3fdd25af800cfb3a969015cce6ca2c3cdc134fca2997e6d4cd228633ba5878d43d2bd02dd8814a45df5094d6c36913cbc5a0de530f7361e2a00ad133aa74adece7d6ac46d282d885f9954f018b580fcdb4b25d0e67ad3e6890093c29f79d9e16ab8c2727dfe55850a875d84b88243118b689cb2a77c168cbf131c2c65a4b29cc3d2e9e2fe96d2650f9f3f4dbb94bf017fb55316c085d0ea589512b4b710f393a595917904014d86c470f64e7534962256ead8ef22a3a7689a979dc1c31717f5c1754af2ef226c73d2c744cda0b61dfbd021ec2a05c8cb66c5c97e6cc42d2b60e6a4cda3efb48c6f287da2654f55c34972730375ea8b7e1870a7d21a4743210944f600fe81bebaead3aa045765559ef7bc724762627fe7479649b2730fb2ff4dca467cff3a1f86e1604aa1703a08e2faa3c56deba333a65864087aa0b01ee4546e9a6eadcd3d676478e5eb8cb102f624f94aceb0029cc25684382b71ad456a9815eb4be7899a755728b6ee2ffe8a4b598a405edd3e709756baf1e9d12ab534db3cb9c792912ca52d235493cf206a1f21600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002efcf0737c931c9352b983fd8c8102038598981cdfd5c174105b2d0424533720c27a02a9ecebcbd6601aa458d576f0a8526668d5ff49c95c5b4a89ca3399c2d75a8ca77742e0ee6ae850eaa705c8606ad02d68e601742b36c37314334146a5ca1a54be88611f646799c37f5f60f6d1921eb2b0b796b448338a362781f09f9528b336fbb76e8d2561675911004b0faa3b85525e00acc420b71eb54f46dc0568bfa730bd96fc1ffc7defb63c1a90ec90730f256e970dae3e32a5221128c2eec0d8724afc7c168d985cb4da9c6f7597b47c43e17cf0a5e3273acb56763dc6ad0888fa278ee856dc649082605bd0a1302988541e5fb28cc866f8a3fdde0df90defe1738802dfb246fc51caad5958d23df597742e29a688e7e90c31e721eee309ca4524ab0484766ce57f8fafd6e748991f233c9038420907a0555fca656684a927a4c3c4de957db48391cdb334c9fc1f598389ab54fd0848b3dcfd61df5ffab97d7887799209d06e9f79fa0e2d864d46c69e69028a963cdf3c36b5b0bcd884a752516c97a5232583afa81307e01576a11c5e14d60097d57340a829c23d2b708e5585d9253c25c937fbbc945c198382a081f0e9f3df0dc3b49fc826d875edb00b815100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001745ee72ef03205c10ebb9d2c218c454caa5e4b45b61381ea3e8a23579a42252c61ece2b37b846c12018c61bec9f48b65ce2d8a9a1978ec7f745ddbd3cda33044f38c982f39efbb7eaca9fae1a584e0bc38a3d6468d0d0331cb1278e9ac7114ec9aa42495ee041f6d7a1cd82b7517ee48abbcb55c402e8c0dac73560c1176e619e29c3e5093433fecee5c7741d1f8aeb0935afdaf645890979c075062628c4d92b48fde57b4210f889f08cea2313e1d8cb6c40f6616f1fdb73e0e2581421a0a7cd526507f1a84476ae2e072f8644ced80dc702bcaa47e9db1f072206ad34f38e9cc9a343f57ecf9f5d420ae0547e2e66146587fa26c662ffe24ca5410b08b87f39aefb6a041840afee1fcd03bac8392f76fc2a86f9f5013db7262f964dd4ffd280c778d62b229ee7b313bbfb17f99f4f9f8665007b9e5b08e8796bd757153ac67d19a23ae9679b7d93424ab3c7fb819c4d6f43f09bbc415af97b8e90e8ee084ec2c9f912e38281337407784e0dd6c6377c2df42f7baf014562cb8c56b8b2248a8277aac7859a618e934c5b2eea698f772e9bebcb086a90dfb88e122fa2ac765074cffe433a064a8fdf29d4c96d1a4b841243b20ea00a95da43e8f630e0a6bab00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000215b83a0a82b1f1ea0dfc257d81ac249b16059272c8bfc6685c33b7c06ba59a331c450a873a30123996fb995a32257b2271400b4ba52a54771e1c003c19a3c5f0ae750310c31ee317989b5de0d8999bfe0f4241ba0eaa3e169337fcaed2f6197767a6fc7e68d58bf7153b2a192f9fd13e6a13a6393a835f6df6869e51e6cf011adf3f64b53a28827d3eebf5ae5d4613f89150ce7a172c411ebb22675b4bea86cbf020ec25398f23e994a9d9e77004fea639eaacdda5f44aacc52c64bb6a2b6c2cde40756d7719221cb585ddd3be39f447f42c7184589276a42074126189707108189a8115fe76a555cffe66f25fb73235ccf85ad91e3b6c6f1ba5c0a0620249b4b65aa2bb6665ae8d35387b24a99783cf2915a460c8ed5003106f98d3e95ecab780530170ead9d46da5e937708345f5d25f17084b70d7cc40c29885c8e0c66cbcd3f5ec683005a9a8dc4ad38bded3d5db02fcfdc790827021200c7bc58a0c78df9da67447495b52053e3c0eb750eca1abf6d0f3a16e038657d0cb2377b78af6cb660dc05c933cea42935ba679754c03e0c40263c907d9776caec535b855c6870af33a9a7bb1c3d32a6c202122b22fd0d1311c54b2d83a0caaf7806eb28ad4e6200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d7eea9c5c1a148728e1b334de933c18a39b8a191b00e522fa11cd12eccef4511348a412ff040626dd5e64db5b62c0c830f84c5d94291f0c8d170ceabe063c32235c36d5a029121b234ac581acbce8cbc0c2c164f0197f20968e6ed38c0cdf925dfe9eb44cf510dace083163545f74072f3c21e405212023b1407daa5ba94aa07bea08a703d1794974adcd820000a8538c8bbfb149eb5ea1a198e5f535b8f964d177dfadd706b4bd15e9c2846fcc4abdf19e9c64d09bcecf547fd630e50cf6cb4dd6b1ee1ed9c554187ded6c61095ead69e2f0377fd7ca54523ef0ec17b5f001373128e9239569992aff7082fffe9081e6d9c51afc624225013cf82150a646eb47513b1778c24a1538b8adae0c24d83a61c9088b79a04e3aea926808993afef18f0df14c80909fd10a11fc5ebaad31957e60cfa8f82d5e89cf5aa28ef4c114ef4c6b6ff94975e9e137dcc9b39dfca6eb7dcfbee667b134e3b31ffe9ad49386a22f237ff8fc7b9df799ab649397e1cdaa895411013a7d77faed2e8aabb27cf39623583afbfb7b977670195df182ad1f80c3223aca1dcc0e4ffaa539b3ed1ba0a1f1902633b542c5e0bc6e9b882c8b42ca7101cab03ade6944315bad803d24f6a100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f0077818ac67a4f723cd962269b2f9d2985c00bb4c91ef4c912b35ca42771737d59ca379e256263b49f4b07497604cf871eb28308e9785b1603a137ca7db3985bcf1f7d188c7d3643fc5ad313026d62d66da05d34f48dfa80b7601f09d66f439e179ce5c56d97e82a17161abcc51cace7e2283243f406706b8c77d43fe33e895629b2c54551f2b019e58a5a461f6fa78209cf0eb33700cb7dae05b329b1c9fbae7418a565d47e435aa2fff199d63f6152b87f49b0cde380baa85dc6acb010eeb44a91c38cbfafcd839c194e4c695f339d324b3ceeab16dca7587327265041697c90a75f817db6759da6c0b8332f5ce1330228b1a44d593bafc241e691d4fcd8b61938a28d0afda9c90f84f9aa51a6adc3214642197c08d6aee0bde73befa04cc05128368c49e8fca5edeb8bab9e57c6215c174f87a833af27182cd08fa57fcc65c66dbee41d78d135f86672f09018ddb16b1c9a5098be790a8cc6dfa2b0ebb2c1b447cbeed5f4d5f7197a2c8f2ecd280e803b19577d7926fb414fe1dc2d6aad7a5fb416ef79647b3ecc9a24e77025aacd3237671b31e3b77af7b869c2408496b31f41718b906e7d700c4750c6dc6bd22fc6da88012c196e8d36dfcf13cb1e80000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015f2a2e2e10700f5407212a205ce0855756cb26330a9bef419193bbc6b15ee7466813ac70d1c8dba4ce5efd96f603e272e626691da634546677d5867f4ed2ef943d1dd2d5ca9dadafeab37ac2747e31f8ca46f915f8e4c411bb17798ef87a3516eb604ef5441d07cac6732b6e2f26f5213cc3335ed8ba78885a651a8eb817a8fe430df23cb64f458807345e8ffdcac4b9e1da4b6353f28cb8160cb63bee05908e3791f01db4ab50822e221b3be1e252505fabab7ed20aa6037807f886a89af43ab6636952ef665dfdc32738a8e357cb7b3bedf7d8c97f27429e0f5c03335b6267eb7d3cfbb532119769365a56026e021736f4e2ac4ef0af5f66afcc91a16364305f88d077380ad106cabf7cb05fb99c2a2449761ffdd0ca5e2e30ebfcfc62c4ca79f29a3e0b1e98c2ba3fd74901e1757b48b9aae2665ab969d94f53051292bd20599058aa8f6025be852a2e7247f981d2dfa4b7f156a396d55682b1fc66553659b6adb96bd006def0443c2059389eec77c301b964b2fc54d26142a1cf0241f1ef8568e7fda18f633965a6f4aa2609060a7394a2eb25691d5f81020e875fd726221b2fbfcde8a3edf912d8d17ef15d6e39ee968de343490e368d61db27e18086a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a76ad33853224756d1cc5309fe24b1f9eb72bb355f22f6d34c7e895038c3936fbbb34eb8445b8a8e4a5071619ec960b4a72ca54d50f54eaa9acdf3cd8f399c211dfa681e106c7c716c86d47850fac15d7d79bebc1332b3f370b1f09a620e8ea7f95dbbf5593709441b26c6e2e9f3285829c2d9e68a3e0884c37510cd9bbd90d9824891edd5fe6917e984dc0eb669eb32d02a6ebfac60cc3ce9ddc2c7f27f9da35ead7828b62ef69063ed6249012929369b5489914d9e68941b59b18ea200bd3baa23762c4b6baf29a6909f042164daf65c5469cd0256980beac0ae5fd2e1607f9d1e271dab5bd45a7f296aca12dd6d36cd5c61bb06c6bcbe8eca49ec5ee4f130c9a0696280c09cbdea414486ca5337cc059e04ac2bd5be3329f1f6a53bc1a7a4603657bcbb66989d9bb04962cf1ee62d8a4094d8c01bce03e9f491432c2600a61bcb3c7ff02c21099a4b2ca0fa9aed4b470e5e069cbcb90ed20e75e7a6766f74917d7e2f023b571b799b06c9a31b0c71a33e22df226c45ce1fcc797a667b4c9f0fbf2736b1f95a134238ae76e34510d38a94dd1b443c44ece18d70a86452daf5c607312a850f0cc0cb031d4ba4b60e9c7e07cbc716ccef8881d13178b8676a960000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa681d4629ed1a6606a9de32ab7166288191e45270858bc5b19b3ce27b9e626e063d79d181b344358b0b5d176f7166e8620edf4dc08373c216e76353a48153e4f10b2cdf3bd941d6546463bf384c1be22b1d513d65d4f175a64bb2b16822c8a5a89891d7c2c433b6682c28a55903df560d0ce4452def7efe65b3c0ba824bfc2dcb9eed948db4d012a512cad74b411d91c2fd8fb32c5c45c09f33f7eb7bd84c8c99d95224a94d6d9f3ca2a1b28e6af14db8b04d6d62f6f1e26643e4fbe2b51374151ae409a621ca4740ab4b7133993cc98d3c53d3658fa213e14ad385a6948d9c080c546833c5b7ec74d48455b11e41595fecf353ddaa4e949debe9b5f478a97ecd06c85adfedade6f3735e14d3085554d6878c43d998af00126c7c1710acfbb841fae46a987a8c60d8ddbfe5df20beb8bc34db4ec0b548f43f5870112c41843c38e0be29bdbcebb7b676e4b49e3307e54d42be77cc935cf20102a47a44c9da8da47a6004b87b645652a4248cc1a2e6f80cdefe16a55052de6d988b82f618715d110a22222b339176b3f8115f74e052f116e1bba6c2bc698bf60380719398fe3d52c7e318b5d5560350ac22b70c3514506c40ad2b7f51322a22a011a7d5971dff00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dfdbe6baf0518e3797d0a219158c29eb75bd690e94a1b2081b4e4ddb05df2640323d546e6c73834aa7086822b9d5be0043cc353a0b25e59ce51047680494bf47fabfb101058c35881ec9a0bc2734f253faeb9bee7a96ee6827f73f75d449f5f54248ca29c89b31d719c1d3becb37b6526dd5bba51307c94eb97acc0ca68d8972f5cfaef93e2ecd00ac5ff02ae28650842496d0a936dc6ced217cedefd269aa9b585fa2af2ba196b83f04ce8b23689edcc59b9a6168ad7e1684d2432efd90aca019a1f992cfe8ba3b8aa55195437aadf902a9107ae2161a868217f8c27fe5572da943eab5cdb2264224af936310abb4aaebe4a67e6cd3a5b4c56069b0208636f61d5e595815244702e854320aa351a80a1812cddb03ab52a565078aa87823b36ab13809a617fc7bbc9506129ad848f5f8051adfc9be0abf81033a9200f8fd8bb4026d5d75871b652b7955bb8df2684bc0e847f035b2adb2e399e9a2277ba5c94b8dc2104c929debd1e7a42b9b8cecdef7740f2f6d52ea41e9c571522b5895409039d08ffb74b74d80695f2ffa52b6a7c190c2ae569354b0d19aae7d1c5c85a02a652fe1be7361f93f7edb71703a3b657e0084e33644012bfb48c07200f3c04d70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d500394ba69d69ec416ec0cb193532d909cb53c69e7329bd399049b91ef901d1cc1984c55bfcd2270cf5eff562b666802965f5ebe9c21a8d309b3c67580beaa5e62ac1177d22e0dc9fb4a2ceba9f3c768d88857db6f73bc12808b57115f1ae034803d16b3e130ee309a47eab463bfc6cbfd8f6ab8ebdfa035c2a3035b58a5c997703a7f06ff92c8aecc507461411492bfc54b8a70b927ad597f3279c04101c054ddc7a5dd2caa895e369a8c32f7e7a81a6f2c7c1d72ddf00dba0c8f2a6ddab989b150452b3184ecb34f5b13cd0ee36ebd1363cdd99bbf35f38cf08f4bf6627016866ab51a7c9ad60952a19b288bf65ff4d665c8b821bd118518be82a1e7e04b338b0ce7e99aa0a2ef536e5a357fad0233548baffab95e07caa5f45d1185fd763c9c7b391ee6a0f662efdd6779b0c7456c9a0788b6113c28c58e9984d9e3f1b42730dd84cfc8cbda5643e6768c3bf66141b67c7476f7f8038744d7c8d373b43bd5feb077c59272c8a63ff871a2e69474cc6b64461f8c842803593daa88c3a2ecf812c3f2c30bfc1ddabe62ee7e6828bf0088451e13dda48b6f5a397c89afb8980116c5ba9a430dc2163752c5f2fa91dfc0aacfc237f2a4808ea61578e502e050000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af684b4de40b676ad540ee93e5d96ae90c6f8271d857db24c967bdf39a95f293fe27be8d6eed91b6bc1b1fb81fbafada683cb0f763674cbf25d1e669e23e352b55fd6bd8b5786c79c8905e28350eecd9f0ef0635e73f7ca2fadb9dfbd0f1be38a76f87601a53f553195549ddde318689c52a3a0b8283b54219565b0edcd2e84ccc7554f23f4b10df3e275b51b75df398c4fae73cd5305668b65598953eb0fbe38143e71603eb8e994c29c943b58b2c2bc2c4d32408b5e5af219001211f172e101752ce3166694791fed31fcfd4efb0724a2a625cbf20514fbb70b1c3f2d574be2012da11ccd7c28a86730b9b9d6646db0882401f81984b024c4e9f8fd5e528250e29b9401fdc850e2545463a9f52bc7a2746e93e12a7d4f85f0264a8530399d42299bb16643950f80501f1a2713283d64de53cf4fa8701b9b2d696043903bb5a732d57408832a6e5fc608bfe3cb304e5878cd9748af376d471efe70d1b419adbc4242f18c35f6b271e332264219be65a954a79f73a280086392872fdd145f0be3cc9e4aa79d020344d11a1c5dc96b5ec3d3da370c7e5ccb10d6ed6ca4c0ed2dc248b113875b5e2aef035302c073283e43b097daa5b6aa381b5f7799d5e87cd4f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000108c1397afc996573017f2ddec44f56970d8bb151b562de698b046dc732c8280cf81830f5575e26ecd7ca796cd4b6b32c5cb4ad15889eb0e5778c4975619027004d4ab6a13af4fb149b208ae18f5711af03a091866e6a3619c07e976236e14a4b8fc33bb7b73e8f1aa05a8a833625d1f17346c423a3f6efb2c39fc646f71cb26337e8d98deab08d5cf3b6b9a9a24b2c09e2633c85cc5afbf6f267455ef77053dcf7a7dd5c36a756a640d44576f414443326f33f219ceb13f3a998a3a29db24cae6032946822981ad6aafae39d703bd3898ba25e12d2cfee7d49842c3c98a80e57ac8f0a0089ce14fff80f77b730e9ef682008435f7f1bef7bd95d4362bf88c104a95102c049146498898d03b10baec981b3bed1bbc17e907c372c56922f0bb27b034c3351ba37c522593c3ea848a1e3b2ea8684bed3b8e0a9daf4d1fef0eb2672151a69e1d5d49df7cd70c150e2817118acb945bc3d77cadd61029b4abe539b597f42045d32c871fd527824ef6f91a82bb9069f7b1aa579df9a02111fa247ae258f5e8889738ed0e9ffe9fd7e4cb4bfc1aa5ded77510417d20fb9f1d5f5d01ceb38b1db9f31a7ad863a4153cc48ba1ee20b49f93374a1e3cd4feec4b8a4df6f000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009dba4ea792e833be7ee31b2ee710875cad90770e761b5781592755348cf09e0be81a6bebcbca6896543e0936bbb12c0397807616302d75768676879610d79d8489ab1c96e84f634e6a64ce39d3f7bbcbb6b091f44e90da979b9e5d6c7a9870492c7013615371b46a92110d08f18db247f6ae39f539fe1b010e80647384177682b8ec9a5950106474098cacdb960da8af3f90ff3469c36d65bb0567ce98a0316dc19f27be0044a8875c9b2b4eb9c9ec391bfd084f967f09590f6ec964daf432ee76284b0ef2ceb67803e35ea67708431fed28fcdc16e73a02483648d66338d4c9d1c673ff52e8629f2e0541df12fd545b578c9442c7800dec4950989957286ebc6e7bd8d0f0497939307475034b87869b2171e7a067c6f8095207f74f4c2a56bf73882531303ee4c908da36e99855774a5587a0db6dffa6ece421de5f9a088e55c522ebc86504fd975b1b50d5b4b8006d913a96341f89db655a3e811881049a7749afa0622c49521e6557ca37a762af587306002fcda291f5bf391654261fddaa75cb6b40c62a9524d8e6a40f2be242bba9185930bd5c4805dc92327ce4be10b863d0e70527bd0ac1eb44530b9598fc1b4a024ee765f49b4914fcb712ab7b893c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008789b499160ade73b1d74443384f85b64dcf0ae2bd0ddec2ffcaedb52262f0e06f81edd5743d0c5981d220833df6ffe93d9c7697fad2768da2477760f4a74e46b68cc667dd0d0d05bd95161ea87ccabb27ac11a805ea0bbd1c3bed3dc2b62634a07ee658e15683059fd25ec3c0f790f39eac9235a7e62c3e0b400cd6f81557e7eb47d8ad28e668628d999c979ec59eb7ad0f92dcd14b227f949b4c98c4bff6761d99a216de9055d0c7407293ad88af4f2cb1f315bb63c7ca63d2cc5e85025c2debbf7b53afcb66b73d8652cd985006293c51dc35be73e9ac16b41dfafba6deddf3e1ccd27b1a98e16c042412c96ab2952e838d17c1bc9c38f1172f634bc8cba8db8fb510267b95aa3707d99fc6803dfd5ede0da6675574d2950869e8e6b90011789772624676c71e5bb15943445cc5f74a73e48687cf5d555e64893fc03e21383556ff2240622bd0943203497e13c75a10ecbcec95d826a5a3abb75b8e68f99e9b94b1751f9db502e73243b8278d0882c2c2f3f92ae884d7f4dfe208e040523360128d7b0076d56af216580e9187b779c3c2b9e70ea3ff04baab382d81647a88a8350f59648f5df6100a66f43f12c22c0ab7865cb91a017797d28afc1a9d2e670000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000907e84bd4afe0d3d2f0abe3d674b5fe0569bfd5d8e8e5a6ecb3304d11d89c2e5f512308c11bfb95d7adf26a38f736420e29a906ef4fadad45f8c6b1c1e85aaa296e6f32534aac2ee20c1e60d78751145671588fa2bbee33b337a1aae8b794b0370ac29a4d3021c071f27a9a5ff7245ac253e8f599930e0375aa3ef61546797d3af1a8c65975814c598582337c341cb37fef19c03a7e4aa5af86d48ed1b9ae8cfa667a6af72c2dd41a595107f9576aae29c5980698c2fa8a29ea2990f20be3ee049fcf3fde55e8703896ac943f62cb7f7c2b245b1d23f21f1833a30a160c096d9f878295ca1da1dd357642f9f6e2d2f57920ad8a93d1cb82ad54b45fb179d9349ac47223881537f371f3a80fd9c6bbbbacce749b8834a0011ad75e7c6d0f19000ca3d5d42226f6d1abb75c39ff24d4873f899cf928116d0efd1e7d6ac52e296b2a5a2fbf250b086ecf96be421af0a616e40e063078b0274c5db937202f23ad642e05013d18d146445453721920fdfd094ca23048f6768e40e15cd8055e2f2217885cc6ec89babee9c3426f9472b145c2175ff88d64c6958f033c8e96271f2f3e801b5a995f31bf38fa46494300fa7d4ca3ca9d91be1bc9e57efe3a5ef0415d33400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009744a265fc4f4705d0d36f1345ee90e98d8f70c4b885d6991770fae033d93601316007e2fa1cc54bc61c7360625cfb8cb32dc3f26609733c0510fe9e160906c641cf6338e1e643513cfcf0124ce605bb0136f3f2eb4a300a3650e718191c468abccbd949121bc96607b541bb575a38d5e2b2942c512db6152ccfd115d704776090986b7fdf64942b2554756de5002a314be31adcbdd94112b499d56c78d11cb0ffa9844bb9f37e530b4350b4237cba96122e145285ba396ab55fcf88fefa188f21c33319691e817cea3a8380b813a91bd59386ea5aa25e3506a9d887711c9db5fc4dbfcecdc77ac7cfb120adef2f584ece31adaf9d5fba2d27a414f5c334e2679c5a885de330945759c75936ee63ce0a7ca895be81b706fdf530640a9da4c78151872f06951e6e43c7248fccebfac7d485f0cbccf89db17bee1e70c2ecd00a3fc8999437fc635ad7668b526f0b28b1609c70c5ddbb6c98b7ab5aeacff6dd5770fc629bda8ad1d74fb4ed3b0a90e2ef936904ac02e1aab9e7932570c196588eba896cfc10c36a4ea8b70c9b8c505ebb0cc8698ddb5a3228ddd3a7fb964e0f5c75cfc6a699d499206edda5aad86ad4fe0085e551d1843a1aa0b90ac7f7dce0d3af0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a87d0f4e69b4e6c411c4def7666f8026c060ea40b333798cf6fda3e6f17d8fbdb5e531edcd869357f906ec58d5fbd40e6795c476cbdc6490d299bbd93bd65eedfcd873129c5d86e5d5796c6f07272e6ac48d88d71f5ddfe9a4072cc3e7a28e4cda099d9d0bec859d7342cb1f48f47870b64510042643aacaf5cf70235badb61ade0ac4d0b3fe2de0898756200f1f21de25977df48bf18c4bd2f7ffa2863432d845bb3052da50860554eb2fac4560ebc344a124e717a9d574364c882c709d278060fd18e35d4124ec2655fb0f72caf6aaf9e2dd2f7a178bb40382dfd21a2bd6647c5487ef3f9ea38e3fc72553ad257ae20298765b39756ab9351ea2483f87b0b7e95874aac1084fb1c2382259432491ec769883691544bf1f3710ee46e4c967cd08274a4db7f56a63a0f16344d1e11490d4b5a642e093751e73335fbfaf26fab0a8528b825bbcbd4cb99d4678dad8a38dc99318ad35d25562ccad098cde4ac226e5218eeac78d64f4f2d32855fa13413115fb2b748016622e2e9a72e5f128849ca57449f564824009d5b73e65e5e606296ec3e28a2f482aa86e1068f15c186008c57e3feef979ae60328bff85a5555861347721095262d8684ea2c49a970198ab00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c8eee34163b933390e54633d558e23c0207ed81c4f57b340ab3d50e0d25ea859e6492d5db344327dcbfd5f98523f8159297ede822afcccf09e3a4bfa7829d4cc7cf6531b2f7b2b00723987d99d2d3756f8ac01735dbf09e4b2fd1579fef4c1b09aad718d74cf04de6f0f46952ef5ee5fccc54d2f0d9cd5f84a980a0cf62b7a7222b03aaee908c4abee49477bec7c7ce053f8c5c1806eff45a26b723309b2645a2cc43c07056c69a16614529186ac3cd6c83e5f17cbdaef04084d7585ee84adfee039fadd0ea9ec1c14364c60772596439fe3615ac9676ea4af2338a356a57e8dba631aadb975df9f086c7ddf0c0a4e4742f6f1bc1dca5d1a123311be43366a24acfc8bb88a109a96934a3ab008facc0a625c131667398394796a8d7af4fa3a244b30d80cdadf285c64e638e5488fc3d6a0dea9d65e39a2c2b887caaeca6647ab3985986c749c32085aa6b4a268053829319f6b6bbad5b806051b7152ccadd09876ec9344edb0699ad053395be8bf7d1799e30e547a5a6f99b4b96a54a6e0a320616f7f4c62d0e618c53c0f00f65ac38cc0b74f866e77ea1297e6dfb22eec104695b4e1773c4c16da7cb102b25225370c138961e99c405a0286e8b61a5ff8c5d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002da787690fc6851db38658bd2dd2c96a9bc52b14ec6b64b913bf962c1adb3d4459f1f39993a1ca3bbe00becbd852e62146bdf2e894add938dd141b319aab8f14270239fd4f23f2d98f32c13c09b3a6198f734232418abda613251bd0b9ea990d19083ded9fb106dfcc8f0197a3119e6976322e2a83898c266235ecc3c5b9f672c4f7fe2fc2019af2ef8ad49214574ef6b5a18bac85e3cb19ba11eff840b0e2351f2241d8fadab876e0b0224fd9c3d439eeee478e1ed77d620f6d310258c2bc7b4283487eb3eabb4ea0e5a6e07ef22fc4d635a05279317c87e4d7ddc88c3283aa58aa2e64f68051717727851cfc824f14fe16544f6cf2abf5dbaec192e4101ac3df82a6e90bc1ff48a4105172003e302f77baaf1dc4094d624a8bac7abbc7dbdbe6c6ca94c5219ba50447ac8e18410f49bb3069932571786ef4c6d77e7db91809b6c986e7c924d4c7e2d0a43d21ac235675a0142f5c2f0633b19ea18e1d52da8206d25190663a8fc95708ddccada5ee62c923a4bccd19350a53a04117d2cd1a5b2f87dc976de800ca441cd170cab4199ccc0897c5a0e56a9b4a9f66a3f3cc47bcb1edac1659835e4f5c6662de2c2d7e33be42249c01dc23a88475cf0ff4860beb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bd77a6d9bc3a8b284abeac041af9acc4b0c160ba1b9d398ef8d6e1eebe15b21aea9f5deb7e00e1810d09bb637d7be5c3481cb3cfcda7df9e35b44f12429495f579bb1244e2134f84b7c6c14e662a0361ae83ebf19ac41ec40bdf9d96a02189236c2b4680fb3ccb7b9d403f948d0b6904d8eb57aa37a0d2f77f731c4227e6525478bbde64b9fedf7ee19ea7293f2fa85452683e96e9845b01239690bd273f56e7955fe67566224875287f46a6d92c0b61b88d4570176008f4cdcaf032b7c62cce9edd9f56ee5876067c13ef6f823174e21023ab4333becfe97c701692b76b76fa0fb8c98c7936c16851898804cfcd38e180493a6b8dfab77f53e8944c50ce88bc59e25037b372acb172c57261502d8dcc165f58dfd655714e4dd3c31de44cb05fe5eddf5c04d969e085a62b7e3a31f37d35f950245623fd6db1f3687beaa20fd7f3e3a8ed0b11f8c26decb762f5168077761412e896e56f64fe91dae891505f6c1cc6727be18899bf77542e1a06869f75a25e44a20206774abe4715bd104bac69799be675837992cda124a0f699b983a3be7d82c03ba7f9f257b32e1e4d4a83569cf3f79843919b7d2c8b5474946c923023f0b959b67c8232c139eb170469fe4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081daa6226e82e16cb78795e3187db3ded5da43a3030b060e6da03fd3e8155ea98c9424986b3d68709482410e3409f063042e7d3f1721e5bb8f3394397c0dd7779165b57053972e07973485323921b76e8f3d99d3c081acb2659811f32b321a5b5047c387a20eb4619c30efd3d226a0630f6d879429b31733bf0ca8c170a9e2a5ee31da3e3bfcf6d3d6545f96128636bacec739f1ac2ceed7cef8562748f551145c23bf303fc9996ecc10658f35b054705b0c225c1bcc1ce8d947846b260fce973bc37fe0882ed614cbd6ff9b491e3e2b90b20f85751f2323531dcaece4646160b6afe3f40f09f4abd606fb811a9816ba3ed316ef396c5a5f1fdda23649e2391591e4fc2e423fe01759aeea0e94457512cbdfe4ce5815f37938ef909145f18ad3b97a1f202f32d018f289b356c51d1cc3d050d0fcad61e066b41c4c6a135a60724e822c7ec63afe207a0cb68209761b3316af0d5943b588ee2e05a777ee97600a6f5f63b5ea4a223c83d13dd246aabcfc165ddcecc3ecdbc186b74fac7fe3ae03823cde41f2c39c20eb6c7d62ae4165cecc1041290f669104bace9b8ea1225a4fb9f2de184c20121523402c9eba2df8be0bff18764d0b29899860daec7ed41034000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b013a569f3de35c3476dbe1e30fcb19bb0ad435273626e9e3a34dc719870f62267bc539212778f7037f27acf840cda5d45127b4f3f5fbdfb0d5bdd397d6d11681a6bd30dd2490176a0d4028e0db738f5b8945af742311fcc63c9a856a8f08211c37e90e83a01c873ca022801906cfe3dbcd3da186cc337726406667083e84c8cf9f520f0c29c3b632f8d6bc0fa968b883b82b865be3948e41ca8aec86ce0450ac969e414a7ed4e9f0ea993939da04922367a19e19aee566a1c4732a7a23c33043698f0400e9e3fccc5f06c3f7b7e11f11fb90cd3d61de10055b448a6332cb263f6018a4670c01c5418bbb6e0f7e46166c9709a782ae9c0159430fdb06ee3ab2d51f4c77a741cf8891ff08be73f8c4ba3cc9e17b4844ee750453e96790c0d99b509412a34ba6f406eb75b79f40fce827bc31d5a76abdbd27ab5dea1ac6c35b6c571b9d8cfa15964e621a8aac6237d71fd8138d0917e34649ec42beeff8489f942cd1a3c057aa3dcd92b651673de24ecfd0a98298563e04ba8c8dcb7c92c6df2f987c0af0d5f20b5fcffe8b3b50fba921e1a860d417fa8b44b9b8f586d3bcc1b6cc660c8b2836763f29741a70a0c04d9f1ff84308a4d58b6af817460da757cc700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a7bf0b4d5f8f4cafbd6f35bc13a801fdab46fe4007c155c71c3d7803af93f48c4fa16b1fb03d77f4dba3092928e9e60d624b65a022dcbf21ddd63f80ae59f84080cb01e3c4698defb9d1c9dae69ae5f78dd8ab46fd9e125a75bf331ba40ca9098012ffac65f91abef35018fa990e48cab2aa914f9cec004fbb9164ad7bd4e378d25d8192a30c3da9a2862b15959134e24034eef5e0d3fb657caa372250021a65828609b559174fdca20cb804ca24ca383bc01e3b315f60ff2f0468a956cb601c3635743e6c3d89e1d12d821baa939726f83e811491dd1ab473c339717ac2952a093ff545f6f3c6a7b2d6a945b6e01adbf6fcb6d06e80facf2fb8f86e3667c212212909bc1b581b8af37b22aa167aff8d71988370e6dd365afca570c46dd512fb1caa4eae8351590ea0b435487c92818fdac5bad440bc60a682e742ca093fbb11113531ccdb206aab5365fc908b71a145c0363fdebe427e1de6a4bac2a7d2a06d86572203a0f69eaf5e10ce772d14677f05f59df781cbf714049cf23929f015c071bc1a70e5f2e5866a8ab63d8e10dffb90ae8fde6bdf99d4e4b6e3eb02f4b8034c4e8d1bcc187d1c59922ea80913751243a004a4aca952566ffa107a07bb7dc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a5813002ec0e473409ed32234f1aa0787d3939159b39ff5a5f5e163e611bffff2a8eb69db4866ecb06bd03b49aabae464f7228662c465182e9823cce64bf129755352c29149e0a7ed1684552e5257a11be9ebaad3a66ed88a95ccfedda7b56e72a52ab77766d29e892a05c78484c1f1a604651fa62063ba5c381a06fdf8281fbb994bbde058181d48394a46ceb0b9df8cafd5b42defad421ab53b3649aab76295568fdccdd7db64c4011c1be2ce92233c39302c25fdbcfff3c6da564cd7edb37f130b711f33cc95061e54ec2bf76563c70932a86c97c921ea7ebf78e1fe7d452d060eb471f6155c8d88278dcfe299cd9cc85624651cd384ab751d9fc3a4fc5b013b95ad8874664b02eac4ca76ce47cb34622f3cc7e290313485e82c0aaa3872a800444e0392acf78e009f05062796c2a944718409f49ade57a8c1a5762d0950346f3d6cfd07278386ccbeb41c77abdf4447e5d6df587c4574542b7f8b4d682ae1f5b5742a9ea4c77f878ec86884d63128f8e883fdcdc0c71ee7b08c43af8be59a716da59dc4e3582faa22bb1975061b179c5677d9024a24a945c935dd0515748e3efa82be03984557a227647ae801995f79e967e1b7426c09f0d4beb6ca146200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f39c6c92ec2c2b9c4066f08e19414eb288e1f7c49b70209f44ff490f6e1c72122efc9703635161a628d803237e2b62300f1dc1f99c4e88b14b4c986ce20c7d272bc88caa2fbb237e6a759da201c1db331200d6e0b7f0ff89360e571239c951cfc21bba45bd99ac821e912da01b8d2656afb8db28cbe1162fa3ba5365b631fb039aba1920134507f2bcf1eee4f0bb753d59782f25f87936126dec3797d7417d54c094f6f11e87e0ea769154fe071aa9bc0fe208dbb822ce328b2a10dfbfa607633dc138d94cad485ce285be376d229e5fba27db768bd0b9c6ea5a654b6329fabac872265eeec9c6b4156ac2b6a721c45fbc20da0e9f357d1eb3a1d1dd51068316c74f09ba68dc554dff7b87474892e1ec994cfd676470b94344d389731081fa57e5646dbd3a29a0233e025b8643c8ffad06bb98853566cf714ba6ba305611e3c413ba086b62e230b8947c1c192dc960f9e61552b41942471d807645ed23c0d38dc39dc28114ddb792b367b352fa2701ecb6259bd541a15292328c23ad1df96805991434ada35ebaf667f70ac3cca77d41e46fb0bd7c1fc0670ab90251c8ced1c571e76cc0252e5928e5938b4a09e1f4ce643fb4b203e999f80f0461ddbdbbad400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c39f3358acbbc06bd30d34e15ee6b0259e66940cca3f78923b66430ddcb2aeccc895f3cc99d51d168699034f9f1186cee8b9e73c5f684fced77b96efefae7e030395f4366a3c4e201e1534a615773cd34f444730b06e2eabd08156fa651cc7ff6877b1ae5d4aa2326429437dc249df4d3c79b23a5333ad4d4c623514cac9e35d680a8b261f53a6c401b9df67d8a0a2e12aa412759a8ffcf5d924d525d49d5c30091e89b48d0cabb2dc7955a50c02558f6747c6447270a66d1a87fa64b0b50b9d15193b49c1214b88baa001277817d971491e55d98e7b67238557e581a14f081f4fc9ac3f32e2b6ba0f7ee675abe44b38f0ae223e4e0c0da474c104d5e22f6f6800c61b86192e12114ffe35e7842e857fa9118b26fcbb2aad18cff3e48973a53cb2d370170df0df079c9a53d366e5c4407c8a488eb8bb8cbc83fad5b03aa704e1cd4d6dd601ecd3aa55538f4846b56ce01ff514f1a605143ab1a5e3404960cc4e82832e2371d9f1996f354283ba71b7d7b21fb857f37bd092ebe5f38537041649809589cb8a4baa6596c7ec15c6e09e2dda0192d97874bc76c814129f1224f3f2ef6d3d99d57d4467cced09d1dd4ac7196f88c76f2a9a230c165d59b234d5a0d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bdaced179c0a180a410a591642d776cb6ab60f68df6bb4eb4ae87098f8c12b920db9cab7f003c5ef1c5176f445c8cfa61a5c5b30b120f8dbaac83170adb90793c594453975a0921cd5aea64727d87fdddd8e10ef22d4eff58ecc6ffd9aeb5f4851dd0f300ae5bff5af078ec46d14b7abb5d2e37ebfc4680bc23abe023a546179e16817a34afb96e39129d15756bf6c93201864f38ae133ff17495ad39114decdba387a540fa1f4303184265882e1d4e5609ef0b942ac374557ba669c3a22b127d0bc4ef0e42957d155262b842850ef5e21022cba6be965bbf186eecfd070934cd1b0bdb8ed8f198dc5799f70da8cf6cff3796d417071f23b3690c5a90a086d1f48e692f591a7fe06fff77925c5bc153717128f92b04cd19d62f9637937fbde78b13dbe806f8e963cec197a3c281318ad5df72e795affb21b666e8f29ae3f45e1861c34bfb3d1cfdf51452fcfd2f0f45967815ffe482ca47df2c78b1cd51665217809b459bdc7abe4ca573211fd2d2988628b1b6109b9e952ad67ea1a22d7f740e8a1a5c16295ac6da8e4ddcc26cea4e6deae778c7797a67a58a6072fdf34a2e67aa712205fb05c763ca7aa69af16d9d106f1cb516f0c6a3b6dcb6bc97b1939d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c850b333f70bb1b99da8c9415b0ac0e185ababad14b0599b7a1294f92680933c589e6e6e2b7e843af1f1b65b42640e1ac036757c6951ea966f2a2a648bd2aad7c53a408d4cd752cd34d88adb8a07b73908d49507fc23c5ef5ed06dda2361af3795af3a9122109f85f88a0f1a0152ae01a738b4d330da18e864cc15ff07d353488ddabee4c654bcc8a6b7fd5cf15bf7c3688bcb77d4f868127b98de83c5e64acd2b237417b1a8a8e94cced92f0440c16366d6b5200043b9adab3fc5ace7b9a76096660db88772519debafb886bb9fe38205e49e07456c9305094d96c0e61a80c62f4814bef3bf96de38b5f20315f58657603903abe786c231ec77e4877963851faa150ac1e337fb7bed3a8d8b52994e2f26aca71ff8ac3a378cad05b153618a4794e178291d2d78ea1aaf22a0ba7c248b847399ad6ccf3f216badbe8b3bd0605906d0e081a9ae278cc4524c69dc742ef2309fbd6359d75803833f0a92d91228b21ea8ffe950096f94b2cdc055960099f82d390cc56acf55b8676cae40cf8ee95bd1042565e5875f1fa4acf4dc1d0bd30d68ef567943dd1b27fb29f8de5797d78b7cdd4a0b65c7c0ff10af4e29552c106f6717c055d7ef8a80bec0f6620090e73000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093f7b7a17d4226ef159056320d5d9286f1f67135364d2c6510638adec548c7b840b9554854644f6dafd7f6da74147355eb95319d1bc4a46e5f242285fc2b32e5fef8287dca72404ed548860f6a3811f24854f34e0cf76850c6554401ceef4565eff91d407f183e02217eb5875fc6ab1e29fc5fdb2bf6c6a10b773706ebddf69d890146809df517e6e63a0a3c25d509808166550bc5992c03981e384abcd4a6ce92f744b9743fc0e43d65cadf41e8091753df808a3169c14904414610b39c1b45eb0883ade94738da07c42806b11fe9230bdc6838e2b7dc905f1de661b636c4c51c5df5129dac3f526aa2291de45b1b5e3a56c620b53aa347015206ef6dd12d66c3b4e5517a5c659242dadc0903c37eb69c518849ed55f91a8141a464da2fa761fb753d85a6ad61cb1e3b68f683db6b65eb4cde6a194c42f12029d8d4c087c4ddc3fb27b60406f48c02445464de76b5120e8d33101c54184ffb85555a15a06fb818bbda83f07bd2e2abbec0b9e1511b46d665a2764af8b714d64196be2aa13ff6d4d44b787664d5840df9879a7898293e5904e24a37f83da859f33d47f3a4fd781f2dbc6d3e7e40530b0b6a52337d47ab9410d7d99d31d06a58a53649d073c8da00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e70ef9cbd9ce87ae6d01219bd01fde4725d13b8d993e3ca1e053aca165c5398c8cea88abde11244c6e9d2bb0eaacafefb1664cdc6b44633518ea38307ecf35ed6f92c379a7627295c385e4819f5c6e5ad2c2dfe79a35ed39ef17de2419517e83b280079466c8ee6dd1dd15f0169748e2866f03a3c28c0b61457f6e381663054a42afa44c1a1bc784f19aa0f0d59d1ca957d35025ec20a16c682273e090e83267ba8d6e2c0043ceb89aaf3c14b438e4fba236c1aeb4c2a07bd28c391424ebfedfabe608637d508735a9d6d8a395af903fdf1609474e34fe62891915f5ee05ddcc19e1480ebf6235f6d06c6a0b86be5d09b970b3f774f453c5ca68c44fc5be0bfc6507b276059b9c01ea1c7f6f2925152582d77bad58f5b285023f6053a4d17726ead670892d382a17d468b42da3b8a7aecc33ef0d051c334338bff87922f649e6a96ba051a9d849c609950352596722e620db414d94d01c8b8cc2a781e9c48efe2fe9705746f6f03fc2fae7fd60fb2fbdebe9c917a085a5acb6e3fd95b372211c08664854e04cac8695ce45cb7102fa614af60f103dba385c66d71c035159654bccb09e9f3fd9852b3b7411f0aef75a1ba2a3cf24d688a952a6e9393e1fd372a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001495cb926195f91930bc055970088ba412b4acd1f36524b59ce9dcda850bb82dd162664d152410a53fc730f12e0fdf42d3eae0aa99881d8f79c75ee4c4fc14ca00cdf210358582f61882e96db0c0f92cefdc3956c16ad35c1dcb91eb9b8cb7dd3cb484154c129acd2dffe1e3274adb52fc1148b7df28681601d406ed72ca0459b62f3fccd761fe587792d0cb796b3c8ddbc9a897a9eae2fb22f6b95ee0956fd89ec82789fdd92183862f494bd6a204904ac8893c5ebe2e982e1703f8114dbed1cbc70f555d88e0b5252a603e3d5a8bf4f3b0ec1f192ab59f891312509928acc30dae05b01f056a6ae065e16c631d53957519d091e2c24d8dfe85843f819090b6fa451596483a11c9b1a319ea8c472ebe6f3d477a04eda43269530877512ef22ab6ee963f2b47bdba642a397e1fccb87f9994bb79048e2f75a6fafd7249694c84f6f313be2ed5cb1ad65778b85be49e6630ad42ac8a6dcd644c4d0cd8a627dfe6149c835cedcd41466d326fef7c46f971944b80b7c77cc8fe04d87d4c4cbf160173cdc345eddae65831f42abcd72c51de0a12a62820f758ce8a65078320bbedb28fbb654a049129cd3c940c79f22ab6c5ecc3f5ecd0faf74b0d308fb332a7d269000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082fc28710dd79f0b61a1c33dfa20b92841613e09ceba954d34c6950faec6e2eed7178f3d7ca9d95bfe2acb0660683477f6cabfbc7b22f594f555eb78db4a10db98ce65a5a368d4c2f49d9e89d1ea00bad19503585fc0d79d37c8d99e5f4202ccab5e41a82dbe731aa40e19163347908239b79d30523f564f91e7290fc02ef811be0a1f387d0bdb473da7ec2e7a27851abd772a2ee8727592751893d67ce336f1b1e1c682ca0aa733d8a6dbd3c0f0a30951e571add0d205080e0e181a0ff9cf5c4b1861569be8486bbdb325865413f3cc45589459dd87c5f3c5562302bd6d56274c0391544e472309f65d003c589c491a42aa427fefea768020d68970bc5b24155333d30c9082d9c554079bc64f4c28e696f8c4ae7caa5b77de84b5bbe5d978d4dc5ed0586efc65925cd525bb557177608fe240e903a9d5dcaaa5e2e9cf495ea46dcd9905c5235437bcd7608b79385653ce9d35d6fcdd49926422f7fbbd0e3bbe7b4440249247b30f4fe0378228221670b86b4b14f7c0810f1e925df92c21d154968c148aada7e340a35d3d942e41c9ad61ed039408f0ff5123214ca0108b79a3e7cfc6f548eb5b629fef00ad67c9394937b3740ad1e146f199197d1208d876410000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063e08930197b859d344e57a247c721187a4acfdcb33118e6cc826e0cd97530866a7ce21b9fedc4ea4ac5078de413f98814ffc819f3c8dcc4030fee8402e818207523bf9c99240823dc3bf902a8a00d94f59d0676649937da9c655a630cccd06f7fdb5d6b05b2103078cb0639ad96f2e3026076a5f398bc2d0c239bba90d54a7e515636bfbe9d753b13a4dd7acf63f57ffc5e5df7c9b9f280c405220e54c18478891a2a274f5ee6152352fcfdf4bec23d047579cf7775542adbfe14060eea010cc5b8d37096588b2e9a71f38d8efdb7098bd7905670fa3f5599079e6cbd6d910c4fd3d7fc6150a7f8d0fb50563d780bb9bbcc186ba6495661a4566b47d2394546f51879cb1424faeaa75f5f49aaac2f2a445e62bff023943d8f15cb1323bac053bdac9e8e763597a0d8d6382dbbe6c9aa6e55e35d7c0318661b5bafc529b39741f8b4a05189a9286630fe565818c42e5b13c9a6c4282c69ef641d2a55b81c3c4558aca024f156699d7cfe796d4602738b44f1f540f88a24ee49de6ccb9ed86476befd6b544cd64340296f7867dbd8cf1b78d947db4eb8933202d7aef41101475eb05a393f58601229ffd84152fe85fe7ab6053a4e3c39ec0ad0a0a82c2364f270000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa97d5926220247c195f0481ca7f8efe9beb1c21e9602b61244b43f8574e5e0675085aa305d53953c478f9c5326b8b96ed0e1a84f5999337e521850ad8cb7cd37df39c029ff48f35c40aa39b38de4efe463d7040a28def7255da50f66e73e9e4bd0a4743c334969a9c21006e070ad3cdb2012d8a616154d58a4eb7f8c19d393d10bcc6d3c7e204da3a0fe6042f5d94c777f91cb1285c4b7690ff9debdb7f7b58db886089d0541a741dc6aa539fbdb5ea4b4f78279b6e654d324a01cfed9d4fb6b1cf2d9720854ba9cdf034f4dcb34755bf4c40611c7edb0d2fe151ef120f4f6274d411dba029f17ec01fdbefc6eecdcd0e42ef8d17d81cdf2f09d26f29475c71c4bba783e77941fa6ac9f5316962d7a36e817b9f4798cf705be71f0bb70100646f510355647e0ec359c7ae7a8cc3c658a4d59e5922a4d38b7118c2d7a1107e49516e3a3cd9996d65cd65305e231a0357de3fafcdfbd11272a22c96067a36260eed6683a983f651e3520c0435d673a1862f6a4534f19903f01b9051a29f91d0b6b3e9a95780bf9be6425135a9f9a607a738a3a916c3e3e7e732d4652382fe075cbb85e4a362a91a55c1ad05ea624389e2b980384889d7ff0673706e12c894348b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f445c301c35f43a53dcad2846465669311757026a97afd22983d8fa56c920551410a728baad8c25c8232db51deadc63c8ab800272770abe4fe76ea75f8131e9d957b340a00d1e6c39112d96ffbd7feb5a58494d2bd03e387451d817ea7cea2310544cf8ef24bfaa4a6d815c399611005c39749bf11f493363e3c8257225fecc0137eec11bf6fb423d19c2ceeaf358b15b58110701e221f3f287a81708b9defda5c92d1bca3185217eb66c315797cd6c2041a62a9124be0b3f9e3eca80666d97ef24508d2386aac223941e4a569f01643770585df2eb17e8cefec4e4a4c8642627185774d247c6588f055ff990dfe085e0d5370e4e5369dd7b0fe7eca93703121058e0ec2e1de8095e7ab4dd7e8725ec468a75e56d63ecfaff426fb154cb909c938ea1311aab312ccf7da83179cbf30fe2bd9ae840065d1c5ae7a567b4a252cbecc956ec6a2782a2f7b50d260bbdf8df4e5c853f41aa6d9dc99e4fdd05f4c0f12c096fe3acdd4373d23231c5560a30a8f9320a5b3ac37f373b4f5f1d43ce8a3e339e3ae5e8373a89d9e2c0a10c3be5c3dd2d3c70472e47b2c5d86e10b7501a1a5df3231684d48dc015180bc10669146ef46ed736ae59f55676bdc7c6049b3d7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085b5d47cff48ee62aba2484d27acc87430586cd990e4845bf31c85dff40d32fc017c656218daa37a675c2e721854405fa9e08907ca61d828583ab617d2233ef5cda5e1738089dfdd0ff481c89bab23b8a587e51644c664d0d7c8006f1840d2f832e144f71d338c72c339e090687958a39b299111d15e25f138148b35e2a1f6e0a4e084961de270e05374e2f4576b2a277ac3ce959ef29bc7b86f73ff6b3171ff8528cd8c08b594c5950d8aecca38371e9130914b533cc7fd4552a31d9ffebc694c595a1a6ec6aa839ef86c17cce8efedc5065cc2febc9d69921d3528a8f9d42d091794345ddabdfe5a9476b9a1b02e25e067f83d903189453e57422d6b3e6c1eada880e9431dd5fcac6e9a3c6585494123df96e32458939eb7eefdb8c092a689a350a1251e675777a23ffa0710b11fff6b7fe71dc8c5e00e90ddae9ae457c01042249a67fdfd20d1145a74a87e09eced34d2c4be08b4006204dedecd7ff1d5ea3150f008bf99017d90317b69ad250418a034121919290380312326c623af054342a3853a7bb31c0b81e5cc4c6b0c73b81f3be42c138c010add0fda75bd9b730ce844aabc4a98d035837554f578845e7a424bf35dadbdc7363c7a20fed6ae37cf00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afe827b7a41e075c395d8191df39365a318cb8930978e41c2d35c56bcd84563e591c90d0224cf7f7a6ee64694f4acd4b81e0874befd7c6763d009307848f78af1af7829ed09f51172dbd337b978d3f6eee10a85d791548c31ed0d454596d60a69bf723fd14b65faed708465a900e94e66a739d8ca293294b61e059fc06b6615324cea52055df5496173736f71dce961a80ca8dee46a9a92109ba09353b9379ab26033dd49b98fa137060c1976ddbed87e5c9412e00300f4b120760d16c2c61f9246ebbe75101cd7d9e1ca7fe7258cb6e340790039d39dd1f907c523d306d6845fa37c974e87c9033c962ed96a69ee5b19bbb6a71811ef5721bfe4dbeb7d038c5345688424cef8fd3abc76455bded31e3cf031d56935099630ed25c618ce13343e8cea6985fda37396450e2264145e9258bb33858f297ea6097aa318bb551ddaa0766841a023a1884e7d23bfd8bd27eef676bbd3ce735cdaab32d9ca6625041bbc95455f80e314e1ed1c80f5948e56ff60c8c8e351891fc6494a1a21a1521fd6e89eb937159648c41bdea8cdf73fe63f887e30408b00b7bca958bf94e79084eab22babb61c4f93ca1eccd2729e07f14901f8560ae6004a2d3896f18b48081b820000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5a326583b0d9a436f92c0cf68a30173d81d2957d69d91997aad441e4ed460e5549091e227765a597c095d8d394693283731964e1774df9cf4781fcdbf3de6bd37387645e03da5c0a59b86574058df8d33b1a5e0a942cf7cadddb00d80c7361b9f76714076b94d334986bbe55911edd4856ec8cb133971bf1f9da7cc4e0a634498db7dc69377ab83b77c9de9ee133f8ea59ab6b2dedab1ce7df3caf8c9b16d83a72f03148c2bd59f71e0429c2505447434996c2176ce5b0d92090ab5405c4ad0e8d5dbcedd85b23bafd649805a8f8f0230b781d4056887c5e3e9e7c221eae6a49c9f2d0ddc07c82117a66329746db7387737606d1c5dfcedef5ff627e843bb44e96ddfe66480e9c40d0120851187451c07581dc2977c1c3eab4c186c59286e7e2547ff982c2d92568364e1bf9db9e0c04fb5d0fcbd91f594e41b5eac1c56f2a3e78352a5a5599874adc753465fcba5b37e0a4b759ee0c5aab2bbbe3e5f383da8e9ca202e67938856ba4fb1de89bc39c27b0276aac43027e7e489e0149cea7979e4bb4c121f6e9bac57da4f62b16fc3d5a8202d667137ebe3ec81b540f7ce646c6e736fce4bfbbe88e3e7708542369c35e49b2658be2c9cdc8ee08c24d0f301930000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132763cf9f20e97b6a2c1b4e35589cac89890d36666d35355cddd0e8934c3e8c6314a0e0f5ae9667c5dc220d55d71d31c8e3faf9b855a0726dd4fbc18438534842f3c369abcd1cf8f9e91d2d2ce715bd52bc1987d8b5bdaba0568faf43316c47209409b79de2a991a8444a8b59308bda6f22b620a7d646dd2383e170c28e81e0b0c5c790bf889295567a1fb7f4041b4ad09cbae2ea4dffa9923013e873ea3c4881b0140e964563f27cb05c5358a746fbd83b4fad4b7393361aef07ba98c85d76e1f08220c52cb784ed12a2126f9eec88a75cb829b4a69a7a59ebdc3ed043b4b243f0078ad6ef9d26abaaa4f4d69166ad6f65ba0358b2f535d81ec55e9bd19e88158692d93eee146ade9d96b949ea17b05ae0049ce8eead5c60bf94b4c2169423f49cbdf7a6baaeaf2fd9384895c8b32a4c27d2f17e941bd072f162ecd0031743313c91f234dbdd9b55a3b8f6242bbcccaa6336eb49a9b26ca4ead940367b71a7b8749317a7745b20ff52d9e0d7dd6b261f503abb2d34446ab89cd04ed7737ac7365954881fa68d24d70fc8b6cd9643ed0df269b24c499f7ab53653e181ffebca70194dee89626799278358237b2a93be359471bec2e8852483ab6132942300a8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022741792111a535ca3c58e5163f1960de29247ffa6dd761db5c2b9c8ec47f1ccdc109ee89e486997c5c6461c4ab60dec192770307903f47f95832552d1a7ca0db0d428c9041740802e52e546455b9fc633d0621fe6ea70336f51177039b0b332f93220958f5cb33684fc3f7e8aa25091a94123435c99ff339d0b96c3f145013dbe1367b50d61424a0baee688c66f79f1febe2ab2150a517e391aa5706a4d2620902c799095c4fcf9bb3c5bc9f9efeeaa6e6e1e7a1c8aca9e5e83e44957b70ff25929c47a8cd876a332e4230df561a5ccde090be3b4814b0997dc38d924e2fa8961620bc3633b482c085dfeeb1c4c183e31276bad9b41dad9f3f81cb3eb7ac3982e6a58e8648355788e70105073a9b90649df65c6d76996aec661fe4cdf683a2ba9c9cef3e5edde1faf58848cdf31bee48d1184cc3bd5abc53b8395bc30e6a244bf0fbf734b9840dd96a04dc9d3b7484cc1e30825717b619dad7742e81a0da1f6f05ddff0ee03adbf623d1b5cf0b4fcab6c6d3101852ea2b148870f7f3c6f115f60363e6c6622362890ec95fa9534073b90a1c6f2e70fddd22eddb34cc7e0215368f454ca233c796402a992181d29df23b7c31e8159bcac86eb59ed13bcf98a460000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000128419d1f62ad867d1732d4b417cebb8b9e6dc0c481e072322f5eb011a3bb116084320a64643e3ab4d8518ce9ddd651fd8812945a0f9abd03ec42610220f94fa9a6e68913901e5ac5527c5e986d5665343d3650e190d8c9442cf4df7ac9b472ce324ae61e19f56b981753522a988cec317496ca6b9e12f717d4df938ab06240daaed29f24f6eadf14b22dc2ad2275eb10ee34f500f0049606a7c1d66ac4b64ba3b7e10703ae5b1dbcba33a30fe4853554bd3317e677e2b57cde08f4b9a3d374ce920a43d2941337fb4cf936859020519c10f1a34eb50e8cb2696a0e5fd71c3e66a949694cee3d641fae90fe108ca803c3f2b466fd92faccceb4691a8231a9ee04c9313c1b68e1e0a3a9d3a126f39054bae7173367da26704e838e3fc1225485894cd03225a3907c8743990aee809d5bec4c0eb339ffd72ae677378e32b9674096a9bbd74a0a053a4b5d3845220a0d7d4b1fd7be2902798f3adcbf3df1a9d49a9223194ae60b1270d25addd46d17b0581fe323c7f6092c1c85ecf8d2d3ee2e393be688931797f3a9c49cfed4045bf19be0fba2b523814ae1b327bf644dba27ca739a2c2cb39a3b2d51f23e0db2cd2bbe676fa0cf9a8e3b0af4db4be5c3dd71f750000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000849d2343adc87017cd356e88053417892330387a93cc6f1fd55cc09935aad995fffb9e447c1bd58a96bd768df8bfadf1acc5b965ea7ffd9ca44b4c4f4728530ffc72938e4fd69ebfb89ffefaa66bfa2d4cc659b197a81549828c398afd44840e49b14b3145ea798fffe5103e686d8062910552859dd4fda0478a070121243901fe17fd40b2e2aee6e15f9a28faf3b7ecb924fb50434883383cac0ff75b8f123dd730ff402a268cede3001d6ef55095785f4b4a9d31d56d29b201afa86bf28b2706dd8b9f978f01373b7064d8757dcd8efb5d250ba5e654caeb7b76532c94b68a7751f4b0cdc8019945be8575a015b15f7e62f69f1e1110eeb24d547ea64ec129a0481102ee06ddab81194583634689248e71c7726ae81db57f4be482d11990c375a1a2824375d3662d80f7503d5719b2e4cb9a46dd6ba8f2254f04fd450e22e6fcc5090f7f0fc1f11c5421cc6f6a5af36b2266dfa65c408c054b39a4e98859531c6f130490857f551f393fd8fb53b88d5c27780cc7f404007c3d8c298d5a2813b25f7735a2eb4bc1df30915c335742ec0985d3bdd3e70193e7e351bdd7178102994b9189e94613982710b8aa24726a5842d83e0eb09a1c9c020503a6d7c63b9b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e45c283cd660e54ace508f1931aa241b76faaa99368ffbb6000202e628b7f74119c3caf3b483c2339ae6b34c00705752a14483e3750db0398462172ca1aeb9b1651fca3fe768bb8fac55785ed195c2dab9fc7d34e9e4980ae70cee9c433a6a6792dfd860908ff5014473008ecfe9318bba15b1d30db3bde2542ad3ac578bdacc8f3e0a0bf0be037253b759dcedcd9e7f4c3e6430470f5c7e5d3cb998312d1e9906f5dc2c9765216176bd39af0ee21f6bbc455873d4bfeee0e291f6dab6d4a0d1d366f575b9689f0c02e5ffa9888f1010214a8f0e044fc69026b8666d2340fa9a89e0a6039d9070bb3b8deb92475ff09c3c358b9d475cfa559a0cbe4afdd527866a21b388face0cd505ce9c806628542c07d220c23284abee0ff3b2cc0ca083c9ac9190d8d4f97c365e460c4b837ce125f38594e862b92e03a4ab4097c15858c103ab9fe5936dc555fad58661aa21d002879e0c0cff8ca69e65a5ee3054fa876c415664d06cf5e496d14f1e18c54299b7a231ae9de136427faf7911387d1b7e77db4497c91b3994ab2cfbc78b3ee621f5c0e0210318cb8971d06f0bca590f4eb78d25ea2f1aa51f70d80737a6897a672a0a8bcfe3b660ca610ed871fa2a8f0360000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000135c4759f8c6b5c6161c9bea671ac858bbb556f286099fb9496d29ca0f8190a8995c7d6802226a9e22eb689be71a157aa260e0406f74017268e3d45f724f30ab758c7f55ae5ae104408dcea90e8f8c94afd299d57e8dd8d3cc65fdbeda46a4c9b6999a6e0f3845cc6ab7fd849187927482b1d858943ab82e34dd6ffed53b6b15d243f6eba5e5ce03bb052c347390d78545fdb766c741c9c1e4e9c2ac8f0b0e204931bd5f7aca9b3236f22729ee7ebba8fb12c59dded868ded885be9fec23c857773841bfb0fb0506a8da7562adbf053b6b43ad3c90d2858bbd1f6d1e7c566a8d49ba7f23b8d780dd1e015dda8bcf94575af73b3edae6822bea82025bbc296ba172b7cb554ff4d060a0a584d5f2fa404614c031a4958dff8cc03256b5e54af823f5f97c2b2895a2f3f71da97e3d70824d863ce21713e9dcea3c899d3d629e589e3413aef4ba5295abd254f9c539fa21d3268c333ec3ce7e30f27425f5bc1658abd043d38e6b683ae5e3f104202877b999595bbb0e8bf71b62e18743715d649c16411afeeab3a8f82c4deff9769fa6ca554163b3c7ac977b3c0662dd405fec452bb4c00cc0f08acefc40370af47995e86796ca3ad1ac07ec106c783d111d51490700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d7fb9e6e265bed3b4e72b7d92876ce72abe245dcce5981119336769a1d3dbc173ba81fbfc70f1582455446c1e32f5a37f7fad12186ee49ebcca2300487185c842178901861503ac74873f051c057259eb2207f347ad7c1b217a24f7001217f0007003c407ceb6d7e2ee75aac2cc9f101b952a26bf57782ce52389bc85449d37509ed61b19c67def96417f0062fe836b149b0d8456c86f4dc0bee213b76151a4df85b428807af2eb079bfdedf18ffac50b6addee0c35e89f8eb3fd816c9ab2c82759d74e28e7a9131c903887ace197bc2f1aef008212465c2444677310a3d0aaa153c25fea3474df84e20bc7fb5c0642a331ab2f2ae6cb82a21e2c56a6500ce8e9dcc773e1376c350a5ab606734cacd10c8518e6ba71f7bced64e6fe9891420255b0959dac698495236da9122e252a6d56d5e2d94b5cd1b8133b0bf38bc6d667ef765d118e654bfcf4a4f3715b4c9b1518c40b95d0a0fca751eebc9fa2a17801074fd41fc77094f022a46a23602ea4ea9e37e58010bebfa2feab9e9786417a110aacb4a6b78de7049f47abe5d526d4344d7c6c34f52ceeee9122bd62abb61ab28fa7f76b6dd20805711962a37499d1f2e6776752cd31a5fb809a8bcafafab3dc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f27d71cbb48a9b1e5d4d4adc0e54e8ab9c8a6ae8ef5f3016e22cd16409d93c844f64acec84ff094478d5be32285bc848c322f85a5fc27c2ce6543d9803ebae8f3752c3df051b50b04672846a722d5fd3640a59633abcdde417b7fea18e8705fbaf99b054c9152af4d48384ff33af18002055169595578a6bbaf4f0545c676795575d350fcc2ad1df822a87c9e55b5fb02b610b286f1ed1c1080ea26f28a1521e796b52e945fbba7542976e785d3252c51676b71aec6ee2b5f11ad40985ae7a8a40ec0b2860fe8458c5128a31c5f3340f24ab76ec33ffb1837b9fce026f3e94592bb0487fe0e9e479c2a67bfc9afda9890d04fc8b000620bff400e5d291e7a6c4ae1d994a96ac7b548ffdf07ab3712f1bea3abf6135ab166dc3fce96cc06f46268f5611242903c29e5b20828527eb7070c1097e231ca7ca021a21d568efd02a443730d51e4256aea977cdcbf0a4771cb903cf2c5677c62e7601c8d6b7be3bc704927e6890d2346e200418097d1b3ede81dbd34a30b6e1ed87d69b5280ab3ee6a178cd8c751f1557f54aa4bb343befbe7d1c459969f910a76ba671fbef6974e107b206649ea2725e766634e64c1e48be0107d31a04ca8da4f788cb49938cbc6e1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d0a1eccb186506e6940abe3380fd521846bc0a0308f10659aeb9b4d229f8bba140c1f455bc0eafe8fe45a591adba3a709136e4ed7d700aae78e7e9f4c1eb3423970b98721ae30c653f5ce37bd2799c6795fa84b3c6253aec566c69a560f35cbea69cdea8e94c8e8aa8c778459708474c1d0350851f32e24ec3f6a6b0299825f691bc4847e187af4df0fe4be68b1942eb215e06f5002e47c3879bcdea0a65e75988e9e431386d020913a350cf1caef4fe8b3f0078a00f6a9d575767829791a2448afc38c045e0d77b4126151b1371d19f4c8a0d4a806e7c1a4f9d0831fb2786737596db4f86695351633afac71814fe57fcf2645417b2b01b6591c53c71ecfe8f60f49f09314e8b4a8c4c2d96860c4ed6cf5636f5220f20734537680da03d08388a0b05ba8bdce4586c158b3a460a6496900f5631d848493f1b3cf46291d3d20cb9a7e714dde1cd97901c85d01835875dd86688c1bf2bc5e96fed4b4e8b76bc81b29c995f221ae6bf8b48ce090a43f11ac23fa998f703e1cd7487906944fa2b1daac49e7428754698cee6027b43e5d0f16a13eb1ea50b3abde7b66f89eed18263a679388f27ca88758ffde2bbaa3358801f995c820a75768e6279c6353265c500000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48402e320fbec71ab5bc3f179fad6c360606f04730aa4c68e944eca993c7f6c90ca22fb7f5622d2b7b8c89582beb481f44e26bc3ffc545039d71c47df68dd65e116f2b9fb72fb922c2d4396a1c5317b5cceee878872591759ec128421a4d33bf7331085379ae3269b026b9e268cb51152ea37f2500926f76ab3b7f0f873e21a32344162d904c7e03a330264705324a1b60b94d7025962024ce8de85f5578bd21d50a136074586bf8d1aec80d7030817363017fd052634e606a62097792033c3795b109947e131e668804b9d9d362a2a40e1ff0a0add27d5dd7bd69eebc92c237d82d04a85c33e7b4c28e2b0cc6737c6383828603b3926e778c75ca31012125adf89a2faef1feb6f0535aa838043d74f11ac483578a24d55030795a63b6067dfa7e090c3b65c70801f66c4891ab009fa8f1d4b946e77147aad736a0fb9a04593661740e3ffae950ccd9822ceb58d9c9d4679b63e95808ccdde132d50e5fe3c348ee7c26c3fc336659e66601d6ededd37f71ca4b3aecd3242a2f0a5212547bf888d4a00b131a10bc68c431a92896bfba407518611f8b4bb3e793fc7a61a92613ee5ef30e3348ac0fb68aaf460ab16715012d36eb930c930105f3afa4850244a954d51b09077e49a5251b959f19965c8d055ddd748d42a3b0889593b2516f8ffc855d370a3b4fd8d80fc099f079104d006e208220e180dcc1edb8ff653feb4aadf3c3ab2d4219c29747a6319fea92d34fba89167d09864dc0d6842f3825e4c4ae94c54627975e56897dabf8ce0e1ffb920865348bc9507da3a95e840630bbed7886da7f1fb9fd0906c3f283128b7ca43376f8553f10c2f585788c9e46699aa73d21ac7413995a19497e1b76dc9d4f40cc248032a9df2e91ea20217249b76b1b1c202b01189287512a5b44a87baa05bcd87d5d57fd59f35135ffbdbe074dd982c336ba790f541a447feb8b2fcbb5f24f2f7a2c9732382dc40362fdcff6c515fa4b5863740fbe86884d768559c22427bb469a4be89171c299414acc487a5756c487f9a58b1559003b556277f20e4272adc04e63b0b4de8416c16edfc1cf8661483b0be6d2101e95aa860e76c5863c87aa0be937f5b39119d2d93210acfa60afd2b515069711e68c93c93215d2c3f91a042006d1accfcad75eac240f270336aa93bd29fbef23a5e014d862da1ae357870dd3acc465f149bd9c2459cad066954ed4c7d2966b14b077d123d1dac4d87e9d4f7398a6a97088d46e509779a4a18c5e7b206c10fd163bd19c4fe2b55a2eacd85ea035905dad0826efc7ae626308a5553ef389a19e2ac5b9b5bfa82b7cf74e9c22dc51fe00a040fc2242f4343ffbf72f6e78d15c3c2eccb1e5682b6e72bb1eca53c467d8a3a0cf477326a90ce9036b7492909ce17c149531a5888d24d6b7c6b1b19f8905db452ba14b24d1538c8c040f6f981a929e11c10e22cb9afe5794a9348c5f00643c9696db164b18035c898356c4dc680ddf14342a4075603538eeb920e12888e715d43a628b1726f04ca76f8c3711ff4cae198ea59283719a1bda5a60807b2ddbac6a4ba707ef46759a0ee99a5e844dbebc1a9d3b7332c202a263657c0f28c59c00b48cf21d630b2e8a85d16e4a67c069361388589480078e2d6b57cf89dfee93e89be847ab53e6feedff523520fbbc5bd21d8b75d66e43425c64c819e73d9760032231d42ec9f0422354f36ed07f7294092017d6a4e6133c742a99e685627253746cf11cc8d5e25c96b7e10fe342275a571d95fc78fbde6c3778f6fb7ff24a8ef9e30fdde7c59957ce5599e4ff4dd8d8c216a0c6e9d7ddf7922ba771dca54585e46b13b97d3603995b9c475a21cc05c5d428011050bf434961e8c4b8a64c217797abb540955bc0df194ede16ca068eda9b1f4a11c8d87c0548c027e7e69c0262ab2be0dc7c71daf423134c8b92bc1809b4071c920e957f73c51254bb9cd0b2d625219218da916392baa01a00317ace8ebf089d9e9206ae8644d39edd1dee83636493f77cc9ee078b88ac9b52b826f245d0194c432d465e2dee4be9e027c52c50fc29b36a27fd06814d28ccddbaa4f584f601ec2f9d5100e3b70c693f6fe39210862001bce2b64c0f99288611fee40521c60c94bf2b6f0208a2ce70211ebaad43a799253cd8ecd56b361cac88c6ec8d550029579286ba690ca9ac511171d82c063701983ff0a8aa3bf54df383d1e0d68c96156977c03a01f2ac0a449c9402ecc470b52675f4e75f171391be1bd06164f08315016bfe4ec14ce61582fcbeed04e4709f95403d3b40bb0abd4a8156746ff08826c142c7c958c425f7e8ebd53ccaa0851e31a4d5c1f083f7e3162b171e4f2a601ed85472190ca552e0d00e78d3334283054700ac4ba01efa2b8a31156066eba70f827a807cbc1b0e1440786639bbee8a084e0a3a7e54c3c11b390d2ff1a3ec33249c45ca69ecb8f1efd4e61a890e577f9723d834fd20feec7e24429ed42beeac1e439c5a0f2a1e84fbf53c14e28d7758d57ca56af1f4c3c90e9c15c4f60605ef0aedcf7ea4ccf3ccc0eb34655fcd8ec249b9cfde85a8a8b321b12cc7e715972b27e34ab511298410024b6471f9afbebc33296d8391ce365721f6057684bd82ef00a73f97823d87f1f599cc508da7bda6ee1a249337f52f96eab657f0c98d8bff0561f6bf0641453182aa0f7708406876eccff1ef8b0da9698e5e2dcb9c65831a23ad95d4da21025ba01e7c5d15bbafebda3f28e455b0ebfc5f39fe27321b726e2d849fffb934a447811016d006773e70fd8fb8b48b65b9449346e67f212a8bdd23d5d3b8bdbbe4ce3f9257beee3a41f28019c3cec070e5daf3cfb277ac991cc91b62d3519c22357900a14fc2042577911890999d8d7fed7940763062cd1b2a32402e4d98d883b6c863714eb94dccc9e14aac54d658f0e0355619ffb90075a8746e186754cca0b049c9d8f06bc600d6ddca65c3e1a81134bb4dfef20116ac509b6424be55166b762d4fdf701ed6fca049af1528f2cef575c9e7ba5c9bc9f17c7fff0d12a2f2be31f0f15bd8d4fcb624ae2ef06e5f4dbef853eeaead5b907637ba7e0c8c00f6ca7a1595ca34e730479f1cc65d6a2049440be8f3793cb977f26fc9fc0b83c9090fb152a7cd76e9b8c89041a075d0c0d5054b99656f2f6a0c521498c8228b86664cad96064a8e8a949c295ef7d5fa1b6fc87d2d0e0fffcaf0051dcdc623a16501a8279ac3a79a78d40bd24147e83bd00e6328c5e2cfe024fefa5c5bff1e7820548e50790083ba24e4bf18d544c27d8fa4032e8c153fac3d7651c61efa26144f4a92e9a4ad0cf4d31fb9b72a67605bf86f3c4b3086bdec0c891f0a89e205b626bc9f1a81bc629c32c2c425e7cc84a4ad8b0f679e72001b6e3fbeda27f0054994a00ca82f8dc9a5931ca4722bfc983ab8feece3d113843ca2901ee103c0057768987302dfdf5795b4588072f5dc1a84ed180cfb845d40f30bce34b1352e2d43932a69cd4757773ae3e6b322629082b16be91fb0c203e4022f97476d0c6128c289a93c6ab83e9cb9bc889fc33bb08524806d3de567eb1174c352e2706cfb0ea91fe14a5f76f165dd3de646c57c811a50817396900c72ee1b5214d8f949231795c54344422dd03f6ad7519d3b12f4e1475009bf1616b3c3fe7334becc34fe1631f17671af4e3f3e511edbc3b290d348be657155e36d04ba56ce48c9ca87d70ca2eba4a1d3465b6fd1c5ac3f435da9a3416a6c574343eb6429212375f3a51f0327130ac376b39395ff2f54a3e9422a18f5a2438f17263c9d56be62950a626610585fefe5f4e192663b73bd8477353c439fd90120bfe1d8238fd9d245493fb1198e24faddbd334fd6743b2def66835b71a12b54cefe51366106473c4df3045a04aba74ba0b7a6f93fc8fbfefe99a25cb359a2695292d67b0e2138a1026ff5401fc348d23019817a1f5390402d22b04287aca6eb3704a2c257082a233d92765211a0c5771a2dfd34eede8eaf992d363fdecbcf78fdee823897041e7d77168d891247f9429c42ac98abd8d86a67f1da73da3ebc367cb547dbc0001a65fe9f1ebd083b3e40f946b2b22a43f01f0182785a003ccedd52061fd91562fffe3b880e9f2a471cf594cc373c96f0c1c2ccf319da9df35f937fbb414724c94ce6dd803a260df3ca8649bf690352aece247a30ff65343cf6933c9ebb6da7bfbb43f13515840c4e9ba0cf43f99c0585d21ff5bd57ad548e6b0c003f3803eaea4c8b710ef96e21b0decac773d251e360d39d66ec1ec8c6b609104883d62d07b0c9feccc5dc951ae33444ba683bd905bf0f1511a57e06755f44764dbb680a139b9e591ac7dc4712af53b38ba9e79d5ec018e5e5c279f97c9cf9fc4d1f9b0e9b8844f95e78291e1a06d047029e1289dddafc34a9b32c390c6ead278414788ad6c4432c31ddd2c40c59976326a7401085b7e88a8230ce7807bf6864bff64572ca0b184684ce54fd298be469450df673a13418e2dfb30750e4042574c4d70b940be77cf651c58e3d1974b792b86c160ef34a7b9ae273ac7b8522244685ab17d8382c4a703a21c3262e7ce77dc49206aa272b64dc3da0d020eb30133fe314cd2ca274397e051d6b150ddf98690e1ed827fbf6dcd00f4c84c1162405e1ec7363b1392e88b1db378d0a2e783fc5826fde18356755a6124c4d3bb42e4e50085a8ae2004b8060650ed63d01aec15b459fbc3ced50bf47022ca1e2de4fdcbb262972f1fe29a862dab90317155c8d97124a66f3d19b249b790adb2b4a1b81a96586ada55c1ee4a35722e859161bc98dc65abee3cd3e0d56dc93df079d7961a68d2e83e5350595c225e4febb1fa0957e0a4bb97fa5d7840b8d40f5a33c55ac93d9eb69d5b883db6c0f4f4ca20cfdaf05f74b218fe5db35d261d3b220bb9774b6599347b58ddd237ff9d4345d2d5009232acbcdabfb85a0c19429d3c1f9fe9c3af4b06a5cde27c482c87bc34c13215391981b3e5ae1e502d95a1e20fe093171e76f43a1b65805bcbbbd0e70d41fd53307da1ef5c6930aba350cde1c43bd4f9e77def14e7ef72797c80e2a3d670b92f3a466ad0a2dcc088615fe0a7d2fca5f4243126d686c012de84ae454233f00d8d1d7633be4ed77de425e9c80a5d1b0ce3c142c7e7ef757303fe80fad309b2baa908f1f6d587ac8c37fbbdb60c72ea56d62ecea5faeec74b4010bfe06f8742538851c7136ccf1ea05e6dd244a5f4eb2eb14caedb7a99da66a43f9a16b675325055bce4a5051fd0fc939737a3ddd0a105de928c1ca2ad1135fffdd77c91db02ce514331de481d7236d33c2ca02f351aff7b7bdf82dcb417db15a6645bf8db22b38c6452b49b7521bd46865d567a69be672c82d10046881c9a95b8139583dd0270301cc4a567f5d228be9866364f8eb48a2cd25be9550b89243a4e04fef9cb32b30fe98bc6e14a965e8dc9f28441fb65d7bc1a34b43bca91664b44e913ab73b0986cc35e6b68201cad54d142a6ce1bf2e65c9a73bae7d999181c1620dd2a60b08e681719a8ed467aff9da58ab5c0f843828f16afa665a613de4db5e7898fae719fbe74f3ee1502ea8013b595a3a5bb784f557112abab15484260a5def991bf8267dc0b3a0ca6d0a60050d37961528bf6822eafa8c801192cbe39ab5c738b55b18f9d22885d402ebc2ab6b25d79f7e2d32f79498eac63b2d8dca6330f3000a08226571d435019caa574680fbf9251b4a4a6b8b84322575697c0b39207eb2fa4d1c9d6624dd908dd5d617aa08b7369fa5f1d4f9f637f4b101544e406424b7df26003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000003f118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000003f0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000003f0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000003f0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000003f29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000003f141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000003f25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000003f12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000003f2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000003f189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000003f1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000003f05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000003f05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000003f14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000003f03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000003f2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000003f1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000003f1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000003f14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000003f2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000003f305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000003f280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000003f223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000003f17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000003f08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000003f2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000003f0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000003f0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000003f172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000003f0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000003f05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000003f137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000003f2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000003f2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000003f2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000003f18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000003f0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000003f204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000003f0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000003f1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000003f28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000003f1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000003f21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000003f0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000003f0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000003f107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000003f2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000003f09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000003f24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000003f03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000003f1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000003f205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000003f25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000003f283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000003f21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000003f094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000003f0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000003f1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000003f2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000003f1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000003f1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000003f304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000003f0000000000000000000000000000000000000000000000000000000000008100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810400008100000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d515345f6e61d5a21f3063464422a5e7180ff13a56385b8d9364f6aa158057176fe2caf3ed77a684fd957264b21a1fb989683060bc62840340631fb577167c2eab746153bf52618e5b166fb83936b7f2bf89abdd6318178958851e6265c0ac40c496c60db61e410df3624a285ca8fa37108c7e3d3a494f458f02c5fb0820f367f8ed60a489d201d9672d2887c705cec38b307a4329a0336337b64f6c95217d3b341a9fe82b3efb1b70cb83689f5cec702ffcf07f3ade6e7e2ad937519beb7aa123587bed5be7fe0571968a606073a6f06910632b5c0267f527a3085afa622a664b59fca8540661ae70b0ab15ec679c367491bfde74034779b0cddcef05888fc49629d6ce77bc92c94f71e8ce0049454f99080679c88d5144d473b21628a0a224074cad9f8ae2d5c34db33fa28ae3c3b95f30e542ff3e17d98fdb76d452ca68d5840ea19352e61aad9b9d59a99809ebf59604dbcce9b41e91193c426c850e38f0ddca76d0bffce70d3fde1230943fd415b5c08488c37041263e849496ef1aa4e819d2de182e70ba92cbd6ecbe57b8e494017ee79a39612dae24bce484056892842a443830935b05157ad22725d9be5dad0153d13ee9e42971bb58ed0d814cd50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000998819321f6b440ff399477f4eed4f88c37a07757a8dbdd3d583df8468caf0c36b16f4ea09aab0e491005a5ec122a10f0d93d7418ccee97f97ee2e3e1ae73bbfdfb149cf13ade1ddaea3b7c9ca2b7950215b59c5f8a17f047a628fec2f574bd6144ed32c3a1245dd43dc3b68e7f4c8a42fa551d0e2dc332b5b0752fecfedaca6309454ec7c1bb354e1373d0d7a63fc90d74ec1fec07a307f73f0bb892998fea6f9bd3ad4cecfc51f69020055e936239ff474d4ff20b100056a87a9da0484121b735893edc1508773d0db2291b3c7703f80b9122c44112528c11dc05f39c2857a66c1ee212c0f9bbcfd70bbe8f24148f5940ef4b20a5487fd3de0abf5e428b2b5a573f4f779e5b8d6d38482437d78ba8797f51f9b1000e875d3de7a5bf63d0bd58acce41c6e9109aa3ba134498bb95068eed64a69f1ff50f183b8ea607d959185c4112f16167fc421aad0a7224d3a2a94d1be776f23570bd600e5c50432fb01c832f99d6a92d1fa24d697e4369e266ab065e14a4b7b5e0126ecf192ed37a2c10a967fd0890e495fa3b7bf088a027dac1fe2ea4a496f0c4b9f9c92e21fc78347faeaf8ba30592597d8b0a8b5e002066aa7da61c7eb5414fb376308a8ad680eb28700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d966bada6b181342b29fd4e9661bb197ee2d479e0880dce253bbb4c548e04f20595b06503836ef579bc11f018e563f76c1378c64a4f19eb63ae1d3e425f9560d6be05aeb5ec676a22a6a1daad08f696599c0b2d7fe38b41344421d162cf1bd50c83b6de78436770469808b6a49b9cb1c5da54ebede8dfeb6dae2c52e9c335b110b983e06c1aaab1a7822a963e79cd2453dd78e4f7d0d695535464bdd959ef3af0b10988ce553cbc41e6887a0f2c40a67381ea322741af3ec76a9405229e66217336a8bc5e9e0a7e026289f373123b6c0c32cee3099f1514d0e8eab85873d8c33445bdf8a1307a18e8430c335e650a93fb39e5df70c45f81cdafba7371218087d4fef8ee29ba932d2341da65de93ca143acd85e11afd0d505a9d329301d2d7d887ee2a59bad275ec806f0c367c9fbe362105e18bf92bd8be003438b73fc902b30e57ad138cb4c791efe68738d7e268a24a24fffd5d3f8a5e4a09b31e074b271d6cc91b7bcc818114ce9cae1a6198097fb46c5d34ad751cfebadc7fae3e98c12d7e7b8f6685a80f2b2769f14bb3bacc1e46aff9b37c4a3d621c0d02407f2ab0972122fb0dd2e419fa3f8a6caf0ee4caab30ac4477663a9b025ee965d2d13ea000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096e7b8e5ae9bfc565e8a9aca214693c75b36ff6c1742c60a44a8d418ec4690f2e58855636f61608ab4a75969668f73248433d87b0da259b20179007a1e5362b2359d144877e1a27726975102d153ab565504e19e92ae4af2cc140ddfceb18af6caecc57076f0f94efa9501c2c2015030172bcc9ef8616c13ea08984d687a69995e534a0c6e7e372b73211c4c1d83f0cf086d5d370b53fecbb5f995051b170649c6cd5072c3628865962a968bce55cf817872888e7c6c4cbf7f70d171fdc6641fd48d16a4d1dae24c55989f9dc43cca68d16bdc937e5fa98f40992aea4c43ec41f7ac27c2fece610e986b22f797246ab71c27a2d6de7e3971202137615b65131a06893a9a4de42b183c915e7bf95989f773c85b5987b0d87fc593f249afcc5578d351b1208c5b36a802535c2e186e8966b9947ac4f83b17809b5edd88278545af576c6952a773a717cca41a1d0c5a850d11fb0da6bc0d4aedd2d2fa15095968d5bc989704d0ec45ddbe49011816f858b0b8fbd6b64ceb5702ce16cb66e6a4db2491deb5652dd9cc8826c4713ebffcf82500ffcce43169d280d0a5d24646eb7d4f0d8eae8553a7baae6a99566774ec9cb967af0ffede812836f419a4e4443822ec0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0767281c69711416a25d53c517c6636cf87eaf4b95178bac4bb70927e824eb97671937cac417b8a2fa6eaf8033888f2b3906fd66d79d62bffe1dc2829b41cdfa960a3d34cced95bad57162d4d4355b14c6dd790553d26cff6a1aa5d638a65878c97546155e133fa4505a3008e52c2b375298688d8a5a2027854106d014df16b0d8da132b51077c529dd8b56e9195531572dbb5a129e30b3973371974cb432c734695392f7a621688e0837cfa71c537f7eaa8de48e5008e7c53d42b394398ad27c4d8723f482d007e502c42a571607e918cc02afa503f99452c752e7a51d9163792b82bb744fead479c17da25a19f8240c349343b49527ca2c240a2d1991711012b203db693b71d114394f49527b6bc8ab52d9f3e7cebf57f5b205470bdf9a521c7e67136ee0c3590bcc7b06d9c0c36ef6c29bc33bf42b24b928866d9b4bc099445cfde52b7e08d58c469c06d5e18cacc1279ad9106a80b4be8827a54c731c0767ded7ed88603fbb4a16e0f88cf40c80516fa54ac0620d36d97fb5b177c693b820cef7becac76ab4f56fffdd6c1b04b34e3795ae38143735dfdac836a93ed1ea9e5784256420739ec9b2355847709fd614ff9dfd6a0645aea1b3eec405e23dfc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000906e0f162efabd6c52a7b34bba3932b8f9e05e8ce3f71c3280bf901f8656e0faf9dc9bc9254478875dac60eefda72de01796d6c8bbb7b12908e34ec1ea180974ec2aed129c00464c77832551bd66a96bc36afd09bb8b8e666b5fc198f04e897046169bcdf7f6b29c9b54cdedd270dcea163bdbb48c2802071c0bd4cb0f9bb48fad91406114ad8aedf0a32ebbb89ff826ee82d52c59cdd4369b7e37ac98c9bf18f38abc174e3627fc2ca4375b82aed8d78bd990e02426c83097f773c89d7c05844fb38791ce570a75da292ba37646b4d0436baae537829556bd887acb53f9a0533be96a9fce1b9087120c551d072897bc237811a2f3fd402e68b2df47b4814236ce38b639256fdc7bb064a9ca68b281fecccc9615ae756ca6f394884b94946d81bc775cbe6435716db5325841f6cca13bad5563e4486fb3a30f692f40eb10bb1ebc42fb81cae0391af5a222197307e74726b6b13b594ca4656c011ec17c42f3e9addc76708a83945cf715ee351a8daebd115af4670ed37f1d9a4b7e190524cf3fb40f82c36b2da6b0232fe5c5008739bb1dedf7c0cc166a27eaace936ee6b0d7d6f554d0c930c87e079ca907c73a3780bdc1b7f4cbdbe0e9adf115ca391a5f1a7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090cc6160392cf92c35c197df076bb61e8bcfdc30d2080bf9fd55e78a45118bd388830357b1b9814be86c839caffa9d7b41ff294f003170ee53602ff7d5601078a79b60d4dff39ccdffb1d970117707db44492263640d45abd2129ebd96cfa19b53a24dfec4db80e28978cd30a799f9e7aebcd6fb965efa289582806d69bba97696b5643615373904da6569ab9c27e8cd794687f5169b39ba9d823653bb446be86fb59d0b8710a548cc209cfbb468971ad95819154a30421740f564204120779f3c29b1d28c0468dda00783f25dc6227af0f93f180bce6036133115d108f1fd9643af59417e86d33b19adabb2a008348a49dbb8332467bd2f679927c4a8e15bd4605fd34697a4fc4587535bed0507c7aa9a201dbeed64620ec131fea25c5626975df725b1f646e14134fca13e21932c374c1773b6515d7cd444519336ef1b714aaa34f0611efca16915a1033e3192fd5b74785f23dbde8356c37f3ef12654dbd3b476b78a96eba4821c232863ca6a8f47a25f9a2956f7d90bc669311006690c2f3d06086d5a8c5f5cac0ec1890eec13ed77cb78f9844c7a0f95c984ea0d62264548ed0b8846f73878c47dbeeda3f93fafe8acfc24933fc824dd9f0ddafa7df4eb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000227412c3f321a13d0ac86bfc9113e27fcd9c5213a8614ab316a87d72f0fdee18e1f951a43fb5ea331298be41307c44e7430146ce79d0babaa5706445f792ed93a7038fb1449364912620a2e00673ffa924af8b84b8b63d379e973bbcc306376ab6eda06a3d6bf84756203fb1c65cae1fbf499745fb04a05291c13f1ee31a8456723201d47c33fe0015b5a61fd23682182c97792127da29facfef1e4609ad8ed78a0abe0668365b8b59fd3e443bb96e9df383024a77a2bb59980c3be5b0cf31706b648b2323258a30027856e7b03ac310b7fbfa205f91b90ba76c2fb1364accf75365b1ffbf06f0b013f1903fbe8f6a34016ef0f52feaae1b13589acf02736197465b6513913900d957523a4ee211a81ea7504fbdee4dc705db70e5b0dcfe652c455fb56476e143f67c34c06bd6bccd15f26b871a0633481fcf180b021297544a961e62898e3108a1a5fbedd30e9e6150ba3bd40fadc11a526f2f093d1d1e24d86834c97f3c89684b13cbff40ca0ef187ee27c8d1d64e3eda4b458d9a04c8084c6dce19b1045e6401307959403bcb3a96eff9626aa8aa4d7f4225c6f2000421d8534d030237f4c20527b8521f3e491ff6fdf4960a60b30e80c1ea45454441ff130000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000134646c8e10016bae19be23aefbec541ab0920e1918f917e70ac4065aa871895354b34062ad0c08c3c44f48fa6d95dbd3b2fbf05faef4f34ebd48183f30f93542937f405d0758bfa8163e2f73a78ef7dbdb97b23f53ca167f3b6dc1ba67b4a2417731c467045ee445bf2e42dfe79ea0ca0118be3450c164332585371b98b722e455a689d34b1acaf700a831b98feb6083415fbe0d43ffadbd7b1f5b0d96c317f05ceb3645cc91e730113f141995f54800e5c73ce2ac41172bc0a4fa1268cf881265cde9e95c2bc2d9977da1cb683c46c3be2b35e800ee3f4c7d9bac7cf886d26be02b6d84d3ee624d535718234291c28342f39f8d0534907add3c8fb8d16df0802a6adc0287c2fa475586f4cf409f05a53aae212da322724f52a04bc84a6972fa50275a5cbe80df83a1ffe3736a3a16acc95e520d9891e9dbdafaa9c5f16a09a9885a2e3eea37f9ee3b584cd1010138220c9ce88c6349058baa1621edb8b84f7acfa97ce6eda8746e7354e0de48fb50ed32204b66aa1f048f069d857a53588a4a8b015d5d4ce82fed4bf182ba23d02d69ce34ffa533c8ab455585227a4f31a2fd13cee92f0779513461c004d1f5e3cb77cb7dc54212fda4d6e62215e8f4d7efd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e28762754105829565d45b8d214a4c3e0c77d98553c3c72212d96b03975f095b5d612a400b688082ff497b0f0a7aacaf3ece0cafc043363e4855ceb6a73acfeec3210b019f4bd524a35576933ed84a64b9fd73b6972b6c82113be90bbe8ee3bcf40fa2308ce12c72e92caefac42a42d2a1d46f68b0013852a284259c7c3755f94b5e0182136f42c8996fbbce5ace32abdace00e772caff322e764fe1ddaf31b85238cceaef9b2fc37edfe4bade08abc1099b63aeaf15f10d47531a11e679e62920e45002e2aa335d1cbc70ff2048758c1327fa64801c5bf255b35401e66e93a34b1dc7727822d6cee7f2177eebca48f5d7acbcd51207a2ef35eb058d48ce5cd8937cf29939a25e1bae3757c58a6541112bd0c3c7006da8d1ef0ab1441b0fffce5d868dcd6d84a078c46c90989327563475aaa382820a5c169ebee4e8cd575d54292ce7bc5578e369916566f6e50aa2c256e5a6b5b759fcf0d20e0cd822545c09021af0f6b3864726f37f6330520ba93a75eb0bc589092d599ad4d52a60f61440354943d5893b5e12b8ccdab6856cac6b935873f8667b9913b9763e913d02770f557595ce0901f98f48eccd6a4f50fd3bfecb160077ef01a284b8bb39fe6461600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008300fa21823bd1fbffe651c70c3cfaa9c3048eeab4ca0e7c196ed7d54289bb5b0a9a13858c08f4a99b70e472a80f61d7c1518aaafd321ba2fee136ab795beb275e7b3cfceafe613b77f829c2c9e5ccb8aa66d8b23ff4fb366833903de152941c702a4fd37f8547d8e8e50cb0f047f5ab832ca3e061bc33709d8d50b45e50a638a8d07a1fb96275f39c9c727189995e9f0bdf3565673df6fe72e73bd2eac3fbd683b797080f0ffd62f4310585af546bf5f8214fcf8dd84ec8f2f7f258b86f4b9fbd127c51fdfcdd20cbf2f1b6e9648646a1e129c13ea9be9ece2e4f5c3f543962bb4003f59752c915d282cab9c5c873e1254d9bc0902f8e15fdc8c73833beabeee35f2d15d4a3719e7565937150900e00410d42e1ce9c1fc29f904827031be51d9adab0ee0fa8930760bba252533f1f57e3a1b9063ea0a2b7233dc492532ba702e6035d8e2c221b467ee4319323a310d3d1ff24b6fb06b86e7e6a2da1a8c0bb2716efbdd57192d8c8c986b864425695e3a12312be46306cb096db23b61b8873bf1a14fcb3835cf67ca7c53004427a021bd5445ad39b63ee56099fee8da1856348505cc026fecce14cc300b6a1222c4c4ab4dded460c261592246de42e2bcc49fb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b18def1bb374bc682022eff74d95f12561b068f843ceb076381c8c6d0bdd80858fa14d5b1f94006749ebe0e502b9228c8194cb607430bf85d703f553f5d193a192e7ad652dc2b5787541a028c1787686769d77da6f0e88fe9f6ee44cae17a2051bfb6ec592748a3bc5487253f26d0be15338ef9ef2dd3a81f50eee60a3acf333d91802680492ad60dc9df1978420f85dfec31ebeec4019d25b6318f74d4688355553f4dda6b832b96b882c34e75ff6bca866f80ba5632dfeb8d2ebc20ca5b400e3d74e495fed8a7e31fdbeef177155598e02941d51b0ff6d0e43b7819a457198d2f3e5c30a9180923096dd97fb80ae9e49df8d22d5d77ef08220c83c66ee63f31e95d6f6445de915221a39b9b4f18110a27c7622483e76bb55ee82b603cb413502030f2dabb7ca6ece41697620daa54b85d02f8ae8692c12b156a50187e0a5c7f262fc885ec14ec3dc785db9881b0f8ed5c32cea360d9d5c188357262cbd2bf7afaab716f822051e73ca005f7a25585565f6814bd8b2a25b7b6a7e12e10d777ed20a124483e5a5a29bd07b1ba81c6c757ac29e4f35db931eaa8753c076eafabe095027f01ac8cc83fd26aadddce7e00564ea89cea1d1fac7d6f1df81e419129000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081eb88d4ecbbbad685c1e679bc5f0a4ce4278503d78e6aa7efab01d53717920e7fde6ac5c56b24455832b989cf273c76db6dad757fd7234b2f541f9e7e135f6467b0169d5f028b54139dbe3a37d927577dcae40efd3656804e09ed0719efacd2033acbb7ebf332c9155babe89fbb5c1492935ad4035739d01fa44131d59d92b2af809813feb30cb5df3c1fc107c6c4e67def5b673f3ac5a6d0dda2637fc009857761885688faff686d056917fb93a36ff75a39a10b0ad96f964b73d2f4f70508c4ac134c9f55c76bca797e8f6ddb7f1a4cb0f5571fdaf0df521cdfc92b44137295724e42f6967132845661def8b11a01942520bdba393a33707ab06537cb77fe50fdd2970802bbf2ee3b10a7074236516c45f7ad0115adb823ce6acd8ebd3d085ce816f04c9bb12e606378c84dcad00516d7b5a85f19c4ea5e9d398e4bde482f2188dc460012b79fadccb7944eb8ec8cf4722c9b7519b6313e56c8b6b31c5e98ef1950b315a1ab3bf2a837237c1705b5599b65ec73cf84b40ae27aea9185c8594a028a8ad15f25a72d6cd80a6e220dccc352e057466e9c274262aa68604856b414fd9ce59e209627a9cfb41e159f0eb9be493a7e096ef391b783e67d83a1ca8200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d573da66ec7081c4b796a214261ed16c4722a5cedca4358630e73021102b340cb374764b3c14626bcafe9e22db6e51e5187fa6f8b65dee696a0f37e68d37691b8071507ca5827754560948b31cdc54b2d7b49ea9698d9faaf2b452d3bd727a5b1c9b8be35d1381eb71449bf3dce0165b2ae92baea90a8f03cebd5338d3acc17ee656ba0963966e17beb1bae8d10e0ac09bcfc2f93fa5f38f8891474c3aadacf592574a0831b857d2f4ce6ea30bf57e9c234d882927f2facc58cc43a7b095487622944aeda6b5cf784551b2f7194febe13ea35829b396be1f133e6e69598fe250dbb155dc9e25d1f68c9c43074174deea8504dc61fe245d4c3839e07de962874662674fd78ce9c0ed0c7131f0781035835392dadbb0311629c290326d6775ee6a7cd73d3b6337b6acd2546392a1df3447c8ec7c8aa24187203d4eb1840a707fcbd12871b9e4dd330042c3d7a037c6b139647e4509b19209e71c75ba88826dc08aef69a04f651e03d06953ee2f6fcf29b823f5876b649788cd753c78fb2394031b27196bde146273ddfa03994502a96dcc8368f69f3cd2677b3bf9e72a512926be2c058c07e52b89272d3ea7837dcc03dacbf35e069501e5e05fc46f969b7f6d10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038062a6b02fc05435e68b2da053c5b1497e9865e045500903f54e7ac947f8fe116f78c41cbbef2dd1aae9600a1f9fb5e786c280a553f19ef6d9dda8d404372164e86ef509c36d25206aa7bb5fe8b787d42dbf7379f208d2491f4cdf3bdc133956ad3b31bde03167fe2c6ca39f3c241e7829d94ca46a65fcad69e1d040d357e9eb7576eb66eac03be83052c2e50650829780d15ebd472c6b6874b7ffa6cc416e58b649aa5b20a5417a23eab3537bea2eecdefdce7840b55dff93c55d446045b308d3778e770bb3b58797d2681fb13ceef2dac60885e17d463d6c0fc0b1d5896bdd2b280e2e05ee9ec89c190df6695bc70a58db5db3c566483783259719718dbef7a4d5a16cd7f0f49dde6fa68fab42b5d1611861d5a90509429f274aabe5e82ad68c85d5f94813ef1dee07c81791c10b024c7508469c0a1371e554f8380fb2c51a851ce9b4734b470bc096eeab45d5ac9065db9b7c2aab4e674f01edab381be8c43c9cb4e1a411da543537cebd90de0221328dc1b38fa6e9803c5867d4ea0fcf16df12a20489e1e101c9d92af1eda30fed43b87912cde0c38bc76b46b0c2fdc08b756636a1e73e5ff76eeda021c7650567000d963e93604712f33399ff72ec5a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab23429b48e546d68a6e7b904e4334d18f29f5edb6b55913249bc24f7fc70c4bd43f1b1aff77e4259c4c2f98da53f96e5c1d9c1ff48697791aad47c4cc1d7d88cbe93d3186f372935d3cbcc07f25ef4dcca21a0445b79dd89ac4aca31f8cebcf9da7b9a6e1cff2e6a05c3764aa73e13be5826e039f66d9a88b99f63539fe0d8034586728e3328185696a188e98c7cd0f6eca7ebf148cb9e59f41641d7439896b76c79228e3492dc7f0a00acb198b95f8c3d155eab71a6988c12b537743817d69fa4bbea4539f1447a743378a5170892f0586db88ad02cb5cc7cdab973f64578c324da900def53255ee0319fe4d1a14f7d808574f09434b6dd784969674d42f62cfda5f6762fe7610c1f7989aec0d36f9e7bdf64c4de8ed43d9b5a40e33e3b352e21bca09f2d5852b0ba73f18cd09551f3903df54fbd5e8a84a630dea43596a9a915eb327a3146c44925d7494078f584bc20db4901adf03474a7652c44c997e08d075509ff8919ec210a429bd740c546e0c3e6ebf63d593e305dc090552b05b497bbf48555ca3d216933ff1e00fa94bd032efba7631c7bc1be7cca98ee97f45624a464927429520e073f6a32fe8efbdacacd92547e7bc72dfb889a038d550176200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a90656e32127cc1254fb35e5dcf934a781d81e65cf37e1a499657e4d9897000907a574ebde2525efa3b56e835a3c23af3b9bb320f7b0d1bafb3586b1c725da4c64f31d6447ccd06569d413e2746bdab357e62373c0802645b824492d873d76babac8aeadb0ca80b25ad23f09313ce4da14d15f5caa407b0d8da570dd5a8bec913117333c7c37e582efe04937df35441778c806299c48f527a09dcfc2a6fbbeee39d171da767fb53febabb2f8d7314c0e19b11bc1c01a67d148dfcdc2c8e36533ac63ee530326bcbaee7a963f3c3e1587018e1964aa6f3886839f5aebf5a9dbc15488401ed5907e9fc95e317e5a4e26790b9d8f997ad1221797941b57280e3c0d7e08e9a08bff6535a5f30a3733042543b82f9f4394585f589dafcffd5108299c82ad1c8d0579709c6ab181042c60f1335a14323d3196bf9a200abc36c9ad57a05fc3455423f98154b0711a4da95c7017654965a58a5971e65bcd656945d60edd38d29efb12cca4a858e8bf421d2f3152b180da491255b81bb657e51ef6cec5875f7473fc291a745c1ae353f11a47821b7c9ec791b580e32bad11406c407dfb755c7675c7c36761eb27495a8323ee5e1f9bb367641cefb241474fbad1de33730000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a4f93743db44e325bab740655a3498f2c20db1c7d0de7bffa4263e6a6baf4ee1b8c70ba648219585dba4cd775666a866c3c7fe3fce5cf0f82a969c2eec3c38d87927e6a16d556e762f35c132d0fddeae09ce28bd737c9126906a8a674451c80f9034a606f810694803814d5815729a75a82b163909d1809b9ee3639200543cbf90819e476924fbcf95aec7f0464decb5c3d4b1a3793c53a2804d052117486c8d499b92001c9fd5d043b00a0c0d1922f9bd8a286fea782f96e2b9a008c7f2dbeb031e5d85641e26edc7c238baa8b65eb0480cb74698b57e3f241398cf314d860ca582312cb4b1a743f649d8650f4558f39cc222313b6414bea7198c4a8323e220bfca00951a5af71abbb681935874a4e53fee2e100e787ac74823d0687aba5e8d6967323cea4e9e3b618897663428189eb68fd993e360a5d7d47b0c700f7ae591363bd29e75d16ad15b28ebbffb54786a5c9b99f532495db8d49e29e745e3c0b758816feebf63be9ec7fe272d96568978c7f041477a2c6b458ebf9f42d526ac3581e29160557f4fcfca204ec1fb5f65735b1e7c2b831d629beb362fba5541a57dcf243446caf79f2b42d07fac78e67016eea7ba63b27853baee3b73c78e48f000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e76fe99a8fde0a68fdefc0409f05c6c350e8f11eca3cfe5ec9bb51e64fa57d16bf8e528499c94535e48e809a47d9deac7672d96acd63a6b74862539feff30af852469fffa54a00d831e252d634ec9c36d581631566be962f38b2bb4e73ff4257791dddfff94f8bfae4dd4377b185369e246a445859857ec5e8431ea1907b92a7834fed27c57bc2d154bf4d08cfed66165a7fe0c1b031ef79e9d1e4ed226bd83938248be02733ad6c3cfbd4ec3c8adddf7d776283b6d39bc64a27765d1451fb228f2e794d86bed247d383f4720d3197122e28cb7f13d3f9516a223058f7a554b4e100925fa3db5c782cabcc1a8d0b741065b7a0f9347715098a7579a3094f24b6fc86673d5e2e1b444c7be84cfec393a32f9985b3cb38929e73c4e145635fa2e986bdf17744cf659c090b366fef3cbf9b80b1f789d7bef0ef31069101e8fc9a0d7ecb74db4d7d81d4dc7f5eaba4e9e835a89fe63135acaedde57b7d7c7f5bc9d8a60f9b5e1117898db94bbc3a32e5bfba35a898cad08105aea267fe31207a6a680f88d571086a6b3a59ac4e1e8f901ac42251863dca2b01f93ced92c35f3d5fe1d90d1222e6f40a9aa2d9a4fa70b9d9081d921ec20ef9b86955af454653601b90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860da662eb3a922669ec7dcf6a23b8984c820657306a80c30150a19180644256f5115e00ca5d34c720bdd238020c91c2b31aadec68b99e550000690e8737d068da343d49319a067d5c3803a54ec8173fb9ead0022df80a3a3757bc5d1b8c864cb113a778a465506c8bf3e6c496f0b67391a1fcbc9505f4a11f16d9069dde1031443187c7c4fbcc77fb546793a015481e7af7cbec28d079cb2fd869a14d115dafe449cab7e560db0abe04ad48ee1267fb7c131df6702214b2b169b867e50915a6afca5acedf9647c1159e4f0bd13a1d9a0bced6a7523fbfe9e88a4f790f1e1c827a5f790c12520f4adf146b77d9312377116cb482ec739b2c781607aed94c12b6eb489c4bb62ac80d3bcc73bcdfa76d268df2ac1ef3ca521fd25ae9766f9aa30e1033239551de611e069b2da044168c3347cf8f99feac1d4efeec57cb46490f29f63f289b771be58b8bbd9473ffea47189fb13704c37567a214d19dc3644a3191bcea1bec6fd76fac209138ddad0c83225812ab9062668a67e443bb174d7bae72af6dce5aa90e8dfd52dec7fcec6e877293a56fb6c29a5664c45ba3e5792e37709cbf887f4c6865c0a6be5e150e6f0506142882f7c589151a518c82578dcd8aa2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097132b2f248e71aca8da89060a3c57549d9c332d2a953d97200804ea5e3bbefd99a70f7c98b08550e594f1304ee508599f2ed26497bceda30b5fa3f3ad6fd6a977eca74a044767584aa3b644e58c1e2f258f0943b0440667049c1319310a950ca7e0f7859753ee68c12e4f1620aced9908ee12a29be390c16e8cd62d15a55b7d0249d3899a86af142a5acd22b8db89b56373a11b05155437b327947595928098e110f77c72a7b54b808d8b6012a6e139710cf35717e921a4f4add6f69b0e0b2f3acf66ab04f7d12925cc5ec8aecd01eaede625b18fa38b581616479f47e7b3f64b4ff4e3d9ed437ac2e2299484482ac0fb89da536470991b1067a55f9c1d4e05caf76a6236e0f9faa61f405818460ff2299f5ab2c561c553f678f234471deb1279b91d07990093df0e69bb142b3ca0cddcd5e1b228b482d198eb1f3a5be2470dd15920f0e4e062b0b95544549753219ab69489168f88bae1b25aeee1bc4a762869e38d96688943b334a327c4ba1229ee4f870b65ef7313793272634da7e00d187ac5b55b5bad15adee8384830388095e950834a8b5fe927fcec85330ed9369fc5d08f9ef49ed6b154a422b7bd199a6fb3b1a8ac969fcb87491b2129d635291dd000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d8a1f8823861fe3dad943781478b3b80e32a80a7bc5be2dc160fd059e1942708f2750d01eb39d8d958688ad5af188d49783aaec8bb8fef38568095851650ddafec87b2cf6465610fcbaa53692c35bc3324d6c283ae3d5a573d2f75096dca009dafbff96f9d97c49e59c22f1f6bb10a54ba5797a8b399c4373c0831a5954c924e2d64ac3fe6d801c037e128335d5e9ae08efb2c6c42f8b4914130a8b0eab7c25d8fbe27f15503f0ce46052714b078ff438856efb45259d1f929a367e8f07485f85608eb0b9fce69cbe350e97371ce5bddd94c4458c9d2141f4c940464c32a8165df1e3db154341e01f7694c1f40c20aa6368c4173690d6c5624478008756062d2d8b1d800d65a89aed73a20f46a5f47c3c8ea4414f8b279851ead6ef0e9c935aedda8d6ae9a5d7c50e6df7a3720d3e31c4082626ae9c19d061ca73e2c303fdc67b8818631c87d9a0379e01c8f0bb2804828a42922057e3cd001c12ac8705ccf6d03c0faf31e49e1fd26decb5c5af1c41085e83e719e103b15bd2b95f5ddf767336f0f7294ea99f5bb323d88278b51077c86666be2f66302f1c78a861a95f742de3f5bf78cb51b0c7788ec461b9c0d253a73d09678c9c60e5f8ee8dad6e97d5b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080a2b4f3c24d5f02fb425efb850e7d25d05e4af9e7381c6eec47a3bd62161e42ecc20c7d87ea9efff9efa083ee29eedd7b1f542fa30a5a6d7b6b627f6b3bf778884991c13a2f952d1df077de8ccb30c64dedab65f79e3f7a987d19cde29ed1b17f7d50aa61f40cfc8167912a99b97c26c39a373698e22b85e62f7c135080ffd3f0e36f7a4f43f27bc3368439fbe7266a4bf3ffe96cfa43d6cbe316406ff08da40f79cb45a9c41e5256816357ef6fe9a088c4bba5bea1c36d67f430f22708b2e73874fd176f608f31c6b84cb460b50819cdf37a2c05e884f2c4158088c2f45fb00e93b340b25c469fdda5761670e68e8a2527c80009b63599c2147e7388dbb26acc115063bd10b7a9297bfe05bbb76b0a5aecc9d83e53b028ec2cd12769d113a90a44cc89851f20f53ddfbae2ee5e543153075ff17b8de66c52930725b1871d1e9a8502845b75f7f908c5af77200fcceda13ecac054b39c399795c17d63a760337267cde57bffd4e601d5c91006fc517031161cff1495e683b5260cfb7476c93224aa3a48734bbc5e9cf95d4ca4cdf211190b60c391295ee9f1f2a0a23ddc29a60a78f4a899d9480d522e83dc4067540a8f6c95272bfaf819ed2cf49aaca9fb8f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001637ead7ac62f4b62dfc9d09409601dc5b4fe8b2f3f11b1701a6e3db7911a697144bae691b24fd17d9a7562463e3a1fcdcd567f317bdf45dfbc27942278fee030cf039a0370bc8530fde1ebeee69bfaa8281efa7c74ddd01797ff7bb0d02fc330881f7136909511a151ef365d88204b9595e70e53f0c10099496c88d0253fe12a40b91a045a9762d65ddf45fc52123e9d947fb3c3c584875994f1bec06f0af3433063101b9c8a071fe4696bc0b9d0b004eb65086a61ad6330c4b364728bc3964e175ff2ba200d0b70445a1b724b3a5cb45b9ba5c76a24d9ebeef04b777b3cadd11667a54f2c419f7339f8999846d839ff41e6b61bf72a5050394eb272a844ee17976ae17129779816c03d531cddb122b2191dcec8ccdb62ebe2d2a2eef2321ab4b7269604902a1e659d52a6b08dab35ca8197ad347357244ec547b7c99ad8a4cd3c4e674e0610ff4424a997e937c453612a6fb7b1df45f3a5370aa60547549dc6cc4c996d7ad89f84d287314ae4d8a7a8ce675767b89a640d4d9a0a3582879f79530ba94e53fd76ba32fd8641126e6f832a759a5bd3cb73a43dc0239ae0c00f006757d27aada4ed875f4ad4f3299c459e5e276a019d8dcd3c9d10ac000cf1d8d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f839ea7cd3357e6fe2ef55e21905e0dd47e7bb53c4d3a75f898d8735623babf4706d30134ae8952aa90498f4cb3f12a10934d36ad575876a9a2fe968158212312a3ee79121810bb95bb5882a79784b9a1f9b1877ec18302bc90e25dfcb8b6f59ff73b347af46f968598969d3f326f76f7c9813ef8bc60117a1d850b4d990479f2d6d6fbbdb6e5d66724ae70d99fd8fee05deee1e9412586702554eccbea4a2bd9d16fe81e2eb8dd0e37a6368246a57bd9f4804ec0810393e6cfb05995e2976102ff3e0d89660a935f78cacf4ed3c60bf2dba23b3bc242e9582fdc92e95abadd045ce85410b67d2eb85a77f9771f17079892326cac32be9b186a618c9637f539cd83488131e4be5259faafb591c5c602753a4794f058288b81b3e7825dde10911e96f35cb7195581918499cb53321b81a560d0991f21a0784bd075ffeeb120d63ee1fe475a20cfeda6b92168b4de4e36ead63540465758794758248151bc06cc059f456e97ae45dd06f6eb5e1792b8bd6990144977f519e1fc6c3a22ba3ae5b9000abd001087203b02bc4d999ce179e34c56c881fd96a4217b76ecdabd561e0dfcb1ba606f569ed298bdd5653b42389750ca673372aa9b3676fac4ca9ddb979a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081bd427cd0f07b4fa0c31e37ccf3bbcc9b8e204fa8d8fa4e52e07abad1490d93755447c7ff887b7b6b6f0adafdcc2b6e8582bf035354b28a13244ac01ca9cfd35bcbbd55a153f7f176ab134bc493b7763a40f3678f62e0bb3c0f2ddd2fa3b70b2c16321d54fd22c8a422930b01b635baf3fc1648d12cce68eb9600ccb20cc8ebc2c3058cbf187e529ed2d51edc101f79f14d1126613acf83fd64b9d1bf033aee9b43a69244337b34db76ad603a159f025afa7f13f29ed5ac98cb4f599eeaa95ad1a0875f60f41fb64ad4a215e4c648e52621983ac6aded3d5206cec9f8ca99ff1c7a7eee3f01baffdb5e2e4aa86c9b1fc37da02aaad1e87f5de5e2e13d3b634a5955728caec6851131f956daba726b239f5aa3d0aa4afe446aea3de5fa722af06be95071da847cec200d5802d204ef5904ee6c161cbac49191bfd51aa3a1321ed4a6721ed6ec0ce17798d4c647ddfa93ab8048a5711bfdb0dbc4bac78984650e3b7dc6327de148ebbeb1ac62c414ea43212c86f5792498886453ceb33fd201984bf2abe3ea76b1daf7a3805890ef6ac0549a3b51dcb2d0ea1c42cca650ff32bda36231e7f25acf5d36c9365ef772eb22f60a2be441dd6f3538028a439288ef19000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020df48190ba0a69060568572c1de43f4fc5c93335e2d8f0f08a530e0d3b48dd9a6e65b8047d6d39f48d0567da595998ce9b092c50bc25ce95d8729e27da149979a704fd98ef7d6130653915f29cedd47072160b904349b0310b5ea145e2a0f943ed4824508f24314babb13ac902a965e41ff4823b733412bb24c798abd08f4300765b6e3b09d18619b5cbbea7325650b70914cab7056bf5b96c9631a7e68bdfb088e61c63aff5cf746ac8749941786612abbaaa25e356d6e302d5ff0be446798850f019fa0aa9583bc858bee197c9c0fd039edbf2103d7d627896aec2cda2aada5c57cb2a799dde82b466a775b88a48a88d1e50e452832794304c7ae6df62613943ec2923d62ee8c301aeb79131866c21d0c9c68916bf39c4d32b586b1904cb1935babde68b8ca2263cdf09b17057b5de1a79b2005b66a1675946f1788dfc6f0faa715c2801a9611868cd046791c7fb70a50730084556f769bfdca177a1ad45262cca68d4984a9741d33248ee5864db4096a341eced03155d08431b38603730a3835810543c4eeedc38bb78382a189edd3c6cea9d0be89ce42b77c6102283a2667580c99f671b5c85a0d3a48508b7a0c70d02fd729b9a92dc54d8bcd3156c5880000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013171717ceaf25a28eb910527b49320002e4ed1b1ee39e936a79cadfae832a32b568d45e9f2a24b78a2eebdc0f21b98b04b068153f702b7537de6f10417e21e8dfb70f5c800dd4ecfbb19d85274586999b029f72760e067814a1aa38f0638cad6a96e5732fa05186c6a29f980ebebbd5c346a549fef8c204ec5f7d5dbaf1b94dec1fe8e71a9d26b93c23ba04c09d1c120cc35c349f0851136050beaed0695b3b999a5b109fa1dd1f1497422030dde29a534f06e4cdd30508becd61816fa690437a95454cbdffdac0fead91bdd98d7d78309b743509a5057ba940cf29c26aaa016bea2d680bf0ed1982b285e5f60e4b3dc5ce69746a68566d9e52e60b2a667ee5aab193ef9efc639cdd349250f510c4257582c2e1a1d18955e73c64d24441afe5770c4c558035711f945dd2cf14238b7db7ff34861d792176583d38912a41bc846ac12487145deeb20efa423f50dee0324a5760b6fbc8dee84e38ed3328b304a9c03160c7bd62397b5ccf94faf839d78aa36c96b3840a873fd5573c090864f0920e0a7652f86f84465580e659b02628a26dd87cf60f0b198e844e763b35bf603169e018b8547e1fea03f330c54b9eed58d385deb9240a631801f8c8ca672f91d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fb978175be1c240c0f532f911551f92cb31a1d57baf8d4c068f9994d7d23cd219e04b33559ff6e4c73b5d80c4c33a64460d6fe8abdd77872523c760b62c9d692f17958957e498e4ce02796516af734a262852ed8f5715e64e6920966057a48702c9d5a9b8d4b31cf289eac59394705c9f70d54ffc05a867971c8eb25e286deab3026504b4f54a96aa830ee46b62840db46fda00e5d4d0d73035ddf39824ca6030a68971a614f3be0afaf9841ccb8ad92f22ae0c59a522765fd87aea3ccd62df1e11f0accd2a988ad64348d1fa28ff20e47fca6d3118c35f21273a1d479d40acbf825a46e315802d3e857ddddaeb5677d565a7309816dce1e046810d62b2c3c85eb97aeddec60652e22f86410621a041b8bbb77b01468c75ff82b1a29c73a3ee7f3706cf5cc219576058b47639b34ab0d0d2970a62b3a89481caa71d37e62296b38f8128a1af2c6ed52954c76f67ea58b418bae1c1134b25c2cfc781da64289d5b83b7ca7bb87f3bbd2d06640933fbe61341799bd4833cad9e75baba6c36f817563b2953fd6dc8fec83c716def110b23835ed0a08590827ee5cd5fed2018cb35876150f6c1a6d5a994b03eebdbdf6ca76aabc317e859360b37ae9754143b79170000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1c8bd080042c0eec1b7cec807cc7d6a963d74a220ab0a8570d4db70c4b71a69516075d3c095ab44caf3f970647a00b869a17965712f5c5fe05f5c28d5b6084cf910887010cf5af44a7cf669a6e0530089374469a01a9177b26e9d7357efc900a227376be80ea2718d930d64af4b3c22c34507938000e59afaf94062521c23534098356337a3ce155731efa18f84919b50b1a3fbaded9e65d0a4dd01a0773a1403b62cfb8411b5bde3df3a23d3f3dc1dfb73851ecf3c62ef250b87898764a58cea20104a2b6976893226dfcb0bed53b0de584e19d079bc05495d3e770e9676664aa60ea3c7e2bed2871869ea0d98433dd6134c00e5a2c9700544786ccc13826553ffe2d0ccde91f81d6a5b7d170f82852ed2ab401b41ec35820deba982cc56a0de2d7619353a4fe4e34cbb1c661253ee25b8aeb529d690069721d7673654a85eb2c00af359833b89367d1aa51fefa554df42a11375edabec0059206cf8c4fccdb1451e7ef313b9954bc3f96ef995aced9f2bc27337c4b1093f8486463b0f11757d61936405835130df59ed92e20990a4fa253664b508225077dacac3f9ccf91bd152f40e5bfca690ce1dbaa1f31a4cd47deb353156822af59024a9ed43ca01eb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024b0c895c4969f41faa695342cab08987500f7d30b0ca52ad561605962059f140376fe18a6f8c1b4f0808fc7849022f8f855ab03adcb7e47109156b61e317c44a36f9a0c349dd5234e144290c8cac7524365af9ee20797b58a25c6e010b45c61281b21acd165926cceea7495b042e99cb99ce6b31f88aa6f96473222cca0e6eafaa7c479fb064cc5d782bda17de68e831db19df44856520dd01a47bb68b3fc8ce91e7f77cf81a8d3c4362c25c4c82575b029a23a8fef3ae2bd6b058dd5d7cdf88853ebda0f784cbb4c037296df2e11a7badff48937becfea77f4769e28285ab2c16ea70a50bbcc4210515b1848a5a4ccd761ef7e30c9bde66a98b6a3a7b0bf5e3fed26f3ab899f6c08a4bccc3ddceaf8013ca4a97bed316b40738c5d25e69a3e31bc0ce2688be51baf772f267a1a9ab44bd91e536af29d15ad3e17d569e6fabe67e1612407b1eb8fca76b526eb5560cb5f856aa7d2d6cd8c24484fb4a8a607a82f4b641019caf77ac3c00c365a2530d6649f41017e7edd4649fcfa6f7447c5682d7a06e31de9b9aa71bba829dd3c40c4960a3739e5914521a4f66d073ed8e0aeaffc54d05da82d3b20b7d7bd3e1e5e555ec121acbd21c6de27308145b9c939b6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098de48b975e5bf330e554d474fc286fb5329efa85b1683027acdfddf049ed7a5e07bb57d8291567fda6dd9a643f53a56e8650461164ae967b225f4562931390bbb6f5658a474fd561f5ee81949cb53ed297c2bf7bed054ab8ca9d0abd28287a80d977726eb80926a41dbd24149cb35f1774ac76123f4537ffb18d1ac83ab7981380703112fae4801669c3673ebdffd992c4b025bba5e2d7557b0345d2b123de16d09640a502c7857f7bd2f2dcd8da1fed366428b65ba1bea3f3fa5707057f7571707faf9cbd1f5d6f3389b9dd3a19965d698c6a6abdb35a5e78493b8e0a5b2956e74f68198ced61b57d1e36f9d29cb9a1abd63a54edc56523c7834ad595d1cfa270c647d19e272976ef3cdae2e7ac8b78ded7e92f2e6ef7b1c7890291ea7672fe05462a0f2cc1d40c452e415328a699c4addecf797fc5d29d5485971134ea760670abbc54d34148037377659d0b0eb9bdc6c9670aae738edc9a282cc131b1cd267110db7097381df7145ecefde533e6ce7d2adde5143d2f763fde8e7d5a770dd9821a6eba3dced76895869ad666d483c571bed5bafda137bf6b6ff4c5bedc220e5f73ba40c10ddf635cc98ca8077fbd5a37476f8cae1d6c8a9ccf9c1c8bd1a44000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023aa1ad0bcf8ccd0a356dd538ec6f70d188dacb5dd4f07541e542d7682341d9f8b1a602b71064c02ff0e4c147f042214e07b4d077c20a2601db2740a45dbae8b35d547186ab6d713c98d5347b5efefa7dd91cf20127499f633cd2ba25e0e7e13b48400be8297d55b22107c6f484528c46d53f535860bd2b181303feb18b3cbe945435900ae2e924efbd18eca39051b512a52d9f1f18f549b16b21fb2e7ed2d65eb8b4c3ef3ade82fc4aacc1afe9ea13c5ae83990308aed79ce0cfe292c132e0a5515ae343c7fb2884a722e346547072132c3999a0883fa5f09e352500d7772ce847d40461af591b7a895ffb6aaac9c4e74eb1ac976398b4f8ec30ebf746f50fc307c281efddc09d99ac0b7cb1e45282896de7ad9788a11e345215af848cd7817862bce88f4b16b6767dcfade31d36753698b7efde4ccf64222f0ed288f67f7016a233447f6dc844acf7a85c6e6dcd2e57f0230143cbce037c1c6e5c21b055aa627fee064b9bb6978fe4d305d472f99fcfc90d670d5a28273098ebe8370670ff0c84229d9edd30051cbc5442e2d0422e8df4407bd38d97ef4e85665748b743c8dd01e835be6fa8e1a110bac1b93c96484c2af42df10c5124bc78497b775174c4a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d56bafbf936937e72944a437d61ee28c15a280b43b0f520dced5aa59975950b7cf2f4f212ad59176c66c284845476c65fa17c0c5f53c0d667ec26d8766ae25f031714ff370617f77c9f54e199a2c210a5820e862845b32a063bf74dee74837ba0b5393e503d21964be2725a0d765e94bb5f7489bd2c3d4669ee27ed33db8e894ee4accf10c644d4170ac9a60b36474a7905c46b87dfdc60c10de60f04234daac158ad6b1f1de89804305052f2e619ae57f80ac3bc722643ba255c44bf31fd10be496380eec36bc365c03c8801a4fc12c47b66d6e0c41da5f9689ff9b52e8e20de4d906224c841492040be2b09c3d67819cecca0a62c81ffb96923af387002cf2098d7875deba4b81d3ea3b2f8d3638c1b3aefb94a64825f854d1dc945159e82008738bf72118b7260a917d850718c04a339198d1a7d54b853b7537f2a8213edef92aa68c419279faf4d6748b6d8c2df0f083a21eeb975ffac62adc1926df700a10ee3c511cc876ffb9aac81b8865504a6465b88e7550073ed0657ec68aa5c795a43e040c4248cd104eaff37c2d3ca9fb92d0b4d251b82344230f1e334c1078079b9d1612c4d9e0cd3aa0b1268e0f5dbd8a4e9b24e3a4c1a7b25bc7355da55f400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d424a01560d40e01f22e559c8506a49563f1cb0ea870e9da0979d889a27e971aed7ca4d1cc67bad2f06349437df03903a4e90610df1f69c644291022604052a68cbd3244c81765c35b92391860d7423a861d05a960fca8ceeac9ff0bc1ecd930ef140b9ce104c8ad0253857866890f0d163d1ea0bbc48cdc82faaac11b6c8d293ab78bbb605e46b078c75774cd979991174eaedd2aabb8cd713376f55d2aab1b0f9d65591607d3312b001be5d098ebebfbf8d83f3d1fe1326160cbac0dc8e18bab9cc4131394ebd70a8974a6473a818116e97bb9fb7276ef5e5e5f43a5717cdd71866c2525f940abeb2f8236584363410b40a77a49bce9e118d37f9bdea35546200e3ac4bdf3d4af88d62942f6a94086ed669d9934cd09fc3aed77f149466df164dc60ba508dd5986b493d2d39674c61fe3c590ec4400e3fa024fd4d61ed52948ba245c32006957941bd551eddad202aca296ce073cf469370aa8434cefa22ae684a115372a06576a5595ff02cfeb48b1698a9d26b3767e5c5092cc718ea92640709301cf6892d0787b75b31885959957de613d01217400d8a6ac7e94200dbdf39e365cfec67806b594631eb8b8c5c0f9176b33055096dc532638772c6e157000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008074722a0777d2bcbf8e32e91bb17cbf3927deb678a0d4be05dc7598593cce058d1feb2f17b8a1e479fcd5d112de5be3e39bc0026a8a8fa42eac000b38787c1f89e535493b52be8e0f299d9811535df9da94bf28662673b93d63152b3c1205e83f7fd53888b0f0e49ffa492dad3e2c7ed2f392b0d06c0241bfd34fcf310b3ad77508e052b7534ea77f96f0abd438e1a828a75643f6c997466ace10b74712997bcbf987e28408811c7a3ca37b2a4f3b98ba99b479bd3edbf2693b9f83f49e0fbcaee211ab88009f618e5f7e3a6d9a8ccf880ddd171d648aa0a9d13a5d1410c3423f672448ad21843e1d8c2bb5ffe1b0e0e7a4b4118bb972d4ad8c89e5bb8dc88febac173c19eabc446fc3ec6f8a1ff0efc3902d34a80952912469173d2dfcd5ebac9e717902c7fd0055f9fb0217ba633c67d2fb2901a3673addd7bacb421275f1dfc7bc7ca4c7f5869974c9cb0ec2b123a237c321fc8ed6e3fe71487b8f698b7f2419ff7afc477b9ad625fde2ade79df2ffe1f90bb752b428c023dc6bc3fc4f7ff583d039bf22dfadd4229328cbaf7367cdd84fffc7b2145f6ed4e8221458533038434ff13badb44d60f953baba9213a1d899da66c3c604fe8d76155ad0a1c83e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a65f6b228779e8f754f166964a5d5c4a29f079e032b6c07c99e26a4cea9140a3976160c0831de51f183930fae3fccd6ccd8cb6824bcbf153996f6ac17ca8c3c6892821a08b1a3aedb535cc9c7dd1576c241468ecf1d38a6e2d34337d39cb4a0c8a4f16e524ebedf5c289e6dbdd24981edd9b23ac8aaa97953ab67aa65f15be48fc70e77f1ba8442b3bc4e1e75e5a0dd5d51c2463760d953542501e244552c262a7701226e270dfb671b35d585c70ece3dac5888d8cd82cc95b80f1e8d412f4a203a149a325c6125d5067e6a88f6f4485ba00b80daf0499dc299abe2f4b886f082d194cea24f6fc5a3376b1c46cb3e94e547f2d83f0fb65296b41bb0b482a9ca7c66744ab69a852eee8e073bbc97d80e16ca19ef79b4627e6fcac12cb0db847acf4930b01993da0fb26d619ccb8fb454df4263ffd909ebb3ec659ed847a23bbf3b22b6bf5f53aa50fcf2a610c02cd592ff9f69f85ba0477a0249ea9612a7a7b97699f6890134fce439634400b667d6231ee3f33eafff9009f5531c38a003f06dba4e65d0e7150e107e094aee114a6905a618553a6f8b92e597bf3f7a19c94997a8e8bb4605b9521f9a23daac7be3ae6b505e451601bbf282a4b91389f4bdf5e5800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a576889c6c081a7b067e97763736795b748c6842b70d63418b669ef67c5147054e56bcd54f30de3803a8c931e1802da68d0a78ecee39624d1e1c78de741a638a53351e95fe3f8a27ee3f470076781e56c52e65344a9d516aa41e32d1905e2b7305514da68910403b06d54fd07516eb6283d02ec7f2989f461333322c210e5d59f828dbde78b325c7c04c63df01e1a48201ea3c8f7d1d5f1a44e5b520f4faaa15a3f47b13dd2f9d06bb82da0c6204f0b00473894b679b76c1d0121161b1ce205e8e7b04b3ec4c4c40f4672bc58a3b7449e3e344e014e945a8c8eeb558514efe10baf1b2cf9858e4c0d5f9100c15f63e4579671af16aa71570ae2c02d55b47b8a3ec779a105aa882a25e90cf015eb27b9853e8c3fca2d5a6c1f762c0e4c42bb744e631bfd0c511df7c94e6a5fae3e9561f463d05a23d7af462cc6124963d8f13904215baad6e8c677210fc804048167f540a29851456ba989324fe2cbb15b46c29b0fd2be021498e89aa477fa80221c07f3de6484f4a9b2d132b7aad7d1b8a67fe1ce8a0657ae56cb5f76c4efa96b7562fdb5f1e59fa30c103b044ba4b272bb413bf4a4552f97a971a71dc7c912c6478baedadc11a030f371cce394e29da9bbbd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fe7c4f5c5f75fe02586df9b8767d047c033345d2f8dd021bf941a67d5c407a19e7fe30082dce7ccd52dbf48057e509dd54e875f41856ad3170991df531765528030ba5d4081b5502ac54563ac696d4e5eaf6ee9a63e89822c90ebf149ccac05cc6c03dbe9c36056e355de3eeac00643e67469dc6652be20385c767ab2d1f5037d5cc94025aa9b7421a62321c4b758a2313bd3c05eb2412a532f0413fb44ff12038de128c510adee9d583a26346c6cd6759cc16785209a2f1051c98e1db0f86ce2a5f08a186d1a68240f76075bdc104bb1ebdf763626698024fab67ab0d7b2470a051d81d8addf0ec7756be85b81c581f243b9df612c2e32fc131353e49392c7143df0dd794acec9f521aeaf81ee9e23d6e6fe592ce63506d3a08a6ff3734edba6712c54522732b0e8bf0857fc8024363beced3ec1e42030df923910450d29d52dcbf0735c47a071050058c1063fc36390b83515ce5261da35042d4c1d4f8f3bfae91e916eb80e3bfd0e450798e53a0fe701a8ae3ca9e317fba942bf361b817fd349985407d85e6c8a3d773585636a0760005c83b5566e9786802c585b46e45eaf44e53b2b908a80c552c98d41f9962a4b9cb635f276085960dd770c8726063500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009eafa62c8ef23a8d062c85dda1ff6c284769dc1400943646aff1b696cf49802a142cc37bbcda79143017c3f96647e481a489693038e08e9d84e41e4d4e2bf17987195b7ab11cbbe7ba2a3d74742ecf07220fc33dd33bf32a1412f89d5c94b45957ea426bced6634d740bc5b2a6656953c09ba1dae2e4d251045c42b1508d8caeef064e1a504e3ecc6935dda4c410b1fef084c16f7326cdacfb6ed9ea8ec4b40f277aa5395f16ec96debf75efd9064b67b2b90634e4000ac68b460ccd8e190a1ce3b2217509dea725c7a01fde76236169d8855db2ea875f72a10f975557879956b7809541fd5d168445a16ebb211e0cf99e41a5b444aadda39eb555fd2590d82eb93eefd2c142f5bbacf519ce093a2a22bdf75b1f694bf8855178493f47f9af626434d19dbe9a02220a101d1c3d40247dea4eb048058b84807b6e1c6bef5fa768fb511bef4c78ec7d3685fa3a5bae8b6695fe930e47309376688a5b1fdc436cfb789c1d5100e4d538800e6a22788eb5120f4a0f6f4d91b9419c330279531148df65ce319e6c854d40ad13f95adbcc5d0231d90222ae126eecd1378b53fb613cabd66248fee4423914ce275d4dd500ad1d8519ad5316a4c9f0c082595161073c260000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000acc0e2bb2bc5821dd21c86bafc419398831f85dac5ee16b2ebd7ca8b252f83abb6b265ea581884a241ece885a74d67e2aaeb8103f42e21f6b0aca70d09356b844aaa860751d565108f0850f04edbef248c9f6f2fda763a26abc844391aba034a779085fb8d5c12a18dce4f9bf5f4f632d6216018db5fdf1217b838c49dd4c12cccb537d91b0e04cac44aeaa217eb031c5dde2b0e5f10870ecc9c22e4badbb8c37715a98617bd2cf65580cc0d7f6caea6259fa59039545ac27700e42dfd9492b066e9af8fc9f03c01667e667f940397c774da4364e003536e5d2ca0f780b613f748f547df761eb4b2171aafce7f9fed3874e6ce00787febada082ac9cc0ff090e7a22955b5fc464cfcde75aa950a8103edb11e011f305451ff6c0b9f27a430f90b72745dca7f36fcc6e378f83822f7d7fede79584c44f468d6400e77086a97baaa7757bd311fd185ba7318698f1f3806168088d043ce87a3eaaad67cf6cb987e077427aa3d120905b23b4bed2a31cdc7b8928d96ac7d7db4f7e97be2fd7d64b3daa4652d7f26e3b1eb69afd609382c4d8c0c7609a4c71f1357b17c0e36a3c8bd1ad6f2e5f53742ac8cea96ae504bd6c64ef7c762c856892337ecd56a5bf2a782f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092e4f76949fe88637e9d79d8f57462898bb4dcf746b5ff5d64ea223fc9cdcccb12dca0493abc2c9779267c5f220f29f8a324c1a4b3336f7c78106563ba27165ac7b8082cc5306d2d4b2d2498621a352b008415ee210bfbbf12f1319dd2a63d882421d9f837a5298625945e56da4d744eaa451aff9c6dd4abdf7eb95094b38d676bf82a6bd47268fc393182fa625ce3ba34712acd4b0c197daa18fc6631fcdffe1075a32be34148c3240a1e5f2da6bc1413e8ec8b4781343472dc05508e10300c07d44d91d70724d2d8d3a3ca9b33c417ab0a58e7ae2052f7150353ab45cd04d07672dcb76bded261437ee1a6a0394b402bcc7ab988545c5eda194bd2ed19e6c7522e885a1c06b0f52e472b162a42fe888c2b53916815591b612e20674bcf42dcd474eea986b707ff6fb2d88a58df39a5867f073edca535f6c4947c75cfd0c6570fb9edb6310c7cc9726c23126d4f6e2b5a2eae889eff65a9cae5882d8b46582f1407b9141fe81652838e5169c0f9fe281eaa652e787fa2fc5ed3aeaeb40101fe054c9c885f60197a0fc398fcab26ae8d56f2d3aec0f1a04a8446b1de2ebfdc9760e05d8afa21c291a869ebe37954aa8fc273c83c378842eaa432fe7e957459100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e307d3286e4670ade6f1b3249c61c486a12f1720a3f412dac1865d93736abbbf7f2fa17c1516901168b1dbfde431d33dd58ca3b2c3a229857dd4a74fe3e8bdc5a64312c1d98a2c4e6c46909101a47898570667e5beec294bc0711ee987258112b90d78e3ffe557d32fadf12087d49b5d573736b29bff9008d2221d91574594c77c7af0713470f523238ca2020b0e5282f1f56736c797f83bbb0c6a182a9751527a2eedf62a4509762121b70cf13b422552a163c7e4b6b95c6ba790dbef723e7a07942c2dc1c270408e5588b61f6c0c0a4b2505abe764a63fc9181b0993df4f7c2c7493a5630ebe6e5fa1547013d9c28f6b5be2d7108d0fb025b8651c14b0ce948de795d7a1c5ee3f4729ef2730d9b70fc478ad1894612969846e5da10c84ff24f43cb2eea93c76d9b060894630ce890ec78ffeea27d53bf1a1c7079def02be4d094a3359e61828bd14990570dd8e05b3ddabc8a68fb655bc316c718359df49f3dd78481b8ba267869e0301b0284e13525966cfa72242331bf506119d6cb87fca446b9f7bf16318069736ba0d534fa53d833a7c3b98758af856dccfa37b668b11f55c380158272a2649167e843f4fadbd808dd2cf12d6c8ed889ef7a858901730000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a44ffd144ae427eb915b872b36021139c3dc5de1342bb281e62cd965b53662ff163ac2d5b15910ae35e80117892f324c24d4e3810894cb641ab646950543b3bbcc341b108fb56926c974105c2a076cce23bbed4a65c4f2d60e24cce0bb180bccfb9f5959f81589d2824ebc4ca20811197c26725f3cf58cc9b9e47658b413a26a3d7f70b985e9396effc84a7f750838c39d199f133a90c6c382c42d0d81243528f8bb03841be7d05037464c42ab011966633350dae9572bc98e596fa130f78bb4dcf9b3d968cedd503b8c5c55cbb47ae75ad4cfd40a56c71e783e5d504a9f11acd96552670329f1455e380370a6cf916908cfd0d487f7e8367dc4534a1322d3978d3013d3c0d0a7228e7fe6baeee47ae6124244df2027d72e911cd9419023999a0188781ebc2ae16f8fa3a9ebb3c2f56e2f9e2b84a277fcdf1c4bf01432249fd0fae81d0dce0d697b2eb886ecace9dead0826a904e3d5aff811d62b0c48559360879f43c72d506f3246cea5ec26c2fb5e4829f7ed18c0ed489e70bc4bd7f306a46148aadd2aa0fb0239913acc2880ac3916c152dec0ea24079bdbcc85f78477132360eea73bd4478c841c62fa022e10e07582f3755a8c248c2685dad19a73127f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010773c7e994136da31304638a65b9f5a6741c3596104346c3c2f4f470239d15c59e49bfab33aa18925c37a56ced691a24d955695dda9b9cf349b4851e68ff52d7e44ac50cc11f4430e81c4e65d0838f5c5de449c19dd4d2f17edbf9435886b3b0ec906c3d4d0db619341fc24a7042c3d09fe4ba48ac1be5447361d7a3a846cbbc0c21cc7ce39a562684458e8ee7f5434bc84a54e757cc1cc30b9180fd642be13ac44b33d018c04c8782b2a47d5bc42fc6964ab34113ee696ea88e7fedb392e329c97f0dedfdb58a554fbeec44e20a3b26ba37917bacf583259b6b7ead47fa983c176910b63b23f91329b6e5062a1e7d9aba381ef4ac2c83f26c31d16fa07442185911d59ce95dea9f548d00b4afda7cf8580197383ab8b17a502acc3f7cb9a3c5426b23ed657076079b56718e751458e1c3eaa1739b4d064a19317dbd3c597f65bef60dd31e64f6541ee372f07030897fe44207bfd5a8698829be8016936680efe48812637d6d200cee659a5d3188eae4f77c6a61b702a12b624695b4e3126b6ecb4eaed18799d25ff496e153b69ba4b5ed64f9fa464431c0d8613bc91484b048376f5463fff9856338387e4ddc51103963bcf0fc544450d7c3b71b8e696ffef0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000218c2dad09d6015d248b978322023900de3722e57a2298ebf6976eab494c9047028c137b8488366c26a810b0217dba0f8309dcf6166bc194e41c48c57b994527120adc93dc8deae204d9ba3765ce8644f1516bd1e223fadc9fbbe00c9595990f510e268f30d3df2846c6ce26b6967239741dccf108df425b1629c5f829a34a858166f70a685af9deece1fe3ebe8680591eb3f90b933b96fed438e9039dcc5f4614e22544bc6133a3521c67ee6f50eb236dee04d67727964a1acd9245012f4e60bea7366dd079e06b04489909ec319a8b1573df2613fb73d78b8a3c3930d1e49f54acafd69f9847a507679b5087505eae3b20403371be97139ab330f19dc78add398cc5949fdac2c1cd2fbf3ae4e8ef46ef8c2afafaa863c8ca5686191278cce5e7995e356142cfa9baff0bd1af3116b96939e9eb7d6d4b2307ebeb547d2e95dc227bbfd258bac744648b5f9178ac7189e148eab0a544b6cd68dd8ba0c483daf4c250c8b79f6ee28f2003646c8e17de74da044756ef97f6ae93c04bb8162b894c9252e006ad2a764c2601013b89ea4742f20952a70e4432f85deef8ab11762ab71ad57f0df0e256de98f96cc3a45e7b548dee45200022ebab0090e15fb49fc3b3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014e7055c34b1f22320235e1b4917fbbf1e6e7d4f5f2abf2a438270440d40ddcfef60b65631d41c6a83474aee741fa61b3e8ae6589a321fc09ea44660a570fe7fd7c18f1a2b4fe3f5cb1b5afe0d44eb23700923c4765fa194d01dc007994a7f1b01ba0d9dda99a1ae2972a5a35b8155aa104e6dd91b5a4ecc501e1af770180406de4ddf63ea3873e1d98a54b2f214daec894a19ebdee86f82708fc5f7093f9cb4c3363ae64683ac2a0145803b82682d0a2b29db87b5b7b2c8734800360e99532215fa664136cce44d5c83a203337e008bd9ffb29683eb860ed73784d7768f5c637ae0f5d6a682716e20c761cd4e8f90f418c6c075667521ada6ef8741a8a64a5173fb8f6dd3ddfa78053d7b40cad459b29a843f8bedadcd99ba271b9d11562c8cd30cd385d763595b91e125cae8878b69356f76885cb4fb60f231bcbbd94e5af4f91156d8c2e40aab070b61e7ad3faa4c0056e7d286cd6b588c94968b36990a1ec106340f2cc15910d823495e8922dc67c6403e17643847d712e3ea181cb26eb1366b6de2ccd848f4d0268236e741361ebe1ea3c8634f04b1f0b5f384c523f1fa2f2d49d9a8c05322f7af4255e7e36c694482b2eb69d6d613e4e9514a175a4f74000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081dd257e8c9f331f5ac45600b0baed621c44dbe5b31d66018359d06beb72ad528f985671b908f8efbf8cd3adb8eff506eaf89f3db776d75640e60473fbe43996beeb72608527ba0ace287bf32bd8512d966274a654d1c3ced36973e845af1b930f514454ada2469fe1659f09353630b2d71a1e03ba4bb2ec4a5fb2712aa241f0233f5e3906d0617a2172e43c831fdb38aee33cec1397f170b479cd0552c6d40e0ce9602267a2999002ebc8b07b14dc44a95e1a33de2fd941999a48165887d279ec4fdb69f2c5c8da88cbe14950f89a27a7128b7eb7bdbb96f0d30ba1b4387554ad6464c45f7379a76e7cb3bc50154e71653a295641051d6b9f094d86f93d0f759499ea75b77f037541b94da376fc9ddbcda7a96062cec3dfccaf3de3b2fa722abfb6aec9cbd57a3d6487cfbeac7f3d796c9a0164c39a29e5a7a88267061f6bf72a224077f6da59baab74a0fa60a6904742d308a13637a7ec56b9995aaa12fcc57582ff717153b57d5526b265a9c3319c336d4d22873c09e9cfee45a6a6634439cf74a6fed8ea5e04062b2af1bf15f88db4aee29735f915bebdc6b8901b90544cf19cc9ba3e6c1139c8c325318d24fbe7d4a799a1a067725a66d494d4b47782b000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000668cb132facbfb87e296da60324091e36f8c9437421c8cba290cdfe969ceebbf10f4cff1c4a56884ea91c063adcbfec062f4f94041ab644f0df94e5ae82be47fdf45deeabc8c8fd9c46d7423be6a2ef0cbaaa2f8407810d090a9788728f7d0a4ab1a8b2fa6ffe30c449e69435b1f3dc21e0743227182a2b5104b6cea10801b517ca88782453b2bcb16e55250ea41be8f943022e74ac52e503b0767ed77b7f020032440388ec810772beaab9f205bf58164aec28e1eeec3dabef4400de7ca63149efd67f7fe388665660122c4eb8a609a0d014ee088b77bd09fae6d719efcfc0425bb588aefb846aa9abe9ddba6562ae9966af9abcce392a50a8fe0358a608e629683d77b51b0d8d63a8ade5d11701b4886bdb9d525929e5d7ad2aadf11eadd0ae7b39a6f326a24762fca4c73e828516d98c0e7746ede7a7dd5a53f97d1a57f50f0dec8c719ed74cfda1e9706c02bb2ef642d51805791423cf5ac6818cd67bb645d8fe28af706fcb2b360cc9770db1c0a41f162104acb1d454e2ffdc17361287fe08d2f7baaf53a3f334df0fee708184c6839a11f7aa740719490597d9d559bb38076799eea368e0a7b798deb0b0f2287c0fd2ca0e92c0a6aac5da937426131c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087de4c7df26013c8f57fec77a4a6da849ac9af4996f0f7d406ac23597d6b54644ef8add8a2e7e55831a1d0fa896d2e675d96e4cefb170d85a808daec78d6f4ff9ae86172c03782ab665f2bcf8cf0dd0ae0f0355c5f6c463ee834322517eaf0ea9770e0fdf399a681de260c7ea3216f8e5237e44d024311d0a517503671d449ec169bf6680ab3928a9a30650a8192cdf060f9de21a275eb373815f89165edd64e926dd411bd15f32cca153b4ef7229158c42dcdf323e77f20faab77ed13a5b60201bac6220252441de8851df37310213e3a50ce0af5a93e6b459b5f02edcad0350eca1ae1f7d9767a5de8023bd7a7883a0ae1df76943f9f2e1f0b2243cc17cff8514e27c56d45dea44e2dffe3284f95e6a8d06443dc1ed22c68a309e3a13416b50e37a816aef02fdf3eef8c6ac984762848abcaf223f6186728e45f7b052d0e9548c889c93da4c2fdcd38cc91baeb08bd9e2c95cb8a4d97581af45e59d29576bf9e3bad591a2bea51f0d06b41f1b53bdf5a3314c4938ac2f55cc278a9f5edc614b4614bb60de3bbdca50ab089289655197566482ca819df4e98260289af6719b9f2a5a1564d8d269900d8b6952a298256de9ab303b6dc22c4c574cad6dc98bb82000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026c90652ef9e71feab162c00e32b3cd5ea3b541fc47c2181a874dc4c292928bd0bd5577206aac60ed0e411a088612acdece2287565f06f152ff8a8a4a9b8bb065e97d87f82019a514600b371da7a4418be20bde1b158b177f0e51c8135bec72b6479cdb797aa26654a95b421c3a0fac50d12ad835eeafc0a07fe265c52c3e49f83c4706fe985df1f5d3ffd79fb3bc903226a3d7a122e127a691c9a6af4a0d446cbaff7b60733c56cc11f334dc1d4986cd3e8845e16b2fd8db2ba2d2014a2ce223e9aac5dcb7af5e1016ea0f2ba1627f0d4c59aa250ce66c2515982597e52029b71a78ec7291c6285b1f533789fb7951976a1ea11e4f95766c3a566056d9b73aace9e2a7568ff75ab64cdd0937c3e8a58afea2dc3569320661e5ea35ad7e2dcf4c4800dc80ff92e2dd09f8e02411075e36c4d286d8207b28ffcf3b62f363032d1598d2517531038ad16c62a09f3775cc406f705b03402619db35a58ec33dd658f70766baf725bde7b549f78a60ba03e333e447c7ded06788921fd29d9b8bce59894e5ff6bec1c3fe467c1b6fd28e8f1445c6cf87d17585e90b509bf0c4d8245f05fa5537730b1d953f83efa4c6f9b4478f8d9d7dc3ccdbb9c70a1f658d86121f900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6c7317875f15b167b86869566b55885baa80857e719650be88f0c23bcd69a57ab94bd274faeb2f7b5347436c04f3d71d5848df782ad36c4cd2ea34593c05d4c60f77320e9ee4264c4b512ada83db33149ce4e642b76b1442981cc1202e57cfb4456dfb247fc935f04ee3f7f76e46f71d08a0446b995a3bbb0ca5373f37ec90881243408eb1e66c1e4aa6e982cd11aa4b13f46287918f58cb24a97f612a17e73c3095144f4d9ff374f5ec8ed3bd9dbf0102991e7bc9eff0a8de9878a46dc4fa4cf95894f3f966db9e773bbd512c902003e6245f8ba7ec119e2147d3dda562ded354d63330342dd03ee508d0778714fd52a19a441b7346ab4f8170bdcf68a2d45a399b8a55b5e379f191086c9b79b9c0622b67a655a642a9d85db231069a7ca057b096037c72883446028dc6686d8b2ecfd7bb7632b689b0d9d9637e26cb687903dbd3c451399b886167ca3c6ef9b92905a5f7ba368278b16db784ab8730f764541b123445e91f0aec143a462b48704759740f8dbe07da3d3f19326bc7e2669f47e85b8a86a5678c15cfc8adc22867b0c7e3daafab5aefce3fcdd911dea7e071553a66671e535fc69d2fc292281bf1333d001cf7a41740724ef7f74a09d6cf830000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7145b568c08c3d7b31f38833b87f63c4b64c4efa58e612744f1c9febfd60fb8aad0b078564bcc8c6d840c6f06a731d19903360e09fc6ad90576e0a923ac4d8992d87c00a9ee0ae607dc8e9496fb39d416e1a231f5e6929373f47c9bcb318f3fb21eb20c6eb55c11ccc4b0906772574ef00b1d8374f6bfe1dffd7e3e3a968044bd10cbd1e5e58d1a902b619fd38156e9f9849ced1322aaeebf8cbfe497c304b93a1bdc62daa901cacc94fece4e81109e4d559e9d218d756a3a80016b468e337aa4774090359be93a5d95fc3845a15ec37b1f47e1bffc5a7d233d15370a21984d3f68d4a4cb96601616531e65b438d3f813eeece57796c6706773716aecdb5987c928389b4ad4bc200501df8e8772533d35f020891499fa9b00d09d7d904490399c050a1866eac76f8f10bd083f3eb4d3eb5b3c83e8aa290ce8612415c8cf0a1ec721f84a1596ad5ed9beb41643c0ebadad949bfa159a54917c62920d0d9463c07e7b94da92aae9bb89d91938eb9831e4af871fc2322fc081eb00353d1d410a9757fb0acc5301fd4328506a4670dca153a28fc3e8d1705f97f3d7b46738f2cd42ccd9cefb069b8410ea2bbd3b506fd9e063f2eb98b10f9ccc57f2c5786c7430760000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000056c28662d4481260d6841f3eee0388282a8fa19f9605025bfcee49d11182afebc55acc507ab4cd10d08b6dbbdb16351dfd267a6bd96fbea080ec9cd91a1c5072b28b140355dda29c15c87b41a4411564e6b4875d24edee34977effbed16064daa32bbe5eced5bb67993c3f9617f64931177b76bfba227e72cbfa3383b72ae4748059f4a6c0d510a7d8945b359b9bda7a605eada4354cb6f270084093f03bd32e443936663a31e3d99b423265c0f863ae64e7c5b8a058845db3ed85b94a7f38e492f1fb02de79722ce6f6854588e8e331c34307646e15ba344c07b831f8de0356a85774ad52856899628826cb6a57d3603cce8a217101bae9a0099ac92b060f7994135cac10203a1f6eac22b08525171dd1319d1c4fd9f489dcd3c2e0d1b599a3dd0ad55fc348828d8c0b76b2b0942e847b8a4beebe173aef38297fbc7ee738d3b4e6538483fa42348ca381b0c39395ab0e9969ac9a3757e9fa5a82978ad50d4370f498638ca34a23d99b0a65cd7e93d424232c0bfb285c2aaaabd40279f73d82bf7117bd66b60c6bdd37812bbbfd4e305dd8d5d1cfa414dd69c916a392a35be5fca68fa21be7c9ac5bb00ba7b36fd5d8643a39e9df89e5b99aeace8598cb6050000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae51fd0124115bea422441bddb82fe4dcc15ec2cc3df8cfcf30494e024702ca59341e71a70968514091718fe9fdd56cf23af8aaa5f85eac83bc7aa80e115637946b5eeab3717a50914f491f31ca0de8d0844b3025d6c17c813ebc21b508d6ee1f911f371269cabe5bf1e26885485aebc9b9e5870230951a0c38d0f8f7ba5f98911f7f4ee720f5a08a0d0bf603250f648c21c93b24529ab62b59ab0c25b1e59d36e6f3b1867a0194e2c1f148f1155d2440994d294eed306761ffbd78716fba222a166616cba968f944971b6c6bc067c4f0d25ff4f630888a86313e7284afb69ef7629e555d7d1c336879f3e678463df63d6ff813905bb021cab32b5a95ed871ec2e8cafbfefc3d386005fab2ebef85593d75c080d1c405ceac62cb876331c43289d9993d5bb39eafb2acb28570ff34fd053b97d973c2a8d0ef8524a296e2a83b76ac08f59b521aa10fd05563af27cedc4882f9d8ea3065f55ae154403f19bfa678114c2f3b9d9263b902e0ee654676a93a36f2eae3410b85f2eb5cf8a77c50a3fc8a8e819a04025e9502b99e4b3b8bb6d6f23441285458291df8d23bdfabc50b9260b2ff09a5f8d987bd4449656581d11391edeb6fb87209231d082d173023f3a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e264471aadca01545e3b42e8e039ff1969fc3efda56e69b2c660e9090350e3da9fad3edbf4948b94c892cfec9eb5349e12e21b4bee77de82395b70327fccbe7facf18c6f37840b83698c6987d1fdc09995c5acabe58a356eeea338808d11a5367b67a48a243d89de919343fe2c2fe55eb75b1cffe50660e5977874f7d658b1ac29afb4830d6b8f3c248d4dcbd9fae0157d59701265642f5c3f424ac79ef9b8284e76d864ca0d377dd7e986b3dc2bd49957b10df1d75164b72e98dddddf962043abb9ba5c542d4931f53c3fb00474f4c3d15d639a556c03094fe28d9176a428b08bff3200516084e2a02f4a300cad7a27a961fac89c4f1b60ae6de1457aabb261bf85f8dd6bcc18e7c8cef55cd6751a32a2611a15334d7ba546a7fca959d2460860a3a4119de4e5a12ca8fbf0093bd1aa64a1d70876d6f14052d1a9f6259fb9c8527053f01e355947060460590fdccea2df7a0479a6da1c07665ae92bd9a94f2ce17d93ad2a4cf413e6a4e8a2d2e72d959394e0e6fbdc9811f05e50a623a402072693c1d52d04c8c386571cbecab312377a5ae10510643416dd87bc54ea7d822b00c77a542d8759c08202bde84974fd794583f6ffd0f4c7afadfc6b16901f2380000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000225d85be27e94d0aebe3ecdab8d1d0cc0b9d80e2ba8ec025e4d740b1c41c8b76fc7ab8cb885e3c47857da3cc01bde598a12fcf591e825a81944890337d402651a7e6673996dbf03eac2c93b3a74682f438d75ee20c489b1cd11c82f87ff24ddf2a86844adf2f07a386c61c91839edcc3e0ee50a99916ce036d3ff884358c7d2d7bd867e204a1b4f96c763442fb34e82a7017c570a2438dcb43bd84beb4c72baee7b868210419e90b648fc5b6c8f053057f10d20402e95d7dcf36b101ca334de0bfae0870456114cbea282655f7f0d5d99dc87436834224d979fcb0aac61ff83004ad6eedf6dd2fc0e05de9efb150e8db0938746f09ae04225fd8ec15a1f7ce8c70086a832d05c29428144bc16201358a9f2b371dbb7cc0d0774634e56b24029e8407448f5ca160c0f839a4e84129e4387c0a5e263b3ad6d9f36609726083509bfcb837c4146878fe82d6730fc03b9b4618edbee5f54d8844321c0da6723acea4a0526e74743f173f2e49c70dab1321693881d1f3be4efbcda58a49f90fa37aa8576566b9c088ca3256b70a8fc7a1ec9a5ab966ab2a2027513e9e59f4c7f1dda9fffc6e5e9293159a103fea1e0e212845abce36b1fb8a570f9dbfdbe6ed7ea47300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c48250eeacdcdedbb4de985d33046fd03527aa4e7fcb2ddb34f75e736226b1593c209a36964e6cbccdfdc54ea3f8453e27ea497311104bc8cf0581a7142895378e36151d6f4726143ec2c2b52bd1965b3e26ed1f75b0aebc750f54beb54583d601a4c284b7aca2b373bdb50e1051e505e59d8ce284d11af3d148a8bde5adc709cf0700e07578685b8f2ebb86cafef1e9da1c18d1b9054d39e24918aa076246fb00f2dbffe17d3c2a0e4d85503efbc644fc55cbda2e70635f53077d0eca4e95bd8e42b262e010612a04bf81eafbd89bfabbce21ff6fd49bb8c81bb6c6c5479a79511af7f968736db0e1fc51b8fd893c25cdae1f2a8527e6940924694a0dedd872f2961b444ef6e666e9dcec4970479b8dc6f793a8da344060aae36fc37d91945b3500091205018d902aac4e5839827295059e33a5dd00c2804ff7b654c3934791c9d7920a5090bee627f6cdcdf273be797a44a7383d53ab081889a161437850cc05c207320bf33a013b3c636550fae03908d575dd5b5a5c736b2e92172a66f7d3cae91cafee707d58bacd3f21f37154bed2e9fde30d403f71f88ade7534f641ba21349b99ad64aab33cd16844a9bb1601bfdbd6921ec3860f4813b9ac08734f900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e945086c3744d0af537782e166720c4b5ef52b5fc7b5fffc49c49d3b269c3baaf12cb94414ab6f31ee8859c895155896983aec6f36cb05f8c67b0ecb8833db3d02c9b24c9bd4395b68e9ab07bf90882eb84154d65abebd4fa991510409946825a469a8f53c63050de1f6dea33846621f2f8270295f77bee3a029fee6c30cbfa61878d6bc5f4c80d99ea107503e47e760ed6a1050db4ad7e80f59156c38523762f5e4cf8250bf28ea8efe5d8a67f52509bf82bb49c12d2e351c04462de1f9a5cd51b7014109c81002f815a4da0177b666de31836b85e3cf2466004224b8d14f2965154e81263b7ef7ae8905830117fab0d4a9deebbba22ec17b48ec6c6cb410f154e7e79528bd6355af1091c7886807a1c95ed37361ad8026af2bccf78f6667fd21abc8e71c1acec6f1671b594bae4fb5ffe046324e3d485e01a8d9c4439199b44f86e4c00ccd190b94b0d1c3c7613bb40e24a1013b64ffa420c82aef8cdac2d792650e65ca65b1e9b63de5a3cd6d5fc8cfd4d9b98f369897052c0bca60c2f521593202120f1aaad70d3ef2555e5b03d07d5be13e26f7eceb477045748e6f8badb54b1df90971fbf13a09d81a0e0da3689e4f63e6203d07c12cb9cfee88ceec900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b628966fed7214042f46246c48a7fb0387fd8537d2a92521aac6db9dcc58476233aaf37e8e596304b06f4fac240c521abbdee479e93a7ee641c346c829fe55598187d340f614cc4f1668b8ef20025b7d29ae8d602f8796cd6ce4f1260f632ebe8a87354fa662442e8f3713537afdf2aa71432ae3a95a00c9764dd6376ed06907a652e5d93c999ca99817ea6ea95b3e50ec84b9461465b2a743659d3598cdae19f14a0c1b7c904c0f1dbb70e92789d85b7c250550fd65a07a1681309226cd92e5e43011dc1dba50ea80fff081187ed2062c01cab2acc63a93f9fd5501cc56060d304d6c16bf465c273044519d7f13daa12c8c2a0a9ee93eec4e6e370cebdbd750e994864692487215ee91d0bfda2029e53ad4d6ea509d55d0f18e18a81e207ef1d8799f0e8ed74e96579466fdd88a6f5f94c963baddfc819de2680118955951bea28c3ac32453cc5c7fb49b8854a276600232ab6dc11051ede4e0e5321ca7e4ffbf09bcfe2172f7ae84bc6a7408272e26370bdc082ef3abcc7e30afaed342a24835c36db11e0b3c590f739fb12fb9770a47583eb49844511041fcdbb01f052e8b00c5ebae9433a6da451d0973e361e33326a982e8a4855a396029e4d060c03a4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d26964168c79cd3ff351a9cbc04cb129e39e2680f7632c48a43aaf930137ba000870a15b078a58095595b7bb508b47f121df97758c2a52bfd54952b72d76394bee00622f3eec5045d6191db44af5a357cc978b9d77b9bb1dc41eabc5036c396096832bb2ea80d01335bc378e35e039d0a8c4d00e03730769d51ea4e7d62478c6a5d20eee8a0532a14c41f69d82e2066ce0b5d2b540cc1778defcdb56922581a99a1412e29da13d31107a6218bec7cf56ae81d10f2de666bf157d7470ec1c68d31a5d93fdc680df64959ed0fcbf1282b6cb12c5e89ca8f256ed3ceb29a599c8f0ec50e2c9f4f0b7443afe6c2d37970f198ec7642449f03f3e261225c0da540094279fd24444b6aebd1a4842271f01d6a28bfb7202b4757ad3b40a682fb93b86fbd63d2086b72eb67a3ad35e78d391a35db60f2d7bc2e5191b1140cf413db7367378ebf988c61952e916bbe7e28523836dc3d3eacaef9bb289245d3939de82f70507f3e166ced79f2d3df8541b8d6ae57de01173655ae4369c0a41543d53785f2dbe08392536d516579f5ad2dccd37acbb410935a6709be5f3a71fb1f00d1f794e4805b344351b4aadd18792278864584cde77b1bc09973ef02f5a819d78528d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000960755546a503a0b59fcf3eec63765a75c64fbe33b7ee29ae92702d5a703a924bf2d7aa04710d9a81152e31ca84824b3f5ccc48e5df671869587fc1ffeb4dbbf0aa599aba9eeb3eea2d7290579eea0522fa540deff86fba45679fa04db7b084f7497ba75c4d406fc426666068247305dba118049a70f6e061510c6c85200860a382260e000ee478d94af9d1db807dcd9a57682283144186a2e765b431f2c799e6e0ac538c6414dc39a6c7cd01553b096101c480a7230163aab9f43a630f6032428e282e74d298b8ce0af744ffeae2b5e32b650edba4452655f24939039c614178bc5d50a0c042d617d467188fd7bcc4db3c0d8a4ef1808a73e41d51576e2398c32b4c3b819a3ee8e01b9b11ff8a26e85cf2ab30bf39679e222962d31e167599c91d4c40007b1ba2880f9d7592042d6c75c6f099b7810ee8fb2c416f6f8cdfb9d225fe2f440d02bc08a8022f3bb20ecb09977b5511eb8282ef04dbb8fb3e0a588cdb5c2994377d315391965eef9a6491e795f22572b1028207bb9cd392346c11d773e26b7d0c86bb150f5ebfda152d1bd5eda73b901e14e225a3294f2e302d9ee323f9a7d7e47369a81c9501656541873966879480f6dc892608d8635d06d29d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d1e06398cbf0e1017ed50258b558cc87f431b1cda2ec43ca7ed205cac2e595ea9b0f05e125918ace135e075a92b7e0ba5b3864a7b2e1025ca7129dabfae3e80d8a25150b464160b4d94012d355014232c444cfc573ac89ea963dacd5ddd81e1f94e93ac5769bc40f61774f2faac649b958bb1e5130c01308dbb59c74288e859a138972e0fd0fb8cde3709fbb5071770af04b61e169671520b464705e5db89dae78e11b9bce2548fa11bfb72c81e47f751df23342f2306d3594ec73edc65ec848272f5025400f5b558f3ef225ee846b8ea4e3810b3e44e41ecb573bb57fda6acfabcc0e638ae0991a28d1cb3c2e1e2f101593367ed3b1bff61e25a56a5fddcbcaf3a350b4d2170ac051f5b7a9041bef50046d2491335d94ccc7d38fa6e8f1c2baff18381c0a665701def56ba097f2a0e995374213a33ef381949a5d8fccbf71f0b74043b3c8a7a4e7791a811f09913dbb7d83a7e6a9a04443f474e8f6136a4eac41a0add40f89b71171afdbef9166ff5e8a69ad397ed27492c1e346563e48d4f8ebe60c6eaa849dd1b12f1bb69b8e98d97777dfc6539e6e5fe235d57864b87c1db41c7d8453d578e711e99b81d85a49fcfb3d13ff70ac8dc25813a1db27fa1580000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa72d2b99869abe56a108d07126974640dd34ed83f46ca83c9995c78bd50e8aa36c472190261b904f5e66f8b554f7bb7787e032972722aff9664fd9b290f092bdebbc902d90203ed3c428e86a1a8b0fd01bb12aa9b2a3db9c6c6c30d77bcdcffa63302c52d9d9f1e4f6e5b2a2b8c723f1a0dad4f6fe124735baf01e76a9d009131d8a849ab7a8bb83e0e9662fe2cf2a15fcb6129180092f63fc26e0b3891d1f13e3677cd1ebbca0eb5c1843a4cfd1880a3667abd94e054e2a9c4dc2d571c5fff342eabb729c6f2edf0cb062e07fe82b3ed8da3681fbe2b08c802fd57eeafa5239aec504b54bd169936e2a0c91194f01ed5de656c9a0f812d2c13c96f8fbe7c9a4c7aafd5c43ba7d26aa7db6496c3c91f5168c6a12de92598424876606d3eecf5a922b8667a1a492a71aa6806b1514933c051b9d015e679f00701061df87a65041d1e07ce184531fa38915aec6265281c980781fed5968607b3ec2d468da48052954dcebd939eb833e195042631779281e08d55bf7965f1841fbe42038bc07458ca9a14d2fbfbffd5813d7b0bf7973f587af61a8aad592419e381bb6ef20a57d1002cc2c4c79154cd67d1d80994d0acc35b390fbc8d94d9bd6adad57f7bad7e2d00000004000000000000000c000000000000000000000000", + "2a7e82888d71530cb2f78aaa4f5630b9d77569b908083014dae6e5358fe40e660000000f000000000000000000000000000000000000000000000000000000000000000900b9e3e544758e07fdf1ed5cd6677f1758802d2d76d858303765db396f21b8c300089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00b9297c0ba7559abbd713d4ecf549a98e691902e030a01be90edd9712d6865e14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3000000f004a1323761d49f16299acd7c52d70c154638fd9131a4d158bf9ef93d1b10298e000017402e99f3a6367755287193f91dd25d3c4b2e9bfc6192dfd9041f867fb7a89b3482000017c01c6da5cfa3d9dc4a44898c7f0e63a698c632868a0d0934e1e34ed03936e767ab000017c00000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000070dbdacc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000006d2335881035536ca7d31c10f8ca4afe6c6408887aafa3d78cc8ba88a0741ca2401c0de10000000f0000000900000000000000000000000000000000000000000000000000000000000c205b484021bb68068652870bfc4007dd5e311c202d55f300ee9e66fd80daa5a026c792971e2efae2960a511247f02d978eb72b12355d707d03d5c4bc587951a3823b23380c10cacefd48a98d74eed4209088eee2c7236296dc81138839ceb9e3bbce139f061803fb103aab76c7230ab97fbfbc8b71a95082c58c13bf1972fd1ab73c02c61510fc9a7df9c0b4d70b015e1a2e456f5409990f54b8393f719e2fd68f6cff801adf28ce7b632258fbc6929beab4c23b9098676548d4484bdda1ea8d424f8004162dfa9183d75b5ea8ba83d14d4118465a9c45127271ca272db081dfce90d485240b0af45267baf91948cfef635da89bd941bd2de416789713555ecc6ac6ed6105127b509453274a217c981b89b74fdb7732a33c43d7aeeb9ba5ce9df140f6a62338fa08c6a240518dd444ff557f490601914b86938df7767426020c372a25d325e12eec4d513e57e37022b72ba32ed4ee9acb8cc657945237bb435f0714a654198f4b47aa3a6a5d98f75a8751a6608bb3464b72e7748521dcc6dc8c127575801c0b3eea5935b8cfc26655e10b840e69ac367789c165be1707da7ea6074099e108a7312c515b498f87041b33734ca990ae8defed1d86b80f075294ff893f658c02cbb94f11f2e73a09d4f2df640876144778dcd7a293503ccc1166f5df27618c2a7fbd4ebedf78f28e69889e33a85237bd5233475af96a36ad6628653a0965bc154b767e360673a5c5033d40427fd944d6c1a31e3c2e99d672e7e440d569b8681510a24cd93374d91a866f2ad88a84402c48dcad5037f88c6d3070be84fd472228928d805b7ab9661841505834399dbfd59830be8ea251b3b228f5a6465cbfc729cd0c26def59a2821935a63e6709f0aa4aef18e09e647baef51efd8e48232a51ec6ad45a57e868b7f790acdf585a2333721ba12733ba07624762e8672cc6aec2764817c90fe3ac52d1460d15161108ab30de161a3aba446b8dfef11c5234e2b1e0573522a384085eefadd6b44463901f3c982c76334bf317cd74c513559b54a16ecec3188daea1b304df37c3db89f4d830ca3218caf75061616e835757eabb019cd16e43a153ba39af36dda74c82fd777ee6afcc48d465d5e1121ae7af0f5d901b3a0a0f144f4ccd557d3e13e902ad03421b72d07bf351b88cb23e0ce4ba7fa0cd15a410a8a0e25e7cffcbca1da0fd3871b4b008a4f6125bb1661bf46e034cf00197dbfc5d8f7c535210d7bdd1f08cbdf304e88973f95eef29713f551da6b020df89e4a827ac1a0c68e4ad7871e2803b69291cd41a8456301a625d426bafca52383606758623bb55952b6c3c94d227139ccf765069ea420fe2acdf0a3523d5026289e8412307052f7a1eafc1525e85f0c58e83edbfc18d29bd1c18bd8a13b231d9a7e70b701b0f51aa3cd31e9165c98f7c6e93a90c8818aca0716ede22b3f78084d189446c48f54b67daaa48a6909bb8ec5aeacf27bb9d996c2b6170dfb118d0073aad9d0ba5d1fc11ed74bda158065bb67bf0b121b0dd999a128391a36016224318d327862b41f9379b4ac24416e97f1366fd2e826471227b449efbd4a59e22262469b1ec67106a06aa458b25fdf3160e87c853a0364ffc581c257a17dd8b005e40e1e43cd78dab33fe3593e26c3a3dbe5a23b546b3b5dfaaf48474e90acc01831728b7c2dab015c5aaf2699d0bcd73ade7658aa42a9b2b57b8b02d50d6ecf0ff1a3dc03e843c3c9dfb688dc2a218e4d2f69921ed8affb4641322854ba80c51bb576da0c23f68e5d2673e938344d50a1df5f849761de147d4f5c8b08a391ef06edf0d5568e3eac31a8eec03cf7c9014d8bb542146f01cb9b4447ee66a6622c0cf22649f95c2e8810890812e9fd898e0ed99bfff5834efc67b6443aa86f37820f871aee0cd496ac9bb0664695777b0dd5347a0b1ef896c3ad51be10490d71e30460c89167f5f306356e2a380ce6e1f4b15c379d66e1431d0f616555a1712aac2cc4a15931b5ae7f2e6d4019a2e199b974820e7449d6bb4a34bba82571c45d46023ab634b822cbe491e3b253579bd1198fac7aebf64e5ab017b9e10becfb77e00b31889236d55193eb79999d2c958f39968f80b038cb3af044ad48e41811897916304e3decc279f2b3e85182a719d6bfa3708bc37aa988ff3e49bbfd11dc0b620ceddf4c57cacdf8d54a578e24aef029403d3daa32811d743e86e4811676712318bd358da6e0114bdda7f75383240d54e50c7b1f45c4b19394a4f122097ea5a30ef6ee605804f19ed7d17d5b7d8045842c917aff4b98e536c257935b7f6a2b6b0da3363db1f00ed828fa51e43b5d334a538c6b04b77bb0cacf97fa64a1c8620c2ea0a3452a4b0194ad4710b21c3c6131ed62ef24964b832d916b0fac514fefb91085a8d3ba7f1055f17542f6b29e6b6336f466b1a0bbffbf37e369389304619a12b6b4f922699d0c48e765c64f12a5bf0651b8a79880da7e4bb8ceb0d3b854220dab3e07cb413d4fd4cbf1ad0e2994409e9b419d4d107ce1155e68fa1e20bd5a01cc268811a3d9500c7692fdb689cc7261c80cb14589b66c7d479b5f664244c72e7599405b19166b0b9b83d053cafe0aa42222844e1b0555eb0c88ee4e6de2dd076af32c549e434d5566f20d459fea5b0ac804fdd375476709e637794bc5bebe2abc3cad5d002ca88ba64b71f9672f0d2a02f35c3d464189af480919486040ef2bc0614a7c4bcf71c0efdcc31326d24c5df48c6defcf73377d34ce1a27ad7c850cf3f0fecc47628147c3ad4aaa813364237af7b5665393c2b8188dbb271f8e7221b2d3d772e55ad91812ac2658f0f62946c50df2d8fafe46fb1546664117196c1f105c13085a873783ea0404093e2c937308c231dc40a30caf0d32fb65cf4e06400470da8a697237510760f3a3bb7c88d2351774a32c3ab2fbe93e04665697758c15b905f6e1143e8dcd63ec1997f941c86b4ee3ad3de70a349c6c200fe8dd2e490416dfeb5a3282ecd865744239e71ce8f56ffed8f13512114e86abf9aa0f94311210bfdd6365d45b1f0a53dfb5238d7c07e03167b7706a8f8c9708229427de0d2159e7623b8a18be3337c05fa507157ee0192fc5262b9862b6102b315d53b715105988becefdc686176cf401867db6dc3201d069a2a67b38f1148802cae9f572187f48f2f25f4ac170a0e5f6d9154cfa4690da98ba2ccbd6a2fba35e970e3beb2781597f0f6c609e8a19b4f6d3be1ef6a1299d76fa2d603e329cf7c9dc6aea7e2ab55a7df358919beb93a3511aa0ca1ac74009ea43956a78b4280e76aba60efd0cb3f1ef5693fde37118f7c9bddd0b36dc714897ea5e8c02346908d90017f1812761717129ddb313cd038bcad03637a7fb27f18b91f1ec9cb1802cb09ae5bd471f72260d8cda32b9647e150d80e2444238507420943863169ea16986fbceeaf726e4f67920640bb693e10e60c76168ca7f1abae6f6014bc957f1a72aef17ddd104e62520c29b7384edd720c2f157fed2ef62cd842c2b18ce54cb7d893a456c300ec09caf3895942500c246b16ada22816e44592141875eb64c8cfc0100da5db01d245135815357a999f72c85f09d6aa905f00d45fbb2c5210584ba0c7ea87df210ffcf28331ed492fff286ebf38979a12fd76e24c736da324392ec8a24ba7e8f0fb609e4870521b4db8e431cfa01ea39ecc33bb230dc97f5410d1247f86b588d1bffb6f9e0312746373b10541398a59cba2d7e4de69777e2bf8bdea67a8e20c7073b0fac7d9f784aa4c37e3e0f4a7a885ca5af7fa03dab7c86e5aee9e0fe757f2a1fb25930a5d5e1c677b28e82e9eb61cefe1c264c62f10dcbe6c794932f1001264aebec98a18b6002e0175d0df7bad3ab84243e41425aaf31a110371ecb745d1ba484969691c580b377ca4d853996669cb38bd96527f04a7b7f1021a11cc5b4249ba9437cad1af8ff0b852d78405b8be9c57af4fbef25a148193ed746ad0efe071c194df14cd4a29f1b7475b3d28142597dc67c963f12f3dfef3f9e7656bc742d1edc27f07e0c27e281f6d1de2139e03f55989a77c744ebb5e7aa08a7046eb215d98d0858b8b20960fb333b8bb90b5eb960653b32a847e80d0cfcfc7047248503910b54bccf46938bb7b3b5c07a1d0e3d03fce3d575fe048c4148e0f534b521116a3af156e3ada8f922f18dbe15bd8e90e5ab33ca8b48566b9d717b4b11fa310d6e46a39f5bc74327928ab90ea59d712fc5b19681f8a3dc1773751018a97bae08d350ee79d487c3c1deec4597fe053aa2aa25d1d3fc3cec9dfe51e2fdde204820d8d3d91740b39ad55ffc78253e6d0c064f3fddc4d7f9deeda2e66c5344202428b0b26321cb7773f80d5972e895b875d7ad0e8daf684e84f0e562f75b2ffac00dad9b1f41b2e76c659a837265d8b9bfb0e9e79d3906712c3215e1e8223663d00340e43b1f9f523ce1759e4ed909f4765523b6b08e9268e35b37d3bc09ec955429b5fc300aa8e46bab63c58d7b43bb1ef6c053562a42b825c46468c53dda50541af6b73089edc32c1094f7cfd4797f6424a1be912cc403aea3089832617e58a124b875b79063d1f434fd07e59e358d4123996ece6557ae88d83d3b49d2bfea9e2f2ddc3ec4a5489a8bb5389baaf2e575c0226bf3d83f4dd2b65944fb338baf8c047f8ee7442991d11886ee952bb96655cb24a37bf8c82b28d665f8d28d796abf2018aba812388490ade931d482c6fecde3e99ae96be2ce99444097795e4c4b3e01a8a7fa2040abedcea32f2bc054fc7f25799de10a5efeba871841794a8141f5266a89107eb875e118f65ac0eb461eb56251f48e134ba2faa33781476d1f3ce705fc29c24b79f22c759c704936c3102d9c62813547b59c76814f87d55990742c04b8e0243eabbd38690374d1b8c7f567459ad2133d8fa956f072c6b5a27817cb2096da322e382c468e57668b0fa67ffbcd8af6b06a0304d30faabd007ce2016b21af5b1a1dec0851f5accfda3d88ba881c8c4cd20f927e5315d3cfb4727e570f0cf334ed7d2f159f2b8209b088eb908c3db830ec61424051e02a410bc16e47432dd2b02dc543e214874d460b2dc8a060e7b604996d4bb4da0fc404f56b7b1d530bfc63f1302c4953112fb4c37099236a7596530102b79011ad163372ff682cb6140593a732fc7f909657bc71aaf953cbec997e4780d4a04b6f49457b8658ce7722c23bf86d683ea4a97ee8760bcdd6eaf96b60b64be28a3cfc61d3a593f722b72de52961513781b8688a56bc0e4d9454761d283f7eb889d79533459ad8805e941cce157597f2992b4d71891f795bd8e27029e086d6f11ca7e8726dea85193c622ff54a311ad0ad956501439878a7f52e4fb3cad79be43d86a4be0205ed7be361144a6af3d97424f374f80189484023ed4055324937948d8462f3765f6d37e95d238e80692f82da63d2b6faaac3957e4e0c977dd22801baed9a81bb1501623feb11a63142f8f243837163d3582b16969049756b75803f9280a5cdf6af2f5da4ec2c1b8dc324450bd3cff27dc9a0f338a63415d2664fee5451bb9dfed9bd50bd7f219a11ce462f07d1172cc6d4320cfc0f482f613c2898ceb6b59abba5d1f3616f1026669f2bdfc28577dd3b861d0d1e740410c0883c0eadd597bb22d85886391c13b0b47e6ed7d698f6f3c88243c703e5078b6eeca652eb79d32dd63ab4ae30eb0f960c05622388c965e6d18d6606c706bc5e9821b3d613447c000a6e67424ba4078429630cafd80842a52955dba54434b4e6eb026b232e2a435319eb0eda1795003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000040118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000400d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000400a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000400b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000004029a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000040141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000004025e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000004012978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000402daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000040189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000401159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000004005ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000004005c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000004014d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000004003db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000402ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000401213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000401ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000004014fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000402b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000040305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000040280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000040223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000004017a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000004008858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000402618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000400f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000400e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000040172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000400b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000004005bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000040137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000402e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000402297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000402608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000004018373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000400422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000040204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000400afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000401998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000004028d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000401da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000004021d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000400ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000400e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000040107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000402f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000004009726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000004024f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000004003c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000401fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000040205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000004025110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000040283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000004021cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000040094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000400c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000401f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000402421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000401fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000401bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000040304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000921933eb94ab82bc4559048de41293151f7d3e9ed2d4e25017c18b5b1c4509a27c8f3f02656c536ae158561e7df0cb4b8d7f4118c4b34100de80973687cfb5e7ad76cdc4f9c9ff35966bcc2ee4ff3f8d9e307cb98bf3172c28f5420dc29c9c2817934fa57384ae438ef8af6d643d1734b0b1f2bb6b5fa6ee2bf877cc063f00a7b22781538009e13de98520b0a6f20b3f9ec59b9c263d6c959e87096e00d467664ce0251a73689193090b0a69d13bb89d1a489d2af8e9619445b4b3d8a4a713659b680d3397d280361031379210c21225f0896116f10a609046bfb48525c29c02a49056f6b2395363851cc334e429610ef572f475c646c8491663f9f783dffd9465dd3be600e0e341795c19102a2d9dc0b844ea7e4c03d92cbfd644aab97ba43bf4b2c074fe62fd04868429b60cb157eb2090b564ba257b51f655c0e9492e542b7c2b27c508b25a5d096eda2adb169ee069f6a71fee7ca2a51a6fc23b6d91a94e8624fd56922dec02563c2d8ba28a3c344d281c5391f2ade9d5643b62d2e1ecb390b8f371767be38905989f984b14dd04ec49849b587f2b6b734222366f754b36146763491e814fdd55241792d1e12a95efc3d3d1a0e31186a222840a1cc38c3600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c69e89add2cbbe1099a79b7fea73a21a3b34338676dfce2a087aade5054a4deddb513d91f9348eec9775d72d9364529a290816a6112cca013125e978e8403a38b1f54f094d2ff32e16b5780fd76d7f38ad43d1e491148e4f01db59e10c9d809fe897f1726306473894b42e4d1accb57153bd357eab3e4075ee89c86006e360c4e3d82b02a5b0e08b2a137e1821a6adab92e876f4e38d35d8a2b1bce42c8838079a112ac57ed705cdc75370226026a609c1e59513654b895a15b183ec774bb9c87c9d119a9bba359de0ec1dc2d62b906822b097e0fd33f59f19e2c30cf44eebefb76cb53333a8e8b3335f230c007c0d86189d99c7e2033ab046f921727383cd12be98bd159c05ccac5b54604ecb95fe95bf19f3ae57c6c66bb49e8cbe81e4e39222a17618be5b4e507c5b517b5a319ae7baba84a1e138242342cab7d7ec23d20553e7ab08cbd869534da696738a2a20ae8698ad6b9c8b6c1674ee6ffd4c08b7a9ef55a2f303c68f53ae319c4bab30bbed0c57c180707676d1f2c82d788d861f4e5b64e405fde6acb8f6a29049ab32c5527452e1f543f36b6ab04079cf0aa9067d627805da52df2ae4147fddb1d6be687dcdd3c68118f48be3a5f0a186e3fae4a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a150390e3f0b5b3e95932435cc1ef5ea3ea4dd68074776599b66ed02bfd31b5d3168384098dbdcff20191e90b090de87ff6e500e39d98697b5f34e0e387634d3dea26d2ab61303c9a981d81c53d6c26d2d3738727ed5e9f0b195c58e13326e6c6a34350919fcc012e7a76cadcd82ad9cafd07989700ac0bfc20fe2436ca7adf63ae274bcdf5d3e30eb6fe9193ad894cb2390fc70643fa57f0211602896f4f1b37f9124c4d02ad447f28a90d1e2831dcd486ed2e8f1491703dd2b2a1e83be44bbc4361899d10181f8e11e53e9c5d47cfe6d57a089aac10629b2a8fd2d0ef9217a6c0a67e733b1fe6702513ed550e9921c1e296f1614929b0365667ee0e99d327a23cd29b7fc28af87e51f6a06f1391114841df192ab82576a51783f1a84534ebf6c11a7a2363be5eddd4c41b2c8a3b26a4b6f87203670c37f5427c43b7b7b6433e9943a3bb74a17271f4b43f050479f7df666a3f70bb85792c92cf70251a06009fd8c93738783c108056ae67ce3dde361fefe0057c716904677d42d6a470f072f31aac1482790f7af6d2c42009cfdc93df14362d0a7f87a6a8d1b09b396bcb19efc7887a0b79620fa737aa187898fc67ae1c4acaddf3a8db0d0939335a70af7b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008aff28b0b506a5a91f1c17f0f58f068902ed64fca5d5421be680045756395c252bdfd6042f01c77daac159ab879c45bc310703ab12fabbaba1cbb1e778dcd7d45a58747128c7bc7099c93baa0488200a4e57d6531ff3fcff73f6978f0aefd62a43580513c1fe47e4ae5d0da8c33c8c71e77d44fdb1af41a5d6ca8eefa0ec8fcb5d26a76782ada121ed0385dc4bb02f4883f2e6aa31b26ef0cc175f985ed426ac7c9128d36bfd926f5dc6085ce2ba396978cddce552b042f7319a8c52c7b82b42edde2f6a969109ba80c2f841091f120c859bc4e5267bfa7be7efe267145014880a0a3264970f61e1bc4ad9f44e09adc35e2980ffa609ce5166178ca6bbd087184114ac49bdb95e4d93ad8ad4fbadedae761ace5b29751230f3feaef9468f9025e7e6b3890210d167cc95f78211de307734a8c690f906dc69fa503d1dd087dfee1d513e9afc071349d28f0edf8ef3adba21732e8edfca1fb1b75dd039ed2573cf759e0dd888ed82c606ee2782194c228e677fb956a744395ec2f3c130d0d0303f13005c618076f4b6886963fe64712cd8b7eeba64c4bb1b43ce27b1ae99d669e1058eed92612485f7f04450962d7fbc52d654bef7ac8e7c7dbf6939a256bfaf560000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000133f66929aa2e65d49dd488bb3704952036745aa638072c7ef0b7749ba9e2fd829372ec2c3355d57a62f7ea048fcdc1ad62b1cba8f6ad05d8a98e49f9ad790ff1b4bfd22b897c4479197dd22c6f6e2c86fbfb803ae891ef1dc32e345feb4f98bb305a5967a7105112a6370fa5b50d70b27eb6629566de91777a44ae9aff2c41773cff581970bb612d65fd488712e4a9231a3c53bc778c5be1d5160da01ec062c0325e1330577f162503ddaa2e8881a399250863b70331364b022d1f4729f52d88a0969375fad4d2a14c545df60690cd344816aee33d2263956c5d42ee070c1919e1e7599bf0af0bae71be09b5e3c365b21063760918407cc57ba24aaf33fa619c2eb79d34e6dbf66ed5d74ddce493ab762f7824dcf619a288b3164c0c4bbb6eb905543af4afa7eedc619fe18ba9de6a134132c63db3829b9c54877b3d842f30539456247eb64d8b58c3c18a5177b7c827dc647dd37d690c644fa8baf451eebfc15f222e502e9bde74a71699954f4a292d96fd9c47ad190362917a9146aad23137422f26ae3cc1203e5fae628c7e5d487f387b9445759d48ce0998a2f0e9b67ecc2da7f5b6768abbc154f6eb3c194b690af0e4daf902f747e20d2a08d211a3fde0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab4e39bbb7e63430f5b1e69561da3f2bb44219eaca72927d5a0abe2d17ba2286fa4b1b5bbc83759cac9c2ba4bffe54aad98520f01661de3159125b378d1d6b1b075f71e6b7d88f80ce00d347e2c466819a9938f9881942e8a6b1c109373e310790a5c03cec89189a293c8605fb32dcd854d311ffa14bc1a3a760128000f22d8a3130a45ec966b6d6ae5e4a83246a836b41cad59b34ff9d0307ef7118700ab4d593d4967891311b3d40047176d5d74b4917c964a6578785fe3a4123f39d6f11c0b4271927eb8e533f25c189434a3acd12dd42ad51aa34a774bb2a54eb4e3be20cbf18bcb45179095d706deb3d9ad348f8a316e6244e83b5460804e814e4c5c978317ab65e358bea3bfaa2cc18317166a55b0a4728fa17063bc8b76411b7b29d1eb6af475899f32a7982898a7c927dad7f01071f20673e6db9efb3f8f569332c5c95aae6c5e740c0561d6e52630c03e5efb8ff4320c0c88d4ad6f54c5f00480c1cdfa89edda164ee6cc4db67fa03df35ed7a426d7533d3d9b02bdab825cfb497673c57a1238c5ffbc4a3d60b63eb742f19e175762b63b368a3993bf1487897a533bac2330feb2520ecce42ae08ae32227b31851a2dca873d8204769872456d0d1500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009372d06b8f1a3668ec43bc1348e436b409b199587b4a0dd4b9dded39f2ba73868b12aac0be6bfc7c8a114841907b0176c78fded308d6658c02dd48df22c7fd86d555b0b70bc229467a620000705506994695cb1249e10740c55551f0a92749ed0b2786c85d86d39920acbfa46916d1ec9ce9b63509b60359fe293e52e6325673b5fdcc8f07523df48576d1962c2873535d7dca605b61deceebcc2263617839e72cb88b97f8a9832fd445a965f10f417831f625b7c659b4c8fa852d1c7a8ad4431470bf5a2b6a8ef186b2bbeefbdd61d8dc63208aadf5ac1ace4e3386b9f7ae1c9d3d35091f423cebcea6797814992e3d1bc6cde6ba94fff4865372a5674174acb5bc710278489e0599e7978dd34b4e80387755083c111b0afde03692296cc29cb228b24fe2d3bb141014d0f646573f00770e3eb01edfcc6f7c418d4364521a02cf2238117fdaab6a605d9bce3304316acd33d31b44d00fa651bf8fda17fac25a54a5951d997c2ff6603fdfc67440537fd8e4f3b3e13e9ad26f685daf17da499458dee0de650c66eb3a97129a91a5a285fbdfef2e75b096f57925490704b54f5506026eecc05c45564d6200a11161fef5e7378300c9f3657c29e8ba2fe777fbf00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000975b372dcac1cb81b62a4d6f103b4e510dd10da85d3ca85e2a88f56f8e22ced4b9575653463a374ad3ef29ba933e212986ed07f96e03ecf5bc76a6854cf83f776671ab3d1bc7d0f8cb61b580dc704c06ac63d5266d0ab08e7c7b73bd49907f4eba33f59ea513827d69c351f81e2920680f029b4cb9d860687be216e740cbee0bf19237105dbd49697d1373c93fb5dbcfaee8c7268c1830dadbd5f4a955def7dd2e7264b19d57083af15e5a11120a25c1eca9cea4f3466dbde33e1cc8d6d17e64cde20c35bee8fee77d029db42b8bc9e5e96f5d8272c64e7565e04018e01251a98c3bb2dc1d0898532ab3247972d46119638cf4f00ecb21a6665300269e8b3c460e6cd0c2463775ef27407049bef69955810a660272cfc8c768d4fc4123b6e374545e954ec3b7eb4effee47d3ce472faf4969a5575a9d51ad690971270fd77ee3c58d820162a588e52f24b40f8fc91f36af269b97db460748e52e40e106c58fae19d2842324d45068e3ee0a0e0c7dfa36f4d9c223d5505ec104d3dddd3e5acf7bfcb91862348ee3e3a6ecdcacb0da43c456f8d009fb41188f572c884fe6026eac53f64bc8e0e9d83ecc9a425b2417cd989a9068ff098563d9c582e8c227f364cc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fee712cee2e93cfac0b06bf6800b2cd99be34fa28b9a35fd7790db98b8d3581ad0649d18b1991abc9e0aff9c6d45849e8fe06ddba306fd5c4cb563cd20116bdb7ac0773beefb8e3845ab99fd4cac97b0dfeef87be96ecd255eb26823ac09929bd806802cef8964b232d8f9cc31abf5bb3fb73ad2ccc54bc004232e8f067c387e373918da1e86685ca9efcbf06c17835a56de90d327f013c49e0ecd552b29b10417be5ec14b9102b29329bf79244860baf24f026f6034481595f8f661885e28771a27510983e6dfaeda4673c3f5084df440bc73fa6d93977e62e30b81c919f5deb57c9940604da89b4b093f4b8c64f477c72f8088da64b09121573c30ad293832fed332342d86158153e687238fe8d8832d8b40c8f3273d87310c18c001160b0443dacab7016270801bccb88f293d2f429cf2394bc400ee2c978fd709442a43c84f21bc723de7890818ffd219c27b0ac81729f9289a5affb73f10b782fc33b6d8d401dafa7e791d972f7355658f68c09f090527541f8d3469cebc22e41eb4975f6a9186e2fd6eb22fe3d853ee767470a224dd68889bd5890d60308229b003bb4903ca8c012282945cd7006f3c5aabf0d26fd9d7d3748ea0b722e9178bff3fac60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab30c73cf09e112aefad4b9f467758c1475ff428f909266815452677a378cd6a941cf9ec3f94d0b2e333baddc1b066ecc0dacf1078d03f6e5afcf6a96d7a47db8942352b25bfca79486f23f4d999370ea49a556b9fcfcdeb478321a8649c80044660a0f2201d518a8810ccf4c3dfbb22a266e4c3172cbb40d55015785bdc95fef61a93b6031e41c8c69ed02f9dcd62d355a96b5f18bf57e109b9ba5c63ce49cc0fd61f397a7a5c336e20d7452e6b9f04f77d432ddcdb3b149b208744be8a4acbcf04c44cfa301d3d5f6f614dd2f24727bad4a2e986581575219c9d2d837c88f59666219d84835175683cfc90ab8238fdc74487a90b8daf7f73581186ea438504600f179b0ca0f9aaf6086475f1502add0b63be742be653dc78a207980d10abce89f741fc26128309e63b19852e36905731dd44da7422577bf9f2fb4103015802aa1bb3ea26497b2301b1b508086bf8825d3b60d4b69a9f5dd83652a416e26a480143ef765ba0681e2088db36010cf17cd343d30e74863e050e10e1973895cebacd0b554deae684db9714c83a464d52f9810fb9ea7da226b9a4039004a5d7e1e71bb535e7e2eafe475244453abd63570f3f11dc3c5e23cf84d7637821522531b200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e9900bbe9aa1f20df99343b5d0f348093d5d747533ad8e1f84bd0b1c5dbacabd4420b0ff3b6f6a46ae1969dc7bdeb3a176d94a2b76ba1a0d37afb040ed2649c4b30c88995994b1e04e23d6fbc00624873aa632a0bd49b6aeb28c19191409d270872774a437b44f8710391590c604e4e18fca90af4656a0b3233d7356d6e45effddcce783f274d3fa1b08b1d0fa5cf06d566ba30af43cb33f3de2d3e03ad4526c85a141fbfdbd6394572d3ff5b14198a088ef656e4a332cb3cde781a45ef8be25aa1e244bd83c7cba017bae7984951c8c1243cbf3da26f6afc716d5957f6479c5d8e69e5185a8de30c1a821e9e606a3e8bd5bbeb332eb2e3eb87156dd74670a5dd9873398994813c96a2c3423d60559a47718e6becc0cc07a6c08dd09b7a6fc6794c5d0c5df8861bbc7a981de01ab077647ab187bfe870415aeba450e260509c0230145f89dcce664cd7a9d3b62dd2bc9f5e2203f53477e7b5bc08d262412eb9238752b29fe2fe378326b34369905ab8724bc41a376143f408b30a6830b20ee4ed67d3f562b7b930bd90eaa0a277dac1aff93115cf7c37870f360bb4157c4a1a72ab8f45d57427b0f171e08f9a9b288cda8ce5b4726f5c784a12f4fac39a407f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085e694168d3590dc0df8057d143428fe2288f0779035ecf9d02f8b558cccaed1ba7fa2de0b1e481cc2330ded3b813cae68b312c35109485e1c048deb94835d1b12d9b742b36d61a8288e4090d2adbe0d9c2ac4ef1d7e6fbe443304885a41145a1eb58f239104f54e6ef99e0e83c5f70e1418a36ecfffd1200cfd695e178fcc8270ed82b0bbdbcc660e100108c4ded9434c01017424f628d9306f68559670da7d6efa61b878d7a893dbefd424d849912d468ba440be4c10e55d02be85c09a55449e4f8b10a3c95c51d8617878db83a5a91251e4241ae118cd1b3e140e8597c534fcfe1e72fef41e9b2097af00217f3fc0cb1bd20a20dd87f6867221324de58650608c31cf51b21d54e1e2acee01501496f3ed090a889aeaf9e7e7ec96f41f737dab0521f76f06a9928d6797e76c1b60752c2272f44d43697478c3df4fc1a438462338a9a0c65ce1c4b1d39478604a21b6241e169ab941460459945d668cc3ae1bfa1d9af8ba64fe4b0bc678fd573820123750c245cbe3d42131aae605d2b4da38192ac6857e6e24d49d3bcbbcd48b0729ced459354b3678857ae971594afc8c0ef312454f0e9f746d5a2beff675755b88230ed68c799dce5c86f4c242a2440c360000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066eaa3d042912704e046ec336cf7e6130ea4fb0a41e44272a01eece74fbea0f12fafa15f071d88fad4a63486acba639943e595b234d7f14e2666a09d70390cf991470babb1003c243a4f13e54d0b8e01e211eb37645587cf9ab2a5856b4606562ab83511fc3939a20b12c5c0d5e27b7d0751026464fa29ee2139e5933f607a5112b7119632f1058f90ad74565ac811612d35325b9c5b9194a10c9b773ad4ea7d47ee627c1fea790935c3bbf05c7b11de3844fdff92e3d2687cf482e54fb69efc029b73f28fcdef00c463cee4f77b29990d5ddaa1a3db0d2205ce62d3051fd658ffa4e96fadfc858f8cc23e0bb5de98e8495e6411bd5c66eed4c2cf64b5938a705f2009ec2e44f72ce91b85e481bb86db0c30633d57030e25cf5d84cacdd1c02edc8a0fb632e539d3f2d042ef8ce22917e4646aed8ea6c0cf0828966cf04f8ddbe9f497c4f0f69e3e203e65b479a65757aa1adc4af749cd221a90da403aa16211bc7616b7c29416b9f0f7dfe0975d3ad14114ed2599e2dcd1729d6f02d0a96109be47a00c553c2f8a1b479edc252e5ff57eb7d300c3a3e17db2dac3589d2cabe630aeb65f1870f0521c4a432243586cc7c496d934d85cc72de3d1a74d866555900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002afe094a8e8de3048c1b661fa7f7f46ee1d76b3ff0eaa748aaa6fb38e0d799184e28a5baffdc6903a0cee744519359c4da2a326ff1b9d1cf370249eb8c181390b7ba239bdffef29cf50efbc3b8e932efb6c53e6257eb125741935934a0ed35c3b8431574bedcbd950883b2aeefa1662d871280219fd18da90008ed79934c01f4c6a53c2aace3ac77857137da62b07f218fddc8d835d1ae8ea388fe6a1fdd5e479ecf43447bb822a577bb7e31701440cee1f2f4abe8babe870695e5cf1b16fffe99c936d99cf021960cb9f786675b0324c7a2227a4ec71e6414d15799df3a52e20d61ac845c096ed1e56ee67f191ac7e8c46870fe9a051dd4aa491b9e8fe2cd16c841517b2ae368f6af5bfb1e819894d967aadfe32fbf985315425273d29a71c73ecade45471fffb430343bec3c2473eba3f82755a2f06bfadaabfebaf2450b57091635b873efcb1d46690484ffa85d68e844cedef62738c7890e134919b79c4160673508a78ac5fd36932a6b9d10bab43029fb5c1afb240e18225a5453cbde7ad9283ee15c11167a2e0e85fe37cd1cbe7ead53b789c3aa88efb8a341841c9df8bfa940e96a73dfd908a143c68e29b1b4f1e601df350f29012fbc45ede75b17780000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a05b2026de487683fff72d9c0a48239ec5eaf47b91a76b999d799ea8899f7491ed0098d4523eb68c611a2387ff9de808edf86b2172cc75581bb7e62a53a86372f767350255927fd3344428cf5f61b386de0f189b5d887a69b083d30ce59262b9d05bc575a643e43cbb48e7d01876bf0eec22c8f64cdbe5b66dd71921c90b4189f64b49efce35cbfbd955fec45b8ee85d3419744f1dff8557b725850463b437f2e3b9a4dae87b68a9be4c58345c7f2d0d9756d9bfed979d5337b885066b3d9f965eeab98b9d6178d65cc79a7de62a2ee5fd83a88a2ab47ac1c3f5bd24456e2c213ea6722e2ec346eebf3c4a6da5015999bc5b0254597d1e949bcb46aaf132de12086fca350f196e0a9f12ccc974fbf8adda0f956855aa296715e5334e67b3ee3050aa338758504affa629cd262cdd3b66c368e4d2323362b3ab53a29b30c81fc0582d80eab759d4d4efb65d87c807e787d1bd9c6bb925d6dff5fd6db05ddd356ffb3457e913b4c9f4aa9347ae1e11e21d2ab2d507ff9c24528aaec459d3f6ae3ff502f7ae5de4ace7c37bfda6337610ad8881d830f9794852288c8b64318b09340f2b0e34a974a948ebc935138cae9919c890ca545f23462bab127977360c7eb30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1052da92b6d3c70b90495177eeb48166e20bbc283e86e1b0ef7cdd9369f27bd123f2d3efbd51855c122eb05ec63c9e8696ea5f25e39f1d1bf36940dfee26a62033c507f6418300ee84d1294796bd72df25e8002eb9c84fdd43a0961e13207e199c74203221663ebcd4eb38cf61a4f1763ff5cfb03756884ab09b601dcf5a8d894810d33d882f1f20980dd10b34feae55d014f6b10edbb40e29fc431135e9b2764ce3f59d17b73e2e6b38a9a1555621ec4bd40d863a248cbf9b20eac905530b90f9b9bb78f16c7e2d8664bda4a0491336869737f5b127c23c525df5b69222d65669ee5ec65bf818faef99ee2bccce7d4a4eff3633ca91ac3df2b52ceae594b6488c5e4bf01e48ad56bef18306259540fe75e018355becf51d50211caa248ba35d73531b10028ba2277216b27f1f786124b1251d8a2a282842f0d4dda1cea5616bc2efef0d3f13bd0956591e5f225613c78fd5543dcc7ed9759cbcdb4067c581dfc5ee4d52ebcc321ef18351b04bd9fd226bc4e810098452ba257b852565205186f4e2a07ab61f4ed9b38d1f3512bb913d16ae0a3fdcd47dce036d78f226058b4f0af73efd61b2619a5f63a61fa948a2a8930b93df42ca40c281989c9beb753d900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bfcf502732aa14548af36858a1bdffdb4e441f6e23f3175d5f901afe672b77529bd446da1905772513b6ff140880919da50d5dc80d4145735c8d14c64815480b5a6fa46cda744d00d5eb4ad53b8dffa845daf38bc1978afdc06bf19a3594b5a7c90a04394f109787e126914705fc651d45d6d068dff9dff8798a3ba23eac827202393bf59e0efaf4249d4c943085cffa111db65479b8d014a0593f69661466b88771585dffac40c076811dc9a9251610b1e0789f6131fd4b93c4c3bb3eb855de49140e358088e976eb936b891d54a4ea75537d09a9d29ac7cab885fc7cb184e864a209cf84a083081cb9fdf67c558f8aab982a5ee962db1cfce2c67169467a47e9b9d651b1c9fdc95aef6f49f3786b342d2c5b214a45c9787cf26c455c4851cd4985e97ca5d4a6a5a0c873cbb48a89ba1d7f95b52daf923f1fb6f04620b5797528f6158726ef02a3b6431915581bc8ae3942205cf4913e7062b4c3e66f8d18b268b28ec1a83410bf9697319c0d1505721d63d34c33c9a6d0cff691138fa39ab134b0701dfc62cb40a3d8184e7637d373f94d809d1d8385740fdbbaf7a55f68437f638078a5fb0c3ebc5a61f113167ee61ad343d9498ecd59f7992df4d2a434e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d7717ee93463926ef5c0fb39f1fc8480177fe3e857b3d8985eb74f18b78a1af315ce77fb1a38c48447e3f55429784a2b63e797645b3f84fb02f6e5f3042c8c457154c696e54acd333f49610a3417697ff1d4e78efe6b123ab06c1813862ddc202f0d15fdf6de6a6676cda1c1554e568c7e03b68af573bf00dbd3c2c4e5ecd7a8673ef6308e90e246229ee809b02e98aae381b065f1a19b22cb47854b540e54a46788ff20ee2e2eb33d9643ab41202b05560d584eb4db61a82e74e49804251fab734dc52e3130e4bc2b8f56590d07f67499b69ef6b0fb8a2aaf5f8685a99473c27f17eba61e6ca4701fefbf2a677cb7bc439d28ac7320d77596fe98c31be96e6a5f2f945b3be5206d2320dd1da7799dd810e6406e57972a00b5fb1ae08c906380beca2af9e08d211e2deeced9d59066bc42786b2dbacffbb492a31672ea62389d8ae930a99cd1b6ee46df51fd1452d766bbf02dfa32f4887d497952e3d552d0d94b2b032f3ee367c750276a46c506d52ecda7f7b3612a1b78d49e15c3b7d9cdadd64a56eb39b38b711c583c0290563d91fa796392ab5c44adc6abb75dc8c9f7d9bacc948f7b8658fbb4cb49ef4f84b97ec7dc15b1a5e6dfc6d4f494e68f7232800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001720ffb45b03977e139968e7a7c65950b0e5d1f0140799e78cdc3d52a332a0a207f5919b9e44cf2ce0f74660d470c7a8b9faa37f3181973d2ae17c8cf4935d61557845374d0fddcec9861e0d1a720d3e4b9750446bab538b9860c2408525a877bdbb4ab713f2e32a39a9f5767b81179202532c6a29a3e4f4ec4622cae5e1672fcfd1999f351e25da27207b1576ca537644c91c7946f06e3663e23a63d7769cadcc397e422b119e88f35e93c251bee734da7daa72e2b2403dfc87ba2bc84ef9a45039be57c81a81245f05bec1a308b1d070531cb66fe6e2b323cf72dad5c5bce573ca27a0e9e9074ac28bd930940fab18175121a433e4751a72016bb043ba797da89cf6606b43270ab94c0c476292c088ec69fe9f24770edd718d84a6ae533083b63a358357ce2fc28d2535eb3944c00316d198a8daf15aa475d79013c9699d4ab90ddf8564f489a3122d9b51fa1ff054f5478018e42ef7e0b616694460b295af70a4761479744ef26b21bd894ced4fe2a8554e6c8d4fae5b08527599427ad50170097fdf7a23ec862ebc2d579ef0f6524125ca317e53e263b80999b48f87f5a31c23fd7811efaf7e897186581c4e52c1f56ea2f75a728cbadeea3d920902f6c80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000291b26427b6f854cffff6f1c6c113a55c8bb684dc565e44bd947c6503ef6d76a6655ff709ea78c0873212d7a134c461e834887147bb3b276d931ebea058e572dacb88227e380f9b9205352d05287b340b05098594b0666977922992449f2071b6e4157e8fe29d1cee4a163bc17cda2141b2bd4559117d72e1b9937dc4725b077c1fecb41f1cb9545134601c7e9a76732fa4f2922f69fec78ca7541f6fc6d910a5e7df32974afa42c15acd5b95aa8f3aad536dc51b0a2a18c98b9eca17cee1c7b61f3cbfd1e5f2d1437988158ddf5bdd528bf45eac9a481875fb2b074928b396d42e778d62a0725550a4c82fc992ebc83046c927ccafdb097ace3040a1aabdccd7130ec68e2881688f59482decb7bb9e545dcbb57f355b9b78faff4f00ec31bc519196dee60b635f19ec0f5a6ab039d42de2f025031c2ae44de6bdf9658b23e62ebbe33e41c640df7aed068c6bd010e4d552f1eae25c3186a18d281f5e0a664ecea0117cc296ce140ec683aeaf7b5890dd7cb5a95f87f4384ee41f7161d0c4885f0e0d4e87d80e5e72509133966793258c37229df2998c1fcc41d8fb305092363959a2428616c9f84e77299a4b4d912e0f4636ad920950adb87468aab277628d1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017834a7ec66c95fc2b583e88967f4ed7fd8de1d28f11f49ba4980d09f6f81110e48c6674e0767cc8ad41f498a9a22274db693c2bf7c9617f1f70eb23bcca0782b9a6e3809c2345aa2cc97c0a510103eef221383b213500fcc30f7041a70dce52313eaafb2e65dbc811f07ffdafa440ce99e993dda0948f94d466db6b793ff760a29327674e9a973e41225f4761cf7c84285f0a339e6722d34141f13de7bd0ed7b30e51a4e934f764f982e7a3c9596df0c315fa746130bcaac6c366e7c97a83aea346932b748a899700369ab04ec8a6148bdb4bf1c05d3ac35b610b7cec9f81dedb170d07ea1a5a03bf53fc79b80fa469bf5f2904c51242471d271e2c122717413883752b24cf6e5f8a0f58cfd448038e0dd1e9af00570e9a01d946dae80f98dd948694547e3515eaebbcb2f2baa37278c5fdaa7054c28c3f691d3aeb92e892ffc66a24c5a354d1cfad0c0184da56bd6170ecb0362954403d129216ecaf1382b5e0df80384c493e85b39e7d01a8a15183322c23006bcacd956b5730d0443136797e09b6f2ecff1f1f2229e26b055ac3d56977078749aa1e994bf9158bb72e21abaecbfa5cad9be6372a52657280b19b285507cc806f8ecae4c988ab41a2e2b1e5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025747f21eef5640ddfd87bd237b9a8a75ede87255d0299fc28c1c7066b916dc9112a68e0cf167ab4a10109951d126aa300beb1471314fab7481cf5c4f414837b279f7d5f10ca2d201476627d64b43fcecb95e0e9cafa07ad5c0f14386bcb6358056e3dc7386259fa99b904c7a78bc21cfd5f95976f07369290c589bfab19728c2d973a900e47c7f1a74ca23dfd4192fb1020d81f4bfedb56dd35e428b895a04b6675786d042e1a6ee809b2d939edb2473c588d9d2355680f7776a0930c25a6d44f93c6fd1340c8aa97cddda8babe360b0a65fb3a0064bae9a4ceebf1bd455cca0f192d3608c62601d820c7cac3307d4d5e4eb76ca5443bbd3969e528fc8bfb5d21acc3e5f636f81328dcccb9c18277ab12e4fafdfbccb013a7c7b22c065046b58499c985a0b7ef87964dc8c219cf62554f07a0eb9e5a52173ec494ff582d938387df476c247edc79555c97663a47f7b0c4b00b4f4f715c3f7417705e7878af619488308dce653f4718b19553d67cb756ac8d319dd010fe7ba09cff4c3af0af65d172d3fe3bc0abf278105633f070f5d9d76824eebcf8ba6995c8b98cab9b9e2514e1705936c0cbea24a5520e5b090b32c8d7dbda2dae54f5b4b364229172e9f30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000115c331e5b56662e221d0fb0deac6c7b71d5de8f7943ee27f8a1f9506eec67f02ad5e0d38578ee5eef7185fe5738f06b8bb18b2926904fe21d3fecba8ea605e7c1de4f04043ed30ed804c3685fea72d0e5beecdfedb990e91770c90af2c3e62b1945087eb862b4fc427101bebecd636b5bff62b757882304911d1c1aba23528b8c7768573d672ed9facb9114e35c52fd7bf5974bf250b5f5d36079910985671b35a28acd2cdf39ba70c0cb7b8ae565007c7628e63bfcf4d4616b57ad08b4b8b81b3c07d5829696660fab2d672fbfb554e1e6b0d6aa4f2a253a5852c5b1d795e4dd3ca3d0f55e9a76dcd918f432ca61fc4a24327ceab4c7979b6313620523997074d46c6ea6627b95d7cfe50561ff1dea4b4af4a55891b0488ffee3ae79e96f75e52651c8a7289fa1f7ac287205710931cf89bb16fdeb7b209b35941edd2fa9f5242d5a21832ad67662c2472b52609ba5c81e3813374f45d32f8c695c2554a95f838d79c010a2690d9d9970ba34b1eab119c583a69a6c215d215021adb2961d35de29ebdade9e2def98b6c74643c07e60bd5af4effd009e1c5dd45629e734e0ae761194b2d51e48253e566a7f511ae5d3a904b4aaff931a2635b4a70747b555f8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010aabcde93acb1fed9ca5cb3b98b0df08234b4e94d49416fe29e658441e40a7781d3d73191e5e0a8d59d9700330dbb575b16190c4d8e904f0c964038612adcfda51814350d00f176db412285d9f71cc33f67c5d29df03c03d27e65fc9ac847e941af4660909f1f93af32f6c0560c90a80ac4fc1a0b20d917427c4c556f51ce5eea63468602672ad73de42cd224e2ec44d6b6217eedc6468cec2da4b69ee0da9619891889a4ebf70ba7f9811da913193c46c1e516df3e069c58d62dc67632a36ca6ab5d936e4a3888f9436b18b0d0af91477342f890ab11cda81d894dec2bc58df32813526838cb893dde080c477113d815b2f86983f788e0e2e0908d0a1b0cb78d51dd8500e444742f641e42f74e54e901b0e14acdcdcfb6fd43dadf811294940362e515a7aadad114fec1e6076deeedf6408be2b8493a3f288d63223a8537d89f470f7fdd1c380178563f17e16b2ec40a37ab547048a4fcdf3ee17ad9c065a50ac75f0c324013533845f88a88f5d1a1f1edd24cbb8a07633867e8b022fcea0a1dc177806623ef7e3f704227c1cc89e4bb0d6ae86191c10cb1e59bf3c2db54d738a9ceca6836dbf2618f33f244735aa4b2aaf97aba5a2da534414d09775f87c80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000890c17ace75ac642dd38b730730e76d465269d25bb056201bea87f6287779dc5daf368d4dc9c6d1a3e4f57fd6b97c625165ead5b6225ea1bb9de1d1a2285bbbe4efca8dfd4471d6ee6e16104b708132548f9507bd4b6cf3fda2d1f869dc5fb6a3137eef7692ebfc673a0716e0ac5293e7f5c2fd5fb5df207601b1cbba5dc8d3d71f4018f3e7674ed2cfd34e705f24e17938e5973d82367f0f59519ff3bafb95112de6085e518eef7f2d1b5361f56605cd22f94cff39ba884e6e6e79107bac912aa3d12b1a9fe3726c28f6b039804f83bd82572babb414a76c01471c287822e31449f9e68837bbb6c3cdcb6b9c467a9d11972f932c126a5e952874dca4f9332daf2fb819c1ae4c70ccf5b30ae4381b254e4c7fde4e03758e31bbe875318dc97d9620ba3c8e67792623b934250bf4d7341688be542266f43c0ba1a1c9b2271b47426eda08fc5863b43c20446f54ccc1ed45b49b908dc0d86a1644cfa9465bc365e2deaeba6a560050e6e8ddf2ec7be498f9071734d81d956f162065b34a382d7e2f64803a1334900bbec81b351f7555d3983712d1d3acafa91e6e49938955d08028bdf24e63dfd5f0cf81d530799801ab68d86abb95696eea686906fede3a2284e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002979586d8e9f21b03e1aa2652b2e79b737b2a451831e0b8c3f8df8d3c6037de78aafbc02372336972fce6bbc005af0c09c23360ffa49c71b66d279b87b634368bb7a6ac419e738370d7c2025916a2ceb10b4d756262944bf1c8c59ad7316e2ea0bab8522dea201396cfd0ac0ccfb6487cfb089d98e65dee06147fcfe4fca7bdd0b69e2bf3731b6942fe1e80aac2252b0ba65cf60b5012ab67ee1e9f0f542ef5433b2be8e36015f9feb5b847676a7c2a0b2eab281d2caa6433670a292ae5598d9984a3c57dcde627ecc7c63dfcd2fea4e412f479b66d7e0318b63c24971fd53ded0f71b6a63880129be08b38f349bdab2645cdad6a204e2a517094473a3263888a4634c0aa842a2193d853abf4c3b2c41bf3e0d07ec06f3d72ff40c760f0b528821ff8285c6f7a0814cd14ba73c971b896f0af744301b6992b32c01da68cd5f2566ef70fa846a737beebfb620e4d9e6f01cb48be57c8b198c7eeaeb4f6bd8041e6d04eb61c323387a1c76054fa8ffdbc441cf7b0e441f0bfe33dc5fe560dd3fe6c800dde459d4b32e37203a84e9985509b9e9f682071b2cf8e86db43c2380c3c9ee8bd08c7d0dd53e34cac1adfe2a80cb67b3020ca0ee69a1d4a4a1bcb2cf51840000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000859ecf3ca8502bf27ea50fb38b196c946afe6b771a826985b827ad66369bc06149688367622595240a759f4e9f4eeb2882cc9cd991b972d5769193616886ea3d45d4298f6ed362c5d2c430df1c44c347c4be7295e0f738c21e87739287abc31ccb5c745b46e29655f91f47f7345c49d78bf56c6023a4189f6da5eba431d184416ab6a26bd924bbb04a99b7d4a07676f4ed76558938be1bea94574be81a36acfca8cb65f02cd1bd7f199fed65b1973ed927b709ee0e1a0f0000fd76d1df24e926b65b85c973e715034b3c62d3b485dd4ed6e0416db0ffb6cc7ae2704a0ebe4463b0458f1563a46cfb8be8972529214c82c6e7dc3c149ee12d15c1f8249d0a1976f74681bf561e85f3d8be155d17c8222d80693e95615cd082a6f8270b7c293171ce152b599f43061455a5a5fbbbdb3064022dea43df1629c76a4e6479aa7d10e815cd3b3cefd96e0e68752d47fa9df6dc936bad35bd5fbc872ec953e58447247617dd7b682918c941b57c59e75a226b4b793d461ab5c6d7d09dde9043c187f3f07217c0f3dc5979aed032fe79e69fe9e7b3bd3984e30649a5451b6eb0cc046c54961d7a300fbe77f45bc2c98c9365e9a4638977efca597c36b1a1e9e0c4f2b3ad00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a912d2ca1b056037e4ff4bbad093263140cc317578ae22a9c7ed09bc0627e264d5718c5214eb9c9ee412fa6ec8a445506e82f554f61c9cc913751aec288bea850bb87a3c86e285659db32ddda7e34fe5f202ca5dd908ec6eace8e5200e08dc01a294cf05657eb2c1a2803ed04cd327d36cfc7f4ca25afb5d4e86d856f499d4a65925f1ed712ca54658a34964d01495fe841845f3efcf94b5c476b6c21d7b38d3c1d71608359e512a6b3f5c94f21c12e337835846dd2a97ce6bda77d76df7b718c131e95675d3583ba83f2a4d92c90aa2df992d2b067796fa13ffb10c07ac867f5a4728ca2438748a61429a9eef8439d3ededd23b08a64f1c5aa420099ca35162dbebd76aef6468d053ecd54c4e466a3322acfbd26f02b48e26a41285894db4fe18373f4a622ac454368bf2654aa0a41e1927b16b284e0e89e5b6d5f0329d93e3baabe90c50551b67bb7e6fd7f6a026a2da9c69780ae7cd6262c0dee449c118b40b077e32c0b7c0d5f5a291a791c572a4637b8971f85b5802acf148c76c375daefff2e7358174c9547f69e694c49560a99ff67c71c41c556860b4a06dd2ca5cb1f08d6b96a0cf59de0c1c9a8bc484103420e00fae073eeeb18ba9f60fcddfd7c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000999a42952e0797529d1ec3b3a7477faacdc7952af4b9ef56be7e22192539353ce74855d48904fe72248c017e95b960ea6a866ad253e4962f3bbd8fa405ab23617a503a637a413aaa398a1231cad4e55ad10f22c2bd626fdb6a2d53d23dd79cfe7ea7f3794f944d63f605ae3769c45779b38e8cfe895a861125135b10163380005dee7488d997f516440c091a58326384aaa4df939dbd76a6b53543645dc1d76ade0e0f494ab54ec670709e0f31ad0bd54290c96906b6d5064c32d94619a61fc8f853d2621ddc736ad1c21e64c742eca27cceff645d1963f47536f0e1fce2ea59bd4a643f3cc0047fdc5f95cc578f466657486f8b01bda12cec5a1e71d739bd750aa41c14118298929e27f00973f16d463ef1dac2711e92a6c26aaf3d6af0a2aac74b4be06883e3f3e0de64956c536e240db3aad0ae6fadeb21172ab20f89cee20dccf1b61d3fe90cf0f0c9e13c086f14f54673e85eee02f09e7864955e5541475d411b05ef879565d8b155c45075cbb2ce5fba57e9a55ddaa5c4982ebc9372753f7c7c741e060d2edea9d5568dd8397bce7f70dd6167417546ee8174901659df6508a61ecdf9cdf161969cc4dbbfa15981e452bf1a0cd9c46f432a800eee8d9e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030382fa42ec75c98e8ac11a6ea1aac50eb635288876b43a5bef7d8739e069b3bfe6e5dd515607289829230ac55b825599ae9ce5a02b279a75afe701936c2a62dfc12bc4c2220e4e2d90346bbfc89a835243b80ab7ecba160d2f9b17230def89537de444c67de1f47c881a04ef7eb8f45e6c090101931e72bb44da7491cd59d96b90f6fd7e1287186956eaaafb70099fa8bdb57d312ed493c26b2b619ec2836d637da65abf0f2844ccd2de7a5fc1701e23b36ec6c323c3494cd93edcfb26a369f5803bcc3e715a109a26f825443580903eb732eac405ac69ec0bd7ce47b2f9add7bcdd9cac2f7b43f0228688856ca298d3ca3afe323a6075c3311e3041250963a0ee9f7dad146600bedb60f94656675bc9930b45ffd0c4dd24f179a0ec3be70f4bdc9cd9ef264300b10bb5311f2c58bf9e2ae916137bc57f0203410ebd79efdffc2f6da59a138f1e037fb91406c3131149111ab61765d858f19750b3a9e5893abdd407b129831de097d6b697115a0c32efdc843c21ab6434d7267d252cff9a1130595d47ba02f7ccaf8cd9e711189ba8d990e6e6e6c9a6a7b3aa4ec020c3bca43527e287a83a717f5c7f89b0a0d4dde8b6880ce3d6767e0dcd7a7708ccefb1ca100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e23a0b91474bce1fe11097ee40fb2489e0f8e9bf1e0e7446e30f7a48e769280e2218243f470a7345b5825b6d1d91ad5c121c15a86d304b9a9060665d22a7f95003e84788fe74ccb2b24b4aa4da7fa9b389f11789e8e9c45fa59a2bb3a3ab500f03abdc28a915649edc6ce457f02a2e5896ae3de6c9e83d739e5d4cbc37cf0772fa682a577f867475ac546675d6b893055248a9569e1cee0e2ffe1defd44607999a046ebe7d8b1a6f17405e37583cb060ebd1cbd99de958b186030e5cb95ed4deb88bc872c9af8e593d830c179ee276edc6e104449a617288849fe7fdb5d295defbb7927ab706542f2677bf61559ed45d8f74891922496ed0fe37f883e800eb3a503d8707054946ff27f08fc58dd4d76e328c5897235fb481111a58917407e7674993de94eb437379941a79e8326fb405056866b025d95097f31a7f02439be1835543f14fe3014966f5b276a74fde2b5bb315c83dfedc101f9b557a042b4e92ceb50d109ea9314a036f31e0071609ab005cc32e56eda984ef2616c8049f6c0e3b8c92aa72b0bb5087b93809cb931423c61eefb14badddde5b546d14b35d4729bacd33a1fa967d46690b3399946e1499ed2606d9a38ef1fe1171315114ff2a43b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a726956ed4011e04a066107969280ef3f0959337ac0a4173b3795048664d268479ca11e40f4bb403dcdf410b5ac000d408304b92e8f96f1a2944d861f24ab9524c3d21eac421da45cb001ab3bf50f1d98520c0ac020d460be998a5336d3c7259ac49a646d61fcdb8af1f6969b12336cbe3e03895f442e2fcd90a7f4aa0e3c6d77c5fe52c364aeed12a9096e8cd91c2b7c360233f407e35186440539356145aeae3f6d7c0d88bbf73bb753a4f0bcd7f3d657afce0dfe1622712892d3b0beb5321504c0232c5b2443956eafd1f4f2af5ad0e6f203dfb96f2e430a948c94bb67539b5a53b11285bc4e06460d4def5d09d3759d38f4eb9ac5ccfecc2fb5527af86701401a5f79246800bf157cda85798dc9829653d43e32083a407e7d4581c574f18c0a0afc7c59c7ad3d9ace59b2e76a7e6f93b93bf8a99813e27a69296f497d0f335028c39fa2e33c32d89cb3ff786259f45eb253ab0bb652201b012c3a61ba8e54651304f8bab341faa6270b4144b2be50aba5d38afe7476d43f35dfbbc508dc0ac69bd1161d5569ae40dc9ecc4a40992414e09af85bd962a2fce0007505c6621711da0929dd2860010802e16144353e85d65ecba010fadcee4a46621d32c450000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a11568262e043cc7a52617baa94a2353da70f36e636d4d97fd48a5ba8430c56f05f23fe92a03885a25d4202f3671551955e6bc0af239cf12be7826582363619783947ff1d5de9c2194660f08e6414985ae4072b81ab8cc0a66e56ab6a3598573df5784078633e6fbc6457d9aa388c8cb4097ca272100827ca3443a0995979abaed6ed8f53bcd31ae00afb3a39fa99ffe468a8aef668f694c6485fd20fbedd2284e7519c2bd9883556b353b18d8bf34cb869fe1261c711ed0922385aa947c62e301adfc9b4c36968edcd38d6dbaf45a7d57f7c8133b3e96c950fdf2873432b8ecfecad1a68c8c12e1bd456638c97581f010dc7476fc1d041b9a7b35f2a6ff1d8abe52f24b4bd421f10cbf189cac02461f0fdce526138663d1b5825a7f77acf5559f562dc3c77722c1d0164018da10084a196042fafe2b30a52f623b4ab6be06d4097c6fef03bdad0ca08e856a16744b3bfc1760becf2c796c8df0673f534a678489a5b31e46f7ccb01fd7a0b1cf51fad14f28beff5c429de713aa85b48e9c809a7e40bdee2d481022022646369b22cfe8dd764a6797b9de684be1a3e7c4cf44b656fc7f334d78ae6b0314f4f696ea04147d3afc5ce0ab3e1b2d992a2adcaa98c4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012574ecec7f16f66601be08152a64c074fb55dc9f4c58383686f6bd7376eae593916a562b51fce7e9c7b91efcde2dee503544838efb07c39976361ea7e6b7dcb399bf6c4e838d8b1630ae4088dfb6f25777061408dd8d0763f69062f664c7dcb2dc66e093b44ea3624b37452b470c18d901d4ccd04486d88ba28abb71702b92110244afaf4d9f3d77809f31853546e3120a3bd54a19743e6d5e4fd03fd6f7ebb16c070dd231ce38670aa04b56ed0951f6aa7c285844d745501451d7ef7cbe9cdc4fd4200e901dffbe1a212d96452bf85ee2ede0e74a40f783db05ce218245c294585ab8044f424634f5aa564cb531a43671dc86b08b3bf77a6c25d70de94ee5e78507164459e78e6398f2d9c6a9aad340bf48ab594803f720a6d5e56b50a1208556b6b675f48114d8a4eddadfb5497cf6a498a20cac65acdccf9da8577a4498ce1381ee3b7cc535bad179ffd0ac54839aa887c237d5843da3223272a8a504f30dd730b1e26e6292784d0b172a66e4e24cc6a01e40091a2b1bfd76c7bdf24cc319a11bdd7b7f81f847eeb8d9b788367e7a0168a079b4996d761a2d83aa83e82c049fec1b0160484272ab173eb7f5ecbc0afa36b15a09e286cde4044872212abfd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f350c22237b707163f3db7c783c97d4b0f6afccb13d186b9c09d98803ab36c5233f6bf13fb45cf6114e899494eff4bedfab7153b523ea583b1457ccbdb3080587e98c0b380b3dc19ee0092c71d2c62c297d675e21b6cd3496eb0b842a23b8fddc628e38fc1cdc0ee6cfd3548e7ad98fe512d528f5a59b56ea22eda92a3a5a980b37ff6defbd2db4815848fb192dbe9a62c27d0c637e40682c72ac3ef175f07fe53a3604f81528cdce47ccb9808e61161187aa4b8374846f922d216544684583f30b2c6f55706cdd1675053295a1c79214044e4df8386cc8b47f614ecb33bf68e1162649ecd5a37820e51a1681e865a7def04c890c25dd54b5db10c19e5851fc4ae2009c76fc23f160d5726bf10b6b797f5fdb8299d2c1f609614a82e2a970a8aab61e4c6648b1c43a961547e742cb3d77fbe60bed3c54a2941120e7a3077b4d507277589bc04c964b57d6637faf8070ffb90cfae9c0a5d40cc57c1d4a53932b340f03bf1ff402376dfebe1b05b11229e201ece766774971bceb6676d2aee3f86f3edf8fa9540f39d9f97bc0c03f895e143c9055f279db5295fe57ac2a4acfb88d47b84b755e8f46abb307be22b2f807652a216051166939f82d777586d34da000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a8b2c61a9e66185b8d590ce6994f5ab4ac388aa464b28d21a947a40862ee4ccf97f28c88a8347799dad52d2b7cfbc6813dd7220245c26b4dd68b2ba51952f43698239e49b4c2dbd11c9d37640b653128b6581c0b24806a2cd1b511a56f5e8ddf3517ba6f61f6bb4d3bad29496a5b5feb43d798fd6c0e39461ae2f826c8856c27192e319c2c3babd4013dc5d47a712cdd061c22ce7e2a18bc5b8ce04e5181b4b7dda147461f7370d76197ebfc05f1a5d90c78bef76a58029fe990a0f1c11b3a9a1ad8ad3b1bc7c1e9053fdf078088ce09c76ccedf0833a399e01d6d4d3e994b0f4228fba664d2e0bb5682f7bfa68cc2ebe37cc67ec12a665be5c3682b5d5d9625117207783de312ef4885fe46fdaa857bdb3e20a8c288c40143a34c8c023e1e8917c4ab9ca5ba209b8b5ff7886db4f48784b72b1856217d5c8d109c337bae551aac70cec3f88e9d4767536b8b02f792de9c3cdba1aab5a1a2fc25540b81cb2ad047611bba4f915db5bd8086b734df75b051811a3e7cdaeb6c7ed85ac0986a95b5d9483ef14af7d2a231ef6ae359d15564548cd6689ecbb4fe19d4f64336d1cc3b011b3e1f8da1c02355b39ae377ec6bcd980f42a98e3e15c1cbc0b0eefc5242900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bc594b92baf1e7aab9abff6baa649f85ed4fa7ae3735c4d3a9be60e55ed82e4ec1eb3f3a8f16e91ae82b96f3f87f273b6e0fefd79079955414d5f5aa73b590b1c1a178a7754f95ce48faca6b329a07909d66a9c903a61780f9ffc0b33d6f3c3a59b13c23914f7428764a6ed3793027e68365a79286f175d908326897dcd5f4a123c82f6ceb335a015f2e974f4915a34e1f03d804f2f7570b1ac40ce9a83419ad00089ece8d24d3dbd05251aeb48fa1c6f833a7746fa9dccaafc67d0cfbf58b67b9d2d7e19fee5f46a0e99426f1c79aa43ff0ae798103ce4b1ff79baec73568de44386593183d0e3c790f175f19230412f9a2908ae00370c4ef43fb466857fc5bee0031283c6da850da04044ff2481e009db8b5785d476ae30fdd635ca601871b1b81fd47af98e513ab193be46af7eb7a9eb041f7cac699d904be192666a83689ca5a482d2c2060716ae45b6afa16ec70e9aada9a5f806894410e05e44842812070c1e748c11c50e5ebf86e9de28c5fbf038f9974308dc6736c93c5e4e3227a52e1be7d5f73ce554c0e6974cce1af86c497261f68f938026e449dfbbd87888789f9ee968eadd46318b242582aa9a58ce11eebee6d5b6049bb6f13ad50ac726ba00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d3db57057ca0d4b2e5d13ff9492f0341d27c1e465f1e607205d06961be66b8f47716b286982404179665d4651708c90710a1b8456f82af5125f48434c72268f70971227487b2f9b204fe61dbae88a79e8f5148811a2637e1e450962712bee6b570676914ea87689206bd125a26d99aa46fa86d715ea697627101a0b422d40ecba5610a1db2f2b834331784261bdf6f6ad7fd8ddbbd95a9c53b78a4aa3a92256032065af6ebc46782c7a967e84b18938b9fa99da5a1a1c726c78d7555cec4e7f6088146883c0f938c4b6bab2f0252def1cfc2a3ba6c1c599904faeb13c9b66ed102628591d97c53980f90a473915f23ba23b87411547a926885279f09c09442abb3906f959211ef5d24b8b3fb412dfa3ee3a9b7b74b6fd382747424d6635f53263764a4319838d2b6719cbaa0c785410a94880e11d8eb99e91782f20fde54c20490898162754de2c31441c02fe40912e7d8bb2c27a5f5e02b0fc78e0959d51ce24b8f2bacf02ad85d6d99061b27a38c22a6eb9a73bff5e5e40483ceeb9d7d4250bd4f11fcaf19dfa996483509861369a9dec36a33cdf748dc857b88a2436941827018a5f5d4ffd5e8af0780ae0d286d5b5c201e1e0c322db4b802ca122a2b2720000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000146e495ab0de6ad31e0d0b54206a7da800107c2c7852bf1c482f8032bcddd105b285017375f6f2f8832cac298c84fe09617b0962cdcb618a376ae8067cf977fa40fa0cd1909cced13c8795ed4160ecb46881d760562f05328c8b945661b4620c2f979671908691bfb3d7a167ca7618e148a3fa6d9bf6b49163c0cb464b9807a1e56f8f0ed3a504c671c7acc6568a9db0937c070d697241f60d62abbc1e8d5a0716881177835a62f694e771b95802f7836e06a29c126bd37ed57f39a060b2002d0af43c9ac5ae9c49255a0f2edbfaa5fad9cf382d6a42e0d9b03ac9dd5acd821ce9c1b3f64a2bf3d4ea951e2444f5a0863d1f7232935c530264b5aea07cb2bb37bbff634ffcef1d18cd9119f45cc6246c243b0bd11a2bfb080df31800a1a6c95d2aa43e97ff930b1e6e7d3ec1904a378c2428f6f6839929e79b6a7149de05f4d0e58c995622e9c8ad944be297f4cf24585d9cf0314d1494b35dc474bc49327712c2dbd4ba17309964ebb35a6cabaa6e6b06f25075f970b4e6dc15598b983b4e396d310bd7e0f051c57d0f6fdffd0491a9ff5de5e86bbb402a2272a0b17bdc536801f41502c97d14cad61bb6bb0c63d747d6051a4945fbbb04448abf0f8ecf03a60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000299b0a6f0a9043190463a001cce3e9f904744021059aea96c32ca9b290c35e0d37e314722ebb2548a3e56b578f22dd5efaee030f4eb4904e2302f68e9e00ccc0c5a4e28c53a4dae17a3c1fcd8cebd65717e11d13a49072c5d66b0be7ac059e6e4a2f07a0e54fbdf034d5ce8a2b7e4dc23308b1503ae5c8426452e5ddaaf5169631dde73ca2cd9691c6fa6209e5fc6cccdcc9e3a3aa329a90b31a7ccc64ed63729630a712a7de890f42624aceeec5c67c3ed9c34d3f7adec953a75b4d0cbabc851ab6cb01b6a07c609d44802eb8a94ab5cf88afa46d35ef3f04a8dd97096624a29cc3c2486272205049febf23f5411ba3d0e988b1ae58484a68126808e7de349f80ef371fa59fef5ab24f178cb84130118fe254e6439f0317676c55119eafec4a512aa2700ddf11dd36e820d4965a24683105a225028e4d17872eb68dc78cf50222f99aa59e6bbb44f6cc82807ed32a464eae57d9399b027c1a68011c501e8693fc2dc908bd0dc35cbf4f903c094555aecfff3df2d1ceef17b2e6d52e61e86e81315616a1b2b32a08182677796ad67e1ce77796608368fa6ce91b6e1fc57fec9d912a365fcff9aa62a79e35f7bacd67efe0f199aa20e7cb45c857907864fb2ee100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002899b2920b6cbe2bbe0bba3af573f010915854ebf94d604f7bd78ae8e0a5715b0a88a6e845868f51bd0194955d0d4df9031bfa90a408fa529b928ca31ebcbe66f76751bdc943e0ab0202a2ff0d547f57656309c28f758431c586a759160bfe55f4e611876a506f973cf8ab3ad02d3d5c9ca57d3aa72b3493345e34d306d10dda5a072488612a90bee21b0244cd3ce3240a51d4ebd74b119097a44246bb143646ca8ca152c97a1634febd136e875090635ceb41bcd88b9edbb404fc11a3665ee853f12af6db4a67d28d167369091b4303cf340e12e260c59273fcd21b66c611720ec96aefd5de43932f7e1c606f03fdbff55da45961073e1129c8865ad5f3fd36bcc3f126534470eed1aac437bae774941fb24552031f0c8d21a70289d6ba6eb0f17ff41770f56cf85f8ea8df2e25ddbdf684cea34f55c80b3aba339aac8d2f7eff1d310e6dacfce8504e67ba4baf2c338af2b32465a3b304d03d8af4df70fccde932b3528d22d47d7efeb8a6bf8a6e002b210fabf4341a42413c21abb519c7b99ae53e3b07ddccd895dac56472fe5dae5a56524f8740b903ccb36dcec303c2ada40ca24deba345d35fb8343dd4d2934a73c8b8ae3b651dcee1fa41dcd98b5fdd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b032b55681af1daffba6631feeee15067b68604b54df3a8af159ede2d195517c9d54a757fb4d3d47bca6427b1b80087bcbca6d102bd9702864e8e2a1b07af9e3a78d64c5287860b520f4bdbe12ffc83eba84109ff469dce5e0fe812f24af1affc0ce63f1873c85590247f327c388c1b3a78cf54e43ee0ff9f28fa63235e0ca7fa4957f5758f6d8368eb0ca6fdcc70c250ba4d40588a9ca8d67195c1b02c1946ce9814c0613265030921af0270df8c281bd9f6344f2efc78cf8df55096b8634a57852ef097035833b612c291f3f6f7c659c9fc70f2b9a98d0065703ec560753a9bfbed2164738b42afa5dc511bde29650ed141e1413722ae2deaca5cd877be18b3c436724b1bca653d862b6aa7ab10c970857a21d180b773fa33b10fc7155d09a9fdb5b50444419e698a15f3982778060eaa9f15fb6c9442d67f147566dd4d1bee0e8c42b42591c19613c6b3c29a741bf3836a4d22180ff3cfbeef28e64021cd4635666adaef13759026aac68e430e80d245897bcd95243830462f6945fe400c9c2b3a82043a75debcc0589c021680a68f2505f30ee30aa1f4a4488286baea213ae1e316af972bbc4081ecf98d99f40ab3528e49caac564bfce0e1c10d9f54b5e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac30466a9da376dee47d3905419da02ba76fa51e458dda7ec8dabea4a6438486083ed1f191ded0b3b913fbd10d3fde01a38fdfce0817d40de3b59b0b58877cf890637b5729c739079ca2841a4480a00e86452d8fd37554dd9d3b3d76d90863b66b26d8f8a1070761315e0069f157c9e105cd28e180d2293615774c05c2367dc2cc54a47390430fab86ea8152559522d101fdc9d44c949e011edfa4cc621b3bb6d2abb130a3a8e4bfc4eabd91892e98dc18cdc439e8872268fa7af2d2ca285f72b0be6e552945788da88d3c8110c9f428f95945abed3d4f2fea01c3e10d16db952183e431ac733c00bca2a3885e89617011aa1632d46baa0002948d12564eca720607a5b145b7173152d1f3829ed56ecc2f4a6ff6df9bad307d66e6f9e0549132ff7cddb3478738a0461894341b35090ef687187924f688ab5083045ca4e85820290cead69f592d6b1718753c1b470a1c4d5387cf73dce9df7d4b88af2b9d5c39d221b92b6e08968e559011b1a7459d43f4ec04d1fa8e275bfde07e1d978007d18e17cd252ded7ccc1a515e0402edbacfbae9adf8e10dee79a76fab7c704fbebb98a36cae9d5727d1bd8814a08e608289159c1275699c2bd68e944632775de4a60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000917efe760bdc15d1e8ae6b2b65657ac5e603de097b35bb1407e8b7473f36879de258050b5b8f31a8189ac441a3c9f4e631492e640446a37f9f7cb72438f175316a6677a0ded1ffa7f9203277e68fc4eef9c3679e3726d640c71cee6e07346e7697a073d3cda07c6d59d8597238d8c1d45a50249539fe5559f7b6a6b118d92a4590edc722c7abebbe835e91ca302b2bca9bc4da4e987aefa7fe4c39563e5ec4dbd236fc524d6783694c3ae74f15f7a961b3d174de21164274adb7de046eb5237217ae54cb293d4d6b2adaeaf749e6405ae622463c9b405a0e08d7b376f168ed12832a104c7c6ce8d3e7a11508fd7d40ed0886af9f661965f5c43600931f263ce4175a53ba48f38ab9e6861af695b70b7c5b395c0dda6c00e8fa128b31b5ac7f2d4c87b5bdd9350b67794964894a0a0214d6506a79826dd96cd26b1f4c6cb4e8306d839bad2a04d335bb668d66658c6b9587b650a2a123541465c7f943c5f5706e5bdb52983acfd3226d7f39d52d30a6bd29e8ec8f47c2f9554ac4937dc727b816137ffede6b71813b5ac424e83d46b06a6d7cc80b89f74ccfe348b6f34f18f65d0231d32cf6e99260a9f6c4c664349d213d1d01b45cdb73c6bbfbd7db8a51c20200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c6c3251fc17d0a9ed39c9df854e966fdbd0017c37885d8a5e4a6f6ff60cde7ced759d003f76128a41c639bcddd41cdec330e2d15f124c12be7d9ec877e7e6f1c2444bfd0081bde02bfb7ee276e6c55d9256e6d724f7326f83fcd5c8cd0c4efd3913ec7ac2469389d6de6aa46554b8cf3ea9848834cd67ea05d2439c80683143436ff1c76481ed9d68dc8c037d323ce7a5318f528150ae02451b2c7c78a60e809abe9f1d8dd35885d8533107f871cd41875af284660b82fc971949899e08103054809c48ee5eaa139e96aebd31b6e5a262944b9901df9cda883a82042254758714658cc20c8ff59bf1f760b55be7d5ce801306ea8347d3647644551c1962c6c8d4a63ca893a681fb9c54d458e9598d0df1ebec5e9dc0179fda5b4535f9d559285f2065b23d29ded408196dec393e02e557221eb43b847a3d6e63a1050483b67995bf51a56cefca73d427ddfd3a9f6e932c6e8816a2a6f581f15444f48a5fd817ce030a1820a6e94c8679a7c4b856d79854ef17ea9085c843cedff025787a49322c5622aa5d690171e69893fa5b5c6e33519f29e46823364cf1c89e2923b50dc89b6683ed3993a34c8addf0d516e8c60679ebacb7002698145df3ba83cd95bc85000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019e1618ac4168a547228ed39fd382a44aeff6f652b8efd9d49b95759634087b88bd1a3a29d6bbcc0af99defe1a09f4cc4b53224a4b3e9027ca63c810f3cf05333a8488c5acff37fde8e4b346d4641ec9f98215e5cbe5d852185881d55da023ab2ae269f929bc2e6870200a826ade575053a29415db721362100174e6f32cf44c22d444bc028bfd54e09264c28e6bb06d81731ad859b6c287c4b002c0a8c462877f3550b001da567c9eee9a7f6f88049ff761b59f4e79c35b27e7e32f012bc43b564710c18db25f9ba4c43f72ff14cb2bbaeb47174b099fdb6aef3ccb2a5201b9c08812bd36128c123917514f3b75b603a0a85e1969ed68261211fc6e0e882480ec1030677e60243df75143ec44531752ab8be03ec692063f941f31754bf3b4ebf24b1ec1baa571b1c9705b19cf3e5acfbf9f68de67665182d58ce105cea16e6f3d6400c39451c543799ed3ab0753e242453c60000fde38d36e12b2bca32908f65bc810d1be561099c1ce80b98a9f2ccdb976a3034f9a8d240832ac2b35045666a9d14de89a93b66dbe99c2eabffbe16355123e2df37d6e4c7051af72881a30d7add7c29e7b6ff3b81233843c2780fef8f039eab0df68ede72ae32dec1b2c25b30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8f42069a2b63fa21a641e8c5b7e4ddea9946cbd07bdedc3a0dde2bc33f4bd80f7599581fbb2d80be94f58b5666bf088989e2b19ad6178f3e7fe5ef2e57dd5e70bfea420ebe6aac1280c255f6516da21bdd5cc01545bdd5416335208a995067d0eed0012232bbf9ec3cfdbbd14514e33f198b94bf3c2168338b79ee2d94af15c9f0b4092bdd47364f24494e433f3bff4db9c3325a1e027bb367e78263d6806f14336f428d72c52763d53f5435f9f3193d3724f910f0960afa04386888f0016367798d73c10686bd7fc4dc82874a0a0f0386259fca41d4112305074426307260f5af16ef8b11454adae3186c0384b7f3a3d8fe98f84bac6517a4cd44222ffaa68cc615db815fc7d5ab63dcde5a99c432184e976f1fad383210b245203a5ae5d2f1fc0c57dddd9277c9eecc53b711d75b34e2f4157afd9e9c95b90668eef908457e3138e6fb68afbee33a35c157153c1eef6cb87059c1675af2525ab0db2fce3a91f0a92af34913583970c347034f8d7a6705bba46fcd65404d03862d4da1bb56e68fe8469088186b464d4ddc09850e465df707b926ec243d49205b4861ec020984bbef59da43478cfc82e85f7841de780131a44f3e85c92f915bdaedf7b33b0b40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000953e4d6b33279af374477368a191216c0f7b4cd5ac99ede668f88308d01296ee114200e870ceb1c741b8c01c8033c18b9e05cf6f523a781920d7fc3367db56f5b1333d373fea13af84ce767e35930420416ab2081660785e70edf5087cba2e92965b03755519857c5d8adbe548f959de2880f317836237ea7dfadb50fb17d781470914f528df08fdd077b343e91bb842e0b3cac51fef882500d43bdaf9ce8b41c552b5c8e3ebb0a935288a083e51e56dd938bcf5ab33d6fb5ab2b12d33129057896c7826014f5c509e1fe226d38400cbb0a54bf6ff4f9afd733fac4d8e7086f209bcc194d7087369951d7df7c276135e3b14daa3e71a3ce518fd352175359a98fe24a12d24f2783b06e063097709b915b0594dcb7b3286ab64536ed474f0c28d7bb3f67bb186b0306d68eefbd0fa5661820a5a5a8a4c74d49223102190cd4cc8fc88397a65c4eb1ef361697867e6b12769fb62eaa8fdf0adf81f07d2829c6148b22f55c0639b54c7651b7153cd8d0d1f07d40f7bbc8b9138172c59ec78baf2e87be1b12d67bf8c5b99f7da78b2ee8ffbba80180b280bd82a44735caaa01d7e50ab6a4ff3c1f2098c675995cfe842396369733060eea7041016e2fc36c6a05d2c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018d75c788c6594ad53f694a1d66683e667dde63c63515bda7aa482a4ce55cef0bd093f54dc9d79322e3e0dc4182a3f38341ab34702e19e42fdf79eb6e9e7796fff7f9ad5917a87fc66a811ab5fc5bd932131d8f8a8623f01882239f2f111f18db3418452feba266bb46c373e56d1505400bc1007b4c1c948329a85e0a1c73ad38daaa9896e8613cf1f394872665e2396dd6b29c53b5486f04b94dae08f766ddacd1825b6f5d899cc725f8ab1360b7fab85258b191372ee2d221bf7c73ce1627602241602fbe72a3c717f12f7f63f1c5eba84b782e4ae9da341011c27ddf3f7df9c9a2ef2b612f222c61cd33dbdbff65dfade720f6cc380980fe24c041b7dcd3a060495ed07aed3af2a18dd575f3107abb56430b95ec475edbe51b776f77be36b8aa2c28a22f4422d93a0c557fe4f1347a5889922efbf57eb3176a3b387803c0abde9fa597a32d40db52f1a3eb8e2e6ea32256b112663d7cb561b6f52926b59b06238decba4e4fb6fe80d6f9d93e47740153c448e120a0984cd058ea232d61effd30b5bb072188794e42c479241c8258458c1605e0327aa772a1bbb83c71fbd89f2c309d4749106567ec0f75749015b90e4428b9143d0e7c2065f0354854334b600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009126136002f74ad5f9714089f17005687920c0ac1169454972beccf462703e0b21d2c4bd70f0faa317a60af933332c0312f26337dfe6d2b3dfaff58ad3a871873d6aa5e331aeeecae3248d5db7e97d14f307b7c079c31c557c041370aadbf4f52b1cdc158811d57cefccc18e49faa1ac3c090feab341e64014522f8b8c8ee497e0caaf6600b0c3fc354e9053eba19f88752f8163abbbecd0b80811970f51db6f8284bf08bc6de5dd250c3799525235b0ae65ab9f2e44fafa678100da22608a1ce44ffdd5b05302c086a87c3ff5f32d4ccde2aac77195f389b0a2a0489e1e789965047e6f6866f470418098cfbe3676c7610d734ea7d8d48edfb3c6522ff1b50ecc25d9e8a7d753308fe25ac785daa0a526c8d19c98175a370c839ff4e056826fa8012d91a24c491a3d66c00c3f9db26bac7837da9481f6e483f9717d4fd456c3cb5354de60aede438a13e277b14d56c265ab103841796acb960e9d6b5584ab98eb78ce5f85c17dd2f0af8fe97919948a20ac92b4d7b244d0beddb298537dff152bd625002b671a542b4f1e19ab1aac9e6085052772f42ea1cda445c485ef9067b518d1cb707627bbdf6c6e16eeb46ad02208a50f27c109d32c87d60a487fc8ab00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009933185234fb90f54d08a038845c6f44e0c5493b41acb87bfde9fbfdfcec5e850df83df16c86e7f4c0af935d026d94ff40b1ebb68a7b6779bcd48538c7886c37ef0f42366c5cc307ae10e5134e4346f30a1d53a53c7c11bb0da364c4c0026fa5c0b277ffc120b9fd397e287c10068610d31afc930e7a2037ecaec29ebbdb372c7c75826adcea1ad5a6e00d210412bc2f4845aeab78a8515f0386707ab6b2bc0a5b35029578e1cd93d72728260453744812cbd00a22afcebc8d43346b2c88a9d65120056924da7f110d01be9441149af2f89006755c6011e29d603f02f4a430f628160d88a67a48fde5cca3dff70dbf7106f1880d1679592683991fa752411c5b7e28f8c524897e63886c5ce064ad29dfac79e68a64d3774be8cda5ce117b12b8c96385d1e53cf42d2d28290cfd8ad802febe0397c23ae06f2af0b3967170cf9ea816568b8ee5cb321965f5341a4120306ddd83e57eaab787dad631ca41bf4365356d0798a414117ccf1720a684d1ea1f7fc2a978fe7a43d2cfee3230bb27392f133187a5939af4a420b3e991b6181d672f431de9e590b0fa2309e42c6e22edfdc51526ebae46dc443a5ab7bd93294c3b72246d2cca268d2fe1a49fa31efcdde200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bf9bb2e181eaaa7b7c61d8d37aedfb8df3d3ce19d4ee25313176c4a6bf008b3c7b6a5902713bc60418094fafb164962b410c56a7e8df0bb0162d347676ffc4ccced1b734286a1b41a619e0e78bafb167b28b079f8b8c1bda1c32bc8674f1ec145719367b1cdafa76781ec946c0c6b4fa637bb2e917935ffa2e5fc9bb5b6b943e8df60ad25fd3a77a2ab73b419f022c8c69b04ec14fbfd38303a845614ae85bfa1f3554e7ff3cf34f7f21473f42973c46c815d3c3d561c1f4521a984e2fd9c425a58de9058b2c956aae88e1112af3d02c03c8c1d160fac429478342e7551cf0a8ffd8c257d72ba468b3ab2818c493d26aed7ff84baadf582d5c24182f6ee0b8174072ad61abc20c7d33133a4d692f332d543ee6b84321bec8bf8a28c8f7e044b230c07e920f6d2643a9551db8e02f481629b28df23a7a9ca4dded73f529c5b9d212e37bb4c37d4663c0e8b562fea5e7fd5a41472759a10027123d0228182fa46def6adabdc264b49daeefae746aa7dd4560c9d6f10454096dbfb8ee5f93e9228e8249b2c009c05bc0e1329a4a326e50160e294167cfe80a437713ab3f5ae7157ed2aa12644a5d5d78ece9ccf88c7830efe81c15d7f8f51849f1d9c90e98d19b60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af32e5db53476a7f040fb8f64c727580cfd87042e5faa103f2f1990c5b79049f1d4d20ddc22fb32f0b70ddbdf3378fa089c7919b1dbea82d97ce323736b20c5bddbfda1bd0373530531446a605be5be8dfecc3035c7a1d91f2f958e6d10d7b3f6bdbed41a93fbfe915e7779b775852e346fb2a73f80d3cf8b33e0bc1fcde2d424dd03cacf6c9832a59ec1cbe6900e73348c7216de1423f03cefd312c1cbffde82239342c0f873c35ad903ee6fa3a76d7f1f1e14d918529abe3d51b9566fe3e6dafcd90234377ab0bdfd7ac4f002c3246d1eb0aac2ffec85b4396d359daada139ad043407724045423137301aff24597b83a76642ea5a5070b68dd956b703d233d08c576fb9f3f16d806d2a4f205afa736ce92126b7899b79812178eabc3d6d9cf0640295894ecebf3358eba12a74f4889a426812486f463e45b728e2950f8acca21c0360df39365c0032ba8aba3a3f0dc2518afbfb3d973790cee9f7e108902b3612138e74e4d9bcd77ba92237afb7041db21c02a32926634ec2affb6ed2fdcfcd42d62e7b546d80bf11a01aced4d49cfef615b2c657d8d5fac319d8d199b19d59073cd80a1176914e6db31a0b89476a79e96aab2e9abc58d223c4b7db1876b5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024f2810b6028e47847dc66f59befa14519c3642b819579fec7478ceb5036365933092838d0166e58830e45e86c7298c4679259dcc2717833d8642aa3b089165a5d09c412a4fa7787cc982fc29f95f93033a692243411041ad80b248fc1869f0b9f0363db632e3681871ede088e97ff1d84510b732004790c028c1c5bdf74a142ec186095694f3f07a6cc1e0041d52d6c918014f781f3423753037461cfc04e33f4271f9c71201441ee7db3e0de5f7ab2edec507a44ad2164007fde66d15536801587292ce984afa97e9c0dc77bd96ec6f7d5607fe1c8c848a91ae122c42cb6375a04a04f43c89598dd7e1f3985816bf4abdc872ff9366c28d6ae63984a64fd22050d320e53c7bcdb35b0714067c32ae52e368391744fcfeb155520f75f5368c37bb0da874dfc7c539f30b839ac8d467e5fa4771138a7b672d54d3c9708847998df624f4b4f608a52162b9ae99e03cf716cb1384bc6edae14ec4b546820ba792cf0bc0652cc30085ce3de90c4695112d912049ad1dc3988c55670244f3d90ffd0e6b5f5393e03fc59b15cb33040c492fc4bfd567ae7ee304a8db084cf274cce1e57255335aed429ec343712badea98867e1360aeb317058a76fbd174fcf1c7a25000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083853b91ef0498dcf823dd5c4c529127a0f45dedb465ee1e8d32e74e7feec92625ac3d9f46c2896767a0664ae38f6af62004d037e2c096e619e8bc2c96b133f8f42c7dceac6ab2aff7802ab5fa704b0b4a93900ce9891550cacc6461c84958f97d55074aef38a0e3796a8e22b380d8a486aa47e47e73e07c3708bc6b5a818c1725304ae1ce1e72db04274d8e3f338d7469c18bbff373a62bdaf64cdc07396774060c0f4fcaeb59201a6926fb36463266d1bd5d6349216b9e72264eabc06ca1202bb56047efde7f2dd8725713be474ce280de9caaf460a1fe1a3e578b93a4b1302645ef535ccaacc1c70bf0068daf90905a5ea8de0c455dd94ac86a0b1d8142426df775c75f73c1ce9dfcbe37bda02ed53523cf84e5917479e21937dfca1cc9b1aa8f530493e4f7291503a0d3dafc52bf64f60db56415c6db9e9ba6feaef668fc4dff8c3124acb2b45f9d5ffaaed5378b7ca248445fff45397dce7577761c76f92d691de0e263ba40dcdbf48385c1516d0aee2db4b86172831365e1fbe3c833fa64830c863d8807423f1fd1f42cb6c02bde1d430a07191dec1af6abd6e405f41913a314d88779cd16da3eb6cd5bca6d662bba79caa1b6a0ec9aa6a5ea3ddcaf8a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017f0cf8589f025d72739ae5383bc4d272df4a91dba5d5019bf8f2f1aa971e1b24e56aa273fc453e9ea2ef2e3522c7203e3a3d6ec4f6c1272f7c02ba589567f1ed90ac8da4906c6c51ce65bbc0624f278656a4bf6270e9c2c3982c7e035b0fd89f80936f31700fbad4b3cf515b383f3140c97d101e4b7e7e2ffd94640de9cdd0b00f919487c854af5cd3acf75768f398876748ba40a5df4e04ec4edade4f6c54e231c613196e4d76bd8c646271c4113047cfeb9ee823bc9ab8e3c02eae36b263ab7d0fded0d40be4d639d4e4c2c8857c5519831907c26f622ed15ac350e7effd9215c465770b664c3a331b6cfbffb5d02a02d37b09c0a1a71ae2e0b2115a58dafb6ec7980851c1f9d0ba21ae6914f24939951d7522372200d8da04f13038d3044a5ea826cf86fe5bb5d1645cfbe58281103db51acf79141026ba6143e5ed838a88efd59dcec926ed74e188fe2c88f55bc6d2b844438eede3eb82fe7bcb5f5e6861a4d20d9f9f3e222b149b5f050fcaad2d7b85551804d92055644b1d40dcd3b597f4280d0c77e3f90634465505f8d6ddc35eccdc4735e3ceab62c0b02b3ecde410b3e4358782111720d8e8b1ad4c64717c07367d5749729b6fb798303d1c9b06b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a74c4d096ac3054081e815b157a56b50849c1af7972d01a3e58b8338320a1cf8544e54ad90b83a6765624324e43e746d09bab0904d33b54008e5adeb348fe1593f6fef72104169d1c6f453d594ad134bc20fb7338033343164da9dc679c457460d4b630f5a184641d8ce21c4b9320c94bce6ecbcf3e3feb4669bb3b4d331a1b3dab006edb56a8e33b043828b44b73a075f0dce3fa0404308b1ef499dfee4acf3e355da9a84897aff269a3ed9bf03db6c78ee21d1bb24ee3113fbeec9c813b3d4aa70ede8d895eed21acf9fcaa55fd146c20bad5fcf28cd0cb688a93967381ccd0582423b973017850ec9dee4229efe61e50de5182bab005d65707387547f2ec1b5d2330dfab1198d1a17dad68ea851bfde0622aac66e2f9e2669eb344fb79c9b37b92f77c016cefdfa7828271a44fd93c666fb597eae5ca62cdfca1984ab43e550275af7ecec6ba0f45871845108f0d85c6547a022a5264fc46e1254e818ab651a471a8dab1509d0214d013d9a5c25de70a8836ada8f3be5c3d5fcc382bf51b119216362ba8634600a9f9b5f9f4e098ef82aa3ebac7d166a405fe375d0bf9f52466da384564c636f671c4f9c41dc481452b41f9633e0e55b24c4b33947e792220000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac5face5aaf5f0b4c50f9c59c1c7bbc978ecefbd80c2fae41feecdcc1698be279f2848b35fbf84989b8153bb1e7255f44bc9c719fce479d6db3040f824075e1d956d933f196d0ca2e6eb71b9d152511173023a87936c32f4957d5c2b2ca8351192cd7992e5481f04756107c207bb6c4d5ca1cadd65e6d88a0f4f41be979f058f14b37c0e4fd4b82aaf710b23a283df4c845d8ea834a748805654074037e2697852857a4dcdf229576378539cdd23414b544dac1d34b4a2c40fbf3277594a2247900d3bf73ff2ba143a7defc588499ef1fbf34cf36ee1a481ae198992435f49429d8dbf0bbf7512e0c28aa2189f2ff6d70081d687979a8f318e523c80b6375e1a7292daed7e4dc127c6ae502b90969a57288f9cc1df298aa6c3b79343127a0b28e5cc57992cda59cbd06a2073096ae1fe83b694eb318f04cdd31a9dc26017530796f45831175fdab69a002b81d4f41aacdb93bb808afab26c0acc0a8d015a6372ae6c0fe5271128bb17fcba45bf750d2dee4cbf99cf6417320e906592f15d3ea5f09866e97bb647fb445996e2ab741bfb209382964034e40b61cfc90b3a2d868045945eadf444994b78a52d5b0a3f93a8978caad48818f34ed34a862e20860654000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d403f67ef5f67b23c7e9a9620119cc97dcdc09ada2a0245dee31057d324a2cbc92f2f34a81f4f8b0f94bdfa9d8ce907b1dd43a66b003b522cddbed4f1f691b4e3454e9deea9dc04e49ec4cf848754bc6ddedcc90ec6c8f2c8448621417158c1955547a1a8f515e3962d60cbb382f063bf00d2ea56249c015a4eea4f4870e9fc14f18077f59afff616bdf1def042ca2c108dca1e13c8925f5ee2135a3f63c3473240cd3a2b4c0535abe2dc532c8d8ef3e48fb8c724d09865385c972866f05837fa9059ea664f07cc84a78cb9809f48b37ae04f4e7fd58968ac94c7358c364922df90c2ed48374e9cb4059a0c70654a3be62f49773d947564be3deb0638b7fd70872bc8bedc939a6509984bf8ea9de3ed4edbb61c8f00c74f164d6427ff6c959276a5c92cd2bb3b590445269bd3b47812184b38356a4c37071305f9484a51b72458e9545caa686e803dab254196fcb8433cb3be4d2153cb767993d55b223ab25c2f3b7eb9defefba3101d9bc8972f1211adb5925a5b3f242686f98e158c056bc52e0621bf9fbf38a8062d601611261658ee6daeefc38904a87e3e1c8e72478d62f6fe0a64b79aa7d5dd63433610b9a0b8f61ab1e048c4ccb2bc37f2021243c03000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086ae83488e993e3ac691d6686d682ec61b6fd7ceb3d5bc9c436af00c0c888ab73d3222bee3edcf839fe7d475e9f98559fe9b45812d1d89147965af300cf56ec72f33460149bfb4f231161dde50f8261ebe433db0c347c04023beef3c1a817b2e53fa9b42eccfafa73c62d828c0494ec6633d8c0fac4fac659524687c40c96eb56aa5cc241ad7af57872af23cfe4227487dbcd31d7d4115a00eda6e8cce1468c9882935d929dc5b0be398de080274483d4d2165e7ecc3a8c0b15466d8187f4b427fb40ea5e2914f95d63530b5a70645cce19eec92a5d3d0a23e5e99d6b16cedd4897433292eb99875a5e65ec3abc1217491b2a4ea018263abc81999a8213aec4122c05f5ce0e08810bf4363fdb0b957caf4a1c9d757d5ace74e1e68fa9f5869ecc7dfb7f50e4750e206ae6d6a5c6d67227f65ba40d5f095c09364d68f5b7f4290e2ec2a5f8ba6372352cbc65142dc500f9fa41827df5886efabe41e698c4b50b5741aba6be0e229247fe28367dad6de5d627b2e7d58e029546063047f24a6290ec571a7cc97fbef1edaa56e3992cc240d4e512a19de0100cbccd2bec16f951e9d163679c8b8d6cbb2bed5e3e1a06e6fe226f2fa9c9cd488302db0690712fb953600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008fba3c3b73f5a831a679f37bff3b23bb8daf3604a6db36bf61f0bf059ab98b45a0ddd96f5714af6a23957def3b727282e53b64e9f308e68d95f05eabac1add825183467b1f80a6f07141d082e277e28a3f80fb4840f113fe6cd9f86fb185bfad97cc1a440e49ec79fd4d1ee628135cf703908c637eb0546afc09ae019e213585d5ddb610cd5a0c506aabde38573b6ff1a72823cf3539c1d154dc6ad459dd2dab48107e51c1a6c060a96755667ae674c60a73a62106de9578b5b6ebf4db075470ae189631fee8ef167c4abf5bc876458ae264f7a27e43e987f01f12104375fa280054a7b802ef910c9bc5298b8a5d0cb8943affefdf596aec58492f87eb47d1d44cf3a11f155699d0eacdcabd984ee597c7601dcb67486d7fcf92075639638d9ca3e21a3d9df58960fcca3a00c899106c3c0260d70b0f642f4f9c771fe32a5f6ef37f72b348a62a5b933aba6875ac1bb87f845cd4f6d9c81ec0dd4bad2b103b7b721e0fef8de77fc716f22e514254d61c50e74cecae0674d09d6d59302abe9193c23ce674f7aae5320d3602eab9c219589231647dc1dc39a660223f385511926070562bf125d15d286fbebc87071a0ddfc194ad1aaed523ab0269643bf5d3d1d400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001456ddb0b5df575100e4646a39b9c4b784445c3883501e01c07f34bb9a4f8564fbe2035ed861047772b8f12e77b61cd1e4de8f32bfe85de04fcc196398249430bbeb450f1cf50f6a92b2946f443c302fd46975357866cb236f8cd6e0420b390c001fe4034b0436edd6acb4503a2a8706c1999c99b2d90be3811aa6d0a377795eaa01ce9cf8c6edc6cd001b53fe62a71da3b5722cdb68e43f2941f19fada1594d97e13a7e07269c90617028235ddda42dc35c659ef9b49815960bce651af1ad39d03da77b65407603f6f30b104bcfdfc68bac96eb2936789c95283549875cf3902bb0c504cfaecdd41a04cd0f3885eeeda0469bfe3f35eb5b3e23ae48512682a3a11c329a9fa5269750ae6a5dd36844d759485aa7b419b65885df8010da556026d14167eed70563b3ac31fdfe2b5ce7b4d4db152fb98ac3d9262eadb2ef5457f2047a31acf128148259902f272ecb6be5a63b8124584f462deda71d0a314f313954544375e4d670766a4ee6745028a2a0c92d684a88aa81e81040365e914489a497e778955879b1d54cc4c66a5390655d32629456e037d8d3c473f8942987255b1e0ad754040e7ae30702c24a12d5491ebac281d3194a342150b27823106eb97c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010cbc476c7efd37ed54b5b372c4aeb9ecbf8dbd03444cae9bbc7bf426778e567b4aa1f33409ba33da05525c35b557d06921dc06aa695f1952b80481bb7b08791f7cdb612ab7d1dbe181744a4d834c7c64075b7d93f727453583c0d28b8b0fb41408f6724b4c1bc0a9780b62d08799206397e8010c23b07378b58815e2c18180a14b408c6b12c2d58587eddd9b5548c7cd5112b0480a94b3af718fcbf7ae9fb385785f0327a9bd6ea6745c517499c2309b888290dee383d727ca2f5e486d8ef03c738d170c4580723d57fc36ee09caec31f15e47206957369181687c0e27f973a59a29c0a32c26538b015459791143a4d0341e141347cd6ffc3ec86dfacdbcf85afdb777dbcaf13bac57893e660a21983d753707a32fe4dcdd48fe16b112c09c115f00f286809cc267b4cf2d312b6849c5a51c6702241e31664eb3a075716b6dc4cfca2968fa4fe0a67bdf9ef5afc915d5421cb2a824fc2bcbecd28573b402aeace88c35339a44e75525fa2bab45119540c3c96f1586a3315261d146d22331e79d78caed33c9be13038a7cb67956535399a661edf3599459193f1dd9be61722665bd45aca74325cb8cc1d68fd111d481aec8397a4310083d5805f2f262a400e370000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000229b5fd3c52b3114d684a688cae2e5cd3fcfe81236b24ff3b79ac521bbc5af46720b7cda1e5bba7f6334d597bb1f40ac4cb50e1f66bbb3d64fb14c964cb411606789bb47d1729625d74b830ae24d592e1e8bcf5224c71bc08d80d218f3e35e94700939e2b47caa40100a58a39f3c7b152eaf01f6eb97f4c6c4eaa031166223517c25bfe7589c0176bac0860508fcc9c9c07ebf5a02b396f5432bd1b04ddabfa25e4adadfc1b54cf4ca08142ef16f198b319d5b44fabf6f4739bfd9ac2b9dffc66bc3f1d2b7f7b0dfd09ddaea45355c843125ecb33f2b0af111949446711725c4e547e7d09506db0ecb6b21eed504194fcee0de13346a669498d6d805598b53d2649cffe745a5b52522c46c157cdde50f462474ab4cbe78e91478295b5f4cbed6c3d1b646a7018614c9bd1845e5f5ec9441bff538745a8fe7b7f673207b318ae821da15d529798f246df443c7eb699e8a018caa8e6157ccccd8cc667865951c49ac35d96e8bb15cb618e2d5e81429a9106fee559e66ba05c19f478a6024d6b1c327d422c612d73b050696e2813b432b61253430e5411daf808f0aa8ccc68a62ff525a13d6c064ccebe37df476fb0b303ae45b75479a8e251df5a487dcfb60e17400000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484027013213d8fb34de66c8d883be9126670b822f53da83e8fda93bd51ec0aba67e2b2b3097fb87234ced7bf7c4820eea507372c9fda98cba20b007ba2d928d4bb12649ca6d72e8717bd1c9c9aa54a2753201343f8317c764593e3e23d36f29557d1fab757b911107bcf3937638e9a226366a1d7fb6a034588fd3cdf0c1498dead81700af7bcc9012a076d66a5a6162e7d1584ec4b911092d475967eeacdb39452c2a9e04d15821ef0a8d98200b0f67baadae2f7800b97137fd8f8a5f37f9a21e9d097059e4e17c8311a5028e213d27419ae5125ade64a71cc720d127a58a0ead8c02283e2b6e32fdc062fe9e83e3ba113ae951a2edb80795c2e310f238d48b448d0c76fa765af20a1e75f0792eb1367c6df5712a725f82880bb2aa8d0356ae8fc2279b78ad8b9ecd03b4ab89bac91b0b099c3c5f7cb27c398795cbee45f0bdc8030b97495a9d59ab0da8f4bfd12cdcd01139c2332963f880a9ca5e08464cc827df0ad1304ac6a5a72f9a00b74788d76a80c6ecef1045aefa7ee9260904e3bc69692b331cab1a2689c5369e5a19573e1d8781d9d0415169dd84011cf502f92e3d41113d2f34ed8b9a33cf8c98d260754fc512e6e66f63e5477c2307711463fe16cb1101627bd719a666712fdc48a873ef8d5bdcd82ad96f57a85f91672769c4fb39164d1af0807dd76079f418e0263625eaf51f80b8674a90d9f357a5481afbe7ad1ee7ae8285709caa207a99ea772dc54c0c2f297934e37fcbdc021057771c04e02187ba97688fef7d41f549dc524b338a6745b3b71b282f9060d55a9bc45307a90bc66ca4e2d37ef85cd11f17b7eb76d6b4ca36f2fa18aea664ae14b050ab16f00020b1604012885a019bedb09288fe1d89efb0396a870657e4787a3ad845095911d63ae2ce2b82e8bd9cc4f550894ccce8ce8607a44348019b5537780750453d2b770374b5b3d5f1d1862167c01fa182c945f5598ea8c5cf6250473d69e6a78f0035e7da77eed3ed4178f47b40a95f9204af619342f80c6915d629470c0fab3c228867e42b05377dee5739dffa8faa5a681c56c1b1b80debcbcfd399974fb26a2d86969d77ea83040475914da40862a5325cfab4dc9a418093414841085621ff1d5ea153d75b73ec909cffb225375e0afc4f2c91f6ba3402f785c82a08680bac041b110c19b89a09818400a4160e65a812fe5e99b038a0ce50d054bf46b2002c1532f31fc5148f1740cc0c83fc4a4b3261155d442d99a5d9aeb9a77f312813d32c6890d0412b9d976751aba4c48de04392ec1149fbe344318d0b222d5b926f6115f21718f20725643931d88b1b00acf7e7311f91cfdad65d8a1cfeba5f8736bb08e09f4ae99e867b2c25bf5830a6fc50a398a28d4291f8b9aa213f938cc6983b2b00ff99a582dca297a82df58908a7a1e38e5242b0116d12b311736b6e88c49b1908c0a5d1079a1c05b0c834a4006ce74b1e325d2cd653428ffdf26c685e0d8a1d048178086408bb74bfb524f732da4ee351226c8e76d0466b7c0979510bbc3e2c688f6e804d87924e2fe5bccaada6d5d346c79376edcef96ed0fd0e277ee78c0c8c5bcae8007f75d9bc78c9095ec63ede1eff839735a77551d2859f5d6fecfd05d2a285cfa7ccd315878c6471062479395d45e71b3610f2dc7d6bb9a4cd76560ad7728f1f1216cff7cbb3255a8ecae240f6df7178107e599971b81b3b9933671e40040af058faae84aec313892d702e89a356b684717961fd320cda56410b5203dcdcc8aca3de035bc9c2fc5126e61914359a4815d88ae242d5d9637e7232121f09c14281763fa53c928dc64f714b7dbc6e4c5ef963df5e9181e9613faff26a1a9a662d6440bc1ffa3fde1c7313165acaa5cb3e6d3de4a04c9c141866e572bd11b2e1a395ae12427e18a06b8769e8434972ffd14c1eda6eeb2dff24d90348fe071893dd62d28fa1683a51918baafd6184a72441033c14f2db9d512fd5cf0b400d0f066a707d3c237809929c60e5516c8351b40c53684392adf20d9b42c931481f39680e38db3d8d3e51706fcc421563add42a7a4f7347780fe64da5e30d02be23577c71a2ee5dee1b06932a474c76147b178cf2c76ddf19689116fbe21c635c13fd4f67cd91bcbdf0d20f50fd07d605b4bb996498cf685b439df7643ae7ac5f03ad659f50ce1cb5bf98670d257079f8578d39ed6409c85a6c4caaf705f5b58a0b65767502b50ad73c1c123fe9b88efee75ef374f856bc3535945f4f8fe9c49a2592a467d0141004f4610b9041cd68aafe2c39ae980bba5aeaeed83649a284531bea92803f4a4b231da748519d008e96b28b6156f6404384d395dfff02f3340117ea1f4c4ba40d6818738adceb796811abcb9172ae74662e6dedbba8e858e6601208950b2221d6ae5ad3c8b48af947cabdf9b2811cb8cf70e7c0e7a117410a920a32a9ee2630fdd5e60db99b4206566d28a857c5114fe34a439da555c5ea2dff1248cf6fa9b8cfc8be5a70e13ae404083477a84b5db4101e2a02d88a64576be01f185b3192dbec27ae1d1a90cffef2e2474b73475825aabfd0affe030b5bebfe141d5f696b67eb3a7fb3a22077767131cbdbaeec34b65e7fc4c91b4adca8921a1f009a34c721c785c86cb2c0b50f9b473c032922581323c604fbb84f564f79120cad24543b67362c3163d58eee1f461987860a171a301749b7a7abd5e2d286b91422608491f6105a4493978d47b4f5ba46f3ab026f42cee8e1048ff2d069db120441879bd19a6eaabd15efad32f823f02eef7b474bfc3f71119fe97ab478ba5b22a5a8fb11d6eef45d2efb8691c8d3d1c009975def4f6c8ae8ce52c6387911e01758a805c24c66cc27e54705f4f1fdd2bf21de8f489b9d8360e0181c07eeb22b400c46ea4768968393bf396ec8542e5713283c7e30c788c11d178e4c7a4c01c1ed241e467d5441453f1e883a374e7d536904269342ff02c48f8ea27b4953dcd5ac0c87ddbdbd9ce6e49a37f637ca8c6abd2ff00ebdcff686b910b4a99bd03a31532e3faca35f68749d49745bb90674de3d4a4e8e5ccf467126f7a2d77c10811ecc015ab583c15b7c98f5393cdb3eca3cd4e387209006dc7705ec7ed4a415c7ac87272cb550deb12bec3de2237911a9a1b85bbb77128b741385c3c1141325b5c3d6019ace9b190087959dd3f207663ba1902d0d3d650815e56f48b523ba56fff8cd0076850593bcbbf2ad9fbaa6153f6001c8f654f49da724dc225617bba7421cf4035c06777ba479c4d4c922827d127481394eb3fcc37a8c4985593c2a5d0a48131e39e9b4aeadd40df7a35a89bfc41933bd65c858ff3532b2b44c16e58cbf754c215eaa8d166d8b31de39161ba28fc1763887539c66a4cf92b26930032ca459392ea5a3d11591371f7a0b63404d8e222d33b357986d2f8e2ea114da1d50443f7a06e1770033e6959445eb3137d23303d17bf3b6ae7f849c6424d6554070b394040172b319e3b0f3fd7afacf836f1b41e875b99532cc7168c9348a982f1ff8a860238f0884b7251c706d3430133dd842fcbfc6590c0b3ce53961620e5dc2c29f290de1c8e12577f5295d89aa33a62ae0837cda188cb25ad62dd19aece45a5914dc0284f75a17a8463a4fea8916ddb1049b5b336622646b9bb81771a843c589a9592d4205b647342ffeeb1da0e59433928c9ed05876ff981f560e95a4b8be54aa85155f98951201327a72565f2d4fcf26d6c186000832647b1500cbbe31358fc8160cf52997234ba67170f22eea97393694e69d28ef25cb84560b63e920d579337a05339bc5cc80eadebc1b41f64baadd44ad8738be3bdc2c10e06b897f22d44cb62b229f7ee70bcfe58da0294cea10070eab687a79664285494499250d0d2a4e0d1bee43965fc1eac31ee73b91de3f16192fd885d9fbc0625176b1b6dc05e4bea301b6cc731b4804d384ea8f0d58f2aaccadc9ac90ad561f8a915133f89c8ba8530d08568ab8f3bb22eff1119e0c17f7b98bb2eed707a2142a7924d3ae49896ad819c719e7f64018aa2dd4d291404182f59a29bc4d199fae652c13e437b3fe14ef272b1d76d1628f8e81a3eb07401174e095b3281d5a0d4b78bc419101b3c8aed71c4a597d882cb052680615d6884fe8805e6a551a7d7f2726c91c34f6d3b09c391debe2fd0546f7700dad9b30d3ce16e49adfc0ed903cb7a7f9295a84c8b4e7950c14572586c138489cca481b33f8b74d51e75f5c8a30d11a45a23f6cd6f4947e1f2d54680cd7b9ce947165c2eca7c29435fb7dfd9102843af3105b39356422cb290a7b6fd23606fe0f67c8a5f6247219fce2879c8498e2efd291b3312b4aeeee21dfb434411f4a61281366fb9892a7d53ca610c897b9333ed75395736767297624c2376efe46800faaee7694da2ac728b9a99dda17c27e290649b30fea14cc9f0c1e6277c4049239e65ccd16a37027c9183aaa1abc30ac32665dbf4884da7d34212d4545c7e3cd2f7419d501b2cd869e050538db060fc43f3e19aacfd61bd1e42dc6f0947af793955782c90c7ada6d6a507e185ae0d9a4cebd568a63b710d8b61f77f9e3393add2ac0c11cf0b42830faeec3c90d875cb9bf381da463e2647cf71265fe6d7d5ac2bc1099001f3d8cfc818265fc148eb68307761a6f339fa1cb9900e9f5a6e2f30eaf8083e81d1c5b15d0baf6442db67308fd56910bdd9e8908242c47e3ad79f7ad341981b98e15fd7a92f9923ade809027146d68080678ff90b416655a91c048883a0f70e64f0da8e6dcccedaedcdc33d50847274c249d37a8102ffd01541024264af4d1b8b75df98684c7558971e5c102198e058682861687292c49d866a4cbc83a67d48733d42f2f8e1a2f9810b5142d0fa307653b0e47e97000a13e2a0fbd90aa7f240a4b0e2144ea90c3a98df57fe0ac22baf62473a9a9ae1f3fe14c16136046c72f2fdd7cf22f3f07a3938d2c313d05e750dc953e49d3f11e6d1785053351f8edb6892e7887626dfd764f8c599c0d13d4157bfec911788629a503cb4642df5a6e7eadd2c716679f94a6045e35323d14b46ba8328cca0a0d1f59901f85263a2f0ff45cc8c96f550d45401ea1b3336851314cd97329a2af7305709cfd571d4824e8d3ec5cf5e46f44b58498821922c03d7605dba70a61c103153a7fa378ba51eafde3efd2003f817debec0fbf38d24eb0ed14943c9fe75ed82233fdceec67621e715a4997ca91c810553160e5711de64bdd00d0e9597853c3075c314c66ecd2c1e8d0db52a0b779c16f049e6c626407ef7e1a67754496000411b52e4d8a8174ab68e2af47aa4f52af5de4fc19d9e61f8bb863d207cba961ed1b4a15a95e8d5551c6cc9e521622417bc93139d19750c04666e35e4b779fdea81ac6d8794b093e7e2a5dd4b91d2bc3c409f5f259601223b8224093a83a6f0db710293981fb338cd0e316d4689a2929af813e2838015415069361b61056dae10d20cbc7870da270ce2c1ddd6553d9f0dbaf523d153883f0c744d8aa0674e7d18d2cc4f96b3ce52c6934224e74c5e59f69096cd055f5da7d8d3a969d77c1d577ec1f6bc06f8277651ed7b61e71ff0b0112a5ae45a9bc02a83f54f0e02ad8f9ff4d2ee11d2adebe6daf8519299ce27d3c0546a8b6be15a4a92bd839aa0eb1fa587413dd889e8e542fa574f73e8c6b1182ce06c200db1b31593a9ffef2893ef83aae0c85c17795068198ff5674cb6ced933c2a109478c89ab7de78aaebd46cc0ddab28d899bb6cc8e0aa15dc1f928e1e1cf95fec8e924e4a35906706a92a266db631003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000041118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000410d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000410a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000410b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000004129a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000041141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000004125e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000004112978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000412daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000041189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000411159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000004105ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000004105c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000004114d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000004103db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000412ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000411213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000411ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000004114fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000412b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000041305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000041280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000041223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000004117a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000004108858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000412618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000410f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000410e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000041172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000410b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000004105bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000041137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000412e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000412297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000412608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000004118373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000410422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000041204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000410afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000411998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000004128d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000411da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000004121d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000410ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000410e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000041107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000412f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000004109726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000004124f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000004103c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000411fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000041205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000004125110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000041283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000004121cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000041094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000410c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000411f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000412421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000411fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000411bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000041304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000004100000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6cdea4d83bc147eb361be7cf09d967a1fe87897b7158704ffe89fbd192d46bde95bf47b546cdd4b2ea4602e6a17c41212e88b8586d5bdf539c82d8721ccc067db1b4b80f6bf479cc789118e9ee97053d76f595933d3ebbbf13129addb1c0289b9c243dcee050229dce4c9832702e57cf1f39bfbc2b40524c1e382df77304a0693192d6c2dc1fd64d960ba33b62bbd67c09011f4df174f2445ff57cda35652ab46dbdd0bf36b43f5e7b95fd27831e0636c6010d26672c3dede4f91a25a3ed7389b1a5745687876cdd5feaafbe710527c5e65cff9f87546956d1b81d225102aff6437b09d0d4f077695dd2e5fbc660fd7566b8491a2a1e813f11d4e0bc107b4ca662692064e8385692dd0344879d0b00f1683a440d6f28ca98c2e1d0e7045f58869ef1ad6ca125ccf278a2d7e044ecd53d3f3dfc31aa6b45104479e6785ba431dfba506d85914f5e91cdefa0a582bb62ae922e05ccc739b5136b0b294430569815327ed1b8ddcf0c3525c28cb5a815adf4ac74bc77f5c27e2bc35f2c50d552841cc02414f40e7907a3bd9d218da408985322db2fabce183a45fb6ef20e94faaadaf50b358dc6a6f4b4a2734228166b8a55a31ad085b32fde22a6f57a4da8f1c630000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0ee02222da01a83678d5b7205dce3944edfd47516e857d3f7418d8c916782358a71b72c6cf3ff490a7d579f23673e854cf7c4294bbc6f7eac0995fe754d02ba4601a0269ae6f4c8b692594ec298f14ceaa5a6e21ce4f2a26d8c20be41f5d94c7fc9d7732bd345179a8fd2e720cca3a888ce4428d50b562e04fd7cc22afa7a1b6ab48317752663520712abfc4464fab8866f58e9d54a212abf79d9544d18bd09d1ea52d7eab286924c98407f009fec460af0f41ac9e070b1ef207a6d28e8d3210cf042b46e82479a22d1f4c2621ea30ac41900cbf5c7b506be03616985244bb890c93976a5fa47254f31529d4c9180e3d9abb2572dc30521512bb2e0f925a0d80db28fff9b39941d16a2c9377f3b90984164bf38fe0cde95dbeba1792b4a970770a78fc43ce3d4682f3cbd00e80549f2ab882ab5e836de35e564451a2b02cedec3b16572a950b3136c341e2fd8ccc3ebce274be287bce7648446d9969cb215077123ffbf05641bb6248cc1d3567f845fbdd72ef18f8c74745a480efce692541f9a6751134f1b59ee2a7eec7598658ea36ac2c0682f5ed6a38d9eb6074cc5bd98c7f54dff767616333b4e34518e94edd29f76fa232eeded8a44a180823bb39e98000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022e5884f6a21ca0dd6fb1ef6e0bb463f668fb0c4522097e9576b6372316b34f7ca6bed6263b9e512e6a9a9ea33c757f31512659ced66d036c1cf51ab5e8a0d8526887991374e29c0e7da6140356c6c62019b4cb85f42fb95234fc9560699a28bc6faacc005a669627a2cb8476878515bed08c19984c3b87f1a405f2d44ded6e7b05755b1cde69e28795d3815f0715228fc57e3460c2b34c57b4de23fe48744a4c6b945ca051cc2b155bdc4402b6a8a33bcd655c00b67cbce11ecf9927cc9bc96df1ca7e2bc80bea796706fb74d10a91668cfc897c465833509491e6e0e48c6203799912e97db52ded54d64ffebdcd3bcc7b701c502508e7c6ab9ff499625c2c5cd50122a8b9c861eff97db7faaedd8113f4a2bc3c33c625e37ac92489c719cece19accbf407b7808e1b636f51fcafe79683a493952cbadb2293c04ea57d9d93f0d8894ecc0501ecd4839f0826e45e274b23b184ce77818edac002668ccec6687764392c746d6a681a855037c492c010eb9556df8151d359ded97d02c02bc20061d11b3f6552e5b6305a204a5089ca83844131ac812d79ab0cfd49e7bcd7b500ee6ce14fe4c7069e4d8550c748c10f20c6e14c9d85f5769690bf9d749b2ba6abf00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f482d1ff0d8d27060ddae252a2c5258cec988b113bff5606e478ee13a6e30335647f70684e91700d4c715acd642beff37157178fd20612765bb510c03a370d0ff8d329bb19a9bbe113f608d6aced056f6d06469809fd0fa5a022ba79aa189a6d84446b916d436a1e60e26582fc58a82fefca5faf0691dd817f89defef2aea9cf1b3432d6ef3ff69adde08622bb7becab910faf3705bb74dff9b4f2fa5cfa58cc4cd0ec8f9a3d635a4c731b279e195c700a364e44ae455b6bfd9fcfa27b2c89f7d1c295fd6182957021510107ebb9c891e5ae84f2e6207c260881b869a376e58a559e36b76af1d631cc88cd9d7187465f3d553e5dbefeb5bddc12322ae3b0606fbccd894cfc380cd8c5203582fe5422525876318d7a83546fbafb1a10ba5aab7f2acc27050ae9995b2c1b3cbaf85310ca05823fc9df8b2da79f5a8315b9f73f2bb61a86478c263ad311f66879405cf0aff406831bb96c7e9f039772a52f6863e13f74f79cbc26c7f368813b6f590887dcd9b654ee3e73cd77dbda95fa597e7c08b3bfc683036855171f23b7b8587cf7606a89ae0fa20f901c17eea71191f9e2202cff49b71a73aa355ee1107efe06b00b0a8d5b372dd151ef0b31e3ac503de470000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000887ffef6951cb1d12e79416af6e999c9ac88723fd663f2c43d1de364062a9b39cbee6df5456514c0a07d8ffe30e052ce3c4ec4db73af77bf3c686e24732ae8d844cbc0d9149c7f05a048085b6dd3e336f7899d25f0062addb48b39d4b348d73e884465894c249e60123a235e34440b0b434811218fad5a2b336a1cbce454a17d15c4144e510383ddc1ae2e9ca6ad57237e7fcfbcee399bbf438385ab45d6991ccd36eb1bcd4ef43b76ef62d28f5b85f5c280d0306cbe123e65ea9608b08f1333026c3c230cbd17f3abfea8dad4e95d4d5932c7f9688cab7b88228ab6610c0c2ac424d19bda5fead5d31c98b4bd917b3a10a8439f54a2ced9a2d23c9ea7119d270bac45cbb2ac1e5a20f903481c53df55947d4df08bd781b86730d6f216a98d117c89b67a81a93cece99c8c3bdf183fe17f9dd15ddcd99f781a313461f563b81f6e6ca753ed56fef6aeba862de262c774ed605cd6344816a244d658cffeaf20a3fbe9515fc154f13963b0d2925877ea8e7839c52134f74424111d5f5b31e2dd1ff71db736df34deff03c30107ca56b49ae379f9b82df33846542315e881962d1946eff7b28eb357746e218e4b6235c93c68ccb2b1e30bac456aa3a6e0f9ef5bf5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080c5241e97611aac6cb5bebedf916e9ea0432af73861aeff734c3205b650c8acfbee5c2e92fbc0fbcd052bf421f578968ab234d7bc075a36500e3804cf2039673be84bb5d703f99c81b69ae80203c72beca871c8c6c48503c2c98d9a36eabcea5b7cfdcb0c374942396303175ad0999c5a6d07db738689a31ecd01714930a67be86e30aa89556b9cd3bba1f3f3dcce21bee2fafffcfc83e36ab080185a3d1aa019d5e751c1456262f3a5bbd750ff46b30a9f3f3dfbf7c1ece52863e8c4062817f26bbd28c1509c4be53fdcd254f8bfef412f6bf9b2e9f937a518dffcb66378730632526278b36768034900c480cfd3f03f6bd95745e4c3dd5fef14759ae76675803a16b5b0ade1a1496ef6adb1c86740bdd9ebd916d074790d4287028b1a92fd4de2668b757828459e5e76a772d85eb43686d5e8e9e5362e1d9fc6f8a1f99d685e7631e7350eb0908a14463c1178c1cdcd985455564fd0e54d311aba7eb1b96f0997339adb357e69794445ba2caef22a714db1d182b65653e60ad06f908dd88b92fd54125b664de91d770fb5d0f9ac7279c26ebfda22d2d11c33ad132ef0c64ddd74141adacc9294eff3ec9cecdb1e3a126c7f61f7b245414134132fdeb594cc000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022da26cf9c46125bbc70eef775793708618864958382ee40e202ded9e0931d56495b3e43f702f39274850d2c065e0407ffcbb459354b388d816856b202f64982d9e0a88c1d43673bd9bc8d3410a475b3c8a61caaf944e114b8182a2dbff6e2ea2f23818e8a1e5642a4e2f1c72a82ccff58c52c5533e8cf106dd44733d061fc640e08569206803b012474838a04e4a0f614bab62b20711322ddcfeb0d723e0bcade392c13f0040ea96ba9087a6b527c286ed9d0a9c425db305b733c99dd4c3f989ea397758b84c9de2d98475127e7ac8e9f8bf727b55524dc6fc98a37f71c9ed246ef636ba3211948f4cf5eb071612009b6a7cda436ca9119dd80b4fdc6f1951965240741927183b1442592f465ae4ef5dd952d1002d2e73838ddc6177f787f8a84bb03685d3337567b454994e0fce7980eb0a51bf65b619b11de1a68b71c0a38b21a5f84fc481e2a93b9750464933c6e5f3f30d17612f4396c24837f5985149ac4268cc8025a513fc1afbf67ced7fe1ef0b91c1d41ed9f5512159957c2d77e24af0fce109fda8b0db989f25da46e4074b861801695f077da2131e17264b0a5ab5b9fb76c436c61340e9510eaa9615a86113c845381bec0b65e9cd42f8eb4946000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b2055715a9253797064567a75bd6eb37b649f0eeb9f8d62a2fe7dde0d789282fbef5e73ceab23e72378fc189698a7a0ca25ca74dcbbe8f024b306660463fe395fddcd636a276bea2ab499d3d15d4a1d7e6b3b4d77b07b5883d713ed9e9b57615c528602b51378f63046a4442791020f7b1b98d4acd1f76fc4c81d10bbfab03f3e9bf9a2fc52139c1067ee9f2daae8de6a14e15fba208d53daf24c264f01fa8870fb5e595a2d0b86dbc0067ee0b23c3c4912fd43ed9ec6eecde15c375f32e720cda6ee66e60a30bf220cad89bc49187be2f772a0e1a5b8e60bc3875d3bee4179db71587a26f7b37d9e1857bae997dccd5e96b280556891e6c48a1088bc6de1448559b043e423630eea60776ed02ac99b2177e6c9de307065a9f1ef8c76c1b538ea5cb0dd26b17a0b3cd50feefee5d165a943a67f67f186502cf932be05cef99a1b855048a1738cba78dea5f9466d52e710f138b261b5e56632c87842c586064e3e5f3ce4aa9d529db7789cb31e24c9f0d90b04c9e0c8f6321e8f59c380c145ff489586d46720ae7740779156190b976367db47ad7050a8e6fa6bdd3e3bcb38db29744b8cb1c874d9e0517abc819696cd1aacfb68f25bf9796299a7f18ea59af500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ff93399aa010281c752e0e0d9ea6fcd0b419af8ef342b40a203497b0ab70150eb6f9e3535a67c4ebd22dfb90ee11cb746fa1f74972862a2026f3726f9c532cec0fffe7d08ef548f29062236ddf7ebe169473f51342a7228157c441f332fd114ee1df155654f53f0f70607e458c6925d84f4734a08ae1ff74251cc44eee0ed4936b77dfe4947ee6c8794e01f03c30a1a01ae31f4ba81b867b78a860fa33ade6c16595a151c82e38bb3be51a81d0bb8486f242fdd5db5266fbe9d08c996d064b2c9ed4be76a376ccc8287be11310069eb8aba35a056241f78914ea78d4469e7e2cd584602ecfaf7d6a2a95916564e7e113fea977d4d23f76feb79619706b24a5ac7f912197fede40d6ba2bfa5206193a2a55ae51e8c98a7e5b3782e925ee43aa780d2de6512a1a834f36a38c23f9343eb520207b63c63a43c47aca1e18328919e0f0c1863c4dbc85648bb9f87dbf71baf0fc41e9fc0c62bd9903cc240809d177e329cd1cfe0269c1ae284cbb200dc4e9b0c16c61859163d0279b8beea8383f80c6aaf1c69a04182a00b803d8301cbe0535884ea6950fb06ade128234c8db6ebc576d43bfc29a0b799bf33b55217e88d3ea0aceeb7b9420184355d57f2631420d200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cc7be63ccb795665393c3c161d747db3efa825db053981a24d8b2668834297631acdfa19d54b3a47d94f4a64940aa4bea613112e901b10328d7cc03cc249403cb639427d8596f70032a655dd83eb86f3a325d5e62cc3770ed56d2bdb680001608e1ac5672b7362a1ee790445efa433fa262c1b7c75777f3ad29f0195eb687ee616edb5d16322e5cb7d89a473b79e594543eb95bd5594ff2b5cf241d78a7a87740dab955e08245e8975707dc78ad7a7d84c74c54fc87e5a3e38a9b0d5daafe6e64393540ea1ac2446c5280f3ee83872ed9c007a27df61ec8c1488c486a56c893e52358e97c3fceac8b30295d5cb53bd339ba45bba97c5c687b63dbbd32aa691b18bd6b6a96b0213b116b21f6932c8dd1ea40001f8f390f12fe56cfe00b757bcd1e02b73213fcd3d35f5880588df74dffa6e0476b003b529e1123af64918a663349d171bd85b9bc28fb44f9845f24939ae40bf3b5abde85c5bd7a1729679d4c3d2ddd66bc1a2c4ff9fe1799741a0290bf9cd7760a829fc5f023214356fd35ae654ccd4ddc648c91b8599edbf68bc81d8d9dab9d746acc7d0a2af0c3b352189115de7d84cad159d0d96e8f9c1a16cf0032ac5028d7568f3dba796df1b261c1f5c600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009dd8f2b2869c03a225a3ba1f4bb5ce334ae8dc9f442ea93ee8b110175836d1993ba81535a3523112d5380b59b8f1a7443b96d5d37e75e7d5135331de7ae62ea01898cc6c8b350bc4fad0ba1f5e9d92e6148c609a64e002ee1601547b888ab922b5092690675e4513124e817c96766f6a9615f7ba7d50f1c5b6802378c299e17681e25ffe9deeb8cc9fd6fa177cff32d1aebcdbd3b90ecced8a37085e71de6256c26ce4d0582f9d8a14d03943d88d4d5d637b83196ff74b187f51781010dd09dd6a7815617538d1fc13f9be13345d5f98718acfea6b79867a89a7b3dc2b232f2248244fe72798366c1ae332755249f33089ad1ce2c92691d8d0efb39144bae7afcb49f832edb5b3a6f7bd1926d9e71b67eaf86bc39fba96baff3281eaad920d11580503f997434bd4a8a1d5672d989c3c4f71e6d71d33309987f5da538ccfb21554bb786085db8f7ee1c08ffe367b6eecdde3d100d476bde5fc7dcf232aa3adc20a5259aad0175b085cb0db48a5e90807da2b50549b13c5476936500c5d28ae82cffebd46574dc11d30fe8c683d7c98ae1e51d160716bba3c2c146b222f355a2b88bab3f11fb52c9e227b5fd33f58b0c87e1e6bbdbfb44292f6d620eab3b5bdc800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001aa2575f8c19b798bb969b65ca5142548ce506557070fb42161eb30632eec19d109778802e42748879aa7fca924e4bcd498d404548762cad89dfe46e83850f8c2a89980b0ff641007c0ad77f368b80b11014a04288e4ff4e75611bb3bcdcc0023988ca2e36b1bf91ae831a4cfdd4d973fdca4ca6e6d81644c5415d3e2154eb5cc6730cb462b3985c01eff4fbc104b6a23ce784b39f2e120752cefc26ed23461053c66b6acdcef0b7c4287e9dcf719f5f10e5141021c6a6b3e55a70a6cae398876ce4e0830b8638b52809d2fd10e80c292ab40c4a748bb2da35e9e5a648861510012c12190a1b26d4dddea6618ef2681ffc5908b4dc14d8790f4f6f1c8a4b2c7de02bfa21f88e5c96bf0c2f23fc954d674bf544a69d3258cadbefc80d55c7a7cf9d258a8d6da4a6ba35f5dc2af484271d782a76f0cd371da32bec1a6f65260ff8260ee69e5b73560046ec6e2a51c56a9a297718b40fac7835af349585ef2455a94ea0e5d6b02535b71d5dae6ee11a701534f15e5bee702d13c2e13889da24d4878e112caf9e2d9c921f9b0d280a7eb812a704ea6f129c079e478916f560418cb8cf2048659a6c82187e2ff6621eb3d6d10bd24fb726c80c1b7ad0ade5a736cd1e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024df2ed692895096df63aa703903af69bdf6852ca35c13d5133054799074a423e48af508a7c6722cd83a5c092592cc6bd78e2825c6dded7bb35e75e0925df8fe9541b2ad9195e819a8c85c8038ac824c1d7815abe6382986d652cec76961d9c5cdc06a3f67d75470a3ef85b6448cdb3259c6cd234e66623987b57f16fa6bd05e6ab1cb3b3bdc4e6f95d1cc416f5f729c27ab36a0ccb747dd70202a266ae2aa708a3891539a996f401964527f4d7cc8e26626513d1bdaa981476b887074ed858ff632ca1b2d1861a1e3bd8e68e13fd3aea50856f1c64ca44a65bc2e06089860ae35ee5a230abb857ad25f7ec4b2427a0d454407a4af16897fccfc02cdb843ea1a1c1e49f21a3550086f029d729c3787f3af977980e67f7469a4d499c51d63f18981bdf912ff02a3fffff301a65c3facfce6f0279adf5593775a8a74c6811fc17c5de12969d6213d06f31040dcd0047d1960319cd0b6b777039279a123c214e3d3a10796a542f8f0e0d108dc9b212d8da470a84f669b6b19d786dae9f82b1d670da2f7391884e9a82c890279a64704cb72fff2a072310ce1b42dbefa9274a90f61e3126c2b5e9a9890785b26a9cc0d5dc0ef17d233c972e10ed2b074e5ea0cb62a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000842909512124c1826c190d0ff925a7f5265eab2ffdd1a7fe64dca15fc4c2029ce6efc5df47b998c40de7ae18d7577ca9240d92e0e295e9793c69afc67bcc2223199c3d1f5d11569a03a3fc1e39fea0560300baa4c8c5deee04d6baf791655c7e4615f025c3ad5c798df06dab954b2e56cf2a3e5bb5b66d6d952e3ec1054cb46d6639e2ec8d1a55e9e919d0b59d3a1b8e0b6827bb2d6b7cb39eb724724823fb2eb848ffe205cbd5237bd118062be429a5f8ea4de945a90d73c429a8d7c09d5c462672c7593f795067eae22f28e40a95ce51c9219ff0d6ee9011bea7d306ca7371d402a4409a9d21f387b9802ea58e4e3ef45d1062b3fc575caa22fa14bed1cc926585922a8b4e818ddbf93da217c01ac46e24e8d092804ff8a4ccabc46b5ac15ef289e033d73fe0cdee65e26fc9d2eaff516146b3f4bc70ba6d953d469e60a96d25097ad2f005d79a1a0b84f8a9a132da96a5707def30cca4efdc35c6e4f56e838b2f735f2e0dc2b694bf9e1a606358fd101d86eaded71c8ff3a58fcce4ed0581471b1ac91a45d43e5dfda03c65be7c699a3ffbf40b5b475f14815503cf047ba0d7b5d4996b3b71e108c000545e7f421d08d6d61d52269ac0563ff85178ce8de000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087199e2148fef872ce73f56635e82b34734afea03ad3278f30272c1cbf82b78706f98ed4baf6b0bc0f603a9cbd34e4b0ec3a6540ba1dbac476cbe73436f73cf7b223d893d2ade1ff9c23b6ecc489ff655e41ae1a600c6ba118f19d58f23ea7b36a8faf28f9f8a647f140f68b04b4244c62b0cfaec74c794454ba311e0db8ac1c8e4249cb72f3e9b14b450ee06769923a480f70b34557fcff33012935a4b19149ccdb9a513bb4eede060becc9a754a7eb4c0f9460ab9ea369a8117faff05e5857965f2783f86952de2cab351caf23015d8fd26b681e52c41620b9ea2be8a79dd98b654f76c205b5ca1d5bf6ca0cc88c28689e56837ae1585cb6b8050e87d5b9342221b4bb82490e6ce9066cd50768da7a81de6a0ad65dd868a16a463c7a3f6ebb5c08bc48fe845dc426882588ff77eac494f32a29de955c79194f4cf28c38efe6c9fba0d76346635d1d7985f1a870435d256fb25ce980c6ce8e808cab4624ca31c657012cc2ef6e3809738193af30eddd9baa8e3b9d5f45ce1884226a79de72bcc12523cf074e1042b03d213e710d093a80779d0f6bfcf5871d9be17fcfa549e79edb5c3bd483bae9d3e6a0822eeb3fae65a3c94f8126bbed6015b1055dde7f2a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c7232fb9020eb31daa1430a42dc793d49ddbede9f2adc95bee95ee1683dc9864666a4b71911b55c1a11058e85ae74cf3fae555b5bd1a9eeaa0ecd39bea9498e93627282824b8b804636d873a8c7c1606c153ccfb080a55fa311ae4ffc79426503c037c1da1667d93674f464b405e8a13a2c4baaf49895abdfb62a49c7b2bf53ab52d4f9e9dd4222685cdf444e4f6395522ed12168c53c5f9d961c52d948a2db5b6198fa09bbc7cc91e2df7311b07ff87bb8ecb19d7a585afdc21bf2b73528ac0aa6e36f76483b4d83a398e47d5fb803f5a95cfea56ed0adc29ed03c58668a974755c5e4bace92091f824849e7a7cd232c670c25f5b20aa8e1494014d0f300bfde3dad6bf139545526ce7c9d52fdb1e6ef0980ab41318e73db5041b15beb47f11c946acfba4546518f1f6e943cd54e2450ea4007197e189b190fc30c78ed44b559cb2ee40fed710f8e6496d769dea7dbbd5ece34073169e221a448d11e2d3babde91bc482f32b0dcb8e4d783b23884350fcb67dbb45406762692a1d3e98ae9f5e830aed74efde878c6d007cb4763c5df404d0068bf6bf275a96d033f24b9e3f2b2f6e1ede5714d3975766d25871c8a5220a6e4dc5dc5b9416bc6fbf670d8f11900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ba11d6bac2e5772dbd83465fedee91661d45d2ebb1c17ec121dc42e28de33338d1bfee3131d7608dce701381add0cc1b739b97890a157dee83303fff3131a82659c19b549a2daf8b25595bafa276bc07be913cc5ccbf3f98e110f072745398190f75c7fe7d7df775864042557802adad4e34e8c9e62d2247aa8e14fc6e0b73942c30d6650bb1f02165f81ded877897c6835766aa02d71ebabae5def1b2ab741cf70d16511c00e73e5e5360e9fa8cd0bcd3c60c1591651a0bbc112a6c0f4a5de19db671dc3e38287d89069838a0c8818cb1d235097a5be8cfd287ea35072c1734f98e96618c3f48798f3fb88f9f2b57c959cb9b54188afb7eb8c881823b37f0d9ff653280727c19b66a7a2e880b7408b98015687502ffaa3e7ec14420abcbca0f66ee756b86ec018ec3e87569026565d11c362ad42c2e72eeaf2955a17951025d49e7473cff509c1e64e6352c8c54353e847a1fedfe815161cb6588d794c4aeaf8d7652d4aadb839518e4005333f35d22460fb2c65174f5f9a0a7d7393449e37284b53e41bfa007603fc76c572efa801c5b5af94d93ea95d28ce184a1f4dee271eae5bec52696be74c9975fa18d8bb1b79e2cb74070dea9b7e19250aa802b514000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083f993641b350ddeff951b051bf26837091b68cb5abb3c9bcb2ba7cdb96d56353922899729bb24340fc383302763f097bdb6ae32ff6d2ef7abeb08a6a03b920dbcef95ce73c2143634965dc84d60ff707ee8eb8ae909100fd87a872f11422999a1bc655dba86be0ca682b3972d20cbd5e1f98eac17723d3bab75376e4c5463d50efb08f88b0bac93d6fb3b32b6c6cd174f266307d736105e5d6b5074cb7caec2ddfcd31efc287707396f3ef9cd1d709ef2b73679ce89181d678d2a9cd4d38eec4f286dfa244a244be45a6787cf4668223ed8e49eb91744e4589d039019ee067375c6db9b2cd4a2944538ad90a767b0b25141cbfa5cd69222c6845fe000c8b4416f48018141da87a194eb4bf744005fad59e7391e949afddfa3f983444765bf53c703faecb91c8899c551f8daa9f64b8964beb2198e3e5f946873975e2f7f05907c62d8d037ee65d8828b741b963f4ea0562e15d1dcb943adbb6470eacf8efd9a63e1de64c61dcfba1a296efa0fe5e932ce33b4c40fe652b09652c48878f2c801f9fe5cd850ba723a5b1080c98f666f0bd8fe6e5bec5cf23ebbbf7e25410dd833603e22116e8309994d23e09efbe9c970d92a49e68d82f18b13b9bade51a98e7800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cced841262dab6d744fc279422c809acc587dfe480b9f7e7fa76afebbf28f0615a79b9438466ab8c82ba5d1f89688b388abdcd7d8fb66530ee28372f551bdb4ae50a12a864928298efb5ff59be8047d575214f727aaa6d0ad53d2cbf25c2d4ccc3d979ac8ed838279700ff014f23b823e36eaf58b526a2974d977d0f97ac143f8844efdf85d5533c5f6f95f9c7c23f5249ba60f07cad6a8bd6b8d039e2ca94d92932a4ecdb9cfc8f49822e402d0360c761674a8bc35c6b143d21c2eef594dfe27d9e9f8faee7b65c75c87f49e8664256ce607b1360e001e511bf163f0db9d1b22dd4ae7ea68f52157dc2e8fc70869919c11f5f9033f2fd24894071d6c94004dae61dd1ac16e4da714778763c0f71bff145640063c6368ee7f9b11a65baf272b430efcb5b6ec81464ffef4d479eb3511e105b5199d2a1a7edc922dabef01c781f2f823b7e06bdc8f92fc0e87ffa7aa4dfa5a8baf54cf6cdad9fbd4e7f615c89e795873c919247e3e75f9e0547f4acf38f5625aa6e19e9016ca847878e608679a6ac198cceee70a55b0405da00d1a60ac3a98d4d24b43b58a328c4ee35b499687ee2370920c01b33e36314064e2ef7ebd82b12bee2eba434a2aeef99e10a79a4e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000acc24804268b82a62854af77d087f1e25084657300f72e8a48ff4d4d3a213a075567ee6c0b13263b06c29bcbd228e8652e421e38e2c4db5419ec411f82b3d4f26d38ff4937813b50b7ad6e4db8a4712dc48c7c99e307177bc280d32814fecf945cdd20470ff7209a5718ee9a1470faa9ea1a3ddb0231b176afb5bbf511f5c6951edaa7bf4d185dd7c13beba5232e9e9a8908cde190df300aea85051d551e26bfc82daf676395cc85d0fcaeb829d3fcfed648516f974569c766d73bbe4bfcfe5db14b2047b03abeb06f79d709e9435d50a011cb09f35ea04a46382f528047742c8d0eafd438e19c63d25d62ccd96d6988465ecdca2428f94a00a9d9fed44beb40e2fe9be23e9ef9311139642886513a772ff0c63b69d02527cdde52b7b34fcec2754ef48560d3efe06ece4754e5749680bdc7d4631c2541e8d51b88ff7f22f74871846c9ad46a4e424ed7f0eff9ac059cc9dd547d1e284fd72196400e3b38f0515a3b974b9d1c564af3ccc3d072f688b52eaaa69776fb9de4f093c21f78fb897b140eb57aa5acce8544018646938bad551576d584e7c01bd8a01b7366f7818efef22d8e1b68a50599b8e1d24abed8ecd6309e2f040b686bc80211551e1887ef9f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a96f4aec8881db79e0ab678d7d165c0ca5c9e2a6891ba1c51e2842160601d527074603ea04c5af04583da1041e579e88b92c8f89574a55fdfaf74ea8be01ac9c0bce4e412c121c340eccb2dd8429564ef77365dc5e5952f1a5bc3cede6c4a57a701e0ada7c58b5dc8b424e57ea0e43a24c9ffa93e97b183979ab55cb1fc58761a803306d636d895e4e2f6b6d0d298944669206892508511b7c84c82eb7a0bc8c71dccd41bbc09901a7d73c77b62b63db0eef7c93756f21a69197c6cabf5a08a0398109e36c970cd599f169a6756ea396e8cfc3cb4b03d8b69417bc177f76c3f4d1f6067290fc68ff7f3c13db41ebf4504ace6fa24537c372af946f89ec1d8474730aa0594fabc06320debc687a452ea8b175fe8256a7ea3a77cd1b33d3f11da6d865651ca45c5be3321ab3ed4773f4df3f15c5a29e6d013aad26575bd26298dfbb791d4d6a54672bc8eebaa8071c92694151796552d345530e9369cc22012913d55ce45dd5f1d70c1f4d8ae9663652798e09d23858c69002b40a9a3e5b43fc8feee54042446f2c06fcef1bf82ae050c6a083ecae59bf7fb222536a49fa8e6faec05476c45a82dd2bb674d5f2ca498b9bf116497f6c6f1011d3b3b62e1fb1d8a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029be2c4c48e6456ed627fea3ec59cb6e7d9cd23bb0745416464aa30298e71c9e4d7da6515acd4ca3a2ea6569463830f4d2dc5281fc1c11d7d68f2cde8f215813736a3effa8e96cf04800b410354254890508e68ad23245f0e400b00c05d1d84e51cdf883dd47cfa6dbf1907f99fb896e7ff25dfe5eb4bfc4542977b4c02628833dda82f34b05b9955d2ee16a23a334e3153681c1b5aded59b0dac1a31183cc9c6e5143ee331a96cb0786b640cd43a77a46ec0401d7caa260e44d28ffddc68c58c0ce59a03add2909ed40609e84fa98d1a05e6b3aa2eda38612222de16465dd5e7aa029ca7d8d665d73facd0a60226a7812835defb158ff8a990458486d0b7adbed31e663800dc74c99b42a07a09f1cd2d6390e8cf9d17c4ff1ba718eb1c8ddb2a9d40ada8e11366cb73ec9a253953da3da1e6bfe48e7c542329ec617a2eca7f7788e0bb9bc4ba4367a2eb13d7116f258130d3df6d8d19f2f399dd20623fa48cc8e6ba855cf2552fc06aad92e60ee714db24dd095c047c239126de0e22aceacc63a66d0a7bfbad516f58fb806e636a4691df8108c008b004c4be4ad4cd83795be5dd58885b38017a77c8e31729bfd6f40e419e555e44ca8c0e182d9f04e834be700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008af627d0fa84f3d3eb364546d66e0fe0a355e3720930c559666bc4ec4fa4f7c6a8dcbf1d823bc704983c7b7c04183c01fa3b3b3671db308f918c96b0dcab36011fee8e3ab31e164d9111ac7fcbf5ad41bd4ceb85af6576fd729903dbb70594398c5475303fce25333edf7358262ad22510a9c9bc4159f4533df1b03447cace39ef62a64f893317550a9555d42d827fc956b28c7a687965cd08df0ff2ef8c182e1ca62d21163ddb10c10d9dc5fd4c1c7c6ca2683b0e0c4b00d52a79c763da63870cde9d278ba26174ee124fa150755c246291dc6a8c566430de96c08cc641023a50150b5d79088616b134bfc30b996528ca49bfa130c3f112303a9275eaa7055e8083daf36f3b46129e55f2fb64c83d2c1ada31d45760401f0698093f633888781474374beb78412c6587aaf543b3e8baebe9ab7e20485af2a662d32a118ed89ebedfc32c5409c6d6f7c2dbd072f77ed5eddf631d139bf8d305870fa82fc83ca05ac7bc40518cd792d6b30e882fb9d36ce35d80ed8e8ac90aed555796917bf17c51f956299f80f82db4e3d34c0bb71e8fb87f972a1aeac2e94aa8ba2fa5cab014b816fe7a84c459c402e9d9744d0648cbb60fdf6f16dfd0cb2eb2f1d727d11ba70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000261f94acddb1480612544c33cc44bf88fd041c1904e49fe72846c454a77cd59d345ad8848494e515d2bf9bfb43a560788e32ffc5343989cfac4eb5aa05bb9d3d2a1825a50d71efeeb75e2b97536a016c31d65674bdb93933fd7263ecf56d4f549f56ee97749c6ccdf1b6828e520c7335294cca7f888fbf41f6863c6eab0b61860839f225e0c57714e1129a4c4b10d97c4a05bb60ab32cefae37e50f3a97d5f97a6a2cdd6dd8be74f16614a8d8c2d7660fc1449b5c25cf1595f59b602f2ca10330e21270fe48d1e0bf5a1a4442dd1f65d0fa75bf9dd13f9d662f5036d84e245ee637c74f9b1bec8a417178192235ed37fcc8496d604070f0d2dcd0e225f1579248b01bbe73e1e656177cb13d55fef2bf5656210d5cc56c467c7041535a63c7ec89478ae0dbb6d273a20af482c9be4408c8bc3ac06eb9b1908cdc00592658cf5cce89494567e95b87e94beef61aa6b0ca55bffdde0b6a262b4cbd24565dae9b85a18e9d7fb39f8e4ac1a337dc24c78e88da7b26582aba5409f20f4e74a87e410222f4b3fcb40c7b3d8ebfb30b7eb67c89f4f41bd6d7351a6bb2e1980459f6d2f06461b4e6cc8de9cb132183ad230d27997b0914a4b670f37e0e1e3b352ece7d79c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ecc32de1e81108b11b0f2832400e1aa8816f5c0581aa996c300e007d43f0d94c78f71bcdc830783e83000094fd11ea4dbd39c3f76b5ff6a9995a37e9f5413f3694cc22621ab3766396d85bea8e58e3b33e61ab512edfc4a56d8f653afb6eb3cb41c76b68890d3d69afe8b2976fac3ef2ff36169e673f0e174d227ed7982406d2899034e147b3a0df5ecc9fd4bcd100a93f8f18590790549c9b734038ce87f535f5f4ffa0de73ea6c57786f1f0fc0c9e1c9d2de1a8ef0f9dabcba9238507bdef60dd5c49a3e7c216489a8c58feb0dd56580136ca0cbe712a0526d773fc3466109ad6b5bd9577dfc7358b5f4d405323a3652ea85d23a91118093870ae4a04378cdefcd61d633983370ec5d4ad9586aa2c07817ad5128230cc18c217c4cf8dd307d6ab47669ad9072dc7218982fc7ed88ff014d816f9b3b51d7573bec4e2fcfdc9e15e7384c8ccd96f452cb0b58c0ca7c88600a014f73c1626550276fbf4d2400f71a37710d937b7ee8f5172c5dec905a18d5099727e0634335754a98da2389ba97a858a42ef0d4ea24e45f68bfdf5a3359200fad84b03e6a5d52345a297700dd3dee29feadd71dd0015df12c20ce4a1cf889826293bee9c8edc856e11098b62720000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afc13f27bbd3ecc91843c06c390e2a3b5489ef83c25924245fa0af66e7f5c4beb35eb6252cea3e335a3ba18bed50185a27e5fa9aedb7befc56081806f12a6aebb21fb2ccb5c9b4f56112ed96ab5572f0b1ce75dc48411930a4d97bd441284c7fd651e91a6c3f75b7ae70a5c003504bc655c030ddaaab8c53bf6546fd5d1d08998c3151412ab371eec853c5c934a5646ad1cbc307e5a2cfa0d296875f73a430d07deef5cece1d869a7d4c369be6c2bc2f7a6b6000484696be3709f219dd7d062c592c7f8a7fe8712a853343c7e746af968ce458d0c3e6dc2c16f4614127e82279ec8bd05ed484fffb2d53f0c55238274c3fd2bfa6064ea178968373a75d8d455659bfcf3042d89f4a16780c439d44a612b4376eb86189844ad7b28676c47ddfc670b7e4a5ce4455dfeb1c4fc05af6345cde65b79188914385648a16345902e39b01c35a14e0efcc7aaf044327388b9d010dc5591cfe139af4d9440d1a31dd7aab7697504adc9255033c6531a2169b5b61d31153c27cb7feb424d2aa4029ea4688fb2dc01372fafceffdb759ceb41954ff2f393289ee7d1c7c6329fb4e2324b24b8584dd05c6a2dc7dc9bd62e260558b2f54ce392506d087a49325dd3e7131391900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ee63842c1c327ccfbc189254d509c2a617a237bba297277e416924f813adf8467037fc86ad16ea5086f0554228ceb5921aaefeb703f48e2058638c35bd3ee036cf758d9f5e906ff6b5806deadbffbf4a3cd8f9bb48fe837373edec5658c53e1791b28eb7026563007ae9e7ed9d38b7b843a4bb1f29317d4af704fc1f5f6986f653954de9b1bde49323d4f9c911809a30c758f1d56aea06e3f8044202108253392e5e74031350e9195c21b6df8581c7ea4171826bbd7dbe32930cf5dac071e790157c1adc049cc7688d30b07949097f0a82cf74659a6f7e5824b5516b4d76db5a7a9f969755d13be01e244857f9df2b22b6db2d03196bec535d161a0f775cfc3ec8f5204231a34043e0aec681c9c55e3a399eb0ee4582ee72f1cf674477fbe6a0562eb1d3b799ea1ef0847b0f6135d638646d782942005193db2cb3cac23066e1b83a3ed58023c6c5bba3978df16f8037f42dc46b074d68928eeddc7dd0363327e9a38748d80adba7c187b30403e68043c4fed27b7931abadcaa242a83e9c2f923c3b0369c1ca6398657d8e935729bb673e31040fa08355724252ede05ee3141994572e088cf7227df49617074abce9cfe1e6dff5be243d34c72a229ccb7a6a8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088da4ed30bb622e7beb1b918d30cb5206d7208c3a707e108dfaa03fc47d89b45d0cca5bf30e1ddcd019cb8daae2e6c1f63eecdcb5e70e6b44bb21c44f17c24eeda0b7229d54665c20e2fcd3e1472aaa7d3912459f470479bae793fcca13aefd406a42002d7e9b2086ef8e1225f4d93dac2c56762b57076558ecbd6be6c24a2947c15cb5181915a3fc5be75f0237476034d4747d83ca2213318bfed2e99cc6ad5e266c0119db8e1af322cd3928a38f0a3478d6ea341ddb53681e93e1b7bb7fe3e22964ba3056ad5ddeaab3192a896ba1f8e5d90fb030947b904aaf5300fd549c7a3cf7f9b114ceea4be47a92b2bd38683e26121660dcf7ad9643b547400b2a0590e17aa07e8b01bec2ab70a1dc290c142020065af378521fe8b4b6fea495506b58ff01af2d2d2dcabc1ce8a493a8c71d32e88d2afa0b470d042bb7d88b640425a7999a703288de86db8f8696973ccdcd649164e1a59dfeaa97642f404792a7075981711e936650693c8ad5998b1c1708ed436aecd58f61ac4c2015ef31b7cfadcf136e1c33fa5c484e9f26f78d55264f927126ba96281b3cce00e71bed9242ed36d3399f488d98acc71bdc24bb1dcc451251b580e893698b988d10e4a8f7cb77f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085a0221c621036305cdae1310d78f435b4d090d01b84b116e267df7a9f30de49168624c53a0310a3e7c79f37da2588ae9bf89be22ce14ae1fb7da0e014ad80e23d52cf8b218bba39dec4a01d371cfd6e4dc6be76b86c9561f855b7da5b4a670ae70b2b0fceb8c57ad5006df862b5431253c8f885d43836c74ed112c531116e914bd8217daf7f47608bfc72221b968a57d7bc5268ebe8eb9f06422c700dbc08f4578479b8462e29d1aadc0dae9c256af640da4129bfe470e6de95c09b481be686eb02d78264b4d9f39dcbc12c46bb40fcec19fc5f4d092abb181a99f121cc1599a1ecf6b0e22c4b7ab59ebac6ebea7ea10a049e228b09139cb9fc9651ce36461a3ef4a5c72202b204b186917942b9cea3326b99be379f4b48e8658f02579ad3032617b1336862328c3947c8f74b7aadf185f06228890deefbfb8876ce7b9a7a831b13e5d3d1a4171be4c330713e674a1898bf2e43201230b802845e14bdb6f52a18284d3fb3f2056bddbb1383df57f540efdcc2dbb7b521a639f012cb6e9abb031dbeb01d0fd752882b9e436b148113eb0f0bc4f673d57608a41c3a2929942bb94f82098bd301bdf5c70b3439adac237c09506ae0f9df09fcba4f4aa93c2f614f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000225de0648b50603bb4464380180af4f25861b54b41ff4a7c075aeca86722fb36cec1e00bc4b9a227f255fddc8db1ee27dbbd39833e5a785b6c03dd5ddda6b4838ebcdbcb601fbbf569927622934ec589fafa4c46c1c26a6dd396996f04d8072be74235cda7ef8358b1d2143bd3c708efa7d015079f1e4b14d117ee52b8e4f55e53eb3e78510568e0c8a71c4949617206eeafda5f357bfb2d12d78d398b27fafdfba671745f9579270c5f3336a38f0f7364d630e2fee7d0521c970ac1c9fff661d8935873d8511c4f615f4ef8a4f2321203dd5923849a9279971bcab1429e40274d916d18b5f5a1a7e11426e581e3a2989c2ac2c005accaa186bf65a1b2f8bf1a5c1723e4cb7f8363a96d9e7cfd25da15c0b44018df788504d8b31a3f734233bcb5cf619cc888ad342b5af43b4b005b1b44383c4a442592f5ef127773b32863246dc9f665faef1dd867d5312bd5b4f03777038a59eaabde3dadcc881afd80294941cc80abf9ac9229cb8a2b1e6e6ceea166c92b3abd445f47ae31dc672b24cebc5a586cd877314e8b461bccdaf6d87d3aaa463a80879ba717fbf0cefb56b3cc3fabfb77d492c2a458fc0b2ad1160890024a36f224de85d6de6891c860727353dd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008257559b2af9aaacfe79da280c3c3fab70f4129e443877932b2af8ebe8be8d4d745846172d37ad3d5da9b4d4a8a13c7b145378d0bbce21177eff9a8a48c48ec4a7265b8294060dfb02ff4f8e92c7e6af5b1ec82656f3d140179cb97449839855c6460edbc6cf57427c77a74efc9dfc288bc047934a5458922add32e3c5250d342e02ce0dc48437ae8d09c620eaf63aede8b769645001007dc74c18e48c4be92fcb675e49567a79445e00d89bea03304af7729cdaceb80b4a8bdd19e5783fcc4bcb9d4c5f0522a74fb3ddfcc0f141e215b30eda2f1b7c087e785cfd625a037580cbf61397902d91c4ae2a8ac94990a91b357aa4dcc3a974eb871534a7b276a612e296a38a3b504e08b28d0f2dcaed2463e75bb6f95aea1d71cd3968023796400e1a918611014dd2227329882e4bed22b5f066a36a42b24be1631fc7fe8c8f808bfc2f771ea550f92acdbbf5d87b5902194964a4e8ea172d5f8e9ee54880ec44c20b4866986c13e974cba76d858922be7fd3670685ce6497dd5ce72096b172d64573736c7623c3639f99ac7399c9ad091db3e0c1edb0537c253ff88ec156591d9298e2f1d82420daab200b1356830dd1a7b09a291f77e5bb81cff160cbe7eba1d1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081a2b3184464dad98da2f037b62d280cfedfd88f979bfc632ed2f77f73cb00ac762811b0ebc592d46b7514d33de2e0a12165614f2a28a161b0b8ee57dfadde132f653f92a57be72db95f24239470730f54195bfc83e8ff79a067a69aed775761c92003d403ec41b233658cef7ab7a8ef96ec33f91ee144f4eea8897b91b2ba9ce395111a4803414e41e8197ac2a70f30ff587da0803d2649a8b4d80a8dfc440623884b3c25e3ed4ac3ac233c1cf36866ace5ae72dc05acd8f5c0b4e170175ebc64959bb763c7021b453dcb5be3a13bcee3ad2d52c842e3b2ed5148262b88722f12d593bb58bd3640a02ad3e72e6c66814e98506f96f511b9a92017fc2700fa0f4725ea237b4b288f9024d7436e702ea42adde2ae548ee9049f36130c65fd0af8ae905351eb6fddaf5da4dba7600618058ac502e631562d6daaaa0d968d41fb2413bbde13be3f04ce2967ab6c071081e88c9034184304ec357419f2f3e87188aefe599eeaada28f87eb00c26954dae448547b29d6527bfeb1de58e25b7d240cc620839d788ddc69763e451f1c34da87b66a58d01797a8e7cb93f4595511e01964c9dc803244ac654e0ac94df449767e8cbdeabed957191433bbfe51475da86fc200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a482d31e6ac7aedcd46f64c89310d5d3143c90c2027049411813cf64f7d27ae59e477e71c57ff17582505e69591afb37125365a348288e6a4073910fe3966b3ad0ed672945ca47e16e96a442d874b238afcfaf71b8bbd63f1a8ce958c04681de410627b004da1f7db3039267a64c2a9055ad32af7a82a1fc356d00543f825ef7774fc716839262579fab4d5fca383460277f52cf921496c8843593b5adfd0ed58a65ebc49e25151a5ceca0bde4c6341492316f45794c8ba802b728f5dd0cb6796d9dbe9b40213052841f120d4eff1966d0fe39a6de2892ad4b116bc50395ba5d831d14f120f730cad06209baf61447aa26b08bf42834a51f96838027036e6df11181431777fe89258fb75fbd78e80a660736340b74076d0df46ad9ed73d3c5ad91c2f666879717173777d4594ac81a8720c54fbd99f17f5fd12bc870c6adb18c45f01ce78a680def2fdca98fc5803a008f02951e48f727df4e013c165b3ffc353f69b9aa1ec950a2b328bd75843158dc794c353573e3e6dd06293c2aa3285751b9a07777156eb53bc536bd031c7be007e5921753630882cc08670e803d4336a134e99d10cc8e92f689f26b78f7fdf666117374d7d1a5b583aaf834119fbefdd000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098359802d0c18a7f18319de5aefb954506f103f8323e882964e51e1cf2c677d5f4237eff22b0aaa0c6dc853bc18a463e3a4d437a59cfbd52c2fcb5f71f66857a331f1b4254b5ec5e7a3da5a4ea63087ce3bcd6180d980085d603e4e5527d31576a1eee6d2477e509dc4c2dc6c21e301f1b4cf34ad6ce15ac40308e3849cbf76c3ca5c97bff46d7565f7c90f0bbeeb550045a8d07da0e93b8bff1d896541901b80db830c91c0b3e76c98fc337e9845e691faab565478bf829ca4b1a1e507fc83fa38660b2e71c1c27097a497996f842195e364b01ea5368074b84b3a7405f235651adff217ad569d8178ddacbd6b2840778cbc54f1cdc2217111e67e34fa2aa98ed2d549ac649e17a7f3cc8546e26813dab01f84dc1ed6913ae7afd24e5a056529021bac38f24669e272e50943509f1e4408ed20f6efb868bf4e6307c61812317e5ad1176b018a0471fdcdc13d950843db4960cbfd97aded5642d3df28f16dc7508de40efd9ac19d919ba972e77b6fea0ab3249a544cdcb2322afe03209019a08de1c63ea37707ff22301c09cd107a78428f746b142e7f49c1ec036daa0e2b7f4b310c6d2b17b535354040b5042c482a7b7d35e2367a739cc995ea9f652c7e68800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078b75d65b4fcd0489c894583c6a1cc077128821077ea6ebf94d251234c43a86f14d9374e18530c5e88c793f0c3bd8b67bd3e1c59064872e8778a762c1d810c4dade6bc9b8f78d20cee1dc6af65dbaad3092d826ac7fd1b49b83a603e36863ad0abba30ff87ac23a24fc4303d1bfd686c3cd81e2b62df5dfcdb85b0ee7aee699356d92b4ba1c457ad92ab363278a0ceafac5b2ade80dab4ba06b7716b56f1ae11945cfe143b63bd79f57487488ecc101dcaf850ae17102eca74a390f5354a4e06657cbfd69a491ac5fcabeb405f0dd9f0c9e6197fc4dde10956eb34ed032e3ccfc80cf039612dc2b6691dd99f85328e4310872dd8f993f1edc114bd17ef7461491b697cc7b23b5d4ade393492ac85642d4121a789424172192637a6df87dd38c57c5b98a74732d86c8ef2baca2779590b54057d9fdabfdbdb371b379846b47e3cda9d1e0e642832ac4c1b4cd052b270f6d192e50ab90c842d1612fb476dc625c28fb6e3691fc48dd23fca3a18f3579d2566c33282ff6b2915d9510c0e887bcd1a70bf0ab61513699ea7cf29854fe15c86c163dd90437b966907c68b1b6be306ca71a5d9c441ca19a3d1719f2d4c32c3074bd7d30989f97fbf75b092d7e58b2200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009376c4538ca855bcaafa4585211ee081c271eb6ea100dd795495bc27a0afb127cee9623de2b3b8c0c9f0bff79fafab3eea79a751be6b805ad7db818723aee1f5720cdc5977a30b2d639603ebeb7bc69205ae5b391664b28db0700e1f609d79046c3eba69495d574afaa6e2c74a8a3e399bf675fcd09d95f65f27e123d9010d94c22bca993a0f85a7703291fbd5355d23fc8f7778ce5de0c48f3ec68d66ee2c59ff5998979cb3ff52525addc3e14cc4100695803f37ae13ca4a21fee9f18cf3532b96284a05ed260550ed8bcf49985b29b8a67f3610968145d276059f8f239cd41098e2c389bf0cff641e0cdb21ca97559fc4b8ef2bba8860f2f3d822947431318d19da29c7f64b6fb0935e7a56c4de5dc52ad1f193687c3e912536349e41f64b4847e3e743397ec9f26b1824c8391d8192b1e7374cb4e87bbd9667e050d4008ef85801efb8f74b92289baff3ba76460ee35bd97b2817825b582d482e6ae47bb26b1c2e73f2996c5b10ff7d71101fecb681d8a9d2ad312838ab9c1327f9a7d0f77da403c7c7d5b71708e1a4683ead70000f66b9fa491a1851f86ce303cec3fbd8c36452490b882249a13568cd745f4195aecfaf9158bf64fff1bff6fbcbbbfbed0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5c1e1c3e32ab1bbb0e52bd4f569c268d22eb4c2b59484fb209b6b47bac9068d7509bc74faca63bc75b63ce4ef314d5f2c3157f62a1e3e71b8093d351c09d45aa006f5f9edb5a204c9edb56c9b5badef6852f84c7b7c45ad5f87bcce6c092d1f5c95e6ac9ff2651e2a7d689a7e73136299e2d4988a8adcbd6352aa696ae94cc777a184a267cfd9be3c784b9a2eff3f42e0d03bde1dd638f81a79fafb8f654383f32934cc8ca8bfc140f7f6033abc681301938a22c3020b9e6bf2cba1385b0f1484ff3d9759a4c95788b79cebc5c40765c75ac283e1d09aac956a22fb6fad14931e4051f48814207b86de117d99c6e92a251033b15d76fa6f875b1767eb4cfc71fa984cff27b03bb8b61a4ec3b3a9562ba9f18bad95ebbb4dcf7e1690fb571687c450b6fd8bea3316b8bba2707814e1753b9a99f92d905dc4ccbb21508c9fbcbc227fd0037d9addcb53e64ad5102dea938dfd26799e634f82c40280c5297d9698ab329d3beff23ce9f600affc2bf63903ff9d362478a6530def31d79dd513b6be6db7b3c477109c3135668f33e5ed97d29ac66a5a99e02d2f608f3cc5dace5f7613867e1fc24438d03e4c6f36383476d77e63238699a09e5cf596d411b31398ae000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e1210ef9cb27393f791c58bc2ef8cbc56d29ea5469af4b6dd3dcd92ca404c6c99608b0f3a45086fa0d6064d3fd40df0ac5d42a624dc388f27fe89b5922a602549f99e1cc3f50d64475b6a1fb2044d1ac0db8c6b113ef95181bb945443e3e7fb4830e5a613cc8a50e4901c2cdb74b92716d5986b2cc2ce9d1e805be3790744f1e5fee8ed7739336a8d15e76863a24c459714556ecd3e4ff1df4d1207ca654b3d85d353852b721710f0d241c5c34d4b916947f70cf32cc5e7147166c79f9a8bf5f5f1930706b6b1b153f35374407312df026df848edd44b52b785a59f94853d6051028fcdf4942930f0211694f00282a6198ed61218216b2981c56e69d0cdb4445ce2866e468de1cdeb9fe59f245cdb8dc32f6644283065a821a02f0644c7695ea72f656cee62d833ea5ba9f652e4026708edc6d794738c74db0ec2a0853c59933137132360b5a6234218f545a760a6f29292dedfc34aeb3cf8f8e90efcf1eaf756d71c747d28416f222509754ca4b35db3259b23510ac72dbda475683e764fd15d84703e03b7d53c0f9278b36254d74f1682577c07dbd281a086591d8cd210bd8ca8732489b6fd4be34eccf69c213ed3014c833fad311fce819a878e6e9310000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f8821430821852c3a0f687f36cf3bccb6e706a014c5c32c1e934b96a7408ed38e7c8f4556ee89e3b85f003966cd3e8c6929145d70ffd2014e496f2b745294955fe865da70cc7c73cf28afdf844e2622b57234585d3f45b85cdfdcf3bbe1a38557cb5e411517b0961f7fdbee4f0e7858cef9e2ae9fc444f8266b154b135f5d7b1a3eb6c95d681778ca99071f0a04ddd92a4b83b79fda9ade59f5f53175f70b0e29ebf34e9e19cf2f4225627a45cc11a2a67e66f5cf29bcf86b1d2451834ec5d766e03aa7ccb4d0720948a1388197ac1be5f74bf30e653d5961563cb4254ec9eb69e7fb45728a096abed48cbe00e47d2b98715bc6c188580c7b220baca424d46250f12ed275de0babdf37b05d141873f46d02640df08da521ba5ee14ac40c72f5764c00baec03af9d599a2da525bc30d19ad1c8cc7a9670fe41b43f05da64f02ca85fb8d9265947684f7016b3d21bbf2c0c38b9f01279867feac83f1ae0f9a874d5c60b04231c1267e6b562958bfb26950eb402899fa085c14f0bac8e7e2d8ae71449adb7a4c0e38dcc188dc8d2f88757f823393765f9ec4daaf3cd032753b6d960e8d3ae9e15332a7ebcbce007f06fbd7c130727d678ca691fb3e179214db50b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f7e1e9977424efa53babd10956861b48d373e7ade21ee41653a6d78dd46ab35108b08aeddab6b07c9527f11f8c617335e6afe92bd1cbee7396056ebd80a87e2ef8d96010d40892d0c669e149533b7daf1e1359b0feb18d9be9ebd2f7ef6b0e6d07144efad7e224cb2213c1a0600e450978e3055073249339d3b718f2b7248d38f578e628145091cc332243571987e9e4b4c0d7b4a543f52355c6b6ecd1bf4cb2e5191f557a348b7dfe7466c036b24b1173fcd2c212be4eb25493ab35d118aee690cb77171d11c0b609dba02536bb4724d9aa243e1b5062754769a86b4ea4b57088eb797b16c1581b1820bc732e8f027382607ee8ce6ea9156cb59e6a890d4aa73b51b1f90436f31a59636eb361767871602f464e2270aa27c929ded8b4c5839c3cd79be7101cdfd73b33501aa555a4258145bb2ef79c7e7cc07394db1524a6039407f984122b5ebd3fcb7052b532ad16d385b68c925fce91fcc1470af9dc05be75ad1e73c8080e632f33ba438d4e9cb4eaf7f4079b99d4826b3db88f7bca5295ebb12d0ed35e778232442ddb26bd46684cac9c98f8e7cfd57d75ad03e1d5b32b4d7254098223eb36a9b325f13f1d8ab9c858d367f0f3fecc004134096978a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000253e65d3de1cc633ed68a26fbd44cfbcb6360c5c98b76bba9c6efbfff2d03bf513ecd97766d3228fcd023ba3b045ce315d26b056745d9c0612cb4bdfa0c69c30c05f51a13842acb9591f5b11dd98da90e3e850f99c69d94af8474359c45915cf2e52c2aa0c11601aebdf97d808ce07dc9ee4f7e49b2a49c703832e7df806c716e39613c59ab8321c4fa8307a13caaed874b7b3472375a9a179ad9f19e374c2cf84922802efa9847d5786333c090309033d44e3cf17653500a31fa4dcda393df8ef5f1f55883b46c6eab7eca940ee64d4a5c9ed70c40b5f55c712d72b5de8e277dd9629e01e8a39aae6c4d28467d2d84bf203174c280d5d2fe656a039dc8cdf4a213da38825277f4025951c1bfc637acfcdd0507881057c778624699a9aa60b3be04199b7aa2bdc2e2fb7a36568995b46f8fa5272647d90f2eac6f7b287008ebeed9e393a748cd2dfaafb0b0034ded0921ddd2720f5cf47636db74271077e02ffbb881bec0acfe9b7d668398033c3b81f86464fcb2bfa34820e0b4bf9cb9d7eaf87f16a7b720b05e65706667a33dde7d96f4d1eb6127c12f617ff61f0e840dff45e2d45dd8aa48dbb23b61a04c5bbb1c7ee92d9f3d6f29c43e361d49c951891750000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198557c6f16298ffd2a52826ac241747973f6671d014570a364ea43ab8c542d2790f10f84910a9d728f6f028fca19ed190b7000f80d061f12ec076b4e8e9ba35b545102c31b17b6fed9baaa43c0f8c33f8164e4378aefa7df77e6bb62c8a845a4a60112cd07f4b26f31f131f2275535bb9aaac9deda978873112451e854cce93b70bbba0cd00acdaa1605e6d86c2bae61b75676a1675f9cecba9d5a58d22a1f9949bf91aaf45cde3d5e5f816074c9aee7782c7aa191b8f8a0fa44ff567cb7add7be50062f129c31f917f72c667a692352fcdf58580553a66926f78be22c84f8695dee8d6f8fa04c2461575ff18c60fad2fca02708a7a26905992256c596eedd6b53c270b83d0d17e86c11c68de8835fb071845ddc564999d6db02720438988fb48d245277dbad64c20ff53e988909f3890a421b85a8fe181171e830fc2b431ffd173ac690371b14de5acf8174b75c4876b87e459f549c48bf69428274b16584a845bf6adbd1cf0c5fae1022ff3ed9ea7acf4e712b85c5c4e68c5753cbeb50d9df1e643e296ae188ac28b4d59788e2b9a0297ce7f88ac6d725e04c58c6002ddd64348cfb34ae794855188fd3218c59d6c38a786f5110e6fb2b98a7c8cf4626ef10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208a732e57ebe6c870f365da813aa583f715d6d54ffbcee1db9ea8d496c2ee369bb19aabae7e1f8fe5cd736328da2717929599fb4e72b67a0de2c78dc66ee21d4d6b9e837959fb13190f2681768b4fc81693fdd825319ada1f8ce39c5fde289bd7152e1516c99cea9867d687f0b30758e6d3b84ebd16ee7b995b350afb9f055f12092fd4eb7469d9e287bb01827ff45d92113f340beca6df994e8da3271d1d506479223a7890e3d961de499b530c8cc306cd8bf5509b951c83c753eae9feadb596df02edfc68d595a4a9b0eca3ccf2817348a4919c57f8c6ed2801dc3321f527bd257729d156162795dbb5119e3a0a6082a10b10ea3968693e60de0b7776f517af6a9560654960a5fb59dae99f8d80792ae30c91751ab7ead2739ce8dfa430f094adbe8844721c244486613b533fe0d0d012a7003e80eaeb1d131ae92b2a615b1a654998396f88eafa3ee3512e380e9789f118d4e5b74ccc58b8dda14a2ce1b0fc28edb7e561d6bdcdb41799a1dbe10be5a4a76cf2ac372a92510a3075c67f10e36905389535d5f77b62245710d0feb995a6fde77e4de4c29148fdffdf4d07b22adf847f2492055f6f3ec99bb66de3f438b436909bff01796606d9d098598b5f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000822057effd352ebed590b9bcaf5d5c78c93c684a86fb3832ab266d070799e1d90bcdf222219ae629ef72a69f32201da597d049de1ce053eb8932afbc46ae60b3079db33684728a44a0a40974a64dcc84b4f3dfc3211258195f1ab58637a8fa1785e9aef3ecaa3212b94e3b2e6bae271c44ac65e6c122ab7be259ecafb213e86eeedfe1466299fbeedc788da55006d36909a9a3026a8908ad37f0cb696f18e3272f1023195029fe2538d95d1cda55de1d031347967ccf3903fec1c96406acc8ccb8f5a70b0bb5671ca1569ae9dcac038fbf3176be2d9b97cb728436ae9ef85e322335fdf096e16797951d9672a82ef696191e8076820dca57eb7db2f36afe0fcfbeea87de661a5b665a35c9e0b1a56e8bb527bd14ba709a0afe868259ce2529b9cf149725c05997009c04451a8d0ee7e0bd99efa7cd246234e3db85f5362ba9c3f698de4671ca1fcd5dc311b998fd1376aa2f098caefd1c87c3b09a1c8e87ab960f6b07d4aa821b923bf4cb5eb3c00c1f99393da5e60f8697897816b42982e2ba2975d5c8a0c82af0201fed862580f3d184edd11fb7441144a1b6f23963d0d59862547e4b80609ab2d516fea2c817b20f0ef3e56cde381268f3993bebefbc90ad0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3ee7def36143f259621017a25ed7063b359dcf9515b65b1c9613476d831a5e8b8853aa4e9f52c7bb5be391baf384221313d1f7ba71e17cb45ce3226eba6d1739070afa45c087c1553cb0ab55e852e44b0c7a390c1ee1bd38334d4cf51b1c2725e2aaf9cf4f618e0085c354142fe87628fa7fb831a8bd1115f4632d86627c23a5aa88dd8025f750ad9377ebe7da9d4431c44b7cea3e2a2a981926558142cb5d96b340d443189d196fd1455d3b5828c7673835743e399169e5d0a9ef6ab02be3068203d5460a7fb95e717afc4b8c1b908d206b57651db66fab648c10dc5edd748d98d094d88da296943fe79ac466e103fe8bbd43c47a91f4ce8ef6d0a4560269de7e6f5709185963a87b2f94f3d9386eea2f8c7285b38ad5d25fad816d3c4bba00958f6c9628f5763d99262278882812b457ae0d66ec15b60c346913a6f362ffa5f5e52c343ca8c5933b9767a8a19c7e4e9e771890cf5c392a9b1a6502d9f57316a23b2ab32277160c1edfd2158f6864490a67b45e63d4ba287de3dd1795e8891dadd1729555d2bc9d78cec158f0ccbd204dd88170f99060651d21d36d3916003cdc947710ca5a93f82769247d2778e1be98c667a31c8671f34d15e20f66b90b400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e5edbd3d56b3e6b2f970ca3491eff41edb8fe664f11d5158c9b62c05375e2af9c513d22bcc59a407e2e44b9878f25d60fe90e9aa0ffb0d8edc9ce8a5e2f21b9e7056e8af570fbc93b86a3496c3f1f2db12402a6b8a8e58174b431bfa5b50d279b70bd76400be9f90d83849cdb9bb759428a57a15970b4b4eaa067342fce235b190aa3286e90f448dcfc2c77420636631cb08613323876010120753af205972b3ced021adc0bed7c174117d350026785f0f41a9f5518ab043ae44fdf198ef0c34944ce05608a069dffb5d8ef836ba22885d2746739eeb9a46c956f145bd8c92c1a891f2a52f2c71030b688aa0a52235974c14e69975ac43d3da476c466d029688b875282fcf4d173320f9b15033ca1ac3402f556e069a4cdb60974637c94634d8e98d0d10bfe434967986c33ad8c892ecef49e031b93a9afccc19c134a58d99f50c6da3d38ba8b99bafec450b7891fe4d6342dbe6d0690a879213327072553c7c032da5a835e7d4c228b3d5f078a9e105c2f60b4823bd63585eca90cde1ca5db8be3af1de5ba46c8d711731a1083a28818e1c3dcda32c3db42a5bc88834fd67ec73e7b1ca7e080e38b243280840b45f15e9e7d3482a9d9ae88da78231683f4520000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000183e9f182681bcda0d7b191f81a2b5e51d1e93841f546e4aa709279bd133e45633f792777ea9e664559331f1ad665677a87ad61e48ab203fbed4a7b78f77dcb48aed761688e2c2fb04ba5b0c63c15208de7e1b0bd63bee337766c7b876262815afa580c5f181dc0b04b07872ea6b4341afd28a8540bdd6b1eebf97d6b3e71ea76842be62ba1c03e84a9f427881d0eee79d83651ab4400e051b95b108a75e140483bb0dd6d150ad1701e26cc4bafbf5b9747f42300156ce0ac58ac62d2dff27a3b321290c06258d5f226d4f2148ee5870145f3a0482b10c6aec9d2a9f800e0d7ee4923a9afafc7f63ee68ac9cf3df7ef7cc66fef28a969904f01e2e84d5dc0d1b2935268da9933ee53468fc7af4a13bcefd79e10c6076bfe9bb197fa31e5736513bf1410b4a0d032af1216bc9585fa4ac4562920d671bf2f4fca7d677fdebbd7fd6c21bad6639d6d5fd98f6e7a780c890a7fb7ff38f0aff50a28f5c01c355da0cd465b284cdc4b998bc4e7aacfef364e8d0788a8a28c79bc04a973fc87bdc668810707f9c57eb6eaee04dc01da5d46a299b349d0c1101f08ac5e3fe2542f8d0ba8a6c47cee18b6fb96b7a656765c93e8ba46f492c68eae6513443817061f42b9a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025d083415cc942cfa3a91498d622c12555721ad393b011092a299f36d3b3376fe3eb3d6fd784a7ffd7ba3bed0f6bb5c9b4416db5a7c7a91b5ed56bb5fdc4e38ec238999f1e6a1e067f1d93691833bac08c6954eaa7f454f5ffb0779ce0ce32749aa2154d5102c858b3c257416d98ed1489273c50310dc429810cbcba512aa36f16aff4bb737109c9118f6b015e925bd6e720f8e24e16ae53477f3d0fc892db3eb1fa185e3372352bed7ac7a71946656481008f7c4c45f93a1a6f844a20f96861d0992751c50b41ee245c891f151b07e768c0bd975ea6f79936b8848bee29edb5054b79c7e86a8433950eb2b2a44898ef7dffb9517fe62d80edbee0f6f98d951dec515e93eaa5be96386f5806ad0f262ab510faceb8291bd46d81cb51a1b900fd0f797f6e92aa7ee5ecc3e9c4312ac87742cd2315f560b80f8c5e74ede01121a7c40bdf6c9daa4b27ee23dd5132f6e309c5756f0518093490ae0d74a07014eafe04f8838fc4b4364cc41ba285fd39fbb285c0e86573f89842097e0e273bcd0ea37f82d253b6d1780446733c5fd4c99e1d4a1e6c10dd63ec30cb2ecafc0c73de476a12f26fd47df9ece73a5a713b1048934056bfd899d72eef79dfe4c45af553cd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f7fb407908e947d195c2f37a51410f2c7e5c05c01c5321af59be3ba0e7cbed06713b894bba9295df1c12d93dfb033d71f13ccd2eafeed1ec96a77b97ed9112c6154cc9d510d009bf7989fd7aefa561fd4f0d2fb65037ca45bd519bb14ae0b050dee98a760a74e75c25d01a2d31565b0f9913d5c169583070122cceff295cf2483acae04120d08ffa54fadd96c85a154fd532900ce0d0ab7c45eec92781018fb0d90e4fc8ab237e114cd585bd69b967b4c98931e9f1f891c725c4c1298ffa6c6d9c70ac59abe27acb38d1710fa5315ceb97c29f87c042448ed8d21a52c0586069ee8233812282be9d6a1fab974228c9a366c0639add602c2c457c3cad29c29582d73e919aa6112349f01d34dce5b6a5a0be57e64bb08f2972f1562625d1f2bf8ca96a1fe1ea665a5e605c92106d602b327dd8dfa8fbee8b9d7b2c8832db86c183149cccc563121b87f10c7dbaa6367352f28a3716652f89091c6c4f36367b2ee46f06def75c5845a09f2925e9b263e4e7fdfdd58fec66fe4450a2c6ffdd27d0ded48f5db6e443ebb9029fb3ae61696476c9f6cead7976b9f97635a73cdbc5ef14a76693fda1cd2835a4383999098e7ca1af81f3f3529b7d6c4e70ce11df2eb1f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008df02b12073d0e615d7fa54bf0b758d06becdfd8b0c871184ebc922acfbb9efa546dee8c281b91abcb7bbb39169b52cdc81e2c46f9ff0c7bf9ca51f4add8b65e3fa8158258d55c2b13f27c939adf59dbdd7d7e66eee40135a649f4c2eefa20d4f31f2d686d9980b7e84119b8d34cf633ba7ba3cd9b10736dbc09ff86f80ddefc5147bd89f9729c121010ae9079e9809dcf6cdb2ebbb71fbec33c3c29e5218f52847bcafc03acfe764de529cc222fb1dba210ff8518485b45036dc97fac161f5394511890fe5fa49cbe07032c98e2e4384346103b4cfcb839a2fc3163869a70c0da3e0c89b9e1be87bdda9bae3fd161f5a50c9890d46a4a97ba6767eac194189a32a008c19db9ec5b7ffd27324973133cf38a34d688dd028b137480a8278e91c255e92735ff7f7f85f195c7ebd107dbe43179bb995de0beb97a944dfb8ff3f0a7a6bf8b677b76114de394848ba46f1f2ee3a684c2595ceeccae171b695730b5f8562dd7364176a31f2c4b1d1bed424f4349b6750894dc3262d8f3e9770c43b23ea209166973f46d5e0180a893d8b03e0bf239b837045671f06594fb94b3e7a869e519f0255b8a0c2d88860cb46d23824fca1df3201c15489eb62999bccdd7931800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008414f5a9f639e3247ac4a518a60a1eabcc82458652c4428997ac520be3f6fab878f9fcbac3cb86ae66eb73bbbe5b966d6641cd4901d10de899d85621b06169a28952ca984ff2aab1e81a8dae9de76a9cfa74b36e0b4c7a8aa6f4f36039ab57b85b1b2c21f3ae226cf32fe6b93397221e34a085205498e7a4c8723bd036ce9a15579795a3e90789d2ff2eb523b81ff40f055f7e16730c6bfa7789f014c697391d5d003d1929299214668d34b58ce4b85228a0e71766069b6e534da31f66bbd7b66f412aa20a873d9cb123ebc184e0d350b749f3d98d2d5779bbd3e506678ae0ac05df4902c8c805ba0c18fa8cd962e3928a5335df297bb10a4aa854a598d57ba4dfa5044c329e1547cc8981df3315d1e2c8359c036acab919c56351b90d909c54e29ab8c2ff8b34cad77e1b97ff6e87dc94eab12154af806e4cfd10d5b6ec0d1bfd24ff1bbe755bd7d38a604d552d0631e15225e94b7b4c4449f2159a5c677b845b2435a7c3229fbc5853a5c4257a8010087ff02717868292a94f51bb62303c2e773e760e50ab8f4dec120173c93f6f1de7c18864cf1e139588806511422a986a1044c83503d90d1d4217a373194998e15ae53fdebcc444dfd4a4d543f5cab9d70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000acc0ee30e122ba8c489a23712837440c3ab9ab9f1c680112787694384e43487ac25af4cb43e2405dfcc365136c37855743df70731c8fc2a2d4ab60c8960105a6aedf25a79dc545706f4dac56c036227c6160a174813c89b98def7df7729f9048c5b158c11bcaeafe477408a7c5d7d6fe9d17d6c72b66d8dd82d04b5a21a118c3730f0b691bea8036810f1187f6dafd31758aeee95365da92ee3db84c166c21eeb38d8c7773ea532e66deabfc23d4b937948074138e3dc057fd1af4b9f11f383418b12d34266069a494d81c796abb82a94c4f3ac26c1d641943023c80f26bc18be857a7c80f3a60804ac64e42da06f97d845a008533f59606d363adc6bcd0b22fbed1046bcb15a1ee7cf6f858522bb28150d08fb162633d246138259343a8bdb8e1db29e22ac68582b63d0fd8f0c64ef1c3ce555a3d7df6be7994a65a27b3238f0da0b899ecde9846b725347d795d3750f8ee62cebb424577a6bdd88443cb85f909a7e1f5a31f07a9e14d97790a5cc6149bde40fe96fd405ef03b449f7ad5a3c992e1a52475abb0ba7cbaf723a4aa3936efbfed1ddc700c9d47a1eb184cc1db681d573970a1eea2e27f60c198d52b517305eb0800ba1e91768750a9174d9b5c6d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009595d62227de71527967da87d8d977956626e36c44e398d7aa2450c5e2d6e88b2b0c9447524473dad98be8e49ff3351af3c18ed442d1152db909ce7e056c7ad50499adb1d452927407e6f3ad066bccaeaa171e52ac7377d8927203b606480f339a1f057a8fea55887bf1c675b78299acc2d1aed4c056b917732f473e2ecb85506b774c06ad1eeacc6f7ccb4242749e20210e7eff56561937c85fe0cc42636c7fb659f6e2c41c566efb99a1981da66634396581f2649d682600546f837ac5692a1642f5229a99322ada3190fc8e0bab67d96a8fe19c7c39e59116b30f206f2a417ae19e11d5a93d0ada9cb6c4b67c7e732d2bc30b82fba593c4e4febe650d95e9ef94b5e862941a9584a1c06b02533eac0e517e79ed32a788a7c56abdf1ea7d07e7e8aa81b04b3a4fe19e716ca59dd0b555fab6de0119e3131c7d3c3ed0d5f692b51c25eca53d05f9cd867d55e5661314c9ce625c802612ecfda4a0ca315b028e15ab4c89e05bcc9c00b79a248ce7a38e1580a8479cadbabf9853d070b19b2ca9a15ce5dce162a324c91a66a403199ca7c17eb2f6907eed077b1c9e107865d7b609d7eaccc2d171ef77b0c08c4bb1ddf9458eb67c2e040eb69d8d0c6e5458e9c500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002efbad4f9dff2498a225133790cc4bd8b4fee81565bb263fab2d9c10790e24305f049298f3dc0472ad9281af7cc8e6b46db121e7b3bec1c97bf4c32380e1ba28a879405a033b2cb6da1757e1c7e0b6990fd3a82eb886317b85a8cca82e8deb6fa41aae63797de8ce92490460b3ec96ae8366049d622ad052696130296d403e05abb021a4d757be2c6ac6a1d9c3168dd114aff23ec43899b0a3017369b45d3ce1defbf274fe37a91ac13c313854a6275219d597aaaf1a653909b34ac3cd3a4743212fb59f5b8732ff09edae9d011d3f2236cfb7a51a8ea9ff38ded831c5c6dc237f421d6b6f817cbd2b2db5638e215d764a3def12f0121dd11f55620e9ce1e805fc9ef888aa18d3a52e2c346c58586282bcd4f82299a2e20f139f8d35dbe04cd6d8ecbad4bedac8b35569ec98da1c4834832c6993c7cc33d4eaab87faa2ce1e6a5a107e21a06fd799ba133f9ff3684ae87d3e44615b1aff80c16cc72b6696f77875edfa68e67b63b6c11bd16eb55def880349e35519bb75961d8a20f5f5c58e48b7dc56946b5d74548261d7669fabb44ed249cf8f7c5dc4ee740cdf4acd6f2d767bbed974b2741c84bcc04b8ab5bd620f90aa6520008932f5c879131ed61a6b4400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002dd260887c4bcb00b8431682d7e17f42c94af5ff9078165363014c4f9da1ea63376e7bfa31fd6ba426ded8e58d32b292a560923072357efec9837cf90a26615da41cba36e25a2a5a4e2384bb8fa63cbb3140a1d3c0946ff2d3186b5d3ea3eed26f69315e28f255c3cb65682350ec188ba1432edb2b9fa73be634b48a3340cf938b20952e7c68c0e5f180ff2f759280211424b467cbe4ae1865b274d84851f9af15d3831bc8b3fd43300cf861586e9d6bde3faa847eb4b26877694e517af9267774b27bf984f01e9b31a142de349b0b3d528e53e1f2590cc999134e0ff40f5f8a8f965ac42c36ae0af2f6730d70da36f23d2617ab665c193107bca52f4cc374aa8b0854f5444313ee57c75277cb4f40b37a44f731684978340ac3452c9a54adb0fc12c61162062af27a11b55838da0c4b1b372eeb6ddd6009249deb7ad223cea0f595bf5b1a5da1c04f2c3da95f6db5bef88f216c289ac9a032985caf769f75089490ed96e9348e5c4bb246aa4484da099d97f536cdff5bf700744825e17f2ef364ebb2fff4ff4a2b13d5dd5b26acd6b11c75871f21c8128d05cbffced9c5e90b42412fe2bb7c0101b70225867be58998fb531859e98679701942d2d4dcea0106000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084707f36585101d2a43ccbd01a46d60d41759d33e7bb6aabdb905d55bee88c02715aca925867a704ad00d40a8ad83a8b6cbb77507a165dd1b610c4d56c45e1635dd3bd27f2f701c3ce088baca623f82a730ec37762d4b84f0e24232ed7d5331461c5efcb741646907c9da0259cd1e1fbc8c13c2089b224ca7eb1eabf92dbc896c3b46a93532df05740f359b9ec380eec171a0c803b5d58ed61cc50d48987cca8c43c30fb6aad8e72498b79fa81298e8e25b9dde3339e5c60e301de19bd009cbc42e06bc31b36d3e770a7494ebf1fbe67a6e77de7db73157bc44fbc08c618d5dc364221dd20d1929d6c2264bb0e2cbcf31b6ca3616b31a4277dbbd42f9bd98199b99f7d577e04eb8b8047a5a39401fbbbe74992d1f26e4b19354679254e6e340f0dcd277ef27c256ee8437f777ac660952ecba8de77726e26790b0fb1892f893ec1b0a2db4d837f009a6d5f0062b28e01d8269cbcfef3a5df11555bd0847b78c786f9c84b1396dc8878b91305a439f3204dd20ae04f785940ff5e66747b37928a65af5fb57ca9c1a89af3b28383f4cacebcb1542a30aba53ef1f421601eb521a887a15a38ba603cc1897592faf971023c703ae21885b4b0f3e5d90a26bc5a4261000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a3a8be34e67e2d37b54abe35f0475a2571a97fce784a29bdf191059a42fe78f515aed67e1b7ae6652096630f74a838b4955762d987ff6f992d1628e28c6fa20939bef1afa91678cda8c6f8ef054c2537d68074e7b560c7024dfa642f4720a20cc2d1006a9059ef3d037fc8f9be9dbdccd144acce161d545ba5f325e84338feb07872f70aec9cf125ad7f9180e238d2ba790b4d201e317904b7f56f30e05802a1819a1df403e6eed8b49558d91c37334970b410aaee1e02bef0379a406daf2a35f194d4ff8e65fd36c77e761c234ef3dba1f790a36e015ded7f29fb8fcceb760fb2c62124b1a0c26cb94210f84165a3a304a819bfdeda12bbcce49b8115aeb7ea0ab55248fef204f7f2186e100f72103db0ded4ddd53899d73b01eff2d5f3d69cff34e2936a50983c2153d589a6128b656b8a2c509534c6cda6ab7ea862d979e84ce56b947c4a3ec13acc7fd01c56de2204ed06f2f5eb2b89e6723a3699699d4942182967393ab314a344516ce97d6a91276f0e4ebad5fead7746910ac55b74f252ee5bbcf2eaf55dea6e8266364592a5a455ff51df6ab8dc777dfd0b56cd0f1d3c88c9ec6fef06ef8e9746dad935dce5f611d45a120f30ecf69e17e51779e7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017ad5124c81644e3f6dcb69409d66fe6c577528a5e7c560886e2138b4864e9b95c6960e2191629d2e35be0e149a7ba7240009a6f0a7a4e3c7bf917f18206ba09212c2b37c9de04c5681d7554801f34f8ddab56a7017844022f59bc57c32c4cd721932e7fd4814bbe6b7589c835277d9bb5442168a27aebccd3aa9dd84625411eeed6b2853db8eff34a33348c18f56c283247883225600554224d84ccd60ee21f1fa3e8ea7509bfb76dd85148e8d2aa2f2b36bd79b05d8ca13c2368a5a888a267f6312abdb3532eeee7e0beb420a38779fe9b275c9327806ca2a4a838ed218032bd2831c91bfe5aaddbfb45f8bd28faac3494f90ea0abd7b2dfdd57425ba06166333a63feaba1291d4b62e6e82694d7da436d173637a58b8342cd26465c8866f81485ec6b824cf8fdcd9710fb1771023178e2614231b6e1d59b80f8c4749a4c0238d825141be5423c32b7124abc339d1863bc7f6299e9f645f8f467061f652b6e1afa018c58679570137caf0da1c52795e1ee6c0d7808703641771363e366a60c5195cc16476a45eaa80f7782448a63235b129e99354392fd45cc03837493439ee01c1f384ce4184fcf50b909f89cb148fc25c4ee7f5084749217e0615ff11ab3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006085f27b3477c6c65857c310c7186755f79f1be74f5303ff934bb3026ead2f442e2737d33439fe384d8523c0118ff78c7bc5c5b10b8abb48fa5c3a11527df9d505c5a72387e67864ba6ebe9d303c311eec3d628e8c1217b41299116f3ca654c9a9c56d668c424b4d45cec46a0d07b46381f2a86ad88998d69fae5339eb5fafdd645111fec8b91b8ba6e5d9d1cb98a180ecfd5dccf3a1655bcef0acce0d3a775145817e161f0a2979bf64ce95fbd037ba697a7c8677c40cf713b2c7e2f934b00fc94554c09b611aacbeff57e560fb998ddf61b7cbe61598a0748df939e5c697d1270119712df63b96209909d521b3f64d8913d314b2f14439b9429f181b3c9b69c8d2d7be94e6e2e47878801ac5dc9fb6da82343adb23841a5a38fe177885888c772a912165efa7c3d24b590f63def41db524b3e1fbfbdaad39d90984d532b9c4b8dbdd2ef861b832921ceb88c656e1bfb2b032f80747496ebc863a3ce224719585f241f867dbeeda9acb34302808a9f04ddb7e2bbe75a2855cf82295551e3119d6d590c930a46fd3c7d624633939fc8daf7fecc3a79c6aa6cce63be2f7ecc11cca9dca6769eab5dadb7b4e821fb60237ce4c3a6a54c723b8055d095a1813aa3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096933f2a3d205f96c83a0cceb4bdd2740760a58bb5cc2a57049a61ecdfe3b68d739d3e2ea68f01949f9bd909fbd78ab3e387c1edbb2a10b0c8b49fb58aa2aad1fe48a4c6dee99da9803ca9c3188d0274b25fdf052933bfb361f167649de33467f692d62e4d641e7c7db694dbb6cdb8bcb42a3120ada6ac6641d654d917bc8278467c70b124ee467c60d52fe61cbe3b9eda224703ed73da40383fb31d5d4930c00955e5e5fba38d74b98aa8613b0f59882726d018b092a31194920bf60af6ad9f79f9ef3af2b422240911624cf5d1a7a8b63f9bf19af87d1197e8a9ffca6d5fbb9ea2e42c0541eeef0a6c25e19a32270accbf732c06b16406c250415ba88f30f3bb2dcc1d5451900281ccf8b71c0200f2de41c0474070ab9cef5fa378371261c45ee7b9cbd637e429acd5805d4ecc672acfc7647c7b0d1eda7f985cf2e0dd630f99febd4facbd5e43d4b10d44580e1362daea07f70777114a7b84a1ea6b15e67c41303fd7f5682f267dfda429bfa8908f3d8fb27cae0c1f5b4fc7fb26d03e9c79ff813c66453e2b2a84b992f826ff35b120b5af2e9fe5a7f789fd655bcae13a58ed0cd638207bafe7e7ffe43420c42e49cd921ae4125cee3fd5451a85a770209c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002da819c5084d11db4baf014448619e52fe20f744d9c6ccfefe491f630922f11adf412f14024cec4f8057ada8b5ddb788eb264b24317a62dd78c6807daefce32d1f3b0b998f7a0f6358ed57be6c7e68d32827335a28008aaa22500032dc4e1a8dc633f3fc4784f6e4d65577663d379d25d91f768bf65469148fc6b4e05e3bcd0330c661cc1c0a434d7d8c22d9e67003376042a41e7f885a2dd931aac6df6e3ce4368d3d9eded14bb410af66a14230c104001f8681e45d2c2a41fa1132cac7b50e81b025e155167c8488c82a9b719cfdc3df950f8ed4fc3ff94fb24b9c42178badf495b476f7bd8ccf54f88afa0db8acb552d9c3b37ae8b9ba805bb9fa8e1873e075133d79e7c960301f42728810c5155228d5dc71a75d41b23c8e17c2495b9fe1d2bada9154b69819ac97e48a42c4853e79e9fbf45e9d25b55c77fa29c731d7a332841be188dc429b5a25ca40b2a405cd40cc3812a7afadfaf4d17fa332349e2d4bf732fc92c6cc655484798c9ff20cc64d212a599f3f24d4ddcb67ae362ba6b4aa725a926611f1d9951a390fd2c4ef0db4bda63ffe9c1092fe7e756228ef9dfc2e3e70c178cbb4928a25dc0a6bbe43dd9fc55afcf76b62af017f0c12464ad5d500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cf9c0b9934c3e8c2b9dff27cd6484effd4f5fc6d78b9b02e551b271863f7bbad225423bce889dcf212dc8fe1a76c257d21f61a1498c27807a6be0306dc321e4bb302d9db97fbff493cc6af8605a07f5699eef509190484efb763a50ce1ad358bf3c58dc24fcd1aeed9d697ecb843c9e545ae9ecd7ff828807300c0a379803e9c4599ac89601806387c9d6b2b8bb0efad04a74409f815ed3d5ac43246311c65d2a2d030f6faa2a4e4a0d3944a455d3b40befcd21dee5d9a3b066bfbe8d901d4ce601e46189fec0aa8a1c8d895bdab5dd6f876c65f0fbf75c3ff8db26ce9350529fd53ac0623c4e8a5866f2169792961bd640ce9441eb61793b4c5db26ad646bc8f62e1c18bc9466fe90690426be4eaafee6efb85f79c615a18862ecf95f153eeb3e14f0629b4912abcb66b5fa78c29c0d5d70385f7634f4dba1fbf37fca76f08b466394c17039049ff8315ad269eca265eba11a2273f425573493b2848b925c2ecdaed0fe6bd0e6dd57fcd8bc740c8ad644175d47c216464e6d4215b800c114c9577b705ec0250bf8c183ef04e68507b26793c639e64733ca9625c223020e8ea53a39d9c2c9fe54a53683ebc1ac32183815ddcfaa6f22cd858ffe04869324ae600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fb6a8a924c83a3ad6daf36f2af701c367223a1bbd5d23fb9277946ef6c99353ec08c59c46cd3df2aae50fa2c980a9c9d223ecb073ff56484a7a5957f66ac1fc3f73af63c0cf453ace931031650c01639b7a7ec855d7070be1a5c986f4630770876ce90cccbabeb6806729a7873c0ea19b1da6b7943348d9f4bfac458d2d05fbc63a1f74a38bd1b36621dad7071d26c6dd6ce24e42b4fcdb410b80cb7bd99472e718951a0943bff183be6b38403e44420660a27058462fd7922e25ed27e55b423086d6d0982d3fd971ab40a8cad9ec0f50e66ffab61d6f9b9f0f5ba9acdba88b4fe18c222a5793fd7782720ee2facd0a08a2761d4fb1f2c0b349ef833cc5397707dd5eb18091abef54d926613adb735324671e0d974e362581537bd44f8f72d88283db2592a0cce8b51a169e8e9d60abd535a98134013bdcb1f304553ec6008da068f77871d359a6bc203f60f52ec5a9e5d1f82822446a94ebeaf1344996d8326840190f237c8fcf3f79d7fbc7ad4edef54828ef3a13b3fad4ed3058e82181f4cfa6a8f3ba971e194cec664e3e095cfb78f900d174084a61cca67e0a66299b72e42461a0be5ef609ed5d55b1a691f37b9b2efd7137735e8e29a8721488d1bae300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000de94621fca1b718a0eea21d24e2b1866f083ea9bdb40404ab16035cd2a55658a7e5d6f291b1e64b88854d67b51f801c2064c55b89b85b591d4b5673553429c9c061595167d083b8a0f5809322bdbe2ed35cf82d041374f99f7388a0cd735999ed93559d6a0d7789ec7d961463918a2875e07495a340128268111fcd1c28d1b238a014a0b6e68c427cf96920a19ca347314fa5db415c47794bc835d14cc184fab5f1dade2e264aa42858f7669b9d03b2469fd0c74b59bf1f78e7d038913a397b99f99db130ea79b19cf772e13a8f18325740fd3cb6071f8d7ff7fd58821110ef378e9137c8e4314dbca98cdd3c9fb68197d218bcdbebe1231a35f4d1ff338e69213409960dc21b97a7975c1ed0677078a2389347913b7b636c2dbe7800d39e381ac0716f68466f02569ece22366b906feeca6882c526750e326d042d3ec6acc7d71e9349245029423052e9a7db61efbf945786008ecd6cbffe2b11b5cdf69aa45db6fba0be703bb975cea59b3e35ff7edaf707d206fcd36d9b8fb87c80fc71e58769b6b80f73ebd9d63053546e3baeb87dc1b826203f730f8b5974616a02aa156b998d7b2e690b86181dc89e31065ee0a17ab9a002432b9b9d239ef2be0d77b600000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48400b2ed2701106c8487222eb12e555d3921a2e985f3fda8c51a9b71e743874feb103272aaa4acc927b1035d996341f484bb8d373a2c3c41faf21a5c60b392e6738167bb2e4f6367bfcfbf7bfd3b3b0bf7f24ffd0c64cfe6a8762a4915cf339cdc504eff60ee80f42a936402bd4655ffadafe70780a20f85c2f4860dc5698005a312ae1b726f2ab16f143a6d34ffea85fc9a019b20826201a2d17f91ec607a1b5ab189b762e10e1905dbda3b593f2b495f7e370affc5ba09964786f1d775959f8440620bafa1aa17f73bbdccd229efc4cb52c10989cbd4eacc731ba8ae0de8ff10111499d86588f2d29ef7cdc6b86160c6e4a25b7ace9f2465ae3d75a8c8615ec810b7d206ec44a2d55779a73d051b7b7fd462d1848e24271d872d037cf10bac1a2292e4108dbc26a3ba64b488e77e5d75ddb18462ac8bbb559c08103d8cf77a057136cc0a5c17ce5fffc9a7895e0797827137d1869318c0f6f40e8a764ffede85506a3d1fef8793d9c2409eb2b276455d50fda401a6291eca1bcbc3d0bb042586d1eb11d0c4909372f4fe27b3094dc46715fc92f19206d55e5973452d2ca7a9d4329b600f5bf2b95cc6c8ace8f6eb4c81db47a229ee8dd0aa346c716660dc525e007ee7e290e5af4be5d51b745759e3f49e86bed23fa7f5905b93080b1e30b41b311c77f497cf4e3362924ca2980b058cfe24dce6d8d1291237b816b8d3b1629a306adb987b6391c5498e4e37d5d78565972fdba25376e6e1bb91d6df424a7544d155773d732575457c19149665ef96ce6d3c099fcf645a640f70cc629b293f06711702a27d50e5f97913d05dd565f256c3fd5981e56e03c2aa98f3c895a3c1b9522fe8be002bef5d71f738345fbf0213e2cbe6fbba8f9de9533afcda0cbfe6d262881f93b5d317f23b5741ae992901274cbc734867f1773330cfffcaa6247d8da0cf6a5429e9c453602179b8e4f1baf75a3f5eb85ed76539d4230a4fe586506282be1a29aa0c0c308e5152f8e341a22e1328419188b0508a1cf4108f07b6b97fe035a1b7db65d0850454b10653998b62399ddcfdaec83c65646964bb1add999bc0259687f4b4e2ba35f0fa152ac51d0587e44ad10dff3d7a43f5c04f07c5b492929941e3381f2a28793ba9b4355179c7d78dd0f4bef42dc17c17d1024e7bb2dd71bb216f7e16c799bcafe84e6fa1e4befe98277261c32e822212e29e4f37b07152c6ee9ee7810c4c158e8286231cda9f50c8ed4660b32f517be22d24c0109d7ad2e8d089438cd19fcb7eee43d9b236ce6a88ceca3744e83a559c64bae6d467a7a1c832cfbefe978425a178cfb2304d43619c5adae250bd1aee6bad8492d6cdb270a9d3449dac6fba13816e1fd9c55a72da0226a3f406244fe746ef91591bc7bc41e42a7f774a68b4db643c5e0fcb5b5494601373e6f71154e0ce4ae053ec672b1022283d1c1842691ea0141d68aae3de691c3b863907b01b6a68c82cd7e9777352fb72fddd8b4879450cd01041804dabb265f99a2be46d85660b277d17e4dd3e51feed729b26871c76575c295bcbfe1c0bdbc2e60332c73b65d26125e369011910c3771fa3dd4d1846cf1c1ce3161779e28b4882e9b035f6f88692f1064b741a3291e5b4609ded652fa6d8b94b620334fa8e75ac53fae2d8d9fa23d4b717d40d61f7a8669842e4b36cc011bbd3af7d58ea60ec34fcf52fbfc062877113a6efdb02b332253f6dba0ec9f2f6e7a6dc1374a07177dcfed777d75a01410f1cb5be1b4260e20f9c80043f766d931177520e875a061ac9b47b91216cdd0f63b5262af031fdf99eb1a8c361b106a5f1bd6da43cfad5d974a60f0d7325dcc982b89e1ea6023cb3586f1a8c323b37737a3f3d42ed4b7b83c2f239ec7aeeac9c872c8148e332b4e5bce0990c5a7924fbe8c428eeb5b8c5b517ebe24958590a7b3aeb27530d42e13c206060332adad4183a4edf8d538a604b4213d43fa596cb8ea0142943f4622b288d3c9112a712f36a55f510614e901a63a96e4dc35fffdbaefd1c6f4650904570fdc1068f4483093f6893533169dd940cfd77e550afc3f83d3db6062b2c0145fe8d895f05c52f7c57e3d673c59d25cfa9609f06772793de9ee8f5273a70a1e6008d8eebb4d65e2f7efc2f936e819145059c98cc1cc873dfe0b8725f0a3be081bfdc88d06231ba051397df9ed4f554de7327f706ca18a7ab6d2cd9d604736258455f252e12b58812d28d8767ba9e56d00eceb3aa6b4cb43967ee024ed1cb218f1e0c93c754e560900d91eddf6b0c85f38f2feeabba4410b8dcc54bc3bc77b27dc348932d126337513503fcc18627ad59b287f6e4cc3f06ac9287ed487378c0d9a00a0f55f017826d9e3fee550bec8ffd6bf367eb52527e5fbc61e0bdc42921021faa6ed405cdc6be3c0a68d67f518f304184601fca072336920934b1f5f9c0084e484de448fbb23f4257494fc21b7877555bd146844db78d8d52c7945f6a6075e45fc60b84f7434ac9797c74071d44ab686015e6757eada72c75a894502e710104175b4797f94510a6ce51c51395b95ca511793a1bdee30b27037bdf2cb570c12ba03974112387ecd8ee63811791e5a667e97c52c645928a6bb9ac798404a0c43fb292da5e58bd0ca4462d4fde3fa4de1f5d46617276ca7512b089828c36a1795a1bef4a07f37d0d2e33a96066a157eba2400a418f5c12ee68f2f69b760d62bdc607ec8af1e7b50b90457f101de5807bd1da082ad6150918778af7d0edd0321fd85ca2ef9ff49601740b17a9db57f992057f0884a4e45e15a3602404373961eb1a84ed6e1c4873d91b51ab896575729dbfd67225f75bd5f10182e81dbe1111cf152318c7ad9bf8308e61c38eb9aeb2bc44cfc08f443a83281aea9bf4e89fc4010dc4e21843fd3f14db4dd7c961f3d580f876943d0e2219a3fcec46a3f266d1d1258e7cddafdcb73e796ff5c4e61af27a957b1cfc07db02d1b4cda9d365bf35423b59c1763e1ecc1cb67e3a404e43c3ee84bbdaa86e4dd75786624bf50fbbf39117d25079299832dc0d22714aa96a50776179979f2c139578d02fdbd7f1980c604a29baa13c2931b59d9b0e951b4c5db91a4d81d76e15a27eaced779f220af752357abdbc27f3bcef4a6a10e834de3f3f793eaef9349d0a9aa4fc84f6805bccd2b409d70432a32073b2b119707498fd1c94c5abd44906ccc6b891604f7e4976b2fea4ac3e6a087ad46df7d1ed8a4f4a3f7cfed30d45b78a34e796436ad3d8bc92d7100a494aff808810972243084268074250eceeb1dffebda1949d5ca8d1cb2003651aa2e8d37ade5b9a8190d8524ee8f874feeed023846db338da96d632b140b2e15aeb73c9084f3834c48f192a79ce4c61bfa9c3946f96356dcf152441ea91a37d9c65eb476cb99f2e438c82c014cd49b9b8db60427760f9fb4542a8c01712fb862fea95f78e73df3842fbdc818637ac108c232b28595d8aacd8e66fd1fdd053c23b05a7629ab1bdfc8ec545331148110dc024c27699d4fe0526447c72f683038df821432eb7599b0ab092858d034a2c4c3bcd16bac9b32fede6a11b4111f2b2745d8d9986204dd7162dff73700632834063cd1b6371e0da5e7ab49630d690937fce89ec85a0f8630ad1bf369ced4204fd55b26c1233335a10980db8cff3b1651927c417d306b702f441cfd0e6a1f835f662203f8e00d676548e878e4f72521fadca22e9fdc0f119d9896070ea7c4510391efd6a593dc4328a321a860eeff0b159b158c58778bf5e7923e25383c3ae1c1201ccf30e96ca6d899c9f0ef264a1dacbbb5c037379ab0fe02e579567ccdb8bc6061752b2db142141597e902cb1e28ffb7168f4ce1224e5aad3b28c1b63b6f8f63e6af46ae34526890e5730208ae1eaefc8914f3dca716bbae570dbd18f3c533420670dda0fb80d5c2c77c10358b03051922b454918c3b08efb6997146c5cdfb9ec7da1c4f08104e1d840879973e25080ce33e3a23b87426a20718a94926f538d225da011f87bb77ec9992ae962a2817ded7d05566e74d52cea0cebcdeb61e860b29a6f4f7cd6fa5794dd715fabe0ec30613d0f0c01b2aba6d291bcaeb7ed47350ef935fc8abe6e667f2bb7128471544755ed6163559a0c53e5e50d4c146e67f9afa36972d9854effd9e63eb5fcb0f3d24944ccd248e66ca174d2f1276f000944e8c71c31dbb066f61a6280909ca139dc62f4a1740ae23895eeb37233029728fbf296e7be04e0d7b4d27c4ca225f0b66c318dad0e7f92f5a6739bb1a4ea215a0d72b1fbc800257df515d8745817e17548cbe6a0486180f6bf403c351295ca153556e722c1c7c3f524677b4eef19b2f11feecb9ccac8178dcbd052083c503483c7de9b857682821aaabf3498bf2da208e274e51eb533c94d7b5bf715938e210b3a1a4da77aaeda045b9bde297342a1b3b3d3af0d91d4d3aae5050963be485ab8c7bc35eba96409a6b642137c14c7016b3ce39fa95d8b406dc3684bf96e67aa5cc8a68b337214c5f0c86c6fbcd283c08671d674fcb17ac40fd5a8f418a309ba29546be8db5f3face88d203f026b8341cbe81014f1939a0a33fcca6bb34899b96d8150eb3b43a937273f49a3d0202d72ea0376c7a8d7fa86e1c3115953d9d4d9f4efc5475750b996576f82fe28e6e6a28701fa875420ca760a3c9fb44cfda66105ebcf5ac4fac71c0312f5be029d1041f9be23388645a2e57d7976fbd2c75bfd4974dcbfbc28a71e9ae4aef41a4b1912ae5617d4c916be133484be0050ff9ec3ac9fff7184002798f440b0f3fd90c4a13507f394a6ca602242c49a2addb8838f13b82fcb1743edc030f086df03afac42cca9866a7b40b723c4d11ac7601d32565a545d62b2d154e7eb174d9ddd9cc4e0ae6c019f54c718113a61a27d137c68bbeab6af3a11d37733028ec18e57878370146ed52f33968cc8727490408e5a8767de0af44fa737f06e3f4a3243eb684a71ff27ed8d6a195a32541db146c0ba9984da7e8c232d3c30f381683f03afa034f09ce6a3e2f05886e6efda3aa6d027686688adf823d1781158907e36311c352642cccf6e62d943c69eda7830dd4158298c30c4952a902a0436b21e0652581042a164928859b1a9e8d8c21da5eeafd117438fb0c70cec445a4a4d7b802c428edde2845564db602560fc91fbf11ea935f30c01f28934afd46d72225399a6e17e83b26a1671516cbffbceff37aa26f67e92cff8cc252a75252e48670948e45515d0602c8d0a7409ca936545ef64b105cf1c907b74be5a433d4bcabe3b5402327bb6e0997dd5dfb9941cf1343a9a2aa91ebcc907939ae7831520b7fb2b504304e7b8200d2aa0701e5511b9692f47fb5d8e241d1881440b05eb595311e954b13326e660b393d88b9fb6f62f2a148936c809b473dd00d913b7cbb61b36f07b474cf4f6922a2a0d5086a75aa474546a727fecfefa56963b42186ca8e5f0970743b9919ec271291dd84bea780b553c854320ae9390fc200d392c49710ad82ac232534d7b20d175878c72f21e384b7e8ee7da8498b43567d3c5a59adc04fc8c85aed852a8d05161de4fc9861e29d671534903c8f88c6a4a744e5a8ff8738b87f54c4ee48c41742164b1df43aa5171f41e81e66a611c26748d63d2738c841246c59830c9a4f21fcefd3e7c466fe7aa0ab36415439854926c49cff747748c5dfc1bf8a8bef6b111d44bc76d32420746626fd6beb567352dc99a7e737f63e2f5177e95fc937c40475b3f4d6e95ace5e6ed151e92faa6d165b09b931933724385056bbe05fa029003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000042118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000420d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000420a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000420b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000004229a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000042141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000004225e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000004212978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000422daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000042189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000421159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000004205ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000004205c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000004214d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000004203db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000422ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000421213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000421ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000004214fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000422b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000042305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000042280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000042223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000004217a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000004208858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000422618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000420f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000420e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000042172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000420b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000004205bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000042137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000422e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000422297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000422608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000004218373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000420422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000042204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000420afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000421998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000004228d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000421da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000004221d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000420ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000420e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000042107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000422f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000004209726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000004224f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000004203c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000421fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000042205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000004225110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000042283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000004221cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000042094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000420c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000421f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000422421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000421fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000421bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000042304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000004200000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a078606358bfcdb8644d8647c112ef3402291d07d3a4055fc2a5ca71293a3fae1b04c3f74379349ebab8c03ee691237e19149dc522ef0540b03202e3c5f3ee257e66f1d69673696f5208237af2f2f77ec7744097b6c01a5548424c4c0aabca8a818893dac33eadd1675fd067f43aa3c23d68848a1db26c92d00f4a21e3e4e29f1048ee9725ea05a73da0030b704c5f7a7a0fea80442b90ca451a56ad6c5c9affabfd536127a1ef156fcede93414c7c0579976a759877e49a7791ada97021a3fcf02f48cca82179e4f6805f8ef372cee3e3bb919c6031faa4b0071121b6773d8dd52e12e3ed6e5ff064445e2fccd9dc0e25cfdcc7a34abe00fb77d8f01d23b8a6a84ec1b22b0dad87b123b6d0ed7a01af2b6a821008a00b75e872e4021c9616a517e4602ecab7c627e3b587858d15032a771827eee12e106ea7d9e8a33b00888c3556716aa85b3db1df126551cfaf0fd1a727afe18ceff42c49b66099b233562cb9e83d86a45963b7b258ad22412e21bcdd60966c7bcf2a823c84103816f7a930d2eb10c2470009429736e1da0ba98cfa170c25886bf2c742ee292efce753b4b840e7998a448b5b2e207cf22ebfe07a4fafb8e462085ad554a7f796857896b0a20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a690d9b14325a86173fc59bdb897929d3f0ee671445f2eb626bb30d2b11e82a5be42309e6b55051dbe405d41ff3b894cef1a9121455ba5eb872a1ebd8370bbd7117c35207907e7dd6eee933add7de506508885a00d6a6137a7f84e6a0f5f5338159f17ebfbe43243886a3363599368cef075ec712cf3e10d1cc232d43325c6ff34bf68afe14dbca23b68eced31bb2db8d43b71c112625312316571336412d9ea3f663ea331c7e6ab6dbe75b5679586740a822aea7c133adc7a8f9e7cc0110b73f4966f6be9dbf1feac09f91852d8cb9fbb414bead39bd252bec2378da90bfdd92685e8c34ea44d8a8dec70f59894ab35a117022cc000ace6e4857b536f1e07dc594997e7fee39228d0be908a895ae3445daa88240b9a5f14a62c1c7211ed67ca6e34ccc702aa39484e486db0e5887022ff6988dd60a87f3f770d4a0bf3f6f36c4865931b4656b09dc28ee577a602a0b64b11dc2a4bf57c9ef7471085e26d96b0c41bad850edbe2e08c254ae57baed6005de98353f6e107a1d4be7701832e127af2a964c8592111a02ceeb32d0958ef101484b6f7f1d4b19c012b4d8f636970e5b3808c75d0f32079c1e8793e06115c0aac53eb8fe8557472c353d445a9a6e3a800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c847920adc2391c219c5ca899d79e92f05646a756ea6e3279561b21b63b621312dc02cf05b8f8104344ff7835d2a03f60828b76e9122faa1ec1651f7a450ca7d78dfac40402a56cacf142017d2a945488ae1dbd23e4e64f36bd70e3753a66f88d782857edc019278c62a20c2c2c601753bf8c5ac3ff50e37307bf0b10b05250cf7b2e2a5cbf2fafa748650b98867d5a2977b946b5f49f2283d73a49b555f60d8de438a2724c2a5968974ec9f6bd80b8cc8f4a0f6f505e95b06802af979ee2d910727a4884c57cf1a3f170bb0927af78ac8714636c963d3d784c3412710f20da918a31f570b1ebfc9b95bfa9f078e51c0e03c5a600f5985a44cbffad38c4322930827a7f64adaaa57cadd7ab2b1741da9528be67c856a15d0e3043c4db350671c5d90ad45ed2552b3069dbafc6d844dcd85fa394b013b14c02d1faf78f1d97c8bf52325c8ae089d8a5b834960af23abdc1c6770c55918414ac4095d9574f96b39341bd36afb5444d0343e71a6528ffcb37d5ab257dca3f41f9a9442e657cbf26dd7a6a304484f8ad7f3f7088ceea01233afcf4d13053659b4ef42ca7163746dc0ffa886d697095fd466f05d390a5b74aaa954cf9da53900efc63830eb2544bf60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000806873591706f08eb993f887d2b90392336838d2a9ced7b7ae49db03c62df8b7a12c15370efe8d3b99734fbeccdd0e19a508cd8182cca6aba7668951db9d7b98352e709d3959a09e38de6d69d7b21bf2714b72bd67cb71fd2decf008e1bce0eee38a92f0321bd578b3c239524935998ca600679ca101dd442fb3d5b7550ce7ca9df0a6e7f9b5657377592d97ea559b3027b95f1e648b5fe39c986adbf033a0b1a5606bc138e178c96c2862a23a312624754a85b1cf8ab45741a9e96993b4e35323dde87a7adfed1708412ddb40545ec9973a69176367a4860d5046cbbfd341fd715b867c648e202f502e9a22900457645fc45848fa3eba9db3582c01a0682b600b0f0f12c740d03575a834a62f89321ced37cc6c4481b583cd2226e8268d5c3c8b504b5a37372e66ca8ae46e9885b8e02c3023adb945b07a553cd81f3b4f6e37a2c576af0f4884f4f1253f4f680d84d07777ab3edae5d4354ab0290fa740026c0df182b3301ca3b2d5c04ed94d24f5009ec5a1a2aef80defa12a0d89d9749754a48ae5c694ff2f21e546a7ec0383d55e4d4a4dd9b6e03bbdf78f9979d670cbbfd501fbb2a7af6161ae18c0483430ece6fed89b522e0ab4d20a4495919dd92876000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001381194446dae0b234aeb9eb68fa5ac4256c9704db005a97e8e92cbd7a788841314a37c8785fb094b154c040349f63dcffd530947994e3a557aaba3915ede6209938617f0d9f51304b2cc2374a405eb51fa271bf9792be7a86eb7ebd0176a104911a1f1769559073ae2fecbff6287d291f2747d8f84309df311e80fe3d3cc8aaf79186e37bea124eafb3c334be63a72ad2c90bb454f696ebfe100685d5aa33de52789684b67cfa121fac134de83e2a68c937432a5cb63185e7e1d29725353b7ba239767c50c4077c987a259d609ec658bab90a6f6c176aa5ce1008e428236664d56fff78f82d46ae6cd8ae804c48f02a765b2020f037a8af6e6bbaeb865f904ec3abd94cfc21f95a514129585ed2660a176e3f09112781cb44b254b50f6085e3816726dc9725ec566c9df0588887fdf82b57e0bd601dcde5e215257264b04d593d353f4b998521b70da4677a9fee7482ab6341ae7b51d8a1fabb09fedada573710c747e5748d7202454b4735b6c49082802f8083ffa93f8faaa270d43a6c7c00bae12aa5318bd8aca88844cf40e84f9ed9f0238266243476e8878a8afdc632d3096f46354136d8660edbab2d5bd22265e7a38168755dec45cc387317016b4ae00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fe10e69482d3c6ad673826007f2343a18d9351e8b2dfd9d1d57860f390dfd5886789cbfb3cfc95078086c084bff798c4529eff0c35c919b016cb1fec0fc22379063f38145562e282b4461990a623657b7d28ace4202a4afd2fc939b91537af5e97d806d4e59dc58a6b225f23ebc9f7537e5ef99359326fd527c019aba18c54d60b62b7e599dfc25830989c23342807ec179bfe13cabe8e914ce5790fab7d37c1e8fc0749117b305b33b8db35add55d2dc45836d58e118cf7d3e80b9c18b57b8f6e085208948b6961c281a5a86d311a9fb8d6ee47acf95d7e7d487bc6cbd992866f8dc4e04e586f43b283a6fe2ad4ac9b22c25e54dd8d2bb11aed0a3aa46184c19502fc3eee11b4268df9b58c2767fac73b683f789a02c9bcb78df5446f8e22541e9680c730e340f0e14ef1af17a65f8d4edec425873adbc69c51ec715a3ef162681f49347f19768d2832d56e52af6310ee90d93ee40d5f392731fe8ecdcbb6b3ca65dd548a6fc7f5776b16601cf2dc8124c5c7a3e2df89f73afe5dc7d1580ef69982731d14063adbaf9e8c815baabd60cc6dac4081921adc5420ad9f730a7e25c16523c27ee18881affb8926b1f50827106c8f4e90d4ffd03818595d0b80ffe000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011794ae15f7093910cfc63e6e6a6f30d26b1a769d8df04aa200d4250732105758abe3e777a28c2b0afd76926d80c8deb4e49a4e37911c6585b5f86935008684fee96e9340ca3d7195f8e93a72012696e9f8cf8df5dc13b4b3a0c429f0e7b0565aeef9898f5d6a4fcd698e8caa446e81059cd04f7c5b87585b33f171a72b6b5816c6156c6f9548c9989d30f7396deec7e1596d1aa917d7277ddda224f7a0de13adf4f809d86300acb4b26ba1729b3162ad46357ceeb08363b9d6817abfa666475291ecb48c92f9f898956e30614e5eb5711dd2efd20dd6b12d7fcbc067f6cbcbfa56fdef56adf9704b3860a05e5563174f9d6ec665ebc7a67c1d19524cea158de70c1c1c7e955c02cc0bd84755edbc33cfb441d57d37d5c5a2a9cc433fc41f01cc8818bc7ebf2ebb16f9efe2be1cdb4476c829dfbf9889357f0c1b9c422d32bad47ea1e11e26875390293f2a40f85229f47395c912d9f27375164870fc606efdf123022d60159774a76e32a1e8ce552e52c164d10264700f4bc13790e8ce947e807937315f1dbb219f46a6570816f4490271132d86f63a65f38799e03025876c5d844f9b5f58f26f01b48ea6649ba8652ae8c2daf317c0b647db44d80d8c2999d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9b01717a4febb6de869f3985abcd6b58ea92e2849528265cd36cf721c0d40eb30aa977fb6e761854a36139dcced97ae0b999473f45a1c8f2b9c4531ec0dbad1b920e352076c8bf77664494799e0f52dc302e11e34eca516fd897c9e1457628b223339638153132a5734389f8feaf4fe3bc222d7d33d7fbec1767e3d2233f225c25e4c1ce0125e5bc375d0550650a6d3af9cc1d3498e55fbe6dd7a7f0e7457e7992a456eea83105b5b26c439af2f29201c653c6314e61bf10e1fe4281334a22a8ed223f750793c6a227461a5d2c222a0f49f4216df73b523b8adbdd32b503bc36b967da84a6511f6370b028f79705db214692590051abbf76dedd26ad368da730a873e370179f2c218e1f2d17465ecc916e657bf1963501832f3ddf0f000a1449bc2ccbbc9b12cc71d263e9ba1706519de9d8b5f7841e2c15868ec70f970fd4e15a45a52f6e84b9b7fa9654f974c0418a6bbae77bc06edf651ae1c37c3f61429d72faa546fc196411881662bd9d43168584b097b5bf7c808a645e56ec701846e9dcca5ee97cea3dca9b0484768d81bf5b127e8b9ee73ae1bcfa956f7d96d308d95d0772de844d7ff4da257a67827703a3f9b7bc4a65d9e8e9f36cd75d665058600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a4fcffb9628c333caf39cfddf1915733dde7496b4f29d8e67b13f1f2ce07dd5ce102408d9a98ef0682644abaa5b073cf7df64892413e3f80fe0a8e84c69af00526fb0608a4465ae124d5798dca8babb476e83409ebd467d044f00e50340c4f84a3d89de566fac65fbe2c98c9e1389e3940891bd96049af4da01c8ba8fcfab8ac76e8b21a10f879f343c69ac635eef0edc02cf42de4a04261c8223b02a55e32e6aee70d9f3f32abe477695d12641d66cc1e92e011765326b3862a4f5fa5bb859fd838df1e59d93512251389a76e28b041124c1d45446cee970ea83653a279f41c7c09506115a9e3d25f94580ea33855d9d62e8a139fc469a8f4eb78188cb9b680c1665d4d9bb372b8cfd93a1a34361a58afd7399acecf67dacdd409d8b1c499b8ce4977196791a10c654db83637f3c8bd786c31bebece0b128cb61d2f2f5319d981635c6082aad4f0c2601bb32495e857ee75ded2d1a30a31e23c74d4aef137d8f988b2d7e94fc624f478561dc71c016cb85423008264d218c362c6730ed089df176a8ef38e9a451f0cb6a8c6cf00ea3c438548007dbd58d98bf1cd0bf647dc2e540655cd1f04f388c24fdc60f33655ebf4850643602e573f7f85470f1fc8cf40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000248b1394d000c5b94957960259f8a768775b1e47257eb49725c349345d2f99686c567a70dc46624190132a0e234edd50135049f751213457b53a0628df5bd42be6fe588aae7ed81f91d632e8feaa361c5b3ce9982d8801baed657b56036713bfcb0ee0691864ac9262670966ed82932492bca072ef64bff07c5c93c8dd89189a6fafd8e1eee9e09fed8a39218fe76b869da31e9e225146b7e50ef3dbecbdd27f076b336a253a0f2e36ad3a64946535414163e4ec777fbd6476d25b37c3e071b7f1fb53d9c7c901da6c87784a50ef5b914f306c9593e6b21b4b6a002f5e5169d26839f299425c6bad8421058df20f95b9465b84a2b3f436d164817745c4f090ceae657f7e298e8eb6dc49e5e8177c375854eeb3ed7066e4889fda53d898f73e8b9eebc12957b51edeed18507e320ee03b28a049788afbf4037bf24c6a957a054df4006d90512a2d9bc68868ad8cf6065bc713e273c5ebe0059007cf81222ea66b6a68d3f3ebe56662be425c1eccb64703d36c09e19086ad4ea5b20a4e928d0b1db8ce684b1a80be431389b68603fe015e6c38e62ffc2d473e6f0219000acd11c99452093e00006324fe2971763fb77328b1d8145ed3f9d90822633006eb181417000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024cb5bc53c5cc6f163380bb9cc130b5be428e78a3be58d909d5041be9a23f6028980acb620649ae9ae36091bfc8cb093c4dd0760e0174f0a347815ea28e1a7c68c94da7e83b95aab727a1051df8785b289d7f6350d90f199e3db069c8f7029aace36e64eccdb66e9fd0ddf90da1e6971307646764b9b2b163127b718289b0ecf1ce098fd671f3fde710413d44cb3c2c8af4eaa549582bf77fea7052fc867809d999664efa6db7f1d5891540cd95660a0666d110f75dcf1c2b12289c830fdb9d37ed26d9b396a36a17518a830243ecac89e8e1ec8f09e6cf3ad57ae1d732e09d94f6f65e73ac107d1521ee5bea39c6777e957eed88e72692e8fc0a035241322afde1b4e032aa0818cfe7c66b5aaafd149738aeb3f01334ec6851bfc1704e0bda1f0e461a62696269535373f6bb4d18ed1ee13a6637285c1f0012a0e3b624021ba7850e24b55ad81475c74ef793e076a305e4bb5a1d8ee1ad3fa0082eb947a9aa8d509078da10d310a08518251e663c21c75779725a682f7dd54dd9d279e9560dd49dd8d0b55b480578de683f9f4d8769766d29f88cac622978d7e51c8f3b84adb1e0a8149a41f0c1a90d4714337e7257c521c355d90aa73efba17fffc2b5e936e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000967956a93fde521721602252ad25ccd996ee3436665aa84ba4884f64dc2a7ae6c6cc52d8cb72c0cf98f2cf366d96af313ee15ea093a8cd424b6aa6b069193ebc33bf4e2f3209f1f8a969eb7215b5301c52117a696f4044870b8fe59d70279044d84eccba0fb22c1443e11c70d97116c75ede860a362284f937beb572c31fa5c4f82c8f4a57824d2e551fa289d74569e496e421e5ae65052e9806fe2e87a2a8b0e0f9b7d1eb7ddbb76ddd3d427149d9c3dd415065b1527d0f3e4fef0c937633b027af7953c6a04d21d42d39fb18c0148e96b1e923b2faf016d6d53e6d24cc427990b285a96ee9abf5c72a421c820c2813516d9a3ca777aa62d6ab1f77d0090540fb91c1b8e807ae9aa8a6303aa0a8bdf0ea062a2942c8ffd863d0363bc21633d91170e0d7a5917156ca85aca2b3be0d37233d2cab6c44dc846c29adab6361610c89a9b6ff6685e808006cf90f8ab57cdffe6fa4419c4eeea0ae49960ed5a66e32e3c7f431c77aed55e0ac3419c19e6507f7204f8bcf0d1b7654a3e7336854e55b34971f50dcdf586914862979da39a035f28eeeba76d2a0c07864a252b6d4a7441fbef5f72770fef6243e578c3d1df8f8e15adab27985b8ab4266b8bbf3a2f42600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000521ee7869d2eb317950b350500daffcf64f0500e36d4344af71e54c9141df60323c785bf8d507cf8c386a1e186ea305623d889019398fc52beae4be6b95376f68b22ccb78a425d6f77e2f8e14fb5fd3e66cf3a643e84b063a23c715b272934136b32b61aeb588ed7dcf3c8db14445341bde5981103e8b3bf2c43107a383a0338dcbf51206b535242a0f81207f04c29da421ab256764feee4521e894a9a63918d3c4bb6de4fbc2cbf67792c91595b18c2ca6f444fa9206f548068cd298642ac95be8de81f35f638dac621197daec51902ab50360fa8e9223b5e29121587faf7b31de83dfe1688b3af463c3cb1e175728a54d2cfabe562d39093aa98d931bb8252130d294ea3d80ad8c5507773c6f6d5c8ce7a6b863c07183c97d831b38017a25ad0534a3be638f0d2f6f2f5bc5498b5d5429c2ebdac959e25f0a21e0b222d0209b96529e1486bd64bf545f86a03f37be15c5154661eff964fefb420ec1946066bd57d9972b40f0f215e426bbc12a37cf97e8c56c827bf7961398f1ffbecc3333b29200c1ff5fb9e3cd4979e87b548894f1c2c73f96b3b9a4bef41c98364ba0a28b94b9e2fcd97f5e2198db6156ac3f5991d533c65d521ba335ffec310d348fee0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afd4b3e02c58250886dcdb0b0a8910906521247879d6bd8014980974efb3660a1ab34ced2f3ec33e4eaf3100985b87d6611dd773f2277a998a6eb9c3e67fb1c36312344d54757b52a9acf388fab08976533bf62726b331016a7afb5bb2d61e53bf03e442452ad508862d60d80338ae1b0927bf674d18de56811591c0c09a3ce293b7fb92b9145569cb644e9642ac5a7e8ce89f631f5df9f342046ce9abd80605d6626653bc3181a94428f8167d39f279982a84934f8729aa4b9b432318187ff5023c7a4df37cea7a4835ef8cbaf508daea9f6a3288f378520e9106c261822130307bce638f4e51ba8327a9078ee946315a4b6ec13b05dbe6bb486156a8998274e5df4802ad520a00e747075e58fbdfa44705f76bc93c97f2fe55f074ae81c13d80352b2c32c202a28501be245bed67c691994a659ca23107a60bcada3ecbebc1db4ccba37e2985d885d25d7087236b4ac4e34c1b2986c557a53b8fb43aea8129e9d2c1b3a89f018b18b32a5e6c839771b5fcccbdffd2b9491655666aa19c0d13a7b9ad5aabb5b59c31358470fa6626eed7e83037cdb18588a273c5c5fd67db10ba6b53cd83425799a543bfc7bcdc74928f30eb7c0d07ac01a5d92a559c9cb07100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f3d74020e645fe814097f24baff4faa8591a6cd597b277b70774bdba828040ab0f0500afbcb52ac7886c17378c8e6f9dee30232f7fe4d26e5411d3a611b8578f8264fe7267c18a4cf85c9c233280cf7dafb06996c01eee99c06a3d8f3f97052e28dd548b3f9941960c0b9e26c8728f36ecce57822b13849b3a04138ecde10d3d3d5057d1091ee7474d8a295adf38aed221a8b98c20887c362e38188ad4c04777e28d8c76aae4e1152673d6486d0bd0b26a4e05d8e1c2f2886c80589a694a5ce04272f5632b08efa1e544bcef603d39ee1e274b9894f5d897598380c59523906122bc9b666136a46f5f6782eb39d83f6a3d732f51e9a79b50497d48ead3b2962ca4e1b3f675259379fb673c7e79b154302fca82bc41271d500d605d11dc320da8d922f2d7f34eaf167df0295c097285767217c93f3cc27479489f7a241243ca056d47e7d2fd3f5426aa9222ee5833a1a45ee52122837fe5019432ad7b02570ec5dbec32915264cca95f976336ed3dc149a4cd77729f4a3b31b5f16e0ae0a0ab4d5eb7a5157b912cd7a3fbc60f5ffb99ee2ac444c614e9ced98dc717280011acaea88b03189a587c9f85775c3522647e6a9afb05c99c9b662a8e7b781ac9ca11c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b669ea3b11296030d507d7d608c818ec1cd5c5221f5e99760075ba328a9aac12be4400589fce0e08affbdce87417b85cc5b17cd4b4a613c19ebcdd097aa770e5d4034da2f5471c9eba3e1e42004ba044a599b01eb606e130553c4a8718138bd0e804289c360b88a6015c97e616cb4c950dab4d55f1f2f1bde0162ea5d9d34845a9218348083d519c93f15eb514d6efb8005300684d4bb6adb76f7599e506aeb374ba7c74b8b25a1b6c4e4ac68dfd176c4e9d4e42608b36d011f7119df412d77af2a4be58fadc687a8b9b84e8e8504af5a8b8927646f828937f6b2f1429b709a7e5c6c9b29202682e314c639dae19df33e7b8f6c7ad9947a86882b2ab2df6afd84f77db842076a53d43f3f7341313afd25f5128eb96dabc342757972d957a0433670b9aa2bffdfa9cce2a46af904589f99b5993fc1f3206e7c928bc3cad36121e5e39ea679e02ffc9e4d72f25dac4f5909ac6f6e83bd4cf610358e8e277d5956dbd3ae6d207ba9ca721d4c249fe4a77f7943fe5da39e4b51d3709aa54bb72476fa20e4cb8e1c8324298f544a83762ba72ef9453fbfacd866ef457d186a042143fbaa7cc0aaa75989c1bdcbd3752c6aafcd915a6b1c5388e2135a4affdf2d0329000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000543a6c3af1d2f48117c5b5f432ce0106a5cadb8babd7f5f93e293fd3ce26dee0165a5760f014cbc11384ef9dd399cc7f893ca3f4e630ab387f64b88b5fdac5c902449420883074e9f201945df27c0fa5e823c95f1009ddbb1f504e2c4cecde7c9ee4446343ecde7a45cdacd1e6d074f3db57bf18ac58ac2c82070fcf2b7b132af222e9f7db1415b23328e00cde5193a1ed353f5f079887c1496a193b192229a441a1f8bb46def76350eb4aa16510c81b685d38e1fb4de0ba433c2af720c98db02e2bdd1d6b10313e85e0433f75c1c80adcf39e4498f19e8b98f1beef93ac6683e42ea65a11af2474a8cd9553b3dac10a22f91523e631b617f9c5d44656729903087251e7e5f29d2d5781c806252809ca21f6a76f99d4408d4ac920e1b13f8507e441c70d4a04b587146a9315093b718f60b78ac4cccb8160f398144ecf9cd0b843bd1848c4c22a1875c5da8e3f5db94fe309405656ddcbdcc39443cf5cadd8c1f37af8d4b54bf6085f399b6f538b2d74a9779ad32a1791565f862c2e3fbceca5b2ddd3ae70b142c5ec891e763790a3a8bbd997ae5c1cc96fc75731b8708cbea0452739ef2317cec15aca1ec91a56febd6c6f5a063e204eeb66bc9510c6d18f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102b6aaadf14482997aa379633b1a9c2b87044510f2c9ea35a8db74e09327302c57e204485744a367d17ec49d026f88c19cb58ad93c547f2b3f0f96a4595abcfcff7a4a2faee0109db407ac2575c41e6e2ee54a78b215fe468a904c9932258225e9fbeb47646517f703b306d90584dbcb64241bbbc3516fc3b274ce6e77a63a6b0211885507d1fb412e7d52a7a56f204f30722de9ef231f578c318d41ceb58eb0e782f1915629bd5445c04a8c9315840e21a5b8114282a2b175685e272407823eb35c1d5b1ce0f83787c39c1dd7cb4ca831dc2141b1df6cdc6787bb039484d509ba91ebd08a4b887b5646b37f58749062faa2049c3ac7fc7655ec7f7ca953ec1bacee36b63a4315a21a7cb9878107b447577475874cf33d56c8a49de216f76e66fe9078bc645fd1a090250cc4c5dfd3b72e224e2a8530ed249d2541d5ec0b225093a750dcd5c854c5d5db63344e7e373ab9bff315a292e389de0d657bf59897c25d4c77555bc847ee23d4ed118888f7788a05f889f347936c827b09db63b9857b276218c71b3a52d63a642b34b763651ec94aa715d2a6c8c5a8f37d18752bb9bdc52b42934acdb42216cdf8f0a882d86099dde0341d7e87850a05174083871fe000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c9924870cbf8cd2c02ac5d2f817639a0299c5779647be5b31fabb5d09e3f9d709ca7f69281a206e96d99f024e36e39e4f3ae5e726689cce64493bfc2dc80a6148814048eb54dc73e5ed4c1b1364b9e642d67f73e76c6e44dda9a5dfe595934db1372c53516f70846e1a87423f508cf74d0ffbde5f02907ffd5d8382bc5cbc37888f061326e7f8f42c2b615df4b6277c747ed7e41ea5ada4c54ce88744f6cbefa78b9b8bba735043899449022e289b88afa8586611cb4a61777cadae250a19246e439b2ab4a098416457db6c04cd54d94f66aa5a699f8b0b6174f43691af3825e9491c98ca7c33ee21df92c679b615ddb4132cb4d9516849cedb0102a341a36db1b90a741dd0429f15029bf1cdf9d48871098b7fa81b300d28653eede840422343b45ef354a2a72107e0eb14b151ebd45d4ceb1bf8424166b30c6ef670356b8da209d279e9d1a900fd8bc966744d99269d5e1255bb18b176f7d1a66afe5b89f9caa09c03309a4969b6cec33a49a32e3932697e5603004fce17acffe1add63fec40bd1c8c2aaedeb79aa7ed03d972e89c2ba51b20ecf1ddb2ccdcecec6e8eb0f33685c85c98ad7d155e253195e82822364a51b8ffd135a34f1f860fa7787129900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008660927577cc4e493577f88bde624c5c11e71804751dcabfed3bdd5f32880a93e1161395a5274a3adb3ea9a5951f172059a19149695bc4849fcdc9626b46b34ad894e8f530acdc484bb6987648aaf54ee01f5bbd7459b0950282fb1f0f39b7e4886e4dc283af1a80172f014f6ffaa2a45f897e128ede2b9b39a7d79b9fa45aad3dcd549dd234c5090ced0b3357ba8780009d47b9023fcae6451fad4aa79f829761b4df85c581ec3edf5f3eda26f14f79d6dcddaeb7b85ea9ad46503ded5f344b7ffa7513556e6228bee3e597d685d1415506eedc50be009878475601bea1b000d4faa2076ff64ba6e67e5d320649422680d2d113a5aef0653af05cbeda395548631fd2309c161d23b4f7a886ed900297ea2c25c2b93e93d08e42641b9385f5174f011202888f601bc4260834b7d00f594c9e88c3340ec7333cd0eec4d26296a2ab44039904f42314ae636d6771bea8f589059333d3b1ad10fd1c57ea5ce8eeb18696ba712f3938fcf4e1f6db393f81ce842618d42c2458151843bb02214238d7bf543792201f4148be2dd7a20e142a822aea36995786f15686456738429970c55f8faf9a0c53b56621ce4113063462ac1d3ab3803bbe6e844ac1047b700faa040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa9d949d1818b758a2adf5d3c548d354fcabcdb1d8fc9e3020143fa830750e54384bc40cc9340d0b0955506d191bf27f18f031bd816e4f73d859d635e76bed5ba810ad2ef7dc74a53c845f277222c84e370b7a18d72e64c7f9211cebbcb119c764470683f6c1df80a387a6c3237c45cb382efd53f59cca2199fbe39230f81dcbe1a1a81721137bf16fa2732ea1cf5feb7688a667f1b5f444a423b1506af7e3a13eefab86fa049e1856a384bef293929c88bb83b97995b666b19d26c0b209d80c25e299811f71a443bcc351fe15fd54f98fc620b09935df17e85f6ad7d99b33872d9404dd60f601cce047bb4ad8a7ab6adacc11bf35133a1e837d269a9c71b8080f0b3788ba894436a75b3fccc4d46da8816579d0dd7e5ca69e11e64291d1f3f7b6c9cac4d40f7ed938681b74378f02d7f61d0d0855cd44bb996509043f1d3419efe0b7937e1c7548e50dc090a9d98794782f964e2b3bc5f4b77d767451a14eedfe360842d35ce432eace0f210743d7ced36e213e0794a8e8c9b905a7f85e862ac82201bd43e687b09bcf0a0f87f47270c7c332a953bba0d394f1c1d131791a3a1286e6d7495cb6bdc2fa4b3865d9ec12ca26fea72809fb134fd2387c44134c1600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f720c00e424ff8c06fd4c6846c6093cc48247bdc91bbe00f93fd1f5ad455ba525cf64b299307129ffcd5ab203ee0fb827e45e20c7e5b705eb39c0d84ef9d87b16c983bd49d4da3f1108c61a76f09752d63cf9e0e60f21b30385dfec38e8f50033189eaa30eae890a64eddab824d860ae1ee09959dc171acb08ec3e3ba87d99542733567f3cb5e124d7026c005dab73339900297a6bdcdbb4dd98fe4a6cc6b303dde244a3de53cad24b46066d4de66da18249f97585b453bf8ea3c2d88c49a6042a17eae41fd6f8f3de0cc0201b0b8843201b893e88670bf19966036b613566d5166bd69d5dbf0faf98f83fbde5ea03769515caf4545eefc14834202c24843f61ba124058a845704ba7dda229684e8fd80ea62017927f785ae7e22a9511fa9b0bf60d5cd80e9a39ecac36456805448a304d85c464692d3eb4d8636f4014e8ea08d3588b908c2ed403c6fea53a632de33986b66869c77a9d731df10fc54e23740eb896d45e0997303c43fbfd7f5a0b01dd72b8fb01d94c7d6b3e40b0b0d697207b5069567d33cf18978611d0377735306591d4ac411edc2a0f6140ee368d1397fd6a1d4cdc0cc42641047c2d0143169bafde03bc59e2f3fdba57d0230ebad0be9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081e7b30e6a3d7efbd88290565585d90d753ad1d4c94cc2c927f6041ad989b315313039b9fadb6d6aa5afa6ced9945c2706f087a75ffd0a41432b1be5db43e645808b3e1fd49a4c98fab542aa327d31df522ef08de693d56109f6ab9246b4d3100a20976f957d3562e43772b69669a1bd5d2a049f9c9f2adef93efd2e7ae41ca22f80c8c1ee6dd048afaf050850016e57e5c57bf7ace5d2513213e22a3a8e713efb77a6e857f505b53080fa3136870d378faa46e737e70a2e35ad4b4e700deeae09d6e6b7dda2780b77ed7e90d3325bbb9b98b54d149186b82039fa94f19e53df1ddbe8bc6753a6c5b2d7e2ba5d08f8086e008e58ea87794a4d57eefaa912624a735ec1042d49acaf341069c40792ea1ab1226509ae24e20d4459eec25d766bb7de9fd2506f03b95ff0147fdf0f3bc6b9b6537b77cb59cdeb96d7eeaa298b76cde73e151a636b7acec3bb27c3ee8e037c047fc64936435b77788642a51016a93f7b7e4b4733e99fd580411c4b08df3a89612179d9dd7cf0b1f4f0e5a3aba9c7c18985eb0308454e2d2bad5cc9c297b26274f77c3d615b76e521879dfab65b52f095d6339cebadc0c38b3188986d2fd1826c220a164c9df4b3cbe747315b3d16330000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3c0d45ddfe24cab1df06041867c44c98a61a133d84cfd7fe33f6dd6315ebccfa7a0aa7f285124aca895bd4dbdf8de63eb5fd64f004aeac2676220724ba76cfb658352e9d6a81fafef9149b898769bf3e985ce7be6fdb68f4f08a773e0ae7f8db1cd648dedf1702684e3401b5205313f2ad09ec6121c5f1b17b73370fdd8a236fdcf9681cdcb6e1b5bbeb8e967ea61830407a78c96144aa1ed3b021ad14b8c3c5686513516cc9a065e9cb77b8c8b52a97366d1896f7353c9828e31acbc0f4844b24f0a78ec13118efd1c2c07ebd310f29edfabcc1e6777f5e49de2c661a5829fe705635ffa056c9e27a0141805e939b217870c3edb484c37960fa856aaa3bfcb766e78c870428cc1fd4182db831c1d6c76ffcbeaec98d5b5c90fa357e1e930f21744e696ad3d3d002adf8b904cd881b93b6823dad71bd61e5dc297cd325d494f25084e2ccf9e43ce680ad392e8099d476e62f9ce1c89e824d5a2fb38d5b59e7d6c269d26f49b6e2a639ea6935d1639f0fe5bd4cda98af6aab14726d2b37b760ba9ebdafc75a843600752a2986e85dbc20fc5bde1f3feba9a7db951ba88e7aad5370aaa10bb200590f221546ff82bf507f01cc01e5b48fe343b698fb499044d1f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009703023a61c473db00a5bdbc61afca1131e2997ba582ca9cdc2f7740c941cf0c67795283c655567948eff71a669b5110d5436859464374c61d65207fcffd5583e65b56570bd27b89cfd9e029fa11549988d84bb832446182c12b0746a6885c0c065d175918e965040e61b994ba18bf58fdc122d5ddbfeafab2eedc2f993f2649e8a27776967b695a7c1a69113ff6145bb19a689e7a7fc97e46d7654da7b11f2cd9011a916ed4d0d185f484ab890d3d83a09e9d477f7c3627d50bcc217f2b7acdd7d95e845f654810be4ccd17427b004c20557ccdc0345f8a7fa5fdf22caeb3682bac742af6d7757f74f3d23e77fa2d3c4deb198c35ebeb71f2b60752d6eeaed6e1c445bedff5ca9998a29f1650eefefc7a489bf9f74c59c5ebf1f783d00acd9fb8cb0b74e6fa2052209af216482faef0c394117363d8ac9751c1fa7b0644b67e617157ce4780bba897d711cc7f8bedd3bf8287a6ff116c64b9af9a9d13d19be32bc6246315b81380da8640632afb68ab08b78d5044cdf791bf9011b435e557f3d931811f26ceb51fb72b4afb30a2355c68416321ffdd9054b506d90408aa03f85b04ccfa1875e168e9917eb718e1c0d8a333512df61dd01d1736716a5bc794c8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093e12f939f7cfe3c1dc20cd737f1ddddeb6b6fc2873ea611da5e0bd8de980f52043aa964b0c1556dde4d97db9be7f575e1481a33d48469f9b908730c50abdcf5fe01fedf370c8dc46136e428c60f4699aba7f3a143019d870dcaf23e8a6b821c1e1d680d037fb78f8891a230de82d7f151bff1d215de7bb9ee50509cb4764627e28d48e6ad53c1e691f53b63bdce63fc83da4df679dc58de10111e684d1761a350a4882b100fa54fcd4ed8cbe3850a3ae0633a59b2885a6661656acc69eb93db9bfeca58c6d581bfa9ac61f6491d12775b813fdc8c066cc476331eb88ec90a5e0923a50789e1848574d8a5706ea7464173b56f2f9c616000733e877c797b826778cc7477a92028a51e790ef1e6943cb1b6bf2260a355d957e4d53f69cfec6cf6ac4341370d8e69b8ad7ef9d4188f3c99a650ab9110de46e6f6688101c43c3c220c8fd76c1cdbf492013c58589714a7ba87ab12e49d81c9601d0e77088654ee3be5b3a2aeb8a54c78bffb135c3df1b7e0fbaf8c4cc2e7c08fb55d6a48fc2a70795ad4bdefa29b052593611fdbb7166f24a05b16fe187e39e418054b7c6af4ba932d6eeb4feb66fd5c26d52ef8ce416162926b9a9fdd7703ac6d1dc38a35125c33000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016e74fc57bbdb4fe72c41bb547abfaf159d586c0323d2a4853f596490cbe5d3120321f33f2635d661526b67deee89468ba09e66e9316b9ba2c634fb220ec7b59cf85d63b9bf1193df9b03b09afb48cf3a3dc809de8aff8f715064a282ee4e1fcf15cf77a4c2ff93aab7ce5bebe0d51977abf8620fa29d16dcfbf693bf2a1dbd132414fc899cfc757c088456c362f412d70881395239c4f9247fd8459e22d488d334639905fb8bd01cad55041d7376e2856cd73ea5e81d45de41a8afbed3540e778d3ed57f8ba80e9c1a8c79b182046416fea61c9f6d0e46b13ec8d368f90268581ae10749f0f4c81c49cf49d0fd745c32d30dc4d4ab223beefa64f8fc97ad95d9d072188758fa420abcefb353f966f85d5925d1e2055de06a92de618ace88b22e642ff8a1957bc239d1618dc93332e2f90b6a03d18a07c6b3861d50e0158819b0384615f0a0d11b3843aef34a480bfa2d3d241d2b3608664d3d1f2496201beb0027fa0acc0ea1bdbaf981379f55275ce67521b7ee234ddd1f5261a0c1afb9d8e1b62ff47012c2ddd569900b101a634cd6ff237d4e297afcf4612498c465a273940506fe9822dae2401fb0b69a4bedbd08e3071a21aca70e535c996f7dba952450000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000892ac334bbb9a27bdbe4495da806f6d29da3c2a5f9e24ab0bcfa5fa41f74af090147a7ba322af3daadd5d1f4abff7c7dd824341402f52b127ac1b7c84f446a1be3f431b532e252a25b4580ce421334077cb35560b90a2cff95cdd5969a58b0658992097aa2b99b935e36eccd9176e1fe31fd41ad5b12033c8891b7b0f7416031730e4de7fb7613848dc5dded77e4904b0248ccfc3e1d66c17a1cbf7e910b017ac055038f191b05214eb272f85aff35f313b9352e8e881bd0dffb9e0d63ecbcc92cb3a79930b5f771bf7b171e43e64a5d5e9bf17645de529a1a8aedc3cf52e0495cb3a5bd74bbd1409f3814cb40c1ac90955bda0bd1a4338c5fc2d0299545e50af98db4426d142026a0fba3e337845ec0f8128049c7129093c9efbfec7d860f993683f2dcce82638ce7cef0dfedda7eae03093ce2b35528a491d01c7ad10723c92d82bda244a223bfdfcb05945d5056eaea337a58c1eac797c3e4d97c921db7e38bc5cbd92cd415db47f74025db5f47452b1787c7814a6502a20794bed57af7090b1b327b0007f84db3af4cd7dbddbf7b46f58014cfac4ab9329100069015a52f6c2300d6adff11ee05e8247b3231dd165189fefe2b22f52dae32416c875f93710000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2c61851333ee862b36edaa4b1bab57899f14b007ac4ec1a16ed831e7f8d30bdda16539949b37299721db73606dd30f777d8a69d174afc1a9fae41b068bb96a88974e05f6269c10f247058fbfbbf64c7dbc58a57bc37d7c7c8fad6436baac66f607f28af090e97cac0de60254e807114d9827c3e26831219cb36306bacf78091659df001764d20d8b116f0287c14cf37cc3033d9c8743f24a368fba740607ded67e00995ad5659e5d5c71aa6a3615b65ef3895097464531cb053d837c78f47db947621a92aa2bbadbe7e9c641ad8cec12c3b04ac6491cbd76c92e890efc428e70313ae4952c8df0b3fefd23238864fdb7b5378d44c3faf1f55868caca8036737b4f394590a9df2bce219d178db8274d3c45f23e25ff74fa7c3f29cd27be80ba0ee38c3741a28dae214168bbe2c549cbab35305ce8928074101425016719ec66160852a4405d0c6e06c9af99ea6670954d7ee1033bcf1f3d27f1cc9b6eade85b598ca003876552e1b8b780616e47942b9f3d9f4261c376bbda630c40109edea554933909250daff7416f8959f355884fb9f762e6e47923ceb37d359a4cbe998498004b3958000adde28240f2a6e0fcad1b150607e7522487263e06017c61fc5ed000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016792eab2f53054998adef13be53eac56496f2506636874a7f75540b10a268b52b0f5b4b8badd4af5f50561457f02dd1d4806503d19a992a9fe3e44e95ad430b078d68ece78d80d4d0b15e5cf95f6d5548dfd5032cdcb49a088cdc0eb4fa86c3202e9a9086b927bee45a6205b48b1608b850d932217658f35367463ef2f4a731b352c57709049e658fa110e41e2e828acca62a6482045c6c6fd8d721037131ebd8b9169b29e32ea046f8af677f248dcdc13666622855343adc09077f753e32474f4814a2b5f0eb8efc7d1b230c0a3e9ca74f50620b9e1db1bf4ca92a7ff54a8df33227d47d00f1cac48e2be4ef7d6a8d1d01ce85a1d66897231d7faafc4c38dd4d95b1a69d05a31c95d63172b2161930271f6e47386cc5a084b54f9a4f0d801fec51bf2926d8f40f14a48c83626d9afddbd41c598c074c96f8fab5a4a9a483c55408732ba929c7109b32ef3c68dd6bad608877bf4371930b2b9bdc28707d19cfd9ef6a3e241e8428be973b5d1783a3fa43c17c2c80986673a12c396fcf225faace9ecb134976e70c70b0e963c7622a0037be26dc6926eae9606c7eb68d5c05c01450f7852b9b9ece7f1a9a48d5b6461e5720943dfc45d4191fb3c552cfe65d6f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f29f6235497e72aa82e969505ea9d7b2396bb363747767d4cba48d06ac77618eb887c2a0b2bf22cc61ee7cd5cc54653e83487ad9de987b977e150a20aa03df999c169dad267b6d8741f14d824ba0a2d5760827c81a2524442b8511f24f79a91326b68e5ec1ba3aa120c5b58c495fa06a38ce0a88d59391dfed3c617e4fd11185ebceec58291248a225e1e9b58006c57ec8445445c83df206bb9097e2118df10192731617c7dc378d1f4994ae22541492f15d7e9d3522b85487f441f1ebccae70af98ebe4fe96fe372bb3a0029fa8d7b9ce875d6f8b934d2ac918bfb32e6fe696b68b4711e58a602fdc3807864a9ea81f78739207e8b09c9570e9cd323dd39fd20bd97a171e527bb16f47c6df87ac6567d955e228385bf433829457524d4cf3538f733ccb9b30f2579c5d7b29ace7571d92ad8221bf3480226e4c97325b48a479e701343803bf1cfc75a3c1c78a97c070b2e885bc4c66a5959fe98c716a37f96694b09cd5c99afbd2ca3516c23ad1e11e8e95565eb6a7fdcecfb7014b2fb05006db4a343f262233362190835211cbb37ec5001d0a84f2ee79dc7d0ab16efd93253296d0438648afe685fa40a62c2848f5f2d409b85e7dbd5eeb4b95a7abf202300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cf84009a7be7c4fd72c2f501dbdcc8887d85a28dfa4f169d04b806e6a595103d7de10c08dbef9ba47c9239cd5439c643655900c00effd17eda1bf98c9e6ac29951fd9550c16f75704cd6b4c494c082340e13f84580431d506abd145d4ad477d8102c2a447dc627063c3858825c9121e08e3188b645e4fd64250c4b9754424a184b1ea280a03cd86701b3767baa8feafbb2f5df0081a5c47ae18edcbf4e9d4d60d4b92bb429deb5828a8eb55fc33dab00cc9df95cb3f435fddb13516556c75f22d87d74ef7ab18e7f58a60ac0f93d1c1964e6e4fd35d310b45caa7f8bb63168cb423adf345caa000a0649b386567d7a4b09406b1ede88a143078b97c7d8fa25da46a6eced21f49ee1cd982dec3faa7aed854e23b83e4da5a0ed7bf4a9536409a6ee84753dd57b31b3eefd39020f86094528112e2c720d4730dbf7883cd6a372a3e88540201612312643bdeb7c015535c31d7d01c840b33ad7e7b2f0801c79ff79a226cca46bc8ba34c9dd9d04905a2f06dc31e6d6210156a4ac25880756d94d3dd4efb371d87845228ca12e4066ad72f037666a73364e5e242f24818b4df762b87779203cc92637eaa27194a113a265d7886db241199615130018604dec66b060000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2640bc3e49a0954b8523fb0516e8a9a3bfa1aaea23d4fd90f8631621ac727cf6235c66235595a42f33fd5c6f5eae77299cf96c8fd2d7e6ea2779fdb2f2e723d80150b93858f00e686da712da918bd48fc16f000c26c359b1e5bb77b2ff390e23c20161777b3f731005f7de4a6d3d7514a79f4e42851cf828caa479068b6802d4f9ea1356ae057c04cd07a1bfc7fc2df725c137158e0ab10ffcc50f405bae84c81c676ff5d170a77669e7b392d0950d8e5850faa6fac43f397f9690126fe0a643b3ad0dd62f31671f8bd7a69be290aeb29369a5a3736412dbce431d1cdb08101dca32651a83c9f3b60c7740797c7d3671253c79e2290ca81f55a368b393809f20b0f45cedbd54f4aa486445e5ccb38356934cabdd2eb2d6a6970cccb25199faa0e2ab585cda45672ffda7e5f5dabdedd88f125b905842e8ef1468894cb6d92e184aeeeabb56e02b837a1be0db77a87a92105757fcbf68259bf35e9499b35257045a2886ae2581c0a4977307b2d188e84680e908955e380546415d004383877cbf2f26858bbeb0923c78553879efc4cc32d4e1677c9a350914fc75d4c50f2c773afcd55792ea056487494d894bf214f65e99cf9c4766b938daf8a4ea1a886552d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ca6f8a14ff54f50ac9579aebd57c2f0639dc7f393fbbff48d7df476becaf717dcdcf1f72924925daa1ccb76c9a345d1bad8da0bccfbe07584276853c456652bfc54b8b3f8b123fb05f1af45d6829c1c1b69c753b5249c8de637fe2ba127326420e78674747a22af89b47ee881687fe2ec5e386c5565ffa2919e80b42b8658a7893f27aa2413540cf5776ed71e637aff54649448e53807e0381d616b992baf31431ca72f63f12520e27c4b54caab8072173ef7a9141f8fb3042f53b4fc6a76b3202a30cb536df867b1c1988070764cd1771813702e212e2e55e584c84688909893bfbfb53e7371771be4df384e242cec39766facff38a6d2521b075555d3b2d122e0e51575631f068ae666a8dc3fb6fbe5049b403a28e41da7cfba7d31c080fb2e92efb8611ff219bf70cebaa74d7f1056d07b745d3d68f32e474f2cf25cc86a3a89fef203e6a110cdd071f6265fd2b8f4e8524ed3621eed4079c925c8f62e5d328a296a350957ab4d4c15ea39cb6b7590fe37d923c7d132199883bf92f11b78aa2b3a8789a44e2a770315ae3419bd5b816a60dbe102bb9a570e9899f27df2258aa7388217b6e85b048915e235f3cfbdb00fe82de61cd1cfa62905c5b430ae5b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008682ef9b047c00a3cb138b4c89e8495c419b8f553ee31bb81e1e6f804b9c05c7d2d5b246c718686708de9667ad8fa25dc489be22cac332b82fb35db13b0ae96be51ce3149398ae82a80a82516087a6dc714ea733fbab2af4c577507fc1b705362747a65969f1a44d3b076310d8e7cfdfd84a3cfcd52c8c611be144d9740328a3e84e94928ac4416950bfb98e4fa9581c7f822f5df01b59957125671bb9d59c5546f41130fa1a08cebe7fac746bd3d553e20815d4e039da165b885ab2b93790a567f5b564a7d9ea448211d7ee53ce29ef9bb416a3699a923b0514e036ee2c7a2f68f579c1bae36b211561bdb053a0c04611cfa5d55592efb192d7659949c1592a5291c9a04fbb138064ba0a075559457e2189ea63da219c4d1bc877a3af3e711402d4d1a3de2d961978770ba461800fb00262af0d700fe48d3f6138c045d34a125a8f2baca0fa994211e12727b01c42e49f140e775abdf552d32118104e6bd6dcd0faa89a52c222e750c3a27d5b079deedd92f7ade27822b38476b5ff6a3f32eef556c22f493a5b140179d8176592fa44b58878aa0b3fc6cb75449bef8988b9746f948c3061df889d05128c4adf04a8a56efae593e2a11aa5156e88e4b0f3acca0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000880e6057ac3aa32090c4edb33a34b93ed726b3b08016f14444f7f42863d55fec140bd34d9ee219ac767e3988980b0af29a3175ac06613cbd2c696d098e0e8bfcc843de1f833db7b2389d8c84c2831a3aba14b6e3d6045fd6aed3a7bff3aa5a2289b4e93e919cb682426520b1efb23cbbb380026a439c8a2fb2b41d15d7e13454ee980bc1c023ca2a104159a48fbe7fc7211c409379fa8011587e0f5a9d0b32566b095f3031d82f2338253c45a10c2e8607b1730d94d23283cc4a3eede31d1a9c632ebf4c830fb943ad59f5439099e238b1153cd3f3d10602b35a15ccc84793be2d4adb87d4d78e1d77304808ecb10935382358f2e98aa270234605ce4bb4751862f59a20344bcbf61b0ffe11ac8cdde3e18c0e37681b0f355125ffd04d9ef891f8a6957be42461415953e5b662e6f891395d019885024191ca5da4970e02a520af7c0d82098894a2a5408cffafbc1602b8d16b29c51f64398e572d43147903b8954e0ddd7892bcb94a6a570c4d5e3464052dbad00e8408cc8cec17275f3b35823b567428a2eb0c97d6fa5124afe9d9b6d774909a0b74dea0843308cb60a8c845ea63ba5e36c03c8da21622bb121b81b1679244bebeb34900e2ea4cf89297d47f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9951118856abe25be139f5690a3742ab181673e976b38ccbd4ddc49e9e79d2b6ce98a08668c076fee0fe8203ac8743bc13e2f186ba35867b4c3b21c7e601cef6e5a614329a4a228c1cc8f49d65e8412450060fd7abba91228c0336551e8a61d7a6cbe9b4045f5edffe92f59f1d6639692a02828491ae57ee667642e466bb2da8862099133606d917afc710742713baa75fdeb22604934cb5657f3224e7964c2b987f9c009f2f49a91fd83f0f0a4a4cc5916224132a6a719de9e67905feb1eb14f41b92d32a3fb82d3a32fbc7ca96510f94bca05efb0ffbe3fca2b416c3c999347775a4cfbd186d3b6c97f6be8bf9a729197afdd63248d9e259472f5f6c2f0c811bf721bb4bf368c51db6b7e88e4e0db67876b113930bf760d8b14da896bf2b7d8e42d7a17bfabc0ebbde4ad23e6bb3329a6e14d9608d797ab01ec71e27ddd7cd70f224a7db047d6c16988ccd62a5e3ba5c8330ea54cff95aed6e5934b287f1473eac2a2fc69d20c237122d98379d9a27e4b9635c9f3ac8c1501a9ae403025d39c1afad1b352b90d385627cb551b89d5d2342e01ca358ecf746609ed0ec87e4478aa91897ce8da4760d8dbeab242450e988f6496d12122dc86ddef1082020ab6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085c31d8d666582ccb3189ef101b747f3d7447ec2e86b968bc30383d1dc7f37a0d42e7bf4a57ba0edee17aa89e4a77441b0797bae300a860c1a17c76d2da808a4d7559317a26e13f21aeaa77769290f6d95f383a96a9f07acdc8c7901680b47ca0fe5dae613e7d8d439dd13b59779f091be83d1888fc77e4d3e7dc71b16e017700aa5138a28d315be21be145eac90f272b06fa10a4ddf6e2f14aefb256fc421eaf3273b02fe673656d5245433cb754507fba90ce965f47107cb9cda5780ebecbde6a0eb48e5759d65bcb814a0779f1ee70a4a9d63972ef4919b0ef4843d31e512c5a263e054d6e342f4820dc09beec23400ce8113f6d3be3bc769653fb51a2fc4af69e6616402acd3375f50bb24a997441b0d56babb57adc97937b9fabd06f6c27e82f172c123d9043c83e7d223b53793318de8928fd896de63b793d19d4858a361a9d671e6b055c125a07ceccbf6c7e0cc640a88ee65aa8a448643a8dbc089e74e6979e5d4e8ab132f47f9888f985bea4a359ae822842a9a7cee75f9a4c770cfe80522c10d68fd334a47ec09300943a86f5604eff1dc7891374d9bb59ef39c3ea0ad111b6fdc5d71df3615127a598f12b573f729b09b180350fb0a56528ac0750000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000953f0e9c18b1d6518167fc6573ce9aafa4b09dc7806eed9e1568c4e9f003dbcdf8e61b005941ac2d5eb0921d6925aaa08c3dfe853a066378bb916a23ec3a69d160e7418a64b993736c5cd68b922ea43f881f3dbb843af7eb55c23d0aba8ffa40a18cbf83f775367b40a333ea68b900c0e66d6c68cedaeaf275ae00cf2c19a82723c9acb2043e69629714be765e76520118d520aaa72cf16aeeb35d2dca7d8d94a182edd0b691e63b8535e7a34d8732543b4e91da4086ac956131d9e39de20bbec80a912c08f64c27ea63eca0a2ccef2cb5abdbe1ab062a87382d8ad379c1a5ebd858007dced25d36bd56cf7201066db5841ff03eff494bd7025af9308692a344800e870d17ad9418d18d176d43f6b38c46549ec776d3d494e43f09b7de1eb1c6c251b25a8704eb885309304324cfa4155872ed11719efe0d3b6abecf2091d05215416a588b8ce1647480c4fdc03522b24f002c493ee65d8abcc81eea1c738adf26aee0ce4b398354aa3a06f1d3fc5d50ff2022c31f16d35ee16e21a5a5a84f3bc3c592ce0d11872303e8f875e7acd07f5502350a5b19ffc9c83e02a24653ae4ae7b11bdc76b8a377c747072f702f02e2a0255a866cfbea3bc79eebae5581e8ed000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023f3b12c8b004f0a22ed8c35600f4b03e1bece92bd5bbfeea117bf5ccc21fd74ceb2a7f50c005eac4c7c3d836fddbbe5d912328db8e8d74d2e44622e05a33e0cdd93d2683c36ca3445186657fe6ae0b964c7cd4eebeb6199f67d57d038c7cdc3775ee8fab65905bbc89b3bf020299cdb8b1e9173b792e3fdb513eee55cd657c7fe4f0d9007fd4dfec8ccd2114917d28f3b566c0c6e96a9d7dc050393c2abc461f4edd3b0dac627ed39e5c9d693ea7f67e714abeff1cbe830c71e691ced33cceda24f426bc109737ad197147f39cf60d595a5f5f8f8af49b11ac2b1e39f89fd179168915799f4906d9438b26be012ca5f694f8bb5109c216b455618b1b7e36399d7a0558c610844daa90ecc94e0e0ab5c74b2b6ad9500313516618d8be884864ece6249952b59ca67fa3ba124aeab40a5a084a4093bcef3da0fd4f4e0dc1db30f30c1da27b9db70a4c5eae041aab9557a65b78b42750b570f98f5bba9f3d6291155611cf71315973982a38b9856cf14fd33fa046c5227350399aaadde7a4d3a75a5c0eb5348c156f1798109404d4722868f111a2c1ed1aacc99111e54d00ffe3de84c05acd5f6404a8860e7650db9ac5f4530cf0f6e5f720e8022af09af48a7d100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bb1c88b8d091658eb9c9878a1c760e12c66d178a065fab2c71ce49bb80df41a83735cddfab55e7fd3be548b9dd0fd2db7cc114f671e0fc6306e17c24dd33a3d8f83210e611d00fc078bfeb0adc4bbb1a110db636ea395a133492ef3b48d03551bb43c911486fccb5f5f3d7d8bb402f84124697c3050bc612ab555a819b44a58ee68e8960c7a054c32dcc855cf74f78a75efaf6d1abd8163723c5f13d267d6a880028fb423729c88e571490c83e1f95dce7b7ed50e11b6c25a2852530aab96f4a82b9a9014ccab4eb5f22bf55fc4d3571a46cd490b95f6454db502db691b48e680ba37d280d93e25e086fd6741c7f6c667c8537ade4cee1836b397dc84ac86e90dabc01a2c341f9dbaa93aa07db04ac722e1b08489c6793d135f61648769257861f25e85bc4c0cfa28b9e432c467f7b2fc3f91bb2d4d00dfedfe7a389ad7e5d2f25b6fd99bc2bb1093fca3a19b44806dce2c62464bb30399339b8296427793975ec4a050c483842cbda4144243ae8e802e5ab2bdeb128df921f7359bb2a58aec9254c9bb54bfa43bcfd14ade7b5e6b88216f016f47d06237d07b518eaee62ba6561dfeaf4ab32911865b6642e36c9ef28cd7de7c614bf53281d373ae8f843a8b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b4f265c57a058113889dfd38fc55697d7f5b4e222b8a47265a59cec06bd3f68faa825528d84798368f7c6fc5a6fa4ac185e5ebf15148faa58c47323c49fe90c34b58e92a4c8efa712f8ecc23e902a2684c02deccad3f27a15b57afe55fc6beeb243b6e1bfe716cde2bcb4ec4aa34a79060fdce99309696d84efb1862153ff0c3f2fdbf3150270eaed29982c887cadd554024525b6956f706cedb025677df0d9b3ae5d093f525ef97e065c1886a4a47207732679082d975d6dd228449479c3e5961d5d1f84ef755bd333a9a40db7af9fd87dbc4f393e7943d5622bbb08738c19e3e13cc166a97e99cb691ce5f1be57aabab72aeb00ac64af6d9831222f5eab7b1df75bb55f4187225c99cb64e2aba00de132ddb31500fc488da23160040f9438f24ebb4d07515cd37958d4b4b4165f07c2e201624b644f51cb93e97bc51f8d6ca72c13a8a989ee7e95bc3b618e6e52cb188cdd68b573b5b57ce2335c5f0278b04124e49e39495bd753b8156d4bfb265b3dba3ecc81669146a5b4eafb506b23aba5179fb161ce4c853692db3946483957e09540c35b05ad4babbadf4c713c79723cb9c5988968c6891a18d8926529fde0d5c4aa73dcba3665a8aa389afe85168d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098947bdcb5575f8a3d64ee42e1485fdec8574581cdb62f0fd0d0fca8db79e15d0cbfa19fc51207c0111b1ed9696d17330932e32baf5d7b7c7669b3c498a187e314e5aabf8071fae727b58443a71b917d81d5376fec0c31b02f61876979afe13f75e0f8f3105bb73a7be8ba74f9a52fb9e96cdcefe7f57dfa64bbbfbdb4bd6aa38a9f8c73b04f06f18c91d51c3a28febb9239c90d1173dc577861da682537eae345850cb3de2a2e11215d24644650d210a20586b29406ed79fe85dd11db77f23950811405e871c0946c63350657afd4f2765083c94df007b906e194f914e7ee88ea9c22a5913df945b7ec6757f4168665fbf343fea1d3bdbfcc597d5be014cf5e715e95f1511a841b0f41a8d89def5738749aba84ba5e14c59fdf15d3ac58cd032b6e7981d3053a5404ace546731b97df38c8b5507df366e0b615ed72744a7699f341d9fb0ccb7941d09c7b65cbb30ea7a27fb2b710506386507dc2471661225af0cbbac5c81b5417b8a5e433422cc20a066746bbc4a98776625900501ff24f3287a531d55b6000ba90fce4d2d5b4637769b4277d9db2096df73e15478ebedc21c9fc1eae79071330ac9608872abf9d7bbe0e0f38e31ea1ca9ed8fa84ed0cdb1d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ed910124de8a0e13a335434f08223602d12a30053dc24685f854faf50ac0f6e93e784fcff70b19569f97ff1a31f5543fd62ac33b0ea45bbafb9ceaabb99455897fc73eceb5f01b2c1654d00d975ea71abeefcfe233a258afd02bfbe2f96833f003116960fc851b04dc10fb447a70576922dfcb7f937fa996bb382cb6829df9b011c7e487ce27cb50aa6f362057653381faadfc636d90ff8dae841dd58fdccc98396aadeb36a4cbf6e9950ee4e286f124d48e1dea8209c642fd098f73d1e06ac3f038471be058e22327a5f743087142746ac6694028bb0f4d524e411a25647d003d6c27076e87863b2055c60f52c1b05b4365cfd46b74217b35a152b4456b3165fa07b3a44c2a43c962e4865d5134fcf7df491299e6425e6393848418798898eb29be9be7f38b467f206932ff076c2fb2fad7066a4ae6290aa0750b087bdff999817217232d18d5870c01dd775da4220e21610466c190140d1f53af8d280af2a65c1cfc08a289016b7f6587a5a568c5b30c1d80dc00ad00db729a39a74b2bd5b22d384cb3870ea80995c241b02849cbf9360ecdf6f0a19f6ecbb35cc791f31e8d55db7b91dffee3f360c276896bb6f312baa908a52ee7e5d98465ccf9c2eb856000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099fd53ee909cd18b4e39f87f6c77fc716561eb921aff002cef89b1815121d1817e02e77d4ca181f44a562e4db65b9399df1316cb59777455a5bcd278bcf4a5b5c9ee3a747a49a674c667c3d9629d4b93f6f3273b878f7b16bc678520d1473ed79c939a12bbe5d74ae9b9c3a7bd9ea9d70c8ea549e862c99f62eba10e802264347a825f32deb47d1fc92a67365be40ed913e3b1241d8505583cbacf35821782cff06e079be47d1419f7e81cda7b59c904b3b0b99dc87df8379f5d878511f85288cb1ab0c8966cf6a49bbcb04ede23a1fe55b1f2dd491bb91796531b6b1e15d34e4e94627b09acab4a65b1b8b6c51956b058db979e71e79a80f2e6cbe8014433212d35afe55dca123c9ca9e3e81ebf54edaa732bdf9770206fb3233ca26a1ef643aff0622cebbca8a33e297281baa25fb7c0fd60fb63368df3b60f2b75c72722cb5c7a6371c3f6c3ecd9ee8673bcdbe191e735e24db5565715d92e292affdc120567ee9168eb685f61792113932cb747ffe361c0065d80b5bb8d6e383b77b8c9f83be338765f9e4100d22fd97bb34e21237016cb5b02bd5ae86ca6eba59696806c67371278c212f73483f1a7b5f0c84654ef9ea44d9d55ed0a6b811520b8c6973400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ee5e1a6ae958a330d216fd926b1a43152e3010732437afebdd49e6d281ab08840ff3173b946733bd8a6a0bd7bec68f3d6595d11338894110900efc332419275ece7d18f41fd170b40324bd159fba0e5e616dffd04627603042a63e6d1123fda1465bb4f29073dbd8b70a99a1ae2c56aa09b2a7bc476b8175bd3052ce5570c5850f90458fa2825d3a405773f64a9c8fbe08731890595ffe91d2506a68ad20d54f5cc1b50bc9beb6c685ff39ac7e5de86bf243cb1fe2ffcfcae2ece7fc2b741caf65fbfbbd87b858292024ea14230b3aa6dc2c66874fc450bc4a13ec0dc4cc7b0b2b69d3d736ef9e525769d1e5a22b24a2b9863122d6e8b5073d4c33db5757dc604b2e83b04bc47003a68bb074baecc9f0c585c0f92fdfcc1fe0b7029fd67ae1c68716b03a171f6bc56719cac7048a60d70c475b3767db01ddd9423e7a381a7952bcc09162a1603b25d43cbe91291d045f81145b173d61d8a6af53c3e6b790c62ebdc8180ef8ca7e7f6566bccd6e7caad8f4725d456010dce1f27727556f2fcf84199e2092e7c0638311f2db14043d3ddc66ecd2922282eb7618252056afdcf21c3e5cb207563e39d655f71c4720f856419ffeccaffa139208328eaffb5044d3a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000155e7e0356ba2946e1b2eef76115106967faa5914f7c8f22b05e62f0468605d6443a6e03ee9200ef5d10b58d688c000898f1ed63329a112ce0a39593b267f45d77f60bf81e791bd147555ed5ef115a92841dace299ab94b4eba6670b58c2e30fed380b98525b348852091b6aacfa54a2e9c3f41f1cb1e29df8e7d8db97b6030bab28415af8ab983fa091a9d9e0127e4a815ebf44a8edd714f560d9c5d444b23fd8ddc480d3a79c7bad5e610d42457a7194434b4e9e1e18315fde84bad4aec8288032cc7f66db3b06817293889531e7474d30fa1ada8aec2328ff4d7e3701ca35f51f53e1aef9ad38c02eadc3b112824748c705635799c0764812d01391c37a31229d7c0113cfc1c14ece82e3430459f3576c751be0cb535655927455195ef885c24f3b1e90eaeac79b6c01c987f17e945454bc88b1fe9ff3a9f455dc2c56876cffe52f1b1b5474eb5a3e6aee781ea70d797f40e2630986aa406291d3b41702470377fdf9af0242f3ee139ab9b410ff7bbce680690bc7ac15030b5897cef8b4fa0c72bf44c476f589b2ade9a0b675b3d70cf1e7aaa42d6a63b214c04a65b7986fec74a08e8c99bf210849af4129d96ac2bb0743003aab12947c2fec5c5e53949e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d6c5bdc854c630698b4fb833bf49affe8698978ed19c9043eae6e16503048db13d71725ab2c544cd6033f257f5697f21cd73d356c4ed45981a206d164eea02eba2aaa55f0590f61e75d680398f9acab3577027a6f0d3dfc7c068717ab92563e5eb66e1a4598608184a6c537924dd252e696975e21a368138e127bcea5e30bb94fec65cd89a82609935b1f8f4a79547f9acb1ea222c9a0cb65c9a17dd85da456b91754966faa03bd482c345e928c31788eec3ebef6b06135c6ae598eb926eaf5bdb06afd0a47eae967ea5c78e93d2944200f96003602ecb956b56a93399d9fb9eb1cc21caacf0632a83add4e08155ab881a12fd6707335516619d406f4934e9298db33602a62dadf0b50bef9042834aa0d810ca4e48f7848cb1cb1d807f16a8a8a6c0dbb60e5170720838c9fe4cbc0c6ee8d95f4fc30a898e8cb3bb54ffc59a368ff4ae1b1aa79e08f1a0066f4e0b1c572ba4ddf1c04081c13dd54d72f1310554467d9c77f0db66752a71e00e226b22c0ebb8b71f6bd32f6957a73837ca1592c5c6a9e6d96e4664c798b70f05ba9b1c92c83b3b9edb524e069db44f7362f8a2fba2fa8c8fe3fccd3d4744b6ff4691a7d682e73b599299df7c4a927e31b97e0a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf9bd3211e85352774cfdf819b64a0738f10950992a4d53b0c25dbc12246de0a3d0a42540330d782ee566003710b7a0f01db81d7f7440188d785b2e2a7235af82eaaa8024ead7ecc5ef3b3eb1e285fce43a42f7642e9ff995e58a8f0a7e57f356286e28c2045385aafc291ca0ef247f811d5eeee5bc6d6103f8e1717a8d25c13694b5bd198b06b37999fa5a74f490dbf07f53d84a48769b05f9cb11334120dc7d635d4b42b1a59f8b71549d086ef69a3708cefc6e3e27f9d7922adace46f16637b8894fdc684071ec3497834ad3bbdd7ba833c11f832ee023b51cc58a777fb6feb00197835b7ce737cd8224a51824d1d248de65b650f4e9c3ef5fbd2358b53dfef08629d084b5a0a388e739557dcad7172cee6a24f766c034d0883d26f77d5ce112a46fd8991a9bbdb2f7385ab104a88722f83b19ced69576e69a52b672117c4382633a3324cc716152b800c5a6b08d38662ea36a85ef4837a16d68634e66361321ff72676ea86f5a39ed769cc8dca162e34d5f8d6790e11bc98f31ade827cbe62199f76db6ae3d3f278c237e62a6c859d14efeb9344327c32edc0f978e4e2048307707609b2a889d2f47425c5a9a47f1720982cbef4f20046c08361a34113e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023956c531630386511f263f323a1a333983badf03484d4f6929de019ad9b2af047c35059bac3dc541860a3d2fe62ab7f9a0f595300d8f032b7496f1c18df84fb617ffa4f53ebd1bfd84f1bda0dff906febd92c8bcab84174ecf9f0eb68362cf7a4ad1a536b89f1e086dee463ec7b8ae1c34d8d697d4e07c164acb7f36c5ba3998297fc65260bd26217f93b9a89a4848a6202047dba7206c852e0ed53780afc4a88034f02f811479b8c9847788f80debb55bca0fffb30b20a7341fef2263410a1d1f4345b19c7dbefa99422960af7f6b10ae93d00c10037035092798b3af8271c59e1bb5439c338ffe42548a095c50e79f8f4cf5c7e42a214bcd06513aa5b9f12bd8892d31e254e8c7efeaa7b4577e2c2f4899c402295e1f20723660b366fb953cd9772d9474c386f9c1e9f585ca7b005764d5ba7af440976f8eea641adc69c81cbc27e789426f0654eaaf363326490973a89c39e8866f2b11b4f54c41c247935bd4a5b149369fd153748b8a036abb4a6970021e40425d775b8fc9eae801f7d82d15081be2900c60c63787ff4b5514d4a5f9ee16c44f50050494250197e675b2fa1d79af1e75005ecabc6e2d6df8dfd3d58d1695f97aed067b0060280e2a560b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002366d2fad60f04e8a63bfed703c215cd661a2aadfd7d3cb63403ce5526d1d72c4422f5811270863a64e99e1df29a72776a232bf4fe3dbf374ecca463fe61bd9282a743cd27fb9d9634dec596a70312ac02c6cd251a4faeab2c2515531c4695fa4c575f3b7cbce9a78993d286d67966b2ab2b04b6edb2cbd166d3b067c300320d3e68cd476d8a7794cabda64f63260e04b73e924d7522bc74a3efa115b0624a89dd5dcd708bc8bfa2e7e0e7c61fa9550048e5b73156ee80169c92fb5fd5f5bf7291fcb6bf798a1896b9635e9046aa4c9ab4a3a172e1334076b132a428008180509cd37017baa0f0251e88ba1ca74fa193c340c9620082e5ca6511c6132613ca8831b5658bed11d0cd92b13f1515115b4b21a07378756ba4701a2725e981f5c5885b0891df246cb6c613bd84181a7e15d8085f2ab3d89b57e97a0fabd01039bdfcad73d932794135faa9059072dbd5c9ad3d74074aa9acf40fb92d537388eed8fedd7586389ab4f174f46803246837a6cc5907662b7009c8a0518c8f6c03cbd333436017c922c9448a8373209eb5c7b5e1227b1e3b10a9ebb90add71cd89600059d1108c9678e30d27138797984ca6fc77ffd06007229e069ba2dd29639f2132d50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a50b90c8a376db622fbf54f0290d0ce139fe67ec979fc772ddb45b24e4caa8c1c510b8b521010bfbc8f166912a9d9f886d87f86ce8c584efedc4f4c9855db5517e26523d781aef38fffec964f7bf58eff2b3e27c6c9162d9aa647afce0e916985930b77d6f0856f341b83081f76e9f1a2ffdeb2cf6d7c0a58a3e6968d608b33932bcb71fa1843606f3717e658e4f1ee9216388248b45a167f15ad3d94a671797bbdad0092826fc08d751360e1c08b1f69bca043880d5a91482445ddb823acf9d9037708129aa3b7b199f01a8109fdd74e47ae97f139b48d53b2ac1572d6913bfe666a6f79d17d61ebc45116117c754499fe40b5ecdda447f384b270701706a3ad97162e328d3e50fe89d2551fb4d2a3bb22e24c12585f6e12f0a9ce3d9ffa9f700692df3a65b1161b705159be671d692e881a3fc71aa7f2f3ccfc384193f2697112bff4c2c82e6bbf51b1804ba61579f2fafc994ca35c11821d63c2a08d3baa4fe3ebfe37fc97ef90925911333521121427c2bcaf913df13afec928e52b91c6107c62b26160a968d61534307bd13da5300bd0aa482e17e4dbe38469d1dcce149a28d276938caf1d2dccacf3e8feaf8a84670cb819245bbd2533aa38ba9f7ea7d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d6d5135ddec479d21aed536e51bae4b9f618dd652efdcb37a5e9e746e12850d627844151c75216b34273cded2debfd0f43dccd1edb5846d6090a8f51e4e200d6c9b5e44aeb62119395987fcc74f4090503a5f98f3a4526a4b80f3d0910af14e1987a309d11f5bfab30020028a3131650c09e3c8b9a831698ad30ab4085d98f0a69d129c88be81bad8940ca15e7262500e3ce6ae3f3f725d83a235b69c613645e9da1a5db5794984ed2552e21427990735d314599896fa1fd59c8592998b0cebb773f0e8cf8b84726d6d294109be65a920be13c42133c0d318de94962dbd2d167b8579bfc8b61e7cb5de14f327be2c7cd547fe252992bd922a0ae463960d7cf496aa11697c284aa7fc82ddeef37aad6d7e061aca2932356c715fcc5cc252f8e49c24dd8be00ec3bb5bfc4c8e9278fc465e4fa223d0226443b8d87eac7c4a0de9d5c8549cd04142bd8eb765896d37139909be31e51aaf01f5dda684ee66350809ec5fe100b4b8bdeb347c090707cce39a7141813c12ad6e9518e0346af81aef970630ac8152b7ba44fb3c7d4060ad176e21e77d59cb8aa41c82cfc0d184b33132ff6562447f804fa0295ab0651d52197d83bf2a3f6ff54df4de76f37a71b90a2800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001549324605cb7d54ea9ee6af72c49e728def581f4bfc3506613aeaff2679427c17fb0a9ccd6eafb7fcd47efa67f1ab612d2dc62f2849f3d986d8a2991b37b9c5fa478336682d6e2fd5b86388f625a5f6845a423abd5943d5f277d182880076a30d65f080c439b0f6ad224cdc9c3a0027f91df0306831b954e7e7031cad8d76c5ea7599d26070427cf9d54713795823b26e2e82bee7b7ad1b0b99461a8c18f62631236e7d7e789b2e2ec5aa5929be2450d074e9ed9f4fe702de90b6eceddec9b063aca48ad60bfb57afdfc2e7dd6f9a3f822ff0422b60535ff93d14778edf908e19e90dcc45a76842ac263a96d3e1e3366205eb4528891a50ea4978d43ccd89215f6329655b80c72a0438a7b70174a1be40900c34dbf4a345b7537bea08191dd0b98ba6617a566005138a8022f6b783d6cca516f86b74b11de56363da112b1a115ca63da53a3d82e0968367725b38c950a92df4235a7dd309283265d587169b88cf48a2b25ef2e2ae11a0f3efdfacf9cfde2546dbe7589360be19d4f8432ab278cac3a6bd208d90b8091d03de71494a85b1291bfd3e353067af27d3de017bb6fc75dbdf21323ff40ae971e692f1ad6b7a92c3d4c34ebbdf69062225a4eac8de5d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e68924098a7d83855c294f9570d5507902093ba90bb970513ecc07d07e121f0ce93e61faa582c7e2f9fcf7d86cc142f76d034602ba5e5fd014c102ceaebaf6597e5301a42df9a27bd71b7cce9437c94c7903caf102ca71b0d8b8689b1413b3187ac68aee8019330c464c1dc786e7774288cb6fa9d6831c2ec7fbb7dcefde53f8757f1a6b51cbe312b9ab7a71a09df8f7134395140c5b0927a17a596ab4f2be98f83b6136faf89f2075221da57ca46dc33c7663906665deb08c9279d1e086ea725f52ff3b5aea76bac2dfc5a507d6ecfdcc1edda9cf369a988c947f0119298f12bbcfa14ce2ce88c92435b27db7a5970583e6b4e5c2e42473844ddf8c92740d4a130389d4d3b6c51175d80a4c486c82bac424f2a98ad4a7a4892253665cb4bb9ff754cb553ac0d62f2c328ae594627c1ed3ceb2e5168cea988a9f0069357731cd30d31604e2a7e857d37907eba54ee91b4caf83ae19c615a48b7e5ddd6ef76831b5f773eb260c310d1a482fe076f5d3e5dfd7b11807a9b8194864b6c538b63ca1da761e740805b5889e9ccbced8703dae5a6199701cf38a1ae3a02e14722919fa4ac74ddf4eb55a68fbe40dcf685113ab0f0b19f73905d5ad7bdd5b1d3aca34d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011389daa1259f703aec0ca08389b62397648aa03d109375396366a0d04010e52670db9a437b375e399e280027e8ad3f501ba5d4d6a3058e99497ddda2f362da84ef0af652c991a6805e48d8ec75b8a4619dc4b06c8e9dc188d06f5be44e3ed0d41bdd6c616fe2d725ce10dd074feb9dadb0a418ce4fdc5a695844686c92df908d15afb654421e93b6729bede879dd5a3b3894005766e353ad82c16b427f65fea47680891e507dac994fea42d2bcdede7c4df996d8e3fad48430aee7ee28e3c110cddbebfe9d8bfff494aa8d3ea55ebb523bac675fb5511192ba8565a7d9063989116e0b5f188eab4277efeb0f3e7e63829b892120fb8a61e0764c74d5128aaf5f89a4b41b03289f3630f0a33ed029bb01ebdbfdaecb53e48d30ae6a92c919450cf9bd0f19037a073ac681da8caf6c67e0d5a3fc3c498af54d61e64a5eddc554fc6b1aba48b977dad4933833c08394c404096696fb5100c8ffb6b588601140f4fcf5602754703b8810f4a60542fb3862578afa5dbe8586f9c818281c601d492fbbcff454e4ce5dce5400c84e8ddd0eed4b9aea9f32af38611bb35ef958fdd0b92ec56231aeb8b97bb100d7c9f2e72c0b64b1f0bd095d77290017cf0228e915430000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a009bd52d15b6f94e7a2b5b865c18483fd0cc4264bbedeb0aeb305b822c6dda97c7f52595e72587aa2652a5e4bd1108702f58100cc4f5d17be9885629678317e7d5e6844dedfc7c38632cfa223a1f5a44c79ca0da44012bd5975458e620c263ef85cdaafe8b677fbb3a6a59f82ed09042352216801426a4a2de8498d43bf1fbbaa37e2a768f195a0f8f2111f7a4d3288fc2182735ae57d10013e846708ebdf562447f59c8b0b0474ced46901b2bc3356523d1be99caf8443a12b30b7718149f21bcf2f7634842c5bd095588315babfa108f7309c4121c588a193da6f538c54e8eea71d5b92a7b24a6b4e125e25dbafdabec8b10db844c8761c64fa799a07e388a1f8b27411dd3179da84899c48fc06a358b35cef64717d816474535e1ec332594d23cefec408ea9bed94ea0379bc041fc6ed5191362dc3e578aaf47219a1131bb382c38a1af2ea84731be358d58fcbb2bcdc3c233a118a798b9462ad9667bf6f10891ec9b3135e8d51f31fb27879e6a294cdaa5f4c6dbf3161505da43e0863b38ac4757d0bdab0c48dfa000ed80d78ee9376455ddb3c05815d7bc0e528d0d10cb886545efe882f7f7d6992cd2bd78b3ff2efe288f992c9075fd09e0c87db01640000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000118881d066da006927a046eb98eaf2b81c6c31499a6b593055fb74aed14a641e3ede26e19bf4141dff664b3d30019b913ad4d345f2cbbffefa7a71e2db6fc8632dfee6ee32656cc457da6733ba8ec43c8f99f646ac15f09841fc9cb93b79f01fcf871391df5ebf55abbf764c918cc6081518f482ec7c9fea82c7ba6ecb1592edb5d0e8972e81506eb24ec150c78b99c4d9340949be1fdd1caded599f49da073f8365d246222616b7acd6c71d2a6b37225db5c88b7982f37a1e1a990459bda3651303b13b8a2c65209ac71dc4c60065a5ed4d3ddd0a5fa83bb94b5d07a58855009eaed5dc1c32d676ffcda05d4dacf7fdf7150148d3153de75bb919ef6c7cdf3216e832002564ddbe880a9b77e3094a86e4e3a42468be7da34eee9f3db940f8c7e069d70fd2a75a7c2b85aabc184aeb9be2fe386131b0339f6cc647d999870c5fb7ee5bfe6c173251798492bb01fa728865f85c8c2ab3969a6e0d91a996e35ae8274217ced3fc0db14b6ad1768f99d5f60b80517ceebc59c0d621ce957c7f9396f74acfd628257d4bec11617cde61cfe260caf674d6b61515fcc6144f85c50b33f885178bb9e8e0da99efd3549be42e71595bc90be1ad19202f7562b035ab20b3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a3a06c0d9e26fb65133039923f5583ad6a02d7cc4627bbdb68d5bd8c4686cf0c300337809aafb6e74c61cfeeabcac09362c28566ac7d5baa7d5d03656a2985ee40814ba1d9a2dfb3ef9310ac944cfd25039de5ff29ad4ded33af4bdcdcceffd004d1d5f7ef1fc29394206b0745e76ec8559ce763ab54eb02096fd7de3248c920aeb3995d5c4b44e5506da71f1d499456e406c606986e2349feb893254b6d8f1345bd071fc3871e463ea1e7d5ecf60d71d2ad7bda3304e6be647b805b5a35a245fd36339644351a3d0cc307d3e43f2dbe17ef171c768d32ba3616953b4338d67d3092abe1e7da1fe2e970a2342023bf03439c18b03198234e8ae6856e2f25b3240b0a05bdf64ecdda9a52f16a29b799110fa8ff53060babdd5057d7841cc44494a09dd582440d41a4db8df5b0cf483d6f5386c29de3e347a426af4c076af638f1f5ab06b8ef73daa6a55b8c41f85cf7bc70891f91edefb9f41c4fea88e83c4c5cbae521d94a45cfaa655be2807fa62be3d617fd9755b311ad5cafaf31f8e51042544466f97b071924a5ea58abf67148cafbc011cbeec94ae931fb3fd492a6c9a74ec60d71d349e4b13a960a6f1a84b0603b9f5d3b82b2c93036645e740dcb800000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000164f13f099b7e813e6f708b8cca7c5b21bf23ff3fe26f8daa9228d37a779df06aa98cba47dc43bf8f278584438a2ca0518f2c5f2bbc21812192c70212a49d521189d5a2893550e1e9f9529387aa0f67de5e970537e944452112b12dc162d3c608998c4a42c0e8190197aebd0429ce65218aca89c23cec4c2fc80f39e1daf40405d159435231ae73eec7a4402a10ad639847fc02c39c1bb6081562061254e020a328ab2f52bfdf97227ac404a15b98515395dbe7ac44edc91955eee8cb75323187eb0010a49689456dbe6ea38e88652521cead1dbf75991489aaf5647dfa9729da3949da4fda548265a5e00c10f6c8c7e8556d29d55d34e28cb227b55855d0c11539f18218a63a9fdc9a39917439bfb6842a169e970c047f93223d6232e656847e48697699755899d2ad7cc9c9834c8e123f4b80df87e19e7f041bf786c288fc57d26d6bcfc3a4ea6bca5685aa26c275403752188885ae7455680057a71e1202dde4493ea746b50e250210cd3d2644b4f5c0d8a8e47ac3ef99de84294a4fefa42525162595d2069aa0969ac1151a99bdb9486638072f13fee6905d2dc8e36106d7c1777e65f87388d95ca53b92d8a381f419c8f8079f06a3a3d7a7fb45b775f08000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098a4e164f3626f69204ef8d1ec361ff556553167ef15143a408fcd01d770431f1d69ce0f02a465fd13709e2a6e72fe533391a56581f096e5ed3f42f7f245f627100d7bb664c4fd92080683fe778f82e17181c8463cf56c58f4bf5e97a39746aa7d2abaa0e0028c61f42e27d833a83c51597c759136778d6e48e5d407e1e89e6910ff0d98a95654f0ed7dc9ee1ec5f868575dc56ce1b7308392b33d8493ce4d8be1df926f5fd3b6cbaa10f57a3802ca58fda95c28eb3c3532c35b8447db68fd09a162f515795f0360613d155ff1df805a8212d085802a832e47f0fccbf7b0564191929d0ad62136364f902070216c84354b7a839e7cc04614b1c4cdd003291ce9c16a64c5f0a3f937f33904875edab9b4842c6094acd1d35d7141383b74549c494232bf4a89de9c270f323570598c64d13219be250cb63c210e34e9ef137928195c65f6ee0f1234ff62fb49a0d16bd0b335474981944f64395380b3ab30e3b07cb6357b258ae2b307fec999d3083220295812b605d501272003da27d8c067a01fcc4efd76c6b7992660bf024bbfd5e9dbaae1479ff7b45a883d079583e0cdd52d77a2862da6e0b144672b25a118b66d013a3f23003cce9127c768d8f9f37a2b940000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a945aaca9917262445ec3781c45e3b08de2198a99c0351f1aea71ee24aa92415b3a28f1cef6d879d8c0ab7977c3f5e41322667aa7fba4b8366b2adaffdce4d43342c2d73f39b94aaf4246ac14ad72c54d7524694c2b09c54d9b16cb3fe4863b970314a62595b82b9bfb4f5f485a845b6385f9ec3e19faeff4f8680e1b30d871814956384ba80577a824e89eead25271dba504a14b26163c370a716ffc3a90d34918f535196a535d7d22d774f0b53187c1bc4f97141600caa3eb73b2cce029997faff57954fc4fb2a6b2c95827301d8019f882c79eff081b5f4f11dba2a6f3110ee5fe54c57687a910bf447d06e621c58fed377fe502374742966130ef04a4fc9886b2c463d917d5da3d288fbacc74ec117715674d0ab7b4f67cd6bddb4f4e1dea9980b18fb1555633b8fa7926094bd3b069535fe6399d8831fbc69fde3a09b388ef0e3984615cf759f241d2c7c723bd58e972759c18cd8e44c57ea203ef197da57c9011a23773bdd81ddfe4d19d445afda9c90f433a512d7bf679eb02f50314d821146afc32122e76ab7716b35adeba551640d3e881cf2308aaf0bc42916fadd605a16fa9d2adcd2dca5ed973b36696a94c8df5ca94a6e9c57dd0a4c10eca2af000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081668a3e49878530b844c7352a2d623062eb76c45e92d647870c79a4bec50542aa651eb5515b3837731fbece1fbbaf9bb7de326cbae6f0c9c877ad9f096071d1316ddc8cfa9e2951f68559dfbef66890ff476a00a74398dd8802acdda3d1256760db8bb1a102f74f914596912add3444a9db1fb326d1002b9507b9ffc63ebbbe6a6058e7da87c61b1453f920fea6c835a49e251adcbfffa6a0a13188d57cee15fa1b11433b9f7761cf02b1f4563a76c9501f2d880165576c8465fe8be70908b0377e4d2e48ede681d0d88499324507d0f56aacbf5db7352389dafecd092e1329ee228c6e6b9705d3deb9de8cfb1523818d2eb5f3d5dcbd3fe586cc1767a36d60aaa3e0a38599ccad5d0379a92d414081f8dd260122b389012ddb8c48efbb540847e190dc3b781bf123e4e02e85c9bbce08f1af1ee036a45722a7431df84452ed4438e57e89e9820e98321e73606eb0e29b5df067a740daa250eeef04b62a06935d2719a9ee12c4f8fe8bc4beb93a5b7a8b806b9b6a898b8adbe36750fa86ba1e1f5c64e2555887c825fbd187f0d0a7604646e1d46a32783bb6bc9ad7b2576397805d691f08be9f6f2dd9810df37be78d4d5fbbe29c11e27dcc043099c018d01c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002807f66bf1fb8c613d059b9c3a7bf18dbf19294a6b7886c89ac5ceb7b4e5c18f13c8000fcd9430618451fb6fe876418a7793723ae82d679609c674478be59d06d33dbd4077c573087985d5e5856d7b66d996a8313c49a6b45797900c1ed3980a89ecdffe818f37441a65dd2004edb307b6e0b5dc2ea26060d3be04cdf03f6516e864cb60aab634c66df1bac4e1f6b8c4d1d830120c825d68f38bde1fe334cb3b04e86f1c6b2d87fc1c2bca006879f17609ae495c2feeba6d20891993cbbec4d69c3b84e73e36fa02f3c10f84d286bbdd59eb64fd045fe2f32ab62b0744dfc45fab21943c9edc6b01d2b2a5d76da0b0ba0b5b2aef71942213e7af8cee8a857c1a97af7c34515c1c9520e042d47061d551cadc870523976557b938e076b9cf984a6d30854acfbb460efbd6d2f9fc4f6bde6a786c5b828ebf816187e05289d636e6f20a1e4e4077311f28023067cffe5e353246efdf3fb343ad67e072730a96aadf25a261a8c415e4539b73ac744089fb41788c2ea8cb4f3e0400338d75be8cf85f9251716bdbbeb5c05dfb82f652c7f5c281ada5031ec439c0bc5c3455840568ffb00766a79fbc54583da0780e3903ee0d2492ba7f72e54f46ce15bbf42e6345db00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484026113ba32b515fec075b9ecf3ac3f9117bb22c7c944819ccb459bc1f7771b2640582222190550b16814450501535445f32c8ec620fd8445ea4158897ada9084a005ed925bf18bc9ab2227debf1688a657d0cdb048b75dbe80a341abf9113f9d400ea8ee161ed725a3d1a3e8fad7719db10693f077e802d93efadc012dc1abcd91a458a5c20000be43c9671bc65eb6d13762c205236b6c86c856aae9223c4e4421cd7f4357e7a8641c29b0c7f2f85f0276958d8e6698c8b336cb63d43ddeea28700716cbcd9aaedf695fdb66b5a3a43e9870c743d8f361666e553418a85d5442411651bab9f2af09e055319c762fb80823f00fc063f2ef6d6b98775f20830ea0318a35ff3186008a7bfce6b7fdac17d3ed9e43d91e00f25c2c2e73c89cdc9de15299e6fe89f4cf04840fc9a5f884a1ce86f16ccf2ca547f368a2396a3513c86e000ccffc4fd0f917b4802da2091a959c75bba9ee146c794a9d91c7cda2fdf1065192fc9e5d91064f38a1a2171db0869e42476ae0f718479ee38971be10f1ae340145f2195f667451375e454d41e4bebf45dfaa64744dd33e41b3ac61ed64e5dc110b62423a39e6425f31bc58d746efd846194c07533b719f7dd9fe6130140256b2445cfee270a0913850d877a17a06ea42058f43bd39d0be7e38f8218e816134a1ce98b6bff67be6bf24cac6cac029427dae2c1620660bcd780b6183220c099201f8dda3ef43f6a4f77f0d1588d9c91626e4c04c826d11712a0c8ce8df6b551aa19fee99dc84ec4804e38923478d16e824c11c1de5d82965c93297903d2a19fae119bda2a5570ae7dcd6b64f18417c616a96902949bee0299e9c826d018597d82146f57e6318d5ffca06151bcb26a2bf0d7594e2a605b9e4683544bd81121dbce1b17b6c1301f64bdb7f9df4824a2fac5e728d69f920e3c13bd8ad672c01d09b92a4f2973383a9136ffd71e8ed19eba7344969c849c48ad9c78537c866902e128225329e2d75e11c06d7202789037a5651d7cd5312b854ef1672459a89d97f0330201ef6bf1e101c9abf9618bd585c07b12ef7d46408b7032386d504ff9be68752466365b4f545a30ac3ca17f95e1cef3b963a7b308d10b1fb0a7c6846f141c4416e096c7579237c8b57cb6217ee649c1ed16dfc2ce25e0be41e01ddff492471615468a5c91b5069adfec9177a5d855a750d9012e7d91f04b2f4b7f66453af9060ac4ba2221bda1ea8c0320dc38328742d283a92585c3998fbf1204be20de84bd27d35f94f7f94a37a38d6a2ed92187bdff873531434e13e3b67d9d3931c266ea1dd8dbbe7041e673b457deb1567b7cb345582210be2ad0619db201734c51375f169ef2bcd6ec01321cb7ecc4eda09d334c84d24f1199458ecb01f8fa4cbe66900e87c13c24fd4f4eb18ed83e99c3c43e40f30c810b1e375bab5155179eed7be5099595e1cfdd51ab7b3cd1c426789fd136ab6558d334fa0671e011f3ea7169f622067552b57e85aa33d30d4206da493d0756eda29f8b4ab80985ffbf18bb97d40caba635dd5e2e5918d1f7bcac7de37c258ef6c70f87962022aae8c8089ad1d0066b31ea7dfe558cc3b7968b7a97af5ed37016d0f2570ad33d11a295102276dc190f572933773912b0e5881c01e121a642fec0137cfd5052301bb7bda6ddb3630ffc671318cddcaeba8e43ba289ac30aca685e01aef79fef8cce9cf272f803a112b15edbc142c003bd19349f153f8bb5fe93746aadc6739d66c709e87d5045f506b9211683cb7fe9cdf9a08d436185cc28c99a155e2e45376acf89e9e85075fa2f494de2fd02104d59917667383fd04a0a342709a849d9209a43cae0f8cd202a10a4a9e3509b8caaadc224d25f7d0e71205330f0867cf34f8e8a01daf3139b9705232b160421a7b4c2ec433d5315eb94a409e10385e2e92e1e1f482ce0613ab31359024be61a867a976a662cfdf1b413f65e8c24475e2e7c6a12c0cffcee938417925e50b67ef15578a1e6a31b0b63114cea1becf5755b5eb70d1b30df4dda1206cd2c9a33e70bdea72c3325ab909c037da4638db41e2990ff71a1d98ae76e8d0277d41c1bc0ab84ba2a29ce24c4fc0f336ee438fdbfdb5f9c970aa3f915d3e91ee24d547f73290be44284f2ebd88a494156d329dff1e4573e949128fef603bd2a54181f38fa8cf8acd1a35dca5363f23d6ecc8763519709e5bdb399825c4b710186c58181e4cd5ef10e26e0d499e523fdc25d0537a68d11dc28b180d2c070fb1db870582496cd6209437d387bfcc072bed0f67607e8c34d964e98d990eac1d2120750ebc0ce582af7aad4ba5a56297252be17a84929486d4c4d2376085e0c352b089ea69298bdd4336e0fb57733e33d37dec44d851d4e15cda6dbbd9d6fdeaf2123b70ca9d7017fa1db4d382dd0fc7a77db149f3cee3be12a8660f0d95f61fd015a729f586e89300b13e9e1240715675fce98a159894d01451efc2290d59cc210f7b61607e9ebe2d9e69a5d843350a832a040e2e8ce0b9f604eaf569a3fbabe301f9151f335f5d7a66a0c0012dbae944c6392f81aa3bc0feec7e27d05721c6f0c011d4d0f637850562b585fd5bb70a0ecbd6728669e033886a56ec729b6025a1c3b836b6545c009e0f2f52edf132bba013fd89924d22981e565d5bfd200f8932f54ef4e6cbec4502d08757a403cb23be530902881ddbfe9c76930c906b127d8073fb9b8ac28f145610cae2c9a4d0f4486e5b0c08d37f10362e65c639635ce7f10e20af51965894bb80e292cba7842bd23da8c63aeee9249b2f80667c21577710ae9f46447d18308043c021fc5c03e5efc94e75b9aaa59620f14a7522b690e410b21b25d91ee1d4d706d5324b933483c1d54739f0afc4d5c12c5d71daa965ee44019d535b890033b2c3b4d033fe965a0e21843c5a051467ae6c9def2c873a66f3822e2a6b9ae85eb8cbd9a736aedb33ec21af7f12147bff88edd03eabf9dd41b9f0e779001aa9230767c568e3e845e08e9f79ea8e6c03c8191d4454e23d6d9374b0dcfcc8abae1c6acafcbf4c22de616148c6989001b40974db7dbf85bcecfa9db299762159136e1ff02e8c149379ef55f521efd9faf9294eeb8fbdd58f05bb9ac2767119edadd4d6038b1d218b3154e9124848a117a019616ffefeff1b9954aaf276d15e2fa758474ddbf60309a656c29a3c7142c422b1d1cf4963a6d4a4313ba2d621ca2010fbc2872a929d086133454605d20f40abf92eedb94f5297ce0435f0b57f8eb8415982cd01b72bc0b1deaf2ccee7a6b0c721d3e6ea2b71dba9f154e1b177485935a2ef63f1d9dcf5b75cc9b96f2106fa6fe4f1c6c3ae07d2ed64e731cf20821ebb036707e79593ccdd6b6f48584a8ef7f9e33369a176405c0ce857a002b275f0c0705b193d6f44b1e93786ddbdc2c0e95c23eec6eaa4690a0097a251de437b54e12cd09148e2b96ad9b009a3d9c90042c8f4c7b3e37ce0d0fcc2cb12e453479010f1404e34cb0db0deac674dace555b624b4da5474d003df3c940b30735270de06db0b5139b5023077a6337de601017632d3d46288bd15fd507ca2422463753ec37f2bd23352b483ffe86d767a4cfadcf430588bb3548d9f6a0d342163395b595acfbdf6df8ad6c51d1499743ccaf6337e3b59f2a176f29f6c7c5bb29b5e97e147c4771b5f92a7a62786225ecaed299aec5f212e9eb38bda134e6802145c86f147bd42bc2132c43b294e864796ae05c720fe435f32411d8f40892c8194950b703181b0c6ba66673cadca7be3627eb04f640a50f13cd64eab60637a51e761137ce8637e82f043a92cf78c50634333a07bbaa87628cf77b0d7c0a2ed50877e0d5a35addf67f54ef764983e0c5a19281ee739c35bb9c5f0de17a0936611e38f062d77b6987f293f3f12cd57be9bd4d797dce8b8e885c62beec128bfa680413f157d649613cd077acd4d818b66dab552951eff1dc5b93bd74036d00bab02193d792854d4c0eae31e2d2b39266574ccdcce8f686edff7ebbc5b781aeba480712e35024e818b730e8b005aa4cd1d59ec6ba65bc852a31ac33d1a4dbc756a828534090da182118e105618de3613af3bb13d04d5cdf09f891ad495c79e0e89d290e5748c7759a9da305068ab39c0ff2e91183c6f658b4eba8d9f8e701579b921ca747d8f74c949cd6052d1c9392250c8ec6d4518b9555124951aa90a2db9fc00607d5eca3e680ba27c746d1c702810b236e179cc24ddaa00c9ee3f66b4d968829f00aefb929bac54410677c706fe447379347eb56bfb6f0cf2a4362789ad45c2e97d8a15ba1a0a0e802f209a687b98dfcd5412df91ffac33c793bcdc31a735a156a5df6a786306a5c7d8cf19be153f5494fc6c9d0915f30effc2914e44f9feb25512b4e0e58cec68bfe34793ce655577d47b411ec89eb58ef14908686fdb278020f05dc6ef7f73776fd0ffa9678b624620bd37b3e8d5fa779f58fb7c2b57d6011e89257f4a574c5b8ca61039d1094a50f43874b732ad2cec19b9551e1a3d39926df4f94ad90ec3a6a838be6db84f9e2b2edf7bd085c8b735b1e63b7f468c5671b0a8a748ce2389c027a87f9fa27e65cd32e6e517fc6f102c3b45d580fce1eeb1465359bc8c1226137bdc8a5333481c4d9409d58bf731f3d28dfd3cf7ce29a5f29091e8084f96e57c69ac5bfe965c023605d263f2de730ee3df713740fe018e9049cda4ac59fd07eae831e5a59056ddc9d6f9f36e44bd6806233d52759e3ab641d0ef1fca4cc34d6405363524817bbbdb2fdae2d16270a6d849ec0111c8226e3150e78d21516e41eb82c6e94c5cd1bf340209116f62a3fab81e6167079e4b5ea202b5b4f97e2fbb5661babd4fa609538048e1926ad8a0ff3acc6f8f42f7dd09e27d9aa6ac74a15db75e902f5cfc11bd729b3369552f310448e9ba80ef8e9798d1f8ade1b4968cbeee90051d38532cce2d071eb5034354a01df0a4437bceb12de1eff7493d42f619e281d8023d4db3a645c343870107c1d08bc300e4c8047ded41f3192d0ae15a9be9812b2d55ea22e72de3e5a98fcdede82bdd1dc3d9a9feea22206f084c8cb2529dd53a5408d631e307e814921bebdfd84f47be8fcf0fc9f791abd67dabed1ccf7a8e1a4f6957bcc9c212f404d6c0d55655d7bb8509525bbf70c6e916fd16fe57fa69fe636a53e6aa38d7a6ca07b39edbf795165155030eb300e40d45ad4848f6061936b99937029bb98d3a0895a2066f5a7d6a5fe0b5baef620dc42ada0496e705c07c60749098f9d2ecbcdffefd53c6efb3994d3e8ddea0016387a8edb806f5e171ec243f1856fc42f6ddb103a29e1ae9975127d87bb2cdb28afaba487a9c6b97f4830491c93b89f3256bfc0dd2eb37717efb5d2511bb85a03c8f48a2b46e9cf2f3b1089f60bcc21167f3263bb1f882937a67e60e87751230b28f14400ec66c32d8f73284602f2a0da4d04b05731ff74d680f9ad3cfe024f06138b638ebcbbdf35ae39236d06c2dcdfe20e7bebfd2cb4fa64199cf8d76b6e256e66bbfe31f904f1e37098c2ec11b59170a01a6e8a3b7b026265d4663b09232811fb820876d3df9ef5b30660a7aaa2e9693801e9179c44c212a4bbc1929d2816a65c4f77ee3543e35b2e9a02979ab3d95c370349e6f11c83c655fb13559bc40fd8f4b5676c137f270a3c303f3d27b73608e79c1553ccb8054398116117cd8b2c412e551ea25902c67a0f5f3022450d062abcfdc1451fd434737fc7aec6858612654bfbef12f29c5ac73b4b986eb508bbe3ce600a2a8a198db85e2af85c5f4a003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000043118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000430d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000430a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000430b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000004329a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000043141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000004325e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000004312978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000432daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000043189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000431159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000004305ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000004305c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000004314d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000004303db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000432ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000431213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000431ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000004314fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000432b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000043305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000043280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000043223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000004317a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000004308858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000432618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000430f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000430e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000043172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000430b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000004305bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000043137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000432e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000432297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000432608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000004318373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000430422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000043204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000430afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000431998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000004328d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000431da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000004321d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000430ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000430e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000043107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000432f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000004309726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000004324f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000004303c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000431fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000043205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000004325110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000043283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000004321cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000043094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000430c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000431f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000432421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000431fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000431bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000043304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe500000000000000000000000000000000000000000000000000000000000000430000000000000000000000000000000000000000000000000000000000008100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810400008100000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024695f6da1cc83ae7ee49e4a5c9267117edce92217e7bb3f0aeb616d0b78462b9184b1947c0da2ecbdd9d10ba0336512b50b325c50779c3149c7db0eb898f5351c673198796bc559ca402252dd94c1aeb657dd4dc27b835928acd27c2fa2e214260c57a21d3c14280d62ab85d5e88065ee1e94e3220a0a7e077516eba732f510d274ba6fa928c9078421450328be1bcf4a8d9034744144cfe6ad74d43437fd7afbe4c6270fb7d28554ceb0325274f09e3569cd4d83c29f27c0960f838158baff629e0d21a6fd9f3f0ab046c364f3cdbfdb65c38c97c329afd26f5646ed573c0b70410746f4cbe21c0d423ce0acd2adb797ef78704fc564899e4b52236fc45a32e19c59095ec3a3b172656c9c33269334444d4da0b77e3463e1b2ba48d63817d58763db11a8d3abbcd696995f8fac1f8f0bf85c102f0d8d6eb53a76e9de8461b67cca1d5b4b8971af61af8fc624575643a31584a00405daf68f08e73dc89d7b10d873925cacdd934b205b567ec511b192b58242f4cbd18d93279cbbe0879064e2c4e1c3d724f6efd43bd5882840696f25c5a4eb608ed4a2dab591328339239bd19f4caa98feea9e3f4e2e4a23b07a4dcc71881727e4dbd976fdc0467e3466554a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d03876200a6e300f931e09da6a877a8fb884ab09073e3b7629de677eda1c0126589667db5fb628238a346c950498288307209b26e90e63131263873093bc81fa3e83c2c669b73a9f697cfe4ff097875361faced478619763f44ab8069e49d767e20acd4717a3da3d9e8129548b0987382d9b983e9f519e215d2d86522f3d96695127023654e2f666925d9442a304b0800ac4bba320580140069921d37d35259ed21ad4c9b2b479d05b1e0a471b0871047d48c0aa847e1d741a4f9e91695bac08834554a7ebf5e73106ea4984cedcdb353e860d8111e21890d764bd09c3a6efda40f94d225c3de7d7ca2396d0ea7d6839aff0e11c43d873b16cbf15b53d7e4fdea1689c9b652613791afe295fa49aaa35bee6a72f5b239dbf79f2bc0c35c264a3a2e1fff9c06bde3b60f7b2fd67fbc6895a562f71ef106f8a401332112f106a58de0d030567bdee004fc53365a2cf6966795a2c893c76d537b0a0046eec827243270186127d86ab5f798cd0e628a14c71d20cc2ceaf00e7f474b15d999254087d08afc7cb4929b1ae5d21421d3ce92ae672ba0822514ac5b4070f436155ab4953df074f9724424916033802f627059a8b49b3714ab7e31ee8048aa7e54094f10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000185d7256a4f3bbdf92cc2b4ed635972f0083b844df5018f2cb85145081646311243f0cbf3702637077082aadbcc16505396e48a2decfa03c8e768e4e4eb8dd02dee8a26b8aaf8a12132bd3ca0d9c4155e505666433b6b7f2e8c7ac78fa4ed900d117e5a56b44db8da3f1f4c4fb31e2b4ffeb863d4cd9f910aaf069ac514afb4dbe894feb8d10852df149c2e667b483e62bc447408ce8a0001c485a2c7e4c1576f5e7aa5fa7a7e1518be6d907dfe0498244ec7472be007687988e9d3bf94e01fee46298ac386bc90284414188a43851b545a1dc1cdd77b0a79d92da307f3aff18a180bb44f0ee3bd00c896b252a0289db913116d3de0448819cd361de01edc4debb353e70f5e50bae03af7518c4ef858ecae4dc666c3afe7ae286bf2e0497655165fd3c9d360e132236ad7d27650d3ba40b7666a748b5512cf7efc11f790cbf7f6204f6af6417159351c9c6075184793138c643623159045480d0d19cb627a86ddabbe92c162a012741d7b6a0df850b18a5fdd3dd202e409b513f57c672ddf79b01db301d4867b7a792d2c568aaacc4c4d6f93313dea1fe19cb0f8c4252333062993a7bbfb56a79790a6ffbf3b60506658f6c47bc6e2024d057d268157f11ade500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b5bc55bb0d3273afb03a78eb3ff6a02d676a386464183378516e2dbfee29709ef69750e4ea3d801f6915685c3b22855a74c74e9ad8ea0946b06a6f54436abf7ee283305d6c8123cfa502cafe31de9c7917abed2e8fc37ef1d90055aa7f86c57f46b57bc51c5ff6e00f4b45398aa4bcab34aefd8a7f1b59e12b70c13d759c7fe38760e4ae72813dafcd73765aa69a0c42f12ac16c20d7d0274c88370a7d846d6327680d61ea356820b60c4d3b94f58becc5e6488f180a21987699508eacb93befff17a60a9107f6f1f8841fc4430e8520c49a7fa72f428f0709924db0b893e1b0e244db791338779482ff23a393fa715cdf12c16bdbbaaf6a2ab441a10d755afe9fef91f81e62815fffbc84612935ebe7aad03af324529e3be4a69aca136b58ce6eb7c780d772c767457269f7f14e78b2340ece911bf3e381b9df3e80076cde26e1ca3ab342f6ef310f0b73cedaafaa9a098bdc85ed6a64404b8a9092bcc062f1ec514a1e803c5716f088c751d86e28f9b0f8dbea5a69da7513fde5b0f2b88db03ea53a853e2b531b702cce971a23f13ab0bbaa0efe2e2aabe8809717b2761e227cb578ff3fae9b2995099c89f397e2429d5f90c544c8688135ef82e8824e09a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6081fc9ea35b4de377bb0ce258e28e283ad3f6df5e1c2f2563bbc643514d9d4d772b357580c3618815cb7d30f3936ee4ad5c884bd0b20cde281a6c2523fd4669063652c53b3c50263b65b9f9ba40b2ae7844c356d53d782f1858c87867c96520dc2e64fd8ff2ebb647f73032759509e8ea3a27b3bc3d6c7e7252c9d264fd3aa81921e9aabce8338caf5350c6eb741a70398ba898c90aa349f1b35623998271610a9dcdbfa0658e083bc025d7a28acff0621f9322e70dca45a3f1792b144a408c747da6e6df46b0247a4c1448afb73de3e48b29ddfd7eae8c6d0fbfd2ce1cbe1b8cda8350cb0f9fadec17f25baa86e2008dfd8244e9b8075f0c62f6d5378a2109a0cf53eecd28542c132c942cb98311856ce1e1b4efff4514fa3886af34a4cf401129a48ae691bf7eef7bdfe0a2ea0027c166221ae7f1b7509d8adfc36ae60eb22c48b73a4963ca6963de6ffee9eda9ac04936b25c6f343018085e77e934928bea3e99443b127bf225daf515c9624bf2096a945df480e0ccf79bc8cdb2d250f8210b02b1a7f753c0cab2c657451df8c10d6947ad83463edf35cc237810dbbb26850223cd1f0267df56a5fe5fd4529ab4d9dbc4eb3da97f1b6b9b51077e72f0540000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000281f43a9839c27009695cf5f1714e4a02c3e0301b8ccc55671e64858f41639b653b91d838dc83e8e98c16f8395cbe523fae81eaddfacb901fc8eee080753c4d878184fc6cca79b0465af295d1ea1dd8852e52b2cd559bedabf280d5b34383883d28d716140951cdbed92a66f3d7514cabb11ba06208ded6335f0990cd8d7488d3be6d1d2c8bdf47090a7e91a6bc3922954de37c4a9ea6c0999de3b39e6609d4d8b3c6543c66cb91853d1fe50e7bc0e8b0222375d6711f52f1e54649f6e9b04c22addc0ef0344459dcbf4d39d0edcd6ae20ce9867faf70770bed4c643867b3573efccea419e6f27da2808d1138fcd40f0b4735535b3a9356dfe53d343d6d4a2aadbce6ff8af972ec629544e3bc30786d202c2b25a8498c781c843fddb64b9173e35f412af5aa7b4068fb395abd4a6e35bb71226b187f9aa0f5cb84d709432ce05efa41b304dac11ba2dc01c9aceff4656affb8d0e15a072ba32aaca42fd151cb661ec2fb7f67edd424fa9c31006f1bf98ed2d5bbde83de316ffa472e2c80c8eaa34d694e5f3a9c56095e85ec0ec9efe21f71a0996323d028873b2019e90fb91445eb9e93254caa172473a9416bf4b140f3e6c882a4b25b4e4b2e96712fb7deffd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ebc4aaccacf79b757b3edc967e474c4b8879ebc136fcc9c1be190143f6fd704b8f2ba8078368586678274685fa9df70c3451e129daf0a546799700b5d4e7d61c97803bc4cb59c8887ab0db427bda64f222721fa3909912ad21348dfa0cdd63140a0634ad8e4101724d5610c94572be65b81693cda49041a203674eb27acff58191163ca357eb909448304dab3fcda43f1dd882ef189a206dc8892f8c7379fa90328918f1cfad3480ff0a3bd992cb0db4523d48a6b085078fd5849ce99a66caf8b5a7cdc455776a32c8ed51a2c7d0196fabc5932f42a7cbd36c9af4b823b01c6f99fa68a169654d9970b16ebf96fce965d119e48688ec143f7b39ad9a9fbb0600bf532f2ae3a673663612e65f51035d15dd3ad176f88174516a1aabba1a71e2528a8deac29a98c869ed2f6f8fae9a42a4b0976acc026a19a8ab649ac78d082ddd7f6fd5835331ba4af3ec6a7a29220ef0a6871a38e52a7066c0bd480a0f9a233e7810055a0a7aea5139a8df0c5e9474cdb4713ea94b2ea38973dd64b12beda4fff9206c8fbce23a0169665b015ce72888a0cdf3e8ef2ec50132b52dea411ed9d0dba9cd3c5e7e915f965e378ccd402524748ea916de815deab750d57675069a30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000184aa96fe3ea6c50f8a61b5102f60c75cec1a48afd34059036eb6c32433374df80859bbaba57900d3bbb4811b410e34b2d3f5fd6063f9e02a87fde7f1e163c45545456a6eb8fc338ddb646ec5862495c3d212ada4a04c45a76fb43c6bfc33d7d6c2e32235ba7d1e7e4e5eab3690e71adf1f15f26c9c0f02a905f1fabd8cfd0b3db75443b630e8c307c90cf4000ab82595893f1a4e90abe8248f844b6d1fa7faa62c06108fe5f384abd743ec37d35e92d1694cc8c840d8659a70cfc25e708a10183ae87b2df07a308f4994f81224281c4da3f29bc1b2d89155d6f7261a27b01c5dc329cbef3f2edef3bdb302df85b68c7f03c918832f3622b0fc6c67fbb1a7e1d308d07fe270615bc0ebdd099284263e37e7d12156f1a52da77d9ea8603ffac27087e1ca5b0f159b945385d20f55154a898e19bbb0551497d5dd6539ce62a8ec55a1eb390080bbe9a62f151ac270c8deac48c534e441a0e1c91fffb56af4cb095145fde571f6953886c20f467c30443d577c89f7e3be17eaeec1865b37cf00fa3d0edbc18fa3d02c90580fac6c6ce45bdd6acbf4ee6efe1b14b15740b0843ae93fae8b3628c12d440b7ed14e9483e89e99c12bf3d11ee86b40036b8b31521c6f70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300d5c4089741c3f72922ee4ac035de005b26ef486043d136b3e6ec28e2e7b8ad2977b08931c54d9432781d7413e16271456d47a91f8cb32b4aca6cb3f46a1e0e0fb4ffe558e349fd8df40baa1555088fae873f35b518f8968161dceaf81bed76a75314630b2b9d53f0b93bfff408a46565d44f4761fa35bcb14b95fb0bd38b1ba5e61df929ad9d583c85f5b172423b874a486461d1ddf52d958c949f8bc228bde4864e16876f1833bb9c2f125e6a5beca006cc246272824f8370d96534d815f4cdc6aa3eaedd1a88d1fc90c4c9e63b62ec9e29d50abd7a161287c950428f804f2678e8374f1faed64418b26f94d2ee33b52e289d305c50c5080de8562868d9758a1f88424c10a0c6e55f9244ca449ad74f3ae243997855c5ba49df9ad84134ee4a1d76fc032c6d2d81ba6e0b986577cf5284290b3836f72cf70088544d38ded121f6aa8a3065959d6e8c869f3541b95db1a183a93e874557e5e9409df30b1bd11c23cffe0e05f088865c97f6841582533de52d854019f549db0f0f9d8743ff1d440296ddb6c8e488377b89464f02cbdb11b4ba74c391d79f52e5debdc3029e5554e4e7cb7402dca006ba262e2d7f7785b38439156a8e377b5dd25ba565686ba0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab2fc867f6bdff185dd724d8f99abba4f9a060af9f7c990d4490e31b1b8942ab14a7e6fb75ca4e7114b4c1e7b79b1d2012e9e2df40c5c92bfe92e23c8b327dd0ffeebf5655341c6519c190f17794495cf616ddd331b0b824da62f5a75db2ee18dd7b66c9ee390c014598964fdbd9de5b33ccf043c18c7516dd5f6a7a4ac01bc063265239cbc872392244fcd245f1cb87bb1e0a7c693369184e7b821e106ab86d92631b0d633e19a96a6ef2d474ef4fa06fde7f4efcc6eb41fb8913a67db2424f8a9ff7344f3eb1eb6a5de5bb222ec8edc0964e4bdba683c5c808c41c4fa9c751c12ea45adc3f6b8b5ac0b80cb93e8436d7aa2ff09636c2cb291226426158ea9d74dda7aff9eab5590894249e2662150b91954c89618d850e5f61bbe0a78169d4d762fc2afcbb1fcb3772c488c589119a520f9cc7ceb139c2cd14bbfc095014a7bbc54ec885e0e9f3ed5ad58788f08c422fa22cd0d6d6fdc307292b9b67e0dd97bc09bcee4a162c7d806afb238004c184ae9b1c02840c5128b00cff6ccee074de3fbeeb4d2dcea7836097abdc71a7d36b8200576cb0dee12e238a884378fa80d03e2a299800005017025b8cd0522322b9429bc8e647a3ee3ca0e2c28e0a21a44100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ef1b912cc8f6be4d2d651703dd655941a64fe36555563e3f8492bde341f0d91206aebf30f64d5629e60c4c481617005e44fe89433cd592fb9090691d01be2d043267664a6645699132c29ae8c3a0250bd0c89c52a9798717e76f444c4201f82723fef965544c91c5f01beccc8a78f2ce359f1de8013107419c41719b9d21f87c2bae732d87d5b10e6cc1b21059ac1c9744b9177581fc14650d48d8c01f3e4c29adc7e297e52c89190473adbcb1589d1cd0fca4bc4a05a8861521ec8ca67d1ba49269bc20919ef01011b6448f964fa429bc709d06f2bb49913b6b82adb50dc53014c801a04c5289898b801ead9ca5cf88db93f0d0ed8abaf18511ed787434eec89a5ed70b54f270bce7f0d8714266e8ade48b8247d2c7dbd9c81bb216a1e02222fdeed1e808f5f88d67637c9903eaff43c3ca8a77a83b7692deb5f512764fd02dbbaa96e9f4f737cb58326c56079c3a2bda746940821e975eae8b95e47088f8b212a4701124fbb8d43cde8124020087aa0a0f4c58dea8290396ae9fd51427ea9c208404cd45022775c400e5e32ddd4d53af76835931faf9da718f25dc28b01edb0861a2b973398718ca3ffe42b6f42617e0a4e51225e58a52754be8345bf5081000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006525975e6c0d4ce47d21c78992c5323b27f9a14dc3f499aa2826ba5056b2154f9fc3fd19ff29e6fb3c3abb69f0d484c941af29016bd4d213088b6cfcb78aeb99928b6e34b8287cbc01b9559ab8ec66bad1c0dc9e8ebbb37ba4de8ab6efce3a0877b8b37ceeb325901509823abe6dc1ae64d554ca7c59d48d9fdd54ca84503779d4bef5add5d9aeabf9c647a815676fd4f4644d00129465eb72ee26d816bc133635a7e0f3ecb18f96566ca60b62976b776ac8f9fc549708c4656bb89ea5b2956636894d82737abed1af6b5b23da916ede599839dba7d703ce73f291e50d879137f29dbc1f96a1b081b4ee657b0ef340599d375e5c79adc3a5968a3ef36d7337dfd2694097cc8da879f7acb60ba086cfc1d2de0a3075d1b18ea779e3d65164c35ea190bb4633a901e05bc5d03240afc9a1177fc0f80972052c1039f015210cb20715b9e7aa0fde8850ea2f9e659904d581d320832c17cf1e86968598fa2fd6e9ba5da23b28da63eaf61d159fa960312d5c4da576b3b46c499c539993d97ab80156121bac3367d0915f6df16491f55dc4ea8229de56c40e325878cb055f0d9f95d28e369b1749de187b271dd76144f7dd72595575c5b3b0f45d0a7c5f906d951c3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012dbc4ff9faf1db5e1ec687ab8d97093a0c3b99e73a6669abbd7dd8cfddee9831baabd687dfe681e69ef13b9ee6a846387ee0a1b7bf3e0d1de2dde586d08b75af3380c31bc16dfaf1b14308d879efa18381de4f6b2ed61d99e47c45dd82d07aaa7269c90c1bcae9fdfe618ce3c91cd5ac97719420a6687339c7cc5b854f9d2ceddbc486a3caa9169f6bb657c47c1378a5e2087e32284622aab77a4c084b3dd45043e40f83a5414f5f68438638f603e9f460b55efa67fe3ef677c8821919ede71797ee1a71fdac594e3ead16691c353e7a41a5b556f1f49884126667a60958d6d33c6b7aea254b47a6157b3e96a5319621edaf42822eb6ae262213482625a3a80224becb673afa8dba81b99e19f525063f4bd0e1a476d314819cdd5cb8f0d6b251678876cf89e4e7ecde9f23b332701ea2385a7f8fb8e35f01ff894414d14da99ab01be6be58fad36fb48f44e26bd0eecfe7bb725a085bd6b3c11ce0b07ad9fb3018459747dfcf522adb499d52c2e68af851be9fd338d0991e0d4c18e0eaf5d27c636d3082f35bc2a77fbab9ea91fbb72fd8496982068886effdbef82719cc883c64cbdc33dc9103d7ab4adb4533a2581476d9c7dc1d976fa50105c4ec1c6dc130000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8cf2b541216024764a892582f710ad33db1893f8485f62f07ffc152ea0a82d12d370b8c9fdfe8c61f11ea16161077f81257387042ffcbc8a2a113b1aa2fd9f266098bd05321cc6a5424e8f8317fcde2c31af2605af028f562dc591aff3610c6356cdf3e904672a9231530b6177951e1859ab4c03f0ac1a93a4f5625d732b010cde522fe4b9b17139215d71bf33e9b53123f23fe0c0e37e113f561b86d228a08862577113b6ea5ec1697d8a3592d2038c5cb198f56e3333fa1d56bc14c814a08f568aeeec77592e50e1b7804606aee618fe85c89abc2d0fd8f90f833bf3c453042359518f066c016e2096ee653cc3a805da752a1558523262bed77339bc77020ac35fb7370e608fe0d7a75c77a63ae7885ab03421e328e9a21cf0e4115f543fdf20b307f8fd1da6e7459f63d1e045e01ed8083f03578afa9846602c8a8b61aec0cdd69b60ba4140f920874732a9020d6bc6b36fb8cd9a4f0638aefa6a9420e58d062eed39a7a03e0ed61d39118bbd4355426d20090c72477f229815ce2a45c95d2f08eb69305efd57816727a14178dd714f07e332e369fbd7fb2ff9c3801329aaf5e7162bb7733739c5e263abea1471f20dd5e7404c065f85dd34ccc845d7c2d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027e2e1d98ebdbf03a3b6c8ca2df42819687b35877232455e0f118b29803ea6062d43480599cddffbb59802dccb82447fa6949f38b514efbf8819a5aa5c18c3d46f55f7c0f06f68695fc3032a8ec6ce4a84fafc2e0017257f97c5f4e27aa31c4056534601970b56c5a198cfc6af83c351b097645f1d6d4a9d5d5fa532c6fd1ef454faa332b33c317d01847520d16f3fec781ba08438e2f5eca3f42b64b98b77230f579ac79d63391d1c4f6e0d76ed8616a0f1b8d5bbe6abf95ddab69bb27cf90b472ca794ca34e2313b73e7673e21ec9c1d51b9a56a962ddf483145b25ae71a82dac3c9346417d50101f3c50115ae0dcf7641e36afa58d3bb5c2561f022f2b293dd79319f9558030f66b87322ff8a04439a5de06a43c8b898ceca29f4c28f96a325a58dd3820f9eda04350903ed97d0b8cab21ab686673f578a4969d7590bd96cf48fe6ae71d51ca2574fe3bf2bebccc5410102ca65ea72fa06afb5157bc2fc1162abf52fd21ac5bce47b6641731e68d047fae1fd65b2f103943ff44f1e84951991eb1e4cbb79391d80d6b44c289d1fab9eca972d616d4b9973f59cbb73745302aad73c9c19fbaf8d65605c91ef3b6d7a6bd9e45b22deb6d0352f34fb6455ea7700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162aa736043e48362adcb50387f058d2b5c7b394d6d62a7a5891981c4d989b6e80db615db8402eb3b1bfb5f7feb08cc8964fad6157f3fcd31dcee82e14be21eb73cfdb117409999a89105334cc990bae8f5f01b8267a4a12975171cf90b048379d656f8903ba9cbfcd6a2c9c3df15f482eebcb8a8d3034bfcd5f40e3c5001c73f0efc2ced7377d20729abc3026003924c0667ea5c64e873dc8481fcdf26ef408626c669940c1adb120631ce359f41ec9e3dbcc466ff3ad2c9c7612b4c5d8437a1539559630b53d3ff8ce816d55dd7df89db76e263597ed4bac049d7c084a8b32e87b7f255622e4831447cdb1437426281adedffe679b437ede16ae7ad2d65a4a4b3f4c5529e5e5453ec1acac5087cce3428adbf58a47eda0636b269f6d41de6ba9260153f537530e6205a72dab39b0f9617a5ef48d842e1f589a4978171405aafd9973dfb9e756608e60cf1b0275e4de33172697b825d643e46a3d3e6bc7339e773da33f5ad23887d7935bf2aab26a65f6724485c3769f0e4fae1f0be172beee6ca16208818d456fb5acf5a092536664b5d959e74508a5be6ca087e2ce08b1fd82edf45f3a6912e646d2b606bc043dc2c94ab8ada2e544b16b9a083643635f6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084842a67170833fee7d397533aa93ea29a544ba6ca83d2dd9e5d0fabfd3aa8f67dc0799a5fb0755bb68ef5b1005de43a283479183b4eedcf39ada19bc6d5b994200a2412058a00fd801c6d040f040a6568112100e9e3b8aa63c05ca704b4e815e1ddf95ab3a0a9a748e1924f857c23279cc177876bc8c1c32771ece4b3bc94895e5abe368d31e0f7b2a4d54d1ba98adbb0103c13b50b9890b2858efe1cfacc6c2a89fe146aa5c4f4daf1f8fa50aa7e37955b26822bdcb21648d4bf60d8794b63a63e0e99502d47f03a035bdc08e190e8646fa946a775b801cdc09d2fae7f8a1c8898e4db2707632245cfa516688ce71cf3789d55b7135090b93a818e7c4cb0d41c235e3e0295b86dc0839a6f62f6621bc4167ea58629292ef048e63e3e720f223a49d331d30dcae51892da7a3f02fb7c14dffe0b17a9b898c0d783ae1c81ce59740f60c79e9ddf0343d93f053f8cc8b7a8f116003e05b62a39c6399b68d1eb61820abbfa1805731911efdcf4695dab8036ec3400438560e6b786aad6d3fb71546a5800d64dc1e719637f10a7d787073c3c451fd8ada86cf02ef5b1b789fe653e401870920aca95637175ac43af2f577db16606d597d41031466629c6b2b2155c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d9ca91a37e4f8367794de2635c55354075d6609e50c89f6a5b694ff7f10c3e704f4e9ad6179da489e765473fc5ac7e0f702bfdca792d21d7af5b22c5125aad857a7973b3359de812d6fa34cc6df02fa50f017d5fef2706f7b40f579afc5cb6cc032469f7f1c808a9068e9286358800b17b7f33709da793da91dd2f14a33781aad871f86d2aea32a4e35e7482fa11872b9e1271bf3f54628e8ae210180bc7ca91d256d76d1ddd7151a758118c259b9a0cf1a6fb2f1943a237634c5cdc37d9bb2df1bb5cf11dcb52bea273777d10a52205bc1b7323642f44eca628eff0123708d2ce61f534ec9e963c0c052a5b79c3138c8c383061dc84b6f34b8dd14eafc117e83238471f994bc966b9e2d1831d0549957e7055d4615558a2b1feb97af2cd7280c1b5384ea462f431d037976f8b689376ca11ac7e499e6a89c29c00e30fdf987312633c00dfbbd72138df4fa49cb2de556fe3d9e58c0ca8983b2660d580c9d1446c9308dca3fa3fdb52f457a1e1d104ebbf4741c21165b660c5e2683595c01325e127d328ae0a763f3ddc5c0d05028d5c906fa2f503660e9849a5d7de9c9cf1466a490f54273007b8b2243eb38c400e610369dab411f6ea6bd8d2b32ccde4ab8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025bf329974cc8e17d639b91b7f018316dd352ffcb258064b31a6c6d27f784a0609ec770a20a95367015cae010da487ac2a060d119c8628f0f9b4d55dee8a8d0638f139163f2104556d83f4e412e7c3237d459fa7a2e5a1254412bc29ab95a729f8642154c6d84665efc5ac15d06d2f33f6d3010b1fd9b4469c53f0c95ca5bdc6f0d0b2669fb97ad0e32a72eaff7871163482d9154aabf762210bb97e7397ae2ab719083ef22ea4afeb82c6df40ec98ced01c4c07fc3b1374478f64326aa7ddbeeabcbc7cf0fd420011f7c5e794410dd7fe4649bad67417445238719a790ef3d2ec1537f6c289478ec720e1d7bd99562d25d0e51a506bb84ae70a931a622b9ac580fb9729d9f71563df74f90e03c3477df9d466301860acb75b8cdb697bf0e9d643eeeed4253909decd73463a9b84a0dfbcb33d9cd2249d6e8c1ebd77a31d658494fa6bad7cdbb75ad9fd956bc9a5ffd298a569328e03676a1b624079b1a3b473785611c9f93086c546017710c84f447bc1f65ad670e1de19a4d11a2fc0f2a24b4c60ba0ec86fea9c08adbbc003807d1d3ba6d67a9a0f33a45de83c50eae6fbf6e9b41227c42b9a2fbb01d2c94892da855ee365d0d7bcea8c72334d201d7a438300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b834521f75b4f9678083fe3a723db4b0a132f8daf5eb0781e87daef020127e05cbc37e033f29e63b9c5cf6842e786dba63315a64d090dc50d9d0656ade3300b4d8a96d1e8c19969e84f7d92249cff8a90c48d663044604a4f8e1b84ceb68428a926693d60fe9c3cdea6e9bbd122ce778abb97e0dc13551346d65400e4cef5b057eaf88bcebea07857c28b8ddcfedcd1a4ee020235686adcad80ae1871f34f8fb873aeaaa3bc0cee49403839aaefa09884eebb2793b25f774eace8a4f5bd8aa664444ea3e010555bb87be2f1133a870b119ac2488b58eff187446df3b36cf1a99f1ac3fa809e8acab8c905819c5b4949194b259a3708df97d6bd2fdaaf14ccd3ea369f2a39402190d60c98d430db964b4a9130913b812613413c3b7d5b018bbe3fb56cfaf9515142578f570029247e2ac2c4a2daba16803b9fbdf418233f630411db7ccf44dcc99c8f9ea6d36aacf579ac017913c7aeb0e0d3f03478ce80bdcacabc98164ab9ad746da7844357ece9f2b82486e364683c301d28751b7a76a69655ec58f6a5307ae43bdf28a328cd177bfa3f853f3df900ec63a04d9c347c0d9df2608c1f6ee35a6ca92e562932ff8516d3e719dd7af37d6b90cb6cb16ab9944900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f94f86f897a5c8d74a13c0186613de226452726fdb380b17e9998e35243617ddb3d0c21b69cf46dbadc7a52a1f25403f9ebeec158e74c7e3d8bdc7b6b65879c97f59fdfd0272b50354d629912c12108d180f10136447d3b27de1b0bf46fd321f66430920c6e5a37243a2469e5001964e1ed190e443d3183edfcd4e470df5fae2cd8dd7d3b1a554a7a8e71237c951fcbf90e26bd36f9633c35154b1d3a73361dc623905be1bf817b5c98aae37c70cb1037444ac4686ab588aa1fcf0a0164a3c8e5c751e8200065655ebefbc1421f17e25ba49d030a7ea88b7a33323969b3dd044597737a86a4725e8fd122c15a3dc6c3765fc8494d227d08858686a1758a0efe2f6eeed99335402de1c2105aca27c8673c0d54949c550a27b3d1d087b9d060617af219d84ec644f577145526daa63b9e208ac93ed10348b4c7c2f635d803b7df29227600bb8b745d1c5bb4b6a105bcae1d716b42c283816ef98dfa03ef3c87b08af88df11ee203d4a1fae47379d85c8f23d84a8f063ed683ab7b3ebb1c64b7f858e4c363bf73fe360ae057845ff86c3cf422c2f69b7922e7f078be88d75476748f028e32650378ec11d0fe421ff1e47df310604808ba626ca1d08dc9808cd93600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dd451361e20ed70dca312006d7f28bec7a73d13637b9b2b4f659c291d3367098f2971f4f6ab83817a5f6e98ba91f4ef47d8839473582b4260bf77b04f59c8e59d47fdc1604c172a177dd010e9594b03ee635acdb9cac0dbe21472bb753d4dd818e505abdc18d1a84f891edeaa57a07eda0fd7430f9ed288dfb96861902691acd2d9cb4eb900ed91f598a45c5effa5d2a6ff4e83490bf50b0737ff25475ae5152302eee587064e1703c0ed49b812200c35eb77ccb8bf8ffb2c4eaf8b772c4f6f307ac6f678f2b7aaacb124f6c7e20a8e2b62448b258a084c683bb7916b70a8bafd4a512432fee3909b58c521e8fbbc08c4b0007806bfd779c7cf9008df218a231bb69d29c04655494099771bfa7ac1b1bef55ea1b22070c14353ed97f18f0c703bc5279706c7b530d27547b032b3c72be2c9abf480c155fbe28769915da1c66434a1ad39ec11133e03b1125eed504c0193075f127f9b04b7ab9789805e683c69376543bb39005f56a9d25ce7a621b152ee3ff3e42f36f5f4c343707b5d804d2a04361da7d187df116bb9969d2f7bb814ff3781d3dd74b50e9740dbb4a02248cad357abd8f81ee85676a6d21bab055990199c73a6190aafbf256cd6f8c045fb5200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5345cb463b54af0713758905dec7f38fb1e708710c4b7cb0462b42894c12147a398be5c772124e2af21790aba5875c1635d364bc3a431deae6a05a741732b2c63d56c47f86f6dba4d25523286a642c5177eb06f435ec7945f553c22636c8f6bd07086fbab1ee6d39b4763f021a00fcd5be6ba6765b9eab72679957193071ed6658433c82ccd4229f32e2055a1a8e48d33b2a858901a749d4cd31aa045b0ca8780a4041b1cebf8d32484ed5ed32829bd70dfe3683fcb0ec64b11dc18a27db48d2f26d81e77327146d68cddc3ca0f29c970c889ebc5f7c1de96991360649161669b5a4a2058a27d21e969d104e61bee6162b3e35e1f45feab9e46411c1875c50085e0582573c4bd63022db93ef941b28b5340849cbc6c53da05fd5307cf3aa7f740f516308af83d50e852fe66fd74d362669f03976e9dc4699d8be9ec18f7bc85c00226fe6e9bd5dc5a6d6172b2cfe095892e73208799a9c703e1b9120c99cd173c6ccfb5035888e6f6c5f340c73fccfcf35e058a641f08474db68992d332dbeac292b97d36f31d9ad1a88373529b7470ad9a4fff2ec5e94c31aedaa6ee590e5b9d25502c3bf291053764451e6370e35f76b7816e326fd1fbce22fc340f5d78800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ebcb926745e8b188f8aa280a13484cf266e090ceedf7917d6348bece4e62bb42c7d5d8d4b0f9d12f720fb3455b7c44c52f16a84e78b5e9b622fc93ea64577c116c89c070b58ece66965a16060f5e47e93743e3760e02ac23acc748b3156702d1dcb4286be2c48f5e7e319a96ba115bb51ec643074f68d05e267c2aca44b8ea2d506e5206a038d3908bf7b780c0b4ac7ce79bb9fb2058fbbfd8b7dc1bd3e1a785b5dacc48f545a38c6fc4fccfcbb227a642619dfcf49b66d3c0b85525e313afce45f0c4077375c5797a6b05af70de6be8cc9b2229025ef6519ff60ef3183cab1c415b9ba67451e3a2b7ee07e5aa00943253d1d85fd2593ea7d0274b57e7276fa3a81cbb696e42148cceecc015939621e1a0bb71806132a48ee7da66b16d29900d2e133c82817a2ae8a3e6989207296f8de3f5499fbed9cb16c03be5ce788f5c49348c8d1f9b3f27b452fd3fe3f54e31b61aeb9d1ca39e563220eea4dd13e6903ad4e6ed330c3bfe4b06666f89f43fd920d953cc4f6fa79f1d7910873b82c158b56e6b5f12f2c745a622b9f9278baeac5c41e9a382fae639d95caeaaa10ca97b4e24aa9fe1cb54336f18a85fbc374946a3fc99f054752de34f4f7865e79d2010f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017b37430dd5335414b9ca575309b1c8c80b30e3e2e90ff7b26bd37962e16c2b7018706725fc35d734d6dbe039a4ad27a4832e49dea4ddf74063573a8286263215c308d98f9875096a6cbfef083c7263a807245f638513c92db17744e50050acb3711185f37db9d2e646bcad3fd43bdf3738846c3563c47b48585d759b824307e64cf9ebb9c83eca0d2099e09330ff85b43c4cbb07fc6387edd59da0a36c9c5ec9565854f2b7855b2e30ff17c2d10e9a04595754446f02b100396dfb250f9fbbd414b9bb857f8bebd8548cbb037d2d5d91c37afd40028744808bb32536d184916fa31b5287e90dfa6c5d849db7282af1e43d1ca437b9433ef9d4e3a6bd4a2263477f302da0bd66083ad1d21b9ae32057949935d791988856fc1d6a032c39d170fd7ca8832e0303262225abb4cbebda85fe6e4883fd0a1dabd59474f66f61fdc791aee4959667ad879c1ed926d7a7584043c95056b93fddd86ce17cee8e97b3f961df968e2bf87697da375624074bb6e860e4c578f975d197b623d99a209c4a575bce214706298dd6a01b1799220e01c9e13c3aa3f9df95de1632d3feaaccaba181dab98c151a39fd5d3233c984ca170eac45475726c2d4875538ea483a515a6a60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a095cb8c6e282eab2789c4d94510336413f2934984e87e018271997c59f8bf76133491ead94d3ead7adb100953dd93d6fe06f6f18d02d3e58b3f410aa00411e443db159da096533698687c972846a693390c810151b94ea53ade7ae14573a4529949e62d3f0bcfa96ea6666c1a229a9013d38ad1c47e75f2e219312f9a561a9e304542a28ac8b09273a1bedb1b654f6e61215c244b6b635464c19be551df92fdc3a1610c46881911e1e739a70b2d9aa63b9d29598ef758bd5bd674b3a57941e612d21c2efb75dd50c8c53ffdbe50fa4d78a0482db4c2a0bf978dfd3a79ec47c520db6960b14f3287ba2fac6d1c45ee074f038e7f15c3c5fa1d7e33fcd7c7236276349b37563ed11d114a5706b8c8556c07dc0d4360309d610e1592544837b6c81e2fa634eb271aeab1f8952483c7ac77c3fac567c0cabd27f9018798280e78bbf1afc6381529d67300726878700dd2a840baacacb819b92405e3f3efb222115eec5c486561b48a560f937bbade580bed636720f12fba04bb7fc266c273393a2053ec5b2b989fa02fd4844b002c51732f2b6d91e813166938fa169ec8d6a94f9d315cef21e60e402433447e7580ba4379c911b120f21341ec2a4ed295224103c2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025ebe7ae933e25100056213e9fa368f16e7abbbcdc7d1a913d669aa27f8cc6370143f0777e6b38c21ab7b4999688e8eac1efc51a0f6f7572c31cf2b92eb40cf76c7f0a8e9430d63e4ba676d9baf9869fe1b1d43f208cd5c617bf8eea13f6eb68d07bcb8ca3fb6b9bda9084706f1c7640e8b84d14bb63fa797d2c6e6d8cf605b79d955707b7e1946003a1990348f60c38a7e591fefa3fdbb4321ffe622dd5357770d5316886581d4743302d8ad19af12d4296ada768a1550512fa6fa0be1a5f851d856f68ecaea3530b086c6e2fc575bca6c95c7254d8dfa40577c77c1091085d437ae13709e1c21eeb8580d689d9110366f1b04a2f9130f32e429f1c68558a77c14e4b6c9b2925d2f035d224975ce65d325b75498ed25f1a67d89879ab8778e5893fd514852ce0e280304613eba2012da81530c382e9b662ece92dfeb8a77a4e8c86cc2ca1385e8a1582693d5f626bf3ae32595dc9a34e4963bc69d108a8cc41cef3ee3ca66d45d7fd8687e5a1da0ff016b12bec6ad6221d50f17eb8510aa2248a2c478c3ed3c1259c78c825044cdbaf759f384ecfbfbb85371b729a7f8aed9a858613b6d77f178011ac15f0a82035e07d16be295b07835832398c4563c210b2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007642ffe596a5275ec871a46e28bf9983f35f91261d200ef625dbc74a071a35403c379c004c3b540299dafd3236412f9cbb4d008bcf608717ee1abc433990816154f678b058f8ea398976c6e8b84522428e951f6e88f0cb80f3830ef406b8477c9e4bfc275b599c6de2b8697f176dfc1e9a6f9b7f738795f509be41cdad296ea06954d557ff95d6cc830fdbe65182269cf5f20361dc6930d8e2ab454e72c1ce1c78c4976fbcdb995105df50a75a0bef50ef8af7a217dc39193961176daba06a0ad1393d751dc8d6d532c202fee771324d6459908ac91e0b16a6a29fd7775f246ca8fe01fb0e21601971bc636cea80c2e27c6e5c180a7103fc53d7177ae8a94c2e6f0560de526bcd2c1373d99256afb42a4262223aa820037326ec6b0dae6476c1fad7b429b82004ff2f14baddfe7f9ae47701da8f94e7a7f4daabfe762846c90c0655cf24e5b5143b50f4ecf54ddecde8694087a3554f05a23e9e85877074de7613b4027c24dcc20edf013dda72deaf55b08315edc32a6093956808cfcf4b8d6a3d4da4d0075061e95cbc32df886b6423891d7fe8e6fe8c1fb21eecd92b58088bfee73ffd0e9c024fb24479bcc4f2e237342a33a7a437c5ff035549672bd77ce0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000967dd5b67aa2b7c5c2ce46e1140d4e075a3bcf82679581a8aa320fe5f4cb835aa3462791553a1c89bf28454d81217db8de0f99994368378eae6b1878f8532632fcfc7302fcfd208392ba80c768c265324f37faa55549f7218c626a8a4e1b72cb81685ad59905e3a5601f3e636a5de25eb2db587a9788445288b89fc58aca801f2e8367db0b4a64015da597ff65ed2ea12167b19cfe79c8dbddab2226b2de1aaec347f55726834869afc5c1642871245e4d54ae0e015b31750a0ddc2f94786468750bebabe28fa9a0a443fd3bd60ddaffdccc91e9f453a2e901768fa7f4cada836ca83a6fcfeb125c4879713a0f5397574553b9819acab87bbe706b04e540b716515c5b086ec8b9aec20a32d5e21338cf4f3ead6279c75176b7c573053b7151c748e0f36dec0d613443e125f852d732bcf0fcf263da0586dd834b177c81a9ee479e6e058432a0c94a4cab4142d99664c751bdde428cea9411ad3f70665687dd72dcacb03878efebb556c099cad7f4811e07020da08a99a69055ae41de144ade7191da53bbc6ee555d95d3604dc3206c2ecda72e07f9e977741ab4acce41e02a0370e495bc7c62de5d081efdbd36ef7f73ff6decee951f6424d46bf41f444e20140000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a088db281ed9161710b02d7f845e84d0f556b30e9c54dda7e59bb0558f3806f31f4a4bee180af0224bdd47aaf8d5a2620fc8f8085bebb456fb430245b26c15bb727116b153653f41aad969625b3c3011ac0e93cd492b76bf350494e591cb2c168ef9f0a62077ce9c1d37de264f210b8b61205345b89f249d0fb37271c75d614709232e2449a9720b935f648b88be381861519648bfa2d992c2a16579db0885848fcfb50625e2b3021942bce63df93b615f5316624270698e95d6f93abc78659086dfac8d8fdf432028dce384aa479c4b177cdf52e2410d5b7278f71e5fb21c8d82db306195ade8ae4e0c290d1f8ed5eea119b64cd15362ce14491a22105d7a7d3da4c7274ace43f8692057155d0364bac1ff0c8537dce02506ce8a84e34efe96f1d0cc02fc8342b1942132282aaa7459ec3ed094b7c6c900c25ea6d4d711f7e2208d10db7129151834f8d08dad9f82d6dceaf1e21f89212ae39086e0b45323d24c6bac99c79c70a1b519c7572d19c0f241a283d0e99938683f8e2b78a38d5dcf8e0d54b70725697ac223a48002634c0bb8a6885035d70a274c0d9ed9c14ac0d63bfaf6da835263cbde762912de35bb6a52f44ee2d5d56b26f87c29a3a6b907ad000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016eb59552dc41ff0e8cc971e5565192345c0d9358314c1d0eba02efc488f03c5a5ebd01db453b9ac3ebc4350841afeb6844ab434e101adf9b91fe315021e4cd9e387aac747ea9ef8b7db1140f80bff98d6a25a4e0f184c5261e64d9ef8199ae365ddac6cce3d7eb64aa11da196814546c2045963cdfc964a7f0cd624083eeee82b54e94c88a317452c1da64bfb7f544a2955464cde766b63d9c3a92fdd4dbdd561f0b41ceb7b2a8be79fb8e44a344f5db9bd5c51a711e1a1eb2cb908fd30121d85cc2db84eb3b876fd4e9b6f6c326e3eba8c9209c29a49b87c4bf9e59dd168feab1c76c3e1ddfabaea934195ef5f59a59fbc67797c0ff848fd9189000e99a8f9f08e5b62ed5307adbd69ea81c379dadbac750cba6175af680740645788963494644c1ffc41d0557f98bc88664777d1b580ea3b371489e16a164edaac0a69e5ce789d0c93d874b23f7aab2da8cd2a2e45d694baa156796849454b049b77ddd6f1a94663236bf6b3482f5a7c98f20d452bf1ec9759abd640b06c29fba9cc084d06cf2754062a836931e473f4dc2f1f6aa3f1135bc56425df0da7dc01c27d5f01eb2e2dbb329625a80a820576985a6f02164c4384e78dea8f4646272aa0219864ee0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8fc862c10f64bf9c756d17346670322d27cd2eac50a799e3ca47fc94bd13aa09d130ce04fcdf3b693e4e7efd710bb93b467cd88678c733698666709790bee4fcadc6e3fafa8dad6b7716069ff44ee6ae4e9c9fd61ac99d301b3177d14fd42b526c1dba574c6984655e4257723ca99f8e46463ffefaaff01133e9697c93c08cab649098730626cf72b98c4f4c436d16a798937b417bdcdd473eb4fe6e11034765a59bc23c61857333716ed1e6969c9fcd9e030bc2de7e59dfee4144360e511adc115da70347dbb204e3e70b348d686e994c984233e7537c999c714aa5b1b3816a8dbb79d6a87a4545a6a52a223ff7ec3126d9bd9a1a54910d3aaec8c3d3c17a1bde4774448eb2324599b476b74876b94cab731ce38fd6245c894366694124425219c99462a39f6b24def2d269c604a7104020c58807e2764908ab9a747e2041c33da2e20397d54e3c419312f86b204e66abaaa91dff350709177b8df9ab23ba47845199480aadaf9d252892594b32308b8f26e2a8ca3a29043489c1019b13846f1679fb246d7763309a9e7c99200aa564ecb768ef05b20f731f5dc29609cde15714f75bfbb81fc77b14982c88103b674334fd409889d6e4623dbaaa61693afa600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bcb809b11fb3e51edef276515e1f51f7c62d12bd2f5d9f79f7cae20ab1f45e9e363ce532ca81911f80b2caca1a7fdd5e4dc882cac17f3dd3e709b645f0407792e6407c690c42b19522689870e7750811f8ae7b6c472041b30b865a1bb8aa136524d1c3af822596adabe039647684db505acd5fa33d5fb7a9d20013e1fc52ffa1ddfeb8a51334f05f708ab8933770fe571c0a53bbb623516ef1533c921be300cc077dddc9bf277fe25086e48128b6a321228b12de35be2dc77b45fa6a853bdd53f1805ab7913cface7397845be844f2e6678ca7b3851e3e4b6880a3682f9bbc26b618560ecc0bc71d5bcb109a3ec11fcaedc00859ad11c75fd5eab449408a385118f9816de963230dcb4d29c3dac61a752f2809eb7473c316ba4f8ba1545f88cd18c814a051551e9499ebbb851efdd2c4aa9dbba335e0ce9eb45e51bd25ab32fa082a53dd264ac73ad94598c0482bf9e949513a7f59f65699f619555216da6ade57a1aafd0d683b866d4342b5a2410c95ac5cfa17d1f695c90e99e00ca0b6fa6096674cfc6ffe1759e514e64e84f516df0e58f57f92da381ebbbef19368ed6702cda98886868dfbb0e82637f6fb77e91adf970031733b4c915b9b385d20ce17d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091f4954a5c80601893fa83c4ba3d8f696147c048edc6a277ff73b832c2e0b902b28ed93f9e4a6a79160d7bd202d7eb0906ea0ffbdda5dff54d5a4f418b61c9bfba547dcea2ad1c13a9981eb217cf4785fb5ca0432e9f8f6fce87f031b2b63735c0b010bebc23bfe358f61bf1c83ecefa703d4498d9c5fbd132a3fe0cffb4f15e4df509e298160d99fb1b8eabb34572a2beeba145dcda9b5cefaa6451cd669216016ec64dbe74db5d9efcf69c500762668622ffc11a0a37d5cb3141c5e6df469d01986e5d7e6efca3770bf9ee619ac7d90b4d409af789b579878463b36d02cbdd2872336b3f5f209f61c885fe9beb81302c2b29f84e94fabd0a4df4a3f04d72921c6c88ff4257e7364176c25179becb480037f77e538e5605f7e40a0d129e773f7819e5959f5fc1396595024a0c51778ab2914635b3b6f130929db20d1492cbc06d854996d57507896788a35c0f80f17a0b17ed5ea3cc924cdf33b17fcbbce73308ea8c50397f004b8c711e02d61119a622c015c1be16e3132259589b2a956d3e40372959ef63facf3b6163733afddbd1bdc6e4e954e94be211072bc7c41554c6a009b190e934e4b0a65873c6660780d9f281b291ea198c4f95b5058f0df7b61c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bdba1a26ae8a91db1a52e78827618816c9ca7f758bd719e4961eb32f66689e71e9bd5be3f87f1d4739065e4132a795bb0e9031dbc5f6df291c0d7c1bc0913d5b19500686f082eee79eb091345cdab7c69224afea51743493951bdefc01490b81493a5b691ac76c1fa16669c2d21fd66af67a9d65891031622e3945afe25c464b617a1e4d2e75df63010ddb6c648ec9bccfa0f0ca241a490783e4354442e22524c4172d3ac5bf4b902f0200b001f7f8b8b9ef42d3fc732b5aadf88a2f3d0b1be6b502f15bde2a396d7c12dfa06f809f390ca1274beea4cbcd31ad2ccc532c1c8bdf2192000c1a290542b3c28dd37ae3fe95fb92a544648af3f6437a1e52edc38c55beb4698fa564c819b6aefd86f632d98dc299671e34f4eac95e8f5e21a854f5cc5029ea46d0e3a9b177e894eeee9498cc54bdc0f9446b9ec6828b085e902a824f101a64384d453e814e1317d71c2f17f8c92d11dff758633e8c01f5fce9e2299a47995a6ba3ee0664d0b9ed008ead67287bac5817fa3f22ca0dfd57cb8a5fe632bb13599885035b24ca8aa855ea69a11128839496ecd77340cd6fd649152c8bf8ceda0df08df76c6bd4fead042cd028f6639642036fe9d20062a6c2a7bd9fa00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e6ff47c41d03009cecda1b54f561692a3fa5992b199b5e7df9a7f7379489d6ff4564fe0ee78e7c01e4149cb2373ef16e7f429dc5521ebc535002ef6cdabacbce33a8bd19a93c9c7b06d6c2ca2a4d940714d3af71e342443b99d3e2639e673afeeeb09c3c7e5c64d0912312748cc3bc4cf0a5a47b45756611073e2f0670a62316f6dfa1a43c421f56ad51f7ad959c404d8a8514f39f99a0cee68a8622f30bf5595f2817b5c5d097e4dffe2e43679a168a3d0061233c716439578673fa912a6e5b32ab41a166943d7c33ed65fca40d06a5bb7131d64fe16b5580053e1f24fd66c257b2e933154557e5f019291364199e967e850bdbf478bd8a01b8020175782475e4584001b63cdcd85bb190a37ec1401f63b87874aa5c923a388d8ef989d89008c976650bc59d3c50baa3a30d6b342c6d677af69a520200fb4bfaba57796f24353092ad29374ac942380e9a371f8ac5b2f1677ea353b089a19853ca1a51e639f8ef4b89dbc1a5641414da8e3fec770ba116c576bf74832004a726a9e7bb4dd9acc974fe47d7e5092939104fc15ae53e772d3b96777ad49d076a387b523090d053482aa496ea966dac72a960054bab97e2453f65f189713b5d46382ed93052c3e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000210cebe82ce5179359336e6d7378accbe6a3b89280e84b60ee0d4638612ec41c6aa95dfc8bb256016e4ae7e06306e8f9b26c4395964b7d6ea1fba01a2a7bc2bcf70958c6d92ece3c696ec68ae19953889cd775d9651b0bf2f6ca3769e50ed6202266aa49c4195043f6f1a1e1db0d7b6b055f2b81f93c594934e2948a494741c40bde75dd387db096c40d8557719a2443fed0ef2dd1d016f7c8cb35b02bc9c6f57f4ba92a42b8f240013e37e199cc2fb4e8f8620a12b65cb436b9324cff37bf681bf8b55b65bfa212d37c3f9743f711a2bec908eac0f3b01c794796350824560c23d9385c98a35901e80525c684edd978ceaaf78f098531cdde6b6ee218ab599afc454f498f235260f1075ab45953fbdc2fec5b75811f5bd50e000ae03e57e333d296d81b0416cc79a783c7c21232b2b972b8a497951e6a4ba6a35d388abde81e8e448a5cfbda57d6b39bc2aa4290d291f53c5c5f6bdaa28a39ec38dd54639896804bc26b00236219ec2a81914b61bc219ecd05082b76c46442f7b4841cddcc6d8dc70e9d0460499bb15ca1fe1fd1974f7400de118b4c455d39b9e054f79253c77dc250baad00881d299bdedb4ac1e203ef2b900b3cd90d0a15cfc33109556b9f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ba5fce491f2fbe818db5a2b9c9962b7212f9f38bb72a67d7849d59fb4dd5b9d817e6e0227702daa4f2ae9b226fc99b6ba6871cdc761e2a7956c522e2990dda8a778b4b17179b0572827cf0f69a5db4717de44870a0f9388ce0686cd15e65d74fe0f5b5946e391757b0755ad5d51db256e34ce72103c946cd3b65db0cfed1fec7da379fdc7e20c6bad0a5f438ed973c660ac17025018e519b647613efa56d7d5f7c8358e6698711159615dd629930b8a99c9abe045f4d941fa725859a0f77a4bac2ca08b7c4ea48d33b2d76705904575a45e6c58e5fff38d982f2eef82b9f18e306b1b5a6287452695dbe959abdfc48224395676a541fd3b9d462e7d1156c398716d12accd578cd125f9469beda5950d7f28a2fe266b268589001a1b648406553e2058f251ff68942eb3e2dc9730e0d180472ddd9d4b236ea1aa74055322febae2f5eba773bfe9ec3405b0e5e0a0e90f31e81a2fc4bf01990f0f3481732ce36f2a04d2f2fb4f7824905f370493477bb09b5cbfad8c590a6f403d1ad3b3123a8351e51847ac119d98bbb1f681cf39829744442e63d578d34b315bb426ae517f7c0d4b968549aaef7dd2d351b578004e9a757447f4b89aeccde0eb4df5dd3214d400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ecba7221a3052b60e56276c67ba06a3310fb0cec9e0c37d0fbff412a3630b34ee9f083bf6c4ff90d5ff65ca44e562926ac034509011153916b25b5c4029887fe2ed18b475edb42fd3aceadc14e7dcc3666e901cf54ff3dbeba0dc7e1c9b0d290e8eeadaace7385afcbda273daf719d92f8a366a6ee0e497448ee5f727663750b6a7c06e6f88426100e3ea412efa90781db5831d3e80dd2132fe7719d3fbd454a44b3bf2d3517abbb256039b6969c2abaed0c3398dae817b31f3c97e863d94390a66c2e177c892536ad1e72884e73ad18c80b41f22471bceeda1025ab23c160448422919e70c8478a14a38dae5d8ae8d99af57741d4b2d6d7924e0c223490829ace2a13acb80367eb0da32e639b064da76e0db4fc4c3a233900d065dea705a3572d999285111a42accd2781d9ff0bd8630f25b2d8dd124df56e23f09f8add64f4cc1c33ec4cfb9e9ae89f7c014609fca49c3f6aed35bb94bded164d97a4da4164b2857030a2cddd817ab3185ea2611b3d124acba1ff9a4cdeac453daa096642ec5adf9cc2ab3d416c55c2455cbe35da1ef6af944f6d9de73eba0525967e81c8d4d1fac9d633c5b1b58f2ee095b94a2d28e62b7e3313520def59539ed575455d00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b01541f83fcaf8ccc5533c6c7a6424f3b0600affb53b784efbaf3edb4f686e2e4758b7e40841efb6278c8a2f26aa40489b7145689ed799a0d78801edc4e06c3345869b5b7e929711d521e0bd976067bbf9e1dad01ee162dd2ff9311a220acea6769bec664970b353e0890b94d2ded35242d3be439e9950d27d3ebae8349e97d40bd414d5193a6b5c4ae66fb0ba486ffe164ba8f4c541b09b3f99b14dae31b0da02572a2c57127038473d2b510536518db27c11be90623d109f4d17adc403bfb7bad1f94f49ab2d5fb844887b2d868049d4f4ddb29690632950d5abf45eef4cc3126078144c37e02075149400f6e4b82e1cbd259a21751e02ab2def1f6fbdfd367e0310af6154f80c9f2d47cb53968390e4cbc54e6b0fddb23d7e68edffaec656eddbff201002dc75b9ad4aa474bbe5dba01fb328f6d5a2b59d481be9fed2bd5d9adbe5a088e10c3833e4b47ac964d802567bf0a0bf20c87d8880723e3bec36c3248b63a64bcea72c0baf80896b9b78c182c27031edaf16f4c5cb570b78d6cc5057cdc65b332ae5f26d229b785851cb1c21c7271c936c410f296965cdaff791da586edefd16ea37a48d69089a39b05f72970bf8b3188661c208412829eb49c60600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009571f85931654d3fa9ae34b72f8bfc68ab18fbd8ca739511144b166582f88e35c76a0b26ef916f5089efad20b3a004681f87f1703a8f5752317af459c59c2f0dba0bd4cfe725d23cf569ac069d82c0add36c384b7ca7e022e4ff09287f24f68607dd1628e2deb5d67f68f472ba4bb7a91da29e5d69a64f2f8962f2c1c352ad8450794dba05a313468cef0c2da14cfe316537078d2e011c23611503a7a7fd27544cd14a3aba3b192d929ecba6fd483006f3d6ff9daba520aa8cbf3f482c74115f025bd4f866ff175bda5d041e414fb2252ab3acb8dc129b3d10e60e48b896c08354f82f2864c264db2399a4cc50e33d34189596f0ee446c8f13998f2311cb5c85357d99d579b9d1ca23e1435929a6692f109110e76de31dac469b2d1713f491a4a028ffe60bf525d86371a97eba4453c310c1da960b90b633b4770c93276b1133f753863c2be60d4dfefdcb9393adcbdba9855808ba5c8521104fb88627f8e90d11e371a5cd53a1413b41cc747c09158a6b31eefb03a9b6b98346c0ea57264f92ad0123cbbaa12a77c0d43579e6f145630e56a5824767103872282433789eca448a6d4e6008b374c98616a2ef7230b05d9ddc244e4abff081f77d457958a10af50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aca67f0dd0778813651f241115a10f876166d13cd6e9b9f1603cb911ade10ebbecd97bec202fba251ae7808b424e4a7943a1a414ef47830658dfad179a7abe506aeb116826df6eefd0408b1e5ceeec8f3086bc706b8c687a05a99e4eefdd5e8e7231d37039a3ca521bfd2d06b5131ad95317c8a3533479d2539d6b8a23f9ae7868a8736a42f27ab89a1543513b8685bd412ecbad47920be157c9af0c6ecf285adb9b26ac17d9dba480ad006072cd4124640e38493892ac024973dafe01a535ccb84e6caf46cc52d99cc451206bfa7e0feda45b561c43392b14a9c39cd74c79f5d073fa433bfd68ee7520762fb87aa5e844deadaf99cd58e0f78fa6dc1287fb7e5a01d5ee6adcbbb907198fbc756a59d25a3dd454151ad17e28f8a43fe50dcee492224aa4ec27358eff31a82261ea9072cea519831f991add87948e224e514c9f482ed921a08fb0f1c3cdde524da0bd3d5d76f9f148646b7202a2173a267d5aab7011a3a805d0a8aa22de192a757adeda8c3a7f394d7304859944a9884799614fc583081e6141d220f168e2c7472bba6bf81d101f16172f71771e561026740d7f627afe6b6f518269ca94202503c5f716a3225abe18716dde6dc4c945a19e3286000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006b27041c78d53f28d41fd3a3809ebeabb15a4d9778a416fdc0b8ee1f460fd88f8fcc2a0dc32a315fae1caa4321ecb85ee3da51d64495dbe42c16ca0bc12c9b3f2a2c9fa96017210063745f78065b661fd038e2bad60b3dea9c7c63e0642bcbb2d46c9007ddd4e62b22d4d127d3a495baf5872eca47ea9f3cbac6ade6a3883b437eef7818690eeb3c248015f86fd05a7ba9c7b9a38160ffa15397da21de28acf3ffe28b00cf9b5da638dc3a007c3df493fbc5dd5bc29320006e86bc569ea7dd47c60b9ae9d85423e8476ead830bbe02d7b275abae2eeb5dc7ea4db30e9fb87a7d411f7888140444831c78e8f15b271a46ad7a211c3440e486c7ac8e8bac0b7c9001ebb28d87a54ceea3a0aed3c2c16111657ea878f6c02d950a0f1cfeaa31bf713ab5a36e918f9daa41c13492fab4ee4d6075a690e217a1a80cf8ecd85128be838034a4b6d30bfbd6df48a1bc1b282452c4eee9c2d3e9ebc22a63f22a8aee92072285b82353c099f3a6447d8d67f00bc33341b728a11c40e86ec83a8b47ab52b4cf7f90de911c4ccb2af5f890a44f26d41accafea7fd0124a1484f68d8e4ffa4de3f5e9a846f65770ae8fdb00cd9a5cb3ff94d10ba0826dfe98fc52cfa68719000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000913b88bf19054838609f692b1b9be168da950aae96dd796b3c80db9824a623dbdfa073e84508b6e034465c8db0bb4d998020575bbd13e2678c3ba5b603b4a2a1a8587a3fdf9200fe4268b70387934e557b77f96aecf6cc36bc7f5851e0e35c25f4669e789967d2113df4a4116b134c5c3e88011c4edd5bef34f60932252ab448c55bb4e62abe3b7a7e52b4701d21da14d391a8c94c73987ecff5e64acc187349214fbf0373f8b3daa8746bc9a8c189cc33b3ca1d5b1f1312ccd3498ec6adccb9271375e31d1d707c5b540d5468e3e34a6eea19f8d03d4e04f59f0eabb95191916ef9eb36e5ed8c9023bb1cd969fe91ffdaf2e6dec8803eae2ec49861a1202a90708df154520079fe97723d1611a754bacc763e7d1aa9b9d215a8d7e37b4439cd0cef35dec5e96bca8035009e3a21bd29e4c20b7b9bfa44ca856323a4132165a11ad7213b98982df9a53f24f711b14b95c94a413d66e393ce791a094e3c44a545867ce3cc3032f56c2197ac018c428357349e21500c0014f5ee5149116c4991415e6c4a54e05fa5fa711ba90d213beecfe2be82d0158400bfdbe4437c9481734d57784b6bac0c6a0fc6655cd84d7ce3d2bad26622ed8b95467110ddb9384f9090000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5d35719d55bd02ca6ec29d5a2cbad1d8164b52ea1b5d5c723928c14fa10a099a53dcede30b99ff5b0c2d221940a6543abaf3f757dc623751df6b568c1e81e4dcf60b0bfcb4c53ff9b4bc7b64accdb6f71cbc41327b23ab3395a9706d8bf78148c18f0eae5adc3f65441b65f68b92e66a399594cbd8eb1ccd1fb5443f7c9aa827677170fc65db83dde84b1b6b5cd0e91cf2f302589dec0eca0c9b8059ed48d7f87e139c68c8fca54a3180fa62ef1c2d8da25c1070b146f6249ce66d17c066e0c9c5996312121f03951d47393ee4453966ae53c28bfbe3fca53657365c5e1f866c86d80d78cccc2b273f32e2d82bcc11d2182f62e6052f891967be433d9e12cf63f77fac46e5e0c7abc2ccab63194f50a2613079625e8de5eae18719d1f86a34be84da3273e3dd6028f739efcf55b02097185bfb0bd6e7c003e3c888926afa01ec9fe1538aa10b36a86458a98365f999f38b934518ada72562f8dfa002bf18a5d0ff75cf017701fb68848f1f514f2514853c9140cc6bce0216347e96172f22579be4d2414f717e22a36033b01b8f54fce7c666057ea3e25e7125bab45e3d9c1ba24492b410d73c480d14b8d198fad1ea183f37b246946d0f7124f288bfa544160000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083745b4ef240f107373653bcb14b0622733ea79a90a8cc68303e6a67ca3d40ab43849371cb6c3eaa4cff169282e28b7651856903ffa2cdecb26dece5b580c196a9432ee6e06d9dd81b79503099e2cf24bec81c94d8b50041e68e255c13892ffb62bde1329598b0e80470a82f5aaab43aff57fde02405b37bb6bad9ec3f95f58f93c89e5dd67037ed588b64b8ad01856170ad7965163593e7903f7814503718550002d72c9b1485be688acd4f1ec1c016759a8eaa6c349163179914da63cadfaa549f1181044ef71f98a184eb70200291578c6dc0e91ac94da6cbccf98dd8f682a89a574b8b38b70bacf3c6bef3b67218bb46aa3c87215a5a81ae6257e61a9f204f58fcabc8e60366a890af597a92ddeadc66687e9453fe5eed70bb04c478dc915c87a14d77019e29d09568b901202c2ef0743f6cf97c66990e423b27fef60f8d77819fdd21a03e47126f69330d7a74adfc7b0ac20a740f0d6be230c0c16967fb29982c29a5d405d6d5836454eedc1c753ac5aedb9d2c91f005a7c36255231fee9f0af402cb7f460940da7472d27998b13b01a0762780277c64341b1c085be754f1ce85ffda1e424c9d952dc38685319865f213668a6ac45be5065de7eac1f1fb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b5e716003adf916816acab2e0ce9402d2a1de1a30387646542e7585419b5b8f8e6ad841354a9869baa3f6e59415946f97c46b050e45c460960017f8e8aea681b0b969c6e7f3ea7c6edb2f1c9c3d9cfafb6730cf50c3f1778f03005613d15fe2cd32c7b724877cf4f14b2cd4def08924f88d42fa68e14f267db086b164981bc76640a078bbcf21188652c71ddcc10df09738f1c0b525401c5ab46a7c72e345d86006cef7d967de5fb82f143ffb5b785dedb4ede5ebbe5813584a28677d94aa44540fc41c983f620721a6e1f37df06830d1f4525c429b65746d36691f073666c3a96bc70f50d3c8ed2fce7a3aa84eebe436e3f819071474a0d3e0c49e6109eca04cdec78ec2994cea527622dd9a2b7729d4eda80b84e7f37ca784087acb08179389d431dd6434b4652a1bc00be248ffdee17b2cfd77015d0ea39379f14e7c583d99a14535809b813a4c02cf7a34c95ad1933e6b6bbf49b1f99a280c7f4aff782fef28d5e310b42892ebc5db2268c77dc15f6d2e5a1bcce9c840503c6f4477b626b20250972d5568953bec7a733a2d2d0422c66fbbb21a4f7c5cbfe6fe6d3efa01f127d510aa52595c0658698b1f0056a773f53416b3519e541ed896280da05280000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3a63bd0ed5456e220b0196a744a5a724673446ca9a59d0da6aa7e99023784235d778f8988b6410797506b5c9f39974d935e2c34d40cd5f0bf4a6d1382308eb6bce3a8cb19685fbacf596ca7dfc382bb0b79e695c2fc3b56bf2520f6bc44b44233413964704937f57d45ad433e212ba8da133b653796c53869a7c185bf73f5a2ef91a4333f14cb9e623a41b07e8411ee34c4e0cdb00992a5bc84f991778573751e26623f64a3d56ca550bc0b5280503e69b3bf82abb9368c1ce0c61b7cb22d58e1c19ec002b996119bb44e7267831dfa1553d4ab1f666bc0fb979cc06ded3f4f595edfa62d981e40da7bb3c11845e4e1447bb32585f533ac7b5efb5a578ee23311cf1e39114d83f3e2d70f9a13756c1e53627069cc564f984a0844fc69755d772b23938cab35f38c8758e46fdcc34af2f5def9f4d13818657aff89128eda5cc2c8b8a19672f19ad326a81d367ced5ae2a397e32157235fc7c07e1e502a80aa2001d35c36504cd7902fd4c2f2cf17d5d210cb39a731ed0a121837189541e7bb376594d009ba0ca76107f683bd95958d4ede6dd46872999a3198369cc9e9daeefb21e7e303a2c9f5a770a26958610bc94ff055b5436a9675350bc5cd56b20b47a900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d3c9346725fa23f20b8e85ae0f59efde67ef2e69fb7791e3d11cf9f5f3c55e6f954b30e06dc36b779e7b230030c43026b40cb9d3bd70f030debe4411e29036691f0beb33b22e963e610b50a83dc3b04460b36d41f0bd44b425a6d453b11641f882e3b726260d50cfbb70b35387af1b6a2a2e926cdbdd2e0e773ea6c52a575601d98604d748c6fa06df8d8a2f8be15ee2f181b6b1125ba537fc37f28ef84038f36559e8a48af366654e433a6bf3dec6c829218ff3eb4c45e850af70c32526b94da112f6582e7d21a4c37e5ebcf621e159df4edbeeef018d86a49548582a1af2fdcdd5713ba24590c88c00060a4b7abbba439f5510f716f996b13ee810cf66e05983cf2d49ad44a1daa28fb3ccb936435d04df3650aea22e763751d6feee2d37a969992ba4c62119137e5fb3a2a992bc745ef83aa3cc4b27619786e25bf5a640b89e3df383a1be759d05efb045989be0374d62ee215f351630e97307285f56fb357f404bc8cb8912247b49075376117d9d0bd5fe2534620d9e131b8873f281e0560526ada7e8c475d76c57eff13211280fb1bcd510e611c0c9ff6597ec7355e984d4efafca3c8e21bbb2ed1af852d0f34085867271ba1f97eab43c59d028aa91c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cb705f6f24dff3d03b9e14310e5758bce33f9d3a62abad605421d2f8baaa968328613baf74b49dbd67cb3ac35dd17af4483cbbb2b90812bcf64b3fc965ddd8fcf2fa1aa33f8c91c8cc158320ebdf9e7463f0d29f12121563509362bc4dd9a3f817cd9c44ae1c13a9643f52a2cf2a32fe4855c17ff63d962216e6747bf60bd66256b2ab6d4bf9dd772e5b8a4142f363dfe98178305acb10933ff189d9f04fbc3d2e94fb9a16e00440c95f765aa6bc2253fdc648b084b45864d1ac63a94de71dd6897c8ac2307b825f9eb561d588701eadeb79480c2c6e81b9f44f7345e0da2ca6d35d3404964bd3237329228b8ca6a8287762469e205beca82a1356394521ede2a38cb22f1c6eb0ca312b1e64fcfe55e5d4e90088399d85822122ae08ffbb1c5858763e8d1a7d91e7983ca746359ff366bbeffda445b0ca5e14751104861d051e9d49c944cdc6fd6c2ffa40a2020446d481fb10a7cd7ffe5d23c15ef87eab39839d237c9eeaadc2ebe0820c1b1ffe8c0f278e348af16880a87b0fe12908d200c3b3e8afd0c4f11fa39ddfac9bffc6c79457d204677173f91d3418c559862652fb75e5990a49457fe9aae016fbf9ee087321927dfe520005528258ea92df6785900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002361c6fb61b1469f0e8cf3be0ccf0cbee3970736378c466afefd724d04dcdcdaee0132d00e3a1b7c7ee166dcf0812ca0f518e25b2436754d119c72023e579fae5692431baf207e07ff054a3fc72375ab6e8540c30f9360a4bc850eb0f44e870fc1221490b80f769cf647a3f662d36a56386852bbec15cb5f27ba7d9a860ded8bbe5809d1e3657b428bdf7b348417a2d56d7654e17091e69d19e6ca10c7d7db38270f28115d2d9323cba2801a496de3631b5762d45d873ef07ce11284cb91146cd80b2f742c41204279fbd824c7db5d2be7e6eb4b2ceabf8d6ba10cd5c632f5201658d40b69ee1e8f1db98c0a0efccd428d9eb67fe012471bede07704727720fb54845b599c66d504c9f0962d0071c2681599ae50979d0faee7e860bbaa14bbff3d2aa136c3a5920757513ec0395044c5ab24ab68e36ded548c178db318b677d89cb3230afc7554fb28816037aee6d665309a9d9faad207968e8eb5451e1bec02d71ee64972be81073ee3bfeba1c7c03dfbbacf9b80c184c6c3734dd2ca89eacf16d7aad74905c44cffc0bade7b56d8b5be71a294efe7f311747432361a7ddc102db87f42b1b87e820c91965acb0d547273ed1df3eb70d95a82d17640ea7f6aa20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000838bff870809a5348b4a540244c99347645ce718ebbde1d5e0267e0059efe47f27c14b77967b58fc53b56f421f8b8cdc437b52a19080aff48ec88783c18c501467176a6a1238b805a59f18c4ebaf0f1541eb9f6803be27e816d48fafe1d829856671cb06d38ca9cff5e6b619ccfa6ecc6dd3c36c902562691b583d000978ae5a1337ad07ae37023c1e2d14513f63f4eca1e9e31121b24cdc5c192eb6266246d8e0bead95281eed2c4b5adc383539a29600326f144811b39ab74e095094a2fcaa69eef4142b5d52ad9dc5d0f30a65da262719b096a3e0b6cbda2ef3cc4fd269e487d66abe0e4366d1a2f281ef4507c562ab508c47e9cfd57c3aa0eadc4ea9885356b349f0551e5a944b5f0a63bcd7b923406505f8e317f7492046fab2928ec7400b61bd9f9c6a2afe89b42123c1e22eb64c30a056cb7fc1724aabdc87d1b3708beaee16e2305b652db1b197f9fb6857f2ca4cb470aad1e5e11b88d8431f1f36811393a889a8da4da8186b533c626b78694356fa53aa4be5a4e06b56fad7835938b9932747f1c46794870e5170157bd4ddfafa44de3450071dd4a0beaf599b5b877a577cf8ff0b7a3c395790cb5518dcd6fdf913f93fcde12c318cc39d68830a0f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cd97a6b020653102d58a34ed624e7246b9d23ec10794fa497e4cf0387012eb7241c5d240b89a06e2c0d6424e042e630208aeeea6c14bd1b75029632cc11b80748a8472d270537ddeaaf431d8bc5858670a071eabc4acd301438fce4e2de16230e4450c6538ba2b126108dda7994b898bc27fc99086dc858704ff863bca5b72b3f0d5e847780c220404ca31f0da101eaa6cd14256bbbfe3dcf4c590518c3015b2b61038ec747332edc8b8651cbbf99a92eea9da1b62363e185816529a9db44251d8a70f9e9e200c07ea77f6cf7c932961c551537542d976947342c726867c715c91c261a5478b558dbaff9eece59fdac817410a72a06840f3e7e926809a0162be282c748884a35bc28d5656d0be7377752d17eeee1f7edb854a76342a5024a26fd914bc80f2c0bfef74cf35e40199bfeaf27cff725e0c3353aed895d19c2f3fbaa5cf57a374405ab94ac96af9b395de7da231696405d2112c01b22d5be212e6f2a84b3f12fb84195640eb9f174663b8a45545b5f9317ba8c3b1b447631ac2878bb31f47e645230657b32ebf3a9569dcf90d8720e33cb4784891579708c0e480a4bc92ced83469cea5041f327da711c13c58cd243f37faa683de9e98c286137410000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000249a27c7dedb0f192ffe24e814bd8e61201efc035a19d9709dadba18f9b5773e8c77e0c6fa24eb46420a1b7dd64fe619156c8dbf0a82b06f996d762d729c09c8ad6a67d3b94561bca94e304d669c7716fa60bf017eb155e7abb094be97a64a658113d0dcf54bf8a83332f96e2fe16d903ce2176c4bb7c41bea180ce532ad69c43943e2b3be98b08d0dbad2e1774924fbf6541388bb49e5d8bb1d97f7b5f3a2a13c616f86148274d041ce09ad884cd44f3ea71e3f43288f569b07bc08396bd464fd55300b4efa7dfc3a423e6f8c18abfbbf72b23e5483656a7312e5dd78b137e0391300ea96a1b2f73f46b1f97ecd37b4d62ac50c1b8d9b78fbf2505375b3edfc60455da1867b25699dd31aa2575d0d062be9ccd5c47ddb59e7d4f956b604a88b6c4f67901e9a28a2296faf2f38e7de06b2e7b3470f3e1eaed41e18839a937d37a1133a33300e2ceea79e2a04a034bb7e8a6cbed82a5f247a1c830552dc17ea8b0145e76892a9b2307fa3f36ca6bd51394cb37028d08658e75b7be3a790811b54cc172b100b870fbc2e3b5d7f525879b9684c4d1a8b8416a6060c98b756cdb59aad7e7d0a99ee125082f8e20d43e06dfe761c7be41b39d48c5382e803ec461df2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091a0d95ba56278ed13c3b7ef449b95385103a2db57d2110e4d8c2ee8e28979a71f8b8a0415314a1ef1715377d00dce0a0522ed5e6b8b13732077156aa9f96c6ec9b9a1e2bf35d70416987a21a0d4efbf0440b223ba0135eb599e61218a157348df9bb5aefef71f3ca91988f0dc2814cd5b3008041a67c4ec76d8d00db4438f7d7844a6806e7baea776de509b8ab4e9b1a3f28ef6e424ffe644f897be74ec5d0c65c12be3d30ab632e403087b9f79c1fb3ea11aa8e13e54064ed1c6dc750e2f9a6c16943ef961ec213cebeadf51bff0fa805c1e7c02ae5b588e2064c94accf18cea5c0c3f78d942a0fc6ced6b6724c0c51340147a2219f22d987a91c6679bf3e925bf0103672f14a33732224a5ab081b261b7f2903f43696f368c3f3c74693421c0794b2b2e34ff3a2a245e0c523834db1afd19b64e4714f1646a9ef57a39e4640427f026e834dfba2d47e786189bf202aa5589003452d7ecee06335d3095eaca8dfd314d826af757781157586aec5ef433197f414f69f2c7ec481afbcb628b46c200e3e088fa161a43ca5757bf73960ace5ba18779720bec22e7829624892d0389d2c1f0f76d52d54cb8bc22d523153e28d7ccb37bfcb6eb44a6aba28c3814170000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000130ef14c5e7244652613211cdcf8e0540862ec286bbaaa10058252c95dc99e617ca707cb8e21eb5f4e23cd650eb34cbdc7a2eabd0085bcec335d30f57e915e0cd0db784a4058bc019f31f32b680c4f39b4fac21899f57bd40924854ee07c11e95a4575d75371f1d7910bd48a1b561a3eb703a4e039cab984267946b15fcb4dfa526d7e4fd0f2c104ef42b961b45b6c90db34da3d7498398b10135cceae5bb3d54525637ca7f2e2941ace4957bcf2fc82ec1fbf3945f95e848db322968ddebecb9054c51642e60da30af1334dde67d912493d2a37989746b715634908369331fd943ff0af9dbee6e4b6e6d8f83b6c4e5f73245eb8110a6a7d865447edd76c5e6671bdd91488ad1a715d2471dfab762d7bd241654cf3ea9754f2d1a0ebcc8f9dee5a146e146762d5e6148ef9a7d20b80a76f4f6321f2091e51d181ce3106e436f6cfcce7f5604499aa69952762eb236c7b6b70fb359adbf74b7af3c370e1210d2a078c3ee9d31fbe199a8aa8e182225f6f3926c4646ebe7ab66ef873119b59a23148d919d599d3525ae10e441d6089c1127c8bfa7f54f6c68b8bd7e8e965831cae43d38355ba7ec0e28d2a94e4768af9f5274b3b9cda11b313834ffe037d9216c200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a4eb1c93d702da294e04b742b055f93e8d68f8997277df5b868767ec67e7372c53a548690bf75b028237f90ef099ede972f4dc23f7f8afce0b23a8f307ebe429e5a2c99c014465aa09c62f3ec616ad24654b2addc4f940dfcca9afa20f8bb7da55022a05f094eee28c6ee126ba27dcd6ee5f6f8747374f523f0cf3ebf6fbc9af84615be3de162e44381fe9f117471c33f8fb2ba5e2947a1a67c6ff8f6a27f87456d5bfaae9aa0d8e1e8c5847098cccf593a7cc42bd4dc17a24f0053efe2f4e7c33a3862b0f86bb1cc8ab3305201d5608cb1f36cc8ea5feff49309652dedd870fb6556c8641c190b9f548e3269ee0812ae8565a258aacb8ae45e751d1265f33e78200ebd8cdb83330fb227dcde77d3eec753bcf4061a6ed67db8efee50b276e5a105093e4f324cda724e56cb5f74db660cfd0ccf64a50b37659a7a84dd2d275ef77983be8cabfa3878fbb4c03125f34fa864e3cc6d20396b3270f09cf2dce54a91629f2cc552779a412c491e0b42ba6fde7b5628a17684cbf0f0eeb848c09e18c89beadc007228b61b19024de55990676db52fe3a69d1cd097d377abc6832ec219e28469c2804e3052fded2f17c3b5a49f186caa7769e56689cd61fd9286176b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061991d948fa3f54495564a5f017224cd2880dda4c1ecff3c0b467fed587e64006e3b46a8dd8b5843a61163c3339ae5b9b0c861b6737dfde1039c2e6cb75d77aea2edd2433c56957f6f06bfb9f6e46bd85489047067792d1ba129f1c4b7d029ac9fe2b19579597e86f07849c1ca7231ff198ab6ec11d62a11f9c583407ab85e1fbea7def3155ad7413392bf87ac71cce47a8546f719fe44c7ef96d0e00d649b67963a9f26b1b38d40d560335a1836e51fafe8b4c97ee0cf51b7a9bd5a12c9f8f6dd723aac05927c4b78118c1f9976e3becb0311b5b81224265ee1afc97ad9ad3782a170ea3458e90c815029c927bbf248f4f7685cf5e4ccb693970115a3e4feaba91eca05a92312d1ad3825003ababc21eab3ddef13340b1101f76d23644da2f8ab3629d2dddb9a7d942877722aff1237b6b1b9c1e5d898a7f9c65d13f19339622e8f767450a8b1b709c70df663c4f72f334c64def759fb2cefb1f38754851566234e7ee3237c161c5e0ee7e4c566631c37f69ebdcbba3ae140167e1d29a62fbde8e7b07db98e07c6920758f7c1b5cbb27dea5bf9288800b68315e27b4616743e4ae389b6f4a269a3ae60a4b529db17f318496030eb157329c47000eaf44aacd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018efcff5965b9f33e5a4c600eba1f9866122d56174efa1ba08ceb87dda09769af6d83981b6e005140c7ac8c9043f5c4c16cf97742bb33b16104bcdd55407bec34493f2588abcce17ab42cfc1ef7002c51f8ce03803125a48c27f678f68dab83832f57fbff354a829c9edbd84ffb327bc90481016c7e21f1d02c388d9ef606379c91bcf31a296233f409e4cbf5dcaa16dd4a3d09d001d0a7e986aa04940bf56e978687600ecc79f4e052dd22c486a1d9f5f1c1dacce83e0e7be06df10bf3a64465aa01127e3641ba66ac5b4d917ac620e18faa32b56807efdabb2be891af74a295bf2ed4976ca5dcef93cafbcb593f5619bc80ac53c146207d2283cf47f3a6d85ea2d4ac3409e6493aae96ac2f01b12918bf5a0219996837cef104e56e74058d117d51c3591ce5b630eeef267d695556eb008211c09db279c67c5a6a0bf1ab3ea7d5895f22dc01a0e5f5026b97ed75eaf7bc69cb937e8b3b5c5179393f71da1f979e337eeff11ffad681d585531d425a7c011403919d94cce806afd97d9edc1fc4eb1121c119c1234d1d68cf9fc7d9c5b58957ab26154a45e05718676fe3a5e3e00a7d8baba39fd58932edf6634ab75a0ef77690a62bc516c2dd8bfb50bcc792000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012115f3d1d9058bfc6cf6c118897b2b54ee0c89d2c70a5e8accf5d2454c24850e648617227bd7d46903e2e9e1c31b89112a527eecb1a41435fd415686204154403789f6bf85e65c8e2f4cec81e3facbd7f3c5f8629a8a884cdb3df5eb871325bfee8304fc76179bab14746445c71d59c3f012cf85e41fce460d62e8b049161562d162ede0d997fa351a2572efc1116e9c473feb74825376d497423527c9fa68111cd66541aba9d3201b763365047c9988f60613f7fcdfeeaf1da3647d5bc31f6b093eda65d7f2090f25e6545fd74dfd08b3b70603464073041810d609794c1a3ea5b377e247bcb56323d3dec978a1dad8b01b482d034886ef8c2a2e77c42dcf1c988c2e4e46ce1e78d10c26245a31da7b8c6b4eae4d91a07ad215f12d6bcb5f03ce64e283bbc69e9d1897640cefef5647f8d81fd286c8f8cd1c9cf92ad2412bf6793aa08e1915a12a016d2310ad99cc861064af1405a0c519037188c1797d3fbef2e02fb7fb82abb103959d1efdd0a56d56e4794383f3cbd9355f86665d75d884bf989ecb3f2832d79f85320a615aabc6ddda7c43af45a8573d7daf7f6214bdaf14f00d0a12b1237718a8425f5acc8e0b2d848d844b276111eea0ee08ce15396000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002118eeba3d048b6c858c5ffa3b3675e10416a67ca800d4b895003ad8bc6e3679319720ac4634ce10a51006014634eaa351d4c1efdecf3abfb41b6515fc10ee2b2aa7377cc9296cdd2aa248dce59d3a7a0d1d66f290e926fe3d786c57a35bb4c0a3f468368cf91cd74d1f357ce9e96a1728d64d3dcaf4fce9fcb0ea5c7fedcba5796e9f8d4f542bd7a12f9d6d5246a82c5d3341b2083a0541bca9c90e4b2cf68c067f662c26580ebf5b70ef1e28f74c6972dbbe92f25b2c8fa8994d4c9c4c40d6552ca91cf2ca1b65a3dd012162bed20c816ae5fe27024c165dcc95b2fd8d6b23b4c37f7953b635c0780e0f4c829882880ac9ffb78383ef6deabad1e65e51cda53758580db2005c79d730cdc70a042a4e5073076d85dd2f73b48b480374b03ba3d8a655664c134cb675c9d70b7e66662873aa5f65ff6783f7b6a0a992bcb20efbaf4475fc14247c26f7d7a2e43ce8989e3ad439829771f37deac7dcde34be743f1bca6ddd36c6b68c28fcb6ac506292e8fcea9d28fe59492ddd8251fb1de277165a8c2dff6a7b739bb5c820ce1861933f03e2d205336c6528f1058fb98c6416418efd919331db152afc5c180c54498b2742c006db14a60a8e0a5de19ffb404740000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120992bdfb6a7ca88e30a4bb7fec75c7dd5d1d847f74f338db8aaa0011b3785e81d4c9b5f43d463174d7577dfe5419fde2b3b130e89820c45b448c7451d3aaabd7bd4b5f58ec36b9c938bf9ee753906cb60a8bec990bb6591cd2649c0445f209339c8d6ec767d858d1e021a712714b34f401f68720bd4b93ee6027c2412fb4bc76338d228e45ea9ecae60a37b940e7acc0fb04996448802d50d5399293398cf473f6ad4607fa2459d17868caf95b9b6d2df8f74243d2221a92842da77a125e7ec0f652ac475e02b3e9d440b63692bd4f002bfbbedde2a563c07401aa963b571bde0a81daae548a1f7d39aaac85b9b6d82e1a1cf96da6f8b9dcfa1d17357715c6486c7b805c21f9dbd131a8cb1811e528db98eb426c031e84de950a62d378934a763f7899ce54aeb084ca580627cdbb545dcea0551e93f1bb9d0e5f7e1489a2605914fcbe047c8d7eaad1789171abc5cac70f50f27ec8ebd7ef2b3ac3c4f422057700b64a7a099c95aa5cac45a27842e65c00198fe7bd501d8560fc48b42d78f3348704ffd2443bcb55f7894eebdda490885a38e204a6122f2056ab13a3548036f83cc1b765734f6d6c622d6eea5b84372c6a027e64c8681e5d1def960e31a3130000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840f945afe4b56fb772d93d676850dd6975c6dd1841d544a884d85c955151605c126c79acb59ab74939244d0797e6ffcae585cc86bc37d8fa2beba749bdac3a552a0da3a33d0a609f68020fad82146c060fd91c68596c976414bc52e170ef7a63720827941f5dcf4e4c24f990881840000e8c30e39342c81a676a1ceb0abc040e1c378bb74de091ba4b201f0722188ad61c2d5b0a4c9d379b75650a7d01df5db506207f584edbd4b6c438966157db71c61075c746e898f0b46a86448214be51b6952c271d666f07adc6d4b2d21cb99412807c3a55cf58254147fdb4331f190f0e35afa69b0ceafe24078387e2a9897fcf08f8bbbee71db281ec6648e5f4ea774608e9f3bf8394fe5beafa1f4a6a6cda0d793bf6ddb3218cb1a02e2aa8b2833107eb8b84ccbe88755025b55ff09645b6780fc6466f8ecccf4794092400832fece364718d552befc4dbc658eb3f4957b42fdc8415f72ba59c1592ae281dacc7134e96ca56094896fcdae4e4936e7f392424b909931711027c9bd04bec43955f8e1839e9d446c4ba341d50924864d636edc0e6e8d6d6f4e6836d0dc4cc292fce00dec31226aa36dde5ec5b2f472bbb8950e4ee7637e07787562a02e0e6746ed455b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023b63da10fa0a69e7bb8433b172f86ebe46c523582ce0d87b0eaf7f06048865f3d9b13f0019586cf8f8e91164f61b832955e9fa77927d022835ba5da6fc68b2165d0aab9aa489e5040bafdd3fec88213e9c29f52d4098d41ae896aab19a82fec617a2075020d472c4183ae09ee653a1a5f8d3078b2d1fea72d57b605ada6af2ebf659ea18dda5477e2602947dccabf923935010f50762a083ab38bdcb715f6f89e0e9d18ca8974b031cd25612df7e7037478ee48f9273b039d8c99e42e9124589ff303ba51264fbae1cd6bb6d4c99275cc67a9736c0196f93926c7d5ef055a1604dbe009d3e881edb93c4d9d697d8f0c6faff7122710bee8aa2d7d2d2b4238dcd83b73d26c34bdb2fa0e7986307707fe9ad616affa981f018657ccfe18840eb583b229984856f95a67bb9dd8dccc3eeb51431d05a96b00846edf619afd6d801921c8f95f1b61f2c9860b918e5305b5fc56721ae285cb13d1d123e0ead74ae86f5b1076fa3e7188f87e4fd686b3c5d49c16a10896229e7193cdda274c09e352edc0bac6decb00af3fb8b94f48088cb5af0e88413167707062457d1cc57657dadd113969ca2dac3894eaf39290e536358fdfb20d99200ef857fe98fcf5b8e7e2c400000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48400906ee0b080811d6542d0574138d8b6fcad01e63844c1268bd2b2c611fec0eb40825160b6da4815fc7427eb806a948b01e3559df5a12524f09a66e70c1c017591c11a20b6ea3b969f880384ac3095e2412a0d75d9e3ca1242db68c06e33e776b25659af5d68ff42ba0912b6ee7b4521564da2b44c850bf0391da23782954a35b2a5e5353127c8c6d5a1962034be0b7d29d2996126ba0b1ad4ed7c60c6f4af2990d03a77044cd4b79cd9efa90520712e8c5845323ad1bce233c0d818e5e03936e1e759dad7eff1d3ee003cf16ea1824508b28138a21bf6c12622f17fb8570bd3f01aecce4d5b843630e9243e43ff21338ecabf14dadbd8647b631238a5ae0cb1608a93028ea419d90a5fa2f921ab18fee7102f3db2f877f0bada8768b48f2733d223bb23fec32b085ec378fe8db02e4ea854f47f6ff3deaf0894920f86a188f691c15e9780fe4eaba06ee7c3deefdb3adec390b7474d29c2bcef14ae81993b17d146dfd7d2187aa362df70032ffd45d07e6295041ee7572e0605eaf6a5f14e7a20bbc37ff0cc4ec4795c926781bcbf83a2a3113fd02cedbd9f2dc7caa358e03ce0bf823d785df39812854b9ea5ac45e2b09e3a8e2082cda17b84bd9e78af3abce25ee052fb2bd638cd09b2d0f5e5ccc964be7ccb7d8f2ce82e9e2f8acf6afb0681756f5ada7bac8c176fd5cf38a1ead32517f545262c7c61d588088f0f077fbd510a5adb86b425cb0501a88cc02e098bbc0da854c522099c7b72d90b010cdffaa08f2353632cddfa9839d1d3cb96d5e389627d8dc97431053a29bd4039f8afed70b9adf24aa3a340208815051e83ee1970ea864d499c6b4e30875e2a82ee3ad2d1fa50a958450489b4fb924a7cc976ed0afaa46d13bdc506af568978b2d37018c18435856e67f8dc4dcb345adc907e1fc08d1581460d3bb556feacab41a316d5e040b8b23b3b7724febebde191b886f4bc38434b7c790c8ae6480e6a60bb12cfc19fa2d0de38cb0c1a7fee2d46f6b40352e3d90bdd68c47c1b3ee4225c618824a22a5aa252ebbeaf5f73f75b4683108b6391062e6be26871c0920bfb3c0c7daca1533ee4d001f542fd649cec19ce2c86f777569db12cd7bfd68b4989b053d83a6058879809ac18a623c8a47a4aea8e369cda01ec88f553e56b4bf8f67d32c42af0db4c090b9a961136546951f2e60b8f11d76199c73875bf2aa5baba1929cbe3703474dc5ca77ecf816cedbdc45795b29e9b0698219ebddef395985c0b7921cd220350b232083c7bbba631ccf61dbf9c00489058489b1f6bf51822cbff41d39f800f3c912b73afa932f38e093682033d0409f61cd1980e9943901da86639b5c49295977aa99dfcab6fd4423b29b29fa5208d4060d130c3ef28f6e702f059661c22a40088bf6487a4515d457f12952ddae15637eaf1c24fed048eca59872d4adc91b20ffe536dc3bfa7705acac7d9b062a60b8623231b7b1243f431c9f85c7391a2121dc968e5ca765420055e04f930a5673f4d356f985f57f232e22d7e8094dab2d59cfbefd347999341a33532e5e78d492f897b9c1a36275dc29e37ecf1e01d20b8d7e12629df1c5f3dbb3dc577942b12564a6c84141a54e2dc6a39b0c5e6aac0ec0dcb350796e6f0d57f274c99f73887b2174fa2c0600512cf29db603280b1c079e971524683d1351d4205ce5f768b05a1264ebda9514e742aa75c1913cde7c1db98e38bf30300f562a1265951751c81de14d0dd8742167c4888cffdd1734892221187af8932e99f1203684a1b34bb641450b9fe8f89fc66fa0db84d60558292fedaa9c767f882161f05ab84bf620fab8adf7cf7a20aafb185a8d5103f26167138cf8f39f8476e4a1f7657eea7655e0f50921951ea33b3edceb332246ba28b11a3fbbceeb3a4b43cf5120fd4c8355bc433795e1025288679c68b793e48ffe7b124c2a3f46341fcab3eca3dae75f8c4d33401cd8190a8a3e37bf2a238cba1d8f27aab341d4c61b39288f667ea73168e0d626c7a91c8e8e7814ed2fc65738db961fc8f32fee075d22576cfc074efee65ae89ebea87d95a97a9c49954d2b07f635259946d2f04979c7f35ac34699f18f048e1c8de410b28b8c9a774eb171ad6b542689f2e26126e031c5dd316aa6d89db6d3731e381753fb45451387d8fb13c0a314cf4f3a2c6eb51a528b460c920c676a3c54324af7d276c8a20e26eada3d22051e220da800284562a0e623640917d63fecbee348dff14b091e6baef02e7ed4082d002d8b44bd1b0e16fabf88c37c4bb0557cbdddd8c287c4b1b56fce4fc5d9d004a0c029b982656d1d971ca95d513f98db3733260772cb21a2794781b5a922fc083a432d09d0daafe1e77365fdc7dcc84d06dc46beea259f942c84f70763c6b71e3470c255577ca957fe0027c489efd924fcdc7c3e7a6d3eb89a7cd182584b3a2049b1934a5b85631d846475b17c1ebc84015d239d9b84a02d9af1aca1d6ec84292a7d59cac137bc1b4a78feadd760f9a6f549c4bd3190f4ccf36f56c7b8547b04fac89bd78cc53105a2e2e2022e8b4860118c07eedde9c035a74758c40a371d1e66fa0c6f5664a229f5a7123673a398dbaebce39de1dc3ed7c39f4c6b85ac3c16558631d4a00fbc4ff25713912278da8a35a826aeadcfd870be8402bcd9ad0208b4113de008400216cad05039a60fcfa77cd675ef99cd8827ac6988c5958a18147a63eec0d3c6a06d40aeb473a1ba9baba9bad721c9bd08d0411b156697ef9a1b83f2fe899f3f4b39a5b24d3df08c9db08dfe3d98daa97d86c412ed93a24302209b49105ecb89ce1936cdf9239c9a7fdcf4ffc8cdd463c50dbc88f5ecdf07d503b7f24ccb0ca81a8df947cccc852dfec33662814d934c928e95da574d4fcc09401cd34434805eef131accb703abcfd06bc2700f234ae63b4da170db34797781460c7a83047b346bf506a80f501ecb4ea9b3947b626ddee805d04d212ac052e9a81df05534f5329a81f2a76ccbd03d9b2307d7e5ccdac323073757c75f634890ec240b28c547dd08cf0f897e454f094b49b66ca9925e19bc87468d21c9966e62a9259629f373cc45235d6fa9a668aeea393d557d8ee836b270dfeb4336c2fe9e5a27417235ffb7d44fa787e29bfad465b5a0ede8f98caa40f6d687dfee540bf15d0fb64dcaedeeedfeab24fdd77a9f1081058e140ba475c4b5282993422ea6fcd51f5e2d15e2f1645e450c2ecf567290d53bd731413400ff7706ffe799982032460905f5f66f6e10e245c3e90674409dfa226bf9b2f533a652a7974f67d439254325ad428bb013eeb1522e7557d1365282bd91c291bbc15392e28454ed6ca7842727a1c1b2c2502762416a05f9fbccd93e23af1da354f69f740cd74f5a7fe371f90e86f8b72aa318a00806726b4dde5387aa40a66185b3c0347818fc5e9c44d16112821a7c409e2d6c2563d419c62e5e04bf73b66f6c6c612aaeda316a1cddf14327562284f1941056ab38ceacc310b42641e80bd5bb000ba4b777433515b950c2031e03e927855e70e3015d2de76fb2cdef1b9d3af4e01526d57a547e9156f2e22fd02f30a66836c7a468052f875f72811c9a9a88f90d0c1f5160263e2087ebc8120fe93f7bb86c218390cf4f239c9573bb07e331c8b81778da99722a12e1425c13fe839e110ab8e56c60001e16ba994eeef848eb18988ae6e01b97b7b81c8b421be239d1dabe29668ce421f043f67610b1832ccd81b71e3e75cd2f55c7dc5ed10242ed11679be00c9f889678662ad8867425cb47c82d42566775739c84d218c110f5eef77b636006460a86bcb72b7cc4778326b981e6742b5af873d0ad045da0125b63a6b2311a637b5e687013e5be9edb9dc283e8dfcdb55f78e422b8f29a441b999c7f259927c50509b63829ca3688be2222af4d01d34a5a345f903b3a33e816b509ab6247f0271fec22f9b0c5f74f39e0854b8aaa9a0b1d6e31ca0467b98902c7b55b753d3de6f9ad6bf1f2411056c58783e7b131fb21f926f5acee0a70c32388fbffeb6af98000249385283dec2b747d0e7a2e1287f807573c4bad0fb0de29830e93ee66133600b00d90d29a56bb4ca5ea741e4d2babab735465eb0d09b224745380859f4395556bf52b618f445f960514577082fe1695b6f889968adaea2127ed6ef006a9301235c580353ad2003626a0e12b2dad736e3c192af29673d614ac5663f85daf5ce4670eecf1964c4d191dc5cf052a81108b1b7b83f3f898fe2a52a1c81db98392d3d347b80bcb9954581561f9c32c988fc2d6e3b09253be1c10c1ab0a1e68086e33783697683724542485398da3689b9fa005420450d229a705a3230b44c026d79a0fe3ecb69f579ff39becc73d0172f62b9d6b48adf20d1720d24a01a8ba6f1e050fcd15d1d1cf71cc791239b3713f77964551d649956e0201206d8e74c0cc2c672285e646f26e983ec994d60c44ec4dc6271bdb116035940bfabcf8a249f954f9f69823b454741f88d86fabebb64c94e10669dabbf9a66a14d8ca7e8e945c33cb5d7497ad04c599d28737d567e843208db267a44a23f0562a76d0e26fa9c3d55bfa79ff85c2a6e10ae37dc55f9a51bdd83fd38865b1168806a93fbc27177696ed2bc631ae45def12c73bd3764a211225c373d6ca176e97b21c0322e26ef476e76013b55e6eeb29c9f5909b2ebedab68e2a54382a4a7a5be1018807413b6594b19fb8dc4d9fd4567e733204ac5898287a760bf418c23d1b81cc21df18c08fe2a32cca6dc272537d2c6203b31e15967178c1e7a06052096200b61eb2e6e373871dd51424717ce0014dc7afa3007c17e49f01569f6d1c977160676c9cbdb61023bff57f46249cf03c223f5a0ef58400d2f438eb8341f3dc0d1286d29214f9b6383678613b47a1b477cb1b6eed316e73f4235ec1ab9a0070c272cbc1789974b57d0f71280398644b984b5e6d66e8d33fdcf1b56c17399361d31102f25002db9de6f02d6a8e545c30bd54cff304aa16d834dcb86ac12d0a0dd74115edce1132f69a249c9c8ed34a3580949ff08aeb06b63e22c8b3439488fcf6d0e7dbc293e864e451b0457d6dd7b34b2fd4ac25f879fc79ad09a62718eb43ae11c65e0ba37fd83afdaeddf8589e37015422efd361d7f3ba9145a749ce887e090176c36e170a261cd11724b3908841ea0609aa4db88cf37ab999a7f1e0a287a1121cdb78bc4dc9a101a7abdc497dc8b35c296ad9907da66b48fe8a7cb59c5e34b06131a6d27ceceb03c69d83514000d207f382258ba5fb2bc8ff9555ada6ce3e12059878d437fd48e2419927a9a4ead932fb135a2f868bfdf8dfdf1f45d566f5e17949ff36e4254a49ad5a3d16882a0a90263c805d7e58415316bb8130c20d0ed12a9736acbf838b3cce9ff24013798e93a816400815a5d00b9a379198319034d24d8b07346083c044f83bc7deebeed40cdc6713ccae7067f3b63684c2bef66c02efcb3b26e07c151c97df54a5069f9b0926f461902a753e03cd79dcbf9feca7c085dcb90cf15e6211ac60a62d96d78ab85649ea4ad46ba2d0836cb1244ab51de15f6aa7d7df9b179b2d990c8b816f32edf2177ff64e3cf1b2a8e4b048de17bdd05799c7fd825def5d6b6ee9275cafbb977f9a7e77018a94974b0a8b0c794748e0ed5c1445979a8c2b8e479ad7431c003b5579123d4a7fe4287f87e42717b89a30a15769843a26b39345bb890c694fae9caad819ec5591764f79bff00ded44ad215e0c698b70279d32f92f9ec2b5061c4769b312cff965748ada545d64e23a500003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000044118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000440d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000440a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000440b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000004429a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000044141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000004425e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000004412978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000442daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000044189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000441159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000004405ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000004405c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000004414d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000004403db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000442ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000441213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000441ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000004414fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000442b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000044305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000044280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000044223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000004417a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000004408858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000442618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000440f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000440e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000044172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000440b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000004405bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000044137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000442e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000442297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000442608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000004418373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000440422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000044204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000440afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000441998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000004428d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000441da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000004421d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000440ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000440e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000044107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000442f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000004409726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000004424f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000004403c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000441fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000044205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000004425110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000044283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000004421cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000044094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000440c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000441f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000442421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000441fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000441bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000044304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a55b3c5f145739934ae8be32792a27b680dec8a8a5fc548cd88d2443307fed1ac333b3e7f40bcf9948c94d71408096793d154718114622b47370a847a3183c1d197960737d4add175ac57b0cd345ce3f1ff7eb933fc58b848acd944969dfe61219050298f0dc81e2da1f4f7826c00b704d361bf3b47e90d420d376067209ea29b5cfcd4d653c5e9cdd4f017744097e31d276731566d7c3fa7bc3795b00887fb4fa2039abdd056b5b8f51a0caeeda3b7df0dbe688a0aeda920336b3d428f10040c463bc9f7cd1010ed2009209d0bd2c7e49372b6ce764fc75b7d0075acc9450865926d23cdf8a37f9a4f1c192788e25efa1de7f29f7f1baba7f3a535b3a162d7beee0a264f43655bbf0d22d71685a7f7ede4fa552ce8a16096a2d1bafaba8b6d12ff9d588d97e43bb39f8249fdb5d99968593985b902fd7d28fc7b9940dfd574835dc4bf30b4812d34c6f1d35d5601feee2f23412bbb430bc3d7f5bdd59676924430273cff742ab212181375f02ce98d3523c4386010f1e7d0f72ac9b427f2a599bf8f797c03ad7c6ef0296dbc59c63d24a3bdeb550bc8c678a37b99acfe7c2e4e6a9f209ceab505d43380d9d9ff99f828e6fd917594d3dab02e50b893727a3f60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e656002b0a78f5e33896da048b5943d77c64e347da7b41622f578284f33c44310d6ec12413a907f69b67be52446b4d2000c7dcbfd88553d68787e7c96a3beeddf4463f1c5e88d6baf9df3ce62b10f8e6e107ae8d19e0d77ef9333f1a129e46bba02debe1d9a067d4285ae6d16674285363455a42a7e673f5d950411d4dcf7181a74ccb6543b5424f1d0907a6dc94c7ce72bf0f82a49f56a0bc60a9ccc4abb47b90411d6c9cafe4fa7dbb2d704b530ccb288dfa2bba65d4ccf5a68d37521d5785ccedbf37c5cac24b67dca96936e687a08438c9db4d51ac84ba6775b32d8c28f284929df5a8669fe2f74439d06f62ee3d8e398ab7634711b4aaee07036d6ca622b40a5a946a97d9f8a98014137262bc38c244d6bfbf574a44b710652dc73683326a67c246cccd443cc83354e46045bd49f8f23fc8dc2b76b6f7d92ad50623a2283b75d2d32ac8b986244cacfc5df7002de490c523d70aeb199e37d5686c1bb1c590de1efab6624da65af1fda3a807d2433f04a4742110ec600e8665b5fc4a554e4655359209cc6d64f7707032826658dc91b705ab9f6a526b49eae409613b161d86688d690a6be7f249eadaa5f28a1db7375699799bddff8f170a44641a66bb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000282a014c5f018d2741f1bdfb25002cef3f62dc882274f37cf4427baa0db77e7d4727d71b2977792f81ba8a3ca0e4668101336a60de881f8837a4d7ba332b6d0d1821840da3b6a5d6ac55db6249dcb83d993191ebbf1ba615e54b459d5bf43c1bfc867e7c30a5f62cfd9055bd629b4fd400c86712fce722bfbb22633a2691905350d3204c27911b1736d6ef81c24a1997de71d15f255e644f7241c3eedf70c56968d2ad7af002e13c81a40625ebae519f973f670cdc14ff108d2a1ae90b47420fb7ac00a4c31395d2bc9f157eb98dd4888e17ed6f7c4aecca1c78b0e19700b6f31d69927ade72abf6500e52a2204bc2ce64bd2ebbcc6304596a349ff947301c8eb9caf9ff8d97f8dc45d87273f962400fb297efec339996b5394ce1e839bc60bde2c6a3905a8e43e39a3acd473ccc91b6e348996b689418d07d348df89ed7cca5f86b4696b10c6456a6418bd73491a115e587553af0594a615df04c9da959027c50307b5ba3a95e95434036289a8c5c9626f0fd2c55e2df02ab92678cae4ac02bd54e03a0a27c4f369f7896eefc7d3e1b0cd08058f2b0e1b01c5e6069fba1378e3060b1a468fd31df399ba4d16f5db912038cf7b8b8fa70a3826e8273feae33f8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087592c8d8d713f1706f3217edbf040e5d95545c98faa531a2e1fee93e1cfe71813ffc6f6b0cd4240e81ca165ac371af89974e7b51f7702de09d276df8e141ce07936cedbc189f58040b6779511bc8a6c9ba1ceaa9f967a6d0119c0a1213a911371d7c6ba54d34e647c27cfcd860005f9d2b2c81eee8ee6c6d18fb033a1798b2d8155697da1c9842fe7b49317270b780f525ce5fa0bec1dd69cb0e7e65c33eb8adaca785d8df8904adcd01d1b15a3466c11ea77bf85506019fa49552cb4a9066d3cc814f607e22add6f3ba9eeda4b44e243e714c2f68f8c4e1f4a9e10dd4f580e4394e3afdb57713ae0f0e9f9e2bd185f36e892b0e589f3d215dc983454edefc274d7e85dac163a586268f5aa92a70da2b61ec71d0b8086b179614e1d00f747bd6f1a66aedd7e372acfe001674d30b875470486d4907984d1416af68451f1316e7de5acfe65c25c1de72d388cf8383c1f9fb9e3c03d0c02600a868526983fed45f543d6507d1ce7ae87b2a8564d5baf872a6b361a9e63aed6cf33d4b5979cf143f09b4e82bc3d03b15a6158090dc1378424a7c7478ff0c3744fea9beaa834282afdeab6ad46b8312e71f297826e93fc3797c98f6030423edcba3c613e3d2ce8e900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cac7e95cf5e79827928baa7ef0a5f6417e4dc188f323c32fce700f5c394eaaf18396dfcf1f6a2c4b31fc28231a72cb542176f64a9fd418ba5fac8e34921e25512a052159b978fb3140194364f05a76ebe613a3a000f7e79173c47dea2110568cb351e4932eae09d9bdd03a05ba32dc45fbff1332584953f1d8e0455ba3330da0b2d714873ca114dec59ac7dc565f6bf36c6cd80a5b4f3ed052d4e6911760eecaf74f98de535de092954c91e3c3b46864f2cb693903e5d738d1790b44fbc9c21ab43e1f49c93f892a3893a49e16ded01791889ceaaafb3bbb228fcfd8827bb5171c3b8457446dd61845f0c89d877f53d7189d4ee29803a35c60cea8b32af497df881c4a72aeb9370707270d9c2968a403f12df553a96165665f275dcb43feedc00f6752574122931023be6db4919cb92529b9ac6e7409a53bfcda3712ae76f97e7c4db99d2bba54adcc56e0527b59580ad469d1596a805704b181e3044d424f8b086860261845bfd92a720a3c97ca7f4596a4c400edd382bf72fc8b136e0678e533e0dd0e8cf931e6f86639846374a0f863c297ad0c64e0110b910f45f4f693d186b92d35ff12805d87a7cb903d5c5b56550d46757f9935025693cf6a7f9866800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c481104ee31e065e8a6147edc14906f86e6d91f78235a227811e5357df087dcb5ab92a4065cc778d8a0faa9a298fcd34a106d9f30aa97c81235597e177835c477af1362c05df1feb8c140cc78662d113cfbad33438d1fe9bfbf2ce5847f03cd9cbb8f099be5db6c3828050fc9f900ab212daaf6e64520630848ef0aa873e71de8ccaf9bca78c50a805afc7b790f927dcc6d4e35440696b4ce1de5928c2ab686d0a86086e460b046dcb80d0d5153120de7ca19b24d7762d9c48637079e18fa826e27e848be9321723797536dad5d90ee5d12c04b7b6107f8788d2358dfb075a6d767dcbb2b6257d901144a43e7cdd170adaf4e959f549845a9505c6ce0ae291f1a9a0a96dcb033e6d37afce0ca26c23765a264a0b8837995170ce998d6e3f5d21a42a6a30c1ec7e91fa67cb25481ec98258d7f7ce14b6044075e0a927648c2ec6300289e4bbf6d8c220175734d33b4a0115f28c5d0cc3a06d493cb16e6075df3cdaa4f74bc54889b81cef674ae3d41ee86ee48a51085880bad4a7ebfc3d43ac30c69a1c063c92e26fc89d83b8525491899fce618248e7250eae43413d464dcea7ff446162ddd40b2583f1a31bf95a2aa88637abbc9737fc7f1105ff78396c83d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d330fa12a00fe8f3cd38c4f37f98faf34d7acca5fd24b9d8f3a909f30607531a114f74cf2f20cea8b6d6b0ce0217d89b6207de500dc4d799d5b9765ea12a75533e63b25112dc971e13121fe4db2069e6945393c13d925518c628247a26a298fa7557bc7abd896e436e367afa6f661fb028c9fba731a0b446223d12a3f3c7ab568e32d3b875ad7e9f8f522780d941b6aad902f5601244df8f636a55cd377cd481e779a8160ccc6e7a2ed90cb124edb6b0c02784ccc2faae2c37116762af1f7c0ad8a83f96fb274674ea5d89031ae0c9fab823fc8dd28a7452412af504a6181f83a604b7811542e6a28215e20c939b5f1059a1e0dd3b1f3e8e0511795fc82659d5eb0d40c4f5d1b744b70e63a414e9e34b84b7fb0497ebc1e95c1db1152bb24ac1f6b449342f3af5700e0accf449edb30625f1bd3e879ac911e13f62cc5d9cb19894de691f415f6bcf12fabb5cc0d4cb554490b06c03a68db71c146307b578d086c48bdb69d2102bd0dc61d8e19bf357f255121a3488ff03b2d6ac2cb36e722156c0ec379a93c896a8a4f46bb723ddf94d9fa9364de3133925cc00e02ab40da494b2b450e5670944a21171dc8bf89798dcb30f4893e2f0acff0306d466ab6ee1d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092acddde55de991112fbf46cb9dd082ec1341628250fd9cfccd6b8a8c2ffdcce6590f4330f6d8e4a8d6b25d9d737f65cfd36edd23065e9526795ea8ca1d8e3f2d9f843fb55e9f3464dfa7014fa177e6e7911b6324bb75117cfc05722cc3ec3c8b2e25f296534e14f59bb9c6247201e2d8062320cef817fe333d65484788577567ff05e149ca495b5080cbbde4656ec11788ddcae571e5dff039290b93c6ba3b3217c2116b581df768a69fe28b17eea5f694a85fd4a1e3cac9ebd33e88c8ad01634cbaf9f0e7fb9dc9498bc37baf74bfc9160f17f46d3cc5cd61ff7cd571c1cde3f2e4847e5980b35060bdc02f1b4ac68af55a2b79b3ad8cc817c2b9f69c259c1471455d593f43db5f4e0d65309a4b4f53a4123d0f4b37805a083c055275f34cc88e2c40888067e6c18f453a330618fa35ebf5594a0875d3a5ed579df6e913428c9835e23512655732270338751ee9c21d7faa25ccb292baa3e1fce3f757013dd29f6b459fa6cbf85c118bf5dc78059b411503cdd55b61926d0a6f8a8e4e8473edbb6c6c6136b4c02a3779f55c17ecb419bb670df533d29bd7117d95bac181a518e3ddf7e6d05e2f20f6e4f660117d2fce3d714bc668463cfc0c1cb5ab944090a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000167e0f5fad3e37db3d4b49baf25a7293f7032346b496b86a9ef0d010663bce73c50d0de9f9ab4a1adcfe9db14743df0af0bd7fb89ba2e6047c101c790fc103c78d5601a82085758a521f5dda23954ba372447e6169b43559185a6052088dcb913a049f3e3ce6d38a743808c1700bef63ecf94eaf9d84c3aeb701055b73cd84125e0e05e7db66f77ad0f2196d5b0e0271833288382b761bd8d4922af75f434a80da139d245dbf61cc6c8d1c8ccd2e23442263aa6bc510f04569b2cb8b55bb4db8bd7a75972e1ac31b4649d33dd8c7d0b8e7a39fc8bf2f347590dfb782df8fd24bc09d5353ce95e2a68680b961c1b9b7bf06d9e4b132bbedc14eba6adc45958c1be010ea50ac08c08e0b9b0ced0d25278e86b9618f1d815d3b902943c8b4f8d07a04db6406e406b5be211410d906ad0fd7c0ec147a1a23acc6b95b5be5197095c61e2765e1d274000650c6995dcd59aa42bef04c3bd9ca7b4cf8253f077186ff4fe61b593c23149ca2f82995c88aedfa5e31fdfb878d086bec32d12669203571c84f313a2a7866f81ecdf66a67e468347a784c7a4ed1b1ba2ff5b2401f95241535202ff3df7039f4212fe3e7f85132c28d8612329fb17ecc6de8e21e083b97c4a700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009822431cfe49633f096b961b8c58a9de39fba4e12ea3ae0b0a82eca23c96eba3e2697b401d7051189eff360c264d09b83b2f72e440b392d38c5e1a766781eaced8a7427f7c37afbc19358bc2d95e029897d06db2937d29f797d45389012b0606e44327da777fcba5013e4f4dfca3547c119f114258f810a075e6bc747f861a361a6f02ae5ead0adbdf25f950b99317427bd480fe2871ef2355004bd25a7cb37d2705f4c9eb9acbecf88c7febf18d4ac6798f54641e2b1d4ac87f9cbb3dc03abda4d5ea9f902df96ad6f2bf21b1a51aef1db9cb7fb990ad4f4d4cf8208444af5b4856b7e53ed0d960f72d3519e088d8c67b3a544cbf9e75a8b317de3424e0147dc41ec5a3c8ed7c8f0e0bcc89a94ababb3010b808048ef5bddb37447ff88a9e4c24458185ebb25e45218c473b4d08891382206ebd4d7b0b57025c11be3b6a4caf8a68ee687b5bb940a9c248ce2e1c83960def92f57460e76aa17f37e8c84e576a1b1b8aff8a986054a93950e25cf835e0c5de73782eb62784fcfd7ad45947f62a7c56003a7709810ce3b9b6dbb084b3e3475f7e7d2c7bb0d7372a94ca3003654de37688d877fea419f77ccd4cc55c197494e652065ffd6675cb4ecb9e27bbd6200000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000919b0642b2098e6a579e479b2cc73d43d8cf7eec363311b18d6e344a9ac93173c858fcefd0dfe9118d5fb0a26b5d855194536c63b4e108f2d1adf24f64b72a4262ece869da587ae8f7d44c4019fc5b61f093f1ae860dfd602ebf46b6b3110d26f6736e3e09abe185a7e7d2c9dcfd4b7857b79f8c8867653664dcf14013b41e7896bd3e0ae0134647555914dba42dd115858989f632a1412948a86aef1775e068b47e7c67913c17e5b8eefab246be1186cac8bf34b99252facf2d9e860fe44079b52233ba79ade25ffcf312e0b2eae138eb37d29e3c53f5766554b60999eb90eeecdc438e19f38d971303454c91031718ee3759dfb0fc0fcdafc65ad6baaefc06e6d410da367f555aa1fdde0c58c54d747b3cfd53566d138ac4b578683313bcd4846a44d978d0fa1dc5d480cfbf8426edfbcbb0313d6210a8ee48a98908303bea7f4be0cd40a652da227bab0e15d86b9dcd1a5fcbb17b0fa7fb8cf5850c4dbb49841ee1d92c43d5052b9fcca3cf1f33f1031a75e0e471b5bebcba5423347c7f25adaf3f5950d84134f11f39cc102dec945fc8ce3822ca2727eb2e3386f67c4612cf3ff28aef8580fd2f034cccff65e5463a836af33005b7cec016950b0202427300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e9c04694e4bf55944084ea001866b7e6cc01bc93363fdc28ceb575d1bef67679ac1163d3ef5d3c10a0fd93334c38ed1f14bf283da719dd10da5691810982f3ff2eba00b9862c08ec93a69d7bbe940cff9eecd5c4c8c891876a321c2cc93789beecdd7354122ff49f2f30f2257171e41accab0ed9fcba28212959f85a523744bab37e41ca4fb4f7159cfcca23923fb7f32e6a632946b5cb4f35eab0418c2e6fc77207a5bac76b014086e9e991f8fde522f009d3a2c223ade6a6ac990df634c41159f11044d62dedbb3a71e085dfa02b9462f398a3ee5b754f3abf9e5616158eeeb02328d69f92728b245246c9e389cd9471832259478b9470cca8c2eb72575ade10d95fc6a0f81a850cf245609040cda9566fb7c9307b01991eb742486a05b75433e390176d868b8df4dcc1edc36e58e077367669896321219f5b5e0e6c53d6efdb3aef46128ac70425e2073ae1c69b5c60dc2f9a3f71af6e070f5e6151012f1e909c04a6f1bb2024798e4f9f15d5fa0cdaacd3dd7370de7dbd7b91c732fb6aba182bdda6980193087ebb86aac6a88e20d6697a51553edb79d5ab19c1f14c137e8aadcaedc34bec42fca1f777b994ff64f5e86d3d7eba47be90e517ac6cc819700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003059f26d24330db9e8570313687e386b073fede2c18a5b407746bcb1920018502ea8371509e6db09d2f23620f48f8cf23100a9476d37fc036aabf541069c99e661f58dae20ee60692e637d6b3b1ae6cdf6eada09298798dde2e1d3bb432f8cf06e2f157d03730ab31ced4295153fab178c8bd6e5c44547895e919292bdd353961d5f7e80cb75f5c3199e6fed3e2775a449a208c648e87c27afd8e087588f06ad1f92635ba965a4bd7eb32f8022499b84bea3ba745d5e50ce3f3cae9ec1412fdb5636a5d8ea05ca404a4a6d9113c08f7a55c254697c4e782dfccd42c0b1c8100c9fe2a92f28929de0e143a21d881676d6787b7d16e223c9cd0186b68c0a90e35497eba4e2f363004a4c532789fb9f6f31a351f4c5a18027d17915c78d1977a6e7e57eb9f9408cd04fcdfad718c110e696f061b9370a84ed8e6374f69bc89af0982d7a4dec402685da0449e31b708d9dc76462c9550facd5ebb47c90e8249ec6a25133660e70d4f3ec13a9327f51b20c8b40ead3d031b8c14a3d21738e21a5fee738d7bba4d2a649177b9035b96ad688e69542d9507299404bb7e412dc465ed8aff4432c0e19fb999c989ff7b199949d6cdd11a5b664cf68f2f7dea0622ebdd3b70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a883f024afc39000da1c4dcf03c4d1637a5313f696bb0b8f35cc6a2c6b3a9beb22e99567868435fb0937eeed20e2eecb0937a05df16a475fa79793d1983d3ac22742fd6586a4ade4debf8d97fe7009839143a08d61ad97e942344f06852efb775cab84e43e56b1768b4fd87e3afa57dd6afac94e26ff74542b28416640797ff52be3e30bf6dbff97da6b865158cd58c6a72e54f68b44413bdd5ac139484d1d49944ea7a10ea442c654f96306ce267fe42296afa834af4dfbad2c839a30b4be9c60a72614a0fac6079e30ad0de7f09b6a35ed2952bf2548e0e3a582815c793a004d786c0d1814cde7be80a5619917a0f4c1f81e61201604826898d6f0ea51aed0215afa5443568ce058cc3d9691a40e3021014296098eb517688bc31aa91c022391ebb28be575b615522bed127a1d257517f859b8ab7007fb6cbb1f54f9d08267b03ac9c8d2085329c89aa74978ff4712d0f497b93332decc4e905e120c7460451a4ec9b31cc97e91b28919214dce260cbbf7620607110826b458f1e78b5c6bc93778f2b057abf46cfb4603780546a5634c0b05a0d45d931553a6fa571efe982070bf0f902ca9c35dcd4cc6d5eca6b87a7323ac6f601643253ee4d5ad1ac47309000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006abc95e3f2fe221b614f740d59689902c532ff66b906f2aa7937e32b057c3de52dc11949733f22ac4c6d4baf5810cc4189913020a6c8b9793c3a086f9f3c8f02759efc59f251b5ae405fd3e9ba52e60e22fc5fd2aa685ecf815d7c7989ffec4a5988abdcea64063f7b545d7ea281c16aa0bec3af741fa78acf8a9f937d846762d94d10854cf0dc3a2f768446513776ad7b9d4b07758e8d509f90d11901f18907897d46f35b1f3b86bfda82b9051849a1e8bb8406145569c88d588c475f751d29fb5cff7c5e283cbadc684eee40558fe66a626071a5fccd0cf889ac4eae97e291af230c796bf2a4b28763e3c4477fdbf78b71beb22f076ebd36cf5730a011110585027661767e72fddc3afe2d0aad4f322e5824ca10f1320fc95b2d2972d7e1b230a48abbea9b05537c493431b046595a678328a7f3e699f9f022fb5c19d2341ccd26d363c954a65c3d362204c1d1ffe1be6bfa7eb07a66541a02486bfea6ae5a4d61f8d98fe290f9e4481c1801a69f95907ce935f4fc37e75fdeaf32bdada9936a069f062ff744857525a98f55bf0e966715f731246f4034ae719f5c127034608b3e2ac71c105c0b55c25e75ac39d4c8997752fb9d1e386d9b1d6c6cb224ea8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094e5b4bc2d820131163cb475556d604546adf8c2e3252813f79dca9d30c852f0800595bfdbc215f39a04cb6a7ce5a1b37592f29c1465664030d300b3e162a5e41727c1ee7cef41ee32bedf3114bdc7c65361988ec14f7992604d04447ae819856d39da1d4bd482b2e28596072f17e6af336a838269871cb3cff1447dba246bb2e1a4443223a90c2a0abfa8a4dec9ddb64f7324f982987d2522d83b0c8014c2b861373a4c5884328e8145e156c5634f21b71f1834306a25be6a4f30fdfcfb0543ab34064f680f0055451fcf51f1c3f5c353715bcdb20eb04487a66899f2ceb556d736572c28f5ad4351711d848308a64bf04386529d699b0d8a124371d451e5351ff625db98cc59048711644e33bf90c763d139863005c0344d15074b470ba2ef0368da80dcf28ac7d8541d0718a2e002205969ff88c3bbaac0c7c9a604206a4169ae67564dede02ef614684e1dcee7670c4e0b32a27a9398a7e1df45355fe7acc20ed7c63a24472f1cebb8ab73763fdf34be3b51a44a9fbe7ef65c12754de304b6be1dce01a2c5089a6550a627f027a1c4ceff4a2357129ce4ad49a95f279fb48a60e29d9c1bc8cdeff1a605de62251623e19b5e59f1771022d215c94972caf30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000167485acb56501135689147e1cab4bb80fc4e43afeef9521a8c0d14b8f6abe62625f193fd311182adc92ecefcb9e684d91151c68bdce18993ace1d967a4e475e8cf86660cae7a595fb53105a3683e649f99a19c200129388b8bcff71b9cadc04f63e3e2c05e671780a7c869198cbfe1da7d7632a29812cf76580033da811fd5b07d08de331138faa74e6cd86d6a38b4d521021373bdf144e42b09c3356cda5a1630e6f750e8a722fbb91c8c55a66447168060a8ffec7089144da72b96a2f018ee4cf772569e2790009834727e48cec63ef827e5f39cef74cf4698526982de8e4756cae7aed9469fb4239bd49ca2a3b5bc2146311c814e88701a5d6c438d905c1cb35612d69cc5873126448f22bb0017171d8d9f4ff5933bde4d5f2709f7ee6befeb267ce5b9a98374974c0862ad5b5baae54b057356982411e88cb4ae22c10f0baede9675007f5d5266b7efe1ec6eabaeffb83055ec67a0e1b90866bf52777fcd90a9c9b20e364f0200c72fd780cfdbb3ec5ce485ff5eb58c08e13ecfcab3cd2191c1f1285f388548c16f2abdff6f0dc5803e9f9c117594cefde36cca7bab7fb51b97434e7a955b815a6a84047387ac130e56ded8185ff2156709cad33088f610000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae60f47386a2b7777105f1999e31df42d4e4d5d5c178883fce2a58ed6bd93a6a8bd1937cd7c10c41bd0f9d08555b6581b16d5ad02c590f2279ef3779d1f3c8536976d3d1c803cc2c537bc5b47ed9786b58df9b71b24b690266fbb5e11f7a33a59ed2ad3183e28958b631021e17a86cac54f8474b22a58281cd43d8b16eda9c01784ca77b8b23d6b4376103b00115caeeb1d1471d51624790934c5bdc3b7f368fdcbb08628a67f1ea0d5519d64b4133cb6a13d5d4d5415d05fc6125268164d6b235f330d133a0b132c0a7f865f57f6ae111f998252344ef623977b530ab82e333656f97a3ffd20e7b20d4f9f2307f192f72d794b2d34d189a1ea742614c1c73059ff9699eb4820027f87b458197659a3e497dae246a160cc11ce639b3e5ceebf9c650651a955ca44c4138b52aa3df812e6db638afd67eb31fda2348d6233548da613efedb3be17380b4aad3fd4ac108e2a6554f4e8de3d32580d106fb42abbf993da428eb992b383d88259c37137e8db192dde04466bb11fcd2b11e364458d07ed98df7a29ad9508a8260f61e9d7b1b25e84ac78a08626dd8ca010af3f3ae3abba22c44d9b1b44af405fb9b166d30e95f21de35a732432583d5e8716dce78328d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082fcc108269769ccdad82e6d732fedcba686d52a56d20eedabf40d732270423e996fefda948449bd0be51ea649320df8c7caaedf2557b2504a43251a02c155f1c427fe3a5cbbbea659ae0121580296e843b39d7d09b75f9650d5f5c7c8dffcb1c83732df42fa77907d7f1912b7d0bd0a6a5b8f9b955f5dd4e7bc528babc1faeaffb1ca01fe60be20b356b2efbff2fd3a03ed61f33083c36ac7ea64b6cc2bf11524bdd8aa5b891fd0bfe5584268353b087926d18937c8bd9a46d9f17e1a97f100b21a9dbff472c0385faa8cfa56d5b4786807ee1c77027217d631fe021807e2c6fa7c324cad88327f3e706d3f38f92a0e58052a988e9d8e97f8cda3365ffc54995a7873e901814bf163aba9b01dd55562b2a1c3a415fbcfeedf41c05310701a49db00926f6698bf8313e39700fe051b5641d7afd93d6fe757054b0dbfe1582cb87de2054ae2fd39860d1717e598a231dfc508cee2ec310c99dd6199cb4703daa4505036a7c7a5e7e36ef507dc38b4cfeb7d7bc2b5cdbfdcef7f697a7c76e5075c2c8ed163a3b7dadd60062eefc1cb659af471635a44c076c25b79e66bddda4a69f2e76987677393edaeff96b3e4e98920346b7a6a017edf70dd81bafc70768f6400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001096c09096753c49c0b839a5d9e2027a4ad7fbd65dfd995c774ea9b3a725254176effc07b14621397bd2ed5cdeedbc9fcb09aeeac036fb61789f4e5d381fb4ef4b916200ff376300aac16f312aa463562369519855170ee28714f06115a4864346542804b6318756a82419b3e96f510c89a502784fdcc71feb2bc1d99c28b979a02c937120357e91437f719c305a0a2f43578cf6cd34b697e30fd7494d97b2b27895e183e170c3a25b6477202989c9fdf7a57bbf0be33c10c53887f3464195d052b73cbbb2be9d2ab173945db7407b47657556bebea3d3510b8188f90c1857bc08d460e8388f12013d82a7a41257de8a8939df6e5bcb257f97f0ec6fd573a2d3365a59aa59a9d26d123f42779ca96c1a68699fcc304fb323327115e85d0c8284a75c9a797bc921c9a81185e1bd47982c8d995b5afca0d3f72593ac7776ab60d66f45bd37fff5c1a3309ba1302492ccf708e3f1a5229b30f342ed03857dfd2e28f69f9c698ffcb90ee026f2558d0f4e8af32d92675b869c7a6fd2f7a6c16fe54f77c763a32a987e0d3f37b78d5ca69b81b7fe5f5d6a4c6ce5eab1ce2f3d11dad3d1939ce764992ddecb6b5b185c4ec3894876ee9083db74798cce23bfe664e0920000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141570306a4be5dda16cc5be6a68c5c3694044bf32c79348d9be32d0ff161a6954f467f6087eb165658cc69418a3bcfa5639fc1e840304a4bb2f4119c849926ec809a4d707de1e8724d2bff3a7b7fe54938476c132d6223471860a324db89ab62bdfbb90a9913fe8c1591684ffc0ed25a7cf314ca8454553e7c3852d6fd4eb165c3df6c32c8c5a776c16f565819e5a38c02f25e433c95c15f133a3df3c43cceb0292bee55fad0d39d925d375fb94e92645d963dcceba1cce4cc792f24c52a43a6dbe0026b75d92c1aeb570656baa2971e36476729cae926510be56dc8265983e39e0cb2a22434a6a306a7a93668e622d22c722d1b792c5f6dd149648c30cfa338b2d36c751667ba536afa4cb9c3730556337ca0cba1d21d4bdf33c86e3d3d20b03b76de5980bd5e50c40bb78fd21f4fdbb6881527f37b508c45a2860cdd570d259e220c946404de233b9f97069c645385fa13781d365a3bea25fb006410060d3f23b7a8b319e87a0e03206a441e882cf96753ad1b7737fdb5cdc3ff0d37cca44b38aaf25831cc4cca22dd1b62748f735176876f8c85839fcd5b4c2eac80c07923e5bf6dc0b37796a2e1003dc87862d4a1c40dc2d57c3df31d2cb31ca8867ebac000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095af0074f7b3063e8f5bdc8d3260d5692722c077bb15382103b7c1e9cdba0bec49609e7e7f0f541d95de8717b7376087d78082b519756460e6bfcd707bb7c14284ac8c5d05bc80d580232373558bcbf7bb5878e35528ede63c36ec8db4db99197a2b34d58c977e6ecbba84706c5b6dc2afd5176f9d9ac0c3bb462d14723708cda88f27a449ee252faa1389e15072e100a97a5e69af25b2df3abd2d0ea8a66d5e731632621603442cd4e9b8538637a1ac11b26d7be0de7e99853b566978ce43b5996e59a2320afd85255e4450cce67454f1b78c47c447b4e771fd2a7292c1ddc33d4c0fd38d5e8f69bcbfdb139caa194ff73e0b3487d1d24c85963ba2d74ef32bf306f0ae94e1789550e4ad33be4eba0265c3454a3a46dc9b98ceb8db6253a20cd305b46dd118a3a6d873b263837b7ce5f3b310492632b727d58b874c2ce46f10241f48374dabfa552ee714e3de11e9ee19b49eb983a3ac42f5fcf6676ed8f89614e1043eb81d82c5343d4c651b71c6a746d5350f0684c2d059b3059050a611aa99f8a6fb2630c6cdc3466f210afa91ae304d2d0d8b26df478d317819f4b5df9b07dfe040c98b5770e5ff5fdaa43d12c8d42002f9762c428a3d56625a3c57c3e80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a08689519b0f1dca46cc80b95f7d7653edc627ac6c7d28c930f663c5338be2f546cd6afde93c3608ba2154801215601487e6f64ba9e4ab18fdc5f5d35a95756be5738129932b17b546b216fa63f5c8d00fd8dfe42b6ed21db8cc328e8eb7c46d1d657bbcf8b5444aff89c8d4e7b64a85b3d6a6cfc29a24562b5e0b5b8db923a0a7366a59731bbbf9bcf954c02fe590705a8a9d20ace7ea5a04b50e4ea134be7729e76f5a652690e958c4a36a7567d1b3e3ae4c91bb2b7e71737da509641aa449a25082f3ec73da8051fcec4c72258cbcf24ddd8cf6caddbce9c8f185c43b2f31acd3771a057dd748bc88c562989442f1bd4653f295f1ed6d25e8b80a70b53fc142e8ac9d908f19bbfbdb41f42da07f31d260924547f29c52edfbab86fcdfed5d07160e150593f3360e54f0ea9b32fc1ec5bebe7c8807c7f051358bb1fc01ed292c2c038ac8939a2f3743d4885e8f3ae3dba8b9db24db849126bcb1ac91cbd84b1a2ae0b34c37ab74463153e024c1fef6af374aed61296d49c88a0e9c736399b5820a8ea858b238faa2c8e9e008024f46cecd1a84ff98e597904f6a9699b631fa08216e4c8a6528eb55fef12a9b56cb678b3281188e2e931f815c11861200bee5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086a14f72814c08828140bae7267b9d1245d8f0cf939aa09b967e95ac7c134edc5b8153f6d32603ee924ddbd557fd29eba91fc08d4751512e75e3e0ee64715ee107f70eaf07f591ce69dbd7aa20a9f18a4b9cdbb6bde86bddd17556a6509a7fed1ac7c5baccd1c32a52d35e33dfa9241727e7856799d06967b5dcc51ad9f05ffe6e743ce95813c55702acc0554ced66da06a94104ac5cc6f45a45bdee59f51508203d3fb3755e524ff629b73640237cc97262e7a0e797d9731032f886124369dec702c5a1540b94ed9c9b3139077217a2943a38fd1cb1df7fb66972192b3e2c29886bcb0c906089bc462e0ecc5ece53fc2d10b527263c2c708feb88f7c247c3883f7b82f5000b4b5b436f6ebaf9d84c4aa9361dd84c9bf6fc53ef23cb62155588f16f4be7e31b764ad469db70d7a81b2ec3ffa58a7361ac8e114d47441e54dce719da1b040d66b862c8a9b372c951a3236b9f607eac2b8f797c6b4b9b38aa402526dfaa65919931fd86224cffe7bad9e2dfe5a4a5d8977544540a2f13f5582aa9c34c131da16d0dea6813ae46994bd20bdf655b1db508f4885b18a556dfe550555a09c483e709448b070621338d97f8f4d2711c897bd6e718ccde4b5a0f80990500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa286f8c20b221fa72281526f0992a0eac286d3cc03cca2793c4e21b33ff237f4703508241bbe9b36920fba5a7237c05cced3d05ed446e85c6b387f7b6ace0a84deacb4195bb56bbf14d928bef5b11a4e61eb2ad3c5e843ef90bd6893a7bbbbafc0fb8207c2f3acd3008618c63b87855b9266b2d6b32f8d69e49fad47b76a0116c034c967ef2ef365a778824dfd272cd53a4e86dc39183dc605624f5e6bc7d41a347afe6f161e231590c550260036411cce0c0763f3607ad9979683d3e97374b0a332af8c07878268434a5195c37d7059bece35cc00b5f17bb9708954ea2c27600673a5f667b7b61ef38ac43ced7d4de4e260673a6d8c254bc9048dd7beff040b638e39ebfeef4615fa662a755e746e659068900d636483c1e878ad99abf569e1aa3cf4e0f09e1b6fa16e8c397d055bf0f25c4aced52ff8991614777662c2b061b68196eb6209cb222b0d4c6e9668e034c4aed37b57b9f0c5093628e81e85b8e5938dec125aba5c46bedd4343f5b4fd7c4841191df6c087ff8bc4de6585558d3ef78d0340c845d5cdb5450e0c554066603249e30290184ec000765706a1b964d4a351cac81e319f0f60f3173e6c6ba868b0a4d15f75d04403e9f7031fbda0e10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054c9ace6032515f88d6a8f0271255059a0a6d174b7a2667d1a1eae6e981f2fd6c48bd8718f3a7b977b62413d3421f4ae2cd1ad1588ba618d690499668abb76d01c0dd4cd0d2ef1b0154ca7e807348463ca38a65cb13372ac363089477a3a09c8d8a367ad87729719487afd332c556d0c9d30531d8086663666a876bcbb9f915be9b92b717bede57146a9647385ca68037c624cc87b35af14792caf154ba33a236dc992b750bd8b7bedd2ae38474f1a587f621fb3602aa8ef1bea381569a8d99622960b8b15467ad671b51461b143db764ab8e5a94079eabf68a32cb34acca9eca97cbfb9d43519f8774ee07c8d8721bae6fe9f53e27e65be8b7138961bf00f025ee4d53167155d19795cd1a1915a74cfaa1aa8db77e7cd6055a31be237224620771accb42ba8199b59cfa5f322bfe142c545106d811cfdcf1c633863268831b928e0979b3cfe3de6814066daedb766dad8d7d73c3003170b613099bdddb0787ac3bda838a1358e3147985c7d9a3124a6e30f52136e8b4c979539e30626b53891fe72252a9e4395c2d72f6dbd922d087703612a6874ef9aa5b76c3cd73e504bdc22df9ff1adf30b02a6d1708cb874568779afede52791562d47f973cc526bff200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e70531b07579c57afebb3b2076afcef766fb89790c4d78190cb16484da27e799a44da5528632e1ccda5c0f35dc018e58210aaa1c5ce0e92a06fec7075e369e0bb9ddaecaf78a62b548b973a441341547a9644775bd3e0096d05e9e1aeaec9a474288d85d5371abab3858634732e228d2672e0422df9b3c83bc522b45f75d22251f6c702f4ff75720f83213e7a1a891c10a36a6dcdb8fc0e5373312e02ebd5e210ca33898e3ad24aa55ca0a332cdae5ae7bc941a18e873c0f719cff875cae1c7d03d3ab3bded575daf069f672d65a29a306a225a1e51c67f927f1eb7d74785808fad4c6777e30f2b189ac299481e2ba1f240b5746a65b047f554e0fbc979d1bdfe9a701b2d73360f74916553395eac01675035fee70fe8795b6d0453a59a3c4a93d7f2529afbe47a549a22d38a09ae120ea55c17d0d60f2eaad2e67efd0de16a32adcd442e479e955b7e070ade5eddc46524ea9ca8e147d7132d140b3d5503e7003d0416b2c4c0587d520743793f3cc4ea3b47fc0b2fe82e4bb20a6ed863e8f23d38e9b9ee128dde1e438622f0eec15c08d368986eaf37a2cac4be8bd9625e0c3414e9ddc38b651c4ad8f04a3379005655d30210ca0dffe52b108109542e1d8c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b840a006519ded086b08c9e781d4b72b7754e4b7f48d731cae194366fed272df5ff1ae063c5a5d756c68c6d060badd9d4502bce14c10d5a996829cd6b1a3d26225afe502735c7485079baff924a1b4582739c85807c6aec33806b6a36f33b822d351eb631bed90f5f47d585714a8731fe27723f173bd62ddc28fe50460bc8dbfb412e92078fd666ee769073d04c4abf409c568ca0908e7c179216d0213739e8a37d156882accf3c15045c4e256f5c47df1728b730619e5caa9c4887a52b16215da3643e2d3fc3240be65f97109b545519944aed5e2feb261cd827e5b21d8942b5cf3e9a870c24d28373693cb138ef9ad932ce95f16037aa38f9264ca311fdadf36afc7dd78afd98f0b4df938d828001c045c952e924d6c20975700f70ded3fa3034ab367bd5351fb661d565621aeabc496e013213bff445d85818758c39888974ee928be772135fbeaaac70ac1f934e60ebb56f3176b093c2f3999ffb919e9d313b44927f8bbefdf4b7ab308d5dcca04c4e24ced07b3427a1e16f85dc11f8752e79456fc09f4bc874f7578901e812cdf26cfb06208f89cc43f564966fa1cb174868522d80e7834024078b8de775551839e47c0fe5ba3d68e45629a1a36ddf1d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000587150d41bfc40dbb1f4a4095be0b4a243a7e23ca9ee522a9bafff5451baffd54d610c2c00e29d2ce0c6d0939d50c228a0e7108a36464636bf0afd4f3db8b47980b017de2e9f6b7588432d26b652c80e8739cadbd04a0c632aaebdc069bca2c4907623a5593f976519e3d55acdd3eb4d49456bf40bb3c2f4b9441b7d9374c1c4b00163e7986caacffa07fc1391dac1e9cb95365bfeeded47f81f7ca8edfa7b94bc21f29b4c54b94f191e563a0689d8bc0cc76dfb946ffeee1841f61b266d385d6243311c9ac8f2ab3d94374e0823c59c8cbded80856ef09b408629afe7cbd33e8b9851d076fbfd12808145f9595d0129bbfb90f99f8504ac5e12a5b6080a778fd42e0b431d6a859e037461cee18796d1e1f72d367859547417af95d619e9469fbc6effe746ad91523c71444b33469fd15aa56841c1827f7b96cb34719ba4b0e267b0664270bba9ff3b8c36fd3146520f5d3a750e2b7b5e4e093a020edc41749d83981e0eae9a998bbd787b50e62813184e7b809ce003d6abfe3a3aa2269f0768695950f22f18a9901bf844cfcd4629d535cb57afdaedaa50ba108e5ac7baa518882d9f9467ed57c7d543604fb1a69633b9ab57319780cf512f61f03036dde6d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8d8c9579ed8679c93334cfc1cb75cefde339b7f31aa73475513edd79a189f37289993a7071bafef04c2a5e69fd4cc19481714fcd059b0cda376eee07a4dc589af3aec503fbf7867ef0d17ba655eb262eca8a113ce8da40f5d47001974680f6010140cb75108b61636f48692347c3400f041bf16c540a35138948bdc18988a39ea825cd3b3368524345cb4749610566c8aa226ee6ceacc90a3bcec9333b5c6d0416e14e98dc65fb39629266f71f4bd59f3b82cd5d43844ce499ee3689e186925132ec768d77b7bbb2b664887b13bcdedbdb704157b41f99effefe1d4d58f94a750c55de0216c27d3d143a92435c69f7ae03a060b0febb0c37a7b4ade69222ac42d63373ae02e91dc8dba1ff68bdc5f37e3fcbdd874468c5a7ea57abc229ed6cb882b62c667e2358dde8227b9082612c8eb89312a2e48f1f286510a5e67ecb9cc22e5893de520e7707dc6acc802763e4042d630f17d374bca956a8be82ac2dd9ad76548c2ca83b4d84dd9ea615d0be30e2962dde83b2652b53d96c5a83552c179dd2ec276058be46cadad19ea5e6d4797aeec68375c5ff29ea574a536904d8fb924ba4239bb77f6b91da77968eba9da935464c39fe5bee5bf80a30c9e86291ab10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000812d6fca52db2a2f6cc38134cab891a6a694d3402965c4823c801815319cb20fe1d06b72282276e2dad11b45eaea447d872b35618e708f9a2ecfdd1d1e80d16f0ec13fad576dab9c27b2f68718b53f6067edab4495b27cd0f55ac935bf37a2ec81a2296aa2479158f6913d08d720171c7e27df3358c7213f0e9df76db12027d9805d9e5bb2faf241b4c49f195ec57d51467d848c65acd3fa8d7c9f2295312920c3ddb6f00fc9d76d36533fe3407b9f9384c140eaaefb4c463001d20dbd5603ff5cfaea4af024a36b837d572f450794084ffe998bbb27e6fe4b643bbbcc0635041afa728ea15eaad891879628f92d40a041d85735ca25af953e50007419e21428a139004215c05618b39f5d8d3cd03f57bbf29434695cc603933159828855b54bfe351a3c78a879c0d06c14265973f72ca827218d23d48e108dc89e8e746521bd3d4428dbbcf6b1f11215b419fa21ebe582feeee21e6b6580b3525af900264eb90edf60109203466fb2c44e521a2b4aecfccc28b085d8023772b8815db4ea8d9f7b76774584375c64ab2f17aa823a0737c273c093e769868df1ef6ed110e1469f15005469b47a2bbd7731063b1e1ddb44fab64ba878a52ef9f3dbb994ef6f58e40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000237c3aa508bf51611e789b4df0a84354b8643b3fce1148c66dcff1eb702d135dfcfcef3343ec26e81f540ab70a04523108b28fbdd210a44e8d7a00794b5e81017c9c618a8b314a4cc52b37dc277dc2d8132ec23e0078f7d32dd0f60cbc0f95b56c0d7bae37cdbbb5b1cbcd24998dfc4c20137847a9cb8492b47737b6163e5975f60d7bd6621d2243ba042e3978ab82c0e93afc389a9a82d9463ad04fcdbb59d8eb5df6276810d4a88db5adc27f81dbb9e506ca00f9a3da716edf6d892d5645731b5ea0b2d1bcd6241f3a97cf94273357305c4973ecd00e0d7aa5fee1540c5c7e3e56f38347c1fecd8d95c0d01b6d3ee33696f68c5dfb900b001874889785a2545a6bd64dcdda61a162a43bbbd5f9d4670f952f5a1e5dd1197313bc03b6f2913b0f08d7bd0c656a023bb28647475edc51d04204e78d916d56ac1b26f5942afc542c2674f656aba4ab53b0dc8b5055d466d6122ef139be659c6551962b129f650efebe53bed4042c5ef61197b1b43faf0506fe1b9aacffe688bc200407b6dccc5dcd0393c8aaf8ec0e6a515cac1409d4ae8fd074eb1aa2db78bbe8d477c82b155bceb8e11c73698a42bf495a30055c5b461d4b62e1fc47b808479509e0b161889800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a193c52645278f428b424aed4e75d0b48741272bb70619287917ec224763e8772e84ae095242e1654942a7d512d5fc763b206c2e9e6c328a17fe6ad57b765e1306c6efbf43fd778986a0cba71ff7a2ecb045f8663ff046d33d7af4eb8d76b4480e451017bff24d81d0a94cb59609985659c7c5894f29c23e3d74f4d627c36f835ec2860a75c722257085a31fcb614ced1211fea58a25f3cdf09253732441684582e3e6d4141309c0409b9e7a3687afb6a2c046d5830b9f44c7f78778f6b9569285792f1c3e468f83562502cfe2d690276a465601dfcccabcd2c42d6947d802d745de9e2cb1481e66e879be2c9becc3ae5b035a1508a37f991cea8a61717687c0104c675342d68e0966a497aa83eb843dff85651f3d897dd9da5b672508a33dff8ab7f14712e1d7e296e7792d58dab3292aebbf03d2cd36571862e456f5cffd185f865da90f89c196ec70acb3ddf363d3afd1926880af66a5c488a0d0038042d8a432f1227ae68ffda8abbcd56a91ee6be67a68c35db163c21ea5eb23c91436945092bc53e8b3ac78379066bf140f772127948927f1b30555e35d7a869aaa4f325f0bbe7edd20d9ee412fb27e0b5902239902034794391649493d544f9f330ed00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002306f645a6b239a89289eb4614b7021f4d3a73288386894927a74db08cd215d32ee6cb3ecb8bb9f80494a44af11e36875b8d774aa8e869f510ede74137ca7e42ed199ecd4f034118c4a999bf13e223005426789e23c98a48ff6b12fe8c55f2705bef7964f821006ab33003116c291440b803a01141586bf83ade6052b622889495fcfa8d93bf8edb81534ea96d328694013d63454b9f3678ed8b8344fe4ee0a6f0df72f177ef1e168b866a356ffda2d276e403ea4abce43951e14a1fefa78292143235c159a437cbe545dd2a87c0410b2398c7e82a98a01009cf217b9fd2617b31887a9d98f4ce645c0b9bda31d94844392ee552aa4b0da636cafb98f6eda5d6429b087872bd8013f08c824c5a3b1106d5b39fe652f596de2b0f4ee05c66bc09df8d918a59b435e3d78ad4df7ae989cbb2e0ce88bb1dc1d52cc95fca3beea33c7420c1d643f034ae2b15647dd7b3bb26b147f2b0e07693600306ebf7701d45f8e87ba5caf1167650448e52a2085b40d79af478d7901345c5a900f6266a714b259a921c21d40eb0e2f29c8d0822505ac6b5f0da714711267fd188057c23ac494d2be834c43eca8fd1584a689e81fe0347d0ef271854590870cbc1c86ff36bbecd000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e7a457f69b209bb12b20a33e2eb279177b7323ae0ad714b6d22da956d38273500d56bb644f44fa165b92e0eee13ede79daba8a017d50989660b0e27d288cb1ee0d448ff4f3b6b7f0ee97d60e2a5ed73a9bf99bafe3548cb91324ae1d68613f348c3f3acfba80247d0cbe3dbe5f355ec121cbc782c2258d13fab319f268a27bec5158a8712ad75664ae585225e5bfb217af60a68dc416ce5e44344446985add1a3ace7f329b4bca68ce640eceb3d4746e824617ea168e98d4c754ac2cabf52f39a8eea5a00747d94f6ce7109b57fbb853b29babee867a71052a9b74f842b541663fa5456c31af9449446f0285d433f557b7d54a0086a3fb48143cf3a1a07d9ea81f8b147c65521c64487cb80f541ccc61c6497ac3cf32460f78b0ccb936050a9b6915c5ccb458e4fcb8fe1aaab4535fa22fa5a825ba3f62918780cce884672554d904be9e4f3ca05188c8b30d4acfe9951c551518a9bf614be5a3af37da21ffa2c8ede3f0e6d2a03ef2e9e144b839f184af47e224e915f9c3813a567452f8b994704fac1103cb403bec1014faadfd97174f6b73ebdc76fbb731003d352d8f8373c122506e7e5ffe1e0bf5229d7f01f0abe5eed15f13a19fb3bdabce9b42c862000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006744371f9240359f08657d5ad768720559c8317962dd0ead86583acefc6bcd4e4d2c1464e4506b1fe30e4d1847d6cea5993dfc6a47f29837bee04109659872f1411fc9322abba6fb0443005b6ac51ff01191c95933e401174321b88c433be884f525de63691aef47b43dc046188c2a6ad5756adef0419131cffbc95de85a28cf52ec9bd2cb29720055828f89a4df5a3f4b1e996260f054f119d0dd8031002314aad48197aa0b3f3433157f5b12e3066e1c87b34011722544e0b4758e7adbad10d8940ebca731c848331445bfb437c04f4ce99a3641e423cff5960408b1a5549395222fbebafabdb6c82ccba85ee86b7b81fdd14c92aa718540027635233e93b09e68a448596b2be287a237398c59994a2611dbe5141bead81bc7468f6e1cc2f20619df2d09dfed29e9f272f427b9176be1ac99f44cf1cc43cc128668f62b5d5fe05e73c5616609af7a92f27a0a9c25b36f66bad25ddde58b617acc4134de28ba7d792e815c50ff436ee8a19a81a93ef7b179a69742d7be72996ac9da8fdb1404a7914a981d81a47561097806d89acbd3c3a76132011dbbb2b28575941a3d381a905550a5b9f4adada50c50010e4289962a159dabae2d70cba1ce52a0de2574e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f567401aaab96c46ffffcd0b3fd9fe98a9dca4c139f5b7d3d5aaf18c738182d0702c62e6a84fff67eac4ae0af22a8873d9dd39ea259b275a9661deb5764471d0f8dbeb7f4c44e488f88993e9c461f405ed83f1733eec1aa9b5c14c036352e70cab2c06104aa83f03aea57b7206faec8ecee913a2b7675ebcb78f5f8dddc9469d531421c31d97127b8dd8a23d9066a305bdce645c956f16d9f694070d44f6ed982eb553d51e9ba684b496926e858306cf4cf759525deab41396be646241cac4079e89b85b73c6b7415fa8030661b91efe8b501419badf91fe488639ce2e1e023c7be74f2f8d5f1cbbf2e35c0dffe5d1db75e4838855e6acf9261fc0271499baba9f093d7d3e897199398b0fc871c0d6ed3678a20c3296b19035d2772ad048716bc2486fbb845c8c44d58345c0a13d8bb7df9f21bbc54db882afbd0085dd7a580318922dc6bc990781de25208f7f6323a6a38a6cd2e82846fad3bbecd8386de534c183961f258477e57f29275953000c4e11a63bc9382a6464f3edf7454f273e1a28bb275d249b09efd9dac310b7c752378fcbeae06c891980de3b63a7528961e01c940eaf81ea86bb527c891af17541eaf1d9d893f872b46a37759c2686aaccc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c19455172d81b11f6c2cfeca6654f7433e1159e2a58293fca5e92e55a5fecdf61c35dc0a19588c41b3ff0f7e96656b4c6a6078ea1d0240ebdcca2d6517ac35a478a263e6db3084ef598feba316be85146613f85caa6b96f85703eba533f1378e3df9a3c63845c1e1e8b776be660c4d897028a33ba6b5d1c4b1984b6638314296c7e387f4c287c2ef3906045e1b464ceab90a685f66ac67277cafd87ccbffa22ac2e4746bc6a006ff4bf431c5e6b3f48e26ef784a683895999d07833425fc2314bf98fae20f76612c7d0b0df7bffb5c0f8e5e416f1d329e373877fc5fee38340ce1f6928681d5ea46e7096b4dca57327027bc70dcd6546534e242c97a5963a5629dd63f0f4177d57cc4303c03bcb6ee39bd67d5fe011b522c3ece869da707834485e5e692aeab2c023968c4b0c484926536bc3223037dc2857d1a0c8d98ac2b976565ba3d9ca98367cfe051eb377c4d9021298b3f3e81dc373b321b33948d18fe198e8877f11c659c0dc0353d6b1d50ee364d14a6a6a4180ac15889fbad71b85298deb29eaf6bc91e36d29a907ae2fe7a46368686b5f99d140fc3d9cc6261c7b716a1a19a95462a12332ec71be3f5c67973bef252b03f37bcb92b4d3ccc5726300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e47b515ed79385b889cf280f848a2fe2f0fa40bba6bfaaf9eaeef7c003097aedc9d78ea48483bf79b2435782a24341888ef7fff0646808ca1621aafea37b9ad713f4f1d9f4b9c6c6232d5dea6e5603980a79348010d6c920b5016997bb67ec6d8818d3e0b744f8db380df8857ad9b2aba04bc5a6a2971889c275fb42cb07fea6f2658d0179d2f0d7230d8bcd50f0530e936295417b8c114935470d79782a5c8c5ab773313f5c93929e77d7bc8670a927bc1db1385808f3d83aab8b25149d9f39e0f8747461ddec72ce2e9c1eddbbcda64937e299aefa31ea135c62b161c3f7241edef833129874bc8582d4b49888b674c0615c409b487141522fc7f43f98472b023117c0020aa9cca3ffd28024360ee5f1b4dda3e7e4b3227e3ef7f37c514a55a524f8f3ea87b7eb3603c1031335cded4508d2fcbc0ec55b66142d3bb1aebda24001eb38baae024672defbf898caff7f8252d6caef642a80321d6791177d560e9e0a8b1833c3d6747ecdc4777f38c19b476ed830459116ab2e62e9437bd713370321b03f9dd0fb2bca554ee78473214150773108af5c585d27d7d293d20696842021027b18ef6ec444f20655ee19b09d9e9320d9a44a7406240f9508c6ae9b600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b97e03d1714573d632fca9e3656165bf122226d27cc3a830908d00096d42cd413991df695ffc296c379bcfec2ebe82b7df827091c11d4ea74db1ab39410528caec0c6ef3d8e17dec0e379232934e136feb396991ea0c71c6ff131d4ad5a969c8ea8181fbe3affcdbb66a28c3863f54c7dfb0fc1fa57ac8aaa9c788be64bfe7756b788f8d0ff345517dddac9061a2a10c0b1b415134edf0d33809f736da926ec3c7da48d44584b861e8049f4f30dadd385a1408885d54736a698fd44f65c7d5edb03be7384252cc4887f8487f8c10491d66dfd5041769f89914bd4e4472bab1d981998cf18f00b31eb58cb808a6f22f8847b9f163c209a6c77bf2f40920d04e5fcc0b5707be22e498de0ef87e290fbc0b59c9f31cef87720cb600f053404a9ae65757ff34506ed00a8bf85c30315f0fb87e9356eb558514aee64849e9ee5276af785e4a09c3f2941d67a47029783060879ddc85cc121dc2c1e9ce0ba653f525ec319fde591532ab517473d83045acea994e44937bfeb62e2a385de19aba699706ee699115689e78cf24e03d49094e89f4384c4b527c6a61f2fdee6518b1bc400745ac77dbe4ef29553c35296c4f23fee0b1950eda6f22fc8d0b17ba5b122869f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ee4cf88d512f9ce41398587fda57f1761458fb81c7b83b7ade121062d6dc169368bb57e927a76d626dd0ff38f418ee80c715da105e7817bd5428d17d2c18fed978b80ce488632bebe30fe84c920a0fd2856c64a925ab5612f7ca5cda2ae8038b31568def2b64da890d1719db38e6d94a4edb4894d1cb38cc2a38d20884719295aefb7a124fb70cce51e1e364cfe1fe57dc24dc8bc959c010f9fe62f596f23d952ca23d2f16624c6ad6e66a41a0dfbf5d971e1de686faf7630918ef30e780dab3c2e25fe2e9df6fc83966309e0c8b02aa6468dfc2f40ba909cfb546b5589130252fc940b798dd3ca1791567292f11e7b5442b39383ff23e63b63271fee4c98ef9dfc49601dab8f1aaecee883cb916b257eb8c0118ff905b99426f7eea27fcbe01bed81a829b99057cfd14fd1246335b742b2d80418e4751a3657ea5aee8cbd6d14afbe30517f33e1236b1886ce846cbdf0385e38031107a949cb363c0b59b43edf4da36f12e02d4002e78440f3b0b8e6fd63af5f52a66933bfb9a69e8d90f3aaf167cf28f7d214d48ac97ac28695e5dd2d9c1f85ebfe3720ca87d9352be93ac1cf409a1a4584ceee3125c5c44dd443aad0bb2176dc06f3bee835f7122f135e7800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000770c1482f4ad205054910c7b4a187b23bbfdcdc254d4b378d8157382d3594122711ad169c0b3d6dea99e06f1a9c05e6becf00f7e38e1e1114c0acc3a81d8b47d43ecc1434f41fa21b74063bda0a91f1b2832529c4a6f54178a2673f0aa4b764a69961458fc49d3c8b607b3954e89e926f6ceec65021314b6f666f75ab9be31985deef30561a25de8cc6706640659574bd34c30a45b294fef4db96e7fde9b32ba359bbdec6db7906fa695d1ac954a0252c6b68837f0b6e47cbe6239818e2b2a003d992b635e0cc06cfb964b6566ae75091f710ecec7fbf1f89ddb0c99a2ee13e5dcefb38687d4b04fa25524467b1c0f79abde8171382e62b68c1ad2f30c4835a6e113e51e163b7eb61cd4c26cfad41baf0907302b376dd7dd3f987df26af8eb447f6e15f875cda83e36b501e9ec29a3c27a41bf4ea6fac49e83c1fa766393275765877319b143b515c123d540a47da22e6a4a5940b6dd54561475e7d38823ba90e98daf569da130fd30a1140011ff80b5a5002c3322eded46b649b5dde291f1c64c99995d043caea1e1b9056d8d3092e0451dcc10f7711468a5da3f2e7132d55ce2ad4e22918a0f4da5afbc19fa89b914a972906deb2eb2f62796c2a1aca82e200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fca823da044640411373cd9d6ac6b1b7744b6e7f456f92a3e169757c15bcdc70e4089222fa35ccdf0c8bdd9c37b556db80a81120f9290dc969c40b273a7c4830da88735affcad14b9644d305301cf3877eac3071893d252b3283a6b32c79ffbec4a97e3634dbaddf82d09f6a736389a5a4a103da8e2d116bc85e728aea72a19f47870cef07da017e9fe2f40d72b0e386718528945868493c90c2b2bddd0ab7727d812ce3d2ec52ef259e682e05e118dade76a9387e4d2718bc6ac3e26cd50f506f800ccbec9b07fd73834fdd92bcafc2f16a1cf797f5c9b0ea39641b2e324402bc4d2ff177a3fe897efe90b94dd41c773fe0d6a7b9c801676ee407b9e827d90bfd299e95251ffed78f07ac232cba7f751fb7f46f2c3019f8665307dbdad0a3d545dd0fd0d402bd7e86e20d88ffba9df1ef89ae67bc69c7d90565c020d6239295a8fa297c7eb3b8048577976cce3cc46fcceb52b52f47a7ecaa3651d975135e2339cff87e867175d802c12a6ce3e42c26e907ae4d2f57a8ae698cabb741b42a2070cd761318e7cc3cb68b97e17b29017cc33b2b307d59d9d3c5797d4011320b4c4f081520a7761227012957c5b394333168d735fad22746577427b091140e970000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010de687847bf2428d3153e41cac02618795af0e75c8dc956f6ebf8770e97726dd09b78a6151e75ce2ef6aa04d454ce2b714af93834a87596541aea1dce2dcfb39138ecc5f6ffb004334132ad51cf55fa8ed02b7c177e1cc51c05fa376e6a11970ad23ea0e299594ab136de681535821a8b13cd70c3c7fafffbe5cb22e1787c105d56c45dfa1d0cd0fd45a2698940da2bba7c94e7b3ae4eabb6f83abec85cf4f7be0576ac0376adad92f8cc53368856fb089169948a421fb516dfc6abe2709c8356f4400d083b74329b8f2bfbf12bffd2b11784a8ff561a4665ba52efe2c3297e6f5addbf4dd9121f26bfd6a385e20eb6f0e4792d4a390ef7b240359df4e000c72a3f511cb81f6182ca57556d08229608e97d57c77e28c350c307fb6906eb9895b19d01c236fa1b40a9c1e9b117d6827354b5b537f34a9122867da811ae88f39a5ac8c6da089be0f64c8722050bc6ad19d71ee998182801f2ee7be05ad0138ec8156395f696650f38c5ed0103896bcf1748eeaa30cfbcb3d257bd06fbf80a4205210c7fa1df440f5e77afa96c2102a3e873f59eda638eca63e06afd7302d0e0d5084140dd7b4e276dc55065ecaddf811805714ee678f8b5acbc73c5618a99dc8f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a34a352167a731ed503fc29984723441d4176d7282847701de821bb84bf038ca38cb45876de5da2344136ead9c73ed915af2e0ebf0debfc9b930dbb24fac08114973ae8f5c81b5684b4a3f90b6c08a268b6304ec9a8a87e63fc4afc6ddc1271c0514d8a9efd84365b5436b87ebffc3f1fbb5191addb9c4186df5db008cf27ad1f324bef05e9b31968515ec4a6e76861cf41563117704151b13637585a62d1b216e4974673f6b847af508fe1d00bfcbd061f413a22701fa2d24ac127234d9aebf8079eb4e5ba881248cd652d8f4c8f01fe5037e7c6dc205186a06463d912390434a6633ab3d5e1abcb344687735ed90538b2b22f99033d356cb2142ad71222d0651043c713cf44230b8c10fc7820376b70343ffb1ce4cf5b59a4f2d37a34208870d616cbe3a83c4e92bd7e38f6e27cf8ba4e359b59527a97bbe1d21b0e3cbabc93a8c203445c6b051ba163127add7434e592925bef391c49cd0cd1520bd55776962af4c009e20c964ff26e5bfe5d00eecdc39960d1b782301a9d0b89abbba28a439836c209781ce05a9089050dd135a25badfc77b9c3fd2946ad82dd91b031affca3fe3d7ef9134626ac025fe0e8fdbc80c93577691ab2f2b5949e3e70fd64c900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102f103cf7bea0194d3f64af42e5eab13f352e2347b8f27a880c6684b32f61bfb1e9afcf351a16a67a0812657cba7c61da214550e2aa9a8949963a3256a19b012555a1aaa44e75bbf5be8b7784ea1b4e1d431c142ad78b5fc5f3c6a387ad2f013903c63c0c3f18df902d824d97d3c33ba3ff85598408c17a42c68769e58f0226b2c815679538cd3d49db4c7e2da5ca4f1547491aa2446b4a66ac7795e3adba1f007c7ba37980d73d4564f1d7d0dd0240932462df2a38a39b4eeb2e2d1c068e635c223b56c7bd017a850c9d5b68a727865c77553b9a0b36ffcf9cb3fdabe84f20accd495713de066ec7702f77b6fe5b3a0ce052adab29956f0a47e02b0893cb4cb2ddaa965ccffd14f0376c9056bd1bab72b161a4ac0ed28d0d2902ee99ca21f4cc26bfb32c3a011d7f9528d15286234d2b9994a5652279fc81bb014d433ddf5793aa3f053f20aff5a17b912d261f3c19c4cf93db5ecdb0a005f10b7e261ec730fb485ae215c829c2b4ebc4ed61a4dc033ca3d8d9d3f0ca2f907a10d9f52c39ff5ad1e2e5e54d5e2099239aeb757d09c8e73efe01639b7a0813428aec0f549e9ca55882f3fdab8e23b5acce262200c6e5cbfdb358835aa01ec4fd9a460f5e8df00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ebafca433afd490d99dd8ddb63052acbe7a38095d29d600b7e066e0a1d5452cdf7a83ef8e7facb256fab08fcaf79673bd20ba906e5359109780885c5ca12d2279b8b4567b3e777bd74ef12db716272669af13748b2e326ff4a7b7568458aca13d85582f1abcaddc74d7b64744ef0d2c5e1a4b0a68e94440c454517e0732d17bbb45e16be59bacf2043327172090c3461dd69527b7d1a97aed2442b4b784807dcf958caee8fc253ac4e0ea1ab41c2eed6e2c9ef49848df82102233249eeb3f2e2ea72c9184d2c01fdc0f061d5cbdc27582fa0cd673c1cc1225ff7f51e5be5f552625c1b916adcdd02e51d4086530281463ebff1fd1924035c2a80e3127db802435f5c76c33b3e3acb4c1639d2dd4a8d2c632b2368ee6c41ca8330ba6fdaed52d1e65031a11239da6e9171e5205414d8f17971e7d2b062e9356f747195695354b0fbcc3ad5bfac11c68abf5c140d5923d3f03c3d5cfcd2e252ea881386595b4658afce0ec061e12ed6dd4f5b1985b3f3bdf2ec0335b4983284249718e7ac7958673f18f006d430989febd11751550ced6ddc680e80db3efcdd8f324fd68948de44b57516805ebcd4d8bd39ed94e59cc8273b39f0a5e2b60d61f010b784e03c63800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002672c9f3e126ea1e6bb590d042a5bb0c92e29274e063669dcf8b1af236131b1be05db45de1d2ccdf66c4ef020cae3710ac867c5730241bb26e60def107bf4b0793e8aae30d7dfe53650f4bbc43d709b1eb8b8bf4caeabddfb3514bf6dc97a6f1712ff655cc4e8d73756e4c3e434beb6f0a364136ddd310cf5eba34809784624a7d4c7e0cf569e2580d616dc8a2f89b1dfab1735962107499fbd61ccf728d343826436bc6618bd0e14a8d92a7f3547cbd115a2a9b6e18538432302bc7b1eb219db4b7bb3e5552d7df8e6fda1b6d6a52d11092b756dbecc74f7825e1e0f5f6861a2dace185201e62428193aed6d0f58ea1f4270a675db62b9784f22cd06c995668f8f1c996e23a2049329d32c833ea838930c1f646d5a45cb6aaef7ba70d59e4918cb3173365227f03f7f451baa300cf5eee858d57918c171b08fdbdbe0aff7d93cd4fa1a70f14ec779da9c22cf60a332d6a6be5443639c4197c0af587b3666ddbba131ab9e431a0ecd72bb5e87074047b8a5839cbac180e5dcda93cc1bed2bc588d1db858173a36bbaf639122423783096af243c2c3d6dbf60dc5e3942e5195095fc74791d8813e7f7e8d5c139c0df0015c36e124bc81b68b75ba337a6a2fcda5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030125b63c95b09e57eba1e2fd3998519cd134c9a098677feb077598398874f3fde0532a41b6ea7d023d1ca57b86f2ab496c17a10ae928d99852de62d8485d9fab10af187a69425c5622f379433a8a84d5958ad5971314f3de6344e4df0fa0c9665b780d407e718fdb9ec10f8be8e47bcddd3dee1eac7de95b493a326b2760052d420858cbf10ad6b86279979d98b2b31e1d5da6abd513d5d9b8ea4663a28820e0d86924870528321f871168adca090ad97376b7f4d24936504887e53bbc7d3190d689100d5c1744418dcabea2c74d39275852bd0af9ec49293f822655ced9546f3fcdeb296ae93d238ca3c56761199aa48e15733190dbd0d5f54594467c096b454a7969636b15c96e8a0fb30a169932d60bcbef73a6b762179fa1ba38142e25c200ba95fcfcf722f926348e4ba625f310bc40aaa08c115883b737627dd1e592695f651525d2f6f430239d667728dd6e1421c97ff4c66f7aad8278d762a1ccacb67a0ef1b6a4b222d6dda7230249c87b50cd69282f38c8acce06871d6bc1876af17e261d1e10f96622fb2df245d0c59f9634bc7b3f77c67465039fbf36672a78abb3f791f0782c3cfafe6df9fe554436d7bc65de5382cf9af190213bd1180c1c200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000731ad4d2a29cc0ae6f48eed42646afe7191d3c33b088c864c2f370be52892c056d8ffc5452757d39180c7432037e2e234b1047da5ea39478ce5a91fb335e4f4ecf717d56bf2f5a0af76fc36ecaba3b59780b11d3b156fcd9309c2fdcff619b7e252765b13f514acba7c35295c539749d2ebff73d3ea193653e3c8abd24ac590e8be2ef112d46cbbb2fdd4bc5d3b8cc17e6a14fb9c9b9f64cf1d9460e5295a01ca8ed53adfe5e7e44f9111325f58a0aa2a12fdc337fcc241d3c8ef6b1d8a9797bc4f25f75f769e5acd6388cde7f5d3a67763a396e1366023bb679619afbaadb3a9469ce5c63ea6e8aa7cfdc5e456f7eb5a91db8ac6a7f925887246fc67404a678712b11f2ba023f92af21c81a9d7b0f615e01fb00be0ad15f5dab54e6cb62d4da1f4dddcb70cedab832dedb212b35294c0bf56b9ddf90d9fffa1a2f3be80fde29890e77c3897492f9e21f9d9508e8f8b370c857e389ee200e71d43eb630ec46aa0cae050212c669cfe8a79348100f42c8f096a5caea1494f1c6e072643f0b7944068c77ed1ef1817ed898336f69cc89fe3c4d82bb60935e664087f4942fc461ff86c4f6e384d3a5c4e38cfb812463e64dba41fe977f2397263239ccc73df58e50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029c13b02592f578fb270c183d52a1bf91044a3d10e2702b22eb354499753c02798c364b247218004647dbb4f4ad054b9e06ccbbf1fe878aa089899287d09d7480ba9ffef21df729dc2dedb72e8fad419ddd302621c384ccb4578987438a70e1ea8e0252a55aedc20781c7e47b40804d98085eb91e73d03f3d3c24457cf4b07710fea56488c5b5dc4c1968b1b5a3eb9040cf526bc0e77d2592122c967f72988f54783b2a144714fb75da83774c5d15a81544a7ff498ee42d7cfac753ad7d276d9d60e4cf65c550398e6f431f82b455a140fcf9b38d9ddc3f6894bc5a30688c453a12a114ce56f977c2834e2e7fb4149a0739399ad92a76e5b5e0efe8cfb7086b795fe7ee1e979aa549e50f8b40266724a503bfe28f6bed691176146926854741dfb68af2d0ba1d0269ccbd4e6954863a904cd13a2c2db77c8ca83e1230fa7efbbf031a66a1f95334b266d5f1a07436df149308f6b1a7dd0366c6f53100398c1f505caec976da59a3dd7ffde9ae253fa490d3672a5470912910530d9d6485347f3006842dcbd8e20f094846ecf5e5d2861700be043a0ce002d90c9b50039cc9d2f6ece576993195ebbef83992f05a22aeb44053da6a402305f9c05adeb5e8917a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000278aaa2e3a19a361b12a170a333648f1ec28f28dcb8aecd0c37b97cd0187305c70ff83c02534fa0ae2b4ec9568caba2afa4d61177b8e21e85b5c1c5c32345742c95cd518f79cf4c5d080f492172a2b1d5eff1bfc96c79ac6b077a0e6fa30aae9d558abc4d8ab3236ad1815a4dfde43eb61f5c04bc0863f4f614c663ab4c3e9c4e300e5ce775c8ee2744bdb6e08d3e9929e2cd928cb9725ef0a75a59dc095ea2ea6dd186458ed04fa71bf58e4de919fdd29df82e387c6d7770559f8ab596808f4bb9e4f55c51c368f1d279995540198226c86eddf7f8b89606b87d9dc95c620d92737591c76e1bce793292bca13a03d824230dd5ad7dce52b8e921cbf41c53ca797992ea5879e9ba66a3adf1f941a66c892610bf843c1e57ebb14e368d8f80c34e5bf3c7f1534bee8b62d2612ae5b1936ea621ed8fcb182ae6d02c77ac3b928b9f564b034fbd6143cade5b53ffd7453e6232f5feab1fd92c895173e8526880ace7dcc6740fb502c123efeb9485516edbb5133cd933113ac4b4b934af675c7a7189d1793b1fc4ff5fb67d3e66cf106ba358b63c3afcd671e1fcf30af03715a14d63c80029b15abf071fad74407cc3464224b1c615edc72d0d2e2001d508e94f76500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b251b18966ce5c720d9c2831d3016461db5a626f7a9e7cf05378e5459593d91e2600d6c75cf01fccda280cb385a3d9226cd1913fe06c8f322e2b4af043ad8239d60964790c43c00d84a12895b84b9d1c910cad759cc28c95043c9b3d4eb76b51491d693d3e02ce135c8faf7f66b8fc9ace13502fe36315e8bee249c096e7a6cfc065a7361bb76ef78578f0ea26cb8afbf1e931bbc3bf9ee49730616c84d7964d06f5fdd3cfbb1f55b5343a4a7fd2c1d11db9d86b411293812422ef3067d34b8bf5013f2d2afe94defd39d40812494e10e6b22f595e0f85c048e39da06972df2d4dab24a5749ac1e384988afd4aa19823de052de8e14e850f3bb409a545dc3ce4e54449f3af784f3985dd66e43393843adba6332856590691e7a03347da14f1e305dec2c69e18fac0b899f5f3205034dbfa16dcb897dd88f4bf5ec3dc0cd1d0d9c4068d00e6d48427a99484c96b7f2163ee3f0358e964ca47209e2a967a997465d3525a368a6eaea0ad1ac0897ad6fbcab845d4e720e9ed590e5a1327d69cd173dfeb2a88d23b80d399a8d03e2e351196a34920d969f3ef95d52f32ebca8eb4cd11f60b6b6e22c5c4be67aff5f3f73ebbc8bfd553c53b93a4c24a7df8f61e0ee00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e107c36333f6fbceeb0f0666badd43c01edaaec9cc63fcc365575ccb36f077ee1afea756295b1f88f60d4c22f0ad93779c6f6a65b95ba1a3b6bb3946ea4ddc3f3ab70ba1dd77e1a98ea7a03654e7230271498667e3152e2a3c224a1684a36a798fc2d5197ddb96778204dae5582bf7ce9447a2e7331a6305228e26287b7eb2f3ed700f90a4808cffe53a9dc85c78ab69ec0a8f238bdc820e1cc4f26d0e8eead86d2b03608192b9896b5a4286d76e5ea60f49474e3217dccc67c7e4ee06e2104300c38d924e72c2a7d9fe6949199d02971d0ba789a997bf041bd1608fbc6dbef74a4973a8b611e90bf23df5624ef96c7982929b9fe264e7f7e58e14ee04c8643df7fa8fc9855e8cd7705bca06c033e139e634641c741888323fb8a9f2246a8814c87a003eee3137a04bed42b2bc2eddc902da7dca00873d89ec0c9651064b4002f7363f6585755affe25ba61ac1782b76dd98583969acea062c660fc4d24206e11937b056869a55f167729cf72d06872a7ea38c804e0f2fb0637c79340eb086c73557735c7c1267b5a980471c4ff7d52bf2c5a44e0d89cb1d932d5651ecb8abc1e4fa13aaf2423354e112e7cfbe0e462520d083cd748c1c4994c735ee60f6d2d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008315c1f880ff85a957b99b4dfeef9bf58c6af5d635d0a59267989837b4e7ed2200ac245def5901639e9887a400b6028c50d0b23771c379305abb0a2d5903d3868c553ee88e8ab1aba7be022c22ac710c96b011c11caf7130d240ef90b0a657f86aec8d1337bd0464061dead3dcd1dc8951f42aa7012d1320cb34b47fc555f24440e7f7161ad7c6d99defca99c36ca4fd07d7f2fc8c99bcdbeba18a8406bcba98c48ba380be8878f57445645bace3e0996ca4a4f98e6f0967190d7e4286168164e64f41cce18229d6ecc5bd4a0d126ac917300ac5b588c121823a0e85b9bee340232b24f63f5535c37338a702d9bc74d12e1fde541e49f0e57f741c4783f2faa9ebb4c31ec4f8bec7800b12e6590d400da5f7050fcbc78a0bed99767aaca3952d41ed30ab632e7017202d3417bdfa7d941891ae5f326a78b276c4791b67ede22e48013f088e63f7f14e2498a79fe08851bfa4da511e6abdee992661399c53417c356408a6e03e9af68ae43f9b18e3e94fb3104c80ad958595c78f8b243199930528dd12f798404338097219566d54d0494b92dd7b13f983d26b0f5b1d20a46279f42d8045816f315269a9ea3988cb609062dba09debd27ea4b3528636ee5ad6a20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7652ec9d052a8e947821bd8017a81cc59f2b571a9ca3f1aa16c8272f83220b98cb6331cf123e0ee161e521d8d5b34ad650586458cfe0729f38bb711e8101954857e083ce6787f66a64659cdf4adc0f04f25dc33d067ae51c1485af348e3bae93484693a6d2314d0f4f4a278d84accf004297be67dc4795351643af19af543ac6a368691c873191875749a7ccaf7339fa097bc8e71ee82001d38262e68156eb258ec977fe89e4aa6297e81c1702952c4ffab9f14a857bb428f3497b102f3f7950bf18297a7272bc5e5c86218b07e4149a6f62c9733be2d695d5416a8bd4132256579b6c2eec09fd6b002ede45d4595f7742ed26f38ae7d0f9df50f93d2166e1300daa0d4ea65e7d6194cca4139baf083edc21954ccf27d98d4ad28b87361f58e2866dae41379a712b99996c35c6fcc042b1db6bd3a41d9751ae1848416bfd8ed3f23d20e815e42d7822468565e7841a00c124ffd05dccbb4d89fa1f5054f0d596668f47fcf80f4ff759c7270f3a82ea3c3328e83ac7d2e16d4e5e2c897073ccc68f0a4db17b804f885e9750d5e7adb8cb2f26b17ee46302e917774f4d481769b5c94298670e904efb4a50ed280bb9a186582b915b6b5057267673cc719bb35f20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000193d2622c2b31be8eed130b467cd2839d75480f79fc20d75305cc374cddcddf52554fc36d0b09dc4161da7e388c13328422c4e8feca1050f89893b9f73e743d90fbe22f1d077b312e829733b30cca0c8eb0dced20cea27dca1d5ecbb48a76c96de0c734d4ad87fa653971d5e10de145f15ceb11f8ae155911daf1f21a242bd71c467cf544b86bf86e20317465bfcd10856c7d7cf924817d503957772898efbab75174d0e3341fc779f4f05f628375af46ef11bcf140acf6d2c076eb56d2b30a43daf70e52e726ef0c75e13a39576119d9aaa91001a284ee8731e137c70c2e83f6f43e27bc636577845729e590b058c38f3762a9469a62f6302951fa1158643c7b291c416820875857ad0ea45e40d8585b86f986f7b48b389950c6b937aae08af8d5cd34b6190cd0674cbd02635c8bcfeaa70ed2e3667af53bc64ae33cff50b0d1db24837e4603fd4828321bfd2b6c78dcf07ee8060bbc3b56db90c6520f2591515034093d72b1ffd6299a3d3c1b1c21b084f998542a92679d1278b43ae0cd4b27aec762003dc4019f1f22c01b0290cab75719987061ae7f01f9ffd1c95fba9ed1f70978f9881a03095cabf386f5d7e3a23af205b7ae6d7b0fb51948c0ab905f200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f1cf2ed2aaf207706d998ee97acd791a29ff5af58cd30ce13589c7843eb5423db768c393cb8489649b81a8a7fa45a9156881e5e2500f858ab43e26cec346dac7794594f25335d9b82c6622e5c9db73bd667030123ee6ed14754903ed3e7bbd323f0f6f15f21bd64a7b2130c5268b739cf89d60d8a96500b39a711b2f01eeebb3beb30e97a545f43df3ff160fda08a9ad71d555fbfe42b30530a9db9a9cea761ab0762b7ad42d238341d4523c26b3a7e0170dae86f457f9086c4bc0a1daa00acb179b9047a00d6b31daaaa6321f5c289bfb231603e7681e7277deb423d57c35562dd343209788da825fed820cc2ebe9c12c009a48e86fad337584712e191b594ef9b56a996020d8b73486d24df4b1db7a6f34e4252367c626d0e2ce8bb98ae3559f7d41e47894e8b32d9c011c6579013f1a6a4780e801deabbe6f79fa4e27fbfe5c06aba0ca170b74a44d42dd1dc15348e6ec33f95e033ddeb6c02d51a4967bb7d90ab4dfdcedc264162115f48ca799db1f6eade08db004ba6ed6ff4545162461b39c6a839e325763124ccfae9fa4395d0cbeaf55fecc6cb2044fb1e42c31642b01d8808cda7cf39a1f892645c6709f19e12b955b3fcc48b055d8799ae1e01ad000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008fb7cff044991ee81ea0c19ca02dd1fde7385321856accbcc44dd270ba796bf952e4b676f96e8addba3ef1aaad38cc6da832157fd2f00e70b8bcc0eafe973a3039867aaf7d08e82ef80e8682d8dacd9f44df8178155fd41f23a6419f81ed8a5ce328fe8230849ed75d359d3de67df79a09f470e1882a8cc28bf004c4e9765d9b545a8dadb4f2c7c830c6f01e8daab9887c27fc23a712ab08e28526e07bbfd1d0970627b68b907cacd407ac9031f5812afa0861029000f04bdce552c60fc411912206780d6359965b0746e9df7a4f9a959be304970069cf226237d495458ef556751881b52cab503bf22ce89a5be744af47ade1eddafb4c476071ba429c0ac20ea5bc4dc1e2c08ec56a62b41f2f76416352b9ac9e0248c35f269cb9651074f9c0b8514a212e72e55ef279a533d65f98bf18d7a0feb2d2d0c96a9644beffc3b76d08c668d08974e3ac45fc49e84234897cdd1063f05ac884ed6842052e00cbbc2111fe068889fe52a2026593663d48c1bc1f784c47c5237efd2954485a4381371533839438f72c938b40af28ff05c62790022a15b50b520c1703e8ae32e0f541efac2b0df3a8081681dd6b8d3ab7803331e481a5a7ab2e150a841115708042c9f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d18e077258beb3c6b9a1488d8f1d47b7e42a3581dbf0505c0c8c904fa7062000e39972a53aef62b2cfae341b1af2d423eded30bc1d36f2fa447e9c83dc4c4df64638f8217d19bea3db9471e63dd6155d0ac6c3bcb37184e8938a6967ebcd9fb6d79d8d8168d94ac9a4f71ded200660189d92df2dd886c990000add78a65efcae5c30e5f7d92e01771bdbdbb2c7b71e28bcd0f1f69d5de713e1e7cffdf917ac0f417847caef8341c4b73c757db39b42481f3c3cbc1db361f93f7fe986b38c1a2d542daa7f20fe6b99bac4fc74722b35c8418e3adeacd82acce39558d757d2b07dbd53c81fb16861e6166b62eaca3355ae1e2ad5a004ab36054ed655820ef62a80a0e15b3ae0e9ec88fdf230c5b402f8e6783882fbf731112853daca81cbba993bfceb7fd961719d055e322c052d41728b19cf00c0f2b3b8ec576f47f1f12837bd7fc8ca56915cabcfac17a5f1fa47970bd00df2710a6c1e38499698909acb93b5344450a96ead5286c889dc693f8d912503e0a42290ee7e7e6266f0852786f36f44b6199ab0b3420e35f25b58ad216ff489614c7139da972e77138866b7354936fdd7fa8e5d51a652553d46366265d63947fc565e82550b0828f0d85c2abddc9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018f9e766146bd2f1595d84afe4d0751e4bdef07635895e0150be491e5c01183ddfbc8ae49636659691109c3ae0a83442243be42bdf85d876efe2d71a5010dfcad736d43816d856602ff0787db1666df89eb49452eca6691842fa002936707455094a68fafa4d6e36d36a703139bfcb0da645f62d9d0473011d9945606a4ae51b7ea9917027baf42d3f09bac80bfd3845c01f059650e054adf44b63df501c81829b210290a598a2d304731f4a5fe37e89ab271fb7a3d7de1fe618d9e744efa35360d1bc6ba4654a98f7352b7382cfd2ba674d628cbfb86f4270caf232420085dc98c05402d4c8d00fa958ef987f28d70fffc7bfcdf13660f092c91bf3d321d94e6284555bcd31dd2cdf9bb6a67b7f68cf3b7505aad672b6d4f4da3d3f2f06f0a574628e2c04ffb8edfcdd45e51bf2a318a2aa1f0335703e1dfc3608f97c336a363e81afb8a456a035a2dab4ae5842c9bc65cf21365e3948d309567af7035953542db1f0c7f28aee4956c8f3ea7ad74d790e13234f13e934f3b314c7204514b104b4d230dfce2af787140dd0e833208267728f0346e22c972a9a6bbc63b2d7a7e6b363b7ea9be88af89da975d0f3779dc6c0353f316c486ddbcb595604b271b08100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009644a8a95d0a0c661cddd4f40512cb769f182a2ca52264511a28de3d5603414cc3d7ae01a3e416ca456cce055adb7b439177b043ed6636a1613c7ccfc94726130503ab8cdba7a6c357d478406ca5b927664231ddc2ff6d39ff6fb743d707e7861238fb0bab9c329efebd3c24c54ea5655170e5388c1fcefa30b8e568e5063130a56d037d0c03ae9df9796de567036fcbf933ef671eb7d8a1cd26e4e524c76f2d5b4ea738433c677e83fdc64cdcdebe32cdc249ea74c2db7c58ef942e42694c24432a1c5788bf29f8dd4286624b48bc318eabae4f051837efca5ec4556936a51da9f6f96c5d8ee65005cc0a64edf39a461625b26f41df49eb1aa75204636d10aa77bdff8c5a2a76aff8c22b5119e170d3e8cb244c5fae1489bc80f9738b91ace7b5fbc53489e00113743bcafa09f5f47f3809f31a608896a7cfd03f74ffe830c79f9d5322ee0fe225a2e0f05c36a5ef21b980bb2c427345817092c162932ab3be0abb0b1bef24cce41c4e4f233c71a53e6c54d7b9d325f6e1b5891cf94e1321fff5b2c164fbf490c3f8c742d1bddc2fc1da79026ba2f30e80a676d7cfa42f8d2fbb97c9382ee0472005a9ca611ff86826bbb8ca00944b36acb28fec087a23295d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010faebf6d50c58dae68a0756a3c7e1b83f9ff2a6699da29381a134ffa89b2d1700bd31747075278aecf5e202225d8a8dd34875ce464c9f113bb1c8ad6485baf5f204f58fc54aead213d2bd86f6d4ac3065cdaecfc997056139adf514dcb5ea4da3afaa6896355924044995c736c0e2480338d367243b935ed7cf51e411daf7844c1b25b841a032fc461d5090e57452ede763ecd78f56e4c7cf6ed646e464204d1ff89082c1e47d2c8b4892017336c70f7006f64ceeaac500ce90b8e2e63f01d3d92247ecd2938f00bf104ff92830bc115993e96e2127bcda9486827fccf3455c71b28cf9db320cd575f2838a5d3b9744c0a9ef879ba4ca4d61eaa43d0327b8d0554b260c32f233ce786a0ce2e8824224a3093e9d39c0a1d57601899a73f8567b7b8b2dd634e0b0069fd0817444db4fb7410c788f6d31615d4e94730b6ba6ae64c6dc51222bb989d97d0d4f02e1ba64efa4bc288a7549d1d36538bdcd34999121d37137518b16a358b54c123a7336821726b5201f985742ef8fe7e18dc8c9db0bb633339b820949ab0e0bd8d6be122d6d6db12489e6e2e6dd933c41c96141838711507504a6713433dddef5e038438139e577ed2b13c50042e7c596643f9c07b5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092ca84a26adf06484c869d45ff12267cbf9d10aa694c98630a4d09ae53a9754f9c0054fc82b1c24232de358efa6e31575c1cff49613fe675b144a2cac5ea26cb798bbe415ecaefde8911f238962b2979f465725089c6e660f8c0acba21d6ed6f86d84ecad0afc40723c944f0d188f1501d00d1b575c2778c4781c36eff28fe7b0ea8c44014c5a0acbf5897484e7c73cfafc37be62e24ff884632248ab1e2bff035cd1ed8a52f370074a2b37d951b2ca6ab0dc94582c9aaa1cd867a313bf911429b0b86bd64f0f357bd2a9ce28dbf147ef0581ba4005851bf7464db24731948001b100adcaa125558b19704b1d2d7033a1fb1fd90ad55a6276bd8c3852e5b3d5da0009e6750a9821e061659e564f199d776591f193dd9c24d581668767dd3ee9ae1a4007d72fcd1d48a1e8c716279a52ecc0368df4cea89c1bec337c6ed365b59668124dd7de218407ed852c62a4ba2f84a7aec9893bd88849833f670befe17129040f55529ff7f36857fd01eb4bd6c8f5c80a3df614a15ccdedb6b9811c0c19b71157e4895985c27e5daecff8fba45826e0f13248d25aa724c2e20e91f85e7de54838a25fa12504571e3b03f995ddd6c34fa1febd3528003a07778079854606100000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48401b737d22d4014637701d6ffdf993323661af66ac1fd0e1986bf0e76344c2fed516043b51801ffc28aa262a23d6f340807e92690af30c22747ea120f66007bbc021fad60599639f9889eff391a52f985b29559a7f3b1137e981d459814bcf44581dea6b7e04348dc81689c8632e0dcaa38cad92a3c5f7daf3f9b75ef344fa76041b60401a69a8dcecfd17571311b2d65172a52b7e4fcce1f737e1bc2e2cf1279e091b7347b7df6454905546f9f657e830a8f7509abec2e3189d88971d973789a22581c89f52ebc2971692e7a0fd5be2a7550903bdc499db43ca5210e3deba27ff0c144b5f40343dfa0ec241d2772ad187b928bb30c580113f9adc671e2832f43a1632fbbfffc92ad8d1509e4adf4074ce81eb7184083c7826942b0d4c5fd33cec0d226d9d18d07675a8ccfeafff64612d863708bb700cebae68e062d3561a3548059ba34387373b2bc9e98798265aa0b0bd3ccb13644d507be18ef6e13a74c6850030a82e952b03368aa474104a90c99f9547acd96a649198704106bc3e132c350efb7f56d40014e5628b13798148b1667e3a7a2961597e3c2a707ef3f495d2100f09f60a968643f237d0ced748a60ed9b565ed9eff66b90e65dbbb4ac414aed92d4932852cb4d6bddbf896f4e777e4ad8036d604e6150493b260dda3f503e8c8040e06ea8147e08db12df6086e258ddecfaef677dbe720db597b84586550b48a04fe8397272389ecb32d811c662be953422257a7427adc2d703e826bcc65195f2760307e22662a92a93daeae2015249f59cd7b75048862c62157cfc6ed67b72e23881ca9104504a2b9bbd42e9c77da7435c29a3441470efe59a6d89a34a8fb71129269b8f94054a08cc335d6fc1cd9e61506b821564e8fc7e31dd0c90eaefbc10490663d093ce740bf2a13d98a5f8d904e6fe733505660a71cc4e222c8a52682259641838e0096a22a0f71c488474372fb482b047f47e6efe25d61f8d803e036018e4dddb2145bf2e7d63d9bb75ee7e56e65a54352e5c063c937f9f51690ccc92c00c3d751c4245064f19e94d97b99724a45ac7fb80b59598b095ec84df0b8de044450eab45149ac048d739e15d7282b1ca12f2bcfbbceb93e00f3a0d586871727e0cff1b9d0f7fa2ca905aa9a650c91d8ad981c7183f930c9f8fa6ea88298b80d8404f7cccfb56dafc00753a4a00cb9a1fd90be4cccf4365679aa7bca1bbf661258feaa8958f5ee4611f1c4fa873853cf96fff79fe595d132fc48bb1ac1fbf10bb6ae0312f55fcd261f5ce5133ab05c40a4dc56e2dd6886befaa39ffcde5d65004abfbe8a0c31dcf3f21c8ce4c792414364be64298eb28ac8a553e13b424d8705da9e30dedf6c17ad5cbc1372bcef88fd4dfcc12382ee2d4ce1ae36519685ef00862e16601039b7c8e74d2dfef5b1157241c8157c4f4f94471eecbc3a3c566025d47459208834af8787d0e8691af6195ed0a1353245bbbd26887cbe5aad2e1127e7721c7af356f35cabb3261270de35ce37b93e64cc5438447d076f707516172923ee79f1fb46bb69d7964f114d8a3111dbd9117eefa42527bc6e3705d4057507a2989c919a71d1d924ed57bc8f79c4724ae43f353b32db1e9bd41f881f5ade22e807b940cc4838a5e85eca015eb420a6134e9577d6622cbb272f97e27cd626211de4f2646460e32984a3318a43b4164c7119d136ade137980fb9e1611f6af22bf07463bc3229f62df832ac418d70ec360ac46c45c6f57988962c890c8b050203aa3ac47f8dd8b6c147a35783a61ed2c570e3991363af891e3e4d5d6e867b0401006eda380d999fcea8f905d0bdb859023e7cd9def965944e8b74887ee3822413bb96e4f2a8d49b67ab893bc9e2d21eb08259f291dd04f8252b4c7a5428891018918d0f7e8343ba5250fb7c121fb28b70d0bb8a3db3cf139189f32e09ce47711f2dd41f247fa0a11f46273ede8ad7328450f220f609a8d8dbc3a4fef00f17f82db3ad56731c40524e7aa5a5f08e09bc4427fd4d94fc957ff24839f6f25788ce030a7363308f96b1c89ceaccb9a6709b53abeb67d2042466bc38bfd93ff8763a0d6a6d0569ef0dc191c251d28e047245a873d36cc163a70d1f4901b3f73786fc05ed20760b40304ccd75aefd725f70c0fc01889d6a2853c37561048cbfaf68ef0477bfda2037c27e739cfe1751ff6341c986ea5e30bdda893b80a336f6e449851d9ac0206cbcf4642f042838887a0486a9e697bcd529bf6b20da419ca3dd5c600c9edc286982b2d06d5fd305f298f5eacae6020597e926eac9bb8e748f43f50c0712f0b7a66c0860cf14c893c524d402ff480d20a169cec1d7767c97897a4ba20d5bf52667cc353ac040726f915738093ee41c161eb60952354846f61305833c2c29c11bd6394b515a4384908438078bc3e011423e934d5ffb4c784019690bf41429bebc866afdf0cbb80a58778737df46c232031b745aecf40aef28e080ad571c6541e4482cbb26bd437fa81e2f453091942e8ce7e74e41e227d45d4750962b2e8538778d80f4cfa21e59df91f10bd324631839fc00c2f03c85089c703537ec132f44548057674bc8515c5e83d1474d5506f23034e23a94678de6baed9c9cbd1b6662bdc016b62042cb8784716db732601e7d8208c92ef8afc7da52ccb9f51d188f2ea8147e1e7b46ac87e7485f0afd113bd38948cda646e540912c61919f4c115051b75b1ba87503a971ef0f83271e15b315a60d6b39e781c34bb84324c5dc0ac1268d4aab2a05fa02c652e843a843a2ae7b749dec56aa36a60e563eb639e4197a8b900a71335e35b886358627a619c3e66aadc159c78fd3345bb80d37480c03b28be2dcf08125f62154cdce46cbd41a64886fbc2665bbd0812e0a689b85e040223ba513dde4ce52007a031413043e8059bc7f3c9b5b99922761a07862530dc60fc734bfd71c8be8d5c5e7de4cc2510cf23ec9e432b6efdb0755a3c22c271c701fedd00ab4b9e0a01807681ed4281b91b1f541b568892d0cd21ff98c2ff7eeb61e1b2d31a1d822d0bb13ed81dc57978b0ab850c0e0b02ad5d241e21a24bee3181804394254796455ba52bbd31c951ddecedf3af2e87275a20941701f82eb2e25097dddc39169baa2c185e60e79fd373682305af2f806c6e5c58be5504d19dd4f26da0607ad6811bd47b3f9cf78574cea4794592037954400d19ec0883bc2a042000c2ad138de2cc24feb6cb51c37273b306cdf07bd1d4bdeab90b83aa1ca6b1d01020edbc630c52e5e577402dc0ebe5d0272337969aca62a637155a533837f680e072ffc89a10925383c43e969320ffb3ff8db881804b428f32fc98e928656f1198ab90d3d975baa778c978edc42b4837efd64e9459f740220a77cf5f35ddc2a1fc1339436857f4864746d28dcd560358df97f66b756313acfc48e0b2a3434392fd54aade63d9134a0a23acb6f07e06fce923744007da2642463441155890f1510eedd533bad0bd80ff069878e2666f31ccce7dcea636892c96a0b4a91178f4108e30809c4358fe21bddfb6b8591530cec7c5f78207fc9cf35b972483ef38bcf0cc1c3ba5081a5831ae1aa26cb9d4d8af8048a66d3dd40c854a498f43a72980f03ad8f15791280d0e841bbe22d718c8eebeb5c58f2f36bda68637af5e3712a601dd897e79a15fc82895ce77cfaf4743fbd6045481d2909250eae4e4373e82070251d165b28172e4b4e3d7b2320136d536188e406cfd838c33adc3486a8dffd061901b26fdf381d6e6d0216155012e3baa9b6d1cf7f58b5ee007f41bf2d86dc81074d0fad203d736205eabf109b5724dcff467aaac1ac53dfb1fb5d4c299b3997072622e393bba471ca715d946e3e92f9ca1e376b41e147a995756e5462dd18082025bb03d76402eb42faf580ef5726ef01a6e1d4a150df2ede3256fea510f823303cde81696f85e7082dbd819fb6fd2b12a585f7efc85465f116b9851d19127d111fd5621a95a82b0367c7c9d985d59961131a4b7fd81d88c685b3af7d4867910cc5a610fb080a23c508011d8a4139b7b397a68be6b5c5d63968e3272bca7668258e427d6f2e09b93197c715bbda8589dfcf163fca48b3698e9f68c4cdb407eb2e7e5217f5cc6c81f030dfc00cb8a89d254b1cd00cb159d0e0fa4fefa5971f08076bad110db4dd651b5d308192ab7c1fa2f6ad2a2ea0abd863b32b4011fdef5317f04d404b0033d4473808544cbb50dc1f4db76126926459a4bd2b17b7562cc324b50b9134e190182eeee7a15aebff20c122884aa273bf3d23ca38c86f2ee1db077ee4159c398557bcce9a0008d15fb60327531bacb401df40628ed16f7dce6f179f8eacab64c0f249f82e6181de3047f65009659e5941244a5de819b3cfcbea0ce8c843f5fa4c6708d4dace2a721fc330ee080006f35fd64ef22cca901eed072f99c791feef05a357d4df1f7ab645b6682d2d7166c5da41d22f37387c2e874d131fdb18ba4f69455c862d53ae1889881281f895ae062746d622a57921bfe9470e06b32b52863dc8a723a9abb82849791a5ae2d50a2d18629c0d6e5a403c428f06b7f278f4b418614826c13b9938f2878213ea07f0edccd2b4999fe4f2fc4e872c22807608b1b7880145e567886448c4040289fbb6e5578c3bca3c589cea1e3f0ad3d91cefdf777d788c1af2154d33167569a457674431e7fad59f96761948c11edcd19726f98cc003d28886b7fdb0cc167ac190a7b4fce6a21d1ddc79a6ce8b02c033d56b2f0ba97e7e66c274165df69a57c003dbb874c5203dc00b05ab60ef2bf7b4546183efd7c3ad5ed705b607c78eeed665a08b60ff22608e36b60ff676013185c6a80a6ccd331e9601035086267b328b4168acafd1df8b57aa250cb9af1f2852010cd6d45dd7c6638a6b6e176ae9ebec6c828de5523fca139ec5a5b80216737687223dec1cad72ad3af924bcad984a5433b2c99e03c13cbebea4d289442af4f85bf7527f6d5c981e22d5a54fe428f95197dc815138edd71aa35f3abc9a1343083b3378bcc634b3fabe82378ab4e785108d79c3dd0e6b11e8597f7a49d219a37e695030ecc70a0135ee3f1bbcac4c5492d10cb8cb63b4dd7828968bc53c2648d634ff6a6a3f545a9d69a75ed8d4e767ebbfc794da99ee43dfcfbacf20ed0c9386211cfb0ed32eeaa4b0761e424765003d9d04cbde2f9dced3ea8569b00f077b48a88ef8b5cd05a8eb0cb851ddf037ff02b90f4ed917dbd248cfcf271cb108d1a07e07c8eda512f18b0e92c09d2620f3044a91a223e8f1defe4b53890dd80c309ef1cec6aea9026958d17e24a4c0b13d69542a83acb067e4b26ea9c7252219619a7ee502f6ded777b8b678dd87f471369c515cdcc45c9c45efafe93065551e613f3b2dae2b0d647931d12ceecee0ac78c5a28e42e1f40af2b64c493aa07d2d218a27f82ed67323473cd8c908451aae6359d6843892e549060ff9bdb52ff901192f1ba4b4b5a3aaaf67677ddd67edfd2320047593f3f7dad4fbfd77b8448b10bad3e00cee0026f8eef49bc4940c646c566e7918f48c6700e65e88c32ba48203b0083b829770e558c24fcbcbe3f3bce6b355c737eb45376b667614c932f62309864e2b0fac2da3c02229402ceb1aa0eb88fdb96a5aa13c641f3cb59f825acb188bfc38a5cdc9dec771a4f3d9a57d85c7720f3eddfe55aed280d31dd02167be11483e461d28a972b0f34c9a00244fb918005d68ecf2b565a1a28d1fa5b3917c0cf5fce770d3c7f5548288c0ca70a464c33c267c38e9301e35c583b6fdb6d63c003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000045118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000450d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000450a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000450b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000004529a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000045141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000004525e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000004512978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000452daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000045189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000451159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000004505ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000004505c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000004514d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000004503db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000452ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000451213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000451ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000004514fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000452b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000045305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000045280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000045223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000004517a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000004508858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000452618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000450f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000450e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000045172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000450b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000004505bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000045137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000452e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000452297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000452608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000004518373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000450422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000045204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000450afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000451998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000004528d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000451da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000004521d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000450ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000450e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000045107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000452f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000004509726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000004524f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000004503c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000451fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000045205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000004525110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000045283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000004521cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000045094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000450c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000451f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000452421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000451fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000451bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000045304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000045000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009592e1ada04a8d8c37196d47aed338a2b35b8e2c37b90cba8eafd275d514eccb0cd56eb97c6aca5776723982e9d6a79644553f89c19dbda51acbd686028ff41d309623f6c2614a7aded98024eca0dd950c808ab61787e4d2f049cd09845f24fe7704b72b97ffa0f9ebb5287a8b10ad1ddcd06899bb897a57a0f10ff64ffd985817f64a3d748836ac5b93852231f37d58d9ee2dad4c51533fcd621db02dcc57b61f1bd42c570f31014b6dc9b19c96a0eaa0db47d74325229a71ae32bfde3dc98feb540f7033ec19fd889982ff6b512222ca47e13e4ad9bbf2f264cc90c64cd6c6274ec1a74045282163ba14b10c623c22f774b4fea99f59ea28833f3b62cdcb5190f76174cff423958e5ea393d9dc0c57b936f662e3cf1586a9c840abbb26d32a86c8290203870ca47da716125430a8f22cf04b0e8366dbf7b66bf3727b16b098a40ac14e243a5c8d07f07c9896b69da67e1f9dbde65efb77035e12aaabb7da586862bf51b0795472f2e1ebb33c2d7d40cc0c162b93757878ce2e98139f4dbab6e1b45a3d156aec37c883dc741b1639867808cca7197b208e5a7203e0cbe95671eb2ff6dd1b8f7ac2d5b83ff8ad6a28701852beed5a48b92d670e1d12202faff1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005c0c274561c82b60391648343aa19376bdeefed86e57bf067155d8c5657155f943c297067165f34a4ad43b2ad18b1fe2de66f2105e4fb32f30602fb66c5d7e0ac00b9663ed645ed54b806976780be0584be3668d2346435ff9c73eae08bd76f0a0420cd905812cbce2a628fd63f5b05d61da225f276270b2eb3dc082c6c139a9f24f888742a9022e3ce8d7a747c78aa70462650efefc7138bf5dfe12807bb7f0015dc404ecb06aded3a3ba43031af4a547dd01f6a516b0d5ee520a8f242378957425d808279910f0b0faa5b05a6b9c66f2c9866ca4c3aa9870a34f4cc67e428e6d6f44e897dc10bf12c2cc5192bcd86000443e10ed47377591c5823089a67fc6d626c05dbdee8fcc94b45c2338a07575c0cbd91f653ba0926a74b1edea8948761e0d061244453fb09b836b905d8b1dbcaeda83869ea7b236c73f378370bb62151288a9083f36e41adbecb9a7536f25c6053a507c0d654e836b353f2ff708fc154635cf656ba7a66ecd2b2be657a27ff18e5faa675a0a74fbd747d4fa79a9c6d1d0f95486c70b43b48c9df384cb1f2594d54156ef1f8b75639f32267b8b9d7902f41beddc0d71030c92e1d3acdfe7ad7eda11477ac91c0145c764181906c566000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b67401059d06d21f7b58a8c6786bc44fdacab7d58d3c6bb0113268192ecd4c00e7e5cea8bd1c307add7b5291fcde4f535a435b987f488d64c9d6147b4c3facfa5142f7662ef4a5b4814704f38a8516ada9613cfd32134b7845f894b487d5a9bc34f1f6e47bbc652aea4ac9afea617a0d7699c65f945ea76b0908885066f55768a1943a4f1190bf09332232d8f9fc4c98ab987feedc04a3dcf369cf7105160d703b02d502ad3522ee393c12ecbf1efe6df225892a0dd259f6b9dc34fd0c837c50919784499d8cf8ab355feea5b308de2625c3e1d8ed2496f1f19716ecdd553b46911003d2d0546f16f1fb1a6e819ea417a81eaff513e6a48b9f373496aef9b387034b39621c3a76fb4a2ba53a3f8676be7568dbb7503b318c61b3e86549f197d885a3cc9a306fcc7872cbecd305e1319b25865263ff7465d3c92542d83fc7812ac30c4c9bad11b5f82c1228f4dfb7a5a2a48a0f61bf30cc0bfa17824abc7c8336859afb801009300d4081c485381b49ab87810f5511a11eda5a7dfe6513fed84b6c0a980af97d52fbd4612313496dbd4fb0132397f3591f6400a3ab4ff41074676c462471b91d94dddf195abf6e2b61c320101d73b8270d24ad5135478ee9e50000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004cb597ed593b8eec52a405c965fd09c55a2311c4229e7e6c5346f71c86749ae19918ea3d2b97e5bd59eff8a936c52eec7eda589a690a357c1fe71a0410ffbc0ab38bbb3415d0cb0cdafc188b5197b8667261a1476aaf4fbc543709626ef857e0a4fa0c58c5f20d3bee935457ca7655f99fee9e19e4b272bbef33ca03d53441d7a446b51bcf2ddfc5fa778ccb6ca05e78463ca7679a1417fcb0412cc125f4a76469a0fc41013d4d2ad38ff13f6ae63ca4c46bcf1926a7df2d432f9aadd072575d05f697beb6953b75858f6ae7b38fb922d003e951c607dfc4528f2f94f2882411f723a2e220a275cbcef3193a148ed69500ccb72ee5227452377f083cffccb42191c4829a2db698219a4646ce618843fd4f5be42da1c6740396be60c41af139ec663d71a1b96f60534bdb30283485e4d5c55591ca709d9b80ff04c97b806e0d7851d20097eb16246adffb709056b01250104b50aa4732bd38a9861500c4dfc3036bde7e98e45419f8b4bfc71faa75d8bd235d5e79c9e92e1039105810edc95edb8acb1ba1a19b4d057bffb051ef611d92fe12fee6bda3a0c9e7d86584906a9d234fd257310b09b0fe0c35514c549a453afa9548c7c0890c0beadc68c17daf71f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aef7754c676ae7d2a6ef6181ee05512b771d5719b14a27f575dc2cc5a30b80e2db7493c5fefb51dcdc0476c67860487484f7177909c6d6dc257408d0f925aa2e0b7d3076e77478bec62624d510d59aa13f45d64b680b61e947287d17b11d821d7ba81477e1c73cfc11a349aadf79104c96f25b34db32ca65f3074c6abf8a965d50aa615d46c3aaacdb44bc2e2b18ea8e58c2a1ad0de73f2f2ba0b3e411d9145740b1408b8038b33a981c188da93f6fb91058d490030e9d2dc4fd90784a34390e0f6a2d1fcf1f07093f282b2dd52b67bd8c68d53c14e72e772f8c9d47b15be2e1b4f17e42b7aa8ea7bcc2c476eb36bd03df5d81d50c409626606396bb948583fc1f03a53501e86a40b4ae9b06c3b39a2f0a78a24ec9abc7ba6a39a514113e0826f56c30ddca4cc8b7b18a23cfd44aa97033c841c8b6222e913c37c277fabb6b2237d47e1698b2c5c496a4ee37a6047bcc6db827eadc74c25866d9917ce9ff64e529fc2fd440393bc9916d5d3960554822a47b21a6016fda0859a7225b0a4c263641c081f1e55a667b66b10e8bf8041236b872418d2018092982f1ec13e52077fb1c8474d3bc0ae084874223bb31a42bff52c0ba93167c91d854a8106204dace3a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a864f898e347544703330080b8987c470717fa86c38e0fbe8c0fae6d50264b9e23144aac63367f3658e9732563f2d0501717f8f30392f1dc59285e2fafb6feeeea24f79ac4a09a640a4c9f9845e07c55e042eedbfc09272f6cf75a6081f8fb0b1dc4b510f729ebbbba5574126ee6d55278033522769d494ae4bf629967113165567bc6b5560c9df5387acec0c691a6ae736adca592b6b0f4247c15312fe2efdc85cefc9f8c60f8df276731afde5321a26276ac04314f8dfeb5d4652040371d02eb9c975dfdbc75506c75e8bd93d94fe03a78f1f72db1f6382b73580bf7279997d368c6d2f80758977ffc7c42d25d8ddfe322b4b872cd9f9c34c6033527cf2ae3209fea7f387d93aca9b6e43811fdf950fdf7a97c2637359873e358de5e3dbc92c16c9d8c1bde74808e6b4f8315878dc66f2db97b0e69c181a298c52e29823b664ba61e73fd2bd80ce0898129bddf2cb121e2b1b5b9c89ec24a0ffa40da0d9df94e8ccf207e63126b7e7402357f226d718d7fadcfc4a1292eaa715e369851ea4a5a3eb28e86da96a706244ce56f1af263f60ebf5f2c027aa2474615acfab55c82493355dadbb3b87315b2480e0d53d46e56fb9d03208f119260c9ae319864f341000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020daeed8804b0ec0d171188e843877f45e0fa4579a4ab0ebbffd6149e00473dd019cefba20284a79d332a4301a828d50a75e08ea03af28ad414db7bb727ce866fb2fb89befb7a8c3eefef78e77ad865f575f530a563f42776d7491fef0ee0612380035099d95f6cedf033b8d6567dee53f46a4a2a14f66fcab58a40f66839f087b9fc4b2eb5c813f89a84de06f3b734a43341155c8c75b7f76b9d9c82afa240a19c7c10d7975c7cc81de0bafe70c5fcd107b839d2402bbbf71be03c807bb3c6f987c4f36e314051f8aa87f1aba0db7a6ea184f542bb73253d7e7a26afde4ef76dcbb5d790da63871e2e1a8b353e53a816f9597a41dacd2ae97d03d274006b175d7174dc62564ec34536b10c71520dfdc5b6c2619493257545385625f8c64398209c133c224a9614bdc0eeea15038045df9fd135f9854bfe1743d5540a83e9e43db14186fd29829d05605a19a3700ef872b0f3c48262a1a5bc35fe8f08f80fc3995da9ab9d4c896731b8fd0fef2957b109ccb176cd65b4b171ff2699f42c9502ed4df033359aae02f93f14ad397e4dcfc3cbdfc117e77b670d1c240ed4efef7ec0e5f94eda8c014d8dd5782b797afdb503226f7bca60ca0186412f242708c7d950000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000819ec2f59e663a39971ac342c5d20cb2e209a28be4f4e9612e2d91e26dd9b61f0d815e68305378f51e3517ff5d771b9e27110ae04aca81493c3464353ba163507d82bcf961e2defe3b0e1b835d86e2173d265c87d5187f5ba18feb6bf03c2aded38556beed1c981f37c56c7268f4af56d5767339b0778e6f8f8c0a6fb65afb79afd955e7e91ba330f94470e199d8eb48c06f44c2c665e20755cf7acfdc28d1f8eb1c5fd106a0e0c3463989830f8afbe31ab678efa133ea485feb13f2a247aa38d3be3b21ff5469596c942dfea3054e3d1ef67c4ef0e864bf72d7a437dd24a059c1c452b2a8d5a266626f02fe95e6e73e33d57a0d30206d91a88805b02b8749d2a7b69cae092216bf79096c466461d5ea2bd136fbf3df2cfbfee41ded8bb79469e8bd6fa450559d759d6b032c1dcc28be2ba59aa97de8f409d5e0535ededf858dbf00a27883eda64fe440b0a90c740bd35f93a72c101c4102e55e0098e832494729f62fb1440525c54673d49cb8898a6113198d1469013f9c1bbde9bc682ab38f0e478973aa6ecf8430b7b60b985724fb687714c7b41020714733c96e5ae8cc88e42b4f3af246f272d8b17c14f35e942e9183c24c7f9cb58f1c0a6a1410e88fd600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008938a425e10b6ce212b55d9d9cec9696c14e02be87ae72543390fa9e57640af0beda096c0a39be2152aae36469de7a4d8fb1ea0cd49eed91ff663df3757b52cb2eaf30b27e150ef0c7479b251e6362763ed17ef6d9dd49a2d4898f365f551e7df54074341f74441d2c83a528d8a952758adf2edc3510a4567934d030e0458d1738065686f20c795630f7630aec12acf673b42aa12f9b44a064ceddfd7bd568159f2b00de71c3b886f9de3b5464aaf73bd3dd79fbf7b45828fbb4fd9be07c4ddb2303ec5baddaa2aab8c7f1b22ae37c51636474ff06b5f5a979f0eb436b596db0c98729e6e9a535149b928f3971e0db53a7702863429b087f64d55e1349aa78b8d9f22b3045b6aab84f7be7a6dfea9705c36dd9e3bd455d621cc65d81c0d4bb9e3116064996cd393ce9a4b45e5738e0a6cc6b684cf6c8647de6322b35b4bc6a94e52f4a98e5250b8559ed0d3dadddcbaf79ed5ee29d08cba7834a0a109e97485cab06b1cdc3ee18b052b55d6ecb3d29eebe5eff98229aab0d433f183dde42d17b5140580d359956633b53ce1a7acbf80bb47270a6e1008843f944be46e0d8e7e105cc4de0c4597c47baaaaf9b232afc46710f699f25bf78489b285f46ee44635400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000783c479b111f5e904a38631f52e878d61eb755266add2dcfd0d475dfc60fb26cecaa30d181c0bc5789518a992178129ae60fb6fdd516e77c67340c3ec1e7d10b866d7c20495e69795e2bee2e17e82b78739654042cee884d0bb36577ed1c4201401fba91204101698a5b042d3540f39989ad64dc718abd8d6ab98e72ae9eda44741214b7617f2064b87d3b3d58c42641f5f827e7b1c82e9d4712e11f45e35f3f469e7952322810c2fa736ee057cd134a5142d10c1809d5843c85a25195fb38d01c665639561e62c83e6c48724b9a0ad3c6b7f049360c85c9d98507d22ad9e4f6cf733c0644b215b02618d8303f235459a6c42b434629517f2718cb127904d68ed67966db8593781185857721472a32af704e62cfa4573c357528052db0f863b5faeac63fb0a287d831724dbbff9b4026f30e550667824a9dda70a028bfcdd86aa3c8538a2ff83ae3582ba188714d2393f6ec13c01e118257e5b1bb181991a18d7b01e082b6a4f6b7482abc4caf30385f470c8fdeab39d765b69e745a0b60762e565dcda19a5c5e8d69f7198707e5fe6873720303a914e7ace744b442e41dc250448ad11cbe2f644b166e3801ace5b7277a68e1d33fc8ad0d560ad81501f14b9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095c0bd9ed7b398c76a08874e397a48ca0be3cd63a47e6e3cca9bc2b750e118c0ede7411ba5c76a79edfe29bc6054fac56a8d5cf22cd55ad7fc2112fd9ced96b11cbc8b8e87d816761306ba88d890992801f339318afc8251b1421fc987409b6bcbc35ac37f8970045efad0aab1fb2145e98820c2fcf9a4fa2a0be27c5945bd69c44d44476bd0d075b09e082b9d2e8195f6a7c0822fa0b799b190b2144dcf4eaf79bae27e8309f92ac09db139b468199f0832f7cd1f112dc0447c0d673d508329b6a88aefee5027250528377d4c097b43fec120e45a768316bcf98bccf53a314ba52f76a5d71b79e5aa3258b939fdeaaf604703004af9ca30d758441b85c9e35f9f89d9689e466ebc82e12d33173f176b355192368beccbcb80e5b7ab2bd3c80190179b5e59ecb1efc32a51f12638a797b528acea5e91db9237e7dfa6ed83e089ff03921f3be332531688c2f2303aeac942e16d5345f0168ee98d4582fd1b5c156075997b7d67c16dda7ab609324f7a3df98f2740ca635c37c44dbd25068d4f9c18f95823b54beeaf1b150ac2ebcaacb87a4280bc8f7cb13318896ccbfa5ea4d30a803313cd9694a68e657ae2d522eb4c7f19ae5c096e54df07eb082f267655b3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cafbc3f30b8299cda27ed9a8ba2d64b5c61bdd7f232ee0729b9adca7a3d4eba95322317ea9f1eee415c19278a68f952f65851715d6634ef64ff97925ab8ee3af73bc645cfb986bd64952c648c1053c5ed7e3d099761d7dcb9676a474354eaf25fdbbcfbe26c8bee4090949bdbdacfda20fe7a436d9059077265aad3db3e8c414cf442f71cae5206d3ddc398a67c65c5ba940bb012f270c9ce84c62f30649634566b5febe99d0a9ed9d59154fa02e2b0b78fa6a37e289465454c43e5e037baf34ff31781a90035c60d26d6283ea7d0d20e8dfbd9ea7c3c5165fe5a22a01d4a9feb544ecd487714d687604e4c1d814752e56d050a07f4cb063d1fd76431ff083ecfe19532abc4ed42c0fb93bfb41c229ebc087ce6e627a7cd74f8306e8aba21271389d3f211ddf3088017abd2f94e673916610b97a351372de190a475f026d28dcd44765527a163fc14041605dcbf0bec7df97b84c8cde4c37b3d8b2269741276337799479f214b676c231dc1aa38cb3f20385c64009ef90bef44b67b9fa779af1c30697a5b920ba53129838bbb9df321471cfec3747747d89452b26f8be1f6d85555afaa6fb4468d94efedaa884027c768531d1a59db3fc4111de6e15fa3a1f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000269a4400b93ec91ff3d956241c1d39164297becd64459f0e1341580b04300721db522341078a86b39013c9681e65e87d852c73cede2e052d5c06fd7c521ad0c1cfc5e4fcd14b476f5d03a2bbcb9226f9cb1b03fe0f2b737177e7a3afb5e70b0b673988df3bc0b6c78c6cc1b825cb1dcfeb1ab561aaa96a5ee166c14e78f328457e2aaa0b1a062b0c8b824210be37bbb39c4a8f0eadabd0f24313fa4157735c435a7aed008156b11c725ba3569ea10c2a3be540711f6c2dbb9ed603488cd72fbafe1da4f20df1c4c3f859430768835fc3773896703660365a01fd980a2cddb6922d2f7cb43c82d9aae8a71675343a5e54fe9dc1fa5cfb645572aaf5565b397e130c3de71790ed2fa90f434a71d7da8d292c8ff972211a7648b775184204e82b0b28e16c9abaa64ac1c6b389270e8a6e78a838baf52117ee7a08d1c2fa42604e32c4c568fafc99208543287db0ee22afe213e5aac88168a3e2e89d1eeed1313ad47abbb86ee17c3d2c4b8c7b9e12945e422a04050915a34a8346648ff426afa0bc1594f5487dedc061012aa2d38e96fac5ed312f821fa503c0e38f3921a32d21487870271e1cd42f1d545930faeb13319c5cc2bc0c4cd8856f8b1c96609c9e9ad800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003034201528d3455c4e42bd922f6ee6d149f394c4bc405098588a07efcaa698915ead66e983b80273f0a2dec2af2e8f78c969bb70b047480478586d2b1d1884440cca94fec2ce287bc6b2e57191dc4e319c9a336561ffd353c9ccb056c43af4491b9b9a57422d45142b00b61e3ad3e36f0100c1740d3416bc52535b8db42d86ee8bed96a4d19bf47fb3e65470c68d4d14b745e8fd423ac2dab96ab40648dbbc95ccceb008b851d7ad35259beafc83d521bbb005f1990df475d825b3dea559e10ad61ff42819335771d5951bfd900a2fde7c0e6e52473ca92bdf98ec62bf405876cb918b715c158738adf43776582b2ae855f14a4a082b2b86eb5dff65960762532fc293cea565ef5872bf500d90ba21ad630c4ded6c6cd1fe404512911b2172edcf22107200b0ce9841b68959e5f1a1f609b6dc81cafaaa49457c9eb57a97d9e2682ba1e2321c3afaa4ec08708566662eb1ea64ad176e0fa74b333fa33a0126ddff3b1b4173df63e32ee39ac05a21c9f15bc93b18310a855bf4e168f2c24165109f503d1ea7f450e81ff1f35c48cb2b85b59486144c665f5cecc846ff93880d11b046e4c15ebac6a6e4467fa74d71a82ebc8962aba1e56a5be295181dca2aeb2800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24d727ef72e408b340aa1c364926aea375587cfc778e874d3fb4156a12e929a41358f1a27ac7918110655f9568227664cb3b5ca4ce0db8ae4a29909d07fbcafe6086221e7bdf0a386a3fe423584eb578381708852682dd78789705e80aa1daf5eed9badd64ae492dab87e861f42b7a96e5415b85467c9dc1f4dbfea62d3864cddcb09ee2c1b042d4ee3df73808a675aaf51b945c3be0a07f88e545d92f8ba8d2b5a924d2f8989195d84afa8e4f835dfe434b09c504a4255b713f98b885b4769ed32ca46db6446aaca71ec6578364f9a471097a5ba46e2458bf805cf2ba397bf9b7027a1d5b10866af5c00c5f22d852a3ae6263cf96f00904fc61e8721af82a8e0845b0e66a55dc9f0fba06c0376fd90b4d4423a69c739a772796065f447d1bdd6486738729a842acdbf5ea489bdc6d0be74c5e73128566191641ceb087c3890dde57cb512d665bd22981b5de70f39432bdd8ebc64cefab890191629e66a413ab4f52f111194280563446367e7d5ce645a8d737af5b483cd9aadc8e8c2f272c8988ef570e419ac310ab29d490ef06da1936ae5bccedc8b57141cb03a1f88a58ac9f3cd427e1b2f01d52ecdc4b3435163588be1d9a7b1ee16c79caadbe8ddd92000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028652279474e9f8a858c0513508e460872210cd0fe530536b12a2ebb239087edbd9cb3530d33d8cffe2087ef1634e448cfd3f7f1981552ef0f1657628fa48fbb3943bbcac75e26421bc5cfae758c4b8572ce463296734b7e50361b453a2b91ecc954eb339c76b3317b37eee36a2d8de88ab752ea7fbaef90fa26654ddb4b817198f84b2780eb719b867115edb3efc5c74a617e6f1b39d3043a912901b42ad96baba376d7fc1afb00b8cfe667c190a4f0e715c2300a85074eba3c259d397094de765458042583fc94b3cef317c72c55d33aabd4d5ae1b24c043ed31cc7eb2f74d1bbb7e808899e471682b3380dc773d3fca4935ce2d31c49eeac04cff50198d4be5c84f5f9a3d7dfb458dfce07fed2cfbc525444b06c46a93f05bdfe4fc6efacb59e31c25e76e29772a2cfecf6e97bd6bc2e3382a4694cb706e6af6fad8ba3a241aec8df9c758513bbfb4aa1d5cadc154b1306d32d0816f40033a342ac96acb1c52c779fddde0198e7837ba5968452203148950f60612b7a57b4ab37a26f78dc3452fd3a06b201aa7dc1c982999ce846f50655bf34221271e51ca891462404e0c779b76bd3e4b0e970d536afa4dfa6dea97112b9d740b6a5d905a64cd33f2342a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bd5b6971eebc85d3fb6037f72915dd383346787d5cf332eefac8eb3e7cb51953a1c5658a2d99ce1557d2d1ed86b61d27407d7fd4e706d46ed019f0e6b2756522bb7a2ee31d6e8eec85c344f0d59449d8629dbfeeb59164818943f6da993a384716ab72478f079127816855cbff9ff46b1d1b5691b039101e5662a78357ebb6ceb1a7a9d645daaa60255a77d46e16dc7041bff611a9483c14a23b1ba0b90df97bd6b02d17d91a8083a57eb3456f9cb89c53fae16090afcef6ca7cf9f17d28647aa2f9b014d5189e0796de90f45dcc595e9456c6a8a9c88d79db85abb072266078391f92583eac6cbaa292c97f9cd05d7e0bd198d76c915f6f8a4a478ff3051308d3deb6ef7088737e1ba18330c4b9ab0f9f9097cd2908c96123a50e5e17e326d4a6c3268cc330db8d956238748e06656eae744de3a6e86cc046e70269b3b5aba7a0f804875eae1dba87841369b74b98e7bdf90abe16c274e148c85769d4801b18e29f26289a17518025486df28b5ab48c060ccfcf2c1001a151c4cc74229da0ab11e64eef021a2186f7fdb3b4b318cea17c234fb223bbedbaca716a28970e8534fea70642d2cef0053016b8aadd3e4675fd0102ec9df17586e5555e56076c73f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085c24bbfaa9f7c078e5aa9807fe51cc2548feda1526fc9bf938dbb79f3f0a3ca0568b42738c601511a3f652402c39ed8ff9d808413e40e07bf03085a6eb7a31f2c91ef4bba3b4ce02aaa60c8a9853a5f595729756fca0f7dffa617542e98cbda204a4e2f2c1ee429c69721c19022728263f85da06833ee793eed7b014fa335c196b8ff04669de2e37ea88d6fddcbcafa8b67152cb0276fd08f7b846d10f814a31da67ee42587152c12a488168e7de844c30301668511872c67359128edc2a59314fd73ede9e0b5d39eed2144f6061d6cf8fba6665b28f4ad54da0c03c0d306789cd3ba24afba19d7eefe73194494e5f30cc6f327720bcc3a3736566763c091961555fd01c7f54022700fd36b165e1dce4637d4518840c14d6c9f459a9e9cc7be100f51b3c2578c8381fe69705591e4394973e0dc5b482af6481bdb4aae9fe3a4a637730bc015b1708a2581a9e118fb92c7a78ff0a0c1f0e748b36d51f51901cd048684677f01a8dffc73a2b495ca47937d737af76900ba048b2f5f54c3ac8b5342459bedff773b65e8a376727b3e86a46aeabc3a3b27d3cdc5d73b92e7dc5dd931991771c50ca76210134652e16327889ff7c8cf46cfff496c99ab7b48eb1405000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a6c202c66101b632d44eb2dd56ed7f2f5aebb8a17cd64bb2b2bb6d5e77f6d361615caf92ffd1af7e658f1162b9bbde9b9d29f3186f2e209dc8bd971b40165093a02668c36c0221986f1a56aa67d6aa00a35642231c5d665b445a5f22737e12b801e3b7e431307a455235744fece416c0c1b6e9e3b94fca011ccd1d78eb8da73cf9de790a3fe9bf073a064a8d2bac5a2dd94c4a67e1189629b237c0042999964260a78911b8b2ebc4f16aa18eec8ed31632906f399ee51f64cd5ee99b87698b82ebfd513b312cf514e2d17c9f2250503501169a2740b4c61819836b175e8e88b42cb941b164063ec917822f0a40be7cd1866cbe2d28aba367edf934168a4aff9bc9078c12e0974ad8923cace86889c93169495b35ea45fdf1e31770390152daecc4c95a8efca76dbf68587ff445b5c0e9a7da5c37ecb4fcc9d5450708fc9e029bc3812f5684ade323c8dfb6d84a39544e4a15de57398b514c56a74bcd6e64f3f09ae7dc93d36ea8a0f279353628d5af79b84d6ef86d22fcbca5afbfef2dd8169d7a65f93141027c3a9739d2fcdc22b7d39629521aafa82ff45ddb949424b3b32b1aa84a9efd4b42a33a9797fb316d2d7a9316bac3fbfd0de2dd7d03fca2aaf200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f3803b67d3c722f8076e86f3d6d601717aa85adefcf1f380e1350565810e55733a5f9bbe62247a7b71355e35dd7187620f7e190e96187e905295c6bb0ca8e7a034bf67306e147bd3899853e1187f5909a5d809a7c360843263a5888bbf7f203e5226c86a6d48897a2e822a16fb54926c4f20345864d9e735917518ee1117ee19ac186cd951dc3c1e840bddd13e2319b64c40fe0b50b94c5de6c724dd6ed5c2daec226a7194d001a2e322e3cf801f7834d8275da2fc1a2de7b4dd86a541e26c42eb18b93ed5e8e31c7d725d59d4033223db3a6fd68910b3b620b58e634367b88f71207ac1a8362cfcd7eb36e1674b058a096835e26f84cb6880c5237069cd2737d0531f5a2078ab3557cb4f3a7859262d7f84cccbc86ddf5154036f09fcae10bcf1d35b785215a09f578db1aabc67d42afbd05d3511baf9cc218f9c5ec280357812276d6da3db1966e11741ad95d27992aaee64f9a9328f81dcc16ff62bd3b36a2aaf4fcc7670b75d3bf0c807af3a9c0b3d90d366e7062a46e3f2ee4a20dfa26cfe93522c1c071339e9d40551b0164da794fdb8ceb6af10eff53f7d11d82610fcd421c7233e8e22ea403e0a0f5a8a5b4824bad22993ca10e41ae53416523e38f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018e88906441493789b721dc96f53c56d7aaa34136d6909cd8cd55b3df7cca2eb82856628c37689aeb35fbeb431c0306bf04385e802fe356df4089e5f4c069a6a823eaacddf2b6215699c546b911ac3cd88352004ca345c58751c102ac2c2fb9fd4cc31f2d55515ed482cac3bcd6915779b3e3672e30e4669a5fa3a26ed043f85345c27b71f79bec7b4ef3cf880da996c5751e02f52609ce1e872abd35120a141db0f95d2e590bb6b118924ce2373a71fb2bcab9c980f75f2f833d221d09a89105807145d5835f4d300ba50eda8248b293633915cf5ae15ac3cb995b93c1784b73b3abe2268a7f84d99e75b644623a21a4d0a2988540d8212725f1273f904e5329413ab2d1d76a047908a59881f0ffee805a6557e6567deb287bd8f2711ae98da98d1113c4341f6a0663c8ddeb026ed1086ade9e3e4bf3997d3b0fecd5f5d766251501bbe789cd046389e65a99956a79f9d5132cae9e93e4c31f172338de3f5cf326d35541da2b1c013307a7691940eb0f040d37ebeff01394b555d1b3fff9eaed5b0eedb49281dc188bfb783de5eb4edf514841dfb432aa0e68073f5f0d88777d05cc36bf2b8fdcb8303e3a5a0439f1d04a1bb74e214d2bbeeb804353735c45400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1d91c63640f6f13a748c54fd98894519e3a8be8933a1018c46da2008390adebf87bd53a40c822a995a811c58fd9c0a5f252b7a8a6256e49408d616297eb51807bab511423000f31a5c83c271e377a303ab84fc4682454b8ad732fdb4880a9d06a6c7350a409d130af1101c5f3d19ff6a492da51b851aae8dd7893f4b866421aa473ca34c496e61136ecc49e3ff8fec8487069a651338d8d47b653aa6da265cd7392266b45bd7f5ef2fbba4bd36ec7fc67c2cc1b852d8f79b8634839331f71694634e4a2ba4c2c37ff36cef7a4ca737e009ee2d34fc8dc974960ba3fd311e80c5e54195982273128716a51050740867de7ded8d26836afd5d5b9e9e3109b430bc0fbc0342842d150011f0b5f35356fe9d6432abc3acfbad672663b3d770afa93785ee4d4fe0c1f407e875962f375f525b529e8dcd6b6c882682e78ad2b00d56a6da7334d85da97154d67c107ac0a13edaffc441618690728d192c9b73afb00762d4ca21dcbf534aed68a9968906e21266cc99711269083ee9edfecaf8ae1ed64f9b8b7cec5800fe106e59227f1b5378a3480ddfac34423d8da378c07061b7b22d16f9632e7fd3571ae72194f02b302f430a7ab7a364059d8b9544cd2165603b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ecb5ec03381f67def77e96696d4acf423d56bb67ef47bc851c2e5426a4c7ba92450b3f9c9e3c69462b1a0a7d6a6f82597c6c09e824d562d043031d437431f1604f7ac08f7dde19753c74f963287d6fa99675eaf0174a68830fa7a3172712fcb79bc83bd164d0119f9fd8e0170c6af5efab55e7270a4ae094df1b7234eeb173258a63d2c5fc4ed74524f2ae6e5853944df0a5ad91fe7584100a73847d02dfd9397d3317fcefc57d762b40bff2db25bd53e457525c1ee4021117dfc749bc4142cfd5cf14dfeb2c4d426621f843249ceeb252bb0a8f1e97d87eda456f75a9a7240a10a9d788244e870a9a2faee0a8c959f48b2bbc17ce886700ebc86ff5c85e4c3d5d46610deec71a1060cf02a0f17b9ab03caf8d0a43a44f5eb64242b29165911c0ce45e39c0465eec3f1f503bb50344dba1fbdc4e5abe6de771e03f8bdf6e24659db54d0825d3da1dd835836fc9e1b8a590f1e65ee71b86bc5af1efcde9cdb1c50729f933fc2899aeeb3defd7c5be7c642e7b4b3b0440b911d8e83183906d3f4aa34baeadc0e610d2419137294b8e0e5e22239a219ac9555fc087ad6d7a8be863f03341d38d31c527afb695b4ccb1a647499b4a35dd53811055ef24b09f974c300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ad7ea18192342221eb853ea2003fac8c087ff70be6e3050ef3faa1529f6e0c494062f1b470dbd80e22618da49a824a910ad3fca0fc841f9119244b507553809549146c1e8c39fda8122f30573cc1756553b3a6ad87cbb31b581958e539ab6ed329817b6f49698b8d7b6a26322315835f2c914d8d76e7d7b67e79f378463c11aac887b490667b8fa4a6ee49ce3b3464940df24b11a4333c4a5de8740167f86237e08ea0355ba499ae7b3a4e34af203bf10e8bc8679a80ec2f5004acfa686220e99b048acc5020ca4530de26c2abdf55a0e8ed1eb689bf27653ac1c0b8194707b60815162c485251c2f5ad438d43cb8bdbe0d42df57202c1dc02f33684d9fb32c54a274d0b98ba5de9d9001669d3562aac55a4d7c4a29713ddd599fc2ea70b8526436d160c50867ca072991223e6bb24a9af9570d0dc991c057fc74e1f3e238f7406e0c7dab27451cf3671995082d189d35f36771f186f2e5dd92aaccd2a1185b9663c91bce2cfda760e2ec222881a4dd0919180d27e9361dc4edbcf404891e8f3dd641843d86dccc7b04c1fed4309227d638ccff52f5f6920e8d5bb7309386ac56eb883251f2a41632c444af64fecdfda8fabff37e320de8d73dab158a13c05f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085ff42ee03df1b3ed0059de5e4dac6b53b724a3ea8316297787610260d1eeafd4caa7afcdc988866f682f855e5ce75141990b80ddba0a1411e362cf21d148faa95de0acba6031352a247fff51d89239cccdaba79e1752e3c99fb516d16efa5c3e9a31950c4160695786a51dc0647471b074ced2e4ee6b0f8bb7c94125890f2305cbde390033f99e698f2e9898d539bf6f721130c2acc2d5e8302a27810b15c59c9c87d8b3d67ced23b4a1e9456038ea0ab429185130e4cc13889949cc93f100249098bfe71578f94ce232a5c58b16d6263d38e960eb510842d1ea60d273d8d23e6f3e4e8fd82c38935117c75d96cb0cfe1c8e4a6bebc2e74b106a4dadf75e27799ee6359982aee8f7552f0e8482a4a42ae6971f111993825bd36186045a53ce09d4206dc479d3e9ebcbef2c008d1192dd9cf51378b2a0296d30f669965419a576c608c3690639bbe92a40a50afac3b1dfcbae149dbe10218593b1c7e417bf742bc6585ea88919e213911f179201f5cb716976eb812936d7ae1c3220e055d2ddf4e3d5973fe060151cda00c596889065ad303dd18c921cc75cf1954503c278293470988da94905274bb354e4ea457d4d4db8e2006b78baea60bc95f816c7437bd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008de66275f5a8612445f699ce6132b8ea937879b95e5395f27ae85e98054bf58743a8e785667414d4cc123a61fb2428d46b15f5058706450acb44ce7729a6e18786b5371c03b35a43932862010a96e6f7c283b7e48149ba767e47e514ea4baf9371bee119f77cc4dfc2a144ff4161a916dcf6f85447a79be92cee7f8793db96e8700326db2345bed984bcb39f9391d4c44b0c7b374f40734dff5ff875f10d21f0541c6adad68bac81706f81106e79212cac32891bba68e9dcae89c75ca737af36c38fe275510f8d7bf060ec7058bc52ec7d8a1d2e3723d9cec1a11a15f0e225967057aa6797965b0601d584d5b05e6a9d231a4cbacba83331aabac86ddc016e5bcad6e325f87b67f2c4968c4f15f26d75e34f7c56ace7f9d66c89b6c70c661537521f1e4fedd65198bc7753a8e356be8221316c815a5bea210dbbb3bb8f78b2f03372687b6428b8c6ce9c54cde479d77072a3d05a02e43aa68fd415303afc6d732aef518e640bbc4cf7be41e23bf670a7cd429a0c1dca324566262f4f2985a24ed1d093e719b9dc47674089e30f6b29c7412307d82e7ddc6acb6753210863d3b05501398fb5da85184cfb72e148354a1696ead88294ffbf1f394699c10aa73aae00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008058b551c0765a851bc60d222ae08ef918036d92a8a65ecfea4298c0c6e30e3239e8615a9d5f21a8d1dfe3ac81613a0ede853931b541b22958ddbba6a39cddb28a8c9a1ddc683a1284f31f1e519f29672c7c1235bbcfb59963d53cd8c4ec8ec94c04343d232b02a5032a3388ca47dab29d32881f31925b03249a7cec360e71c27bd8a6603f3358d2188acf388ad44e32bc2a05ceb21d7d32d4c8aa140f3ecefc3455eeffbb8010068905b439df01655cf08683e77a4d070f987209d0ef611c72342f6b80b4c2671d82f358bc429a1d546fccc5789d361e368966995c093a69555cf32315870cbd0d549e93a67e4d52ee94f1df7f16ad54543daff8e08555b21c3f0a48367765994ef153844ca4c14b73f51c3ecc32fda366543f5f34cc9e0cb00c296a4c7a47eeef9c8d8dd154d286a00ee81ef1ecba971bda56bce25f4046a4ccd4dd179c0212705346d6cda8cd4a66dc7855cd219032c5cd0a213f0db1ebee7b8e23f9ba7ef2db30906c4aaa0e3fdc82f2d98f686a85e55f4b051f65fc6fc64fdcc8de3f83ebd9674d7dd5f9c2123b22f9dcad64ed90a7929e7c9f2435ce1e64bb7a9bd5615a761f61763452e814ef14c4599f7be1fc7211a66755efbeae9f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080c78a29da161cd9e4e67573a0643634cda563983c8ef1b22836f0563672892758f925774fb3f36bd677608e279708a7a93677d91dd4210bf3f31cd4c235a160ec35d76458e0e24d2d74326d325ea6dc97c571c97c62d9d62eacf23ffd9ffd729ef2be5deeea2a75d6b601160d929e861bac9dae8530d57de7a27b76dea580fdc24b0aeddd207f7a94e1eaeec67956a5ffc118842c480acacc354ad4173e836107fd286787710d655d06e59c05882c00303af7f0a919ca8d8586b91cd7060bb08c3bab1291927d502a889af7ff55bdc5cd904eaef43b58b18b7003c88b68894e3f095020dd98b0ce260b13a61c9741d9bab2fd6b84fc7638a85d30fe64c597968d5d13f5cba7007a5d30b1a1832e4c525ba88b7b27a9ac195f5076955ee31b5c7c0245dea369b440607fbf7ad37fc24f0df82d52bbe177dc3cda6e2bbab6ee491534d73c773bc87ff9b7be7bbc7c7ace3b86d9ec4aaec80f0c960b00cae2c0b5d70aa4279aeb03562ed4aef55411b5497ebf67ab4c1bda3d58dd2b2d2ee8ae49496db539d2bde5d61eaca8b131f06f9c98f55346281cf557023a198b64a96408b3e45bf137317209557e739501a1c1e9bef32ed3a94308db4fa032090b2cba6000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000268bf99f1acf22842dbf71cb1434f9a1e3bfe97ef9a88cfdc897bfc4048a099ec670187831dbdb56d42a452206bd9a60e8e0ff0eefa502dc2bb2fbce3000a6f1f2276fc51eab74afe8b487b07b254310ab3a91246d42c039cbaf8befb28308812ea401680733f02f3bdb6e7d6ba2017f945d44f1cd473ea6028ecd0fd8e3a30d87901457d8efcb34969efc1cc25cba41085717f04f7c46235b2d9640648d7c6c791bbecaf2d8ff4da7e7a0e64f3550f5d324a6a5c57d0670e096e6332de227836f61c9db3ebf2518e8ca43b4349d311bbe50afcd74647e5252facd5d58f5bf094bbc65ba72093cce898292c51d57911ad4189af8f4887ca3f39b5b162a16dc7e10baeb9cd8ecc5c4b035ad7c3e5c012b549371d5614816ebea8b0960cd1740e75c52ec98ffaae2b6910baeb2bbef4a928ee370b6ee498d182358cd45d64f4b65f6da3574d5c3bbc176e259a118cfbf7be6b1ce2aca77e196cd654561ad3fa4fa81424491d6133aa5055a35292b45e5df8d04322c6e0f078cb18015fae2fe06e8da6e1b8f8f0e0d99040a10120be9a1da74138d331cf493101e376c53c54a1267e11f8318352a7d4a1dbd6062a38abc670830fedf1dcaf09bd3f05b661585f0400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c83e5b86e6b369f46ccdd4e15ce1b45d28692e15825b1c911afcdbc8a1d25ca82e81320c77a7b4945e5fbc91adc5cbf4eeb3cf63d123068eee28ed381e2da7fbcd1d345669b4a7e7a81982c80d88cf7985dd57ee2b3496fca320a12e7da88744cf9b27a0c5b7558aa84ed7bee2dd2a52d0e1b7f98f326b74c4e9c63bbd74179527619c4818fb1b3c8788725040bc3811baca1fceb21d004555d37cb71458c57240a9a5413124690eea3befff23208144be07217d96a38603a979f468602140310c3f251df80dd9df05f39d4b728214b5f860d3a9aefb817fc0bcb9a5ccba7b6b16e367bcffe9b40bea3c77881edcec03dc6ad6afa0f49c8656ebc2b4150ffd983b9cf0a4f19c9da958241b9ef86b9215da16d74ce092d9284ee6ed34519619ef8065475dacbb5546f3da2dbd4373e187b77b4755c05aa0b194a13c23863d7535051e9eb6cde42e12164157fb57f83536de2c7a17ed57f42aa1835da97d8ec8e6f9b1a08acd8622b48cd1ba26915a032385614d25c255018ae973f9c4855ae0c42abdab5b2b5c8ddddd8c89b4732bfdb7df19a3f0eef7d66f737c55d3c63fa31fd9162ec167f6b61a7be9f056f86f6b152a4843e50fc7294cf7af6914179e20b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000835615645b1008ce0e5cb9446612dd7355727fe525c5165b41823aab12e4d3d783fca9e79bb8f7622c5dafd00231ef207bf7264518cbe426f443e57e36825850ab4b9f5a5736aa08f23f28a8ec9190975615e8ea7fa50c5ce3c6a892e665bb4649603889ba912da28623e1250ebaa87273c9bff1923de76d3340d27065f455a3620ac85d351f53891c62eca2e46b1a333e780470d09d00cfce9b3d920975023ec2990315d8cd069a092b58b544180160684c7e166193193dd8bc7c6e3e05f786a8e7e05fce5960f06032e1ef30a58a4fd79bf8dd543ccdc1e4364976f62d31235d89a97fbe3d763bee9e5b668b84a06b67ebe5962a04f60471ccbe6bf8b343010a66bf5fd05b5d74ba6ddeb2f7cfc9cb0308a32511356bcda6e223f2decb14d1677e24c36e20b19a3698fc120e1e39ed055045c166e57a37f0985e74e45e26913067ac412f3d92e935e8d8ce0370d77ef3783180efa6f3e5433b499d841d72896a4b5415de1e958b50b5a773040d6ca8860f2e97e62e9bbe0e5d548ff9bae22c1bedd078b48c2350e5abaa604af5d8900e57a2f8017b154e47c352981ecd32b08af77130479b9295ecf63a1b119187ea23a49fb9457ca86f31460200d3ec068a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000146035685726076757fa1dc2f9feb9975582e151dbb0c0cf3b4ef150e7bcdfc9cfaa922268bc33affe20b5bb12a578071c40021816b12c19679b008df74da1c6e789961c8eac922a52d42ca30da145e7045bf1816293fe19036c0a94b2734c897c366f130eb8796f6a353ad58280398f790d308be1ab2737fc87dabd8d9dc8e235988dcd165bbe16e7b0d8496d12934051b12dbdd7465a339759ff8eae771596658b493f213d0f8ef3873e26a9fbf302cf55a040986e86936fe6fafbfa14b072993f6488cf634be3b070143f72f4238dcccdc2993910e8ea052aa1605431ac7df6f96691b1cdcdd056f48b3a726809b3fac5766dd483df6940923f7c0dc08b8dbe5d18b4f04e06aed84b5aecb7874a308c7d343b4eebdd12e7ea8b689da31f353dfb115054eb35459b5122cb20dd6a7cf725c7033bfb97aa529e80a566701b4a32ec4cca2ad3fcfc3a4c37e63415511e8a1c78d400cb218a5ab8fe73df00c7e9d7c8f724b672629f4701848830058c80a773bc536570f4bb0089cd83bb5bc6af460397834da7e4e3f7101d119061364156a19182f3f59fe140df24e7e3e201589b30f86c1810fda206e9752f7e3847bfb8debf0a1a8de83eb0d8e3b5ebb3865200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ff9c06f10704ff021ef5bd071e638326cd970acaef67831810a46124620e12a7d7178c7dd6c6de8f8da6028f4d673f5e83ac9cb6d5bc3fe83d5988b9c710a05a825a51a0cff01f06e29068d6b268d77a01301d54817b055603f971d65a0a0eb931c181ac5a17fcfb90beb658c4c08f06f5b011966112dcbc26387c4e6225adbcd300c1215470738dd6a0c008a94153333ccc911273342a304246f547058bdcbff83de2c9bd91c1ada202350ec7e34ef25bd3867333ee3427e306a36110f1dcc854c59762e83401b57f6fc6464ebdb94143aeb8c0916d076242ea71a6c2bb7e6e7592a19a7ac6e05ea5c3511f87b5b314bf7c0da3f47ec17061dc245ff88966234f453823e00b2d18dcc9b7942181b387fe581a4fd5f952b8cde0dd9776b40f661ac2964a7d7f557006008fec3ceaa9cbbd8d89a29a4baea895574048e109760f155e3f6cf1b44a2027b6f6ed483093649dc48d8b3f8dbf4c59745ca95d7338fc609c010396f8b8df02c8d3514e3c55dec2634013f395b083577699aba617257deefe2c8d93aec1d805c04d158ca9f5b59785f11e933a348fb20f162708be49cab2acd708927929eb28ab53ceb60b1dc61157c477c9f48c165af3915d8580f7100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c3073566f17b1d59fbe0b3327e1e6ff6307aa6fd7460bb13edbc94fd5e2dae0229fa2fc798bf3e2a400e8a8cc034b24b10add0266dd918d15ae8355b54d443e34b9cd32682f3bb5dfd7c1484a0c9419876fb92a79774eb5120f066d23b875f44d12b59774e48df2df9429d6285d8b08a27745a56e51f72eee801954c3788ab6ab2bfde303f1cd89439a1da082b0529998ac5e146049d62ccea5891b954f9cb81a0b5cd73442992001cd4a7535e04cd00eeb501b213455e1e0e1153a9296b5c1a263758b603cbd88f57d5ef7cecc8bd816f93e5891c2f058174ee91a1bfee8f260456ec28a8af3e1c94b4c4d75c3d1b6d22afd2df24de64d76cd58d94024642c8dfb19f880b9fae09d357e4635dca3c6895c89a7f95fb39cb19d60070d64efa39d9ad8fad64b0a8d6a3655a3afad7f4b8e4935635bf5733e37daf2120b40a43a61a977e85a44913b02bf0334a1422479f5984577d6166419e20d5da8f7af863a04ebfd4972dea9c4d7319db9a6874ca0df4aa993c3d15d31d229f26e967bbecc268eac30fb572e7a575388b2d95b809e8b87d449e35aec86e3130e429a49ceb06c81976d27763d421147491cf4ac867531efb96601a5f64a63d25cadd7998b72000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088ed26f22df01a96d3d7283d5b544d327e5204593c42981da9b2345f1c32a23b113ed8350026685ca664606f6055d10e3a82ce42af1a5f6d5521594eccbbd3ce7c48b3e6bc40d8e4de6b0962a1f0685891d3932979af26bb787823b9de2dc587cd4f1551fbdf343d76c84f261174159d3d92d2c5de6d5f13bcc488a113612dbd7bdfcf245c113fb900b82e23f91e6d9b8e58fbe975f1717436e7dfc16e0fa72f7ae41c0e7fa4bf2ae35a425584fc7612d5dec8589bf98be28db49933a8d9e5400c7032833933782fb93a997e2c0639805e3ed7ecfcbf49b1130d7763169934be6d8a8fdb64d4442c486117bc4ed473d6c9e0c7a9dbb2e12aacf23014582caa44b63994e71fa8e1566f38beea2b5564ab814abbe230a935b5ba6bb344116c59aec37dbff3fa1640bedc24d8870b8d1738d1f19feec085f72e0c94314fc3d91a297fb0b2cfcee4024961f14a2879ee38a86d0abadc04b9606a3d56153c49053ece26399274efbf305a75af4aecf0b6f70521b0f5b89c55fa02a61c6ad51a85054c6a62a16c4f3a4376a146828858c542c2369ecd3b6a5f390611b3d1c95bfb375cd7d63f825560d60f5fcf7a9573fca1fa1065886f0b7725ef92ddbd707b0ea1f10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090e625da38bf2c15f7a3ad6fcc44fad0db1fc00da06dad7a9f9eeb5b6ec56abab1f0f4114968711d39c5a75f14698eb2cb6dd2283b2a20ae44dbe9f89f48ac0db89ce8172ac88897713dabdecabe0717956d7f591568f9530f6ab288c8a41e8fac44f9b3862dd6db8635046606ba26029d9a88d6d90e42defb307f0f68f30490f9ac3fe8c50741db965311cc2db7e864d2f4d2463efd3a26b7c1d0ec39a3b963db9d0208fc046722355922830ce7b505ee520c00ad857a81968eee57cfe7eee30eb2692604de6032b4484919fb2200cc84d8a449127e9a78819f52e0eade712c25974476d31392ea7533103205848df2a3bdd88fb723ad84bfeb778e33657ef4854c927ec71b9a046c20ae230ba446202b05e92faaa370e55c1ce51f17283052b031306a4107a42e641b337b86fb3d65b425bb7c7db57d0544c1f0620ee85d13a1743ee8b436b1ab44db17d00969797b62a155e44cc1083710efd463c876f14f457113b9a18d6cb388501da4eb7f706732a9cd9f21122e57c8c32a8becf2a377e9fc722facba2cf7f80e04d9943c497e9aaf8b82fa6f1a31b2633fd89783c725823b78f23dd848d2564ccca02a9b13ea2aea080345c4209e0e3140b1665eb5300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b2a506a61ad9cbfc32e582a96b664b467af75037171efbed938f7c787eeee900d43c425fde1beb83cd3ee9e84d9b542e45456dbed07066b2b0f29be480ee23faa5b3a63e8edadb6bad93d18a5d8b8cd897386df1b61affc9f264a4e001e0adb2d2afa2bfcdb93238a10286d60fb1e147fe446736a007972c9311a800587e09dbd5c292f0b9ce056dd08e43630c24df7d0e477bae22366b0b2286f2f4e40fd6fbbc6763076f437a662b888dd007dd5e89fabe63338312a0c7f7ed799952880c9f9e8708925707c1ce2392e1472bca2c4f7de9e8a206e6fc0dd284fc66f56db9a9ac620bd730fa41af0b0083fdc1ff6ede0292c1ddba05a65e2bc1bf2b4d60a996dd3944b5c5a29eac32c02afb04c9b096e7c466164bd87ae34a6b171c9c99085bafcee466974a3a4752e7691448ba4345fa6cc50ecb2ffbbb5e5c86ad25857cc883ec83a10b222944e7734a9a2728f07fc05145d9031d917a81ad3c0ba079a8bb9214d2bd1ab018eae6f19c9e252c07ec7f4d2bbd24b23c72c259cc4add00086ea6044bc53837e4c33e0db8322eecd1c9cc0ab3feca13c74e5bfd5343cfab05d8d7cca4d2726cb14fda91c7238918ee9739c1737739f971cedf88c13a50117c9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086284b7a81c70f5cb1d5947af6378e6a1b7cf2e853b29464e456b10aa6449131b85e483c62adb177ee8f80778576462b194c5e615ad6300432099c1011f9ff184688aad402e60a0d80554bfe8a35bb5dbf6dfa00ed8387ee6165b443f3306891a88d8d79ea123de2b1a9a4ec2ad4a66569d7f9a784dfd699d51d9284cc6308c87d96d4dd622120b211ef9e2ebf978d3c565523d9ee6bc7c575f27c671a0ae6379afa857d7a58dc587c00b67b19c0f8a13335ba90209e5d68671ad8c0bf40da50fdd26785d2bd56e295003ebb1c50e92525ee269cf273049445ce1629ca87533eb147b1b3f3622a3d48ea74a004a9ec08e7cf859d2322dcc5c4e73f9550552934f23508c49f248c471c5322a06e93d1dcc18c9b5a2be49ed0a8c5fc920159584503258abc881cff7335dff8322c67473756a8d10b202e06be10322c4fc0f9bb9719ffe1d64643a3c099c7c51a4436ddffb7c17d3abd280f11d81d3af6cec7b7aaae6009394cefbc311bc14e9374e43eeb6f79450a4dc233b0d9cfec9ccbb1b2de9022cec1d6470ecdaca24bcde28628bc57af08307d4434a417c897695d719c328a9af187810ddcfb9c51bf61a805170291e5b43566831e9df5d7573e322e9ddb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026e4c9a7a4130f88f6505032b7b9361ea9e0ed02f754f98ebf8f67e5da37b3e9e47bf1dbc9c68e5089f110cca5083f0ea4e3e7d4811e48c73c64e7ef4ebb6ec26135d7602adcb924a9e0ddc68f04ac2aa4f11416663defa2f6dcf55934211efae0e1ff75d308320f79bf0634dac0c6a2cccd521ebd522555cba8b4457170c950487c9fdbbe45e15b87cb4fd0041f80ec560c176b92fb71519aa86e25cd48c0be60e3e774f8dcdf6be34e1c889fc7bc1c72338410486797a944e1f2a097b74533c4c02989cc8ccf944acaa6a4c71e766482362203eb1fc8e0767051146434294952d7ee0639c967d965aaf7e4fa060858797ca718f3f0f9595cb4bb60252810d5079f892c6df00581c11429b7f6fb40fbd6164aaa845088a4585e0c554ac87de3ff34c524cb901015b5de2f83c89577c418b539ea9efa83ae263f4c58cb8030f9300104ee7691fce863b9035ab613dba242f247da9f698a46ab22170cbb8ca2d170a0fd03b4ef001b56694a2f7e0a1428c2929f95f8044350a57e3d1c5648c6d051343bb1e8f0da2d9a2d00b8c9ced2ee3f11ce0084561abab8a7e9c3e73a08edce149a7a401bbdaee2e59cdd1329f9775cbb114d013d7243ccc01c160bc088020000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5151c83d8f4a6188a8deb08537c8b28238d9f690ed1b2b78989daa99b6c4c63a9d05aed931534c7f8f1942b0f97a81f313c7dbd0a64f8a66b1c849a08f31704899157d904c519a90e17ca039ea68cd4b0d9a45618928bdf8c9201873f58033d8a074b6839aecb520b77aa17620b8d1d220d7b097331447f2b8dde58a17fd2147a9978c09bd898e515b92605c940b860bee3300b2596e66178af33c2a348fdf896e15a1040420273bd1555275725241fe6c15d76bce91864c714e941b7daa70a09ea4dc5f1f6dc09975c071330eaeadb20037794c6b5d60f3349c7f7b9dd78f7909020082b0342823505aef296b2f9710cc6e51ac8adf4bee21fea73e641711f9eb423e5ca8ddd6c99fe3d0943d0224eee7fdc9a8e045fd2a29745317f04affa5bda98b739464bd1191a555fcd2b769d9df36c4a9f1f626a3a2cecb80cd1b88424a6cd07d2e1fef867f324be6e0af12d834071b2b442cf3951b95337c290ecbadc9b439e4e0160d47697610a236f8218cc65f5ed73e10145c71fb0f2d03f832e8104cac52fe546f2578be10f1a691a8419db55948067868ff06b067543cc22e01abf030b97aa557d740d4347d3df927011979a1afc6ba550f28fbda5e896d326000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e2c658699653200479b4f618fe714edbcbba692852862931476a93efac2d85c2914f939ed7c9f18fa88d41c671018bc8c6b7e573de4fdb3b22e031f7cb56a0586f57ee0fd8d7375e6d85230a4d9be465368bd1fb6e3631ae04bb4f40e5d34cd34b892627a4661ddaaeed678376f7091c540f5a3df673f24e41c0042293feafc521d03771f7b5e27d754887be0b54e09ba744034f8f1c0b86807945ced1731cdc2368f18d2ea21c48eb4b51cb362c33cbccbebb178be12854fc1ff00ed3efbddd0c7ff2c3261c4a8c4f861a7e374d57056e11595ac0b2ec27de7c7e5f4e1c6978ca25327b207a4b9a09be6a7c80a488a40935a867dcf0ab9a8128b6329a9161911bee3dfd9237102cd78cbffd0ea91d6175c95638f0f0a1a1940bbc3699ac57e3d76b7651feed8c1e0b52c725a33dde631c3f6dbbd6da458bcaebba8ce9100714ef397e2a1bd0e9f74f03591745725904b9a6ecb7a15e0a6a1aa9fcf7b678f9f953a6b7f8b044fd6f2a74be1b294100576f88be5a5f819048ba0711894a257edaca975adb7e3beb440617fb2e4b9992fbe1d52aca923455cdcf4276953c039494de76929581f353432f8e8dd61be14532476b720073a2879520be5ef77cdac200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bb130b8d5b91931b8615d64d48b3f9c6e8e29b34326aefb228927e0fec2202f46765cd4cc15dcac9297d1819964d8d68e3b6f9f6dd0448decfe0365b114e72b9cdb56ae4a1815981745462c69472f72e541808c62a0da779880fec81e1606b5b2c86331437830e7de6a6621c792c81f5da0b747833821901fc45740ea828eb9f4064e1719bfa947ec09dabee0272ebe6a8ff2d82e47cfe295b134c483a09b5a6e8e4fc860db9f9be489b9aa0dc48f84321948ff3182164eb4db1bd144792c445de00f9110e7f7e9a7158ae07a92feb692d97b60b23855677d1265e33d65891dcaae3467fcabb86227c0a467a0332c5c7e4ce998ceba9dadb12fd56bdcc3307d0287475b1e6f837e6757d95c88c26692e79b2e629c58c6f71e801eea9edc91bbe0d470c2b26b4d1b51aab93c2aa9c395582742cf5cabb598d9dcff85ab31b7a3bbf3d74ccbfe82f5abcb7770691e39b41cd59d442b96de5ee4dce7438df8d85c61e0cad21c5a0b689dcad422fe7d7a3c8342ce497694bfedf58accebe94d86d4d6b458d1bf8d2095e3d00af497ae5d73cd9792e18c0db0531e8e968c9c5e88921fa4b468e0c24e1090e3e88e55fc9bad851197537dca9b0bd378b8d68a56dcd700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000191ef7ba1020f976793ee4332e194d0423e993dd49f941e04c0fccd65336a905edfd75f1c5874efc6deb673e5ee0fdfae25c32937e4027b9a6f06fb3aa0cb4b0050958efc82ce62864eee4fa1fe105eb3b68942c64d72dc6e583f58f655289d0b202a74097ae3a6bf6ab3aacac28f3878607b90e3fe356ce56d039a56f432af4470dc153dca47f90dc43fa6d28808f432a99d6ca5fb5333711c2eb4595b54d797416b76bf91c257ee84eb956c8b79bf68fb3bfaf1e22e00cb7d3b76d9fefcf60c7d00452883d2986cccc772bb20b5de5cb8e81d6b809c2727a6a1f78981ca0e5f76f93912a88d1ed79d22b359e2d35045a0d7bcf5848ae5f680b05fb6e720074106407f45c89b1045b6161de4db9a8798a431230dfcfa7dbb68f374a7d7d0afe64db48752090b72b3370db48542637fbf1c0769f359bb475b90f168de00594c32adf37aed85d334311b6d27f1a468ff74e0b9dec1c0c16d1438a51706ac45babb068e9493c2cbd73a95922556cd97de45b7c1514ed832c2bbb47709830c563b2950a2e159fa8e8a7ec8f2f31f456149d3e449b8ba5a02a2d3f9c4ad7c431fc21d75a9d6618a4702c522240e106e5c0100504b166496d414cbdae168f768411f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009656e64621ed2eece8d0a22dd2a64401e7ac0bf824ba4053f89a46c8022ceb19f747e8b1e00c4485d668d099ad55d6f50cbd98f7c52c042b55c5216c4b41499d5bad64d32946cea9769d0b749614b0495afa4e22f8aebc3e5c11d059f96e17626411ab41c3a040e7c850ea7cbe5efb2651f6ec59080bb31a4b6ada7c21a976840de504676914a0e4ea74644405ccaeefeb474381810219e47b7dce94071138cdd5b006e7cccddd606f60ac38daf1c0c57d0d0c0a669312e09dbbbfb74f57b456d41d837f8889a7091726c4c3f633aa9fb1fa36ca8314213c22a34234bc8af9087be52352cafdc326cd1d755b75cf6a828893f114c919d5cf53ee85ad9e5a512e22d5a94aa13342b9811e5b5cafde72f2baed19274927fc61197a521ef91f761029b260b2ac98c20dfc06fc5ca0eb3e42e6e244aa8d8d53f2db64f867e9525eb1117d4d9dc0f9835b54fcd23b3457c975f579d5355c2070996942fd14336de14ec0731e0b5e456db32b2e0d658d7a01a76534cd625b68cb410623a57b7826d1801af0cda91a7588a41bc891e8577f25c9c61238c5535f2e04ac2d51769bc20d1427fc9d38163d2d1be07ef8e0cb8c455d700f17e6e6fbf51f1faf1acdd140ace6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086f6b23ffaf3499fa35cddd1f2ccc3dd6fa6896a4657b5d440a99aa4a21fad66244a8e5573f880a541176b0ca1c02b460e55923398a643b22d8faa4a887385f9a8fe59cef6b0cc6b499bfea937c0b9cf88fbdf15d33c5afa793ea9165dfcdd140daa7b8333f2a886d4233da25e0fce0d2c4f6c627e962b9f99e0652679d5a379e6951c19f54caeae5737063bb94cac03d5bb5de2502118457c9a9602c694c1f08fda13c3f4030b6aaa7be1575f703c8afd981d47fcccb6db83f22edd2329cd318aa55c990d6db94fc43ec00e8aa8f245cb047b6dd2e05e0dbb521eb99a84fa5fe6394b30e8a5b6aea31b3a7f46f6ddd7795217d463d5fa75e07b4a94cccaddf81caaa13840709756e4043764d293bf1d4ed5612993495b16177e139609c6798c5962f068d6b155410b6e07bf9af10ed64a0b5ae3a082a5866a592c784a0cda1bd64a3df0333517692abab53c775835db20e10b1ceb709d3b9a0bd6a5b52a5fe1450d7b4521c29aebabf1e919d7084d3e42bcbf46632e3ba7f26ae34082c647c5abbcafa387009224feb37e5164c5b149796e9954a7fbbb156b6f2ccd7ec9b82606623a9433395491138be78b1cb572e455d769d7ba2cea3f57e8bafaf3afff4d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ba79ff3e66c4c428dd0f76f9e3abdaafd2df77b0701b174046b0f3632ec2b54ca969b7de88b7adb6cbf7747adaa58e2772425ff4c36da72db570973141211ec857a49c0024bc8bdab8a6f8dbd7e37ad2841bb2b7b617b59ee67d2ad497f514aaf8bbf6651f119c501320b9a64b604a3b19875c1cf4a478fd0decd4db00a08e675256b929e67cc35539bfc61d528dbee31c023adf809617178dd653487d66caadcefd57c881ce5aaab610436120a876ffee58cb2e36b28606a07537b9748d7de7e51e484d8260e4d380b8d7363e92f3551073d84f54517d564a293b18432920561b678f8a7e2485bd281d806cfcf48d7e7cd0821ac8bb8602ac71d1019f4facb5e72d51a14ceefd338e32f422104c7262c3b6ddd3f59cd6ceb502342c830489bb8297b042de525d18b6599076cbdd5958c66460553e9bc071f93aaea9776d011bfa3b8ab689a66089a642f4e915f7cc4e0dc8808ab95ab84eacf7e4a6d849b60d09e8cb269597cd0416fd7092e98f1c60e4ea34a80a5d05e12921022daa24dda8bfa5e3041033e76ea87c199c482452e25729588c5236988448957d4e10aef3d229ffeece2b4d3e17a794280174dfd56a93cb62f6d8ec2ed40fc54b20ebd9fd60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a527580e2f09b1147525ac142d6ba5cf3f71c2000fc0c7c4f8b07e77d9c92bc6408cf14d0f4b8dd1608d245d7f227f5bac1b97004108dfd726ee2fe8d04e2746823426eaffeebb935e3baba92786f0bb797c53c905b3c943f01f5737c33bf8a9853cfcf9b03f9305d6878e72632d306f8d10006ef3335b677ac61fbd5c3785c677fafad617ab7d9d354d965f5484d909f26eac8ede3cd4f4f379e4dd8006088a78a9da5409e86fd64c16f09265b37652aada943c852927d889dc12a61adfd8508f5e94f177dbda854ecc89d9a3edfe28ee6299ffa92028c2fb7618d76d1829e07e9d2b9a5bedfdd2ec95ea4d3e93449facd9e00d4a987e762e3bb229cde8db0a31ef27af129d7ed23bb3835f4189c133e076e63ad505f28c33688b1ee1b0c397f3b7511470ace393692c42766de1555b5febcc6a6494fc8ca04254668765193b366a95b0632b0811c9c730c54540933a71354d1485b4386650c830526fa7b9b418a5d20aa5b6d3a334108078bae4220946750bf1ae2425242b04e7e94a938d1c9d9526bea56091f1edb0711b488ea47cc12edc5a6847421d73bd7d40e9518b3a703b738866b0e6f8374cf8f3be5e74d316f5fe3585cfcf67527a57ae754934d8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090ab0f582edefcff73a2adf75a571f83bcaa6e5d8ff2dd6aabf7f7365915250675e66cbb66ed1b86f915b755f4bbac608677408f5068551c489aa9ea7013f9c89d5a662d6e8c0ead66f8d40ea26f0450bfcd081ade61b2bb0e6ade837e3b287ac41bc2670fcf76328e07791d9c034e4cca53164acb499f20a6941c3f3056917b86e121017e3adc3df5e44e4971f2daed7985bb8cdde0a5f0fbd38a823de5255b6c6ac81dd35f4eee93f1d1f0441477024787abffe0b25e677d794936f3878da4311e1761a27a6b375b8a0330c52337ee97b028828e453a1b62cdb3e7732b05799b190bdc5169f4cd9cd7cb55949fe753b9762020bafaa73c7b48d1942748998defe2fd438d0c688bd91bb5885e73d40bb721afa8d6b4e5ef47884ecb746997261cbc18af5a0f0edc1f55f5910238be8ad1ca1eae8184123a4d694badf026d649382ec57d770888635e3c5e0c7b56fd9b228a1d5e6f6889f18f6f46da562392ff238faa09e20a0486c994159af995ff374c19746eed1b2190697f45cbb43ed4e798daa1a3aad9cd5095338474c6b6b1d3d4df439cee57b34c1ddb0a24d5021f18a68f9cc2ec10f87a23a613da7adae059ba4ad61b6d75b02efd7663575288728900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c9d2ae3535209d6a9f038ff6bea3a065d04a92b31abeb0a4073bc7917d145e5ad79eb0c1670d0e2f4c4526313d2397efe80e25871d89786f0099b15d3238eea3bc5ca38cf7f972c50cc5cf1202b222f58e9a27036afbc24d07c6ea2cc7de2a407beeef87a849950cdfdff1e90de63a1a2e3c0a616904034622a49b4864eeb28c2077e47d95d7355a368f94fd5be59332bf0dd97107f9ddf79f68281b8a172f54ea65fb25aea76a9e18257fac909a0aa0318eb995269dee12740aa212649e09b34aed4f98b39da63a66e4235577c5f24ba4b2881e5c3fef1ded8663c5c1433ed96c53d290e61539dc30750ab4d614fc71bcb4ad51551babc918c651f80ca3f1efbbdbbfea40f98c856aa71437ca8992e14720098946b90ffa5e7ff33b17d07843fbd89749622805b00a99ef08ceb0d9b41386e7aed8f1c80f46e78b35b228d0271eed014474c872cdbcf11af9cda01da85b9225c17419ca64f718b91661131a88c93e90834d44092c84a69d254bb4a67ad3fc1fd77aa7d8b4e1638ec368d772f28e08190ef40c262556c28f1d28c8f7f4e0bd03d1ff8629fbe82543d7649889165296b9d39bb1cf443fbbe7bd987727f9d4f06c70e399da52db62a2c481876e300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002774fded6eccef380e887c646979d22cd321ca182735b2ee7203445b469cca90b1f8bfd10360e2a075f3c732071a5b092b73afa3a1314e62426c949967e882abe99381efcc17df2d48f317518fec1bf50ce550b87ad0b726e66fb832fce80414c15e388b7b99136bbf08369b27058e28c1f039466ac395596a73de62784a707c20fc171255330e3dde7cbe72de5f7e6ce9526e97176bf12d0c9be88a094c927d547561b35844a5ac7a3824daa94adac67ec43d5892735f494227b409e640ce788013a3ecf39f5aa567f966d7bee88480e45ae6121e082acce829d50079b26a1ca8f27a4a8c333d78ba9ae4f368124874f3baa8c2b33814a22217e26497c3522b48211fff6287bb44e20ab13a52579027177ea97cfcbcf884f91396e4a669f172e1ffc994b73653dd1594eec5ff2f9c52ad322a7702ee51926ffac40daad064eb9fe4ac142307e5ca591060f497612857a7e04c4d7a912c8ff18975842f295d797a94b557249b4a3bc4a062a89f2ecca489861a83c6e1dab6ad0ed9a747a2c20b71d574facf0de602c9e33fe41751018b17bd6aea83993dd6b9a99156a15f52acc8bd10cb3a5e69c64ae1be3db1de66f53e7da17842bb68211e7b005981933ff800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d18f77959ae62f688b467a042c2cee31402d7ab087967e7250215da2c43f78551d58308662e5c5c2a5e9fb163389a228bb04066c4161cefff77ebf14992ab40e588f56011f23bf7818de9f3030621131db8a1a687ae05ff48dbfee8cf37b97708695651ca3e6e5b1d770bd4c2327e8591fda51807d4980d3cb4f1da804073650e338014c40f6f0173c38af6cd84160367d1edc33696cd91a613ade5c93229916b56ccd61e629db3fb918c1e350931493f0d707d543d3d5be12855c7f5cc67208e2be4fb0de5985013a2eb28808ed4b9165cb036ef468530f6760cb887eff1ac3233c026bb9614220bf71de4e5a3ff492aa7b0a903d7aa33e856ce7d8e54700e440fda0e8e3df5664b92f3776752e4ae398a24f70c2ad31b36f3d2118a76ed2ac93d730ecf3460fdfe2070ac8b542fab9303a7661bff576791d070a5e5c4c6e7733a7dbb0849a8868274e2c2803f3a382359570f5c64007f9e3f69480fd3a80ac62f3083242d9687f85e586ec9db8d2359ddc38b259e190ffc7ccacb94a3e2185625ea3215d77161e12cf6aca720d716cd9745bfcc3556b41d916bcc2560fb8a7e3ea8b76e1276dd17d71fbcba868176329f5eb0038300f4f6952d318d6365ea00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e8b8ceea43773feeda1357eb1f1a0292b99cc955f7528de5276fa1f7ffded832f7622c01555c393e9b3d92d40f83b4a28af03761aa20a1d43939152c4d98b8d9ddc30c0f89a49532d7b04b5c4edeabbecdf6f0edde96c3a195f2493a01306b277bae174b4ca53251ac65019f1e71f7cad7246381afb2bc1e7ff779b38c1dbc2d7edb2fcacbded80c6104836aab323ba4113ba84d426719a21b2364c5f90ac8ad571c0c5d66c8ed1e7c190a1934383eaa3dd908a42f1d17c848c45f9c8fe4ac40e43a58cbaa6194ad3996e96184cf23aaf988529132b57bac3fd0e478b2d61a53cad7926dc17aaf3e9e8df4a98fe6688dcbf7aa223efacf5fe72cc18a556cdb42694e52bbd6cd29adf437d19a396b058ec8d0236deaecee0f75cf4d4f87f6ad711e64b7936d443b821962859b53f25e86ea31a04666143c52fc38ebb285a0623c47fcc3def1e5622a9bfdec8625695680b73253df7e5f37123f759a21f59ecdcecd24aa4900bd63483564314a1be4e06cdbadf41250e0cf3a432535ab5d2d90bf99e7ba1d623e240f3c83c4914d3adc6a5d376dfb9913c13d253905c03dceb95de49211a22f287fac7380b8ea3ee427d058216b057b2aec49e6f0bece12c1cb200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008771c0951a66b323987c28e3abc754870ee2987c7b31c91e24811e6921ac9cf9c627a9e2f1f5dc16c1ac929e7636d32cf5448b17b1a20ad5f085c669d8e5aefbfcb6f89863f264a10c20398e691a5b661cb89843b1879a93e6dd1c61517485b7b8d2bbe0c1807e6d16c9fbb436d22f4451057a58f1ca971abf22ed6882ab1471d13ceb422eb491eafd72724a11aa6e84c41bc10ecfa590451edf2a48f12b306beebf24df511b927b90df402d9d34aec1a4e282d54887b331c387177f2db19ec70cde26b479223dc20fc16fffba685294805757edf3eec43f2d94b7112520939e77cd4a431d428a8368388894f2d1116c694087108c99d063d56365ea615a0c0a9b01027f107b670bc872dcab1eaec9b3bbcdbbc8d305acfb68cb1ec5b5a4f107fedd9c15f46880eee12a400dcb06ecd2b77ef71a411268bb498962218c6e40fd70316d3f08a9458f64e63a8fdcc29881267d7d88757ef54cb7b63fc90e368d2af8354fad1d9109fa87b0adc015f3987077b1539ae39e996f2da15db306f6e5debf3372a8262884268aff9e50eb8a1e3af0686a5305daa8290b784496cc4b72fa933ad11631cc7265c5995307561c13a2c193efaf9f4b2a61b496495acf100f7d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000190a2fa87caaabdb3181f0ece1b7246c0bfca6e8665eefdb2180a13f861d528711af6440ed1411f06ae7d42bc7045b527f1a4b3992e4dae4658df37590e181ba1cf461288b55b4bd347f7384250c11186aa6910ed79c369a0f253c92e56c6eb59b4b6de18bbc5a4ba850096aa4870d9e1614f49148d18aa875177d4944d39b29a963ea50498cc19cde1684eea618b1a4b3242c788f4095c5dea91317d81b475c12c2be79ffafb06475986062ca7e9f51c4a4869d1e89023d4bfe6a09602455adfc559bfa74ef866564388e137b69a0ffee158cb5d796348714ab21ba70805836b47f39d04481f1a068819f5ad8af4deb79183d6d4448da6ee08609b69e4e3e223613a095782011742eb22383aac4f7d7267878e8f20d3a1b01f8f7d42ff11c488029e50508fe0dc1b5588653d87353cf552f278c86d8542a525f6a6b498cd8c031b79091914357c2fdef3507f17bed1f124e0c1350b965d8ca83b3f479d5f3122a02c9af9c33c1df0d17ff89ad228ee46013b1971201956e7e25c7b85ff3c7b3bb1e9201b9754ddab11a99fffe486aea22382748f9a7f224d479c3de032193e44c5527e972e00e98707b2f89ccb26cf23b2b48f38860904a9fdb2794ab5cb80400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001adb898c2ffae82f70dbd319afb23ebefb8a68269702cd50ba57d295cfa727e9c1908dc53b69a658d79e269a97a4aa67e220d4b76636a2d5ceed91832aff61eb72ee080f4a1d923d469d863d53e8f704cbcc85135a6143980db0ce562586a84162087af1c0631a035b205d548b693648c1790b1d0a2825f2052e57b79c90fa5761e811e84525b573ab3f286f3311ed1b8923eba2e9e079f31e1273acbfb9f7875d2f9f353d7b2a5319c1bb55310d2524bf61c8dfe0951b43291e56998663090db1fb487c6ed8f03663b6ab03a667fc9ed1d132b55c3d4e5b6da1ce6e2078a91d815b346fb32607f3b75728ec541b6f4db3461e71471c489684ba3f7b95d88909a61dd4846ba4af85d2c6e8a6e4d6c8acc1e0724ad4234e0fd0d36328d31d4518f91d05f97a095eb5d3ad2e066606eaad113910b697140332d153391b6124502ceda6bb26435a6ffa9e784749514045fd264fddc47ad939d323dd97521b2de07abdf57cd1e395d71888fbedd85df2b7215f6a681dfd30ba5fd143528a19de38d918af3ffcfe90ae4fdf4167cf95f7df80ad2eebf5193a53e1e47842c77d63cade019a36d76160b504191bd8ce64ea7b50698d493d1c20fc52dd21d22abba7aa4d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c68af245cf9d0c692e805f9b6898a624c69a90fb225c0b989ef847b53c7bb502c54b880dcca3fa5894c064b96cc93c7e81350eca89ac82cdac09a539fe1da2b3b105e419e51dbd63a3cc5749841a8817411800bc8ade436e41d3fb76ad3138b5012dec0d5508aabd965331ad5c662d8e92fb6ee321e4acb1985214511586ffa4fd0d04151673c610b00a0e21acac8094405607b25d7192dc0766f800e84b8ec6d83f82a4c7ecf63c14235b8eaa4a77085fc948f100d79392c94b191065ba17b111c05c2799dd356b518f15b0982d55137461325288099a8e634269131f8396a4224a0ff560060c171414c2b7a7420ff93159ddc62cd7deb6f06e99ab869c1b06cf718e2cdf38b337a336f68f8d1527598f3a0d769d3262ddac57b695d03f2eefd8dd99ae59427024ff4e18e0f2182e8dafb92f0ebce7da6ba58baa61e00e45bc5d50ec2b8568b14624fd9add712a735755398b3cabccc1172a4e5b9fb7506f5bcbff4a1a8b5c2932d97ebbe528070fab4c6844a11bc3a44876ee45f941833b2072ce9aa51106dc77bd4845c48862308d9b80ec60eccb60a125ea86284e92ca0ef6ee805cf3e516ce7686a6f89eb3f67549338a8f85fc1adc85b6fb0ab9d9ea50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000922745fbaf22ffa6e3361f412a05d3c989c9aff6f6b801cf843fd409cd7973a0349fe04ea579daeab1cb4926a0fad0bb64d464b541b2637fcdbbdecf032df1c59d1ed7a8c75b25955fe1157e4a859e7cd70189b233ca7ec6542aa391892e7cb576cf9397c0b33b44ef1619e20616987877ddd560c3e85b8d6088f16fd1e07da511703d8e590a43100247f7070f44b30ca41d13ac0ab69367e01db9468540203509b7da9740e5717c12dbd73886ae0b7745f94031c46dbd346757863eaf22172125c5b82abe8d9a5ae91fe1b9d650ecc656dae090be40524e0c115b62f29513afe23a7e18a9c60680ecdb69c67b27d93e15b5ad0ffc11d2a08b72c60e35a9b0c17eff9a257900f70febd70ac957e6f074a2e214b753bc1b10390f39a3935a1574b15422dc8b76a6efdf16f940c53502d4ac26707503080abd86528a0f4bacfef509c7e818a8923a38970c79c4f9eea25605eb2f2247b4a645530d845b8795b7cbadfe86398f457de7d43013e2197d9468483136e738ea8e9e23ea7995693672ab6d132dd311935261e7cd5f6ef37fdf95058b1ef7d768ca9761131ef609992c392b3d77873c9e1465ae2db2aef0d7efe81f8c878fff275d4dd6eed3a650a34b3c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000969b875d573f0d747503d7876e709be8ffcab0c63b297ddbe71d1a6634b2fa0615ae3301de5a78f5506e852de3760cbf25266c857d1ded594a9b852e7fb0aee6cce491b702afe4eb68903350870c0a5b36e7307c44d99bfb8478b5305621efe15b51d27c865fd2b6d4a951a0acb19f489c891212c61d84d5c3ddaaa2b1ff27230413158fb7edf57abffd867562d6a7e9f42748a41ee77cd22940c249474e6b4f5d13568383d488f3e2f36ace693274205bd84e9cd6f654a7abc5ba1e0fa8cc4aea0f77b24137571c42963ef7f13bcf7fb6d5c4c5d429745a6d173f19bec6878f33526ab679e8a3c9364705d7864b81dd7da0b890cac5081aa07b9208e300112d687858cdb45b6e6ae69600be785d4e3581c8e4eec1dd1e460bbd86ab50c7e271b38ed357fe9091beda8a09c96c773dcb974f8c28acdc795fb45d9b02ee688aa701afef631756edf67f8d371a2f94581f51816e71569db133030f5f670be9409d9840185ea5b1b06b63c44cf867fb9ef84cf12c544a5fc01761c436861af8174d6a69ab021026f70cfab37d7aff051f2f172b5a36e71a1b06bc207e5245c95250aac90ffe59f4cf19641975127373f21a5f482d23842773819ad984ddff82bca50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a27059f022bd8b878b5539425031be6941f7612aadf9aa3698639de70d4a5cb863f1dcd0825a305366a14736a25c54055aa5e162e9eabd7131d791bbf793f6eaed52fef0647cbf051461e36255fc95846004b84aa89a6a7406ab37c23da0672797f71a1c4101d42fad7f858b77fe5886b63f02aaa1da05984650128bb1f074a954c2da384d8e7160690c2669fc384c97b78134edc7c59f72ded82225855fcd078080fe1fa5c5a323df3da5ee6578ddf6f39e630f99cf76ba54a48eedbf1a35dc79ae0e48a4ee8db31547a563d2d28faa7ff38f0fa9170315dd24549c1a280c39422ac52aa435b9cea074e2c80f8f791a2f0a18d94ae568f17eb5650366e118490ab4cda0c32c1dc7571752218662ad1f4673448ee5bec0a7e57dbee405f5efd98c8252e68f093f8892b71ac4804d674e1dc388ccb3749eb2f7caf3808658247a94e7309aa5dd1940621217c87aec856e98e302350ab1c5ceec0cce0ee38b9c83027e1052aedacf0b3477a7f3d14dcf7f390157d32cfb4b04e3b51594a4bed3d8d1ec19086ce8ffc0027caafecab393b32ee2703e1ccb913b2dabc3c9fa8c779772cf68aa582a0b017a8f900df4c3ca6566cde32ddd59c483ca4249aaadb9dd0e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2237fdb9e0a977f810e438fb6d49cc4d914119d015f11b034f7dcbd83d4acb0724ec04807571e54b4084909308917bcb71a2c2e78989509ba0be133e17b368fab27adf3371cc60aecd01ccdebedc2e329c279084c2118269558b4bb3dd7cfa4c2b9de5399b66c18bc17fddfb0c75e184e4f48da6d307775d2fc500a86b9dd3ee2cda676823aec9169b3833fef530e2e659db0910c99805845ed327404f3a6f9efe5b41da22ef238edb13b04f75e763768836f95c34aeb0d1b68aa9bcb1aac0e1f97f30e18d0509954ce04e4a1ed6dd25e2fd942bb266635da6d087083256d74b3b2edbb512adbfb431e4611cfe60bf6229718eb20dc4af7c8d4227386925444a580cf6229d3aeb220db685d548eff935774e7d9795a1ac5c7a0a04ae3fb6d02de6927cde9f367f9c4476418fb6b0bf2f9feeb8e7311cd3b2307ea8eed7d4cf82babf24ecdee474ffa986b4193fb9f4ca4d41196561ce8790c3c3751666d3cbd39733d789c5d16e68b5e44075631304b3d345502eca113067e0ae2b1c2c7532b37cd39c699aa721eb82c61e2573e11408cfbc69473384f6738f2a212fb39e1845342d1e0b237d7f39e983dc22683beeac9b58961ad47e0be572fae71971a02d100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002877010ea1272f8cda7a5e56a09fce2b25d45f626160916df901ec8029991998ef7103d94560520dca3ba3d744ba270e192126b8df5662c6111e1ffa5125185613f5d1be0d0dd4ca764e3719d714e6aeb0c848c6ece636b90eafa1a8da3eb18847083bbe81f0a6c83e98d1f588ff1916d892e0a37fcaaf01fd5a43b9d742482bd549438b845d7089526f1ba11ef6a58e6ddc6ac8c061de201d02adba6a4560c2c49c07918a46ead489a19e344977c31ed81a05849fcb71164a469aee7d9db731a0ea09c85eb3dc405180d1614d126d6395dcdbb257efe9bdbd3a1a264d3e1089f9415d027843bf8be5f03d0621e210fb0b8190048b26d1f5e53e4f77a59befb65a5767b4f9fb017c8b480eab987a06f0da35d21d2e14da71699bf44dfff8a2e6cde065eaf9ce16a6d7195986dcee68d507cb73d3be3743a28719a5a19ae48d33acac5e812f1a31ffbd394708d89af95ca9d728356266f4e00aeb1ac618f2d628b17c7418bddffd51eb3a7cfe482ff93b1d8df302ef2d3ff745a9a3a50e27077b8c072d1dcfd7bf335b7946cfff2f8e5ff91d7c4bef0a9214bd9ba6703415d572c163fec0866791b3c318f148b2a065d09fa7aaf9ebffa71bf6d5ee5d7f65e8360000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000079b7a04e11af35088f59c49b076cf01b88197e01c059fa68eadd435e05413659630a02d9745840ecddcecdcc6362bbc0d5dd6753b9d92a30e8e86f3b8d876d13ba726f460dc0dbe229f8058f6a5a1551b20fe96297ca55e157b1b0477f4cd1cf864656e7ac42fabaa4de232f0db740f3bc1f5eafbd7f0d9222903f6e29691e638886555e5f26d6b0468cd0417481b1cd193a837e8725d247c153bb867174851fdf1b9875127cac244bd0767e491ffd8bda53aae59200a9a83c02911031d66e78098e2504e99d9a41f108bd15a18a68da65de356db387209084703fcb2424ccb8790e9e91e66450ea7753a222168a879a6fd73539140e212329e80772286cc885dc305f887e26e8b4540504cc8bc484217a9fb8a1d633fabc603ddab6aff5774b982658154cc8c10d65b6182612f0bc1a370a0f3ef5a2bfd17f7800b321765c76d45917a32673f4da1e566405e731636dcecfb923a4e0ca637542b30a339ed571357663e060db6167f86fd1e657551a2b5378cb00ba1999b1ad5887a75d653e7e28b953ec446f38371900611f35676b143c993ef23a50cb930e2a20da2e00c162de9aa62c945026913e21976882d455cb041d602a28bda49ff853d94c935294c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098c2a6ba2d5f566f562ca41183400a58a7a11d53beea401f13621d72a4f8d5faf841a57419d4fc6323e922b29941f0bd360448e5b20f14c9d79fc80f9158e624875b4b2d45b1486cde55d63e8dbcec769f9f546ad34b2aa5f65e1af98ee7d281695a325410fcc37e20775725f547782cf57d4edf1efe40bc3202a80442c67362a37f75f78bbe96799a1641fc9c06e80b5c645aaa62d191946185a875b93f9e084a1bc8ad1d6b68005dbe04adb6b49db40cc829a9fa2b28569bc2a64134045ba0ad0187dc8dd0a23e2859cf14d398abd5719e0f065121a552a7c2b097c5c2999f06bae2c6845f8529befa9aae35fea32f64ac03f8ed95db4a19e8bee0b8764eccaa6a69aa0aa6d81bd470da57a64d4684ac3d315829fd8c53114b8c644a6967c409d805ea808fa97a7055175f84c9bd69301f50d518994fb849f50b9869b97a644401d6e081b3a53e7686ee490d24f532d6e1983c10b8dbffd0cabd177ea1e420ff4b632026a7037519a59ba2373fd51608742d9d7389c522a53801f993d6205ef20530edb88388ce2e34e5c35d2c9c6f2ea09da3da56aaa803af421cb7bc0b33175e8076ae98ea9374cd70e38056d77045b0f1babf1d3312859c9314080da78500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008dc45cf572378d091b20b408ea48bea71278c56594d15f4a0771657d3faf20aa02f88d8095bdce4b410a42f54cea7cf5b56772292d188351dfd44f0e6bc22774561d8f784067867bfb13e1327d7f15e9f2647495b040983e1dcaa030fd2f3db570fbd0e8245a09eabc7f37f75f8785b9c09b72e3a4336afc480658bc207f09c9c41e91332518a2e0b767776ff8ab16639e8d96a9031e46bb0bdd6c5a88e884521c36bca53ca6a5b29c65a26ff0f17342b519935870f22f8ba4c74d048edd0c56f711a0fbdbe44cec6f4943fd3ac5c58d164685b7130315e156db49bcb29a9ad3a0315163e0885a2b761cc6e493bc5d280b0f6d6d973e589a95d81045b6ab9260fa846d11fc30a922d434a60c97b86b6cbc0f901e339bf837a3b70f8578a8a49fb9093a37e698931ca9e82edc83ef55c7bff1ca9a55e4f213c882222d86075adeb9bf894a679fa3c38206a700c9e6264d38bf96f2c5cd1f769bf0925b3401f682d02d7b06d309f38e527c722f72af75d60acb90f925067d4b2ffe7fedb2750d7225db235b158d7c1562c2fb3ba017236e16970ba5f9713c8eea5c934ffeb0aa503d37a9cb7a0fa48d20805b71e5ddc1cb7190e5a4a91d5d6a1c420909bf1fe5b400000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b4840205401dc34131cb05e30e2be56646df7ab642214fce42410d5df670282d29aa317a0100cb2c909e9eacc81bf687c34c5a9a94c8b2284218c6933ecd1b08c20f320fba798a1fb87c95940fbb4d575d638840a9eb7b0bffa09b2e0911959b7ae0e06dcd967fcecd426827aa6fbe7edd9372c754d0922930b1862ae44b3cf76826b0da16d8d2c3de69402ce4176099f98e600a092584ca41b1631e376df89d56fcb06f371e0355e1343efeafc29209af8f49e04c99d9648e4d904e0c0d9c26c3d432377488cbd8eb8a7f6dfc4b2a0ff049c32af39a3c8b8b6d53194b5b6b34a52d72e915c7c9fbcfbcbdef3018cc291c90577a1c915df9207a263ac7c82014327aa2c8f84a5558746113094a30d2d29d06033006400ca9b049db889a8a6c0da380c115163789f9e1cadc6f5d0ff7bc3dc123a7c5971fb3c25752ce610f7b93a84b217c28e258904d6fc3c3a99ab540f27efe27e5e88c1a349c509939590dec7cde605414de75c13ff7a42d505ce78aee72904e0b101a21938cb0a480ae0c5851af5235f866c0617a49da628dad143f5a16d247e218b6a711adcc581d618232696c016d8cd2428d74713945ccf169e6cb36f5dcf41284f0863d3f7de3c32bb46852802d6c8009c99421ad7260585128d840a76808dc25066bfbce2296049a1b77819115ebede3815d6265c8fdbecd0babc89af6246aa77db3e50a542da53036ea1281f1eea1e27ace766bdaa0479ff036b8394a9b55b5205d73eb79979634f7833810213ba1a3dc9c76de1bffe0ef2c3031cb58e2f8d0d7ed185b5130e3a1a33424e03ac03ef293699c2699eaca92766c0e1c235befa0019378ad48228b4bde2000504f7ec1574a3597c74ba65e3d1239c08fc676360f19b68a05d2078c8cffb4aab0fc9db702628377615c6b0349013c0651b6b9ead511b48525d7b97f5030ea59a0821db6c68e204efebe5ad8bf2862f4b89a58f57aced687d0ee386efd3f646ed2481a6433cc5b8725e047d2223b3d0edd479a23df285df37efac5f61275c767702306ebc314b132e9121807f680c04d99ede89c6cadd5482969eec694e01624b0f3d28a2835bf4fc9e047a187c8726fdb4e1b766304f54d18d282afb3c73519a066eb9b806bff9c224c64563e1fca7df1ad914ce1662842d9a3d994c2f4b5f57236cbad356df384b1d09fabd1f25a7ee61675b66a6005816fca3924b8feb5d162aceaf533c8ee5d3cad9c8cd2069b09102b797c4e9622a1d89bb03341605d4bc138b33ff9931412bea5d813e018c6581ccd66b9ce940eb220ceb1eea9edf15d51fc88ab8a7ed5bb0742183ad3c250ccc1bea014b326ac147500f09feee4b4b871fec18fc7e834492d0554d3fba9ec066650369ac274550cbd61e507b6da98ba912aecc1eeb6c593f7a498a2df87a4c9ae2cc35bff9140a10ea37c103b0117ea80a8c0a56ecc58644be2be18088a0491228a953a0dd8402e1840323c5ae74260818a8ec1d37fef46ef91e32423d067000c016f7995822ff3af403ddfef3ec91b9009677575b552b5d571bbd2ebc8953a392f73f0d2a185ffaadaadd1e40be50ef1f7c07c7f3f7c52c741d2a737e7d4177a6f7eab264b57d4b3ce45fc5236e7b4503ad7f45438b82a905b0f1f01a77098576bddf15fbf2a705e82c498a5121693c14adff3d176051bf11dbf8ecce59a16987f916f2b49d3413e30614a4545e335f10b0a277669cf7865fb78e170ff5c575a4627e20e172a65fdec5ba43566df9391faeb2ade180eaabaa07ecf076fecd68ab2be6f3da54aa13628b6e636acb87d22dd50383b27c53c0e621c2903b5cc842b4effaa48b61cfa8e2e10c913c5b437d032b1d5c58f5591a5e6abfa1a904d96323d37eff4cbc5d67c4d1ce4d97e3a11e1946c065f89f8c253341c8669447b01d4df3bd0f825e945bc186cbb9b64c82061d1bbb6f22ba4c4a5052e66f007593e4be13800b61a8825b528f4908849026f0046bf4ccb4d0a2d071597f56cee83e58f9c8ac56582d73e5d2270a52125638e404602ad6dd6884c37c40183c96cb211a16fbfc3707e6c5c37f5b53f13e9e745b1c022d867ce1d67baa85b6a243a103a39d1321878031e944a25790196bf70f400231361fcf907849e25e9c6028e3fef36f9612963127919a905a8c8b04cc402b253723ce4cf7387de32c4326930d386a3b67d0529d404720bcaf514f6d3a17e52ec0dafd9f9e68e311acc9de4a699752af7d6c645b8f4a86cb10210f3d8e4c0801f9e647babdeac500396fa7357ce13c02c473e4f62f18fc57c2e846026cf1f90583c97a2d107ab2f28f85d37c0aa4f0255a3e4c3112c8dea2e38c93e3606a0209537631eee2787beacc76073bfce555898bd5075a5761d9d1a1dc27b7226c752e9b92d00c56837d4e464199ec0a0b81b71e7c7e3f5cb550f6f4b1217108c21a08718a511a4697e22a6125418a1c5e305be6cffd7eed76bc076f6895efc6947a02396f67ca82c61ad177a7e4b86938e95644f4a3ba81a5164663c7a7d04cbef215a3ba42d4113f10f7b38a8eff4fe931e9f8eebb8cec34cce56fec018061fa7610014cceb625711a42d36464ca46266631bccea1f88a0a418113d20d16fe9c811eebfea7c5e24e94640b0c3359057c8408744a8c58cb2057bdc02900c9d4b15500c87825d3a7a022422e2b7316948181c3bf8a2db82f1408b316935e1daf41ca2a0d6e67725b9988462fdc32a2f103c8fb367dd2f1973b28ff198828a0acd10223425cda3b4bffaee93b9ceaf91cbbf86a3952bc7d298d72c78664efea1c5c2d22f6c5ce353e55f4a95aa3ae20b591ca1b70c4ca7d85ffc39917fdb9b898c16a0c803723046530dcb3d911141666fbdc3d1d2e9b5c3df5280ecbbacdf47ea2184023e66ef9cca6eaf4f982dd01dbb0b4c0546930442e6bc9143c878854d857f0e619ae67194101eb582daf2cb420ed5d5242719a3bcfdba9dfb42c85a9c020f77522143113bf74f4374205603d5df01365edc465a8a1083763b132f6a56017da5d07a7405197e0e4999d014e9b36afabfbcc4a21f5880bcc4249fa3f4f742313881377d8556cde42762aa6c75d6335785eccb87ed19645a83ecfb003b163edef650d98a73d15f64da0dc6b0b01cba3bde0a191ba3bc282c8ea09a1ac5938c6023c046c8256d02d0efac33e4baed96058a302bda2a65ca50d82abbd14e0e6da959d081d48671a6c125844a6530ed33522cb3309ab55ae45af2eac67cc028a3b1acb03c435ac9bb64bb6f799b6c6e55296e922b202e1e1dd5f4b6d4ddec9fff58bb710ba9bf4cfbc3032aa70dcf9a80ed60af35af257388def9ce6a435d22a95e9f202c8f4e4414cccc078f0a3ec82a5cf09703afeee85d5d9b2e175913abebde2430df7480fc05c87032a5316e86186e129c778403342df92586dfca0a5b46225cd1d7045f571f1a6906513ac12834d8197496e3315f9b902d20a020839330ba04b162ff8af482c3b04f1babd67fda2e9ecd3f6a66d5ab8465a3d85753bb300c28a1722e3764d64e8158cc41ef1751b1295dba13c1307bd1f8e00052b9645ebbbdb181c6f767e0690c48cdbce6bab6e8fe5b1d205dda9849f402a962e1ae2c98755120b13a7d0cfab0c59ec8a94b8ab7ac0415bca83885373ed724f1f369753823d148c4a5a653201fce5e0a162111000ae82c5add9e76827253bce9dc04c9f220b15add3e1bff852b6052db2098f2a4bd9ff05c3bdb1668e4dc51096ec8119c03910f80276fafab76ba9ec32a651b13984d1ef698055e64ef3fbb9fa947c537f531f5d44b3a6531686601848d6474eff8312304e3aa41f3df8cf96047ae1b95f05181dc65b99e38063ac7bceef1c6e7c18402c0d6d1323bea96012bacac2cbd0bc173ee09eff3901a60b27ae330941b95ab011396c04415383c17d60267284cfeb0629c695906ae007eafdf53a7091006362d16615132a23bde0dd376ef843041f266dd53662e330caf1326896bed817536e45e2677162a594c768a1a88e0d47f314f7a8de5e3370d98fb45f12188f16064ed8918d78a3ca4b208243a6bcafd6160df2dcdf8139ca68a06c91eba976b3165adfa30abbc196760f3619a64e90893e208a497df1ae5285ec3d4eb3a6996c6ac44e3b534dd3d76b25e2547b02eb9fef0962e720c7d6336a3bc22bfdad932a896e82dd92dc4387fb6d5e359f00423e971be64ba5b998b9cecfd3fa4accb89c84d78d97173a7fbb1da8e61f6cc8e4ba11027f07e111987cdcfffbcbe80779d9b9519f3a74c32f96dea67d419b86796bdf0a9ce41cb4dd3d78ed092c515a435b602f4024ab2b9fa7a7538049c3080281ca0f46c64e06c6a9d38d45818db41efa67aa056990c8a0efd8dea470d0d5d24348069b98185609ff2de18e2cef84351764f29810dbee56cb37effd67063e4903e9036ee4ce27e71164e2ab94e76eae329d41af19c8ec841583e64ee24df52fe6382554bcf438419e8207b4928ee36a262600e13f40de6eceb8b13736cf18a92aeb09d1fdd8f70ae29cbeb037af947838320243e6dca0b98ae8fdd29c0f2c8c0b1927531ac7690e8c2781d867890286fefc884f46336bc64825169718649b1370130952f70520b1ee05533686b3dfa513279742f8ae0352bf5729ccf18fbd0401b816269c7bc6b627e9f7968a524ff018748ade8e5de080b1c26b0ab080dba77aa01a96b64e9405e8d2c777eb770076f2542c2dc37a4e54cd1c0d09e7085e9cd0c607adc0fdcf440f68ca65d1ba64b0fcef7a11c454e46b87bb3af605d77cdf3d3901071c536d1b03ae36b598f7d6e4f5c7917e124436fefd69768a5c1a22791e8d22aaf9a15e0e31b3a21cdcf9d9d9562ec12c7dbf0c0f18f341afd9b04286a66d27366c85f3b8982fe9ffdf387a1710df7a966ca8fcfbb142c0c3468b0bf5cabd260c91dd07e5650dbac9745d9fc85fc676934de6454e55cfa82caeb47f1916a6144ec50db2a9e3ca8977c6502a1dc38ab5d4d2c0e6972d276f7c3da31210f9e62ce774adea13a436a2781a4629610c2109401e9a3fe12ac75eff41efc731a18023b89994b96949e9adb6c0ccc4e3cf6b791b9e0eb913697cf026394ba514b119046185e198a5f021be8e8d13a0bff60d0a8565f2c15deae263e12f2262d9870104e5c1347fe1034997111107ba556388ff1e10d09d93aec43f7ea9c511c43bdd19046cf336cb87d3afdbd33f18b5d0a4c280c2676e72d90694317f8fa0aaffd828790acdfaa132af05ee06b7f901f0d8d3aca5e3b962adf1dc54041616abf52f0afff9f86f478a99d4faad015a6c5bcdc83e27f4d7013cebf3d30649bb5cdc771e1dff23ff847209587279104c38c104024c750317ed08a0bc609b2be78d5d9b09382f59fd6876bbfde75812a2a7ca5a3d91edca8f7c10948dc6eb2a87c3ec5c16575d09544b38bc16b429907f4023658d9ca71de46fb9e1ee7e8b29804c19951aae70a9202dbb3cd21a699203ee5b506d99a0ee91e04281abdf0e49a891738c2fe172e3e9ca220e9bc4e5ba5cd92c98af1174342f6c848996e819c229ba0f6f27c3fc76c102bb98871f340e56c3daacb7d999f80be275677850fd592a4aaa121ac1ba8416ba66df9f7323cf6767670d1eb161a9f48e3323685fb6878f48daff0dd853d7bfb4eadb68b6f7bc432805f0011364ed23922dcdcba6b8366fc73884148b8c671aee75c0c6d3e782852e0e3d06f4a2c6d51a16ef5003c706b38dc94f1c8c03b359315403a9d42dbf4aafb1df0548f939584120db062817b238c5d5a4003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000046118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000460d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000460a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000460b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000004629a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000046141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000004625e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000004612978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000462daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000046189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000461159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000004605ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000004605c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000004614d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000004603db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000462ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000461213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000461ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000004614fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000462b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000046305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000046280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000046223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000004617a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000004608858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000462618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000460f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000460e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000046172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000460b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000004605bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000046137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000462e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000462297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000462608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000004618373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000460422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000046204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000460afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000461998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000004628d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000461da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000004621d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000460ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000460e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000046107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000462f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000004609726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000004624f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000004603c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000461fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000046205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000004625110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000046283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000004621cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000046094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000460c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000461f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000462421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000461fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000461bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000046304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe500000000000000000000000000000000000000000000000000000000000000460000000000000000000000000000000000000000000000000000000000008100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810400008100000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025450f1fbfecfecbd8bd2e77694e3d9ddfde45cf2bc44f4775bb23a574f439495a4162613b7feda445e84d1f6ecd452611b5563ea5f0d27f71efd42b17c2a45150cee3cdc40471633b4a44928d1e396e1aa5c64ddcff3c5331365d7ba97bdafb1ddc5242418d6430c629cc0843325cae11f585789481b217568e02edb48c2af4d00487213f22bdedf6fa84c3010f77d4155d2fe77b1b5a3121545013d9ec399e48ebf41c5f5180681adfc9ccec67da6bd298f0902951c01ecdb406da6e6c18a3ced192a17d949873025b141072cef3771db4a75ace0011bfcfdf77f734ade535beef586ed2a6dc3223975335b355af9d4cc7d49bb2cf13fb91dc640dcfcd1e402eb4bd7dcbd20fae33025ecb86c80a69ba7977e2855ca838f3c37be52d43694f3817e659608b18cb9ae4546e4991c6af2ccf8fcd281c20f88a6239c3ddeb30dd3a6acbe3e30a559f2f2fe0d5c03374a2ed46a8fd870ca0faaf5f59c767df6bfb2df44fac0cfa575335c54aa35b2448f0aa79c60587da70f2ac42d1b304fde62c0f3a1f2b171272cb875dfb5ab165754e45afb2e2b6c098c430abcbdec4a86591c2bfbecf05db2914e99bce2c31b3615dd2424f748a5f5620adeaf2e294bc89430000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000233efcc11cac7c3f4445978a53b6ad618cd2e6cd4598a9acfab2e9854ffc4bd4ef04d1a7f20530cfd2e78c7b72fd82dc388a93567ccf1ac5fb570673afcfd9e21a69bc4f3e470baf4d6610d36e5682fe306f7812f047d8ddbb8686d7a5b94d76254b607bf9ecb2c39120576d56ded50a786ea16620132fea7883024488e5ff1fb7d41fcc84c7dc6afbb2471bd93a4b18c243af4f8e3758ad4c6442c6d433e61e7385392e69d78b3a7cde29a6487d0492586cd28c809735939c6b9168fac98a7e13eb0d44db34e7e595f8406399c85d7726867a3fc6dd024ee85ca7ef057d1081360a6a1e8974dc1b7c47b217ab82ce99eec4df0178428e4590c4ee7290b5e78b59ea712497ac6be12e8837dac335b224a32025c3371e4bb8e0308f78c3244ced8a9472a3238addb369648143cd12365b2dc499af1a9d60b007a3c11b91f6bc06a9a559b115ad45b03ecae79dcf1e42146311b256427c2d29d32dd75fb133a34d3aed772f2e12e6f3cf4668d788bf4c32fd706b495eb4252d2b8381e84fcd03fde2a9e3ba77b7ce11aa4ca9e01086772b868682f3a93f58eff90cf864200aaebb5c40cf9f34fcc3ea1bae417d5ea39a9fb618bf20b6e6bef4caf727b59082d4c5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019d86a6b2f131f18340799beed6f0acd68f49bb0337890aaa855c540cce7ce244d28a722509c8a979e79d8a6ce654bcc88f5c6d2d64655e25314e991ddccb514e1a4bafd7b1629d29fe4d212e67c98844f7ebba1955562d31c269072f39682b8a6ce4931fe9b10177c1ca98a299c92a65ef9c741dfc03977e5ebd5d21c21631c22373fd1d9f9a5cd0907e678d88ffb69884e94ee329b925b58a9be32e5a5f9fa0f9246b33a8036ef474592a7945378292019293a64522e467a6111e1c81d24fcce9a431b48d839ff83bdd92e65facf39e63b4cd4fd9d886da4c3073d07b6d4ec40b784d235d15adc54c0873cbca9c5620baef607c9c7d67557e8054e5a07e78918ddbd6b0c00be94c108426465495709c0699a1934101f7f8ee41a9dcc8d46f13afaee7cabfb6115dbf41e291ee309406e018ce8b11fdb44e7137367385efbc0fd1a988b9504a2a24d081a1db1c7e0357e003fa0726dd8a8e36276ffcec4eafe78b1a68b79a73f70b2e7843197b31cf720fb5dbfc06f400b21fc12d03279341c6db679e4463ca0ab1ca25aa4490edb78279a071d18e88150293dd839455121eda973deff50ea5d7b449e41d78727beadcc2a1c0ffba4d1e105b7a92cea3b3c8d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ca83bf205c841cdbad2142614c91d2af5e8da2b6663f65d3b79e3b60f898773a581b974b821a95932a5b1c4fb60a235bc3942c3886d70b3b38282d709ee7cf58c5305f744ac5e0f4721dd1f4315949f1c65d27a72609090596b9146bc09113c1b5fb6c0ab14c42cb1352205eb410f12fa597ed8d535af959aa129a84cead9e2814896be97ac759e862b6bdf407bdd3c37a971d02d1351e8dfce3625a205965593b6fcf91998b31d800881fe595082ec794514a64d1f5077df70277129be6f94b47156362d992985b7b3bd8671579014e0b8b386b3f520d1a5c904cb26461e2791c4850d6f520769aec1ab44fdec8684a1f678f46a7371c805ba8a34f9b4232532905f7065b03024fad46ae92c494b25d843ac3e9d3d9977a32d65c42e4289375c84a25d17afee4dad03ac5d1e7006fbfb5e7534d302c0e7571b17f8744bd838acfc32bea792068e798e69a22cd7a8d7d203316180e52e9b0a10a4efb3bcf405ec0f326f8ede188377aea8e261e431c610d465cbc13c8676235a47bd0cfeb95bfc95af11a5a6f99c2fa3258b97059025b664c5f97764cffd14f6609847710caafe1f91f6d98e46cd6ce88bd0af10e3072ab9cdefb47a1456c3bd1fc6d26740e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005b26f2d5e4cfe5d6861bd108c4fea8d3094ecba189df939d644899bbb3db41d90272919f2047d4661ccd732aada30dbefcaae67fce44816fd43da3f9ff75e65f6b06b727e89ce78cdcdefdb2a46bc05bec2260922b8649a687e9f969910fb1ebd6d7ec4baf9c3796bbfcad5e36cd2feaf3650ddd6592e3d2d5117b96965c77b0ef840ec9fd911428d3aa281dd173091d64ea13187ed5049b02234bfb9afe33ab7047d16b45bf4e1a981a926420838d39d487e27181075f5ec8d19baeb3df6a79e4011965799cf0c0fc924942624365149247c3a8b7c84ba6e5c64d7c56d6f529055a7da1bbf9df0b0eefd9560db6088f6435177590f850600dd53f32f5eaba3ae2533bedfef90d98a9d8380d016713141bde9341717699f9177da28e0cbe4fe33635318c61d56744a3ef0a5aa3248a9244f29e96897863053570f3b3bf9e452cea04cd87010be4c49672fffa6eb2f2a4c54273092b86f99311697e6e490d4d5ada454b0b0d6aec0472db6a6dbd48a1fe0731d879e35daecd1e90e66d219ba0333eb7dc76555f816224b89a060a01aa6e54dce514d94544e946f825d6cd2eb2133af40a8e89a5132d44e56c84c5bdc1a4e191883f0479ec842d4254696eb2f8400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cf51543e061260916067991336985fceeb52172da3fa0a9aecd21060d268aadcfe2cf59d2fd39932d0e79d0c94f84cc36c85e6716102fd4e00b0a96fad04fd651c76e55bfdb254b1d860d4fa2ffb20c8046d4474478709ecf17d25e4af09b65a7192493a60b91502b9ce932e3e9a2a4e07d2809d33e4617dee85c1820fbdef5920555d01c190040058cdb3ccddb622a68498356be2d27e72f47153832b6d432517f84475fa3b4d27da44e8a445b57ca33fff9c1dbafaa75953d4e2ad9b91089c30e39566a2426d6a19528b9a8778d6360c79c1036a5ee61ca27de1b435ff0734d019645adca8fde17b962237302e4cc70cd9796ffb2e09e0b6445f3974c3eee16528f300d8dfd9c5f0cf12abbfebb23c6de90c332cda6603387dc19ecc1d6f6b4227b68de4ce9489e89d5f29fda729b77e8888f3981600f38933a78f74459db259ddeae4649c5df8c897f36fedc5593d28e3bb5d0962d7a36b929713aefb61573cc32ab4eee11ff92d7436e5ac892d6e8277efac6dc9e2fa48f8bfec9b9eb0f5fb5737d3ae6d38e1c5c30de18ec0aae3b62663d300380fbd4ccf091432695ed6ef27bd7db06016e354b266c0e761f133514dd080b2a4ebc18477edc187c6eac0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105f9fb71a75b47d24fb045935704a4a5b5856d3a691316153ccd57073625fbd678ac004a969bf93c8434c3fa66c40df76f72bb356c93d3e0832aa7511b926b869f617c9516be9785053a4cb395ed4dfb199810d05a2891641cc0cd8799339898e129ced9f83720d15338b5a41bf90701b96e2b92c29951cbbf91361b8bc2ec0cedccac5b3fa70e1d09d5d6a93076c63a965a0ca39fc0d71ba02759306b4f70230fb38ea53784b2d534dd268c81d6cfba5bb356540a0128b1896306b9d43d53a47bd631f9b512b134ff3fa09790c75849f7af102d968a6354a0755d50e585240b40cc6bd4d9aa381a0c91ddfe3a93b4b204e15a7c2c9640ef94243fbd9ea723fdcc7ba4e548e91672edaac5632cd8525f1a862e01e8ddcfe63fc613ffb91514e22c87edc50f8dc2b6d416a8fc7083feaa2b747dd64744a9f0cc5c9d46bf9404a3bda4d4366cbc80a8eb9e2bd4d9529169eb6fd9a4bf541cd627942f4ef371136d611ab394aa4b3e700185cfda14724e3453eb34848804cccf4f70c91fdb9ea93a21e76679c8205ad788758277737a140717b7878fdbc653fb2a20b15d3fbbaebc3b953badd3d06050e518b4d148b012910dc32d12b3669d75a1e363586886456000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bf27eb29c96e8e20333d6d055befaf9f621a1a7a720a1e66cd2592f83428291046d3f0808116e24f9581238462ff630f5b6801401bec50980831d6402ba68df01449bb5bc78b1805b9f435aa0ed16e5292116cf392c00f1945f9af9fdb1844980b845f2dd96b307743a4b6aebbbe39cc6c99802f48640ee934ad217d109e19137a350e882af9a198a8f5fa6f8a2b5405f9c154a85cf6e3fb5cd25f5508a3f2fb1ffe734d924d48cddcf32cce087048d5bd1c597dbe838035eb681618de2ae78f07fa2010d6ab28f90d77520608aeba9c85d2002fe0bf8c7cedcede79bdb0d48b3391eac1aab14a91562d38be5dba31c319397350d56d18c236c84d651fec58508578d4c9453433cc2b6ce30e972626e84004eeede5bc3ec98952151fa8be42e5d0a2c470556fb0e39f6f6dc02c83a46635b2bb8cd3c8104a6aaba53aa81f7b41e24d570e217ed87ef6f8e1c4dde96a4e7852c504f668ba2fac4b30908ec07e2a80d898edb0c68db2815faa3b1dbd9aaee8e0ecf9a4fa4fbaebd3e8e8ad054f7f8b2a696395722b198116680c7822af6f0633f39984fd1a609011792d7fc99f11700786cafacb0ad799a65c660dcbb98b3c701e0706bb770c6522a4730b0b6600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009148a4cd93e83af58455b70036810f5a3ede4d030207566821528139f62ed54e46654a2dd0e804c825ccd64fccae377d8bf7c082f53dbf94f45820f479b8aee0846daf03d7df629da2bcbcb56d72b53fdcd337c3aff2ca4b73b203208dbcf1acaea5a8a93122e744c18a5b2be4f1d33e4ba35fcfa3a12fe7c255e1f8a4ea018039d82201fffca35a7951fd8f52d226fff93865132deaf3e90a6335eabc3b640d91e2033c560242bcc1b8b20b0a73ffeb28885678a1735fab04ae79e7aaad06603a1521286383ee72e64e114660f78734aeb8cd02bc94fa283c675c5fdfc444c3f0b6af9740c2870091cd150cb1e8da8f00ee08d8837cc6b6ee5b24f79fb2934ed9f976784e7b3c1f71176603ec303fbb1049415fb64b80b6aedb3e31d6108d2e9dd9754a677d6f4c735d282682c78799029f9c9188587f3ca4c8c113733e03bac1fcae403ad733c34bc9258d6a3e43cd6a339a107151942653316b9fea3e37eec45bb2059206f255a294d077d6bfffa0f8585ba66b3e7fb737bcc6f73d47260a37a6c51c4df2379ce8ddf67a01d4ef299e6ab718ab770942c976fce9c82025a4c35e41fa8ba8c53ba9561b870d6c16aaf3c079318c918d5282a340e3fa0501bd000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087a21651e0d71b36b5ab10feaf3d16326ce3121b6c68cdd42d7f447ff2ac3911db04c7440f5f61b5b87705f3ee8282c239e85746857676cd76fb9d0eb36b2fd9a7d99110a57a01ffefbdec1953812c09f73a35ef0c2b6cd2f3be3c35e40f5aa65d165233027affe4daa4b9d8a6c6a08be84a9c3551f55fd253f049357652120d13a9f056b1f944b1f82db52be5cfb62edfc1d3b97dabd733a419af0cbead55956a3ecf025998e174ecf5606cdb7583404ba33d27243345cca41af46a15c07f59137577ffe6c63a2cf6df46c3ba0315faffa1fa19ee4441e5b09e195e76b60648023e5365ac15c84f0b220a465b03c40beab9c34fc9747542037bbf747581cf298214edbcb4b46d0145355de3ee37c358856c0a8ebb80b09fca60b18a19a0d09ddbc06b2f5f0f85d1a0edef174f1829415187aeac5f3a4d764c0df307cb03f8b0b896687d4d91455b9dbe8e8bbf4415f9641e0ae118eddb473d51e3c8ffc8cceee12d5fd423b291573e4f3c96973ed0de77053f6af42441c5ef0bee41b0cbb00707761eed2dcf5480f60edcd1463b50f83700e0055429ba7f369c8c6aa490c5b1a231d5221079cb5d1f8937e7332d2b5036ef757d5b70ff734e898d2e83100110000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081eef0aa4b5753255a8fab1d0d646afd8ab1d0a536a6a21ad30e3de3be58c2b89d74461798b6e13db5ff40f0f34ed64eaba220bf191402257f7321bd24b67e56a03b3bfeb7923007094bf0e4c8a68913decc36c17ee4985d5fb95f5ded3db9d184729fc616174335d7c5d6dbe3d90dd41430847dfabffe23e4bbad63607b4181a7335f3740ed76c3248d70e92f3cc90b669e3f6532d933da105148d7fc454597c5db2f72150905b28dec0afc157e230cda76911680581006cdab66129acb3a9f2ec8ad45e2e4ef969e82984949f4cc03314c98de82e80eed926b3cbb1b380fed243acd77a589a490da788e35ded8c4797f3c29d77f5581614d33b1b4feff18f04e0133ba6dc8e9ead2643af15764cc29624a08d3c42540258116ab387425c02176d298d2fcc6e0ff9a2f094739b63bce958ccfc262a0368f00b73e2259ec411d5628629b6ad6f50d64b1209228ddfc3860a5ae2a71dd68be3543f23779dde70e2d58511d144258065cc520d5f77765dd0f1d9b5cf3d68461f18d806463f8eefe1b21f5bce9c105588610f2abe8f573d7ba7c6559ff55c4fdec3db1d757c61db7d5ff404349a473cdc61477832d7b227b339bad54cbe44df8763b0f5127af236a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027783c722a1b7a1b0ede46b26bb01f9d9f8da1034509a15b266a7abcba8e02d3fdd8d52be54913c7474892b5009c49bc4261f8a52f3866bdfe3c7dddb3df650aa1c497eb9eb63ba5f6687268682f00525040f07254ad476c3e72e47683a9161768f4c9aa8eeebaffba4471d0f63efbe6aa6c903a502b2d0829c960f0f7aeaada48a56e3d29a60f9fe3c7019ffb40ee9ec948ae48f440816e33e2cd6abf24ed9740444936030a8c93fd3122010b137b516757fca1a2c670b3a3dca13f45a1741b19cd3617f41bd89bb19be41d51eb17df9a5877eaa52d6c83f3235addd9f10c013cbb0a5062497d221680ffe72c867a53972a2fd3cb4a0b6f972d74abfc4a2dcf2f9e673ab0c25064bbfa62cd246985fd7bb43e09b5c4ab37a7a35094371e8e57a24d00a86df24bb6a139d24f6529a2ff47f1b0fc9b7aa58155a074b2acaa3daca6a7d1843de4f2ace6e7a6af13624156f5eb138c59f3957c26e3e8e655c1d47ccc9bd4200802c54e408bc6a2a762d520c4c9b685427064a80611a4297042c38a0f6e7d491244b70d3d29d502618ad292364ba388b92f46d29b817aeb8d661b93311f285eaeb31d1b0aa344d6443e27e62f3c89ef6be380bdf7a4a51dc5f81cbb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088c6bda257f9ffab008a31f1ea825e1b6aa9aa026e6be7fa9267df5f4641676b829fedc73c10493edab780f7e11b0fa479fd9c01c14e24f9619e339193cbb6f1857a767997cdb622bcb64e768a9e383f720b19f11c098a7df66dd8f16e8c3f1d23bed706e49c5337d20b42e93c0b71720bbe78311e1c61569920a5cb35d3893ef5a55e2a4465e4fd2f5597fefb6ee2e7733ea55fd79866a0a3bd5a0686b70f99b5325a54b7a252628137d32cf94f9e429807d9d6c63f9090bc2992b6484ece00c4c0bc0d48db6764cdf2f6e0adb4e45d1a5536ceaba2897c50e17f10394d6a02181605f6bbd4c7eb81377204dcce78c8d1e781f9c867ee9d846160a34244d5b673b367daa5c94e442f2218b51d0908680bf3e7462cff1e51aacd9ca28f52f0d39e8b68856d750060504417d2e58d07eb31d90b153895c882ecc29a2ef9822fcd42625b6718840db4f5cb3e561539ae71e7f77988db95d92cdab81ed3dedc4d68978dbfc2384f802ace736829f3034cb22ccb4a404fa476d5b461943e622aed216d3e5a0431a466d0d6dc7e0d6856494ebca851c3237006857dfd42e9795213b035c6b810430ffa64827ffcd8719c7368f4e6e2c3619429798bd5de7226b9425a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008004a619dda1ae07baa5d2da8b7a85824b91276a9d6f7ef2f2d6a1583f6400a8a5ec326b8a2f5e9b0234e38e7e4838f29b8f0ab4079415fdbff841fa4e94ce3b9f177b6157ffb82d7383328c9440801bd88adf7cb991b9b6757d9084ae239f552432420dcceea46db28920ef3654b8a0af130f3b52c41f4c2534ea019c866726c246b010c88f63d27640a5c1708697181ba68398424b189f88eddf4c4be843b1e4a66537e2f723fd1482cf7832a73fba3fe3640f44c73eb3e00489ef22baf4401f5b887919f2ca365a0123d53600bdf9a643b71e1a6e71f01afca2fff4cd53f0e8a23380e7096cf086f499b4970a6e1bff14f7e39d0dc494d9c7dffa7c5270a1a5816b05155bc09dcd9d114471c22b677ea7ed59a8236b792035345727b84ff2423a55f037cea3f9e0a79c06a65accdbb5a567af5bbbcd379041e1a4387a3d74b4f262ba2d78ecce204838e30535f2f41798a5b20c9135d4d3acfd4c50af76fc3cb137d80dc1e4276d70303934f25c09ce247bfbc3051c0624d55780fb3b18973e13aa6c234e5c5801ffacf4b7213e7e02742960ec8c882ea64d61cac305de9d6a67fee5dd1c4f71019d107b56094d9a52d1b38dba663a866b6975866430f49a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a698de571351c2ac9ca5090b08103ffbb93a3eb26fe1f8c38fec0cfa3e609898c8b47718402b53b8eda59f6e35f2644f78976da61eacbfe8630aa2acfc1e38afc78bff8d00221ed7476310e2edfa6bb0d25d8095e92a26331f8a7597642b57c3eba12c0ad166209c212f769728528c5b91f1502c439c05bd3af5a2f0c40ef995ffe40c62125e25e81d2a062a330175f4120d6c472251a35668428141ff23ed39d40df830fd17129e4126932330c1e94aacb91f80aea0264e2168bc1a7859c9296f89117528aba7f273f6e33c445934fe06f3dbfd96eaee64956cfc7a3efcb66446a9e57f05c74064eff53c8bda1484d0ad4f3307e3860f8907949714a7fe3c7e37f77e9d1d4c609ecc700475879fd59f89aeda11f41559a2301aeb550d18212799013602f007989fe64fc82a80511ec6439b51ea58d7eb89f32f8d10886b7d04a847c6c06319e06434ce6ddb687e829d821bdc81c65c42e5f56e5089a68370d36be861c6d962fc9c4a518066141c942408ed7c165dfdbcbfcdc93c0babb7ad143de6a192cec8f0f427191ea14e9e98cc176eaf87fb457bd2766c840a486c438186989661ce20593d73839d4c5ed34ae9fa291b16a858a5c69dbe36ce6246995d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000156b2b655c7944af498f867e089d6fc0decc30ec3584da82694e9e1163763902df51a59f6d45d2d6de47eaf704b0c5c089ee18b1f71a6a29848f60c11e6d4558614a0f5de475ab2c35f843b07b1f3e219a50b71928c5f62adcb2fd93da87e394f488e5a30ad89059d7030d36f2ad326b5c2df39bc9432ca37f0f0329adefb20c812a3f203b970c8cdc56cff0f6a5f621a035dec7ab685764ee928a88166cc7b932e41e503ea981ce2995e07dc80ae116f30c31890d8db4a06a4a4d35d69885feb9deb9cb32a13f9c9be7dfd4bfe477354c37bdd6030b416ee33a81ce38e30469fe97aeadfb710de77bd6b714cfe1b6d2bba427ab9d5b5204b7081f0d7ebda500554d03e6daa06bfc97795a3d070a6fc11eea8d81fcae2210f37f3b2f2392243f59c00741a577cce8a0a7a6d61c8e236a61fa3a2e271a79c5d5dd395cf7d8eda71bcd8e9b7b790136b27d46a302616d8c34ad0814020881a0b1cea96505f0e14329e526b94a056398f7b58a874f849043d346a2f266ca478bd08f51693567754a65cbcd8b49bb33e70ee641de37501ac893798cecce14b97f9959241bb9f165780bbb16750c936e02916fc18f2530fc81d3336387c3d26cb088dde3c8a5e611d50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a21b63cbd51f4a2464526a63f3dbceeea85a983c141c8f70da3518945ce16e18652fde85c35f75e44b5b9d41156e3204c7ec1f3eb2c4ab2abc2b7d925de2445b142b8d9732ac88052dde001d89ae00f884320afc363ca4433aaa2c16cbc967ac743bd33d1d7d34238c93fbc408787d8a5265ae512fe64d421d59079e8b64bf956bc513817695288e23403b84846fa3ecd890928d33328afefe1aa78c779e38628d971585c95f5865777278812ba74167ce647179f89563a7797be9cd9cccd2c91e405042eeebbdd18bed1be5dbdfe5a7f1d968a7b6396adb8ca128e5469226d678fc5d0ba35cd14d85d4b7acc338a1ecb22a37374bebb5b725a00ddbcacf14ce24115be119bda4af4a0629940154c20740118d27b5234a6e649ba0ccec90390d0e4066bd01b2bb0ed55c45c815050fd2d66a9fb255fc3dcd7370ad34166daa06754907b07a8ec7f5f2db616c7dd94f91cc26e920f9a7788dcbb4de572c599ba09fddddd6b8e22212fc7407c7b8d7b0c18687f8a7826c48cad98c6f7f041229586ce18d5a7b01dab1c285d16e103434a4bc9487ac75d1ce9aaf4bbb8943401e8ef27078c63e4487f25ed4da38765aa31f180f51a83e13a4cd05fed75fa773716c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d46657e2528e802312c11eb0c96bc472b42040752951c19872b9e0f4899c978665f5cf75eb2820d1cbcfe077cf491648de70093ed800f3a88e8773010bc89d095ddd79acbdee594e56cd836541754bc0a1aee038b50892de71479b790a473bc2eab871ffe998b8b18c79b8f69f9c8b504865c55bf505740f5cff49ee98a28296e5582e4b41ce1d797d9cd48c08eb140b994aea98549e43d8f3055c1dcfff39ef178229312fa64c3464054c415ed2a1c40fce557b880d0e5959aa7e0328cf450aef4165298cb0f11843c70805b74d1500a6daaf4b7d7a77873d4aa754ecf053f21dfe8036ff48d15c71accd0d3f2e5e78250d548f51163c2d1b7a7c272c2168ec5165f9df2d4feaa7322a9ca09efcf95428c6f6dc15e673cc3965bef71e7074b19e6dad35f463fe62902725d62c916279eae92b0ecf61f3cbf9bef3b27bf52bd22e36173bd6a8174f2eb166f4e906fc4b068449aff925e0d125e75d8d1983ad38c237d713a92499068cf34390b55aaf07200699fce752ebc3b585257dadd1ac13cfd4982fb28eb844b9f87c0305c96cc1deef0f6df5d15f0a3d75251687f952ec04ae99e1f1fb4a205a763ac9e6757cb7a62338430af7a894e98b98736a13ed100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cd3df8bb8c0b3b7cf755d2d3664e4125f511440febe5a7c51adcde02eae26241f82b294052ae8e21c80ea43ce12f252ec2cf51715861770e1e7e3f32ea7108237cdafd86de03fd6d5c4455dc99a66745f5051d6473aa625e5d1f18b191299889feeceea95264af602445bfb8dd987e4196e49fde628d6c213cc6bd593f88e022b4f822ee0657865a6a59771718583933da54a157cc2a459f942d5158f309512b03a8edb548f94e6513df2015472d488633bde422e624f3684a384f05a5c9e32dffd867ffe82db69b5547672d42ed370034209e21ea511182c1b9f5cf4d80de6088298cb3fa12da923e902c37e24dd7ffab069782ec3e155378d966bdba7f880850b29f510fa16ae2d38626b6fd02d22e13c49a6ae0fe7a58f745971bfa6d854772758ae98a6cab1e17d6ff307430c0ebe4c7f975fed4549075c940c94f6eeed4fe86f5f37adcf4ea62f7ba95d0c642e9053937da10004eebc43a0971752af3f762378430faa31062fccc15aa72bb4b390484e03595a288cf202690be10b0f134d2df11fd9ac59b830c9534f3c6a6bd67eae88498ec9a6d56c67d4eff1cb9c95d6d1cb9ea10b8f4b1ef17ce7695c66807ffaa85470c447daed78e8a2432e37670000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000822fb2054fb85156194ce31aa930846f9b99f04ae868b19d8ae4710250c0f49e9722bd1cd1b02a839932dccd13ca8bb00d3f9d3cf22026c81b7fe30f71ed2383260a3adf4413dd3c9320f8c757ed0c9da8ce900eaf870210aad32d995d73fccf0f661c976d132c2409e6794896f04f8fcb44920365bb1488d52ffd1cd39ea407b0acd3b9b9712e44ea7ab010f84437a221c902fc5bed510d10f26f17a00da385108171377c48f2d53dd1c3149c29fba418e4a9b880c4a50b42adb9eb53b49674973dcf1270300c91cdc5f6f4013a950efd80461ab4ed396e13cd06019e0bf21fffa0693c547b1b012db0a04205b41be9209783b8a92b0b098648e5f9bbdea1ed42769035b3bb65ff4f787a42175f19e55b19496113c33c679f32d67c035a888392aa745ba5e99b3ff5b893de33976076c4f68849f7cd037b24fce7d7d42bb029ee2f12fbda3c1b5010d57f67476795a879bb81db481de648ec80d89ab1525f3da818bb71044bd4c603f65af709e07668b8ed179e3ef42be88fc183b2569244daf6358fae21cb25b099822fb443f1539059bd086e3d6a973fd2fabfdca61fce3331ee2d09102fcf94e10affdf72a08bc09d9863a9a15ac1481364c7e0b8da570500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f40ec006901aaf65e96093a4b86c3613935e01c6ee7ed28247e3a11e22d55825326951dd11dee452a07fa1ae89748e80f7a349dd4c080d1b505093b1bdef9e5212b7b5f1e234d7ac56a97ed18a47da8511645fc3d649b525c87be068fdb5f3a62428f242ebe5edaa5ec7601294faa24780eb5db5dfaf8abe7b9439a3f3c5181e86e19c725427c919496798defc9a83f7275c802ab83a7dd0a92a6b401811b4b63271b66c16bbcdb8d2c3d5cbbd32d1c5a4c8adf0c11edba0dc9cfc6223c3a67c3f5ef9aa8806eda4e3e522b5969026cf71a5f463a16fa5d81c01ed842af25fda5aa5be70ca51fd1bd2d9642a31ca6f4b6b90886b2986683d182a10f17dafb5b08b3f0ae97232f96dc2c82f150d8e432b482a495be8a6093b5c19330ace38f5112cf2ca22184b92714b03f59380588d0f615db5375a4a759cae640e08c00caf8ec6339ef2d2cbcf815bc334cac78b7334249d6cd9b7c172ac6bbca9a63e5f3f5a29473e8d8eba8caa3db98272a4b6b63dd02d9821c8865391d56c90f59790bc8e674c0fc429bdc812e5c9f0e22a6a6401e75c5b195f16796e766a351ce14775744db90b57d963d83319fd21dd334ce4b52c5f4dcb0d778fd1ac04f36b813ee000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a35d52f309832b95749c0b6712293db00077f836a7ac8d58985be1e8a60329ee3d38de93fbcfd169ee4cccf2177a3d3c1a36b0ae36050085f78ee79c1892bfa24317ad6704ccdfd813668032019500862e207054d4586dd7b09c984788d69759a9e5b8b0ce17443aab7907218027434216adb1093ad147f38a053db6620b9320139e40e843fbfd042b9c917ac6f12812db3c09932a5197fafc2d4e5d28e6451a3ac627703f8496219ced18d9ad434e2ddce0f065a8b4989d29f7cb799ee1cca2861be5278b64d0ed68de788b7490294406de794049dae7d64ae7af4bd4903769e8e7ac6b54b13e31e2d5474e6f48d457f1b28bb5e4233ea7dfe925ef07f0d32e433b8cb7c87e6f99c097ee93757b575149f93a39e2e687cb9bbd83084a91c2945ba1da1a3d38e865af503276c2a02ea179b04a78a43a7811010f221061c9679c3093bc609bff506f0943dbb5893d1441b8def444aeea9725fc7612e842417a7fbb7805354abb81a910d5d063365ead2d4ef31cec15160d6fc04e3e870e6c1eb798461daa86bb772777fe584b5fbef8f416b8f96971efc42968184b68fa745b7c4ab459a9ffa16b9889b42e43b17c5949727181fc84ffeaa268b9300c8898d5d70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab34857f0a44a9fde7343340d5a99226dbd900a80117e7c1c6db187bd1914c6d7e0c886948f8e8fe805b867bd2a3b76d9266f98706994bf260dbe118675874a8685531b23c52b7c6f17962004dce2ac5b6dbbede3a7a96b819ac7df6dbab9c1fc30c04620f3624b4af8588657d3001348a75e8a8fe4c393321bf13599152eeaa270355a6a4b534421f75ad1f1bd9c30c624c3d3b0ef33fe5db6f21d3a5310067bf20d036b4fb0a4ac180a515ddc4eaac1455906176c01dac3ef635d8543833a04806aaf1b01b2feafc2c278312017acd4e5d9d0f20f9668cfbb378fd918a50bdc74c71f941fdaa8b59ba99d9966daf7e5124c34ad5e0c162db23e9815b04f5da7643e875028895c65c36b94efee27ba4a6c9139c91b000d78b28b6cbe43b91bfea9fe994f3a6757881fbd065172bc0ff4270f5127564ce0d19857ce1237ba6e31ce9c0f1f254a59e32563894607161bc9f829b578967cf0bf5d924a89aacd574687c7c1029345b765074256d305e7af51a37c7f0ce4a090103bc35d8d8a16cf48e34b5c62b7e504aba3213d0d94beade11c38874029ae75f5228517cfbfa729e648124786d373a6a9e19d85229c8eeb84c4b100deea8bcc276d24bf06e57152e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a88f774075e1d06995c06438945f1029321f27aaecd51644b20f85bc8b0aaf45d4aab83fd48d5fbed351dccbf9184af9269ae9ead60b665cf24919dc811e84107c24b7d0bd483c19f195f2a7251aa8c0b15e6c284e46230bbe260f1e3e263f1564c669b32b0372474bac8f91f1a80b101c576052bd575b4dd8b053e9f39e2eaf858a3e9ac0ad851a01defe0177330344b793784f9aca0005e586dc0adb9ed1e4e08ed3f5f238a8167f8b61bda8dc77a75a67067fe0f0c88bf07bf3fdec7a73ceb3c1c0687b5defdb3359ea573441daac9538af33b400acabcd6483ce161663fcef0cc6d7fab1401f97f5634de236c6e9534437dad8c0d80b65de2c3ab382cf1fb31d877552ef254d3986c5abed6e68753d2b7bee58d3e0e2c8866fe6e741786ed8ffe120d5ce8fae8ecdd0836bb93ceb609db71096085e844635fcdaaef2e86bec9d3695eb840fd9d1f83a6c6df4390e8b44d8f5e1de68dff452827a0d43cd26ab60d364228bfa7f35cf20caf480fe0551f570b84db836000f4341fb73eac083d7400fbc8170991682038119260e61f9bc81801f5ef9949f681ce02e041b26c62ce7ed8c6221870ecb193c577613b429ab9940f9a58ffc6b53a92ceb30d6987d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b2801ce7b59a9888021e4f69a607b79329607ebbe8d9b74c9bfc7b12fe7c9d7cc022ed0799fa24342b41daac02be1cb684e0e678d1732090a0a17a1defcb3700e2e2516c18cb4cf5db0453d896f043e5a1362c862079771a149b099eb829b79c69a9693f178a45298da48a96a012c9ae0055b47468d04874d0c0b60fdb0946407c1380618597a130982086a2c4394e57de7ff37314926036759ec8c2172ef437789bcff653d8d6f9dfbf5e7a660dc1009ed49553cbfe5879f1cff50e261861f8a644273e8dba2cb683e012686f600dec82b7d0f1f5db373398cde7b518c88d3b244fd748ac97082a68f10c16e81f1efac1c43750a1a13bf7e24c25b78286f2d67b0ff348027ae9ae8061a7e09e561595207ae22f362fb1a03e36cbb7cf26753c7d5b2f512b581e0770546f5948a499bcd5e0c1df7bd55bb152ea931cefbbadf96b196b05ffdaeb5278fe8b6206bc05911195d13dba2f36f29c5cb2c0a6e820447a25df8a14594e60c182f16073b5fecb6e84e576068ee6f27e4e94a0bc67265ac99eca404375d38f837fc64e2f8a5af1190c678fc7f68b0eda0d9f843161fbc7f5f7781f5cab4bf3ee04bfa52beb2d265acbf2bec1af6bdebdd4e6b54cbb56c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000079901daea4d1c657e9fb95484289565b98c896fef0e542f8a5293a31c0aaae8fa610caea75833d78563c93d348488f9ca9cb31dcfda82021e7d80758d71c58731e8d827eb892c45db02fd7c15621481f44688f782895b62b7e35eed70836aa470ed88317e42ac81ce6eedafcf2f0096c6a7b113caa914d69c0b9430c8c969d082e31a96e72e6ce52809d104c61ae70645fde60f384239a71a736f01608eef88a573527eac9595e0e85553a3d6880263f1916c14e5d190ebb4eec8051fe85c5a8b955072c381c610d62907c65a6f4c4687cc54a0f17d2016fd2f9a9d94e2771f007f01ff8756e3d2b1eaf7a34f3a394b0ae26979ebb8c89fe2a7bc626618b16b05b423486895b0e356a409d39b03648589000c401f4e1f271c81fd3fe3230c02e481982e1efa268c8857b52758df156b90ec2049633aaf39908a2f65e6e72854f9531bc394189bf4f99fd2e2a72eddb80f815e9948497069d17c4b8323b01ea8fdc9a4e23ced0bd44b051b488c947b2ef6fd8bcbabb7f5ad84635b0a29ddf4686aad0c11dd0b7b18fda2e51f715683904cc954d4cc36d548af9210e6980fd14590b222479c9be21b0a53105f324d68319074a5af06da91ea61f1bb0767a889250000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000acf4f83bc1746e6cdd36b37752dfb3bd29280b77d8dd7690ba6e3ac4e2f13ac8666ab4311a732dce31715fb7ea2ffe2d182b1583168b5b8aaf47281b25c2306559359ab77269c7e0fdca133f82f98cb51f9e4eefa24950617f2816803da22c306ae65028f3266d75e78e49c6d796580eb18610f8f77c65da1b41d029a8d6eaa6d8e743a616a2c8bda78e31c1979ec391068809c1ff12b128ecb513bfd1aaae56415d120f45d94214bc80ebbd2d4a026398246466a218229c759981a8ef578a49f57167393d66823a147c33cd99b40f9c4adfa87ffee0b8935daeaf2433e07c01ac2580bb1bbbbf9b243cdda48e7b8afd1914c756432dc2f29fe4746971c98f24c120e57c19127014a681c803e7d16f7a8b660470ea46ce14c70281b6db7a38af5477bdcebf56b31d4baed2c2c798dff39dc1f67af405c8492bfdefd07dc5a5ffb492eb36d879d832132890ace675d1c950b42a0ef7770e0082f1e5ca34853fd3741c87ebcc26f78ce9873b6a130e34ded6d41c95fdb2dc79aeefae37eec9c61f16792e164b4b1ab4bf121c91fed64d21ebe1ebc4c5ad88dff5010f6ca2437465c5166036b437cc5cde6320da4f1023e8bc5a8f4caf14fe84dea42862a7f61ebf0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af785da6f4a6579cba6f94e4dc6f6691adf451d5ba28e270d5d9fddc532af51e0fb416e594935b42d47fd55e968142bad54e73f77ca0408dcf0f39afd6668fb571d1a380d0561c757c8b343fcd6e1c56bbe35cdb30ad492edab03ebafe06657fdb81ba306f82238f09d23662b4b844a44c58772309182f5f57e1cc6d04ad3ad15bb85594815693cb98d77b20f40688bc178d80a565a32a136429b7eae33b1d849fb48936405f8bbd06d17d5ece596c334aa776df0964d238272cc04a63b9d4494b2b4342cea8932c396ec8a828e4c53fe2434fff6a4054f4798c2aaed39c91bd352be8ca23e04abaad63163e52626bcb0c3517626c26e20ea51b3cf7da35be0a2458454c30c4fee8b7c8794fa3db6e7df18ab93847cd3ac7508707398abbd874acdace41eb837db701ee1396a3597206cd857d776e5f9483afe57bdf9dec208df94e8ad4ca6ca66054bb95a376eb0e09d797b083d8d8bd2dfb1b666ce2276cbc687b730e4b24bfeb1c89a14bd7ad8432b576538325dca16590c77dfe9b8c7746a33e0a9ec7427e745846068fbe5c80845647f714a1a7651251a2c7ac0f386438b8473e10882ef144bfb2981f0c5d1bf6b7c3362ecf11be4bf3aa4e5f052b5b8000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b3f2f397f369f54039a85ddd3c3b0f325916480fd023aefd69875778d82de5a1d3a8eb2c6be292875b3fe469b9a7cf94f61e63e0770c3698b4236cc589aadeb5bda441d2bd24e4e775b84b862c8d07321257ef11a2c7085ccf6fdbc796015fe99e3873e657e520fae7e18bd6116137f250300f4fc5d06b5011095149607f53a9d77c2262f65bf8973d6aa7bb0641289c11c3581cf8453a9f522aefe7cd4163351b4041c0603d808e83d955f2d47dc5353f33cb44a10849a857ed60089e8f4b33223716323a1d7dac9d93aacf00c27f32dd5b1e4721e723c1ec8c016ac0cbf0bc51b27d04f05482c28f69ed5e92a49fccbf4a00c3df1b12779b76572fc4827ce20e50ac43dae73d7125880d59778c0e8111e132a0fb58aaf15b9a0909f53abd0fe7bba6011cc035ec15216228726bd2830008f2524df642bcde6e1c343a52ef15a191722dbaa5d0ceb7c596b1e1c7f6fda0f3470aea0bc951501a5f68a15134dd721ecb8f9f2238569c7126f7cae97524e3b706368a850f28e1e17540ed9dcb6efdc78cb8897e3986400149f4be2a40fd1e9a7da69ee26a2e877dec3a5aa9d42b1bb8eba90e6fe245874f3c3e6dcefdf1d0b97a8555e4391c979e00da0c8ebdf00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bca11b8d79aad4536a0031d128628c1b59100d3b1de1b04e56c2d5e4f4bf04a33dada51c471683c8e5d91b70720301843a80fc0d7c92cac57699042688c7d7b9033937c0d628f5f1da3344fc2fdd011ab998f8a352d105ea6dd0a5cba479188cfbb18e9e81c345ab7d4ca925ea72a75479da8f72ee6050ba1a1d762cef5347f0d246970ac2c3116a5092fb6abf6a03f9e6032dc51cedc0bb5484d00a29a000de4427b3b52db6c4ca9c29a8f1fbd1ae546b199a3abb4b5361f4b47eb5bffe85743f178d9fcdf4210f77e4f1b9beb7bb2dbebc7a214ca8064016b43803b08bedc0a18366b97afb59acba5e5be46c94ef03b21fbd70016551ec5e1035cf2418a6ce37cae78828aa3af43168de9c9b2f818c3a4dad225d4c7e456a36e5f9d47a43f81ff6d617fead6a2a2901b843d78c42486d661ebd2ac9a0de0e701f060ef951c901d37fe6e29aa24bb76530400a7b0231c2feab33a811c4917addced62794f16fbe74066eef1332d42c6035208e19a2a661d2de966c631af5c0f6b82d268c8bbb7c505eb15cc0fcfc87166b9ccd79601898f5facaebc4ce1ad2b6ca85145579530da58d1ac420abdd04103b6532405f921291452594793a1c927c6fbff5cb4bd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000119005bc98e7b4890d5b79ed933f12cd19dae36c0556be5d73a7957af61ad8ac29b0391a0e4448a1debb6838e043ef23b2cc5d87e44a0e0045d2c90ee42fd7c2fdd8afcbfac7a6befc90c054cf10bedfb858e97b1d985df6ba881c206265daa5704ef95f2c7e396c3b60ac527b377dda2e916c20da481579328342e2e3b77be7199d158ad94a6a9ab6278b4f92c2971030faceb05e56673bb205de94c07119f73f26fbde842c3f27841c796447d41666edb1d0833d151beba14939bd493ddf5c6afe25eeae7df2d2609e83eaf29d382681a6f913ff4d527267c86b0e59419ed67379eacaac2fc60b6a0b10b063049411dfc06823dafbe4b57d9774e6fc8f8586e5b75da49a601b496b58994331230eeff6116d8c24e64420e222ddf6a2835f8347ca1d7056029769d1cd8e49f5f998bb28a4fa09e3527d69da566a7ee6c08273c4232c8982a03c07d70573b64624fc57a86fedb11d121dd93fe1f432646525ba4a57200e36da5168e39c9cc862b0f472186a644fbd39d23ca154e995fc981b71306316052a07ebcb87b2f4f01587c139a57c757941cfa0c2f55b3e448db46685e493c57146f30cbd26b04629c228a293fd2a9ea75a6cc29aee6f74cd543823db00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f3b1c4770dde312572c9cfb913fa6d1e7e7eb12f3c9a0af479d42854ad18d0a4f338b75e931072c46da6f6fe9c2b305ea991cee809d432d07c847852ce09cccedb004d45d8bb47c57e99f6fb0e1d689eee4078eef184bb76bc7b155de068a5ddb3c3f0cb9f3b3ee7e983571061d7d33e47dce86ebccb64e236ed7c4916fe88c5bbedf1793d3c0328133394e81af7fbeda5e00f56c4d67bdaaa9b335441dce469cfb3ca08a79435947fb3c5276c7fa82c2ded60b3d39aae0140d473a358fc9a4f7ffeafec6c660404a5f41b821a7033ec510fdb4a1cb15b1e11f3131bdddac9d8baa08a416ec029ee6e796c48c3be00b0d9feb308222a76511108d46d224f222bca1b981e347730c66b515d5e52498ec383f1f4b2990e988927b6ffcfd1715af971ec9499448e893cee629b976d76bdb676b2128bbc90b8a376d551449d2fa25ab8e2c5c2816cdd5740422c292b5d01dac5e75b435985194fcbd88ec2d35145eeda55ccfa5feb4048ebdadb9bab96b1089b2175b6e5c15e637ec9ab6ff4c009876d71c3657664540d58cc422bec2f1be5b8149972405da8c7059ff29e018dfcd658929d89a9e347a42d8b621ad2a4bf2ed8bcf2b2263bfd123c4b36ab6e14c49000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014531d9d62ea590f343842a8f793db7335cf783bc1d467e954d277aeaa7219409b5ad70093384f73afe41c2933a559b39b2624dd954f5a7d77795daf6dbd841a85c79b8902f0c0ee927faea126bc50c4ccef1f36d6a6bab9d77c7b83416fd511343b6bf318803ceaae94839d3aa58899698df1b5f14ba8887f7336991195c8fcf3bb03b411d3a101ca1c8c6c2961ab99bdec1ee4095b22e955e0dede79ab7ad4cea4560c295455ada7d5b23784f8be354f7a7b5bff5b0ce45eeb3fb4e1d9e4c237e14b9c2b0ddde32fa2d5cf09de663e0fdbedf09b5dfc18eaab6a8920d609e85ea5fbdef6ec4ee803909e567a46bc176186004042878e56c32b3d9af5722f03f98106eb63c74c06612395b97e095c6e30fc5ab946b0f8e05197a70982e642a6d137c65178f0428113394c322f12a01658019105265a27c8513f525f4352de181dd8e541be681386c16ac04d81d9e79d60ee2b31ae634f1effc4470a85dc7a588cae6ca88488c8c97da27d7721f19ea06375680419ef9d2734ec2a2bd900dc37e94ba0d703c8e65b983f4e536c127c48f7d370882eb142d515d9205fd2e5b173006d9e98770c169c415eec65d6413475f2cf8317ec2994b5e31c1dfef32766850000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0f1ee571bad520e00d9adbe163001ebc996c7203b888a4da6d7aaa49825019411575d0f168896467bdeb02cda2959cb6ad492f6ec11ae477bf9d8314dbb8e478289fdae5be28bbc9d41beb0863202f9d88aeb39b5c89f1732abc1899eeb3fee72ff8a0e7e6e32e2f13d47bfe39eeada27b032ea61c69d061b0af9c49cff2fe0acc9490d78d6310b8681d8b20f003b4cba92d8d07239d48956d4bb19d3188d117adb23b23123d37c335ec6e9e09d37eeaf3505abeb2b4eb763341f38a2f537f841a5ae85287e447495010bb3de8e16ebc0469b1df91c6543133e7d1b12783f6fef6df4dfc5732194746e93cec56ef4b27b7420c8bf9025b2fbff187407b5ffaf5b1033d8df89d3ad17ad2cb8ac60ff9a494439dd02d1cac5c8c6008d32cc5867a2aa7054b704898d97bfeaa47426bf97113821fa20352c407eaed25e5975634318a91a6b7126b022968c77054bfbf73358a75343a66163f838e3dc465e0c05f8e868a9f566a263d6c2e459c6dd748390b7aa4de9e3a10b532a30452f44fb460322007607df8ecb8d0e0033281ad51c489b188b1133110100423c9d8c277c7a74334668941cbdb507ea3bdf73f600ae4956ba0af115943bb3fa32421b56a7019100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002367c20d32d8b59da3060a0f75715483b8bd2917c5127a95da22a1022ce70aae4a9c4d196064331a83c4bc17ed0bef8130cfa7bf09e32d2d40baec5ecf70aa28b56094766408b1ea7887aee7c9f52a0724a97054b536b9a914d3c12da3f9c076600e62bb962dde950b353906ece80e80099ec8689edd7122fa7cfa6c7b5560142bcd61431cab461beca00b198328c3368ceaa70268e58e2089703dbdd665a1459d1722e63523b4bf4942910221b5cfe1b76f1f7be38bcdb46aa0ed01e0dcd4d2d78ed727292208886b2400c944c6c95742549c265d5a4a8414c6793222a4f7dda1f3c8177d882547351bb428364d40984a75458b448fdcba0e5e166c9abf33c55e7f8ef114e52ad63183ee188e93d75f0dd528041e3406e8b83aed2a5a1835f276a58a3764ac4d455d750c624ccf580f1ad470db9e098a33df4851560326459da425d30b985825cd101a987e8fc7cf42be1c0b11a09c8ab0a651d3429327378dfe2e4d744102e56bf32d3592747c40a7d5f2bbe2a1cb28b1bb5d96e086588d0a4f83097ebfa9582a56b08f848f8b3d3f19fb586a1cc6e6f9a5fc0ccba30fdc255c2164f49ebf47d3d7ccfc82c1efae7dbcc904c125929e64891ffa41ae950906000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f8cbabd92574a1253436aa3384f6accc579b11d90030ef754edb20135aa82044ca3165b70eb94e5325b00467373a1dc4f27d3e8bb1550bb55d500437c94bce91bb51f6310dc5f4d8d884c89cc510b5d0b1b607624be0f700051a8f9ab3da4c141a247e55d9367e0d9f8f85a5123827954c8f71a2406b8b0fa266f3528a7a89bd467e09d5bc5c6b640124fa096f9524e688620e30af43cd4e17528dd3bf5f39d019cbcfdb818d8495721a3cee36d1e179c3e559c955e2c66abb412ec087b3c88609c43c481c75af1ddf625658ef10fe26fa6781c2fd02db042446776478fb738a92f5de35d241b2ecb7034bb8b362dffdab46a2894e4f5c0eda64eef695edaee59649788c171881438f92e5d06467518bef39142b4dfe70498746368505534236e8fd59c6f5a972bc9dfa3b653764bbd3f2a4adbb55b961f1f9e27c2d52e00551bf84182b63b49858436ae68fa81ecc49eb405a4854aa97d8199f90bc2ce1e213bd62ae38192c99dab754ba73b3c17d053a48c579c7fc0c9222ab938f646c85880ee0378f7498cbacfda43c2127b550df2d3dddbde3cde05197fe17c078c49c67b6d89dbd979087462ec1a8d596e0061b9b32990e35b0fcb0119956dd229f7900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002120cba1735cd0607b8004e3d0859290ebc291773c38880c0661bca675f0b25f2194c2109812d4400c3de7b0be94d5260164da838bf3da9dfbc3531f42cda4d9883c5a9f3100c22f7b90a8f171a993ee87d0cb176f947ec92590b2fe1cbc82410944eb7b4caac2c20411cff79050141dcf4ea4f7bc079f573036ad2e1d183746a899bc8f36fa7ead7e043336914f24e79da2efea0c54831bd4d637ce245f3c336494b728da11bc96a27c6847fcf805af9e1d3542c5cad5252ab6a221f16b6576cd28eb493e0284f568e41597f22efe933a84475872cdb11eb82170b2c462361633caaa4d9f9dc7e3c6038428dabe374020bd1cf989f239bf016a55ed3430f608f54fbaa1e520d4fa2d8ef7090f183eb76b7e58cff59d558078ad2ed312ccf09812c51c59a5983639e0cee11544c28ac6a3e457b2b64fc1ebac3506705e1ee8113c30231015a257ebcbc2f822b48f6257590b536e5159670b45db7a8ecc91fc1ed4197595b379e34909b5de55ea344e0c80202dea1fe9be2579c4f5c50912aa9cfb8d0005d5ad933a115d03c861cfb1b544e9fb94c02bb6006beb8964c866a39f62c9e16aac4cbd4efd15a1824732d4539c5761fb4981d8c29f95fe9f9b74a57e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011ada9c54cedbd2c3e40b9a7772420158bb89c612e2e089b93acd58f64dcb8869f3c6598f4e8d4d7b3e2bec8dc83142d23f2c140ad71ed7414041a4db5d19955170ea6672267c56947b4e8a743b68c578bdfc4b4edb287e3f5bbe80349c29be039605e3e19d20f5b1d05a945825528c5f3166d8645e8d8b05ff88bb4a521e9eaf543feb6e0ed2e1e86f006f69274adcaffe82b30b30629af72759587f6b94bdbb26812ca0412c0a65e756bab0c9d8f12769fb22e739affb31d0cdf22309bbb1fe8de2e3ffdfcaf57fcf7eecb9dc932eb4b68a3ce4b9479b629bd7206ff27e9125f790fddaf8b329ccb0bf88e66c49a20d180296166da52a55d54365c89408cf4cc6b7aa69b272d39fe8ffd210110f3470f2e36be12defe86dc398249fe9a35151316dae090592e69d43b03d9701ed1da870ba280aeb5a662554df950fa2f3e227c41526d711d52e03e292446a2d3d265bed8e97e3eecc396f26c48b66cd63bcaac620641620c257558947ae4d6084d22cc798ab2e872f8e294a97b4dc1d9ec78f106209dc88831b8a5bac6cf582b6d8490c7ec1c9a490311488fe9427ae63f09c27a589d40c5dd4ea40c5d096ec45635ea26dbb002f8776d97633d6fedbcb7ae00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f43c36445f21345df51c00c62ebdcfd87961c6b4fd139abfafbac1e129461922a441d20fb2819b91502d79c328c35c2591791eb36fe2491a37b1a20d61c8aed94dd213102c14443065b34115c2a521db5f81c2ccb588f87df53a9e6005e4981673a8035216e7444d840efe5d0dbcb40bd697e251c67958e963050492c93155e801a1a567e23f0709f8cda2bab95a0d06429d5db0407f4f04421c8cc5778528f9e5e8adff49e10022e159bbe23dc06ce6a45a7c59027cc651406be2c997c7f537b2683c6fd2406e81d57d3444a27f49fe189a63c50ce80b2c3e5f780470362897a443e23cd74b1d41da1ea63e61da3081954262231381815f4d98a80a58cda667d6eec81eb2056f990e5df46a33253990bd9ec8aed5682a4ef4a1448c9aa301cb64cf38f27baf83f5f7e469721d84832d41549ce753e4568692ac4562cc3e80a1dba1dd56b8f96a8da7ec36e1eedaa8006b4f00a973a37e9d14915f975d9cf683aa70a42043fdf3b1eb003224b4b56150cf8e77b792b5cfb6dcb95c6ec7a63181a9d1961baa83d8bb77d49eb63e8ae8e1beccbef55c12692529187e559d4d173b247f806602894e10e5485ddf303c9bff871a1262fdb0599bf80d40efa88354f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a35429ed82fe8d55d224a201b000dd0b7e539406df4f08c3a17559c7e8b8ed23f40b1b0c3d567910d5529d84b50f97dec631eda5f75a911c39c7accc3db51f906d1352dd9ecca01128c474fc0f45f770ac36fe9b06b7ae827adab12d3ef59a36767d2e66ea29452a752aa37aeb4e7ae79b5c8ba17a0934e45ebf0aecd7fc2ea901c97e27a421ab6bf6001bc1d2e22856d3a4823dd6ec804295655b03dd15d8ecaf75186270a3dbc3cb06248207faf1b7081827f3b807dfc041b75d6eb85e08455044587d11d32f52b94a097883427c69f1eb34fe44481804d3912f4e82d579ec8679f155d04181cd7564c15279bcdec6639138869a59a1cc276c0e1b31eff8104dbdf1847d44987c029fdd7937903d1ac5c7f6f728512afbedcd11a544095799cf280fc7b489a2e6229a3afb7dc7ee92468a1de48162f315b059921d5860cae063c810a2527f069ba0364f7b4e3c9067b14b4e1820d535cfe7257a511e5f81c986d9c9fb97f02e789a447a90c4b3aeb6827801e4bbb00c79e9a4b6700095de8d65d0972467b4e9caaef11ed040d417b5f8cc7ebdba2c8f4079da56f83729de312fd3caf877e3386fe0fb97662924175e0124bfdb31f43d257d4c2d096ed6961f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b75534c2791703852e7b903b4b6b8574efcc9912548b87fea7406f32641426fbb4323b5dc2e182702813a0cc2a261408888fbe12d7332ffd68a45605815cd489620be8bd516881ca26bb918477ef1ba6adc77045e754e737ed2b83accc699136624d8e22055aac40a482f9c8699639375a153e26a16ada9207ca25fa1623a1b70a9d7d0a9323e0f7bbe62c85cc7fafa1f980c4e2bd028e1f83177dfe08eeb9a93890743f0628ff710035a1a58d5ab878ce1a03f0eba3a008ead5eb1571f4ddee8f3188ab8097dda21c912ef5d402477b2bcd3bde103ad03f03e3aee4b9cde6c91d7ac42bab2712b6155f8d11b42057150aed736ce4cedfd830ed7b5e7c61052adeebf44654643d782b70e28f0c9703baf446dc8cf7ca80113b0f69da84261f77ae2345d2234682dc9d28747ed1197cc609d8597547ae637db2ae70e1cca8579619f11bca35a3108562d521a47866c633a37dbc9a648d1862959e2b4911cb9446e315978da09f0a9d54d5929e3456a93e4a349fa79c1a744d1049da5a78326b456ce1a9671e7fbaed1f5897c8a10ec44edf1c17d8e8c35ca6b0e6f67aeb042d7716c5ba945b3b626cda90ed9cab73a8470ef20a1185426c8f3c82c0ff2bb3fc000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a1345aad6d03ab88a8871bff2329290a22d2a1bee22113236f97daf9795bc127762f9f558ee88297a9170d97fe10cb169b38fdab21b9984234a67c6f3fbe891fa7f6130864fd34537cc12a88f0ee9c267334d78951ac30fd13675cba7341253f20191acbd6174950ed3f32c31c8857c09f1a990dccaa89111b22a96c5893c9d4a1cf6e25599df6a241a03de7aaa040beac0144a6a8e724f69c322195f81f331dab1b92ad8f1bdde2a28855e58501ce09a6988e521c3a64954b0797be6fc3f0a1a6daff7de5b86ba139839fc755e308b7fd2fd95b1213766a1eae806d863e4757229bddd04b92529ac963c6510e1b1e7102f7923c01eadf31567326a317d54270ce74277a4d448f0746e8a49a6d9b6d29e2ee2714df81e0d8e62c2316e79ba09531bdea5c04b679cff9e51df5b6c16ab87ed04ec6be9e7df9d46ac52f9f5ee2585dcaecb628040118f08507ca15ce90b4204dab425ff4154a8c8b7bf7c3cda2f1faa1634af0167a0f8224f33f8521e7442b1ef841c624765410c1b0cbdde6aa713702c0623c36f4137e4cbe9f47f3d5e3a4edc621a3d9bc8c3236df0611c27933d2976b613293db510e13d0b1c2e61b02f38ddbc273e404269c3e4aec59992660000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3b5b6236af5e30748e5a0410c27b0788645d4c7dd565d3195153f8c2e72452680766179effd9c729719673b8ffd28bea082d52ca335323ef185e5a7d7830e0e4ed2678103c669991f92c7c0333feb99b19d23eb39bb9c28aeea3342f1f8f0eb3af18424ca8d531419f67ce7d34f513971bfe0f2242036d694cf36212da439a7e91fefa4081e8bd555484fba3ca7fd301745603ed003a50f4dac7c6fe7bff4f57503da96b5143197c270b787b13b1096ab38f2b9fcec9011acf1d0cfa12709386f1d4ea4f25ba273b2a1533ab0718b445c276b938deb37c27b3d7031d0b91768c12470ab0355cb89accd6d68e788e9a850f09bf4b89a0d927157a312c74a022f56380fd8421ac3fa1615cb383dfe8559f95b90ca7207536849667a15e02c20986f52dd15ae4c207e9bc350285074b75d739aad66d7bf692e0a49fde185e21f156f820505d3b872ddaf88521fa7f60a284a9bb2ffc9bc1ef80584018e2498c047a00c7bc5096e291010cd6d05000fe6f5d1a09c2ad612d71d67f629057bff9cbaf1abf96329b2fb60ae70d099b8a418c328e32f8781f642c4ccfdd464da21e8e59f4bff0cf3ed06bbade5854e6329257830180e4deb146574cc6aa65379f11a8e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a50226574bed7d2b8375ad4b1be88c5784ad149e44108c4c0a98cc593a96c8064100d2235f0c0dbf463f094ae8f7786197f023ec71dec2abafc83b768b36c7ab441bfe78b048586611cc0cea81a6300af0e3daf4c43cec8857530099dc0cdf895b5df8596e79ab2c678e48763abdcf9c8c11bab1a2ba65ca9e5be4bee464a2e1be8e5079c9be0dbdf5585bb460dc38db3f916cff9b35382cd0bbaf4bcdf2321843e9721390427236f5cb339d009046a392847e2954fe746bcbcabd48fc1292e37e8ea1e6afb8a990247a745d44c84356fafaa74e2a902dba78d510d332f9db685769e7c24bca5ce85d409194d8da298b19f056a1d07c8866d7c2fe9cda0d62bc35ee07c2a0267f7b5f0a29f59ba67803e902307c30837abb77798c565e578e7be1b1a182c3f5812da5aa719460c1d35c7fedd7b061925f0d4428132ac5172bc0bf7c6660f5966b0d2c2c318fd3b3c50a210acf7899d3e693efd137f8b349a002b4f5bd65ef2c6ae0960fef178077b6ff15739214e2d027fb2f25fc19a35e45d1ecb96489e6bac32746b13631311142774b1c42f4c92b989518b6c06a39a7d584eb7028fbb03c81ebb9f9904346cdedfe6c0f4eb5b9158f34078d9a87f9602332000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004f77ebd0aca508fabbf804b8091f27004dafbbbbf23fc0f77dd31bc5146712484851f4b6bf6ec394afac9eb3838bbd75eb3f5d7151a224730333e8d0906810f8465d1371c000ce7f96f2c0590ae6bc5f5b58372a3315c5385e8a7f30b154f69a83821d3b05f5895b710927f192ffb7f853102e4bb97775c06d54b59a39112022265aeea6f2ac9939c9ea869bb6dc6f9d93b0d6b419c51324cee9e1bde156fa0659b6db9717e3d862715f89ed9cbe22401e3ff8b802076ed834b2b0e6ff8eb3a13e93126c43674662adef8d3cd1c9350952f431ad6b8cbd4c50cc41e51beb469c10d9e2d7273f78c2a86fcf400ae82e3b3490849c04505c03cc8622e3ffc35e3081e48cdd84725d13610064d7402341401d9ed8d3361b683c6d5f5386dbaee8d36f8fa8301f040851ee215d37801b054ff1b793c1f719c9ed95f9676cd426cf87680497db671d214493ba642730d4ee1f84c19565166e84d1b592ed178660393593a2324fd04ce08149d3c0f429e54a830d9747672cba4be1e316a446144862d13e8b542e05b5e0dc7b13c774333bf2aa6d5d8056406d5c7cb1bbc4043181c58cff30afbe488dc46a455606e0b7244b16aac814148152a704e3d043b7ea7ef630000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000230cb09ea490821920c1fedb6cd895ff4d64724b9281a2939afd255ba096352efeedff5a86cdc964e55506f326fbf69f3a20314b10d8504e8bc841a55d48cd86556c382917056f6a174f9731bbb7b220a3a830ff18bf92eaaca46f15bb7944896628ccb60548621ca20bf7b193e12ffbf418e2a3d40f0673c03873d539c0b6b6ca5fbce052e6daa04f6863083d3083213d2c5128d310924afd3944680b5de1fa475ba98762731e2c6199935ce59f8f8c1f61bc31f32f0f6e93b70751bf72fbe07fba84d9efae221233b1c79e70b016a7d4cc30213ae2d024f35b66c72fd943f7af4729360d4b25d472f98be5eb4c95472c7f5f36524afbe9d3e45c9aa62b29d0a15c68536fc886aa6774a1c949cc396f09e7fe6faf4efb6d509e7fa641ba7628d206336d2ef860d4c38bb23294f539d193601af9a1414ad1f6f3fa863586291d3d3141532745f95daf7b240488a99d0d655428004e170ee84196af11e4fb7f0f99e4e39b6c1b7ec689459d8972baa4faa8a73ce7d1fe9b4dbcc9bb4891b9f5c65ebe7705df69c43f2f2e3ecf1713c967ecc27750b680302fa036beaff3763cf3e7ca29e7317a75995338440c15db8b5a1fe4ee4b1dc13e1d9b7c69aba9a545ef000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092ffa78d27f4aecc833eb7492b75f25535d4197dceb79452fe619fcc9c004b78207a2b5f87a50e519720347628c6b6bae5ea8874eec60c848dd999799bc15eabdb5a9bd2494150c25ef186ee6e3c78baf611d66cd1c6b4dcbf094a6a492e137d3a76b8947c7c81469135a10acf05c21f115733d5c716bf1a2abd7f5293adbe9cc0c967c6f23e2e71e42d523f7a27ed38ab91d0f4167c7571e950777b1c5e2633f359278b6c2a5a388c8cb55d986525b7321c76b353a5fb8dcc8bff073a455b8f7232a7bebbff83e63212c657c6a414b75dab8542474b9323440963236188e8fdd87f24edb1a2ab76b53c6bad2715a22ccc84461ea1c88807129c1f1912d1b04976e6a7a04d89ec2b8e8c8e8c9b8bb8610ca18b047021c623b834a5a1b81902c2500760e15443f30fbcd6e2e3257f8c8d6a5cc75c8f31273717e046eff3e10c3397d262e5721064f086eaa1ae6370746cd6acaef743dc2390dbe470881a3788ed008003ac499b3cc8cb0b612621fa5f867cdcbf5059ca5833e9f5c89550348283d2c5db7d55f242119bdfd0e6e64c7b5a242fbbb6f2b66ca4d94fadaa3bc053602f12c6a6b74af3d1c1da289a5eb726d130eab8501f1f35cda8dc2ad7a847a88f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000257b7acec2c52204cb747247e572ca184a1bd25e3fb7198602dfedbadf82d7ca1125ccb81cce3e1fe5e24b48e7522f357a893a2dc570d0ec1da65a5573d466e48a52c7c8834e4e7d2157aa3cd189e8af2539c5f28ddd98f99529f45bba758b92d64d80313c658220555a4d0af4b654d11fb6963594b5dfb150e21d231e58047abfdb2762c663b42a017d08d37eff877cc034d686da1eb3157db6f7093e399dd1b38cc2ec5643f905d042f6e5da1a8678d41834aaca56c118c6b9f5b71144f1123e43d752a7a29b163576744a54508c4441700b4fd5a18b6bd9123019cec1aacb683394afd1e569c78a60cffb0d9aea62a566dad62699e2fedd78df45bbd3d43f4d5d4b44de18b6301224d397387ea0fa06ae9209b4b34513b6fe81224f1006c94374edb5c95f18f3e90a85a29b308ddb531cd03c39f0c4ffffe5e2120e8ccb44c761535f2e6e36a584a80859a4ac4343b6ae616f38798895fec77f8d275d9005c20167492dd24df2218afa929a0ee31b77ae39cd54e0211cec57a3339a3453fdb21973dd2f78b54473b2a8bcb5a5279133deaa66e98d1def8d5b25093ff35acef1d84c0ab68229f8d946e292f2e8c2014d907fc7639e0c3499b637696a26b70c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f0f353aec3261e96e7ba0879cedccb8532f74e944ecdc4b3eec8f142d18bac41d80449c4582fbc4a0e8f22a9ce3beedf3d356ee698f078c9ffc9f676257238a6ad76cba2bee56e352ceb524693da70841a500508fdd5bf644e5258306ee781a04ef76c26bc7947fb8d44793176a46efcee42e292e6e61d16b93fedfa9df9816868d478b9213f536113cf7226ad37869bf9439e93ba8c946b1e741a0e7391bdea603ead9254d3a893c529fde6381e7ed89eef88b7c4aac218a5f84f32ba513c61333047eef5812f215a62f0b513188078d6c161f3cfa7981aaf01350621142a8cdb658798c1160e8b404e6edaeab3afbeef3aac01e7ec5c2bef8dc4029ede85f09d13247d89afc40d5f74cad793da6a7b43b2d53ae3f442632763bd6d14268fe19dad2caea21f5e6c54f49ae10d5d9c6095eb6a37b52d1f013e822b43f6c570be7c4e7c7f4d482445f3c15d8862e90e197311b9e5ebfbd555ae25fc81a1e5676055554b2a0182c855f610b87ac229d851f075f5e86caddea60f77acdb61bf14a381416aa80a97da0a601f84b5e6687c602f83bf3b2705b34c9c1c62c4302dd5fceb577bc0135889f0ca9a8fb213de4d2d0c89bd551feb98f3a8477fa18d2145c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080993ff14603473b5fd09f7fff4fdf3b3b803aa17f0950876ee5452f4427c65af84bec0953a50a07be0ac39b163687313a3424beffb2f4221ae952b296c150ff7e2eca34c71bc4629a5206d7a09bd4c429302f07391125f3dc147ca32fa57a326a6506024ffb3edf991f7f0fd736b720400a5d797dd43970cf06898178d3051e6d69f347af2f7e293067905e4defaefba3fca19fac7f9f60ff6bc2de0347e50c439690414822563c8ae3fa87acc273c0ebebd93671e3d2e29b81e0b7b9a7d65866fc6c8fb721d0f80740a18d4ff32b76964c034930173e6cc2d77faa074da9942aa86f926c9410cf2d789082e716979812bba4404bf533352367135217393953db362aed9785f5f6d1efc0bc78cc8e4f82d6aa3269e375741d3079f1bf21f482ff0d8f06c8d5c0490b7b32573e6c7fcdd121b5ac0c9667e60aa0f2412ca4ee23bfa193162e39e19735008cef3ffe7a0c39ea2114bc5c900b1364f956ca7bb5e7dc81f275d4ee132c1cb176c00916c18730a1a5d85483e23ec0da6d63a70f20b4a2916ccee8e8ffae8b836396ea2e9ff45f604ad0e435570cfda50d964a538dd6b6c11205509d390ce2da7c7ff7c9a5cc0622e0dc4e3435ff2991836d570e3600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008fd22d786336d447e76edae2643b3b42c4579fa1b137f489b7b61f15b824c47bb1971eb4425e36e3ad987abf4d1c4e059460987d54653ed0e57d26460f3fa0f700c76daf64cdbddf95d6b0b7529a9d2437877845611a65cff549ee88f633f4d78685d6b65c21f8a08fc43b53de6e4b3ae8cabcaa17e16b6b197146aefe204912cea2cdcf4d2c0c5954fa30c733277a9a57f1b3b51acbabc9190c479d9f010a98634ef43cb82322697598464504cfda3fcfcdee950e50dcbd6c47ca18a5d592791fba508f88681df8455f1b587315ca4648fb3fe5b867a41865d937db047f8309e368c83b193c2416064e27065ba362a88d735f5b7f0d9798ae64c9cb8b5da12699e075f72e1824e274a4aeda9d7c46ba36cb1c95093cd957b9532c5cdbab375dfffdc6dc76eecbb28098df85fdbab462067f11e2fb40d3322eba6100a167a882b1b9f202c760789726ff212ae505c75742432760315e2e28415ba4ab0dfa21149cc14a656a830507298ab184b651eb3511c97c2cd3e95b1cdd30c5d7a4ce2e86217be991f285e1c5a7cbaf9c715b1f6b1b9d84afb12e178df280e476476a26b596189c29837ac2cbb0b5af1cfb49a198b5ee6b17649eb5b3b505d5bc7dc759df00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c3cb9ce76b1be7a68da140016bdd7dda912b5e40d46cf5747e3eaadc1ce112c75219a53fb17041dd55f00a3d03b7ed5cc5485971579297070df5e607940e63079513f9a1cdddf3feb14fbf63153e5d166cd505e60672a32ed17fef9b829eda0dd7aaffe004daf86376f32858a6b4f337252c757c9785ef8ee40da16fb3fb353f5057427f2462fd7837c4b1d839dc34257d3c38cacdfd6065046aceb0fc122b4278788028c52ae7c080c6c9eb1fc868cbba7508c98098162c122a406c29b03300aa450a2bb32c0d021aca02ff20a17d4e3c8333f47fb93e46be9f6be9573ac10e8264400d29bf93730b78765e46822748a523d4cd5db6f74328189452ab4c200acbb7d190bf0c83749e85ec32597c276cf13d45bb3d3c028532590e18cc6f95211ef4b6a6649708920efcb8566898e225767516ebf0c402cfd4fdca338d54145a937b57502ee2430e6c34c3a9457800d1e840bc608350e8653f904021e0e47d970bb89ee1dda6251bd72a4b043dcd019344eacfeeff423c2f91e8e467305a497cc40c8e07340f0ee950baac78fe596fed489cac4f5b323c67265e29308de6023108672536e31a9876ea724cb51e8d131b5e963a854e4b57fa2672955526c1e1d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ccaf5cc384b50f39ce75b6dc86829cb0f7c334eb68d5bf8312aeef6a45236d08a85c4121f1873fbbc8f135d9b14a7d169e4006825abed08824bb75537b731e437ea190bfd71a90673597028c21512406f283bfbfd026b0aa25addfc0047975cfe5333e934a4d91cdbefbb86d076f8a6364c14f4c7ea8263ac2c58fa3227f5cec4d661d029104dbbb21722c76ea9b954af9b9ab3bd57d46ae7eb95a393bfc23cc009dfb9466f6eb2217b3496eb55fd8fe1345e24c64254f6a2ff38a2658c4bf3cd2add5071c6ee04782ce8e5171fd7e4ebd87825c6bb6f2799ee1ac58ae9fe9fa808b371d1d10ea8ae37701af3fdc073da5d570d7c12bddcb02360bdcb562922056217518624983e2341fd55f6c5f99600859526254f91c18732204fcd3d4f7dfb4323575f92227f519dc1e3e54c32ef68aafedc2ba7de67ae1b4c5380955dbc2fd9101436b2b596b9f6b68d480aae32a728f55dc2203a5f2c7b4ac31f6108953d922e8734ac66dde7e8284b6495c02651dc030c6f2b53d3b8c1bc93f3292f91d5d4e63ae6f2f74eabcafa5898897f60d2c3fb2c2c94e5e9f15f2efe2859ffb8f09b2eafb8371e96a2ff999540ec00f8a779665bb47c24f628db83166b47dc7600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cff69b6cae12773a0656b13fda9546712ce1502526d3b7235c169ec2da92bfed6a69ddf8e5c230676ae81abeb5cb36c58cdd1e123d37fb743dae5fc691c9dd2ada611c02c6b9b54dc3114c5c7ad955d5f15f9683952c63c1e342fa59da974c918a83d50cf68f44126f4398ef4012805667706247ccdee913bdfe005ecf248329b276c53f085f3dab9eafcbe3516200788e3f5c7389ee15f71760d3ef158ad40e4fec027642abf3b15477cb7a9df695500a174c70f294cdb70e81c4a9197b8e8e3c6729aed290341685d53504302a00c620f5d73718025dfbaf3547f1818a6e4e8443149900cf78ef3709eeebe2cc710406c22438e4a6f496851c5346547c2fc9e910f92c53379beaa77be3790e551a5a666bdcd68405cd8de6dc2266950af977b7934d11aafd99de18fd1b67181b58c64657d5dcf8f64089ab28806ff3a8bd2c176865f85fadba60c49b768c614ae0d5577c005a5036773f345e9d2f4159c6f28e78b2e80ff61bb5e41e93b0f6a2afc11df246f5636c056bfdb2661879d1efbccc66fae636b20600a3e58f3c5baf29965e237000cb5f1a5836fd405e6da07485c2a591d476bb5613525a0301e8c2c4f2886c20437ce64311264f0104f2fe3050000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000816a3c45df56694d1120fc071e6f0ad336aaab4fb9f349d6d33068cf9b8de3c3f17635817ebca0722b26e5bed59e2d4a2e2b1da981a085d91b04293b7dfce4a2d6d052809d9bdefbe4dc31c895ebee703e146c4439d226dba12913a64ff433df8a99d9c8509a2b850c46e08650b161fdf9941f7164f5a0327af34a10e2c2953f0375d0ba931cee24811e61e8fe70d69ffb56f5ea12788a6aa148845469c5e923d96e6c9a86ea32029ec5deb762c35d98b34644e1f620d8b2d54f5a323cd0e81f78e73829521d9f4c10c908235cbd9e13b3a537728ba0ed26fe1ce0d9883ab83b7bf249cb771d4fa9712db2b57e1a6c622401439b38a535d07d25fbee9ba63ccc0d7646761badaea35ccd3e012a61cc53e5f23872be29e1b6b5d69b0cffc9c986b8f26c638f9d619a2e5ce7332edd13c813a2dee30ce7219f7a11f11f7292dedb229f45f127bb027397aea521bb6835b3fec20866f1767ba70efc4a96a843076bfa4c8cd214d64c87f7750f79f5fdeba46e09de638e769fc9a70115c68c0e3d7ee0eb315eb29f5eed4c769564092841c01447adc537104087700dd1a4d6ec317d3661b15756f405073f100488137641ae37e6855f3f61af25a33092d6f3df656c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c7cc98a3d99f37e18315c9eea3be9e3efd689d214a26d35afd68d4b0cd940ac5a027a3955831cbc45fc81232b25d4c0aa0db719d8861f756baf3c831816d93b88574ea209dfd708d27aa7f8a61e3846686443df5da0b6c8a93e3ee60edc5f772062c60ffce5d06c0b60df9be7cb3d732ca46178b8660b271fe172b60744858f6f970b5671d03a7fa6104c9dd48fd691bde666cdcfb42b1b5c0e344a29af3ed6ee0644490855dbf1f9465663ae64b97c70ede13fa34a6ac42f48d71ad0e98eb8ff8cc4e94eef10119aa3345b83137a501bd789d8799f74f8b77fc5ddf8652bf3445ecc2c027ceed3634f0d797c9466e3c190f69a43c7d6be5e708d6fc3879916a8cf8a451636002e376b9ad265d98af3d24b868f0ae63aa10ef1f965c6e261606760e63157cf17cf29bf3244d9c5230b58bb4d15b7ca5fe8b85cd60d78161044b6fa44b712259d80eeaf9e2414ee7d0b6229b33cc96c0ebaa9757d589451cb9e5f05a06cba9c0f8197208da8529bd2f7b12346cf70b8cda62d646781a6da6b1f4fe5a42c8ef9966cf0e2d0334f41b067e23f08e417ca94144ce49a31fa93556f2ea32a2413ac960e7934964fa94015ea5828c7ead4a0e8536241e993c22d2cdb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095c86766ee306da82bb0f27ba130375e3518f6f8be7c1f4abe7a09e1f4f689f1db66ad4853f4049b1999f6f283724bb2969f6006d4e3d1efefb080d630600563369a14e441c2d5e8f06f43469d0e189e3d1f35683d4b9d84a182b3b004d64b513756173f52fdd28ca087102547de61515590e26725b9fbef835678167562aa92278d5aea1ec36f9e46e93ea003e15381350d87cb2838915cbd4f9ce87368e41e5ad0d2e23cf7615218db7f2f0e720261d00b6ff6c318d9ca4bbdaddbead06e94a9c20c54f319c74b94b47233378de38037bd29d64d01341e69a50470c59f0b678b6b109ce8ed03562b5919f22b85ef54700f9d422bd48912cb3773cbe2d03f026e9506ef902aef0dd1e575cb9a3a123f11e41750a869b741b7034cfe41ddf1b9484efff89c5951252bed94dcc84641de52af033f79adac54f678f55f2f662e019c3c20576c85e86b719875e0ea6670a26eccf73c611bd1eeac61b8f953ddb329eb60d0b0cd46008ed2e9574b88c8a0d3d4ec4322db69819b157cdc75ef0a10432858ef1a503cad7cca07ee9d7cf7c8863c4e0c64d9cd639ef1bb02111575fc9126af8eb599d88aaeef6c8b9bea8b6312cf988d9719c2277a95ca597e288e183d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000301fecbeead8070c09e50eb165edd1a1cad6e40db05efe90198295063c1ce0064337eef5d7ffa0dddc07c2dc62be5694f4acb3f0e0859555bce4ab827006c08c28569ba8c49e3ded6cb9fa1c0fc8f28ef04d41519ae0ff4aaec4767cd5b56f1a27d2d76ee9a50fa53e547c26b5fccdf949d5ed6762bb759c638cc042cfad408adfdb76e61cc81fcc541cc681e70a261ab773412da0cf9456da766f90b61cd6e558c6c6c6e013aba1bd1c1d3f17a60cf364fc31a365aa5a8f65a8776fc2401c6e719cfbf52221b60273f3fdff43dc94367587aef83997c9e53422a3b3ac51ab86ab723c2bf6f443462da357cc16a22382e847d0a02ce857e7ce0d88a05c24378f185d7dfab9648649ba19e289d5c1ef776ab6f715ca950288e46621702217c239f4afd56fd4889f38bbbb53df79d6d0da0bcf44c60b247412cfae6e907929657d4178a62afd711f3bacb8f44270d2ab65bf91efbf1c4205ca882ff51060433b36995fb42da3c768be7b077bcf31034b49f6979bcf03f4d1bb8e18d6169f7c5d7fe3ae03fb0d97cf90d3db07c70ef6864bdd7ab29ef07e801acf768d491330cf53a213a44e578dc1f342f714ed038ef340a33f27d34e591ba4a44ac6897174939300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c92f4de2fbed2d6af71e45c6af6ca37d216fc6caaa13c7f9c819767ec5c49e82cc57bcbf2f29abeb6c85c3ce9d70726adf9c8576bcf42f224ee581e09676dfe52ff58e89a8f09be5a338f22c918643a4d24834899fd8b34dcb88aa99ae13f784c91ca8965456a57f31499e61b84f063bae42b91f01396db24f9b38c2eff23c50a0610d78419a3fa6546b52c9eb753898d0e3e329f68fff1309e270c9d98eb29b3dc8a8cc3a11ebf7bbefd3fb08925073160c1604bebfec76a08d48f7fc237dae62ea51181982f04250f6a5717f7039d4cf7f2cd708070aed5ba4bfd71c98e9b6d1266c95ebd6e6a5c0983c73b7f59f1b9bf083ac302bbd470b57f8355f6dbbb105d36a880419be47a284fe66aca60993a4bc4f547b84e4341543169a429c0ea5f64408a416c2eb36a2b8a019821f788912df929762ef087812f0683a4d8eef5132369381f1235674713f2d515fd76cb108229f79ed5577aabdfe66861cf94f81810d0bf6a64bc42da4cc59726666bd01df54af774296065c9a965978823aa64f6eac02e24258bec33cf8bdfbff07c35aaaa6f25dd987981035b50430935b00a11daa581c27f4a47c881563f1eeb36a801f90f0345be863974e3376c676746d800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c66b4bb9691785e91aed0e765476d605636e3c393ab8845f8c899aaff45cc6fd114bb0f07c0d93f45ce219754c47525afe6a188bd383ddfd53b0443e6752b563b8037248c1b745a38209673e665f36d2a1f7bfce3d7c9b3182e3378c5a94785373c0a8df1afeb9f1c3608eaf76ea618b651787be40f37d5d8ccde65f3517f5e6e23538557bb17b8f22ee6ec3314fb28fdb0ff19340e0d4224a52915da75f0adc881d3259284e13bcfb0b6b1760eb027bb7348dc2380b4f42dcccbb16a29d8021cca3b2d9e82ff3268f8303ec6f9de767671d53b3be184ad654c3cd8da0d77229e2a39e11dfaab8f068d0c1ddf9efabee24661af313819531a19491956998b8f1f4553abbef01f8f5dbcb1fce0be26bdc2f794089a40884fa4e189c79bc53a9ed4f248c47e9b101b407336069b9ebd9187fa27bedbeabbadd91af97b465b75f5148b8e8734fbac35f3d3e820eb7f79d43b9e02dc5f910ef6e48f3b71a12b532d3af551a8e7a73ca1b27ee6d0d8eca9687be3535e546945d307b7c5c19df32274ec9727595add7adf8ebcb80c4d115a5f1410b2db3142413b773858557016d166bb7d0ea720b69bf76251b6c97d6fac51b4228f4551c3be8c820103e39ee5c02900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bfd0444726e438a21c0ed3b07dc066803fe1ba846fb755bd93455afe7fc0a2e3e042353958a2fb0e5320754a2ebf327ce367834342508262c30e8a55ace1b7d23fef5a5f703c4c75a2662569319a96ee73f9e05fb70a1baf8cae900ddc619448e5a5307c3143198eb9976e770fb8475e56d558441767d8a1042dce9a78c26ebbe82bcf94a66e78bfaeabd9aac122d61ce616ead8b1fdb4b31c590e47cf24975e3af386425e1bf0d96df09fe7ea9d13c82e767d946cc434c9ba18fdb45631160001bccc7bd79c79d4bed63a1f4d95495be4b8c4cbbd6c5bdcdae5ec8fe19b8a607142b9ead0c45f2149ae41a1a857acf7931305d6a02d5f917801ea2076b6ea3d43e6108a83f2314407acb8878fa5586ddbfd701327913a86cbcc007822a8f17383ab41740e77f2b4fb8c446b9390bc817b3bda23c9c28560ab33a9000839e887c31c1271dabcb81ae0c2d5f329171d5d7dd79d57774b2a057084f6ce5cebbf9fbef19e6cee96572ff2b587079855930a829486d93de32ad2eeba5a2f9d26ebe019f6edb19ab75507f76a7ede6bb844c176d881e6601b773181e77583a9d668544815fb626c86c4c3bf73052036e5d67b3da728d578bdeb2df931002cf9fa15600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4a2aad84653aa39d1c1a305d0bd5618f253b38bc621ea645c8b0462378073337bb4e142c56eaa307f2020ebe75970b961435585469a0f1eba156303f7b56006ed6b5ea75fc5e5687e5cab30fd68689f8f5fa055f434d5cb7c990bb92284c9601c97111250e49126e77ae76c07c6dfea9df969293e984ef7a59c65dcbd637e34831e8bddd74f78dcdc38cebd45c02d9359e312056b2d491bacdab7716d58c4c8ecf63135cf17879d9e77752b9b36ba046830a3dfc5b4ab6785041b77cbc97ed0b59a5742f68cee6b0be81ed4c709068c2814d30a4f485184b9f7d16af3247e63407e8a7008aaf08fa2f006d212a5738e7254c3a393e847ecaf4e46e6a7b568de39aa83519a8f4435eddaeb700b5782107a046d70cd1b0eb3d9cc0d3c6e78b7f0df38ffe7617b8d5256c08a7f85dc01777a36bbc9fcc429a81a9a9a12613ab7372a387b6b7092fb4207f45cca7b38ae0f0b8d66aadcc320015208d73de0ac3a0e719a52593c1d14f5e605e0b1ede2562bb284f29a13612ab4bc694a6bd43c9911b06e25432b8d6a26c677ff9a7f8a727ccd7254101b79c511b95f714e8873e1a6ba52f012ffff7348227b07df8f0e2d75aec377cf99080c864552e67514c1ab500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009602f18dcb22f670e6dfed80c91a948e59753f90c54c95957041ae817127c0bf7384844bcf2fe1ec8967de51365b4bcc392a85eba3613d3a993de6a3a35631754a4bfc58990e6fde5126f09fea0154dcce223f97f0a77f53867595fa71f0996146a2246833dc59da3fb9df1bc43df03be70905ff1c651d6d4a5146ef8ef53afdee7d1aa8d50105ced1805766740eb04960da1c680e35ef818834977e578e1cbc37587f4ceb1b90cdb01be84d69bd5b7b765847c2c85910023a86a580138ae9fdc8d977ec9637c86fad2b2e5ed5ad0c0d056362fa2fdbb0e653478e3d53e54ab20e7bc989f06f6f278a846c1077fbc85486c0687311311d6c7e49cd16fad9c46ffee2c8eae5f20088d138baf051033d27a85e246bdb136480e4d26bb17d4ef700283ef11767476eb7d74970598f5cada5dd0b0945a27eb4e25e1a19270c53f97b740a11c409ee119c186c8f6e31c9ef6c446a7dd64a7b794eb662034d613af4a0271c8352f7cb190a30301a57ff01a7bc2a24673e58e0537614bd0da08e8ab9ddeea4c4dd1aaf929a753b64dbd5d76c4968e9b9a6b9e24adeed0cd7df37a1230394368510bd4cbe94d71e44889536263482a10fc24574c9130b58eeb65534f4760000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000926e89378e38797268dc464ca636b66c113291be4543907e1ec977e4ebecf8d04d5bab2157f32463c7a25dd27e4aa8fb7c4cad28e9f44823c37e6780a670469f25a39156ce624b6fcd6e013098fe8e1d998b265e390207541fb2ed9798aa28bb35b730d7b5a961d39a4b6be6224c9dd5d989fc2a5ac5d0d910a71bd6c805b6fd5b6c8aa9d5de11d90a1eb10379898484b09f080c7329fd07285cae87711132c74921a2358d7df5592d0e5a32fb1a84182a835eb7fa7af29a70b5e97f126ce079f4a79f9e470c3f13646a846fc138dadf82dc2f08f206b280a5dced114f20d4aadb9730679c5f46824abbbf8f6c201b9e5623325f6fca9c92dbe7062a5e15499fe8d32fc2de11a88b91a12355ead1a83876119fe7c44ff02e474480361e56df66088cab7aa46f2e50b39fe149196b0f25dec3b6cb8860ad4a2c42264777fbab9f953f281d90ce747487b7fe82144f208fbfd6d2cb8c6540e6e5af00e760af7b5a42c824210dd897ddc142444e33bc014dbc2712e4ac43df9122e4e60c65dbf6fbabbdfae5eac39b965b00c568c642f316095dc62b19cf481082430d86da7c371057888e9c6fcd701479da1dc55de99bca5d1c3431a860a4f8f48b3a84ba719c1a00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48400533db1c17218699cade16c8ae581f1225eaa53b8b598214b48df753a9e10ae2193a8e609ab3d823761973d33b8d3874a82a2ec273d564e74a305f23730e7339112cab42284ca0d28b3e8c545067772656a64e28ef8d97e2dc6728df11cdb42e0ceca057280cf93902604da48b342eaa9b58b78904d936a27f334a3fe6d8d5df045ad86af49db4b4e9195a7a86dd3ea7f0a95f7317fdb88f3145de6eff296de222331743d0692dabb3f3b3601d44dec845a1535ecba5489ca549896cda4e7fb0241e89bfda3ff084f9dd07c056af0015bb11510e2ad0da89cc6a1c5d5ae17a090c55c94bde5d961f30c40adbaa8f44db8ab84354addc56d4b7569484380d1bec07c7c85efd1679aef974a6467237ad7ad014daf6f2167e01fd384cf1ac2c6c071312f465e5136319a881ce678088abdc778bf2217034a22030b06a9749a9f331152f3462efaedaeb85627468da8eb22e41cbfb67be018005e31849ca27ebaa2a2b1332058acc7d09989217adcb3d28e7b6a1f9d4dbf157315afd6828b2581f14264d15f911e7126cfd8bf2afbb3276272ea8bdc614ee7b68d618d1a1f0bdff9925dd4221cb35e07d65a65e84168fd6f74c029070842742266c33e441e853e0510a701e6d1bf078a517712172940d845f8ec4407e60944e90dfbafaa953f7dcbb295a4f9ab09c6edd664c80295b682693049dea27c9d896c65bb201580a139f9d08ccca6f0610f3d050266703475c6a945a8b354d4240c56dcb1feed03ec8ab53165fd68f0451dec462304fac480d4e613d6223eb538a38c46b10bb06ea1c378f0b5a8fdc3d35898e8b2e37f7d79adeb2b4b297270ef9f0a8960f886693ea092617f90a3939fe5f4cfb8d2320efaf194d4767ff36697beb3bb308c3e82a5377261a04d090a2ce5483e2eece4b4c370b70ffa60e2d73dfeb9796abc651e5f3c6d52336d6a6744cfcbcfaa29b85f71f0ab853d25d50b8866de6c9677d92248b6fd9065e8cc52be88ed09212e30218c7496990484f8b3cd1d0601d9d49eb8b7655a60ee678a7839d0bf372e56b4662591af6764b9c6d9a19dedc4bb009f3ecb665f425ee01f9bd41bdbbb62ef6a5e028146a7dc81a627c1b1de87e3c1cccef72478a114ee3ec286a0e31eec1530b4f40d4afc31c430eb1b16b70daeb7b3feff5895c2e3126bcde8c94d800e48948741bb8ed5703a773dc9fbfe17ea1dcb3cd0b476b2a60fb9a0d8a34c9a5987270f58b89b3f44d39efa3ac7c61f5f3e7f1197e1dda1f0b86cdcc30ea7897c35176231d7f104e8280100559000e4ff6acab393a7ecf21e521b53a787d61f196b0bd7fa358f018992c9410142eb28165d463fe7237e4200399ba1c225429438cd835d07f0016c33a267bfe3c77744d38d3483c1213e62efafec449b7efd2b0100b46240cd3fffdfc03b2e2e8db02504515a3af28539f0169ea4c35f1faf26fb05bd4c2983b995230e7daa4a908f7b2bfdcb430e41388005309242e3489e928ae9a633bba074af691a6998ed2534e0b2559453b5494b42706035aa730d65fa20a571672147cc0652f9f83330467fc236b8f963f12ed7018ab8c602468dfb8afdc368ab9f96e96de0817e53c9af83bffc2a56d25dc37f70df4a61e0eea0a63e6050d6aae4f2c62df57d8b931a7ab04dfd7b2bcb54473650ecaffdc41f62e3660648153a401a1950b0862ede27228eb50543a1f9428398c20ea024e73d573f4f94da0f76970202e747440d09938cd6f3414e4cc579c7cfc1fe27df73fe1152230f21967ff17ad74908625ab764ee568aa157d0a9b601d9c0a7b0d4e8e050475007ea6f9f412f7cc405678082d6518759c20e01bf23287ca100adf4453fda86f067d37c862d44160187c6d56fe1f6e405ea159c6fd64ca00142bca86170184bb83acc10ed5728ca4a6eb0c8b83db54becc49954baf96543027ab89e6575a2458937781245e2698f7b6285ad1f2f284336883b4c8fe73476028fb08e5a1f6774698ee4a3fc8e420d7ab61360fd86b0cb9a3a08f37fe27acc11bcaa14c25bd216a6c23f3ab87e34404d13ff1366c044579cf1e60680b8d7a2102bddd0c47fd1d5c9bbf4d8708db01b25afd32f9a44f5b53c973b678007563fc075a894ff5c21b412ec6f241cee8d1828e3453d36b1cd874c883dba21c3efcd52093579994ead07658047e99c6860ebd1266d30abb4c32f31f96568efd0281621f1f4532e01dce8d8430a2c71634dc46091cb4537c114c1ef3c029aeb969de2c06a848a1701ee8e484e39d094921ff77c1f00f76886ec9fc26ebd2ed95b10d420056aeaff7b9f594f8f3fb5e853fe649e40cfefa3de1457e6fcea674a1de019a30247dd044b572c289b3b1f18cc07cb30cce288c14f8bc3f8c8cc26037dc60b31cbe2ab9fe205e06562565c38072b68dc85a8dcdcde3379f9866ce3289a4b70706c4832caf510dee2f3a3b6d2d1b54022393e11069d83aa0a71d76c8eb76d4051f8de2ad3a0b1585491174bf762695c1745b9d139d52da3baa367653c8ec46a0220175bc97fbfbc14bf4a45370c4253ee6b7213140c37219db043750bf9863b007b42545d2a65dc0f6a08878274871ab8544ce32c2ccf2abf8e11fee9612de451c497077adeef33709f9207f93eeb9f13a13469ce99dcb24f3b38da944e7e6e72d6a74ab2ba25ed75b7225286720fb1d6269552a4b5c1c9eab96b6e9f630f57f082b8cea7a557986e80208fb5c15d34e4dfafb44190d2495b57c9b61b6b9299315930ce494a4bcd65c91378583be1b8ce122d0f7e3296a3bf21164d7baac9c6c1da23fde155f2f3ac08e22d5103164d939e533bda9e5460b42888339cb3a7b4629973c7346f9ce2d6d79f99a68621fe5aa4e3c234020576d4c577c587b5b89bc402683ee13d47338e2c13bc0c2369ff49ac2787f4832ed3fdaa538e8bcc3698a0521d9f37e428815f90acf40a602f7c7fe4ff153f3b7dc9f8663806d7894acaa5618e4e4efdc6c9d24249ca5157ae11a21b7de8fa3d13e02cde099694cd3526a5005979f7bbd8ded9346f4ecbe88ecd5558abb46e1a20e89fd4379b5d4681cd1242a34ac670aa104eaf41feeba7fafa340e809b28f96b4fe4ed80576a9033737890582dcc92930f65ba939eb164cb36ffb743cc270f1e45e9fb6741c7f6ab902b217046f9ec80f832d212d4420b9b4e3a23291215ad79d9e89fb0bd293b2feb33c014ef285150052e226e340ee0cd3da66a5d6336bd51c583db71426a6f2344a380c7dac59b652f98104a82d3510d45b41ad7281ca8b145a9311a8d44d25ad82992dd236394d34b19950fbf265aad7b4f79e3a6c97e880a0f05ea1e316788df7a51fcf3b8e462b15156d9e160ef8479a71fab2908fa650b3ff11606b84a7ff80dc2facc71a050532eb4a7fc14ed708f2bd9a20aef61d07707ee09da76d079310792b5e017ebadd6f48e4b090071951f93a3bf047b796dfaa6a15fbf694cbc9a59a1bdf13bf7d1c16408f7a58ee83c99545e773773223849c020a4a7153eb8929f60e7ea73c6dd39f657e351bb47888fd61938c37f1ae3ba0c00c88e8c3b6fbab261e2814df9bc2d2295d03d6337a4aab046043fd722026616d06b514601d27dcbb1dcf348f21c21301d715a552ede71a7de70eb25f2c19d787a4bd0a407f8f3a101ff6729ee3f50d6a9f1aac5cc0ebdc6ecc59560c9a3ba42e26a458008958f4140040368c1d6fd3f1917167664023b765bdcb0a04a6dbec69ee2013a982af8ffa2cf8a9a9b38dfb50d400a16c7b5eef4492f0ef5eb40734d356383bee6b97b7fd079522fec28e393fb03fb464f6eed9277fbf87a3f0142329b07eee8712a8c142210c3f942acc9c72c6cf7eadc87e8a82aeeb5debfbff8af074c5edb4f6db1e4b2d7f06494205444dbf86cd1531d50a2057b848c746c592aef0d3c635fb1542f02cb296acf59e4e9af13a6c53956fbf32203fe1fc31eb59054d0a5bb6d81c88641288d70c401142e6fa7168abafb048b443b2a3c410af0e029eb490245ebb279e0477a44244192bd6f822a2dce759069dbd2a6313c2963d2ee882d7bbba109c480fc09e108ecb8bb4c9bd524ce3ba7bf67f815c595305227334e970655a2bd8f304583e5a561daf53f34b039ffbbc319b46401b9adae8f71b956057ebdc1c731b0c67aa1ed9a6039b2ee98946c8f5d3ddc82e34336239632bff445ad23a694320218f3d0ce32cf61952b8bd03acfe9848c30583c44ec5d9049ffa941c6095cff12fbd19f16714c33086a91291dbd2e8674adba134457b3c841b1ff44930cb3524093e9997f147909dc2d8d07531f1be621f0c91d3c9541489431b171fdaacda630fc7d04991ad69b7e13d953865fa0b6f5eb6e5550b084c8becb1cde432d8d7942f8322727c887022c5071f762af0b8a41240c7fcac48711c7020349931a651510255f1e8d4565888d57bbcdc8a0b3684df53bc9e512362e8687a45e3ae8e9e0a1146ad34f86eb6a4e9054075dc244e814c85dacf19959f8e96a60f4bd5237fed2e4c42cf9fba4c377a7e150049dc61188f4b66ec47cb1ce76172152d43eadcb01046338ec457284629778bb9c366a65e2ccdd1300c6eb7509b79f5b51fc1be732cb6527e5698e7d250456c0ee79c4f3d745f1ac65dd9d2ff3589b09d3313cd742e0a388cce1c13ff4f29188bb53812d8126fcc476503a3c7b0d95e0b58c1f8861adda697b3f1cf7d80bd214240fcabab9802352101eeadcfed8968696142b51507d57ee3c8c59914fcdca344370dc70d1078761bf3a4cfe4986ef51741cb5e5a117598d2f43e7c23b8edaca8424e279a77be91547431aa16caf7e26a50d4ecbb3041846898f916c9548b525ca2c3f51f7f8fc68c6d402af2d2ff6b625b58428b2ea63d4e8f779447f2356bb2b46b0dec36f9cfcd7993d44a7e582b1989e346db26a3b852cfceb7caff37cdb73f343b2355b386a6b037ae189ca8e5b953289cbd04dd91d93e56b69395cab66574a70196b310b3132476ab14d7862e8983379806294a10b480e77d9c61c87d782fc84926a468ab871d5c0d3671359ece1883d92208ed56960e99e3902f8b587b8be54cd9ad22946e262524e84e22829d274211940e05f8f5d95b0dcc74a16ad8f254528d6dd15b602c1155f5a3d3e0c9a8c855821076a496c7144ba287f3c275c73af4b98f0edaf4674d65f8741cf31f9b63a19522c40b7a90516f51cc27db01a00d6bfd60fb2b4a9bacd533ea21f1577f68d6f82d62baa941ec532c354a55e189799323fa1cd1667636bd31e38156d485421d8e053fe4c2d007e4ec935e0a2f0108ef1b70fe946c6f7a956dbb3e58c087afa0581e03f187d02a4dce7e877062d3ee767c936add7dbe1a238e349ae302df0363761438fcfbf61fdb93aa6007b1a1bc4566493e395f952302cd86535abffe847abb20b229aa5540246f362cfcf0c8beb64b6824750196d388c7babdd7f969a49d8c2a844f4bc10ebede4c40caa94b690bf241414498699df5cbaa821ffff358a859139d701e3167dd8cb82f4337b4cf31193e58ba8f399e9a10195ec9b67247f1cb2f6d3cafa5fb7f17d87f1b69c8e8e7dfa9f546b2d3cd8bdb5567d93a81ce2e1c2ab5516760755cc8672841629da5986860dc54dedeb70e7db9b628cafc3bea50222eaa68e121cc3a29cef6553c072df2c54b184a501346cad4e3fa2396d357692e26e68d5967bdf7c78c0b4f4fa2bbe84f99e05340402df3500e3b0023f58b2622604e585274072eac486edc2b18c2474cd73bb1ad8694576c2db6edf0820422003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000047118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000470d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000470a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000470b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000004729a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000047141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000004725e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000004712978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000472daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000047189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000471159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000004705ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000004705c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000004714d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000004703db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000472ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000471213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000471ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000004714fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000472b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000047305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000047280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000047223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000004717a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000004708858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000472618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000470f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000470e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000047172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000470b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000004705bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000047137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000472e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000472297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000472608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000004718373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000470422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000047204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000470afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000471998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000004728d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000471da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000004721d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000470ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000470e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000047107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000472f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000004709726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000004724f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000004703c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000471fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000047205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000004725110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000047283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000004721cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000047094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000470c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000471f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000472421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000471fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000471bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000047304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000047000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c3c8d04a2977b03c9b9ee4691f04490bee3a2f7522f1d017cdbf276efbe3e4c3c1bf1f3315ccf7416a6b6f1853ca5a75b8bb8eebf25bfd81895c4dbd1e82583e5660a6e570648ce734287b53503bbfbd704cf2a8c3cf7188275e85fe887fce4370384919a11798381d95980c56df539fb1cc7bcad92ded47dbdb88cf79a8f21aa0ead7e0e4df2b0db96590f3a3100d10435626c1d9bf9573f075052d3d41fad7f0e205977975f139ebd961c39d09365e770332fb31f3ab332dbc9274fe0fc7c6461f3e2f48534749f52b8fd300cb39cd8a3c9b5fc8a61591de6f613f468176b05f0b3ad3a0641c1d064ab8c55c52ce57302b63dec3104448eed49e63e7f52a6d3ee1a0e8373859515b3fa21cae39f21dd2f453cfb17a3d14230c07936cc8c31e81e86ad554c5f4f3d1c9c21842a6867ec114ec29c73387d6431634b72376c08651a165e2862079d245afcbb23d40fd76102789b83d53dcfae471e4f964d5aa92a61abd264f3459c0467a1f9b89b118e2758c551f7dc1c4f3568f4d9ecfdc5c52af6e652473166e676becbe9c3b82601f7f1674efd80c5749c313162c6a55692d9002c6363fb1f91d675f3748afa39160c4b700e776c1ba9b2894edb3c10405c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000829856e3a96f9c4378b23f165baa58723a7b83a932325e8def6e7df1add4ac1598f196c7f0258c6c36f9edc11fa75642fa68d25073adc2fb535240327dcfb8874d84c0f698548c35f9306b1ea3b87ad21575fe3bc1b7581fee7a1128c5106661abcfa99087685e778d3319729a91531f84f6b8d8b3f3210ce35cfdc89c93b6646c942205e0461f257bd1febfa7b63054415f80597e53d2230fa3e6d210fd83680c4fdd06b70426fb88731b29231e91b6d2a1566c013fdf7800984816cde3b777d4220c7ff6c7972ab4034bee1ee6a6483752b39f942ffa88e5254e18b064a3e80f5a1155d1933fc74801aeab996013281926210c3ee7fc9752e3f2804e9a175fabd6d0489773b641da519d2f7b061df671c1968755309fb54782e506166f5c980f4fed87d433fd05467cfd2ed77fe815fe575bcc420b301fba948f9bded90e7b9de215584ccaf305c218d3c629fcf272c3dfa1564f015cf21499ae5f5dd02463782ecf88c22471fe2335b8b39e4ae180d1661ca9257a21ed3ddbcfd93f77411a57be911dc794acd43ca4ebb973f77e1fec75910c6b34f6dea64f6e619470b1297365cb081094f32efedbed2675c71e3d33a389cf022f2b54595184ab87b134870000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000989a53d9fa12ba3248fb0e6fa1c68e6884ec8b194d3c8b0266f8e04418f849e996584c130ae91882383ffb1595f56d2ff45e7cd5eb45e5d087d5ce3613ca4de89102e0918ac390791de9f74f75dd0565097e100e7ae5a9ececeb69f6072af770aea254e15170118bebb286d6c04eba00892082229df4d410b605742bde3a9b2e58042ced3bd82c66802360c1ba6063e2cc7630e7e0713699dc357e0856ef3b7040c3aebecaae32dc2ebbf3788ebd06c52fb05e9b747192d72167c8c05677dab0669a62abd900249cfc7b97bcc431a33464b24494b4be6efc2e4f4891d46f9c1615b2e6e0b48e1972242a96ed246770eb6990d92ce3830a6132d55a5445e0d48ce3dd471aa69f0b88e8a6b97b654379b622d27ca3f4233d5e79f458db3b4c0810ce91148bb158c7c31049cf2acc37fbcf976277e21f9a2f4d8f0b6fed2bd3d3a67228fe7d637b769be0aaa6c160f78ff8444ee3a2d8aabcec10b7ddcc2add3fba103db68a824ca0a08a4acbbe8f33ccb83f8ddae34ee9641cbd07537086cb6f2ea342e8d6a9c5e89e6311d2d65398bde06a34349a95a2ec11ce34b9d4e47526dc9b72b2fbbdecfab772b4e349cfdbda6479a5e3041df3b50e3e5ba4fe9c413e57000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087a6ccdb18e3b33119909fa07266956132e0bf45415521af4e26f61eda562014d4d22d3c587a6d9ac05779ffd3375a10ddfd2ed7bdfc4acefb1f0aff50803388df76a8726867c68f3fd0c0a3257c474b36213be5d7c28202cf4110edf20d849d861234b3cf32683ff5e200e3202b797ae9f8a563c787123abd09bbeaaa911ce9f9a6c2dd273effbd8f8c141be1ce62acf73c6878728859d5b6e8a5f6ea2cdf0080b358227183802eae5d8dcf7ab3078e4193f05166d4574ac4c38117d98bc1f3e3af78ca19bf80b5b170181d207e3d22c6d2afb77011fbabe38e01cd242b3842a0b6f22507a9866f1fafa0670ccd48861b6852b5c7a8f96d7407a345de8c105a011e4c551435530652cfd2a2ba9c54b611d04c7546277b50d2e318fd75fbfdc672d973f0ea722d90b309d61aa26f904a14f7762c8bb0bcb59875ab0a927937b00c9384874c04ebdf287792c7271bc1f4022e03aa6264dcf30632d09d37bccbe61396297f239efd1b2653cb80382a2f27a461e0899ab08d5927a823c955b4af3b037bb055268562d915b6e12d702305e076c04680a659d9eb8147b66639241f488efb091a5704246fbd7def3b4490ba5d1a7589b5475a88d13af0a7319fdb85fe00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ebc5b8698c36ef9a50fcde171705552468666e8859473c40681adf87b79b386d43669b806e1f80df99a2f34bc18791e2d14d4d14135a1e3229781af170449e8a1c5e2064911040fbe29e91c467677fac05059b22442ab2acc8c87b2d6451925bae9a0cbea0ddc2f4aac78eaf6f749dd099963d77c931c152b6549896cc4bca90c0620bcdaa1339a4f58d5768c5246ff43eb6bca0f72fc8bc823d05e19fbc185969cc923d5033b5402e2a0c8db5bd16591f8577c180dd72b751ae1396e53f4df031e37686fcf6681e1dc504567628aa709c9b83a971d3f37f04b05235094f8149d4a9df47a121341b1b4310f3eba6f7c6d936f805e1f0e98862dc929f32de470757800129719e2f3d460367f84643e9bdfcd0dd0b62fa95cb75414d58cbf3c86360b086ced210f0f474c0fe74179bfe143957d45ed48993aa53c270448191795f9408a5bd28bcad8e0fffc11588ac5cf8c5ae1e9671830da7931fc03b66bf6fbc79bc4638ffbf36e63d5cd492a07f0a299c2c0f9b3ffd362eecb4802b3ddfa422cd211e462d429823ee2a1bdb12503eee71c8d474cc4c2bd894c6af4108c5a5f66956a32c753960fe1a5d1b90b38987cbab33db45605034f4cecded4bcda9886000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016ce7c88353b2426da65ac4ef38cf09269cdb7142ce76021f69c600475da62454ffe51d60afe35b25b84706fbe882ef16860cbd2c07205250d622b5a7eaea6a3e4ee5c1ab73f36ac3e389fb69a607083cf1477d389f1dde9f483d96c6bf44510d6f8704249ec1aa1d7ac430eedf227010224904f113becc7a8e7e6b2640d11184327d7d9149716b6dbe9b3195758dd359fa69cdc8a04407389708a0273c210762685944957561833d97099170abba6d52cfff4ad084604c6fa851bf4a8fa7f808f7e945c21b8b835b9de334cdd2a554055040fc528f7d8ff3e5e9dbbad17a4d03b778e878a743d87945b2910ef546249330b7739ac6211150dcb70e10996032202a1abcd09a3b1982e47d63eb27d06a339374133fa4ccb6a94f84c1ae3583854dc6640023008ab64c1515b4f66790e921ecdfb79f747bbea72450662dc4fef24ddbb7ae9a47fd7eaca4107fc0b2f40986f1297623fed7bd29a6651735453ae7e82befd9ad610e949423e4ad4cd7d4407099dca727d46d2d9a75d8d1a3e8f08abe6559053d243b52e03df1b5ba56572de42deae592b9464a2090b3d7fc5f40afa2a50c8b8c55bff0d8c732910fed01b804f181084812db13b3174bea6a11f519800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d5b5a1298e1f69bc14cade56c8bb813aadbbe9777f7c4fc2f2e6897ead55de3fff959b228e64714007a518abd7796fbd61eabef506954b702e765ad46ed641b6846be64bc71560690ad20db8e2649adbb0e31f391f6d51456ad0e2963081e5635ec1d6584431af0a8db549f66f01941a7d25e5a9b08a3fc4b2fdf6d550fda5a8e387cae49c47749238e3a6330b1f53f5c70fdd62e01eebb1395ecc566e528c63409a1dfd1c89f4b6ea08c90307666bb3a9205ed822c48d6fbcb15e9729cb747c185349c1aeae77c52b9bb79a930cdba17599c85c03e8e7be25de5afa813d5ba13a8dcdc0a2842957341c05b1a6c371f3fa3253171f6b360a5e7e23e61c2ac3aec8d0de5c200c89f9baa3ff83cbf6f1f36c1ef9749cece358ccfd16089530bac3cf49db5575eebb3befb0bc87f34fe2cbd2f9286db7bcb1c30d612ca54c2cc0af326d4524d822f0c7b00ae47329cc27de507d6a0d8b7fed587136c3c2fbaa2a14c16a3358fe45a8ed91cb60b58b7cfaeb7b97e5d2707a63a8aab2e9fc0dc9b043b672e10ddf5631ffc21f98c0f2fd04757ef3ff07e81fc8f7115c2d7d5e8356b073c60ce094000728dbe2543658d7094229735320d8fa2e96b66ba83df4e58f300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b30943b232011dc5be42cd3a6be6fdf167292cb34d16a927b32577ffa66935da6a07afde89f460d726a341fbd49ed72343984ac76a539eb8b5c10a0d96e75b7ffee05d713d717048904d9fe73c5d28070f93ef2e49abe0a18638741a0a61e276c258a13933e281bc0c28435cfe7a61669dba906ddf334e9bd6c3697f99d02f17ba6bda1df0d919343de4800c511f55a758566198423ddea926ab1a747984cb8c1d9d80cac0eebbf4848636baad5dfa9e744537e244367e0ec254acea957b6ab916f438a26cd9dd71177869b119be483bef00b862dfab20cd28fba078bf08d38a65d0aaa6eb3881ed01d68af726b1b97581013c31c78d9e0449cf3421a095bc79c9ca2e140eb0e2397a5fb91e964aab03a063e4864641fa37e0e1233048c65cd592c16b0fcd63c165654bd8a718e9f39adb2653b7809467e4065cdd84791183e0cd3f161d21ac98045de910b2bdbd41463ec0a2ec78aa21dc4f393dd4a1aed1863bcf3f63152c9c55390670a138d8ab389c9d479212ce44381c95ab03816335c7fad4385bbefff0f46da2a37d897fe82d4f678795aa5787f64acb1e6b5a4969571509f9255e81f3acf5d2c38e24fd6b65bfb93c10e9883c78acd7506d2cd9284000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089513b89d28dd1cfb674cd21e7bfa8759d1fe2743444192b9b0c1ba659c3905d7b6911e73f3f754a08cb332fb47c68e5ffd3be0863d0c3ee22065933ba7159bd3a16e9f3584197930a9d06daae16cb22b9e3747de65ac397825b7bec939bc5ae2ffae928670a2ab5bddc9d535de15e1f1c2ac4ca4f65d0def3369ea2cc2e0a80049fc97a716c4f79feb932737fdcaf24769d82f7fe2f667e7b311fdd924ec29ffd073cabc833a58b5824294d74d820c601b440ac85dd6d60db503db0398fc4b36f778ff3bb65f0583d2667203a23cbb51069031fbdeed66409df89a8a25ebf8912da6ad63f89b54dba4b68e2995f1585238e92ece54d4520363f34e5a30bc159313f6abfa8ae90bc11a5ab8651398d405e1c3fadc5824ed5d6d8f2aeab0c4aff91c3d65cfb700c1a40e1983936ae8d83636558e17900a874114d163c00c6216c0a876070e821767d1f7873258be350a8735cc174185f0f40fae7a0958295feac69c04b4231d9cfe9c407c243f15d68f291f7466dcb85d19fd0d44655dc04db223ee97fe075cbf4b7e986a40d8a87f079302183b55c9c2a792600b5f71ee918ea9ea6f9f178e7ad17fe97c9869dc85431ae26cdea86ef80ee1749ce5814c7cc2b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000530ead6833c8a95780b8cbe3cd56e22081b7ab57a6b3f492f05ca21d95336b25cf0b3d17f96ffa6ee82cb443efb30b016b55824a71f775d7048a4f9708c60e0d074904f1d722ad8edf74c0360ba5818b1fa8fff9848b078c6d2cb5344c4983772cd68f8f9df5ff75f5b52cef5320df4da41a4197af194116c7e962565892ebbbd432694e700007841a2b71d91e2c7988b00021f6b1061624ebda6bcd785f63365618ff2d29b6c09e23b90eb4d80fd0fc98d008d48ab34d95c3a4f48e8171f9f06f95e705002337b5ef173730f42dfb5488d5737dbbcc766132028d0238b60a5ad3719c731285ff646366504e5337a805cd2ee6fc37de0f12f281caf7fb153c0621a3ddfb38b04404465d587697ae5f4875c32d883f2a4ce323a589b946268f06dcd61993fee2369050fc0f50729797b7cd1be7d8ba2dba694fc21eef85302c0d46c9d014d55cd5df0ad48fe247649579acb899e216c92bfb5675b0800781b5abda7c3081923a57fd6ebf24d1677c9e5dbf694b845c3758a610c6e357e3d7df02449ddda89a797f6bf71e0bca5bdc95b4617b5cd9a398656cdc987af0f2ad0ad8f5d3555427b856f2a7e41c8774c0720688670ed321b31d8d3ad9cbe0d9bb8c600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f637e37a1bfe5b1e2789fab7f44a167c85b6b1d000eb6b1dc5f0bf1bfe2a57d4983ffddc3cd43f7b46fa5db77cfc7554675f73a1962f8cf813ec23c10b89d8a9363e6d6eb6782306e45a7a2014d1cba810835fe07f997629121763ab95d573729f0cfa88fb9bdd0d752fb835b640991d69b23565d1c641bd8d5b628fb0393efcb31334d24ac22c543923b78dded8f8940c247c3d7d617a5b48d283736836c675467fd23fa4b2d76aaa446d5475c558b54a9c79b9f01772e2e7a1b5a054aad33b4217c8426568e047f12d0eaf9e048c48a2e7085bcae2539e213e41bdf90bfae29ac95007362dce54a4577904ed473304e34719efbecb65aa4cd63ee05c48202a607946ca76db14de6dd9ff3a755965dd974faa633e5fb3bd1bdf06a3505dcaad47ff48b47dff494804f301a9086bb945e003aab45d78c2a2c7d54824e38460cf9cc78ce5bb9e7b2a664682dc75cdb5aacf98e35545610086692282fb4fe2376efceb17149c4dc634a794cda6a262cdafe825aa58e62d6ad7fd3794121520b0f2902d7026c5edce36564ad7b7d6f9a226a3d4925fabcb89cfa1a61d762c203434da0474e597f3131cfdc13d6d138f09c8efcba10c06c2c9d64d5380c2de87bce0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000906ccf4bae1106bc7a89b3e5ecfe08c168d8911cca025b6051d4db7f9b491e005192e8c1f60d3d9e099bfc11b7907b97c08c4601f10434b1b234304283eeb8e47343ccd1b5ba32a7ff3e6a1d720ee66529bbc35c1d7a7500c7021b2f4a298f0d50987a9caf1fa26f1cd4660c5cfffa507688af25952ffbedfed301493fe96340efda7195951151b0bfcbf0bb686b5e298a60da5d422ef0f88917f3ae713790cf401dc95984eb8bfead38fb5bf416cdfac781095ca8dc8b5f5795203f996a76cf7426848555fe5a4068a994d6c25f20eb0a1466044439e93e234b3c5c81b7ca4645316458684d3e28be3a3a80e6af4fd90e2b559670a311669e7af72119d958d7bbdb2c13e02e5b7e57291ebdd59cd4f72919e643926c9430c23bcd9c0936facd7197ac52d9197017801b6b9cc449435974014526c0d3eb83fb6e0b23d01ba27281df11ee809e8d8485dfa3ac7ea746a345e83a3573df75960e136a729a26a20b1ec030d5d551d8b2b32c5b6fa92aa55edfb27180a8a663c5bfe4e0eae4da01f8a0853b293690d2b554500d92c1dd7d5502dd464a067d8db8363785384346913e4f8d97853cc182b96f652986a40a49498f9eacc4be04975d756a9c6afc25e50f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000abeaa6a690c16b7f85b82159a89983b0d2477c034c13c5a33efd1a3ab7c74e5b1fa48e7de8518ce909d5c0ffd0ccc8f3032cdc6df526bd7868cd341b3913f1f3353d222e8fd0d01610b4dba95c664323d69ba76f47aae99597f20c528ffaf55ababa4d75727ee1dee9d75d6cbda276a3e4390e7067d948df51f5cfe5549169d3d57593c7be1c30a4ba39410f6a06aadc8de6d6d2d2d0a18f4d1856b8974010308a0cb416d85570cd325bd9320eb3597a9dd320feeb647513550575c32924367c14351a11711e5ab49ca2f429658d8760e5835ec0894d84ce9da3f9ec144bedc08275e63f8938081d90cd364ef997eced33af9f455aefc52ebe5545834f8e50460efde192dd35fb290661146ed7b5692ebc797a1a79565c145de204878862c36445cfe6fad8363274a5126f2c2e317afcdfc084035318d7f588326e19a71e3d9133a55208a7c6b96cfd5f3e25580075074b1e419736a1c1be2d670fe98272548114ca60d56e7e32fb0520b315f7c96ed79bea205de6135a786946f525343f3f2e61585e1242ad101633f29708f59c4eac09a23216bc9293838f09c0f71fadc2ef51e1234cd6f46ef7eaa814aed5a72b8f9bced9db9fa2c2fc19ec1991270996df0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6a269b91d14ebba9f76b451579852b1606d2a1876a074a1539d6b0019a9bc2a6f308112be525a2dd1b31ecb2f592b023ac287c697a8486340f6d3217b67d7f877cab92a59b3a0f000970ca059c8d937ae9f976d7d7b46b03a381803a15e827d8a70b56d030599c776dfe0be235475b37642b9245dde933d795c1a42efd767585a3e00f4f30ba47fe00584b54663f4bdbe47396f5a69c3e4e80bf869b514f4cf59d384d0ed819721ae3439b05f568239194b3603dc0e80d826b74fe2c7eb93cd7f763abeb71491f8111cef67754b8f3220ccfa287bf705967fdb525ef258f130294a4dd24c6b52714b76ed2eff480c1f76e32fda051a6e8b2133c06b4a7c78030236c3bd1c49598b418d248508ba8b8ebece70e3a67820a39e17d7ac1d7d5952a184dc4ffd8c1c87ce41ce7a6aa7935ec0b433f36eeb83d74ea52ae15118eea66c36bedd14fbe3dc19044a486cf1bc6591a019c1e7fcb9267398b90a228e8423cadb89de3dd8caba6b83c2bbe2da6e7c1d7bad4f8211d42d6d34582799b5d093401677cc4560e7d1228742a5f726bd89ef113596cf6d4afddd96799aeb8ed0fc4b60514d0fc00dcb9c6dfec452bde0bda1812a7b47ed92a2975d30e7ddaaa630000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088a01bd8f0e66ea28e01c35dd7b290c98cd3852670629d00e4dd3ed7bdb58fcc4664ac8e9a018920649999d3b60c114e2de6dcdd3c7ebdacd97ed7568e7f4626ffabe1a83fb0d04e999e271c2a869db828c0f5067dc43225de371cbba7fadf3c82789dfba3d13b8f2d7371de7095d4874c0cf33761438f714e405cae312a6b7f530abc1d71632e4a93b96c3b9387f7951360392e315fe3a23e8ba6f8184b9e6f0413edca64f0d5637950b0f5a0333fe0b4d42ca793c4d34926d691a05d0477cca2f834dfd2e7500f8e9a86d71a7c33f89f4c8979e07893bbfb53ea9471c7c2745375765aa6fad8ecfeb3c3c4c96a1070faa36282a36393e44e1ed1c82bcfac6678389bcf93b76fc9ad780d54c9fa56435d4b400ffc9a3218e094cd4225240a82ff446bf002bb02b4c354f0b0875e1fcd7a4c9538c6b88fa5896fac7b3a2f7975361964fd327ce02ed5a4f0ce1800dd176a4536c0c79c80a0e5362b9e17c8ee8501aa1a3cd4450ad923c74388dc6affca7034fe9b3754534307cc6b4b0d93e1a53b42f6f752106b782a6a4fc02690606bc78f0f46dffe65cc9af197e81050a965876fc9b2c582d3944365a7f0eb3263690dd12b6c70d16844777cb4021a96051e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099f2e31e19312a3bce44183a6030b14a688707220b76664ea8753af5caaa570f37c9faf58f9dd20a544b898ddcbe754c5daff1c0ca4aa7b72d87e1700130c67838242f267d13e0f31519bc2c3201785cf86bf931644eb72985a0c173f10e1c408582959d1ccf5812d4f5c10fd858ca8b0d5fb3d99f76ea07f5947c46315a1bf13f645ed56ae12c0a6a8f352fb3a8628d4b5ec01bf5a66e1c75e324688c7036ffae9c39826b78f4b66f7e5d42ea21511e995ff5cc2ff1aa0b5d2c5291cc96a8cd872917b0801d2ee844d3c7249177870a3a9632f80c1815670c02aba2fb6c87ef0751c4ecd277dfe6107afb6624678d40e82e5e948525f2b2dc2381c85b2b80f3d0db67b5ab86525458b544ce8eb64e903fab40ff47a4442ee28209f8e8b54dc492c2b362f22512f2121c1edfbcbe2bd176169367d614174684908ab180f613081f2174fca4cb3f2bd215d9383bc726f9ebc1d7e34f5af63503d746c2d763e15cc648574355e33ba0bedf4f82a2e5bb4127242ee38d751755f913a306e37d51136ac902476087f28b62e99a410b1f3ac57072301d10189724bd74da1e9826d8eba1212b6fe6c80911bcfdc213e27919f87e6495dff34fe36c646f8b24af91b8360000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a408f181cd23dad7acd1b831e2d99868af349f6fdfc943deef96294225b623331e40a38436a9a0459387608e80aec21844f75ec33d017ac40786c365c997294990b6d39adfbd3b708f05a587c868c5d496d8b5663ae471a564adcfc665cbda8f5f0822dede5f3db430d1dba8ee29224efd9524cfca098c03983657eb7b67383fc066f0718c816b22e738aa1cdea7b2f90d1e93385ee5986413fca5c8a467a277fc09fabab4b40432b3f6701062aff40fd6068ea410ca236fb089db9c599d5b114a0c923bbec08d1b3396b52c6d34509c769ca5c764a7b1b8ee81880af2cbd41b1fc1a056ccc046657ace719682a6fcb97de7816257b6c82da8f9cc16ef532bf32349903bf2f83f960065c9819f66bba73051061f41a0aae63ddbb4dcc3f8253752e101b039010e6b1c5a29d46d7164ed14b040e0200f5acbf624d528d2c306669d814af5713d7ce5f46ac0b12266a25a9da1bf76f0c12bc1c3d9d17d778ad7ee20e0035001f4617f9cda6000b6c7a1867336765766fb1275704e20f6d89ee4b426d8a8bca219410bd92e51af8139c2dba50f184b7c41ca31f4001a2cc2088151b4053ad0f0b6413ab05782f9f8046c07a85e4807b75a6e794e8e5139f6053d9400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bb6d56c067bff94776a1c4c245bd633e41b3ed038e54d9ea5551fbceb7169d5f0f78b4b88c26f4e67cf58eed82ce6bee78037b136b448736fb6d50ed286768a1383b0e45cf013d5ac404328b2bfac454ceff146ff3984249e252c5a2b7b7660b5cee6bf0b3d61adcb0fb9bb0f1dc2129b016e32829baf429851635202e1afe81f7e96f10dacfaae07ec7ccfde9a4b441e0e15b24363abaa1ffe0ae4005bd1e951427622df17f51773cc83244b82aa97b53e9ad692e47a720d13db4a68c4ca2b733d5dd6871229277bb86f528d67b8616f88474625ea9c988dae56e0ccb4485ee335189640dae439306c74aa29d217cc533cd988747ba8e3c25661ab7e839081e0c4c880d189579dad6144c4b0c909144bab44b9dbc4dd2518df9fe6445253ba5395abca6e003cc6cf00c914c43b862717844a4cfce1fad278fc4f2822ca4e63a6d798bcc6597a332af1fd0b037d5d5fe608059c35e469b21951ec42c87c5699af44155d9a47b9be7e27ed86f4a42defbb0f0f2b7be1bbdeaf9298b5341327381b19ed8498e1a98be957424eed121f9966f2658ecc6a8eb4f54f0c011b7f212ec6b40b873ec700a6accd0173ee70fc2114b62ac9b04b91197937b157489cea510000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8d88a1f11ee712e0876cf584c4da561796361f5bac8719c2023e9962d7a13b61934185c50f63aca9c3903b9dc56cebe0bbbf249043abe7bd26b973d9241e82e0296ede4815f950028665897bc511a934d874058157650d437f64b5bc87180d789b64a80cd66e14b8692bbe70f3134b2ce2f8771ae6bed0244b246cd55ef675fa3bf7dd6092801f34f2be03c20efc8e4f27fa0efe1c0db10fd73cd2c589ab820ac1f8ee8f1968859d4ed07539fdbb9e83d177c99fa8779a067b7133caf2ba2ce3493deb5ef358115135d6624a49c636ffcb826eb4bf2a229f48e0fd03ebfb6a6ef698d5d83aaf5d6591904fc97a52f2f40e96e265230394227d4be66a3ed519fce6fcaf570470b83425d605e95e60d6071d4dab6f6a2cbdc9e9ae87fa987d37e361ac0bf8fe57ae98edbb7a65aebe4acf1904c86dc3bc7398c1ae06e95aea53341553aac26864bd5a9505d616c1d8c5adf20821fbfe09529f731cab9377e332c669766b7e98a3efb0cb9b89d6b7972940f0f2ef2444c151d63ca7d831e165d0055504bf53b1608a8f69d2e3fc4fea7f99945fde257ee5076c3f9855c0946af22eefef96023a882d2f1aa416f85b41a0babf29044cfad3e7c43918079ae23974700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009678746d3501f0857be92822b1949205e4d1152fedb27f2c75c482b63c3b45e25dd784ec9374c0ac676bb85da0ca4a860d4769884e8f83e9e12a88eb12a63532072c86831dd1c28808cff2ce56fbadfe4e372f64b70809fe53f8c94ad845282d9ff80226f4202d1b9802d5428ba869f049ec08f89c6f83c6caba49b5704ce331582b3eaeba5298b503833e9f50a659dfb1790a6b9dca47eaa1f5e74446cc4f76f261012037476bf84eec28726e5dd5b71f0cfadfd8a48c80aace497a486c046c8045b29142b8f3571043a74aca694fa57b91cec8998e6d3f3ffc265440a496e8018a6f3130ee4ec0dd2552ebde6f5dc5330deecaca2d691139f8590842c433886b3d3f4ebaf721277058703dd95b7a7c432646f727fef5bae45350a27f79d5c9cca1fb20f7df3b91cded50229ea15bc2c53c9fd62957a049092a9dcc5d5fe29c6da9c0e2840a78e28b16b8338994ab1f7c0e4aa03678b38cfe47f59864740d1de8c2eea3e3a6bc42a27b071a6625503e93b6c657d255a74e281058730c4e4a8bff0bc70c56f8b08f632d31f7ffb41c9cecc1046fea79ca96235295f4da0fa94e314ce327118641c8294147e6b914a122891f2b853bd9a4fc2c4ed5112891696f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b369999202b1d0517417229391b86b64ab2eea46e7822b168c66e374d997d3aba29ac6c6b5417e94b254b31b953d0f8c526a7c3b15201d599fe44f710e32b556d7b5a0804ed9b05762716ce9c957e8abd4e231cc935ba2da058fc3e6a901a76e66808c2c2142737eee48d6cd6c34bfd6e36800bf848fcd4180d87b361dc641195a882c602a78741b456a4bd5b63b93cdb21f3bf58d254bbac4301cb3339bd29ddddf2a45a4936321ef776a7d41230a7b98acedd7034d00e79b5e355e530dda92e188cb56db688d52f76ee4464b6dc227eecbf486ad6e717219c6f6543ca9ab2fd5670d03585ca07c48f862cbd7c1a7925e15b930fd61142f0abdd8321aec2970bd8cb8bd43a4fab8c8ee690e80357d35489925ff9a51341027fce864817c88a0a221ec586d10a729a61e333125072257d6412a006c0855bed73367d4f4733f83a04ba04f92f4fb06ea9efca4d280f2d6c125f8b778688d3209af7a5cb701107ce167199644d998e4e3a44670ba07414d92a3c9dc3106eb1ae4b3c36cd8a3d83dfc707693dd125dbe2e1c0fa39f8cb12a56f647b7e7e5a79c3616263379a454e26486a90eecd44482d423e6fef042b97c656ee448f7645d8bd78c17a756a57c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082f4c75c2d99171df8e700d11a4304550ff48b97a3306d076134ddc848f8c4b91d7a5de581cb767c3834a1164624cfb4ce3fa5db708c325230916e7de8cf8584fa3e68efa73fab389c22e71f1b7f047d5aec9d21cefcc7308c421b56645624e2ffdbb2f18cceb17dab419e50ff4d95918d9d838984c8fa657c8b45e6369527853a9d45497c2a075eda809e1440ac38a99c8cf3a7eb48a188d003e64a193f5af0ad26fe128bea009aabb39420543a1d1fd540598f32464fa1a7545ed70f0397bafbf00b1a8b48602a5fc57328492eb073d698eba6646ea8148bcbc666c969f8e767872f14e18fd3c078dc6fbea3eb22516baefdbf063102d9d9c91c8834fa1c74da86e24929f3a25d66af1f30f843111654d93d5a3c948cc8d5cbbcc3dd2e227460d66a1a7a7644932ae5362dd55e5ab7c954c7b2e0f2681cdf03764e6027c783e6ebd4ad20d4f1609c94197d7cc3388a9b5fe7a1e33ffb8c8314ab2af72f6ad3a7538da644f2a4832f367091b47a06ef78e879ff82cc2a7a20fe990bd7baf36beefb9a3b591e71839697008eb1dd779f3b398a60a285960352648bb2b25d6d64c4170d6caff5957f236b3634a0e26ddbfb291e4cc0d8762a99ac9ffc3703322600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c870ff709e107096d170322b3cbf4131654b7bb8e415a674559a2d9b39eeec6670297838a40fb25892138de7f4094f10b86215ca8f51423b55857fb5f5529c9534de80a4780ec02973df07b2872a822c369f59c0a7a13553207229d9fd9b2f380ec49057e90c7e0cdca80037e2b57784d587e87bfba56b35343a6fbd231f43ea3a375f6d6af515472cd139fc7823a2538366e508bd1c3f50fb439504b1e46a474034225b670fb6cfa0672403816530d9cf98dd52c2bff7f3670ef8f132bcbd02904fa513ec93677d3d50ad09f4313067c8c3a835c16132bbe590fdbc83946a34172f16f8db110fff6a001cf773dff5bf7d8d2078bec8183d3f103d30ae186cfeab44cccf0cc6f32a05709e61221a3a401df9407dbdb1bfe6128ff9aef037790c59330e272899b7a0ae9ed21c045e9087aa766e838e733fe759d8a015cec2b07dca4abb3916f195da92ab5414fcfcc094fb358c0ec805b91f68c32c20c360380248b4b50471befee9adc22a83659e456191f996e4e194c572fff9dccbd29a63cd25f3170c2ad0519a7d31099be01ad4e42fb4643ae3afcb2aebfab2b310ae3abcdd114ead1d560e9e15344290b483427f9552c85c1e4ac047e8976f158a4ae50000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091a5ce3c1ed8e07357290b6733c9660d10d12a47135d81e81a2da67b2cf168340502f7c6b4513f05f78ab839540879b4d1b77c0c9925d90e650003cceaab9e443bc68d5d804a475608fbb355846b285c1382494ce94864cd1f38fbffb26804547cb74412e99081a66ef786126f4b3b3d2741a89735e80af4bfb5f1c242a51d4cf36dd84bb1b84dbb78fcb86019286112b9be35bf9ba296d8404968ca2b3ba94c1129f8063df287f3adc9e99c1263b72bf6e3f445b7d3765b15c7c0e508c0151e850a602e783f2b0f13786cc4a90def7d2c0c13d33ce6e6c81f52ee2b7eb847a190a29b8fe653b857df5c6eac66f6feb3879742e37409f20c85e6b4d4e76ae229e822946cae0f893367c5e5d9bd0f0000348009be330b6abc49aeeb7d18e0cff581950734bca9f7fc2067b34b9a127299f3b3ae8a1f632ed416588508565da8ca7b3c2efa01cb368dadb51192bdce7ed849e4876bc26872e0dc9c491bcbc9f7a4343068965dcb28c5aedaa0c19d6e335f1e287acf55e0e7f969879ca60602bf99d89e32cea4404931d05e7c062e772613f0311d92d8c1d561fe90904903e8a641f226858453358812e6c4314b90bcf3368911b48d343f25af7082dfe7ddd8b2350000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000249c1164cdbef45e49dad759cdf9a0207f3910d8b2dc835f1bbe9c5154fe230d7d057b6e9b95ecf02db85196a85e0e944a2a6ed62f84174d4f2d05cf3d2b0b2ef68a3f73a845cac17eba4018d9074e51b831bd84bf0f67a17fb5144cdb10cbef448bd8b7b1ec9396108ffdf391cc5042debf01901da464cefbc1b7fd762c91a42ce7da317c3bce1e63b66aa07397035e38ffcbef6ae3d86e2f15cbf35c903303de4a39cfbc242d02ca1ed56998a3813c779ddbb30d34044fe699dabdcc612c94bb44258011a7b47bbe0fb41f65df0a6818da8e8ba1d7418a9c106c806d564bcc91acfde744092760e12384ba3b3e0541afa90d7bc7e8420ae18aa3b89377d23d6ccd0e8cfd772a60fa4620d2dc274bc3f491bf4dca30142fbdef36b0f30610528036fc7d02cc36889029ad2b486acb61d010f97b4763ddd3436910b994611ad0d23edfed0ecbf048d0d45d7375f7a9fc987c800539e9c8fcc66bc8537871bce47df4bf947044cd63279827a84206c859bf2b9c2dc97e8196fa5d7bf09c0221def66650525178e3446133cfe6c60fa56857d288093b99fb485232758b6ddf74f16acd0ff076f99445d96b2730b0b7f523e0a2d1ba41b5d2e1f69b9419dcb9507d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adf2f6a8d9e682a082a4a1e4be848a3d742d255044758cb859befeb0d2d3f5abd8deb22e537bc63f68b099b7dab3b263806a1dd69b0e50cff568f1a0ed21d7d702dce70f7d23ff5dafe05c317f43798cebb692a08d62cc5ad4aaa2feb66505075a4ee503cbb63de8f223fbf737b54f2981cfec12ea6e4cd9c0a0356521846a449dff8549848d70f39a12b4245b8421bb8f938e3a143b6937f191dfcbc17e74b2439885aa1ce6339b7d1eeb36e372f0eba61410e9cd08909fe72ae0649e6e81e4e1f3a97f6d981282c50dcf8f5e5d889c8db4bb36d4e8f98712f1fdc1f04a27b65d80064066e0b9bd933ddae1ad099a42889deb13473fddd6da65358a8782ccaf62d6157b66c98cc110d04db3f048109625f8f4f670625ee705bdca86ab56efb2714409c147fd1919248bef72d20ea959070af731b01951467a23b27402b049d7e74b2cf83701786ddfcebb57e32ce97a741e156ead41b8d5b6abececa96760dc8d06d56fc9ebbbadeaee61ab2b4992de25774722be427e0ba957fbeed341ebb6667f5072f59717cd0cca3ac41586770f6745da44b0623f9bc2269ef6f140926576cd0445a3fd6798e8a6ca756802cb2d1c34d4a7e782ebc0af15c967dce18905000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098230c113b2eb45d1379137171d11f08a50aa08c0f1954cc71e4d64f01dc6a499023904419586a2774fe9ae85a70eeeb49f24339202576c3c9c8f784c89babef2462c42eb81e4832679449ec299244002239a0e6d3689519f20f7825e9faa864a82f23c019bd6776bcd6f6eefeb233c8cab57cb746a2127f79b27a4fc7174a2c035e6dd765434bf91bc315ff75cbcd5bd38b0a7bd8e6c0a40430eab11571aa79d0617f679e7aa6b534afb35afa90796b1bc916f39e8b1722612dc271d9b2da39858f8a1d28de8a2b056f5391545de305702c88a0f8fbf156ec77e491d519803fc533ce85a64d4459f09c2296124b61dd04422c7265d258a3d78da6a5445b1428409dc5d9e84810d49a64c6748d3563aae28ba073996b3325065c9f57a3f721fd4fb1d77634a4ea517800f3376d7eea167d15e256347963adb52d3406e97e94e46a5e11b27d098546409b0a92ae4fc4304384f936efca3aef3ab96eb928894f4d4a2482f25349fd3e9e18836a28adc652a0fac515108305adf2610e207f5580620baa25c73934db893d7f46eb7cc1ca871f0fee95963ce9cee4722cdca40b81b22b8e5b700bf438cb2a7438ce2bde502e6f5cc539b69d9e83af261cdaee1a46d80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000934d99a4b3615c463dd0ee6c3f901db96fa3f50aeff7fc555309013f393b9b2a44b61d9a7a8b2e7ff21ef66a3e255565d7668e85c53b2ccf9be4e857eaa2a836cabb04189145486b7433e4381c84e7d9710074991a7c7e5c2844e330f425a386dba028226e88f77e4e3e7ef386c73a09c81c50a84cf898a746279a9cd3a97f803e96ab154baec31e3679df63389a878c38058d3554f3194e4fdfdae3d9bcb5f1e792392db73df726913d2f437e5d608cb1e232051c67ec316ea6cdbc03df9af5ba53053ff36d1e9371ab164175b82cbd0e7deee4f074ec28b2a0ae0ebfd9daf5d81a2ade46f75be1efc5b16ec3bd45b3553b34e529154269def6defd12ffdef62c49a500daf94fb748451d56538043c41ec48cea61287cb686b2c0f8d26f16aca2a90b0a47aa197de71f887572f9823b4fc589a1254d1faef9f647155e7cdfb275db31d454bb5fce920a2573bb298b67896abc059ae51e008c938a78e1c08fd62f79c172eda98b3c783de5df93ff5b63eebff8f1db44609268ddeb37420b9baabef8186bc53881c0d96cd7110652cfd7484a4b11a8a0441a644adfbecfa637873fe7c5e49e52773d442c1fa562464cb71ca3212bf3106fa8c6586a0ee6455861000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d697fb1c6849e7e402abbe42f5253f89a910aab00920ac1e6d76a580b53211a6f27437b749e93bec57e13b3031bd466c70456213322cb597faba927d73ea95f43a92193e2b4c914dd0c7b4a075e13c5f8f4ff05a062aff04fed0937a5f72e79760c3efd2796b95e41db6d2a3f86edf55e0f661ed72e5d4ab9b291b5f4a6b6a73548cbe81c2e61df2aa293fb5f9a7c164d6c284e0b44744261d5068f40820b0958b3584607f795bc182f00caf2fec20df1af6e82d54f3dadf09f2a6c6f72c3a1baa4a5d6458d03c47895507820b8047cb3597f80e94939567f16e336bb09fb609ef0978e826b6e18707b35b018927bdcb5fe2e423140342504ebf268e8d41f45bcac398710d3fc78d0fe24c22a960135f6c58774c91d95fa488b944b33642fee539dbb19c8a92c8e41919d4b26befa1df1523774c94cda57df580721fec735094408c46822d03c336e2b5aefe158bc0191b5b95c5c0364a0f019ca99f54508daca76c10071b72b2e4dbf68173dfa50e2cd8a0c5264aa0b427c65d18d648c9c52720e9935dc5892de0fe3ba96d6f5f729229844116d7c912ace0c8fcefa51a342cdcc846f07b05e19cb515e64a83119c163f7a29b278f962766e3b4584b97a7f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008df9bda6017d31e776780e084402cfacc6aff8659ce4ff6a0d1a5d35112fdba96a5e650d9c51a82bdc576b13466c619aeb8dd5409306668b43bc514cad71e5b195f657ead23b533e232f44efda28483606cf7ec0b0224e577cd70518e3b16e47fe25b04d7ac1fe11d2297ba95574636efcd38acc675a0e0ecef8656b3c9ed9a372a1c5c1a5f6b9c15601fa2791e36ecf852e8c82b8c534d559481a9b051c52105d810bd09d99b862ce7eb478265a336a2308a36c5dc8887a34321ec14da63ae6f3f3481a6ea28e3250c63fac9337b17229e53845ac13b5fa99494eee970935a7ad273f594e90c5ed1cc74251a249df39f3489d1a62a430c86fc068d422842252db80f66b17095a2ca444be6ca05be187b4bc2bd31202bb71b2e8a66b05159f000bac90c79f8e89bd080f56be0c9798d5abf7dee963173dc61e564e1f25bae638ec77fd389f3c0d92e4c2fe70deac8a5ab5d5a5b82c7aa8eabb4d70ccdc9ad96f5c2c543799515c83334f4afe2df3190648d64e8c5ecc26bc6e2af1f0b5f993f0a4034e3f358916d53f002e26efd94a9404e864eda43e0ac2552f623273aecd8183f701aa36cc81ff8048d05b73442a89f5ad29380467af7c57d67452978c0f9000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f45938ebd85725f6217be10a1bf295829fbe86c48b29f0bb6c8d568c71bea67f27e565cd1d2ca7638feb48fa4129a842b0dfd9ff6c7e85fb75354b235405ca6e63d21607f5e9e8dc89ca00c97e85ceab38b1b347517187be94a103018565ec14877e1f298e6cc64e95662da4d7ae0c66ebfc58c5e7a9028842cece4c92f27e5c0e79c50646b2ce97d08add03e793762dfa1c2ae437e071dd733ebe1ae9d8d6bd3a43239b5bd07459365c1eb6df7e645d3b2e93db7d173f95e6487f25b30f03a04254217c18430ac4e8e21ce67d116d1d5b838e2108a2b6a72f27984925cec498f351af841756f58112c83b7c4ae5649aeb7d165e26d7ac9b8701949aca5ec89254652804d2220139cfabef28477d77533807640ab48cb4cfa7ed4dd85fc92bdd4a688251c133414e380bc9038366920bb647351dd705512d81a98bc46acccc56a0982e2bb2ed6da8bc64d03a65624106ff139faedb0b74e84137bd0b716e6ed3bc49b61683705598a0808d92f2dea7c31026c2caf49ce9bdc3d7a5a789163ce7ce9f564a3458623275aa4a6c2d0b31ad2684f426b46fa8b75c3f6eb1e267f7570dbe283ef8703a65c97899a559a3b6edd8398f714f3e3c6570904e49c31981500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008fb5f7aeec7e54778145ac303f4698095a7d3c168e8857674d8e380fd94ada82d25729d49d7913e7015fb11e4e24ef3ab19e62d29f541c40f5ed8ffc65ce827bea3e1e9130f91921e1683c146f7fc6908b230a904baa99412b9044fcdd6d8fbb24beabce1e3961e07a865a230e782a35a3ab5e6d23f542e95972fc114ea2a79804636f5e6d7172d6e23830d7a2f8555db4270eae148aae7b430f3702c9373602b027bf6440814b575cbd3f1fb94df5f7cf07496ac4aa92c870a3262226f35d34fe941c72f682b0b642afe9ae03cf93fc5a2d5576cf1781ab3f75b797e3b32421b8e1334af23004dd65d32691fd611e0f26ab3cf5718ea6e0cc89329a23f248cc500bc18f72543f24f454a1cca6a265192b56992471b285c0d8bf98103c01d5bb23f13322267f142e8b4eb4536b4acbd3ad6b0c963712ebfc3aa513ba8c11f8dc71b617f69be39084934880e965e7115f2895ea90bc1d7b69b4427a2e4ad1269884aad48b6e6984fc2351a4ea5bb1dd428af20cbefd64002acc8da827d59d0bb3d303cc8f9a15d7473727eecfc690cfb1635013d4fbdf059a0df94fca940802af73b4c6757ac3dbac6766b22b275bbf875bf30fc4aa69004b509476548949afcd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aed85048fc1384e1597987e250100bc96e7620cfb987e056eb9a49846674f4517dd21a9133631b9f11ce547a039e33e6318105bd2a5115b187f2fe1bc2e777463f923f5ba152bd6ddf636d812802c2a74a92dce3a84b955c982b68939d13e1449541fbe44e66b29605277c1896242da2ee833df4a1b781239f433e3f5100003f6c3ec29692339515f059e7606570ddfa581df20f73aa0904415970b80931a0b4f795ebc81b095cd630f593bf742b7ce5b2cd57f80693b439958d90e9e76e8f077d574e2ad797edd674809408ddf13ffed2009c614c6e5fa85fdd2a47750ba45e0b88f46555f5d50a7181c39c1ea05805e5873e2af50e77ebc361a844298787fcbe64295f9d0cc6496a0d15042d4b4ea877fe09f5d9896eb2a6c233379338cc975bdb2762692cd0b51699bf36627dc3f5391db0e6841ce7b56072b1b9ff78a1dd2e50237e3ad784ea746101eba3bb6df816f46755ef287dfe58c31bf669a5d1f5000fde83f69d7489f72b2de0afe18087e8e88ecf6ee977b869831d8d3a416d3e8dd7873baf620d630df02bf2ec127a435c27d2159ed55b70b52dd1b459d7426b88194d465c6956e9b863ae042906892615ee916df10f72e267fd02f438a3095a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027c2374c01ba36bde7d11f093ed88c063032c3e9c78ffa1abee5e886b43c72a8ea24a0acadb8b7cff043137f3c3c83ab24b289c7df311308e0d88f33af36bde42c42e5c6d6c10fefc123fa11a5448d83d004d017d5c39778ec8b2efc0c168a5f3170c68c378ebbaecdea0103ca1645217218b9ccf85a8e92b11a7a3e5eb424a305ed740e04e40191031591e38506813d3e780e6abcf42f42cacf391f5b4e10fa2bb0e0f098305e076de1e86b77e82f056dd5d85c7ac671548b7096c300f436d9ac7a5adefd86dcb9d59947548d2f4d763538014f0407a66c3ac2c1b6d51379d6169abfd574d062189f36d03f8bb19fea3b65a43a9ed9e7839f94d95ffc412d88b571a9f9a062fa7010100c42b1850c27eab386f6e2b15283894b93962493a4826ad58de90bab6e5973ba51381f9b37bf55efd7765d8a1ebbd1fe031cfea124c5cc08c672b62105c977d2e15ceb9c25089f8ddf84c42419444c5d9f4ea473a2e09e223dece76825f2376145b1e1065db88f426548e476e23cccc3d9c5182e1c0649aeafc76cb92ac9ff533da5367595300499011d99f4243f5e7955fb0a77fdd43162d4728d8971ee98ae35d62ef608395c569acc255652fb0385e5516d711a62000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083a0592303059e8dc0ef461454557947ad5ce9a597cb5cbafce4cab9d854f89a232c3420f3370b25d174b100c8fbd4127beeda3256a530fafeb9279bee2dc7e77ed077cf83e0834e764b350821b25e690e7e966b585864b589f422da1d1c5fadc4570d1bb033bfc6a18717368fd1fcbe90760e366082ebd49ba14e5cde4e317640bc82573e662388fdf20a1e62b18840789c20d74bf796edfe07a9f45decd4b656b681867eea0c8cf7262ca37a0f5e0c55dcb39c5049d0dfa8d4436f54d486fc3f8adb6826f6fbe97e4acf2397fec02503e40fbc6fc14a52e5db80e26d23b4c5c748369dea68e04f5cc226c174fd72f571380b29cabbd11e5fbe1dd4143745b2ad9eb77b7b688e82c020cd84e18f2b7adc16eb7f7b3e1890e4b21a840bc344159b0df97c9873e8903805cec41b1d45f7e3638e83f9748f46e669a3dab7794a68757ce71cd72f7fc237b4946b6d85e13057607d78318af05f0df08a89c641de0bc7c12b71906db6f1058bb3ca906b663cf4f71165632f53bb5c3982c1a788a0bf6721b0b4a22a65fcf5b37ce55a8c68fcede6b2822ecf43aa9969aa1dcea0c3e19b328f1d96cb63a87c44571ebb04b188dc8a0af065f04859850b1027c73c434100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ae4c97c52650c35dabad740927c8a64dadac90e490038a929357b9242b03f6f82408819775b2b9eea6e4f6d0ca2a796f2c2ece4b65925a7e97ff842e65b4719efb5e03e5e3ee5d6365e068278a68cf8d6dea883bd4fa3d9ec8e21fe88f2ba8814b18178c3e561d602b665fe27d76ffd4bb1327008180e086cadedca0a5982dc7a1c6fff8c31f93fb6bafdee1b65bae97ae64469629792fdd04d6e2453c0c95cf0649b6df95b752f9528e649c6bd3da8d2b1fc5b30c27b888947fcddd6c7f1ba7a9f8ebf135a164a672ae04d65e6c6cfcd316fbfccc402a2b25052b4727f16906d3e83d1a6dba46b4aebaa1fe324ba783c5bd157677a7235db2ecf614317a318252c6eb77f85a1aa2500d58118abfec973af5dce642343d8b69de42309e2f52ab0e988444d8d2ae574cacc0153b45cd8203f01b3a85bc26b2ee97c09f0145f8f40904dc40598dfae00f9c0b0c588f61b1909e90efbd2ef131c61d739daf2f169fdd141862a16db8c3da30ecaccd80ea8981923ef63c98b657d800e1e13efac033160a68276a5f5c8be896d62a7c628087a8c5141a90eb5d0216be4ae5a0c2a91120c4eda8787fddf3bdd7facc73b354dc084c17221fad1d19f24b558f95f6646000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092ab7031f16a4fb2d3c4c84cdc8b5b92a4fa3f235a6ba9805a2021788addf59aee4a33548abf5818c144240b7a87f7a0b4d3cf99bb053bc19790153c87d636965391232eee18c0982776dd1334550f41c283caa6768d2da53b94b9821dd4a416409b3a98fa3e4a2d88c4eabf8d46dabc54e23ef569432d77e5ae1d526b9fe08e6b103b4cdc6982d38a46412cdf3cb7a0bebfdc62b9dd7e3cfb01376008adf08f8c5ae48d2706035ceed061a1f8d238f265d48f3e787b46940823c66c15501aa027c2af763b095c36d162067fabd81f00e9ee3ed9e66baf9796ef3df3ebfd33021450f6d53241c0a3c858bbb61d60109b74a489289297fe155ce3dbc57aa257dbbd2e6f9a691618970f7c50e5ccf6295e66b392894706e7f02246889908ead0cfb5c3dfb2f529e51efea3c327846cf1dbe72b0d8dc1dcf97cd4a0a4d8c759ff2294fd97325f7434b0afe067e5c9d25fc6feab7693206f64c6d1d4e84674ff8a84e076fc0644ca66dba6fc28a165fe35e42c31bb5b857bd77251161869b78ba4e633ce7887022674359f407bee29f6d99aa90b8d1ae62da5acb4f68d20c7c05fedbb0b57e56740266cf45b63af85f14d2fbf430e421d084bbf9332403483f952d60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000890d7264779cf4e720cdafcb898e0316827286f0663b5b4d9a87a9ff920f587a3f282fa2f7449d872f8a917170f6e6add2bac92b77c3da8d6874a3aaaec0a46dae7dc131d91cacd8ad9ed8089d733a699b06ef5473a5fc0c43b8199a344324454c15b1667d48c12d26fff21293c501899a69ebda325aebf0cba4489c581487b548fa8a960935f5cca8237eb5b8f585b216938d3155caa4e5d2371d5b899469f7b48f86b33b7283204fd0d2fef78682fb149df9d35bf53001103b4ae8e0535b3ce36b63055424dab4f8c23af5ebe179bb3334a77f8b0dc0e41db1e52fc32ca3912ad8bb951565b804f34dc536eefd595f12c9c0f1dcc6008903472bd745be7975c177593ef9d0a179ee8e487f8b2e77826a5243341ba9f929bf3ca593be4f55a29c544485d898be713cd4e0e83d2c7d27ddc4bed5738d204608cb95d3d6113cd1e1194ad8ba2f815d3c15a6e90d2808cf7b298af33743e70e4e5c128bedd9ab5fe887afb5173e0929749a53c958165a93fd260d8b5d06b3726ba3ffac7c93356501057a5fd5c15d5162977ff311ab31bba96cbf101aeb5cbd46b3a175332ff9d969ffb94214bc555390f69470cfe4b0b6aeccc33128db0508dafe4bde8bb05a5b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4df6df52c67f381b71328cbb92ce7252ca8e85c8b261bdb7758060e9899d18f36c622c69a7db60314801f1e9aed8b3a736a91982a074ad1241c6e1ab626a2fb2e969d0074f9f09431b3af3f26b6c613efc67292097666a325d52e8abc94ae0b4bbedecccc2e9edfd3940853fd421b3d8e4310fec26d6c4f91b3e6e4da624f8f76dc701bf19115c1dff0c9bb64dfe22c0405079235cec8e9373a28b37b51bd564df9aa3b6a418c76079d95008dbabf7859a74158e6174a5980eb4fc1883fbba87b6a38b56dcb6d3a7e7f78312fe62c2ae54dec25403c6feac530e8b9eea9b53fdc6ce4484408462f2ec4def34550c0367d2f4e9182a11a2634caa0e947c3c61c970f2c4a60658577beb38287643ceea59281dbaad25648e42521a671942991982e2db3c138e404dc3ec109efb85c66cf04131895b4171d850925bb4c372a8418056f1ab718b5e673035b7c27863ed4a6bf2dbad32968fca95264feb3b701d6fc70c0567549bc29c27699e713dc76c2cadeda577ed9786348243de4053a18ed8630dac60e900c7735e8a692ad4937a97a8ad7134da2eccb014bbcbc9d1556cb348ba706c058563c7c42c599008135ba5195baa2ffa0c528d544d8a3cbee673ebe00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000606f3960b6550047f1dad6bf5ce98b5cf23d16126a9acd7519937f2b922d16d5783147e4faf698d866897a3d396f41abb5a3bb77b66d1d3d01923a1e7b8df50faa575c3348d3ccd1ed4c6faf7ec78a798c5c6d39440399c825f88e59b7bbc332c162a24ffc4e051481af11c923b51145434a01bb41dbf96b4fdabcf6e0a68e94abf705fbb6daef2355faea2059018dba9a5ffba104ab046fa93f00c8f012edbad87af7c56f42f9f79ccf2958f68cd26bd983a6bec58bb82dd02ef96c619248e0888e64adfcab2705d5f9946af756e427b1dcfbfb0d06c4cb9e3ff1fb2d9c2c30d9610c66e4941e54985ece54f6fb524068eaca37d892325bf78bd86d4789d18b86d76206bd8710fed858b81a055e0f0fffb74e46e7f1319fdf286ebe7682b2d258bcbd4e3e1d07ed4514459c942ccd201ae9db1f7d51ce46f06b0319ba62274aafafc64f7dcba91ce0abed6b7335b6c87d955f1ea5790a11f2b0cf89320e655dbafee7a3b0d8c8c2f8debd0fd7807ca6b5922b6f26ff2569b7d7296cf6be0d7218cb519eb98872c372ea08f8256d10087a559633f2a117666e7e1312dac07644e3f661fe0e50ea0a644c8f226354a4f1d85328e1112771b3f0b7af131c876af0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000163ee7d0f04752d21d660ee32febe267c6de3d344151f93177c4de62d25c0f3d3fd23914c9c537f4e64d48d1104372a60b94a457078e11510883a9d7798483570dbe35aaeaed11f7abdc1445f7841ea0c037fdfea8abea5860b0afe1da9cc612daf4dd9e5ad9638ff8d6c7561647b549631fc2b8e59f71ed3379c4016a5da2cd9446981f60340524fa614e42e15a39ff6ce63d3ab1d05ab1170b0dcf728e5353d53c0181c94dc460594a9d2348f0ca1586ab6963c88c7ea1a29683712470d2cc1a4cec28d52eff9593f577c10728415479ef67d9d575e2b08c8b93f3186836f4c3b2084efcd1a4a2dbcfb2822a308d1c798e2cd5cd44518541693b43ddb4728e02305ceb382c6883f036311a0682ec7d0542adf87653c4aa4f9df3e3567e4875d0ed11c1f7face4c7d73711c0382f82e7dccf03e87d87ee665259d81f6692d4f74ea82d5aaf7f01bc5860f936ffa0574e536081bcd44c322bcebcf89bf31cca186ca3b143cff7a42b0daf2cfe043627a93bef89a87a14df5b4726186338aaf29ae2b9123344fd4c4b7bf094582d16688e794db043d92d3bdce7a362e482dd0a29df8b6cbfeef260780be75a3e800f5947d0333e95602b1655598f2c1af556e7c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b8e9b9a01402217dfe590a4c49b22207dfef3df0c689049f24e6cc38f306f7b6206e85011696bab20e9a9d2093adaccc17556ee9ee7567b253c252127bd1b355415941062a7df4e35b69bf8e8333f823d5c4079869e427cbc966779fc2cab6fa44d4fe092e14e6735dd3373bebdbbe30f4ca2105703fb4a4b1e78dde13bab8e343918c2411eb64cba8dc5fa0a7a5542d38ff8ba99baa8a72051fad5b7cf90265ced882364b550c049b60e5e6f212283570330c3c56156b395c895d23e3463d9149ffd543fbec1072e4aba4ad3e0282f6a1428f04e2af45ea9c3b1416d63848c4e01bd4180707003df8d44ce052f286f33fb476cf1312f4f2e41ac3a0d9836b335a9f8f46f98b228d077f30c66e03d4a206d60d13de8c236f6f0c6d6328b557e56883005b8550e59a6a0b0c01bba29f90fbdefb35bcb3f57281b872e90041379a3d0f95cd854b4ffd5dd475c64165adf46f1fff1f17efb98b51974c63accc1c7ddc83b3b7336fca8c687680003076ca25fd6420aada461d76dff839f70ad18cdecc44cbfc2fc7ddc75bc8825e4549908f643298cc73f6466c6bb9a8e4faf5ed3ff179ff67b58f75d47bbbd70c5e662d121072ad557a69c9a5377e90566e718b50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4e0a69bf37c78a25cc028165769b7c54c0076dc28581995e4009c3eb391d6495d7cc825a2a31632a83b793433f6ff884b982091cf9ba38aae4db16f7bb1f141acc9aef1797fed33fd9eaa107ab057269c46bcd1550f8aee4ed8537a2f5b98d1024d87b7ba174b248a43edac8d5fbd6255777a2dec06040fb1c448f0571617602e9764ae2940114686fc17f21048eac16d897b03fff855199fc7aa3c75b4eb1c30b3daecbc8967c2bbf24e4939ca464b1b27572ba79c5c034bd31d4be5ac3daaac8c628be04938e06d566b51556b349c3072536cd8f46d17b941b3015aff58adde9b448a1740baf09b3b8c83451bf106bb9de2741ccd7b7d3fb8c3b645f85a757b1a04f51e0f80e5cea0b65417b584ed2b5c3d53b1c8826695ae608753fed479d5ca7891c5009cee6c231c78a2319bc778f6e40e64a52ce2a26d9737cf9ddf439b829aeebc9a2164f7778d609a7aaa27607a8d0cb4346aa2b54477faf2056d4438229305d7ee04edee13c361780f6f965ccab8f8ac1d3b87549696842229fd5e80833892b28475bf68715c1343d329504e3da49655df04c2528fb214719d95b1ef8cf1a2f7768d11e54bd94b5b5c0a5d9920745b10365eb85e359c3fbaad71a600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e272c754cc89239cf9800d0b64f2512981ca717179c47695942e0c2bdcce2cc050e5a53f94c214e889f11ec769281e234ca347836a5f3cb2dc7399d271b9c1ca30597de8367de55cda0c0d2bdcbaf0924cf79e263de953d0872da37549a216849cc067df7c2c51157102cd41c76e80516ad3e0ff2788cbaa0995af1ba6f67f6cbbc31cd7223354c4f5c33f2598543654ec6a40a3e0d090fe29054a40bf182b29ac23604336daa5be72482526f4cd3ed228b747cd53250753c40f53a5b30a26d0ee2096200be27fe6e53d9bdc25ce8e74a180b6994bef954995fbac57530ac2ca156ee9ec02d3713e4f62b58a3356847b772590b6d1a9820cd26ae4aec9a1d858dd41a64345bd25c939dd4dd265db7ea610d6890544cf0ba72d7d9fa6f1cceb441e6612e0f93ae38ab729c3ea050ec63538c697d61b0babc8c297751383af8f23a307a16876b8993a65d9684377d9b5f264aad311776d481254e2859eeda21435e7fb365b59fa231ca24ac682ad05152f570d73f1b2b46c6f2545f4514306bd1f11326b7811c14379bced5c5455924c943a3d5a368bc589ca6210e38b4fef65a2c6f48bd46bf5b8dbd5f5f8bad4a8a54eade12a7e7787df260b7c109640252e5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025495bc6e6d5bef126dbfacc7284b11fbb5da0beae3db41bce0bd92c3fd7ed12f3651841c7d8ce2ad11e3fa5bba85e6457de4b8d8026da4c6f11ee1a463bcea13aa566f373e9c177fbf3c2ed8fe74b45b23c37af75e586f9d380c6cc24b3919a027ed4531997cf1cb39583ef4c074d160c3ac0ce7eab6b30f01e8fd5b5d4a323aa7a3fef8de08b6ef7920a6abd2919fa3fa3fb561250bd64221fff6d368725a673061035064f6d97d6d337b9c62612807c9482a699da87c76334427a0b7e19b96be3cedded7fae6549b534fff72345782a81beb4dec1955835f6727622f6103b0eb22f7b83da0248137b80b56c66a3353e3285ba67ce9cc8613926b56d8c72b5fc7224431e1b4b3c24f227c8357aecd0b1ff2dbb1fb4e067aaa455b2069f8e5886d246e35ff5aace43638373998ef533a3bcad9eef59ab90686fbd6da9b98d409be742d3d714e64f24ef3c0883b0c39310d8aeb5cbe2a59f803b75f6126539bf9de818a8166b7045ee703503b31d22c50f524f4004b3072db326758e2d6a07036f5eb42ada109a4245656ae3465422b6c527aab9c0554ec060385d4b97e6238ddc589b9e49e4a2510b908eecb7cab0e63eee8e66625373270e51cd8b45ec7a9600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009503fb10265cae7a147ee33357bf878a1c99c07326be4fb43a810cc890d0e25eaecca36c68bedb23a4cb0309c7307bdd26a0c2d60e6f3d6886e95ed4fd66a710aaf0a415e7736df484054857f418e0ec91e787c4819c51b29eb9410309b05ae34f425cd73e1e2cb9048b117b31c444983b338506b9b48aa334ba07f9824bfca4f6fe1e6480043780aecb77b2388952c30b390d50e31d67a3ca405b6110f0c3dbb8cccd67721047a1f3b3e892b8466f68390c67ef7955856d7f09ecc7327126dae57e356ea4d7550638a8738918a070b777b3169cbd7f5228ff1916cff60cc927c01835947c203a81680b260ae22ef01a3ccb99734bb279afc561b99a4c1a143be2fb4954a41d15081f46eac4add4b8e17afdbc8bcada54bb67d15a1efce75edae54d40fb358ecfc17e698b684e67c1be736e0372ac478b61edf630edb91947cc0cc71a27197d5418ecc450aef8395bb89179ab6757df9607967e0901d2b66e407dfe0240dc8e2e42ad48bfb05899d9747c816a0b38ab9fc14dd5991cb3b3c933cde9d450882fe5184ce1055091f218914a7b650c504041a6e9b28d34b4ea1b22020fbbd6cf94b9866c03dd6f8a7c23ddf74b6d14fc7e49eba68d54e9e676db470000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7534b8001f1a83b73881a0e6f938ea930ab4e55d23ac7618de0d701b45aeaf0c39d95a251e679c3aca3c09a28ee45b7e0092042fc3d3f88992bac71f8a5c7ad1e344a06017cb87bf907dd061476b73e525ce8572dd234c034d1b09cfd9cea7b797e6c85bc79ad34399a6383238d7c960f0106ce8c36de88d87cac3f3f4c393aa33b9aebb0eddc526cfcd31aa87261df71fcdcca45b220851edcb11c63c0b715379a8a43f7140849becd7f795488ddb0c0924a4fa476bc9c907c000c5f5557ed5e7721a15d3bf286a749771a3991746ea34bd6435ea3a49f8add545c2f85a77f68adcdf8243fe54a69b7ac9f4ee6b96f6c8e92d66f4ab818ab85f03567fbc603051de73fc506639c69c2371e370e496d2a4630b89ac8c180b0260c68d05a42967673903cee7bf2ad96df5d4183c1304244a0916fba349cf356c0d6470a285f5b20cddb5db76f20b1bec0eb6113f009d3321caddacd45abcf15da2e5ebe3f4f466053e0b1506cb02547636da64ae3abead4c1209c25cc419e507a5618e549e63142fe37bbf4acd6d5f2968c5d20345808e4fa9c793f13a523306f7f49aceb1bbcbe73a9f676f3556206de4bf33d2b9473657de572c4fc171e1d78d4ce11f3e0d20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3c56f29bc28980bda091051d0d57006a0a2c8f29abd06fa40fa5d4356243f5623999e7f2c20dc6888a6405bf51928521e8b0552812cda2189620c4088fe97992b5b5cbbca363ee3724824c16ef8d815e104e3204e0d87ce7c29639acb31cf8cda273889a6881b976aa83ff9b15deecd2eee37feea411b2df1fabce1f677080c6982d1594e19548d8862233883be6f0ed8015da077b4f58e26d801f54d783c0ce3260df5aed2c61ada956ef0bc3e8c8ddf76724df4c91875960f7c250a82fd74251c9c6cf59a34a7a3b1447c85d6f76c7957a3a82fcfacaaa45876e8d2b3909d39bc80cf919c555b21fd6e594b241be618673bf4575aa1739d29a91bd662f3d82f0569529c4c0d6606bf3719ce6e4e53d1d5e6a0c936695cb87fabaa3efd5188a2c6cecdf8aee78b089d42a33b192953335cbd091617df34433ad4503c9a12ce23dd4e0d318d417e13270925d88d9521afba94db6de6eb733679f28e72a72858d0b488db145d9e0a1a44cc78d007318ec8ef7159496f2e25fc466d5f8ca6cfab42b7b29ff97f659f58dbee714b35ef6b3f4dcfc0689be5d1cdc62e715ad60456ae462a2ae1afa5d7368c83773aafea82ccd683ac86a6502ded5bd3d00ebc2b3c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a9d89238dcc7f17e6112855689c45c2d023b3e4fc08f9ce44170f859c930f8a31ceb300d9f72afdc600af5b9f459ccd49c8bd09b42d53ef42daf366b98d7dd4eb2e7b3b9d9492f225a183c0299b5f570887b349949c5dddffc9c468a1066282105a52d63404e8c120b97b716d53d2522afdf6dba3bd34ac0be3b76b83d2609b9c992cbee13099a993a0579a42f8ee83a7d2e00fb0fa297e09221ca11d1f1ce3bcb440c3d8158e9b3667e4a94b6cb8e7977550fa85481df408ced42ffba0b475d900bd33f1af2cff02660af861eca9c7e4da622e86d7baab7e0d09ad296ec22f6eb820ecc800d8a5e708e4491bcf03b6bdfd94b3e66680a50a752221ed15de39e9ac2366ec2a573165e7079abeba747b893cfb4eb8dee00d45201f176ad45b32a7abdeeda1d5a8082cc797409431a5fe96bdb4aa6fbb795000493024b5ab5474252f17f7f8309bf5d728c7fb8a34fca235fd19ddcd3c87869f6f34ffb18d42460f3da5d3f7ca3de8f9b7a9adbbc7fb8dbf63b9f596dcd76ee849e57756ac35fc99ea769e4577e492768f7125147e1f207450997f67f580eb88999277788bed4ddfc256b01de4ee14ba2dc6d3b02be4dd7f39b4215dc8c9b0d6175bc670b461e300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002060eacaab79f7e8cb24e24ff2f50eab7144523a99e90740ec345237012fa02111c53008913b1d882803badb5274ed30e9c352f61be62571ae7bdb2cad111c7c2ca80658811497f56fef679e042f3c82f0a8d9b13725498652e3f408c52a661ad8c0a24fde1097b675025465c5363eb3b2c86f1c7870eaca9f54c2dacd79bf049f36a779237d26c4250d76b48b87f83016b51eb592f063bfdea8cb29727168b2a5a913cb1cd7f78954807504a7102c34aaef8fd5ab73b71f27e5359c1aa33a66dfaa48cc7bd993fa16c0f5f96ec317c447e65adc492aab9401a6128a01430d12122e32ca9d035678c48304425b18fcea08849b471ce4f05b39de022ae01f319f1f0874a8ec98d72d64452476751e39302b753ce847d63963f59827c573b4b93d4b56657fb0b54a468c72dc8757750d54c078ec90585954d356bfe7a16acec01e02ab94daa7bd9679e243949b6b22a6e009b6d8c5e5e000bc07b8a7ab11740d6ad1fd3782eaadaac1639fd9cc4adca597cc861b3c9f9c9b2820b71e836fa02cc32bf0ab795ca8d819f37d317ade04be3a55eeb9114c92fe2776cee33667e62554728e4492879688ac9c86cba2a3afdc08ab9b884cb90ce080edd935f356683cf100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002caf39c20dacdc451f6762427adac8d2bba9bfed9e665541fe70927001d0602f6fa08fdf5640603d446b2d40a95f01aa616880735fc80a4c38949695c33344d0e0b6670549f19e235c44f90bad5930fdef852c942bda48884d8f2ac54402e0217405c9de2e020746923353f36064c68924a8313feea715f1ce947a5239c64bd6f13a5adc5ad0de80fb8e2207bde1a928d3f8a01a551f8cfc5e5fa81a0f8e79c01ab0c89eb81118ed03606b189d37b82af2b4e1a88b89d5a539bae64156cde3f67a2abb21efaa3606368db457784f4bbeb856f63cc1127dc0adbcb32565dc794b195e14db78c49ccf0d2af87dde1cc9b57a813a4f711e4f817c40723310791383def247d7291b7ed111ac83d2bb5758a314943dbc1e0055b374805dca180529271dab78c9e0fe4ec4255c729440dbfbc90057c8a6f39fc9a9db8ac6fbc55c812ea227e93b3be2a1e6dbb847f8d4dbc6286fba804a8ca8d52370e9ecdb740b7339a3a702f3e4f64f52ed1906317115b2e05dab3b67ee2405edc2722a44abdb32f6120cff40330dd7c9ea05605c8d8b2e5f046d1c23b4825326ba32775fe5ae5a1decd3627e0002136cc80940b24f1a70d1547f477eb38045ac25f158813c5aa66800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c8a18718763e3513fac70b108782043148ede042093972bddfbab9a45d1078608159dedaebe8271caacc2a093672de5c09408bf86aaa47b212cd794050c5b5033078c288389bfbb99a927e54183999f9ab150894779113b1ebca3a78f6e0627e271a9d9517d14fd255a9c00ae5590fcf71dbc375895560cf2caa0572c33f8be30028ecac8ba0a32e25c890364406f280fa859729e2802a988fe22baa55547ede474023e7cc7ba205d96de2da7795a57899a839fbbc34acb79987995cf5cf43f855f3df7bdde4567ea6ac5b59829bdec11d9c003655dfb82b75195fda14c69230e5004a4a595bf092c0f9a8b2877d4af3e1fb2192a3922c57e06a7e9ef455713363178509700a2a59a10203c7bf31222e3f31e7d431612a0340716720a79966bc10af670b436c5519bc473f8f1bdde5248199032fb69775666a0236b15692185e55bf6ac270fcada3c5320197a38ef1a4dd4bb2484f14c2cdd61821008f0070ae08d5084b2abd1a29b5fa45f5e12e508ce72537a31ccff57f1d597597a3159d21f94a51b739285d9ecb2282a34cf9d954fce25409a38f8f0c301e1a0e68d197bbc2cb7d4801f8aedefe485d9e4497ec1d75e8b4c61497653dadcc7b61e40f6dc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a878de2b30dbc7a9d5d05fd8ac4b1d5b10b0dbe8f5b368e4841d001250a82b67144f4e417a6f01fcdb0e3472d0a8b992b713e6486831f03b0e427e360ca607642883cb67d0b885f61ebad1d4a4770f231f34ea634809425ba22767ce974ab6a5bd65d9d67536981766a5741c334830915218e74d85f8a2b8d8fbf1aedb35f04591393d458b23d62aa7f53d9255820817f5879444dcb8df929c4c356c355b51395595bcf9a32cc7aeae2a3e63b847d414f6b1bd3d0098946bb3cedaa663747a53a87b0ab3bb5165396cc074b256623edff6c3ef1770707adee1de0e7704eb46e2a4617c92039f63be0b611d09d87b63d8ecbf185e5935bbe609e213c010d293df994f1e268ad026c627d23282df58a384a58235d37eac09ff5c01ebeba3b92c69808b09f44f8b56d43b5efa560389ad0c191b4a58d9ca1485ed301e56f21a68b4b18c36c1dddf29d009038b1100f994d12a33df5fd8eb027c17834e9611ec3c027e0be6d8a654974e06c4e972bcf313d66f7ee5a3733e9173d5942aac44814571ebda59691dbfa872afc00eb256483af4ba62fdd3ec74461c0ef15b7bf5656f5e2c766ad7db83b006d694115706f1a36d712267583b99bf89cc7aa4d16932717700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f279a50dfdcae428f296563f1d6bcb2bd9f3d4f33ecc8559c693bfd84d9ca8bb4ee3a37259617cc678651e8f2d3660d9ba3f54bec8447fcab843141944763c754a8268f177468ba9aedb65beb0170b3b0ddb4b1ad7008a02e9afa5fe969e08c35c5b4af69dc5a91a5e340c7c8cb539e4c849e472fed62ff5bca5fb598aa3c0922009535f32462d0163739e2a11e39ff68e977234991fdfe287b14596d93add74e38658e69d0f3738babda88f19cc12c8e7ee57bebdb00a4d6e19c3e05252aba90252b3f2521f1194838a834b0fe4cd49e3eb79803b2e877c789f30bfbf2173fcb99c8d852113db50b6db2ee7ccf5d1c650adfe389b9c39230c8f0478977ee7bf9585108084f0b10c3825fbdffd0f3facf1dec8faed0f4da749ec3620ec36748726e304700f73ff868959e711e9128dad60f7334e07e227f2826746a0b186fe387a493577bf055fa318058c996878663952b3682ff3bae47a8ebe2b8c5dd91b95b86217b60b94ae02a59c9ad0932c076ebff41e87971d0fc64a22ddeb5d4784d4e7166542f55654c0b0148c56fc87bb3e17605ea035e987762fa138520fae73a2e9c169987d7aa270fc78f3f4b10382f563a9c3198d7452f2d7b01249ee1cb7d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa45c71906b527b4317b671dec6fad0391fe18359bf1d393eaa69448530f72d822b650b0020bf8ea9317c50a5571615e4f1a076a60cb0aec075401a6242c34865a9813432bbfdcb2e8fc93c26ac91735efbf61bce33d07bd8add9a66ff89e663122518b472b35e1367c8a0293b39e06043b8f4b61a3c8a3cb9f154fb69ebe4df2c2a4261573d65eb0dc419e84b3b9bdda0106406fd3caa66ff38e84a5f87fb6bb6848a2a1f9a6f564da202ab70d3a2435f54ad22f8ab059d8be7264970636f5fa4dfbcf94e524e82eee4e9a0132c62142d1c403ea174a902fe0801114b5fec90060c19eba88db5e7cb02d0c0f2c3f41d720934f38266b47cce6c56debe37f4236118678edbe960ad246f7c53e12e24479f4a3a413efda6250331351d5fc5132dbbfae7dcd40934a7b98c77b3872043066530b93eae42462388651f7ff6743a08518ff7901e13f7da6d8851df052c1aa1f3bc4f3980272939d5c4519f1239940f81a21f9e521ec15b60553cd2715f25ad41e2762b4085fad0e5c81adbdfa3fbbf19b39f9d5f46e783ecd134bfa01a6ce69dcba5ffbd7b8aebae21e0b87a4f1fd1400c6664fb2f9dfde811e66e8eb72ee5b68d89d3124c51457d2f31c44eb1f19400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002747ab50f4ab5b836cfa85e366106f9046b7485ad625947983beb4733766c2f177282daa0ea7f4001822f84663d5a5402268e6a1e7f5fcfb7aa140b0c9b10fa75d600c9cc2db97e469ddce744d1a5657b8e81eb94611b6887d544befe646ce2657f87ec7e53c80c89816b9628c4e8757f97195b2ccfdf92359b4a35f36c503e1664c5a78413b66c820aa02c61d721128bac15765f1ce709d0caee610f68d4279859add353ef197517d5a976474a70e92f90e5c6e1c0e1247c66e6aff939c94985f2e37dd1eea51ca53b15089ff84ac512913290af0cb86af7a22ffdd6c3d3c400d118ae54de1db8073ee983717bf81b517c0df50ffee5d040a7159773ff55889583c6db4f5c96cf8c34bc45188477c3de18418432d466897425c504917626785af5f9191677a5e8df763f78ab15a9c2cd67b880ed33da1d2a32b5dfec89702c889336cf2719607f812a5f3e17f4dd962d5d8e54b1429623dc5f1682a7d561da95f8e18a125fe4a3cbbf263e8ad9d9368dc0aee634c964a879d6cf4621c6dac79b86c4675b28d7072dd32c4aac1fe288c6d5eba9ec38c7c266104db6cdf9a5cb60bdfc2352317d2edf29951d61243ea23a42abbf58b068372582a19efb4b56c0a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c52b52996de056d7d157d754e240febc2a0290fe2d4151b46f7894c32c8deb533ed29db4628db770327e74f300c306501aa50c5c8008ad488d6b5e90f3297b168f1ae29b10dd1b5d6ecbc5557182d20f868123fedb3ca82b3f3d7eae6429b9cc00584c4ba3f1f4e6a346e54b4b99f59b268820a8bb366aebb33d27859b0f1c3c8dc1eb82b09e0bcecf4730a2e0aa9090d253a2330bd0e972b446f56dc8762f16d6e42e64ffe2a3711025e4d31bf1e1ea5e8e22e11c8e7c7a0a3815d8cf12c518e4414b4d12281ec8f325786a6e035cd68155473b752fb850e1332712df582f3d324948b715905a5188b770b21f150c35377b177d1c3197ecee92dc9c5d188543be930f7ce3f736a32731f7b1b0a835bb39841e10d8d9fdf91c53361c9e491606a359716ebfc98944e7cf033e9672c011ee2489965d8008fbc9041579ff1f404a19a81c30e4d8d9bf4f53f821a053d3d56016176484e93edba6e6c987a32ac6ba5b62aeef93ec564909464bcacce5cc7647319f7dbf61512edc12795406d75081ce3cf533187a4a3ccba10face4824b05da9a28ffc5b02074eca547fa1bfb9169e0e1f178f70476d6b1c9b4e2510d4bce6511ce2b3f4db9cc417a9baa74c1da700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001eb9633672945af48e3aa6b30cd98bd3edce816c4fe3e0cf371d1bd16057f8649b118fdc1ce5ddd5884da927d8df6cd75fca96526b25607a0921cd04d33164fcc4b6dae22b1688bec88f95c2251668792e389448582622cc1cc889bc64a9c58ea6e36b9702f81e8e1ab37ba63fbe242603f27f880f5bd48345e9d59d7d243acd3ef8f191998f6c7138041f6614351fa49c6263766a013f95e7f96173034d117f54833b1c7df7324fa37a304558ec65c443df9d201c989fe529186b4a58374f6720b0c936fb4bc54af27af27d0e9f76085e03010b2db4cda19bfca73c450fb9cd4f1421272f112d10c2c89dfa020d4381c547b1beb4c4517ab6bff15791669c38ca5e52a3cfc7321ecd5219717b880fb203b1d50ef671d6e78eccc3cb6926bce9ede638634f19115bdc0cc77bcaad5be3d62b551ccfddd057fad0d604e7d471a3c97459905cb250589b8119f207918ccc393bb6458a75590edb0dd5e787580bf4aa1268e0232a97083aae2f7f9960b1e83d14aa276cf1b13be1519a20a8127991b9128329d6a6d4bfc44d6c64c823bc62e449fcd65070255d5d1a536ca0b740a4d87651f14d692087c169aaafa9f8e34958970f35ec1f6ecdefc86c6b522347110000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a57752b1ddc575b21383b23fe395f06dea253492e2412d8bff401190e79201d4b3a436f7740e4dc2b57f78fcb0150f12fb1983f87881427a186bc0c597d16775fc2bccd90a25023ccd97bfc1fb07e920f579d4f31d8258f152137efc1012b88f2df9631db1675552fcfc7c0bc5207d9983f411865bf54dd8e4644c11c6c08555212fd45a6b8100f2f038b9e74a829d371ae28fa13f90aaa311908b5323e9664f5094172e7d66b4c6b003d973d4ed59a6864452b6f06d3ec1428e9adc9a9a08b53f509f08a47d65461d69e634bcf9e9684f69255fda0d91926ff3f51f9c751bb5db3bca08ecc57b13b0567bd06e62a5c0014c3dcf3d1c90da70d9598bbf908bddd4d5bda4f5a2b5554bf1ace0204a984e0d30e5bc9109ac7cf4620e3dc3e8c76d758e81a8167b4c645b3d5f50eb328f56c53e764bfbbbc01b1cb1025b1b088655cc97d8f219f7c0b577836bb56b82e0a21ef6711d5f7e781119422cd0360472a9007d401f274a2c96914774df28fb017562e953751f10a375943409662234c0defd04ab3e83addefa0d9a6f25c8a3720eb9942a6e7c5e38a3711b74a8bb0ba9956966b648ca2c6ec357358dfd6de3df70a8833e94e6e22c9860c100f3704b77ff0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1caf1f578adf147329d1dce0abd4f5c0dff11b76cf88db59aacd5c787b6b4f781b3d0b90d6cd22afaf83ad37a4956404baf5eb56f66eb10a23854a29cbeb7300c0d41e642a7432bd35858cf34294a6375a84b6082e81246fa3d0933534a2397a03e997b4ceb0245d09299ccf50032afbb56a75bf91169ce880f75cf660ad4ab8e22b847fe456a96eaa7d76c87a5e12df6ca33d26444d0e4557002e035cae051a73ee2bb9a85b23f18ada51ddf0ae2ab7b9e11a86dd3d3a2d967bb29a806028bf302b4744ba99ede57f834c587a34a84322352a15de049498718afb7362451b9c3392ae2eab36bf514740c0f5c093dc84873298e1ec69352b351660aa86538177c83068d8fa0fcaff3694352fb33f4546238bada593b45136f39db1a84924575c17df58d014a50354f04c21264018243c30bd98604442270f17199feb64469ad018df7fa4889784c2974871efe63450dd2ec5987bc53c61cb8d8806d72e3675a9f6c0572b61b1490f0082a2e8806bff45918f12bc48a12cb4d638f35c972d4c1a888498820ea5205788c682b98c51a1624d03e3c0a2ea12d0e2d5a3a641daf1d621f8dc37d7e77dd47d5ca7c8529870993b855a679a7cc459337d2a263740db400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b0f1e7f945326bec18dff810e4fcd3de68c555c43b01cb7eec17871fad7c49b2bcb1f3cc83080b6ae4594c5217cb23665cb6f3c0335de5154ffc6a140342286b8b7c48d580554590b19ef33196f39d214587276833ba463f3b1883f583f5b2c9f5d4c7e3d4911ce1d318e2183deba1218013b3b89bcf6b7d169e2cc1f2ff882d3a880bc0f9e8c1fc642a8823932de6d6df60c0bab5ff2809de28514c2ca4ee5a76dca6ae8bceafb300ced4472a8f76cf7b42b082774e8802cf3d1470de18d47fa1277f19ccf6e8a34d5515ca17a8916577b4df82b5097218123b806f3c2d989171fa3eacc65a0475141beb5e1da0005096dd9abadeaa22f77d0c95a14efba4acbaaa3f5ed762d5538ad24e090a2a505d212e230105034f8276ce8c5b2268a99ae97264715f8cdf4002ba7fbd65dd733d6ae396a5d51b15adf5356c18b3883df2735e7088895d6247c17557d1d75c4816964522fbbec6262629ccc754777292b13244ddb7b0d2a8ccebeea8933098633190d22ccf10de3599467cde33856b5faae08a75d2bac88e4602413be506b6899a8144d726881a0f904b0c1c41337f527c8f2d457accd123fb4cf5a38609afb73faff2b40af90196d4ba02836bd154bff000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026ba525ae674e0700694f140132e608dfaf14df33743586ae460ecda807af8b42e7aaab93f06a81280d3eb41fd229d05f153d7dc8002bfe80ad4a104d5f5b13755a183212e775923aa4b61021c193e7bbbc5e64ca52d859aed9863f733e19b3eb35e21a1c7e43da7b91921ec822be9744818dd0b8168564e1c9b2bf03d6cc00cc547bab2d92a2ad1f900c5b04bde285e24a195ff8d6ac2da57b887f394751541c69267add20fdb9196090d26fddd61051a492e454376219feda095a0e56d2165e2b619905d01b3da7c07cc692765639d9c2dfd126fa11cfd19a3d9dfe8e659c2c400b4a8a77e64145128b040eab4aaad80f5ed343049f82c80f63f848b96b60c0685179f6acfe8874a9a8c7dc819d3903420e8a6216fe3025810b5db33ed4b2208679d5e7a5892c86b403e49c5471f3a4fb06cf65082c13e96f470a52f14114cf84d7754e8a045f1bcd1dae8dbffd5a78563d8a95b901a5b791ad8e9ca5e79ffc2481bef53b480b0eb4b16b062eafed8ef100b88d0675f64da5af3426831e62622195852720b926d927e4cf36cdd3e20e0712f350892bea22bc1961423c559df873d3a225e9401c195cfcb096e3e771f3caaec10452a10b07edf4387d7ebaadc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002581d3e758da29ca653d655b5a6177e68e11fc1aeabf5d65ab8519eebf539aa0b4b3302a6b41ea8b0aa8a2913352c2c727d572690993a6d3626ed67585566f74d74608cdb9ccefdb0c4fad9f5489154cac92c5c60c6990261778f4e91f0673ee4abc42c288852d2c24678a4ebd8e55b78a21c96d38417f36b258ededc4ac5574067d5cdf5ca65828152e0bb52e475c71b0ebfa642b36ac0bdbb53bdb0d73c04de1e5660b4b3528ac9baecf523a5a059a0f1f141ea9a3f71e605729e5e9364509398cb6c3ea90503f170d84c9074fd926c73c8c883041418e6fc583a26c44ac28187b30fd3f52633d41c7baf3f0335605ed2cb3ca1888c2ed317ddcddc9536d5fe75c524313b8f91635893ce530e86e9f5c39990975ce986b5c5f708ff37ac017e2c7ff3e81def0eb3f61850460cfa26ade81f7e5fb3e3f80f7852a7aa61f15a2914bea178a8c26b9d21727f00f72004462114c675776df72f3297572ba0339cade0d43d00a0903cc5b9a6efb2714fec74019713f5c3b802c688fc9a58a5be9732abf1ef6bb2f9e0004252b4bbddab9b7354f289f10171dcdd180ba8959f0bebdf70b199166217cfeb7b38d41252b671591811d233b729d11a7e0923fc8cd92510000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000133665861b784489e831172441fdd5f745b60db8dc82d2d0e8a6505e0729fb8f88648dfaab1192c213baf9276864d91c473b3bb5694011ccb072b926854390f74ed44b59b9399441b315322c3b314996ab738eb6aedc7d8f5a9f8414585e52387f30aacccfa84bb653483f63509eb82160575ecee4d57f56c4ebda45ee624382ab4adf26eee87030e1bc426a37c2b3a190c59be6b513f2124dae3829355c0821fdf78d4fe95e604e41a09c947dd471cf246577f0b1f5b1dc2e881625ccb346971be943f6fd9189d6cbc3355a46d100b12fb37491eee95f0f656ad24135ad4e2cb04178c30e654474e19ec3b12c72436f20ea032a241970ce5555b3a675f0e5f0a9f92c355c5b4198028a2aa111a2e26d43add6f20fcdff737c281961e786d88a7dd4fdbf5fcdd8ab14956f97dcc0a5069e6cbbc8d27b179489c33e88355151db162d04f606e2c1fb005cca8507311295eebde8dc6006f62e365877ffdb4f36857c92b5936025a8797e780d1ac9efbf128fc6da3b8ce075408a95e01ea172018f23b2f79733e6bf91936827de62f2befdd1eeb40229e14d35362f73c826fa987e82f89cb807f50cd6e735de65857484bd837371f4dfba1a741506b60232f6bf0f00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b4840142ba0e378fd3d0e0e0ed07ef2046075d6a1dee788f870315f68ef3eab1c3f5e0cdc750cba95d36c3d1873d006f312c3e2dde220a49e02beacd031bc99ba92ed2bb8a2505d3f1897e6390e255d14731e9a5d037f620584f59354a534b3d8e87802a9a612e5790368131540fd5f3129bda96cb260ddfbb91fe2f4c00e56b4521e0976684183b8de1e4d58202d27871624ba34683c6f3c3e1d8fb0c162271b42491c79ff6995445ed7c905bc3870955cc773c1df93e9415f409b2c2d33a0570b0405ececfcf2f5a6edf6d031bafb31284e954b0cf8f017a5fc137680e1779b4c0f0ee1a18016e1a52d79713417956290dd34ce4c581a1ab320ea26e3e9000a478e1325c8fb8797150dc18737d1619d207439eb37a0536fa4d2e6ce0a273045b0b12f3c87947da06eec81c48bca5d3dd5f142d62a871ae81ac629837de96b5e4a7d30559452fbd893155658aca6451056fb16b33a208b4009cce4f89b21662a2f8b01d7a8877fb35ccadacb06ad6637b117733073f8109ed9b74eba1e190d06c776164d137d9be68347a826112f6972de02df5a21591998c9a86a4814a0b202a29e240ac182068063f6cfc9533a0e4e7058e09ed9ccbb59b87644708b83ba8577ff062199499169f16dea7f13684a28baf3e8f834091ce5b40b6a6867d2f2a1566e0c2120a6e2a306fb38673a0c478710cadf1da5e5a3f3d09f298451babb6ccc7d28619d8b7f3eb1cbb96193d1c4e3317a193716eb92865d8d933e093071d1afa6253f6d451143155fa7fb1be753ab5a6fd5a90e614f1429ad6dd9f79c149aab0b21f3cca88d2c8d61061158315a596a7b0edd35c96b7e5c9948a9313f8afe20291e96a0a97b59cfd0c53a69fd81a53d5706e4c476b3137899d7c77865cd9d76d825945c6654584d74337be3b372d21570ef7f7f2c787c73e0af3ba6419ff1b7b30ccfbb61de3434f29c367424020eb10c403b584952dd1d2b0844af719009f1e11c36404768d9843cc9600a10a90f0ed1c888ef8bc65f6ed61c54ddf198c68ff70d531879830c73f73bd40204c37088d4de4aacc4b2611d143097987a22dbd14a0488eb0cc818435e0ccdd204c08e2b6a778eab83f76aeaa8e571205490fa6d792f36110af2bd6e146c143241ef08639acc8dfba407d397dee825dc2c7073f3e328c090be6aa52c6f955f553e50ae69422a885a5e504807c3cbe746a6b4a107da19218c5e112776dafed2b73c8dcc7ed155abb238dbb02f6ef0130d57a753d56a1e58ba9e34ba033d26db4d76a0eb6d52ed7225d28d9e2cb2e06c5dd947ed19980b0183708362bc095383bb95b43ea16c0f852e2d64c4054d117be257a953194c17f06e8ba3ddf684b1f2b9d0149990ab97fd5a28e2219f02f309e8debb6d45ab2b0e87ca7fd432fa3c0055ac2e88aa04b4258759233e3d39349149d1fde939d720941ace3488392ffa8bdeeb389271c7ec77c5055eebed5a454cab5ebf0367390ad68f0147051ede44a5e7873a93db9539f8719ada224fa1615686b0e5a8b4bc09ec7aeae17222054ee48d90ca92ed35338a37759c70fab7e32bfde488949eeb2055194ec0b4769fa618b2ad2114c0e4e0366e38f520e5c175729c379d6394ee2c9c4f7423f86352fd71fba609e89c94f37c933182bb496558d8bed73a702aa619c1f66aeb363aaa4388c492159c6f321e2f8c1ceb9b1b1d5f42af790f82ec47027b3dd7ba6cf5f13fcdf2937225bb132199acfb172ecea0151dedf98c7d8a0624e386800e2dfb750d3d29d0820e04342b2316580f5ea17bc8f4abf009c58d9927bda34d017b5d5e5b7cf65677f7725c570e35bcd8e9de97d93d61b39f133ce0124a587747e8d724be027c08aec200781a64bf98eeaab6669619fe8529b4f789296f66ec4597d33061eced4139050231fef98a7f2c7a13bafdbac489842836be23f888932e3541032274ed191bf1ed3efb0c62c0b8bcb8f9d0ef3f05992fd3702a28a441f087d475c807fe81fe3b46f023d3c4b5dee2898658ae4c4612f3148a07c6cf5a1f6fd4edfbd5553510e6502163733724f0fe3d1aaef68c90295ee0dc0241832296bb756d2f9c6a6158f85a691099a6f5c95741a397809be8e0921c562bba513d1de243a862cff4cf28d8bf058933a90cce5b76b24e21afa1129a6ea311f70fbbeaa5ee1560a99e4f42ecb1682647b3d807085893fae131abf6743fb90328f3a5740da30b9777bb5a8d50d1e5a7011fc84f5381a1a5dcc159661223c5197a170675a49785398bfcef95a1749afbdc1546245591b61eae6e385bf83bf40074aa5a16378fbfa0d3f5d63d603b14cecfeeb94fd60057f2dd011bc57581ca276bb2f0b98149684debcd1be9a3751b32f77887158afa3d7c2508e9634e8cd110d447e917254d0acec70a4f6ffe2dae30bb9b2cc9d3b38776c5f21c416f96451a7363411c5e74d8815e515e3b54bc005541e007f0aa328c0a6ab38dcf017afe286e6f632c1b684eb8c5f011c0fb6b85ca9b58f50a7f05d7481fa3d758f63d49024bb1c5950de8a7c9c4399ab59ec3e56ab54f28946c94fd0cc4836f24fe7f4222850333f619b8030f8f791aa86e11d68b1d4d64809c6e0656e5c51f2208259700394a27fd6735be459def3700f008e614f806f82bc4506b889e0ad25b7048051f5553391e33439568dfbe1424a1850085bd9a33fe8d5f7b2e78e997583f09c8233c06d6677dffa4226bc531b7e092c69cb986ffd4f1a7676863c66503ca8de62b8b5598f0a279c7c10b5b31cfc974950212008e0c24eac2b41cce3d9cf5291807a0363bea1364b0e7902cc5c323c45537425eee668cf550062dc37f7ae2a9dd26d60f20b8a9ee2f5ea3424fd7a522135a072c0f1c574588f51dc8c272f2573e40271c624ff1c3853fd92d78cc95eff52815ffb71213f2503427673f387ec5ddec065eddf24e1c28b2663d4e148f00b3b8b564bd092001824672988ba3200c3c9710053b0894d79d01716d3a1b651b46145b51f660be9639d79006c333d0fb89e708108fa5c7a6ec2a6c3e7865ce420269b58d0389982c198f27f3fbff4de483f7072167bcebf124859029efdb91722f453af6868c8b73baf968803b1f4121c8af15bda208b8cf99593ad50139281a362217fc8b48d28956c270ad54fb8fd108ad09a324b4c9524210b280487637caa391c4a2c4d9ee3370707d59e6ba8fe66edd1e8d66db7505d97205806e8b25e30110621e94d80e69396016d01e6fd73bad6810ca868764a6641f00213c7280596b10c4b728b84ee0f15088311916402b1fa60f164ce91becc20787b49213fc8df073ec886b522ff2a952f124a57d3b7ed6bd04174bbb1122faf0e47f3977c430d662ebcd4c54fc09f2d676cbfcdf833de5650421e784153c6a2b6ca1629a0dedce7f2bb0e364a1f783da6193b1e5b9d200b306f82baa78de14db2a630eb7d757dc32b8768bb30b9a6dd3f73b7b02c8d1187511a02b59e4a29e86232f4498af26073fb422a1e2db2cd2387804eb9e269e64ee1836e89dcedc1af603b83d481cdd3d97747d6920eeaa47b602632af4707fa44e0f837eaf2c7862982525ba8a4970308db696ed21830e006d5befd51a863884aa019c6fcbecacd833a84f244e7d0e184f736c775ceddf1ac8c5d9ed02c8da93ff184c81cc0e1cb7684c8647f97f6452a8f25407f4fc71d3f32deb1c00dbd9a6261173d4cdc49525ba820e6005c75058037704eaf6ef062d2ab4a575b16f5fa28a00647c1886df3b2a5fd4764c585ff3541bd72aa930fe183324842f3bf19397451cffeba15bd488faaba98b6c9d379416864fee081b41dad81bde3c8755a9fd2e1eecba51ffe3599bf80595ec713f6047933fb21ae061cc9c8edd26cf9fab2dfe20e7c268c3d26c78f08e41d82fb5ab9c3a5ce3bf7d0260575cb220556dc572601357d46cd73afd58b2ce9f5af43319365f2439e5e9ab52117a4c8ece87075df52aea6795905eee3118cce486a036f5aeee46c51779913e6dc35c87cdf7bc0f961e698a9dcbefdba5b6e1485e7434cbb9fa2ca963325f60b8736576c6160257cf1d16991c7837768209801748b6af9dfbbb44bc1fae64e3f64c65e9cee5b248f12532fbd06220d4599e394ed1c92866d922b6bd7c48a895e343a23a914b0645291646369b7beb3674087795771ccd9ae9945d951ed653ecefd6ef42a0423cdefe0f32bddff17f887c0ea806fc764dbedabe74919f0eaf5e080d8b5967c809d20e1ec2710f37db59bd7cccc6100de30eb21102f8ffe58508ba6f07bbc0b9d2dd7d0a733463513e513efd5c6a917fe490f9e52e7cd333ce55ca705a7317065c3b8b0fb8480ff519918b7d524f35ad4808da75a30f23ccaf045dfeb7cdc41d12a77712a36d5666e70567628a12fe2de0dceef78e05cb0da3fa0fa58227694768e8ee079f10be1b7e2e0168848dac40d9a42e4a48c80cff47e20fc8b6c8922a62c66f2007b1e9c1ba9d1896a952b3e5889f7de45e416afa0a12a36f54d24378127bdb0912c8a7c009be8ae159314e7678c82b1db7089e79cbf8aa85ab1de197d15b3a0d23ada0b06cc1d6e4f94864a1e7f3f024eeb2fad63c15f5a0cf334a9b31ea8c2eb1f12fb4c9161cfcad1418aadbf767bcd61e16b5baaa41276b512e55015db225ee3e74aecae9f51db79df059131f114b0ac703470361a08281d9c0bc18463203ac7a08bae7815624ed9db11d57cb3d8f46d3179b7fc66b210fcc0507e8a2be298ece7f9b5489f60ead792a8eec7780a1f737e0df5b028f0d8d38c176cbfd9e2c1eeb7d0805271130406aed6cb99f9f9e505c76101d22107eeab1a5161c07cc0e32aa415ecc45ba02654c59aad69d7db4e0f034457b517bc73c4b636cbf5d2b21f86f527427c9beef8a93fc306082ee2b1a5f47f4153d4ec8af0c00aaa5ffa51bb36aee7133cfb85e62a066847b939117b8abb2dd4fc448a961be272dcf5de4208c4b727787eb6b486c623abe1d31c231b11715dd79986db60abb2f57cde9e801adbaea3f3fab6b2aa7c87c186f3068154b8bc26e66934dc1d381f48b02af671cf01be39cf95a9b2d098fd7666c086cfbe42e0b749b38a52156005b7e61dda52a7148556b68540e2ed0b0d0f33568c5a59ddb077c2ac79340cdea995aa3d71b177fb9dccd3ad339aaca631a706c5f2d6a5c4a0e8658d9cd846592197f15fb8c240fbef4d1197105e45dad14a6c81210d69b00da277b4b454a6c1eeb2112667618d7fc0786d13df74e027940407079cc15cc660cb3b73591f38b3c987c1d4d790f8367132aa44f8fda736f31b187bd386436f37ef60696424d77c533191bcfee1afafd127bdc3d6b39b74407b5449843a5c2429ade516cd30d7896f5012d157d0de48111eb95267633061f0528da6cd3e03dd7dd7f82f2171acea221e91e6a610c2a45dab43b0955c36eb4bf27c03a0ca9493156290e5dc070f8fb8c75e323670df7c6b5faef3b4024fe45bc79f86c3b26b3e9756d2b2dc4b7e96eab78055c840fa30706766594d6b7f418968cd7351df9eff44650b4dad05e4d91f695bf45db20e5d5d4f3f7fcb92be563feb29df6b79cb094f3496369a4e359e22d522dd8630f64cce96be7a5aa99c3de24814d81a26e87876f2f66d4584e60ed42dadfc34b2434c7e38293444ddac6689bfc328dace641bf3b5dfb5c797fa90456e0e2e63c2d453d5fdd71e57bb7195bd233ea9644404c5f153f5599429b470c86c4f705740f953714c7fa572d3dbdad4d8645486c7b6c9774e1c6f43513649c119c2fb827003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000048118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000480d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000480a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000480b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000004829a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000048141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000004825e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000004812978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000482daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000048189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000481159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000004805ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000004805c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000004814d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000004803db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000482ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000481213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000481ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000004814fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000482b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000048305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000048280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000048223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000004817a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000004808858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000482618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000480f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000480e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000048172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000480b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000004805bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000048137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000482e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000482297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000482608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000004818373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000480422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000048204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000480afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000481998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000004828d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000481da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000004821d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000480ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000480e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000048107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000482f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000004809726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000004824f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000004803c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000481fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000048205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000004825110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000048283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000004821cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000048094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000480c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000481f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000482421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000481fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000481bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000048304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000004800000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9d9906b5d54af1bc75e14d4a50d7228bcc9bec96c0623956d0bc24b5e333328de5fe647fd842de99507d756442ec53ae753fbebad9e3eb6ce4684a7582a0ae26cf00eb6080ed65a9f8031ab6789d1a92052b7b99b3f238714c7d5b253a1059031372ac3f8876a8fc3b4b10e60bf5228f6f24d2de82f22528b3932064aee5ddeef6b0f2263f201c1c9b2dfa815190219202ebd9ba520f234f2fba42d1d67140da88d4bf6e9b04bf52fa8d0f00cea0d295f0eeda1abd224586ba128110d9b5727d0c2ed3ab097a17149009ca63eb80e3645fdbcc76202927353455c79c3308e2632b0bb2e0b975fb80265bcf1ef510e56cf76652dc880e874293b7a23142269588a9f0c2efa6f4b9edaf05e59495df8b33383b0d9a538f73e04d61a451cbf8ab05d061d85ed430c484c74ae90c4bb07d823fce2f35c8ab049361442d72267d7e8806c67c782f407f61b4ef69905155cb34a901fff135c1cc5400f4e07b4cb17c9b09a64ff9997c714814c8114d6f433e455db90ca85d3e86124327299c11bada53774648995086342cac4cbf97988966977e69c6fbad4be66c25746e797691e936f3186cf927968c436ac01600164d0d474a92ab47ae2fd4c0045f6a7ebc816a10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000925b486c88c1bb9fd4a0c3310281d8abc374ec9f415e27fc8453d36521915e930ad13c0cf4de1faf9aabd0ba14195bed2ba55786931f910e47643db386fd987caab069dc2176acdf80c884719188e9309d50a90a6b946dd84a39cbd7b1c2d3ad2c0155bff3fc30c4ec2e728c6aaaf4aab48334d9427d34aae780ac1a7b65a72a128fb03dde89f1101a370881b65d12a309f9a02bb8b4f5df37ed4d963ed506b74c90e38a93bd7b717f6692fb5cf6ecd4d1b0ddfbe5f83c3ad820275a7990dac844970f1b69e6767aee619185dbb03ff8dcc83560161ecdc6e6c66eef9a7da053c6341a5401a9b395385fa135ddfbf10bbf55ed32e9be1919021ef85da5b260423664fae6cc746730ba8f5957119aba3d375e55239111732a20e59799ae72309d8917faa03ce77ea15a506408a4dae5ccbc81a88cca43971baf9778afecd39059f657ab891123aeeb001a526b0f6f4e9bdd35d74075bb4534c9641e5ed9f775629652833a0b3de0370be7efab69909445fe609541a167353c0664d33c7394129ea771e6b3e7abaa2c20bfc511b85f8c987b24eeb89c6879cc090aa766b8cd730aa4ffda2af7995430b9e2e814d9ba12c1009407e596ba42769b2c8692a4d44ab2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e7f38e3673856fc23ef2aa9aa67dad7f95c52ab72bbaca9e70ddfcca6ab0354a20e94c199750a00887f05330859134d9384004c94d00a00bfb0d3ee69f56bea16fdbbfb20492b8178cced6844c37a19541f74c04a6bb00b86e32a2ccdfb9a31eefcda17f0e5b1ca5583987fe5625b3641cefe1abefbf6965bc4da628008c62c0a18b01e67d81a398a7535895d5888f8457f21205f9f3730bdad24e8c8e5bae1e2cf68254e5305568f565ae2b0c1dcddf658983bd8e5a721ec7fdd4fbbf6b75d41415c8cdf50df00c3945c4440858fc82c87f79ec37009241a0e3de157fc079992de87071b4745fd674b1e4f2a37ea1aba854c5b91d0959649ebda0e44ba6c145f36a6fd1d1b6ad09c4589656e445f92f1014e0747427db6a5929b7f57b72fdad3e9088a5b291fca1401127f24aa3ad7bf8a2ad5bba3dd275c85ad368870ae65691b74a73e44d63514718c4a8d8c27ebe3a054545ea1503abb24bde88067112fc89fd63501f59c4129fa31cb30468bcdbc2b00f86719d30c82b1640a2a528010f78f3a780badf9c1b6c0b2ed0e9ff4a39064ef068c75102ac9bf66c1a27e39448b3e1609dab4ac561fb892a9bff4534ed8cf3989c1be78c3b2b074adcf0bcbb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d815990cd737ce918e8233487e49a599e3b2ab22ff85381c6fd317998bde20399a09f7154990f00ca96c9f15659654de751f439dfd1205d1a83f03dd68ed641a43be909c4863a04738d565b1aab82d94dbaffd996a7ccf21687cf97edcd50fa8e5953df0cb91e0dcff07ca2991da4edc7a24a7d43ef052fd5e7891603a16cbe79b5dc74055707b6264c76918b5b464ad3a23f7d7cd9c17702c7b2cb3061623f0f3ca9931dc7d71ed54e2f4cb0047983ba23f52227d00615dbd4c13cab7beafe0dd97907d5a4c029ac77164d05faed61c54f23eb5983727baf6d3a62f6cb1ff0a3becca6f8ee67ed7b2a43a8d96990d8c4b456f7451210532645b29f9d6c7ad0f283eb9dc39d4373bb5f0c2a4834abf0640698927c2ee625e152b59b6356f435470d7247201213c745b927d473414eb86631d7e2f9ee15c3605a8a6b8f60998e2bc99bdebfc7e728924e5bd571db611873c7175b8a0f2c9692f29a274eb12b6c45ba48bfeb1732cbf31b03308f11d083ddef851e96cf576a7719dedd467b708354c23300a48e9a8f16b71affdebb4397721114060d5179f4d826e6fc8d315a6cd2c77380db01f98ac34dccc9a941b1391c91c49cd4c05448a14be3b1efd936bc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2e30095050cd3c62735f2658ac957b8d66f98704bf320f9053fac1bfe73e6b7cdba1b96adcb73a464daa0357d950a190901fadd14dca2d19ea70a02bbba52ddfd8991f0de2748141c2f7304df14b5d83356512061aff3bdf56605547c3954a4cba0e4036ac1826094f00baf8920a5f337f00d3523e72b5ec2bad84d77efe3bae70505210b6e63eaef1523fcb48378c92c5a95be13a0d3f9bb05655a9268373b1309641d4b518bf142d9fac03e9f0c94bf23d26dcd4e3c1fa1d78005b20d0e4b01c5612fd0f2aa33177e904c39d97ef8053466c8f936b706c3e7a0a54efd10679210e8bfa49e7ebaae3e42e660eb5fda639573f72b1e9c3f68c33e076fd8d6d4f26b7fa13f65a46b11839c7dc56710f1c8467f405512fb0e97edfb09c5bfb905d231d837671db1d6a88673838c2445ab3250ea89d6dd728950513d964927574c1dfd964c6ae4dcbbb77f07796b1b4b8716d5ab21c4914351a72971ec258de6d9f2bbf6bb99edfabd3614f07ecfdba1484e57240e0ce48b829c025b7ce0897541327a6491540234152d3f5226e9ad953820a398f44646e5af119a81de251e586938123f2583fb885e7c4ce9b59b02072b17323db7f5977d40fba9828e0035fc76000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024600d1ef20ebf9376c243f053b250da137bccbf846c60b9285de145a1b9bbec0cb0823362768e1394fd5cb74b5ad45c5dbe4ce4158a1346e80950ff8a38c5299d60cdba0a2ed7b3ddd3bdfad9539222a291a68f726e0d11b4911a9a4668781526132d6ee2d892e2f75c0af4ca0f4a887132dabcfa7e812c425c40d2b3bb6a87966e14f74fed006f99e386d28688eb1994476c213d5e2e81ccd897262fd2221c0963fb0c5e633f778495ec90eec60fa21d7dc07fc39084eca6d2c1354889ac5d2c3d31960aa7b185a04aca67ce59b2028be93c0f3de64045e4c4e1eedef9b7f91ca5c05b64d08cce5ecd3bd864976a324cdd81f30d9d2f1938c7abb8f40d05f3748ee737abcbf9d1623b86e9372b0092100c2b8f47ce3fd94562f3fe8f131e17d763e6c99ca4c435d40dc954f90a5be792545496c118acf198598dd0cfbf3bb4a89e5770f988bc94b29a492c31c68e194ed4ce78a1ad860b6b73453baaf9abad3459139f61e53ec5f57a2f5df8c3affa65d25ec56dfdd75bf61fd7e42edc63c8c9a8a47a6f6337436b86f9ed5a44935b85cacacd23fe9cfae0ed47b2d2d6a4650023554250a8ce633b64920eef2f72f25f089112564de60fc07f31a41b628724000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097098bca3d14498e5244ff22a29c6754ba77336fc343682e8cb705c6603b71ce6e64f699bc506db3b47528fc7ce3f7408468c11b7399f2fc57bfef214729f9bd0159f27ad2e1a348f0009456e231b65bd75448915a3e17d571dcf16a50126be7d80e36e8b1a433c69375d3e959a24c20eba90827d8d706e85d8251f9fba49eb49925c388cc947a689fb8b4e07e44dda372a050be03f57616f07288cef7ba037451703dec5652a98c334e46e4d4e4d74cee8c256bc69fcd6226d3227e7af3c70fcdd513f8e1909528756a3f4ad3a791f97cb1c8f174132f1cb9435bfb05799687644b3e7e0bb35ed90ac051d363ac990f23ddf859bd0691372d940aa107ec7252130360842b0a17fb6dd302b8724325cc3c68c9f90456c118d16bba03b54c12b9f427b38239681cae1bbec6f0979f1cd6a976522db49281ecacdd1d38b15a45b6e4711c9e106fd00e1e97ab14f1c762a27c481d7ce3085d6e9b3fc0fac3c5c0be7aff8efe1889c7e0e0ab715c6d18f87305444fc0ad828e861e2b7fecfa97a3f399c8fd4f207ed8017933f3f14dbc4d8fa6b04935fee12a26c254ce6962ac4c659fa967ba7ef09fbc44000cf8552546c713d24b76f7590b8fcdc5baac2ae935bb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016131b37f632246599496c21f7de6d2a0433e92c903378b6838f2056308d28709122517fc57a365d117ebbb6f6286171e461100f0e21c8ebf63403ae41d16b539545c71d0134f94bdf84cc3bb567d438a73a7678a58cdcf712f490331ff25536b6c3cfb60dfe61fe6fb5d7fa3695d7eef3799c14288c37a59894620cf258682ade1d58060c2f7141b777e18143e7f8f8028fe06a1cb818c63b0e0782df75e162c2799982cda443d192e352df0b6dee5a2b7a25d53ef3dcb0d13498b2c35aabd8f1a60574d6ac1606aec2f4f573db1683354596f7e14a56d85fb966320fdf27056129fbf71a592f235c291db9d904e99b338f5048543c567d2430cb88386f178025bbb31feac71de9911978d0ab647e7df71b45d38b952081ef3bafae06d3e819bcd90f39084746c960bbdf7d6b34e94fc6a0d43d4104e3b62b3b1f4b0f05d231e475fb85a536b9d1b8c2aef4484af2be3459c99bf5ff6f60eb5a9669893e20760169ecb76259d96d35d8da5af990b130e9160d9f5d108069621b0d36638550f10d4dd2737db82fe08973e69f624f21b8f2b7434a594db238c55434b68ee4e134dffbf1914a6bb0f6217e29163b7ebdbbb7fb97f79220597fb5b8a5eb4f7057f40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000270444d0d7dcf34f9c7fa821281869e4021f33d1dee66d66c03d2e36026f1d4f68a8dba5a825a7836c6a2442ec693af4bdeae0379ebbf9f5d682256ba759b6292701077fefefe8c6f3f78ad10ebf0ca927a5eb8a86d3d51b4fd976f7b4feb9770f630d3bc4950d50f69a6046e0bbf13a3a431961bf0e4ec3688012edc100e94fb3c9df12beb39aba012c49f6c15aeb18dbdbf66e9792ee6e076ff5a3c6973171bb32fa48ba9cea07466de573699ada7e20c651d141a0b20f8a3844e64ddb6c50b9a27a1a39124db6dcfa7bd9f1756ece63daea3867830b7ffcd2f6c6dcb9ef0c88cdcee21e654055e2bda8ee5319d6695f934c2d4bdb62478b805d0fae9446cc84333e56a00a75d66af45dc682e8dd77c49e36f160638eef30b31f7d0c38b1a1f7a2fc1383eb25703d376c91fa237ee56016e5231d27b2352fa323a50f37b0eb1a88c7d8449f0e03aad3e2784a94fba6455935a938ee4ed34b97664d6af727d8f55c40ae18132a4e07e35cdac5218c34444dcb431fdc3650fa79242d85a1e9e61ea467fa55b479bae3af332d0477a3a1ed5dfb6b3594e493e05a42c51f015d714212cde489ee7ccd2eb087c17d74ad8cd914bfdcc044f7b19a503d78855971650000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af83077c2e882821333830d3e1e81305f0904060e24f0d258fe997e43d1b1ced0fbd130e5301b6cc2a850d29e7abcea72e21c44e0f4955e62d9c9176d5c55d154ac34702b3da23a73b831db640c5779082c20d32c4e836d4cfbb74a83ad415c366d4fb2210530bf83a0b5cbc5b4b12545298c8981f9b062319e0bd5164d4114331c16d524ce205320d291f2ce3684cd47e6d763ca90e276d6698451ee6a1f52afc98fc61316239e99769dea3a7474137b609999bdeb586caeab142a768abf37bbd4022f9cfd5b559124eea375026c07144a24cb601bbe92f7eefebcb4aa09b8110dc1afa1c39ddebafefdfb3e553fa769937a46b3ec88c993c56bf761bfa1850fbc7247b404f1cf1cdafc8e1df63f6e4eaaa735e32e690c7b77a1f9f93a60f040bc1291ccf3f908eb80c0963f9c98e219f95c91dc587515b84e846ea61c5e96345865b9a7f7ee32a825fc0dafe3f39e05062b71ec2f4510d60128791bf25b2a2878b637f7b8a216599b3d386d8c4f2bc07f5c2a2e2b03726af0f51e1470977e56c75e7b975e5cd297060e07256b40a6fa01dff1be8a782c96b4e1bc61bee76efc7619fb2953aaf0f468f57a0842a5b41dc9ad81183e5554d0eca6913e6b4cf5100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c5ab5409f49d39483291f0f41c21ae905b45b6cd113166474df02fbeff06d673ca0a1842e6b0e0d1cdb383df075dcda97e65fbd0f8072913b853d1ea6e97072cd80f23e02eea684a152fd601c866b9d0c6f9d2ef95b75e2953b7fbb8feeca231bd5d65595e3cd916c46e3fcef555523065132b1daec5cfc6ce9222b38585bc475c3a9bd9aeeaaa9b545aadf407f7f859e0cced9b97bb13232eaaecdab755aa0cdd529009c141ebb60e4ccb5229aad397d4c99508edcd7028fc4cc7d414afa1255eb5501e04df2ea45c576ad7ac9830187b722b552a5092a44a5b7e78cb0f0484b88b4dfa261b449a3ae80e13c08c039149e4266ed901daf9b6c74eb9826ef28faa5675b2c06ed15215f34f0b29ba3d5a8b284670a31162b365f80ae677d1443582ec8710f0bbbed1f14cd42356650f257111f385527b715cd862d8749aa300f37c6cfa41704ee57296c86932df7001f3d7453fd5ef886dd4b51ef7e752c58e1ba0e76df55812c88fb8a3a4ec90c787ea1986a96b2abd3bfa7e600e9a770c0474bd133b07c0afcf639320e6ed0bc447c7a5b17cb3a314223975292e350c902cc1e1d20b63ed1722226c800e199b5e47caecfba40dc74fba3bc3fe88023fbe7b600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a340af2807527b1f3d3f7f5e372108af49305d903346d19988da47911d9cbe86762fd6caf8c550ebce187d97c171215f1b2367c81e2f1f4ca476dc306e33a9459da7ecd5a062b621a411d35c033990eb19b57df5c3422ae5010ca8c0c3c5b27c616bb06fb2e7c5175c94c11802e20dd3631280b75406badfc52b7cbb616fcf95fd2d99b4ddb84893e72df46e51ff184fe58a982fd48a5ad42b447f996a15508c1b487171a15eb304656a332c484c9d567f2927d9c4614aa1ce0294b32e51ae5f3b96f1e0c607d2a894429b1434d78dd860cf95e31d7f2a684387f35e310652b32ac5988c41963c7ff4d5435a7c8022f79c3f204875d24c518f2355988f1ef8825ab0eb2e6e9897902a4182f79ad282cdbd2f86f2576fddf864862e2cb50afe96eb8032ae508fe7b2756c116ad6e850b3b5e7f1f7c12dec37e85f291df1b6f9111a23efe91aa5f50bbcff6308e2c83e0a2bed5224c44359eb7e1a79b5027a624327d2ef0e700a6b3a11d563fe233bc2c65e01db93070df47ba0a587415f6f997c15d4dbaaadbe7c4cb5b7973554d77c4eccd87b6be2d167bbc8dcfa13604856b58c939f74f7d23f7e30c4da189c9bcf0d5fe9f263a10be3cb33491631eed8bf7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099e0720dac6860b0b4ab7c0a8342ccb20278fe026271989d5a82627a690920c096907fd9bd847b88a9369412481e86933c226a9727b2953ddf28d84988148d622102a4fadaf6f712a801b0e50634b5d3a6e9090c3c7b81cdaa9dc2d139f5b34e7122594292214a50d56fe1c6723ff1af6f36ad695e77faecbd832ec17ac84e3cb96034c78bfebe4b75bec0621e9d63c2474fc8344e03cf1e6cf065667bb09d7a5aea1461ce1eea5d9cae5223ebc96647bed4fc0712f8578fbccf59783f360acce8c873081f6c4698ca65f5e5901aa55a7bd8d487721e775fd929da92bf8be270d57cd0095b6aa575fecbef4b5cc9b659df2ef8e2cd38396ecb4af503e8301aa8316319b5902b736d87998caf428f1363cdc949fba5ad3ebb6ca1da228439d1595df2ab8c5936e1f2aad3b2f748b90157ade07bc55c1ae4d199e088c380928d70428db5a355b2f2599d5fdf19c7f00346bc76a28d0ef505f42f83196652bd4a5aabcc38ff63695ce617ff0ccf54aa80b52ea08757dba9976b85d6d793ec70b8a829feb19bfeba0aa5070b005e5c0b4fc23561ced5a8f084fe0cd2e2a4982773b23d214a7db261ab80956c0e004571a49048bd8f3bbb9df282885b74fc00efd490000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019c17c3f3bb52913771360fa680bf65d8a580ddd9555352f66b6a3c2fa8f8bc82747918e74ca96663828edcc6cf84dbb699364ed05cadc39ccd8a1b90302821890719077ab634b29be4a71a4a5a577978697a34bce3322c09a54634818afb7d843101a3dda9a0b7b0d4d8414332209db43eddac44e0dfc9d81862bb7fcde0e66ef2b301b2d4bbdddc832a7a794840e82951ae786ff3fb8ea56adc17ba51ae2954827430e47eb19166e259911d05d2f77461f154fba6f8f344cc5336efb5e77fbc619281098a711993e32d5d7760371f54d5be717cf8d03d1ac885172f466a15664b5bdb1ac08700370e407c893c4b7e5f191817297d4fe1a4329d460059f581bf0a3d15b60dbb4235a229141fed52f3bd700135b1a4ad7f1aec7e9fb866e32c407f0d3db1da76d86d3c768a610e6abfb46b6577438b0d4f0915a21e2ad633f128faa18344f8bb3f7ae133638ef4b5d88597584e76df1a197ffc8b532e90ae86c5702840b40940888bcf0a9ec05b4e3bf221a32b48d2d67eff14c8c728cdf3fcb8e4549088e70489ed37086168a1c6d5b3a816ff3880d600a9027697c8453ebdb1eac0a7b52e9d2b77913c46973a9c4b194b5e7ecdd3152a4a0df265de49be6a60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000174b53222348a7483fd0ad8650ded1dd18824bd0e9ef1ea954c60593dfeee06d3bb176cccc3a4ab6e52e47bbf33840e1a6dbb2032940b8956aab25d7b50f1f0fa54c006146e99480651e4cf26d16cf95e6c7135ec39b81b613881a29ba4bc14fb0243f521130a343ac12aca4941270934ae0ad5c7b47bce3d439402d340d893f23d0ab9e4837946c4a3a2b6480dac0a16a3441e315eab94a2889786e7156da1c57c4116acd5ecf7b35b7817e68604e7f9642d93fb3bebb92595848e442898367b93b77f1ecf53c0a6aba96a6cf6edf84e5bdc929de6c71d6ffb7c6dbc28e1b78c7417de31171dea7c9638c25d3274b5600cb35322eec2ad97ae2dd5026124e2c11105bc3e35f98d6974092604252e2bb52a34995f0519fe686569bcd0b50cfab9ce5af76c3e116a0e3c5047d3110a540c2f5a815956ae489ccf65c87d38d9a9f35a90a904df7fd6bd2d887f5a1ed7eb7b042444dbe68710845785efa19da422ae26a17e9cf79c2b2b2480be0ab0b1e816571cd5c06339d463f30f5d782e96dd53e3a7e67040746c5328ac6cff4fbb4fecb6328840c55cb5484839e805b3f6b793bcb524c82070896e29c8417618c24920cfe641eb9b66d555a89cf3248e9a59d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099574d90bdbe5117d31ed536fdedf5a981318676a301e0ad75748e156a77e3274b16ee687588bf2e83d2d48a5c502090a9b8a7f40a72d4cf4ab48dcfe32c30ca5ba83386ab2b061412bb8d5f209c6479df2d663a31197ff8dce687a5a5024d45921f00d6974234b238bd37282e734e49015644abd76ff1f0fca860cc2a621d14b03d53c3d683c2f56b4c7b90f3a607f782c97d5407d4557f88ea3e2c4790b44f78e858ef40e01f7540c04b7169eec62b807a58e19ffe01b232e4ce32bf234403ce4ff72948017696b72da0a43f8f664916d8ce67bedfa64c199a09844227aa2f15ce9eca5e9707173a37bebb64b24451ea7c8d5d2cedba9b9d7e430f90e9ed237321606636a0bf40329a3aa454bebfdbedfde055eee501d0471a0149aadad52588300f6fc2708b8a9fffe7d33b4e16b03f7bf5d0c69317f1221e43bea1451670fae7737945c806e171197a7e2cdca65f6c5c515135470200d7c61f3f44c67b03e3aa806a8e92e598e5f69b851266405002b81b8edda4625e7c41da76492d94971d166b796888cdc27702babf21ee2a16b236735973c94f941c830a9bf8a36bb9da2124ed55dfb9ad65855c81e7e160789813efd75f3067df339602a000f26c740000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0e7e9827e191e62f57ca0c9c684c02405daae5742c0b837c20d09d2775f13c340a1525a664c0caad331182057e8c27151beed58502d2e80430d747b6ed1fa32f37f096aee1b671bf77380e9dea47df4d28246de50bafa78cf630d356a3456fdfe32ed0f1e5f884e411fa6b4c1612703fd1337e5d6df49b847dfec09c8340e80ad7f65094c1d422023d3d39c08d2ea596c0bfd548b9206ccba46824bd9e40591427221a2b0ecd11d7acb113a446f4c81a7b66d2b3d086228e9d105ca92d69e60c98a8331a7242782f7060f32ad97872f100febce3e6643c964beb481c6706ea12b7e50573f92ff06a94ce4822d784a226b4e969d0beebef0251ab85782ed4621a01465f22caa40535a5d8506e2c4427d3f4d7cb95b1c7a9b52ba0fd266aef5f9442aa4c1874c9261e2b029968f034a3c5c9ec7591da4d8907d69f5b9ffad2019e13de9ac914472ce7717d98b7c89dee20416c5b152a3fcd53507e6285c6867e7428a9a4c724470f9544e9f5845cd462764d8f63dc245f3125793fe2872fad1a198f1ec3dc561be16ef4354c324b2f12fc91bc7cb279322f58917c557f9deefed780281eb72f8395b62e7ebc6ef9d753bd9a62c30154f46d3f35476f112180de50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af9430be9a08556bc1ed9f92ebb872ccd32f6ddf2aded3a66044e2409e752fe35c54dad9ebab62fba0d7d1c2d4079349e576b2ec09ea6de0b73fb859edf021ef8aa17e485a2c8d416c92bac77a10ef6bd7d3717dd127d9912193665d96d09dda821e970b1283082bfe03c2e07b73ec8778b644bb53f907109a4955fca2070a7bed897a8bc23e78f908898c71f5d04cc5c9f9e6e6277f52d10d8883b2caf82985d2f8f895e787210d9f03b5ed6035d95350d25dd0a30bda66d0b845287c7669f86a2c5f3b4eed418163b63d6e28e8023ecdb76f785481401bdc01df7c8cbf4727e8256b55ca0510abf857600f3b1aa0eb7a87ff50623ceb08c01b2e9fc369e37ee84957b911bb83a41cb8ea7cc24d07b492bc31d9ec88e84d4837ed073aa38919ee426a9529862d725875cb653c47f6ca264c0aecea4ff27576e8ef02cf924172238fd166a2a487e5b243450a20ffe4c658dae94ce5c40853ffac0619ddf5eca33df9e0806d982dab475a73b1dcadd671c7d14e20582f00bcc5b007178a789e90fb971d3938d72a9e1635939d675e352d4b04832d092018cdd39385f09bf777db844a534bef5c2011787aed9dee39db4349c33d046003e311a345663d4bd90e8100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009acafbd53ffef73093ed99027e5ec7ed394a10eb4de42765af2e345bd0b1a2422a39f282f8df228f4b952228aac0953e9ab17681ee34cb65d7be6812eed96e24a65f70c3dc905d3e2d792fe7f803d70e73a51652efb04e29a790fe807211bdd522a0fa16237e2d155039c7662e9cbc353c61805bd0c5f43348efb9391c01c92eceba230dd004360cbfb2c5fecde0ab09a7420bae6a70fddedd3b57df2514be853764778ffcf278365b8ea65b60fb62ac5526d0589b52d7f55ddb61cd158b296d0e4c76130b6743fe296d59ec40801c4be890c68340afb2a5d0dc4e96a181aa688ceda626087fbdad0ea4fa0a203cc7ab5dba26d19d9c594b90fae81022085691206bfbc4376226557bddd8efae8ecda9bb2a7705e6bf73794ffe32f5eaf93748dd0c980d9108aa766a9188727157e16a167079420572dc63b4cdc0a076fab01d6ae427d82b52bab8eb043e0f998c16fc775900e2c28680b3475ac372a134015fe64c07d4af854eda41421f5a0eaeeb00d128763796fdea56d4d9131b8eab0edd5b1966c20a702115105cd6cfd7626d48d9c427a91980c804db8ad517131f4cd628bf58c0b01a415395956fd8d42139b0f554f7ad08bb0d704beeba9b451fb7d000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f106ea6094e7b4c2ba02ae9b56564d6056137f1de87bb42dfbcbb332fe11bafc97bf20278d3e4aa193040b5728b9422d75ae0b7bf7a80d0e2e80d51de95ed1a2ec9fed4c5ccde6a07bf51434621268bf3d9350f11e2440d0ce03166619a2a16ad0bea91e5d249e5268cff41b37434903e0711152e9f8316e0167c240e4a557da98931882b58055729f7232f4e115fc3b9b561acca6284b4b6007dc1754883ad3effe16ffc894618e987d1b3eb0fb1dc00f1b9527caf02af6fd5a32c457835eee737b3357ccde4e1ceee9ae107020e05b53d43f9daee6f4dd1832c7de3c4ff4afaa26a985368d38fe33bf0c475205014babf404d0e34ee698f30ca1a3970e01b38b616f80e46c3c73ba20ff3f7ec727f43907b6d6f25e0c7bd5e4f6fade9225948aee6b173b55e900c0ce4e9c63dbf776fc717f982535f0ec9b7c8358a4163b0bedaefec8bc0c07b36771964d54362b2dbac6c23f3cacd6b7046b7dda41ab0f638bce2d5e8f2b3090d729ba85f460e549f88f4b8fd723b7590fecbfd96066d83f87453043301bf2f1f7a5e87154fdb150b93071cec2315215dbc4918b5d991f7370328525739142d0852200fe540f92a5d3e950f05b943b70fb1f2cb763c96080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aad95fc9368384f795d35bd608bb7747bf6d072003acd67f5d62e7048e3314475c3113486764c61ae6dd58a5d326fae372263b0d6f014543e231fb0cdb0b52ddf195f5d9802508029fcd8f8ef5ebaf82095b2d54c333a108fe1ea60634e3516b366a10c40f22c51f8e462a38e8addc29655c255859b312320677af53e50a72de330a558c7442f020db925f1eda09f524e779d7bfb21fabf1a049e2ca389da71a21a43e651b16537ac47f771de45586e3931fdfcfa914a75b5a2e8b006f63c1b1af367f2eb5cee5ac2aaaf3f2274fb70c8d4f41c6022600ceff36a4b48262e98f983489fd5e8629c72a47357eeb20f5d8e89cf284d2cadbc824e8cf1137e04bfc4679117f53af74fb2095b3dd7ed34b7003bcdb6821d141c1d5221d16902e3acbc781eabecd800784cd1f9f0713f7981621a25f4a4ad0c00d48463eda0676d71f7a94b41d22f6deb64c9e4d112dedd77f7d41b6e08cc44df20daa4bfa35b6838e14be2e0190b6bf8783de43f5d1c45df023ad87a8c843be2e10c0d2a916f55b3272a908e3bf96bf7d8f3fbe58a54acf324ba1a897af19a5e0e191a740263f7dfceb2f1b2d5b8da24b184e93ffbd728eed8e7bd9e19c5f2b6bf724b00f018581dc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad3114e4eb9ba1c9d9f50cfaef29c09959f8c5396c1574c0d26cfe3955b58140e6e8aa34ba0e1f7c4a0cfe0f34ff2449c1cc6244958bc04d25597c36f6d94cca1308c3b792b51c911c99923dbbaf3c4d84d8673a9f309a3a54d7f790ec987e6be2409ec4d7084cabb78af25b3f69ec0c73777c4388935d9ef5225a1b891e31df8f7cec2573de82a0591c4b2868be49b5b767860719dd0f9d0918a0760b220a7764f513cfc1af98a086530f81d47dbe11c3e20dd48fe76eed7b4869922fb09209f7e8e8de8b0788275da1db9d28e0f81aa91a29b8295128cfd1c049edcfa306f64d42fc07651f294a5df805c3a56f081b2581690643416b757b1ddc03ea68519d523c880da5824b94a61f8d3ce985e9f4edec2f9adc16b93b217a02fb1a1aa6dc7d1ae94179c0770461d18afb5f1defe94dbcac906f49b4804d664f6d94ea1ab4c678d38b5fcb4cbb9dfa04fce3800e38f63b5ad0ad543d3d2c4e799de3a693d8c32fbb97ade22c14161022ee18213a68918e25169ce6e3fdfd977026dc41bf184f5a37e88a4354af443e3b0856f5aded9a19c33c7460f58ff7ae1d939c6aed15ed7a75814f03ae8926299a633ae4a470ffcd71cf311abc024f1a0abc76ee412a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009df84f3107c854c050503dfdb90fba4d403861dbd59d05a635db7da95f5a12218beff3f29938a6599b0a1fa8de21fa6c16edaf8eb0a8036ecb62958a4c1a48b2f0bcce1f84275af1acc32829072f6e68f32aa1a9ddf9139d0e50354804bc8c89b1cc877a46c0481dae454f692222521bbfc4b6659efc6d16c8d5a87936d5c970999c65a226c4b55c43d00e437f362d12afe5d8681ead822cbae893c663c84b0ee94fb2e8daf4b375a55e17dfcac829a505f58b13f9ae34f09054c2bec807d13fd73d5c9024fa18b48efa7ac058b9dae604837da983ca9fe7ef9d8c07cecf88f072fb100b33edc5b94fd68ac191c2c80d4af25371ac0c1421f86abfdd06ef2fe6bfa25bf53adf3969491f734c5c68ef8fe38a533b062b65bb78558088681240bce73095675586d9327350ef41b3ee8f67131d39b2568e1adbb0b5b7ac500a0d55fec24d3646b4abbdd85d425b7b4021dd4259faded82e7ef00b8ccfe6c90eb449f7ef4695ad1acccd5622f54198500256de693f70029a27073bb531a4108a1b65ffd23f2f979f44f1b91e9b2f263b45c80b5123894406ec01b44fff6807f983c73a04bfb33ae077e357dbae7897ac696e3de74c2d1ad30c77fc8e23d051e6e7da000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088a52e71e5c9791a538fb0072e76587462d3d300fa838714d9b0eb0b9406d667a20086c49e855ef7d2c3457459d9a5cff303023683552aa862aa91fcebe5a65c89f80ac3100fac232416584c59776c5db47d0f7761622ebeea44bbc5ce5587853f14d7a05f4b6074d3f992c0cd804648784115d48487ef5439de6d5fbd201608887ba14e8227f9cf555caa5fb2611a4b3f253fbe4fb8dfa25d6db70ad3565715c292fdf202b75653513bb156e36211dc6a5b374c426cc72866f06d5280e063013ac2efe74fb4d6832a5480ce01784730db4e0b22ccac034409c187604f20cc95a6f6004020b5ef0fb4da12fc9b040db6f78e1e8c27a10c67b2ac782d52aa25dbadcfd7edefeb980727fb1be9cd20ee8077abb6049081cf482b5b64751a8e5ce034218128f499a6cc286da32cfd613f2e98cfdfbc2b2a92153a801f24d7ba52b07d287781cca4d4098f385d0e70b4ebed7f317f7d47f9e9063d1b91de9d9f998a94126b0796c10e9f29eec530445c6559b55ca6d9b276e75e5826c5c4be5cb94473114297c7294fd13b7b2a704f265780768713d72234c405ab501db7c31766edcb559a6c58dd32c986183ccbf6664e8b6cc6a325e426dc9f4e3a6ec33de134a90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000acb53d8ff9867f36de462282a79cf123283217d7ec177a42a02cc18315b4406a5762dcd2c1cb6945c2cf2ee37290d5d3e81ce9e6709e67b39a861b72e04158653a175999f942f63ae8d0a5846e427e16f724dc23c8e11800f8c26e11466cc6784d946be788ee7e7c21d8a4931b6f05014ba130be5b927db3a6e5983331cc0943948786c067f87f6f96fe130eeeb47e0abbe2d559705ba7d96e4456db84b6011dbc2fd5f9b12af3cbc515675477b3bf7065b09e423a20a0abf960e1ca1ffe1fdaf5bd17f9f607c2aa2407d919bbe2952d6b2f69b81103fb5d5324cf560c127c493c17d206b74b4db04d0e8980d11aa08cb7ac50bf8769b8a89bcb549eeaa07f999d904639c8ed45839333d218c0afd4bdd96bc358536caad6c7abfbba48f9a0bd656bde197b8ac273ba88ecaf9f7fe05a999b95e8412e06bb3a976b288eb34c585696134235b4a1a202336bb2f7c1597be6a01d3aaba71c1d96de9d74c86815028232be6832e7daec35885211db6cd1674851bdd6c9bafad6009a225fe052c4e36b6f3d7c233dac9f9334dcd3e8c909a8ea701e1c475655e19daa4545e524753a9424fc7d9b4917f846cfebd0bc3e192a1f25730b9c82d1a8a4f782c1f812204400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a22ee1da2e146562635a2608ac8fe54f5ec92e6dbe633fd538206bec9144b69b82dda42437ddcb6f87b2a7552ef68836a1bd8aaf8772d4a946b736498631f7a23bd3ee19f3612d5a570dae7d7d78356b4e2cdedd3ac11a72697a38acc195ee7ae9dff0068646a10a46e420f54e67eeff2dc0dac7dc5b3110a8a00f30622fe00049a4e19d741db8ec9b8a182d8b24399288c315b2bf9f0f8598e312785c9b27ecaf77fa298a498acc1955339f68bb9dcfea2581bee7fdfbfcdb95007a6e566bdade259ef75aa158c0076c80620934a3b19bdaeeb095a8ffe87b64c6c994fe817a88a2db4268f19512619d6b93158c4be428955f800afe02ec960883bd5ecac543496103270197c90f1e938421825d233732f9c1978e59be98dcb47d4989c71d6fc039ead52bc5e162254b2f039abfae8135106c3dbef5b23cc7f205827f280da1817e3e770d71900efa5e1ae0a9e8f79ad33995f6673844ef83678bcb584c750d54ed28553212ba1a8a2d918bf5edc46dbb87d2a89329a3d6c0398ec4bb1f1276a06ba0f57534d009fb6545e86d37f041858e7fa862fdd972eb900b3a6d8fbe87c052fd2f299ee0c4ca6de73f6e20f3d66e27901c0a7ed4822dd373e960998360000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8f8f4a17c47fc52c975d354172e7487a44d527d6a4d06980da35440ab2130bebc66afa1d936382b9fc8c2e82b64ee3d86fef5cef69fae706502171894b34c9ccc5f163f797ba79de2a5c06bfdfd67198adcaf33de1039eae181bb9904cc9700b5b8ab0b05cb3f5b845b2ce28a3c5632f9d4e44e65c94fc4faf0a00e1c198b80ebc1e8d61da2f1b32579c56c164eb503d2a50d20d7e9a56ee3f522870dabe710d46d9ece9e5df62b3127813dadcb05b55c3c19df8c0db13fac0afaf92e10ff0e9ff078d79c1e7a400e15ea8bd952aacb96fea978fe05b4004518997591cf90abede73172f4802d2bc30d8decfa0b461c38843ca39f2587f9fe3e7813818dc77fe5914a68100ef2005bf6ad9209b3f81e30966334a70168e816962cb09601dd3b7edab81364614331073dbf2060eca92f11831a5dbf79f3eb4bc558ab794929a1099e62715e873a2888f84c6896efb0eeff71e842d69ba3bbd1bda5f230a1184add3e1b72b8768b9766b4c1a0a54969a4d42d44fc87d8b63c87216f0a8aabbbef6d0784c7aa92f776723513dd35927d9d536f97b847fb7d2d10755d97a4c2fe2720e06b0c03c7fbfe99f29a6d437282f66773d5a960f1038a2ec2c65721892f120000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000981cfe5012bf0fe1c7333de14cf45fb0aaec1104c9e4f15d763dca8d368b8f31ec70c12850f3002c87986b70e719a192b2068729a5644e00ca02d32a637f35dd12ddb1ed83efff1eb06835c891afeb9f615e15270f63767b5c63ef31ace8a32f15a2c9cf45ffa4b6008c5934788245106e8f067fb0f5fbbffbad37e8c6aff9b0c46b6c0240b107018572f41e87e87544a8d70c5b3c95759df68695e63b54af61dc3a76aa274da7765cd9809a6a0b96efe9354066cadaff8540a2a33d471e5f6f31f374033b6ee67e57e88fdbf009b5856adc0abfcb1462cc7c23e0ce7525ce27bfcfbcba02ef881bbaea0c01bba1ce5133a2055436fc859603692b2db41475c8c556a57b5347c8e568a9564167383ddbf089e312c3fc91c11427e8fbf816c6fd459d20574b2007a9e0a36666703b04e0ff326594920382c4aa1859b724de1588c80597b8c044c520c8df14e8b1d6efe068f62aea6a78baeb4806bd70cc70cb945c759580a4b18023bd0961aa7c96ecba306829be06f405d2284f674115aa8670510adcfd191091341cdacc0ecaea000293c7753f7e31f01c3679676f998af5699d49cb7a7af894f2cebc0f9e25b3ff077933862ae88266a484df4ff8d45384d0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f72e9a0ae9d1f8e360abe9d50fe71fbaabdb768c444daace39c10cbd9178b9ac5f7eac8755606879496a9c332c84da0c76bf21b417f575a467c883f861c6fd23a98e0b01f7044c1b648359735f5657daf673f583dc25d456c3e2267c55cac9b3b3c5f21b2401beb2143fcadadb9dcae22ce44e55d99f9f00c0d4c29c8e170bb662791e8d588a29edc754a47548e3711e6e0bccbbca17daaf06493193a8504ecb164d4d9ee7c3e179915650f472638d3b804104acbd47824a10e34d242426f965625128461aa805fe8ab3d8d1e1f981cdd4b9d2c3dd2b6ab5f4c2c328017b4a90827884e422006e2e983abdbe628f8990248baba164e090dbb35c235782186fba595bd0059acceaf6cbabc7c905aabef7c61f50dd94f5d714366c3a04c45d6ba14e109f79e368ff2e4ba1ce22150506fe5499363cb19b6d5767da31031fa7fbff154ad2b6143e98ede6206df97094d8adbaed5ea8a3fc221b5cc5d0a7c1fcef7b2c3ae3938f16cab134a3c49f8e10209d5db3330f5ea4b87f9edfc57f093b8b3fd310cd4a92758066f36e8605cf2f566df8340daa1da55f1426e86ae5e8e8e7f1da44e61dc24573e58e7bb5f35d309af01f489032eedfa9729d7459e39a220b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000295d365d21b58df99067ecda24892573ab72e781cb289084439eb4dcdb8968060b4787b90ac2f51f40f8a928a3951872de9bdda7f4001d7276ac84b1b23da18ac991313b9e84270cd2ad9c9bc92765c6c5c1774b9038df883ee6cce67cabe07c053e974c68db6f99fe38f6bee0526bd399d1f8b98ac326ffc5623d56b73560e1cad5f8714c908acd18cff5af718a1b800bf6fa105938ede9e2729f8b1ac165ee8f60b8bf3a9dd1ec1291012d75481efd38f1bd0ac5687ac15db68a99dc360714d4a852a5c926d46999973f902bd4e283818e5ac5136a9bf17d1e901253d5f2020847564ca69ff0b22aa5c15ebc700df2b1de98f4806ddfcaaa59ea23247d4ae848202a873883e3dd296e2bd61b2b240142fbf2864fbd7615357d81059a24c21f571307d94ae1c867055459a8f6861c03b3ccff02e7d465388b12dc8d3728f3818700abc70424a44fb9ddc49f50557bf314ff9431d531991d3290913bddea9b54d1e50f6a78eeeef20cfc7888ce4ecdca768ccc1e186a74e8bb2774e126366fe4b342d9c421d51559bb4bc7c8f8026ebe4bc19b5c52a2fd8d1a1a85aa1cee7a522bdfc8d7a1fd6670a233d61683946d076219415cc4b04a6597cabf7b9f8c2d20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000868174c3a902e57b39367f5839a7f3509f7bea628d0a09ee5c3a5dadba65d3476c6af5de277d1f8ce3cdaf4dee3ddffeb27c14ec0f97e6e5c04c08cdb1caf0dd6fdcb155c27b2e663fe1b6c8d09dd4a5638daabe6b5a9b2f48ba284a4651b2c77bbf783ab5b26be4502aa48ba4fe16b0f378c5541f5fb074a65f5101a45bc44a3a639b47e18b0485b50d418b56a071b6352b1962f90abe1e832cb1124646b3db1ca018b04df6c61f55b26f2ba4d66531b682d44a137332bdd80e75883e7debe4d48f21b9df4bb464b9e374362b279ed795a13c1edaa504d7903fcc3dd6a4174eceb149690469d77dc874148ed12645bfe3aece6685f49524153bff18ff460e04458a5c762cb45a212b75f2fa458a0f56edbd2cc9ebd6e060c2ee9af8e8273ebb5dc2ad20b3f52a9aadb5166e4bbd8748ed6fbbeae9811d5bc7e33e615cbd15bd744a7f66849e065e507ac030c1d811db22ad1efdcc5c80c4c50513457016ce95217687e96c15d4e18311ec9a8ed65fdc9e668c5268f9d8b96058664a3e3fb9da24b466555d4c9801a1a5e91c67cec711432a303fc2c2ba8974d6c832f6302cfac1b885d6241c7aba148b8c59351591a6c9fbde97edce367b7261b840afe461a00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6580b908d5684334721f476db2055bc8328c5b26c6e485023be952304122a5bf2aa27131275b6faaf8d1ce32f1f2988c8c97c205d98871ece656b2929a48773a264b4d4eb8980409205ef78f010c9deb2b0abf1b5ba78e98f0ab046b8e0dfa7423e12565600fd6e62b2e99459851e5baa1427501f8d03eb67e878463ec9c59fb7159e5343684fbf1ecc2113596336de2156fce63acbe3848f7276a54d724c91613238f0bd0778c7a32384eef27aa96ff7cbc873c2f3f5d5445f26a1eb2ff20bb6588618b599910ac79ae7b696af0b1a702ccaf5f8ee1e379fc34f447290ff73f78963af2c49fa1e340c65e4cfd7db431c2184897a1ff8041161b68097db44be414db325099ea9c3f5205a85e5cc83a4ca9df93ddad283f571c013b22e48c52376798f5a5e5e02efab1e5d1743036bcd699b08098becd69e82dea7207d8212f9f8b3598c87fd75de53297cf4f3b1b54cd1eaae05d1c0fa5b07e0ca4a1531176541da4f1b0d3c51d19179342d8a3dbd4f4487c586454c3d84d08f510734140a472fb6bdfcaee82e644e83c883118718447f135f82da778bb72d2b823677b27079a4a49ac542e36983f6ef15ed502c16251475c35935559c1456360c02498b401900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ca4b7a9c458b12ec58625b091517c68520bb37e5fb17f8335b1a13f6aca533c278833cb1d9c8f42612b74c03500e8318d1145ebf90efc726292d8618e500c19f743b26f6c467489af48e0199e70979ef31c1a37b6293e09b781749540afc31b8695b3a27fe5362d3624a6945d2a53ac24aa910ba8eee704b4fd2e00321815b09a22380d55568eaddbbdcd0b0d218fc984f743c15bd7ffbb9d04ac6c4f6999927c3581485f281ad2df995f1ba817a8876c8aaf492fead0a630a78d1d2301e6b89f617a11b8dc342117ef9d585359abcb166ef21c6068d3d5160512f51f7ebde2941ede241a01e094f627724a3b7608bb7408d85b563f9aed5f8b3928911568e85f6fde652671d5523ef91f96e3324b81cfaa34284da1c546f852f1a3eab10d285b8a3195c9028862d7bad2f14a6be7fc0ae63a03c61ec6cabe349cf1aec3d2051de00a24456e7b291ea6b38bce344efdf741f58ff8d7741f1dcabf5b89f7a12ca015b66b8ec87318b972fc3886e63b66e287ffd800c8bda0bfdcc502fa9cbfca2d5311f95ba943a1db2f6c3643647420039d9945f1bc3db44170b0a6a01d16c33c1fd4d047433892a29b05f9bc559a7bb204bb37ee15493210735374284b62d8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e19f2df1c142d78e178cbdbfaa7eaaab0a9cefe87a927087795b05a152b2ad0eefbca0015253543179ede8130d8ec64e80640bc91ef9f40c7af401f4e1947c630f9bd3c97e3d85916c1f7b9818f353c5fcfceba267d42e4e9bf73c670e63a0fd0840c7c957f34726dad30b9e84e253a9905b50953901a1a74c24d90339c557ef5ead13bfd01855cc37d05482269b0139e8d94475980c2c6c846e4d628b9264f665878c2f70d7f3f169dd8145efaa7c0febd28c1eb819862fd768fcd9b0849eef2ad017da3a4b18cecb959419d3c11fd2a80950bf2b53318145c0f7a8ced43128a9a933e5949e4cc1d72783055a1ccca5b1562fcf8b360ffbf1cc8f2aac9e0222a7ea01edbd60a3d6a185396ce0da8005546fda24ba99ffda935da219a2c793f9986c679cdb4616b9fe7f1f1dbd7dadcd0d1bfafda8c4e644dd85b15e2203d048f0e6db521ea56388616588a591a39478faca65cc29e11ebb89a7a4a47201db8d89c88acc0c4c04343ff4956fb7ce89e92dfcf951c613e82d2c01587369b90a55c74b47b35060fc86db721a4a9a9ddac9bde11e1b1c0d5b248be540c463eb834f80abd13ca79f9adb47a932b7061c6e5c5f4a736dad915b6c05a278a293f7cb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008edf8116f70e57d681a5a7eda3031243176a3eaa1fe06f736c79fb68fde301fe070e2f17532a591d56313afeb9fe358ed12de9146737a4d70f9d17cb6122ec6f97ea5610181bfae824980e26cf291cabe3e2066c04c9af645626cadf779b4207909ec4478c1c4af581a7f938a6559db60ef223b5b38541bcd947baa3a78026a4d8c3b93ec0256c039ff51d0e14f0c0ae41647ad8228f40abbc71d393758e5da18e6d130fd2cb56057cfff6a65b1706b6f81d6c28f7c66865eaabbdc889779f46aed2e8e56377b899dce10146608067dc2bec193f35c940536b64dae22a9372f26076641bdbfc2f16f882f21dfa21cf0134b4ff5bbd987996b2b6752b6da2c5805e8726c1333003eed1ed2cbd6069e3f303bebb4c459668cd0a48187fe0b529d047bb09adce31979ced3c18eed87071d93d4520659217c301c88994cbdd9d4920f4dde1b90e4c8d3ef55952235c6e715863783a9d6e0bfc20d65b3bb5b6ef5d6ddd8e78e412e55af22ab4b6bd390de57aa9f2925cb837342b4af41d96860f63502865ebe70f4928efe5f82b5f63616de8196e6daf0c310a57907713f73c0dea07217bcf9fdc71f7f22d80fdcb6b9d9f222942a0cb99ec7af3dff2e19d0e26a45f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c35f08bece39a11630a0f9a3aa61d8f3cbe7a5631682b780effaabce6d17ef74188134d645b80e3e3544c31fd90b4e9366bb5d41563ad28dbf65436cae216f707b3d48b5695ffc1af7521532ba8387e6f915c80ef205a460b597b96b5ac609b8a1b5fa88100b368d27f327f5ae1acd6f6fbfeb692ddcca7f97b28e12b6ae96117b08142baac30dc3355dd8eca9fb7b64938373e666f6dae43d5a2b624c6561cde05cf7fc47986194c61ec2e2f238bdea4c39ca6e8e5e4481dfa790535f789cf9e20a15344a5b9bda1acd678bfd8f21187f4a1f8c0e008eca4cbe4ae25fc298e45b9fe24565257466aa4fa899c657e6dd8fbd35adbd8a3df7a1a58545acd8499c272ffef5093ff39ea4daea1232b7c2c4523a78d00ec03b516caffcf2575943241781823f6bcaf10c3d8f816c13ea53244d4f6b653897d867fb714d0235a417bfcef1f0fb24c8da24ebbebfe6b448b7509fb35612f1999883ee3d66355599154d182fb0428f001e5d1f7ac84a189721b8cfaa244506024de8396e6391dfa812517bffa019c8b7a3b8e4902f79f6d9999cc4cb84a093879d7603f8408b88cdf0c68e8fc9d11f8311c265aca83c1a0e3b063e3a294ac21914fabc866187a5026ad00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008747ceeffae22529e548b8049d86ca0c76e091b1279903649d57e42a3fef86451b58a476c4eec99c35a1fe81dceda4ac7a783c1d49c215da9c22fc38657b08721ebd9a5e3b1eec3b97580e5eabc68a32be95d75aea3b4f4982607ef7bed1090764930af98f08022f8d9f94340a1637a66a719a552a707714d301b070146a9730f355b3b47130dae6bd12b5d0a23ff88a0bd5fa62c924f626ff6185ec40e7dfdda22fe92e37041d86f7212c986bafde08e9bb942b59464f4f7f12aba1ddbf1a306294b1284fae21157d65c5008dc7cb7d25c6c174ceafba98caf5bbaa30e37b824a7d032e32e28b6e8b2e64fe729b76799af7a369a34460252f8afff69739a536b2e856fd81e9561256210cdd559e2c30735164ab65fd516188046f5c6fde3ebd61f1e68e26e6d8046461a5046bd94dd2487a1b7ceeac710acb96823a0171aebdff20a15a02a231ad8775ff649c138b870a364bbe49a4949efe952aca85100d808b42a7142d8c4bf17df26af1e492a402edf19db2111619749149ac8bc9d18fa29267f6bbe9a40006dc4ecb8780d33c9de9a1fb059ed34b99e0e351b70936630e5179eb4815071c174accfe9284915afc8f4351ab82b45ed0a19b6864c6be32e500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cb8e094a44766e1e075c980b3671efe6e61cf557353a7256d5d5a53536f08bfce55cd5a5a63aaa67a0e599de0c6a685e2600dd49be1f4bbe13500e3bd351ccece0b6e38aef226370bca4836a23ab057f73aa573af89c90cae2a1642c2fdb454e181d5341df2ca5461695f6792ff989844266fdf2b9d9bf2c5383c0fdce6d489b1a7506a1177d91516555483aa78b884923a3035570e101f5d7a2095df39211bb16bdb1062484f1bef2a32d2b991ea471a6df5b7c793388f9f5666d6fe2143becf852bdd7715bb4b6eefc6ab150cf117f5e311a63c5b8369a537e41efe5f624d9a81130bb503e8924a09aac6b6c93b4f9cfec5174191c1fbab09d4bdbdc5737557e8bae08bb40fefe2694d592c0c39c1d54271cffb7decf288096392e2f1bd58861d9b280089c10af10c0aaf60e405f0b53c53ca25bd1f10964de4dee78c6864a73e56a2fe577c33d6d463eee967129084a793a1d83c03c523fcf106c8844f1e9842d9c5f8ea4ec31ba15cda3ad1e344023fad2b66ff3cdbae18bff2a36da2b9f8d0ec1303c907924b8612644741ff53b91d78b4a7045213caa1b33e128635044308f1c6d763b124459aeb30a0fef73c6543dc3cdf00e4c3de9b173ea287830b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104e8d8c4573f2f90f6ba0006f6921081b3e31172990db17705aa2aaa881414e1827b1556c520901601027b99d9d130329e4585554dbbdba6e2ec36b9077519b7161f4d9214d48422ae1fabcab2a83503695823140cf7f60080c0b1879f9fcee30f2327cd2407808ae9a37f5fbff844da419f8a6f934cec58c898605df6af22931e503502663733b0f2fccaed3f6f5f3892a3a9d2175e7354ff6c6e160292359369a6aa1bc925639a52690134e38432b559ed03f99ccf78b27bd0eec9143f024a453997c3b6c0b8b8626bb32efdf1547dbedcca320e96355f2cd19e4c318e4d5ba24720d1fc38c7f177bf83e7501e8e343d9fa5de1f7a57b3720d9c2444156e75fd3fe6b658e2bfb36b2b80f3ac13fc60bd7bff45f7419eb29713e571fa9edbb68afd730697c71830f57af4852eb0336349301e5802033d9beecac977af806836e1ca36cb6f80b3bb74ba5c6e6814c2eee2b71ba3ffed99ebb9919ccf552ae884b306ce5a589cb8b23f31abe16e0ba414ba5ad1f0ec4e55c9f0b7371c4e14aaaddd12673c69b43e9be19554b2c51c92184ebe30eff1ee76fe8d71bd8d2be8ba8b3492e06c4dc3dc5fb1f0e1aa4361a15f22e67392fcc089fb0960d3624ec0b1e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089aa9b767250a8adf8685a16fca601d2663d3d50d94a9078d8f1fb405b9c6c6913469d81d6ce98e941ab32c2b3031c36f2c60ebc60b6d5d26336dfe9dffd37df7ad88a8029262c69cdc6665985104840e2da396fc8a0e7b606e924a166d4d496f5d1521e9bb9a11bea4af6033458fdcb41753e621ca2c595b2e9d9854db5a259490d381110f86aea93b2717e257f11bafee2d50252271de7731704a1bf5143625603dd61825a49e69aadc6258c62a2527f2228a6cfd1fb1df5f60661756be7750c2f5f49dd1b0ad03b1c55ba0218c0b80993b1abc39f0a707ffc65997a00c2d39106fe825466cceb9a4b5a9daef66236f7552c56a9e35f5b2a6ef0f36551219fc7874df28fc6aef56e11d4e75510cace0806a9888164f39800eeb92f61a935f22c791f5148b3912d861a7c8701552f254e32982d41b31718a1c93e59f633510b2dbae253b5e699fe863fc854faa4bd0d59783d9947b6882f7c8194cc36d198f796f1d2717b93f786c04b3b118466fb9ccfbac593f2451a2173100f55bae48db9ddef0cf03fbb870c9a59072d0205ae57f5c2b42e7cf157cd9603d801b51efe71d6667cb755d1bd33051a0138ecf08943c94eeca2007496d597d12f398b249e3a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a1126e4b187cb9c5fd359cfc727092030609bd96e4667a631031f81efe2900dc4eb96fc4dc896ee766a14d8350311c993965fa704ca8ff692d045e9a473ba60b518b491af84a437d871a40ca2abff203c892d7bc202c31a8705102d37e2834ceb2dbd0595c37329e78f0ba45f33aa4f639eab6e411aecdd83d904ab2220d7dd9134b85d664166a3d83967b8b6b4ad845395c1ede90ca4b993719997eb6b10260f14ff90c6fe336c042ca1c714ab15d4be3edcff70d216908fbc5f1af819d52751fe0f03a8e4bfc4b0ea1d2f0d090c58e8858af67ba7e973bdb9222e85a6770939e1ca25caa54187cd862e90443d0e11252e108bb6b53bddde269f214eb0bd3b3b022b2b3b7a0f592ec49d021a1e3d41c787d561ce2c1dd733c1625eac6d99288ed28cd0c4f5f5955afe224f05603f9cdfb33bb2bb5ddeb4225c463c1720c9fc0a0134f4b0b82ec955cf2eeedc9188e3dcfad3eea1bfb6509c7f98cc556254ba47a7feb55195f606196020384ed65291b0d14c088452c18b7f76a11d1c477f970042b55e1e04fa1c5987866086b51e64fef906d365b0c03126c1a9f242161f1ec9e1171a51e869a68fb1564f3d1531cfcb0b516cd0b9428ce37186d4f0a062030000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000217f2819dd1b2f3f8298c592e97fe825dc2a61ad149b4a359efaa8b9db75089a816ab0bb1689126ef4e58ac7016b7a5a9ad64346786ed76e07d0c519a86c835a9b9a6128033a6dd5286bce27b38b817f851296d6276a758560e0676398a081b248d2c9a6dcfc64f24a70d62a2c5a4ced88a7241cf2bcebcdbd6d925d2f99b4610d42b7a989a0f12479b65e65723ca68aad5792505c758a11e58691a043740906a896554e4e70fa4dd0543380d9a29a264a3ee6b719fcfe5be84b13ce9ceef7166c70c8c471955c80da168cf80d424d5f29154bce6a80cb9a7dc5c5ed7cefa76f8dd0dbaaec821bc5f0e19e8570c401fffd25d4584bb50872c25c20a9e3de356196c0dfb67fab5624a1acf38d8d5a3c334ce397c06cd5f17e39bf8409ef195012411b6a33160ec74e7a252a06eb2321ee946641f639bd098af04e70088f5a6d7be8a572893a31e0fcce77d118525898d00997e5099cf2e7d7c59046dc7357cbfc21f6265b091d7e20d683ea71c4d8c41c277039065132d1717cf9a58d31decb3334f40c778d0c09a577a29ca7b712cce7329830d86826334fe467fab093376c1793537c93d1c22229f20e2270b27b63ae480a7ccedc1defa86fbcf30dda282a2f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093bb4f798ecf692b3ece20b13038ec79a880049f648bfd155bd251476b47f3f062705f81b15d4bd0a5becaf41d40995e84773731205d46a95bf0b7f4f8f0077c406ab6d0a537ae3e5761152e66fceebfc24629ab1c680547cd1bd970d3243c8898e2d9584f069d70e163f2f0d1c8430bc26a8e38a60ce7b10aa8d4d165baa20be5a91cbb7f6145bfe8d44dde980de3dc2a74ee548d6e162c210ed0df4ad6da947109162e9bdc43434408d452953e6ea63c00e93df33a1e208497dbeee06fa2a2e21426015fefc7083b475880699f671979b380e92423bbaf109c75fc69ff35aa404a383a28cda3506cf5171d05d19cc0c6beb81482073b1063acb5bc2044f51149c07e33ff8b4e713e8a334e4347337c81a69293290b82f408253991860bb535fd417e76b2c4cee45ef05e4797107d1a3f37ca5bef58d05b5a52d6f34f2a99212ef55e72d61cda7a8c9caacc952f1d8b521f33df1891ac1f75f9cec0f94b7705e9c8ae455429f5e61e5ced1f3946a426549ae20b61899f6f4c8d4376d2b8f150704d4fed0d94445a7ab71895f161de43f2cadadb2e6da95db1c22ad9c29e66a3742abb823589b87aa7a90dc67af51e9aeefb2a6e7da6dee17d531cd545846efe00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ad5f0f1589e7199e9549ad8da2049e0d956c8dcb5057d53642cb74ea03d9bda6bde3b03a9e5c0fcf2a55aa7c4468317b1b574509a9b4e819af91e092132b19dc2460436e7b9e57e1d50f0470c7d95d09f88a230e7fc3edeb366a691893a6f564d3254fc64b85df88319520b5bf6c9477239a5a9d5df0afc1645198a8b3326629f077a8b474a3d4a33c0a5125dc82bbcfdc4c84272a7721d295761477edc6578656d68e5364f9c2cf1e7de59461bb7a6b819ce3744e6282928f4676949a227a23e42bd0495f9986ff28236e38316b439f28c4855a66ba6de6742633c98723d21c57e785e33e70d1e619659d7a7c4b76b6717cc647eac1c9e09f515dec652744f66972ccd55c407224dafcf52b97371f22d5df1227b8c6db8855ac8248644bb9d41f9ed15919f1fe97d0478cad2813acf37c2e5e8ef62956d02c074aad28d9dc5f24769933398dac782658ba0c29dc5cb70a5b29947288b474004e13246d4a320c70984d30284025e150dea8baba635fb62bc4b80d2dc739376c331d06dc066818cff52d43ce775a3f11ae226fb3fbdb9464b62a227481e0ba41e5462077c3b7d6a170ddbebf7ed0634ec1afefa95f7a7b94e316586d2a3291bfa64d137a4ddff00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d8ae33b98061401373914fb05ea15ac12b7f97b4e1edee45423653ffdaad2fd0715f01979d77fe2ba815879e6a6235f716995801402130e0fe56a28b9728de7dec79832e36f4d8a793c092fdc5cb977b1b8ff7f269a4ca0bf1593564f740eb75430c21c797d0207ffda697a1901528f1b34ce4d2725ca95d9bdbd5433461de2ba0896e6c1d4709304f38544daa6dedb92cf111dcbb014919c6e0ef33ad0cf0f19edeb1fe5eb499e10dc79594b77b18ef5fd4298378ceb1b27eda302ffa6f1973d4a608c198a1e829db8cc850eebda96f917175c0ba119240e5a74574055ab4b0e311b8e77e3c1bc41f21153beed0f714a59041a6955cffc2661f997ca97fa613dfd5928b90b8472559511d885a6dfa94512065dd2bef3d17147c017c87cf73025f5056b53ee39256e2891a668ed6fbb9028820ea34c04a0e56a21823b488a2e5ad9f239047ed17d40577f9091b9b5c47c77ec7d1ebc202a7afd414042b6cc5f08a3d42adbecb3c9ee3511e9ee442b3abf6052ed74f9f899f06ef881077efc0ddc1b5182800c35047d9a54368bf5640a674372597c43200d99ab6ba65e3926fcfabe6c7f426fe21064d208fe91fec55c5f4fc60ad1def2c1c1921e278e2224db0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075ca20097329f6363fdb96930848d152c886d0ff4cdc31d14bce986b1f0dfbf1f8b30cad170e6a18932348b34df7cff5f9bb58e1753ab4ab01bf3a6ef420dba9735aa2bfd76281ce4f44b225555e836b590836697d1b0489a10094f1bb98b6b5cdbfc8ad55949c38c90f8c371fec004ddc07df26ad8734beb5375db9b09f71f29b7cc46f49090c0ea88f3444872066c3c2b56e6f2f2d2274c65284d6ce77dc30c7c1fc029886226fd05395f75df733566e0bb0e8fffa33cc3e433680dfa3ee988c225c388d180b850dd402fa3c7169273d446e5031c72003cf22edd29cffb2cbffd640444b6d7413e409e0159ec3a221067c8914c81d9bd296ae5ec991095e88e52b743ea2966b3e54e24ad09d1105d5df334510a1585e01e3fe46de897fc179764dc52a5ca274af2f907f3720e2f0a084164aa68c19028e6661b7c8b0bb715c0b12d19c08d09e18c9e616789e83fd7304b00da4ab0af5a77993cc30e189c8189e2df3abb11ae6dca109098aac2834e75e362aa0c8d02fb1a41868cbf460aa34e9e45f485febd5224b1a479466460da6b39b1de4b7c8df3f632f8203fbff86a12819b08d7ec220bc2441d4e1fc6c4e7215cb8319a9b7436e5b63cafe598571000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f486b72490f698f38cfb2b17fb1fc6ec0ec8b83f03cd217b040dda485bbdd4333c4ae7710a652f3e145ed94e1dd1f7e7b79e0a407833af7299812a07695b10b8fd816bdb763aca359ea89371c2b70a0f3417d54ae1df56738ca06e2563322c7c28ec1fab8fbb1c65e499de8263db06b78339324bfbc3fb70e87fefec966e57984a5aec2bdbbb4773051394c1ac082e0ae3f54d2b279f540cace0543d0d930554b0817db4bbca2c53b14bb338d3b05a12689fe3ab5384fd5f389c41144b6ed5e010e35f10b77e125bf2daa400e908b0cb84b54441527d1f78c653b9e8f0d2380ce9fb90500f7bd85fcbef78cc23badaa935122d5463c39dffcc18f22d8bf80d47f30024a97e07a27110135f6698aa3945f3f658ee595a67d1ec83e308b2eaeece94e46457b9e6b62ed37056dda6146f7e6dca402d3614b24a4a09e65c195a799c6dea232f91c4970d70a88802cfd5faf17493fb18c34b736771e58f5ad3064fc1cd1f483f42b1f0c4e769e46832ff7345018e9eaed847d9425bff603bce04527102a5c679afc393768f6135c602f3722edd4b65fecae928d21bde1e3bf24b80c423b5ba9807b45398cee7c74c6c5040979d4be8f9f923344c11631a811027a030000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a781e25c406f1ed711699e86b1456c5d1226e2eeadcedab8902124fcd484fb3f3e50c259add845ec59bfe871d182578248b3ec57c757ded3be41875eaa79cf6d63913bf9e23831cb4b7ea5235243120d97c21134e1203f055d01989c09414742228a748aba407f351e3ff2583cb12e297bd811109f1f7a5519317820dce5eec1e47c919c43cc4209188b834a3818ab508b07318a1b8361804d4006ca05a49bd740af34156af98fc803f52efb14ce5602cd40dfba6db8bd649cb96760e85b437a85d8fcd832b5407bc22deaae2d3c56ba3eea75f0165db81786be1c9a666122a97ea11e2a43be02b4279e7414bf141ddf76615eef72c173b401ba4b6c6061ebf6c5721728eef5a3a63fe261beb119395731a206cb1e6870d3c6833438bd58cc53cc3560ed03d735edfb9796e7441638ed9f1998e31e7e3c5d8efa23d7523530927a97c4dd9e727fa259b4a5be00c5759911553b74701a62f6b0d6e0d235b02bb53737e24f58d4d1685d3af63104a3d5ec5dfcc9c84023a4061b1f703ed20483714d425b54715f5ebc612980fb252d8501dbcc148971203784165ed88fe550fec8a0789f5f8513e2fb3953325ed68227f6ed372cd373d3e283e01569f1a6c54d0e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad48c300fa41ff03045a3cf9f080e953080b48c45b7fab585abcbe863155addc1cbc26bec85e0f6d8ced9937feec45664102dfd43e5d5ebc25c705e9b7b6bb4b443de29a7334fadc46b016f68b9df54b9e415a9b0accf00e3b7c385dbcf5b48ac869e7d768765f206e084c6b1d0c8be637351bf9eab66583b475a3bd904b589ea269771e1d96e2215b86ea48c211da67d4d1b0315393c165f5b2c8f51462173caa80f7b4495753733420cd2b920331ca98407ae12faa2f66264c00d039a63e4ccee17b432fec682c009e70c5a02e27ef1a1f8221696d19f108cac2d361c5b796395e9ff425cf125acb288dd56d4c891f5b03fa3faca0abd1ac184eb45739e153bea2f271b4b5bd4eae42e45003e13b90717a1a36baa880e5d354ab93ea39bedb1d1580c9f5cbca2d5a9eef34687e96a03b3bb8610e2f81ca51e7bbf3837b4faff5626fad1105d716c9fbf16d71e106760194d698c3f7793bf61c86cf80544bef85c0ee3acf0f57fb6297a02ceb07d35ac316456ceb1073c1126d32a48d9f8f9ccfe19bee0688ed8047ff96efbd703ec0dbfdfd765bb77a1201b6d3128b50671ddd830222ed79db8f18bd470581dd2d88cf3db746bc0155befcaf60ac6540113f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025c0a72534f442c38ad7f6985306f024c6eac4bebce7db04d742eb58e22af4415f205259dbbd622e7d88d9b0d95fa388e72ddded4d7d71d4aea9b7ee73c71f5bc889201f9a886a46cc4a5e379756409e9dab7b3afc6cc7e77356b583dc0b00bb6f681608f5c82dce21b3cafc584b44e433f098c8a18714c319dc218ed40f4a428f651d90373503fcc0f2b74e66179695d854d41cf43253ed941a1b753117b99cd9232378940a51dc488c50a60204718e64e7d454780245fc715b8e1bfd92002d6ec764c41dfba708c882f1d67cbdadb20f86b7df428e66b8ea03da8f965eb51632868a7c03ec461a0ffc9089f2e767fda4c9363b12dce0c82c2911d5744f542d634dac5f49ee96f8bb3ffed09f496330b0f68104c6d90f7ed69d168c4e0397f7f685159ad4f2e62cc2798df20030ead5bb53450161a9941f3ce92174b7a1e6eb4ff60f48cf7b2f7f1c67fadbfc4f76ebf8378c3fdf554a4deae96cba50cf2f85947cb70f52bd9dc62f5d8dd26054f3bc211a2b028190d9365f1f732ba2e11b63903eef03073b253b3b3f4797d726d64bdb7477c44450b76b1bb87fcc00d51d0c6383dfafa34eb0ad8a932a6d8a9bde8eaa7f25b936c0c32b335e398ed993f6710000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aca154db3d02c9328e0d12e161f42f99d6338374b8b381467635fc30f79587f61b08ba97f2b53182b781416b1948dced344afedc716b80496e0db6b322fa67f7b26d2dbb1d0f1b81153ad657c7d7aa7cf843497da9d73503464e68b34e7ba9c311f053a520ac92cb80aef99731385fafd666454ce805a8cd1911bc0da50b54519a125f54663f028bfc652e2ece0839e8e7d3580f872b05fe001b4cfd43d72f67e05eeafced9ff42a33b2d156363d0b4858151fb123a228228223b3e827cb77aa3e1bb437717e97548897a20ec3529dea34fdffff2171d4e4b1663332c0420ed6941c643097aa0be2c70c24664d56698312ba2fa8e3fa77453eb608166b945e313bbe0d64e181eddff641a4b3fb0c689426f8cfce70e9ed930439d75bbdf00dd82bef51e07445c5a704b4cf34970f70fd5a3ce83f0e8635c665d58dd791e863bd11f673127b862f2c2732b5b9674df9c67a99ef80ef9e570b13b3a35ad58508d5fa9d43754d19d6abbede90dadf5de66488f5ee2f94621373dd26cc2e605ebd3826b046c91eb7ee9b0dfa3359bc9cfd45f3d0dab75bd35c72879b556762f2330200a12e3ad959d12177b54192498552d7e9ecbc0715c26cab8b8bf4d72540a47d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099e70046b88fdfae472de1260a368ac8a5f23d350c782f2135f18f2e8eda1b33ee9179c5cc3b8734910c8e7d7165af75eea9ca9f40c9d8cde539ce01ee2e6330ddef1dab32152ea5a21efaf42e68e5a743ffe16566d6ac2d52d3748f9fb898688471e6bd57621086306fa963c9b5b71d511bb46415958dd55bf802d048235124e139cce377bd43608e56abadc4007842fcff3e2d413a222f15ffedc4b5a7a955b854c4462a97a7367e8d37b316a5400f1d0889dd34489310b9fb43e22cb60d9a53720cef793277e778cacc5aa74d206d302be2fa6cca2925332e2fe8d13940216ec1092794be453084d46a17870a9f80edd77cb08b46f58137419204cfa3edb61b8d7a3495fc8b8587d07ff3937085ebf1600f4f11de19ef187cf71d8bcfca27451e02615a4b1eea93beaad44baef3573100f37730f566c3e82c5c946a65620fa4d3981c635c58ec8694d40379ad5ecf3a841981c4a0d407417a4857fb99b0f6f7907238b873fec7bdff4d8fbfa1dc593862270c48ead8572aea5ec25c82976abd8307cbe4e9ce2fba67ac23617535a55a38b4a79b1214a552f16602fc8407a555113bc965f1505d11bc15104a16558f583c5d1834bca8711d673a3a5a2b18ad0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089787ae23da714068f3346c4348f898a0a9674a580ab9b11bade61ed7ae3b3b5648a67afc1bc69414920f101d8bbd9a0489c30878919182642af63296d1bc14889a1b8cc63469207d90f2838a06e106620bd67e379352dec185e1b53694ff2f28f41d3cd41dc7833fcffc44d203caab10cdb2f750abafa1facc899ede79faffcef2859b11f6401680d96eaa1fb207a0403b8ebd0294af3ad02c5a8d55d8e6ff70e4389e7ccc27a88a9610ba3d5c6127ee34c65363e2a70e733d14ee0eff376dcb3cda424c7b328df96d3fcada37cc79d3147447792fc621b75391ab1e9691bde79a9986a57a4627b7f2606ab9e8cbbd3e25ef96cfb7377a0f920fc6d0a9b5a49ba4da01457b0f32751d799a079c5fdfd50a09145a3a9f4e0146b5c2390fef0edac24a10ed3a571480a845df1412dd4066ee85f146ef367a25f2209a6536c77c525d8e613da696b9cda21aa3cd9dd515f9f71bf52a7c12590e1ba436bf3ff9442a756112f966e4d377555c1b7d3c81dab1568556ac13e83fa67bd789418383ab2bc73a961a1b352208fe0cb5d0cf57df48a6e51e4c8cbd80b1ba4cac0f52f69c81686f79fded6ec7e010fdbaa74a93b6ce7754a225d9164ea2c53ce4027f3b0c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b75d0e996c09adfa6be31a2ed55c84daf4b26f14ae15ecae7ac0eaa7a25985eee62881ae6296ba7711debe8329b5bb7a056d68ef7f858a8169054f8f0a06d8404ca624b54c8d509b2f88b2a8ccdfc15cf3b6a27f370c78b89a07a95dc0b56767c8ffc02594ae64e14bf3bc4284ceaa5c448a9ec3bdba84e665da2f52f6745dfe4d89db74fd86472a9d809756959ed8a70381c33d100702a6d63b3eebe3b694a9ab6518127ff99c19d09cc471bfd0bb4ade1d8cb48660a456e491ce69ea0629e466e520b1385a5d5a1c9c84bc6b9d8db2adbf7678a5ffed921a9edd9dc0ae7a92c1c9bed6993e622fc4bb2f1e8036e0b2cadcb8f6182bb1d51795d147aedb8d739c32a7bb847e80fe07a5237743f32e11fb641b9068a212a8e8654aeefe5d958f2bd5c5773a4f169080a22223301a3a3c05747413a09d6b2f94a41443d894bc0dc58ca581bacbe372b388175a649981f7cdd76ccd8b053613fee3f486232e8cf437dbab1f603c549a0328fe6d589fdc6f5f46f6220e2bcd4b6f80f5560a7215266232f33e0fdf0bc3620f4899abc04f7fa7537e7ae5e496a81f028e40669d8670b9a930fb2f672c1d88a82ac95803add63e0a5f25dcbc81d147332a50538831000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002160333e40c91ffac266be3cd7adae129b22f03a78613bbecc795b1a5610e8eb638da4f128ecdc55b2eae1a303571de082dc0f96f90948935f162d50b5a6c2a8971b1fdf9b2266a5cae1875c88c9e57b22b96c3f628d45231dffbfa0c535264ee182255841bab04c8a7be5c9d45a32e142f75de3dc0c71a7999613cf12de0d321e420979b4685b768eb27b469a1f2903a62ad44c0aecbba57aed68d139c90e7bf22c021e2e15d52acf7da0a9ebc82320ab674d5d8952577efe9bc0e56648b9721f7962ba45eb1a78157815395507298c887e9af28898fcbe4ac77a3052995527ba307994030120dcc58c88e589a7285d34fc51a81f8be782e211656073d7b2e5f2a787be29762da2f0878bb88b47e3720591bf5160f783f2f311532e3aa6e018cdbe14184704342cb29ea40532ab5a7e709e4946a9d622b80ff95e44ee4f8c13f452e2d5d39e22df66e8ca7d56e17044c0fcd2b4d804aaa46314c1c196ffd60782abc8c54ffe651dc9a7f3503fff144553f7a9776bf9bb2d9a9672d2e8d7e60a7be9584ee472b3c7a11e843766ab04b2ca8d3fdb7b55ed94d6b3b3792aacd3b68fd035a30af7078e6f1718a2ed82e3af80ee93cdef696b6e9a25ea9fdb961dae00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e173ae09c6b2d17073f06a23324325589dd0779a01a15aade963e024365a4bcad1cbd47489b802f3c139ddb33d5a697539c23d06835d57d9ef8c54aceb074df5d61770edf702d9b5916d94155e1e43b5dc84baa11a3fc8fa97ff8f18088f47bad1a016ec4ab58cf054567f04f13f5d2e825462d0ca87ea014c0d03c3f988f7e8de46175e92fc399ddece5839bab78f6a934efa6c3f8307f6fb1d08fe655e806aa298f325f4eb67393a76a592cb081ef3826b72cf723e8b7c1f5141d67ae60bc7328c212859d04432617e7ffcc77c88c094d41258159ae6880d25c427c7642d75c611370369e53d6ebbe69f8e243e503a8fed6db9433c9b0ac28124035ff0f2ba547096ee613c35b534ef2e6f5687b0eacdd6f4c7f09f88643d05316a4816aca79d67c66209410d2a50d5003b5c0913da79a9f3660d05df9c34fba3e329390c1c26a15925ee6a8f8b8649ab23a733ea125ee1fc6d17997742742e7324071be3daed1d0563a951861acdf9b96a60dc49f87c39276d49abaefa6151283b09079aa04c350be54eea56f1372411ecb035e6e7c2de2a8fe3e33e6931d1fc7cc02b392939a0984dbccccd695b356752e1c3c48a4859c4d5ee78a369138f93e2e73e038000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cf0d048fea9933d2d2c8171b0b8fb89e63770d1e1c0639268a0d61ba9a39158bcd5bb3e5528757827b0d7c8a3bb6dbe2afa8ca4be8b03198ec4ef6737ad2bfe240e4beba5ca227c2eecf18109f33e469021424281408a79b04d35fb116d0c51ff405c16e02aebb0214c91c0b811c1e355ff034482c71c3a768c76ed32df86786e76d3aafe9f34077b97f920e8a204b8a72612a6b126f03be2c35d58417125bd4a2167e66b0d34628bbda8b935598f2f36881cf26ed4ff175b5dac037a8bf62cb5ab680493871ecf773a22fe3688a9c77b3bb90f2522519fc12aa4a8f23b886073737c80a372a6139f8bdaef368d1944cb40049ed42fba5821f7a5695842e30b88588a3b3e80b23c9480ffd29b7cc101b0f4d7cd63bad66c79c108617fc72c53d0d99cdea7f295b7c37d9e7293fe3d27171b5e6e35a6fbeb89dcf97f55fc3f5f9b29470ddb8bb8576f557bd34e356a0828f30b03b8a76ec562fcadc0a182b4cb66c9529f26710dcb32f9d1875f6a9e71ca98614086ccfcad24f1e6ae080fc622c4a3c47674c309cdb136f9cfb156eee43a1aa13056915cedae0f95fbed5cd08a9325de2a9edfa44bb6dbdd973350fd3d7c8636afc200bac9f729da98b4963a90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000897214f06db659d02a5aeb911a3159362679fe04c66d6b001296a2b676ea86a18b41f813b7b8ad2e233255d6f9d242c3efcd309011093603cb18c50c7b1889478a2fbf22339de2688d13e35400b4ad19fa788b6c1cbc84a9feb5b5a17c0a5b78edf19b1a39b6d763c3e20162ef22f3a8f592a39434f65ac701b04cd4ca7e4efa41b86e0810d8310bef818c0112685e5f3d4db1c5eea009ca61994da59b7f314d97f19573d29e8c530ac2c2afe4c67a45644930716ab8e10a125261186b5684909e99307a218afc62f0617dc9899f5ea2c7eef4fccbf892a5746334fc00594ed4731be49b5cb9cc47fd2780d93e3a3472d5840dfa17ca53cd888de3bb0235a71999621e6eb866efb77b68d1473cfe4876a7588818ec019781267aa10f6905118c9258722c4cd9b879d5e2a7702f1963d260b73554c85081e72a810a3cb2d644a65e50dcc2c786b9fad8a5fa1904d1294344707e5cd1edcd181ee96f4ab5ea03f544ef70bb140beef7c0e992f9689ec8e3b4112f7aa65560fce0df2ac4dad149167ccc5f84304c2ffa952dac5483a7d3652d574e7ed3de65db175a7666cd1e0c0f2a0a63e1b4fdd90e9ea20597a61b93ac598536f4a3c1933ff5ca5b7cbde359740000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096fe1ee5a2782ea268c7967eda60e6935a0e16ddf2f69dbd861768f86433df8f2aada3639933470b980da22cd6b4ff359e30531f85ec6799a0a3f4f2a6989f425844e684c5aca6735fe0b14f0c181835ba25e5009cecb5c971af5749f375f53626acfbab815d8ebefd847a6f0293ca8657e814b37388e69e87b97988c779c9ed684751cf2e5bd95b2342ed3126b94955548c93bc164c34bef2aa94dc3d753ca079b1486422fdfbc71aefb900a1ba0f4d2caa4ba13028dbcfab99c456fbd0074daea5f399a63aeabefa995d1fa52490836a2d529669d420d96a973317146bef4db097b0e7ab5256d080e5aee4f8ec77b809f1fb36476f4419a4c66836b59f88182b9f0dc0ec5e29d4194bc86bc7086eef8e8008a6729bf9470ae3db325186d5394ff98e92d28f3345873f1d2ed1db1d77b292658320e72e541542d55445caa3fde417a839825aa2261a11dc4ecb9d988ebe2348f6f91b0715d2e2c65c93272b803c0da10119a620c707fef87d0e47203d75fa104181edd2cfc2b189a34f109db5b54559f299676120440398a7d47272ab3e8d707ec069b8d1b09cf6b5760485c95fde0d3f5a7fc3cc5c1ab11c9c46d8546e7e5452e73053219ac46f0e9ef257a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a37bef41d08501f9f80f0768d3a0415048d1216e597243e6eb351267454ac7844f016f4008a93fa34b04afb704080c1b2f6742c8ef54b3ec16bad3063e60e70497899f3afb9fed19bac0e9d8d0fa84a851e28e3cf407324329f15b69087e8326e801947b4f4a1ad51de1d07be9f6e85df93012ee84fc1fc7180a28bce88931cc4b71ccb2458d8f13d221453cede49c400c429303955bd5b702bba625590a6e1a9d45c6f39674d0bf4ef4546c5d74895aac7db6ad338ec887fb5fd413b47c5a32464c7b050cb796026a278cc518626838012498b3cb8cc483c116fce6d0ab33d8698b54cf423847f77ff617fd0b149ade701b7e3cff937d4c50bc1b4a36f293efdf73b6b37541168fae33ccbd7b2d3b922bf54ad2eddcb51c7e75bac5e8c0a9e1f4d8ca0a7e305ad2748dcbb1744f82eb01da0d4a3f5aafc62f8562959208c63a368b4088e0c64b75f7cf25d3cce3322bdc597dd89bd752c20ce3a978abff49c77a93fcaf8a103739079e484e157c4a90fed81cee4a6d1f20f512047497b1293f6992c2a65d3dd36a60ffa163181a6c46b290b0edf635d21560059ae3dd33cf72166feef29eaeafec0ad5c4cdd519d6c05a77d48f2c7e6eb0db17e31c4e8f12e80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a69d7d56224f181e2283d0df411446495ababeb8ebafa29f4439e12f58c4898bc64220d32d167600f277c7d6a5a12e6463e6e30f5b41262c42ea8361738809491669c6abf3bf3932f9e8c54a66716611cae630be5f6d8b56dbc80b2b75e3e727a46b6abb8121ea845c418d44915bfcaf2fb9c1c9790c676e05b12a79fce8a553d60538e50bd8da4a319cf1e14214560e3b675035debcc5b09ad046192fe992cd4649678145182cadb52d82e4a4055901bed4dfebd3994e0e1377a72cdd13492e1d16b386ed60a24001117e9564ac6755d29533b18c6a2196d37a0765810806c9ee1fa6ae1d2b2df1c34953cf63a61fa8f5cfe5853679d30060ca98f60d8c8eb9a1e438bfcd99a68095bf6809d2006e3323b6a88c72697243f2802400d22429486e6b60868ee24c846fca617bb4ecd3a8d3db4082dc7920bdadbbfc58193744848694b1edcfbfffb91a262888e0c08a29f63f307c0252058f6638054709fdc01ca9629215aba1b343e9e3843bd4b4098c32cf6cc2182ba287c185adbd2d3d97e0ad3ac5a9c5fb435aa747d2c2e6cd30a5c6d92e0d7c83189fbe451b8c86b0ef6efeaf64a7c71d1cbf6f41417287006a793b43d9428c77f7f26875786e4d49fe1d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014983df3f243f2467f0509d506fc38a4731e7d673a58e737231b380168279896a79a2fbd1d9947135548e47beb414ecf55c851bb73310f1408a5deaa5dcf8a6ff8548f4bd936862e3d242d1e9f2c412f203e3b0cd676e776339fce3cf4902fa4afe0d64fd0854cdce152ebd179fd9ed241dff9f65377ef49806ad7a6b75bc806f77fb566c095bcce5ff517e57587e6cdb863a1daba6e037298bc59dd4eb8616a9b2bb57b88ceb34356dc72348978d24d2106cb937c3f559c8173875c3b5d9da066bc034ab67a396cd801740334e7f43d9a51e022a6a54bca93cb71f5527d89545a65b75fea2012e7dcd8fdea6674bf12ffa843946ba02c7c4f79452dbe986655d941a810871a998d20a4b7af1792e5927944149eacb0a7dce1874e0e4f7a6bb7cb2e2159cef78d4ab1a137d2521a9d3708e87110038ea15a2c8bbae8954d35f0a358eea33e03c6b9c91a1077570a22a3233c57c0b88d30d07e825d5a46b160bf67e7579e129e31f4fa51a90d787f0b7cc9d653c5aa4f14b43033075e53ff395fbf63a663fa4b7d61d3013ed28de645f1f72230a16d2aea9ffac571ead1e2abf2a8e955e41bbdc5fe6a15d673ec6d4840e7d654391831279cb25e2d097215efce0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120c1937316b5a9424c10ec44d66bb44f23cd475b8aada5717ccbbd156b9a82e2e2f1343d85f2e40ebee0733d6be53a9d45582c42cbf24dc122a97279d32d8e6c494420600cc7c2be49517abf15d3ee072edaaa984dccb5e1018d6d3276d315139f92dbd58a37d23c598b5c090708d76691cbd6dc213d30382283f894a0e772268418dc9a6f01fd0196196668bbd4356ab13c2805968b6fae4786bf42cd8a6a24413081f55ce2af8c053a9a2b3970f2c7d3c8cdcba022ec3c10b0c55a65bc1dca0401e0b3f1bcbff1b539d908a8fe680552e21b0d776e7804d5b33421df9a2cb5fcaaa5dc02512b8093d6347c8c6d6e0edd2842f0e1717ea59f7ca433f3bc8cb237f8266cfba7eb48f664ca7a8c6bd68efaca14a7f3a212e16375befe504bf2a52a2ca0364092fffca756f675298504b77728bc6a1305134ca23c0dade321613f9025ea95cd2117f5239354651480f1d7fc39b14260f598249ff64ee0fa7d2d69daa20f46d66c3bb8f19ab2097af6d7377695adf9c81cac69ca171eb52751ac05ae6ba99468dc8b4bad52179cb02c03a8dea2eb89bb4134308328049ba84e88fe6ad2f19ea78babc091f608fc3cfc4a481df3bad5a8de5dec42672779f416cce000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006eb83eef69eb7a9ec7c67daa2da72b8dc748eaff08519923d9395d7530d2dc101117aed7ab272e844d3b46321d7ed823e59c7d2ee6541c1fe32bf99968a17a35140c7bf9d86c34a8c8efbaac9e14b4781ad41e0e54040281af4422d963ff954d3b40da181451c6cebbd9736a316ecc91a055b9d87417776adc825e8dc90318a3c1fc2fb3c955be5e863732688c2bfeaaac48dc228ff7ce6ba359f807a1cdcb96b6dbcf06b6827febf343fceb643df60420b6b528503d31dd91ad7e555755516dd46a37a3f1e1b3934059c68095cb248ae71ef4b9549f3a107acabf716f7a5db86af823d4702499b059c23949c1f44d6c5921e80daaa6166d045b327b53394058e8bf44898e5b104f6e5c579b97bf322f845d55f2198d73c7fd71d5b42cf2d1693f85546cca04304dd8213ea08684fb9f34c54e544f46c7bda2aa00dced34713f8b7c5ed919ac73fb2e15ebdf5dbcca618bdee67880f439d62abd3676c86e9608fa5860e9ae625d8a33ee19cbbf900f2a24b9b203d74fb8b610d1fbedfb8ed81284da7fb9d3bbb04789b3a6964f03a2a8512249d35718fbfcb8968334bf31bddd172251f313277bc7b43270130061cdb4698df1af535f847f1ef850967b52c8b00000004000000000000000c000000000000000000000000", + "1035536ca7d31c10f8ca4afe6c6408887aafa3d78cc8ba88a0741ca2401c0de10000001000000000000000000000000000000000000000000000000000000000000000090079cbf19656c851bd8422afb0f1f2d17d47aee609c3fd862edbe5bbe9b021bb00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00b9297c0ba7559abbd713d4ecf549a98e691902e030a01be90edd9712d6865e14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb30000010014a02a0324d963f60f208a2061b9dc2bdc1f835f530972857ee91a554963fb8900001980223b1e33313fc3258464730c5a58fdc457daa6a3c2a95e16702e42d059466ef200001a002ed0fa4f4578dcfb0510142037823d94ad3fdac50369be7be749b1d1cf4eb1a600001a000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000070dbdaf00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000006d23358821a01460a2b6f46aa310ae8483e7bdabaee16c2a7fd37b7eda5fadd5dde02f72000000100000000900000000000000000000000000000000000000000000000000000000000c205b48400a41aaafea64abc88c8de951916e094e07f5cb7198b1bbc76095b5f438683fd30bdb5f278ba8b37b6b3d9617ac30492bfb274c73f247d32084af3cad1ce3a08e305539ed28704b4b8f5a38a37950f8a4173b5f1bb5a3590e08006f47fe90f8431150ea5dc3608d6d1b164bae8be2097f4121d7352a1ec4795a1ea3111811821e2ac479a2d51e90f1b2fa65acc59ece497d0962cd9486e7e869bc66c48a254a701b30e13aa3b65316167085becb7e7815dd454ffb13674e5fe51f31c523ad9407016ded87f0821d509000f922a304cc56976812950c79eb4c4d6be1479e6363f510e806f1683b1ac34cbd4e47445f7eed003581a0574aa65476c48fe5cf5de06f021346d9ce88046907ea64222f966fd4c94d81a8cfcde4ab8a2f567968c0e0500272a083392458496e07a944f83ab31346fdaa47c3c0147ff0a90ea7a6fb97f42fc80f86f8d6d56f5c6795010cd7a7287f48c02aadaebd6f45d1010a4cf4772e27c422d808c8590eb144808d2372c86450b4928221ea59a7b7b62812c8d1ee5a0e958bac03ae1b464144850f8f04fdee490f049e2432f9d178ade9181d479b632e992af6112fdbb6c594d83104ef0a0b519bb69da98640c834bb5b1524ba1c96187a1151ccfd7f85fd6028de3d5136ac4d107d38eb207aab01f863a043cb74651e3c37fddcff35a6d03a11d010fd4ceea045dcd7fdaff982744a31d3b6e5e3c12b3474ef26ba29ae5ec345daef647217ffed7b736cb90ff60bc78e0e977c8a5e24074c9e7fe0b748de1bc1b976109d09c9b77f8a386c6774fb232472a273d28b2909b1eba2322756f36af4d92c68494dc5fd9f7881ebc0079326a8f81512b92d286367daf84f85bd9d08c0ba9054e30d19a182a612f5263d161da6dc550268bc271a8cfcf4ca520e2a90cc803dca39e66aad37ae1e236fbdf2b3517578325a3d291bde4176b42973a61f7372c68eefcb215dd51af7cdfb8e3be18ace404575140ba75b286bed50490bfbb5015cc20ce5edb4c321c51a4090097f64c913aa262c0d708b468e84a9a2e05350a7204a4c9b92d779629fd4a7294407fe2c0da3f8db168178ddb94aa92a9cd9a5b9574d06c5d8e1bc7a5cec3a7a3b5d26c763223ff018a54dbbb358f4e7ca53683d8b825a65f4376b6b42f0d6882d51df9acf34466d0b5c14873e54024cae8922ecdadc20f96781ca66e190c2237f3e66342f1f2c2a0ea22dd84c324f10a2cba27aa604413192e1df42aef5226586184274ae15614e08750a8ffe808ab288019ae7f98d2b3cda59c47591d4c375378c276b323a767b0046467518fd0fd0705564af439fea4af936570ecf7dbbc7b15c13e9dab4856115e3e3b8e7c2f1946e761f15a13eaca63b1c01161a28d7e750f9c4eb8527aad72dcff1708734e033151bb5acfb4a3b2a5eff0cc82e9418370804223072728fa42d7a21f7364fe2eab3dd6e0b017a3d9553869f8e9b87dcfde58873852e8f9eb10c47b714b7632134028a21e1731bb279dec44e798d0324de629e2e5588b2726e29c347ddca4ddffcf1928efaddf0cc741a9774f82aca5ed0317bd939358c12f51413be301e24930be95ac7c42002169405b8ba2f4df1d34e426c2cba10da78d90ad60b66e82d46ab95bc1b2a9431f1420b56a7826b28d75c6a442389ae0da917083090fbcc7c39a162dc13dc6faafbfeab18d1a29c99eb3a767f842a911120b31b7483c989de38ce8eb67ce68058b74bdac3e0218c5505d58f0ffd5eccbc6a7c04ff13085defaf60253e778e2f839c30ca983249827c02aa1557e7947031283c03861d4af420caf385ade76a703a3fa1e39d481f4bca033d559ebe5ebd6143ec292c35240b128405c9fa2b54d4c361e6362eccd1d9762083d93b553e711a0a272e5b72e416bc253ab892d78830e96ed5c5628da1d6a00c0fbef440d16c451cc903cc50767ec2eabdb0ec71c6c4a0c694dbae3bfaa5eda9dc4c46fb16c5759a3d1e5f469aac3af36964cff4c6b69e34a0ca26a1be4a8faf6faa03fbf2aefa44c112fbb6f8c13d2a9325022f30cc50ec2c2345e795b3189b60af4bb48e19f47ca22ffaad1a209ae29e38a667f13b9667fa484db72985b98f2101a4f64ddb64b24220ddaa1fb1a9c132519564e2d70cd83b9bea539f35388133c69cda17fc3ca50c3007e3142d7f8b1c964a74c2a310460387b26928cd10de76470b5b01aa2f2cc52959408781796b80b5e180dc88c2d6c44052b7c4f2bc2f21f0f4d2b372a70212011616dca1fee68a21cd968be72e7db8b143e2af9904a20727de8d40cb7ee2d41af45dfc37b26a0735a91c791186176262b31ed49f53cc7035e967e773fe062d13c5ec8da51fac7b256fa54453fe04e8d5a005e5c246a470c217399d4085a96a00f0461705282752ae7289f7b83c590b1f5ede918a7a73dbfd0e65e28dd322171e279db2450b526b6e81a36671d3d501df4ed8e93127f2e4a23f1c53fa45c0af19627f261d149876bcf09be69cc0136dbf5f1181e3d18fe2d3b7dcaee654d7d12f9ca55b1d227dbfc92f58bce7bac3b4fb16fbd79a7b4579b38f27d3942fc78115ffbe766e1256e2018bfe8520616248940adcb3426c8fcbb1d277eb78d6cf961fe4d91d96e12f4ccea53a538be146586bf1c238ec21aa0b7b016c4e1ca66f0a222a923bb55f3400e8b2aad9c4770b1fe86cef0df410f80aecae5a86b84ff6e31c1baaa6c18d1dbd09fb66088999cfe44c79ad46cbf4c99fb4b2206f494b58280b097065936332061be1b6f7c913c3617314cb61a40da1f9b9f4f2e12fbf6622232a5ecf76d4ebd536070e4f7e55791b50bb7d62c45a4217ef7a3b34605d83ca2a0f83c3a4ab4db8f9a3a4203607766784523e6d7859bd7dac9aa73ce4f1f2a240097f827b054a22eda565281889e808770cb36c7a6b09c9d1add6ce2c64236a222f43167f150cee273f3f9b4e0da02d57443be07ad665c585d08f0cd6516dd8451787bf447e37a1a297bd714879c8f3bc6f7317bc45d381bbfab03fe588ebddc52b4cc1c20445381321869d2d89de1a448fe68be1ab4f10fcbf20d346e00e31ce025a882108c5908fcb5a10b1994107f77bdf58557cf2ab1026f69fb71347b6cc09fe823e703da27ef9ffae5ad2823e473c4bff9053de53b2ba684de339e1e48b0b5a2d67dc68c6f84a5a815c6d3049419f0bcacd0bd8c0f812c00f868e72eb0b00032c8997153a74d67123fc0d17541d4bd56d6d0e699875db98fa171a41a2d607021f3037b69b4059c2311105819a2182cc485c8d56b17a5653b80f0ec0d23c2fa1fa28639bbea50fc65515e8e9884bb9dfa71dd180d953dd46cb063cf4b98928c6ce39041aca0d598d37cada6e47d09f0357a0a9227e08177394e9862a295e0c01dcd5d5a395d498a3d9a0fb658430bd26dfdd841bb79d235eb31e2f18255e2f2772f280759c18f5df13c62bbeacc29c2cd51d455d83a46366aa8c8f9fe01f28d5192c58fe591d01750e644e22c4d332c92abe27147bcc72d42cceccb04f1f0bd9f7eeae1a44f4c88bbc07cd2be00251fe6a1675b7ebf35c3db3563c1690c423168ef5c5534c0b32d61950f5366350a12ee916fcff12dc7e4c75c170f664430ace3dc0e0a4e7959ee266c985c09cc5f74ef3498ad8e8ae1a421a3b1eb88e691f89735c7fb0d5a11d23e74b33c890f31cb48b6635ffa507825e514ac5364bb20f6274959feabab8ee204766297daf81d751074f13bb9e350821c0da2443dbe628f647ad1f8de03d8927dacb00b1d76cd632f1300afef5901cb741151c61452402b9a065670d692ab0c1918d72a3212976f974bc1ba10cb3a24754b3a2f6aa522580bdb234571d09f48b8f9757d5ca862a7203a4ebe0e26215fcd2aca9332b01241b7cecfa593999acdbaa261d6f16a098cdc0f8be60dba06515be1860b278b92db4f230d089bd18ef5c165d3b7bdfc8ec0230067ac1f68014d10c0ffea24c3128c7c7ee7b243c50de7f1dd282b42f07d095565855837e8968f84d1e8cecea0e2c72aa91e7cf545e04fcb0bab858b9923ffea4f296e8a859be130c1a70dd6d831a9dbe669b55b301764709a9acdda1f06199384133af6cbe6ed66c0f5fe695812d13848cd549b74985dbb0870ab399a86f5208673d3ca1f8cc7cadc0b9f124b127f755592ceb027786546fec2cedc511be9ea154a806ffe4373b98913229f47c21643573a3db6ad825792570f7fc4926dd80ee24ed81344ad3041b6e34fa8953297e67d15a6a847c23acb822eb9a1b665b19797bf9a582d40f7472a09bf1d65b01c25303d4854f7d383f0dbb5afc82bf27dffa60e8f828b15580929a5fd6b26e289589f592a84e40d39afa9b07a27aeae02fa6d6e28e335b816a28070a529fb0242c4a833ba7ee47dc896886cc7aa6d996e6949704dea242ad19ed8dc602cd80170ad3a3a381cbf637d91ef2baf37d9b9ea95af9fdcbddbcd76eeb5c4b5adb651e3a519bd24caa099cd63722fa3699e86cf7c3d1ddc6208fe80c82a8ea66932014947785e092662ff7fc8c144dd71caf2b4173754b576540fc4c34e3cd0101fc26f1454f3fe6e54b1b40a89a6f6e0f3124a35586e6efff9986ed4c41263afe7d10f8faa9cafa6592f94c675d299e0375bae6a0c3485537caee499489ea44193c2ebb923571a08dc98680044c617e8d43dc4ede2d9c8be386f51d6c88adb537bd21853a43c0b612d04d567d7da59283ec2e5fa3e88e3132cd91b06f46900bd4530393c95dab7ea2dcdb1d123669de89aa0a2aad88682432279fe42db263f6119f1eae576077129b39684c201d9cca9781e0cf840944a8441237a22148466ecafb298bb4ca315f25f6b2e6ee4e0a9468c4281d96f14239a0f9369eb61fd0fc709a177c219517014af715ab0be1b0c7d446b40d1dfd93467fa9b535648117968626271678d8d9208c88e4f207320eaedb01257b6f98af2b99bddbb9c218840a51e91001858c4576880fe0b52373238f69f843c24e3ff18ed2cdf8063227937194dc08a44cdfdf59848042bcb07c93d5c50613e7563a854901632f3ac3828f7e96ef1e1eaea56268778b937d76e8039bc195928770e729901c18d8abbf8e5108643703f1e734e5efb32649d1eecc311d471d9f5a266f73efdeff23171b486f8110422a9578e54ba47ae1572e2ef776dbc0173f8960a5aff2379041ab051aab3af2ef2e7a23d9b82daac59019c3e4f32e7d743b3bd218a3b7063305e3d86cec47f4f111d1069ab2f0d16d637d9dd7bdb3cb61bcafb26df021385465314bb0bbde6f1a042a3c578490b535259881e8489235d3ba89436d39f204ce64706b7729c42fbb19f0b7d1ed581fae99b9bba48d76f5bd571408b138c64101d2a4da0be5a3a23d2f5ff0ece20853833bc1a6e590526a237dbdb6b2865eb08ba4c24ac07e25fea92b3b075471e652c6e5f9dd9211dc6ea7e66d4901acee8f4d1c3f48d8ff78aead1640fbc684d83cb9d9b04c51329f0ecb8a5b1577a76424aca6098ea0fad9d0572499b88fd92d1ef45da6db864905281318c7f0dca1d7354229895b36591925e61acecc560e53be2e2acf9be017bb357ca2e7d47dba0fee509c9714dc3fafbf6b2697b813d9ca6230151b94595337e227cb35138cd5ad1cf92dd639ded36e1e380229f1015d26f1d3cca084f8c61aac8826310c171721c81bba4a61b47983667603fa4c31dd58fa5a4af02ad8c6e436d97ad351a3c1cd6114c017bee1d964543a174501ff5195266f543691b01d991f70cd77730959620fc4d0e1dcc97eb1ceca003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000049118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000490d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000490a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000490b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000004929a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000049141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000004925e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000004912978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000492daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000049189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000491159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000004905ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000004905c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000004914d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000004903db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000492ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000491213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000491ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000004914fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000492b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000049305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000049280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000049223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000004917a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000004908858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000492618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000490f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000490e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000049172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000490b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000004905bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000049137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000492e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000492297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000492608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000004918373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000490422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000049204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000490afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000491998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000004928d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000491da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000004921d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000490ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000490e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000049107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000492f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000004909726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000004924f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000004903c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000491fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000049205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000004925110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000049283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000004921cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000049094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000490c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000491f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000492421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000491fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000491bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000049304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe500000000000000000000000000000000000000000000000000000000000000490000000000000000000000000000000000000000000000000000000000008100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810400008100000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014e25aeadd11e72a533665e79c62e41e3650cd93474e269e9f6857ab55e4c3f301fcfea333b7dfdce0c12568f053b8ea3b8ddbcafa439d223e48ada2a69cf2bf6545014e0c34e56d3794216a7a2b624564f799bafb26c46d1072d0188ab138f300b936f65bde86f6525dd6e0663f6df69c133a05a7f449809b550abe13a5b1c84ef1760c9cce2379dc6c952621201c096c7b6d28b4c8e5a7bdb2284c3d36f55243514ad480ea2a1c8dde390bdd3b86aeab6d2cae632ba07cc10966d15d8e4504c5642795937530e47ee59e621637471ce072d87022c22d9aec45914e76fea4166bd2687b63c91fdb008e0ed195162340aaafd3d9b6c56c2b97077c9cf91adf97d76acd02937a24c09449b56895cbb0586098e147c95a91ac62b1d1627cac12f9e78411673fdafd8bef4c32e421a1199709a66c941ee83653c4141cab405bf1e54f590409d32b0bce706255e0b16cf5365c1c39b2a12678bbadbe360542b1e1d197e8c0e6f3b0eada169d74335bb5b57ede4706663f37ceaa508221265705abf74ea34945d9a7063e873a7c7b75dbf18afa32235cfbd9bb93fb2f43d55c50cdfafd8c6f18a36093474a339132cf81b0a2ea85ff7f99785c6fa951ace11c3ce8020000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a21f6cb26536bca9876daa3ef1f1f1287395c3e24f4e51790098e3b38c99ae00e3fbe4d6c26d1421cc22a6403df13bf364bf7c75abb7b5b1229e7e662080781c4cb3ccba23ccf2ddd02486af12e0b95251b063182eb2a63d83884479ac38a0f5fa16c735e7d55d35f9b14f9c72682bc198d89266a763d78a8992c6acf0c1bc099b537332b8a40297c55a6b82d3eb2d38a480cf4403f0eb256dddfb31f769bfe2c4179dfbcc071edd36bfcd8f67f7e0ff0db91d65c02793ae29b48d7f5d5e05bc8dc92753d94ee5f323db34d54b34e182c14df95ba3e0b3281ffbb31d1aad42cea9e1e07ec0269a32282c99602943391152e11526851af582fdea16d90d082c2d743d6a555fa0dccff0f10d7a75f10be4af8e7b6f6c390a10e37aa25df81c23c072a22ec1cd4e3dc01ee0d62b0ec04e50009d53d5315059c3e4e8be4e1204f833ef38bdba903b99e0d29cc58e2c01d6790db9c4b400810067c12cf2ea9ab0ae3b341ba2e6a5620b66c4d2b722b7307b9d242e488a6075258744cccdea9c77d467b6d854d56ca656cd8639257fe730836e19dc3dd5e2e09aa8b60e58169dc436ba3510bc0ef071b5b0fd248a623e6d6bef6bd911d25679c88931a36d6c8fa5b9e50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2c86d5ddc56f5ac54e09353e03a105ec0c0ea3166d258e6700bc72d2874ad07dc26c34b5fcc225e0eadd1fa0228d6e960c396a7325be8f237754033796d2e4ce5c2465150b7b3ab60430cb3b97304b92b1130839f0db12a19bfa200ed2e9e8231641843f9d7b50ebb5bcfdd9adad5fc31f95bfa0f20bb05aadf4f3972602bd84c4517c674d229eb1ac74eb124e4444760ffe3d677bfb49633f8f3b99d6de7e616cb533222490fc502ceb2e503ff9e829dc23ebc3fd8cacf50caa9bdef9704cb914729f0eb1605e5b9bd233b73b52c3f9539941e243ecb4e19b9646671aae64d6412c247a824f4c2e115726a69e78abee0d913183923fa373e6713a7acb6494ec575478d534ac413dca496864d83824ca20f571c77b53d7db694d92c0499cee9c620863726d62238cf02a9a2983463c192e2e5f3a8bba6ac1c37d134d79960f3728305f1b482ae9c6e4b0741ec91a871ca564e48122922433ea56eab97a89cfd971a2c4c5e32334578592ecf960f6b5c2112e07e94cb76488bca2d00fcd8071195e9e3f398eb2aa45f341c4d16b13da278fbaca8b29656fe48e249dea3e2955d6610e3fbffacf29c796a538ce57a6184f3b67f73f08fb217ffe20fb493daacd6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096212206a7010dff3c9dcdb1851d5c9f45cd997554293b3c3d7ff13c87e4b39f7c96d6d664dc98599c6cf7ae6a9c35f6993291e8adcd451c94936106cd29a2bc9f4462aa0ed6007262bdfb069814e699636110b8226c1c2a927ec3bc9f8679589409f2c502c70d69830b1372edc98efc892cc2d4398f0123f7cbc5d6f2e1d0187cbbd15632692e1cd820d34bfecffbe08355d8ae6ab0a0483e9d347364b597c3463fc2a4f6f4d452f5eec5bff738b0668797cd2cb205acfeb0bd580a0f2fe943197b2f32cbd01b9d677feb94e72da51f9dda3fc3b0e3f64b734b609b774a394374506a688d81a6d2161403dd6d4789fad0b3c65e2caa53b5388fafed731ebeba39ed53b67273cba20252509355db3b1021047b8acdbd9bb6b2b8f9c129fbb9666950337bddef5498b40ad455a2d5880a604bc6dc128c54c2e8c5148d2da30d6f3439b29bcc4d69bb321a0d735c7283498137b0a3a8abd4908de994730c29e5b88a8046b974921784b5e320b3f188d73e394befb1b91f8e9caa9812602420b79d7ea99da64d1ea8dddea247aa4f45bffe2c6b0b27193b6526ecfa3b54bc0eb69f3e08c9c154a4af1f103afe75dfbb1f6113bb7162eec00e78cb9ce4aba663b18b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a4682364b1611c9f5fe9ca696abbd8c13d6bc7d15980595540662fe35a6bdda401e953e094971c202f42f5ef8e7bf71d1273f727712580451e4b9fbe782d50a4190e00b9db58f73be0f9f4d6f0ce28132b4f018746aaa328122948a2429c1115db06592cc4a94294909408018b484bfb03ddb966faf3fd49d946968c7a7c445f0fd2677920f64163416478bf72677d2f843e6af99bdb7ec2e44e699ee2e7b87894ef2b20a14de05df60c4ce7dff316470789486629ad8e0f1533aef253a312ad6f49a5e54dea0ac85553ecfb2a6addddf48d0969824ba66fe79561a5b1bdb44f61991c330273351d565efc0d796cc035ad379734a24222818b9d36dc9ea705690e0f9fca65451a7c192b64e95dbe61668f25a2eb836076aa239d54254e955f0154a951a7bfdef3c335ae162d2d5e342bc7a9506faf2fde2c58dfe690e8521239b455ebbd8484f3eb8127e60f0ead525b5e254ddb79d2c3a91e8ea69f19459883cd610051726674afce5ecc8a734246098232d928ba4c31b7c11d2c1800c9660126fb5c8ec2d311871d6c77c93b4f0a970df82299031fa1d5c20f383e5b136556351fef00629a56a561c7b7880be49be604c54c6fbccfcfb116538b0c4cb5f1f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028c727690b3f930449770270fcf58b68bced16fa5eae33c63978a1698a6e33c818ec8d70fb4b85cd8f2b8b567be1fd5c41a4192b359cf7a5530dade9e12c494a0b68bf6f962ca50af3dc3232197a5641e2add74d2542b5bf5862039b312458a61251ca26d03ed5668999d0df84e86314bf181f47f54883f5201b953c37b380fb1617d1d39b02cc7f465527e206962955708743e4ce42736cc3024124f19b1351a2a9bbc6d8eee7d4b4cafabea52f26c1a33b73571b0ca41a1956e0c582b19238f24cfd4cd863ef980405491c61adec5acafc98b0f528c7732a7e2b6a802bcbe179510c35a62fd5ec6f21a654fdabdfc0fb132181d21745e448460f6dd93f7f48671978ad82676168508d0de07787c15251b417cbd1e28db33fd747db61ed43feb73829f1e66b806dc939a29d147ab082ca00d89d9c71e915709b0a5594f7c6746da5bf2e1bfe512980fa287e1d64ce2e3130812c0d7d4a68b761fbf42d10a4a99ecfda56bd312e8ee71eac15c08c323d62f1d7723103db7d660ce32edf443371c03e259ba3dac2df728ac4a6c07ac8776e4a29532604140ca9f3e21850bba317bd4e4ec92bc4efba38a069af117215b1c1d2fc000b9a8015a73be8202cebcf8400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d51bd6830d21815a5cfca44f45d1d7b4ec393bfdfa857e9a6fe73fa4e5812320b6a9be6f72fe7e06ba1f157bcf26b0f72aa4207d01e62526690d848135655389b1b80b9e3d7bd06cc496d009a70f482d528dfe27ffc496707deba9b24d6594a665cf61b02e21d81b61f3c134530d1b6907c4a1c9364876e00ec77016cc93dc3518d7fd40dff47eeb6f59d4cb7aadd39a87de79a9dc673b9ff4016b0d78cd61cd9b01b2fbd75e3dd4e4889b04c902940068824240de8dd2a4ec2c60c479cc7833dc9eae816b0c4e1d02e39ad57197e1bc1647754fd2b79f6d1d376ca250b8d038d2a8d28b1efc14532881b1171a214a618c82e86ebe186269c7d3461b70490793e1340986b740f542f37b081980a5dadca01bd3927499317e5900c6c35949af0a4e3fa774a142df3cb78a506d3247f793ab3d864581a70b3bd57393b7c91cb9b652329f8652b9dbc3b49e5d572c074a75db992f8d6eb686d9fd3f93f7d5620cb2307b7d8fa7f7c4c90a261dcb7831e3553bd0ae61052c676e9efe8eebe4cfeb5a3f3f4f2e98ee90b1f565b3524e088307c5197e3426827db2b60bbfba114a151999ddaac8c138ca8f3e1839a412a7a878783055f2c499037a94817ddd4e38cbb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102e3883936898d6b981985ee02e84e894b6610a1b0914e6526d3cc3828db3b8c76d57085956699e5beed053bbdbbedf2b82b4013a56758b96825ba41bcb825481439afec44cc5d60e1f0ae16b2a203371abff2b2dee3cb8278706cc38ce075c4ea5548a1a2a2e8db857ba84c587ee0012e6a7b2e827ea8680934b80890bb2887c894eb0bc9ca637cb3ee694fe2deaf691bef8fdc39b10dea5a0c1874ba350780927af7a423124ab6a9a71827d420a5f7795dd25bc671b677d882e2ce02d778ac49907bb835b915b1979f102d12712dc4152ce99061acffddff943341f88eaefadca4b0b011ea20876ef563fc6b789f87f57f1d3202ad6b16a0d375efefe60980129c81061c164a55c5df4dd1f9cd354c7d1e3c2fae61b0d2b74aa46f90e4c7c3e44f84e601253c0528ef9b0a468c16ba411afdfb5a09eb72e8bf85928bdc09f7e5bf8f650bd2cf7630aa9fa43bc77ecb99018415606875fd9e34ed950e88e5218968d81b14a95e372a6307180f6ef55d4cc3a43cc9abea1cd928d5355251cdf76a153e1863c0dbd6737b7fedb169dd14ff7f2409c51a739aab4dcd7c1cbaeb5bda4cc80a64796f4ec41e037097073e3ac12ef708ceda8da2054ade6ecdd779c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002076bd29d7c473ad0bcf2b2acd6c5c8f23035cfabdf475aa54cfa4108eb8fc74750c03619cf2f2b843e4a516625681fc0ad5438194c76949e98488b8d5a25d153ce013d664a01c265d6d1ca9b183bc125db35a2ea9aaafee0a4ff922ed12c6ba341ec90443bc398f11dd232e6b4891984ec873391b85c3c969c73b495d9f3c85b91120ce5fc92e8549c99c897bee09409411b0f2797a806ff4a87cff21eccc7ede1a4d7df79c8185ca6834f41698dea71cd7f340857316ac51c218939db0f057e59818235da4da225e7a20021ebb801a4f59991c5f140a3aca07ac11cb6d34bc33792ce9c19f8e619185ecb30570116635a91991a9a8c58b13888b8b8476e2ce2b947eccf312ab5de34801bca66d3cf824504e248386855324e044b1b3f70214cf535b93ecb0fe694cde725df28673c25a64eb8e729a42f115c2fdf485f93aaaf280f44f8f59f1ddd8b81238fa7cf40f15828d0150152b66d7bb803701562a38886e44df4bb8114e40a3671a1cf72503051832f6e5c80f3682c0962bd97a71d885415cba6acd553ef6cdbf415722434027f92c69be3ed51fa8b4bcdd7b90464fbaba96d6bd29fefb4d237fc103c3258c8a381ce9179eb1f334e05d567436ad55000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099305c65befcde7d79a4316bf8ecd3cec437ed4fb232d056af8a8deaee236bbb3305ab2da3ab8dd018352b7a41f855260152b9bcbdb34bfaeb8cd0082b89ecf194a93cdd00082619031ed6bca9a0188a9fa3e9d14285c6055523a01cdad77387c235065700b3b2dba403fa062550c0df34a4608c3fec46511e5a0c0ab6f82dad152fd93cb22bffb45f080baa0676806bb41308cf12923edb72f5c5e7db0185a20204106aae0ea29d9fdb5a4d1ee57a59e319f6a1b1bf573bd736d232c3b35f5106204a733f9ad7f37508b8e34fd3c8f65af522acaefe0b1705c6f85ce7ab007f5d53ebf52fc0b262a4f483317101726e25cdf7f0fed47d82aff1aace7a69f45a487b52b94a77d7e46689a0d166545e3008a2dfd9fb02828cce7b0e0ecfddfe10b8e7d1bf726d80aa9409f04ba55ce0fef1091adea29001505db449100ce4d62dea99486fcdc7f6bb0ec74cb1652df31e64d8e45bfa1ca907f0a52f0a806ff0405b96474e459c997ecfebcaa8a186d5351b8aa018afb6c9f76fd12920bf8f82d0220b4e3523276a21c38e05b21c526bcea03d8b2423a1c02305abf58c2946529a9e1622a670c5b780e445c859469cd7744557358c3430d1d7349e768ebf238fb90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a18196d3501e15e169949c562978310f7cb3abc67f4241f17c417edf0c37d09e74a5f42021738f7e2abf3619248b1ec49e61e21aa17f3a3b9fe91c0fc061cbc3b95a6fc16f53a4137cfd3929d04806dd1e6b19a5661dee6e8a8a791a6ba9f1f80cb626318eecee9ec010f744f67622aa502f788e1015aa2cac605ab4627f3a32ca5083d08713129c9aaf287f644e2d445a6499109221230e48108345708347f48a438413a23a6cfa487393b3b7543b840fc258c3e80318949385d38f8365eb885e9272ae79fe325d044c6169ead35999c9c01243f789228d8adeb30d5a6e3e2e305c8e6ad6e85f6632f5814bc58f1d5e0f8db4bbf30fd9e9436a299b7a62e5506beedf31f9f5b91a451e58065dca8545cf434f66590f7306d6dd6dc05a6b9dc7dba1d08fb4e35f5480fe2af064d3a94ba8b17938133e1adfc540e85e6c4fb7c1f709e72630e2561774f04a631705639b574c1a63ec185aa34f6995bd26be9bdf6402c6e253ed81ac7f781e185ace522214710446dbfc893b0282123f9004cdf68e10050fe7f0198be2dd3f895406516c6c596c8a3233fdcb75c2dccb4bace152d48dfda572b36a8dbbbc83200cd0676738f870b18da3de5fb789b59ec6d2c1c100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009270fda1e4b74eeb31d47089ccd4b73adf00622316b3370ab970342c07b703261fad1320fc2d30750c6b7dc951517fe321b050c807ae5be1473847cdfa0e9a392c22c59f1e822a4e398a41851f4f1a1d86c56d5a71630fe4cc2ecc0d4ff91fc92bf88c1b7b61023f4ca179082234aea62e7cc374d352cabf8fb64999e6a99433eb58b2cf7746c71516a49b508e385442be1942430928d1ee61f59badb6f846d0ef6a5d8b6948ac66627bc004d87fc6d9e05ff24e5fb321772f6c0c310460bd36f1e22a12fee5942dd22a08e9d8ecc239ab8e946b7aa6a0c34a4a7a4e90fd6846413e43c5dc1068ad9b99ff6f41c12c334cfb24f6ddc141b0d0a3465ffeb9ddae4c86dba378b781fa63e513c0baceae4e7b3985db6ec65ec4745e486841bf9f36002ee182df738994096badbb71914eb29d731147bb7e18c78ae672c5de8cff4bf8a34f2551e855967edaa31f9206fc4a9f73e50e35d0ab1da191531b113cceb56baf17bdb11ddca26d22c443f78c3b994dd5d1bf022d395657baf01e896d012df203eba09c26ded8467ca1b3118780892d6ffc65ef9765eb785fad3de1ef9b76f928250ecd11edfbed2e7fb1cfafe93b7862807e0436ce1c442f6f8d0db709e8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017659d08a1f39c1dfd58a47eb5db31ba4f3b2627560cc9599a23eb88c1e8ccb425bcf4d8aa8e2bf4cfd6044b261566a37212a0f94d636bc59f999a9946751be6c06890f22bf744bab4d352e80816bcd68585ad10c3678eefc402fae6edf764fc440ab42925a282c8906c07f1ba801bf8020479864c5583329299290a2e6ed9b51fa34e9c73ac1901c724ee2d0d6828d32a41f1afaf0d2e6af571b68963151e84bef1091065400dd9bdf116ce1c67194a9e217c58f75039014148ca6c5f46d5a4001c6def942d1da3e82a972b40e25328cc28a2676c3f73cd03a6f54e11e6755745559ed08fc4bb1119c2f09be42733c631916c6d7a0d58ce3c343aeaa3a0c341093e49374d284b3ccb3b7b602702dab96eb02ea9b4a3daa8c3282f08d92323afc3777360dda7a708a4aea6d0b8650b89902cfa0c74fa943c1897c73a3853031e5dcaf8d41af6b149cb0dbcd359aa43f26a07ddfa09bcfb1659ef3836b11f9fcbf04404e3ce62201eb3dde8d4dfe57c9878e80b3234d4cd288c3c87975d3a6e655c68a62c6ba862f85818a1c0db642323959f4d077275b234872c9fdee8c380db605b50c9a0d1c815d7754a8cf410ca76dc7093a0e97b3276c650dded7c178bd700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a8000155a2c8572619b35800ecc704c50d67d84284717d20a3156c5f7fb7838be636b378b40cf3e484fb61675b9a4c91d3c2ea295d3fec07bcbc73564b47a1bea401c06a910f5abaa19d1e7016b8bd14d9f6ead4a511fb78df9f3f85a2390eb6fcd0d5ab63b3fe383e4ed4104cc40e26e111479a07ab6aff6867b5c70c92c34cb5864eeae19b538a11f27748de063b4bb100dc96f66c270e667807e21d78061f324e88b82ff2c2962b5bb87177b04603c11d83903b8e1325d431b051c19f33dc2e2aba01748675bd88f7fa918bd048c56c7fe178a76bd489582e8cfb6c653b682c0e89817fb6584e26b1c7374899b155a3efd3b802217077dbf7003b10aee14849f522b539b9e9d3f740b8c1d936515f2971192876d6f0b91da7e405674801742d35aaa5a36ebabfa25e48fd73ad0e3c8d04bf2d6a4a55144ef5fe1332071d87a7c7a0ffed98ebccbf4f7413b144b24d38a5495ec0a7d1bb3d381b50babdadae110e82e9680f4c6f52586a167488a3bc4bc19a48ee28ee9e9a790b32b9112c1b14faa21738833ca13b22299182cfd3c464c6f009420e2c7ea4a2f05ddd42c180ff8d1f0a274e1eafde7bca8809dfa996e7efa3b0ede1b4c3a29fd0c5be92cc30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000906adda69b8a6999dded38dfc4cc56e8eb585c808f7f2912994b6d95f5c4690a6a111b67b3a500db8a50f393ebcc8f355f95632ac4c362d0f204394876017c1d238e19f18577de325ad8692c06408c311e96382760413ea1b6222075ad2165486d09f151d577b1c7931ca209d8d284df7ae53b98f96543ff01c7e0101f72ce7edc8cafd3541a91f63efbf7ab4cfb3243722416883ae7704deead425d5f8df3150136ad91998fd0e61e65cc8dd006044a67be39afbdab85fd2d5ce8bd5eed9a0fa04e1e1a66c30cd33b78d742635399889a9d56f39cdb29d41a8b4328f4bb55bc56984356f7705a133a1d85e020be55c6b6eec4bd2a9598047b0025f5fd786ed0ede5f2e5b24ae99b8d8790ddf145abf5ef41d6211e34a9fec7f9a1cefc26163213e97d6ae67ce46faa1dedca468069a44ba85ad394e28559496facb5b1432ec102eabdb5c3d13dbfbf2a3db10199cd7539ccbf5a5b00a36a6780d31d75b655b55b8eec4e0670bb93354e91690ad6e580dc510f5338fa5a7869ef56e4d3207be84cbff4229d0f6859b68ab173a6a78cc86ab7053fe42cd7dc6d34093687a2a374f5421ba1ca8b853969ab03ff1f11f3712bce47711f0da97d082665af5d3889390000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000966211f61934f174d22ff517a10cb61267281072de5735a0cb09d408ac0f18caf0cae2483b0bf218e3de66dbdb0bb8570bff4328fde78f9589b4ee8364686d660e1331d1b4c2270e08f41eb310ce6b3cedb7f3a9a799f5d0097dab51964bddbd6dbd4ba238b5f1ea87d8fd9f598fab41c68967232905105b0cc6850eb659df16da9587f9d9d3589d9b83b11185f403394fc7b63fabee8f82b8c4ce6e1b1417b88c619d4a3f5e8a8bfd7ec600c13db8499fbf678a0ce52b23110e2331363b96a967e0e2467c02f19aee374a1032ffb6f9981c73024f5deaeefeea46b3c74f9a7815a7abc37d0bdc278d3db35b8a07b4f2b8d3fb929bdc9b4a5586432195b9b4b2d354b8a7cae31ca6dc9244bf89e0c6042d824aa6e558c224806516ca94c6d2321307546893966285ff309d34a9fbecfe8ae2b707ce13444657e898c4030e2221216c9683e7afd63f99e93c44d86020d76f9a00b6e602e9e2a54e35028de812314f0032d39180c44b2017454b5bf8a8f4bcc9c2fc5da93073a6483c9c3a1486c099ade063764354b1a29613d32d9d2b2bf45baa05b396edf07d247f627e6a71d29c642d7abb4a1c5a44fdad3a127fa72ad15f02f8e3fd0b024b6657f1bd6cc62c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045a2529889aea075b1791d539e4b9ae10a05860e60ff21dd1002793e5ff5966cec2e7bb8ae11ac0732b74724a3614525a431806eb519c56a67e80230cda6696947c67903234be89dedee280d6128a9e1b4293e12518133deb4e38c0924da0637b630359ad8e9d0a72b9892c76f31593f2ceb543d6cca5d2bc761520d197a501499bd99251478e8902db8613709e1195dbc74aad84c3e23bb3e2c2eeb36eb434bee73ee47d25b6631eb0293510c93da513cb39eaf17ed85021fa8e2f09064c9be9e9d63193c56b6da99dd728eb2d5fb5e86e4f290e2a5da86639aa2fe85de54ca2c17be73292424e149f5b6d760377c9692a06a1c09035ca2d41df6442ac10a7b29e9b9ac6bf45d8e7880748a572774ed0eef52274ac9029d04cd3e25aa4ff018046e27dc1c38f63477398fde375bfa714ccf3e6bfa83b7fba91a1134a59fae30c31146f877a6ec6fa79727b3b8c97b2c8edb579e99a0be9703548225d820c433487e33faecd90a9a77e6b82b066dab493e29c6f86e0892f63c74cf9857cdeee3c20fc353f49c55fd0b22ed2e3ffe893420eb828448cd6943a6accbfb5c2bd9a3c28c16b07bbbe923eeceadd4e036a37d8991072ff58d50fbec30e15954c8c0b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000abaa6e8311e22b6c0d9f70ba4141719b1afc7c72db2251b9e3ae3708b48b3911b4f40f2cacaececb0d2bb2145efbbde4b79bda3e23259b04b42ba35221219e1a26100ee4a5eabd71ee9cdae90f3219a215afff2d3a1ad69fa876aae3ae581d53cc27077394e884f06d1ce2aa4a2bd30df9e35f120f731335ec5f6a469339cc4d78773ca505ac82a6e366b67be0a070baabf4292fb952e874f883ba223db07f2922408d190b3bfd6149f7258e244dd35a7f37deb05effc2ab4c10b614c8da578fb90ed11e0da1ddbb2a1c7000924a6408a8fc417895bf767d6709c42382eb270babd890f23f8bcff07b6dbc7c04464bc6b8865e4d40600b4055ca8a795eeeae26ed7c0e186d6b8b6ce49eda4feaf90dca40fa3b09eb32a5e480f44a559efb5eb708dd45426f790d7c0c230bd4004668a6e6a909bba2ff4b1ba00205abe060bea81da540ca6ecfb4a66300e15afd6a99154acdc463dea28b261978de92ac46e0952445836f3f3612815fcd973e887ded64ee81e08da8d97385a8bef5c7590f0195308ba8a3541df8e29a96c0630edec45cd6a563ff76b2d12dd6135c03693a5dcc228f286322fac516a73cdb2f7908b19c2dfdd1753bdb57358f87e1b167ac659500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003015a25c8cff85533605914b8eb447621dabc4a0b2309f1c292aaadb5dbe369e03ef610685e4d559e9975ea6ecc983f450f5431aef570c965707b3752421a4e7a7832dcd1369ef0b87da5163cb0b1f40b9d2584c524d3dd34552a1fe29d99bc63b6f7aa234d6cf1d2a2a44fec05d2124c5515ddcb24a30c4406b1aa708f0c4c18e092a0f650154af5186d7d5488cf4a79b6483b9d1281f5d79f528f8986c7a5b367736226efff75bf19a586be5cb240a81352028ef3b9dd84b08fa9058b0bfb2c6fb6b0d2b0c5d9d1305596d9556dc1c0b86bf3bfdc15bbb64c4873a4c0d943654d3ee0bb6c5b987454a52de0e454683089a473ad619afdd6cc31aed15e06a16162be875c2f99fa9cdec9a6729857e5f5ef54cc85af1b4b81ffa376bee429e3598b9b8f6533540380960c112117a04e060a8ae62bc19de3bd8e15b48c8865b2e947365f753b7fc7549f04bb9f2efbfaead6b0b6a0b98b1b3a4dea6fc122a87c3cba5d2274dc761a05e7c7a1980ddd1f288ac0302bc1fb00b9917d909df0a80ef6429138d1c275afa2bdcbf0fe34e3ceb5377c6f18e5f18509b171ec22bbda2d5cef25713a419c8fa6a1392933d6da1096653420293c0d97adce6ad98842b88c2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088976db051545a4c1928c760db2cf3322a3cffeb7fd1be1409038be861164a2f7727e6d765e275bfabe21bbeff5faebaf5c0d830d883f329668173d674fa3bb6a92684211c1ffba68a3b4563c8df3f9d35b0ca5318f7138f672f9b0cb0d5f411523d71999611ac3bef9f47250b0536edfa6cdccf1bb20092e1bba1feb50807e14abaae6df33f871c395a400f0aaa9997ab9ef2561ea137184795ca6ace2dd0afee4442803cb061a02991fe4abec0dfa1a60bcd17e5fb4a8ded76917b72ffa5fc6b5a67a5394a79bd9917666007f4517cefbaa4821cbd08c40fffd95b0059646a9c9ed21f9210185916984500071a4533072abd4bcd4a8f3094f4e145d0ae40b56126aa75131e828759efef690dd2d43942804d28a5243af46d390fdfa5e706830c43926a40d5b2f3db4cc2d4d61762f41894dba1033cd7aba68b85f1813693fd567f2b985359804f432cb468b2b729addc2f13abc2f469837fbfc2d03bfd7a0ad38c9c0195d7b1fc5abeda396341d713b499793a850026236e1486a6286d446b3719ac202398e2dd28c0ecc309827deb7796ac410af44ba56542eed7e033338a178a9dbc7263a1b012ee0fb006c8731868489b1fb17547f11c4a815e259ee51c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d2996e718fef2559c85ce9ff7d08f536984add34c7e32961ea6172896ea207a8d9bf5495f05f664d4ea30aeaea134869cd2c4d9991e2465181cf080ecf2bf12fe432bf078f473a28a33e87be894649de8e2a40a976843aaf7c05b4b40124c71e3fb80a984259833cf0ab3c770c8bcc4c8876d92a2dd4c60bc3350b7d422e020b35a8798d7f8cd62cc7281f265b48b2447d60f6c5b078436620bae08f522a195e530d8015cb805d8e160683fa9358729cd9726c9b515492d5c4ee986a44dd791dbac2ea5a754083d8247b3790cfbe215435ec8b70acabd1bfcbd203b4e75d60ac672ac54bd4b59f808dc3ce333f625ae057bea50966dcfbec9185d05bea943dd22416a436df976cebd43553a58230df4837b96832cb3a61ae4194e01cee7799f54336894686b4d2596c1163b1cea479bb207f9e3b273e6a5c3d906c69cb1a7f35df5186fa5691de55044a2e4166242527272638c2ee72dc4afd95723ae4616241ce9b28ab4a9c25e1b12f7bba75eaa5a172e8bbce80cab097ecb3c0a231a8bd69949b6d9a19586aa1b7917bef307565643d6c4ed8696ba8c5c7a77318eded874f8a24d938aa5ed03e0f5551ae0d81e2f01b73858b14993ebc7cf1bd13b0007700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cb26281f36d3b5cd0217e90897e146874c0b18ff54d1c57aea5103aefa056f360e9298939624312b104165a9c28a759e413d5af88be2267974874a0c20733cc97d4f94e8dca7fb38a7e04eb354d15f1ef9777b166e5203de9c0aa57ac8f28a476609dc8c02e6ed8f463d7d7a9a8b4036c574f7f0edaea3a90f134c8d1546c6aa1c884d65108fd400394d294b12edce8acc31a90c188e785a57aa1af3df14f61a82a7d0783a9ffcf3c5c6b3c80378c05e28b5e955d9826f3ab705395966a617b86b9dff89b3999e1f547beaa157df841e406b9ad95cb3b05df6443d49553e343bba48da8d2ee0958fe9015f528005169107dc6c1dc0bad8205268dd1a1cb4731f88f98d3348dfaf6dcff4aec405d0cd72956d84261bbf1d865281f80edc2f6d35be887ab87e6a83a5fa1960b10ef58d7cd7cffb5a8c634e53d8ff073bdeb42c14e55963270cc13ee5ce7ebf7f913d8bfadf0dbb9f57227e3f1b9b16392c4a92cb95236e9564dad7162219aae2934da34910e29103eaf123e550925c2bb6c47c5d8a9133c417ddf9ced243a7798a7a2b2789076cab921f80513a782ea2708e9b25b293b81f39f7ae0a3a7eb2abaf9e1a53dd30338d8328947d879597908484d4e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000945123564cb817cf19124df0307342385e939558acce5bf653534e006de8b5d7d73f8c3513f424e4435106c762b8867c8213762495bc2e8b6a2dda20d7abdd50e5b1c1c12c9b8516f5675d232baeac3b6e3955f9e227463974baa6a77dc4f55841131e523a4b5c711604835efdf8b2efccae09eab9dea69e30474c6fe441980f60a21e44d0e1a169ffda131325d0356ab4689b0b01c30609608cde69319764c1b46d2d0a41d343b53d7da2bc08e1df6e6dfa0a13ba8b5ce132afe6aff5b4c102cf45a2a9a75df2ffe258a5f65a7197ff50a36336faa93a179f1a0937ec42b0ecd6c44827baaf6439320ac62d4ae3e79a22826f135e149108faaac5ea4716cd4d23c0ab623e4b164fd33a5b0f58c6ea62742081531367e02ec5bd4fe1eb18ef0f7d632d6e551f0f92d98d2d3b97f5450d8b92d76a7f542e18502c6d94ae90c9b5122224062c4aaebde3cc23e05f0af86a767a7fa133d94b22c7cca64fe422476f2a8ceee39c540808b9d2e428785a352e597cfbd780a7f51ca56a3885538f1f501047b2f17c37c35355177ad5e872334d685146dd0540555591dbd6a0fc16909373ab0f3abb1b27dc8bbc5c03da287c4e9529def721170d903848ef9d018862cd000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027fd97365d93f588e614a784402fcaafd80219303a4cce0f1f849b01dba1c14937cebf984455b934cbfde5d4177a9177e280f393d43035816bdf564aee4c1c7f99f7945d55b59a8fad97fea243e5501411785286562fca9554991479311f10b099d832b34445720b40ed3a4caa84c8dd422b35739257297281e35c431699409f133d5f0ea1e54d144c1eeca1a4929afef1ebe05e91ba18c5cc0fac0b4d8dfaf45bfa95c90ac55abedf372ba2aeaa6c02b5c0af402e09729a456b14af93e865276a1372765f977afe3ec6a8f50e6595a6eca4890ab74052305d79f801b22682c8ab87e0bf633aaf336aff9b92511a6824d0eb668d56d5ed84f449e6f23a772cd67b046fa7f9e8d12226539723e4bc84737e0feb330366653a655a80209d5ae3c78ce2f6795df660bbed0e52036d12065f5b6f17ca7fbc0cfedeb3ce12b8d4c5d8a889d3aa9812903eccf9613c7a62a226dbd7450048477eb717fe7aa912e0375a9bbb342555ed864cfa612a57126dfdb12fc0b01146d4571cd6747732c4e18ecd17e13ef87e24effcd2ce636ff9a0a2a7b55795de4febbf7f28d948b97f7481a459dd655dd2170d435658dc1aebd24435322750a2884c07948733574e96b6231b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e52911f95c8efdb14d6f84173d52bac116ace280081f5cd74465ac86071a9805e7cc7a24f99798bb079fc43e93c1f87d53424329ee3d313e52e9fd3d3624c9b5f9205a78fbd6fc161649fbc8f3b8ec6b58b238a85e1de08bc301b5ca8dae5c1a68e30e4e6493b0eff49b518260fc730f88e0c587f4c5970b8bc4421d6973b7effc86e78a9c4c663a240ab77e1375979070b25480e2259ec65d9ff878e8ec31dfbe28f5b579150333cddde2c1cdb54689ef14b37e607cf3c7539e3ff88c6b1bfee54267c6d548c39e4e6e7b77eb9e136c5101d0861c10b4d1567e7ae318d1e0c7c000e152c28424f61e76097fc4841329c806850515b7abe0940c7325ffa71a656d3d023e9143d1e003d692f73dd194a9e6f2eae3f2719dbb185d5a1f0cb6ba87399e612c170343be78a0fcf75dd9b87bec4ff264936bd4eac362c8b566700a49eb3e7b936bbfb921af69b236b17a112fedf579579f20f5dcfdbfa19ac8c635d4474362a27106425064623de0f508edb0afb11ed2049eef53bea7193354b9d84fc87e1e5dcb2efc37344e5ac14a430b42c6ae0fd96cdc26b06d3579f6ddcee2591d782c60e825303df533cbe9775f7c1b2677044371dcafef5e6496b76734069000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021b3acabc216794ef43f3f5d2da2dc77a864e2cbd88ff8df084e89317b71c06d065fce470899387f3e6781ac482336c0fe0a798b299e814112e0b534c00c0dec8d3399e9c6ee0e96b125c7761a6c942028e1311435000940a58ed727cc7eed140a9c65c53a651d9198e1f42dbfef2216f9d61303909158187eb04e4c896059828a3c358927682161223522267df820814d3365ea6cb88685db7bb9bee7a423e603610c8c499e296f8fd7139e4207e777f9a6263ef60fafc02f3daf7e9ec918592ce839f0dc9feecbff29de34fe11ab919aba98a513d27ab96ffa7b23c65994a03ea3c67a6d0f64de900bbeb186f3cf0da185ae19df16a44825254175298f8f580c1b153c9f65747fba4c4ba85890cb06d77221bdbef3a3ce12b3a96e3eb6d80b8f52693f6ed0b49705d870d17b1f83ee8e9068e522a3345c2bdd5205fbc398a85bde0c0956c4bdbf295842acf52103e77afd82ca8571f855a6c0df5e30ea46dee1899f03a437023caeff4b239fc19a06293adaa1ccf5fda53846170799aa72bdc697d0165ca523e2bfc22068dd31d66a0442a17da34fb759460fc63896fd5cffd54919aa7e917eeeb3b0540b5d653c52465b07319ec98b4077e879ab947cba320000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000128e7a7f4bf49767de20f6ba25c667d432fe5ad79219ebe5df1697aec16beadffee95771a4164541cb3e23fb0a3c0ce1bc7912f8e233d1a5377d13d16f788cde07693b6463e0ec913c328e127fe241b608880b6c3889db1f9ef9c48fbb0e042a0f18af8f95dfaa16c5f77b8af1cb95701734922f36f25d9efe9cab371882445929325fe5f5e0ff2c7b3ffc22afb29159bc3cca577e7863203e4598e7c6f747b020b8148af6ddbea747c3694bca750d018cdca1941dfe4f6e5b4989c12f33c8cd025b0cfa48078ad28d4cf21ba668eb2e064e9c2989753cac3570dfe36950a738cc4c8d4b9fe4ab46f6ca35e96048e32495c538d94e76c67e078be8fe12d5ae7f020ab0b99fa763cb0f83b20c0911831ebdab4a5d7c3352eb62705e1e6547a3e0eea009e7eda449051de6d7f40d4c4c765a6bb07d134889fd51b91f00e9104f1de0f3b3d4eba0081e1cb5cc9f04f05ea1a73c9819ee66473ac402821fab9455bc6b6987dc8069e70a1dc82cea4e29f0f29003782deefe07ff6718886679854075b7cdecb7a651c02343a2b220d2a42a106f2a022ac90bea7ec11c6f6e06a05d4fecd5be51d7842f869f9605bdf85706a64294e82e8f4fc3c78e4b14e6a228c89500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ef3ac73d28f3ffd047f74b763fba196f92e0d4ac482ffd75de712675c0731095eb98cc99b6274a51e4d0c8698b6f91939f30825c81f63561253fe86441520d23a55a8706f84c1f84b41ae02498207e4e8d583ed78eaa0713f5a2bdf65f6b3601fee88664aadadf268077262424650b25f15ffcae813c1268882c83ecdc95fcfaf0cbd31c59a0bbcb31d0e507c6131891b63f63a46274106d7af193fca794b45a9ab8abd08cc3e44386ecd49ce9dced2ab58de365a5b330e1f4885785ed72b9ef05fc163e2b2b14acd3a76243adc2e2c14a5641fd0f2b74a010ba7895af4bf3621131d4ebe3590e04d858e214a612ca768de728c722616afc474d20f9ae627447351fea174f9a89706577f07fc3a450a6be95cfd591718e9e811d98f4848a2b2cda5ec7926cb14d229773827a203fc6adc1a52bb1cb4087ee765cee0b456e1a837d3db8cac235358edb8905fe2700b8b5916cebace11a93a31bc76863fc19774da8a0ec40e973ab4362cd43f11d738587b0c13aae33f8e9425aabaad7a973b376b3704e661cef1d47fdbd7ea7f637f3540e94120c7e5c0c9d42b0eb67e86ae04c4c33c16a4fec6dc1b6f8b440687b64b2a1debff6b796bd53a58ca05ba198716000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006f3b25f18c12d04a914c74caad53b33ae1ceba18c456d5a1753664a17206048e8e794f867eac52258aa144f9a82023d61e756253b2c2627d42feb732b273782d8c9a7f1fefc67914713578a29e2f07228a171ddc3fd6919e1cc71e245c492f0e5bd33a0afa095533c56dd6a9ad33341957c926fde22f86b890f66b315aa0dde7132421df1129bb008198c7bae2df071777817945dd0b290cf6bd60f57dd8cede1bd0edcc0f04f3f8c3c2c08608e16adfe360bf3264c1cdcf9cc4a0d897f541fd62362534f630fb0da076985d466d3ae1932a93a13da54f64c0a69a0944636f7299cb908fbe2a7f80f0a1014bb3448659961e9afa32bdcc06f45c913fb17ac3cf28d93afcd33114efc4d69db5fe543d2d67ba29892182cc198b0833834de727ffda26ff1ab2f9029adc2614a0d3e4c9731874c9e3b9cf03558f2a3ee327286cd227a73490814ff1f2fd84ac1eb39b6a0e5ac32dda2136e97b5ee8990675670912bb0108153e46e46efe3fd0f62bb6e8cdaacf18404c97585302841e80bc70ed303834a920dd87e6ce5be5bb9d28623683e5f1a47eea9618a90a046934fdd02e581ca5d0b070d6fa7134af050c0e8e462812cae66c99884475bd84af92fafbdf9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d83c29354f1c74f429aa031d48a95df8aa27c4621314ff1e232e2b8ee023093f024cebc9001dd104ac5e9f43667e6c9f2dc776f311542a32f98bd2d545ad9fdb4c5104584f88217185a5ba24c71a92c84c48fed44887aaa1dde08836ba923b56d3c56c692acb107468dafa5abf4960badab6d1f367d29ab978e087df94b5048996ea389329924b082cd01d21055138f02483301781c1b5264c12c095f6e5462b3efeeca8657e3eee31d8021230da257ffaac41e494af6981ad4d6c3698d89e703685fe30c3366c0a267b50433724177412fbcbf2f02a4f9b81fb74a40003c4201f4b39b9c4f979223cf48af2b5c258fe5354e78ac1eb08b39ccbad0d4bdb42c7585c6a14ebcaacc2be6876e91ca090ec40fdcb197bc4145ec1ec9b2e0f74de27cb1ceb104f88eb1b8b4fb1cc27042930d89c71960372fd3bbae202d98fc5461adadf87f006987a5a87a13e67304fcf5bac8166e5a80dfc49b5dfa4452504bf344e48a9494a24b84a338feeb11d3e2525e843b5bef530ea87af53cd67e2e34495af0ce4b713a030d1f055b2b05a59d28be5f6d5415bb59a071d91f4a1bdf79ee80846c7dce8aa751d5f23715a7f74b007c87c9ee404dccd4bb6b4a4752e105300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c4c5811dc06920e478aea712697f186b8f3d2dd7694b7f2eabacd65b5ca7e522495799387bbb8c0d88cee278fc341cc28f16544987bdfc1cfaf5bc4278649e39984f2d52c64c6552b288a2b91f8db978ddf249785bd3e3a4c2499c0f79461e4390ac5765a14d27ad721497a855ffc29b2edc10b0079ce54db665d0fdf89ec5ee0d9c9a8a95fa9bbcaa9c053c6e5bab07da9cafed07bb2c09ed7f801945a8e776b833621487b338e61509fcd0c4380a644bf15e17cadbc48b522755c054b56817b9f6684ce9557efd15051ef57f51ee38306e6766c12414c4e448857eb61c9df4ed6963cda50e68795c20f1f5321a3a55a9d02ee8f42f905cb63203828f2a3d9f61676be95ee571677b620466d88dc4fcbe5bb23b8559f00eb132cf801c17027ff79e4f097835e7d55b3860b8b9749d80da5f4dcb4511fff68d8af52c84fee481f03a8675af93831fe15e9d2080007a70d3e2bf8900daff5c82ddf26dd936e5a6433528b26bab2d3ba8453fc38e316161a37a45cba4cd4968bbd1f5b18ce4bc0c42f940150949c0657cee4a3dde0fe5c0dd06b02786548ec63acd4f6c7fbf4db1f23ce7a78a929b703aaac5675fef5804ebea8bbd6e7b75c9a23020e8c5795fd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000290a9aac33ad2ac5ef341280f96f056d78114b8a142962d4fde23fe8139db91a846d5e544289d54828bb4425266143624e5e38075878fe34ed778ec2159df0e41db24a92dda3794d485db6ae300fd832500a169126ba1e4feec4906b77fecd778f5c4139dbb6c306396315665a4c0012c3a64cdc0f0f26afad76cd5d9e92e624528a1ea40163ccb9db62b7804fdaa9b2f50b87cc9c1a091e97bededf86cd6a0fca3512ecb91a82d3b40f4236dddbe559dca7f67b9ee4d052bbc79079d596e4d0a5f2ccd10c3cbda1c0889f75b0c5d03e500fd11eb21574172a0c4cb09244c6c97ca1b7e7578268f6207702807d2f071b29db2c4bdc141089c505df7be8903e8c7f37d4845f2f9f1d8ace9b3ce165418b01d06638c1f4e924b1cbd5a68568762083aebbabad940f2631e56a530ebea2874b53e0315248729d130dd7a342a0e30f248cb7e3cddfef7cc980c8cff0294670e3768dd5e51c96d1954190f4cc80989760a1631f671b16b53f15f8460098cdc5f2297c1b18cc61a3f63271aa6378795c4a3f2ec736f0558ff4ad057c5e5e4fbcec544ddb2e7c6f39a6c687112febf444bae1bf8fd6872e9cd8530e632b25e9feebec4aac6cc517441c00fca8d232ec0b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a8b84ecb52e6bf0ab010e7c1e79331ecec8a560d96f925cb8cba5de11b4f6717974cfccdc020c4658efa0692c71c3a5ad9964999ab2a275fb7f774fbfd7ce816743a4c916c7b0e15fe74b0d96d2905b28d4a327f8cb7499649a77a75a4e3a93657045534d698c2fe2e524956101c0be6355c0319acb823239ab82f1772a3796627f81813eebf505b80dbec609ad3959c35a3c11cf833641d70bdb8b16dca568ab4f0b71b49ae92fbe79aaba105e5cc69c9ccc78454a1dff41e9fcfe83dd9929b82085dd749a7e19da4b9022bba59a17e7b71be38cd54f651f06ba204ab719d2cd0d852dde97390851b1b45ab891bbb37bed8a25e2b77bf240d0da4514c61b5270dfa78ca14e1b7420ca6def39185aca9faa554534823d92ed8220e78184f2934d37cec2b85121287879d223647958d7e3fd27724892075097c3f09a739dc8a58b6959cbeaeec3e646615fef250b7660302edaf836a811efd49c5a74ada953153bba13fa3c1df8f6289c1c4d6314297f6f9c5634ffa34056a89d0fbbbd698b8aaa7a6d4a4362b1084bb9718e530c78113bfb156f4a41a92d8d3c4774a281ba568a27ab0edb1b75492962fcae8ffc2e2bf4a680db501b2da6c13066e56548312f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac2665dff7714a7c1e837d87fa6da6c0f1c965222e76634b47e20ebe78d6118b0b9a79772c838e780f9661d6273334cbdb208e51a4da631ea392a811968b34cc465e191a130976a3e8dc69f8e14a4409d89a9b58481529a25afd45d847c1fe389232d41d135621289c927e1a741a759527eac972177e5ff40f2f9598a689b7d3ab4ff2e61db51023c9a086b48f2d4e401e4b807288e6dd59af566800817acd1ae39b5f8c8e0252db86451fb8c405944f1c2b734dd5334bedacf7fe3a499a2f9adfc92be5ddb933ea9cad67ca4e7fb7e8f738b146b0356b2e58d0d57d25f3cf79be6513e790a4e47347d8a519d0d575671c8a38ab3531b36b18a78bd3b55406ee5ac8af4cd03281e45271c4f7c488cd2e43a1f9b02cdc962207b4117971ccc94aebd24aff181d663a055424bc8fb16f975879ba242210328a133a4772364da9bb7fb20bbae53e8c3380cfbf12aa883391b5d328c5aaeb3d7b3b11652b6b1bec507b5e0731fb3341a1ee4bc81f8fab2bcf218499ae32f5b7804d37e40ad0cb07b7a3003f2e60e21d42159853363c85e986e11d195ef15e35682a2386dfc0c08eb6ce5b1841354f619f78ec09fe9e5105edb839d341a4018a9b4df39a64047328dc000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022d3b60359b809c1bca659ae00459d71c203b89635b746e039342c45c4c0fb129e794184392cde731326f23f172b682a8dd2e6041eb9e68979b846634cc4039eb220426078a10ff1bed9e32cf6bae7e374f61e83fe0a38d066e1c2ca2a6b8cc82ea9805c52fff674ae157a38e054d91091fb0d8d69af883595e5c101678069515909f55b12dc15882fcecf9769a471ecde71659de7e8a454f3f012777cc0f3270a546fd1c7025191bb8fc9abe3a7e0ee7a1fa6934601e6b4ffe7af92c2b0a91fe011ca7a6f67fdd7fd8f204df362604b1fb8137f84e448ecf44928cec7f5f7f7b7167dd699efd1622d0692f6823b91eaf47bbb2ee58c782bef3a6314d3b4c30ae93eed3f0a03ea78e4b1bcefb83547ceffd7ebbb08cd50c473b71d4f7c1b9c535ca5cf6de76d42c25354e104550ad520f84a18009ecf45ebbeb50d327d1105eff6a9b80f37ee1efbff54b5492268bddcc65439a5963e3594f0fea8518a59d3cae9588a622ed2d60d474dfda6d7a2e1f40014077360c2c8e0cef06a1c3f79a405a939ecb256950ec7a7fe3429f0d218b393344c19447212ccb3589caf3c73623896e51c7956b041c7c09127dc3907153ac59ee5b5b0e0958aa2647892e0d5f6d4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093f06b13641b7001dc3e7d835d30f34a645f4dab974254b92b9892ba7f73e3a732591def5113bbea77082688fda10388bcd25abbac0a23144eab017394952347ef8a6bccd086f0c7c1cd1f9f55be7f621ad8d8c3035899c9a4043abbf4859808bc9d784aa274b13bb4a5621d5ac15386a25f701afdbfb85da3b5bd73404e66048b5d9e14226a2a9bf36176b11524e5e836d977a1fe2f4930603f6b2f208790a68e6373e809d7b531c0a1279cb328f5da0f6ddcbebb1c3fb5c776b0b39d494894091587897763bb3aa88bab2556a7db2676f27481c335bd038b019b9e6dd4a345f0a1d9995cbac9a398d6cca8d81e4ea67bdbdd8e4c3ba5f2662fc8745554dccb6791d0a17452f6d3be087314b90b40e1bdf78b06ed2c4033fcbc3e74d24f168e0f31ea73bfaea39b95847428657fb77d099a0817583e83f084872c465d7491bb37744b02f2911f8fbec83b9d5ff4a3723b3019ac085902e3a8c667256a270ae6b7105e8ce02699f63c0e665b5bf4375649055c9f1d74dd5c850ef3221fee50bc93b574594e29784e9bdf878bb46625f75142d765a6695b49e92b2c6ebdaac967d32b0d0bdf2624cf02ad012da9631dae508e1181683f7d52d54dce6f0cf77c7e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000296251ab994f6d8e2cdce4e8a3155bcfa37e7447293aafb92f8c9eaf74bafa47f06b6f0bb89767dcd6af0a19a8a06f8439a9bbdfa1b1395bc0c48ee05df6dce0530ce10eda25dc6158a072b45d45af040e6b866345dca367cd8dd0db8bc8e70311a9bc448891e6dada4aa41543397493235bacc76ed7b21bf01b87051993a714b64588bc7d583d84cdbc9d00ed43eba01c0ba1067b593aca565c24601e887341d70353328187d682ae2a71480380809e31f7a2d26603dbace2a93bab6992a56b130824a10ee5dbcddd576ed15094ae70def5b3a9dafa1da7b9113abe0578fc65cd494ccc6579fe136996ad77c904cd1bdb43b9937a9941c8e6d936362bf173593ad822b16067172056021c63719223afc314b0e04d158ac2e4aca2e9d0216424f8505c64706846b765204b45456c72a997bf568516eae70a329ddcb2f4acc991e0e127e756168d146f54d319a3f4717371732aedb88d324f4437c2920dd8a0adf55285ece31d09530c1931d9bd9fd49858433c59c51bea9ce6e90896c29d95df134ca5ca5c9f1e3b8186e2f05186bf1c588297072281f90b22df8bd6fea16e4e27e46c83c9bb72c5350642ec27bc9d24acb21a8388af3cc44c9f12581ed691860000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000187169db864e56873fa86df30569f5e9bb4c29182f932e4567a773a98b642ed405b8833bdd444998ee7f423d2c9f2aa27a629d2cef5e719c6da7c7966e9448c3b728b23a8cec56b7336ae523bc75698d86f5479a9ad25d1fd0da26392e989274db2ef5d82397dbadfe30530f88988d2a06afef5715441e1d085fc19647cc0c2731d0a3542b7f0a8f4fff83c3746a23bf23ce3ea4e577b799f3baff1aa86f735366cb3520ad9bccd7964c51cbf4225cc43c6f83d1f42d9441159e58d0ceaa3f092c257530f7eb9824bcc54c052f3df127f6cdc8b0ed475d0496e406a0da236c4866deeaff1196f4e9d274b92aca07acd4d5f771cef78599ba0ee3280a121780e5ff13f4e391c458fe3504a8b38921d00a312863c90129cef45dee0163b6816e8f2b3543a034583c43ebc4ec93026d0058746ee9421596d93f74a41277ef7cd96e4e7535690e4a3512116362263e34353b831d99fe87d57427c204cddfde7cc1558780e774face1c52df5ab3b23c245062ca26ee31590cb23ea70c347052fd6b09ee47c9fb7d5a0a280c044ea42069d369f97ed41d943231826aa0664f64763180d2e0a1e4149b98f8227f207b1078b07881c61e8e250262c00f84bb3cd4703c2700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008248fabe0ceccfe36ce4af5526083e996c6df837f3b27e73a7e3f99e5932eab52a3521374d12125802db6bdc169dd0b1a033960475a9db667c4320b451e49d8c075954340fd1ba005309bf4b7ec3c44a957669a935e1f729a8620153e553e1fea0790d98225690f1eac5f2ec18f49d64358b018e75058772b7e9168960dff185ba88beb6b334d2ccb7307d83353e190ccb87de9a2a42ddc2646db4ffe883796f4ae1505d616cec8d383e79efb90f959875565a630c693dc777ac8cbe9b23ec49aafbfa0752805c5d01c0658587e6789e3ba52fbfc92d354d176118c289244100e7cd25a31c8a01541340dfa846923cd928c9d640473336863a5a12690e25bcf7af2ce8b4f3756b18837d1bfad27cdb8cf49f0e81ce7c40623c3d1484689dacb72995a1be1d8b3e616dcba87dc353da257106133e3515b68bb83bcecbe7c247554675fd00877516d501217558b5e1c8d0362d84595dc5b2c9a3ac001e0adde556a552945b3548652950b5d01568c81cb01dff8ca8f418cf887b9b4603bb63f7878c7ec27f7489c9343854fec96c62b5e854b13ec1e914d1521ff8a4252a827896290edafb552709a87e2457e0755b6da6aff5ddd2e6a5b681033a1048292dc898000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081212b0f1c951f8fee92e92ce7a870000172093afc812077fcfe727fef6ec97dd449b15e4f02b935d4cd6622d0d35cd822dbb3ce38e36aa6ba7393d58ad8ec4471e4cb33d440fca99d6858bef69cf1e2bfda40f6e2bb0e7179aca14bf2ba89dc0edf9e048e2c45e76d23ae1d1ecccd9cbd32cb2c8a2bff4d2d408fef620ea45918e3854412bac6e7135b77bfd9276af1f90fac6309cbef00eccfe218fa12fdd5079c530b675898be8f29cd503d922828d694added28e1194e6b71b2cb698ac31a446ebdcbc52c6e473783d617b26969111faccabaf39a03020bce262d7240c9803b7dc311a22ab8c9ed8acf6ce554cbd470d7767cd8436db1f61c57d3eba73f80ed97163d53d9e5a6a1032154d34c7ebfca4d20dddbfc053abf47fc1afc01570e03c48079872c99efb02a840e8f2fd4613aeb3388cb9d61600350085d91c7c29f57615bae7bc344278d539e126c615d6393e55487ddc443b413082eacdf0e096ad3255afd73bbc8a03a1dde001476ecfdcd8f8ffdf1c546f697c754a49aa3b1ae4dd4387d031501222dee760577c3cd31eaac822cf04e5e9d038ae6bfa4bb904666085c6e22676daae395ad3ec13d7c83824a18a7fc902146868327a4df34abd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028400b008e4093d710d42e0674a59473170c045751e44102f1130f25a47a836592d41e808c805a513810315f06d98276a6b4d08b91c8bb6e765bc3c180257f63840cf318fd0b2d40bed8d7fe1ca00c6063c8a58fac1b6e5f62e89f3e3b391c1611e9c719fb54c2606e7e085afa4b0fdcf487675f0ab5013d5c18a6cb2286d59e014ba5a047f532f14964c2c42fc6031ba0e1ccb1d8f61523cae3295d3ca759f4db51af619f814cf2549f4d7749433f3e5f793601b27112b0050f4b36f7edd630fe5ce2aa166bce7e71c9ffc7e2d7ceb76dfd1048f0ba96044585e2915925d5060844d9e70bf93ec35ddbae88923efd6144b2ad4b236361912e2e08c4de6ebc51c0f63c8306dd9041b7e72278364f1b4b13e899ad40455d2d7f700899982a5177a822c53097846996a968dcee42162a13577c976173aa631b13cd23e00d3414abeac24b010f2b620ee281ecb5667a88ffb513d864a035239191baa1bdcebbf93b1ba02ba42938493869d80598e3fb807db6de0bea490bf83001b402af3ba0e16f071c6a0f4300e4772d6ec2d1852c490566a2a4cf8b6d00224c98e55094b4f2d93b103f5b2c2b20e0339a702824fb0ac7edcb8bbd69ce9f5d7f09121fe64450500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002390e4096f30526493e35a59aabace8802ae64c9b3c1529ea56f3bf37861b4c011fbe9519e18e1ecf275311f96dac42ea5ad889d33c4067e39a2a42348ae680f14d411eb337559b8bc5d795b1dc99b9159a094eeb8b589c08366f78bdee88ac9645fbdee0056fa7b65932b8c8c1c80765ee6eb012b0581a5b13ef55626622177342c09c6c84c86868c79954319402e64160bc1e8e0f33ec6495b598bb4d787e684f29bee39d547670abe1a2097ef116ade9d0068e8b7d17f37b75c17ccc675b41ee07d870cf9d5ea738d7ffc119f93aebfcaab5f29ccf1dd7a82fd01b734b294c35f0c971b497bda65fb26e9a132ede7391aeabefd6e5c92b97332c278563461d1c94acbf8741fe01c853f100a9d5a3346d55a465fece7c6177e4ce337c56b65013d6639c09fe8a0cbb5c552d93158a5e8f8f5d305e275ff4ba3ccfaf9588a8ddd6202f7862efaafd9a734304d568c77a083ac0c267dec4c60c7caa2bfc54fcfdeff19db870a9a40116ccc42e4beb45df59decc8fb50b98f6ef37375f683e37e62e1038d089a2fc5834746055401e22bd7b3edd222149f10ed166f1ff5fd54c2cb07b28f8d9dbd0af8574613ff47191327925563d2f2d514200ad6a16f272776000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087fdc50eecbe4d271746478afe050254be8b709047c19087c511a833534a34aa39b56818620ef857816d4c7af0dc6a4976da440a100c66cab06847c949f34810d9edccb09382cef15cce7f5cf98b42caeb6a465f6c3f4466ff2bcad341cec250567775c5bb6cfff663c3668d65c43b7fb61917f2a38a5bd77a20e6d84de2c1543542e7c055866c71eeef23a192a553d35a4b560f93f6afff6b7fbf180fa567837a4ec6f6b9c2db3766ecf55abfa99bc46a0fe4c411869ff052dc73025cd6111873b711df51a0e7ec0fa82f12ca6caa7933d54aac355682b8b2173c235a6c8b4d75ad322e8e5aa47b019c8d4c2224b43585f1d46c8445109a1afb9f39cfdab7462deeb5e6fa125c1eaf781f44ba2d385f049d96371faa6333c0da4e0c09a5ffafecce16979963691c217886952b49aec0669fa0685f3c2ea862c24ae6451e83e04485cb290c56badfff91fccd41d7a81b764740a5d146056d9fc65c9935cc012743b12f5ab8b0052d0effc7078dd6f5b657aaf261d348047b91cabf3ec15d3333495f69209fbe50c06b80df4aec486ff1526901e7c29be76c6b7b0cae8e026e30e077497c8a25b7237d3052c9c683f59220beaee056c440c002cba86f6e0b520800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002db35288e2e5ab16a816867af5889ae936225ea5fad0f658c4a331637e5b954d04bfb880c77b09739aaf2effc6af7a45bf3dff947f81ea3e901f2ce665b4710053e96300f269611c6b135f3470bd8a33078aa593d2513a892d40cad4fd26ed94e8d8f1c81ca2c664ecf391d76f4d6010e293582961dd75af6c79f5ff2432b4f59dc5377611c36cc9bfcc3955df2ad3a35127380f3a4deabfa52528e54a917e8d21f82d471406cd5e9d4eb47cacae14a6a8b5c84b860868b498c3cdc1878e026c090f86e5f981b4c24dfb56638450b74c1065eba6db083961ec29fded541b5b61e0254e108ac9d43e6b0aec094c20f1361a25a4f4255e80f593d90831f0fb9eab7501b47b744bbb55eb6c01c5057bad94ef22e8c4eb5d9d30a0469ae98c3b8f2f8cfae4dc8439358d80e24d24e3ec864d45e230061e1889c5c315fd47998e4b44039ba8ef2aaf3d82a1bba16c45e5c4a16e3f7d212e8168717d3b1f8265a6c4c0be9c3130b876353a4672f6e8c0be0def481266f6314a4210ba099c4bfb853fbdae2bc2b8ab018ce3ca2f524cc8df105a5bd55dc1ab63ab5e8246d75b8dff2415229a5f4cbae3c6be394548de89e248ea5373779b2e546311c09931a83177ded400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ece02033b4b2f0ba2fde628010b9d1b3beaca73f9ec7658beaa208e81e065c5e120e51bc77fa5cadb70aa46fd2c7d076bda955df234b0d9c16dfcd47d48658028c2ed51f869da2b90c575f6f99c06dbb2d54977f90c8c7c7da7cd77446df27fc91b493e529a35b07e8f673a9cf4cb5afe43856eb5de18581e661baa94e7e1f5a644b097659fcd928ff326554c7d4cdb686a7e925c3da324eb67bb3985b6b004e9d39f245f70680149040c98ea3d5aedee05ad39995b1663643bf9b2a72bf2f32d26fafbb7d235d39eb3ee7505ac88aba541a68da093e5b2b443095ec4df2f0f6a3e1431361ecdbbbea7d3f42139864718329c17ceb6bdf8465cc38a23094fc69f0640f3084fee231ff1be928ca8998237ed06b7c997c3a018c3ec10c1e8154ac977e78fa1351fb72069d2d770b7c1d5ab9ca83c79b2159853ec930259ba9e5e247874df279bc3342033e1abc0901102a9904d0ef890698bb9af938c0813604a7a0adc21d918707bf638df511c1250014889e3dc36411855aaf513d92f0eaaaada14b9802f0c0837fe9e42f8f8dc5edf7da0d120cfc65157dec0df72922c9b1856ca62f0b0f0b4b19b3bb746acce08e9e808b1f7571dcdbbadf94dde3b49c12800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ccb5505e3472c392ce72d214863e30926c0c6952c442bec45c648f25dd3c77bfc0caa744f375f789e3e89cbee6a65f04f9d2851189e42c73652dcac94edd5cafca284581098efc4b473745e49bfc7c15a9fd7415b63ddbffb286f1d016234592052a31632fe5bcef96ce41254e1e38c7f20769828950eb54b8f7197d593f536aeb1179ad3cb131260a3a5cd0d36c7fcbbdbed091565d4d20f0b729311227735e8637b718bd6734fa7c1efd76a3eb4aa7f4b46f3cefd44fc5d110c08e3876b933596f2b4680af9d704dd4b909559cc314c2245b28c79748b4e047c8d6a53d1788cc286bf732e3e0c05165dbb9bcbbea0c0af0651fb521d89a0ab890779430bcc8766867b06641e34bc42c351993f4ece5b81e8d13ae071ce399059b39fab174862ce5cc859bfce610bfa3565b4f0c2c4dd03b427274dbb68ea5e290d10bfd713e582331ce4b85d01840f229f38d502bb41555a897bf37b605b52a87ab73b151ce27ad2e69021af7e7e861f5833dbadfeae327a88fe061412b816786fd3a039eea50e38570f9ddf872dab863c668495ccc23d64f92ade01b101a925eb3688760b3c657e8e3becf78d98bd3d5637e23b30718fc1f81f4a8a2383dad98c5029201400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c9ed866e5ecb154c0515b98621e3ae9d340e0b716a32f44b30613d26fc94f1c306063e93e5351cf1dccdc20b2f74f7351640b5daadeb7e09205983d6636155856e6522b70e65e6da8cc663958121b1c2d5ea029582104a0571b2b6315fa5a78521b5949b2a21c9135dc113a6fd869b8b02830421c03b5b1096e215ab54482b861bea512cc7374f10d98cf8676685d3fd26e7c6e3032201f0f6895c702bc7e06be64bb776e15c5ef114e660612ed32418c198b0c9c5c985da4d2f18519733283469affd2572d3c3849afefef26d7e53ab642bed8ebc5d2e19b7091d4c8b11642526ff68ae8e427594cf163c11efd2a8088633a01622061c73ead71cf92e067fcd99a4a0c55223380cbce39942b9be392c1dc6e11a95b89162782677ca0e2782873ce0067a04755695d6f490432f4b62c47e8e7c9508103b9c83955fb1d7df9e86cba60038ec4a0286be511b8f59f3b2c89d354f49507efc7fe426fbabf75afe0a2110bd7efbd66b7e350ecf802e529274f8785e3419c5c306a241f0763a2717a00be5257c69cb11c55ac75fcee411b42fcb9d9fc1bc4152cefd3f7753324d3c8a08b8a7cd41bccf002afde4bd9dd0e6b04c1e79040d29be65676008cd0a0dc4300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b093e2cdf7607db136521116a70199b186def99f3c4105af8a4b697008e68cb835dad6f92be7ccfc7237b9f3a14b99b81ae51d7f3f987274f1e10f26d7b6b7e062f59de8266d589530c42a6b2a17e900d3ff36f163bef86b7fa2a23da6f47a30345c011228b6c0bea44933c6e623cde3007a1c76750aa39c7e6bf259c3e4631aba76fed22f33ec775e7f636a79af660d4366f4a415401cf1e51d63637069a3d7eeff2fa00d85d7507f567a4b5a58b8670d9590a9bb6ca5ca9e0825b4a132c16e03cffa3e083170bb73ccfce7eeaf237cfb9d555f4ecff1c642c5982c97e2384332803989f3efff9befbf0008bbf3d3e78455c6241aa54d62d287d79e83363a7d434654fba01f56f1426135560755faaf7d82c88f90628c391ac839dad2709b074b131d7decaf3efd2abc901e68daeacc6d9d6971bbef710b2919444875d53ce7acec73dc0a73bae3126a0c070313e4a477150e0de945d501f860a1c1ded719fa82c7d8675cf320f71ed3c8cfe00a719efe503f073e0ca000850e366c4e34ebbe65481fc4485dd6337567b042e94b544a9b3ff972eff055a39ec96e957a044adfbd393bf7aaeb2f6d15ed918d0e0de5e55ffa87368c4c859a4e1bec1a9556853000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a2324f16a2ffbde6017e144be2576c519c5cce2efe3216fd298ae4e1a8b30e76c7e19b89c650b31798f447135e7f654c3c25df8de577713d5c3c7a84a9c9657161c748363a96bb3f1b01dc734c6be9ec84d97b7da93234f552868729ac1ea5f191df3fba6792e040b043c7c0759959f11b850c8a1d58797ef8f6dfa8b2a494e6e558ff9308d97e1ecb5b503788de32a6edd31cd19193e741a786e60e28c08cc7e02ac59bfb379225e888d56e6019c2fc3c7841ad69b0575faaba6ee67eaae4f41b6d342d1ce93f5f4f1559f58927a39f71c4ec3ca665fc67dfbfcba4de0157ed612049825d2e6310ea85071082a906d80305224f5ea7f19d4e7714cfab7eb8eab56ba479c07b6931839d681ecaf17db1b65355cc36c57280da39513c2c59c43048f8849bb1c4e2dbf826659fcfeb4ae6b523c6e716f01a464d138a56d400e4369f439c07228c08f674caaae88692067cf72f7cfaaf6759b0b1ebd79736f1c6d182bee9b4ccaebe4157e56538e8fc733f3027aef564c6cc5ad766140a880df57bbfe8e5761f3d394dc00120516798562a1e3298c7594748246e0a2bd308c52e18d2fb7e0b783f90d3a143dcf64aaf299f58febfc41ea0615b4d0da78e4ec175000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025375a5bb5aa4d2e912c1aa9a2a0645c9cc44ef1080c55fa9eb57c3326293407e12dc6daf51b52abe9fe910d11ae0c10dbc02b5a04b06d4531d3d7137e941f429b5821344ce8bb57623ef4c279ab5f140d085fe3ce9c61f05a9e22b915290579d67b7369e260880875ca3f022479a356bd25b950b73a6026eb5c92cd88cb075829642c5efc2eecceabeaa2bad2a3dc66b4fe57aef50521b5834009334ca4db22743d86283124639422f99421d718ae942bca22dfd42a0cb886a41f742409c8db46983d89ebe36cd1d6400475e29eff1b767c275f9c4bc0e293389414dbd959d0c906cf577dc5905b6f47dda2f785ee7f1f2be4aedb203e9bb9e3a9ce3534876de2e42f5277f224457353bdea762555d631272d7ebd90aa68ee3237d0a41de7414265848e2c5c08929967e08195833c7c3e5673b46441c2e76babbb6c5487d94c82e8822bfd6d8a46dad243d847a2c9a9bf13e56efdfc533c45993e86b09baa282cbb5fd5012a5cbcc8c7b41e907ac04345d1ddac493cad9420735b35ca2b2ed1b73f718f16a20d9ce483c0154f90e392c0735d110089cde24d25f8d3b796cc120e3914a36e21d05c63c1987ce2bd9b080a3bd848dcb1910797c51a761e10eafb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1353cd1be01a067bc1810f8148357c37337ea47ebe34d146c3958b43e34c085af18839630c14a509149d41da8a86a7b976a5e3f6daf7fde70e97cbb2b1ca54d556bb9917ce58423e21e0e6abc5a53a14fd8c059ad456ddb449452ad72c8772c4863ca1e00fc724190cd85e02bea1958f3123c8a13f965063f0c2868c82a81236c1155c8e84accad89f705a5af88ab73a486eeddc6e38867db6451fe21a55ab2c54436339ce78cb05a4e088fcec165bf0761b82502c2d610d055d21de85e3d9dfc5af0dcf8315679d9c97d0fa84b82a1246dddd4f0feb47ee08dc4938cb0f988f8b2f8b4b4e37a57ccbf3c1e36027fd5de061f28b12c7861c8ce1b73571eb7caad3021c3360fce84b5820342efe1cb76f721060cad5d3b6bcd0dc6d0fdeaf9c51ee6becfbdad4a314fd3d5270e0dc4500b3aaad4304663e7d81336b64c358c1d8cd1753431d2686ce9976ac40b31b176b800a2e7387f334899e0c3cf2e24890679121450d0caf0450a04496566e9736bc7384633bee0a8f7fc164c919b58d9179c9242967baf03afb28eb4d84c3d73af539f61c6961979b128a3be8822a29569f3451964faac8716d62501cd087c36f7b9937abe1c8c5a17c6ce0fe9912c4319000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006f76305bdcee73000b96250a34dd2e74c753be95a2a6ac8fab8974a4ef52465512408193b5677038b19fc21ccbbb13e76c9bd26247a170a64dce725c30f13a73d2e841a06fed15db1f90ed9415422169a0f1176b1cd8c92adddf4934910d36084485cd3cba908c5aee45ad2675879d3fa8ee13641b57ce4caf781cca371e6dddf92b06a813df56f33906ca308d1a55719f7c55b732d4313862219bef8ce022186c945214a3dea882094825a591b8e584cc94e33c02b858ceac608ab0981fd7520caac196ce5f2e8f9594acb7427248989db156729d4b98cd5c2565e9918b4c3b1a43ba9611b3c0da60d0a58230d0ba3e98eb3bcd6c120e3a326e834fbb2d4a6f11c4fe1a7a7d33480c70837d4c7bf1a045285dbfd28315c1a64345f9a09ccc22f263fe9f1c962e6adadb7d0bdb3ec623ba64cd121618d8c7143a2259c3ac69dcca591f64479565a34e03d3a80a88371519cc57c1baebd062646f7d4d77585daed7e180a4e3ab3417cde896d81e6c4e6fee6c3bcffdb104e24f5e405acde6585cd9b4986aae525660819ec6eb8fe510f43c7d93843aca65acda9b72036753d0e8b6a65694b69ca59bc39228c7452c85fd4bb664b8adc546265d6f89f7fb077ed00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c55a3ca8f24e62cc2e63b7462955e2433fcce575f8e31f03b56c0576b39eb8c6a6ba0f7294083fae52d402410baf03e62e45b2d9e52441fb2ce8d8520a9b1f5b986fa8b40ee0cb90e161edd82c41627e7c633b0c9b4cd2a8e43e7ec896f18bf50cb29310dbea731a1e4de39ecd2390dcf4500f74ac5675c7c2b8b9da832bff8e9810ff8522083a7f31dbe8e9838887e9d00daa0064b09e0b932e2caed5fee8a3c25e8c8cc6718c4e362794280ff565011e8d5ab69e073a934eeba1d8b4d39a28b09ce67adf87cd8a21305ac0cc1e744427460df8b7eb908fa6def11eaca3b67dd75a4c4e41c14ae65154cacc62fb0e2d0c7e58cd953e613286fd65e07db66704c9f439094701a13e3f70854678093fab6893985550f55c648e73c4763649d7c0b4ed220335085199a13a1cc982f180bf27dbaebec117120cf53e31d6a853411454d4decda5da97055278923c7b2326a82337413e9fe01303b0c440ba2cc2d37b7b08ffc8bc6b81d5d3c4500e86edcd2b8e6079ceae3a60206a8f430cd7f1802a15bf18cfc19fd5a484d825941118fe845fa3218c14dd51f44f1240658dad4b28242f22230e37d254f84679f9a8ad064a85314bfd2d1027ffb8498d10ee5aa7300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f4ca41db5770c97e1eec471c36d5dd13830375604d92591bc353c40f5f212f6a5720052ed4b83d0992fb0106ff79e5a0c805b715720234a635db78e718eab29fb988f5cc7957442d73946d575802852598573a9de6512a344398f51531d318ea3ba31236a6b79eaa3d71041a3de93b6775fec02eabfd1a8dbaa59afb7076777597ecf212f8e41ac35c42ee017c4c128d4eaba61709bbdda0c748f9727791fddcd378f4ce4f5944079601f770b41343cf66fad7f3e1905ed969bf66036efa9fd2d51ab7c6d6f9ff6989f34d5774ddba878cf47fd4acf3e16a6878790021401e82645de27fd28a34d1718eebddfd308d02024de4d1ee3fd8b0f879ecca55c78551c56ff89c100fb95e18ddda99e3e0a2f9f8c0e9f956ab8e4aa6a2016b97c696f816a1c4d9953241cd804b92b25e1e68d114a5dc0130db79d980d55cd9141497adb7661b20b2697b792020b14e4123bbf0b1d3fd01719ddfdd32f5686d177c2e1753bf74fe538109116ce8aaa7b1b72178fca650bef37926c6e22e50285e04bdb6d0cf7e68bb99f7ba1a5909a0416a0682464e0beae3253ef9daabbb48f237f8c5f8cd92991a96cfc3e51b17691a06a4773c2e14c55f46f2ef141a7fdeed42ba800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e6877a689d2ff4c482ae0b9f9a6e27df94393c85a09ba4f51a366ade80eb8bcd6bd4b55a876781d835d1e3253cdb7b340b88904876072c4af6bea59e785956a804121907bd263c86fd7a81a3622ecf5d047c59641a86dd1311d3a751b08aff494d7b92f8006197d1f33268ca98f963077a66637f423f6d57bbd2181099169a91ee54a69784d4343768338f7b430afb108a7dcb9ea266a83bd625fab35dd11530cb31a29e26262130fbf09e13bfd6ce2b8cf377030ffedcaf11ff6bf10fb04c06bbd96c86f54ff5d6b15062e7c94191066772487b5900b8e9c69143bdf9e35ec2630798e882f9beaab35e18e2e6d737b162785670e5f042fa351d5aad1151f70e19c56bd3244f8461594cb6fac1adf49d32bed39c7ded65550f7a985302ba5f35708d364a3b8d52fc2344d8f5fa18ac2481ad4ff6723e4baa76a08422187b82b4a670e86b118b9d904df919e19616e237b2640392e0bb762cb0426fc18391cf23e83d5f1041c2994653e9743f46de4fb55e6a04701c75b40dfe91133a9da67ca34bbf0fcc806e900e48e350782d84ca3201ec0087cf18cef64de7ad07eaf9f69a1ef702287d2b5821c4577e4691d591d511d4acc91ac0d0e41f6a4cfc490e228000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098c55fad42a72fea7ba4c4aad572e75d4686e21e4260c94dd618b684fcc5d9b7817e2f679be98d3feb0e463376ad985d07f3988b0ce9f6fc7ae9ddc08a6f974d20f484b840d44024529289c344ae8f5a01de0eda5489ba73aa511972ed0adaee1625f8284f476ef20671985484682d92757f63107b5b2f3a49250eeb3c728d5dac76b3c3914ce2756763590515ef7537b1d95070329273ad13d6bf00f04e08bb11537c48e1819a889daeaefd4104f9c33dec8be1bfdcfb942a7291ae940497e4c3d15f19abe0c0e941f6d136785d8277edd3f3429af6fc90d1bf0e99d39f7b5415d87589aa732adf7ef3099c9658dff66836879a228e6e53b03a4cda7d449f83d51d1b19e542d7b98b11ab302ebceafd1b099cb02e54a029329f0ff76040432568ddee7e9c672d28471c22cd99cdd8dbf88b7b075d9b4b8d0f280036fc79fa97360a4e2fe2d3a21a12889937c66686eb30bb77e9354499a801f007edf304dc6efb1486047b7f5a4a9c130c217d7166d325cf46b8a52036fff8af7b21fadbc22f14692ee21d9727c7e7848b0ea2a8502bf2d75371d566d952cbfae18102d923b108ce9b1ac6528fac6b5d03f83987756e5840339df7df68f9a0047eded2630acf00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cd76138ffd2da79d3511ccef92a179531150189c632310c0407d5fa9f869b1c7590ae5d44743e2f6f9f4580b0264bc91fd2200e85da36d88a4e70145ecabf7f1d772ef9005abf7fbc4c00078afb5aeae09840ad116c40917f9f263c9c0f4f137d797fa76d64e942faab53bdbe8ba383329285f06736ca5639b7b47e653c8d3986fd631df1dfc7c0d6ebe5160e5bd1fd948a8adb6f6c165c4192b505ae47192545a21471368cc61584e8d5152ac2bb646562551868f2795c8c3f2f6e365140a70b77d2a99cc61ee7bc6987906e297e3d8b2c77f783bd42907631274f1c9273a345162a240afbd965072300d006aab76f58f0bf9e177ba3b8784628955f493a09ea5b3532bfe6e115931024234ae53297b0d19a07ef3bf336eb8bf57ed2920a459bb778043e5cda420f3d0aa7e275ad76f3bfdada9ae2d1ad478c06ae89799c488d3fa6469a6b14dc9854030d82284ac0a30990a1e88c84574471cc040ae35f53388b51bfdffba1a4ba8036af7d70f7b23951483d5f0654b4788aca2bdf52b5e9c8cfff8b013fe6cbfc8f09ee32403ea9904f2d9d6f66bfbcd927e544a8746ffcb4ae7f16c7c6ceac5dd85331656b0c9841d14dc2665800d526ed9d982ae33cdd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001409e6db61dd5142e8bcbdc22c7a919f693802b4a15b761af28af51a08f7a3a7ce7baf4ede478782c82f5c4e1461ec84c67cbfd9b09f4603272da6f98cefc67acc6e38e11f58842b18130879c88ce0f7e6464bbe752ed92c5dec460f94ea3364868346cc47064ba54a8b87660b1e4286d706c9ace860e5de5262884e6c4a2fbb39e2794140737fd138d98816d46408e71303c2c28941ea4260a15246ef612d331ff26e7edf9fd5d0a7fe02d30d2a56529f9b94130802d68e9e2e3f7fcfa39eceed1b6eb6e29b5a2b45c19f06b4be2bf703f1bf4a4568cf15438d41722a18deb1896671d6c459b9af05563a80e93344077492e88b24ef72ca8b795eb7770f0b9d6f3e31f8313a07879c50678d91f300a4c388588407010ef10907f7d052fb1b8f6f3883c5090062a9f21cb2bf7d8262c267bc98735eac8191d0f03c95aa8a1f1a526aa898f246d57e23b17600576b07ce82323f32742cc9578b2d071781bfc61fdb5879b164de6be396275bc3dfffeebbe3f081225a3875cc6957a394b72465c17928be921ca902bb949bbcfeab6f470c940b07343caac14e96b45f6895795b7317fff68fa71336b581e1cf07fc1dcc1b821eb8ac016397ff1da7223bd241da1a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b524572455d42cc08c1386dc4de051f4cd88e5321ce6e8602976ee82e0ea134fc5c5bf81fb4e3ddd4b569a658f149e84d19153b58e5a872d633873bc5491ccce89e1c29fe3ddee31faa6ae8b2389cc8ca3ca9ad7be4c5026ec0011299499784375f97f3191b7a143564065bad6001f460056cd420543984e56fd93aace2d87bb894042274584d9bc9867a9ba9f8d0504eaf492a660f4f9ddf35fa1cc71d97f4d825b06edadeca131fe840322ed59e3942cee2302e795c77b56a948d3550164b7ac0d89badc520de3fd86c9ae868f63e0fcc4623485ac6697a78fb3ffaada0e25b44520c4ed3a5814ec1951aa806ef135de6e03e42b912b661069118b46c3f30eb68c1e15c886687cbd685c283b7f849a767f9a49b545051f5ae7d8afb1904ac4bad993aad8914261014ce841eacb995341dc0aab6fa893181de555025a038474a5b176bb8744718c8af28f903bf2c58e7aa9ca4f039a1070d6608c074dbb0c1de365d7f7d864c15feed302accfe59485fe9ea911d9d2d44234a34fa5a97e989dc8a254c9af99c4f5990f6f3b7ed8bb91f53941ed6ae6c40b9363db115c2c8ed61e90eb3f4274fd9b6e9f8daf12fce0165ff02eec403c5f50522f94ccf3ceb38000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094367f1279bd4f4b218faf60f2bfadf98a7986d40e2a7d6ea9e7ee8d87eedaea8376ba4961628b089d3924ad024d73ae9af7f98e1f00aa80b76e9a6d95c30b216037ff552429763bb187fc3d12d3aa632889db7821b145c699f07a047107039ede3755c74415ada302e4e66a89b548c1048f6a56988e28e4d0eabfc0335da0c92b78c2d85f647e430c2135c14c446ebc639d27528677fe5113d59e009ee780692f4d3e7f84a4163c8aa04d52caf0cdeb8e1cee78601ccb156f54302b4af68337be20a91fad245150265fdda079f47133c24297e782a660567c4c2a7cee35abaef848148c1cb450a37b6ae453271bceaffebe9f46079c5fa5c792d9e1d32dc7b2c94b163f1f9ef4a7926e88616168cf9a56a22e63a6867e9f468478d8b0be3afa34dfcb256afd90442a6f0017e011e6df7609e5de7f6ca44f861bf08edd0d29dc22ecbfcb9ba7ebc7ec595afe149bbf12172213d101c5f7df6090a2259977dbfda7abab92173d4909c36c66cd8a280049d287f5e260550688f903624a03458e82d44a211c25df817edb16409645b5a8f7e9899f00bddd9627966e647bc8deeb8325397e9f376318aa56d9c672fe6f465e4dad527d3e70e6a8b1d5dd85a145fe74000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098d5612289d1ca2d83a6ee448c045a3c1a7e151c939db80345554660edbf6597f1e329ab21383987e7ac39a890a5d830e994c8a67d9dd3ab7103549fdbbf51be8ade08b94d0cc863ec5c6a80bc26ba1f9fcf7a9138dbd1ec265d2299c5ae9047bba58a1e193d3bd99d512bea762919a25c8b9f594139826a1cc1bc33decc4b484d39e715eb30d13cfd95737bef79806b46c2ce4460da9c595e7d27fb6a61949ea36ae7515b8ce184d624ff1f1cd9e8f3b10aa7d33cd287d617eff61f37a8f0a929a71fbecad083380b876061546091a61f6737608147d517effda2ff03dd378ca946391ad6eae2159bdbdda580e6751ef42640168bcbdd3a0686186b58d63435994d0806c297f1e0341c9df8b3a8dcacef41066b638931d3fdb914afa4213a10f53701c5f5b3e7a9f3726555aeeca0f9b0c30b2d6c3cbc9c4860f7a1365c53ec8e49b3da9bd1bf2b3079a127320b3e81a91929e380507aa811e3143aaed1984f085c7d34e19336b5a6d232ec16979e2d6159f9b00cfc764dbb7a7fcd37e66bf4f1ddb2d1291e07fd4a090827f5b4860e6bc1378da2f9cbe58bf8f3ba05e7260d83241e9011e2a7a77b49ed055a567dfc1c37f27ab795d5a0f2479a3a5d23b81f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032c57a9819d2662c9dd353767c67958a77d82aa381e321f692931a3a4fa672e0ae4dd6a0f2cba726710dce978df8f1ab08578543ca0ad86181ec2c32cc10627d77909a549cc615e7837dd3f346b54c3b0f518ab27326296ea221b155e45d2bfeb50907bf2fb4cf55fbcaaaf6d4fee729322e00c604485227a13ee6d3f0658aa982c440bf11832900434fb92451d3ea88dc8481ed815ad7d904d5ece1f2d3ee9dbc04494dcc21d9b364a63e2c817d45abe850b1e23b7191bc25d37f210b4e2b1b2f847783646080b3846d0a4502d329ca67a414476f1b0584eb93fe723d924f78727d4f4a775c6de6b81950c59bd068bdd05af5f2a8244fff16c42633bd2886e68c0d11d96190390839912f527c99141a77202d235337d2cc73d21d79d2cbe62548964cbc8134f3bc2a78df3f4ffca962e3f7b926cb748ff87018ac607f62da4ecbf5525bb2e3ca14be4f0c5a3d89c93c55578ac94137d4b3531aedfd0d173fbab4b1c4819375f07b1b5a49f819cc807496dcbb1ee42d49cd49df41195f7a48b71adefd89ba0374d733c4486376ded5a8f503ddf5295e9592c6cff9c76315aac5fd34918939c06858f3b8eb79378dbcebf85901064b34b681a2586b63ac0bf45000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025355b3f45e9385efecce9b6e5365f1c03a5ae711e6d43d5d90b7e105749447aa066a95e166f438629c79d7f0376c382b5ca4be68ecb1f46b59697033954d5ac00f36d81442f938f33ccc52cd7fa1bd2b41fea48db741f8e2b9591ea64661a15f6cebab9d285f49ddcac7ed19c2dd9d4870d61266692a819417241e4cb79027503f28912ae3854dac9a8190a122584900c7ec0fee677c56adbd9eaa8afb245bcd4f934457c78453bd9f9ba7be1f10a4c8204ab99bfee6a06dbe4ca3bd2994b5d6d1a3f3258419cb92463bb3304b707fa54d27333f3c3413b6e60fd6d85c45b9e43587073e7386be664113bec7508247d8c133847591651739f8d98c62f7bf7e30f1925bee9679b1936e4c3185548fd3954ea739258043f8055afe4ca801568a9f29b04fb57da1ed97ee953e8f11f0d6c0b694834c721aac9cce1767a11cf540b09d682dc588fe32a12afea0a1b442de648539e7c4d104f0312553473fc1811b8b9cf56cec7178464fed88e010eef9d3b0a65ae9d204fccb244d226528d398fabdf8bb97c7130e3e66130ad049e8a44c32a60c039833209707eaaa894ba209fbdc2919663d562e947590a2222b7b375695f323ecc78cff1eed812de1dfdd9d276000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024c679f14a1dd352f9ebf9edadec99cf31bdb7a49a35c8058305c37bc42b61f7c6defeea219b5406b09bc996111fd14eaf817bb58923396e09e70c6d6257eab0a514a457ceb7d8a8dd9f0a07fa94709a58c5269d4a22c2e4b522419e19f7c660b71cbb9d4da572a99ff27a63e6c4cb48de4cdb1d51cc316fd27bd87095c576ede1a1e12271d5021a5291c95411d1d674e3f8da73422011fadba1a8e17d3c389bfb6535f920f3c6a246df91702a48a4859419e9766bc5f7008dfd618355fbfdafa9a5afb416972308003311c17ef9d3feba81d733713b1145493d5f88c03201caa679879454ea38875b657f9b80aec0832973936f0ee8545750ad6d67635af39b3b133051e551ecf60e6f2af8053903368b3f352799410a70a9fd5ae8b8d108299190a85ffc4ba2ff9df0b3c003b9c100c2b9504fac1d593d854d61c1934bec28bd7ea5c24431b34f681b0d7e21527a34e33cf7b9a383fa90f1075f622c19dde0246267774e264211dca60dac67e198a88455d2c822283cbd0ef562e1474d873560e119601628ba05259c4ef27a9fe27a1a85b88983a436d4671e570e9e32fa1b922fb1b922833195ba2264932e3d3e8df10fe92a14c31b825a8e1f83ebf204b900000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b4840079a29c774e3c90837931e409f4d983ca41f6e7e8dc23104dc185083c4fe8cb72d97eb7b92f37b2af1949668c91ef186a14cc04707055b37cb016f6e1a041ead0428e82a5750d193035fc80d09f77e5b983b898561b3318d715b33f7e8dae6a019d928a2161a64597715fdc891f67a88f60dd0d0d7dd3d4de2aac7f892795d390e670486fcde6a1a35adbba1772b3c306c40d10f42d66a6ccba92c4b3564e83a2432c2c8e6696ea74ca8f9df98e80e412de1ac18dcc597cb1351586caa1e2b602a7b6c3afe7f8c985e7bbcce4b1f70790ff2c22eb64bab6cb9dae173933ac8541b9cfcdea8168e38b9854e64a76919fe7e45361fbbbd92e800b43a2c4347fff01018b90ad40e386b1dd9f2bc1ee2b41d7ce8ff6973693d7cb98358f23554c26f00052637c59fb42123c940993d55f795660981654ea5c95acdf4d7390c40ffd61190f68d46f87803586b5ffb62c4ef57f64d886c62abe6a8db43bc54444aa04317d1237043464f45d9fd55797e31712be589c6caa569329f8b2ab765870953551002c1003a61cd96c0721787b534a75942c7b2bf56a60f1f354b8dcf46062e1a006c0b66c5c56e4ef6e40c425f1bb7c6164b726de6ccc0e321c93e08264884992a118cff56520415e60784ba7f5749f0ccb0af1e2fb284e00ea7fe9a2e1c8ee6276664cd728b976068b2648bf961bb0e0572498efb861e13767dd613f2895df905b2ff02f60bf423571aad4f3959d6d3cd720e58d0ea934be4a96cf713ef11fa20c6f94010389a0115ad9c126cd079e893e454a6f1ebd736fa7feac7c44fa09322e72753f82a6fc0495b100e507592cc3573364f64c9705b402e7d9861a2830413cb5da74282dcac8f8e74d072bcc01a4b69d64b246b8aba4addde06e5febae420c5cecc6817ecd4c7909dc11bb8f72ddbcf163d165ad226ed61307d32f2ca140f00d79e703c73bded9d4cd107ce08514a1cd1d4523eff099693d64e3cd39d2e1a4561533b9ad8d8383810236e5ad6acb2a0209185f6b8d89537ae960fb68dee00f168eeb19a720300a74501575129d8d161cf7ad316e5ce74a908bcb5f8324602c9e50e8ced977f80bfe1772fad2104409c6c0afbcf9949ee3b16b8c47978da233651a74fee17cb35511ca5a24f8f948d3f6003b488ea8ef87dde8eeaffdd09219b2fe9bc092cc083a54111e08a88e533471449e64437a08b7ea40482b16cb710d4ae04667a53fc4c3229af2290e47fc5442c2b632a1e8ad4947752291154af099ca4be0f6b2a63f4cdacf19e01645b87be7e22e38b840f8d35cd04505cbe33023a4032a6d431ac3d5049f4c49f57b95a118bb9df10c7af75677f8dee8890cb0fdbf19f54674866a9f60ac504872624a338aea1ae4480168659aab308712e4510c9a7890d6221e0b4cfbc3eb42112a70fd0601a5be3aa1908f312bb3a1b8aba2c81eaed6d2047bc9d270dc9c7da5de46f07d2d0f577813be62aa662632252e52499c6abd9e9c74d97d976c94aa0521029f8be627c53d09da4082589165ec03e22ea245cd11664509959b4226dcb7761cbe33d44c5d4dab8ccb4842cd9ac3aae16f025b76c95c047e020de7beabc8fe9f8227b9402ad5f5bb257ade3a8e1413c25ac7d140d89948b016f44e48c0ba716899af04cea55763ffe8da1e82b923a54129a0d7fa899e9f4a73c65272390977977599e92a5383fb9e6349e5e03dd3db71e060791a1f9e70aff132df5cb8ea58735a480604e3b68de1669bd1cafe8ec151e44bcf592725b3ca53fcfadf5d51a89fabae09afd29e8ab39b1d6087d78a92e1ab7da738839acc7df4ca11a1645fcf75a220a8ab50aebf8889886f4bd55d4a7264a691acdcfe6d64d38fd1a6066dba6deb83e9eb780dd497ac9729a59242fd8188372cb9f438ddd57c8af887085ba4e7cbfe6afbf5235170b39a126f40e631c02db58f6f0b500c35e7aa136ce71201e7f8529bdfeaea24103e508fc540bc51d1f859727f2a606de8b1b8b0f5efa4f5c4df9ab12dcb55e058853c654175f8b4c280d2f98ada9827e27f06ab1f2d98c98c0e376da9d6dca922d0cef28f4e554911ad2a382c7abc6da3cee5ad6d0683d206d01ceb9a758d9f218eeffb54e5d04301dc9d3172a6563a89bac8cad9d5c7df29b0c477a146d75c57b28de75dfeacd920756c0a8521acc442e96fac684849a276e5c52cc397a02266c30ccb313a66a880b60b3d1318f183cbcfbdffdbd850af877e2f29a32ee6264a4ac0cd3d413bf4a1da822ee9e4d6a01161da3e32792adff6088cbda17da1ba3d09bfeecccf7eeb710b9453add043f99b3fdec99405b037948d36cc267d6d583f1cfb81ba8b857b7160adb30d0110e1767928bac47065ca579ebefee42ded9e2b9b9b5836412c9522c361c32b7b103a20285fc786cc0cbedbec9722ebae1b1ded81046350434dea02f25bc082e08542551e4c89f2f2a6359bfab28de557d95c621f3437b162ebb1c2e3fc9e91ae323ae5e04e5056892860cef26926238a86668271af890b7d967342a9d6fcdf74818cff8b43cefd572afe45be56500acca91c54c05ecd4f1bfba3a0c4dcf3f480ac6d53bf0cfca8fada288721ff4fe725a181177ef297e249e1936258ca5a79ee23e1dec20fa9e687c11b9303b5f5ffd0d72594d9b063e3595838c212f6b0c38cba288660d15d6bc522c9664fd9cfd29f49142ea31f295d273e2bb19b76fb52c7c2432759a207b70bf8711c37eb244e3e3392be65281fd120238b00a2f5f964ac34910ad07cfe2cb495e21abce900bc4730f5374c0c38697c2f1c305730e564ff9977a15520e01d2d21561bbb774e54cafbc2fb13164efb87033f12d757933d218d778d24e7f8d0dd9530af09288f80cbc5deb33857a29dc360103400a1e2284fbe57518aca613357584dfae1b6b07c056ebbdd0679e7aac0a9ec63f2b948b11e2b1f341fa4f6eb8456fc5ae85dafce3b2636251d91d1de57290f997028c26586f11a396606ffb59bc3d16a6ec9670599351dfe59f5923e5a3adc11129197a8d8a5c0df7897f364cdde08967b78a799c8bc105f56e5be3dc85fa5076134961c8818d4ae3be1525b6e23797f162ce8114dd5a58f9b6ee62c683aa37e414146275eddc5e002fca23fcb08d5167159009cb8957bf71da310aa09cc555af07fe7a11d1398351e8251ff6392c2e3545fb51d0642a6ddfd1e51b983350dd782dfc72f4154853674b1af86672b7ff4effb30663a038c35b91c91db898d963142ccf5d3070545f11a38fd4a254c4b0530013bdbe20bec410e5f40bb236e5d4bb043cf02648fdbed8a26c7ffe466d6a8adbeb790af9674bd2b858c718efb480d70db803b702be304c4caa26797cac6151a52a51bf491991675eba31522662fe1419f958e8ee4b618d6349d57f2b58d28f27051385be0312adb1fc2d8b779fe1262e733ab72dc489f027cd7c27c120ca0f3f5212397b38d82eb30326710fb1742611c62d9be45855369cd85478135cc97938cd5d3d2482a494195e904d15dd2d451275430d4b12d7da69c99aea2f435d985c612386dce039dac8e7c032df2c514e2b11b6d92f1430c61295b44120c5afa1c2f728a74bbaa31234fcff2b9598b79d26eb03c22ae877816eed6d8a34c0dc82f3a891f7a8e668ab17a2b203f77d3df22aa87fa6ddd51c0ccde2877b3d103f7497b87b8a061a8cc9bd25d018a141a11522bf9c0f52da36c5343514c8fe977fe5148a06de7eaa45a3c2c379278c32dc7000b132497a10a452330f552cfebd481c79fca1c0a605eb2b9c2454f593ab70ab04156c3df92d32ac292ef2ce27f107c10d19c17a61abd12fde8ce7eadbde76c225a551b1280d153b8eb33b6b874b9b2106e1bf6884a11dcd49c3305fad540f610cb7e7647a7b452dd2fbbe0171269be23f1da778bf3957f6e7a8be0c46c12e1c1ee55dc6a5fc3a3640f3ad89925f3af2f9a1e671bd7505b4c6a3c86541c274de1402e1298a09f543b2d9d943f9f43008036a293843745908f06ca1f3d7876ce71b30260d28989e88e02b7231db2ca5079e8ed865070a3039eeeb8903a1ebafaf0fb810b847b7a65e35b0ba3e245eb61ac0225f824f1d071384b295b98746ccfc02faa11960a6c506b1cbfdcf76378ae33cd523c5986824422b43a391ec1d612900199ca67886cebdbf78c555c508b4e0e1a1cd84ae6f4e0ff685b5fbc8b57d5c0d17d365a303ab568f634e778f9117dfc8d50ed4ca200025523e93e145defbb606354acef9bda5d53dd09da022aa094e4f7e39c6a661f90fe2c938af982aea78272ee280b5c0f6c26d982cdaa4d45b17adfbd743e06db77a6c9ec7c65abe25f7196b9627a874566db516926cffce2772e05c940351fbf6d3f51300ada281ec8a29e1acbadc972a9876b87c598b62ad4685c696688611b43ceeaaa14c370ee0430ce25034d166454cf036d871d18b9ea6c2fcb2049ac89c4f7f2504d584eebb3812feed5f141049808afe63f80338ee97e6229dcdbe26603afb98de799812e8a913f4f1d6194398e7f62168487c8dec1705f56ebecae33a5f62795438aaf9f0d52f50775b369080ee11d81dce7b8241790f676e235a425f49aef28a51219b47a120255f17bdc10fe512c88e1fe171531d8f83c89e8d2b940680e77d2fbe0119830c026fd7c858343faa578ced1d490cafa57c082aae932598b9e6934be0ba83c90e9e5139894acb19902b55d5fb672d3e90f12b8030dfac4adb663d1fd887f8f0282f5c13b9331164291f05a493569bbe4472187cd98c4e3bfd0ddece649a2e5316c5b4240022caa37eaeef89d56b974a9c235d16aae1143e64adc9724e91f015152982968ceed79de4183cca56cd2ac2771f6c105dd50ac1388401d7986309b7238e47dd601956561d29bfc5c965210f2bfabdb32a12a5aefeeb48da8ca11da13019a4594654bed1c5e007d0f28e2cc5eacb7f2997755efc3c7e33e4813a1e8a12e16d63266bd5d617b3e0b6ac7a68edb31f9e8e54141109e260c710f273157e22e7d4caedf0e91c4bd088c9df595d6773b0b67ccb2e4ff6c344de7eca93452220864caa166e80315e61a5d1328b0ce7a6dd87f29a7c5b20147d30c8d37daf6408b12b28d2fbbd54500c4a0083b81d5ef0d46469912343d49cebb4a921d8afd80c59b6e1133c976eb8ccb9364021a804dfe0d7ea6ec5f89c2b25263a8f95012c162c276d9b1a744e6e756a9677a86335e02fa96bf876b24f6d97e8756cc119d4035bafa0f4db87edd60f41228daa79dda43fb241c34619bdbbb17d975072f7042c0dfde9dc623bd520922237a2a64372763dbec185feecb1a914434c30ee5690121f1af825d9543b83ce658acdd846adad4c22cce94bcca79c90f2c44a1fec5528177dd03cfc2563289b202edeb927be9f34c3b5ecaf222d30a1b11ae8d948c80f98b66aadedcb8bbda490da5d8b6f7d8e8c1c003b3e9f2182a5aa1fda5ff349037c6ab24dce06a6f96bd75349408e64a052f70db5c5c5443d4ae3f2c6100c2820fdcf1f4bfc7c7d3d409155abddc05cb9597fedd689047d71e28f07999241e0168f1f5bb9888475d8841fe8c33daac6823384a4e694a1147a8f3f760db679541feb16aafe207ed883c8be658c17cb71143c8b91bf19a066689e63889fc2e3f310e10c0fd2c9a9cd8d070a01ddc1ddd1cf5879b675a939fa953cc2e125b931d005cfac59d1d208481db66cfc386d41631822886436ff5fad8fe5f73bab67ffdc23fc5d5d06074f702b3c3782e36a754e984e05e2f14d9c7dea71c502075b3b37003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000004a118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000004a0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000004a0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000004a0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000004a29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000004a141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000004a25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000004a12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000004a2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000004a189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000004a1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000004a05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000004a05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000004a14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000004a03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000004a2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000004a1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000004a1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000004a14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000004a2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000004a305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000004a280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000004a223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000004a17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000004a08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000004a2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000004a0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000004a0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000004a172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000004a0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000004a05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000004a137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000004a2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000004a2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000004a2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000004a18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000004a0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000004a204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000004a0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000004a1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000004a28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000004a1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000004a21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000004a0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000004a0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000004a107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000004a2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000004a09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000004a24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000004a03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000004a1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000004a205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000004a25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000004a283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000004a21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000004a094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000004a0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000004a1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000004a2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000004a1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000004a1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000004a304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b7c05fd41633507957e18e797e769cd5a41fc4ae08ef50c817a315f556ee2ef704080479fd252ee9944794f326ff54e65e58a2462def394f8ce43921f282239371c7dcb31f8538979e7819d0ad28bd9e97f4a7728f57d9be3cdf795ef3fc825bfb69f61a73890c1e88a77cf2004a7f5deed3fcd19190dc0d86572795f0e8df7116aecf7dc036afec8da1be2e3af89f0c02a8b53d1ca615efdcc506e26ce71d008c5d143c53bd493e7ca515e6fefdbb61d127739efe8135eab91abf9d4e1a2c1faf8be11b84db4a730dda51c1f45ca3cf98b66cbc361e0504ee21ec0c690cad454e60f8431fd4d7e0a81f17130136219da784583b9a92393199f6115635b904d6220dad7a8ec0eca33d5ff47485dfc4fd9141cf09abaabcfe7b55454e516c1c6b34b3b9a17bc9e274a684886b83f5c8519a443d4957f1b35563afcca5f395b5495ab462699896f5821d038c5f70c5a5e8d77be1b478bc118dc2f7607d35ea46986a0b9b5d81a0a2dbebf8dbf5084b6b06cbacdb8f84b2b30bd62ecba212f20f26ffcddf38dfa64bd70e9bd815d1754de3183a6a35f557f7a6f693ca48151372a727c46e9909676941951effd698beaa44af519972dc1aba61537333892643d3a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000163d4722c29daf99d74be4bb0b2293e8a2eab9e69c7558a997113807625720365f2345d536f1745e9406094d0abe9333820196470847a4d3def831633a4361954040981e2a67238926f986b9487ee39c76530bfa7bc5434604a9f14236c4b6bb68dc18f30ddea2de8f33fd8dcac14a6ba9318e73f2309bfc33ac5c9ba56941b6e0c604a0d894f3bf98a5bfcb4f05dccd7534cd2f9fec941df0d7de6d67ef59f72a637a36f8f6383e9535664337a3ab5ed3003caa9e2576ebfa4854eadbfc8d54726c361646d130745687a7edfca9e14c4731a429fc040cc9cd6eb1e17b04c6fcca9d5d5da0fe824627b3e287e2c7a75cd8340a455074f57a0ef635d8d23d5d91f6ed8d18d3f5ca63a90426d2f527faf3000e1c0c05ceadc69e27f4b1893676e8085c1d221396b2c9e1ec6971ef63d17345b2e9a7b38a37c690d8f4a69b4acedc4d8ac99db50183dfd59af601336e85df82a960f0d81c2992f94cd0a20a1374e5e417fdf8e263e560ad03c0f2c0524ebdc29fe877405efbcc959a57f263f8778497cc6f69265df79262c35969260afff8ba6dd62a5f2a63e3baf9ec7c59ef1be2fbb30931d7f4f5b4b77132e62f0b4757f409e6ea115e89c46988aadb28e812c400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008009713043aa84228af507000e33e7af75a55a40b27074c8a3d67008c9ad18cfd749bfccf8d557132d0901ac77c71de4d383079f09c36a0fbafa9ecd98b301d0daa54806016a45d60487f4b468f20c2d9546618388e1132323e255ae911217fc86b3e891521477b3dab7e783004f9a96ced1c22f6c31bc5d35155dcf00d4291f2c2fee82ebefe1ecf6757761dfe6557947410272a98bb1942f8737e68e20b438def91912b744b3984fce0bc8439cc9bcf3f568c099385f02647db0c334c8cfb1b709ad4c863a9a8ca0117f807f10f84e310396ed71004bfcebbcd54eadda8b84a9c1543d62a801588d50ad4fadcc1ff8b3567612fe44ad75f43270e9073290d732575377dda650eb7cd88e575f6af6d50aa352c409b256ef744388e8c6f9febc3ac98a15063bb702856649792f3336bff2c64dee7211f569aa61873cec5092d15cbe30db9872bbd3e470b2e78bdec7f6904e8a6d22f2575112e931a8240a62a4308b08394f5d29b3c8fe6456486e8cfd2d7beb1ac877400d344f514b10defcb4f610c7b4e65d9d1b8e9f45f89efc9678466fba7058e08c48836354488d791fb7031f0e6e0fab245b55b75198ecc1dee18eb1ead696e60e437b3d0dc3c47646ff000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083ac64b3a631e493a142b6cef525befff3ca1d2b9edbfdf5491dc0a2b6f21f1e8a41b59ebdba73f10307b6f5009e3819fdc6e61834ba3dfa8242f00ce39f02cc8b54e59518881f102ac96c3b929bbe42ec0714202349ed1cec78cdb12e53148b286beacc0aae9f42599673d656bee2c77ce05b607ed4c8f5da1b1836f06b3889bdd23d60c039af5610ac62820022e3a13a664c9e6bc38fd65cbc2bec5cefed21f444d6baf00b0be9525820d8818befe80a28393a5c5ec2424df54b949f9d31dd30a7bbcb879e177c4279f636af97abee0f855b0d022852fe0c6d8838c2a897f6cb5419b335c08f66be71ba265e745115dfddc86da864554af782b375f07854936ef0fd6f3a08652f45f177086b3bf77619de0df280a2e1b709cfe65f9739d43264d8d6d78c79080026fcbeadc49a240a088ed00cade96a58592a30c9089b0fab36a4bf96296ac008e6b087eba8031116363b88594c567c76b470233a8e94141be146b8825840c95b02c697e084a6218b5b49e4dd617b96152bd3889b035007c91e5ce76d8c15a7248951d3f9763590ba0902039a4b40045bfeb96503afde1a621d12bbfa6dc0f3901158f6c90bebe6320c901f140959a33e28203e2d49961d90000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fd9a60cd460f91385e104cbc2874385c9de0862d25590aab5d00a24f30a7ac70f1987c039a5364ebf3803334a42ef9620312e5a84936be906833680a0c08cfa4a702136ef0cf9d91d3cab3ece3a48d72ffec4d2a3885aeb3b2e6596705c956cdead924a9b4c4fedf2a39c0357ce0fc82057d970b88a6a79135af3b4163a5d3dca1e0aa400d86fe9cd74dfe94d6b78efe0474f5424ede8b1f3ab50e13b71fb19f886dc4e9bde362ffec829b895b62207b2aab33fc6529e3acd821d1acf7d7d532401616e046ff5e96cfca32aca33f5aed8a8507d4fc957f9d017f01f08aa0fafab38386bb375ff4ae008b191f58704a31fb52361e912414725dd0f8d8e76146ebecc321c21ab60f1de9c5f59fd41e65434ed7bae95d9b881cee477816deff76c3f80fe1cf87dda48ec7c96066ffbd16054c5527b2a6fb184169e96edccff12e963f406620c4e0640570da0a0ff9c43bcc026cfc09b668233f0dc5797ca90be0a2af056a33a21346e31709a02470cce2316e395d4c1874072db896622124621f20575aabf7d490e485e6c62536377f894f8e13d64b85abe968b5decefedcb921e4e252a2aef48a76342e08e46606f452ec681f18dd0c42ba03a23a576a3b748500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c2f83b690d362e1df2e543aa506f67444b99f0b658f09b2fe86e05c22b7fc67cbe853aace7259835d391439f5698d45ef9ab19561f4aab6841e083b60f54f512501fb05a9dfa3ed6db1a29f8e98ac17edf774bf2158eca9c8a086faf986f5a704e2cbf51e04f477e545fd053b0f2bdd8c587edb59a08956455221c6f44d097786cd77d381359ef7725ca2c87d9d8e6cd10c2098c77ccae0b077105ce604a01cf656eff049eb8f4e1b507fa2ea8a8ec44a750a1cfb07ae5401e78b5949b21ab3bba4d5f10da41cd2f1f8dfc4a6494330778e310b2686ab65834aa0e09e3bc8687f9c26837f75a7d20ca858b59155b0f1450730f13a3edfdfad33616af809f2c0567522e81bd212bed369dac554bfac69c5c5a5904fd6b15c38e31688a8e64104afd8044693b84e68ca1eb3e1b2a38fc903356f535dfd02cb50c80a5805f159152ca071f87455526e4ddde96e916c4f8796d53ac0b8247e41610c1bd0402e75d3375711ffe0949abdc0c58d5018cf265893f73a3b3c8b60e4f7e955a194a4b6060215a9826168d3db53d6d4e1d5a0ef6f4e35870a454d8415d524b26ad810344ce8ce9d1e74dfc0515f84bd1a9a0c56ec69cb1551d8efb774f8ef229a2dc05ddb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007c03f22460563ec762ea6a50174808b46076da2ba3e903b87188c716dd9ecf350eacbfe62bde45d1e2978cd48221077c53e5811d0884332d6fa0876bed50bdc767fce856f90964eaf38b2725a9abbdeda61471b472053438fd71f33714b9fe1ab4055f144d7c14bec222ae5f813e4bea78cb63310528bc27fa3fafa930463de3a977c3c5406565b6e94b6b461dafff2cc034bccba1c90d10220ca9ddbce77d1ce9ee71e429249a0d63e2ef32a80b98a8a798e8da06ee34d0e3c6c969dceaf68d9f2d3efd8c6d051519b3b3962d0e1a5ce9b5d3151e75dda31f9751773595f1a42b263c8da73b2ce4a264e3759ce60eac7403182d57306b2fa334e5f2e62354deb6b713a40943d85e119a1d89ef3f2892e166e77eb0e24124e5de463de991d770ef01cc367497130d673ed7340997c3876a822e6dbfeeb0abfb941dd90554edcfd09671c71c3ccbf0d97170d15e741d74e78315ccbed682c8b98cef93458d6c91ff50718fa1c768b337f5e58b4faacdb5dbb338e0c8cdc00d8582d30146d02b6bee5524a9669702e8992b91b8f519be1e350b4ff37e175b71feb846b2ab8310063d461437c186e2c7189d6b1610987002e867c65e713bcfa8d7fb050df78ee1b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087663735a40c5c3852bce973817ee02ccd63d9368fe86de3b1e6fe5a00e8cc6133f2f0780220cd89cc01685e9121ba5fcb037072cb8768d4cc0840d84ab165538a517de6b912812a3fe94fd4a1e257b0c97428c01432e5e0e03f0a620d0f41a3914b4f7883c7fd01513940f2fe8d25e2cd44039c6cdecdbb442d93c11dc11db34ad9bbd7f0934e42d4d50b519d83cdfacea08f9d5da15f10d695f987158ce43e423708d1266d934ab3108fd77942065f9131c35debe56264f43d4b65b91a37333674c4c7022877fd3c66700c0a490cf9260643cc2b34b03dd5b0c6257595e7279392b434920b769148add1564b600adcfa459fb73f3ff277320f307229d37c8c87be122e9f6afea637c8d910a480e1133eb80b6bd9e9e9bdfc3aaf926e5d7d6a67e793c51503f55e6660f8871e95e98be5dd13d901831a05da587c4f4882fa4a4dcf1085fdf5eee0038423b6988786640c61075e5486fd7a09e7203a8173a86ce2278f615d624a850ffb8a0ba022f042ae07663aff2ab3830bf8549c7c0a7d20142beee040164d15946fed99720ef227e7d7fedbecac3dea8ab907b598c474feb95d9979ea89eabdc3da1b89515e9e1160a6b69328eac6b445ad7bdff19a499800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008400a694120e2474122710490fa7e3020a522cc4199d57b4b14ff6ac745fd1e65d3b834e8092b351514d57278035a4c9bf392b7e04ed367f781f62e63bbedde17634f94b4af8da12f42b4d8331a721541e4432d3063b523124b41768cd47756184a4da44f2df64c6f8770b83367dbd92b3b76aa399eac7c0633e6ee82860de5ffec07ea553a56b20e74504e799c4ea12242cd653118fbb9e76863f015727a3fd842c8855cb8557b12429dc98e48f2dd521d3749d0c42281ea55384dbaf6794f2ac671dff49b1436edf613cb4b8e040bec8af3268a937267b10ec1a0243b3f6394f53a33d3015112f74f8c9fc5f24288c2ce2e3cbc9bf72bced6b1a02aeb0c4d6d99e3dfb77baff79da87af42eabbbb33d28ba8240bbbd0d9147ec9047c89bf3aa14f4d417a499dbf5ffaa576469cba2495c8bae2a3e5684ffb8c949b3d7dcd4f7750b88887bdbddc1305d366b541fef792a8d5f28cd29ca0d9acf2bc2207595a4489ad6a818ea036f2b97aa1626727136ed8ba68abad5cd1af26f8cd465a64b9f6f92220f586a5bb3b06bfdf529f02c901f62c2af64bd9c5a5182407e6b9586919913d6ab4391618e7b163886703ff962f40cc2397e681d988ba539b27e7aa4100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d798d7a9f942b16c535fc9f0eb6b57fcf404c1202f8a0ba13161c27269dd9431a21031545f3ca7ee4a59169a7e12c959472b40f0e540c1f6def6ada9528e8fa497f27f0bee9e0c55334bcee7f3403da8a454951b8df6226144df3990e4d329935266e9ee65d12e3b8289a23f24a41fff6743238ceee1e8c222b6369af82e2496a8325c213e7bc6577d838963e1902b1590d414e98c3ed5369e429cbf276219a6db5854b483e12ec337c9617d27be8ee85b50bfe9becf2d74ed0fef9fc0d2361cdadd9c322c9a7a5a8a4ff5cf2214cb2aa77264d88a8afc4f8a85241ba5a8a2cb8eed4f2ce981a55747cf6c137fdbc871bb28cc1ab2e9d9cc3116ed717c6cce938728bb2c1ca5f712ee59e105dca0aef24952c312d3df90e2688c1c3aef43bb0055958f882a159898c8d9484247fa04ace7c6a1ff74f7cf75c9c34d3084822c14bcf307454c5bb0cc65480f729f26c21960ae8f398bc85d8d9b08ce61c3b34ede4c8446a68841d9f8d952ef7611a4334bdc6ac439b4ef1c5cfd77b182277ca72a7682b04e8adfd81a0d0fc24771407d0fcc71465b58f1e8f16126f6ec330628aed0bc7addaf548e9dbadd2e0b2d18254840b3fe16562d7582ed227e7d08aa54f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000be2a4c77b331b08a3b4d574a0bfa00af6619233666ec8193212605e8a6f20e714c1ab126b3ea72aae1ce25984cf45c7a6d261b881f441a1f99aa34cd2b449c01ae29ddabfbf8ae996ae18d40f9fa5340b0a259f919c42138d2fb03a1efb0ec59e5004ed7f094dac6b6a72411314d1484741bf2b574c40a4839e330154f7d81bf6dd8c9b8e751a8b9a627188e5169c1c11298d8665b26b8aea34ce76495ebef095edff2e1c0dc833c910821f00d6aa8012fe59f2ee23e87dfc5cf44c465d63c5b3c6901ef2d1273c069493e44512164d2dabb97a77b2f3f1004785a3be7d7abc3dbbce15a36552b48ff272852434cb85b582b538b39a35c68d0b65ecfde6f9ca1a8934f9c8775289f94404b897c8b0c83786a1254eed9b87274c62941d1216b8209b63baf8624dae255d8bc4c8c986db2a92bb9368de9ddb031f18da57044ea063b13500d56037e1c6859c2cf666150c140e55d7c822c8844b8d311f5b351d8bdf4955c4097f4ab20351c68dff8e8d84ece94c41b13820b9528aedf8d6759d921c3b983c1847ef73cc65db1d149e223f50646305f7c8087ad1d65799580bfb390841c1e4c8c6ce5eb556f6c4762c08549032cfbb17a1383c6b79ec485dee68d400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b5114cdbbf2c9c3ab7603bc1dbe33b937539c5cb22bfba34a168b09c5af2f9e0eafe20f49deb89256def6424442e19186e287fbc6b0efaec4562ebc595110feca6e728a9a04f46814c927363989e1f0357524c785540aa7782d28275475669a3dcbcc18d048ce2253f79d4173b44015ff2f053276d14f21e403a47b00df1915b2774659034cf2744ce1ad4b55d8d0b967a89d23772bb0e91df4e5c377780832a6c50ce10bb6854702ecfe9dc77c080bbae70b586bb1a79f0d3a9df4c16a92feebc58b735bbc7750025803432be6558db8296a3d120a82df0dae5e6543a49e556944a60cf766b493b48386ad9e64646ceba66948d94b814ba29d87e03769b4a0668e29c28c392402a8f0ec1f9554e3732b8ca56e98fff11dd2f240bfd3d12ae38259f62462fbb7e1f1e97d6215e4bd58460abfb2f52673d33805ab9a4013a93f67f7be967f4d0ef46e58b95140e43239503ffeba1e593e482ec9db264f5270ecfbdfcd52d335b6b5d3aa7c947b49c826a96da7ab17f2a56fc0666a9485fba330a4b317b893a9e0d50b577ec567b913411802d396eb050757cc292176a9f397853b98d10d3705df39051c08a552bcdf8963223ac0a9e27c110f38a75f6b5336370000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a18d5c36013df0cb8b3f58ee61b042e4f363ef1211939aca46f099cefce5a032e98a4eafa669db8a67efbec563124c59a31b8dd5d88829fc8975ff6cd0d5346a0defc9c684d56bb04b7f0a0a7472510f07c16bf4eeff15d0da3f652511cb8f3a9f9a429354c8183a160fc603b6cb420368b183d9c3d6a5ae8ac4978cf8b15643b9aaedf556e9b76a84da1279666ba4336e446ee0a3a3740ebdfae2aa244f817a7d9df9fb08fc23560545a29cfd4b097863efaeadf200a36604c7a458ad19deb9616d0aa05510e08667752e47a1ce6ee0d6694b5ed20445aba5defc4bef0b352ebd4f99d1c8e944b7b0d5e2fe63103c13081e2f359e26c8f90262a341813e1005babbdf9d23548b72aa11fa07c6c0a7652d718aa30ed55808d606dbcccfe5b2839851f91c3dfc0feac149cc8ffb90affd8407a120cc6e993800b6e7aa14dcf96cb9233d8c505196bd7b1ef246958ec5350c767f1fc4c37fcf966d2b2a5510577321350faa8824b52a20d7b27c226b57c15c647f4a633640007f47c224973f17f3e6b9df8d4e2e1c1a711d9ef89a967324900dd79ef25162cb62451134c94f77e0394b0a0e2a4d534e9b73293c6363da7b61797eafc2519c15dfaeedc8a4fc564e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083b04200d0ee2f6d353971a68a7ecb9327f0d6668f5675af8882d279da458e025e94165416a8ac1558c995c42c66afd4e1ae6f1c2c0f08988effe5b030e0f7b98ffc3b73ec5a2825970b824c5b7e7b6e762c8006f3b3dea889243eef4892daa8acf1d49be9fd392889245a7f25871d271f08b8a5ef9c2c52972093df1be06a66810a414b1ba002c55fbbc0cd144553f50db5364fb5c341dfbce9169627a8578bcbc9ba98f36eeff880f38bdd37cd15231ef114c2f9e2da84d703d54c1889698caeca2790f59e133f588dd55e2c432872412c7df5548b1cc19ffbedd749edd3527c95bd1ee6fe0bc0457bb772e191bf838bdf575dda27488b293662bd971e27602dc3779c212b23613cc8076a3850166490fdbf67d2acc32a11ae8577d70accf41761d749a78df7fdddf9f03e78840dad961b00937c3533c0a1dba95799767d88db77be843bb5da941f8e814582b1b811c7cb06d3607aae89b042868b2f26c597fd193d649b4f2135dcebf5758636860ac7ab7a441cd597d44320df3ec24826e35ef9ed63058d4a31e7358bd1f4073b7b4e06eed466cc5376482547594edd748fb6fb75b176949615eeb57c75b1ac37c47f445bad49754c66003a38adb2a0495200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ecfb8d393a7009198daf7d7a57d32a4264ee0dc004c9fb4dd55e1ca83193518fa87a85e9582bc4435f7d5b82974ecb50489a27fb945cf439bc758fd4db8e0b9308592bf57523efece90a7f2d9640dae176d25e86d7689c1d3dfdbee800677470c96341f489b6643ebfe497d6835159a875e7e2d0d8d6bc5f3929871292afe689b2369feae91763398115dc09ad60f739f5aa1bb003298046a42254bf90d20f51a28f61969fd2c1d667af72afbf516bc49e2ae7eb30fa1340e37c5c2b09bd22602bb9f7af403e96f22d3278a398c55d7a5e0902a3d2be3787a5a2245943ea45e88c36eb9d34e65672f773f45c9227fe7319c3ce4b7c3699eca2282aebba3570fb371ebfda0a1fb192129acf9831605828b5321de8a0cbf091b3d4d2b864a3dfb139acf42ca4d730a2e45f7f0f7ec42c07ce1a241e3f358d915c2ecabc258e5b874476e72d4392f7e8ab9ab8642bdd83aa241229dfd55f2c1a81889a8e163af19f9f185497dff282c0ad404bd386254c58c251a960be288069b28bdd8d04827d551e5f8f838f521343720c3a20ffdfd4c108f984fe7d02cdce9e9309ca3ccc23b5d44412452c06d9794882141331e61f3d2319274808af96312d35687c814792500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a236629a7d283d5e312f37893477536608ae1a0fdc91e16f20d558c6844daafb1a2d0198290d68cf41ecda95ab65aae438bd4d8628af688ff152dabb93e333eeb130845170f87c4046fa3eeb2df9ee7a21283eeb05f386cd24aadb5097f6ad05d71a437d04410f0bb6016d3cbac9933d14b13b2d199aa0286bca6cc8247b9733c2b9c201fefd9004fd27658e9a518f2988850460d54ac9a64c9860780c13c760a197dd0dbccba69b2bcd71dfb0ee31204f65467cd8525f6e877c4cb1a54df823d8fbe7b43664928db029cfc73af52af6668a3dba0e4ce6d351e9fec00fd6d27a9bc253dcf2db30b0957e9e4d7fc53bf07f149ac91cc444c3f69b90892a1d75e6b730ed87480e9f820500a4a63545356762ed1385ba0b4868e2c1097d11b76b8e68920b091468d30961309e3e1992dc3780510a35bc31d2ef52f963dd7a0de24ec2c97bf6afe0fc5ac0e5547ec36e83147223877b589fdec0b8ad91083f3f7f096564510e3fa6ed1f5448c458644888008196c1264f98a5430e17ddea36e5a42d21a4af749cfbbf657fd59f42153ae211b358f94ffc42db3708393e648f9e49985f77a2e0087b8d8454395f0d342511083eaa8cf4a342ef300675da0123d1be500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cc1370c3e5fe0549cda8aa914a927b60a513905af203daedd2ba323eb50d8396a6de822e1a572efdfd810891f478e14b8d88d92286509c84fd10f2c57c034309045948dc4919b4b956a4ef7635347f3df0297744b8ae05b3fa46593ae551c5dd97c85621a8d6c6a51d0ca9be458c69fba99511038e50ee471f5f8f12199d0daba8aaf84065837b82ab5a856c98ce11385823c9dad3bd8832810edcbfd4d540c978b7cecc2d5d9b0b1e0f2a8d36d111d8ab2283e9163923ab4d6a464aa0b6221202b0e8862998a0e39cc8a5a68f4539a6f995e3e13db6d2b604542cd567374e408331933ee1f689e200dc8cce78f2b2217b69b2b0a2d8d47ae1dfe41cb2bb7b7d07dca82170c4d74ebbd533b19b0d066c71e9c1d0bf29077f1f7d4427391f558962f8f8c722994442c3de3b6bd0d83cead277b2237489f9897c4a9465999917d6dcced221231b1029ec07dc3b6096d3fc6b16caf7089f828da11fbd05281205f9672188d5f4e2caa8133c5f722361fd9d0fb3f623f9760a9024ab7b2e5e05ceb10105ee9743bc597be78347d12d25e4bbc275e0e0f50e83e0140ad7ac91e3a9691c7c2146509584a45e4fc4aeb5987d85db84944fc692c3ee59441a5ba274c3800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b5e08fae132111193f0f0cf94b296f1bd1b2c2dc2b934e2bcc87b836f3cddce84bbfe94bc65d10f0a15a8956fd6f8a524c1c8c802afdf7c4c883d79bebe66871bb8196a3f47aed2de444cb5e71f9defa0303aa707cb9ea8e9d2d67d1f7a78728aa6d8bc92b8b8a1c00bb98b7f545f8851eaf3500a2d33b4ea076bfb44b47caabb26e8802b5f2111874bd4becf055c43a1893781494562daa7d57a34116e9725c8e3c447b76e3ba51dc8930318256fbb7229ea1c58521cd4346248320f3621093cbac6bca3980af7427e4c409ff8cdaa1526191b07416fe3900791220247bd3aa7e0946608886659165d30d4ac48e6c6ccc142972b89ef4753bdd41407b3ba6f7687ad06e52d55f9d87536f4b7b5c39ced784b035d4eb9172540ef067fc3c453ffb7135f229deb09fddb851f5d902ca62903fccb0fd04aee9a46f389e1a672fe8de74139756ef1925b9033491325bc9dc2ab83e77b1134b945a56f0925ed5fd92449bb2570628a1438fd44b2a60629e027689ebbd5bfc8b93eca99540a9f74eac9a7230199d8afadb71e07643b4acb681927853fdc27d16ee8bc978f57e0cdf5fce20553caf2171b527180fcbd4b5bc180ac1de8805ae99b510f85311927f42d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088ac7696d4946169de89346ebdb907c5b0f047b987ec830c40802b78d7ce563615f9c3746e731186ce12cefd8cb3d39f0bf65729bdda720735b6a2fe6c915996a57740780878be891f39431adbbbada983d1ce72b1af2aca926c5f8e55afd5a1b88bc2ac3108a5e6171b8e2227c4bbefded8e6162c6769fb1e8da23652c93ef6113d5389d52f0b80033fef5fb8d47d67dd19ae0411f7e8dead999bd9eee956ebc2a495d0a81f442587479208d0b36d27b36dbc102934529bdfe16a8eb49b01a3fb23c697f1908363181eb7cafa35b8f039856aab6b58f16a5513e6c1a4d74b292b081c1d9d587e4e02d1353ebf876db088dcff3879566d9b2d3feabc57a9377da9955b555b25623659e6640ee21a732a76ebc1135b0028f47bb08f165df932cf42a09f27d5ce9c451b5ca41c34cd0be86d122ffe749cb32bc7faf8c42e8d781e600f3a646651f33feb02a363300ad1bf92ca3c00c7166d2e6ff706cbddd6e3711d5736ca22de2bf071332419b1cb666ba8e24208c45b5a5feed930c7b3a78232f4ebb28e1b0e3837b6d2f7321fb72888e12519d0db1da203dea04e0a7e3f437ccd6c0c6175cf407cb41fa283d66ad932d56c14798b9294c62363d27f2f66b20700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008aee6fe66557dbb643adcb10fd09cc24c161c01a1b68518436594b0665bd59b7f9cba8ee41e2b79766baafad0a08d0638fa41caeefa8955a99d14ffcf51a74e41e678ed2bf1114711a4097655ca2b1d58497ff66fbbb1a8b523a5818256439c8d005c17c6d71b605f64f12ba8484c24add9b4c9b260aa161f5423fe1def62d0d941fa3464605710496ce63ef10bda9066a9d711493674ef073e427b67197f1bc2e48ecf6586745c851c01244609ea69d799acc33c061fbbfbf255dbaf8b1b3c288670889f6f895bfc5be34eaba17c930f5026805b201ac56bd7bb4fd6b4d862ea77c8648178b0c9ef81df43cd4c3cf2cd4465e67fe040968eef75a75adeb179b67cb665c63ff16dc40c88065ed0a5653928fa05459237927d12877b6f7825ddd417dbb76dc238dfe9f72d3e27070423a722f2447b60dce6c45efc4f7bf3b6f7ad95ded983bfcccb02d6f5ef86e4df3a8f93836f9187a9cfeb0b3a05ef355398c5376706cc1fad273e6ce51862b40d05714195eb7c75f9f513133505e9759a24fde26dd9cb23bb354bf57ab98aae6fbe75f1059e72c50f9ecca7d46dcc4a3cf288446be3bbaf673fd234962cdcfe23d12824ad1ceaaaf79d1374719ca9fd7037d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000812b61032f9c740b67dba29d27267918750b0293ced28a042facd0ac1a438344b41ec0d05627a6789072fc3368b9ed50f52a56cfd901253748e70603b0b464394eadca7f43282cec79ea524b525312a7f85dc1302cfb44655b4e5c42fe47967682277c95710681ca6473b8752b567922e87fbd34afa6be04b20c4e3ed0485b1282c12f6ceafcfb35ca302102332dcbd9877c4037ac324cd3ff080ba4c982c6adf1bb1ac0709174d322758de5682b765feb8beb9b9ba05df3aff36f91cb6e661ff57f14bb855982193cc8beeaba791e27be64ac715bfccbb69e48eac47a9db48474c303795e139cac49d7ae036b07a3378191f06c4da787b58f8d0712b84c14d3e3f0f082f8670bd654fbbdb0ff61e829f5d9ac6caf8beb3e2620728df84da2eede8ea6cef1416d8b4f53fe8b82250d1e877d38b115bc414daac4b1389dd0b3d80cf3eb83450e4fb40e50d919065344d98f940bf218357bc2f7e5378ec680aca79b78923b02f882793bc357eb15c390b997273276352e12da446617f6252469e02506551d20b612146898c400839c5aad555e402044f00b11cfa38cfa470c911f460bbc7dab636cea211f4b90c142c1ffc560ea104ee0d3ab2bf69d142324fd1e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001de232cbf145fe8d2a573c611db39f5cafa26c46eaf3e8a7f1f66a96787149f82971b29b6f2d10b86ece9ec9381e081dc39169e8dbeefeb9ca8b4bf4d230b1d43a663309c8bb18cfc3b4ef8938349b624590404e96c0411c4db4a7e186494c7cd8da4d922ec6abde6d2d4f6b1afc10596c55561358d3db1335887109f2c69ab760d175dea20e9bd296519bb538df7ec2fc9dfff0966ef441cc2edc7ce008c7902d46f9b825feeadbc2bfb4e05cb9a9fca729cba19051fb6461ff7fd592e529577704bc1a65b6907f4799233ab4fb112d30de63c849724aae4b2f2fdb1dda4874965572997aab6640929388d77daa313fc813f9d27a360cf463fd129bc29e8767f6ef4896521ee9c9bd16d423532d065d2fa74966f89f185cdc69ea4d30a26479f3aac14d7b9c2f76a9d3eafb85bfc72f7c201e7899cc855a2b00d9622c01bfc37a4a887fb6c0e2179aec630fa8ad16e4b21dc49164be1afe840d45bdb3891cc12892c153c0a9eb8ed9b126b6a62fcbffd119336f6447fe6949f51d5378805bf90e985d31900c3d714c92cc7075b951aff5ad90c6bb47ed5befbbe3b5e8ee4814836f2917c578f4f1e6fd1ee00c9e69f68ab3083044cef9384850685ed57c7766000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093f93c74b4977cdb12df65d1fd818d7f0495721c975da16818292e8f301897e8863ee25aa39e3594387c63ba4978a8e53ce53308d642ec95eee96fc181d7a16cbf4aeb27b220f8d7606fa3e6d7cc9b491deb6347e37320374892f009f2e483e81a05955cd24cfe1ba25efcaf4176ecc1697acbdab40792495c10617cb22ac14d2a02b7ea7f893a8410341c7ec182f2492aabdf69b22bfe9390941f407e6fa5b549dc54e5bef7a694df9d282ab64c9957c7797ddc3469a762abb25b6f70bbe6d16466d2ae42f51440319d6352d3760e8f4267c9adc83c553848cfbeb69378b63a54b5ce2c47d341e97945d671f66b680b07a1c690059684d6cbce81f91b6216b442b52fc374e58b1a0449d2d771412ad0df024c852d884d958189e78fe88d4ab6860882d437d156f9dceb2ba0b3ce355fe404002472c1595c7eb7ecce84b6a97e5606030acac246dc191ec1557d06dc717b01eff447b23d9b13060e7b894d0628aa2bcb918787525787be7b46d5655ccd8cab73a0c69bf33b9af02b36b41897ba540ceb9ad24bf23317701874077c2915c5014c5656cb068bbb65d5947fe6edb5ae2e883b45229332815a419608e448fc5be48aabb20f417526e95db1883a9701000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088869fe0668f0d653e7bfe0fa74a5716354464680b4c2b40fefaad2e0a433b190bac3eb1ac2c70e1dbf057dd01ed2b361d129ff12f597fed6c540a75a7bf5a0adf052306caf73249783a0b55f57a86394e01c139a9db38c31740795bfe6240a9fabe44623747e20305540190bd278e7621663d1a5e157f53d59aec2b90e07f8a17ee1a86b4b7853bf51ea15a265b1119e9490691318826910da288067e853b7a6d1c7c75952a1e7d2c2f297b1e12d23bbf815486937c85f04a9f40e44ce6c5ffae5a713d3d52b81977f4fd2e49fb65673fef5f062940398e3855dbc1466730d697415b1df9a329e9f5119edcdf3018ca39920574fecd7a772eec9b3eeb92b672a5a8669002984aff90ce7d3fcc99771a5138432fbfd95b97c61d9fb3cb25246be0d060f73d7975fc27007fa2fbab9de0503598919c097493cb1449a0ffd217c1a2ceebc7354cd6b03a8d2bfff108def0a794b35fc43db55f71e35e19890c5f76de284eac0cb54c3b04a0ff9ec0833c65d278ba762c36440d0c6a0117c3fad9b97c663eb36242247523a261d956992b787a6f33679f72282c3ccedde14bcae1b998e2365a702f8890d928354166993dc46f74622e52aaac6f7f6d824902c561d100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e5496e671f2b286867cbc74a34cc2afbc878232b54f84ce5680e47569eff00e7d0fe25bcde3f84179e8c208e158057b5daa97c5788027d6bd722cf000dc6aad1c6b8206ca902ffbbc98a6a6f466605916aae1b549278f2a5b622ba112f4b610d0fa31abb031f58a59b0d7002f9aad1b71082f8e3928bd23375ab6ae5da9fd2592c99861320e50de981a24f7d5267715b4574d6b9f6c92e5860a29959905124cc6e77417126dd88461b49f1e9a2d9882ea16be830c897da784a49190c5bc2e46b2d952943638f2baf6d1e8d39d158b93d8ca71e9d62bf74765df141ac9eef4c8a8c10acf9ca2639baecb70a84a5aa696588d85c9f0f8dd4ddf638fea5fed07fba745ebe008e0438b530f4d3d04ffc802064a180d38fb136ac1f38a35ee8e4b5501755e7321d372be8ac7be51082189bf4a20af14e3c4312c57093f2665ad6a6f8713baa03beae6c9d046243d16ae6dab6082281dbe82753af6b28666c99793cc5ca8d9dc5b06c27347769edcc7c0e27b95323cd478307eb6067fa7bd7be3d7adbdfe7fe0443881699d9364ab63a3db2fc5d63012b65c1114be5d10a20b7332305456c50c20781e8b8af885e3c644d37954747d9104775a1fff1cc91233036a2500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008354b39e8de133438dc5019dc3c06302b7995982934d7391c6341a921cdf5d010dba60720451a50f35573bc5c6abc2e0719167daf3589fbfc2c0f7d99a27a98c078a8a14391cc6dc1a1fb362c9cb73ee23be04bb3adef493ad11de88e544036c3a6cc3a05452707176880cb89b10fbdd1f1bd15f3a9ad85b4b634dfbe475f1ec54d56f70845a0d48e1b1dcab5cecd1edd47026406136cfc19ac137c0cc40e19a924d43b1e58c4891237213214d2599a7930bc8c7c884e9fa9bd2f16125c05b4345f0fd1968362c9444d4d9a0722d35eb1d7ffc1fb4ef6553a214a8ad83a2cf94b1b5679ea8407ab97ee593fb19e9f89ff71d4c84b0495751b47aa69458b7bcd4bdc14975068e3360af99443226b5bf4400fbde4e2168c04bb3ffc92b81aa670cc5e571975a5472f54e1b19c648ecc17506b916b14e306f9f13d6020dede6ad8e9f7fc590153915e093aaf90115da32e9443e31b1698ca5a1be6b30294847c23d6d742bcc9f539ebf1f238d2c760ed040fc58574c649ab8ffd40703caec9c2ac907ddb6754aeda243d6c544aa5f743c5fe6649d9e78c7652e1098ae311a3b8a6a84caa37b2a7b31656cda27c3457bc9f99994c7ade2fcf0619c7ec61197c259540000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000807c77abcfe1e5acdc69f8eb22f3df84669e54bc3b6b591858d310094460af7d50235e6afbb5dbd81a2e7e8a51a24eaa02a0cd97ae5d9014fbe84f2bcfc162943e9ad61dbb652d9be654404207c1cc04afe07129a0906eeb15d084b0505d9530db7891d264d28fe5e34d482b9936b2ec2671462735acff717c2ea4ce0ba76e164f60e489e53b5c2c57a9069f98373b546b032d5f6e1a3874b28df6076d1d9ba6784185e58347feaf233adf58557a34ef9748a812a58c8c2923809af7b89f6ef85a448a5ad0fabf2e505ec1e9b0a1683802bb01ac68382e045b2246fa7e42f0987172738c30af5833e8d878d2c43b907a7044958af603ad591f73f4283d9b9692640c5111b270ef55ef3b811661f7a4c82e263f7f295fde04346a1c8baa72efcd7a143c3789b6118a21c0f9e3b8398615a9ed2bb61d4f089d14d61c7bf0243b8b6e172c41495b64f73c6e12ce29e8dfb5e3030ec8d4696f4c75214e8408739c8fcc82610ea8ef18f080acaf6dfaff0bd528600a3c280fc39272c65976509b4dd480f44ed8dc7d8deae1ea36a4dd2b6928678f476a1dff34af4e756940a6ab0b66a6f2e348b0c5ca9db7933f78f7dd808e1a29e7686ad9f2f5ee4be908bac64f9a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b809bdcf79e6bb6f77cc416614ddc12a032661a463878798048d72a87b22dcab8025f419c3578ed64f5dd3e2bf69ac0536568c82b8cd2537abe3238d73c4b5ec6470ffe6d1298bbc725c9631772a9964ae49080906b56112f93ddd6f649c636e89e130ce4c86ee2bb738f85fa58c6bbe9b6e209211f88cece20ff2b95845861436b2f02f5d78521ea141b6129bfd3fe1c3d63044b4d499745a6c998151337e781736f9c7d5f1d5afe46101c2e13f6cbc9d56dc3e38dbd7fc741e60fd9440ec3ab8eff4789d523894d66f56895c175f3e11babbed895655193fed8fc7c2e3776f1fef4e1463c69fdcdf2b158fab23b1a410742f8e8f4d2ce51d5d49afb8e28ffcb2978b2d0b35f4667782c932f4fa3a61b8baa6c60200b6e50cfae92a907e5c6d23d32d1c50cfac7432c96bf5154165f4aff9ec9471ed49ecf0121a5bef87aa0ebb3dd0291906d2775bcd81ffc8bdc34ab5645e0db8405b31ae7024d5bef2aa3a13e5f235c151fa5ac40e730709dc910e30d43ffd891cc60b3d8add1894bfaccd350e805390ea98a8264c4dd6e4f55ee9b76b0c6b5412043d74d3ef72eb530d7c1ce4b905e25f344315fd370da23ddce1aabdcb9e286941b7ea1f0d65a15556d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099aa0302b8dda310f59fa3a3eba98d1941729462e50d99fbfdc3313938953fbe7ae18bb89f64a7762a1989943df28aa5db58863f636aa3cdf94d01496d5fc0a1e5f28e03b6dc491720c9c335f1f02765b8f085bacf39128c065e2fc6d3e947b75d3f6b3f903f6f05526168d160fb4117cc98a37654dd678e0b7af3abebd2e423eba402bf160c4db45d63a6a1f824c31eff1c83b9d30cf3d8e2208f7fceb90db2c67c7a7eb47043163ff311fab7f4947b40274088b34e9bfb1088632af6e9dacfb9fea3b0e6b7a520bc59bca068bb8c243fa57ec8b9b3c566009a9227586154b2eac1029140c797e6a2288e69a661f98150965c57c732669a75ff69f82165e525ceed7668837bb931753e921649039425dd1f7ddabada6b99b31f97362782079af8771a14be555eab34b0415304add8258966d61c9543954d05890c5625e3e9fcb5082021ef1329f54dd7e4e104f2210119833c38f0802a56887c5ee695e99e33d712563d318ac0e10c724c7d9ba7aed1a4df6c4eeceab3ec61af2943de3785d2aec80ab7531c4f35c0cbdf9cda5d766bacb1db8258ff56c032b89e6124af11a6ccb9e0574f33e4422408156168b3e19500968e7b7f21711b6fb4bc67d060ff8b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af9b8c7f0b41f22d5240ec6ce4d3da5a5dc6062d0f7a0d0d76eddd19cc550379d37ffe81ceba2b573ddeb141ba142e99e85492d389cddd486c3ff751c72c6dd2cfe57525c46a965de646865297cb643210856ab0420f70032552cd3c89a0489715f1706e26f7e5d57ebaa7352b7320a78e82b0b66dcc84782a5e9d7123f37eedb2f7c0d54af9b66d4c0a352499ac48897f913aa5190198739538ab47de5c0b47cc2fdfa4e02f2dd7999df6ae32fd05530337e7f08b8c3e8446f5083b3c2bbad4e25c4a4275c6f10d70cff72663479590248e3aebadfcff976d2b315c19308f288a8d7fbf7c3a9bbbdd3dc8d2036f5e3fb6a8099bd16bd7092b584b8c84a6cc715a906e31663175eab020a1dfb60ec58e604a095031ef2e944799f66f7b9db418d32cd2bc46fb2185086a864506bdcf56026495db3bf6d65812974bfadcfb3e01b57c4cc3594f9eaafab692cd2611d7f336c00b33dae31a816ae986ba3a04a9e47ac88ec67ac49f58eb42d09fda71b9a06b9f6828bd579176f1a7500870043e6e282af877c0101ac04461b74d623e918d97b4b9774ff852e70baa274746a6f37f01144da6ae4b854cdc5b5bafe357f67391e6297d1e38eb60ad7c7e607eb01da000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d96419307e35ce8f1419d51f39c4ca3da70e3e660768977133fdf0e2f1714f0de732443ed148cb4057264167d4f5059185cb3db16a5e80e80ab93fece95e676ee59972d2aa9ed5a898100bd2ca79195f1f915d0c5511c167d178e57cdc6b714fec1e3e587bedc1be8a59e5828dae0868ee4e4c8731c832e46028eab55cf7fc6dfe49ca1af50a772584ce677c71a7ebbc255a712d2480f05849cfd297ed5edb6103c22ce7221eadd04466426fc5e519822fe436006455a4c0198dcbf6f2ede29023c15d302068f1556dee4d6c00e7610351621598b26aa1be6d4b6d6fbbd499fe62ec96e666a6ebd8a57de4e120dea4b7142d8745868e7b0c40d2adbee731a0da2e91de61a811665d3198a523e069676db3e7bb9c6ff2fd21ed2be71da30e59613adf3beda37690196e966fa28caac4dca23c7d423649e01edc6ca77a99f65bbc0a8ae29417b5bb8c56aad054fd83b114306fad6777281f6f3078b362969074f91f46e805642c950c155091cd251f622963c059149887a470ae3e7ebf4321386df48c4045a375ff125b6b52aa51b2c0d6ecb7974813113a4b321b5445cd1f0f2efab69b67572acdfb98c5905ebbfd4cf2f04027d832de8c965ff535aac1962aa00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af5ea349dac8fa8716e17dd91f1f9e593e8582a5b33499e835ffccb30d478261961226432384e2a7d6e6a3312cce79bea99df9510867bf31830121dc7cb2698016a710748fc097bc8bb1a2d81e12b88c51dfed53469cfdcd6506aeca87bfb793f36c36e5980b51e17c21dbdb7fc07911e997b73f63bcc10e973e8ff4e556bf20c85b941312a652e343f621ccd8c8fee0f8744b907d43fe26384bae07c6f2d9f400762db5e19c788a4850ef1f40f95a39701c94a39934db355af39694aa69e24a3559d494916be66982781890df506553bb840cb5985bcd847675773bab0a36c49a2b74f6b2c44efc469e16efab39d728d751aa9f53ca56745aea1d6755c43cdb0afbaa92b5c512c12ee2a68ba919762357717a9ad8f9e413a8219028fb838b9cbb0ae04a177927886825f9b4debd86d9171c54ea84ea79b158214920da91fd9a5a033ddc81dcef7892074e938c88ece64433968782b103d09c5f1d0dac63ad11e64195b3895ac6c8658dff2298f717c7fb60e8a159a5795c88386a409e9ae20e63d425dfe4bb9b39a53245a32e3d73c5828eca2b95512ebe81362b313f20002df1e74195cdad1ee3a931bcd1962d0c0f066d2bce98688132f314c4e70a97194000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d4bd07fd5bdc9107816ffbcab19c712fd3163defe2ee95e25fb20637ab8e6b437510ea31cd517b623a612e8db1fdc8f150e0b798da42239e2cb8ce585ac7b778657a6f6c9f0eaf01899b7f6a95e1c933fbb033757aed52907e0552e26cdfea1069b3046032b13eee4cd3418d02d78507fdefe5dde6610a3491159b01e1408ce82af0879ac820091c91e422c1c902f1a87c0ef09f0bcccf4b8ae9989e8939c15b0a8987996f8450c7348efb6194974d4e83544a89fbe2b88da07f3b139cb3a6a0119110f6d355c2a0170baba64dd6f5e30dadc431c8fad629aa8118b170424cf9539295887a7e589b6e1569d39a98b805571eeaa12fd3bbb0333b6a26af67cbd127829c276f820fc5c39de4381e05e3ebb4491b4572535b38e103710deac741b57a187d0e91fd7e037aa1c368bce44209a25002962d0c384a63557b733da52e6a8f25f44fecaab1d497cb4ff158c8dfc398bde1493cf851fb731193d9f8a32ab7f2a051a9e140f181ce1128d030c2e331a27b561d97a404253a27993c1503a47d1849b4ffaef369ca5b3b7b7ce07998251c8fe644e25522aff3ed22df63cce8e3bd09d3f4011886db41bfd3973494c47d8e69a220b6f37e0e326f769a1a0948000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096c3bbf6c483cbf0dcee01a312665f65dde34dfad923449182240f73b47db8e3c31a4057c7a146e51294f5ee9d5cbb16c3dc395aab50de89622879ab9e7a84611b5d65ac805fd30f6fed2858a84d7e29a081af03994a6864cf656e4d427720cef8e7321d2d49d5dbf445071671febee6ca0b4d8e7a252fb4d503aa9733f1b4af2ff07515ad3d1cf5a6818b6c9264289e82f3252865435b334fb0a1727889fe3626391199c88e8d822917c287d8c7de5129ece62676326e36292e5c1389993d8646428215f93b086218e774c5ed3185041585e0587f0e30f90d5c55cb828afa5e5a0002daa3d0dfa59e89acb486ad0d567726d7cace775f3659a7502708e38ded5005aac88fb1bf69e4bb0d51052ec394e91a09a3742417fb10b3eaa7607987b9319a48a66d7463228c26c4f6f7ff7a6c66411deb55e48134d931ccc041dd1f74c6a138608e34adb49c0816e7eb7038a6cdcbe31cad181f69e27e402017cebe8b9a3ecf54e6898f2113611f911689126053f9288f8bce8e3874a4a0c0f4cf040ff38193ef3244eba719bacc29ae1cddc639904976598fd6faddd8391bfcf0d66be25b852141bf96ddf262dc1197c20bde55e09063159ab5ab148fe7050acf47b100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e20565bc01f9c264925bc0e7b8f760c15ddc5b25568c6b7bc0f292fac7dc06d55394d68087ec727a62405b783cc8018736f339b8cfda89ac79d57cff6ba08c6b37aff9ccb5fce64a0b4813f86338c38e2472897ec7364fccefe5ea2f5dd812b50863f11d4e74a39734728145a465f4dbcbfbf1591b2901dd4c082fbfa7b2134fd24fc8f807a296a6a16c7e598068945c70094e4b55bacdaa2a3eb4ccd37f7e594ec344c647c8caefc30309de30b7edbc8b41e178f23fc125fe234a48864b59d6dd7c0bde095e94a24a1eebe883664aafc64843ac39f160d8554b77d8cfc830a6b3d499aaab2632e1ea00cdbdc186f5f4d373ced7efe839141d3d08e394f9ab2378d9078f82689ecfd29057202b8726fec4e401de138213f02a2eae936a94029d8c0bde71ace7a7e77c56a18fe976405cfe2a59dbf90861f958e042928cd9159e7cf58af3a0f27c51f12a050e37f8a97aa918e9d771bc38cfe638c01ec4e1333ada1e4baac964bb70f495433798447ad072d7059d3f8cac1299d9eac8510bcc9b41af910ae48b30c1115885ea11f1593dfcfeacdf48f9144b0ec57f5d7971cbf8cc81aa81043bc80c889df78859f7511cc36aefbb11568e56f2f21da290f9ceb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9ffd019c10579fd09b7833e1e11cd84437a4d00d334cc6ad5c440b666220c9a81d316317cb35b13d8f86127de46c54ef57047f56682d0fc07f364be56b1fb753ee7d4db7062faf83ebf4c29c637870da0033f828bf08fd552872203ddc209240f34354b280285c826b7b96cc3e4a7b9d03ad7ee76975d8b0828bcea7f9ee577680ec7c5ebe134c8a34063d93af590e6f861eebece054eee78bbbf64ae38542f68955b15ff38d5e48064861c36d346a7955ed110dfb4ed5210266c621d65a52bfc7e9d2762dcfac575a291a89ed8fc849c5599b5145727c4857a5bdca5a2b822c8d6d2b35beff5bc400f562dfe6db1ef685dfa5a1247abc3de8bf1bf3455cd162b30bdc3f588d2fe9f9b2ec082a60ad78c80a1c184bfee9c20c1c7ee39e923b16db35ce85d481f7373ff782683cb8dbf9ed1fc98e08a05cd607babc9b5d3b0ccc06dc01b80a58c17cf3e7391b3ee40994a3f66c0e2706326da07c3e7184a2263cedd0556050ecc893dbc5fa3c28085c7671a77286d5a16191cfade49c4b01c6a000ec8686230868652655fabb92f5a4a05ff1ef9c11d30971be4dd15a6a363f63c8ec34410fcd95e713d337726cdfb4de9fc6db57884a3b8039ddebdfbd93dca00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a7c133a681a3264ede50f0201162a2005aa5183909a22a9777c6e025a080e95443fb03c8023f6bbc4399a9821e7613834a2584c800ff0e6657a5034d32c8c5f974e96346b97eb77f67261e734225953fd2cc441f93d42b7d4c245b836e4fd04c9d290e3109d21965fae4a549fe9acadf0a98fc045883d44846827a268342373b1765f3694ad025d168a5cec79eb30e45c090909df9e133e6cbd4c0b26441931469934d9d81192d794f988bde5f4f89cb4abf40afc36772dc1b80e6907ee5d4e7fd398f6883e23f5dd52c2ca7e77a9f08ce9c90ffe5a1f285118ae008fc17b845f1ada051b0e27e9bbc8ebbee7fdb8ffa0c78e50833054b988f39f3c778f6a88efd24ee5bccb561b111510ae1488037f0b66add86fc326fb2a30c93bbbd08b1ed37e628518cb6de91fa07a97c5d45e71138a923268581223e0d94574d40211f7c6eec219781c3b1a2cec23d48c7da58615ad63f1aefd3ddfbdc6ab833ca4798fe49014837c25d1bbc9b71fb2763e851b197088b60068650189d365f400411f2c307831b80035e26a25796b63a07f43a30aa0898be9d7d801352507a716fdde132c36180e3ae52d3afb955e9e305d40b851c0ec3d7b7fe4594ec8ff6240f1e36e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f286b61530575aaf23dd0692c655e7ecf63e9d37a8102b11fb461a8bd88e919fe6168cff8a9cdca70da83395bae781fe37cb6b3cb12febfe4ac2847f8b3a95f1cef6ebf9144c2ab12c88672a61805df5ddcfcfd49c86233613706a78a4221e8fc526cdb584df95e9bd989a64053486770d52206a467e2f192fbf3275cb19cac29b975c3ef8a88282087afebdf8837839482514d5167b56c899837cc0b3b2595c638267787d38aae1f148180335bbe0678a534405dcc33455ded73c56a5f83283100f95e6da94fe8c1b147baaa61069863fd25751999f32c76bbdd02802499e7845bf206be9ab77a6db6982266754ee2f244f943ccf3d41910aca68be21d42b4dc0d812165d6f9ad3dda30e03c5bac23c92fa28ad8caecd1a28ff670ff514a12e59089c3ef685be1618f0008c33ec8089c7cc80dd6da25511f7ca6786fe2caaf37e8a32f0df8dbd507d865379d9b31074cfb798c165a17fb96e37aa44a7496ce351626e9f3d76a22db4f1e4759e278c6a014b023f9d34c93f408c250e5f8a5cfdc1a0ab1036a2bed10832c7116ac955c0a3cde7db11feeb1e27403b66a9bb2e558a4304bf92cd0e4be80711ffd646e094be4e6acfebed816eed7056045dde59700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a509cd98f47f1c5deb287d94d659aa58bdceda598f23d20433d58a305fb2479198a28149cbee195a27063a8b65ca3aff9958f5b775a9079f840a1cd9c704dcb12e9579095b8906cce7bfcf8d53a23ae47241d25e3cabb10e69be7b7c23f2601b3d839c016a56ffa9ed9ff737f7f7970bc9ca88dabbd72ca462cb84fce61528333f938a77dcc4a6e88e3e1a4507d2f0511006b80a67a43257ca675d01da515fabe03f93a5f821f843e4ed6fd3a8ae59c97ccce77a87ee9e91063378f0c0d990a0cf7a54dc5235bc04316740bc03ba346028ed2c0558777664eaeae1ce78b63531c3764a67ceefc829d9a29855d4eeca524f6d3ac48e6f19c6fa0a71ed10ba110d7f9153d7c94f2d82a196ac4f0068fdd24d966d82ce05a496131386e8b2f47ee46dfbb62261306b1b12819c2c084ce392bf904adb0731047abff098228683a0fbe3eb443aeed3d015b0645b54cfccbff2013c896fac72a5364b1c7727cebe50d429bf6e26b56893bdfda051f88464ea89dedf303222adf3d21f50a23f599d6c53e02fe0df301e3e62ee43c331a92de466d930801d0044c93d8f3c492d36354be44d89e95cc3c29302dced4ec5273dadbb010000c4058dfb85e9067b23c88796300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b68e4c101954098b076df664b733e5355b0de63015973d674cf22505e540ea0a4f263f793e94e6daa5dc75e51ad30eaaff7f82fab69ae7dc51611698e38ad1fe96b8ffa756a83c4ba8b3e83dbdb8bed5bcf0d0f9e7334d08e127f9674c6ebacb4068e6412ecc4b6c590377cbb1979cd2b883e5d109b72324c316db6f136eca676f1e525772ce2da5c0326329abf601ef42cdc8b6741435c52953a4adcf391b308466031e73101ce7cf7ac7a1e99d02c79b2b964bd6bf2b8810b0bc543bc32be3eb6ecad98fcbb8c6b140757a9f6eeccfa8022086b2a57563f30ac149a4fa0f1ecdffed50f9f6d9f5628b7354ccb78c7fe57b8fad9e1577e286dc606d5a2363a47d45b855533c18c60d7d7aed4e4284a7350a1281b1de143de85698fd965fda118fe5a06ec4b5fa5d34f62174a1d496bfa0ce66fc598bb159387b01fb3af3d365dd3e623dd3d508009910a63b5f0b05ab56e6c5e17ff6b3c46105fdd0f00e10baf9142ff42010c361f288ccbe0c19f8cc6a2c7a097a85b470df7326dd9ce5c338a2406df3a01a88489449dcb418fc80a7f9c68d6c99ef3a7c6ea152600583bca0638d104df6ea81ff9a13fe2ae4bfa2e11bb2e70289265511233fec1c2b210ec00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e6ae8a4ffce3c0251a8b6b7af8f3e1ac5a1ab571407277d28f26422deb639d6306e876c564ac3b9dde2cf8541c62d165e4e0b8711d77c21ef7cd3fc74b5609e6191fbdb2211bbed34c21418774d6267384853d6f04fc2d3deff249c856e751602a29f8c9a19a08de0cc4bb0047b7877b6424d8bfd83972903eb866885d5035e2619760ddfb69109947f878dad910d978a11f617b4141db668c01ca5e45c2d0a8e9677eefaf6d6c815773bf9c1f3d342b9327350f9fad96f66fe94e4cca3a9889c7a6af9ee99dc01a361f5a2bb161a69ef971d4d3934b60f10dafc8933c3f906316639802306732fff878cb5a0cd4d6f9e493cba338f280f86e4dae4d4a9dc81c0e4796ea84b6f1f6a3fe580117503234ec52a1c7d15c374e8ac67ccc28470f4397a255d3523b0cc0d4e8da42e09cfd090ec00030e78c51802fe06d4c4044eb9b9dbc736cd8520828ab2e24b863bdec4c34ecb937dfe88d5508c6d162da50d30f604bd6db6898415c59e706b846640ec665fdb8e41d0a000a226ac43361573bbc4eb7ac8945d4a2b75b9930caa4367c1be6382f3a7297e637a32ee57f6837874f0d0cad692e9a5702183e93936a56ee1e613893a7e42fa59528ab2b0d4f2e55c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e31afc0fef6ff3d5a2c245f366d4f631d2211b26120a2909d5d330b178cbbd16f0415460ab4f0af8be764e06426c8cd882b9f8f973f6e535c08515671ebef6ef7b39cd1d43802196d2528edd2189026b0d0434cfa468334930ae0edb1eed139f96741ee3d691b2845e3bc9bf716672aca6ff335994fa5df25fcf6981348617c0d2403a101047543296a7ed2945b565320d351711175ceef4c3666a15c3ff50676a2c10e790ae26ceffbe0f77f40ab9487e48d247507181cb871f65f173ba63af295c321657d772f544bd25239c8f5c18ce66a37354443938644a5f6cbeefafa0e53f9d70fd7532cfacff18f8b528423c319da03f92c0dcf90a62904f5310b2243bb21799f40666c601b3f00769ec36f8d346ce791d900919702f7696311d939a66cc96a3628d48846a065f99f06e882ac3e4952da91d0f95346f8a4e945fe2a3442840866515558198f06b9e3abac99c84c20f490375aee4733f60e623b0d68d96d9475c9403cc404f4b1c849f5847622e1a80d2206b7e627ed2825c9b04c45ce91f79f9904a84f91ca7ed44817a88a721cee5b36506d14d7fbea8d63f102ff709c1b527469e9ea76c364c3750a02ebbe199f310eb09ac0d0da688dc14e34c800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008903178bcb8f6255e9f3266e68d5dda45ed85c3006b759dbca9c6f9e70be336f6eb3be11bb887c08e171a3b5efc100294d9a0e8e6b6e65dd17d45cbfb965a276851d9cc9ff8ec72bb4187be6141bd7f1bb3cfd6fa695a433a829d03f9c4afc4f8eee8d75b1da0aa78f0eec4f640549aa609ae8d8bab2f6c55cc8693f048be79a5d3750b85c9b656bad27240e5f104aea0fcfc50fc20f08a2b2aa973ac31d67f32377e240b4bae6a6be70b72e8df7a01709ee026cacc5cb5b9946cbb5f722937a219d84817622a55487883d492725f9ac57ebf0519cdf0504a2c676a00b2d116a11d05a2e3f6da33a03656f672c5ba9b3dbbee2bee6df1b4f2e7b553eadc97080df4a53909c201aa557f58d1a35f3d9a3e61403e22fb1de416d5dc8f9d353457c514b3fe38ee7129f3b09f42277bbe728ee81baa6711b553ef62feeef15ff875dc5f4315bac63af954e5caa150eb69edcf0c4c4ced9cce7e3397f32d6be7412c9a76c69aaebbc3ba038f9909ccc8e4b14e4c611eed962ee12f925fb72c99f4379cf2d4b3a6fa4a137dce8cf0746a65457bb6e9aad0552038ebbc0ea2e2f4d0227efd69668749d1f85baae850afc1f107127488aad7fde6963f808116fe55082ca00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001af16fe5201e7b8689ac20c9c0a1b33de1b64f88f16204a71e474a734d2415c026ee0e4aacf82041631ab717a09468fa46860ca19ff8a296b8ccfff59f7b757b2d212582a7548c8dc3bf0ec928a8faa8ca4a5dc51597a68572a22f12cd59fe018207b18e342bccca78e4818999b71a87d309c3b5ed399d06c3718d1e928346ab7bb145b3c29759d74173c4460c1b004386a9b6428a7d38982805ea6f384535bfdbe8f32a2ef77b229f2fa067f9a15109cfa1b42b4350f0f7e4ae9b3ed007f9eaa5219d2a326ed2720cf26ef82f99331620da5916b1860f62846a5d0c090f6672ae8666f2479c8bd8ccd1e98d55550126a342a9fedd1a2ab567dfad6c709763b5b5b3a35a62b3a1ee64138d8ce437473aa0e8c9b7cee7b306929beac138c3d7cde15b6732d1ff3410854ce9c83cd1c07470fc38f197e08bf88944f37345776a5eb0a6c456c6dc44af0a576b9020e65b475c08f345831d909af40a6a2fd05d614ac2973d70c9fd6c757a07a846b5e46601fa0b839064c3a9fcd6bf47817c245f946e15f42884ea1ca2d89ad6ab33462f766e9a3127944352508e31d04102ec94b587ecd784e48860c726ade60dc2bddb344c7998060aaf9b2919d7ee6680e3c9810000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000210096563a74853d789506a24b30ebfd570f32e99266cf61c855d665118baa718d58f439df7166aba9de6a8af4dfc22e8ce602798f832c822e161fde4722a533734a195f0383377340065488e856d01c2686c37d3e378b9f9ba28c525723b0159b4388a0ae5b3df525977908877277ecf87490a475b796656153d9aaca07605f38bb0560cfdf9cf2cec745d46ad636e617c6ff3db91be255208090619b2529e887154ce0d269156ceacc095a05dae1f8a7e850cb66c55da055417cb4391c2d148a2e78781da2216a228fd2ffc96bc077280b980be57af6ddf3b990718ee06062056f47cdc2c2508060d468d3034bd3826248e2db07a686ae89662103479c1ae710943f8e9a496b976a91002947d35b968d5875972bd530f653cc676994a5933dad9078f1f9b70f6d861297b67563d4b1bd86b79b8ced7d559637a51359086334087a3b6e0658bdca86b943291f864fd408fbb7f80d27fc9d52f35929b7ea9744dd291c4902956940dea82129bef7f4fdf187675c0a3d85a673b1f390e8d31ac5eae548b48cbd38829c2cb05885cb7158b2b0d5acac644b224c440fbbe471c2653712b8c9c57e07b4eee99ef68fbe91506fd1cfd26197baff9219fc637404ce94000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002171c13e774fd895c34b2f99656f47f820e28a654aeaf2365766ffc074c8b4112c399a196f6f101beca8c15b0be06baa7a8ccd3f02d1f8bbaca412b61f47183a666505769b0b258d0e6519cdf85beabeb389d0eee40050969beaeb7cb96beef9ce7b6ca6bb326da7c3f45666aac1bd92ea56def9cd71975264e4140c364c6f841b18ffd352599af4c0ed10f3b8aaac4e667f6fae5afd77ee27621142a16f226c0fcad5788afa0f66aae171accd5607aa02cacf97fe3cd598bd38b0851c4442487bf6e1a4ba69fe138e87a7c2035b29cb6839926748b1c6a71dacc33f14ff0ba8d37d5589859702c65f70d461593385e93d4fe059dea4f773dc603f5ee415dbd994a31f5d70d33c461d2412015133d4d15bdc3a57e7361c59ea20f8f28ae8cacd4dd4d1719ef9625cd88661e0c652fd884ca5f3b666ce1bfd3de6cf82eaa5b86cc1b5c3f9a063b915b14296e53eb382a0dc93e4a250391b11ef20625dccc5fcfe6ec59af7125efa0d7b5e9973514eaabcf3d6244539a6833635413bcc4ae5f42c4530b9abbfb90b8e17fa58fdc370bcce8c1584b8c18b70563d4ab5a56a0e2fe4d59192272ef054dcf8eda85dc4a0f66b606f7e508dc904d81f8e70177550fff000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094af93260d461fcf71a294da29ea04b8d0fb6ce6df635da3d40925c10f898febc0190332c6102b4aa502565011cb56156f1002097d22213cd79c5b6e82d73fcc739d54a245936bdc3ed3333621df8962b218e902dad0e448ea63fba89354d4a17aad1ef852c1528ae4f683579e8ecd808ca36f61e6332144fbf481eda378aca922e7720132d9297fa2edc2b6bbdf60f102eb7470f527d2e66994db22c58e8c8ba270a5f954a3169f22576fe2b73c1720498be0cb95320532168ec5f7c09630e3012f0be53a60bddb1d882d72c75bdf96177e8733c1c9df9ed8152d6a1382176411e851b89a527f253f50e04df395337341662af3a86eaa6bd0662985c0acd1d8714048a844c10696bdeed4d4d57dd56c201027ed2660e2accd2b0e402f895cd4c78e88efdce6d0f55d655100e20494036ed42c580a0bf4e75738e67d95352f36ad4ce6f8241314c5129c0a4b664dd8935b8882814c481d4dcf868d5c23bc83db55fcf381a0c0ede6ced17d99fb17b9c5220e821434667b354dc56eeaf171f0bd940ab6900e05ca9ac96f8b6c10724eb2cfbc8886cacdcd5c782df7bade6ea00883eddbf1ebeff57a4529adc892f42f4eefda8240ce89012b8b08457ed52601fe000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089fc20a17138434e0015359e744fdfd31dea0a774fad2fc5e25a502ce774a050ff832da3961f56ce9bb6c6350b0de1c3077e3b086409643c4cade442b333818aa532545b7f7eb8a7bd99f8344002f56bf74fc6e310f96d3fa64d39e1e9bdd42ea44c80d820f6ede9a94abd2caa41320765e66dd416d86f8ee1932f40f2201fc453bda76de6c504161b75a98f2e24d47f920b40c96e3fe2273d5724e973493c1102cc056c0d70ca705e66b6d0086b7b335536dd9545f875c01c5c9223a5ed3e8814520ae03f7c7ffc1d34973e254f8cf7d67fd5402c26e4f4f72f62dd8573eaacf4258d43a405e0d1c170bd0136445dc8e132a5739ce16847ff536c7c53836802e107fd5a430b646d196d023762b9e15c90a15212232bf7621e486c2c6226a4409859931260b0573225dfba20fa6ce7014b6f61b05011a79597a27c2620116b250ff61503fcb2d5d2f47827999060e89e4b69b9d31780cf7100b290a702da4c84f560a0bb88cd8ae826346fd5e5efdc3908dd5d7af321c0accd77b7d0bdf614f6f967cdf20c5edaa9d0d37fefea4665424cf89f800392ca63e3c319aeaf9c7fa8d64ef9edac753017b61904644f5325668898eea6e9edab462f7a7e4feab775a90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a45febbf8d53e9543927f030b1b0b52f3c3cd917decc3ea3a03211b817b00d712957fc778c32ee637c32b6e77e592b4383e6b2ff2b108d882a724c8be2e1edb08e23af08e83aa757e2327501bd189d909a84f359926bd357238ede52675b53e950fb3e9fbfac385635299dfcf4380ecda33486eb8e2121dab0130ae84092a2cb58872ecfcb4004313ae46e1c0be282716fcc9518bcac5333bc0c4c9d48cd28b0aa256f6004fe3626d11ff3c0c64a8fd20e5a0d862ff331b8dfd21e934ed089149ed1c5f8ca9975902cb3341e6e529bd906abb1ec4b09bd7f64e8ab748fa5e5294a71ea2c8785dcfafd97ad878a928dcf1a1e9c5694b02aa79a035ff211e7ddeb1078243db4efee7fb2bc08594ea84f2f8f9301517af21c15b660c5fdaa592046e86e59e98ef164bd79581f85e57c9925f3a35b1c210df128bfaf42f33c365e13fd445a2345bb7e05b69244c7c8402acdc2539f7035b5dd47d882bc6fd00c3231f76c9b10c31e03517f580cc4cc238092c383a87d483f57c60e5d25190f3d94609e9b87abd89947760f1564588614b7eea461c20768ab2666df5a081b9a0c684c520977a89fc78a4bd9f9001c4ce94ff2bf54f70f7628741a44340df0ff073c9600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e788d2e24ac112bc2c1161934a2b351c6940b1320cc91bf5570a9b5474b8c693c962b8f4b3989eb275d53d26db0c49fef6b54d93f5270edd30d10be4b5e46ab5db0f71b38c19dcabcb6d9f73cffa41a3646db73c0466f3db5b1223209db184b77d30a3bab33f83a9497b0796ccf070ee8b6c13873d2f17ab418ed67c8ccb3480b1dae87c936283c7c1082419d20ab60999fb0e3e83ca1b9238da7b12a276d8deb0fc8f12fc9cf934007d2510778f459286780f6db433f94802071a78aa522044941f4f445e1d14f9d706144e32fbbf32c2f17d7bab47aeffa984708539cc8af39754231e3e921db8ea00c43de6180e37e63de0027f485089dda096a35f1ca411055966ae5920c24f93b594b5525292cef48c516caa858abbd1f883ea853d61689d88b2fa00ea4bd1b737776ba826794f4f4f2044ef8c203d6158c403b01dec0f23c2d46403fbece86b3ba1900703592f062df865255c81dc8a814a57e7cc204c52fb7963d7d375fb33df641fb9de30bc444d654fa75e545cfd6536459313091f7844395f1815008cb59c213a2c0cc12953436d7cc00f0cedcf7c67297e2d8e366a38cbca5b8d246585bc05a3e7e3362026d969009531cad4f794feddedebd350000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095fc75dea47292843c412070357d800f1233735d4385d0d4386af475200b61bce6e914a08d1ad3dfc9665b78f6844e64e2b5eb32a72897d56938736edf0e6cf512d00b21b980351f67cc472cfb9f9ca665ebddd012527d617bd40bcc39fef5bf06793bee594e705a5004ee8b8b1bf1ad75a1dd2882ae3fff97c6d1defc4a907cc21e49329fd189846c1201da63a4a780b6585dac33c19d1b0fa49ef806f435e2389cd47a757a41af0ae8f81dce69814edcbff5188e8bbcbb53733774a14d85418ea357f30bfb625e05713464d40b3ef5e700b5097a5b45b8f4ca58d2f458056953552eb708d3b64bf832f214b7f321cf76a952cbd463b069874b6f42b5002d918a481cc8159391476599a3c5cab2a09e56a1925ce51bd3abb73fba928e61f972d08208a4a2fa9ae7d76fde4702766e0c226a99a2c2b2fb93160a3590994ab2ce1d18aec63ca8b0caad6ab378f0a31648461d96c91e4a51920634de483bdc0abb414d2bdbd448600aa1b818745919cdae9d766ab8bd271a55dc44d4cf62ac4332036420707cc64e9dbb61ce3c77d19ef696ad480df67d66082e6ab42112452b6bca0a150469c0edf6cfd581a48d22cb79320e3f93f7b67c883834fc8d410dac7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016f382f9eb2bca38addd9a6c49a06f59b9ada9fd1e348946138305c85cb17418e7155a2956d8f47fc74f36141fdc3c721458e9854aa549fed7cc41676d8ca38f8d6470675c01f6b4677924369c085495de2f7eb88f0a3cf2c2e036e4998c504d4fc0e5ee9ac367fbb96c4a65e57abe9f5f1f071e608aae4a1a93063f0d0eece2ec33340ba4d2c945cddce6888bacc392c56e51e312075d654718885f45cad5ad9d7ab80fbae1694276aa2bbb7125febc0a3df84c4eb6f761b57cc2d8b11583061a7548c6a11c0e2b14f104a4445da1d7bf143b0dea1e85769992669b16d98ab09708b8585b675848e2abddd65c236e01ac1c8c1ef1bbbae97634b7b34823941736a9487e083d325eb924f00394aa2b115023946aa1b59eaca8422f3cadda1b8f6a01da53c1d680151cda3bb05a8f04f9e98fc4f66e1872fa1e29e7fce64fd554f29865a1a9b74f2134c74da12cd12e0e73d3e53884a21812db1c1cc52b26c3b90c4e61e40086178e3ae175bce4caa7aa82783d6941ffda9f618c7a372cad1e657ea141a789e55d1b347394ec6e4e0141beec3b93e6cee8d61572c49ed67f58e40fd3e875a3f9552bd85c2f7daad296e0c045e410251fb60d9746319ac86c16160000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac13c1c2f3f89b6e6b7b5fcc928407fc3c5eab1653fcc060d2eb58ecfb8a36e706acfe8209712b47e7dbdbb70b2108179493de78f66f8c776650b57dcfd5c05e39078212844e26d2b1f158c4d7979d54206d18bb700361074ec4aee033676617f932a105b89146c20cef27b510ccad8bd3687bca85e0761d1b1e13a1a86dacc9751259819f8382ea65d8b4018f4a2e321d1e3d5a9d2a6f0202c6ecbb78486effeb017bbba89c6e0f135d6cf9b696e884488d49cbbe1b8f5f7ac0c58fc7386504df40ad552916595d08c273e8d86be61f399c1807a117bb0048504f405054553ff3dd1ffeb565e953721e90682e570a67c5f94de9a09d7ec4eaedde9228e373f215267c839376a340695e87b87b0737e71ad8383469db316e9bb34eece7b75865da81a25b22fdf27ba40e33aa0504040a853339389cc64b7ece8a626e44e1c9b34433f5196c0961b6bb1c18bfafa1c14291f9936d0fa5b2bc153d0355756559630abd2d40917b8f33f68d2974832da4778787ad7c07260038fe1aba6a2e0fb1936fca19dbdf9c2cf9a9fdc7ea4229118b316d10ac0fc58d5f556f81658cf60e900cb20366ed416a8da8a79e2c6be43412a74eee6c2662eab5cb95a77074b51948000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011d961c29e4a884ae5c78206e63197619b721e50c42676badec1a01de14bb2d51fe64f2e1c4db64cfe65959da81955866e2ce66b72bd832d5364d44529184da074f43ef77c455445cfe907b2835120ee652d52ce9a983526f9172583134b396e4d37158e33a31427aea353b8d38b9adc6a341526a066359d565cbbeb1cffebaf31f6b9468b714fc214b1e942fcdebea400950ec1851e3c8de3bd3ac3414ca3d283cba9bcca9d727474a6fd9755ae2db5d7cfaf58f53a95ee222d665c07689570d57fffe4febaba2c2a55e6fdadfccf90fee4a173caa8ce9d4877329a0b0c36259ed4cada5f03b7e91bbd6c30d75eaa4590baffee9257145bab167954fda65b82a3054f00cba6e4271424717b1eab9d43923aed8776c4579aa8a081162f043667cb966b0885bb958fd61eecb586874b9318d8d3b79e533414c2298b2d3136d55043186abb1c4e457154b999a9f7aaec5fbc54546393f79b8cc4432331ee9dcb99803111939028e838fa6a6379a60e4f2e68ae5086635f6f30a67788393056a4dec2ef0dd3a9b5c816f5ab388822c71ae34605d44abfbcaa4fa0bf029007356f625f900acc86d1c6551d853c777a830801b8edf2db373e36bcc048a2d4053f96ae0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5e37fd4e64c7557f79634fcf653c7f76b7013b230490de93839b79c40ea178137a8820321d3410990d8473f61bcecbb1776d15c38376ad95152be262e27b4bf8e43688a60af8a64a991fa8b82f271ce1232814365e9957daf60b2729089583b4c65d498f6d101993faef2da317669bec2a0de6131d0f3374c427196c06e1e8c2ab76cbf4688b6835de99454088b817b3388c781e148b560aad71b774222771627f990c775d58024093edf9a52f652d9ea74e4664f26cdc420fed356dc1c3ebd9fc6231eb4bb7cef662768af9639278c430bb90474f7bde995c072b5332a48f07c6fdb66ed439bb21c9e29571568e5a1093c0926095fe2f42c12652834198c2930c90b22c52b5415bfc00f2e7f5496824033eb88b601d7b9348888dfd2cf7e0f65d7930f57dec20d7266acf3c71c85eb7d3562747977da7c45e31f238b5a0db8827fa5e77f65eff9834a21255291a7a4fa4e09dd33ef1ba6b649dbd21d20d3e1f5985d1f11307024d882032de585df5c71c89bea5fa3e62a0a4b9efde4b85947a64de56d6c391820cfb255334c77ade9c15f141018dc8be0821df7e6b0952f518f29ac708623e4b6ffb6216f3a9fb1fae372725e2a0a534e4b3ad41fc6fdf96e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c584b492822bd8ae4c367a77dc5c1291a3ab9895306ceeb52315a70ace835e74d1fd5e3b875cb9bd9a6d80dd2a4ca9254e9c1f67040277d64a7f50df237beef50ce8095a4239832f82266c34465df43792f6fa3ad89c34e0daf0629f9b053c2e6ca5736b124f364676e30fe88f1d3c17f37afc100a1b8863aaf1d22fb07f74f84cd530f0f95538e62022187f5b67e83984ee181cec383bc44909620bd038c18fb4f11b8f97604e368a1f427fbb321e3a3f261c60d4fcfd2ee31052ddc8e1c7eafa65b1b18656a6e30c1c434e3b4f8d04857bb47475b9c53adc9119b8d7ce0ea17a0434e6499acbb2b79334e370954753a3054be2499156503410bdd6aefe356732347cc042a88db6afedfcd0621211086d7f8a554bd506511029c420962cb61af75fea1e51b0d0127fa5fb40153f7ac4afda6be3cbef6188b4241ad2e66ab9124931e602067d7d947985c13f7cd76929fda313fc1ea712a5c0513d1f3170a5be55bf32baaacd62495e5ff3d21f4379df1f51b70dfe1d7e2175d9b4a11eec6108cf856f44c5dab52a16d99d03934039cdd6c72ae2d404cc445fdce041b067adc7c715152518e6569243b8c10178152db622eb4e3b36efd65feb22f0e06cda28f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c52f0921a8f2d35a668e56a14277e9d6c2fd8786aa03037a1c906d0fd66356a6d90032105e48fd6df48bca82c70a5e7fd472b765153b90d69309a0e0a8604b015eb2fc2d50c0cbf8f5b24f517b746ea8645875644ce7637952c09ef54c1c55681423aab50d13b63c2a6338dba1d6edffaa0cf4a1b5b4de494db6aa3d6f30897d0127151fe7c41e0b431f1b1bf73bcb2dd54b5ce256f3e0e4e335bf340eeea42a65d418d63045f70958a43d52b973580b6651b052a798e68928682f3da483c120d898f3036e4d772d9ec0e96f3b0cdda82cb766260acd976aa52bd682de441a502018ee3af8a97239d263e026544e6d153e474213513afb9d41b89b71b7b76da6b6bd554e561c7a336fcf7a2bb470bd4a8985de08b1616ffd775ba1ac23daa5d5b7d5b5e4151f7a2444f304f421a3937060c7108cc9b47ee1da635b033c7b3c70aa7d5a83a5419671306ba461a25bafce10e70abb8f0c916faa1f90a9a4a3afd532426974629a1a0c9f108ce65d10e5e60edfd2773184137364818084f8fbb8b2fb9d17692e11496ddd8fedefe6692a0b43e29d662802011d462594fc8fa537996fcc5bb80680bddaf9407c911aaeb2172617ce2c58d0dd3bd2c6f2393f68fbc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002141068ff66c0dacc2cdf5780ad7ac708346735f66d17560f4013f4b2b94b53b0ec2dc6b1df24a8b93c5852edabd26d0bf001b5bce2ce0013954d6f45d7f1b3c435fbccf834c5c991a060737134e1835b4c1bf975f1a7df361ecfe37e354a28b6110094d755a9070434decfe7474787f3284b94cd9cf5cf2128aecb0c28e8e663f9253ef8b2e577efc862a7b5520fff64bfffdc187e53ced9ec52bd12b5c3ddfc3ac0a80c41e7ae53bbce2d364ec94b2678ae671894a7414043e275a132507355b824908baad50db356846221b481b87e8ad119aa298aed0ce19634bd3d77e328875637a44855cf5cdcc28d55d3cf3190b3346a9f3096f06bcfe72d6720be45555dd5916bba976a22348606ada34bfe6bddcada4a63dbed0b09bd74609007263da6ba10b0f0488bf98d327f1ad726720faa1ae991b10b12732c2471bf478a878563d3c78575f86b2c13d938aa07509f0991002ab2e77abe54229a3625023323ee04a7d2ccdd71ff843fcad9b5fb4e97ba7a5be5e00c2603827c5aad62aa1a9dd1f4fee27af267dc6d8174acb1fe2ff0a223b8fc8750a7480366f3d37eba0b58f8b3bca8b9bf2f32d272c58df758d382fcb0e4022241db79e74a8e799ffba946e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7bd57ed28f298993d4bbe9c279b7407e74c09e881e502123292bf9d6d580a5b1af505259bd44be98d9dd4a64f71afd0f2eebf93d9f49b71f42b583496b863f247d0bc02ff7f991d3d2cab8981c4c83f9c35f7a6a0eda000be691dcbcd2859fdfdf7d256fc5b6ca697e5ed0a6d323d447cba0f71a93745ff736e8484e1f1556f044a214be25d888048fcdab19a3b0d0871929babd5bf261b2ff7ba41a53b23ab59f4694c732c3326e3ae2b7be725326fc0f369cc8c05b05149d3d3bd837ebc8e9b1527a7cce7a6c19768a4ec64b1d11a6afdedb7b22e237cfb9247802006c0257c5a22459502c1a4f2196fc13c52684cc8eb9e12263e3d3bb41f21d47e06d1d96ef655b67fefb786810ad1e3b0e74c2c66fcf9e9f86342a66bed1bacd4e0bbe769031b586d2e0a752e5fdaf4c5a9f2b08717ac6f05a0a730afc67c6c1e792cd282948f8df15878b6797e33513c29cca063f82d0260100c40b92726dc4808aaa1d7bc34855c9a641af91058d550ec6f277a6fd691a6334b2b80b22e7a14651ee584662cb76034bbdde0c2d75da270bae277eff194ad4ae1e6a362ec6bc32aa7ba02c81530c720f728c95f48aeabcc9a3d0862d6775b766f131f05077b02bd20a90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5e8e6382c80eb0204a282c79c47e1697b933807918537dc2aa986061672c8e9c5de7122045628eb3b34bbf2b6f096cc94a404bab998879d787a63c9b3a3e673759f78058cac106d8ceeed7cf240d84c405c44a75d12c6b488081f77d2fc97e32c52f4d5a205a511f27178298731282bab403130d6ba65501d344847ecfb1035b6f8b04b96342bc797bcadb65c83b6269ded814e26a2d8c681435455631a90ad13986ed2417860eec726b815bfd454a9d59b080d69ef66cbd1e023dae80e28794792ad47c83736b7a41bcff5f90d8b1b2b2eda1e59ec8cd411f3de0c83f7990a2049b2a3b4250599d974de6a749de7ad7d9da5c68b40e06ea64dfcd13bdf3252acc5cb80161807c3f462100879bd2a5d55e990630d301a2a9527009f8dbfe83e37b7a805d636fc4146be0197a994781847fcce792c89faedb9d950524d09e90d0b5d9e96fb1b889b643c6854257efe87b6becc6ee806f4c060e7a74eea00d26dc1497cbd21ffa5df21df104100b3b0b20dbba89589745d6c0aea916577fc08b52f1af43146f19135a2cb0493d70a205029ecb9e1ae48203b2712a155b29b1668ba18730317c0ddb42f1c19fc005005fe0ca538d533bc79a20ef0c32e7e198fa100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ceb3ba899c7a94d728a8ea09caccce1e7be04f7b9e6b7af0843923f8dff0beeaacc7438519180e32f2c951c237253b0e04e236ae66c0579b88302dfeb7f01c1545e4ce65c08601cde67cced52ef8a6711f0f045f7d7623d02b16ed64891efceaabc7a709b484a09dc3e3df53815f5b0da2e241798e40f664663e5a88dd75b695ee78890afb259213e28c3bac4df0e67f4af7e58eb816889da9e121586dd5f8842e130323e5c089e0b5e9a425440df509949d1c227d538b429604cb1931d19654350b3bf3d731f3731e9b96a0b645f4ccfc0148547056ecae5bcd940c17ecd6228c82993290c73a459969821e4ab6b5665445170a81a7dce9fbf47d9cdd47bcf141ae6a95375ff47c3d77255b110d2327c917ebadca32691ba6e4895090862443af302e8d2bc6e70765bec5bc4be734843869829d6cd3681c7087f15d478a5df7ca4c02f346291ce544eeae8aa7748b95b83977bcd3c89568c91eda586b29f87d85c53a7a814d76596889c4d53364f39b16f28299ce6b5b3dd714105a8a4df3b8c786f48e2bcb54e2d6458960a171799b2ae28af45eb6021d91846896d08b89f344e0010fce47126ca432721358e0de08965626a62d04d00ce3e694f0763361e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080c1904bf62521084200d784752c1407bca4303591e0faaae893b9ab397e0c7c27099ce01a07baba48ad643a37392c6d0138e42791bbd71159ca32ecfa9120e6e0646aca3d2434f78e0a9f600237dafe433a0f5e603a504859cadcf154fc442629c6871f3656b2f2436087c09c41a36b096f5a50de617d91154692c4d668d8ebc75adeb839e4369b104e3a0c268b96518386b14f3c0b41de55307cbd9cdc28340dc1a41a11ec987299a49e5b08f392782a907aa3bafbd5eda6bd0f44d71e115b1342b897845257421e79fe957432560d03b62ab8278af19dfe21b11aa455140265f0975c6cea219ea20ad74b9da95caf3ce80ae70f60620b01f640d2eb9b8dfb21cb9dad74c73f6ae03383ae1cab668188fae1e35781d4ba66a3358f0124284a52c91743c00a87510f33bf70bee04807531f62707d75132b2df431e81d839e385df857d5858d4d37759e3896f6f4c0ab0ddc6c0f3499b09e1db87b904ba32c7ed3f22c11769bf9656fd0f1a8f9c84cbe6c5c25d68b6b10d3e27840b03cb0b4576500bf0445daa18dc5895cc1f8622a02b1a49aaf66350f79806291bed9f8a1ddee5ab79ade9aeeee7de32335eb328773ccd25728cd006fdacbc4ef40a40b86ba000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a980af41878daafe51343be2d131bc258407a22cf8882845a2de86bd50c4ab8df0c783503eafd41e87547f85e061e1c31a4166aad710bdd8b0be47f9b788189a21486d428905b4bbf749cd55f63bdcc12bea3d0610603c67bcd7ae4eb063caf0cbe36649c28431ea0dbb71c7cba72bf4ebcb4050a5d8742626566855cbe209da2b6d8f1860cfbaeac7c4af889c3059de03b8c2e73f5c900848d933c0c2ed2b7b1f76a925198b6c16fe03ea901f682acafd777d3430222e53bcc8bda2df876376aacfc90f3492c9e292fc218597a9e4e2eacb0c8194236b8dbc9cfc3b4f9948c889e30ddba4ec4c988ff287bb64272b3034f1c9d6fc3227f5fed8bb69b419361a5d1cc990fe0a6b140c835b428627431469cfebbdd8521babb80b2b709b9e4b6d1a1eeca0624535cf3bfbf9a71854a14a8992708ef8ff3360d44f7c47d51326c1727631c7b940de288f99d0678763782a5e1785853bf09e4ec388d24a99b1128024edb7817bf7f3a7a28a00bcef5f304d1b6946bfa98d6d5625ad6b43b25edc7c6893299943af0bae0caa96495a115aebb660249a07ad03fb633d123d9ddc112ceeffdf4b31eaf694abb97a6509776469476d9e69bc0d665cda88f41dadeea0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027e961f56698859551d12ab0569b072b5dfe2810a53f30d8bb117ac26f74684e65ca542143647d252b07a108a3ccbc44c5a65697dcf59efb1781be0be268122f5735ce610ee600d0050e0db569b138f257e1544c4272e060798759afa203e0966a09c28023f8c8f813f21789ccf15331cfb12b58769fe2b8c2fde40e24dfdc4573c8e1a7f048a8dfad060de6a182079a1d48a5c358349f61ee1c561a8b32a4145ec73d01b7ff9e5bb26cb476f637ac8c5aea13279672ef5cd7a6c4e9da158ec863ac53a7458245cbe17d1a8ee83e8599a0bbb614709351476e773adeff5a02516ca37a78e211066efac5d67813095a02e582772bda420aef15df13b28855f5bfd1ec664bf3e949600d4ff598233a97086fa514a4fd0c78f62d52f7877bdb349dce2f80423045763be207592447029785b6d5fc377663ce0d0f36e1114799ea0db67d01fa1ce85dae0f787d7a76af4d939743824d7c3b20c5c9c1c47f6ccc53ed726f6c9ab79954411f3b416819c20b7547b6cb624190d4ecff264919ea9aff1a337e1782fbabc8c336d91b0da44f36d948b86b4c7d3b22cd043c5156766cba3152ce1ef7de2c9c7ed6213f64aa12df0995538229b57ba04a8d5d48f0a31519bb00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b4840023b1951076d8068474548af46a28c094a074c2c9a46d91c4f8cb975afc2a74a1f6c05284f6c4ca89bcef7e6a074d59c396c002e65d6ca3ca7d05dca6af984842350ccaf66588dce3085e05c7891b1a7bb116f0972d7df8826ba1dd1707053942fedeca2cf1111b0523325b8588e78367eefd0ee24e373cbe7e415d396c03b8805b0e24965947b2da7be403efe35673207475590703cb4164e0afe78f4226d090633d06cb8cb15c5569313ec8c919920a5f4d32ec4be91743af58a2475e1423a2da2105e38614a749740324884fd7900bacece93de04036a670a203c553b9a862e60c92b16ef20af95791e0eee46c8493bfb64879c1747e2bbddd8446cc8c95c10677153de35378abb2b5e852c8c1dfdc6526eadca67b90680c64675ac4b539a218c8f3126ded6807b979c5f6bd123a40a3d37f81d4eae238365ee4f829ec65c0aee885a18986c6c6986df483989b1bc1af1bb3f704dc1a6437f23bb61e84ffc0f25942c65eea8f875fe3971ca54aeba61ac743dc1d5558b777f02a497e69b1701a2a32cfde710a6d417cbd6c705e8addd1ecf0ddb2dfa5869ea5cb0d117da5626d966b00a785f1c10d7451e530039fd1688beaa6bbc0a18ba53bbf8da8ba97820519754a0ca9e1a988400a01e55e7be6d4593543a84541b355c9f921f3511b821dae58d553b3f8a89174f0ba22327b0531e337406425b0de60dbb1fa7290e021fc62958f92e610876f3e4be2ac87df8df8aeea2db0c7196d8d0c02035f0947310f0b48883b9fd56b10180bea543e09661e9e928f82823665ab5d858328717422d4dfd4979e29785be95e6ac5b00ecc3341da00ba7a9206389e95fa6aaaddafd2105bbe2a603f1c30972e098ca10d4294ddf81007984ad0a94da155c35365c4e2419642687617712cc8362b38a4a4c76e8b298bf7f8280b724d5443bf428e5c029393354e28c1e9efc5f0e2bed443a5d86ef0f73638ff93030c628af26f1d5b809b97ba3802c6c0e843f136c0635f5b550accaab17964e32a9cf15bd03bca65f09cfb1321909961be67dd4331d78f86de70589933a51df2ce177caf4bae94e4b247650a520efdb8382189cd6ae1c86f5b52ec8b326ab1d7a75c2b96e9220a2eb07fea8fef8ee844f18ae779822723afab67285dd8c98ec9b83195e341e501c7c0e797f3de28c02ce8a0917ab8c070029ed0ec33ce27de0c4e754d3b1e67548231ebcf15db81ef27e2bd5fa5d3f070f9cce40c956f44979f5c697a0b6e3901d89086d3f2ef51eb35d9d0e31ea3fc49afe335adfc26aa24ca4032c6684fdaf51f01beec3a5c304bc445e2b9698ba5da6d557ff03511f9b2944fd1c96edaa8129f322789b587c3070f75d90a7099f65aeb0fe3c637003251be71121a8293eb2da1b0dbb49bc9fcde141281c85c41e9d67a7a0d91619316387fc1a68ef8c5f236b151c444f1aa6d69a7225ea75c2d4b44069dabbd4b0a2b7c321cf9dc4364c95225e21d716a936ab048dcdeac729510f5542aaa91fd78a108301e1d27b786c6abc592b734a7822e16a5d0273fecc3eed2a488018c210cebe96201a69c5c0d7b6e070048c36b17f366b46decd3f799fcef2de856e167e6700bfe3b8210193a79fff1b223e19a4194fe3126a53420ddd8b9c7bc31cf2a30e3b0a6af3d46339f5b6b4202d9ee6392d5ec3dc389c12a3ceb257d8fe9d1384fb5866d68d3b771c063413fe25c780dbd69bdaeea308a9dde1ffd6e889d2684c0f7c59384bab786711349f622c91481d0471dd4189f3d9e2d84815f8ba22bc7adcac7d13843eb71ff57cf443283dadfa170057ae6919e76b88e85443e15afd3dbf0710a7a93f1f8b93e5a1b12b4cbd8ea5a81e06c2de03a3dda8d06479d4d408e0508b519fcc34d9a16ea0560476d209697c08c775c03014d0f00910ae6a9c4d6eb74fdcb6fda173012a2aad09dceb1c17e66ece3ad3808c6696feee1a8189e34aa08afd54af836d5fddf55826609d9b1a8e73e4c5294c1490795984d605cf8fa30bf1c1ead5ff46fb3e65290aa507591687e76416ab7ad88864b2fad3995df9821d59106cb3bb6d9c8688701fa27b3df0f367963187a08b6638b9d2b86250821522977f33833512eb572aef2189fbf0e9f23a3f5f329ef27649ae9bd054755424d7d18c02cf04b32f25f1f90978c2ef03614c7986d0c60135b300089f715cb6f9b0db7ed79b7d22d20df2da24319b30a3202d336154fd3dbea3f70e3c171347f6fb3e514b4715646753470c121d8e0837c81d016bf7483c5d1b365eeffe95ddc3f542355eb98c9b439e5a4421e853e29646b8abd8eb4171bfe8a3bb1a2eb912448233cdd1fc841355b434f2305e1b901fd1f457b35894822a748b27631641c4ddff46baf7b18bbbf3ac336200e802b07220a8c08c47870fff56a0e309350f171dc7112ea402fa61e96e4cec027725469089120581813631f1b09a2d5910d08eed3cdcfed9ad1c450748f9c02d994e7d7c331037096d3e47f4fcbcd1a5d2cf8f40cf466709aef6f822a96dc61d30a3dfe44387110220de47d03ada463f01bfb91d4098c7df6be4d59b1c5629060c765de6aa4770488a7f714962d56447a12c6800e5b0d6508c759857f913d10197ce0d10ac06ff69b398c52cd3b95d13833f31805cb26575dcc3ebd9799a611242b228ca720df1c9b0d74e97e5bc1040c3f4b8c7898881f3cd1eba486cd14d2241705012a76e2385fccdbcd97cf496b482c934ad9765b8690355f85aafdc43277bd831dc69e4684d5fc8921ba67554c26cac7178a5412d42da2b4cfa369c6708dd406079d1537d04699d83ae0f6519add3e417a09b0595a156447fb7eb597f0366a00e16f285ea9731b473dc91dc6cd844976807744b0ceb38bbc29ca5a265400a22cde1a9e89dd710db4a6e96e703b0dab21bc1b676e80da5bfbddd5e7857062ad842cda060049c1a6321d43ea2ca217361541902064293cff0a0a006a7ab8823d968b1160d9a7af6d1999e4b696b6489be8230d24c53e39ab77e6b1c55a4db123f738d1663ba6375474fe0d3cab192711700c3f200321cc8348145618c932010de6ae4a92ed89900ad451895a7972693cd044d76c06b0f099293c93e56d1580dfba15f994c309516e76f8d5541d7ed7c4bce5d451811bdbe0e57043c05771a0f49965abffff8f3e80d2332d181e790104019ef4e9ad30cab5adcc7d8c2057f14fafcb1df24fbbfa52625a6ebbf9d16fc619c6ebaf06c048655837335817b0d113b6347598cec4225f67784b6d0a19d693fa63714ac8b470e4ce98f7d988f3f0b8025343cf4197554d5068e7418b34e3f8f612aa0400b2414356e8ee265573313112f34b5ebc24fe849cde46ec0e0759669f1d5e2284df651c2a58e5b444b6f288f1a631636951884a6cf60081228f8e67a137cfa84cdabf1e9cd6f439d07ea24ec579f6961de669e1b029defe0f54f34ccf70a6831be58127884085295bc0e285c741d951f300f7be198f08b50da36124bf6d5825c2a839cb38f0420267cae0453713a63d6698971462b53f9518ba6a0277e87ef39f1e2f394d469f9a25f343015ccc42cc5861a1d71d301b4bee2c97d2173abe5e6efe5bfd8ec7e5a8fc7381b4f49825940ce4c2a6508a1b978b876a2392dfaf2d4115f4d6ad1e709f7d75d21a9c4d20e76abea2148e6f80be901235776c028f6cc9abaabd2aeef9ff389952187071c2fd1008d45ae01a80c9f2abde3bdd174c4a39212a1b02bc643c6829b18feffd24d3fe7947eb20f063f03e3af7a40b9c63481ad70239343508edb585311a559b96698fd725101f2d7bc0b34e00c959d98bc585152808acd13f2471b0a2bbc48cd0ac372e919d0c9a2b3cfbd123d7159eaef16f807edcf040c1ff3e94d01525bb21dc4f8a8a425450900c14fe04770cf29dbcf23213cdca2da5a17405e2d45135de67ae4e02917af2f610a745b8b820d26c84249a9d91cdad730128bd91d8d029da39ab7bef334cc77d8e3f7e11a6c0ed8464600018d2e7abd66312d861f0d58530e70c40a383f06bd912345ff234fb2322c85d15ab5732388f247428607d58e3bda3f406fd592fe32faca1671d79aa5b06ea76f23a05d025f8e60185b0d17654169661917de92c7b7fd01baae35e219504f0d020b239a1022756891da2119ca26b0400fc508ca3048c26da3d4574217ffbb37d49191c3b5fb14a71ce5221d93b6711071b2317f7afa8f8096d856ef0c8ee27d729fbb8bb7f1050b2d42094ef9dc5328a1787f6bbd5a7d07680b4a30e786940809f27740148f94bef9192e39bee590fe8eaecdc5e5bdce8b8cfef0735e1caad85f88b6c3a90a6628ad69156e1a168d18eaa71931da27f035341c515bc6dab1c9567271156d020c8101691bb6dcd3cd113432525f82dda04b0af7d00cafeb8a05b869d6703837b63ca87302657f19863387c3450b337af6231104d2d77071fe2f903cfc0ed186047c79772eeba19b2ad1dd2a981e4f9084ff1b4e9febc9cf747938ac95e664e0e5b89bdc0bd732845052c0b5ca92bb501926d53f70401e92bb60dddbb4c19b59c931fee02085cd963683c1f714adcd6d87fc6f53d787837e6b11f0b6b3d901f7abf31fd016da3dceecd151cae6b51fea90197a35078ea2754e07c75338408bad3769a06104fd908319313fc9745db65ab260f9fe9fee344bda63aaca98f8939282a0cf931669d4bd315306bbd6846411da64f153af1ad6ce786ce19ade7e23c6dbaedaa02c30df2d4057824196fb9cfc215e2bebd0b06d7e256f6a317b8364a02de8121b26f8426d8be26c30c5fa4f03c9b465208c937bf961fa204fd98f9889424c5f5e13b419e1288502431e2c490ed32b7186d15daee4aa3319ad5822420391339c0529544e4411f8975448e0b617fb4fc79aab5a258955ce8211aac69b8b6d4c17362ac81ab3463e59d5c60692dfdf27e7894a17538ca86c65311f70baa3448b9b0402b39a8377ec29b9817845f67ac3ec64d70e9bc9d292766bedfd32adaf18c9362772e334b63af7c5ae8c19514474fbc894da2c3c3f08facf65dca84ad8ea4cb6123bc6860183f1b7a6003f86bbaaff82bae5aef368d34ed60b5b7bfbb4d5dc060ca90797e82c41ae3391ff0d3fb2bb2a047b77bc2127834d4573bc14bdec706120761782cc858d95be6e4ce54e2adcb85bd76531e7fcdb89c1414f8e676c8cb51205bdfd01c03b94ae5d23946f376e5a5c64a177a306cc88518c4e3fd22a7d911213ae8323d70238bf085096aa9a5206b7e0c1bdaa1ad3b8e8cf24aa7066c9fa1794c46c9f3246116bcceefe2bc2bb502ef538e070793a846efa15e56db5fd461e596d1faaa7fed1e63f9f89ef73f01f238b9430b605977f489d8e3784c2da8903ea4d3b5931146387a97e8bd31b5760341543be73198a3309b7d2dca9aeb3201ec548fcf4fb3c815737f7a09b50b926add877346fc126d219c7db96204ef99c212af777ec005027b1a2f986aa441baa29366c5b10f37971060a13a32be828cf2ad6a2baaac4bfb52d6f08e4c39aea737ca26b63257e2dc87a8adf59ce5270ad08c409effee5590d32673e5dc6c64b0fb1c2a4435d52f75d37349c59ffc55a1308e41d97b7d09dbd63b5bb27ef46d85891b4c9a7f22a69d31640458b833a3ad1110c6c21f0f282d266c56209c60c7ad5f5cf6c31894b03b37e62018b215dfc6a0047feca905791496a253bcdd8e710cd050602516c12ec45ccd70c6a525516cc13fa86e6da7f6921af6093a17a49771d05c6961435829de03bc0edf4015ab29e003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000004b118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000004b0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000004b0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000004b0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000004b29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000004b141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000004b25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000004b12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000004b2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000004b189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000004b1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000004b05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000004b05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000004b14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000004b03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000004b2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000004b1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000004b1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000004b14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000004b2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000004b305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000004b280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000004b223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000004b17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000004b08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000004b2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000004b0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000004b0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000004b172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000004b0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000004b05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000004b137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000004b2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000004b2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000004b2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000004b18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000004b0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000004b204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000004b0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000004b1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000004b28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000004b1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000004b21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000004b0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000004b0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000004b107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000004b2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000004b09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000004b24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000004b03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000004b1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000004b205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000004b25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000004b283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000004b21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000004b094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000004b0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000004b1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000004b2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000004b1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000004b1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000004b304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000004b000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bbe24d6b5298ed9e893b306d0c17e870f02cd7c403541d2b7310537f3cf591c7f2dcee3e1a8d11b812500bd1fbf1a251efcddc4f708faef9ec23da9beede2d74bb114c2227cafdaf429f00014383f65041217a8d1fa4c980bb7e80ac3169eb1d75f2bc4de260c7e707411c2d1d354286d7a9adb6d35a96600184e3f9c1956ee553cde0f5ad7623409cfd6ff61473c6911f29ccee5de08eca3c38daad5da233d0f92057581b1a72d2dae6728435df3e085468fded81f233f5e10a3cf5292b1fe3b3c17173aca25e5497a20f7682ccd3bb55a891bff8b6ebfcd532454cb8118aca067fd66074a71213a92fd275151371a3e714bdb2f0eb01bf3a187fbf399e2d07d164f82078224ffaa95dc2efa60ca00cec02f069b5788387f93aaf87d7c1bad6b7abfa6234ae6fc33d685d76da4df5a80d6bbf467648cd63bbf7099c5902972257e80b7987edc7e6dcbca210463ff3492123833693bf1b31900eb3a09fa9d5e37dd6d8a1276916f4e803d76c96856069b2c94e9e77fd63ba0cbb935b80e88437f6724984ff1450e13392a2df2c2590d3af70224ae0490bb34289ff85e5992bdbf81eb5ed0d51fdd14837295e67f3daeb0f5364ad60c40492de8113812937b6d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d973862e9354246eeeffffd14774d0453c4fe699aa600331aa6da496aa81eed4890742d125fdc522292594379f7e54256d1e393efe9b750696e5fcb6db2d0c7b782223b8929d0d66bccce3af251a17feaf3aeab0da31686e2c9436ec1360dd66fe3c06e8a00fe0b75a313a67393f3002883a35b9242d42b1aafced61ec9eafa455cebe063a00b9c4c62e3d964592f4a7b04f8f53a9a4969747cf7e8c594c80ffbd8630d6f60094799028af1a4e6fed9b1a1ed5e8c830b01c074bb4201382e09482a26d4f03aa23d49c05bbef3fadb390e473108174466a8e55397efb2c299bbcfc8047299d04a4cd05f92dbc70dc919e0ae53cd42dd7eec4d4f0b7b0874656f94b3e9bd2977613b360ea72362d32b354339735c3b35f0c58e0684042343d792e545dc4fd2bc9c261ea175c266c2e9ad454aecace835cbbbd3f3c76def58ed2c7b7c170c18b9b4604492b827b4c7f49517d4d8d84fd3f3e4010a56dbd4306fa4417184d37da352c0955d45ec8cee3216e425ab0fc3d71d13be96381843b3c15001333fb30648997181134cdfa04a05a73bf0a1509e33cae8c0ed17c6d71080019d83f937c45e8f97342e28028cb0618ed068bc0e4cab9169a8baac3976eedc26000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097700817f8df0d57bb751827c354142f6edb2c848f74ae1fc3da83d89e64a537b9af9911d8796b6262d717c90158de7ae6b35f6a48d233df79dfd6585314c4ecc536b35f2137569ae1de18ed646b4c84f61707b0694ed73210be18c3436d7882a36085aa27b7598d4a821ccfab64d2b052cea6069ed3870272e6fd16314dccb4ce2bd9a60f58c9f7e50ecc081577dfa433f89c00f53bd28b3fd3b20e01df693a1bf4335af1a7230594f90b72efbc254ba4bf52d2d6aa5b7b07f9b603b128300b75193757d9b24dff871a3ef95468d77ea6fa82f585a5f806cce48fec70f12a15962d7612230c183cbe8b3c76913dd1c25b5a4f8154b53d9c9857241b0502ea00341c29537a3681498db06bbd766bbd49ef5499083e53c4854545f86858053432ff1635d9a4477c566f594b4a12894f8f8b6794d7ec1967c119e9c2a4c21a1d60ff9fed5a4adae3948d185a45652bb1700c51557b182dcef8e215ec2d6ee6e493735dbe129b5dfdbb622a39372857e3e29dd719860af2a120adb22675f747feaa3d2dbf4de23cbb1222f1d6dd4678869ba80f9982d286897a98baf57587ad6167e721284325a306a7bd2fb5f62ee5902f435de2695aeef2292177fa3afc420dcb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013e6f2e7cdf7a734027fdd3696112d1ec95d6232d0649e44e3c65c3d42b620d25b12d35a049512d3e3fdece56ec519215c86e719687c781444d36fd21f910471a49a2d3a16d001080b9656b2e834815d6832da680ab8674d255fc81392fe16d8a97573276c95bfa850cd195260acc6f36e173a41dd92d5cc3bc2e7195cdb625fac5e35ba6feadb38a3d2f2129da8e7b1fb01f3f862ae16f218cd58c02c6d8351678a790f1ad5cd667e9a5c2a0f2bd9144cff406ee09ce2161149b8609107eeec8b4102c9d80b20e3fb5ad12f57c41b92131f8b4ddf5171d51fe92bc80b5ed48e15859f9580145c5e6edd730fb0c103518c3f4197d94d5d035ed1abc2add4509520fc3bf7585fb5dbafe7a6efa9f97316b5902dd6e93e38dcd9367ee13cd9fc18e193cdaf8b0dd211bcf7bd2c27b2fb62bf0dde64601dfe6fc8a7b15d356983dbf288ac88066d46be77cff91e38e052946a5b27b48bffe93ed1f23e925bab5821d70aef7965389a5fdcf6445dd77c67d789a9bd4120f82929c1c37eb004386a8c028e1d38fe3d6728429af11178e903458dfd4801ca3923ab45153574a1d987ce13959518e2c5ee5ca9cd10ad6e00a316e562d2d4463ea4e1d52ebafb9f78fb130000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000999c86fb01603eb829f31cbafa9ddcd965d16d8c41834b94f2949d1d391f3fc4b8005195f7ee8d617865a19ae9067e4938296bb5f2b3abdcb530a37ab5c65afab89dc0604641898b10b9139a5598702ce0a7a505607618c2db25d573eb4dd5d288d25d87c47d5a2616c92539cd31ce535f893e4a39e3158ace6edd3d8434009961464658c8c24c8e3b8e5b4347a246f162eac970c60f05d9a4a620a67a01159bf7a4b8af5de01d095230a90e4081a0097cdbba9c04a5de198afd07bf3984eb0f66c1428bb9c3ace8c81b68fb0923d100a4ce4a07bba27ddd5bc3bedb7c732d1ed1ca36a25221ed6135909e7a906beb44cceb147881091efc9e29b23c13047c9a55d5ced5722c5dbb88aa6f43bfc32ac8ff0742f3715dd64821ad9574df1a20a75fa3a6e7306f9236f66abbc963152015cd40631ccedf9dc89f57e771ea824374741c90ecb8fa5542eeebd8b1648539f38b8e5e9e3f4ade8bb437a68fa735530d90403d29f889a8486df060d2a088e814caf77da7f3c031ac461e8a845bed198c93e058aae60fb877589c3b6abc86bc3f1335a3d203f1e1ac9adc7b7c65168e4539b6e5d0190cd888ece302d4b726d1982647969652cc53a2f0f9ae915de79ee00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adf485e6156a31048d50b2de1a74840200d0c64887ae1b91f0cadd11c2f7f662e2d4895f3cf9258a94e991f42d301ac79ba66ef7c39ff17c8589b9f6d8558e6864e5f3241801928fbe4b31e8bf063c677fb6683251b1c1cc7a2cdf550c7b0ca55f74ba48a63a5ff5ed2083a490e08a26967863ada77be534af4da50dad6f7b0d65f0000177d763dd168807324422e2fa2ad901dc9518b1ebb523633f7e5a2b2196c388d47b7a87e781233999ac474453cc624bd3739c682c94fafee9bba6368c987115f2bd68222e51116a0341bc3454289756bf9ab170d229f38be844e0bb13995a71a4ed8678616bf866e19afa372db61aa4e530c9c558705ac8a587229431b46e8fe3c9ec0713edd2351bed8c820394f5616d378f28d0a38ead7241debc8ff62dbca4f52001429815ef93af9fea243cc4efc905c2a0bada4a3122c3e9624330c42969d5404eca306d8809cdee01bc97b886cb78ea8993f216b1cd853e0f77a9f57b9f99ff62ed84e576e3c2c4dbe3f1746f3ba6a88df5a9dd4ebf2699ac9af5d00f3c0039a5927a920ebb4608051c775fe6d0e69f68b01608fe98e65a3815236e0b76beb3b9fe33bb4d9c1602639af7387de057843018b58243a778d155ea00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b213d25b75c1e7bb22afbe2ce305a9cb0a0450cdd44e85fe88f74720856a6f1dc913c94b56e69edb79462c200dea8efb69712b65f8ba03efd2452a0afef73612a91b63e1cec1eb0129ce435685078276e4a1b36f0ae803bd63dfda881c6b7342b45d6f226bbb78a04c1188da821a8b498901b6a5792322eee40af351a51f43647df9f3bdd2e3f2bde7455578b5cfd1306749a85ff9989079ea24b1af5d60f8d6d1b9f5c272eef6b31cd45c0f0128e02c09f5236489d43e6c8d3a573556ccbf3d40d15761c0c205c9f114412e629faa97edc199dce4046ebf97758642ec1870e4214248f5298a19d616cf30627ce377aa26ec8e71fa1a7a7f23a057de674491f2357d5817e3fb7e04cf473b6d4fdd988583bf5ae5a931394ff5524d32a469ece436b7e0985249f78ca9fdc20981e44ddf8ab128dbcfe64a163e47cf7f0cc5c31deebafc62cbe8fc74db2990e6ab705e74b7ef077265852cde2493fd8f7679f7f140e1d5792e53cc39e7ed8fc385a5cd1fe75e6decaca3716b1664a72b53f87f93cdfb81464f4ed6572f3ecaa9fcdf861309e97e73894755dd68d5e3eae41c9ffd1fb16d135b840c62591ee0d536d860fc1967efb479ca3fbce8bbe9a017377eb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009093c363bf955aef2105bc54c93c592bd411d9ce5f042c5f52ccb99c4646e633113a753aae6f1173095db96c5dfd832aa0c13e31921c2be20c46a661d13bde0e54af0ab3c0e2a58b65073adf5fb66872350a6608bc47fac5f41d78ab066556beda4ec9c2199862b873c0362c0fd618e8384285de5f0340f3672c7a0f6cbe2e9c0d1cc73c5f88ec6aeae704eaceab1901928381fddc8b2186a39bbf8ad3142f2945833946497b901713b51eff080c989c1974d91ac86c806063af989b48d876a8485d15f3b40649d456f858af9e78741922684dcce25bc6a1c1a2c0ae33db43c94caacbb06df81caf7f6b2b395c288fbdad9c699dd730edabf177ea8d7e6dce8a491cdfa62464c733159671279c15e5e6e590614ccedcd4af3690a607efab66d8ce994b5ff32f9d263fb00a13516efed4f328c628cefa97ec7e1fab98af6d61342593659411f3e28bd5790b1d5bea01d97061f0cc4271d1bf8c226718d7e7b49908e6db2f3afcb3fdb013b45ae2ac4964cdff334c8164e219a09e1e35555db23e878ee9b4bb514795b844b6b7ae6fdf63525d86758949e5797d8d25d209134a411fdb0feabb50649a50512dfde0e506198bf12ed23a1509e41838f7f8768e1bb9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020af294fe2677196ec0f957bf03d738ab5bb203c9611b75974f5ea6390f609d2409f60f4be2478f923f2c020138367062af3de77ef6b9248899836588ce9ca29c6e498a9564a649d4882ac6fd0fbf687edcf9476d1ffb19907213f992262331e83e2381c417b114207598fffb3957bff8a48156dcc05b629689c3e73a8edb8dcb377115d3bcd327dd1ed71ea37946ffd8a3bfb37801ddc256a5fd0fcce4dda2e3e2cfe2eed41e5b0208fefe8ce8e8b0ba12945acd573f6f76ad658d1f797144199b1c33ed34caeef6694e85d7b55a366073f2d2c5115a65dd5d3bec72c34767aa769fa289d8687745bb595a1c94a5683926aaed340d899ccbda16c2f2d65a471718ef60b6c6bb5e79756ba59d8f301a696d35322ce6d63f6390e4075e978dd797a61c7a57b8d682e7b6fca4e6cf377c128568dd295b50c2232b3a2c5d970852100d2dae6e222730e493f1b4905c2dbc6d5d08bc29847848469763e37d885f0c696ea8cf038e5aea051b09b08bdc2b56d14448e938655a6e17580c249df0d4981df7873ca81606d9b10918ad3c3124dfc07ddd3b4271013dd43d3ba73fe3a2677a06ff99d88e6f44eee7d17345df69ac0b783cf3baa56c962fbb85fb41e9543d80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9b0416e2d5466b12e21a599265ab07da39067f7a6985892f121d0f48403af000d1cdde091752f5b2af21ef157eba0f5fbbba2f822e84e7efd53bfe17b42c9c6202b1a19482188d44b9f6c6e0ab6e959a38a1e5dc2848e219ed266223f84518cc9f29a11d6b039d146576cf41a2ebca9f857349fe8e110d7e0d53b716add754b25a9947df48b6520d64d88c707619af15524c4aaee8e9402ecdbe49ba9b658033233cb5ad544a06205850f226a2dc3d91a4e8523ef95edb30e0643cd43144b7571f3a26e2b9997b0486ee0ba2c16e52e5aee10d1fade712aa177bca0f33833a7d92a0efd901f767fa0e79a8dfc58788fc580a189c11266e1018fd83d418471c1aa2cf3988369de9a4873cf83c79aff68e693ed37583929c999331a18966f070a6eefa62d69cbba4db395b6701843f9fd3075aa38954b9df0feb03395626000aa8ab2d70c66bc7da3c52f8eae7571513f39f05832f06be25998b969c869fadb85ce4c020ec67ac4a84f190186717435c2390042ac483c3a279bc3ca9cf34e6466c444e22e128aa052eff9f741975893d00cb7f0bf8ea0c65e2e1c4ab796ac61d59a4ce066add6266a4fdb526e17a94243790763d98a2792464db856e4b0d0d9a600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001302d5e7496f725fc6a9ba633ae90ae18e8254c03521df59bc02bbcd9069bb03b6de999c87eecf7eda7ea6d688a0e491e5b0e4162ca2d9d39479f5a279f530155af188c6994b48191ab4a7f3dc46036c76c67c4168863aed62568b2ae3f387d1b426dbbf23817fa0b94b0e584a8dd5d3c62206c4917eb0b308a9bda06c731936551f25e3595fd052e052bf2c2ad6625346f57ef0d0844ab133656a5c1c202be737878be301d83ecdc707553a2c16a28ced6388516462a4c3a2018e2128d5fa883a8070cc1c545115cce2ffaf52897bbcb12407162887c9f3ccad35f3d7737b96a99141ae512c41797d55f468dbbb176882cbf17cc996a4aa200e09bc2133ce1044163d03870fdcd9df8f2a5222efafbbff6bf295cba9a019f9c5b8767d64f436ba5167a198fe54376e1a3cbcc5b33bdce41e7b7547e00d7d4de9029a4979f5318bd3417482401f42f6f44c0ca98cb1f074e6c93200610b8fffc188b6d001ed9269a638e3fde48fd6c2f1dbba5d966159faac1e9cff4de461e2431f033e476542de33ebb3416b33545c0d1a6f20f2dfc2e7061ac3fbbcf390d84d68db5908bf27720c6c1d06ea154b1f40b9800f4f6beb16def9f1f63cdc2d1bc7e4d5dfb9bdd60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000abd715beb1f32f2d10b0732590cfbbd21866baa7dbe120c1c9626c8128100e2100e9921997b14f5896d5eec6a7aee75e862c9befe223461212d9f90521e20ee43fea30db25a38437a86ba0531ec3e970b2733b415ea58d4ac4b59f26e3a0a69ee805f183ee7d84c92a84cfb030de223a3d311baa0bf72641e0ef4460607cb9350853830f7dabf6583e880c0e53d1d09a2dbfbb845fef268d7bce32072f57f25cf1840a699049ef7f18a319e39c4dcb4098f59c1cda7d607dbe01b17b4652713b58f6d82bd9424fb67b331406654233cee55ee8af24fb9306fe76a9fd26a022fc1dc94652c0ae90f19b9e4179dcc1fe07d4ce85f5cea5ed3b5f2c51a0255f912535a17c15ae29d09b34d64c735e64a57fed5102c4c571f2c291e160b9a69f4ffdaf4562a97a7b9444e017f6d7cd63f5e88fd41f1ef7716fed5fbe42ad019abbdf4f31a44bc5cd9421b7f8764fc0f7bd19ba456f0d0b915f6ddd86db4046c940f8b9775a3bab26e194c50195f407cef4c12762608b43bad3b54dd8e960bbb0cdee518ac15f9f4740375d72e778574941e703f14dded20a5d7e158694dfa902f7bb5991b5491be325d1cd7df1d4c01aae0664e94bdf7355bf7b442e29d0dd25aa630000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b057a52cfeba150bdd9ddc17c45bf148097460810b8917d04c9be672e24e242a99aa04ad3ac8e2c83fdd6f492d392039706d06c28ed27d7a42800f1c1d02fe059566f673b7569a540d0048c3676b9df2ec2bb92a6c00437f8c27ab90ed27e44115fe030ac19794bde2267f283e286cf41699065851c0f120fe68646a744426cabe1e7514d13fcb6aa57b109dad69e4755578459aa07674351914698e9b0c38ae59ca316438515c927840c9fe21c6c374eec6211357705749928edb7cb659960808604ca5e331405f00ffe7219fa936370441bd843e062dcd99b08918441e851881ef6e4e6acf25f3810697c4e79656acdd6e3e909f9af085ac701b8e1ca2f69fb48f862ba5380629076416119126dde50e238f299ffc37f9882977df0c8ec2762e1125cd6f8d8dc0d813677b45a29f0e5077be5bf58f1af5c4d73b3af627b9bc433b24621c71c72f21ece076b9e0d64d2e8f38b1885d5b62d7ad3aa8ab5a440e2837108babdb805feaca337dadf1d3056ef2dc35cc42c68cf354f38ac7646b32b11ecb90aa3472be9b35e34c3961a84398281df0c1f4de204b7d458b2dc8353986277e19a951dba69974ae9ab690af77bdccb81f7eff5b224d302ec5f7e84a58000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092f15a2751f95f862e1911b1ddb6b03a81deff0343dbe964c0f6dd9e1223ed317da9b91be908c0ac0649c3151d1873bccf9e213411444d02a37889ba8cd505b025973cbd8aa7f63f83bcffb933bb302fdc64df787c2daca8a7f64a8ae1129d089d9df4075a5fbe0112b059e536fa7cd805dae39fe429785d8a3487d00393c00fc7bd313fad7ad4fc60a12715dceb9243f5dc080abff62c6d2cf4f6c98095a986b7a494ac6ba626aae63d04dbba674eea838ed45f2069615362913e8097024e16241cbb255bf59d43a3a90e4394851472e78ca10388ef59ae010e3555efdb5021682e1ec656c44d100954387a59cd2e31190e3baa407c441dcd7ba29e05ea32834b58e82c0a4ba24b37476901bfde45384659321fae5029a3bdb66929c700b6b1552030ee4d6a49344db4687f7abd5e9cb5c259af6a8ab3ff4f31038c654f6908db99e71d2df65520e4cd993139331a73867123f38aba068e79954087e051493dfc764a2c580b6eeb961339ec69685bdafab5649c94ccfabe0a31c1d1f981657ed0a85bb350b652255f3f89124cf9d09b2b505facd04915e4983806ce27a612842ed15c45af0f8d5dda021c566e750217fec84ce9409969225982889aabef862600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ab5e0e70ae3e46cd4a92737f4d0f2692b98ae6ea08b30e1ebdae9b38644548e74cf4abf0e1845001131c7cfa8f81365e747bce65aafa2aae03684f7828fac0dc26c26dea4137cc98c4a15f362420716b5209974ad3a503487eff59fecc58a212209a73051129e6abfd205f176d80a0ba0688fa4db3d73ba330f768b29d7bd3fc4d891ff82e2f03b40375e758c015fd8131e50df36cea4af09d546fb5f4b50f2e55a2b4535ccfa78852a0738875a5d75e133575cf9018d4af08a254508bc6e89d233a93c38a7862ba6c14628a4021e10330463329eda2eabdc090f15a8e92ad5bdee44d0b1d79ccdae63ee926f769736871510d15c4db6b4aa95dffffc8f096a04a9a4b96752df2ed8b5004499b3b0a51b786fb0f5a38e95ef6696a054cc49b3549e680acd5a1082cc76d4c524fa73b3a07176432d6a1b89fa0cfa43546a1583e8c1434bf7bef6c09b455e9831452eb190fa614f38d041a2bfd8e147732af3656a5a831adf386630a9d898349c6bfd0c3809e8e25abb0b84b8e68b1cc4947e77dde7ba5b575f8b6476fc9f183edd0aa30432deb218fa51ef8a433d8ca6bb37b82f085f2531aaccdb824949d202e911c1ebf4bd55bbcd4ff48dced41f7525a79f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024086fc5b8e28dcaa0ba63de7d831e3b8dcbf5b2bfee00b82ffd45db0f54692541b65e0100e6c2b038a08d424bf7984b85daec93711c92dd61028407c1d2576df650bf88607ed975ca611f002425f91671fb96d8ee1d968b7601f8667720fa5cbffb74e3a064d28032dce150299e61bc203651f8c4c32d039efb9126aa79a3ecc1dbc107fa2da4c4ddb4e28cad37b726b9db564a45a8f229dc0f26b955ceaf214a7f4d7882767e9d86043e5d062e08fca57c7a9724a3d67c2ecbe12102eb650e5c588b5110189ef3a1d148745885d09d53b76f0a1654d05679a1d4aa8c7edc5984588dca5454ad4f734dae02fdfc6ba27dc2810916ef0a45c5395f3d108e69347fe529a13ba6400794b018000803ee41c7c88d30c9ec2cb81f8b5d061a5775d4348f972d1e21b8e9643a649ef6e1612de24f0e92e99bd70c239ef15f3ba6595244752757e18974fdd2c2db112a20d3987eae364afcfb79c3b5d11acf147aeb03328f2554a956bab5f61deb5f38df511b51c1f360af1d2a9192d04d009d97837ae2417f7ecd03b15165ad3d41e9dc6b6821d561912c877d95fb34488628053e02f8baefbbf55b1cd8fa95c2185d60d77e361663cf7c66a3f44e8421b5971ef954000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e343a49b41e532bf288fbee5050b1b61b225d3887c8f3f940613173f065dfaba65d490d33f6c8668f5d177e6de1d7cd3714a72cec5fedb7638066adcb4084e676cedaa74bd7868c6dd8cecb67d15578008869f4dc55fa450eddfd49851dd3b849cac5eec1ebb091f3caedabeaf490ec13dc358a7e3a74b66b7ba82712be702c5bf0fb5fcf3b30db23fd23432e9278e941aa0e05cfd5337a6bebc8c7fe344bc0479ddf7a176021195ca5cd59d79d44304ac221527c15f581cad5e5d87ccb42c3b0427d1e727eb4be0841a023bc45b38099e37760fce65932f44379f718d0e60ab9bb089b954ac847bf843ee43eaf41a38d423a71e42993a6b2abc9f2faeb2df98405e0b62fac3d8f65cc6bcfd12645c126488b49d7de6145de514d5efcfd61f2c84a8c28161052da6eab0acc3c0af2a910956cc3f51a8d9d85cc0ad84036219d5d905ce790ece0a700d425f5f1bdf37e3a19159af237079c402858f639f68510fc0b68f0882ea3ed1ccf7ecbbc634353e2a876937dbbedc200d15b1b401d75a3cd0e2c807a19f7bbfb53aca66167af40a905ad771c1eae27f8e1403e47cb45dcc728691eead689f411a50180b521571ae62c082694eb7bd1a9a7b802fa0fbea000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095108f0e9e599acbcfdf51429a8ac94bda1e6bd09b8c298affe71ce4ff867647363b946d507bb853aaac07a29c5f3f72040d34a91defd5d69d535ec2c73ab10c0b564fcc075b76206170eadb605f7dc6170a399d1016b067068204cc7306b72530f8b085cbc13eb5ef2da1a0877be01592797ba0aaf1aa31bc2e21f76557d6cbd7e99bbd45f928be03330fcf517fdf82e69e8c2c3504f81282ab93001dc94376d4808764ee11e272eb00f1f09151720e2680edf58dc122371a04e44b6652e3da396f106287419e5e6596d889212537057094831f16f1059b1700c3d87246bb5958be8fca54386840108de1a2c40f8a65f05043e311954d538e7d73a31801bad1c1372c604e0f3dbd0fc3f216a3d3c9c5796e94b82d732827d097bf632295bcc232baf868a3825a4c96bfd165666c869d5e3f6a36c4b2a9488738c1b586118095055d61c23335367f3229d43d2a5cb4a4107d03e60db8a673489ac6700668563732645ab7790b0e15317b1b000231f6d4c3785105c6455fbfb9bd944843909e7c4b9067ff3c51bcde7afe4da0bdce393f7689b864e4a7d0eedfe5cfcab77296af9c4bb5f62822077bc19bdfaa0fd9331ad49cea039bf1b8167da6c3519678fcc800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008262d805c03babf7d228cc537293b794587f4b989f13bb28d84c0ee608e90fefe91c646666bad34cfa1b908982bffe03dfc2531cd4c48d335a315762e9dc4bc1bd8d28b436de7b67eb5b791cbc595ed9ee6a9b3c15a2333558083ee7f27228af57e6d38d6ec32189f06083312ed7d059b0ab7b727f4a37a3636761ec64cdbd19653097345424284aa134555ec616b7cd3a43dcb8d4784ef2ef8e7f93fec653642696e31db5b11436e614b9a52d8ada112374aff24d79a2107affee2adf5bf9dfdc94ca232abc9a86e8bc0477d466540b978386636e99ba72abcc54eac9575fc8dece8baa03ba4947b627d7147764994cc4585920156d84958fa0ac62556e386a9f30b0eb56562ab28d496ec58dc8f6e743a08abee395eccfc6ab1f0be4d9f671d578bfd47cfb0679fdba74272f196ed711d151f4cee1519efc4ff7d547942d40abcbebe52a726c85bfd2188d77cd4f55961f4b8f0e13be610317d1b3efc6bc59bc9519612062d2644a62ffa733909d506b58f504051f5fccfd746898675393f99c8a7c4a3cae41ec25beb1ecce9dbb9e585a4fa80f5f55ff7405b299c645af806df57be77f198185b28bfa6e49f01ab5f942810c10773fd080947707dfa8d12f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002aecba1eafe92e0efd956aae53963f4378337f23bd79851a25209d5e0b8e12682bf74e08ffd2327d7be35e36bf3407603688cc5892e7ce6ef4d0fa209c22fe8dc54fdfa8be4b536bf55312b677f402d7a01b2ac031a5f9fffc8aef114cfba3de4fb5c05d4317d947efee074cc833d4120790bfb449044ed98038e13a2922abab9385bdfc939665bd8cba24a5b67007ca7f1d97da94e91bb6b5c503cfe93c01003ff88871685421c5a6bf18bcdb763845e45d4a6080489126e6c8283586739c67600a69db99885fa9310922ea1db492d9b638bbdc77a8c197e7ce3e701f9b4c74d95175406bf096e239025d77cebae157f1e38f76bf1ae0d20868786632b45fe2975c1b6057916c563cbb8f864264e8a6b30329b8485397ea5969a9e59f35b78733f3beda964842c18851812f18b11ae0bd50cd3eef7c067b6b3a04b66ace7fa94148f993c72cf93db11c9e57806d87c7025a5c55aca47e9614e6d6c8ce2b49d2b581cbc719429d70140ef663d32437aa9587ec29db61799847948c7c69e7fac455cd9e15bd35b47734682c7e76a40b3099e1567a9bf89e4a6a6c836e5e2b0d72eed77f02df70ab11fbdbadac7501b52d3617f112a3e98c5b945aa24cc7e32f3000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d55c0451efb59be18ccd7cd4a1f66362efb7491bda41a927492a925e13c3a0e3fcf2c067a4feceb15f8a54856d9c6c93901c1a73c1edd7580051370a8ea5abc3925f94f49489916b3c93bd6e7c0202159fb9dc151fb7e74f8bb5ca3993413875fc341fce1738691603986c02b2253799e6d186a349cbbcde2f0815fb9f03e464dbcc705c72daea73e778ae365e886efe8adcb30d22f0355d863b821b282ab20747c7394e9172d4a5eef84bf8dd739b06a25f1fb272fa9a65896b270da8a556d0978eb2d3747eab4b066a1b4b1963e09fc513f3a95a3af37b462061f3f25696d92e6fd3ae4e3654849c4683861dab3f76be129fc6f78bb37cab9f710bc4c56269fb74e27f1085c3f3d63f410738051a5de1f364b7f837b0202c6c21e437357a8e0a3bfd8236dcb3710f118d0800c2ae5e1473700da417d782bf65395dd63acd2948c3ba1558247696d1bd425ca47d5110f5673a155973ae99bcba14fc70fe9d5a2d405f5c2ac3928ddece4e12e5bf55ade191f2ddd4061cc498eb0a9e10d8e0c459efbb4dfde0e34dc476729efbfb39d239179f1c1f94cbf7b1b4845917221d1cbc57332452b7afeb08d6cfa2b9fb8eb871505b63b49813f91b9b021861a3d4500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008bf74b45f53e0e766affcffe2508dafc37006e5dc31a2c92a4b8542a79c3abf4ab834c38ef2bdd82f41a29fd629677b3d2b519e407e82f877828d07fe4f7e95eeb3c072df31181291aada70f8f56bae5a2bbce5394d9099525787ff0a040b1680fd26cb23b583390b9a19536e778481f1c0f5829b478d70664c8ad6d2045a61fc9c3d575b3dbd97815981d47cec8e9406261d74190dc767302cc2e70dd4fdad98ffd95b1c9c14810d8df2801867a549c7f2f0162f10b249e6b79699bc4000eb0cc4d48a60405c26dac1742c71d6b7e313f0c3ab36ec254fb10b852054febc00db89bf59955663f3b221dc944df0907ead6c874aee34142980eef463d13c8f6690f4bf9f6e4f5a8a22cec10ec2df23225c4ab4b8e888f5798887003413ef401f3a9dda5166faa4785ff2a51cad07d47eb701ee48ca626f53d54a64deb835dabde4d8a70d2faa6f799a426ea92c88b56e5dfa9f70172772073b63f906aef8daa741e859b6208bc9dff2e2e2cc620193dcffe59323ff07e3e8258ee20854b11cdf2154d9b42b1376d117193eb2d18622df751a46806369de96c8e73e2491badbf7069380ad53f6b5ff47de026c586582f2308e132ff6d7aaa8dac3b8c06941c6d7800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ecac38ab11c33dde68296c6aa027de7ceded8302160bcaf1b9fce9fba7ea51a68fb01d48bfa5f04aef4a79b8d257028adf26236cbedb34ff54b87328156f20bba7d7668ba6843b4a097cb81c2ca19e12bf266e76ccc5effd2c85abb0c283ad81dd5f0e6c94f54ed997bd30b9b721ff6c8851ecfdce02df6f065fedfb81636a1257db4085fd52473f0a065bd0d32639a39a5fe8a15d19fc855489d454e4ba976f8bf53b5721e4c09aa40a00a51df2ab8f18be2ad8be7c5f0a6396a1dbfd36d326fd9c650bd19afbdafeaa03d3932be304d90bde5b9b20ca8131a0f917b43106242bee4f8cb31dc01595f295212a42fee036c846dfea44b3306e368fff45f518bf6f55b870a007f9ad0a519b6de4bd00dfdbc22440326afb8bf33673890c9c980301638323c780b29b739ef83f2d9d2f065d28c209da34040a15b3739bcb8009d28f84140880ef231cdfcd07532032a9ca5321525b5cd63c66ff560fbccbb8b587d79ff9e7d50e39215bfe4b7aab362bddb7da2a576d8ad5bfaf6c02e63871ab72040518114a2b5dc1b25eef2b2a20ba903e7104e5e0d5b711385a640a904217cc5564315131328a52975feb4d0976f161be348cd75993c87964bf26b90bcc1d60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a74eed7c2f211fb7d6ca941f4f5e4cb9e325eaa4c6e39225146fb867304e282173979e02eb006cff43cd87b636fdf5e1090ec9990d86ef0c39de6ececbd19fdaf22a50922971ef07820a51471620acd03b0cab76d7a6492f71d3d4c02a8e4f6c24d4f7cf1f28e4e7baf3179d66cbf47429a40520cc2bda8bf7b997d17072c7fff87a91d6109570a8cbf4c939416ccfa22710f048ea0d49b1672699e2ca1797ae8de65c48ffa874a7a6e024cac940feb8d6bc337e28fcab52ef0a41f220908f15f84c30e5d301ffae1b4c97567aec1709d46ffdb985fb641e53b11f127a485986289b4bccd7b8ea33177372a4517b2f611e37485387f1f90894aa99bd8af5d9d0deaed8698c8b3d9a36cd83978797113620df6c5d17c48c36df8383328b4cc64680e40b6d25aa602077b4f1062f843a14ff8c474129eae121e1a44056850219ea9a97e98e48b2d26b271fe85260aabf50b95ee60fbd5131164f64be73c3e80f77db00d85297fe2a8097ecc6bfedacd0787425d05051f1b6c742dcf590672ae0cd2ad9a06b3d65caac5dbb0ff0276106fbbe04a8d3e11ea54fbf64eb968312f01973f148ecd819bb0ff5ae6cdf67c15eead49d02fb3d189bd359b4e53a60bb498600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f10fc48fde43cfd3f39450979df2d65e01a10f70238deb6f2d850fcb2cb39d3b4f7b122b1526504b2ee8a09bea3362794cf927889d5b69293610cbcd1f77acfb8636d4734fe29b334e76df55546adc43ea832eae09834a385fcb824f95dd257af8244fe02d797c8cb5145e020763b76f5fc5b421e76439e96ef1c5031f5157459ab8386cf977dcee1971baa8198437ae054ae7c6697001a46d52eb56ee6112b54b13a6b31cd70f0036fcb0bb7fc17c8d547a4c434a75dd96393810ca6fb27358b6c234139a3cd704f8aed1b20b2c5d5e30a6f5e94abe4627a6cb13d3d31fd4631d66ddd690a0e390209ac0b51fe8c35b6be2221ad15718450cd8014828442ff46f0f43680bd7c075ae93c2d83940b47a9194f8454228c0d16b278f324c43082ee3204460a5854d8f9bcde80ca48e5decc2039afb77c6a7ec03ec80fdb320bdc4c4313dabd2e53e8c47c881de59067d600431b3da4a787fd4044accd3e210e65618296cad853ef5deae0c2e1fc444c27037f823ef2e844dafbbed10c06f0da89251b9d9d4f809b78c2ffb9c5da3bb5bc2287f270d66395117be8ab2fb0221bf7ebb6829946078c5b38f82df57300eb87d30b353ccba3f9b0c0f708baa2e2ba8400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ecd6228efd2f9d6dff764645efa8b954e0ecc33cdaa82f1121f177f8a26714fed12402f3427c50493293f7610f6d6e7cb2a9db3c3764f462311b0d2cbb3f5fee26b33e49f7691a1a1f7e7b381a60796f07dc1366cfa53ab5d7cff1b9a6a1bf8ad6328ed99093e1eb0fb400a25cbb458c1f4ef9bd8ad17de3ebba8a60f53be2455730227614f148f164f14912f63ec0d8272ef89d3ed77f3c2bcd3aa77f5aade5714f5f8d03bde061069c3c4bb3a77197d448822d5e9a21b3ec66104f1587a3b812d8d6abce1586714fb90a16db367a90c9bb769c7acdee996d42ef08856ac59eb86d27c3c05e0eb70c4573b3ec8cca17daecb7f74be1389b74a520d844644b1db61cef3d3fb8ae93e5f17673fa823fb8f25918a9a49daa468b4deb820450d8db86e6f33e0b7983bdb398e479495ccecdd249ccf99a4605909b34efbfd549f59fe46a2088b5c5b9a3fbdd9c885461b691bf64b95661bd288bbd37f04c767b6fc5f725ef73cc70be5f648c2701ace5c46aae6845d19ce1fb8d3f78955b07b65dcaee559913eb8b05c5c9b78d672082ce259d0332845d6c2441a3494c9275521d350fe08bfdc39eb10231cfa4aea6f1957dfd3281d25669f9dc356693e24e44d8800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001069e948340dc344ef9c733c9e87a21e28df07e9a067ba326de3e03547b5a8975e5431964a1ef62c2a654a9631d32ec132c87ddf6bc34781e9645c7d626a0c83fa2bef33ee907878d9abed7cf44e19e038f7fb9bb20fc66ed5769468b595f0547ebb0cd7c3bd6454f7ad82583c2670d91622df4e8cd86aaf2c58b32f1a45b97e835aaf4ea45737ea94af7c10b7e490784ba467452ad326dd169a73976115e0673ef4be93c741f211bc2fb1a3aa74f9f6cdf22df24dedf999b95972ae8eed15c3c29470f4ee7c657afec1ebf792ce9d1cc03a68ca0b7f45911e3e074d3ac43074ae691a5217e1211e9b58e35bb44331007610a533563e1959b64d4f3100f22c0889d06b7d0c386f30a782b8ad8124ee9b4784b5a10b948e14384bd9dc3fe65e14b62ace0ac871b8fff8131e55a5be30f3b854cd7dad483050aba2e3db90ee4dcccd74341f33695f8d91aeacdf6859df8d67ba4a3f38ed469da07f6ac24a43888e85de7a40625b1e570f0b246fc4fe5c708db12fbe344fc8670c34dcfd72074da4f975bd57c65d38e36c90f9bb96fc9260fd38ffa2d584e249c4abb54eaa5a67726492c401be54aac71d0fa61e2b77841bfffaa4f38b8340b5393b49810899078300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f91558215c29d98d216ab9d07bcb2049967a32e1fb1603bf707f2545dd6f4f6b195138c877b720db3672d6c73259a7fce89f5cb98be2f957c1ca4f75f0ab6d9a58569797fd2be787f940bfd1b127b5f2319574d02e2ab60fe948abf751e1fccd5cf0ffcae898bd73e9c41da2cdce3ab0930866c482c6d959847e226a740c13d43facf4d3d9142dcbbfaf6f9cb07fe9f2e7e3de4cb3e6ddd7df1128125443c2c7c55e3b6ff8f3827b79a68439b20678d763bc17558f5308ffd76660c33115f8f4539ea341bdf7dcb5fe5534f2612a78169dfecf10ed7708416cdb0471e8e9af3d71b002a84981a9bf4954bf0834e13a54a743e54d7e9d95ed8f582f99e91b4b76a258bcb7ebda5cead1741917431011729dcc6ec3e8c8a88de89d49d4e6199dc77b5dad429b1f9f43975e9ffe779024bb17c5a726d94413e92f0570f0afe71ecb4fa76d77760c4174288a3eae3aab947af6c971b1f98cd17a4d6702232da6227919ee36234c357fedaec096b25fa1c318b8445939509102d0b3391404b0b991a6d069154528cca2043a2dc7e5ff1a8c8f7d0180bb991fc7b979aabc33cdbe044acd2c2b92a5fd142a763fcdc391659ea26bd1d4befda4f95b3cf60d8f4fcc02100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002177b3fc2f723919104f34e2aa0d5b8307b99cb1fbc7a3c45026e3d5a7b525519bd6c466e49d0bc774b7324715b1a1fe06ac97ae975ee9585ab44f90551051cc5169d96209e7ab1d931f8cc4a9df5b5eee6ee8276e436b64bdbcd0e01f61ceb1325dde754e80d89088e1a9a0ba32d52cbc73b12995f40da82eafc00371abbc21349e7475bb7a5c495c604c0679d6e8ba21b5f0a7e08a60a8becbec423586503d43c03b6efa8a42d4f77280ce954c8edea5a0c02aebcc0180e33adf4e94354e0d9efc76b3a0580bff1d391a33f7589751ddf3fc9178035314a272320f87857cc9e3d1ef8389fcd7bafebf9fec75a893104d9e2696d0dfefc3e348d9e2d35cd5a122355f18e143d50a2798ad3369c180269f48dc098a569d3530b26e4716de5747390f41feabecaced3fd688c66ec5ff8f356eb5f45d2258797fd7d214c0f9aa098e88d4f156e878b30a54dbd3353f5c12802d27dccd71d7d3c3df351e8c32872b682d3ee9d7d71b8463514599eddd0e970dad0a0a5b475be69c211956da37b9455f26879618206cd936fb69546a156bf34bc8239d9be1b03c102b45ff5079bf1c6bb47ff3094624670b4727e96c2efdbb41096edc570b7167a3d9f6f0d879d1cb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000920307f38f38aa929e2ce6d52d777f85406d954ff041a5a00d211792951f4d1e1338c21c9f6167fb933b47961a0ab4600519f4238a1aa7341739f781da714595909b19ed2edd5213b5e8b339e591acbd8cb20eaa414de5d19594d5113072bb55c3c46865581df46083391a2207b041363e85e7863eee21d5a7f6cb154f78f0e15b7ddfcbb218d88a6a336a758bb6d46c47f0c24b9da908bb86f6cbf4c637c44310f4372a3507f091229454f7af431e4d3bcd0937a69f0d5f84df47630dabe8eea04b328a36c279ad0a90d00a2d98eb95c20e8c20184c1556f4cbbbba2e67454583fd73cb221c0d7fe8c2d47ef902348820feb40aac964d6645f8d6cbd1c3752580df363cbb56ce7c9fed184db7a5af442bc28316976d0d1cdec06ce27231cf70395d4c8acf08c9f676626f1f5f24cbaf20eb406ce766346f375836d009e901b55cc5ff530b105a0e3abe575c30d56ecc921a6ef54e12a2cab5f04913c79ee52ce6165bda56f758756426f44da6703b8ebf684f108c8cd8e06767a0905c5dfabed787bb3af71af16acd701887ff4fe394aee488165fa0d452f36b268c04af4f3b58abec4dae2e44b47b6ce8d79d1ecf0eba6210a6f804834ad0ddcbc4e0122c690000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000974bdb7cb9f6d5887a42505dcb72c05a72ed8825f7ad2c06f829a337a9535db9d398a9710ee905302c940f0b6e07d8d08ae49f7df5e069473c3df8c24389acab5372b0a9ab0f2ff05f4d76392bf06cdf0006664b6fe5074a64418d0513ef7afb119e2eadcece240f30c7c7f24fc0dbc51552e5335dba1c4f85f8759ad0ac4a67825c2ceeca278a28bbe1ddb04b268135da9f5329a1cf6db8a5dbaf6ea798f058e6d89df4d94ab8036887b376b7c1e564e0d7f1c102502684615cc7757faed3fb97a8d4fa3b526927ed9f69ea3612ecbe083a7d09107771c2a023749690ea3034e6070360db1ed7244f96c5cbfd8071955a9842f627d8be598322d0fa9614e9290784d77d50084390f526c095e3c2cf32ad41ee5f137993b343b938648b177cb73901221008851d0301ec23f2c4ad366674d6fd0b480b7a032188b97194df2f3839755ed5ecab870a61f4e80bb401fc4d15688f1c85716dd12d2b014c5a650d76fcf5ce22a9790517c6ca9a7412f35605c57483e0cd7c5d948660014323a6da29e1e9ed55f7f8406f6a63fe6121ee678b3d2a671fdf76fd64b2b070a24c7df27096d59b1f19419409e122f4a56084f9ff57e75221c8d019abc69f42ae3c5fe418000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085e05ffe430346edd5de8f8d349e228a9f0e7bab6b94ce4415449ccc0993d35c133d5c95e55473b804b48b2da1ac0db5cc6abe71e8a479e3b9e34bdd5039cb5370b872a1c7cc4c93207d2d2d842a11938aeaf896b0d7cba8351e2aada001ef774dbb6c177310fb332e6b33c43b5ac19295722ef0a0fc858271ed301ec35af69076d6d9ca4f6e7b0b074e4ace9becb353c6617b8cfb85299daf446792f4a48a6ecfa88aa376af7881d2cdde12908d42611407949388ee7e45a53cf86db2265af08110015e537d9f12173c661cebeef8cbf3772acd7f27f4376dd960ac0698270d4a45332d4b8ad99838bf37b6fc739fbc45325566608e97c42ff0ce00bb89b98bb8a949f1c12a9db7d1c05ac9074ee2ed136abeef1320f32763290fe889e47655ee9f07f45a4e39402bcc14b15b9ff1e817317d1d958560e5a4a9d3cb66320e4469a6d2a371a535e21fc79724be0fd5aacf64fbdb64199e27e84658538da2f0c91cdf07c015a8d9ecbce3f3b2f5fe1bd75d49ee45c9b698209197c6b7b50d6f31e1529f3a86b3f4ed53c1d688bd0bd62061f44748d79f4272c2f66e708bc461faf1b6c1e1bb17cc4a0c5a7850beb22fa9d1b27fdab0bac5dbd3c3bcf9cd491d7b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000214a6e25dc90c9a75c051b8cda56df2f19d72fb439c4b4d87bd591d03faa865132bede82801e26e73c880d97225ee8a53ada9473fdd344740e3668da5484a4f31c6e3d751ea56938685ea1761e0bef3f86a3fa3b77fb1512aa88da57967adb97fa72d2903be141fc3437ce33aa9020617ad4fc815fd644242f18bcbb123eb8875ea5ac9b565808c7029e3bef094d34495115376bed32853cede39eff92b9f5528f046537a443fe5933337784f8b0755bfe59c0f5130d575d51a6296f4413ef3924fb8b23723f762794094a5cded4b971226b50fe98cc9949443f84e82cbca229a43067c3bf9f68b9e6934408bb9b420a7d57205d27dbc2777f8139d2a962ec692abe0ec4357fa470e7879a0e63e6a0e1d4f631b5d4b79bc01ac149c38aa631b958858d763881b5e827e5a5046c52a66823212f66be9f5d392318d0034647c560baa0917797f69d8dfe9e0fe2e5e760a0840359147e009ff55fe6b59e51cfd481dd1a237bec0b36a71cc578ce8d97a644535db8d7ec51998ea392748bd15de9379b62c540e03f860525c2eb7036510b9252d07018f806389fcb21c261b7515bbe9ea2e08c7471ed6e383a238178ec4aa26bd08e520616f72ea08adfe9762413df000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092929376fbdf86d2bd7cbd0406d4c2782e26cee8bd18e17056bef3f88caec8803a5fb1d4288965f2985c54244b911bc386c6369149d5a2d59a2a2b1b5f4a2cd516111da95d68d63833cb2ffce460176de7622d4b0711710519a8ac245d420a75658f973aeddc8471e475e1490f1cc71367cd96679bebd30590ad4ee98e0fd1ce1bd7eff4a5b409de58af9d432872dcc9fd340aac97891046f6e19f821c447ba3aa3dbd168b2339463962d464a3e2ec5e631875a1a8ab4726b5417aeaaa29c999bbdc66450cac194803082816a78eb5c5bf51c8370abb2ae8404f0d27bdff042d52bf034269dae32ca09b6856d194b3225ab5702d5d6e271af1bbb1704da7d65cdb4e475a0aae0dbe6b7468d251a7ff2cf531fb1e741f9e88e4adfe3bb79dc0d3ff215d16343b52f607a6442f17214084402e31bb40d04626175dca6880aae27da2e8dac8a7fe9e3356bc2b925e2baa490cea1e67c769c30db904efc3baf7574097051fac4822cd6cb978c3e69a5108453fe4268ddb89420bd35d0bcdf5afcf87ce5481e0bf200108aaa27d809346fb8717204f9e91ba4645c54988f13fe07a06bc3011d94146185bebc0793b92f8d93585b67b303bc9234fb29dc5c442c0a5f900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090a356629f24065201824c0abb4eb2dd8956b334c57f9cf6fb955886ce41792866ab82d08798ea190ebfeac71368c97818777b896c944a85dadbfaf5ff7d66cf5cd4c78bb705e4e0ee0390d1e283069a8d98967c5d49f0f22a8997a70cca19030ce89ce1f76f02d7daac7b9435c4ff5e2560fe43aa459b1fbaeb5d1bed7c818fdd85ddfea8da3d43c0c21339f2b49251db04c02ee85f0588da775b9687a42979bb97a2c80d5c59494f354fe084604f7270a68e3b7965368be3e9e8e90a88e48cdac16f07aaa6e39fa45fd103c1f9344d4e34ad506b88bbe10caff5c29d03d4054608762081cbef916815e226434ed0a9882a9e0538836e063c7239d5494cb781044418cc9dc35db4e090460ede2308d6a7af027fe1ab9fc1935d1d8d6fc2029ff13dd0ba8f01bb40b8a0ad0ea511009139316319f1acfb54f8495a534b6bf5191eeb64b3da6ec19c7ced2b23da24a16cac870e933e13e0bf9153b54c4e56cd70eeffcb52dde7851f83e099db8fe4aba1c3be0f000d82b68731f0ed27c9893e43be18aee7825127fd4c4521e9ebb5ef8a3c63722f8e5d6647e8c722640fb83d08fb62a22a7aeedd5b7b59ded8882e5bfd8ac4e96011e9710b3f97edea0c7b170000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aafb7db8d3f864813b406c8ce254b0bd360dd7ba47c132d140e02d1bc534856d3776dd3542bf4031940ae1d453d14948b2d8b6c45b2c60ba36472cc87ca612f03750a6649d14031a187d5c1c8ec91217919d82fae7fef734be3f54c4a11a42885bdb1b64e59eb523bd4db17268ecd2740e2ea543cc63bf81038771c79254a50f509f61e23f2935d453be6fa052ea669503820d44594d25ef69c43002d05164ff130be2dc8f610daec48af198b643f35f44d3d6301c738841ba1fe7b988ed4554a7b23900bf75e5ad0e52e28f46d9ded78cce80a36fa6331cb1a8ab55c1da480e715ecdb939278306a1033a626bbb07a97c192997b9649db92a9ccc3ecc08a5a4543142611dff3562032e5342f935a2f4a84b15cd50d20e299e24d304d883346c6518bf7dab13a8625dfcc0d93e5a832429cd2c5c392d4cf509bda5b1c4ad757004ef58bcea8f024209db9c8b9c9ee5ca608c7346f905d02fe585d8a675d800ee1f1fd8cc509a4819bcad396c87ea4b3406886a1175fc01d664c5b5278ceb3856ce834cf97e6308011a4b4fb9f39550013ba3b39d71cf4380e6d688fa4acdd5881e245cd50d6bae58dd43ae9e5ac9b70dc82c326aae136c0a8dec5e98fb549c710000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a834ea5284b74967140b8731e4d2976c4fa8d273d112ab52b169d2ec4a622e5dcb5300e46d629037618971027bdb3a46a62145e7ef043e5697bdba566a19ea225f9618f6ca920e2436bfa4acfb6838dec982559299d979cddc6da4259509843d97a5c3d5438335a15d09ff5e0537a7981c55edf54c490816a5357736c19838e488d92e8409539d850bf6edd419265f0063421f93bd5e33ec125beb63da850e23481eed323f68a21dcaf20101f78dc7191631555ad3de0c8b7608923bd42871749f2edfe154904595c703e2e2d745e3513c80c097d174afa613553ce7db64db6cfcd1d34d7bdcc14df499f979db00c43ff6630564e2b81faec27866c6106de227e766e58df2f52a61c24aa023e2298dc57aa2f6228cf783876c4f564f75fad8c72c1687ff017c5f5758099ffacf5883acd634797d078a60e13365f95d02e0a501bd8fefa1b324e3b080556bd85c6fe90f5e5816789c3afce47ed00660c1206930ce27c7f9564c1b1f8b38f61d5d60ab625f17c462a93ef350128d99d74527480adc98ee9dfc3d1d04459bad39d2642df4724cadb1e93f2c8f88fd135ccf886cebacd58abe45baab8a68f184f489afd8d71c46695cb9ab9f7ed9bdccbb0c6513520000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000807365c1a1d91301cdb753e0b4709d1ef3eae181993dc998cc4df769c231fe797256652936d4cd7ca801fc01e19e433e81f3449ec305674db32631767a64b952e59dd4a5f12a1ffdbbf0bafb7f7a03070ea4c2f791e3ebd208d02f39753e66571e77fdb53c1755b66b3e868d7d2f7a7b6b7c80661517b584c670f1b3be60993b6d6c0e08cece0bea4edfba84626d1aa876cd2ae5abaadb3568c0ec43423bd99405456cc45d09a8e57594922f6d1dd5652325ee1f28b71736566fea15b36894a3e027adb458182b6bc3725c0b3886cbe7b4a1ac741d2c9ff29d61667fd01b671b09da85dfb70f1e89fcfcf35b10cc3ac859056f9e9c4a9c4910f70bdfff8efb17d6b415e7603c489dd7aa79583cac3cb8dda6263b3b5445177bf9e74d8247dbff97518fb662f5ee0dc0da12958b0edd3e2b295bcbac3f2b971eef44835b42dfb7c53eecdfa15fff448252b622296d62e7007303128f414f05c3c48d9266760f3ae84ff7d1a06ea2c444f27ca517fb6ad205ba809a7a17dc58e41e79fdd546ae517a0865dc3fbb56ed8ab1248a3a1872461ab68214485a6c1ad25b61487e7c9f5018ac42dbe9d01df66adcf2d04e41e02b32c1c53a014aa85d2d7fe20f4f22baf00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0b9491ad1e111bfc041711b3047fecb49df338129b77f6ae3c136c266e39ee30a9c07e9bfd4d7a4bd2b14cd0d679a8f6336e9088cead0412a37d94a277acc528b55ad49a5b5c2db3d4bd2bdb57f067e049aa4b92b4de917dff1a19619c61156b7b220a69b008c0ba9fff3087d8ec2fabdce91903f08e579782a2bbe1fd3c8ac3c5c0d50d56be540ccfa4864b791584025abe7fb03688c67a97932fd0e7a1d2f664ede42f6346333338357e86b8fab48172f30c2e4f97c14b620301646913a7d72fb3b6830d6307995f88ccc1d0f09263da00b76e5c42918b33fc40346f6c38fb7592d8f1905d456b89be0134dbe8acc311721bc94870cc15db17b6a6865b233379149888e42d5fc3a219d73cd0de15c46c7034b5f902ffe0a28961acc3a8f6abbaecf7d677c8bd3c52863f45790f687e3c7063b4af9ebb86240ab0d6af098ebd0863a16156318da624cd13ae6bb1485589f1fe654b97f35707193c84ba45ae1bb10efb97b82f95b98bb7be360baeff4d3e1b236154162be5a65ca2dc215ff04c005022363d9af72154aa5bf5e9c33de49f5feb83d6ad5f7f6e9505bef579250fca68f3d92a86bbf46048282daf25885b32f481e1ac906dbe9b8f0d7d95da0e300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d7201eead2b6ca1d1912ff7812733ae8170c85885272d7d53fb72a56b067906a0e15190b65033e84c256f1133122606079b5a170f23e55b5da9a74819737f0b47e11940c23fe5d3d50d5883252da9fd5512d1c92ae8acfc553b03c9f7fc8330b453b63985f4049e06d2d75dd2c905dc1f08aa4db909d603dacd0747a82537d2d4ce28215be1a696a16088c0bf18f25873b64384b4abcec2a7606cf45ec5a1021ab2cccc446131d93c258c9c3242eee676c9d306395ef8b6e1e59dfdbdb8e4f227a0d0fa51665a137df582d7cf9c8c8c3a4bf0bb3ba01a0dbb5a5900bf8c88f8a0376b40d09afcdedb5f486862bb1c7e548490c6872a2ba8bbd2b8dfa5a3f4aaacbcb01f3c42047d938432b7dbb22d40a2609ad6473bf97ada523b1fd933c298f869890944e4745e39668352ca79ad989a62991f31edab8cb553a488d1f920557f84fc5d6e5b49b3fe16f93dadcf6d291e39879f51caceafd6c97a2645ea341353d9218c6757092987994e268c169b435bf5c0010ebe15bcbba48ab026e4fa0abaab7830773adc54212e67c04a58305fb984ab1576310018910ca87c360e869852b34a198d9d33d703650173af595d4fb862516ca24c1d89175adf64883738a0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095d9fee899f8d81bf8b4a879b13e23460b3782727d42b0c9f086f67aec207553f255cae51c524db9b4a10460f167c5624df67261124b6d98d0a6334b44c3844dafdaec80e6abc433a6ce6e5bb14e531ccb28c0ccdc203d42b423a1b0eb0111ef79578c1b149122f67dfa2725393bcddfa52e8ded29bbce1246237189dd25aa2a239cc6718feced8958658a596c3e3eebf5757a1bfdf5429ddc4e1b78bba1c5aa8fb83b6ffcf6a4ce4ec996cdfbbc26336ad09068aa77417126fb9ef614f95e4e084a1455017c22b7ac79fe36c5c1e90ec504ca86c8e96de18594ebb38245b2e5e4d9678a8e83d7e9446db547834bb8bbcf53f3cf456badbe481e9b512072387f300306be745cf49a0c9f802c65063dc2bc7342ba691071e7d1dc5e427753ea01a315636f6f09ad9346b6d61fefb2bcb08ad8d52f29492c7f023fc31089d8045e22f313ae184ea8b0739a5ddf4839afcd63b4f52bdcafd4258328f27a484ee86abe323db908d12b143f41b768bea67f23aac27329840a71ec030a0a261bc1cd411dd3a46b581bbcab2f055aebbf070a598eee35e87ffb4427ce1b1a4eea4a356a08e83a6919b613b2fbbf3da260d8b34bedb99e9a7f3703a094c986d6c00cd135000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028c51774666b880f1d017da8dc103dbbb3673bc94b6b92f1bc9d21186a8cafd4a4fd1f2ba44f09a2675716bbc77e152f91f6644c9bd9ff518453fc4816b364a472653f5f05f08d15fe0b2bfd73ab46c9b8ccc0ab91394230899a0a01fcc59a4de316450e7352700a26692f0730a4d5567614a4aa7f0b986a1a1bb5a7ad92b83b14b1c3df0c89e8d4d135f5b04b08e6a1e5752fec342a9bc1660e8f521a8ca54edbc51dcd4c82a0ad31460f44a750ede01ecad18eec900badd793a74d941e31c4b0828eb16463e4157331fca7dffaded7abba9884981a6bba6ad33d11a335edf5d8381718a3e0eaa05e2643b2967afa6350e968c00d8b880041105e488e8a5537dd7758e52ddc1db06c3d386037e7988302e4a612742e6e302a10259a67191d7694fef5c0ad7fecc3d1094dad7f5b3680f6da9b0d47a61b63afd164ae1a96618540e44db3bea62df8ffd2ad147cac75083627c91b264d6c96d1cc87047538b376addcc9133a0415fef0a81fab1e6704828746cd933a99230d816081b7fc41d8e17b61f284104d653bf2a223b0424a802054e9e9ea097c48c90ddaf0211fca7068ae85f9ec66c1d7aad096cbf96eedad66e7548bccab112013ff4ab3f4cd218b1d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000177e4d9c53a163ffbc4a1cae50d42d043148d68323574d023e8725e3f10c6382b4ecc69b13981afeafbd391bae0d56df32075137c557fced41c6a86de3aea097a03f3bcf02047d2a9abbc33c281c3bd7532e1281bd4811d04f154c189d825183f02222a447f78ddf2a3b697c0b8b94dcc1a06a924344f036d25e9e0ceb5c4478cef28b05b891d0a221288e8b2a98a45c29b6235349119ab64418cce250d5dbd79505dd915dce8ba2c82d2da83e5e6d51a63e21747af8727b910e04d027ba2cebe6527e8dbbe1ad021eefd1c53ce9822efa0291f0b30f2550ba7ac48cdd7b87b8a44fc49969c83d043ebed5fd11d185775010f0708a2b4e3f8d0f782e120984a66ea62982ed212f483358eb643d77591b4f2c7908da0800cedbed253088c74d3cc0439c455e3ec2f3f1d56d57797056d8bec7ca5a43e38bd95684fe30f69635709e87370fbf4b32e9fbdf02531fed886041fad6daa1b84c2409b6dc8ff9d33a8eb3b79706d7d35d2ef01a880afe9a8e3111039b0a42b70f9fd692e8ac0caf394c7747695c3d5c501e36ef1c8c5b2e3d12c66e78a0a4317a802ca47d86f57b27024e1d32b30dcfefe3bcaa9d3b550799085c1c3062b572d2f3159b38a4c6bd7226000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ebcc78bc9cc5848a033d02cc81595b4a943eacc017aa6629b32d818eced35328df10fcfd83958a2f9f58647bf44cd09c1e3eba669bc94219c74cef17fba85aad4e8e08a9012bd99db82e5bedd027a42cedd71d5c4a00e7a788cd92fa009f0f20c475185fbf28ef3132af89c5ceedceaaed252cf8b8967e57a4b91a29a2f5581b693aebc425a86f58bc097d1150c62c201bbee94fc0dca1d56722e6cb4fd45770b6679626339272a017268bcb5f0484a73a98e6887b6b3714b5f489f784c5741f82d5291e897071be473dbc61fe4caac5d8e2354e9c6fefff31d833d9d8c63edb1e679446c1dc43763e8c8324d67c4751b0d254055de35f0afeb9478730f0fe1a823e8b58d48284ff84bea60d809c288c6b2290b4c7c68009d9166d2aa58a5e70dfbb95686a26b8e0b6a97cf612d6c929d79997b4961130dea006c6f0946ea45b0e8b28153beb9a337d4dff1889f5c5c28c6bbd8c248ae3444bb5f81c43683134e5c8b512bffaa9bf665d1245a82c10d382ef740711b083d002b11e6b34224fb75f16c08006d4ea3ada9d1505e5ff10510629af20e2010c61d87a9488d895e7bccf415e949668965bded93248147461f5de5579e857fcdf0869269a66e464ee00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000427de12b2848ce9e26a4eec0862151ff846ae2d40bf1718d872a4a34b5cbf9886e023bbf1e1339c98ef1c4cec2f96f3f0fb71d22b4a079feea865d6b8da98b6c1cc0b5408cec749e41c5145cd0c711c2e01bc9e1c5874d9abce93d6d518e7db7d34aa4e8889fb8054a00ad8ff9d9e83c77beb9498d431471ca285774757a0e90ee1a96a8418a631d9b81b6f4d173a7ddc61815b1b0c5eb5853b56e5ae9f40baa3abd5eba480fdeb3c3265a040498d4b1f702d5c9b9eba3aa932eb2914c7b58f35fc0a07a3737af1d1c78d82c91361660ccdcfbbd28feb6922e91670f55bd82d6f2fb624b396acd99c13c8e20c8721af2c601533ca298b381de80f8af4d094d6824d8c542a8ec9750b3a5ad54331bd1b51678c8fd8af20ab3eb4bd4ea04b86c4309023fcead4013fc2919fcd224540367e1ec1001c3d462f73a3a7d7dbd3eaf447c8e2e23fc3d4ea3b0083a48ec1473ec3f604d40d7a19592a80bc04a845142362cdd3d34289ae9af3018512fce4ce9ac6882b0cd687e1a7f149a2bb1395e58ebe033c3d0136c8b687e01513da6d6d6d208fbb737863e5e11079ebde1e999a298dfefa63ed8da3bd281ada70058294e48c7f5ec232df3821a21595468d18c3500000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000059f23c00d4e5ca5063a1a92c972d5828744bc3cba050f5c4f5cd7feae63f89996626d9867b6a796a15f19af25bfa787538a1aa472c5bec9ea469805ea28a48cc3bdb171b5379171fe23832b57180bc2449506eb26414cd1b34b0771aa1c76e3e1948ca4842d59f5c4cbad6566e84f77145edd7199480fdc530ad1b8d9bf5856e72ad6f8b4e31fa98aa7dd289074ffffc132449b8ea27b856105ed066ff805632e95a0407431daa4b74d952dd17c2252e70b359c86ab2d3ada9acb606b82e2a97e086c39ebbab803a5cbb1a4d090787505a98d4c61a7ef6bdbd9cb1dcb779313b300304629251d5064d8148566db1f9df2fe39b78e7c890d47369310f0c1d3324d68f2d8d4aa37063e42eb13e3c849a1f2a2d351475bec21559de0fcf55904b775eb460484b836f8115d2a04f110b6f3f7b7b024aef5ccab4d426b4dabdc24a8b5453c34e1d7470c4ccb4e12f44418d4a4c41952d8b007ce4a7d9642df6fbbdde7b8121f4003f746b9595538d39548002fc234a1b3e30b640fa79b8facb588453b8cc8cf4f22a1af8ef919045ec4a39e0f632a710ef6a057f72494c6295b68d11a3dfd271fbcc366672c14c1767f29769d1363e6f1e9746402f694f54ad8214b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009af534eda43a6750119642634e811449620bfde9a6e24768d43d5cc96d2ebbda3ca31f5d0d77fd78c9dd2f5de8bdd2fb70c779bb42ffda66a5c46fa2d0ed3c00074a68dc3aaae4f139f7cbb387125304b406b13346e0583da7ab95232df7fa8012a2652555b61df05b43bbac1cbdf4f2c3430b8143ac94fbf9db39056dba3f4a97e7113c8daf310d8cd76b760f1a91cc31663731c40559e8226194715d08f49e27c30d8a1d4e98af44f4ae18b75536d9a5f4e7873f46a9d21fb1afe7f49e0fc662c1815c96b3ac1a16f2563e636868d0b7487d198e4694f7abf8de95f921a3be9c451a9b1235280b7b2f55f89a64fdde707f7443921893e27420aab2dc885e0e95f6f902d7927c117a22bf1bda62261b1010d896616fef26f014e5c19377dda80474e95019f76003af76d5e7d8ea1e25f48a43a8a8bb45e77fa33e4bfd05b08ee8b1ba1723ddce347dac84824e8a205d27f8d1478a09ba1100553999dd820e554e5620139f42161706ac8687d5c3f3675d1112aac558f3203f406b72f12bb52c9de863cb8e16b6a4774be31940dee2f5baa31a521b63c505106aea95c3804a5d2c1de089995a66f82ef2469f3ecf1a487d4ab7f3082d894abebe415073cf00be00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a72d4264cba92dcda4310f7a9c136b25d7b96f5b8d6238c003017af5c6aa608f144af908e07c6c0423aecbc07a8baae259099954c0b813a81f2ced9dbd604b1d83c9a653f833d6a142061843dbd3950a70b2d3a6fb8d159b03e4c1224151279bd740c86e643e93432386da3ecbec59f9e125dec16739e57afc9d9ed8b1ef0e0467878b6077f218aac8114583145e26f858f392fd24f55517783f07944ee1074f9ed85f1f0a3f204e2fc188aa162fcefb1c519c07e068cfb7ade70f77ee7607b8fdaf86b6811cb712e94aa5b515d06228ac24582f866eb9c86b630a46748d688a3b9b0b9d493f4661889e8137d0c43f4aa91892792c2fdb2c1acc3534d155eea80940efdafd6d45be618daeda1987e62c36db8cc1909eff1a1c09afff4ae0c1de447f8e3c644ab174180032d0067fc7a9d6ec009e67f696815bbef4f5ed125b2c3ab97c037a54d119fac656b4d59cfba7a14ea86107cae956f5b6b22250e088c1f578e27cfdace99dc9513cdf12fc13d3608e198f8336057bd23d3bdfa4db6dfb296630d38a31b4c043dada9fc4c626c38a8f826500ace0240dfb041f55a5aa67019d9b26ae5f9680427fe99922036e981ec81496c5b3c237d41b06df2c3d3a20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a38525fa004711b79dba6445ec269a53aeb155549ad749131749fe76b58d10d53c4018229849419fc363f7a103e89d3a0761b0e24f8e3884362f31a9045d981ef1704d355032725afaae05522fa10ed125fb7689d19ada1d0eb78c777cf29e0e111c7e4ee3ed1c276bb6ed0d2225f88f8a4145f81daad5ae705d15aed86e2b347ce7afb85499dc3b24de6ad47bbb34b5a6c2f0ab93eb5dc4d38bddb23a8f5373cbe07be21050911e1b552fddb08959afcd0e2d36edee5cb60b977211607c208099197588c2860cacf494d4f41c28e971c6d46543c64a2cc096b7ceb3ea8270903f36c5ef590af3d6d388a77551a2e4362789879faf7a67dd755c747404db741be8189a75d8a8f4a0e8202a653ac91f5ea43f5905a9807a91c311399b794258641916769bb33264599e498e0524505d56e20c4be69fd4baf042294701ba3f44cafaceccd384941e8321a07520d62af7969cd4f979bebfc2f0b7c8e5324c910bcb49a24f8baa8b6004e603a2fbba804794377dc709509384fb990fd4e2c4179aaf3308ea5e9aa9a029c6519824d5b0f5b79bdf7560bf2bad42790c975ef562e17d82ee5100953d65b25513cf9157567c18f7bab04567763db0ee80bdc7272006060000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a364fb30fd6be645a00de9bbe2cedbc956de72ab2825023ea880b7b02a77656b96ab399a636b3f5316f87de59416c5624ccf917301402589dfa6ca0be9068239f85f6ecf4eb5088a7acdbefe9053662d7a3f0d3c2a04a925c850c4ad1c080dbc09201becf2b089f5f5f8b7162def1885c06c93e418f2058d7328a83a252c79dcca7c834fd1454f65207c7d9037eb5a607c39781ac3c377e9bd77c8e5af893a0a9e9adbb613b8ea21574a2823a2c2de4a9a9266c29cc70e11f12d51d9040b46966e39533a52795fa7f0d5b6f7b110472f86fc09bf2a726387b58faa95806159565f5b6d039b675795d8cf1a0ed3a571ed4b6ff5d353ce618a717e92ff8f41759378e30cc2d3c0a876d0930be4dd8a63e08b67b8421f54f8c1c192f0bebd613590778f5d373b004477fe7297b6d4a4fb69776dbb574b8515884c7f642137d9dc088dad0b4798d7ad032eb9b3375dce658b9749ada541f6206795d6a8e9ac83a79512f2ea5d4a0be0afb6f3e7a70a7b0f715bd1ea8517675934489a35a2b46d6f1ccfcf8ec0b8e170e6cba35ebee253318508d265f63b3a4727db6d22afc0c50ec3a30355c6f87deca8bd42582a5deb79cd93f3062974cd1c109d5ea0d05c884424000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094cf637447e892f3dc67655da881ecf9977b09a4092f994135718eb9b7c4ed606cff2dbe1824dde6611769dc7609a8216efe192d063d8a8a15b613c9fd2b2294eb8d33c82dc4bb38edff87f1f6eb7c3dd812bc247cf2e536e26e29470961fe90875135e6a85d1b6ded6a0f1701590a5e9e31c161751e9bf3d87f9d8b3253df7d3a8a2403683f489a291fbea4262a42965e1d9368614cdbc8ff286642ec605843a682c431432179a7b521f9dbf9f00a447a3fded92b87d2274f8e8b41368a53fa626ef07a30ed5526f44d199862a356d869b89eeeb08a979ea34fac10a4dbcc7fdd84d70b63b9508e7d488a07ec1abeddde26e09f97a09306de76c373775bd601c63b3c0828ba38a7b2f700eb05d0900e1b82dd6ac3bd37d437e20f935c8a2cd958de829cfad3e4461d4ea070d60fdba4c7f5dac1dfc4e9edafcb59ede0fd2aa05be723d60fa408e979275c390bdd42df45478a980e045778ce89b079f8743ca89203ce59a0f8ada4ceaac44bacc4d948a9fce0152a1a2b135204a85a4a9fd41cea97a919c15e3f5e32989d9f478bfdcfeef4c34f819811a0ba55df824993a3d8726c024a53e05928632d9d4f244b45092b06609f1f6319f77fc77957d08a15ce000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091b0aaecb013f4457725186b688b415bc2a34b578dc25ad21dd777ba07f12dc4073cc73a56d2e6da2dbc7894b6db07af767a205e688615dd26c99c3a46d73b0af8e786052899991ce4e5cee7998f906ec95f366515b03af9991b4b0f5dec9e308d7fc8108566030951469e8e410355c903b72f00910598d483cdfe010f2db751696c508b9b17861ae7960ecc1d27976a0198c6505e591147f1253155eda8113afaeb54e1ccc12e0bb0c9a99b9b6cbf800dfbdd88e8049f08a14edd878a03996496b051f756720e68349d7d55674cc19882ad469839f9c5b922bf4db4782fc79349481345c6aa46c55f4b709acdaf21295b90bc4cce6f069433fbcdc95e150099c3295cd80ae023c498c16102c58e01d8b2555176864ed78aa26b2aabf816b7915ee6c441313f01066e7d2ea9ca605dca4efbb7aba03db882490e0222ab238a5a55e7e8f5274b4c042753dc28dfff7b833f895a98902fb9f716fc7adca8e78fac8fa6bbd88c3d95829b0d39d254f8f80352919e34a9705d349f61d0d33413d4893dcf26593ee18644fde4aa419dd3920c2996899093dc0fd5923300c71e26be2dc13d5bf523caefe8977bd8b3a5dfbd151a2b20855ab5cf8a2fda0235f2e9e51800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009782e587aad8471dcfa89a365f3ba9cd18fc5e7b142e3753a55fc910663c1cb592b5342c94cb3e918d9612fb478d9155803f707982a9a9cce5ab22d720bdfbc7ece79cf33f1a4c8c36b2327a7aafb6fe53c8b37e4a341c08c51c8f61d6af728708ea40c4d946d7a6605aab688d916e9c58251632614b27a27d4252fe6eaf31388368e2e2736b9d057296bb06974b028c9535b2eebc5c5a196c8468c3d90c0581c67ac702597874c89c3d8c5030f70dcd1de0f6f19e76b62d6c8e16e1f829bd35c6b0379fdb2195ef277c6279001f8f4ebe4c82a4c9951fa29b1c5f93216d03f470ae6cb5f05780c7963d2b474d74c950c0e161f86b04a7357386da89be277087bfb1b20315619efa5414fd94790150df37589d388255f21ae04b18a35f36e2147d8dbd8c90d8aa9dfa248874c5beab6b8263e26ac2f1dd1a110c643f9c1649714ad446aa16cfb3e5aa702fb83b8cf8ebcd3d250e1b7c3c78bbc39890ed8feb8e098aa8585b1aeda71a2b9dfa1ce83a5f12abb4e6f8673e8769bb23074c6132a9be30887d3cb79c40561db54a7e9f865357c7fa52a04de0be5bbbd8a90acda4abd1c0ce33c0381781b7c45a89f364706002081dc2228ce3f39f7c7c31a6c9cfa400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ef2700c367d0a542541dba6e28a323f843449d8ab40f5b0f49ac13df050167d154f0d206735bc9b223c7733325cd5789c94bc1733d16a63ebb8f081b6db6dbf61fbfb34fc5ade763d173ccec6d3865e297308f1f48c7ba77b953d3e6648ff4aab313818e401c73efcf5c8a0b634fcd99017c8ddc4e86e51fc189520196c82a36afa0d3add8366d50c3796fb7f85da18e6143ab0ee0a59da6647748f3071a4b631abfd8f6d027db76e0f206c4bbf3812256daa1c0a29bc1d5081069d58ff7e045ce199b40eb93f54ae2cb8572d84ed6d08dceddb6215b93051aee0717a333e9e5ef8a2695584cf94425a4875541b66c41c21c699ba3f61c7c7e5ee37b626271bfe8b50ff3a81d097e9c53df2be1e03cb0460e177a86b7aa0c3852bf76b75ca5a322f470716552ff469941f78ffaa7840e26b7b10010f06e1afdc7204d1cb03826f5b44309688bd7f9bd39e5e973cdc0a7f973cf1c6a09ce4c2fb894214a2aedaf7823b0bdb806e3fb788bda00594880c17a1dd21ebf9c6e70038f1e89d4dca1e9012ed3c0542001c69460b14e193225c13114156825e21ab17bdd255cb57cff3adb6e5d8ddfbf0dfed89620d85ebf7e751258690d11198fa8c182984226f472d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ceb421df0bb8a29074d6d679c63b4422b090986921b63c49fc110d75700e1e6c63cf0d8adc31506ba2283f37d95512611dbd5906de8a28cb69074eafdc1f848a4ae4d0c87214d1cbe875e6a41bd59f85d05fa391a45d9dbb698ae74fea88c2453954f51ebed9a839de3a5c6a1e0b5f8433cd06370692eefbbd47ecccb17cc91ab283f326ac644b1a4e37496475eba6d7f4d7063af6d6d656a7d36dc4860aade5d4e1f1cc3a72da997e62d0b78aa3fdf5de4b086631b7fa161293ec60012ddf70876504c89ae025db55827e8cb9ed73fce21e4f2c1abeed61e8d4c1021bd94bbfb89d99a555daaa95456f0a4b56fb3a49adf74c3e54044441f8236cf38065c1854e0a218eb0913e7d16cabee62ec90038f3ea0b50502fd68651c59c630efca5990f270046edc313d6bf9dace363a20feb4fee0d8f871407ea71bef7d9556de4ae54436db3225d2a3509f3697414e3e032cfc935ffda8fd6e1c1b785ffaa90cece942d0af0036ce25a58a2831108a7b6b50267eed117ad010529da4c8567688d85d1b0448d3bafd53dc58aa56a1402ab5dab04704585b7441ee9a0f25643917dbea28feda848338a3a474942d3d1653f639f8347a2560a04bc9be208c2e763b5f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ebf0c95412cca8a9b7b15421037aaaf198bebc1683e71c4320d1e1a514ef3ded3f1113c987cf85fc4c60ffbe92d60cfe467ccb2838d6d3ebcc07a2db6347d4b2f93ecabb0d69a2bd92633a38455fb948d17c914c0f2c3856d7c97eb74994754811b8ab16a789a774dd9967cc3244da9c9afe59f8aac72bf3b5c1d8d1822304434840c7f575b60fed4df3cac44d3203300d1b1999d1c184eeaea3775989b194d72f7154c4ad395226c303e9445496fe9142b1ddd3eac32a85c3220b79511e90b0fc76a7a8d3a5d1de1ed9e51b19094220d42b7c6869eef3aa2fff5645f32d075420ebce2b97e048128cedcf9dbf0bca15885b8cd859e7ef0cd86a6558bb06f61ea69558c9df1ad97231bcee3d32b86eb734faf8ed4144a864c52a0d5b0d9d5f831ee961d5d5f89a005a30df219411371de7d361f9aa8b156e22dfd963aa38689e6e32bf527f7e88f399b3bdfe0afdbc361976d6fc4b5c12e44549b1df93c79d85b02953ddc1552b32dda8339ab369beed14f2c78cf723caee5e7e1ffa378a1d5729a8426c58d65df4ce7964f4d438ce63f756fd332ac0bf7073abfd2287db5e8467b7bb4c0ed73287abdb3cde3d960be63dbf4911e904ab8e664bdc59214430a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002123ad96717bb9c79ed724ce5b66d2d5524185778c7e8d916e5e64cbad3d0d2da885b544ccfd5a8483891fe85f1174cc4c66cfefc73256eb3c4196008c899b5ec5658dcc14ead24f93b9d7d39b5bd664575b1aa0accec5e57b6cf8e0aca6a24a0d99d9afad1ff723546cdb0ddeb9363c8fe1156ae06e0366824cd06e5027361ae61d704c5cd2c78a3b0e61b0c1d7465a8b608bc56ee6cfeeafc6617eae0b363d0dfc79847f29dc8a241db3e1a7ef75c552bd362f4c676d0cdb28984bdc42461b8f749a20dc66fcbe408f93fba7836fe8d832c3ee291b339166440305bf29fb9b23a5200849a1f97ad1e225b7680337fb2c1399f30b14cc1ac433fba2f2ec87e8e4c9100c0eb11c839815853f356745e5a0870833a5aac4894854c0db55095c0e325fb47870264d870a6cf2bb197bb551b3da13668823af41ed27084e2044a7ef8bc5f55ed959f548795922a064b258574b20d2f763065674b3732add572ac7c6127050d9586b79463243a9b2befc12833ce59fec2b7f4ab296c177381bd0af8f7ccaee85a9a62b10998031dc163a7052754b08de9685f2a350adab334ccd07536b870b466509f868c636837e4a1e265e67616d7625707b9f10ef1bb57883c7a90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916c4bb71e53432e6cc2ffdba039906a2f902368706f7a9a0f7a3ede1a44c92596a664d44d00118e918c5cbb44e784fc5ac0680e02c7002071a57f5654c4e258e61c8313c8bf11791aa22645e7fb1251b9c01dae3e6ce040da656c098afd0abbd2f1e1164a103d7b23e3d1362c6fa37e85f4b9096814ab32fb94f63e1c93a28265c274fce08bb8e80427f8ec24da0c104375d5a1aad844b2b9ad9f0efa913a319f7a735fd4eef9ddeb3604d93c2f7823012efe6291b208e327585e86d3f01c465e52a12aacc0151830d600e62dd050e931eb2c386de9b41b1eee9d5fe606472b15e1bb5ff356fdbe7a2adf7f1fd939ec6d093e1466c1af684a409ee22f8c66340f1109be2c1497428a21ded912a5e14a23152f3ba1b64757462ba74df87ac6be9ff8a459ceaff7367c418c19efa08107726d94f0977324e28bb9c89e991c5f6c5d7a6daf104dd913e111e276ad5fa50b50ec150cf17f9a40f1e8c266d9da2771c1fa77120844f42f263b8b98da29d58b05b8c426ee240eee084efe67ffa003d6524075cc91d323b4a896c19ba74995987fdbaf69e17c50427e71b338afa5b73b63e1714c4ede123f5da17041e0e4836ea2d66f6346e313887490ee38caba5b5000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cdd1ea05f6bb1626fee01327f2e03d3932a1f8b971cc3a68ecf8e82e23c00b844b94a2c38b0203c681a249a993a567f15806dd8f8944f5485355339637aed01d32e51f140b7d7e3db098292f23e1ee4dc20c9bc5b924a63a3841af9a5c01d1daac4ec1c62d958de54ea52ddc16a348e499391b379f1dd31e29ce432e7d72150d3a75a867ca1049cd83950a434867cdb92a1ce560d5a2b930f20a7fb009e4dd245c5eae2bbdf6e5d343fe22024aefbbf568ec9e846fd3fd12768ac906bc0a79ddd596c7ec04a44c3244bcd322a8de3bda78e966b85ee994db3e963c86b86d1d82b265b80a69fb7ff71ff7cea66672a26e7cd56dfd63ff4fb4eac483509c0ec8b0e1750a9557045dd3af1a5d9a4e3655f924dd4b7959e9d4d10f3f827a10c75974d33ee137a7f91925f83c7a866cea6c0b59eee7c0b567b02e06878289caba1c371d1b1cb0fba3828764b60f81fe7205d205731bb71a0e181a63091ef3c73324d0ce4d92f990bce72c5514279815d90fb58089cea6466f245e0273aeed50d891b0494979600893cfcf91c5a747f38059816bc238926752a52c00b1aaa64b6554a07ef45238f4a10e1f6230a9d266c7fe1f70090a1286237c8f8f22982a9569e7900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d5357391074b29198a47096afaee33b2f823241dfe904937c0b8592b705b1a45dd1f6a5d337d79dede3f7e875daf821fafea4f9e7adef7b0026430a541455db8d07369a5a2681badc243f7079fd4c6f88f202b62ccac5e2beb8b340d36d89f18dfc5c21de49ad5516f3982b1500f6dab4b10fd7815a48e7f5efb523d26be7e0cdb2888abc3924ec678d9e0d1d6f6511f7d1b860d0025ffe00bf36684e02b8ec438bda1de2a1332085519617a2a937702f218b4d08e75154069c270cb8b6008b591b115d71d63311d387e32a84af9005479e36a0580d796ed5ed1e5ad126503b26929578b2865772fb699b81d486ca578fad249f3020c87ddd0f29c91030a5a057424f2ef2e5ddd9e652a76d9c473b6b6dfb633fe4100bbb13221dc82416bd3ff762b93c35af2ea3a640bac460686091dc132c9353248a0f195cb6ed83961d62d938b219de42de7fd89b08fc9a0562896b4d880fc75c073cd63c24f151e701c202475e5c128bc20cb0b115a5a3e499c31d198c7f763d76b94c5ffba2f8aec755a3f48b03279da5d665bbe5f7d243bce793d09b4b187d181b20ff9360416ff22e901d76ec7e20ec0bd7a6439b625f94f26e5e3e6a0e737d74b34f38387dd699490000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a003a825b630ff72410427f425b3fcbe8f528de6fa65fd71f9406a0bf30d0305f7031c4b56979498929d4193f92b20b4eb957f1788586d8bc0f5f4934f6ab182aae26356ce3ad1c59ab2b086896fee4549c4d01dd3274ad00b40dbdd7633a8170e5ebd9c14570294ea8f7b06819e111b34868011b8cfc5f24fefc9c06ca50af8195cafe6180da5bb56e334ca31df64ad64abfaaf981e8294286c0df8fb24ae94700884b4277b51f1be8e71a7df9977ef3e900d229182e07970024bd0ece65775a847106084fc622d54be0033a8298694c9d3d37cd64e744ba62ab6f9758b35b5c627e2329b1a1877764966736ae030ed10050f2f4b48b7930fc873f7442e1a5451ae7e95c9b97ce6aa4a0cb2ef152e9a2b2ea658e1f26859e97006197bb3c8cbecbef2a6a7e78b21a59d09051826572ded0b9df4d7e2929549feae0603d339704b49c3b71fb4661a312f7de9a4d19c2b4291e187e7cb2ee74af46112664badc20328efd98f8f5d0ee9258a4975524d42bdbbf29feae9c8d442b70c0ecb44ba77e1072f532a4a8407a0611917098b8b6a89ffeb5c7392d2fd5b21228e5d56e6c3b17d055abd210b1dd999df0213548895ff2618b1454f03016b6a5bd6c11434ac0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae7b507b5ef2bef761516b9ab2f87b5c4a15514fddbfdd461f146917d790a5fa0ae43981783c29d82c46a978fc4cdb038f38ae74a93e60d774c33b2c4709964bf30a995169651cfe8a416a5847d9bdd69057d8684d3c7d7e37320413bfaba46d73aaa86198a433c50ea2807a9a62636f2552520e495c1719c859db6dff3df8b0df0073593c72ffc0bfa411154b13efeec67e55313b7f9270ba5c63b74936133944700a293c9f97f7f13b4152c54e53b7b1c39d73e7744ef5352b1dec2ee19b4534edf841f17dae57094c8803326f7cf7db3eef04e3b3ed2355b05a5753e162843b68a9e8d80c25105c6876375831f508ea8a135b0762547ba073e35e9fe714707b1a088a5aa8495c3272ec66ee4db7e02ed45f30edf126e783f4f20974965d72e5bf85e259b08fce22c4b100974adfc4bcaf04cefafbbdf4b1df54cc0629e7f6affa1fd7b732da3008c6ddf4edf3f013a13eda2f076425253a20452569ebab0603a5f8d7983c25aca871eae18da623369d39a6bc697d5f659e11a36b8033ca8007dbf1d094e6af6c828f546c89e9a93d1a637483ed7c014dffbb892e09646cf7440cff84fa7f97cf6d3420e00e855f6b5227f2a0539c9d360108ff5a1f76172700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009873a92d31c5ba7b649d6c8411406ccf3bc595a9d92fada5bb538bc00264e54452026a7388ca0c749a163f5d7bd330dc4a58007cb8c5dad6a424f8c2b30798f4f4bcc66494f726358173dba5ff9c6da9fa1b2582e9e49f813873d165c88e9f5dae9bbc2b44bff38d8e8ed7e0fe7676bab6b02744d20344c60950fbacc7ef5446915061fe4421dc44929122e8f0bcce51429fb5524a15315557d3694a22a9084cc1661b533a7ad4c34621c53afb11ee0582a4eb6789f9bd719d0061375db4ad7a497ec0289124358e87ddd51aeed6a2f82103269ab38b6b0d50ebff2c487101e5b527e787d169a77cc92da4ff7340ecc92aacf5894d9059cad66910c80cc616713fe2315c5a17cf251862d6e143c04b696b5076fba57483df8f0a4c2bd5578d5a5bf80d6d920157153218808b510432f7ac169b2318ebeabfb5f186f4509589d587a8c0d7daa49f1a3d4aa6cd485fe6d3e856857dc5b5cc1d74e34e3b637bd0c78592e3ff758780cf6df1e8d30dd2623060884de7097ed576404820248b7d442aa4d33b2b33e2fbc3799fd4a37423eadaa8a4f98e136455759382a1b393fe665cf3015770a81cc3c50cc9b51eae3237cff2fb59586d9f95ccbb9f1cd8b84379dc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0dccd0a1ae52e78726d36fb39e210949f7c6c51cfb49d2e8dd0d21cc691a13074aa55bc9fb3dded089e0c96e9b08b1a8780035a9312db48e47c8cdcd9df51338687119b320f61c9e1ad4fae8796a7335edcf8d71f680d567f857537f33f7be5072e665914866539a34c7371dbdfb088b2fbd4d3811caca42c539cffd561cc1175d88f234841de45b472c925a8db8d35f872a051c59b9cdc9a040f710f04d252d849c52d958e61d9a1d61cb2aa381c67e6f4b30e480334f8e1e6e1802203b18dea57c5b37a2f68c340aba1ec2e778905e7a7ae3752fa9dbc768fad3954d73154e2f18c503d3c5145419a120e5d92f647ac7f79f1568cd128081805f1211ab1659269bea43914f4069f12944a61d6d512866ce5af29dfdba0fbd88bcf6c197ffc318e0472983024331e43b786cb431b1ef56c31cbdc9f168e4b4802082792660ee884ff7b7b90f1d41aa58c281997c5c77acce712aff2f76601dfd3548aec2cb7d91f9bc17d3bd18a5cd8dbd2705b28e7f4d0d5984346e24c8582f654c4978dbf44797fe70761e2ce0370c3fa8f7f4e3f80389bb4c01a91b506096b3744bfb4c856132a67f835b83710f2c09b5a0ec5eb38ece5086c6842e6594875d5d4d98c500000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484018ba3ca235590d667b3f8d574a0093277f71d72b820784d7f97b59528e627896129c31f781db63a483f5fd0a9ffb0aac7185715f5160af8c429529cdd6eb42c60ed0b82d44cd33f4d73dc33b81857c65fa92b5bcce6b3fd47eb8024c2c5f563b092db71883fb27e603121bfa04f7e358d1d9b2c68e586304270195695acff8a40179127c62092c0fb4ea8a08a4d0044a25711235f11638fe2e8af3e42e69058a07c83c5765b2912feeb3b4227a08327356e2e5e8fcaea65fdcc1d6e40485ad320de036a368734869d9a9528a3adaf8355b443a245d3f65954befae96e52a893d228d31cfa44cb0a9a2b08b93287935aebcf20420bf10149f066f9656e1c7b9c82cb26d74aa7d3f06aeb89b059936be6b640f919a061fb6a4b080ad3206cc589c205b52444d2aa6cefe19a35bea20b1d39f9a6fb38233807df558579a157515e80d4d02d8ac21bf9f0b88fede42d838848422947f6adb23a66b0cbdec7ce90b500544ef64d5f1e88f28eb9f0fad3bdd1743310b811e48d1ae87d8a7ad5f76282a16dae7ec52b9e9e8050f430eb3d7f7ca455c409d59bffd03e2c2fe8c6e6cc91229fc2cec2b42668213e1c8d6c059642ee6a2b5293263c1c5e0cbce5a4a6e9d920f24f07109199baf339ddc686315842f411290aeb39a94a424cf9e21aef039b10b6bdcb635a264fddba7a7336d840d572c0a51184d441753ffac6e5d37f9652729b0dfb387dd96bbdc3ed4974b0fed2a587ab3c3a4bf31746e0985c9957254b22671eb7c9eabe0707e7f8b896f15f6f360a20a6ab40042d27228add48e36312a2f99c4ddb2b40774e89ad4a3a0425e0578aa989a749bb742752e76c802868c000b1c168b45895ff3c8882cceafd9d36553b48c8bae5643e38b9779c3360b646a14e213050fd19465d1695344d9226d5f29feddb5a172c8fe631a19b42b47d708235c64cf0ae52f63e4b1eb2d36662b77f413a6a24c3213414d3a5f1ddecc81c90be9deae0a27ac2de8340836e4789fa9059bcf9da496455aae30575637564ee21774771f4bd87efd5c39fd932304e58d079fb1a114428b14cbdaad1601a55b17278627bfde1b206e1afddbbc1ba48b560ed68fd1e13bf2ddc0e9750c713db9e0019db5e3f89402c77796a445dc25899391c203960e55fd61c793835de1901edd0fab19d9a4f46ac53758e780908af15f96698f864dcfa2a1e9cef34d579957542e41f667acbf0af3c7187554bfac8fcb18e299e6f97de53131dd2ba8a6f121822f2eaeb614c3524763f76d62ba90fee2337b464143ab1400e04a18e8da6d4195142245ebaeb49a97a32924532cea0d0607663927936c6d2069c10a829e39ce6d2c5fe73c3a5011dd0050de97e5cbcff906dc19f90eb3d7e682118fc811c9e27d21b0e5b684d841a976b3730bb97dcc110a074a1e99f2ed130465b5430088927f002111f3b8f93514690ddf08a929c53b71d0d2a07849f670d163accd900ef6a92bf6c1cd9c6a599477e9951c83dcb02ef2b59d859926a0fb76bf2cf4ad56eb082a8749325cb522b6b8c5deb5b1992c84c27379e214e99c2369986f265dab87372d500ca84298ddb68c92af5d586698d9977064a3f75ff05edf9a46dd7988162413bbf2e4f1dde1a6daec71641e502fdd7f7d25a8079654e615528c8371297a8702cc0811c97a34415f4cd2fcf13cead23986d9d6a5e8eb29b23cce9ec9087fa42f83369d8bf94f06592bce3dcf56eb8db493b47d694b4f29a943a31d851994e41bef318b2ddf1f8526d258eae4bf3e3e1b67cef9a4aad4ed728ac0110b247631085078246e0c493591a4e7fe14c86ef57b451388f02ffd34a21b480c2e2c77c112b2624d53abac0002ba235a326814d252c263a994e5fd16e76bd0bbc4b3995e2628049dda436f7f19d6b6fcd546eb02ca4780a3cf66d4bf3633c0e003651d39132962c65f2a8fef76dc8715064b4c84e188818918ea2d66571b227701968a2c24b3cf3198296b8f2919680f9bd0577c14b8e3ffbc83b01f4bfb8527f109d1eb0018dc9ae317b9bb468b4edb8d9d40a4b0272652c964e988c9bf82501b86dbeb12f5c15abce8c108eca4e2b499d7c27c6721ebd073eada768029fe18c1fbb8b10ed4176b441594faf59014372bab7a1a047302f2d188e3002284f24d75e8d7ae214504ef39cf971cddb6e4aef2d7c840efcc2733856176799322861bdc5a682d0488d1c050ee4cb9e136df66e2fc97dfc6a447cbceafc87a059f6fb236b6319823f7a9ba262d3fa9e57b670ee0a843456697ba09e52e4a8d4287ffd8eedbda7b04010902096dfc926adb8e28df6d4a4452084703694ff89a3a83ca44ed47342c2a49773ed9888b77eb1806049183ba8135a8335bee50e6b8f3740ed096d533b82c151a9f3c1460a974cf22836422a9192efe10ebb81329c7e9901550f0ba2045021694a395db4744f9e016bcc4efac00e32c42abba9736faa21992e39f11ab7d1253b71a8392087145c2578aface7c11c91d16ff7b693ed508ba86d52a1d7392063b7ebaa6a6032f609cd0ba563b1132072aca71db38f640aefcad84c94eceaa0bccdb766485b4f5545d209a33ac339b118ce3dabad094e5ef7ed298d338d2a62fafc3f62c509b4bce64500e84637fa197387b51db2bc64c601281b06e958bb5154d7fc347489dfacb8ae0f1294ac8e601b100609a859d3e22712b45b16afbe618ca44591df5bd58455b6aa3b65564c38e1ec43fed7d8938d8e4f592453203bf20a01d2f7e383c6084a0c5883501d56d07deb50e3c4f1ad856ab616bcc5d0d29171756fbe2f84f9242600000d4b76e58fdd53f6c7c88b05b8627082fe0622fa40af77a2f4b7d2de3b73159557e04c73e321d659976a7e68f1f925be94b621d95400d5bc0ba2f84b81247b6f325975de398eeb77a08d3f95f30591f5449f07df8e6245385b8adf5c3eda63f4a1afdeac15176f516b5f1effe8a0b4a0f6b5c40e7ca1bb0d1bfb3f0ca8c87a37abbcb2f229c391b799586050a5368560456007235782b1204db9c15692faa51fac4140a04a7d6cdc2b8e187a80dc93533d3aa6dff8a1a09f8921de5bba8517a0b2d8e6db3b79ec30f8bc9a076bb06d70986c8620be303388459c4ac9d59f96d3b5f8f0afc03389386e4e867741e825f8dc107172a831b66834d05bdbcb923a29794ebe2929ec403d845452491b417b6128379c50ebd026bac089ab08550de56f9dbd6bfb794c931c640c1f9a2aa75e92f5675435f292d0722f48c9c027d8b9cffe028342c2d3c5b8cbc3e9de8db870a6e73d9d9c2c100702dd3daa63de8beb6e19e921e7f25ae7b2ff62b77166b0979cf14ee49767001e2d624c45f82d6f04f032339acf63e7889ac8676166db254aef4c789d62b9f10625a0d29cf3969d257a1b43d37c64108cec19bc3bada83fac3e7c0b39ac1c42f63713382b955abe461353e8e87bd4692e23cc7a386e196db92afe3c23290bd271b0dcfe1875d5cd02171dd2d1ea770019f1c2ec503021e7c26daf338d31d9a28b80820c46eb8a400ab0022c7290d53e4d133d54138014d1269994ffbc208d424e35061955ef985c03f304255754c6141cc747b636d543339565dd233b6936316b86c1e0d471a64dce532592446083dcc7d74d43515e04c6cd523de72c05baf0f517fe2c19ae468bd9fd3548aa738c73ae61b9c36e35301892f959efefce9a1205b0a24b416fad7e1c70d301ff32ec614992f0609637dae045321a97431d3fa1ea9f081902c8e023b7f43d2d368dddacbd1c229e52759eed5195a46753de9e42d8cf45f14ed2deef31b2f00606c82aef42bd7a27aa734efa42e478a379680bc2e2b9c783517a8ad9eb09ac6b2dffb569d56a1031b326bcd653d7599f9fe09f0139bfd72974f7d75237767c35e5ec326bccf575a31d48b6b1ba4bf1379b477da014e0133e31e47513fca9719ae56f15381d4abe216d6a0df512a04e5fdd6501d01be3df23d727d0200532847503c5c9b9d8186e14fac7ac96c8e68d8dc83386c1ae2d06c4ac0c35731bde0692d4619913bb7c71daedaee035cd3a7419c9b749709936c5968fa4c55ba5c0c191621de41df75d8502cf11676bd3c49b28d8c69f021c9abf0b6ff74424e2862dcb6993eba88dec84b213d72221455e1c366a111662852df02d06673435eaba9b87164ffdae682b264b06ecb0fafc068501cd6b12502404c32a8bfbfa41499d608de75b476e3c5cedc90b3f282d54b5f523e59a90418e81b8ccef0dc240c2bdda6e3764f4188e90244bbb6bde1cd18e97917017bdc00306e836ee5ecbbf200e99cfbc2d2c8e59c8b246ff22477bfcada5fbaaf025f1f285c8bb140c4b55d46b608867777bcd306ee7ac9c5ae76e5c5e44e2f538e0503f77f187f6d4112b1f2c40cad415cc72f18849cfa94194592fcb39bca86e567030d2e5781d2e6dbcf2cc1cfaa26bb29161a2acf4c32d1700009487ec88c86ef10e4f5a5bf9cfc89f057c3340a49ec15e2605c830b6fd68a67039357f9a6c2e71c450976bcb9fa21961285f38f433a68f5ecbac77f7d3e7d85ad59cb4d4247822c511d849ef1171474faf2ffe01e14b72fabb2257ede0c317a72d3611749400f0c9cc148e7b971045a2a02d076cbff1c37da65c18db62ca74aaf711dd861e3f418759c00bb1b79b1c660ae5958fc5caf776cf3f2fa497067519901898959daeb2453f486c1cf3b68cad42614ebc54f4cc8b9baee7743ba715ec773b8bf6a5a5223fef5364e2bb8779bd3f859b8ba4b3eafa0bfb86b42ed44d78ca9d1c7ec22ef01d8129c63744955c180baf35e8c29491448d0bd336f2b3f2045fe2c8bdce8c40e312c3d02ce4bbbde85523fb37d5ec6cd33308821e675f94b300ef4c1fada4b11e3b441896bb888344469e30ad5ec9a594f22bfdffc1abc797a8734a4b942f115de70417bd18503ce75b837f9b6b6bebf328736c2ed0f75f74e7f391f1f643a0542ac1474559548f68d536ec3ca8f995ceb5c6724993a8061bfeaa45f40001a25882013014b72a7436e1958a845429600737baac7cab5d4523e0523c5b60b620a89ec5c4d3066e038fefcdd369bf3a0632ef009a3ccaec57db849e8a24af0ae2613d7dc55b4d5fc0560a8519bfaf6381f96b9b8960bceb24744e703c97bad632a69e744e75d00a31ffb38de6824bb7d764886116520abb87b0eab158a7d998018039fab645265eb1ddf106104f747fe3ea376bb95d5b1bec862c4c49304f5352a01680cea1dc6ba78800a863c026a4eab2ac7cec97aa8b1cb2378f53377adb209c85ed110a38501e8b2f3fe439cd28ed75d1150576b938994eaea5e3d6c57212efcbab01c4985d4dfb7c11166b58f1d55aa4d38bba8d067784e99856953418b108d88b9432dde23ad16a98370d54d68c6d90e064997170e2c86f0ab360bdca814186d3dafc9701115fc0639136da278be610de4eb57508427325e72c114026900fb070fd56a1f4e1cb8b2d2a7107b1569f38c577c7cabe4401b548c3d70f1961e3ba62fc55a8667be7f7d09b499bc5c6ca1c7241b625d582cb49710529523e72c7f0385e93d0cf9f87fa09ff8c77b1fdf6c50c9313b016ac071e1350f6614ee009e9c8a8ec2ccd9f055c08380bd0b2987ff762f0da34495a39f2bb024f4cd940595229f9dc618e27dbb92e9cdf65e722917785e710beb2c822d21a3f59b6c0c23d4843cebd0ca0700fb95fa2d35b984b8d034f7cc26707442cb20dc17523d8a28fc4c8c87edf7495ed24ffcad92a7023285b2cf49d41d9844af1166d26f09a6003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000004c118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000004c0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000004c0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000004c0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000004c29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000004c141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000004c25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000004c12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000004c2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000004c189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000004c1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000004c05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000004c05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000004c14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000004c03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000004c2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000004c1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000004c1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000004c14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000004c2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000004c305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000004c280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000004c223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000004c17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000004c08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000004c2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000004c0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000004c0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000004c172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000004c0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000004c05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000004c137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000004c2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000004c2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000004c2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000004c18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000004c0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000004c204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000004c0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000004c1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000004c28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000004c1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000004c21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000004c0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000004c0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000004c107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000004c2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000004c09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000004c24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000004c03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000004c1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000004c205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000004c25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000004c283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000004c21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000004c094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000004c0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000004c1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000004c2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000004c1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000004c1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000004c304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fbd7ca0076df4c13633f06d9c84244e2aa52be5b71e0ed8e30351145c5bd05456855685a8bedf914d15c417edb2635b6e904d71cb5b6a3162d991f6332daccfef3afbcac4a761b8d55dae6f576c22e01d2cda7c5c49e7dd383f903b9399c74edef2ede840433727f801011313bace423a237bc588c30c9d7eaaae40744444cdff7645fa61dbacb3d5f405645cf8d2f9f7e28952b687b0111d305447401fd2316c313c1a5569ebbce083b65eecd12dde56066d2230dc377232617218c7e530af05317c42bb96311fa2d0ce5838ca9e020642eef9fd9d7ef2c6be709d31ce85b04ab8f1f787e47c3984c47ad39c9823ada5d30c3e9ac525e3f1b226e97c38146adf36a45346764660d0066b8edd00142330083b1cd841d27763866d960706cd6d145363bf220447fbf5a7708d88616d324de3363cdc5c9e73c0469f4f3c68f29cee6e29c4c4aaec3ddd1c4cfbdc9f3a5f9a5c5fa4377e8c970a9a1f3e36b3a74f4f7f9956af82a6630dc172e6f703b1bd214507252d2c3e9e48d4b214c84a7ee7fb14d5e3ff4a570e17fa03347dba79c3735ff196a8a0f61de61087cf3291dcbe434dcb3839727b0ee52453e076ea3a1ec07e800833ee99df946f77b824c5b8ac00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b65c6cffc577be66fef0afad2fd61265be3e1e145fd73a5f8025930c8e11acaab613aec84a180db11046648dd05b302cc809c7969fee270d65ae42c13ff3abb336598193bd23d66bd503c098f4efcde7558b38fe82e0c1b2353c6da67531dff335d0566bca74aaf298c1924929ee0df84991aa8caf1809b9b879de01365565db4f89f5c541b6e758743a52c19dba922fd8befae5204c8f3abc5188ceb6ce5cd29a3f39d1d8f6853e51e8c97c523b509ef463ae846169bf3c0902f334921d3b4512512aec3b85eaeb182458ad7f8c8d428e74685efaa0d49dbf0c5df9be89bac7727c72c0b7d112039ad4dcd34425db90b079075fac390fcd16a492b6a306a5062294d9d4704126f56378621f63b2a83b63f6373df780de0eedc60b631985ac71425561727a7b7bfb9f084d2e838bb21250844ca5b993db586f528314735ec6ce079d417b18a8a138db39d4be7f23f4c7ebcc9b53761dccf125635963f850576cdb5a42d6750e5da4819c7aeb7f4dc15031d8551848bc144f71b8a8b3d8550c5e4e086ed6f003c2a2d431db186825dbcfa9e9caf7210308918adebbb6cf0fcacf6f7eed79e0dd3508c23bacdbffe73aa0f60c7fd153bbc16d98e3a7d78d2745a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005668cda389c1263e05bcc4748fbb591cdcaeb6d6b5c7d1f600aaeb1039526d134ecdab5ef74fff3e69ba19baadbd624c217ba6d193e53dd7896483f2415ca654aea4d29323f4d4483e9ca72a6c22e4fedf3288cd46b9cbcc7f09a37b2a8d4706438f281985dd47a00d6623707f6fd336229b9a472c96bb1e9184dd2ea971948563968da3bf14124d78ba67b2fb23b65b916821f711aee5f41e6ca82eeeb60b0285fefa074b825abd92316f3cdb76a4fcb8c6a4a0589cb64d1ecf16136862165d1d8e849c18a15534c24e8abbc9d3bdf565665c5c2f663a3f4734ceba7a83999252719f10da4421126bb5aaffa1599da827ff9ae85002c2721d3ef875f56bdffda26060687fa9d86f4436f93e93d36e37df533f996f93ae98f78569455ca98395eb3c831f023cc2a416f49451174c833f5ca2bd8539634900bbfc077577c6f01497794bf394b2358faa065d234d2eb4e42f16cf130d8ba10612eb47fddf55d3ef401b1cd8d4a67c6f97aa6c04824d989db0a1b84238a6041d04db41b4213e4c14b205a4aea111dbc6290bac997dfb2f10576df517bc8d00586c03a287320942bdcccc940e635dc1c46a50ab1f19f2138bcd143baa50843eae5a34a84d4e642b00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000901351e439b11a46ad8bca3469da0a0b3c2d40677b825e74388addda68f12b766e31ba2a2e797bdb0d86bbed5d41f934695086bf38007c9ed4bd2246a79425af093411acb4b8453a7abf148ca4f1e0f3e27a561287eef4a64e519ab564138a6bca9fa92e9ff5249cb8c28bbe277c3b29255e62bf051e9aee00b781f3f4e83b92f9dc89e87af87f205b55fc370d9499b66a1a582942bcdda9a84a0312bb5b7d040af2c17c4dad04eee72f69eb10f5524ad3d5c65b373a4350cd9bf697a7675b4515d3d3a82ebe7c4e7f99f35db672a1c268082e05d4e33505154778030a4ab45e8c99eb5f0aa5a6fb62b394da20dccd8a084c06ccf4d6d667acfd4a7a76b845d0d01eecaa4d5f64a919c5cb77fd0c371af65baa56d99ae24d0e7bd775c85327a26c8f4d3e4b2231733130108a94666e425265e75401191554f75038cdf8732646c7c19721c8c9944cd66489bc5ddc4d261e28cb8ddebf1004d00baba5b30b91f18bbce0c6970224cf3108c0a62ebb7ad8e2b064a90e5be1919579598402f127486e3b103fb08fee8a567f0b923ac2f21330985a13e26af46734b6158066cc84e21ce884654ca1501f2adb6cfe740c4a009076a52d25d7afe4b0e2205f5926fd81000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092f45a88c88ef2950c2589ab6e14f9debe839891d30903ca7f2a1a04353dbbeabf813ec4d21ffd458f013c44b62bda032c6b94ade7f99b5a83ca44c2502d69c63caea3779a17ea2600c3e3ddbe4c89e76cb555346e0199d228d6900908f4a930d031d1f383d614a9b9e0ea522eda22e199484b960a0d169e1903b6338cda4b9c969fd40ba1c2a93b96a0fad786df1b01aec2685196c530d80f2ce51ba2bded7749e48dad107659768456e66d4e303381308880080190e37bd450a5895f2b3cb650d1b197a00bb38b54c786850049f7dae5a702b2916edd8662da19b1d84083982ca861d5ff90f5d3c3c663c004b8be75f60e4056c7fad9b5385c4907a720769c1520897fd61787c180f9d92fb28860356b7e410b31f66de4764222c4a7d308a8c81d18f3505413c7695400991367a62c6965546a566c29f98e7c2e210c6feff4687d1a0001cf5b701955b2a59eece52e6dfd5bb7fe73ebf82205c748d36eb1d0d1d10a3c0cb4e1fe5de56cee6ae5c59ee0a654fc77cba6639a4e1acb6a1d8760e992731220c29c7eceefdc370c05ed26100ee466a787408a5119455124409e5b279c9f7b9fb4b28ffd6d6b1c22ad351ec0d440424d9d9bc8a65eb9012e4b6ffe00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a4f68be3256cedb81709211921b779ff16c3e669a841332f0f4dc7aaf9ffb3fbf7b03c9fb0fa3adecefec41e2818351238142825ac2ff793c42149d60b33d7c90052f11cc7cb0fe660f74516d43f437bcedddddb6f36e0fb857ead106dfcd5edf92979488185f138bde7961ff453dc196606cefd11874d783b678b5166cedd5f75de579f9983ae0d0b71b9d6071b2eac2df04ec5837dbdf4bd6451480767d1308ce359c10500345346505fd061d43cd45db8535daca16a2b40fe4e13686fbe71d81b8e1449aca6d882e55de313bee7a8cf3b5c786cb7bb3b9b48d72be438f58e883f1ba38e534d8b764d9cb14f2f7a2b183bb155c169952b4c78d7339ea6365641735d6c4e9bdc3ddc0268146ac9da626dab6fb84f8c9d5031a166879b8e90e9f5d71d627af45dbbc66e6f7c1503fd852891cdf4b958e657e2093bcd1dc392ca6f989b50c33ef8591805d97ba364ab28166348cfcea3fe42b99708672844f73d6324fa3e9cac7d5479973c6a34c6aa05143c472da96ddf65d1cba1ea164d2b04e7b8054368dab6c46b471ef997e5fa9b6bf8ba375a050701aa0c1e80ce494498688ffd2b997e99b13747031d9be4d889d2223deec5f2cbfb5f7281c33a592a6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004de6ea91f4d18f7044aa6aa904eb618fa37a246509f43a0cba40f15b74e93881aafdb2a7832c6f507d3aa6839985e340b00e393d8ec05219ab6bd4697a53a0b4158d9d35e7a83a2b14883eef7bcddd1d97e26342f6732625d7f9d619accf92160b2d1acde01ac31b294ae43a5b7a68f92efa3302438f618891252260faeefba64040abce97f94be1a513c654d60f979a6c6adb53170b4ff7c5fa8f78729b5faec71b205647958cfe357de2baefa5d97009dda0e886612a9dd0a4c8692c038a3718218cb9af24b4136a1fc6f136632189d7bb1fd3ed43d979869550b42db364fdeee610df76f41e6c5dc57fb189fc904b4c394ab09e35c46e4ca7da6262095977ea07cfbef8728486e07891ccb9d9370ebb9fb9a7b109d18dd68aeb735a97dfdc0e4d6cfb675eaadd903849207a03a425ad2e5fa56b214ffbd1afc7e535eb04c68160ac8730d5d1c35de833eb3d69dd2f68097ec6ca16557844ed6c411599a3bac6eccf0d77badc9a3d67a40613e12d11a8b215c351fe5b0c29c066c2e7dc15ad63347a5a326b1c16d3e82b268dced65fc22c6041b9a260a0bcc98ea10d7d11c4a516362d93dce1643970823be13a2161a2f4e152bbd975e0424a0d808a2e0d7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089b1748426eb7d1f66b468d4cd0de3815f6dcd4ff52d4bb924ce34bace6ac4abc7b65596b797b21e553d14f9e616242f797fe3feabd2c154fcd7e48c310133de3473ee9c347852f8b0761e975ea0050a2e8d789e8a0d4e7ac8fb11c2010c14606b19176339c6cbb960cb99539360885a0c77b0739a16f8af10fbd8fd5bc71f031aa3c988ab412b2170dabb1e6b8dfd6f02861ddbfdcf13aa6960c9ecb4cb93698ac9cd9b28d3a99653a10a4000fc48baf9d1019c92585d2222d03d4b29fa358ff8c90a0207bf355dd388441eef6e136841bd846cf6fccdc5f89ed901c68c555d6dc944610d3ccf46ce507a9fe5b66051cb5cc9b62befaa0a67223d5c2c83868c3ac9ee0af6d83be5079c1ee23c465c20802b5819412fead94e7be1ffef75f0b27ca3377991eae06bf914bc1fba97f82bdc331e75fd05b3ca3afc7545d7863b7a6fb961f5b801fa15e25e9eee2aafdd371d54086f459c3adaa483e5de2d9fa116892bd98b39a8e79236b8e121e0b329b456ea0597e30364496a599869cc5a957bef7ba5fdd1fafbe562f93011b867795e75e2dcaebc5fb617f7a696dc9b2957e2ea3440bea8e45160ec4cb1da9ef1d0fd69c50f36913655e16994dfe64da647050000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000173e21a2a7157c44a08df5bbf70126983c2439fc1852cd562b8447f97869161dde011e3a4effdfdf134047dcc0468a3bc2eb2502129369f83eaa799baa1adad818d2c531bd25c73ab9ea093849fbc57d719df47f6771a69a7c1a74f2236911953ed4c7a9d97c2656db98e0afdce491d645e628a8bca5f99e9ef9baff694be68ce55497168d8cf1f872dcf5ed3f1964924e04de15368b24229b638eb86c3f2e7a06a2fb48c3593707af6ff5560e958537b05ea8d773c1a2a2df0ba4a57ccf730cde82971771ca9433d67891ede729c536961ae28fe4426f0e82e9e922d34ca9bcbc3d366a7a4d4d3c4cda52285d2a544bad8ebee88286c0416bdd811e6331167f3de5fc846ce9b01e1303e8a64df2c79bf78993b2e72358692fa649558aa6f32ab2f1f79a524635be9676ae5ce3db00a84cdaf388cf37b28c7bdfcb1b465d4de5f0e5b3e9f2fae8f41aa965e2925dc518016c9c15f88c4c7dbcb6cd285e7e95f794a29c589bb6110b69f3e25f55102581f38d35a1d09b359eae219b0fd6f5034a389c29d610d37587676d221f34cdbf4cc5dd2595875a26e1938e51f3a2ce4f11e4d57db3dcecab70af2b52888eec4ed5a63ea1ec6ed60ad7de86533d3173ec4c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c962733db80625ecf93c76e07d1fabb7103ee4aad2dde23bdb3c5b5087973b7d6ef4d7233b3924ac45823719f8334e5fd133b0b38834500bc0084f69d9ad52d29f233cd50ce2f77353f868f6d648d9c0ebf48b2ad852b2fe2a697aef3a946ed13179b0f9eafb71498eca123230a7b2c8fcba7abe4d1648b74d82c4298fd398808cda22fb760cbe0a3961680cad185fb514c0a6c04b6714a01d85581c48da1fcca096b3cd6b1911ba7ee79830a588918965d9b1beae2e4aeb4100365e832b145d2855892762554eae2e99d65430fdfbe63a6a7c97239c85271ca72041aa3a044b82b0e79bbadf7656f4bbb30bd883c56d6e0e0ee3705a6b0ab6478eda9c0c9f897a67f4677f62af9b920ad90f4c09fc33f554a94d05ffce2d8a0b59b835cd3a04dab6a28ec6c30fc8214116cbfdb7af94adca42adc4c4c2205b28b87acbf274cd4de9a7e343e8fd815200a7fc61778e2263bb40e9d400f332225ac297e047c5adaef20231da4f3679fee65ac3e86f871f16d5e4f656a3f6fe098cc45e452de5e11233fe0b8677133482f7daf86b0d425086b225ccaf522c5c3fa84718e4235b07e5a0f4715cba08fee28a67f8fd9a0a61c817512a57f972ce59c3b0e62a5c9c9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021aac113c9c0989b63cfb60b09fc1f895fa467131f3b4f063323f4176334321c6b07a0726c98a72aba1df89be4822f3dc711a8f49e8878bd5b8f8ff2e5aac6f1d3285d754e0b327c650d7ca68be20ef545ed99117195a59594ef4179f3c5e84a5de7b6e84e53596c67362b56bd46970bc7a072f432d45a66b66ae4493c86b834b25ff845f74211f6f28cf4d3fdda77ae164d6b6e1e6a2925f7261a936e46c99185443bffd866deecdd25cef9a60c21093cb00573b4c763197e38344d4b62dad6b4c8286602614bbb9523d6aea9a2987f9a130795df3b6ecfc54bceb451cc3dc14f0607faae01008b893f43502edd25ecda25e82ec3c5c1c0be264e0abcc80d1f5dbffa1550f050c83301a09085cfd45b371f7101624885a3b02e0faf07992243d3d8782245eae360a415161e875e498e992321ef616547da450c496a7559df180db0ddb51d7574c1a14495f748314601ab3d4bf076d873121063e73c971f74dc92c221c8e63f9af270d5ff129f6b75ea6450cf6263e0bfb7fce12e361eb44c0ee4081c6065316eac7e35dd5121ac360ffff097c7bda633637003a4aecedde8bb6f9e51d35605b87aba16a3963eb94b4b4b3d7dc32f64f40a33d1da5973c475b700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c1edf1d009fbba2ac30306dec294a84d0a2556592495734a51561943e363831f7bfbfdb35710b13328412becde8dc1a35ddfce42af578e2fe837e54c73c959ab25b823c801dff90af1bec39485ac1ea00c86cb86f4de1113b933db184232c9944bb7f9037ccbcce9c3a8fee7b8cea23b74ae60c171d13829cf917d2b03174702999932b28a2410b49c33450f4164194ccffaa1c49e9054f613d4dddeec1dbb0bd7d9edc2c6b22f9059e5ca881542cdea5f5de9717d9fc0a1cf05612b97f6f41e0380fa167d18cb41f0c876f3a747789cb10c21fc4a6223f44d538328ae7f2fbc075b57a4cc3114399899eb5afcd6334b200465f96a5eb2fe25e196bb7513612f9b9b13eaeec8e32338abd20038ddecc6d9b4b184e450253a8f1cc955115bfffca23ef7217dd6883ef80ce71b191fda6367f86a5f4e71caf5a52a137310f1a5f5a8781b824f0934d3f247b694efa53966a92d8513eebe30b7d52f985366c465ddde3eb70bfa1a982f5708d009266b11d0a48e02da73d80063c9cfdd70e02fd30e7c8796c41bd7ec61479ecdf538ceecd63486a255c70400589aa73bdca5efa08b343be1cfdbdd5e377f9fa6ed22d9c9c5f7a09a82d387f98242683be8a2548f700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009770bee15f7c3e2b6c05493397732371d6ffb99530a2d85bee38c49165befffd56a1db9133e37b94ebe3fc08e668e5537414f5fea6790228d1ab93d9425d84b322895324cf551b123848d44178e7c7a011d034189948419cdd564703aedb4c06170da0f971ece97def4c12750b8360d512b98037821cff664beb9625d00ea44f3f125f77cb0b87835a7e15fa22cd9784ed4d97d99262cd258adbacbcbda174178c98db4c39acb4fbdb5e464fca1dbcfd62d99610b143e2e7658100e243b200cd838f9f39e904871d46c00f2c13127b29135a8f8fa262cf9b2e41965dc0cf470bfe7b4ff1deff09c3465054a060920f24d80e51d588aa827451e0a89d0da25f6d8c8d870f821c3bf7414e74df1bc1fb86dba94e3b6ca1e88e1e7c15b765c727cfe3582288f0eea534ff171da5e2800541bb678891b12f92b89181c25d7280975419b0a11477dc7097c21879333eea1f3d162e0bb493aff88e70c48bdf7becb3e46d1c01ec7bd337e172f174029da54e5f25876946350b8a28e213edd989effc8d7ce1dff2bf2cc64a9287820deea7bcd663bc35b51322fe1878cccaba80066568b8662a161ec51ddccd624d12ed1faed944c63f5526541eb6604f0acbd42210bd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002145fc196e66407e16bff7e318ca862532e31089e89ab4474a9320588be2ef1e6d409937b4a988ee71eb6be007f800685de490a08fa27aa550d0ce64a78aee54cd3e756592f05c1de807422b921069723e28afe4b41263d9a0773a5154741d4ad2f6caad2530f7538fef11cabe0c5926b48f07847f2c21f067ac57d4574ca97216efb2f81cb7e5eaffdda8c354007dd687b03a37f1be14139b08d6fd2c579b12596b45250836e4412a9b733184276a058c43f58a7cc0e8ac01ca813059b3b1b3fa2965737c8777da0ff251de3395384b187d7186b88cb88f88a801a26a00fa0dde9eb39b3a3664143d52ddc677dba547dbe80fdd4e4d740bc2e1bfd347bc66100692bdb36a5ea37e5788fd53868eb0ddd1725b9e958b545204250dd1c7f850d8717063ff7eff15d91cde9166147c8c45a5b755d71625e7eddc1720ef4f010fdc07c742b13b03437a248adbde1f7f33811e43b73db93d4d558beb48b1f9c24e68c29798d50678ceed1db37e3969db211af5606d20cc858f27bce72c6e4fc4297c8ffe298ba06885ded0feaac4856045bea7467acf8a9cd6463dee24d254575a81a479ac307af4dd228d5f758ed527fc25569586fdf85f50a53be770e2bb2b3b1000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ae1877e495c348f5c961672aa24d751b1e52047bae5a72e01f6e3b8c73946a0e8f8f7e6b91f258794969b2f0b4c6af8c6cc8118cc72b6eb99785a32a46a1c21f75429f44a02a2373d748bb15a3d9cc19a742479c8fefe90d074f8345f641d2bc3ce8099c215eeeac4dae1c7c49e56ad0b5c557eb9b891f1733990dcbee35d4dc514994e959634b997e7df125baec8e9a6adc502331aaf62a91a88eff47ce886bca21424b0e48e70b0bf2db19e94b9597d670c196ae52a5f8a7b654b88e2ea6ae1bb76fd8218c18aa050a785f8a401cde76314f7ccc1e4147fba3f33b28719770070d7cb1aa437a00fc318f338ea40a2be84e7c424e41f4ec203011f2608a4c78806128c0ca1c11fdbcc29ef0f22af72680a1722a0f04956c01682718bc991e6d656144b286bb32c25d589b4bb7e13e36a81e8063049426a11a82c4124fee55fd910596ad4e9f021f419dc4d642dc3310f8756d17d447c0c9ff0a84cf3db8e18f2958931abd305a2808385209b304d44e3d9d43b366f37559958a97b145be99ce93dba06b8ff6ea1a90a03a533c30debfde56c2f50b1408a3779f9b08d8e85d43573f0ed853ee6cc6f2298076f4d3aaf1fb6da156aa2d99adc0a07c8353977000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae1d4fd121c2b12b84ee70b7e6435b66edc6bf1d5c08841cb84cbf7c50804b0efb08977c3df54b97311ef6b9ed3dcf759fe2a639df215358f3821c5c860ca65b3c94eddfcfff2a428863205d6fe69059d7fab58ebbda9d3a3608914fe39654407178c9d47fb444b936d1982367a9cdc45cb591f9d8ee18d7b9d1b88d23adf752a4bacf949a2ecf6a3aa6f9290bbf26d58e00ff4b55343b74fecfd44a424b783cca30acef7d33151508640d9c374d913d8b88ac3d0b22df3914012779ef20fb281fd4704e058675221dd0529aaaed8092b0c1c2489ed0faf3e206ac960be088548487bdbfb5459410916b11622da403716e7f19016d2a7e48f0504a3e01a320ce5a58b96a1ebd07ce73682ddb8e03528eb536ac1ea701b8324f9d43cf12ffee702e86ae6359258b27b4ebb7c6a5c8092426b53dab8d6493f0a54b670cde85c24642bd159cf04b4666c29d92c5f442e0acfbca0c13cd392891f3238baa4c89373e8c315d7db26f15226b55ecea5ed6f9f2b6d4bc2302f70d1a932359ef343c056f49cd867a0e92a61b1ac43ba9b4fcdea4b45b0802c12de7f46ae7f1c5d1256a3e0f04ada47a2e14d3f852b478dacec9be6a65cdcc153f828c6af446fd33623547000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092192b54deedb5e6a1705fc78b21797d1860a2fa658fc3af5f37814bda4f1c5ab7e6535c41ab20eaf873d758356b912cea7c852f44a7ffd4e67ce1b1e60bb528afac4a232c9bf2d1c1fd92a3a8c016af80d3418c706d95c217c51fe220e2f43f588596df08625879d7560652ca7edcb18e8032874c54fd694d3240fc467bcd88f1f63e4f137abb1c79e4a188808fdd72c166ae4f5b5f338fe322e3139cd95d9a6e9e225acde66ce4c67be98c45a33dc9f6740797af154358aeb1c74496256cd65907b3cf5e768e319d5200ae708a53dbd6150efe3bf670474e8e765eeab3bd2db64039c718b5cd9657f480766a67da207e78edeaebab830d9ed137ad47a7d14619ce7370291f23ac5e1014cd2edf3147b528051da74e934ee89e518b4cf45d133c840efa4478bca73076a8e1c7228449e8222ef81afbebd4e0cb4e26623558d4684f8e5380d1058c89c35382b7cd7f96103bccafa17224fc4b2c54ffcd246065d2d937533a69ddb85c44e3833f02151d72fc45d32d6bc5fd75de5caea93e0cd4fc3c56cb67ef2f679e983c4b3aad4dbae47f43f35454801ad2db5f763f2a76fa82adff161db9acfcf0b159e5b092d5008a2318811ec840e146a3e29435550ca000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fb35c2a05646f24fa109c3b53ddb4be79f41652958a8c0268b8ae44a778f989d8a5c047bba20f6523735f0b48aa43635b03b6f204d13a409cc9878a6d4e2d72887a0f9007bfebda595a8970afb545f037370149c20f2b08d2e883fc02ca555cf4f61bb6ced92dec97815c52e8bf74cd2f63fe739a7853d05df412e03d7e9d2c20e33631e69320ad63d7f5e25b712bd39e1adf8f89b5385bc1efffdfb12882f3ba24b90dea620c6172146d6549229cfe578ebe83b78f875662a678befca1496c641bb201cc8b6955cbccaf2160387424222cc54fc2c867f87842ca3200594022206c664ecbf0d69b118216fbe043a7a9d5a6b45e948f9d5fee023a7bfe2f877afb125955a5432f00199633944b7047bd90b6f57a736db599568a61583c52338e261a2982cec1a46408bb4bedc81240297e93908cf0078a229c54a57dcd51059bfdc5896813676cfebca3c3eeaad117643d84e53a9ae503d8256e6078a1820d28eedaf2482690535d07304e6adb511ec761ccf74ed3c0d09de5b53eab47c0b8a16151f4a71de54a028733233935c8be82df2d7ba204abf9522d1fe1afc98cefbd16fa54e2b20fea8c1ffe35db98aa2e3471718b4fe1e39c3f7372e78c8497bbe20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000923d1e99a31541e238d16514fc5aaa213ce7f027fce1cd2299392101d814f67f6a1dafb5911f2eaf1c6bbe6e3564ee1d2c90228c28736d79dfd822f5683b440a92900e704dbeca0d83fcd5c7dce0dead064bf667517b13e54c536307448871430fb1f11bd294c9935b4d20c12b903d2043f8b920ca2fec6b4fb963ccc9cc0f228513daadc3c9939542286313d3baca81b0fa9f2de8319885b3288b95c41df197acc09322cce936b4d82440a6295baff86da5c1332ba05bafec3b04b25a4ada14faf013e34d57e43243a40dd82d0862dcbbf90d7d9f69af7aac1489b3c41119473463f71f05fa713f71cf5f4f701a6401b9335ebdc960604ddcc3c982866d7c5b195c2cc5bb8cbf4bd8cfa6eaba7dd2dfa2e1add52020a41b7d6ac457a337b93144ba8604bff0e046ea465b8ec8405ceae7da9fe754f4f420c9f8433336f2c258d57dee40ff24e1e79fdf812be56cc610d86d6026c24dd492154b09255dd9740e986d9c601801a1dc610fb7165af4f0c6fba5aec9a398d218d8da24390f92e468905a088943d71e1ee732ec50ad4d51f05f9e11049e3db86651f884bd561fc5f856b20a384e6069c436dc82a5fc83c1a61f98bac59e095263b28b5a2802b7126300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000276c5ab8ca5f9dd86f8b8ed4cd8a1d1671d952311703aee6add7abd6df4c505f3e3ab451935a3eb4804bd00529f994eb90022c13f372749998f71d0382af8c6aa24c43b9848c8405b8a5be38aaa1219d4152ed65e708935b803e212ee44412eea3a0e847cdc91c6ace505ec21393eef248f892dc2676029358ff1f5157799c10bb48de61e5d5e31515f0d942988a3e5e13a8ca73849923f0e946c38565457f5f6d7eb5715294632f296240a2eeda9c6c58994daeb342bdd3af026d429e488699063ee96d30bc8a1169111c8bd5df578d9f987d9c3ca224f5286d9b7bb2ffc1c3501872cccdaf7c5c0c636fa7c5a7d160028a2fc767d8d3c2609aefae1602409b6a5ba89f7996835bd9d8fe8aee8f30b9dd1cd5b335be75641d35830c566f35b03039902cdb94e139f44933fdb458e31e9d5b1140c9b00aee0e0575c955c8fc08c289e0dae194df0a59432accb7904d4c2f8269022647403eb62eea241646a3f74b1b62555b5406f3358d7a893d203bb93464f1037631415b1c5518f2b7d7ec1d4216fdb54344449c3da4a5178955e399340f63b59d181894d97ee4687b586c46dd35af29c226dd205953ff522d38d9a923bf9835bff359c5987034690c5c036000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013a02a9ec4605d2eb2d94609603abef9e23dc476400a42fb505df73661ea8ba4c1690e8d47a65edff94d7923799952b9051adeb4676fd18d19774b0384ca276f857aeb40b5bd1f3446bd28909b9a95ff865dad8b58b34b879468403f4e82ae877531e3084292e2cdb1fac2b32e1886f46c57826968ea2d2bc8a529c84eb4e805ff4656058e10d708a59f2e6ce384d6cd9596290d17dcacfc03ea0840cb9cf83956ac0fda4fce7216fa5e53f9d8c4da4985b71d014c3c0c245aa3083e0894da53e71de1624fb1f506fdadd85db78f5aacaf8cd7dc40f401d3f672afb46fd4dadd942ce55582e81835f85c8eb261d637d4929eeaa0bd07cb05af08016a35f4eb882f8ed8df9b331245db46b1c9f4721e3ecf72f79bfde4bf9f857522e60243dd0404922c0eb9120133f78ffd76bff590287fe72b8569a290759fe6873cc0b27a20c3e8a4e7f53a80b2d2f8ea9305597fdbdb71b83012713de268eeb618c45b8ed537eb9e69069b1be61326fd690d785195e2206263447da58f2a0719452af0366a1eeb1ee9fab22725d31fb7e3f80e8a394d380fed8e5f8cd33c2741d6b9bb5366ce9f69176ea7046e9090fde82d3b8b28b11e3281371269e6841b747e865d835e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a82762726cc50d245c29ed56c01c4b4893b1cd98dc4ea1d4dda577f39feaf2385437e384fa294885ae1dd53056880e5a37ffb706233bbce0066968655f5dfe50aa6011bb2310afdda5d208f355e0b2df1e39cc20c144935bd8f8fea0f5944f14b064ce589eff8b28ad85ab6c004fe041300d95aab0adccbacccd4f2333cfad2490a306098ef94ef2379de6fc3e196cbf1ef039f7702dca1382bb751a2e7720530f2d3edec3bfe47587ddfbf1b45806650c1dc05b68cb6ce53c6a9cef1fc96d22710b1e087c979e2c8df67cb6ea3ef7815dc95eedc5f7f38934ac67a4c21b50ca5cbf74508ecc7ccf8d9185e0780e3f3fd2a109fd5f64bbd0ecfe60e8359c7dbadf6fd513bf254cf5d62b000503e778fe6ff49684f11c6973359f48e990aa86dcfa7dc2744321ade32e97d96c68af320257b515b28b36e6ad8da4f72b511360bbb3ba8332b0187de2b4172469a347503961d7442baa75b6256fd1797ba4a89fbc8d775cbc8d5af82e756e9358e0fa0a9e84b545826ed286faa84739aeec33a3984c9ced454e083695798caae3b5a9a938b67bd5cd86a4a4f2258183bfda1b8f6a8bc16747be440e3c73be043ba906ef3a49a7d82ad0a51451484aeb682fb2b56f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f4247c1451d9194b1b6dc4c46bf23a305ee9aac6b994e5f7e094938861ada30279141f03f9b4b6767a3ebb24acc009cd341cc5b7c98191a8ea33035a4b4cba59459d324d0d30a457bb63dae31288493332a3b79cc5dc303d049314bdde0bf343dcb0f396deb616d102ed52d6e1f903ea22238509ae7f4ef322a4e3243faf6da68ec69cf8176f3f68d559dae695305d5267767f6279f747a91587d5e0ff28c1c23b72981ad7866dc230b02de1e443d31d4c9eb6f5a41ee64f326877df149ecfb08ab6a732e5871e56107fa3e9f7c44d3744d9b469d0126cf9e62af197fdda6f0ae6e74959bb229e6c7e7923baba40948141165c163ab5d4e80a6b7fb515479c6055b9919c20989d4ef7503a53568c57d509b2a12455d39be10ff358f32044fa8eab3adeac0cc4601af5d91fae11e0d71ea9746437aef77bfd7f6b6d870a6fc282b7f6a31038fd80e2ac5e8dfad81a7e87eb60cd2288b47eccd8bda17313fe4dd5c13759d65af67659f56f26671622302675154089d96a38461aa4a5eb927e651c80b09f0cf46fe7c83db7ad31e840436c186281465eaed51ea5fed545d32779aa4cae374e712b0ff56cab01ecab9ae65fa785add789ab627af0aa1130149895b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bde77e6781a4d3d8113aafe6faea2b90e8a0c0fb4b5cb2f38cc7b9ca4d9753293cea15f0c67764fdcdb0f4fd204b6ec02390b5d06ecb470b88e70b4b799c4035051dae0d1c649c9023c36d6a60814014c8db48433b223cd5a8026df08300d69fcf4607add5d88cb0fef3e20fd3a5635d345591bdbd6bf1760d779dcff756ba6838d0edad407f436d193a0cf7e4449536f50514fe5dc8c923d5c5533a57e541d383bcef60c7c74713e59622c9d62b72a66526dc6a2c34d1de02822f3adc40d82104da0738f9c8858e53998d62d04f46fc7e6943437e4bbc260107fdeefa710dbad5047f9f63870ef36c46fbaec232b26db6e09051a7952acc608d665a8598bcb2a8fa07a7df27cc67b80e0529c9af25e29a0c901a8e8a2097f67ce095bb128ecc074c0dd803a084a9e1418c6942cc4d6ed0ce3c5aa4302d69803bc11b7dd91323eabda96b334384db380e28234608fd834e60c558784f122382b1dd00b3301e5142f67a2bc065c39f295aabbfd3974f09dc2e9027f136a841704c07f680e7466702084ea09efa601fb8d6f3859bd419872b50b73356312efd8b3946abdbf66b880a696858206bb24b68e4de5d7e1bf2ebfe763f729e358d8cf733bedb65b9d1d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f9a71a186d17e585207f5141272b7c6d488107a02d5ca49d0a1d365aa9a301988646cd630d125c962f90e05a3a1f9732db4c250b9ce165d589cd670d6b5d5deecff4bbf6cccb2044d22ea1b8119421f81e4da21964d9cf9250fd1adb802a7102dfa542fda7c579445fc280d5e8205c55b9fce0cc4edcb29b1759e94276709fa488cabc88ebd0be8b17678239f182194da14c4d39ba7b08c33d9d3aeb4576d08a663d467b2ffff06e2a00d78c4428dd112f0e949f8b327de3e5f73f1b7d403cfa2e8066063fa79c4dc6add4eb4dc82f464a5fae879d6e8eedd93d8a74f725d841b1de68935601b2067ba350345b823da29f715c0fb1ec45e0398c2e284c5645eee8022f4af7da2ced77f7c1b21241579d58ec413b1da3f428d5442a13a3685bcfbf18b0cc955bd7e22be97b5d9c7f8ad736a7f1d4484e9fb15e808fcb3ea84da671c98f03a520e21fa23762c4dd7a99c5c238b8f8364bb49d01f726743baf305a708530bcd4fe97d72869944a1be346f17d6aeb93cfce674d35e2a1875ab943395b76b84b7f1d8a1e9bf953a95cd0171cfc1f55c1d34af6e388d4a6c8eddcb34ee1817419ee02d722ade3dbb53a175f963be11c06279094c8296b4c98d76a5300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008127c785dad15b6ca939148159531f26250796b968225b31db9c6835db52fc09753c2d6e5a6f50883334e388836a66f6c20a7504a39352be14679625882c37f3f339ae0c856213dfb9dd3192db48d4bda80f9c66b925e270519d1e2fbb12b87f44c3c39e277a663faf1204b6a2b8dbc779b80216a16c86466a53fa29f922d4ccec5b6f92ac1846ac5f49672d3fb208eef83a8e4f25dc2db5aab48900204440e84c3b9e4ec61d8d739d9f2fe7abacd3f9ac5bd38c0d4bccb6c7827464f3fcf6452651bfe4e6982b93a45f31e38b32aae8a1324b7d8d84ed000325ad30649b37bad14030c567477c1c5a06f5ead0fdf129b6c0054f88f22ac142495ef5b11d69c973b6446041cc4f9a39ebacc6e4c2d2d6d28d67c643ac90f9b33d0832394df95f8617885aa1b2334ae338859dae9bf9f1da363cb29f9e176cc6d57d8d78e5c0cc6127a4348487c55254106c26a1ae3d039571c69536bcbc61f7e62f5ffba52c49d3bc24aadf7d502bfd0254138347cbf0daf63782b7caeea0fe58dda8ea88ddc39c809c12bb3b3cada7559c33127b3b7ef9745dff7c227bac1c1fdd715f011645c1f07a5b7d2059827be614e0c1679e87ec5aec6c38a3e7d955c43e8607bc191e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a31280dc3620f47460f8547d85fc005cb285e7f89479074b30be0f9534bccea79e347b9367f2cc05a1e15e4f49cd302b451ad18b867b8baaf133de841f9821d8cef0c19b72b3da57704573da6aaefad2a7197999cb4c8e7bfd86441b413fb355b21d541b66256722112e8230f9601e61c73ae911bbca4b025b931d7960461e1a07ed2b06df6521016e94d355e23b3d48470dea32c89a9f1a2c665db5f64532aa3a50e2a7d46cbd18c180a16a74d7a9b0eec32cf17fc9384630d7b959704a09e94b335523b6543392a9f0dd2300737ce4a76f837b1a915652f9fbfb831420b11444cfa23f07b7a3b38c4081812aa14d1434165a9bd7ea0117934bdff5c47fe91e704c3de405e61f0a17b9187aa40fe99c04f4bb9a33aad6081da4729665a28c1a06b08a60ad1a7288390f06bbbb999024000beff3a9720d0ad0cd556606554f9c1f24506a2d6ea0704f1a1649f684037d4be94a29c954c837c97d8901c2e6f1dc8d16cc4c9b4f3136170801950a03fb5307f4c53ee384dcf16057df4ba39b35f5711687b9692731711a4a956f5746a7275a27162d959886422de4228dde255994111c56741a32eaa63e60eff9c90614a6de93745d9614f41758a58e3d69bea63000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002faa47c033504771d3217d246afda492fb86f3181e810aac55e80df8ce2012ef2e24f1bc73670ca7c324c5055dd550548e04c06114f33b0ea1b8209175b7b350f4b7c2772eb2a59c6bca73706d4db8926c235791e2b930ae7ca339e989bb6db953320a46e6e28c768cce1e075b4c730b8c7b5deaa7656ff201a96935bd204a917e61fe48c50c487f348bd18b47723ae27deb103add953c25aae6778b5a66a1675db7d4dbfd07f4edfe3d5a367b4533eb80caa8d50a1a73d42e9337b11c0614ceba4ff3bf1fe60a9c7d5cce36d0df397c900eae8866e73218db18d5506c84a39699e71750770bdb44a2242289055908fdcc5c2257db4de9d511031b4baea74d35cc8d4224ec446bf66ec58de443bae248dc4c4e018d1f0488602d74eef2e75634b12e14043c322f8f54929d8802b8a0e4b6e368e6c0e9bce5c1947f1f280599c79559df080c03bc2d1990370007dc80e0a2b4f334d2b79f8e7804c88b8447c812efa581628d5e0e9eb6d5a846b8691791c45e783ee5c45b040c73929dfe98f93a6e192b0021531fc7418172d887cabe44f9d957ea5bb9357336453e775c2feaaa35b7dedf3de88def1e00e8d607f9ab9206549d254ea805dc37d0c2cb403ef2e40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af246230542a51e440b1442d1b66eab4aa4ea646a709147a627fd6d44765ce93825f785c8fc91f01fb4a69dc5b8a3b6eae53dd6b7476114dadc12604c5c97daadee87bf86018a61681a8ae2cb81dc36418fb9af67eaf5896a5870678169bf7fa3821bae65d8f3feda01671492e4eb6166d5e2ae533549df77c27bcdef82fde9cb8466cb0ba36cc004f86022562bf71c8009928d6d9864f5a207f9b58a96b5af934cfd12c7ac494a9a9f1395b5f88a9394f7534dac4fadee2d51c4e2041be6ac7b9aca5563b699cf87b78531b7543a7836157416fd482cbac4bbe7e66b79a04fb2bfa25eadd7f1ce7fbfc8f443d4acb275c9270abc61e5d982856751030473581108565b8a107a1b1b5caabef78ca424da6c610af0b5d7fc0580e85248987d2018ddfbcc73f1cff0df469085fe58629a6aa65211c8f92b4861af8d148d6e8aa5fac2db1a9cd781c1d557de33886ca30bd583948b40f5b42057d9c282b8076807f56b1aa2ce5a84e4bc21b0065b9d337fc6c1cfbb521d30004be2691f570b9105729e5fd209f3cf94544eddb8991dd7849ebb7c215ac7489719710f643172bf809f67d585a9938157ad8c5a890b27eda82cb7de89645d5118351012046415c2c1b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d81c479b1dceba37a59d38a84a6678fe305948e1f94b28315e47e68d54495c57bd8d231d14639d58c719721b975844ca4dbd0ebcafaca82d2b39d59cc15e2f27782439f272c77725d0392c8402ccce8b9bcbdcdbce795b9b4152d5ef61eb93ca2a6c3d0dc697ef7cc152e9d7dc8d3db96093bbe382c367589c34b239ac68d8d22bd000b2fd0dccaaf9901858e5d60ba59e3121d3c8d07a645e15a62a831b4fbb8fc089f18583da27d300b855bab5bdd8bcb85fd87fe31d7de6d073db51c4699e2d74855cb55adfa1f4052ea4a546a05e45e371c0c420b9675defdaefaadb0495ad485056a828ee741ec1a59ebafbe15963e65177da19d9d55b1787d92d883f0073942bd3b7d7ec72ea5f93c012322d6362685411b0095a287f6a1269b24f84ba09515d7e2f746d03490dbc1844bc1661cc7f6c8af55fe5ae700bb7a8fca7afb3e86ac72d9ba24a9e6db3eb6bd8fca0494105184d2d068732d07b6b9976a2f34a7b4304e6a922ea1e44b169fe72d57935eeb00987b0ce1134a45c011a2851d03f45d4fd0f46a7437fba01aabe26054dbaa7c107481321ac137651258ab7b81020e061906d90cdef930fa7aca9d409fdb13d0785309485f905c156a46a367ef6c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000304166f5ec6247bd1c1330545e1ecb6fbbe677b4b2ae3d3194d9e0e8ee4783ac9c58bd90f8878ac596cc4e75043e3a8e8c96c15b16ed91ebd8afde38bab6065d1f6fe6a0b5e5a4ae7a9c7db4a6e1040ad2ed5f039252aeaa4f9567c6ffc83e31c814f10dc9e613ce14474c6bf77e23908853c8b85c87fa332977dd3387d7f218c1a1e4fe6f735e2575d70c4d763c3888e841cef0dac9c8fadce5e8e4df30343e1d10b01998cf9fca1a4b608b399ee83577419cb2ff572981c47375ad0c652f0243ef3c4aebd5fb74617d79c80cfc81663106beefde5175901f07de4908b006bd9daa62934e28820b722dc3a2ceed19ec557cba0e82fa530adf196e413ed6c0a09a98e71c13c8ae6eb0c3c7f60b81c0096eb80d5c5e230d4c40abda9b131a2603aa67039b80c588c7176c62212c65a8283ac98a9906471537f5b730857765126968bf61164c60cacf369c7a90b9d0355ca3950634f27820a3f2f97986ac826d5c41c1fafc67d6c7a21e3e17fe9c42ede35ee52a6bed86c3bb5e694e210ae5d94cd402c5abe135eba6b856d55c389efe9895ea10d1396afd3755c577c27a6a73c1b7bfb4f1285b67985b8c0982eaa260edd678e1c411786cd9dcf5332bfbd037f90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000953996f6345e835c25aa67ca389c93901fab1ad1c0cb87624ec6afa526a37132abc65ddbcdf45859b5156fa8e3d83d92a2e3527d6e4dadfb5bfe0226fc588fe54438ceefa1dcf247dd1a269454714fd1cd657896faf45462fe1bd49285f93613c3a34918e576bb8ec2f21d145bd3ae10f8451032173a5df2d68c469235af131b2dd812090def9f928baf8ec05c7f72a81e71417b056764581124aa3e486caa73638085e9a26e259343643552afd5e24309ad28ee01bdaf4e68fac6989b77d46f2919bdaecdf90644cc82e8fb39c32942e7a413784f2772a58446007990d97ee64d4c74e153e5bf5e58227495da783d462ff9cd760818ac59f13408d162c0ed2b02fe6c7b8648d78a5713640dd304d9bd36ac077dd7c3d6a7181ba80e0b485a09bb4148bb7f7cacbc045a08a300b73aa963244d22fe3a5ab724d3967a3146c91804730b426d3542e150981c6cafafd63337a447e374bf5a6db36d6deef65eb87fd2257ee5f32b542cfb7174185e461b8adea8d16e68350027e48ff5da19d438187b03f5d10914cb42e51f7cae672d76508d50d49cb15e9128fcc6aa510e06b7f4c126a984322bd5fcc670c460d933cdf627b7559598bf11ac768224b7e5e0b91700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d5f29075c2608d520e2532339a9076af048fef9566cf1ec8214b8628255ed9ff6b77aba7a35fcc0077263d62926da265542b539730ba91265f18cd749492ffec1c01a091a16aa7a4a1aaea91a4e83206a35318ab64c1f0e7ed066a764dc6925a85e92f74821ad306e998c51ad9205bda433825192ee13dbcc4ba668aa6c109516630edf52a8f26fb3aec186b41ea5560238c815487536f83ca90368f5412f6e219bb4eba92432b81b389a783a05d105d2169b52a7d2cddb96f4a2d0fde3c011cb58149e2ebd34c6558336b41bcc56b2290ccb37462d4188f14154fc898d8dca2c8f4fcbdd1b9270c442430d47347582f937df5239f132355cdea45c072b350e06d875d9c603f09151a3b9e669dcc429ec4a5418e97d2e53bd94efce2ebfa38f5d3d55ef92ae14f91907376759d4126fa76e8d400f965cd17dd5dc7e1f8c75a1957b9614477cbe5d288cfda98021880e4a73188b4c9fe5c9077ff8a6f25010dd2accd5c8c8016683dc6e14545101500b7820ff9881be59be8227fbf37c32d35049e80f0f952c3adb605feed47d09a333483abec296691ee5494b628378a2ebf0898ab382c3480d96a5f217bf8b136aba4d5219f0f6df776b243ea2f4fe75414e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a933d7b57d838b57ef28ecf0e5f9a82c93ba5693b2ecedf842d9cb9b19541d3842def0d5800069d28564b24633827f6b19b7eb6b077cc6ec67924aa823761545af9e5d6392db7f36a9ff166b3bd10f88b3f35a712f4b68a4df9aace770054db155ff47db033466b639864736fc68d6d0c309f782fc28f4def487aa36b93e19187a556cc039900cbec382c6ce6b149e9c0be8153abc8ae86994072c8f10e2d8928de91bda8299b0eb74a9815ced05eab36d645f73b637e4b6668a980bf12fe7786dc1e67894394b0bf1130f5f9c3b47b27021a3d56afa79d569a4b7165d6a5a9f059d51b9e086af923f7c39caaeb761f9e8b422705bc900e56a0caf5cec4dd2c2ff7e01e88113e7d3e4ab75d7b7497af947c3b0a8514b57e2ec2eeed366880824c57e5c877c7d616f7bd1036fae763180b228a5ce7c44c74997b5be4fe7c4c65fe15ecdc8bcc305ccf9482bcaedc979d0181b1e191d13f5a63793d3821d76b15c5db0ca533224f877f71a4dd4ec08d49ab0579ff433c75d2bf0e95e223ffc74cc2c28ca18bbfc315cd6b478e73b0fea0685bbc81ae997f7977e71974c5a91e90a29ebeac25b440e33d6c10d9bc3d9d35ce489f7ffe0b56d066b456cbd27004daa00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002aac0069cd36b5a51d3580ca7774632bd707275de5dc1b2a83e0247d522e9c04d4d4d6c38022ae80d28fed4ad1c439e37c100d1881aa1dc8c94e769d27d2f7e925627f8b02a0ac0ae5f7b0a8b13b2c9e21b0b8a7063ccf50b7e41859f1618ca0a34ebe2f935cd39a33fd7bb1b8dd3fa555968039703b68244ad803eea1237a19de67feb1f6f76a971e2e0240e38a108dd5993937997eb0afe0b02439765b484a26cfc5164ff504029a8a55984560f17d8dc98f50163a7232382fba7590071c071ae843e4be9e9fc158d3bbbd90948908bf2496bb0144f98dee734595c15862648293ba25ccbc655252f163bcde07c41a77517942a4eb14460c5408f543fe0d5bd721ac72cdf9fdfb352bb8ae50d42ec7aa9327cc259850c3370e921c222382dc97a285f1e2fed7338fc32f7673c5ab520ab190d93d3344905c36655049a0539dedf4a21817eb2c804bb29df20a3e738594095f676a0616d85cb48ca5ec76ff87d66d4bfdc120376a8e264ddcb01a9adee4f92aee38b0cc7b8dfc82b7a037c0b5f2194628f18bafb17fcbf41d5bff29da10217729aa20c8b40e9fc57a2e8e9a5c6214c17407dd543a8b9c1014b93a615eb800eda2e2b6017d75608545db33fa3d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a7850bd7bca2249aac6f499dc87657a6e331c3734c4ce85e6f41a87f6f091af9aaa126132f998bc876b851fbdfe9579214916943379cce09ae2989fe358ca868c91cddde1e0d8db7bfd4bc5baf2d0c3980bf247bd5077fbf45ba23a62fa42a3dbb5deca007e04010bb3985882c0e1feb15ffc6d491820c811c94231f6b8a30349883fd0a686f4ecc1256c2f17952f33777b69e630e4a5426756ff8b267dcd3e779539874c86a63d834d5e29aaf7b9a0fde6bb1070f1e1a65e338375c833f34de7bad0d3662ca341acc047358c7c8649b00e83d29a365b87ced760b9dc2c5070550f03ef0f145dc6d0a956c0ff5bdf957d9f7e54165b0125e75e6c0f200553b2e5fe6b4f9cd886c80348b5ea4c4b50612eb4f0a093777cafa96dbdcdb4dfec49f94e094ca607a12fba8449804e2af471676758e82386717f8b20f28a1e524d0d252c57cf7c41ab8afd252349f48a5e8e34d40c6adff984837cb7c48b014f991f2386263de63afa30d2abc4e5c29a09ac5d26bf79618b6361691026cacaf166878de404563ff3e85f555255f29619a4b0a6f21f7c83dfd4f0b2e2857c8538aaa39a838d68541b164d9504cb4029fedd80a3fec4220b886241de4709f451b864150000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000947ba9bd651c4a68bddf020cd270b9622921af92fa117683cfbdc209bb3c01a70ed0910575cda54be69e4af8af7e8aac91f8d8ca6231e0a29be4eca0efc3ec8e40c7950307c871e06cdb13fa5dd2604deaa4f6eea0b7a81828ed4efd450a21ddfb08b283f96d3027e709a66ab65d7fc8b6b3baa2fb969513eb1bf32693562a723930c3bcf62ca0b74df826dda79e5aec57aafb504798a0ea5f7cee4d55acda6a1ad72f9ea8caff25e11eeb3aea799fd64665c21ab3fdf17904a7bce3cb7f326510efb647a164854e22bf9de12223a94b3b9acbdcf15c23418b094f3551b918702bee08b56e82b1273bede63b239fa228de34ef50cb441856900a39f731739520a35a96d4f872ace8b535efdb90cb68cb76bdbe7a81ed4ed3641d6e8fc5a827cbc2325de5b380a6a4e5f368531e54efc5f39a2afdc950e5dbab24ea6728f32d9dedc489558c534be6209754d1d40c4151b5255a5203d4e0320b3e147c8c3a9e6edfd424d7cf6d74441457da5761d9177a444aa5aeb2b70134fcebc5ef877b8bdce414abecd0060e99b0da3964a845acf4532aad1c2ad7c0f372e6e0506a979c1743364a408b75d92a2494faf7d7c5433fae01eac69fafe59fdc424e34b05323a900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f9b58cb72e762907c8e0f6962c2518879cba06617e54a113f394e7c9f35ef995d4b298c6afe50279cbff89ea11a089e3d407a931221f0c3c8755a9b4f5faf3af89accb57b8d7885571c9b72a0d3eb7b64676cca04a16ff31bec6a3d9ddee9281012baea5aeba52577bb6fb6614cece3d7eeba937a9bb667248ac3c1313fea589fbd256085acbcd012daec7664d60b2a78ea403129087ac4740fd51c96c1436211e08fe720aad9a1e0dfe9242364bc5e5c90502a8c11017291ade653373e4a9a463b9b67916b2eefab4efcbd4f4373c01f0ab98f1f8b4f49709b5b26f854bd2d081ae1148e4d660cdb6c528589682f0ebc85ea2976e2adc7d31097f26ac2dc1da7042dfd0029b8469f9cba77b545034951e2a9f173a8374cc0b4dbd74a1d2fff3b5e5975a07ab9f3f014506e551d21739a3fc0b5ecff9fe569bc663c459f48b3d0d107bca07db0645ff9ce08184a11054158bad5f73201877f697897893c856ebd0176dd9d695c87b5e650d7971f70c19c310ee04c287d428eac4163574200813d9e2cc11c3154b851730c9fbdc8defbfbb4b35c3b7473df513c88e7615e1867b32109be518a89ef6db6ac459a5a47ed5d1a0d5ed57aac6ca265c68226f0842e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015d8f2ec4ed36d7aeb27d977109ebce522cebb554f10cad4ab1accb5d2e5a0316796bece6185c905e064e36eb8387e131f688f4c4af8338c0356bca91f8c8cf38207957eae65068c9093847bf394813f91641a05f0d07fa56a616226ed7a88f80bf0bda405ab01d55d6d106a52680b9da31dff8cfa8fd1a3e0cd142dee60baac7c8deaaee057140693c5b3c19bb0887c11ae9488c7b79f19b7ced17c4902a661b911acfcf36e5251b788510f38ce9a1bdb0a43f8204560efd2bfec5e8a2231cc5a4e9d8f2c1bc32b5a1372305894f96e288cefc59f42219cd08128a67067c18f3a8b13a5687dc4fdcd9f7548a9e6c0fd4979149f84e12d3f7bd15418a94a3366720e323dab1e11cc5ee82f1612806619c7abb5b503fdcb2235dc8b1bea916667e32aec29658368450ce56a9b4d2c112157a6d8e5d49b9de4659fc413df02ee63e46762b09856960c60abacb366deb98b70d61490cb4109d5de41cc305c4e0533f3846fa5f4d7247b18f8f036399cd4e993b6658f5d4b971c8117aa0280148efeb4d457ce10b6a9f5ef5885cafa48a37cd884734c98a19ec990e32f00a5774364e72852f8072dfabd0ed94aa183e078366df1174db19310015e93a1c5dd13535e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021f88574e7d2681f450c2f1c12303715827604f5295f8908a022f502f344484fa73de0681cd55758eebe6ade411922776f2f7284291e7039777b38b393314106e18630c2d139b4ac11a7b316a2dbd36ebc0b5fbde0c93f31b81508c5675d6afc5c0e09c11f98d2fb2866fe3fef86635d212da441a0bd6cea80fd6a98d5fc68de1c0e2c6032d3544666fd9aecfc280a75df9a34bccbf165803ed10781e7bb2508ac1013bac2a0540e91dd0437910df3337bc79b4ae7d12799dc52a0772933d910b8da764001ab8d3c714ac6f880c6fc46a576d9f2bd2814842a9b199c806d946051a671e3ceeeba18c4568ed33a54d85a7110e936e42214d63855936c8daebaed3b6a045b4e283682c3a93d9640f0759abcfe62a1950d56e946a87517438bb4465a158df8e925e236b3b41d0014d65a8440a541121b8c3a3fbed19ce11b789ec7227af8c6cc2a6aeca45df6c29fc438ffd9ec349cb23954881a1dc9ab2874ae6f88893a077dc3ecf62ad0e467a6ccbd5596ba33349b6ec31c44f240656c93385ca0c1f7e808cb5e8688614e0a12d503e51046f5e3728ad981a532cd9974bfc3e4ac6ace3e74717843243aef1757cfcabbf553555eb3f269a03c767bf8e4f1647c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a850f5a3989771b315f1af4b8073d6619e3f3d7e75a853c09b0661c22eb90a251d42be5ca37902bf789300ee89ed5eb10a708a21f6826541e5417d71448c50599da8bb10f7f72120885c1835106e290935603920befbb485a89f2b865a4aed755b818165e1c1282736a5d9385430b603e02f38296ca55cc7d6dd58f7378357c5df8ebe79db16a75767287c908bb7537ea797397a053afb4f5a8dd77194ad0c9d24a6f652b41ef038c78d6a8f7fb0f34225159c145d0378a00d2c576ee63bf0ae33bd3057c9c9f8a40266350194a0de3576e7117a7e3b0f69a8471e9b606060da92abd1035861f4a55eb97c68929d9a00425578faf1deebcbceee6eb60d7f11a5b2af404900337a3915d5dd20aa207e126b631205eedcdab33eec79c5e8897e8a9eacfbcdc90bd3826540b3f38f15ecff08bbe34011ec97b45a965bed119ad12b2c46a9747e01919c2ac65558def3c2a6198cc83c101298cf6b7f974f1861972ea502c5a6bc2ba2c6525c8f98d1846e3ee9941aa97b4d983656e171664875a61378dc387f3df0b7f0c48633251d1a82d54325c76df85297cee790dfe9221e5c131d2109ee01a2815c8e3b496350335ee11d293cf09da8d4356af1975c770f1144000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023e5cbad172a8b6fbfa190e14b87cc2f090a0ad18a108d5a2f68e2cd7533414c7e5411d9187355760e885e8e448ccb3d79d7f91767a76e61399dd02bfbfa5a3850e0cc865c860813b1a31d6a2bb45bc0d82d9b189ac718cb53afa2ece244cfc0f9035e6d2f77e783eb1bf025ecd10e21d87499ab40fe3ac9eb3b06e6701a00e7ff14a1dde96adf65ecc4b824394c3c397e53d758158c7f0e9d379b29d4a62287402efa836eeb237e9fd6c76dea4ac463c2e0cc1c2280434deaa154029092be351d60edffb54ab9d48dda58a5f86f0454e024fbaccbe7a9b1d57e8bc8f546f198f2003183a2ace25794962273ad18c6085af3c7fa7afaaa879bce2f73d2de0aeca169cf6d9892816e7f02aae4f6ab3b9d27efee8a0d8f0db263752b7c61b78c16a63a0a58db802169b53694fcf75093dc1f33e2341dc163169a23a19231524d0562404cf52f1eb0c3df9429efcd3ab08e0c2cb4d7d59c1ffb7a5415a3c677d380cad4adc7e149cf659306f2085d988b3f661b4ab37b8e2280e525b1ab52b47cd841a08dadef1f5ea816f4b361a12872780ec455ad8263f3de24d130e5bb313f1d852f5b3f482e90d5adfd8b042471e96d053e1fddeed74933fc515d98d2787141000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017db700082a723a2e408b1f41206490cf2f719ae4ff9b2d3683710552be3c7466b989a07a219f82468ee07e75ecc0a01c48528f1cb84cf4090aa1cdc3a63a733eaeb30792667e2fa31bb273f7c4f570df48e8fa5a40df73c16afe7d0725c761f886ac1a1b3ef7756985123755513ec177fdcd234ccf2844f1eba3b2cdab86e117b0521c8ceb7e85103c4664675163470009ddb7d07823afa4177b7d6c46cf922d9db292439c211edc53f099a3da5592a4c760404767d50f7179fb7693762fe4757d859603494b0e9b617e8b982cf6a2601f6c546e02a04efb7d916b73018bf962aa59ce7fe175e2b5f0cbf29591ab7d2d839bf0b422503d910969124c108a6d24231ff4ad85e57df790f1948d1a1d3bc3db41d6ade9704c7e6b968ff17565fc16b8c451a6abc461e8edfc3db686aa898c7ee37552ec637cd66d8fa8db54aec1555427fc45cdefd7a62d895e3554bcfaf026d88f3432d988f1fadb4ac5def0ff734749232df4048bc4d59a465f1ab2bf370eaaf3379e6eab174292faf30bfd00182a23bac2aa78b28fe51cd8dc13bb3ae86f8618997cdfe5e446f313e298297b097dc0d43411f37931559f93254db3fad8885caccc466084dc02c6596342153320000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a13d83fb9b587f1ccf341f0789e192275147e03fb89288f2a42ecf2c57a0bf5972aca7bf82380b8f821f90017a351af6899505e0ea9b12f081ed3c0e0f24169a24eef049ae908e03671a67f0ba1cef7fd5b08867854dd551d3be3d536a8309f4b9040227276b171cf0a10cdac2c9e0d1eaa920020572e49de11015b1503f5356f64b61af186891d4f491131ae3e5640f92ab0dda8ceef1b7a0e63ec4190821a0b38e077c44a27c23cbeaf11f47faddcac7e31d9817f4d67024ae1a15edc2451a0d168a9e726fa25e785229e1ec061e7f9352ae46ba03297f1ff937356ca88454f11b9a76ec6a983961e45a2fe26aaa31999a7ff3455a32a6314a28b6ae954191ee6f1425399035bdd6105938b95333df4fa520aa800fb3bc26ccf86da4c6c1fa2b24f0ecdb19a5a2565f2e2f185babc98b05d3a9213dbe083aa0d748af3598292c0c47f0af6f65f5e38f069beb5088d7cf5bc5a88892af95632dd9b65bb3984ea8f969564d4c97d32eb54f0642444a6dff67bfd1d4f739cea629581cc88277ad63572f63fdacbe190789b16e8eb54e20c4841d789e5cacf2614c886c922c61900b4815782934195b8cc003bbd093f0d6a2467c48127a5a1667fe240e0dd3718600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e3880c0cd075e6d0059bfc3fd5dfaedf3f0d7253d4946359062ca78594e9b4097f7f7df6283240cc8144bea9370b328e7b5a27f6b60fabfc2df1c324fa2c0d8312e86b85992253b55db0c025cd8ed6246fd977d6ad09b6f512e446aab71dda19858ae12b4e69f59faa7aee5e79080b4842413e54116c83437bf6ad5c0a93ff2099200ed93902dc37c6513e98381c32af7d4a175baf846fdbbbacd4596416e3b0a7af98b47eaf358ff5a86a338474fa81449d734630ebc1dfe0c7896295ea04545d4880ed2e9f634092765e818b3b748753936d7c13702273546d8fa1ae94443692e0065cd72e52607bfcdff7c7227efba22bbdee6910ee9d851137ed7e07d88f81edb83395be601d259ae08cc15c104b8ed0825c022f8f8ec5295c16eee3b870502001d5802c77dfbdce9922198e9af64683aaa067f94a7d5fd8abd1ec35a95372d288c41af1f6edcaafed1fa3e251fd1ec07b8e6f4f64a6fde49c514566711d2325fe8783a1ac22f6d56cb85cbfef88373bfc5c146b922037626b54ea7bd818c9cf88dca36f9c03efafba4a0c07195c1f2f0f739c66e9ba52fbdf01c78e26aed50cc2141e0573c1f7bcc6b5aabb3c7f3b9c8584b72b510b475fd39907451e500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b93eda8ae975e0f1218ceb6e47faf868f7dd648c31899d25cfc32fbb9f8a5d399ef8f8376bcfc82cb5d1b0e89b74b2c409454c5b4787884123ac07b9ecba8a71fc51d603cd6e0ae7a68bdbb820f20353d272b64633dc41cd8f8ac01bfc7ffcf825bf68bbb82c7984a3c73e838794ee257bfd5175e9dba718ccd3db0481bc3263e1a3a3cd1e27994d9a22758d5f4e9cc07160b38779802d0dde8bc763e33eac21cc431aee66cc555cf95a62d3c0587e89b2ab9815e8ce52b074ce6ca02a87640e17e1470f1fd2b883a46cb34dd4a27ab6fa9430caa8c25d1efb15ebbd597962c188ed5c0ac844d83829f1045b85c5acfdb9aec2f87b43aca902edaee35b9eea3a162e937c189339103649991247cec0e47399f00459e742dd0211d05615c827c1ea78ca9f8956b974dabe1f2195766d3fec831a960b874529728f435356dbc6f87f31971260c3de8d43abab2ba883a8490bb37df57893dc0d627719818f8432e2acce85963b9a135456418bcd5dae8c8593bf85613a2e5cabb396473d3844108d30164bca92f64707912784178e74bf7417732ac6b510ffde6571a03eadf73f9aa7c5d844dc99f3f2dd184af955389345b73d41f8edeb6a45b1e67f87b98af80000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095a99b1678699735c086c4d7a4e7935bad4b4a252dfe6c4aa18a35d562b1271226a65157d628e94f8b18c4f2cf73ec2204e25e609ba3b20136775e8236c013252d61bd3ba0bf8883fbcc0a91665ce941a391f15d665af7ba6d0724a9be9ca82a7d261e16f062e88f355c3fe8bc524482e0ca9a68accf2d35a127641227303e17c4405767db0f7ba3fb76078f4fde63c254756aaf5f0d0c0ae44b2753f5ccbde9589d028fa092bf03eab06b273735c5d3141060e671cbe656f5a28398234dbf3aba81c2d79562c1a5fa79b437c5ff06510403dfaaefac7ffbfaa10070581b55e7967fd49d425407b4133ae0ae3cb987eb64660726eb6f629f725ac30ba64b8079bdd8e81a2b063ad1091f684dd825609cf54525e797c5308fa6789ff96050ce255e8765671f48f7a9f2d95080744393ccc73f08103ce9ddc7f11f84e3b1f97984daa9a0af36266d91f5e95b49cf80d3b5d3a07df50cef339e3ade94cace468e1d605a3ff24f7ba390c458da100a640a76d54f909a2cf41de0343b0e4f9d354e7fd3fcdfb9a525443ff37ca24945a28cc035e4b6f4434d44b19c6f72919dd2aad2932903b7e866e694e3ffcd66f92c744b1186cf0c538fced1da673e0c6b3f52350000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8aec5f98a8e2d882af82d4b6edbb6d4e96bd9543e0b1502679ee4c971ade2b78c6213915951ee0381f8ceaa1643425499ca8a7785b4a0553c4b15ebf1b0441e7db062040a7bf411d7728a0b17767d33254b0b20255452fc11a2d42b40dabbfb8c501e2bea2af60aa2b53ea35f0a3e59273b41b667dc3c3c685fdc25a9347c11782e0f3bf36a28f8c3b1cab6893241b3a54654e40161f9675e0d09a6d179ba474865fd79ee618687b178eef749a826330055c65fa38b3619b2c0cbd0c8049254567e0c08d2e6247a32e67dcaf4568ad8ce2fd934a1e0befaac2756f39fb03e28629ab89632a3a7b4b515e553ccff6908b208ddf059b07026da13a5eb3460211d55afe0a868d581dec16f82fef1969013769d6aadbc843f5bba28581a623906bc51ffd80ee4b5e1fbd29e511386d10995fa331cece0d90df220b7e2efbbf6c6bbc63d91f8aebc7aca66bb9f16176e5c585dfd1be7863b4767366d059147818aa51bb5126c4238b3e4359e7b558b0bc99aeb9f719053dce55c3ddd5867d9d166e9f800f48e0246f40d6137fe6924710b71481e833e6905ec8bb88986e8c5451b3225f63099064a7976b81d4af461d39aee4cab3ae11783ec6e4ada2b3e4f96efea000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027bc677d25a914c6a75d0775891da548b35dc93917e1efba78e5e0a11d495fff3bea758c3e68519f3b89e8cb1159b542a1033be5e9c0d57f2ede4c49204db13bb7faa70f5dae65a0f07bba6f88ab9bd526ec70b3b881b7be01645727bf17fba0b114eebe3734f7b93dc1e0aca5be02fb97ba0f27b6a7dafb43e3c58e6d8ca25f91fb29a46e7667856d6c56376a4fe5cb8afed7096d9ccea4ca8541e4a536afac88688687e2b79ccf45648fa393b2a73faae71cf7b48d2a9dda27a068e7c519053067ff10c4a2248b40247fba96ce5ecca1f19f988e6bf018ffc94a2e7db0a307f646d56464acd445a7c08237b0d2bbe6825922475080e5becc6b64d0d40c75594c14e2a00bd8741bc1dd10a73184077e382d0b2b1a1c9c9889940c562aae158904d5ad74ae2231801777342b8a8cda359f0d4984b9baa8cb369bcb2f5902d649691cae3ffc82c7df39252f9e25448102aa2f86c9eb2344dc338a89d3dc8ca6ed677b8ebac72f7333fdb0e0a9eb84fd0a59e660fd97a15f055bccb3e65bea3875e81a2a393e8d413794d627fd221f92ecffb432d4e52cd447c256bef402131ce8ed29717106607e00c393d30c663a52a691e72b0af8750be763096be674b935ba00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000610c7e76dd3de661e1ac234dd8a434941fc11161b6b111ff1a3cc793ae5ec15a5807cda4a151bcd0623617795f50e9fa32fca0d17074e6156b49ec0e29d40f407eab531caa4e98375a53fbefe5e93cf090201049afe0ace5604a47532f716b15b3fd076b7614d5bf80836fe16667dfc91d9749aa8add5431a626feb520fe6c5397376826cef84864a786fc515e22271783fcb984f2ba9291adda384df1e2a855662f64ddfd11d55d838988d8019f146d3cfef509e92cbdb416800fb2e3bc686a04119108282512821615c91a50090860811e2e015bd9eaab4980cf89a6d7096cb63d6086b1d5eb9aa15024644772fb77610d94475e9488d973513f4b9909786d017c24655bb4e3a576c37582eea9869196a3c06ffa713677ac02d73ea3da0f3f93ad962bfb26d6dc01008e5ad29bc90ecc9fe065307c9282596ab8f036a293d7759c9d6f31f172dc130eb9b52ed43a9200dca435e1fb4349ed5b0df4cdf3872458053e26196e73f74d9fe5984b7058e7480c6c8612211983e7342e3a0ea1b9dab779fc6365ce9390df1d399d237b49f47bdd214bc3e4871f09b7bb812ed6d1c17b49c4aeea610b2b416a571cbd1d528bec3a48663041dd809e33250e206b50800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002513e85d3ed1ac68ac880abba70bbbd1071de11841216dec270602a29c87be649f45c2a4681d45101738427b233411d836b7c15a218dd2670af8b515b01f87e066d085760ddf46809501d82fa384253b7c85f0ce0ecb569ec1578e0da6a4a97f4646202fd2d640ac4df2243fd0cc63be1907921d9914fe57ed5683ab0555e5bcc1199ab1fdb164184993a22cc6a9b812026f7f373b4a00fe0e7f83a8bc8cdd666f681538ca3ee1fe41c5a90d4c2ebbdecaba983b93093f9da0fd147f7fc72ce3f5212d7668fc02951e0b52db00429ee794390e13fe091624c9abaf32e47dbc7758079c05c0db449cc498a571685aaa14a8ba495b11a732401aa400731b8a47afab09535288e99ed4dea8f2f2e58d852435b5c0827e1680c0267697aff39987a9c282c57f50a7aa5582ad28056c30f284aa73ddb43fc867a18c3a7bc160c9d8160eccbcb548aab938939036375c559a3e01b59f153df12ce27c6b36783fb841d5238045e0ff2d8586462ca976a5a065c04c66df41b1d4ecdde60117675fd74be64937d4a9c927f56296fd5c22f76542336436b567199e067a943c522168d60909074d846ec339a91cb0c2c1ff093357f65c110199cdcd0ac8aecd72696ed5d16200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009334059ac7a947c0d28524733a21818149e03121b44ebd268b93e9ae88c793dce2bc315b906d09163bb370930bc4204c55e0c1d15891dbb03cab4aaf8760dc8d31eb11dee36d70a5f985fb63c82fc71b556607dba15690d6fe80677ba0c82f9751b637a6e62d98c0384bb164892e7cdda2f0ef10fce805f2e896f3d8bec600275d5a2ee41caffc7ff44ebe57fa0b686f5539ff6b7001bf826032eb666a9c4b17b0b723cf754852528833a3dd94ed9d2394f3eab0be111306c32d5073c98d496f5c8a2caccb17710ea13d8447218c1e2603c9fe9251e12c49e32d479cffe576dc1db5c903fa75d38e2fd48d79ced692b4437ef6516edc9a4a58a69821286f0cc40becd81b3157f1faf38ba9bb5c9ba872f88795fb535d7c1bd79d88f36198a01a0ca61f3af7b0019ac2e211f9b051ab95c5d83ed68a73ea6641ff928702ecde3e7b818f643fa1d7da7ea272e204759c0150af8cd3b300a72dcc90e638d7e62e4e7f6a63a587a07fa245261e7fb69c1133ad47d673110ea3a24ecb3321cf20ceb2dc2a1aeac23359bd1c15fba3a0dd46fc9bc6144d6b034a0c8860e733a9a8961fc48a9609ae44e0177c2314f6f055e7b01db655ea92ff71d930b263008e41409b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001819b9a60d437e9abcf7149159bb84dfbb4ed120c8a74df996d8fdcf572987b58adfa01c1639bb0afbefc19333dedaa05290edb392ccbf6c2108c918949edbc3fa9ee46f4568b1e3119dad32f94967c77b4a9c0cc73a6bc6a474909b2cfa027784e9d40e12818fbe7a24241f9c016d2fc493db0f6c2cbaa3f71e1d456024675db78f604c7c1f9c301277eb6550ea5af9ee5cc8ba88f737e6e9fba72a412607a111c108d8246003fa4da12c98d17fe19a2ce32688a6a063cfbab9fc3d1815cdce398caad7d15f9dcfcb288380eaa5d9dc42107b384c25095db1fdca3ea1e86204693f5176a4a24c1f2086f878ae0b31c6cbb1d8b57857c4e9ee39b7272aaec9577b928b85c414bcd78684e0dcbf1f8c965a9295f58c6131995ebcae1a5dfe56db69b53121c8d45a4eda3d2650dc58b8567579dffb5e0ba296e3c7f98bf2b88bd3bd8499ba87e871507b4ce050ce98a984177a796d54c36f4301ee4bab65bbc8c384de74179cb83cb42c9f5afeba80ca640107b8c39f6a61f1177cded9e309c5b8c5e985968353a1dddb0685f95f1538e3a5006b3523ae1d6f0d57ed86a6816d576c7bdb808c8bfe851e64ba26075419b4a5c8dfa06c824726b841f7a9e2190a1c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e3b296404fa4f60459c6306bf6a0c50f26d8a5eddcd89f7a9b55bf922f52f5157c1a753ee04722e7d71a4080c2f95d9a19873658d8d32c876687e48e095f4bfa7126cfe014cbab43467deef506380a0fba0d835e4e458b03ccee0de4768f336f5862a93788ae1a5868ac6dfdd16a3dc6183d644523a3d09c5302435c81d3e88f85c541c495c962d3c6f7cda9a7bd5c93128ce52e116644c8ec187ca9a3a3e20f15dcbafff357d4341ac9ca33b92c7f1424b40c3a078a6099b81e7c9d8afbd5ed1da0bae081957b0662b0be2bd000d26141e41d69421fb4baed9f22c5629c82bab24ca4806ccd9489136f12e5da96f6912c6ab4ac51797115d840badd8d77628c1c30a38dac945ac8c55d7b1796fdf9ef09ed3bcc27379e01c3327efa9d30eb7db2a42e7b7f3161bce77615a6f40588e604cc911e839dd5957971c8a0361b0933cfe2f9e8b27b5cddc8ae0a59dcc322268a09f99a4ab6b809f400f0c6340c449169252ee8ee3f9fe68dfb60b42acb00e749e8100d84e0ff7c37e9bc0f5b27f5a0a76dd7dc6d437ba40005872a2d40a8f670dd1143d7fbfec9e2b335c1a5da466e90572a2d2c88f3c47f31b68fccf1aa76ca3295305e55e74289eb1b6747f50660000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000254620ca8fd8e90350b79d5d2749002d2c9f6e5e6700dafca3cc3480e8bc703d1959e8d466c140280f816a1dd8d8eed17ff46fa82d63d674c47eba489b1cef9b12ea882a3313902812e55857ccd422a35c2ffbcd4621955a9a1d3b76fe02cf2c161264170e3f97eaaa68855e1352efd6378c2b58794fa71736043327c92fa9881824158d1f9d6a9bbbefa024edc06ce22612d43735aab61764dc23c242861440bc3c64a21b3557cc54cbb2b5475b1e196d1241fedeabc2a1dc23700ec6cf7d7aae731643581cf93d90e1b840940042b499dcfd65e47e56d7e98324660dfc967252f3169cb642542600f0243bcc3c8624ccdd7b3d343562b0b0abb92cf6e13739a4e54502cb79aa881688a7ee818fa79563a3b392203dd08589210fbaba5767af2927decac9c3b2586647170f7315b0e513ff9c4cc1da526fef760c9cd29ce2d8d19a29830c2213cf6139ac068f54b633b1cdd47528687a05ce311dbbac7ef9f3a48ed8844c9b3be76f4efa7e876b0ab53258f5e9572ba0b2c1ea4ee536a2f87f3a26c16302890f77ffd80e38f9a1ac8ef7d28cc62dc7bfcc6c0b1c9c9ddba3f19e820cc5cdd79a92d80487d26a7c9c5fd9e46aebac97b93ac9066c0e389e78ca0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e68aeb93b78220864da897a8e1ab87115c18c01dc8e696a43d34cad1c8cacb8260e6535e87e92493ff04b499e105c74ccbae30d5ce2699c43be62dd2fd289c4ea1c7d08b90a0bf83b6e31e4887016add4cace530f2557c4186d3c88f070fbaaa0c2ddf24dfebdb5dcee54d9563af78baceb31993ac7c8676314ac0687f8f8c0b8918be085665de83483ce3e83a9cf1067604450f0b8e4646c1f5b3f602dcbf8b5c6d8a789e8af1f40f9acf07f06de0397b7c9b069e6ed4c1f97c157cb477e89584c3f81268f15c572445a510735cedff8aaa992b540f8057186d872e31c9bf454a09993981721f502d45b1aeaedc19186fa1560bedcce7d9acc4c4a139330445d56a135fac9d2a87ebc1fa902d6ab5f644bf023272e9189a95ed077042ceeaac5591086a51382b837ae37e9c29122683f2418118e22f4970eec2a4479ecf426495a49f8a7eecb462f5d1300df03a4bff49a062daa206fb81bc825876090abbda504b33565b2c68f215de9a885c5e4b4580bf5d60b7b5711491436086391509c4ec57eaa5125c5ea858d191be5642c4a71e114559735c01db5f8c30217cf8d6f328b539d840bed93600fb03a4a50cd2dbf60c40946b68432b564dcba346937400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009104af984e2e3e5d4463c1bd75d4e97e7c734cc9108810d45661a51ebd4922f7f5d3b637e0eb2b32e8f6c649e0a7c12b0a744b5a5f60eb57d99d730208bc8ac82cb9f25d0ccc85fc9ad37a3eba1260bbaee66748534ab2b7d8c5badd969715c606886144fb30f94557a8e7889848742e0554381de827d9e06368ebeb47be84660bbf9c4699d59f1b492c1e3e1702c34be5a99087353f291977f8e294da15b305551412c0b0b811534171da477c47551071a500f3048a9e253cc4065bfcef5a63a884c6579504ff681fad30f75702041105d9b83ea5cf332809bdf7d8ec1385fd6e10b0b266ce710bc0da072a29a3ce88807041b198b501da41fa715887b87e5f178f46243fd7743948b529d398c1bb69a0a0fd3f9a29ffa2dbf13bdb306307db4069e5c0a4b4c894ea3149ed51c880b94ed9c7662c52a97e99ea18a97843195e4aaf026c9277c1e28ea26bdda85fbafc4368314ef3dbb81415e97ca8f900eaa3fc4a2cb8500826e25a5e2faa6797bffb355a08ed6a3c897853ceee364973047d84067e5a8a6ec871cb1198e1fe15f0633c90a064a00b25a545565f7c45a1f1a9b503d852108aba2991afa99320cf880845bdc6fad9fcfa4abc661598451f2482000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082016c025dd39d7c49f84673f16d17bcde9a178c1880f08b46b86c18d64880138359c3151eb8daa27a8ffb10e169af36a25d95213790d6dad1e053e6d371898f363f7a340ee4dcc0d18ad6dd8b2fa2064c8ce0974c08f8277d60195ce4df41b156d040b26c9e1ac24abbc9ef75495f706b2120d1bad4e94e43a0fe73f9b8c6a04c4f00fbf78b3f155ec15f6e4f8f53efab12f093f0e2170eef9c27c801da2a909d1245bfebcb1ea4ff23f17262a04277a2cb266b0e97dca869d05b9ca9d02fab71bf371c5e9adebec90cb61e5c2636750653315271d2f9936f53a1bcdbd947d54caed9c906bccdc40f7f04b5aff174cca882c226114e35f739cfb46cc565fd495a0011fb3f0984a9722a0dbb172741c5f0e1f26ab296549188f549153d0f178bbe44efd146e2e80a6ec1a1bb05fc29bd5749cd86f1563589a603d893d85d3d1ba7b2a30537eb89109da547641e2fd2453575c9ac89e03a854d32b2980356c5cdb802fe1607ddb40ebfb97dedec8318e45ea7f940433f5bb78fc95fa4402deb090eab6fba036f7b785fe16f0f5e9cef30f5702708cbc29a4cd543b86b6c0ef413655f698aea5740a20c12565027f8f95ca17d5459e1b01799c09e9014172aab83000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008454ce35be4992642c6f26f552f53942633f0dee392fe00761e472e24d2a2e2a1dec2ba29dc97039f582d1c21998482fbe2437c408d4446ea0f554b0092f04bf48a3a4c8989a77a8681f4f957c3023efc5b7c9f814d28fe79ed59a6f5e774be6b42fc9d19c749fa169d790c2b142057735a1fe6ac8aee3db5d227986e5223a180cf6eb9bc5081d9096d44cc96a5d1cbc793d5572da23c8193f939fe115241cd8c38511cb4cd4c07b8397ab02cb9897daf1cb702f1d35caa39fbc36343a135168a8d5f9ec8c485b3096be0d7aae9fbd9f9352e17388d6b2864983518f712c7faa20f05e6122db72fc9ad2eebbdb44d4d41a3d6aaddbe96b4098bd0dc484e4fbc74da06f18231d76a801102ddb2a0fa79a1743abb11b5c56403b243062838582121a3f0319a2c409a645edb0c810bd4ba17ec9020919e5befbd2bfa2ce6f14f256247b3ae237c7cda7dbde098f16607f99d1187ad564ec420cb06b6c2af05b3a19774663820c6a7786bd0358702f688940cb0b9b885dfb7634c2dc14b6d6a43b09c0cca886483968dde76373142856b7caac9e16097d977c8a9b3e0ac273964ab5fb4401b3cf2d839943aa460556abde7c4c04a3a71d884fbded5a1f9256fccbd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000139f1531a70f47e5e40298030fbd9f5c53ac7a25b233921ba6b023309befad29bde977286e05a8dfd831c913e661a26b51139d69b63e41c411017f7a1fbdb485828c2324ba91d511d836dd8359dc0b06344111e10ad99e134402ce3a06a1423771117ee836c85501f0d60392f0637b2aba4f8ad2f684c7fa99d2eba9b25dd30bf37c70723ed189875ddbdd74dd8d7b07fd0b5da2d109aa7ffba35bb4656a50a3422502f9b45e9db4916e78cf18dd32a45933eae08be32fcb8660fda9cd380ecf9430a0c16657012acc52712b009ec4ca89f3e87dd885babe6fe6248bfda504ae542b1b7923cffec70e75630885d77deb1817258da44de1a8f3c4cf4452090edbee637e974eec84b40207e3ca92d11d948ba957dfbe7d2fdede5eab80673c59b14bc6d69a4e390c82daa96217b50b7451e4f12f7c34ab24de7de3d9fdf78b5c8c3e35579cc6180e493a2ad79b689c068d0e523fd038e00e658f16e850e798d4360005c4aa8842bf91af8a1707179c7b79c506be0a68f1e390c2bb763bd26f91f86ec14d30215ebf28c00e5550b4fdbc3233f63118fa51a74fb5fcd4c504b3c50541f40bc594ba6766b67d7c8b24dd0f8268e573c3b8c119cf25c0343415bfefbe000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b488801293f19b225af1c49567f691b280bf20f6994060ab0a241f8ac37411524aacb37ddc019a424db2cec9b3b401959fa65b1a573d499188ea9184210d10cecd65f326a792dc574cea2a4c4df2f5c31516a0d2f1a3726911f08b54ff94f78a137ab9d6b4a4bf15ce6f40fbc95ba03eaa48ea416a5073b485448292edb0a532fdff04ba4cc4cbb71dc2475c042e867eb651d37d6fb7e75535520e0f630dae5778e39afc77dd329a39a9162a094ebf57b82b448b3ce46fc8c1aa3cea47500b39c5df8d5b2eaaa71bee88d3798879b6334350447e1836c8f1f2c5f1b96291a7677d4f99110cfa168db477837410878455c10c027d32f333bc80f6825b3624950c05397b5b8fadc68b897b5384bda5f7926001ceeb7637538b3e1bd9ac54f5637d19b3e24da7e59a060143785fac4855bb923b532f6dc43a721a669bf51c1bd8345da2d034ab980fe7a4bbb1078dd5b44c801931339d3750e8a7cda424713d51970ce08f606e541a6d2faccc9b5596529a84889dcd78e03c063de6aaa3f653f2922a00fc0b8cc1900122fa18420af98d3a6762b3e5c9ab5ce3205e4c25ad5b20b5998c63f04cfe585ae608d88c9827ad755d69a62e38a2d3e1be1f9d77057c69000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016f08e0f0f5cff1057bf66a773d6f88efe713ec9537a541a0576cf2b832045ba30bfcebd8e1926e628a60f62c2c0e70e4fccf9635072138a33e0750d08eed567721bef4984cbdd2fbca6f84656e96cc51767ee39b7a883c07f5cacae3cfae24d53b7b03ce41f69d2472d558d9f4115e69b5b55b4e5928c40e100e0ce52c32ef4d7c90bad062994b336f60d659451963d8098d85cc2ec7b514172d4b0acc0df8226e9ad36f3a9fbc92231c6ec6f7e1276ec7f2c523c86be0ca9ca48e5f8a31cf929cc64b305f5c6e5b6394a6beb39b41f663b0da8dac084426017b3291a4bc875922a9fe64730771fe6fda61f140450b193332d3b4d568e9cb52e8d09a9ec91e7f79a3c5d6d4764cfe9e48b9aafec2d67417010739997468d76dc434429eaf0bf3c03fd1c82a3233f8d2bd469c088fab505dfa30ef81aec123a8d87f26a56ae0728d3c31cab2acdc098089dc83f6e2387bb0ee86c0e1778b6db961c397a13ff61234253711bfdf1566303039ca840f41dda328be7f38c4699dc0f27969ff3bfd2c4fdd5d3d22f97343993607bce83fb83fb0e1b817503864c3492d919681121107d381b525aee23f0f84701af21bdccfe4ad8c2985c9302c2ad59fa8a4caa0e610000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000108bd5e462e6310259fbfe34ae44a653d3444ec72bf4da972ce359870254bd6562887334862d7da3e9d94d073a1c22f76303f4fe97f05ca3d1d8cd2a27e0e41c223c08f7dee8d659fb946d03dec1f10c3e3c0d35b7fd1665b237653be4833c4fd5d16763b78761c5ce7976452a752f3be1876fe3194b803455d9ac044e57f781b9515bffefd097dc40d3da3cf185bd7acf92327b6fa49af0ce97c6e639b1795a12be1d2ff9d599dab76e3e4e9985b7ca84aba54b7574c5f79b16491fe2023bf1ec3853cdb9ba67ecc286979ee82f13d25e4df6623df13a3fcac26e2b2523a9f182cb5dfe0e4a52bd221fdb770bb9a56d259f42fc54d2059bd01f5484bc6af5c03b6068d5cd9ca8bf48e01f24e7072eb71d1912aeccd22ac31657437e43489a7652aad0dcaa7716169c4ffa4edc923790a8950f65be8fb88e8d033023b596a3eca8afd97844a8e45bf9d3c733d58ba580605d4fdef7ff7a0fb9f0af643a21a835adb6c423736f58b63d356f7c09d6b4665c12cb01f7c826c023ec787f7aef150b2fbf03658f516b44419e000fd050e45e44f613b8a5dab5b9779801c34a92481cef058ef19fdf5d215d9827fc398c0d9fabe440cf1d82d83ebf1cd11111463b8c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000826cf189c40826e2df48a69634e41caf22dd74a48e77b7005ac1c88a36ffb8eca7b438b8cd6bd550894a74a74321932d021b10e5bd1c2d404d9a67e2906cbe65d35f84228323ae1f94dabe77c7af088587a8bd62c1149a1b354c553b31c2aef4f5c0d17139449eaa6953d291693bb11b8be2389d992601382933b38be216d9cb0b0b8a8b738d67b2ed915d8fa4b47ebe9370c8d5d7a82099645092445fc7f6f56c1f91870d54666266e60468d0e65208c33f0f5c23d169aa43356aa4a9039e2be6a60807910b978047ec203a3b114a5b89437cb7f8e208c9b102193cda2a700b4edc2d9e72d6b290efec777d86adc64cae708e114721c719e00d6b79d273aaafa8a756383ff8a28dd699c3ab889156aa71e3a7bf0d72786ef9ef4a99a82188e7368a77a24967c410c06934f8c273944eb57577399ab90aa068226268d4e6aed35d15d518afe2b95c3903f716e66d652401091d2c75e5a220944691e23d264e0decf13d4252a069904d7c76766c9cce2a57424ad9e6ff9ae436a426506368be7fe83c6fdb391da030ec102c25324c9df59b8c57935b5f7c912e3adb8aa48aa9180ae2145280076744835df63afa4798bf5937d4821b8c208a19b525f23b64101100000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b4840227dde9304fefc2e32228c9463f495852a9acebe98db53fdb18ab3da3f0af6ab247e558ccb91c40bf5a350fdefae586dddd12aa9d752c15b447e823fd12fa4e9272f36574733a2c05702597fc384747be749bdda5b381413887713e8efcb36fe0a5c4b1a2fce6b2625027b2501e2a5502b3969ade04f685359ebb79ff61c0a1c0f7bf21e5f7cdcc14efcf7bc352fa11aaaaef77078ea1ad6ff23a9c533492ae3293a2b678c1be4b77467815aae0ef1a761726ee1b4d28f1524dfb8cfafd4f35627cc5042d41f9eb280eaf512160bc33e869ee828126212b869a006ea54a7534f2f61844b85edbfd8ac3a85ec65530afcdb0f41f2d1a70cea52a519f817e54c232de8103d6d69076da11d0513a6a76aff3771e920ce25ecba21b57a7272df75ec2ace740ffd39303a26f42033a5cceedfef7c7aa0de2a653d18283f0e95f1998d1f7408acc4b515ae3207ab1544f3093ad69d4ab63afe53f843de8a7f071c999d2249977c86e8a6dda3842e88a5c2efafd668e2992f1ea7a223d41a68b0348691071caefe45af872462b0764bf79d690f94fd719d47ccd43dec1a2aca315e87a81a2f5d3a06f8eeafea61c365a9490bfec9d7b8315711128dd5cb3336f73a6b3c21e15a49fe6eced5d2fbbde93e841e074789ce109703ac0a105b58092e3ec7101a8d2c29bb6f33662679c7404674372a97e53fcfee22c09c7ff3576b69fc971c19c0d0bce38377036edb1f216b84352815b04034e67332eef21baccdd66b0b9c2712dcbde6a260f6a1e4e6de145e9420f4b174f4b3f8c831c0a9611c24f0d18e0709a388a5ef8b39d15aa536f423570af483445760a6457627f44f1bbbdaebbf2df119baf630034d284f0fde20afbd9c347d7421c1fab6ce303fe8cee46cb38626abd8308e04f8b5bf6f01006d90332cdc8b09f05fc3ce306a62133ca99bf2f61de1680f8002a10824914ca5f56f459a86578d7546250ee207b463be15d453200f7197169f668249c3188004785189881671b0f6c04466e23b5ab627c46f93e606ad4651c30e7691a6154b0d06f36f65e7ee689c271d5701ca7f0c3545e14744199f1d532ccc1169a1fbf017898685cdcf874bfffcf28bc95c6aa969b3c9926f01a7bee6dc4b2d6603633e45874103fc1d25846ed4d386e686e2b7f7cfa70b5f19bc9a338279faf48f3e424aff08c735c1d2f31be002c12aed714e9329ed4e821e82d2234d28c11a747eee18c23c3a4686f8e3554a512e92d893e650d7ac7b850f3f138edba1e6bc57af896919618085a552f8b1b0a25a83c82aa723fc3e035f064a01e9354c36f3b5a58b5d6f13c99861100271787863c71330d2e559b76dbe2b8408398b0f69bb035552a0e1a5c649e89d5e9f5f60683677e35b4c6700430b1592d8d09e7a40572bbe918011738bef49c3b47cb871c90e6c48f980493a1cf42ddd0a926f6c780bcefb1caa624a2787341672ea850e299bc12d419481c1076f2474233d633c668add5aea33cdd005b9d9f47410b1659a013c0b3b030073fc7b2c78d2eaf6ae8ea008a5e71d8839cc0c236b55546a716162e3a81cd49239246e26fb484a2c39a037688a13466ab9b79c71875f663c8c1f6f7de98af4edf908da12c4b701dff31467aa09e990c537c6c6c872ce0302f2c9b49780275815ea404b19bd66a11840df60327d0b2f453d504748e519f1647fcc1cdcdff7f47085cecb2e11555ebcc3db803de0a78d5292641c5f2679852003c70b6ce2c53c64b36eaf20a53e547c4410ac5b079ef42942b77785dc8d3ba5f179caa670bc55257add2d03da89d9315b309e827700f2d9966f0cc440dcb7e87a70eec1af32cac6c345fd2cdf6bd01ac75f10ec1d2f8d50f3ec0060e2bffe6a37ce3f0bd0bf41035eceb11cd47bab8d45d0186db82e10f87cf1473a656257c1558fb6af285fa14cb245bb2c446206f0de45f13188097eef2b2b1c9e56facf4f2349141a04b9e6676312042a7a4b7526c8b268cd22cbcce59dfbf4dffdf67648994d2099747992d45056d31e00279b64cc7dd01625a8a2fd50db0c58f401981622bc290a6441043a64d7c5022a617927c46797a761c4442608d5f46e505463a322f485ab1ab2a3cddb2fc414893a8c6bd461374a7ca6ddb54c8f3f0100b7db5f75c1ca98ab5e595ca6c8841233cfb68acdafac6434448a2aa8bf75872a5be6191fefd43e6cf2947008aa1e225c2994d19d6fdead5ade05fa6776f5e047e7b3201627bed6a60aab9a6dba3216fe5471d3890a175cc2d59b5942939f46d9ce4dc47a131190bafde3b34881991e83e81c4dd721a87452d771ef3f930a067bd022cfa0fb9036bec4a65d37f89d0a765f115fda7ae3cc6497a1ae94f00c9e69a1fff8e96d375d8810d973cf6e3a133fb5d4b05e00038ee2c962812eb6832f60a6a68df27cb7a992e25afc0c0f58259ab2f09d3a3a9cf0c696431df2ec7a80950543968b3cdac8b088609bde145a01703ca18d4a0bd524b0607020e3275b80fb2e2512a08feedc95b39c85748d721e14e608c07dc2dce4858ad2b316e6ef755f3876b3f3b3ec2318320df6fe53f317d34ab6dc9532a0fefd4108abba8faad9792a8d798285f1ad0415e0e1310cb20efb432f449bff45352b6881f70b2d0cad41772cafb86dee7b6407692617b7990fd4aaafff013152c1d98ce84dea8544f269b85481e53c79de53bf2892bcf4882c68d49654fcee8699611eac0169beb269057cc2e4862e6890c893d75fbf585d28796b66c3f8c281c23b14aafaf64b68de7df5f22cfe1df5e51a6a8192863ac92231e4feaeaae8be2054fc62957a42036614ebde84b49a848e6819205b71b11822310d8866d1aeb0d4ca18124b13294dbde7c00b3ff3cf36f4a66010ce4f0f054010cb15da8fc34bae6130e79e2ac3a45fce32992957306cabd15cbee6c62f72de062394b5c0fa6715ca371a1cf10e4a848a318cce0c7b3a3b7f2790260153f95901156864ea704807cb71de63712ce0a66a681590ea39572a7155225a7f68108c0178d381db4329b278bb604e1fb44662af5eebe5cb749e4bd007b3c3188564aa2e6c0cc55b3839e4fc2f522e88bd6da9f78f93502373ce7959478540816abb7c1b494ca8884221f1d7569397b855470d2b121d1773d0885ecdef032fc21d6269076881337fd041c801cadf082fa8721792b61e018ceee76531366fc93b88fccc0bf6ba237d9ec34bb44f4177cebd4dfb686366342be2df6bac92fe983d49ec6b00b25fdf098d2cd42c5faffedb59fc83cbcb2ee241e6dd4648824d335968b1092e24d54e6952e24e0d6c7dff4d57ceaa647da80919719a82b961b5b6843ebdd10171868e879079248d14f350d9a86fcb3c468d67c65ec5d7dd3d1b54a18f79bb1a641b7ef9872f6d91498333a1c7dddfa962d714e6c444a544ca3a513c6bb896032a9282e13443e392762cf17ad7fb9ae5223f60f8679ded73bcac9222e10b7227e3fb66a59aa3e0ebd99811dd57b6be485ce3f3e16e93c070f7c6430ddb1d7e26233678599e798c37517acd43ce0e65d60f7bf9a9b0fe955c828a0937819c251a5bbf4abb78625bc51598bee3c0616650b7c94354e46fc6bd7f8053b90cd2a027b07d635ba888958b165722cb6a9bbb47b6b714dac731c1e3ba667cc2455bfc19ca4392c8a4f18daed637579574209216569e1e281cd58fc3efc9d46f4cabdd263a32a7e6c0aa01e354bbbce8e950c64a1eebb721fb04e7347c5baff3f8668f0459833b9ddf3613602a64a1e18f97bb3aff3a13d584bbef8e0cdb947de6eee61bf8f5608ad5e0a54395948b91fe5b7eb9bfa1fc864fdd1cd96d525868dd4dd40bbe036e7a6ca6c2810d51c538fbef4557792e93e5c4d3518194c25e003bf2ba2eb10022b8afe85cf50192a58f863bf61d0e6cc32f0852ea238121c80410c5b126dfa386985b03f9b84257b902b0e859ce60d79edabda52a346cc86b5fe720a717e75e39427ad74633ef618efa5bd6f6a1c578d0face3cf64684796f64db82e326069035bec4cf469771bf4b45cf3727977ae639d1cc841837d18afdbcdfadb50d6e99d845666d35c6f6fd0e96819617838822c45fc6f8b8c0c08a100c9619e6064472c9b4dd829b3a4d0f39cf9c717672e99be7e18165bbf1c98bd41474db00262fbe70b69f0eccfc8f48a35de89de4ae7d70709b1ce43c8b0cb7b894e9a33c117142bd2509a0c3219c61f42ecbfefbebc79f8f820a1b3272e06894252b80311cb4434f271373e1985ab52f2b1e2ac8d413403af1920b73c451c9d1779cae7f1edcfe24d63ead113aca00b6c8753acf88e509d378d9d051b6d4ca82b71608462ff4df9bc0734264c2d4820d783ad88c4aad9f9d615840d7a6fd58ba09f808ed298e69b2ed3c767e31313ce5fe4322afb55690b93d87b059514a371240dff0da19ac886d9b4c6d0d5b000160bafbde151336ecc2b50813bfb09875f6b5c5e5890b737515127af5845e21a8e4f55aca7945b1203e7e79ce6b80f88c6f796005b2172755363b76a8fc1d785a2ab4ab7efa30d3fd0e9bbaff8bbaa38c3ca80a200c2487e73002259f0f4e283ccc61eacc70b81e65b7207f022fd66516b0b433042225b25bf0f34339be23800259832b7d3bc455c0c6f8d04e48d8f7ffc97409f31f0fa894ab857f4d43e8edabd45a7d407cd19d9d1f701514dea2775c26c18ccf871fe296bd34cfb8062082ddce8d684e9383b8d2ddbc0d78342246b389f048a52504ab8677bd533e0880a3380fb702d607fab3500ffbf0d9e413d22d078c7a3a0e2c04ea7ea21dce2faab08d999ccd006aba94999567f7643f70bec92723b1a01f2d3cca7e8e5035da82fed096aa0dbcb5abcf320bbe8f71447602544c9af8917517a379f46de693b2e13a9eb92331a0eff83b9c3b15759ff7febb9625abeaac9d1639756f53347585a0f5485b33a117a987d799b34ff713dfe4caa4ba4784056b17ff65b0dea4a3a57da0717428c0d6c5200c9bd674d35d57eb52ee49963e3d2d0618fba81528c184581f0ace21a5e490757cb449554b403384a74ee644a8f2351ad4a17475b487a14b9dbfda2ee3ea0336a574805607708b4ed6bd1d4aa66ac12b235d7095c14f71bc9d67b21bda0827feb60a2e8ad74878aae03c8c7a9820f31f46b06f32bbce09dc39212ebefe172cf13ea748db340ffd1a26b7fd9261b17810ae7186d8854ec98c73a1d0093e2ff1e43080269b6f29147c8c954d40b8077123d1cab412e79275037aa92ab08867588682f5de62183caf37b49947fd137c8021c067baf689fa8ffda2661f7450f8cee23199bb49b52e5a0bb3ef0497299dd91c7e61c9adec80d9eda2cd24f555cb1a481b7c9d4473d6bc45106f0f25abd16705145ed5619130aa1ae3e82c296ca31f4a70f362419e3ae313290aaad4c3d40c1aa592d46c5acbca325f72e3f866d55d58b17b319aec02589eaba0366121c66f101fb92fcc6dca13950b6dab81f7317b40638d4032e68872bcf697894afbb978146c6a46340e9b95e31a59988047ef5658829fa25b24d9ecc5b9d7ca53ac245410b8394e745948b00d8e783f9c571be61aa7838d8a38509378cc1539884049ca1bc11f9d9845c6dc2594b80465c76dab5d30e0f6a72ed927181a706a51608c12129df846ea94d245964320dff9a47ac87539aa0c99b24f6142ecb116df7430670dbdcdbb0da64d2cc431f4649c0db1344394836fab4371d60513306568675eca20cab4208a04536f6875f7cb18e66e7b46ce7b4cbf97bb84dcca7d43c1ea286b003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000004d118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000004d0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000004d0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000004d0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000004d29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000004d141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000004d25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000004d12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000004d2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000004d189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000004d1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000004d05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000004d05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000004d14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000004d03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000004d2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000004d1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000004d1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000004d14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000004d2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000004d305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000004d280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000004d223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000004d17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000004d08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000004d2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000004d0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000004d0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000004d172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000004d0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000004d05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000004d137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000004d2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000004d2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000004d2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000004d18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000004d0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000004d204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000004d0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000004d1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000004d28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000004d1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000004d21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000004d0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000004d0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000004d107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000004d2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000004d09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000004d24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000004d03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000004d1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000004d205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000004d25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000004d283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000004d21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000004d094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000004d0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000004d1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000004d2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000004d1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000004d1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000004d304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000004d00000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000215eb3cff625624fcbeab94ccdf3b71ef5c0bf6718046b0f4ad716a773e46026dc2d50ac21dfb489535cd6b23bf895b64b6049ef1c91225d14d9153cd178d1f66815f6cf7d00f60d62cc9182167c6d98f46313f430acf4154ab3e0211078ca139047bd11285c83d1f30dc67d2aa108fe9067feba50c83fffccb53c9e5c10ad21157c0496f338b5befbf786aaff46ff1f08a7ff6627bcb735f452681429d0cb162e21c5a4af6349fd47c7305e093917e9ecafd242a9010941c0d7e4fa70a5d7015db5dfb33abf49bd63e18eff7e186177f1e23052f9ba28b4e290f4bb1f67f22fd97b27f38c8defc80bf13dd86f8f868ded946f3b7231d989ee00cdfe35e5bea88457e9143b61dc6799afeffd47669f3610f5cbc4df0172c5d22859c6ca94284ba7efd15311bf846237f9f7bb930ecfff16b5fe35fbe81cda8f0d169ff6e33871d10029196d14f9ef8f155defb88255f71ae5665fdcaeb3e78fe056f80e9cf46d47ded8f7f2e276cc37a191b8b2fc6d7d1da0749c97b470e208d6ed4ababb744381154292eb5b92a1dfb726267f5c0fd27e8fa7138f6b5f46f85ee3d690c62c46b1c97e3c596c24b8aefc93680591454fd4fc952b7c919053ec271b84aeba717f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000553ea89b406ec05c18df3d7338d4c92bfd09f708af087fe56266607b22378a128518a896ef62072b4aa6fbdd27a1aff85e2c6b37717ae1f2fb95bf6eec4bf7d9b65ceaa351cbc158d402b1ecba02852e8c92530dd8136d964a861ffe60686b3459ffe04abe8a6168d380402c0107451c576f91f1be09ca35a52b60fb5d84d9f921d2fd9586dd6d63a51db02f8985f2541b2fbc13213878596bb14b1ae61f8aed7a75ce0e7e650f23b12535190fb607bb611e3413453c174e28df00722f0c3f27402a533ba51b681841d7e91c727f719a8928a637ab829c4714bb298e65561b2faa2c01073d5053c51f2a7b9be70dc075d04970be8f0df89e23b5c5bf7c19dc14a7806ec7e9914b446acfadab49be0327fd6084967d6aae30507b0970c1490a47c41a36bfeeb705de389092e44f08392ac3270da0c8566369126ee2c4418a8698f1d3a397b8dd278fd112fcf82bd90400694e877358cd986f83eadc8850c8283fac0ed6c08d9c0ca7a82da1c50c7142aba5b857d1791f4fd0848577b85938b035ee743311dae6988559d92dc818e4f008d54ca70838c35735c7d6fb6f8e436dea043a9f53498200816232f305ec38ad5ab6395d1efd219b7f4227f1568712220000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000245f18acc9c91a669ba948ac0116e63af6617791e361a93a4e3bf08ba1d03d3126dc295c3124a96f8a430c94986138bbc3e8f235b22f6db88992f2d1981e0cb6b16717515dad437d507592458917d7ee616ed503dfcfef1db374f18711fec9c6a6c1009194452a8abcbf02722d07577a6843b7aee4c03598a1136a0d2eac20ffe0146042c0b02c68efaab38dae69a4a90fe0e5d817a9d279867d78ce23d1353d1bc71feca4b0ed2d480e2f6df6a5ba3b6990fdeee05f9db51dffb0eb3333743118471a4d529f10bf5fe4253befaa0e9c931b129042d3f27c5df19443f7d0ebed881b5e3da74d4c5a913d1959bd5625a78dd8d32dc47d0c1fe0c9e7bb7b959324824e92f905d1a10c6dc8aa418c6e95a44311659d364a6dc79cd43939dfe81421155e010c3253e72663f7b58469e338605e6ab8ed173260afe96f3f91d73167ce4f1819d2093b76cb414761a4f09946beb6a57ecf445c72499ddad0090e514d779952ead7778549444bd5dceaa1173857b49d934088feceda6d1c06db8fd07dcc3f58c5d520c4ffa3f5bf7b91d40985a5e2dd7f4a1f379a5eb27038781be1d7b0e354438885ac9dc5c19f58fd190fd92a2e71e8b5c3a29111484a59a7e1edddcc00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b6e374b72766ea891ed57dbdc3fecee9bf841239a087ac075514b5754f1728624f24d9ea0bb70d320a414516b020c64ec97f888174ac1b5c3317fda312b7435460c2e4e823e9fdf975a27351e14b2afa9110baa4d4dd33e9d5570712c4b290c92710add615f2cdc2a7f87357301295dd7b701afdf25f1cd8104b99c2eb7d7060ac15400250e795c030156f8d864f9d11428354733d1184b358a6c54c6e7a0393279ff58270908923782985ca8fd21bea2016d75703f3b364a66927f98d7470d695a223b3c8c36a85e2c202fd8ede1ebf39454e08a155b09ea5dd99ba1406d9b4a07fe4d56ccf24c4e72c9b2b723f493d9eb6d1aca1d4a45df4ca55d5b3b0c8d3da793659ee78e17fe521b53ba2d555274cf31b55728f9cc0b198844620dbe2040864750550a9cd1c2d312126e0fc6fd9b7cfd9a181f05872348b0ff8caea573d8fb4a894af83b5a209b422bd3a40d0f89c569e13230f082f7ba68d16e6a256c46c638fb214ad2313019d2b56518c22f702a777d51744a810e6cd5ecdbc5054a06f7a483198e84836104187a79a0520fc881e83dc2c50b21f88aa25fa06fdbbba0cdb6a4667bd39e8ccd9cdb1d69a3a87a47093b1ecb9ff6aaa9ab3cc77d9d92000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003aeb7d882d931fbea8a6d5f7aa7b7c413e3c10311fc3f465f49402fe730b94304a7079fa29ba34649100116660573de65e5446e59830f2f5935ad00ef65c7c08c74496545e2a6b491ee9dc391ec0df397e555604fbe6c159fb8ed103e6e4039c75a072d14e49c331179a3a123734f7539d83437702c6eb0ae3560e75073bffd4b7a5390cd037206f2e0d64a7327e70375da89b049209dbba9bb70c2b25fc2fbfd0a94237f1f2b73e0b02f1aa517bb94b3754395e010c21c46becf7d8f6131b0a3bb3f5a1c1cfbb96ddb6cb01f7c544153c4f5e4a73cd99c2cff186280d7950e6de90ca8a3f828e7bafe1800ffc436cfe5b1ef49280d6a151e35f5ab6e0818581b900b174026cfb8163ceaeeb20864c0997b0a0cad2e5b5e95005225b2ae0632c641b5a4f18edefc1efe40456bdba874192c636b3a6cc7a28e872712aa38312adaa3299ae9e0d8c1475bdf9d98055e57beeeed25e718286ae2e50da6a91ec468ad183b5fcab46971fe71dbbcbf1c670daab3ecc01f3fb0089f2fb986e044084ad7d268bf5124261da9f936e9f47342f226900fd266eb6ba043b3c3b89fcd7db1a2afc066b702cfb309518e2ee2efeddc59b19ff33e91f47d89096ac7bcd23d0e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a02d1d4ee889b71e881c4409889d68a7e312220d5b98a150e6550d64017897894d87006432583e2557cbb61091c5740115796376f0e7a7d5cbb5e7b14bb42372258f0fe8ed453333dfe9541acb13949c27a6258c75e0546c0eaa074fc835397c10788888293f5c2d791bc2bc0276f0c45a365a73fab84b0366c8d0e78874a7f17a20466d5869222871f976c388e4ab0508f9020f1c5eb80f35cbce056b018458db337e70d40b2f6ee16e55a07e8c45ea21f9616a75ce18f07de6722b360faf4fb1dba4f11d5207a1a7c3a63dd2499706fa13a83595763a913eb794a40495ef60cfc5954b866b1966585114f2ac92a879c2c625c8f7604d85b0af77eae3f3933073ee09daacce667cf06b5ff6c0c1fc3c5511dd92a7d2ae0a655ca71918f1b1236b7dab2512fb6ab871c0d42252dd607a900d34f9c8eb442bab42002b5020d67e74947d09fbd16ed6cfbc13d791c7ef87a73fe34927151977c0ce2f392b8aedd262f1de78e0bba7e8b5d819c02032fb3f5d15e4b41f12af0045073512053be3cab00d37a6d9be68e0ed5bd89a068cf06697e3ceb5ed81f6bfe40ac03a31759d3c3451c71cfaa5e08f5f47992274b9a511583e97c3dd8d68d5a51958f46ddb32ec000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089b65aff9bb25b7f52ef737fc3de141f5f3c4a800d39b8b13154c91bc54cbcfd73939fb4fcabd08f29eefba3f695842d435e3e04821eb5971e0da4f7b97d47cf202b143bd02797564cc6b1f233dc944d254a0d3748d6dacd946f7a66adb23ec7a4d1491fdfb16b1f53df2e2b7d9743b7b990026fb9dfceb8514c9db24bf09356a8a8ad78bb38d622efbe1efb46eefb2740dee03cb8f540bb625182e9a5f7c2dcfecff81a56f36f52944e43200af6ca51921807a4f44c35b77cb7f9aba98e4d91ac280cd38be683af5bd548005a952636b7e468a522136f09e0ec885608eea1f5548f4f85ab8c46a05d7b2a3ac4676a9b4d268a1f4e7ae41686356563efa10a5f58274d18ce84e8b82e96762d2f456d1304bacfc0e7661920e98fb97543789712d13ad6ac16b5823deb2a77d2e57c8c57f4edc33c0fc498f3b7d48f33825e969b61cb4bfd183c5148008c7fa5b05e6b728abac8273780808a55f6d554ccbf53a364c175f628b0d780e23dee4f937b11f0b67db1987fe0079ed54f2d4dc7805020c3d8fdcd95212d5f18dbc5cd1b9f02383f89264a1015839ecedc669daa1cf41deb0859ca4349571b7c86e803aab929ef47abef36e90d4f41b2a4b7faaef63dc400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c5da70aa63255838a10fb548b3e863faee45a9f672b7b57f606a2db0e6b7f3e542fb0f4974e5bd1f99c05cd11a73adff43a9f7a9551cdb2b780b34a447421ec74b072a2472461eed4e0726daec6289773356688fe22af1e84c14f2a73f73f025661d749e9bda8b001c4b6ff39c3a785c5a774d7d40d61170bb5a814cfec2211ba67546bf4677899d1df4aef00da1737ae4d38ef27acaef8b8e22b8da61204d1b1bdb184cd3bce77b09a9b92cdd72e5dc22d28f28bd42c090f5d01dcebda6e508486851b1db8bc2ed4a30bba68e54cc7038067af9caae9a327b653d212d0860794ff2771a88e36deeb92897d81e2ecc03f63060f2a39368d2723b94745bfb7c901c2db03f0acdea9bf42f7ec24562e9e66c7a449df9ba804160811693f6bb2cc720391368de00b2129a708a1d3b87e00d50f66f6f41e0e416d8dc3092c0b2294fa7ab67a565b66cb4e78ae1aa08b404361c0448baf271274a569d75410f8cc4eead10e6c0de675d928be3e43b0a6673c317a6e5345f438d8c8009ff64cd0ffa35198d03a94fcc952cddedf7770d9ce93da1a12dafd12f35bf5de03939c277b98737f6f249490467294b5cf688a70285aa28a0f7d892f15de4f744f002ed0e55900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d3133d982f0ccb3af31ca839a9cee68294545ac03d33bc902b3497fbc58f09fd724c759003a2bfe4bb81a85ff85c7a7e800ddd4cd25a299f5781a3120e153ce20a967b5eb1333997ee501220579ccb08f1f167722a0491fe729d799993c87c12e3503a76234f2f3ad182db283ba74ae44605c70f0e79aa6809527f8d4e1a7518b383d53abc70ba093da4e9e6b1c06aa0276ca88ef4d44fcb71cec7e57aed398a9265a75ad64c90ed923ce7883565ab7a7e9a50b7c2b7b2d4e9b6f58d883728fc81b56a1a4ad6e4d3992ad5137955b2b4456040258e1b3e98f586ac70874e02d356051e98c26aa7bd2684c195a8a366b04c987581f37e76a1b922fa6a668de31ec7fd6e565a3366f60bc9c4df787776cd178bfc51ead081ea3d5071f25ec689c6bc05904b68fdcbc128a465d6f7f85a479b6fb1c68069ac288bb47f3f20a2d5c0e2c9a83e95e78912eb12bbc0ddf9dd833b708650181dbd9f87aba13da3e24e297e78171164d09a7e6c022ab08906a4b1922891311f256bb95a4d6f57f26c7029c617e3be5b7f0dc27f854a09689c12a91c320d9aa524fb9356b3bfa603869f0258a87665b33ade617031ff74232a532fd8c98c50d439c63543c31e353724710000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e2593c1a46c8e81b1e1df8b57f5c6a52139d55d8a105d875ed56397e19b2cfa233009ffacc1b82b7acf3655ac748791e2e07cf81fff16b8308a4e5e3a93ddaba3affbc29217dee5bbd0de6744c74f898de94c23a3b2b7595d260ac2a75436e168af3ef8d4ae17ac4707656874dbdd0d545263ad1e093e6ead6276885bbe4669f03128a0ef72cd328815b192be6079b6e0dcb635b07aabd53f472a2a5924ebaac47c45f414fc3f6e94f7256cba5b512a4af183a75046522e691cdcfede53fa8b33d5700bf53214988bb60097e3cb003291da4d793d1cadb41f3ac2d83002c7e29dc6868d86e1d8f46dc50f36d1c84e0d61b9b67ed2c8cb9048a9d8971358ba5c92221dd2b37a12818cf9e699646864305fc212c3141637589dce57d39d10dbadf2688a193b98cece733e0eb98403c3c6772c323028a2eeae58b76c0f718603fc6d238ccf6d7fd184b9e3636675a64841a8b24cc01ffeca7f6debfdbf81bc9e6c0289712903001bd20e0d68374469ce725b161154f75aacc5de40aedeb0f748cf6b6d24ac3f5bf41682182ec3e5548e7ae92b1edfeb257797d152e7d8b0a6ec8d120cdd08669296f70463097e57d267d394c9c3b35e2ece7e148779284ae729a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000911c0dbf98db2c4cef5d6b148ef958408a074d18ee67a34877e0ab45a6adce5193bd1b4343526c333eec847204a08dad7526b261e89f02d967f4e1061682cb7294a1fb938ca80c94e4a258b727ae034e3eee45ca86bbc867560d7ca04d3ccdbe252d0eba934a8211c1d1c1f721f7f600bf44a57708a41c2eea9e7ef5cc94e0cff3e833d7afd0ef59e582ea1730aecac0b1e9f933f889871c682184a58abaf67eb7da6b9d4008aa1462827739a1660aa58061ec079581c59a16feec0357979c23a9c278c2f1fb5a76e745129b74fc93fcdc89c15f3d85cd577920ec52bf9bff588ce055b2729a9631288162b75b1360d2005c30c34aa630f79bbbd2a90526322718e3c55fe18b6dd414d6d675dc0fd383c1beed57228e8c539ddac0d5a43315c9b70b19701302552dd67a3d63261118d787041a728efb9e44bace9882a478eba9a75244c27e9be6ab8c1ed2510ae55f809cf0b91cb0d0d1d6fa7c078d106a6f36b647f61dee0a65d8bd1963cb0192b45490c1930a0ba36223116b385eb33741e898eea1036d18379352d3638640516bf6ec2d4571f7c5a11636d53c6740fc90cb8003acfe39456ca2547e78c8b7c6001509d36de4a3ba1913902fd2b1e0c6029c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d6e872a835a6aea6720c6373ad83be2804b3be4fa2dc255d4c4367c941dd3109b66ae92f13331f04c2b64bc9769ad7324c64b7902e4ce58c6aaa4b7b9589b47d861fda6f2aacbaec4258d91deea65ccfead2f1fd78ecfc23a6e9fffa7cd6a86e1a84dd837feeca309348ca8d9c548b1430426973a64ef6cc54ad35f34fcaaa1945f57e34411493c95f1fb196a2551e100f465cc01833083e898fabae2df572629454ef48720ea983c96c640f16722479bfdbfa49fc5f63224717ce6a3fe5ee781901db3ae5e08f065502e2aa763d20d7548f744b4b5185e4af7dfc14e9d4e3186b33e1ac6ebd27cfe3e3967f9b58721d6b9b206065f329716be76ee870cd679925bdc5ca0ab15b956941523c4e1b6c8b8e5a7721b3740b06dc50b8e0006ab0112b3923f48eb85f898e5c02cda25d5aa469f585f437f3223caaf73018b632a6d64b12702d4931ea3043a79f4a3e24d50db7941a948875cc79b0242fcea6f3ad6d3b4e37355c6260581e3b31687e4d2c31201c68a51458ab902ea836fec31b8ba3849e21707498b6b7133722298ddf6f16ab3f9286786b54e54b62d1822d7d37c2b3ac8ae73d140e2fc7d505a47582ee8d3b3ef04da4e6737188ffb251244ce8e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000450d80dae62f26ccf23860d61f011790007b83a69fc5c35e24e994b4d1c52782c94ca813ab83efb0d964064164a4c9ade75984ecc654fd7035baf1a9dacbe9a4afe5fd5c4edf35f097267cc9910ce28f2b5fdccc64a3ea81a401b1ebaedb279fc8f2a37a8ad94ed37a223cc5978fe41aeb61265978850b977faba776b65fb244048cd335b9facd73d79bc5396582ff9289837b789895a9cacaddb96eb4490ac0ab2bde553850373209070516ab220760ad28e4ed2640a5fffb52e2f434c6da28e54b8ddf4c1d1b895f6d2ede525134d167906ce68390735acc9be5825ccb5754ac6af22d5d27b63bff02de2288a070961a0946bdaba2422c22715b13c11b2f42cfcf83dc64dae353b1e34750765e1c8b528be23d06c6ae678b8ccd8828e5e56928985ee302ff3e02b99f4c49881f8d684415d02f2c595c2b711f22fe2a60a990c461aca25c2cbefd98d48a34a2c7eb523e0c4fa0b3d13fb3a8cab635bb53639c3cec8a17a5b651187e8e4852b6750ed8db1837235c9af6c7cf8078b63ede32357a88159edd0460a7dcef283fbc33fdd0dbb85a70c7368ec396974fafacb92e9b5a429765152f2cce5c4ec18f1e9bcc8ffcd34096a5acb97bdc4b8bad5fc678500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e327bb56a189a41b76dded1f54f2a59b2a19cde3016a055bb5b3cbd81bc5d2a25b2182c3269a4f68847e6ac1554237368900ef189c5e9d421f4b420516fb047ac9eac2db43c528bf50c386257884721d55c82151e3e3844c9d32af698890b54ee75b3c5ce6ecb3429dadefdb950fb02582b79618a82750197709c58a8703a8e168a26cf4931e4f0fbb862e6b8664fda8ad5d9e65f8ac2a97b398b3dee197118688c28b249e706f47fb03ca12b7964d0fdb8e727cd2823ee0ce2a42a61fecb19c4e5074c9a8747b502e472e3bc956aaed4622a8391339536d8904ac4aa8e106a8340ce44618498895a7b1d4b3142e07460d34855c075972407cab4d49520edd703f0ed0331748605692ac9ac30ce2cbcecbcf74d6560ed889619d80c530df0c34f9d76f841a0dcc3f698fe009f483386a0fa4ecf518982c8c8d08c53c6d591637798db25580055bc80c814c75a2c3de38d70b831f7a6a48c94f45777047103488adbf74c20e67f8f665385189e6274608ab5d2aaa93244c60efc9d88a582917c98058c8d8f3539af758d52532df074e57c0d18c2a6fcfc12fdd7d94ffc06a3225ebff71eb87f93aab966aae05dcfc39dc0373d19b85db69cca25a9cf88b8ef2200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cb4c62f4d777a63b8e9527bc9ec2cf70360fdca869a7da090931aeb79a0d824b971d77b58690c963db48124ca547d6a4f2f5150555f8caf603d8ca6e0c9b080dcf82a0a8ed98e3338a0a8af29781a7f57bc8d694d77b8e1dfe1f00598c1f611b314b78c7df3ef05f5e0465e3fee115dc9c9f79918b7d9dad702b802f66d6d098dc80b7650e4ff419ce0d740d33ca7022d234c7ab645f258af1004474b31101b8e275b6890bd289518c438a7eee1407d5146cca382a91dd854e81cd30da8eef97d2341d574b6a4fcdb27ccd9b2be3acc77d59484e52ed0125c3ac9d4ab2a203531812a35b4834d856b86a23fa868b7181d53805b41a9da0eaa555b47352643ce577fe2d5c13b890917e96d308bfbbf251e77efefe98cbd065af1504e9155e8391f4c6ce8af539671019ebe5c6baaa1f9fd71e9d0db1490525b01c2fbcb160344082ec4d0cfe12a55a14ec600b0730adcbda6b469716cc91177ace231b95b711941201015059f1194f4bed8fa0e69d455e8ad51f13e434d2c04c2da5776516647af49c8bd4304c896141d158b653698b670e7bc723a2172c7b3528aa68ebf848e3ae9f2f2240840def437cfd1203014821fddb2a378263c3e32c5dfdaf3b71ba4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084696243229d4374637b895c2b7c4f47108a189348a6c4a84fb8c874d0ba69887bc15b1fb42d9a78176f5d9ede530cf8a128d076fb05bb1b4e9105b7432c4073808b91bdce6a48bb36a37dad5418863df148c9c4f13ec475164a3cdfd2da201197e03e72ed5e8f70e3408888b18a71aba2b447b5c5158b3433c554861ce656a5ff5aa25e262bdd3d4b9d9a1db019cc96643889c1255a88b041f3a5087367854faaed0d912be7889eab8e974611e91c2d6153278d8a47199161e434f035d8a676a8f5f3817e3275761d7688cd48e395cdfb65a818fc98e7ddf1d3e3a0cf7fb3331a092e3be246f032d85dc4659e03cfdc703cfe3a7079c6fdde35da7531bc8e6b5ca3c9f9b15c92fa4778c024bc919d38d8fdceadc19ce0bc9fb4411b7bb3d4b2e1baaae1389520435e8d157da52152477f94773bea17436cfcfbbd1d27712630571d3c63fdf53a15e65747d613fbb5208d091e5c4b18a833997d3a5775fb467ce9cc7db155a3a4fdab3496d1478b09725ca8ca2fedeeb31522597f089ede047ad8e7ba28cf3c58f3554c2672fd1cec37bba1ae55e6e64376cd34d6d4960662ee9c6cb5b7d3335e1009dd5c1480b814c0c7e588515a976770e6bde611293cbea40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000232e062568e546de58b2d167d9ec1572bb6101309bd1cbfc6cd5d680cae44ce8c0aaf2c4026f666d810bb2e3567e49e1d1578756b4b4528151680a574852d991d7838b786e506ccfb369c7fd36ec705bcf59951a67310fe62c5f923afbf93c428472810b7c8c676fe5a4ae6e9269ca816bdaffa7d0f1772f1ead405920e8cea7a2243ef13493232e494d2875d991be0fe17500323e314508463612bbda1d3be1de92c560dde5abd9fc051c8719bf51141dc7be38429d5721a5e23868344eddd7fb220468750758b3acc4a7a8104a9306ec72d337e8c01ba2f5b5e689e3a4015e92af072183799e46ea79839ee43b4e56be5d8e4a4c851db522c9e53fd9a8912f32786f53fb8c2f55daff1d41f30bcc0d57ae9df00f1e0af96f74951b9416079a257767884f502fd0e7cdae5ca54c8a84e4e0ec59f39ff46a56b22b7c144d0318bb8841e4865e28f6254533a997eba952eae805d39df08808d69bd5f954e23612fca305632daeccc98cdbb2d056db03411b6037e2d8938c3cde6dc0ee6efc5253b2c0dbf99b3b8667642defb6c1deb554d4c6800ecb75ab750edd17555d193f9c8a054b27ec09743196672cee493f7c76f67ea9ae83dead7159e1271e8920425900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b751ae0d3c687f051731e279d4a0a92e57680719c86d44403874a9e373e95f3ff3c95e6bd9ea8d7b9463e801e9bd98606931fb930ee3ef30dc8c7d7d5a53d05f0b844de498cf0b960b83a76f5e1aaf405762e77df1aca55d6a0dc345e3c2ce176cf2b08fc4e01f3b509c5a084ba6b4abc11d5bdad7fce877222e08b10eb4fe30c254a02ff0df7a621efd26871a6c20983a56acaedd97360fe82407c74e5e7d55bfa7cc1501294f3e055baa2cb7f1139feb80a208a61fded56825a25b81dc8384f3f04e07e53b97b1a0b25894593c71c1f0226902c178cebf63b72508ab6dc7f0ab62c5466c88ec1588211d75b5fb3b55627c28d506d0c0eb0e283392680055e238c5b231a27e6cd33d557d3f90154f9853dfa628bd1d0b9d8fb295ad662b8f1693cf2ea0a9692f729a74842c4147284c5a9084ddaf8e2046adf84bd2eabcd453effa731f8053811162928561ba13837f66927bafda5837cb4159475faf1fa9a47b748d738e3bdbf297bba03bd4a6a75e6c699e6398e793348c384a5b292bd2863f67bd29ad8125f36cfb48fb54245165ae46b48724b2552e32f90b7e87367253daddba7597e5c51079517b42180dc7774931c7de70fd50fe2e94c7d8a18fad00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac0d392b145e4a8c1509f5000ad3646c7acad75150439a3f4afc2d9fb009b6aedd18e1501544c78ae52b46f5959e792d47771da1f7a8712a2ed2fc2895f91d8902e2fb083a298f549cd64918be0ca2eb24060345a05d3d19471e3e64880912d3f645243c18d765212fe4e1bcf25f654e157f8b0ae8241269954497eac1facf6db5de1aac3fb5bbb0901dd4655ddd75f2bce9c28a53b7d5590b8bb5f202d9c840a1b786eb59fdcae87f5bd786a8220ac814877c7204071be98e86d43c2a134913e1f0bee73af23a5d4c434e0fd575afe42fed561d72eb4dc975f3da1101c18cc2c0732bac9c21d03df61622ef3ac58dd5ad35e3184d62d1f78b7a7cec61e7b0a5e592974b2288c908a653b44d8ff0c655868dc900cf461b7259df952764fbc0e16882d84cb5ef29b3fe41e6cc1e6fe33e740699a9c875301f277a2f435c44f93116449e76995bf7117e0f7880d70a0a9c6cab40bb5b964c2d8c20c06b1bb93c9da9c5cb46d1cd5f2847c56c0fe9910dc6c50684c6a557682219547b044559bbf8efe2e3f6f52349669f79f2856e62de4b6bb3d190bcd235a0572a3db7f6bc42bf52b9a9501f90512cce362bbe2c1ab5ce0902c38acd0db7e2ef301a2a468d4356000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095b38ec0e77911a4c2961873c6134022760dee16cead61962f86e6ae6f374f4e2cd46453bcc2b848a328d6e813e22d307f6e87228b0f11cd38a2b90ece97a4f12f68fa8aa6a5a522c07845197146f76783aa89fcea7f79a10de86decee1d27e596d5a7f79faf98548e4ff04f8da6effd73db53f22a6a5fc3f385dcc8fd0acd41746ee9155073687bbfd3ed7398ec02cdac53ef44bf5aadbbca287ffd401c3842b8facedb15d33a6083dc60b26509597aa5d047a0766eb3bccfa12be75077dc86b9813ea50ed26ac6ddfcf7d97705b15b8ee993fd031b034f135434a9bcd983fbf83655d22cb1e4f03c192655cd913deab2cc0bcea795a947d6021fcc195d2cb0281ebee0a5f27906926604ff5c626d1d87f0a476f090dad5e15b56896f6d04a131b00d43c957b06d2a6bd6345f10b6da371e841a76d8281b600a244feee084e91afeb53f76b15158f74dd5b8ae72fcf4b04fc92267eb50cebb9a1d7dd1546fe0ebe5d026bfd5a5adb8e4e10ad836015ae629d6cca2b758bbf464f72ad00a2654aab73de0031dbf63b7af221a0ac5e6bd0870c85a9608810b96d5992ed558487f8e1bb35d3e15d05fde07a2ab0f83a85caa0723c82924ad042009304df9f24fae00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ccb0ba59545c489c544f149a8f64214ff101a5f7bcc6c66c6f8335c91280f5d7acb658096ec4ca5bbad686ea7e281507525a8359f288caaebc0a3ee7408e50a254974ece38c44719bae47b5f208f4f8b5c94381df79ae95e4afdb09ac38861824140c45282808876f26b949d791b82749ae9406c3d2c9d88f9d1af4be2700658bab9237e71d1593054a8c3ec6ca79281aeed3c90f0a2a65d3b5cbe79945ceb442e81a0a6b87dfaf53433e791b77c61aec4a1ee4bd072161899e37d365a46c55062b66fd9e41f62476feab398d8b7d9fc4fa3501f97195b3c0321a71390a39b2c2b54ca70630cd4ac7852ec442f100d9c424fe2bf7cbd017bb3d21bb6098588e1144ad5d125ed9eb447f7474eab4e2709c8749c6fce20303043c3e1f567dcdc2acd216db8ff2432b4624fb30c7acd0b99b267b3f0d7a4d7a75a47b5c2b31b2fd5e13de4569060e785257b30d810a61e1c7450805729759b90ca68dbbed0ef90bce9fe985fcd052382080401345469d6eab3075457cbdb28be4ef1dd8ae2b59efd8ba2e8e825942027403d5cfbae4c05a38701cffaf525b343b2ed1772ffca4bde1d4d7aec643cdab7a5fd9f0c2634a1b650606eee4b5d3b88888c8b51edba5af0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300c310f3748ac4ed27f048ff174b9c926ccd26ecb71fab2b7601cea040c37f878f9a6d5a5ef7e67e77765e319ff08e6877a0c0a4f99ec7541053d20814a008697026314d8d5355f136f4a34242ee68d411ad548922ec080a2d5c716454205aa436be19921222a70f6224ec1d3f1a67a22e9d8eabe65758f5d4d12d1a2ba491670cdc1ca2987225d5c740c4421722339a7ba3dffd112b9a4cf5006220dbcb136b49f91965392743ed0a97d5652a4cf965c714581981d4f212731de3ac0d55d4f36ddfc50672f1bc59a4498f56f928aeb9dc817aaf6c67e3cdaab200463cf400a6761596bbe2be6ca960b27d00e9fdb3c8b3ece8ef4abfa8de02919533885fecde9f2a4495cca8131f9b6d60cee5a14c9980502b78249bdfbdbf87fd7b2a4cabc32af617f6113189fd081f67ff47aa5fbd3c12f2ae67355c4167afb4ad53657be26217d283a86758103c486877e01bf63708c7fa4e1c1e1bb8fa0f7ef9e3c1b76e49a20a3f0f2bff307ff06f39cf98d4f9ba507b4d3d64147bd9c3b885bb13abf83eb8bee5e0156763569ea7e1b369bf23a381240814927aecb48d18892cfcea28f9280928ce87aeffd9641e381ad6efddddd9345040a643e15f298d6fbd78c8900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001da9d6aed9f830e2d8b5c0ba5c64b32260dd01c2590fe66214e58f17fc3161031864321ce92b8129b26406829e2964c5ec876690ce400c512a09a64db044162922ea4964c9f891be6119073e328de892162001f7cf02d4001e5ae145ba674cf14f817faee75506efd0539c0a36bf2dbf4b68a2ac4ba4e2c7934eea8b30ad08e370e7c87688ced2d706e5dcc74ef64fbdf8d8f6172f2110e1c1f05f7160a4416bfcee0258510610fdf799523269fc441ad46500dcfb1e80c57d339a67d5b7e40768cec56465e13f05d8607d5b06febdb98fe0fe2fc6587a362e129c0b48adc6e457d340decfd1d30000ea2a8524aa28b5901e754be91281a005ce2fa2e6f6f296425bce8d5c0579107fcb516758d34a029a49afef548b03a6b0381ed27f2b92b3365292dfe1ed70eedff31e3df68c8d6a44b65b3aafce6f0f4720253607de2ce12a400dd6b4f73b5f637c195ebe003e89f6ccf358b52e51c0b3bf560edfc35061fedf96ae6ced0505f2b7bea859763f72e2b9be74eaf5e992a6ff8793099708f96a31aa369c353f4a2cd10b4fd87fa71c267353976197b2fcea92a129faaecf411bf9048217156dd85e6a9de9b10c201aac2f99db43d8fd5b99fcd9ae9fd218a50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031f2f4d062282732d2a284a0faf9b73c5fdd97fda6035a4e4fb4356895fdbb023ba6226f1c2dc8f683ee751957ee2d7f8af812ed44d834f2f98b4400f5c044aee513154a3b97b2f22cc26d86c346497bdb400ecf2b5928ef7f5110dec819777af5542623dad6c6bfdf0978bbbefe6913ea9c4f4d0fbb568b2dffc9d7fe3298bcbc694827831f95c592b1c9a432182a9d98b17995c54017c2838b6d2f2772785662d5552a01cd4d7f629161b73c62fb8e2d88f9f0938c423dea27ffe61c432717f5a09ee52517dd5caec2cfa1fd230b049b8e261150eb8d043d609a6a8b4f1a7cb950b6013b1dee9ceaffcdf4762f9cab4ccab5da7c001c3432558391bd5d8783c763eb73571a2472246fedffb48c3d7d0b8e3ad8dd1a2104e55ef980c69b4590ff1e94944298016d77a2a390ca2414f81eab2a70d4e7b55ee4c8b68f1f90bdb0ec064e7af320320b0115429197754cd717f8edf8ad0f9fc739efb15a668693db4fd762cacfbd7ddefb84a9d6fa2cde486c03654e0f0a2c8ec190b4e28a721873ae40c113200efc982f47f53c955ca5f14700f7e54c0b793cb0869361fda8c1abf362986adc221151353e930d7df66763c05c8d5d9af7db730efe95a545e35d70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a504df9bb9f7e9be9bfa1511cee1557539383e81e3c77bd1bb1e9da63cc6301e97186ac13627b0c60b828fba4f52a0b717f35321b36d9680d012643bd235930715e78fc1446e94843baf407e0311f47fc79fe73af69501763bfd8f73ed300c3a302ecd3d61e75f08a971b7c15c359fba9da2a34ff56e676c5526a1f1ba205ae1316f4f311fff0fb054b67f383cca96cc30f75646588c2d07ef74aa1db66e170d44fe1f6141588f594a2b55d7363904dfffb58b56553b469557e16ccc8177edaf2b91e24da7a137b56daac781731ab33bb26b066fc9ed750a1fb07da81e874a09818bba3b17f62716920a9db7234da1681f71b8c771fa1cac0af6d6f203602a8784b743e121d3f0d3d4d2b93b08efad6aac4aa1683abaf4efed558084c520a0e3b23535f47aa837752fdb73a4e70cf2b789f4f3c64b37fcdcdc7fa491bc09f54f96eae4d0c00d43e8d9e3d598e2cc3969991a36b031a5654d020435c38e6d6ec85adb47862beed1be932ad4fa96ef24cd91715b65b89a5c4ca2d1100a6f7c9d269c1d432afcf7fca13d9beb40ddfd2c61c83efe9feda70c3053f4b724ad35c57a22bbc08a01dbe023ee265c5b282c6211673bfc356a31109536e3a6cd967ba9f400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d38a5642b18ab2644d26022dae8d634e5d23c63534a9dc750ef6d1e491f481f40e8c257ea994ae0e4fbcee680b779232e012c69a1c18a61a46b59cffad1a9c9918085807df36769d1c5bebc08025c55bd432327b5c5a898e1c27365231f4c79724bd770227b6211fa941ede128f87a60ec01cf13c7125cbd8d287f3c399d809a52cc0c05d901f331f3dc058771731fb6eb9c928cde59791938de9310262542d422aec224d0353ec2a40d201d4192c1061e24b11c361b2df16f656b6e64cca4c3649e30d2c8e43be7c61cb8049bfc82272a013d5366dbde2afdb4fd97b2e7def5e4d3ea46cc09938b7dd9a7d494d3e171e265978ebe941a96344e1fcf714418a7d90acdea46c91aab56ae9bd0f2cd2b260ec3979bbb1dad68a672fa4c2beead203d87866b1f327b4829eee332fbf02e598d45d68d3947fa3f7ba75e49a8ba0517d4cd2a9a5b5a8d5e08e70ff68f0cffdb099b681b91878147f7431a244a19f7736531cfad0920a65bbc10f60e4c0a58035ea49dec208de18df2a03d390c88e1c07b514e67126ccfa120d70ebd8fc40a6d241e202f80123d2171b64eb1ec42de343d1b118e217b3c3a826b87ee3b15903e623d6152b08082fdb26d76fb7ab8d34000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088a8cc150fd19420f4580c210db2fbf9dbbb626e67d04d53b7cd1914c4f4fb34279bace2ae4fa288a3c556f7ab177a1b450156b6c741890127d1cceade90e981654ec51d63fc2429f5651593f525dc51eec87ad9b5f23d6b9e6513fe80dcabaab553d9fa989ceef941fa2db3d05912644788cb01f96399df76c960d9e462b1c5bb9e5d6d771f41c1680b7f30fb1a437111b443e0edb7f99e86ee1387b76ece3358c28de9e74892ffce32b804ee6c71e676620be00bac51b9dde12753960df679050dba5764e12a72ffbd2a59f5e37b3999ea27bf91a786db4c0760ae84c515b6b721f7f86599c43dcc1e35e5df497aa619aac1c81b9ba1a545a4411deaafb328ea756b34aac1ba17a2071bcee3641d6f12b623b6e879538e669c3dbb245323388276ba16520e9c8e85ffc5c698208c632234fc16323c4962fa34fd02c278cf8c478592d1b5150dd980e97d7faf7b73ee25b8452afef9c626a0275fc6c944c48adae67458ec440789e898fa84c3b01154804fbdce3ae6870ecb283f1dc1a54056e1721f3280514c1f24e80246ee0ef79385979c9b6c9eb2334e3fdc510ca0ed19c263b4ad35fccf5159212e2dc6a66004c0063afaf6e7c7e1d6ef5e23cfcf59650000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000995ea732c438d8ea988a34d4016ba6a4d25b713acb9906ee88a006119c3b6012bb78ca0bf8674e9b8a68e95094596af6a3f2cb408f79288def29590332499d50f77c101450e4d8d6da487850b3f8446f4b33959d44e911aef2ca09b5b87b3099b52b4b6eae6dfa1c6e5a28fc7a85afff040975d63c5cd3399a56315c888181a5da48b2194e09fe877985e09851aa75fca7604da5df3d28dca13939164c9cf57838729ccb55ee09c9927e70f530f15696fa573f0702fdb1a1dafdd58bc12a35a50db325829393c06f8ac89b395ec3d3d54e5139bee1601cede213eae80b2c72cdb44e38a6177fad72e95364a64f458dfb5725097ed06a84b55151f923c2ff17d2138ce66cecb828b0c1fef241d2ea28f9e0af9213ee18137b53d0fbb15c54db7baf2d8abe96c777a5037d715cf805b18a783f700ace485637ab5f541a1dcc631a04543627e3592ce601a4753df82f424ca0f6343db7abbcab95ec1c9ae3c270f5e44a77962e67ef2277fd0117ff57cfd74441ad19b091496d7ec423e70708c7b514e926d8308c1d92efc38c6482a5936658014dd93efb8042bb6e1eea56cff2aa59ab5cb66769443e796ad0b28a5ef557e5e1a3933c08327425743a9d884a3a6b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7c7072b9acd5ecf2c2e0549e942ca1f2e87287517d91736a51ff62f3c522a82ce72ff397912086e7caa8020f13f6e4a9edc4a31efe6825da672972854e819beef004fd7c75c5c2b6d52c63d02ad406de1c1196a7b0bd9724e27bb28228071fdb3aa213a55ee6680570c3a7a51ff4f8b268a988f42186b3e9abe228741024156176652dba1a9d317f55c1f524d8f1157b82f348e7d520c8c284047a9cc1075f11280a186a4d8d4d5d36ee37d5f80297bb736054783f5161ad49cc36d31997710c7c0f1b78de9c5001ba2157d65130a754d58812ff9c1959c7836f4c60debd3d963ecc35c52871b825601189de2b5a9af8c95808fb7f232f72d06ccd53924ee122de5462d8790041dce217949f4768533fc993306cd2a750de34ceaac1c16bfabc4c1ef62a7e655d236b85c55c6a3fc3db3d6f0b6d726c9dc2091febd1a8f0f8b7a283efc0bccc59d70a3f08f18262fb4bee4425b8e9a0d5a25d3a7ba2e05bbbfe0640657009d5462216d6cafaa63c5cf56b14dcbbfb1bf6ec08400c8eb091464f191c04a09e9044357a0698a4589972e42acba6177424589212c22ba3106995e8b34f61571550a271a7320860a4b3c5ea34ca630daa1672312a435216e79796600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c31c52a8c22606948567ed0ec518ec3de3cc46ce67f2192ef357369c7fb8ee59a4a36ce7a4915a69f081eb2fd2c942c5f74c147b2f61a6ac8364c60e49068be2c3c82be04b73922205c552b59699a4378756c583c7ea663805fca22e25982c76f70f0c35dad29e70cb8d3f2657035c638c42665f15b6494b52aa828b1e742d70dc5152db94fcf6d6c35e1c35689e767eec89ef30de634650a1d22425b0ad5d967b222a76baa08df619ac34780deb0173e04762c5ccd33de045f3ec5e90e303be687ed052ecc1a81b0d5ce960e9478e1e23a77c3b495dad1b0bdd253105c9ae6c83371767125a4d7ed28cf739d9f62b65e1ca0c1fe771fd5d751bf3d138215e088597f1abfdfe8c258099b593db84db2543500af85755a95fa5724024411b837935011cdaca275db9bce5c2e722c6d3ab6947866b9046687ed6d143b9520e0206cf6acd26eda7354f7fbb7f1b7120940a607a1c7b0c39442b1fb559058d8e6e42fa88c17b228a80c4adeb1012db32ea41241cf8d0eb7d2aeb75a31aaee4ddf98619fa643ce8aa8bae241b7ce75aee1c6b574d029127f2647e76cb9cc26d33daa93059221101a9b5e3571c3e008c43445f44f60990f556e22cdcf6320e9c4da4300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c62658ecec2c17fbeb919164058f8ed23134c717cc7a60ae2c2925d7773e9d189d5ef90e5a19a91b5ab95e38af47feee4ca38b9aedc2b5f9141ad515c1b92987cb25b766af5f3709bf3090a5705a79a37a329d156ce45e6f3343b2ac538ddac55aeb088f9e8ed88f92cb71a5ec42fd828c42ec401fa76e66cd04e574616410b2828a87c04154402fbd0a0ef3acede048916f151baa6638f556dd428ab76711ce66a39ba644e0b0a72ff16e81efbef2b1aa04f4307f564df66b0a65ae1fb812c1e1ebaadeb225c0390b6e13948231f0153d9a7fa03c2d78d5bb0ae23f4f85f101d1c1ed8a65f792bb86d55a8ae27ec94693cd02b792b69b0e8d9e31ae2ced6b7d1544aa602282247a969843ce7ddbcdc71664fc3c1f7d969cc0d80649d0eb6b2ca0b865c6300eba4f8524128ff7161c019760febdd31437a6c3ca4d618232c2c2a187b921504d5e3eff09346d72a903f9be59309dcd9b9295d3e1a3be743fc1d6376d4a48217acf91d3acbd929ceacf2bb504ecd418e3cc6e9255256cab575d26bbaebaf7ab5aabc7f0fe7232f6ed37a66b27e5e7484a5c0e207b1d28790a018a4d5b8252b7bf98be6b334255e161e7c1243e313fc9c205a62ae5cf9fcba7eef000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095f30c2814368f6a26d374d9d86300877738a0fd612ff56013b254ed4e0b9f01c227371fc851144a3ed51367c7f953b8e31488859c2ff6a03af0eb3023c41267f97ee0f39bf1775a1e837bb02ad546fb8acd91743af573187a94b28cea39116c0df477a417e24ec84c0f1c8c5cc629c92735cadf98a2e4e257f66b0b1e9a08b11897a79859c82c83144134d90c6a83fde9269051a9de7e0c7af5cc102d74949f326a7d0d1d7d3efd02ed29f8e0a52d8908e8def245365394091094e161d075d251e9dbf8994f2c849df0d9f99ea2e7b95f0efb92aaf858085d2ac7216e8334f386ab3991b27e78418cb598c901feceec3be9d97cd2c23522086664baf93dc69d0867c575dbb04446a97ff8fc762b7ac801288da2fa8d169d9a9f24867e7055596c7a9f2099e247c063e3eb21e7efcdf27e749d1193658b45cf24d4cf7abad0b5244e0dfdb8fe6b827ced8c6cfab93ba1685302fad53f854517cc64daffa228122f2635a53ce2f066b5e2b6a3b6a60f71520009f4099e560f19a1b519465e0f5e59ed2f86774a3668249c2f97deca42c81c53f8ba3b83e1850f8806b47a6bb44736a170d81b85d8c8cb8726a8edd8f2c10c706b9f8784d61af5fa6e29c279282600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001de1ef46ae27cecc92b632ef12c8578bbdce3052a3b58189683a2c0115ddd8d63a0bb387c477036af57aebb3081b1ccf3cd1de0c7b7d803b4cb8f984196b61d683a0600bc6135ebbd2a351ee448c9b07399d746f59bd0ffd8e0b8a7b415c8c4d6c816cfa387f9274fc7561426d1131c593178178012021c44ca5d7d7bf2cd80a7691cb2a80a813ba26c49ad1a70a87bbd4c409206c5a8b6d0e568df2412a763d5cabfd96a293bc75fe061ccf41f04611bb72f7a81dfdbdc3f72806ae01d4646b00003b8c24567ecd81eaa167e308d6ddabeaacb4dada036865ee0ba3b82e599b2a37785c125edde0171ef55fa599758908527267d9c8ed9af3a8e01b587eeae5991c4f14a82baa783190d888e917f2032ecbac6256160d5d2b22baec43844616a7b6376412a5b7fe0bf2058ef10a0ce9919c5a9b91d14bf9df7d64c1f16fd01ef82926220e05f595199c0068014844f69b129781a1b7e877e28ac56f37ff3219ee5e79020777d7bd8434c0f051c1665c7810414ad08f7f3d6eb68eb2787d97c2c509fb71ca58eb06cf684cb3cb94503742f514930cf3d37728dd840b7bcce149fa4eb629a939abc39e40333b579835440b216d2659ec0d276a97e4124f7295c500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f61e4115570d7c86994816bacf10fee2dfda809d3572c7f3144553d691222828436d68def9a1d0fbd82da7c626fadf126b6bf1980165dc068a30c567c0f51a3d9ddb62c7e1bee5dd1decfe4ab6ac8c5dee7af05839533141d11681966082e237d28f44d4164519ffc3ed97a5120cbeb4e20984080a0c34b617a84fdc12daf3393e8936712fa84c66feb96734c90e55322e0f165a93e8e1d5495f7dfdc2cbaf64d3d01f6d31264350300559ee4028916ded967d8ce7eb1d6627114aef4c85590c73ee00c911d05b2f281f58c422180dae8f108f0ae8b5082fa4811c5c721e56f4c75632902b2dfbd521a6c4f9af8e5707f70c4fb4f7e29a8fa8439e33bcaf5d8c6f66bdf054769c58636cd4d7d07b0f5923e5642b3e9fa43df6ac68447c38ffff80d48342d7a67a1db0d61bc934b09d5f3dbfa31d92ccb34c25cdeb6cdd4a74eb0ce460b1292d1c9088cbc027d2ac6e28114a47e1c4a665d35d014b4ec073963572c8805fbbdbff4769a3bc8f2d0b7850d5fda5f94e38405d4f6b27d69913fb8fbb5aadd9506f21abee2f7e305697252ed2a6934844cadf9d5fd47597734ceb45469d4f0444b979fe5a828823cbe86d17f34ac9636b4c14ffb673e3dbbae5a8800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cbafc28b6aa8d23ca19cc348a9529781afdba1be1b0e9a796aa69e83520a76b82d5ba6d207c995618b3d83c4ced934b90b8beaf84f97e22606c50c6972c381367c460ace4c448e7d30ed2aa7ab90f9e7d2c8b18b341642a56cff1f80a350cb0c060e165f2c790f2e0cd93c11d4ce4cb3da796d489ca572530d9682927ef1c09c011eefda4939cc04bb15294629a10994284b5a3dcffa6b0983a300158de6757aa79d4e6844bbbccbb00a78ae2003cb0bd966eb7a75da1673b30e45a8aa8122933f644b8ede94674b58934cfb5866b21e7ed0f37b37fcdf61bc12aed0209afcad60a71542128b23c95e4b5f2cf023eb1b43aaa3f9998e74e765bab0646207cbdda79710d1d6ae1a89d9df35cb189022b31ee803e5f1757096c5ac8e2479ae1d16a91b626634aec18fc32e4dc9909eb1b80fa69c447cf10d4a4e944054ea82e9aa71f1c9da50d795d0ad7e70ed83e90a645e1f77cbea7f1a51f084e6fe085e255bdc6bc98d6deb526acbf32575ef52be32297439b7bfc35a0fdd5639f683bd23eb7bf84bb0443eaa8e9e640f2040cfbc51e4acecfe848cfd8bcc994b1bfa385e9ef2bb5e4de878cd8447cd1b1b00b4ae59f0ce40fa0ef36bd938c0e6351fb0aae00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afc2b7415d54835b6de7df94ef1cceb95710418542c0a9b2107b1f88f4837d425b6ea77a869fbab0b2749ef99d054308cf1ff822196ff89c9099e5dbb9e77cbc0916db2bfed9d1212be7c093f7e41f2e473474b684f82dc67a238bdecc14a962f06d5a9a0f2018e6a177760d5b551631d9ca362fd13af7a316413afb425fdaa0975670d5630ee0aa24e958548d2482444c489325c109b523a339ccc72a13d376d236526bf4dd89effd755f7e7563dd128b7a2f84cdde366b9d9607eb01836f5a05a48fdbeebed1ae4ae9840851314b7519c8a77026cf5fdf2311ae7caa415e9532af1161cb6e77a9f045e86f3d3758d98c98b6c881440b45b6ae5c5dd831767a8d5954157d42698a1803a256d94160f29181b07b10b8b96b31b6b74762cda936c8cb066af23ba33e7e3e20bd7a13e645cb7f470b6a58c4c0458944242ecc759e1d90526ab08dafcfd50d6af32ff42d6a853e9814a5444e2539e1426f85227e7cb02e176553712bb5a41d32415039873ec4778aec30dc637036a44b082d3956e3210d5bde3d3f1126ec6eaaf414d47066c90f45fb10aefef108a98695565920210abcfc0a08c30d9c71abd4e520c660fa0cacc17f390b81f2d80126ddd34c12e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000990c485b6b2fae64c97e0d51e57109bde96d78785b819951da13002b0961d2319027812e2e35de11de9ac70cef665999cbe961ef39c16f89393b8cb8aa42f98fd3c12edbf58f3fcf6300c3d075b4a0e89d720202945f43165bd25f902f03675dc36791d8445bd906a2b8957a9a1c909df1264cf60a08f4390876ec1d8a791249524e2ee09aa612258409d8e53bd963069779fcdf51e70f98531bee380e2c7eb52b1ac468690695e5c3ece30d4ca6619d860d3b4a5eeea6876d34a5b45ac271d18680e53fab71193a28d59235f1e27e97d11b2456355e9c959bb45fe101ae45581a43f63cabb7a9ed743d73afcb5dacbe28e45221cc42aa5d7b8c3ef89e409ebf5dfdc6bcd5f8775d537269cef08a8bce3162fa8c2a3e0fa5fe72b134e2ca2223df2d5344ca20812ab5c37a9e99a615d17c53f3302d35e7c658d63009dbbbf67898549913aa092c2454a109037908bc07d80b8e942e3188bef8a79f19b16bfeb9dcd77f2987ea287998018f7b8148baf8d14ae9ed6d83105c24d6b16c935addb0065afde70aa5374d37b0c0bb8beb6fe2d945a800774286e007c3ef0e41ae007e5bba93eb799bb7cbd624e82885d9add873344de269904b57022dd011b4b6df1100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ec4f64d578c5120d9dc7da7efaa6778d9171d4d5acd673169e60095a8c78118fbc95329ba72f732a7f7d61b2536db81426bba0aa351abd0ce347171973e06a8ea423c7c9682f737bca267b8840460565eeea22f372f04166c91769ffaee9832a20739c5baeb269dd1c3d0b3b38ffe79ea6cd513f87d80476bc144ca0ef2fb7753c4b57491cee961ece856e5f862c9ce3756d2b5d1abc4ccc007bf57f20821bda2010d346138d67dee71853487166e8d0b0eedc3e525865687a2bd13e0809c0fa33b5bb07d6c533cc0af52ac1d8d12e587c5910292580feb9314fa216f25daf89d96abeb6b909f831a06cd3be3f87da7adc0165c2f65de4692bbda57e25a59b91e23e8186457c29e24b931c945e498e49004562f88671fd737a50b44145451b1ed0b5f43aa8b8cbd1c6d6e5230f709f177cfe7bc154abc6989415f85a07d323f31e669ab1b5d50fe030256c329e17ca9a77ada875e69b538ece7d63ca354f2eb5a47ae0b751b34673c4b8276c6c9e535ab01b0dda6fbc92e27cca1c7a98c97b9ae9e57707986ab4f2a3c85d086ee91041cf8ab1fdacf2a3a6ebad58f4fc6f7b4e890935c230dcd24313dce6ce404761711b82e99aedb85824645723579ca781100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bbc5ff5dc441172a997f9b7d031b55e1b7e9778544c1e923ccab73e2c065861b2a8dc0c1f11c7422353e1e6a1af144704a28e7c74ab36578b7a20fa30fce6d26c90e3ca51dfeedf02d6f09454e3557708ba548d86767701c870cd4af8c540ddfff23177ddef77d10b47bd8c56fec4efb59d9c8978f7f6c0d5819943fe82fb94dd08d91f9114dc125e0fc4f980342cd3c6fa1507037138f6244da32c34a9be5476f7ff99c7d68e209b4f7a5369281593afa641979c89f72afc70de5f1f1ec8da92fe9a24e607cd8e28d7773367ec8a3ccbe8f8db70b3c2ecf2aff34d7c960a765dba5ff68689580dc09fd8c03d4b7bc032fc03943dc95b08d24aafb9814588bbec238cc00b55ea09d4927615a570072bbf9781d981192eb3acc1f01b6ed4b314075ce4c1630b05505f97e9ff7f0ce8c1a164c2ac022d71802f2ed1ea8c03d1424965f25590931ef7572348dd02b11b68b92ad4daf203acade10171ef1bb7df1239b750073cc32361637e457950f1bb1bf35c16bbc3e080fc28a1bdb8c50b4f1f6c6ac78b8e98864f254179e96c18a769bde810d06f2bf417f9a54104ad3b2d8822900ac0651aef42cdc9119a8ea09909474701c1e52eb170081cc25edd77550000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d1cacb1720e522a1f0e3fb5cca23123809dad8e045b390e057d6d6eead8390f7df00eb7829cbf228781b67dad03337d1bb4aabe4db03e3246c69507cd0163364d7cb43a511ca768e1ea15d27153e6049c06a75982c3a0c854a27b98527d3f2bced4bbc29d234821c0e36f1cecd342bced2cfb06d794e5563bdf318a99cd3f34b82ea388bf87e9a2dc5bc5e325d2f5cd0e8e69adbdf9f1a91beb81d976ea85b0c507135b3660297892ce8673c1d5f0041b170fe681d9731d6e9f23d075854dda5fa71c455da4c7740cec5c88c135a2fb590ce4e52b0d7c54c9b720007415b7da651a3fc3c4ed2075672dd7ee491f2f4d7459188f12b86ec1a8cf3fbe724a0524dcd5027c3dc7866712039dffa89ed604e07e631fb1c1a10f3c2dd7e39edd06e8f92ec3b4239cfb2b11af4dbf56db9844fa9746183db0cd6b3894c1e885e6fd3616b6314d788c1eaf9db1353317b7ab2c0206154de8086eb233fe5dc913c04bde203357f69304c90e62ae28fa444b135a3422c2a899d9a13cc98fb3bd1797302bedc45d4990d67d4e3d4260e3699e63129fd45bb2b4c3d928d5e2fe0a2ee5325c47ced9d0f86ce9af463ee838317cb7145641d937fc77560af545c47ec577e36500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c36130923bf9ecd89a06bf6a0246c946e2149ec80a54bc9ce091d43862af9d01e782f07c87f35f5a1d470f93ebc691e6a87f904c9852e5ab34af7d3cbea86a7517931ce4891ef3d32d7446a5d4f44c2e9968d897fecd1eead477ffa7c2d0f5fc47c205f256caf52946f7800723d90e060b1c3026909025900e8a3778198a50086d07e7abcc6e7730ff8d3a7bbfeaf33387b3c8941bcb6c4d7efe99d74ae54eebb89e06ff8c58a481d9753f5d8719783ae7e092c877981fe691e007213e4408a08030a60721995dff6ebdd6f411cc03ef1f3086f2132eca08e626d0a44bb7e58a998651f1a61198d5f3caf41e7e45a8b407cefe5c4e267d83b11b20d8c9452ecaeaa21aae8a595a838c7ca7ae96887be2de8cecf0a0394832d640828537796994a436479193ffa9eb188efb9f920007d55eac44100cb0f7ed8151f3a7ae0e7b01b21fcf260162e733c26ca18d2788649f8c6cf63769737a1729e3c04fc90e8b5842a42a61f92606eefcdf60b0d60d47a4b54f5501c1bab42f890182107ac7f5f0d05dcd0ac3438e0aa1f851180d540019ee5fbfeb5950e6e1ac15638c8808f818c01e17525574ba8b89214b56557871b1704bccb4bd8b7298b55c4c4edfaacef000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086d31bc1cd81eb270096bef53d3e55673117ea382bef8f7305b4923e9b805371d29e797d2f6e309e7dce37b985f388297324f1d88f6e51ee4666a9b7d8997d26a4ec54eaf7dbf807c2d89aa75e0df6d7726464510b8a4c6678980b827dbe0cb2c5ada4286abc21b0591d832a8ec67784d89e80dead0a0748b51b963af2c7862e4dbea4c2d454552bd6d8a34569f405da4b256c51494fe145556d8a777771be433f3de0ca295ce3ec117c8cdf01042b7da8bd9e5247e67d51d71b6a9291b22b4f3889c6505772160c5ca7f3e9efc7d4b1c3fab38ef089dbd07a8b08c36df2a8978986437e97348d8554c08bd474d2bf29c0f936bd453c880710c8779e71da2a8a0f8f347eaf2cabdd95f13460d7dd0855fcb0bdd87cdeb3bb4e1250586404579ba88714520380ae9fb5bd6e5f80c5676d87f8c5ababef658f548ad70290d8427ae660101bb083fc985dbd29f4b9244b1a673cd87e294e4a5e03be66146c005be339512dd0b31642edd0330eee11ad7a9c0e7a2f680f58dc108933c3f13ec02dc7b0f9062167b09d39524a6ba5f7bdea21177fd13e19936d8d1790132ed6fbb42c8144195fad5b05fe4b937081fa6c8d617d72913a5d16ed3b66c38e63ae19d332000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012642dd6297b437e16f77b3fcba77befd1dbdbd18ebdc20d84f38cc136a3f82dde31f3b4f8ac7199cfa1ad9929971464719358fbe210e31f7813e2a485fdb96a171e72889ed70091e4866e11d8e5a4f5784fcda48fcf547a75fe4570d8f81ce6e9697744e999a3b0ac32a86043385b0584f1e4679b4469f7be93ac16f841c1f7d5ad792e8b850897684781d18999eb95745809ab6d2c707428adc8b087d9388e976fca196150ed137abf58d6d317e15e35ec2122b02408ddf1a53cb645dbcff53acb84382c85b4e7e0f68790b41af7f162330924127055aadc41aaaf6433f422cd7d4597047ccaa46b7c39e10b8761899ae2ae9420f469aedf8772e12036cb250c64209cac1fd88cf617a91b5b621272357164f499f9c3d9940b717939421f949c34134f1a2ab01512f9aff400669b5201600229ad30b4da5b375d668ae0b8c44222d593185555b54a16e31ae7df7df58146c1e0e520c5d37450b14334621e68fbd75b83aa4a8896d79bcca6d35351c49cd5fbe31c9566b057d4c1c7984cf5494b56b2d75fc7112933cfb127451d4cdedfc1f1a7d509df92b3db6a81a0d566acd5f6144bb96c24138a0f6028d75101558a1ec358be844b5b6ca57774b79d1d1800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008329709c9f5f9ceffc9b633986f0f4f265f5cf9a926b4c330471734398927d27f15a0e4e465eea023b00a02743c0a73f102f481bee8b061aebefde06d7b1cf51201939143f8dd50d25e78f6aa3b9b1ef1f1e4b6fe099d2d0d51ac3048396e3a3b55597c3d13d0540dccd716ddcbdb814c82571e0ed59693511c07513e4741bc42fdeaa6a2b4a5a6397e9eac6b5bd66e48028b369a256a3549080a8056ec90d4c86b3b92d6139c7085972f3443eb79854a5ce0df1b9e43498a0e1333aebdd5d0b35dd11f9b30a9bfce72730c2aec2bfbe04fa3e0ebe14818031ca1227160032424dacfa2a57920ac4602610e1c16ef9b47c995cddb6e9499620bae490c05d7620eeed8f798319da45b5a80127be59ca0d2b6458c8cf8268356fd75383eb4ad7b04feadcef0f9c091e14aa1af170c8ff2687c46908c876c636897a90eec49117798fa0828d4c7781104c3eee7c97cedde65cf9ec67aa43bd3d471107a336da70441755f8711b27819df024de388cfca467496bcd54e82a83279390135077900b8a976b702ea0f737d02308321ed89e29512bf0783c9279ad14cdd2466666698b94e670979fdfc44743fbf2a09ef57a09b389904855812bb861d99bdd4a91d3495900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f083c96cc4f77bfa7858361998deba58f51a678cb6d11be3a1a7dbf5e66eb790751232bdffc0ba77d34dfdd0efdf7dff5627c579c5096312e5d4cff6ced87887a32d3d7cbe601f728294bd93abee850eb54e2ef21a757617a7f449fad74c31ad4ec20e6474b33e9151c8c03844951b093ebc883d60785172939cc142201a3e05df564fe0cc8767f8bcf76ed1ed78262ac381826e4902b653e2124634299ff38cf2212e5cfadfe8e312aaf9e2705ee80f359cb1890a15de4049b7abc8f521a75e3d8bf432e4fbd323d79fdb2af9a7a557143e00d5c7d8446efb8c284f7c3d218be33596728dbd2d7ca84491fe46d3479efb869e1a6dd3d4fb2b3656a67f06b081144d3d9d13aa2011d901abe0c19d8a049936d5855becbf00ff9cbb9d4e9f831007f0df406ced3a0feae3d2d41d32b2feb1bb52de9f4dac75671c9d5852ef6558d27d06400279e33c7cf2ab2d343ce3016b8476000629cca599e4c689e8c0053bd5f0ce8bc5d3e135338901256e1a7678461b78bdf843ae91f6143c43da8835abe5c3ba10b876a66d4abdb6d704082e4b4b2c9096bbaaef329e0a415d29411a69ed4386749144564fde5c44a32d1ba3cd2001a11e1638bf19c01f8bdfbe12c7d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d5d30a1ad1b7a477f89344b43d98a0515dbc227d5b12173176e2bfc65cc2ba861cc2d540f04b470466a03a559ac2ce423eeebcca5e7805a6f33fae7bf26c68d99e89ffdda632d1ef7848c0725c8585dbab64e093592c0470cebb07b6f5fe4108765adc158e644650b5567f280801478cc39ec4f6e8bff1a42d79be36ef448586291ad993ddf362e9c6a2d5cbb62b00ce4f533c3e66a183aef27bbd5f5a6f916ae6a8accc911d6fd6aebd969f04b7d08a04f935959016bf0cb3cff62c8663d617b98f8c7f471beb2e8b649d1a37d292493139f311da7fb3be89bf8f756fe0eb385ef13cfeb4d4644d21c10efff597bc157b06fe7edb0c923fefb9d963ef4c38cabed2429fd4c2e0d5885a0ff9c843248127d30530bf60fdda2ad564b08c53287f9bf83b4ba35e9007b32467a0e19d69846d7fdbd9dd1a64f49ecc611a78e78c0d16834e41af52acbae591ba8bb3bb631799df7140843d9a39fcc8c83797be6f2d4fbe2709134e1608d8eae4aa3fdef8f7b47984e4b67a59e042d7b66710e599dd068c930c16d094ec81fa98fae56be482b7de775f700b172a04f0c2c82e4b90b73082c0450e22625d96f3cfa9b539475b192744bd14e85bdf2adbe065039112a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000214d781dfc120f12364d85e11f3af433735804b990d5e51b10556dfd957e11e04a85bc59b6d1965d5e674115ae4e82393cd8f93acb126ceab3ffc14dc0d413011542b52fc864864b1ab26f6b9760c5b4855da7fa463881896d5eb75f012d2ed219edc10bfa9e79d187e01a2c42c5e36dcc881cbcbbb6122e92e4a65a130e1dc0bf9bcd23875c3f731355eb6cee94d51fcf82a502028d6bc292e9be4bacf02405aef4373395287bfdf043a75bd48bebbcae24479bd8f3f5cf5ba0650d20e962d905f66ef6d2b2773b8dd322644aab3efcbc9405e88736a6df1af7ae5d7bf401d5f64d41a0e9dc20a3945fd9cdf16725b6a5ab189ea349e057d58d0011b21fbf5c78738ebc970c1569c5fe2727aa0604726209b7059c63930a8d862e3ba77e5f70e5dc6219e0e6bb20cb38ebcf583206f7fb7b1c18ee8c5c350fad645cceaab4cfa3570e9afd8ec4d0df4c36dc273dd7f4fbabde9117c587f8dcd075474f7cfd0b42c62885e0525679834677133e150ec300af683ee25b14faf7427413e770a7598e56ae84ce2ddfc87f6ab7b2a2bd204178bd64a206c4b7397b5fc944a08045727e2e7084a8aaa886213b5dffc4cb9d2cd48bb1ad7534fcd043d35e1a4dafb1b600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ea44b354534ee642b9fd5245a366adae419aace43d24fb9dfd7bf88fb68763e54dfda97ac68e7725a369a66e16bf0a98d7f1aba7e7773e181d3de149b7797a792ef9a0e257cde0975290576516f7191e78d77c113bb454353efdd3392c788fb9bec6bb6e219462dbfb93b3e1d344081611d07a9c4e544dbe8b9655f91cfc3d995fa9a589caeaaef8927648487d466249c1f06ea07d68e6d380355780950c8a2f3506816475f07261060765c5bfbc12eed4a5b8e5f656e1a924a9b330fe075df49833bb710108a2e8cef5999d8f4ba2ea6a8860e23bb25867caaf7e0949a61f20d5b5f8994a6790940254a25db2d3787b4a8acf6dec4707393d3d1941a23b118cef8d5058f26a7cb735db88438f27ea25c60ab0ba4887a566b4c401cfa74c3ed86f809cfb1fbec13a2975e92623409f17f5dc6a5d9dd1591f79671cbb68696e8cfe1277ff91aede97ce2db2342f9f0d5758dcb4159a5bb3c20e11802eeaecada89d8240360a95d27e47dba9d83d12cb4dfbf586165f16499b9e32f5c0a5932a5b4a174a6814f16867980f842d65ef07d21ca3053ac90b722a20c800bda00be7f1167d20b04c4eb0e144476a8f791cac41052ceac47a31cf93dc91839877be9eb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000204c7e1a2d3d7bbfedafa5007d4b466d8930d29d730eb964bfe1c6195ac2d1ab3aea2ef257c8fd30f05ae701b9f5a7c28cc91b5b73863921d075183ef759012e1506e00e4483f6ee090809635fa1bce9b3e8d5f65c9889e5b6010f28c79a083968aeb899317cc06575c7664d3b601b94436d42a5bb5924914c0b0b3b0c27b6be1b603a20eb7654ea3bd32a4a0a0de874f60fedb79cb3ed30df8b8a9c7dac7abb0d7ccb5a7859e1b3f5e5d70355d6e13a5ef1c2541bb30876db48e3363ecbf2ccbd48ed4d5265b11fd3a4c49ea2bd4cb60b651832b3f99ca800a49351c5007b0b9b7e5fbfed73b635461eff392e6672e7e500b007aba31ad2ebbeb641675e7930947c5058928c44128d0b9277480a69a308474a4788b928e488bf6f82306b1b2f13e181d225df912973f331b905b74cfdf6ee7a120214c875c876ccde03c10a8fcd11460b120723ec6149a06de415afd69083881a1cc4a8f98fbab141313fa2fb008094ac370f40617c20be96c544b08865b53fe4d4f7796a525c7882bae34e47a8c107e98a83f79cacac23c3ca7066142dd4e29650b09a51703febd999b81527f923d61d006e1c28db828e5d369605a37827ea6b48dc199e819a018957e90677000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025c9dcc86e638ff172e00e125b9e401d800290519c11555cc964114ffa0b6ae1300e0ea8b0d3ea1c39731e1f5b9fdf25ce738fc3b9227e0fb23064ee1c4ac639cb59015d304ad7ba93406f3f60014935817ce7a743689ad2f02bf8f43304640daefacdf92e134a4957c021f190e34a6de9b29e2d35c6fa2030ba3c9fada21ae9e647cb987585c6f3003a47a0f889b04169507a314e564b39458375d549f45dc05e22c2ec208345236ddee7184ef061b9e3bd782a9e424b12b87795b2044804d4d3e93fa67f6ae24fd0d8ce44d2d0bfdba9c5285d2ee371fb48b58725824cf9d8b4e5aba3a57982acc50b94eb086b2a64101daa77b635d6e3f124decc85535fc8409ba9ebcc14e5060f0135178d84264b9f3951c55553430d659f5cc6ab27af3087399dded325990662ffefa74370e610aa83a39bc411a16476374d49d6acb84181afc1db264931c5e92f5af671cf712ab1e819db51baed3714701cfcccac6875aabe589f85d240aa820039e0f54884e8466f9b9239927591610f53fa035aa7b44681aef761c82cba31868b22c23dbbaa418b23d33ba19ebc54095f9b94cb2720a1e6c5eab09943f42c44c0d7065f25986a638ce3bf340ab155b094cb704f87110000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017f91bdafe7652390ecaf48d1aa417c0e6b7eb8575e3dcefdda62c8474518e6092893701c58bd8f94368a950721c2f3acd7669bd759e6e61d0ff99299587e65b709472318dcb0e7c5ee6aa0a8d49ed508db0b89f6ee3e658ae45457a1aee9b4e67b8f121140dac42fa1428af835e58be97f91574f034c6c30a0c8394e7f005b276e6e474a708f208b8acc527d5d38a440f3a9fdcf1e285c30e98ed314251d41511d463776c8820410da9fb7411be2fa972e0ed6b94bbd0dac4700459b89aeffb4b5093edf2a624f3eba2d92e3538eefad0831c4b3fca4ca26bb7ac135d664e448d62403234e4b272136390b61a07bbc865b3c2118efdb68513c6490ec574abec8e21241972ef3817256c8bb52e66db54399b3276a13f6be9664950fdd8917f39e84980de0444ac3fb77769e4143aa5a97657a60129de37a546ad58c6eca36b11efc3d7767029a4fa139270463ccdd4e1a5c1257af1de46b0e4ba73f3ccbf109337754358842d92f79308545a794d9c761cce9735f47ac2391b1f6a10dfd78d099f1f0a9f144df51c06be1a9205a97817033c6eb87cc34d2db3f8000ff03a959b3fd1b8e0595cb59ffe19a8a8b67335d8d974ad4509eed32ac6efe6803afd721000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093eb6627f5600de92ad8d26171c7e95c9b689d46643823ab8eb07b7de785b2c5dfe1de12da6cee38c4cb8deb930c993fba95877f57a0d4c296f2c717a07025bfda43cf93aac719ed14932a4bad595ed17393a98b29fd552468e14b6cc07b0f8181055fe7a5d126dcc1565b44fb79cbfe2650e594327f4bf72bd78af621444b5b54dda791bfcc8b808b70366fad00598ad528971cba6d0c6a01b176bc842993bdf5a87f316aa8d6912721d6d27b09f9a7e3c399a8e1f05b933b1dbe5564b861336f93c2cb1b785d961f9459d2a1fcc05419a680134988142e1b134d774ceb9b6e794aeb7358913d54b5441d161b63578ee9499de2e223651324f695dc51e8b2a25cd61529d14b99812cd5358df12e5f0c8f03955bbf6ae7433ef2191b5d2f8f4234685cd2843917aa96d9e9fade98c0bbbc77fb9b4ebbb10ef95dfaf649b20115bca6918778ce66a091065535c8f90d532cbdc5526a3fc5b15965bb271b9bd3c56ef21fc2984f4163dd181bf1bb63367ec6ae0996e3ac80550a60b0b63e7b4569d509eb64e0d32f6e3e39531b3d240389a04975d527520ca5e7df6d3e1d1ac04069207ee6a78db22fca3e507b4908b4910763f9c8510db9126c61bf043f77fb0700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ceb359e27af26099aa6ff253242c63804069d65495b877c3a88af3823532b94b358025d2b4d88e44df0438d91ec7baa575b477d346651a4952c956dfed10beb1fa88168e4b55d72d8886ddf578de027a604e0f8f54866b85cdbb2102b0d20b5d8fb7ef42c05954b4458c0fc9b1c4815f6c9814d95e53180250c2a9ec398a75d93b064ee15dc0057417d89c9b8f8e27ebde2c485acc607258e5f43ca585b79dcf98bc39eef7b79aaff438f3b59fca6a7bbdfdaec347bc814d7279cf286601f9f7ce0b77f8a06d156b25e252704e3dc2feea23525f62f810f81b79497b7ba5780fe3e4afda44aa8da9a1c7c5127e5ff019edb4d2e49e1353c5b6070bc6f06e27ac1e284770a1262f1835ee0ad0b1ee9217881c5b3a8501d0648b378c2afa968c16feccb44f65018db274b0532d0dab06fe2bace3db6cb2e5029b2c95ceaeba4dc3ba84eedb1da44a8a05e78e42452b645749fedd34111bde4d3438c639232dfd2639164be2870b2b3bc4b5a0f694a7dd6bbaa013e24a761db40be58659b4eb40a3d3f2f53d514a90e27cbf0a17b173cc7d86cd7f729c04e2def1fa7434a5adb4d0df8a1ce4a4bebc832c50b41b4de31b7f3991697902927220f1f22c89a3ab3330000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9b8fa5bee257f65c108bee938915079aca5ebd15286c3a30ff3c58413216d0030d680c34122c68cc34a52296ae1a36991b834494fbe85e8cd6b2d09e944b97bf27ba994868e8e99cc1240cd7702910487f908bcb69d7d7829064b51b351a5ccca30d0350747d785f4c3d96cee700d01acb61407f8d6ed255788e97bb5826133bd92a848f1e29cc5535b05261c9eb15d76750c87d7a0d888e272ab2496b3ccd69e472ee395414b9a5416cb267473b9d53f0e9f6a9f8922f5f45d8df482e438c0cf6df57e1d9bfa198aaa1a247c3484b7901eacf4b5ebe967f37f4395d64671b586fb545264c926d8096a7825384b5f2af58e0d97bd95fa2c3cfa5c2872371b5acec9b4b527f19351f5335c9523268474c830e3abbc2214e618c4db50cde3aa229f91b8d35c0669d2fbd9cedfadbd5eff67edfcb2ce1b061dd6c61c8729cb8045d8e089c50508fdaca1dc3facf7e5c9b0a4fbdc1a9df0bf6602543117ab257aeaec07dc983f696e14728db5d8628106b46730da07eda81f8d9f95a40e7d544621d62a47016cd41b8815845d1afcfe51289920c8b1367e24592821a739124767640f979b0933e2ff65b0f58d51d4b1a57120057ca140811867879bd8b3ef3c08b0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084d657e21e32b86e65f797979d9041ab9f91bf468f1711ef834840eefa9007597b8ab2640ff2e99fcc01dbdca246ec9b74be29235aa37e11f048472d768316d03536afaeee19ad7870ddaedbe8aaa61519f15938bacc857dc0146fc5e5ac0257f10cc4bc896e38fbe0d710a7f82c1af2a52609c01ab31e918697ca1513180fdbd2f23f42d9a115ad11df99a6fa3a8c336c06364fc87ec986244fc6f414c4205f0bf65b8f3f64674989219504843704963e3b306db953356084f15fb2f08cb65608194c1495b5d1ae2108d3a73302da7d7b3ff3675b482727e769dab4bcc9824661b978445414d84d2aced2aaae9dd4f156953bdf3b95efbb85ef7c4bd0aeae29385679e456b3c8ad8ba2ac4616a13f051676ca5bd107b67e087c2a5f43da442ba496bd53eb6253dcae89ad2638b585811b487abdea20ee91f94224a2ac26db2c1ea93e8d7d385030e4fc431710d72162fd291ae2ca04f6a2c7b9c8e29c48495b770a4d1a026586f967aa9010670ab9b53e3af788e7bf89b6664aa46f4b01158b5938acf366932ab081242101924d3563ce17011bdbe30b3292b693d051564f06bc8ea1be0677fd9359e1e1bb5824f1f6c32435a29f21bc350d0a12fbb16d39d30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a393a1ccccdfb68aca3fe0265a8a093caab102fcda24ecd69067c16b7ca3796eb522b572206e86e06b3f658332483989548760bc71a082a725e93db118673533392f1b5b4ef50eaadc42aae41858ca77ff432efefc42beae80155ef8f745dd117af5589cf64d75c0079e251a44a2878ed3021929920cffd52f13a9843713ef05d8035edb7252e73dfc896bd25ecf00c59cd3b0b61c6df97388ca6a28d976f8ba80815f580e08b6089b715f81115b883a76b1b85e452c1dd89076bf51327f65e9d43e7255d720fe370c3ef7cd12c4398d7d18d62ed25a1f0ae70846dcd9fcb6fc64762e87043a65da43260528f73b0cd67c631f37bdd9516aaba57af1ddf6931dfd002e1232090a30de50435753e7c76cb57e370f32e79ec31331afed0e57b4dd3f10c39aeed07689363eb8b4200bd6f4c3562588f6463e7ff8c9efa49929576f0c47eebf57a8e663fe7ca25f523d1b25c69c25c437b143b14d89e1768f0a26a078df87edcdf6f915c65deb3266fe7875f54ad331b786e518438499ab7eb06486b92f85a1ef644a2d1b9720bad3b88a35a9058dda26ffb237252dbac6741e3e1e1dacb05b1a40c73b889c70332361b110561e56071c2ccbc8f879a183ae8465440000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4a62b04e0105cd5743f7f765182d6dd471d1b378bd3aa0ad19854910c47bdde66a97ee50f3ed1c906ff81dbaaecf73ac4686e8cf7d582ab8f8e34f0eb363825847ab375207946dcc9f00a48ae0246c7f91a1ad8aa3a611fdd1d0f60eb0b1fa14f09197522ab5c79d5e112dfb9273a896f898332c43b26561ed24dd86cf666c6f9b4856bb22a27f42af850d6f30dc0439ad516ae768b77f99fd4c3d600263664a23934aab5b7bc0a19d8aaea63f73226bb794614960eb5c9e7cadb0d84faaa1a7f2bf0e00ea75d378b6ec0ec1aa600657398a470ee13ad46b84835296e749af3adcb4df146f5118724f9a9e97e18487cc030c328e00bff53d7d81c25cf151c8a5c13bcf5cc365a5aebb6321a49f1a351ff0937a02b13749827b7288f7da6367fb4a96d53b182c5a1ee51138878f2b345f21168c72713cea4c7be9369904d0abe9545ca55bd11341271bb0b00beae9e48e44311421730a485fa52d38f9c9dab055b8bbe9cc8541225664bcee97e9255382232434593f613b121736965c6e28056c1860643998554730250aa37c760d0f07573922e8cb2022ebf2bc6a601c0824a05b7d871bb037c68ba0bedd5e05072ac09c83c5f8e36f65235f1b20590d0c79a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cda0f1764cbda36b5f74ea63cc937ce0a3bfeefb6d98f8b50cc8a02236a41b0e0a637bcdaaa71f4be30d8c10e7a87c2d82cbd5bac908f824bec88f7a3254038172aef96d194dafcdc1f2f5a6ae8393886696b6ffbf7035b7a51e413157b60cda523cf36eb551c13a6e4bcb81b3ffe51b36217cb2bbd113d3c5ab2f8d016179fbe92da070aee8c10de8acd82614ec1e4394d343d3812331ef602cbbabc8a07001e2bf74fa2b5085e335834a2ee2653e4510bea30bf24ceefe3fd11b52b89afe83308e1d30a868aae8ef2ad4b314c92b57d0183a1858926a488048c4f748531742cc04fe44fcedb0616a8eeaa4de11da8a093e4a0db83748f6acbe63e62a97736c3fc361cbccbaf0299a5e92546d0fe851450536e6f9efcbccc5d55d2bcfb489ca2ecb121b680bc20b50bba8d0e9f922cb4b9e7eda06a1cdd45882ba36eaac0024a45e8e81f98c62f7620386afb538c753fa0ab9f9007ddce403a13e83265525023625ed7d612f6f6e243d0a7e21f76062b846a65f6d9fe993988de53401f75cce6dd800750a1dbbb4d4a8cd28b96895fa5d828824ad07b8545826a51e4df799509d8be3074154f3ff17c389503297bd79a2654fb264adb64f446295177361a3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014a3df3fadac2de97674a27c6aa42ab031ff7f3c74090338fbf4c76497e2fe59a5f9101771990bae54ff9a318cd21ad6a26d2d04e2167e73147a1bbbcf6c3798a692dfcfa5afe0b2dfab9250f2e6af8c257c20c83421320601c912922b33d45e335bb4b8c97657645c7900172ff44d8c029091787cae8a437811ab000084ac3d484a3531a5436d0d549880b9ea431ab388e5b47dd309acc29acec5227916136c6084b0830e7849c530e8d5442d261777262f36b8434dd8b662d66f2ef05619ecd81dacc34445350efbcd95a58abbb5b7e38411cb862e7eab1fa671264a0b2117875a0cf7a00129b7632263195e02c27dc7e3e8352580206c179c0813a5134253f3e5cfa58911cf353d53ff58df3ea8190d0cced134d23f56f49647033fa2ee60a522f3555594aac68d8c35c3900b89329759b3892bc675eb95f3486d0e10094055f63904640a5903192c1037c0055d9202a1bcaa16fd7a515a5335d765d07d969747f156de94c96f36ec4ff1636b4614c340999f70841f5c8aace814230f58b1fbe724375f3d91603b697f7768ab5cc56a914286ead4cee63f079d1bf27fd07ac65e9f4a7c07d2791551057d14e9687c6f06d28c2e89e02b43bd50d59114c21d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002430f76aecb33ec5237309cb93c50edad423bc993ae615b2c08158ef4783c76fe97293a891ce009f535a23852e0ff096bbb736a6f4bf323e38891b64fbc77118ffc07aa0df475c82be9c8857e1ba56bbe70aa34c25d47b190fd66b1d1770e7f13d646de33b0c9066cf3ef343f10240053d6d42f8fb7b431779780d58a8be7074836b92c2e2964c87a4fe1c29cf6a3ca4b390497ac23a1c96910fef71901e1a44877e80065047fcb6bd2c6c1fae852183f07013498ff4ec4ca49f7a51252a790e3b77a34edee9b03ea343cfc8ffb51e637843465fedcb17da3f4ba54f76bf6b6b214a8465d5dd136c1079997081335c9a7f84b107213f926ebae9ce7dd0d3ca076756ca098384f97bce4c06e13b352bcd38b4e803325f9c90f63d86c2b801357f5b03ab57033ab56953887305ecf0cb0b6f724b56112f125e7fd8736390ce604738ce5e32f5b0faf00fa703f3308ac4d9464fa884ecb27c54792c518bdfcacaee9c626bbda27463d4d77df7495591123bd56cbeff82be4fcabda33f946fd12eaa97b54451ef62ce16f19b48b757c2adbf020220b8c385d20f793c2bc343f74064d789deddd325e8f6490da79aee5e6a980ff53673fa98a10417c7a53a86dc164c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000890787318c13cc704ca2f4cb1321826620feff29a92c50d7999f596baf470319cc0ef9bf2d9146f07720e5ebef9b5c9df892256690fe7c9b3f1782af7abfa7694633e0e81c1c68828c6fa5d83e1cbeeaea10665f4a6c2ee66ee836b9c67e8177d7f2e0e30e9bd39673de2bd0bf332ea3532b726426cf33329e3952ff997138384de20daaf3829b9e053a7d30b42321cd3323726beb87a9febeec1bba27b9a3c6c5ea09ece684ca5470bec03e6b0906ad7d26524a8daa0b1a15e5c73735defbc039402c31406e34a0dff499cd18d44f61da2af401f4d5243057971495c3da9ff7e6ee46e83d0ed9b23964becf34868e7bb546b601271293842a6f70c7ba820d218d07e27752684a2027d0336288aca11f450d1ef504d1732a74f1db480d2cc875a362782b51614e154e1f766fddffe3f7eef9b086f1c5d4e4999adf40ec4262fd795415ea3b79cd0e3d28f795ecc2b847fafd383227dd3eb4ef4a5a81666ac9336fde4ce2a65a48ec6898f56a3a716710d0818ebfd03ad8062e83cd96807a0a2ada4b470824ecde83d0424247b2ad5741573feebc47b0ed4b4fafc307914d2c44641aa032c65ff8f5fbe1be0b2714b5c97c91c2c7a4ae5f3bcb4d6a788ea37963000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012b4f4332385003402f7e68d8c1da614cc5c6681c7956a30446690d2b6e7cb4f1f843895280b00dac3c6dc2fd8eabe1b752ecbeacb07cf016d6af0d28266ee3bd424a04b0d59a2c0a74d93abebea5832725f7df20d4590f7c18efa0042f92f2bc0c33a4d9b6259b7af639efab7e73352f801e74d6c75b8c4199393de6b28acc62644ed750367d3545b939e9f27aafb816a9e6f2dcd46a09e4a5c9f2c16e36000ba23cd4e303db8d00b2c003c8705680fa72769b65e9b6a464b283364bf2c804d15e0858ae1c1211fbdeb5ba126af71a2df50ed6ced70686c13d9a7a9e912e02eeef136c32a3e0be8aab912dc5d0d43902acf8eac69ba9966966d52ff9481296f040843c2a5fc0c830c7c34b18552485db5d04695d064ecb3c0171c255bba9a6be0f99e8c7ebee6fbbe29c622eed8605104e9d9b1d72538af98a1a43ff8a7c97207bb40e882c9e978aeb10fc7480dcca42f98f1e5659f93016cf09198c6d8f79d1c10d06a847369dbf28634660725ee582a2c518fe761c95e68551565f8dd10854379becf4e05a429258a18dfa3da728d7f142da176712698f56ea9b0e29a2358fa256dd48a45abd09c091451b525fdc0219152dd57132da9195967d96f48afca0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3f57c20b7079c8a0a693307a106a766208c03c0244c8d6b8e565464c7859cf6e4da21a0cf64cfe93c8a2cad11d97bb21bd516e9d7130dce0c143ca5460accc4ec377f2a3d429bb09335cbf4690b871b8f6366dae6a31260c907bf88ab198c5491794ccf5a12e7f3ad4548c2d50ac588477683282cf21a4c556e2fb52e57f60d7cd2517ae2b1d2deea0d2e5e8b103830eebbd466d70268e49acaa9c82e091abf02edbe4ce1e6d56dcbd364aad58557d1f28b08672929e214c849ec31fe0d31ec059d94ab96d2f09ce666c6031e768f8a72049a80dd5c594796156cd4dfda53dceb249cfdba03946d0deaab86e86f5b982690b5ce87f340488a694163ae0678dcf458a7ba5f29b0757de478cc35c10ae701d77c55e1056d3e849a0f73dad51fa5dd03d9d1dc5a07229ae86e741b06ca8746205b0e524274289c2df26967163865b12dee1bad609a2187f422efc0215e97915f4d7f46b8a7b6ab638f18ad9503055bd1d83777185357868d9f61a5e91faba5be8b2136c8fb7985c7018a81e7fddc9bb696024d60dd49df9cca0c7ff51b487f3b3501a659d571e5abfabd741361ea4f3d9bb4ec9ccb10e8219dabd298d0dff362a48a75491133c706e03d4b6dda4000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bb79c480dd36d85403afbaaa26c0ed91c7252a5b2cb1527a5233054a3173b97e45d0481529e4b614a6063cc5b4bbc6d1c3d3b7979da845d94d9b323dae1e0f1bdc8f8b2b0b72ffbb98b71775b94d5f3d94f31471421b149fef1cbdb8554fa80ebf8df0423e059c8782cd70aad68ab1ed47313690e4c4ef5e985b2810e3980871f735f546fc21d2cdf2b30b3ca53791c0af30b49fc4897bd1f31ea93b4c1ffef11bdf9d2bb5131866a46ce7d98c8450b065489560dad122e29030dee19ecfcbcdf0c3c96a9e440097ee548bae23eeb76f1fb9d82e71b9e0068d9b393a2835b3c9577bbd9161e00561b8b5dd54fd3b8d0dc25023fc0a5e201c001e351391c2392fa500246e03e9c1ef90ad1f1fff31134ca0dac2eeeb65e788714159719452bd04537204c2defd51d6578d78e0cc4a83403243eba4069b4daa4014792073a5bf3d3f749a0aae0ce4d519f740e1e57bbb37c111064122eea16f16fe4b2661f71327b1d05784e32021d49b11f192d5310e7005d75d8e91000160e0f60fe587cbea743d54c14e4e3c03568439b397ab49ae1c9a2989ed38a8e0052f5fca67bef2dcf2b343194da70fb4bcaed6fd432ea42cf631a65b00326db59c3605a986e20252f00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48400bf0801d73e327378c7021eb36060f79c67b277338380574fa0db15cfd2c8f06206e2aa19fba14ae41844b4785afa9b1d2b3a2d3cb489d26a5fa036c219937dc092961df291c1cfb23676e3920001c87c328cdc864b4b3f15f735fff5701a30c0364fa03d40a4649fa8649ed64ada1bf0bf683f17d1aaf83ec85e45a7d06a50310e36d62784acef35b9adfef65ff346bafe208ccf357e5cdf42c0bf087d6f8ee10b7368744682965359ab713e0c5019b80467d1fcd72115a8e62df1d5e219d3a24e2fd6140e9ec38b8d149e66b5a313649f8af733ccd886c46f2ba2793a06eed26ee106ae686f29e6c92e265813a6ee25ad9c16daf5607cebc79fe8fb7ce4efc1410f69eb07ba5e2c14492b6cf070b2e5dfcaebe839d1413e26c08d20885ef981c0b3c167d986cf6c8ea2decedbe62fb01c76e252013e0dcadde5ec81058779a30578b2fa303dcdeff6d7d228a1668602af3e2c525bff74cbfac3ab6b714c41b13b396f93e505de057fbda8a6f0a31f51f4c03b32ec6da954d3b8ffeae84ec672daee07c80769a632baa9f5dccf26a928f05ce176c62581042c25252461f7cee082d8bcea6a6b873130bc491c669e98e46363bb812011d87f42825def927b16a258e52c331d7ab3d6ce46e0c0f8d71175d8a0f29d61eb5b7ddcb0fa3f2a618f02c7c9bd18ee59e9e3faaf4cc3c5d8dcdf51339fe9ab9f9cfab43a551077be7652cfe77e48f6f4f3fd43cb5d5c2b52de769e9a5a46c78f7ac220fb16df189e1f82d43411d5625cf94a08215a2dd5409836f58c05f60172a3d85af49295cf3b37f0d244a013d18103011d8d8c39d716f73b92cbb30e6da7cc1ba8bf7c3e55759de2d49228eca83d902f0c8cb1b827fb0bae54e9bba7fea04f12204fc473f74bb82165f93c8a64d767c4b640cc1c6dc140f86bd7fc61363abc594e1a1bf2d4606ff1f93ebb5894e291e94f6addb317d40d0071dd4dcaa1f9a726710c21b574335d30e22f5c673505ac5ca2651f5ebb0f6e2191ea0efd66d32d052ba8269fa94e3ea193a18ef42f972c41a25fd963a376b6f7f5ce4a2c9f17ffef6e78b12d4b7120e1e5e9804e90f3396edff10b49374a8599da9627f1967401dd222a73f91b9f037045b8189ee41e053a0e91e41868b40ad6840c4ce9dd32f9c2e290ce7e6dcffa7299667ce217b0582fd1c7f34f34c08cf79e22e60d2c5bda0c990c891f480ffc01196ae168eb47e60f31598db3a15bc13f996ef2480dd8c5f21c81e45ce63ddae1d622be5246445222239aa0943cfc5b60b623aefcd912a574806728cac15c4941678e8d464efe90e04f1b4b2915d7e41a943e78642c9030f45d95f0132ed9b4d0a7744c4645a4cb134fe82046323d67f0db679e2c2ea79517cba811546480485138080b81d3dd0be33c075ee0e5d481cd8c12d7f95b422ced76e0e131a2b4c0613bce51633a47293e1ee39f5725f80d531346e3bd306472d7cc7bf61acd6a04616cd353a74c2d0cde2edb115c551f003c286680c6ba35dac468c1d3d6a7c0f9a13907d97f119602b5ba8c565d7f825994e858029c49cd02b026311b59689063902998457c64bc191e4d2403175cca6afb80a080307cfd2e1aa426c338a99c089007fd137014903d36117eefa22ea7e678c476004e23685706b3bcbbe21adfc322046e07f41e7678cd515c863a73bc738bca6ef8800d91706711f77fed195a27700a28b5b4dbfd49d9a606f04d899153c4ffe6e28501c956bb9a4919a5400c0c800be10b78f0a513e4c6f0f1b64e6c98c80127fd1251bd127270dd179b924d32908532bc5173c11c24838b713355475cacdb35da7f14482694a01dd6e68f4215e16c93070d012bb278630e70962bf508ff0eb80738f2b46109cb728c7721d96a5088707927224a4b521d4e4cc979c2315643e537b215612ebe2477156557da4750e2a2832c252edf104bc01392bdde43541de4ed9bfcf5b61cd3529451c4605152057efa95eb516374a202db5370577427f8b778b7db162dbcb56dda760f3e28e05597f246483cd4f769dda977be3fc2fbeeb67ecc77361b37706c1e2d1afc72522b6a13684ca1271504638ec321b8b1d379179de925082fd7892126374b4d4742f0702f8dd26f30bc2c93e186f301beb1c512687adcafd85f0037dae8999ba17090ca8774c3244d370c20bcc17bef851cc227ee9d4348ea0be823bfd404bf2fc158377544a5e41775bdce0170bfd1d87ffa5cc56ad9421db4a40c96bf4fe21412f90c738fb0b02b88e24c219beaefd5e6893234950cd7c84c81b9a6355acc7b01ab086f89ab28cd6cba2d0a7af030a534bc6a90898422b7cd5dc1683373461130536d173c7ff7d1c0d944685a662beaf54fc573ad008e406739d4d288af98de62c0f2a98c21820186ff9b170091469139e37ba94d7b48b2f7875b3dd6357933509a949213983f5b6593967665aa9abbe9f30ebec8ba701a9f9da86295746ae620a94f3e2077d5a163f3774afd44a49e556bfc8dda949ee3c2d1c0fb44929022d2323ca371452f3e1e5dca5a12236bd35e2b7ec104f64b3e82dbb96588aa8fff320e0e8f89ad03b349c9641ab5a85b401c68933f5e5782c25e281a4ef98fb4996109112ddb999db1e55c96c1cf4fcae0f975a38c3d89fc5e62d06e808c565b99c2167a698b146a6f9e07463f2d716ab6f0a63087e7ea9357fb180b3a88fd41e6817e172be283277ed74c8837914feda1cfc3cee58fef5a6c654f7e33e59e6f3f61cd0b2ad845476109c5533ecab683ca73e87e99beb0d5fc8ce99ff0d6d2e8a402070b17770132af9b4cbdd48e470b41d50a2f6dcfc7ab5ab67a21cbd3ea0886811aea807cbff08ec7d68bb03e0d3b04e1f41dd07fce72e07a5aacf3d7eaa61c5401e831b589431227e75273b7649c26c089e53c663f419d0110f6c2a1d769645711595d0690e54f048fbdf76e173359c69e5f7782adeb0c6d8f39fbe1cc97eeff430406ce2abce22a83ac6c0c9d1b12fa2158022ad1022b61f326dca33728e528e0650d64c75c94d8f3dd24d3cc72968600a4babf6ac27a09126e05e047298ead5217edf8a2fa65239fc05a1f3ecc006bca573deafd50daa9be7c235a3cb7a243b1711e805cb79ed7bbb0433c1efc21dd2ad4012f8a0da7197dda4353ed47bd14627d78a20b7f9930e54d02f7a3c7612b18f4c30e49aca496897051530f78a1c591575652853f20513335b6a1751a5a9262f843adffd6cc2b42b2a13b19c208f7c0a8672d438f58922a51f16d31492be319f56e69c237a8bb5d6349866030591d42e3c64087f416e9aad9e63e45712a6243b80a81ead692cdcb8bc937b50a7a08428abf3eafc4bca7598c7cfb1e991803e973aea996f09b34833a3f4df2d59deb70fa5c005f78e7563b2d82841e43fe636563f73c006243840ed0633854dcb41aa15a2223ab212c5d88d0070f4e5c8e62c819a95883b1f67c7aeeeaa2415679aa217f70d06eec628e42716eb0a5148732318f6aff08d0929db1453ff479d31b88f17bd0264fa8be08616673c95718ebb41ed47603d0b653d7158f3f3c0acb4df8e07471669215b6d3df7ecabaa2bb7e9218c339c2f8ec8519b011c942bdf95d72d24c56e693618dde64aabe67bee259f39fd1297355958d73386fa2a7f1910f03015e8d2c9bc17eb9837f4d0b4f34f8286bbfc8fb770237ee1beb95852a7f5a7142e6bb7ea63e501d5e9d9a1d012d7ad77184b1a8687d8ea8938b0e90c49f083dc10d3e51d037ee2bc28f8faeac297ce801f1266ca98f6fc4bfa7172caaa3949cf1bda5ec1ad93de7e0f75abafdd622b4cebc68b1f8eb8b9010281a8cdb77cba74016472f6aa9e5584bfbbe806cbe85229319992e7314a6c6fcc7c144d5b145aad0a6044c9c9a3989c41c2ad09f3357dff0ed67eb4943e5eb702bace4d804b87ca15c22e639f282a538d873df2c856a854eee8d3888c9fd8163ae3ac06c57bf01a0fff6280ae47d623400e7885f12f3f65bafc48a867fa58c7639f37931c06fab7203bf24bf1afef6451a8bc7c407d221f76ee7664f4caad02509bf7bf76ff15042f75640358f01c9a4c5a6299e506f47b01ca23588425bacaeca478c7f5d13359161091091c39bce79be5479537afe127480701d45a84fc585cbd77c2a671efa719d020a4c1696e1252115dd193439d674e63ba5f9e92d2b28a56b6e7e6e1b814184a86e37c6cb400985d5adeebb58ad5f8bd7f4f47e2f5c589c5de6eeca5c01b2ae6f98a1abcd31789378f9ba1f7620612a20f3aaac700939b2b7305fe2d705816f22970655a373c9fc1a4c5cd023794a8e87277a146f50ada5e10606550555518b24a0f1e4c37b659d95dca39c3b370db05a0ad71fec66dc2ca70f9bd8757c727c708ef2a313060f921f060b82520e8139f3dec3efd3577c54737019db43bd7139cb2ba141da444597b4717131a059490fcc55ae01ef5e04653c17da6c709ab181a2baba2299de31576e3fcd74f5f0e476e3f7805650305f0209aa5eb90d9820598ebb8fdc83451cd4a58fa13b9e24305bc1224ff1c6133fd7f1d1486d3e1c70fb3436707c4374646d26ab0158f1af6ee21a83ab397fb0bfe8de66f231c56b029d219da774ff8794c0641246476f4777a6ad6ebd29a75ae38e4289d180f7a131eac4841ef1c9d54d14fecd4ef26ca9c24c127a8846a13afe76df48cbcb2022c07a5b471cd009473be9312ec8e364bdd7f22d81e831322716aa33512402ecde40a7f598b15e43e16b254b61fe22bbd8b06ede88548d96be1ec2fd5557b74006713efc37b563204ed7404ff42e29858538170f1da32f7a571829fb385c07dc7f82c8d2079d673e4869865a01db380385233610c8ad8b9bab216c4ead16977c8ad2d8931656f97920e868df6da231a83dc67bc0c9a7cbf986f5245513281e3bb732381938f1c19db0401e5695b8305fa348c39fdd43159ab1bf7f2c5e884f49ed01cfd1e3230b8a94d8fbf5b2e3c1a090c28fa032f0a4ce1ff7cc79566863ab03b0940b77933102e7d8c50b7cdc4d7b1ba39c26200b44f8a7be567b1faf399b9d8079bb7086d4a404006111f99f9346c652564ccc9c8fbfe1d27019f2298ceadd81e03efe976098b9c4ed3e04f93cb93dc2d619a0f99db10299f83f8dffcd238331114a7b54350a60b95a8c09b45e619a58edcb85be2bf13d96518c61b5787b4eb0c28ae393d43481e981288231be9ee890a57763337e328fc38f8e59628cb208712396583a044456ac1e4e17ec54d2c1b6a0af9c106dbb9dee1dac5cf49f6889e14e4769401a15f0a319b2bd7f49d085a8df2462e955d205bbcba96db578d173a1fa1bfd6aaebf2f671923c73dc9fde0860d7a4ce95804ce5c156462e58c924dd2aaefd34359cef75628d37bcbb8c5ffa4c9237048dbabc81ff5902ff2e1782d509a8419cc583c7faf444dfae374ab711766e594467a7ed8ddd44fa297a934b6c04b5183be15b24c93767c6fa4b126e65bf019eea04d1c1c140a10d99a78bcd37025f6bca7b94bfa6d36dd67bf17ec46e2110db21c992c46bbe17cda20d01298400ad78473375f9b61c6e9e044dd9a5ebf290fa21af6fbb9cb2a6fa375e1d855715156af3cd2e0f549be1000cf87828b393256ab53fe285eae9592581d5d59d561a49bdd4dc5e6b3091303e9d7f10b3e501483a064e2841999c7b71f5d5787d4b267049923361d0b1acea9c744ba0e95b4a6ff27951e556dd25fb0997de5e64c7004515879cd96a1cb1b4e251d2ea54f72004d57ed2d0a8a40bcfedbf598bb821003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000004e118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000004e0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000004e0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000004e0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000004e29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000004e141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000004e25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000004e12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000004e2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000004e189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000004e1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000004e05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000004e05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000004e14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000004e03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000004e2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000004e1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000004e1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000004e14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000004e2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000004e305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000004e280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000004e223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000004e17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000004e08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000004e2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000004e0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000004e0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000004e172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000004e0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000004e05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000004e137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000004e2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000004e2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000004e2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000004e18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000004e0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000004e204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000004e0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000004e1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000004e28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000004e1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000004e21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000004e0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000004e0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000004e107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000004e2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000004e09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000004e24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000004e03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000004e1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000004e205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000004e25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000004e283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000004e21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000004e094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000004e0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000004e1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000004e2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000004e1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000004e1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000004e304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000004e0000000000000000000000000000000000000000000000000000000000008100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810400008100000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085cf9790e15c6b82156d2ed049b2a196cd0fe92398bc14f1207e4e86a3fb77ad1e8c50b91fec2aab61737ec33c600dea94bbc35de229bcab390725288cd76ec59a78a9afb7c989a67abe528e136b6e88cbd7c3fcfa4ab28c045e0c47fe79c571c73ac72a924fe8d7ab4e47f1d5535917fc8b6d6821fd2039e4b3ab23094ad7005eb1198c38f70b3fd9eecf8b277ee76c97c5465337505402a51c994c59d12fd58bd70e1b6e77dec5c4315c1d9c86e8ef98db2eb15a52081839f446ac5ee184b04c43a8d2b048f2d78b9daecb62cd2a9734f789f3b075dcdc3386dae42561a754f92f1613ce835ad076eaa8eb69c2a4bfc6731e2a74444ef3221fbc820165891963f130d7d0c70bbe4a42d11e9b5579e4bd625cc28b8162d03599faef83af8db73e8102aed012d91399beb852dd57789eede7f1c491f3434d82f40ecc54e6de3d9341f6140b935c8dc40f0bda99f81222059047f4e7912b13eb7ec1021df6f52087f001521ad4aaba134da83d86e38ef151326e7b166e70b89e8025355c5bab042a049efeaa0ed1f07784ef537d7bf3f24d3a737874232c03d586927571e580251c9b2ebd9373da8c7831ac29dae82dd61c74ac430b07f63fdb94b2c290cafe2c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001244d549e80ff2842f3a29790587c7ef52b1078931fb659ef6ed614276130a81fc946f09da64ef8a0f15b8a203359e6ea59d21b4c3a19df1bf2b2539cceb095c0cd92234950adb6f2e610bfe9ad5b988c21260fefaab585ae19faf9e500c14c9e46a210371b374aec2c88ad23fbc8d7d3d8fd00c89f7c4d31a7c1431abff6e04ab62e9aa317cb82eb67a4ca80581a8cb03b4f2138961b840edec1de6c4ec92fc1f498104ef61894eac8435b3d5bccae0ee4b4d4ee8679da7f5d7ef28a8f517717c445c968ee0a2d935fc6cc8dec0b4822a1f22d3bed72efdadff5477e59f088656096de7e36ec7a775038168ed3f90bc8d39a0731b8cc68bde9a996b1c8646670cf5b499065e94883b6eeaf8fcd5fd11bb06339f249a7d5a845f8248cf2768b2dac54e764c5b027170e82667fe81e4fded4d92cf0f290a4888cad629e67855160adf6fe025da530d7edded48aef9c9609b9bba088729a09c667602b0282eb31dbfa60eb87a3ca1be125ddd3898f78a699585add4b4b08fb955259e6f55d4b1fe2b35f929d61de4d1b683d879a285b31c06f51ec2ccb38afe9f3b3bc82567f30f6d746a2c1114b733b6e7373e66a3169503bef3110dd7e72df5a89d882e4040bb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008883a6ef5670f96edd4f1818e5686bf4a6ba01d937498da0ff464199360ae493039e698ec91cdff0cbc3607b2e2792b901db3a5017a91dfdbd8f36953f5e8f2544cf5aa0d455b51237e9e91517887e5cf433a5a555b8307249938b66e1f70489e80771b81f7f9d8ac8416ccbdc2354753c77925724e83bf518855efb12e27ebfc05048a438c57070b97b001ea650c6bb297bed7b68e78da0aaf098dbb94fe9d8ecc293dd9366308718f78564132219aea9f65b0fa42d1c2a5e73715f86bee8f9a90a8e667230c625832f0490df53cf2d580809948013d5a74e310e97210de3d41aa321bfd73f1414a2004d7c8db36ee1cf18e306c8cf6f270d4052facadb371eb4419d4009988458f8e0fefbe4a88fce3cd86f8cec81b4d541d8ab8ebc6129e5be0103f021dae933f74848e299ee982ab33d4b64ba567a3c707197e6525a3dcc96c02a489a5a35dba2cb90e1fbd4ed0693baed18e1c58f1376d386bbb8b861951c5fbb44f512da1103052956ef8618eee6b0ca5f46eeafa58b4e3737186e7393982bd2f7c866c47495b1d44540f71f8eb5a58f0ab04855c363a1f986c0d232aee7ed14eb5f2102e49f6fd9c0006dbdd4a94a7e68f8db4ba10a4a374f86abf55500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008fb1044c2ffa12bfe9e4343227c9d00141e0ad8edb8887cc9547ab2dceef41eae8adc2130bf968619529a554728604d11a1044ce0dcca4e6985023abd78e1b15b0d09b6a43b912644014bc4b76470aed721f1ccf4a49dbf2a187c59bdee8c1d8e14f5b961615a71efb8fa1ab22e62f1b6e28c2ce1e8f737e28bfda4852e5c1a55f6a5095b51f7f4e8410f2dd5ecf00e74e86d0b2d4fdab143583a99c14582d02bd05c773476808ae0a1f9e577f4971022bad8caffaf448191ced0130abd9c210c6a693a6e3748e4724ae3b9251212e6fd7ef46a8888a7e494db4e314d8bfcb207411ad26e53abfb425d0931e234130c8c5ebfa353f94c7827b4307a5f2a9672a468451f65ea5aa764821acaaa700b1bfe8a19186015c90564a50bfd0bb8fe39592527a795a67d4a09f1db72e3f4ae581a78f3240057a0e8b741a7d73f2f4ad60321e7e89c5e8d6996ba2a83c40ebeff54073f91394d238793acbab6f5467bbed1c17b18c331a3719d3a7398e9292300a9fa87004fbb85ed85361f4bf6e710dcf7aba0a845443512112e1c93dea6fd63b600b1d29fa70a0cbc573a43717485870899e38957db97d561eb438b2f3dbd307c2d797227ca6ca54b156d75c0c2707580000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000974fc0001d9714bf31c8204ffa523610b661f3188973513d9919a11ef2c736d9495d8c25c8219e86324d98812c6a6083534a192622773d4c0cd8a1fe0a5bf2cbaf1d1d2e79c12e6d1190ef0a49de8f0479523ee89e32cafbc8c8619d36e0cab4cce63ee19be6f45e975c6a9abe4031cbe07a283a97645b9dce322c8983f176bbd55bfd748ada397a5f0843d64a0e5ececbed5f0567b024dc37ce6f6f06b04953b957aeec127da7183109479993cf5d5ace7b1b1cd1ef4426f675af7a3bbc623e0e481ab76cc57f57ae27696249c6c7f9b683d3ebeaa76c8e6f96ce3e34ce3725998f8ed7553d0560bb6d093084796117ed5ba3f06072517b49ccb9083ce865c1e88bf8d39d6ba29561d7957cdd4261f5ddf3aae040d30da7c69b1345a87359e70e004aebb07174ac24699dacb1179e68d95dc9f2498032420bdd06649f00178188523e25ea4ea38ca4486a7609d01cd1c2a2cb7a2d5de65e3f57cd32b6808a1cc024bc534be375b70b1e4f16559dbc640ac25dda3217d3c8dd7e711d7f9a4688213b81765e53aa447e73495d7c4def5d1def963c5f615664500ea6cf309328b0d07daaf76fcc22fc4a9bcd4ccc82423a94d45b4d23cde97881cac660e64ab61b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000867a5da22405273b4e28ef8f97da135718de44ec7f681e53a180908518b9dfee686a01c2ce31383ccdc21bf313f5e28d79b36545783dd902476cd35be01b70279a159f2db61c69a7edeec069724044fb1f58da8aed8f6aa75b99ac5650c4335bad7782daaaca14b1426ea266c028d84dfeed6ffe3e3e8b111f1e2cd3167abeabba07e661fc80171de92d7c5add8fe711eb7b2ad8a2c943a2da8525f85f84657f12e70aadf0a872f5e28b2e33270c9aefc7a483ca3f654326e0c4d5b3bcd8dfab6054eeb2c2ad2238e02341d4989cabba0247dc50429be70458466629f12aa550fbe91408b75344ff1ac3a331669cec916f023d9827f362343d8d44220a3281e2bfbf42e35f73632526d99a5aca73a3f263db4a14a3d275481325085ef3b3667fb60fb43184e89c2d901faaee466c01c5743bf84a914ab03178c4ea2ad55ef11676305d29704b9bda4eb2ac1af30495c3251c91c0b9cbc8345badb1e5dd9e7cc6aee6e7d8228b63ce0432a8474caa3bbe4150092d3ad566204f14729d21a848735705bc6699ca2a1790513645103dd2673daac57de0fab95969ca08d97110909dd77295a99b62448e23cfc1f4dbff18ea5ce798691f38239a68ae9ea2f1513e6900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008818c813576a2410bbdbd352f82141da5449e55e24609d2687fc9d7ae2284a5c1b790881efb7889123e3bebab03bdc0ac467a703d89903035db284e8a5032f0eb730be2174ee07c751e0916cdaea5672aca517277bebd7e4c67699e5029386b18663e92db652dd55acbdde647c88fb9759ecffb6b8ce28cae37aa2c4a5d50e049c67e7b487e237fd7e94e0752eeda224d67415badd1ee4a3525db0d99fa657dc42ecdf29c027b3ab35b8901f2392b773daeb5396993808a2aace0a5024520d035c0bfd10d3e54baec519d8579d097d75669b2999e976c1382f0af17bac03ade5afd76c379c888b1c79b5e0f8ae1759defb47e6edec8586345b71bee63f449b3e6126f07a6f5e3f48c9f4976bd5221ebe7c6b79d00977ab81e1d336e99ca8af37dfb5f8ac70309f20959f2274bbe59a52cdb90fe2bd00b62dff2f9b139e0ca3e1c3037e3858053a42006b917fc20cd21fe1b38574200dde811ac426c9bd5a350449f990cd2799a4d13cc8479482e6bfbc023253d833ca11a4ae4dff3c31120a5e4d46e88bf19fe4f9f5c2c33adb4742575bf9e90e0ea067cab4c35ac5749d5775f8232317cc494690d10b5ec700a911dc4b012ecb07106cbd8b2a42e7852521f7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082760075e73325dd5f7890fde0aaf974ec00838fb7dbca41bf4b70f3d0bd1a19dc03479b04f718ad8c9d526621c3e3ca7cf2021c3a195e3776b729e357950f4cd374a745e52657dbec50dbec36b3165b41549566387ab2aa0f122132d953a45a018bc1a3f8a4519f2b6c86150733fc672a69b49dc5e4acf0bd2fcb276a0f486714b9e7d5e88ab7f44fa43cc6253265f482fff1627de8453518cd10593792641bae236a7c2a711ed02bf69a2facfbe7cd2bf0dfc20674eb4fb739935503689ea81ab24c4d1badc1bbaab3b35c29ac01279688a7a0ef37822956b3cfcaa387684087bb5352f503ec3fc98756e5cd7b91f6f07065cf6bf46ffe50f34e806fe19af3f4ebc705962cd3053bce7f740bf6c5d2e930c350989279a9715bf317f414cc8875c7ed6e079105423177bad1b18e85bc02bdb3e015590ab4d32f57a6afc3f864873f24e868c0bfaa78218322b6ed4294a53100e3851d550318c85fdb2006bd03368c10a928fccabc8548d92afb71f60f9b13ded3dc6e11a2498c52c3181c86e8246804208bc92825d2009e2234d8a5efafb654d8f7ad3375b3cad6506f7ae864fbe928203311f17c225194061164dea5245563c6ba1601db7827293914a4528d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019a31c78507952d10211aa2bca83196310608ea0d01cc88581e13af9d78ca36c58cc2e6bff0698c12a5f421e8609143b3cd6b1f07bc270189f0c7bb4ae803ecc4e831b761f6b71922679e720acfe3f4abc3efb8629a1ceef92f8cd152230d32271cfe5b304c8287fc2caf48a7738d08d6583a5319262db5ef9b0f3d297e3025a1aa0d2759dd4267304a4a6d9ac91671815054c49054287b7c3a02497a716870f9f31dd475d11f93283e9a2a26cf2c1092542439d0df6cdb38e6ff2e75a76e52f9055f37b5418b470f8590c19b0e9adf8b7d9eb5c80726a205f1d542ac2849659e841a1a40ade678b266694c33e0e73ed7606c4a2ac08863f78a7314f5ca3a5235a9a2d5e236d276eeae5c72c520c7ea8ee3abf512b14f5694c1031b0e523204f3476b8142df4e72c6091f5703dec85f4f74432297654c368f73422470a2b58e167f6b73e77196bcce639fe20eb5a15ccff0210fbd6e02fc5e0a9593aa5ea34416a90422fef67543e41baeb1eaf1d74b2c8695895191ed0fbce87abb632e07021643084ae1a85d0fa3ecef1b9805efdd5d515caf4ad71535c03ff7132cffadb7ad11b36422b35ae2d712aebe44d07faaaab5b480476befeca9faea6cd1acba9a8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011c692ea1eb7fea6c9034645dda75a25172d83e9c5f3942793e62b21236b5cd56a141903c79db8d34060fcf41933dd3737537c4f244c0b8ea3bcdc464431c2d67e8635af1527a782b0328a634156c9a6397806f90161c86eca3e8b397b20302107a8d97c150402380895d08e3c4ae624375a5064819dfaed68ab5a52ee5ee24fe2768896428a7908cb28e9ed21744f1984395d8e59475cd7ae245c744f836db8ca729892836de7f4f4be8ea7cfcfea963607fa94e0f46c5cf014058e3107f4e5282bc5e2444176d6e7a0011f704768fd00fd80fe2cc8e421c215edad0f32f2e26c4b052ffac2ac1a14c0e4523af1dba99ce7e7e206f1eed2bd81ec513b3988b54fd0c813544ca3ad270b9399c033d8de3ac5cb36549791c0397b3768ce2d3f589082c0fbeddaf43fdaf94e7b1ad35cd7e7e75226fb33a81e127f206b1729c04d0502bd2ba86345ecfc559adabba598514eab9a924fbfd081aaa6aa19e98f11dd210cbe6358c7b50d1087a0a0bf20e28cbc6a150c1b792dc707d56bf7c10e1db468863404c626a8f5c3519c6e9c752f2210bac274d1a2330e98466563c804dd2c81e5c70daa15160a73fe2a5b493b31475a92746eac6365967eb81cc282d9859600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d9067cd718aa8cc752918a7d46f0b681df180133ccaa06b21e070a49681743bc946571b38227aa0e7c73a2619f10b6424ed1bfa4f94ce378c8cb6a1a500870e5989c071a8f0483861691dfcbfed237eb10ed5cb85b9142e252538c5688ba82dfb05065258dcaef5bccb9c5f209f2104e22c64873ef78f3eb3df3b69282ec5eb330b9a6b023f48ae32ca04362ebe706c493636f6d47c02d410a1aa0a37958af23e8daaad9c6ae335b521d75b5a8542668697e6476e6078bbf1478b88cd002307a598168a647ce15498735b3411d8e2a249dcdcd11a6222ad27d2fe2ee62ce1af88a3e340c2b0ae4ab4973444da6bd3ae83c13c9f539407a4d13ee20321b6ac449f6026a33806d1663749056e13526ac6d16c31539493000760807ae5a989b0dd1e0e407b10df9228407d229ce366e0fcec956dcf3b98d2e500b790ed2879f6dff3d82d48c35b0d9e21038cd9a1dbe3b3d383fd8e74ca461455452efbcd72045667d610efa5c81431a88704d92d350e846a73623b71878aab00974a709868faa95b7534200c6845e02a899b72a4474412f98d449a24fc0db08c4281d1aea55edb30552dc5d45bec855e26a88765d7e4d15b4a40bbf1ce845165e867407e42a8180000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000287906efd78e6f9f9cc23b5f9f9c37bfe407dc8b240731fd47556f88581c1d2ffad519d486692ef6a8a317c6e5f2958426bd18a4a2989550c6e03371c01df43739e3cb5a0e84ddabc4d367626acbc6b3c55a3f99fa15e2199b5c0c556f13b638773855d0ddf3981d296bbce2ec74e5bd7e77e54bf3f6836c6cb2104776afbd2852d8c1c96acf8ee6d382bf541e546811c6213ac2f253bc06376c041a716a21e4fa4148cd9c634b3194fd0fa798ae3b7b64455d21ebd9039265316c5996ddd657ea855687bc0a678b6af1d85af8ced0dcd1d1f86a4ddd748f1e5dbef237d53767ffb37c0268bdb4cbb4c30c88d0c5ebe2bd7f076a17ce22302fd7a20c160a55fe70f0ecac58d086fcd640cc06be4ae18e07ecfe6aa41c26c14b250f485acf5b48f6c6f694bed0f23a92c9de79ba1dd9925ae35bad6ac0b420d99ea9e875aa72250d7021d5aedfbf3eed58bcf1c2cf35480951c6de96b33563d1a955129117186e79be9c752f5f02398b4ef4d7d7edf8de7cc5a90f050320ba45387393122f226300ed84bd5f5231a8b600b272f117adc32d39a82c3d29846dcf5d4be0cba311b5b8a20392958cd207ad8cc40a9d4c540e0f4ad1a2e7bf7b6e04f5f5db251a4e4e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002274cb7aa4224e3f75358fddcdc731d2bd82fae4bb2f53e05c62d8fbd72dd5599fd3468170a829ef8ee5b9b115a521c123d11b718a1c1cb03809ce98f929cd3a2ec2497ce7b4e3f63554281ad3682b8b695bf32a892f84d5422a10427c97f2450b42aec55629074b94be3161cde69361e922a705eb8e6fb63df7da4216fcbc093cf9baf371c67ed6dbe29c9b9dba43db616711ad0cddd9b8dd4df24c4c9d70ac79d832a920e897c66cf1b45e3200f06ace23028cd9fb0b560d40e96df16735c5b0da01e45ea1c709aae00beda22b3047cfd3108d45301690c486ef6a4aafd113b06575fe0c03538e6e42fd596da5149c5641ee94b07bd57293507aee10396b74109973d47bb9129fd4a429cb4d42e2a957ff68c08f52e7dcf92b2a18945d8e52ae657f2e75a11c59a981a2a134bff17986c3f438270eb73b7ae77b791cda6f79be64ceefd1dcea6bf1959780856d20e7d4a9c4091e11fb4bca808e295245316497c91140ad4fd9ece989e32573e744f32ff107f6c66b232511aeb3926d0505b37eff6cf0f81a2e18230590c839a6abe57e440ad08a90e064e3d97fa8702466743f7a2d0a25b681e1cbcb4337c393b81908827dfd260e18d70a4a92f834cb790100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d6c103f417da4c8fa58e37a44873ad3fd48755e8eb05ad2a23f164621d79c8978c12d51a3789fd2f41d7c74255c3506f6aa91263d834fd1c869724a3f266bc2869d8f23c448be3a89ace15763cfbb109e000e2af070eadbfca676dc3e498c3fafc793cc732b817d71e91a20a0dcedad067738814e43f254d3a558807d59493217c488f06dd340c4bbdeea6c78e35112f294df53c50397cca60afbdb092bc25e0dcb30285dd30a702fd7f83d4cfebe52327c8e7d90e63020045aba1b996d6fe5fa843d58c2c14cfa3edee5bddf8877199b0a0472ea63bcf9771bfae836e43eeeba8fe67e5cd08dbb678f236c56ddeedc049f3bd816c0dd86b784ebf182fe478e57ffc8c857fb4144b7c4560e660c0420c53d390130e46665bd6ec5e1745f1f37c6a67e8d916cd4af5f85eeadf1f8a567ccf0327929c762ae4a1eae8788d216b42bb8620f129747752cca0fbfe5acbdae911a44e7d48745d8dbfb23e2da12069d5679cf981845416d7ceecef4965d38b17f3ea74710eacd445cee6a3ef1dc282154b48ba465ab3a9ffe05bad7bbaf27a3e8061f8c4a0d1bf0ccb438983116d34bb0c1d9a74b9a5f54a42eeec096bff995f685dd358130e721350e621da97a64ee00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e18a8c0431faf55a082106c8c1fc08c614ee3e2848b81aa3de5665e673f53b32c70789b8939381c4e5e87eff4b68e0f28288456a42bd32c29be2603eacec72c639f1fcdf0c818cddc4828797bde999afa63e84d13a5d8594724b3f0a936fd6755f785a100242e942b3843e3ae427f74ca3b4579fafe652cf2e0cbb3e643b8b185f61704096d047a5517e761d1b3ea65be7731183f413bc5f2a209a78d6a1383172850e2d4a946f55aa2b5bd9ddc516d22098395a4531197495e58c21a25fd6bff737884d28d7477557fc1943b3b5922557399ff031d6a763c6d6e8bb628808e74b6a2a9d2629a99694e42a13afc2ca06f1700aa6a00cea7178f8c8f0510d5f158c414045f7e3974e7aa3a3d200c09be9e74e75ddbeb687610c966aaca5915814dba2d6427f8480ddee29f51ba77e082f36aafb6892067ed430fb6a857927a6a6084929916d37f392b93b655c40f72af7f8708059205852f4c792d2c98d5bcfb37eb1a3af9941ed0181ce2ca40d1bbfd74e74197236b1ef316b01ba33112479b5c89dfcc6ee2f9975e4c9d51344444ca143f1e89f88ec0305cabb38d65662c0601a4b168b6710af01a008cbbfdb1f2e32afda71a295d95b6bd9f1ca06622bcef00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a3432e27c5e0cb827d8db3eebbe057f209fa998de9c2872719576a7f5f13e74751e4f5734090932b8533fe143814998522ecc633440bb2f9a421b1e5ef3196f819c37bfd14b990dc2ec16b91722bf905fe8e51608d73f6267ca62126543dfd5589ccbf8a21338c964ceba692a6add89b28950ff7d06080f437fbdeccdb71c105fd01353833dc7770d5033536b9e2bd2cef739f84219ba567c6b6c14eaba1a36e93309b79a752a036e1cb4c7d82c32e4be4c4a3e393aaa631f11b0ce59d5f375c02e83398c24a27111fd5f085160bf48d820a297552e4616d383a522d46fdb7f8267b773611b93e509fe57f01d06e0bf812e90e63bc31f42c5a6762b0fc44e91b5fc585b4290316b881ec4a54b359c12e1fdbe76ce38d3d2e05d8364841fbd0b9d8b51d32cc5bb469b886895179ec4d17e67ddf027637512db7f78c05151c91662f4bb1c5c395db56d8542d99ef1baf200b36d747ba8e1cb4be784673e075dcada82206baf5ee8d459b2cdc7c036425d49104d1985f7021c293fd8b2bd8c235ae3ef8d200aa23ea3dead5aaefd070caf4eda7c2a1206fdd3b35b6c14d0c1d92635fe54444bf90d392e2bc90d4bcf8ca5f71fb10065bb290077692815f77327ac00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e77d98893ef06b17fa6233383b7876e9286414ffb9c31007e4eae4f529df941ea95e318aba913a78cdf290700b0ed27fdf7117d00b7083b74549ed061e69f52fbd07e84dc79a1036e5a21ada2c2efb3a383b8db712836efc9768d866632cbe238f516b06d0f54d34e01038dc3a0bc96da649a635662d0d8982fe4391b535f63ce0432a8737350a1abca7868dc3b057ab540dca05176324644155d29e661cf7ccff7c97cad6d88496d9c51ed4138e800062724dafbee8ea71ee1854132b4b995b9956fc1e09f041a5371e125537eaedafb5a54c4ad8de15e7c354c6a91c495d0f6f54bac3969f663f83439ae13f2c06bc997a181486001bb8701053f6d3220cdccfae69a4fce8a8443970b7836f0375019a47e6da23187b4316826666ebab0543a8fff29b0bb4cb2b605caecc9a6c1de51637431734a18b73543984705f5fb3e77a1900a5d6d690226eaaf47d2b42087558746afce9fde1753a8a72cc29bd4cfa90c6c196e4e8ec5901e174fbf53442aaa6aad134bb42aca048d8b126f37e45bf2cee1084f35639c3efafa013c3fce627013fdbadd7642aaa63ed42c9cc667539fa5ba224db25c8a61c41ec7148887e07cc5b8beb817062e76991ddb6ab619190000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7110e7b2180ec008b850f97ac74d1396ed51aaf70b85196ae763478288ce1003aa4c980288b370072fca76414e23ba932e8ef18930c1de709f3c770517583cff2b64691d09200056dc9f89e43f44abc56066957c32afe60c34078389a4e0629f92260b43cf2adc73243f9862e8012eb26f5b0b14a0439fce10f3545faeff07b71d9c75682c1b92eb60931a8f3749a0f650d48aa06324778ff1cf94e160dcbf3e6327800bd0412122cb4f39929c1bc7ff4e647be20752cd0b47db92b1e3c75971cac918037266192367dbef7ce99ffb8483ff20e3f4f2c67a3c3fa822d697f04fcb593102b31f3ddfa097e4e606a9a6456c2366c8b7ff5cddd1cc2fcaef2e3c5a38c103691d091a5f264d861c36835d31aabda8bf849f30b3dad5e0ef30326d8317840fd6ef697d8cf434cda5416fe13e3a7b396754e3278ef2ba24d69956798e462eba1bed3f88f68ff6e7ccedae0bc3e9ed3203f0aa0541f1e033a387408ac471dd7657953870dfc25e20c6aad6e56ffa1bc75e1684a653051171b161b05c85265cd601fbcb31bd7a0afff4724515bb521d44c928dfc7a8b747b6ad29ddf0e638c2aba95116dffa105ef176aff5c1e5570b053c4e018580e39299ae8a1d7820000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af0d06f68c943738edbcd6664a52ee05df297fa1a53c4b9a365abc0d3f19c623fe4e6da44c710a30edb2b59b574ab6046e3bbadcffb174f296f1cf6572260a6a4f4ae08a40904b5c0457b8d9fc1d6a2b2176168f2b683c024cddf15f26a904b6a550287c64e1d7a6b7a1b5fe26e74126a6eea857fc16b8ac4b11519740e8c93900b9738779bbfc60e7039a6221d002422f4a9aa95f57a0bc6f099310f0868bfae1b0cde9bbc9fed44f383a3ef58ded6a9755d70b59f4ebd682300f0e26e374e286cfa6281ab54aaeddf7bb8ce6569e4d0ace978c7ad99fe026e8c1976830149be99c929f90d34e0db0d310c1441b5b3e654679e81654ab38f02ed7c2dc43ab7fe0f98b645b057364f71639b81e704128905dc5d8ce728eafd469c6f231877e742e237b49da5c04362fe6d749334865262e0bf4fa406ba50ddc3d78905195d5fe2651ac35d5d90582c80fea62293827eb878d09d0200f80a5ba000b9dbe0938bf63870f9cfd4a25c0df38be68874c6ceaf37b3b9f01c972b30c0c990e806fbe97003e96aa2da40c22b6689ee179b4df611635c04c0bdb1bb25ee6e4e243f4d70e8be39e5c3ccea66c283944b2141095a8f5f05f97b65b15c97cc8bf23ec429782000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091464be1ea7635a0e3aa80f4fcea42973f1025645ef9c321eb71b5e1205524f52fdf99ea1e973f55105412824bb2d7ac12863ef955eedc458148ec53919500ba3fd8616a775261ca955c400fdacbf2bdce0df26d01e1e0b483830564965eff79f7adc844405697fb1b053876840586ded109f29fdc30e4bd6d2e6f37790cdbe8a10963e96c41d754ca733e02bdf53785614a5698c34c3c8fbe8dcf0b5952a811405b91dc3e075b295469f3c1b1b5de531fbf2c9e9ff7804612826063c4b29dde6dd4b05df5573eb2d6e51c6cdc7ebce6eff9b1539e0bf5a3ff9c732cee2943619f1d95f8868d624203dbd4100669cb031d3ad496b734a58dbb365153c23702f3b40aec11ab3567268e6f63060a3bd2b5126b744226733a3b18bd96f0f765d2428da835a7e474347517dcd26752b30f02cede66311fd3b0763e299438d47ae70a3c2278fcf99fcca6aad613ec217e0e22684becdb1a63a1a02f9ae76da698d5ba549dc5891c63ffafccaadfc79a5a90e453cad491c02ee77b86602aa847055ee047259b3c4882c26aecb8b72dbe6e18a5b12381bcebb2d271b71a154ce81755b8b54d746100e5332bfa3b19d1f5b761ef1f01d6bcf8bb4a7fcd65a9cb704873ce000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018b5c1cd20c69d6eac966c801b5c05d93badf02bd2cd88fd57927c19564231188e3a6989e91b0786dcf6471abcfb5a549477d7b7094675f161ea7416ae97bf740620368d79e5c940db72f13a476972a59d76949fa2a17c80758c8d7fde4195d26af10a802e606063904c5fc71f43d26d8747d816a9be6b5aee8e14d574eabb3a3715895a32588555f38b8cab5e05bfe94e44f8eb7fe752f2c9fe97060e68bd84ce7ed7f2d5d55b21f03f1c4c6990e2bd3ad267686b5557b9aba590f4c4833986eb4ecc35c2a373f910f58c585bccb3817ccd8c448aa2d0c7f33dcc90cb826438b49c4441d3f3b79ce78696b86870d1ff8f99874b09777a8a6f622f5f56cfbc6854a2ed3907e6d215905b98ac78bc52ef48d956f8dbafb35d88b9216111bd3d0eb1f49217f83148f86e007416cc9a89bc4257c37539bdf1ba395eb2b26564d3bc91f73983a8bda2a3e9574511b9ccb0f5bc535e0b95d9334b34f59aee8eda6bc77816f1db4d1506e94cf4fb0a06ae6af78618e9ea2a3185ba53af540f066b9bd329f26405918b7ab695e3c9afb4d4df7b7b2613adf6bf22f1b12d4047680ce9485231eebf399dc556c18758a632b820cd5600cadaee5d32a036d4d3cfeb522eb2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b782ce95c9057909b6abd2662d9dec1014af3be9c78f31cf9383027f71cf83ecdaa8c0fd0723d56bbc5d0c974eebf131c1f4e100b18bad0fbd2801e21566dcc45bda483aaacd2533bcdb32ac9a76b8cfc6b5f1bd21574c1c8898435f395eb0baf58fe354328820c1f347e26670969fc9f7ef80fd768d35756e91b5899b7ece09106a74d7e1f98dd614ddd0e4eae376603a597e46a8016c6c06de19e86a9309ceeb0419a6c5ed1b89fe5a4f93f2c87c360024b1fb2e8afc9909af47181bca1e26c2b05009f673663fa4f1a80bd17ab630b335dd16df144639974601e1e8bad259ded554ba2b1086c9d16ba8a787227078b5ba837b38ff1b459eb88fc8a9b33f788932f03aeecb6fd130290212d3d0e123368c81101c84ce24d77b3fee977a53fab89aa2709af86e165fe41033ce5064891969076c004b576ef4a61a8b7b5fc6529cb4d64445359870baede39d23fcc48a2b0754dcc2a7586b778acf1581b8df72a21ac321d8fc703a9fcca21874278b4852feed107c08f5c955ec879eec80f78f521b0851ad84ced079bb228f7da1176f8bbd8dc91570aaa217b783d540fa2c4c31fc718c823428ffa1a30cd554d329cfb0e62f61714e74e3d77250880b7d2f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000861ab7b6e265614cccf6f1d536a067c8714658c7202d285914c85e1377a70415c527edc34f45cd2c905e4c3a47ff7d137b403adfda5309fa7a05572854553bd8b23025f3a12ac15e11737fa63e72ef6cd2c9330ce8179a9d536e1597943de40d4722035a459277ced7af2a420899014f91143eb606acab682e6e3cb4b867628ee49a3b13998863504b99afab26922b6a43c0f850fea166598d8840b4226e69d6966f5bd733e130bfb8a146a7be3628a33443d9b2c377e31ad1fff13da982cadedca66f05742c2a36be6cb6dc761a4bc15f49f3dc22dd9cb210d36244e3753401abd2f1d17b52fcee66ef3343eccbf58947d8ea0f86201e9e170fc89d5bfec7df272a3d67f70c78bc40f46ce7c34291ca8842698a4ce27881aa058f00624b2ac5efb947fba1ba205dbe3e16950cc1e203ef1b74d2bca3a21187bbef266d427b06f94ef89d99082ff1772cee220b7dfe4321bd0339123feb58bdbca2ca4211e92ac66d72e598af9745c94cf54c4f08b5961a2868d7cd346032d5b4780e73c605dbf0473bd257296862b669a97f00e372d13359d601219cff4f6e8d991775640859991df01df47433b77512d42b682f0d3287541a66b6a20f4dfbf05a5b13775888000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019ec68e640ded74f1d1ccc7c5a405c734fda3559d4ef48ca6178a8ad12f2cbe71ff1ff4cd9bca17bfc445e8c2386b9ff6f051502a62ab04a9446945d97e5d56bfbbef967145f9929dbc8f513c3a8843efc50d802aef36f8501f7a0771d87f1ad1851943c1b23beb2a8f1e3fe5d6e4a1be352468575b0ec98eb76a82da76a05060a88d7ac3b75d8830c955ab5b68465007c25c521d9c3f8a9b36c6f20ed283e1da3e4aca549d61a1022a397dd7d37c9873c8a5d51fde061f48ba6962192de89ecd781b34c70572af1e2c1f52fab2fd7127a9e44a61bacc6a98d4a2744678a665927bf524cb5a224096f940d736898f9c71f743d9e9b653bcebac04f3599e7f85496cf6de9edbbada636c91bcf9eadae8f74a256ac3238c12fc4ce270f31a4eb428ffa19186bf832dcc3f352c9d019dfeeab72558f81a01f6cad26e4123d5487116e131c1c4e48cd4107e24c4a85a5cc016db74146a1a8859ec90a069f12d43df2dff0c66f374e30e30e2055e5406a1bdbb85dfda9b843d40e8732bf66bbf0192dc086efb096c2bc3a02a8571f24d85241351eb08d4b93afdfbfe85b57c2a71666a0460b2be67c380eeb075ca73141ebea02c5ae3cc33450c0eaae410b6342936700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ecb36638d7cf21c5597d56eedd609286dfae12654a3e78a95d76b5a903035cb98d53418378cb013db9dc56d0c7bab11aa8b768a161b4a0c049592fd1c9141185e65a4e914fbb144d47d2a8eeed775dcbd9e5360d4e4a0b2c3463de0279777d85530a10b98ba39ea04f94a9ae0c54db36fb03bb26701fd0318ca675ae77372d2fac8ddc0b852902cc9e53ae5e9c44531318fcac24a89709054a030f6a61cf95b774552e68af3768287e6e7935e1e37fc0f1dfe926fe459e658992dc1b5b91883d6701e583c3e50469fb377c851abb8647d331f4edd882b6cc2ed47b34160a38d41d44568ee50a472b63a66cf48d62934a9708d1a9cf1d9cd92f5a87c92684b6d5080756eb24d45efd5806c6cdd6915c637dc69128c89efe7c607a382fb54542d582fca3bda40291857a42cdc522ef319359690d6763052c75a26780667295b2781fc00a61cae2a34a92d1943518e6c82a02458f5c0df6771aa3cb611b16c2490bbd33b2d7552d504d14a8f27dbedafd4f99e6cf29376f8326f5d401f179ee28075dff524e0de184f6904c083ca4bbc33a7ac1fef13a4781005707f6080e1fcae34bc7465fb821a70040b44d0f03b82deb9c103d7225840986d008dcb9083b80b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001556300847a3193c4407009361954c5d1fbeb995ef74491448b619af41748d501c23a9c1fb7666e9845d8bb1f586588cf09cb2731645129da6078acde1fbc621f138095b3cc161c51a5f2558524fd1a8bf8b045246b9fbfe9beecbb279a3427aa3596b4aa3c0f8738722fd86978dd75ac13610a746b4d635fe3dba070beb6ed50f7754949a395f9cc45b00e8664e72980860b614a02aed42777318701bc290e4963d877c7960f2457ced2b6b2a8bba16461372fba602992199382273ea9b6e81fe75a39abd48254c8534b457393a85a492e1c5d364aca0450bfada3f3a35adf102122b76bbb92dc54928e5d23ae9ba9213ca44b043911ee7802c93643aa58a109bd863c218734bc1e3b86c0c8edf46b5bdd35c9db9268069741d123b94cc0f8b1047276539ee68ab66156ba0143b9a6e174d5d2453cd244b89c806edfd290e8642ed016a9815220f00717985bf4aa21e1151ed652b03c852476de4569f37d43b451a048cdacb8969197967f196e84fb468e17119c8ee639a2c829d8483a281a44848258877d7c1a67771e389cd6aa672664a76c369dd4c45c9ca4603fbc2fa8edda2befb234953b57bd094dfc32a5697980bce3828f3b0dfafc0775bd00346000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a935035067dbca7d2da289203a0bcf7821e91809b4469661586e60da158d2a37a54e414c97073410652da83ef11ba26989c2191d035966e89c775a19e2133d692badcee6194dd0c69a4f9197007d8f246220ddfbaeeee9a79fd5750eb3550785b80c2aa7f0ba83764e8f65df24885e738cfe17397b4673800b2e36ba34a86070ef5e792d9fbb4b64c1e34bac7fe7edb4f82d6be8d025682e0d98bfc9a1d63931cf1e03d7be2478a5c347f80da7b77b0693089410d4615ad3ce9de71ff764fab31edcc70186d2582fba7ca09414c2c6e58a68ea5cabdb75cfb1d344ef438331ea85e90c05c40bc78e822f7c47481704de60391cce56f9ace7d75da1f8b6ddd84424a89e222b6388b7714c34f209983a8843381ca6ae484df3c271ce8d52ab1886ab513ecee3a035ab237cb1c77d55a962ccd47169e09476540fc0a5200af944707d576b2aa74d0b9bf21bf6ed6980e52c418a807aa91aeef71d1b36d044be86fb984faba4bfb363c7b10857c365d34b9875f30d7cd4c8f8307c32e96cdc50caac8917e27f8a98e186350b9185d9c190dab249598f7f50928ec10f8c6a7592c7891d7fdb07736958f1c0563436b641e41b6de6016997fb9ee5c7e25074b6489e9e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e831d9e83ebfaf2324c6bec5dd7b93a1fd9eafd5b0921367481ac559c393b70c08d68ab25c8d5cb943524f947789c1d2130bfe6d923f3d1586be55bf0557c19e2ea727de117b6360d7d0fbb253adca9304e78fbcd4495c564db4259c37bff2a8b1a1724c2f081d9f475b5bd67c417b43b16aeb4613f84c0e5ac6be0ec7158b98b8a32433656e9d5f8ebb37df54c55e8eb6eb153ba4409782f42664457398748fea751fd89fe7450650654d6a7260a049ab9fd6aa11affab11743705725323a14cba452379470ad2a7a510244d0a66c9233efb933f4c4560d10a5f6dfa370504007d349f3ba6469eea4109ac9d29fd4277abb67ab9a537fa5402672b2ee9db113668487c57e36ff065955b6a6f9d18206a417e29f88d5f356f8cead6e3fb415f1f5484cd19d948ecfe0bfe2a047182ec7aa6198a7211ba89bada59e903b3a758cd9458c2791e9bb86ed29b030edeeab334d0a4c2de2ef27123a13ff839d977d737b0dfd238f264811db2b87fdb145c8bf405f5c353cd28ceb406caf78ad208d81fa0ae9eebcc1d0e19b5defbeaeaa60ed13762ae99ef2d78d1bc9ccf95b9059adaaf032d6a1f2cba2fe8b7e4138fb237e97e17a37af174c8af1faa8da45960a8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c7cff287c0dd8ef020404f18f2e8d44c4fd69af474be8828cb284dd0fad2215a68899808c08d8cf1c16364e495824a5a42ae9be67bc72df9a0974225d284f3d6721379d837e24dacb7565fb7d86250f5bc5c62b01d2c961c7d700f898a4ab0725804c20a91fb50916149db26f4768fff559081b3f7e037953578429a557e4dbbcd63c789d46e82b2901f0f176794003a1dd7aad46de199caef215486f604582198bf2ea2685fa45661853f4b6f26607ed5184b1dcebafe5adcbb4104d8431d67d1ea1f38f0b2a98b66b25b7d18358bc441ac73f25f5b8ee8e7fff24512547c2db10885e4a31e670384d452e3adce168cd8aaacba242c0579ed6361e415e858ce4a1f9255bb03394f99456505eaecc4609370173072989940f17880a43a2fb9ae7c9b09013c7627eef32bc859c6efd07955c7ea4e25eed17835ee046644035e30d59a8a3a1c4603ff74ea988c5fc4a198eb8d8bca521f628678a4d5dfac591886a0c6372871bc7ea63d201833424c07921e5f9177cf3b69c800c7a92e7857cd7d8e0c1464f3084c35dcb357bfeb8df31949854f84b80ed34d3037ddb5416b244e6502c48c989115d77d0c3ef78c98c8610dd201319e7fc980f2550151dfc12300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e1daffeaf35f37f088e745c860beea60687c3b7a91a4ce09b71fbac528d332694b61f8712e3b9e7817a2764e350e65697efe6425d62b6443915fd19d3f1fbabe9e997c7093028a71424ee94f5044b913a44fb6095f607f1d41cca1ca33eb1c60d5ce35f31b7874952b420ce2b957c25ac8622881810abfdffbf96087f6a93981bf2595ffe45b5bf7912c65f46fd5e876471da658ffd7e4a8246b28108cc2a1cff67fbdc18ef62a5145ec317f56f4f832673a6f9b20104ac3fc4e1c7f4d752ccbeb549e0054026059986c3df094512785850ebac9a68ed00af35183a963d95defc5f6d8e41ac88aa31b7584e8bf048d667cc7e689d5ab6cd55861cc5ad326701b55a04dabc6683ecb180fd25e43795a557307f5be2ed461b815c9d5005c040f3540406200feb1c8e1eb7443ccb43d6e4008369432bc6893060b62607e938956b2c5d6a817a1f37127c278ae0fd9b3bfebd5f057831b70955804743dc431514185e6772afefb719ab9b15f1c5c5997b009e230467598cb92c1d4aee6d2ef209c29541153324a38d8f535384d84c25d3a5d0a158aebc5310233179574005c34261c3d60e0825410d30bb8be9d00168263a1c9aa1f81b1659101465be02c7302d310000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000abd295d1c18df13455aa2029f625d808856742a7b372a8dafba885cecdb69e3912876e8ec67f36434a8c9f4b84b6f2d25ae334e089889225565d0763f42f0ecd4504b07c51d46a683a279a4864e85a0a99de8d3f86d573b0938c0fc63a770ada714c3df7e1fba31f23e7626feb4db58333b564fd989fcfc34deb1d86492fd223c93c03c2224e05b1385038e9955535d17903b461af7a575750338cacdd6541587333e0bc57eda28424f05d1df84844f60368e31d0cd5e4fce750af499cdbe670b7c22ddfd8361146451b3bdfde9fd93c5234b302e59863fc6b2bb6dd7a314a5b15906b780696758d1267fb782209278a583d444e757718b4ee55559f69097b65af34ea653d311ab0ade338fb4181b0bac6f769de803bf6fab3fbe9e0287393bd6db85388c8feb28d0aaa0f8e8007e25fba8a9210b419fdd86019bcbcb8234fbee5621f558f3a914eb6a0c9574494dc1100de571a26c296f380067729a4fc87e438ecabeac81f0aa2d76b47c69ff34228aa4d695e71c816b21902e42e4e97120ee9c2f82f26cf427d597b90c9feff64aa88d932f52febcc5d0db0e29d790f3c7445da901aaadc2007a59d5c13efc28a9a9ba4b32b666fb2a2004a1fc56e8ed26700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c8c57ffff8f3a0fe963b3d1119ef74462fabcdd152af9b27121a3457920ea3aa3d7532109538bc6d4b4e95f0a2c805b8cc77fd642332068d5cd53e0cbfb76d18a2075766ac4673171f9fa3832209fdc6d9964f53210dcd2836d7e56e40b34880bea1cc90c3093c0df91d616eac117179c9485e5d0d747552235559d31b1704e6c6ede83bcfd3a872c31e4b24fad8bf6ff631b1f0f731977d1d3b471b36fc0c6b480dd8cf4dc7ce6b272fdb4522a121188507e128fe9d3c8cc9540f737590715ba43e783307a5b6f7c7a6e349cceece0df278af0ce61eadfbee78a63565088a1a3cc34cde8b2f79cc41a0a43a947ce573a3368fad6b350cf5d067d676769862425436fad74f6ae1470e078625ad542d098600f80a4aa4a8e2b62d6df61c2aedfa0e03cb186b54b6bbf8a09287d63912ba05c0a4625f6651a7322de65cc06098f1af75c99bfe92699b63729160f36f8e3d37a22d9da283202341c296c4fbcf188f0e73b71bf01819c032ca2a98035c5e941f088ac67977a8b2bfe87c1d516064d4f5f990d8237a931dfb7000fcafff9764c614e0511ba99ab442c2e645b8608d4b6ed065402b62eafd0bd8172712cf6478bdcda57ddd4c39706c5d51503f10247000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001aa52276a1bfc1a7a95b81aaaa869311c96319f90b3b52a3144dc1ca92f35659576c0ee14c9bd5addf5d28c57ba0f74fa332cdf9b71db16dc9df53c66e4b8154b572d7c410e656754e3477243d0dcd949031f673fc243c9ac8e6828fdc5fd2454317ec16889675cec49cdbe883d2da87613e6e540b2cf27f90100401bdb99dd88edc502b1a9730b42b0f4f2d0fef78102c905be8071341e2dd908e0a12a814e0463ce9e7d9d693e8d11e24095140dc7e8ff82502e721a67018c7c719b8c31146a8834f615bc1b703be93e00626957af08b8b88487737c20714c9b123bf004a6c571f6c288b930964b53718eb56d596c3495dd87d5ff5151b216bd95ceb01c9079843e0b352573158318d61db2381505e9d01a445edb1f9a63c6dcb8804f590122be48c39a97f92255c11c062c1736e164c18d4e06809106620e1970438fdf60b7ea8f92968e23316fec3ef840387c3c496617569a3757effd5b9bbe9fcbd2fa50ddd9dd9fd8af41fc0db977bf5f5f3c544c1c196962e24f7189cb886069ed333124235a46ac3c8dd9c7f034a04028036af34db9d3eecdc3cc6e29510eb2d3485d5aaa1f36e45f5498dfc8f4918c8c994606f6384db7032b1444b9ec28e68b09000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010fd953ac6430103bed45b36d18df39f9acf098fb052f7637b3078844fb63ba0d1897bc9a6e5ac8ad27afacba8f1647be29f0b2f2b00a91f126540de2b0fc04c6f82bb68fc9d026d338c2013ad7f9e87a52b1bf3f2cf432396840123f2c85a598bf5bcdcd59b16381c1b3e2b9fbb7826339abedbb85713eeada68a04b2538a75dacc8235cce4dc10573c6a10e0da26e6ce61aae8a331c65862500e402298da30b913998685450de0f95569c52c2b6f17d2396caff9521049a0b2a5872f3c959ae68d141e5f57623607d6f6bbcb96ec5dc75b60e03134d3bc3bc7b524348b889230fdadf54d758896c74b270ebb0990f3c36c002d801551710e90edebe09933625937fde8b2a7afb8b132d69d7764b5e69977b8a9c760e54751c302096e322a625c8b195e4de6b7d613fa01a539f2471cad65a8c0fb41b01560a046fabdb29270e975836f26bf93fc55a2dd4d3580940e8b740a607c888dd3f40a8bb396726e7f7c743105e7c08e297e302894b57dbb91b15ab7137b618e55cebda63ed1686a4dc320b99c2792f8feb4e3fd59cf45bac94cd836b886ef7e115a234c298b5c914e69373c489369e44c49cd2e83da4189aa6eaab94244a88dca805e5a5d5228204700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e5ba3920fd0eb02b2cc24038560906d49d36f40bbc4600f0293da00361a752fff259aee94bc439b733ce76ea4291271cdb5529a9d3e3b7252b3522eddaaa1c38bdd95f572ff8d10eb9aa306bd129b6af25fd01393209258f9d0db0540f5878c05e9b7c4fe6a08d6b38ec9db04a2b6da6f8507f9af2b073f13980895303a1bca1dffdfe96046c14656dba9e83b4f412da12da3b1b746c4679964922ca29cac02fe8512e1e02c798a33c5c8f0a3c93a04ced78b0870864bcf46660b25110c0a8db90b967c31e247b2dd4eb447ba2e8ebf927e1dc8634ca040e6f0d09080a1a04d74d93ffba0adbf48b70678026b1969201a06e47427852ab26f59f7afb890599126bbb53dc4cfd3e05843b88fc5bdcbdd42a084b4547b337d3011499b0e8e8253e574af9aa9fa53ae2df9ca6477fce17d682205622b4c3c8c65fb528ca2c6fca7527687ca460529598e17d4a8b626143ea359a8386385382e99ba9d14d1f55fee8e10ea9a10af1cb7987330a5d17a8c74d3249f9efd93a959a4a7237b95d2c636c779fc1ca91b444e9f9dcc1cff54428010d23142afec0d10a5a6419f5c5d093d9cc5b80518e7276c19c1ad28d4e723d34f3a1521cd4a77a8f61624eb35842fff000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021a45110525f1e2df28aad05bd22a2b13827d6144cddad98eb1af25850f48760685ec4d4089e6b19cefa2f86c1642fc785ced1cde9aeb1a1b133c49d3ec8753f5bf5ffea3e6a4d0fd01353ea044ab8344506ad748b9f6a098e21a9b244e6f21e3859b35863e81bd9a858532f080c9f0e1d4d04fe57d2c3499992474f56ef548c70f0938957a7fc9076f22b5fa02774a56d9598fe7932622a67798bbc0f09f8bf03d4ec0fc2a37aa3932ccf5d5c246f7c7a54245c32ce0b3c16effe3b6507a2e90ca9b8fe00f5a31769bc0aed0ded50fe5c628fb1fd1d30c24da7261d553118838a4c2757e88230db49dbdff6765b5674cc4c471becb8ee5e1f3a887e29899e7358a4a130b501c5ba6bf521ee521e1656dc41cfdf0ebe7c1060e665ea8e747fab230289b67f4ba6e057753939eb6260c42a25f0a34a545457ab15da25e2b45b6db3d1e4356ffc662bc296277bf62b97a8e803aa2b5018950dcbd59011e7f2715a2669cf71592b0db7a14ff42db5b4686fdb0f119fa6c423d01a5b4f98c7a00a62f04e0f3a26d0b03e55bd7960f85bd3e7323e03a29fd17e23f0b234615c3c63ed57e6ef8021c50bb241c6a2b7f96a9841b22fe3581cfc230c33acdf5982a06d7f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000826f5e42db0c605f9c149b86f48e564c03c8e4a548885f52df663c4a45ee8ce457ad785ee204bd8ffea03f6497d31011370b7bb8f3e3fa77ae55706beb2960840bee465d5947710975d643912e98295b7b28cbbf16590ca67f3ba37f4c144deec299023c90ba977aa637de1665a91ea52272f58e0c6c688d078359144b87e0e22481bcffd351397c7077d905d0769441ae8f35cfaa43a1a9a079be001486483090613df924725ea680c8c9c0dc4d3f48e33f9836b44b1aa8b7a704ef6ece921c0ec07a3d842bba1a6b459736df461a80cd2e7650c715f30a8ae431305d23d4ee8ffe56047ebb57f5d070f83ee123e32a6d018e846db55debf0aa6f9cf8c6fbb8710375589a6f66980ea8322091d5376984b9ed387ede2751188e4b571785eae04920d9b2842007983958eb8ec42d1a42b1a84ae0249e57c8181bcc875765aa22479753a6e6311780ae64f3c7308d97d02050de4f301baa0af33ee22b07738448fd3de59dcc7d9559f1a39e6b60bfa14b2e986a51c942fda53533b7eed10b4eaeab2bb5c1d6b2dbf4ef93e75658565609f18cd009631d5ba29b89772c5c776f84b3e32226f47d7503fbff12fabcd37257911282c0a1b8c50dda85edd2004eda500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ef67f2b967f16eeee27dd6f49a612a3d9bb6010abbefce859acc1086751d4acd9f7e29d4e5dfd89a17a43b1e014594c27c3570eed26de7f02485d01ec9d83335ef43bc8423f64135f79673dbc8ae2ac0e8113dc9a30a23f107fe47c3c973b206df7d93937746ee133de0f4ca409cce1e83caa0762b254347e7a8284312f200325ab1261f1dc764f2b7b60654aa0327fb6c43b7fada01edf52053392eca6b0a869abdffdf510974058df47d303fc4535e9675073d2a97e88e68e25cc62c7c61575ad984f8b5592e9569f6bb0e81bacd4e4f76d4949754c7314c845dc90318ffd688ee6fb7b38b6f44ced5c53c17ca7c1b1b4f51501d0891bd1053903e2b5ecd94bf7a191a93b8479ebbde73b668f4b8d2a30bad75bbf6021ddcc6fe1a324d7ed9463b8e88ad647f2490ba09884550ee14b41f85e03ceabf1ea1b8e2d26ae6f482f9a878cc3b307a21df17d1c111e9f928654a46d7292948fe03166e37408579d1609f4648b6f8d7fd77c55091ecaa64009d4a69d026d7b7b4720e7876f0a8b8ce75ac3ed7198998a9d09c3f6444d52f63d190ef3304374f65087cf1e70a8c7012edf1e3f0f51b645cd77361636bcd93f69fa9d84695bff43666a89e5ede648d00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000871a91a2c049146ca63029a9f07c679c84604d55cd250035b11e5c995438ebff15cab8ea13eb8a57eacddeba67a78a3a15a1c8dd5a0938e8516ea5adc7b5cb5d4ca5deeecadb5c349a6fd0025bfbb941fc93c2d0160720d8da62531ec25d296fc196e0c1cb9200c2d5a4c881770ff5f39e27bb44c919be67a25ad417b8c3ce64bc34cb9114605b99e18790bca726764a62f3a6fd2c022cd254aa467a800336cf2307777c7a8b51ca850b79db23af0e9904a85fed6a3bb133170368fc40410869578b99b2c53cba4af188736425f8d7ea585307dfc81e66fc75c07dd05228a824420344b09442756b2563b9d50ccf2ac4cda74cb951946cdbaeebd13da02bcf602466b44b8e38a437b9d2838a80b7261e3aaf469797b99b35e604764262cdcae41ea7a8400d1e9e9005aa2b8bf367b85aa101d917e1b2214f920d06d2eddfb1a43fa6cd17181581271f9a6790be6a2184941d78d708cee86def2e487859c72626bbfd3490b4670c712fac30b609fad47381f66521540d82f175ad9611e01c4f12b15db9ce977ff44c193fe83586eb7e781a60954a47f6cbf14ccaced7374bec690182d733187462f63013b9bb2cadf5389541d28aeb71db2f9804405f7201ac3900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013ea92e78f4584de5f3df4dcde7af2ea7c64e8098cb99ee047802d83f399166dc0c28c9ccf16ca9eea486fd7f764033fcd8fda2717f180214e3e17aee15cd3c91830ba308fa9f0ac2fd6efbf7ca92903906b69411e30a2792892b05f4f0c8530de402fbc0b3e8fe12a2496e0c693ee475275399c52f3ac334bf4a0316b4fcefd3c768f797ef2f77d7aa7f3eb507156b5da334458fc782151f40cd6f34ad1696c5d4c1ff31bd661357cb2942b90afd1086e851967a4f7c6e95483c6e73492ea00adbaa0fcb2ede1835b761baccf123a7f5f73ba7c9a6b0288bbff59c2973bd49bca6628980e011d2e439dc33d874a132138e174a273810214f2952bbab3ecb4c358725df3471ec55a6e990e3857df02f06a66de47dced7fcbd063c32351ab3f17da7221cbb61efe6a5d4942a826e416a68fad61521c9c77317d1a81a1545f346bbf42598d946adcb842497093130a44309c54d902f600b9dba3020d0d9648e519c516c4c53acf3c972ccddfb7c7a113eb2b0a6d48f112e7fdb0e3e5cbdfada7585baf018f3960aae30d9637f7b09759f2ca7de3a318f118ad75950bd903d02e705376e937ad2083b86d1d45da2a8ba0de105af04921754ed6a5be5add9f497b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094c433caaeab51447ea1ba254b01b525f5edefbc80b3e5aa5bfc35a47b2b53bab9812d70223bc6907e9f787a3dee4f2d7c92b0ef71e3e22a2a986541e963737e7b37cea071af771dae81f8b780532a89dc2dfafd35da05070f05d8a48509c32e3481f5a6542f99aee720ae678d29204adfcced71c76f818cd7b9a6107cc4cc82b90045226e02cd43b05c1904d7ee16b6f7b8c289e10ad6e002da0928a879f1d07b44c49706cf7e4cdf55be3a3845c1231627be4fd3505f835a34ffbc5922bf22d6de2e71cf0a5770a42fbce540d1bcea95dd1398ce0b864d5eddce196bfa1435fcd039da7d76a92d79934ad80550b06a5fd5bbc5c3d2e6a674cbcb7960e8b48a7286a001676bcacd4b60ba1ae1a94e1f5f150c437a3a99d32e866ad820333be46bda21a89afe0358c6e3a0861245dc1f91de9ac48a865221cbf3bda31731706daba584d68a61e725482ed8452e2329acbc56919193ca35ad33fffc2ddabdff43d4b96b1306ec57a5c61e9bbe4a0fd24b5a92abc6160fb5ea8c061b4863139815ae402d7315a2158819a86c0bcf9bec5ae6adfa26a6daaf013e5e284929ef0eda1bcfd6517eae5ed931640d286e80da45657a307cf0c50367a9a6572211089bd000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029fbdd2f86b678d6f57bd43680b9ba125208a777958999e757a7ec8d2361cd8bb26dfbc2bb76c8f743332eaad76bbb7a3e95cefd4eedcea68e0dbc6e9cb4602874c999fa4cf89fad388ffe7a6c2ce5ee51dd646983c895e324e8b314bc33b1c6fdca73592fe6e48f401491166f1ae6116d4089dacc549752ef47e7da112a4782a48c63979457f07384f8726df6848f1df82b70a1579c50bba4b894b65f93c078530f2226724e2138b61ffc72fd71fab76ce56980571e91e9b8083c1c4f3eb9ca74e1be023f75d3b964481c9607a9782dd3a4b03000a47f76a1f7fc33afd9328a2f61cc900179063091dff2c96065d635768de5efa65eac8b23d87c473e865265b9c5b0e66fb054110fc31db8191a57463a23ad31c852845a3646a52428df468540dce8e91879f1c1b7f087d700e17d280d296d6862711d58ece271915278c1eb5ad3f8c203b40343a3f3f082037e05944ef339baf0797cee1d21960fc20c2cc09465805a2d8f11e99fed87fbdeec97d586fcd4f9c5f78bbb0becf0df217e50d782d076e62380f434b50d8a62bd5e93bfd868d7a2c7205eb2b125ba5ce070a83563d238efefa8a1ecbf3d37dfc9d96da29ed1bc8c0ca140ccca2646b0e9451eda0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000230dd2cd13ba942c4ab813d4a462d56afc4387448f37d904f89f2c9ee6442601661bbc9349cb22341b0939979e9949447cdb938fbff42d33154da5675f0671cf49855fc4efa028cad3b9e3ce95a128ac1cf0bdeddc95939c054b88eaa8eeacb820832dc466341e0bddb1f150bf87350abb477339a04437df28899ddda30af66be9c5b4b7cc094e8689e987b6c0c557234c31c0e3b12cecf9173a2c1c98d0f3a63aa78824a828334392405ce51fa2ad39c2ab4f2a0e8b5bc8ea6a2f208f8010d00c1b0848d8526d7c612404de3365c04a605db214cf15f0308b69e4abf9cc1fa3e2c36f84e083163d2f27b393d121333357ec01d4c9c3ccd2236d8e236763a8f2062484160d9087deabb4506de7b4aae08c7305176204034b58d3d9bb6074c48dd803784ffc1d1ecd6e97a1d85d83a5c4186dbb6a95a4b94f389c2d7fdf28d365522d12c72ed14edf5107ef3edafd76739b54018e51270ae3180845b69867f3f779ce2656f815e439520675e482841cb494cf5d2a2f3c83e8406b474264e775f24fe620d4b8c98a3cb50dd35218c68b63c588225a1800fe70ec39ee05fe8a2c9ea97d5dba2bb62b2feb2df0162a2caaefdef3293d27b1a7ff7d19a5e3098fbbe700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009dbf1154a15c27b32ac5134d286e6fc5abb7539f8ad95d627ffec08a5e58d55145e7d2f87608760151e825100c6c461b47f7aff16b0157c7d83f566fd971d63bb3bfa0e00b1e4e2692f88275d444f1d0518a6df33608f7132c8068a8eb2e8732fa9af3ddf669b862623d2425854fb4c6b929b2a4b2400fb92a4e654557acb459b0b96a4df2492e0519940c3344dd948018faaa1d0519dd3ea239bb4eac48cf4fc04a97a4701d34c1536ad1bbbc341c7f0568e81b0d1eeda904ae9be7f71d9a3861ef4e4c53492f1e84379d9cec82d0deb7c93b78fae0dfff70e504faefb3f0077810c562ae2382b889cc6b0ee0181eee04513a6312893257467b5235a708503359715966d6b21520b0e2242f7a304ad5cbb6ff9229c4543e7fff71d5dca9720022aa4ec9664fa8b77b3b55f9cfb4970bcc23ec671be08d48368350bbf1600795429a919eca392772b216ee8e9ce333bbee3c7b28dd4447be94fcc829fa0563e10a13d5c1f215d52cee5cecc837a07f2973db4c7740e3812c3597c149471773235a943985e7af9053eb5028fcd17a8231c42e8b1dee0e17912e2e2bcc8e91b37f73904677245e6160b7e156a97e495a859c7992597289d4b9aa1729c74dce27fd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e79f97a186777ecf949199f5a369ad30875254081aaa421455f36bd232474eabcedca49f05ec0044ef0b284d2267d3c092a2491fac940238bdb685375979837640e7a5fdf0e70e9d2edc4964884f0016dc524291946ad725714a65099e9ba524ebc3d11c94e7029eeb1caf6730062e37b49184f009f2527d581ecaf31c69819121b6d5961ca69f11fac2d690b2796fe464a26ee620b18242edebc59b8bd0f06668816c64a08aa6e3c9c273101805d91bb6a9f49cabf3eeb54604efc20a3e8bba5482b3636dfd04259f814b13a1f2f07e55118debc5afe761ea2abe350691f084aa7cb4cdd4f18e4a43315186777be3fa1795a32b4af434de7a8c266fbdaca70128597ebf17f89a15db3248196d970e8264a63a30e5ffc971d5f72f985ec07a1771e1424e343f09c8779c4bf0b544f7dabd9d20348d705bc84260e34f7d6928ca1b61c94d83baca2e7bc7e3e3e65ae54bfdaaf4565c1c9f98b4db842fabcec4746d9f531c39f68d6add37c516ae9cf902866544a148187150d09b9d25ea950207d7ffae3a891a0295085e45cbd23887a182d87f212bfc01c4584a9ba8039e23eec1a56672bea027e32af605c62833eda227f5be092d1b1b4b2fd1907be2066870000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000279feaa0ea07480ce27c241e37ac0c324ef8999b8a0f2c40bdd7050a7d7df0ec61a218cf84288f68fd987a9e78ca264bb89444356f5d406e744ac001f6ca53649707bbd7f5cdde91c1db111e8990d414b30d5836098d3fac499444101762823e3cf47fb3219c78d5131a04df98a17d744b8d205fcb41689d42b707ba978db4c37f257e283cc2336bdae144974630afc0fd52fb0b301bf35d66a12d9065607e324f170b90eb935d4acd35e2dc38a30b05e300f2a2c3b8a915faeb903d6b838bc980cbc962c06bd6f6bfc9ae3070fa3225ccc04850483d2e1ce3d813cd1d3a66d71bb064f59ddc6d73a0b3fe9e721c609ac25dd5bbddeba0627b6ec31772ff452233d5afc1abe1dbb42ef26acfbc3c5e6c57925a4d48332400900fb06c324dc1e676273bc8dac6c6f21e20ec8ab803d1547315a07308d1795283a812454b63cb096e20aeaa3b7b270d536d07e75e14d119c4b30a155b1bc8c53a2ed19641c27f6d19f15ebfa1598863e11c63f5ed4239e2b8a138b455c58151d4e529c9739d61cf2456a4469f014c045077e270ad9549380c6ec5d3c69b28c2963e9ce5864dd413bf368700a06430023a48206d4173b9084bf8a54429cd939875aeefdd1bd27b4e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025039d686ff596fead0558bf5c6466eca6c0b863fa69385bd2523054d3450e988bbaa601697adc16bf8bfda46e6a2cdfa4875635ef5bf15cf0f48788a5455978be23a826f101a3e48a1091c4d18c413b61b4c55d1652ef4ac8194b23a3ec15c8283bc9de4c09a727ab932ffeb03fa5401f0493b758921f37345c5296634f062b6f1ee8dca41f893eb823e17109bcd2c43ea2c82982c10713608c5d04a6862354e4ee7fe5439217e9fcc52dbbc40edd2fc0224fed763cf3fdc2fdd7b2315a6a85c2be771acdf0995765986bb0e7804073f09526d8b5759d2f6a9ea42d243a214954aa92a720b68fb9d5085667af8149f4c48b61c94710d022d55c9e73f0023b4f7791338370c9fad3a855bb57368201cf009287237b18d0c84d920eed041e570ee4a279516c2500558dc982c7b511131eb44bddaef8f32b1a66749cc690b1f6a746a2a5308f578bc5e52b6ec84f5569a4e34afb076b15d20f520d915c8b099b216e95b8c6c341ea03c822e08de98b99d66be8fcb7f385e736849356e2bbfc2cbfb2f6da1f2f638c98f3a59f263ebd50794c1be57fefe833caf9fde51f7141d0a4416a5b4b3aa46cbfb3aa36a0f57e909864fd9427863a967783f0fd647a9deef70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab857740ddcb08ee561ac130cb5ed509ecf40389b98c916503b1bbb4e98d6ab8405069685fe668b68f56c25616e79cfd5c48bb80327a57334b7490fe657117dca53ef8cef60e4d32a9657d640fb14d9dde22c9d1106980d6340ea97ab2faf6a9abafe0e0eea2bcaae5dcfbf3786537a80cc2800587ff96832691ba1eb354398d1bb5021ff23e61621377c911eeecd2626b767fb02caa87414a142973d6690d24fb02e53ea9138d06ba4355f890f4afe16bb795643df047aebc2f468f36d823d8b4d2d0a4a91249af059426facfcbafe6c50fff5cf224e406b790d84f33f7bc2096ab1a46a6be32f70705a60adfd3837bb2f8f9639d2bac4cb5f80f468e4a7b163b2904846840ee8afa3a4067177969a296d1bda4f1148a94c0dff28b668516c835cec997b72e500645b71eefaf14a68889bf1f9a80cd092facb8a6a22447c117781eb2feeb6bffce6d969c5bae144aade41e09873be020fa94094841270769f85984f3cbbf4c9de8682780bea9e37e3a352146d57c9f852f731227372ec43bd352dc496849fc7be8c2d8af263fa1b11c7b84297c72433e7e08eeab002d9a5d0a220910c970f5b1b00544767298ffc960bc3ef3e46e228caa0c2d18175bf5d03700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e9b3957596227d0f0c83d7fbc41d42f8ffac9a4dbd756c814d5c0dc3f3817c015ac18fd73840e08c12a30d76e63eb703c8b840ebb8838efeec142b6d7466200ca271a48562ef82a1610d45561cde1f4d9792357646cb496c11870d11b5746c49061e67f4c0a41839b07094b7707726e81a9048118d15bd0e3326376b5ee2e2c8d5bd782356974a3b64eb8742378bbf683de79848b61ddc7314b24138b87211613384090cac1fb7ce3a185b93b515199f956fef519384db335e0aecedce93cd8e745f845d45a30868a800daf27ade8967c795942e79d008fd084d2501b2f836312a4f14d15ebbc0dbf8dc97d1b6599a95c0d74399881f90da625faeb2654fdda4f9d59a04d138a364001e56635ff8a40e9708da01b1643840f0c0a3d4f09e4941c0b8ae2abdc899b300f76023f430d5f47c927ce8645be7e085d026745fe2bba6bf7029142a4947448d914fd50f92b976c282991e2fb22108bd3fb2f4766e73a5bad5895a0efc11e413187ed2b93f2dea2ad873204d3a0820e7dfab617e9b0c25d15d53ccc6fea5982baff07ef42efd4e492621d71b59a12fab4efd54f2f04c0e2d97fc980ffcd6675378cb8ef5579c540dc453f06aa74b115caa011d99cabf9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000562537b187487d9b34de74331bf69f39853133e2e6cc25bd4ebbe29e6debc5e7f161373780eb654c156de4de1ebe35d9088fef7b49bb8c9a393343d5242c5f8f1e51f3e3acb4102b6b5cec561fc1bc5ec8b81c720d276e4e1e6b956035b8e5440d02c161617f2d361929aa36824a1baef9630be5354c576630c3ed8cfe98d562ad4a473220cb0ded47de406968e5bdfaf0b705f5d554b447c01d71693ae0de0dfcf37304375fbd7ec490e8f6752ac557c74f8559a0c245b7b32ff98448068879d8b16ad8989f04deaf860adad806a965b137b2d0d4eeca5409bec13c8385096b9bbe9226324f446d911e7f3a1bbd5205c1149add449b3900715be0467cbf6fcf3f326533e0a4b2f4746fd637f64a14928279f578e7146f01d196f4551ac648878fe3be43078414f4adf0f9146a03e42d585e9d472a3d758b801d15ea85862eaa31664e444346ea6d29ff5adf12ed8b22afc00e48c40148434033ae328a49617c7ea385f81e9c5d599692c9bef5614ae816d9d5d39f236f803e0fd6b7516b405ca0ceebce9646bf5f2553fce39487bf3e9fb6c939ba6161f9df341c8ab2d87614d8f0a4a23210edb8431331578beb40d1c7b7c69e6eb9481059d6a54616f03300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009eec39006cff47900a042a216575a7493f3503965ecaad79a6ef566314066569f409691cb4960e1e07a0223976a4224ef4e79dd8d89399db46e0b25138120edc62935db6dd99a9be9473d69bf450569ea71bbf1036dd9c05f6700400161fad1bf11a9aa06d5ef3a09f7dc5a39918c0b31627af399859f4c395d969578ecc929631a349244bc324a4bc6f78e5d339aaa9541fac39448f58201d1f14c5cdc3f0cc77bad0d30f558ca96ff13621d2d438006c94a82faf1e1fd5c0dbe59d15fb07939541be31b6162a69ce0fb049ce143965f455c82e40f96f2f31f3ed9b6be9b594075789f1e47ebb34b9d344186f36e492eafb916442aa9ea50c5c8472e021ea1aa61c262e5a744e2ce78030ac3593618c0882b5626be85b626df78c140d9ddfc2a4bf7ec4d34cfb8a940b84e13b2235f9e70e6dd6facfd84c1b66a66d816d14795ec2670f63b6cb8bc0c237745892aca07dfcc7b0da2c7d6007565983c8920ca58602d937b2c2d3712c01acb8fa30a93e0f67c4b65a8a1d411ea238b7fcd93ea3a82f5285a28e49b1a18c84e74ea727c1b2c1e4466b21fe3efe851d55fed1e7e7fabc87568b994298a58ee897e5791699b6b21870a9d44da7858b1c117031a5d1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098da5feace5ae30f8914c4f04b6e8d061671c6f850996617b644537643c78e65e937b925e602e3be373f81e5b73641fa4d317661d4aa963d098141cf1495a383db6411ba8cf4c933d16cfa1df5c5ce52edc84627afbe28ed8bfad5e7c81d0937a0135aafc8076ca96336301258c5b1649d902d4fddeec6d6c200a67f3d4c356a40121af4d242ddeba13cde5ee58201f62670d92f12d9c7b9ff1b19fd0d2a073194b9b2192a54a532dae190d3c33972f91e67cbd3035344c688872fb0ccf0788d7658edcd101bf47bd314faae27d104aa2b0f3446a698a0dee763f4c2e0518b85a2200a65dfc71312ba49ffb0e4a2aeb7dd09b1c8e1e486d19bf3f1d30c28f4ecb3c40c9ddc8f02019ba0128256a46af5dd9ba1a157aece1e62cd72f32f41657db8b08e13f091a110ac7e5176a68ac8268d7b011f0eb6655679eeeb0945591329a07f0ee521d94c2fa4172ae2b190437fec732bfba881adb6ed886c1797ff86e4ea81385bb4cbe920aa38277721e7d85247f96a6a07a9bf37703782ad64e5e4991378a919778473c23085b86d3ad62acf88fce35356be42b9e4720405b90532846377d0f164dd10716d73c2bd48696d9b3fae1499f9661e55be9cc0e04f561282000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090cffc6e866849f2572efbf047a7ef4225fc10bc569c646010225dd4e24d37c5c58e8348ff1bca3ddb1ebed0f3daf707d673244a1646712f4edd6970fab4dd621a071660a605de39585cd4f62abfc087f4b454fa0ee47379d733d78eb62e6affdf57b710451832732f892b89419c6951bddd234009c8fb705d2cb4c507b6d3b3573943aa040c1a4c91632d83d1cd96083c368a2738d9562af4dd8fa095ce8c2af4f73262f0c80e76a0933b28caba803a878b3742bd409f4936dd51e4914742f44aa8a5462dbf2dad450fd40b546fc4e33da20f6fce49dcd3153d04fafc82dbce77b636e5f0b169db688dd3edbbf73adc1b8fccc75b07d508b04378898a9a20c2e70e7cd6c1451a0218fee2b8936d01843c9b4381a3daf49b4cb491ec0d9d556a682fe3b9b64d04ebee13a3cd50486e3287437c6793d9e895a0971ef449cc0e138159c9e0fd93a6a40878332020617d73f6404cc8e9d307f5713147fc0e04633144fd04492f00df36e4382e17c993ac326c6aeaef3b9af588464568c0a5526f156a5419e90e824907199459aad01c4d1eeacfc6cdafcd22c2141496027757b76e195094770b3a8d1014690c69be50aa185d341f5cf6a7f68ea87fb888fed2deeb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009982bd275d3017ef819839d01429444858192daffd4b943a0f4c348e84bce313ab115932bad8c85f55d8711cfcdef092658ee0e6c43ed5fddfaeb16b5d7376112222f8f5c9ad79e80b84e60d7aa579bcb767143e0dcfd115109d0e50e5b582b50e36eca3c3e088c5479e4f9f02e378c74abf2964590137c075f0dd7f314cb33c60a996158a66fc539a494ac90b922793d6cfce3e5075477ed20eb1239fda38bc3187bef9bc975652ed6bf0ba135439b61ebba8898785e17c024d83d13e4fd8e742b8bb02f0d126209db656d0a04e67b23570ab70eb99cc8b2aba9f93ac91d0082c8bcf1fdf75e50fde5c4b5a3d022c271a023ba851ea231ead6dc31df198178afaaa3c7165aff5526ad7649b2d858c328ab02f4bbed34407edd98f19446c9a9b44b41ceca3ed8fa413fadf6d678c6d7400736099bcfed14e7d51c8afde7e84b1a5fec884ab3318f54463b6e83410bcae2a8d1b1330c0ae25ac4ce60de5605c9e931707470ee09dedc67dd60f0202ee7cf3adb154c51919a9eb23774f3856406669eaed6d6e23863b35d57a34efab45fe51045069105fcbca5dcd9c12f8c6862fe95183666616033837e9d03331151a2394683783ccc6c0e0f3ea3ae2c8dd6bfd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000270342678ff184ea2deafe2b6ec0642031bf70447d23df0245fa225f4c8288c59383ce85dccad016af49b3d3df99caf1799c9b10a96a773112bbb67008870786c7bd15dc7b6519c9c7d19cfeee838f67fb8155fabb77914ea1d81cf65fc80274c276075d605c4535700fb656e4e7d3aee50287f2808102907e9d0cd8b0a3ccd59e293986a5b756a0de0fec79b11d301892f47f65bbbfb110324c0c8e77eddb2be9fd90e6bd358ea18ede9bd9e23f4ef85716ed42c5bb7fec323fd13050605d8fcc485b68f57e3d40fda9cee788a3f383731a0f57a2537895cdb4df3af9894a416c12b0424da28afcdd7d7f345d7b2bcb28210821267b9e9bc1d8bda62fbff988f1c7eb233f166b2da15d850d94a07d50cb75878f80c84959bb084b30dafc0c769a8d3acf888c00e534f7bf64d333967a1bdd7497e52bc0c60baa5c747fe5ddd0b5f9939c566f7bc39929a150ffd07c7260735ec24802aaba130a728e8a3d73969c0a2394d0c5f0e6e4eefdd1e4fc521eaf7f2c8eb5960c70b0c71b9a2315746c2241dc4cf8819ce47e93085423b4bfdeef158c6617b696185ec44655cec0a268e0f98ba8fc58eb010950d55916ee47d82bf9967a0b7a60fe3100599c75ecd226000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028efa5ef780a47e865490da5ff3b0cec324278842ea4630f803a1775b76bf35226f69de39e66637c174dcb871d646232b32215fcb60a01acad46d309e34315bad2b934528c965000af565eb5dbf375ce7765fb24851da67864cd5004615841805a056809c08095a10e211439e09e5b6b73b65df28d56111a9ddd4c32706b3aae7ed21dc8e7e7ffe9081cabaa0f9a4e3ddbbfe6d23a04ea8773ff40d52dfd676164e82d0402956490ae93f3c6290964fb3fd99a19a832c14697d209995140e70151d23a09671d68478a2df83419c7ae0ed760494af1f54a6906e26cb08bd8d95964bd7f6a5f682c092e20e557e183ad87b9becc034632dc4c7ad7a5a38f099291a061a7fdd1c16d8df37e4040c14afd74791b29714fb607a3d65712540ceac56a29e0bef975624b6fa62919a610282fae0221371cc0010926a8a8284bcaad6d79317ff06bcfb707bd236bf9a23cb6bf3741807a31bc5956f9e0ab2c1278d42946da85f174ec1724edeaa8757e7d67e33d1900ca281d7613731ddb2211aae330788df8ba16ac5c46e63e5cde0dff2feea77be4d5a2c4646f0d4caf6f58227c41de822ab5a1f97ef0cc8570eef53cb4d26135b519e7a09e2e22e4bfc495170e1193000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096272b75a9028588ef95ded5557c2bd2d13459e29e8ddad05ec646510c53d10609f4c2953b9e8169c7968565d4515fa363635524ce9678e6f1bcf3409ebb9838f61e9397ff5a6dbf5332ffc9fc58b8bd8cdb6d46e7c6f069bdb288eaf1f03d28b3d163e22f7015f492a451816926c5aa8f61c7c535b2cd270996f5c31821ae2a615f4deaecfad2c5f50113d4774a40e3b06f4daa0bd1103ab5f0e96ec59c84633fd0dd47b8c0e58d4eab7eae3c30d7d299b1d380d4baac02f1b4c52f394e26d3e151dbe2ad660e7664ab0fbda1b9b47db6afc198c400be517114e5dcf13d42e7c641140f5b2829715ef2c39fc6e0ff80fae7227e5f9f759f00947e32ac8b6fbf019378d1b840c92111dac277c82f8e4de625a816a8f3d639e17ceda071e1c637f8f34fff98d425cd2e2658aa9e7599f9aa20711c338729584a74a5cecf7d087965180cb40d296e510aa821189cbf3bf0e74e93876bf505d8d18101a96fb0dfc2a2dee7adbb4e59f2bfd8286330398590d3c03454eb7042a78d371634a15d852fdb4d6ad8041594e6f13ab6280983374a5a0950057f1b27fe63654cc9a49177264bff0e0647e0ec35141b80a67dab44a5bf05fce512c6cf5dfa1aaa144e7705740000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a686da52c7ac8c3253737a7f28719ae6473bc2a7cbec6bfb3708e482e94dbe25a173a46360079dc2f09cb4f912a61de3a10abf7003648c3d5dfbbe58270adf6451e46fedac23343cda421f87fa12c186409dcdf62e9c5fb5d16eda74ec6cf91e09d8ac6633721364f3631bfd8eadc9c8136b87afa5836072b7e2d7a7e48f4775b7e8ba03072822fb6fd9feed4c6c5eb395d0b5762e4d93cd9bea2bace390f83829fe4758886e41824ceb60a73db05a995eb3b26f48adc8e4dce42e5c4b19f99068b700869eaf0bcdaf07afffb7064c0a7d8cdf5747af55e96d2cbb10ef6d93b693741ac12ebb68aec916fd50ddd59390fcbbc1694b8efc56f67b27241caeb6561fd333b6923a167b0e047bc5ba94a86331e63f78b1f64309ff09a86aa18a29f804d92dc3d4068fe671917bc6a2f61efbb353eb840d74f8195bc8b8a6629b1a2aa397a865a8e9dbf7b3e743747d71eb6b3b7dc3ff3aa8a9ee036a33cc6e1a62fdfe3b99a5c518b616768dcdd570b427139d0bdc9adc1565433c1c4df30c019db6fc1be550259dced8a32f5fb76becc1403896acc790ed09b5e2ceb99c0d67a139ce27e458557d75270f2a237f3eeb51d3301274b161ff207a7c3ac8c10ccd77730000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b01d1e5871dcbb37f92b38f17efd09d39a2cdd66a356a333ab8b501f852324706cec015f6d402f5ddf2c98d3ce5a96bd164fe63e8650c4b13fab813c0d61cd598de26eaa1ba9b62f580e85048f5607e7bf662ed3f16159af176032ba89eee0d4c8feb3c0e690f51cb4db6e5bdcbc0934834a21f6ed10eb084674f4cfe6cba25961ae2e4e4ddf08862d7641eb030ffbb1afd10761383e5ac11e52fb9137512637d8589a38cdf692de5dc280a73d38c3be37f43fe04d887c88977b240f90ec0470c57aed1cabee536076ead18055216fc30ebb2973c10ed133e1ff2a470d782cdc56ca201044307a9853ca5f679284932bb670bae328bf6901c8baa4fae5db1244c484b5667e83700877446d69bf2456d617c43a38755031173f67b712e9aa3b5146af713829adbf0513e26b0e4d7a2e57e20f938248f1ebc1122235ba65662220c7f4e3838bc8b5d6c13a4038bc36e41e6573cd9ff4f21821c40d85cc29fbe481df59c92da392d8a79cc499ef537c9ce045ea55e2792374bae8042ff51eb4d26b22515092b603192c4dbd3310bfe45f0dd741b515e16574f8e62bf1069026ed5c0f655c8dd8cccf080dfb05417533af976f6d0dff48f9e02525bb5dae67f7a4b000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b660ac065dd1a686378cf93a1b90be354068c950a78ae1e2cfb7020e6e59c3f93dd1d4634b1d7b0ea604c2a1d9bab09c2bededa681fee930d8e209f2393294b5142387edd20ce7b6900e9fde5bf1e083a071d9ff1920ff8ef23ffb8c4cf45440c4a4357f1fc14c95f2158e4235c786e32817d5399ff8028ae7f8d7751c864264bebc273682c9c30385b2c7672680c24a31e9afbc380ea7b54133c8d76f148ab052183606f36211ea308ca62e39da67f35c761b790fbb9f0ca83cdbc7b63e48fcad260afd58532f3277f600f5506cc6d3b10415b9c4690ed935a30f6dfc5793610074eecfe02b31384d55dfa35d1e1b5512d0f912dd04d9f245999b3acad15b624f1d89c1ff477a330a22034d9a6a39aa9179c6109db4a55df76a110ea84f4fa7340dc6b1ea2dfa6019a0f5cbbd78a567ad9e3f324de8e6a1c34b93ca5e82cfa8192b89b00a9d9a448605c06172bcfbb0ca221c6484ff76339c33d1905d76ad03983302e18bea744b01fdd6914e1e63a4080463dbd922bd00754f82a94b84ae41ed188f9e81a60811dc44458a9e245ae70b83d5b73b49ed9e6be528e85e60ee0b9de27fedfba183d622a0c535c48ceac54d1cc29a9be81966595b7365ea6d86900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d3df32fdab8fd167b3e823d183ab384076cc91eaf484fb033419169b782fa2081ca4ed9ad69f43aa75a836ec0a83387fff6d1856d2e02e84fd846c4d33edf09b77a81e1f2303535d9fb757d05e1273970b8d6851dfe2d96630fdea693838f59f28807132b142871ffcc69081367d14c42d914fed317eba5e47cdac583aae52b104121ebe3f2e35bbc18b5b27746674e8a1730b3e6e842b5feab80b063f73f4dd8bdd6ecbafdda33af002f102effe8ddf50f50b04ec38bd4fd655994a297a54d3823793d47f4b26b6df433c101b0d6be18ebbf7f1e58e43481b234c974662a4ef6ba77db73fcbdf01b76b2edebfc9753c25912be42dbfc971e2dba98304dcc8869b9a9ecb7c948fddb4ace31358d761cb378f5722320ed057c01811ed5e8734bb01f41a6baa9bd3c315421bdf6fc9e11cb90f620b0e55388de4ff1df8d40566447194d9f0216f493983ca8a662ef29cad8d67445523c1257be179f92cab17c287d4b5db8455a83083336de460de7b013b2c809f3cd520d2882db3cb947add1500b0e47405a665fb940ccecc681cc1b83c9361b756d3d0bb7f0df12a2d7f9ade94bae32e8eb05524d3f8bfebc6ba8cfb2f9e687937663ee9358bf0a3539b75c39000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094daafa28a2ca7813ee68bab8ee40fd0bfe30926c25aed59b1186c52769aed2b17da7f4cfc6464c3c9a37435083039c18403c52672554d290a4a938df22a74a912e546a36c6d3b0c097f2cd18686afaee01b9c6b0f6fe93207f97fd36c81b0256dd941e32cb3b6715b6cfdb7ce8f1c854ab286bb3f454cac35faf2e3bd5a0f0aebecea1d287463ad4631f45e6af4691bc87a7001c8f767474e1f8287b6689e2b63ed23fc46bba4aa769d714eed4fcfe4cd78cdeef12c02ab80b2e0914cf321f6b851ece756e92905e01d4538e389046eca66262a06e3898c3eaab9fd880889cf3be28465f8206129eb692e7cf59ee53df26f97932bac43eb8ebffd99f371e8fcca7e36dcea80257f72a24cc7d91e0f9bfb7e12246db029dde63d6a918000e368b3b8cb1c7af88f9506e6a9db98acd0ce64e78263ca6c8d88ea69342b2e482f5476a24099cbfa77d18299ab0f6dfcdf1928e56ca031514d7c79c756766aeb262daa59d94a65200b5966bcdefd9894b0549075a5477d1faa466f45c66532cbe083bd3ffa3b9554018cfd109af40f07724985b983fec89e231242989eeba2516aa0d219224d5a10d4e03fedb4d161fa77a27deb918e587734dc0c93084ae7c95df100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000853bda57ba91238d74cf436023664eed1cce588745a6c0cc4b6f0a02e9bf3de94d253840a4925923ca59e7f33b0450e047fa59271fa19fa88fffdafb5b425cf800db034b2d6fdcf3177140ae7f6862636bdc29247e9190683d4fb8a7272139bde3d3c618849612a80026d837890540cc53898b200c4f6a15bc1b8fbf2dd2bd5e8d133646be82f62ccf33cf37893a195b2a204839b34f126752eaa183b6a7e582fdb175ec30adda66bc0f41ce0172ce256de7daf6004977e2db2cb54b7187cbbe2e69e63813452d133658c544e45cdda29c2ed06fe49b6d7ae6baedc85562857fa2ccb64c3c038bdd37b5e414df8bfd1e645a62c91c9d1dc8e3f1674f5b4b2556006597fa55c92cc18d04328522edaf7f722cb28ad7b78d9bcf3784110ff50239e7cba07fa345245bb18917bb8eecb5bc22632ecff89990efdacba173d3bca1db9d19abcab9f0233114ea15dbc939f1691cdde8ea4feeb16669c39971d6de15c83193c61ac7d34599e21cc28d8a261cf52cdb0e0d69d5111ec16cef4aae124ad408f9ef97d51afa10e0f74c70453d3d9476f8e2b6fc95ab35cce97aaa103e51f11ad075db4edab944849149cf35820ea2f3a945cd5f199dca17a27f9ba5029e700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cf9a983b5188509bea93bf757ad5ab03446a058f57100b5c5267bddc9d3ecd3f37ab1572e12a727a7528ba81ad16f87e9f6cc19704e208c4a5c45c6edd8c50f80dd4db69fa37846bebe5c76780525bc5e07065e8a5ce572a586ba2969295fd3b52a24935705a29f28238275b54373d72307fa369bb9e601c3e904b8faa547b453b1231487f05ce633ea4139b6f9d6d01009896a6865f13b1911f06e029ee1e1a4bd9e9b2ad1fff5fd203e654f4baad9a13ee69d6275547adbed0db5245fc1df904e3ddf290f4e778b0558f9eff3b87e24e511274b48cfaaf63e2f815d7dfa3a08b83efe322e6b912445fc12a98a71cb5b5578ab84730427a2f40d05a4d10a6b0c0febc6f63300cfc21f7b3561c1e1eeed646224dcb42e0d7c9b33c85cf17bfc8e9a4e6d2064edef02ca948dfc8a3963840ec3b76b919d3167a8c667d4b3e60182944cbcbf317840a4987c6c3ee40584984c8e1903abdb24f4390464a3d92b4abad3a25857d2247d4efb8d846b08078567efeb09c754d051fb4f9dc88daf25548542c00d9af6fdd22533629a870edab1554832de6eb8f0719e2cdda42ff44c6bc1a7457b3fbd11b5acf5a20578b0d50396d1f48a4e527dbfa5221f30a0c6d5f800000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484014bcf18b4af3183da90ee11170076af5d11f42381ae9ac69f085e5d8944b90322f7862cd9dbb0c094846ff65942105109065020c7d7deabf18e7f81c80cd569e2e51aeff9b658e3ee32d3a58acbe7751407dd19a7f01ae926162a9b42b8cd0d71d2986a7b5e3846cbb48ed4784a6b3eac41ca98af949bcfe93a543d33e33649b1b0f1a4d7ab426787ea8d6b125fae1a894301ce412599a281c4223156359114c13a10a23eb86c566d14366381b5f7be63da307287d89859b934ffcd31fbc336f23e3832b1277af7999dab00da9794cb45a6d727b19162bfb97251522587e67c0036a05b2b9e6484bc7f14027b1ad6ce2610b7295ec0675d71c1aa51c135448c312ac3a2d4157bd26a8fe0b81ffb5d367f4250fddede4812c36bb7c5ddf3cb85d132458af02f39927a6cdd6caf702b243b3732c3bb92e23a5e679ddb09e122b581a9115c12efe586cf6617cba3f9311d8b4ec33116bdf5748c4baeb86fff69179198fefe2d2d2c0c525d9907827ccf4b6937e8df6e95e4816816b16f7f7bf1b9d0b67b9f9ac098c96899e3459f20e397d3e154cd06a0a3338b67f17020cc7fcb91da8a81e7e09f3c47c2cddcb19a19070cccc71f9f3bee0860c1541e77426600a246c409724d4f23714b804dcb603837295e215b6e6cab4b9016b53cc40cd8dc22426280c1b609c38da4b0efe4f28542e6c640da4c0e63f8b99c31cce85809f5302c967d17f396a4d39637ec4e8c95abbdf5a446b5e25b384543ecff92c6655fb11ef44f8b918539418c9d9d39a9ba1ca236105b0a505a7e497860386b10b01c5104852f893cb8fb012666d97c636e75d4de20f574acf48a4d1dfcccad356b668055110db98253aea278719eb23c04928fb4eaa62ebfc7ffee3d00fc8ce48250916211c6f6b651dcbb8c167957b2cb5cf13852d1c4f1debcd27db953580f63698111d410c67a631985e68be639f7e84284dfd68cd8187aeb175550a357da6ddb8299adb13e191ab913f45cee7abdb28becc41f795dc64d8ee973d29dad131883c16fc857ffd5586db74b21ad9eea30397add46f0d97d4d70c698df607ff5c97a80eab193ba3ba9965f207b1f539eaf5c9c472913e631abc86d297baa5450526f326291ac01b95d4328693071a2721957537688b870d557b808cc8b99e962bef6b2b47caa6f02c66cfa5fcfd5d0d8696db3d1a3bd5147bd59e5ef1702cb04908be1104586be6796218d9c696c13ddd22173626da38291ab5dfb98ce1c381bf5d001e4163e450f8788c589b92abed172d96ad3d8946ac8a069ce3f08d2e5c86587d2d8864faa552fa48ff1c3b2051bd7d87a5866c2ad71c3a470c8f2ee3e02c3c3728ff6c41d1d5fc79c2051b449b33c6489b8594fa98add0c7827313b4974948580e83de0f31bef3f597c59b2387a23caeb971c3bba713dda8845b524fd04647560d205f82e696a069fa39a49d4a79c65fc9ea91433af96f8c7f9e165d27a403cf2eb79d42fe09807b7097be918f9b0f79b10138c9beee815ab8f0125cd345b06709d77e477316e92d89b5ea22765479fcf9afcdd254b8aeb5ae65aca209f0598b137ab613abebaaaabf2eed84c7cbbe3a65720e72f6ec7689ca20abdd1400fae721098e7d19c4b80e4a21ada4db3fe40fb1655d985a21de71c528b3f0f4f3075c29f1f03d25cfaf3e98aab10282f5ee4ff7a41c3fec1e96f9f54077c605eabe0828c4619e4150f2ee804111e6f47221e9ecaf92097067f54aeab2fc7f627af2631a1be639ce8c1b032748bebd2b915d9a52c77b3f6896a8f3b4d4f18f54acb132249534453c324bc93f7f4fd809b27c142fcef3f2600fc32d589051d2835b00b60cacb78d879d60564f49c6d468d1ff676c1ea8cc0c9eda7f77eca47828ce6cb122488eb8ace93c033ff683ab4f4adf2f9f8858a4644acf54f15f35dcd1757ab004c3266117b58af8358d13c0fab3d64acda74124f676f7bb25e5e21fa61c013b29dc58d39fe76bb61d7782f953cbcade145b5665a36b8d469dfe831f7f2ee6a12f5e79a1ff58abe2ac4fb1e3ba8a87c18b5a4fcdc3e10a85835fed21561645771af4996bc350289739d1506ccd269d135263e0da5ce773c559eb91f3bb58be2006df4650bef3e99ad12893b1b67d2d18ba1aea9a6d85de93a3585143e74b860016b14049a86abd24ba9a63579c04415d0d034248a7f93b3c2325f9c2ad9ba1c821a73b2557e3f024ad5555b8bcbf8b1fddc694e4c13055b8632aa13e04b040021fa2248de0225cf407a843c28e4f1d5ed505a62b38b11e7af1eac12f18a4852117f181536807fdad4fd63360e9b96dd521cbe4b5400684d18a21a6c7cc5c2b5e02cc5e6f1ff02bc744782a888a28edaada8d769e9e48172d3351ed12413481d22f25c919e882dbbaeec1395d119e180aa07cf16ff09fed6d873733698fb3a0aa14e1b36f9e4e9b8f8278b8eb5ae7d54cf8fbd12eb989f4df1bd802ddc5b526f70982d11b57f9b78712e843a6680476fff2ddc8fc0eadf8d5893126adec7a317b186b15f6317e6f9df5c027664e01a651501101f742b29c1f14821f905336a245078287ae33cf1f0d35477dccec2c54527e1dd5d2a2066422a5e4a8c7016342032287b95d15a66ab140c0087464d4aafa245b44d2584da3ccbd72857046605dac1455ef02eadc0d5812d7d45293a15b53820bc8b4f3e5690673d29acdb03bf83409eb3785aeee403f0b942975c32d6b5f42a3afbac6c86dec9c78144e79dcfe7e28912fb7d305f70effab58a0b617293f90c9feb2897ee84019114d3d3092aaee123ec39317e4ab68a386206532b0cd177eaaebb1d158e1520e0b5ab34b7e025911dbbeaa7d117085860b86c7cb23e3130fe99ebaf7281da216758d76f50aea4d402ac8e1a7f2f769865cfe8f99dbe45cf475982b045aff16c50e47d65d335dee0b2c4bb79123daa44049d8a60307a4270956387b19b7820eb2757118a0a4802d4c300c05b23910e4cf961a639d1d1c619fdbda684eeaa24b1273fc2830579bb89817d30c33288ab40215a0ba0feaf0c39bf1f8e066c4c33ab17156f7eceb917fb624c4794dc2bfc1dd92efb2fc85e8aaa49d69530a70dc83e0d0422290ad321ec924d9f3413df08792d55914a261d912b5d35f6dfc40dda8154b796b3d7364beb11a84f2b99d4dccc6f74c671a335ebc9563fac9953925ad4639e20b59c9ce529d0c9f02a716f46e69f484ccdcd3dbc6fda08e5dfeabd3cad429b2f34dd5fb4c672d67be787c556308ffbf348a2bc65eb7e6df11615844ecff24ebc563d548df511f419905c2cdf7faf928e9ba678ead23d170c094244238c404debd74b4c9602e06d30db61128e87e9d138a44615a2b14fb574ea232dc0279cf5baa13e1ba157711a9cf546e32addc501192cad4214c75ed348d6f6abf8fb261d3b2a0d625874e2ee7e226f797cca853b58a838721ac70554c414d28f2a0f1e077312ebf0c5e910fb8fddf90b52b58e8e1007ec5752861e891e5f5960e7c5e42cfb00c9aacd1dc1eadd99420908680c9849a61c9b0fe4ae18f0ec076a69d51c7c538de31a6b18d21156683aa7611ec39288089e0741412e60db593e37ef72f3c53d0283f8c51d62bf0c088b7af29ee92c5aee214252eb7e9970eec9995048f3201511307737e1e00e64a5a157c2858c48ab37d4e40dde0250c4dc25f9bc486c0aad0f9d78948370cb98bb19885c7857949bff0edc9f48a825bb1e461ff77be9cf3e715db9c46fb296f2f24c4e63f600ad8cc47beec920b67d880c412e6e0fdae993b2950dd27cc0064defec9bd72e6ad786dd59e34181c62d90816d6931658091d33be1ed319291fac730bd488ba878ae001d1bd0c770127db6f5568f1b265ab8befedceb2da8302388670d87cfaa7ad9419f8c51d285c7a0f3f8b15dd8fa51598930a07cb93011fffb601f2c5a283593cbf7edfbf350a9ad5882ff64a07f08f56d04d855f46980511e0787c51a9e5e5e596a5d3e9ac6cde9eca3775959509e2e82ef1d38d1cf32293ae5b0e88000b9e4df0fdb039e0c98834c5d485ecd2ab44554e65e9bc442120b2ebdad84b80027f79e538e1bc048f43bba4436a4aa3d0142509105d48a426200dbb824488fde163861968ca0cd402dcdf9d95d62a975f9a29854792c93bff2b9b08f0af86e7828ca7d3140f8b8771fd6ca62c7dced9dfd64467e2b7ebccbe272872394164659353edd57b12f2adad162218729171b8f2b48fe99b58f7d2c3228d07c872574baba792e00cf62eddfd9926194fc43bfaef0da2ce58e8878b1b09bf98b30ba3e90ec8d172bd909c9011f1ffa7158f68c696351011f74b3ccf86027ca776a39c1c84e8a80478212d3594b3ea79f5c12a83a209caedcf7c5c5d5b0d53bb2dd657e245d5dc37a615e4be4c596c7c1f0c49de47159580c59a7c7c522262995f275bc8e0d4ca5a7b6f486238e7dfe4fb94b8571624efa18bdcf6aaf1167934a32bd53ecfc4eecb17694348e1d482e6f0a964254bba715e5be2a9fff41c939cbdd65993f93cd8f0496e248618437a539f28fa8d6b9f8fc4d9e7f76e050c215f40e08bf5d99cd8b93922515e7df561b22ad6a25f5cc687362b20725dcc069e2e1bc7aaadc00b999e064e2762ed2d81fe690d18696d25b7eb8c428c3e7006a72d4ad131fb4854bee000a160fa29f770933452b7834924851ad2acc12c110b643941ae6400bd1e87e01fcfd56171e1ab826b177ee27fb447007ab575faf614fd95bc97764ec8f7397c15aa4db90f7891655bdcf4388516ad6ea533cb71a70b9381a2c253df50119acde794ce5bef97ae257c0311edd973975f5e149d929b009c8969f56c20713c9d99c4f26c58339ab8c73a371ec51b63d1f8f620be2a662cce9fc4a3b15b5e42ebf1edb00e6dbc5ebd75a4306bbfc3c281e9e29911d04b03bd7a43194c87334a1ad421801bd12dc8b65fad5860e859a28a1fe5ddf711561f1a35f77b1d86c445ae736706f5d32e538ac14f30d2041eb0c59dd6d8ad4a890ea248d466cd942aaef7263dadca1f91be48f4ad27d2b5bdc9bf5ad3c0adb6271d22217254d473c478333b366b3357068f268c2cd48ded344aa09bbb40b8fad6295f617dff1d8199b164c802444613dab0b276d3c2176a24e2988de5583032ef179fc8d4548e9e79aa39958f736faa30f89ec89b80588a19acb64b5f4fee32ed09f7cc8101b3b4e6f47638f3c538fb1f7c7f7bbb0897c77888db18b095c34b481807c67c3bfb8d0adb6a4d594734fcbd90216c7b24bc111b358576a6c25c9e2523103af21bc0c904855371af83dc1dd8200b0647cef3c17e1a7b465d4383931a2208f9b87972af3804b064de447c602cb22725b806463deffd7f14a8211818ab14a4f6f1fb44b521df5082f25eefeb2f85e57ea54a8ccbda3c8fa29c7b9a777c27d9c8c9ef92f7477b3d7d8b85cb0bbea8f1bbc866fe51c2c769377e01d75a430260a72c4851a23a7dc475b032648261ad866780c64c86cfec47a7f5a6be29942501ff3f6d925849f671fa07744fbec9447aa7d20a81cbb80a99e832c7db4ef607a8c9208d90bea31259c44b3ce1d054fa7a7f7b22c6fb98c02ee00214a6d53111c7ba326646ac04d26a32a8ff9d992364db8abc01d8c595431a968078b91f08294fdfe4ae1b30948c497ad2c897e4a9b3dd5449b14a2d2775a48ddf5c9153f5154dd9eb52ff1abb79a17f7b3202cac0d63aa82bd850cb83b1568f1170f8617e15c09e726c5c3a0d11c92c10dc03e31d67f541f5dc09b91d7597289d1f3cdcc2003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000004f118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000004f0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000004f0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000004f0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000004f29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000004f141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000004f25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000004f12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000004f2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000004f189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000004f1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000004f05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000004f05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000004f14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000004f03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000004f2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000004f1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000004f1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000004f14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000004f2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000004f305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000004f280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000004f223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000004f17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000004f08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000004f2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000004f0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000004f0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000004f172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000004f0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000004f05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000004f137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000004f2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000004f2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000004f2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000004f18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000004f0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000004f204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000004f0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000004f1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000004f28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000004f1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000004f21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000004f0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000004f0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000004f107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000004f2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000004f09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000004f24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000004f03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000004f1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000004f205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000004f25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000004f283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000004f21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000004f094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000004f0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000004f1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000004f2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000004f1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000004f1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000004f304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000004f000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f412fe5cd592a50a3fb97f2c1012cd6784fc462becc7b25228ee304f0eab8cac18c5797980831739662ce453b1b25c5282941b52768345731e1461037901bc7323a804c4913bf617af792d5c3875e2366958bc6de26fdb7d79f65c1a4e223c06a35da5fa2af4e486a5c0001a5fd4874d1de492ddf10be9789cc8ba05ffd0bc80620615bc5e09d425e5d0b6ec54af4776c49a3560dde92a9796e8f4c93d129d35d02ea5138f373c6c512df0beff0117b12c289a8da9bf6b00204267468bf4ffb835fecd6aec505c0935f2251acd8f639b8f845739d4f342299d63d880c1d9ef13155b42b4ffa5f195eaddb57ceaa0aa3b634dd71d086c795ddd712452bdde5480dc5d22daf438dc5868434f0979bef12e1291bb03d151695b61bfc34b94fd65ad5f7617d047cc46b3c6617631dbe7def995a7c09a8fb81ab6710ef11191ddd295832a9b71f11daf735a7fbabb9f16a19f68a4c9b6e130db1ff133d6fef7f1c8a8bbbd728fd8a99135a1de2597a5e7cae08e3b9f0dfef4a07cebcfea3f19f4a0cfeddb2a2e30b85e5b9e446d1bec548273d197d58762886cac81006ae5e365e6deaf48bb917da10680c9b4a7f83d672c628aecd132ffff9fc28617f60a8770faf00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000df45a20f11668c4794869da25d48b7e8b8eb4c591cd8e83e1030b4eacff76caf1bcb39f6892e76fc30977b4ac9cb741b3241a2369ed11a11eaa7ccd8fb1a097f37d7df2d724a099f2f8f80469da0b5379338166324f540b2781d51965cf21a42ead7f1d1ef4f99ebb2bec759228a16752289727ecd0f5be37af3c16ef7b9e48988ccc878fa79690ff5e98c1c4d669410648a65cc9699b23c19691ccd07b170c66956e6cedc4bc299848de9da240183081598180f6d4aa3d3330fe5998855cc88b9c15cfa39dfa7e6f885470f5d22c2f93a6d1357f9ceecc50e3c28e3adf0edf1b927bd6a6149d5703e86eb5b7572f9350da6d19eb2cc8a268eab68ff422ded070dd2f99f7ffdda46067bdf41bff54b3179a2307ee2ca1bd2bfb44913c70bf983cf1d45f0d0c208df31c5926ee6c34854511d508b1c1024644d0f6de9b7d2e4b5082fb62cf79c511b67668a9a1e75fb87f99026f5b960f2e7036ea97b80a078936ae18860474ec8c42564d26c1dda22468129290ce97b211e67dc73066510235d00334d3cc011f303f67c73aca07146a92adc5865a3e35ab82b95e8bce7912ee8abd570ce9cc40d69357b1f4073de3249467a16293b1bd3e94e25f643589f845000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025f2c78f0f423c014a81930582673f69dd66793b104496c58b01eaeaea69bf5225dafe84713cf0c5ab9ac7d2b3145e37edde9297ad40d0e6241fe2cdfd9a08403f58eae956ec3bbc10111a60cbc39e67b999dd75617c70c93a5f0c661dca7adbdd54033429d38a8297bbb48f044247b0ec65ad34990efe9fe407171af246088d3cbaccbb0431a6ce822a7323a0d6dcfde364580091ebacb0bc1e00a1339f9641c6253fe4460b6c267e138c4fa80ed11478b104acf36d106284e0d486000670e80ea90ca53b0bd17f0ecac6b23f57bd7ad8a61836b781ddc6674d244061cb58706d8a7149be569184ceed30376c666648dd60e7a2eb98b6906116bbde114d4de8d054a07df1f7ffb0afe976f61e009455d7a288f9aaedad35110fb5528c5c6a3d2be1efe6e30740d8f1077b38a628b9b43dd8a0fd5574a4222474fbac3881f989453fe87b8ac149166388450bcab27ee6ca65d22188a2c3f9048149f1f76a01cff98384f8a6dd937cb07d25f0e072418cb85c6f21dbe9d5036ab066ae08bcdd7e6de0090dd6e0261caf4282a3a32353774bdda0d04836c6d9370073dda176bee7cac8ca1426b1016da26bbd883ff386f9cce647492ab0a950082a7a08ddce973d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a56a6d366ee48fd686ae3fd272300aa7958f2872b2abdff0b813f0a39cd9fb8f8a4b851e9fe163149cb435c762125d749e45c2057a5a36260d5da10fec01e47dd80c036e86fc79724ef1a3ccdc8856c802744a9d2f4e0d949c3e9c5872d185cd5b7cdba81b91c6a1dd65328addc8d6a3210ea2142a6297f92dd5756322055dad5c26be7f34e1a5d89c9291be3d0b59466f53742d871245573c99701303969d3d00a08921583e60c080b94c78a39ab1ffc187b13336fab3c438a447752d050627e938b38c33ed5ce3e9ac6a6dff3371e95fcd2eeeda198494fa76b7c47dc77ba8c263a89a43f75c1a7995f6bd160b0b14c55b654d6d07e8ee4f704e99e2f7ee70d00cf9edfcf10c38badff2ff92c00712487a94c3d1b689946f25dc551aa5eb0bced55029addcf3679be937c26e1e7069d61fd87909eb17ad58d51019bdb0461c81852c4c5043fc998101c6c22e6e79c2ea780900c49a2970005f63b46569b9015be9dbf7d8f658f7a13818233f43bf79583a4ff9f7f7f5992e5516cd1f2640e6a7039f79102a2ad7791f1562aacb2dc1b8b0c2ff80461f64d2239f79aeb84a2ca7647e83f7f085b43e5b9bf4b1fbc926fc19548dfef80aece256146b5f9e1c8b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009409b59bce2a16a9cab52b2e639f51572c5a9b3e7660d737380ac9fe6311643dcb2fd6fd83d8b6ad3fd2a5b80b78a90e3e0e5cc47eddf4815ea84eeebcdff2fe6c2a5d5cd2c09eb68b8a87df269bfd4225935f1b7029ae4b0d270eb60bb6ca5532a54207db2d1f5c0e96f1b8593189c1f5cf360032b5101879ccc060e2f088f9441dc22df3b535fea1db56d42e3837c818d53e2358cdea298ca12fa43ed245f36b0b297bc4ee076c0f1a5445aef8b0b1833a1ee52ef8af38edc76e19d4b34a0c119920f0514627edd39a0cbd10c4f08204aa1232be5847676236bb4f2a03a303924027c78bd52cb235cc334885f23678243ac79ec5293c26912c0fe796a850a89149057de57f7d39d401511d5d3f2bd55d28a41373039dd771dcf79d212af43d9756b0b7cd215455763978cab32b6388a01c26dc3b79d9330d3a10664562437592f59af5ea14e1562531db01322f1fddd775bdaa675f31e1dbbb69af0464cb55ecde91bade20ab64d7a50370befbbcf567cfdf458992ae890105ae9074c0977cb288f3109fa86c9401c1e0358c6607621e5db2c591209da07a4d1ca755c6a4b490ec69acc731c556fdf1af7ab6d5eb3af96a274f934d315fa36fe4d205bd542500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d1c197bee45070c512570741df94587d8e27650dd3f2af0e3a8898a57b6030c53cc43e7cf485374821a518ada0203320b8459f104b8a93cd58f0d64f2da0aa1bc4a2d4aa21db5cf298e84307f656d98d43c779f6385a54fe35e51483f505a459ab80b8760267c6c2fab6fc5a39fb71472a69d2668e254d6b53f81157f15825e17ed10fcfa2cf8b44b327529bbceb097c77899e54e71e19f39f5a9c65371ae7382ca9c9a06e39445a05777b0253b01ad95d4756c094f0ef6e31fb3193e2c215c5e359263b5036e2724b7667feca25d1efffe61726114bb6a785c4e490ee9d37683bbde27e017fdca3a79ca547cd201e745cf19f6d04c7600061f1acd55e5d9c2e25f5dfc547d9c2772728eb1d5b260207e468d01b3bef4b4721a697616aa33ec8658578ea4b08c6c857cc16f7dadd177e0a2fdb52228cceadf2acf67ea03394e0dd3926063a1efc840ce6a0b9eba39bace3bb5e177d8d45e6b81be558ec4f75123bf9bbd9ea0f98691c46fa5b48377da76249b79054a7507caa84c30af9139ffb2cc2b9c5215479a3287f04bcd510b347687a284f24404ad90fb9b42fc9de54650781a3cdeaf31730f9eb2c2e0cf7ddaee14fea143ac6348a2a1665c42bfb4010000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000abb2d4c8870a1ac8b25a3b86acdfce6bc1d7fd54a6ebf693aa331ca7aab208df08acfc243007d452a711c7530ba07a8266beec3bc7ee3544c5f1e825f3f43229e6a01ed44e27076bf361a6fddbf658dad2e4da0c009d252fb467c028ce5b3e90746a75a454e26a9389e7e53206d3e35ce315de65a2b143be977d4966dfc3c73044903ed0fb33e487818b63d6505ab6d82f863d2496529d718fb74fc77556a119462b8aa0283ac2907867af3c4e835f381f18b0773b137f06d52c2da6499f4a7d12a6017b1438287179d0503bf7dbd7777247b4e120e85b13e7a8e6606f147588332e6c8544d409bb129173aa87b9f6cbee665603e733180b8cdce976588dc3315f08506406289a5890e65ea1d82473f64cc41d028cae78faf5125e44c74245c04dc6a8727c1cb41e037d4b430cbefa751100c61c696d4daec6c41ee3462127a05b23abe0a01019b3d031309a4e0663a0856861e4d75b4a86f334d64e9e5c1eafcfd3a5f6c6e00ea00537a7bb355838d7d7f8d4b08d1408a6a268d5866698880afc8fce493ef848ed81270bbb79fec249560a762139d443499b48cff969271caea8e22125e8de14f0ea686a20994a43e0bfe92f05e1ac638212425a2609b0560e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021dae6d92819bfec893fb5c7326fd2b2be79c51272972b990e130f2bc6517cf469b10d50589d46f2d6275a5a724624e93300fd61b7dbc5e430ccc29015b62cdee8a17472a86949fe39850d46968db9be7a32af60fcf833beeab352d49c29c6cdaebe5dedcde8e9a455f32b7da413226c467349188d54c6755d587b5a073e8e53db16dbb8abd4dffcd3325645835df07818db480c00db3fb14b6edcd5b0f94c6bf530d7cc7098d79b4880581f2712fdb136a2a5bae94bca5fc11c086765b803515074a9e815ddaadfaf725792ba5219956b95c1ec453796d70bc3a38875f858953d2eadc1396b6bc11c887a6030098ae36926c1a21e0859c66d52f4555241cb70e7422a534cc4ad4f8719e042d2852c60e1d52ea44fe2337ad8e104e2bd5d564debb5af9e1e43c25df2f920493be019244d28bbfd682311d38b77a231c0dc2cb0f8923a1c777c93de0d6035d05a191fb1d36cb89b8bf18252a75247ee43929ef837b4490a41f2557f3edca567f80f1b8c24fbaea7755e02c1ca3fe14c3a7a0c2afee77a876e518476f23f0fd7fd83be50faa703bd683a365389ba77fd71bc2aa0c56e1b1501d05fbc3bf89fb706c5c27e98c8d83781344adc5c5b995f122b90e2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015de6f22d70fa4cc18e6d211c6a148fbe9ca85236b9349a1ea549d06172c7c3a98a75abd6a535de323a5c8b5ed084953fd47da1c71cf94a47a8418217eff8b521b356b69f27053fae07afd0178219aa1a7d58c13df6c50036faf4d71d44176c676a01ac2de437eded99dfc10774449729a14d2b4779d108de916c331ea0eb8968674959955977c2bab3bc31439f2ae5f7530c61faf1f1f01e41ca1d3924d6d3fbb2c925dc740fea08edd8555bd242596a572e6183dc98d7c2cdffa95b2b957a526d0c71659b8be209636c1a3c37e427c4e178c279c9c0f099649faa4c9950b2ff6e81e98891956b1907c55908741541d1f8eaae53000367f3464d6beac9e64f0ed8abb206182b0c30cb881b9b7c8b142d38652bf367ebfd5ec827d316f517cad86339336cfcd81d70e86fedda83bb10200d9dc79105712de03331b3fcd6a5c4af9f1ca4a455c058d5c5a113249cf5923bedb9b4c362d9d3ae8f6044f8c48ed80fa6d32340af96dd60020cb9ce84847c38c29656b19aa9d5787fdab197e84954ca53f061200f8e1c8aa84a762c5338351ff91d300c3060bf15c0a38e5798f8d3320a93569653351630a1fd75bb224927839bdccbbcfdfaa3c5f684804429e3d010000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000229553b42ce5060f00ce3a119382b8dcde9004003b378770f430fbaeb6b48889a7ccc562e8031803d1e50c74e8dd8f4329b76f383dd2b3b6ab18fcab43cb1214cb16b3e899e58c2f21508b1f21522d9ae362fe5254bae573a24e09cc467c4cb73558d908855bcec8fafa0e057bea8841cbecd4ce5ef40cfa4b292a873b77ef01118c16ba6d298d3493a3de4f73c2856e35a42327269e1198f40aaddc44c7a3d6f90ba9e4fd8761aa9b2bc6da8ebe376d52ef3baaeefb4d647613b7de0a05de96197a9c65ebc2722d687be39098c5cb443acf64f6b18d26740f2ff2128df4f94d8559dc861683568eb8fca88614d41c6430ed627b681f7eaf81658d575031d6449aad56ea80c7245fac504ce0d8d622e48f74eb407adc36458480df966a6a7d8f372437dc69025d4a39e367387a4ec3342cbb88593bbcc316147857aa47df5dc1a4505695c38af4fb50c337803785784eb256dfc041576dc364d7d20ac24e682b544e8da447f44c1150cfc7add36054b9d58608eca9267a67791a6e67928de9ee803fff4dd073052153df4b8c0800ef56b2780d22db5a8a6bc78215ab731fc64d76f8367dc70ffa0de681a00215d12a3f2a3a3ed0141f4203ec836179fccf4265000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e7b266c11f2f6bc829e0a439ae115bc383952553ed39aa9529e787489371d604d2025d1e80493422ea3cf9a86386d480184da86a5ac1e5fa390356c59387e23d34bcdf1343722e7dc985164ae6435baad39c4efe63858bc0c58f00620915cb65328b55d31d4c8081c1cc02e462f653704d965b3f5e6d90f1bc73d6b403f139b943e3a93899215a1f13e6384cccb434381a4faab2d58c3e114109c094583dbbef2173478adafc9a51c38852e4f8aeb74ccb552b53bc5f8d34357acc7fd8789e7432b1fc06677e3eec6c84fbbb8e89f5588869dbfeae11297c31eb21f0b8cf3a5a5f07813a3cbbc4e92456c9485742106b6861b9f4ced31c8fb10d9c03b72deb26e09c5a42d00be0be3297afbc3a537d083f2dae78c4345d63941ebeb6e7e833b2197d280fa8ef07eecc591383e2d5b21336a9c3925b43b8eec01e03ca7384e79c26db0e87b0aba5a61821841440e520f3c877f10f6c977bc8fb078b499532bf9167d130ace37d7c2b07893ecb3a008d1a13bd6d00da2fe3c01b53f9b1f852f74e3e1ae60a83fe2616e100cdd8fa45c8f9b631d241393410d238f561f3cfa4725f0549dd40a9282fb1e2db1715c244c081836fe22d73c7612ccbb41814dc6ffb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018854606388904b154f207ad09162701bc1268fa7a99f00ba9c7578ecb07e4e30d4359026e9962663bf231284f8371547b3f8b1e49b23cb1ec2da4d04310062765441d1f48319da8014ceaaadb7656ed0f445e352008010deaac11067bce5932432d3970e8d8af1cf0ee339dfdc543961ca4fd18ef3988fc5a32b6b905045563c8a6a8352f34ca37789f0f80c4235f130045421fee0b5f52b054802e61222b263ebd9d263175b9d494bb1c05af9769bc68cf7fcb052fec235e3dff15ae6aee9b4b2c7d8e7d1af096869c98311ee5002e7611925dd2f9e13454a019804af4a7f7d1dc67b11bc549dd12b20797167d22b8eed856ea2f90394f0b0839b12c4828310b438434fa620eec5817180f833aa74cb6cb3d3d0e109d44aab30a9c22c03e4567c01f5d8d1e1588bca9d0ebadc34197b2db12e0a9aa8b8622b0a91378576bbda8f42d3211801979b6bd1903bd5a845629295c5d902a3ac38fbc3992034132fc683989886c23f04ed7ac1eff2f4600f0cba3c888ed50d1c0615da10ebd14bafbecdf7589ae6b8ce9b02566865a6549d43f1500cfc11d0702bddec91785d2dcd772c45668afa18e75ca8d5bdec01c0e639ce694fbd286c69408bf7b178c9a681f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000232c3e9e6053d32bc4a4f54e7a4745a97349d6fd195f32dec6716109446decca1289855f023f4f4cfe784ec5e783cafe52d461e2f502da7738d01b1c7906f2493196933464f33a9fb969e7da76280d1b891b36826bbcb229b192c95ac5fe2d8c10aa97957532241561f342c8e705371704da84dd91b235596e46014642c06a07605a79def4a7c8cec9f587901456ebba6aca35a72a75b724c9438b40a60a2728c7ece879498ad0562500e90727a0fe5fa85513073208fad9c6724f9bcec0fc21585817ad41a8a9573d29686cb4febe107164e2029abdd0c5aae8ee4e31cb59c1b06b1d5252ab29a11077e8b50ee695a63fae554ebd8205f52df47a27d9ae46e256bc45fd43313ce402901535856abc2edcea087a7d9187a58f958be1ce9e862795fc08e024d07cdc4e6236dde44fdd0fc17b422220d4d61548eb45d6f37cf0a7dccc6dc35ee6050c40debc090a7c1193f245a69770ecbb735980958965ba94b8746d7fa1906e2bea11c965bf71ee19a1bfc5a43b1cd46e8eb4973d5c143b2021d42168ea156822cae06c0971e04f9a6e02859312cc5fbe97708e1fb2b0d83ebc4ba5099a0c5891bf500df7827fdedbafdd5a01a001b56c1360cb93cbe725036f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000957cd645baa47a2d97d2b46085de2eff8a206cc8897a189d440688ad250c942b9c78c904758dad745618c6878696872a4b36dfd78a2ff7257e9270f40b51c9d26774576408bf9ce82d0c89e9e39bb51229d2ed4480471b5a9d9f0893b9e0317d2e7a36da1e60782221244d5060f170a5dcc9923392c22dce7a292e125393c4888fb69142d9f79b8f83ac0588b3c5000f3d3c56c30eed39802f2805be12974eceee56cb33362b9644da438eead0e6ab6d612048714aebe4bac01f1b539a69ecb988337a3a297d8a03a40794bf104a9d6881b0e347178b0e41463c8f2449352d24811d5be19f8536204bc7a8f00f732a43d716ecfbf609f0527ccdf2f463e27695f6b89953ccf15c03548d5755a469bbe74689093af7d40c2e36c4841e988027496c899d447081b6dd988f7c93955f9fbd8c3752a15861f7e2aedf4845e65863698fd7b611e66c2740cb83e6f6555b4add327808026a1708994332041c7253b78921ec870cdc43777de79244bba56dd4c4375682d8964d7f7ae332b647e4c6befd069828ab6cba6b45249106ca851ea4a26e8cb6557c831e1159b987aad0e90099102566eeafb8cfada561ed15dc0a3673b1d5459f2f544fccac041edfd8848d4700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e46285b3b775a48435a2d68ce4203be0ec2790f2f02b7512de21316d4ba9597c8f1e882e323645da01087612ee5ab9d56642eb1766a7bec19c9fc2d877ded433c16a0b49ec3aca09b3954a32216e934949c816012b6237a7cd28356f520988f6079bc133363b510797ca471b061ba39424c89073a9c2f500e280a818b7876f52979af02e69b813a0b072bad09f6986f8bb597b2c8a5d69529caea715664f8ad47c304343eb146227460786672d15f7a13ca90e142e7472ff793a46731c4bd71b93774928efe6a1e606914152ccf930cbd4ac6016b253484dde55b1bd44fb71c4c07b5077fa1efe857206072335b8903e45c6d572fd8d00d942219b8f5544c507cc74fcd7f366db62a98f8a98f50fc93d747c508bb38483c83314630b1f018be0e0e8ffd38e63cd010aa623da30a3eab820bb2afd66cd25b6a135ba78ce817bbad97a7925c62f9381bdf46c91e7267606bd1fbba8ca49510e8fdda2b267c3a69723affc1a253cc1373f386f9264940f903489c1cb52922642450a4e9dd064bf19c3a3b84d369db475c289f0394138272dacb81c175aa719f6019e329cdf99e0198467ca179bc43582c8b08a51ac9597839011867a5369eceac3b2c2b434536b9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c0b7a2270c961a9ada895ae5a7d99eab4a3c6b0049f2c3e95bb593ce27c56587c8931def8514cc89783c7aa11ba1b5eb58f2ecc714a2e71e75a5482326f75140c70ec5d700921329f041503b100c8ac85f7f51faa56581b2d22bed661a6e3fd6812f5ff766d1cb08b52eac55d76076b30cbba441d580016339a8f30f3249eccef7de75a78fde065346c3b3853be0eedec66c88f004893393f424cd128468c33e3d18b7de1b2b3ec130f486af2004ca309a47adfdcf85c92b381f38cf38039ddf107c4cc5a0be359d04b0a267da677a6a45eb8ba0d873e1ea2357231966427da84cf91f66ef75d9bf2c30688337e5b912d03427386652e022ab5f6ec32063c4a93001eb56b4a527cc7b4d84b3c3d12a6e2ea1cfdb788acd17e68e9b09269b9c8153f057b907b131e553269041adea622cfb060fe7c10db0d1817f3693ec2bf225e9279395c31fc405fe07f7d4c6d917a14a451da43ad178d0449504e3b1f10231446f048870f67d7b682f7d73b0db38945b35287d124ab4205e4386aadf2d90e7a705089937e099e3e39ba1506d522fff9033edad5356f5eea302c39186b5a9987c803e504b902b7c54416384ebc42adb226564f7145428d259840af07a6be9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012034fa9d6109a913ab632f5b747d9d2987c1b9bc83da70d2213fb4249320f186313270bdfa1a41d3c1d59727b625a34fc711e939c1e3d649f261d9f83eabe681f619b0039344a1f5203030a5d61a41ad154dd0474e39a7078fdcfe059978f21ec3270ac851e1a3437490d9d05119a4740713d8c955047cdd56bad4a8788dc4c3b3c30a4de3c82bf95ca64fdeaa5f7750fe7604b5acc687aaff70f34d4fe95b2472156588900724d2daf37a2a33e0a5a4462548c6d56413663ec16dee17af75c69bd2b83d0c7621340410d93deb1008f9d3590a209cee6231105e4c8d21c077bbde79e3c5bbc963ce96020cf589dc1961e3c2559546dcc2ee8daf8dc4f38231262610e688e0af80db509cfc8017e2a04310f88f20ab8162ae6b64ce56d78affc0c4c3a503474b033d06f8cf8505d895f742a9643e75add4d9adf89103f5ad2b4ecbb76f465e44e1cd3ba3dbebbdf079f6435b57c7b94e0c1a9902b07e234f874c0076f5a0cc0bd6a97b78415ae11950ae9d03e0a40cf6b513cd0046564796a91690a8e82d56fd5766da8eac4c8a2d7fbd3abce5c75ba5683765818449bee446339a117b7ac4f8fb8bc92fbd5ce3a76b322e5941a9d8ac9fc6244c70c6ef1b69700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e1aa4aed83f9c98591d7f9e2ad92618e75bf3bd16248859c25863ac52fbc8e9553f295b18cfd67cd817206a6a609027ee7e7a20a191e17f245498c767c6ae1aa1e67455a3857df792cbea73be77cb02e382c3d670f74d09e0a60664076a251a11ece02d37a3f4ca24b0468095bcc86a976ec82fc662854c7f9f52b872371a2fa50498319e19744820a5969d25adc38a4de02850eb66d120ac3a8db3d497f068035e86a9df289daec7df882935048711f5c80bda3763047625258d72eb819229da77a4e99a4ab8de5e7080de7ab0a4c7b475e1bf63627c81e45d9659c8cb45557752b6f99794ef5f7b0c28d258f803bfd4a1f8dfa623c0bae304c5fe607ab6a347b335038a96bfb367865c898da92be29526316fa4f7800053387cf111e025d23a843ab820f325f788e34f4abab4c0429b544590409995c8a26180dabf213c8550c0af97544df776628215d2137bc55fac820f8d5654f12158e1e09980ea5fbcdf80e8dea373e5ef541e8ec0ae149364d6b5b1016ff6a52a94f10931b66586b1187b13e3cba9581beec0d7e2dd2b481e711a4fadcaba1dcb3a3fb70892cfea10d1f9632d31af3f14a413a0f8d3566b3410973a0d8d058478705425d42c8ff062000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023a6e0e0d9fb027760867cb980b2bc77ca8c5f7265be3d9c5a4be32d955005fe6ddfb5d18c3f108df5d4dc1ce59621a742de17bb81dbede39d321249a6190d15425a3f8a2652740d586d0985d430ff2b3d7b6b40d03d37478a2a8f8aa336b6a5df35b9256913c623dd147c62de544fdaa865f7ef2947a9136b5a1349451f22f848111ade21ac3ac193fdb8bcd71ed5dfa008c3ee3bf97a4bd5fe1b7c0ea15c153bb3197ab4e08c277a31927cd7558ed3db3bf3ab3f08f4254436391b43a3c860b0f3fbb66b3d6046d93038e93becffd2a03783764090d80d4e420c70358b165dd541a70dc7e60ae0804d3d8a5ae068f573c24acc55c2718a2813ad9481c9cc9231c0409b05c3c0541abcd51a14dd6d3bfeede114f93bb2ee6bf07b41f504f4c962348c37c7fcd302065dbfa8ce79cce88f1f22392441000a188aed3ef099f8715c4751f158b7af93f1f159ff9bf7162ae9bc899f12cdbbf3de06e92dd30ea0f2b72b20090ce35d83d98e5432b13d6767585a855f858e26981b17165b69243c1c5afc923ff3f74eaed31275675de32be1a766d10836adc8139ee7909e453c6ae274614130bda6c8996891b6674ce002e33180e42b1991b6c55b59240c67f7d80b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009242b1d086e26e2d5834f1a338636cee98e39f55c197421445aed5a48027d46f90f03742b4f17cbd68bbc2aab2cd7ac771de56c6e8135c0194baac01a289988fd762296cf4bed4f75c482467e6de8134ff80d44be54efc47a8998159b6ef77068dd3b879e9489d312d1d608af63b796d34b2d6613ec76d5043b272cf496fed5c9b58ff4ea3a0a1e606ee8a60ba3a7b640fa898a77ee3bed4305d4a32d1bcf60ea654240d94adf2793d4443a77e1d051a016c08fb540e0fb954141504976b37e8410473eb56a2d49260d792bf409c4e6ffb2174dadd8d576643711665d1c56d60168463b5706e88f57147cd3b0e87a1d5d612a060186cfc2353f3fd3e9f177b1d14a24d9672023916a504fcd4763b5cf41d85187fb5694ce36456d7934c39597312271ef94e8266ccfb4da45032fe0fd8bf7d2ae290fe217ae0f618625027d946088dc320086438e435467f09a3f9e258a27f85597908f4637e7792a03e26ff596f215671cd0939a2a34b4bf72d7200e706814501ac1cf6cf65a483efe34844000450351b8a985f04b18a223589f66b5dd7abb5e663f889460a3378133bad5c9c5d06f81cbcce6b2cb16bb9110c1d494afb5e04563b04fdc991a77a5afce6183f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000299d9e4e7853affe6e47fe9f249884fa36ac6f5bafc1ba4e938b562dae9eb469bedd5dff05e878da2bca70a880f75e8e2bde46a598d0d38ced01e70d6b4a4ab27185326507a7f9d24e665303d83f532064d867fb1eaa5d3291c5cff523478544f58c4566d7a452a98330e7c618a0708829ee20a9be432cbbf6e2171cd31267d5ccf8163e80e91b777859897468d048b5c6848ee0f604cd3e8f05920fe78ef9c1739d2ebcf7c4ccb4b1106dcd521b4d983e674ce2cb9983d51f5fff4f919ae8f2e5d26df5ba42bcd1e63fed54966ea550a80b46b3d80703dcdd447ca0205229c2a4eabff9fca94b160f06adb8aaa71c1dc0ea9a058738eb5c52b4ed74725e9c3c446dbfaaa0ad50bbcb40fbd9297bc59a849b3d8d18f52f278483a4981c594f6066b7f0bb5a1680f836db8c38d10fca730ebf6aff61fa1890bb47133d13f055bef6eda10b0138185ba9134052b6487dfec665c3ea670b7c31e9dd328e53dd2a3397d47fd61397c91088b3bd4af6557c0b7b5713f5e25b0088f9ac17c8ce4c6871c533396b8c0ff75c652a1a181e4e9c5ed8183f05e75ab1227a1957606e82d68abd564490572e97a041eabd067ed131c301bdd44cc3f6766e5588b56f5e639d1d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090e2e33e391904b040eb2d007d22e2d5a08d9d45cd4f330c77a681c50884dbf1085a65974f9b9119d7fde9ce00f9bf623f6dae5cd991b0738605fff635337cab11b4e70969fcf498c2f44a35ffafb96698cd5df9af29c9e2cf496b77efb7a3147aa54012ebf459e931ab61f371d51ea1ea1ef17cfb49fd2f0cd479e741d3c0c5bda30f826225516c2d16ca3f8613effe03d15090b2199b804a341fba0fb971a36e7a6f083a84a88701a7cfd0625082c4db46f8557aff35b4b8eb4b7338740dea5cc53befb2b32b88e1bef51f2a1e64338e61f6d266b46f1c030038ac2e62482f59f33048244b631cd1a84d1cc47eec1db0dd13dda906922cf80dc557105a01140e4c89e50db65f85fd7e9765c42234802ad632bde3d85ebdded96ac85ff83ca34a6fdc93cd6ce7c5afadda59f3f9b244661f041213ea81a922731f608122f4bde691bdc99348374788b0dbbaea2d72d48b4aa1e670ef34139cbf03fde72f8fdb14f2c0944acdd11ee125420230adacc1206d9b60ffea60f88f25af0f0d4a1e7f2fe411dbb4eb72a8169ad7318dcc35dbe08c4a27393e23eec6fc30de9c81659aa346b13fe94c77d8a4d1a2295276b80161ece92d4bb840d290f8f6e106eedd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a62b36df3f754921c31def5af68e95f5956a0f9bc13d136138ad62332b7d6ce2772a3280dc4117274d145972e079a078e5881db2b6db84a66cc17baa45e6182aa3bc3769aa4c9bd165be295b5e014c57d5f7d57abebfdeaf95ba601945d61a15a74a73cefe7fbf29827beb9953bdd0790a238c04d50bc0ceb00d17e6bfa0ae1b263006e2be6fd84d4d61c566a72c6f649f45f3d2914f4162be653d30d9993b7289dc6bbff6696ca22c034ad8f257a0d10ee277f9784b29f911bbb788a309db277aa4860744e2897d32025f3e0a8330b7f57d8677fcb2a81ff9c351978109f8e5fd540b4fdf65812e355e05b1faa7edd2944ce4c2bffde297b0ae631955c158a5e3bed8d57f9ea884bddcabcc2a2f7aa0c3b3ae7ce692db0a95aaa74b11c39c37054abf2b088e23ef15db2a5f83a4116978de4bc873f2438b4b208a1789f486468bd72e474108513c9de7f24c44a9884013b2d927f72e7686af2eeafb50a7c49f2182b52db46c6be88e02a7de70dee3db1e87402d591c0db8092eec338bd894df96aa36460a8df6d14f66b17029911296a4a37fe227d725daf5cb9ceaeab1dff512de1e445f623714d9897bfb6fc03e7b0b98fe3b873ef56f6b017f33f4fa67ea0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916d9caf77a0dafa6ce8976846ed26a45ba807e7a691917c185654fde61a2b7921ddc8a7532dc971fc45e60bb1c03473a16e67a37c1b8c69e8f8da2f2869a6598566d93b6df9c409e73a3674d1b62094969ad60642482f661875e89836d59107aa80e7738b85a57aad89edaefe544d130c52b5ec200adb936e7bb45210f758087489642124054578649c01d045ed5c89a5b2c51b06f8bad302c8c6993a1c607d6a6e01eac0a37d97ec056c74d45d2e4f75f4e8a1f4cc38c7d562d77f9534c401188ca6a3a57480a20713dfba3bd9b60f8531e4cd6b2a8a4f422ee9c0aff0387be7c3fba4b1e7908dad88230f3fc36a426ee99ee80c71d0de459d575023d773b6a7af1f38c07b1c24363a9637cba6f15ccfc4a128152f9ccb14cf3a088062f0b8a777b61cfade185d08018bc5f9c478650add2da89ba29e2d560b0256152ede2180ba72c47aa50d3fdcae8007be3e9a589061df42d0cf4a67ed1cb4379a9ac31c19b49cc0413ba89c88ed4a435053ac3ad21a1586806e5c5cec5a679a264e288ca98c9d833c306eb95c09d1ee13456ff856ebce052c8d79c3013b6b0cbece210eaa41f199c6aa1429e2b3ca4f5a3ef49fbddc340fc7708fda05213503be4dc2590000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000980b615adbe25b341f15f51db5cea0e9cb52ebae96145daa6985d2e28c728510db37d72f814b5852dd75bec9b964e839e4263c5efb9c180b7ca463224001eb91d75b5a7a3d4aac458e0db0389abed3eba4782b23a5335141694ef6b15f388bfe7078ef497fa2113f94bb79b06806d1a14406a5c1f4416f3ff7b910584600be4d1282ec40f89e4cc79634061770300008fd77b7272e173e83c30879730df899ee5dc90a595e1a52778e55294d5e978f38e8489c8133224747d64404b3f9fde80819effb5c4f3a01d4612b17b65bd6502b95a09b4bf6450f6b069604842b9add4040c06755dba179a72f1f56e084b290572f19561b1995dcb0bcc70d8d05e2512eeef238ea5b54a32711f7449400767264decc063c440f6d56956a3c8fd7a175c377dcd9a3aedfd05fc87401d0d674e8d003e2f6fcbcafc6268ce0f6d22cd4a1ae5022bebc4e3f4ca56b44b8c444419564bfdf3023969124e7c14090a6979ecafa91b308cd52c1c09846dd3259b5add42ad09340be09f9318e3dc91319f959769df12cb3c31ea015ae9bd6f80d325de34ab40821a8ac206d5b8a3792a69294ac77c7a004d89eb172ff579384942311a08e4a7cf56ded00f3154bd63c3c43d5787600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ae3285e776ea03ac5fa3958711ff0f331da01ce3f8be36b0b41d61fddf9c9e4cacb54c18236f87366e7b8f86122ce10a2de1aab66604513ccc5e475aef283bf44b5279a795b0847809a5e56217092ecd8a5c9a35c1447020d6a967243306b74600e2c18bac4cc255ac956d209191bd0a43548a8ed1340b727e4a494918187c9c66bf9824df826bfabf42a3c8cd4074dd66147d9b63f902d0d3f9ba4d3119bfdcd56393f5fd4941b1bd1bf4b900a46405f4792d365b36ffce564035a1f984c7cb23f6012455ab42ae81fe7812574eb2751a96486a77d004eceb6d95ce91c28b027ae2d6fc20b1d25297d5e43aeaa92c61d8a6768e573b8ea782c00a6aeafe56fec11764adc46f0c35792d8dcf43521ce9a60d17aa80437622da47ae7f7acb8317698ef48b61755668302f0e4029a2fe066ae23b2b92b12b43d0fa12930919d3eed9f59c0983407a23f2f493d4c51086827c4fa04bcb37ab6985bdd2c60006e8ee085f4dca17901059530f474e7f506b031fb07b89de5202cde3668aa25459a49296d06388e09bff8bbcfb5325d8ecf9220b0f33ed3826da1240db07dc6def475f4f637b15117d56c4922d13e993d4b03c32b7353838da717a2439b12452b65b40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aad78cfd0a36b3b4d2fd665f4f572a7aa07a684ea536295798996901a52ea20f80ee8dfecab1da8995d37b3249a0710599e4e16dcd689b39e96c249ad11d2fe9a9f0c3c1a10b186b66bbb0fd8f3aecc6a4cbc85cc192a60f3a62bcff70222a02b3fdb2a6d634d2d574e76ec6a50908b8aadec6aa8ee4219f285e6cfbf362714ba8e86dcd86bf47f24db47554d0415aff6d9ad2ce08cd48f2bd4fc38d66356f9c039863d505da497ffcb813ee1def1e6c8c35b89788c4ac145fe902f2451b03ee6abc52b365419c77f15f968e2ec9805335d4195d6f84a7f6a9b5172feb87d425cafe72f74d90e8eba82e1fe03fd0259691c3df5e47b19c00b4eb443c9f711a610e6daa11b84d3f34496080dabbb03672a2cc0c8e1bc52c6bac249f40c6eb88c4245d304a483864e88ca2b180a167c6ae70607bf46c6bb7de155f3cba5115ef3dad420e7e75cbedf7bdee46766e7c275dfca9caa630a5501f08c549ef91dc2a5e5c685e118341c97f7d0c3ab6357ebba27d64443b7a1a83c79e0a1f25f6d39ac58997ddb6a0bd5165724b1529578a92627091cdc1cb08465d8ae71465f7caac7885163a96850e56bb6a98c36989d468ff8fc96c592af7ce21a3588e9911d100d200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c90c4e5f4d160a469fa2be7de5de684f41eeb3befa811c6913c3cce8e8d58fd652ecf19546d0b6f7499875be3dd2bfa91ef43add430c3cf692cb939925ee260e2a02fb02a9371a0db5eb07b136e34cac6ca32d05b77668ebb540f488295d92c846caed1894ee8a2f4b022266d034ccd61f946d1ee0e8147e1999cba348592683b35094bfd37d1cffc7d383faf904a22a15164e94caab24097381c51ab55981f11b4c255d583230abb99ff26ad8a2a29500bed19d65bda7ba80937a6394fbca29c32edd4d0a331e7a2e01ecceaaf6f2e6f05c45cd25c5bb6e31a8f39ce29077075ac738595a6362396bdc061542681d24d78bce2dd41c67b31a7649b6a6ecacd74e0aca9256d2854dd38452f0182ffc1ca1f43e936fabc11b108375b3161dc418663c79b842bc58746ff22bde1362269dd0b21cfbe831a983f5e106724ac5dca99975dfadd797e7451e2d3d0752c8e0e3b114536aabd63b7546a094544c8e2125abff45621ab71126714e6d0fdb268125a0e03af695a40d01ee1f1f6b2c24959e038bd66e51d77bd0182363bebf43982eac00fa596138f5310c2c17682704c490ba27041ddfb7de70ab08fef2e9ffd0cd02a55b64aa1f72772e9109389498f1d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000962016b96da32269a8a96d31a3b596f7bb1bbc27ee20853d2f5380c6c73fd53caf3772412ef4b531cfba1b70dcd9a75136c8c1d674c4cfb90d6159fa3fd560b4f281f070b6fa6d87e39b104c857b8efc37ffdcfcc3d427ce357f672d8528c9ac8729e7fdc7019bd7f7bcb9ef4ebb5e26e24ef72030ad1e33de0e242cce458305ccc16373adcbdb96030f4a84e9cf0e730b3daff87f309b59f0788d1ed3d8f31bb7bb489ecc568404cc68ae1486f22add0664fe50fa4c7357917875092d9f63cb8381e7e78a3f67de7da0d0b04c874882d4a130b653704834f3ed59802bdfc30901a376a343bac2f49fb7eb4a1824931e637b347481f9d32f634d0efc69d8f176dd8cb19428ccd745f7b1a64fa8ec27bcaaf63632f4e25971e67a6ccc1708c989e59ab4a205e1fd515457146957010b63d4d78b9bcdbcfbcf1418b80c4b2b3bf039adf82b63d7c10f40d97a489fe6068d2e4d9283b40a93df1eab07e6dbe49ddf3177c2f612c1cd2a64c554ea2687cc53746bd1de385b023f257c4a1c2b05c2629bcf5c8807d7296aca95e94e1451b3bb6bb9a387a67adee7c4b8fc2419038cad0b053af86d5c6c85712d520e5e6d72520c78945608cffd167ba6d987f4617ef90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054d79281fae0ee5616e4cc58b77429f10365ba3b1708ddd8cc03fcd2b2a5be84d1fa87d71b4972ac5bbe36a204e3270f42d26146e75cf9860af6613caf88e4be02c3768ecc3e710e5a92a3b2ba88d2d9dfc84fa8037178842bac7f7f0160d9337e5545da714e2473b1334ecdfb7517d9fd0364747445ec1f21249357716e9a52608aec6a374c2e5653e227b936dab593df749672cbc192826dd1c0aea6f46fa2be897fd3a648eb43d91ee450d85c27b3f0cdfb764fa3374faea076e5f668773af343d5661ded53a4322775060b15799d94b87fdffab55ed9bb34a7adaf5a66a6e39ad1e221744faa8c3c4ed471a99fa04cc3d9e2b6b3152e614fd50b0623140b5e8e887a86748bd4a269723890d40e7baeb7ef60d09a994c4a2c5fef0840cb40db025fb0f5dcd6507c86e7a2afc0bc85dec4451b5ac58fe18a938a9d763647f9e4ab77e698d33e6bbd44b9d697407a2707f829880b0f9bbb9d98df328122d7eb293fc8024526880e6d04d52a31382c384a2c96963d4a2ffd90b10da6b2f799a563fc021470212ef67af1b76cf0feaf0d13a3c6e80fefccb639e043bc220f0a8bcff4436bb163ec5b7b34a4951a6d49503cf2ba28fdf7e0830423c032c1bd29400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3bb6e600b795c4039066057bf7ce2cbae1bdd936dc7edcc29d3c577327e57a823a6a25921531bab1ecaae0c012ee6decf9058386b658eedca53631599b16ea95a058207c78e52f6c356b2a6b9e7dd606f6bf0c86ec6a776f7a95ad2683ace994dc69cde07a549871719706a79bdc07d2a35254341c44418dfb692d44e8e1111be2209c08a1fdaa730566a5feff32b9e4860ac3dd9066a9c1a1d6a43e4aa42c861ac3a2ccdcf811e9abc3f2297688b55d3e4aaa8befd262a1ab519fd4ed3334e9980c1d9d1e2691bc3b3c78660bc6266e05c3b0c8b32d87ef15b4070f73d6992365884c22b76d0e6116c323982af8e57707af94f5dcd26ab53463bcab484babb2a1e2938502a91ac0da783f899273a52a398a1950c6ae42c0b1f47b9a126bb226673dfac884d2ef7d524ba9c635d799dc0ed7a27b34c34954b5177745c7b0f596a41362b03db3ce58417bb2ba49c61320e66654bb25b554694b3ecd00af5ecb0fe18b220e462f4b452f4db60ec131e335bd0459eed9a0bdef1af747bcb372f133402ccc049f29148509985d2feec85ecc396c17a4a1c3147c0ffe835d22e43aaf4d54cc051cf0c3c7f59394761d3d229cd13acc6b7b0748834fad359c2fd67300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fa7c6b9483092e861645b8c19755dc54e671135663f8bba0bd38f9185d2f59e7daf00f0eb8f8ae4d710eb6e6179682b1af7bd4da559572c90941753565eb269b74379af095d0ecc3dec6162184c574a7ba9a83d3b7999ffa56de12873a2ce6991229f9e6706e7522f82460331419b4f599ec2f196524c4980f8d79b2ec8b1e76682802125334fa3a75d3cf5954886e44fe125b463c6e1d3adfa74833655b6c376bc3b3e49553d0a792cbf725884aced6f6cbf25b83a6a4d06d76a2f72905f1d6ba34a7048373f98d526ec23b106b0412c1b82751171a8bef8f7c762e522fbd1717e2d4cebfa53a0ba68930825ca730ef16f9aaa142e558eb7a25c2bb33e1bbecccb8c87e9d047b6838efda20be205c4d75244923ed4eab476559de35364e98ed38406481bf25301394c1298fb718e1d26831e49ae5e068b9e5c81c7deae8a87a14ef91291dd6f5435b24a1d61032404cc4cf9eb20db9b4188eba0f3f0b7af5414203fba2170eb819acce8f4899a1682211550f4972024973c1bc893882b909dd395bfd45cde1a29d69b026cfad8d6ad3134154a06dd37ea221877df4c889eab47f8d67b08627e2c6f8a9e6d03552bef6463b14cec202e11ed134fdb31fcbcaa00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e0e3c5681b748aa0ef4410c3c3b52e302eb1fd48dd547e64efb934a509b42325b70ba010632f33f9b56fa5d8beffc14f349bcf77e4d445acedca73fcfcbf908fb2cfbbba8c84d073c71be00abfb783421697a9459a50261fd7821432d0eb7e3ffc5e7fd35963a968c6cec9d64b35e0b23777a32f04d10853dd9020e65fa969c55042883b5a4517383e9b0c6a2e75d491d4dff4958026a1097b25d7335056cb1ece18499e0400990c7df8c49088d70833e6aa8198d21ecf94fb7acc7d2ccb73f42b524b3dc2bd3ed2d13c2a0eecb110870eb3f74b709d6fad492031747bf8fb248240ca946cbc9af2795087914f981232ed121a1cce2426821f0fb1e7815ad510335101a7a243e931bdccc1088b11d275a465799853268c50597bbb8048ca97b40b660d57793c97316ca2695effd75c890b83bb7939b25bd0e7533bcfa5f3a00c237bc811f104b31b73bf70a24d27e18394aeb8d69a14e60c46365df7d62a7b5bccd1252ca9f3acc85ff2a1d26db21731c15c8cd99a02a09bd08fb46bdbb40e3e473acdce8f46c094bd239e7a91a8b7276bea0745f1fb652787a14e15e775c758cdc6297d8df37af58b66ec56c7a8940c61c556e11661d2b941c4a217e0e09780000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000859cb9c0ba8d66729b43977e99e4bfca7c20761c77e15c7c2bf05eb73e2c81e65b6f39204d5ce8045840f9e8a5382b5e0d50e0237cc06bc370cd19ac56db01f225a17b9b10984dd1a74559bd0e5a255710e64c6ddf1cb436559d1d9202a83c2b100c08e217ec212c93b0666834dfb8bb27d51249c5f6663b94566e84b80af2bb26af08274d9045f3c8d9335bc0f2311e75c728f4a50351b4a955f170324be56b99f582c8b47eb0f42c03059c4c2cb7b2944480aee3fe5f1767b202a91b4d8671f663ff783feaba73565d52b749ff249f6d193cc5bd06ea34c9e3a3af008f08f18165f4c5b2718cc78f9d0c989d76a440ae903a3bd47ee93600c663d13edb5cec8f137a81ce624029be97db921e9c2366e6acc9b3ebe9fdd78c02ce5df157f813262dc07ca8fec4845a83d04d558356a20a9568920bee17997aaf97bf34d456163289018d4a8808415cf76e46911fd41a1c1f4bbb5d590362b04462009ac2bbe37bcb33db88986222c87857c80183d7a4a7782d8412cc69c32bb946a2b125108ccd03fe8fdb9371f8a63850fa14c93a39deae252b4ba60105efd3efc2c014c8d6e7b01294f37db775f2b3f8c464bdcaa137e0af5d093017cb3cbbd8df96b7996a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c04e29c2318126e288182125e64c04d175c21e65b7c4e00f88ce7e903a593688d6986bbde36e2c05877234e37296ad6a14d98349ae7a406c7973230d042c7ff11541e34db5f05f3bb8bf4195ce6d6a443fb2190e402d6de5661f88cb35c1ecc428efc0ee3812df810739f78da91cee441c91307d2a157ebb91cb6723d78e0863887952d36edb711e35cf03b66c14246b2f75b94603d68240ba7677cfa0ef640c21b1337239ecb452964e93d0c822c355672d9d07f8e88d6ea91b465ca6017496d97db11f0034a11c53efaf0870ef99a8fdc3510b93f38b8e918c54450d368f633bccd424cb320acc0f2eb596ee2cc3ec5ae0b6f300630fd2ffc1d103219e3c2ea227dd29827e9c720534aea4cfc826e9bac920ce1c1cfdfd99e39ba7f94507a30f613f54cf5038da3cb6fa211507c311d9156443f27d4116165e2abd1ba0cd962007e8ea31e8e74d3642bdf0bea98e4c354419c165d048a87374e03a95a09c2e82fa55a679af1e8f7b1942dc4c089dc9011290035444467536bdc2accd23f902ab5253c713d48f0486c1b54fbfd236a751f6bc7ba6091fdf31e28654de79530c4efe55ae68da2620a4b51c2fa0194e63e610c7d8c0e30029fcbc50d084ca75500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008847742fedfa4e2e11c4c5c6419d0cb5fc9b8ad5eca38768b281519a144523a3a3ff39cd738123c9bedf9080c37c38465a7dcae6a0117121d0d33ee80c6aa954a75659d67efcdf5ce9d58cc3ce7adef5a4033db9c4a9bc939fb5905a77bfb663921403601531d0751d39f759749815e38e7820788abb388dceb3bc6d01dd5ee765ab5fab38b6e703d2705e31cfc9bdb2dea9531aa0563c855a4f9f25a580c194bfa521d5fbc4887c227f33187a41ae5150b54d05c976ff2869be87e943dedcd72d68bcced3b2244f76df9f1624e56b63d2dd4b7a30dff203dca229dee079293b545016d842085006f4a25b345c7fcac343225ec1253237fe7b52c311d8e28fc0bac2096790df0c485c6b0209ae8d720adb9acf22d35129d714d88b660ddea05ea38fd21134187b24ce60accfe547d33ef65e4a27eae470a5c024c6366594421aecda783d26f1d6418466e5faf43ff4069a5a7c8f9c21cf6d6718135d1bc013766013cd6889f0a1ea2b911f05b21e5ea31064e6579061be1e8c2f55db59543a59310c38ac4cde225efa8afe4a18c7b2865cf599447ae521b041df3cab8491c38c9f75266f5497ace20bb65ec5233c523e3f0adb7ae12abd7cf27a662d7fbbb0df00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c18b5c01eb3430fd2fb7a32b24cf114fac708e71e0a928db4fbdaf45996033ba950d585bd9abcc24db15e231eaab7e3870e5c1a12e5d12971fc054fec283b8bca56625d53e54c6639eca81c99a189a3819f7d6455f6f338fbf276f682ca6ba1ce3ff08766ed2f1d3379cb6f883326acd9cd6c85d95c6c4ab0d68d159178ef7fbda17ffe07205c61923e058c689064563827d0cbb872aac74def48edd53190b178a07ee57648de637f6bf5ba21d7cda1d15b88b7b16378ba84e166ae9414cec3f41b47b1467e0330cd3dc73e706ff18ac80f1b731b57431ded9b68a9a4b2249fee00c54e8b8a0f9e2131ec3f19eebe02b99565ae9975af8a461c49044fc42b0207e1f96b000e78f86c83ffc4109079af1969548946c7238814329d289940c6e74b1e118a9d58f50e93a039e2e4c3579681726f0f761e0853e478a1238fde5deaa4aff2f3efce3719658b9bd4707f15b2c1a14923e4e47dad0d68244e36700a3b74e5af624f87fc66401ffae812ceeca5494f6302d697fb5d1c2d6503ded1fba17c029769cc03c9eaf62db2ed052acf1c46c7d1b16dcc56fdbf48a7185a7b746b90ebac063fab655653c6ba4a7964b3706c564070ca07ca3667a02919fe6e219a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009938e759e6377a23c8b1714b1a52665ea54b596d87ffa369caf201ac4038591f8a322f64ccab228896a737c46087a236190f3c34ed6ed652356fe0f9992aa0ba4e4d09000458e3e9503250e0ba6d79b5f930550a3dbac8d9a0d40e3bfdea91b41617b8efdbe34d498c3e048bdbdd4800bd460e627a3a9968fb45d36d13fab0336d4e8804db7e5570316c7d28abf5afaf120d5e2422467d0f471c839f30995beed78a2dbe20f603d81f666e0c216811e58ecbb991b323e4b52450bd6f434b0f11ffaba0076430b1326af7927e5d7c791c68acb898cc4d0ba6641ffb96726b5d6bc776dd4be0486d063a10830e8024c88a6077c71c554ace6e3e205074caad31df74fb7d7590e754cff0acfed3614d1d68acf90fd1dd6cf2e876edd053ee3a3b5695ee03e6a1868db7ec157f396fbc80bbecfd7f71d03d3c11e79e8f3bd9d6f5c518d995c351e85d1946bbb6d28c771b5c99fc0acc93f8f139b3d52c14a7da1adb46832730678e1b3ffe0cff191b9d239b3a3759982ca7e95e9e107ad39639c229ada461fd34b8420a0210a62beba1df1846e8855b93c0e65fb4dc3d05284911286e9d17f4a1c637c91d042d6bcbc880267bd4e20ce2476608bcfa6eb37dda40bb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098eca4a73335edaaeb9d4fb21779158a97d82d43e293a46d2f6e75a0674929fec590469108c6a8308b83188e037ffea3e95054ef5a4397b6f8e500db45fc6df141f7c0a8bfceea5b79879d65d9625824e68a4c459dffb4ab7f8dab640c4404db63899b2cc1e81020c265afbf5c81273f6a55f2dcf0ff3a64c80c28ef3649b7f2cb19993f8f703651cebff2a15c8d847b31d1aa60bc64f22e38e3ed75fa623eefa5aaba0696acbd0fbe5a5d66c09e961741d95608533ebbb61c2317ed2b37850f2ab64c7971fc575ecb60780e7e700ec8b6506cbfdad8560e12f08d0fa0c91373f82b5104af92d40999a245ff8e049014428c440bbdb1a098bbd8a183be725983c103dbfa7fe19c1ea00914e5aa39bb0bd589eb3fe689d8fe895537674260364c740da6cce7f57d025db02e6cde0e21902dee1db7f9ac32573df406910d1e03ae5d7a36627ee2a449b89ac9a2a558ea7a52e13212a3eb83d4770372c09622356968d698e66280f946e77ab8bee268ab60d1c9a4160fa054cde5ab3bee1cd022f502b9584fc18ec6878ecacd31169e1a8e2abc3fa771a9b87ed6c8102d0ad115961113d70b53c49a5017d6e017fd29f88ea8ef601e26d9b826d29a23db4a35cdae00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a4eb078fc3292609353121818bb22678a4897d2c5f990298b77d82b9faa9c09086c6e9cb68f3939a5a71acbc7c842d8b1130a5fff34f63d4d5068ab33364f241c8deb8caf70f2273b4c274cdf396ed3a0f804b717e2a073de9adebadf9e7936dc601bb5932f663d68217f7b151701bc50b6a477ce995cfdfe91fccd7a1c0c260d5b2c073a030705003606eb9ee0c26d840e1334ef31453211287538f610f58a649ae1e6b671e60127f29787699f889efb6d8ac3c454337d963b62929322186508bc82ed646edc46291113fa62c460a48d4fde4a4a02c0de69ca88772f24d40a7c20dfb3043f6b6371e07e241cefeca4cb68dffeb671de5066c13423000fe8fe9706d13ec8285390b40639eea44f215dd0af119f4b73587204f9196cb4bb9027d3e0b01b7744dabd3ffb0de0ba2d90690504d08e5cbb1c68a24d5b06cecb17c675c8e750c77f0349ecb0c0f9dd9e048e824774835143e02cfa4c0ca2c7c5b3c4109c4247a47597f9a520e22543c38021ecc0244e9950654304f35822384afcb9ec06ebf17e879d91eb6ba3af5e30c843c42cf3ce74cdf05cb02c259237365d658d358ed3756873944d605d9daffaec11084bde867f4f2d389819bfd844a0b019000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094509c44b61f742bd17656a7b86fd002e1d52178557a02c5c0b49165e0247f5c6cde3a3d50696d2f0a4aaae8d222c9c3fc7c277519c13c545519b4b336123340dcbb10ac9aa227788dc1423f17ef55beaa08fccca018c387ca0365d50418520ab7a13753e355b33ac4532b2db931c25ca284072c5d95289db8bcff5e312698cc3da07aed4488abbab17512b7df7eeb968e12471ff874c1e83361590b3120ba350deb2910e60d0f11bfbb5702d848a605940ff3b1dfb459337c9d6561b28824d302fd5399f5aa360eec6c8eef7a85223d230da5e34b7907f1063e54e0c7ba82be623db0fd52baae69a9d6fe76595ea87366b70e620c350ecbdaa0d1e83eab7d9b6af8643472fe264a0fc655c04b01afbb9de79f03f0ade28b92a78cef0f9a3d3317a32cc02670427347c1e0dc9fd69ed9a984c503965946cc1e9baff02848091a2ab5dc6ea6c0bce1e53a086989d547a2be97dacb8dd31149df7e06c2756b138137a5ce40109f8af8b23c65ee06ab472b036840da315af0e23c8067271a388df914e988650910cb9d77298731d50638273c8a39193f4a1ff55b0022f78a764fff27a9448049b5ffc677e1e8f858874cb2e824943decf79d6758c5bb86293e53bf000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099b21f611ea1791de29e3bea44a0b651bf49645045750a4a79f2522fe430da5c3649705a5357de597d0ea667a00346d88cdd99e2b56a99d41e719aabe71af26ed19109512a9856d833f7fc9eb83f258aedb086168b77b22e22a6a14e123a49ff1322faccb943b4b2634db2eeb0bb1b365dd031bcb058950493ab9471f01dc0e44b2441b1549e16e9bcfe07c24d537c45bca3d7a8a59a632bcdea17d35641de45defc7ca06eb58a79354e481e95b5eee314938eb2d9044c4d00f31ad5efc3c4df96cf1b78c7639d17c2052b1358686ad41dd37fd29cf26f0368079d31dddff177e30fd4e4dfa038b4faba7b6f1309bc67e533106277503a65ccca30320a1f3af1431e5fcaafcdf1f7e01b3cdd40ee69bbd85f5dd086feedba7c7460672de3998d94d5176f63013f369613067e1e793ac24cb57a3a63d77881f0203bae1e7a0c028e2095121fefc413bce33e0714a9647043919fe59bc4dfee15913476377d1bafd7c190311c7d02fcb066ea0b218cd8729b0d14389177a35518a3b6dc002c8438cd748b444ed1237311342f9b61ea6b580f22f6d43effb78fd2988ed88b4d5f834696660b58005c2a5e1f859ba9783c65b766477622504124d435e6a04d877942000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018dc12c0323800b3c59824833e30537cb6cf586e42d58f8cc13c9ace3f69880b0f48a1a0c388b4aab158e410d72ce6a34898ca23ad34004b1736ec827aacdaf7f63ea3b51e13685147963ebfee05a577532b2537153345ff1fcda0d8562cde2dc10352ad7f3310fa4fa6ed17de93b8bf653eaf416c03348dca32572aa9ae248b2ce449d41263ca1a32d3a2af4b8c813ad768c893c4221874ee5d96b3c05234abb178f149a77b813f71c0f26ae54ce6f14ba66325c091c7a6ccf0665491526d2290d9b8435062e82401415e05ddd118f309ecfcd5a1c4765343183249245710bd3ce5ec54dc4ca5217b5ddbb345d8cc27702e0e3f2f0f2ecfaafe0614a653b1fbf9f418512353d1b257806feb382fa16906303267cc71c324beee0bdc88c603fa315dce62f26218da5e9e649fa4b220f94ca140d052f8caf0768eb28e1312611c9e79ab3052a0919a522f44e4aa9246b89fdce02df450f05add4407138f51e7cacf15214cf87032967d264f86db1ee378d44e9c49b5f8a030afdc6de8e2ce18cd0e2c9ed202dec2820af9e79150e3a37694e7af6f44c27341c8a2032497d35d4c19fac3f89f92294e07fec1100bf83bdd813d655ca55ee0e620d70672c1b358d8000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084a7d3d5f91f8da6af884b1725629870023134a0527910661c368539e550b0e76f04979a3da4fed2fb74f55965531d94129bfeff77644729cfe8e0c56b544d80e75c586eb5fac74e30224b6fd070cf0a0dc17e5b76d2a6b92038cd961df8370779c924555dc6313c42e761d8d7be791af4303a99134436954749c068ad64f8f620fe019ed0662b309cd6ed11b4addf557e312853a4deb47ef88b4cfa4186abbcd4c159a51855fc7ee6aa7e6298431b058125d0f388deeea7a1b1886f43c671e0652f94b1bffadc6979c031143b06d7a3523a9fb6275862a660b2608601e6e29dd84e49c2d1c855558ee989cafcc01b761e0f3e8a7b8c8fa248bfd303e0f981d5cef9be86f9b24c58b1f9cdb90aaa5e038919073f0e63368254655549e7980c34a96e4136a303677d8d290655d1b455a64ce1067a912ace7dc5d0c74f87ca87171bc386eb911c139f9f049781298b553eb828d0415921ac93f8d53f8b77afe5cf7d3d92f2d05c9ddb126113302f1c05c06ccb44a0159c6b38c6793c561f9ff01e0ae1ffb293d3e39ff440258e3fca5711c9b09e078dbefa3b9232169d6edee7c8ff78783a8d3d7e732a83f58951a68fa6adafc556dfe45f8b9291340907008fb80000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000988690bd9d4c46b0a6aa1d41c9b9c2b3e298d0776cf4dcbbc6e2a065ea5efa7d1851d2a666c4b89b60b912ca54b57ad78ec578d34fcfc7a83a84cad0c232d0d056f119fb9af63641605fd8c01a0f044ec0dede4c43e785b9321317ba806845c0b843db3d6cdea23ab4e59969c30de1938b751f7aa96bdbe9817dcc867cd28ef279c6856c0a1c9ce2a2dd8405c9a40be44e157f8d06a45d4353866476159d90a19804160ffe4f2d2fedb55255ed7e776e0a51d39bcdc43b7d2d909b57e9e67f7ade9325acabda05afc79547fecab34da3c157f9cabbbd5f3d735dbe6094f015d5e0f2d1481a8dbbb21fd58ccc3314628f23056630af55e90ec079bf0dad645eab289fc05e967f39363c5e591509004e139d789c4415abf6db8ae28dfd59349b05d626d275200dd89183fa768f6ff9cd51524d8f71cfbec389979ad664a9cf72019a956418d0f8ab8b5e4943304cbc33ca4b553cdee84c47cd16dca8079e11b3c6646b387744cf8168771209f7ad4aa3babf8e954f2e61e7f303b8dcaaa310a721f7ce4bf606caad4fa3639cd5362e43615134115fd5dc4dfbeb70f7580b809a2198e60b8c803a877567dbd25c649da3e222ff7af48bd25086d88144977ebe9f51000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019cf963ee36a55e8d3111ece5326e2e00371f277ccd7fb78095e48330dc7134ae563a985dac1e32ddf94c9df4a0f0ab868ea31ea10ef83e7275dce6f46a5e567554ed0a7df18964760a240f553c2b67a6acb243922b338539e530fe6e7c747afef24230130ada681d5d2e4065fe01f1146f96b5f2d8fc40609222209c2d4cc7aeda74346eeebe4e9ad9da2086fddd65c275705bb8ff03b27e2f01ca66d36b7f974a9c9f2cffc3533b739c669211deae361e656b7146498eb6bbbedbe602383bed4c6c0349fdb169aee7ba4c37e72cec2ff632590f432c141b8631e1de36a2fc0697ea2ac52210675afac27909247021e535d9450d0deba2e5de8565b0baac180cdb8e0519f25f7958f4bf63ee4680dbc4973672cca9594f56d2609ffa89adff7a8594c681983bd6d93be232f130a11a1a9f35cd683ad61014329b47ff129edb1d2036a90f4bc7e39a5b6e29398d50ebd43b145519340e4954c22a8ad41ea393424e2b909d46578e3251fe77d6362f30b00dbbd00e7e9ddd6ebdd18a7a47adaa774288b3c112a45e7061510f160d159da5117afd9c06936fd28f46ce5116f62add5f84394382faf3d0233393953f37ff1b22c2dab58afe8421569740a7480a4bd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000896fd04870f5767fe7441da5fcacaa4916047a0a89beccc3d722975928cff34aabc5b4228f3bd658e4ca3e3f3be3b3b255ac2cb608e625263e26bf64f2b8984dcaf5dcc7a7289409c67050f840c95360028bc5eafd238f7ef12f6a9657462db266f7764ca1bd64d9c26828218adba10de9068b7b736153f9d3db90c10dea3859a95ef93f6e96652ba09a20305b0738eeb2a593b411a8612964a9c32c86d9dd73bb6d4b6b17548fc082f57cee105d6d77c2ff1dd564c8f94cc201d96b0becb9871c4fa45fa23059ebc336a294621b1ffa11b996b0e0a812e34af4b9c2274698713945a03c1a8335a4ccadff63e403fdf2955ad2c88fd7edee096e81b3b389af9e97b63001f0a307a50dde19c4e4aa964885157066ac70f350aa7c903f9cfb10446d0a1bd07207f88bd11a6b3812e7339e3afe766d859acd9e6536f369a33c6900076c1c7e6ad6f40a7ceba0ccf0644936a21a5530e5fd0e37e1ae2b8c8d5cd4fb822b7f465caca207e94242d6fef4726370c2b443fbbb8507aaf2c2eb4081011a0e79c56294ff3749e4398ccb8f509be875daa00c54c0ba6e5cbf1e6cc7a9d25d3249c5cc273f15f6a0ba148bccdc17611ebe4aeaadfcccee0018d2912eb584930000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000220e813745de993adddad4726c65d2cd838dd0c88ea8e1129cd704197c678724353b9dab3beb7374fb7f7673ac712ad961aeeeb7bf97790ae10637a5ee8a057bb86be3e6d791da3c7b769832918bd3cd70b1b702c165f22c37abe0f7605946c936118c4bfdee340108067093710bc643ae80ad1f62b8c210298bf3c315dd878b747e791eceff158f47c92f1c3936b6014b52afced9e5b8325f008e06aba2e96020e318f991fe1680e1c33c766961becc975787dc5eba2f0eaed359d368def1553842db979b8ac0fe351eeab87cc5677c2b7e9c4c27082fc4dcac98bdcd3775ee394cd76f25ac1356a68557d4164eec279c01c68184c61bf72bd4f37a54346c89c17949944020d755bfb001b953d8b7f0c379d2a13644edd6109126d52dc80be06bf7455976b40a04d1af229fae1421e36e951af75a7b7a8bbff20d799b46795312d8e8b58287cbbd1e8a2117fcc6429e894466c6199b7e56b2abf5a76db0f4093deab8a6cadf957afce21ca44177c7a8f4808f00d840dd68f8c7f6ce2cc90bc64c10a61c70ac71fe555591eacb8ef661f9e20f0df2d2471710e56afd2ad8a05c54e7badbf0e354aa59ec20bfe1dff66cd2723195dfae9804ec4ee3fa5e510a63000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080ba4f9ce89b349f191be0c950089b2fe111ec1a266102937532abd86e9126ab47618b40851d7d6d326d6f748154be9566c2eaad4fbdef9c0b9779d0794c209bf4fdd9bd7aebe54814737711b9285a14dd7c97a65835bbbe1cfdc286b5e8c6bd6da4b2337fff46aaf782aa48c0ff66ee9b7d9a8da22b96e43c4f5c5e862ccb6da12c9987b1fcd9c23dd2560ee4f3b6d89de343afea0cfe2ec5b95c844797bbf54f541bf98d23b6557434cb6a7c6ef4c6d8bba8bceab0333a5184a58b999c6dd432a4935a1224076126313f6ebb462538fa6c344543a4d8196021997bf7999ae6e9e3bd477ece823d522b31de285193ade538188381f432cad7cb61e555ffd0df3b9cf419b038b48ca54316e881875cd38c02b570316ab2b60b1fda9d36e2e69ac5e256d90fa2d5463ec5fb1000fece21849c20e995679cc5f68cbc32b03348f2b51fe8783b95805f41236d83549094987ee2852bc67b5cba820817aa174486fdb7cec7d378eac8c483a1a07f89bcf42492ab37d3e52a1beb0f029d3de5cea1f7ca79fb7ec0a9f940c5b91d7bd183cf0dc5b9e89b9f123bb51665541678126fcd5530a262690c40fabeff94211d851d9763c4b86034db1ead4df498375c21ed610000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8c5b5967ba9c80689fe324c9370d4015a505dd50355e0d2d981abcfcc1b47b8f810b6765f5ceb58c37ca76ac1966985ab75ada05bf2f3c7e53db60d4a1e7ca5cb84b24cfad93aafbfab93a261b4467ae4d37e05ead6aae3d5a97cd3628c484d982ff0f67600585c233dbc500376c472a81588dd70760cf80700c6c1b8a4159138f3fd1dfc0e85ca8f1d53ec95c77871cc3c375e26aae5a16bf8d3d4b24288af324906230fd38e79acf7df76adeacf013c5b05d515ea0c0af25689fa894348e4084185babdf3ae927a60d4844e3b894924d5473e0a2ad07a49324741a39088c8482892fce13aac6a20b8a264b8b6a885a3636b4dca626a83f1a05b364d471927571936440214687898423dc5be20e63c96518717078ed57e1afcadacf3cd6c17326233be767a609bfaabd7dcf528c0536b45c2b0e325211dc3b21136f7843dbb6abd207af3eaa36e8f2d5698986028a6771fce22505991ded34b32ac5c266111f7fb05517228be39c1a6988b6f8d05b8263b979366b12f007cf14cb87a1fc8fbd1127f3d73c76cef14c74b5d7c670a2645888c9660384412c05ff4b64c60a57ee55b15394fdc418d92a775be7e8fe97a884064ddc73dea2d62697d90f77499eb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131e4fb961d55c8d7d9f64a85850440052bfe7e1fbfad4a24e763d74d7c02433298f24bfc147ce26ae9eeabe7b291df16ed39bb254772cc359b058e1ef49fab3dd3b28214adf38e42f40d511b81fba1c1525b7bc3107fb6f99a4c21a4a82021c7a6ae24201634e99843e73e9fdd2e1bdf266f59340f6831a1f450f39d4770d72da69cfcbd28025ff1d10b65dfbd95c98fe4b49635e55ecf12d14f26c913b969b85b5879a92896903a2f969793a585ea469f8193c67b271bece8397d7cd570749659c74eeb31ee96b2a462e776004704f777fd43db7f7e68139a747d3af6f3b07c302bf8fca270ad73f066ee8dc31edcf2f3ff1054b3fceee0cac83c8b6aa37060cf2beac1e02e6ce7929fc36820c6005e7e688d08789236b79946340db940894ee6c4119f9fdc883ed7c18eaf6ce84c73d129281e5651fad557654e8ad8715f5cfcc816861b1dce5bbaf4cf8db07f503389164844f662d79cd6c52bc44da6d840e8472467be570d6dacbf158308e69ee474bc0dc1bf1c796617f051f7805f9ccc56cc147b5ecbe5f739c2a20f147a6379a5fa22fe6236ba6afa61a38c672d8d1a38800c45722a0e2cb2ce6e865599c31b3579c4a6fd5f9031cd28fa26ba1d82500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bc60c6a70ce3e3009e387f7f1280fc57f4dea29e860b85b08a6a42f6723157bbf78994239cb834300722c0a579536748494d7d4116b4ec81db2dbd96f133fd73abd47fb3edb5fd7bac697579eae4b52e14c6775a6c37ac3bb879620c4c56c0ea808e5096d94b826a9ebdcb48b3a9ba9eb86e638d4920c8b0d42f162048651c270c4ba5296f72f93a173981c9f81c323abf27843a79ca8cc913ee261dd33baab03dc06bd92b66cbb85dbe21a34d87d864dc77bd19895344f1a86341c78447eb3c9ffb1846277732b6d306db31bc39571c28bae45448187588e70868d4ed55ca1d06e7edb03cfe249315f901adaf8e5c879c59215e155419a85d4a867af5b9c5145ceed4404e8d29f0e01da4d98ef202b40dbc03d4b95b664a84dd0251e51fcb545d1ee08766b2e05f57b6ab50afac0d7cb226646ac6823cf0611f563f2ce34345f355ad161dba226fa9da1649c5c6cd2ebc241ad31f9d5113bf1da00dbfa243a12592120a36e06e087289c43202d21feadd0234c9963a7d34379aa1189320e8df0899e0235f308401966333a447bc52a73cf2d1173bb33dc31ed5f8a31a8f4ed196a2d8febe22dacd4a435333c2eec45eeca37fbf1938ec538b7dd64953e2bf0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d53b0c8bb10a0445739ceeb24c9924b3d36dca25ba17a93f3908e7b49e64a086725e5d0ae6a746834f54c0c035f2a5d9f3c029bef02ba82a580f619d12650d7d33529f0eaefb03a2793ad744e103478c4dad0539b3ab1df2c092a42e22ac21131fc613ee92d858b49d849b6d5b537d511d0e8f08f1b55a8aecc2766f9bcbcc14e692c13b3d7d1d9b91d697862d93141c9aef60430872e0ad1e5a973858e6f5eeef009f5f07ff97f91c11361f17333ef700bb5aaa562726a0ba372aa33b9e0803b3608b4e52d170cba0f07e5a0704ac43fe318ba35f6d60987062fcf6a4e8f411020dff60731d605ece3a43e92a17948fd770927818d8e71d24ea948dc1b27a7e0fd8120ce2a96067d72d0a406ad6082a35f454bd0b8a5bb7b8ce2e042fd1725988c00f839311aa0febc34a38881930db6522f1f2361617fcb301dad5a900f9a4fbd0a9154dd76a072b93cdf55d9ebadbe077a338c1ecdade233574e3e789659c5a091615de1787fdfbbad43d1abc6b1b2cc21497a4f8ff3aa3856feca98a9a65e03d903c922299484fd87fc13d0752e44d73e1d4c339596178c3ed3ac03fa879526be6a722ad1a3affc0f6e632a87d2e8473ece817953838fee6166e2e33810000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9a9d5daeba4ff7d70225838392dc9eca8da658bf8b6be788459a4c7a2573aa7fb2c04ec83de9161f20fa83d82573fa35e0e4c6de07c2f743c6cd8785bb12a73017fd59cacaa3bdc7701385df3137c594eea17b5537be9fe0aa06096abda3dc869c2e3a06639790ac6165e4006267c518d6cb2ec66c2e09eb57c33c967c7a8177750742846872a65a494eeb9161c2d893d61b8c3f5c4d000045004e069e6ba6d51df13804fcf21e52a3a882c80285c09e01e6c4729aa0c8f4b346a29b85896448f139c66de349aa38e8e0b8857f1cb0de7a204ffac0c5dc262d4df3bb10327ecde4025fd42a19f97268ecf8da2a88d71a735801aa1287831192ac9ce07836bc651c71f1497c8204b6cc7625b5d13256e8d009da24f0d6b465ef044f18b94a57ec446536e7d7f2939d3d961980eaecc3fc1cdeeb5a37868308b49e1e0919581f1cfbc25bbc74ef6c92b320b65b3b3a2ff2f4de08a2f51d4fd738961d798f78953d89c6613bba7913de95334d382f87ebf1512b512b080bd4d16cf2bdfab87a471c0273e429b26998441663af0c20e1b578b1610860fae68d21c6930c8f6b0b2fe3eae4809abbeae26b9ca96b725d3e23d4d1a0033b3d07451828230dd9a62698d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000819304c05d1e182bb4d798795fdee618f1456d251b61b7ff471d2fffa8c384bec7a2d4ae5977ff87faae54292e66e28fb90f01226bfa3c7d2afe77e9081f2e5ebd94be1492694ccab1de95c9be268ac81cc85d2584a88b94ac6a3d54a542386d88347b08e51421855288ea95af9a5d0ff476490265777f73dd2437e55ed413fce204e91382160d9bad9b8d1e9a3ed19ab900b413ecd6eabe5e981b1d06c8ea2ab364a1bb318143e34039d35eb969bd43f623a25af5214716d26c45dfd9b7742a92859ef99278e7276a563c89f2def9dbe00585b4a64cd8fd9938dbb8d479156e1254f2f030e8624b62b31b3adc7e6bc9079988be31194569aed56bb00440467f2dbfde07943747626909d844aa88922c4df78a678d1ba33fdfab17898f210c64fb815cba44ae86267c296f22b9e302a18f4c51176cb9e21d7e174d4e9fb82417471ce5730120b8df42df9f08d2d3269297f2c67f95ba48363239f3a5e9f6637b88afc7302487b7c31518fd70bcb7afa9cb973662d9a9256f1ba570b78290d8b33b199b2908e5c9a1e9412206e405cc41c9e6c564c4429741782cdbb28ba183ce744f9d3699feab51e7c1f3c96c32955c20eece0b7310be9339d3eef764578d610000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a72e34b60ae03cf01c74ee0714816279a427ef9f15e88c624ccf5fdbd577996ce5e25d6ea85d765e322791da415492672e8761d46ec73f4af96d9ea2de7dcefbbd56309149bef8766c38467c01147283e26be08618b22b6c898b133f05da874ed239c04e874088c2b2b3e693b5ae885c8734e53968763d9b92cd82bcb5352540c2ed327742c6c7a3de3fc83168fe26b6e8994611839698794aeca5f502f4d489c0389ff89f6dc8ff6986a326238a4e3180e4ebc4a5b3b50dede422268b608c5ecc05c6bd2a8aecb762bb59c8e903e98af0db72cca211bf2a40d08bdb49a8948e459330fb3c17691853e1a24972e5a344048ac3bf63d0895f3dee98d1f74a5b44113ad4f786e8533ce7fb564531eaae254a752754c84bd7ae6cd4f880b2a02757249478870565b94fcc7e174f644708d3404bc65d450e8ee7f7c9c85ea6755a41b22071d993ee227bc942ed9e905827e4e121ecea4194e2bb195f3525d02eec2744c47d60a6f60c3a21412bd4470b3795696197bc7fb3a1e944ad1bf0f03554f712d5e0a652cb4af27f30827cbeeb1655c7a35723a55d6ddfc78f2a23e74e109ecd474b12556c2cf238e0f7a9a6dae1dc8f2ef8cdce37b4da423ac552f5ff308000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009eace0b878cde6b33453a3228a1fd9f3e0705a029627080dd1511ad1001e7861e76d39423646e07617afcf004fb207a3d2cb6b2e0865e92e5999c0b7af5da781f54ff38476106e3bb6308aac5f119e99748306430f3da28d27f077bd24aa713fff8b89ea54c4281f70ec643203da74695c3048103287f23717df7128f4479532876794286b05d591712668137fe05fa57a74002e3741ef5a2e18ab3267d7d381f6c7d9c490cdc5d50028682679d44008d60b24d79ec68101b93d29aa9d227f27e6eab1d33ae556dfb32413b9b6cec183ff5c87809a1788eca9ef7475a7038916d8692ddff266ce7abf86246d18c6c2cb94f69787609b9f08145a5063d8a7a12ef5d1dd9d1af3b327d62a86ffc451262fc66f1abad326780c76c62a9a17d3bf8051ff79ea59ae5dbf9e34ad8b7783826e800c8568c872e441ba84fcba39d0527bbdcc3cdc24deca1dd9196770d83729e01f8a9555ca02951a754a290b444e1a5ce49597dee7e8a0674637c78af4f1cf9d35e63d05740bc969c64d3cb6b378fc301b42f91456e813e389f0e86a40086ee1434eff22811bff4cf97a65859e02de12d5e9b17aa5ee045f3c45cc1457ccb5bec6c2798e80356abb7f33713ee2cabe6b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000283ba6f3780ba353c1f2383ce70b596e2617fe32bca807914ab95966ce321556861cad118c98816147c8aa664518b142e0783421a70646985a7365aaf43cd3a42857f2c59a5601825b65564c9cec6958439de8f0966056e4aff6f550c4accccf95f2db85fb3c14a171f7be95ebcac3e1f7f6dfc78fdb2f03a176469f63e9d792b5257ccf1eaaaebc9e76570fcc8b6393a6e82d83f224c21a0ade7b95a8d33756c27ee57922b91920e9d95b257717278606b5c22d098ebb9ad01cace95227bef614e8424f36dcbf03936f9a46bdbf4e80ed994901fcf7d002688f8ea55d8a6ecaed4957c2172b5396e340d4fcc6776c61f41983daf7b00bf28461fde1e6a228e4d79b95a6ee09f78aec42ac723ab07fef444720a9902c4c4a1b0abdcab1dfa6b92c83ba9b51cc9f43b937fadf40afbfedddf2f40058ae37db7f3bc473f5242d5da20287dd5f7d7453779d315f93dda5c10066843894316122c771d9ecb42552b6fac97a60cd0379024c6dbf121d4620388c2bf9c2bb99598ca8a53ff0cd0796056fcfa0581c4a39ac459281fa47504e9902139ce29c8c2d13aac90d90db584895089f6cda1429b24340addb96ee9b1d05adcb29a78a91d27d2d86917b44e4ea85000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025527b51316ad7ddc05c5e191da818d59ad18e3a0b38f543cb2fd00fc951e44810099f67ebdd060197c322f3fb079ebe3e28cc76ad65927100483e963912d8df0be295da5914a9623fc7f6e93597413d58eca368b0e53cc58c6ffc29fe3651e62f06e226fe25635b400ffbac7e14c76f14bfce8c15a0fd965f963468e2251b06d85b354bafeb8536ca7ab4302e8f4cf4a6256a6e6e861016075242aa73f5e4ee78867bd03bfbbb93325c3b3287fdc956d6c540d337fed7a58cb5277eaaaa705ed92bbe13a99cc39336e2b003fae5feeee71eb9c21655e9191a65bd5bf401617c956a552fdd5e207fafcb9bacda2aa8b8dcd7615af670d5d7480ab29281c9fe737722381fd0b8a5669fd37521affd40f15df6b73b5889b9052ef947ef84a7ade8e044de6c9c3413422dd62212b4c64bcc5dfca981972404a0ff1427ecd47daa55f4dc3f13c1abbdef9a46c66c9d61c769c0415ac3c0a0811111f02ae9c870ed0f268fe97ee6035f69cc8e58fcab69e6d067f89fae83e1ae1c124d952177d315f42066df0cf6628d3b55cc108b79e789ad65efb45173c181a234799b37e5054ebb2f9c77f2489b73fcc564ea2cad0cc681187d11244419d8f690ec704e74744f2c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac3a524a69557f5a7ac5d5e412b85f20c26004dbb6ef98cf7939c0e39a810b40cffbfb1ee57bb9b2339c7c2f024e0b61110c717221573e02a65f53b429bbeb4a00a712987ece68184ef7a68d029f9e70ef624a9f04ed1c0379657fb967d97cf98f70d2acdda2ae9d4fdc56d39c23de7295503312f0e3a9934e3490836803eb03ed9bcd1298f6d5d12dd9f4a9818e2ad286905cc350006df8b41e645872087e08af86bd6ab504307219c1c4001b732b5e3373366fa6c612b5206f4f75256e737d6dc491dce2df0a6b5fe655e587de9c5103887a97e2dc1cbc00f55db1d21c9a381a4a4834956e5afa5b27e254a18d4594b7fda58c0d759d59fb874f64f15652511d9acc976073910dfd3877f7cb727864e5b4a4956b678db0f351531b3109c5a7e9886ce6c82a9bcef8d298187b1264e6e0f507caabbe89f6a4039cbeee00b6336d21306385841a00d12a14bed3f9ac99008c3e4da555eb0fb6808a21e6b0eaba1cc2222b55e02bdc444643331628f32b4d6930f45f8090a6f03877b12cffca6498324af9141a04da60378da632ee8c58a40a8874f714d272676a686c587f8dce2a30fa9830317d65b5fddd0103aa2aed88b7ed7ff3c37af6976c32b9d49cda080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000908ba1e6aa32cb8d9629fcccfdeb0079866e6a62803fba2eb2cd30ad553b756411c8446f6c5fd2853f0cb1af0be623050bfc1e82964f3096ccf70138cce397d10715c50ab20717d8165ac1a6a280f744e0791d86410ded7cd493c081ee625ddf795c213556116f8818235bd373b95195a9c9e01b6ed0de175b2f8bfdfc10ec87df70535943bce2e49fb988c4488dca47ab154a5c56c2205ef5656500d9523707df49afcb9ab0349c64a983a021cb3255e7a5fcf836799f8b147390130a41514d53ee7a7054cf11194a8b3047519a139acedb206eacc8ab362cbe6efddf558618dce3b4a0f8454e9c0a17c93989f7b3af9ab8b98681d4fc27e1849d164bc62413942ce6b19407b994b5d9f02e46e356c6a956538756c1d3610f476dbeddc7f1cef206318f06a3f999b5a7f4e742cade266f8ee1c59faec5d41071d31ef23a8c0baa262738e4bb3535ad9fa9d6eb28d9e9223640b59eef35a87b85b72446c85fbb25ed566aa3bae4211fa23e84ae2f085ad24c967c9951b15413c37671ad58976b59061b64db7ba7aac8e47d7f967cf7d32697210624130301ed1d7e02ae9b08e638c35a33dbee7a9c5197a94444e3241e6ba3db0fa52e4cc2ab33096b3e6d80bc000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090437f605324a97112fa189313a039e8db720b268be651eed52afbe892f370cfb25af3b4d3f1b61313c93845292fe6c43a607364871f337bda5e666f05a64962d76c934b8bdd0d69b773a0e86929a30052c4916ad3f596eaa1d295497439e8746c168a560b7d7133a7390e0e52dae16c87d960ad4480ebd6f704b9052b58037af27c5fb6d62d47e2851158eba1e846db08acd023d599898e11a5e673ba085b8a5a9240493ccb91d178ba9971d308c372ee206dd4d815ba5ea5ca8f39869fb19f902662fc52a80730c1dc541a212031a2162bcf97598c291a33a58b8e5b24574480949fb0d51f6cf9908e127b50cdb521d7cfdfeeceb78c717f836db891a1889655d419025e6c3f8da1cfdaef9b9711ab8c3c7af605f47e8132a36e28010a5013a5dfb349438c700b465b7741de802b53735b2e417ebb90519d2ba8bbac7cc8cf2eeffc761ef399765196b30a4ca28516271cc1fc6d755be3bc563ba9f22a0ecb2de6751b6eb5d4baac2ffa30130b58b24daaaa14bc2f2e60c9171f609ee0093210ae2dfdf2732c0ef923189fcb25f46e544734aabf2e9c129eac4d0aba34317b19d72097b051882e54bb788d09744918c19c31135ef4ef4a8774bb8aa04f435900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e216e59254a2ee2339a07876d8b2dca52acedf1522ad0bec8a7ce9b5f5059f242652967d69cca60766542d75ef347f072304f2b46e3956c1d54b95045bd42aeb3ffbf2647884dc4d66bdd0340225fa33c00f57df400ae6ac1fdc609f56914d9e5f1fdaa2049ce92c5509a36943dd44aecab670a47109c57f9d648fb9b664a11fb3df6167a4ec383ad257cf8c0e8bb517fa032f38286a1935885d8fd84f200471aff545dcc671ea9661e8a3b95f011dfdc75c3cac491b05e4b69a515bf8cee1c72f832ba869be090135ba38f45edff33964c03cc389502a93f6fde33939d50d280d922361ea91f0a0a62d437dc2a7b8d7885e0341078c6ddb918b45064c11cac877ace7eb1aad4fd80f321e5f8531f54d6e2bed9d29eb9ece56be7eb3a516234c06bb113d0491e03d318634a65cb87f932dbea21faad606c5140b737ca3aae4a3f2451689e704cfb00293e24f06db65dac15d938fb4ef68acb88ccb4ef32b513db7cd2c8056758afa9332405975cfabd32aa95ec6164c7a09bc101f06a44fbd9abd168c94ef36c4b3de0432ef007b46f60318dd58a52e4938285d1757e2c63775cec58e2e1bbc1cc4bb8b1d220fa48a304334d7eda4b4fd5064393c19a48359800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001aef396e97076c0641c1a650672787be8e698b5feee7d73bc13a9d101c6843e9db784d39be1a2ba1a72bc24fbc749273dcaf9a25f561c050a89bffedd2d4e0c6dc9bfd971b2873cc0963ce265c8e5ae6fc4ba7f426c7a6521fbbca72675198b6f6b4c5d3aa2822cd152eaf4c75ac70febc2926bb3ffe789c454ad202c52242e96907fd931dca048db81c17a29120c0bfcf252566d4ff033a232203c36e2433ede48a84bc50b20311f8357b6fc340f38fec9c081140c77c11e3d1ac10a18e3db4f873e6f573e819b374203844d4877b382f53ac61321240c93dafc3512290ea723d8b0e701e4b5b91124a85a14a28e4a9ae9e798d7fda6e84f9cbcc302d4e936a64cde3dc2213fb6522317077f04f41e70104cbbf4b2c3ee9928fac010882452a6a2b8dd2904c5c28babaf53188b5ecde7e2503a8f38bb5835ae45252c2857325a2bd20d27c9179f3084a87ab8b89e0b7a0bd34aa61ff34905decd6a94583e0503e6416699f6b9ae5750bb317febcea9cb7cff1cf2d340529caded8a702afae37944ac3cbccd9632943c763a8e5cc69368737f7aa791849b06aa355adecd8e05501e25fc82330055b27127f1e80f8e00ee5cdd2b36f6a89db91aa28cbb8e7dc2500000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484006fa052b7c0734d9c1d40062e74f0689dfa625766904a8e21d9576e5fff6f82a23768d1b7bd6747f9861c5cd713b37f240d233401e432e17c5c26949e2452eb9114cfbcbaf65aaee1f9c135cdee4bef0262c880be5ef0f7f252e0c386a418edf0b13fbf2e4fa0a9924f4d4e6e94272f61f29effd2c4e97bfe00debc020c5486623a4bc7a81742176e886d939d28c36e5e836db58becaf89a5f1fe0e5c4a2334625612c9be4e4960e68e1c6b781e894b1678283f92773b67305e136f4dde7d989278a30011ba8d7ca4177acaa0de2032e925567cba29aae96a950669353b203e62dab3f856a2c2c41e64909e54e47992c9f110f3e97ec9033d78a6cd2e8f43cba26ff59eb8cd52d23dc93ac35cb24c6a0ca44a11aed7f2c2bf565f012861982191ca5f676d9007342a98642c46eb47d263a37f128b672c5015e1778ef435a5d981e91ac22a458f98ebc3ff28e0a648b3fc9b445a5a15b1a893f05c8ad6d9780ec19ab6953bc87c3560d09dd319ffcb6319b4188283f7eecee1171296bbf467ef219fb2ec702aea174e2fbc632335e9e571f3d644570db1dbcdc880fef2e8659e208b0543571158ca25152da8adfcda086b5ec524037122d754abca184f03d4f9823eb40ec0e558dc7149a1860dc362c582e2b720629f16d73968019c2fb3514b22417b3a748ea3d845cf00b92a796eb1ff8b2d4eea4cad3428e8c372332c53a43043a9a7f1796fa4f4b76a4b706eb76a0093362ed231e37532a641f673304d7950bfdeed7609acc9f224e831521b0672f758033674eee6cfd50490ed593e5432e22f51acb1298038b49c62d157fcf90c9e1e98551ee52a71e4633c7b643c973b71d641e8ef9fca6f17b3755fc6f3d6d3736bfb0ccbafc286f37e1b8f6a287b4f51ae9b4dfb0e7baff25d7cbf1435aa8043983563530420cb8a89ccd1cf84b7f8f108682f86a8e5d2571eee7fd068cad8af57174e4d56fd3c4ff82638f060090e92b3c22cba0cff46baef9df1abbbec4357dbe0f8153c03cb5b47cf147e12a567e0fe6d39c3b213dc0df4e788b948c30a4a194e6a3aff38cfe9fca3d2238a7e3810a09906cf9ca84044d60800040c879e9bb0777109d9b4fe12ecba717800dd8f618d296d568d6b8c7bcef7f991f7b473a0f2f24757ca19d0b29342b6fe9ba792814460bb6ec7b53648a4e8fd49639a1182a48c80c5874c9a48f73b806245ee4f014a2dbdcc9864fa65a034430da10e068faf10ff62a8a3505e68505d7254c5ec80117d2aab7cf7a6f523d6c8df122cbfc98093cdca49761b99ea027c2baf5157b072015346e2c2587c5587b56eb852e65171aeafe4482c734781af688c7dc4ca92ae8f043b760d6b2fe38a9699063efff9ee51ffad5191295c8f5852159264af12ec5419edfeb6c46129e4d6cfa5fa058855064e587f5f76c97259f5d0c71b61b2e43956fa55664453bc665e79f6e6935e512403939d729f4a47923162261910f1bc0f45e768186b5376035290d819254747827b6460baf4b9aeb1d176140eef20b5716338938ac2e3d6b2042cf3df58516484e31046f1f6c844e178b1dbf531023e7c81d20e798c68dc62f92fb75a9b9138603b97866b5a5dd0a39cc0799c03112b51253ba8be4dcfd8e929b7d05d6aae4a5d245ea6e96ce04b8f085807894e308d0ff90163f27f791c9af223eed43a4e63b8c122f88bafa72ac236cad5315cb1032635cb9281564ec9a81a5f53bd54ac550d74cbf4ed8f27498433fb85126d612d8fe3e0de7adf00e626f7ee4b9855b97bcb8f4bbfedcb5bc75f774d1eb9d701645fd838c2ea49f7815b08ab1a863b4c60f9f477bd8ab668544e74d022ea7b02c5ef39d4fa83f062b150753aa33df2aaecc66fd88481cfa9d178aff99810a6824eba0fe12d223757b8186403265395d72419ad1e9f1a8ba22067027ca1c4d2d0772f4fdc8be311a201852bf18609a3f7b746ef4da579e6a26fa446edd0777781839a3bdd8b890a413508e79beea5d2f1e4e72952247f6013f682878b9cc10610b850fe82d6ff39fbc01b716764b2e22a35c3a5d8271bc05f83c7f8295e928390018929778fb3505c7cf76f6f48b099246f5298d037ba6dc956e70e885e816720149baf587ba89915aac0154134ae8aeaba42d5771e64e1d7ad182c28cc6ee9e12bb1cbb417888515e5e83a4fb9b25cb30be9505fb9cb3b6e84a59b4f38589d11bb363cc724eb2c0ca2df852f11d64b01721f75b3548e80b81e838bd526f473f20f3fd5a9426357ff2195fe6309d8f295461ed936ce968310e394ca667ccabfd1a129bfaf805c64f7b7439827aca038bfd917848fb03a3172a7840ee3a02d140240d614f856213b8eb12ae09c34680324e8ab2a8f310d7bbc14f72795a685c2a28449e9f1f81d9cc934089f9584ea9e56f4595e084ee0196497d3703f4df38692a57128f417e4664796ede8cddb5783116c84629069cbacc3d8906d52fedf08700434d3acaa639a259c697d9d48c59b273ff1fd56c5ab365c18e38dccc0ef55617c1e819e8f278488f2c9f34d032509855ed1618f948404af4385a2d3bf45ff11ab88d89fd1fd5a91560c208bb656e600bbc3870572ae05ccacae177d8a58fc601dee96d0481a8468bf062fee5d50e04afabab049d9bf78be8f62183b83eb7a82ea5c21dfa05842f310f1aef6583e4bc429ab88215d308981082e7d9123654121746d754c6cf0e6427b14e3861d5561a28335ff8aca7bc0f049f621f9b80988626721b393a8597c3edebc933742263c4fb4836e3092dd93157997c74113c104923e2c4fa5e430f5a455b66016ceffd9ef252eb55d51b85338bddee3b996da01a099e38859082181611c214f770b809f2647b8f9e2b45605316e7f7dbb355a2d8402c53d5e2377903d71779604df1a06f52d670fc6fb9171243e44e48dac5c137540bbedd8fc2c4183c397854071e1365cac8ad305253b2fa8a0321ed299ec2678700056bae5cf307cc230358230f208d432d436717bd418480c1456dc31a70185a2f12bdbeef952d55dee815b27fc6facb0ee5b7100c8d4610ce1dbfdc4b85444802bb941e228fe927d6d31f0b3ea6dda78ad455fc528017947f1ba8b82d5b60121b91bda79dabc048206f4ee0e905745161b8f747e010547dc351aab451c885770d705a03ccd871e56c9da60fdc27a1c9ccefb0613cded354d8272dd4cb38234d0bf3c5ce5375c603cac936bc7a7ca7a8fcb1046f9d5abe1cd026ccc356259c90305b429a086453f78b8a8a16750f70e58a393ed4464311a56a81d10501ea05c01752e6e73e87858c02df8d0d05bfc92af38819a35aaa844a5e354846040089340dff5b9872c2c11662968bb28458b0ee726a912e9512730188364a38b4dc351f2fbe90d35b0afeab33e037f2bbcb706687f2c0c584abde027f6aafc90fdbc22519e772b9513bea907415c97ae803dd2eacf8f6e4e318b46fc49ae17d478e88fa2a6dcf5b55bb5ed0e79eeab78e9170a3079231063a845ce5cc450237588bfaa12c8c507f6600bcc36c999a854d074de8797264d96dda61ea28f71af57bb6dc63279b24437d9ae29044f35addae9b4941fbd7d2eb85179256b5b33f6a7d027ebe1827caa7c0067cf902f7f03bf0b41b60a1026fc66415a9e37877551bba6580a52869e301b34772efa36ce7029243edbd8871321c57cac6c9fab172e4619c5791114835eb56fc3a666c8e5524010a2de3d91e1aa406ffcd79d8bec6ad9a693e562f1f06423d92bfdccade16de196f12992cd480ba4e5ef9e75b929912c579f5f50f8f054a0d49df8075c5529d6f03b14189f83b75bf6a42411fddbb556991a9ac14c9706f1e78920d60db0b6bb23001f05c5876bee276da762a3786f2b97af0b41746f3159afb3efb2bd945a502c091d26e6ff7a514c3e9dd3d248ff711d15c30284a1ce22af1b6a3560d6f66433d3cf5ff22e5668d5ce322368d00471a373d2322b737b758da1f03ea0fc548b8d5777f8e4c21e3eefaf1907f893f00a7d83bfc1de922af577c89301f099a50992aa46c3eca8a53478190bb72d34c46e43ad25a280f92558c4b31a3349b8142073f8032c0192ca3687b59e8e9e1f5a59a8d7e5e17f1f1dc9112e4a2c97c390d17f6008b8acd169028ba3a20f890703803748c562f5504f3ec981e20850c502473a343ebf7e57581b298b7e0c578259ec517fc522339ed260111c83e3b842e80cc5bc996249904f6aa8862e5290fd34f6a74219a1548d2796eafaaae291ac7e957221ab23710564ef8045963e6d0284fdcab905008c3195800104daaab9fb5102b4f6110a1ee64f6c71992fd15b5e4ccf75b248e2d7ad2d169f6599638d19c23207a0930992f4aecff2e9cdd879c45ea4f08dad72a3b820ea55e3e9a78127127bf2a036f9837e422797accfe2a3ae9db1bde9aea1bb6fcb9e78a4c79a9d5f5dc1c87615ca73af537d6be274b4bdd0cb2d98982370c6c49f805611b32c0edc785b76ac09168d3f599563c12731e32aed05c675a870e56925a135772af0024ea89d8201bd39ca6cba7e6accb4eebb75dc7701248c225eb050bdf8b455e0e06c564fb54da01b868f5f87577d7438066e42cb7c356d91e192b1a019b30aba2486ea97ea9d9f7bfb7559768627234655c3f474239bb18192bcfdbd374bea118f942ae7bc224fc3e3bc26904908d5a4d88bbf54089186810fe47d89711257531ce1b166c82934a2f0cff9356092ff4444b022275827e0423237f456e195d0518a28f91d7a0f21bd4a2ec3309d199549f0e6d6f5877a4252cbc7d79d58376a3ad11181fd53465786227502685a95aae45d2b26da3b47d7e0348931af319ab044b7ccf8d22f50ca61186cf8be0fef7fee7840ba7d3e3419f085558ef05765a3ed4ee210b3ee802d43adecb26137c11785f6ee7ecd908ff9c06c03b89dabedff4d2866fb71d106b11e8c3e0d8cfa2a764e2cc88a4ecc3b0d71669c69f1ff6dabe5434820d63eb223aaae3fc714cea073e0e1aabc18ad5feba0b84fc92ac71add7147660014ed0023ede98f0ae586a5df1168cbc62b11271aa19a6bfdfa714249e477493e0da0247810f2953e456662ada8225d5da9b5ba6e11a91eb6c783e90fea472a060e28e1bc4e39b8bbeb1059c13e9f80e8984f5ec82057d72298776b282cc33a2a3426c2461421f71b3ec1700b888c2ccc8b76e250019ed42bd0d1b3fb4cf1c9eb0710a3b613b024826e5bbf41a899af0d6b83cf92526e9b7266f0f1d4f6700674519295ecc0cf27266ff4c9c39af72fa6a1939e70127ed4a22c1ff1afad702c38d429c550677a4615259caf3003c4f0fd9d281250e19d6357fb61a59ea22aed69f1b1c23f8ddae5778e7242610a59610d55b10ab0c0b7542d9722d6caf7b81419b3aac61dbbcd15f5b9b81b81aa4f71f7fa9783e420f2ada8fcd58f637ec1e66ebacc106a4145a849c65d17423f94b078733e367b127ac2dbec796626720b98da1e903d409149152962d2aa0cedd8563d37c29fa182a3e3a21bcbbc6edfb32b2b961dd0149b287838b45fe15baf699a4a4b0370576037d68eadef658f4572f5fd147c0ae090e274cd0efb3c1d45febfccfd530da600b30f5b00165e6ac129fe58f083c79ef06215e575e37de80ccf3f1e6da17df56040bf6e67fdf6a6ccd4d3181ec03b9d7746d96e35e0fef8d026db36fd285f73d080b05227c4b2b1ad34f3b4c51146c865e73b509681fd584e590851ba4d77ccd280cb9d83f4c7a1e0833bd90a36fa40aefff0af33621cbc14597bfe73bb1989f003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000050118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000500d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000500a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000500b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000005029a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000050141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000005025e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000005012978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000502daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000050189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000501159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000005005ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000005005c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000005014d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000005003db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000502ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000501213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000501ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000005014fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000502b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000050305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000050280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000050223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000005017a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000005008858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000502618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000500f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000500e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000050172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000500b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000005005bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000050137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000502e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000502297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000502608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000005018373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000500422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000050204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000500afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000501998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000005028d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000501da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000005021d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000500ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000500e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000050107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000502f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000005009726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000005024f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000005003c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000501fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000050205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000005025110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000050283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000005021cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000050094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000500c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000501f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000502421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000501fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000501bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000050304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ed14608844f07fdc2fbd84cbf302ffe34cd9506e5d1ef707ab850d1a9ab9e53796ba7a60cd2d97d2964b1b648f0ec9757ffd10624cdda9e8ad4ff4214238c534e4c68984155e2440acf2abf0290f7ebc6b699161c2d352829804d9b40921a4d8b8a699ece8db81f5d82ecbb7eddee18b76bd78a6b23a6d1be0ee07df77dd95bb2c636579a30855c79ceb94723f250695be50eaa4183481735db757dc5acc92649192e8c117e574074144dfc69b5b7ca54de2aa888d59c7dbbad1218fb377122ab0912477232d3df6e4eb64971f1a2cff6c8394e1f9c52ebfdf7ad844a907e3715327f3336fc5a802164d3f0b7fa5233bd25d431d973a3674627946c1247cc1a8ce325441ca648d43d266d3fe00ffee424a22a93424f2aa985f776f8cb8da530a1fa6382f14218ec8eb35c991b77498e00b0060d8aa1596a0258f8c2c4e70e3e1662981131f2da64bcc731b58dd605398acd6f19416881f8d825791aa041b7bc7bf6561026b1cd70020a5f9d82602523d4b554f9cf2a03966a2d499e75b9eef0756d3597a7f55f35f2cbcaa971cf7199b3b69c1f3db92df70082a962bddb3acbcef4234124042d046c9b9d0f70026c18af40d896b04319a36a53e15db4f2e5e100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001635856742e343bfc6bec723ac1a4115be8598890f2dbd99ba0b8509c8582617cc9d111d73e443946e1d310311bfd126ab5e4a4fc274cb8b97602016e1bacc9191b938eabe87a5714f3b41c65ec68eb8dc57483f84e1c1d0bf03331ba7c1f234a4747f9fee0744d25780eec61b9e0e1cb4a8296fb05db0b4e6b4158f24c59c833ff63a1402f1bd939e4319a70d351c41de39ea85dfc4534af38ac730ec779d6bb36315315f11d74d9b4ce48263a13f8655b7dfbc230fb16875063f2ca2381ed0166875391d9df585a77684a22914c03b39949ffa51b0bc7e07824e1d1c8831d5d0e48110c88e28d1d8f3de87c04b77c0be7fb04689654743d5d9a3aa7ba97895ee7703d93d99f93e0ada570a5999ac68f8c6aea7811e453480624af1bf748449cdd409c4f120a36b0f1d26a8af538805e5e09668cac1b2c9b042ef594603e695ce0517925cf6c39e5e80c93b8bdf24d6b74ec652a065d28d960931f942c12f6f11270794cc39ce2cea6d7c111c746bfa51cb8afa38c8cd2deb1bd25dc68446dddda21ddf5166cfbcdc3f048528208e04ca4f828b123d5c60717d0f710d0b59db451e7c315899d3908d8449714b6910afc871185cacf384e1d8c8eacc63b62be60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a534181860ca282ebe66fd2b3dd4090abbd83e525fe9842a6d471937eb830598a84015b6fd27edb6ff713c2fb168353d1f880d3c1fe0d39bae4138dd93a52f6c122e4783066a9faebeef00112789f8973e8ec7b7cbb10a058d35f1fb1d90f94ccaa20015ef7b6743b120fdcbae59b2bbfdce156479eb5967e560d0b45f11dda0612d052c5ad80c3995941187c353381a0fe5d238722903c313a40854e312c3b01eb5a33556238075d658091c43abd4d61075d708fe6c9d9dd6928c987b767a79707f64e9d2375151a45d93e117822a3197a278eb98949450836b7c30d31407d1ceba17c62a2255681b594e0656a72dffa8ed51ec22c3b98646fdcc618aff2009e09656619fa79c67704c793b64d6db37b29eec0919b50003d78202317abc2d69c794b0f537ac97388674620270e90ae0da6a22aa457cf948e045b8a69b077e9e65866fc5430597ca109dddc8e49da16117e1d957d1b5d953b3170772b6fb46cb2faeaa4446db2937102b38a7f3a9ca0772df63dd46c6a6c73021bc99fac9f9b34d7790e9bcb67a7d44c80a1a886c84827a1c4f1c2789f9b59b4bc676a12cc736b4929d396afa44fc882857af1e8d4c1c716281d484c8d98c5a84504c0eed4e9200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e880baadb97fd5bd7a12cd8f34fc31a6d2d2fa2adb2c4d2146a0dd626d5926ccba9869c51b3892017498326ac506b8f64678e01750e9755516b7a09b89d6e95e5002222e1ba62ab3be31efc3a1a634bf3ba8c0c661684b8e6a117c0fc84e5857f0e710aad04442c033eecaccba780dcf3871461b417d409d3b5a93977461262890c12454e07cd8c00e4c1ee7bea751f88107534f29578e57dded9a52ae52372bd7f1e8b5dd8f0838b1d6421b9071c00c6642d9af92b3e1a2b640f9b0e3f6af1b35b546a05644d97d8ecfa418c14d9bbfbcd84f05910efa60228c52fd1c9ce786c66426466e450dd227647c3919b24c693a8599251a4fa5df9f36ff87ed150246c44be07b9797d54117ae5b768092cdeb3ea50be2cf3e0a9b6351ecbe5f22b6ba9c136ade207cea9f845d7cba28e6bc23a15b73286cc8def9137612c0e52d25a352a9bf80994a7a2cce42ebed12938fdf076702dac290cdbdba75ad0659af64a526876f01cb93c466ed776d28ef8c4b4965762bad5b261c7e927700c35d258f03145dbcf189302eacd6a467b5601e7e505366048530488dd02ac477500083252cc0bca13224cc6832825a52020af28c8230658bfcc42e28f0ba3180cd43df4b60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7824d6d75af03beee569c68cff20b4dd3abb485dac9fd83be756e76d13191a62d8707505ae84d12689da5ed871afb6799c6c7f741b58768084661a564c93901fd039b5e31d2243cafa4f5802835792fbeae20e7309cb76cc13e8f97d2d5fd37651638767eaec7232bff6525f31b81a576e8f6d877d942b350d09794a93827ccca9e59d765bb989551fd1c26a573db1b528128346f53ff19304eb11cd4536d4fee1a9ddcc4040f9779a037c809832990d8a56acd1fdc080729723f5747912caa45fd431f496e8d99b73825d68df793542a9c00c9b9d502ba91a1dc72aff79814c1319f61423d887de87b09bbd36e1bedd74d146f238d1083f34d53691f78a2053f03cf2ff3b34a6820d54debe47f3fd4fd04f4e44f21dd6b1645078bf98a9adc58c8f77e671c4e19f8e53037a2664349fc549283aa033007d9cc2319e03ed9b8adf4f17639d96ac27439c710649f7c0a66c73a3709488d28c50fd887ff38671a30306ee08b419baac60d52654a25ee4d3ea5007fbfce37fce1bc7b4f4137d0327c1d3c66257af941e54ddef00fd8d8daef4cd05a082f722b4caf32b411b02a5c92c4b4beefacd8133c120ddbaa897d80c9ae72eb8e22b1eac90c770d0012630e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ec71583f0846191f8629b01af0d33712fba5bb745474b6f8bc7ca8abf6f8bd671096b425efe4cc44065c5a27d04922f0464cc955f6803622e8034cdb6dda7abeb7e3397c27b379b47bd5a4858ab52b7f2e716aef9d52c8a3c14cf69c4a5afa148c862b2ef7453bb37bf987a878a23334b3a2e90844a11928cb66f60393a74786a42396d99e01257bf846cd99455e5fd2c1487264a113a507fdd451c67349f2b87aaf7499d901e15f2f7e8aa5611f99a9bcc7c8407fb67dd00509fd18cd7ec5a1e3356ebfb5c999589d5c46aad302ace42511675f82b2a40eb02254e2f46ee618f927781c29a70e2be995587a3da289b69051565663316d22175a43f85c5c52157dcf9bc874c426aee51d05487d4cfa873a675271b9c5b93bbcddb6a679c9e4865d04c56eb85d0aa80409c74cb6d047c3380d84d08eccc306ee92bb0fd1b202fcd667f6afc337ff90f4dde685a60b8d6bcf3648262fd61ff5fbbf49abeb207d47702a8dc11898730f59d8b3131a11710e1d95879fdf30baedcb6381762969159cbf0a647ace85664b7b9871eee2e14656dcdaf506486e2a190ad88810a471583f09971a753b8711861c1e67c9bb5852cb8d5480ca0c2fec65704401086ae16e000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008747701d8ede78bf1cbbfceac0fc20e83d05016821168d77f81dafb65707103b0688ef9e1216e40f5bb8ad94d4bd1358b7887e36751194885fa9b6bf6a49b2d8c52dd4ca2b21457960208aa3933c31036e6bdeba08c0174c2cfc583a0db9703c5fbbaf13b2fd6347c8e513fa453aea2b99dd4a1a265a0ef73c84393fb59fe3bbb03715b85d45085865c00dba3c665594492ab688eb1ff275ef7fd659039223fd910f6e850c19ff0f4286ae5229e7d0b59d96330719b80f7e7bbb86bb3a6e530f3a1825677c141dbd9df13c0698dc4826a16d0879d0b4d3a85665bbfbee99966b22092a7c4143ad3c752d180f6cb355bf88e421826a6bb599d8ee6a851712284034206d13d07ea3801b32797dc2fc1f23dc41aa03948f0b6fcb1bbe9ad1fc7da94735b69f531255decef4e1446551fd92d473ce31407e17a5b69469daf4fe9fd14befe4f41587d8e7f53b28326b5ea7483ec214cb0b5502cb8c07cd6071196c47c4c0135e093375995eda0e9868d03feb29866d99f6c70e78628ccdfa55834e86f2df6f567a6c037f1854d48e87409f4dedddd73954cd3153d06c3c35d8ff14b0e7051a6d4e040d0cda1a11a03f1b0c7a9e0b4c0952fdf6ffd2406bb63256106b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bcc385c517abf4dea22980470db391bec0985e0c5cfd60a103219d7903d78b1eff73b07dec041d2cd2cc76849977756c4984cb64d63a7b2bf756e6c8c9b0433bcbcc30752209d67bd708e63592c19c657c14ae07c7e00891385cf384d34346a33edd72437f7e25c1ef0be4ebb2d904438e88cd6355ff052332f7144644fa8afc047d933989bcd543f98c26e959d465cb976980e96bc1af18a89e6ff2a07ad67488972a60528e75f7cbbeaa9005c231d9227b3bb015bff8bb117040774f8459eacf165052b1f9bce45775ddb142f0c6020fdec3cf83c2a9ccb110a8e77e02100c5161c5c80dc2b4dfe01ab217600063d9138066aeea311175859bf181c9563be4e521a2c71d0d05566d773f11ed2ec2e21a5a099a606e6c72581543de65524d09fc3d5e5c1e109780aab67b1bf2727bcab7ddfb9104c8dc3d27d05d97fefc6eb57a99934c623dc1ca2718a2a6cedab223ee50ad383ff11e4bfc2ea7cb297b5b3ce062d24da25df32b825f066e13e43bda6b59e3790e2916d19994df9418c3407e041e5ad7791f5accbf2cf4d551feba2052432ebb436fc6f1ed367fc6762df8f6c84865317bb806b7997c89438b1efa636e475c552cfd42ec9815da04e559e60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a67feda68dc4fc5c807d2daf9d5bf2aecfbb49af7a192b99c9f9fdb58a862eb699dd3c4b99a163b72290e9e46bcc5e2ad1880aa9dc752a43d1729f403343ce075058a48ce2d3ceb2a716aa4bb81a9f2a16c0ed4fb687032678fe2e1f04b3e00fe70fc84f96372824b98370a4a61c6db3872bdcda88348489b458afb95eb1d5baae62d4e1d39ee13162ce749d85fe8d578201796ff7601c02b554b2ef2a8f93ef3cb149827ec4737051e4e7d954e67b8e98c74fc69200a99311bbfea23c1f76961f3b4c9d2dfc6aaab2717c7daae010e533e36dff8902c4bce8fec6541ac1bdd2b6e588d88365d46b8ac82a3571eb9b78d31b212038140b09554939855877add16af2f29f6d28b93ba66eae378e48bd96de57f9945fd21dc7a960c61ad963c13062640597212071f7de8a312f6c2607e94accfd4f27ce35a4c3dd64f874627fdee1db13829bbc1bcb9665db6b5e530095a9cf2c014dc46cc70bc811403f1c27974df29e1ad30a497231be7b8f67c55a057d63e15c0ef8799eabbb53ba52abaa6c2bbac9782657d922544cd3e30255a0c008051cd4fac18000ce898c3e404b1e0ced8ca72fd2a190549ef35dd487d8232d25bf4cfcf99fc5a17a33ceec621f3f76000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001400b9c39ca8936ba8f0816242effff356bd9de10f5f2bab809471313f920889e9b5607ad9bd5a227e1350270afb7339f9c468c36437de7eeb0b37abcc4b5eb7697cf7267e08adcdb32a83bf796d0cc76eaac7e6da1cb4af1dbc2739e633cc2e8b3a5c35a0b4dd49ae3740ba6a431a31b6b569b2e77727b151171970efb0a89eced2aede00485cec0d60582b0756b371a14fdf9bf5a4b34f98c969cbbe1d86da57ab9cbf65e9abf9983e3bbdaccc53c71671208191661986846d7a0cb9daae80f892c660d1ac9466b15e2d067993b2032b2f7946b8c32b57165af354fbe35016ef563e23ae87a9c79b30df5a862cbc159a5244d487b6baa7fadda7416a07b2ca1655f87b97cb38f5e078dbd2d66e75e9ccb5b1ffda54bf0e7217b812af864a7e8f15dec91b5bca42e6ab647064bfbf828ed5046cedc0e61b0540ae016ef64895bed51695b80dd00d287b505878bfd7527cfe81a65eeaa1b2581eab4a48499b25d3e9d68d90d2e12fb7120dc4db27997ac20a01355588235db820dbc775ed114170eb19774e2c48b59ceb350a63c5f0849251d6787822333be56ec0e2fad94e68da2928f54ca3e3b69f1f39479973fae3fe8475fd69969137716e358ad7eccf60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2ffe4109100604f6ee2c827666b7c4bd8969490bd90c8b08a4639ca27dd1d673764eed408d1a48a2722c34d118feaac21a3e077ef496ae06d8f5224115acc7e00973104fb28d68f5920626b87e04ad5844f6c49eeedaabb0a2f28de13a07bf88f3c9d694905f782e623ddbdb8192eecd295014705299b302105d8d6877d0c2f4bb0de240227ac519a7e14b692096d41da138272f96d81bedc868ca060abde63d3e0e0e982471a80a741c23e7ff19ef7b0ed9e8215bce7cdd15801518ddb70236b04378c19d10efdbf06032a07227106d19c3df16ea4c05ab317ce25b50c660cc9bbb13351c584366cf47bae91653e6c87a60b88ae3be6e7708108c83a31cd741beb2d2fb000d9bb910f754a49529da7615b05f99a657aa7b9c2c8a8158564f27bf8e621efa05f02f4617bbb8b5080234710b7352e25074034d82846f93185c8b6a1724970b3b7ffcf93cf3b400a9fd2ff079638b4f9aa2a4bde78868c54493ef66436b3b83e7d61189b2c4197527d9421cefb92b26f8b959cbf9344f0944542b5f692d21ef7c76d4c16c1963a91993d777003a0f558327d4f869675e3c45975051b739350ecb8e619bd334b5b87fbf6c45d084fda840c95643b501e230400a30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000813b435faa0870b1023349c6c45c115882274f967dcdd82c73c332dca37d4f0c0ba491efec20998e22fb33f1a53320e36d72cc32c66d7abecc0a0f7a8c4c10d77e51afd34bf25833e7031ba8b9e1646009aff419c586968e8f5835a389e02256b57ecc6b5c6fc36e25bafb714138ae3dd272ac860adee7a1c75d6a6d189a00c824a544c924147a17d46f677ef719a3112b3d7fd199520dbd3a66dc54576b2f931be14ba96c6a7e4d7918bdaa2236aabdece103695e09b71c6e8293756a228165633aae24402a22b7dbf12d9ef8f6bca9f3b4e4d0a50619267aba7c8bfddd74898e29fa5dbf2bfbe7b0b1de5c2b7953ea10cf38994dfdb840c81c2afbd2f8003c57230401ef940e161b17ac92a4c1cec8e0f87dd88420b1a12b5d45370440002e3b5512791df0789c64bf7ae8f2860bd5d37b44953061d3e4824256e2297dd7c6172e280f9037e948abe9dd54793a7cbe06e9f6eccfbc2b22ffd0fc96a7bd83b280594b1d2a526f30a4f59e704890d63a0263ceaaf4164e742ab1fc04f9c99ee9abf7837857af879438ae38515dfd929afc8af51773e8cb3a162be08d889c724ecaab40b227f169ef0953d006a5aa57e2e813429613044defe08fcc631c4bf7d70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a18f6257116ca9731462c1fc099a4fad9236c56ac2a525c2600e70ecfa47e0d4d601dc11564e418fd6e6022dc6df327791926e6d29f7ba9fc296a087f559940eb3e6c35a96d389e6fc830c68e03799c54fbbe59792c2140a73ceadd50113293743092c698da123b330e39c1426923bf8c06f5e2adaa226404a9c802d160c8c66dcc7818514bd173137212eab59cb62c04d62946f7d8f04a6d86aa20c6707e0fbeaf3ee197dcb44a75d9295fe336593e33ab0694e4c439cb291e7ff0dacd455af3a003428a5ca7526069a55aa8fc7a7bd57ec4399282880f2090101bfc32763d278297577346c6b887d346fc58705112e5fe3820e591dbcf4d4b0f606299f6f743988f22737efc0c810f6db4be1beb8dbf098334d7e38ab89b90ba98f18229e0aaf12b4cc0703d43e52c8b5911f546b098ad68b78bd33b3e46e045f890f9e9fd3f5d2501a4bac092d2115e63e68c69b20f85643055fbdc606fb7babc1aa15e2dd8daeefd8cb146ea574ea222bf16537d3aec6d16ff797a04db4c6de393fa3ce796025b47072734b02f6962844e6a7eca2fd4ebbed9738099320abe7e936b6038979c422a9a55c2ae5a708a9199a92fa40da8f54ebaeb1055665eab269856fb928000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e98b1d51081ce38f16c4bf26b9070fd5a165332ef81c8f7b0b0c83ce769b75601bd6c07837094bb52cc154d2d58bfeb25dd529a0f499fccb704ce569eb617806acf2fbf1b40db745a538dcaa821b0ea0b3bf00ba3e5d0d0de1c8a0d246e006b2dbe567ac050c37407590125a4e89d163287af9d2295e4c0d649cd670a255d0839354d2c758b4e708d10b7888088e1654e56522acedc006499117e1dc59a5e7d3b5275ffd488211b44e008b34793ddb72a3a43e5dc4007e0b476be826d9a1ffe50c3d91fdf886703403af54208431695a45f442eb7d398181ebbafa5d2a277b7a07450bbfd585f9f643dd75cc3a3a5e857e926ab50d7e05620dbb76fe7f3724495c18dc0091bbffefe69bc2487492aac8898d6de833a553753e9add0d78038e45bac6b0915a2573f24f29979765a26812d90ad167d01532670326c7050c12324068de8ed31cb99c3a1cd9571a91c81b0cd04ce01b6a0744c1f93bbf67d4969a084ee7025b4beeb4be98f1a5a3ada027f313320de68b25421601878cd280b7012655d73ffb580d63621c2d24a015389628a54b5d8cf8be5704ade06773e085cc618539d2a56799b60cba8f28eb100198601cadb6bca2c2d189155f9a9705d5850000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae702683a194d8a870fef9a8f05c175599a760454fe36af283938dfef2e22e8b8222e572d87e5db54be68199c32df871111089d549f4ebac4bb9dc6546b3d30e734b2ec84c75f17e2a9ff76c14ed8de48a7f21ff29f157ebcfd619649632979140621f1ff64f2e7efc099ba2348781252a15a04a8749ead9dbc2d5c26baf9bb6a27449a1fdc35fba4e2600b0978d4ad8d9555986afa904fd006ea23610d8a78b0c2ddfeeb5e8f2c633d92cf4a06d663cb209b02a0c157061a496e2853f70cfd3aaf32de829070005c49cf7aedbc47b40aad8b694c925fbdf52d7a36828ce228e59a7c3f19ab60cf700415050009acfb39bf8d20daa4c665c960d8539c6a8a6eeef4d318f6f8a28a31f9bf4565759fa51a61ea5c96ce68591c6d529afda5441eb8205c852da30e0a6c65c089eb07e86d88cf0e98809bfb6f838e2e24ee4e189d2f0411bbabf5228c447bcade3ef380049832717cff63c3ed3153e267722911a5cf48e91a80eb726691e00472ef2192cc48232316b82e7cdf6c6f8310734c61e857043f16943683fa54a4d565911ec649761bacd0ff06ba0f652646b5793b3a7c9b2d7536c1791b3b13309cf16dc3e835a4f299dab8e789da3369214ec6a860256000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001657643b5cd423a9e4cfe5411131a87a81ced2fd6d968009b4e675b40bc9a665989cc4bfd9336eb3c0b72a54169ddc60f2acd867949be9fb4524b0f6dedaaac1215368c7e0ab6c4b3b520ac2f75f4b98ef24a386656410378fe77bf84d693485af33556f348909792fe7c7701fb10e424ce36bba9812e0223cdaec05e85b24f254c97d9a10328d5d80c2917e93b5e5fba406f72afb633edc956def5258d41f2d97c499daf9cd73aa7f2564881a2d50946de852a765ab6e00deed1ec6fff59872a373eaf8fbf27219cbb1eb6ebd29501ed3b6d741caa312ffb01f9f1f5b101e0105424c3a75eaac9ce8bbc04883684ab078e87de57019be47c21f68ab0a4360f2813375620835e1fcc61c65e6c6ff5399fb416a4834e27ecacb3f4f829d286c14784bc67bc33a1d38a406dde89f6184ed3974268ea486e3e852b174e2383539f702d0651cd9c6af4f9f68c3d04c452afcfba68ff98e8e959d8ce36c831b7f0d2d1c3051ee8fde363049517ccdde5e8a3772e573215ade0d529d3d90ef7c97244e84d7feae1cce479342a0a38d821d283390f0633c6a3d7cd72b12c3efad2e95a62ab100e8ec0a83510d6f7de045d2d8d0e95eda97db11c37f488a35a30278ff10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000298ca94e0516cf0f57fc82683423d6a39b93bcd27d10e213a60d6957e780501d84b9a05a846a6ceffc8be3333af75b2d8a86098d54989685bb3108484d3603a15527f0a531d9ca83e09b5d91e242a0ea0162c0d5cbe75cb12a284cf7b04e29d02c7cbbf52b32eae1fa36e3a81b8d0aa3d57857d569c8c2cc37c13e59db9174ddfa5f3068e1c9109a3f97d72c8a5266b792064cf1f82db9fdf020920fd239fe08e7cc8f5c62183e58be69136801943cb216b85d98290b0d5ed2c48b454ed181656c613a3bc7d08dad713f19ccbcef8216bf029265aea72f2f5c9563cb2a5f51e45aa5ff925590a9dac914b10f3a4a19eb7d60a8e821155a7a7395c9d3c5b81b75cff4b7652a653eeaab79872518e60879a364e5a60a7bc63b0f297d579eab322c68cd76e3a67b6833f76e30aa17cb2e0c4b54cd9a8ee97d511ac5d7e853002800cffda588d4d915947f3dfe3676fe97a37e6602c952c8732d8681b19f54761936ed4c56425c98ef4ba1d81d78609f5b58434f453a64143eb8986adec984a5723b4c32c542f4adce58f57f24f148973c276c894fabf7532ac610dbb488e92d6feb01522f93682b130826bba14d284b72f5ec50f00c8b0b9c8450f5dffa5e8fd3cb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008221943b91dcee139b25ef53b122904024609373d50e18e2b76ea8c2e98ae2a263f0303817d1e8c65e0575e183c9e6bbd8ef4ac64f828a7ef60091742f5f46202eabdd7aed81ff8f64dc5b9c0703f8a19ab874c9206246523bc6ef6b1c5ab0bed93b0723d860f59c91bd5e2de457847d0940aa458900eff1991853a8940484d1d5f7d38e4af3ed381d436803ecf436205e207460a4d23844cd3befcff5068dd6c87ee842689357ae4ffa67081870b145194ddebe0e17c74b70cc73256b174741100b63f6a9d7dc2088b15b76a80880d7df6658825da0b6fc53892d8557d92e755e0d948c86f2d515e2ec73a836a215d19c6555a381b259022d582aa1458ecfd2c3a49a6b22fa93f97a5bfa121fc1f1242511c4852cfbd884d9c81d66a89050a530f2e0771f6a9cebad825e4cabb5ad325a93be5cc38bf19745826df075caf468cf993b67da6942359d99417615b8aeeb44a19f668e2ee4306df848b748617bb0fdb0a0ee24bba9a474963a60f9ec334c221c610b833df25a8ead934378cb375b08fb0a515fc0d78016a1008d4a360212454e49d344e2b13a6facaddd0b21c795116c21fd814cfa16d2d170cd65391f16a8b10099afb577d4fb7801137b8ea0a500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b094f5ea4d27475241d1b37717d28d0040d3ed3d70d8fec0f17b95ef34f2c5c4440602d61aa2d60b11ab473c08299858228f47aae65c2b6e5f9ede428af4655a63abaeaa071b3fd78212c727e6eb2f0dcc99314092eaa99978e65530ede5462dcedfa61306ca3909dfa7ae4b73447801b2ec74c0705c179af2b280321d3a1e38726d846f8da5716fd9435913ad2c06c1c8e560960f4ca6edb819c40f879c3403c6339d645805152b4af07252e6a698e529cad075e75c83de73cef0545f375a2c9012d5c6ecd8b90cd74762e348b21807f9e0cecc492196a236d5fa4bd233a128fe5f3690072edf7d646b59d5184676cda8fba85e03462b07bc9579c2fb335a11590c8b50ded6c9d28105ddb35ab7fa4db8aacaf504b0db02144fb37bad6493df1aaf367ed7e61be9684e31c0fc0a175173afbaaf22a13a2d3f54927e1f5747f6f2ec614bcc213dfaef17cd036ebf8f871efb4caa4571db2f423c539928b5caf2c692ddea9e71397edbb20b38a0db074e2b659fa3a9d688961c017c4e5287f7d0f7165176b86422867be1875574dc408f8919af936833cd44e581b15f4fbdd0cdd323b181b8396682a83c03edfe27a38478da7a369912dc4b991607fcd52c0750000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae66e7a8eb4046c748105598075f94470c64be2d055957358f914bd4bce43ea8d56f6ad089e3ccdb283d933a9f3a8c49748ddaa656f440f281741c2a0480ffdba3fcc04269ea42d71f11579f6a41114b407979352d5b682258ca449d5409958746f2dc2f02c28e995932ced4bfffcfc8e4a1ded180ba6ba5972da067a1abdfc2b394e25ac457d6e53c94b0ecf1fa2a1b18132589e9819b2914ca5fa21c23659012a97efa5d08486af4ab466eab02b17bb8960af8a690a67b23f601117ace690678c6645cf200ff36736aa2ea368c5dc10fc1b5a1321b5d3c54d32684ef265290a7898f8c95643db6b4c8838d7f07b50cec875dcab52eaa387ea10a007fdac9959bdd3cd52376e9d91d34947f3366207a108b72bb93189b61db48485ee4bb18f2417f60a655245e565703fa5c9c5c5697982b4b21714db61dc1b2d5c0168a2121b125f068d67982daec477454c683884abddc485dd6ece930da994cc506e7db141fdb4d8efccb13005a0679371bebc987b475f2bed38a516fa297c1f44ef77a167c3adc601bd10844b0d6e9daae664684cb869025a1306f90fb9b3a30ea01ec368fe06d472b0dbe368593d78f1d8d140264e8d6ef458994db6f9e8d15dbac8377000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016430ab0c2e093c909ff8a2831c2ae3369bcd35c07cc0c744bac5439cff4aed19794d1b49a38a84646acf591dd216121a14b3f037dbd142e8d59447ca9b142f98f9611299c2a32e86a39b4f67f0f9d8d98e55b5b929f6f8cc783e40880caf21f9ef706185af52c8bc211453f49ec69552db83951a643a284dec4c472ebcadd56ea77711b67e20ab72c2f9c476a9a6b615078bf60234a8bcf0e66509dd1d73fc4a1eb909eeebb77f1fb498cab8b5cf4a6c2269a6ea8870bfba3772465f7c2d05e3b550d69a3615a252e9f1cca5d769a5a677ed84438bf9589e9f7cd36054f2e6a77e47a1ea9f18c9ca078d144e5344a996354a3f6261409b9fc4cc4506959c1e3eeff4fe2ddab457608b889b12f7137c393b6b9a9c86596afea1ced0c3cd6ccc0bae64cf40a93ab779f700b1c5be44ad56423bd8b104caf0e8067c624e4e6bd5c73139a6d8b0fa025daf8f0a9673d3b8c949199231fe26240b1f4208f6b2f039b17f73a012b0ee9c6031643576d0c0b6f3cc855d9bdf204a3b84fa74bdd509f300215e6c39fb7ffc5dd16fcec18485d495103cb89d95a42938c69abb0c09f0509abdb291d4edcdfb8fa7e61deadadb32e118572396d75961bfd13674a278b3bb900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ccb62dcff6e64d3415006457defb27ccfc94f23493a9b3d8e54539266d90e13ac5c188fae25560337a680fa0c8ed498874005fbea578660fa7ed8076ee07b82424acf6536c5b3be84046592ee6a4689eae07a32fbf68888de47694c62b92ac49b9f426de1b0607330981a0bb3773c082351a8f2796b354dc2a17d8c0c7fccb9f22b29ef52c8df8829d5ea182bda1057b9739c310b8a328396ca1b6ab8f7e47e1e183d02b9b7df9bb3821347f14c1af28a49febca5add13d2583bac84a3fc6a23c186c16c723f1bcf928683002431410b90d57b806a18e89fc17afe1c3a07511e2a5e8a324dd9743883bdabdffac8f809d1682bdbbe4553abf76399d7fa55ae5f05448b2429557dfa05924414a1e290ad75cad3677b33467488c9ca09aa4029fbb47ce41357085bf100453317c545356fddf04258cc01fbf326340797be508c74dd168fe36b4c71bd94223080c31f911df783dd99af68504df602a27813654bee99bf3a4c677459823210d906efcd2056a0f30d33f37638b69b679619de38ccb1ebd05d01f5f1bcac8de41dffee395c9f0948bd9850ec0bfc0ba2d45dc9ae1791f797fa9f1d29a9d3e68b616c1892bd2aae3f4e26c9cd66a0f3cf71b66654dfe00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008745003757cdbb218d280167059e1eb6ba8072aa090e3df488c11b841cef4b2f624847adc17a54a468768467b23d816dcdf2041771c108d6ea363b151502727b6cde1ec674620c4ba03cbd1016c4b0fba9e06994fdd1d48f830bf5c553f922716908b39d4600305c6e2e5586a106eb4f79c5fde65e71ab18570473d3eee917b53d6a3246a13c9787378d34d59de51b8f40a6b830d5e5696113461d1a28c952c85e077fbc08fa6109a87b4f722ccf3f6348c1e69b5ad66422d1ebe5b3679588ed1e9b3c5a7077177963ed72146d1541bb4f9ee2f158e8adf58ef4154fa723244fe6f0e6c5367afbab55e5e225ab86b24bb491147211e3ef01a71773d9b9b83f397338a1029c4fff44faf900d62a17353993cd5bf12129c2d0e2bd463c374d64911336d16691446b794ec4d8266e5e628a45d19ae98f80642c178c78a579d2b4ae0ee4ccffa4266438e35a1a83d7949017f4c083f6ae4dc59d434b717677c17020a1aa8a83642b845dd095dda7fc9038070b163920d70e636f8fcea2f2627c86e8f56133bf89968ae47cb2c531891518bd02dfbd7471d480c3a0bf0bbb9e16485b83ffc635487354be24a3d2a13a181ea6fb3234c47386abda6d0ce8dfe3225a1f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ab0c39415a122bd67915934603cce59203850db8389cb120cc97f916743d9bbccd4baf186b11d0ddb6ef245b34f58cd5d487db4acd9e64f542c6ad04cadb97e0a3e61cb5018baf4971c789a5b76ecfaee4d3edca8825d7664eb7dbb163044a900d84fd59617a35df46f620d97cdd5f83ca504fc8029a7b3737b48f88c4572438cd1d4c9c9fe0170077b3acad2d1b285e1dd89dfc0976e4a75ea8ade877616fd7709c85ce9a6bf80e510f522c7edecc00daf7a6b37b727d120ce58699b13d8e4f5b6c5a32bc74c4030d4041ca5f22f9cfc01f146ff18e3b7a7fcd64f1c930ffbbb336f9850f85bf452d91ef80416a1a44eb84342e4b84303158d7d580246c56d9a4737d55ae76c19740d207965c6b63ef044a9c7c97eb171b566b8e17ca89af54baabb444a0d893714c8bbe8f00abbbc19d5a84a4f1e3ca06dfd328595ef458a4cb33b421389a83d7f179f9b3a9fed05e9b7af3e5a00f99c87c4abc16cd5590ca9ba88936b550cd54c12ce27366c6dfc929f445bd98b1b08f98cf22f9dd16b625801d9c542a5ee2555cc4a58384b41f2e333106de2a240479a7b806a90149040f945445e9f8e826326761d28058643a569b166c8af4717c9c90f1637ed0e3556000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097b04dd5baee3fb35417721e6631d3c60cf7bbbff70e8fa64795084e34493d93215e04e82f76815304189fe19fb1379744539cb705e5f4689e222a6966e26100752660d007cc76cb038f143b0beaf892a8605e6b1d51c9613639b0c3a5f2468498ab56cfa5581bfdd00762e9e8a2fce33cf9d7b105f087245320bce34664afe25419b1b30d73bfeeb42c51e4ee14194662ec83a89f3b0d9aa3fd723c6eb5ffaad59f3b0b1f12805ca5b68ebb78e8b0e27c80f0b7cf3b667a4657fc6b7e010734f17855c0f431145bef8d8c3d37f026998f51acfed31f37c9faf0fe05173d8fdbc8fea06fa69bdab13e00726e9ad63c6c4651d309ac19c5211f662ab87d2e2f1fffc68823aafe43d4e260fee490bba388d370863b22844f130b69cddf3aa9d308f28e8f128a2cdacac2c1701205006e32a8ac29db3edb80cd92f3fca48d4f80591652d7573b6c697d636366fb06a1def02e950bad118d0f5a1422ff1ffb4b40bdcc616e223516127d1373c3995a2265afcf58e44d76c77802d772ddb09d783952ae1094a82c3e0c17fefe60f6ce27a5d89fd639f7b3f9036b32424f2c8d39987896df61cb36709fcdb9639d2f70c69d94684b372cc462aed82c3e466358a8558b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001821c41b672ec1708689faae5aa16971429ffdd117db8ce869cc09695cdcf45820a57c42b158d6642c53b4be74978067b104167a43aa03c60a8e99b1c96c11fcf10dcf2444a6575d2b2090266f7072f8f7e19220420b670d011fda2357d27f36ffa53aad772919a0a8effea611a1e82ef4f482ff35b580592d32a4a8b534b64b9dd5e14a3d2f654ceb95d8b292b3745dd07cad5f7d105f34be8c1e659170cd8cf2ffc2b393c439b971d6511536b27e4b06b47b03169f38295b7bee48afbae3dff9e660b38367939634f30d6692ba22c323b60807c5496bcbdfd8dd1ec56e4ed5c57842e1a195db0a8710ac94b3669ff86dbf8d642b5294b5e02e1f43c02a1277e664d588f30e4c31fb56a70956f143f931004458b42ad475cbcd8f8937ed6a7af7b2ab8058d9ba1380c8e35152a82878cefaec8a6b441a0981393cfcc032f19d9b83d292dd3c8931c76fbcc883a960e2e067607ed0d78cdec73a86ec2852d066be102eb139576ee10071c97889f3e751396d835ebc3fc5e7de2c8edcaeb3a7f39389b04b7bb6be119837b536a3bf60b36cef565e232448d95bb9937a9fd64662703c14da1c2a5c0bb1809b00f90649b8cce54dfa08a496d4d0e24e8276702a7b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac43fdef59bb9e2556cdd315280b0b1d62142a21e3f940668bd0e9eecdd614c2df07f61176bdcd66e82d68eb81d5f9f2af229180705e572af5ae1535c59eda464550c78f6e37c6020c2baffeb6e028ef7c76d06219f4b9c38acb677ecdb381d9ea5de994abe993a9ba7e1a2d16e8215107a0dd224fd4e7fc405a9ff3f7edbdfbc137fcb180ab41ffe46357eabb44f1631c3f496701c415c92d030257d036cb0faf342343205b72c0d2e11e43fc9546d6ff1eebd8810902d0051fb6e7116052fc6c2a0fadc64fac6c5d567a1c0877f9710c4bdd9afc4de13a18859b9a1c2feb53e790ec8f3362d58591151de196f236413ce26d1bf9a301c63be4f6024b889e19cf4e1f1e8646682ce8c1233c1a1ee99a05be8f659208e181834a03986c0655ccff25159df53f9dd76a1716a681a91a8b591b1e1334cf57403911f27b39ec3e3a6a40cbfadfdc1f01f272cc7a74a7eb7012fdf60f12c7487e2ed971d888e03edfe5a8c6426ad60c8c9d975eab23540d4f9623de12f2b28b2e3a6d8a1ad32f3df428bce7e2cbf172333798f1338161dbeb5e8bec9914dfe7e155cb1c0acf2bcd3d83d5d7033e4733ca1f3c453586d02fe816d8c7c4c667c63d312533aa6af556500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002dd5807e8b0db4f20410b91ec3185e32539a1a7b7fdcc83245d24390142129d3e436f53f3ea7234836ab7260849dda8fb805b612930dc977038b811e351591be9763aa40976648b12881e5f1204c17ef6cfd823c1874bfb61e77f7058dd815e55a4ba6c3d4da6d115263131361908440a624999a2e7c357cf85d96529826c75f5d3689672c90ce9aa008e949d1185eaf4db26de06e199afe4b22961d6c165eacdc6b1986c3c1523f39ceee4b1f75b039f64bcaaa86fbf6a82035b1f68272df3b7a0b84e5f040c46a029a10c470d25ab405eafb33c2a641abdb510072ae58c135ea4671e7d8d405ed989e8f90204fa8a022dce759a6780344f13a542c424397c118845306fdb47affec8c136b7d73b767f1ae140d31f75c4177eecb9fa134c5b68572e041ce92347f2285b3d77d4355fc059d2fe27bee0b6a9608c9bc5094afd97941d409393e5e6508989a2dd418caa3100dd9269842a7d9428bc924ef1ad32c0efc34db88126d207209c4949c16e7d563fe1fff944c1c8e8f0e789c5f82aa27f190c9229deba1e04ad77537ad84915cc419205d66d06126a2f538dd0c3de7e764dfa74ab3f5c5e9a9580954fee07e5d58cf5aa8c1ad363e1e0028d501f1446c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027362da309d4810f029a9d11e725b29e3962a51553d38441b912f40fdcb19ec88e74d1fe86d93f8612c87d5c7a2e7b95fa0aed9099ed8174347401ba8db31bcd274e2e1391373e18a009e030c89d300a6425d91ad64552dc3f3491e5f9c0949d3c8c399888cf3655d680cd040b225a9c38c7758adf49fd8dd5ed82f9f27426532f952dc1a65d6a04a10d0dcf8e265d10134e65de96db1624e1cd9b70e71f768354c4361819e522c4ca65bb08d9165bb5820e743a4e307e03249c3e19691a25053c1cc2186967dcbb1cc639bca5c5db601e9b109cb561f79b51be57e7f87275e4a50009bddfba72d0a474943ad013db6c0dd3fc2d0e3ef1a2ca26dcd504c7f74ef602e3590f31d2025a9d4ae562841cc93a2933a22e887489ec90f9f53f2b50257617516ec1247cb801ea20dc2997db849645e6110a607d117a4b16189a326c1be3a6795e62a4c795ad01e9d64824ed6042078a14bb0cc62f1d79fde432e29c73a85f04f99f6bf5347aee6561c49e0c0eb265f4135abbc042cdc16d2ff1d34e887a94bc8b2dd6d1598f8af30b680c69f630232bac3139300abf07af45f16d8697b50359fd87ca14ca811be409e90789ea4a67edeab90839f1b5bd7a037172836400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f9861c31c71803199c59f05e60ad331f8c1124f3307d7a7f518982b9ad1a05fab9f252ea49fc09d52f81eb48ec6b462533746ee401e4f3a2107eb66a7ce118b78a032335b4e54e28fd044d54517e9dc1c0a17568ef2c79e37c4cf902129c5fad98e5dc86f9381e798c1304fdec166e03c03f42e831e73a69b44549fd7da4e731c48c9c4ae88e7a914dc6539e59acadcf4daf73f83343021e7b80b464452e9c79d66aaec5f356f02790b56a6fa8b673858b8c3ac7276e26704d0ad932e7057d1661047720e7364fe0e5aee27e2cbd338b577c107966dd1c5d142dd4a50c0f9684010aac6c9848ab9348b72460107fc1b8ea4695f153f54f2847e6eba2fc6c6e47b684d8483b1f889b83875b5ea282240a744054f7916707310c348f0b1eb73083f7373ac76b0988b1479a6603392c9eb555170101c6be9c00438e1a27cdbcbab3f7d6bc6a770ca59a80c3b260ef0dea9c951dd19216cc50499dd15c27f3c583992e7cd71f9f597463d7bda89a8edac4b28d376230f3da3be604303304d079242104ca2478be134363efe16679b20323ca950c57d1540c9541bf442309aea3addc578d31282a9a1e17d62564437f6bb68c514abcc25af38dc0aaf586b7a02165b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a07dca93ac3c483ea3e708c4c8457df7b11fe35e6322343984d525a15437d9d325118edd24450724bc7448d636752577b4db86ce5bfaab3076affeb0974396c69cdeffae92f7ba25be83df6af3f6db7fd8c65a87d79935613d163e3580a63b2c6e87d06ded2569062c8fe54f4395ffd40232ab56a339662000ca2f2040627a60bbdbdeb1cddfec5fa6751b3435793a926dba11d363e12ed39e5069dae49745a029a4c087c373338715d9c91d8abb150c771ab6cc85733b7c7950a121b20c7fe3ceedbcf05a03b12769b544e9c23485fc45a8aa74a1164a289711fff369cd773190077bd53397112d783d218721fa5b024982025478e4d2ebff13f38e53c4944eb4fde34e99303076da0cfced2decc1790666dc1681295d4e3c007b540db16d839f84b98d76d6eaa161e4a830e3f8b7b1f167f5c3a928704f4c5c0f98466f3a36ec93aca0c3696ccfac0c192486b7f56c651db69dc4d794915e860459e12ba1c6c9537f27b6157cc6acc4dec3d58c91295ac82e01be737b0ff194d0a962f883b707f10553e4d404d530f191789108bdcc23984bd5b2f98973d6e470c6041f4ae2cd8b7c61f07fcef558ba10d9d403cfcbbb293d23cee1fea97ea40cbb9c1b142100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adfd151676fd2e3148b938cd6888785382624cd5d5e39e7d21d0b027aad65674559f0df68cf86af478d11537f17903848e3912771d318a2baf4024935c1d945d46c3a299ca24b20cea028ee9e2b4527511dd8a1d0a66c3dc67bf503cd96dd2d1d1618b5c6bb6abb1fd622711bc01c858aa8d44dad1a1dcab56a8e6b1d01245909f9e6505c9d69fcfa444053093ccff0c79bd42ac60a41299e954ee104865cf710778334dda42d0b36b5c014cec89661604aee9e68298514c326e3d0a34b986e659b34863adf9cb1d4506e9c4101e87928462b6e3591db5c7271bae2814640e8b7d3eecff3ff8a17f97da72c52cc84048c156eb2b1dc5fa0ee4b52708670eca7c81b01573a4a52b0fb04b382e4b2138e239d1a721ab942cb2b9a9deb14f67fafc8b9ca5d0ed938da20f04838adeab627781a255a0a9ae94de6c41c79fed31ac34067c9c4d69af87dc6541aca7912ae41abc0d591aa473245a09c1cf60553bc7d20d0c8369e006ac0bdbe3b01b69ece5fcdc2f7456fa31f0d5300f0d4e5a766764ed7c9ffc53ad56b69246ad6b623a1c67a03f8621ae9093658ef6c41ffdf69697d7c8d965d7440b17f75e182841785f6ded166592ece7afdae7e2229c59f3eef00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001259ff043f8412f4fdcd9ffeebd4254fbe95aa7e79e037f64620e0f70cf9e7fc2256a4d4687b0d7b84c12322702c4bc4f3a37608ed160736d14cb4b7fc77694327769935c77036f2b8223e8407aef52177b6010d8733459da788d14c33af6f885afeec67e32dd8383f0685d4fa75b4a84c8dd4ebee78cdec54bd3cc5bc2bb738f7d22845adf1776dabd298a2cee78967352befcc20160d3c2123c9bd5bac4fe8ef85b0b6a6c4c4c4018d2f8380d60437a35782a91f0ddf4d4fe3304e17c0c8adf304bbbf9c09ea452a8edad4ffe8f77e0246afae7ce097b8672034258ae1442145a3e978132b0a484927f20a4a0b5c532326c8ead6ac130bec1c99e470cdf7567e5cab9bba0a8766d44e4ac6cfa82279163c593624f94b2f237f894aed38f3cc9d99d0c9acf6baa74ae1486f02803b942b82a912691ceb33e79f512643495f732f0fc523024c345616116005455d89ee9c4995d56050cc4c338a0b54d02d3fdde2676490de9c33d4b42846f495b8e7c13879cbce82b5ba20bf43249b62dc34b39d745b581d4dc3c77a7a803b2cf9bb6c61c4b21010ab817922b9cdc6bcb56db14f5097cfc077b8df2a486d3e88da798254dc9ca626b9585d18fac6f07d0ed1b200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b768714046b32bd1c3c3100ab64f049078b018a95287b41c23b32138a92eef62acd07a19a150fd679f31959a886381928bf7eedbe02bc3e7c80d1c5b90f8f67fc40fa2015f20104940a7b6747f68cfa68e79475c52a6ffbb6cb53a800d94f3cb078b81cc2c9c189e0b47064964f9eef09064a2dbf0089fb3a726dcc6d3d20251a73c7ce066a283690a9e0baafb962f12c3039006c40ab3cd27b440bb30c557e21041efc782d0262dd0f4a5aeb36b2fa8f031c0968804d3769b74468548d40dd3f2bbc93ec0c9e314c5704ca3805baa5e636c8c5adb2683302caab0e0aecd8aa05d88cc80876f35d30a7d0adbcaf606bfa484601a104cf4f1e7c5ab8ef7560ab4ce0e55a5c45480ad05bbec5db61be98ecdab4ea8352d23a1a89a2d7b38df2e836aa9e89fbaabe4e84ddf7aafca5eed5d349a0847a9d38ad92beb791fa74e5b23ec911f81db5c8949445b73f1c1e7ad51291c8191c7280c39e31e477b01fe028c572d27c031823c85a588a6aa0eaa8551b54c0486a8b0484d0ade2494dfbfebbf04b4ea1714e6848108ce3e0224af34754a4158c040f36b727a9a594c6ba9191dc749e61373e7d2cc4a51ea84488eaff169e2473e785ade1997291658b7648da0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9b5c4cbf467bb50a5d0def4e79467a3260fb000d4fe890735352dc40484038283cd17dd89e59fa48f85fc0da4831e7c7b3a6ae0a0339acf8b6336eed5e5aa1d690a2c09bfde4ef0a00c514ee296262cffc8ed7957ffa8a9954abf7aad8c87864ccb0b8bbb217b7a16d16e32ffa418ae97419eee122f6172fb1a799c63feb667c7d28b96c06dea35399d1b80be027a5f7e7c8025b614f76c7c3620ee3ac63b7a4e6f05b2470b068f19ddb39c531480a41939b31556f162bc627dc0ea5a2a23e87c0ad79f5b66279bec411df2e53c7640ae4bbddc5ab2f01c410686e27ccababa115b9f70b2020c810a8603fdc899ce9f88f3e17cdc79fe7d141be02050b59718f079dbab3397ea01adc4b85a7440097aa007973bcdd6cc3c7be848d68289888a7ddf6194e5b5e1dd3536185d6aed0d1fa8caf1e2f150894640f341b0d05d9c2cac9f4bc531af74e8df80e121e3645b930fe4eb072cab13d25d426e7c623244fac4dcfd4991c669e7b9ea3afb37e7e8fdb657fc2407119904f13029c98f518239fe2922fd91166fd9aefef933a2e96c091da62581018e2486273c45ceb6ff8f263f2b7b03c9204bc27eedd5606c1a89213751effd0dadf792cee05de757c18b8f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000247018f3fe92417fc4eee9c51e003f2574c68e7c76bc48610a7490c6b7d9d9a2ea8a16545ca219cc631514789a6df05867e74dbe8366cc480e40da8109ad24b8dbe1540b044087c80908f022f1258dcf70ce080cfd2c6ae1a175708315f84a83df1591fc2a9544a0f3a83750d799f8d18988103a09ea4590df2c5797712088737b1e94dbe8d91e754a9234747133958921a2fa329a1ebcdc3ea0b73733da92d129206a52ee8aa24207a1720626db74147505aba5bb829119f5463cc5a3b92993ee415847d0a402e7309f483fe4383620d0a80ed18615de87517cdc5b53d66397abbfecfb9c45d71fa4fb8ec8dc8d39bae4ef3db727c0d11a7c4b36eac9f925d7bf6dedb9f167bd72ec79c20d6d31bd1253a58cc091f2c5cd85e7dddf846100a743df81d73f55fa729ad2af93be90a514b780458d4f7b9ec0011a8baa762179f17d7dd8c6aa325970825759106803994f8d3cf6784c99788dc669682268ee42392324b598fe16870e0b06e2062e542e7e79752754590df8f5a3a0bdd95829a5230e927ffce971467e67f6be02bd8642702b9038f6ce162bbbe0b94cd3dc0da96a1f54aab09fc86fd421284e540192af0b1639b1c367e9f7afd7af94f099cb7085000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084ef53acb5e7d1b6e3014a6da9e2306aec27273e0dcedbfdff9f120c4cc1169a2db096ad625e6f502d9589abf092ef73a05f0eeb2f3fdcdcee9bb53b35ea4c6271803d7f58369df1adb6b3b04b0b4380f48328862b4e4e7b853911a70abfb7815a4b62f56cf0cd60adf0a119f715a0b1d3f2df8c07e39da180053ce078cd4dd8e1f94f74e034179c72288db7bcc452c80b5574fdbdbce5ff6b0b5ef2fcfb2d5d8f023fdaec9181f94509f2fb857a53fa27c2c95e154ebe7c290e1b49ccc76dbf6537541c4342a59da9dc0f5af8814246526350d46b229a86e6bd707d40c08e9762ff246340ee270d2bbe2faf29c188c97a68549633c7b459d3c2e2dce5c86d34980da858f91b070aa440664ef6360f038c09d4cdd1367daf7b14e1da7eb27743476e6dbd9dbd4c0c38b75905a2b09f46f8b2d2f495a3516238a402853f67c53ca77d7b9c8c50da0ce64aa2803129e9dd49cb3b5e57c6b95601f5054c2faca8bea4227f451ac3fa6d629034d598a13e99d6999a123a2f400d90d20283888702848812780b073d297c8b23edb303440e938c9ceca2cac310cd088e4008eb9d1197c25353d682ffa40146405348b3dacc0670f71091bc459363c482eb6ca2a35b5b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000318081ba30af61dcb2ffd2c5e0445d85847a2036d9539b33b0b74a25c83254ce227198ce6cbbe4330d45b28b6304105cabe7626dbbc4b58193f1982504e24315cf0653e77049c8530f21810a404de621bd8f8513454bf8f57718a7dd3c835208388104e8b609498814a0189aebb4afc5bec1dbe10b449d1514482e73cc56d5b6266fe4886ea199b3208d3de75644ff6aac92d4c10212dd9fe9fbe1774114348296fdfda8a1da0df33776e6a8683866e562977888da5ccfdee0dfba577e196fe2d6976acc04a9351f2e87caa0d5f8837be68afbb22eb45a41725ed73d8173480580cb4f20bad62f501b7169c450a23f7a73da97aaa2cc8282d41b2f39f81476a61f5c261484c659fc52fdaa51411d81c92ad202413840a4ab8d9c1e43e5bccad6266da92d3d66152706e578f3e3bf6b62e55a1d5c113ef323e599b2decc8ee66a8c59bea342d5bdb99be26a06ea30f7301a67e6144b77c755744808758d79f8cc3f726b621d66dbfcbae842989c302820335fb5e22ce734f570da3e557422da6e4fa2af27b7fcf92dba50afef18e866f2be5eb99df979ea870c2f49e7dce8f2d3108c187c1798a834daf3a3fc9216735d27142dc844847cec9ecd34c03ada890000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afcc84d9db6a2ad7e227f5900100af5876940168c4dc1eca034e2e7facf5942633d1bd372850bb4d4dc4862c4d231211f006535b6011f1f8371d299d07e7636dd0925c490e42b603cd17a5dd5e1f3e27c4a17c15209b4fd26c6f602d44c3974aa313acf15a2253aa61f2b4926930dc96b2eda1d63006a7ad115c8af475bfe4e75ba0ff5bbca771810c832f0e0a852a46b3c984607864413dd8c320049cdbd9ad72e3a7c9b3e48eea4c30e8b820be088819d1a82f523b52ce938610003ea57b622b7c69f0fd5f17a718934a594f648d5bc4ff5531f4f98bb24e8406fde47cfdada8a3cb5aa24426f3a5581747baa325b542aa3795bd385c0d4598427a83c9cd2228495a76000a2efdfb1f7d10082455ff29114c34c6c8eb811c8e5733f4601d2c1d38e464666063cf27e13fb732b2277e14009463f6d536ab4b35a4b0286392678759e2112d06e65289ba33be3b81402985a42d31636991a664a7248e2c9d358d16e4b26afc8728bb06333db24b4631c6681e7511d53b9c6997176b785f592783b544a753c0c40749cd5d0c51492a0282722b6b10d010607c5c65abf3b3f2d8660416f41fc5ef04972939a56590b249afc3be1f80c54621e0128626d83ea484cf000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089b5f18b0c29e5dcc1a6857a67426873ef4ab54b22934a518dc9298dd8375d2d3b1d76779de657ed814db8b909c3b9184fa61c6e5a0bf4d347d727645487092eace36c90a420d36ab10147be5cbc316dd56ea6433e91bb25288b9512dd3edf4323d7d15322f32b5c7c8290a030081c1c0e01211dbbfa290f15c9272ff61d23010ac196a5a0c6563d86133b76a1970a4f5d5903408606651dcb31ac2e9f45f3ca4bceec152db9d8d86ec297275dd0ad1d51c46e7be2e3216240b910a9a8cd7cb2d08cb87d740d22fb32c7d5a1a1f02357e181e778c6072ade7353ae8e4577d1dcac9f20c2fe88213f06da8d348cc9fd1ed641d57942bb473589bf77431f8c6259842886ab702fe4949b25e5cb076bcfb3df196180fd084d4b4586551d78570f66ebda88b16592e7e0782c06a33a0ed36536d726756cf7016f336d8ab2cbfc7ad8a566cf8a4c9bc65b1157c14aab237fbffc84df44f4e13186ec5dff23362078ef179d8766d162c103d7cc807a09cd7d25353e70ba372d0c2bab383522fba1b79683e0c33e420fa629ea230390857347585aa65090b3651cc1457fae5ad38be06968e2a0a9396c05cc145db2f8854dd81b2584dd4317c2f627811db86f56db1b26000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020472d51756657956b51bee66c3db0b729d8609548a7265f609b2be9be4b6c2aeffb6b8a4e09535b340cc5969bd313f8e90e3a97e8b277ad594ba002c63f73b36c46be6f858de14ea01a85e0467985461d70db157e475ed39fabd14c85f0b5e1280e52c5e6e57a97fed60d4c88146816bec5f2bc57f8d7224b4e8c4d13d9470e4cd4899930bc09fd5f1a6bfeaf2b22b08492d3a5c4c9b968742972386ac7f1a1c3599fa91f31db6bfbc3ce9c05284811aa9bb9ca539fe5ffc5b50aaaa01503107d81e58acd51150b369aaa3d1962982283d29fdbf76b3c02107893cf7f08d8765391f4af3c90896b7ab843614b5d473abfd69aeddecb21e40a0c8f9cb2f8a394736597ee5504ee17ab3154aefeb117aa20e9daebc3bdf871efcfb0602259d3ed7dfd85558fea496a8428d1db2649054f13268e0ba33241a3d2da094483f54b6828f43b20da40736487b0af01169247366392aca9e9000f676b8bda0085ec6413374622322bd6b1b56d49ae5174b85434db94c72a23e82e225047f77e4c07539d0d542de87436cbaaced8c01f21edc9b030e6395ac8cce2557303d16398a383bde12dbf432c64e694c5665792b418f07176ac51224af6108a230cb37854ed052f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023ab6cee2fbbddcaaae1088d37656e2b988712e3327422c1878b36d131738399049254a68216e750abcbeb79667f4269540c2a48971b8ac4d921fd26d0459c22bea09d19a8623d761b653cc146a50d69f2304c054461c07c190d36f397b5d2123a611b0a8b5711e7a053eb34a04ac5e30069d254e0f0370ff26f965b28e2bc8f1f69785b2b9a8c6cdd8fa290875dcc3fe922643aaf21e592f4b6f623782216d704d2b927b6fb1c850865892aa159a5fe122759d8b576aca69d2f482db59a052840e04de2c0d2b7c95bf2845240b0532fb25bf1e0a9947b4b8893addb2225c9113adaf6fa95f5b8cb825bae5cd84a8e273336214cbcf118fadd2b64d0834b9fe292ac778daa366ad485c813e19556e0e72871cf4d8ac20b8aaaa2278441118e53ada1c423192853d8a4c907fafe70418f28c26ebdb362a1cdeaa8e85f8f97d3da90852bdd97ebdddfae46d4c3a10eb314c58ea000303f76b3079fadf95a3640a0f2496811b7265ed6479b221f2b9432507ba3ab338e29206a1bdbecdf475203047b180579cf912e642d55106449c46f44a29e24fff17152075885e38d32944d733bb87e426403ccbe98ca9eaac320d1793df779ee6e55a95efef88567545c34aa0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9419495dd5785e218ccdc499fcd922276fd7807f10f9320db35f1eb5f3e1803d5c55f22601a1bf4b90dd8561d396b806101d5706806e38517bb619f35fff0dcd716878ae4a17c5df797417e4c057fde5999fb86a9c8c334c83fc289b76172c3ff0d71221e377ac7855b89f6fd73c353860263ce972f6ec5e110ef9bd8e102ec4ad4d240574cc656cff257382d35949e89114854fe7ec5e405cc238f2abb92646241e8e4ed48b473c8381a3f6d3ee1d5cd6941e9ac0f3a9b8a04de0bc17d15892b3e07c0e087b997f47483a26c532e718d5d1842cf67bd145e55080861a15131dafa37dd896d198256568acd60bb2520762bf78f901a6d36a4ac1d8ac406c6e7fcd51b65ba8554ab62533b816d89c1cec4e025d37c47d6dd417563b47104a9c9e39b8d839822f9a3fcd1f4c781e5c098a83629a797e49c9851ca7517bab9479df079e66f124a12f833a8e327f1033c62c28c8b8b7693705a016c7c59e54f33fa5d554de8c196c2d0b65864b375c41b265fa69cb24e1c3c52915780297e854e1aab5211a96f096c41fdc72a1d0e1c333d42c028532bbf01def09bc8dce986aea540fddbe6d72c333319dd5d39b0e0bfc9d3283e6adb8887f23354ae99e3fbad25000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004aded374ebb0f71e5a487cebbb4e4a6b1cc39443f5787c9602e3c27aeeb5eecd09948fdb24e653b5e2297801dd6b5f6f350e357385be2da4c31ffc588fe12aca09d3467d22a425db92a3a81ad90f8fbe9773f08fc9761c46196457da3ab2ad05f924f934220ce48647051a8a064bc454b702a68d9c6e87daaafeaf1243aafe2c2ba15a7b305066ebe6ac7574228c7290060a58cd122681ebb08c71f884322e3673a8ce5432061c89c597da06e8f66ccf9e608ec1762f75ae0b1ef09bcd536c5250fc791781a60575e9992a04e040584531a645f52182488ed3e903efe4b703f27eea86494fa0d4cbb0504f2b7a37cca2f60b70b2ecc51304471e50f9e797b8434f867ee68ddf3d0adb47398fb6d1eeaf0fbfc72a4cbb9739bee10ecc94e08fb2d9625490bf3e2f67517fc03a085d48a6f416e8f1d52fce123dbba634a9817552fe002a0592baaa8d44daff58af84d4a69f56ae0572d5afe838b630ec16387028260094bb3738eafae9025c2e65b20734bc9b5d81a3ee8ffa9585f7304fcdb6c87ffcf8749417e92d9178a53146a8657022765fe4040f5b7cc991a8388bca14af1a67e9b05f4ae7a03fbbe29f7d08a44f5d21f392bbc0c7431410cfafbc948c800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e0a5573fad24c0fb9bced043e41ab9668d80447946d471de9e0bd83c1e71e38e337afb28d769797526202ebebf0f2617190b83ea784033e44c89b39099fbd6cd7042ec5839f0f4a829a6c0c77ecc6671b7fa2866312d6719441b385d571537595d4843757f0416b9b66adbf508406352d585076d54dff03f37375fbd2c0ff401c906eff57f8ec7f808d1653e81cb035047d7cbb28ffefb80f0e0ba815a571123a5c3509ce42a452e37c405e2b57c942feaf8cf2edbbf4c7403376093a4edb504cf17258cd99f93918f2f1b6bb7258bc4f28221fefd90c6b4c1c54504cdfbf2d9d7d6e14fb9123db4758f5e3c7d1b6143550e4a3cb48f5783219c0ef0b6716ffed615811ebb79227d90b1d03f70bbde7e0498f9242f9d6ba852e64ef7e983b2f164a42132478fafef3c89790c2521eca328607fc4842f04a454f7c0c4063047204795836f6d29a2122f32309bcf8565548d4affb6ae74ea6a8ff2dc3ab4b3a6fe376ccd59882f4950a056c2a007903e5c3841e0cd4de6f4d0bbbeee0dfc9429e72c4c8105ab514a7abdec826c185aabca925896de09b6b44ceb22b6c70163ecd3339ca5119ea2c6ef43a0e79c443d61b578119a8e6b8c04cf56d6266bc208eef000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015cc03c85c5637ceeb40ffd58f454dfd8b5d4655deb45f2e1df6f29976ea819eb3343b659c474a34faa6350e0b0d388ee5a459019b05adfadb7e69aae3400a5d15a7c97f03abddcaccb520689e3e35a0f1ff6bd488708bbf1d9ae9456995258abf1b5b76999110cf1007b551d8eb23fc199e1b342eba4a6d255965556d606fd4fa798952c2ef461d5d38c259804277eb40b04c169a20f40e1ad144f40d1e0e33f50b5aa8fdec4cbd0345e608f4ea4b637551e8fe89dd25f0a3774293cb85c3460efe955c4534beafb02ab5acbd00bd55e49ac5f834499593d8d89b196eee994592307a5b61ccfcc2b4c68b7792416d38bbd36308b5718df94e713c14e59c514870a9aa4550d19b7cebe7104cb29472ad65fbf82b75210072d6cacb4af013810e5a4461870393ce057e2998385d81da70e69b003d8d5ca1d571773167c3ef6a337b37cae81806f515a2f84f14b5bddc624dd4569ea37124dfd32f97563817d6294fe71208696396f6c69105be9e0b5777fba4d55d458b3b152fbf9c4f461353ef73ea819a4c9d0bc8a7e0e115957bcc9ed7298b6f2d4cd9d8b8e7e615840c2d5cd6c7a30d51f784455ffa9ace01a73e0fc18b7d5bc1db82881f060e84a83611b500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e585da74864d0125a30f99f71452a4c9de0b1dce2becfc828dadb84c4bd791b7fd68bed80761028dc4937c22df3c6fe8b90a950221b3636387274393f7f95b9b2c413c54db34b92ed331b51c367ec25eb70ae29ac57f3083da0e95b06a2334ac168cf859d55b2ea89c34040a564b35eb58a11359d2cd0cab713d8cad0c1fba6c9c7970f3c710e535b72fe1c95ba254a931baeebd4d8430d6552c4614bece4b2d963f726dfe74aa8c4bbe230086dd1161a778ca7fb82c49ae44cd3219dd165e8dbab5acc2ce7d5d70e29d1e13c7ca20581db97a169a5473ee1145e3d9ddb5121a8a0e1636e85a51ebd49ce7a33f7274ffe6b2754db0da1dc3b5e9d595259d037e164f0cdc407ac9be413e3af9701268df03adfd1598eee7ca1b9d657fdf94cb7980338c5ae6f55671cc27dab01baa901ceb0231f5da4148026d8f962abd26ced92bbdc9c33aeeb0d00094893d35babecfad00241b8f31905fa15dc6d096785e5a0fc83903d8f78801dfffd680b348341fc058f450447e01ab93a4234184a8fe6608765629f4025538697f2b0a456353c7108dc3b5c9485974954e7a999df82489d9f635c2c10bc74ce073f0b0de0b96783d0aca50c593bfa05a057216da3c8fd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000834cad46ab170d0f3b8934a09b3f15e523ff3ece3f35e94e60902a4279071c3199ed941bd4a00f422f17cdb8ba6e33e05d8121f0e2014a6b58808d133cc453f010bb478d86b2effb00f39b8cacf119623462d4aa02d541636c282bdc122eae659273d7606342963757fc2231e2f302be6c62d84cc012968bbafdbd55dd09ac388d6209cfc44523cccc8beddea4d3b682db67b31c77f44fa77fc0b19061ddf0cb6b2655ad34d90fbb4baaff623c301c15ce0c889208f5b8d555fddec8aafbfc8f9f695fbe09cea239848e55de76491f6ec62c142d51d78487e2be42de13dbd2fae7188b602f33eb3be3fb24df23082fff797801db03cc056f880dc10a06009023d32dbe2cbc728a73a098d570f362346faa13c2ad577640a5ea7f11263d9f3013cc895b1e13ddcd37aefbe5db56292d9899bc83bc6b71c8b81ffa329b2a89fbfc8404069ac86c820d477a01d8beba95c83678d4856cb8e17b199402d0da6053fc933e7a43c6649c47e5a075deed96da3eefa596d85cc07d27e2bf69ecbef50fc99a5d84efde6604affabfa7ac55ddaafa9068763841e86f31867f42ff7e85863435ad25c5e7e3c4236b925a08b74954ebae4804582f983a189d84e20bc226e2c90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000addc514912da8247d0545c1f202953eb28784d9f77157167cb0e34717e013e550bb1d15ca62b73d16e27d150f7bd9cf8c3a0095b5167c38f1fd18b80b218997d96acc1e9fb15ba87b50af8e0b8ac481317ca6b5e3367231566c1b185827ce1c8d9fcbddb0372f7440d60288c7b3f8a812cfb618a2633488c8adde14a4d5e6937f432dc5c697e357b8f3fec3bd0be8482016a2d27b6381a6343c9d8218f3bc55f1c7d882be11c0c4885ce4531847a6dac9e6b84d883643e58ac3c83c556f34a0969a286632fc9ff6e706355cc0dbf34c7bbd4610f44e176931f828cc06968e1f5565137545fbe96c276d47a0fd35bdaa95b952003294e90e6916762be0d7847a850edfd01aee1931a3885f7959b5e85b244ce028115fbfddf1d0de819c6c9e73aea025a9f036fba11fa271c6e50d78be0be6093dd1ab681cc1905630582f441234f746fb74c95d087e372d49abc71e7873f408bbb78dce02eb45442f1a06a2c95ca57b2d3e793310eb60facf6c6cd327909fa501c98fbf0b6e071ed825f3ebd5365255aa36fc519f9e4a4f83f378d04c44f6d21ea6133899ed285e0ad481fd912b6837d0b424e583710d11907cdedaae40e056a0dcae1869590f38be69f630e4f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000856075d72dbadf9422af3c4f4803a9bd3ec51de8c26591b6c6796b449ebdfade2d8f4e728186b5c5fa2c41371b599863385511d6ad9c174a13fdb811631c7a83a73b6c27016bf38413531ed840731b118d79d81016a77873fb86f2a207708f0e98dc7744af4226a8dadc0bbdb7c430d75d4bfb7a6e39292623f45f08e018306132601d6dc4c1fc003097a7407fb62330702620aa7c100b2f0075fe40aa02d683b76b77d26e04d0d9d3c6cccf47eb5f8adf053733b926970cdd5944452e7deb8ec59c87c2cef0a562470d879edd992586e041bbbd3e219c4fe5b718898f67732d337f4ca14175cf0d999390fc3a259effaae575c7248455e84d1e91049ed5b1d4a44daeafb1cefbab67506f8d8f30c7035bac3e6611f5d0b5e3b045b0641d9b0cf6e095038db26e9810143e9f6d010c5202b2a131b7cfc39d07a2e3b75967635f0a791c97ee240d3aa335cc42eb525f8cfaa544262b3dfb14b471169ce2178067f084094caa456e879acd50c2aeb625a03b49ac1310e9082a0d4e20c21d60e6b718c4f26ba548abee665c98aa6c41ee4626b00620b832d37b748dd9ac0248480c9896ffb1ca0c256644232bd2996a815191c4a547725ab3b7790625dc58207ba5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015bf288bbfcded92b5027e136a4ea2729efab38b04124fc35f09761cd3d40368c68315c0b7ad961f204667b9a00264cc08c406fdd72a4f71e5d94807006b4199388693348be8140a3e5746bda31d43ae090c7370a175d00a49906081a115ce05ac6a1958c3446a502f2729aa5137da376bc1ffbfb8549049759f225162009059ecd05cb9aee51c56bac7d114e296c5ec9fe5164f2f950da97ac486d1c455a1c0c1fd253e5d7b4512f4c4351df1e25b4b586e5d09ab197c8b067a53e3838c68722627fd30083161b9e707316e463e54f2461dc091e6d07052d856d544cbb13eeb8b1ce66bfb618310719128b0e9c3044ffb5ee51d157aa52bf8b27fb7ebc1970bf8c614de6d8ec070f1c014e772051eb0c160ea687d8bd1a8c1e0b3802b29f1ece7b5495aba3ed0f7886157af1c8cabff8bd6bf8ff96a11056fa0a9f21147cd4f3c7068253b0caccc461b3666ea4e96c51aad53464db4cc5cab117059cd9a73468085b0c588a844c654c6fe974b0fcc6d4ebaf5bdc71f77a905e750ed4e499bcc32773ca48643e082ef096125df5cbb5941febc5f0c0b82c75010a5c7e1554a534980e6479ba65bd944b425e8ee749e26267128826836d1536084d28e5a10d92b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad9871d055327a07866f680e3b258b7b00f1a05e185fcf6c416b0591f96d0314ce8222aa2801e35c77fb372c75c6154962e4d93d6d293a8594b72f02ddf6b74b439a5ef6140bf1c7e244a8c493dcc8a5c6d775073dcb539706a97c933ae5c5e1958880016851a0357b1440758f926ff4fd9e06d44f09c47a7be84e9cbc82ad12c8b513e7fecb4be0f57c8f8876356aafb9e5aa9b7ac5e608374d0814bc0c4c7feeab352e5b6a7bf657bbbfc5c6514d47265630c4cd24979e49589666c8108c39055c80f663d06a9f5d54e8d832fff75834995fc5ffd00d65b249bcd314de5f9f7423566a9a01670995fe12bb9bbb374f4e319c79b66bd876eac44c4e31e8d8bcbe01fd6fb6132f2356615af29ed410fb76da25c9079665853b0a6aa8bdf50168f18508fafeee1a486fb95cc324b559949885b56076477cf4f0046bfdaa6c7accd8054311ac9ad5f8fdbec9aead6e70d2be3175ef5882e0ff755f4a31613533618532ede345a34dc3f99aed6ca41498e78da2dd41ee6cef1768a9741630f35f85319fb7bded5b19827960047a754ab255bb43f4edc195180d5b1a180fa373878b3f3569c311562b046f78f249d3ebb95a9c0b75ccd3c387aadd6d15c18bbfb3ba00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008975b05203a14a5e31368abfee644cb2d3ec843bc2f30f341b9e1295cf79acc28a89387c70908104f566e8cc3e8681a145fec53bb8e76d8caff2f6bf686c6f6bd496d790897a52a269665e154d950d052cb5648e26d6dd29a454edc6b22898c89f138fbc7808d051d91b29033c97a272228ac2cb0b7ddc4525e2eece95e7fb370e2c23a0fe477f2b779c4e6da18685c13ac0a694968125a10b40c20d54bfdd7fd4eaedd01badcf74ca677d8acb213f350c0389fa74da30cc43fcb3fa69ba56c6bd161315a87bd000488fd0bedc7dbf5f1bb7873cea9d8274cc44970881cdba65ac386293963d3148cddcaf7cb3db8cc6584c6e80b0fcbdf4fc3d2dabd5f67d94fc1f913bbac675bee5c6470b0ea6fcdb4f37e0906afb7d995e9899d5724d30717d8148f18d2538dd6a81111e9735c3defc4db4e340aee0fead8eb75ed34dabe8cce15fb81a08b318e0578e99e14341fedda0f57fe33093dcf63f23f49e4aa22e2bebab6cd01b07efffdafff2b47760e5450b225d3e0f41b4c528ff6620ac988fd22224a07d11258700264f16a226ecbfcb6de99f8b8557379fcec710d9cba802aac747efa7ade2c2702f26e8ae581e84f0af97854148e1a298ae0e17d229dd5e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bd264746325056942d4919537058fcf6c2f4a5cf80fbfcb80ae7474d571bbb47175007c478847251feff3445769663c1e0811a18d7199f234344d75fb2e3be8861059b717ebe8871c62e9d7f8e6e0e7ac98cba626fe0d3beae8c85f075e057eb1264ca49dbd803873282150a3708509b9f0586be93d41090ffca6dcfa801b60bc7ed693913274d2058638a6e312c30df21a8ac1d1063a67d3322bf436d99c7ab39614c3d79aa4dd8bbd042cb3a46c1bcecb11b1aa7c6464125ab8942e0283f7d889230b0c1789a5b49fb1ef27394eccd9f9bf84f4dafcf515998b76743213cc826f795c77395ac3cb4011e5ef491489540a20b40131cff6dbe0cd53a02a9959f92057c09f12340d5f4b52e129a8dd4d2e9e318f7cea5fb4a1c544c441780ada48e6e0d24bd3ee56ecd26e01560d8950206b429dac0d4b002017c507ee1bde2b44b15cea95207d82b1f906eaf08299a8ad2c6d06569c6ed9226f204601eb12e29bab61235aefe79369852660778a183676366dd92cbf0141bfbe4c1e12f0212df2519a7cc65385d1d2143ab49e4d56964f7f059c6d7ab8e4c76858bb764452d765d1220ba15de182b80e0505acd3c304aad1fcbd09c0ef50e1f2be1051497897000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014887084dc0da15e6d0d4e33997a35165cfeb804ac6a5a92fbc958d033422de7e780415b013e346849e81154349c36f993c82a06dedb79d0a6f5964d2172d67f547322ee3cb2946f4b524a350e88eda99cb21999576686e6436fdd3be799ab07ee668cd3135d9f4eece431af6dd45376f802bc31551b6688a9e836ca43c57088b791563990d74820382775307789eb1176d8e3f33282fb875a258420f1924492377738a8c6961b7efbb39b389d7162f6aedebd31b5c922a6fffb4975282a72ff8f6d6672f655a13f517b6cd5e60cbf053ca855ee458c40204c9330375a11e14c8651518e2ce3379af92c9e362c295daf9bd2ef646cc2815b90920317548ced40c7be9b518688fa37025fbbced35bd526108bc7efdeea70a5b6a346c7e005d8bc6a0ea35dafb75ea73dd70676353de0195a3372c5f14e8b19d04a7cdadceb886092d3339a886c528e56b9e7c3bcd548e73d2d2f3055f84e4a768a4804398bb0b903b663168c3b302c1f3781ddbd41917c41bddd66c998b4bcc696521e078e5a2d7e5f69fcb00c4ccf4348f9f3f82b61d804279290f696793ca8a8f55c12c9ac12c3137538a7fcaac6f4676afa4a26de170dd7bc5c26d101916611761310707c640000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000298b2b24db24d05b7085b054b87ad0aff5ee99c910e3658df4838497a73839ba5f3adc742ff6940cd83393d20b72641b541daa05f569e0e940a4e79ba4e885f2b13dc496155ea4fa183569b811145f5d4daf12d3787f1975416e9ecaacc7cf7abe64030123ff86e6b9d0c76738ae02c90b5a229740bedc25c0e4d30e1660e0195cea8dea8462a9c8fed8547b73e7d158fb51108bb40da3c5b574026436a16c06d10c41e2f6305eb7784b69be65c2c379cace00d3a5362bd8fae4908ae2486c1c5ede80ecec4031ddbea4f2b4d5fe4511dcde3d7e6b60d86847a4ea099d9d17040e609e9076f3d4e853227fb05ab4f7c6a2c0e1064cde112ac593663cac0007d0f177495889e3bef260ad18c249e2b0d192d1629942035238d27d1ebb87645e9c234cfc1f4f6af460d243a1a534247b4f1e46d3418b52fbab67b89add86a9abedf5d57824cea80a37ea034a358b1d397ad9a51a349aaa57656dd353c709122c41f2bde3aef125f6c654742b7db72a204156e16af49558a0110bcaaeae0c7ac07d01b5518ed87bc669080e21f3741e94de33c9795f5a673bf6c278e50c17ef3666477bd124ea14d709c5d98eb93ffba7de77ab7fd8f06bf596f9efbfb0de1c804700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000728ad9349c6c7591db62bc0ef786f4b1f16747a87a2717aa42ec84b16f823e978b37349246de7450253492ce87224f7d8c49a2b4123e1494aa8d86b454f89f7bb5934274a7e9bf29f454b5d96e43428124cb18d70361571f583b04531ed177457502276f80f9f68f10d7bd9554c8d0ce57f2bac524c7e0c1832cb84137c5f49464c94b42e07a79f2cc3dbf722075949039f66f5bd06a65ca641427201d5ecbd35832779c562f88893630db1d163fc9e33dbb77829b8013ad83197ee3c98f88a9f737a5afa84b1f9a2b21e3cfadc305e6a45f0fac07024a6e3c6cbd4ab77c50484f2c907d919ecd5e5e5063c5553e26325bed06893e866a3c5460757d0f83091c579c0f78a19bd8dc6ef27ac5a18c899e90b31810372f0d025af96c3af1ad74398e49eca0a88ff733b5e864fa1c3893dd50bd2125415974701075a9ab6693fdcb4530d8314524e05cf6145919bc69ea6a5b87da41072ad730fedbf16a77b471b7be28b4a28a285770abeb3a60453eede6b52aff61fb33195e6a79fbd809a1dfa640c9674d1aa48e08db19d204253b2ae2f910034008096c9e387c4af354695137845648657d5427a099c130594f17103ee0482349cedc3f27db6079f9c0908660000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000943496f2863546c22ec4f60dc1fd0d106b10ab275b140f6c8cd7b5347c1064063e86f4dcbc67eb0acb06b67531de1b263103b07a9213d6bf03f34e591e9eae4bc699e88013e98c898119bfb6da337b2858d4dbcd25418d7ab4b11c258d934d8b9134d029b82e10b9dadafa9f914bc5171ecd34a58e16bc6aae8db402c458e843819c866b3cea28713c018a475147f5e1afed4c615518fc98b444e54bc9d9eac592bf366a67f5d9ccf7c3956359ecdf85a707b4235939c89b8c84a4b1fc407436a2b79ae4b7adb886016b7a20bcfba379b0b299049721d42ee361fd2f31d63553a53baac805756240b14d8a66021b757020fe734b72267e266140864d7ab18a7566224858ef8127da7caca80ee8dc5ca950202ae5c9b5cf28f24e793217a658107a374942cfa3e17878fb934c4a012835d3721ae3fbd8c0254ae3de5118f3b05a57f298c19a3ba7a3266ecd0516550ecd43bed8198a66f9cff60146945dd5aa641ffc601cef780f99a09871a4a250062a04da075cb3eda5f658caddf7deff27d10b6202d7986ac448f80618ff4e50848cd87753b8da389dac4f0680d05a0ec46082275a1425ce1c88101b24eb3c386dd4f84bbe82d4a250d69221f7fcec9a2ba000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008687b5d8cd3e3fed666dd7c2fffe42318a77f2ff9f6f6fc21c4c4a2d192a2e62cb79f600fdc283937ee6315b7dc909faf325588e71cbe58814da86259d1d965a8cc9dee54a9d9e1b7fd75db383eda40f3568589f67dba154d4ad51e6945b2d78cdb92fc898c0a8f3e5c2411d885da7807f7576041c8e1b177e6552ddd4093f8ff74287e84c68c64fc89140a0e7abd03e7ccb14b4dd09dbe096b79fcce0ee949418ad081871ce31fa3ef020251a10cd55fbfe48eecc2f71f24228cf256c8e725932fec8754de08d8d4c358eeadfb8e4555b06161413b580be54c8935d41ca74355db8f24e9e0feb54d96bef13ca257dabfb59dca410a44f2ce04f77d687d68fbff26aa37ebb8ee295739a9d1020e37a01561f3778a1f001b0b413e7c4d70537d27a4661688f5cd114dcd32d6019904cbc10daace92c7abc5d263120541b6292c9a172fc1ac3864a35108b329ac06a2a3bb81e94ea9783e0e0de0a9734020e8f4501f3ffa470dba8418ca4c7544af011c3d8eca2c4604e35b10d43c8c04d80361aa46b1393ea010e679a577a6aaa99547ea3475c1f0f444c0952d5d157b183ca56f8a6cb5b84ede355b9ec32c7be7417b04c8729f6b6b46f650e38bc4f8dc5c1db000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e2388714ccc8ad82af8ea96308d05d45e1084b87a72899b8bb2dbe12fc1b0e43b20bbaf2bd58f723953de2d7ccc27b3d8b0c5fdb412af1f133fb1e505df3f94b51176d5522865f0d3af6cac5ff73d469166c60a38b1d6169fb6a47e40f5c383ab0b840e2fd3d92622a6cfe8888a5144836136e46bd02a41040213f9044cdf6872889a035c318330e8a84bf32bcc3e2b1faa3f071622afd4d8ba4dad8546500b86c0715718f723fb1c337a66806e062815f30c80194cf03f0b33a96227f57280130bd496d8935bd9dc049a0449fc8df4ee412cfaa18ad1aa4885e15e2c1bbe4b9d2fdff279202ad66498f49d1f0f7f356258ac8914583126e5b201035ac0bf90524fa86281293ec6d98489d0ae737340db7ff0024677cf662164e39c3a40e1cc083e3b614e01ab8184e1705b46bb53b4dcb676c245f40eb92de3610cedaf5618630a7203230dd9ab47cb3f21a6e7d9a29cec6aa2070c47055aaa7d0f37372aaaf6f899b640d069d4b7221430af9ca56871d6509ddff99436fd88f70c9936bf408e0ee5adf83c42f035c58d207bb2f7a79d53a7dd10dc3b10e3c98a72df9704f8fa7001b72a78731a26d1059c0450b302880bcefb7fb7f4fc092c061d935aace00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e6b1575aff4f968d55e8e7f6eb8154135deb484b8e44fae0ee0dab51679886be1ea368fef8768ff883829280f58b80cce4aede07bc289d81c12c18ff66a08d51803e27a40c59bec52824e97d3346d1af703d366aaa931ac9f5dc8514768ef6a6d3f50ca2779a9cef07cfb89ef3c17f8f53eed8976e538521088f85247f6244d98b641d6440934e9a91aff3cb699d957dc309fc6a8ae4be4284810cea15fff870fe4c8a2ccede9341b4720f0a20d7e42501770ed4c291a54e171f455441378bdfa671eeea0d4f14a4ae1bb619b279d6456bd45dd7fe90a8e3737f46bef1792357084f531282426579a90cc3354460f90d4bba88eab4d8dc704a1bb6f9256cf65f942d27e9c4a5c81a2ac0c413edfd105aa3fd8a1dd55961120e3aa4d18f557117609d98735413672db206f9625282ecfb21b727ae01739521249a6953eb5560500be3c7d3f93feefc2a42b86ef6dd56e421e23a11b2ba183f222fcc67c70d35fd64c840ca6fe76c5485b4cd43a398aadd66cd6c7642e3041223dda3ae981d22d2a95eaa21866e775be97e94db3862b9d8a1352783b7fe0acd23fc7ce4e7bd985c7353711fc11fc8f9a845eb9c170ae92a10c43530d523acc4a790d0d7b24d014000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028b0596862230647635c98f3cd64709bd44f15227dd3c4012264cf4cfbdfd12d38f9e7fb584fe9b361da8ad26c1a12f86487626d806620e0c3dc37ede730121fce6760c6619d2831724dbd80fd67dc5eb75f8179938ea604dbd7db51b228fa3d2326dddcfc9c206bb81157217abeb57aed91ace5cdc7a4e6cb012af5bb58d6f741a5213c869dde7257656d654306a1cbc3b0c01b813db056194418f17724ff4000cd0a32ec5c65670fb9e247bdf9eaf9e6f679737a2b904fdf9a302618cf38503a6fdc4a1b5bd0848165a786a21b2f5516856513bac288d0fde17c6139d01e54d5184cb647a38277ffcc3227d48338cebf961c276e5ede6bc953ac9d5e003bdf70882c7153159da6fae350001483b5158cdc124f87172f8b16d26a1ca9220c9c3a7cdc4327bc5efe8e27777e9883592c4eb31644cd58a34f9129c847d0f4c92b988ffa3f4e99ee962e9a03f63ea723794beba406cf84a51a87a0260ee1ca916d90172f87fce35a3dc8f83d3ddaba659789b2a7e119ded7f1063117c375ce2519a28dc5d50a42246756901fcfb8e2deb3a7b4078e4d4ef6cb3702aef491dfd8600afe7a003358867500b819667ec14402f9cc0a4744db7574510220dc9b2d9146000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081ef2aedc9db73c65d74e666eb7a46424616a410185db54f98471d0c106bd16f80280d9609fd8a6eb68ecc8cc3fceb3486b006ca4f8cd1b8b21c011f03e1da066f333bfe51c9d76b4735e3d5e63d42bdc293c0e7bbc3ebe3c913ceea325628d512e5a101ad8cb6f7c8bd322bfd3e05de0124cad639619f447ca9c1c7cbaf9d7195c127cc1ea100e637bd7ca152b88986e8b60850dd6f57c5b9ff35e8a2a738df42384c6843ede8e45fa5aba7784b39dbfbe83566d20f85b6e2b89ed11c41d0a1ab869b9cdc7d380765bc600615aa9af6a9b16b1fee151259a084b9adceadc2fbed6362629883c5837e473e4cdad3df1f7b993c78c8e03a3e960db614f0cd067e67ecaae41a0fffd404f07ca1bd3d6ec09348697f9e598d84523bfefe0ed2ee4ab0b2218a0af82feeda109402a6cc14405f82d69c9b2ecbf9754c63d5ea542c79c2ba61418f79db3185c2fbe8bec1e374b8db812ef8a43dbcee7a9d51e9e928567852678aafbe13c3902d1b48b2723babd9a407aca523e760198e2ae07ecb6114daa88ab195f5ec797bf8f542fcd8040f76cf5b5696dacb9ef773b75ab4fab93534e3fff4a0261d756effe1daeb7d981bff42ee07e9f67fb230bbaa8a5039bdf00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000905add6c91da35e5278c1c2885c59fc76fa5be86fd06facf95d1fb59e97cae7095804cba858ec8f9319d6e4a8aa72dcb73e0d2271612d3eff434df906b4feebe892d4ac897394655c91f2724eabb6981f3ec5ada3c2e3e4bc49ef83fb903c16def35b472b8a89c0ab728a04eb3d7e04cde7657891c0f7e0ce986cf169f42101430a38ce21087f98298145ac7736b5797e5c490a087ec762395aee21448b90a6fd1ac90199190a2899a981741f5d3b70649c73f8a13942bb4fe0cf75672617b74efceb6479ffdf87c2e2a623e5346a198d15bea275693b933601a49d417a4a7059305ee2c45ec30496fb4e4f432affaf10cbe2c15773eff132fcd087fe1f5bd60298cfbea7a5ad2e20066c18f1eda3dcd501986536b5869e5f4f99b0d7e6169a062fb5482fcae4254b026f90454461741c40e09fee8f01390998d657b3d72ef68c6b32b85cce1014ed938febb5115c168e1c67c627368fddf687c7abf7ad50d39fc0cbb0271ff54a03d642ef88acfa5a5265c754c3fbb6ad601b1a18d05135f335e7f5bebda46e1f5ba4a2a5004d7ac027e37a3ecf0e7596f9d720ec123c85eddf1c3ac433de459e7302127f3b4d76bd822c2d916810cda18433305af4e3ec94b00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484023d8e9803e3fe7f324b7539fff3f765ce3fcd3bb17c124ed9ceedde0f16a5c0e1f1c3a6985c2c41c77cccc9f5cf7b3589f3b6e146cd49f28a63e25557e2abe3523be6902dd0fe7cd09fb4d3ef95713a66903384aebc833efa66db10da0caace30ee9b6fe4d1b1ef300013cfd9a1402fe860eb4954171ddc875646af4c3a76945121894d0f54a4f2b7a17f0334c4760a2fab24f0938fb4b1481392872ac5f29b02b94d3f095c69cd1b4059406ee8619f3b6d8099ae839d16ceae044928d771d372c74f990254b8cc78160af4450e407c846801bac56e44d36e0dae8e6573c94dd15532e0cfef3c381305c587c11b95ad8dfdf53e6f1645bfb187e2e425407d7a52813446ba205bfac8e586167ba9abe4ab1e59aca6f24ec17a23a8061b68b510311fda86c5a4026f17a9e0ce9ac73fd16971a644d5ff8744221aaa9301dbe000a0b97d8f7a9507fef7b69ed0e22077d91c7b3fa83ee4eadf0e93d09a8aadce56c0d026635099c6782f7cefd4627bdebefd6ab424a6de80b74bfa34bbd2fa9233d1e799b86d97cef177e1c01b4a964e052a53071844a236d315458833f62f424f71b6b671e3dda6def0a6cb8e209d7b9aaa5174c1bbf533148db55840aaa6452f72db17cc9c8f9fd7bf1ac6f2b3c3338f4b1bf286153cfaf87e4982892882545d31ede802787ae7b943ffcaeaf3d19fccf157b0f6988a9bfec738679fab27e171e296cf0065c8ac1c700eac548793627309862e43475b9ba93843daff91edd6ef11954a72ddb90673bdfcf1a64faff35a71fe621484fc17c279799b55464387ef616c78b4d0fde21abcf039b3a7ad338e5c39c75acbcf109256cd8f30f3b94ed2d2fa14a7a80893d72b118ac0b9895bfc42ec67d6fffb9afd7e3588cce185e8d930cf9c399fe8aec4ffa911794286d44d2ebfccb85c35815a9be6a44204b579de30e9ec14f5cc93dc85d1049964745523db0940ed5c76949d2d91bcd2912a46bda1060056ccdd4c9330c9bade7a9d88ec7cc41ac1423e643af1948aadb1d19706a041a02c92e54b7abecb3751406e7ef4ee0bf87e3b4dfd1cf3aa8fa5bb889532a21a985dd916ab5c1be58a8ba9e021b71bce9af13659f321e99e8013b2b5a81ea09ec784da8d7d2ed868ffe07c3c3d23f7b0bcde97943d3f382cb7d276a83a997281d7d1a8aab4b1a628769cee89df5341240bad46f4ddf89ed925ed848194f25251fff36508265b884635cd6c3299322da9bac8dab0473968e9b2ba78da191201cde1ac90e4b6420dc41e6d1560b34b6881dc0bd8ab3667b5542154e8931f4912691cee20631c5074b8731e5af1c2ea9e9835878f50eac6d4805f358c4c3a4562697a43279f84bf066704efe5972d8dbfdbc97793a449e16366e03c41d6a0d8b0e9120b6a85af54c4891b9dad5f208b8cc5c3e66d5e71f137da3e189ed8256f81fea85fd8f8bd23f535833223ebbacc124d4235c055e2d5b48c37ce0e2173cb21c1c97ed6aa75b59ab2a5b336855c223969afb5a3ad569088b66ac34f73d49450c44e41d3a1700522bc2d271b91a262fd947bd496e96f3965b67452bd59bac750c3371b59e9769968843f2a38fe19396de8583fba492f8f65b08bb2c62d4705821ffdc8d7d8afcd29dba44c8f5051b76a1f197868aa1a9c5fe3812cf6cd6805b0d7d4fbc9d912d43cb4bef4b70ec3c268b566d068d2c06a4f8e69fb5af3c8aac106d7d20a82b1b646c4f2bafcb4fe7a2f2d9c04f95dc20c1d9ce240051e3509f0c4f04c88ebecda0ff251771f5f44498f0b6b9b2350755151f9e4051de3d976a088b7c970036b3760ad257e413b93b897b925658b43c106d1ef60958135537760e05a7af188ef5f1071621470c4c7d7d99eebc0d68708ba427dfb3327d2986c41a34638ba982253a8d6dc5b75a40f38ca5fd00ebabeb84e8fe26ae3e8a209d282fa7fa4a2c39f5f41ff44322c0e3c5df867c61003219afd55cee4c247801da002ca7026b1296e3e158fb142424f69e1170a8b2f0b43734a3c5307089f49cd30c2c7637a1ca8c6e9eb452b2e9a161619a9bf3630d6b174a7699cb103d8ed6f6e82ac14e21f024909f41c2895819d4a5605823d0bbd6767361a3fc5e64bf78c7ef18dd9e8394de361a3b6a6a55e8a06935d0f84b74fbd18a9b5d19e8e54aa484b9080875cbb5f003fe9989ef9aa67c9b3233e97454447da45762e9462e0542c87c10fee4063e0945b0bedfe4c15bf15b109a5669c8a0d07d9443e10bdeb9b92e612e38c40c68e12afa792c291ee7bcb28b1de37751da6dba8630e5ccf4d87a9abe1b6ce012485e34794c270bd76bf7e2d22f86a0fec06b698e4549cf526c63b382042da0281e91bc14e61554daae29811fea89ba6dc4399915488d19b42504879c11245b05c393ce22fab84ac4264d722ccbe8627ab0afa4c249027ec780bd02740f761293642998d794eb169e5a9ed954b76ec854067dfc4c48c7ecc917bf3cda2148289aea3cb9ce0d5da2d6107e32cdb1f85388b5f0a1c85f1cae52b7d3988704f5d4f67f4f68dd068517accb93868f1e249b90a7bbd751cd06214a63a7258a2c9621bd26349ea245de19ffc01bf7b2513584c90e7ab618e843ac6c03f2671c1c8e47a7a880b79ca461598a526d699ed8b08eab62d7de4a6276933cd941e7ed1bde6ae985eaf7e00378ce7f1b510261ce0e52e36dd11f3c8bf7bbca04732d3b0d5cc12c02c962a72c553220caa316451741c273a1f5d5991ff621d8de1584e71cc879d9bf55b8bd2d519776bc0afb15a2a46f1347664609c7c0413d5562101e17308bda2d3ead6024a02ab3a272b099047b139c91002adefafbe20e8f2860a5074c1fcec2161e2ace8a9612ace1816f2ec3ed239d1a7f202767bce7d1bfb823402c58567bee73007242b4650b86d2241321b2b3443de05edc06341ead910c543e01ea68f36516a68d459e300e69d0d581003b187d77bfe55c41b89c644a6539d92a8803c4c366e48ba80d31c1b1d0273bb304d018126c17b1a67b6a3ef533b87d27e89953257d54f998ad18105596bf9ad0d0f0eb3e06043cf301581a27829ad603aad8db955147b8925ad934f5c1989317b32c062f76ac3d1fa5736235ec73c004ca71ef0768eb5f8199fecc13193d9a293b5c3ccbb947f08b0c85ba9f2da9d61e2b3ce14727d32d461a6412bf29b41bb8f8422cb0febff930fec47bc6e1990314bf385e6a053e38377f62198a7d34357155d403103f296edaec4f0bbc983108225c459cc790a8353518d0b8b44ad22bac710ecfea80ef2965b80a1c84bfa48529dd7a3d5ba0b58d8037189b3e0d3d45c337a444ee7a39b78704a448261965573042b72456010f745a2e7c212f525cb9d278f78d1a27b10922816699adb9795b2d7c2bbd49716b4a09730e9adbcf4a00dd1ea99c231ba9f66c27559aa32e43b82eec4457547e63888d2e76b3af0e8c3f67023fbcc56dc0115816913521e9fc4f2a5968ad1749833583238264e7a53cb62feb246bf2a2b094d256836de1cd366619fba98f78ab2a433b6c93faac4652cf4a2d821b2734522c61bf6dae8e8777e6267c73c0b41a6920518ed607cea6a66487802cafa5f8414d6031068e546a0e7b14c6dafec731c2974fd80bdf758d729dfb2a57015ca9e1a754c95771f6f46cba2ffb269cc3ff5c9d2fd58a1daf8799c4cd0ac5ebef71fef5b245777ae56a6b9b1c493efe4a2f92e637b78a4be9205db95523cfc132437c9ae1a425d33287e98f1d456cc256b5cfbcf0f4c577f7235d5a0ea9b2ea023158f03d99073d497a207c1c13c654d66aa9a5653a4a73bd3226908520959d7494215f7ef4dd52cec9f00a0bd72d531cd671d1503fda3136f7e840a2533bd80adaa086066992906c3fe4fe11d32cec86ba62efbd43c95aa91acb66690516a65652c4d9a265b86bfd4cf75f0e54ae05e5989372693e432fdf584f109eb1fbd5d78ca0278fd44147b8d914ae1e51af80f6dd6101b7ee0c44f4fd01583f82f0b3ec4eae13ba0e242104216e2f03ecc75dedb4c2fcaddb204eed7d301868cc81ab593801bb4d267c9bae2eac442ec4825638525ffb916432eb70be69208356f5cef31b6b4ea6c67fb023baab602c70985dc06856210291dd2af5e4df01721a3ddbc9fdf60d2b1411c022c24a51297d1ed3f0783a3cee4cf9ce319133119829554e331d6b546fb16e48fe2aa69206ff53e3bb8b418891c4de66b0bbfad20fcfa39cf1362923765840b9e36678300f6e5d746861855fba419cc524bd8196ccca8957b678b6651f75872fb7332ae40ca6347f13aef41ec21f71fd472a8f659fc39e61e0357577b69c65600de7306d05062a31bf8b6d0c78dc98660ecf154a677ddcea8871aae2c79ec10c6d0cc90c017747e54e2f74267d06f58df720bfcd07d5d6b3196e5980e989b77ec1b7a75b181affe013a0013cb0f3a0e12b51eafee5ad97f5f3dcd310359cb1abe17c2ced2c851b7e2e2ca086e3477e2c680642eb49fab310a6278e6a14fa4c94dafddaa7263f213b2bc43357f0aa50d522b1f017c46bbace945899644fa0f97d7e76b529189266026bb884b2ee18905cb3a34600483c6e180d17bcabdc744dfcacdde5c701db0d6d2df6c60f587618b0a7cc23e8922c4ae8f2331de3c0d628a448c5b1d305c605e08daea0899ed75b2d471de6bf6a6f15537b486db549deec84062313aa158bab948b9869e6851f0178f6e5be0fdec714e6df588ba22e7c88d75e05135d1d8ca044befbe531ba85f1c8d0d9506ef512eff440a169b5e7dcbf7bf3960d22102e9d9a19cb16ce75844323fe5c50b941bb14bbdd6fa5fa5548c80eb47489220a0eabe3521e62fc7766ad886181dc582a39d48f37272033198da1888365fe020a9c2d28083290aa69e598220068ae8f127158a91a9f783caa2d1041079af9ea011f6ea61c7a6938018cd1c2a1731b62da278b5f05e867798f460e62973cc9a605684c8f8dcac9c072cb3ffe6f0312fc22a5b7bbf2d5a2d58d640b9c8165c9b52eea7bb3be28f7408593474df871a9d5974d668c1a854bdfb14e112e70e10545248f341d8f2500e76384af4687b952fc0fa5fd4144465b9726f95820dc82b97d2f1f0d3c60e8a72588bb3c58eea0435b0a80c065e9d840bc2abb7578536c201523ca94d98c20c4d3ed73f1d577bfdd4051e18a9554879790ead0ba0410e9cb6c207d04df18a1f068cd4698e312db4d0b8f0b156f6809e1ac0d4bed3e10ba009312ffd776f129ab69e9ad750cacfa6d3780f75036252caf08cf600e0802a56eec21375ba99db7c9fea37b9160ec9590d63b00746fe2df0854f96a9fe7e62b840f036fa43b627bfbb24021a325ded0076a90f6d4048a84a19f217e3a92996183c3135c98aaf1df447ede716a2487de47c9b37ce77298726dcf6b74df270e1cc4ac2980af0720310fd6f32f596626c815c59029568157801c58039ebe9a554ae5e10846f8187cc607bb4956868f55b0f86e3584795881c551a7bf09a413d95ce2ec2919d54eab100bbe99cdf074f85accffeae78ea28c13a60815adc8425e69b9301a95071a6277228e021a530000091d0fc7b24213c701fcc1010fe1ea4c3250e11bbad330e4e16b91903da994d1bcc4a2153a6ff1815f51d92cca82823ab6fb55284aecac58fdabf6f9b2e8e011bd82ff1a51127a17d83cb46613d302fc3f5351181dd7dd67452af0930e46d035c2ae0ce8c8cf62e350caaff2720c915f7ae272282e62891bab3981a386097fbd25b352cdc416d83f019229ad23007abdca9ca9003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000051118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000510d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000510a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000510b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000005129a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000051141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000005125e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000005112978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000512daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000051189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000511159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000005105ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000005105c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000005114d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000005103db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000512ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000511213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000511ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000005114fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000512b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000051305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000051280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000051223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000005117a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000005108858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000512618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000510f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000510e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000051172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000510b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000005105bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000051137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000512e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000512297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000512608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000005118373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000510422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000051204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000510afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000511998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000005128d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000511da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000005121d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000510ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000510e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000051107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000512f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000005109726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000005124f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000005103c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000511fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000051205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000005125110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000051283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000005121cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000051094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000510c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000511f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000512421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000511fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000511bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000051304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000051000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ae48ab15e020ab537fee5940487aa7dddc44012a165f08122801d567f2d146b025cc48b8bd23949127a01db8e7ae865812e936993c1c19cee5075a63eb007da314f5ac1c31149fb6f5530299be7833f5fce4ffe93eea2502537d279391140fa8e66c42c6e5691d7dfbce804eff3906b950a572b1da39d36462a24740ab34ee5edb90f6a1f062118763b160f5c9f272e0407d294745090d3941147c55987edb40ae49aa068d98c1fb4da1e77c3ef6b0283892c38bcdc71919d4e6e95dd991917a66dcb29bad674aca701af61aa2228f4f307d39381cf34ae6a9a637e27c1b98e5fe1d40847868572dd7ea8a9d57ee7964b885bb734911e825182c2bc78e60438107782f38ab71bb143eef39efef15730498c87d225a342638f0863e451de8243b7990846130fb63deea35334b75196c8b343972a44ae41372cef6873b140bb45584c815793eaca5675b477c010c2cbfccded823eb6f8a9fa14e5c3abf54e42cbcb0e8099fb4423ec8db04a65a05764d493d2d07564dca0501b32d942198a40089d8f38ce7124f3925456a67b124acfec00435d8024821d70e88cbaad8debc8a1b517cf957bf7d536452644234a11e0f3ee249f12b7daf77f51068b4e4902d0190000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000155a371038d5593f8b1055d1a042103cfbaa2f83b23d2191fbbe1dda9daca967d96aeaac0f7b81a4359f5de3cf3503222c750f38710bde010db1b5bd2a8e842a2498e50def8e83de69c765babceb10c95f3bc04e221dc523dd8620a3c74279cea71966fd2ca059c5f2d4c4797693e8796905a4906f063e29ad7420abd5f3ecf04d03b89fe0552dab3616f48fb1b27021eaac1585838e5311a34efb8dd4c2b7fa90cd556dd34eca2cff7fd1cc68d6caac197ec2ceee6a1eeb2e2a837cdef776641e960bbd84a49dd2f354681656b5230df5e89b3061dd3b1d980a5b7fff31973462135256ddb18ec6495d966d73fa9cc056c3d3e5c08ed146f4b1c770f30f826039bfbe21ec3354ff506ae65d26d604ad2ba63f10eeedee19136c68600f30cd23bff3680ad163f8988bf96418e0ea87d85a74ccbe09ba84855147b5061e1240654d89dac8799487beae0c8023240c614fb7dca3a7fd8a300da62248372af13b53c421709cbccec59a65856649ca2600e65e88fd2d112ce37ccffbe75d55cdee819a38a518de4a169e8359aebbdceac31f88ff4c5ab914f66803fcbcb0aaaf1be6698362a26a760e9f3c302374469cf93e1067adb83c7ef963d2d847679a349e8e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009162c386cabd18b3e52e4ca7421e531bcc56285c8de3b58df10298ba7b926407058978ea87f0f1409d3148d5b4f5f7a3e19b6f25fa8a4843100102e61ef722d168760e705c842441b28a7a02d8146afdcd657078172ba3be657e52915b3940f7fb50244b702883eaece709c38715276370cf7786a6d238ea50d7b794e892bbdc4ad14533d39188659009fb34f6ded680ee6bd1278fbd06842021726096a950b6e8173a42099d909892a038a6e4a425e66c2c0f2ff2ff10bf5d58be8d35838ec79e89b3c983848eb13a26f6f3c796c132186c453efd8fce7c782939be6fb7cb3fd0ba6a7ef7b1b1750ca1dd8fdc1367e2d1916c05666b5bf396cb48c877109d03558d38e6957b5552a8082d54e960a8fc02dcacd4b04c8d2f54f8ed229d303598b75b3a12a67b292e948537689ee598e23e6f99c59f5b5e13d0ce423dd6188991430930544970fdda8a7b083b351253e696affcd859cbdb6a38c35ef34d0ca9e5755141c641c12c1d655660c62cc74daf3a6264120488ec96bdb709b0b1651398954d683f0de49f97d6bdadbd9dda2973fc4a4507fc409868f370ec9dfbcee5736f18d83e27e543e5f5d3e393154c049f4b066956a2a6e1ee4a59ca079c42ddfe00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2a3f18d6b8050ee913758bcab34cc586764a9f56901d34223413cff60e465b3cd89a8706716cacd1b67cf6f9db413929d13751d5e177c9707b22813299719c3830a6aef8e5ff0a2823cf4fb1f97fdf21b838d88ee117d97f5de83d100cd8ba7541e405a29196d6a423dbf2f1d9e13e9700f8d65f30614a69340bf82ab5ba39d0f03b51b7e6c7edd3be0f0298f9d762e02696a6b228b73a5412d77e1bc701488aaa4469579ea6d2638ee13239c6c87f7c5802e6175dd2392276e778a9949b12eda0ec651ee24593b550b40d428cce1a0287f65377d8ffd9c1940a92fed8cfb955c12a32a89476a705b8bc971e88977961a0b808b6720e68f47bb57d66e2560e111b4a51a48942c17df409c2c99c64c77743540b551adc964bce17c547483c34897d339244151db6fed6b01bc167e4bca1c380581f2b10ebf0d9674ac0a58944edd03cadcaa88ebac8b249778948c2beba383103b96d037ddb6fe1727b6ccac59f9f8ae18a03d51d0781d1e7e839eca567f7f7f5246361151e336ac17c74008c3cd7b57dfd19a21e41dd1f8844021b4e84832ff2d3b4171cff2386ed9826ff4b50ca112612b85f62228f31725a655c0b0c2fc8fa61c7ecb5eb08718f84448df600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bedd183f89d5eb009cfc2f769136ad88d9c70345e3e2a33afe9fb966bfcfcbace833d3e25a90d0396478f4617679fff3e567506d17aef359255f1d4c7ed1f1a43ce52908adeeb78992628a7b11f01325a5705854a8f6bb431da0abb862d3bdd7dd6166f24d6dff8bf9988236a2937067b6cd2b05634fb3aec4998a37e9a1ab7fbb309e9538b0fe1f2930a6942cf0c9bbb7b0d8f95376beaeb5eef2854cb12181894c3dd457e3c849d48213c8ed2c2657691d7990b7b186e8d59bc7081af4eea29cd4f5888eea26ab7afa465f8b5f4bc0197bd91b21a1644c2f5a4482ef5ab70b73729197ccfb49bd4ed1026081ba36d172c3b7896faa292a7bc5212b07875b8d2ca9dbb1193a5c3a9ab1d02d68249d03d60d769180fb67052182d37a028f31416dbd8be5cf8c92ff68d0e67526f768964495a6aa8a38af6097858ea7e725948e44a8c4709df4d27b61d837542f979990d6512909312726c5ec4ea711b9ac9d135b029dbc2ad1eaf573d48b3766bf43b15d42fa85aaccb18ca1c7fcbd42190cde8c2caf21b8e7757c4d1a94408528935a28f916cbd6a22c9bc410f71766193499d4f30e2f6c3753756fa446baa8260f526dd20e48b1cb0fb7c652246fc9ad09d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aceb0e4a0d3db7865bbef195b6d8be6beda61b3e5eeb7903dc6ce2af50d98a8bc01af15fafb7d37c67d8f450f46029b42dce310f52e92acc0bbd46a7c6de79748f8a4a244cf1d027a8f35c957b4cc6cd5557fb7094ae3ec2ef6b532ffe934470d6a4b941bf1625461aad70fd630f551c02bb6d7a468d1e9861c24d16bd43a8139ce0ff1c368e878e2847de91c2ca640679c5a404e8ddb15318cc6c337dc2ca3066dcb077ed63dc376c141e8849d4c13ecaf42b71b5e4961f8fc6d86f54965338828463e2f84cca697625bd4e0a06b2e8cb7fb44f3c7c76916cf3fb467946c5ee4a6b263986c748b1e38abb697b7b6b396bd6bb1d9d5682c46637da2e0c561d669f5bd3a4cffe01419466001fa811e56c4b8340ba80dfd3be24fc1be78b14c6ebc5930140b5badd645f3f679e8a67e19285fe17513e31ca9ea9e57eb029f1b27e60ee4685a0cc860c517a9d8b9ad5a2d0abc113bb1b6cfea35408c74516f2333d88b8ca159217cb46edbef064875aaaf76227a469835d9371ae9cf133f7a07f8d8b4002c93a5f8d2bd102850e4c51d736b5e95dd4e12a09bf6698709011e8091ede418c3390459495031c44c3e638fbf32cfa54c25089de536095721f82bc742100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008364da9a66c9f07f851f64d8e6a2a38280befb97eec8ef88e4ed052035df43574b365b7a138b21912ddcaa221b85c98a7af7fa160c36fd7c71232241630ab11586e30621869bea66de777e0be4ea1fc6ce7bf7d0f03521d3a869917659eeb0dbf85d5582da686d03d6515552eb8dd8d75a6f15e44c12d5379661364a66a71a646bec7690163a806a7a5c69991d08d3821bf91476585d4a7c77601932310fc03a95342d6fe77cf9b05ff70ca3314287c518e3460857dbeccd058e8306ec79c2029f92347dd484c1347dbd79a1fa1bcd7197747ac8bd9fcde32ae7d460249da084ffcc710ab8486b51a079fceea449b6d9756709db618f0b2f11f8ae36a5cb986279bc65694850c443a8d332f97f8d407e353c7a1166d529a5621b6662117ac9da888b08d0e53eb8942b3737baed4b47f30143b1815d0fa0494699d0a3f4853dae72580cd0b2f30b8c47f281b9b0a1ac575292ea3475f6bbe445bea2aa88866b7cc7ffd76eb99c182baace00c478d8eecc03615d30e0562899417220ee6404a69a7117745c005dac12a1b5d9825c2710fef807b9fc71d44e0fc9ff1c6e52921b00d78fd8b4e288de74bc6f3efe13fd82327f157a7a7e5fa6fd505c130614fb6d7700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000da489935c9574bf04a72c6ff32dc459e7282c7288684bc96d942f70b52ba0eeb6839ba185956ce6aa20df8bb11d4a07dee9d501003687d7839decacb8ca2a93bafe17dd07b5a7e92daa81d8433f10cf6596c0ccc1fbcda6dd0719aa85d80851ed773d2a5ed853ae456decad56fe8317f988167cdc6cb2951f25cb670cd10eeeb5634c92dbc8ee8e9864a03bbad1cc62a364b78d764bed389a774370369bcfcf56e5d9730caba352cef9226fe021f7fcc1ed86916235a4dc85a368c3ed0821417f564c3af995ea77acd943758dc036b695cd41769ec6a50e67ec9efed44204dd3ec45d8d6519981f575b93f4a690c9e79adcd7c9d17969e93e2285204c3aec1f9bb58a126307ce61b3d82885cfe75858ee3ee76cc203a89f6cbc21a06d6a8dfdb4e1eaaa93a229421f19b71d9e9558946bd9cbd5f8def2eb4794cf123aef83102c1d992891362299eb3551af14d792287e1dcfe0673b239277e693f36087086115eb956e36af2d509730b97c8754157e3e5d1e2a5f4a81001bb66481f35d1cc3604957282f4ffdb7f9d4bdea1813edda501c558e007b3a75bb4279a98ada3592777bc2f406ff2a3a677d62b1624795361f72ab72afdabd4f7b1b2aa316c0b93400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009fec7948e602bc0ff4d6bb97f9659ac4e12e800bf1eae1a142a09b34f5d4d6a21868cbc3103f8d0e3ded605793d4e777d253e32e29a701633e42c9bfd9f911d2d4dd4a067e493f3f67263d16469d73992bd2ca7207bb75563fcb09d2a54093a8347f43e9f9000396041e89a9e31f44f2a253e4f87feb57a15fada61237843fabefb30c58e69c3ba3ba20bccdf99a65f069bd2e2904ae10a5d145720b065213bb42b8918f22fd93a6ea0a4f7d85b49d46edca913e002de3b558c382e4fdfc281163c2d6d5b6f11a867f3e133a505ec7e85c47708d9480a7e3b637bb45a46e59541c911c9be0fe3acb3fd95f8a6123f7c06bcb8b5ef84846a151978a018a147d051ced6dd7969ce840dd07a36e76a30280e7c931c2593fc703ec6455a27186d23b87e81d35ccd367aa4082ec661ef8ea8db312eb2caf27f68e4f99e7ae3853201b8ff17a4f9f29c7d1367e2e22d608eab8158b3c90b543fe7f7f4a8aaeec23c3ddaed78ad8d6d7a22ff0af77477309d27982590f35448fda62811c373cffd64dff43497c4dc6dd8e4d96ed3c4ec4265df7ff5ec322fb7300080cf3691066ee2ddfae701cfab3d721785a92f1054effff3fbba2ae568c2190eaa47bd8352b3b904c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002726431a5016a931f8716ee11d105ff8a66370b226f1d50c71782e3b07870434e7be1a7c1ebebb89c8e05a3f1053332004b68225e16ccc9f34d281cfed4e37671a9a1acc61e856922666d826312484b951b29926b9a3ca7e303f114229808f6be4b2232460ed2c3b0c92c50354b059a1a6bff485c920ae0b6c298421850c72fb69382b0d6c32910c9b535f096d31d760e9c9710b3083ce303462c0908d072e204a994300d4d9eaea4688e58952ae4b551c513cfa3c26857321b6d697d8ffc947232586382cc731200fca5d223aa22af507c0ca639678c1b40206d03189c7373c15d18964e7aaf257c9dfab0ad5ec43e80ac83ddba3c22d6ad0e81d0990c87632c21abed435f5b70f83d3a95b3942cd476222f1af55a1de3a8f17fb1938151c8eefd32d0c4f7da905f650edf3a13b0c4f8a2f37f50548d2f4b4bb496a76c5e4720f18b942b01d18fe4ea849509725229c322ab63569e6a5abcaf4e4455103ddf76e3fefd1d293fdff56d96c6ee8c41f2cb52b7ac4d34c0886717fd30f1cc2789971691d02520066d3e2c0ae529eff7a288eb70fc42b8bf60d940d50259e24e022b944b836b0635a649d6c61f6b22443c4f7d9da2fc457639d68a7683b90df0f040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000961ee37689405ed16144f517d7cc007771a19f287c8443252e858148d2d9652c4e500a1165596f75db1f420d5deea3ba11a40cc68628e91522fcb9d35238f5eff8826d662a8b2e990cd495ff8a4d7a49f52a964d9a1a83157f37069badea720a24f628fc216ab042f660f63deab31101b6e84550bff10245afc0f63eba43258f304988634390c93050ac6f385bdc69fb6bc8c36c684a3cb4be1c4835461ca31567e3125a2ce2809dca5d29f714abba51245abc045e07391ee9e7873c98207198d94402916dd46fbd6af94c64f7fabde54de01acf2a5a427cc89d0fa41a070c6fc9da09f1684034122a63ad04bc4249e68ae8d3489a4b7b77f205937e07804b7639d7f049eb820a49d4f8d64c136924f60d808b977b6c3b71d3bffd5dc62c6934c9181a6d329e12b099fc0b8ab868ad075f590e568dbba3d8417ad8c1684fa0a798203b0dfa420609bf0aa3279f7a76e01197ce6a904fdf97cd72855aee2b94c6ec537598ba566e5d9962027f049821b0b84919beba331f08ecd0fd5c355a612103776df336fe98959f18c7363af9404a9da573b615a6a3d2ebf702214039dd3b891c7b85ac79e6c269c5c3bd662985e373ee62faeecd3a977ca7738637c0f02d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0a1d6843ff398d9f9541dd33d531f84e1e34848db60e7828cc67c75cc365dacc74db249e52995083ffc20e47a2cd0cf563ea05851162564870037bb4bddc2db5156250172b2698e13467bd3d734c9f4b86109e3bdf8f78f22b9aea6cb551929c3fccff439544e35cf818761f756498fc872c9fde3212ba1180640601e8d69531f0dc4e4f2cf3b2b2693ac5d0297b60451fb5d04e8e3f7e8ead6234fde822bbd571076640cc6453935e00b444616973674f0ab1e89ac09fc8b9cde9b81431872690e6ad152da458ce0d88ade6f7579d706043dad2ff696edb081f36566ab7fa9902f934c9b198346412041fb9f0e5a7b8e7dbc87fb6cdaebb7d306f31b07a133f5731a8c2276271b5bf6ef8af9ca0144bdc898990fcc29fe34036a46d494d584dff64c4014763c29f3df608da1e4b3e123584d7143c8b1c1f87b7f064f308359e2b3e3b9cb2a0dcb7e1894ffd87b882092d8f2f86400b4dc6d454aaa7b4006b1f27e8869cb7b7660b48d121039e9eca17409a7779a15fae077fefb54a3940be0c1a9a51a50276d50706b606850cb4ee28b0a49c8c89b39fd217669da065be2f5c8a1aada7f99600700f1e137587f0d827da923a0ec74facc9231a85852169586000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083744bf5656cfad03e361b8208c6ab8bc75fce0c81814bcbd9b1d77f1d5d31fe5ba403d9ec1e57f0dc408897689790e1fc6f8b41def8fed6e89e0c09253e90128db384a205adbe67ae39aa9994f5ef93b50f78a787bfe8b2b90f8eaccdb7be0a8e68e1d474fa505f9325c225f8ebc0c9b16c9ee98c6a0b019c26ac7c323fac441f7a4d640ed7ce63aeccdd0f88411100877bf265e634f3fb3cc32715f8fe1d9a17e32a3d84871a528ebebad9337ab73addf9cf82b6eb9c4d5ede7e1998fb89d9d6ab93da6d9bd4922610d020ff0523cea64d41aa498e69f98b5586368563002591403c3ba1e57742217e2d0b5116a5e284adbb1a621d6d0585a1a24292bb5d4598d52e70b6ba24fab7566c4056ef4d19b823f03741dca14b54d4baa8607e918727e3c8961fad9a64a42e556abaf5e4e041b1b4904ed600c2308b05c08e884255847269e16be407f54d2deb66874f49c65e9e08136269433c79525ececcf2af979187338ee838d1dc019f4f7b60cbb3e6a182e5fd5ed60e76e762599746675db4cf00bca7eb7e4d3403913b5f6ae573a922985418fc77eb02c494dacedb0f9db66dca65a8ef89af307a99df00d1a8289ac5f0e26d56ba3ee76470672527efc0cd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009925621a1a8fb0779d696752145372eb26175822383dfe88b1875bf5eec41dea3f5e20d5f173111a1b0e5e550598f9845be43331869b5fefd00876a488d97af4e1934de277b8f469c25a063ef43ec6bd9097f2bae4ab25279b121731ca6b8f8f4b2871a21c98ff6361e5cf7a09b4d1cb4ab9df24c4619064936f25bf2ea983bd8426366143945c19e92e9cfdb0042051e49221915805dcb5fbd6bb1b92363881ac81207b2d8964616b3bcec4d98be8cf674822652935f15b52c6a58aa810428695059d186f9402068bd5c99a5148c33515c6e0efa29e71d04fdf1fe4e0ece02825787d491b95387d553f6f40edd437705db1bc6e4763d3c007a0bef501abaa0e79f08f19154119768cfb74510477b95f796db18538fe9368906e4d0d9234e777f74ddaf00ca8609ad415750987ba6fe80ed58a34e6c9c6f65281123490cecbb9e161eb7582c1089e53ef1a25f23e3c56a8ff84145a8cb2d139c06135d4c1c9b4cb1cc5e04458dbbe775b1598d71ab795d26e9d08058576cd91ccc52d9991482b3476ea9cc84166a7c8d6db41c1683950660d45cbc496f617e59386f900fe50dee14e4ece2c2c3c07783577a7ea061bf75b442eaae3c36345c38293b4f412923700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b58d4a3f88c9b52b8683ce13744a73c364b5acce0db9acd96be6b0ae13babb5c13f38214041437cf6ca7861b30d98e0d74d4084d9330e497b42353956c397a5fdf633df852ff2cc319c65d62a9ad7eae6424537bba2bd41f35c7300805c43e12802e547ad688f30ea547ad25b9cb7668795ba0f9123a2c86cee2f89475503cc5b6fa7a52dc288aa3a77063d694b0eb2f8d4e588e35a7ccff342864d18d8f249500f88e2b77304b5ea0a0f29415b5311e35c7a1267aee66d49e2d0c6b8c3b632a678764eecea9056ee387ece2d608440fd3a0c6788d0f4553ae2910d8219418687ffe5f0cdc9cfd7d3d5ad3869db37b14e52c54b2e3ebf4b8e46ae7ffc7060e1e5d8dbf87c1e6abd41e761977041a1a34cacf567711c5f1fc42df4c6ca586a769dd4b0e92ceb5eeb0443681a46a6415ecc99bf9995c90a29f809959424ebd578920c26f45d7c55a805336f6948bbf3b304517cbeb65d5969b3051557d8a71e0088c9c406c25ce918b5c296e8514e6a6e729d64e37d7330fdc3c8a36644e128575f734e58676ce2348bad40cde36236b146ea9a4a880c38e14204a475cb7708ab4274e04f8f4eadd68fe2bcf19e259f36ab43d3096980c778dc2ded502f3e213d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029761ca2dc5b449ecff6a01fdb165d746180ab1cbde37e5c0dbcaa580eaac01acb192462b0803d62167d14de3a9f9ae28ce92e0a4d6e65bcd2febd761e03d98183c1ec70dc3d57043c3854f36129d7adedc5e9e9dee0d951a451ee57c2b58d73b6354a136200b5291443fe4d60ae597578942bff02b43e7db72bbeee85750240ab6f485870025cfadce26934c63ee0dc29611e733fdf419dab546064100d7276fd6ee78d5a205fda8116ae54804d663808d91e56702a42d62791e7a4c4995bd22eefb9978f6b116d7ea2fedf70ffb11a0a73c01af475fa06bef75f9aab7c9d29223ae5348f11739d73f17cf87b4a4a9b722103509c3700fc91571c69652d572aabc284465ae23d3884b5d4feb3bb7e26edc5bd59d2a45fd4e158f57fe577a481fc8a426ecb77f91d848dfef46e9624032b4674be32dc9aacb0346639d92983ab0ee935b4a967eef85f0ea05667dc05843699690c02fa78abdf87abd45749c2903de709e0d7fa225ad3dc889bdaec868786972ba938d963436a0818f9bc996b5a719e34d0ba707ffb36b6d89562620ae0fdc58f6b7e8e22a9d6aad1a9ece61dd3c7c578576f96d500ca368d254877bf144c802b6d94db294ba88e897e7b70e46300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d65df96d934d149f9470222a6d9775a65acc3c2759400b5442447856bac5e9810b1b1fb96c3e0520fc953784647e79d5a73dc34e6c2b7a193d3053ba537daa26454c6703cd6a35df14ac7717e7eb8c5a771319d4dc97bde44f2d9daccf535c185022fbcdda261a3ad6c2dd09348761fc92cc5ebb3d99b31b5200b6dadc9b614be1520863130c026811e2afa646c83eb46d6592d9d42ce088a198f2e3a9168dcc762f47026dc547fc78cb7470d3c34074c52a9142c33549d2a950a6f80ada2d169b72f559593b1d3947defba761de90d3049253303da58667e84b9dcf7095a04e5a598410e4f134eaf2d5c6997968c66b67a18f5ceaca582f93082a5e13124ed54d1a61b713d44b97146ce92061b8739fc5750e9d581aaeced59d502e3df9f8ada6e11272d007473c7fc7732d20b5ddf965d20f3fea1410799e95158a1552db01ef8e429421140379096de5f3cdc3fb6199814dd94cc9486a68b2f323314ae25b70fe352ba3c6d4da0902ac7e625289cc88287855f9138870406058aa7c877fc1ff25aab8a47cdb8599bdaf55c1d26641e6a9e22e2f4604f7313adba4bc9fc5dadd528b62daea7116aa6bb26874c456e8c1c3843b398e3263e31e8023083547e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d341413e7f7e3425512cc32fcb6330da89e81f9f1bec89d89b3337145d2b910db2df86b4563a8ff2a0bcadec2ab5eef3d9e2e3f8efafe946993e4d2eb4c26b09b790193b0b37f3a6c1c41ac6ba00cdc6bacde8ceabc07bc59bef2b8c43828b2d2f0abb9ac93f5db699bce3957bea962028121c110fcefdf8819fe72b287bafe9ba6bc38d73d892cd4c08aaff60a121d990ff0f37cbe94a272e7203997339d433675f454de7251273bfd6f4e419d1a8dbe7e0c0530ff2013a4577e9a33f19bb14d192f85f83caa99e837b469ae78d0b4171e67a869136616ac35486bf858a39f7d9f47abe9334cd4f73360425641f1fb61d51bf12bdb5d090ac177cf97c687cae09f9eb560c9026af7db75d8e73ebca89a1ed54d09d43ffa0bb1ea2633b98635c4dc9edb760f2e76c42826ef3b8e784ba7abab57fe8c5b4da140daad75acda6c0a086edb8b97b3c2450e1c61415e062374f4cea6d88b47220b6c0ce2ace925911ea6e69123ef917adaa51850bf4015ec4e8684903e20aec5f9ab2bcd96e5f842bc0ae03823db83c43032516173255b135247c9ef92b23fc08ef865105eb65a8aa9dab5408d06c31f711571618a11158d2090299ffb62cd55cb3f542e91be1a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d7e4729fade0fb8439c0f53cb437b149f5c01862a2b50ab2e48dac69852ef7f9c1ba1d9ee542835f3d6f6431d6c18496204d9a9590910a7ff7b5148ae3570088683cd3c3ef3f705644fa9ee9d9d6b64022b01e26ad31901afb8fa5316290a9a107a88412a15b05b6fb62f7050db1c5e18177abc7965ebf05d5583bccd03768246a4763aebd2a211d0b5e8a12a31afa6567219ebd7a38f7185352b5e6d9a03e4d4be644fbeb20f22687af54fe5140ebdc7526e456dc580d55846defce117b6cadb596d0f5a20b98cb058aeadb65a5b21df208ce8ebb90083d23e52844ee7c2fc260531e690de6bbddf6d8ff15067e60908e714bc20b79c5642033cf0011a54ba1793271642c00cb53533c2b7b6858fc92fc0a0e2124d6ccf09df79af84ae2c85fa4f718196ca40175e73e7c9a01f2e3c996d5f1f3af733fb389e3a6e160cfdccb8c8d92a2758de7b96c4179c8fa41f9a0e3aec6d6eed8a7145c2adfb5c53018ee3d38572c7f4d390c7b81ebe09ad8a2d66ca2f8fad5bb8563eeceeb9923fe5150afeb6d00e758cbc45ec3b2b149e7ac551ad3c35dd5a3f170c5a8ec066984e87af27e74527adaddc30e17c3ea83b28d0869e86bd34570a13248e000dabd969da000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083b54f009bc5dfe9cef4826ac02f8c7444a679c84d847a1ded73b18c7b4540223e878311c9252dc102e6cde8c1b0f568e56b9b1a023e789ac2309d1d9d4274127db80fef920d30bd4d0f535fb81f3090eab6e597dcee02684c59c0a0533190bc61b3aa998ea05c49db64a82ee3e95d72577f8d4a6bdf034534be1dddebf42efcbe480c62042f807c410643cac8e3ed1cc8e570e7be7da7de3821c1104a96b7497ff2f36402ab2a0d66a1e9f773264cc64aa089f37eeb44a6b758e29548db551ac723f54d69b5076c734aedb28675f92db5e07a4f1849fb7832f4ee383111feb02056bc62085db18d3538a5228ab8ed10cbabc32dbaba65d1e790aadb8d2ab71f9d41046289dcb2e2e3f69546ce7a05c8288765701289ed270ab22695bb45129bda0c9634b8bf95856dda85e858cfac4384fd6ce946b029ff2f6de116e55985fbd4386e9ef700401dd2347a82811926a108003046a5d55844730a69712f72128e4d6b4cec66cc5302cf6407a907896f340df4e157de871866f24111d4bbda85bef35ed8f35c0d4350fd0cd037c4954c70830f476d25694b10cf9ef7af5e20046b97226a1131408134560cb290bed51a0ae1f964a3f5e8daa47c07ed8feaa09375000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f4751b19d0e7c931190028aff922d53d01c9f11a09b1fc134f37c0f287b5879688539ba030c67dc2ab5c23b8baeedd543f8052e637453825197c1f6f97c32d965653b47c6adac0bc9be51f5fe56d3b92341781840ffca02a6442c4d6139f32868f4f69afaf8e4984f1ac201201a5ee7fe8d462d98e8ccebc5aff984bede5d4a746c36daceb84fb9e9a8ebacf5e94941c89c4165d5943fc5b0f1b2bdcd3852de49737af8a2b2ac8b4668abf674d9822316089446e488ff211407f15c125a88a1c0a36487be51b220b812a8d87d9f09c704a3b573bd841baed5094ae5092a01b6989bf4964f87ef793d9e503731b128a1d959a55121d7681fd526fad081dfbacbe00b988cd48933458417b0a214c23298cdc97addc6d90340b3b93568ecbd7a62ea4ff12ca3ff47e8b15c7de48639e055d501a7d85d0a9354913ef2098650ed28571a4c938685761f1e0b5052737abd1d455ec964edb966a32c5519dddb44ead90cc522ae7ad5c790a85324035c8e40bb716c122e70d65200389cd7f37273450db63874b56a1a84129f8ec9b63952f8b96494abbcc12525bade2cd3ce4de043b9991501e8ca121c749f400fd3ec4c6abc7aff79b7c3930a629bad6084d862e7b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080c42a440453dcb45050b09dca1941d0518c0ca51667cbda0ec9e994235bfd3ec397e2192eca6c6c4fbe384188d088849d8eed83cb027c75d86edd57a379aa89d9ee6f5e679b2feef39d35a3cfa3b9d0fa74af1071316114366c0230153b7f4df6f371854405bae8bf96e050095f94a187a3a75abe32231c5539aae351626ad9003bb26ecff5fb57c4ae140152e615ed54b88157ce04307d2137e2a4408555df915519ac2d310c7f293662e17c0bc2844a9668b3fb55a169a391ff9ab7b5aa103f72d2d7195ce2763d31b20cb8171ebbeb35eda3dc9318954eed4b886cf80156d97f86c8be4ec376b2b5eb93bc6dde99addd47689b7e25652b893ef709f93b5b25abeba4e3a4cf682d114a73c341153d63f576b4bb7af619e4a510a0e158ae76e1e0ea9e623f942d14abed020d894a55a31c4dcaabe3ef944ad9f6638a56cbda6877967d69dd20e9f7acfb527eab7eb37265886017e875bc29879461b3e89a0a3fb206d81fce0ec8385d2b717460d92b60c05d9fb0f0d5575a71ac35490842bd5b1e285899891c935d4e62eec91fb102e8fae8df0e3c88b47950d9a5734731ab6a1921e9ed44a3c8ec73c1b7b54abbfd58e357241bf8010cc93c6c1846d415c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ef3089fe9b72c280ec8da2f5797287ba61adf91c0b7bd8b992412ba214053e0b853526ece9a6c979f549da0e780d668d87bd5d28bb1c116955be07cf2010b4016cd2043500727693d45810310ca51a62308ddd2689bbfc1e1b0dfac097138df64ac274b37f21bf3dd241bb6b922eedca6c02c20e2e326c84873b9490c25b1db8fe01cf7faa43583a1b313fb751602dc2d68d467349b69e44b51b9da22b4a9f5c305d56cd916ab489f13d2c24cb9d31475103e4e9a43b2cdb93e138b58c4768f55385fd702ba4861d9f02c8debdac8a1ad70d2d4df339b51f3c4f5a02dec52cab0459deee8b417a38a76ae70c869120f2e509cb277905fd52a8a2698c29b7b58a20304500497b0c00f3eb0a083a3cecafcd6c6f323fbc09fcd53d8b2effd6c8298d2673363999745aa9c3a11cbd80dbc27206d57610e070fdb73ff6ebfa84c6e2dd9cf86f6a6aebf735ddf5e846c5efecbee4e3775188460e58c1c7685f3fcb399ded38ff8db55a4c90208e9a6883dcd2d30fb415e4338ecacb58d8af76962128f77ef7b5aafb81e9cfe2595818d88f48446cfe2fadd2881f434774e0304d425af1daed4d41956c4ca9e858efa8560aaf8cfba11175352c9b3a75c304535ddd100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b436605251ec8e98c4683d0660adb34596917440b6b56c23c34e6b123c0975105d063f5cee47d14b5cb63b4304bfdd16bfccb79320f6ea7477aef04f1e7e1216bc691fc970dd6ff41fb4d9eaf87ef3359f3de675fe61783f0fab109765683f6ff99d0ecd5b3d4590d3bdb84182ed627288d63f083d6e7307e4448161e2fddf59eb148e18ef6dbe5b3eb8c440245f9d088dea26ff5e4d8fc6ecb63cd976bd029bf85bfceaca86c7a4588d4a33d51fe0f4e021d78c8cb1014aa369618038ecc8815f74def0e7e042cd19c5c4f644ab41a2c82243552787d4bbe23c131513a1c5612db7fdbfd0762116b106353e8c90e27b87a673fea96c26efb47ce6209fbf5582e963b0873145a747bae20abaab949096f06be01a0e04876b24a0560a0292a56c4740bc5101c0070f3cef3a4dbf619ec9a88989c5dcdcd6a10b0a8e2eeeab381ec7d7d1e47a3cca46099bfa9cef013aa53272fe99b115e37f778b42dbf2bac2d7f8bf17d2383801adff9bca9ec96928c9b576ee63154b537f76ad2ca2c1ad990609f80a4f5d901fdf1adb455b06bbb87a7bd79d7a288d3784e90026a372c3c0c987f78fe89ab708e9e885018913edd9add7a92a3f9d1e9e2425bc089960a6b82000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003244b9fc7d5526770e515c6834ed5616acf69fe0d52499458b45d1120479cd974ff4d0fbd7ff78562aaf2ab8687a7d299fef01f1fac8effd2579117d95d4b346cb3e4083572314d5cf772315da64ee953cd037afe950b70488bae6813317ad2d94846ddc6c15b353a060549851668620d8b21eb66409a9371210e1390af1bd516d1d99d69ac9b24c594f9f0f3b14be3222672ab7cf67051aa59f7219ce6a1d4031795bc62d3f923d60329b1a71177eeb16fc074adddd516444b1fd479198126041d8b5e937e1ab4f0ee0d77458c647f06834d592a248b4b38971b33ad6b345cddcf7e0889ae16d83451c2b04471c03a62ea01940ed38bc041423da1197c883d298baae16f2706f94df24b82141914c522e113f823345c9b3a87c8b57fc2733c691895d37db6188c09175659493145cad597e8976bb8f6f82da63fc611274f5af21cee1313ace8e7031699982d8bbba0c701360e34f0a0077472770f236bceacc3090a935969833db561648103b37c2bb9f4cf08fee472a4804801a6d0505ad85b461a49bd759e149703b43caa43af3c3fa9329b9a7d9473c1daef208ed92f629dee0ed22c41671f928254ac99e96ffd1c443cd422d4f21c1d1784d29ed051380000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000281a68d55f9fa6f30d83f279226786c2235fa681d7328620cc7b378a62a5935743f8a0434faebfd2ab05b2a04ea1137550a001f5e936546101378d95eef828ff8d99031c13956265d069f8e2d47a8fc919723cd241842e4a19684709736f038384d6a0192dc0e97c93326ab62e4bef59c880296d69d81f4b2d7cc26dbc7f92f9b8047f33da8426f566876a4805aeafe43c6dc723410ca05a585c5e8299a8aa8e22fa91d41af7a28ad991b292e157500d435c8b5e9d41c14405e8ff80418c72075ea7b72c62f7a9396a5f35f75d141e17e64da65f37fa680940ce2c02c0349b3f5d7ed63817d9ca9524ac2459ab7dea86ee97822fdd698fa52ddad376a7ba0168298a1186b4f99a09c8260553ae1368c98aca25ca8df4f074dcc9ce534719978b6d52ea576aac9e9b2d807890382b8c7031d64ea015afefcfbd15fefebb3a062f2acf12f7fa2bd3c6cab431285659044cf3c794b076b5a3b62c9cffc360980ae354a99da5033bde0f6873a4d9a47d41875ea4f85c8927a214f79e63a57d280d7b9f8aa873205eb76c4eb73adc57c5de1e0ebf850e056f98906fbbb146f18fc1725554457a07addfc9231aa134c6207a28dceba818b0fa7113206a37e9a2969b450000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adf18862436e64e9323d003d73efa56c350ebb044eb8bc8f43020e099a706f81c016f00302702efe59f51a795bb616feb7005e3ed09fbc125f992a5283f5429898ad5925ebc111d8c5922600c8cfcf09a4ba29946e219aec7dbc2e01fbffd10e512cdedefc4398eddb84e9ad435c45112c34720c24da5ede904215c5002b2817466c6b9dbc3d7f06ac6d1bee9f8b9f54bec07915504340da183a3de3700a0454c05f6351924e5f110f8d36606ebf1f0d6d378d258b839d690b764c66668e847f92a77007836b41582995e12ad2165b80ab0369cd58b5c00b51e1cb723e261a6bc97c3c49f8a58f776477716e4f79dabf03b8b001842c638086837d9a9db207980a6e3eb9ad9173c1702c69b27365c4ee4f7ee63ee189820b8ceb0875c510475101aea0b654a0c05fe829fb69161deb1c9ab34de135cbb959dd63307e5b4befb581de4b2bcba16ca52db98a466520de7359980e2dac9efcaa1c08dccf549d1e245bb1bd1e1dcac87ac4f7ea161c012548377d614c78d0a2c3c6056952af0f7f95b27044f5a20935147764318d4008c254c3e6a7d082fa3318c7c145c0993b111464b9bec38915fd74116897a9bdbccb0c2c32a5d403be8b3d3a4a0fc292af654200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c902f21a67962a7164ba7a5d204a2737f15f4cc6720a05ca77a44f7d54028452b737290a7642d7311ba70d741375a29ebc1a919656fb32b0855ec72716535d8a5423604126b382e03a5294fae2edf0950d720e85fbd63b51aee068cbad619b272cfb7e002f11a587e049f067cc9c4a799a8049a6e83f2823ae31058c787b598f210dd7f4c4b99bf175e0d2ad0117c0ba97664fc52652b352b398f3868539d7166c9b9718aed87c5928ce6d88468cfadd69346d1204d7fe8cef28ff1f4caf2ccb9ef0a19383b5a519a3c252b4552da43c579169c02827da084f3d99ebd68b6b1662da7dc9d125223147171e30246e8015ac8eaa70b4e089755d423fff8b7b3c29d3492e436907e6b341c53ab92c185970868fae1321417b6a5819506f3704c2c6bd52c82b3ed87d2f664a98cf129d609ca48c42d58550f04e6af85248720e2312e7bff8b78715e8df7e6bc62b52e782c5ea6764a07d9f4ec184ad8a54e0dcaa4a8419af6f0395f10998df76fe74a5a5f2a4a3aaa547d52fe95d22945fdf7b2bd14e513ccd9ddad4ed7afc583b28d3fa3345c4c9afb18e3d06d5be0e431b7b1f7c0b93a9468185480d05355862fcf7d7c8f331f7f814db1da18d7b35c1a92acd5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026ce9563eb64634b75c25a24d5cafa39182ee000d28cd90b7a011b5585e00f7ae861b289939e02c4199df1885745f0229a5c263d984a9578b82de9c251a5dfee0bd7ae3072e16a921e3f7d1f65743f85352ef2bb260f340b1b188f5cdae4d74f3f356850f95505c022fd2094c019a04397f3edced41d0f70f902c9db7030950a1f654e55a43c773d97f9cf7d08107e4f02c6bbe7f6ec402f9b427145c1e7069ebff079385351e2259c58f0ca7fd08057075d4acdf62410065240e71eaad4502b1fdc5b92c97f5612b5e68bb4f7129ed3bf49b2728cb87cc7700ba5b4bbe61ef4f722dda39309ffbe92323e674da27a2c7a2726be37c6bebd0c1c2ecbd4a3ed189106dc1a7afe9a6587ef8a45520e130be10d2a2bd18928e803c7913e1ca5db86de3bb999311b12dee2e95e6a1f59e15cc98eabbcce0aa499ddaa62011f2ad6cc4d3fbbb7e94161adef3d6b187b04fafe5ee2eea001849d61c1e273ce62687c12bb143180acfdf218d87229bc9d729babb1d1a7b6b310fe54a379262d1d73ccab6b6cea257bf5ee657457dc1500a9d9ee4509d1c8f96f00bff3b5aba8a48c9720f51545e619453e1280d933f47561ddb3676a5dc6f1ef2b19200d006f7a4c8cec000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083f1daa65663ca9065c485578b5c972987024059c9d7227c8a1a077b4395440596823e1936bc1755821d97d7082a74eb82c64a0abf341e579b4f7b03a41d742f63c97bc0f64299720f3b4a481a6279ca52f9c01f49bd253aa51fa35db9aa07bdf9737d3435a43ad349c927fe2fea4a673a464033401f198d042437f90b1d7f89966e59f2c664f4bfcf77fbaf1429c494d901cc10407dbd71fd0bab8e0da7625a13cbc08d70dc5d1b7503c378df2e56f16d95bca93dc565698565794d5736565764ecf9aa3439264691d5c591bcc67b85b08b9e9e793e117d45c961955a11c7f99ce539f4e9a10cb031f568225bcfd491afcb37344266f589debe166fd209e9fc0357267f1f810d4b7135afe98c5985632c985ec1ef05235c30f23c10528fd56061933deac9700379cdc94820ac8f89792ca3cf0f08b935762d49d80049b6e3f18ec360dccec9dacfe0e632ab7330a974d326eff3b5c1ad06251c844a43ec0e0231b364a6c4534a8a6d30000e6a49f8150301a69be76951a701a372e6d10dbd908fc872eb97ad79a363189a40129d99b7ca5a6ad7e2480fe3c00323a5d68bb3a4e244492f523c31b6c3357d5135d422cf939349636c17b0a39a1be16f761048000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000901b373b8a3cc87ea17cf2e11b025464713a83d52b7cda0a4a20c5835c4b9648176d72aaca054d46e79764db8f8ceaf7381f02c00ccf32c3384ea8191855d2ffd975c0021bcfcfd31d6e6fdd4b93e464fb6cb094ef0c1ba0f099812ac51daef02d7f0887f00e53a78fe13884b1d804edaf1fc822844b2845f7fe6f958160d7d725060bce4e4ebf09e59f7aea69152df0c2cb61a3bfb9af896b38338152be04c61a0c3e87ce925a7fd52698136fd25dec2ab6ef438eabe19047567025c8af9eaf4b918140ea68e23d572e5068dd85f8d11493e0de3e42e4ddfce425ce1c77d11c3c55cf0454207e266fba8dd56ce40c91fca4ea61e4fe1c580881e0b60dbb9e0fd4ef0dd828d58793c1ac93d9636dbaa2d5703d279e9be835b7a9a3c4b42f8a8f8961bfaa0b5d42c54024e72d78fc73b9379d15b3c4d284bdb296e68ced7a40df6f3c332d7a1dfde1ab7081d1b54e563f00a939c56f025e463c5e79c9282c833b92266a6e1fae2a3abf1ac1f8e8c643c6c0a41fc0d0090b534c6fc26a45c95d5d609b9b0a856d7b93067904b398fb8cf16b0e2aba58ce810c99cd3babb05a1e607ed259f133cce3bd59c1b88a589d9be6b9063c2278c7300474ebefed45f8af9b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae4e13a908369418c9b17e45a5b9668679bca1231f8894914082af4540c6d64ee0aaa72fe917735df4c5e45137d86074eb30d04f92f41b1b8a4e7df3909599b20fcef2afd4507e11f7894935a42545978611b01edf9f298bf08ff364f6b489c9385e3df1a83f5ed0b423a956b2ac03719b3285d1062dc0eb08c123cba7aabc0cb018a07ade8d08c44cbaedfc426ae588ccedf200f3ef5479bf0af458de2b15ca8e672dc6cc36aeff517cc9f5508d6370c5fc1873d13cde89b991536ce5ab936bcd99eae2c3b5d48e4014303a7464963482388808a4fdb3c67d9d5d0b6ae0e42ab0bfbaa690fbc753d4ad6b5aeef70b18e8678939b0acfba451ed2ddd7767635f33d56fc506297a396be0de317062c332899e6a3b59601d4e71963d2e3002caaacd769a1c399b791ec52bb9d07cb2461348ed23dfdcd12bb1ba9b8957c89c0ca1388b0f70eaca5389e4f2322f471ac32d5694f7d028a15449b8065754658799508ca5df425b96a045326cca54fe38d88d8719619146bb0324d188dc943d33a87da78eef9da3c80e190cd79029d88e47d99eb30011fd7ff063d9492418376f5d1e11b9f71f8d23f5317bc1113f158b0cc8c1dee32d51c2b17387ba45e18f9f048c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007778092135da33eaee0c33b2b6d1b43d5f0b87793f09106ac4fa3eb8925b2952cf99826977967876c44ed4270eabdc184fdc78ec4a81647ec86f6e404dcb741f51b761b2f45f4c50962a364812b3f928c4768503362aa75cadb4d7872815f8013ce60757ded3f43c3e2a3fc6b966aa665680675916e471ee93c9ec376c33ef64fecaca7d8fe2c6dc673e85945e0d164aeaca5d9f4bc9d438414c4a84c849738ecebdcd651281288affafa4207f4be79d96472963cad259d3aa1d2345e56b28b4f7a7d41c92b7bc366825642d6c186720b286264eeaca2dbb55edf7d346be08adaecd48cc38e894fb1ffdc140c482f5439a2bcf054da9899787b84c483eafb312b27c9c4986f5f9fd79ce969d3adc2060005846a6d0be10adc446c81884e5fddf5a800e8e40d9ecaa167196bda4ca9266a93883a85d2829a85b4b218c96c37df155f618217d13bf36c0ea3e196314499caff21977de9dd0fec713f94f03ee81cf526d37937f487f34bdb845c1d838a35be5eb53a283ecc09f9d7f83a3f53dcdc62cb0abdea53c8da516f3b9c58bc5b9b0e1f0a950fc050acfb3dd0de2b39885da8b5202a16298c052518065469415ca1c4c7c14a5d9a641809a9785fe410d15a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a854c4d90a4fdf7cee9e2b28acbc71b108c5b8b097866f397c53d72b5d50c0a28143d13c2e0f661048563fdab532edcd6ce2f4d758ab505b81441a0482e5d3d6ad3b71575e7501fcf3feb49d4729e594e44149f17848bbcaa62b8a8831a7b1fc00310782369d4a573c90f4a8beac8eae79e3fd63a0dcbb5ea09e39b43368ea061e079354f00a4f13207a729cd1fbe38d5e873d85a915cc70666d5c180ec896239e3cd684ed83a21cfeaa604c07e9735ae1502a2cd6d92d55788bb33992cd1ef0171d998cc23f4e412dbf107d3ba76d631ef73d43df5d5cdf1c08ad43ebe74033bd2eb80a43ff56633c62b94208ea07f94f3112d2bfea6adb531c1782d492c2bd5cb80b7f639e4b8b9b8fe5050d8a3dc19190df4559474c74bef31c719ece2edcebf6bd15f6f2d503ea7d18413e22793adef50eae7557de0604661700d0f0cde5d843a6abf1411258aa495116759cbba969734946a26e341bb9d5067326f6e5cae31b8b37746ff746f07d2d4b0732199615137809b52ee74bce0d35bf9604546436a2da5d77d3aa3663a13fbbf308056768c638a11839891bf5c0035ee33732cc7817df7b4314479eb05b7b778520ba9d03fb59b1d2e2d8a56b3e9384c390dca5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085b65651e54e1125716e1d3dc326821a8f5097458b145f1de0e04e31acba4a3394d2a29a6c2dc49fa5fb1780548fab5140898899316a14e506b6e0590f96df360011f530fc3ae74efd69cb56cea34e01a80284d83b8485e3538a0768c0364d8373668e436fa04f84dbdb60d9858975269c4f76296912974cdb85e5ab66ac02630dbea4801060196c5ffdb990bdd684d5d9b59b40c6e008b99babd79c4192553778715e2af6d07870def6ccb8c33a497d45ad7908e9ac75d86ffefd6bb2b595fec73826110d940747acf11fac157addacacd36676b92997d0a6a053620789fc34c4f2cdde21c7fddd13e358c3cdb99d23012d3c54e8bce28cf259958f63b102d72902f8a2a71e11b46ab85324732dc57ab3316daad6b7834024d313ee38749134a653e057c832b4eea84ee3cb30b18175f4bffff0e16b1df35f58b76ceb4a79ac4d68f0b72babdbd44f94a1983f59546e4408e3c8bce0bce870442477bceb8b69a55baa7bfd327187cf548934fed68c4a2aa7623f350e1f7cdf985edbcabf65340f054358e9fc3f02203c164b44135df8c67dc7b19fb43fa48b85a5726a13fc69908d1a6495f3c841156287404eca1ab4b9dbb9557f5065a4ccf1bd9c353eb002000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085d59e8e2cba801aece8d47cad3cdce5257f9d753407747cf5649c625616ae49ca68315f4cbcee3aeefd6c41549250a45c6868ae67763ffde3a0aa0e70a787e8a8298c78dcb1333a331a981b860bdaf0f816632bfef590b3167cdbe67d2b0fa8a6219e2cc0dbb0ad3603d1f71d19c9a8becb9c338ce5e328fca62b4c3e4ed0b24059f1817924b4b3abd543487f211511fde0404d51ed36bdee8708463f9318db6683619709ee84309638b5356e90c689d0914f7cea7e38ba36c789cea3f3e5247417fb1bf89d3bc2979254586842e89a00da650a357aa5a869086e7b027b7b8af52d57cd8bcfe3026d7360a5a41e26eb069aed9dc53fbf934b5063531b44c2a887756ca800f3fae505f32f227aea758b914fd648f3a183730d8c44b64a11b2afe5c40dcf69fcc16467e1d7d42d0c94badaed7e1783f16c7df8a4f307fcf3030d46bf2bf797c765af336eb8bdcd80828f1269f649f996b4ece5e6ab9a6413e4ac780a286af73fd6d597b6b19c39506892a6652d691c34ae666c6bcf8afa1497343aa2c6d501181ba5f2833125217606fbe50783f9c1d8622067fe8173061c5efab3acd400dd356ef332e65ab7be2eb9dedf4f346af4b2ec0e0bacfe228e21de07000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094e41600e946472f4f2adcb99bd5294871ed1229d758574fab21f3904ebba078e876b201f392d52b31d68021b9ee1948e2fd785543eef9cdc2872310d9dc36ff5629330e9762a0057fe5db957b33eeff200e460f8bdb78db4e89cd569e47452611274a1ab4cbbdaa970379c09fcf2b5b4e17932ffffb7bb090f528c6a947efe6e94ed430ba8ccbd209b517a9cb22a2a9b58d4e8855cd4d48ef7f32be89f9722a54434171ad3f72915353c5b6a4ca026e877dba3c9dd509181df10280aac106d449320d0d52cc13a0092fc64f43afd663ea087724ac6cb8b1906000279379c446aefb528592b6045a72e4c44a70f482e61bb6244dc369d927f2b6dd4373716ce2ad2f587a09517c191d2994b9590c87499cf9cdeae5b96020fd164a3c6d0de6c9652559553780145a44d020fe4db0bf2af8300393639fe727796e920b2409d52b1d31ede79b769bd8b6bf2f6f1e7067266043f4dfe0836365c40d0e936050ca47097bb3a688232ec133641ef093386b39da273f951d09f3b2febc2a808a5e3ff1e7fb669cd617baeef6d5a5a98a8cea1659856bc8eddf7ee409db20a70bf86c263045b10f49c3bfba1483ecb16e5184c9313e2ef79fe1cd72c0de9137778f8a1b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b849bf612c93f501e638b2f38269d74e21600210eaadf9127627d0ac429d94438f7537998a1daaabbe68b92b1687942b62ac16757e83fc13609bdb897330c231ba925c796d59ac83eefce17e66bd4ef62029f8272afd14afc256e43a939bb84000da6f55e1c2512cfbfc54bb7c4f24839302fe85bda758256b5c796c9586aadde05b01dfeaef7db295a79cdb2bfd9aebe67ab68d3e506eb74887339214b679b879687760e7ef3d82f7396ee8fba6b8f43c0a8b7f2549f9bd644828901d0fd7c492f8fdadbaacddc7aec69eaa9ddaaefe462720690008075f140cff19013b16028dd0a3626d92cb3fcef523fe495e5f68ef7769286ffd86522dcc82ff8d55e1c530ef755dc55e100f189ecda8b7bffe04993052f1d59d1f542add7a9e60d470b435651c93bd7af84e1dc1af4816881fafebe3ae55f8c5a15d8395f031b02de499f110f24d4c9ace39cac37c5f9afa279ba0df74db68765ca65df68f8c9155e90938312267164b83f8fefc9e5ddcda27ff68d4260918dbee357f113773218dfda5a91d026920da692e690c520f2963b176e671ece1906c64823240b004bff2e012fec67d13fb529e39c7a46d95b035403d4d3a12cd4feaa0f080be9076c394af30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067bb3cc3b8c669749bee4ef73039fb3a97c62296b9da4ccde29854b8b1ce8567e1b77732f42b19d4b9579605e2e5e60f335cd549d398a95ff61dd4b847fb78f6ff13af3994fb9a788a11c1fb784caa1265b3ee13bbe5de4696296b205f2d7ab9ddebeaa7856332192174bd3db9302269c01ae4e8b88ee5de2b93ff6c8df3277a146b3d595436603a7da3fbdce06d3a58f405b013eb966a0307f8ad9d23720d1819883b8b0f86fc3089c56ce42327fe258fcd2dab29c819f84ae632649c31ddf008178665b0c04f81375efc8ab575fa7332d8320a96dead956d0954ea9a90f3857b4d18b969377b3c54a21f317834f3c4e25e73edc2802a8480cf264a9fe215e6f792cba439c5399db89a69b1221725385f166d3d9bfa06ad202d29b10a9e80f59c70f4bdca3572aec12bbbe8d96baea6fc58595221135e9fdff4908be96698ae9bd723ee8d4be37a4cdc12197df24f1a7bbed140e5ef55c957e665b5d3fa29f170d7d5d698b187c7380cddc9bd681c5acc1be168d02da721b7601f935f09df32a1ff7e0d46c445d03d75539d567cf22928e2731c0ac83be0f0de8e7cde2252da88ce44ef7364a83bcc7f866d9d37e98d8fb332dc76ccd85d59c7ceea0b57b6900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001df59b4a952eb12183ab3461029654e5893f23a0ac8df8d203825dc420cfdcc640f4de8fd11a14da6895c4f596ce2531a3276e1bbbaf3f75a8a4f2198112d55248435495ba4368d7f293aa3e3e6c4f54d226c0bd935b9414a33c0ecfeffecb8dbee2b66616b820a6a6f52730cb5b43bf42bb638189b3fe7c8380ab119b814d992fd6420d04caf28799ba57c63634b041f29508d751374a804ad9ce64895511f00eb97a2efc51547a6ece89a96c3c16e19fd1410c21da9faee2cf993030f510d0c6745c51934957f1be2153ded795ed46d64689e9e31ab614c0764747d42d05bde8d2265e33dfc00aaa229ce020337324adb0c2cbfc4166835072609a47f5755ffc195adccc3f11e610ea20026f7cfe24d714dd47fff184ef068ed7e98b0b1fad7df0648ed69e9bccf08ef34fef4ae3afbb2fd67bf7837fae43d98bec273ea693f9847fa7d5315cea29d7f70274672ad8bad5eca97a445d0894d90faa3cca7c122d0244b98f8aa0044d1e095980fd12b547d05e136b3db89fab6c6f178f36ca3623692bd488d068c1221522cfeb60bdb0743be17222d308e5a40c39c5463dc7fd30a567eaff901738b67dad2377b326ab9cbe60a8f779ee5c8a6712dcd0e8d19a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b0bfcfa1abd2ad017ad12e0fc0d89dbd3887e6f02c19a59e3643f3d6da7b9ae8384dea52ea9b730bb2845fe2e8e42b78e99730de04a843b6921523af6daf273c53026b6e0e106fc878f2e90a71b5a4d7844724b3a01d187684afa674e90febb67b9f074a776287b4232d2136ea9c4160c487fdc3c768fd0c0b7cae3cacbc614f30e34939e6fa1f918e2f6de8dcfef6c9ef2f1de92429008d6d8cfcbc6b6e7157b911bcee9d1dab75b7a1f938bfb37aa1a6073c2611051fbd39e0b94251d1d9e4d62ad7309b30ad91eceeecdc34ac188fd939a22c7fd61b4a85f135c4fd28891717f4b4c5f329b54937ffc1e87f7a2dc0ebe4fb75fb222174456786d8ab116def51442dbd99072e4f83c8ac28747fc62c9255ea3d99b6ce7e8aa235abefaee2abc5cca377ee627091bb4271617bf58f311135272fcc7e605f3099fe2b2ba21a90cc30be51c1a660beec9e18f1f59744cf42abe354561881fbbc3cfa15ce9ca34ec65fa0a98af07e16a6f6c000ef9c50a316c34c3a509984aaf8d4655771676781d910f7cba88e20d3f77b12bcc3befc0d849854e26f0725c4897c47f808fb80674a1af14d2ba20b4c2c046fdd6d05b536edcee57723f219a8d95f9a214d6426c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002475331c457facaa951eda0a9ba4223930f3a9d624123c951e455b9ed6a016699fa7784a0f80ed3b48fac062af1d5c6c6409ff0b64846474374e6abb77f795760c2290806a36a2d3e7572215ee21087def7903a9c9f64a02b20e1ab36a0e43c081ead6761a3d1d6fb4a3cf530f9166e4cf64d20f9abfd0c81291fe0009981f6bc52fe7ba093c700e3c1b2a7f47ed549900db47805e6749934a71330535c5d0e9e5c0ed8877f99c11938bfe0e398ee02a66e0f5f1b7a7a43183d6aa5e6e3374c01230fcd5e9f616650eea6e3f30197476ba9fd16c49d426c528137074e639f74045b250109dae48b368c55fe716018d97f61d5dbe5ffa2b44de5cb4abcde1e481062e324a6e2bd6b605e6e84f1fd22fa6f0a23cfb68a95ca64a9dd23d0a236b9cba5c6fd2d13a21de8c6539554181dd16b246156b07db6d44e01b03aab9822a0013811e96f5f89e40cc4bb7e7d014e2930ad2d90845e629dbe52dee84fbef7d363db448ab10c2246f8a872f9083c98d24ff5e56a1e041c3c7924d0d4b00121b5fff1b8e7547e4afe88d2a63cb580f3e6962efd84260863dbb5ae0ab7da1b8cd1b908c9bedcb0efdee0f775a88caca6325bcd228f6fac1fed2b74fa23956af783c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000910eb670af9d102dbee5e664ed08fc6ade337e9e270994dbc6da3c8bbc816ae5609a0ec01dd927929e03a22d6c1aa5022c1ba2180f1d84b1cfc6ca278bd3966348fad03644e522381d3284061029cf5668e89499e34e579de77a0dedcfc13cd86c264532d6c0e13538dfc74fe5c721a1260c56cdd590e52598fb6826ab65cf1508b613ccc826af6a564c03e85c871ec528cf5d62ff9f5a4670146c6104c3985be0f068feddf76037cd6098b219fba92c7b2ea030c2f20093f672641d55d6ddc709fc723f68d1247aa2fb7e3500fc28d4098d86fc267b7c85480979a3813970bec423ae17ba9c2644f0b4fe29820b8212b6ce7e21c6d202bfe712fa434ed33320963ad3d3f84642134e91b827553b245d2ccaf523365c197a8a610aded8b21719d7e8f295cd8633ca5891a7dfad64b623b3a23d81d2c27a8bc3391dabaf37b0d1afe7317d2e6b0b68ea284204ee84994d7798e8a22acae6bd17680c6e31e55048a4d24d1af1acc2423c15cdfc80d279b55a1368c4e2ddadde325ba3be2cd2eedbd7d4587c2369192732c765033c5efb426ccdc74dccab92aba8df4b1c3398f8f4e4ac8cad390fce158d4d9dc5aade4969c977a3b7a3cda9b0eff9624e88772b9900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001689617056615a9180ff3e6cfd06682b0c73bd8314d296cc14cb119ce86e88560d71de0ce7c4cb832fbc144a85b1ec3c77bc36dc1d68bc21a5b7809a9e457e6d4d4336df5686bbbd4b6d468f95b035f2cc19558f3d1a306a3fbdefa501a79e799fb1d19f67752ea605462ebde0f302f6aaf24ec001d0976bb67aae7a062b79e0579425c56d8bd5f22f50d51976d5a921809324158e729e6acf24b343bc7d87b9acbf693a974d8203adc75679ab3368441eb5845e4ec8421093e87bdf5511801ea41cad5bcd7aec08615768de6d0cef9146826556460d44dec352fc092a8616b4084259fdf57b6886a9d594ed73485c7aa4898bb8d73ca4ab00ea4320cfe3e470bd40c38dba0fb399ef289b40a343b3925a35092c10a7078f1171d588184becb715a5c29ad14bc322a129642c6bd448c73a31fe74feed8f40bba9b05cc4c1473fb854a094748980920e24e6ba6977c05ef7b15054da56418680255b46289293aeb154b3b389146767a42a5efda360c7d73bbb71736c1c31df14abae46eca33d25e4e81618a9e7fc182cc67e37600cb3edc4aae9be778c7bd787679d5985efed2932896b1fca73ed553c769601bc06526d81c6414cd32f997a46afb4c0cb8ac4c10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af2df6e38df1af38c9f75f2e4692472554e09bec51670c75d667a34f3249a4d8d09a4ed2bb9c2733e27a81a5c156f5618602f51de247e0e64caac8bf6960b2a930812eb6efb071a4629940798bdf2e2f0bc2ec411e67e809095d72da68f8c41e77b28199d03c87b219f6d68fcee811bd6512be0edcfd0bc3efce857e26b943dc9390d1c44608091bd44d7d0f7c4dd0630ccafcad066dee708a720dfa83cbf4da86119f94f1c41312a5352cc814452c85af9eed76a27a510c1789bc93be94000ec9ade116e1637e35de46678109c768ae3a02e82cb1ba91773287153e5cb6e59cf2560a4a63262cabf93356c5313b39565623f1224fd2983eec36c6542a7a46cc972ca00af6cb193d800d9ac3f5bf073784fb2a4c1fc8368b2262bd9705b3d91754b2c9665bce0b436e382bc4e7a8645c2b36e9bcc5f615bded498030dae0b92fe04e67bf6010b59b50abf29a605da185215a8e42676d595418a7219e06ffdf2eb83e04ca8fa65d5c56f4f98d7cfbe3cf302fb8a78da03a5b6d3be397ab21fe93e20259d2d551d849ff6585f14ae5470c3d12ea8135cdc5e9d9fa89e898d076e6dd93ebb4dd093f44a05edde13af58da3d015cb13a9ac0609dac1af4a75b611df0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9ea0412309bb9b479d9e87e54b7209f33debb4747e3a7836ab566473baf55428edead68dd0359760c1ee3544c93828cf9817bc3c55522539dc4b2d12faccc7d5d7d6dc4c243f8351d6f1e4cdb210d362f355a015af8797b5a7c088bb5b6a478d60d9fd6f77cf45f2c7957baa12b19180caf594e1f117c09c4121fec591e2b66cb2605101b103a3150fcf48960f1e4dc0b68bc57383aa608778b65b264c61f39df08f463408822ccd1fd8c5cb1c41d0b9f478181ec9d8e59f4435347a674e5f801240dd3aa9f8797aca0bc76bcce3fcd039887ec9687b2e92215296c531980935c069b8c1ad317515d9b9618a764719e24c36b359f5f580e838bc4788765512fca60884be9bcfe61cc6865b5380170039b8b300ea281772b0a2b9590271ad06138eedcd7bfa0062a4211b84ef694b61e7f7d9bfc91fbe6d3df8f83e69f6a2557334bb52190e3e724631cf17b8c714f1894e10de7a8f78ea0bb37018cfe888d308bc631ebbbb0bb8d5d632b20141514dc6df83adcbe2f7066cc9b8ecf5225d3e45935e128aad4582bea54c2debed47435638115cd4441243c7449243ce98d1f2adf38e3c45aa9546f36346a467a4dabe85067b8bce0eabc95014f6497660f8aaa0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045947fc9916997967c449fbaca48b5f38474eb2befe437df54782aa8a8f0aab48e23448890a3e7853712aaff12429f0554f6752c1ed001185d1f5ac8565599521f0cf6dda864b9922f199d27abd6ecc8827addf3d9bfef12398da8428b71d9f4663362891984ca99036cf65a6b771370ffeda99e16e680de7163b4a864d90b92375a86c826bcd399f16ee2cac4f532cc6daca302acc96402166633ed14f0f969bfda7075e30794765b6dcb7ae7cc7049d097aee11b4639dce31d20da4683f959f16435a938773e71f9994595a7070ce2858ac6b89e72915027d8af0a39083331118feb98403e68b0d685807bbe777239743be2075bfc5db62691b6e4245421f4b605abf60aff42dda18cfcdb96c3280f1a6c04403509524a5b8ebd77b3af8b6e1a5053ab5626a0e47e5cd8e0042a56a4188edbbb71d207083d271ffcdd75c25df070a7b88b493154b3c99ef9d4602ca46db69bd5954421677578235f0bcbf95292daf24a125ad633198955aa5a81d69734b3d76066fbae68e2cdbef90f0ff2656f91e9998b34a7a865f16df04596019f05915674cfee7021ac7347c314cad87aef2acb018c0a244ae177db1a3dbc63b93bfe4676a5f9bdf6e05bb34c8d0ae6600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b9057f4c150a17a3c8af7719c5e9cb085d75978edc2b99e89130d0980e3eee4d9a9a4259343e9071d5f93cfb4d79c832fa6cd272664301f3810d71124e8eeb055bed7cf7c9e13e4ecb96bfaaab1d4d9631a17f08f001654e94b6b7967cffd11b0c3e29073920f69fb2c70cb78d64242dfe045ed5693d02ccc40f74f7007fa63c8af4908e758a0de9c5adb24708c501cd0855414902dcdf6b8c12c86497799219d5d41dd84b1ca2be1763e3b7e52a9f74fbc98a9cb199b1e66e0f7ed92c2a4b7aa7b76a5e064c3bfe6d0161cad1f9ba3311a93bac152da3aaa1cec387e191bc9d182f1fe123a85045c73f5e23497f936e5d3781567a89d4fb8c69c21087d33b66d2b5d88dc38bc9a4f9502f58c10dbd22db63f84a7edcfa22d9a4f5469a3a40254353213828928fd67071d96865141570f7079196494866d122211e2606e42a67421f99eb2532ae9e32be0811f51003a9033196167f0ab89115ee127da78a57f2c90d3cb24ea5e09d63afa00320adfc12b0f6a0cf6d9815f8319c4465a2e603da6fcf4dceb646ea138ee9c834b239dcd531b99c6ee8cf43c75566b8401eff1ea24a50d55a59599f1e71623b6d624c0ae68ddbcd4ea9ab2f9d5865af5e0fe7ec70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4da9a97499cd8002edb5023eca708217258e126ea59c880404d78f703ca12a0ec2115780172455ddedee15a7cb511e49d070fa24cb7e6bb62ba1bc6c24c7c71aab0fb6bb11a23bc4a5b4bda94c71de319f5a9a877791d869752345579c58f69aaa13f3f6edc638c8464fa8f362c69525e169ed0b578ea2dab49d9aa5bfbd71f96f18c8da117ff15228682c042ffbc52e4ebf6d25dd2f4fa97a4135ae9180e9983301bba78ef82bffb82c72bb6dd8df97cb80d142b4222dc45a50a60c64fa95e9c5f20278e55d9c21ef538dbed9d0ad03df91a7f99b6fd92de50f8b55efcad8fe125c092518ef5de2eb2e822f17d99d3e68a1127b4a57917156f1dee86b2ecc8804235f3c0f5fed63c99dd7f250cf25ff23434ef9c13905eb6da2b4f77a58a117ad0dc360f9481b4df3ce3067aed74adbba394acbe306880f1b4ee8441c72e9c14910bb70a9ab7b00de7a4315aadaad8bd4b2db8c27d0f0c7ade67b5849e32b788f4d888e99dbd3118ce9fe388b2bfa0bbd732aebd27648eb0947c14b08591a6903fb7c7b9b2b35819757b5e4d29f9a8bf7830e6cf5ba8087caeeb799294cd5613f810aa458562f18b282b69bf2a6b49a12598bd8c6fb2cbf1888beafc586318000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015c1efa03429f409424319696b6a133f5140a8a24659fd0dd1f71f89c0f212d48eac3ac2c1440c2db80707d9e49ba7364f8b28d4c8d61f930be481c37fb17f2b9e54aeb702a2b1be381271dd4bed9a32b0d940278d622b22e0ece8bb121ad8a7f6ae3340087bc10e648b245eccdd5f72e78e4038f655444bca665207352fa80bf33371b259c76b88a0929289b7e957ed7308530b3a96c3a2977dfc506f83c9f49e923c966af4290834d704a88d066bdc780a1aa0348d3d98261a31eca68d5066c835fd58ddfd0ac4186bc12b6d3e077d8906627964daa65302f927fbf3cd328df60ed3364bd67c55bb43a739729a6ba44125a0191ba33f29d1eb03a0b5142890a9a45cc38ed7b01776d393c44012328261921a61d10d0339c0679b8fe824e08f040013beabf54c9cc6646f7309859276d6f98fd4d67bb7406cd9d0acc79c760d1cdef10c1dfebc0bf57ddcaba5abfc9e5832f2df5235dbb5684ff78b59a3116ec26a7ef5db056466d7764abbf38d9a56f9359db0ca28420267b9b9fe8a910b0887dc2f94898d77e2476772ca3228f1927cc25a70c01d327b1b0dae1bee6742663853192df6e2477b60a4e62aea97150d0f2be3503eff6b313884ef1471b10b0b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009fa405c6f00939a57f0b39ace522c9f4ab712bfb145d068d102fffaf8f8feba458f48d023142bc0ab36e105a3cda01251e60e00e48e335690062e3b714aaa45430ff914a0d673630facc559d79612e9f55da4ec01ec1f5efc9f9c5a51c78d06717bf80e8915bac094aadb6fcf25c43e1ab66244e38f0b0d35887ccf8dcdd6e1fb3832a07c9e42844d91d19908dcd4c08c8d6015d078c51cb8cf1912276b54688d30f27cf67fe0e114e81da0bb2c44d49a584a5a1900e189b677931bba7cbebccd7c1df146b78a3674d7dba6f8744b41b3bf80d8e90f68e317aa6a5bf5aee3db9c2e3452c79c3bf680e837ab926f4fc5a19033caf83f02e55ff320c21d66d67bb183d7938e7bdb1d8fe56bf0d464ce42ca0feb2c110769c17c975eb43c5fef543895a3a8a3397ce07bb5a1b092b73caedd9429298afec1aeaa251c8a0129be471ac5c3379e6ce41493fdc9c4c4139c97009c7b9c15535fe7a9288cb7cd73f09a8f260828cf58ddf6af5d5e2983af85c1e29ea84da87af293b94c262567c07b21c75a6340792e094b83ebee3cc78c7728f8e846be88db9d2e14918cd8f6003507131b0d0ca4b26e1233038e04320bd559e0975a9b54412291ce385267eba0be51d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091b57a053a914b927a85c6e7eb6fb83545c1075ddbdf6985fe6e5ba88564ebd96a741de00a762303a062e923547805cffde2ab4c5d24b11dcd46174a28f0aa6989c07005e40ccdc135f5f3e188145461c2428bc61aeb09a4b36ddd6d8ba8e6b4b764f15e5d0a0a817f6755d58e8bd9054456765e7a654baa25e6ac011f289271633a6db5e49348114d0007ca66c6b2e3aea9985dc2f7ebe67025d57994a5f37cfdc771a995eb743126d6e94c6ee66a140ac2bd3d78030b1ff0503b1053cc12592ca856df96aeff5602987c67d59c25be0fbeedc40626dfd665e864c0f1e66c92d56dbfe82f728d34db10a439f9b4bb90f17b9f71d509e56ea47d10dc94bf9e719ab71e11a9202db7760743b2e1d288216823a259cb14590d01b85dab9265b289550c6400ff1464b6c585806ab51b9774be0d8bb84f64314e2c8ad4450f117cfd3fe334cf71b05bdc7ca36d9b5a5badfcd7de5b54be8a6eb03348d281792805c982cf5040d43ba6c36c15f2e4e10eec02e46806c54b4c5a75ad20fadc91383c8ec107dd67929d74abe3a45d3811fa5760b8306416bbfeecab1a9954f88f9b50e6c3d3546017b7b2a9f5f6e9fbdd8679ce9308e0c45144719fe939b0e02e5b8f150000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aeb782f91c4efb05f474cd353f43529bc1e735aa7712a0f506ad0ecad07bbf0ceafe0ca90d6b92ad8791410c1b9ee5523e0f470d9617c5f899a2b40f461fc88820fffc4c69ee8cd3eca559b6280cb631663a4743c29d3a2d80ed6d8f8b38455a3c1ce00f5ab1279428a8b8703a3bf83c5046f0486f31061637c6bde42f2d262b972ed0eefd85b79e66e9eb8096e4cc8ba35339c1141f41b5244ea43c53fbdb74b9f797740147950f50470d257085e07564b8e8a093f6b4ded5ba23e1fd559d9ac065b4a35aa63ddaa3424fbe8657039d14613f891618b1a54ac0e1992fc6c63179b6d6d386014e8a10decde1431aa4e557487c0adf4c8aa55636b0b6184836d404c785b1577e3054e5f5b4a01a6cee390de106591fadf147f6ba497ad19dd4c4b1f0ff7e6dc7a8ef3aff105d9dc21cb201d9cfef75da1948f450661e3d6637edb612b5dc262d8451fdb98558da24e3a7d3f6f30eee9a925f9acef5d011332372ec6a983e81d732e6b0d2216ee43e21ae686b44731dc9450df36f28b649d840cec919a2f664db7d9106ed768faf3627a1b1c962048da283118bf4922baa89dc9585b3d85aaf904ceacd924895f580462c0e82d85a9fe0d751ae2b32ddc6f86b680000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000980010c0eb3210881d92501862d3975929000e497df48a4f134e3668bf0434e12348a80efbf2bf545b5fb74f03969c04bf51270c1471d4c52a3bacf7f6693c8d2f724ef13fa4f329f3dbaaaac1c401b77a103736143d8d52d3678d24a76afe30267d6e4ea49b99134d62d7db5cb386f43de3ed965d1041ba9159ff2af671ec1d958597a5cc35f2df1af6444fb31c661454bc30c14177a94f43683431b5f284292c04dd11c205cef40750d3cdc8be23655b384d2c7079c8e9b6751d69373d902903cd8dd0fa552e2fa937bdced34744a29a66c4e36d66faefa1d3170fba0362d66bbcef071d6ea856da5cf197ea685ce84f61684edf1c5318be1eb81e20cdcf9ad2eb82c87269b66b0f880f9502fe7ae22e1896a6263c3ee4c6431d0299ee16db9874937c3d5ee7792927d1b647b5890b195773275198dcc76b733c47958133f03bfe358c9baed46f78dd4b556f12147ffdb829678b9607ff7693398fb5bf802af136e21cac1e94e2826e1a2cd06483d80f1a2194239c64295e3b0fd1ed8951d2dae9cb1820c9a98eb275744d062d3fca7fd7269094adab5bcb7a42e6b7b9eaa14f1920d2fa85b4e0b36de6b052d6cddc5b56267bf76ca534d1944ea1d6e1b20a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a8637b450951e47a7568cc2793ef9e77530b88578dada02139d03e8e34d8b86df2100d61a378b18e24f82e596ce03a8351628943d3a21f03d656f670969b5fc07268ada9999fa01360cda79112ca9c282a1fb8c8fc5a6ff56393916702a0f1f6dafedc8dbf80977a422f8f7d2f24123be446cc16f19ed9a0f5e83d3fb47a6d27ec5a8a0eb1c77409b4c9ac0fa9949b3fe7b6aa254574476b010543abef7747d04aff9587ce50bd4e5ca7049e5bc10ee6f149ddafe04d083e7d44b89a3854d2466c1598acbe9c66ed0bcb30204975ef1bcc57ec231fffc951ff81440df61485d5f86f89c1ee4e18381cf60aadf09d5dfa71d93b5e1bfa8f15728ac5414206dc2c7a6d6f1b869abc65505d5416121c96748498fb96d36a97bfae22ada106b74c263fbc508255da2d20d5907fb2c1eb68cb3ce8bf35196af0d1a447cc4792f427faa61534ae5132a5117362a53c317302cc1bcd29763b4bb64de657f02f9aa2d97e319aca6ada8aa4ea874e369fd8a1d6c61edc8a74763eea5cb07da73d3b7500be4454bd8f80b1dfc9c2611b67b2eb9588818a95c570841bb3f3e83d59c85f3e13336e8c0f905b7bb73655b4703135f6b683592702b56d7c84bba7373c072c5b20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a33df71e25df81a5c087967d4a7e3fd5554758c02b686217de77eff5f82319f7ca11b7dab17a5b74317ab9e2e9f34763cdd4b8aaad476baf7b98d1b32ee2f8f763a549cde5736986db5fc0fadffc9a644d2ebed9a63ab4e89befbc1ac685c85dc19ff3d52032e89c76e7966a47f0e97d2dd03bed192ec8a75d8f12cc4befb59665a2ea7948981e8595d75a28ede6b5651ab00b49a76c9676634436741e6a7bf5a73cb0b6407bbf772eec8338e92bb142fda2ad9a394a00c81e2581d85942a5ee7c76cc87a8b09d312cca297bfefcae39e7fdb445710dc7b990dc61f4b022cafae93155354cf2813f1e45bff46497ba9e80004842b796e00c7779d53c4bdcb588282cc8c507e916da261c61212310b319fc8446296cd02b2b40026b8254e0478e68eaf9729f8b58d7f199765e84a59a7b79c151fab1e5100f66c7f68394b38c030a9b1cf24b03a06bdd301000b4bd6304df4173600ad7376edea392c34fbc5a31da15c0baeab628fb945d53bcc54c32d61f196c75f72e148bd10c8c6244de6020b32390f651f08882aa93569f8f8f9ce57c334f7de9b494c88b13c91f96b14bf4ed80c1151cec8922af789a70ad04d1124390a556c1015f35e087ed3227d4ee83000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023137b0e1bc38c25c8c34ea033af20e8f2cf69e15c1906b3e7a48a422fbee3829e23b628b48bee8dbc1b94d79986f138475d485c9e137705f68eff03728b5c1d57fa84006b5c220ef1d1e9d920b7bb2621e13c9d39235e245f45879bc2b451a8be0367d16d827904bfecf5f3b3c7c0b2d108c9f844551ff4d4a3d63ba565c21d64b4a121a4b1b248b762d40751bbb57f1e0600b4f97ca357e3be24cddc65976adabef0ccd25763318759105b2072a0b3746f5432b7680a039f386a0436721d80847a38c45e36d9f43ef3fc1597f0b9715f389b60d02f1a1d72a768707766db078ac8ed1a3daf1509c4ef3ace7eb637fdf4ef84d400c4267c871cbe8ed6049c14eacbe06f358ec52f9a8bec808c772f11c3926832efb608437a0cc88b94b56a68616395c356309d949f19cbc1c8475bf6db2a778b632b94c3e6cd1937646879846cb230ee258162577eed24d3c6faae425667f0a1bb09b773bbd11667978580d23dfdd150271bb5771a7efdab482570fc1e2ff45ef854758c7a3d0f24910e8af9a88637a08c7a430620cacc413f60de66d5c01d630dc580b943576beb49727420af58008a4c17adb8235fa000994c5e938dea49795093a8e0f72482037cbbc742000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089b4b5f38015edc437927464e770ede4e4a5e80f51896e10b87f182bc55e7fc61145592182743c06649e16f30c50d0cf51580fc83806e60b977aba93a3b5efff162f299946d126270b6ff745ede9bccff6e4dac7d7d0069ec743ea899fa8c3955177827d599757ae9cf200ac187013d78daa1684427ad09b545fff69d913eb64d35bd706e974ff283dbd54f891fed3e5ee210fe5e02a0155efeb80a0bac37a210331fea37e57beb1f17a7c5a9cdc3237f931b244848e3f3e4243e71283e4947453599793cbe73ea28514ca95507020348084f79b9fb474dcac0804006a32f624a55c51cf79bfba6db8fde2edc3eadf3775d41260c214ed8c32d10d3586258cd06306988ce811449b955591dd2c1ebd2e3de25047b471130fd4c4e96126ba67685b6d33b2bc512a95922657a3e0aa104ab2d97866396fd05f7abc734000958dd679c1990a65516a5e4ce9d1cf2340dca399aaf194525b37d89ea388c2ca9ce627fb847b403ef8b74b6fe79cda173bdf663339dd5310efadc320b09446bf4a6bfee6a45457c1a652259d93caa9863ba6a0c2c5752f4dd956136f202af0a26f778c271560f73afce8a5f5a43ac3a9f10b8325590574da1ea3c28da0853469842c2800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001979ec85c3b442247d5beed6fdf8f41f4f9f9c16806c549625c13e1d16f3021f5945d6e3cf48b8f4fba3a3692531e30de7dd1a9152180f50f138638d20fc0fd5f9959aca0aa4887ee186286ce36a10378fc2fe4c869236b7589bd60a629cbf04aa82605bdffaaa8139bc6a0be48a4f4ffc674dd75bede59ff195b0751c2b613a293a228d8197163b622d925ddc7418961ff9edfb0f75d13a055639efbd2a3e560f06020993a73cae1dc805d5496fff5c817644091600c30423cbbcfd182fc27e1890784e660606ea3c11d70ba7d89ee78b3b37995a207f72134121184d6a79169b301d5f0bb1ac1ea2e244df8c80d4c904830b24822a60d4211a286cfd0583a9465e470ca99b80e103b6df2d486c5e27f39e73d9a9116825e9079152ba664a7a2311ddd46c7686db0fe6c0d2714bee42ffd3c6b43fb32b63fba8c2fa5989e472c36afaf9e8d522f470e105f6203cabd2923f35e9820e3692b6e0e3b907f965c28401a59dc085499eee22e7f14d8a0677b85346289588d8c3c66577d7425379342e347e83b6140eb5d1703a476983483364b5d940467ad08c20f7aa46894fb4fd7ee85b32e1fd167ef34c4e78404b341764266e833d2aa66c2d2d3bc5636e6ed000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009acf0b237c8e3989b0035a259525ecf4e5b277079a168282bd55039cfe6a074c806f8896538e207d36c1ea2c10782ce77b2fe25aee6455ee98efb93ffa441a4e7ba371a476a7d902962de09a98ee3787da4a0953cb1de0c550613d6adc564ecdb740a39fcebc199646437a19e7cedec9b6227cea80ae09d1d9feac7a5c6179c1080ffdb7f41966ef5d38a6a796c562b80b35e601568486ecdf6364847cf630b09f3aba7dd4f0e68b4def65e12185a67e84333d2496957fe5cba50314d334153e56e1a7e7dabb256be0ed862225c68af22a3e63fb821aee1c38485451cfe80e00067a2db99a2c22aeb6a3fba3a45758d8f329eda07394a9f8c79f8ec5ec1f9d090c43ca856d298638fa3ee100d605732bd129fd6f8f77187d625ace133bd789409d38b742563339e233176181404aaf2f9f0659c6fbe864c60b97c290fdd292f899d4674a378a2a7f17b5d6a7709edad57941d6c439f1f430060456627ca263c8098fe91dc6c1fa87c6601ad138169332d7f8eca6fc74e0b667b03b002b9e537aed92acf2cefde353e2bb4031cf2da030771b4c35e123564ce4694a61f8ff519b5615d5f75eb3bea6ba216cb337343152ab2af25eb9b760e6bb529dae2e2c052900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cd081021227fe36f7a7d25c6aa9dbea7ad9b8984373f4c90a844183dbec1b9a0d3ccc2f83542aede39f8f9be8648e58f89d00d0673faf47f6c979bcb23b3a7760d0d2b64ad95dc9271543ce7fb860325d4a04ab870b4a40d27ccdbade347276d2c09afcb9160923c25ce7fba17819a50255cdeacaeca475c56298ad96f3a6f8886516d3347072b52f530b0ba92c5feb48d624d7d889a514d9593073c77f5d7e4f7df7454c719baeb12399e4bd86214c9b37dc0cbf1e58ce0edcaa70a6beb928c626833a2a6efa148f8f25e04ced9e2fa98873ce84dfb2ddceab0d37f6edb963b310f4a221ac93711964b8ca7173c32ce3b16bb44042c697413cb1e243fcf8001350554ee7962448168065a41d625040820b74d0217cfea919f78e5ce202579c70b349b5d65ab0f752c566e38fe5e39b87a839a073e99402c7f3c0f4a1e86e5842f11c51af1abb22939da240f834705fbd5e083b05e474dc7fe4d933f8d4e48b2092dd1175d11370175b0d351737c21fbeb738a9bd1b67bd53fd224fe2c4af43bfec64152f2ccf9b962967e431466b329e19167647878becd9d8e9272b96d79542d551d19ad37ff6129ea5549444f7da75db9ade4c36f1b49c9ea0e143eb575a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a132179e856a65bbddf0b4b86a5ca4042ab22b7a093a5f98a6a67d7cfa5c7341d7d6262655377b3b1248815b16442aae61b5df4035622a9a1464dd33526be5b12775d7661b2b0673fcff53aa71d3cf8b0cd56ba04ed4a3837cf29d32816148344847fc78e0ae08fdc86808c8733809fb403fbbbf188de903f545b9188d11d2d333ac7e5398780e9859474902043927efa85bfe723f640a837afa88b74db10df8185590ea42c048d5a474b9916f98481922f8e55166ae5265ff20feb301f49c1a7015665764a17505fae561704324325e4066d132971a6f1b93f0585675f3d82f1bec42429ff7ebc3c6a05d198791dfaea1b3d1eb3060203396d926c4575f89e3e02e2c8f3c4af42def92d24cb3983226153387d1265e86d024b57a0020554c1768d20022566f31de3ec71b306678f356b4cab7b6e05c1d2b868d7adf51d49ca1276061c4b4c6df17523b6cf11387d796c77a261c435c5b4433b4bc8762c45cebe7b082c10af236619c5183d42cf6be3c551607198c5a9a0e2e898dbc8d5dfd135a1456255071d5c3ad0495492f80d913e7d0c5748c7be4c86cd5be1939ae68f9b459cb6d517f4eddc3682b010368835947bba87c885a6459b5ed7bf4d6049aeb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025c839fbb8ab3b9d6f86304e8d1b8bd3e8b04bb2b5f896757911cdf3d6e06bd9a97ba046bb35a7d2b24753c8fb21db3d8c07bbeafdf129f2afaa3b14ab606fe14902cd5f21e2f4374b66bb90b97f6900fb8461294da660d2696b700c83d0d27a9c35c37c50da5d2ee4923ed349dc3ce6239ab01a59eaf74bc13e6b7df022c51c6bd077d3282485e84d7d997cc2aab758c69641db503b94a77e275efd3651789f3fb0f492a451b51db79b787256aa901833e92cda221bece642b148c67482162ff84110e173d6876a2ec4434c7d5cdab2896519b1eb783e903174303f9fa4822fc1126ec7cd7815d504ad57f54299e42cfa3d001618741324a0fed68ebfadcf273f4b54e6256648d711a7cdb978020dbebc303520320cbbf457119c936a221d59e8218374d725922e8287d277c57c3ca40c5e0b771a8e7eb5221b932328fc934351f2abadd41cee9130bec57c6d8e17f98c9cf671e2f064341a9339f733b1fc4730fe2a1a29333e193bc860e6ccf1cc11d8f53e692b37c6726e719b3f2e544164b0e51029552f2edf10b84f420b2179099d0e7ada8847c0f6f924b64ee4201c95a6f7efa643b44223af7f06beeadc135bba9f8cd963f240c28c9d9568f44afb590000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000917878937e4dbcdf4d7cb9465ae36e4d902dedd303e2dbaa7724ab7c70b2ee46d5cbfcc7172ed53ce10a705ad51f92c1d6ca99809c694a38e72d94e997a79195d77ccd8e8f28acb250b217b22af5455d0c9a44f0dc51b23210c0bb6fc4c83ef43e1cfdab6bffd72b450bbdf9dedbcc37c4ac34764fcd5f64b45239e681bb7cd37c3db0c50cb6ab44f7c451f0481e1e1d469aa04683215039a2a169a0e05079b5814f6955ca9da6425036af0ecca44779981fc3ded1e4b209f054f0a87a1ff0bdd82926947334d121b02aff72a685ac1ab802c93b67ecc5a96883fa965927ee02820fb11978601ce0e1fe850758a1324ccbb6e53845b45e8adc9ff80b485548085684c0dc1dcaf5108571a971c1a2db99e64e780bba549db99e5ab182d82cd7cf385aac60500ef012385e1b9b32c9bd1e16ac1d7aab94a9f6c968bc34b88231cc683e49ec67c57710931d0587d86345b56673a9161f58d89e18c00bda7712c0575c066f7d0866b3b8dc2c3988b6628d0a385f56d8fd606b13212f6ccdd4ff3cce6ffc8125276a20600faebc43f54bb73c21dc89893eefbcdee83217052ad0f383463462b9fbff843219ee3abcff198b0c26ae08eed3c4219fd1512ceba37e455100000004000000000000000c000000000000000000000000", + "21a01460a2b6f46aa310ae8483e7bdabaee16c2a7fd37b7eda5fadd5dde02f72000000110000000000000000000000000000000000000000000000000000000000000009005b591bd4d3be4c40feb4d5def215267a759754d457037c42321f3ad6fcc7ff00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00b9297c0ba7559abbd713d4ecf549a98e691902e030a01be90edd9712d6865e14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb30000011016e1e2b7ba1a2832d035d492698508b10cbe9ba31eea045aa84cf67a78f3ce6600001bc00c39d346080fa8ea221390aa73293af735b878f1555fbb00519573dc3758546300001c401c6626da821385e6b63767c06352543b75dbd2af52d4bd74a45c42b95754909b00001c400000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000070dbdb140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000006d23358822f6bb2294953875afe55bbe893ce81cd96a58dd82d8d44234ae15113718c80c000000110000000900000000000000000000000000000000000000000000000000000000000c205b48402b536b199543c437ce3d85f96e1c09152e34f08268ff309b0f5faf1f9e79ed5c0f19f0d630e31ba77c08a15bb354c25bd0f7b4b9224446a61615ef06896ea96d02737b541aaec192979c86afb68d16c55f2e9bb3219ddbc1ba1aac38c492000c0bd9431754d0b71be96681f151c0a4ccd7510e96ae601ae98f344d2d4aea042b04f9d81abf05cb9e85a766ac914096a0474184f92493f8c31a0e789119c3ede511b76da32500fd53bd7925b511fda91d6106fb497321dfac893e8f3eb36e95680884f3c0df5f775a4ce373363b48f7f44639211a1131ef7fbcf6d3071b0649de12d75e963c44296c34fbfcd08b8de161b20db6dfa5b03e9ad268b7814b41279a2441548243efa7186d11347500740082a6fe438336a4e999c3289a60a104e15b2dad438c4ad110985bbbdcae3c382c0d76e05fa0f4fc7dd89a11efe47e2888bd03a4a1617a723844b576b597eee37dd56c42a26c07593654c638d391b0af8c4918a21c73712d0a9d23acdea030b5c0304747a11b977f6e0b8bb41db9ec119184163df6252b43a9f2f45203abf4f6f21d8c4bbab40947c60ca43963a2df96abc91ba69277ec31e35ab8ffd21f9552e2dbe919f67069f4ad06fecf060c877d49162fbdbbdb08dd42e83e404be00335edf3dc9b681b41e3e78294495ed5fba586932abdc040d4ab1666ed386f708cc3eec25be3919f956849da8326390bfbc615d418dffddd302107d6bd3b2629d280577aec6d590b190a3956df4a7a494fe891c51dc1f34f9d2e13d8183313e17446304f6e8fe2260c56e3e1a37546eac838a0c02b1c533cdf8591b7305071a89439266eb0fbd3fcb8e176103a842196cd19d205000f18236ab255cfcc3b97b91f2918b48c20bb5ee0e91d1f618686ed251c847a276466e923e1da49ea81c863963712a5e341780eade30fadbe1144014f9283b20be706664a6d70ca84cd19bb3904b132694f8b673eede993145d4ba7aef9a39d2c0e0632723935393c87432a7db930536620e4b8f54f605ac0429cc3a9e0d4f518a0e22435f72aa546d13098ded6cd41381ab7df5c6c4383129490b01f88f1b116bdf0a51fbbc5f77f0a751c13703ea95c79c41133328f9d94abdc2e023d762105a351480b292872c3eb2df4f62e7e45c9ea81aafa78a307619fcb044e8a8b311fd525fa522684925e82b88990e103b6eac331d1bb09fcfd592cfa8001df822014f97df5e372d254874d06f1d4d12ebf790eb73ca5cd516e21f1c999f5c687851a6caf86f594b7073c6d366be6ac4f77fc1e3677ae67ca39bc55f91a6745444218a28e0e52e9f6765f4c10b43356d0c64d7f414150349307eef0dbcac128690e25c14de93011270b43b9a248639c4fe321f5fb9e8246fe7eb1443fe35d66755f044278a18c34949f7fdc49d5a53d2e8d2198792230c95b244d7b8f8460a9b3ba16c56ddbb308c844f5ea160154bb21fe0414277d607e288cd071a4f59888337912d9d9785e377c8917be67f7f33dcafa069696ab8fa20ea5d805b3056ab745d715466626feb43388cc3758f6c1daf5c3e9ebfe3387eb18d4e576f36230c45152109bd7e88315e661b2967d98fbb900b9b14a3912366bf0121e58de61ebeacede305635648a21eaa9bac00a7228763408471c0d405dfa871effbfb2f265a20eb41a02a21f19fa979db37510166bb286edc0bc1a586bcf679db192ae14b043b55a209a113cb3b92d892d8b8cc5699883c92d71dbc18e347599401a170d7cd6d1362bdcf40a4310ab91903181aa93635e985bedab41232d4179a6cbb32ea6be510a03558a568c8c4f591f0396537241010a93afa291e9aa121d0beba1f7b7e2192d04d7ab56ebce450f0da1970e72a7c48ce3d4128493395ee2adec33780a37d1002b4a55d5f7ed43d752c81abb9fdf326fe0b37e5f6197409ee1e56ae3ebdf1693161ed4fb69b6c40b2b5d62111e4bd2b0df4da09237dae1f0df1d52cc9d5feace2c3e0a9cc1dc468317010189eb404bc96ff771fbbe9652a07556da4f5606260128948b529dbb3d4e0d0ad84d074956bde5f19d7615654f0074fd2a3b3773cf0015407c40b41b7f21076f76707e80f2c28a13bacb2f5814ed359f043e7593a5fd14621f86a3162994a493bbee82c94802fb15af20ef48610a4a0716ce5a64cdc01a667a8f05843995734d0f87f495feae80a8efe52ceefdb9ca31fe2d60cc82f52192d7bbb62a0ab854902aff949b028d2a0025dfb18e3886f7c7bd8d86a65e420f07eefbd33f59e844c67be969c9d59547568a7369b2507719179b94e1cc9c4618e3501fb39d313ad21eff3dc3bb9ab9c114ca9ffd284ef60b6dfd0937491dfa08271d9bf273867a25722067dee189b910b453e4fccb53ce781087107c86001a1d5e9c54f4973829db2d29134c40d826c89a22cd276c205c3197bda7d1201e6e1ef1632c25f39da662b24dcbbdab44e3dda64a5eec9f25064d9da4c1bc0d33af2ebd809c342d823c79c8a9e05bff7fb871cd9aed5dfa2a40cd92d568518a399907c73cb4d582e7c7caa60f542e044e1d12b1a1e83e1e8e6efd55f3c31be8d4fa1eee304451a13f3d733fbd1a108ad6f25321ea6c43aea5e5c854c0abeb92ab20063914822b707c2b5eda38a163fedb6c89100f77029b11be4a1b65a7a5a2e45a2dad6b49bdb15c548a0a972b1136af7e2e37f3a5e4e0b703e713ab8ad9a5411e056a02318e2c6fa80a046a73aed1b344b4f3675a044c9b9ce710f4650fc19c3913308073ce3ce1338a4265c14daab93220e1280405a85ccb43df659c429ff2a505fd430fd9d345fe8de584b79c58fbe33ba8251bbc78f3c7145994b235747383044b4eb3614ca7570cfb84cd293d0ef49c1e0698f4474b399047859a89afd80d40033c0b067b9a7b89c03724fbf536d3ebc8e6e2f5075b8f5109a683d716ab87e41303c47b74e9323527a43278bf70c77e015f3af410b64eb34d878ceaccaf5cdc0f5f7538b7a7c412988d96399bf5a62d8258361b7ac765a3c3b0e119b7f14a8d0ecd569ad353cd91ec47d41e737e083f48a0956c8ab1e455bda91c8fec91d1c20e7e791d331e48eaa109aa8ab660cdd4f1d7272cda9258a38453aaf9fd8b812d290c11f24c98cb625d0678433b9e9df6367484b8f7cdd40131ff378542559e2a2b121b7c776d8179947e7a731fe2d2b01d308d19e16a31c7a730cbde2132af0d13aae346612d5350092a5b6b96cc6e5aa9404995e71305ac0d4e9ddf0b4634ae26d6bc391b6d2ec887260d6b187e4abba6552c40c91c2b81a5831ab8f9315c5e019cafc1b55132fa54ce552889ce18c7f197334df518ed7b5d96f3dd2272136313e7db56e171a73a76821d62e73b200eeec666e0864f4b0e0550d8abf1675c172affe8ed7ac05a9a047f92e60732ebdaface30c8950668dc28e3da9f69042b1f243599135190a34076031023bc60189ae1d59901c7514807b6a614f8f8a99ffb0efe9c007c8cfdfcd0f203d52ebfe872c42d36f737bda8ee05ee476b38fb2df423efc952423363936096dd602aba576dc6740232d743518d141b7d00c4f8830d1dec45b2b924a2e205a56f506c9deadcf3377ea415f31e62e7ddf24a61c4d5ab27c664135bd91c77d4b70af6c7356818047fce97b0b49749ef609060959ba50d24edb78b6da813360b144a811ad554a26b5c9768af1fb0e955a738aee15194ba280de418eb2a567fca325806f194b00ddecffe87a27b8cf823f4d77ecfd46d6f227483c0345ee36443bccb51bbd4bde779fe96b40437358ba1ac549828eb67af2a00fe7511f72b3d77bbf1c091b937378f9e33683994178a5c9d6b0ea663c0b00416cd585b939a60e1c8a5a10a9da698f2be6f78f0a8c2132fdb024a87da0dd402c6c1a8b44072ec1adf7b2cae2344d24019eaee8277eebb7b499d01b060313022c02034c0d5d69e9ff174fe67ef8808bdf10e4396b268ed9f179514852d8ab4123094c8c088fe260c444e0c474d3895e67f5a7b1c359397803509f2091b76680b89f4838516d16fb6edd87a35cc299b909b7c2d07e5dcfdcbb5a6354b0c8be4188e20e9c3cdb65f0e796407637c729b65264b0e66cf1e2f780b2943896c6d0a0a810e18e487f6c5a794a189b0d69215f147b65442d8bf03165820f912b692dd010bb4ff31de4a99d1ab2418ceb82cc13a3ef2f773e9c562a6bb380aaa44f61f0a17bb5c1fec3b67bc8b626cb02dbdc6eb7e23d085df414b02f54146d9578e591a338f55d8298e17f1a2d17dfcda537f0360ae5b259ef44a3a69eac30aa2c4032308979f5e8d08048da07643f3cc491faa66cc4ca412eaba4134175841b4f53e0cb52e0de2781189198421fd07af2feb0b262960cc2303bc5bcbf8aa2f89acd427f0f73db27f46e8bc490549942b092dd5398ff9a7b1de71d1051c43310fbebc1d4b2f8f5ef4528bbeb3da4b4f2972b529e3b39c48a9698e5e147727e5b8ce5f141554b70566efa8e3a33f6871765cd91c24328ab277c1a8ee5f5441c1bddb1e1b8683a8954767fe289f3c0eb5572efb9f40294d406e9541f5a997e36e48d57f126144f7fbb3796bccf10b804d14902c3dd992034feff047e4ae1623c1fbfb382fbe103960e66a2667ce751b06809c475c38fadcaebe65effd1366b4cbb13c2406c3506151da2ebdb30ee7ea9c32acbb5e21488202f1229ec10a8416bd247428145d4f3262f88ea72c0994608989d6edb3bd99dd9c4b9b0e8ce5854262158d7a16d5a2fc22d166e78b3a9ee9701c16ff5709ea91991844c623040969818775f712a8ea2e74e29bd0b192d43a30dc81e6296640caadc01c26d25c8f02c906261921190109b7ca35132ef6f8ec1bc9ca962518fcb660892066d14c7908ed0c9cab2e6956688a3e7443ed4a31f1329034fd65c567718ec944a536ad3720e656e0b40f74b69f4059dfca536b88725d9bd497142363f6c064ed71591ab7d4f661639025cd2ffe883c23d14ae201f6683ddad9044b2532c117ef538bc3f76d6581d74a22fc60b5fd5cf03b07f6797bd040a4e26150e9a8174cb048f45b0b9665380a270d9779748521bb5eec9508a8f9f8c4fc3c77c0655efbb208a8fcaaae7aaf02442138a9987c89fb89a22c4b2ae2049fbbcc4845cafcff52b741945ff28e9e8e782c061f95e74eaacaf4703083d83fe3a3d73d90ab6a42c6514a84c5850d382c6d09cd4abd773f6afb55ec67b43cf511cfc1a7a99e1f49177962068b82f088cc9b23d772fbb44336cf26aa0e16eddf2bddb99493e498c23ed001cd1f260213a015039da682507c1a6a9edad95f9b212b657428467c6e99b580d94d6b01d13330b2207b4cb00e9a1a0a554e805c989a2d2880f9141b375dd06a7ff053f14f3da58824ac33a81d96d1233aaba5024b8936250a21b30a3c486572e0eb20d95f18f8931b7f74c3f4d993272e40b84f268c2bb3b13cd986f70859424156f5df23d57cf928740bd9ee714c03bbc249c6eccec6a864916f68e41aba2bc38f5b1c271e70a60f42a27628a91cfc9377767b4b0a859b8314a946d739f54017ffae1fba4b915e1d87d59cbe1f92b459c3cff8b678b97fda5326221d5d209bcefd2ec8b145d1861c53ef5ee6cdd8bf82bcd6998bc2f4fdc81198abb5de98377b11c829a1863d722cbbb26576685aa63152e27c05867ac7b14b4881e753eaea14f708d9137c1c900c89a8912b9b56b348cba602f7dea1780df8f68f8ade443911fcfc81f4b5055e0b824fc4d0274e09581f99e33caa07bde4f4674dcac3b9fead9bcb34d68694fc003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000052118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000520d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000520a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000520b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000005229a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000052141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000005225e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000005212978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000522daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000052189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000521159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000005205ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000005205c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000005214d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000005203db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000522ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000521213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000521ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000005214fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000522b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000052305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000052280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000052223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000005217a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000005208858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000522618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000520f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000520e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000052172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000520b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000005205bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000052137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000522e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000522297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000522608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000005218373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000520422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000052204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000520afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000521998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000005228d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000521da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000005221d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000520ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000520e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000052107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000522f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000005209726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000005224f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000005203c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000521fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000052205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000005225110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000052283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000005221cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000052094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000520c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000521f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000522421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000521fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000521bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000052304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000052000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000deaefdf464d241732171f23c8157e75071c2bd49631feb53a783484cfe24f22d142b195a01dd98f618f53affb996410cc2e5f5c77d18e4e13652fea5e8c3c6db677450957303e214640e4c954a7431a81f810b9e5a399febf9780f6730dd6b255a1ad5d8fd315c86288060d7e353c027d204c343ec38d64d034d7ba1ba63740ab1b57f3fd5bbbf1d786481fc61bbac99a137a5b6befdd20a674a9419a2c00adcb121dc7a6683c3922256abdb1fbd808856e4a18ac903d28d4459a1d37cb8484b1d1fe8214058f1be3c9a27a82b7dca3ba16e01655238c0bb96c2d0e3494d16435102f8064762e88731389e781c059c4f4b2ded088391ba1147401d6bd8226a4b190f6e2101374bf90806a4e49af4426c4464a4cffe106a65ee651eb3f4ffee6f1972e9fc6ceb40bba5d44dc3824eb68411cd8af0bf1e22806e67dba9466251f250e06bdaa89a27474a62eec99ed989a51c0c8ab7e7ffb43afc02c6ff720f8e03427a7da542450a610e53e5e396fd236715aaee5a0b7636716d5b5617e64f2f1055650da82730a1b1405aff79b7ff73014e8506ba21ce5dea4a11992584f880299a9e19e689945f8d219562f44296679d2d3eeec79a3f1b1cdb867eb209838070000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000890f786a4994f370ba7e76e939b6157150bb959507af04f2a152ded1e7ebed7d2679ae8ee5308107e47f065413038dcd51b4ae7b1b62a22831883f56051b942b10c61a0436d0ac2101e96cd329afd2b5da7dd53292f04c3c2c326c276b9f864473a0679bf4916a0d1a30eb8bdac04cae5cdd294f7b095ffa32b41b3e703989f948bc1451240448ff70c273e105cf8aa4e5e05b92139222dd6a3f6116b36670e680fe739bedab42f1474eab3ca96c16e57bbb5c5a4a61652ae8c5c646c11d0b7f1c675c574c6d78466926e3bdfe6596d3f3848e7c78e6010845b101b17523934aee8eeb67e97405f099be699d45894f9efe2105e3f7ef2c0d0b88f0b9ddd24e486b14e46085ebe5773c63dde553f35c63a6c5401637a1ef08d4eb1c046b151cc0d82e64cc5ccfcd011994bff0d6c9ad7101d5d0391bd73577e5625888bbdf1a9d9d8bf133f1f94811c581e2eaf38987956fb005fc79f5f961eff0aba3d47816c80eac9137c0809bba72c5084a79059a4edc7ebd62c8337be7ea24f724a6ab9a9b663ce9ebd41a28b91229af3702cb6c5e0aa8cc494b789aa802613a3b3510fd3737150e741159943932d6598425c73853c1f139920ea78d9c9fd2df535c4958ce0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000937c690d28d761eba784b9fb8ded1fae01d0aaf0cc4d1b1e0b5627525b63de5a97f36b8ebc7441348cf59523f138ab4a49e1b9cbe008a90e158fc6b1fb50641193cf40d713018daca4ee296221e406439ab771ee8e1bf39d3795a3e55b9cb4f93eb782e13f182a4b2b03b135723776178f53868bcb2bbfd8f6cbf7d4243863cfb06f9c11f922d14bbb22c8375ef8cf7a0764974c7c9d0cf099e9c32df064fd07dec22d454c43a5012579d84bcdbe95dc1d41162673d75ca694a81b28a25c2735fdd7b6a490a5e357f4cccccfe02d04a1af2be02a7d5c4874e658bf2ee82f6b8a8b8a86e54392f6b855a2d9e6c8dad62bf7c80c19c1aaa68205a3086904d43b5b5586c59239be8ceeacf1fb166fa17624f07d22041b6c40a70561e5367b1b24696c6666c55b23ea5b1bc5fd8d1afc2f23d49356dbedab2ff65773b82213659633151ec5515587abced797ff561bd794017477ba477e432121e9c9f7ef6e53dfa5e4f7dacd4e3c23af8a5cd5ccd98328e3b29a1c98ff7db5a8fd012b60be3f97ea9e70d9a6f9bde6ec63b03f22b32799af03783a9d2d65ca730459a9cdde76b24d9212d34bae0a983c72c27e108845d9f5e04cd0a4c84aa85cbb8934bbcee046ec00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c79bb178506815ad0eb7407ffd3a52a994337344743e0227e05f823c161d8ae567896ab4eb9303fe06e19fedf12b885808c8ba99663ced97db0d0a7446171276d82d200d045d030db0e8b92d1b8d531f592b5f45e38afc2a7bba3abcd6eb4e905885bb73d3397c389905c77eaf4cf415ab0a245c49bae02be5e87a1e7595b36fcc7a38344805477009e0b3ed1158557ca5815f03d62577e03f39b9124e629055bb769f26cb2f88ff76e202c9707ada8254c3350bfa0d56d9f499d5acf84f6658ae904ebec09f3850e966ae69014fccb5d894158cfd9c4a27e991599e42f188e03d5c81e56e7458763ff520cd1919efab65dc8286c33e36d94cd4f2c578cbc1d4db52526f9044606dc3e4cd23e1ef6f570a445a153f5de20a57b2a55956222c55ca00efcf261e656e3697f20ca0dedcf8f45cc5d3dbc989a068351d2cc631ec080599692367bf035fc3fe501c3583958f4cbd58c157586d64c41c243d9db97b025abd95d64f9a142ac253b4dd39a06c7dd0ee72511f17b102282b7e0a808f429f12555be07c45608562fedc59218f3f7452f2d86388501723f982ea496325bf452ff832118efbdff5b29918e9fffe6ca1ef625785c551c8bbd53c7a72b6dde450000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000906e8ff7ba3a017e5397b4a2b3d353811286e376aedfcefd2b2d0d7b1a9ac945f2f25636d697ea6888dbb5b0c265232ed1b9f5b16b8b541424f6150cccb81a00c7f3521cbb4d158becc01a78da7ac9020a8fae47c6290790c62dd23b3bbe3e88fed2976fa4b5d0419b9f09e9a88ad28971be2fc84b8bc91ea75b6fab09c93d3e97384b818a29e292852230a5b52fd0317b1f31d730d6c61b856916f246e3b31ca9b5038f1279fdb98e6c0cc9c5611c74a3454fcef1505c6ef343625d919af7e6e554d233fa66b7a0ad0e54e63b5a861faf6c0f46fbc165029c54bca9eff43df50778144740d865d6b798fb3ceec542043ef78bf663f9d215dbebfb6057ba89936876464e7eb4b9858ec4e6062c47f97a62ce39c833ebbe3bd55354a32c286d1dd79b2c14df2da59432cbe0eb6213079442f3d6956a4c6ea18e528c35762a44ebc83217b82fa202816c31f03e051ffa1a1c2f05cff1e4d20dd4869a52f81ce69628bde31c5b57cb5fc782a00d7c3689561f7041ec590d7f13e2dad3c731002766fe08802676d276b3f25af46bc8ffa4e5a810b02d13e1d389f4d85afe328c3a250334860851f27e23e8eb9e3ce5e8a75ef90e0318a491e3b77778be07046d4bb30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000273f3a115e6e1171d76f50b1b1fa56889e7450a3b36cc6d090216d49c85758b4747c85240a51835085479cc3b03a41b5062612d5916e57e8beba573ec4ce77373270c97e2af763152b8b85b4d4fe7dbd911babd7026d4a8a5b4ec15956a2f8956c1fc0af251f18e9249c64574b8956e1c9e2617b142341f988c0a0259031bcee19e2af1e47bf647237858a6da1b067683f870d57c6ab87699c1ced06dfce0f5417be01d7550d5bca0e239e7838979f18b9e539cc55a01dfb1c685a20711bce09775a68789d7521be7479d7a2c15af464bd5721915d5bdf1d2bbd99d9d1e7897307ed43103433b145d6480ddad62c3fb8a30f104eaba0ba604512378fd10516a0af635b0e57a08bbd4c2dcc53d60f3f6a57f756da260cb0af1041e2ca10d2fe06836a3cd6d5bbca2f8452a2c6666920f27aa49a505b7ea8677f8c43f517b4f491120b257423f6c9903f3490e9bfbec206410a99d6c3bbaa0d57911227a87a9c051671896e41fb5f23da81cf6903c482b53ec495dce35a68ee810fdf2b8dbd04eda0b17751d0df1e998530937b6a83e1c276a8d3b9ca06a5cc1655b82ff0bf03add507db516d67b1447a807b57932666d0bd3abcbeb43b8dfc4b03f8fdd45a183800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f56ba5f973ed5e102f26eb55da6b9ee22e523ce519a52f3e7896c1112075db98c4c9b366c04874e4e9ee0e410f641c9ca65a171a1f39f37eaf0031e45b438d53686af6eae6b398543df01cfb9c8d034609fec47419f94690e194a5c0b3149ac90d942ceb11d4beac0eef260d17c93807567a4092c9506105afaf19826424e5f58286d3667fadd7c08e6efd96b82f61668e22c69b26c41f969a7d8165d2f982618e681b2e2a4e4a1b297a3bb11cacd57de387ef3cef3bbcd58f56d8eb96adc9ace74103565de627fa1016c2e02b3f2b568da081689403736d748a9a97f5993d3857b1fb435e4b123879c038e393c3f3c5e4d9e8c5a07bcb7dfc94b9b8722fe8b814c4e758faf92ff23f23fcf8d3ba4c844255f68083e2e0061fb321f89cb36f7cd4bf2295bd60feb0f6ed7c3c7a778299a05e3f5eef706f49cfa364c2177dc66dbf84d6b4b6b08ff7c03793e52c863d33181b98d0b4bd7245647c1b9b1e4894c91ce932088127b6f3d78e4e8a1821770a8d62861daac314dac1045eeb6ab9f10fe40121f9c16da6233b976ee56c1d2ddaa95e5a1338b5ada233dc500f74acbeda776fb0a6f29ea216a61ca380fbedbf803c90c4bd8ef238547eb9f9741f721290000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c3228b84320cdfabc5b47bb255b63bd1426e26e9de3362356441227614a3bdfbb4e32c4473badb77191b5fbc32a4acac9860cb94757ddd814bcc833c727dc30a0316bf8190cac3596668adc49d8f6180d3fbe3482fc00bcc467f823694d0310b56e098c7d6e645257320e15af2188876843d185dbeb7ad496926e07a67f2aa82912b03dc0a4ab186e4fdebfb319efa86a8fec868660dcbddc5b3625018aaa98e9bc202e507acb1ee2dba0d391d7f58c76b32e1f4b8274555516f99550ab13d3dfd47149e368b30185743029788e57beda4883024eda2e1978d92a9f5707882905093ee0dfc6260136f5a94cddf4a653abb5ab9d7d238f7f4740b8bba162b794a58b068ecb19f7e87873d898ae96bb74823a5b3fe3cafae50f02401e6675ddc36d268fb86239a9cd007724d8745af8041aabfdcf811f94c2443f70e94783552f307715f8b349aa2d9e3b1bc177cd7cd66409fd247dc2f01b8febbb34c8f19618eadff6e271fae98afccfad302f4a45fea8ee3a3e4627a170c9fc2bc93309ce593a200a9626e6db621e0779eacbcc477fadc35ec03b4ac6908fcdaa9c958aefbd95abb99470a7208a664780c0762615353cb913c4b5423cc52edbf55199257f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b04a5645313b6556b4fe911dfb8fce64aba105e8189bb23c023c3d4974d71a884e1be9151b61b9145d381cd6a85dac6fc55b88c55a6028d6707d70c8f18385b99548dbf31f1af42f80e9489361c19a153fdca556a41e12491ab03801965a1c699096718f2ea0c6c2c19d46ec88964671c0eb6b800bf434dcf4a3524ed379fa17a6db950fd23b5582212cd569c7f418d428155f3319805e5beccd01f81260006a9db563d6632528021dc3da129f3d1a7c6301913f6d4e360ecc725662fd2468da1a7afa244d39710e2a7ede1cdb615e622f251793d1f845a4ea013014a202a466051afd625d33969579b01b26fb35348e45be9946a8b72db82ec3a10e693cc4a2518861589365ca3a382b34b2e1e28f95d9bf5b1f254558fb5b4858545042c5abf1b0f24d3659a9827ae162dd5253e4afa2005b718d1ec0b50c9b0bf15024fb0a3170349b337b6ed7d02fda069b6987b304a5aa843fc696be001ef09404c1046a0e62b34136ec76f2d63f61708e05c835e2c08aac57ac1779aab46da3a1bc6856fda76d882819f6c010e33517ef2b017326bd4152f89a4b9f6bd01d8243bb82683f34ddc37a449946c66a8270bedc961396779fd4ece3604f016876df99d915b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019cd1fe7c6dda794fe98e1ad45035071123fb3ca9d72d86dbea705d7715e76914b619fdde53f75a28989b126758204284fd1475da5fb83ebee535985ec4b0c8dd8861db82cebc17b2f160a432a1e2314384c99d21bd8651bc00afbc0120c13691371691411077c34bda877a376dceb49ee1075e7891697bf70e65c0742aab37bf497891823442ef87dba116de9f5e0062ac51c63bd6e42e390d1437cd69aaeccca10bfa27636d0b2dfcea268ee8eff22578713fd479ed68cc1e857b6a09cd83c49112665f39194cc3a75758e624fccde215dbd9225553b2da1b327d12422da0bd23d1af4b1b26657adb6acca4c18f444b4cbc0254ce1ba496266f6761fe800fa3432b699e15c4c897ad645e125865ae17d877d6b2c1daada17a668c53d122aaea77ffcaac9b5c53bd346f31afdcccd6b9b1340ff6ab853dca0ee6132c985be2bc961ed02f88d51b10497b9504ad2b37064a9991c9f99fe949868d7ede853785738a063ef9201b8f30f7e2d35081d850b4b93c6a87de7db5ad6d4b19469c9cb590ecf5410c9fb9d0ed21b1271a1f35a37e98a47eb4da187215d6b29e4a0f8fd3f32a39fa48a8df0447e64db59b8fd22d1940c8bba20b0005779d2214ff41479c10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a26dd514a7e156a8ea50e8ca5d5b6605a1c4a1506d61ef82e87ec5fb336750ff04e07f9bfface3e2159d63a8208a367166075bd70fd2b790aedb28f120d0417953b93f3ca1b21270710992025fd6b86372bde620c718faf131ac19030511b292ea6f7cbda261e27257e10d6927462d55294387552d7ed3f3efe90aab064fb5b4432701d44999b4dc753ffbfc03318ec96f73b37ce6cefc194db69abfe1c9b1db52614c0c3d750c88ae70990216185356efd0c416a742ffe3efacbda15bb8522e43a667034446258add8ef8696c3e0be024fa78d4fa6711dd0d06f00a5c5759d90aaa40489d6fa7cf1933bf3ca2858daa197193f35821e0ffe6a5303ba4da00e5c6047b052684da11106aa922c6e2735ec5e6b443c41f42a8ffbc55963771affda507970f464aa79ea6f51845e1966e245325a458065b26243ca12565246b62debd969dc55fe0fb8394ea086a834dccd4acaf2256ecf4fd3e30fbeaf45d5967466753a2f74af6bb16e7769e66a283ec172d8796710c4e6ee7131a4764d8e456ef44855c1076af4d09e30a3a24c8f08844bf873fbd32fdf6b3fc1ec21cf794238412ed34fa64f55bd885d42172b2250e0ea54d8afa06c0cd73e2e94cae1ea30f1900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d1734d7e459193f4525920c8cd6baefff9a5c6df00f2fa56c6e9b0ca1c1f512752d4fbeda9616c00c31dc6617ff225c3ba4791196cf6836d10ead5972d159b59058d966785b61bffa402a9ffc2e6ad6b404953062e79a5cd6c1d28f7cb25493b5633cdfb8a46149d2fae4007c123e127d1913d2d8585843e101d50861db6314a9172f869ac778268e17ae60f76b8415dfce31020ab413679508bb61de0118246639ecc2239489dfd1d069c5b408de182056bf0a81203d74871424df607eb13e97a0260d3be326be2c47c8de4ac6490fdf88a0669c10afdd5cfc5a13f3eb2c74a84eae7387de1e9a108616f421d15d59ad76f05a3d2d5ade0d367691ee89f6b1689ec64baa32cce9fb44d7ca78e5a73ed3b0135b735ceb673d39936571d735771a7f4ef0fada0d26c9262f0b891856a23a9878600cfe1980677a7dd1a8f5c7f05abe472f13ba7630ec00fb39fdfcea5bdf9e1f0d304e53865b9c4ea60a4f91ff2b2e488735af634798f26c35c7c68e5eb5d728ee36d997aef63cc96ebdadab079d8990650b6df5736596009015e30330c44c9bc4f64e4fe2f489ccc761e6e30713a89603ed5696935e07569bf77aa9c3a18b883534c583c5cb2c9e98b7be3ea900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ee929522d057370afd0701cf6281d870028fbf5c04a43c5a098529508170278d28e0bf74c305d8359976cb33c8b307b84db8f2cc8440583bd3630ba62094bbb90a68bd256a6c5f9e6d2782121a0d38ceccafa8dfdd00bee80a807ff94fc77e27902cd20981f0597b171eb8e237edbc226148cac75ee0b94515b95ae355be4d90eae183189bd0f148d51d03eafe93e7516b74be63db7eeae130732628e57e0d40e06f415f0f581a0d5c2444ec6ebc6a118ee99b77dbb53ba49cf0f79e1c871f07741baf06d230c6705c8f058e89e2adb28445148dc0beccfd42a4f8520fb29aa1c501d5f8b719450999a48456a05d9a6f34f264692cda6fae7ab248375da29d094b6f66575afe2306689e828377edf0a7c78c248ab38792450d0a34a45b570c72ad04bd139fb88b6c9a8142f3f64ad83042468a1e034d0ff0691643112cc4d25651af36badf97ca02cd311a5a4d111dca0741f343b7f3cb046dab6039a6cc3329f86d43ea6767bdebca3d8921bae816a6ff727ae1dd5050899eaad083dd4631338c7feae0766ad25b68a5a16ac3184a2f65d2ea6434093f1c7eab8a5b1950f80de2d8535a0b3f6219f4d5dcca55efd57331326a45fe5c32f1c352981213cb5480000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000859192f6e6dcd45a2f3e2cc2a7a24cbaa63cf891ba7f7d96bd5517a06e54922f0a8422d02e755660de368010d832ef69686fa78f13abc8e881437af75905327bddd461894ed41dac153fefcfbb637230ed19fa60fe0215f7d23d5eedc111efb354155ba3d86c708b00261ddef533f8e3c465edfc1aae167934eae3787bb86d0e85ef2fcea16860bad4cad617bc84567006a9791b7e50de263c98e0347a66bccd5d5596023d07155ba65980932f412db49d74659ee71ecddd15de6d4a48bbe2ec2264da7e0186400e944ece6d93912f49bc3ec7fa082c511745a2ecdc6f4e61afc9d96d258e1113bd84f9bbe96438c8df30be6ff9d748171ceffb0f4ca31da295b8328f4511f0a80165b56efeb476a27a2be43297390566a8c8ec54c17bcf5643a1d6de6f1387da855f217da88ad1b515562fc1fe4400387f7b9f8966f927c6a99c1801dc30e883b7bdd4a4b7716a00ea1a0089fcd1237a83009d5f84018550487cc858159743667e3dd81f8a361a15886b791cd2659a0ae8e3a22756bf2071a8a2ff1160b32aca052cebccd1a47585bb87c83cba755db9324c74f60eb9cbb2e0e5db073042a6a2d94e978f89f551cc1c0401252e555dd026bb34d83d21055bfa0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000912413427dc32147a6c618e15ad896f72042bd97f8290b3f214a6d1d4aa5cd7264ec0035cbc1f2d5a9e96623e2182bd449d1afcd5dc7eafc58bb590cdb8fcd37492dd2004caeed2d16b8acdb04cb36320d738112acaab40bf9572a07fea55c14882e3a7b0602168b13c5aacecf253af0f9101c62b9d1c206ad9abefc04990511e0172d9ed62db7f9d08507906cd354fb5f030dba928f7db430b3a4fce0210a67f6fe39a7201b049c88c70c96c5870823655d2b1b6b392050567f5d9ca85fb8d6cac36ecf5681e61eb4cc919108ab5cc3cfba17de527a8805f72a09f51cef6ce57f47579190b5fae66f6cbf154e2771c47663dd95a74d8b07b0f8f88604f69423b7d2e0c7258762fdf47a38915a8137e6e6535b7f39e651665a1db06b40969d092591344aa089e0c9c8300b604631dd43980d8d97718c91f9a04614945180db18656871c08eb216fe5d2482e905a705887e23a61c0f522e83e318cf8f84873d2ea1664d3b89f3bf99742ddac583b1a7f23f8a2616d88982e3ea170ae10ae65a819f6b4038b5a284c874ddea17b36e39cb0eb045fe8d2495c2ebe3d917da992b8e759c304f13ee63a1e07db1055cd9e8b3d7a359450fa4fe4b410f7b895c54797e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000858de9d559e5b14f1f8e1ddedd7894d8f5673300d9b1e6c0e67792d47736bf25e84093aff076261013d848253e43e822a10f499595c82eb13e8d957b7d825aee519549b88a5fdfba61c1cd984a082d04325daa1a6534df48c8d5820266105b04a25999f731be69ab06b8cbac3186f8365c5d65845200763ddbf941b4734479fd5162684bff80ef0562312da35811e422f5bd87f367839a3d9a622970c204edd4f015587765a19121e3e04c9798bde5f2518f29d28d2ac2455c5d01276c887f0775cd801892fb109b5c63a6ca35bb29f29cca4656499ac471d620f01abc343d5faf3fba45f7e27a9e7c0c5c7b17138919ddc870b65a9b45e21b5fb87ab164e073a5451d6ad8c6aac2ebe339c026701fb5c6ec0c1b8bbfa94dc3fd4921ede88eb6920634b77635870ac4e6fc532e79d03fd5ceb93161f24d1d403d8a1caedb9289a465f257e270e3c04a0279bff7959a533f8212818454eaecefb7c390c8b4a1af036dad432ec88f14253805303c99bc00d73d063e2015c7e212c9412dad4c7be3d589bc8cbc8b85e5196ca5a7d59a833f05e2352b922120f68d0e66a4c451b6155b72bf431c36c3ab77a29ec2adadfc4be8cee90ce268c891b34b5e2dee39a2f6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006397fad79da7bfdd74a2750288d9b073fb47af140883458074ae06235acd7c79df7ba9bcae3b9b411a87d7cd7af295008982e7a97ec229a189fe3c073069b060ede8763319553c864a46a988fc2113ef08b1490b38af8a4f9630522798ed7ac8ac329f62706091852509ffbbb851466e41a85d257c15d47d1f06ecc725656550739fc35b2e8e30f689e9d538d2c5779debc930d0dafb82593fa67fcc340f726f17eccd2029675031aeac629f00ada19a14704bb4b82cfed55446e9ce0849f7899bd11babfc6f47b94b76d1fb6c9d72d73aa81e5c2af7902ef429ccdf9ea0d24a8ef6a26a806176ee74a2e8d4059b3366a02c6840ed3038aef5f94e06bc9fba3e82c4b73775c3eeb6b1e6c98851b345f8a1fb070b48a4344570a79cb49f46ab72293401e0c102d6283c8e50337a473b5f5ced045ba08dc6367f925466b209350d6f1f3e6f45dac8ac7f7c17d1d3895f623d3c6154eac5b00a9a68be89b8ecba19e455d696dea9c18fce0d6692230ca220075adfc8d73b9df677a2c122e5959357e5c6ec2a94f6394608511d78aeedd277d34a942cf36a9e132ae620ae196dddea64dc29d99b3ea980b6cd57b9d2e18344a8b8f73d41a094d555d86c06493eab60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032e06d424e3c9bcb24c1e64bc48ee87461652ed3d025e0b8adb1901bb4938c769690558727e08dd016cbfdf06b5885fed587b87507b20ea562cc5d713ef4bd3215ff98eb9e6354615c981e606c543ffdbcc42cc1597ace08e6bea9e08d4bcca17857d0401eee20386cf3e49a2e5853c043e5426149b2db8301176750afbbebcab7e5b7b6b8b6a865e0d4aa0efd0ad935549387466201a91315dab4e5bd1d093e60271dac3bbe7ac7b2fd75d0378b44698e022d9d34c124cac9982f4a48143357ab5b0cab9f2e6ce330baded9287055584c815c04f567d9dc6642007678880f5aef39cad32ef6fb75d97d57231ae4f19a33f1d924c8f2f58679676d1e097abe9efb117a8e0bd95c3e7f5274536ab75c9292b6075ecea63bdd6467924a89c8794eb36cddb3a60b9804b1366790f6380bd924b740634a83f0b8fd10f1dfa7bcf4833fbd8bef082abce940aa49fc6c588e463216069d36539f9455a82550e5d1bfb42753c93ae8d83d980e2f282f155114b8a1cef31d91b7efc642fa9b8d9b39fd84ae5bc18dfccdb35093ab1beddbbaf905470cd29a653d4d4e5186f460eee495afd81d20ae72ec15478bfe4148d025fc9cfea0b4c93528a81b6f2fadde8f9486900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f2315331595a9ec9aebe7cf53d7429271a0a22d2da9dadd465d7929a5332af23f1d8e0d7dd6bc3c3c5b70956fa9ee12ac6724e1b7440960612e765cc46368ceb2943b4824cb51f41bb91e655198ee657826e1004d4f3e6af2d45b68e6f4965d6580a9a5b87c45e6347ed6692691af728e9175be7458ea044bae90fa524ae1c1c84cd8363248a2297adf41e1b4da5ecbe7661cea86d516472e847e11900d5b89c9d3037a5e2f2026df56dc1c8c4b67be7e95516876bfb92b86071ffe7faeefe0461d55aa7c9e2778d74188e1a514545428a9357b5bccba52b90dff0270e6e8f5193585e79eb1cbee80267887188f5ddf25c0f221789028cf895273e4bd60a8b3b5361f3f97033a97ef23495d2b5c2c98dba7074ec8309bc5c1feeaa78d417b7de19ba20072c1f93e9c9f166fcf5fcea2a133a2869e65b57377cfd8f429d07770bfa6c2a9777d89d37b659c51577306269d04e982b6f3f56a0768c7e4e46629212da0388e956d3e911652cb9d1144b84a60a4607cc6df78fa105fb07483d5b081bfb86d44e6f80c763f891504a485e7b18bf307e7a99cbb15468ac0d363dbed413b24d69279228d3535dbb03f51f367ea9d8526eb5dcdeeb9e1f33cb953970663000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087ff1cb74466248085ca6eeb60c4dd44924b3dddeb9a4c23fc84c4660edd97f039cec73cee88abc59d11542a9e1689118a70f11e0cf4c69051e2a3a62bcd43cb18c5f57fe010b56546ba306de6c0df3c8800cfa7683fec0773aab815308eee044bfa11d2f1d6762b6f7cb9908658c8eed8e1557a0553380072cc273bc5fd7d679c695031e3788264b2e39c8fb0b84279e87f875b919f0297d8288ff1327d25b69e38daddcdd30a3bd2e2227d64d86c5e90851a2f707dc2a402a0f2f03d66610820d544be904293a633176f43a72f01460b8d60236032ea887dad1fec74ddc7d918ad2e4ab5c1dbef4846b9dc845f86fbe30b9dc9c97100148f81f14f7440277b5a3d8da7ed3b24e2c1582f312a2dcfce430a15cff60f774c16e1c5845614d4624bc026aa8cfca56e296a91f0d3ee4d9858d4fd5f3a3422d8bbc19534f3d905577fdd389aad57642615062bcd6d76e3da348c2b640ff1b104a2ee2b016b9fe626ee89c9d15a5a97320dd3c90c4bb1416c7402f4893a7aa9ca7f1b255f51618e5392ca25728696e42c0dcd5e15dde00ac459da4a641ac9dee8279c3c6e2370429d5f829eed2ee025ba610c40526fc6bc7ee9e229143e0792b3b8e85c89dd88ce61000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a39533c1790f0d08fdb71a14822bff8c29f8f505d2ab7e8799f74ca5d7e19c01b5f4f4fcad57abfd8f5744d95d262f7e9ed46ae55234b1ba1962abd477dbd306e64a0504525aed95e0d99cf81479e097e55eaf0bdd616f39063cabc6fe766a4de9b20382595fd42a22c51affce92a2c116546ada8824b6e791a1a04dd17221fd6ccc40f0153ee40f60084277579b1b89d2ed504849bf0104cd3d6403b3a42094d2196b6d9bdb04e1affa0983ef7cb06e96dfb2e280d69afd6078171d15b3cd2b3a3b16c9e1529e1ea11061660663379baae50c7fd7ce2c5db98ff3a0180601c99dd19f24394db42f833be403b235acbfc31f1e6c6ab9aafba3d01f3c9e68396b29efdf2fba2b4e2c9cb28e9fba0d303654f2454f26bd3dca8df5fbe28bca4fc343ed6bbef4bd2e483f896f2b30beae40e282e83af7551987406db40c9cbadc3fceb97785b6e60601dd5b749f2a4d94cdbd0e4721c817ab78ac741e5679ca61e7a6ddc1c4087486c2446fd4ce490bb685d85903b762635b349a13a47181cad2df9ffc20fdcfba8f4f762f9859811874d9cf1beafb9093d205f76da11a6ffc15a00eaebd393d14ba9550a44675398e13e63e10cfdd4d0a92930699c2eab0a7d500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a826d7da4d9fbab2c0a8f11b2abeae73a8b463f2ae0bca3adc9d710aa2cba5ae246cac3c7263e04505a792ad1b936e9b40eb64d3b3f775f332d3424abefe544dde2296b09c02ed8dc02fde3f30d393426e8e2f609dcda0568f87f185cec03674102ef97394249b29c244b5ed4d07cb701b19bd36300ded6b6674866eab1ae82c0fdb68c57764e43eea072a980a18b04f370e293b6192e6675b599ba0f63524e5dd1552456c198598b9d348f584718b92417bff40d6c1b0a3a55d5502962111563a453f29a7ba44bb7870dc73fb2e08237c4c510f633fe3ae47e5e56c8339fa3be8a725f5b0cc9685c46671ae5bf232993ccf033cb1dc9e9c3da025828b2fc9073c0134ba2461601cb372dd11ff802fb628980e3534cf366d4479cf34a3db3ce813ac723941dcee8d0e4b6575cf14abf0d19e575a293d10251c110efe464ef8708c671be5a8e6c646ec15c2cce0cf591a9e5e9015576bae5f025b1eb21ef96d42edf974352b50370a3574b8399e3f7947f3c47f6882fcec77324b2c8daf4d9f334a785a0598e57d60adac49aa5da558d8a424ea1006bb42aa3e36ea6defc03fa74ce1dc89f63aa132d998cd719581d27a3594b14cc137d34bd17976bfb1c308e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009956eccd312d0e46aaf2d1c07e86b859f7beaf0fe9378829c10091f4debdb16504c7c0e287136d3c2310ba5641c0790cef7a7b3850d2213c2dad9f5f68061ab6b2ed7960194c13146d64be4c6263ec7a80c96e3a7d00d5fc195f4007155b4b5fb43255a07ac26a38a4377af8aaccf47126dbb04019e705442885b33a49db36be186446e9d272b9961711ee7c5e8e8d2f929b6bc19340e122ce34423e9b7dbf6254833ecad06a03f7d1a27ca6a9fd23ad2fd962299f2f9ce427b10aa2d571d556f7474adf457fcc00dc2dc2d9f497da9e13dbc5391373728cf4856587befe826f44fe9ac948336ad7d0c872f888e10186830598e2cea6612d1342f3281a447c2c300baaaaf32f6260e23269b9eac2c3dfbfb8d755542facdf42b80fefc89c0dea91edea85a30b4fcfcf84f5dc0dfcccd7be1728b0f40dbeaad6866afcc5d3f112d731cc36d0d0fb750a36d4cdff649dadccf752e2ba506ac5615a419576c0caccd96068723def5c1fca99cb0161af1c80726f58873fdc8cb9fe114ebb67504745d0218898cc0f545bdb669992c856de84ee0aaa010fac44c1b33629b4c0d479fc91f30c1d70eeff59e574c047b416fc1bffafb2e1c8e52f034b857885a59f54a9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089cd2acedb9c8f2f023e9179ed543d5c1797b48423727c19607adf4b1cff59a4943e33b650c50e545867c14f7f3d437f940b91fec96c92e5d0d28fec26b65034fe4571b294c063241bbcb49ae31062e9d4c247fcb10a13fd1c8feb7599eb2bf6049eaca17770d122eb171fd8f9996a9df4c8c88311d77c1a71e5a914b0b8b79415ea66231bb52c47b7294fbf2604ebed4c1735f4b0a291173ee1790a7153750c2398a31536c727d33cca26cc7da5909da848f6d2aad18c4d9399ba0e4c7ad67a06e23085e727fafec269c5cd87594f33105bc435b3381503517e456e70e4a6407cfa532deed433d36f5a0dcd7558a8119cfbf2b32a6aef6dbebc22a2dc5413c0eecd398e4be633846716c3b79d8ce357c6b9f4efcaddb6dd0812271c52a109a30f537eead3dd82df4c2badf5a06a16ba31a6a09dda10b14e7c33ba3dbde60b8c8158855f45e4e2a3153c53a31a5468a0fc2d85b51e49b50e3921541694adf0f6a240e3630604d0bf4a9e69fc23627201742ce86f661f17a1388cde98da05bbaf8da9e200e497644db65afe46d007a796c7813eacda07408b341e9f0d8a897f0cce57da5ed857fad2c8d5c2deb491cb5de6cf605e39262506b494eaf2c21c17d800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e48f5fb599fb375020bbd781ebd03272f2b4ff9dd1e5257e24ce3b9c7d34957bf8c387be33f7ad88f2f70a7675f24b6b1c12cb551ca749b7a5d6fa329f158c8185cb3a4499d5c47305e7cd0746024aebcd8e1e7165e8f77d00006eb69cf91441fa034fc2b7093355e6170ee806c00cd4aa7012c4ff2d8ebb8529d58e77b38cbc5bb7f60c7468eea68b64651f43414cdad75c6277fdf8c9d1a53fbba61eca9da3db963aafe8a9398d79b2a59104da117a0eaad641236fd130ffafe6744b9feb58b713b4be61f61afdec800e6caee4dcc399441eee124fd2967b3b3558f700f1055677605311e458c849a8a211ad8a17734d50c09addecc7c97a5226bc05477a6e31a321b0317426656830afdcc4fd8c2e745f8aa7e0b9275e0ca39f8d9c9a4aa70afde81b4c6b7cfb8ec12c93e0a332d046d9b83611bac9f2cfd0c880cf6a010e286186b18bcbfd92cc93fe2fa42e5c30e7e8fd4b759b3f40e37e0bc68c1501282a3189c159a268eb8ffd1974d9cba45dccf99744ba2174eda119b39a377de5741f9f12a97f0d8d67f6039b94f5850256a0a521b3b482a91775c35c7688673709b0f5c56070873bdec8cd83fb37c34711e4f26328ca5feb92e249678400b976200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cd330dbdbeb1484d5922fc17533f983456c4fa38a419787c37706cd2ca37d6a46ba2f1586eac173c585d4482c17b4635bafe32f3c7c37a2ada328d7c746fac81151cc9239dc3b889831eb79f68e1598b04e22f01e9320cd2277171c93eabdccd140006af8f67f4749637f80b96041c70b4a2c8cc018eb650e0cbabf1c826687aff6d283fc39142014b9a924e134e7f92766e19af1e3d582d7f42b9b4baf08f22bb09ddac33f9a5718f2606c7cab106c78bd18e99e93ae282c56972d02385302cee7d074dbf92adb11fdef5c3fe105a52b6abfca84cfd3ba3242f94f14a0e6f197dc5e915e745d0e121ed53c67bdfd490c618c25326d4fba2c72b83512265aceec3eeeef83f2064cda204a5b2a7ef827458f60924d59279af314ed2bfca51ef3f1235cef83564ee339df1e6ba1ad20d9ab5198c6d62e5514d9623066d76084f6e7c6b56d75bc4e3a05b4be2872f2095184864ab561807617531ad6a8bb24fe25e04455ee91a4a01b7e1dbe364f0574942c1258bc772c48c207f5d0b273fdd77c6918f35cf351f76107e7d093c3b00c9751f6004aa501bc303b1c5ab8665eb531d36730d4177c34a4fa916c2cd3268fd7a19e22010a76d9ecdebba86d65271f36000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087cf72a9ea27b48dccaa1723f20a3daf579c44291cce4194a9e2c7e300993248c6cc5ae49d5322ab6018d12c96b439e6183ce4472890ff27fd24c9539e4fa26d5cedb6a5f115e93a849b90b69976ea0b4cb4068a47762af9d680e69a29c1c0bcadc00634f78d0bcb6309372f2148d3cdce0293e8a17e516c75569f4a2aa539f7660664c41fe9fd0b3758a410ba9af900fb2eb928e40581fafd9445726d4bfce35af6acca85c84116de7607727b2dd63e48ccbaf65930936ca8ce9687af7b6c578075368469450e64804d65646a5bf4e73876b158352242b5911103171e9f246109e7c7b3bd5ecbf1fdcf0f4fde994d33e88cc5375bfdcbfb6c98f7ff330ded8823aae27804fae323031ab5bda3f84cb8754f7bbe0b9e3a3e588fa265aa46cb6acd39c32d152ed629f005cdf795a84afbf2285c2f7ca38c72e52cfb85ea9e3239f0bf2e2da8cac202c138ee634e7285591a10c464b40b1c95a342b0dcdf7b4d16fce393d22a9c654d782efa298b9e76f870a4b0cf0d804d63b82d446a97c78a5e69dd14b2d22870275680d3c3ad06cc8747cbac8da55c57dcee126a727d002e2f83290f5f68ac12331f938e367dec764aa6eebc94265f14364dab9a6e2a90d9450000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000897193f110d1ac84488f7aadf72973d57fe976702b18dae510a9f22b91aa55aeee21a121bff14b50245fe94e42fdd79ed45647295f521ed0670588741591b50c9661de7f14d4e03795dd074ce5b750c979f4b6bbd056b88e33eaeb9e151fa0ccb0a516732961c7cb4421dff50520c947a5e806f7b15e52c60d65ce52c6b72bb13697e1528e275f4289f4560433db53a7e340f7a8baae52f8dabdce7a56754c966c3d8f8b0aefe88252ee6b8393e7f97a8c2bf75af74d48fed2813d8754b2328223d0e8759a870a0a0af38a010131f2e721bcbfc8ef219d858fc1749a65bd56cc23d694a20910a2125616b294c20d6767e7c65c2d50f113c861959997efd75c7233deb371030e604be283f216a2a68e153b2287e85325ad6e1c11016890cb47df00ea82fac81e476f927da3cb4cbbbd7a1b4d33e450f9df9abcdb628d3589b2fffef6dcd5955b4f231105bf1e3df4a61823b61faef2a0d5277455971463a1121bdc24d577c28d0f06e22e4ef9a5c1b6f692006a654a7be25f0de44643110773136e4a9a318c9bd38d0e8ef9dcaf0565772f2d733a555a86d817de883924e850360a40d6299cef258a0e364e85f286f066370614480daf631d05cc7fd8567deb2900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b703638bb0a7df107712185fdf426b6b36887b7b61e9401dfe0942f2c31cfea43123b825c9e2210609be4d5a98b603f25d45a9896f614d65d6f5b7c082529f0c30c48b5da172fc90f28f66a625da098ae846aa096215a3794708091a4dca3776910d322ff18776082c64e1023ac7c4d4a5abe2dfde9cc294eee4917610c69e86d646007e4fd4b2ba651265c5bb084be83b77434dc50dda49fb7e26a28552bc8d1bc02f92064a7d8b2a033960e51988996551ece2d09b72b24b8687d5744114036149dc553d019d32090b9dbc96235e7ec3a0a7c7ce0a84c4c7438c8f151547628455190b75c797a050f7eb42aec7f515a44663b41c2e9c13fdc0641ad8e78d5998a245244ad3985f0104ca552934595d8b4e29c1f5afa2a000d633cdf57d69adc30fd2703329a163fc9f6c4e5e4afe935076b7aeff927642f748b6345c84cd6231ffa8ee922dd276b4584dfb7eda6717c5752f3b8fd94c79c75b22f570670e45eed0cf2b809ccade8d4a415df442f31f75cd7e733c4e83005b6d54ba46ab5f867741ff95392f5c425ce30a65d0067c415ca570a67c13f0b17a08aeb193be24376255f5a6976e2c6fa3fbdb09ba1c8a5da8f97418b2cc9f9b3de4469a4c8149f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b7626d8adda078d3ffa64b3852c93fadbefd94460a83bec77732f42b496415eb0120ab4416df7ee297473d9981f0c95d1f480c3bf484cf00660f26229597c58894e49a1052165e6eda5023f89556b2ef517328e4526853110cdafc34fa123ba164299f8404cf28e80ce41e068a032136ae567fb03e18cf41b9228d48567feb76536867a7ec502a89c4842299a31f43dbb35789453205ff562ff39293b143deb5bbd9fbb966f9110ed14f0731d374eb355a85a4305914215a34b36bf830e314d2517c1aa8a51c2812240754d81bdc2a03f31cdda0c6442664429fcd29629f618a8097e97c8d193550d85ccc938f322335c2ac6c16e77b432efe1701e50215228ed4e8375962134e8ee37cc9b44cc3053b7b08f59bc155f79d3cbe14745a903a81b4196745aafbe90577753b6511636d9138badcd4569c09fc407bab44a1a4ef093d47a7e86564ea695336590991df42fdd661a39dceca7302f7d18a8839b99c93cb846457016163dc6430683b98bfb1e0da1bd74e9efe915d9e59ee2abcf43f1caba3a71001c1a8f3369026674169e183740c70f6e7a2bf8b9989ba6b077aab5917175294062e2ee2cccb08e8c5d2ebf6e79acb96aea8f945c86cf24ac8ba2a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a71f2bd049c726c69f891188bbc426533ac69197dee83e682286a16f8189c1de7d79220879399c677a990681858d16a0828ed7dcfbbe7caebcc9da4131436188b4a1939a5cbb41d38cbd7cdeb0479aed970b7323b16ccfa68bf4e4bbcd7c03a274089567234c00572207834000d2e44d626435c90548cf9f8a7e2009fc2b2ae81b8ab268d271a96deecd2b9a82d1d716bbacb4cc22ed9544b15ffb7c725fe1a905fc09de50aef191166b8320bf32f8eb39b362ffc8c9eed64db109402458a7300c0bc7304ff3366bb7f8fe45c9dd42da73d022b70db8164ec538296237ad616902000bd7ef3ebc1feffceb7ce8e0c31defd0bc4defdfb432ffc3ff1d2a6d0c69d2b6da3227c914ae35c7865c4c8d7a28b0b9faec9457a4dfa3510d2f0900c2fc2eb7e59eac37d35d262a189a9e12c3ec23b1f4d6a28d3d03619c7b95ce5b1d1aac0bacc6af60c241aeef7b202cb873b38afebf10304f8730d3d55f02bcd095f56feaf1a5c29915cfbc2396f60338e894475d132f61803bd539b47191935dff86ba0f70a44e2ac335fcedc41a407ef1197c15c536e85bced35fc2df03f00c6759d14abe12d892ae927ec1ace0d647967caa712567d1e9c04ff3467eeb5eac3e30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000900cb5cb556573333e5dded471afbde72f1cc2940d8403725dba79297ade0f2a30d108ff83145d2d04c93e424153aaa4ba6a495a6e8d4ae6b1cc425467393fc593278f23e01dc155e3afc46e1dceef179662422582ff7b9d2e80832f298652132220c4902f170ab674e0d62e0b122b2619697ec29231f9ff888e6267625f889d1843821ab77847fde149f76df17f7e330bc467fcc50201e7e43874edd618d53c6412c574573dbbd9a8d3550e74cd42d29417faed02f63a47580935fb2f8bb7181e8c404e4bff7d5cb77ed9e319e8444f9c1e63eeba753c447f182cb97cda4ee5299f446b72f1a4f42fa29f8fbabf8f629e0b113f4aa20c23a1e6bf3245ac10be3a98df8a49c61bec6e3fbfa48db4061e18eacf14153f84faa3ff6d6b1fb442c9dc1d2a14330261f23792095de517966d45927dcb9e1ea2cb582defe63fd778804209618550f3aaae1453f5e1e8d69e403790b3dfc05e6d0a76659b3087b0f2a27186bbb66c12750ef65e7cff8996fe5e08337c0276d59ec863ed730cc37bfcd4e61aa73383bd609af8ba5b4fa23d149d0289f86f9a9c11eb6754637dd405d39701ea88d22c12dc29ffb3aee2f185e2015ca2a166317885dd8cb0531bb7d66c3800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cd12e4f2cd1622b6f76882f29531bd69705e62b74fca5dbe40c95e29ca6669abbcb869d17a75c9d944a89fa477f6bd5618e5d7dfca0216ce5e34c3eeffe5267257648a0248246607b23e4702ee30f3dac58246ddbb9f3e5abaad6a0888745c7f7761d28ad6aabf755d9cb9e4bd6f3a2f6eb2e4e51f22db4fde3e76e6215d7d389840a45f2583dcea74b9751b847edfe82bc11fcadc9f9c2d8051af0075dda7319e1ae590d5078592980f9258632169e98582c83f318a6557a7d40a2346ca9e76764d436a1a7096541de5b5a578a2a09d944bf16ef448f527a8e2f3cb900a11561014b3d89211982c0b211e5b75f92af2b46b1a546bca0f1f4e45838926e724caa6997374b0535e4f1a0f1d065d70c1c45814f48ef92f1d6cf450114111aedb8558d2d09b7e1d35dbb09181a9c338c41d355454da38a6bd8deaad29bc2b153441f98666e3337eb93907da6535662fc7700520460e791f84ca0169004e96edcd5f12aa689882585eaed42271eb847f98f12ae122d505e4cd17f181e4ce48ba45271f4cdfa96eabfda1dd198276da3f8e7712151f7913d3e0803da1c3cbb4301081df7dda2057e55cf2ee370c9f958bbcb5461922f67a1997e907efc0dde1df9c800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008907ea3b4809a459b50cd93d4aa2b145121c7fa80789dcb294b67a4fbbbb0bd122417156fdcaf1e267c62d135a8bee5f3ba1245d3bfbc0ff9b0f03da4a5b42ac568d901f315ae1353e1298a4f8b1527078f74e002939b2f595c4ccdb4d9a8c46c7afd67bb15f2f5328865bf4106b42b2c944f1243738ed3c5d61f31d18e904aa295894634db7685d6e651325aa161805be5a30ca2e5312eff57710f7d21bfae38d687a2d3350a539d13db24b80b27ccb43267140a62ed4790a0e9a05d565d93cbe2ae01b761de5fd12eb97ad8876bf7b3d1e8e330698cf7853fd6b76306094498881cf131ca8594ce18324d121815fa01fb1fce5ce896e3f81db983039d0372dc1d490e4163074aeb7c281891c3629a7e18e4926041a8bd606363e4b6e533cffaa9ce6a0c4575eacb37fb9dca6af50806b5ba9e9cf36d929fca096c0b7960878fe4aa3ecefe2eb21f338e64d87da39b1df684aedd3105f996a2ea1cc72131fab2a70c6cad25c10a2da611a3c47e8a0de4260d09090cd9f26af4cad5e809153d53827fa7d052a445d45209d7c368f409efa4f96e75f3704dc04f817d8113bfb50ac5c7136539a8be516087d9659065e50f060ac06cee7c0b0e5e8da0da90a110400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002065840f804b47537ae14ec7695633d0dfc693c3c3c8d3a7bd9a8d2da29969578e32c6bedbddecfc96729a2f37e98984520e3701d2fde5cfbd6c4d15d1c5ff34096146dfb281690070e43a8ec03bce82830bba18843724dbc3d44d1abd54b1433a792eb5171806a4f3fc8deab42d491a0222dfa677cb954a4e99f7ea5a7661731a22c4ef4c3f30811c4ed93e571b8d5f5026e8472d56ee7862547d00b528a1c2819da33a73471532d83d543b43b8f0c71859802dacea4dd61664087555a27803c6b313413da29573b3101a72ade28af1473f595a236c3a1cfc91354902fd9fb44c6abed1d488a1a40bdaf3f0371a1e9a36d5216497e4894d25fb4f7eebf4db0a524191dd5d982b82f87ebe41aac7bb7f4b53b312c715770dbd0ccb94f7f9129c2594d5393f2250674764f52b104155e4ecdd2dec2a25a00fb5cc4a9bd4448a1b08b6128187b4e78aeddf3103bb74cc97505d6cd2876e99afb8b5a02501941adef87918b26a69ba513af26ae2c5396145a064858be44490d13e770bb2f9dc0d396109db51b115676fded9e1a9f2f809c3e1f000dff0343e5056d4502a51df8d4d0cc8cceadeea7205e509c0352ba0672882ec0c6dc9edf7c6949f39aa36862da400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ac29b1525650e6fac094960678bbb5383840055e979698e70505bb8f495f024e5d6c65897ae1f50329c17e6f1c74498e1702e7e302b8513ca23686ffafe44d9cd069429f04ab9bed31b11486c468fc58ca46c092071b7cf72728c029c4d03e5325b751e070b96d23e1317d2823c9bc21b7e7135c7e2b2082e4674ffc3f6110625b690de9691ee61a5139bf5f29ff059fee2acaf71e29e2fc3ab2384aabd11124dbda2aec35d22342af12033b99bc284503c2cce1f9484a1ec67b60d983b4b6fd450c96192931a8cc20ad2e88a94942901fd61df45471a830860c57a4b93535a141b55e1428ee0e372df5b4baec51bb5c1e698bc254b4a3a09c325d1f69c7482007a39d0efc8b14533b9566b196d800e23b5222d3cf0018e1ff53cfeb3677a6c07201f5abff794197e315a721c4028d95949092860479f43c26a46309ad04fbe1d9c23afa1d6a91845969152e6599cfc8421954966d670789d0a7ee56121c809f9b62e99eeabf3606b53f92cf984cc8edb8ae040295d895dd256fb75183f3e440f24a7abc9bfd9df3908dd0fad1650dbc08cf4dd02ad4457d69ac5f1f3bcba8f57e564810f16c0b9cedb49f8c5be50394b4a9dcd66bac1d8f5e8ed47b9ea551300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003051690b91d90c519d4f9198184e98d007a4881a688646b3df692a80779b8cd51b914dff6f5ea59177c9bdcf301dd7e23fb3909f3ddfd16923428390b6e3d6b96a11c3b8ec9c72f15af10c93553df122e0e806993aeb339f503ccf3b61ebda30d1ab21cd8043140c36e144822a8777a7857bd2b4641f1c5759fb19f09ac41b247b1fde7ec0cf04627bf2079477a6bc764d8efb729d180156a73e53a6f023bfa5719e7c2aa3ddcf0f64f69667d79e1eb8e816e1aadd7253432c865a71f404a43e60d92629e1c5f3cecff06ab68153762d7dbae4dbb724547d84775951c96ecb12230390be485522781f2e554b6fe5a03e778d1cfd0768919a77cf3e9bf91767c09e3b97f0720ea5e1bf9c6d9784a807e8d9dd8c1221261bd0e5e301e7fe51afd860cb2bb3a3e463854438f78e55511b7b913e1efa84ec67c6b777de2f3c72fb15452a630841991f5d31d40b40c941a58addb5a93535ee17b30d1b9f8de74cf4e3059a2fc90d8948a99a04eab5dafd6b9c2dc353277d1011bb8351e2dc85576335bc45db22749adfa92d168b562809cc9e133e81f90c238e89123b241e4566cefacc90c9f024f8a287831a57e194a697bc843a8146155036bd24cf818d94c9ffc70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5f30780238ac8534c3c1a8fb2f3430debc04c51a9e61a7692ae18e5eba3c2d20399e40176bb01d93134a3f4a505caf49d5c0044c826cde7b457f7e3b9732ec1e42234ff672a1ed2b9b082e29bf0ddf4560ac95c147794ebe04264c160c994351ebb02ddaac0cce5593b4d674e4b5cbe833da5b66992762b7175026d6990877c0827456dd5e3180f11e262983c231009879fb97ae7685f76468552c3c16237aeadea12817694a35c182f9dc31885cc94367af4eff86aeecab2e56a1bd9c8b75920467a8c16e7581ac09c72fce15cbed3b69868945e5954c4b25b250ddb6b5941a2f744667d8ee0c27520f5fe4d64d7b877fd01fcfa9bded2af318c515b03ec912cd369952c69e49f74d3f993cac41ed7d809a3d1de39f1c225b0b513e3b16069ce144e8729315e62b7d302b84f0508baaef71774d324b81f3c39cb3af50b0a9af93efd4ac37abafc180a34acbd7df5fa79c99e602a621716e188bbe4be238cf1da6b7eb721e2e67548c9392ae0bd1e1b79298f1ce5abd0aadbbab93081d975ad2ad503393316f34e4ff0ecbbbac95d1b087050914128fc7cb2d013f3e01300ffe71be4c20944a9569669953d9ecfb337797fde0a9639d93b66ab147fa7466a8c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f192aa6922bebceb4f21fcf3ec6d95b7beb0145b40c952280b2ee366d369912a19cdef0ed2c26ad231cf759d26116f13d08af415e4f868006daa5dc20fd8e2bb72c64c1febf080eb5d9c0fd77fc8231bd4dd709ad6f85b957b1f738264fec2a19254e7a3535a94cc4b444bd2220ed534913097af43062f142bcb4e487adc4d5c78f79f50af011260fce0e005dc1180140ae413f10f12770f0f4087c9a6b7172906598d1da4b9066e91d0e72bedc48632d86e921276aaa659bcad12493092ea8887fceb096a8b11d55c746b6d6c3ffb05c361df44437aaba0d610142cef78ce1627ec202085b074a38d7589cb9d7f78b268099780eaf7c8d3f329107779b4d53a5236dd5bf436aed31be51708a4505d33288c9f0a6957dc0af75d5f71a5d444245a3607821acb9a81d0eb5d39bafe54a3d787d48ad1b63c223a7611faa140f9edb6ad0883c1acefff21743e7fd5743775cc95d43a28e6687d05e72e002f206a81d59ee33f7544f02b1f074ff3d6112c87e563ef7a1615b7f6ee56e0aebad36251767495573fcd3bf73240108f0e24113c746911c02ec07c84ff61b337a106a762bac77dbc66ac2784ee47773983412e39a13637472de85fd6b789da1bfb1c62800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ff53fe891d0c4cdbdae192036268374ce76ed0a6b7299b637e36ed13de4500e73391a98fac24ddad7b9447160a1fd23318e549dfb1cb920716c2e55b8730963ea5dcf5292909ca87c402c0486421e4b6d9758ef547e6e0d078ab7756f7d541b037eb54b3e4f7d4a5f3760929fec843d43fe1a7d89194111133e247552d6bb9a76b65bd7acf9232db60dd79841f0bed082d9fa6754987ec820902f3d2388a6a0fae416ebff51e368900038037235169f67456065cb1eb455fb68763930874dd085e4abf63a400ce604a71e240ecf4a5df03e0e7291de44ab21466871160767d1738a1629c2d08ccf2da40860ae4dcee6f5d0ab6df0138484b812ae1deef2402477c247daa312f38b6671670b7a91f084e1ecff5908889a55d61ce8e488d7922817513ccf2dda643902b35142a4b436cd8344dd6cafd7a6d55cf991715d0c8de1182781747f27145e67cfb26c6460923d9df2dc7b8d8afbbf13a4ea37756aacb6763b132dd2e83cb02990adb377c80bfc7eeacd2b90b48eb133554697ab753337542b2e346faa0aea9f4cd4f027dd9da24abfa7eefff2f34f8ea982aa86f3ecc00813d7c7c5953ef212932411fc825a676d7046d788e4ad5ab7e96c1148ff147e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009decdcd5885b2e35a12c117c3f53001c8503929529cfbeee76545849a31d271f0f8ce2f8b6884ce477c2f2a3cd3a8945d40d74ef6c9f831e64009d1126917643ce231839f759a85cf4fdc87e5e2020762e7925a3faba04796be767831a50064b923dfe2ac5905ee79bb2adc05d6d0860007fae0add7623912b1cf483f9b2beff854dd5e98b4123cf69fcf3e3be3d4a7a5535833b7a601447e8101351c838a390ec5ecec16c8c708359b6d4ba8d0818e818539b4f45c32bcb6aa13a801037b1048dc3f9edeef833ef0628581fc9eb892a50b9c4ea815176c48883e6224ec99fff259a9ada5998931eb1b5711e88fc0998ab88d58f6b4777d7a1ce22bce270c9fd7aebeabee08192af23a4661940085c25e036ea0975dd26a9124e28a122ee7276041960116276047d8fb3b2d9f88685e147931bc90afe0e2b9c67a65ef62206d7ec5a8b43c824d475eb44a40f179590ab40a5e9822041cb0844b5b4ecb0e0ee841b43c6cd004526351964db1ffb269a26dd078512a8ae31044e88fb2e8d36a437c01e45f3c59747096c197585a3af0726959f9de5dfdb9f8c62e9d6ad9a167db1858d1003a178ba00fdd8dbe828b94ba3399ec987e6a57922e87fc5554d379d4d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087caed8c320f643f6c2a484b42d0a3943cb761f4c4803fa2fd32a84484ea1ccbaf79681d3ffcfb8274154c791413bebdb75f802d838e630ab394e8b74e0f5f38a8756374491a89988cfebe83c4ad0ce3eafcb235eba051bbb36541704c19604123538371b21cf22cffb1c2922a73bfdc5d006d88b8b4a15ab0dedf3d6e48cd41de3c25398e7ec043bb2aaa0fb30d4d0203633823b88d4e7db205152c805e66b74644191b83c8fe193ac1a1852e797c5c65192590778947a90e3d88dcaec354d1e16c897fdaec979d756ba38960055e39757ca9fe87cfc65559ae1f6bd865156354455c8feda3bfdaa25a93b3386a826d857036c5f59d6bbfe6fc0fdd4b873e69186f4dd60df705d30834d8ce2dfe6cedbd12363b15291145e43605674fb34f2c4c6518c89e8e9e5d43d6e275485a15b6c241511b34941c3c37d23d7305bdeab1b85ee10dd917826392b63140bfb5b688e0c4924c4d36a16544085bfec64bd5de913ef741f02869469087530991b029194170b593353a7975963626034c755d2174a71c99f26c014da02761be599acb4fe6e82d81cf46cb234abd055f7a1c3f10c735ffa63706715144118b9bba087a959d7d244bb57e5fd1658a1a143130784b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d13759bb8a70e83e9efe28153131934741592bcac24db8763bafc0d9901090855fd105e35ecd027f120310d873490542ed8bd48a236a8493cabc62020107b327610793fb989b1b8f81dfdbe097779a8370be834d92aa96f466fba728819bedc675d8d6a4f3fa311f44b15dda38590270e13aa5f30693438adb8fbe8d50c76f8036382d05815826dd792ed6aa365bca61382778980566465dbc677a5e97784035b6c4c8f36d6bafa1186acaaf879d313c8f1220aa813f3b4e0a34a20d14465de58589879ae264857594b6256fc58a34e1a398536eadfe0e8b517a11cacc8a49c99ecfd955d9d44e569b0b3082a9b20d4b80dc5d5b40c84ab9ac34f27af4d015e00062029430487004269bd2d435a8fdbb4140ddacd3738dc0ef3df13a4c41011b419575cb24030e7cc409137fb8280793103acb9695207e84ec24f5f83e369b018b6f3969106161b220600c7d336a2550e97afd93409ba80591c0ff78f6ebfe61f2ccce60eed0490a05cf3050c1520bbd25a34338f13bea61cf6e4744971a889a9eb3ed22adbd61822ee2679b66da91c81ea2ecd190e933d3acc1b64904588c1b56f971a68fea2266b397e345b66cf7e239c03cc118864dfe379fdb8c93a3db00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af2a5b9a490f41da31f9fd76e777891ce9c3c124af30927cf4923ef3eeb12b66e13e92b619c6aa92cfcce9a103e26d1b0056eda7a8d1895be0b4276ee186219fd7b4eff4da5e8766a88965f0bda05f22a54c9391ff1d2beeb4f9899ce3e7b2db37195acb8b3ade73f4d4cad0e04efd12fc81cd43f51587f7dd91997eafe9196eb09021d90ee8ae16eb661a83946e5a7ded63ed7378d72e6d4ade5629ce84a3a8be147c1e81a86559c0ad6c5e2eb197072873dba5bd0735d1be24a6622190c144fac6f210e2af1bee48e5da8b590ff93f2822d6837307ef49275be72b72784c4a231957c7b192887d00c4ad77f224c18dd67b62b339e5976c5a254e612e7a979ccb3a7a3bc5cd9b6269a38fa18986312645912e076e0e8140c9db5dc392a35f9871b8c2fc5867c757aec19bda5a73a8211f8ce0ad339275d39deed39e771d0f95394b6af822d361b857af013b50bd2bc3a593a890ffe7a9628349cc2610c6656ce301717d1f8179b7f6754953337c25e37cac68cb5473083014653dcdb403a5433eb4ac4bc3ccf07f60113c1f099aed4a35685a632162478ebc714d8c5bbece4d2ea9ee06acd5923e2ffddf077b0d95684e2a1e2d3eeea122c67bb2dc0f0b29fb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a60ab3bf0cdb7479eb2fb8d3aa06b3ed624577bd69f7c9c90ac548b951814e90be2eed6f1a0372e4d20b84a2b2b56a9e9ea66363597e86c07141c57e7e21a1ce6629fb4e650f74991914dc963f6ad696e3953617da38ff4d570b7a4c7a65896eeb6cf576144a214f1a39ee29fdf4cbdb7e2ea97475650f367e4ad05cfb4461ad85a26ae74d0cf100878100effe1b3a5242a2ea1dcba0984961c8275b56b9d01f1fa9dd55efebfda241730ba3b2562c00cca928d5175bb0c96763c3caa19c7b651d9387f48458e0cbd31398f7961ea998213e2a87c767903921a67dc877a95a5874415186320ba0ef9fcf84d84200fea47fba7f0e71120042e5b2522049cde86bac033512c162728ebf5eaea79083b6909d50a85b33c9b19dd750f7b68e6096db3195c09052099320dc4b33d9241530044f0067c0a3983986d0f0e9afe53c7de37e707d3f3b51a59a6da20513181d97dce8ea631dffb274d0a7d4fb9cd36ff82c9f322be2bc08d1b14aa7dae28f74a9021790a834c607e5ea52503b21e2871946a503252e4959fcf66e259931377d571bb3352ff5f3c4d2634b64a546da8357a0d975177dacdd774b1fa0f0c512b19c2fa1459ecc0f538f2b2deb693d7dde4e140000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102071db338528d0c15ff2d8051cf95b1a5ade5d18b2a762b9369a2fa70dfa538a0ecfca2432652cd3a090b185deb2b67232d0a31ba145b5eeb643732cab6d1547fe59b82865d6fe878430c494f795dcdf271ec67dc2383a102ad21b3eebaacbb0c8a6a8309d6aa0925fc6c09686b19d2c7d114a167c433dbcd3456cdc9993c4b0a12b5eb01b229fee962d0a4fd0e0b4fee750ecf0624d518810d63cebb846516d325699190e3ad0c2542ab09a5a2cbc72b4ac37f706862a0a552c2f6ffa34aa834273326c7fd18af3fe5cd81253bcb18a1e17613e71e7383f6e97dbb28b5c437e14b34c19ed847c2d90c7cff6876a0f90255dfebb7adcf95a5c03b4e142f4acefb877a78ebfb31a0ae91ba6c636fc3c9b383912af334d649c2a7f8cdf5f9d08c636833c28e7a80933b0179977373308de9cbd382d7d6fd46ed75713773307db6c8666775e0340a7977b2306282313fa8821ce074628abb50ca9ccda8290ea9502e39b013b15158022b44711e7005cda857fa836ff1ef507de78213c1d9a9fb7e88e1da7a3f506d5956da4fcaed7458ab21cb60fadfad791281122a7ff2ca3b3eab0a05784d053fba22862c42eb3f6a027922fc795e758a0166461e965b68c2d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a54c585d031ca2d7545074f98ee4d5a2d500124488409f1ce36e8824fa1e713bfbc7e2023c51133b7aac2bebc6afebfcae66eeccc53ce507e1b202b08932df426092ce3a7db3c967d18411aee9383dffc4c30d3e1c476babca9ab0fe3b673113ad6d7014668ee894dcdb09f1614979dc8d9491025a13e711f7bfdc297ecd05f7719eebf8e291cef531c0db1fad68b7592484b049bfda9b061e89287d972740b5fb6e0c66189eca9eda451c86397eb79cb44afa81d27317f02f6ec5c604ab1305bade7be5499595f44693c687fc6ea5cdd1d3440dbf52a81224042fbf88836671701a41b14e35b6e7034a1b2cbd722c5447055ab6ed44a4c147748abf7f68d7fe52cf3710d37c92437721c12fda49b8c90b0ed8fb11d9b69584bfe820ee28bbe00b89ccae6cb7c7ed165037868980336fe56dfb24821e75d74518ace41e2584bb5146d2ad15cd28ac6697080dbe862477f341246d7982d7a9ddab7b30fba27115743995130be65ceb82a19198bc7fca1b5ea363c20cb16e45550da90e150c53055790200f58dc595dabca52009ad16f9031ff594d808b0b93f8b8481af6f8f8f8ae3759c3ed614c14ccc4b78b37699bd1216d5b7b3bedb69999ea42b1e3372af40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000243c4e7f4d7d927ad12b8e036da4d941c3653dad470153a95a13d90fb9058199d120df1ebb05c10508b6e30f341d9c155dca288bfa94d20107e08cb3e47e6041783f65a3376f56f8dcdcb2555b9051575d4a4b794e90a166fd010f26c617f7553a5268e6c32d5e5fc696867d88fb216dc8cc550610d34590610dcc48b26b5dfb0c243f75aa357ef70faf9bacfae58c33f00806e625904eb6b9a43157ce0c7e03d29804115fa3e8f3704e4efb5b49a64bf731b660d6d0753cab7fc3980685855f06fa0dcaab5e3e0346557a053492cffa579208873e176b0c0000d1e4430c562b4fbf1a31fdc514ed98eaf337862c9fc9491f8a5bbba93c9773f0add3223b5cd815919bb2ea895013eea4cb6821e6eb1e5658c3b0d1e2618aa72cc8b810debb0bc45ac6f5344a644716a252fd3c0449ab6df1bbe3ddfd78f0e21fb59d8209ae27a6f95431d315faea1e40327782a6224abe1f9e33dce0e71d261e6d1640fb15e1b6084272e78b75275299f1059f7e44d3103b3a4dc9d14c9ef0280369d50d3d9349361a5c711805ef3a3d5d39fc57ff114c032c48ed304d8d4cde39db250352a849589e8634c7f98584b65b5ad6138b79813798e0b4010b208f8e857c7d778fa800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c0999c065847b393de4eee01f0ad9ac6d7deec1e9da54d5d731b93b22d80d47951512241e30131bff46500504f4e74e288896c962ef08bf46c1d965fa65956d0c072b520e4bc38c443dcdd8d9bbe3f6fc53a2e6830fb141d9eb14dd6a183db8a87cd477e49290d5b19888f283428264c34a81ec89ad129ccb14c877612a85679a4b509e67ba2611350a3c5499e12be5134e30490a7cd5bf209f2f2496b55b6f92a8ef1c8510d7bc3f4393bf0ae4013f057c12c3fde80cefbc20c109ca9eb3300d0b46a738f1ef7ed45b6edeba60745d972c3a601d7b712dee83bd78f0fc8c4136cc77e76ce0d11662786d6551b443604121364ff90c2b69295466718b150ae8ee6dc7776f248533d025cf49bccfdb590cbcf7913afe9e75b6bc2cd8f5622266da8b61cf5c18ff31248d3327929b9d9ba75effb73bbeec257d0308e01a94f573ccdd74f8b3b38e22d0c062c3b56e81c14af4583fa432fabb8ed7dbab11f3075d8426f4583ab6e2528489bbd7a75e9ef2d48cb280c3eac03756cc8098a700353e25d24592fb8b7a9387ebd2533ec657e8722bb1a240f6c59e4043870f9af534e2780a6b91618b2dde46d735a80905ea92d52a784dc96292583c13ab337823c1220000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000971a9ddca6d4353ee04de5d4b1ccf940a9cd8c4ea0fafdf8727837a9e52ae2c9290dd615e7864096a46618c265826992be7dfe59aa952f8ec71068483801513761a9faa244f68bfa6ef28b6daad057c6e81b9e0eeb4b7459ab54a6632d116763d81add8be90fcd14e983f0e07d7781f514bbe4ba68d147407d9b40600906a062a51744482516c9ea7c9e9675cf3a303dee3efa71963606a94d7c7b87acfe554ea15fb58c60b670828d91f9ec3c9220b619df37bc7d350a0fd9fbcfdad1fb5e0e265914b30f4fc7e0043dc61504720b42dfb923ef098c92a7497c666bd67b39566d4a60b4c5d21e58e13a1dcb625fccf7e4d4e2059fb89bb131e36f93ebc9ab6c58c695d5aa48d94602757c41a704802416d90e137c8a85830d7eb5a30c3dabc3606a3182468e0777ab629d90a8a44d27825e15c31af30e61e39734fa6091f32d014d7e33f96a95882b840bd7ae66a97470aa45fa5af93c44ed91a2168c96aa7cc8127003caac4303c69d3542cd86aa2cda078d1beda6d790697904d24c0f55e48c79a3f9d4c09b35520f9e7e5b0791c5db1f4f509141b8cf91acf18cef4c0b28daa7094528ee58dc4350c82782146caa8fa54657a99f0f0efd8f89812ef9c1090000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a835d922ea6e3dc40378c547ae135c62375a8bd41f3b168719cb2d4673d1ed55df8a907b9c7cc4d5931569cde72175243d297f01fb65f84cba205ac664dd9ba316d4e3a1bb4857a1376a55c7441cd4fb7f8aed62d8fdb96bd6007b0e48e4dfcd22c6b929e13bf3f8321935389378c5afcea18ce25528a4e1b53218c929fa11d36622fc6853afcbb958d03f1399ee60eda3c515676f6437e1244c3a99913b7ac729a5d3d73addfbc737b040ae673cb2da1e905b3eed4ddbb2cacefd3982bd9495f74f1c36a30754598e867a3619a98dbce8f8c21f5ee610aec3aefcc44980024bec8f0475dcfea25cfbc91c4eeb29eef563e1c6f8e503cc73a547134f296179fc2827f23d353eb44b3fbacda979650adfec025f35e7c239d341fcc58f3c35f85c3620b5da5dfec5220134df2aea3f6b55111208394af5c2f71f9d83255b58bda16d176be8ce30789fcdbd8a9dac4d51b3273258c85a97bf3fb9c5eacdf30c59dee12e02342c5a30c92ec0c237efb457879d6daf90a992af6ccc18dd83b940cfc3ff2e75c6cd9b31b0bb5bce6c838d8bc9332f13d0e6464b5452a4ed83abe491e48849dc7cca8dc6570fd99ba888cd2981a63410d3315c919296d65c0d8915be64000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093e8bded2218439909cb8f379d940ac5253398b7783bc0d6b2bb2f10e8bd19ec74a80b1b1646e8a090859fb95c39a045796b32d7136142e4c4e716d36af7281486446260705950c14000b22e0729f4245f515010ea9d0dba9a8c4cd30b67d33f167b060ed3c2d5e036812d2e4dda13c39a5ac455ab16efd8ff855b9444f90279a72ee3738cff4421c166fa961413cb9c8ecb0ab1c7276866e1a8937f507177fd3b816fd8046433ad8a31b5fa7ebc1de3e32c4e7b049827c3a17690a7a8f6edd4acdcb63502ec06fc3a8f43b55f90586e23dca086af6dbf1729afd52fb64a7e67d2ca63214592bc8a8865870e70b3b07cc360519707cd95f0a4adb50b699174acc6f8f0f43fab60d422c7990cfd0ba8c566fb4165eec92fd1f27c8416f3d0a1ba9495ddc1e4b2a03e7a3ffcd25266f4d2f48749ecab96d95edea8fbba028bf1cc5428db1385de195b897771fd3eaec365dd091fa756a129a8dce0f7587f8e343f8bfb87cc89780641b42e13130e359a42811c57b040e0d5ad4f0315cd2ce9390f39d478f3bc30e33742778086d342d18156a41397edb0207cab270ddc063f33c485c74049819baa44f00aae6c8bf7304e1941089858b67c765ee5936c108ae5a5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095413babe751db2099104b422c5652f24b986f18b45bbed183a5db4ad2f214ac2fbad6c296029b28acd07abfec8c9eae827dcda1380eb04f4a4cfb400e70ef57e370d703fba6ac3abd8937799e313f1fb36866f43043444ec86321e9a2e32fb1acdcef9d5269da6ba3171b903c8741049a91193de4db6a67e908770c200f60dd3b71d09d16d172adebb40c8e5123fc6353b4ea59301a3897ed5bd6042f4f8e087bd1f72b7d08d6ced9c10501743d17f0fa1d5a8796f7d466cc529c8fb40416cd9fb56f51870a92f193aff60b7e9b120bb19085a87d23b6ef00069d4acbe66e6fb906f09782258ca314e21e0868ccc7b3df928da999996431044c8231c18a05e73cbe995637120bed3c475f8d61c25c3356768673270c6ce8b9f48c56f5691cdc9e50e7757f32bf268bce75f4da7aa49d3d1579f38d1adc4e55d6113b3b4e9ebbe03c8d9f856ab6f169474176bdbd713a27cc15021f8a496ccd8acc2ffb792ab3c3c0c943a53a3f49784c197f5319aa8231043b4a3f2c3baddaa09bd464b77dd115d66b8fd8a280f8057bea1281238cd3b7792de76a1a4af7660c15dbce68317e209c76fecd9bab31368a7399619266a12c07cdf4f8b84bb6d1f5701ac5773a82000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081691bbfb71d397222ecd19584fb021e8ab8ef543bcd4873de95e59b0df2159bc05f43fc4ba52660d34b7a7d4ea1df645049897ac1bdb31465d200288d318da302c8ea8afd29974114c54d7001d5db7d863a36ff254faaada5d5743615241bf8312e6007f1bc74e30bf63b1d47878cc28ca90f239adf41c14d46b349c527ec4d01d7ef7963d32e1c0840c430c60574efaeab56e2ee2db19118b17e17214c74fe6dcc6c265be777b455e820eefb5a83b0840515db45054416bf8f97b54e0f25ce2e92326c1ea7e60fbdb3fbbf3e1b99ec975b39dc6226c7ab6663facb6ccce05324b66e24439dc5637990b41dea4ebd9bed58db7b96a87e3ccd8ad7d592dc8911e409ba25780bca699b76b5466798e6e004cb0af7d187d4c667c39778cb082c0d9c59044e2df4321d1b484e6b15fc948cddbbc8369c06e570319b3474dc945e1046df9cbdb2e503de2fa4ef90776e6b02e8f37cff5d1ba14ef4a56ce515d9adf96716edd5be468462c6276dd13559f53b206374acd5a037280d709865786dcfa847eadb149b63cd063f7b23e69e2939123c64f08a15878357ef8b0be306f2651590ab008d396bab9e5fe294975213a50dfb8dd87c922026640d0b42ee31e18a2b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008539c184bb89e02a7e43e024f3de8ee8ac1ca53fcdd0040653065b0d2525448c606fe690dbb1b2c86d5c6c0ee4e86b7c1ae9122f157fdfac091b2339d9654775d517d65d74adb044bc6259d9d0196e5b11268065e08dbcceaa3d26170fcc4102168a8c8aaaca8c22fc74340a797c7142b04f30597dd7805d69e77e5229d4624bd89c76793ff405ad9e0f11a4dc6c4f83af0342e0f971c1fb699e5cc52c4d56fdbc0beed39dc73206fd0dba28741ca47672dede85090dbc5304b3064708165b7f315cc39747f25142e50087be74c485aa197ca068583ca4f9e29ff9cec1fd914d8bb13731dcf20e3be6c5eb9715743d9c323c2f796b70541df5b7047a277c3323a3cb496b87e10a40e74fdf63b00770f6b0c8339ec48b55a9a2afb4f12f5b268a9d12834bf263465ee1ab6c40d8da37122826785566918bb634d9b0c1e189539026aa9e8298a8f20bec0ce15fdd5475c7b7edd2172b071f3c5a7433fbef70265a1e3c9af807ee5aa3bc4ad8a426f9a3a408e4d705ae5b194ad0721302b7be040fb78ffbb960332decb4c36f674396b498561dbe0873df81f4fba8115b77efe96ba10d7a401ab62fc755d04ab627d2a4857e63bd92124a76a8164f9eba381df304000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089fca90e2943a67735e72427558405a564f9c6d3e2b89b281d090d36a27c533ff9adf8749ecafc67e31dd7f6025e48f5f1f2990d412f01e64cf4928d6ebdbb9cfd345d079e28b8613c6ff855ff91aa98930b43e82bb544022079724fa4877e6b3d19af5ae6fc063904177589a4bd0cd67c959460b7476b57ee1741246f3e9f6e76dc7eef706b62d50a352044b9b35ef0583c7e1f60de059c7c570588cee60e36efa8af0aefc0c966ced1a97f8fc45d87f037f724da3c0e91529d59d80deb35a20abce6885b37779fc068357da070b122bb2b02af5f7554b60a578e837a725cd481998be7083de1ecc148303c34ee1c2f344b51f0d0e5023c952f6f9c95b9282a6cf38ca56d85051692f2d2339fc56e4de75dadc090e9a9600c108c065d9709ac64f6ae949bc3a63d0fc571c0c7a9f918b343abd03845539864886eaa9457202384cafa9b0420bfa41a9f54daa869c98c5c552d11404b9a4603e1d24ff2599863ed0d64806c0a2c02fe7de1e75709fec4264038a57ba70cf3ba3e12f070a56d5fd6f0767cd37ca56ff9a0b52ea65cc81ae481799ae3acc36a0e82d073593a16ed0b0a6d803e2e523da7f570bbcacbc4f34c4d5492355bd66fe1840fb919d1ceca00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009468ea6bdede648bf434f74b110e8d8dc644cf9a66091410a7e4700b8a823cd52960f50678f52fec5ece2389f83e0cd653f8976be4c6b384f45cbcdc01644a56b44297a7160ec7f0d9d8f911d676a6c66b41db233ddda14675a15122a0fcd71fad090d045778c75daf461ad2ff598eef55969439f5288f2d966e8adce1a0274314f95d8add4c503d470ad91b8af18bf6265e2eda5f27ee24139185ee1cdb65b4b7c5771a56ab0a0c78ef6e56ed8c8be3706da7ab92c887955c9bbeef16cc3f0d4c291a2dbee3944308f0f18e6a1a198747069ca653271d54db8e54b171d35ee1d5d74c8e7ff472b19e4770daf8d7bfb9d867a8e589515632175c8403cfa91e22122bf1f7debb0edcfcd26f959a909eda44866e5962bc06191f9ef938275c3f139474d769f761f0472bd52c9f84cd7a60e03c249c97443ba982b0f333aeed3db1d3e3731c74cc21098b337fe284bd1f2aef4cd7f56f59a23b7512181c253bef5a85b631c57ab3b3b771a8a3a5c81cb7f5a6e98c9ce96086fd6ad525898e42df68ebdaba0655f2b6d7803b9a7494a072b4d2fef38640ef8620494b3a657895a140edfa0f018de77d448aac7355c8f414a5abdad281d7b3c3c5f91ba01623b95f2f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001130f131bd0f015aee2cbfe4c9922c3e7b9bf848ba81de210b680c09566c6c0aef71f9bcb7be94fdc3f235cd0f474250711dbd872df9852bffa8712ef58895f1e0b52fa540ce7f83acf696025df1023159df76f94649d313486f52b1f00c6f922f07f1ea532a04bf66cdc046be1c2688a8900e1269cd9d8ac5af5397d10ac88ef9e552d0928916aabb6dc445201907b04a8cde3886c152a37cae883d47127d82b22c6144089b63eccdb9e405c7785a9545a1bd26cbae02c659ed62f2cac4e3cfc0360ed4886bea1a443e65babfe41c4736e801d37f0dedecb7f3394733a9d4e05ac05e45f02b2f7a8d5b7926600226df67c7bf10261a4d8e624a88cb16ba05f05a8ba1f1e12c94992aa32fe12be22038c1145e7b0973c212892535e7ac2e26c1ad8eb8e8299cb330a558b59393b05d4fffccb533d25264596c386291b46cc0292a36afa98f7c10cf0b7201bb2853348ac07378844b86762483cf65df3e4221ad2d640e5fb1caafde5ea6246707289864d9da2a2931eab57d7111755d5dc5ad452bb043e05121bd24bbeab076fe80cb59ba70e9a841886620c719105eeba2a5a3f9dd62ed46cdae8a1e3c7fdc5b4f08140bf42994c5a4960640962a00a1fbd46b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000278bdf89265c9f57507753bba7e9dfd0dc756688039b558f0a8c694ff831ee1e853692e3e5a0ff6fb76e5e4337af6482d4fff2bb159d0fc7905f5578f4f3323bd78c2e72f1cd70863fee366c38ffcfffe95ffe3913cf0d68c0a72be41a3807d210abac2fc812d2755e2d83cb099c3d0d3ad74a7d8532491a81959ca1f0b1928068ff538d295553a2f46a90bca67dcc44344d07c268ef690306a70994d4b79bb8cab76969306a4f549db0fa0a7c1fb0ee8b9b9449c17c59f6242d369d865a250be8818bd87d580ad04795d484639115c3414fdcdd15de6e8b2cf7525395337c2c861e68dc769db70a50f9757f1f3578633dfa05c40880c3bdf04e9e1b44dcfe53a4ac596f2c56878bed0435ed6d0cb26377a7a5e055e358c9a812a8727c865112933cac4f70cbf5eaced5f775a6f8d4b5b49c0bccd24430fea79122cb1bb7d60228a17e03f5af5bc800d74fba4b05e0f6e0bd6fb891e489c4ee2b66a7d05c2e3e33bc29da0d5aeb3466fcee36c77f2d14083bd91157c267b9ce1bd12c51e39e113d15723b9d82144aa91fb036c7f1cf5f50626f4d9cedb8e68603f13bf5a9099f3ffdd22fec54d4d1f4e48959cf8db04f7ed7b0a5e7dd7a4f2cc81ec45ecdee9100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b2efe50fee99c7edb31fd2644a005b4fea9727e8a5f5b76cca2515433a7fb56cfc6120829c05f4f95cad4137a63894be394c381993304d606d6b99a3cbf28a88620bd1d126026cbce23dd23f11a13ddc14d9b9f21da0c8e9ea728316c18e494410d132aa6fe672a7d10d0709cbe314afde9ea70be986afa52344f3934827affa4d46cdf41d550cca2de8d347e41a232d40450153ab16a558bbc9acce127ee70d4fb654f2977ac0dc2e550720bc73352f9d6bf2b891eb74811e9993441d35e72da7f9b544985191f972e2d9588d5a8e917b6cb100a79397f47c961c952df74e1e543d9bf33ca63d6e133af6ca35dfd8d5d56f786ca382ac93e0a45736274feba0c0506816e161759af8f0e75b2553ed3c04d51803d16d6b4dfad93e92bbd2b7aa8b8cfebb9650a726307c2ff2360d3dffb6d51103cba5ac318733a2fdbee621c04ba7ee2ab82b7db3f639a77203a2227883ae9ad8cd63e44a2ad9b24026703afe53147b2ca955d50a9fbe1d5ea726be5f1b4ff3f266343bf32002dae2f10156e510a7016463a6b03cd450e10c26beaf75c42179e4060fb4c67eb8c3fec68455f6da387bf400d98b1e1171d7ced265150baaa31a205ee8daf377ab677519c6b6a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d285557c7da4377ba9daede7d48e2f33f08abc598d3865e65b45ead61dded5a68e42bb40d6bbb2ca3ff9dc5d1079dc9aa5e30eba915e0e3d8cb848142d3ec05015877ca384a6df4a5947d7651914e6fda657708000c4502bc4f4875ab920769ba3ac65af0a685fd16f422100782477b62292a50c7c1c2ad5d4ffe83d94f0b853697bd4eba3a2f1033366e88b338ed4366b43128e0a45e89886484e1919c882825c6adde6bc0f0a2c84bc9807de2032a0fda85beb15779bbac2abc71f46980315a0269d986e146d9fdd91e83a3ba8d9323c80e5e84fe618a25be9237d31cad0cd8a6b37c68de7b29751de8a4cd6d067deb4f73e6a01c7e06f8d48e71b57468ada2ce982e3eed98f6cf42a22deadd4a87baeae61d91a063502326f9a2de76e310d4bb472c4ba5fe66c22360d3ab7845272a255dc223b3e5293f7e4c3cdc01b34c74e226b38a0862f73c0371fb3dff9dd4173256b1faf26d018f722606ee0aa024aecb19849702208a1ee25be5505528ddc91eff8db4947f65a1dcbf7f62bc9d7fe05b078b1ac7f61d91421cc4d087122562800afadc54e959632e681d675c6e660da88b969742436297fee2198e96f5396d5beaad5684266c0f1a1caf9cff8a8d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000853f0444c505bc782d925597ed5685d3eb41037639539cfb43f0af4184bcb643d0bca18f3259a287a18209f6d2fcade02e72fe9fd4df63e72ce4e2269deb7b9769542bc954568d1e42e5b2acc5f01a47923b9e3587f5b23080ae997931cd77bc3950c10dd2e11eb572fbfeb265bfad9d288f74b47c7a5e6733a5674c9885975d43d9d00c04b5f5ca4419435a0f973873ebc714e0414770afba98d016082ea61d35440b79e53bfcfd0298a382794ab5099406473e1ef898310d7139c76e9b23a28de645a24a5358bdf68a948332a065e8e29ad148fe1765adff9f9b576b411ca22640335be419240eba334ea2664bf8595d9f47d52c2cb0d130485894dd870bebe5a6517d0c20669f43c462b9875347439bc4b1b4c86db345ea3cdbb17d260ee35b25f64341323a2eba7d7d688d2795a69419c5532d47bac7ee28e70268c276b2622994da55d039f78d1c9985d2d1f5d25fcb40360b4fa8255c6767dcebf719ee0e2c0a3420fd0dd238ba6577917cc1514d0336efe96b87370b699af44ff2278acd52e91a0605332b569d10d41a6c2a96673efea469bee7e47e6b1e662799bc83572998cb9af16b9ace904540a5506bfe8e014bca8f3c44f210165f98c42e1d2900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b24a8d0bb78b6a813ca0491ef3771f704456430c8fa38d22ea5456f8a35c4286bfecaf1f00130323b80686c3629ebdea534d7a7ed9ea7a5eb7c6c61a96a33508dc3501183902296644f4b26d35bd47980b1fe434c768fb6df1bdd907ae85ddfa466c648dea54e7165e84ea8ce6643bb097b8fe62c71a1a0c059aadc02166133167727c61e4dae8f9052f499cb913a7409d5768ea85abd76337fcdc64f68ffe1ddad492ac4d27fba4233118446d2e22518839ff30348df41006c9b5b439485d9428dd202d57d7cdbea1239e609f6cdad72a5a723b0f534dab14e996b86a5dca494651cee1599157263eb0ca8da1ac12a7fca50aca09ac28e8f8127a8333524a1299cbd1800b4207f97aab649049ed10b3092745c98be9a74a141372f124ce9e66b44f9dddd85e15ad8e2b2896f5619de13d1730b118188b7950bb7fe1f795b64e2ead17e5d5b2818b762558972bceb0a0403c44bd0fbc7bff5165c11f1f06303cdf78ffafb8461110ffe934f6918ffdd2ee6ab001c9ca46cb56cd26203fa534403563330bbcb56705ccf116683d6047e4b829eba090dcd62e71ebbf23990fce87e74414ccbefd58496f13f35b7f860f1590dede1d030a572096f3a58f9aa40f000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b7c76c7e0cdf1a27528addfea9c94473773e973dec5c93e8c96212f848382ef62fe8fc82c7f9f1301e35601dd17858209ff4a352fd3bbb0dc5441ade592bd080467b442972024de1b81ba24430798c3caf4bc13be6cde497da59616b655b96bfe9488da38e68d3f54f3a2395f5a7593b3a8201e8087543286321d4bab80358c319ebda6289fd540a41b447dcf6b170f494a6da2ac097748e6ef16d0973673217d38d268d072b75c3fc80a109d15cfd289727b9d8a2a225e7bca0f0542801f12272058c577eeaad4d6f4f40b7c48f17e20db23247be68e6d162f516cdcbdc4eb5ba703a018b19cde6403ad35a2b4894907091828ac3a185aa6232ce7e3488c3ec1efb80e4b96771218841afaedb8801b81523d39c00fde31a72192961729198ce3b58a17f82b94d5ff56b3df9cb64a2a29d39ed4127b88e86c3fec07a21eec705c6b7346607c475e4aaed34d66ff5cb2875780a89053933827dba78a5aaaeb332f78722b72aefdfdde42fbc9b7184d91224379901dcb27f65f2fb4fa97cde7c3d3aad7431b1f03d10bf73f74b8f34a08086e87120e6fe1ce5f59dcf1bcc17f419d59f4c38ee8ee4828fe1c2eb77c7794abf55d30556c79728664889cce3bf85600000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b4840253bb0d59380fe399c3c195c7552e7e5845fb8a29ddafa229c8e4a36bb39cc891bdca2ad5df6f948c35338065608d68bdddb932b2469ab0920da019a8dab1cce1fa4902181ff616a9a890d36647f16f96685b247d47239a5e371641383943b0317f8a0b62a51dd55c3552581f1253028b884041ee6d06f41471bd2472f6f27f11cf14bbb08b47b50063cd1e71e9226c692ca3345aa66668a4d92ceafc3626ee80cd42065cee6d917e13961d7e371e95b49e8fed2c2fa78150791d841efee4873111eadc9aa221e89e816b50845f9d0ca339cc9c0323377d001d541f0fa0a06082ec7964e5de523261d5001ed50d547030b2bf755cfa56ec158c54db7247dbd4202fa371efcce1ce3de3c4abbd3cb612307b18e7d2072520b335634c284a0d84b017b70c89e2442f076a109ed91c07c7ea24887318ecd6140cda49ba781e6ed94187375db0be889527cf14ea6688651ee51ee5a40290add306833320363dc93a205c0a1753fb332cceab2aecfed496d83e9751bcd31b8779bdd85b022f21b68cd2fe8856e8016d5aae29c122ec48f79a0205c44cd4c636036cae07684283f73c6167f8fd6718856e2b14a197b7608d865f7ac7726bcd58e55968e45cd591c4a9717b17cdd1d60cd41fe5b867fc1d36ab4567185b5c6b2d0b8b00ba699c9cc75bb1e35012876be382dc1ed6c3c848cc9b182c1b67738f4136e5c3dcb76ef3d2e5c18834a98cfa93fb67e3595c52e330c61d2fbcf1c3a3ddb7b6f1a1de34b9499d600183aa235515a507af3e858d831e13f6c8f196256fdd0a54c07dcef925410090ac423403f1ddc27a4294fc73b91da227ced6e412e929cc3ea9c832700d2803b067d469eb77d82727149d892b70de9d059143b083276b388ec83854c783a474e253f8c4f9572587ddc89ecd16e6a59c7d06556a0142963c1b11298ef0f33e793183bf057d7c2d482d6562b0c8dc9fb46106af3b217b6ded56836c20f9f9c34cc07477b08b671ae7497e4324246872f05e454a0e6e0486e42bf4976325ac27d8403b29cef60e1176c15df77a975be79ff063ab5f142cb5b69dac2c3c5c3041bc70c6d85841e063d827cfe2e712af5bb6f65b62020fd9b0a4f1acb7c307833a77c00023467c23cb5f71d32129cf2a09ccc53e371835c8787676600bcb5960ad42e2ea38d8875bc401784dc23fd48dc3231c2923adfd096a1a0eb1df0ba29eecb8325b11611097ef67287d6c0bf3fafeb21eb43b5e533e66772039a885daf08d71920688c60c7c5e15c2ab0f8949568d51a00be6b36268a0bb2c490c1f2e4ab48aa2e91a1b51aca9c0fd99ffdeaec161012bd337a70d9d582525650d5462ae840630c395815276868f9391c185c6c1143aae70dcf9563a32595c73231ca228946980d421aacf1ba767c5258e0cb215894f190b6449abf4a7d88a85fadb772d2a6030efae72895ac468b66c8ff0213260c79f71d3104a01210cc722140e82412cf490b42f40dda7fcdfd51e7926aef73a2d3341da77c6ddb1b55d7bc0c87131161150df4dbc2d81ed08b3237fc3abc3208a47dc5d254ca2de6ffe75c9f0b7575ea842564979ab7fe064802c7c270a4a74bcf4bb5019766d97319f83f6c33dd9c89b12be079bfdfcb14465591a09246453d34cbeb36b5fe7218a7dc741cbc139548600d4c3e174e0a80b3c203f542d4eac17072640adec2578ae46fd83c8d159222321a41dd42cc252d3c117fb1adc2665bbd9e2de7a908bd317cedfa68b7b6a204b211674f0680941ac23358d5f0d02a19be452641c97cc50aaa378193e6210c0a22050825ac8838e1c80f41e2d6e4a9b074a95b00b84e5d72affe20328834b3d1f6100c439c8eb109a7e433eb748c46e7e4c07dc6351849611b9015554bfefa4d160df7a5719307b56e268733689c101555296e99f293cf17a4b1e9c90d4e6553f6085129ab204e81474c96330f9d2548cfbea042f0a36bbe8f7bae3e04c205e56a19defa63fcb9f0f62c46e9bab780e9af6f4820f8793cef567865d79734450b0b2c6c6cf9b6f5f43a997d0c23907487314923ff19006a579fbac35e1f1c0d98ea26e9f34e0e3b03cc9b555fe39a987e9bfcf880b129193e49e8cd2179338242c7097cb9856dd0e27256e7645304722097eccff28197757417546e5e8bcc581e6d250214f6504a263e7758123dcd6e47f8031c30a6ebcf2ef114b791915dd4aab51e7a589d7630d53fc72db4c24be075ca486dd823c9f2295be98fb5622e67772328f95080a8b9d8adaee4f2008d00d601f10e761dbbcc553350fcf700a882264f24ad2d65fd60db5a6fb375d374a00591f6c0cc4774bc2621afba35d02d771394196efc9552990cefbf0991f5bf8a63de91be127ca4bfc8200e51f3ae8fe1ff4e06f29608ec72ef3170b46e2feb08e885366840a81dc37e83ada99b46a3a205a12754b3a2dec5db79240bb80d6462dcc02812b70c0c5e49fd2484023bf9d7cc14297c6227d5d3cd11cf92eb099c64d4a94e4c2008c6f5956bf560e3abfcd2ba350b32f0a5314bb0f57fc73693e308912f42fe6790c232a76cf5e90dd238e7041c07a0252c1fb31eef007c03d1dc9217cba9ad92916e6c2184ecda54f68424c31c27d44158e94d01cac8aac5c8bf03c83563b512cd89b179e848e9ced4263e5532256d2526d743fe2b84f04c036c3c8c0bc0f3c62f75a901dee728db312bb653c12c20532bf6cd14d7ca252be65ae63574a6e5c1cb80cda42867c068ef6a65287303f80d892d67eaeedeff2df044fa305ca75f6c602d8aabac57ba3bc82974a02f0cfbea5cbdc7e7bdd63726f8564960661de0cf9815815a9d1bd9d5cbebe35a36046277b21b5448d548df32d2d0056e7a90c7e55a9192ab93827dd8b7e6108e2c400a6bbb66abde1dd2a13f3bb8d63dd2134be41e16085129757e76af7124a15c0a2bc71f5b538185ae94f5eabff2ca5afc740d3818fe7fb5841f55aa78832fdccd2bcd985f2ecf16edac1d9dae3a2490bd6cc8d101ae6b886650b0446b54671dd80e113c5ff48e90a5ac646879ea486eb412100b3c5c7a3598e148f335f10d6c4d006c0fa92b29be98dde5034cf31aedf7ba232cf374f625103cbcb03bae3d76780367bdfa6d69b4692aae0d37454d668f53ae19c23bc8ee7ba5f960a0ea183ae61e4142e4a10b1ae40d9841b270f1e4914ff89778f3b6416125cc252b4b9ab9a70e155fd43d6e9e02f022f79ebab8e783bea41057d14896878084149e7b63d3ce0ba74993f0a635b20bac27adc26781a2d69d46636b0ba94cdc643d5e18125cee01ae6f393c902ac2a71fa524edfa507ac1c9e677d1845fe350d7fd7a95fac246214b4de05f5884af22b66908df3c218eb2968ca5acf8378ec1e9a56049949ddb1e6bc15018f10897516411349a4af074be068788cdc45df568eff24b233d3f920c585fcdf8149ed74bf6f7e63ee78396e7783b0d81b748aa1cd4ef9ffe3d713b01be48e0e797d5011c9c3ccb494bd59fc7adb217ee59e13baf1ebd353a50cb25175ff48c61952b2c7c693d1ddf610bedc66ed677170dc03f1e0b744d5d4021820f4877925d750567f6856b13ecf0a649528ee0369b43e20bc19eb805feb69c8f07f8129e0a39ba4c36275f41c127b0069550023e5a812bfb20f45d79d718105416a7c059002a2247108b26cbd426ce070ffaa757107bea21c2d2545f4ef804d90020d2e30dc8c8eaf093909d9568d0ce67fd87928674bcb88e7d862d5014fc832fc06dcb26888742f280bc87170e2d4ce4d30d09a286137f6b17ca508bab2309029bdf6e2b85ff1c1b7214baead62d3fe992429384f73c400eae2a35607cdab3117627f621bb5da82a9d726ed05a57453c6ee5cff5e84c1952d7f27d35481bf504df5799323feadb9c883510a62d1be2a826929f08142c2fb12b53f41f14e89e2ae8f56fc1e2a4fea9974d01e3f1304e15f5895b56d781bc206d04bdd0dd81471bbfcd372dc89827985748057aa63d43ef908a6c01ebdb475e3482e5b0145a722a4040c8c5e4aaa961251e2f6975fe7241632981868ca98c247e245987d8d53525b15fdccce5b296491c398fcb9cfca6b976a79007ee8bfe94294e35cc2c15190ba8afd065508bb7588442fdb087ec65145e6e90b7a24c5343786e6af4fd69ff1ef3caec6806da95bd4a449b3da3110a572f268a43a07f6c01157dee8529034e12bd567b50f96f2daa4fca5a6b3d1bf75449616d51726559cc3ac1a196821b691c9a545c756351732bfabdaa11f3065c5bcebe291c3a16d5fe51eab81f840702287fce9c0364e79aedfe1a2bf1af66eff2ef86f596cde60f0e61f919095e09050379ffe350bbf9d7639f641583ae70234f5afe3c6b631599e029f90d25b0a6441099c325fa91b57977ce06883f2ed9a2e7f4aa2b283d5502487f0448434c4e870a9508e147e7e47329963bc98c1bfe0b3f60ea68f8d37588f801a7655abafea800db370ca4e576568aab5c16fd7be30900a626a3d810e2bc48a4e6f0e88954e50290d80f35ac891f0424ed0f1dfd9130ccc7ce5ca6c199c410d49069f6714b1f264c8405962d50b25157b5574a0616a99be81a201874d488b840568ac1f02b22063384aaadbe599ac4fa752843e813a77ffe8c2e555604dcfa43b33d1987461c3001c8d4b3a74580841a7fe94258146b724a8523e7366f5b98b9a1b9a23fcf4f2a49cce606226a5f20365fbe66bb267ccb5fc2f9850da45752cc7f98bbdfb36f11837277173031b95e2361ea35eaab6a46fb812199947bf0218e2795915529a41a99f50a1d56672ffcaa0cdbc63d8fdb8626807f2c9cb858d62ce4fc3ddf62300d4b54723b0b85387140c5a1ff46be27ef36b2ba8a6affb0bc7f1d1b31fe4afb1d2f2298257728ff2a51906c5be4a2cee03b7b76017d45f8a428f00a3cae75d10c076fcf45d536ffb53c3e6bae420ded52402eb047c025d9d436a6a23e747b530db26dc42aacc789f81f99518d3fdea4933b115ad687e3e82013c9fa90e983f5100cc827ea699464556387120c2b01ce554e9c5e05f8f778089d19fa1764a8980c93b94dd59e3ef448b64e214649f23a2472cbb493d877176ec7a21380900a921afc491c8b74415fc212b570abceab2fd0791dd31b6f562b17f95ed931bacd501527dc0325b6cf135a462328589e663caf78f47f3e3df8a9e6630d35abf54d1c301299cbbcb943d62633924b3a056780c3405f9e439509533e00d01dba6449e70f4f168f1d4fc58cc3381357d268f51564f237b3c4d2124ddf8128faba7453df11ec648f6171ee00eb739e6fd531d51ae98aafe31211e7d372d83259748d68d82c0d15e9aa6564b71bd4fe36a7fa222b26ebbac57d85e082459ebef1f9a7cc9c1d9d1d74b0c665809d9a27003d8b6074121c2b86e5869fd6a603614e6902647e0b1748698601d734de3c487c26934063518e50a1dd6856e7cbea34446c7f704c0f16e3e822d05ee1a558e638c5a25c522db41f42a3948c7dcdba6ca4acb14aab07a3891e23144aac6b57cd2578f3964d8da2613b9725e9520324c7f7854c9fe60bb0fa8067efec2f70499c5640c5a20a668559a029829d5f9c7ffcdbaa69a12e0db79005b3379072a1d434a8b55493e971c544c08675cda30483ec8b072af0bf03f9c02031ffb1a8b7998b4611eecb84ec9231a4f9042fc0d9156abd9b3757c32a438daa1d0faa478424b2c90f96b236b42b04ceb4b3c2e52384c79b27978a1e29e97e14fb5ea615c09adf829bcbebfde4fc7895c804ceaaf8dfa9a288395166003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000053118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000530d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000530a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000530b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000005329a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000053141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000005325e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000005312978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000532daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000053189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000531159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000005305ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000005305c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000005314d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000005303db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000532ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000531213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000531ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000005314fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000532b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000053305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000053280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000053223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000005317a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000005308858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000532618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000530f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000530e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000053172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000530b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000005305bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000053137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000532e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000532297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000532608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000005318373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000530422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000053204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000530afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000531998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000005328d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000531da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000005321d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000530ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000530e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000053107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000532f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000005309726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000005324f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000005303c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000531fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000053205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000005325110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000053283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000005321cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000053094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000530c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000531f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000532421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000531fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000531bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000053304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000053000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a3045522943880eefc7ce7a40a939544052bb49a6ac094e49c3ab08396b2c00493443666358ab3e1a6bf9ff02fcb5e7979386343b99ad8b0dffb8a07fb8a5a15a02632e54a621c8ee2043103adf1485825a5e87eacf469f4e57da2bf361920cea9bbcd55600f72492e9590d80d5781aaaf1bcb8e528067ef84341182c91354966c147db0054ca5d8e730bf8f7d4323ef2ee486877ab92e83d2e6570a5c17fbead975f99b860b8737ff175deff0e59724a87021af9fd5dd0bd164e55090f5b5d7423ac531213f77dc3a171f2cb232e2b427cf4b416d9a7098cf18c894d9427242809e12a63960408631a624f11c42ebb39ae2837ed1127b28f5613812c109c5ed91713978b87c97e5c775f1c61794dbe1d35f5cf703f343744d554b9f4ca63dfb1138f336cd15bea7fbb45613c025eb8b25abce9ce8ff7997d20641bc8526d02eb1780cf8ee1b0449cbc18bafd9767a753491fb77aaa416751afbe38b5f99c743bcc05c120b2f3f11049e869881521c0cf76c5a94650413a78ada02393ee3b019039c37357fc3d818fbada4c0e724a5cbb791e44b00ec66ee93db3ae5fdcb7b6537b9439bea9f7e4c9c440e605b2e0bddb32b42da288a3584d8dc20ea4e260e5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021505d48ca426e8a22067afb9a2c7e00142dca37364f058abf538e52d9234f8b522698e9e23a10ad62d44ccf66f8c60c9ce160f89016539611ce6bc52c625dfa0f2a6366ed4afb8bccb8fbb6425f1d5b26ce00b1127bbe81d4e10e0055ae52329e5ae17504fca30993c203db93c6f5323495f182037175ea549e192363bb5436501029e504b04ea2c164b4c65f486bd7cfb80c9544100343224e2c9428d52961434f36d20d6507daf114c956911e17979b3b5f5e40280d813b8146cde3e36a9aea210914114b0ef0676208bd8271ec6dafade02bc3585d2c41dabc6ab4bdc23941a515b811ed5e2f8eace8efb8da3df3802e73cbef0a0240dc4f46d374f94fce4a11829aaed298c95c9cbef38dcadfa97b6c3c11d88fde8e6349bf40b117b441b526ea6eda6278d572d785d1ede072cb72ad6c2b6290eafec58a577e5e5a333fcbf01c287ac9e7a76644ad98bc852d8e7c7363b6fef1bed811dbed5e2cfe9accb2fbb921b6e94b85df2fb362362a587196e858e8fcff18ae8268cdb46e4995586d0f706c437a72059bb35cc809d1a658310004df861eb6a744dfcac15c51f263ab65895d70d0300fdd9ff83a56259414eb3899661e2177fea735e339e084e9d600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a582730be5e71e214a3408e0ca12f28cfc6071bd62b610ab429f7e75acdf3696f9439d5200d9f88da9974f60c78c68f91569e4a38147805722ee32083d9ec78abbbfa6630f891cd7a17b50d85af90306882cfa62f02b4e8c6cf28b672e1d8465d545de1a679de7297c640037b87fe21364f8f223c040297ee368176f3f070840a34dd070b9067dffaf1c82b79b4454a135ce4223dc4484220248115b647cfff030bb7b5ddf217f323761d64eb23870ac33c3a950059a656a38cebe595361dda570ce76d4875f6ce17168bc2eb92666826aede2ee0f77446b6f0009f1a1733c061a26cfcc37af86650c9a2806b7652070c0f40e1f501b9ae24c0d902388d60efbacba0df39891ce8c28aa8cdf8508f5e4dca27ccf85b9b677b4575d50aa89bbe8b489482762be5b1223cd5db760f6606b1b3079897d7698e79be84a59f11d351949fbfc4812492bd8aa8bce2e3d3bc1e96dc28d189f2588904e97b09ae18f125a0b7d1642dc653270aefe4f393acbc29095244f45cb7d6d457acd6e072765dc4823b1076e5f67b1b951e96b66ba59fe6fc402ad660a5f281b0d62c01fca23839f6e6be79766901165e0417ed424864d350d6516bf7e1048670942e26420b3bb40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af4fac173278799eeee10435ca0c1212f11d465d8789a146cb8d85007440ae83bc5c3ce7f6dd47f725a2daa2512a864d0e67ba5184c52fa43b302e73f856ea74300cd54276f544f4e7d5e1c597ad39182a1b09a938c437c436b6fb196d5b714b5f2f36fa9f26d7bb5ac3aa58f67a63adc1f877169a7da183a0d9df848e72ded8a33fd1d99c599069a1d6dd8ff81a6c84226fb7a6270ed34f2188b2cdb26a4b4eaa2a031b3ec31df12ea578c742b80dceeb710ace767ec6fb225520af58cec4d36223d5d7f1328e423c5b3bccacce360ddbc24a39130db99c4445ad3194c99045a8d1b48ffee101d37300487cc10fa3a9ac18a6fb58eccf29d18c75f97bfbc2fcd0cb92b54a4540f1e2f48333d068148f998d7bee5050af23680076ec2cc04497ddc9ad42250e31e2160b46050d581c77a6bb23f490a5354600d67203526277b89ca3c0457fab374c01654b596a838f2e6fc5680a96388f2423c0d18e464b4f324f275dcb177e8608c5a4a67f118e25b439c1f8dd43e61139287900b65e5ca871d2552523169a4ed02670ce7653ccb73495d2a912d6fda2d715c51646bbcaa3b128a492ca07b22b9e0ac4992e508cc189a833efbd7efd4c6bb0e23cbacb2d029b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002eeb9cdd7be5c3509ea89b256e756cfce8e117b8a073efbc71e0f3ef83bf75187c758cd88e9af40949b7251ced0084efbf4acfee12db3f348566067aa961cba1b57177ac73c94ddb570cbd5fe60e744605dc0d0d5b9a2a487f998c5bd947328907730842552796e89299c6f93500f3cbf2383ed504e8fc70d8e359d1b649844e530b8539220ab0c6467094ca2cf08fac69519b969a88e03ae4d1b5eee25543c5d326c3c55d546b3282a6c8661f1aee9ede07aa83d94cd7fa2e748f917ead0ca501b255a94d06646de8496112cca0dba2527321d300bd4645d0325fd127e826b37e08700f8137df369aa2b3c373be3a7b4fb4b79282bc06fc8db50dc81000f1a1cb0449e791df4787b6dc03e33138b4a3638c1558693bdcf01778b95fc3ce911ae795a5a5b7db36ebc94efdfc394d11eaf35d36f9c400a09a8e7c70104012e5e435ad8398fa36dbd28b8268cfb223a6d514f7e9e8bbf299fb4ad06277fbb071a06f76fe70efc9a2975d5555b1e826be2c7b6451f064f9fef03b2cf39e380daf2f786c63c908127c07460f3780bffe82a7525c5006e7a5b9c8f65859493d04724c4fa3319c1bd4116c2aebbae5550350e9db49ba0506eb69e3f09cc3231e9e7ee400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d1892d9f0a9550def00418ede8a9705ccef04e0e0eec38e81058c70a200fe5bc8cf1c69a7ca678cc2522ad9b5ee607a7a9d86198f46d06167335aeca1bd26d52989f757bf5c57ec428c0371d5a59f73e0f1744b2ae518ba799ebcaf8ee2b08a65960ec57fa1da976c5eb184aedfce008d39cd8c4c4275c77234fe1de2a7616062031eac369ffe02344fbacd424980cbc27776c8f09b0ff7ee88481dae2807fdd8efc279c7cf959b3630e369342a49afea6a6c8b8c00fbb4c17f60f3edc9468895bd9f43d9acfcff8f5da88ff66df1fc635a36ede415bb89788a377600d186102f02b61ac6e97a155d23e4d486b522530784e164fa40096cd83225e5a52825fb8047a56abe800557c2282c8c9ad966ec9e06643f82b53155af49d9ed91f37e9937622d49e6fd0df226846e9b2789010bc4fd0f0c01847adf35ec77e1935d17c0ddad903126bb8ee69ca724af1b971bd6790e0a8413d351a0b339b187752e35d72aba2be210aa1d7c3800fe8728ec5038f315a85df93e3461f385eb2b8f6e3438f7af04cef80d0587f2e72364ad6df25a758a9ff392345cd0d8b507cc0fc68124f63da01f0e3e64e41b10cb86909278a3ee12331de83ca8d13b08d0ac0a0bccaa00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bafd51ca9148167ec47692bb95ce6ad6955ee7e68c62bb03bb97935dbb8eb4664e79adc1d4e510ee57d391ae374794318444bd08f37840425025cd893391ffa6de62b248db7180df26c96e0f871582e29c0a3ec36c4fc51767d8ae524eb68fa682670cab83063c1d8422697047e3659e8ee906f4c3e7fa4e48689ab6f023cf7fbcfae47aba9d1e779815e5160b09bbf1dfd00c7a4139e9a64e963357d44ee73389bf7c1d98f81be60cb8877002cf2fd6d721e0725a2ea869ceaa81dff27c0dbc651f05d5ef55d7dd4342186901fcd3c8261a3c010d6429079d5b724c9c35bf9cd051e66bde4a31d57e919889a61b2849d6ac2ebdab4fa4b64f73e4a47c1dbb47f0783a045bac267b53c9c318b716e6f266060f4a6cad508e743c792bd11d6850624184430c98834134346fd6f5a8a69584dbc5198ce17a259010f981184e82f6d527cc35accc210dcef32c194eb282afe3d4cd88fd483f1aa111e1ad094ade6eb7b0d3bfac3cb2a13c8393be54dc26f963966d8ac444c925cddedb52f5be0aaee7d49550e36cd0fb74bfb55e842e6af28bc888b4e1c40a1f9983f1642b1a6ef4563f34b3b5d4dd66cf72b13554582550d10ccc86281fd1d08bead7a6e89824b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086f8cc62efd2cabaff1b49913228880e638e7a0d5720f5d7156f709b9212d97f0f6f52df5ee372bc294bc8c33ea9cecdd415de0ca62b0fd22b53f83f4b92dbfe495f6f9b5add4076456118482c90d7338ba148cb7e4aee77910884e9b1cd2e43b22f6eaa3ed97c42c9918504d5a38a1a46c9d0cc71a03b96f735f1e06f5388c28bfaa357a302ae78e08b5deca37fb3e89f221ec0dc465220bf642b90ff4fe05043506a980f8d6933a926066dcb19f6420d5084f82033a00759788257f1c5ec2150beba2c40503ae9d2bae82747c56105d56d950cc26b4a53ff3fb4bc58d818efa471520a8e27dda45a2f1d43c79766777f63c49741ca92764d2c65193df31a124464a98e3fd800682f8163c39bfff46b0a3fa0b1bc4e2c87b477fa3f878aea6882b61157905579f401dbe6656655abdfd5e3f2ca915cb80276fe0f9132dce4ce4387515fe3c280fc1ccd77a63f07f172df2b24f1ec5ce6ad09c32a48b6ed179811dbc00c906fb30bbb023bbf3bbae4e1baf41bedb285c4d4a86b1cdda03e5fc4a168cbb47dcc44646a87200f10a0c722bbdbdf18365a1e53d195bf059ccb4fc6b0df318284e1a9d0027bfa4e6138e6d24e49ddfd6bb5f2968141cc76082c3e4600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0c098f1bd1ba110ea380c45df0c982898da2664f555ca208b1d09337b52ed02e816d01b30b7ca8b27d46db5c271539eee6cd66241075c4a1020262168e84ab43189ce27a0f657a753a6704cd0370c9cca25ca4c9ee6528ae2738d90f35f8ad4f9a2534af58cab7590c176b8704115f949a9eca9682d2d23d6ffc6722619aea92940c7e1f5f82fbdf6ad3eb76b9cebeaef8208bfd5741464ce3d074bdcf3f53c398747e07670521ee09cbcda9ec8fcfa8afc64181e551a7c954d42aa05ec3a23f4c3255417d9b4166b27dd2da3cbc050e70f53e3ef7fd045b5ef9c55284dd5997b6fe795cfacaa00d2b0a92131ddeb7daf982d3c31047b52a9c7814c9aad994823e7090de1586bf60108e87ab8b12e561aad433cd41a9d8e3d5209b6b953b559ff0bd48322968d8429fc0d9017bc2529a4372e32f14f8dcf6d96e3918887ff4ec481cc50abb64d57581b302fbde37714a52d4f11191ee404c97a0fe4096c5c29220efcf21fae7b2931aadcd7ba15fc5fb5a7c520c095c6454167750c1fadea1e06171afcee58fe769b57cdba10fab32f8d7412e338b9e25bc5503e553d1fbe2342fb8b5323e6d854e6a52600a674d32366b5942836de0a20ada355b5a236f100000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000068000910acb1bde85ab96966af0a2f772fd856f06a942ce593ab4d0c00976e196899c1377603826287a2fa79a5d589b19401f90ab3ae4d495e2fb88c44c694d1f4bacb42dc9c6b5e9a72baabfe5d8d0dd1c0b7a2e2c738a6e400c4c1f29f6d709278642761fad011431a247c1175a1b07a44872448abb0d94332a84fc1bdaa85d6e017871d97d6e0b3c0c94076aea4d42d590200cff9568129e48f709d69c68dfcf8759cddbd928fc263d237a0232de4e0123008dcb7c546cc00536e2212e4c4ab8a82dd375ed7287b649dd6ef12a74d955649475c3652bc73234cfb964ca464845844184cf1efe7e532387a328e9b731db73b7648053dfcb01ebc7bb4a5636864b7b903d44c82fa35eb474e9a272c967dfc70c9d3d395ee4ba0d8c0940f3e5e7bc6e2fbe9aec7b5384782cd6459c71fc35068eca3d6d65a69afdea71b19e9d0f8df29774f7e02a6aa317bb78579541bd5141a99ce9663c754d535d38986d2b845214d672b3894ec71ddf4f8c37be75f21f3ebc76cc978b2e05526300cc2c4ca820837eb82a6440777611220ec97057dbe150d67973f40356561321fe2e7fa26fba3ba55786d0bfa2820d6067c09381e8d69a22923faedc34eedc079c64befa0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000249b2b478a21cceacdceb954e547b93bdb2f468bbba4cced65592c2e0117348d041863740d2072972c6022adcf7921c9bc5032eb26477aacadcf546ec2c0224f4865af58116d26f1f3dd2b6b6faf2c45821f0cd6df5031610db76c9067bf37c3f0c6870fd58eea82bba3aff8a3ea47575fe86e2311ea66d6d70b5f3704d35f8a49f18240877da8b70e14caa78067ac0c85bd6378d74d5f5732936fd90adb67070ec7790e0e7ee614b06db7c74e54b7e00631f7c384edc6b6b5b3ca01a294fdbc774bd642f86ecd403d141c5ea7d41211b0a8e0a004298e8a143310c95d54b34390c8a2c4ab2e34d0f1e722e95c459069434e288cbccc69ce7405d0b9fc8611481078f2ea20e51df58914efd1315b7f0f70cda033f0b4d274bc4ea22cd552619a97b65edd2b4c683df9900b7c5c914bf01463b4d077567356339d0ba84e0be1e37fa25fd9cf387e172638b54316bc308e7b17361adf83ad542aedb1ba72e878c4fd6810929764e1f5097fdd1fa576eb6bce6382f01813c7375ccdf003d99f5f0a0a9d2572253512bd475cb4fbb14a0a586fcce9d4b23a07eeec066bf14e4821291cbfef9121bd58a8c18718a32799e01333537c73ae18c33327a6542c8bdabe8b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e1145b1d9841a0c221a5996d2b4bb62c304db8823f0142233c8388ff0be0fb7ba3254920656b7e177bda0f0f4225c305df9919cb09d5362322c43032579fe9c1b0162b7464a6308ea19471667b70996b87b5bb5cfe78e568e1d47a3d70e88246b6d7116b013ba95ef3da7e1a3df2e551220d08537aceacfde4b8cc4927a17cfcdb13b498307b185a576ef05ac244b932a236d23c04e950a54ea975a8bd994263cef759b54757129b2fb56b3fa205e7c5c4fbe83b9e2917e2026a1bf0a889a97ad0089ca3483d92bba162702d8f376d69e8968d25f6cbb103ce6ec3609641fa9886e4ee79c4c2ff07d9f0963752e7459d8b61710537d993d26f08aeb782a9e892373c832da492a7d1d261e6bbd74760873729c27101df9c9b4c316ff38d2854656d5b47e2a859dabcc610e5dffa0e57b83b71f7706e6b5876e62451de1b86d711b7ab0cbcc3fa10b14126ef842af079bf4fcb5fdc96d5c31547efd45bb4c2e2cb39dfc465c074431d02b249d545bf9702c2bd839b9b553c2a1bec158d1ee40138686c3eb6df06e5747589e7b701a5c803693ff13bbf6a82294f746fa7e4e889c6c3cb9c46a4dc9b980e0cd534363bf81ebe1b01d7840de6b0d0639c343046f0f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017f749526d98a34c69c36bba605236024671ca2291e0791e17f044e40bc05cec43dc4a58ae878a2de780892ac8c7bdb51ae96eb2920fb0fc29eff2cb519ddc0029a105f370e60255fdce04417af04d5168a7f1e00de0186c954e358db5e60a4e7ca6bbc6311fcc8662bcd8d2a4c08fbf029ce1ba49c903aef34a3883791fd870ad5338a4593cdb2f009a61b3cc887669e8dc8455e91658bff47cc6608e729ddc08865be98589596841cdf220517a6cf413d3e61fbbe0c672b394b92d4aef3bcef941e20dc65f5e4992cc33450a07a65e201a7fe8fd57e2f6b714e08cc21b1252ec005eb49abacf9c6291daba64ee94b7f263548120628cef17db4bab61d85701ce6e63ee766586473602e384298b182e00490dbd68072ad772bf94e4e39431b48afdebb363479b4c3a165fceb1746a9b035b5e0ded27122450f39cccc3096148042cbe8d0f4f447c2c88c9d03c8d9bffe71f75192d2f05d4b2b31a2c251e5ced184ba2cfcc0763f09de9fb60e155ac1802496a10d20cd520c299baa3225bd39ed39f32358a82cbc2bd22e02f0ef16014dfeab0dd63dc784616c65a3a6b1821d4065e981f08969a4d898dde6a25d17ecaae83ad2cdc2de272106e52cf8ba4430700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008dc0d8b040c08f9dfc999d3c4949c21f35c7e6980deb14039b869c93b97b48c0cfbee0e47d36752575a31948a4e30ee854a99fad4cc0f7ec18de407c3ed48f9f12e9abf88dae169b7801868adef8cf34f1948829afac451b77ca5a43f2c812152e2243eb9b6c60356a63e5c4cdecb3da2d7cc0fd4acf8db64f9f04279d9fd3e7a7dfdfa69db23be3453e2c63442d7009eba1b96847e19cac7304757d5d57fb0ded6562a45ad8fa923e5f1307da50a65250f30b6c39cd091034b0e953d72ae0ce56c5162faf26614fee09809445285d537d4e7ce439f01bc59d615727265bb4b91799ff41c5708e78b4dc0bf983b8ecdc82d8aa80667b3b3caad11cfd9275a6ef3b9bc5610069fc4dc9b60665d10d48fc694c0377a623b90215f21c046e6b14d51716b6b6e615ed4d7cab445e8a4f34fb01396d15930c28905e4aa99faaa35412d9b36beb3519e886e212610ec939a9df91d52dcef703c1d6671e3341896ff5254b9aa94344dbaf362e294eed093775afa4a4b8c874be94f2a1e566fad5b8c995c7d8c001dc30e177448a46f37fda099ffb0d10caa0949e7c5e46bc5a9beed299cd0dc09f8d534bcfd13fb24e76b77579b743a5604844068230f551df97fc95ee0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a99bc5e1116ed467fb612f9d5edd68df70680d48cf5de894913f34c9dd56955b9f0b722af82d8d95fc81547560a81dcb31c2ab78e680a0c8bb399bc55a296dd27b3a0ade7b305c24475c41e13d731a6165384108ff19f7f2215a4c10e6224532d6297be6e36e358c958a8eb90f8a7e1e8623be92177378834156f5237415a11ff7d8dca5f923c5e033ddf93ef7b111e7ed5eb4ea31814d91be60c47307960f655d31eaa6facb135ebd252d930438a1398372ebf32d091af27eac1ee3f5e612457f762c78e6ebc19b0738a1ce195ba649f651ce3bd78bdd0ef80b720d6a1a0095fe59f8d2e7641fba5656dfb3cc9eed23fb9b4507d6fd99b8cdceafddeadd6507dcb3bae99519bb986db1099af723f8c54524190289170ebc109ceef33bd4a2935d8422942d17a2a8c389187e10073c09c2bf219ec70593f26283af1db906f39695c9802219e7bbd511fbabc60c275476cf5a46950b083bd547b5d848658fa53ca9362f2873f70431c05d729ace1043476010bb9c81fce5149b1f19f63f56c0463a39cd7764c4c7524702fca633299d191b3291ec7a700d1067805b9c033b0781fb446c3523d82c0eb854c962dc0ff694e42a088adcf5f9e81e2803638b20960400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dbae0ea43d52f2edc927605cdf616a1db18e257a145f3643dd17415cc7a3383b748a7acdd36727907b024e0b86ae78f24fa1b20d15711867a10c4970f6a67999c519863fec1efebfd431f572a272edcf92736c775fb4254c6f9cc4796cd6a08139cc7452d0803b09d435beb75aaf5b5dcbc8f0b63bfbdaf6a4fd6c9b3fc9959ab0ca249a1b9a26587d0f2b9dea32d8a1611234aefc0ce16962c9f890d63a7ebdf443e3129674f56a61fb44f28bacd4df447e80404b746b4805b2c47cfee4e8991ff37249339162826d0fdc43725133dbc2b83f96430490bcb2457fbf74f008663c1f2d8b91eb574074e897a1f4949eb4c4b4e55726c03ec35617158e3ded5b5ba081ff2ca7c74e3cf53619675f90c2e854c974791f960a50bd3a8e5c1610a9fd3feeb3c88ceff7b657b5ebcb6d64acb2f7bd80653c70e998ff16ee7ac28f60cc5dc5c79a4e799f52faeeb8ab075527cc28173f3c16a2828a5423e4091bfc251a5092a34ffc451a0e707ceb385509843042552ca49e46c0532162f81d6a3dbd8f39957b5f99cf8761849e479209a240bc57348a08e16ad17311f768971c265af4499ad8e8cea835cfcc0d9b247aeb3c34dbc9757c2181c30a02676afcbe0a8b700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bd9a0cf0506dcf90151e77a30e255db1ad5d85cb0d608a3d26d81437c83854eb6cd7c0ea0e0907405116da8fd897920f2093ff77e07fa9467f10c2412c0f64f5e7c04a3563bfb5c7414da59974e3a3a71cfd416861a401e25c63ca0593e8fd06afdc450bf766d0c6d1a82b6260221cc5eba5d59e302bcc4821fba7893fbc9853014c8171b93a5e51fb013c9fd687ba5d2a54fcc0b0f4ae58628fb92fc674556b48d5d8f7d27d477bbda3008b05ef195d5ba56142792f6d1439f33c4721b5ab6cf301dcf81da5a163336fcb25e2d21d9dad97d40fcf0da56ce9dbbfb78d1d05b10c142f5dc8e433ac56f79781641ea6ca5b14184aed6edf30f4e61432842f358bfc4fce8f9233a9e64d2a97e16c164011b5384d237d612f935b8f5c2edfa473f3afbd0e4a1759b0cca88ce9d7c1c47d2c5b19ffa6842b491122e89d3c8866e20d755b5b487973d2e0e702513ba4d10de0766f2e0547e39cf5396ddbfdeb95b9bdabb3f5f1a6a7758a01f4ea862bdeecd7549d1bceaf88166ccc48314d115094f4870bd301194ffc83dc9357e11f4836a2903878716ea864c6b49f304ee5f7e2f968f48f51a855c6073083e0777b5e627ce018ab6b7f55d9e465aa88c0f8fd108000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f69c8821cf6e6922f41b7f1d2c0e191415054b6c1752df321ea7d9faddc8476a54682cbdc75c9d7a2ffe775374d5eb5b56696e4cedd68705f3a88860260683100f00c41409ff0e006d57104c01485832d38995907d100aff8cb13f6e6aaca4af39f2edd20c6cccbf898a92899b471be3f7a1d81e33369c3bcb396edcb94995edf4dc0e940b139562ae13047930eb4db92dea4592d487f6ce4bc45f655e6a34915d3869f76207c5efe0a94e1c1120decffd774e82048b1f73eb3316214154bc7e0bd75bc3ce8fdc738344ecf4f078f549f9b7441090c01bbba4c20d15ac22271b4a6a28ee5714114649bca5a1b97d98c17127059c6f0767e62be0e73eb31dccb6479ea67f08d3e5f167825159cd1fcb0f7724eaf6e66bc1040a7784f00e5ebba5b031391fcdd780eef8cc6c0a9d9bded9f78413d90778e31a84193bf7c9edcd011e54b07cb001d464f60342bf3599955781be81ba2f1127e5e2d0c12059700ef141bf5749f5c8423a6a3fc0ede9f38e2e0e7579ac6295f70660347c31e176d2e0adaf45640bdd28831e10509a3b0cf5965cc1e1773447801da0b8dc0b67f857ef8d0fcdf9c2468416d68e2e12947290eec9572b9e61bd012a111a0de488f03f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cdeff9c4fbe894f79caf732bf34e86c97c046149b392f24ab9dababd266dfe15823c4dd6f45974d4e03aa38f804f757668367afb07452f117b18554a66050b8a74343bf99cf75c17c445e97099500183be171cd4639fe6a31e8ee40321fb3e44da0e57a18eb63974e6d1cc5afd79ce3b63c35e410a0270f890f1f01330c6e68682a2fa9a858e4de7e30913c01ff19356d2c4ff3695edc94648b1ff9978d75e3e843f182214a9083f36795485a065d9fea76379a002fa942a70bb08e43d36aceafdb88ec0aa7484248af2b54b6ec57851ad13fa4a3ab211c97c8feab49df52528b51d0f537a22c43155615e34aece79ccd072a4c3ddd9928c517ff285ece74685993b886746c676df5efac685630e0231e0feac12114185e8262d011e4035d7f949f0d8e15308ea05352192e10a471c770d2e5fa8e681fb52f9924393e43a9c0410a74f8b42e84b11c066b75666f3f950f18924d3e58c3e6349c38300ec66a8a58224260f90fe6445446080105a83bcb962555f0dbe129dbc4ac700f48e5556f5828bba77f3a6e7f6ec4c73043d5fa2d70e770821133d05a1fd7fce4159c40fd17ab79c2afe071b894432c35d3cd6ceff36ec9862a3f8d0307c137903764b6790000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0add83e7dd7f2281cd8b5c493239cfe659cc47184db932520068dc388df50a1beff8c315ab68a9330e7cab5f353dd65808123f407e03ac09a43892f39833d84d79807a550ee40b9de1589b0fd8d6544cbecba1d799b6debae5e765c4b5b42798ebb67f423f3e6a93d12b109dea318b5ea8484a69845de925608e2b050445d6035f9eda3a4c9c59950500c24ad79941c3a57dbea5ef2e2ed0477681d1391b1d1e14b49dc2e9f0a3758ada74644ef0f968b893345a9ec6dc5fe4fb64231533fa348406bb2a183126f2018a6b2dea3165cacda1fd9dfa1dabf5273434a006248d6f03d0ff4622da9a5b8304590c8a9bcd2660d89d39b6fbaf8809eca84851a0d4885931b0d3dd8debaa81ccdd0df5cc8e645b6e7a4f24f91a40b9e03de52e578d467ec272ca9fb5691b1083215a5f38bf26bc80966eca01f9c31923a00eb123c990c9ea53a773f00ee7f107d946275fc3c5abfb694535b7f375da50d8e8b73a58d21839642815ba5b96b1271b36b8d9087ed8fa4b41d6714fe8d4915c830f877d5ce0bdafbeb45a8544ec76f34242db340ca8ccc8792d80f24976185759d238eaead06661c16eed4c48ac5b357cee89d5f74ec0bfba2004618667da1228924bc84000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027aa6713ab3ef2f5ada24f10b4c1cd9bfffffec5975607e256ef60b92fc1e824ec783ed8a08f7cfb48693eb2c4bbb94499dd06222a596e1c829c7eaa303b0338b1fd5216051b3151eefa447abfdfaa06afc7114f2fc0d031f3f81006faa85676366f5df1cca150202994ca863fc10a166278f81e42d2936f388109be000983ca513a27acdd4cbddfc4debde6946de8bf5f4daeb507a8b4fe25cfddc20208489019b59786ecff4ff23199e2752cb5b670c8130d14862796a3f8f0584e4ddff448f99e071b4ca2b853e6b8ac3ab872bd7216d4de7168cc3284e7bcac04bba8e3b533bc7973c9102a4ee1445a54ca01d9e6bd8f98997714ccc643a66cdc201f2d60fd78e7540b77cde7299fef0b7acaf74b3898861faf97cc483e148e6236a818c7efce87db0852f5ee5d0f3b0ece2549abff835e436bf96c44de9cec87bf0977a76355b5734279847f54d92a079d6c5e3f58703968c7a6dba7a9384b09d9983a4062695cfb243ba5edd11bf54008154dffc127f05a2f4bfb655b7dc3e015566ffee8bda6f6a318a04df8d0f7299f772e1314a5aa42cbb66a1f057d56bb08d732a3092bc21903e76c74947debd0a70051a8b4a4fc433d0c901b0a5a33f465703a9700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d19e2362b78403f60b5e718e2a04c05434dbb0c64a7d9b23ee87ec384a204457cc405781e5ad4675f554387420a5288cbf3473ba6e7b1862bc3b688686fce844395867b39df08e7dfbc240d4baa550df2a7fa7bed91ee47b86d8230cb8d9295418c2be56116d112973e18f0b231af75a7ccb48f10b594ff2ed1eefda2a89a79933e963ea543299553249164c2b2ec8f2bec01cf6ad1d84c48b7bed64b0be9a5a855e3d5317b56c868d724245d59ae12944d52b34ef94a08520d48f1b2c78d242ba7d6ff0e6ee49838d2bafc4536d4891083a1939d7586cacb689f786c28d9169699d517af1bb6d774da8dd346434ce731b3fcbe3f27a75d19d3f8ae8acdd40dd22e6ed808b3171341fdecbe55f238c75caf7e6e0a0010549c6f7a3d54e5c8f9ce69cca6637bf5433e73fca227ddeae61283423ab4caaa28ebe862a298d811ba09956ee59c2f08f75f4eb796007ea091ef75b17721dab11cacf9c672f286080ea75d3eb383cdb0d38f6e4ea10c3ca334793b921a05763252ed61ec4a3e308109829a440343a5b648af2a3d669631d6a75dcb2d0d8220500438d3006986b7515eaa1dd0197eda057e27fde95c7eb30e691469d1b4f89032ee8f818b022ee699790000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000817d5fe62723b151162a7e6ae428e72ddea1449c43e0470aecd33f91937c9e2b63ed77a85190fa4136bd47e1bd6ac993bc1ed39b1b1a7fc4229314fab07d96dbc134e62e1bdf349ecaf381f31bd23fffd816bcf9c003cc5c8316d0ef1dfa599070277f21c9420115cfffd95e45a211fd729eaec1d28614580406e17392c126d09038a668a8db6c1652e3e0c068718342efb2c07080b7eead9563104a3555d1a1a01b97ec3e236e68e7af06b4bc8177ccf8a6987b7fd1deb6bdd8396733d8ed54570bcc320d8fe8f25d496a686c1488085cf5e458759ad39d976bd44991115edd44b46d8c55da714362f20e9ff6f2c339858539841157524e2a39e66a4d9e492457a186c2f425faf106796853e8c3eab53bb5540aafb5dade9326c5793d32ef5257df58f68d825310687a4f7c1b017b46636d719d3226659bae47fc1af64aafe60effe3ccd9cdf8f8130b345f713a5dedcd1f039182debf3ca927cfd7236a2e6044a3db2122b2198bf48ef92ea8da6c776c834286fd5ce382e81477cdef41c2b39a160309072eb548e912e779a1527b1317c48a76f0082f0059a9972c04ba730f873b44c29984ea838f894478d84b14f3f3af5dabdfc3f0425807e23ba0a66c1500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d99049da0b76819d3b49079765cda721c6c0dbe704a4435de5c3a075a46544ae0c3a4ae29ffd6289b914e723ff0e517786d557ff1db9f6bcd272cd40dea92a293de10ec6146717e78c843732fff6e30965a565dd310f6d4f8b7f5c56c6a8f6138974afafd6b555e21857e50d9b16681c0a845cac69167f461d7190dcbe27beffae04294db22d1cbb017eb2d5ba280c0dc21d7326b5ccaac75faf1e0f3dc8f02360c621f678c5f16ef552fab3ad90fa98a5910ebc202cb09e0a2d6795b7468a9735ef0cd061a7de1211f442ca6d549865bf1abb3d52f6d5651a8c169217ddd0026ffd0d05202607c49de2e5af89c720c74fb5bfd3647d93fe00b6ff195a380ec5b41a3c0f8ee206cc450834210bf42f3060568bf67665ab4abd1f610bbd290a5420ccdc7f5114629b14f9af2c61b49c5aeb4a930693a185efea5f4256cf61cf8a5f27d5b60a9522bd9a307521fccdb42fd198a4fc8c5cc527f196b601da22a6442a5d446b286188e8aad19b2b42ba4aa33da56fda072dcd72779e0fcdfd161eff4a7df30c3f11e6072ef4dd0be215b467f07873717c4a14b29784f73b200c614450f95ab4effb3137d761c3138f436d3c82492b5f75fb97f559412432942ecae00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cc3e732c13d11e2016e25e36dd5744fc349fc1f664a4a75afdc6e120737fb32841a978c6f6b860e82180e25520e80b0a785b5e650fbc993fcfc239bbb43a5ca3399e813bd2bafa7b5839a6653448e3547b07bdf13c6cf80b510b484e177e47866509822bbcd0f690dee0af7f176ebd83a7ada181506583c9c7e6d55910a82bb7f67dde103f33bcd0d055e47833d9018f256d60176e07dd6b7168ab9bdc981bffa8e7dcba6e3a2933680a0214f1c04dc45ff174a08af436c74fc19fe8b12181fb907b2346a4b5d7985238713fe7cd21b383e4ada95652f2961db0d4d858b447944a54ddb5c3a3e196704041b8b17e8ec474ca5487ca6f531c77a7c4789a5bc08acb7c209e0918c0b6fd98134234bfbdac1b72156f602ff4b4537959b0d7eb9177c40e1525d4b0fc579aebc2d30454ee346f49e802ca201d5a40aa4910523955f82b611d01708a50e2fb84e8606790608f00395f7e2529a3153480f5819bc8852a9d047c94e3de8c4be6054c7487312e8c9769a1f3954c28a8ea1dd0160ccf85b3a162b62def956b74f1fa2f2f9b6743d06c6fb66da6b0c55389ed3b7c5ba0e9bdf5496fb0a3051034b1041dd4265243e09c8a6456d0cf14b8aa23acd49a5f4af0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae3e3eddc489f9bae15920195eda6ce8b89ac966d12da3f58e646a7567196d01a3bafe8e21bd0c1330ce1f0ae2a9d406e49025ec5a7424a106f01ad76b68c03b420cbf82fc9177c1c0c92aaf824d4463984865d9fd091a3b8be570a35323dd78e46fe952935586e4dc4bdf9188d21f6c47fdc2782056dc421aa014300b91252f5fdefb23f17239d935ef3ee527be2bb04a25fcdaee0a9a919140721cfc4ffc959e99e28c6f3e43bbc4c6c7037e3f2933aff4b941069e950279a8130ad54d279eceef2e5d7e643c41dcbfa85c77b9ba9052d3b5b8a81e6af09e8daf592ebda2b629630873164324b055267b3e15b888292eca8523211d2ca6f8dfebdeb9257d6e633f22cc17c7e6bd3dcd85aa2f4819d47a7774a51ffc6dc3aaea67be91bc5b9667fe942a3269395f7aa31de5a9136eebb843b75fa960e38d711daedb020c83d1e4a74050df194f4722ccda1af87b31930415053063a6503c7a9178e54e3f507aea5529153c6481b8a3e3a8525203ebd8f9c0bffbd57406457ea0127c4ec200d957f8cc96d9096a552e68eebbfcb399c9f490d2cece5b3873d0a00d2b55af4da6bb3ba636f06b316e3f7e497e99d4905af71ade2ecb38aac72f805ff0f807fd8e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e0b8a5aa0d7f49e2ba220cfed1af14a3808a0daa7d81714d913c28feda51a2dbb38cd15d33d5e8648b4f6206b5cf166330db1af3e96d667315a3651a41d7c586d10808499eed4abaaea502987ca7c5ff4c9f41891514897de1afc1fdef625f0282b53d80b75d6e33e2b97d6609a5bf617d3b9138df9bd9242aa3f1c91c7f41a876f0fb36df346e80ee08802ea85e00f2f6847855d8fa1912b706c07cb7336654f22f24acda1e36c58d0a396197492282ea47a455e20abbe6f5fcb2fb4e881b9c927fdcb20b106fc0d06aea9577361224a4fa71a71a6f255a8eaf85e030230caee317129499df5a3e49e0194fd19e120fb693a2cc88cc5731d13180196a8f5e67757c6b1850a012eb8df6527eccd4ecba4d31f49084b6e10dc782e5e6b7586f3dbeead59a8b319bff2ae3dcbd5b49eb7409673f266b0619353096ef4ef9194f3ba468fa23b8ee71e69baf6cd095ee983cd93fd8328900c879edd6f9f85b9642dddaeb88d96172662a268ec26023ec11bc27714ec6c03baea6176df2682e9c1370d2f0740fc165b1d0db5e1ee98a7d47a0d64157a9e120f4890c55bc6fbaa111ce195e197594b4ecc73adcd655c7fbac64cc956c8c710a61dfa190ebd4364037300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b8b7b91bad553ad7d76d03163cff220f07f3c276fa9dca40f978d577ff7bfec49e9a243e879ac35b2ff285223eab617bf971345266f7b08a65e1a19aaac93d8f89980ccb18ab76d8e8156cfeb372f9406f9641765e14e54d89a1549ba6055c8279405ecab1b1f31b9d3a4db2012f91f21f9f30918a1ce83737d5ec9e54620daf183680ec5846a1f4a822e4acadbe5a8fd89fbf2ef0f2d5515a670d686a78253f9e4dd384507e8b23c66a70fac13064bbbc8412556bc77af970d051c46fadb9ccadb28e278e846bcc65ff9c5560ea5a3e6beba6a6a06997b0ec00b5923e285f27efbcf6d6fcb071a6241518e70fffc7a60c7b52624e306b19071605a4e15d11290d58a4e80eb2b846ed5cdbab1433ceb4defd40ca1599c104454f2af48098282c67aa7424f6a73732b44fdc5c38076b50be4fcc38fd1eb639bda24544b562aae0e1ecedca3bdd40a5181cfd521005ff06a78a4e787bb816a7acae728af709e55ca1b8de486711432c7513eb189fcc48cea1362a12216ccf5d7153c44c17fe7bb8cd7367d6f06f6ccd69c636c0156c78dcb33c361725f9e6375b634bafbf21fb218b5567fef10c1c230cd7b9407ff8e53bebce02124feec053325f2f00440f43f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a446ebfc71d02c047845aad95ca058525206b4580e177510f27a6edb738a4630dfe232481124c2157226e7764e1fa7d292f919c1a17291ecd3460bbd166421d7f107ccbb259fd101da761ade1987f1d920f4b69b2e0021ed5c0f7471c4d65b098c31febb4dc6f08b781233e123c630ee4068702014823ab319b0b222081ae8edbac2a4344372b17b7537000a996ac887d8ea8a2288fceb280f97b3936256d9163186f32dd599e4ab6874cdd2b5e8b36b9b1859f0f3b6184ba36d9afd4f080153e59531ec92d2532202a1a9d41739949af50500dfaf83a44374400a61493d9a4e66beb9eb0b07d11dd14ba4c06a9a764c7aa246fc8c0841efb991068a7671b88b553f1397f5154aa33ff8b6bb7c0097b89ad2947d80dd794624516b8aa08e02a9ee9d75656cb8d0439e5fd34c7978eb04590bc282d1d943a55b2bd2e9e6453c393207372fba7cbd617f21aecce8e444f598eb3de1448148efdb57fba93379e8953b8e0856c9c7ff502650e45668c584c8d3f298721a4341efad881794253b453e0b57e4a2074f0ffa31338d286a3be01b7c60e821dfae04349367a131082705cf7be069a333e6c42ecc43b78f7cfe24687e3e903e5ee9e66fedd5fcc94a2e2595000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025f96c1b05823cd24964ec42bced224c719a5fb906e77db4a38bb9bba2d9c9a6590baef9ccf533171816cc892f104a942fdf746e3c92c723e0a7f4608a12560db90d95a214b3d8504541db5b124f6bd3ae75845b90f16a79fcb97ad9adb8062dc048e28a9c4dd7c311328fd38c996a3b9374a8bb239be2e0d19fc985ffde50bd90eac991cd9121aa0b8e201fb90bfe8e2c88da6b063b3af639f9b4433997d078378550cd4b5cf6a2812d1ce6f61425e488200638779fcb8605e888a9afab805797c743584895ee79fbb812b54f67f5773cdc51fb96cf3449173ec8d4a3d61e3e0e50fbd5a7da7895417977c1c7619ecc14e9f14c2b072bda7e569aa8511ed304acb0c3800ba44913eece6531fdbfbdd3da7a92c828e3735e07fc8b7fc46a5fcdc4f62129545bf420f669e0c057817cc54d8f51e2146d6f812eca8013d053955bc62fcfe834e6a8412db2de1c7491cf275a395f3729c905d8d41b5168f87b01fcef5aa2719d0c6b71d03f7f1bb53cdd3036404d18c67a7ce35493d1a760f8f631a66aa3314f67691ad433d415438f59db71790ac0331813ed587f1edacfa65fd11d8fcafa6b33294b0b7c2473bbafbfe85e16f949091ff6addf243e80a60770ab000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016aaf3c1a47ae8a2d2b6f928fa7bab13c2eb2e3536e2de102283da06619ff079e407b12782695a9f8bd1f41828d6a65b4d432fb411f9b68ef46016a568a3d44c6b0dcd3394af132cbfe6a419e930eaf6115108c061e3c94a525ae48bf405226480901fab506d9102c11ed23a1d5ed279eea4eb5183efa8fee5caf9d10782031d0fdc9e83961bb5a61c4a84ddcb961794e7bbd62cea6391821b19f297005e04a61a6bf4576f5878572a79e3a76d386d88a9144726a4777af4f2a0388ec595d5e9a3c0e9ec49a7358ddae9f0704085a18065a009753b7416138e22e8ff5cea8d3b61ac987ec612027b855d5c68490883f927d91af3cd4bbf6e97c074941eb0798b2783a5e441908d2ebf527464e492e99370646493fa80bba181e198a5121339fb232e8c2ebba2cd3a99e275c3fb6674d396f244a6a1b036bc8d16f0910121601aa2f1ad78ab483d192eabeb0ba39ea4035d8fd7598d40e3c16dbfbefa83c0936efd2b3c8b485dc5b5c7e0d85acf8d0e65f1a5c6b854249b4909397232114cac01ff75bcf589f8cf939777ee579f0817c789f903b72e337dc22cf246d4bedb69f49d5da0c6973c9489a42505a78f6948b1c84a7ad43ca7caaff74654b9db8aeb7000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae48953590c91a18a4de6b473b8ab88f3adea5cacea4ad3fdc05cfa9dfaced46fa1a83f779a55a01156ae9929e955fe2fe2d79fc5a79dd72f8407f07c772e1ecd38b8b077d551710f13c27f334621c9c176a7d8f7d8f3ebbeb3f4a278de700f4bb06d1d6abfc246e3d329c704fde48a399b22da4cd1ed728eed8f66fb1d0640e8a1874364cf9138244ae5022dbc56565f79ef40edd8ebb225864af965ed3f24aaaf976806a5e5ae06164595172ea8968b3a7b5c148414282b041df2d3ea7a3818f5e487d66e129836f88ca7b3e9543f7df2c418204367a6f34f7474a6e15b481d49cf4b9e995ba5a1ba8caf4df60b2255c8ae747a7b5c18bdc392101124b494323b9446fcd9cb9fd2f1efadad087f1c19452931759b8726b75b93f1489a69f3e0e2878645016040493f9ea16f7874e906e05cdb8f22cefabe47eed93c5663f0d7d3f37ddc54456d772acbbb53608e5294ae88c73888a3b50ad06500c067a10547728940b1a7ad422f9d363148afefd0806da823393387c9f6f4fc2dcf500afaac590aeb6e65a1f7908881e9ac3548f3c131c16d4b0a927b13afaa2ba6f09af9dbd356e8ffe68ac12cbf4ca0f8d350f7854a6af99550cbcf9805353754c0044a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac72076470c838dab5b63a86a713f4bf36db8e598a19448e4c660d32b7d58d8c7c9e8afb9e1601bffda4b425c633075a7b74b2edaf529f3837c256a1714c0a73f8ef4d52e6b01b0192cff99a98cecd4e495bd9d89f3dd12b60e7290b1b506a9c0360146430864f2be951a5cce247670f31422dfcc01c946da436094c8a5737442646cccd2f5aecbfcb7ea9aa9bb76abf4a65db83a11c8a2de87275533b4681d64ba0ea5e36e9e570fc4f1b8390a4ce7a1f3a13c4adfd2a00d8b55c4166eef1a3c89dd27bab19faeb570ef58781896f9383871c167a099d6ba7fb74105ef6cda70c955894b7744a3261fd73128f094bb98d7bc9b7086e095e1c66bf7239f558cf1fcfc8c92af1abe34be184c351ad74ce6376c2146e270c80343d68f7ace0030bab77dd0c2d054bcb4fddf999cb997dee204cf9000014272e8ac50fda6770f92e83d83f36353a91df65c94df79d47ff27242e1036f481d37f05f8eff4bbbb679e2ddcb1b94346dd0c7a89f009b87de7129d15493b7b55ebb91aa09bb7b6157f36a23b79844d626962e13f37e363b5bf2845f46b547afccc4fa8d78df49827cc9ea7f3b0b4e17659937c91222efe6d1c16ac936b99c21dc9dc5447f8e9cf49f9d2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019eb1d87bfd29c59abfa80661b19d28c0adfdf67baadcf12f1fe799c4d88f5f52eee2bee9d6fd40e71cc4072cdb045451c928ac5cf5c6227ccf34ff441a23baf14261cb57a9eaf232e03077f44e334426c82d5b6c5698362b98aa310837bbf538958ba51f8c8d3b770e0e3543ee6404a626b9dfe12d517633a3ff110e72c928dd7a8b77a3c265f892ec13c8b5da09685091ee2864dbbf329c5ebe55dcf7ec051875d1a2daf944cb89d81fcdf6f31cc9a9ed59f8ed095300bc0892f00f30180f4ef9fa2bf9efd607c13562e1868e5166ef72d15f9b40897b9469c73e47583335455bdc0f8eb7230e35e60ccbb32171f47148a04ef122a3195d7759a5d50562b0b9aedf1b6498a9c8768f6206717b685423aafe3a708f43a76ad108fa017036724b3540d89f28f80417f489693cc92e24ddff95612e27e1738d81170e35a761d5dae150024643add7c199fbc05431ce9efb8284633ca25c38825aa06d175b5005291eb98a08e1efb46d097651c080aac13dde11a58025fa753921c097ed73288b11d84e3d399f52bfc3d6dc8846a3f0d0ffa04a11cffa9802e9af908b84de033c270ba26a01ae7bd5cc43090a5824effab0fe40cb9463a780be482d3368662f08b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a6ce44f67a262b4c23cb10c71667cd590aaef5d09f0be99a0ba4ae29e815641a8b305f84cf26fd2b938cf5ef539393be8779521b436a6b2f8e846daaa5e6519d596abff8bbdf3c8b53b9f0411f8c4d5cdde58df701336aef0d43b95311da2fd97cd55900c1a55eaf626f71dc45b3c325ae4a1ddc0f07932f0e954f26c63bc2aa27a8cd2bcad19849297edd0dd3fff11597d167a047d12ef49e6a8a15017dc25de0d857fd5b1202b53e438be9fe2c14cdcbd3455c338b555b1456bbe7f9a551e6e6bf6b17bd2a2b179537a7c108799dc7ce4d4449734dac053c7ccaeedf0dd9b974441c0fd5b2618bb5450b6066b2247c2c8cb748b80eda5deabf79f079f0ba272a6912e2637ba460433a12c10f52c855bf5dc4a55941608cbbd040b460ccc42e2015cf32a2d95115d1b7c3d4598232fc41373eeb74927e9d2f7c79720bf180d6b5e63b3a4c8bff9ab2b7bdd68c9f4bb65da547f311f18aad2e30bb102f12c260dcad3e35c825a89a3381ff8be2d07d2713135fcf8926ab880184e2694f133b6107acb9c87d6951f59e1c373ff20b3c74135ea4f660e1c861aa55bb29775b44fe57d5fddbe4b65a83080b434a6fcf2fe809fd561f4f7c7faadfcb4093e4bb05a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114c1d80b5bd9a28399b11a3b59c4c3dda4119e1d22677387cef8ca5cbdab2ec33607180b892a4ff153aa54b67eccb221d0b03350b701ae01e814667113fb2937ac8df6a63c97982e2bf7ca065e05484d768f1b50bc7add48bfe32dc571f0a86be241113e0af74e090d70c4a61379e35684911cef963d0aa0e127188e8131e9ba2dde0a9e5fcddef342ae3c761787fe09f2ad73d9aa34bc407e07eee089f691bd991cb0eccca39285bac108533a95f9cc3ca3428ba3d6ee47d993ca717e6536c88ded91c3188ecd0a4e616738ea3de2e0dfffaafe27620fa72de208c51fb668abb71ce0b7a91e8bd0850178dcaf7c3e5bf45e61a95a347cbf5c97ef934051dc33acfbb6d8d8aaf5f4948acbdbb05b0ea3c4138f342d6ef49c7b57f8a019d6108ddfe905ec56c321f78179d1605a7299ef5a9c9b0728b83280bdd04c5490e03f151e2bffbd871a72e6be3d944baa328ca0dc96b626bd610e4672b10b2ae95b1032799d059c1f929669e561c170cf5bc6858985e40ec7c6f8d0f05bee29cea5512ca434fb50adb37918c6156cf62628353bbe6fbe1bd9db421e23ab45a37fde35e9c4e73d537208e798b2a44b3ce7875511fc1866f6b2dfc17b31a1caaaa6388c200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008aead3b1e47e6451a79fdebe087f3ff549f8b52a124b416881dd57a6e9da553664622ed7e9450856e6b4c58b5f8932e8023a56e30a77139c2b71316cc5443d4cb32446aad373e186f6eaa42619294e6b0590540c9f4b2d1a832690becbe6778c3e5baeef981f79aef5ce3dba8819b4418ae267d4849814b154f254fb6a573b5594e0dfaba318700ca44280d293ec80db5e0599f63db87d4213d12b2770e800e8a76f24e08935e1684c76e1332d7639d8f9cee01efc34bb718a0194e6bdc1b325614d9043e5b6186f38e9c55a97b2d10b6b8e1048e13b9b3b56b4398bf783ae4c42025047e8b0f7bd2ba61c0b790218fd62507cd3021f549960f29919c47c808059a2004064d02798d263b0c414e0db8e9d2822818db50813ea2b82dc9acb13519a352c248d644a3ee2c1cbe31731fa76a699f953a10ad3230b9c9941130d1857280c2880e9d1a9e1fe801bd6c8de0b9d78c8f34098c336467cf05176a84d0e707a633dff22b8f1118f294324ff84b32a90e56e92bfa4b1ab820af01e8c48e60961fed710d403fdd8042e51191903249f4be6c1ec1e6b3d29c95bd1d1b0eeef791d5b67b981676de22e470a67fee0d28c940308f6c5287795d968614c5cb1353400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eacadb13cc0273ae6e159ca59299d02bcb225ca80805977ccb31e8c6d76daa5947b6857021ad40f8fad6efbbf5733c03559b767e2d84228224ec42babb75226b4f0994ce05bab31f691a2d27857e2a956533d5997de1422dae0a3e8b5e66aeb027aac73ba9bcef55a10dde91ba57ad3d0eecbd49ffe4df4fc31d99b5f6988d5bcb89a31a77bd467e56d89539b80b17e2cf3d4eeb2271868365dfee7a0e7e69b41ab7f901e4ae1be53a9dfc55a01888355ca14327686bc5e81317aa07266efb605bb7bba0d3447a02348765194e1eb47e5f4fb552597e64a7ef962d610f7ea6f403e1096ed896eb2639e00eb197ddaa160af78e07e5234a84b7ffff931bea79a16f810a34745ecc56be9cebd418d8e1232b9bb135302b2adfe3bc9b9f26a39c8f34a06deaf97125d0835fd5605b609991958e0dda6ed99205e23d918a3b4e2257505b573bb961ddcb1675774f8c80d1ec138dde76f458529a820c32c6ebfe218c333b4cad29e5817f72850be851b335fbb515efb92641fec519724a7a8b5aa8a839e7f83723c02b0deb4d56b039365694e73c700ba26e454ac3003b59e602ddfbca1e91343d947da2ac058f495508d0e3b646c5b2bd9e9559d5af065fed8bcae00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f3c4b2a731268c26542caba44278790c21f4f47287ec10ca557afcf577967d653e5ef973dc389f9c11376a4187fed2b7b0bde0f9363ba9c73fa0f5cbbb70c2860f20abfc564b2e674bb4122ef35e2b0c4583fbd81eb46bb7a3db1cce306e14d77afe5438c78351b0a70ef344ab18c03297b369f72dc740ade1bbcf0690d24fda04ad9b9bbbdec3ad4fdd0351364f1ffb35ef446ee9780c74bfb24b771b9bd35afa8fbcea367ac5994d1b4e46230975e4ef933d1611c8386433ebff312c53b7efbd9fc600baeaac3a1bae2e722132dfff4d8c86634000f8b52bd5b15ee08d11f0725729e9a13401c42bcf5188371c33921ad909784b99214ef8f0865744eca95005acfe6fed2444531dcf799cce9c701153accbd10e2159760cb82d44ca73ada688634c85cbabe048f46759b9f04cdaf9ee8f21fc68ee8791b360f272dbcb0b8caf9b45d1a932de3089e64d330ed7aeb5f88ba55292066f5b44742c68b60884adebe3863046ffdbbe6f16ced764775c4442734d10e3dbd82bbc57a8dbc794100dc94e0a399b1e76c655e0ea8a9a0db9fd48726894c5f963d47ccdec01eb7124a1be3e7f1b15f76ab242be6398fd560f196b6c94c82f8427ed478c5a80304f92f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f0b007ce093c785c066bca91bc62b65b5dec3c2cd2c6eb3d6f77bc81db4623930624a2f050833a3690af582d52a5eb4bca3bc063c9ae4a70d268ace59054386f215ff8cb0206a7223d12c12966a036fa461019ae590382a8ed2d9ddf7fa50e9796d5068e42655ad88a990996e3eba8da0950795f1dfb67b9317fd6505ae8a58b75e0d8d219c89f854aaaaeeb504b369f34e5fd6df0255b82a2771c5ac40f87b0a3aaf7e4512b1faaedf6b2e3b24d95c0db77de06132478148e44620e5fbac772ce1105ff10d14f56f71cf27d1340839bc272d149ff905766ac7585956856cb3a1192957a111aa83ccb6ad60828128f7c4609884364adb30295912c954782c5147c778189ac793770ac6e7d49b533fcc3c5e212ebd309b3a2fb4cf3f55bbae71fc87bb342fbc18df5aaf79c02020a3c55a105b614f1641e51465a64f0f7797fe7ad3d9176f836cd471b07a9e14d7e7bf85f4021f3bd767fa0edf85a379c671e8f60aa5a693768bccb69103f05c878599fa563068da812bb928f28a4ab17f357a26cd1f73500e07b307de1d4629ad11029ec8bcd8af21b287962d418bfcc6f79adc8c740f4176acd1a77ed968e162d10d483b55916805a1fd275f1d08e0833c3600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002626a6cf20ed47f6c030d75429b68c08b014990c7c815f6abd6444a8fd0da92cef9ec0998c2fc102a8d046108a55a3f418f14e744e899f1a2c032587994e66af47fc5514eaddc996d989387c446bcb174f987817e3f8c4e0c22482e33ef760c0548c3e71977804889bc8929f7ce1f7bb01e679cf2fca36ab28332d337c466b2f23e08511f04475bfe3c5434f241bf828047b68cfc03e887ce9e9fb942698db94106d9de40b7e2d5f256ebf5f8a779f80ee2881eff400eda2a5e1dcd1731ee14c9443dc117ed97f483db9a9dc018094bd9df1b73994c67ee10b080f4d342480e21354946b3f718d54d6aef5f35b40e4a0b7b86381ccb8fa8fdf32c6531174041d4bee30518757851aa2f316e68daba5832fbf9fecbc2035cd8e97fbb503b84bc4758fc85041eb286b12ca42b440266eac8d2db87947a42cf146e9d5f7f064d78fb9463aef7e613ea03ba94c4cdbc685aee8d5a96c33681078166b62a2a907025315500f4fd5a3e8de570a2e916ff21029cbeeed00ab7270435fd66bb4b70c8734aae33c2b705d71fda2341152300e0677b0acd54fc64af29590842f6a07579c1ab153f89470803ed998da3a00f5738784fc0639305a45ee7f8f239d284549866000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cfce0cec77291bc30f1eaa627e2286b4f8fc5a8c6f227fa1065b5f06163401e6259c84d09620152e8728e67936a5e7674b3f40693497c1b918723d03d4a3eebcdac837e30a8c6a5cc406fd023cd69b0041b30c0c4f7b774935ebaa03e1f0faea57736242ab9daf91655a4227c3f5b1af4a3afceccd055902c285c11d81d625da074fed65b63e796369a311930f7beecfa336ae3c11b6ad342e65cb172a9e52bfd656b56d9350600e0188b2200237d132a780a6d357e0310bbdf9553be2d5551c9489e02e7e669270136353869827dfedfd1558213bab2756c721ca828c115e77627f6575055b99e057edd7c6285c1007c11116dd5346f499ae86f104a76103d2a0c4f03acf22894aefea06072b9cc851b19802614ad31becc742cfb8784938e947ee40a95ceeecc619424ecf5b7d6964fa45278ec3e6b5c159106430bc66a4918ebe26fb879867e6cb43d241f682f132d44c370dee8fd59231c8fbf670ee33fb743cbe45c43a8ad09557581a64a2915fe6eea335c89c733b00001976b53329b29feff589642113865b200d8c87306206205a6986abebfe30ed54110c64005bc0249c55abce4fa5dab71cd1d30569f5d2c995fa31dec2cd4cd85f973cb79c69f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088ced1c08898c08e57fc74260e6657748602d28f58ac1094a81ef97ab2d18d5719ea45ae80a683da06bb8a2cd1d6c692636f809e0d698c22cabedcebecdf1c4c644418c1a1b0ec3e9d011eaffec10bea2766a82b6f8db7d08ff627f389c0d5ffe27c7e0e8cc90fd7960f4fe072aab73398f49af61f486837ef4c37139ae708330e168e605037020ceef3c3c80d55924d82255cbc365a0dd5b4050a08d91d69384c2c52371b6a6ecfae063eb497acc9a7c203e43d5e3ef207e9d0a9da58a2eb2608557b3f8c1112703b3064def884b1fd9ceda8c9ddce3766151ad5fb24a0cbdc0f71f5ddd6f887948ec8f059a9a8080b894f81e7b6df0ff7aa5e7d63ef3d8d05311039a48b77e63fefe57d93f7fafdd6d0548263640d7aa2729c34e30cbd7b14bed7eca0f9ba6a75e1737be6784032fa4f9b3a8f570d4798a6361e0c2986d545fd3f4d19a521aac16d38e7508bb4e60204c7b1bd117dd9084dc10b0a4fe6a5e6135eb0556ffaff9868df04415fa3a637aa9216e7c7b7f8a4c0807891fc41ae8dbeff6f9d35f0c3d07ad8ddcd376f047eed09ddf1ed8bc775b31e95f3addb532e6ad6a01503b6415d38139e879a901546ee667d44aee7ec426c7518290b887b260000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000acacd24f5db470bbd824ac0079d30732a5336ff888d9559acfee01c85a0d6c2238025a8cb700ea44ce9954afb3d210a618122c40ae1fd9cd6860a47bbd5b29d30ce2da48c0bc9fba95cd93bc3ce3504754f5e06db540e742bc6a2a260b87bb59bf48e56e1d888f4bb2cf064588384ca448d92cb3d651ecd367de2f11274d2d1d982e6647f353b30d5de7fa6a560837f2bc0377f774906e9f3157560fdd62999ce5f6199a696b053d2acd98a4a071e802a7574af22407e3a3180c45335289f604d38a556036df1365afd5575547d623d038be9da78f2fb4118beb29152f29cf3cb1d74da4ebb657347044bc1af38ed48128e7b0878fad41bc94ad3a8d3bf7cbae43b68b4aaf6504d0884e730c0da896518f023985e0aad42fb85de3904c28a79bf7dd6d172a9ecbb4cc4725724a1b11d54af034a8958aba648e476d71ac07c35c0c5ba3bfd69049963b2081316c9a4756d8aff2babca0c2dc855bd2ae16c251203781714ea4caaa50058ab2181c1b56e4e7491bb16a92991d661e0b51c730a911b1026f0c7afd3d0d83454eb550c695717cb6b6485fb21ab7f18a3e208490331fefb33c322601271dce586eebf206b29c0db6482a7144a344afe9c56b4b01799e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000156a783c7811fe6c4dd1109807c43896771b23e219c430261ff67dc2a42bc8cde0b54cc2ebfa424720dec93e987c6d8fe127eb33c95721d93f251eaa6a5948ed12bb4b50ca1aa19a2f05bde6e906da041edb4c31e91d24c7daec7fa769d6f96467394f98d390197ae3930e9b1c78b5bf30fbab182cc0ccccf14b7d9090980e77e306bc2bc440c5c563bce62dbe7f42df87ebea8573eb92fd655adcdab2e401c3c84802598dcbf2396ae4e0b250680b45358377cba936866369dbffaba812b760df37bb31c62821bab55b4c861dc3a659e249ec0e01b6eeeeb851188c7b2a189513be60ef7bfcc28d47d0ab84c07c296f0c1ba497f15cc64a9385e1274781037ef7def72e5a86d07c902202b8d2294c7ef800cd7bc2efb46428e4b54a76502b5a00b96a1e684e5e29b502d5a9d264fdbc4f1b9c19a87395348947da132a1d7ce5064feff429f51c3e995d7b26e876cd27828e94078e308ee726ad75ffc53e723ba0c6c441f01b066792816e71fa175f40379649b75774b04f31b699e8162bb479f7911faad30b192ea6d0abf1f82a28f2e6f0c0b8cfeaaa5bf182a658b4cb04e545542760426dcb29bc522a2638f6be026c60eebdd2f57804c0410773777cd0b00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a94b77ca8f86805cd72ce487577cd2b803ecd63c3e25280165acb8e725be58857e0cc13ddd353e6c42d2bf48ff37557d7e9b98b4fda85a1faa3a005c69907b650e4fcfb6745fe2a985700f96335e079e0061a78b0856f5d51f032ec723180f862f673c215e30bafd43f1e29029851bed21beaaac81ae55f52312f759553e8a36bdb598f52814ddc41730033a7ee54bf686237e13acd21e02f414ba0cb712473467d0ed890cd96c5f43729b8147a55b66a0cd010a28f2b1a4149f12eb7c75ff35e363da0fa24c78254fbf9c58b2f570b89bfc6f485d932a24a8015cc27be5646da567bc586459f7cd7b690a1f1d211ca914fa1f9c561f7647438530ba010822cfc469364a52ad51309ff1e180dd8187ed4ddd8b781d2931d123ced91149ad8f4b1a6cfbbdaef06e5efae8df58b1d8071e8b6ac9a067c83a016c0a6f6b088b81e80675edf91c2f777d3dcaddd53db34e285765519e70a0fae7ac3df0662e122a2231054689d76c8c3402313ea49314e3adaf549168ad4f7da7e9d2a109fb0f1b3046617f4658e11619effb19ef69c445208848a3ca78d01a9428978f459a434660f4b3122d778f973b9fcbb5158a85370fe6fee058dbeb7808751691b1fd4da9de0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000107bce4572e5d10663248d2645cf919e40c8b754ec1406c7be148f12504f663505292fff5491cd29933b39d54ce42e3fc3339bc9b41a748f05182b7d69d4315b4fcda2f4dca8f524a4817ea5aeec492f44ee505cb21083d083c0b0e0132cbd035f56b57e2b4acac5ca31ca9cb682a400298189b01b1e8df56082d02560dc6fd7943d31b775c0191e2131af2a739e03e67f69e33cbf1554ef97f12001aa24f123aa27da435d1f8be543510fbeb132e448222787c36a442071045e6df7094aa0054ff2b86a46cd33a8e528ea4af9a541f18a583979b424cea82824dfa60cf3a767f028631f89712d191c01bd4fd402e6588d6268152ac27c83f23df641c228b0acf0bfd9963d744a6f1c5e28ba7e9f0f2958b42a49aa1ce8af97adf9f26d834f4a0e68f17cdee315bd29d2794ca9d50cca453fe795f3bf02e38e1eb00261e023a5223b29962c2cfabbbd6896586f21feb819532acb920d38c4ad237242f965577884d538fc8b0ef098977689583c8955068057e76372f8d25dd29ea8712b096220ac1fe04b0344d6968de7a4fa707c5407660512da4522dab15e388877a5b6d27251000025ab4177ea77b5c3354b14754c56da54c819c9e9306f9ed0125c5fef4a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad903c36b82910491e6cacc74bea3a6a6bd06410e15edfaad71d7c6d9a2756029e5e90d4af1c7c294858ca8d1d38d8d46298eceee2964e652553b49a95fa056c9296ad05f4afc382bffeecac12efa563566c329d5cbaff116308a9446e350ac2264db1c6cf72f774de7895b09a3edb5e63a5a76440dd35dc8704268ea72ba496e9c097370dc1d33d426ea229468f510b68874fcfbacc13828deb59ac3d10639803dccf45db30377c5008d723b0d2b007cd28cae45ca66284a140dead98a06b1d3d2d6b520f50db12bea75583e26ca736bd38a0325c4a0e223143c55705a7eed6e5485d7d9dd0330d3a7a892fd96ac7e2bc204366223209b2a86ea00b4b989c696e193ee20a5d06948e06f9e61ab7fb30cec52a7d0dc1ed4b4154a0701aeee6551735e81f681f1b34bb601836850cd681320b267a0ee37722fa6f2b4b9ba59019fe1ed890ca924952aab39668d0e6c144774a17d19ec62ca850676a21194775f2523ed13c12cd86fa6cd1543f220bce5f2f13b7e0a4069621ad3dd03a950171f61600b12186a9f77340303871a129f62e47db96e3aa5794a9f43aa2e2aaf509a51c96366907e0dae0a23512bbafc28835c744eb566b16abf7f0ea268ef2a71df2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086b36fb3bf0b8136e503980aa9acdfe46aad89e4ffe07b9d3e24e78b8ad9bff84ba35d356c4d31105431038dd1949a88c410be056e44ab5ed0c9c7bc3ebe932efe6ce6d0d01bb6cc9529fe5a9686473735987207bcf7acf065cd1c667307911f6b5885808c57bf026ed3d310d3c1b74c07b6a13418511219fc500c21ba06698915ffa5736f1b1686f0d3eb634f95d53b8d867222f4374d2e8e3d409d8cf3935fc89e78630fb737dc09cbd35ce06c1d349e4661a7969a04232b6862af2f69a88c9ab50ea3cefb08a4eb546a3d34fae32f7613c9daaf632dc7994d362ad74b690c45e44bed140b6ffc03559092d9085ffafa7f93dbe005a2d9f732d8b470ba4b36c4da17168d0f421f4aa4d558118c3dec7558942014015d5c5b5d82e300ef45601e918a31e7b8a69271eb7498a45f702463a9212ea128e96abf2aa0101d50c2f95a134a94620d92ab327bcdbae6ad0c8151bb8e687aca5dc744c19df451fd68128cc2fa53019c681f993c0b749a514ec9bc64031fccd461756645d8e214ee73575e67658d3b879612b0c9b97746bbbb43ab2090dab9eef26935692878d02d47a9ad742a89861f99ffa8c6742a7fc8d38888969666143037d4708861364f0518d6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e98156bc39fe4507f940c974eb9bb6d178d2112da93bd967388413bcc8f0c9012e68c7ed01cf5a0330122757141257124db5f7df77ebc3619f3da5fa382f68400ed9822f240d29860c3f268215ffb9aa6bed66fef3ab562b94727f4e09c8c8d3e4397b127153e150d22714b1e2dcb6428ef34813aa7af33a885d42e1c4f69e7f46a91d378614d62139f36a1cde20944a33ab92462da1722d747c3c516185cf249378d31ded794e80a74d1354bc50cf123eb7b0a234678305cb1bc3782fef0546bb7ebc3263945d872d8f9e7fe401a8659f6c328c18b3923968439d32b0439e187c4dd00c08045afda01ed3ee1704105d7aa72e8ebfff0f76ae921cc04316ed858b22e93685ac99a16d49b2eca20bb7cc73f62a58c9302127a2b02ae3e54bcb20ecb5e998e131c7fe7384b878f19d2a4ff89b77f831943964bb49e7b451f55e48aefd42d3763f2345abfa1d55838e6aaf933555ab20126450d78ad3c39e46a72bdbc4fbfe2d4af4c852e17b5d406085784f51bb3db0082e48df096a7b6ee12070aa7bf288faeebb5fcd7cb034abb2f05e37445d0d005152e9fac1bcf3d20cdcf03d617b68626583c6be33096fffea4781c03c41611d292330bfc321270d00b000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000798e97b5a94d51a2451d9e03477b80d5acee55c48ecedcc6d06db927393856fb8f26d8197cae824506d705578ff0345984bb5bcfa12ed2b75eca52af2700f0086fa040b0a2e15e28effd5f7f0fb7716ce9ce9f80e5bd11340748a83c921fb2f2efec7ac04a06a814f1487f59ed5b93030875c05959ed7aa4c49d66e721e6b7a1220fb43da60419849538d20bbf9ee45b86591bef54e6b0416aa1c10253b5eeccdd6dcbf2a9d0ae0bde9934fe68992999025aee9a8a834afd5af4e0944a1779857b23dabb3317a4a2b9f3485a7c838db81292041ae7097aa91202dffe543a4d6f286bb6583b9f507bcf76974af1c0b61c3a1c1056609cbef696d4eb3c5c11e4db643ed223564c93d0793ddca1d7c38bc2f3c34b871b58b1e9bcfb3a166a90a6bc70ecc1a04d6a5a3c8e717c91cdc9d288f45d09756cd46f9a2ce4bd6fcbd9265672932d5aadb19e42dab6ff8c4777be9363b713ddc05a0cdcbc40afb72d4666f29c73348576cd527b98db8722032271aadadb54bf0ddad7ad6cd40d2ac68784d0615ea8b44363f43852f89e1ceeb0e3717a972de6b18a0a4a17a7a116c1ae2d1c39d05ccf4b95c847f8e02c176526f5d72c5a8bfe4ed831c016de8335f3818bd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008807bad52c9f1903a79786d00626af2f5d58436d7441d12f0525468247d39edb37f7b29cb27a63cef0db5632b42bcf4bb92ab073a04563aca2c789b4c8885a7a1c2619f621509d12c0b297ba98d58cbe6e67c04e2b09bc1c75549f86870a9cb2d5a12206b6bfc5a6924b4c4c4d37b34685ae2fff8753061abf7e5577dd5b840d5a5e40cebad2e9c86f168914f8d54952fd83049fd6910b4589a41a2b4df40c629af133201a222f72b211fcfea13df7bbfcb07dee9d913eea1acc792e02fe3336c41f843b675c380680e19be6b2fe998a2250ca5336cb4a0ccb840039804018402ac1893ea6790586f5e4502409cd9b9ae0f1e02cd12a12e00e4adb088bbcab42e6c4168579a8158301b6f9d4e9d6c5d08f617a306c0d55ab0550cbbc8ac4e21953321987b7b4f0ec1dfeb821e8218cbad4c8ddaa6414dd63f4191e2bb43ecef3f38f58acc2b1e8e676c23ae140b8f9341b9fa55daf722bf8eb165a5b918e137dd5eb9fae0cbbbfa980d0608f8635fee637098c4b84df302e5d87efc1c0bbf6a26697aaab40675c0e1458947ccfe51dca796e647fe2206fe3db8a360155d31d84bf132028b5fe3df114882510198658b6ccc53fe4a7f3fdb85548d8ee00687a0500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a029118fea23e4ac314db85b5d7888da5489c9dc2cd07aab524933343628dc868bf67aea74bb48618570c6de7abf37dd797e598f5cb38b9ee8f34ad8a0ad1864d0def486cf9f04b8f2e04d31bdfa43a628710a9ad3d90ebe2b1027c84c3de8cc0fa5d8cb264956e086827d161110bb736951fbf1adb3ae6f807ac95e85ede1626ede16842b2281df651265d7d217cda1a3d7e3dec4c65c9353891cf5e4560fd3bfd7240fd5c8e126c4ced7538a45f2242bf9a3023bf4db77c119d66b1270f11ea5b75d9605c4b12ece7ffdd7e6a5688dfa3c863f5deb0238e1dfdca9f55680e8ac7db641dfaa34f0a101c6076feaad7b8d07efb9bce22757dd5fda910cdfe80873111e4dd46904a90009b07562fb4ae40956686d8c6126cc562f22ba9497958fac86b6e31bff8bf6b741af92274edb89374dcbae70d9f87c78c849c6e1340ea9ab4d92ad1f8c0844389b4bdad3795491e339f75884d577bb9d8a5585de111a214707bb012661a752c913dde95832629e0502f80f39148db9b515dfba4b63e62abbff43ae63551034ebcc7f8f12cb49171af00fbfc0e8e16a538554c3750bb83f8c36790cd6e8ad91b146f1af1afe5b95878a436679f539308f8ab75dea220350000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001204b072002d5fcdc9f830019f12d6c2566ed6955701fbf4c0a6c28398ac3b31f06a0b42916605828dd2f4d2ff22b0e0b41b918981532c27f7ed8cd5f54810d60a198f80b03d6fa377314355e194e6729b312cde7edb02121930a8f025ddb958f2490430d5c998e3d6b8946d64c6233a494126f48a75d9158814722eecbe1d61619ecc12db5cfef8ec8fd25746851b4fd2ef34d4e3703ee670cb35dc5cc908b64ff2e5ef969af57ac48277e596079fb39a453aab5608ed5ce04c2870a9178e15a619d89f212ad49b8a654250ddce295c8fe915e1ecfbfc3d52d8246abbf9f47cfd97b4c1d5aa64f7ea4fd0fcd14ddf536e6d670b76a365a03c13fc3263aedc9c65d4fbdf4c8e884e679f43f67913c663e7e03544b8356e65a054e7fb29b15ff39bfa009d11ad3762ce8f66d3a628d6dcf89933b9191a5f4324842850f73e33221678b1245a6a70fb17eb3ef7c366db4598314b2afc97cb9d7c99d32d21a283b80204ee057c184b1817688bed0c008f0fda8032e5ef064d1890444b5e0803825ac8726f1714b94402c8940d7bf3f37bba30be80edc6c4f90b75f932058d36ebc6307c3b09fc48f666aa84257020d06b9afc2a3919edd702cde0cf6c0cf0e91100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bf204563562a101b922151122dac3c36e176a58868f826cd731cb663f065608201f8ac44720603c42db2c5e1cebf501eb7cad743f3d180c06f77aed6e9efd6b1d641aaa4673413590f432dec9ff17c9fe5032a332d794f8e0c5f34c179f8217db535f129637d6784193e408d1f03260a408197cd4feb548230b8f3e8f6c41163dcb4d20de31a84c6f695fa8942a1a9988cfd2f1b5438367c68f926a0199325d598545517a509c9d492610d1637737c6a435fd5bd18df65846532834a3d3a796232993af6b71b8eaeeaa916bb8f797411325431753d0d5b42548e6e9b6134bb42ba78b9b79ab715b7d1d31a3a4f1c991d5d567936fc209c9401810468470b7aec779319ba263865ddda15870ed0de9ac10313222415e4655e6e2551020c6b0ebfd3736e29b0cd35ac733fc596c50952fee4a094ede28d5def366defa8e91c2d11acd42d147239ae121c0d24ee1e5f7709fe4a5eb76b041171f4c3b1c26ce1f284f66e8fad3e1b8320471cfcfca5ec453409324a786132eab20dc92b14f6101b0e49efe26de8ca97e5e90d090b012262507b0fa8fd27ff1b3baa33bb19a34e3a2bcd098363182f33cbc784fac7939fa354139feda2cd3987dcb1e2f3ecc1d8d0f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022e2403cd0710195935a1395ad5ca93f5461818a6d032d3c841afa33a7022e99ea739b5fc12d03fcba0b971dd2857fe14733a959fdaa2687e88916bd8bf93ae1ce278473972d11a0cefa8e73e78a4daf1c55095f68ad8573b6dc7b82ba6d0143a0a1338411865acd8527478446b1cec0d98d4bb4797692eb31115a132ae15812c60caf83d29158232bd3b187a36a62c87554a360e676b2fd7c9446bf14587778e1dbe1f23c8915719230071cc71034b46fcac1018c54da153d1dfaa91deccedf875ffeba6f5f3d25273b3ef142c77b0aabc42c9d0cf4afd5b9637ed031c4e8ca5bbe5174b7ecfd7db0515221b303849eb3aa931f1784ed302122c68b65d5a69f1314e5f8622f667ad875693a1af24cfd7a1fb7c28abbb0cfd82e48f7b201baced598ecb06067643965394ca5640631ceba70350051a9d9cfb71dd8875b0ff3c38c9a3c3576d0177f3c9537667df57103562f031d3b3c7ed448e9b38608911e020937169c087d879a760b5e4c11c7b2098d394e69e71ef18eebffd34b794badf4074dd45355452483e5e51048a4d36493ab92dae43d9b6d9504417a469919430c3d9e7bce9aec691317b799b0861ac0fe6ac9267b1344c68c5c64eeba952a7285000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028c51f1dfc2017fc529cf0cb288deceff62626bccfe9a09459ef4e4989ca4ba4823e74450f92695d1a7f4aeef9ef67f1838a908ce9d6a2d2648a567691d29341f20580c3a986b61d05f403a47b1d8ac45ea64d39c5d7cc5b609c14480afff40e6c10fdccf88a26cd51937374055195b34f6013763c6dc470cf2aa8c7687be129c34df12d397765e00de2b47b89b6f52f3c2184dec83415c8038327b95163b156af1eb9a7bae0ac1d69203e6ac1d68643b0f8063928e08eebb922227e7e985c0151de224e325a1bb039c91c174d54adc68352c8f673a04a3258dd13de0a330f14b26a0d42ae16cc794512b51dad4769ce0dc3d560b0785cbabba6ed5192a7a847f8b03924a01a60b7a6e6d620b7d6a3430afc1bd6103beb768decfa511e4c82735d9073767d00da7e3060a7ff46c852833eea3c609309b4284d23be8510106bd861fea51487dab70d0b112e9c553995d09f359bb1149f77788cce001c8c6ad1d64278c3edb9249f6c09ae2b20de9d3cb8db4f021ac0239e25ec79fc8a92b47ee18b48b25f7b9f6b6407b638a06302e45201d75db337861a3872fcfaefbbcad4b375c9dc41021c5147a78ca93537530f7b100940cb15ad483b43b5aaadfd08bb660000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100039e77dd013309dffb0774768acdcedce4a356c0dae50dc7df33a047c0397a7919687a94e985b43a7d5d0d558c82c6b3df1fea0f3341174d79eb5bcd698cc2f11ff0d67688213182da1752212b478f25a87d15f06c014f2200a54b44c23f5a5ac1aea5de68588bce94c2b4ea638a0afab76e70a97e68cf8f41afa8fcb348ace5b34869a6bcb75208f6cbdb62b6c4d856a32cc162577cf893ac286305c2cf749528e23ee93879bbd595fac0b8f0a59b0d2d657e3c8536e8e5e0716a77fc47a6841447ce459a6f8c8cde410163e766e602a6277c099afb249baf5158330352de44c67dc4805e04365e86cd955307711ac2c546ad379a9f1892313415f67bfbb7fab1827c54ab751ab05c8512afc9a229fb8d12ea1d90ea198c2fec8384763963b2f639e0451dae4aa3b5b6e71c1e17c89c80837c0237ed30be91ce76371c8d48c81654975896a8a13f8bd1c43415fca13c429f27e9de69c1979f8a4d5ffb10c62df958542622527142638430712977c6e7abe1a35ac4ff4ce103f1f757c3e8ca0b7f4537ea5cc000c4bb60937515790066aee1d3807af26e5b0763b1821fa12bfdd7710e4755c7f889e4256467bef5c7acdba0f3450debaaa7e6bd037b8ae2d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a354588e003f9d37943ba249f3ee00e2f67360db01dd2e5f65778bbacf97436b1c2370813ca632e8c850a38ef9c7f2aa14eb084a39c73cd9a72e1d25f770ebbeac1902817959a592d8dc9a6d47bb2f9d80d075015880497e0ee5d9e1c62606608293510adf97ebff4b96971b0f1acbb09e37053c173a668ec274b32fa6836865b96102b1e2b4d306c44d0a14e7d05d68a7bbb967bd1954c78ccd0cb6a1daabff0af03bc7e7ac00595687482f3edaa50aa8a34f537098b7dd52deecff179d79887acd5603a89656c019a3891054319f42bdf951aa6952f93902c6bca38a74eb24975de28344db38671ca861f8316fcc242ec71fa27cfad8d60c07746214712d3f670ea2ab4556afd64da4a6a8379cafd88689161fd20e46e3d1d1e971091f87d996c4a61852af1a476425c66483073502845d6b28eb64b6c69a8048822b00d72cb92d2d8639433a357dcfd8069a5bbc18c7249db06e04770fc597bac2999b35c5730d17f1996f6e009d4cf14c6e7c71d45b96796b559580e1aede8895ff1ba7f3f29ba5db9da7d23bcc3cc988d2b06f7cfb821c5d8e7dfc7426344799d4c29c3911506b0b90f3fd70a6fea616389c84982ebe08fc01fdc1eaea0b3494a4e238710000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000236ce0bffee550858cdd177b19a268d9b8b3b4f6987b5bb028329efea54be272219493584ec3e9a0050419f2957ffe0f408902e102a050f73ba5f36a5d6977c293e15c0ca838ff9e8262bea5a8554224fe6a939f8de2cf4c4152d9cef05951e80018930c3fde00272791dea236a237f8ca6dce86698a5c391f6717b434aeeeb50ec3f0d1c688720cfc708b23611749504b8246dc9d9839871e54629b07a5aac9bdd7b49b74f955750fd2d87feae38cf35d0d110e04ae68a728edf2207b8e578e30eafbb53d7a4f67f1ae8e53a311c8ac94b8e9d258ac1a117a12952ab3ded6e75c04bd9cc1e1998cf1fc91e414d2e6f7d21734e31c32b7fab96fa31c9681870231a07fee928906d7e62e7aa7311207f7ead6d661b5b651bb6ef936d9a3784c58b2938fcc9fb401fc6593421ed56f20edefe90291b33e49ed61f500d1238c57ae5b589d86d9c160af4dbaf1bee5ef0af4a1eae8819ea4a0746b4e9b711849495407506ba636fe0d649b751a002017c082d8f264526dd2669375d8c737ed2ad0838792774562ff932669d8fb10d8439976cee346f6e031e37309946eca5769d038e1869d153fd549dd5de2fe3b664c0d2abaed3ed2f48e80066041fdbcb2c297ce00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009965736f642cceaa69de3bccaa57e434171691d7520c30f0352b616f78743580653a07e8e1dccd3606c121d2c87340213adcf58d2b7deb3bc10d91d3878fcb7ba7fe010229560037ea0f4bc281b1f1b8fe34c8e92a7c430b6ae737dc5f0804e647176b39575b9904fbbc2098e34be8f464f8f8868ef14d76f53e85f23f0aab774c3106b40bee50f62792544b945b675966b5b689b815c2715529b88f14204a273ea15547cda6928c1fff2094a764aa062a651fe62f465ebb2d7467e8f139d54bc0c122673098161e3df94f44f6087f388e34dba4341065da54e5325b60c359ec9d6b2c1d6d3eed9cd232a03ce23c65f0f1adab9f4511d863c379cbbad800a51f6fcb4cfa9cde8e0e219ac35e75fbc0b94389ecf519b1921ab77e926c87711b615f1207dc642d6d501a5a7dd1324e7c11ddd08ee7753f5416a5a756cb454a38ea11c5fc27bf9c0e7ef92a89a63a2132b87a34eb8139bf0535d647b14243567a65117e3d03f5136781a94b63d59e4aefdbc78a56c52e7233c49d135167826ada1d64677098770f7a7e72d9b1d48ad817c23373ed7bb39bae1cde31e50fa266e88b10ed7538026b7ed49b3b8a4c721df4874a9a74f221070f240c083e2a57800fe2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083e55c46f1e63e877c4df368217a9f2d976147c2d83ad39e1975a947bb4c1129d1a1225cca98500eccf5adbbd897626e1797c09111002cba7697b117cf450e4ff7543134f7756f174f7d961f3fa552fc89ec0f28edb2cef558ce19470782ab614508ef9ae3d975e012456e3af55873b712c20b5a0199468cffe9792d97ad036225e0a5802c433165e1cfc541fdd7cc3cebd8df62afb8fd89722ba16ed7617dae9c76abb811c0f00c84e69edd707a118a2d8ac1ed67a1c71589df5fc65c3d15f8b0a280a737eb5bb59a63e2a3b3b35527194f3c85ea79066a92a2a81f9a1bbf0340f115f9f2814c0284ad348d8285b47f4db08834fce51cd3d0f6c59b86cd0ec562c4765973e3ade19aeb4ece0de9781b456cbceba640da132ffcbac82c7f70c584b4f0aebef94ad8ddd363f61cbace5a978fa7cd716c58a25939c01cc112ec8dad780029f71028f03bfb5bf2d5280c10a03c2e49652136468648ce87cfd3d80261317b8d2c2ceb50fe3ac6ef5bfd966cdc4f4423572d018041cfdddce861f907c0ac3652db94daba264a33c621d0659fe5a55951b29f5fe044da8f38d581762e3da90d3eafe7cfefac60eef42b205d3117b7772fc3041db66fcca621d98adce500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009af4356aff61c362a6780739268ec1ff09a0387bc57eb8686357771b3b85bd0a4307f0706f1d16315f8bce1c94f3a77bc76b11da77c331e2f0cd1de1367261628f1444099d70034a7d0ee512c44d4d8b413991e3a0d26bc4264078037abbe8d659fd38a68099d1252d4777b2ecf89bff4a2dd202a7e2b3fcf84a5940324e72a168eb0c55f0927f16d848111ce06b4cb539e197722f673a8c44c1438cd793a6fbe04aa417fa4ec4bbd29d822fcef4d3f77069a2a8af8b42250fb1fca879412bbb9d1d6cc0d313446e4c908183066523f5d030d6a26f67f22cf43d8a841ea7250a10750074bc06615e4e481f4318a450ba75a63879e49366248d849ab5d64b51ea4f08162edd1b51fb1fa48f986094ec70efe696a943639aebfe7c888e1ac8f68727545541c5fd5b8bcc499f5d10609aa5cc1966f8a1d20ed83b9eed2d62a3f19606ace7c7c75a2042f23b49653c8ac9ce286525712a23af2bf89cea836a788005218a10eefa273d178ea5f1aac7d7f3ecb96d690ab658ac95e30e679f607a4cc0c7e6dc295b8ee002ddc3732962c6d0cf7deee8440faff278efaef7b6456d87b811a8535e8271d959d7e697e19b3568b8f6e79c87bcd6521f6bc3d5b4c4f56b2a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5a581a3c250bc90279837df4955620281e519f7b69d61bb62944062f0f7285d32fef6dae997e6f11d2f2d4da40ceb6b7b4847b1109e0cf22f343647dbd128991371e1bb98dbcd3cfa78751689b39bebbeb8bd4ac8996b71966da0ad4ff4c5f37e3ecb6a139f72d600cb9dc1b56318f034bfffa0e6a3d6a1e008ba4b9c62c25357ffd3cc18f36de533f35c7f2c70086ad4b31a273f857980f38f5a5a27441a79e064b501982190a5bf4aea28c95ce392cfdc684f4a546092561b7c47fc83af55bd2cae42002f7bbef41d82e765d1ff55ffda3382e231ff63a06e3147816f72e3dd721600d7f5259ed39a8d94c35ae553b139694e4f893ddb209ffb1cd58d52293de471c67ea5ea3b77248766314a0421460f5d7b6cb4147287f4db22713e2539056a60c7d006bb12912d0e998124f8cbfe0ce6dc2a6b3acb76af49423befa68152b82cbc8a343fa2f8d6c6911411413e4799fb0ce56f976afa14b98f717b43a1f05a513fbc32a1ad5e5d918394f6e43534affa38fe9f3dffec929f54633d518c5422de82f4b4d226cf156a75b549acd96f139bc3e4e8f9582794e809ac0b0ec9b7bb773845cab93d3906a89a8f3db67c3ff12c2744a5731b5e5e6453fab094e600000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484013009bffe52c20e24544d31e2150d5a1fb59b1ace717350054ced184ced047cb294fe03b2ab8155764d6a50793135e98f0e9d4149a61d9a0ea85dd2476d898a104e23cbfe80bb18f43205b697bd96364df2ed3540c72fde3f7949d242716a92f1bde5f562046d157ffe5e1af95b24b412a2c6cc566fb3f8cd45ecca31225a07b1425f1e11bbc17e294d1eb420ddca406be7d5617966da1749fa4023e8a3eeeee0898be77ef571c04273c49151643273b63247864c5e6856ce47c8e21ca2d8a0d278f2e666fee000ea55b16ae9b042ee0f7ec41294742c0d13c74974cd0064d460220b22e50254c02e8af374346022183329e9055e2026cb932cc15f86cd0c0382d900d60fe793efffeab57be704a339b7cef997a9712b65797165361ffd838890e505239958ac8fc380d617550094b5fcc380ecf83df9553bb33fb5fc19c44490b2c8635f5c6e862d14422b23009f94eeb3a53b1cfd6e72e9af6a61ab438a84e1c7d6e390789843b671be79e3b6c74d43d7b423d6a23d4bec04e11190bfd893920e8135490664ed8940d6eef4068a905bda1fa5f5c336941f150b847dbf29e70050fb11b30ca4e256d002c2a313a8dac5f04e34d5afd261503864f2d1a73795e0f40c706943de3445717971d58d5d151d0f7e267dfacaf7d334797c2461f763808279dd410be96fd38a6d04dc97be0b4c9dd48fe96e76c947880083b2041524d200f308cf666d94dcbe907856225693683f0834580ada1f69b3d496f00df7d032652fe8596164a1da75c862ffecd0e7187e00cb0cbfb70bbf65588f6116ea479270ba26f59cfb430be711362b7351defc3d55cf6ccb181f829a21e17c9fa674700102b3989936ca6124465b77414a12605ae5e0473b775586e5f97ef18492d8b00beece77c433f0fecd135dd4bb50924694aa9f587dd26b30d9005729cc778360fea7891d2e4626ad2319d93826bbcb4a4d8cae937aa237fcf1a1bcd2cd73688128b7f6fe913344651f003d20320e81e7775b33c9233f686ef42c023ea68be062b0f690448d954622bd11167198a0e1343509595841ff36ae0969ab7443805cf1c836091648f5854e0d7ade6308e668501f272762a7c27af6be2986bd2e940a2119a68083b7ccf94d81294d8aef563c42f6b549358d59845ee658556bc92dc84160f0b490a61d2e617dbe7470154ce74e285ce3a1b593c37be52f6f86476910503c1b17cb8bf550f669138009c74002f6d4be483db7d0211dda5c34a806d316930321f8c1a4608fbf661ae9e0e06a719c46ecc6246ff0291a298e8ebd35d0e20063b2b8736ee74acf240b4b246a4db9c3657b6996c2f50d861cc7c630d3f0a6911a839ea876e5a9253918cf705a81052455671119b8ac91651fbb91afda44d43074153c1a2517677aa75f766b56b6ff699c209a8edef0abb853a941defac2d500474aed24649d44a1967214919a822e9c129a920d64d909efba1ac612852b82323bca5896fd02018671e252ac9e4a3b0fc3542726ea6f4e9cc6f195d49c15422204f8eb356dd2f529c2392b426e5cf26cd3a2312848b31fe4de76528076ca10010cbcfa94520e96924c742d9996b7e4b6275f626044a7e15499aca6ca8b698d91f9f3adcf7e8b2901ab1b1bbad5563d9d6c04ee14d09ec3dbcabb76da3c3834407bfc532e3166e2b728f0cfc47fdce5336b9e8332c61a75c72208c7e1eecc41a14b96efbabcc6a7e2b3f560217061db931705d30b9457a1fe3084e5f3a065bed13fbf75aa62456e2e033ce2904a05a73c05144d48a195522abc80c01d1aa6602062038b5555b559132cd9a975d399e4fa357701d045750fd1a19502730744d4e0a31e5a1964ae51715127aba786df4888f45d6629a0306d9b83371ae90349edd203a2f45b0263567192b2f41ea7fb35bbd1bf75ff84522f0bf63fc1fbbb956660b9742bf038603e83c7f5cf013e95a844c81b18e6fc0291bc08d9f839cb29dca2c98ca3595258a4e0747dbfbabcc54face645d6cae0857762651fcbe1b1de4b30549c972dddf32bc9db12ab9ce6214ce7a8126786d0cb6e6a25c69c1b420888e2b55d67c873d64c40b6fb0dd99f695a2af9c04699fff9a7d96f7522d23a2c8cf12af1c5dfa37f144d6ad3a893f443760e8e8f25436e0cdd1685cc742d7ea0e4e28e1eaf5baf8cd8ce19ef8856d77276607577b7370c35b0c15d6e15dac7f28fd08c936878c09165a2b66491980abe3a69c12740d9f3bb856de770404776a2cc8125a2867276c3f43edb6310cda635e63b5916685ea55936aff0fe0ec47fcd5fe0ba7159020110992f7ac44a328bbb509298277b0adbcd6263c2907b822bb898f0efa08cc9595596d1eab479a3af70d1279f726e5883d299673db02d61942176b3019be12daccef55cfe9f0ef15c500559b4556a56b828544f104663b7bcad3ec091e82cbe49aae794787bab11a0c5d9cdd3ee5d7ab8710142b9fa4286264d3d5089b86f8b405b43b8d88bcadb30d788827beaf3dd08cf9a555d75af61e4126491f6f8b8ae39e43898092cddd444a620f930331f15b3ead6af40199c3803bbf3b042742f67dc2a988d95228d69991c18bda2a3c5d54bac399d5fd295bd1d1913305125f594ac8a1604627e32718dd06149b1ced702c15dc0169eda62aea48aa9e10e3d2f1e8c3a20c9c810c7aa5a90942e1c69f62fddd11cfd001574333ee3e4a2d5832ecdedb0ced129b742d199b5365b7942448b66b89305b45df0c4160931b135d5db0cdd406bc059b9947e162259dc71b042cef133b3e9fead3cf8864718c1c97095d84e5e8819ea7de1aacdd69c912ce368e3b134feb0597663e5b8e65c81b5fd1d5e28d67beb92f982a6519ed8d6d7216bc558b22c145880aea6f82b6f94011b70c892adad9a4d4950f25f663dd2c12ffd69ca8dd9ffae62d801ec195d28b1cb7a92b5f8a04ed1c19bfdf315cdc8020d46bace7eee42bf75b549696db36861c115d38e4a88bc451a20151c2038d67fede17b8701274df171d3ff47e8396a51565dc89d1aa14c4b3e75fe0b8be6795df63197199d23b9ce34f4f52fd0aa42127c6afa3608399141439cf607980bc017329343a71878d9eb1eed538dcc092b20af49f1eaaa4f7ff7ba1d9ede7ef0d75bd201274d1ed8cb0ced424d1d00955fc19f24cfccd26f1bd6fe1654c3a460f3cc69ac24b7e26bfb983818dfbea0ffede1d6b7d8fddd93524459a91b2773a44fc74545bb8c11fee6c811bef7af6f44d8201173eee00e779eca675438e73242a352eb093f79742fb20dfb4ef6aefe5e4ac1b2d018f79b9583489ae1b13c3ba1ff06a34f685bb53ae7a958bd6c58bbe40a42de25a9bc87971e0c102693d0cc6f78f9087aedc511e2b73c42e08515cf92b0910dfa0a12f4da36a15cb681194118cd171031dc0d42598b335d295c20c3a7f8700efb434d2eadd099a98be05ad347033a1d2c2d36c5b6246382afabeb4d90556159f2f2f49de2388a94f098b1e9c8618ce304fa4a77313812496dc2d999db02a16ff178fc10db128181bd0803553c7d2b52b75abf1081d14957afbccadba520110c42ac51cebc1ea3552524ce429011575d733e574782a4d835821f40f37ed7014ba9aec95dc09aaa30a60b07d8c9f4b4c801f7c4d75a7d1e756bc8d6977c4ca14beb9f66c3f3b68bc04359081c4b5aeea671371d3ec7ebe106e772bbff31d5d07cf40d0c8a7a0cdb0e10e80af67ee92c29d78658ddb792d1dfc6aa5237faeee0e8b87eff240525bce28ea2ad71955ba135e4191f9d3dc88e27e864041fd57af0016b71544b544a2451dbff40a7e966f066cba28dec6372fa80b2533266fcb7e2650f8e75eb0976577923c4b4a37637cffff357e00f075838323fc1a9ff297ac2bdc8fcb199b66f9b2d28364b051ffb950380d2f348532d05343a793710d06aa04b9d95b95876a8300048147a9d3a4599a27e09b3fa81066b2728da3d1bbd927034704b05c616678ca4613c2db7f6beb055192f7ae3c65fd8ae7a1b6c6a036302fde96a4e129c978c94e0888c231be7d1e9ad7cf078d255878cdc7b073daaa722e1f2468ba43066502af34ba5cd9aa77fed213e0aff97e66082aeee117a9c9d32ce14130171f0a06322f5fce1e94e4fd8f1594d6827ffa9e0eef1613ec4ae27814524e84eb9ef34a0b07f5af0be3e7ab1bd23f4d9f3d103992204b13f82d956a137b62fb368aed2934922118be82d18d7d0cd9c7c546aaa549223d88f8a2863f16955c01bf43103c45c89112419854c27c611340aa8ea5e80e5c89b2770129990b8cec17cd9ece77d4cea9263ddd756598562609ab9b7a67ba8aa35d69e94def1ddff2f16475f95520fab34f4d2df9d67c6ee4fd27f1d20f5d51a7780d94542a2164ca228ca780c5609aa60053b46f8f2bf69f8a2a56abd2d4405bb3acf25e5423f949c2b1c2ecba49cd6e984d31d007a328fd5f84588bf2b46034e92154192b0a4d46d45820461f206b9058f8701a1c5ce04c2c774e7d657458d31f8d15e8712a302f8ce40e0626731c1b08fae23704c5e7fc2fa942db3b5441db8bada9b17f091f25808daf40199c42072a674aca1387cb9bdbc542ce85112c5e4f481214b224bc65eac53bb0072c0059f312886deda3d7d04544705afb4b90d853685605ad0f0089352689de942d7e68c1998cae329436378e2d5845e9ddb23119f9c428540f2de0609de9ff2b11adfd0b09af68909690008263d3ae4f2a1a54489a65461c21ea90a9814af75e4604efad47588cd688f06aaf9096b5eb2ea3b746a93ee1652bc1a493553fc97cb26ee9614779d1e948cb8393bf1ceea9ca4abd5b4844d7c3128d8831b4d8c7b39459f6a913855d3f2670171836d121d996f85e8ff5b0cfaf301cbdec77fb717185056a35533d05d1b72c60b70e34e5a3dc0382eacf5637e80b80cc8617882fd55205926c5e4a2ac6cbfa41b522833ca2a46e7ad4b9f10baa1b447edbb4f629c4ce3a7e46fca236a3163da5d7b572446f71b86a7455185cf516b63333b6289895182a6b6385587b859d2265e8b2100303f30acba81f30ee0f29917c1dcc6435d4726ffe21334a765c6198380cc7b82120338433d2ee548f9c134158d4b5122cd9d091c8711986b2a75492f85fb62741e935b6524dbe4f71171b01d969c29b73d9b6c3a63126e153a7cdb33ecd03c8376859156a71316db2022ca712fa3cf11f33a7c26d59b2cdfacdd020b8bb107d60b3acd1cab026f04cf026f8851eeb441d7f0a2a0b66676f41d067ee694ebfbc0835580c1472366280231a14e05117d488915c98d2314e97aa0942035c8831bb087219e3fd593c04611d114088acc85694ac62b41263f33591fafbcee1c4f7ae16eb407e669a2db80cf52baf8b8882a8467dc57c0e16066f43b74d075c9c8004f51c90cdd90dc9e7cbf72fe16488f8ed6621dbbd5910f0b116895529031d0288a639a1b70f66fe122f660cb381f423e1ea916543fd43dc0ea32c6e57eb50380924d1ab585872995a21120e3dfd5620893ab45ce292c6fc2362f9ef7bc7ecd30770428b6269e0e6761f76002098a97259c8d5f833491aba16049e19b2b5c004061579ed4ea046ddf7d4f429d57377406f650ac9554c2d1a0f0ef1e639c3fe360c1ffe0f6b10f4ab86214b0ba7a09b64a0f2e7c9e6364d69dff395f5d335660a94d3fcd183b566903a2cf30e1f1f88c42972cf46530ded38bcabade19ca2cfa21074ed4cbc19593aa5d6be20553f018e959f56ad4e8c163aa40d809e67aed7441922ac38636a3d3e09e97c003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000054118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000540d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000540a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000540b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000005429a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000054141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000005425e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000005412978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000542daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000054189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000541159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000005405ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000005405c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000005414d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000005403db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000542ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000541213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000541ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000005414fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000542b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000054305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000054280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000054223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000005417a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000005408858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000542618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000540f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000540e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000054172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000540b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000005405bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000054137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000542e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000542297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000542608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000005418373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000540422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000054204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000540afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000541998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000005428d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000541da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000005421d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000540ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000540e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000054107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000542f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000005409726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000005424f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000005403c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000541fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000054205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000005425110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000054283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000005421cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000054094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000540c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000541f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000542421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000541fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000541bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000054304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000054000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e7a460d9769268fe1adebf5a13c8c6236fa3fcb407f059035bf439a4e7b6fdae4e72e5bf8e4998bd22106455d33d730532858edd152bea5531bba7a5dff202498c642f034df522ae3af9751ecb26d7ba66f55f849d06b887b62a208c200f41c936cfbec731d50a83049128d3f9d083e126816162f3602b905547b3298fb423456757b5fb2f9babfb1f040d96a65dd556c078250ef6574d5f36bb801ed754a45199eac6f25aeebe683b0476ccdf58820b177af74e30731a7ead1d19d1a19bb2448f804a84e0ae2ad2904212a86f23c955b87740ae5e11e7dc610b997dcb74db32dddf66283bb39f37bb9eb4377329fc0edc6c59823003c275213b9a6fbfeb92a6f49678bc4d3981f375533ae158d67bacf788cdb96ca30e8a47dfeb384d4ffb88af403990344d5b20722a28ee8f2829cc5b676363e726f27377e15b2786a455e3122ddc0266c0b134c4f1522804c1d797b22dd6094756353bf56aeac14ef95b7c936be8af283873e1368d22fe6a02ed5a8d95f1678f641dfda98b66dc43f766740f0c4c6f9e30ac5a475c93cd96d1a76feb8f93c4a31da8b59b60e5f4ae805fbb536e26643833bfe05157b2cc382ceaef31a6c7be4496fbe97e50a396773af4100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a8ee2529b033977ad42a50eec5f06935a1dad4ec00f38dde203f0034680233a1f25603211f65a03a783e7f69e84f77856d7c645db9693494b1d7bd6f81e9cbbbf9d0828597d8e9c8e9b326c938e36caca2ba427a2fb472395b1371c50bdf4a06289dbf2005382e27fa7f70f234769dea6221bc273f0e920a00858ffc3e979d741a8e8a63f8e77581c659b8bfdd6130f8dca8d882ef969731d4032d49f8b0864d464367d7c4a2a782c721f16d56bc99911b9a890e1d4b02494671914fa7a835a512096bd18ed08302b5cf0feaca453467d82f1a2280bb84a1f40c274f52f93f7fa99177809a0b442814994146fe291826a7a2021c126c84bff8b012c4262adc3033c59f8554aa55f0460feb8e1c8c927bd7fbbe7d8c0fc3f8130b12ba969429b8b97298487720db0fb57cc8520ac3c6c677d71c4e129ea3a75829197bfa2c2462c16f4631e19ef9275664119d2f12b5b1ff0b100ae2cc284869cfba9f876561cd61b86732fc27e5d30977ffbe48977fd9689de8b73049a9b1baa41a3d7a622a93fd4dc0da88581e061acb15af71295a1654f3836093ba2aaaa2eb85edbb2cb93df4fe24d02a8f7402d72c39e9e2e58928d0fb3668fa3f96c2404ab3aa30adc600000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0cc21fd82ec6b8a9f748512efe89b82e2873761d28525035da0152ecbf84b492136738d8451c6253d1a5fb8a629470e61eee975eed0593fdca1c6908148fe5f053ab3281d7f5a63e74f4cb25d36f658ec69ec24516d69097e0541b1cf872738981364502927676130f822b19eac8d816c5247f23d13bc4bbdb2b6b83f95416f9507e6f1ac325a8649106dc7aa0f3e5fd641febd589dd205f928ca6ce4b81b78344f38a411dc719d31b24d98706d104dd9407c573471a639549bd7cb66879d40663f716c688fad399b0efa1dc261ca73c395ffe911dbcaf2372c21a69b668a326d908884cd3e694f2eb4c7efc660425d19db808698aabd61faf425f6f26d66d8e4b0214f45e622386b268cb54c45d5e75ef42704c51f339e87d89ad028fe662a78b2afa470371f1614500b67afd7518e5df2eae17b9f0335deafa401aedc61f9a7658bbb4d3574976f136ad8214dc521037ad0b4c0d1261b7f59d7980d29770139922b60b03b55023b47dc3df47fc542f4800b54b7f78c34c1dbd9128c42b753ab442cd14771bb425d53aeaafac6355c2c6ecd73015c0e6e5035b80eb66ca839ad956d36ff9204ab356b16254a3d8f586027e725dc274a1c59972d824507a1fd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041d49c1a141c45ce4f29167956621dc43246b10e95989f349ccfbfbcac1e3ba9552cd284e07c0017543586a95dd35238a3aec48fd83844ce9da62282e3db4017c1ecf5acb2997c35f97851be77506afc63f844f19091d4773a8b7e7c116d643ce097d092fda02adc3e552f598cc621bb4a6823afa81f1a9abd2d8f45ea4536757a4675b10020435217057d0364873296468e5d03c92711b9f38855116db0c954eaf8084a69ddcc8b90dfe2fda1bd5d424c13600b9c936398386f13205622009f17d7e7b862de479caa6bd421d0e23c26b44239093638ccb4983ed8e8a07dae87f5ea6703c86e2788e706208e30c9c7b06fc40ce322981164c06330a7dcfc791c3874df993af271a1b9477fca9e14c6340bc7101993a2b1e345410ad5f8993d13f6c1832e3a24f65b5525ce0fbbead38e7056edc137fb4b8067aaac64e3ac172b5b8b60121b4b06daec8be993ec44e39a13d37a4788ece36f844b0a0ebe220abfe3b5d45ede590845505bb102a1b1c76443ea3ae27178967efd59cfa0ea689295e1f73e699782f5b25536b8e3cc15778445c5a1ddedd268514b2a8a5bf2700f6cacb767760cd4c32cbe74303088a426f8e005a07dc950792f3d0d5130e4b2d1800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f53e0da6234da4a21391547cdc839c7ede032e1fa490d583d44eb6eb94b62d1635e16bd16b4ee931eeeec4f160100e257ae6a3f66a15a3552a1b3a9cf1dec98ad43d9fac79b0627441c4d73b62f63ac905ed9487b11b11fec74261900c78a55672c7a5bbe4b243a09199e5724c264e879d89c9000357f6262538c9117dc7fe22ececab54b7c23ae5d990a49bdfd9a8214ffb3592888afab9071cf5b4095f6e26a13e0cb2ebe185f5e7fa53b6c02e0379a87ee74e8e3a8167185398b4aeb5899591150e3ed8c7760c462e0311b9f20e95928b91e954a4a16ba830765a1d98018b7524173993cf85ee5d4d8e482ab987798cb27f896d32f70f9260c6b18dccb87e9b7be2f209767d26f2452fa6a222db7c8a1199e7178edccee498339e0f95ffe181eb9600d1746cb883c2462a53342c85e7d4d4547172a80eec63d66d26e117d656e4ddbee1af4a82c665185bee081d0b23dc2e288ddd29125bfb74e40175a189a74607bb0619cc77752a1362023ea206537770d51218c05fbd6993e6dbb8969e393a65cda6e2b5df77d4114eff0163e2e3e47a3b7b1d4ded7f2ad9eabd586bf357899b9991020d8e44409b57ee5beff1e219e7e47d0cf983b40a3a110b59e8800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002eafbcb407a4ed6d20899e8ad53eccb83e6ab2ea60bdc8c0c4e0f5bc5371423b000b9eae030ac6e75fe4db6e6499ad8c4f244d7293d2af1c847e6b5a1c3590a43205c9d81e0e3af1bd56d3c8b0ef720f6d8d3445c47c60863da07c12e5e247503b1800e6fb7ed84d7b650e40518ab2ec7a02a524bbf20229c677a9f6eabec8e62f53b4e7a0aae449e4793885b27b177edcf44288a1f5e342046d9a5d0c55507862fe306aaa910a28985c51d89040a149152f3ed891d25ca1a1c52cbf9dfb8e6c643ba0b9eae2e465c782121313578d5e79f98ebbaad3d3aed8b8cc7ef93d432ff08f46af7b67e042eadfbe3b09f89507f5e10b8abbda2a37805bcbff8bb1975c8b5ff52798c6d9d7824a94de0dfe1075b759f631e9010a16aa20f3ffedcc115e3daed397e064b9c92dbb8c49e4d0ad3dd057bd0581894bdad14fa4bfb0f3c71fa6f7d446ab7186d3d34497d97a2564c364261a44eaf6cfab9bc5191d01f74bbf890f331b348bb8eba00863d084df72549b33a6b92d482e75fedeb83a0a53b5f0b33eaa98723f18d985990c2344fff7ce6763269cb2339cab0aeaa7a9ba36273e5f2f548245e615a2aba1ee2955925c3ae445b61f19e7bb86853572826ac9505200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d16fd142865948025127c1639af49741ce40fed7f41d837b0c4dd5c117fc9d40cbc36dee12430c1c688e85ba4909171f18ee5391bdb3b6486aa4abf7eb1dcd748d28f4850193a30d253f9bd3213cd4c5f6990d6a4b0956e2d3dc7f81bb96ad932ffd94480ec90a43a5f39be4cc14f96c41eb55647a155333d154ba2d80404f37d280a252486a0f9e380f35b6a43f03dbefa3e3d4f4fc3063a69a3ae77ab952ef4872c7a9e4f13e7b830137197baef1630be87eba8d6368eb8ed916738f44a47d8f7818cd235787ae6d27c78bcc16eeaec7015693f93840e679c7e70d6eb3511b90a9089f10bff52f37a965448ea6fa25fa158112b39b9e8b28336bdb6162dfddae2ed78ac746f817d116f24765a2de59d40f084b94565aced0ba3f5e7d7ce88831fbe1adb00ed8755cc280064d29ff8d6b21797d5faf9c592919f6792133fb7d17a64e962d710cc4aec20984c9c4753d7d94eccc446edbc0cda4b1e06ff2a043683a3c69297466984379a03180acc2f53953336ca1da744c0894286a5f5a4276430e1d410531b9ae70e04f1ef6b4c7be72a6da68bde9c56b4783d164a726deb2381ab0ff5f0c57a77bb9718310e89769a1be54aa9ee3f85a14d05e40bb3df150000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000199d22e1a79f5dc3f3a206b061847fc508a9d7d5b60ed435c965232ce00558ee402577dfb48d86b6d2756212dbae57fe87a979c0f9a511837da59a1a8c098ece89c6fdcf196b1ff66a4cebeb8b212253f8a884f74a7bc82ce36d02ea645c0c9c22f54e29a38ffd52280d8a312a964d47686beec4f289f201d5cef8b5faafab3b7856920994f5e62b1a16081460fc934a4a28ee082bdba9a797e3476cf424bddb42d7489fbc125fc48d595758e5b670171aeada4522b019a05c08f3c0b79ba7e8899f89a14ebe039d32ec8035f6948aa80c1afac6c0ce9db0157b5492db8afdd31305f9224201ec4536f90be318734d9f4089335e48b7d73cd910058177998efccef7b721caca821cf2d465c96ffcb7fe1302c09463256109ba0928aaef7787f190ed565804d91fc25650c47363097e3acdd86cf292ab0a6eb30c45365c86a6680229af1891ad589bada5565475b78499a3eaa156e05c28ce09fac0e5832aa9b1ab18423bd8a8d82c8840adcf9d60cd28f0b2de51ea2e0e752fe02d6f36254504c461c7fb32ff12c1038f6840a527b1a13a1f7e1d6d25224eff702f757f58d95b43cbace5f6cb4de17adcd3376e1eeae662757eb36f836dfe1671e8e4b81b1b000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0bb2b39e4d359349a829e55dfe27b363d90453d3c13bbe12ed7631ae2f0da3539f30bb916794c4bed8a6b1bec00f6965be0d1bfcc1f6f4db0e0746bda8e26c622f99c9f50e10e35ded5aa40c1b076a3cd15a1fcad58ff8ba8dbd272f3332a21a950df52216466769dbfd5761b9823f72afd9d331b3d9cde7f74b80f2f6b8709a5f69d99128aa4f3e089d574fb05f5d1ea785ffa5dec8f29dc327d49c71168ed6f69c49b03d8e447b29f6f86b99df7abb92647da1680d191cae73cf224209421eb57769d196f268f90de345d14d4bce9f7a36250472191a6a417fea41bc59ad51b52a650d2f336fd1c6f56a920b3e95f56ad391fdae33ff1cac50fb1aeeb3c7df660720ce4b1434b55ce46fff148301e5bac39bc14b36507e7e6e33fc67e1c523a260b7b0e0abfe3b2826091d1c9b0ee2dc41c0b0590a0802046207978c1ca8afeeb59cef843799d6526204561109a02daff16589d695d6bd9f28fc535e2b1d6a769a8edf9bcf64be54b25c135afdeb5804c93cd16e64873d3e8a46f628bdadf021d130f68d315b91ac3e33e2975f0336f1b6a69e42f6a1d5363f28fce866ee475e33276243d90750fe1cbc4b92ba6d2c39802ef9a2a680dc5e8a911eddb54d300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009778e7177af878f4479622b74c5aa8b83463a02a254a6ca121c542b1bd4db36470ce27126c406bed645eedaa7daaf7f84f2c938b36fce7980bf152eeb2a29371aa07373be7a73a1a53186d674701b9a19fbc6819223b1549e0c4dd261314ba18c5ea25f4b0d2ddf19a1c13864b064e7d50763b76ddcfbfb2f3d6a66f6013a43b72f78bc4749afb31bf3e13d1bb1d50502ec0d9923cc8b751927a88a51763c869070e8fabee179df7cd01b9c39932e4fdad27cba2ec839056da86f662fd449f3cd4a2e20af271cf9b3009b9ee831e8f97eb48e57e046cf6e7055ea54883eb24d37888696ba70b7c28d6cff68cc071564d0b8c73008b004f0ec53663a3aa8005d932b3e37a3e0aa6d16807596dd96c247e509cc5b4c7ade6300eac368a3014019cb29504b894a06d520d7f0ca6d03563382ff20c8dc6b074760f89cdec9efd8b63ea82e080cc7422e35c79a8b39e36deee9a36a39f31cd2af145b93a28d6600527a46eb642b719f2070dd685be563f5215609e31b4b7f9d948243336664fd530f8d0c77f2c6bf6689138a4c621a1589ff40ca089012fee913321e675549e6425d13e46071bf9f15514af4cc515d637003715dc084272fda20d15242780ae59c02a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095d32ac3ce1b910aad6535453e6fd1522708c4b9d1ba7c442164f115cf9d3c1da5cfa4da1d99c456b24d8f16d0df803e059c344119051f6d4d7d022ffe045da26ee2effc7c91c9adc5c9ce14afc2521bbf75e23c71d469c3887d307daa2832dd902ff6dda76ed5d95649a268133dc1e199cd05e7c07772fc3017f43222f8607eeee61c4450227115e1cf02b6523d3eff0598b9c9fd735d83a02df7760b54d76622f1744d9293654561c553d9f4dd998d430a491cc7ed235a45555567472e29039e909c759fcfc4dd68a841f391906e9ee54fca1c6eaee156c57ec1d660627f14aec87466e7be8c057eb2e9646b1ff2a2ad1393abc3ee0f0b2fc498757eed1956b3e667256d7ac766f288d744797beb42dbc383a631172dece172b86f8bc2a575739099959eb7d0a6b52289ca40558a4d57797499a3b2331bd58355e89b3fa88e8440321709384d2ea35d25b3816d147f93f547432281227a88924b748b5da78e332dd57dbec16af1a37b7a621fa584b89aea6d4325e12343d4fdbad0c293be56f36c58f6eb99918aa36533548564eb62af3bc168a08ffb3d69358931769f75221e325c15dd75b908e38c4bf101c015751e77a646c805b6cbbbb60348524524e60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000940469f2751642da58b92cb04d0ca043340647807104683765a38b4ae4dadec0519f133bcc554957eb9d76b2cabad7b9355b06a0a935d321fdb4acba26502568f2420c0d818b1604154148dc2fac518c5bba3f99b061714802296a9e998d7a46c6297c36bfa6e7cad666d937ecdf09f4e010b8f7704962fac3aa24fa540c9196c466e6f3ea2485ab35cf2e3bb6063391de3e395f7e0cd94a11b588059a417fa1786d46a580639ac0d9ac0d555f8b00aeaa3b28afe8596a2275f62c6bfd110b2ac2533789a5e6dff417a8d45b9ad109764be7f8632a1a89745137ceed860e4142e747935700ec232080edeea699054853c4e8d11455573b478f3d49d6d3e4aa719930fc6fc5a16199fac71bbe077e9ed4bc534e30ac1bd7d1e46172ba19817fa6c1d46d82831f1e028038514ffc18b662370f57aeebe9cef2bbc82e1ca8d85fd608e8cf0d4caa77638c15f644fe12072c9346833964b58e0317eff7b652a45423885d86f1d74d0b1608e10bcbe4d40c176e56cc3c3b0fba51a1906a203fe658040a0561dfb463b30c30b8fe8573e5276d88e4451bd993efdf74b010375aca7ae94ae6b10eb91bd2f5cf22eef21690f73e8f8f67df8ceb3e1ed36ba25d4fe91c1b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094b1b2db370294c0a64d8e9883df33440f076a39f473dd5547b9f108dd72065e1d1cacbd492ee7ff1500ac6459b77070fc3fc28fc02bdf68e5fc1999dcf1c399df77ec909b3ea2b3d64db6e5d8f4c5982460f2faf008820ae888d455f8a8e2fbde4c5691a001c8e7045c6a973042884918928ab171633fb7f7f4208730572c71e938df8940916d23a0c08afaabc7658dfa51ce4ca4adcf532bc2e10c5c171a3b31cc5269d9966cb255852418f4f2933c699694b1bbea7df87263fc4e35936e60bd12a3c7b3be2a1a4da48569790e1584f0926b5faa0d549d3f4eb93d94334962bf19c8dd0712933e3f96b4ac4a85afdbdb92f39dfd9a55c9b41a1063e45609373461ee0277f88346777f08ba3c170b8917d4a4d9a19a866844ed5430dce60d1f7c59ebb4edffe1cbfd78b1de0f9fdd0304c0bcb7c201807fd0877bf625a7a623bdb1599f7d9e8d8d18e25f0ccbfafec4b3cc7cfa008d2eff0eb8371d0d7917f7f5195c9ddaa25ed9acefc652dc6e27e1d1cf3d4e69b8305b82a60011be602c2fae0b903ff68dfae42e4f93ab4aead374ad7d9043943b27b4d9c0d27d3e8a8c0519985b87b60781eac93b6c94b367d0d24414af3e4e4f44f0c5e6e3be31549a6c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008feae9a3b7adc51246fe9d0083e77b0023258f3cb79da979ae06c6b4615bca216853fabc7600fe8c4d9b19b8dd8e5226ae6cd6764c9ba87f0f3bc7c6c15ed4f121d07e38cf925a87da9beee9e8c3953d5a17603d0080c7f07589d4f9ddbe0470514b2b1770455e9bb15cfc1e1a3928f4047a25f210b52295317ef4e8415a8d80bc68105d4e2761345dd0c61691e2c4b9efec53cc36909cc4ddc56969fbd90cf425163c51557a453e497d3ef68a825bda2d748340c9d6be81ff3ca1786cc8c6af7e3b9f4952b7f625aa6d01ece21e78b82b082634ab9ee81a8c618aeb19f9b2726099ef23447791a5637c2b27a35237d6b1be2c32f08fe67c4329b68eb7cea9e2085f17062e910bf75475cc62e396dbeec1469628c3d445360fec26e67d7423ac011843e50d3ecff2b6b4ba2fa459921e2b9bd8a8a44f061f569a2b881ef454c3bdb0e6254f5a78493fb264486cd2f23332d7e25804d030b0cde9b832640e858974587cb665181973e8381e83fd989723d82d72fc4c1db0e98f455f7782f5de258328c3996ffbbedb8394a35dedfb51654bb1420a627f1069be8da5e614a7be322394c54a87bd4376b154c561c75745dd502688baf41fc6db44763ddd815b55300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ad515b577f993ce9ff7388e0d12fb26d9dc769329c5034d6d3cf58193602b72b7646ecbd396dafd2129743aaf5d0b2082db4dd982fca2fd03ed877a41c887863407c42acf3e8ba665e592eae2b4cec41eb841f0c5ad41276a253ac164ba35e5d0a4d07a27d1f4606dcbdfc758da15309f9e189e0dbac32e2d196a99630ce83fca05274dae622e799ae62acbed8cd906e1d8134770f5dee7630902d1805e166bc50499ed64654b1f22c57839cad3ace02c8c04b30f81e4b421853210351a39a930fa7f4e99ca35c410d66d3d7008612f89269a3a2dbc2ac20ad393a10668ff68d2d0369907e778a6188280f59bcea155ec84cd1a8cfe8ce53fb5d1319176ac4f7ae27dab8807ff6314a3087b9aa47b3ec237efb584883c4906188d7f4e9a6f786a4d6fdc473babc309b55029ec7a3f2fc6703980da182af2fb7135848465cb18f11bff8d74b34692a9c7e3771f5f351c469a49262a2d811ffc30bf55af734390909dc7b42207c1c73e0a5c46d0fb1ae700d7acb63b80a47247efe078ba8d7dd6ac063cb075b9d4d4f5a1ef9caf5997e7e801e85d55e7020d28372523c08de123ee312b750be4dc34fd10285f819c911d8994ab9860a560df7a778032a7e7e6d50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae39b0629d690b3418f73c6ab77dae09371e09bd6bc59b2b37533808763973336d4c2eeecf20d432a3459d1e8ba4ea6227a35165e922a8290ab4963a39eafa821a455a2ada3efb1eac60c4d71915ad226330faa5e9f4ee50e7972f65d2ec672dbcfbff93f516fbcad8ccf52be67d2bb0677c2e54fe99cf8ef1697bb38d91e125e3dcbae0c3da2f9c1dd1afb045407b78d7cf487e43bbb2663447a9f88735ddcdbd5aee585f9650aee3117c24b1645436c99673b1a3ed10fb7a646dca8cb7087c634f71b4c673398e06a7787234a4dca2122baf0bfc28d4a6ea45b9368c0c9bfb47d603f851657976397eeb4a19ed94b0499a31a617e2adac598cd5fbef41eb4ab2555f5488a47ddbfaca47a7f92bc40f50b997718c3f06c600345f6d781ee0e04d3033823af1627028e1b0f0ecb8412751da3d275f675e3064317c5b92d27d8192fd7ceb650742d893a9ede28abbb8a55b1165573250b4d9db4ccabed7bc2ce4bcc7e6eca3dd251e6b7ed84fe2a6d0312bc1ccb86ee58520fbb7b0a0b67e3519ef954b40152b02d82fc7aa5a4ca2fa6387dd92af55f203af165cf7202d677b95849d9fa7bdbde5c5d3b5f4954760013b4ba6c7ea02bfa8952f271ae300d841220000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a39b7621216dd2a756bf2f6b64eb89d6ce841b92c54fbd196eda9a02886a570b675754865d2855a7d5a08e889a8508d185a607b48523b52e2282dd1b7201e51315ed7e8a628072b05ba1405eed51d9c4b95ffc0a37eb937cf69d7172a5b0d7bee9e2d0afffe70aaa14d76777d73fd784bc3a0cd46c922048283821a03654a294034214429a04d39a74db5dbd657d8f846497a4ce732fe839b608e5a019570323443ee01c3a7b79eb28fb59de9bfa951e8823860360798d49c76b67959ad2260ac94dbeefbad605683d4e5a6eb987ec12ae78c7c268f316043e71fd50abb608a467c9b7cdcbfe060057496541188ba7e380e70300e71ee1387a77b0af3af8d10dcf327488ba692713d9081276cfcbdd4287c7602da245109c12fc62588137dcf39e06977757d281e8a79ed0e0ca0724870c25ae410957e3eeb13cb9dec2850f334b832ef2ae23a8cad941a6c284a84cd9e19cb4fff811454d8ec5da790345ff8ab7a4571a3e16777caffaaf0ecf35c4403ef3e51b9161fbf934eb5370d4759e22f85bca248376a2b05b9eb5e3a007e5a762610acfcb862f8bde4fb4f38959414b7a49fb056808069c33159dbde2b61e1e9ef6e2e6366b5f0b233da9e0e8df0946000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a1c7741aa83e4f75e4505957f847f6100c2efeeea73e7df405a7e18c042f5e5f12d7b58dd467f13bc8a73770b0dd2b9ee62592e2defc778ffe1a2a3925a84264ed346de78701cfeb1bf9dabe3fd4196d57b9b3e552fe341b78267d9c29a6c202d3ddfd2b95aebcf3541d01b4abf7f6d4f58aafdf07f5426e904c49267faf741fb5f2c6cb6d3fd9761f360c87aacdf7ad23b321ca3f982c4e4610376798e9e84fd04ebc00a6dd3d8215413f6f1e92889a6be529b5d127589afcb7713e9f2a3059b711feea9b0d72eedfd53068f5f590b68087ea0f9c4cd5ebf0232857cad7d6ca28e8bb4eff6e05d5933002ba662a907289911fbe5b3a4142814462e1dba885c0f2968f127ef4c960fb8d7f0139c416275af865f19276e692e62bcd5f645012adfd2dbfaccc5fd58ced775e2c4f5281764bbf2fc7e8ed95994085772c20d7cd15abda2d5290e8f893255e3f2c3126a572e98194e78375f3b9536ff2296b1a52c31c564923e7e85aaea5dc146a1a3c0f731a3ca6ee922fe449a664449c7ae0d4c8011922a486913d7dbc8bd84887da5175e39ef0801f2e45a668e26925beb94a4c4a729cde5fea59fba70b59ee977da3adce8c9e6dff80719b1fff946c3be2cd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a1475887ce6b53f5d896aa5a9d0cd088634d979e2752f28358e290151129925f67bddaeac0faf3915ba1d8717334c6ea6cce5f60bd1315b92348e1264344a7e3d8d0c4fd9bec2d62d5cbe620cb1aae4ab8830091c72e4f1f8ebb662a624408480c2200724959df225ab91a2bfd9a1db538731e36748fa9a3cf832a12149a9a0855a911fc09df52c3997dd1bbfe2e4254cf148afb98ef637fd0b0dd39b813665334cf3735da3d9b36138cc08fac09b1ce88be74e0443bc6b42d1b75565603dfc0e4ddf0970f6ea61e7398684e195901b854d7898e64bacf30bc9cbe19ebfefc67cdae19ad0aeda78a452842e8e0a5d1a4f61d816eb14a747cafddbe7a55eb3d1df96a93977f1968247fc6564699ad75520e2857390a89d98da9e046682f9b284eec3034ea6f5e3dd437e4cddcdd95504026b251a528e1712e1691abe1ac6652a6ca0b6fdbd76adf1edd57237e7deed6cbb87f68a0e8b97969fdc9fb98062058e91df54a1d30e0b0d5f2cd3f765e8dc781ede00334c6be3b1681ec1577b3e3be2a6c84028159fd44e7766a5e54352a44118c33b9b67cb327614dbb3b9248adf1a9971fa64b27f64c106cdcb010a56d9d30fd7fdfa778314e9567e8ba279dac19b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f580976bbb0809cd59bf6ec3e99c144d2429c9282f014a74136ff3cdc98c1b6e25fa7f2fdb70db36a7c021991b1bfc91929a3ff0c4505e0a2f792fde2207836e9fd2607125afdf94d69bccd2c96cd257484ddcb635dce22d9e7b671964f8a0305a0f731fc86066bf007fecf18488a876a13cb42ca696affb974059c27448270242c81f733baddee0297964dbd5ee892e503b822e5786e94e5658155dc8c240a8d47680574fd07f0c9026b2350830459ed324fc46dae0e1b661087359e3c08e307f39a6a2deba8c7ef293601fca71146b1540c97718f7e196d89e7f5c9614f158df9cb90a786de63ef2c85efa963e9200c63876fa32e2e0c02965a83adc05fdad7ed7f10f2c103455c73f399e6c787bb74ed4b8755dc7140945ab8e6122a0eb3ab3d36e770f58764dc713fea2933f11e598c8dc27c69f64aa8ecc88e4da134ed693c5ddf27ed31f730e10afac55f97376e3fcf7f88b73e5c19c22357ac52cb876c53c65c6f1592a893eafbb8a9ca37f98db8fcbe4746910938de33887301e44b378f1fd09677ba8b27704f979f7ec9078e8df8733ae51ff33fe2897a55ad064a1bf0f0f91e4132b8fc932645c8a5547ed28c0e946c3dc7153997ea221a0bb2cc000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083e9a49a3857b35bb9e48ca1f592cd85428b43cb0cbddf2bb7218e4fbf9050ca53ff723513080a4b8eeb8acf4d2b839b640fc1c7f0184c1b24f6828681c827b21e235577a31c995212fb434fbe9ba8ccf196d3837ed3fe4dae7dec04a3428c7c69fcc7273e757056f3003b3d54344e861938167827725043e32b7f087a17c76b2967d06b751c042c63c54b0e7533ca3f1090ff42972d5d1c9fe1ac13aff82125881e3ea701ba83ef778cf3a792669fee118a805eb7f20796614b4f375bf96dc7f5ff53cfa1ed834acad8bf61ad5e4efa3cae3cd7dc475d518fc45605dd18f2b5ff4bbabd6375eebd019df89c5a99b2187619d132085282f7b947d821827a61b826cc87e1909cb5f0ff06fcb9ffbef8af224db048d3d62f249c6d0b1ce7d22126bf34b7ebdb4e1097e5fdf39016f2d6aa5cf05d6d11f6c890aaf7e57ff8a1c5765f661aedf8b94c2c9e63562d95c75f52f7d6ae4bbfe8e1b505874c619235a7ce8c2ed0960ef28bdf3f38f9ddbda7fabae70a86af9c59df2570d9fe9ce23c5489508e65bad0237133f4cd522f3788c6a77d609d5086d7f524029597e97e4e021df9cd0e13941796f55a4e95e595b1f2de813193a30b86c6535355f1d71ad6f67c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054e8493b84afd87ee9928bc626590793f7343fb9500754d0ff448e41991ec3161f417118a27b90701d42abfe1bd5f372aaadebf4e8eb726d3f4c05ac8e01b7be2e3455325d50145af157dc5f8991211d7b29b665770703d574667e8818cc608e2551c39dc032e90a75bc8045e7c4bece458c79fc26694336615592fd8014f55e349d47d491f766b4b975eec6bd89abe3daa45a2ec4d60de82dda4c27965bfc9005d2f370d02daa9640507f22e0ac615315d69c7f8421d157a67e668ac563e31485c4ded66ccfd25746166b1221cfef4dfee689c931c0b298baa7dc8d09d20efc9a63c44628aadf6bc3339006b6df5cd57d80c0f14e8fb1aed6db28af9fb6e63886535bf34ffb154fe210be55e002b580c2fcc2fa98d3f8f85b429fa3a1017422d22a16ff336a9d9da8fdc039d8a7e069a7e6dcc8c2198e7d0a7111e00f6257fedd5473332e38252c0b1306f0fcdc1b344811b65f0174f5c6521ed899e60a71aaeeac14db60b6bc45a2357e6f86122bb05a6faafb4a35f8692e65c5eb4f0ce3c00fb5b6362831e45d674c6fd42c2b81bceb93626f292fb9367894a77fc3c9993dda89165425502c60b23457cf930da7dd5d7e8220e2f206281495cb240f8cdf600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002304d0d400070afe512b893a04346e56eb1ca7887524bea076916afeee6c599deba9173a1374163bda2a137aec601dfe930d8da778629e20c76e0d67d3b6dea226d789e2c094c6a7f107f9365532422f86d877d3bd74e3f1c732edf61ce7af3003b180d8d73b057bff7721f61558f6abceab65dbb1fa1b875dcc40a053f53d92f072ea26b56fc9fc609f19d0f84b6fb85e52aa2a03da7cbbf03fc835f983ffb9a26b19ebb0c72b2724550436ba0e9efd6939a9016718b53a8cb11588dea684b0c92e9d1db5ff6c6ffeb6d13abd1c2fdc158f4db8d32201322becb99f2f3ad4ce64fc9ae4d46a68db4af8cd168b2b9961d3bcb281f1f59cbd001f064c62e8e4a683e5d566a3007472acaf5bdd2ec94ed32c509b64a97d8087fbc455fe66f8f11fd2ddcd5c3e206c5e19a6db74bd97d9dd79822da67bc4788b24c94c068875886fd18cb57ededf3083f81d8278ee4dc4879266d294c83e6f9bc442064ed0932a313f81e0254d962fad88ed4773070f2479d871a8da422310b619d10f87af3fae5d05726b1275dd8e210837319f106b7f5fdb79b0e3a405696364cf7e1dffbcd3a4938b55fb466f50c77cae20a9e3fa6d23ff0e3747e54b56d3b815f4545923f37000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009dac3dce7da87e696af4676f933846e6167bdd7795c870d18fbe04b07d44a0cdcbc143dd8bb7bb14b642f733a1a05614d391039e20e659521810b55ef80ff67d9d1fdf23a8daacf94fb7a28539627716cb4fb6e50ff28be5c48ec2924aee941eac377a8adc1eeb18ab58bd044a60b41f085b1339f856863e85481f994fefd634eeb26b73f3b46a139ba2a3d305a52209b054af0a5a829d3d386d50e71f9c12a291cfa2ec9e2c3da17bcd335755f863aabe9c450325a6c3897cb8cff18585cf945795799d26c395a1db2e79762ee7a005293e92a653aeab01ae4225e69ad68fb97e8ca1e4bfa43c958e13a43f38ad4fab7e3711db74628198700bb215e120ee77e291c39d8ada3d8a8f4e50728d2605c0fc35dc234ff6c7e9be25c4356cc43964af33b98c65876b6c25a3aa13baf4b2b20ff230fb7fb61bc5941f988a8abe00f09e94f24ac50b16e5c1cde45d1763fd20c56ef7ff5799c762b7ba91bd1859e35d7ddd220afca4dc561ae31a151ffd4af8b221f2fa3bc1b7153199c2471f5ae38787168d3c0901066c6e21962f2fd1e3eab1f459372e61c9db895e486c3c159e084301998a0281d1b37e7038528612bae492b1e85cc0eb6cb26a8388f780825a2600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c1f6b569cfd1f3715baf2e87107041fb61fed37847e4ce554643a652fa018bfa63f76cd7d3e7e7f0f3fef22ad39c5708cfa03d871451fbd3290e85acd7986ad0a3a60d0391589d87a713450c88006e45d83fdb6e083f2be93fdf5f9bca392d7254f786cc8a101470f70a30e7ed581ffc8a54307c5789c45cd1e01d6234ba3ed50e76cb418370ab3d2d812208910e5846d29f5345ab21541cb970b407fde3a0b0dd472c56c68fd11c7e0abcc5ca568266c70ed7a9c1cd6b9a9c1889cd58612c1a9c3754233df297b5cb9f60d7e0602b5565f019dd95bdbddefa059a57444b8bd9d3258957c457dc0ef6707c30b71358e704aff55c9937a7a46771e201bb4baf4ea06bb3ba71d3448b32d7c4f7436c7bd3cf618b4e63e06ab089e42b60c14e8dc92f91f0d87aa09bbf9a949cd3daa20c0e10fd3619c5eb99ba8883f9fdcaccd4bfaf0d852ef3199812d032c0d1c35ac7da5ea5c3cb6fd39a2554b323124bfa614c2f64aeaeb5e005d4285afb292239a3ac409bbfb80ee65b83cacd3b28603493bd45687914edba4632d830b069f1df7cfe090a161c9c6bbcc27f56ea89f7ddce0e92269d315426fa735974a96bfebdb7c966c3f28a3154be01f1434487894729500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008452f18bc5c7d044926fde5b7cada7f43a464767808e0e9dbca2d2df2cc98a195b65ed27a5bf13889389468ccaa6022f672f3e2020992d689ebca6675b0c91c63d2082547881d8215ecd8f563de1b6f0da6385b01543420234dce139d4a473ee0c952909a682d033a77c6959c1feb53d9fc84a430f295f17943c51cc19ea81d47bcc422710f6a28d0b119298166c409af3d4e8a99e357f2a40b4e94803e3778277200204b2561a119c4bccbe2a81dc138dbbe573e0251d403b9c17731d92183acf8889103b6bd465a31736b9ad08d6786241a8a9a7be77c0c0f4d1227c884ae116dfa844a23167cc383ec90a7f49893830459de90b2d116e46a3caf731a9825ac0328c284ddee2311f69c76a783a802cc3a812b22c2f7403ca1c9248d23c13253f6893c77e5bb3408dd661b53b5321310e982e9ce9054a433f7436952bf82dbf29aea64af9cbed42930d59a5bca0679ba83cd08ea97945031140d5eb21cc3eedf62ad0ab58bcb71283c66fceb20cc9ccdd09812087fde95ff09fba3c8e16cb37a5901d01068729a5a9e6a756981c70f4fe347bb1306ae99f074e337e446490145885d49be6ff32408ace2699a404649ed174143890378df13ffdaf405029d4fd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6a398b4b56af443f0ab18720eb027030eac78ba9b4b95fa1122c133eb67698bc044e1e7bfb3d2db51fb3959aad1de64cef0a49e31ea9d7099de05070e961e5d2746259df16a8a25b7c18eb5dd0d8a21976ffd758fd5787796a3bffc99f115c70477c2e8d608366028c917c80474d85f3fbb87e5ee370c3aa21f99d0e1f3cd3f9e4264c8d448776d3cfda95c0935c8e21a95d5df964bb019efafcc254fec9fbc61f3af5a9909ec1d4a5f35ef626a89ddba48a339ef9122ac0740f55512a60eff4e5a6fab0c5e272bd8bc3fc1cade13640080dde1b23b81b068be07a6902ce6152d871ff8050eccf2dee5a42eb56de6d249f9329b5b9a705c77eb0181ebe1dde2e27f410188256e53e30d7063656cbcbc3e32180d518407703c6911692b37f01a2967f722943d7f5948bee28e3c26d29bce5349447b183824f0e202c057f8728d03b6851d79f69119c73bcea13b29c2a759a6a3c2dc590d336d788cc2aa94a1e71c7dbf61a2ce2b11504f8857c9c89a0fe51b90c772d5886717a271f7f5983aa25b90d565fc3cad9f27a75549480768b9d0e073f5c7dedf7c3e2cb95cfe0016ac333f979c2d1b533cce49a5ceb57b7f20f91c25040d60f6a84986a18d784d08f40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099bbd7dbffcae41bb3dde1e150c0f28b8570dfbc1187b1087578b6aa92a34652d67b7e72d8b3be66998b547163b586c5c91147896eb4a6f7ad1ac05fbb1689c34b76507f0d7d9bdb8bfe27b84e9369b594bd4d5f0571303018208a2c362b1ae9dd90f0d1bb7f9c66d83803942d4e7e65ad245edab17d0f287b5bfee929a425bf4d1d6e9b299e8d080ec5a0ded532bfdaea945dd96143f1c2e41ae1e361d3afc8ff243c19a573ffb78dbbf6dde0c8097347eed5d2b131eb7b2b5364fc7a796ef464b7c38329d1d86f385cf35942298ef3adbb9fbbc257830658387a3232ed2d71bde1a5c5a6043044c9f55c3a716c3667b39eb2b079f7249f5851d5324a7a1ba683f04caeae5fa87e3dbd4d19fad0afb76356e013667b7fae1b085e68ab1de3b55b4979750c0587bd5b1d55d32bab92a3fcb9f8059e1da4f499f1d20cfcfe93b67af599a28518ef6f07399fe0a5ed3c8154bd698eea45fe70a0c2f09600ad2ca958c8e5e098b8ec9d24037a705ca9354e5b76235ddf5c08beb0c8807c864f0bdec27d1d8d3fcac830d8d0d02fcf9d0444e5f8351646ea9208c577953e15b7b5ab873bee07d86f3fae6b10e29d63bd10a2ed55223c96b99c6e6698a7c1c307044000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016cb70cb0876e5e46432987e756c13136bad458e3818bb64c50e56d2bf37c35446e7c446bcb45f168f88841a9b6f039ac38f08c202426800d888eb61ae71074c7e61a78e08b09ec43ad85480c3a2428d4dad06c897e5cdbbfb7db53af20aa90c5f28502b28ce7574007fe7d9c5d900bfcbdfcd53ced36962e83afa90de4c25bdac3c08b66f2426e1ee344f6414e90760f53ea9fa2738f50f044e921fa1388a8dae617f7ed0164b6ed3a1800dc3223e1de6fd91e9876208827833fc5afbb08ca6309c3bfb3ef7683576aa4de09b3562fe6ac91d1b68153281ae41ae47928d54d41f49c3a86a03373bcb085117d7d092085ef99775e36d5ce6baf31fc38db4e2da05d61561cd1e1e5ef7d20f386e15826cd0eada2f6ec3585e171d905953ddccf035cb2d2555b34233f92c76446cb294fa8a976074db8fdacdf973f28af1927f30c710b942d8df095ca2b2493079f0e808956a83161bd62bc5dcf449f792a09e9e7a0bf15754f2c2976bad4078a7bf2954ee68a37889f0f2e88e3a7359b79416d0073ee00cc8067c979ec1953920a986e1dfd8fe7ec5fafba003df5cf85eac3d4b51d0e8f84e2318186dea20e0d6b1fbf40aa1758fcf60942d699770bd50f334990000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000979cd5ed3fa38121c173a959f7cd21566023087418bdbaa27ddef33c5016b8b7a7552c7578375002085b32c98a80378449042bbb9a8d8d1ed11dca93205ba04c738f2c063b4f34666418b8b1ec12cec6a6e1962fb795100d56087f842ab21928cf56b1aa0f4130d9feb1f58c0fe2c90d0e0a1faef53a5f22df2de7935d9896d878d2ab0dfd47c868aea241802ad882495f86898e28ed6699e9168d31bd60fb31d1ed433c31c970750141e64036ec7536b9eac7064a79936c60718467b25c6d6a961b5b3c04f8fad4250f1dbe5aa114247f8ce5a208662d45990c0fe4e359d0d91d4daa9010d21ae4d0075947edf721b35fa365d190473039974a3c43244836206d682f73f7669fc8964f8f5ccdb648a6d16131203ec7b279fab7099886e9d9c46c395d0ae03f94ba725bc9bc88051915b93db3a264552b7ad77c13e88ab6f69979bf7a6f377e200be05f17682dd98479fac7bf840a1b4224140231a468dafaf3786c5d7da888e9cd29871d684d272e3841724cf5b4e7db577ddeb2a2227d4cefcc4c6926595a43a45265f14ea6db31bb2856033aac48f71cf9acda1675ce517b9b4514be6e0fa81986efb586b31ef7f50fea191613a6bfc4407848b9ea9dd786000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ad7b1e88b8a262e6fa0356b8a225c4dae055c32c572156cf7d106daa3bab545d1eb3d13d0a03a9714a18571369b9496b79477b80009c04a6bc7ddfabe74e4ef3f38e8d90e0d36100a264269f29b726f995f5d192b2757ea9eb34f0d1e39679dbee1d9f8517bc5dfd7195e721edf49c546d70b966d7b5faf81422a7785a29784d9dc9aa1869e61b456ac5e98b892605e773624b044a60f2719cd9096f3457e5a5ac98c069b22c2f9ebb1f0b52139ad2c6a3daa326a682cc0acaffcab882547407c320ce2b21ba524e24218cf0f4b92394213d6a0cb1f57bad7f163c970adb5280047768e36a21398e67d29a6c3e18531430dac8b078c04e024711c302ec31875e5669752650cf90efb85a241fcb83e0e55e237138c428bb7225aa4373ca5c33964324fe96759f8b9e24421020dab0eb12800208280f43deba82d6d9aeced6efb9cc06b4b35e7943e53b9ecc81b6312db93e770cac2d8c8217a13dc4f9d659ab196f637a1f7eeea5b54f15cdedca3072b3eb525d9031585b1a7efb8e45ce5d9d6ca303c7200104ec15fd969ba7d8309034b92d02bfbea37334f54879f1566590b1922e804ab741e20d41c3b665e902a7d75e930a736c11a074fccd0c7c54256f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a17af0061774c5dffe3898aa5bceb134d8283db441e8744bb8f0228bdb2da5be18479491359cf4e5f58b6459e334ecaf2d982269de123de1fc7281d85203784731d4e031070688d2e717ec213b7568e07e1d85d26b87ed9b12bf52f0c34cc037229a61a2efd53bb615226bff21c7aa33400699660754ce77bde3e606213f5484d06c65b9a3f5687be3c97c7895f1b55d2fcc1b808f0b69dfdd3bf5fd969666bab42f3321c8b375dd34f544824551deaccd8c124cf330d4d7ba69737d63b1aab68f717a9767ea2033983e73adbb0b0dc999b9f41c7635dcf94de519fd29ccc2d01b1e307d8a26a33abbab42b403aed8971e1d1a640172b6acc2f4107efd2a89c09dc1e431d59b26979fb52774529fb7a827847d8951ef4b26982638b5d02d95fa5edc8ed2de12f0cfd9d10dfa80752c3d1c2932b9d9b1fa0a65597401e3319c591c799a28363a64e447ed114b49e06eb05d4c1aa7ec7de4211f64c7eeb1c32a25603fa62ab5df8dff18fcd0d3d859a2f013cfea046a2a27b10f57c3c02ce478ff3b2090cf2c315dd402fd129cb7f26cd3b8d34c4b54b3f07607aa50c8558c4c022cd9167e0228d78d516ad0d4b0d5f63057186aeeeba77676964644fc1b1c8687000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014f10c4d3892380688647815f77f7c36d9e4ac185e1e9cecbc55e1d4e6a0c4c2e7a2cd5a17e3d859d67047ea56cec38cf5a2351038c3d0b9b4883c6dfaa2d0d0d747d4abcc044ac4fd19f768878bece7ac063469ed7e9cbc88463d121416775a61acf3d986ed6414318beac0acf88a148fb8dd129063f52f3a66391dcd1a986c7db1feed8329bf8871ee3c009805aa0ba114898eb2ec19744d0aa8d72e1119bcef326dfccb6ae55629cf52e218357829d4a0d21939131a3c7ea7f93038869e08c1441e5477dfc2fd09ac07bea04d8df5cc1e718ac7fcad4f72593d5b088985b926a020c4049158f3d523c255430287078eb32de8746ceef59f5c733e040c0e804cb79854af302d24dbfa89a3d294951a69d87250dfad6dc63da20d7c423398072a3e1cb9c9207be354386bdaa4f17a0ec09843e6a37c9fc1397f6e5c4306279c2f359a733f5eda052c1d4686402c185ecdfe98fc19c1960fca67b5490206fd88e38ee6240be9d4348c76d00ed01033521e476a6ceece4ee743c35228b67285a02a3e1ab436b53c4a6ca4b820ffe29f58a0ae9c2a0f9431dd261269773c18c9cd662ed04801d667cce8fd2bd83637a5ad380a42ac465a087784ab2768fb7a216100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c5aec8b8f5152806161c46a9861a1293ae6a56ca3fc49344dd8b62aa494fef09061c1454d88d76407f489338c4feb0e15f5e1a3f6edba55b9817b586d8b8e2897654a0c9e77ad73bd45b95369e3c516189405062fb6d1888c81b0a15c105874a555e0c9a098cd548fec7083834786ee4ace27d8e56d5a57e3acf65a3bf72c8fab7f8ad25117881baaa74d63e8e12ddf7e07102b4d93c74b5fb9f5051ed55a220603ccd8017055fb274bd13cee27efc154b0e0b39d720c552a408c019f49262ca2a704d792ca0cc74d1eeed23e084ac4004a3fd5a9a09b83f6b492ac60e280920c639df84537f264a9e7181655e38d7d8caec418392711722a28e7ca404cce57cb7fd0fb8742f7644e6da94aa494d667357624f46cb0be7adf87814084116714913ae616244b16ff12414dc7edbdb2cbdebffa444e1959add55d284600907ec44ff796c6ea963dca25d99964dc50552cab857edb1c116bac7f80cd82dd43d8cff6ebc39170191a0a889b997936c1c305fc83345f8eae30469a4fc8dae047aebfc4eaf9d88183116a96646e733cbc05eec19d3c08035bd29582ab4a096391fd8cda10455d3f92d571b0e3cfd8d63c86718ff8f9c77f7804bb855ec680bbfa68970000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000137d22258ac592077fef4b27b2a261e8c0f47bfc35795255547ef7a6f02ac452f812d1433682f18f4394b3a62e6f88f8d135b1a2a6a886a5f0d8abf74c2147693449712681dce9e8a30f353157f975a7727432927a601a67208ffea6b2100c6453d454b10303ecf4f0116d1f3ea8c3a523c6e09ec7a2217b812b7fe5405512329f1c58495714d4ef3c025527f28da8299948af18a5e0567db8681c7f94759c59eb538ecc0b9ecb5b7b7de1fe1760f089efbc21e2ab2357eb612017aee24347eea95e9d75b581aa256eebd294e07471b2e02e52be99662da0b18f896c473d5f6182084a15dd8b106fab99a8eabb7ce52f8cc9fee9043375af9633b2be1ea48cbde0ad326fed0ac2104ff843809cd15d5863b785876678ad178b5a90b97875ae51dea25968e6738b7ba0779e2031f56793178fff0fea92239d12f0d88c6763fe86690a43aec91846e0d7a3a746249502e375cc1e4d41eef41f540e94766b6f7a02dac2068fbf9f0bd15f0bc8161555fd369ba1850b2d5ad8bc6577d2c008932eb822c65dedd3255f732b50575fe4456141a3bd05a55115c277aa32cdd88b2708cc7666a5bf70ca4f03a932a4f56a7becc9688007a027f29b18a2587706e2c62820000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011b4da0bc6fa3783e6c401974af1c2156fccb7a7bda4bde4753a5b728e8d8370ee3eb0039295e577dfa45aed84d6e93fa042cac671614763dc5ef79cc5777c6ec71c17786f4b1c6dfc8ab96d676a27082e2312d58484c1026a83a17ed3c9e917cf48a757441d22ba74d275a681a8a374610ebbced7ffc3b7201a84cb987f39cbc424497b148f5368ecb4eb959921b77419307bd99a8eac78e36ef5f239114b5f578ed263e150641d9ee13688c9f0cf5a51e1fc87b932a28ff3ab86432ef92192c6e2a791fecb982c06e694efc4b58f45e9e31bf3e6b09a203c59f1fab5e73a81c2a2b04a9a30a3ded9ea9607ae06d5f244af3e68474896f1badc7c7aaec7b3bb713bfc3f8c4fc540a211d01f18be250ea93a1d65557b59b3d6597a54e94edf6a44a1d74d6f83ab7f883fc19de3a1c986a1500e3fae5871cd8fb8e6554d54f8db0ba1fce5489cd5d92e17cae88b7229f0f78c452682a85fe36e6b8c300e4994f8b369c34bf233ad9b607e2c30143ae33773d76d1d0b383d8f4720c74d97b1cc6438a6dda8c5ec0ba342af104693d2ed21e64bd9bc49429e272585e2dbe4fc362468cfa78c8434e741638da8adc9bf6aae9775f0dbc0c0df0593f1098ab5a35d5f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098a65e92eee47141675522e1050e4170720f35c12377f853139af6a54759549a4cd42602f672d3bf5f3e4e9332458243704f70bd3742909fd2199873fac63e98c70fb952e7fb4452d4cc2d614fded46a4ac69f6d8ca19ead4d0cb4e7b30898f62ea0646b2d2279719a232a3786091070747aaa5f6fd282432a781b6b1e9efd5fa708e7d24473ac1e1c11bf04c1768afedf9c596f0dbc50204805a2590fe6edc8ad4cc09d0f06324500187a9f00fb12fda55f46209d8c76b07f3a09b4454bf7bd83bdde3dd8e46e0ba9c2998830694185ee69ce333432fa8a6be5634c32fa96e9448c301844cd2d07a650d2e08986911ed8e21412bc2a7e88e6b2ba319c117186743187cc32e6bc4b652034f448c117a46ec8bb2634f4a152f83f5861591b0e7b78734018f9ef34d613ba67477656b7a52244cb3feb15495bf7363c7a912be232db182b21bb8ec3de6a2077e546fa27b70d9bafe7f732dce4f738aa841fd2eec4ae8462ddaed6a1b700d983069bb3f81f44fd37cb416fdcb4db7320d4dbceb4fd4bed5be97ab8065471647d47da23164a13268cb6e1266aa4872c0fcc60ce66045ff5fa3eddd9ca6c2cfe7dcffb88ac4a14a1c3616084458374fc7cb95837e963000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083bec3ef7c35f82770205bb1b2baac379bce4d6bef8397c3ad0238cce8a08d639a79f6073579368b3d63bdb2a4914f8673ad8518f13e5bf7fd8023b4d2ef2b6868ab2d881dd3143565229c4838f52d2184daf337a099ca557b7a5c08b70fc7fb6512266797c438d70b57f42370aa2375b16ae32f2eed59b7e192e02c40ac942d5c31c10804b8b89d429f58d11bbb68bb91ad23455ad0ef5802df3304546414ceb7cd302807eefa24e2687f78214e82d57ff28274bfeab57d543ed8a7b4eef5a09650f3b09ac4f8f3d8c2b698ef5aef2977e6b8e59e961a2f3f2bb68aaaff6769b5d0ad7a6d19b74ea4077d434ce9bbadbbc24232c4deaea75ee6cef31101edd236225b684b5c9d6d789f0514c5dbe1617164ca16c92b1ba0e3ea2f38c747556e4e4af9545a29ac608299091dab19b686d6fc5a1e7be9783b5bc24e1651fa4ef29cb27d856a739baa07e8d1117daa3ea9ff537e69545732d5239ee9ffe2951343783db0a78e3015d2d96b28041a4739db8f21670ae7f2448e1aea8e7fc575dd725690eb98358a0de7eea2ceb73532e80c0e55e6d6327205ee1fb8f8af567f520971fecd86b77dafb23266f2a61b9c37cd14b773c1db8d7887c0cc4a9cd6b62120000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017b99ec8edd9a74a926e583936e918e74ada4165ee2b408ba8e62de2bd0ed0c6bff06e1da78c3afe28cd5782a4c05201a463e7a49713f5878a77603924778094d6503c218ddab733f08ea18b622cb3d43fedca9d68df51ba400de7f0787087fa263229e03d6c1fff77bfbfae9403aa7c5a53d22c8b0904760ec8ee763099480ead1c265f83124d71a526b97bb9d9e02806474c46a57848ccd2bf3e8d71b59190033f959869c2bc48cecfaafc7886bfb2a07c77802a51977e64087da1af5f314a401672c8bddf58575d59c5256610b63957813383cf9e0c5e6f2784f268a1aab14338900126b42315147d9ac506a4462999135d9b3ce2459e3dae08dacdc549a19afd4bebeef1eff941f4064de404362eb3297fcce1f5469bb1b1c384599b1af4e9f31f5da3bd006e258a901308e133ca3187242c85013872b0f4573df54542cb70bb2a99ab3a7ddef745c46c2ae99a2bd903bbda0d8c2c61e958c224a26e94b028f0a77a49a41a2b447153c754421954786ede2822e8e9ba20680cbfe9861f764b35b4669f1fabb67baa84ef2644ba75fd22262d792dfb462304e640deb2f0558e536206d17c0a451d5774f6edd9e9cebddcee6b00efde140f591c2471bb63e100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001539e329ee1322c13f25155a9c041b7073a380bb5dad1b15e9ed7adebff636616bbc8484696e9849a4bb92b7f27deb35b53af2847cfa1a502ef50a6eea40e946097428ed2a1f9a7b7516cf72f7fcb2743499d6e944fbd8bed6878d1a5bde6e736e6097b2268545602c99573cdabd17ff59ca7d8bf2d579e8b6f3ec40d9e43e4296f1a965b150bf607a5ebff88a78711e722c6e2e9bf0b59af21fcd4da3ff883751dcca134c464dc3f27acc077d8f8badcb029ac4357a7b6757b117709b27e90b9f2936eaa40b6dbd801facfccff34204a66c8e691d47f40718c7e94b01e5dc49db25906546c45eb6cd342c838e5c7ce0fd974baf68977ac19540d47591874138ef9b7177cb59b143f4e25da64551a2bf104b7065dc5a2cb2cd6f5d28d2d4dd2008d3c9c3e9ac6a842cd6b9d1bd5273b3a809f1da8a626aecda80dfdb1833f5468faa57b9173435400b08a4d12e4adfe4bd607fceb2cc7180f4b162a2ea34c87fbe4aad1a9dddccf69220be7538521a12608749dd0ab7a7b5adbfbd3c161cfff6bf3a5d38e84e9ebc1a3766a0848d42642b29ba95e6bd709b0e95a071af44f070e4174df3c19ee47b132b7cb18b2b7060e34de603b6b682c4b77e8d558000d84a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023e096113f035bb8c380fc914623fc3e0ede4aeca3182b38386eafffa802cdbf821c5200e7b448ae647bed85c7e17a97e32ca5a719f11566bbc10367fe3c4787bf54dd2b9d165849eb06b79ed17f9a36ddbd2ef892becdbab7576b59adf3dbde45018d26e159777df9e025512d23e5f67d47c24438ed7e4e66a211007a909be4f648d0e36c9ed036ee7f9c9bba76b40df9de6ab4c53da1a136027811edd3541dd88f09f8b4b0a94542d34f2bfc25b51345ccb7a36df533ff3cfb678d6da62aaebcc07db5a556fc8cbc02086687bfdfd267f2957e00133c601ac8f03afbd36b3e4c04bb33b83fec0b4e8defe6f6ff63f0b242f3b362ab93a3545413a4d9f5c231268c53888dcbe1b3854d1b22b1c7055311688293e3bc7d33da5650de0807bbaee0f7cc63ed53a14e4e028d8422e5c74dd66391454e863c9558635e6271c432a1441d68582ced7f5271345d6c879cc1f15bec3c05f6b7c17506deef7cd56c84c8fc0104e34598f3860b388a252ced05a0620d6f43026f6644ce936c28ef15af036bdff7b55386f4ce491fc88cbd52a933ebddb5043d5c82e8e1d37ab1638fca6769da3b1db10faa482a2f97403218552e65e312083bf004aa01fc0ddcfe7c3857000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b98cb3bb9ff5bff8d437ba2dca29e9bff900c916d9144beedc4f4d87cdf35fb90fc2ca1edf98c8f7c5671d20c2b727d9a365c9f04c2aa12ffbd32e0152025424ce589ffd03211bed4bbe78c1a0a27b39ca4f60d2d8e6b82df7833a290b8ce9863c5525ed37964455fd43fed3597bf36d2a8da906d0e4401dc6209d3bd348e2fe501625babf2042acb6aa4eaf0403ef31c15531a6f32b54992ae4ac9a83b3811d2deb2d752ebb1eae778f41f4639fbeb15db623d47072951c24e3acdf9370e53ebb6e6902dcb7f299f0745b804f4fd712b49f273ce04b48d5e7d936d67435c77a0467591263ad3727b0f06487e54f830eef2dc568f9625850fff66ce8d89c7333df32b19271e991dc9f0afe8f5182bb7516f1fb1cadf7ad39a2fff3ea84474a226e429536b7af01a45d2449d14735bfb93e1a053334dcabd33fa57e32dac37a63055dca9e3f7462096ec25cd0b9c6aacf989c891c4a5d13d60e33c38c2db529ea097da1ce03506216864f67c719eea8b50340e042e6832f3c809a53f6f2c06728c74380ec35e4b2c77bcc85f647bdef1656fbf6830d2dc5107576e2561b13334e54a42a9c5c26954bfd31031a7d5d85b6821631212c439d9f893187e12088b2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087dd633646d23d7d6f09482399d1120a511dfc64fc8f95ee3af54e8028d289aa2c04f59d1a52d7c98ec82248dc44a08125402030656db7095f345f24a08af6ddaecc6fca5382b31c1ec5c291898ba9f8ce677bd7766cd8c5ce1c3294cd6e1d1692a624c31259282398c6db92953c4f132c39abc0c226fc31cdb4ee7d97ac34fd0ce5d409e9c82cf0b8aaf8b830b365900cf50035d649224b8f5289ea91ed3acfd4b61df9835f89b74fc34fb779949889900d1bb32bd8c6df885092f345039b7ba9810fff291ad1b10cd5685a1d8f7c4db331b46447953eede813de7d62ec9c7a609037c762f96813a1fde215cfd0b4d9d1d78c168a7d6e847788f3da0071d1d9fdc252f428079ee11423522640544c9b7b3c8efc2f2a6e4e170ed281e6a0c5a2fbb58bc44f9f5a80f91aeb76431f5c98fc6a6ca4974656525a41103eb3f9c018a1fcb92db1071fcb4e837fe7b614457077ae08b9e3f6fe6c766e44ccbac1ad7999eb96579b2f983a79d7fd0ba4a12e88a3e06cf416ec911207b2b6046a7c93a173b6446557bc45e5c651a563de9645ec073e508a7fcd3e74b2ae5b3623f8e9269d0cb9d038f417092076fd7ac6aad01f0cf31491d6e0366639d5bde4469b69a100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e5c0a77f6c71653d95336c06f4ddee8965e54858db670aef0763179de5fe0039ade5539b75e308c6f67d8361b321079bd61154bf352cc0be521729ddc854554f5d339ed2abfac86de8131483837ccef69b8e3ed00e47106535c119b33c531c921fc1e4b19310ebac630aff2b4114530b2bcd2087e81295eb71b5ea752d579fb30c20023f804d4c365340ff456157a3b4d3c1f49aaef6d6f91d2d505dcfb4a702e410dbffeeeb08b750d80b0e972f20c9c4da78ae0df71bb8d6a8c21ec527d76547b1bf4c1f08d355cf16344d45deeb3fff227c06d33a965fb7ad1d6442f3bc26c2def5120bbb9b327d198d30f274a7c65a89bfe35f334c889b5d1eb525b7f3948164452a95a3a326a6571b2c18e1b4885435daee7163c6d2c72f74d7a5946d3de00e1978de5d73c8974865720754b3b4376fb15ea179d43250bdd9d127c0b8a5ed7d019576680507dd67a971734772c2c05a0de89eafa3dab018e57b634e5541a74513f00c6e6c8acbf3f42936a63c78c7d7560bf78dfe24e7eabb9901bd1c24cb933c643ff81ee6ab2324aba8ca05403d9627d0b15ec26ac38353f5655ff0819678b86f5452ddb96417802aea005916dccfa50635917958c28ffebd4d930a20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a98170a8ff70d85abfb874ceb127e14c7d05e08a437e112713aba22b2a72237d358de35f50c21b883a49fa6e43a6241b478c89c47e4cf5a736f00f60faad07a76f07f734c3396d66d8cfd7a71cd659d5ae58386f40bd2212ee874ec9df36ad24a4d57a9c2bbd1226541cba783868464efaf6ad6691977aa502f2855df721d4713ff3c15c065b17908421f67616843559426d90c535c345d04d1b41cf4c97c14a5e3214252d7394268172386749678083802307f7f5a062f357d17c18c519d951c31ff1f3dbae6eb19c460064c9e495d4e33afabe1a53b904c93001b73100edaf711b6e6de4fc72c25f0f5b3abb32124620a62619461290398fb735e39bb4ae7da614c6d0cdcd444513850b2bc7e7d95340cadc59e49fa9f10940e49541ba95ef0a5f1b7cc2c85c3130e271a42568e2b02466fa2ac5b45e1bef42ece15a7422d5d7cf1ef6f7303bed6fd247b806920b0890825a17978e5be6db6abfaa1070fb8e7b1c9a4c874aeb796cd932ccfe30eea7a2722f53910808ddb3db87d8de35a619260acaf3799f93a4568b923d38e2ebff056510a56f365e7a4cbd8769b1e990bc1d8f7e5847cbe6aaa2af1484c431935ea1b5b37b2dc42900a3acb803189293d500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000952dc6a5a774413ccc273529d1d08b1f62ffe47d9384852fb020ddc2fe49f052fb2e4dbb464e1c468658fae29a5c537153f0af778d9d52e0ad370e78bfa8c249d48e443e23aea37bf001d8f18961f06f3c5c8241ea2b5945776f379b55d830d47855eecc1a1c622381dcd2a34f70276058d28aac9fae5ac2d01b613fbe708c105da180d3472736e9a8bd35fd37a11f7a10b7c33d7f02c6fa24ab974b871ffca98109f7a145e9a90ba28e9e8e79628b927c0600e6c35da3ff87172790444dd96ba4a5106bd61f50ed5495a41e842331ddc04dfa69bf3fdb4cd46df4e1e3c1435f3d03e2b89e426c8717a113e8a7656492bfc21c16fa5ca34836ba0e3e6d35298b9285c637e2a31a65db21c724edaf7707662d3357095480f45cf8c6d538d57175bfeaca36e58df443aaf7ec07912e0de5c89d31198a9f45e31c94667cce166c3709546bf1addb2f0d7d0ce10ed4a6c4b66ce4264152367ed99ba339d88ed091cd563a4bfb5baa6e776412019764d5a12206b1562563ce1d258c53e5e5f80867b14f7403f9dcef45aa10fe2e4fb549fc4a72936434fe2345d64cf124d3743e4e36fe95df4ea1db9d357a5f8d191c7a29afa58379fd71b8b4485a711ad979014d0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b0d491f2d313ddaaf2558eabd6589429ca54801e2fbbfcd9e18a68723fcde71f04f7762f4691c715f29c41b9cc9589b273a5346bb58656c74f8f41a3774c8ab230522b555fb107f1e472e6935f645dab8481cd09f5948c961af69203a00154924a8f128fae17218e18e28863e99e262720b90d74caf50bbb779fc8d6e09513e1549bd4f67743812ec16863c527de9a854a5bd69996c9b88e05084b98b9ce005a19d52ffb0167270e94b8451d0e5ad4cb7289fe23ccd99b5c2ae7e427c783b3afd671dc53693c42c8eaa50edcf2592903b3b8f87ddfc0bb239c6e5210f70d289acb40f3d6d105d4214d18d83d7c9bd486ef489e7d28e54e8fc347ccdfdad67f3a2218c61b14ec7818f0dbcd17042eec2136e83f84d8c12472f67e41c193222e75eaf712cc06f0845c286eea32b1e81d32d3b5364854f6c3818719d1cd7bcb02c48adabd24b13c5092845cf7053eb7f40796a23a0dde8a4056cd466ee99e6e7c76a0d433ec4b5bf020b430ee59a6915b4864280b33d2be07f6d32cab136b8a081af361945309bf9feb2d4b580ee62536c0c5ce30a7604a25df9a253fe1a6a1cffe180ae00ad1efa3fb2894f361b81f329534486e5820436ffd9a2226a66869e00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000276a445393aa73785eb1cbcc68197270fa7cea813de288f67946b86295dfa2e65aa1babf42e1c311bb1d996250ed32fe0b7ecab90e957f7dc3ab25561169681023fb85da4c6040670145e084c98ef76bcd7a82757abf4eb181a9244a20429ddf5389d1ffbb4f3e462f05e872281becdda4ae2ecbc49664b2bef0ab40515feeb3a8369af404882dedd1f89e7e3dfe6330161e02431e0c809345d908e86efac994bb5f1823b0330e7fec76f51bfd2ad94f999dfb78986857a768f276a5bd2779cd324de423176726f8aa079b50cebaa0982689ca68a20071e49a2995006cd5553e9ff84cd26701f20651a5a76a135f4a28485452cd6a383c0bff5e2f0078dfe7e0e7273c9957284b0f83b195e9b3b8bb8a6b2f777c632cf90ee51227e3e2a5d186d8708ce2ecb7296673dba3128449854728fbb1657c437b623eb27c450271593d00ecec9c56f5c8ae38c809349caef7609762c29785ea032330b6309fc72f2ad9efb007bb845a470273cf4bc5b948f2cfe54f02b65e4fec761156a670a244a92bcd29d97a689d039c1144fcfe4673794943d9dce06f9ca8670026378f5377673a3779ef6274e0c6b8afbbf3dd551581a4c7816e4c09c1bfd2150dff42c21b97de0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a10acc5b168a4f2d9c94a720f9a91a3570fa32bb971139aec2ce795fe0d25ea46a41156f30835d07a3ef9ba6759918f945669f5683df8a6aa945a7dcf999bcdcec0f8dd53cff2ce074b26b8c76c1fd092c36aa06fe522ae5a57a42e0fdcf8158ad66d548c57cdf5ed68c52cbc8efafcc2b69f03ba0c3196f26353867cdea00bebeba708b2150678427efc4e66899a35d9ed8bbffd5404ede46ca5b66be6381264dcdbfdc3a1d953099b7ed74d6e47a478dab05a0b78614ff2a20bc52b3352be365adb327ca027cf8438001d8287f35ade59c29d645c64ca61e68ff62ae590f6e1879ea9e34debe3043dfd95b44e5aaaea3fd7e112f3ad97b801179ebdb2c811398707460b466ae4c96101d1f71f026cd6031a4498705ccf576079b70c6b187fe8a9ab97a017a0fcf8390f8488b821c1c790686d60a43369e2159b219c27077cd905fe4b6c0ab4876b61e9fab54d391357f68950a92114ec8b630d7c547a908cd3f796d51e7253f7890c346ffc974d18423e664e8a31e2da935a2c55751fd0faca7b1bd3bab5bc98ed95b6e4c934d20438457355505036e789c48e2bcf331276d4611dc3274884aac9547c37e2f1532863ce4a396cf0806b590ff2755c21677e700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008944f186aa9614d007991c6ebb5b5e4a199617785decbcbc3ea2878314df4ed2f2d799ac32958e2b1ad6e4d0c299381ad72a8feddba9ab02139219afb30aa69a10655932ee1afc5c35d4314afcfa88fe0c234227772e1b8da303b6696b989e654601dc49ee1ac7bce090f6c0e3a4d39c55ed7713e0d8cbfb7cd1e8e529bca5410f067ef776ed99aeba0e1e93c7c498229a94726a70d32b71d2e01264e5f23d93c99a68e6c6b09b71c9c430862cfb6cba06cf7208155c0a444b27be9599e5fcc1ae7827ab0c3fac1d15c2341a93a233541d8b9dea929dc3d375020df7026ab9c702b060d3df529a13f385fb457e3ad4c6b347966184b516d02ed02252816e80444913e307bb283ed5b4fb320a0935aacc001d11859a1e1b671c403ddcc3451e24aff97965f86abd79f0c0d8d15d8c564b99379ffc0aba19918be681c076c35e327c3895b46c70d415d1ab558c5f0dca12e4d57aaa5723c18c055a00232c82831da4208b599f9d87f438c2426d3555c45178b233fd8fbb6c008be3cc11d07289ef8a80bb4a212aabb18acdf62b6ae59e705949c7491d37292a5cc16b592ab1a891903b03c8cf606e0ba0e3a9202039007fd312157ce2c4f74a590dee54691413c900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002eef2b6695ce7cab8734a63e8d1e11e3adbc5009e3e190d6735e3d1d770cafb761b4d0845ed1959834fc34ab27941f57107712a5892a226fc52cd9b28aeffafdbb3d78cad9fa91a5deb647585a282f6d5b06a273cc95ff606f31ee7b26ec71fa0c59ed32bf02384138e230ad62f98435ddaa0ca397ee354319801ed8df975d18e131b68baa404319498d77c0ede034060c4b0528778635dd7153765741419f3cc63b8f955e8752575bc92f36dc707182a84b497caa2079ddac51f070bd8f1107e15440348413cde97250eca11a1461caa05ca0d2fc4470508cbc8742c583e9315a9131bf7cff15f9b0de96c304ba4a0552059542dc6c71bf43430f2a1a711a4765ba7f56ffa6c7bcc02e14d854b3fee23717e1af29545db8ceee8274fa02fd40f8341c3284d740d180028da7a820721e8ce0177fa5f49489669ca027da9e41e5d2d9c20f017432b83477c05c76d9675eac24b1d18bb6b7f20973918793327817ef41f48b2163bd0c70f8abb9b372f5025de78823865bdeaf5deb7d43017f37535f6c942072245f4bb245f1473d49f25096a0cb1778ca93e310532b0a48fce00ad56bb5be5b75badeada8773356b39b69a6e3ab9dd95dc2d2b11a3c53501ad8050000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad7d5e90e9c262ac794360c73a005b25d7127ad3956c3c5b02913ca8edec556ed28faabb5a7675504c309b646827252c9e9e53357790932d859faede8774092f43f99c15910066eb0f679bbe6957ab631f9dbc14a00b630952bde4c447724f987bedbfcbed556a3a809740facce696a939b9d86d2e2fec5416c39e23203674588398b331c6c7aa3ae36fce3a297bf2ca88480d06645a0f2c2710fbb1e477a21be5e888197aaceda2d8b05a5bbdfdf82b865ab9a96ee72df122ec33dd11e139585bc1941729bd994d41438a60354a8cb258c49a16dc9d48df43ab9b8386c70dee3fb6ce4edd7cc961c1c838d53c79caebf3e581b04d104828c713abb4ae68518a84c877779a639d9af79e2fb73f95edc218300303e3816437b1a5f22c384d5fd4cd3c5f74550b35d16e6ccbdebaf76a0d3ba3743dd10d67a1e8aec9d07cc0afa7f567c10d027d5aeb31c071cd27b1aad12ca81a93769349fbb1be120b580436fe1510083c83bcddcfe9d5e0c3ba04cb3ea62cf795bba73a11b68de1772c7ccf390fd9d81699c9af122f1ba1dc4da91b79f71bc8151b91825beab396526f30d2c831b960992d33b5ec62d113de184be0b56d705c6442b080ebaf562f425343b8d40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000151a817cc7e1b27b83a1f81bc4eadda5c9c832b420c973679d362241148fe4a56fe8b9ca594ddedbaf30dc5bc0278c996e22bf7735338606efcbe90a887be7ec62d7a7b37d33e0fd7623031e886d44594dcb4e8f4f319687f468c2480f6a1576c1a2a1adbbf3c48a0413fbe3b815d171b4e4526f8f1e2ff74c524d4f091326e4d09cfb3abe0db6aae7cc16602174ebee333c452b0bb1740f3cedd073ab85bcf9cc59df5419d2c1ae64b50789c627185f0720494c7ebfd3cd601224daca6930e06efded8b26133b2ec5823d161916e533a2069fb3206127773f5cdedc584940f72f987fc3c25f3b83c0d5a3d5ac8934464f06732b65734028607c09538d0ac3c7ef15ba35fa42bc1fd21c0a02a5ba2d1592222e3988fa475e65ede88dd3c2a3d750f0f3f75bb4453fb8528132a79b2c3c9e425e1faa624ed3e13f3a2b2c8b909a27c9541cd2e3f5259adbb8069e71a70611ca622f699e193893767ab2be88993105740337b6ce6fd01709f670fe47feada7fda76e4b56aff7cd41be65a359656899f69a2cfcc8633fa6a018efd7a67f289a417e45da78d4cc8154330bdde104e5e9316c821fc70ba71a4fe206c9e1607dbf96332d7534752c584e0d7abaf4ba8400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d668cbf53acef44767259ae47c65fe22dedf08051b1f502e56c6955433924df2bafa65d373af49fb7670e479728056d1d7d9ba07c8a99f9c47f984481e28022a323a754b87969d9ccf4bd8f6acbf5fe529f6b6b616d3ac60c86f0b89a8299d4f80876ab752d736252913833c1bab94ef1ddbbfdfae2df85efe530b908cd0dee6503e993761577dde5ce3d33ab47e35c50d47395d1284d8ef700f60676868da5b1c259f1331e2b3a0509684c08efeac0ee6fa9c2f9d10b965e1b9a1f9f08320be8efb72a2fcfe3aa0cecb04e29d56a57bcce44e451afff291d86568f960ff64c19e658197866b37f595413e1b79a211846db3857b5d60bca5b0ab5eae11776ff625a6463f60094629f6925bfd8840ba78880c3cb41aef190de01be6d26e093928fe8dbfd181b33090637b28f6f54cbaba9ef34c2d63cd94afd5c5342c0f89a905675b834ed024229a4b4b7f89dbf77d93069c2465b7e5161e36fcde6fea390abb456cc4cd208f42d1eb82ea89fc08a7b5f844f43e306fc9bf0193e378dc522ea087f448478702848b42b18c36e7b051984f404706177d878271178f9d31c09082d882dd48b387ac9e5919ee020319690f9d402a9d638f3ce37e90538abdaee6f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009003a031df818f1c9f4880dcef79196bebd75a24f691a254489bbe40db79b2fae1d8ebcaad41f66502da6cc6fe15eb3e2e6fe3f76bb422858eaee055844fd4436baf57a429f36bd503683f5a217c6db4de4033ba07a271b61781e632f45c662052b9effd9e9b7d2dbbf0b7d7347ec2e6e55bcd4964d8db2101914ef6c9dee8b836a359b95baf7f031adbb926d7d0dbe77f5bc78830171234d1099bab56c79ec797c34ba2a30120099f44aa5628f718b8744824f9aae679d177f151a27bee934b20c93f1a768f4f2988a24ad3aaefceb06c9931c955ae72d9a98f336d3eafcdf468a52a6b743a00017e423db61b0f881431ee7ed92497e8d2a58c4b6ac35a808ca16ed72546b9fd5f289e05708cd70ad44a1cce24f436be2edb15dd3cc94db2fb1da5ded5049149a2adcac0194dc9228a20cd55d8031a494c7ba0882f78d2571e55eb1019f5fe0c83a2aaad7b30e623f500e510b11768617fa82cb7661dc8971f4b57aceeb19f56e8c59d82fb4c3b5211d21b33fc4a31ced7e63ef289a5646dc7adff3ba545a56289272d70f1756683780670c56167ceb95fc4a370d78d8195d057fa9a87badbfe5c892201faae70ce1b021d9c62d4d22add0bc1acc05728564f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f7125ac58028c5c70eb74e684541478cef005dca4c27e856a8d960a006bd15af59cc6cbca395b86c968c289d2ffbeb33bcbb157079eb0f09fa368b11225e24a3269e14b8e9f437bd28f378e60a50d0924e3eaae73e071afec2af96c7d47f3773384c9ff83be7e7fb0579fc70fc83ce1bcdc15e501d183b972f6989a25868fc8fad82146da4f296abdbf78c6a47753dbd0d38a63ddce91bf8526861d9c36fba4dd88da8de7f0997edfe2fe9dc26b039dc73f9d61cc6f8218dd9454cb3aef3a10b1086b49412cdee1e34014cccc9c16059291b8c7534b322fe127701c3b87069cffefc12a6de21f1e8f5cffd8e4328ef377f76156b440f3ce75d6c50a20186510abcb76b8aaae2fb654f876408e5d71cfd1608e0034f99d0a6ad0a56c7e812608e31e853c8e233eca7f551a937785110947d077c203d8be4699c3fa59c656707dee14432331e58fa2e083f0663b6516680d818caa45617e3dbb05336af852c6d42b000e371eb7c0148a4e6d2aad28d7c725a01bcda270fac73565f4cd649be600c4d0a0976062079dd266429bc49a1b580076b886cf622c8251a8b8bdac0e6ab246afacf3dc58e7976bffade020f5dada46ed8f37fb8bf5e21657c7251fa5fa530000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055ffc1e9692f4ab98b3e2e0a9f0e87c64ad9d70872aa8217c0f3d63413df0f13948170a58c89124f89a925285e5e07d9d0046a2654922a3a040070f229a8ba68b6db2da006368fc097c4f8a62f96caca8ad0e9d2bde753b22677a169384786d791389ce4f96e60498a9c63d5d489f9ce94fdf236025a0978b1e120c2d301339a421d25edbd906a203a5b577869b3dda98877ffdae253d065742108ec03eadb0b10fce446f10836d156cf4a62d989ff547a906cb25415e290f6b3e9980cda73511ff57468dd70eb16071f5d4c776ce47a722d52b8814755f6f0cf291a170666ea13a127d926a8392c2bd5c94584dc883d029d8ce8d064f498e9b18bf00de1e38aee58377d1d21da7ac4d227943adb9376705c283cd493499ca9e14458c1c617ea0b339e4097efd60a96fef20fa3a24a76c3d27fe1512fa14e7e97e4c2793bd656f4572163690af24d5cd40a8387d990da4559811b5d4e5071cebb54c7a1545a3af2b9e162f5d95e0fbc0d342a0c1c467a58825811518e7f62059ebe1dcf2d62e6e877c29dc432e9e698781a9ea29094383281c3053df8b433409f4cd195097cbdbd4da36ca37ca575cc39d898e9508f07750ff3b86b5aa0e821a6525a3b8bd0d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af69f7ecd1035618fec59c3a0eddeee2272355066369355f7f4175e61159a6777f5afd1584b23b59ca96cffea7f75f8ffa6664d3e9ef2fa6e6f2007ff8329535462c86e0412924781dd7a42978c99e03c30f4a3f4dc435d80320725ed9ef246306800a7b735cd2d6c7e1663e425a35ece50415ce1f04fb492d0209e47f0022f4c823a5a6acb3a8ee00164c0881019711f70ebade96a33e8cebfabc15fd8adc963364159f4e5370d9e4e52451d98ae6949614592d52c76b09ec35a9623b40bcee4115f161fb6197b97e37cc32bc68faa00ec05fc177ab41bf8a59dfa47f460b5c05f9934fea761371b75569cc069cfa1401b4b83177cf66ed985aec75e9d763bdcbded9f5111fc2057742ac1187db47ee499aebf84533b134b108fe80ecfb0c6132517e57db0bc80db14c1753673cc7293f6865c09f1c76b1ce6573495512f327435791edb421ebea32da233d6f39e1c481a0851a24e1578a4e4bd77c6dae7885ea8548e55f23e660af7b30785d3d9efbe1587509ecbf681be33271085b368292ba1ebfda243258d54c8ec3dd94414b3671ce6dec56f3ecd10f191e3683fd03971cddc0d1373e87566ab7c9292b3b009f8f3ad2bc420383f6abfca9c3a2436d7f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a73d6d6a34e152790c653216a652730a9c03d6c0a8274de4d1fad596cef4c3e1e85665175463a289ec6d704f53469e73ac81774025fe9c4d7fd27da7cd321cab0b948058ae601e66b2838dd3325083523e9cbcba609289c5c9a82a1e46abd192e2d9d4fcae06c1a0d8ba470d834fada2ecde2747586accb97f8e7312faed4a8a772d29fbada17c90be019c78f19999ae77d3b1cd1187271c8c306096029553e977f90546ecd83c38e2fee28978f22bb9f3b97d5e751f0b5a8d76043f6a5e4569bce5cc31f0724a4e6f496e57ff4811c041d59a21140d402ffd07bd70e020a4b6c57270b0823626f04b607eb86773cb2c6649374f34a37ef8f1bdc7df4714ec95d4d6b075fa04ef6e1ccbd0691cc77dfb8923f521301acd335fff43e2f200b3e6618741dc5ec74852fa6dd5af6c765ae024c38836d5c8f469f02e5760cdf32918f9e07c6d60b84aeccd9c599784b1da5e825e1c51ee8ad4224337a23f6190cdd09627132f758fb3e8e4045b22129abd2d5690daa8373ff2aac2c8509fab6588f0026d8cee121b5209afe4840710785a814f66811febd671843452958425e766e71e586e9c9552bd344524db59e25a57369f2ace25aa0f0401f851085ac34d39ea00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d7883ef698b0c7dbec2168a35a75fe06a2304e99ddacbf7c03e9142323c3ecb56f29696d03bd98ba9de9a9508adbaac34e7428ad916a599d9dca61f577b5ee0287e38915d0e192900a957efbd7aed7c84c4b9d33acacf18f0aacb9803e84032914f08eae9b8f69bdb74b9c077f01ba2e1eec82e437e355a9398009bcc7261ac70eb9131a78aed0bfa36176211a28f90ebc76882cc19bdf3eb3f10d34f5ebd3c3f0c7d2aa8263a9c5db92f645cb760af56b0a41f5da80730489f61180fbb5f15fa8b1da6c6fee0a131011d6aaed939d8832208b35c03611873088b48d974391f2441a8164e28bdaf41a427b2a4019eaaad26804acfc003782114251492e60f019f27103e93cd861c339d0e2e99a9448d424ca3ce245716654a1308b81c3d334ddf0ada0f50a9ce93697a1e9d9389840d2b4fb19876874de5d98589d0792faadd844526703140c18a29e8030d06869df3ed75a917306ba8df53b912baf4fba534ebedccff871c8aa4d0cacf0c581eafa619b54ce109ea79905278f0d9c67f4de10e2efd1d97bccb6b6eb9aad89faee0a7fb47a33d87236a9ceabd90832156426fd98b31aeb2128a6f5064b09ee940628356fd1737292efe24e9a015fadbe7002e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090ba24397cba29761a0b596d5ac485d20bfbb190965bee450d71e25135c3ea92ada321c8b12803054d6a524e8a521e6eef8ea9d9a35607d13888af65fad08a77f752ad04514ba8d0f66f1aed0bf8489db7b4d418319acf6bb568c00a7ba070306d4ab7b44f1e7701c2610342d9bac2e150ccd77a02500c50b71f27a985d06deabc14bd83259fe1b710cdd98a251ebaeec850112f7055612b6a6b5b1ab662af66ece4c485492fcc81835bb2f520a1940ece1848e709930f56fd94eb74b925975f8cf0ea3f3bf85c0fff516ea3fd74e4f1cecd5b3ff72f9f89ba0e3a03e54df17d7cd1f382863c47be00a264af4f90b813e2c3194d2f7429cc9fa732187b20c47ffd0d9c870b003f8a0739d1344d6483258e75e4bdb92a64c430175df862267f84d1f345896f03ccce3f19fe70e7ce3210e529de026c72373bf2697a57acd485bf6dcc181ca6b93a8b1bfe12e8f2485106b4f9355efe5812bf3a5ce1563748c710030ca8b587f4502713228151b7a5dc8b451196d6e276bedc7fa62314a231b560837effbddef7781b195fe685cc710d93c94518df7e9b1b5b2c1199aa6a16484f5c9c18a0a9dcd5c9231358912175afa00df4ec685fde2a5f1cba894cec7996ff000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026fe0a75aaf3b22c1a0a72d8d7b38e0f71139cb212442b6169438a630b0f24e005c2202b8810254fbace57421eb66ffbc6209c948f4a3148c5cda888a064d51ed1f4940c975c29ea8b0b27eb1a7eb2c6af2d80b9890367ce7bf25c5c9d277b08150f72b29491fdeb687417f2a044fbb90f653808ad32eb4caf8837d60b5868e6a2f894f975224a6aacb53bd734e8fab24889e419d3003f436294a80c518fbc23768b64d690e3dd9e90ee9d05b3a5eb524715123a5e0502bc2a5d305dc4a8dd25650e0b7c16bf466e6ad9a493bb1ec5ad4780948a89ff1e8890c89fa9f64919743501569fde09890f1dcdae9817a185cd95ba897f65e0884747b989dc567572d06edd9f44a80d837e27b8b53090a0cc7954e6bb47591080cafc6f14e63c3642e2c1c0b1805a98234249b52562a919d24d934be6cff3ec36c84d1d30915711c06d359c8dc235b492a29d56548fe1b25494303c7192e64fafadb6f39e74d29b027b3c8aa0f139a4d3990de288527e942bac80829fdb2569a247ef70b55bb0999191f22d812bcc126d0991485154155c11b43f4769a5945b72cc108ce741031544f445216d8fad6e8be66f057133b447e4da679abf9c5fad46d2ff0ce9c2c1b1d465000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026e4284ff12f920257ad537965eedca0c24d6f31f62e5ebfd6262dc2e12ec980b2f9a68106ae051c6d2d85a0192932faf31fbe91de2afaaaecdccbd883f625b23849eaef9176dd99d30de53e9183e15e3ff3319099174b3d04460fa21a9ca38078dfd073e10e79b34888cdde4434f6534bda8580b8d7054eb3432ff3b39829d4b88246f4e71e2672faf25157bf2087794d9a8b18a232f309afcfea9682c7e8b8440b60d4cb276448c4a6f00e0c09a9b3a536d84c283d61d1e29b234ea372f534c688b11b6de582876872f0a39ba434b64a80105ce7600027d6ae62c65a658224fbc4ad7796359bf95c345f426bfbf0cc68550cf0db6f55e4bfaed77e461a5b38eca5cdf62595f05f4afdd1d9c72fab1f61454dca9f9b305b7e7defc2ae2f61a0d5f776ed618523be59c36b6f272bdaf885cb2147eff6f2de1e8d2bb1d68967fe8cfebbf47503d61abe6f4cc0858c1cde8abb65c6f0d0c9c21c32e5db5861a5433aaee9b96f8230ee64a1d03500034a0085227c9b7849e1335ee646dd59b028477dfc6512c6f4ccb906e3669465e18842bf5db80fbd5327e680be684b231ef299fa5bb999eaa6e89f59ef5abc2b73e5513dca78776afe4a36ec9528cb5efec6ee00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008aded47d51d2d2c5c09e4ca1919e2244c11476b692266e40148a6f300a4723152a1c517773159927fe76062604afb9f65c93b467f09470c0ab8d1fb831d5b9c1947f5e16384e4abb61d1800f35aff874036e046e1a072be361570642426ee32502978b89c35c6768d6945edf6f3d3ce7171852254653de97fbd1235341384fe42a6473eb8e61d89ed3a408ff4649c9f9e017de3a8888b10353daddbe0bab0ef2b6266a5d0bd07740c401a2054223499a2c85a16b715c29c259581df93a4d68ccad514e72cdd0e6b2bb711f78612f0904b5f18d0e0f845610fe61be307a1e2850496a30fe4d5aa9a546352b794d3664847753d9a97dca04b096ffc61e09f5e1e03d50da1674895c6ee50b28042533f8e3d29075fc0ec7c0aac44d1e1958148a422e80cb8dc3d98cd4a7e7e1ab0f48e53b20c4acc706dbaa40146625d3e8263715621bc8b498a146c2f613f06d3d7e4b20d8ce93e7c7335e97d20f5386482f5c31f64f5e803f951ad212587af949403b35de45ae616660bb3a79afdfca28f2428a595c04bb840ba2d938e93f62c1e969340e2b32217ba924fc62d39f25c2f13c2c4afa6771aec85b31386e21ba29db0b4ed3b1a287b85863a09681b60f6786a32500000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484020f7bb62f7358136b4ebe2517c4f4a0e2c4dab490ab62664eb4317d383d9cb6f08842808bb556621768a1c848a24b18fdc4754d71e0f17157ef4fdfc5252d42620e86365fc25ceb93ded3498b740e12404246cb264ea9bb04ead86b51099b98f1038269539c3cb4eac5f0bfa9d83f32bfa75c6e21c63973e619e5dafc49da8af16c49700608495523b42c53f7a3365a36a74c33f229677da1c6af49485d4a02801fd0aa39e515ca9298cc61deaede22c86ee67efe72ff3de8c616093ae2720512159070cf7d33a069fbd39d2654e519eff3c8065f87af06654ac587e8d98ecd70f67b1adc3bd1c89e83405fbb73419b7348f69400faef976bb12ed70cb526640226e2541a3b9e354f53179aeee1f0ca9ade907d46187ac60a38b3398810d340b2109377c1c8b808493d0185a23846152fdf3f965781e30470081bd24b9a405ed197e0bde5583ef29d997564e57f0a8c09bca7130ada7b3c06d1c931fb026b422250431c1c1d82db2eff274e1938d47add9afb1ee1b1638e3136ff4d8a87b1213248dc7588ac7b84ebe8f1b6de8e434e9e9c19b185dfe1706dcb9711d1486924a1fabf4406856041dd940e475331065dcf973a51ec633661614b7c858ffd3b05f1c8beef76bf185b781eacced5a0e86e31481bcdff5e1811b6b4ff97ded0a505d0d4ae32753da94d6eee68676acf80e01d6f839f4fe956e0b21d2907a39ad90fb2c8abb30e7f458df6117aa3bb484f237813a609bd2e5b34cba469a764d924325234adcb7dcf241f87463ec13478948ef38e316f11c5161ac52ed2c26ec7243781aa8b461044218959833aa36479ba93c7aae164e3f6ad7111f9085f3b6c787732daa6702b80b22b3a6c95ab27f0b9597f0872d6dc09ee9b1c587456e2c3303f9009f482cbef8978670fe9fc927e060e01040fab8930fb38de89b4066e368173127683c54f632a0e033e2641d3248eea2570051770bf00bccbaf8f832d343496d2ad3f5c26ddf8034162ffbbca67ea1bc8f140176d1ef63fa1589d6fa1273e1981d0355cda23ba36591efe97a47f318d0dbd5d7531ee536109dbb4c6862fd2ce526ec2ac405d2586f245cd631e62dd6e4c1fd0dacb78b32a06b53bdfd8a81633f205b2cfb16055670c3f4aaa62f93eb916299340d51d2a9137b9f8531a401372f3049b7314b04b439988482c16c6016a042b80483543b9b9c26c324be10971f9f256ffaa989b5b576f530903618350990e500ccc5266951f24c6af7b1f8d8ee33052b950867582c643aff9efdc486cd6e9ec77741465a24c004d6308398b3bc880fb05dfcdbe0f54f4cf9471ebac7d080d5e646c640482241e4cc369f0fe63dee2c92f1177fdb7606382a20c90cbd2a20229562b3f805b666691ddb077177b22827c415f72102f762414c575ab93c31744296a2a626a5761d2d368777e209d7990f4bb20f35aa175a0f7b7fba0ecb2e93cd1dbce1cd2e212b339b29480bb3e6b01aa6012b71bef7314de3d6903987f36b91aa798e6e508449002b5c8b4e755f1f2d406fa43dae957a408b6d21de2f88a1fa5f9c6af856a6ab82e6ca4b6d16d83b104c2e82c7eaca97cfcddd14159a053b912daae8632038f7d0b2b9c575beef8704ffb8430555d5d51bf9e36b6ae8b12be9c846356aeb75e21468d2172de3e862185aaca92c5dc7114f6de403a1f1324a7963862f341b5a3dff1ab80d8010ff151dbdf20dc628989a19cb4506225bb62efe1958cb3b9682a6d3917e97a2f4fe2716e3eb2236edafafd356d1094c7a50e056773fb50d20d925aceecdf15a216df6081c5c2b157d613cf77b37aef3ea19efe9630bd7e6734c8edcebf751af7b2f802f89b0c3fe898ffaeae408b0041029ee478fac75d43840a771f980ebd0483b5716d18fc16d7e70df4773b83cbd39ce2cf302061e6b00dd71e7f1b256561699e6184ff1bd4581df8a88e7f45d9f46ad0024369932f84f033be8a4487734966de101dae61b20d4b6a32d70090431cd578656fed2f3331443fde4cff077ab15f05429fde91226ee595bd3b7a7faa46816bc7279fe45d655bf1cf9bcfee9b6168e6b1456b6dc260635ef2a15f25d815631a9699ff54d2fe1d6650b260f33a0d569e0158231d87164cc97cba788444c93271fe846d29e99f97305993e8540be60f0cb26a669737ee62c361103034060c55a5b608b634d359ded626c3b7c565f2aeeae08785e752309ee7df924391b95cbb8c77e3ecc856124b9d8580fef31bf17fe062d15bb868674d99d46d2c4a9900cecc36ca744c0432dcf18686053e87bdcbd891749ceb9a2fcef29cfdc609d373a56aae816ac9168cfb364cf547a1e90a6ec092689c54c0dbda9cfe808c194ade439e1c8dcf89cec097048246425b4cb9a6d461111b16c0fb86ac4debbb7cbd08efd6f972ae17d6821d376bd8543473e35a98311c71d467bebf6ef8941e2697218707d23dd979d0cd443ddf9c697460b15644f1ee2726c443e8e8e8d69211acfbae8e40be2af2553ec156a162efb1f15e9f5bc0f6a389337618d255b0e8704007c8f0890b4acb4b14a503586981da199e01e543029286ed09ee0a58f3765356d90f8aa489f5c867143ef82fcfe2f24d059b7cd1d34913b29c5ec94a61f74575374719d65da7d99495f593489060200f3f4a3570bdc23a7e76b6daf1fa9017188cf16013dc7b81e192551372c0cfc306ce65df6016a06887dd052ccadaf87c19c5d54cc1586d3eb06680248110dfc98c1ae92fa0a5e26c0247ec04f76ccc3e5d53552b83fcc5c7f1230d3da348af33546fb6dc31ca3715fdf9487b2bf7b195e0d7993e4a8a6e93922f7e87608cc77d655091c4c2cbf5410e758ff25bc7873cd3e5b86c453315c720b36ebbcef61d813dde0d764402540ce83b5d54ced413e6a96276c2786c6318c014d9c168cd2e2c79a3093996308e3e7dbb473b5eb59e9e95d8c55dc26ae4c4865a3a5454b7ffe5f6e67a0c81f0b79f1492c09053cc01d7d04a85a79eff67d49e901efd08dbb64d07ebd260484072f97d53f7b1e9d6bdb66b3bb94f17aa0cf9f6e29adf977d2a83cde47ff4dd429a57fe0c13117d954459332bbacebbde1ada7790f5d1f2d2196dde9f8b0fa162dec692b7bea6838c1224773ae9199e20ddb23705e0f61ff8a3b35e8f92b054714f0000644196f87773bab4bc00869ce553ef4c482d38965bd6b1946e070b76017e05908ab0ff0ff9c0f5f212c727ccfae5d5e9e502cf09f844852dc5f41bf97255d8bd31304b2bf99f589512bb7a916a3908246b067b2afbcb78df5e7be3f2f010e910b8016a544b3eb9327c7f7cdfb649e453d52d474d9aea9146753f000930062db79bc1b3a620845a1f9d775d9def04682349d0879ba552f95bee494705d1aafec9cdea39b872f697c815a1d8dd1ec3f7cffffac678362c3f8bfc9da28b51b9dc64f00a38a053e60c0e578a39615698903274a603bd855a7467552cc4f6807921cb107056d2c9edc5114138dba5962846d6de1ec6ce47c94f2250cb5bf782ab33e2f07c113c6f0b2db12178e2765abed2e2fe5d64afa516b00d3056095d20f2b932ec66e3ec5bb5b0ff9e23eb71feb8dfd1144e85a7f099a52d3dbc2d481297424781c3f729af6c48c79798d1fd9c10b542bd5c67a4557dfdd4af90ad8e808797be988f703a47ebed9352e6eefb9743ef4f6d889589387f909305e9653920119c6b31106d9140dc4391c28aa1dd61275bd25eb5a894209a55fa1b953c780229fc53e05dfcbcd0617488a8ce29c341406cf06c557a89a2d2b2b9f396b9d8113712ae0f48dab68396668ca8977140c7d24f985615c90fbbe10cb727bc246d723a6d5b404287b7e58407abcf7be0dfae437ece3fb8bf09a13ac460550febc2c09f3e4f674d089e48023b2eb23fc1e1ba873b0e0a55fbe7f11be74a0e67197da0341e51651a38149a0cd4b141ef989e931c8047bbb050e083c7859dc87687b1416522afdbb323a00fe5de7ef6cf82b3b59109324108eb94909aad8586fdf4cf013592db678504e20f64d41dee8fef9a6b730bc3f3d53b4703104337116d18c35180d29b79b3d71a55f1478201072d67030381164564f4fcf20cee906cf845538194f5997f47bd80000a63153b52846382a0279190a3e2576e592bb268aef6bfb1dd8148f6d7a614e9b7bf151885e91bdea0a4b2ae782d97beef62d4320e6aba326f5b5262f69ffd33c1d56f7e75e017588b15bc506685d3ab5bc687cda7d3df913a597bcb10f7c0c03af8b9ddcb3c78ea421faed3395b4af1606c3e0ddcbd24d2ecc6569a148a36b59af392587595631044a725e0f32f166db1760a9fd1317c40389c8ed73d4cb2a5a1df4f16cf55d51843a98d90887ec0e0f4cf09e36af636e1ede8031a6cc6cbbb6760ba6fc7d38c836502dc5f59fcc4f3a097894338b3ca11a83e0518820462f5b080710a34b2624d23b40f141d4551cd6dd2795f3491a961c5b83f7946208cc573c2b096dfa77f8a727c5164809ab2b443a2afe6d3ccf23102fd8664bbd32406f3795589b1aa2921a32466f7feeb350b93765a912ddb4a80d95392d0c5b7b8339d25f45e003869b9b081e1aa50b5c45fb205879d36ee114084b812641256f62ebfb54317abab95979feaaba28f61fa30724c4b4ee0baf94031ee1a7ae92f03263763cdc0534af3b8932cf20a66620970f6880fe68dc091e2d3143f7349d4d722adaa3e748e95abbec9823ee254c1f575df05b820b8abe4c2430bb61c23488a99857151f80dffa9bcd0e9bdbf7e81162871a436f013e4cac092e3f5ad7b898fb659f8b226c89e38ff2a98ef39043139b822791f7ec62d4bf2b850d78af72feaccc5ae8d13beb6f03a7f5a4fab22443c73bf0350a6c3c6ad32c22c5994cde8cbd091dc6130ee0d738aa62a575739b493b7875a7c40d4dbaac1b01b026c87e29bf3d833006298e0a5ff2c345cedb65fd448e7dbefc9216169729744476cb3cabaff0bf15377c509fc9ebc088ebfd9cfe645c2b824f9cfaf9e6026c2bbeb332512c0f0f309d8be32d0181c34cc03bf82a2d2f07744c5767c74d2c527dcdb1a0eeb95c8ba62122e471a6208860cc04ee4d9a8a59853d6dafa9ea283c54f3d83be912688fe89ac73cc77e3a2462a21d1865c3c7f7e9959e6f7b13088506815d2496429d8261e16721147dd1a85198e804b6c2f4a5b00e11b9a6f5084a9d9a7279f7f8b04a8a4d92dc6d4cdeb02a790b9a03765e83aaf8fa7d0f392e2efc174dd8d365f6faf3ac5d05d7c7183c2031bef14f91c31c9e44e529925c2436570b4be40bcab8c16c82ca75a7058554beec691cb5a393901452cf79d34b078e7070b34acc39d31821f8666c8dc2e937b35afed4effe4258486ecdb795db08506233da7e6ba74420a42749304b374975333e1f25f57770f41e879bfa981910444c082d72f859ffac03bb8561e140d372e1202bad747133d681cb4855a78d1123a4956425bc6a4830ab9ca9f4f8c17d3751a7f7711a2b9c2372f25559eae327b816d082b63e9a81687ae590a7585c36946864fda059907ef2aaf09e57466908f15fc5385dc9c5b3d7303531326c99db6d76e37691e2d69e7e142b0e1510412a78cd9bb1ac3c24f8591f11a81f793b1fc1ea3b9e2e3b18f84674b68b7bd959083904955cbc3b1ab1f46a445a93973792eb01cc8a15fa2d29d7ed86c114c5fe269b031b5c837f646dc93ae826b13274566ea5b11e85195c8752fd1be2f5210c1f571925b593e1f47d4e30dbd36ea2c50ab0a6b56294e70d2e1d5e092ab57bc4003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000055118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000550d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000550a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000550b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000005529a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000055141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000005525e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000005512978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000552daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000055189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000551159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000005505ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000005505c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000005514d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000005503db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000552ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000551213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000551ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000005514fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000552b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000055305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000055280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000055223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000005517a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000005508858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000552618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000550f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000550e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000055172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000550b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000005505bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000055137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000552e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000552297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000552608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000005518373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000550422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000055204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000550afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000551998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000005528d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000551da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000005521d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000550ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000550e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000055107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000552f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000005509726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000005524f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000005503c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000551fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000055205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000005525110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000055283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000005521cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000055094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000550c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000551f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000552421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000551fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000551bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000055304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000055000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ac21e3699025703ae8b05c17745268c709bd0b221b5b6a91f8369402030b366e3c2bb1526db2ffeb970e6894e036a0d4d004ea0d5cecf4927b30c6f61cdbb96d2500bca4b1833af32891eae488ff3d9c7b6d04b5d65aa488dd27922f1fbb352daa1acb3b0227cbd412cbed4bc7ba3a38fa310aecfda838eb3e4fcf9cc8ce1bf8790cbc3e64d0c1cc59c3d0f3f4cbf994240b0b90311af9b34b47f83bc0d4454a41720cb07b924eb0e6755eb87c40c419d84fb049ad6b6a8b55e8e33e76c2528283e819f8dc36c2b318c3725b6a9a4a891fb37f65e301fda1e7fdbbb6dc07ea8c6563f99c8b9511f92b35fdbfd968207c87ab865ea238ad67b70c3c0ea098a8e7258b783dd074304485553b6c7be398235a6d43c3cbed364023301e13dd12807e041c22d854f8b83f2c4be0afc28736c89691a2b2b055f1e5debef852809378ac7913850aabcab912d6317dc1d4079f87f61dbfd4e03045f6fb787f8b3059d1a50a80b3e94c6c259c14598b024eee5c4ae13ed343e23dba5a70cbd6fdfacb318214c7fbd2bf7b12b044bf9d60dbabd3b630fe4b5a4161b97febc405b045cbf143c653620712b87c5550addc491a6be64fd482d837ed74548887446df60df7c8200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6a556c1f116b936fc6775a76ff493b583c9801ad0a7fcd81f2c388a2d6cb3b6b4092716bb37129780d1d2c6afcaf500227440c4c41c255788e1e36b9cd06816bba6f836b54ff5c867dd76bd8f0b2ad5de1a77c257f597b0159eaed3ffdc6b67c3ea5bf132c46317ed79b7723023256d5cf72c1604425a5c54f364537b0427c38fa833747e866fe36c815344deef600bc2546274c137d1c1a30217eb68a5c7a4d31b52efc12009fb05be3eb3a5a4f354ae5b5a3bcd8759cf14ef1e79e7df11e2ff0b757bc77ea9beaea4104b1088293c8218a8a83ff3cb2de4994328bb2b1bd20e52d05fa9412675f0f52d4332064f8d11dce360bc26d5de2f28a28c8374ebf68600286ad450e2af3a102306002242f5ac602cbdb539a6412c9620cdd1682cdff06f69e08b56ab8bd70da265ae4a261dda8536a7ec1923e3065ffc511a22a54d3beb8c6e2dcf77144dfdd69bf252c742277c2e8fa270cbd88072d0987e33a2f037307ac79f4d6ef0d6bfe10375053e34f6e3faefb9e38e4bbfc3d2d28fc7463646aa043501277122575f5b552935781edb51b3d3ddc4013e161f5604aa14ef2e7c21ab688318a8c8481a1fd0fa827421358446a5632d24a4093ecf494eb2f880000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad9816c5eafde93d2c3cf72b35941941a8edd4765dcf08f78b4dbbcc02266430334434f0489376ef8ccc23d5b13b2fcebbd33f75afb5702ba7b2424fdbe302439a2296978e9088314f73be0f543590543e1806974bbd703ea19db605139b6780761f8d10436e92df9ba91d00fab560a4ba2db8d9963e1f3de49fc3010ec31037642b6eb7639cd7a6776f97315c37489a002882e95ea3ecb7888856c802f47e143e6728b5fecf73c1176c0959dce3a4062f9841d984870bc154bc25889e4280f0f2328b7ba39a26d0b68b5a768aa938c975c19e790825f2650dcb0baae0b2f0864b7fd8cbff15af609e52a1375d3f58c20560082a33dcd52a2e7327e78e20392ba2dbc84d4a12fe707151ed24f1e84939d93ca8d28c0442a8fa2b45f0cac0090c8a9232272d74acdecc56b84f802a7ea5cee72e69766ada133cb8f781bb75fbfbfdeb56068a2ebe70bc77fdf52c46fa4e1961da22b7f9824aa627c22a15b6c7d74d9d1b8022d9066e1d61c2d9281299e202610354e33f7fefe25b42abf7a66b238a59a8a6bdea7ea16d47b364317967dab95077f09cb702a0521f2837a36ae4c8aca6a70a585df76e96efdad23c4d1d94edf2f38f1a257b9dcb7ba7569c6dcbab0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000981c235d4092e755884470efaf2010b105a0fb2a88996d53ff3f17372f316a279b5aa17e931d51972ef57e5f34bc5cff77fe38862b57722e0fbb20a42cdfb5e2e9e9382c938ca8b58a52f4be23c040b700300a994e8a17039d2fbaad4182a6ab4064ceea94f9e5dda3f1fdbc6eb2addb9395380901653bc0a558335867a337394e4278b12f6c9c5bae5d405aad43dae64bdc042d90ec8a068a2b2c0959c351f1db4704d380c539beee6c68220a3147db5fee87f4f2eb801b60fe562486bb5dcd5012b42b52473d90e2968714a8a722aebec5f5bdef9fe6730a5f04a7018ae1b352e2d2d2be7adc6b1824b529e156db8128f4462d109d554eee4058577203310f4cfd14a80bef13115ac9a84f3918c98f9ee290f0e2201377ec7459a1dcbb0981b80e98102e9d7801dd3d03d18bfad4f26c517a0e66f11d73c665046750e9e9b91f01a14094136a3217ac364d05a13a3748d95eb0c34ad35e674de51147d385a87767435ab0145494a571326d51d2e1f606d025b79acf8062cba42af3e13abfd84affd4fbd0fd0d257a4e71dbfec746057ccc1cceb671fc91e171359c5a36f178d891cef8ebcc5a111daefedddc0d50e4fb68ca3e9a8236ed58775df4035efe3b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f444c79cae868834d322e9341361816a7a423ef073fc870b25d7587a9d15092853d5019537d7619170251d438d4e7b2ae3cffb327983e73f9d4301101b355aa35d08badc7ca4494011f37b0852dd4a9878f82dc6cdee8785b33f97f82bf0d822df392dd3344e547c00341d3bc525203be4fd81ae201a2669b3a293cb007bec5f64dcd1d04380a31c71c327427585005894eb27c3e9dd4a8c12c3987c2d008a44752e1f52f08c304532201d40c85622d9b3b2ea50df980add1835e64a605a26a10b41a62a3d99fd93226a0f5c1c580e4e6111b0bfa8b897d7053b85784b3b6b0f641e72cd6112bebd9191768031e188507cba112a216b8991f2a764bba61519377f83403037ad319bbd8bdc61b9c74bc6ffb256cc830c4b3cb2aa29f8688b76921a3f538b83382dc0ad9660b02a8991f3268d4a0829698ea7f044d647a321f75709672236aa1dfc4a145623eaa4b3b43de92d2b693af5662188b9fa520d21df4260c73334f5e5622a65876e5b99e071c32aa43c12cfa98240b3f86c9347f7a357f00fdd1ed477db83ff9ba9990cd690399cf92c5643cf0e2ee53a06b61a1def8f0a7236ed35b9e6b0abaf5713c9ad375cc4925c9ba729c55eff015132e4d00bb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008440a21cad52180f5433df2600b49f5ba167e216d1563a28051500c18bce0a628230207b791aad1a2823902d0447a194fcb0b1eb06e46a53ac1b1cae09ab0529bf9b7a61c8d0a9d92fb36f89644bf9ff3b35a27bef6a6e3b17c2c0e05a11a30e024aa6c0af3f40495fa0969707c8851685e3fbffff42e887c46b20b9e713b9c6d79630b5a27753fb93227e88e8d42b256eca4e9defe147d8418a42c0332042aabab439c2b53b9dfc8121b413fe5c03814f9ee278de6f3db01c737da3a38c131217c2f08e2498f3a2d70240fe8699250fc45b8afe4045d062729bc0be00e2bb226ea2bae344388f93f2387fb1d8f1cea004e922bb9ec672d9fccf9ec8e1bdbc933e1d44bccab4e117884dca1fb5985b4f0d7bdc4564d7a9abf897daf41227a8e4b21511c12f9748bbabee7b77f829285ab4fe052a6322467a3e803a3f6aa361ffaa00cc18b769d7a3cdf251d4cd19d307910d3a95ea29b1886c37eb80e364641759341ed5d197d599ddec7c615b07dc82486afe5fb0daf956d454d82afec8d4e949288ebc3637091dcadf25124940ac81242b744eb1309f8b163ba355d6651830bc92fe9fc20e67f11ddc6fc4a97c741ac5a722941dc644ad52b3b048565a5252000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026afda16c36f7f551d8892f10aec9c25d10aad6f8033bd459ce864ed99e7103aa675be63d374140aea533e5735aa67f2c38664e3cf7d74510c814507fd3e5f000f9c7b4cc335e0cdfcaf46e370a943ad6c43b0ec57b23e28852032ac9396a4816507f79478841e092c4b8e5f86f200fdf665f842bfb46792a6bbcee763eea6beef1dc9c713cc89b6597ee0cb13f96aafd4150aab57ad0f529bf6a749f163911c6502b344fd9690a36102660e9dcfd5957768f53a074b88963aa34d40274677f7fa67151992a70127d9c0ff418bb4bb5d2d300858d5fc0f0f4cd3f984012bfe51919a5f328407870fde67c340ea459c5d8e88610eb486a3e509f04b0a7e768d6703a4ecf1cd2eb504011745ad274ed30c3d8d9fa4b26cb5a5f15024342e6270e7f556e99445e99db5a2ad11aa76c432c5a1767df6e57dad06814b3bc52a3ba3efec004d90a8fe934ccfffca389f00c2380d5180498091a8547ffe78abb6fd737ab5e034c8cf9bc3798ed313c3fc2c7db4ab1d6a153277f8438618364ec7ed8b9d539e10aae09293b9f4d4b5b6d4513572eff50b6c15742fc8c118e27b880738132063d0d8c65ad23845bd321482a52260bf5f3bb505e6524e747951e294d5c8c4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097e28c807826a23d23a62cb8aa2b36c701c5803e0ed2f19fc200630cfaff83e3ff1f7b698fd549edbb2377642e6e8904cdec211ec983d60bf8835a5ec0ac34b1fb841515a9be6ade2eb11f539af8ec26c392bdc855529945824501f243414bf5b1c9ee34f924cff53b80bd337e6310ab95690bbb0a93a4ca9c226b6efd3fcbfc8892496bfc36e5ed2e4047c6d1825435c153c791fc09b91f83ad4966cfb79a045ca651ec3bb4ed6dea9e7c6a286dd4eb852b723047889406b3e527840f43a741f76cfa63bbe8a6346446da581348d12e976f0b5f79b735c6c8d344870d923fba68a78124ce85db58821429b07e25b866bc135687d825ab8fb80f58c1d80882fdc0eff8cff73e25f4438439025887e372989ec3876fdfee4c132e05e51dfc47e6526e6a8df2aaa2fe0f76e4df5dd04ac1fe10dc4696d0ccf2fe3af3d1429c1781c89d576040482a92029d083d137e03b4d2c8959271dcb25ecaa332be6c73d4e6f42f4ecdd78a66a39a2025c9812c624c0af8882a80816ca9e446e08287ce536fd614d14e07fb90b91f2041fd04ef42551468839d980b4dea9eca739666305fd454fbf69aefcc895569d269685325d5817cfc608aba1391e00ed11b946cb3f6650000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7e73cbe849db697d5b493f25dc5e3d1cb2a0c2b7a15db6aa1cd31defcd8cc14a345489ef46cf3d4bc453de2e1fe8d4e32077733415e21f9353abf1f0b202e9d289762bf99fd13da6f96d6246dcaaa0ffe0b53913fd3c6c95f330cdf0e6f7f24e890a9b819ec0762375426bf990d1d765de69e74e8c217c344da3044f95eedb035551cc658d809de726f7f7db0fc2a97bc1b639694afced489394e192827b0dceccb88b00b97ab3357666921ac002b7503c746d12f217cc52af2419200a649012ed214390d476022a29003ecd121e79fae249414779d557f11f47cd14180f2eb6c2918a410784e382bbf87b1cf42021d2b460b6fb43f78bda1fa74d515c853c3a4a313dc3539cb74760977d5f73c272c6431708d3bc260f03bd138260cc779b8e8240d7195f21cacee4195a40fe57abc871c1e4e2e21ba5072e4a751a4790f87185e16e4ed969b328f683ae46c83309b03fdf5f2384e86580afd3904d774960464eeab3c296f921cda2e01434ced0b36afb5cc2828810444e43cd4553f5a54dd348df4b8dd84b219273ecae8f88a07ea7d3acba478c0ce388014de7ad0d58faed25ae9381d84d93e8acc1de8201bf25239473643de4d3aaf17117783d301f20100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b7df5756f25812f2d0590b65d378060b45ca657f37e520f6365f250d1893b6bcc92e9f312640a3166131c70fba6f7f240ffc075e7182432113f1781da3cd74245946986b6ac123d0ce5033c77db2907bec40e19de73f3a07e173532259863efef3e06ba94160c919471d1061d8fea435c8d3afb2fe712e481a84a1efe75ddafdabc3af89357cc19418e3e29781669197c68fbea28ef969ad5df3fc34a1144f64f02fb7daf17b7423a6fd088ca24dfc9faae3073956fc81cf5cf1a4beae6b267a27bad5e25636e70baff34a2ab5323018c941a0160035250707eac8f1d24892c34df9a5b5f167de8e7db340772d0cfe99ee8d69c17b670b37a7ca680b9fa6251ce33dca539cf171e4ad8a4ab594d94933a87729c6f1a6c42acfd81d126191751651c56146039a0dd04ae012d43401b5bbe8b56fdc44696b0d598ad2e6cb2fa538ef092a14209548221950693ccdc5916df66b252f229145d50b5f8bd8c3d6e9e28e010e819bab113d8b2209b2f5a513a6e1dd060c0269eb2b2c49a52feec32142ebfad460e85c3b8943fc5f47cd0640372890a1c72fdafacead3a5084af00fa2480c6d5694f6817ff04b44438eca2b1b66c90d9f58857d5a9af44fb68d11d52e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae2f175dd846201cf6141cb020f8c3d3b53d7145f609a69ae958a83a914ff97082d12cc3eeb582ff207bb8a884bb17e70ff8717781d8f1455d22902f886add46be51ca9e419cecb2b3599cee49333b152a81bfae9364291fea165336e0e06b515bebafec21406e250017c518b2234dfd3f19c6e74dc483351a595fec1c58226c481c692218757aa30d9c2cbd5406feab429670f9d56481687c3fa6b847b7750440bd67f3d1d141efb60279afe6deb1d52d9f82db18db3feb8644b1cf477f4eb9005739fa664d9d2cd2322ee1953515036bad166c84f35262db2cb2931681032ef424ca947dfba4191cc5cda60d301dc43c78b0402bd2c10270ce4df2ce0fbb02f7eb400160a41dbb793a2247117f8f2e1681713198c52354d710813729106e70e724cbaed0fca142a6a792e0f9aea3ef4e2047201077709d1c190c64b785aff1094b8c8838b9abe3c077ef709d6f329c6bb47bd551648d9f4719a409ff80c3a56d8ac380b0f566c118a01b7b2d097096161ceb554e1322a73b7f69c449dcb80ceb7fbb57894415833452e682111e7d4393d6184d3aa591c6a6f432197c7373a0e3f95de8d6bdfdb218d453c53c24e856f096f334ca752f534e3f50962308d1c2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095d75867bc91fd0eef2358cf20327172b26bf9ed7af35db783aaf06c95a2d8436a66f2342028f6d834f42818a1bc013ed238ce1f913c7e5bbb2c206cbca6d7aeccb83f8d616be8acf4a2c15136bb69fbba18da18d162a350f37c39296255725f2ba95e4b3c01e51d6185ad7bd1baf72222614acfa7c244abce5b327d3b1441ac9819e66a2b75e8312ded8c43c4e622c95d2b635978a2c50325f7d8759041243fdf3f2948c266a8dc42010c657b57220762138f5519fc14f1d54e60096fcaf2b964b8c18141a87ba4986b6a86f4b5fb87e57aa680d287e768f783f0ddcc7356d563bea1ce050937986c5ae03d46c53af54d80794eb6d8d64c875bf60cb05a45e66a5f8e975c87fd12813d9ae61aca2fa4869315aefed1d557bdd4ee396a5ce2d18f77d8845ce9f0fb5e5248685eac52895d9ba411047e9aa0c0fe862b73821a022cf61ac01b5810d770baa594ce9a7e9d721b6ebea9fb5ed1bd18b8279448446ae827a5c9b0907ce33c2b457e67380bf63817c1d622fc44d760728b4dc265b6b2370ee574fd5d0326580797440dcd87c4d915cc2a6eb6e50379bfc60e0b295b11557f58f610c611e16e2becffe14c135666c5949aa62418690456c7f8fb90460d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019029dbf7b84335e2c51333e8ee79073df90f1a7a4b957b35016c40bff2bbbb6514d7b8b291218ff4b6bb1ca4a77bbc78362115b71a150dbb32d6481e36402d516132d78dda4f30cf3c071e20fa49a5d9e41838b0a67f27ce8ead9e7d7f0e1bad40c93e50ab7fbc2d7a09ff7e1333fb49992eb8b154162ce3a65bd902e579da279a5783404f86aba575f583e96c3f75e6b81a722b2a7d0116ca99ff6f14a895edd5cb0d0eb26ae4564f3f8da259a961cf0c39db25dbdc3541edca41474c3e3b8c4deb9713ec261db9c0b0b685b397801b4bbd1b9e1fde0bf00fe4ea38b4aea42a77c55644af1c90fb0eaae54da6d72118d0e99ac66229db94d73ddd2a9ef7dbe1314ed780d368e81b8757c643cd4f69b72d1bba34b8565a48b36f7ad8c90224fcf32c1220881bb5fd79e4dea87eb4d3827344dc2fb852b7a2fd3d8946fda3d17cb43954dbafaaa9e164acaadf5d084844a3793c24ad3084721a1cdcd22a1e21b349b3fe92380dbc04c2165c23075f8c97d10b19766fd2ebae3a57dbbfd077662743df40ad3fd15f652bc649c6a65faf722762788eb9b4a4d4ebdbc0e3a9e92f3c54c4c16f564362d297d1dc948fac721c1cf90893c027279b589dc5ff3eb9d3b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eee2725861be318fe25409d9c3141013600d1328bef9dc44d7714faa5e817dfa50d1af032235d3e51efd719213a1d47298023d434edc18ff22dbd32e62a34b7c5d122168cdb0f93b86f84b03aeeeacab70deac5995967020c115f27ed41442aebdf0be494121211284f1228d45920c369ed0f61455920abf7971bc0a1d95c70a13ec1aff187f74de91d436ad1818452be57af80b2192a9d7ec365d1b8fe812fba63d16dc57fb0e1100e514c77f4961bb275f1bb73b8fb6c6a62d56538974d7ed508fce1a9dc9533486ae302ade1be8d2f393c18034aa19c21aec00bd1e3e07c56dbaf6c427c35de7a1139c796206d57497a009e72074af6befb2d9072876a909598fd7effa91cc33c10deb786d03477ce4ea7529e366f22ae88cd4e3536589f294411bb466bfbdc5292e5464256ff4c90754552b9ea7a3ddcbb3e8b4ecbd4d8d671d65cf9e45fe9d1fbabd6ff4d6d33df0a7099863e387f400e9b3158dd3498cb1ccc905b7d7261cf549e8b65f06afce7169da02131d6d2d2173048d4a07f697cad118b281780c92505f38f7ab86f4211587e6971fd7e0c67a086e6f079eadeee79fd77c76c4c975f2d3ff4349fd384616be77ed5224c3d705c385c6db6dfa4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096dfe5f3bdebd1f38c7915ce3837d7590d64a16a22378a0cd2e4f38bf649318285fe4198cb60624ba372a8d1aafbec634225292147892816cedbbc84591172125c95f20638c1068a17759e34ff534dd52abd853cd711ae8090b4699c1d7df458bbdeefdf9670dca6936fb17804b0cabf89166c418a6ee5557b698ea57b3961a1b2e8e00ea3ae034cdf57c56cc9ac6a83c767acc06a7ec3b66c1c560901b6ee23c099856bcbfeafab8c23535d2a55aedf64fae93ee0bf5c75465342cd10409ba754a1037dba742606af8f6d7cfcc14ec1112f6131190fcb9d2818c6f53bc9b5374e53a7e6a74f960f07b8d94bf36d6816e7e725834d44a4ca6401b8375d8f2532f308f09d36f69fe4ad6c75e93e8667dd893c7f3bb164059169a5c65fde1a3e172b679e8724e9bccef815a9e6c55ff8029f121f9bacc673d4b40410f8d95f1998995baf5fab31dccc298b422de89e6a5663ea3ddee7d095810166ac41be9a33b86de054296528f86836479498d0482384a9eaaad0d8a4d13f9709eff89520fad876a8d08954bae5105fd54d4d8b9a3d751f4bbc9dfa934672b3e09752c2ba0b07f8ef4532c4e8d4a0158ab777967c300ab5329af5f5505abcf459b96949a12da60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2338c554e7826bf4c08d7ebbe04380223715195f643c5be6f46261d2921f36c13d853c673c69ff4029fb2ba8d52238a535e48951c1b32ef238fff6f2c45bd1d6da0ee72d73c69eaec668859bd0cc135ba328b9ab98845cc5c745cac5cfb8e3bbc5f5aaa65f610c6cb6f3a18f6f8008997251d9117b30f634b10478314dba36c2e6b5549c8111a00025a9be67595f6cd4ad7102c141f92bcdd7c2d768a53a3fe1bfa0248218de41b67455de68652f00359007d0daf5dacdc2f0c7721a812624737b0fd3f25682c1074cc426106f761ecf15e9d28a3b1d78f23e739c2399463a48199efb2167daa906f70d79a14fd0fce5e8dc2a3e722b71b07bfce34e1c396a357b8be43fd3bf09b27d4b1b45faa96114337050719b0ad4490ea2a7e7540c4e3b03cc5342e0fc2ea92142d0ba21f48888d106b50b816432386e2592f78e3e4c4bd197eef5fc8ae4c160bd2859427e2f703b24326e9bdcbe8c5f74982135ed561e81ba35befe02f0578137b07cd82096161f09506dd354007898468d12e03c9aafe98d1b7d6368e0c82f2fb8d9eb3f8aba8b8a1df66f4a05738315b8205c237fa93a59a65c22793c37d053f656c558bf32143ab4c8234bc0ceeaffb4bd1b82c590000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab24a4a60846f084aa81e310676ef01b16a3ec303ab4c7bb9bfd268c3f34dbc1cb3523442afc9451dc49ed3f1d1f3dd5d75510b147faea17c5d4796f5d72f8142c65f648ec16556cdc43d5ec843515dafd95377951a38819cdc8aac41b6570afd4f43c08087d76323f586b14210e32e29a64d779f7c904e547d48f648f0a00079a14cb36a8d66891e400e0401fa9e940a6a1983255fb4dd3f97c8d641bad7beb3b93432e3309da47e829f0a397a4ed949f981d620a89d677cab17fe94f29511fa93938429b816ce39d8b9cb75718949011b5942fce9667fd142ace4ac15de7c678e922730ea375e235fdc2b94318cb33cd8ea44380baacd19aa7fe4aab576d6903e97be5425517873e2bd3249ae3ed941b6c278f35087bd60643138be1c39d9d7129cba0333bab9bca26d6fb266bfef5a5f0e31bc352908f9a780a6cbb64ae93118fafa9afad5dafaded7edf67d448d208f1bee4ac98d966c4af23bb3e8cfcd4b0353f041e93095e29f4e91015dde93cfc6229ccd031f3c4732bf2d1993d0ec72e9953fb71fc492209f25ee8a725e58d0a89b7960a12e25b3fa3c6e0faef85cd137648f713b7345da4826a6615274e989ab6acde8bf72b6604038fb1c0e72600000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013fac6e37f8f625fc1bba0e6b0fbf404356cfe1dac3d7f1b618778068abe98f8e2bd1936b23a68df715aab98e8c39ac8168fd15802e32f5cc47721ce894740c764b71967bc9d88fbf743c7baf73ffa9389eec02912bd9055bde00f91f988e94318604a663ad3f8fa490caab9d1cc137f798d27d6847c933b5d2e66617b78baec6b810262ae7316bd44ed531b4efec143a16971633bc5dcf400e7d46a4343417483e3e0628345df9d1cc992027224be48710d5accddf8aa6014434a47a44c5068abf0d557453a5a0e45d170851a40caa17d36d110ad8817b7ceb7de1e898440fcebffdfbcd3fdab040fb3e8f1de310bd1e81007b763124e45c3c2c1af5bc6db4b0d41241eda3cd7ce11d2cd1a7a4e65e7a5dd00192bccd25eb7983ecc4a707d2683c05342ff6ad3425314aa55a0b98cfda9d218e281c1c5d3e7780a95585c09c9e06681f9887a9921b7a4a385343b3218a2aaf6eba6b2a0c0a650c2bc09a0ce2a23fb05e9bc9553dc23cf3a80fb38464f96533507b4310dc3882f717afb1d9d8fb5e8ab431ee0dbbd4893bb4e224e2a300325af6bd6dabeb50a2b558c15ddc193b23b3493d88872da447e823dec6ef78e7f2cb8c15313261b70f7ec6e4d44d8f5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015a4e73d79541b013c37ce02bdb20ae607cfcfa4fb9a2938f9e93cdaa77a2d10cdb0e8412b5893767436705298c10f9497afc3600150bd1cd0076c27fdc6fade59b28d48c822277f6eead8e0a9c5d256b19ed612e927f446fe2ff01beab504f42a3b4ed487c0382e24bdd390921f1a59489e0dcd4bbc8e80bfb605559cd06989bb60d0a0d30fc401254631b008b7dd55d232ebabf3edf32348e4bb48332aede9ed543e31fe7b17816309fa201930ee468b5617030db955dd2642f924e59d099badbfc6fb117344b06a01e3452851c6637f7672ae74b847ef3f2e00a791723050fdcad7d5976438d08d9430f8f07e3aa93e1d62a3c536c979d6c0f1f36833efb7b15c5e9631f0b880cbef6dfa59fdd3e20e28004ab0f722c3bbd63ae12adcd16ebced7790fdc4098e4c01d9e07c7d0a8cf5da624e2b1a5e84fc23b23484789379abae3e47ffb57e2dac8e4789d30d310d9d9788d1b2baea6aa5069f044eecfb4ee3a52b8850042e917d4c4e17ee997630b5f4607fdfdac3367b46d4ea31c656f4c945dfb41fa5acfe4f93c0ebc55a2145c62b072f8106f220013bb0805e31246dd35763ec569e7053f11fa1a8859bcdfde8c763e0d96a25d80f4f86aeded21f4d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6c8336f8efb750196245aad3918021fee07aea557cbea78f5b8309e4cd15e48d603ef344f75cce022f50abdd3f4b217ca15f3a4c5b30901b48073552e659f5d43a92e0e9f7c25e17575d5d6301add0ecf7b8174d61a5af6be21ad30de1677e0c68ed6f4d87c57b6506d0a097d08d1fc65757e65f232af8c93fbe602b1cbe572a36bc604f06739fef245d90a4fd78093f324784359789092b2f1e3db3c6bee765ba9ea560bae3c7e8ea2e971f77bda51750e2d11db11bf4bf31aa47cc03ca7f81973971238efad36151b89d15859b1c4af392b025ae7b90fda288dc06deb7f69ccc34f354fbeeb94989bb07fa340c21b96b29e530c9e931b74fb00f629749a2f1bd17457d6c444f2b8aa5b702e54e076b2fa6469a4475edcae65ecc2cc6f0687c91e162f8451665b87541d0c12ccab08e4e95a0eb65491389e256baf8cd10a4c64ed9b404b9c4e7e4c6bd778ed5582f83571f97c7bc13235f0dbf0acf3c8a3f5842e67ffe5af484bfba52178738c56fcf0e0064c7ea1bf80805fe0f1d02660a082ab5315651199c833a764ba7468c7fcf7caa6eb4b4ed1776156ca7504b754c47033f2de52f7becf1061c3a3ae356f21e0e3e1198f910eaa266ec986776fbfc50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ace5987b9d39ee59d8ac2a41f597a7895a680c5faaf9c687a10101cb53703ebe7216c86c601b9bd8e5945f71f7fc8c0d1a771f232966d0d1f4a5fbf6abec13c8ce6e16e0e5d7859ce87c865eed83907dc5a60307bcae9bb60dfdcd4223bd49d034e9e0121f2da66bc32fe63f35ff1da3786fa29c88c9c7287f0f6a4c8b2a47be45b8265fb98990a72139aceb3b7243e9fe087963d21ac8279a4d8951fdebeb33a1ade8de44c4714538027817e6e37d247885d3fc9a36088d2040d5169d106f4177be64b43758c83e653061be8e835f30ff0672577fa4d8bd102f72c7715b35e6c5b9cf2d55e618e967b7828dda877a26ebd8f871b0dce321ca40ce2913ce33b7cec1971f6cb39184f2626da839ba44d66df032eb67511feb2c8e8a6c48d5208a8b209f57cabdfccc8a48a28ac8b3e4a664e1616e98bb83d5e9aefc4edaeef56f351d768181570481d9029ab6d1902256637898463fbbe17f663414b221fae9e4474a2178430e348e1fa3b4d37d64804535dd8a9af00be5312b3ee647159124573e291a977c9b078f79bb99273c7e2625ec3bdaf7e410b2361e49450c2e5006b992c9639b6ba0bc6fcd2a5f26be056a9b3bd3581b5ff23703671f32a7d5437ea9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015cd534381fc9ec454cb424235211c247dded859b37501d6a21226a2ce53735f7e1139bf4ba32c3249ed3978ac6576d55464aa04482ff903aa3650b4ceac2e6928d49b820742bd4ee04745186e6fc930db100a80b466cb86c4f203e1083e9d0c3d03c9a91859d28bf9f25ddf3879d9d5412db3f1adc17cbfd873d4c7aa27c83f17b68f0f255c544035c35587ef8d8beac0134eeea4a02103ba57a9270b761a1adba427b8f7453a86e2405ea237aa0f72c5b3b6eef69338ad1b9c91192c8ca4b4f4fbe545c4b1640bf3a933a6c214979602f1577791311c0a88933b21da23d142fc26adb30f520570bfe72ec953889107044b3135cbf6ed4d04c185bb34027d67c8dfe3e43a4cd95f70fc402e788661292c04fe4c0d618e361db4b0e46df5cbc59b10a48963eba539c42303a3af9cd16a59f6b47781fe56b835844c9d4bb39db5cbf0d66a7c635f52e6bca3488f4cd3f2dc937899e8a5849b05eee5ab48a67f4854d29786193cc8893326a20d54230ee2adb417fd30f12804f9e9d8a6619d5d3a16a48dad6f6d7191b2704ae35e0aa8d56fbe9b1d18da0bf47fadc0bd4dd17494888093af84a5afe606ecd69793e083c4dd60e492532bb9d670bbb2aa91af9d670000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1dd7bc0fcc36ce32727074d58c47afec5b97b5b7e1f183c99c6e0772434dece72d835cdd044d19a4afa44a8b8279e7f8abeffd1376d3526a02fdb023737f1bcbb9987dd63c38765f3fa90bb338952bdd331545b0a0948e6132fda462f1044b98b86acebb92740571f5fcd3e05f27f677ac7d479e983621a83086864281a7b7b7ee3c5c910ceb354c9a129c179c2e7cf30f99fc57392034dd8c15714dff1d618bbd0bc709cbfd72722759e4fd924bfe8b00b1e3d72c1d1ad934408694b35b926cd11a0d0ffefbb6e957031d903533e06d28c23c5392c1896fd7c668f848e97ec3b08f5823010d4da84b41a22bfd6a4811e97a398b88f2cdd03a4168212728acd459603e2730a24fb9e6c39c4cd85aae7f870e6c15745d7359f2cee774ec88d5b816824cd19bf2f2f5ae520e170125c9209adf9ec370fff966fb2793a2c55dad00dc446a07d432d7bc899f3ad43b473a79254d9c421ec69bddc271ddc143511c4cfda4cac7066a84cf41fd2a6e6d890778f06f580601cac430b325cdc18da5c7364582485b2fdad59ea7f573f22c6aee70d8f863d77d7951c9c11b03eed05ad2e2ef0a29e2abaf12803269914caab7dd297a44e2859a1da55139cfe0d503eacfd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa23da723dd7beef49bc96b7ccedf064a8e90107a89720a2538c161eeb45f0e604ac1197dfa6b3b5e4d87d867b35c618ff72b7cc20fa3723689126dbbdda105cda8e316f3509e027c16d07182a56335dac1e5552d4bb8ac84198bf6771f4436e51d7f3843dfe5afb6ea8b66de48268e5ad13a63a7b489ae5e56fa9f800ca627e004ab240d221708aa27cacac0664b09953e4911a4ef8d512d230b7a57ad5cd1140bc25589fbbb73a2dc47f4192bfb730a95cedbb7500bc6f678c0c9add72d3fb45a235570bf2888b3610761a65cd81e548cc8c938ccd22debfda4a8fcc5fa83fa2aba657c252d1c3573804cbf5f87fa7f4076527ee32ced59f28cb90cbf848e81848f356f0bcae544a27aef2f69955ded40664d6f17fdc27b73f489958036191a3c46cf43a8784afa18cb1088c0092aec1185a254ac940f060e83d15163dce879b44ef96010944b627626378d6e0fc72358650f3a5eb9b328acb03685c6f5a41e4583e2da59fa307dbe9da62664c4c89922dd26014f8af1d95eee58c5441c7ffb5178e8125add4089c10f01a00b0cb83eaed540684bc933f699bab81cbd9281dcf3956fbef7b4a6d6fed19f9da8e3d8b6f5ea1ff429879d8e8e00c326328ef5200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008983f0d0a475542e1f73de8e420fd446be7e722112c5add473ba04f555f90a402f68e4c5834b7bdff37896f7a68511f3f5651d0bc51683cb8233453b4b0ab3f9fd58b178ac813f25c8d51e20c9f0dc1e4f429ca26618e7a75423975c28cd00089bc1b4fcd7df13539d74333e2f8150299d7102edf9fe54cc7eaad502fa6b99727053a63bd1e9c2465bf6a5a2926c3fa3fa98cb06fd07ba91f0c633c33b04dad4f3c01cbac55dcf7e8a69b9e8014e1916591105c778616723a70857e78e5b396136cfef2270eb4938f243d090e29812eaaa6437e63f4206924ab5be8e9577bb1c34dd45a1739ebc2cc02e74f23b0fede1d54e4b41b8086b13b968a359c16ab276b979796e9cbf5de624faf61e4f0028cd49f84cf78c409d331040edce510fd46474111c5947d61c068f8f45b3ee0e9f21d436f28f49011dab9a7d63b419f45273c3fe4b6abd18767498d0da5e7751d5a172d02d205ac019d5da046c72f8b69adeacebd9253e6345eca881cc27235f9ecb37935c8f0413859cff12385e5b6004d59218442872cc2ec3e431974e9766a970d95b6470300d47884f2ac59569136ae2b48ce48fd22720ee5534a0b39294edbe02614d1d7b3a9d75d81be5c356e01e95000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091b858d6aaba4fb637a7fe8fa3b74f2f6bef810e97f3ec73c8e4fc778726e8ce35717cd3f2a7922832fa4d4681b473c0fc528fe5466aba1f366e1d31c76a74a20c685838352df5b01c1a7136a8ac56559c0de0f55f30d6cff3691c2a479e9776d6e00bc6b208dce6648d374512053219172e7cb5d08e01b0aa87bb9b2d460947a91f5b3e2a0de41a9498b389722edccea75ef05600857f97ab00773164aec6b36b75f2ea2ce6bac9f75639fccd1696603e903ad4a6639a2e9bd9178c65fa3a733c5ebd5999149b0eb02070d23b3a09119e9cb5ca7b68ef3942d25fa57b62f32c0d91ec8e8ecaf25c093dc9fede16e51a36b232269467de796aba32bd7506653dd624f10d3097eb8a80a1f640b0fc7ff47c98a101716f94e51b224616202de857ae2f1f43f6d01178dbc72db4b52f06f1c19d4b1688057dbb3e7090782bb9aaeee210f099338c7aeb616f8042c69a2fff4f66fc2b70243702ace921d79066f662ac970badeffa26eb28bb7e1b5f08ac995366ce2ed9cab233bb46a838951b3c404f99dd741c292fec7b62590d4c69f79da40e4d60f619d8428787ac51836b72e30d89d964898bdc4dea19e7d1bd9a435d13612d7ad352b835ed4577d776da1ba900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009691efc83af77c98c52b173499cfc5dcede77dd4948bfe3c58894d19f4cde48de226e820bbe5af147f90605de70ab799809a856ab734101df210a5386f8ee209d0baf5ae0258952b01e3bf211d1a1e174369255d7b391171ed19dcc710a84562ea08544deec758ad663084c13742506617e73a2e25b42203ee9f9380d4830e4449ffb26a60e2fc33c58de8b6f91d91e72432cbbbfa0699d93dc25fa07702adb34414d172a7f21298e399e5c302ac27f91c8f04e7b0a7e0d8366cc3ea0a2f19acd135f5f001bc93e1c1a55eabe88a27db15a1fa36c1e38a02337727125af8e1bce880f5b63499397c6c8b80cdabedd195e6168f9218315d03cc32425f328ec6c70ec1795cc13b7d03178d68c21677fb9e23649cb351a68c251138cb43723ebe3bfe7e31ce185781b9777a33dad267a326d9910a8e259ccddb55b6f7e51a525e67bc8daa63dcd046c323ef4eb4efc8b4ac1aa59def463186f1d303d65dd1216e8cd87c80108e6a8cf0855a358bc1a41b7439e7fbb52608dab19868835d58d64f20e693ee8403b0150feb034cff730744cd00658f276e64a75a40658d4c67c8b87de1c687da7616ed51306759b46328996c7d194652e80e4e914639c4001e62b3160000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa1b0099b6f618356ec3bad28f49311149ab3e26373ccaecf53124cc7b8c51217828c70cb4af3b7c7fcf07b689bee77a56f06ebe97f9f0ea61fd960d0bd3bd0ddfce31b688b5211051de364aec55971f84b6018e9c313783651e0225c19a301351c0d9e99fa2c637bc4b0101c1bcda2854b34cea4384f503424ef3b0ea50514517fe0acd00107775162c9d4e921286c1a9ceeadccbc883cd1ae53ef209dd715f6f5f0e2e3bb8df853f072bb6892cd500e7d7be492d077c4395077a7c3665f7417045409e5e8ac921e06da67dbf7cbea3c39e780be13a0edee69bb1206d5adc8b2f0d0fb8cac71c1d43415646bba4f081e78b5ae05fd36496ef5ed0e342e81c4bbdccc30e520d3a28b7f34a17b7384a5fa49bcd3371137f61e7801db0a288df17053219f3f10fcfd3859e8a4424e096d5d83a5f7a235588bc11b7f64d2c794fee97045c7f6b91ed10d148a8210471ea4f57061e144dc34a7d3aa82d8eac1eb80162b1ecc39aa5a1ed9247cb2422c4304bf3ac2b70a28115570a0ac5526ec2f915fc356c0dc25a3af69b02f5cf063608ee0f9934d79be89ef3992dca502e9cb64e1e3af526c2723a0ffc2c3c106add74161be50ae3eea0ad39d56f2ac3171a61cb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab92f21676dc18c5275dc9cd99248b19bc976e50ee62f126d40290a6844feb1f3cc8c18b554373c0a8e6b012511d02cc82b43872f66fa2359fb908f16f25b459724046dea4dcee99aaf96cc3371a91d65bf201699580965677e20da5987022588323801aa9b4fd4245ebafaba9a5d285fd9759e95cdc2134d2d58364bfb6266d346f94dd2cfc9f1685db20015eb872ea67c167333e10d0c70ae672715b1aff2aaf1057ccdd264455a485391cd4683a13ed301b1f3339ad8fdc0214ec4392b32122ff821d2a1962c95cddfe4e998434a54031f53dcf40a7c5b3f5c94a84158bda7c65b7c5a60272ceeeeb534acf57ff9d536528c066ea2771cbc16bd53186bccd9361163cca7afb5f0b5626557d18a0f2247c105c9d674e7f97843504547ab7e9a4bfaafe9ec2ef7070e3dd2f3297d4f6288a8c1ed798e31826a4b4c0d527cb1549dace9713c2805284657e8318e0ddd2f4930ab34939ad9ed95fa2da7d5d5e9f00eb6b2c41a4deadf6b4bb393faa032973e37f9d7563dcfdede2993f684eb6ba10d3d88bbc21aec8e3c67722d2c3d27c4ab2a1ebebeb4a65fcb9b437c5c297f37431203b13319ae9e13dade11e8e89c6f18135046ace6353020e70e5c035290800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e1bdde523eca95f87b74e58aa36a27c8e1c95d7d69b9e6bed440346d2f9dfe637d3f8017147072d024e4995b771fef4848bf8fae99a38198bdfc1ed81c1ee35d100a8f2ffff94e0b73ef3cbca9af52ebe269b76285f6a1f69773666342d2cfb2038d9ed69691aeeb6a062736a7ccfb8445a44fc918b2f034494ce89fc33e64b5555643b6b95e1e9c91a120c13603fb12a87d2236f2cdd3b127834eec0c7c6be65994685d2ad75759182e115637aebe52131bc202974f00e34490f151a7a049d63ba90120b02d6067129b327228b6ff94227518b03de8296df85c4854a2fc81505a0b2a31328aa62c199efe3f1ead8116ae177e0a889a950547730df1729b8bf0aef0d8a0361eed2f67b518793ca5369f43038df6bd340de9553e7cf53c666cd10bc083ffd6431e23d5a0325b48b1008e8abbae63d14a1205ba338f7e9545027c781b9d11a3a3c03f0455c841ffd40fbd3a0fee02c5557c6d0525a84ff497036efe3618df91edb3ef1c7fbe7dcfd8e03c39f36ac30f7db6df0af42338a187dfb04c5749ef0a6dc1ff8f0e22fff38b5c70929b5c42bea5c28e1ad5adc5848c654953a1bbcbcc595c78cced2f0315e920dab8e7af89cf90a38a2e0090f626e9cbf00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e832faa80ca2ca59e97c0b6a8e812315ec837b0fc6cdee7d9c98817432326788a4a0dc04f0b9f4684ec9eea1cd3ede718a74366ecb468e1c3f27ad0380e966b35daee29bf1673335ea011d5e6c1e60e82a55aadb11cd38e188851b10f0e2b767313bb321b167b05dd0c2ba08a7c23e199d6f7478fee5af4d682fc2006d7b2490ee74daea19320e540051995bc612cda85c4e57f840cdba45397bb013bfac6c2838037e2783fbb4b79f7fdbb192c0adb98c0512543c1920c7fbde3217754bfcbe86fb556196b7204ca7084a8ca2cccf701705c80ab9345dcbfaa36d727aee8f1325a635f6fe41b1565f9dfeaa1e5b61c74a9182cbfa65186a74182df8a23d91d868764f7a1ed6bd898d38ef9940b32da26103f50039c45486dde6c6d0259da0fee6d155cac014d241a345c3f0f24e06fd5de1d241c3a9191da72f8e3788ccf2a4e241be2559dd89d59e56f4cc1e49a2634ce04c2ec96075f618fa1d5965069e13161bb93f20bf2b4e7fdcd19e1c1d59645743721721ab2d495aad7f8af82df50f710e8268290aa2f4c622ab3c45d1cae8187d3c091b92715d87570fd8c38426aed6f070542d51e83afe0d2b5c3a6fd0b43b579827bb5a67443b3f917ff5aee050000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a012f1941d6564069649a8f3ac9e9840937e4e60e6887179dcd963c2bc469970b2cd0aa4a91103194bf58e2abe038ed9597d6e6fb9af8673ae501f1d86108d10c95b217ce21d97cc0b6bbac53b19f4b430e4b7f66a88338a1b4ebb11ca95a37667673a94c1892d8b8bfbe33edd1afe450b7d8ddc858e368188d27a39a83c614cfa65b0df680ccad3f2f27e48198aa2111b5f50fe7cd7c27208e5deef69e1ddcfb4d3dc249f22b2a8709d34a770bcf12a7edfbb6cfbd0ec15f324a743ee055710093e3d34780f4c047c84b02a5a490611776c230fc826bbd0bd7762d4f359f55570d967d6bf86c6973c75e60ddc1a772b086c47e83dc196a146143c61275bece70607598ace6feb07f94617610bc310aa97eb20bda31c417ba011af022bd2dd6ba34edbbfa59412c8559ac70952669f60b50f9bdf556cfa5ec8cabaf660c6ae6b67d5e1331f5bfa5d6f5f87ce7663307cf692bc5ef06eb43bca96b73287349a93436f0599d079a33abdc6bd7ffbf3027abebe13ec9dafb0aacff8a82f44614cb4151e726f0cada90b614747f520d158641e67c0384b28049be8f0f35ec942e17c15f1fbef5c4155bfcd464d1a1780f5997ecef739f22c98a0279f6c67c1cd788300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ac419b0820308b4a6d5cd70c1ba47a497d6b3aa87b6bd2f8391d7bd456462ef6097dd4f8e83a8ba25deb0d992aca5606452728a8ca9d2c9ece4e4756dbb5f3472498533e785ee3830664ed891aa705284323dedaeb504edac6cf0a69b979d504f2b9cedc3b746a9c0a5de9a7a360a9e298a5c617768198f940a1976b3ffbacc7dca6d588736b8d347001e2945f8f88adce24bf3661363b25fbd9da0ec6cab1153730f062ab32193d6eac1738e25b51d9f5729705e8caaa8fd52bb900f80a0536d70302d188e8629874111d0492ef1e88fced2931774b406f4bcb2b6152ca2295cb26541b1d329e32bd4bf7259b5fe91dba49a03c09fdd1b0e19b95803fecc0145b2a9ee516ce6b9c55423c8979492dacd69b13654d6e6741f905fad3bc22901ad74ee06fed925c6f1888981ec2137ecdab478053baea4cd1c2be4e95b9fd20f7e17cdf138386936c58a333bb4c0b190ab5d3e3fe8e97a6e9d00f13a835cbdf68608d599b2c58cb1c1b6d28e8e451d8c9beda1ec50b527b8ea242262265489ca69ec7c9a5f52a6b3785bcdea478864fa5c984db7aa16ec8d0b93ae751e7b01be90148ab8e83d8efe6f5cb9fabbcecc939ce295b8f1d7dae67a42671b49f2e6e800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d38203bab2407f03ea34fbc999edc2813d4dc2446c85e888eeaa5472f385794d3f7ff6b9154a4edfdf33f4f771971c8ec438ada95f45ed7f5b76d153c4b38f9ef1574e834df4e3f94e353e5ebb6765ca719f40a160e1c273c3961fe411eb76e3f60ab7d44a2d4165a72a7789008cc124767e89581c6e137151760332ac6a9f15e69965fd24c3832c343b50dc50635bad2df01feeefe608d590a6ac665c176c6d308d8b90a48de2e717e80f1658d6355784d6995a288a452da86151df14ae5efcc32ecc6c05995c9d4f3812c8248098d9f3d1dab871cd8908564dafd67d4401b20c08c97bebd8f702ff6b768ba3ecc73b6340fa593b2ac87477a96c487a3a9445e2d667c9accb3b523e731b08d2051702ff44250f531f41f1b564a5376abc46eee8759c7c08c8cd96f4c1e57133eb401b8f51aa3ff20bca28b179695bb441e672cbda31e6cce35cc0b8d7e2d744ddc70578b2eb3c366f29ef33a923315088e0d1f846611edac1f7776c58e111e62d02f63cfcbc97852b90edf1da4b750b3de8dad802748d6cf6fdfc8ef9c7ea0f6a0478ca28330f80ffc856d8398e9124bf9a985138cc61ba006842b7379664f4e3a51c43cd31c74a97457f2ab9da35f9589fd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a93f3f00fd715218c5e8e1797e0b385c013cfcde6ded4f8eec48642de25afacb3eaddd8c14c5b93bbd6f9d71fc8264aaa2f467cdd6ec31b66d66e4c56fedcff24ba082350ca55f9c69c08452777eda2e6e9f2248f280e88ddbf474d327c5113b317263a0e624a485f93d8bfda559c3f34be4e40fa62cf6a73711b93e7dbe63c6554d480f06670e348d0299112f2ba45d3259ca8654c46c3d97763dc435652c64ea0a8e471fdc576def33e0841705bb198cb0d0b751c932cacd41458fd2b90186b9ef04d43b165df688f9a5f861c5ab2b2992039710d508e05b63d66d7fdace569cbb4a229917a53dc9f63ebaa804d55e0f581633c1012028606c1829f2ac07389dd647590f654d69be025fbdb66d507b21ab44904980743f3b97953ddb7640ab5f4bce845b9f40af1648bb4ae701302f06af32a16a482111a19ed1a0cdd9203eff70f99b96675905013990847d4eebd495ae14b817057c25a7f13c60e21f851e45c163f6d9b89df7077211a7f2f650b2ffaf1b32354d6d5f72f7f4db4aa3ee1b2105a09566957215f8c63db031acdb9ec40d475f547cb05e6e98d0309a223c50a60a11053298b743bb1c5b4599fa56dde927a177261d178f0f3325d029b08ea00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aaef151cd4c39b0d19d5c8f3b50479de01dc5be6ed2fd5bb17308aad66eb22aa169bb11080d74c0518418d99bce31468b921912f1eda57948a5c0966a45f5746b0e89060b14f997d274c69d4ade16a72c178d274f912df784598de29320e9cf278f7d8d49d1e573a05bb48b7680d264ecf7281e717aba89f295fb7138f8e575a700e4f1a055783cc0978c45b9ae5306faefe438d8ccb73969758917e25751bf5151853070fce9bc20419181bbbd50ece34d8effc0899ba71a76cadec727de56bc84b1949867c6c3e6081eceb749d72313e0003753f034b11d60a4b22170405e75b4c35aea3206bff3a14e9ea804ce0a0f8407d6eb9e8bdb63513d36472f12ec67fc0a8f2d09ab5460794886bc8c4ed71658ac336dd4cfebdce95760900534af6e1c21fa042bcce5f82649fad88c28c9eb5ab1ce355fa17157e64285121deb55d07aaf2d86d9ccac135282819ccb98dd5e1ffdeb0f2cbb90ba4c8e82753235e2619647a6bda322e972fed95a3324dc35746d57ccd89ac67481ba36f93b83bd4d99ba3b5046979c95a8aae962811324edd2d82c66387dccbc4c5d8513cf295a4f69a2c14ced0545254e45fe2ed993933195472e68866ed68f240039e043b09f970000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af0d9fefe88a9371c3125863b9ef0207007a44ce916800f93d550d14da597941d66a86efdd83a334e074b0b6736e7cd89134f638620fe4a9ea7f0fdcec2c1b495b46fa012c2165583b515515f3483274f891aea4a76629a7d62dd442727aba65bacce3bf653dbdea4ad3bd66b6860d56b893cb959f7f5afa380da09339cc85c522d84d443354b6c0183013b5f769d70948007c2f407f2d1420f47bf8a1e235c1cbfba55db00a80d3e6c822ae3124588a3690ae079961a9bea0ed50a2c5be090907855513687350086f2b0938f779a019ca7a2b2027a166bf5010d4c5740378cf34ba2145b1e2231f9f435232eeb4014fa40f48234e72af85820fcd9d35862e6f8c3115192e7539bfb3bd366b5b6f05657d22bf2305877b3c8cef6e2b0aac1567e67dc1cb4fab4fa723d275022466c70b0192ec2e54887907e82877e8f73e52c04e6515e4f8d0c0b739d2f18486a7981fe00bbc466ef4d801488b3441112215c4666903366a5418b2ed1782d91733b04dd5e1983f605eac6b983d8a45cfda43e6a650e1a4895c8e39f944600c694888d166581af38322cdc0d0876d39adf8629f1390b044b6e5c6dd56cd39367f4044e436c15c2d53e16688ad20c920b7dc172e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a6b8880269c14706597b7bce3c5fd26efbd6ec3ec4c90f09014e4b54a00f9ba2ff53b12c09bba7dffe1a908f98cd2d1e4ba9488db5ee7704878c480ccac17a3a54db870a6a4b2bca19a0c4cab888779559eb7883d9654d40165b4a5e948cb93c7b376ff0def2a9bf40e6d47e297e3bba403138a8d5c0b1bcdaaf7a816051f1fd59c60a8b5de4f1b845ccc39ec5342cad50528dfe76b0a7c65ea2d1cdb096a23eb1173a3338bc870491039aa79ba6af58be5bdeab5cbf8061c7e0b0c9472d2f6324d2d35b60ec552b511b614fc73c90a488d909832b73aa6eec518b395727ea58eea1846155fdcd115a702cead2c10f87384ba572ad7e916bddeff24c1ddf3ea27b388633a103cc400399da47a1de4e789a34bb4c9e21cd396baf68f27a87bd6c52c33437a59fa4d4b14093d39e1b4d12e014be108195be1890b8e1053fae869653a844c413f7591b7c9ba2bd14c8ee977e2efce2607fb3157c3353c34ea380ee5d98bf46e89ce613a152d89d682e74e78dfee6ed6a9473d45ebbc77042815aea92295b13de233b4cdfd5a4d241601f518e70e5bed1e9445630a01edf1b84472058a66d2d725543ea09838f1911197841c1e74cc1d78b61bf7a5416a36d2ab1100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bbe24629c1ebbab0984166346fc6af292761374fed3a1efa5879e67140850d44552c2bc6385499ec4308e1f7c20da48bab5338fecf943ca58e17672df511024aa1d4f646e1e473cb3b72e0e06a0ddebf8d31458eabfcde4a3794d0a5b779ecf4f0ccc46c92ef0d7e01a36e37040e2201f6bdef299f653d2fdbaf7a1c4267e51efd58493f13c84a06ec864bfeb59cc0595ebe1495c44a39acc65c01e22a8907e6760b831cfc08283c446734396b6def5e11645c257bb0108873f5553dba865799a29fa29078ba0891a859b482539f3efac46fb6aff6103b6c6ea53735b6e4aa258109126c594716d2df4ccde16d2b722b1785a59cd3b456cb5d324bf60882897117e88c2bd8e7a152cd5a15e3902e8282887c6952e5f21e6991f995c56cad83134336f3179220dcb6d3d1489b1599e80b00983323ea151a32ef3adc84fb7684146725d6fc1b5ae3474402807768dd7ef6391ed9a3353e95c0e2dfd708b679d968b903a6acaea4ee231a007dada5ddf79334be1ce6c47a421408fad9a165d75fdf3dd82648babd534c8dc581292d29541f851c974bf0962b936a6c22ee06100541ce9193b11adffa45c394456610efb60d7aed9f99cddaecfd8cdf9cf67c7f468000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024a5eddefa2a85bb023a2c543a91aaacc75a42a948d0d4106a05ca4fb70835a8dafbaaa6b25ceaea4929d7377b1738cf5fabe31f2476206c3264a39abfdebf8a09fdc3ab3d9746c8f5aaf340470b64456dd6d8a323205e28b09edec1bd6583906ef7a8c3526d8741f02fb43e7a0d514f5249a9a0d45bf243d51ac02c97f015c4270e231a10a4f00dabb75959ffd6b2e34afe851c2e39f3a0457acde836d5dd4c2b6ee02309cc6b74ab72ecff1acef7d6f02545088c3618bd3495ca0ac2ee203cbab2bbff1a8d43e2cfe344fa9ef1efae976b28ebe9daa870dface2fb7ec5abb0395cdd01697456961b63be8f9f31a00d8aedb66bd7f90b21035c0f9bbb00d1b287a220622a89b27a08532c3c71e83be35c2b96307f24ec92a3578b0f8d3ccf8240ce35a476a3112df9d9f86799dc3275abf358284325f79741919b65afbe14478bfb4ab7153a12ae0867ec42caccd5e3f30d8779d8ed8c21fb9ed16d2dc9e03e475ac92d93820f910abeda597d451fcd3aabd63642d1c96db4015dae716b1b25ebc104d554a0327791e218511b644f6f481afbaee356cc77599c94735974f87f30ab50328e9bc5368edd425d774c265a8d59e75dbc1964e627b70e8c71108d670000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4ae5f7b57ceb8bb8516c48f2c684f17a587e709d6cdb8e63eb3d836c007ef469cadfded061c2fdbb84e8105d6f9cd99f31c42404d251c27cfff9105d6ebe9bef7d92b23cd95345200a4272b653d76f9806568d12f29d2fd196ce39335086cbfc8cf6c5ff8acaca2cc559e4962eacad0ddeb290d0c55a6978b44b47e55dd28d8cf561dfdda0ed4142c3a839084df094e40d1e19e38827b4613232f07cd5ac56f85aca93fe62abc2d0d573c548a114a83867235c39c8e84aca30872d9f4e464bc8195e3e33e84cf5c9698dff61761fcca2c96382d68014e95745ec038726e0b98a1600e50d2794e4528e7e0319735c8d35155621c19a722b4282bda0a0cc703abd5f321684ed58dfebba6b91a366699d4a4a714f0bc5f125e155ccfe82908b624d94cc3b0dfb70c2c52006a6929dbcf2319d86ca9d90abc862979b6033cceb0edc56a365ed4badced851f8b35571687e8dc91f065131789b09a618fbfeac4b0b2069196fd7bcc5a384980ee9c80740c1473bfd03bdc26fb725986a546c184f7969f10c78e4e1191fe472edd76248d914cb342b8dd2cc1388380f27f34972edd3629a5fd5d8905e77663b93f75b3715f2df1792fc71017ad540332068f99dc982c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3aa7509272d90acded9e344e721fafcc4fde66cdd8e55647e8d3a19de96f251740bc97b5dd425422111d6148b3457cb1b234335e5b06517da9f98f760b58f776e4e70d1550ff311beb20d9a0b3972e62f9abb757ebee9a5f34d68ac78a5031e3069df56d03bc41915eb0ffde79f0774bd20b1d98b70eadd259bd8d31493009d62615d2bd057170099799b91f3fb8dbb144d5732695fd4157cd64c3a862b316621a7ee7b698d2cfc5c18f470d895722f4ae8f7c6dd3f5cf413028127468fcb67aba039f50a6774bbb9d389794b598878bfdf078f04c923783fc78fbbfd04376066e0bb6c0f22b50494c4bc12d70fb5b3c7e1dad691230bb25152de34291b5bf754a6633233dbff1f4a4e3db82b8336f0255d441484251da509504a38e701ba90cf27696b4bd08fe229d4e478a4b72e40226ba0397c24639033a406ad07c19b91e5487e92668602b0e6d49c03a9bcd82cc37781c077769e42863cfe242b2de5060921315c99452f18f0f865375c8ccc74b294bd18e939367b3da2be96f1cc9d22567cf3b52ba9dda5b0de8530d044b9dae74e329aed4c2e7a3ba94864f79ea7ef42a6aa7ae3cd59d030597b421711289abdc30c83c7fd5c22d1fe322f711b4984000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099fe3b6930313b26e98caf02b13656a4b56ba7134376a7e2bbc1a3b416afcbacc0dad392f6c97b5a141e83da8940ee67d771a960935bec0b146d95240f395dc7e6a2ad8a077803bc9b9bb2c40263350b6be2e2ca216220dcb60ed4246b8edbe5a4b23e13d130a53945b1c823eea7a8f3d5fa3c1f692ab42c59b9509562c72c366ed3c44869cf827dc560af74d5e68fb59b0beaf1ef47836aff8a7d63af42fc2c12808ea913564cadeaf0db1067b2a00baa9f08e86645f6bb89d903804c59f29783966c248430ba96098f722edcc6374552d0386d775bfa47beaf1a60a6f25bf1ae992118b2ae4ad2c400e2d6ecbe150001fba46cfe23ab2f669232bf2229faa809eb726f8f24918d1165a54d82d20bcd3ec4ed2006b7ede59de9fb217474015278f0ee83619de5b39cc9659636504397741993d581255666c9f017fbf28cd6f96cd2142b13dce859681b608e00cca9c756dee9a7386d0c353dbaba22954620b56a0e569ed13b64e06437fdc6b66959c5546e62b57ac0ad0187bbae9fff122059966afbce3927f153b625c9ed2a76b1b222d0b650e5c9ec2c55b86548882662388625f9353d7e5a6a1be83188557f6cc4fc453cc9b42e56c6a92837367178f55300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009035578eec802ce0e15c7b21a716589331d9b6381b14890a6b1af63a80c153da91be9bebf1dea237c7599e9899ecd04d87e8660ce48eb43e77568acbcbe37dde9b68f91efa8bfe6f45166d2b43b4a7e70e0dd801557386ea843471b58c70b893bdd0eba410b48e356c110438ae40b572e96d86fefe2c78a39c1e5e84ecf5de6fd2a90b26b3564f01204f30ce2d818df1129f6c7a5b641bce0f71ad65c4c7389f353f35ae28e6e3eba3e141e4d299f99605381b9027a6feb253886399df6f62e666519a84deb9df740bb615b16f1f787098e0bf43531d88a03c184a92c21c2bf8e06c25b803567812c5b729d1ac95d5de1d19dd444a4d948c26088a09f95b64d297fd69665026d1f959e0018242bd86c4acfac8a97f6f604f3886b2d2c693c072b40448ed1735e336beef40863270058574911a3c9c19a77022dab96387a614ae3b9fc3fb1f16c8a790b677279c5c428aad8b1604926bc7da231c17c58edbe52980f50c0d0350df22f18b96b1c60e837d7892b6f2e5928f4598e18522d978447a60c5c9a6fb6821a866c294608d5be34f259599b5f10295076848490849511f97ebb1e95d5237b072eccb7f150675f0cd4bbb1d2e179d3f1ca0756052ce5fddc70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a001b114ac252f1eeaca0a6dddd416d4839c013e8824feae830e16eed77a9107d6b1d7b9cfb4830e3fc8e6e38576020a4d2f15ff3ed607926eff10a181dc60a53099b90e78f580675b813502fd625f1d0725b8788170f514ce40b5450e511a47f5d19e263e3adc960e9d00393990a781ce6e671d0387f07c21f6ec868676790fe76d2f767021c8a964acd0b2d9b89ea4016bd9db95c952bda9d5e11b566078debd76f28544cabcc72e2e9d706434fbc422538802b40c6c2b02b1b5b9f66643e5bce94e96b03f623ef6b7b41240281ec51b46b5479e378a0e5086d42ef927d0ed23127129d922cacba67760d707e8cc20efe32281a5e0b5aa6fa48fa99a3c6956fd1b0eb27aa164d918841a7ab1b83e22a158937f8db0e43075c54627de9e66e88934d6a0ea07f75cf66b3e742d1042b5eb7685866e1d4ab3a2ab71bce1f9319dab0bf78b09cf5a63e7aeed2f2e6e0625f0374190438a273d8ca0b1e0deb872a24d52bd2b4247c8a61ca830bd0badab3220a48f6f4b1d4c37e8a1f8812557ec8afa4fa78c31de5c4879fa1d91b1794ed7118fdcdc781eca06c1cb624d2d3b539f46c339a975b33ffa00e55c70871f878a43f0349685e1012fa412ff859472269700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009df726bb36214b8b7fab71b309e797289f0d826099b506f9e3728e9fd2647d60146bab6ee34ccb6b2c13424528cd890e384c4fdc10802402ba2fea47c7c992c3a1ddb55a694273436f772fae913804c8e66846a6ef30e6a116fe69e642c41d030b15136d873019b390bc6ce3f59e139fefea8222050c42b1c7ff5507ee35d10e1113d038b5693aef8f040c6aa3e35e5cc4f34f13d4aaa15c93ab232c28b54951f1898f153894158e5be451cc2ce8d1e788dde79f20f66cf0c65e426f83c030bbbdd46d030b277493c68872e669231950cc2a7a9d6042b5159f424518dd87e2bbc47c81641dc419f9050bc0fb976a7a91971736bac0258b755997f18e055e984a6ebb706fdfdabd43430609f2fd524ba4cb1638fc9d80731b98b7f7759ff8f7670fa3c3d965a5450f8dc5c0a1a36065ed6b554d143833427ed22ffc2c2198da267ff08bf06bb17c4b72afe6445ea5ca169afae4825b9207a8567b4ccd7d6b65553d13f74ffafbeb39ab8512c137b7f420ed7d3b2d1ebf6cd16027fd1d803f1509eae0c5b0937aadf78a501382e17b6a6c74e195984a46367d5f2833b587b46f353ef9a2dda6992ef5c2a0251c7aec3340a4aafb02c1db94663c8bdab3c83f94e4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028570f88ed22b2caaf240557da041c4d37b300a6da53734f46d136a2e50f4fbc4ceddcc5c143c7fdea2a2938e5554ae1a2d09c227a00e0ee12bd64c9cad02ca088e33b0a049e95f9ec70ff51e0c5b530e180ad737c041999571f9dd2f6670d52f448414af13dd407823541988874fcf3e3ac696827739b42d1652c9f644f42754dbd590c4509a9f96f2fc4f8b88448e516f43300ff42d871a1d4dcb417ff282dbe85ebeae18b154055b7ea246875ba204614f4030ccd86d7190dadf5f09dab37e87720e940f91f9ed5ef804a695e118da764283f85a155cfb64e8db12baa85712d33606918092a86028db8162c8907abbc230f5de0ba9d2a0e545176b81670fd40eb2013748b58a176f9fe3652d127a79ef0c9e476a7fb542af4b07079a51aef47e5fd93142a6995b67d1b255851976ba9cafa063cffea1b670fe0559c742c9f7196ccdfe3f219b6c486a6cebcb21285cc6f2f574c4fbba85325d703a4a393d5ed0749727f170ebf0bde7dd2a4a0b14cc98eacdf77ef277f6b8d16fde2f15640de9f1307894a042fe24d6d7f8fc01fd52b985d46b9c7c8d042ac65530efb8dd1fceda2174c73e54f4e8b974a7be9975b94fb8617c943c6069a581bd4d01c5a3a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b1b3f6578de574f1c4e9276d0d98cccc90224d537747c7efd9d7bc3c2a384198dd063c6f7dfa6d34a5d746627a2806744e6980e32f3a45cbdd4eba4ec24ce6c90c1f84024a3c558fc1dbc77cf14f186a9f55cff141f4b8bbc174f73ee5f53b318852153e9a7c3f66e5dc06ac0a6fe1016fed14328e6bcfd77040c69f04ffe2364f36e3bfac2571923c854815a6c023325f19bf5c6848974eba44cd41bcc935b66a30972a985f1b40962db169fe008457a2e0868e09ebc42cbbaf17ad378764443b987a633a5ef471a04e626ec76b598dfac395089fb2a16a0b7a827af5b5667d6ac8e2c472226aa03c1462582571ad6e3cddac3f01ce3e66d383e02ee560972bb878e2da8f6c988d31e0ad2bf633374066bc77ec53d38c4aba0923dda6f550a3ccc6ce710e24beec28fdfe93ba313aaa10af23279a9570506015121932dcef9562923ea8a4cebbfb07620d24718ac71c4b011205bf2ebf22ae94f39d143a3efb45211336b8574ac74bb460e07224393bc1fed6d9af17cbb43259aa8c2e02e65c5c341af25bfe776d78a1deb8a27522e325ca8f47b5458b80155a7511f766504ed1ce35f17e04b3c134f9da2a4f89a6c4e46073d8173e0d892f62b56a791fc270000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a04d45ea7aef9d4f8abef10ece267f6c98955cfca90e958a6409796193d5531d9de9cf87107e5f11ab102efbcd034ac2f3e96f9cc48e11d4fde0e18fe2e54f89c32adbbbf106a3e08aacaac41830ca82568bc332e4dcbef6ec54d365328c876362cc6eccdb3381757f1011200c1b71bdd2b917d18e0b4281b0b947004c467c716ca02954725c6515f73321f4997ec4c3edb7e41111e6f6ad44048531d58725951b6b31483783ff7746043eb7c80b50068d1839f9f7125b66fd18d41d38f926af0507fc01a1443e910b274dd24ad8b4184c024e2f554b638f4c4e732f4d15e76da267e0652e095e3d487559d3fd097aaa4d7f48851d5558296ab506ca84adbde82657cb1094f3c7b8a34e2606c54337f4f0ef5fabecea01835b4fb4de077de8aa7ca2e47d629235642fb6e85644f31e06030f27ef63d83ad5ad069f0aa71a43afe794fa733dff584540632c68dcccb6edfc338104b579b19da0a48950300739fa124f7c259a67b3520f5c808eac1edd7c58c385aec9188140cd3074859bbfd81cc26db8712aabf07a64c15a699a6a4b17372c06070fe8149a90287ea559881641364be683cc185215174982e918fb2c705782451ffee1cc52d9f242347cdd260c000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093b678d680ac293459f456bc6b1a7ee7c2b191b53dde499d43c8454452dbb52b4d9b87939c9f62a6744a155008c5ab22c85e3bde1a22cc240aef105eb1cd0001cf562c4976aa178628c2c4a3b5cb4a450f54af1bdb45a6707c11d2d552552c0a427450c3b76ea425331f81a966a0c2145057baf8a4322b85211985b17d049fc2a7d67d3f2edee4b3d98a3fdf627fa5ef229be1cf0fd3888d9a6467e64301ae54fd5cfa856d6e72a82174a91b95b29c90f9ade254a8d0711bb4e5d8c7620be96b33dd2c71a0b8bbd99f9583e339952d5a0ecc7808800a0e210bd49c7281ac321c3e88f596cf5cc546c57ba2347f64dedf2580d2a1bd3d970b7a08b4e36f14b2f4a405ab54eaa9a17aa95f931b182d64c74c4917b02457fdb7b81949811a42eae3eabbcff423d56d1e5daa7bb14a8e0b321ea55db7ec572f5543d9e21dff87c8876759e43ee2f08fa8e7b8c536fbd93392c21d875114158c471714af4db3b8bbb0268bc9826462295890e5913db8dc73808972d511a01a5d73506b59d1129bc7ab64b3f18ff269ddb031446c608b8d6d913da445b1987f3650030ed690601507c3864762ebbae5b1a84567184b43e71cae00536cf24d3297419c36f91071566dda00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f4d116a1ce861e9ecdbfb4aef35016b1bd7a7cd11e498865e4a6bf9d831c1647f6afd6d8d90ceb04b77ec944a3d1208d443e51ae2896a8a2a381c890cdf99b1029c318dc05b67bc0a48a21dbbcd1c001f37d6e98d65cebcc175514c38ee3a656a70dd3a4c7063e5b47a17fb70594024071306056a9fcb6e49f2d8f6e149978a91e0a70b1dbd3b9266676dbcf42ab4d915c159cc5f5535e4b44d453db13b3db0551710c27303c66e16a32e80843ddc33de81091f04dbf1bea4d57069b94e060059f497fd57a153302bd23da9f96b1571f8a85c9d25d443f5a7ed754aa9cdb69d9d05cb5af68a1ee393c452cb7373339ea75ba90fa3b09115aef3fbc4dcafe9ec08eaa04dd1a934aa337fbf92d544c040d07c1c5002a292d63aa37ada5429487a4392a074b164366ecd310ec9e8ec98ae3e9832af869c71220a3d7e116fa4cf17183581ab7acac45efdff9e47a0abeaced8e6b3bbbf4a3afdc6609129a9a11c6c64082694358b210267950b81ac2401b9a0665298d2c7b522a2972688f83ba12e13ad3bbff174e061622d7ff710fe0455a8be45df546cf7e2c82b9e4a45a9ff8cee8ceef85c047fe58e14cbcf9d14dcef7a55e391ad1dedf19e4092d844f94b650000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1925d47222ecdd7368a984ac9f3c9cceed4b1cbad840575019e570c42708a3e28294acc2bcc6b86e64ba089c98c35c2d0291fcd57c96619a9a79c393a01caec11bf355c8258969b7f002aecc46a0ddf6ed1d2f67310769c1f380260ed8179b9a05fc79133c041d18351cb2d38cf981ab5018d5799434960a9464c8b74fa9e94ad9ce580914afa399f2e98637754feed34e92ea8a904be91ea8d700e4c2be6dad499b428f9c0580dd05a202459305fbf732a6fc90ed8daaddac858e0376bfc02b815dd0ea9ec311a53958a8f6dcfd0cef392b03c051019d463287056cb548e8eaa9f3d8428c3cb23639c4da463a55f2179a41289a8f9402208109b85af7f282d1191e5854cf5120da0a4fe2d87ced0426cd87e34ab643e6021b4b7522579cce350aeb9305fc58c7db5b1adbdbc82a2553f2e858525fced62c75fd13aed29d052ae5f865b7517ef3b47a7988f78d615b0831c2babba90658f7fb4828a95e786dccbb47735c83cfd9bfc2c4e27dc6b7647ef40deb9d508334444d5e6edc9302481fc1c6a134e3eccbd6990aa6198cff17c9bf4bc3bd5bf176b0bafc53ba3aec48a8520e31da28de1a429c73ddef5d986f9b3438d6bd9e5eb5e56f0e3f6e5b6cd5f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080ead35c3d7c72233d436c515521b0d192a1c5edb412b94fcc608280d842a4624485cd9ed52555289b4574479585d81fcd3e556ddb2e7a6fe4599770c67e2d03a81d459a979830eaebe3433dd216b93459af422494987f9f4e9355a3f48504db40b3e4d691ce2ddc332b4f45433f3b3c2a8e296bec2680a14831318a0af3cc738a6b7635130266404419ff0d0895b0cc232a162b482776b3b768fe607d8df4e7bdddea1cc541b9d65c7c3c2c442f504f885ef3efba42b312748d4de11e6d1c4d8b98116994482d28248510e8e2c056a9d5d8646a79c2d064cace2c421f0971f542e714d0d68c929034fa2556ac9e7fd603d4ce6db957a5e4bf73adf617a6d9b27768fc89986bb1d2b97396547c428430662332af92281244fc42005cdf4f817f9365683d80ac28edd6ee6b22909c8cd3fa77c3934ae9b5a36f2206924387dec1210e976aa8860f0b4e0f043e9c568798377761eee5ee2bf703acab9e50b22b45fffed9f7123967b58e496018d4b5113792bcad7ef105669a32a57e9dd589b14b1c12971a6a653b4ad19e184cb5686000d3d84b950639040625cc6bea8bd2f1ee6189ba610b6e697de6d571ebdbbb1a735c6a7923112ef93a73d3c9ef67d3f65f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000218cf94bb6c277a2314b05bd8f1c4e1deb3d2663798b506a4fd198f61d2072a2b71ee2338817bfa2db946dd1e2834b3f115096bfb0523a393a3dd52b55ff66eac1046918e3cbd50adac3477f81730e8ab7ac175a96657084de75c5adea65f350ad24cd3773a26454a0d59eefc190e89a87623a2d668059ee3828cc7cf0b88e6317e25fc926716f42cb3e51b2420af61a401dbdb847ed3f7921cfbaa0dbd4614ed18a1903e7f8b956d6ff8cb6b35d853604eb660856b480ad6c50c0887b8d3aa4ffeeaba1da38d7d0e8aa7003ed651faa34e091a20bfff7c21cca19dd75c0a61def02f493f8b66d88f1bb95141194f2e8690b403c1ceffb8f49889d818da9ded376ac5e08e05cc540a3d473b8d3d4e0243c0411d948bcef0b5dcd387c87bbd746c9ab220c65132136e5c6d37084ac38e81f03e78ce77f230ca978fa5ab5042c9fd6cd3703ef190cf70c019e52b9d432237f355b62d7fe054d964f4a74a77912d3f8f5c5c4beb3a7b2b5a63da67bbd68f949717bc42e49b09981a2231e8fc1347ed529588e2b3d21073158bc92a96ad8ce624595370c1abc7b03d799bcdcad5b10092f85929871e899ae1492a55b2422c4e165ef710fa7575e7aefe62e3ddfcd7f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d598118b3e3ea100397b88d935b928541254015a770ba10647e46c3425b86a5cadc6030950fb60b1879b4416cb2c2fea206ab873014789e1ae03951645b66fe2dcea80938ce1a0d872e36007c9ded13e17f10fe47fa6dbb4254127637216afcc5eb5320939da817d4ae6b6af554b6591e5a6ffaf326cbef10bd0928bcefedd6966a5bd64cd9f2c25249b7f4c009f443fe085093e1aa6255813a607b3413b1cd9e90b81f01f57f9ddcd439cfd48d8ed8529ad8cb8a527412d1a61564fc780a8d628d548d88459f2f88149fcdbb7ba204ea1448e7adfee1dde0ad610aa9d556ea7c3ae2ce1a1a7192a20734802e7a112521995213a4b0b33487f2c6a49d3cfd65ee95a106440d40a9bcded9f8597f790805c1653824af1c492a109643cd95637c6d2b204e7e456636c9c95f9c0f015a70133318f56921e0ed0f3a58ca580d3ebad43e69d1d2539e96398b46e5a3a6b88576e5f414b48763236f039618dd4410ec25207dc6c3f6eaeff457042221a1c2e6d8a7daaa7ae788bd4a45397c435ebe290e9c10fb5c6d665e62d97662e6a37edbdeabb5b3d319cb839b05ab47b790af56fce4174c241be3ef9ba549b05f360128afd945dd1bda556973cc846bac2000dc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa60e153e683b2ed127084fa303b7e2a82ba74181156331a414bc9244925df263486bb868c07a2f143ff65108da4f747cddda798aee50379bc21540ff8a2afb5bf629a56177fa9ab97e049125e669c7724a7985490861b9aed693cd2242503bff99719d4e04758998b18d606a61e1d563e33107781301453c2d15c702b38b70b5d1d956f5299db64700637b2da94e39c273e98fcc48a345bd95ce08c665f0fd015fb9e984058451142f2d5833790e9ea151d6fde26733ea5e3bc7adaa74b62335ae2bb06b77fd50efab633b30fdda818c84f1e34f58769278ac842e468a319891d3916e302abff1dfcc27952d0c14888b3773b00c8802c009c30fd6d63193e9ebbe295f18cfb8c3846e5454dee51882e72163e92668b60c850986b207a0462aaeff1fb32ec9b204965dbf176177c2901f2836c10bda45f5fb06bd4a310d547e2f43888aa70298df9cd01fb247bd366f6c9fc9e10c3e7ba2030d148dab35db4c5903f49226f8622569450dd435eb76701f308d622bfaf3df74df9d0d574dcaaf7e5a772301d907eb903bdda3c0e3b44ee06ab30e78981aa7071740ca10221a763447d00040609f5bd5227e249a935338ef29b92e448ec0e96bde5e23705dc59a70000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4bcebba4a5b552410bcad7035852eae02c0109c7dd02a1e9e825fcc6b94e8e351dec2952a1a614741a784e6d49e0119097f5c204c3d6983c1ae1551ebd33ecf747a1e254a710c6609a0f19e41aa8cac2257f10f43cdeb264e511088b0d671aa28bde1784a9b02af1a5c0c51861f8228dedd9331633fbb35ae5cefea47fb9507842ebed22ac4983be8e552ed4abecb5a1e6981a4440cf37c11f0a4af100b8c36f888a39c1ab6c5d7a623b7127b4e08fe679afb16a10c56e7a0bb8effbde55ec8b210c3f5df4da0f971a4b8abdc8b929ea884a3e1853cc0a1f7c3147869ec5bac827db0d50ced8bd548d8561d4a00af1330a1e9048df77f970802b9c51a23f149fe90f58c252691e9b30b75bf00eb02281d27f983695be0cc4706b58c82b73ff0ba2745c0c724d7a7cb8e9cd9ca7d4a2ad05f3af4c81be2343a6c19e20fe74f22c638baa52d464cd0ef5eed84b5b8c46cdd0be002b7402f2bbbb3d11d9aff03bac0af42102d795df54cb31d1d805f38249bfe610cb441b4af328159925463d14bf79119f78f54ac169cfcea9db6b282a53cb3f926aa3cead8987f4bd5f3c1a1999b70a9893f8a6095313d16123f3fece8191483bd33b96202698fbbe8a0c4118100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b050cd721ad74b66415288b052e951bf75bae7eabb7d9093c3e56eae20796bdd888c208508fac149da2d10441217f497639c3b7dbbd2035d2b013ab3f986d7f883370a56f589186e6a6946da74a6d45a20f5c3987f803196e096aa9ad8a0abca5f47807e8089f6875bde694e2f70669a8907dc95e1eb391434df2727842f1b66c13aa0e8df8b6e47847666fdf278c7f58325665a9f315c154816829aa87984ce7ada4ab0114c019650e8d2f38f5c844b99609a881523166277db5b54098fdca2496ffed6f6d1dc21116b6272c0fa30cb72585ed7a378b83b2932e2bd0a752df763969f5d7af04cce9bdbb647bc750baff605bdcf3c8fb3d0ddc99ed20001ae78c69484efd4c23e2e4822bf20b5e74bb5e33d367d0399e846920e97b3a55e9b922a5ee3bad3e177636ab77ece8f85b3018eb3c92035b1611d7a27200e10e3727680c3a6530f16a537b66f5593dd757215fec604c45e0aea94e2386e2f94a24b158d44959e4710d8f8d3543ab647bb0b0a611525ea306411192756428648b44e64886d6138602355d84d797ae3f49235b65972b47b7dacb991dc7a16cdf74c8468c9e751130da874a0502e3ce2ffef5c69d36d1e74c9691ce54803147cffa71d300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002783f900cc0e27f8c064927b97170d1b5a48c2ae4cdd43d1247cdac78b4cd0b89339f5f8db482a420eedd397d08e1768919781b467895d684038f883a4987a34e0707b268412f7cc7562c9472b4a5d1ea9ea60d10c787d3ebeb1bb9ce7070ee3f5715e3b648807d8384b1bc4dfaa013c080ad70836f02bee4802ade2f86dfcece4b46af845cc76e94f610d087d0b0ea55dabce3a45a586317b9d2fdc7d342641e7f4dc684afb17932817947d949cbb24b1ddad8a7b2e857b542563e9901b0807d4bc85914aea5fed176d1e8447884ee6cadb76e7d956a6d85294f12d0a6a4b506b9ceb56c1fe6a89cce88786c3a93fa14c57c483f1551e603d3e29f2fdc9e6fef2952964cca0a2059d5b71771336b96561b842dcc12284cd794c6ad7577fe370e3473776fe1693e3f59b61de3c1bf9b9bdde74eea09c137fef060846081d184090ed2a7d0c2505498b3c0e1cdbd7f2342921458af5a409cfb6b58d049a6aacbc9b706bec3d5f609bc57580dda3f887e67374de58a75f619f0c99ffac89fdb6be8dc4d9d8b1ab52f3ee3ccb4c5eded280a56a5aea7e6d2b64967ba0e40c7efabe5ac88fa5db618971ead634986b7974fb4f189ede4c0d99908e1a76ab00f6b77b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a56e387d78186aa565591620e11997be0062fb641868b87a784304fb1fdb7da4293ff85ca47ce98c522f16a95f7e437990ebffc397b51e6c778ccd3a639d73e34984930e37d00c4c80fed405917f8dd323c1ef4fcb39a6fa4d510b9b36a4c6389f026de6ec1ee685d539ac40108461f33a49e882ff3ec89535a6246f0e721cf8a68df21f4e9a02606a0b920a91dca5947a556857057c319e818f2cc6d4789ba28823330015da88be9fb1a58761548a2714eb73f70bf58fc157bcc57d25b69a31d7da24fce0b0cca1750837a7971e16ac8b8c75a06b5870052a20991329879ada78bf3de388e10399c1d28bb2e9535de0155223da0148fca16345b46f8bfa6bb6c883779308d4dfdff4be1868126a85cea954bad46c623903335a5dc4d2be84d7063b2321e00afc3624b9c739e9ad4e7c82ecd4b881a3ec850090fd5fea0c80ad18fa829274bd4e4a41ed56f6a64f7222fe416fe1e07d6b9bdaeb2d53df493a18461c374cb6a211b3119106294ab5cb219e1c98448244d8fee0c531bf8aeb2e111f7895164ece633513aba00ddd7ebfa1607860c7dae852d5733efbf61b63078ba72e16d5a0dae331e27b1afb7205113d8baa52c93a2fc317fb193e374733fd420000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0e60a511c1ac009dae92a639a258459ec12bc3a6399a7b8c8e669b4a1b1ca63dcf3ceb3b9f14e7bf25e8837b8ee6a456c404556490d5fadec0747eeaf69f307056d6867a251457e97f4abc4a5871e4c0a879d685f186c87a5e45898fd5415a25b20029daaaa91f293b4b4de13e6c4e5eea48fbcf5728a8dee9ac67ab2a94cd249b0b38089c007db8126888a9feab9a99c6675dfa49c9e1941affcf275330f34a79dce247937e6f1f4521849da7ca79d29cdc45a70879241a1b44c2c07e50d455286ae9d4c6754f62953b06c77c9f809a00487f47225493f2248ca1c1e432edc93ddc25d286fc01503f72c6ac0a114e27c36da2c93899e171b5793c95aafb402f18c850d217fdb564d0c0603c4f7fc1fef7bacae9ffbd1e08bd84a03c31db3d4083d113627e1267e68aaac23acf7199ebcec77276e99f63714fed0d655c254b1badf9d4532c906b36559ee836f4c4e058aa5945d853950d160ff1ec71765e86204fa24122e7eb214a4d08348c6080446812102596503a79944004e1850d2ee9e8509ee20af0543f91016f66b7a119256e9763e8302304f186faf6795153c7fbb7a37008733f0ea9146f87a8b0a45c07c1cd74fb273f3a4f3891a255e4c768707000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096465fe5dbee149b661860825aea54230ec3bced5ea2e9c6c0e1058807302b77d889f5f15a3c9a07db078285679a63e8fbccca77c0970e968fb9250b16d7e2723bc410b2c35da5cc7ce8ef0917d44e3bf0d7876289a027787a85ab0c49ee585a295d41a9b9d31b6791f28c9b23969105181df6bf3823aa9aecdd24d89eb4ad25e0daa857f290bfc903ed5830356296a912d64e9e277a69c5e7148f2459d67c68c9d2d242e07e4fa3d6388a17535c7c0ae0f243772b96e1782e9e289f70bf30976e4ddd6978f9509caf18825b9ed34503a9a7a73a077b64ffdcfca165d8f6c46245efec0f30aa6d07c3346672163e4e399eaf14b3438af3bebf65ec61bd58735dcb368077e4f53bd0ee0e1d5fd78d6e6ec78dbbd6aa61989b2a0283b4efbd46bc19bd8a5d4485cb69f3faecbc1aac3d8b45ff7848b91be7cf2b9429f6ddc376ac5c5bf6af47fb286935b961b8857abc50c4b4bcae5405f3023d5519ab0656f0165c29e01721e140be54a3b509a9351f9993503bcdae65d430f443ef555b2cf9da58cdccbe09ae62b70b34ecc931df6640c4f6542b9a8f2acd6fec367bbf364d568d2be2c703800f21e934032dfbe18c7b9841bf7f5b7056ec2c294f12ae0597cf0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a28b603c78751b51749d29502c145c34c0c53342095ff717f1fe2a5fedfa925ddd9385ae4a2e40593f1be8e87d5c64dc7d79e893db6e1ee84ef9af7386fb0551d7cdc8513bb9fae866398fb75eb44c4fb8024e7062e683f4dc3f2bc59ec8e3ac9071372a3870bbd8e7022fd4b0adf81253f42c49da309105089a01586a8d8ae8979bb922fd30bca7f551277ce707995ff22786fcb102153bdb646956e7bf8daded68b5bb578eb2ac19bf67bea6d7be990f682ac59fa76c81842497b75defa43d43da5bedc23703e999ff55844d29651b7fc394fe2462d1c576210b14768c2b3a15ae00f434c75530f177c8fca6fd2f92e9cb835d8fe08e566b7858b0a2859ace4169add0375e07535603f3b849a05e0401184078b6b7a25f8a49ea26bc38501f669d5196e811c3b72ae12f084eb00bfdca9ff3c6e10f8678a51b80daabad563ea1b159bb4df6bbe3c1b9339e67b2baf483e5c025914ff27e7733924dce274110de625dd493813fe3b47baa5ae28e4b80630609051d8746fc747534f77f4614336f416d838816b564ff27bb5e76427ce221217ef2cbd6f4c7aecf163f121af51ba40f23d9718f449e8a13cfed7ec5228249c86b92f3c8e5591d43db70ac335925000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019fa2c854917fcc08c52ff44ac6e21c7af489cad32a090eb48777fc8a51c5f22dc3d8bcdccb1c2a469e9c9427a756f6d9197c493d80db4fa099acd053a356e29d47964ae0c1d6f82a2c3ff39b714901402273848958d4a1fc0007c65905113e998bb4c17de6b0acb20466c21d06b3b3e4bf76a89d045794d743a7d4795524efdc7c1da02a8875e73b99760410e74ee69df909b03662568a90fde5c47b2f65ec810d5641cc61d081eb06da30cc52af4f09dc158543d08b47bf5bd452c38406d47b37c1240c69923a6c5df0eb9844691e8b2f7ea2e6ec464c668eedcc187ce362fdfb4d2202520e180327a9f571cc5fc2057a04bbefd2f1a3c49ff4df913d1fb48e0756392ceb0aa25ad50694389953f66a004034a3dac543787099db12f30385af9bec8479df44566c759eff7fc1ccca74ee0b21a8c884463b68e48b5604a5bada8b3837f69b996936261bdb566fa01c5ac88639a5a7b63e129ebc7abfda517a06ce08b9abd52ca77291848f53eace904e8f4d067a220cd8e41f1e1b89359762c8b1342facb5908620c0ab92f33d0292c5fd843339b9b383fdb0c07a412c8af11aee53a85592eb84475b497e38976439bca6e36d9bb3249d4f789a2c4325b9ef300000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b48402f6f3ee99898a0124e87d1db94cf85257eccb19020848e917b84f0146b2687302181901aeb9099f4fa4b38366ca98408eda2cf54ae7b4eeeb8d143f04bb87fce21bed862ada35c41f338dda5f3f14ef3769ee67c3725114ada49b295b68ab21426c4ad81c32c76ad9384956a8f664524f8dfd738d66b1cfd54c7898c8c3f73bb1dfbcabe7eaadafa610f84f55543c1ffd6592c9b3ba93927ab6cac669000b8b80785e6f429270867b787beb855f5dc4af842e9f9f5b2fff662759f9508d62d5e0f119abe1f8f330f3a8e85999576dabb8629b44a2b274f22f1c8b8d85b54a65a2d2d8dd89b592ceab8f5be3fa5663c91d5d2a1870320a9554c4e403f1b54537e159a1e7a5cd4a755cadee605015998f9238ee307be8a9166770c2e17162d174c0e88985d7ddccfbe748f0dee3ebcbdb71e1794e8dab0df3ca8e45a0ef88b5f761354e2b177b1edbe0fd07c221c3830f093cec13e25230a9eda64a471aa5697e31df9ffcbb2f4fb29b7b29261c5ec3bfa650822cb282013f9cf9eba2f45dc03f40469ea9fda03ae3659e2ec34e878661a5ae00d074aa79ec54fb5e21e64038091158c2343bcc6d5c439116e1a171f5a4a6e4793352bc6df1dd3a82a4db5373ce82630cdc8d552f1e5e709875f199aa11bf622d4415d813a8aa1af7af6423fa77e1d14208f479846e917aa8ee2690d079a6e55ec52a3280f543b39ca4caf6eead6251882c7d660e0610e4a5fea1fdfd983a26722f302658b6e18df976010949c90063b2d42fbc62fd3ab749cf40406c260f8eac242365fb5cfb3c039bc81bb51ac1862f26ffa86a471b8a8e20616cc033cea559005553c87999e295cd7f8b5078323433d05c01145812dc9e9b87d4a3f709b51945895711e208243a754fcf882461cbe04481508c2ade2b45815377c8372f8065f7f98c85a01231242b332edf5d702206ab5580a5f76579ca736b8e77c2f1f3fe69194a394953f526b46596f44a62cf9f995780cb0273caeb73df129d673be12c9b95f8004c862b6df3317bf1fa9069276c45a15394af37a0e35cf257c6fcccd9e8a3b1c27a57cf5ba9d70e0fcce25f908e056905036ef9836b689b64ee776da272d7b2fa3574c0c9d8d9473132214c07af317fd156b09ea3bb5390199d4a31e3d1ba74a356d3c976f7044a838ee0bc8ae59b2a4baec0f76a8190216ff54bf2a23eb30b7adfda629ed4f448b46102da2486d34631ac75faae1548b860d763cc07e61e5b19b5fa3a1b51060dc1f0b1f6276ac561cf234f52df4038ac08f184672422dc89b0cf603950fd8e2739d2720de17656627b3dc1fc268b5dc466f1b09676dc41bd9beceac4632d382211ed0007b7460fe375fad9b4f8bddce2e998e9504a525fc0f54d765faa276a552f15f0cbec7adc54f30febefdd8528c174638213700c82f902eb155bb12834c3aa1401de17e03d27588332d6f16dc8c968e7214c918723f8c8063f99b6365a17754d02aff444ad0dfd990e8dbdb804135223f36b6ff92e49f21438c531ad65e1f93d91fa83cbdc5595f3c9c6765f4feb6ff028a6a461376b3630bfc2ca18c5797ec731e9437f39dfffc8c1700b0f5221e63401464a1b84c27b68b1bfd9f51073974f71ce973d6445cad95b0bb14935d08bc1896c001e26eccb249fc527dea337a0cc229590481b91659e92597c80bfe7f34d11baa9ef27c61493ca1efa759c05e47ed016ac622123f96bc95564dc7dae87279e6167f723af762850242e0726f6363b2177aecb52434cf65bb4fc258a1d2a56017bcbf9c4c2bfacc2072162e850dcd9c14da8298e50eb51f6e65b9f16f3b6864d68e11abc5d54445a53f265b74bc34a10ba6e6e66e4b45f0c9e4048693705d6a49aac45da7f2b32ac1626ede67d044231e3870c1e9ed9a28d949af0339415580b26ff93354b8ce64c105cd30101d657e2b17e81e75b2a6da8bf7525b478e0838046fa7f03950857c1d6c41bcc9f4acdd08268803edc89571d409fc7fbfaf54490d65e266f2d353c01ca8bb01fc262b2e301ca4e1676ce86af1811d90b53080c55be4d6ae0a2d2b454ce5d17651faa5360c4c4073487c01a691959d4726d9869a7494053bd0bea5c0bf7f205ba90527fb1ba28c6560bfe28dabcec505e753ac456e5bf2fd9684ff1e028a33301dc21ec52863d53ee22a6974df5e3be8d6b5bb5a1bf25829a48c1c633abac8c7afdbb18e0ce8a383e2337965ae76ae1c2c61498e33b697ad300e96a5b239d0927d89f80e27da000219b7e85e088a85cf9777a3e4161ff4664ad636777a399b6ab0b46780270c67c710e658b62681ea1301851faf81952c58a4c330a892791c93bbeff23908e3246802a35b5a5cee4bbbaa467fb380a130b5ee80c88860984d43d6a83b4e052d638b1d68d91a923882624dd49892ffa912fc02f8646a2f3aa4facc7f13e11ba26509a14da471d22ce76e0a0ec35dabb175ab5ae4697f8481fd7d8daac6a0231d2b0ed6eb840f7e23869c5fbb3fe061b4b74c45c2d14a61b98cadc20bc68f25105d0c2bdfe2d236385cb622cea2a5406c6aa12aebb595413613a080ba401708fbc2c13c3581e56e25c244719fdd46bb1d0910aa36c1dbad83b7650dc8f2b9060a4f2c6c6053df5c69ca9b43d333e9347e7cffd26c89d12dfd385214a9e0240af7bd49e370a8cc170b21ebf4b25c6477abd35e5836a0620af044f142375d4610ddbe7f2c67d73ecd1c7905643b86c659e9f3e38bbf8ff097473919d45793580d35af504530ed2cc8f83b8406b95e99a8e57723e60b2e0944d383182ea918ea00c6dc4c2ec7b0cc01e9b6cd78f9ff49bfcf2cfe77d1124dfb8ffa852508178810efb2fee494be6defdb3f25119f68fa437c66fa516248de37a9507e933a5552402540e918b733880257d6ba76676325241de94c258b2ee0e408b0bd7654dc464e25397bd36d31efd778b76156d7333b0c713e54dd8e22269a20dae0b11e0985122d09ddc8f1968b778480c2107914e893629e2353a63e02619222b8b0274f874217cc70ba819fbaee2712eb5f63922a6d2538f65ae585bfc6f1a567fa182d5bd51e0ebba3afad55574d57782bb41f1a462ff03c23742dcffa69216d5be15720940f0dd788b33c28d1b4c21c52ce74baf10e938485a9dba0ae214e2d5ace1a528a0f780116503f26f26e70491d37c94a3eaeb0a27761e82200398e426f8b77bc360dab2a6b7eb8a55e977a483fd5bf05c39e906c152a0f6e93728d07381706134c057948fd03d124c0e51432adfdc5d8649cbbaf53dfb3bd42624cba3208f89fb90c2371fa15d87069a0be921303c25a53967f4cc17f2f5a84b0c62277ec04c3870facc933b2197604d7709872227a57b45394e62cb97dbfcd4c09f1d688cbaabb001eae777352b4c2518b4f1ade6514407a4ee6fb49a12a988bb452dae0c724771fff9fd617559b3f1c685d779ab441f17d3f2063ba6c79945ea0fabdc898f0f10a2a4419a0be2fe8ae9a09351bb52f6a3135ee57297615820b1d9ce6912ac369179ae8bc06b2580b5a7015608e5adf640c8f7f5940f7f9d828792c766468693d127ae2db427dbe9a9f7cc2081e225561d5ea8124b1dee11375764fb7074a9c6d2dacecba9ff00f582cf9827a5836c87036d91c7c4d9c4ec85b9e4adaf23879e90719574c6d0f8447aaed9cae8300f24e57e7b962f0038248ed27f20d8136c37a14567126b64148418c70c414c9dc424bd460e3a1e2fccaec14d5300f3b3f12ce0a3eda4bf22845f78aef96ef344819548f226ec4c20ff28c27733b0ad6e762dc1e3da30fcd4dcca2d462c2cd59e1a32537abb4d5ce2c70f93d53c33cd0a6110012cde4e041ac9800f88504b52c47e903ef3baaf338c6573b6d5f2b38b2aae8400a984bc3f32911a90a1d7ab495174f5518e5a9fb95e8a943c404833f0e1e76a3163d07b3526cb447d7e9d316b6ce430d6a0325b04821af0f29c706b468cc5ac11cf6f22728228c8e2373ccfdcc5f4aafce1a55ca79f1f4052a2835bdc2e5fcb81b70fc98d8fe92ed3fea2f93fbdb5b1fb9278602d1cb290d3c528d2520d9f8e12241c131230d1801d3eac5e9c9326e943949f46da0c594204dc088ac398d395c111df7ca43dce2680c3142ae67f8381675db54956551b173a9bd97fa5048cffa0aced3138dd0156d023092086c372ca153a979a170c81394d60c02a7fd51924600c22902bb2babd4783d4861b89b5d626716e7cc2bc96d1d107612ac03ecaca40bea10fb18025209f0d3645684677a59c9a88990855dd5b49b0ee5f9dd0b22012d838205469ce163529509eb052625d94b8a0533da4761f10ce520a63bc8acd0098cbf494053746df90499d1510f79058bae1d43734f4db07bc7dae30d4030112d66cc772f6bc27a9f44195ede70b5db4952fa49c8269dc08791afe18b7f389116d3ab772fead50d99d940fb784682cb0c031fb00360ab04dd85c92ade3449c4091c8282076f8b096e4f93908b8ee8134e24ba19884abf79845cccf2e27c90ef07d7616fed13adc7077c0c88f364d3176f672b07c4e5079da0fd511aa150119a1cd65bd5d6c3755780bffdd96a2105969b27e9335f8a8cfdf31773e388efd0ca1b91f46be65994b4c173d2cd52051a0067d12ce3dc0cde3d15eac6fb652f809403bd84b4498188d4ceced3f869f4b90a9f792019988dffdcfe0ac485c682fb34065b2a1b98bcff1be95179e5dd6194b3521a77f9dae71caf922188f96f967a7f1d699dc7dbb1df441dbb0019ecef7aadb6d5ea9b5e4625f4117e8a642df46cf107504bf2b7ad6c2b1564ffe0a649b3dfd630e0ac40154ff195169da46cc4b3bf10d9e0f1aef56f34a60ba4d3618222bb1954e2b352f4d82e8471cbf5f49b8b17176b8af953141f42cf4258bd1030ab6cdaf8a543942493683246c9544b75755409327d53e5b8d3fdcfe658938979bc3d9efaeb0af3f8ea775e36efa8fbcc46132ef7d6ca8e115d21a097d189b4d3942dce327d178f6bc5de6113aaf93095a035241d3d15c3e61bca2394bf3b1b11a04c7208ba7c42c17f19714958e400683f8416595ad4f3628768271b8fb425d8f4db1f95db0dddccb54c99f0aa347d345bae2bb7c265987f6e31482206c377941010e9886c136c35e2be36afd6d69a7e3c030f760720882595c988b8e768d7e90e9659be4c692c536b6677327f544b0e93ae25a97b9619e3fb30561502ea64dfd354fa0787ae2d3fbcdabc49b033f899876d0d8a9b5ab8a2d88e25e9c95f2be3f3e2647991aaaadcd85024cec67b9f7795be13639fa2afebd37c0ae5d4c4d5f1a38a2192e86838a1b3f0c2054706ba454f6b14afcea0dcedc5191b0458eb790a11913c4df15107b48d479e4831905c5cec4205237c796293dc7803905683d9b32128611734921ea58d076b3fc08fb07d2c78122fb81fed0a2a594d9fdf961f076191544e4a5950b277f3223f84b1d8c209660a2238f0877fd2342fb446ecbb67adc2d78adfbfb3aae3ff5bfb6a0415e0b82f06d597128519dda4e185dab17b1a402be3f768793f6b8ded39f7eb8a802630fd1a822455cc9f6df4d822b404c8c7d13b49741123d84c7e6419213492b2aeda1c0bcd953a5a26f10afa3cb5153865c6da4c0cd7fb0535ac6dfea52c84416ea8bc1a477126c7b093cde3190b1d24589376a6de8a5ac7959df65a2ccc1a7693665218185befed74233fc1dd9e5ef358b589dfc93ca278d56b13ea79e3a38e68788809d0280701eb7cb352373a0f7f92d26a1629ba158563638f4b255cd311fdd420003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000056118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000560d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000560a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000560b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000005629a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000056141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000005625e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000005612978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000562daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000056189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000561159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000005605ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000005605c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000005614d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000005603db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000562ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000561213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000561ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000005614fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000562b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000056305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000056280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000056223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000005617a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000005608858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000562618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000560f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000560e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000056172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000560b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000005605bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000056137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000562e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000562297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000562608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000005618373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000560422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000056204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000560afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000561998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000005628d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000561da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000005621d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000560ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000560e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000056107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000562f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000005609726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000005624f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000005603c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000561fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000056205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000005625110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000056283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000005621cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000056094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000560c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000561f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000562421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000561fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000561bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000056304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ef19fa2d84c3777a5ddeaa942efa8cbc9c51a42765717e119e5473da2b1b0dddc9625dfb440a18b1a228ae002f0e2e4c065167febf2c046ea42345906927cd1fcd8aed4b57227ceeaec4f7585f0133039c99e3fdca89a55eef8f7394e5e2db4e3f4b8596df4f256846c5d0724a7529941a31cb4bf327199986f82c950328de3059eab71d9877d8670976025269e6ddcdea25a6ea3996a1fed9c834f6caa097a2871e275c45a7f8d00f76ffae6b2fb3aada35527a37749fdc97d2a888b0272c8fd171bc5b2aff17d36d0f695c9d02f871638d025f5b9b53662af52d36ff64b4e0daa11bf6c6724e0e275188a49d1fa7dab8c5eb19eca37880b527aa3350ce740c39bb37af8eb917dca6016f7c7b9977627999966470f2f5e25c9e740371be69ad766d262dc4186a97bcb5061cf995ad98b2f2bfe64fc18875a08c32b0c201ccb020ed41b39c8a32140f92155aebdda686d031bf0e87815fec73bc28e3d970959ca99658f16a9821b5e65b6ab5aa5bf085a063c126d75fb977cd973c4f754aa317f90b9e92dfb316fc51bd01f00f02892f0a85124a4bf9eb34fa636460b4ec6a7f17d44b873219bf90c8be940618ab95a0834b0ed0b57db08be17980c56c30bce00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a079fd436b298b3d021573d5c7f725204688d53156d7e61ab179c3610c797e779b1beed700170a107958a3afff2fd9d1248b0f664f79fd00e98f901c1b67183c2808039bdabeb2e2da5784fcf1b01edfb7fb88da695fa13f6f4a9d526ed5f920c2546ead39996c301abd371e7ba5981a82c0d9d735901324bd6c8d0b256dfde42d4a8b2ea439f21da560df7a1a6f60ada591f4ec7e3fa6d0376a46a823d50c78517735e40ab991fe6f6c683d6d1f42716b7c4b5e93bb8dcd73473dfa48602b8f479b2a4a189149e59871325cff0656698a3831cbb10ea64ac36bc9c488a3b93c45a4fd38de632dfe8e99033d8127f8e9731f94fc8bfc5642c671066dab5676195494a6ab26cafe443e929469cf73e40d9ea49bafde5c4b5f063769b805c36acb863e9e96d28ab4342b50ff924cf72b34399b499b15172bc91970a7ea9f4823c6d103a67933fd051d6d79002f8ebef0e3e070f46c9c029389f45495cec1fb961bdc6fbef86787b3a724ced2431e31e9001b0084509483b3bf7a181cac643e6648275bc2e8339e17378d0b1f28dcb58174186557ef89f3c9c3e779c1cd53a6747ed3fbfbf5024b436948e43e5be559469759f26ee0e05468c15f191e4d3919bd600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e455007abd7ecc925d5e676eaf189a3c9090f1f21ad0ecee132abf15363bf236ec08f3136238cb380a5011d89779ea4ef7533ec45b826bc24504ba3b9517d419a39b3bef123373cf974338583b3b9bdd82361c1c10eb21c47fb862e8336ecba9353d6c6a7e5c668a72db63d204e4e6d94e612efbe22df6bd1c4f8909f13f5d14dd17d77a1310c2403bf805d1deadc71701c30a9a43159aac6299297a0e7202c61e6322edf2eef8f2a4eb85c1f27f048a1622bda93e0b0a76cdc33b4a51e1c8ad31a744832b24907536bf0d5504679a28ec6365bc498faecd3e9bc7575deacf3afe3ff2afb1f2cfa060990c7db9ca8170fc39c31597cef7a7f98c489954c48e785594455fd6d5020ca260dc52575091726b3ca4a057c7cb67756131fbadb61e48be4ed0124dec4e08b4de5742a042e16a4a7ffd7b542680bbcd759d3ce1ecb9dedad06b0c7890520240c8e746f410220f11efd3eb072f52a184948fb62edc81f82aa529f550615aaa04f552bea88b118a4057b7ffb1b9ed901e79d345e9572b46506c064a694a3bdae8b7b667366b6a09793a3f1bd168ace5abf0d77e6ac43d6531cdffda2a7fde3884d64a6ce6eb6c716f37738bb2b9cf4d565691bbaac6bf400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e8c691483d5c7eb2fb8cffb217c8eb96df79febfea9ad052cbd563d2cebd77c55fc15afc539ac3290a273a7b20fc4a981c7976954de1faca353059fa122da97fe77a06fc6d2d7a9db31bd31dbcc5d9f8aefe990c6dd2f25ad46585de83294091a836b24724099b7332d9df6ee1d1ce684f112ef6553c34e2e70c6aa81f027d159cea6503adf6ace3699366a0dc0107fca044862d9891e147d2d2c9af5cc16ca9650bc387fa9e73dc68b39697301f6c23e555c495335b9a7751ea28bac7c2f9e7d7df5f646b835ad0de3d06a657b7681d2ee99046e0a317ebc3b7209ac7b50642ce9e62081650b4ed3c9fecb9e0bcdc1d40f4cac3342fafa32e82edb11022752e8f73d8a9ea3de22fc4183c4b754d7c4df5ad6cc570cafdeb53a2b8efc23f55a1fd5e634226a3cce68c9074da3d9b61033d7c6928b41adc4ab83fc2513c3242e5e8623ad5a955deff78d3f1ff5e4a4ff73276098be6d05163376bf83eba48e76a5c8c8c123cdcb60f88965da23b2f33bbae7f65f1bbe4061b752ea3925dfcf95f64e2af9107dfd87d3c863ac25b6c47a5891164d2c8eb09042fc7a6fdcac5c823b4e20c31fbbc2f697b82f9a267e41f0c595130d2794d486d14ff799a1eb8692000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095957b04d88b4d251f9cf5fa5e20e320d0c18e16d571814c6bf53fcda6d41dbe222389147619f79fd92604b8ce346bc753c8f170d4b153ee8e41cca270d2ae890fee7e5cc9bfb894ef91f253d71b123b5c88a02b240b087d27579845d57bba23e68e92eed6bc2ba2ce62be96d81e8276b9700d78af2beac3756d54e19e745487ed6945d456b6100588b1e95bfa3903fa8000773dab40835c4e14aa74c083ad0e6efb928eb728feafdea46428aa8a021e3847cebe4dce2dfac3d880636aa95565cfe64b86167661f742d961397327a3c19ce108ecc0b54bd30406e8432aa6809f331920ad329c840b84870ea6f58894df7bbc40daa2d9898136ebaffb810a3ba4d07119993087527f569cf9a01bb2b3606c104bdbab1ce15b0f5f7f6bbf9d17fdda953eb6f988aa7440e6fa12484e3f8a72d7a1f8285f561bada6bcd1ec97e54e0ae2a397ef62e8e442dbc8327ccd05e39ba0b762cc06a0d2037e9971ae8f6f4fc65f006af614b6f3be5577bcd1f862b4fc32729e58b968d75baf06bf797bedd8006357a8f1ad4b1cf705ea9a732f21e9d6b17ffe85eba6f4c108081c5f3df7a12fd78dc432df30fe1c7c84aebde13fd671f59303883810061ddb30ce69454880000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093c37a7ce508c89a5b7c46619eec6f507eb8548a63c6b8d85f3391b7d9e26eacbcc4c8df84d2e2f86c660424e801e3dcf9a2a1c5cc1cd27b46fbcb47d753f70741860a5dd82d555f160c7ee0630c008317f50243fab0fcd46e0f62e36370efef265d1a4b4c4c6092384edbd43fb6ebf4aa77b64d20328a62d110e62d1d85497df16673103107a4d83094bd91e39ea4aa79dc29e2fdfd69233ca850c1385fedf11c75392b7ca736211a89708492279f0abe32143d3013e20519d380ecde779a2de52b61f295b9406ea57100185f95d37799a43b07857fd35fb07eb13903d2361f68178604e71848862605e8bb861ad2ed445f7628fdc7c829e5ce42814dc74a9bb3cd185ec6963718b02dee94c79536effea5d4574386f2ced44c84b81ed24d60cbeb906e333b0b4f0fdc4cf66b639bcaa1f04a531cda8bae1afce8cbeaa7ad6b53b9aa9e057161a632cde273faead36c81c78f85a83e94a6a0d7129d957ee5ef1b0f8ef508e50ce9385ed7323e21af339f4d7ff4c725dd8bc07435bf4336566873c2baba3b6bba450e8e10b48d8432b997adf7904e8c398ee106922e362c617ee54e26b5c4fdccfe452f32c1578ac64a62b93ad97ad125ca1eda01e84da6791e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bd6b61c9fad851f92a3efdc9799d79cf1bfe32f4fb2aace75c9f7810ffaf436f169e49f1784b948592c488e4e92b031ae944f8b942674248a50a1f0041271783d1bc3a0db8ec2b0308194552eee4f586d216285bc5569eeeb43f73188ad0c2b386493a38336faa87c48a1f184392f012ff506c8ddc85fde5a429065f476cab933d710a1e665ac2c0cfc4cca43cc52ecfd67f6783feed67fbb252fc5774a5ab77c0b4a36b971bad4e6bbf0b0e75b55f2868e61021b7f2e5b1d91ed072f06f1cd34cd20aba773c14e530d4276dac20a61df9e4d2624f08a26317ca51cafa983c8b7d88d96c99c9b0534ceec2be629b5bcee4b104e25a20691a4a00ea2d40891ab6dae14a5bb2aa73419ea427a8bdcc3fea57567dbafc44db719bb62d3f9f1346311eee95e8348b4a886ac7cb67b96b80fdb5d435656377d3c843c6e0cb0ab8b461e0d2e634fa66bd77f5b7be7c44f1d655f6be17af1befe9e241da1ba5afba081ed86929bd19aa3aabb48e5de3205996533dc752899388f1b897f81122fc2e458540b57d328e69556ca06b6c69644f6b3ee4f8001d598f5a30bd683eaf6802f8991d88ddf708748558e1349cfbf281bf62dcad1819dbcd55ca27677438da4aec20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000262e5819f503a7b928dcbfb8dd8e60fa944a26e49b9caf90614385a62cfcb7f273a44709de5d28de81c9c59f4f1814cdc79068cbc7258e2de4e1ddabf6505bb54c521675670aa978bbe581484d58b857007368c334e056e3d3cde466245c7cb23d18574991e89f6fca9d01fdb811b72681af5ec186db39b326c52f8cd9868e858f259a088d727bf47ed9a7ac446bcf6ebe15d7a0e28c8a77587f855b1e3aff0aa4d06bab1f613894b33866dff466cd90e0824f078b6c67b8ee7afbeebc979900008e0775a7845d52fcdc059080877f4f7b1f793a5baa1c677de931c5866aa5e062d95fbe64df4e4cf87016b63d3677416a1e46da419f3fe75cf70f27c738d6788be13b99eb92f6c40edae6208ecdb300a0b6a76d276749f9ab30c21203df64188d8efcf5eb44f2536b798fbb839d9c09e99b4492534fbd0349bda36f3bae0a3317b2b757c427f0c905deeeecae8846d0060906a24c3adaeb82ff19cc6b842bc6b3522a86bdbced74cd118a6a1c7b4bff3eccf6c1198c939a0c090b7ea7a1352516787ac985dc96bffc1684adf5a5caf6d738925d15c271508d9c659a4441adbab89b58bac42630ef7d83e4fee57e9ab0e65346122442b11520553d3e442446840000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000227b10aae715fd1c4646f328443925921dace48986a6ec9af0cccfe9693351893149259b501d10dc0877371ede9dc5cc5033f2e9d429a9cee39af1f520f6eeb2fec9e6d44962e458fb791a712b42c20c9dc08e0ebdb05617f5da8ec3e2760e349f3058f81bef3451b13cbeefcb6f6ae1a98d932cce02306aef3f17dd4022f42cd948221ed3aa8f1bd616eda824661e6efbbec7d711c8a452c6fe1a35a28c0455a55894d55b0b8dca403981578429cc45abe3d251841219adaddd530102649dfbe99dbc8c3bf9fc1b8238e9db48645baf7f615e153d5d34d6fb0bcdf34e09025e03c43782d7c55771ff8c6f708d62bb55354b0f234070f9910f8ba3aaf5b0ddfc5b5b461955c3e6fbd1117022552a9c280b44f1e59065459afd6d1843875871ff414461e631c14377235ffd4c16d3a8fc26d97a9b4cb98aa71cb329c873077e041ce5969501d63ace2296f793e6d66a377594270ad35d2bda2761b56d11ef3562094a792ec32dd28e4688393018afe18e070b5150b51be7fec24cfb2b92d263a44496747299b4679b7fec47cfaa0b92fc53d9e6d51d0e11ed6ed78ff26479403c1af6f89d6bdc7a5d74d2de805b339ce867d83225b2fc024fe1e4ef3f5b00c6d30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a58ca33212dd3d0829b01e11915e4e93e5898f29a866452310ea4ce463281fc73b073de9467c928dd5d1c74d0494a43395d4da14e05fffaa2fb59149c02cad4562334c357ad6f738570453f26d26591677e31f40088b3d732e09bfdbdabd64428d6cec499cf9e2a3f63769ae16af8eddccab139466843a03c23964c9dd0404ac49cabbf3150fc4085bb77fecdcfa4b304efe831d980913ef9c83d3af03431800ddaaab69575e9c93491d3b27cfe34e0ce520a94851cf7e0bf9a932665266fc3952831660fd918bfdc80db4a9a9c770a95434755bf3435234016950242c2545849e1c3ef7a5bcc1cb4318dcf5f557e38c87285e14100436e9e23ee31ac6e28cd98f1c43d6754518ba910f48030dada3dcba4fb1dfe7d225f752ce2ef4a86b69bec99c2f6878782ffefbbeebb21797072e50fa54bf96abf510eeb96e6a95ef1ea600f22c61361d40779d8d82a7425ad1b37b2b174020ed49874d6162fe643ea6eb4129840c94eca1a6a2879ba0f2c85bd41ec9dfc2cc0a9cb2e6b5f57fc08fefef1462a789bb510fe99ba9143a30affe943e1b22fcd51d1b43a9feff47d422627006ab970a44660437c661b91482b2b8ecc7ad66be54149cb7b277314a04d68a6300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002909286b040b7b70005bfd2767eceb006946455a15ea8207d82d43f436a63228922ad975e1b6b9e08da390bd08322062cadc8983bc68f217b206701818d851719f6db1bca003c5b6b93244e14d949d3d515fbf903a17960b35370d3802db772743edb9113eb7a921b407892474c69523b827b578461e80ae5efc58f5ce6878f9f0297e866258d911b10019c75a05c5684da34850d8ec04fb5090440fbcdba6a51515124d63fe5b7c9037d429cba4d35c8b056f6f7a09c2fc65d07cc79fc89a958987bbd3a28ec33218206ffdf77033a766c8d34b6ba320309978c26ee496aa0e49cb9833a3d9bde02e9a25410ce7aa91d149bbf837f185d8c863722201ee4369db1df7a1be60aef6c6e7aaf53816aa430909a5ce2a1a2355e55fa2f55dd99ae1373eaa28d8fc72366e11d2cb898b6a4b69e8445fe08fc7fe73956c2d4cab69334aec3465d6e157aea182b17c6f0f0942bea2f2b272a3fda9e939c9ffae1a3a530b1e5625b87a627f63713da6f27f11b1556e383cae0b1b34fb1c13b68ef1e9226366c48523f2605f46b0fadcf315adb59e6e96309b546916ff00db45ff39ad1fd4395397bc69f4c544c8a369a40d58b7370dfe910a0c87dce173a21709155bd400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21efff5eb1c41b94e50ba799711896a0acdecd6fb2e188aed0f33fd26c6dacbc646c4cf7285b4c9314efd67ac7e0524665c5d5e1a17890a8c56186302451d0bc9509b45c5c5b2a337dc9773fd0e96a629516b4daa86c9d5884a61e36fae01c304d8b405984d4126564e0347fddfb7862aef848b44d076fe315722223a2632aeefa7a7f040338456b046a32c4d72decac8ddd1f46578f290bcd0375c4ffea95fea002e7e6424be2f70599e695a040f94fec871e3028cfb0ef587f9cfdccf30bb2aa86dc57f4d2863fcbd1c82983c4fda3d4a8daaa353f61b24065af6c61b4f9450e0c1ead3a527a97774da57f68fb1041f0397cc451d9391a442aceb4caddb2b6145050a4867fdd4d191990bbe5906377544c10e7689bf98341e7a726c7931ff4d152275ecd5a3602432c57c3434e60d9319b71fd579d6ae230cb599f91d23d462e6aa02f7f6832995a41c97b8c19cacf679ab44d8705f63fcde219a568d4195299438a726025a07c3e2a0e86a5a6cc23c2d6585e82870311a3c5106cf029239a39e93f0c44b1153de70901238d003119595f13e207e41d93d29122459bd6545c108d8519f74174b20c8b447cffcff9771411902a9098cc7a5914bb6ad12dfe000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af7be65c3965f60a03f8a449bdf7d6058982bb43def21930529664dc7ee4cd022009085e71a2948d6aef78e1c898aaf6647496d4b5c3704e602ceb0e71e5b95bc410e2157f726a83b56ce0c7c928687aa03220d41c9534320c4a5518d8c07bf5f60844bad975af4b390d19c85e6239f78265e99e12afb51e9f66acf51624d4d73101fc67cc9502337179f8bac5118a1d44c1a191e28016cba435fd7911fc8f0cf8212d0bd0dbea6466d3d5e8820070c6eac7ff39c055b9494ee7dc4040345c4bae29df29f8e9fc803074c41cfa42432143b01bfb3fc5aae3bb86231d001a0367560d26ae13331453d6e0c800aaba00e2a19c8d74738321c007c07c496820c710b1b771dfb17b0a3aa1f18a1c9cf93be326e9ea0d7aba69b7288dd94a058abf8567d3d8a77c7f6a2e7dbe9dc28c7b0efeb1682e7c3eb683c9ace4244f4ed90a355599fce3413a32938c29de623f6c9adcf1034b6252192b04d6e2b93534240c9e45cbf24386f4b7d12444a1dfd89ba87eb338dd957255430882775e99decad08f6c0bab002eaa93a9e845926bffc579d9854d04df9d2ee0498828de5aad2a3251c692b697f110b7d995fe0a440e8af123d910572f794a233e0badb60c498e1900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000de8bce2d163c97ba2cb2b61c52e2295081e5a25f9c214a02e4e4b5d0a45dae6c45e8396b75c680e4b897daf015904391ef55e1f3d0b2d59920fae838035eb1db9b2d07d647cf9e95f0398d72092f48098593d941b0a2460e0b54a78b525d0e14e11a1656e5595236e3353964796d9ae9d1a436447f6d9591065b01bda3b51bd42cfb664243d9d405f16d4aec1038c6a03c6f6267189c3618a2d148a7ab945d37e42451ca33c57e726637a979b93361fc6fe3f12514bfb390c7971589e4e6a4cd2805fa78ae5a7194af0c09eb138a5321bf77b55b6970640d0afc46972e154978c095169fb8c0a11cb5eea4e6f5778c48541933b8ec6302765112407a1121a2e1c1fd3a5f9ce6b2ce9763a417ed49d112038c226ca13b183c8d7efaf141cd41ed3044c9de24198194fa0dbd989571544e7d1d679aad9edd33bbfc87efa7985d4b20a8b60b15800de866e2834c6b53073e9028f1212d0aa749ae356eb79f9d45ac0e47e67e484fc352b2b867309a281a5551096f1c067585386b8dfb5e448aa163b1af3f6154e917d4f5e272d2b4c51fa3a9f1458c4539b2c52902b3e781bf19e5d81692158ae20a220116d0786e229c1e08d3aaee33993f52ec2554ae0e2bc34000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c4d3fe4d0ec43572cc92545804cef33e5846fda14bfe5fbcf95f7e8751ed40ab780d990dba89b22080d329ef9e3be771016b303a855ba6f016c864790f4a2ed9ea0d8511f3635ee4cfab61bf841019cc94cf23d661637fdb6c38a38a9ac9869233d259323a11a5100bea143d1abd0139863804286c22ce7980056fdaff9e4411f7eac3d261e1f3324c8d202a799d99712e47169215d65e4f846086f011f984b7520530fb7436242c35df0ddbd0f0d8b9b2c40c8a9270a46e82f1a5a933424f89ffa9b8b30764e1dc30e191e7ac356cbbcda89e4f86793a5bc63369a743b4dc74becfde36ed4a437cae550fc4218541dfcdade679f5f47c13a8ac4217ca37f526bb34ddc516e96ef58680d0c5c5315537437aed39688f7ad559b58f77b2e19b402a5e86425cf314c00a90c97bacf742cd3bc26eb0b310ed500aaa741278bda618da089051af29c92b12fa5f77694fe76658e598fbd790fceed0be86c3716a29a07cb252b22036921c1ebdbcfa7a3d4bbf60a56c38b17bd1bb6e50fdb5b0b66237a3cb0af446af6ac9df3d500c54ea575d00f0f90efc7496923990706fc925f9d2754932772463223e69a3c3e6ca0204388cb2d10fe541e28ba43b8376104b370000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000976a5422dfa951adc8ce212aed096bc8226b7ead275f7d35c41667a6a7f3af5f0738420ad61e4590abba56083adef3751f97c07b722400ce9177361a0c2deea2e93a1742c4da27085fa3de27c4a1af003cf2d6013cccadb7a22d6cd66a9ef311077ad00877d4478479b1e819cc75e3fef45ba6cdb080b0b647b9ce892d7a23cb6d7746b95892d3f4b21e4d233340b93916abf399d8339a099c94ddfa875df66e191dcb5a65dd0c2ee125170fbb13dc3ef9f4510dcb5d7ead24a2870160e7068327a009004a725611832bf5798807f70836f5ab76f7a82843c738495fa472750d85f620772d8ff1cb3f86c884c018506a591dd84c71bd4ddd839f0d17ed763d01ed30d82beb31dcf6d216eba9df0a33c43b1cedd1968e15f9bfca1c6fbc8626b1e6aedb29f6b9b136b0b87c0407957873ff7e888ca14b7037ba4957be276473b16c28c8a82c8a5b66b988bbf5874877d804145a9aafe3299e0411ac2da0f2998594c36cfa02d076dc083bda1e29b464a999b735931f16cb78331d47927279cec9d1082a526a365072cb6faf480383569f0ef3cf3e16b45e068a0318c21b2bd143a0475316dab72d239ef788d62907bd999a78f3f1b9c9822fc81ade41e539dd200000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1c24bf2bbc2d5f27544df885f66ca486aa6eb5cc4b9a16ab2538125915e9d38985576528bbd2755cb05243391dae54d93d5e12a95b914a31b7e5a10ee1cdc5c29bd44dc5cb63830630f5acf08f6034d55f28b57b569d446e08f66ec07271e648fb0ee5785a5ba14c9c89acba75abc2abccf0609bb34e7c2962a8e1a5d639e9e2f4b28c1fc8f80e4dbd3616a4bbd41f7020fd2a3f67dfa29f73331cae411553e96a4c2cf39b295c93d5ef4851eacbf4108f89443acaae1fdb3c0f279624e5c10720cde304d0ba25f1a9c06ea61a967c9c6ee0d1bf2aaf371583c747dc3a914e52c57d357607ca1c12959cbdf0dbe172969554767856b65170cebd00a2aa6cbd3429f0814af34032d56212ee8f8e2f0e157523607ba8fa6f4a709ed3918973c947d5439a93c2e4082662e4db45411ba7fcb49fd1a4a8dc40cb56a1e91a8d0361f51c6a1cb2e69c6f1259d4a0b469e6d83134f77a83c770d14ef3acea2578d84b5fd2fafbd955b71ef1155bd3e3ac09505fc14b601ac5cb98d77a10f630523881e8aae86f2bf82f3a9f812c8ef284906ca49c343afe223d37e47940e2ba8f7d09e6368be2107b469bdd3c010b6dfa9bd2367b2f6f1bb9427e47e0375c75fda30790000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aad8881d51e0cb3b84c795c7218ef676ec50022998395bcaf42a64b8e2a1afd3885456fc8d9ea4effbb619df10a334be23ce126cd3ecf9c5512bfba5ec10def16d8f51db680643f6bf514398f1c22f66f0a2c3aae892f687d35b5f9a50ce9e1c3a8443b39abb5ea520c0a2d120a4703b1bebdc9e8f3117c8e7dcaf4fca32390e3c11ae4cd8de25159ea5fb8577dfafa70f54ebf277e0c3c18e80be9569e0da705d6480d691d84c1ce21901ab4f5bb0af14ec89100999a20bbaa33fd7545f3aa259ba05e9c6554e1b5b07bbec3ff55536d301c28183e704e364ec66e107da768f0cfd718faa0159d3ca3e44b816cfdd1e811e026ae9ab50069715316b70d0756878a9298869c4f47a7cefbcf11e59ddab659198120e77af9a4b767befd0512011fdd71661147235e1e24d816e203c58ee2e38d7908656f9ac3ecac83cce89864260091007fbe66c7ea7eb039059661eb116d7762b5b691c1b64e3f094b0e84445ddc12af5a01d1e08b57c242e24aea0ee2fde05f36dc0bf6ba0e2a83dbad1a92611ab3032bc42e79b888d2c9b03392f574f71926d2db4227b27256da45643c95e806542cd3de8e5b007cd62536cb35cd0297706e8923b9264b933a0d17af535510000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005b1e631bbdb7ff66adf664e5861e9d7796aa0088af194296b7aa7fcadad3b5d11b61dbedb55c4399fd952ab9048e62b8c3dd92c9745c9299f4abbb1ad5c521108dfda626f180e5a52fbe8b9abcafa161383ac9736fe26f9941430fe824fe39f6e3afb1fc2da3a9fd9a81a76688c68383ca375703f1ee237b87400e1ea5b7673500d466b006ce71a8343e4103f6dc4b26bd2ac98a9d6bdb4b0352023100046c0855a0a9191d0f242e0cb9fd449d80b3061954fc652b13a057eb6c20eff602b2f4eb67f2b436b68b84adca967f7831e47b5dc0c34ece9fb24872bf307782300136683cb0377d5186a40628f2d2581e9e0aa5d060a8baede5ffc35ffd16c54d41a7fa41bd4240481712141806f1bc4e54754cdd23a1ececc0a86a6f043aadcff31f576e93e2c3d4b975e662855f0f2005880bc011da79d8ac5bde555a5bc966ccac3153b70a6fe9c3204d37be2672abc5380990f95b652ea150d01fa35cfed9391fbe295c8a0f58c241f3f5e6eb4c0c29c01acb30c8adf571e63f447a16c34d66f457457cf0379d5fec15775750a090c5f204ec88fd660681c4b24cb7a577a4744a4ff20d19dc33507003842f87fb850382cc41d6f47a850d1794c5f85fa12e6e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bc26fb9aa3bc425cd47838f5e2eb472ec77f225e7e4ecc836961a596878df5d7ac022551cf45f9987b4b2b8a22e85ab194f069d3f14a9c77c33486bb1d5dfcedd375753d603599912b3117f2b7bc7e0c9efb03dc0e3a7e54f1c577a2b712451cca46f6dfe2606952adf73574720d5a192527fe1c32c6c4eab45ef3f5ef012e50c357529345845062b47c316e44e349a73721f5d1822a8ebca58c1bfa6fde7f0f1cfbc1eb48e44639d0127a832333f530662d7491adca1b5d2dff46c4e260cd0edd6d2bf250d688571f4604a2f35a20bdc3572dff25502ff634c9f7108cbcaf24c4378a698c50ad3cb111c1e0aa63ea6fca79c0432b392be926228b9677f678e4804bbc3f62726cac40fadb6a882d12e2fc40d63365e20cbd46c389db9076d41094848cbc270c12009630b2da14d5967f829c427c69a2a615fe697e274668552c73ef08f19229e140f37a02778dac6dfd75dab6006bc7d2d5efb53ce25acb4654026864a71b375dc3625bf8a1b06de800315b98bdcc61bd2aaddffc838ad400ba58ad61e9e6ecbe5a0f9c218dca88a68ac81a988f4f4940567ddbd1e69c551fdb3a7284f6d4c4df7a6a8a05598daaa594c6c4561f74c77743d3daee8ef786b79000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097285cd07aebade0beaf7f42da5a1667369dc02e1cb6f73a9e0dca1cf17411b448d8bdd6ec912e147b1af8de9ff7915603b9508e3086fd0f522d589691e5191fc45726f16d4d496012f48653b3a9b7173a8ab974f2e69303d69903f9931116f41fbbca5b5eb805f73066ade33b8132244a383dad6c220b40cdaf033821c2c596289c5b8df1d85617b41f74de309b945f4ddf3b9527c617b00666aa220a081040a7be5b2135362bbd829ede3fc0e635a06dd718fb21203d99436fb00be4461fbf6a971619e8d5f3a30e98895343590a2c95a2d3ba9dc4b990550a2cc0692bc03691d84aee3636b4afd166767673d80f38c4db51a4422c0a2e99d5ab728fdc74620ddc9fda46d01d8ecdb4b421eb01d44ddc45baae87bc3e26aa303fc29f6a0b4210197e202d4b35abdfaba6bdc7c3289c2e0e11adcbdbb0993be8047a6e2b57e19328da645680f31c70b494fe0bf1c8ebab3f862637cffb60281e0e47b2e605c92e29daf17be036fad7cee5b42f789a808d4a4928ef9cf1e512c03fb6a5acd433b3a5ca0d4af6aa5072c96562c55312dc8221305b67a68557e45fca7abca3204dc8683e275c3607d9bc75a392641ade303af04e4902bbef82c80aa301d5d839ea0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a81426fcfebdac1ed87da02b94c8afa4ca0d81f5a1edd04c4a6f48003ad059277ceeae5bcb5d34e39417ae0dfdb4cf240c121564c442960236af5f82382dfde3c00fa9f9d0f516a96d7b00b01518971f0cc01650bb598a8587f5ac14edc2ad5254c0490289629fc2ab25cc75ef46ab74dbc9318e94fc4335625258aba074409f3c4223e535b916e8b05453ab033c06e3d99a98ea21c6770ff40eb5f8243f270f57a103b14f903d130c85c06069d94ed7884251e3123ffaeca2d37c20fab0cdde21de65c10aab93bc0c0f10b494bfb690b6fc50eb15236df155254cc602744921373d86e2c0eabc97f435a3c99fd9d434d8706f32635094a22f4e6f343ed64cb970e7dcd92e6897ed574dedcf12e55b30a1d6214dea24376004bf77b97e8c237e621d1c3a1bb10095badfe1f2f65c0a54afe55f9b1b75e99c1313074e65c505e2d9bc4e988ec72882e0805ef6fe0335c780d71958a05751fd7bb5b2c3d9100554a8e87d87e848f6356c93f25ac3858539f9c0f5b4716cee6fc7f46c04e1f5a4caccfa02e1c7d5c39de58e358027b4c136774922fb223b7cb61096c9108e4cf68a9d0625af30ba3e4c5058d3a8cdb4ecc1886296e4204259886cd6b333a7af1740000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e055491be8633c785bdf8ba5b22aec6aac35a56c842847701377b0cc53e0ff8a0a4d7ee140a95f8bfe10d330442432b1b2385a4025007b89fdf1d5830af9a04b7989db77ef9b3bad0d26ebf81dbf5b25abe4590f217f39f1c40ee7bed96b56b21a3fd59c2ed719e2cce626d46f7c281b75f3182feefaecd5bab5c49edb9a434f5947ccab38114cf375f08d26d742c776f0cc712c5a2202a764c615076e2dcf8ea8bc52b7795a9deeb72f1765a2b066cd7348e17e91e63cd6833d60ed8c4cb1d6b674230ab720ef4009025ee5a30c0f0f1955bc4046e921e85ea2386172689dbec2d9c6a75305e49b4e530239fdc337492b59a525a8911b21fb080ca6c26546a4d68afb71c172e9ae417a83a99c1109771795e14545d4b4c1ae6f61bce27fa94242473d807bf1fda7aed66daad5e05e81b4dc5df109f1abf6692cff0313aba6ba19f6e2e0d958cbf7231755b68d5f9d701bb44196083434b385ee9b9487f30a5ef318733fdf1cb0143e6118e14d6a5cde2c5fcd07b23a680696437be0c7c49803ab850a9e4ff13490f0da45f0bd50bc6406cd1b379f52e110110e182ab0fac8d72de0ff73f9a0c3fd23d5cecd393d56991d9265ceec3f95e47f969363a3f6f0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015de215631b2e31641ae3d1396f8db85cb6b76e67d5f4818ea531b819b133d28f168d58dae459da62159d2f8a1a1cde38fcb5da47239a1aaa729920c72a9ba52c7f256dd1b5efc45c3228a5d730fc2be1a0e324444175eefe1ef342df4e4f90c958cd9a1c20250bb8e232ec6aa4aed66b26900ac5aa34c9e900f0e1be230838d21a91990d59e9c162e98663a663b02e5e0b86e4d0c2e645cbe300e269a56bb61fbb8b4ec995c2ef6e309cab9bc8c1bd17b733cb8ac11c1393ba235e25152b1b2f83cb5a3bb64e9c32fc6011399992d28346b4a8c5883bdaa89e5cb0370209c1701773eac2b9ba6aac33048e66a8bd49bbd222f06ea1754c9732185b52f051d41081f93a22628c4444d3a66750ab261488951fecefad11c6daf51a6904422b9d133943d1a1ca33337ec3e7f426b720e12f93820532c832df7ffa7e6aa74e57972b200dc86f168318b07f42dc8d14d0c42c9f24aa477a1e0909a63992aaf89eba9b11dc278ae6c50548ccb8092a30ac7b813a84afb1156bf2ba92c9db27740c0d5a195b21ea050230c8af796d97a57b7bbddc3b9f5e53c41e37167b350ff649e659066cc3e1d3f2c724ae4eee52aa38c61e4e7928f75a34aeee8a21f081835fb830000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a98aeb9042c246aeb06ee45ae30137949996226964c4f5d4e2f1a0e8d417dcee987f0088a160b21842fc2c6b502f2a5823c6a28e5b59d0ce4a92bb2cb0727bfbf980b25b41a76b5c8bcfb6f775cd0616ad35565a59948d79869a525cdb278e19c24a0a6f61cd0d19e023740fe82ac09b01b42a23b4bcce947cbf66a7f5d0ffaefcb8c53d3c931b357ba7dde6eeb7ed0df221cdb91eb566ff7216f508d575052acb7aec000b0b10efde05a19c726e357355ffe13db895ba3f3dcaeb02bcc34d7155f513cfe382a52ada6f0c790e3002e6fdc45448444df766889fd79ec53d05831169d1299c771f4ad9c1c581d8ae4b51c0897ca949e849095c8fbd17a77d03ab66119beb947c97aff11aa69b8cd3efa969e8e10851517086d08ddcdc5d8c43bc3f6b4c23658a2ca4397488292ed13392647d84921cc9f4af4855ac5d24652b9a377200a06db2e0e52366f71ba2758182693e1a683a22a9ec78025662ec7a7f4815e282fd894bd0c1fa46d7d73a8aa9912b3069d33aa48c9f0b30d1bc906987ed8c5232d3c1d7e6c1a9fcd8c15b5747a1df066a4104cd487c021953e30fc7285191e4bfe6a4cb22c4330d434c17be401e1005e33cc21fe7ae617da8f555fb855f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009834fc6be1731d8537c1013ca5b11fdd7c0eda7a667834a78514f607acf29205f27595e8140dfcc59579b06c53d2dc8e2e3e23c4eee29afabe7ac5bf0a550295afc820eaebb1153cc62502b04bd1b6125166c7122099ac6dfb5d8168babb2b86fc9438ca2eef088f2f6dd123d4fc78603e2cbab5660e962c3b0fa319056ef27b60bc49d65a46ca6b53b5ac3a0c3599a8b07167040d98053431acb69b665a2c77a57dea6b9a373ca6f705a16c7e00a9282841cb6d5b61ab4c7ce5d92589551be8311e6bab88b28b927a91fac2354e37d7922c8412064ee8d9757fafc5fa6a3750f635cc836aadc1d19b766ba839e2733eaac4b416ff669d0f6ffdb14f0b9d8d204691720c488633102cc7258c4d3dd3eba7e962dacc473e67ec2aa782cd1729c50e99baf3095d71b49eec6d7c7d9a067909df1cec0d10f7930641f47bd7fb99394ec291d3e7219eb57cf1bb0ae034d9838f1afd3104562b6101058eefe191cb73ea767b4497f514be80bbb4fbe233b34d2b95f3d8b6aa20da6c683c76c82b36f561d51b72b1b9cf44ed145d7e593d99206e2f192838315ec993599de5823caeb9b6cfe2ce2d99ecfc7564d2bb4e77acd347a49a91b172736e062d4d1e7288ce3f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b037a28faca7ed1a41118a8ca300ea315b375073841669a8a1eb0bd4e87ecbbe40865ada3a435762540251354a242c028c20bbf8ab0493dffee908761bfc2e2397e3d27deeec4832451d30d06c1abe717a01a0a94c31a2baa86f463d51858af67d2fd5168137179640ae97c6a10dfb216ef89376081c6261bbc882ec222d68e449e2691d563f49493d1acf65840a273b06717daf52a5e6ac9ff2bde603bd096d905b9c32f4553945abbeefd3ff399f66005061cbe4d5c1f44d60ef46ec6f2eee9484ee3922e40bf41b668a451ee3f473b01b14e6f893c2da872b63bb5565b14743f029204e48d77bc81a0619036e121f1ecfa578957fde795a0102ad1f5cf226b3cab02a0ad4f4685c85b13fcf84c7157beaaedc9c1a8126187c04ac077ea47575d897b6b27d2989459c3ce21abf8c5ce43b7377a9181f5cc55432233515c1556f3940bdea252854dc4c2dedaba15e9a15d9668a3230ed7773ea66849de7b0e50a615f19a34a6d8f2f8d3ed75f869139012ca2edbd0beff02328477d3bbb20685620c7ab8e90190d91390a8cefff4be93ba1899cfb2fcaa620ce552a5c2de0939ec7a50cbec253424dd4a965872cf85e7beea25eeafbef03ef78523cddb3c04000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f7d91df4fecf36a86e273e87062d1d7e238451dcdfcd03d0f30f90f43941363c0bb5b95e61f5e17c22269420a8df40872670ce0d4d904665c9b3b607226e77ec9b5b7d3d7b6e5bc5a78fdfb2cd2cae59ebb507c7ae5c57f7ac5c6638fb6b9bff85a095dffc2e7db575bfb898b947598246cb97136e9edc4a8de4722f5385e30603afdebc5963b1792fc1d2b6b75ebb39a992800a36872be20ab7e1646412b8b259e68e2fda85617b3497ca8fa0076bd794403997b332e7ee1675d4b983d41c2dca6ad875e3475e3e7499d8f30fa4431fcd5b6a47a3ac589a5a2ed6e5dee206102e629889a85453242b5f55d4569a70ccb1e2f05f081cffd9a20ba88209ceeaddf374ca7248f7e7088a5bcc9a8ad5015843e1215cadeb215b8d872d1d3800514af83243283e02f9bab2f51cc86c9a14256197a19f68f69d22bd76f689739a3ad8349588748a3dff62ac0245caf0c6e8724ad0d7b7a17050100a2a34b8009c06c0c250e0fd74da057e29db7d46ce891e512af51b8fb1da2ec96af0a50802871b9c6f55c718feb2989a46498bed1fd1c07325bbb60cf096db9b0a63a8ecf0ef68ae0e03747a4578720e09013c5a2c284256c56533288af17916cb7d5500be058bb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000885c5fb612f5b9ad5270c89cba28fe9220ddfc283d843789ca3a4e8482d48f4551f4b0e3ed891c1c3a456e028155c2680b473ebec06d906f2b6a1d91814bd0ff90cf8a044b44b35e31980e48f91b4defdcc42618d06b343889b7bae6f756e779071a7e9e7e488c6094575fce6b3530596a8bd9fbc34d2aa9e8ba584d080814e6621f8d24e112bab02aeadf5facde6d9b6facc501c0725a0450edd838c69c844b904b1a2e0f05e45fedf785df0040b4e8107adcbebac2af6c9de705686d0a79b09c1d293f5b1cf59edafb075fc6579ddce585904fdb308b26783e8c920b9dd8baa7be398e0ea93034bec377d61e5c9264ceaed407adf3c04138ce65f0a1f087dc136d0142077a54c0ec6592ee0e4916545db9a2b5d5429c0769cc367227746a2555ac3ece53ecee2e96d439ee05c374f2ebf9df7ec61260b0e8bd7444949cc0082589848ef5e74f09b9841e75a1b5393ff9bcb2e1080063f1eddc065230eaa37771b050061c957a6983745a956683d3997f748d6443263f197306facecbf6bceb17ca286ae823c878ed66e5a47cfb87c530c9c7d091c529d9c383a53fe7fbd79e565711dcf041202eda5ccb3373683a0f52313f8b7c94745ca22d81c18c302ba50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084a3104648626c9f3e61264db7ebc4d062473b161418f0d2e4b7b0ca16bbdae90470b2bd42b12313e4097ac02e04fe88098f323a96b6f55c125e956703a4561ae8606fe52d20ace695ac2ee18897b0e7ca6471969d2ee6b8ca3c55c49efd4523367c159b46196c1e48853d15f21d1347a7851c87ac75e4549f4932bd863d61b6e18a404aa13cc2aaba60ff04f78fc1bc3bc7e0e902b14413a03bca5a5570445244b0a2bbd746bb3f758c06adc27331032a4c863f61bb99a4c2cfbda501734e46bee99f9bcc9deb40ee346243583011e765763bbcd4abb38c693ee1a313561147ce3f5b036a091e53357b4be6655dc7fac18f7635d764ec65e2a91f808ddd92c1141fe5f63c3e4ac17e8337847ba2bb977281280bf823a0bd8b40152040cce8a444cb7cd12539bb971fb9ea000d315f719881f07c2d4192421b463b70ecd0b6efba1d533de394a20242e355b85a077ae2eda30ebff3b425c5a05fb53f8e3a390ad46bfef533d8e83864eb900ec70df78c3b5b9d55a0079b7ad6e1ca10d179588dc48a33d365f1e0f068206d98779c350a8517010af170f86f686e8fd3bc82c5b07583c705cf09fb4d8c06c87338565810e4724f9a0d48b8b927ec728d7f1786200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f1cd4f5a329266b5761b0ee970b5864e8f2d0d1dc211fec663300dedca48d0538ac1695e7cdfd7d888766fd74a5c7f05e0251be8729b4f8cfa11a813a2125ce3bc6f1b985d6bc04c8b8c8b0bbbd42bd71fe221f4a7b03e589883806beeb8cb77c0262a6f50f134c1bbb2fadb6aadc47c003d8928bdbb995b4d9d1b1c17ebcc9bdc4e4ef1acbb46420b3739c2b5e0e619fda4fc1a55e9ce41d3774c3a1446e99c57f81d981cc126b2b4e9294946807bc352701b8902fc25e3cb1aa1469c70342a59f010a7eac2cb63cb65e684e38dd0ee1ea71f0625976d059fb140a67d802595853f7459545092d178029b25ff458113e629c3ff7f42199d20b608a25476318a64c55f6ab521155e506ad2009a73d46e230cd707e922e26af2802a7fc5ebb1c3b2b14507b2aedb169795d31ae414fc0b85631f275820391baaea31b633df9627fdc73dd138f04493deba72e7068cbde2341961290e059323f1b6af3ba3dce99146cf23faa71196e384d754cd61332ef288b7a2c98a25ad9bc974895f8efd157949e88595048953628488f2d900cce2af407a0a2054ee5ba481744a84def2a9ab7e43849b53f974fa82be30fc85af13be79bc716013fd0cb3f1fee817f9a3224000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001361d2451c3467966641354c8d78d7331f7c9eae0b6feae02b67d8671f34f5bfd21eba16efa7f3498c1c72829c3f33838f228b4556a48e5caed22d6e5fbd77a3fedb7c68131aace2d58e1d350b5329bd2c11aac75af0950f02dafa2cae1816a964dc237a48d10712126db56b70cccc61fe2b1cbd65cf1d145b3f0b1ed1adf6140adb1c4c90938a7ce687788887c87f857b2ccb408d2da6af781f0cc42b61b0f6de8c807bbed71fa2761aed0315c88657c2fb48069c71ee48fae002b7b3a41c4592cca40494774cd8c44cb1fa1b4e0f930ee41d04d466fbe921013a5f411a783666d17d467429ea71799e00d0a0ef0f810609076976c585b367900d5a2bd1597889d440f8ed49352f573999845d20515b6becbe00f19d6c90f1eb1a5e933da828b290012dd6eb622a8cb5a7f919a3fb8e9856263a106896993f42843cc6e65662cdf9cec75189088aef8fee803d1fe172e184007dd766c1cc983e6cbf036e869f0743d222d8220304f5ddcb9c5075b491e6f292bcf4deb93e5f83b8283c099557349df24d5e300b4ba9cd992f1fc1915f8bbf8c727947a803ad40f99e8950bd6e19ddd851ff027ebb8cb6a5266526475696d76b9b398e532c0ac7e23a8b99e28000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085679b0b028c975667da288e367dd9680209420ee3245490409e1432d8859ab267809c4dcc71f0034301855b2aa81cf65f2ff71a2a892e4f9a7cf59d5182d4a4804e7a5c5e553d2db62d757a0fd04048e2075a34f59792dd028e7a9ef87803b8f0874bdc081f5b6da88445115523cdb21c5f6f651ed685ea4079ed9e91ad6283a6b95300a597b82013bb4a55e4ef60522b904931f1176f260fda4206c9f9c6aa6a93980175e67b1d2873fc3661f58a57b3b56513fe9e3a4aebabd1c45d24003b4a70aabefdf186a89098fb2d7074d4af73ed409fd035768b2fc0c4011e3b0cba0fd8705c2b7584bd8a90921aa8c4fc64a2201e83bc0da308e8a0385c76deb6b6d3b5ff9a8af1c3ca45e608c4ff2ab65fa04b4bc0053a3f1659ca24dd1c2ff46c0792e55bb34fc8cc7032df2ab54a2f606dbc9bc1cb845d91173a5219bb1c448c5593c7a4c13d5daa7958e5bcf597bc24332ad16ded0cfa3a057910c7ea892f6843769580e9b1d62151e902566d7d4299514ddae70648a0378272e25cf5a51b8b0af73b65aee0948a2d42ac9fca4ea909b8b23e1b0a74ff131b20d1f02fee25ba4711e3cb0afae60e87d937e5a162beea9e3f6ef5559c7e43bfa454c3419253e5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086a2a5723100fa556a046d00c6d66c883cd4269bb4dd7ff48d9a62bed63c4c8c943148c11b9838fab2ddbbba753b904d7efb2b84270764b01e1d8186e4ebeef78a12d2c0acc001a35587dd843b43fa86795961a5b4327dc68de6ba71e8bb9c577ed352a1ee371c42cb9e25cb0ce1fc0d7d53e21fabb249cf49adc7afa6e26b17789868480f517e5f7378df734522936efab54fc626632396a9687aea783c8319f668e4532e5b3aa822a5c45d9d15d846411b8b0bd4f32a72ba6991f326d30daf0470d6b6ffe3457a959e4b2dd6a97c0298f1d7e82da1e91f4d76a22ce10ab4835c6fc8e843e1b3a5ca5963b455d6e69e27eb980e5083becac48ceb2429022ba247541016ff7616272a5988552f73f96e1dd75fe397b295904764a047192fff0efbe022d817aeb48ac14baab55b83c4c25de131b1b5777c72356ca07f492e7d556e4d436ac2a66b92795c5b2b90d20a55dc74db91fccef50a1c414874f308c25a42ba425a8022bc38ab0de0c69c6c8efe1885ce353dc46ea89b368b2b6d0977dde81cd42db0b6b7ab3ad4596d08c69fd29786558916228e699c2b88b5565e588705afcc8c8e00428ff6bd947bcca19884cacbe5304073f65f6b0254a142c62c1000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3986ed278d8876001c520814ccb8e9701fff435593b87d43d74c46b9290fc752a159fd635596d1811bcf05d01a6a2ef6cfcfe18466f4410ee9dcbbaae3eb63cb4f9402e019b2d17be190dce9c5477c8ae29d17889ddd703f3ff4c98916c22460b91b354741bdf1b780b8e18ff3bcc40b439f00942e4d4f6c873aaece72542dbb3dab046bc14857f3cd820e8fc3e89eb7869b244c04d186d15f4e8b26fc1ba60502cc483c028945ac74b7b740dad12031a8aa68e14a8ff138f00c6c88445300a1efe08e545ad55d56c578d41c7bea4d1b7deb612d5c3427b5b91da7bc1e161eb4d15ae78fcb353a0d73c7e8d6b4d09be5bba4f01130bc1d43677ee94fa2d223dc5f656fde61f4ce1a605ceda7d1c12d6ffa5f35949f39257d44058c2c0588076a685686724ea1d09f7a7bc587eaabf17c535492353a87e0a8026e3c02143e3fe9d1c79553775840a2a6800609cbae93e204ed620ace6d821550cc0fe8f88de4b523a613c575198bb1d282982bce5c83e7e1cc9f9e1294daed24cf396f20b8de3efa3bf41f99b63a267efb8bab577c20c8b7cfa86ef3e89d1de20b25d675902acc46601c85eafa5c7965fefd7e43d448caede6ed847ad6026525e661fb60632900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bebdbb6541a4a0a56d3df512d7d40fc008df27eeadcf431ac96b02a9dab7ddec8eda8277991e38df81ec8b063f8b330efc079d143b67e34502a7de068031c6045081a997a0906b44b6f2e31181cbafbe8678fd785dc630f5ee61e903f5e4ab53ced6ae1d5eb3befe2d80da74ba94107a0810c4c0345e7f29ee8781ec303f2608565ae09e5ec9b44182be551b6da55ac4c47cc73fbd813150d61f9d37b468406189c3caf64b2b341e574ab967063e8a84b36f916914c5759b423300f2912f7787975d53bd33e7fab47157faa8c825549400ad4943cc849f9483140870ab4e86e68f53b88ce0c556f96f541296ddc17583f7e77086b0e2b1f4f89e555ca4e83daf57b9b18007760f948704fa26757a1d31c365055fef26501d084cfe8a6f487460a90a264efe80a8bfa6e3a6eb616b14f1cd1f904cdd837d9cd6c649cd4c707a131415a8b7bf72540a2a1d9a68984beac858aca9aa4ab0fcd2e1f710a4a6a2817cb535fde3eeecaee20fb495b7df6a01edf4706d051c26eadad28b5c742099c0544ca317a298fc9e47639a63b992cf515ecebd44150086cb561a46043742018bbd902ae980cb04526ed24d9822a977bd5e998e96730e591eea20fd925e9542dac000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098e4b2479c63526db2ea9bf4c7322cf1b8db7bdd0c46191338bd57e3ad3ef5d9f5c59088cc9b2feabb156fcdb1da788b39c9157f9b4d4469f2eae60786ceac58516584ca6771ccc00ff7e9d1d42a55472b0ffec70c760d03cdeace1986607584647c411d2e233e1fa407d2fb9210bc1e81f796329a6ac069e331ef50acac3cf201589581fb7cf6055b68125529c1ecd2bbbfd6a279e0c5864ac2a2c39ad9fea5d54eef95aba4bf2262aa8c03a335db459dd9e40545651741bfb1045380f4310bbe0b1d76ee4a53c23dfa52864949be340309d6faa2878bf83dfb13d5a9453be5b4ae8bcad88679dc76cccbf189d5c331ed919b400b966d682e1b09750041ac0956328c67cfdc441738b11a2188aa7dfac2b3533da961e60beda82e28ca6dbae140712d6f00ae520f4eadffecd1ae782938378014497b31d2a0d0e6e41d66b97848f7afa106c287a4cab5e1d1076e91a6d2a301910335a6378b2fe57b3c863188d6022e17b218d48ab75fdca574dd55f799488454eb1a45de75caf025c19ce39a11380607c29e69fda987f1a9b7dce548c740eaf827581a8fb497191598a21b9046ba3568e592659757eb98fbe7d9840b2e8c4fff59e2ac4cb3671a9551cac81900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b61d7f60daefe97bc3ee19fd5af1a17f85a3cf2a0c4916cfdb086223c7be981dbe284d5ba42925bc6d8913f3c05364d958b1baa038739bed989cf8ca37ae9a1845c1efc3d3ccfb3de9d075460d8409b86d0bfa6b4cbc8fd38cdbeef36f2b4c585b8a9f5e55d7cbe7cb14ff752d11a809021a871037a4b50519a61e9639cf609bb75f58a2edb0cb529f7f0364972bff7c477274110c82e8b4dc17068770d670125b2c70ff91834232cbb94535d2f880836caf20f5bd0718de2e5820c21cd2b4c122b615e16d9f74345746891ec932d3a051912a4952ad061a9503e41efd5f780a6eb5cac2a5eda95227748e72e2525a97b9911f0b12c5ba6b99d9afc8a6221cbdd0891ef5956c54922157d1ef7722838b9e311cd332fe54b4c8a76f19ec566264bb37ac53a53a065d8283c41c78cc07c3eae8384d6b8dae21f973559bf5fc8d46c2a03d82e7b7192be1b99bb61fd3e82108ef1c4be077bfee4dcab7500ce4084f5d4c181ac5486303876a684117de6ea1f110419109d3cf0c6444b38a560aecdead5bf59c154c2a928cfc60d932d632ca2d54a999e8949bc3dc4c0eff2cbfba369480ff5939a5f155996342542f6f8aba7d0be062f0d8a2408ad35493683fbec00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d0a75dfa80b8bd11cccfd65d30c9f94d162b48fb435db75c67e9dca77b8c0be5c35cc5edd5a2a916f7b0dde1a4479d66695d9e9c8fd0bc1598854934d8564e5839b8aae92c5ec3a24021070e20eb89ae4257991ed2646bf32fb75b2a6715c9da801946331a069bc38faf3dbd05c6ff2f4e0c07bec9e1510321b9315b6796f7ea9bdbcaa41eb2bfca0758d3801c0f2437f6b5d004274cfc12111e4c9c883a21e2e038666d2be94da10aa1efa0e6d78bd53a81082ef23c0774cbeb46350fe2722e17be8dec01834a362e04a1bf110d79c09c37f22ad7cd802236d945ec3958d7ca244f5c4642e43f4d722bb827bf9776b0a0f12dd85bdc2874d5aec71b32ab9d909f62553a4aba858066cee3a80b73d528a1ab5e1e9f148c2fc89f93c9f0553cddc6f0b4765164110cd0a47bd1e29e991c3b463080db6485afc4d6ad4c9df3708c88a4b2e64e9866cdc19670e40a2e0c8f9b8f8fc70ab55b3df07a91e5c2732ea4338adab397c1bde8d76b69ea4446c8710345509bed5e11c0fb785c17058a8cae93810c705052a21d2f4bbd2b253fd68649b120c980b41ce08e7349cb1cb347e7fc989dd7b0d1ccd4faec03d4e1bce237eea0cff2c2b215291d62a702b1513a60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1d376a636d7eafb4a16248351b25120dc78c48426768827330381853c76a7e48e27a62fd512409cf9801cc3423c447e695e0aa262bea95c3882fbafcab6743d9b5ea1a2b78f808732db723b3f42291e56d24690208a905270a93b42c6e6392b16bfaae7c90314de10bd7b10dec4397ff7e2658b051e0cf7b2b26e5afb8b7157691ddab0fad579e6f7956cd94478537b9becadc44c1d786cc3cbf291886037efb807b6603a7757b4553d39774a9e2a7daf678c7b770dccf15ce5bad2081326206b3a70a0952d186b9c451a5ff991288afe0dc08b4d853d1b178d4471e1be38cf74cfbcd7962fe402e5e92ea86c9770be49cb2974da73f0e3d52957442e8ab132df9ba672222f6828c9ef8f1432867118dc8ba007e80dc982cfc4d3726657907d2ef5e49e0e3cca9ab0cb784ebdaec67dfa5fdff77c31b085ee5cd23c22e66afaec6162659353b7551bee84ebd32610a5e0061903c4046a79b42d645cc5c183c9f8de5607a53943418e86b54fd5969e61d3d9e330fbb678fda5b800fe278dcc3572ffa7bf8abcfcabed6bb9f6c6628f8dc1bcc4d1816b03a39790dffc44133bc6c32488d4b3ecd1a313fa216afd4b13b419eb3bfd3ac646d198868af7a1948b260000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a94f7c33b9d4e92e7c017547cce20f0c7b073ea6337baff02103d9432c00f12f3338668b487bc621e836caa042b806fcf86e3a473450483773cf757ba33ec1869553653db148a4582c5f64c389a0a73ec482b1b11fffaf61239970ffe3643ab83355135e08fbcf948a6d918124d2e92ef56b82adc01b2a21610f9bcb513da94f22934deb68905a316d8e469cc18909620f1a71116c908a6fda630c530e954e1f72590fe4c23ac51991c3c26f943fe3ab3aae35eba4d767df06cf2a1c89e579240b740877279fe95b099757f3b642d57ba5d541dd862eb366321d3e54a4e7d6ada4ddc51be8083accdfff71bf64011def7092c4d48f1b9cf37d5d9c6d295dbadc538c13c9a01b684ec6406e9f42bba106bee07fbc4f52399f78be2f7bed24eb54226e43b218f55ca807ec0ccb9368726c491c81bae29b52545d560e9b9af8defb39370a552105da2bc43763993bdd05aa6f58226135c03fca3cc7d86ea2662b9a62143b304591dc1a8d36687fef40ddbd403cd6820587ff11fb6c4a81c239a541245475ee114c5f9a396facc77185f846769b19911fe3f25dddbf15753fd22cb31ed7dc2098911cee9ad781a6e51c1ca4da03942897301b8fbe450223d20f3f5d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008469cb1279b1af9e686d14e5f427c8807c677f08c77b998ef8ad80bccdd6fc008e3c7aa8e16ddc87ca538f8a41b24b376483be3fd41cff545fe3598b1b4ddff1194fcdd7c103773fa807bb9546fc45909f6827df20cee70925f45bbe909766c063662922eba8b47e4cb3a07851b54dd23309e38989bdf932a9db928f0a8d469ff4d99ecff8c7cab3c69a0b25d50a3b728d5dd1ee2d41837476cd426855d59123119135539cf87f0be8ca25bd50ea9fac42be5f37c16454a5ef72e071901a519234b7f65fc38208f3e655eb9c3921bebf5064cf9cf67de2986e5eab5162173368caafb37a8c993d410d809318e5bb862d8e7ec5a1c1323516279a57dd9043843f5b87f9e4e96f9c7f6a1604cb512d7b9b96769413225f9ba4adb16348529a52e697703b877f1227f3ef477235271bb6be658c44b4437f8857b9f95c43533f7648bad9a249372c3302d0228fbf40c1861de1adb8997eba4533208bf3397938d6b99e92094cc14d083fc2d283bf59f7cd86748eceb16fd1bedbf761f8988acc83e5c458db2366a9c703c193021d833cb7087969d20b4759688f39ab139bc1a4cdcaafcbfabef87917bee5329d1193c06ad4ccb7c0a402855ad3f9235e4d96da02f600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001aec72f9040e14124bf9e7eb65869b483620c42adace0ba2e993d1a800a3f4cc9cdcdffb5915d0bb8750503a2c40eda0c9d4464a74411132a96667378e7f074c61d65d078d8223695067a3135368b1b7dd209d214bc6a2555c970096a0bc2257fe567c7736caf5024b2986f0176232fdbe89afc4fa2948e5605ae18f2913d3ed8221d5cd75ca13f7985484a2a669ab52e7af3926b3b0f87bc628ed01533503bfac6c6dab832345b9a819ecc04cebd2fa836107d3666b53f0dbee32badb422c3abe640a947c75e44c4f8280996f66dbe3a1041c0db5a06dadee34fb4599b99ac7c99508442c8714f44f5db40389f9d1543ee632d7a125a31e969dfbd1fb3921f8c9bbb24a33de8aa12a658dedb5338fde5cbc8d01d1a5a0c11cd39bcc3c2b3333f9b367f43d17be9a05dd635e1538efead8ef2765431d04368c0d6a4664dcb19a1a44a10422b4459dc8fba809643e149d112f1056ff27b7e8fed8fe67ef205dba860e67acd5960fc95967b773cf62d259a7dad65ccaef149ec8f0930f2088872441a8a393b382a00ed99ca65d19d60e544896fec3c0e487d1721a82999127daf58327294f689f1248eebe88ae229e5091929aac7c0738b6c5404d38ffcb5d6df800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000557bdda9faa5d410e332ca4d814d9dac43b1038c96b6af8c0302d4c87f4704d4d38e1787373a1a61d6fbb5e97659b3174f58f7948dcb1bc24741693f72fe2edf600f16057354d13980cb472505010ee8e194cd6339da4d0138f3803abf797a04721b5285f0b9edf486583bb8027b65ae054c569e2a076049d7c17b2671c9c0acb69026a071419e3d2122b90c07eb0b000aa0c6527a3db865edff4ad4e7bbc373a28f5af61003a76dea489534eb5301f11d26ae12e04156d8f602f88347d92904c8539409d63a8ff6f7f12a3f1701d026bc4a8d5c0975c76d184a107955ef472218ddf18e3785a9b4cd2a0907c870eb7887778f2d86db27a7d14739711e8c3b97c20db8212d225bb8491608f599df931adef5aa6074d920a064026579099bf46664786138e5e0cca64913a5342a0213c4beb640a607044ad8522413517300e0ecf7651ce68c9cdc641d338b2c6e48223f78e2edd89409e5d2fa5211cd49f5a5221e043737453ede67023cef4b31ef9f958497f0f2865f8cb4010a334b5c13c2c3d7fb1788aab744312a4c2b0b09c24decb7b244cbe4022b36f195d1e9544d7f7dc1e9da394492244ff50b9033f0960d766c3a09dc7f7495a21ddc8a21e21ec78000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cb917adcfbfe141b379895c84d52cf628f8a5465a88e3e86e0899bcfad35f7b261254c1bdbca9aaef37dcb03da576e925b9993cffd4e84564d6b5caa93b7aa530c2ba78c6ae5f29c6aa0dec661e0d57e5c31ceafa0451bfd8c7e40000c27d247b7decac04ceb3efe8bd8e492a2e6924538232a29eca1ea4872e832d11b0b560592668f87aac6095e70d294269172066a0efdec23f008231fbf7fe36b143e9b4b86cad21a3cd601b26cf120c9e37d3c05442bdecd8aec3c222cb4a27134a6c3c9614b3752f730846963a4034858ebb1ec8943d37e26c86c108987b81cd5f0af1dee26b90884aa22149900496463bdd859706f7297abef03fdf6b5af055f2faf3c41e8fb4a47c9b028ce791de098ac5efe03c38aba93dd4926ca2b7dd8c09875c4c6d889fcad96b3d9e1a9c6c88d78e09f24afa8d587c5e1abd5e5891072d0a75d5c65ea71bee5ecdb52170c29cc5fba5144003dbd6f441292587797261437cdd4f667ff1ecbfd674d8959aab89282b37387623f6bd97acdbf582a251f7b114d92d2cb00eb4c5a0484aa77a2c62a8d149b3a8d3d701cd532e52d3ee9e0ee355929fcbbd3041b468fae617a610cd2d0694278cd948f50cb1f401e39fb39c22823000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093dafece2c36b8aae2eacc5bee0689a7706ea1e7485e20f1417d9c93468d727e46a7ec02a564eb4c6d605b64870066ad037b45c3eab410a4f532fea20bfef5c25767ea809303130f2b164a912fb6c015b2743fb3543b695881f8816e56827384afeeeb17ff9e380e45e9dd19027a84ceef6bcfe033c11aa26196ddb8ed83e0954604dcf92d5943770d40f6a53e2ed3dc9527230b2ee0a500d01e3d61b1f02d295c507184ce5f00925a6bf6a8a353744cc849170a9f37fc8f9244dc8d6db2130ab7bb31b027d41435b1ba83f4f0203b238287e8b17d45a0f171e32516841e5f3952bbfa084a5ff2fdf9631cdd51d497e61c3e1897c18fb8829aed60d05b721a57decdd51479d00a6e7d05fbabd94c128b3436deb6287137e69966df2d61e6ca029e10678fe5e8dfcdb5794d9e207f250c8ac95f56dba09b95520daa0277e4638f2dda321a67756cf3b46bdb9937fb92f4daaef5ec904bb027dc66986122fb8f93983b747c96ad53bc6b2f0794c7b4c8bbc48cba478a59cff50558e3ba8c8ed40f9eb025ee999b86784d11bb6afdd427b4e61fd994ce8be3d48a967a2c9058e828b170a67de6cd57fb0ecf9f5225a8364f62acd1ea37da76afb65874bb025393ad000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096d443d85a7e9096454b696015a6fff5f710a4efa8d40f41e283b9f819b9bd7677dbd275ee3e853427a825f81a7f2f266971464e914da8f9a66adaa0c0b4d1b0f5caa02ee0bc73118ff99a88e13f926767c0905566be9796bdf7e3197e5a5fb8311a7889da40d5f60e1b61fe532f436653df9bf75fd5c59d9e6eab35e96b06b971014bd93d18e429778ddf8225394d91c3adea12a9d0a0285d3b9465223c5d01e2ad3cfb4b8dbc6908c988319d096d0484d76a5ac506a0e6e71a15b88f98264db4a923b0bd555182ccb38c9baa905b36539ac73014508156485d7f48cb54bfb1ed7fec5f3adc16695d1242aac11cbfd3d40c1e08e31d92b4bb5bd2ff5ca4f88c88ff209d42e77ec2295001fbebf35a607f07d14a84620d55bf21fc67427db6328bcaaf3b4c9075bf947df0fa158be1be947c723e0130f0223149fda852482356061b8aeb36ab2eb0133a282c114764a58d5a327c68695b2b24eca9e3dda8e71384f17c1b62e619c07c05990628d66102fa0a085299d555b0827a0b2b53244d433c0ae32c103d9ea3116ca5e091f58d9522b84689e257df1bae322eb787795a78529d883e9d6a5ab6485d73f6d8cbae3828c7f7dc8d106da1f97c3b47795d28720000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a17bd61a7a11ab03ca1adf897f7d4ea7f3c14d077b88e912d415ed90c4405775d03ba81c349deab9228eb3a427349bb26f363909ec884017db26380f82f09422c502b82174d7e1f32133b1cd206c14f752330a35a3f96a682daffd756c4476632dd2c80dd4c9324667ad0562661ed5ca307d6e3c9ed0bfe15c0872842824db2857c247c1873bec327717c26bb1dfe7706565326f985f8cec35c0185fd4bb2501500dfff4d7993df1a97030bfc37acaad6a52908963cd834d6b6baf550c36a28ced52cfa25c98c87e637eb9426dbb9c1927917af116709b15afcfc1022d0a970a371a17d92d3904f05fbfccffdb96ef055fe9cfc01e4319338930b2fad9e28e0203f138dcc82571b870d9b9d48523365771b1383f964b23441a9d7d924e782c32f948af8062808621b27d4297b3b05306ac63ef8de05f30fa0cf51ee785626340062a3c76c0e95521f45dcbc227d7180bc5669e1d2a4eae03438ee8760e70da81855c689d99e8e4a83aee164e51553257329a2db236844333c0ca2f045a02aeca6c91a366fdfe348437114aab85e4afd148d53effd8fa0f07da94f813ea9311539d05cae89548506e4529bcb9a06944b4d7281529987f42d15223b4938f68cf3e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac75a3a8c66f42957af1937164daa10f7fc58a359e0b70a24631ef816223638d8b963a27c93faf3e91a3f72b83b2830bfa64f6016f2099666d9293e7cc4914452e126777e891f59b7ced105b1ba7180bfd233f2c66c719b12cd001e1daca257036f987d573a1dc851c97d94a31102f7d075274761135030becf702937705a3b6804bf374b5c3754110e56951572a9acdeef38fcc3516f9f8b5a393aa5ed5b50bec75578564ff1308bdd26f55395b92e9223103a1f4ef61b48bb4d83149515e7723bf5073585c53f1087b6dbc9bd53267e58e7d0bad3831ffd6abc80ad2437ad18a8ca76e605af00801d88f4fa0155131e583261212329cca9f4d2df19bccb3ba9bb5c0c4d123e35857ca394166923fc002defbcfd9a9f1549a5f456b1f397e27fe49be060a6ca7026051f3514d075175d344174bd77409401800aab62f70023901599ed132812f584d50507db76350b2a50c2e235f725a3105c9463db3e93197c680bb879563267e93b2e7712318cca65f3b4a17372cf0616ffd807dc6cf73a5534fb2742eb50f9e86c0aacc4050a94498b374ea303166a9967efce708f15258e0b6658ec2e27bfb32c4eb6052e830c19168fef1cebed1197c3fe92a515b273a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094fa9659eb954913fd5c9ba95c2269dfa71b6baef5c899858a7314303661695b1e46b5e2cdf341f9a22f300988e0790f03ff8405a6800c467082c88af642967bf58be17b173f4d25f7b6b430df442b1eb4aa91927e75142f80cbd74c31910c40c8539b03fd1e61b2198bf205c8973ddd685603f6d269599849823d41ed451c6381dbefd8696ec2cbbdb26ef83b8e8f9d2b98cb1721bde751b6161e5c981a9ded428b7f93a45b8e44b8d7647a5e37b728b0c0057184a35190743db39f3286ee292c8554298bed5021a6f30829203e2f34af5be88cdc01200478debd6d88e3fbed107844c74985ea54dccb7e0ec0f1c73656af7e537bfb7a6ac72048b98ed800a4c0051d8128f3a2e1b590c5a71280fde7d8dc0ddb08b82c1c60b2484f58a777879aceabdf34f2760a8c7e28277cf2d4ecf4eee3433d5f22dd71c45cc00f1086f28b26122248dcddfde40813a947f4710cdae69ddfc983fa87d78eb5e19186518970ad4e546d1439828e05ea42c4c3ae1ea2eb1ade6d7dd7100297f2eb6baec28a0833ef0256eb21c798b50ea211431d53ea64b63d5d4d63ad4ce7c8d9fcb533a466ce4c9cced9fdb1b62ce0e65c828a2f97e731c75bc30c07670f56285ba98f2c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c4e3e788764968da2bf716e01199923b5986b7a6dddd84460ef360ad5eea51c43eb6a92caec57b05d353ab41258fb9edbdb256ea4ec2d40ee410fa6839cc92e3eea54f5f20fe8d49276bcf9390df99d64a076ed0224a648bdd8ed22194fbe02499d9d3af59ce23d57b1285076d04782e36b21b7d73da3f146d2b8ba9c660ff69fc05e94b1d6323c2ac303ee226e9c40305d47e606feb1852a26d98363be2e9f9d76881a53039addb0d103e24f6f7b89088b8b60291a9a89df8866d43f7456ed4e0a52ff9cab7b90f2b5858a95169222028602c4758c1af2e20ad4b4881fd9d66407fbf32684ac509ab7070897669091179707efda8617b3500d51e34e6fd133ae78d0465aa20b1076b8f32c28da227b5ac7827f3e4cdcb7e01399615739ef40abb015d02c17415e9064cfa931e9ad26fe82e06addcaad9b07567effc1f840830407b0cba7128ff8ee2feff96f01544387ebc20424f7f00a5f52c02120e30a5e48149422df816bfa0add613a65aa04f0fb7b357f686d6f1d8df432ccce83ecdc596ea39e6797ccbdc416f032faf229c672175283704f48fc6cc0da32d632e45e4eda90eb34dc80c9bc58920965de7500ea569dd7d458db1017c8c8f34ccacfdd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d5dabb99450a93a13e4fa7518f5eb17be8efe8ef2cb8501834e01ad81446a6601e2def5ad272a3fdf92209f1f7e7ca6c0ce91968fbb66a37354a71dc24c8d59942aefd17050c37ced3c8d77c84fdbdf7d10eb4092c4b7efa7109242f378710c7349522e92c21af636954b77e8d0d8a4502f41bb758b40228b9e8531d83ec3c5661a4f6bfa245cca11e9e6bb3646af645917c6faa52082a827470876e9c1be92bf70b9d255ede0779e97aa4fba8f8eabfab99372ab6f5752f35307ccc174699e523b73e81e434ca08fe110da3cb1549e4317623f8e93517db8cfad73dee2dfc1e88ae2507c9ae27895e1d339c52f4af1798a75a233bea09e4f319efbe9f960792effd1a16b785c24083017feef795645a1b832489e6f2be4a51fb2f4a2037c94abdba0469f9f319d30ab4620d2981dee874fd83ba4fbe19525dbd588aabb030eb5e309141f0e9bb0350829d4064fe874f415cab617bf871a742a7e6b9cfdb0e50be1aad728d8ba6c2ee0326bc12e3af8a7009fa5e1b47bb2a1e1b960fba3726fba1a3f24b64e2f20df981e8d0eeb3fa95cf9be6f5fc976281318909de08d9ecbad56cb24666ebb7caf343d627d935083a4f1f5ead4840ec691ed5421903e295c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063104e1011b25aa4aed863f82be51cd69dc369548cf936af53dcdf41ff6d3fc4f37337f0b9b7e0a13d425d975f4481692996b694ed3d9f0ab14f8ae5f4b83950d599457bd025550b1c67ba3858d8ff93fa02de639b87aa900c29618bff31419ec8875cba33cad1507f332d7cf2923149355c52407dda51c391fbfcca9e61bc048e1257f69874369e8e1254ed762905d4adbc34b4c694d3653d815f5797f2f2e68524cdefc0fccc567f12c346dae94df076d21b243393ec83a6674b95bbc23666aee00f23c10d4280e2fe16f260816aa9d4d3b834af6b0d571efda638a6347ba3cc6881f4fa91c34147ea7be8c698cf064bcdf904072e97e0f40aa2d0c5d3b2276eba223d6d86cb9995537c155fab20d14e45992e14e9af0fcac3b08224c945893ba3ddb2d9d7c2415e48ade5dc8898cde32c98d6927f796a429ba3d48c4ff9644c61c9e38093aef8f14cdebcc62d1f4da37a53a9469c922bcb8e2bc498706b12d8a40dc82c0b76c74c8a6216b981ee98ce469cf634c204f2821900341f8a2e693d68cdf1bc0a3d5b9773b89c6c82fd7c5d59f7ab3e7aeade08047c8308f92726c02b66e21a843c8d0e572dc5903fbbe16791f58db3654b3a26438df5863045f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ceaadd0126bf218b5c18cbd943846669320434ef9de4bce7f1b27a56b3c874f8d6c9531fac26d8f59d4ffbc7e2c0d59ccc5b51a7b71c1b63b655a09cf5da7a2d699cf669c1ef02bdd50028df3f9196b9b417d51c8278a017f4c53103b224013c457eab52c94f0274f7aa8ef6b03899a47d1692f03a1dca48224fd737c68590a0e403692d55ca67cdfeb932c9c09627265251772f9bfc60d0690b338af8498c63b1307e9ae9145020803ff3f5ad872231474d99ddc6f154f1fd8ba41fec8e9c2f6fce759d224a6a6632d6f0e60dde5ff67949cd7512121ec99824d96a7e407066a56020e549e18757f926ca42d1532f4defcc460da8d8fb6eff282c8502018afe0aef75b462d039e5f657df456509ec2413b822c8e99be320f60974f9f018940e4128e72babc2f9e6fbe6a5866697b8eb8fe6b9e17c0ec32d83e0bb44ecacf3efd4b6fac6673b491d5321be64ffca6085868c5d3bb709c876bbe8e8d19fa67349734828126c3d2c30836ccb1d6fd4f51d99914f32f8e9422d60df4744935f6c36db87ba1b7a2369c9b6ef953fed3fb4c67e6f9dd16bb07487649c551995924b0dfc3be9bb57a3438ce065716cb419e8723f89267d2319172d3d1ca90f3b801b4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d16bbc0f3bd621017e2dd7b2be8ff4cc9be6921077340342e1af975a98d817fa0c51ebd5af4f75b1a3cb139d0f80e2a59daebbbe8f7661f32ad4665cb4ba3a626b7cecc38759ac11673fc5924a92c5d07d95329b77a7296507367ef7e52da89062c40209e3fbf81ae0ed82b22ecd922bb61d694545c76db35f0ad698cda3749d8b0b4ae382c9b4f1c4279f2fcc9196bc5431d25080c2a92721cf2a87c507bc10bc734adc4a1440c38dcf80bd7e3647d92c7d4c4a69959e4356a98afaa2d628aac06039f0c0a1b1a9335f48adc24a12be788a597a41a6f53a87fffd0eae41cd6915f3efaa557e6f1d31c27bb67f3d29af357b74e453e41379e1a34d4fd290e759c8127151198bb054c01a505685254795c0b15178038c20aa8a90bf6379add7efbafdba7d70165d0213ba578c76d3357fe5aff85f46d21e16287b195b901c00fc05089b072f99b00363a2a90b4c5ec1324c19d6b98228635b57a0fb8f292894cfe24a79322c387290c5738049a072a52c3b5ebfd8b288c844add62cd3973745313b3ce572e25b90b3d2da6f2878ce507af050c1529a6bb2390c702588bd050ce95604331dd39fc3deb4809cce351ef6ff9cc45985fda6d063dd303d4ba842a700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009226a6f6f801df36b21a26f8f04853bd9cc9541089b9519f539743514de6125a68917b7601591fdeaf89df075cd61a99988db0fc24884071a6b9ef6b130e945ba4782d36c25ffcd2d4bea5ace37e45752678d24fad215332d14458818e28935bdd1054fe04800da66f4bc429582c83753d82846867737e85d35207e0bf8e8882910195e2b5ac11a2e3bf0283aa465e6ee2d683ba7e6112a39db96450a0e42a957d3455978570bf583c8214e7f5c994d9b5a0d189eb23ff0d0feba9ce3cb716fee1602b10c9ec61335fca43f30c94dde21dd9919ab93dd1d694f8cf87065845f5877b09fb6350e91ffff3279a68d5e24cf99099ed9f0ddd402269d3207d4b0bc096bdb647b0c4e07e757e2d89ff22824e7a85653f9ccfd0587c60e9dab8cd71cdd0ef3414225bba23fda764808eb4ac8a84c5534cdd271c7113f5f9aefb30061e7ef05caa33ad1a90fd05b5c8fe3e83f434de6534048e0d08780e7b62c075b332befaf20c56b9cc3144c7a0c4a85614228461833eebaad7d354d0aca479172ad3609150f4c34d9d487349580bf75ea63f993346c7e5cdb8949497a03d642b8c7f2ad11113fbc5c768d93ac8a3aa1b6a864f2d2f6a304af42f14d42f1cfb4b4a4a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017a51f43e94775a9e5784f9cb2fec9c7d14160a7195e64e0d3577909af2da1bd2529bc6a11ecacc61807baa35fbe53f237c50d37b555b9b8ff7a0f7d21dbd60a3d40bab9967648cffbd178aab3b73651ea790ab9585a54bb99e4f62b7b4332720f28f6e5abf4c81cd62424be89a8981b5effae4cc26052e15c580410b5c1a3c4cafabd19a84a5846e040f6cd0cdfb1fa37f180da417f47531ddb6f7e5c981ef74472fea6031f71bb64b9a83223a095c01fa59d0e6118198ff44c50c5a7f1440621a63d0c31836503e1418ad7097fb22d60d219c5358e244d6fd0e7a43190b6c826ade258221648822f8a4772626ccb66f9933b01d4a515f0ec3cbed066dc2ca032fae8c5e5cefdae1f657e317a1faff75a1e6dbf314e560805d4b4bde76379ca17e6ddfc99955440c22a4eb9e7ed459a44a3dbecc812c471c8f80e0dc3e00ec1104ca3500923d810025aac0fd629307b35ad3d69d0ac3735f9d37865c4f4ac0e8858ecf2a539fbe39fb7d14d36353977e6c5d380bf3dedb3ab34edfbc12115f417217c99b67cf0f2f602e8ed47e6e309088432fbb708d61b0a8d76711c4ac3e9ea1cd8876b1cf586c91c56e004d493ea6620bfff145821753b9fd0762f639fe600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b580bf826fff85bf2211f690a9cd857e5f1d371506968432b6c7eee63f61f93783e0f4457551cfb1522911537ec9ae1d83d5d4ba117ca03a318b6286840ac73f241afbd257eb8e03e4f10ac1ca12960cf0498147b4bd00bce215e8b7f88cec7aef3a27db52abf7874fcb6a7a6555ce903d6bfe91e5336133de0de36d12104842f0ecef57f05b471230b42f124d1ec319878fdfbce9b1f470afb511e99dcf2d83b63df00efa0cade22cdd1eb5f8374bbf27a1aec69e2dc0927cb893830f20466135aa771fddd76e6748aa0ddeec6a84f46bf3e0a5a27c44adc454f252cb2e4b2eec7bf9aad64f1b1ff2abf3b423b27ff15888b1df84d6316910ea9913090a97c16fc8a2070ae8332832f1773bd0c9504be94d1d139c04331bb37f654c2139c98e61a9136a9a776ac1d6ba6b2848baea8d67f9355752416dafaecb3e5be2af878c1f7cf186aa128ae787b15dac12ee4af33e114a48a1b9c9a3ae97a38969b46e86fbea6dccedb2854978606deeba6defeb5013b09cbbc4c1ba558f63d570d92ed64f0f3b207cb210fa1ef71e7c63a7d747004cbac5bc4ba08ba670b4b341816d133b9ab68018d7529a977659477de67270c17bd938ecd38b87aa96648b0795f58000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006c5ba60900608c65819094cb2539c1e5c631e6b2c470a2891726be0c3a0da7da6aec22cb07612875b6154013ac2a35b3dc91656e175add025267a1397109515c3802dbd341c37414238b5bdad83f3665c5424627c62852dede15dca2faabb9858fd1228176b5df68a826ddaf6924f78b1dc436756771a3a0309ba25d4161420a207497f046f8fc0e4a3440d9b6151695067c9caed6e38c50a2300de27e2e6027925198e14f9d9e5cd8874210ccf5ad34a88eb5b8b7c6b68d6af91360a3d390e6771e2513b01603d63a2fa026118e193dfa5dcb71ee2fccb0c9a18ec66a14c799c15589423931d8a15839531a037f413d76bf2a87f15948e386c03bcc0b1f151be80c16c3abcc060d422a20a2b2ee27038e0ca78a8094fdcee6ab531418dea8d4bbe72311fff16ed706cc0f068099a88137867868e7ecf9f1980be05486fb90e087f8fa05607dba35a7c531c1d89949e6470c2c39be9d240c2c7bc1e66ae49614a38fcfae4e064208cd43917695ca8b6fe928876afc8ea4400b47b8c87c3ca91316e731cbb4990d2bc8c46c76d483e54baf9ffc3badcd291a06247a56793d166e078a74c2bcf3fec0254d999c22b9262cd63b75703766600bbd0d466cf97b2740000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a80b673eeb9403c4d1a554c807c930c214698ac07c6510460a0c6e06bac3925bcd2d146569162fcdfda4add86fc918bdfbba670beaeb3888d92a94b711fc0da23290a30747a53c30133ec867a773744e58d7862fa0a967713c3743c7c307fb72595805537f23e50338982887105a06b21f94fd51fff4878ac840a6256c8cb6c3606bcb5aea315555c49581d1820eab6b56731c9f7c8ed84417b7772e05940843b575de8463be8a364a5e56af5301b87d61154d4324d0cb2a85ce252a89ac30d2b8bda762a8e8dfcd16b2e119740238a8c9f45b51a1a8ae5aa6a5d4ce8dd6b39bc8d4a388c670d9a830845128f16013511aeed3f6d6b818b8dd28ff85e612923f0919d6be808da08e167c5291da1af23f47b0749a23e3b16f9178710a436f1a9933eab3a89ea668a4b1b2e8202a3cadd4fe84c55d3275479bf7dbd243df7283de38f0980106aab62e6cbb4a33f5bbf0b8d5c27ac5509c01d70e2cfa5dfd8a2e7aba2a84f68aeb259e01a88bd680ef45b0bd58cabe4be295822392f327a9dfcb4bbf7aad5978a2a90de57a76ad5f9a39c2ad0fd98af53b764921b0f9c3cc192491b10ea9beba98cd6c3cd21085897e4ef6ac9c058b8afc7955268331b64e526b7f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090c67f3c267dc7dd7640193bbdece34d02a3fb25af27aaa0f125df1a2b442b7c496a718e2940c4dd39ad8f009c8a80410e2189be893a06a7ac1e8457e865f83b85753426369d1c40ef26f7efe3b31be75ec50d159585f261ddfe5e8b53c2a964e51396d88e56362543c0f45be858bfa4cab41e91516e8b4e489a842c9c1ecd3032584aa16cba0b5c60eea9f9ef02fada0c94fb8994cb16c03ea2f191d7d10ad212cc915b07bde2289723d82a3d68b74065e87d5e1cc929a5e64e1d385250311037b73fb093efeb34e2d7e468545407f5964257df923d3f61384826646fbc4098e03514af87b808e8f52e1dae3cc4bed4b8311dfe310ce203ba68add8d5d23a59c3ca962f67e030a56d78a08500415f85b7299ce6f4ac260d4770939a760454272d09ab008a9f0412952f144e045e0cab78f68b8e3d6a31730bc48e717cee29e10725c1080783fdfff8bada05d6685089af439663415e825e08a5139d4efb22f46f1d1e25acc6dc86718b86be9da40eece00fae719dbaf74404b16754ce2fc4c3786768801b7a08d4dde8aea2e5e4cb672b31c8c5e76a41acd0245927431dea0581f17707621eb6504981eb0cf5d5158e593b71f81cdab97e9f3ba593f2d98e13000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017932f5860d39928fc7e7c20fd90f8be10602905d2c1c240f529d5e662d2ebc86b11b3317275a4ca3c4b909a9c3f8e5be8949d113c273b965db4f41fbc8ea67cd9dbc8a9ffa645ef9374c36737f9a91e0401dc09287975e134c89168c9b8311fc63e1f2364eb741d8a541f8ef243cb5321f92651213b663f214b1f0054f45f6c44243d10d7277dca9ebeabdfa1983d8dd32c52e69a477955b4f6fd494d46f5727e0e0a0cce63c28196d34f89318efedd7373d0f9f8a02c0d84117a34cd07455e9909c5ec325facbb49e4dd2cc54d16e5c18f46f96d7d83230fe85fe638f4bc127059aa8b0e8ee56e4594a4bb42c97d77a6dddb53efee614063233d1768ce305814d066ab6459c8baecf1fa5bc1a6b2b5d274ebd95eda50e0c21892c8a12ca5ec17a70ebe6bcf14fc32671493d5ef3a8797ae733071ba03896b153b4513700852621ba22c37df889a0fc613d211dda7cc8df27eb3f5cb458e027d7152c55d6b8d0a138f767b25e93faf98fc5e527ec19d2485dbe318bf9f4d2a5f417c4e048b2195f4bdf7e52f26e6ab41796d6b0a3c54462a8a912de2c7a6c004ecdc4c4d4e950bb4032af5d3c759e890ea4d254f56d950d18c70843c47512c1338fd1802777b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088a9c8975c5480859ab3f5020b0260b4884ce76ea0d690a2ade62ad869e01a23a40acd2d64b354fc535b2a81ce22973e84f68c59af34d64b74f566229611cca3c7523f6d199e8a3e52e07613b79a11a051823d7db6571d8cb6795d0c36fa2e174532fb127b20bb26505c92693a528463985331b29d089dfb2fc9a663805eb164cad8f298167f5cad2c1fdd07f3b1046f47429d2cb9fe593e9335e29e367a6d6ace2df31d1c048e717095197bf3521d51ba9968404c0baffe0e28d808d56beb3332ca0b47fbd433ee352670ddec5072abaeb9685f42eac19b267e7922d757436da4ab8f99feacd8f3f32c66dd883130db50d477c5ea8fb169a7044f9d5938d4ca043a1f66f4885f6fde5a6066a3ab4221f64d7a3f0b823c190fd0652f9974e1ea9fec6c751bd5e19e9e22e511bd198cc27d0ff76a70da03d7fd5c957b30b0eca57de776969f66817a80495ae732c0b5daa5e3f957edd017def9bde12c2b421b126355b60983c36b13d85faeea9841108063413c9b73395f8dd7df82207613eb3bf5afca8a2a12771334ea855a13fe052c336a6218cd71c0f238ab62c5dc025ed978f34cfd30e5d0854ab98cadcde3b33dbeb6436553868301cf8ce1b3d4f021680000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860d0c6624b83e5778727d88918a94a4f9739061117a8e3f9b9af6ba85628fe200bb558af8c148b01a055085ed8fa2f23b7edb70a383c3e52321978aa12b302133f556d7cee9c0408e9c3dc6ef05c6b033b94bd11a3b4785cd8ee4d178c552c752de1708b10d717480c71244113e1cf870e8314e83d9d15fac6468f7988e1050c5fc974aa3216334dec942295e71b2b6b9071d7c59370f8940e8002eafd65bffddef75ad7dbb2bf40a397693e1e3b7492cf83268294c996312612043a13393a6163bff57bc4e00811b93e9a7823b599ce5fb0515f25b4a8dcd64096f751599a1aa4964ae3b9e1d3033535843b2443a94620f7991ac48248485dd1a7a7986f1b43c97d75aac6cd65c6addf5183d16ee1ab5a0df63437db196b6ed6ce7282a4b45a5c07a474b6b6bf1f6f9a265ff3db8f2ea24b97b0c6b062240f4b05bdcbc5928c18c0b5b7c2ba6543539449293a730b236e3fad600e7e9d8ef764507e6a5b24739c3f77afb300c73e578ed3333cdcd3876bf123d7a960dc8e6cbcdc42fe7a0adf80d6f698e2573cc0ae494f58eaf931e48ecfa327d80d6c52ee7a1a22a08e75f04cd0c7f9dc0e29f88614259f0ff476337fcedf57a25199684c7f1c76a0d1c9000000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484020290d846fbe9d5eaedac79e5df0cbdd2720abb0fd85371eefc3d0331f8d1f2814258c8e073b971790a7dcb9ff81989cf9e4a9d4f26722393b4e6bdd4cb089112d027272954a6cefaa790b73e5f427584d614deab5a53de8f753117f42024128253c5f6386679313b86ada57d2692e1e39c12c1c22d6f47138c872d3d6fb4f291822b5bdc21ab00407ffc86812c7c22f5c28d7ca02b743100b497dc0e51164ed1ba14059c95f46d6cb1e449503adafced781bdb6450b9dc865d96209286ebfb4092dabb3ff0d153dfbf5e00bc8a7afe044fd89e1e91380ccbd1149ec1bbe412719a845a49c8a1443f80810c19ca79a3f7a3324907ee00016aa2ac059d384e04b098914ffce72b1eda432115bf017365fb41483b64ab6f418112110ebfaa06cdb0f8575fe3c55dab9c466767f5c745f29450a3827666fbb2c1376d45ef5659369233353e1586bdd4aa3f8a03c8be97701573fd8555bd44622cc5a09fbd43936a724fdf209a5b9eff4b157e735065fbad284dd72b74e7312ec74fa3ba6e4de479118df96856cb0e6631447433d63921f1071fb7e9b3444c36606b39e6acf4cd2fc17e815f99c3f8ff143bb7ae4b9a5a5a28ac62ce3e8b5fcb731dc7c2ea2844f7f258d73bb1548f6d0613c99787eab4e08f76691ad3b9eea65286e156be2e46f4f003152b162059ef2ec2074d9c1b8f7e6715f16e52b11c200c88c2319475a964b0658d04035c2d0118d18f545df1dad156e9b7111560e24838e40548f84fc84551d0d15e77d5252706aff4d7c2bd12ee10227d8ad58e3fadf9a4cdc7be77b5c650bcb31e050b4b34fa81257ce00af71faf89e8ee6a518f27d921b82c0f8ad673926e1e0b17632d78c41dc621f127923901ba476e28ac9904d66c323e5e8034ed519a0c24217c4b8f2e2c5d9277d6d47c8d8f4beea84a257fe2fee8adb8cd6d76d147f0ed71e27b815545e8fafff7125ebfea262f8f0a232f034d80822f148167b0ff74fc2cd7f30bde996266a5ab300d065e7133778c21307a45dc9b78d50794b086b95ced6fd12a63f2aa4bc998fa23488d0c3a716ca1d17ccb35b575ad480d30041eb64ddf1193bafa0e67994b417ccc48a62dce4609d9b3cf5d0ea896f3c4410b4b8cea1d58f3180b7bac4ff7de7ef26c54719470ad200aab250156877f474109f076e25f3bbd4ee7f8de9b230bbb50f34a0e4d21e5d54b3b9f980a75c09c51109e181a9a959a167b990525650a1522a716b0df697cd927204eeaa0b68c56d01a06887849c52ce7bc7dcfaecd4d99c45f3fb1ef8b5b44a912c63fb0cfe20380f0feb7ef79c2b6a5874365e2109acf1d379a82e87af43febd7ee1079449abc60ba245a1be729c7290fd3a27a995724d4285fe032c2696c075cdf64449cc66b1177340cf4efd0a31da35574caba43e420f482949af69a87464630c29edc2282c06f56adcffa75a91fe65bd1bd73f3ba819643a1a6d267de771d960e30a6a0e222dfd16075b441635705c4b4e8e999d832fbd5a03873768684dc95ca48913b317217beaa7c020b1fdda70ef1127a50132f24c28c6b0e55fb1c63db8470be01a092184ab11f96badd54c3a6eab5392bfc5ef25add2d6af7d32dbd3312e305fa53522d373f7c687966901edacad46489eeec13fb8f539d0207d7eb4c01fd2061ae0198c2243b94743e5efe102a1c1f0ac8893e5ccd59705fa0bed4039ae5bb00b5323a9d6e6d2d586bb114aad11f48170d60d61a8451656e5ef1b104eaaa842c40000733109a52de41501749b4ff80d2d7c36d7b4fc3512e74f5adc6f7ab21caa8b2d742a35ad220550c720a08c1846847049318f71e0b9055caab58118fe02e1af1a7979359d1830196f1ba8cf4777b5ce48dfb460d7e404e25990694823e066e527e2940b93e129b21aaefaee1dabee105768c60e09090bec602ab65c25c8646a0b892b7f63116eec6d7abbdd5e0d18534ccfbb42ba7e6aaa236349341d282f6b13da397c190c098903739fef1ac65f25dca6e759180a88f27df29cccb91539c017000dd3211e827c91879e4ef022a4a5926a4109d16f9bff63e42e57665083ab06fc23a6e195fe1a1cc45ff77c5dfe644eb4604cfe6df85b9a8c4d939bdcd283154143bb0883bba919e70e9becf83c5ee7d5f72490e269ac22f9aa9286f19a75026bc9fb6a8e12d7faf858fcecc3a46cf37869a3e22f30dab2166e11f95164ea297fe501b50ce57807077631086d6e2a4547e0fd81ac03fd97ca0ee1acbedb9f0b73487d9e7ce5ca2c898bdccd7b2a080df4ef57ea3bc707ba071db6238714c70eff68836ca76ff7d762742f16ac3c9924b82f42a860924fa2efa6f012603a3f2b34673d962c59f65efe4c9c128d1f4dae34886311072265caf0b1cf9ffd4d7d18a9711010450398befeda46daad9eb5e4ab974ca9bfd882e7622c7c1b4ed63602c86644b7954d2897a38a1862447fd2bd2dc1083adb1c6c06e5988d38b266282f1adf139bc4892739055bfe0e5ee985a6121d20ba06bc51b9dd14f71c5c956d0ccff215c112e959c5f6c3bb147eaa566b11d5b87969eaac5ece789189b94985217a8069b21def05344482b8c03ae2fcd0a3b558e651501d0fc7ffa7eddef70c20ab3d23c0c2e60a54110ca871c8206bd515202b9c0db85a542e939f5b4a9593041282ed4def270b6bdf651a277f58d9f7c77f734f37a8a30bb1178fa7021f0d1780b6368df2bd9b0b2aa8efd01285d1c0e7995f844e3d82df1eb185f36ff8db2950c37f127d41cc620bda6e23f37ae93d6fcb3ce1295fdeb9ecf44112060e650e39f9e5f98ae43fad34e890ec132981d73e27dc37c8758a199d87b408a9055d20e3a8997e2d8216e0175735ba37ef3a182165dc164748c51fd5c2b386c5a1eb40257c800de30f1b182122c78c0e2b121ab46faeca4be1864d9a4383ed51690628099083708943d7ec880d6448446d71413e8631455fb9d416326d816da6f1b6fc2f7e4efc50790e8aebcd7ec6c2c5d3fb56d052852828860c01517494ac27ebab0dda80f4036aa9e4be46ff1a198c3d96301eec8c441ac7514f7ab72a27f9b396094066a56d96d6daef1b4a3d08577ef7d864aea19a19db7b4687622cbb4748b212e8a274ec3fd7300f9728eb1536b2786bdcf7f505c00243e2e620bc7dcb2d062d93c9f594e6f89b64623ec718c226ff0055e0ee4c28d8810c05e55f33b601bb124d74bdfe2050c251e6529a445d1ac46479e465e13f79fa2b1fd11cef46c12701c459ba02c7b9d80a1a72db8a27e73169459e6329704ff704332d0cde5c12a61678881665e58e4fb850029d3ecfbdf6f3bb394f34482f857c9602bf708f270124d2481f8534397e392d9b8c7d44891505bb8cea5b4bc6afb5ad95d34e51356d2b887770d381703e5a150123c0b4a0f9ac79a0d09177dc0a543febd5098c8bbd066ccc17971e177ab143f98f78d1f143a3075778d7e26997c33b6d7d227845961ddcacb62b6c1daedfa9cdd1f7736039298240e767cd18c633a9a794da26035d19b29cc37ba46dfed8d5b9f47f4552004778d33f1d13bb214d24ed8184446a0107614a40ee4574958585b30f426ba1ae1d936e4b54da492b0f66f5fa8771438b02b84e28d40755c1ef48a900e888696801caf3edc97462a74d304fbc645c8aef1264cdc12e7dd7f74652d921601ca9a23b5c39c7848f78cba928ea91832538d9284cf7112916ed108fb369fbf3e384950d0a2fddc12f7ff269d67a27c001dba40360608233d3d1521606642a5b70b739e5e7e604079ca48967575341b615e21e102176176e5bdf29eac5856fce308cc01f5aa7c44508518b255a5651446098fb10493aff4142405e031b8d4a14413750322930abe19e1cb37cff8aca16d7197a2cc03329f4c822dd788dced960d86cbf5438c81b2294ba54f5daf3ac44bb09f20d4720b10fe92d8e9a9cefeb7a30928337ad95725a7b1a2ee740a7cff0ffba8e1bdbd3a734e3d85b8c619487dd41f585ee1590f1e7463f265139c0b7f7acfd1d0402d62e8380c2097a749605fd7a31da00b6142e0f3cfd706b5d95b18cf24a482ca74efc2946a22bf1875d6a89aa450607b5cf99b1e8b1b25f2ffa129bd5e3211d217ac3fe798d01630c88930ce42f6498fbf31416b4bf72a190d7b39c4541221f1ddbd40b812ce524b684142b32b408212b6ea27050cc1fa08c396ed116f3f10bda3844f4a61ad78ce13815650f1687fa44be61d0b925b3759734e1f213f8891e3e18445ba31293e8f1d17e0bfc238cddad543f149a5dbae9fe14fd06f590be27e78e9c2770294cdc207be66ca07f11ef558c2149c9e2c4aabf218c22842939266bec660f5d23f9eab1a1453356c6c4da2337ad16b45eee36fcc5773089ad212219001d89f071adb17d1897832e6acfe6b51ad9cfc6a1f418e9bfd77c06fd34248b7113574fa207873129808b4507e2c43088a9049c706d4b6655c8cb5f853a078c6bfd457a97f2118f987fa8b692667acba2340f469cc8f07ddfe4feeb12a20d348b894f6ac52cca477bca10fddb8f0859301b42d21da80adc3f41f7e27e7a0a08f00dcc9ab5f2a683b22d70f88b34b72a4ca6da733acf2c8e7d96705a6ce71087192166fa5d2d6b485bddf1becf2a7f4fe515272a668d746f2cd1366c3d8b093ee975e1d5885527d5945eb96562edb97f9588d78f71e072edb2e3e1640e201a5a81a93b0dec37f719d3d4241d091649e7795dfc610ad9ccb87f9572ba01cd0894c2c14fc719faca1831e9af73826d201fc2f275b2c224651266092f65feff16865fc416476f1240484e5f0d7a84e3db169dff81a06ae3742b143585fa1d302c2858cd568ba61292f210e1cd1cd5b1f28c64b10395fc41a506bbe829f305de006ffcca12190d917b65c8e46004ac547a34c5b265483cc7c46e2a49b0c47d8820efd6b514701124cacc88090000de50d281c2d6d45914842d3a611a5d7e03321868e1709ca1c0be51a64a20d926ec0e5d39eba3827ddf82e501b947f0faedfd01cb986567fb0d7c491e68dd277c4411bde703c85536413b9e577df4ccb278691e1c501b1f82a07bba5b8f28744c00ae9397b92bfc72ce002c5916d8d77758720d7d9fcf394339f7670a7714e5c6adbd38d69bd4f7199f244917cf5a50b0aadc2c7928d9fdf4a7432d86358ec88197bee748d9b9ef9ec5b4c3ab7cc1834efa1e035225a7832bb32b2d3a7cdb103ff868c6de8e9437b5e9b5ebadc7535c7d3ffb101bae066a36b3cc97d44de9c5fecbdf8cd3e97dfbbd5ffc4aefce3510e4ff8020842b1239ace26609d5366557b853a4ec8c42ee952f0e70112bbf3aee503761202c1afcc61e64519ed87e9198c55f6df07c309bbc7e3f16ef2542ffacc9958c2bf744faa8a8ba80209105826f8e17d5622b7e6f02ef626c0bcb4fd74bed37851d1ea1aec50ecfa556bb2179b778fca965c6eda135079146bc78253fc231091d04713544aa4a43aeab2e5b2375cb03364dcb5e3bca53a5053d2aebfd77afa35c2e1dee91ae013a4ebe5da54f75cbbeadea850c6b1b6a80b3fdb3c48085b77f480cec08f73be23fc75421ccb63539b1e37197b8b57ec7f1ddc63ef113b9c2aaf90b5996e653f4b863c8c7acee3e4150b623d439f627286424381ac2de4a1d56c60a5c83f29e9b70e01d737c5993e18f3a21be3cfd5458353abd522b1b5b45de2c21049784c12433110727d6aba3811b4a18cb2dd9cbd9d62f6e915ce637f4da881d302a9d66a0e2d39fa0f3c66507e8853bda589c9def8d2ba13d34b518175209003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000057118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000570d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000570a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000570b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000005729a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000057141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000005725e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000005712978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000572daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000057189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000571159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000005705ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000005705c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000005714d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000005703db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000572ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000571213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000571ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000005714fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000572b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000057305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000057280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000057223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000005717a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000005708858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000572618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000570f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000570e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000057172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000570b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000005705bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000057137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000572e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000572297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000572608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000005718373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000570422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000057204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000570afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000571998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000005728d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000571da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000005721d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000570ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000570e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000057107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000572f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000005709726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000005724f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000005703c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000571fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000057205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000005725110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000057283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000005721cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000057094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000570c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000571f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000572421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000571fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000571bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000057304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000057000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fcbc28385bf7f473905b30ced911820065023aabcae9505fb6ae9d2c8bd9149530ca531c71ecb6dea414872e2db97a108bb2ba3d408d389e1703e2eedd5a4919a5aad203b44a5055b264b8a3271dd3c6b3147c2638093ea568ad6da542cae491637527cc28f79342227bf40d20d2807d6259580468e0a0a322a9b3ce5a2a865fe7158285d510c1f98fbbff8f240849c21de3f2b3b7c666c6067a0ea4c7f9400a1e30ab647589b6578143d951f2a7453d80902f2f54b9f6b02709a766397142b87f1f2b57028ed69c43a69795bdf9235186632e7d1f44c7ff2ee65e7391aa08fff1a69073b9c04101165dcf04f106dcbac4eeb880a5327756acb2676b18a80e4e54deebfa525e5c91c339bfe7d87f440158bb1d2c8d47e683812e8d8170c07b5f8994ce240e6c222f84e45bd19a7270ce7bcf0aab75ed611a4e448638c90b42047f84495038883548c043348ed65a918053c05cd5463b8d9e79e9d7dbb31cd0cca8164faad0a7878de330614972a9cb601de92b3875e9216514265d6aefbbd581e258b110a9a5898e370eff6bba3860429ed9278f8e2e1401db2905a444ec80252fddfe3683c7316ed9b724b44aa65c865e63bee2b901e230be47bd027adc42a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008846d07e2b1510ec0e10a6b70f5d75ff43d3f973f5d733da304857cbc675edf24b4381ae600aef828458fa989bf1fc543cd72c1277c2d56c0acb8f54c26ed450aef53c3983e9b21f13cde07011b94c062c5d88f4f34b208cb5fdddf68faef1399e5a1a0fbe97038632793817afb3bb02352e7d8031ac5b9c7aaef3341632ef29207c427492fc1ebb4ec2ad2efb2e916a1fe6b893ccfb4cb1cf881a3ec18b7f3144b61b1109c0df4baa81380fab02e8c8482860dffac471963c3865721735925fe5bb503e9df476af7c2149c186941c9547326f7809b818671da9d8e39716bf405a5fda5f4083a8825162fc620a9a690defef7a62cf05f827928a8c50bb566b9ddcf35ade2fc32301283b6afc1df93c2ffc7832b003a2472ebe6fa1b04bdf2b8a9cdf2a417669027540f4e384a1e8b956247291cb3e86a05bc921bd30cec2c467202f6962ce9923b86d06914c8bc2b62a3eb2b317925a4b4387fa94851159d6458db200bab4d2989784b9ed302ad577364d98f1b50fe4fe288b55c6a71e10ee84b6906ee6c9524055594892b6835d75041710d2568a0d09b57c9306c744c4166971dfdd89edb40926598e75f4c7230244f21042d2b131fd5b04fd2a4c5da9cd790000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000185f96d2edc810df2ba2b66a414b8f3cc3a5daca43a224a73f2e0229c77a2b0e264e9bcfd4e227bba7391b4e8f6034aa14ee91cb9c51d0b576c712af1098954b9bef0d1f812d2ecba229bde7de7087744bb4d73445f96910f15daceac837b0cc427ea84778c5c4e938196885c553a0bab9078df098b25ad748f50ef36331f96ec4ae6cf25a9b875736d7738a4aebb918de1ce8ccb7ba4497f5ea130b43c37e6b385cd1e52da602212a3beac5e93a835281ce7fd99ddf8fea0800e532e89f75a780162fdffc1f9a27b8ad0cb5db6f12cc5bb7d0de18dbdcd547b6f9ca46226946763804db64ef03699c8803eda72258c441025276cbbf96617aeb611dc7c9fb9875ae8e736a7ac2be9aa3e2f0a70fff30633c6bd62b399fdcfd53ca492949c69936982c70e5e279557c5759d04e136e540cd3e6a903e7995a0b2ee345b06ccf600c49b7f64585dff88459f44d3ea4f9c5abb115442f06a4224bd18a78ddeecdaede1b98571e5db868adde5cf33428eb44780014e977552672dfca242684f5c740fd5b7686c8809595ea5c35a419a36150563e2a90c67664ce1109f08878298b890394bc91f7dd5d43b0544a68d016cdf594b733b24f22bebeef8d9caaef921db7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094eeaf21bb3bdbc9919db62276a70136d5659780f7ac166798780965feed4c4801fdc6d54a217a91169cdaf9edd74c5c2ef6172e742cbe54fe5b026e2e1fb9709d7c2f23e32121b03a111723299f805429d4b18395ebf7810f96956bfefb739cc329fc7a6c654a43d54a5cc89010e502c3912d75a79a6720cf42327db22dbf2ec322d8fec179892f0cad230d0f2cbff89c806a2c2b9d5d82938d355c924fb6f310e926462efffec99f4d0472d0e3cf990793d2437caf94c187d621dd27e5687cbb8e7cbe567a59f82f51c2bdb76779b15f84bde9a852fca9dbc7de6b14f4929ce06a681b7413c6724e6aa84cf9ac796e9c4bf7e13d6452fc6942843141262b8a91dd20ef2cb523d62c321355013af5b29411ca0b128b2b7a301771fb1f13ad9ce646e68563c684fe363aa730a54e1b944c75e03940470321357cfe6c90661a5d7868139abdd137b2e1336d3d47fdef250b79bf04e6865d369f117f34002a0aecb7f72e6c23e999136c0d6fcd6347281ce1a69b9b3aa2ae19429f50a00dd18da795b0101f9f6f08669efd81e38cdcdffb3caa4c9afbe43435dac3c7aa3cb72ad9b5bc3b18707905b9c892a84129ee3d9e63861d95f463c0cdf590e249cfc630c2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084ab933bdcf81eae449b8b288c6fc5f22242e5abaffb6f133ec9463c35935d9578bfabf9bef7c746824d5e0033aeff77cb91902e7081e1899dd1c592c8ca37e28632e7dce3cfdb0e3d2c0773894365b7e8c2e615894f8d6483e9166c4de7b7ed4925605f303ea7ebe6b27cb34666ad9730a8670a6f1d51318cfb4ab71d75c84f8fd1fae366593c96184ee90230174e0cea9249c94a7601a36cd5d9256f63605bb932041e59752865424ab1d4c12bd06c9ea88949ca393cff44b71fcc244a6b5a938d4ca7ae9763b69fecee7dba3a1843ac8c46fba2421146de76a1b5e02b0b6233a4b2db73d23c4fcaffbd05cc7287284f2142d8c3e28ed3469a743fdc1aaea56a6f63305d9d9cbeb9001ded2e1624b452fca27dcc13f27668f375550eea47d67c94a5a827c4aebbc5b080778bf63a277f6735199b0022f48130f4cf7ebd4749616c5726aed7d1f12dfb355398ea07f91e8fe9d71c33a076db2e30fe304bf056874128cef59e2c2d37b67704a5e5391f59ae58b9701b5a8e7a63db3ae756b85014fe6bb369ede2d7095afb7676d4d435b5f8cad3271f49c144c591fb7f021146f22ab8f90ccabdc0e4a5bb096107b66cf5e73b84b9351be62eff94797edfa3840000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ada0b5aeaeccabb4d0981f91a8febc538e4d195484cc93027bd22fe0ee4375f54bcea036c61fd6734d7753f4180ec14de97e21a0ba5659ef03cbe4047744e2e8b349064f4bf1b5ae4e6d2ba3692c359ad510a365d268c7f5fae5ac36a7526fed3dd0bc53aab7d1072e4304a6fd9b0b565dcde79411dff92d152ba6fd001351d0418a9acad017923ccdaea074226781daa8183fc169f16bcaf7d78298136350a9876e34bffdb1c3b78880c998bc35736a042d618faa2a393e5ea34c5357c46d94dff487b0f3bd1321379d1a688060a0f96df2998ef2355278a8b7524bfb2df444962b87eaf0dce3641ffe1b6b30d1031d750f2cd2b91963de891844e3a18e6abf7c7245621fda4dc7caf0add4d9931f5dc726caa130bfed51a08d1eebc8bc94c54a31adee818d5bac089890535a60562ce8dee5cfbce626fcee0e576f13b6e44c51b5eac4322d0e16bf9c0df1fdbc60028f49015f15e663a9a069ca8ac05eab9cfa40c9688f1dae397f68937bf30bf8a0c771261bad01507a86abf3ef0dc13a251069e43292c77f51c36d09c2649c6986ab83054c4d149434536618bc16059984670b81ced75590621ee9a08e34d1676d68fb3053947f183d3f62e221b7e754bb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000305e1bde91d9666b3d11c19f2084ee305b2b2348dd27f63a72fdff94e57469d994c007431c17332d2d2b6a42be1d1c6c939777c621c6492e3656308b087fbc6bb5a5c55460c6c7c9b659fb2d1f2c5fd859a4eee47626c69a9dd2922a2b85ac2e17e9a855271905d92a31c4f2b3baffd877ec39b25b0d2e2d6852767363f26a943ed70cc32a42a84cb4c555afadc551b55e831454bcd4e07622e1e5d55895fc374f35359b6285ea494b9df8d66353ea810295165e4f7763f4cc633ca4de10e833a39a221c57e9a292df094028985b8ce6e7d6d7893a98a0e7046877a738280e30ea433128aca721c97a2ed686726e84de5877bab3f8df843cb6c069f7f69823e681f5acd5e2e5d2a5b0515e5e60540cac381a4cc2141ab13850ea33c13657ecd82cfcc30b14a9c775a16e4a5a4d43dca821ec63e6087c446f78df15859727cdcd31399b09efbef9ff027fd91830a1ad5f9c76d33e062e1a635ff60ab381a479a712b3138e56840d5fe3861f6ca72d0005fa5343d425ebbe28205e18fdb108e90c77c2bacc7fe9ae74cd5d488891229efed8d1e9f9431cc18a846924308e80da5e92ababfb20f88b3db38499199839e4a14f39d009447b4f49f86472b6f85a229e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091cc64d7e06ff04f26553f5ea00e5fb7f70defaba2747332c5313f323e0d866e3519ee533b21235dba45e821e53b2c1de7166668c79280d0f80d0ffa1e71520edff7134e4b44d15fb904b042fa896466be464874519fed2a62021a1c115a2264e3cf8cec45dc3b297c49fc146ba22458da04bb82aee87fcb591944d7ca4e4269f1001c23512d2c85fe73b8fd15cbcce87fc10e15c27d0717673c2e4a5c98c3268a0a5043a98b8a988429e5c3fc52cf02fc6dac7ccc1a8fb98105f75cb996297ce0049a5ba838643c9f97b532b5433d878ecc557ae7b8373e6c9374d0a3c95849269c087c0355f7bb7052f9e9746e77726a07a0d09a10913ae385d4a7eb00b9f9fa45287ee7b4c827de648c08c5bfc72298dd758fffd46ba502d2da174cdfc2d7f7526353f0a6793e92483a4b9ef7da9e34c1a452f85c5bbb703169a36fa70cee9dee19d6cccb41b26478576a37a65be56aeb59b8d3987dcee98a376aff5a342f30652dd5e44790301ab2150386e254def06b91fd01ebcaa9d1e65490d85afcf215f1f25cfbae8d5b23f00ebb216ff017410a2e76c1fafab5b3a6b4476ec9a849807f35ccce0fe4850b814f9bffc91e46595f83cbf9e468093e48c163363fb79a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000daa3491f060771ccea7cf82d14ca39d4839e7ba87bf6bd8937e20c854cafff16ce23d578e923a92f7b7981bebd017cfd7c40df14401f28a0835c7e824b9e1e0ce8803e5a021220dc5633502be8dfb035e4191b8b3afa96eb79e0672a005d838941d17677fd2678955de5dbea0fd447b2588f8e9045a60535126da0d3fafc1ed6ca4772164075c49ab4c697f377f35d4616e6085edc93a85316c01d67a40296d7a46b775c1b5461416f0be929d1bc8c9545125178fc12de489860455e1714bcf58748360080e9926128746a2a95ed20c50de2b8e0da654662b3cf71532bbf31054530b9eb0bd402181dca7909b8450f0ee7cdef53c043001038e10eec223969bac723627913ab358f8cd5b696b9b8d3d42a0659d2b1afc366ce08aebb410628ce0d26bdc36db5358bf26f4516871a2465aa6d5df13b17fc719289ceb412e75c975b64a938f4dda27951e49b61f7484cabf1589bb522464a0234c0b0d30f1bbe9a270176420f4a3447d94ade8c6e1c903c73101fc525ac4527040e54e3b71a20d6300a993f89870d8ea0fd99403fca4751ceaa4ab10ca074296e59b177e632b39fcfa6d3706e6a6031481c6d33299fbbcf2e389969ccb4afd90b0d00d7b2f70a50000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142716835d66bcc2e1a331dd1b5fcf3948eafd83a32e7020aa83d1913b9b3cc2a6754f5c6f98e29375d6ab584791feafa8db05bfbad7360f3dadc386504492211623efe9c0ed5e03acaa4228d7521bf0c57335bd0fbdc3265af1b15ea850e80547936a67c54841241a9493c42a6cdd52eb4d13e438f2aad55306bd8be9cf857c31ebcd0c24c617548d72ad635bc1b68d615f5f17e1bff71c25da1c76baa7dfb708977b53d38f79baf1f4616fd3d6093728613e8b5212a995ee997c9d7a0546264f6528495ed98c7c8029d5550ac6b280cc6c670f9315b4c651813660ce42ae8181ad4fb7a4a56a90301c00d509ade139349d56c4fbbbb3a869d69d7c972b63e2687d8541daa0265bf5e74568f9c30418f38dcd59add837f959957cb84ded1fc1e5dcb9f1674aa3358cdd774d0898ac79fef12eebe9d1e88ba7c3a8c60fb6a5f6632330ed62cfddcc3c829c8354214f0c62d7a282ca70da7aadc5afce4c0b2bab2700a9fea024572a6ed51521edacaef81a4943cd983d6a6efaea4cb35a43209442212d1235e1511daa6e67c6b120925cb41e25aa6f038142477271a80eb33cc93e373f115692b275fed219adbf3bf589d353f4d7c1f1841fe9e564f174b500490000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051462aa65cd6e59ebca8c96ee3b78dc1a1d505712d4da236e6f135f6227ffdc82bd279637fe922e57827ee9966628eab3ec09763944c17573109d405fcb96cafc02d115d4110b5c596cb3b639ff3913a9d0f9521e70ddfc39c26976b8b540aac8d9ed5b7fabd649b885a081ef2d615b7c0f832741807dffd93985f0a5f70aba9a06a7fd6ed905b894dccdc15b33237a8bd47334ad7bf2c8e432fbb53b644be7735c40785764bd01f7874a6bb032476065a7f544d919cfda5c6567c44d1915acc911b7163188b7e6f9810645d8c68dd139a6b0174d5a0f5edc8f64633bb81e64e13251768bbab0c0263aa1ee03e874f75b3001a73916c1a026653c6c43b3e6e7476084ea027d43e96166619f8a7b95640866b7794dc4f0ffdd28299b4fd4aa2e7d8300b15f9dbf776311845f35c357a05aabd571f157c995e90528edfe23978cd7f16b151354f933b8159a0afcb08c6e6f349eb1c114d0cbd1b1b1814ff13de84933ca613f5be7a4c3312edf3841657aca5a7785129613701a09780967e50cfb97fcdcb94f806946785183c2bf33714046f56e54af178d306c42fe8f0979b49dc12277311377ee6b18c3f26ee38c1317924adca163f034797e3e9e5fb68721a10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a13217bbe102da9232231ab9669962166805b5f7343f891ed946a4f51c2b9d33bcc8507f9f93274a260cfe2591aa72fe4834a3aefbcd4190b59495fdc4a54076f412c5570b204e63b6b80739b26ab807160575c1220a2f9cb50a24d26c18032a7248a0bfd691a804ce77a87d6d407b7d471185c67946937bce7b831f3e48f7c6a14cb1e2b41e80f3c6235ac19d79eeab5e6221d1c6eed4e611e73bce6731e0106340d557f90962e28628f8617963a2106a9d806d0e39b1fd9ce5d8dd33dbc22061b71ca38bcb4d6c20fed55ee775604feea7558c764829760d2a813c6c68d8b8dfc707bcb2c507dba2818455f6f8647b12eef1cadfccd345f70508faabb361db434246577948439f63735cf6d0145ed9ec3815e24e62a62e2c2f58c4a327d77b05f38eb4fe61f7e42147bdcf3d3dbc05b8d91f448ec8299be19e62593f42536efa46f3add057a6bf93b935150e9b95441866084fed4194683f376a41018b73c73769e1bf2d8216d2cb1516a2993e1a6a207b51ab2f2dde5d7a2a4a18167ef6352abb855e2c9ebb9c85ee59c049680262c23b24249bd1a2488e6ea04b03bc570d8256105d44cdb3e19380d03d4ca2055b8d297cefca853b6dd7319cf74c1a9cf20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a229750f386a4d4ab211daf585e8f11aabf0c8299dc3d785e57e6d3f6eb1a0ba6e931a7edba487195a1e49a11e27e994a9e0b017f0b5ff055c0fcc62306ba19f748d01e2c4adfb551c7713dd6c34d01c03b3e409e179d9fe3f45e3317408014237c62b1b89c294c09e8e1d036a865d45e540dad58d0110df0cee267b4857a313399be1ce302aaabb1b43f9c32f57890eaf70bc39d0a82388de08a67769fce428e831c7ae709df61820c35f3e136dce135520562c9007b28df4258250772d9584995e57bc3d067547aa841204a2727c6466479bcdedb14c3cfe7150182b14e5e0f2dd131d11d720ae24e085a6beb3a451694f24cede0fe7f359f127aff78240ecea6bd4a5682f5faf54124a37e018b69894fd953a719a7963fbb6fe1cf664fcbbb51085e963edcfe2ac8a1c308144e56e8e430dcec0ae749f60ff5200f8548bc508b9c814693141a8becdbf0ea21a3ababa455f730f8657e5db92e7c3f97aa51d18234c0d6c178bc5d2ae94361c7a53b13fa493d83dba74295233672f6c0b80b0bf5fdf9c0a5717df90acdee84041389f9eb908041e60ba1fb73267a8d87cbcf3e84751438aef039798078d8a5d679f02787ce36742c4d984fa2a426829305729000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a86ef5323d7845e275610bc9f631edc7dbf2495e159b720c2d9a1558930c403c1e58bcc8b106542401054594fdb8ac17f799e2f0dcdd8810f237a1f2f4222c14bb21b0680571b7772fdee24481c2b4ba303077f0dcbb84044b2951dc9f2b263f70726379bedc3f21cc17413fa16230f7e9a24978a61749a14d3d44a6e91b0e0e5eb161dc45a6993db4047c5652cf5ec7485990422a51ab66ede96dc1e2813a11341450939a1e8fd0666c5378c41518d1217487e64df00c6a40ec26bac4786ac638aec3865b3cb83eeaed313c70a9f91e81e474ecdc1378f22c346e0f2116662f448633b6a6345a82f48637de2838f2d87778a87a9bf5755b3a3f735b518808e7ae3968baab9b4a2d46bf17605ed91112e805c88d673273a8736906bfce005caae3011c7c51976876a700c56386c8ec85e2e8297d7351a42a7a7df72969e3306a30af268344851d091bac4e8daf9159fd1270971724723e62efe4f4fe09908781cac2fd0481c913669c8bfada84ade5cf3ed12e5e8efc92a98d4cb14e44d7185dcd9dcba460f4f7b393c88567eadf036babbe6b4481f55d76c931ca82a222420c40ed02eca5f219769ddcad198ee3d3e683a325f6583fc86e827d1b2e0e513c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000761ab8127566f325c9b53da7826ae21d480018863dd40abef255a6e3f7a9e3705f8e48aadb867658e32fa8970d615813676e7da6220022221a90be24d152204d115a26a1fec11d0a7a70085c3f5f674bf9af7bf5a10ff52d6b2c13249bc199fc51f608600add97fdd5634e9263d2858a91cbb6f3ad635dc59e2c4c4b574e9ce263b374b2ecb1060d7ae8bad6c63bce9e79a579e299ef086535d10ecbaff8b409709610b5217d51a9098833c174060f2d383143d0ce06bd117e9c7ce03e87f4e76fbb22af7a0ecdb8cf848a801ebfc412d2b6f35cfa4851c68256cf21b0c289d63b1934324b8f58719f3fb6990f53bfef4445635a702663af50f1c62f2a1d71616f4d92b0572ca822a7a95903e9c33c250fe74f2937d4ac793df78953dde4971e960803fdeb2032c8d78459af6ffc5e8ff96a793d9f9b11f93114aa84799b1be44b4c130aaee45d004616a06335edb8c3c5ad7f9273759cfff2dbd43a287d90930d77b85fb6b3bc3e5ad160f3bd53bbd6f0a755a3d714c86d3bb7c84f375c41ed5a3d712ae1797532c9b5251cbc2de63c728393ed8ba911154403af57e4c4dcb65cc546763da5d5bb043bb39b93581078d2aa8d34143cec80d4f5b23fc75108a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5a567ce4af03fbc9cb4eb4af82b4f49a7fd3fb4b2d9fcd06f85f9133dd5560886f3a92bf56788289f750844fcebd2d98e2db34105e386b9c8a04ddd8f9c1b6a5089b66a2332326341fe66fabb6d37d2af3a4fe7d56b6c94d5852724f7f0dea90ecbab404e677633a40a821b54fea1cb368a45c063dcfe0cfe18e305254dfd90cb7adde3052d3a5a95dbff7c0f638354db47aa55b3ebdc159b13df7a5bc27857627a4752e526d6f2074830425425f715b7765463993f4bfd56bd1297d230eeb090227212617167e5b429758c7a236964a5755d190a47d5476d21163c2366d5d40244c9bf70667445365a6eae2cb229b06d3a995a7e321e43f25ccd017767346dd63266700b069d1b3fc096e3cd931e4e54a59378b4c3907910bde2ef93de71b324a98bc6561ce147b5cf45da73cc82d8863f9d65e12141d95e989046b38cbe7471cc7a9d386746310997032a4d847e49567c2cf3be0df28f1fb14180febf7c3f592b5bde5e4bc3068ca6d838a4c3e46c757b7ced8dcda4a82f84bea4026b99cc09a0c5f2f80ac47e402dade65b0587f05de40a2127e59bb6936ce55dc868a12503c7f99df7ef1ad686d340b39c0b62d50cb7583933864a4935caa1115b8850ae00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f8157e2e6d1627ffe49454a1f840beaee642ed7bbe5de9d7c96cb84d8bec17d79303eed63e429d457509320788e43dabf28fb901e414a5d9a63cbe6600dc808f7f65a0c0b907ee5431774df6140918f624e5d80cdb5e94a7023c7c7780f70d7d1c0127cdb57926ac42fd9dcb8ecaa088a3e81223d5c260a55fc6e8dedad83f9043066887e5c95c779900d7061020d6965ac02779c386bd4897e12b0842c5b8dc58de8da360575389183107d21bdde5bac41f78c25cd8544f891562931ac62f9ae033d02b2ef0accf55ce6235f8157ce3c3b44a3e5033a556cbf01b509df145fb2c12dba298a949704ebb437d8cd83675fd9bb53a5541e9eafbff6092a5c24777639049ee370578f3862e04bbd2a0256c241ac618dd861ed294b81252eb174c3c99b6641dc7f45d18b74dbba128f0c345c69f8af2ae9c6dda9e3a2f1f20ff01981f7ff8a44477d96fd868fb282f134d595f85e4fcc715c529f203a3792aa41a9eddd2ff0ddb0f76963139cbc1b751046a9c6a4f667da23f121105450a8f0c101cdccdb2faacedb3a50bf2009b6e1521d937504512ba72ae4c25e2f24c48b7f6d23a66b64d5069ccf773b0807cf45e587c63852586b24888b553b1cddc4df85310000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000282db33c3cc6114e49eebbe85010b30423a81cec4620f01f4fc795af41fcca4059262924478d9a0e9882a86af3a764ed9e19dcffdf977f43873c43201f1a07706c920d6bb25f4bd2d14507c354b9fc6834dc979971ac031fbcebd765d6bc12156a10e4a7208da7db441d611d3987b8b7090806ffac6d9f8379c21a3a8d2068bd014d097b3eb3538075a8e759a6c70bb6db3f1e1e2e8dec2deffd8b795ca8ef403fe0dcbcfefabd4775ec0287735e68a09a7bb9b0aa966c54a4dca974fa7401d98edd0a0fe833fe0d969d73692fcc7153025864c29fe57f136857d73ba404098d6f61ba99201a4be1e5f7434df28adaf37777eb9fa8bfc76975bf9c1e509caf85d4c6e105e6aebb57554b56c65e30b24eb59c980c96a92237e02573489446220d4e9e810dc8932c0a0d1dc62b1da00918a91d59650ebf2805a2b36489f605427995cdbdf0dd2097890b01c06964fa3a8be9c95b8544be2b855e1f2adb312e322221605736b7f283ce3c3c4705ce06148d914acf8cf916f89d0c2124b8516a97775a2824e766175e40c3752920c11393154147617020d643cb4a7549f2a075c4bf5300a9c2ddf924e82e187fa3879bc311849dc50af3df93ea8643d1c58d81906900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b67665f2171e424a77f1b247ae6cd1e46d1ced328b0289c718f9427133939684413c720e879ab9bd6cf1a1aadab33d1c68dc749ed89e9b8f3dd51c8fa50eb9bf325ac888b5dab58aa66dad7fb92c04635cfdcbec328810d3e8e994f706e22ae8c146fade5cfbacb290ad017eac5a0e4b276b92480e0a5155307799aaecb9cef2b8a2ba5b95c481fb266344842fcc9678b8c989444773ac8a36ab57938e11ee863b394d323758387feb8ff7631fa943f418d89d6f9b0c3c938c72596f5845ebbb7140c7edc04d0f605c10e84240399231892c0a8e7e009b866ebde043059c158c63e7482d3ba241f1c9928cea949d48f63e1489e5df55bdaf74db518b6e6ab4d51e15769d56578fb1774404d029f0b19381512b184703cd75fc5d50042fb526c83b6f76a4a3874d32d31b26e693b9a917ce7d15d1388d4bcb596ae3a6fe9323300ecdced4fa66f1bd5f21adb2f057c79f3b8e83942d2a01015d93a9e8d825a04fe9645f3bf6ea9c29787a32e41462c1c1fc31d03255582c1ef187f2b388fc9ed4d6a5257fd1df6406aa38faf030b2081715ca9099231e5c48d35f1b35a62e37e61aff33e82bc9058897792743c936696f92f65f16192aa99f81d7468868d8ba000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009784bd4366b81ed1a55d72aa53b67e46f00303fa19d1ca9dfcaa29a80d13901327552faf9964cc697aae8e664bb07e98c46b233567caf09b54aebed5f177a03e69116941104c9fcab2e4e283aa9c12277df439bb893dcae362ed23b134e0118b0ccaa4d4b0e97868f95708b9ffdc3cbb64bbf81db3b5a3e386023b274d7c5d41ca88348bf385c8ba25960995a488528850bbdfef6f37feff2e8f8a98ccf1e8954dc07fcfcec992e25eae8368f0593da444ed7b0b2badeebb95c21d22bd3ab3dbd09cab238e348f284653f743fe11fb0bd2b428bbe7271bc1b92c64131bcb2b468f48f841a3442e7729554e123f15f9a56a1448960cf465c7844ecb70e4d7b390b48546dea2aa57ba43a9ed5b1d549aa8c0cb1d8254079207faeb6f32800c8bdc28d6bf0429311df338dbabbd67e1217e885161b133392d301e9c080c227416b94ceae411048c59faea30c2b4cf7770de687e3d1a85f39a5274439d82e3b3261a1454be0bd9da8ea7884f7779835dfcc012c7689d8865c908e22fec07c1d9545802a0ec12bd8952ca230c6ad8b754159beeac62cc41b1ac26e98b138b5a0881ea910c6e1683fdef74d4dc8d031bec0e25c36efd88fb710e97b720d96441a60d400000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000913bc0d27f6bc050c5e8c54720f5019e6fd382348c12a420adedf1b541740e1245206ede092cfd8146277054fbc7ec6566d9656a32817a53117a90de6288c2bf2dd31b69e0068730c5589f0cc6d60f4395fd55f37b3d8ffd632b7f0af5e37653ff77a890629df33e3c3224fe0829d7082005fa6d70836f29180d7cd5e5d7c96d8d55dc14965964f001730ecffd92a386c638efc745685bc2eb806847fd8ae13fd8aaf64b700ca496c04d9f8d000eec0a0043587dc9f3d3bbf03623e5979569e11d90976b3a1c98692372f4598baa1b10f198dcb177e19930def957d9ad8802b1851ddc44290bdf5b606a9d3f4b269d452c2f2a09c5c10521e8fbd6440ee8a3cf5e17caeebb6df5159c4511fe9eb389f4c80f8389e670ad8e4b1ea6dd4a5685bda17b216a16593d832d7acd77f4c82b3e23971f712455b1ad8e9efb746877a19c683620db0dafa6598ecf5e3c2fde59b5b8784f38e7124c4e6bcb3a304ac2c5ac7cbe56d02aeaa3c704737c854d5d45bc919d3d6fd4b63fb965a7c06a36935faf4c40e43ef262490fdae671f9c55b6de7eb1de47b94e7adfc2b55c7f063089fd458cba601696ba2e3096fcb863116c685ff566fea9e2b24394a753ce621084faa00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f21d233e685051d3428493e7ae2b040fb13cf91d262c27411a7c99d1c9f274fe634a2ec3f9d220db6164fd505b21447035caabd83355fac3ddb04d90817c11532c9bc1211bd415db51a31dc4260fa7a875244251b40ab5a07bc69e1b26387547f5f0c7fea993910e87f9153ff524757e5af9ab27b88f572ca448e0e4009d73441e3b894abdc72d4eca295ec589d2e9fafbb474b04cbe47db47d1b9c0530f63510c2de54b5e3bdd30ce99ab066ae1f65bc824aff8f7d23bf54a859c8b01da5af233311ca4a3c2c62e72aca121571dcdd77b9bf5ed03e7f9c8dd997ce8afbd70284ba19ceea72a0d1b9afd20c551ce86ebf3561310d69cebaab28ed28ad587031453bbe89c250b14b8cb77d79e6251a718db5d36aa78d4ba6c316d65f7f6769d2000c96fad37af6a2dea81c3527cc94040fb188510ba250db0b06da5a5c0155d46f5c7ac839ada36205c0e2572e48a6e8a84b64547d07585455a4e887ab1bbb28df9b7ebd333ad12875888daddc18d776efa4e010062de4c466d5888d535a9490cc14eb3d7ac4cc94afb48d5db5a3cb620561fadf85f4ff174133ee5b987504a42795c9de88c1103ae70c1a812f319ddc63e01f3796c329f0f775102036de11fb000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088b86c73f7cfe4f101c662c78e15d4b2ce5625b6ccdf788d3543ff2cdd614e0e9eadd6eb9e7fe7c955193a49904d86a5d70833a7151fc49519f03ab56effe14b1608e92eb8b3522bb56d1c0ac2177592e293515dbaf6032175bd1abda48dd6644e0d854a2f526a6d4e1c6adb5a195e09583e644899ff8cec886483114943df08a1e773ebc0473b7fd4c91eb0b2ca94af68bd1d295e00d392b70383b2c37e114570c0545556a2f79d3661fd30fd6c5d0a064ece15642cb699e423c45ce6727a53a68baabcef94704b2ae0101d3a1e1d1cbf6be96bb1756e2d2375fb77d22de957e5bbc380e4810f17f9a05b3e68e36f96f6216729587dfe1bc133d92e52004624bdfe0b1bab7dee0d18af812c520100a27a2d50a134d8ffaaf991f3b81999bb26812bc7b233cba9b6b7faa9c6b402bbdbb1d24912d05f2d78bcc3e2c57d3076223e1825a59119daaa652eaa805285187322ecde1e0acdf70e21d2e2a2326b0a8fad677efe0563e76247432dacda7970479510debbb066668b2c022ebfd90604da9bffe14912760d887a7869179ad1644efce9e9cf2ee13019f56fe67622b0d279ba057059f70e69af4e87710373fd6b75973b89044717e5a8e19ea3423268b7a000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a88fe39383a3ed74bf2127bc6744af4d6fa81828c8ef76a5ee6463339f66fec2a2794a2780d8b86b1ff95a175669736b0a8b0eda9bd1de04b456575cd1c3974b3367c35bd928e8039486e94c61ba132313f54593e8b70c987a42e6bba886e8bf25f4ce2fc619a7f959f8048ec8ce5ec4badcdb22ef0ceb336a34b9aed27e2a0d645e38d4ce30c242b8119136745abd060c7625c1dd2dafc2d63c1df425815987777129d4bb64c5793c51e5486dcd9843745d4229ca0690c43ca838d0d26179b095f3f77ef8ef9533d230dfb9da82683ebf6e69d06073ed9776110458a5c7bbe38409705cb72637b8e4d4c60e63629f727c6a74c434ef79d5db46c93ecf82f76b3fb9a7cf3d5700631a6fd420715bdc34e29230fbc35d1a9c683487243020786aa9d7a80a77594bcfaa6ea1838436c02c7a26e3c800d0774e90b2664f54d86947ea11fbf18873bb8e76c6f9107b886774df5345bd2da7f356632576483a34ed07ccdee7b4ef819aa7385f51fd688f9b5f4138c9a5e552b20223e16e0547dc82fc1b1d8886ada10366544aea18524473ef012b5fbd26bce44642d023fef7e8cfc4c1e55f636f3c4be844e625fb5d9662496f448a04202d2a0fe88903092ecb07300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c5c7521fc3399053ff42191fae7a401bd822875dfad122e7afcc5936a3a71112c13a8461009dc4dcb62b5193a6489d783326d0fcd4bcfd6b5094991014ad6d24b3e3d9046eaa7f8629b666067907b9db08423ff176b18870df132ea91ae13af13cc2284e9383431b84a27f1f180c204465a2478790369580f32de4c4d705012e1ce19945697712f83aac91b09745dbb8bb02fd9f2db65d8684bde26543d664b147cda36b2c821345076308129efbfb0aae36bafdc14cdba1899d7affd34167b5c6489e7503b716d8f90fad0486180869e9987a18a4908996210e220ca4fe60255919157ad6891de35dd50719db996c3e12806196f4c2b8a4f604624eed44c47c3a3ad832abcb72521f82d44d2b1bc3f107ca4476edfbf537b98fcb819aafe3bd4a60e81454af48af0874416264e7a75758e396e623eb3d22ce8d64587c326def62ced643c70fa6e222843ebce02aff84bd8706b90a4b4008218da89ed5f2c3fab903ae0c64b63b7a71d8af219df5fe1b91843b5253acfb755283669b37e45f1df5bf843ec0382324b0bb90e705753a7cd4686cc733441c7d7d4c4173c81e0837163538351444b82ecda3aff08d02f62cbc1948eb2870925d366ae52ee662fc800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ab98102ca65cb036d6bf1cd090aee41e5b33eca8ec7c56a703f503220dd8bd504f327e94fe9288e2a2a7f3595a467dfdaa5f204774480c552a7ce9a70c2b64319173e44c56af5c98648a59b1ad227b158e8086cf36a78ccaf0de23cb1879bb7c6fa69e2b76a8949e724013df47060f3b9ee9ce4d63fdab20f5e8a2826be168cc64f548274800a02dba018c8747c630e2eb99463378db2a64c513416a945a98b83aa7c4cc92e58d3e2a42900d2033af2104707139f53cc1a89b251c455a39914596d44b4d430aade84e471555e1d37e09f3af54f5e141e28359753cc3698af4646976994d8b1899c0c2dea0693417fb513df54820c82aaf25988ca84cc7c5f3cfd027c7f3ef346fa9c74d7769d48a45300eb28a51e328a5bcc1508a14503c27b9ea79bba163486ec357b8792362f370b8505f7f0f2c36ce6480a551e20a1294962707e98315128ec5e8ac28421d959de837fafbc61b384af51b5659fcff144014d40a920f4967983e6419e5574c2482e2314261cb08c2e0a28ce5971b2ec3ccedea0002c24c3aa38c19c9b9f9f88ad9ab1ef28433e222084558522e7151e65a142a64c8e250faaa35c61d87c0735d9bbd16946a6e425ee7ee270bb8cd8f859fa00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ee8d02ef816ac40cf9bcd778ebe38a2de84490676d4c879d94ba038f31666edfcd4e46af3dc4b6ef75cb0a3ffa698aa2ab94583f404655cb7ad861382bb6cc38f5095e9d027fe0a485ddd76b8c0782e1784bcab993997896f41b3e875a70d453c6dd3832cd2d02001e1d904b7653914bbac4c26750eaf8e3589381c258fb405c1ecd975532a89d25bd7d8df37e4e88720ee7824657ab598fe46759ece7751ed14aaeb7b4da2ea179db1863c8c6fb128f28520d2c8b0f8bce8dff6be0178c855ae79537a15255739bccb4ee391bfb0b7ab699aa2d74697f07226273fa72c82a8b3febd5014b4126889d7b9d0a9f68aa95b661e2363aff97ae7c33f877b585376fda415f7fe7948e6c35020439078632a3e37ab1866514e57999b5269ad2b4e2a74b699e3749a81cc218ff649a8c2f790b6043643f842006516105472c3ec5dc1a397553c747fb25c98d705576df1e9ff315cdb8c22c735847f941ea10474043be2e9247e9f8592bf30a4b2bbcdf990f6b977dc42e11831930571267b0d89db3152f0deecbb3445b9825d76a565e2aa4466e6a66afd3797cefb981fd55ba5eebed0836890fd6286d40e0e2826953c5c41d52ec9009f024009d33e0da1a9fdf4c7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011663e3fe8ee4e23dd31c7f0779c595324c657f7463cd79642a33f0b59abd50fc03a66ba18597b295d85cd82d2969641d548c2d6205d03fd89cf7577f1e402d4fb30b01ccf4c9ae8399196dfea5a77e6be4d9ecb3a2197f7ee15769ca87f9fcfb66300fda37abc5b576b1a7d2be7ec2dd5cf2f9b529c09bb8965be0bd040772737fb57561ead463db909c32dfa91501b34f82ee4238ccfa0fea650e97bb4f949a86bb7db26506af4baeed91839678817c49021c95d37386b7dfcfa199628406ef13058d6b4594cc00e6e0fc616acdfefa195d9ab1acb6f1b4c883541bdf61d4fb33c998e839f81b14649a6ba900546964c2119dacc639c56906f2f462c2a1452376435af94ddcc5ac5cace83364d0f7918de81e1628b2216d2b6b250fe6a650f723bfe73a19fe2864f10d7043138ba11ff079e926031303e83bb42f2839e12721187387dbcae0002140cb5fb4b3109ee5af993cef1af8f4f77c9d76d5610274ac3c5bf74081312a0cd084fe8b9670e2834bf2eb06c6e02e6b654a057d67a8520e1165cc72bd22e0906f0eb9aa93476a4368bd8ed3347c061d8cdd04a8e2bc6434c0d557db73c12232d7e08de82e906aff3cc5d04a7a1020b132d6f9dc382679200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fd7c15e58eb611da2ceddc5b2844555e841393df2ec9e51d88d53fe492219a30afb210e1fba524ebf7e73f9ce28eeac47a889e846e441baaccf41a9f3587b383698d2e3258c55fbd92a82b8a4e0c0b9ee977bdc7ab7707f2a541e319bc8c3fdeb232432bcbf1a7b78e9956f24faafb5334db769ae1ffe5407063af874a3a45d047b33732e1b51dc1529cf336748524fb3c7894f03a9d69081bc3a6d9f5ba782adb239977b03ce30828f86b5505058e951807bf3e6bf557a65be3f6b8960b9f04846622ae4f736d7248c538124bd0da3ed30431c00bf6185b134ab6bf2c68429b925ae9d2807ea1153897954fcc0dcf9112a5e2ddb50cdf69a088b2d59bd75d1934408146df673462c6624835a1a2b1bf016a2d932ea896700406aeb6c501b59e1b7dc184357ffe183dfb575d2647549acfca680d9f162f35f46686a22c070bc791efb2d0fb4db724c5a62975014687a38e18953bf50abd3478fe4e5facd4d4ed20de5612b0f632c1ff571d0cd849f8fd7d8705426654627bea0e99c097bdca0304925e8702288ab34d96408107dea6c3d6aa9a7d874c6371294d3b0608e7f3a3fa7866f53c63a4b395c788bf4e3d5ceb397126c77615e89184d61c0a78add5f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000936d70f8d963f32c381bc2a293787c8ae35fa02e1fd622d683bc88da3f023654e10ad8ee6985a4c17ab972811c762b5c386958d802abdf50b44f6018014a35bf016f660f03f02ee32678d1be373c874ea77f27c2eee79625422582894d429e4ea027930e693120c68d6d47d078e9cd6d49b960db53cf1361109b7674309306d389b4c58dc984c195e0420d525c480766a77cc39ca58f6fd18d82d6d3987b7c9303695248f6b22f4139700ee3f21d1f08666da98b1cf7d19a5591de779acb3f14d4b46ab43001c6e3d408eb25df76accffb94123c37ab3ea7d45b2ab50a9203ac45271fc0edc3508c1ae0e3ff21fd13133f56bfbb5212ae79da58288beafacfd29db6efffa8331079846293963f797fce773caf05242017139296c01624b716160d34cc4ac043200cdb1181b0875f63da370922011f842bcbc51928879a78cb9974664a1adeaf03ff3b5fa838d1a8d3dfe4fa5fc85ff17c4e6f5a15a4777f1e7501e6df44186325b7e2703d7b00543ef59fd0d031fbcd001f72111e5bca27f02c6f2fe87760feabcccb5321815b8801310d2d42afc8135fe1f89e526378a665564b999339b81ace76115e1ccb5ab791501555cda52ff7fb7803c69888efe9b4f800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001133cbeeb26596d72d1e28893a7b2cf594099817d0356d472f0fd560b8b762fe20cc5757966c9c127e7cb379857e1b5733c8384560db0322785a2d96884a3df13bf8dc89d1f34374bd0a6b1d6e5894e056ecb7a8711814c695d45e8c191f6cfde3cb5bfe3d15537c4b3ce8b30420ceba529228fddbf92238ce2b3d96cd4d3d5d9fa71c082dea82acb29ed16a97543f03ab060e0378e358a88d374edf44d4c4a77462f8b6e6efd4cca51978a87dd64f8c53480e87b3e30b10938ec03b2a0aeaf9c2c12162b0e7be87c7a66606c41429def2a0c5ce780c6b39e8bc17ff76756e6a8543f7c582536b02389f1b88715f73d2a90d39a92ec00d991834d460fafcdf6ad27f43eb3dd3fcccd33e6421a18fc1c8c67f88fcb883be22d2548aa636fd8dd79ba7830ce390c814211ca4549a55c594c90d13386ef31497a1ca87bf61dfb51bf4b065bfe45f4a622014d01cd569e9ee8b5107ef9f69425f1357cb42c44e5ad4e1563c2ab965b2e63e3aad9129dd78ff8fc8e18e7a124122d903aadc33806b52834b1e83d6c370fc140abf6f0a27290ea93b5b61ece5d3c75e0d55db44b334725756a631f2b7752bcb9262d0c20265e4a81ed2d5ca7f464fb78386fa5dd0383b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009412dc0be723b0f5c74a5955f5598cc63900ddb073c889437ae66acbd2f72340c19ca6222c5025b798566a4cc7fcd47aa0fe5317046d95661ad62cd0b439d93941564cae9241d946cee4e34af6bf5c94598bebca5f1022ac55d3330dd1198e4ab90478fc57360f9a831582eabb16cf5ad7beb374e981a079d83014427a2330c5f2cb5cf58316cb17eccafb8b58557ec33d673127de0d0b19b47718cafbfa5230a93769088573c07fc4a531cb7d8247fee21ce49428c37554fc51371ec96e3e163a6fef54fe91647b87118f9725f08fc8e8d3db41ceeccd601add5f68221af261bd5f045ad72beb8ac12a7dc10e90b982112a9a811d214d2b46abe7fc9fb45bacc9402e0587132217155986249a620fcabe91ae9507c07c151e42b686ce09c17b853c018fc67bdc27f62695dc360d25a1b3ea5de60cc774c18271eb12a1b876f1214cb7b8c7c09e8b108fb90b5671b25c814c06289ab2247b950e93d016fdfa3315739493d9984cdb8a878a97261a30b7d642d5042a3f898e0575098410655565eea8b3a9595f7e7e07825565416ef8ef75f6ba5e7fb3f5818d3b6d6d01cc0a6aca4ebe933f87ded24352125c3631f00847ddf1663c38d9ef0ed28e40afe63807000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026c0063ce49288e1a6547652f0cff72d9fc74e6f197989b1d088810b9b05075a380353d48f20c8ac5a235cec41516c5616b4ee580cca915cc4fdc20157a4f94fd9481760fb3b37c45b329b7fd4f8b7c7a0afe1a43f23d71f94e393b06857405294c7b5cfd3a5b86c7f322d9d51a3884560e4f79f08bd206ba97dd246147ab00c895677a62065ded16f8e3f8276d27ddbaabb3a1ab86b9e508e18b087cbddc5fa688e1479b99bdca1eb70d7b1880a3508fd03e5fdeca4c5fec0725bf6e739e015f75fb3cddf845b35f7ecfe121e4e35d98f121d456465d14bb89e27b23b0a0c37186b548b2c281e466f894519efe69537c0762b81d978336f14e635042ab5a787aa2b1ef2a1993506de2ce6acc68068251b5e4cb6acee4d04e9bd4e1ae2063128b73ce3ad20d6fbd111f16c33729fac3693c4108fb4792cd2ddc63a2db4b2b43d4088e12ec1e2119b2b7fd902c8452790be953143c77702de13c683349a3065c88cfbaa22fd91f39119407f4772a098b9ee7f380ef696f27d02434c6700ac29782ab9213bc1c9078443ff1a0e00b1491c7b32a77b1f3e3aef15c55125eae8741ce091fbdbb7caefdac6e2a92bd4f83e16abcf7ce51ce6e8160e0e6892797d660b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022c6964d581551cfc332cdf84e901bfee1051765deb56608cd2b6a2a639ca936cabd8e0908d3e4fc83685932a2f4ab539e473e06e8bad78b462725bec4530617bd2dcde673235fc21264d8b68316a7901f982e6f90adc784af44ad80e32ee0863e144e4ca5463e7b6c30567b46f34c4cd9f5effc52fd6af1d95df96a7fe959a24b0bd09a459c3e7ccf9d8df5a8fb0cf495012a065d9d525a11aeadcdd3e7529f55d42fbe25e1d09370ac532ce6dd4638a4efdb01b2e61dce194657e97a925b9d48552a6c637ed8af522f77d0f3559680b408a5c7d321b64fe96a95861783a5a6bd42389c51ee161499ff82bb9cbe99f73d3f9b830fd3080889765c9b75f64a7b7a36d3d7d428407aa754b1910df23dc356afcfac81954b1cee600e15ddc0bf530329a3ac2b7e7e72b54976400049d021855c5986ef1762dda2351f3b542a91ea7399d44e371d807c0f77aa06e475b36c397c72e355ba77d0a73e97d1c2946cd1ee575bfd7c40069f803020f96cb6a773e74545f1761faaa58e607ed556b6abc2a80abc84421780e0f2489d3e0a47fca6d50f2bb2520a6edec529f296381fd520ebd12a00ff343a76cbde901b7b3a4a9eadf02acc23537b550d60bee7ef77af5600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002227e8e2c672a1ee277e7fd0f403304350ab3c403a885e578c19539dbb1b69799466e84037dd9d2d683a9770f03d243bace3401cd8f34046be372e10e67c02dc7f706a4fb39da34b8a6eadd080448e657416f3ee8ff26fcfae6d4ec8ca472ded98ec5514cdfb93db6867f0d0db030537050db18f4ffe532e318007442af02537aa5195414863fc5f76b205bf06bcd578685c1cec8be26665226a0e36933d59670c744c7121f6455f8d043316bcf1b20bcb87fbda744619d868baa14f2a1166ff56221d891b6d282030625d18bd87208aa877fea5da075f53a9358c258efa6c0790180f016a174a0601e41e2e03e61bfe4c735e34aa6f941399c4b958fcfeffbd5eb7c37155e25727968daba00cb9cd1d608e1fb141c42ec8f748c1bba41cf830b52a9e1f01533b30a036b676c1fecf12529a3d7a22f468e63cb12998e6db53264ad95bfc4fa69059d9024f7ee859bce21bd2c86d193aaa2ec05cc2b988cb5a0e0222a7be262be41ab6f818af751e9482216105e8b275674b5f159e662afd7b6d002593b7dc662a2601223b36dc5ae773eab99443d20f055f8d20317cd56032f491a47ae40a517a3065c62bc899595c1e1255a4e22ed962df3b141bd930b79aaa000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024c32067a1504f11163494f726d84a8b21be4aafac607470fa81e4c5865fb76bbb6f6cebbcf6719c9850069d887968cc125eca0cc1d9f6db98855d669b44fae5c69ef060789db199ba967157ba67597f0dd1ea538e6be65dce3911c3d3ce25dd79b55b348fd303b1dbabff963879a795df0a57ffebb5009a823c1092d97e2820217718a69e751610db1ccf13b0e0e06e6e194deec5f797fdc9797533c767954055ed5198800cd75a4fd9e6ef9a5e30d17fcafa037c34359e58ba5247acc6a2b8bdffd327b0fcd4c1da41b3aeb1fd85ec640cca4086f0bb44077fa9fc963198cb88692303e497b57765996bc6b4fddef127d3189afc6d0309de738e3267fee8864ff434dc2eca52a0a45ae4f2424179e8118d397ca457337089a1765d0fb248199bc548c2a9eb68fb7c0350a60f9d644d7abe5acf2ea372c8ea81fc740ad57aeebd969863fdb756aa485fc51c4a84511865ab73fa31568c987572643827028940dfb824dd19a6c9513f9f8b0bfb359dd893f950dc3c0b8f0fedb63c316ac5af2a4282decb615bae92ae36ac0db295a8d5d4729ae599230cc4343b236bda32fbbcd261e1385910758e28fdbb9eefaf913c9678203add4335f4d0164828d0c028fb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a31280f9fa89125c523533bef69340a3be30829b213b2e7cb16441b9b81a188a53fee14b5d81e238437ad789c09995186348bdf6c10d180cb01f69df7d66d4d586a5c004bb4c9479b3b48670a8dd6d0df78a6b0368a1c04ff9f229e37546a83354ba58192dc0bf57688b46adf193cc646b6cc73d42ecc606b891acdd8d09c90302df6360cab1febd7b4ba88919684eaa97049fa8451aa786e0a843ffacfd0557a554d13282a8df0649f8bfe867a95ff2b1f6c0bfd9e4e83142dafd2cff98fd486d9187242f2f06d1f0c5e3b3d512137edc6da5512cd03384ced4a9cad6e961e435e1365d51e43db8d34cd45ae8956678b2cd7487ee9459780812583606ffd3970e36e091c3578039eb7a857d7a670bb7f0c6eda7b1fb1de34d2ff3fd55eafe1705d1c1cdc64773d3b19ed2687377885def3a78bb0b57a030c099aab98820dff7013be9cbb0a36329269e2292d0ebe5e7a05cad91a8a4a88280115d5444c157e05fa7a2972414d9661617f1d24dd6a9c2d61ae830165d0912e7100ef0205e8ac0aaba35c924ece7a7e23b0fc095f3b3bf7f0edf0397e606db5a7a3f328e47d55df026432d9d9f4d3836a60832397f20c2daa9392affa6f645e78bdfd04b6d87100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dfc5f4ed6003c36115e81910e8c3ce1999112d4c4818b4d7a20305c6ee1391b9aac26fd07876f198efc13a08b573207a94f7eb9ac871139037bce9ca10d9868f12357b94388ca6f675d5510888109d844daba6760992b9d752104d353f2babefc0e8a94b9e04d1f96e76f3da6de51f3602d7b70eefc73e2ff3843c103d51409ebf31443829830ff6d112888fe4d4f2f5728e84cb7ad96536e8320b9fe4a501a0004b41e893dbbf6055aa5dd7134e657260ad23fa497583e7cfe33c1eff487324dbc99b470168d0d09c7927e728045a24dd8156b9519d61be59699b8ecc39980024114c040126b4eca4d31034ca30d1b4b7d4c13c40a09b644cf72887a45d1da14f13e7eff8221ccdfff223c68d8fafa0c9005be45d3c014f36c4f8c54fea8c859c1e72bed6c2cafb6906f770dfe5d6e4c178be3484c053c74dd9e6c767dc7a6381676b13be8502a2a5576bc0776b593ef2fbc0765dc00891967f64b76afde3d0f9e7adc062f3d405eb573643f0589980982199670e81cab11b004f9be2a19fd1e1b52489509c8b927a24cc8eefc0dfa141567d2a9a589b9a5beb5a04f80f58c2fd88f3e95ecb2313097dd8aa3f4e981fd4c2bc672d80dfe0766f18b62535c0a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022bfd2c4789b9be83812b17b8f1f2c090bdab5c967f5d1dbc1654c72f3549e33a22d33e4eff0de6ddff275d27219214a2fb9e29fa16d0e9317fe42c4f44dac9eec9bfeabd6eddf372c7a60865b95a98d314be382cc5fa490e6ad82c212ad806ae1779b88628bb6391a69ebbd0c3136b6b32ca0e7b9a5427035fc36ea6fc13e7ddd103ea5fb97f8a00f851c9ba9be5aa20064c579bcaa84714d0c5511e760c09b71eba548b91656ec67ec630a77264ddf5ebe15d6897ea9b6966e5b2fa0ed2f206ac62514140f634e5a268fe075bd3cce4ae60985caa0c2b183c613ac89db51c69ac086b73bbbcc39ffd0aa7d75f53566594d2f6048835e7fdbef5dbb69c271fb73e16b3ad1c194264877b1add5772724b220c51e51409cb574a62686ac603d5444c7d8a6a52b2437f5882104b5cdb524e3570184e0b628777a19b74d09444199f3fb122c10248a80f126d38ad61708db9554bf315113888be9754934bad33df7282bd908829c71659c9b90006fa1d106333f00f25335d23b7d6e2b203a07d87fd9a43f092133327ac5a3a1a4ff909edbe81217108bca24dd309d3e8bf4ac928aadc1dbc99d29ad4fac3c12417c1c7591cb233839898663a99f9d5e4480307b8700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cf3384b4b63d32b859ed31e58f447803aec2b4827731569c253adf49591d8dbeae7ee6c92304271c7abf020a2d4189fea06e227fff0d4db990f084000618ea5d999dd3b379ba92b15c8f95cf24eaaaa9cf7bda2bffd5d0d08dae410ba74f7f848b2c4fd9233454d6897b1fe48300b7a644b67d5a82a0daefbc19128a302dad4ce88d25ba3aac2a3a8a80b901495f804a6a38177916af12d12714ad64f6d7645397ca593b259a8e63b79586a7c950847a4b1c62b8aed78308214d054cd3dbe2692108347136bc8a56fe037d586a68a7981032725b348f0ad3c7c02f71e90ebf289277ec3c86b25987faaca0af4eefe5df4c34fe0e7ee5f034fee88dfb20c5009988f966d2d53ad07147446f2a7b5096c13ec03d1563cd2855d2139a3333e72a8f5b62999b84e421e277d86a34e1786d78d3c888673c8c308b6fbff458b34b557d64e228b1ad0457dee0d2e352f8076609c2da7b4cb9fd7521da7309833a0118ecf1e9db65aaf2190b32e7c75d5f3802ccbbb0bed7de51bd38066f50084dcf8b9cc2571919ec83dfb415d3b2f668d1ec0bf0157c9c06431cca94631cd5b43e4d79a39dde6ca0b569ab7cd3183f8fadbeb16ca9d0d48979135fae16dfc15802a550000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120e7dda07233e998851a8751f8331751964e82be2be5e02a20e026092309209fda574f2011cad4eab1d595c0189ba7151ffcbc5c5583d6246c26223d041ee550431c23bed195ae1dc9ca29c975a3cef6d5d9f744b42e3bd269fd01a664c94f2d751c0610955c7c3b63958ce6ae37de897717095c58b57b8de951aea786917f5420b80f8c66b538cb0a6d72fdb74fc38b53e1eda5d700131d8525463e8ce34727e11f981ce644acced81c2281af889fc0ae549caee8406cb7c20bd837ce208bd472969c623830089ec7bf9aadb291d962bf5912786764bb6deceae987a2666f0c8d6b2f242198601aa1c132b5c319758b225c5c345727624100bfe46a9c2a10ad96a406c389be974b5d06c895e3169ed2b5b8591d6ba276440db50cafa927c03830ba57a843b38b784e02d95abdbcdf4508bded56e38834b4c807976ff699ee4a83634e08445df1ba08300fdb8d25045e2db92d4f047b00c509dc65bb4a5ecd0292f298a13779b86cda8c51ce2f6bb2611e64f18bb57c0bcb7cac5d5df257b0a35954400fd97c00466e8c3aaaec718f8c6d61744dc12188e45de2fc9dc061d4fb5d34b81ad7d504559ab7e40c4d859edc893c20c1eed0693d4a76196b05ea7ab000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c83a70ba0d4ead56632c8c2cfb2b0cbbb21b92e6095aabd1a7ac153c2c14358d020d088536f246f7231385aa751cd36a88f6441385300aabe52609b0e4441718f92e6cf482e56b364e7d10dd1db71dfbd0a8a5d0450525d6d571e159a00fa596c9ac8665e1f2d47365fa822a3b52ff6df50432ac538403ea88489bfa27eab3dfeb2de3eef403671142c92fb7e2c7d7f2cd8d8cc061ecf8de7e1d4790ba9deeabdf2fc3c9259b0a1b8874cfef5146111021c29c1446eb39e258bc42f0b0d052259ac1f239acdc51495e41422344244316d0ecc97180d73de0642b7a84ce5d44f9ddc1a2105eeaf2bb34df77a74579b85bf68e93cebce29c0594fed43a67e89b6514e5a20b5b40cb9dc7e8c2803fe3de94cf64769e8c28892c8a8b5fe8185600acabdff6905d38660f0cfe89fcea1f1e488f20c9acb54ad6e145a0de488fc6372a596ebf2dc0d9aee64da63a1ed4024459fe856989ad8cd641e4274d0b409ff94cfb5c5f08936fea7556eccb0164821430cd3d57a6f06747266555206d6e6d0ee947c3090e17bb73515e5097446dd10c2901b9eac0550eb2712438f73bf512dd6e50903056ebde875e318e80f3791560b5f5b521f43b66112a4f641eeceb770b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3a4089ad82b8d53bcad4e2b5394421b8d90a8c64927f6964768c38284c0654093f332d9e6b65617b54f7b842ce3e5da89fcb0ca2fe27823b00e75283821f7b6f47732d93d850f7aad4b6ea86c2e30fa8ae807993dafc34ccdb0f149574a221c3a5f332d0abb7c3593e7e692347b82fdb8cef9de569cc20295036b854895cc8b32b52c2d02a1e956df413dd2adaf5157c40d45dc3799eb2e6adfceac74a31c223a3c00673748798b72b7c0ddb798651129bdc476677171a6482076416c6f50130d1bb9c993791eee3c1171f07f05c3d5b2da5a5552906906f2fdd6195b0c6ddb91363f4fc1a3046877fea746e8ff5720c68209600aa54df4d6f0ca84b7a8d6bac7f83541fba0aae27efcf6ed8d057607ee50e41020dda487d22335de7cd6667751aa030dc78546eabd011664cac88a74b9b6a9a68a5e0c6ceffbfc8dede042cbdbd59dac43ffa03b003e95ac7a267a36fd43a6cd99009110eb5a9b400b474cd264f86009eebdf7b546af48038bf0be1f00075dcfaac2b55b6678623aa7587eeb8c5b44b21b3eaf27fb3db66f37881cabf03ced10a9047dc87c22432cea00015457e47be6c414f616e22e384d1b83ced8430054b0a10031d0449abb5134defa8900000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c460beb8e27069cdd01f38cd44fe3ba309eed8d7867c03940c19da8ce4781e47b0ae569df7ec7e00150f37c8bb3fb85fd8b6281f098df4de245b0ecb4fcfe6d5bfcd30198a2c1b8f595294c64b9e9e22b5cb0ac99eb30694993f462056604891f15f0066f536ac38c75871a7b52abb643e9a9336f6826e1ae97ea97fa311f2a342161983a451a688a2e2c34afebccf168672401e1cbd6b701d07f67860e24e0eeb01edaeb77b0fc217b9ae8ff5fe98ed929f2cf854feffcc95e366771fd95b5ebfb0d45182f6fcdfd484f14d059a7fc494b11c1c2cb397909481d89b66ec6d04b0d325df2cb23af3d327b696980a67098c5d8134eec26d59d33f5acb14715c257416442058b6595dbf7898a6d1879a25d947e98370b059c337838d2fc8fef407c25fb3c8f557cbb1bdea89c7eb95366d8097deea842595bdac4233fae2e4b900f5be2972a711a77d01dad0f3f7381d6b3b525bd64d8f38c9ce356d1db51aa9fa2d86bceee37bc2d2341c20f943ed74359f82e7a28d16f68dac58f30fddfef1b8257e73dbaf1e22156be2739ea2eb2f47c2e1d294f1b2c845e82f11eb30ae8b00331404f7b16d52b89cf2d1cdaea92e3e12136c17ce8d7a682953dd2c02a459300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001858f2e4821e3d4c034bdef28b1958d4a20c6a618991f45692206527c54bf813709cc730fe8a5e2f3408a81ce0c35c25e06b9b3006c4a541d12a067b2f683ec065922f88450806fb38dc7059ff0eb5409cabeb593a39c8c633a4caf14b934259f14b6be8e3a072f4c102d9a7b62342de5e97cfa9a3ee2a715d4e5abdc6474ef7d0b399880142269f6d7129d3370dcb992565901071521ab4c2a92058b2c309280bd5c0482b25cb4b0d02dbfef03ef46eeed59788a3a37498c58bd7b99fe2d1c4a840f1acaa876920061d92d71ca76d7bec194fd42a9e2ed904af9ad1c26821f426d71b05eb6c736cf3f7a8c5a70f63f16baa46805c61158ebfbb817dd05f509d0c87fdfd9cce05046987453d049f1ddf50b692030fdf7849549729a1ac5139776556c35edb3c6f8565215d32f6e413023f02c6aed677052f7f1f61bfa39bc4727e466a1a628eda6bd3496cbdea39f99582df8f1c62dbb3979fb2133ea21caacf5f9699a9491db814d21b07f6d9897c62ccf8ef68ee0ded0e8e93d68144523e6f03ed5cf7f1e3185890bf7bd64774b05bdb6ff99c72d6668330099e0aa46e68316950f2a1bc38d0e91966da2e053e7203048e413fa53f215ae45804d751fa016600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fefbda5fb725381b63fbfa80a620479e89d05424766916583e3a5ad93020996011d3a551c452f52bf1adff5de69cffd687d09624c01040c2547c4b98ed76baa611335cb8d3d16b4d7bf57e9b5af8e829a8eda6a8364850fe932a4c559550d4abbccb131106621bc8f2fcc27522e4136cd0fbf3ffec2466ab0abd25ad9498242dad14d592eacc4a6cae30f6ecb33e5ea4787b25a1f3fe6d5c73dfe01f8caef662687ccff527503baaf6e2e6eb2af8c5fd679aeae2c351ea177195cb9e88db3c939e8d0993668c9253cb2f27954bc80d846066c08a2de453b51946c994d69adf960fb6cadf41dc8d3b5c5b1fb1f9201ac9b97de083c05407f77b2b2e07fe55deff029ee4148eaad2da7f2a6af4d9105d3e35e9abaafd921eae7524fa36ab3b122504ee51f58f4e90355a536ed60e0022842299b36ed4de12c1940a283cb122df97d7b9df6c11f173de81c44b66d0e6d7ff4692ba046afa6111968bea292fe02b83872ccd8977bddcdab8efcf1b4bca7acaec0decb2d2a846a01824e6a7830e46080e48a4f03d7576a306f0fb06c65451b8e299eeed643148b55c771578eb215bea74e8cdc414c2a7a3c70d83d6962ec3da31161a0dd3909415cfc2d54757f8c1a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000176539f3d70fcd2fb25dc66d274547dbd9e4e02c8aa4dd8b96f528ef080eac5b44b3f387fc434910c29685caea48c8189b5c4dce3809a5893345227fd39270b289cbc053f2f1b6c7963b600205351b9e2ef26d4cda64121c783b75fd72e388e7501a958932547d5b3c4518b59633bcb14d49ce8b03fe8379d597377b22552c8efea6c28d17d554f22e80507be5039d6186d34082ef1ed5e4b1a4c60040730261b5db9104b8eda379848b787ca293afbe093ac201d198595d59f7b6709489d407076c69fc48595b970c0b35672463bf6c1527e6993736059b1b9082997d2b123515a244695507c84172b6fe58fb0336f3493c93bb4f1a2e181aa22118a29d5e7441194b71d60d234586195e86afd7f184623565b1b944b9adf95c4fe05d13758c4c0eaf3212b61b10b1319910ae20566227ee03ac234ba81808411d77dba3c7d7f2fb5c298d7efba18cbc8758f47783d2a467c099b39ef0daea4c3a002d592eb0d46cfd6d4c7ccafb51ec726bb2e388a14321c61edda045856bc415f7f20fbe5a524583fa6aa6094ff4e930dee39f652cf9a3e59f7d950961fdd39b3ce9728ad1a674d472fafbd7f1ec2dd9d3e3e2927f2152b4a287f9ebe450e6d227351f6d4600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f0e83eeb89895983230a093c4f002b938c9ed8fa3b84e15d10a7fadeca80150c09f391484decd9da06c91d11aa1a62bfb4e453736614d866b215f2e6f56bec1cf2f803e80135c809c7682090cee9b36eec63b56edb8c613074af72234c0dc1fbf36d9f83e084436fcaf831458702aff6134dfeccfbe523aa7da68fb502024114e15fd614095a85330d619b7196ce601a6e0dfac83c447477a1466f9e441b4e6bcc0ebbf698f1ec5f7983ef30299a94c8cd669445c5d48a0f1deda98f143bdd39405172ccc91e9a98dbd1a76f6b7a4e8f3fda4aba807c0052b2c2610b3dd910d48205f18d4f86dcad559d72701852c63387fe1da3e6677458902c2ea2aae5cd0e616fb785c04b17e0d8578eea0a49ebfef9f6daa496d54fae6fd12a7dcf94e07db25993ffce404f067c17ab1ef6841c28366c77b566379b17720a58e03078c9d5e3c2437e01be743fc9fd09ccb239201744ea6f27c3d1b09fe1a67775d77d30e09cf5319ae0717b61058d9478ec5673a9afe7db22f76aa027965ab78d9ddf15958729b6ef7bbe476bede4febb9bdb2f6c7692261c1395ab555863f992a2960aa3a356baed678ed096542211b154b5ba394e13b9aa462b644056a8d77b2118af700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a440c57e1eb9b6e57d96eff8ef7ffb3caff32db2cc17b9396230bb1b62d5cb11a868404114898ad068cbc6026731a5a7bab271d051df9052c4e35ec4d6d69157a23a859c14d51a6ebe4a97878e19622d56baec20ce55ca70da93a3034cb5b65ca74d3ce1a6a1d84db19d80734771eaf31643fb9395bc3e6d06df9fa6187a1f1a374e2742ef985d7bea4f44fe45f24fba0f0734991776097c33fb8c737fdd15e461506d5624d8a2963b0abd6bb510a98aedbab5cdc12bf49f255293be3c08be87438bc6c50bba5a966d6107c1faff806c6db8aab6a22a6e5407cf61de4bd0c9e2e61b2982af8dbfe10f838da143296e34dbb32a0a1f037a5ed585f9ad0b8114ab379c1eca0fbbcc005ba893d4794d7d0c9284bcb8d47149978b3ae93c05ba822b2daef15bccf59f5547cef2de1b44428e5b31e7e715965c8ff06d21fdfe6657f36d77e0db913be2748a7590115b57050a8a2c72bbaa8f27146c50d852be62dbb9ee4f78dfc3d4ce0b20fa55fa90fb8f2f5bf8cfe5dfef22db99026635e8cbc62b1710ba89d9728e624ccbc18be1831283f01d528eb4d3c9a28335b669f864967b2a0cc4f8cd20b2de32d80373ae8159e1cd12bf6d851cfb1fc584e65c760009100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2226629511c10d42e2a02d558269f75cf00718951de248d76541ce0a10ef2352f42a413fd23ed249a73f9945d95aa46f63f209737761567ec42cf2f7cfdddfec1979b4325cace13050a2766bfa08907a4007fae0cbe858425cb501115e5dcf7d9ffd110a88d40bba1ea8945db9f322116ae8c49fa18bc59aa696f64b3de61e0503f61edf4be96a9dbee766411ff10ea58386794ed303a3dd0d071a99e12aa4ed8d6db152bdb13ceb7d24aeb9e0956f2d2e90b79cbc60aad6a4dbbece28caaa9592f214dd984d9c4a2867c5d78ae40167a55659ae6055259d950ba31c334e5640caccd09656835f3f93e8a47ddc42a8662eb2446ce0e6a20d4a475e77575ec4b975023bc35e95cc0834965fa650a02b2596e172299d528cff9ade6ca42111a1f0d030ea4c5b518051fffdcfd68b83ec01aa1cd1ca81640f3c6c12523df5a433072f5b1c9238d726c41afeacc64d760cc65e3ffcf5131fca4f09d9b6dcfc1dc975df54a23428c8f81ee8e23532190acde8a67f965746232a97c8691145fec4c19f26e424a2b54bd927637a199cb1397303ed0e6623a9e7df2871536a0dc6165b8b76938f481ed180894db45e2c208b06159c64bf178f604619d0ba8067ca0ceb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036e5f346d461c48da7ee50f6c61247ebf643d13b1eea59c42ebadbe7196db272ad5b5fb512f08a36fd9e83a533de9d8de07f20d1d203913b74c3da154acee689798809f5228f17b11ade736694593072b2850b82d08918c58059b3b3ac86b374fdbcb8a43220a47f30f3c83273d19abdcc4ff25f32b84c87a5e5d457e7b1b783845e16a55a8330557604c8467f5c47211ed4de714abb46d39a308135b21abfc0c1918a46bc7867a2921796ea9b06d68596164be3bd3ccaea08445dcd57b9c8369995fb41604b62183e1df94483a55668c1efd1ba92a26f48999a6dc0bd0daf1d1345dda5251669a062607ce2fbbf34dcdfed8a1b3158aa6d83a31153b47f53ec4b077eda41abb00d4119e53b5bb070f30032ff94c2cf118db0e1eb2e95a5945d3402d7fa42923948a1350a0f87723395a4d64c9e75616106db160b36b2a4484b243b29f37d0312eb9bdcb504fa7a466e47f8e7a978a7090fa57a404df4395c6a7875bee3b578c8cc5656b9b9dad1633c1748f5ceb18dedbd5e48cca0cd8d61dd126bb307a40705e7e158b288a52f00167740cc026d95427bc669c413d2c5384284050b1dbab1cd90efa22aab3405560dadce541a93d5c36ac585f7f29105a2e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a432affcfeb30df8374d78a0561f4be0bca25bdd9b0a8a056ff2175023166c0e5cd75024babd0d73cf9d31874082bcd738462cb00157121759fb4814ff3711bc3e5d0e494b8e64b0eeac8d244d6c068862bd954529c91a67651e94caeb562e6379c8b99d75a37481e4c668f79e6f984671676121ffa481996c532964ebd3b1cc1e1af1409d4043a7f48f7210a565484b68d2df00992a087e4ab3d509b997a5bd3f96183e71907dfaead4ebae486c39e00d93b6c28c464136bd7d9aad30548ef755db860cf2a0be66d6182d82defa396d38780c43aae65cec895033952c4c4410af0a22e593ec5b12ce98f097a26ed22da6c3629bc03b170ebc450a69bb1a33862e4c3b3c60160435568e78d85717286133ecb1a3a6c09fd7e609cd91be5fa365c3cdab1a9739254a1c800bed3bb246f56a72e8cb9b5ab12637781e343b5494ae87b959198c745dc007b134e701a1ed451087ac365842a7f568fa7ee4a8bda1f26ce4773cf3304a481cb6d95a517a6ce08da79888160ee083d3b9919c549f2842bfa8107b962ae356573ae4111f2237f1b670714d2cb5051a402f7ec75fbeef987056e8c9415a238d56471bccc6704d99bb05f7d7d44dde89fc9e45b6a7d9009b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090d833969a51f7a169884243a2c58a9bc5cba8f3e39fc80b4a75559eedd778167677d68d1d4acb1c8dc2ad97ea21b1052c1ade5af01c489014c5cc82b44607e6fdf30b26074d099dc82a1a080dfc934486f11720317accd22cca41584b4a471ad94b3a5b3d400d535cd85a1d4399e48ba1271cee1bc0cb89c4401ca6fbb99a4c00e0f1cf093619a768b096741f954c7ef4eceacde51f988dad2b54d0c1e85a41c971c838ffeb2e367d3acdec2ee53f092c029a441a80dbbc3c600c2203cfaf4cbe4e056b14cf406312eeeb861fd25ca387ed44ae83c3fdf9293885c826844b94bf6cc9c5d53af4d62a9d00eaee109d673e837a53d0ec327d52c6651f396bcf7c127556febdce08df59035bd63428dd67c1164c6406c21b01fad4f758ce6b6eace0e01790d56bfe141d717747e19ef05a3e8cd27c822cef958f387a1ed2a3fa4d1d0812d3bacf22e853361e45808401ae94b72e985bf1f967447011ba6e48ba6709d8efa86460587d7833ff76a777d611d20732664c3b82f69fa2fa312de71ddd558f4250afeae62def33fb1b7bcd8624cc0be1462450415106c920d173884cd0c6a15a20baf898811cf7d73c2ec3bc4e4f938f1774e2579704990d26c57fbabd000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086373ebec64e0be595208c2ba5e2347fad41ba97499b05a06965cd347b9e144265c17e5becc0617c7f742d20b02aace69329f901192f6944fe7b48f0287dccaa3cf0927cc1f0c439ed4ca327afd1adcb35f1f5958a29615a3adf727321a2fb2f249e40a81a6088e2b2a329e0dc296303b2fb9431ce76d9c8b71ff03a533d6898974fcb228d9ede06b3b3f430ae4ccd9ac2d97b5e997d5ca4fd545924cf3f403cec9fcab74e56a112305cc86f99e64e7b47e68dd0c23659bb113c055bf99d69d64c2ecc56c687122d9386b35bf3712281a055aee984e71277a1db09aba0b663b1969a9e5ea259582ade991c00d1ff495de9fc1b0d601b0dcb61938352ba523b8f8426b32598fdb59a2a4d362bb5390c03b90ae842f4f010524113ab1d94eff4e469229bdbbfb0c48fb391507e24a85b9638ddf262d713e6dc0d12a06f7f7116d1e18bf6d30f9b6f6c0267413984e43f1578cdf81b1c24256796c796a08fb78c680803ec0dcb6872bb9a187e93711f1eb725f433947884f58d6ca90956e24cb868ebd34e81c1d3ea20eb09806f961980a961504ac7e2f29343587d61d54890bf24670bca271522d70501d118304f4e1f67916e2808570f4958379efffa4be5e1d3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005ab902da8c4d50795d7e19dc864d852fb3a9fc2b22b705887039542d3e02e29fa85c6005f385db93a2ec543e0d3a909dd411b8d815900d61d695d27920716f4f0b150de086e60ece1a586484494e336985f16e71b0f08610484b0a23d7948d3649ff6852635e276203a64ade70f3c446b4761bb22974800f9135ec80eb8cc3a34ff266ca4f70172a0d5bbb3479ee7dd011eda49023a78866fa7b92ca05de73e889a243dd6769e0c2feedc3786641c345709c48fc7ea9e8449c033d3ba75fe6457e1c5f5a9eeb26798f8605a3b6d78e48aef84b0d7d169f6de9b8c568316af76ad5a3c255f8b708e0d487f4d88cbfa8b84f6abb00f11b1603f502ee35e402c863cc3f59659522d180824dc0f202f3664c32dd7be746f34e5a5b02fd385b3aa3c42752cba06dc5723ec7e0be36eb28bc580ebdad4afbbdddaae5d9741dbb0e10e782938703f60455a57107c6d28fad8d8aaab8cda220f78430b26e0a276039e6568c626cc79c9804497015c868c3f926c652efcceccbc1d2413ea13c359156451df0d678785434807d34b0d86b32555d854b527e7e5388412d895a43526315b30e761db58fa8dfcc3e1d803759fb4fa438c28c710b04d21aa5b86468418a72f8200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ef774ee564772d33422cf364a17a083996ba27b851e727b3a65163e8942440e865e2c5c7f36663d85ecc1b137db2ebeca3d9b7c5fb1596f2f680b27b9014298e6c315888d097a44320c3fa31ccfa07279890ee52f9f405a4301c6aa53105a417fd12677d80bfb609cd88421322d9f0f8f288dd5e9cc3fbae6e501e0d037275e09b60d95f08d447b4139fe2bd45933741a0b5936aaac0560a95e41d0727661703a790ac4b8a7d83a13c015d374bdc9ba2e3796c3a60026de5e945719b8320594ed861cca77e617a02a9e47242e2e12c988865479512c03f921745edc7beb5a31fae01a39dbf62df7a61e9b727fa7522cf3dc675bb00254cb0b2e7906b080668e9b93594c623f75fb14a272a612bd996daf888677ca51b6a8f183fd9e455063e06873abddc62f2bf3da02faa73037088780e5490e5824ee91b1ee5bf31085a7ffea641cbd94d87ee2c758d0813e61b7c8311e99fd55ac89308611d9dece94846485360b8d2db67a59d9ba6b1e81f111b34310e7227f569575434cfb6f4c05593eb479c4e1eb9137eb477f9d8edc0b6e3d12b422c40f64d5a40a0dc8f80e0b1485146bb58b221da1ca472ab43bb17d70af7874a5ae17a790243c3b0d30d95f60f7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080018bfabb9dd98b2a360badbc3fe779a133d757dcb30be68a93a71d6b3a14d4900b8de751d45f54548832b3358afd20201e228a0b424a5b482d715d01aa0b18c9d0300b7fb64c538e7f31ff0e94a0f42279e78e53ac6c6beef42367848210b675ecb515d10cfe85b993f6e31f0ea074b92509dd3b787265d30420d503a97d8774dab419bcae50b7008d770d50eefb8bf9bde1688174956a1c25c7ed5ad89034ddc7337ce120b753e90741ba12c840c2200206a787a961049af259fb49d823c7a6662276a9bc10f72156a9670e28fe301c9aea3d09b4c3426471fec75a48db13bfcf13ffa07ef5464db0514ec32fa919326932fd81a94f56ceb865f1d2ae839f6108ebef53ac6226a677a59b8231e8632fe5d81287c2e117033f1d1ea94b3d1b3feb6903da0e090e673d397edfec4e3902d5f8f0eb421a732b61a7be5a842720fbff519b47cabe8da52862e34a70299d25cf6f0eab84ad61a7ac47f501cd5cc44f8ab6c810de23c4c48249aad1ec918cfab6a0b3d2937d829532514a5121d9a55451926f951dc57db7cfbfb29bc21582f6d35aa75989d61b96c9735446431a2747419aae4295b2240704b16b67fbcab29df54950ca3ce3b9ff55f4aaa795755e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013f2cdf2f6a40dc127f759e7905b6e76a2ecfa9ca64714a8c0ec9392b12838227c5e75698aec0a4e346394085dd4b3796e839fb30b349c8350b8218bbf78a08d60bd65b5dac6cb6ff86699067816f22985027cd55bd4abbc9a3fc8157185755173d8ea2b7f7121a4607460ff4d1f29e97e7a55678f717fea12358ab7cc4d30128859cf2dec3a9d8212b8c8b7bd46775a990a0452e3f5ddcf410c6cba33cb0690d2b86026ad3c5102371bff3df8a06e80c5297397e716d71634809443a96e0dbe0b794c636f2668eb10b8db34f8a4d8d1fcfffb5952a8058881a28113f8b93f09f30b56a0b7425e2088fa50b01a53bb54bce5fa589ca9e97ed31cca6425a18cc1627e1b6bed50d9ca161e8fedf4a7378138a446937f94f6404ee98377c04f8d6f45de2b8214d8ceaa9d06aac782003606d7243db4564cfd0235fe1540c661bbfcd9c536537e80d5ebea3c62b686b62f14a3254e5d8f2b3ddf47fd72322dc4d6b4a3cacb6cf686fea88751beeb3f60a4f207e149556ddb335d4224404b72be6f4aca239ce959f53498b6aab19aa198782c18c5725ba672dca0750076f377877cdca6d13aa151f4eb9d9295f46106c6a647e30ddf25b3ef17d2bea00989b3d459170000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000210e33d52f78166d83df8ad4099a09408ee79fa75a3839487d5962e987bffdf63526a2cb3ca70422009d1526ddaad4a4d63e78b3e43be18f625a77feea195a61210ca1eef062cdf8781d970e21e7526697a53d8358ce7da7622c43387f5e5e36020dfe0a3a218a4e1c377df1674076a0a610059fda2e5a7d42e594c2b515ba6acf6ce2357aefbe66be7240e9a8905ed86d01d73b624d99295bbb3a684301dcaea01b0d2e42584120144b2a17c21dd0970474f597e2c0c522c23c0ae5681ed9afc1279f4a18d3f7a32d5b2b4d8778d793ed9f322955dc6964fb82b4d5e0b37fab8b9b9977c69ec4a9017c84a22a009f439224dd9b270d1198266129f3307296f75446845ab90a79389443bbf3b5c0a9bc440124ae0a164a533735a529bd45702750461317d01485cfcbccfcea16219f090115c47855821acf1eac1caabfb9b1608f3b6b779ec62c84ae4fbcdfbb405592df3ea86d3ecc84590f9d36778cb57b8435157991a5e03cfafa610e0cb8be6874d8be9d01ab0761b57555f52221092c067c057d50c771033ba98cc670f79493591996df3662303e42c48f20e1011482fbe378422e2506a322a4d1cc2ed26aa0dbfa52da3a92510e7a80e5ea3055b82c4a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2dd568ef8ab0bbe1d7a7ee912e608faca3424f579ad07da3894fd0d71b64e66a8d9d334df1e47777e4106089993922be8111bc150267345d62beecd7fdbd7b06f19e1132f90143dacbe274aea5aa5256f4614ee9a487c4ed5b2fb2d61a965e0853d0fa170cfdd5f42d7c2010fe47245328ea4e974b69030e3794b645e013b8f7c82633bf9f7093509310ba35a508fc401b5086d550abe6149646156b0f13253cceb1d07cda14391058ff68afe7d86967ddd96eacd9e59da8959f7a405dadaed62b850455ee75b0725c23a3177ef43a1451100589f42e359194a86bbef90e6a4afe00d3f7f354eba9d2aaf41a332a8c9202af8fc0b5ef82e978dc20fb883d537e2a3864f8e3fa7fa1ef18949266f7a846f90e612977c416309c37fd4b03a4202a4045823659c8b71551008e85f6ccca08c9919476334abb823d9cc2fd9b756652bfda42dc7297dc91ca3af8787f692988611d19db9c17d2a15c8ec197ff69dd11721342d384cc74f8671f0fc840dd18a0b1c26c42dbfad826298808db97043ac119d8b7a908d985e898bbac4bdd04433ba927b0cee6394eff81d5826624ad311fa07be24ccfbb7297e2bb8bd0ec0cc7f292cf3b73bfc4e1a43c5b9761caf6f61000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e316a0e5ad3b3214c75facfbae521f1a6e848be9585497c55cc0d15123824df6d1d28aa5c56fe80d1bb3e2284a80dcb855b2287d23eab8e15e3d9505d098e66bf82471a35237a401bd68d257615d6593fa20cd94f1af3e0243148837a6c30ce93ef812f2240215796769001344913ffc07bd2c1d564bbdc9a1bef0e0ae76166cec12c5158f37b7d91df023665b2b07d64915727c0559929c1e26bccfc2c0e5927df18741d53e186a51f3517c0128b3ef2bf7eb4bc7b2a4b3f6732627859f24a72f8832a52ee5cb36c454af8bd5753f2821f937095ff8d015134dcd238e45f9632f035fba2b79c06c0c62b63bbcf3d9e0778af6fe8de207c49d2b9af23ff35da7f8df1c1f5a6ec2dfe990a3751dffdab024f8fb6973e9a2596965c95c73719fc1bd0a99560128bcc24a7801f782031a654761a9441f6d4a627793046e273539b724974a3d87599d1e60300c54764cf5b12f9d49e9d7f17af57d742c7a04d9578d4dfa70b96f9883ed9811146774f925ea1d3094560e9c04d74b0b0aacccb5d33b0cd11ed045293025a36fcaf16fa88ba77d37ac18c16fb4c1e6094daafa9fce67e3b41289eacd0e08bc71da61022b27a2ceddbc57c2ac08530ebb055fbbf73400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008de8bc58568c880c854ecedc26cde78fa10db8b68c0c4b9a00b0c27a3867e5f64a03a98a26bf148a9831de757d6d488868452b77d5a61f94f45ed9b285fdc1460d6a58cd3e2866e9c125cc23d823a6edb0c8d164dcb4bcff1cfab9d41d73a3e452ad718ace08e432fe59c6a4ba50ca886435cdc587e29df6c8a9dc3d9d3e3d265ca10223304949af4b2fae4d64281af782e3e79a1eecb0965a4a9a2b1b19702c08a9790aacbaacf4c49ae23ad6d90f7f63e11a6983e20a24a033ee48e3fe8e55216ee5854db85b27338da55e0c531c8f8690716256c4988ecc83dfa1e03bc94274bb2a9e52cea37b49b3c4c3825dd2ea5f8440e7ef8782b9d81ae18e4a21e25c3f33c7dbfbdb8a0e1e997ecbf0643130b9489758dcd5ec50fd68178327b636999e1c40829c73e31c7e5ef833d14b586bfe238ad5b42b199ac2a82f402f32b4297efa767dc6e4ac97d3896728d383649814430a1802d37a6dfcd211cb1009bb5951dd92184e08003b8f87830c7b89fa4e65e234e6dd37846012337f2bbaed1560bd55ae9045ac13ea176b0e99684a7fb3c956b935415ae80ff7c2035bcb2edef93bd35812bf9b91372ba003d8b4f8138fa5c952c706a241e89405c22041d0c8ab000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098737f4f161162a37dc32fe4f5f5138f6a07478da663a515b20497e3cad733e895a19aa0534753233157abf06e1d9fe770e3848077d677b5818870e37481922d191a88da4628f4c95ee7ab6035b01669f5cc5b6ee8132d2192f9e977f86a6335fe7d42edeb3b55a816c90b5f107498ae2cb524e871bf990614385dbb3ed1618d57cd8ee3e35a31e72c4265947563708ac48fc82d5e282c583798298594573b3d316a9cc5bcfd55df1f2e725e2bbcb487bf5fef831887331d4b10285e5af42c9299f31e5c501de11025716c55e75106d8bffb052b2c294bd07cf760e702a96364b0ca458e10d719b3da9fbf4e6fa1f6c860785e081d47ea412ef920f2979cbb587c8ab4b36acee024995895a52f3a3b38086ffabfe8bef2fd4a03b1bb8fd39ea881441efc8b9be1ffacaa9e2c53d6d49bdf884d572ff13dbc31f12884a082a2495ffee44f6f3805d4ac8b6210228189f66ec6b2cdfc9200898952d6a7747a3cc22366e31d05c67d4499a2bb559d1ca8e30a0805f94e410075e3d1ed55372ac661b1cee8eec6e47d0bf722825bb14496d16904a0d0f67cb0dfe21aa496f56a1858b2a049f2697e3437a2d5c683edcf1ef9f1207ecbbae5a214d0427f27e50756d30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043a2d237be846a18da2212fc17497b514c34c57c05ace808a6b2495cb78f578d6e1c82eb814eb924d326148391fb05a312935051e77de1955c528e6858c7eceb73c3b120134fab8835d7ee78caa486be01b3bd9e389f2f189281c505caac21b30443d8f3f5d9f88df405ccd5dfde9fc83403fbcce10dc6d2098531fd7909d816e6fdfd164d0624f220e0cc771eb6a2eae72fbf907d7aea5e97f69c8831b98293ea7139321fa3a92e273163204d4183cf4c75cc06ad2c0682cba3a310ea7be3fb4af57c5f0da6bade4df3edfa591467d2ae1d77a893da0e39045a33cc7fbe8bf5a7a51f14a53fc92949df15ad27aaeb8717346ba7211f4e087996a1436c2b15a4cb1da3ff09807e4cd73409ccfc39118f0ea8608395d457beba70821d9734e2d54328d9c4c3d3628c8dd832ed46f7d7ab63a3866f6851d92aba0598789d9495b54ae4de59bc46b1516e2dfbd8e6f78438c26faa3e0aab49ff89d561b3dfc016c224773d1c544e1ea38c432d22b476edbdf3785ae74f3f649bd17481f11ed8303c776c80dc1ac45a8b5093ed615fc3b5b419f45d2a0a499a600610859495a958a966ee486d62c130652ea09b9db9168e883f7cad98820eebe76302812088705f400000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484001e78d3907076ef0e9160acd6b1d1f0a024e81fe487d34447b12ea79d07b907c14654c62aa1f513000d211b931d84d5577e1c01026598bb7f3986673465949e117e5f245ff7a5664653d7e560b40c456782976232f166632ea14d51db562bca515e35c3b5b8e63ac5fca0aa7df55b60a774f1aedfea32506ad89bc01ed4948472ce5de2e3a491cf6d043612fc489b58f66c40c9e73308f1e037d8a43aee1b80905247ddc9cdcf4728e85c659b9fcf50130111bc98a49b20fc7ec11b8f50f0d7a248a70dbe59392787e88d680fc56669e8e97f41dce09e58edc7611675a7489961b50133bd5ede23d421beb974fb25bcaf5dff30ef3294ed109f542f68cfb09d41bdbfc64364160de4fb8fdb23e677d7fa54d37eb1cad88ae099e08abbe4c81c12920467900cc9ab0499bb6d3d57fea9b8cac74eed7349591bdfbec52b42816ce0c38ae5d7270801c6c0869ca6053b63c987117a9e154a7c58ac7aab336ad95420595c612abd2ea272b574ae2ee3585e9b4dcdede6946cc5355e492af721cceef2d3feb595cb9809981454e6906d081cfaa8de2d4fe8cb4c3f377ed89d09b6f292fb3e187f3d91dc4cf325003474333f6775fdea9ffb4f777210c332681b22a7517182a4b9c0a807dbb0256b7533dc84aae118b9826b706459fcd46986252a6230348feed42304638767e73bf39131f2186f653f0aad20c5483b1ec670211b4111a53060e273f7eaac0de3e133eb339ac1746671ca23ea2d4acd6ad8b6d5ab50e29a31e5b8672c76d67b4cc8a0e633f670b26aa0a9c41937360ac0cfb7744d0fb193f42271fb4a9bb3833188a6677690335bd8deab84e195a8ae488f1fd4e8ed01ff325f71782742000903709b31c8d57a12cf065114aa7e0fffbad64718bd0f810e6fa2b34b6f1e9e1749ca3362bbfc40a1031fb1b9436fe50731288cc97f3a61e18028c40ca929e5dc1c97f3ed2b9329890f38247a6bb5e78c2fd2119df2c782978cb38de4a36d869a8c1f8f4ddf878c8e1f50a6c4bcd5f2a2c3a2b7e80bbfc0219c5aab770ae6ff95ca5da4790142ad7640cfe9af506e003fd4bc789a3284a1c64729fb24af03b0ea1a23ab2dcb48e930591c723b40b65b997d87b6b7f5d7916a800f1864d2bb0077563c0c650481b3834668fbdcfe34e79652cf5ce5cf06c15ff9ecb9545e73f6c09ada0bf276e7cfeb1685fd4fb6cd0a6a115381614f3090b3b1e8393d9b46ed4b0f081ed819f0b6a363034818cfa425e39ee3834d30fbc278e89df3e282ffe7a75afdb83ff7f10e915a26f023747cb899ea1f5b8ceafe6036c38bfd59a84f2b4948e4a9c9c52ce4c18991ad489addcbe80a36bad3ffaaf2d08be6c9d5bfb18250a5a6f0980e2477bce7d81a39d08b7933ba7d733736d2727b8bc26ea206cfe53dd45f6fcdf8b82786e927ea073c90be207fa99a3a7ceba1f804c57a97597ee4fe32a802cfd8dc9b69ddb37becd9398d8c08328c080f7020abbfe8b07fdac61c8417f7182c1b8d6206b6891e2c4235536486520ed8834bd24db428aa61ffa5699fb32905ca6359b7889e210169955f9db9f1bdc5731af4c15ea735d30b81f13f4b09061d4bf881e29296499d133e27896b7ffde97341b6e1a7de22f097477c70986419ea8f2940d4d4a6e5b24522d367f6fb2e47a3d902122071d04c5062403e80cf3487f8498f860e5b70b546843bb450896721e79171515a77560213ffc81caf395557ebaa8a447589742af19221238c9dd8399d018902b90eeea401222fc39570b5f8f9d46c3287a328d8c9e3254efe5163bb765006d1965008d406fe96b01e2a88ab4c2159e55641cbea3d59b4fefcbf8f678225a962cf2f47effa27bd949e8b2bd036748899ecf10a32b7106b7a25fd69e212eeddf1e01f65397e2987d3bef302cb35a466e2126bcd3f693998a43b2adcc180dc688304f9ef75076b22836b937a4ee218eb93dab25935cee2d4fc9a5d75521c62b961b0adea05b89a3526d5b6afd310ec106dcf437dbac2d07e66c879b65f385fdbd08094226e3e408a2bfb0b4ab631dfbb69ba8001c5914050909e3e68044f5be16023c85b4d30ac4b5abd1356bb24ffbaeeba2b94588cd5735ebc8f691dc485906115f25bff142676b29ab84655369274e0988fd4731be41aa4a84355d5d9dda6012e085ee1c8819b1842c0a1739afc10f64d2b1d8ff96a6b942ea3d1aa6e9d660275e9656a29228aa95f40560c5b9fc878357da0970c149ee84834fb19b96cd841a39461b0b4435cb2515338707510f18416db4e73354fd8088ba1a856204d7852f5073b82326bca1cba531c26cd8e84e7e115cc1e4a83927004b5690c6c72d4e23a00c2808a0fabecfa037bbca769ce9ccefecb2017b41ef8f15d5d7b41717df2d1c6554a4b0d957e5de915887d4a21e78926bda9d04ebfe7a8ce9a56587d6390bc46373efa567f18461d9ed64bf5fc545892fafe58ed57ee54507853504f4e90ba5295e82dce2ac9cc86efc40e1a96c95351217dbfe1ca6721b0f377034e0b824fa2f4d5fe888312688d336e6c61222e9443e806514aa136747d1e27e6538d51af814a53aab9ee452de66049d40cbb3b57fa89942e789e9d6c79b42fb1cf0250ea2486b156a41e15fdb866b903b793053cee8a7a4d54e236ebc2d79e45282840a6fb91978913cf17056fbe1bd72504f529262ebb0468d24480f673531f3beae0ea2c06693572a7bfc099897d7c6f8a27988149f4b5c25fa30893c596c71adfd0ddc80d905147285025b68f6bca1d37ed3a93ddc231aa5634b0c203b346219ab089966c0869452182dbab538b4e0f959a17794cfb3a3b5ba75351e5257d3802220fa2c35370d377b76dc160dc8b64928468d3ac57383a68f7fec8dd041ffa6cd40287d62f766826df1e9fe94e59558808d654c1ec4e1c6ac283ab44fcebf4906ac1e7431cee557221b131411bd26f89824fdc43a64b4d885c90d9926159c56a960088dca9f2feb81d683069dc824794ed3e5d4f181500bd2a172bd86b760ed2d5a1a94e6290219069c314f79724279e118bd8a2835809e2a96aaf937d4cedd5a9c252e3064f1d8438c51daa9202bb8ed51d8124f26a1be02b9327b3701d9d2924806f80af6e86a7acb2f8cdc7f30378cab6276fc5c043e389926aeff0f557d9a8917947fa6dc8e0909ea5bacca59c5f65de8d7e98497eb4212d80b6e7c902dcca626fc6f182795517098cf8c5915f1ab24eaa3bb0b3a2ec05211478ba4208fd8c51e832652c8e3a16301be3630ca010fe8801e41181fd72ed041883be70359031c0322b1012910694fbfce37b679fef85b94f7b86ce3fdf5dda285b7859cfcd2e50d6697cbfddbfbfcbe494cb8a00ab77ee40b2f7ab14137624749645275534890170a5b5126a7c9b803be51a4910b601c78647a43eafcb261e725ccba4105df590055dfbe3d98d4cbfdf424ad1b8f60b2a07bad9a0c12ec2f18416c82f10a4acf1ef87fe5ae4a359232c24416856ff2efd4841da84460e654deaed97bbfa75a0b11337d470ae39c3981df70547cd84ca3351e384ac1e61dd8676f087c8ae988b82d267bc1bba8fe852feb4a8d489cfd3cf2c6ed7446a9e10ae654b497df2ca7332ae37705386df3acb4ad849c5ffb66cf3f58dab72eeb8a8a3476ebaed66eb3aa1d234c4827a2de2c6c4afa4b3b4140ab67873a20cef4e094c796a38cc79302f022358934f0ccc7484e4575e885382b4bda86bf13654db26b50a33d30aa4b61db2fe088919b1f4ff742552c1996b07ddd565766e62adae89502066cf46c6bb33014806cef5a70c189b017c81ae3396ddddb89974e34c2414ab08242d010ea3fda186d6c9dc32fec2383be77f9905dfd2cd4b88b6252dc1bd5e75d7e6840053f4705e882bfab6af1c4ed8671f26b4bb3bc4a827e6254be496d1f4f7c2a89329e2e01d2bd2738299b9fbc8bbc7b0d22bfda71d94e0408f934ae0008adc7a070c41608a35f59fec86448202e530af4daf349b7aa7fb57155b9f9d4a2f1bd7045d54d21780d38845f26b4d82908c52e00ccdd9fadb8a51971d0967c3f99ca9de52b0b02fc723247c9c5c979600a8eab4d69a6d64cc7941b7cc244196cb7c544262ddc2067b006fdca24298e151e4cb75711e180e9a97fe38572686ffec119c344d358286e1c8be7dd172d9b1214b96ba63ec85f7ddc9cd9e01c0d805f7050f3e5bce226d66b586feca7491e0fe89bf8b6b68359b1f886ac55ffc32828bed8d535ff1829c37ed66b6c6010f11ca083308eaa930ce79d2a95b855d017602edfcf1fb5b72aca8e8fd6d873c96d78ab9bd8218bf07d47f0269f8777debe4b016c64be1a2816c84773be8e06aee3152bb7abfa67cf4ea14f39d68ea6945ccea73142e4a3dd18dbf8939b7b6b92acd3e72a925bd5fb0c29212b2bf2d52423c1cc34d07c93662d5012269c7860a8381ee102958df409a14e710354874a929d4298a968a964840a9d76f1115779c786fecf8ba61a5080de5b23414549a6d7fa43fae124fc33cc2784dffd43936786378ab7c0cc195823a2c0fa3592292d00e790397c81ed65182071686aba646e9bc48a94c00650daf4f2678d8db0d70cb116d5c554ecafacd61400aede6f979232c85c1c29e64d494626e8be54460512aab89533a1ee8ba7792f61bc471863fbfe06d13ce6e504ab34d07bb88161065181a1787ea53ef08f4f0d56f01f454280ac897a02730b38dce6cba6505b8da37e4d0a026f6811251ef41ac6b38bb8e8cb8d3db3a6ed0bf57dfb85a116f9751d3881884b590cba434e410e674a2d605c2dbd163d9a701153f1436e6ceb7cfa0ad1ac15077a33c7fdeeb80dce25f3bc171ea6ee3423db368ae84a74bc7a24dc850556e01d521ff6102703080384262563f7fba70edabd5eb4b50ad437db1b2f35b758b6f2544f45743e9f2c37b812c190d6f9a76af8af1dc956dae07a869fdc5991a2e74d65532fd2d9a01db86f7d8a03e3105b901a62780ea93928cbfefc223f12265557ebcfa428602b0a816cc07f33f07f7fbc087161e1c1e29bd56c147803710c51ad70bd206a1564009debc5b3e9e0f52085b467ac4b9ab7b58ef520ffa41be411cbaf50a5a7fcb003f9d9b1a4da7f99e6a1406ce3dd53db73f7730d99ea021e2f861b193cce1cf1219c1697036122689edecfd24cee996ef608265d9f8315f405dbb13e9c9e95580cca43046c18c224e2e5923cbc3ee897cf3a5ebb403b2a17319be8b150b9b9da0188688bb42c2316450143e10218c8c432c9363df6c6d569fb70d3a185ae789323923ad01453e5f5d92022cc2810d16b3bf57323f8d4e934f37b77710fd420730a3fa7d1b9186ce82a68cf6a6d34ed0950c4ab58141b05c3fe70e5dedef69bc80a691d27768a9b2d49c7626f99cf70afc74451a72a7e094177c1c8299b482447187c4ff4bc72d02cbec13d4e9565e61f0f4dcb3f185b1c43ecd332c31f66312a1fa0b3149e965430d09d7bba8735eb8a9f2022caff6e876d370fa8a5b1fb6b4527a907b930dd4083ede433fad50a08f0f8caf10af843368e8f09dc7aa9f340282c274640d2caea7e0e321e9eef32c44862d7e6191fec6fe9d23affb5144f7cac1279871c993c3294f5502194edf7bdefce8f2ff76c80d8aac3b45c80d3fe2eaf13b1f011d424905c804becab364cbf1245e798f293d68ecf1a146db6f477dbea2f3015fb7351bf35361259a6680cea841b2401f00e7a315ae50bd0b8ff4d57910e948c4128505d84e877dd0015585ea26f8f319d05ec15bd5d96a5807c04033a003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000058118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000580d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000580a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000580b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000005829a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000058141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000005825e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000005812978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000582daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000058189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000581159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000005805ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000005805c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000005814d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000005803db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000582ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000581213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000581ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000005814fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000582b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000058305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000058280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000058223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000005817a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000005808858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000582618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000580f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000580e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000058172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000580b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000005805bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000058137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000582e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000582297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000582608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000005818373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000580422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000058204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000580afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000581998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000005828d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000581da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000005821d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000580ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000580e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000058107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000582f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000005809726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000005824f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000005803c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000581fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000058205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000005825110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000058283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000005821cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000058094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000580c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000581f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000582421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000581fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000581bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000058304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe50000000000000000000000000000000000000000000000000000000000000058000000000000000000000000000000000000000000000000000000000000810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081040000810000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac64fe3016245f95f7b81e0778ce4789ce5347f15ba5190cefdf3b40d28263ccd6fe52f7994c89769c4d6996cf3a834cb7a62c402ade60f7f388b50cd7d77447cb12f45558a85f90c775a7c06c8b83d17378210d59dc42551d69ac844ab6315beb9963cea1d17e6735f284c41216507dbea59b2ae875f43bc2c40cb571dcf3db5747c2e5cb6ea28e0b04d1406cfa45120ae6418e8de6acbb34d9cf3ba0a0e2e9bebcaece4fb34b9d2554b5ba732198b568d34910d8963b1b863af756274392f10232f592bdcc89d23503b3c61cbcfdecd0c58f6ab514876c76c4149a602f444cc6b9d179b7f54ae7b5f0df8ec3a4060ef2ca05cd35c615155289d88eafab7c43afc9f593f13cd1f32ce6f099b83d594129b9bdcc519506b5819345d8b13ed3ff766fd7ca31f6cddf1b7e37889512aa35368c76110121cd801dd54ebf3646a11146c0527f99d795bdd1170909a2c5e9ca4b7cb1cef84b75268303997c3fe9cfb1baa397ad32b1a046e01adef760165f4c32949c2b5ccaf883ea9f72b52adcdd3f6edccc9a1196a497298bf7a35b2968cd9cb6861871bcb5ebb10786066743ad9080c3d0988874e5d9eedfb27578b9be93ef32a7fed222360c4df9ebdf1de626a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b8d0f24b89e93c8a7129b66633174815161bc8bd7a1ddd7c27ee79347a9cce20d0910812c741e7a907d2ef927c7f9245cd122fdc5ae2f1718f241b1c3ac43616cdb8276ce7d70782d0d739c8d24390b325b956fe5cffbbaeb713141bcd73528b53ea69ce51ce8095a501116eca213539e6c24b2a02c49fb1b032f99adcf77e66fa9834a8b9d5d755f834ccd8d1998061920b4827a6fd9a5aa96d5f8e7a2ef810f94e6ad1ffabe9ff97c449da24f33010cde4f0a843911335fc2f715266fbe06dd5cf67210ecd59f301cecc12ed9882527cf9b79725b183db3d40b8342debde872e20ba2428384edd1f784f103e5ecd5c54b51d6c3427c881bd960d8d8c4d257f100012df7b2ecee6831f168c999bc3b41ee6e06efb09de32dfb715df3f2a606f05a034bc123e644ed212ce9cb889694f55f4a98bd7d0fad8440f457b99ef69fbd01bf431b34060ee1b9aaa54f3fb2e5f2243c75ec74dccd6ee0c8b843858c979d6feecd06a32b54635540fd30962e191485207512ccad40730b9d28126da011a2a597c7269faa657d54d8c46ddf6b690da1e8798d8190ab48992f7ca2fc155c76bdf49d3d904b8d1d818152bdc0e9216bc3916726bfbdb3d12ea715f4414c1a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a91b589a8727a62900f740466af0f2b194f0e8a321f4abe8f05c30d25eab5e6a2f056e518bb34edbed7f3d8fd75d934156c4a873d29b138f146a63c08b9d42445615e91634e54e01509cd3a67ed7b8e58f0ef9c582292694b75ab4ea96875accdfea22a5fe4188ff92493c1629852453f20dd602418164620b9b3b939c3cd7c1a61e30cdae16c3af621a14fb80351ab7eeddc257a0d1453f46b42490587144c98c64ae476f9d40647b3c29f42d06a6663e66c1809686b3eeb9cfa7e38690c75b1bfc31af1a4315b91fa716f5a18ec55611e8d1724f6864ae679d6e0fc85d8a9c9b6a873612e948434987bfe65b5e0d50f252741f83cc17fa9e9884e8be0ee4e6d41366c7efea06861a1520520a06dbb4f504473d1d66bf2878e4824678c2c4695b9b379dcb80e6f61cb2cc94697042442d0f5a491133f80bf863726cf0f150c87edc8703c968dd29fbdd9f99f91f8597bd19330e91dca9dc2ff845a895cb138e5e9a40566485850a97f48f894421038b459da504a0925e8cb2cfbd1f48c7bd4ba0557618877da984428281f950185b147998283423427362e5c38e30a10f88f4b216c0e5f5eab6fc35557c0c321d06c64ae3997e9b8d5e9a8d833ecd19fa236f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1c101b93748b2e1e4b68c716611b069d3ca00b0c31f53693ba0db867b2eab3a794e5c3ad5ec4e6959e8fc26d2f8641ca26c6072d2b91522b6aa36cb00e2bbdbe780cabbb9acb2dd3673623bebc648ab98863e6fcfbaeefbc8a7eb232b9ae469c420797ca477f6835ae16d0be30bf2c304a26fea20b12749a1631bd7754243b7314cea0483d3c705b121963b13cd76b1d7e377ffdec4a25ee133c939c730962042fff5792a2e74ffdefe63f8f5df3cd05718f3c82cfe1ee7bc05e8a3922354bc219dbc14601db740336e5e5ab3f5de10dfce668bfc9a7f055559006c85805dddac0c0bae4140820f7c61b1b42730d6b29f73d676187d3507cc438ea68c801c4aff492880df819c0a29fb77f9700ca504332b5e144a48b2417661370bbf410f9cfdae388864e2a6e94b2e3db607d88f6efe14c08f001af39eb3787addeab883c9dc70c99d70c7ffd7a978d86e31f72529df1e77dc0f92cc8055e1d4d57a0208cd0920ca3968b2d1c3b471d0075bca144785dd6a8d5e0790938ef51e8d5ce18aa199e3e12575892e6a51b98eba1d9fcccda3e6ad5bb2d66c650ee79f82eba0eed9c7d2c36c91ed01641931881d1d479892df7eced5655d38fcdd14359efa6eff9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089553a4fa598b7817bbb300fc2597c8c1f22242c359ca2d59d852d03bff9ae970a24bb55dd0a7274c5a7fd1c174df22dd4ed3bd53f81d335440afbeb085a7e1967429fa286a4562cd3551cbd858ece9815a80245230bffb71f8c1a1176682d07535caf68b451104d68c4a95f6ac3cf68860331a7adc72ab7e880f3dee0ef9b00382f8accd132e8e11a59e31f6ca3f5b62df05eebfe94466d561a802bb4633fc8703bee332d97deeeef886440ba7c6e76ab018ac9ea9b2894399059ef7c0aa9ca40411054aee988d0cb3489d244b020404c87d346051f0140810a2d1779debe30700f8c2a3c5933c0e8e2d3ee9bb7533c4b32e26fe639735c8804456d0e2700955483fc7ed30bb9a65a333cef06731f0e3faaf922e201e7d3ddb5997b5fbd6618dda70404fbac6ddb2424d8144926011870d14a977417faf69f11c882bb4de89d1a78b413d9d59eaadbb68480f99eb5b4233fa40ea6acc8b92372ba320f6f1bed4503266c1bec0fd2c6abb4c5bd4470287e6f6bd8a9ca7ad3005a8fafa2802826ffcc91701c908871a7757268ef86b5035ae1aab8301dfb23b86ad0a8538fa4d02cd482e6e9f03f91790df134109d5da6f0e3c638dc507511d6fc24eae248534500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c6a74dbafb6bbfac8ca85cca6cdda4f03b534d77cc5056da23cc2cd541557d8ca5d241d791b3ec702d5671dc3663c40513d1dc90fb0c41feb3702f4ef908eb927d867596450d61ca1321c6809a9367c275994d75045d9fada5f358cc820bba0d45e9f14f6462ed74fee0144599ebbff3044b619dd322dcfc7ddd9f0a47bf4a1db75e85aa34b9da01c1cf81b307d9b39840c367c3b54d36ad3e1844cc927a9c65cda2ee8cc76c682c09926df1415bc9e5ce5d97f7858e464cd19a6f60eec906258f9480f70dd8deb9ab51a2ef3e65f4af633898ced4f285d71bafc8cbf3375a1674dcad221a131b5552a1854ba0370d3c5b4178fe5db9d728bf12b426d953926c8d288cf2e5ad6fa7fb478d930793115d8e2b93f4c7a6ac61b4c51c4acf888c65850382ddf136319438b4f264adfdd9ae7a2a228511a4f237355aa8c0eea4259d2e322c021be0fcdadfb17ee14a0a6363597026eb644154bb7cb7776163a02634a05f18704f1269a5643b833b00dbbfbe3e11298f1d4f81916e6c4bf0e23c4b69c0e89c44fcf182e352d7f00c36cf5e65b4d1c27407152e5f1e1cd5d5d01f7debaf4f69262a8571bd0b2b47763ddfbe92c7682fe5dff28c47e6faca9214d1e9d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000275e34fbc381559f12788caed2551520f477dd1ad0e2cdab9224bbe60bb604959b81a68724850216d87de3287c5d5803989ae6f9268ffdb1866edc087773439c5515ea2372263adc26a4714588e9e480d08d010f4ced788aa92086c38c504527182a6d4a6541b9926a73bb4622351d9f96b9d4d0ca5cfb705638cf70f4cf0838ab90113ba7ad2a60ccc10dedbe64fdcaefbffd3a792a10583269b8069531a608c34dba4a14b3ebc3e674c8560fd8dc40ff3871c210c57e9250063598ed7d143fd65c507260e0ac6c6b0c8cea98651789eb601015af9af58b513bedc527c2189fd67b1d0e37277a56db5e843d1302ea6231f9ed0806caf6b7df61c5c448c40dee0bda90e118c8c4bf6e012d01abeefdf6ba869aece34520fbee23c7974973e4c20159508995f25a4756f92e8788396d6b5efc7028071617e76e0e0111d0869e745732fdf88e8bfa0b2767488ac675c278e4dd004b385af5a1292f061325bf38ad1fc85352c49547ec09caaad4c92013efc41b4d665eb2ba9192969eea8818626356fb10a90164223816ff96443d8b63cd8f3aa7532f2021c23b8047b8867d26837f8819fdfb2ea3b76f9cdc04fd4c25b69e4f8343f9afe6483bc27f892448b64e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008257ff9c9c764f1114ec0549fa3e8287c4bbd76dd3d2116a18c121fb23cacb8533d995c6a05fb55240ca491e3ae7cdc69e7199f2e71fc9a8c2aedd2b8f73c1041278d5c2b080e81098e6ed301a04c678482ae0e195637e556752a5b959921d563b5e326c1e804d5e3b4116b4df9615e19dd6860d3273bcefbcb2c160521a2ea5f401482e7025fdc179a86a858571f59de206c5472726d6e8bc97997d1f17ab15922a5b866d4edfd00de4d5acd3406b0d3df77f5cab06c2f88021b3defa5d4d78efb6cba39120ff3fbc52f0943c6776ef49a02acfa1533affe02997a9f8aa41fe5da481e451fa7d8d796418bdafe4dbaac009f603270d98211015dfe5cc67e9bcaa0c2cec9ce693b8b2a793bb306b2eeed9a2ecd4e41ecf5934b860a74fa439dfee750bfe186fca48e718046cfb0c0e824b6c3113eb4967b299a6c8beba90364081721aa95429a5587c171f22c4a95d33618ceac2cc28b3ad29296ceb4ef44d7894a6149589808d7cdeaad3dbb57416f4604ec8e7a73b88b90bf7f9b3ff90ff9b0cb137cb166d4ed2d12e30b983084dc61d00d372cfa6ac217fa66a1ca090175a1e373cc760d0b12f9dae1eec5d1e926ccc7cb427c06fee647c0c013cab2b300200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f760bcb35fd2094036d6743446949d477b8f2b0f86411827778034b9eecd06cd1d54d0b29a797b895a5f9835b274ba1fadb9727895e989572277041561767ee844056b93b501ccb7449769752bda73ecdad3b3e49fa8aeb7351637f45b9cc3ac0cf5616e6847ca3336af877d52951b14aa10bb07d868e154a393140c165315cd3b3ae0aacd9fdbfdbd879d457d5fa381697b504120612cab96eec7b1199bfec2dcd20f974fb760f012c04f127c83822e06ce0efb329a79350b3a1bc48c87957dc9a97dfc7ab97df22b33df7a3fbef4051ca18955c46efb2be83a68487f5af25b8a258c0c898b19d79f3f8fd45c6f14c5500458b1374ddb7946da618657b02cd47f42f8472e161604960c73c58ca46af92266c00b3cac2ec736feb2f07413096c38c5b6ac330a4a52bdf4883542c6c8ac8b5188541410ed4fd51292f22f6392466a97be28b5ca8a6c1f010608d727d42cdc448bff8cfb09f29ffb107506d0f7f68c8d9fee263a5b8ceebaad3d984216b65993a5d37d80c5abd6101245004000c354c6c378e5041c181f406abd97dae405aff8002d283735ac90f3a7910b25e41da50587416430622b86aaef9639a732b9eb20cb46cf8b9d27fee7c98a1f0062f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c458d1c8276f0fec08f35d2a95ff703f4f88f34ab3a6eb9a5574f5ddd405a5f63096773a3da9a5ce2ca6c9217ece1537fd2776da17233d09a4c6a2bfe48c2e8a78e963b00772677e910d843bcdcf215cf69eec9a2cee1bc1f1373084924f0c97d117ba71e3db8760123225394025c2e4829b69fef9f1042486f2c8ae372e935a34f8eba00b8265f505973871f79619386744dadb3a4847e01567e88100846630f6839c397362bd74d52185b3c636051c741c278c5ca12887857fe3d73daa3b8ff2accbbf44cbb6bb4d4b8ba69a514412b3ea4a9a217e689a97b4712e5ab99a6cc4b8a4fe6f7a3b56bfc5643d01ed433bc9e582e09b73b8390f0cda1083c94073542e6a0f0a35b3254dd7bf545fef7f8332de824cea3d20b366626ad5eecd54582040995c15753c795cb8302e334dcb61ca7751c14278fdff3664c60e2d25efa40e57502a45f5afa4d554b6867a634bde191a862880a4e16c82eaa88cd262c74b259755fe9241b71edd3650515514e5f4ffc1366bd88918d4072427d8a3f2743ac3b7927411851521962e311e903ee2917746dbdc21f90214e6c9610415b7e644f2a07e6b559fa1f77c9fd701b0e023aed49e2229b61cd33b10c6c4782f6410f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d5fea9aee36713a64e862c932e389db8daa4d5471aa681121a3d5577c44869804ce100ff947592d75504964053a227af6999a7737a049e11333c8504c64cf48ecc2b79df9d260d4462bbaf2787026bc6addac9345897c15d6dfc86d31d7e3549e7e935fa67c1266b27590b33ec073229c81062399fe3235536d11bf6d790c3cf6250230404a83f598cc6976ffc5a0160ec88c05dded469f3553f1bce32e220331ba0d322f9a234dd9384c5589b31dc52d90506c70874aeb758c5f54d72a0325e5aae234983c13c5554d90aba35531dbf5156c329adc4778cf6458c072b6a8a8bb7a281ebb308f1d38d8bc1f31968380feb8b052561432bbf8496091310c9535cff45c488575759e794f9bc34950e435c7cd2de1ec1a668dea7467ed9f7dee025437675ec60b1c20409af780e146cd2904131326177bc4357bc8af710e7b9d114f583354d0ad96435941809da4139ec515258e1fd30081af7c4cc956ee1d1a193a08543b2791936dcb277681232edf60bd4e874de28036f87e8f380c09e7b35cf03a32b579faaae0d992be54d3107fb134b460ea627c93c58bca587ae50f6396529ac0de48039419a6a20dff1a3d9237715ab0d98f3509dbc69104c92a41ab0200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cc5c6850ba91f7b59e6154258844804f513c69b9dce0399e35a9947d722e9a369a2c79126370cb2ac0440fd4651cbbb9fe5da28fed977a52e6a0354c6969188cce40d386c45185b34ec8a8bbd3b31aa2a64bbeff6e9bdaad7e266bfe92ac3725ef915077be7f5e355596973aa3c2db8d33bd108a6f323437e231e4b871b64099d5925e182aa1214f28e27739ba45ea4e5a721b9a2101053659fe6492d4743f181d83d86fde3fe914e87352b87adee655012e147480d892c17fd1fe252162044043b2fa3745576c126ac8ccae1c6e6eb15fe5bf26183f4ea8ef069f101a0dec3d550534e07beda2ecc20dd70a2b3428e0f6fa7d73a033b0b5f3bd907972bcb7c5a59578ee51b66b8f0cfa721eb4dc50c6290a425a17a3ab947f4f2695357536bb60e224bd0dcd30c0e3abf2c755ab42551c42a48781436bd00560945f657aaecaa87a78da57f997d43b48bee9296e156322a7de75079aecbcb1160ce8f3c6fbfabf8b4df6bb4ac213f67902119ddd6f49ab4abb2c6314f6c8b6f8e0fa88825b069fc1e455b4737f5cbfad37ce1753b19fbdb015da2aea6246b8fc2e1f3804daf6a5d4fc68b17d7372e04452087363be8138500397f31879678c24bc7ec8260ad0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a924ba00de9da41dacd35cf948ec2db33c82171fd84d43304733ec3950f1a5976c082debbcbab4571cb6f8dc7d13a958367b1d50afdf085f755b6209d9017f0aeef1fed4b7e77fab6569f7ca5fe974cb8ad7e82eb5e9890a5fbc6166a299dff9666f6a590c05f6697846dc9128465cbf3859830b1346b5a4602cd10654f319a6b49ff599f57e19a7029c7525ee77dc8a01fe6407fbf4eca822454cfec3a7dca3763238b3d713b2814827578af5cf206ae2209e59dc33e69e6b40957ea39f0efd5dcaa283f19fe8dd928ae2426671c42920ba0783efaccc17868b9295733666a5478464aeede0b99b8eb199f6f75536d3917f3c371be431813590dec4047144ae7b5369cc64c003056aff8d2a04a168ad66d7d0a6710f4627f7dfbe8e58f4a78a5a2deb434743c8da36b0768777dec42b45ecccda01af8c31f6593cf0b7dbf103867117aaada819185a738f3d5672c76e30fa30d6f953222d5baa8e832b57056bd28ca436b3114b6a475c969ad9c5c5eafb670a8ef80207177ccb0d1c1e8676a4323a3e2e08f4ab788bb8d3a4c198aed3b0825b3f7cc0119d9654345c1a9ed12b094660d84b8ccaba14b11e3af167752b95a6d1e2a3b85afececbcd636b786d4a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095225cb3dfb1a32626667115e1e910259bd5d8f26d678112b7b924b4d1a16ddff3bee7b7533a85e86911c6428a2f954c65ea196dd46db0ff591d602c62c1dbc242f2ee007b17f635727e2e28f3c1985efb356629794ce756ea36bf9473e5c849c64c2e3ad718a1a9d0a2d277ae903872430068bb19b94d1ca6b8ed95ae28ce40d934daf8a371f348de826343fedb2fbfebef04e3d6dfc1e3e17af66917c1ad4d00d75cdd0192ae15ea349f4afa59b733c937ff928a11e713c15539500a7f52dd50f62f942f1b43416b98c798616fb2f42325c583e61150d24057fc67f2d42a6e4342294723e7a51742ee85e4f5686a9c9af70823ee88cd006236b10cf9e9d5350d3649827e27511b05f7bdbe794d0741906b68754a78b1179bc9c1e479aa3a522dfbf2affd9dab8351316a7a875cf966ab0c8e931e05b8115d63ecdbaa0d73c069b9e704d591b96af9a750ad476939038d764c556949ff87c8349d7cd44773d0737875077520f7a8acdac1527b61908c55f564867a1afa7949105e3f3edfb6d782ad7e37c9d15aba981c66a4d6c3c85625180baba80f09b6307cdad832765c5538fb3dd5ff57ec30dc101f041aeb22f6cde195f58aad9c4bddc5aeafe4b3e4ff0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a93842288ce0a064f99b31d9e34d2a92cb36f30bf4380428e34b42a5dc55c959ed20dda1c4680ef3f59d9ebc9cfc215b64a5c18e335e6d2cce0603bb13fa1ae71fce5cddad3b1adf4405c0718212519124b8132771c973e58bb632ef41208951913a379161648a3b080b8d3e5ca923bc8c4ad36ccb4e02157956916f348f8787c8b579d1aaad92a7c1bd231909d63b6ab055bff6dfa3900c66f613e161d3cfe7d881362ca6b7f5053a559233990d8a6f053a509d10c39eb49af3b1c822d3aeff0cfa7b1e3da75b7725b8435760307ff2c63f11460ed7665d5760d166856be4eaa0afc4c167ffed9af177b52bd66911769033c388c068f2b6a6372ee7814f1161563164016415825b98e8fadde38ab65565c65325875215ca15d3cd1c735de683ff0ab02bde9bdeaccfce1a4b91112e22b482d5fa59917c3c0e3aecd99f64520307b7755d1a58562eaa03cf2888154c002fd2a478f59f5a6d9bdee8991686c7a64fff4ae413993dccd7bb5ee1a5b3ec6aaef7f3eacb0d7e8141c03fbf5083b1f5b088db044f4a8814f5ac2762a7961d638c6483809f9be028b0eb94440053aab4615115a010c0ccc16de9ff1cb84c8c9f3fcb05d7cb2623931ecd4a56b7a1fd0d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097a25fa4882c5e7c0c5356b95850d0d483ae563de2585c91504d6c2f6c329b9513c5d5e8c74c291992bf6d286d7159d56637abe7b0498167d082412cc25021104e28cc5fb40a887b772bbf81e34631351ca346553f0687e0a6200a537c701a03566a3a7c97c442a0e46a7b2b90e331ce26d6fe7a7589dc5ef381934aae76eec1188cfd893b9cad2dcc068e48d32506c081bde4516fcaae9582f98a6cd91b0364b184c304334ce870e7e205f1a6c8866eb271df07b3272d8e0402e0525d7c14c3092d30dbfc178616b0980286cbc1204529f05b37937df84a03826b1aedaa3ef320e7a1aef65afc337cb2ad19224c955cdc1f57d97e530ee09726b403104cee904908e6b4148631dd4c434ed245257e30d08354a2b5c73a84e20e4d6343461d8f7aca460b62fd24f66c4ac8af89279797819a351d28ef046266b8ccfdaff32d4cf41e6d0b4298fcfada4112dffb42572a4e36d90773974768d946acb1feebce31bd9ff6d68921aa3cbaa9bd386ace7752f5573213f51e45e814a0b25008ec077ba27a9144f7ea7b88c66ab2cfa99f34a036a35454a25136e219e37e0a4385d194df776cbee60b669c48ffd92bce094ff4d76be506daeebcc033416ae6900362a30000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000228e64f0918b9b8449b7f98586d853f4546fddb38573a8460a00e64ce8f3d1b0c5f6452f7a43795b93775778c0f5948c1d7da341882ecf2fb76d781d18ff86ae06b1b083fee4287dae4af9465d9cdb3149097f128e2ef8fcdc0c73b8676a437bb2b8781192888d3c36af7f6cd1c1a9de1bc0de7be96e29081f3dcec0615ee54a0b9da2e7eb45821f6d1d293c2cd822d4f7d683cf5340055db48de877154623c4c47687b750304e3eab8ceeb355fa29a64d3e0d8d505c6247285ec473e666847b1dbb76d26ff1776e41fdf5e14399e008f1e880711fe1de1a555a704adc21622fe8d57b9453899de29a4e353bb651994c690292ec3c52e5448ec9b33993887e8a74ba621d792c2ba936f0d5e9886e527101b83c35cb271b2a4f314968b18e1911fd74c108dcaef40f06568147c215bcec7320aa5d308800b24ba35ef3d6c0ed882b4fe94d783580e2b42938503d8ad6d55e23d5c77b1048423a74c3f307d1154c7754c9389e7c24b174a3ce952a6ab30befbcf5ab2aecb231262be1191196d9aef0518d02ba10a4b6eb602fbe9f6206c361cac9fb378cd1622a83f33f46f8be247248ce7a67fbd3081016aca903650ed7b7cdb0ea7dcbdea6fb00e9207bed6ae800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009db65244236e7298416fae3b916b59ff33b9113ec6cf2c0f64fc53df50e0048ad23d18e70a9b59d942f0cf820ecafd874177af97eebd18e7599f28aa09028e52ed1403d27dc59db92bc7544bf83a331802eb696c549b7ae541d50d2dd060c1acec4245763af0314d5f0fd99222dc73125dfc627c469888f1243d0092735ad53e83fcc7ec3daa802ad4fcb897ccf7cea57aa325ed2a5d5766b3abc6784c5ccb559144930b28947c40882562506afde007f54029d6c463dada9af0f81365fbaddc0f7dea5d78579a86360d67ef7024a81e3157e4a646455d77fd13f77c90ad6685786ec33e9e4b3114f286009652e293a7581d33aeaedae76d84c0557ff73dc8b360a310879b1e7d699a544b13d7eb4a35702b61c7af53e8e0ad66dd637add4f1069a7072a47b88ac63910b162abc6e3b7632b1afce52c336ec17421326432ee11aec27ca2b3d7c260444397c6aa57ed3faec1aa2656574e94941aac18e196dba115bf2a6fa66fd8c1794b13a4cdeb573857bc5e3697c3ce4617872fc374d569bdad22453a69086ce690de7a81bb86d2f30c7363542547a26a80544eac9a4c2bd23fc3cef1ab429a26d11d4443ce69d3afbc6bd8e4eff0eb3f0a692ccf6bb4961c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d475f52f6b10b283db7fbedb73225d6cf9b4d2c70a4e2544ca37c18a9fc1fe0fc3d4d541803a3b4da1f379671960aa994b97d134eba8b1f0d9fe67a95c904e286f69f50445ec7585cd258d3f0b6cc2070d3fa54c8976340d6a17c1c9f005411bfe4a745506ead446014c73c701b1ce548e3bdcfec6987e73da4c46e3455835959c44ab0fefe796caf3e958f438dd704a0ca4f8f836328211590fd4643438307ac5eb3e3516887cbbb06a176399ff4225bc3b88263996d71bcd3f24ecc8aa1981184178d0ae5ec4eb777630788ccd227961d12963fb7e984f521710799da723c7015b1fe427d484861d57321566db4f6cac4e0d7c805b60e0383feb50cf71d673479eb4a5b809d2c3aa530ad588f40d6f8ae6b7488ffccc520e4966e1e68b7e51ebf4cd4a1071a967d76d8b4ea7d25d4640bd63631eb10ecaa5f97fa3421425dc5132db68be10885708f9ae16ed2ea2b5eb998a8f701854d7ac332ad3750fb5df60d4b428c213cac161d52885e9ab533a5cc259c727e19eb018e09786a691dca9dc6ab5376217a0d424e9de51d85baaaf0668f5fcc3b11cf7f86ab8fb7a3f910e9612f1ba49fe6b83db1d354cf8db26363171236dbe05d467b8a0bd810027f960000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1fa57676a2e26deb080dcc26211eb516fd0f1d4075841a9b7aa481bfc1c2a982622bb73d976c85c20cee4550855c75437c1c00dadb67810dde8336c168d8a2a55245217022fb7f8dd4dec51272b739359d8c38efb620a2ffafc8acf4c7b230fd2664e1b0e22418c3f689c397e08d909217291d5617ff2fa8710ab49c3408063b67e9f270dea4ad239f2050c7a340e03ed342db84e27c52db3f86d85b41e1a3360d078b1a646e300762275b9213e5a4d0a5ad802b53825d694ff77b2e3906b96e508abc3d8e3631b8c41d1d2811a64665ce69eb92b7ca287587be93a0f77dcb08788129b44ce0dc2bb728320ba7952545850d3a6144204f3adc3b5556b4741024e4bb6492b7c8ffff2c64893b11b07d94bba96ef1b1564866150a824f8f7ae48e56da1db2c78087ef7842910938c8e8f09b3899b5a09a386caf578668f348a17fda681293807939d79abf91fcd79b9ecf223046dd0c7d59feb8c8382c417bef34be72cf4f5e9de18380e4a86ee1a9c4bfebc827a705dd361aae9e71442a043634e8ce0c486510147db7a0e97d64077ebad4213e5e6582b68f0603e7c9639518e732bc4060797f748410deabd6c13fc2dec5574d8ae71c43d1af63656a4c9d4a6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095ee6497ff3c8b7b29592bb5ad675e56572a455474896fbf7015ab22102f842eac6e56f2f4cc30433cd57b54a212c9902f59adbd30325387c23796886c2ce542d58f8996479422cee129e72558f21f51502c948c02ab504246edb0318f96fb6f4653f4859bd7336a2135ecc1340b7cc19a4db40f100fe17862d3cb6ccd6274347be95b55084d96cd41b13e56c5f677a7914907940693d2ac95f058f6d9da77492496e9482d9752b8cb08cab94c98da78c5cf8ae0de54ed6b926cc957c210bb51f93369cd586eebd755c33ff1acc620e923232c8feba99b9b0b1b072f59066a7e73048d075bcbfa153225dac9ba8c09660c58e170adb46211af9e5b405446c870606e66d236f2bf52be382616e3a02731e2d09da978732369567be9f2093c7bf0c3ed738718a010a2b5c1b1a78de85c0e5009c15609256155c9e200869bf0f35185ebf811d1ec5c5047c6108e0662d4e4e894fc67b41e56d94f78f48b1fff4e154aa27aba77b906c7bd81bb116578ab6af7f28cebd53a873a59caa82b9f02c7d84a956c627c642f4c9ae2fda4efaab6bcca9c70fe966a1726bf0798a4b12abcf52017208135249e62b6c5e2f0a4e3b9aa55aaf212b220afe7f02bea561700adbe00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001eec713b4d3bd96a026673de2a048a1129fbb932261ad146154669fe2ebd48d7273add185f9c95db91d6f7f72758ccc080fda5de740b9f47aee1441fb1a4e45973280d9cee57e7c43c0c53f2ac9b44ad767aca0bcbabf303f4e72a9b8ff0d68588efa33360bb94de09ea8f3296715b43d2b5939dca538cda6bb1171ed083bea6c419fabb42c3ba4e57e3ee5fe9fe72f745e15a3cf73622191fcf11b22920a2dbd1e8fc0331c8fe9575fb2967a90e081f00e7ca0d427475e7346a4f46e657ec2bf8fc893a19de6cc9e1512f9d783ea465e13b0636041ed722ec912a823bac910c5369025ebd1c52447b26dbd91d83ec0ffeba9112b5a6043b6c198c07b96f5f43a5dea32d89c7b537a5cd4f8e5a833c31f638a292c7273edb632118f733dbd0dfc59dac09bf9017de4156c40ee0c3dfc95d07f73caad34c7b12ad098029ef9d6381de928a07bee48b0b2b9d158e197636e80c7ab86cb7e70f059947316a57ea6f0004edef612a64a60bac92b22f6bf2821d62174e452cc45b3fafd58950b49bd89ea34d00c87a66f6ec9393d6f272c166e083dfd994b895c6c4c4652fedd34487495b833e5ebb811707b90faf5cf0de583a9b5707745f293abfa719cbcbeed93b00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2ae2096e5aafe1ab654d1180f71219063666412ac94296d69601ff0d84cff3da46978baa39fa673a39aff354da55917032066f090052e015ca4cfe09ccd5b48331b865817c0fc148889189703d8a52194ef83ec04951c53ecad4958d6e69daf5f2d0cf4592f68e9fbd42809368ecd672b98da9c2b1a6cd4e4bef28a0342f5098b89906a93b832a4d5b38fa666b6d04022db00c1d3c8033b62d0ea694212ecba5c03d05664fc5ce62d1b467a0bbf6cd3c9d632ee5f338cb48d0eaa379f855c4d5191a49c4c414d0805603e45656768792a5bf532705b6013abe2256164ad5ce47da90456b070563e5bf10787b07fa2b728ed440f07bf75a82d7668dc3d2c557192cb3d03bc046a2174258892d2f175d75e2decd7cbd12e02693e3af4da50912f89f324f0f9730fe29aa80d64435cfe568e0728c044cfef004faac91153c2e2c18790dda7a136e0c53e2ff8cbb9b924f48b09f16767e7f20881f49a66b80494f799c808d25f7c1197199665c866ae55737c07b49a5bcbf9e55dcff612d3e3e50518f351bbd42d1b6ab2b0f0565ff7ba9a3edc23d2864d702c50153c89ed94715c0a487574e20875e166cf4ada4c47e2a4203fd798f13a42dec73c09eb202e16f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001edddd68ba2b13d50757fd65bbd9e35754568b2d8c438e633e1fa7d65e14ebeba16cc153a6d323bcbb3e9aa37786ee01b9eecc9499bb2f31d230fbb0aead3e8b4a6be902142dbe305bdf11511e42e911ad8421f2ce78a19961d985c60cf0547f29b472d629fe0431adf2abaa12b5a8c6ee71d68f405b69983da730f07684799607b87ad3d382db80a921795f00dfbca8b7b704dfe9e80dd05776a33ad9d11f58bea5e3e2956969d705838c17d6f003eeeff29680d483393b07098a5fa8c288bd15c9bdffc1af6d1b645508fdeca37af2f7d7547b2f4ea4b401649b38cd03b80d2dea55ff0a05ea028f36c1ad3f8e079f74d54283e89d75fa55df077dcc43a25ae8a19df2cf582c83d46343f5f2d9c9cd5e62d901424bb8d85d752026620c3104738fe89783f88d9d1a2c332ccd8bfabf7ad90a4c7c8c8b1eb51ddb2430d9927dfb44d6905431bf465e13c194a4608e8e51472226ed2ad74d873929d6668e9593270e8774975c7461746f6c8c45434daa564090a803985f08355289f82890a5d01db480a429c04f934604a194a55c1f01202606fcd38ac90361699fcaa2ddc0fc9bb695c8ecafa22caf2721145a9b790622cd03de0943a9f67cb2ce8831832e170000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa4f360a3961854797f26c60e373f707ef93c78e82f3d88241380cf8a445365cefc0b9c2127177637978ec068619cd2902ff1551539d18f00f17b92e593ccf8d7e4661613ec1735d69210352c01c750f339e9a248f25fe68e936f3293db588da13615f9a18f6c8476e4db02407ac192ca91e2dddc8d74394d8122e6151f71834c3d96bc7cfa605fcadc747286b16bfc3c3cd22ae3e1fcc6cdf0cdbf708a3ba0754bad7b1051ef4a793d6d0075ec89b18b15cb913b165c98cf5a33a812588f36bb4d6352e49ff932abaea5dc4f5cd7054031db1b8a649e465ca0102dc2c78db4cf70fdca736edcc0f36591f294f43027ada8d856bcfdd7f8900921448f3f659d9110a94e4f6dffc9db1d762188199e1200806ef58b8cb02fe773c54802d4eb3280fe24ba63e9661810c9927afcfe414105f8512b9d0e7d4ffb0f7725aaa7253e24dede352ca2dc8539747be6a52c755b4bae37561478afb2ebe9efd891c41df85ce7edaa0799bfee4adc260c4f37cdfb0697579c0c7f3699091d2f0dc942d9528e5e32b77be36286ea5d080a3be8a45c04fdb4ff24d6cef695eea727ee646acbb209f33baa9e55da29f782b6713ac30136890899dc1655ccf57f4ce0b29414ee5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080fd63d78ffbfaad13a760a4eb0cc2bc1fefedb328ab4dfff73a5ef72b221b3ed8c606e8afc612e404b92368c5b95de6d810df7d53bf0bdb5ae65c029390e88c2bb27156078e9356237bd904edcf4adedb36e483a98cbc4a096bd113c5a3dd3cb9184092937617ab0459893a1b0549e58e73266ac93750a4827dff17d22a1dd071cf04bbabf0691ea5d65d9febbfde4afcd37aefffa114d5895eac510abb9c0ec8494253356c244da5e8452ab660b62984a37488ede39229a2dbbdc545db3fcb7baa50ac874d755a8b267c939b7af2f0c9ba0141b45700713da8be0f9a1bca9561435c5c9aba982307b56850f31e9312cf91ab1a80534fa5928ea9f946028024fa42030a93a42e130cfe8d26ea3e9bf0a1dcdca26fb405727b9f89ec53b90506a1e075b672adc009e94a08ef8aed2181e366c9b7a609ec35c21f8a991cc852a14ca4d14a5498713d547c1c3338f6bc993db37c6e494bef2c57efa9a2537de8847b2257a91ed3bcf3eea016ee87eac564f4e1943ccedf32e772bc6dc2bdaefd2998dc39784679780631faea152d2a8f7b717bb2e2e80a4d270ba0909dc3765da1557b4159fd23863ee9ed2d2e01125d1c46e865c8981def9d5890edbdf2d79f88000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0d757cf46284d6fd8a73d86b955e00288f245ab74436c0fb483ca591d8261718e6ea54142f30c8642291dcba38b9c2426726f8cb4c68bc81869df8034ea649692929258642d09ff17fe4449a506e4dd6d1531517b8494dc92aa09b84f27362c3811f303a0a6d5622b1902163f43a40569aff94874c60971c61c686ede6d6f768cb706c29ec86cbcdeed03f85b5ba32b4e2faea116c13c4efd8f5d0c220b9c7584410d5bf89c11842d114c284edb62c793aadac9ec5dedf1f5bd209f3bf8b8d8302316fa2ce05194bb0323f18e61d0b4513d160b3ffe297d9c90e808c7dade73e73a164f532d01b95a2f35d5abc4477a7ea90175875544b1df266bc954fabb23b34ee6286e191f65f2a5d8183ef4b0632cf2cd76407310a76b26f0602b14721ee81e2a0e476407c571ad150cdaac9b60d1b29d00b040923247dba5b7d24df733aa714f03033a957d240e96a836c0a0bc8bdd49d513939aa232787d6ed2f91403cc4ba67a23318c2532aae21f71302bcf19debc00f0a5dcf1b5b03e06feacc88cf837a230458284c3dea066894fe85cbabd7f96ab4191845a990711caa5913ff076c9e5d7e2c2aa1464279610a62d9a64c60abb92cc36c241f129e998bd83f00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000909d222461954b33bd25fb0c4e47d7de0f3bc8769d05014700390a9729676858f6bd261be4c9af4254d765db0eee23fcd585313469431ab7c9b05d53373b39799823781750c01f67ecf606d32c075e94064610ecb0dccc385d7c4b7ed42c14c3c0571fe8182b57c23fd2a9de4cee8054ecc2080fe697d55fe7bc9cb85d1c916df7befd2bb3d3ef4ae2ffa0343bb1363ea253db37ed7513e1a805009e608112eba5113e59e4890245254e79a924ed552be875a3222b2d78719286b5fb9a035ba038bef8a035fbfc59bc92ec0f2455bc6cfd072dd8345756b7fedc239464fdddb328504b25afab6df65142c54deeccc42e23cf5e9604c0cd25b1137d4417b115b55cc24553c686ac31e11cfa2713a5028d9f6eb6cc175ee833eee870198d8e47bfd05c4b7d46bffd1cd4e835dafbeb948d728697baf307c18535a88c539fd3bc13855b10059b54d4fa6abf670424149be64c509837668ee3a7e0695bcf3ed9fad0ed8498daa286cab4e75e8aaa32093f7c09718f031b7efe33b397c8b8835c7b96a0bcd85bd6ce1dcc4f99a7ba9ed55d6f3c917d50d895b2856f155cc904375dfe21b629dd88da521912b26088cf420f520ddb8e19b39dbded9a1b010947b61f8a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f65ee3554126a761e51aa8ed693cac6559199a2820a27ad7197f7f9c44470aa82df2e747e7289cbbf5f22a6eb71b03b0c3ab4c1aae2065a1f77af778b9a7c62095d50c84a3aea77bd5034e87f1774a89351439b9c477fca313003e044b73914953ad25ed84d3f2276ef04413c5fed00574c14b245bc5ddd9a94514a321ddd12fdf427ae755523bb1288536a80a6e55e93e9374356365e30b2e6f64537840ad1491927776576ae2b08dd9de3e23c0f76d0a7ad24c3b19b79436d8b48e011da7ba7880494a5dd5d99d8c8145aa1de55ddc3a60825daa14c4d21866f34d6bf19aa7504fd1ab91d6f52a77ac0c99ce1a7cfe9083476166bc41a074b45e2a2430ff61a093412164e004d092e6f260eeb70d65b94901e67d40cb46eb66eb0402ab69db5c405361a9b459b2814e57511369dfd9f2aabd7c38985cdd831a4573ef512658d41a999a2cb33b0630fbf9e1be461bc34bee770e2177d95ddb8f656e8598665ea25a888247e4c99f12fedfb5a7ffc472b7052dd9a431925b03b0cea6a6a9405e2a1101ca17e9b0a059fa3a735ec3b0880ec480fbe034144519ea4f9e79fd383b01af3b637ca8564f9902deb26b5d2ab5797c9c1228fac3a1a328403133fdb1600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f217598711e751674c35a95d2702a204bd2de0e4a0623232e9365984fd065aac49bd918c461b61a29e022d551d73efe5f92567b892e812bc03f1bdbb7bee2ebb4c5a742238c32e89d8674ff36ca987d12f3a4406d7e1bfe73d42baefb53170dc1f21adb479598c70d70d94ae225e29bfd14a72413dfef8e5ece8b0c7430af5faf164739aca8c6f08cac075ba66bb654546e02d252efa7fdde6b8268edf0a593302916fd3b228fc2249a474be8ca81586e227261362a95cf5591dd1221195156793287656c5b7d609ab5c5708f3204c84035b45dc4e4d1b0d5e994f3a32f8a5abbee147b047a1247d30add0b2d293aeab12d61dad310ee672f027db498cdbc3b83225d253fb9f0a18e54c45c9f533f65f40c7f7c250438d3b0552c29a67f9f8ae3d2c4a63d15baf13730afc315e7093b08ae7315b60bf892667d92761936412cd54b38a6abb841ad149777f63c24c3159b6e4c651a10f41cd6814d89eb094a486e002a0c240ddbd8806928d6c77d53d87b90a68e65e0f5ebfab7ebe48ce04aed9f324e5ac66db50a1ec4fbfdc3d171deca93c74172f2c6f77112a1813c8c7ff5370a0a9caacee9ebc5d997de4eaa78d9015860f42cc9acdea8a8f680a12bbe4d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad5afff32abd4dcde028008a6379a5002dfbdcea00116128015d15abcbab7567e2f00c5317e92ceb3c055d683c73b52d3e1bfb0757422acfd326f33c0f5bdbed3b990aabab15c7d18b236858fa2b4f083d382ee28dda9399f212199a0af45affb942a61d1a9cb8d6cd29c7c19682026376c4b0825d42f9fd2857b1b37f71a37290bcf528d6e85fc1f40cc3395df1d7c157337f0eab15b770e3837f8448b47a80b4ff786857c872effb343a6dc40ded0cc2e2a76cd7190ff11805e04cc8e93e27d3e0860b5345318aeb80bc72c90022e06e768fdea9fe498c09cd768637562c39e33e0f373f85afbecb6c3f3376351ae6541dcc7adc9d9a44b6cf2c487d2496bbd94cf36062f4d7be92c5edcaadc5beafe0d5c1b3dbae8854f41a9e8a54c206b651fc2de277161114f1c4a348969610ad8ac2720e3e781508c6c5f14c99b2b3295714af38aaaf451f39f5a713c40ac1f695d0bf744bb2648b20423b8f75ad70b9ba059422f5b5236b684d3870e90828edf10610e68f27a9bd8f7b99484ad479f33ca8921dad0fc92a75760027c89f31d0d80b2f0cc9087e276ca0c8eb2a7debdabdb66ee308b29399e4c9ff1269ab1cb3d416d2933a4e07b50e88a8166b1a7afd000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028fa9de127e0a6252c000b51248289fb9565cabd23ab0e59303e08f6967b8acd7b0c641a33b6b453a5370fcbd38f02f8590f1ca7ed1333b2cd9b7dbaf1f2556234edc4530e3a64feb5ad22b944f2be6d02ca5c93cac3ac5693fb9acfe10f8a8875bcc089d642e00da69f62bc8a9bbee71a48c02d319092420d18cdba996f367c15e003e230740f540f8537da88bd818daa737f73b3520d3207aca549a756e1fbc70252857e931042765257a1cfed7f0d00b36223cc2f52a55c303950d734800fdec8b67d3e0303fd4c5082e50c258f4d6daa9b123ff5f8887b8ed59e29fe416b4bd82edb660c3ad9d8c8ceadc175df7d863dcf5b9954bd77cd5b3412773a259fbc9132646bcb54769b7e8d9f4b488cfaf120df83e62370a1f5326d3f291a0fc0d16cc9d022e783e560584ba9e513dbc7222a264cecfccf4575433f5066da8934008e56d09bc844b7ae1f81f93ef3c1e3c46e8137553e89d2ac83e61f402a9963d1d55b176ac76e16e2e4e4151f11b897330e6b678996e21d8f5911ade322d366d64af6c9a36e207aaca69ece23ed7b31f8c8484b1efa262866d2bf738b1400c2d90d79f356738177585344286868212c7f3e09dd4b431d2f1664eb8da694cd25000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029d2f725e1f1cd248545065ce5470acb268ac9fcb80cd896f2cfc28fae6265033a873095d1b1075883b3fb6ec42e7f5cacdf11eba427932a1fe42a2f993ed9949e7e1e6f7ae53619b606051f269de7da3b5258673702cc83de33ce94621d8f5134c2d08fd9d7545dd3dfed266f16621ac41c94d4ee1fdbb3f3c7149020c060b4de4539f6bd52e3983ebd112b945182f2258eb52a39f0c35ce6b518cc39cd7805ad058607aa7de6b8bc706a284866e2445376389fe65d79f0412e6154576090f3160f001913e52b8c61deeef44cd147653738f3258e72df9ad1f8145a63f58b03849efefd5fb8ca6cd7af7f0bb6ea98c2d9430f93438428e99821f8aa7d456bd6ade97fabd8d0cbbb6c4e0706f6fec475f0a70d2c2e0391b8c459de5a542ca74d03cdc2cab19eec50e67bbbb88311765a35e8cfbf5ca30e6979cee740c509117f0309f4de3f1e3a5900bbf4c9d663c1dbd52f43573fbf0230ba61bd1c2e1100e9a2cc8f425e522db7f5b39aa0466ca8268cd7c1b4f9fd3a4ae02b795eda35cae06c7ebeb5d5bc548172fba829f7d1f103ea57d13edcdf8ae4e01a129d5c4b1ced6ad60b28bf4b4f6c98b5ff6719d74df855b3c873cd1dfac65b21378c0868fa9400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000349c4adf308e3c7937baa57ccb29edbada9ad0a28b75958731ff3c87d6ee6aaf63b8ed48bdd286626bc2144136e858530f892359dbfde908408f035770f7a7bee391d5c0a4f90d8d5f146386a31d326d6c820bba513c3a8db1f2639491c3b3ba084826d58df1390c2930647468578b4a9d76be3574f81b7195cc2b52614032a76e9eed3eada20065a19037c5280becad49042ecb5c898f864c9b01c2851fd763fdff6d519e5ad18c9769261976d0d94301d5661f78bc2d2cf8a018db23918d405262aa9ca5de2ba3297cf573b6898b3239c47eea36e085d5e91e184db77f2c67b77848c3fe7b63cc24d5c1df83de7d0f2f5ac129148aa71dea1979851117518208d8e22a814af1cae9ab2983141101c4523c22520abb81fded59a2c15cfdfa3aff93d8ce2ede1c13bef552081590ea2867542c454ba3537c26fbf517c1cfffac9f5a20e52b70c1b686114e9a5cf3261b749989831f161c13eb60a66c793fce6bd1439e0fe59dc1ff5d8c9e488fc1415d1f550b414929e166cb3d2d76ce4f1227639488eddc378733052afeebd072892661265f6277ab27ff1b71b3e83e884b39025ddff012c9d3812a244692d6e5d7019b027fb086037b18bd46ca105a6c3f10000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9f8c87d8d4658c96969c3ec86c30b90bdf02d0bbbd5492526d3bec23b2f509f261b4a1fe3ed5d0be1e770b208ca934e6cfde55fe143f4363f5fb73d9732c9345b12cc0be5aeea88409d718580ef5faa48a8b8d15d3d425bfa8790172c7a35a98025864155415f9817a3d96dcde1ee1028b1ae99c9c7e21d5291d5a9d036e7d5f15ea01afd2ce8e459308dfb9f5759cff488641483a5d193f00c3e98922813f12be0a5da6bef25f3e8124d1bd60257620b8ece0a808846b445917e76da57dea22b60e9105edde25f2e7037f2c841cff0b2fe950d262e2f5a23869656609dc83a06e1ec6f2b60bb5b287dde617edd3b720735e41bb17b26aa07cab2357771376dce1c6ac2be42b026d25f8475fb62c5da5d3253d6b7e183b7b00336d39ed0368ad261a7a099d4f53d43ae0d21172cf03814f708340ee5add3fc714ace0ede62f52bc9a97ff2d944b3c5eb6f8ab1324a60c21a54e1e4c0c84b585fedf2e11b116fc48616b98c7c775cd23ac355629d6931b56bf5d49f9bbac1abb8fbb298edf88a335c11900f4e77b03fc96531e090527d61c0816c935eef94ffb17c7dd063f89e0f96ab04e197af04f4ffbd6d1ec059fac478b830373cda92777767696a062373000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090d28d3b657385029b90f9406552a8dcc49ae47c34cf0522f6565e1be79c90e34c5d126afa566cf29529cb33282062e5b55e9c509403929a160f3c9839564384f3e148b51f0762fe4f49d7789ba3c60cf06e98618a1a169fb0f7e32bab94ba4c2cb054cbd544bffbcbf9d5f966aef64bdb31015aac50f020f6222e9ba8ac4703d61abb2a813d6c72bde0689d56898635afeab77d71fb89125cb9dd62eada4936de07e3a298d84a7f10afe14d0666bf4647b0637e992e0846963a9ff8c633defbf0d34ebe9085202f0b6df944092a8383c437a48da9cdfabc6ba858204fa0c486e8c12eb5d5d14f7bf448857e3887baf49f54fddcf1407f6bda6ac0287f4d2a570be3cdc4ac62df26f9f442650906b8437943638548888290442261fabf3a4cbd86ef9770bd8029ecd857bf8ccbba1c1f06aa66522b91c4bac1eb1f266da2c70fa6a0904d0e42d2316580606bc14a24c29162ace034da48b7cfee4c3efa242e8e6b0020eff523d9d75ec7aefd5c4ef7373b9c48a1f897af03dd8e435afcd599ea6d8a63541210c7aba7206de36504a7c10e47c4fc9ede89ed04de48963ce3d6ef147c8a34db6a57e8b2d59755c0335024d4efd576ec776cd3ae693bd4865dd51d0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a432fa1b58e94b2c9809dd8cf7f01a83eb7cf015ab5c3a5f1e6245840f378705d254489ca6b5a0a2edfa18cbaef24420249e52b424b2d5ad901b5f39998bc1b03b84e6f17d4f791a8ce41d3ac9f1bc0cd387b9f5476f614fdf3c79cc2a960eb31e0710592689a6deff01e2c539a3f92bfa779296a1539b927d65103de9f9bc99b82c7eceec7f2ae51a35d468e08b552f6c0c1c270d2ea1d96a2d074f744cd8ea1929d29d9fb7679612e900cacaec5a9bbaae1933b8351504378667b451e0360478204da1f567ffa3db7ffc406ad7ab54731205947030ffe318b0e836419c0cffbd5ad31c967bee736b4e31236742462099624f83c01ee2c50c4f252c17f1015a485f710dc19a9cdd27f7080d2dc60d791d5fc2b8958fd76e56e94e0c0d41e5b9c8dd4db129ed44bbfe6b8ef21ab4d7f64eb43e523d9561f37fd35f0caffe64fe402a81beb71fb868dc0d0196ffe0d5e8614b770980a67f655fb7d98f04e553c3c311d083dd18ee2335b18e24d0c1549fa59c966a4e75b5fffb9fd8243f53288ce46e3e3c5b999ada2053244d50c31a417abf53dccc44ff53d6afb23ec719df6e1cba71fb38db2bf0efdc4ff375d37e6c2e39562d088456bab106fa123ddbae6a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b627c661736dc50aaac8a6bc34537c56d256e6a407c9f6a5fb53e2256336a100c34a83b6c41618978f60c3fe144ab678d0fec308e6f9a8daea9ca139bc7e831b726fb4d3343026f9d405d83dbd3a28d3e7a24848c88b07edee8250d8822519feb8cea73c40325cb0971c040a432129e5cb94845cbbc9f4fe80e9a7be2a7f983fab5bfc45f039221e00353a7b1ae365ca0fb9d5778bd1a1762f300d5a1030cf020801fbd3ccc2f53daaf12426bf2dfbdcd89f10d381d2ad3d1c58a55d523b9ddbdeee44246e75750921520de449dc0dc3b2ffe1f8ecd9986799fb46c71bbfdc5c12b916035318c90418179da778f71b4fdfc0d220ffa18ae776d7df2d9f7126e8b98225ca9004241349eeaed0ed40ac91137257eff510dc0fd7731c1e657a2039f2008fab6e81f6c847ae9b1fb31babfde2a4c132e1f857f977f5a7bc9b935e00c32e489354c11116ff38c1b72f7a89acf8d8c3e50ede22f2fcbe7f57e2241af51fef6424c6ec16a6780e797303d723ba17a6dd94cfe6f54ae3a6832813f28185a108014721d4909524d80a1da80e79429707109ff3ddb4e0c0074ef402bba425c6957a9324e1a58d07aefc0668f15906eb4e2f8387f3a67f904b96daf9cb57b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3176e8346e9116d818f2e03345968adeb63c31cc7bb6dacd4e9443afb3dc855a5f4ca1d284e6a3feba5715ed7075b22394f0952f74ef4b8a6b499c94e0a502b26b52de28f1187c548db4fd1d9b0a7fc04f35c5142d443cbc7b42fbd842262733fd076e3ea311015b2e8cd0398197fccba788ad2c8011f47e45917933f40e9f51493fca6498811edea17e88dadc1499aa354021aaad6f8cb2bf95a4480249e66f7c1fbe73c730fae71212e5663e07714b50836535dfd6aa0260462c98d88069e40b8ea0808eda6592801390c6bb6d4015921ef32def37727e604365c3e245d8ded162db226878df2a7773b7350acc4cabb6c9d95c63812aac98d35aa255aa02498d033ffca3c40b2b99853c5b6ee0f0467c509049d7f9ebf3b5c64701aa611e0a00957ab76e28f4f17aef0c7f3cd1765a5762317bf91eec9ecdeaac413dc18505985e354c9c754623f7f3f717169266e3a9b7615d9d097ecae4ef89b118e3bed883ccfdfc9736827d76e7340d0c0e230982cac544a760015c69d7cd1bfdf93ddf1c049ab7ef222f8ac521469ea3fbd6b9b0cb9d7f499811f6556834cedb00491c81975264ecafdc7879527a66f30998678349c603d47637a760406b26427d72f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a85b5919ce22caa62b3ff1f8a7eef8966273919a998ca394f4c34336638be853fff9d7483c1958ad5a37f38f7d13cac63cfc8d0cba31bf2c8bae979762f4a15b4d10f0222362d49413adeb1824dd291169e10c11ad26e15f8bf4652e240b7eabf2312e18e8225c6d447bc8d4266a82e0dc87aafe9adf31a52031b180bd0cf64845dff1dd8d9bb924ff0c9e98191c2b583f106657a6de59056a1c0cd8e516b52b13af5479894c804b770701cad2c0845099c5178f5a429167e7463d3fe4ecf2cb31238ba4c71fef38c2b4c86cda60d8b2b6c4959c6faf2fd3238674ca9085ffc99bc19feb593e116362a63b820acf623dd443cdda58b9e263da8f8faca696c975f758dd45eb8c3c2e27b916ecea887728ab7bf0c9efecdba578b4f07f01dfbb68c1d9c04a03ad614d3658ac5bbd30211490f22ebeafa5b742c0ab86ac2dadd6eba62d5da2e4b18c78f4bccd999e02ebe201cd2fd68d08e56a0d6fbea00f1baf393bc23e464e026e2bcb4df94791f2bf6ecb8bb2d0b613c2265678ed0da3fc4d00cc9c2bc71e2939bf79c29c098c040d01271f80b1d22cbfa11f5aacc109c6f9e64c1bab3c6f5d5e5ea48fd9cc2993264ed0ef97a1cd41132a9417ff16d1ac1cf0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094c9b4ccd4a8f6ecff6f906a83aaeb4ee98e86fa1b30e86132450b1c64df688c457a55b4273a8c421b285db997a6ce8aa99f428ef53d197489ae1f2ebf1d1af836368613edb71c5c0dedf6af9bdcbc206afd7d86f95268b7fefb743ddb9b36cec66c05f60fb3dd3870133db44f32f1d4c74fc88c468f6c8d382f2d7957598ddd4180d6794a865afc09b9e600e6097262132e8192f84df36600b79608aba52b8c3283481ea7011eeed3c0d4b2a9178ad3023d03158982a89ccb53bd554f1d56a04f25f40401919cbc1ec5e6ee4a40db5efc19e1a74d7cab4d8c363c1ca27a2e67b7d021a62d205082c719a87579f58521562873f724c0b756e64e6dfbd8585100ff1139b2c1307a8f4564246988cc1dea5432efe2d5423a8e3d3dc4c101bc42c0a6cc3428d8aa282dd980a8d8e914d73234aa94f192c5172b2eff6fea0661b623538bf465860425d65b0b4c74a218e3330d21da9a5b7ab8da806e9adff62723af8f87146559b65649ea4e9b0f18abc5bc5e95cb77b99b4795bb592faa5a4915b82c0d6f1a260f30feba367fcc255f472ae5c52a128b5d414b8aea0779cba0ee58a864ef2b9d72e02a507d6dbaee083e42e8170f2b46def314105f8e338d246c4f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009594420aa5e7cf4f75c2ff468275a48d85912300f19e285696d12c388ccd86263e842512c0569ecc568bfc7ba38669714008e48d7e80af33c0d11e4ccfa875984e0e4fcde229b3e8536d586953b63c4002a858ed474250062e86154193909819478d19c496874de43d1c6eabb42e9436e32776029143a27372f07c9a38a04df61b7dbb32429207545f748e2873980921865682912b970e4f6f95e12cf3a51e716aba6ad838a08cb1f8448c640095774a422aaff58b9965e4271d3c34b9b11101ea4823eb73cdb7742a510f26dd643752576469162e5bf762d8a81f78548fb253e24c3cb7d8ead919427403efc50ec5952b1370c3c9a1763153c9719bb2099279fd6d8a4347e041950c2463d67172d0459f1fe5947f51764f09f338fd825852305509d407e05327f675cc4190120b8299a8b4c9d355ebe7ae841c4bf78c1cdfb236b48e3f826c1b778bb63a6a7fe09c996fe193f8f4068fbbda2fe6148f93e524272ca39fef7490f98bcde80ba2727ca116082efd65fc106e55416532999b65d18b54dc9854344a32d0c57da5c40eba09502f6dafac719bc59044b153f327c1651100d5f3268362a68a0dd64ca9bd972c6126b507735e062930fa07adc71a0dd2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008dd8706f07578adf3ab2d69283375c7ebd37da8c020fe00bf19ffd94b1b57ef370c409481c0fc309417dc7c705c58c445aa4aff667203b951dc224a833bf94123b5cd63e07a6b85336b9cc7bfedd3ba8d97af5a79cddd483ce7e393d2d6b329ea60d2f369abadc8ed4c02d1691ccdd9cb647c83ee0f6bcb896a0d92aae661b69d1bcf337453520db61f09a394ce3526f3d769e0a26d6a5a2705b5fe53de4df4b4f523acce7700499a7bf488750f8c97a639083f6cd6ff053667710975c183d98449815e1896202b5871dd4cc2c64e37e858bd368e132d262a0db55a41b29cd304435068f7e1608df2e04790389fddd1feef9aa7f841fe3e49cb0991efe5291735587523f9b00429ab409fc46c9accb9f680253d20b469fb23b009ffd3fce3c50915f7a96bdb7a571436b2b6ea9a246e175733b0e3ac4459ff1c670e914a180021aa47f5793c123f3abb3178a769646ead7ad719957d66cd4a43b19f98fe413f6d193475e22d96399570d5251b3c1105071be78dd1dc8a3004ae38fa8cff62dc43aa6a4810ed706ab5717b1d18725ede69b76c90b8a81a2e7722846e5e75e27973e31587052402e451ea8a48fb7d900e81b47b486b0f4d85acb112d53796408100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b2b0477e48bf36c26c2d97c53fe8c8581bc857690dad29dcceebeab485a61e2ed8e16a0136d3fe848174a9b89f7c6f8d683d0a51089d39fe39870f2ebc1433313f8f6c5711e2b02cabfc0503fbae91ec4a771d0974248bd01749e1c0d254e689292909e10017cdfed986e2fd894458abcfec20f0256c9ab5058804315e5027949b7dcd1f22fdc4627da4502b00d5267ed4606117dc4e4ed956dd3b3726295b8e68b41a65e1919ebb4a64038a65ce11ac0bb00666f534cf6a69c489e37cc93ce22bcd4767b668f62e44be7762388a221bf168ae1b1bd496db00bc52091f6f42a0623946ec54e48311b3a5a82581c449df5a2a400b28ccc8d4f8dc629091e898d69ebadba41d75eb084b8592dcfb871ec4db5a235c923fc0d3c1051c3c79309dd9b7921499ebfc28beaca9a2c5a4e629fe084385cec66630b273c100376eab03dd2c7d1ce6b503914ab14987bcfd6e979d1d267dd37d0aee34df5359dee0aea4b7bbf7206211db6e960b2b5ffd18563c111aa0761449a799b8a86aa188296be8b7bac72ff44c9a3c0c8319d767fbfc7421ba32395ea262ecd6036a170bd40a1873c4f811c5846df7ee6571438598e0116d1bc4b5c92ddecabc82400edb24a8ac500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002070416dc33def01d7cda6ed2674ce792fe7c355eb24c69bbb94becb2a836a5df9ce1e1ce0d9a58fef89a187c34edeae8b40c4ef0e97afdbc89db2659f3153f02c7351e00eed25e42a72793849cfb7a2f30d2c3a079d6bd255e5693dce4e57481c6cb70ddb4f89ee8a54c30de248edf8dca0cd0b406de80992f0f81c2264a1a10d0fd4f1a8406c2a6ba6318987b89294da983a6ee2cb2b3ce1e6e50ebe45991164c997045171cff7711a569669170c4dc6ece35943c4c2cdc52f4fd417cff5135a14a732599e3996c752ae2a6a64fad9bd7184281b81453807d591df385f91f32d852e9e65b6cae64239818520511cb280ea2fe4e7487c64e352968da56e5d97bc2a4f53756e2c562ba091d1c8046efbc9eab78a705bba47db58cd5575f497628a441a75aee60d3d1bac17e3ab5012dc0f5a5b907b9a2cc0301882b12ed631f2359354f31ac3c55e89edd8218d5b0e182add4a906f2d2b3dc4668930848cfc207704ced6e23d7ce0b3c808e8e98b6bb60938643c802daad78e253345d6bc7d98f36d66a099ec770b034b4fab8ac81b2e19a9609b4bf8f2e336369cfe3579329b39325c18e3e332aa5a07117f8c78bbf3da7b936071823acc771d1e043666678a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000970215722f8c163ad05280b3a3239a1911f0162432eb801e28cfe8f5ecc7805c2eae82befdd48f895e4b421d315cb94674d698b854ba0332300926384a62e6e2360a4c8e5ad81d9e96902c670ed484186b97a1810632b4ca347a87a0682c7f37f75ebb6d23e3bb03c09908a3b485a2efa9f1f00365434ffdf4048f758264a264fb887524147fec6a6a62a74a58273409e3b207b6b88d11b08e92f259fdab371690b5e3123e4fe2fba1a15c7899165be27b76ad6e3172430ab1fe6d17b4ada7083c62d93d415fbb9b956ecda7d87b21c2b99d2f963b139c338829b97472b481d5eb4c7bab1b6ffaa90993fd156e3034ed0fa18707496e500843cd677c10fff43b5843a753f1cd02e9c4d09f46dc19aee9e29bde06cf484f0c237449ed02788467b93f36b502f8d470f62ba7ed6ad57b929c54bd7ac4b18b18cdf8e0efcdc1118ae3c825349dc8e28ef8c50cce95176aa1cbb5b2a89e8b5d6d1893a2915b12a7dcb0b70aa5d11cde53037c84b66ce753f3861e84b512c758ccfc2ec38c4f059b789b0d35c1ca1a39bfad7ec5aa984c87e22c29d22a715d4176665e4911f34e82ec2ef7d70a465a476aa8bdb58049d2e1b50e434490b2a944dd2dc2510a1414efb4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030018cad082f92c142a41ce6501e7d890ae07bb3005881e946a8aa88acffbc2bc8dff64e77efe320abf413dc8593737b55c06205f8188e08b191df6abc494ee6709324658b4bec526323cf32d26846f2ef5f0c154c794bd42cce219d93f6f4c351968644052979aa23572d7de186a3ab9f26e44142f38d236ef89fe240644d276071f3ce4c4a3d3343a3a8bc38a442e9ee4d0b326c950b722dbd0219fbe950ba59095fd647ddd5dd23191ce58e7da65d745d4babf782025cb3f02c8de040c7185c35113ab6e88de9bf075020010453865283fdf78c07ebcaed0bc5e282acbac36167e25f461029b4af2d3bb901744423a7bf8096727154a61ef32e1debbe8faa177e16a68ef22f8aa04322a8c3dbac32263c4e9047a061b12639adf42ec9b395cb27d9e89fa0688046b153c1ca7fe3e1f209e0be696b115e2ecb0b2625a1a8b45e43b26c80b0d0a2a96c6d0592a40f434097b030d5e2be55e7f873ae7da8709f6c7bb5654332f1b41d1f6ebe69eeea29c226a417d53a742f6b94aea8c36ea0fc3d9c66bda07f40708da9f3bc7fb4af18285bcef0b29400effc5a3195ed8d139c6cfb1e88e08588d5f545b14d11cb9af5f9c9e971bfbd42cc96f901aedcc1c097000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018bb47578564057ffca5205404df5b64674d42c8a57a86101aca62f47600aaaa2327fa3e7cd9b99431f323c82885f8a9c26aba8280321d531958122a7febfe65e01b350de72f1b619d41f12bb7a4ac3ed6f22515601fcccd072b906b2c80fd1864d1314aebbd6a57bff1f259cdd1a1a2229d2b14862c300b1871914b902f3e0efc0847777c8081e15a24ec6b4e33c98f243c839ea929807e8094a296c7afd7cfbb5d60e8db67db38d212058ae008d4248b7545cff6a2140c64e568a1761b0bc73de226e5d1e97b39ccc3de55e5f4c22abc3fb293da330bc486d2fa54e3f1f885ee66ec053b5909674ceb7108559e57cdccf75345e738cc7fc6a60d59aaf71a0e4c1f904b2dc339176309f12f35d84fcdda780567f4a2696220220d48f3ce631a311f7c9a22cee5727cfb23657a949467b3ce85731b9008673ff3b5db73547f4cb8524f92a7a6e7865f0936ddbb3a8ce5586bf5d3606b82d8d3ff089552a7765882da316f47c1ea203886b0c185b7d03a4b6eeb87cf9bddce8a6c1c95c3dff28e0874b58e81eb6a476a08cf5a156e2f35d112d2d9456b0e0abb727d45650b22ae239babd448efaa693ab1258ed2bf15ecbae1c09c129ce42fd28765fa6f71792a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006aee23107db10c74e181a3a007fbe93f4b9ba79242607aa84a7d1c66c4080b935f256715c9c749e7f1c1c1f0a1db9d56e2b9424f4a892e81ffd4eac2167a1f27f8b0872fa397471be5936a2c04b01f05eb045c17e24ea021ba411cfd22ecbf81b26aabdf61abfc0ede9f3f47c093b54c98139027a7aab85af62e8518f92789bcae888ac9b45ce8326b3200050b646bf63162fa3c43871ed06e603ac638f3a8e22f32a82813f6ab1ae632281280efb15116c0057d11673da681f6d36ec654eeabde9390e57a675992c5055723bb9ba7189e4f86c1329d71013bd777c2e7e30d8eb41dce6f000de0d58f6ec1b5e067142e3fa8184155286ded0da088928a18f083c3872899207814decd9738498d4458a680f4467117454309e68aa307cf1cb5040f513f05d4b8404a1850add4a72a3e1bbdfc1943428c0370a0e09cfd2e6e75384fe9a06d05a887a28645ad6bb2408a7949e4c6c2d77f20d0e93ec1b8759e0b0440f43a8b8f15949860691fe1688f2e5c9a2286510a306c8c96e35f5225fbb153c9f3b054bdab0395881e6c7d5bb7a4c73be0d3cdaac9c69c8d0a7970f3f0d0a377adf75c3cff004a1de7f2ff21bdf29206e3bb42f960994b33b8235e969bf8400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b07517f80d1beee6b350a650d8bfa5b8148bb9fe0e81ec651881657457c8a0ea8c4df07cc92c760705d30f8c4fe45d2888da73a809ffab93d6bd294bb05655187b0b3a05399a3b8b9f0bbf8a92f636b1b49d4c8b3f2d9eb15477eda20a3d3955f8bdcdb5b5b835612201d4c686a17768caaba8d3fd83ee9f3c1bb2f41527c583925618cc44b813224a52c040fb55df37b1128f7e6186fe7c8bcd2823a0c64ffbf357e5f1e78565119ac798e4249b6551cdae4cc268a94edbce963337eac8f47a347e19122ad092f546ad198c9fc899995bc2a6ccb7b482c1fe258e0fe2479db16120939ec0d92451aaaf72c0159db9e13258a3a51612a0f4da936414845b36b0ec2f4263f730e6776f86f221ccd1f523b8d072795657f05d5393325d9a41d1b7c6a93f831feff7fd2d3550bfbda3fbc8779424772a0b5fbbe19e8b61cff30bbdbd8c48d4603a622e452e81d88259a1c24375dcfcc7f56c81cfc3f9ec7367368f170a3f6b75e93c9f8ac9f165bad3c8bb7c2f9ebff182afed1c1ba46ab671c032e826aa059045324cd6cc0f86cc7c8f62dc74ed195abbdf56e710e17d92d0f139bf7f0888d4d496cfae86ac74e3b5b442c9f1808cbe9a7c92eca345eac67f92000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d48881f3fe26ebcbe0c5d84e1f5a1af680642543dd7236f5462003aad5f9e4f34b076379ff1fe8a54a8a59f023b75b5e65336726b6fc065d8c93fd5e9e54ec7e2b10c8e14a4400028fe05cd424001be9716ac288d780ce4777ac541b3b09aeb8216667b58dc87068deb2f1a9f32a374a8553fc3482ceb50825c339860342c01dfeb37ad0e5928dd8193b1147f8ac596f957febfd35d24192817ef2885a6bcd109c6d598db2328f3318bae594ea895c18bd1ad89569572314a2c496a1e65926e9f0e02622a43e9bde55983bcc7c3e17dc24b9afabc4b8e92d4e6cfd61cbfeec9d9c615b4b005ddbb4188b0f417ac9ea5c97285a649e08a5026df4d404c814e4407784fa95bff36243c6aa95a85e276837c1e55c6c674d9b634dbffea1b858c4df334f7960ed560324f6fc408e3aa5e7dafb3aa56f73607a798595a5688cee748cceeb88f44a0c52b31f3f60469ead689437d04ac9f1a4adfedf8ae335e76c29c4a03148a73fc5b50510c3b5004f29b48b79a65e3d479aca5ad94a784da5961d6bd6d5252b4b77bdc6289ee96e4063f3ec36709a7ed0b2df521a5e623e83f6b84944eda74664899967a32742e0afd85db2a87b56ee205e2b8a431794406cbbc2700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009894acdd6e1ecb0710d5a2947b5e125f2ac5349d23f711368b1287b23a8c307b1427a7b527a7e21c38c13042f87a77096303b5f8e23b6830f33452f3e357a161c4bd680faac530530a22bb6b141f581799ba8f8adb336fb20bcf0cd26c5f54671e93a5617caa46699ff474bbc4c0f6045994aea7d4963c762c1e41d7f81df7ffd7797039d893d0a81fc5b3f562a17815a5dc1d4950b8e4269e25d964d009739f04abb4448e5af05705a862db04acd8b44e5a5261906f3b6fc3fd29078b1c2646dd1f3c3fcf11b615671dd11f90b7e5c8dd8206ccfb4b19376e251804c072db8b6c6615c6cb753b42724ac4c19a694d844996c9e47d29fcb55de690d76ddc602b4f095cebfab962ecf4e003639265de70308e14e156cef598c07f8a8e7d266c812a70c10405070dd85629af85ed71eac9b9bc11a70e76cdc90c213d15b3c64dd35280eb55e50be6e97867440a72c253d7ecd677240c527c316a6cb07c970f45a5d3015cd3af540f434d0527fd13efb0c4c776b096c14d2ddc43374ca3c21e507735802ea0a5a5c8649a1444db13e9c1b9890f7fe9a52cfa47a0489ce27955984c66ade665392ccda06048a97d73ba3fc70df017976c4104de326622f085cd33f20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000812645e7a59c169e78ed38552a368cc6f32196346baa222bf4abba778b34e37cce6aa0d4321e61c4bc7a6165071f28bc60257ab49d7430119e4fedd752c4f6bab55c80c068222c8db15dd0a0d9c103a51c5d907a0f8e91aeb97b2964dbc90a84ec774e4724bb01a3df346df7cba03fcf548b3f15e56eee98fe5b0749f4dc3a1663feca93f3252d1594ccd19deada577bf62cc786d575d27e9ce2350eb03c045ca00ea996fd162ddd15a1142513f2d25571c0323c13597937eee3f8580525dadfb95c25ce929e4ee690c3be482a06a7d42dd5cf53aa7349adac955ec9aa7b5b3e9c023014e7e46b09021463ace652080312c193b58096a99b713f8b67ab2051074db8ce3def45dfe6a5711ead304b245196a6be398d3fa17dea027b5a6adba493e89c524b313a309c6741183fb7ccbb0c4b4ad64f46d858517ef56143336f91314b46c87f63d7630c2dc62c165dcfa0e0d07964ad4d93d86ec71341a09215c4cbf3302b2baaf61e056528e93141cd0ed924c4bdcc35d62291903509d5e870871f08874e35a9f687ea8e4fecc0159143b2dc848733c5a6bdd9352fad1782bafb8cd8b0bafc38dc77a41888a41bca28d6e78a95f992f75568473dc2ae670b8f491b000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a94988da0380d8b5fe440300b2c3e1a1baa9042ef6645aa4b19180f49fe45e62f2e771082e2767bcf7b6651cc3b25c3ab6603ed1ec00d8bbe82ff1eddad8502ddd4cc8ce60a0aa75788f6eaef75498cb74a00ba16a7e4ff3edb51f1205aefd4e36d5238a182f960673cd8f6fed7a3cefd1e2a17fcc35b6215b5acd2dcf92723f46e96f56f705daa85b01527cf65a6533de6a95b69f8572cbbb89297d7722b1a65ec52bb6e025a7fe0a4a02e21491fe5ddb46cb7224ab071864993baf1a1d005690791f00b169e62b404911a2c8dca84a31016e8b1285349545b7a3fdffc90ce95e361eef3a38022cd3277d16d73b0a136bd122ae2e0c2c5815caa180cdb2f0cc52b231608952ca402fb2f98fc1987ae42ae61798644958d0c8d52a959b1c4ead20ca573da2cd33a01120282d500b4e03eb95707fb9709419ad0fa0ce9de2bf391fe4da93c3367dc3459c5bc0d6932cad939061e3a074ad6e7858f43da168c80a04b8655063203a46746c96809186c94624c0b9b0aafc14881aa4e9e82f3b64eb443cff7e300023b692ff56c29265de99cdb0d9f8a2e44754fba6ef6a2d9d893aaee8f9ed340271f20d0ad78adabcf3d7fbd54c10738513e9148a4a1fb7a78c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008fcf6f724f8323b8ec5096270f6a4ce0471536aa11b182fe8622136c5e99f887ddd11a9b3807d3bbee3855eb8293b98bdc6d31d75767ec83b62e7d1e5d31031a24be2ef8e1004bd528f3512cf11d7922bc2e4451397d967a3a26d11227f9805835465cb2d262e007ddb3f9c4b5fe9b6eaab48efa28353ef26fc0ec8aad27a03cbb2d947ffb4d7d1d2e8b4ffb82a93aee8d686dc58ecdaa3dc2eb1cc8b52f688c15887830cf0e120e88890c6b7ddad2f49142f574b93a1f5e9c20aabf357ce1715605b57735488103dad390c0538fc5a8662560633824fb1921c14cb3341acf4d9926885b0b7e11bfe30df8199572a775f36be89a2cb2a3c7deef9c64254104a4baf5ce887e03757d1864e2576016df5898ba188f3ac4c94f3634d47b61010a8c1c40e3aa3393bcb70a75153e48f5e9693e3ba33563b9f33954b0d6b72ceeb29b59451db61a370001112e672eae7451ed1368d2917be6bdb02c4e2221a5d4fced9dd0931322eaed177a3a74c81640307200d84c4668ff3e2afe6834cf2f51fe755bd7cae5701df87fc7c270409a3614d5c62127cf37a8872789abfe85b568783ea4e0126e6bf98fb177883e5ce8dbbea3e046ea3ce7748936ca7e511912cba3f600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a3fff5575b32c284580652e3504cdbd460db1e3da197944c81f411dc3f9edf06ca0f09bc203477172ea403357b50c6e60e40258769e6238596c6a3a9339fd03de69c3272e578512e98f188320a61c05af62c60fdee12769fdd167c4474e99cbb7293ebb8842bae75b3e8a7350426925f0a17dbc306bad7f1a11f68329fa445674411cb0821b3170ae24031d268e73595830f153b228f59be5fca88015be742e48a6f236d62b2502c3062e4bb44782900529343c556ec8b9b810a2119e4ad56249ad3efca3dd8128c9c15c8c6070a4fbfe634c3905bd76e31a0e9064b3b8151a6b6fd048996af004b7835fc095b4991595724cb0c6212e8b7c329350cd1c545245f98c6ac2b7aaf01fe46e7c773d6c3259aacb223ce45b9de7f9db48a54ce1dedacb80a6e756e6fe9496355d92a1a4c054dac2b02edc37d6d5b3180d29b4b9301b991e888dba26246f4d6624018e33f1d6b861e4d295e259495f0bb689e88e39e35dd14fed48dca055a47fbfaa61014759fae66ab5c6629aa2823fc8effab69cb76af61a2ac83232e29f6879531eba2fe790771f225ba627c5a3b75f6b14f70afedf8c6bc9feabe2e0caa8f45506c094198ee4241a46eca0906adef413b84c82000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023ff0d83f33f2bb511c050d60ee62c36ae6501259ce0bceb2cd9b8487b0d16f80c7166f0f7d0e7bf137683b9a119290dcad1732411c6caebda4cb75c410cf0c8afebbcf7df8c0f614af2edc6ce735fcecb8c5f123a556974bc0ba54f6f53440f8fe581ada167cd0b583fd71e3deb3490cbb79a7d3fcdecc99dc70bbe21e16a36cdca2dd97197e475f8a636ae25ee081815768f579449cdd6def5dd26338c2ad77f01e7dde75e8d235750f28b379b6bfd85f5331487795562fbd36787fa6c979b4da6ae2f12c1a6a0f15fb12d7e358087c6c60e656bd3ad5486b13ac6a8ae715593fbc2d4e759bdbdf35029a9a2e4f73aa7c9ef93be39906e854483030e5c46061c741eb03f6b9308f54632ba3de9ec732cc1f3be347a0761a7359212230fc8e29b86ee10ae6abe722370cb102047b2df097c33927f75380a520303be336747488b5b5090cb1a1869eb12acc0c0ccdc4af2594475569f4ddf505289c2fdea77bec3571fb668af204bf0da83ad285ad7d916c4598545afd17931ea4b856ed39ebcfbb7abd948ebd4184e1e20748d1f70febe0f97d050e37e1988a587a2b08540cc16cf09e9855ab3489f74dffafada9f2de996f2cf8c54618905d4f5875a1620ff0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ada2a3b021d0534b696365a86098fa949c564e75e023f579dfe40590dff29d75c171bc388c5586755b80e50d98793da0d11e275bc3fa645a018e59f5aeab1d2d445a2bdf90cb420f39f5f52a3c512a347349e1c24dca3c878c3f76e276c1abcf6ae25e42e80b732f06b9da83abf5f14e103adcc3546231e6964170e5a377cb3994d34906f6692a7dad45c85a04af7e7c7490d49efd0e6f9a80aa8b0c760e79190f648df02bddcd6772a335094f5df6d0559eb4517ad7a4e93bcc21bf0dca66d638c8add33c24deaa3a3115b0e33091a102c8483a1037af1411433d9acddc03e78c9a9feb8dd3025dc76afd47b6b770aee6bdc1d04610e27aca084050354f14f2d84264efc0e5eead6a577575b33fb9b4654dc96f03dc853879e41f3f9d60bfcc09ca053987cd1c46450ce96267687b6b51f399fb9664668a7ff609f378ae0839a5ce4db8472c27aca74966d2fcaf01103c47e22517f01f801558cebe3c0e80464dd891e05cc31258b04ff2a917fb154d3242b99085c276b0e98a72c1e7eb1ba95987d774b71df90f57e0e55b6a334af5917836c83af7a66937300f6e4a5b73e52b9ecacbb138724a2cadfa82fb9a41cd35deb82f5496d12626c066b716212b780000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000866807710ceebd062b80c40efef58d2d970e19c1cc46a54c9ce726e28b595e7f588b71fe4cc3038ce5ab6e01dd1cdd251d80802b6e46554871255b17ce872326cdbdc5e23ba2a8c9ce108128b198341a66f2eb9d4dd9ded32d9574b0db15d756f9dfcaa3817c74c3baa1b499a065e1e734a0fbdb19c12b0fb1cadd11828da17cd5f83253e3602323ccbc464bbfe378fdcc1e568cf4f6844b90705ab3a7c5f1bd5808643904fd6a49c0e0acca3a5a7fcd274eb08d30e9df58d28e9126fe7334ef2b302bbf10b54d752336f58ea9d2bfa35c3210de04c16bcda7e12c8e63df861795dbc3c616abd29f0ff8ac30256d772d21261b1f18d52343c6a018b1cea10d7e379e7c28b56e82aa290e64076f61805966112db0293b632980c1a1d9682d8733e5f884122647007def392faa2e77f7b77590c7ead2a2e6d13c914c03404d7e3fefee295eea952eecbfa2e3e8dc9a3a54ee22589154152cd83e5965d5548256c98da777b7e3c4835777d1e697d7fba4b777e8d56485a8a5d00b42a54fb2bb0a436ad710df6fbc7df40bbc6931e9a720cff3e69e3ce711449d331c06a8eb8a545b171c9f98f5e82009bdb1c828596223941cd31bdf100df79aed8e32196db855c2000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093d5405fef2be5d4219183545dc7062aeea860165da34e0ade68b61194b5e1bf64551766a7c79f54f9458840276e71e9b09da08f48c8350b5c310558b8edf786d6bcbcd384fa1063c79ea0b86f0ffec20bcffa223c2e999ad7870a402e9a51c7a4d4f545b201163517818d1b3ae23f22bc79d37827e9e920ab0b44bc9fb156fb60abb494ed69d692638cd2e619f650a09c4e74f940ab5e5d522768946706990216d4a7c994a82b1c56a58f071f28a3dc0b3f14da21cd2743a038d5edd7b08487caa014521ad486d99d20b68211882444c48e7827006b9d2019325a8e56afb423145091201233a67fe9cb57a5a64359b4c6d23b49f9f0abaaf297cdcdb6d74a2d5031983b06eff9cedc5d2bbfbc7fa3b78aad181a3dd9b342db5a5f0c0b646ebeba98c4ea218922eedd1735a5a790cd24eb654fcfc59c8fcb4def95028fd6173b4944c1f2e02296164f6d8b0286ea0ffe9fb21ed6683430eaf35a0cc5c8670b0a16988456449e5ea6d0fd5cdbbfb822e6627f7f72eef9bdd7b2a2f3780879db0df90aafd66a6f9c639402709fa23865cb601d17e88209034d88da00d0f0e76c0c5e8c8fff807c69cae6a8b20251a72adfef06655aa6049d6ed7e4b86dfd36ec8c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000223db4d80482a2edd4aa646cc5be661322cf463c16fc8e6b36e10984b395f59ac8c97c00a702a9b10f6b6e28b6285af38e41204bfb95ec57573936dca16aa3c4113fd74e80e20ebf53e5c3180bc5b079474632a704a98bc966e4943585ae7876449bbea202b23e82eb7f0a7923de6930f66b4ef7a761edd196f40d093e843c07b7584f4829b423b4c403aa78359deedb334e6b36c0a1b6a99859470947a4feb50f926ae50996ad9b0eaa3bf4893b7f53482b59157ac4efb715c961cb53f3e8a0d4c0a11b33f2b0fdec05de00028cf5c09a86073b5f23095a3893532b35eeac1fce3ee6ee06e8d96094469e60a8e37a592870b99004bfaadedb76ce9c267ac23c9a0b87d99ba2a1bd5d482de6cb58937318633fa946509395dbd0ede8ba174e406a0e0a89b435f8cc9e5e86f26f545a1c72757548f8f7d1e4f06f5a9fe5520b3e1bbb2084f8bd085496438ec8eae38d0b632b7330ea66fc003d73cfe5b739fea81f2292d6535db3064ac5bd4330d4afe85f3f8065a1dba3ccfb5a1887e9a8bc3d6bb78d46a01b32c7f43e7a0323d7f55d2eebc321c87433a60827626a880adf7f12b3a157fcd146cff5d6d8e6320a36286d00262a3b1bd18b27dd922a382e33db00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b9927e3d0af791a498452511c95fdac29bdf4a5abc962ae809a45bfe9646a9eca63ee27dd345dbb9e7e774bda078f78fc8bd82e38af03a1a812bf054553cda01479f8f2f69f437ba0e693488adbf8de8c03eab7a9466c258c5f29347e4b4255d664ad51c2fea24587a405270883cd6f39aea7f4e9e1f2cc9f617ad063e03918f854ac746a66c7f79bcddb525c974b69f3ca2808ccde3316bbee593d5da9b1b4e2d71257ca1373d3d045800ec56a10b1da4871e97d5aa38b52e6e5e0bc73fbf8eb107c9aa81d81b284e1cff319c5d30e82a6abf00a9fcdabc9263c00cbb91749d76f665d6590eea413aff97c6148fd3dea1cb7950a0717f259d60780f6e792efcf7d578c228523ea3200ef0f36243c1d8e170f40152c60e76a51aaba45ac1878779487ff3e69f5925c5b8e890049e26d78d8cdfbd1163de9d8bfe60a39a96e018b43c21e6e94d08ad85fe2724d339e5c405082e4b43bca58e5f91d80a1e44e43a9c561264c1e4f4e60c3126bc6ccc805f0aea059ed6bdd636621d01539da0de3cb70a8c04ceed5d71ec45443880b262217b744b34547561c3e4208538729fd84653a9d38f4f1fefb7a0aad658513fe3e5817aa505e85e85f695eabc81c9329040000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad4ff9b4ba015722f069188ac0a5f78b1071ee50aab4832b4606657a4614f990ee50daf8154c4895b1ca14efb5ded5e2d55a33b5d5c9354d80ae681725e351fefb9a0430ac382307efeefc8d62a377ec87ba594e356c920c80e3a03515eb44325550de2e78ef3d8959e991b8c61fd2e359145a44c4544750f472040a995cd2f4d6e1dccfeb5dbf76f6f7d9b39ba415488311189fb2ee3e49a766c04cf12e6570c9e872e52ee3e42ee4a6807bc03b41a0bd19b30f5115c5ab448a9d6d68b41f8a71adfdc43774fae5620cccd49c80cf9bce88804f47982369f6f211fe23ae39ec386ed341153658bec59e67c26873ecb7ddfc1b7f33e490f7efcd9dd0a56de05343fb8ee18906214405485e4d16fb9f9ea89a523f7d707a4d2904f3d949c27528b36600cc134d0d4b45a01f77a79004e707c55a1eb639ea7506bd44d3644479dee2e8adeeaec0f22a48ae5ac19e3ea661ffb3710b35d97b0985db4800e0b25b34fbb25db1dc7e79e06226d28e74c4606db90d98f28e17067d9d109b4d7d1743137e8c6b089915d3cdeea30d7bbb9cfb48bd2ccbbd2390e4c91cf1333119e72487f84f4a1b097e930a69f00078ee9955071d7802be9663df9ee2807d1cdd67f24c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a60a3bfc8f533b41d2257bb2876787f6e0b5e78ff3eafb011aade5da335b98edbd9f89fdb09d9dab8c68ae7dd3cbdddd3fd79e8ddd42a644d614ba7cf5906227e9a7ef17b462eacbbfac1a5b330b6d28076bb85ed80158daa728adcaf55738a2feae8460ae7316ab707b442efd46cdc796a40e6afd0ca24ebebeaaee8d64ebf77e97cf4590cd0c4171d6beed8b6e88216c1c867668b08728c0af41e72bf7fb065ce04b60c824cd94c04dbb6d3cd77304dcad730aee9234c25a8c11e053df3c1a98f75da725268b46f8c0c0a30d0586f745beef2a3b8111634fd4375aa198156751a6220943216e5c66a7dbc845bc889366e16043540bc0607a2eaf8eeab94038dc54dee936f6f94af3fc330984cc62baa8629eb37b282cacaa1669d3e5ad3a30ee864f265f975e262671db17a64afb904d343d6d47ecf536b7dba1a2104504beaf227cdb78fb75cbfd79f1a2ec8df859f9d760eeb9377106b184c47fa4c944bd8b2b1d9545a14a7dde65b395916bc30a2859a161556dba3d7fea838a9c68a10ea535f909c8911847fe6ae7f472a507a92979eb41131cd581ad78cd3dcc38dcdf6e17e37a632634f953f0216ccf3841e6edf7104a01db0a89aa0f2be9c535f9b00000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b484026bd10795ccd6b6052add1e4546ade7ee875f24fe5e32b69fc5738f397a464c81b6dc7fef048d806897b756b8d9095c79511bc21dc44fece88a8a2d30f6b8aa9245bdf6f2d96d92f59f058bcf0a188825c9a79f672f040698e2556fc50f6077d1f79833cb1e4cc683b1a1c2da33f8e38947225c13ee57826415ed01419d921660cfdba1e399475d11ca20d0a1e52c026a14f635be58b49632b87f9b6d1be04890b189651def7177063310e52dc5e667ce61abc584e0fb0dc99f1b00f08c4326314210936328ecb69ed7ca3ed938f3f30a51017a4827b5e243b0884db4e4422be2d07a153057baf77c19585d1ebec878d2dd5468df0c26147e28a00fc87c013911f87e06aae8e4eb84ad0d9b693f6da1423e7ad5df0ff460f6a6a130ca922fac708298fa414416ccbee8d0347558248c5e9562cf17da6698f597f5bfd7b94b033053e6f8e0421f049fa92cb54c156ac489e1edc21f676af9f43a13f2a96fab1ee041a129470ed4e9f59498d77ea415729a4877d6c82573ac42d4f61a7143118f01fb0b1c76b96de39b3d8beda7ee2569f0841cacc9aaf0698786e0384e80c0cad19031c4ca7633f966900fdda8970ea659cc7e2506e3c1745f318e394840f32e01dfac74b5933200576e419bbe72834feff8113fc2679938c6c563409d3d8ab2b23f01f29f76c1fecebb92765dfb0b11ee5de541a757bb6205b4eac493ae1e3b00f4329af0ed5f78307ed4a62004b1c6a7759b4d90762c667d624d202f167563814df48ad7fc39d4167611f570b1af9cb0ad14fc6559dbee95f5433612427ef0708d6c806b6dd52006d4350dce2704bd05e3993ea2bed826538b7d14be6b30ce104520c482789ea05b8dfc756c819e91e24361c861791eefc174bf4626c9c4e6e16d355925454e18630723aeb2608f508626258480bf0683040a2075f5e4197bb0d50c6295d329c4823aa5494aa850d6852b5e380a4eb28b5bf9fa33d6cef37f51ed7fe6f496059e1111bacddde1760f58ed0c376c5193106d76037c3bdb6d33e20317c6485f31df44dee153ea36bf2576a6cb36d4aea71d26b01e86bf15d547a0bc009e105005a89084f1e55300369bff6391afe67e0ba72f4e879bf9279be292610ab2395618049e7338fbdc51743d3972a7b7588700055a1f3ab6410c604b72a3a982f59cf6a31a8d9bb9f24a910992a7b2c7c5881d0708c3440cb19e8ad450794fde6d3f94f429186ae1833a23832932de89369f3e977f7862d4bd0a772832dadab4bb9b8895d7c502e12323ecbf06f00c1bc39689af526c2a0d559c9b8d11b87ce07af95dcc6b6d1d74ce2b26822f41c12a7f9b9e85581e3b9ee20a6a43610b6712765dbbb11feed6519523cbafbc18afc0649a0c6027a8a19094e1be2bf219e99cb0bd793af0ce030be387cec9a1f1f5af6ef78f85c9c7c355a98a681dd217807d1b45803e979ab9792895089c6a809b3a4ba387518bbcd5f85fe41564002cd8d950606d544aa5aab4e81af49221765dda5cf6884c2e966259e1c34e28718c3e48a95a53e15c136835334f4c5c5f6dd4b26eca3618acc0281b6a59858942d0893e916b064a93582b5daaa83887847ac4645f14cd9dc4cbd804f8c60a43807086d4a9b45701179f4beecd9b18a5986186b8073c4a3b26a3ab89f4eb7f67e20698850ebd5b8b19e7b029eff114fb62231ad97bc27be3e4f8fada08b05ad470b7d7bb32e5fce91886c92cad19067ccaa386aea33f805b2ef34023573eb22c22bc140b66b09ab31a6c9e1ff7386acf687a67d4eef621057d910cdfa5a7be63a04c9348ae8d8beb843fa0eb04318c2f54ca48659e6aa1033a7d5606b5769d6330a401e95d51813dadc80e59519d1c00beef64628ebaf3247eec674ce30df58d22a1a3b7a95ba554116376d4576dcc9c9cd556a6a599dfba16cd63a83ac26611720defd650e78a1ad108bf72f3244033cdfc1cac8a100e8774d141103ae08852e20aeb86a65072daca29e3939fc9c3c7e52e18d383191dd1868a82e46eab187ae2360efab19773b6408bf9b285c7b8a27e0a20cae244c8e49572f94f984ed42df0f38c552f8a43876f12204073bad15b2abd7ded9835f745869db5da17449eb4303439020b5317fc50e08d650ca00ac8427dd8605c64548d97ad5929bd17485fe0763d3458298f662baa8a21f123e654639cd71d324af1b24fe9bb01d105a45061834620efc946a2280d026f589528d657f4eb86c6d710e0d2ef9b9bd63b26d1817d56a8cb8a176a1ccab89109bd1ab665c289fd482dbcf622a67e221d1bcbd0f1ef2f5483ef3b16e74525283538280d972b7ff020b41d104a617849d8af1c51302886cd649535cd16027d8c5c3895ad636f9cc8bb05cc22789ba884fa39517ac2c7ca8eb5cccf77de4b049dc0c075b77656a52219712a59de050b7b29a1993561a58f21d9683a2926ce0ab04ff72a99e74fd0b9d485aa6f59f80a66d6bd8ef5b22904a495cf8a7ee55816edf166a51582f71a0a89df086b20912950c566958dd276e3ac67c7edf307f44f3812d5dd105fcc63b370ae6f853798facea7102be25184a5f8aa44f6816ac457122a88dce1833fe7a4aca78f2c8d7e89f3b0eea6131117a3d5d558258965ed56dc2392eb31be16ba27c4846a0299d3731e02930f7b3140650b1f832c3b8078b6707d7f86d4fb81b1723c410db39e1b61c8b0314633f2fe08a7bc791b35db0fb2e7f5e46e9d34ec6cce80f11027216c20c833149e47a1e48eab836a0d1f6434809414058d5c1bf85e75dd02a42ce50c97a93d712ecb91fe82285bf07e5c6cd48f22d87a23bbb5baa6ad68279fc9bfd973fad6761857b0dbdc01d85efa917e7b0a270d58f82bc391b85964c0accab347c698a8da4068c402bf92277992306cd9195f7d10ab4d6483b19edde37c1836ec207f511ca03cb5f1db1ca460a9ca65ad907355d5e0c90968db4b05d86e59102edfb3466f8b921100b67a1df77ab323f7f77e2f13f3a83a1f9878ef083657662e413ed88f0ff011124bf3bf4336bfcb020f626177f6232d5c3d3aa3ee344475a69768f34944c90a12451d1f6025a0be01e717848c4ce6cc71bf640fafefc73c98604d4e172b4d850236c6920038fa481765b9024e879f8522705c3e16ed7f3c912507174371176221992fb3cb3cf6930436b926a5ae0ab69dc918157d682504eb5e32b401c4550c40916c4ff7112f2b09430137ee2c56c625a19749d75644816c75d3c038773f9af203f9abf270af742fc861697e5b44c09b17b80f92e607b20d128d543f0c17ef10707727dc06d879f839176f66d5fb2ca53b6b9a3fd35830d693b2bad5afcf43b17d3265a7de8474e0788191e0338faf45bfe2cc34353c7cdc3463959718e3ffc305142a718cc649b72ddf7fbc0eb5a064a7b114773b52028d96b3e901a19ff21043a68b31936e146833f13f1dc636a64710ac68b6c16a96c747ddb1f462f9388013c3e8886a28aaa19ecb5d3837ac30ae6dc2d41393681b8df51527e8ff6da441ce75c6293af7d8c8064868699fe0479daaafba115841751fa525d850e79a3b909b6d6696c48634f885bf39a1ccd9e9e74af8948874dce825d5896aee894507a287296372bd85663c4eb7e2d1f53e0a75dce2f6a708074394045d4626859e9ca243a8caeab38e7a9d694b1a328cd8b003591b0b8a85f8e8831ddb5ec59b156c8120cea714cfd5a63f27bad82c715a2519a09d635be202cf0bcf0bf836abc97d40dbe52bc50126d74956291c953780ff2865936d2392bf83bd2475d342f3cdf11185126ce715104aaa4c5e09fcade1397af1df76aa1ef39532e671222fe22d26a0f0f58b59e97df3203e44c5dd85e83a3baff82ae54fec541e35e6ffc083940d22600d63712cd897e46f659781fab7fa5dec9b2e0b90f2a1be3f1032ef60148c72b0052f7f2cf021dd278be46c23de8fdf09f353721e20833c76aa72a009c91d700a6d736aededf24c6b758835f8a2bd0c5a3ad121b31b423ab4e782eae1701311a755010b7206f65a5e01376232f4c799ce49f0fe24e39821031ea336ead8d4115967d75406a03a5afc5960d2b09899b5963f88f0c418eef9a29463c8ff9bad100b093dcf06f7d2e3a812513782ebaefdfc456ec4f2bb5f1180b6ee6a029bca205188133ade937573d2a921c12f5fb684358e5e2fd39e876b4b3d40af03a348b110441a44af74f64794b146058dae3299c8b50cfb09e4a27d5b92bf478ff331e1f1145cedbd24c239483aa4479eb267f52e2d88c77fba4d2cc3c95cb97548d2f031822e2ef96c361a26edce5d498fa4907bcae2f2446f10f56d39c0f37cc5a6a25ea351530775f39570518d69c8125b58ca73112193a0198d223c687dcea5fec0e725d34cd5730a965b9698b43b3fce3f9e000ea105096fe157a38245be1e01d0cd65aadc0d3af590f54d76165518c2da415202117221c24bb54260823aa814424682fcb03feab8a673b3ff74321d2992eb9fa93531db05d4c4191be1b58f0121634ab7e28f3c95831835ed5d8becafa8e465d9afbf1c2f6ceeec6f94fb11c082354a724c92953a3fa93c47186951330e9493dd08b660a9c04c754214977ea4f1603b3072941f198e84cafa49da03b36dcc3739c0fefb5cdfe2a619213a9b5de1c96c30248195e70c724215bb8c2de559f18d9cc103444e7023daa23b9a428041e20381d534537e2f463e12a0e480637af1e4d967b6add7dd1a27ea18e3152af27cdcd219067d8900e7356ee1dd43a2af93ed72f50b63f6e934f2bcb0368157915c1b102d58a282dc4fd55f0b369d47671fce1944295d5d7c0a9e282421bb6a30797dda31846fe7bceee25ee6b715a9d0ac5a54ee401e1592baebd7545e6425f2e4834f6cd984d3ba854be7355e1431a56137147befa7b2f314f83d1ced63b72018add70c13b31c0361ab6ff0bb3fd1bfc25d038d3b1008d7dd12908cee2e2cd237fa033680b9a6246949466b20cdf96fab84e2ca0b28a27673cc3c4a2e2daf400a7beb29eef4338568736a42cb4be5094f94289cfd9a5b27db1726feb8f058413a74362636214012059a3e7e568f5f96fe4cec87b6fb2ac09e38c7bffbb3c070edbfc3b5caf0a2257e4b06921cf5012dfcf6afa2180a079ff54418ed35a68950ec9cd1579b92ea3a0d83849427299a5ddb998cd98d6af8dd131d2d066288be115747c83642ab44be5c2b8ab7a6062a795d41ee796b2a5a8d3cc1d3de829041d169aaadf64c67630c1d9f17b5a8116329257eea3a96e797d2d2c67ba717e64b42bd2d4af58be7b49d69a7264a9d6bf867667532073985a8fbdcb82e62eee79cd232d9f3758b4b5c94c72d3fab19fdcb5bc661dbc309247a5d45722471d8998a420658690b1e1b787a6a2936ac8dd755c07ecfdcd36ff957271bf341cb77d97ec037467d2c888ebb1dc544e59a0729c4c1d304cb100dea3812acf59fbac9a155f0c0457041a6188480f3699eccc6aa0fb9dddd89d29d8fb8e8c3cdf4187f830aa0492d33d1e31e04eca102e4ffad1eab99ae29da3790e1472c83cec903e8808bc279067cdfce12a2ca37ad03fbafb2af040424db86bed487dcab43fabfe73fa9f078ecd679077e6b76d9fbbd2d385b05e4fa9260ae43655eb49b47e767903bb31226ab75b8065b933db2ffd00b7bdee731868d13b0431cd9d12c26894c649d74b2cf50c1c8379d8483cef7acb2b6de7077a69e36c8f4571ae8072a1d50bdc6481099dbfe37e22cf7b33e945340a7ea3502e4affb6eb4b30db10ba8ea9d72fa34e003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec90000000000000000000000000000000000000000000000000000000000000059118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae00000000000000000000000000000000000000000000000000000000000000590d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c000000000000000000000000000000000000000000000000000000000000000590a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd39900000000000000000000000000000000000000000000000000000000000000590b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000005929a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd0000000000000000000000000000000000000000000000000000000000000059141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000005925e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000005912978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf6741600000000000000000000000000000000000000000000000000000000000000592daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d0000000000000000000000000000000000000000000000000000000000000059189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a00000000000000000000000000000000000000000000000000000000000000591159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000005905ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000005905c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000005914d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000005903db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf600000000000000000000000000000000000000000000000000000000000000592ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb00000000000000000000000000000000000000000000000000000000000000591213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e00000000000000000000000000000000000000000000000000000000000000591ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000005914fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f8500000000000000000000000000000000000000000000000000000000000000592b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac9340000000000000000000000000000000000000000000000000000000000000059305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce22840000000000000000000000000000000000000000000000000000000000000059280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d0000000000000000000000000000000000000000000000000000000000000059223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000005917a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000005908858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c00000000000000000000000000000000000000000000000000000000000000592618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e00000000000000000000000000000000000000000000000000000000000000590f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa179800000000000000000000000000000000000000000000000000000000000000590e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f770000000000000000000000000000000000000000000000000000000000000059172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e7800000000000000000000000000000000000000000000000000000000000000590b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000005905bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a700000000000000000000000000000000000000000000000000000000000000059137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b4800000000000000000000000000000000000000000000000000000000000000592e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd1300000000000000000000000000000000000000000000000000000000000000592297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a00000000000000000000000000000000000000000000000000000000000000592608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000005918373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f29900000000000000000000000000000000000000000000000000000000000000590422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a70000000000000000000000000000000000000000000000000000000000000059204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f00000000000000000000000000000000000000000000000000000000000000590afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb00000000000000000000000000000000000000000000000000000000000000591998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000005928d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a92700000000000000000000000000000000000000000000000000000000000000591da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000005921d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a00000000000000000000000000000000000000000000000000000000000000590ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb5400000000000000000000000000000000000000000000000000000000000000590e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd8110000000000000000000000000000000000000000000000000000000000000059107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c3400000000000000000000000000000000000000000000000000000000000000592f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000005909726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000005924f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000005903c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc00000000000000000000000000000000000000000000000000000000000000591fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff09420000000000000000000000000000000000000000000000000000000000000059205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000005925110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a150000000000000000000000000000000000000000000000000000000000000059283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000005921cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb70000000000000000000000000000000000000000000000000000000000000059094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca00000000000000000000000000000000000000000000000000000000000000590c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f324800000000000000000000000000000000000000000000000000000000000000591f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e500000000000000000000000000000000000000000000000000000000000000592421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e08600000000000000000000000000000000000000000000000000000000000000591fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b0734300000000000000000000000000000000000000000000000000000000000000591bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e0430000000000000000000000000000000000000000000000000000000000000059304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000005900000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008104000081000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a18426f098696bb228ff6958e4c6820219b3d76fd65e1c71506c3664fbdf3ac8976cde56314e6f7f883a858f165083cac4435e6d983414ae88876bc60bb8feb020ce9bd9ba19ce9b1d819ea83da2c3674f8e08f2c0642648841c5b54b54d6141c1a7dfe740eaa7e2dfa4a0847f230d0e691aa4242389912e47e531941e57a7f8a52f273bc75dc5acc8927aa625e42a7e13ad89d9f8671393e4a94edd397d7486fcbea13b36dbe03d99e14042ffecd070f7e92791ba7dd41dc725e72bc80879d9d111438f2c912d8791a135b5852cec7ba49aaca77207d531a3ad5effd85d4fac4947290d6d670484aeaec8509a5d9f829a37039ca9f7f1d22e04b25babb888fe93c6dde3354387fb6ea9a6641178d3ba346468a7dc9d43a4494435823413135ddd8e78d966f097c74ef92536ace430f7f0c2ba00357c057021411d669689c87b21358e67c721ea50ef3ef5c0014133d3c2d2dceb90383d3f89d3ab6ded15f67773712e1d78a5a326e4e99e94363c16b58447eaa48df7079b778a696e81f32037097047cfeb93b4426842c70ba530034e5c4356efd16269b7a875b403ee1b65ed1f00f2b04a6e2bed1a4019132430fd3a3b0f2aacf045f1daffd70dc1b99a9e5e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088e375562d3c54053109290be4d781ee109a33328124389e564d42ce668362fdeae20723db3fe96fbcd299bbc0c8e036442e59ffa7412d97d31d5d8ead2b28707b687c45580d4f596e33a8b259281b6d62d90abe52ed6a53931a8fd62f18ab08f60ba7700db068b12504dcbaf518c9115eb788be858aa6951910b434d1ae225ea601bbb452a63ee7bb88a46424d92a3bf1463dc873eb92c3e287156583f79a7e2eb7589cea39cc64ae3114b99ed18a648d3cc4974457be685bc20f323c57886173aba0b3df3dcd9cd3669ad94ff77f442f6c3d973ee8090414e9c71ddd5a7c5a6f4e26772472f7ec5896ac2795315882b45222ec73d3f0afca94d7a8b92e640ee1d6eb86bf631d5d434c40ca8546f511164c0b32e630f3c7538f4f80b91d0d4cc5c1dce6720aa3bc1fbad2b37858225550b85cb851b8ece7ec8070411b369ca39fdcc246d8db7c59d31d6f3031784bdf2819a6f9aaf99efa362e846425cde7ca3223510256ba1c9040897aff5f317875ebf60fed880b2bdcb2c4e73e01a87be87ff70f3b548d464cce519ea376eea658660fad01e26eb67b38d55c38b8d6c6aed0476d7aed0b5d1471cfccf28d68d1aa1c7ea772cdb186c2c5fb1a430115c7a6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021d7eaac69cea4893c233337a4a9dc3638b8580c153ed819881f58ea49efa2f8c66567c11e2f42dc5e22c07660c96e79816f6e883f905cd16775a7ccb7cf18dbcde6b9f99b7454c14dfcda2c58f432e86d51c94fb2eafd482bc64927e6fb0a252f7e51a7634284680cec00bff20c5d215cbe3b29631c7238648ee7532ccceaed052aa671cc044e358bbbf564afdf84ec693d72f9bfe3797514a0e8895931455c992c40679fc59d0195b3a0cf98f499891a1d57792cb307669c9e046ed355176f5fb3ddf45bbed70cc7ec942f7c7b44acc9b9b2cdeb5b8f91448df4b174818a46b0966989f16f4518198bdd56da5117cb855bf64cb3e4a47f4b3a2dc2676398d79d7ec7fb625c6b0f6ae7f4c400d723a3f0f116865889a2d416872be45a49bf8c849388925d0d0e202f14a2506fad12ec9c545c609afada896db52c137cfb7c5343a7e592a1a8ac7722a92468098571a57379494571da32d1ad1595e990cee85e9d4507fcaa8bcd29b86aedd3f21b44fdb3f51499d6c51a9cab4727df8a44ba4a6667fabb3b2d0283e17158d411a39ca1bb614b49aab3ee45412212ebd0fbe78cfd2e57bee09ec768d65c48a2018f52c5d16cc5dde8a2d5dc29e837a3b2fd8db90000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000269954bebd15d2042d36f8b9619fad2a579d392268e2c104a5fe58f029ddf5b1018f508f5aa864bdefbe4bad40b514f69eaa291511260adb2155c363cf074b15d7ecf29cc64afae734dcc4d06aca3e2104243b5e20a37a96b502c9e7d741c2dd5813d1dbd5cceef380b5164c49d1979efb76c8ce74330100c38fc1e050ed7fdce13ed09618e50ec7da763867e563ffd2665e8049835709e91ba76b5aea32cd92a7823507c92a118412f033c9dd17dc95b4d0956881596a2183bf376efca750ed869691f1d24d016470e621810e91c110ace2cb38beefcc8ad13c432e49e0ecee41b6294ed980a19639201fb65efb8ab193eeb08f19682dd64afd39d1ac729a1d2a0cb8bae6fd0ca42a791e3367e1fa681145d8b411a8676d4274041af9deef8e14e9a00dcf79423d70af01a06e02de73a1c2c6d037161fddd1e3c87153bfad6db793b19fa722ac8a4965dde5e3715ddb26899c080016aac0d7003b2e89e5f5936aea2f8ac222767b93d5f9c1b30e3d636bb08c7e3718e158dc60000a9ccd1e013788d903d6a91cf7e4d749cc89002916bb045a10b71414541f37ce6a5bfbea2b9a96ca5cad48b49f027ba66d3b2615a93c382035eaf88149c9f54384dd998a52000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029da2a55f6756ba1f3a2de139758523739900e4c32189deea8410a8f01fcef86064fd899af854a130694a9957c4b59a4608b0435121d7d61cbbeacb3b572df56688f692485bf3090afd4bc583d6c9dbe9592ebd386f7fc9c5486a66189ca88ab8f56437a8d7c05f5cc5b1cb4fe18f290c9cf8f78dbb1c3e70a9b572c9ef431ccd72277455eb7b7fc6a9eb7c279f7ae5f49f0b9d30262197fe54cff5ca59295130d8ca13694144f4f33986b0cfe5102c598c96d000381b29ea5fff42ca0206d1f1b83d89fee6017e1826d963a28ad4e34fbe11636809fcb201d99bff46353ff873d7f562a50d89d3de00153086e237335ada86a4b16e3fd9517a1c5f1b8131f48858117e8c8b4184f5b1af385c2bf4de1a6da332b5ee9ebd58da8c4f73d474456ca3aa7a3e1e8fe407c006ae518cecf44d7887d5a2129d4e3b45d3af097810f2c6f953fa25e89401fa2e400ed0aa1b83d7d7302dbb681d6be2c7bfe891e3ac27b89864951efad0d01aef4e036c70bf01591324058b900470f139c8be295705a3fee369d8276415c53bd7946e765a95f2b111c03c2c9de97b91aa5bd8e334fa8d9f49eefccb82acbe63e1ed1d46c6d71e9270c851bb1514033647f20190a62ce2400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bc0d8aa4247818e14cfbedbada65c57f843bf8779727616c7aaf3e6c3acf327f247e60162674796642eeb4fba4a44e3589b5768ebe2e450b31d28edf79450ae00c53cae085e3fa6fa82f8cebc4fcb7e6926d353c6cb475a8d104d4f0d13cd78e4d91ba8a83b268a2234c24b3c2528ad6b5b3c01723a22c49b65c0413d43aae6cd498f24e47b6342933d65d437b31b1167bbc0dfb26b8a6d6c79170abd8cb3b65a10c8255df30d308b51a78d2bdc48f3206326fa230829f3f23238a990a4786893652c10e343273e7853ca4ac4686eb20c61bca9c0e8b760bf39a2b30300fbe5565e27bfbf7e715e306bda087e8747e2cdf17d7a397da21172859f2d3de775c6cd3007c510fb7d9b699853013405a81969a13916ad0e24416a8e8d08c3525ee43bb9724c5bea5f23dd732d3e850a208758e378d45ec5fce74f28369b466f1cad946fc1513490aa7b0c59def2bbb7a93c4df70ad00bccd6605e6a18075d0cbadb8c9ce634b197ce488c78221e0be893ce3576a2d499b7078644c8c63d86addc0b36d7e2e7beb07cfb30489baa0577634ed45c3d7d9a4ed2a7f182a6ff5d03c5d54fab48dd65fa4f4c14956ad6fccba0174e96eb1a6217dcfd4dfd98747354aa8e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020ac43af6c8c9e624a17be7d94d71119b7d24e95f9153f7fcefe0a6c86a58625de362661c3123bd1d659a996e9409bda717daa5946aa68b8ff0a7c4543a2690c166d9d1b7c2113e05623b3733e58f7691a5881a78c7bcad72735bd0b1a086b516a607ec4bf365dafe7e6ea4e782b91d84d743c7691b99af6005c24b899a380378aa775b174f44fef0f2cec632def2c28f572ca6860bcb866c6cfb42cad856a54da40f8f56d0035a6b390de627f82633ae4f8db0dd12361ac0c0ceb996779f408384757882f8fbe1c0a4a8da2e7af05494a88c247be6ecfe6fdd289b9411c2323109e66c575316ba25d54c63054cfc7e320e53f6a65f245f25ec938199887b3f5a8b436dd4799ac8f2ed8a059e695b187cf5897aba7aca0bf34b35e04eae311bc3ed93f631d849e543ffc3744599f5bba31d2eb3a4b4e565f6c2ca6a76900e86a6a2d393c35aa0fa14bf7ceb30c18d739b7dd88ed27b462f6628c1ee4a3083377be270f8e8e531b131bfa2344e2c1f378de0843c91b1b49cdeb0abbe90e99991756a181d55115bc567fbf56c890109723eef4758650d0ae14955f8a4e5bac8b017e35804ea8a07f2f3c46d11172a18ec90e04b147dfbea9110fa9ead6166a3332000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018979d45f111e9da8d65f41867c5d329a0338b1e35ad48617d128aaac0368052c560ae05636d1283678ad0fbcd51d72fd391e3c707d6b68c7f8a4c651fecd2f6ba38512a2540b5acf09f3153cf12a2e50c013922f7ddbeca09d51748207aeb74c75958cbdc339d5cbed92a75c4efdac26ab0e95afbca76aaa989edfa90f5f3c6cc0aea715c0e1b4b44a69b6723ac655ca6824242c8314db3059bb6515540536910fcd999ec26ab99f3295a64f7011b0c742015e37c5c7851418a26a4851f6d671e951a4a41822f22b75f1a8aadc13f5e6735a4750049f68e131f3c516b3c9c435df976fbf88508ab49264ac97fef0eabc8cae056100210a7f6f4e732f8cd71bba14e5563f28b785c5a32d2fcfb447b874eb94b838486e5bb0e09bbe34fc6813d031800cd622a47c2046d0e973454032c290e8604c56285ad1cf8f562ed819508582c37b661952a414717f873f423d9aeebb20855cdab9a6145b980f67053f4e3142839e2cd1f6e38e6fcba408661e009b5c654bee289084e1f9066f7874c97f32ef3a341cb1bb63c72b605f5f444d433c87dc5035a83983858236cadffd6c4955060900b9e974e21b1ac97bcf266c9ba598abd40485c07d2cffde16c9ec32e9d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018b0853037283bede173452130d8ad6278ccd1e87b32bdf42884d5f0aee8d5bbbf880a7d12fa0189be67406d1acb5617f5272f94e28269e4def633975b69b51bfe00ce683674a1fc1900316040c70d6e2752bf1f87985dfd1ece6c4fd557fc8a30dece90f30da6dded941eae0fbf367123b9c25ea37606586cd13a81ef554b3732f3ba41cf079bbccacf5c8a6e61e5ab2947d804dc22af50d8bb53550d6ba5611466f851a33c77a1108cb7db16d845456737372e26fd88e11ca34c6f57a0d3405874003b4cf6e0fdfeb5a94e30d21b8410c6043771b3ebd5d5b74d1441699d948661970607abbdbe113f1757c9471f06c17624e01d9a34109b4b554da71c0e05201e4077176baecbc9c95a85bf1feee96abe504b0805271e11f1288a682a1559fb6ea8c189239b51c77372606edfac71b3945fb4ea7a1a818cfb25d61cf806e18d94c0724c231eb190e5ee8d15f462137459a774acca96a59a3b01e5f19a610104b875775050d0bdb2abef2dc8b43306a94d4c960a7960db33a543da526b21077e44bf2502c8ad3c82cc72d682209c2919ae030381e8284dba401e2fe8eae174663e6345c9f3b65d9a33ad2fa0e29b20f6f64f7352be5d255dba243cc8d165eb0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000166572a9e10b48d7f95c709a176de775218238b03494f2e3b8ed1528cb287def324af3e433ca5c71fd883ddf0d011c3c7e83eb965ec45fe50393c84142ef4a50c2c62a23d7cd5dfe31b0f84cb91882c33ddba85e990b6288c0887605804518d69c77584463b9156653a292618dc28da85373f90ceb75f7fbfcfb0317a2189a682aa7b1abe5e1d4b5ca03528914ef34a97aeda8bdc103c3627e1ceab3235bfaa75a8a4660fe3a69d75f403c7129e7bc53fbcaa45c721b30940834e2db4caf230e37b65519332c57a7138f2cb635586978b527f12a2f71370dd1dbf2c00d906a0696b7ba1f0d90d75a9716154117b3dc5eb85dbbf2ccc66a48361d3a28c82318a0121fd80dd765998dffa617d93e4a503c5f3ef5c2df6b3b3100f620d7ddb46ce30a6bb1ccf6d393ee460811cd00f9a31a73f52092f3fb57b1df8c24c107b9b38f0cabfbbb698c42e2af06ade5be8146b832634579935d090c96182404d6e10af5eee336cdbba8c6f16ba2f5101aa9c7f2e2472e6eaa132c792faf9e7dba8bd9a09af1f60d2e1ba49e931c0ef764d79e5fb6d57ee2a43cb4ee6822ec20277ca1d0d289a5ce8113de4aea6f527ab86b34272fba5cc1d59246752d9bb497585963d1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006fbe4e1d29c441a76c2468fc329bd1bb44ed7f1c89bd2915e88651d1adbd88db4e763fb978db490f5192f1692fe2360e8fa2518d9ca36ae0c8657588acbc6a73898703ee3717ac14a6f419b012236857f1d025116797877f3e43d95a5baa5441abf1f1be7186eec7103932bae78c46aea28026f7fb342b639f0a526003960325be7ef76df692c59e74052e829937cad523fb92f9832bd540caf3a0e5c450fa9a97f457dddb592a22c9911d1576834f1f5d081bec9a00a16068a4b008a1a61b66fdee0e8e42a3a064f108985ace8e69d49d67306c9eb2460c5b01097b1e3bf627c84aaaafad463bb6b6ec1cc6e35add16d0a8aa2d41b8d9fb9fb1bae71e9ee6a10859a96aebed8c8861eb21d497af5c1bb9f4ac0d7b2730267ae2d4461bcb5e3fcb530c204251db935d28969b658240f529f31178776683bf2a1f90d83c5136c3afd4755b2a57af7029a13c9568dd800a44080af941319aba8f4767e14cd6415a860b490cf4dd4707712a7a0b6bd9b3a1ac3623f6847c86584066e3866ef490fbb7a625d0922b18a90183615bca8b3277fe0f9ad45ef4936844197cd9bd7203193898d6e20ff8036cb3628837ae083b388b95b258389be554085c7f8c8cb393d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c9cacea6a6260622e939e39c36992b6341bdf05e8cf75ffc00d2e32e9137c018dc23e09ecb38a4014a1cab9e529dfbe5bfd141e56c1ead4c45544cfbb9175fcc58a807c2866ea55b2674d8d6bd089d1e45f8acc00a6b561b14df4fc57c61e3858b1a3dad318aecf80d77a3ae2033b41ec2d8014a68a3d0142cec6225957dccc56882ecd8a1381abeb3721e0e0706488a4ecc9a6b5b1487a9ec0fcaf4650a591ce80a3f9064d5a3f62f88e8f8fd00e05a4fd0077d0acf6be4e0b6a433acd57e54d8c17d04712272e2eb06827a79786e585611066355efe112de47a3fca6f2146ae31689f38b7a5ce6428e2daf0165c3b847e5f061c3b0afbaa3cfed18a7765bead9a627960fbeedced2707ee91554a035b53e3ce8b25d81d31cc3e09adc3f8d38696b0e7980625fefd315e0f86b430ada59db02983661525c3825a3e9966c6bfc6c722ef37cee448088c25743eddcb81fd8070dc5306b3c503334707ce80786effe63c9ed9c861a9c9d286c876775f672e92c3cc3b2c52acc14388222d5371514641ab2fa1ca67a69ad97ad590e181b34267f8105431565e10ae2d871941993986e2b63b5a39f7eb2978b1f0ffce40e8010d47c0664a015f1973cb23530ff1620000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000244928a5e566ffabf3d5a2a22c6fec32a90d50520e5fa7b6b413c95c4a7d9e0e61b5287bd827733151b798655f8c0a5573faba4c96346d8a10184acf8e878016d898cf621687ee79a7a57a15f969cb4c4e26486971fd91b5530a9e2cc0cb021820aaaaefcc845a20023dded91e64a1c04c0864d2a5dcd8828047c7f27831d2dc4006a278cc3ab46ec8a2f0a40ed6adff65d15bb01cb975f88de49d752f654098bc4a58254efb13921507d5b0795c69177e3ef885986134fdc25f6ca937c621860b74ecebfcb05aace6839f29a809f8cb3eb943d52248901b44a3c151f17bded404c76b14fd41b565e1e4412eb0442074eb824f207dfb2399478af3f294199c0d7873658d5db0a34614ab7fa052628a65af9054c0ffcb590536a21a2b43800c5046c7b6e18b3bab650a3a47f104b530e4c0676c80fc7d92bda28540c3f648893af847a1cf3b27c559b5078e4e60497acdbafb3c91dda571f824647759a6b637acd99a6f4c78e37f3a09dc9566c3a95c6c2d47aabcf1d01f26fb6d65150aff05bf3ea41476e02072b33bb15dbc00d29ffdc2b988297437d870c6ce8612fb0cc93e4979a3de19755b288eb17378f26bd60e475ce9fde8420308374385cfae242e780000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180cbc8ca98b8d8276bfd9848db5c68b0f5d0778ab3915f7195f3783faa5253f2ef49ae8363e987f971d7f95ace3e0c09a9ae375581be3c86f3942d66cf1b6ff5e5fe39377cdd1adfdc426a3a2f7094b208807daf53975f71fe51ca0a3df5b9051f33ea1a2b8e10f22916d2b5e8018f08d2a9bd2ef8486928c7e736d69ea181aa3735e836f14bd5fb5844d4e138da7402e770f8f961e74f5cd65ba5870fa9f765ace503227e6801a83b9e581d25a4646dc9ae2fa2ebc724b7c177a5ec2d82904cd49293dbe39a75560ea72275fa361b3ae9ae3170cf3a6ba020eaa1ad460a72d114a7b6724b751213074dedffec06121ee0b6914893e81ec3662ab37c2ee66bb87044ecc42eb139ab91b496040fafdb310c8ff354b7bf30032afb3f2235dd93f82187511b4a29d77a22272ab992b3de8953f636ea201550f889219ee372b0b4a3c884745df5fd3e969d7b0ded3896c6cf59efa01c25a5947d275c75cb1e704ea40f37e7f1308c379cad53dc2436f8736a93cf516bc009624fb79d81f729668a16d0d738979aa6a27c88f38b1c3b3c3b4dbf629a8fec11a57bdb44271701b77d77f3785d97d6b7202c2112f4fc30254b04b255f19ac452c51ef65f3b23028c5cf0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000961f8eb33e168d3416a1cee71ce935ba7d508cf4f4f7cff2b730b893a671ab90aae76ced82190f093b9b6380932c179a832d846826b1beef7ea3fd535014a9419588e6d00852b7b2f4295b4c0cca1860bc9f8288c89f70b5a7066b243ebe9897d644fb8d411604afb055afd0885f53ee3b7fba21f4e98134d90d56732b327f84d43e551ccd0310399cfa07ee1f4d2d5eafec153517ad9d180880668bde40f92d1943f5c04737b4683ccb50ee22fd6bdfdb798dd6b44b2dba96e50651b1bebc037f39458e42d2bf87502b014b0695a9cc2181ec0a12474dbf0d2df46e5a767268b4b5adfefe13a2bea839f0954b6b3a91ad2d9150d79fc3c6fca4b5e0a5befcda5aa9752d0b4922c90b7c9be8334645e1db2b54e8453baff216e8ac67255b4e05b5561085aa7c46d49feff2f6c29f3154d4506b98ad9ce6091c45d4ab55d17afe5cfb5c73ac8fecc3836171bf4637608d7462f8ac14c110d10c7c037dda50772845d643ab1686c5d98a42ac15f04d4aa841aabe95d2a9884bf2e6e02dfa3cb6b8123379612d40205a229351d217ddeab12a139501d08edb0378c5b7f2c2b7f7227f626cfa2bfdf6f2956dba96061ca4dad93f0e4b3ccb81e690613f181e60b73600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ed0b97a1dee148d74a71de0dfd2c6e9405fcebf3cc47aab7144780d78fdc0825c6e5be37dd2d344e0f72cf779b08ab2468a46c4f12358278f3f49fa86ef2a1ce0dfcf4c164fd9b80a9a3b9227cee48eddac90506df40ddea415d84a67e85339c03607a48db08bb22c0b9b4b5fa555e9542a863be1dfdad4ab0378e63dea3e7135aef21054e80b362276e8948d54098821c92e924bc90e0f36611cf3af965b4b0756aadc47f632dcb6045839cc05d711b8855a656e4b9ab6959b488f224f795a1ea9a69db089913e06309e19f55364fb7cf5928a3327d317d7bc5d7fc06e71f50abcded347b4bccce5eeeb154c66faa6b24b081e8d6f1e975dbe7730dc194393130415d97e8b7d463003118d5e9cbe7273854225ccdca4976e0dcb7673b922210c0fada3c06940dc1f536dae87c75741bb20bbad21f03205ec1c118a163e7d9a589d5d8925bca518269803529e9afcbcf643e39d87e2396a7a81f82b76604068e51afe8d024aa6ec75116193dc1d449dccbda94b37a401ee023ec3d3c92e7e4d47f9563e80f8c90df4b0c98aa39cbac95e6e38444430e5f27a2fc2078dc5ddbe083ab891e5633bf4fbd8fe82af3191e7585c4d8e55b33658fcef33978b4d29b4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018170a1ca181d77b956028295fa47aa1717c73f41a1af15b084c30e9224c43bba5f675a9fb2a62aae6d828b0575992ef2cc9348dafbedf69abcff60181cc939955b2b96534e8d298b89b4b41435e0e42f314096ed21d5ffdf111c961b968d34a650f1c01d7ac8d4c1aebc40ec6f250bc6303bbc969147f6e4599c17461b2efaa1d64ee3c8d7802ebd45047e65ec50a8c02dd5bae66e7db6edd578963dde11362722e61b7759ab6b6d36df5780b2aab9f4c314929ba48f03721ef521472d534f378de65fc6c445b1039e3fb437daa4147349f18e8f5cd50369855a19869270a36bae4bafa1b4da3ff31322f9426c0c599251a8d73ff5b6a2bf9b6ca362e0955e828513c2602263d8017d082130bf7d4af97a24a8fb1b395ab8e7ac5a5c6c6aa5a93b8cf980bd17403ca38febefb9af625762865dc99cdff13b934caa26a358c319f36cfad9d34f178c03bcb71ae83b3c12b79cb29c9185843c6847f6cf4dc66c50189627ffe24ed7c32f7a5fe71c952cf3081c15be0b601e532ab6cb3ae2687f0312c7042c2eb94e83a7ff8cf0f93af175555f9a04eb55dbf89e1476ae3e64dc935b8ab7c2dd864938bfa57394ebd6ec775b203c2f3e9efd7da08fd62cecbd7a60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000191d79b5ac1d10f98177a696573385df5a5bffcb73c51de5eeb9f7884be34d2aad4fc2925e8bd5b9f739e7f0105e9b3692dfe577be354694b38cbd8ca1b55e4038062e44d78a1190c969eacde73787b4754eec608f4d5bd387fe5193e6a9654529478982a56bae4db10378eb912a43803879770be092b1c6484733c23cf56f870d7986e2a0a77b243e3166c48f1a8213fdb8fec0972c81d90f98094ebe5a96fe7d06d4695f2af2c925303b84e629b8422fdd51244ae07f9c1bda8094d07287e7a2bf1e2cb56254d7042281a052533a2ea26c1b9ed2bd77e1445e92acc810fe941b6501c5141705f3b0a3a09382303cfa84546111268c5445e205b27c4e72b0f0096fbb0273df716b3238035b3f4cdcbfec6174b0b9bcb3c1a07b9b8ba88085dcb92e8aff7b20b859c72ce21125dc621c0fa022962b9cd44ede193324836c4d3c60f4659cf801af1edf0009e475e87d4104bb7dfdda50d574dee32091349ec540e7e6c73770847311b49c257857386144e8ee8ef3f082ddf5605dd6ea87673558520c10014d6f3f4e25acbf2c9470b83ec40b5ff6438c6bd3a4e567bb4661bde386b331659c5886d3ad503ce8734370663003332b19b75a31246ae5fb196e3afd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001793b79237bdce8271daf4dc902953810b7b67a9383046f59380c2245462d0afcd0529f31ece7b934afde38764e4da132c62b7b6170dd035dc8ac72892f4fdefbf4d0c0de548c593ce677771f26cb83194a6c4792d85b8e7f3056c580f1b22d6fd72e91cd8b07b4db168acb04df0f3968894b6ce43ae7050cffbb58acd17761b1c878496143702e8d4585688ec0a702d55023aeff285c9d075b7203521d8d714e35cb89554a0e7f716f82c86b8368f792f3b714a82b234b203fa979c5342c906839ede5ac2ea0ac0801450c3c554f2c248bd7c2bb46beb47dac3202630cda5f24556010a4c2de0d1850c41b3b9117433e6b0012b0518fef9bb2b1ab6dc6c48e1325bb6e39a164149d955bd2db4ef89312002b80933de51cf1ceef2599f3194860ff35f07802fd9781d9d916e1ae783f9e41da2e58aa51da2fd199e37fa925b154a0c619f85c26e4a29b3d6b56210387b6603e03d50f519c06943741252bfd74c62190021e850d3d404cd408bbdd698bf857f59158988184c772279e4660d142a16fa20d85b5261cc345bc39cd636affeebe717229e334b9f5fa8ecfdca96880998e5e647e9a2310ca2b03c8daff5628b0a642596c901597136ca479a3c2db9680000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000843222d537904b3f976f88413485cf80cf852ab47d0ae477f43e11e66b0a1c0705d251fc596ee2c27da7e9cd4a7ebf07eac5e4815b81b2acd8859cbf407d373556413c5c7037432d5cadef9351ef4a06f6fc8be700010630c59d8659e4ba6c186913ac5e26923a68e0f3082b1469279f7723df88e1db9a681a92ecb4df82e35e019522a706241e2df8513ca130b7333ebdfa354b304cb5e65b2571fc101441e5856ca946b94f9d82d307f3adf754dc38e939dc37fabc50cbcc9ac063d154bb86adae180d09e40d8f68b7ca0b7910a31198884f4ecd0e0dfe3f6f37c114acd3da640495bfb98d6f1b33b43b6b8a787d21c53734d3c55fbd2dca94649aa5acbaf455d9410d06f7dd2d62c04021b09d72ca2c0144d18a93ebd8515b0d18a11b2b82494a91391557aadb76ee39e4413c1c31b0b8964f2104d2b7f804067532b66e7ee8a63f46f4f2698c0c142cb6bc67f871a996690af946d94e2dc82d679c43080f799e755ec94a3c6dd0095c1c0b8fa47be5eca1b1b87a0c1903614892397c31d74717fe7ecf33c85501b5c5ed34d001732a90c5a46636db8c5eeceaff7c01bf6438ed05ecdedf1d690a674d2b4e3f6debd9d9cd066fe21b6132f1da6bb8d6e4070000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9676be3bfa8e7fa3977ff683784f1b9f1872519f69b3c219a60a43885d6b24f916cec5567c9b302eccdbaee415f86abfd79a9c776097f1c7edee0a8a98f2f3e550bebcb24d4590afcdd8fe93b6be7051b4be1fe9dd3bdecb4d25f4c8eca187b45206e0352d0d9a9d9085c80e8efd9adafc3d005a9cd698c9e93166321a8945e04a7bfa0a4cbf9e7d5b5e72f4251ec51606e02af49c3289710e98c74f897aa71ac3e05939f507248d7330817b336500de04aff6354434038a33fd84e07198c7541048291ccdbc9636d76caeeef31e79e9210aeeccfdaebaacbc663c3d112b7a62b296a30b3d6cf0ade00c53456961516ceee6227de72a1ff7dee6ccf6b5416b348d032b0f5cefbc1b042ab6f35b0978832d5e7d55834287d111f316ae6b9941ebad7fc19d0f507907e39d503ad03672d141b68f6cd97e9ace9cd4d33bdb8e34cd6720c1407ee6c7ee1079cd7a42e43bb3b6407dac81f2aaf72f6650e3afa61a2dcd9ab3f37c031008e677373c3022bed5e070c6c095d963b98fa894912e1a22e330f1504fea9e92b0871abc6405a3c4611fa5079d7c66d21d8e2c1529ea0a5e81121e67fba6498850963cb48bbadabb4403cd92a685568fa9f31d8dbe21c285200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f632d722fcc60d75e79b9d990d3f2eb26de080067fe8813897983187ae4fbcab8f7712b9a0e0027b87e408d3066d72a542563700c482496b396fc6f5a6d310d9697d3024d6f61f53764fb991544915009b5cad31429c9fdfbcdb10ff13da3eda0cd438bbe792c7712d7e3adbf95d5ffd6561831fbf419a9f50b3c752df92e42f9377aa767aa2d63e74d46c6baefcedda85e35a14d1dc269cd7061639f2f62c56e85dabc125a7cbac508dc10841efdb3efe525a8551f6c2fb52176ac76ac7651dfcb861700416700b29189e30e287fa6dcb3cca475fb478a6a0b32b4dd4c7697509a15a4b0f99267d799e3b88986913f0de4b7038912e67eefbb74ed496cbf5d942c0077d8e2ded8179b231520dfd5a8b368f62f82e1fd9c4caf0b6945ac223dfb2df133a443d03fa50161a04ddda6248328cd11eea5197c2299cf59a179520b8144ad683f3f9496041da30ae6b28780febf487d407ee0192027caae995e419eaf88cb5500c1e124243e70ce633ab6ebfcc1ffbe7f476f29148dda75defb15eea290359c8c20038772544ce0dd29f5db8ea120ba1593ede011aeaebd020ef54f70cccc379f4b10d433211abda65b50d3af6ab1bc349baa7c17b179c3c4a36b190000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000923d136a631df4c4965e1b91ea62adcc29e32dd1007366cb1bf8d27a0ba3d4c48ba4854565501225879b5bc14adc918e02ea2866f19921e43050e81830224c5728d694b729d8cd3f04801c2a95979177b8208281a4ca07d5a5fd6b8bdb07a75d32bd9caa61b8283401b728909bf9c7e2205b9f8b1f5f0c4ba4e9de9b88bccd7e9b2a9e620f1eef763b63926d4c4ec3b33508c19e8d825fed56f9bfec3ec312515bd3c385e14ecec6ffcd795868a1ac6a460ef69889520f9927109a397217bcb0eba4913d26611b58e99fa5cdea614fe477b3bf4c6e52857a14093c079e21977816737852aefe5a5c1be14d1f70ac2cfb32c6fec841f6ad1b5788d2d6167ee53a5fd922d0b2ea70e14c489655f928e18f0222db02d9395dec0a1a3f4efba37dcba7a767ca4c6ef69e33f96f27e9bb8fa74775ab3ec27e6d86eb38077b749cd7fd1fe5f5022209c3465e0ba486009553cf848e37c62981dde011c37fd4124027718fc3d6256b2e31f1abd9c6dc357d423f483957a86bc225b86b18c4828d77859b2cdecd3d841e872ee88c58132335a78c26286163bae6f0a3079e244adcb96647aed649bbd3cfd0e3d76d68376cef81a5f1afb94c8b3df8acd528f1171c5e6e7f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c279c2dde8af9566774490828f87dabf98119a7ec641022ec1389ed91cf8425ec1f1f2c8272603fbdd799d0b1d51f7e829c4feba0abf9626086e8c5e07c7b52bea04b8496808be6f5e8b2c32627683e662641b36557485757e2f0e23842850d610fe2a5f3b7cde8d25676f07d4ccbfe3c262fcbd9ef552d764340ba01b10d691782913cc0678382815d7d7ac5c6eae7b63b35622dbb2bc01634f259a4e39ecb579f4d928e9d158622aa8abacb65f186af9ea4f0d96cdc86076f27bd4ca035d221e3c336b7b04c4345cb2e5937d727227c9c325a020952be5d70979302c17bb4168b16440a0b91abbe49dcde15f6caf229cb9559f8f4a2ad81da7c001e73befa46a260b42d6b041a0a9368658155fd02eaf812915adc6bd49c563d61a4b05798513a8565687947ce092865d364b07b5d71ef53be356a1d15988269c0e100c7732d161eaf4a9d6f61cc811e45be84260f6c2ce53eb5c838962391a1a03ce9a99f515b91531dd00d8901259a8aa7d6668be64e2d79c7a63b06e80089e8203a021344489d7f8b2281bc92f68c7ff4dd95a9ca98d35da1c28e9ba42cb355352a5dc793490e5a2b62936456c9fab852c1f2fd3aac8f833894483814d653e268eba17500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ea761a8bda1260e212af86bb59e3cc4be37824e2ec732034af587efe057b5c693f0508a4e1da93be3e1f5c93f61b58e0a741e711dfef7244afc5b368fe99d3277ccd3678b79a054831b6dcae9a3916493a011df7d05a882e0a1beae46c073581c24543c5efcb7f1e6ff70c37eedccb7bbf8eef677a04ae66db86f56bbf25e31ce4aa427a7de5bf61dc09c0d8536d75723ba2e2edcde31faaa4b05e9dc5b5513f1eee11bdbf3846c2eaedd7d9ee1ff3a498aa4ffd8daaa58fbb71c20757faf72f4928a3f160fc4c3a435c1f85b97ecc43c5a6a854fa0ddd92b3f4fdca906fdd25589b7fa0e30ef646e4632d894ea0b10125a92e8750646f1429bb0317907f3bee1fb25a5cd9d73b3fd0b92f2bf6115c559b1f9a6b58442343240f93360bb52a735b82599cf47756b516a6bf9af5f5ce90962ab8a3e3ec7c92942096ddc83bbd90bf72614ad94b595d8a787693133a14b8b34c78e5389ac517d0e0a4dc980fa8fcf69f5ada824df1372dd43cb6015c7547e2198650d9031a3130ecb1939f76d1c816f0ffd9abe890aa3b24509e2eb2c37d5c326f94768b9582b24694e133da25a26484a08d97103b9a7fe0fd379d7852b5fbac921686577dc3b5c0a6d8cf53a6f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000133428f9bdf67d0bff1c5732384e800d0ee84e942f4f5f481e04557b5d4312f8143afc9218eccd7eb8c434839c8be7bc704ff8da4f8d0ea0b97b19a6bf9c71992780351df87fcf6b855cab654f5a1d12283a38443b0b84a137a25b93d937dff1c893ff082a69e64f6cd4f33af9a56a544a6fc6a31a5c28039debf5a9450f32ce2e7d06997391687745c1a73d44afbe93985121b05cd7f0885a4185b783524bed0312fa6740e93200909acfd51066ca138eba8fcb4c10999630b20cf68fd4385138a2659b6f9d0e9a190d2bb55a9f309ca90319502d9bda8477fd9cfc28d0e0db21adcb5b944ca76988eb3811e6fcba915ecb222ea3cacc137757f81d5558190987364578b9c4cedcd00ee9f6069e6442c2a5bf77b32df5220878417036b297493e3d709bff98c32a1b6700c8501987e690529b405859826c0bdedb58bb823c14a553a948f63c8d81bcde37a935f6e2a4575fa2eff787706ebee6a6330be872aede9a372bc222f020f83dbb03d73cba893bded7082dfb477fa31658811381ab8526808d5947251c4d9ea3a716f464d874b3dfb8aebce663af37bc34785475c1b52637da93067340d75fafc08eb3a99ab613bc67a562406ce47817e56d8c22e14f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028812297de7a12f79c43d356ee8113dfb6f7cbf9cead71fe9ed9cfe393913cc76e3b885dfc3a503ad9c2448a7d8d871144c92202884039ff61a9d565d266e394e6701ea29b3dae753b0634ead3e0335599cf103b94e144445a7acbbee6e16ef8d17e8ec96a47dbfb110edff7cfc76d1f9606bca7a1c9ab2f72d3a232473493ae26d2e4f85d412522fed2041dd96a04412152619753745517235351002c40a9818deecfcdb78f10f2778ba0b7453d0f3b312dea2294f9ba4abacfee4039da5b88c6112273bd30cd98eec56ed1deb5665326be1c776e5d64c3db94698cf5cfac1477a5ff2f9f93ccdbcc345a868cdbb3f758fb3f81230406fe1067bc09bbd41eda67e55b80fc3450647f01f3b429584eebcabf2f32624b2401dbdd071c48ce0107fb481ae5a43360c01f55771d5418cd593e0ae3956864d8514d65be22aa2117453f253b2beffcd8f92d6ba648909b39e409cdf5ec96d0b30d0fa61ec23e285a145f74e017ae325741536db7402bb53812361e5f04d9840529dfb378c3259cf20ba20fcde510d01bb0c8679aaa60cb28dd7a29ab6fc1d044b60f3ce689f4684a8103a4d7a0f850ef9f5ece0be5174692953681656e9da1ba042d4696a332dd893f000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082960873f314e9cc00980d3bb30e15f516fc1c3cb4398751133d79c6e66af7d13457020ba04d22c9fdfc0e09fc35c8420a44aa400a377e523ab2718641df8606c88131f520ba5d5c0056cb2d9ca82037b8f45a8037feb681e2ded6b43f875bc4c7be2b857124187fa9d4edc6ebaea533d1ad51bec852c93ef556d420183645e3dd00d9bdd1ea2ca6ece2fb3335e6ac4f6dc54dd7f2ef6f9ef85f41b25d301d29ab28a42d66d0b38eda6c894d1eb9d210e8c357b886db0a7496ad3eb6b1ff4148797667a3d11a0285f070b1a724986980d3b0d2f7d5439299350026768c7766a07fc14f28e4f71001a97633c23393a2973c7dc6fdd9ec0710fe94f36c747c598d8c22f8d6fb09ae1b166119e5c791a84cea4f24205245b14718a90dd428fe2b4795ad60416c1d44e382381657cb759c005104f6c407bd22254eedda8e2c2a62b11e165a39aafd778b8a554dca9317f59a03785cf26bddd0b95df9879f073e79f28eadb92e972dc23331093cb5c9dea7e0fcb59e617801bba1874ce627cd95f0e902c622fc71152ee37eecf54d50dfe227ace37bd4bd1825e7d7304b391886f30280a461a435e86d88b3837da6d41cb06393822bc99b0e665b68954b9512b6df5200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008807bd9b4130e0e2839d6114541f1d664a973c911ec13e46d068faa947e4a095588ea3d5a3955464e5228cfe2cdea0b7c7ada2d2f4ceabb8d34718d94540bbade90b26d871398f3d93f671dca2ac38b423a4be9f09b98fa784e3699b17d8a2a3e3d766622a586400b8e47c954d9909144ca10b0278f0aa4e61a7311b3693b0eb44ba6f1de2b9e22fee7ec9fc545baff71a418d43d8ba56f5364007b887ed9fd0ed3c4a943e5385934fc12537a18b89b88fc18896237673455d5b54341094180a7e752d47f6eebbedc32a60743512ac640eab006f99719492cda4d324c61f98016875831a85c59771d4a6bd5d854e52dca384735f67d82e10cf0c335cf3eaf14c0deec471993c150a7133edcea1226eea987fd71e6efa54c99cc0e74c6807b9dc9143ed2e563ed31118a647429b0ca58663e694b135f8dba1cc0cfc3b63df615039bf3393e3be1a6bccdaf881d602f6e5642df05f6ee28951a25c508aff9cbe332ac115a13683efa1cab62ec7afc6f4add452bfb7a70abe3460cf6173584626a795a30da5efc54ba765bcaa122c27bc51c031ec43bfa56b0a3759989172bdd9bbce85b99a52f5e458bb57b59d2d539bc96c26b5cddde3ea7d4a358a0df12e385e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004185c3bbf92a0d2b4e376710b44af6eb6e9c4d0829741d110ef1ed8a4658f6d80c39895cda5d0f7fc3cb5cc4b19c0d884f186d51377556309a1200ea19dcbcffe8a543b3c255311bafa2f62302b3ba3039ce826ce35e86b99cdfc7dab56b91e98d12994f92d01586e7f04e1c1013ee65ecc8eeb3845f7cfee3b8cc4e93002d54c08ffe2825a30a309ac3e171cfe2f9848becf16226d97f1878296acc26b662c472458a1750e209bb7564136293ce8661f50909aa4b88cbf0e1c790cabd666d7b3242e00feaa156b3f4b47af6f66d260e0189335f22fb18278ff93e05a32e7b6be31117d37e7f167f48f90231d673c2aeaef546f8d5563e148fb7092500a20866115742d4a735443153308df97eff5f12ec2844065572a64587ec190383557d517d67938a95a6f558b88e473066e824045fb3cbb2f65089217da55395d8c81c5574a9df49c0993a0d0a755e779adb0f93853bcc5f2afdb6e4198ea4a2475681749c65619a26fba69743b45b4b886de026fd6cb3c6e7d0639711ad70c45e1e5e2597624bc372394d2c9585bdf5354b9ec742a9e34f6577e87c08e552c32f7051803880d63e167bbec3f1e4d348973da6523f865cb483bf95042ec75f1b325ce530000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3160d6a1a481a7eb53bd29f84e9fc3eca8dee277daaab3a84df37ebb07f94fc2e9f114098c164824e7f40aa54a1caa6b9d2d07522864389bb5a465f2b18c86e97191c735285aab8a30373190e1a591676ee878afbc294709e023b88a00ac76ef57f9e660b669ac4df13bae4e937cc38ddbf3b4a0d7914425bfea9d406c80c27a158d1c4b39c647bf641e13c0c0a223a4191168f9528d99f615f12c22e198819afcf0998cb07f9ded0f5be96189d2a745eca8320827c5cb7a1631aac26f7d1b9d4b1bee60681798ad81b5c727c733217233514813c32ab9c008f255f835c013ce9653acb578f2e0afde3ff4cfed3fab0958897108874865e600a3a73a51ed86601d930286e096a6d5081bd242a0831f66e1d41378f405d1e7e9472bfad989fef8915b59c764c3c76251950dbc2689e228b9f4e1ac036d3ddcf9485ccfbae323f2f9f5edc923266c121d27c0c9440470147f99b27efa21614af5c187d51a0429e59490985a20362f28bc1ee6ca8282f6e74be4d4921a06b02ed394a9a15cac3268d112f23e5ec700168ac48abe89f8514e2a03094e401b84d319b0500d4f03aae36997ff0459318076c331f439a88df88989e72ecb55b1e19f905548d3a6491bc0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afe31c505201d30440f9e7d97516483981e4d589f2120087a96e659b1d0c22578a0414ea60b6e003df2a9c784f63897ba1a4aa051a1a44ff197b9377af3c75e238edde33dbf6e197a75f93b21179aef938c642fe26bbe670896516eb15ad40904daa23bcbf4b2d5c16d6d46119484fda9f4ed3d7c42a844f0211ae267ed3bec78b520e07cacccf5804bee12b8fbeb11ff239ad67c4d43e89ecc1f39d5e74e57ff9ce33af8116cae37dec149bb603ea3da92a834067a2fca0bf593a6d556ac7b1d9c5fc80fcdc662e6b737efa4679bb53759477fbdaceec0879835af50e924e921099bcecb32aff57487fc34020bb0074b9fa0b675e42c0119a0f2f487072eb6e63851c7e0b71416f7a5a259450e6dcbec8a7219d1b40467be81ed7621ac2294267a3c104f501076f3abcf6cd931da0871d4181fa991b060194fc3910cadea3f23e998bbf71468322e70065a779a4c6ecdce13fa56610a604b01441d37af7d58bc0e34af1f070cc0fd1b20ebca075d20e5e5d115c68ea50e0e50c81397419fb72ce605e7f1ebf3f754008eeb0dca9fb9e67db37d5d87cbcd82c6a0e473c6017c407f33f566f1e8820dded42b68884129f4e1ae6f0f9e934c9fadf6a62e2c283f9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e0f54a1929a0a9f9818fa7a479196ade7e999342689b7a49f9b00725bf9b67248e40808fb12e66ad748c6e783b433ce95fd4d6349e108ec25678857bce1da0b3fd20f6c7d8e7457dacade9cd3ce2cf1e528aa448a16713130620378f9363c6531b512c636ed99c4e2d69e535d29829d27e7a751d6a44af9a4bbb4b6a77983e15bf1ed1467fb123e35fb8b3a65445b6601d574d3f4b3f29a4c9f89839d505df30bca878d2575347bb7ccc2fb574ecfbedd41021700ee6a375dda39f23f95f7aab89c5a5889b4f0d813f7402bfa3c33d05f3189b057cfa6274239b31f5d368ede0b9c5968edfe002e5a8ae9f0a3924cb179a5503759cb47d405394ca787947185509dbace573af1e384cdc21616d1b964f8f71f871e8232981668e46dfa8c24041a03df47eb3cc9b21de72a0cad20eab64888249414d6d38be5c2b8f119660b5be07092513e5a92d563644085417407866c2cd6312510e1676b1cdb8c7f07f9d02b19701b4d1876a7cba3c03feda592bcca37a7bd9e794162ba66832a9bd3a86fa5a79406b3d25e03421da4807167decd003e285340596085b8353d39c4a9fc95869bbd89dad12f4db2b44d64954310a3723e5939bc4d7819f3b9ec4f9e4774a000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025dec0e5dcd7e1a24d7e57b3aaceef46f3f751f8d6035fde06b514779b0175f593a9f8e85ec3cef07108bb755cd8e496b646d54af7bcb362142b643fe5070738e34c92b19666cde7f614d8f516e7dda3d9cabf66c4ea191c7a2194970dfd750b0a8f581b432263e5bc4681ae0376fcc6ee70e6c4f3853d0c4948ca97895455d75a977a27a2554bb8c87b36a185fad778f12e63a7f5a1d5af8f9a3f6eb5395234da754e95e6de89e266a3c4645d91f9ef6dcfded1fecb1f4b464e445db99ae24359c602278a8cdcb38cec9772233d5215eec177f2d29adc732e7e755ad74161e1c81337075c7da341e1130d0268d0bd96a1bccad30760f477564c5eff590600164844e27ac2be3c1f284519c2c7dc9fc330d1aa3fa524a416b3b0429592a2863dc2c81f935b02cc73490d1f395120af00799957ed463d351b8e248bb3637aa23d2f60374908f505da0553bae368e6bd585d017dda80c82746bb4385778583491628f04da6633377ea976ec8c396446f4c988e37284318ad01c85cb3d6a160dfeb6b7ccf3b4d34afb96ce1e9637aceb1c2490e34dfbec146bb2469eb596ada3ceca33de00c3cc894114b2d7089febe189722c3b0de41a24896c4a4a48da8391292000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015bf5e7895f47b15b2a5e897e891d61466552c7467a1390bb72973d8e1c5149db95ab8b99065127fefe98dde50ec477f4e74bd5c39e2f6685d4e51a52ec4ce2f43c1c4101eac40ea82f6d278c558362f558cd640853f83b4d079edd94dce72cfe55cc48b5abb680b375266614f60573aa95069ba261350157d26322c5f76228cadfd86a3cd5454d3b0322512128daa18df0a9573dc982e35ff510ea304eafa244d65c41b2efd84eb1a654de10ff228d1aeb48610b261c52d332f66b16639215fb0cffb26f20d9d046f27cb1fe3dfa875ad1cedb15775cb0542add97a0ef702f2db24383d87c4a1a614085696f6d8432121ed671f4496491643fe5d7fa2ba35601a560347c5cfd81d823705cdf21b6bae8432c75be308f5ffa9101cae8ec0a8761deaa3efd7004b4e26aaa2fdff55d61a2eca5cc5fc416c576baab81d0d90de43305b519365027df272ae10ff6066b7df720755f61a98a64a4e31d66629f47a5f746d9c877e93a24e909051d3033a3d47d9f490c39ec9839812c5c5cac13620821310a71fbdc98d01609d238e076911c960202692dc861bfdc99e5475f1738518ee622c4411e925aec3910ea9a2acb64a854710df22aeaff347d38896e5ddac41000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094df456a84e5931b63932945cfcf649ad0c55fecf3b5d6a1ca9c6cfcfc58017f634bff0e8340b660c4a13e626d95c77fec3ca9d2aab97bb43473a19d84a0457084a42970d12484a09e1bfeab4b7609e16157ac102db73bfa13aec271bfe0d03b0a7fe7151a22c9f43a18f8e2651e92986b4ea6b0979cc700e8c21f1cc69fe14a7946baa138a2f4085d253262e737d7522a00e49dd48f6406f52779983dadb2748a252e17135ce0b49d6c201eb58c88e098055a51bcb7b1f7a7923e0d7e64f9bec93c369a644083c3a59ffce44e2745714389ef14df47c8361ca59d30ad807fb49eeb1171e05a382106ff1b47b7d1e382069e70593a0eee8c6b47bc81fbe57d0a2a88e5e7a885f7422a2bd9f059936c71a37aa6a49691011a828d489a15ad5912c0c1e300e93040c826dd7d5ee3c73484a08cf7886296dd30a05db6923ff1f6bb3148ecb63290ec3e8a720d8c252887e7f1436f369d9cada94616e5394a15e82d5c8a2579eb3fc74da27f23178923550b7ac3a8bb3305563564edd56c46deb6b2e356720fc3c4a30995b5912eccd563770b5e3c7dd2a2d7449b9b609afa0c77aa6b7bf844e29e5ee095c2feabe5b190827d9c82d9e1fbe231e47bad6c0c8cb5b800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a30cbc1a3f487f8520147df89f6f7841653a92813a94e8481059c97470c67897ae99648b901953afbc2531c58228fd265c14605b14b2471752f5942c5f84cc9bbb0daea2e316d3f0fdcccbf81265a9f84e24bca16934f7f4e3b9090811bcc78aed38c27ab656cb2e5135cb08e8aa95233885b724694a11b471186b322eda3a99e9558c43f4bfc6376f9f8fd6ecb438a3156973059fb51c01a28b869dd5eff9fd53871665d00608de3d835a13f118694eb4e43a574aa80ada7efd21619ccfd44eb3880301b520ee53598e53090b3d5d8385e562825ba75981c369dd9132803385d51e3507f46f98c18a9aec3d91e674024c130465a0b9a505eb2357527ad59df2fe5c8c8f5e80fefc79ae018790e8fb2644d8df46234c6a4c8018b4aa84a81c099f2f9d8ee2744e49029f93e5a7e367a1ccca25114eee9190b434d364623ad5e46d70574685df7d02daf5cc02b6b94ba649426784a356f6d416f158a40037079c93c5be2996520232e96302a2636c032853abe50b07bd956d08adf3a52d2b60e46321c676b3e246c957d554d0f85b69084d52fccbd306f1a407a0ca6b5dfb2a6ab07ad1ba2945a072d2022674780b00d37911f65368771f60c025a02dff4994700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002836129e443aeaa2eab936798613f0bf8f82a77fe997b6a2a76a72296f13d460ab5a69ce61707f4a210c86cac9ad16c91fa6c423a8eebcc5bd9c4a711a19efd01e42748285e8eaa711aa0807a53ef0d3d887a53d0d17268f40bc24bda6eda83392d69564e42792ffab1d28dff5dc5cb337139f275bf059968e9483d8001e5b7819832f3f752c2e193350e62bc255e13c6ddd9f51d2719e98a288cbf422f56b78e174ef890769983cb5f87c42eaf1639462afeb0249586d6f4607a6375ec3089020b6c3aaaefcc104a1e586127770ed4a1506e256405bdc2e52135eba7e32b70fe7733586e5d9641fcdf0e322ed9edb449cd2aa005b128ff07bd796d5008296b3160e45fa7929144b7ad1be4779166d7b2d3849eb21f208bf0f708f0c6fed9c971362720282d942eb881220f5aea5587c941371dee66f12214b839bceec4864129bb2ad73722a91928417ff332a7babe6fffefa3896a508fbbd350426e7a7d3710a5b54bf26b7fd07106fa6c6a64a21a2d601586283b255548a497ca35b5cc9e66a783c8cb66cae0637f4ad208924460cf132d570ca85648d6f84301c4803e30ca1b969fdb8f48069a49940820b100490fc1b0cf17af002579fb3c9071a220b4a0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000173c002ecc7a7a34fdd50bf4e7baf71ad2eb9bd2efce5401a786c48e0fa0e763373eac12ec35ecb435f4d84a25f2ed13ea99fe54235085e277469e0c419b6b2bfca75a1cee7623e43fe6ae5d813f0294eedb83fab4c71a39e5f91ad9e05b057de0eb292dc460f3c840a652b760b7a61bcc40f9e280023319c459de5b1077ff511733fa1beec7e4084839f5e7d45c870de0fab60acef25a156851315f8bfca05561b0646b738d34a15104cdd837647e37034c6a0ab4a811181a5241114b47ae608756dfc1f11023fc8e2e0ab96a4469b7ec838a44b4f2cbbc41b99796086c8bfb78a6c5410c9252cb3c7de18eb18374d395c6184218d127d20e4d4400d775f6d8113237f7eb723e265d7d2a2e013c5ccab05ef7c6cddbb06c8cbf5f98dd7e5caed84dfa22a5dfec40355c24e271e8d338341e20b2a83a3309238a8cb3d22b71d2435a14bbf39c1a5705a5f4bbfd541e59a3445b3bc1fe9af092d04ae87f5890bf69d21c1d8710cff51fbbc719362ccbbfa8fff80fc3bce25b4bab463b383cd4456bd4702544d365c58faa5dc9de16ed8ee6b3d46449e94fdf24495d23915baeaaefa89f94d0097ecd58d36433493435b2cb81917aa665b0ea7ec338d21911dca60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a105b02b40a80e5dcf4edb499a35c8343fd9e6774271c423ba1e1be0d7aaa760fb5f79e58314fbc8a24c8e76ed78f5babb3b26c29fe0f3265c4e252c984271f5164fd398c9aa06dfa4d1de3317b57a08d932274eec60ea195fa23a036baab5e0e89b1001ccb4462a136e590c64ff75241b8c4000cc80879fada3cb55d2ca6964298fa2f076f67f2c016dd857e9a208c268b97c0b2491d37a492b473715d1d67a77021348847f7d1842e6c3de82f1da6fb830a9980aa0f311dacf6d910f97e92ec5f62409b5f22e3b44e5b7c381b76b358c9b85eef08dcf222df75ea6d8de077df65185948a4ab67500c8af6d4b3647d5e6cfa2617c336bb9100131368b9dd9deda84465ffb37dd8524e45d4d1d94c991ad3710003b533ad7217128e7de1873a3c82d69059c6e2782a3c21dcaaf80e30bc81aebedd4322e69a010c1d51e316a5fa51be7b61a3b1dcc644da930f6be640381cc7e765520904e976d1b145dac6f1dae1a533d5df8afbf08363f45daea2753950d4163e7b9544e5ca7aa9a96dd9d53928defafb1e723d6a19d78d95ad75cf43918646913eb5b09067efde92cf81ce1bad0cfeab519bbc48299b2168d1a9f8ef4b503f78b0cdf97bcb18fc085428ecb00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002dd71ded98b9e3195ce7a2c96fc058f19df3cf1a82635563147ea36595e42e382a287ff0c9259c7d0dbcdd463a38a44a883982e44ae33967917a97b716be0b83c5d66ae1fc0be76838e112296c12f33fec97e6cc8e44cc16070445abe416aebb459ef98f1535dff63da5bc8ecd63bc984d88ea60f72c62d0f5da7e9851fb5ef39618b0b519986dcd8f0d73709a077fd4b160dfefddc4d749e996d8095d536e3293fce59adf71532e9bace5114b23554c5297cdf62e3e98752b7c86c4ac1dfeac6e5fa04b72122097b5a55806003cbd1d7db97e27a5db0580412c86905e1bc1669f4ea45f6cba7425eeac03132a2e335624f589d1a7b0915769ddcf9925b41a13e685fb736b7f8c4d22d0ca2b41183d892e25c1dd0b964320b1ea0840521c3dbba66c1385bf26781f5bc896e5852012ccf1c2979f637f0fe6937099ecac9105d9d98bbefc4b71a9da8d9acf4f0130e2bb2f209aa02770bff40e293626ba280bb3f886d0f3d4102dbac6c1ff243e2c0e66ab0f70aac96acffebec0b5a09696b6f1289c20aef2d95669f84cb996ad609901a838db148563c691259a55f122d2311daccc3ab220ec8c852d2424bf41271d44aeae4defd8b43d9c08219b9e7882c9d7000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089145ff754d18d6281fb69ef1075c0d89adcd5819aef9ab965c8bfeb12f68b94437e4e327c6166d5571ffe1c460005f6464bbd450590153df117f205440a6faafaa677e9770cf095251ef31872a5aff2fa690c3aa7aacc47202cb11dd83297894debe5d13eee584c2650973420825d63c5581c25ef368fd68e8cc3bf6a8988d0b4c77f5564a3e922cebc097e5f862b30077a53ce6e77c7135ea9eeb5104d5c44fb8cca09e4cec0f7169e10aac8edbd92e270ac1f8f2233bc227a0478c0c6a5ac05571d8ba84fa6443d411117129e28390a2368f3c0cea77e6b2ca01cf797932b8848c6e98c12e7a7b3b105515b3ad93d3c5b4ffdc575e58365b5892c779a0316af1476893718fd7ad6aadb2cd9c2937e3863f7d398f3bff7db77e40d28ee1741cc5b7deb1a11a6a3f0ddca8620cbe4873a340939cc3e1b7896b0db2fa20c51a023a0722f8f67953a9d431e7540f972c60ebf5847c16da4e0841deb5ac0c5f337c17531e1bfcf704564a0efdb599f1a69d4621f0d8cd15f7cd14d6ee590d0ac46a4ff8924aeac91cde52c3c59df535792d255e6a9cbf50ec0ea3b8bd27ca91de9037b54cc1a35a5aa737e5fe23b2c280016ef214fca270f96b913dc8217aa4055000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081a050a627abf43d345d5be6d488b26d0e615fcc2650c70dffc61769167a2d631a2ba825134b11784993f9874af1c2daf4a7a509af650012b24de80a5e778f5d9992f1d2909f1746c6ed293900085c895ba3cccca5e5c396d947f3d97e27ea20d73c700fbd55d63f65859c72fefb0171a31290a2aba2d35a0b9ed813266af28c9802c453fbbd10e59d163af1042bef1c81a45a4a30eb096588cb8d6b94144ecfe0aa83263f22dbc96978f0f50cdafd93b71787c5ec9bbaa478b2ee3b7daf942018bbde18eb73f670e8b369f95584d90920c994d9254528d13358446cebf498d18169aeab618fad60dded47145038f807df87f1f297d4e0f0f4d5add5883bf0596b2da4006b16af038ec261142bedb9f8af66b7944ea310ec87c43dcda03abda3597783d6c0b1cc0a4942cf1733ae851b218c659fa6a62bea13546e527efe9bea1ad683711be831127de4bc606b962e48ab09dd3b74d509730bb9a1cbb272434d81fdeda853cfd4875fd328a4c7ebbb1b940ac0c63827376e63de1e01e0130ab93f4269775cb0f1093b72f9625337b48d5d6513c85dedb28b4777f4a33648c94864978ff45baecf9a536e075bf55d246606a334aceb7781aebbeb5000b5091a4e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029d0d3b88ecef4bf00f6e3d97865c11139a264542664fdde7620f23553d7fb18000d73d9cc4f8db0ce62ab86f481ede63da1cc45e0e4e13edac96ed96f682af78e6e2d90944e2e7af3a509a6337fd4fc66ef1ce9daa74326e0c66951f46e76f95df7fba785080d33896b937179f16331c392f6f9b25abfb34321f6eeeb7705e46efc4c1a779d9ab8b2f0f4b28fab7a4c2cf063dc921693fc20e4fe8e2d4ad13c72d25245cd97787c2b9f1bac9670901707a1faa7d59d4fe8d3d1c74d51eb7f425acb2e0d6103c6bae3bd82128ba43d46e994aa228bff9f2ea7ff173528262dc765d7983f93f5018f724115f6d1c86bfb3498c52c103408547a2072f96cb73fc2f55efce974a06ab49c50d4a58088f90650b33fe4de1d40c0047db0396a603a06b0dac427b66f83085553d38aec318757cff779a7c88cb750fd916816de3cf4c4a52f9348e047903dccf12a1e4fdaa4f3172f655e10000a05494e9b29ee993b7bb83bf830c673465bc475735a97c60fc13f77740b96885fb3d55a4b51e74f0e082f24e227d8c2d4bfe6b5680e432036c15da4262512d21fce53bdf1f7206f1ef705ff32cf5508c9577384b3eccb735d7d622a11e09fb95af8c97376eb5d3e0e6a00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000644c378bbce1e9499fda834aefc30c44f164b2cc5e695eadba2a4687f47d21905ec12f455f4e97e03875fbbec6ad18a4b70e5220fcf23c5c1b2e94dab059b8d13ce5a2862eeb99bd640498e5c793b1ec1b1646975c6cf7a98f076970b6abbf7b2cc3504e561681fef1364e45696ef489e9b86fb5b0ff187b22ba3b7948c5d4204340e39811f060d23b59198a6b39bd42cfac54ba466a81775b0487dc3e0951fde331d95dfff2cd9d34f0d82093c72d7e196f50ddabd0e9583aa3878146507ee05f39dbec1e33f2ab370399998d25a96f19f92dd1e3224a7be45a4cc5b8150cf8cc61baa449a366af6aa5a7b3bd658b9941ac71974ef5bd2488b3ba6fc337206122a4d3b57b408a126d1c8fc61a49640438c582b57abbb982cdb79407dd1b30efdfb5533761f8d11de712338f325e55d12912cb104a757363a1072535b0b2cf338429b86ccac6b70fdf9f2797680e6b494c61c38f3acefac51eb837eadabbaf5c57a8d776b7cc8bf55a40f34468e55d7d806594e9103e539dcbf85d94e9ce4208577f8a51bfbcab72477b742d98522c0c148b79139824f973252f02fd93a037894e50f8b7cf37c29581fa8292932f1ff9fd28361d55c48c5aff959c90cff805800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ea44da6da3cdf39f50aeec45b01e7efe953ef4f22bb2bd001fd9f3ff8f135e8047a4abcadceb2cf7586e09ac34782b3f8cfc18f9ec5c70301d690ab63c904dcf70503d6c0bfb85042c72b90e223b2b2802f7b369a5197826634cf65335eddfd040e0a165b0ded07efae6476ec635005030ea03b30dd2d4c05556501dd045b1d890ed226878167a1005b2d8c23d8d2ff609e9f4cf8495b08aba224007a5c3c6e7d957c8537ff25730f931f52381ed3635d359e1647ed2f61579ff77c25fc927cde804fe1133719d0addfa7b23ddafe6406b77c729587e7c888f6139f0f6b133f76cd73d4528c33e350f6df9033adf34e6081b6973ef823d1cd94d226c8dc9d424ba9c9fbfb35a14c69b72795b2f80728f32ca76e6f8b66f0e219a07cffbfc1e75f0e62d0808849622e4828428da6ffeb5dc03a52658a7b5c5197059252dc27e305e9bb3ebabcbe54cf10a2ef921b4a90fbd7cedaead860c1c8cfa3efb87ead2b9bfb0708948482f30caa2af5028fa66e230b5410e866b202f08c3517536db6c43415f122cc81cdb7fb5597afbfbe0249448a8d602c937f17d679d23feed34cda7ed09f6dc84be838e917db1b96a1cd9fd0d90f1d270717dcba13d354504312e20000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000247849dab1dcb4e930b403ce0f24747a667d7a92a7cabda86499fdaf0c73f1b81440ec9b3bcd3cbe031f5bdbb57d3cf158dc2512d3f24cdeb623d76f65648dd052716c681f7c4f1893ca1b0493ef6f0181fdca705cccfba8284ff22c913a23bd4b23bf89bfaaf693eb6cb89408a3f7e41c369c3f8633a0bf4bf609b113f29ee2a74fd3a5f8853c2adddd9b0deb3600bbcb409b178539be37516adc674530f845fa640c56bba9d2a2ba51cc2a5af6acec3a191dc8ba7b9178db1b3127a5e61e6e3d5fca0e6daf42ab148e79f6b964204a7793561e73edc1d7b0b2654645f797fcd1151a1fd210c9b8920e617e95b3a298cca7e02efbf1f065cbd5f7ad0d898b870c846e0ad784cedcc7a069dc4c60418c0c089458427bcfad5960d1a89b26a061f06434da0db2f550b213fdcb96860a3f0478d7b156bb966efc6b57cf6975fac56d70ff1a038642b2e085f3fc8ecca9b6b3badcf6d25a598dd35e29ec598294d73cc5dc1046a96c004ded4185ff9adc4d122dc8bfc09514b91185bfaf47f4119245f3ae58f82aab937591d13730513aec972f3f56fbdd2b284b81b15ef3e183a2e54f4716668567485b0810bf83f99e51a95d8c66031747a95df636060c6617a1000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014a793ef578b545f987a50ba457c8447577a1215586086cbdb3b19782c5a5f8973616e86d782ebe42f31eda8af41c5e2279844ea51eb551de950588c65230e2e780beaa5f193d5bce5f922e25d626cad3a389292e034dd8208d6fc9c1191ba18c931d06e440adf864d60778159cae4cc918731eb9b04b14bf165795efaf4d093f565e52aeaf47e08dc8bcb89ecdb32020f210a1c28dcf02088d1340ead7ddfbeec54f7d129138992d171afaa424d3a7ebfd7b0d23ebb5a3c790c916070f5aa76e5f548738d8a67d33640e74bec914cec8752079b792b19f52468369a25643ee9e1640af5553f15cc0b26d341ca6c8e03c3c3efaca251d307adf0724e4223fc5e26c70c4d8ac388747bc43b56e1f755505de8cef0088d27f6495bbac29e9357b525a605267def276c3ad6eab3e3db88ad53afc18d5a6586c47bf15ee72b9bcc3985dd2254950033964fbd5852fc8df2184e512f79ce3bd6db894e271f2749493db2788d5478fa302cf9151b9341f982a25010e60afafbf9867dcffdb33b2d847ab5263a1bee3b092dc07eaa3bcd9807d888a84233b7c4d57cdf19f43b68fe550b163dcdea0a9164ad0b205da7ca71cf8d8896b937f6d710697392918458b47b8f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008038b2effb2bfcc40aa6fe496fc16ae3df87349d0fca029bc4f766145d3e449a58449dc71b62e7fc7da15faac1a0e00accd6fdc266906b48ed9c68101bc195c4a627cffea9948c8eab327c43973f29532420f6bbad75510ffc36e11e90ded98148c09be0b54c7f99b5239792f2cc4f2a1fb4238e3fb254fddfa71497239a3566d14785fd7b159018201608c3c7c659059ad05a366fd01f0e72d6854e858e421fe08dda38aa925a58448f1ad1e6586cb19bf2de0a76a80a7a1b8617a47f02019080e4fd658f095038f34d02146f1fb2f237cb8b151b202fd22c54280bd2fb938238d659c2309c7457a25316cdce05c443a7c0771d0bc36f14db647c4930e02e4d7c345079377727f6bfe8efcd916d0cd580f49b8e2804b1585febde932e55a577ab2b1ba1ea4350c2bb6834f68c8721aa95308543a356f88e9032b1c2c18b3e056b033307ee4c52698a34bf14b70dc61203d8a144fe9d3ffd97fdc71937e6b7d5d8963495a2b70a13590f962d2dbf1ec58b336defa632c521c7dcf1312fccc547294c7c8c18da20aa1c2c1ed3bb99bc3e683396fff5861bded25cae67ddf84f351b930f0f0f93ec044dd56b116c23c5d1c36747c0ef460eeafaf9da0f66ab737600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000408ecd6e96b729193ec5936e62d74f50d30a1c1725b00875d2e2837e6c55144c66fedb21b0e0281df9849c645d3865a407d66dcee202ff3600fcff9f2c1ea1fba63fadd5bc1ecf70b004463c71a2d935e5a8e2c84e19ff189ae39ffb53956e52c2401e4a159773edfb0f145750fb16247f7761260e2245732473bc15b49a7adae26e77197f1f3105d01651cc4042b286ecb7ce5146ccfc22576b5b7915355571930e8f2f827fbf561348ef21a2b4f9834cedc68f7b1546ecc882ecb0d09de427d3d8f2a1db098ccfa7c5ff2b1e909b05c203a62b3c622e220569612b21804cf9e0ba4268026905ec400b5f08eb39ddf53cb217e9af6e855ddf0701a709ef735fe8623b3285d084fc0281924e0c785fb2c1e1b39cfa0f51639f61f57894b1ae014ad6e2b8cfb9d86bdd03950666ffd540600352f5c1681c79b0daac465e5208962a9c95527ad6f18957eb49af92b22928b3f1c4ef400098a88f00bc76efaba839f471037be60628a9da068581cc8fc630846aa6d87dbb09f5fa1db2a020f9400e2422837481fc2c42645bf23eb6e39f5b0e199dc51ca20433979b56cbf1e8c4a30f4e405cd94cab14cfb06ee16928d180d73862bf98d411ab119f875c093458c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d59e188b951c90815ea3317da97a379810a872a2068e48a5f01c2551ad90f80dc2d59ae5bf400c39a69a94362618c0762db4a368a05272a9eed56f80d1a2a2a304c3db14cf7db496741d9017e73603bdce1c024061a82f3834cecfc350cfb8ddbcdbba891c6d8cfd905c9021303a172e237c35e0859d5f1b5bf798fbc9ba080e10e48d5f277cb075be4873417e9415d48eb5e590121b10e92f5f22c7d75b6bd223aac5a7b0d2de4729127efbbf64648df34584a6e58f8073c1e7b8e0796d827272592707710f93ad26391e2c76e668cad99a087c8c2a3a636173076ce6555dadd588c2cb637e314c137586a2e570f3d2a4f373fa8ca51bf319e39b9866643d4e6667231cd636f5f177f7afdf9248b0a0e40554026ff0202a3d64e3f77aeb4a8bb37cf6b9d6035deaf34b1da6dda3df4bc14bd4b8d1d92a9949ec2ee638b58688f5100eccf1cc55e32b9eb8e305df8b1c37b7d48df675aab10c17880c8e5f243b19ccdd230b06274bce3e4b92a4dbe87c379f10f143bd1cfc11dcb95e6595591622b64659e3e89d84a91fe93dfb1a470e0c71e997a2d32cc3b4690168530f3f5d4fd823792bd316f8a79811d65f7381d7e829503f251a62f18f4ea1272c8ac8e00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e3daa5fcca6ec511f7a701ce9df1edab74fc9e840fd120adcfe2fcbf326921f6c9aeac1b80e826bfc4f903dcb1f88a89a74dab9f9becf8a293cda3acb43fc76a5ab701935ebe3e569e41f656323efeb177ed1867322ce7c9aa03fe3050e7e8c7ac015f57655076d46e52cfc761e1a9ca79ce9da9f6d4a325f4a7a5fd612a18a830c6966ef6bf5b12b60c887fe2645f64327c9116a39d031102f7132434e8975f900eb29e4202099b3895d342d7c4c2fddbee8b36bbce243c8758f4b4a0eddb9f5d7688ca50dadddb540f0ab8c4f32ac900bfc876180a972d7d4bd10e5174414cbe14aec0d0ae9c059553e584a3a50cee493a8ef2cb777f95fee6b805244f3130e2fffd299bef045fb71a0cb66a0eb8efc5262d4a5dc0ae2ef0959f63db2ac062a6dabaa0349149f2d290cdb126860ef0b2e2a5dcfc917ed005e860fb22318c81dee3eec1f48ed2902703a52b0c0060bd7600c0a16673b9917ad58ad3ec3b6de3321e33f28a36b8c8086ce1045d7676c02488b8a5456f397bbab425a2418a2e73f0ed547d20aee8698f2cabba1245ea75c7665120355765a516960de841a0c0023bf8cb8e917ed6150159053986cb23e0f45fde3c0e5013975c6d3faf0bcfbca000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099691ecc31cfd06fe5b9264ccc851db64a587483ba5a36d34973d1bb478d54b56e86582d2002bbb61515fdb7d22b84e1449823ab87e57f7adfac03ebd4a778cb7e9ff5ae1c1a9a91cdade528609ed18c4a2ec23e7e203e03e0a13de5575688830729915d85fb5ac30d9da3cc319269e6738e92d5a5e56bc510680e6d47be78f329d76fa11193b180ab4952fab942d68c1aa683f6892f5be07dcb0e14076f525d098475a0f4875d60af0091e5ada7ba5fd435092fe5abb74eff922d4d17e73e1f27ba6be10b6784dc4d5458620b5b60ace040accdfb11217963f4fef9f065a948bf31a9216f8daffe19a7251a5e6aeab77f024f16d077dd9fe37f0cb09894e9b55da63c28d9303b8ee1ac83899f6914da5f50e07a43e3c4a7b366aa744444990c0eab617fdefec0f48be5c9017586e2e6265837a725ec93700024622c6003c170554b2ba91109e92ddfd9b740572c93362bc988c7a3b6bebe6fb3d85592bd87bef2078259013ddc483443080fd1a83bba13167921f1e7f084d02d26840e13439a96b7ae06b9cef25ef0d2a69d8f998df3176666b074ef6054229115bd61824b94664f1e4c6d1598cb6c99bfc720b649243fcdf642ac1b80673e4314311dae176d000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d2023944a7547fa2485dbca73c4efee5952d3e438787be381a7157e08b6c23895fe8ca10ae7e687e2d9e23ea1c015d5e0dc43f86152b96a9ae18b17e4b834578f8f8f0ed1d511aeec6a5071d26bad11de9d23a28361eced235f2c466e8f3462e6bb229cb5a41da24bd3c13c0f1cda5bd9b7da0172176c5a6f53e3e5c38ea06bb394f763727cab4e5df4333c11453e3232f8332462a461837eadd5ea38dae5af8423efc115642f0a129478c35c602166c94725d6d430868cd0d52e34e3a502d6bbcfc5335237528adfa620dc8681856f7cfae181512bd7c4f5dbd1846705d10ccb14226e03106b69dce6d5b879b00a2d0de83faa847b5a61a628787f08663494c9e529fb5b018331cb3dc3fada6ab7f32f8dfa427468ada491d493c8a8ab2f3d6fad59cbd6ec79857cf12a99b85569cdce7a81b39eb3f81baa49e2bb82bbf0a850e018b5d598a72f294f43e187e03bd15424b1c2bd5eddffd483691607d55b236203018e69df4fcf3d50fe4a8674eadde5dc33ce7924d298d1845b9e8c02385070458c591ab5b0439c00fb31712f7254cdc913325583fb7a912605078f66728c8ccdd45a9e0d41a6ed27225713a6c86a231680246ae42a1181605de5e2231aa0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000185f2b9530fa8d3921f62ab3f50442f2a6dd947f8f8d97cf4c34d4055b9cf03b5a8c0715b11c8e0b5aa5cc9135e99f8b77a775f023cd26e85680f8d7324c6b439102edddb9905477850503706ff132db81becbbba13b6659cd43d5a3aef6cd9dbbc0627a3f09c6cddd9453aa7681ae9e792dc529350a7cb405acb044287b90ba7ba2c3aa2f4b5443d36455f8eb9e0aa0640095f9f8e5d21fe174c52d2ecea2820dfc46349c64380f7ce1acbb1798d34b4038f9da68bc1a7853e8627767ec98870aa424f27dfe115515ffa3a1c98d6a972b224f5fece8b6afd2bd0b0e7be896ff26ca242b035553be86e1c6aabddd8889291dc6725ad03e2575eee5166a930eaa206b8639b19b26a35bc6521e35b972221edf5f5632b947ff256891304f1d19da3b002cfbf512c9c21966148557d46c1d7e5ad5f3ae86a34a7321fa07bb49d4052ab99dc23f4e6034a3694e38b37e76acebbc89d9648dd8044d8f4b039211e1cb1a0d1a1d2b18f936ef6deb558a782471f8de41b8c593aa3863d112c3a9b4b012ba9cff76150505af86ddedc1076960cf0d0145ba88411afa2a66b60b9ba6195376c0f3a74724c328248e4bf07d15c12eacb6ae0eb14cddb47f6f936befb0f30c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a483732c75fbbfafb1c5a02e87ac4aec8bbf7ac4a382905b84abd82f11b6178d6ac6a162d74f8107fe2b8f66dfb5532e1c6edc5b32fed011c89d62d33ca9f4d5030997ff237d3ab56c8ed01a11fd5dbf3829f0f4b2ba8296f70f1d0bfa9057884237716a513ed67ec40ab1885ba4189fc316083503ebf567aa712adf85f316386ef498fd9a81719a46ae58ca5998cc787bbcd27e66f8ae3b6554d5209611124596987119018f64340393e06c1371b93809f866a3144175257faba52c2e42c43dd6c0335fefc57bb79491a6bea4dd282f9ed9381d8a44a2c53c54289cbcf4fbca7e36f8355397291b568a16c83157afa27b1b54b62fc9ee1669cc7124f3f603f7c00bc76d4d50be137fb0135ee9968632b13cea236ccc60309edb8f7b90654dc6ba3b68d29465cad901d9117a988668fbd8b54f14736d9056d502fcef230089a34dd7390f8c3852363bd38066b7a27719ce559aef4d9246301aa665692dfdc80a0caa9f4064430cd2630b69cfbabb688b58c6be6c9b65d9e5834785fb893f7bb04ec08ac6f3a59d67d01440db9653c1adf87bba3401b49c8b2ca02dbebd87169d69c89b791a3e5736843fe82240b530f7efbcbb1fe4a2aac9bccaecf36328bbd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1031eaa91978a328f38b17d4003418749aa7ad436d03a70e828684653c3598c0be37ad967e2066189938bb34edbc0bc321bf5121397b192675dc7eca304e7753c063663954d9f6173d3f4945931038795f4e9ab6bbd060852054a42cd9d22af0b538c70c0d1da845217c4651c6c7979fc2754beed8ce86d56857d0db39e6ac0f9a4d2c963302b385917ea47c89b20a81901f9c0b4bef4805f2ed3802e39a6b774f22fb023016e15bbb20e6e9590aa1629d786f511fd14b8b729919a02f0d2b3e9a8cb6c640273fbb95625045ea64d000a24e01c54d010a6260e12ddf6c39e8a26c6e93e744fae0b9e2183fb1e79bdc462055d8bef36711d51a7435a67c0213d63df7606c9b09bb85fb820a89f06925f86322f0ae9914169be86443b33dd685e1732d65e0f99a192d2f0857030331397b60c55ae27d0828235ab42a7c0fc1e8e7d4a838ad4c290d35314c4385a85d238ff6bf048c4828443bdf14ce835e533ed091216c3d160bd2b59acbeb29bacde6e1c94f83d0744c58b23cb999d5536fdad78a3778009e0165a0420a1d02446e8f97f302db3a954e4e1e89dd359cc6ffc767b992bf1f6b0ddc3bb75308b1d65ddc0f53c7cadfe4a1789a8892393f07994220000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000219519dd727bb36f879fda560e59a52158ed0680436f1b1a33a90c3a5378333f2738c3407b29932c02653e1b26d03f4ea1adb6fe591d35d8dea73bc8657995c450bbd22174b8d8a19e0559fc96366b80ad7c1b3b883b8b153032807de3b558ff96929570ddf068ab0e33694862597be0f2cb22cb979d0260223d62382491085691129daea12eefd4b0ed85777ed55f736aeaa7f3795798ab479ea077e544fe5dbc03de2d5a580ca32facdacacf1597f41d81b6e0307620b074cff0c3cf9ac7bedebce5a6c5adf45f195c2b5181e5fb89b2d767403793d3c8ca09912bb15b72aa788abd73bb07afef2b51ef1c04f7392c5c01321652a182b92c1f2407813b5386ed8497e9ad35d6cd4882019361b2a17334833ded7f75af17728629ba282bd790b260cffc85da621e8daaa5ed647da74994bd5b3f611f600b860e4cd63ba1b25ddb5df508cdd799b69573dce7aa0e7231480672ac22272f33fab70669230514f7b9edfd119cc83a8f3a19a960495a308acd619f23b03de37b7012c94f09bd76e83d0656a98a3d9bc2e8fa37cef58216d3309ed06c9327ef14c0f1aabb793c28800c7389a864a684497d3aa4cf1bd02e70e562db5b51aeca5f4589d0029985947600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e77d3e1fa840bd2b4b0050c657c122398febf93ca637b3d3010ced64ef415a1397a92321f076dcde23bda786bed162325777b2a5d42220988a5a2a19f54c555b3fdc97c9af052945688ad9edd133e75d9f0d500f513eaaae397627760ceeab584d82a224c314f186ec7bfc36942080fb2dbfb19cc72d55967da8785176b56f770c8857d7b9be56a258dffde047fac78786a675ad794a04b9aa18ec6e70bb4e4c8073b6ba204b8e379abffed04be3baa17e154060e85b7936cd9df884be6e2bb96f2d56d72e9feccbc8befb4cd5f86c1f5e1772e6a0fc499a32a72ee3eafeb6eacdd6007f7aea72e5456294840b186ecbaf96d19dc915cb4bddd7dd66515a0f0bc859673d791c7f733d39e79512e014f878441dc7db6a681f3e53b2f07c9453efca131d868d94804ca8a0ed9ab65f1564978c114e8bbdb6ad05a3c4ecb6b767ff1949233f6ff28c11dc9ba26a98fda6cec28a43c7bfffc11231e687232a61116b76205621fa008a83347da0fbd520c836354529b65330d7298953957c102335c43fb92650b7f8cb7c94d6d8e8907d17009ff1660f05d9fa431bbb0debdf21c2f0d8470b86be98d00ab6f280f7442d5c0cc5121b5ced962430bc22c65d5c803f6000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019995dbba8a50162b83e6e381517fbc71d0de166ef981261d97e3b28dc9b0550759dccded14d9f1d3837fd6c1843b073430a25d55d244bbcc9338502840a031aa932e109d408774e421944cbcc5dfb84e5c4c0f5ac0e35d7b3b34b57e87a3a4924357b1fbfb81009e5ef6394d0157db59e638a951fb8561deae445921078acd666bcc6dd87436d3eaace597578f57a313df890be134460db3b34857c61c2c46e9b158f0c5246ecc1602f91737e28721767c6c13a3cd696f96d977ea17abb5ead28a4efe9f847276e1c0eb932271fcdf07cb2e3dff8ecea450fa60441889ab6816e27e8283fd4ffbeefb66e522d29e9f648b65c83e60645d70b1203d9a9eb2414f78e37e6a13ab58f306d6e8c363ef4781c5ad83f7d7b94c6a6707978bf007a53b331bfe57cc75ecddee0466e52ad13e4b000082322c46358e198bc67d8a7f07423dfed52b55156599b46fb8f71e6c090eb954a32c16dd08095e78698b82266709e2a9c01da9db73a10a0be2fa36077217547a8a4d3172f9d4dfdc2761b65db9f3dd822cc98bff299532c73d50028312639367ec002849cf48214bad2a43d06d4d68111f3a1d6d2fbdd6c793101c87eadd24107bbb673113bc16400e6e376f0ec0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000274284e7fe4096d148202569c48a6a07e771dffdaa0800e7df425ae74388b83fd4946460776e759afed758411b860184a7c1dade8a8906705ff72a0b265ca0a0fc432040054a9fce40e7aca07a4e3d142d44919b0425877bc517f811d8d4a4ec66802827aa69c56ec26d1074ef1e99e3dd1fd90ffd1c38f857b99757435cf05a561c0880187ddf9d1456b201df2227e3d7b93868048d5d6b63ca6b68b8651f0b871add4ae310438d4a72ca8e6b606f55cabe3cae2c076e15d931ea6d926101ed2dd6784680ae0c38e053a35cfbac366d6844ba8580d53b67513e16b23084cea95b5fb6d190b01b9f8adaa42acf03e8a52d70e38ad5722336701809498cff41fa990e52c1d7dfbf230c93fca2a69f883033f01a6d7376d337a37470061b1750e04c057d8f9cd964c8178daa6a1bd6e9b08163e36ad362c3b5156caf9ea134e0746253d94933d6700cc1897cf5c40d372af9d23288463647af949f859c649a704699d324244d36d7851e3bb7171286c1ad256d337556b141210e1fdcb3acb620ef06ceaabefd11b46313194acde9decd6534a63e34ed54d14e6daeef3d152788ea066721e550f338b7fdf2e1081b8617f9222ffd398774bc0b5fbc828dcab7fda3000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095216b43959d8a720af28c2523f07a021283481433b5df12941d8a86304e479bbe40fe11daee7fa9008d0f3187f4c648b1cf1123acca7cf4abcc41d0f3c90def9fe62c902574f30c3a805b2a50db0697f67f1eb4a2ddc3c0c15277d7a1d46f534dc221a914f52e6284f82cc3d8e42567a99bd450d67e9be10f10fb9461c07fb606fa1824b9c875bed1d50567e5cc564a10f34eaa5e3b322745f082442153e35da035b0d6a8387fb974cf5dd053d2e00c6699184acfeef62317f881eb4fef222add13cd1fa1ca5722d3edf7d9c7a00b285f3a62e0ecb9793246f703724963e0fa9d9e08a5ed9faa3add111486460a0b9510b3ae3cb34df0cc34eef68408f5cb169812ab1db8a4c8fdc4fbb5d226a4d558b1ed71a83c387511160643a1d3f5a3f07d3caaa51e103872e10c58c5f2ee98dd4908b52525715716063dee7ddc4a2ee4aa3df3817187f137e8f4bc0a9c41bc0542cebbc2f78269f0b5a9b257409fd5ad6f1850912f3124a6b084ab57422c9ea54c2402602b9ac2135ceaf3a161e0f53679990438a74cbcd3c402791266e9c09efb26789cbb29f4fb4ed49c6ac4ce675bb7b9829e49438eccb8a0cb9892cca03a2a7fd14b629d04da67bf4613432e3fe5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005da70fd24a258fc6d6f447ac266ea35e28d59280248455ff05b3fb312683a6ea0de928c547c0963d27dd1ab4ef7f49dadf66660c87913f9dc34842b68023af2fb4b64582d15bbb00785d5ff256841849e12ded0fab01b421954ba678f4c4e21751283ea1160727dd4d15e5f7318f212358ea464b9e25527260f5760c0b856da1fa2d9d97a1d1b2a72f49a205d7c2d9c98ac1598e4462b4fb02a2a89c0c11189b01e82777b0311dd312a547ab38c64c96806a21a76701dab8768cbfca9dd9b1c7c16e03951c49e47e38ee5a481f729237672d8dd33bc4940418fd08e87c1628d586d5af2fdae26267d0453929faca2a9f98bcb9dd81ee56f72e678a22d460694d1dd2db03ec4d7496b986f8577bb065c5068260c1dde3dabfa428256ca6eae72c79d4cd43c4626bbfbcec4ec1534e54daebfa7f2d001e574d41af9ac097ec46d7b084c347f95d2de19e9e1d89b29c203d193f20b612b21fe8541a44101190991ead778f0660e342f1100c363b9b20966d0f8e286685466086abcbba02397bd5312acfbd820dbdb13e7c3f053ad0085020b586ef6e74e83c7b8af62b19270114716fd5d4edc056b739d7d811d6dd7d47be955674724f9b34b1604475c5391da8000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000888ffe221e7994f6d0a5e70a1fb328be6261360c413d27c815aa9008624a95380ff454803f9795eb6442138ab5e960c87ac12927ecfd005a50492f6479406471f72dc36854180fb59531b9cf00144146c1f2f64344c229535bf8c48a64c8f660e4620f48e57cc2161a4b2fcd94d4e5ccbd100e5e829e46150cd3a3a8a8b460574a9bb310421b2c32d2288d01cac24e71fa10f1e9311e7efca67b470019224ee28446916a73848050c0b9309ff564a1f670f01220f1fc1c895f42acd721c4eec71edef00fed0df032b2f318a775a5d35207ea8ba8320c8e6ec88eb38a372a969d7cd3c75363d78e08c101779163137ad41ee52d8128286e8b4dd85e0c289b3aded65ef0b4cc43a24f09f75a7c2561c8c2d843f37cd3509c87d22aea0c2cbbbecf8efbcdcd8d0394c0d31a9ab680341a297af2339631d218d130fd981fc100d51ca02bcbe4e7f3646f570232b2926e7f8dbda0c3111e099150e617c3ca2ca60b71508e68d9f0a0cf665c616c70c6c305f1affabdf9945058f1f5fc3e4e6ece7e2069389508ee8f3ba9e78e54d5a06fdf597b4b88ba890e3d0bfcd4eae049b802d8271a2f968211b662ec9c470de111e20332320072e31be5cec2666b7c7916ca900000004000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c205b4840162b8c7f2d89f47576ee1dbf1da5bc09ebdea0165aa691f567df15ba91d9595a00e1a37dc17b218b2a01ca2bd484d20623831031ea8685b797900f9eb0c29a2428d8f7c15f76fd6a64f7ef1b62244caa1ea7a22eb8e6016163bd79738e534c59201455c6f26a631875f29dcdb7f38f62845e565d281ba6de2852c20461c18fe02a8d7f6018bc204a1774e7b0b77ccd9f8f24ce80262205338c95693101dc4d771475963ce6e896db87004f3c428c3371b624ba091006730eea86cca04892f5921b96df759dcc0b6f449b9b9fbed63dcca40db69e05f8c6322471bdcc7a03a5e309ee9f975d968b6ac912e0bf85ff8e53130a35f4cd843738fdc6da2286f4f97b093e92452d214fec0be488699e74ecc87bd587a91fabeea15222c2d5202e0c791f60aabd1de06bdfd7d77f5fad30670a3e553454a81626aa1edc1949d79656d7150df0846ebe0d882787d3d9508422d13cb6c0523058314a24fb8b0078769c79019aa8dcc1a00eaaf94a6db453153a57f19091363a5b416eeeedc220fed4cc152d62e37acd48d6cd3870d27f2d469643ee6e4dcc13086b705ce8c1f96b77ba7c0021a2ca5e21ff64248507db49738fcbf697a13af3aab52648a819ec1ec819240b2c1ded1ef6e715de6c71f8e84326951a4233b1f587b7c319b8f80ca52ca530250b03ece89f6a9e1dbfb1070415f8c38b46bfcba6ae81fdf4aa051e216a9ef92b72d16a0ff71e8f669001613361681c9619a408a186931eefd0a84229e001e1230e4c6648ef8bb6372b2c04dae26e783290cf3e565d072ccec34bc2ca1719241dad5b3b63cee4df4a2e292e29e8a4ddfd62507c980aab03128594766c07068816f0772506362e99fdd70a77e1b7c76c3ad4f7cf83bd43534520a207bfbfd0a12e310da31a5aa821ad00b86da3b00020ff98772c715d51a2a8bdb95cd8d76882243f372a90d01782378b7c31efd9a874f90d3f092d55f61f2f13db27a17aa21e27a6ae66fac92e665cde24a5defd480ef1fdb509d8541eb3c66b6aa7cf3729a422c1ae840e68e6bba3b1d4d9e629a5a437686d948d681d333d437e9320a22d5e10b1a7985bc10ebe39a5cc5744e40b54b76567011fadd301217e2abe14569e61102feb0b64e60209f5d32b50bb95e0216d756edb5d7777e54a607e03d60167d81e5f7845e9b7d64de1f70abc59f96ea1626e92fb6ef08dafc0bf8612547433772455b4f34415526d8dce76d1c04ac20458e0d474fcd087f629654fc82a33e87c0780a66e42e6f97df09234abaa7d99a75a59c0471119a9b73ca4c10005470f7611735e9510006e8134334c260cf2044c4442cd2e3f8bb97c2e70c0436f440a801329dcaf42a84e10fb404547ed9e693b3fbd0edd57794f81421f5d177b1bc17923d38022f7112add8ac9a9f3cb6ffa7788413aaf16ecbfb7591966080d8af1981cc3c395de43515083821dfbcff3c999eee568467a76bd53f98ce65ff5183caf1306181cdb58e01c7ece67527303fbfa26993fa7e58c07553758d2b82ad752271513d13c10021b49da826abc803eaf2f61cff23b588f082b8febe2dc5445c4651b6cf0c7d2b772e63fb77847f3940417320d1b70326b95f759931875b07a842a04d67c78b03897eede6372ee8b284ed7a4bead650bbab2ef6803fdcade4aa8720a93b110739b30c1ca096324965c16bdc5e698bb078a3027b6ae65e33b0bc9fc09187cb431ab6a78735c0534f8beb519cfb9bda4fcc3327fa6ed50564d82c27c00bc6cde463a022a74cce9511d1b96ee594301468d79c09d8d4024a9c128b3842cd2d465711f9a2fcfa561c07809805222842ebbcb127a472b0090103cf2f8700d051bcb7747a2df6ae8b91fe34fe7a3d97e7fa96b307e1029d1ec4d56502edc24a08e21c063438ea720ea9b9a1f0e4d971afa759a29167fac7b0e77d2677bfe1f5f39bfaa8646f3274757465d96e6f2f9c24399f3bb06b1f62be20fedfa24531eaaefbb42663c598e17dada07e8efcaca36de9c97b39243fd89806cfb00732b00c5e366e64422a5bc10afc4be416183d285796bc60c77f762f343314e9e4b211f4941954663caeb4f451ef744866d96a73d90ff1b46ebf53b168eab9a4d60ad1aea6e368b87df863caefb185bcebab329c76503ffde6d2e697aee3a9e3a12c618b3144e0077919c408d01287da5b5fff86aeef03fd92ccbbc2e6cd66b10451f015f5ce9d3f1a02fb50ef0e2ae3e2a214ed1f86200242ba9dcbea2e9b1de5e8e22b9be959a4188e928af74409348b83eee6128c6bb99adb028477b4a7133caaf2308f9035c147ef6f8066d43e299f02ba44677f636bb009d47bf46edf401eb9c12eb30a6a4e8a63e2fb81776178b20fec84afed0e3afd9613f4028d09ee5cec52973d1b0383071b997dadff9f664038910e09ed58612d95f0710cafc02bfeecd1e807fb0b2edd1d568f600a1500aab4272015197fee268a8040997c57bce210d14c4ac17ee9b88396c69467cb21fa8f6a8ee7b538cd3d41188b1f07b55f0140f2c5e55d29f3b7053c3e09ded53a7ab540e09a74bdc8608786bb6211e497c6f501ae02ab8ffe3864a8b09c4893fe43126b711a26f47f78de448cd39460a592fc4134da79f12c004bbde45b883fb8dd7c72dca66ca29eb237a7a9e16df763be1fe2e1201d479d9ddbd7a2d6fb7014f3223f37d392e763b4a4699bcd3bc6da8335614931453b92dca3e15e7b0001e33387236fd891bf9b95a5cb2f67fc66b5e5ae3085f26394365ff6b5fd2d9cbf1fae9c99cf0f82ea5c7fa1c15053b7cffa8d7412126e030772608f961cff0f9aea0735cb354259718294d84d4a033f266e6ed3323fbd5bd4b2177ab033f50a7a4e935c17eadc17f670606b37c45f0fad9703f0b402ef9aa7f811acb1c9e186d3849e8091c268a45a5f5a3160999c9846b2393ebfc1ebd0ca3ba2f4feebcafe8fec498aca505ea95017f507132bbde4a209c0f7d952a0aca835b7bd71014f4cdc8b7733cb139681252d3b3ef011ffc01399936239d137f503333b5c95d8af3946e5d3e57c42525534a5ec62dbaf343927c3df35bb829a6fdf47592ff138a0ce1a241107717de525aeb3dc92c02ddc59fd14c0dbe5802940d333094f30ef338e22c0909946225944257cf3194dbca0bb53fb601acb9035b7792eba48a9c4f74b04751793c3a7cc74066240e133e269d9d80d6158dea24bcb0379f3175158124032274703ef6e23eb7e033495519871a88a37148567e012a4530d1a4718a526e0f36e63190f9607d9da72449a2ef78a7314ee9945401270784cda2bfed047f8bc0fff249cdcab80f11e78c419c8573a75ce631541494163f0bdefa96f27967b449215fb297a641517c32a8e24f1ff8c6cbe1ec07194326d89e0b0324ef3d280236a6b046af0a9ec18d739d0a6cb938cc436dacd009ba2c40225eee73abcade95eadac8acb9a7ac92c53d20cda738ef1b5a4f730640960ee95023b9290c73de0a6cd29d8afd0f9740805b42b01033ed5929c45d692260091bacf27942d6a6ec2db96024994fcff842b56f5d7e319385e57c6188da2c052d0c3518bcb0b272ee1bc5b13733d6216a73f097dd81e76050951cb5b9438cc00429a2bb3e6b3fb3d4d2bb65074e9c0122c0c1e3ec84bd60fa4e72ba6a84c9cc0cc1e5de3d2705e9440d389e888cc8dacd296102b8ce40d94f0f132048325106043498d647e7c7e849b40e87256ecb85c383c980edff3ee1ee2c22ec432edb031edf79914592ca6252654f0dcb1e24239c0950e24251c02db4f663d692c970071cc5f719b24343252fdcc4a61ce4d648535d3d839cd86fda5ddcbe709aaefcc9195a1bc9579e3b9070a745ac6bf545251f74bdaeb9de69135595d1c4e2633eff254cc1d7ace36fc784b550f97a680024b1bee8b9016ecaa5b707edf47b2588251ce564f049c3ef14f312495f20396c5bb106fdf7a57bb4a00242bc8b24663aef00756fd81d70f9db403cad9495b0f880c657f35c8867f484de662e82076ca8962caf228035dcf6b31a2c03141911e371b3a0215e0c5a7bf51b495fd7e39328022c32e2e44380b58b11982a76e306ebf41d6c2a5270f1f632693e90941066430801f6734b8b309115ddc2536fc429426a8cfdd4668917572823d101a5d8c190cb26de7d59d109c6631c66e01aa53f111e9ce52e17be88e7164933985adfb955ec0b6c030e3162cb0a9ab502aba757f2d0275119be64a4735fd765a3017b405d4d0ad5d650bc98219fb280b03a556fc78329a23869c98d4c36aea7c84de700d41e21135c987ea2516a410224e50409447704921bf523e8f426adadec4fc60d0b81304c274c0a8b8cc3270f9f8170baa6beeb15422f14bc37022e61294e1e5e4cd312aba8a01b1de24dddc4cd80e87b8dfffc3d7bdcee64e1dd84955d5a2f3c097f2f151ca0509cc5a30dfdc77e6caca51bd7b7c269871bd5c9d7a6956b1cfb4afd162952f774e97cc0a39250361a20cc3c67e27d61f2924ee743c4cc96a37db2a01c5e4877f7cbe9e253893f335570e19970fca8ba2287f5de64d2349edae3e741179f8ef82ffb869294508d1ad3429e489392de8695ed5a1efe6aebd7075e915f0f53a640ce0b5aae08e0110d2695ef6b4ef6101cbdb7ccb0585c6edcac1440990d753a1b03e4b0599ed513a1bba7325450799e84aa38e724a7a8d4636db5613d0be2280f6c4efd21ad1e2c9cd3b050cc6a85d23e8bf1c3580390fb80d6236b9321f9507cf67ffc439e0d896de85e74878bff457016251f1f9a32dd45cb454c2c07ea1dfe4e81b4f2862d72274e2266b2ea140f5eb31a4db238bf7776dff33d570f8eff36e26894dc0925e7ee785029168b0bb3a7d643a3f45f42a0f7099446b820cca4d70d8fb4b0068809fd0f7fc950da83726221ab7b1c14380d143873904e1de292cf5c4336abdf02953f7324fb6533ba2fc08912883cd37935af75171dc307701fbcbd111565d71c0aa5d42ad073406a8f58f8822e9a5136cdd1d3813c311299067b9bf7fef93caef778299a53d8e94df5c4f60522717078644b4feed2592d69a4db1282ef48f266edec3c46f39a21067c91d10bd0e8d013694314e1de0918a3da21cdd3a67dbca92b530ffe45959231d190629aa0045e96dbbcc606abb528beb74a87eaa4b0e4dec45a64c64c9aedf01d8c9b6b062581f09c06269d83b000ee86b2a997820e60b77c64901303451d13df4c167e113232cf9ddbb25e92f715d3e602cee66a15da8343750b8383035a66aa8e8ff2a17996354ec71c7c7fc304401fc58c403d3b5186557c35538c91a1ac044a86633f8e3992726b348d6a9a16c2af6966efc1b22ab2fb17e2a6bcd3cd698fecf04ea1daec8c6f5d9cf7395f22c9b4a3f08204bd36c0e573db45a5f1ec09238f06a0a7ee009f4fc36ed89319232cc693700e6ac6a11da65ff32f57ef4b5b3a0a03b018038758ba7b689516bb192021de53af33e1243bebfffd26aec71b73bf80d625e1aeb799c8065e22d3ff271be7509e4aea873d44df07b43d2e70f618c2982dd5b35ea9e9298f789f7f3321fbce2e904e83f492fe92e4fb237c1db233e3f50bc78fcdd43fefe63e7662e8250812b5209186eae727d28dfa079714a384209b2c049a9c7869368de1541e3505f96c8a48b6c75b308dd482d0f61612e5adfa19272e80a72169619c6fb617540f7436358cb9ee850276a2e5471a1cddc0197775825774c323e92de90c9ee53c19465124568ce23a0253c57eb52cffcf75a1a01347c7f893ae279fbd117fb071003f155e77729678d87adda34ae5bba567234b3f2b8c86eadc71bd81a17449880ec9000000000000000000000000000000000000000000000000000000000000005a118ea4bed05254d93e806115d7aaa9e785cf8c5d599385e38864503c31caefae000000000000000000000000000000000000000000000000000000000000005a0d36c9ca0ab675047a4fbcb4733e57036be294dbfbd97157943464e2008d89c0000000000000000000000000000000000000000000000000000000000000005a0a821e7b1250c9f3671a2ce0995a3b368640f6415babf75bdbdf6c42ddedd399000000000000000000000000000000000000000000000000000000000000005a0b6ffbb4c0013df56e9ffb14251fe83b49953f3624161cf41519c1eef32c7c70000000000000000000000000000000000000000000000000000000000000005a29a509a2f557584aedae93a0401e8838652a4971fd82571faa439f8ea08601cd000000000000000000000000000000000000000000000000000000000000005a141641245c7f464e005292636daed4b3f965c819d82d5d3ca1d0563194435891000000000000000000000000000000000000000000000000000000000000005a25e8b0eaac47323067bb9fd42138ef7516812ab72ff2e2e7595d445087ab8015000000000000000000000000000000000000000000000000000000000000005a12978a27e7585a7159a2136e4d1b54d129bea3b2578f6020187bbc712cf67416000000000000000000000000000000000000000000000000000000000000005a2daa2036979e77ab4c6fe9b3915a360c2aa9b07134aa377d3fe2bd4dc15ef52d000000000000000000000000000000000000000000000000000000000000005a189cf13afb6164d70271d7563f988a8f413080f277b30df319e8aaf6bcd45a5a000000000000000000000000000000000000000000000000000000000000005a1159bf337c4960859883d1eabdf4dff8201d4295b5bd5cbcb043fe5421b2e0db000000000000000000000000000000000000000000000000000000000000005a05ee8379901a0077fe5a8dc90caff29b152b16d3b4937ed21941fe05e45395f3000000000000000000000000000000000000000000000000000000000000005a05c9d327c62e3d28e81d2084465b473e8bb0851aa1d7198563ce7d7e6eeb46c9000000000000000000000000000000000000000000000000000000000000005a14d4a17aaa4e36a95ba02c5292fbed87a638cdbb646142cc995e8e36fcb3998c000000000000000000000000000000000000000000000000000000000000005a03db0deed6d9ea39c15153525f0fe3478d097bcd3352db8808124c031f2d4cf6000000000000000000000000000000000000000000000000000000000000005a2ec15b89bd81022252819f13aace95a84f1733792e001d7aad7c286734896adb000000000000000000000000000000000000000000000000000000000000005a1213a02910a91e7072a25f14d13fc632b92c3d41f08ce7779e428337860dd71e000000000000000000000000000000000000000000000000000000000000005a1ebcadd1cf8ea88e0528ac31754b3106c60d5e39d009ed7a38812b2ee6bd9ac0000000000000000000000000000000000000000000000000000000000000005a14fc85a172844611dbcbab530ff365e336f53074afab0fe304285cd276ad3f85000000000000000000000000000000000000000000000000000000000000005a2b22a192dc935f834a7065001528a38584bd5f9869f6dc470bfa345da42ac934000000000000000000000000000000000000000000000000000000000000005a305605ea8bca2ed205f05ccce3d072d839bd388b1d553ba3f38fcd9284ce2284000000000000000000000000000000000000000000000000000000000000005a280eb76119b7720365fa90dd76c3156e72eb31bdb66c56878694b67690452d0d000000000000000000000000000000000000000000000000000000000000005a223609ae7d0938804b518647efd9f5390640a0a9591a7c0aa48a7b512d191c95000000000000000000000000000000000000000000000000000000000000005a17a18a23f5ffaf8b4598bd5f46c6c3fe98b34774d143c356fbe673eaea7b3526000000000000000000000000000000000000000000000000000000000000005a08858874b5463f234d27928f184608d2997a8b455e2cd297cf5cd655896a369c000000000000000000000000000000000000000000000000000000000000005a2618577040093128f1743569855dd17574fbe5dd90c645a1851f0261836e926e000000000000000000000000000000000000000000000000000000000000005a0f7f14b072bfdcb03cc23594bb020a9277317934a181688f3b7ecc15b1aa1798000000000000000000000000000000000000000000000000000000000000005a0e387f6c035ef5f2d5fc34817f1c8a3fada81c6eae428c29d9449ca19adb3f77000000000000000000000000000000000000000000000000000000000000005a172e014b0bc03e429253841cdcb799dc903769b7432b086020d7904721cf7e78000000000000000000000000000000000000000000000000000000000000005a0b05e78ceecfdaa9fc2caed4b7196b39e86debe2362a821d9e740e39757c11a6000000000000000000000000000000000000000000000000000000000000005a05bcfe11ab0e17f587772847c1c9abc76c2d6c50b8e614d0247da1a36fd58a70000000000000000000000000000000000000000000000000000000000000005a137e348a6bb79cec7288b3b7c81cc16547eb4055cacf15c89c48d584c37c9b48000000000000000000000000000000000000000000000000000000000000005a2e456bdc0b5e3d6fa42d0616ecaa99cb92801efc50530a6ce8129de7567abd13000000000000000000000000000000000000000000000000000000000000005a2297531aaea9b900219230a54bbb114063fcc9a9f448802991bc2a510c01c08a000000000000000000000000000000000000000000000000000000000000005a2608ef7fa7d3a8a9177e061b2312ada69478148425ac2191ce845d6138a54543000000000000000000000000000000000000000000000000000000000000005a18373896c8af59a9a593cbca26faf97353b16e3421e23d80f41d1f13bc35f299000000000000000000000000000000000000000000000000000000000000005a0422e36d62ebac5db8ed50ad19660001d0888519fad405d5dd8b24564b5d03a7000000000000000000000000000000000000000000000000000000000000005a204697550997dbcbe7933b393265325e07c7e7e7e1316f71459e87e46603653f000000000000000000000000000000000000000000000000000000000000005a0afdaa24b3ae6848511770625a42cb564b6afe7f999181e1b86ec32ed9f411fb000000000000000000000000000000000000000000000000000000000000005a1998f7ba0cb898b1f67746603f8434e4541aad67e0607700f487e2af574ddbbe000000000000000000000000000000000000000000000000000000000000005a28d158a93fc474e8a1c5a0945573c96f2f2a5648d559da1730b9ea039ad1a927000000000000000000000000000000000000000000000000000000000000005a1da21b5609d1ac6a5b37d35e4621422715b3897ae2bd2121b65beff5c1fd978a000000000000000000000000000000000000000000000000000000000000005a21d0b2db8648b1c078605691d138b2eca3561bbf1e065739e803534130f15f8a000000000000000000000000000000000000000000000000000000000000005a0ac5c7551c90e8aa30e17d59d1ae6274873a1026887df2fc4ffbf6251397cb54000000000000000000000000000000000000000000000000000000000000005a0e6a6eb67074b0761e08214aeb6d4291b1994577ac35187be69bc8845c7cd811000000000000000000000000000000000000000000000000000000000000005a107a5a47cdb1a4b9d05bd9a93fb50ef7be9a6c60b66a14663091c358b1465c34000000000000000000000000000000000000000000000000000000000000005a2f2a04499de92c4a01c4e3c4a7c56a27e54eed0355c9cff41d8a899654dc938a000000000000000000000000000000000000000000000000000000000000005a09726d1727dac0de395bbd7417802cc63f8fc99f98e79aae3c3cc8a266d7017a000000000000000000000000000000000000000000000000000000000000005a24f295d220d7b25221869e2190dea004b42ed17d89e00f6e0c8888721540184f000000000000000000000000000000000000000000000000000000000000005a03c0a9c9afd770006f83637c548a9e9842db113bc355112ebd86d2f6d0181ccc000000000000000000000000000000000000000000000000000000000000005a1fdb3080d8d0ef74bd8927366e8b3543b2569c273bb2feb2bebb0d8306ff0942000000000000000000000000000000000000000000000000000000000000005a205a51e3c16c383bc59ebfd9158ce9d15621fe797c7cce7dc116c59913f497c0000000000000000000000000000000000000000000000000000000000000005a25110af1d129a85dd836a321cc1647f128236837699f568b5887bb905e0d6a15000000000000000000000000000000000000000000000000000000000000005a283666b72d14262e3ee0cc585f829013fea6952962c886080b6e6d1277fb5685000000000000000000000000000000000000000000000000000000000000005a21cf116a254de52ade6e4e7b4daf8d63876e5abcea311009820cf47028b94cb7000000000000000000000000000000000000000000000000000000000000005a094f804d578197b9e519d951830d3bbabced4b8cf1be2246d50915c4fa03aeca000000000000000000000000000000000000000000000000000000000000005a0c6f9e2dd2fb32edc84807e04fb613b6beb01251e8aa9d059a390ed42b0f3248000000000000000000000000000000000000000000000000000000000000005a1f73bca25fd05bed72934bfa7b96a4d2caf4a6b3ada71f461f750cb0d7a700e5000000000000000000000000000000000000000000000000000000000000005a2421f0df86ad44c9f5d2581a62b67716a9c5a625502438ad0952e8e9c370e086000000000000000000000000000000000000000000000000000000000000005a1fa5e17122117bc9555c42b39abb64d47a4448483bd3bf56997020fdd0b07343000000000000000000000000000000000000000000000000000000000000005a1bf87a6af584465a8466a52ee82ef14e86f1d51e06dbb0f58982ea287bf7e043000000000000000000000000000000000000000000000000000000000000005a304586385cd634630f3dbe4e42865bba3f9347c13f5c8ed01e2a56b8f781bbe5000000000000000000000000000000000000000000000000000000000000005a0000000000000000000000000000000000000000000000000000000000008100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810400008100000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086596ea6a57f5844b295bc9dcd434ef5e4d288bbcc523a1354e84ae82f46028872fd968cdd430eed9c835d903115b02408ffd7a811b21c931c3ab92666fd071fea53b2aa00db3794a686fa59a73a69892a8642be9b58de60bd2954cb1f9f312c2891cd1513017a4ac497ab0ae1d394fc48347085ad520f80645a902ca72d29243f87e0f2b069845e7e2bfd01f50b90dbcd13d3522c773fbb2690fe34a7037981eeec8901e9632eae94ac13fd58eca9151d2254f2226b54d5298c887b8b6826a80bfdfe4248c7bc58b498e48cb5e6c61310745b4ed709e9084b1c01c25edb3cefa6b7e88ad0e9eeaa9dc62cc29e8906d37ce44fbaa3c46853ebe3dd2bdbf164e36183cfbea10c8fc0e955c2f90eb5418a1037c29b7e1f8adccf9a0b6a5c504efc4af0d686ece1615bd6b256e935204bb58481268866d6ffcb0e86040d6581984518504e8d5b8c1d22b32d309d408dbdbb94783d3c90f9204ff2055225d2c9ddee6743cd961687681e5792e8b20eff4a61b55f41c888e85db586143ccdaea682f89ec1d9b0c903020911384f6ba57f9e20951dc37e8c3a02fce0f09f719b211ae69a6112750bc856d6185412e78576d075163473c01ba1e7334934f83eee8ed7c100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002454748add6b61758a904466196b7632e289676835e02ae98dfbeeb57849c0ad8a1cb12c8025419cf14dc527b70fa784321ee59311fa883ab4383fce2956ddf3cc72d559018c0fdee1b487de4297c788dcb1a2a282c9a01a3c1d9c4de71b2a9bd844ea5c25cdac086d668d53ea943d840e841ccc8c06ec964be6c488fb0046c2d964be341f4bb300b736bf0adcba6b1f6b1351eb6f0c62600c93950167f1df0312726e3d0eb7cd1da365a9ccc04632660323678add621e7afda8f2915ee059f348050a847dfd20fd177e76165bd7386ffa2905245a95be007c1d69557fdfa60bdad3edbbdd455b4e6f13f753971df34042cb6a25f2a92a761a24b91f38b661b76d4b57e1096ab8cf0f98758f0f92c193798ea74f15bcbd191699515d254f263ad74a4b3b75fa6f27a819229471315cd58e7c8489d0459f218d1db4e9981e8660414e6e0ddbcc0c4a9fdedbc4e7488789981e938d2b141904daa539608d21e1abdf80db0ab791cbadcac3d8f47879e2b994176ad8fb372503c86d748695d51775c9e17e0c9afdb5b84fdf3e6c8e36a07d2fbea7eeeaef009ce6d5e055342e73f56b7a1fa1a0d9182eebeb85f2b3e97b69f58baa20f02521a1055b9adf868d44e000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c016418eef94713b9315be0882fd34b4d28c0454e420bcebb948d9d4c24895ab5c7c5145d55b3202a9cfa58b65393c9e3700494313b4eccb46fde45236b89b2af29682b14a47d8f608b52709d4bbb1a2d916326059fa12fae1d032678275fed48c51fb0fa2b8f95d1aef239e7b3d4eaa57f7fa57ae22181d808142a7466c7bc66cb38f25624ebeeffeeae72c9532b912a293ce969c6e52fadfeaf2bd6f185d68e54efde03ae79c17ef5fc977bf80d1fcf229e074f4a4015967048abf23604db5dc7449a3d6ce8471a29e8c69cae2a17399791cd0142d47d6ba3e2a65c9a6979311cb44d0a1e5e11d30c77be65a8e0ee5d5e8c03db141533f053c300229d61a1a7be74daebb685709e5d1f5e067850e2398b774b5cca7e98ed10baf27a1f8145a4271c97e2913004252a137a08139fbc3c8fb4e0ae830f307e3bb0ec6bdb21b933d6363b1409e03186bf758580ea3d68ecc2c52a030c9d648c369d726d773a11845e1f2beb7211c26c89c8a9d5eea6812f7debc8322f3bc9fb8191f705b772fb375150f3501202f92422532441360e63dbbc36035178ee419b5ac5859cf2764a427f88cf3aaf7df5fb0b87d4b273bd6bc4883c3a552a10f48dbc118c571746db00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ed3943948c53833111ec97e7cb62301e954a75e37331d25fb5f152c2de9166a4bb782b85e7a3d682954e1c2e3a5c92f183f10d4147d36ebb6a14484d1fb475f2be8a29f5ee74f39edcd415a42215239f508be99551cdf2b74e3fc6ca884949fd52b58be98332046532ad8a4d5ff2e18c25b8cec1c38623ae7dc15be0fd72fab0e79aa501b0776dd122089e0e93ee2190c44726a88a64b55ca3229bdd101ddea35eb7c1a438c5ef8bf834bf0e5818baff3bb1e0fc18d4f62030338f08dc48ef6f9a3c104807f2510380a8d5e8d002fafe6a981ba1217d400b355b9fa1c2b3ac20cdde912a787596f0c253b23008f9e0561d7981a7ffdb976a37cd7034d9eb104420f1f2d1d5cbc9a649d40ef4e1305f02c25cdc1f822e3ff87246c5a92b6f644232fe4d6e961314d528e224e55993ecdfc817fd0097afb13f4bf180c9011ce90d96e30c6e8a329b4a89383c562b5192d88bdc98ac9914145f916a6f7cc8a7d0d074ea4ea61cf20737164c54201d68bbdeb0c584ec193e7e87d447e40780d54917c6708d4b13a8fd8b82c0061639fcdf0dccaf5d729341948bd9db5063bb940fdabf9f2a6245501d951375dc12776a4feca19ec1328a24dbccc57d91ec21dad04000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018cfd12906a0587a8d8150c52b7caa4074c91dbba8182cade9b6fb99b7ff2cd5c132bf23ef5c8e6010438920ef9fd3051af84510cc624a9450ab4bca6ade31f4584a3f0b78b978fea3bbd73255e7ef822d21bc19ebd04c9f5d7416fc794d3127b6f30d4ab92c43c95178a35a6e6d6ef9cf233eb65c90a576981af02dfea98f1334db0312354a29a179d9416b33255c774ff1878ffe791a3c5ecf365e916ea077b1641718da961716d73a52822143bdab274b521788831648d407f3c28f96b9875f8b20a497e62b74feeb31e771ffb54d0c306227b8abb0f56e19200449c07ade4a6d5a6e9ee587790dd17437d523abb51fa5a3f4e0fa997026622ef0727da71ab080989bf1f6443295dcf6476fce88071e34ec8ff7d9f7b5cefd22d2d6dc67f8979f6ff5ca4a5626f6fedd0554866750b769f4966a2f29b3492d20d93913ac0d7d419d0a99b3b25a10ef7d8579df8acc71a04bc034840c4f744d0c72a597e54e0b87b720a3b4907f4842d42359b4533f897f2d5dc88ad71104178f02c3e1806e7091186d2518d1f4a15583ddb41ddc5eb178a0e394bcb3a890bb472dfd11d6141e82dc468088f5feeffd52121611e9b3e58ad1fa29c3fc4b6f4c5d2be37e09080000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa8fc595e4b33bb5c750490b52f8639157fc7625757c57ebc27de937d796a7e7660b8c6c136de2604affc39a5d5771b0d6a50e65b90fe38e8d290ae318d1490eb22ad31ac19e47067b891cc706ef3be3c8e07a1dd0a47c8c1eae6adf94e22ae83cd5f73c737f72526c6baf00f34972db680fe4052768a138688d6b0944f85de135e2111d287236c11421e5bd4d82c6f7ec9a583f3dc3aaffa92b2248efc3dcf7954ec211494f5f36c7ceed832ae6ff9e137c30c68a0b98c05ddac6fd79911e9b956960e2598bcf0ac9253d1661d3be9b83866977835279398eac0b363b2a569ac4899a21f30f02d08b608d4d57900442ac3b4221386f86ecefdaa4df2a5236a201ac1b89a79a9f9eb88819cd0b0dca32470d1323aa83bc41f6d55f8f2ef892991b4208d7c960d5197a5c126508dded65f5ea23683709cb39c4ecf1970c7a014412c91fd040af6e611cd02d9fb1ca395690480118ef422c470291e475acdbb991054fe1e780be4fe4cdf70c9a61ebb2c378814c8d2b19bd2a9ecc064b01312e51c135787b0fbdd26bb8f8621708412de6103611618670b5d030316c26b397cf76fb129f40b485737c12074ce600a78154ef7d6a579cdc2dcb666484d33016c3f60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000270364b1326d999809032d7e8ce3a08a6a859262d42e433172441d4d9053fb85e04bc3b737072eec24a6ec5460abd7b0f1a834f212f648ec287db9f5406e6b40f2eaefb1af73867bc4241916e82f2e2f95397eb8b480142b51fe3bfd2964d5a300895c5ca3c2f33180a4bf6c34898b57958161ae9c010a2d392746ccc302024881f8ed40f985db3dc74d29a976efd90714d63efc42f4fe99ffa5f3c6974a37638254af6948f07d0e9f841ce72b75b879f8e7a90ba22c3a7a2b1113524b04ba8f4488466dca856e562d5554c7bc1f263d81951adb63ce3c0edbfcefca15597303671b187ba359c085f0033115ae477dbdfe684769c286ddda47203b2cc6d600993c8731b45025dcb5f7e18a27f39d81513cc83bed65e36b415e99cc0a88e535477a82f846d736fbda40e4d52e90a2f2702194476eaeadf8665381af936a271ffc3da530027b6e5c6b5132ef6b52cc7022d45cbb19fd6d4cb2f3c8053b765b87931c76a15e5d95635d3f217d81d31179ce2f01856dfcf5bda597f3ce996a6937626ab0735553c281af92146e8e0c69f02d1b8850e4bb1abf267ecfe4a0b81ee4710f4042da1c48d519b05c1437685170abeb98f8e5b79c81c9bb460eb4cf0deb0f00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c325bcf343c27ce9fa0e2a3fa1997aa366021c6aeb823049a2291411680c677f603a012285ba5ad64d3adea3161f55924133b51db402912f3d6c9d97eff6fb3ea3e8d94ab920fcb8323a4d34102710f7683134aa03a6dc1aec2cdb46fadf610dfde47126f6325c895c0c959eb771a20099c603fad17e944b5fc47779ce862379311db7a123ad727cefffe55dddbb8b87e336bb293a4de396998c444d6e5adcc58962d83ef1c6adc8db057347ea405f25cecb49a40bdbde24e69c337f0e705874e4000ba284e070af898eb77f0c489c8488ae3af44c93aa8b21dc930804a153f58ebd276d6b7d38c0d2d7820945e7aa67a55765866ebbc6f6c82f9edd932ef695d7f3e72ef4aae91ed803ea39d297637185cdfa8b70b51e246916c6cfe28324f8558c85c036d05cc8f808c7757cfb9a18b51fa81e0f7c81be1eeea0a19281a266b7f7b5ece7b5a4e24ede890a3f444b3383f7c0e7fd4c0f52707a5a6e5d243cda66dbdc1efe1818bae28db3dd467401a7e42081905dc84665adc91d90b94e14bd0d0f56c934828d37a0da99a21e3d2b995a2cfa87123a1b827041597dc03a2dcd1878877f93c13d3dfeaea4f188f729d5d258a0429c894619d7a60446855763e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a84724e6c5548135f7b254364903c660b5102b196cacfa4f9a4c91dfc74e526850b34569cd61d2e8001edfa12d4f800ccbc2d8de993c541c67d80561774cce61afc2236512c25658b8c2b79c60650de5ac7e78a0baa1cf4d86ae9c7b5586debe4806864fd8440502dd11538a6d6384ad16c1fdf4a20ae0dede37ff8a9c0266430f97c43caad45104639fd184cdb8868c4b8b60321c6a239cb4edc5736dee1aef91fff821b93b33a0d9289acd18940b8de4ad6c6a2aab85671e2a72d059d0d51bc9b0153a52bffeacfccf61451b7d22cb0e9c93a5f1058b766a701bae68df4103803de7b662289c2496d4952a21123f5cb782e42c60fb9e960abf3e76be9e9309c06c2b8541bfb5a16e83e1ed933b0e49605d86831783965ebac616b158e8df9a413c0e12d8e7731c4f130ceb89078401a0f66e11c07c8e69a6c802283f8140074624a31b08ac67426dc3fa8a92b97dc3c18d84743717a1d99a6de29228ce89a5433ab5445bbeefe8036a343b7b00e70d1d45b3ea518bfa5f854c9afd08781d668de5230d24188b5b40dee9bcb318558fc96eb7144db648ec0bcc41ccbbc33a8da7fd405680b2a34cfe87ee2b4dfd467bd7eadcae7b591e48d7de045326558300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c6794256a2392033bb8fa27503d335558e7157c7bc588215438bc24cdbeb4b51250816f3246120cf4fe54aff99c59846844e58e66b575061b05c9767473ee60ba572c596a1cf64df5721872ce99c13b8f36681f20f247cd05609b9e775133bea31ba6e2df4c0ee5c4fd4b07b34cf87469ebbc5c0ab4ea661ff8a2b5f5fe073490f7152657e2e16e3ddbb61d220214f5440e80ba7acbd7c7987f24c9abb75c35e737323420eb0fab9ada5fb21d3e3eefc79b1d2a318caccb4dcda86c7c8dc7c1d75e005c6aadd9d66a9bc5b7304fe24a9486524a7ccafcab85c316dc08c2f54c23c6d1fc6ac9cb6a877d7e31f8cbf082a141ab243bfe31a024653eed6d5534e6f45efc777e331b5eb6d0c850040d52748e267aeab1431f8d27dcc95781a66606a0e5db6b885bb80c9b7e69df47d9b3a52c61ae068d747425e378e417dfe03642e0b6cb6b566ba4ea3ed040dbc6c00b92b11ada0f36e6c72d48696a3e700f40ad408131d39ccfdad8bf5138773a4d8ce7feb48eb25ac1093dd4cd163080e1c15616517620004b6097cf7b01856174a39909240be46110e8350665b69b1d5ce4da5b4f99a81f247283b14c830179d7b0fb9ab1c4a802829e3534b2dcf805a8115e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000832fbccf74dc20b7c7067c4539a9b3b5709d4f38e8e2a36ac6d3e2031073023b22c841a503f0f8f91e1897d96c3639aef93c2ed879cd44f5993bba7132ba763cb91ebd9e91e8881adbf3768277954976588821463c829757817d7e439a888b5bab0a8469d5b18a04ae24f72a3829e12c62fb57bcaed47a9f2f10ac531740b0a7675782b1003deb703bf293ce56fc60de9ba63f6221fe364de962819296d6c8d316493bff8ae2087424db8b449c2d78352a9729d266a9c4be69d6a8a682d9c63dbcadc698e5d21ff110de945ad981a557964378241918b6bddb710bc516b4fd0a295299af75b47772ed6a6853e6d8f7d903ed35d3df0d7c0b416f6ba63267602b9f7fc4d374a4c6d4baba5d200f9244ef15d8762cb04321f634f5f4b82f23a0210d414d07cf6f45f4377ffd66ec53d8f80b5835577e631d4ba6686238433cc8b7f2e4c7400864fa43bc30fc5799f63c2c263af4f23da35981a02db9cecc6dbde9fcb4ead9589c8d1ae699500378a617d8f150f8392f2df8cdaf9ed59197482ab5b0587d3116c9f32fdb2f886c08e6f8f379cd260bd9b11ba47f826fe739372a1f6b2dccca2afb0b76d8f9744e69d47e2e4a7726ad84cd98bdbb6c9f47d4a64586000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024ac118c6a4e0311c2cacb814b07b82368b2da8cd022a7e09efa8367437628c66fdfcb33ae166f2b0734ac7f5f2d4a71d10da69ade0fd781d671b42d70792b4cd0b09e27038da65ecaa35de665901d1ae920496df5a53029071b2cc9a179704bf1cfc67d7a90a8a04966283b3fffd88222feaf65d5083ef401ac208b29c41f5895c27e43b7877be389b449d0d39b6c1bcf4e6afb592d5580f80d9b8f024f747fc2ef61cff319595d6e8d31d5b4a8efdb3bfdde84da583cd9818648802e326debd67926007be484d661b2f0a82d779e7b971aa7fec623b24569cc20c79911e70fe47c25a2ddf91f1c5b1e17efde73d0b65aea561d54bd20801c9178ba168f4bae530835faab77db03fbc5b190973eb74b9f2272188d05f063505fcf9e91cd2df882775cadb46ab1e53b32b8421ccf726cfa829f690898ace0bbf9063f2dd3ce5b2f14ae57f7be18cadf8cc4ee41ea9b1066b6baf73f2c0993be8cd42d67107d020b0fa280636d54dc58d484286464d667877966f6093714adfdd7486c0e0479051a695331af08448ee8705a6c1b159a13bdfc9ac41e1208b3be9424dabc86e23dcfe49834e04f7e4a0f8c447680c6b4dad683387f580622829d8552eee95a758c00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008683a53d58f0f6b357def872ebb9c975439586ff28948d4bc688e0a25fc18656d7babd985181f5895e3140f731856f4458b27d4cae8ec5cebc55743920d088c588def6a3c9434558053f5b0a17c5072334aaf1698aabbc218cdcc17102640571229e6a87c7eba7ca24bc70763ad52a0a9f904300f64bc494440294319abec7c01234f5688c0e8b068835e7ae50a2d725a6227163d24185041007ff061caa0c9f9e4ddf25f63cb6dd68f7a7f3dd506c8aead5dcb3911c2c185256ca41f1bd0c773dc621db218b548bc0d1cbe7d3e69b1e33b99762f425584f75f54a7fa7dfcdc2d3e2e9b632e3f6fa22997dadc535cfc2b062133d4e0f3250847f605c3f5cd7cb48136c0e3e49b2ccfd0b6ecad66367f6751ba57ceafe1849a54ae9c4c27e4d3a560b2461e02ec18b4d1084bce08cde71ed927cbe127a671f36497300ead13db62abd0fa93ffa64bfea4c3a023ee13f2b292d970bba24f08fb70126870d75c6f5255cf667fc2e3150ca26ebc55623a046b688e0d41ae1915d4ed605837bcb79a01f1f5b107b01ada71cb7935ff37707371996e7a87ac1fac15bb40ec9911fddf8d37fa2f780b1efa199aa157ff9e7bb3ea6b8c7b94f11872f0b36a8aafeb308f40000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a11d43f07a801813e20eb7609e7f665c3893e0685fc6995885eb909c3a89b72c00740ddc63ca4ae6ee4858ae024484e63a6dd868aa188c03c960882f3845ff3fa4fd7bec9dcec7466ce7c8c021b509d4c18f758f882d1229ea5d591364e9a1f9a00daa84070126fe03927f0c7fcdd02924b42fed8d636e2d9b951896825aa8c9713b8f293b251023098b25f6589b45722c56d0b133b34a6bbefae6b795ce1709ca63fd3169c9ef30d1579cc1d76e7edcc08be535a4253c036d85b53c4867f01f9b5d44b2753141fa0a071390619772182b54e2317541077dd6176b39b6f187767669210ca9f11a1796ae5d174309bd4eeecee0f5e9724eb5dcb0f96d57247ce0eb3f6dbc9489c0f87789674be3139ca0fd97571f64cea1ca41cf6b167e6cbe0953e02e4a207ce0a15527448cd4dbcddc71d08f75b649dab56cf4ed78b6d0f949920fc6ef4cb2fb37e6efed6df1cc26ef5874a792d68a7c316aabc851ca4ec1f0a12560b9f5acfec586a284c2946c142124670582e930bac5f85ec775adaae59338c870cb10c515513d03cb11d96c563d0505000be8c0d72eb9f8f15b3e6167ed322cdbbd2929c6858bdd31af9fac50a7ff53eb624ec112db1cc2986fa16697dd0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000221c6e29f1872e8575a9faeda9281f1ac62b11f6e853af091826e2a330fa74c503e64557a61e2a9db3dd0df084c3b2fc845c581692c0a12475a518ea8408c67f88c5e1b5de58378bb2241d5aa7218914e78af3d830d0f2a125f97d7da672670bf8bab1c92263f4846980f90e3fff4650735b30b4fa11cc53c943ece2c66e2027946bc95c234b85f415980a4a0d53da27cac023ad21f3af7404962effb3b41ec5151952d67eb1f1524325360b39d45a173b5a39e1313a4a48fd6972956321f01f0fc33df24c1d239e30e776551275760bbaa8f5b0257e045b682be82d974e2844a76ac01c6bba49053f7d6c70fb9b4b26a074197a4b9bea1994806c50ec84e94320ff7483d76a0c35151b4c50074b1e068229414262d9d9c3bd3734240dbff2d09d4d51308833773d5820a5fc67d7da8cf7a2a3bd292c655715e4a60db67adc69351b7cdeb94100f3bd04e26485f272989856b57d8a24d034dfd326e4c0da3945739ca671d87430a1cd79965709ecd8d0bdf49d86c92c5a19d090c52eca9c65ed522bc8e59fe27d8021f0622cb2e2091c3e65b25b2b573212d359282b9f8f4f0d0d8f958b5207fabfab53bd5f2008bf73ae234256462ba115cbd58b3fc3fd4e73000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c894e715437dc5134252d5bb33f05135bb495d464703d98990dcb24b5eac78b88726757ded9083dfb8f7a176f9ab39ccfcd1235e320995bcbda7551d291bbf8cc2188e6798089a4893ec182a4391076b87b565436e1085b78f196525851abf5a1e491cf3973a49b1c3efe426b8ad2d2ea5308ef717812ac9bbc7a883d1dbbf8d2c2d7b146ffc2ef94a8d62ceec9ca13312910852e99f671229c8fbd22a221362fa89a942e0f289918fd4ee2b76abe98ffacb14067908dba6328c5e9e9bfa62427f8530cbd13a1f055ef4b07bdd1df8279bb2b37f0e44ef3ac15eb571dc323d23e6ceb39f1bc6d5499483d184235d5658b75340be99a75839b990c4004797c44a10c4afc68df8d4c7e99a558d9b84a114b17984f5422ebbcbe0951e478035d3104752199d5fe960e08107b97291a0c7bd7f738456e52c8170d288a8b9db92ae43cfeda9bfc3f61ca15ceafd0b126cf212a01b2a6c79293c5afac955cf864aca44a6e6de1c54e673c7ec003bb769d4f31769aa5f2c94ad4d734ba4fd839890c80f95b89046a662afe4ae04f8cb67ca5f25774ba16cfe7fd6160b1abc1919678e4101765924b55c249a8476e5a2a4a5fc18896c7e7d81a34515ae11d269cf761700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a184ea02745eae073a1e3b98d552069fca33c1224c2482d7a143688b4e49b3c7cf669ab1a57426b95f42d81d0bacef66e183a28349d1757f14e034d082d97a99d94951349fe9d160d7dd47110f635b47d260a6cc2dd5b01f0692848a350eb9ef52841b89bb626b2dea5671873cf28f656db8024da3e16916fe0af0ad5f9ecb5eb30cd6575ecf1586c7dd9c4baff4fd0a355bbd775d8067bee3581618a08feccdf00f7f2efc42192f346d9d84f481e08c715ed0012d1de52ccc0d2542118f1c93ef558f8d7f24402ff18281bd02f5989c6a430b4db0d75812f5b712ef161ba1f8586716d88de09f45b8e75184b9e9c8fcfcb7d6c194fcb1cb011f0d898da949069bdffe4861ada279f267e85548878e0826a4415ef929a80c26f3d11cef8882b548bc04d9f0d1dcd61cbe1353a3cc0d6f99e70a0e65a3a943defc1867efc7d028b5626b28ca1bd041d258f1fb78f6c703c63793fbe90273876c513de7694a3865d0583e5b89b0ece57b8d6ec84fe67d989be16a1849bc434363b66990a4e04423fd29471623e4a4d674b26d406d24ba38a6dfd3fc878e8ac27363bd895d31e5c87f591e41d6b4638c125c92d50f6a666ee1ab259be355f43d6886b5bdd30d22800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f95768744f48d129af53484cc6b489ed5020c0c42ba019e2fcea2467d15b1b89bd0262b7a846541ee743bf47a5bbb39d1f2bfa32e41f3ca0aa5a1734cd70b0d8636ae98efc285a4e045875ad9c716130445bccfbd1af971f20ba6c1e9ac70ec60c1363f24e7fb8cb7dea2829080a2c17908c2f1a8d2788c78fa1a730c6d1057b28c2756951828ce9ea9a217247853d9120d73e18216c1f6e47d08e1bfa06e34c6c0471f727c237ba4627d13096be3b0ab8bc5b5d6a5d90fc12b4ab45d17ec0b235625fe89927a4c933ecac4666e3b0eb105198f4a63d5cc4345df8ace75df2780101679f276d99d5a84e9db3316d422e19653c8a3bae82849fc56c2db2a12e4bd1de5807b4d92e4a463d09df5951fd2ea85641245c7a5f7c5f71f0a207de4ef649fc7a84697e233c28278e7896125588012cc428ca36ac4a7dad904d571d503b202ebf89cfda4e2431fdb71ee9ede39f0c6da72502af84642a32d872f7c3997eff1f159d37e14013ef595eb51ed9f6353633f6703109a5d34189a1df6d7866fca5478e873c8662fcb95a1f1fe70873f7ea24fcf36e680c83a5775c0e1b691f2bc02c1ea1e7f328bfee033f4c67106ed72e0bbe4d34a3060f81975e295b0aaf100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000617e58e6b6dc563516809a049ad8bffdb5e68c773549ffa030f4cb708a264c2483f4a43de5ea5bbd2ddd35704132bf37ea06eabc7dc981d2b244c04eeb8fbc524907b3b677d4f79278e4e05efc12d4720b0ec57de11ff207a8a9e879c657b11012e3e8ded9beae336473d137ea31a99506ecdf7a3cb8d63378c16f65ba7038b72ee44a3c04c32d3bad280234619e02d824088ecf789b65f32480781c01785590a7ce0cc311182a3cacabfd0b318614ee0161a273096cdf0e4294332f7f6552fb80a69bab042b4a2b85ec5689c81228ab8a5ac57fa92e12e6e0aff99bdb220a8ab44acfac01519843c1706ebb9469c3d33507b149262fbabf0561de5d66d9551a1786e39fd552993414bfc348bbf62790712ee47ff0400ffd7303f51b5eea70e41a55da6a842e18f61dee52aa644d391bfd9e5c6059ba64e318cc6fae49c312c06dea335bfad1e32fd050ead72d3197ae31c6e383c861a0d9c0015d44f0831b977fe7be7bb11f2a9d182ab6dc34e58219a536688d784b7fa7106994081ad83e5228d634b147cc06044fd1d7344e724573c9d6358645e5eecc3023cd53ab2c8032717233d2384fb7c7eee92b037f8a156ad7d7ac2cf5d85fcdbbf6bd46e53848e0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000304b97e64d26a2872ab65cc3e1072b2b96fe4563cadbd315d3dc483cdc8bbcbe2b4a33daeb794bc4fd53805c0fe0196b537038dcc01a6dfcbd7bdad3879e346085563a4ce5af52627866c955ae5abc0a6907e5038adc1efb8f1e1600c4d284707c13c03f5525db8f7957e911c9828586b65c7360065beac7b7a897945eb40cad1841bd05e0647b624071eca96a4b4725b05dbb358bf4d70db156d7f9c8d0891c2d99c58224f8f56d1bd7f307dd4653e03b6816fd3db4f0c54451e1cb5c08690c0733bfeb8379079c9d2ed4679a1003615f3d6bc9bb9fd2d7fa59d4a0e8995e4d209d4a323380b521ef71e39906feced937d3612c0066d8f7474084b602cf7907b05f86ce6374c52470598b3c13ac265f060cd28ead292ee9f04dddaa9f75481f9f8dc6810f5c499d5cca82249c2aee48f5a33563b58e3f8930d14375c1caf219e79ed1e5b56adce5886494c3a668316dcb1ee8b614f4874dfd3bb5a2f8902f51e2c4388868df41918469b9f410b27bc1613836c7e28768ae01028a1689c1e27642e01ef48bfdda8b8d319f03eb39444e048fb8e187abfd7b6b4d58c47c9e4b90ea635251586472b9893618ce94f97546510a321e07a0e34b35550088dce3eaba0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d323cfa97229c2850f0a8c3de5277a21ed34b0905af62a1d780e02dfae1ba4d6f4bbaacd6b081b75356f263e2af31e28dc4b9c11fbdb3ea735695c1811dac38df3bd76555f12976ffae228bbdc65b875f1b23e38643771f630821182488ecaf9a94efeb705d658f20e2e42b5c4de88431d6cfaed351809e75b8d1c2bfd407004a2af615dd7f531b8639f2406a6039e1e15032891c0d4a63b8eb050505de73d211412577603aaabe7020a70f55a63d7e30ee42b2e6e3bb91f31767990dd7ea785bcf3248f0ffc6c6305a54dac0bdaf2a0b31aff02c6ead9d16915dd6bc4d2a4235c763b9ea4f241f473f3a6b74d52b8fb8fe6545e6b2a47769e8f1b1cbd3abe2dc7b88bcf8a73b96afbd9ae17825ca0789be6aaa4224bd7db7019cd6583506ad7a66804b8f4a53103696101bd77139e373bc7d8b56dbd9ca9cca5c81dc130c3c09190df5d4e186088fb0b8a34b911f04fa57121ad6654b67ec01a8d9d81952bdcecdfef3a479db6adf9f70408bea2b24395e4af3b540f6f5f07e7d61b6ec1140144374270bb63e65fe8f9e6785017363d8aab7549feba958c52bfc90ebad697b0b54e46a699a843770ae37e2f1b29c255fdeae334a80ebd07d6dea4c362df200000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa14dcd55d777b7ef9cf974aa828f31b6e80ae8fd40e8512f9aa627ab8b03ac3ca5ba5a8f4b5a05c76db7f946c866950de6845d5f7dfb656b0adfdd40cd964e0bca131bb2b4039738ced5df78495672b5720175988a2bd6c681cb3509f1f59a0e603e6a3fa7c371e042f2e761d85d796dccd34bfd3b7411f433a38da02cf467438380f5d2dd3427fd3e355952ce45719f5296daa8aa38008a1df9e74f99ac42cba78e7f4ed37d96ec8e892ec1c896717ec3f9c95f3d15f4aef81ebe91baadf0362eb0d1538f3a33435d7abb8c3fbbf04d8c2a1618e52436ead978f245981edb0598e2bbd90bace8062fce40f57d72cd020c4f640bca14a53258206ad1bf0643d6099279b788bd024d7b39cde260db386c810ae72f4066a6d7e4a15e4b2fcd5cafc80f7991a2dff16c7ef0b244892cf6e20f2ab94dc44ad0a970152066eda5c3250a00110c042fb33a0f4cf210419a2680ae28e3996b0bdd2446e964e6ae6c0d11101ce326debaf6aec6f9a1fae5e31b52af8309ebdd4cfc4850f7ed29637f23a87425e6e8ad4957a55c4299ee633f5dbc2d58ee0a951fc40c4a3c9f27265e4800bb8d5ce03547478708e65ac12be6a4ddc80a55e6916ab6ecb4d489be0f33c5500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c3186482920dc0038ea63c9e99c6d0ffa4c808b4512c2e66e595a3e3b570102d6de57c88a2db66271174f705881ab4768ef72dce19f7c14507d18068c88035facff4239b8a9fcc7ba542d1dab62799ad1058f1f40c8d8b060ac4447766460292fac05afd4ff11cc53d0dfd9fbc8de7f44ed2631959c87253ce3c18b1139b407a16c257c45c794851f5c2cbf60a9ee417723a31b90ed92f4b5ad2282d694b1cc25ddadcff8e8dd334c9e13aba4dc7cda5b4230e743ea82348470e140ad915adf30be9c7d72d6152eff2bae958bb4e1263d7ffe22315af5117232ca2a4a501dd746e0602e1ce55a323fd77cfbff98c6f83b783d3c46f3d609ce4266591f29278b6cea6669536549d37445d36b10a4a78c980e74da5d61abb1bb0a435806d14e7fd8e9994f644a0bd4503a1f4b0d2fc393912e92056c175865eb0e268d4a6b8d9e5a2dfd49e158eaaed40ae2ccb5dc1d66ce5c354348df409ccccd400e37d82119d619207c9bd933183c710ad27ae8239300a77bae45dbf2c756a17d8a539937d4351b14fc0c9a66821987a6c0ec18c4b71fac0d94802a716501db02d88f184fcfb84af5df450e83904906dd39bd432fc5a97078ef27fb0f4120f3abe3030b536c0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b053f0dff8d598c336aed1d865801cc373a0c4171a1d1ba22ce0661569bebd53ec63b6ee1c76c65aae81b97c0256bc7d83faee1d68ec2256add5590cbd096578af71bf9320f0848764242d1a241c8402e03020981ec087b0f0ac0ea173838bbf802c70692e18cd91a3b3fb6c2ab58b7cc1ba772fcf055a50582184417b0b2ba8582fc2fc403dc66220e8bb4f0bb60382813c8b1c5b2d0e78f3914d7dbf3248c3d460b1559d63f081cddd70851193a710be06e95d3c6a8c148cc621889f55e4bedce56a7747b7a4b6785b6769723a362e609f3d77f6ce8f01fda10d36507e6c548ac4cbe34764af530cb33396d5484af8872d9e7dfafe32df8c9edb70fca087fdea7d0c255910e09c1b9a76861c22f52e74d64601742e91c03bcb5ebe3091d7eedcc6675992b50185640cf473885db459013d8772e347bb513381270c46e0b63c26d40a94a97df1d8c2514231436aaf8b6cbf8b2e9237e24c064f2a8918c5efa58892df0ea035515fcb2e17e291d7191139f7ed011d8c3d53f97f3646ff1c5d0335a58361dfb3f27926cb204c25906aef26634f54694003239a5568d7be4e1b6f845fbb8aa2807a8922fbbda1cf2dfa2d521f7a36f94a0cb1516e380a1fe23fb4000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084bf107155f9195f8371ccbd02e3b0a536d080134c23b4f1d9fd1d38e6bf7b9db223a07d88767ee8b7acaf878f3aa9177831a5b846bd19181b24dcb1f4e0816f401c48009c092457dee446506cfc6426fa160dca9e0ecb9511d3833b37448c647fe5c0af892dda702041cc8d4e64081acd79fa7d11571dddc129b7f85a3ce27e9d63b787f9b7ee182da106375f3284645476f99a394e71f069aa73fd2f8757a5e68030d1dc4f9ff9c5546ef4fb8cd163bc826273758e859840204a5ca62d69ec617cc9ff2757aebe768d5ffa8ecf114164ae16664dc8b460d1bab6c5ee5651cb503c9e5aeaf5699e220e4cc18fed68ad997b26c58893a6dadb7a906f896db8b611be2d33c616cdc2082b5646680914a17faea65f85b9d2e5a10eeb956f999e9ca68f9971bf8c9cb730692ceb208b5fc74b466f636bab85cbd1ab20d71e70a08bbe522d44992bc65bac1d4743bd5bc0c6d60d8d7c8e907e368122e01432d78fa7f24a6db7e22c750180ad16027ae65517bdf5cbaf01881c2baa09bd8c1286fe2a6d250d1ca59889f91da7a1733d3472017fd8e06c1e168949158720ae0e9cfa4936146dce1808631ab62a516e04753a3bc3a2bdf1bc20812b2fdebd2eeec2f9110000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000103a474d3053585a8e65fc57382961bd6825de4d0e2dd76bb994b84505ec187a55eba0f9edcc9d744011b6c74adac898d32edf53923d6a27c894afb9693869990a7d6890b3592f107f14b8f1a7512457adec9471130184e16138d9ce3bd912d8b650ddebcfca2a27c548a8194918038ef5809ac19d7d4eefd879cc71d57c359d068c8c968cc31035a6dab7005ab7da1087e245a8e0fc96fcdb62309c775ba48d62d5d6af379f8d03e8038555655675892dab0af9014033dd886c420cec5e6f3b438e98b8a627345a26807afc892468a0157f712b5a79a5b469027e9a9a27d3a14da0cf9fc9026ca8efbe6d38a2d8ca5dfd46e7d9359f4e599ddb88a67de597899821d67337655f82c7b260db21d53ca8f0e9f36c6ff28bf6294d23c5243f80b851574586d4ec4df46e45fa2ec375aac70f04744091127517b6c053e7a06903937994af8202b8f3059a66292f5ab6fccddab88779fbd4d318982641a0fc912df71a7206438082342f8f09cbd62afc042ee413b31817cd4fb08834ccf6f16edd6ab06f3b4138404319ae9ae16dd579343df4d0f47d7a1a40ba3e819d28e74ab46203c0a05661253ba88d06afbbc679ee65ca8f8d4b9ec3d8a60fbee7f87f19781600000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5540511ed6c5f17cc0c47cd611fd69dffd400d1c5a0779184103f77087627cda44bb10138846fe153ae18d827baa64cef66a08113a18b7315bfef20c7435367b1aa9403c5322b2f95725fa8e35a978a4318293dfee3ffcb3c27bd693698b1c5a29f3e75945274ea53ac60d2cde97e5509f6e9f092e75a74d1585ab692d7b18f6384e0185c174dc35308287f3c224eb387bf29b54a49be9eb4d84c39a698be67f79687d2d954a78144b6729fe5d31ea2df3dd741de6d36bcf22faf02de6ae196a94b8e0d2c6b25772460a51ea02da346968d6a37df8904ee27f0635b257317fbd1aefc388156f5b8142cb90b6e206c9148b50d32e710d91f3d7ed20861090c01ddb7cb13d238bfb9b55c1e464e0fa6d44a23280ecee88b03c1f8e9b4692c5f33af3db24ebdb8365de10badc6723d0094c960d5d73c095debf78b5cc03a16bb48ec6111dd2d44bef41abe91e884b891dd7e6bccb6c6d25662eaa8cf2653fbee729fb4faa567cf8f6933c0c3e61b59f10423b2973fd30e900d15ea30ab3ed4c4d191aab696f4aecd880d650b18ea81d0117c72ffa81ec96cc8a626d67b79895d28399ca2a28de72b1e4e5ce1611a6e775e39faef4aa224ccdb8f7b3152a68a86400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bc4c499e47946f3d28ad6c904da56f679766ca77021522017281068d0f634d8785c2511b0cf76f2130617e5ed58a0211a6733e217d02c20e9a6f03eae95c626800beb21901d7585e467acd0b6a2950f9ac9dc241be3ea0ba2f343307d432c91aeddccf2c2e5e5769ecc0b12344c6cf8afa3bd76c287828e830abb721676b551ca2edc6d03c1f1da7bcdaf10abb4a89e57e8527efac091b894ba1d0a4a2326bf29a752692dc26582709db0dc621f235733fba0de29c7b08007243aa0a25720c72712e44002cdf4df0d16626e8d3ea1e2dab99ec33ca233402d97ead544e45bd04219a3162b815c90ac6489b09bb3faf4cb4c1c1487c3daf0f1786b2fe897aeae4cc5ea4a0a41f334bce50b5f6ec36bd770f4880755c0b807431f15e48d10421f1e71857761d811e4012ccce6b5ddbc67e6f879f82263fc8e4ca3cf5b4f65488f2388a5aabd5b88272b1b1492983e5a9a67849336f7edea3fb058565e4e950b1c6e350b0fb06fd352d01ff948019183f3bcbc5d0a2d176ede01dcfd41f57f315f30ccc60cf45c8a655b9df43abed4991748a433a5cc494a39b3c27df639fa6832dc60ffc6ce7e79316a751c9d2f417b09236faaacc49045a97444880c0e9b3c320000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3d0ab8116a5fd2e81b789a0da0fb4e0346068e9375df8922e1387e307f984b027bd296a6a43bc13e099ce3a84103a8362c71af24ca9743f63db8236b6ede1cf7d128a4bee15755f48a755f5a1265e42d42a45eb3eb05c8d2ce9ed5df9115ba49403f7a66049326b80e071e7354c9c634bac94a29db79e4c36b9f3f24e261828c38daa52d013899e562e62c310d78b74975483bb120fb6402e093ddf8f0b8d13bbd21bb3298be6a262cd93fb6253ea5e1bd962618c9f55dc909b7a0b0698eee9f1cf7cc8fabb63517723bc325a7ba2d2b6a4d072cf00b5cb202f2f360772feaaae38e06040c7dbc48f6948b72da9dcf1b9cf9870399a9be8612ddcc31f6d1fcb367b88035d5edac39deadff5c004d02365db73809271c91ec69f718237fa39c79a8ac4ca728a33e5513dfa250aa7f7eaab3eeb281c770f7e14b881f3514dcce91d934fec49c9e444a75113acfa42c0e0221af023ace3516d885f438d5fb2b3140393b214854397803f9d4774823cb00d7181acea99a84422e29939ed67667cfec80c72b5e562bf84a1f733a9d1dcdbdccb2285789ce74fb3def8b1df2d844ff7bd3a0a9ed967f636fe1f4a8b41e57a9f19567164fbe1506778ec8400fffd729500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001863fc6d864ad9e7c8ab49fcd022739a8e6edb4ab718f0367969f5d4775aab37c6dfb2514529ae6b04b31053741837d62fb8ced3a5881b7b726c7faf4cdcbebc5f7d9081f9f42cd208ba2609ae126bab7df8edefac242ef2bcafaa278da0031174fc4d1983f41dfd7d08a0ca9b0825ca66a6f4d2c451c50f3765fa4c749c1d834630ee84c59e02af8f0b10ecf06697ed7a6912ea152de193d90d0a36211099da04c07d21b672fb0747de826a0f8d100fa5881c918e2325038a9acd1cc67647c4b0d7102f4c9c08a998cee26fff2db71d633a024b0e74bfdecbcd73e37313df13060396b657ce2a3593a7fcbade2371fab9a7ffbd8d8583e6735d48778c14d1c02ee80023858c7fe2e1ecf9ca91cbb8be453318bfa17fbab180ab8a80929dccab9819b5f5ae7ec8b3891efc6e3a02c70792b812ac091013cde01e9cc7d163fc347d978906e47f3f94247e8b672940b835258e1cc03f487dc6431a0fe9c51f4922877eb5c0fca900d7632258f052b47a82367f3a9f6117712165f08fe893697351d22853e5da82c0fc9ce0878001c5ef7dc40ed5c69b70e6592e839d61537c4c1fb05e9b2061b72368814ee9bc83517929fde023b566ae7519a39fbf4ffd7463b5000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016b2f148fa2f29906c70c532ce4b76259ba41fe5c4c33488cc645177ef98c3d7e07323c36d787795d6fd6dc581b19f8a96f5b524bbd75fa0fb1cf0311e4d7d040d67974b425437707b3c496f723985e8bcf66a7f22b6e12d891082c419f17a24b83c13607bad04d4a8db1589aa7f27eefc974de83720713d5c03859ea949742a362ce76bcad0dc89cb2de57bdc96c0c520ef503ab14a7f3ddbf552228bcd3e434777759a11986bb79b73bd71c150e11e3138cad78fc6e5a9a5ea49ddb712b9383c6da4a6ada9e2fb38a2ebedc89657d6f8d2e0176618fdfcbd597e81b26e387dc132f2bbd9c90e5da499e2577b49bc9526b3115e26851d4fd48c525a75ce747a085a841d032d44b8460cf42393656b4226a3be3ac0b4b36b9386648ac524f7fc6a83c14ae39eb20da7480d5048cc63d8b0ac7be9f77c110a7f0ff8a9d3819cfa5b49d16adbc601ddee176792572903745fa46ef60e09e04d33bba7944a8fb1119e8868dae9430790529d38dda23933be63750112091509b2f4c49eb6b31ed74a91c8313519f6a78679a6f2abd03222665ea04ba51304a6ffe10f9fd9fc93129eb3031ec9e7332dabd89b74bc0cb88124402591d2c3f38a409a21ae494144897700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002333b9574c505181fd3252d2d4462bdc8e038227ff24c4ff6cc5dee72be43e4b1c910c2a99c464dfec43c9433050153720271b9d31ad375f5708b07a070a82ebca3e4a7f0d98f7faba70b1cc975b8035f4455a458fb119128c6985e17fee8e4e8e9e53d137eed67829e03e8691060df564d14ee617c3302ab56ab7a94643f0563ef461bce16611ced4bff86d0e770755db985b264860046b38f6681da45ac9efe087c0ef0ac38978722d07636c449888d329dea9e6134685a3a23945009c5a1c88b97423dbd91f79cfae3f1102aa7906c0a77e165bef9a84745efe3c9505c463c9d6e1bd1122b3cdf7f7b39f48dfad08dc89347b383306798f5de0e3bfd767c997ee3c694ca1858dd63463a395a988e481de3387edc233b6540057fe38c14bd58c6160656cf3e6409f9c9913072589ba8779b08ce50106f8968a14d86855c0342e5952146665e2ebc27b586ae94e074763d2e28840948b1be84fd27559c853cf642a0f373a332afc699537131f36e7d65b66484f015cb5905780790fab198f5e49d8a14d8ad487209df85cc97a292891317c8116698abba31bb34b195f4923fa5fec575eaf82d6f4b1832a994888e64cb570e42d28e5baec0214678039ee31e9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027198532f4ee5b68f23c2de021f4920232e4801aff82d753207a9fd62a0d4db69d428d3a5c70bec186ccf1feadba18d252deffc0f4fd00f4d0828fa429cdd3703c1280daf53a5920f001be64f364f7cf47873ce152417c06169bef033ee9f1d1a2227dd524d127d2c4ecbd9161fc4eed93a520618739788736ccf9699c86f2adfdae849bbbf246a01267e1006d7ed703ad76bfd9719273c80d89b9d9110f5eabc9c56246cbf042cb5c0914f9b52b34d2cb9b4e1ee2cccc7403c83faee2112b11e6c96c8ecbe79f9016cb8f07c6bfc0451236a9b21ec6fceef6479d71410eea45a984c3fd708639a54aadba61a06f4370ff093e4a922381360cc7f91e3a74a6870c4d743526e2a5aaeaf8c0bcc525b6f14a7d500cb625e0d38807db15dbaa1efc82b3f16214adc373ac6cc50f2b2c6b875fbf00f41310e816175603b5c4fb5aa06ade918468e4c46531b274d4299b6507eae7f0998b0a084f4d6779e4390bb5a2445068d99d4a66c8bbffe6dbb9c8bee054005c2bd5e2aa57e3e35f4d5657e0b24b202bfe21ff5d62fead4d37e1b8d7c7a8fcdfff2fab3971cd86dbef705068d15f202e4eb113d01648b3bf335a2cb1f63f1260b90e9d700409c5e3590c90891800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ecc64c9dd183795aa5f80970f83f4961aadf6111f28ce6397e6d4c57caed4e76eb7c21f8c12faba5ad54b5c3e71da2da5a2b647c26f4b6f4d632ab95d7252106bc6897d1ae5951f49ba04071a8b93682b4a362f34dfdafe8d4f40e28f3793934024dc16b864e85f43044a1da5f344040c7c9e5d31d53825827162ed86e0cd0600ec961d0edac10ed42e0e5054a3529af317b1354650edefc443f51815e12db9b1e7ac79d983ff65819fba6c0219626cc35f0295ca59d61dd3de42b0aee13809c3c884a2df0dbc6402996a2529fe4534d1e42f44dc3c98f2a8001039ab65f6f11d5c1dfb44343470755c2b51783134bd21b8e1eb3a1b8abe6c22d9da8c1b1edff139da5460001b3e1bb3c273d4b72c0065a95fdb63b8e8a541875744175f44380759cd358e71c76b89cf51d012f9d8676b3dd99b15228db07063df1d34b84225d2eb309f3fd93fd939832fb0a2ce04724495c5576846e0544a1937e6b9757ab3b78f8995bd838b53c1f4a2afe00b97dcd05f782525f031f6ccd0fb5dc4318fd4431165246a1ed0ec9083a561aa9c0573a0bc986921fcd48a8d06a49df466a739c5bcd9dc24ecc4662e75574c40c81c6f87f2b42a2e7e2be204b2d76f7e7aa27f0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a35eaa14ef02209f8d300e8576c346a36091e0e35b3be4374637d1d0db7a8f4a5c0bd34697890423e00917cb4fa279e0d5cc55340292a2079f91faeb9a80c44c900372e78f85236aca506347e53000451eb3516c237ff222cefbff021f59e18101076d092dcaf30b375b6e5f72447b86b5fb0bc63bd1238114703e8874783c81d54c66a578ba4872591254aba9e2c36d64c260a186c1be80c62e22a2827d42e66cabf85b431e5e11a885c6764bac33e187efae8108be2b9e063f6ecb170cd604c4c63db343093bf0048a7cbd5d9a122f5754279eefabd616cdbde39011dee671d15c45bbc6e27bc70694322fd1e50fa3cb01e2c36686fb6afd9608579ea3a6988d65aaea015e44c02c438a24fd82ce74031ac287d4d095c7f14ca68041d038bae7f95ea96a32d8d7a963fa9077a0456cfa6954257bd96855b0816d8046c8bbad375059471997c8709ccb495e5e0b97568747ad6e0f567a5039753e8d8c8462367b02958249f2ed1e612871d08169012b04b102db951c9b39517352b4635522bdad26ef230ffe8162b97a91322444c49695b873dfa8b0c24c608b3622bc75da95e5b20102d159d9a3256b0e44a3c24a8e37769c041f6107f2a4149d660bf2be4000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dd493113fcaee36ff9c91fa79ba915f8255ea2df58a5000e2c28f8fe1edd09c0ac16a80642b725b799296138377f5e953d0a2b2f72535b7967935099f881d1d7ec2d7df7e5dd9c2faa1a163d219340809063780d5ec3dbe55a1be75890aa4cf61d8dfbb8dd559a3969b332dc69d08c5df56685a7c16de7953cabdb228554f89ec2d9f9dd719eb90173a97e17e7a486dc6428826112c16a1c7062e9a751497e6d31a81174aa0185fe3de9d70c6746cc98f3cfae174a2db9456b7f0b61a3b8a9e562a1e9c59a20a2131c4af55ccf4599f33ffbcf3a976e4b57f101f24dba52c75a8b9e4041db6ef208a9a09c82b9d7c1531c83eb9766080a7692a6362907375b83b11e80fae8616e8756c37d0f05009f8de735738de695a167b65bb6be46173b9cef34465d7b4c5d59b1b53d6f5aac82c85bfeeb0ac35910ee69b013527360910593cdfeb8def6103911c8bac03da95c6aeab9a8c21fb2b63bce48e25957727576efb54c01e631ff1038c1c01744a0ba6d16b9a75945aeb8b5f80e231d58c3642c1a7ea306c8ad39ab150de3400aa961d8b8c97bd3d34360cf7dee2d6a899ca7ad736904d364b8ce190c8509553b4a81646841187b27767e90610d90e620f3f400000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a28cf703a7b8b318a07fa084acdf9731c4f3c6a0c31f7c55f67191fabd99d8056abe5001b785495f446689570b1551e938c4091207a9f3372cea0222275214cde69f1f5a917b63bfc2cea28e82c1e2d4f58136e4d7c09c3c3a9844024fb5494f559fbad278ee658217fff4098f802347f22db7f90bd963d373a15da3ad31cde2354b44d8f52e3cdcf44d687e1662c6970a1cb1003bf4109d4708f77c45f699439f2bdd794c06791d1c211c41db77b64940e5eaa8ec4fab6df371791084da4c5996cd3ca75200b181ef271e8cacec212724bf2578ae4e1e2323dd39d492a8ad74593fdf42b3bd05c0dba8eee85052f490625832aeef5f468adf6a86aaefa809d31e50c3397ff0aaab208ab9bd344a591bfddc92b069022b672a99b02799baee40e3902fc76c873d04cad0f109ca088cb752ba20e0046b7859b47b1d0386315cf5c82cba60b2766c5fe3f99633c077e313ad9b8042338496859642b2acb1e682c4531fc89ce2d2ab9f7211525c89ce3a69a038f9a513a4f236d8ca54ad72e2dc75ddd01e497c724363e11280bc2aee47a64b02316aec76d88ae3f4fe65db5fe42cd8798a94b10e7a35410f1ed7ef74a0f7f65c48832eed04f62161beab6a052c310000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a084d68af4fd11a34a21df32fb5b6a9ac42352b6947ed3cf0ffdd1c353799f441f2f00fef9c25dbf90c905f0f2ed33936ee6388be44b846b17569c239d5ee7b6742b78d8530ff09aae8b0d19335dd0dd638f522fe90abe299351691f37339724344ecfd00b3510327a69a9a12384b5a24a8ec72870adcd76b98eab8e938a0159a27f6038975cfacdc692321f5426779ab771b9f6b2ac503e2c2c0fa2e45eb141328918f2082b44942e227609de96d17d915dd106d123614c4cfa990c2cfa60613801ba03ec49edd3e1186115b8b1a79627211fbc6c77a5e0c2c6d0b8871d7cd504000c0fb96d9bde6d0bbd4cafb0c38de52f7db7da8d24299375194b7f6da681e200cbae166c0247f7387d59182cc6dcd945f5d426680a9991efb39e597be437f16db08f16d99202e6a4ad3326f048e0e46cfc461e85162c66cb1ca610f4da04fb97700773157fe18d5fcf0902f4e1d02149cf3bff3f99ba50906651bf6d1be17c50afca2b66cb5fb01efa59b8cb8e8a3832ed53b3357e063ca71747b87ef8c953345cde18219a6818dce8ac4ce4b9452cc1dcf38123928b3523e0efe31b580338e9bdeb82a0b848df42417a2a7d1c5eaed16a9f4e3505f8bfc74afbf3b11985000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021447bbb7866e971a886f9c952fabfced8eb7662aa56b4d994c4d8e24b144eb850a1da75d6bf613502a015db8f88d6fba26d5de9bcdc7c9a397ce3923c41e507d52c4554415ed225e6e2f605fe553c1bcaefc51620a82267e51a21a77fc8bb6d8805a217ab305cf3785037924da7c666ea8788fc5265c22cc3fcb7163c436ede4506be4a6340b1a117347f1b95140c0b353fbd7032b85e1fb60bf622685541fd5617b545e26c9823496258cc2c90ca92003d0f12cc72bcce539251c3e0a47f43a8881d9abf1b1e39c13328ee5e0af8038ef303d8e8fad73b1e46e23bab420fe42d03f03bfd3908fc9f4c65a528903c1d159df5df8938c24ac9f4943f7c16bd5b18e6b2bc46ba18ad9a5914e189554bb71acb250d1b7531f89613ae06e1b5f578604eaaa78c9d38591e83b3bbe12c371a4aab1a5d4e32539b0d1e44714fc30a5c5c8a7c07a50823cb78b3f65354ed8e4f66079171dcffa23de95e32b7d4221cc5e17a9da18d9d4a4647cb5783e085c2589b36ae299d48e2b1d2d6e276bf9fc1c0319be2334ecbb192439b4176f24ddb4c64a71182c2a5a484f509cc5abaddba5e4a0657e1e3bf028dd4c7a040f820868562c5e8bb7f1ac3d746230d21382cfbdf00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001341f9c921ef8f62291d392420a1a3f1f12d52dd145d90bf36acc8174a3e3a6cec1e2c519dd54ef048a4f3f59e86711fef033b69d7e57f11e99a3cfbfba279a9cd63286da599959f477278bb9b442df50574f66ac9691e296eee9aa36ccf1f9227c4634f7b7832582be113e38f061ab0d25795d33ce17187fbe3b1331572b060fa505eee95f87a24b646502a6cc28cf66866cd0436498d82b25c181b2198a873f6f9a848144fec016e5d8d6ba049b508952ccb361ccf58beb0872e3cf571bc7391cc885f67eebcf6893cca426026f52fc98286d0cef510248ae31df445d4b05cfd5a72bd7c7fc517b8e6b1bda3efd94a51c929052741eeb27a2fa8a249eb4ee2add4b192c007d5686c7e6c5c2304bb05ff317cc20a460812fc50f94a1cd48fc6dd76d0836c19382e2c068e087cd08d7f2fde4f38af89af6c2b038bb34c7d32e5c653e372180b5b7d3041894e031590536529df298beae652094cbbbfea6f16b9a07728f7c7cf142e7dd66b733165c6ecef1b6eae00cb11d9b167ca631368ce51048f3e1a3c6ea4d9da81087432322a5ad1131462faed13d047c2dbcd927748a0e3e99f4ecdfcb892f29a119c82d74811ad8596f2e81220e5ea94737830659fde000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008704001bc7ded2cc77f0f240918b6ef70948a25a214c15a52698a00b59379f28e43365c632b40374df8a23ad51f6ccc59d644498834abe8dda2733da2d1b7be539e9b8dfbf4fac137303bdaf69169ec19d869c2ce1967145da1fe99e8f4f5a3c7e5721258aa0d08aa70817588715656329045f0bfb1816019adb28a36467f1a0a270a59e3e9ef28cedab64c6b60e9b9afb6d9c6333fea2e61cc84819f756a133c0102aa6c84e7d8bfde316fa1f366a83c5e01dd5c06261f0f5826228e0551d21d39e60a02cc3d51321967e86dd4e98479cf690e32a2fb7ea3bf7da5e9ecb45b474d521c8efa412ae90dbfadfbcfe414eb730cdddd7a8ac1db7cb94d1108f046166f0efb7592c43bdcd5267aaa05654c7161bf6150b572839e72948d0bcc63f67797057573f00c3420fada6a09de33e740898e499ccfa0f4a794905b15f6706c95aa43032a5bbc9e4040f801d6e27e86e7e9dba8a0b558f28b1211a016efc34ce852143cbd5ad1f3b2162c607094132f26aba405e2421906d828c3ea858f9fc19fb46c19b17e9ff125563d4f1f142f4bdd69e46e084120ee0989b67ac70db05358f093e65025122aa56cd09207b83d1391e91e3e9c13e4600b122550e95da5a100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bf93873833af58b778277e6a56a49e825d3ebc9ba0b23b79674ea407f8e87286c1937ac39f42774fb4f91d127c16e141f425709e470032ccb3d89a40813392320fdbb06f34563f4a45a1d639b9e8e8625ac1db3cbf4fe448d701c9f654f8acc4798b98bd5ea22f51a1f78bc936ebc036aa8f52fe20f47602b48d17a0e97a704aeda8b89190f540a15fbd3fa82e3873232788b2eda8c25c0745e1443911c1f29a754df11a4ee5c84b46e2a7faaac7194386359618c0975755b52ef444dd8a388f1ba77da036f2f055c8c51d006ecaaa5389bb90b56729a23792d903dac17e8bcc8d1f8cf27f449c4e9d46b2be5a2b4c22942bcc4bc6b536a1463022488dab118f08c2f93081c876d9fb90b10f821d178943641ae7d514141c3a04443d22e6eb5a283c9fe2ceaadea982e6b929525d22ece5c5e6c51b14b8bd0f6d0cdc60518845f926aed6fd0374ca8704fc887f06be64b5238b484cf8e2aca1e28c9b51e8f0f82bc2e50ec1709f01e7bdde0105dd6fdb45c31f5e8e485b195bbe671c77784a01576deaebbb4a043ded95fa1f3fd4ca5e135c80eb45922b4fbf347a93ce0bee0fde712ef17e141058cbeca0d6d27f0542af42e6bd08877c3b23019e44c9b7790000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012ad835cddc6cc2c25a408b45597b63e8c0be0f9da3b1eff2ccdec9a955a60106d98201d16dc9fe669c579a54eaa94a56152df29d37cdc81cfc41bade98d5c1bfa70861ac19eca70242876ba3c8c4b3b3509674d72f5ce8b2604400cdfc541003d37c1ee5b584a0a49394ffe684e9eab936f84beaf240994ee2524be6ca09880ce271f2a3ea046e890b2929d8d464f9f28c74ec019e1e15acb5fb23e1c3457f5d5c43737903589badd7b8cb389c4ed55a39ebed6493c53e918062933f467d3beb7be96a1562a71c8407a81e998b644d91aa3e48c75d1e3ce05df833ebbfb8f8325661929ffeba1df1f3cd035fd99e1f1f189b25b0b85bf51c09f3fd52096b763dfd708b2ddcab5bd3b021c1f843292a1eb110e4e6d592116166d37b98c43de0e3d5db4076423db9ba9441dbefda051f3ae848b965e9687dbee711403b26161a4cbc150c6284da232d771b469578089a6d74309fb6f1a90b90f6e0b6e9596cf2afd6f7b731679a7fde143d04a78b87758fbd2d322315acca72216769cc853de659b8d54085994da2146a6afa7047dafd83f3956c283a78a196da0f68e5309f86782618f2423a8e2e2e7d96d42b019adebb444b9180bc24f6c8ec745bd6cb2f144000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017b0553d0ff486d2558e2e717f58b48b773765eef57bdd736c88917cc411344f294782d4ab43144ed5f398b56220ca323751679ff90363bf6ad99dfef01e3826931ba779cc92a0459336fa97d24392c30d17edbeee589ac49de79859ba8e30eb272be7f0adb3a7ead66d6d24afa46c4f5794a97ac92e51f8715a3b7e18067c00502aa59a89555d3b2b1fa628d0c46e3f747054f43b651aa9d70dc687d2fcbb4f284f213aa6fee41398e47f6b9dff8dcc62f6ee370dc570fdfd74eea3e3697382bc084277d8b1275b276021a25bf87f634c7a4a39291eca7dadd5bd2c483e940f47bec9a8bbec9ee9cb5119c0c23409b274cd30769cc5ff11f173c9794317dada6011cd254e11b99ee20b5da804bdff78f4fa8e6a2984f0587598d036b143bb241297615866028d7b65760529b3602a5ad2b71991f57b7186a469d69de0929280575e00a7999046c0df68ea5f9b63a721a9788c34658a12fccbffb68dbd06db35ba623ec118acfb79a8d3521b0690505d570ed6acc9ed520d016acc1b35e453181346213d91dca4a7db0bbea331cb006f374daa0afa5e68f69244496248507f66fdd78e54318915ca773e51e3a273df0ad2fb4fbf0c07b934f787ef47e22eb7f60000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000188db2b56780e0235dbc14e27da5356a6f81c27cd893e7a1240338eb4b1a2f38f40dea4e726453e06235f28e29637a81eaa5834ca1dcef86f4de14a40948ded8c06d49714a2e88b42caa6547ca6df45c02c23571013a1bf1244e70e6a8eed7d86de32673cffea2ec4beea9f4ebbac2b5caa1c3e1c380df3ee6eb39da5eddfbf687fb93213cc0a852eea3a6330785143d9967d7c390c5fc16e4a074c013c08d2b0125e1e89b26ddb0cef4d1280c677beac1398e8654069334726fbd8cd159e621138a8519f9cc7cf25d96ce2745fc136fd803885b64e77b1224ae500b39d45b85d642a5aea38c2714a90039bb5c815ac38985749d0210c65b3389c74e8683ea644a52fe849d0240706b9bd7298b4f01633d354f4bf70fdb2ce70b519185490e3ff706ff6018a8a8d9d76f2f8c67da386f6b9e313b49e7e952a14a6a3aa66772127a552b278b1613b61f2d25c9166788a70b98afa18d2619680aa7b6b2c7d69842fce738b4f95eab1ac70f26c829104c5f5410437327c1cec5bb65c42a296674a72bab5226b7d91751247ddcb504267e9b9c0b36cf80009cf29b7d2101d38a5e2411d17519ea141f56ac8f676a19b709a28e3dcc8b9e486415c26f7a7c0ca7d3ab0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000805b1ec409810b90461b99869979f540593763358edc2f4000ce17b054c6eb93112f34a5f3e09a86a5905a522c23c15cfcdc673ad0467a4519280c210c47ff4a5fa8ef40155ba3eda1b8bdf6a8f29dc99c9e804df5d0d7feb7c49afa0a864cca46751ebc274a092809f015009a114e8c05beaa3637f353877d183d390940ddb712fd9428531a582b8ef9148bc9418c46611d739d703c03d0f6531f9059f4646fa96691910b5c02b33bbc10e7ab6b566cd23a474a23483b1b4386dbeb675609e897b1d683c23b055d30c0cd6b899c47bffcc81e95aef444cba9e57bb11cf5d8aedb90bb9ce5e0531909691923770afc4a599bc3f13f149e167f792e2e71d0dc90ab4df4a33923641c5bb164ee0e5f99b4bd85e126bc45e3284410a40d22316c9a58eaece0e7c2538dea12796b70600a9ea6e2e74b52ea0827cbf1a0f3a8d3c3ef07fa6df3493c2ed62e634054b25b0941bb656a975a38cab760e5be2f7c9f5119bc387103c78b05a7ffe1a9d53146f4c7e49c2f022b40ef53e00403cd20dd5eac6a7565bdded582197503e606dc9604181f72379a3b4a195dfdcaa4bb521da220643c89ed7177a2982b4e11c4cda33cfef8d54cd13b35269ade50f7529bc1ee7d00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001192e0520fdead1509b734c1666545e744b5f1cd82ae03f915f2387d6728a1accfb10ad622180aa5db8c68e1e9ef89e0be486a9928c516a1403c5cdfff66fbed3fa8b8d823de40f913cf2213c372ca92c202c44fc06e548b3f771b608e03bb6c1ff1d4cf3ee3c64ce2ffdf303d8f5046ab2a40afb1764ffce5f7d8d018c7d7902c4604a717529053ca368d48a1592970bd14278ab1e37483c57b64113e7b444dc2f32a13f501be2ca016d24064e4e9feefa8665e71d72983c9766ce0ba38087a468edf40237cff47d3d18a7538464385d19a5a536eee2aa388174238a2da950df0c3558b741a8902435f70bd486f922e65df96f7abf4b944c9f765cc647ed8a09e507e5e554ac759f7d1814dbf2526c5bf37458892adf6788f6b5f8dfb8f3ead5c37d34032df6943e7af7e875fa04f09474bb396e6ff6b557f7964547edc18fe8ba0ed22eeb5a99a28fb44b8da62bc06f0a16e261e9b8ea7c2e948343647682e09c45fca80c2e693b5bb80b69629aac967b72f66c7762475b7bbf1502e2e8797597bb4d76b624f53b233dba2f4a965fd2f138dc1588c6051581ac219deb1b66575f9de4ca30ff0b2aade50ed9e8c3cb1bb87e4f6316e2620374414c65a537bff00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c98a2a915d1b3b11aba058743c137948f76fffe75c30f89f37c3a7da183bcd78fb84c35a5991fa2d8ac340b6b52dc487fc43ab7555031a55a5fd6d4cf7c86779780a23a6524b2095a8c1570ae904bd31643d87cf9fd65fa54441331055ba53ac00edf364f16f899f59556322d29468258bb9148c687d6d7bbf495fb2a7f189f5c892f44779431b2dd0680f4aaf4ca0b41c50a659780c4d97d0a681f536031d65f50aac8889b8c2ede722b9f7482aa005f01fb3f886b30b04bcd50852dd82a4705571fe981c18d8f66bdd6b1d59e3635eb549f132ab4882c8935ef67b5668769d634b3f8fe967dc09ef4f23281c243dc6ce342b8623d05e9912d0e6da3ae57b04afee3f91a93f499df81ff9c3d58ca45956bb6c5bad50e2d7f5cea6e532a7ee9c485db625bae4074889b956b0d71f180d2910c8c5056f24a61d81d109095e7401e800a87d957559c183412df781176378e0f86a6870c44d250bd78acfd521d8b4cc6c6d8062172edbb9142ecaabfef08e3ab61fa7e1822323e02fc188d0f7d04fa33975c6cdccf0200825b507bd04046df97e89b73ccd1f27daf8fbf22af29edb6c085c298ddd451aa537d6b8e56ecd38f1a67cdfc1b3814f0376b7b74f272c300000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f9924252945defd7cfa3f74febaae3d26b8d9069d175d9cefe530c047be3d4143caf388b25d2c1507cd41b1d9d48aede50d81c4073df1fa173175fc1555bb8a9b134566ce7afaf04f7b153235d160992bafb79d244e9c9818c915133537b03317bff6faa29b2ec7597cde6e2aa15af4740424912939ba7fd90e69694dce6ecf3c3bdd0f77c47dc307c7d348f411a3f3c86ac1fce3e1e868f21776cbc90f637295683f8d2511922fffe11cf4d60b4dc8991d9452204c1aa801aa3ea3b73fe2362d5561390b7025b0cca5a37991de648ef15af9fa056cccdee55f63ae6ac8a9adcf11c46cca22828378988c4a2b60ca0c235e19616f67caf994c1f19daab9b7928371daf754f52bd0df33f8906408358eff656f96ce9d0c6967c7de93eeafb7847f046f2ba7de9a6c33abf25e953da12f51d1a829d480ddb4a5159ca86d8fcca8182b68e5c09cb92340ce170282e6d39b1e15db641bcc6f9d89556f8e4ad8d0e755e8a2dda8f85ef1dee33b3a66284f5e2f3fe1813db5a7b0b4ba8e86dcde92ca46c68ef31daabadb8036bf8389926725afabc05bce76ec3cc05be44db9a45a93b1655561f56939a65463d7eab7d078a7f49be26d23823b55c244d911b744099500000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f840990cf446a043a6fd62d20aff4d9302f59b320e338d7b5b29f169e63c43b4698334ce3768f619c1b177843824f53e519d2d7f574a7a6025d905f5f89c7d26c1f60e9fcb4284421cc62016f6ce76600056ec9443fa467c8dfe5d66e7f60d6a9f83ee811f3b0519ed2e6e746a8a06cb6491d94ef52bf51ece68c1793b6463f0a15416444e1cf3957354be9eab4caa11f605d532e0f9320547aecfbe1b6b7bbb31fe240154f2b8512026d0a0c4f672e3d245a85210be9a13394234b892166375beee17ac43f14e83a4dbec4cb74fd9602d6abe362b77410b24a23c032dcfc8f2cb36efcac05bae0be91eb7e20ffb3a40c7a9cac6218da03eec164cd670304f8e15550d02e5b8731a7e3f88a8662262bd97d1e46e87720ca47d86b608e8f3f4ec3168da065a50f70213d68b9433906df15033da0805cca9e1ea3ac873f35acee49440a2f404b667b4b212a093efc1fb1d526fdf341f1dc3107210217c7c8ceb7039d679590e0ee105b6d03a2e60d4adde4c813e2a00eedf0a855949ef55c958adcfb063f20f4b9ae318659da05d3f7efdb22899f860662e1b4843fc8385fb2b7c25eb7e2bdc7c94a9a50ead1af721074f3077d6afafdeb3c23e25c48622c83f700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002372cc29886dc9926770c22349c1143abaa003d5d630a1799c05d1f9e1ec97fc45aa2b9838d1d8256ae694ae889dfd96b3eb7fed9704736e79a9d586cf4ca44ea029f494ed94ce2feb679e7dfa9f1dd1581819803b1bf55bc5019d3886991fc37c3d36b900ff1aa5ed687579578001fd5dba65163d5ac24298972f0c1623486b941fe22e249e5ccba0495cfd490e4d5dabe4bf953ff629433ea6999ec56dfdd3981e34f6e15f378b6714c64f3d11437c79dd1d63c6ee35670ec20486e4a4221f67bda13b04cc84f846b00ba27646fb828a0acacc8cde2db30d98682fc736d3ac3cf1786d80612069dd68f359bee07a813da226cf4f397fbaf8f8311291931e838f64ac1bbd85eda9ad2b1a51ae111321429e23828cc3b795a1021632efaa6c0ab1802c4e7f1443ca4dd5a486f645dbc916733285a1c2e666ca469489cc7a94ff3d635691764df17aef378ea74838b9a54a142672d90d65a02cccfdf25be0f48bfd4bc9a34af91ba7d580e018ed7cf36a67ec1b41cb1ae5b2ee8d3373270e0cd59bfd1984932b1134270b24340d9f79a282846bd3500841547604d12cfc5ff068f93bbae46954b0effe0650b90ab3d33d0df7ff313cf43a7c929994cccbd68902000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080a68bb2f3d69f3fbb88f564d5c624f9f1c0d6a7a139d194b177a1aa3f3895602ccdecced18f10e2c167bdda49114302425e563cadcc3a5133ae62cdbfd8a32d3e9ecf50dd7448bd6cc9a50e74475e79ce3763d4f9d1d235b960976ab6dcfcae446c8e577d2271f6ec576608c996efa41d20a64e59794927b12411fb30caf0ca202fd45fea45476eb451f434458456d011d7d0fcfdab859a3571a166f4ff53652abf6018e1ad53b326abebdefd0a7572c2b576a9dbc164c8a0df89bc2eb65d0a934a41d0d54d6e38a3e6e2995cad82ad92faad022f417ddcdabfed15ea8f6ebf32491bd77897d8147317a4fcf684abb7001c064234261a43028d9a240f23f9b8707c260a0889296a714c51cd988664785846f11de919610bb1eb0b3155efe049af54333bf25894f7a0319ac4cb6014aa5f3211a6712979d7acfc530a57a9f3f9881688c5d27c4c08165e5b888316db87dbf206802a38f0f78327f51f9dae5a26b45780dfc3c7ac96d5bba6ec4e17667eb0fec1450af236eb06edc89e9b74e7c35a6890ca9eaaf7af6521baad565be471a47621c34e7b21e0887b03ed055caa9ed02cf9c66e74521ffdb66df0903e0c7eccb00a751fe4d970d3ec110aa4659e680000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106ab69fe277bafa96c788dddd15b02b5a195cfaaee9826324a0a357f6923719b20dfdfc0f75c0f185dd5103de4dde0d1c6474c305a3cbd3960ac2584f354e5e5ea89eaa0ef7d7be427e6a95b3d669913a5f40b2049f5f9dbb624edb232b73cafd8c18be34d16f81fd92fb6063dfbf2fb36479b8507db4c296687f12fdd68ef1a1cea26fd3f674f3f6cb75f5fa05fc44b716f38dbb863d6711539d830f682e38972b89ff440ecabc190b19f68731e902be84164f301b2147572e3531398c811f5695bf24f91be5eddeb7d42ec976dd5900df973bf4069ca2febfa8a222f9be9cf05d4de21d0a4242f7fa2e0305dfe3a01c58ebddcd87c28f99cc67c2405835d951b3aa2fb1970a54c8574c5d84935beea6168a6e409ae247aacef9be271c7f2e2ee9a59e412f9a23f6e6137469aa2e6940b4dda013a2cb03164fa369009e14adae2b168465f7c493631481d8338017d5fd7e1184068678842253b67e22d934ca1d394222096fbdeb9014ef8c1b8c287bc689657975d6887a8464c510dafbef183a2f5cde73b870693bfdc573fb8f1647c55a375f50cfb62ba47732f845346020008b781b89527846eb170b7a20fd785286aeeb6ac665641837bedb43d754e2520000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a12f6acd52f4287151cc3a1272a8bf5cd4e243b47bd36d87c77f04491da03069192d06b0b794d0d3df063b438492efb4d07e611ae408b5e8350f465faf8e97921fb07a66d16d5da8dd734d14bb1a961dc45f6a2f961504a6787df66d37d6ff945ecae3885250e36e02444c0982fba8f109ce02e67b399ec381724df7e0b306be40c1ed3ebfe96971462d86c63a4ced66bfa9fc35f5de61b3b680adddd2dff0b4014d63f44a82cad8c44defc1866915debf97522d937eb61726062299fe44857bc6e8a584ebd1b28d4bf92a5e4de4d4c393039d3741089b4b056cb135de7da32732e1a8350d969c916dd61c96474f5f2f5668c9ba35dac32157fc8a8d25e0222035004ca55414550d933cb34d66c9e16378ab47a5340766cca1783cfbd912fc4ec5944077f70f97e42a348ab0ba79703fe60a0f2d3fb856fc4d1b03a6072b9ead013320f3bd2d007b6fb8d2f0b47367fcf5aa26e85d286952610d0418be9627070df146bdedf1939b697a90f0138952a76cabeeb3391fa4acb8cafb28bd0e0ce18bb850faef7d17926abd51bff7058fe0356ef5e754dd4f4fbac0522525ffbac52efe99cb14d70a2ee826fa98f36582359cc1db457a97fcf0e9031a0babcc37b9000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019ea112af548b75d290ba845f3dd1f3042f8d4eece2f38c3b465c0439a2f83dfde061e7e65e798152e2a266a017893ddba2aff6b1a38b708205dff0a1574e967cf276e3827cb63559c1c6129190bff00a23e8a3c2dbad79439243490efd134dc80a124255a81ef2090032874f5d5b39f1c48316ffa7e11db6759ca5535da44a1b72a0fb21fcab54c62c4e18a53382f08ddd1fa3eec3c9e77470869861e15ff795a752e7700a4202cee141c10b5718c56f3d7c96261f874fcd7a30ad6e095df4fce668fb6a51b8c419c82686b6b5b254a2e088900b0ab608b67bdb6bd1417248f01ef267d61a3923c4c8f7a3d016bc0e173896e2079520699dcc7cd55638e2ff8f654e2c7ad570e02e559a25028d9fc469c9d46903b2cb9e1f8e1fc46c7493199b0c1786881e5c72daad42602a59ea89b590d69b6b5dceed4a6ba6f8fd9c20dc6881214419d096c45991d9324951fb94919d81ebbc74ca88302966f21031cf2df48bc34f1269765eb5e6ecc8d541976f46a946d9d972b1082d3e7870ef40c71a5cdf8ea258120ee34f632814ec9b72028a7c202ad1631d5602f6473be9487b769507a8d5aa8afd6a5fbf3119ca67125817ebaec7f4d8a1328efd0d7185d6399dd00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ecb4623eb5a147c8a49690a3576e909fcc48c07d448d1098c691871b0c7d0a41047e883f94cbef44ef5f07b87f92fe381ccd0fb6a01060ab101c9bc422a9705cc45abd2cafef4c55a3629301fe30f1dc40b07e2a71f85aa2dbcfe4fef15ec6c22d41253c159d05547eaacebd190fa373346ea5b4c0563ded7dd588454854f83bc96b82210f18a95b10cd6efbf538725ee05b285c67a210e085ad1332fca270e426095854a45580a2bd218814b5fa4843f4f3478683d77330286a5acc438cee186a59604df32d51fc05d172df50d34c9b18e745a8decb0f18c4d0291318a3df3cbcaf64dfd2e8b58b2b6b1e90bbea3a15935435095e935c4702ec8323be2a4576e3309be0ed12c7258358d36f46859b50aba6ba3dec1b2c3a043a59ac756367d9d79272e410b1db28da2beb0358bd08062f05bd461443bb5f013f32900a815e8b3f7ad2fd5c971a744f65a34bec6a3bbf12fc27a926a8469d5266ff40ee8b5eae88dcd13fdac7dfb314e04eae28d06f9509bde6c63db33bfb62e1407553391ecd0dc685d7b372674451e36a933eb735209da648b111c625766d2721addf1a1e7491918ec8f8a5b7a42272d7e8cdab312c755e529a6e5e42863eff40c8f2e59b00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac1a5de6d12f5fe04058b1e3e5bbbc943650ced38a4db6b2d1c1f66766eda920dcf0ba52cd424f738882c9467a4a32f1341ba52db5edc41de472c0fcdb9fd0bcff596379bf32feaff1b6993aa026bee9f91a3c2750ac4ca3478f6a5ed2d4410592d776c00a6d8d5af8d9e0315bbb28f0881fed41375247b01a3c4893350c7f8dd7fd316d5e6f271cc21eb580e9bfdd5cc21b93f5857ba3ecff853313ffa8559de1647524ea0256d8b23e2a5bada5eab1e34f49f580aff9be5efe69690bcc3472b64416d18ed9e9f3eec665b6689b2434c9b85842186f9322867539a092683d5ab5ffb8e30f6ceb984f24e9e05b4df4af4fe26735473111a6b8ff0ce061c4e3230f3711aa2cd32a468f356bfc859834a422c5778e5071b2990f8b05d1efa9b358875b06ad80635e3d23aad77631e4fe89fe325177dd7ca1a20e099785f0536ddbf058c7031b2a1491239023732fef4df5ebe990caa30f0a13373b4c23bd2f68347fba4513abc0fec7d1a47365950fde8a15b71febaaa24cfcaadb6dee3dc09a55d159e311885d21599e23b901025903ebdcf5b7a19d03cbc0d96328d377db4e7005d4f246883cfc2acdcc3ac008aa065656e1605482a857aa14945338df52e51400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008be9ee71b060b75ddcd5d31f2abb43f334c4d24bbb267d08de677f3b0ba7099d39ef187efc1d4dfd61fd10bfb3725da2df049c83554d0751f3e940a0552214f58597aaf377e224a67622f0f28c0db97478e97151b65cb70b07621d811aa1ce348c2e1e42732ef616b0238f3ac4ae3b7ed505631681605a9b6428a735bdf6ae6382233b44ea1c3cab5e04f66072319ece3dcc8e659a8ac3189eab9d84763f3582e5a8a0ad7ceb1e954c2e7ca9feb5c7b8829aa74d77ded32d578427619d2d3dfc01dd07509ec8f60b5fa75af0c6ca62838e8fb3643f92fcdf5cea6edc8c32d3351536ba687e9734246d8df09238179557b93dd5b46fb5402035cdce1bf857cf708510b04050f43ec48cb299100afb1b316c821d20fb599811933597a1e8feab29ab2b59702d152591ddd3da219eb13e2f0016b7a9f52eeb7b49b391bb5ae4af97a057a4f2597061513e075faac127e7b4cf410ce3cf3c86d989d01ee477da1066963c58082f2e70d9b353b6d5b63f7fb4290294dce8e2b879e69433147d71a28b6ddb551e4570e78958b264f532d08d5d6d47d115b1e3b527046f9ed206170a9bae71515005d8c4792205f3c7cecace7585d65b1ef5e2db32e4229eef9a2c637e000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016ef47e37801c1e4aa4d544314d832e4489f06141c149e20345a9a9eba242974bf252c50b0be2d791deeadd21104507bd777bd1dd6a0ff1e721424683a50cb2a86f3d3e0498867de72a974da40ad98b1cab33293b4efdbb260865154d5b2ef11a645561e418beb2902d42f31214dd4a555386a3004042c9ea7f822c5567efb6da49bef7b914dc1be656af29d5afeaf8edd82564c5a8809594533e32ca51c30ccc68a1ce8b1e2ca894d4339ff7a2e009fee7f51c091d008651afed680b879afe832efe7cabf3b92510afc3117a843841d048c8a73a989f9a4979c8b4cd8dfcfa230450b0b5906d7cfc31cb93eee1f3c3aa50735cce8c4992c241b200fee29fca81a4f53db107c6b87d02a0a7f92664b66a134beeb450128a46758136d41dd02b748573bb46b757d0f63dc3da945e1560aa7f0608a97bdc49025c173af837cbe3b0d04300283efa343cb9fae7938d6ae460c0face36e60858bc32223f39080cb72343c0c701f7cc912a416dc25de8deb5751c8d28459b37e593133c5492abee51ce4f324cb31169cc5e9eacbde9ddf67707bf5e0e717bc6f706e7af7e19c3cefe98b582c21f49e61f53af3d6cbd393e06cbd56e89ea2dcfe6bae18378d8f92d7bf00000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b6ef97da089f2758c5c78e5e9f6ce326e20adc2b74ceb51a0a5d53f36180f0d1de1720fd11fbfb231d7e4ec68ce19e23f36c8e63d4364e77e8dac74f3e16f23f8e633483918a180dcf77003257c31980cc8d7d1abeb704e354d57473c306e5cdb201aed0115e368fbab5ebc93d2dc41a22e89c1f2c06548db16870eed7db8eb41e7557c9c4a4294c6143b7c0876a9ac54aad917bd7beb52d75398684c83a7958eaf1cef19a06b2a94e5c934df73f825b29e47f7dfe6b32e5f8c2400ab842ff9902a669c4f3dbbfd62d9d0107cbcb987e0a35a6286451092706a25036e4d2cfed5ad2918488ae584bc7d49813202487b53cc694044cb12521ad2d9b42fdd49b49665708d88b4908e7ca860f2a3ed8e41be532618b5bcf91fb31aab9ea2a79f8048d441c7ed11c21969892b0698b1676ea5f0548d79514a19ef709878ea4c4b82e5c6a3ee22dd12e66fa9a15d271b59810ac91dd7c037a0febf5a352b2f63775db375c164da21428f44e7a4e07b8637e6d5ac97145687bf1a493b74f3a86c41add6e88e2e5c0aceb32e3b0c9ae954dcfdda57249221c809e3e1c7a8a9e873d39a8fa031300771447dbc3552565eb7cf6be87d987c7e60b21a099df9c1faaa26f200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e4b9fa2fd79eccd13dd13f83b29274c453b26707e9a93a1a77ab9d6a1ba6e69d404aa241416d379ebe7a9bf6595aebe13df9401d554f90e4b581ff37187b77c22eda74ce7ffd69a76f8c23dd148998c9fa743cf3a2bd896d31c9c28da062c43972034b47fde09a445788f86c8ace442ff0694f8098a3a6c87b5030c1ec24d2ff590b5f183ba2a78eae2d08f776d601948101e75af64ebbcf9a2be9aeccdb453509396ba8f670094494a2ff4ef3396a195648e9b81166e2963d12e941b18c5357fae82d1907eaa498aed9b5f8293bc73e0c5cb57ec151fd168fe3ce65d6675737928c523ecdbd81d64ee763b30d53aeefc31cc012584f5af78203e6131ddd10ee6508b817a18573a299e280b576e5e5e8aca9c78f3f81e9e2a90097d2da854ab2fb276bf36fb1177d6b01d084ebb8d1e51113a318c007133ea53a8e9c2f4e887a918d20a69de812e005ab888e7dab48ea9fdcc3ef4ad69e403b4736db785598f7c096a453a77e0817ec5a798320f635b4a538260521564399bb5773e3307be9a17dd65df9b4d02094b00a5b2102ccad008cdab9195c81d8874d8d8e8846292f1cc7a46f34ec298c55f1582ea8a5b811fbcb7a178d4abb7873219f94ed0cbb648000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021824c38ad06c818fcf7f2a28a47874b56a5d480acbf1aba7343131bb7cd72fad2a1c01e0b06795d340e9550220226aafb4362cf1cc121e2cdff429f0951c273f41f8f5ff6a79ed1d2270a6d9d54498a2d9fab5db830bd6b3046f11054e428153c23b2d19f00ea594fc976ecc53f877233706369a88ef3626a2fb06108c6ab2036d6885d178c504e3fb5b928ff109dd07b9ce74b005c560222241b045ccc28b1c5b4d6aa7d1e6cfa164b054baf77248724e527055f6847c3033ba4431905b93f3d76bb21e492c2efabdaf6daa5b3708c619aaa6613744a2656adf52bca4cac7b8f9d803990cc7d1a1b82c065f67b436b351c144cca21e03c447a5035d65c1e362b85dd93103a15977b7db46e9c0862b9a9f555188750e27f5fad2237a3610679fe199c22e5de662e3195f84f5680caa533fdc07eb261ea89b935f7ab49ec9ba05e2990089bd7c6976d6c66bd13e063af5127e1c9b23909a5a4832bbb071769da5b8c169a88b5853ed44d290f38e6270163fc4c5fb7f6e5fedd0166238a00bfb6f66cdb720b9630e0d8a428d9374b8794ffe6e271b08ccbfe55eb4b15aab88f47893481fdc078e7a4a0c334da50be809d874351eeef3f5fed890eeae40d06fa380000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a398c6b7dce304bc2200b446f9d8a19ef7d710cfc7673dd8afaf0a961e81580a761879c5bc481151c60d2bcf6236dced624c0463a14ab0ba79d4b5206545f3840b9e6a5137389fb2e742a157ded7492f07a618430cf92b9795b59d81826a34430a2e7c6e6fa95e6f480e7bbcc9027551b4c41fefbfb4c384cb0b8f002b211faf6c2622b2eede032e39e66a1010b7e0dcb378101106e5509b76e9ef3d66f39d575b7180a92b1d2bcb69a5eb9c3732f26ea700b23913ec9882053a8e8b5e22ffd8e042107e1676b099eb7fd7679515dae8a145719f8ac45b96da33c763baba0c3fab3831884cde79b729e456d1ceada963891b827ecf8e0ca69aa1f478cca133fd2918584043e48f0d136010fd8e899231c081c9f6ab97047f7af3bfdea356709a2928bb32612d16e1d3298c0c62e9b2e4ac2324aecfff520612710b17faca24eb2ad165f80347241f93011890cce7cea12989e1a6859f562ff1e994294c4e740a00385b244e4c46b1824679d7300943e9550fd59ff93bd067e87932c1d9a15d843b2b016f837647a3419219d01bfec06a31b0aa5b20260ac2cfde3e2796bc8fa840f0299f63acb9bc3493feb980d6a7edb50f00710617022a2783f001600bd80b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035f661d56c3774f2fc073a6a1c9f4bf6fb0c7792cb2478e260ab13cefd86097a5dc0d608c5d43ef1241279459ef2dedff311326f23b720a0e199266a3bfe7d9fcd711e7399749d8f52fa7ebb8b41ec5bfd3fc3f4b8fe4129d0df1b85d15504a8c0007bf4332f3dbd2a45dd3c7c76086f2b5a47c12c4547379295e28734f4b081820ff48091ae579cd49d13f8e56a00fd3c615a3e8affe9e04e8a3d6ae80e0f8966dc5032f9649b10e7f7ae7f09f8ba6652eb3f023b0acd53f848ae60a9129bf4e4d5aec8ca1ddebe1b11837edf62db6ab7f4d5eaafbdac87f6dafe597b7a82cb1bc6a935a1b71edc0e5727afd7f16b7c8c01be2c89042b85221c5b2555563dd111c4b4fbbf499f685a4eb6a161211c0b244e9d76cee0f78b0d4d0b59c3507358292a31c7be9300c6ece6d690dd55d7b04166cc9f6c0cb1fc00e764e8fe10a2709dc33e33f62ddaee55ae5f3ba1b6222dfecb7ccb04d67f3dfa0fa1f118f5d42674bc47e8c000cb82d1e6056d3dbbd6db9b21ad419e595a80fa1c0b776c10ce9034186eba7b9bf5e48c4933e26a8693f3ebb14811e4aa29b4e2ea1b6b4bb1a075d8a13b6b20ec0c4b0d0e44d78d3ca7a43e00973ceef74e0fc33fc78237d215f00000004000000000000000c000000000000000000000000" + ] +} diff --git a/yarn-project/end-to-end/src/fixtures/utils.ts b/yarn-project/end-to-end/src/fixtures/utils.ts index 1045d838954..c7308bf8826 100644 --- a/yarn-project/end-to-end/src/fixtures/utils.ts +++ b/yarn-project/end-to-end/src/fixtures/utils.ts @@ -32,7 +32,6 @@ import { DefaultMultiCallEntrypoint } from '@aztec/aztec.js/entrypoint'; import { type BBNativePrivateKernelProver } from '@aztec/bb-prover'; import { CANONICAL_AUTH_REGISTRY_ADDRESS, - CANONICAL_KEY_REGISTRY_ADDRESS, type EthAddress, GasSettings, MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS, @@ -57,12 +56,11 @@ import { RollupAbi, RollupBytecode, } from '@aztec/l1-artifacts'; -import { AuthRegistryContract, KeyRegistryContract, RouterContract } from '@aztec/noir-contracts.js'; +import { AuthRegistryContract, RouterContract } from '@aztec/noir-contracts.js'; import { FeeJuiceContract } from '@aztec/noir-contracts.js/FeeJuice'; import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types'; import { getCanonicalAuthRegistry } from '@aztec/protocol-contracts/auth-registry'; import { FeeJuiceAddress, getCanonicalFeeJuice } from '@aztec/protocol-contracts/fee-juice'; -import { getCanonicalKeyRegistry } from '@aztec/protocol-contracts/key-registry'; import { getCanonicalRouter } from '@aztec/protocol-contracts/router'; import { PXEService, type PXEServiceConfig, createPXEService, getPXEServiceConfig } from '@aztec/pxe'; import { type SequencerClient } from '@aztec/sequencer-client'; @@ -246,9 +244,6 @@ async function setupWithRemoteEnvironment( const { l1ChainId: chainId, protocolVersion } = await pxeClient.getNodeInfo(); // this contract might already have been deployed // the following deploying functions are idempotent - await deployCanonicalKeyRegistry( - new SignerlessWallet(pxeClient, new DefaultMultiCallEntrypoint(chainId, protocolVersion)), - ); await deployCanonicalAuthRegistry( new SignerlessWallet(pxeClient, new DefaultMultiCallEntrypoint(config.l1ChainId, config.version)), ); @@ -280,6 +275,7 @@ async function setupWithRemoteEnvironment( wallets, logger, cheatCodes, + watcher: undefined, teardown, }; } @@ -298,6 +294,8 @@ type SetupOptions = { initialValidators?: EthAddress[]; /** Anvil block time (interval) */ l1BlockTime?: number; + /** Anvil Start time */ + l1StartTime?: number; } & Partial; /** Context for an end-to-end test as returned by the `setup` function */ @@ -320,6 +318,8 @@ export type EndToEndContext = { logger: DebugLogger; /** The cheat codes. */ cheatCodes: CheatCodes; + /** The anvil test watcher (undefined if connected to remove environment) */ + watcher: AnvilTestWatcher | undefined; /** Function to stop the started services. */ teardown: () => Promise; }; @@ -364,11 +364,16 @@ export async function setup( setupMetricsLogger(filename); } + const ethCheatCodes = new EthCheatCodes(config.l1RpcUrl); + if (opts.stateLoad) { - const ethCheatCodes = new EthCheatCodes(config.l1RpcUrl); await ethCheatCodes.loadChainState(opts.stateLoad); } + if (opts.l1StartTime) { + await ethCheatCodes.warp(opts.l1StartTime); + } + let publisherPrivKey = undefined; let publisherHdAccount = undefined; @@ -383,6 +388,9 @@ export async function setup( config.publisherPrivateKey = `0x${publisherPrivKey!.toString('hex')}`; } + // Made as separate values such that keys can change, but for test they will be the same. + config.validatorPrivateKey = config.publisherPrivateKey; + if (PXE_URL) { // we are setting up against a remote environment, l1 contracts are assumed to already be deployed return await setupWithRemoteEnvironment(publisherHdAccount!, config, logger, numberOfAccounts, enableGas); @@ -408,10 +416,6 @@ export async function setup( await watcher.start(); - // Run the test with validators enabled - const validatorPrivKey = getPrivateKeyFromIndex(1); - config.validatorPrivateKey = `0x${validatorPrivKey!.toString('hex')}`; - logger.verbose('Creating and synching an aztec node...'); const acvmConfig = await getACVMConfig(logger); @@ -436,11 +440,6 @@ export async function setup( const { pxe } = await setupPXEService(aztecNode!, pxeOpts, logger); if (!config.skipProtocolContracts) { - logger.verbose('Deploying key registry...'); - await deployCanonicalKeyRegistry( - new SignerlessWallet(pxe, new DefaultMultiCallEntrypoint(config.l1ChainId, config.version)), - ); - logger.verbose('Deploying auth registry...'); await deployCanonicalAuthRegistry( new SignerlessWallet(pxe, new DefaultMultiCallEntrypoint(config.l1ChainId, config.version)), @@ -490,6 +489,7 @@ export async function setup( logger, cheatCodes, sequencer, + watcher, teardown, }; } @@ -721,39 +721,6 @@ export async function deployCanonicalFeeJuice(pxe: PXE) { await expect(pxe.isContractPubliclyDeployed(feeJuice.address)).resolves.toBe(true); } -export async function deployCanonicalKeyRegistry(deployer: Wallet) { - const canonicalKeyRegistry = getCanonicalKeyRegistry(); - - // We check to see if there exists a contract at the canonical Key Registry address with the same contract class id as we expect. This means that - // the key registry has already been deployed to the correct address. - if ( - (await deployer.getContractInstance(canonicalKeyRegistry.address))?.contractClassId.equals( - canonicalKeyRegistry.contractClass.id, - ) && - (await deployer.isContractClassPubliclyRegistered(canonicalKeyRegistry.contractClass.id)) - ) { - return; - } - - const keyRegistry = await KeyRegistryContract.deploy(deployer) - .send({ contractAddressSalt: canonicalKeyRegistry.instance.salt, universalDeploy: true }) - .deployed(); - - if ( - !keyRegistry.address.equals(canonicalKeyRegistry.address) || - !keyRegistry.address.equals(AztecAddress.fromBigInt(CANONICAL_KEY_REGISTRY_ADDRESS)) - ) { - throw new Error( - `Deployed Key Registry address ${keyRegistry.address} does not match expected address ${canonicalKeyRegistry.address}, or they both do not equal CANONICAL_KEY_REGISTRY_ADDRESS`, - ); - } - - expect(computeContractAddressFromInstance(keyRegistry.instance)).toEqual(keyRegistry.address); - expect(getContractClassFromArtifact(keyRegistry.artifact).id).toEqual(keyRegistry.instance.contractClassId); - await expect(deployer.isContractClassPubliclyRegistered(canonicalKeyRegistry.contractClass.id)).resolves.toBe(true); - await expect(deployer.getContractInstance(canonicalKeyRegistry.instance.address)).resolves.toBeDefined(); -} - export async function deployCanonicalAuthRegistry(deployer: Wallet) { const canonicalAuthRegistry = getCanonicalAuthRegistry(); diff --git a/yarn-project/end-to-end/src/public-testnet/e2e_public_testnet_transfer.test.ts b/yarn-project/end-to-end/src/public-testnet/e2e_public_testnet_transfer.test.ts index 1ecc615eed5..27a86df2787 100644 --- a/yarn-project/end-to-end/src/public-testnet/e2e_public_testnet_transfer.test.ts +++ b/yarn-project/end-to-end/src/public-testnet/e2e_public_testnet_transfer.test.ts @@ -53,7 +53,7 @@ describe(`deploys and transfers a private only token`, () => { }); it('calls a private function', async () => { - const initialBalance = 100000000000n; + const initialBalance = 100_000_000_000n; const transferValue = 5n; secretKey1 = Fr.random(); secretKey2 = Fr.random(); diff --git a/yarn-project/end-to-end/src/shared/cross_chain_test_harness.ts b/yarn-project/end-to-end/src/shared/cross_chain_test_harness.ts index 64ce7d56196..3f14d4b34c5 100644 --- a/yarn-project/end-to-end/src/shared/cross_chain_test_harness.ts +++ b/yarn-project/end-to-end/src/shared/cross_chain_test_harness.ts @@ -114,7 +114,7 @@ export async function deployAndInitializeTokenAndBridgeContracts( // deploy l2 token bridge and attach to the portal const bridge = await TokenBridgeContract.deploy(wallet, token.address, tokenPortalAddress).send().deployed(); - if ((await token.methods.admin().simulate()) !== owner.toBigInt()) { + if ((await token.methods.get_admin().simulate()) !== owner.toBigInt()) { throw new Error(`Token admin is not ${owner}`); } diff --git a/yarn-project/end-to-end/src/shared/uniswap_l1_l2.ts b/yarn-project/end-to-end/src/shared/uniswap_l1_l2.ts index ac626458c4e..3bebc5073aa 100644 --- a/yarn-project/end-to-end/src/shared/uniswap_l1_l2.ts +++ b/yarn-project/end-to-end/src/shared/uniswap_l1_l2.ts @@ -26,6 +26,7 @@ import { parseEther, toFunctionSelector, } from 'viem'; +import type * as chains from 'viem/chains'; import { publicDeployAccounts } from '../fixtures/utils.js'; import { CrossChainTestHarness } from './cross_chain_test_harness.js'; @@ -91,7 +92,7 @@ export const uniswapL1L2TestSuite = ( let wethCrossChainHarness: CrossChainTestHarness; let deployL1ContractsValues: DeployL1Contracts; - let rollup: any; + let rollup: GetContractReturnType>; let uniswapPortal: GetContractReturnType>; let uniswapPortalAddress: EthAddress; let uniswapL2Contract: UniswapContract; @@ -297,7 +298,7 @@ export const uniswapL1L2TestSuite = ( await wethCrossChainHarness.expectPublicBalanceOnL2(uniswapL2Contract.address, 0n); // Since the outbox is only consumable when the block is proven, we need to set the block to be proven - await rollup.write.setAssumeProvenUntilBlockNumber([await rollup.read.pendingBlockCount()]); + await rollup.write.setAssumeProvenThroughBlockNumber([await rollup.read.getPendingBlockNumber()]); // 5. Consume L2 to L1 message by calling uniswapPortal.swap_private() logger.info('Execute withdraw and swap on the uniswapPortal!'); @@ -932,7 +933,7 @@ export const uniswapL1L2TestSuite = ( await wethCrossChainHarness.expectPrivateBalanceOnL2(ownerAddress, wethL2BalanceBeforeSwap - wethAmountToBridge); // Since the outbox is only consumable when the block is proven, we need to set the block to be proven - await rollup.write.setAssumeProvenUntilBlockNumber([await rollup.read.pendingBlockCount()]); + await rollup.write.setAssumeProvenThroughBlockNumber([await rollup.read.getPendingBlockNumber()]); // On L1 call swap_public! logger.info('call swap_public on L1'); @@ -1066,7 +1067,7 @@ export const uniswapL1L2TestSuite = ( await wethCrossChainHarness.expectPublicBalanceOnL2(ownerAddress, 0n); // Since the outbox is only consumable when the block is proven, we need to set the block to be proven - await rollup.write.setAssumeProvenUntilBlockNumber([await rollup.read.pendingBlockCount()]); + await rollup.write.setAssumeProvenThroughBlockNumber([await rollup.read.getPendingBlockNumber()]); // Call swap_private on L1 const secretHashForRedeemingDai = Fr.random(); // creating my own secret hash diff --git a/yarn-project/end-to-end/src/simulators/lending_simulator.ts b/yarn-project/end-to-end/src/simulators/lending_simulator.ts index 06d258bb51b..557677b5da4 100644 --- a/yarn-project/end-to-end/src/simulators/lending_simulator.ts +++ b/yarn-project/end-to-end/src/simulators/lending_simulator.ts @@ -5,7 +5,8 @@ import { pedersenHash } from '@aztec/foundation/crypto'; import { type RollupAbi } from '@aztec/l1-artifacts'; import { type LendingContract } from '@aztec/noir-contracts.js/Lending'; -import { type Chain, type GetContractReturnType, type HttpTransport, type PublicClient } from 'viem'; +import { type Account, type GetContractReturnType, type HttpTransport, type WalletClient } from 'viem'; +import type * as chains from 'viem/chains'; import { type TokenSimulator } from './token_simulator.js'; @@ -81,7 +82,7 @@ export class LendingSimulator { private account: LendingAccount, private rate: bigint, /** the rollup contract */ - public rollup: GetContractReturnType>, + public rollup: GetContractReturnType>, /** the lending contract */ public lendingContract: LendingContract, /** the collateral asset used in the lending contract */ @@ -110,6 +111,8 @@ export class LendingSimulator { // Mine ethereum blocks such that the next block will be in a new slot await this.cc.eth.warp(this.time - ETHEREUM_SLOT_DURATION); + + await this.rollup.write.setAssumeProvenThroughBlockNumber([(await this.rollup.read.getPendingBlockNumber()) + 1n]); this.accumulator = muldivDown(this.accumulator, computeMultiplier(this.rate, BigInt(timeDiff)), BASE); } diff --git a/yarn-project/end-to-end/src/spartan/transfer.test.ts b/yarn-project/end-to-end/src/spartan/transfer.test.ts index c47a4e8876e..704b333d5eb 100644 --- a/yarn-project/end-to-end/src/spartan/transfer.test.ts +++ b/yarn-project/end-to-end/src/spartan/transfer.test.ts @@ -1,13 +1,11 @@ import { getSchnorrAccount } from '@aztec/accounts/schnorr'; import { - type AccountWallet, type AccountWalletWithSecretKey, type AztecAddress, ExtendedNote, Fr, Note, type PXE, - type TxHash, computeSecretHash, createCompatibleClient, } from '@aztec/aztec.js'; @@ -35,29 +33,8 @@ const toString = ({ value }: { value: bigint }) => { return str; }; -const addPendingShieldNoteToPXE = async (args: { - amount: bigint; - secretHash: Fr; - txHash: TxHash; - accountAddress: AztecAddress; - assetAddress: AztecAddress; - wallet: AccountWallet; -}) => { - const { accountAddress, assetAddress, amount, secretHash, txHash, wallet } = args; - const note = new Note([new Fr(amount), secretHash]); - const extendedNote = new ExtendedNote( - note, - accountAddress, - assetAddress, - TokenContract.storage.pending_shields.slot, - TokenContract.notes.TransparentNote.id, - txHash, - ); - await wallet.addNote(extendedNote); -}; - describe('token transfer test', () => { - jest.setTimeout(10 * 60 * 1000); // 10 minutes + jest.setTimeout(10 * 60 * 2000); // 20 minutes const logger = createDebugLogger(`aztec:spartan-test:transfer`); const TOKEN_NAME = 'USDC'; @@ -65,20 +42,20 @@ describe('token transfer test', () => { const TOKEN_DECIMALS = 18n; const MINT_AMOUNT = 20n; - const WALLET_COUNT = 1; + const WALLET_COUNT = 16; const ROUNDS = 5n; let pxe: PXE; let wallets: AccountWalletWithSecretKey[]; let recipientWallet: AccountWalletWithSecretKey; let tokenAddress: AztecAddress; - let tokenAtWallet0: TokenContract; + let tokenAdminWallet: TokenContract; beforeAll(async () => { expect(ROUNDS).toBeLessThanOrEqual(MINT_AMOUNT); - // My guess is that is never proven so if we are waiting for it to prove we wait forever? pxe = await createCompatibleClient(PXE_URL, logger); + { const { accountKeys } = await addAccounts(1, logger, false)({ pxe }); const accountManagers = accountKeys.map(ak => getSchnorrAccount(pxe, ak[0], ak[1], 1)); @@ -89,7 +66,7 @@ describe('token transfer test', () => { logger.verbose(`Recipient Wallet address: ${recipientWallet.getAddress()} registered`); } - const { accountKeys } = await addAccounts(Number(WALLET_COUNT), logger, false)({ pxe }); + const { accountKeys } = await addAccounts(WALLET_COUNT, logger, true)({ pxe }); const accountManagers = accountKeys.map(ak => getSchnorrAccount(pxe, ak[0], ak[1], 1)); wallets = await Promise.all( @@ -114,48 +91,56 @@ describe('token transfer test', () => { .deployed({ timeout: 600 }); tokenAddress = tokenContract.address; - tokenAtWallet0 = await TokenContract.at(tokenAddress, wallets[0]); + tokenAdminWallet = await TokenContract.at(tokenAddress, wallets[0]); logger.verbose(`Minting ${MINT_AMOUNT} public assets to the ${wallets.length} wallets...`); await Promise.all( - wallets.map(w => tokenAtWallet0.methods.mint_public(w.getAddress(), MINT_AMOUNT).send().wait({ timeout: 600 })), + wallets.map(w => tokenAdminWallet.methods.mint_public(w.getAddress(), MINT_AMOUNT).send().wait({ timeout: 600 })), ); logger.verbose(`Minting ${MINT_AMOUNT} private assets to the ${wallets.length} wallets...`); - const secrets: Fr[] = wallets.map(() => Fr.random()); + + const mintSecrets = Array.from({ length: WALLET_COUNT }) + .map(() => Fr.random()) + .map(secret => ({ + secret, + hash: computeSecretHash(secret), + })); const txs = await Promise.all( - wallets.map((w, i) => - tokenAtWallet0.methods.mint_private(MINT_AMOUNT, computeSecretHash(secrets[i])).send().wait({ timeout: 600 }), + mintSecrets.map(({ hash }) => + tokenAdminWallet.methods.mint_private(MINT_AMOUNT, hash).send().wait({ timeout: 600 }), ), ); - wallets.forEach(async (wallet, i) => { - await addPendingShieldNoteToPXE({ - amount: MINT_AMOUNT, - secretHash: computeSecretHash(secrets[i]), - txHash: txs[i].txHash, - accountAddress: wallet.getAddress(), - assetAddress: tokenAddress, - wallet: wallet, - }); - }); + logger.verbose(`Redeeming private assets...`); await Promise.all( - wallets.map(async (w, i) => - (await TokenContract.at(tokenAddress, w)).methods - .redeem_shield(w.getAddress(), MINT_AMOUNT, secrets[i]) - .send() - .wait({ timeout: 600 }), - ), + mintSecrets.map(async ({ secret, hash }, i) => { + const wallet = wallets[i]; + const walletAddress = wallet.getAddress(); + const note = new Note([new Fr(MINT_AMOUNT), hash]); + const extendedNote = new ExtendedNote( + note, + walletAddress, + tokenAddress, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, + txs[i].txHash, + ); + + await pxe.addNote(extendedNote, walletAddress); + const token = await TokenContract.at(tokenAddress, wallet); + await token.methods.redeem_shield(walletAddress, MINT_AMOUNT, secret).send().wait({ timeout: 600 }); + }), ); logger.verbose(`Minting complete.`); }); it('can get info', async () => { - const name = toString(await tokenAtWallet0.methods.private_get_name().simulate()); + const name = toString(await tokenAdminWallet.methods.private_get_name().simulate()); expect(name).toBe(TOKEN_NAME); }); @@ -167,13 +152,13 @@ describe('token transfer test', () => { expect(MINT_AMOUNT).toBe( await (await TokenContract.at(tokenAddress, w)).methods.balance_of_private(w.getAddress()).simulate(), ); - expect(MINT_AMOUNT).toBe(await tokenAtWallet0.methods.balance_of_public(w.getAddress()).simulate()); + expect(MINT_AMOUNT).toBe(await tokenAdminWallet.methods.balance_of_public(w.getAddress()).simulate()); }); expect(0n).toBe( await (await TokenContract.at(tokenAddress, recipientWallet)).methods.balance_of_private(recipient).simulate(), ); - expect(0n).toBe(await tokenAtWallet0.methods.balance_of_public(recipient).simulate()); + expect(0n).toBe(await tokenAdminWallet.methods.balance_of_public(recipient).simulate()); // For each round, make both private and public transfers for (let i = 1n; i <= ROUNDS; i++) { @@ -198,7 +183,7 @@ describe('token transfer test', () => { await (await TokenContract.at(tokenAddress, w)).methods.balance_of_private(w.getAddress()).simulate(), ); expect(MINT_AMOUNT - ROUNDS * transferAmount).toBe( - await tokenAtWallet0.methods.balance_of_public(w.getAddress()).simulate(), + await tokenAdminWallet.methods.balance_of_public(w.getAddress()).simulate(), ); }); @@ -206,7 +191,7 @@ describe('token transfer test', () => { await (await TokenContract.at(tokenAddress, recipientWallet)).methods.balance_of_private(recipient).simulate(), ); expect(ROUNDS * transferAmount * BigInt(wallets.length)).toBe( - await tokenAtWallet0.methods.balance_of_public(recipient).simulate(), + await tokenAdminWallet.methods.balance_of_public(recipient).simulate(), ); }); }); diff --git a/yarn-project/ethereum/src/deploy_l1_contracts.ts b/yarn-project/ethereum/src/deploy_l1_contracts.ts index 290d0728a68..966bb00224f 100644 --- a/yarn-project/ethereum/src/deploy_l1_contracts.ts +++ b/yarn-project/ethereum/src/deploy_l1_contracts.ts @@ -147,7 +147,7 @@ export const deployL1Contracts = async ( args: { l2FeeJuiceAddress: AztecAddress; vkTreeRoot: Fr; - assumeProvenUntil?: number; + assumeProvenThrough?: number; salt: number | undefined; initialValidators?: EthAddress[]; }, @@ -277,9 +277,9 @@ export const deployL1Contracts = async ( } // Set initial blocks as proven if requested - if (args.assumeProvenUntil && args.assumeProvenUntil > 0) { - await rollup.write.setAssumeProvenUntilBlockNumber([BigInt(args.assumeProvenUntil)], { account }); - logger.info(`Set Rollup assumedProvenUntil to ${args.assumeProvenUntil}`); + if (args.assumeProvenThrough && args.assumeProvenThrough > 0) { + await rollup.write.setAssumeProvenThroughBlockNumber([BigInt(args.assumeProvenThrough)], { account }); + logger.info(`Set Rollup assumedProvenUntil to ${args.assumeProvenThrough}`); } // Inbox and Outbox are immutable and are deployed from Rollup's constructor so we just fetch them from the contract. diff --git a/yarn-project/foundation/package.json b/yarn-project/foundation/package.json index f14bc84c6e1..2af937f8c18 100644 --- a/yarn-project/foundation/package.json +++ b/yarn-project/foundation/package.json @@ -17,6 +17,7 @@ "./crypto": "./dest/crypto/index.js", "./error": "./dest/error/index.js", "./eth-address": "./dest/eth-address/index.js", + "./eth-signature": "./dest/eth-signature/index.js", "./queue": "./dest/queue/index.js", "./fs": "./dest/fs/index.js", "./buffer": "./dest/buffer/index.js", @@ -144,7 +145,8 @@ "prettier": "^2.7.1", "supertest": "^6.3.3", "ts-node": "^10.9.1", - "typescript": "^5.0.4" + "typescript": "^5.0.4", + "viem": "^2.7.15" }, "files": [ "dest", diff --git a/yarn-project/foundation/src/abi/__snapshots__/function_selector.test.ts.snap b/yarn-project/foundation/src/abi/__snapshots__/function_selector.test.ts.snap index 0336e9c4e93..c59cdc3f81f 100644 --- a/yarn-project/foundation/src/abi/__snapshots__/function_selector.test.ts.snap +++ b/yarn-project/foundation/src/abi/__snapshots__/function_selector.test.ts.snap @@ -1,3 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`FunctionSelector computes a function selector from signature 1`] = `Selector<0xa9059cbb>`; +exports[`FunctionSelector computes a function selector from a long string 1`] = `"7590a997"`; + +exports[`FunctionSelector computes a function selector from signature 1`] = `"73cdda47"`; diff --git a/yarn-project/foundation/src/abi/decoder.ts b/yarn-project/foundation/src/abi/decoder.ts index 1749e357fc6..3cba542cb49 100644 --- a/yarn-project/foundation/src/abi/decoder.ts +++ b/yarn-project/foundation/src/abi/decoder.ts @@ -6,21 +6,21 @@ import { isAztecAddressStruct } from './utils.js'; /** * The type of our decoded ABI. */ -export type DecodedReturn = bigint | boolean | AztecAddress | DecodedReturn[] | { [key: string]: DecodedReturn }; +export type AbiDecoded = bigint | boolean | AztecAddress | AbiDecoded[] | { [key: string]: AbiDecoded }; /** - * Decodes return values from a function call. - * Missing support for integer and string. + * Decodes values using a provided ABI. + * Missing support for signed integer. */ -class ReturnValuesDecoder { - constructor(private returnTypes: AbiType[], private flattened: Fr[]) {} +class AbiDecoder { + constructor(private types: AbiType[], private flattened: Fr[]) {} /** * Decodes a single return value from field to the given type. * @param abiType - The type of the return value. * @returns The decoded return value. */ - private decodeReturn(abiType: AbiType): DecodedReturn { + private decodeNext(abiType: AbiType): AbiDecoded { switch (abiType.kind) { case 'field': return this.getNextField().toBigInt(); @@ -34,18 +34,18 @@ class ReturnValuesDecoder { case 'array': { const array = []; for (let i = 0; i < abiType.length; i += 1) { - array.push(this.decodeReturn(abiType.type)); + array.push(this.decodeNext(abiType.type)); } return array; } case 'struct': { - const struct: { [key: string]: DecodedReturn } = {}; + const struct: { [key: string]: AbiDecoded } = {}; if (isAztecAddressStruct(abiType)) { return new AztecAddress(this.getNextField().toBuffer()); } for (const field of abiType.fields) { - struct[field.name] = this.decodeReturn(field.type); + struct[field.name] = this.decodeNext(field.type); } return struct; } @@ -59,7 +59,7 @@ class ReturnValuesDecoder { case 'tuple': { const array = []; for (const tupleAbiType of abiType.fields) { - array.push(this.decodeReturn(tupleAbiType)); + array.push(this.decodeNext(tupleAbiType)); } return array; } @@ -69,8 +69,8 @@ class ReturnValuesDecoder { } /** - * Gets the next field in the flattened return values. - * @returns The next field in the flattened return values. + * Gets the next field in the flattened buffer. + * @returns The next field in the flattened buffer. */ private getNextField(): Fr { const field = this.flattened.shift(); @@ -81,30 +81,29 @@ class ReturnValuesDecoder { } /** - * Decodes all the return values for the given function ABI. - * Aztec.nr support only single return value - * The return value can however be simple types, structs or arrays + * Decodes all the values for the given ABI. + * The decided value can be simple types, structs or arrays * @returns The decoded return values. */ - public decode(): DecodedReturn { - if (this.returnTypes.length > 1) { - throw new Error('Multiple return values not supported'); + public decode(): AbiDecoded { + if (this.types.length > 1) { + throw new Error('Multiple types not supported'); } - if (this.returnTypes.length === 0) { + if (this.types.length === 0) { return []; } - return this.decodeReturn(this.returnTypes[0]); + return this.decodeNext(this.types[0]); } } /** - * Decodes return values from a function call. - * @param abi - The ABI entry of the function. - * @param returnValues - The decoded return values. + * Decodes values in a flattened Field array using a provided ABI. + * @param abi - The ABI to use as reference. + * @param buffer - The flattened Field array to decode. * @returns */ -export function decodeReturnValues(returnTypes: AbiType[], returnValues: Fr[]) { - return new ReturnValuesDecoder(returnTypes, returnValues.slice()).decode(); +export function decodeFromAbi(typ: AbiType[], buffer: Fr[]) { + return new AbiDecoder(typ, buffer.slice()).decode(); } /** diff --git a/yarn-project/foundation/src/abi/event_selector.ts b/yarn-project/foundation/src/abi/event_selector.ts index d7cbe951a46..f7c8ae06d99 100644 --- a/yarn-project/foundation/src/abi/event_selector.ts +++ b/yarn-project/foundation/src/abi/event_selector.ts @@ -1,5 +1,5 @@ import { fromHex, toBigIntBE } from '../bigint-buffer/index.js'; -import { keccak256, randomBytes } from '../crypto/index.js'; +import { poseidon2HashBytes, randomBytes } from '../crypto/index.js'; import { type Fr } from '../fields/fields.js'; import { BufferReader } from '../serialize/buffer_reader.js'; import { Selector } from './selector.js'; @@ -44,7 +44,10 @@ export class EventSelector extends Selector { if (/\s/.test(signature)) { throw new Error('Signature cannot contain whitespace'); } - return EventSelector.fromBuffer(keccak256(Buffer.from(signature)).subarray(0, Selector.SIZE)); + const hash = poseidon2HashBytes(Buffer.from(signature)); + // We take the last Selector.SIZE big endian bytes + const bytes = hash.toBuffer().slice(-Selector.SIZE); + return EventSelector.fromBuffer(bytes); } /** diff --git a/yarn-project/foundation/src/abi/function_selector.test.ts b/yarn-project/foundation/src/abi/function_selector.test.ts index 6cb6155e922..a3f6d055354 100644 --- a/yarn-project/foundation/src/abi/function_selector.test.ts +++ b/yarn-project/foundation/src/abi/function_selector.test.ts @@ -23,7 +23,12 @@ describe('FunctionSelector', () => { }); it('computes a function selector from signature', () => { - const res = FunctionSelector.fromSignature('transfer(address,uint256)'); - expect(res).toMatchSnapshot(); + const res = FunctionSelector.fromSignature('IS_VALID()'); + expect(res.toBuffer().toString('hex')).toMatchSnapshot(); + }); + + it('computes a function selector from a long string', () => { + const res = FunctionSelector.fromSignature('foo_and_bar_and_baz_and_foo_bar_baz_and_bar_foo'); + expect(res.toBuffer().toString('hex')).toMatchSnapshot(); }); }); diff --git a/yarn-project/foundation/src/abi/function_selector.ts b/yarn-project/foundation/src/abi/function_selector.ts index c37df24d839..7641234f9ab 100644 --- a/yarn-project/foundation/src/abi/function_selector.ts +++ b/yarn-project/foundation/src/abi/function_selector.ts @@ -1,5 +1,5 @@ import { fromHex, toBigIntBE } from '../bigint-buffer/index.js'; -import { keccak256, randomBytes } from '../crypto/index.js'; +import { poseidon2HashBytes, randomBytes } from '../crypto/index.js'; import { type Fr } from '../fields/fields.js'; import { BufferReader } from '../serialize/buffer_reader.js'; import { FieldReader } from '../serialize/field_reader.js'; @@ -73,7 +73,10 @@ export class FunctionSelector extends Selector { if (/\s/.test(signature)) { throw new Error('Signature cannot contain whitespace'); } - return FunctionSelector.fromBuffer(keccak256(Buffer.from(signature)).subarray(0, Selector.SIZE)); + const hash = poseidon2HashBytes(Buffer.from(signature)); + // We take the last Selector.SIZE big endian bytes + const bytes = hash.toBuffer().slice(-Selector.SIZE); + return FunctionSelector.fromBuffer(bytes); } /** diff --git a/yarn-project/foundation/src/buffer/buffer32.ts b/yarn-project/foundation/src/buffer/buffer32.ts index 736c0ada457..a3a1d6b6702 100644 --- a/yarn-project/foundation/src/buffer/buffer32.ts +++ b/yarn-project/foundation/src/buffer/buffer32.ts @@ -112,7 +112,25 @@ export class Buffer32 { * @param str - The TX hash in string format. * @returns A new Buffer32 object. */ + public static fromStringUnchecked(str: string): Buffer32 { + return new Buffer32(Buffer.from(str, 'hex')); + } + + /** + * Converts a string into a Buffer32 object. + * NOTE: this method includes checks for the 0x prefix and the length of the string. + * if you dont need this checks, use fromStringUnchecked instead. + * + * @param str - The TX hash in string format. + * @returns A new Buffer32 object. + */ public static fromString(str: string): Buffer32 { + if (str.startsWith('0x')) { + str = str.slice(2); + } + if (str.length !== 64) { + throw new Error(`Expected string to be 64 characters long, but was ${str.length}`); + } return new Buffer32(Buffer.from(str, 'hex')); } diff --git a/yarn-project/foundation/src/config/env_var.ts b/yarn-project/foundation/src/config/env_var.ts index 6f99551a29d..5183e2847ed 100644 --- a/yarn-project/foundation/src/config/env_var.ts +++ b/yarn-project/foundation/src/config/env_var.ts @@ -1,6 +1,6 @@ export type EnvVar = | 'AZTEC_PORT' - | 'ASSUME_PROVEN_UNTIL_BLOCK_NUMBER' + | 'ASSUME_PROVEN_THROUGH_BLOCK_NUMBER' | 'TEST_ACCOUNTS' | 'ENABLE_GAS' | 'API_PREFIX' @@ -36,8 +36,19 @@ export type EnvVar = | 'TX_GOSSIP_VERSION' | 'P2P_QUERY_FOR_IP' | 'P2P_TX_POOL_KEEP_PROVEN_FOR' + | 'P2P_GOSSIPSUB_INTERVAL_MS' + | 'P2P_GOSSIPSUB_D' + | 'P2P_GOSSIPSUB_DLO' + | 'P2P_GOSSIPSUB_DHI' + | 'P2P_GOSSIPSUB_MCACHE_LENGTH' + | 'P2P_GOSSIPSUB_MCACHE_GOSSIP' + | 'P2P_SEVERE_PEER_PENALTY_BLOCK_LENGTH' | 'P2P_REQRESP_OVERALL_REQUEST_TIMEOUT_MS' | 'P2P_REQRESP_INDIVIDUAL_REQUEST_TIMEOUT_MS' + | 'P2P_GOSSIPSUB_TX_TOPIC_WEIGHT' + | 'P2P_GOSSIPSUB_TX_INVALID_MESSAGE_DELIVERIES_WEIGHT' + | 'P2P_GOSSIPSUB_TX_INVALID_MESSAGE_DELIVERIES_DECAY' + | 'P2P_PEER_PENALTY_VALUES' | 'TELEMETRY' | 'OTEL_SERVICE_NAME' | 'OTEL_EXPORTER_OTLP_METRICS_ENDPOINT' @@ -49,7 +60,6 @@ export type EnvVar = | 'ARCHIVER_POLLING_INTERVAL_MS' | 'ARCHIVER_VIEM_POLLING_INTERVAL_MS' | 'ARCHIVER_MAX_LOGS' - | 'ARCHIVER_L1_START_BLOCK' | 'SEQ_TX_POLLING_INTERVAL_MS' | 'SEQ_MAX_TX_PER_BLOCK' | 'SEQ_MIN_TX_PER_BLOCK' @@ -109,6 +119,7 @@ export type EnvVar = | 'PXE_PROVER_ENABLED' | 'BOT_FOLLOW_CHAIN' | 'BOT_FLUSH_SETUP_TRANSACTIONS' + | 'BOT_TOKEN_CONTRACT' | 'VALIDATOR_PRIVATE_KEY' | 'VALIDATOR_DISABLED' | 'VALIDATOR_ATTESTATIONS_WAIT_TIMEOUT_MS' diff --git a/yarn-project/foundation/src/crypto/index.ts b/yarn-project/foundation/src/crypto/index.ts index 96365958e92..4a93708f498 100644 --- a/yarn-project/foundation/src/crypto/index.ts +++ b/yarn-project/foundation/src/crypto/index.ts @@ -6,6 +6,7 @@ export * from './sha256/index.js'; export * from './sha512/index.js'; export * from './pedersen/index.js'; export * from './poseidon/index.js'; +export * from './secp256k1-signer/index.js'; /** * Init the bb singleton. This constructs (if not already) the barretenberg sync api within bb.js itself. diff --git a/yarn-project/foundation/src/crypto/poseidon/index.ts b/yarn-project/foundation/src/crypto/poseidon/index.ts index ad94ab3da96..1e1274ec781 100644 --- a/yarn-project/foundation/src/crypto/poseidon/index.ts +++ b/yarn-project/foundation/src/crypto/poseidon/index.ts @@ -57,3 +57,25 @@ export function poseidon2Permutation(input: Fieldable[]): Fr[] { // assert(res.length === 4, 'Output state must be of size 4'); return res.map(o => Fr.fromBuffer(Buffer.from(o.toBuffer()))); } + +export function poseidon2HashBytes(input: Buffer): Fr { + const inputFields = []; + for (let i = 0; i < input.length; i += 31) { + const fieldBytes = Buffer.alloc(32, 0); + input.slice(i, i + 31).copy(fieldBytes); + + // Noir builds the bytes as little-endian, so we need to reverse them. + fieldBytes.reverse(); + inputFields.push(Fr.fromBuffer(fieldBytes)); + } + + return Fr.fromBuffer( + Buffer.from( + BarretenbergSync.getSingleton() + .poseidon2Hash( + inputFields.map(i => new FrBarretenberg(i.toBuffer())), // TODO(#4189): remove this stupid conversion + ) + .toBuffer(), + ), + ); +} diff --git a/yarn-project/foundation/src/crypto/secp256k1-signer/index.ts b/yarn-project/foundation/src/crypto/secp256k1-signer/index.ts new file mode 100644 index 00000000000..b64273685d2 --- /dev/null +++ b/yarn-project/foundation/src/crypto/secp256k1-signer/index.ts @@ -0,0 +1,2 @@ +export * from './secp256k1_signer.js'; +export * from './utils.js'; diff --git a/yarn-project/foundation/src/crypto/secp256k1-signer/secp256k1_signer.test.ts b/yarn-project/foundation/src/crypto/secp256k1-signer/secp256k1_signer.test.ts new file mode 100644 index 00000000000..707227208f2 --- /dev/null +++ b/yarn-project/foundation/src/crypto/secp256k1-signer/secp256k1_signer.test.ts @@ -0,0 +1,63 @@ +import { Buffer32 } from '@aztec/foundation/buffer'; +import { EthAddress } from '@aztec/foundation/eth-address'; +import { Signature } from '@aztec/foundation/eth-signature'; + +import { hashMessage, recoverAddress as viemRecoverAddress, recoverPublicKey as viemRecoverPublicKey } from 'viem'; +import { type PrivateKeyAccount, generatePrivateKey, privateKeyToAccount, publicKeyToAddress } from 'viem/accounts'; + +import { Secp256k1Signer } from './secp256k1_signer.js'; +import { recoverAddress as lightRecoverAddress, recoverPublicKey as lightRecoverPublicKey } from './utils.js'; + +/** + * Differential fuzzing implementation of viem's signer and the secp256k1 signer + */ +describe('Secp256k1Signer', () => { + let viemSigner: PrivateKeyAccount; + let lightSigner: Secp256k1Signer; + + beforeEach(() => { + const privateKey = generatePrivateKey(); + viemSigner = privateKeyToAccount(privateKey); + + lightSigner = new Secp256k1Signer(Buffer32.fromBuffer(Buffer.from(privateKey.slice(2), 'hex'))); + }); + + it('Compare implementation against viem', async () => { + const message = Buffer.from('0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef', 'hex'); + // Use to compare addresses at the end + const accountAddress = viemSigner.address; + + // We use eth hashed message as viem will automatically do this with signMessage + const ethHashedMessage = hashMessage({ raw: message }); + const ethHashedMessageBuffer = Buffer32.fromBuffer(Buffer.from(ethHashedMessage.slice(2), 'hex')); + + const viemSignature = Signature.from0xString(await viemSigner.signMessage({ message: { raw: message } })); + const lightSignature = lightSigner.sign(ethHashedMessageBuffer); + + // Check signatures match + expect(viemSignature.equals(lightSignature)).toBe(true); + + const viemPublicKey = await viemRecoverPublicKey({ hash: ethHashedMessage, signature: viemSignature.to0xString() }); + const lightPublicKey = lightRecoverPublicKey(ethHashedMessageBuffer, lightSignature); + + // Check recovered public keys match + expect(Buffer.from(viemPublicKey.slice(2), 'hex')).toEqual(lightPublicKey); + + // Get the eth address can be recovered from the message and signature + const viemPublicKeyToAddress = publicKeyToAddress(viemPublicKey); + const viemAddress = EthAddress.fromString( + await viemRecoverAddress({ hash: ethHashedMessage, signature: viemSignature.to0xString() }), + ); + const lightAddress = lightRecoverAddress( + Buffer32.fromBuffer(Buffer.from(ethHashedMessage.slice(2), 'hex')), + lightSignature, + ); + + // Check viem signer matches + expect(viemAddress.toString()).toEqual(accountAddress.toString().toLowerCase()); + expect(accountAddress.toString()).toEqual(viemPublicKeyToAddress.toString()); + + // Check light signer matches + expect(viemAddress.toString()).toEqual(lightAddress.toString()); + }); +}); diff --git a/yarn-project/foundation/src/crypto/secp256k1-signer/secp256k1_signer.ts b/yarn-project/foundation/src/crypto/secp256k1-signer/secp256k1_signer.ts new file mode 100644 index 00000000000..135b0cb3734 --- /dev/null +++ b/yarn-project/foundation/src/crypto/secp256k1-signer/secp256k1_signer.ts @@ -0,0 +1,38 @@ +import { Buffer32 } from '@aztec/foundation/buffer'; +import { type EthAddress } from '@aztec/foundation/eth-address'; +import { type Signature } from '@aztec/foundation/eth-signature'; + +import { addressFromPrivateKey, makeEthSignDigest, signMessage } from './utils.js'; + +/** + * Secp256k1Signer + * + * A class for signing messages using a secp256k1 private key. + * - This is a slim drop in replacement for an Ethereum signer, so it can be used in the same way. + * - See `utils.ts` for functions that enable recovering addresses and public keys from signatures. + */ +export class Secp256k1Signer { + public readonly address: EthAddress; + + constructor(private privateKey: Buffer32) { + this.address = addressFromPrivateKey(privateKey.buffer); + } + + sign(message: Buffer32): Signature { + return signMessage(message, this.privateKey.buffer); + } + + /** + * Sign a message using the same method as eth_sign + * @param message - The message to sign. + * @returns The signature. + */ + signMessage(message: Buffer32): Signature { + const digest = makeEthSignDigest(message); + return this.sign(digest); + } + + static random(): Secp256k1Signer { + return new Secp256k1Signer(Buffer32.random()); + } +} diff --git a/yarn-project/foundation/src/crypto/secp256k1-signer/utils.ts b/yarn-project/foundation/src/crypto/secp256k1-signer/utils.ts new file mode 100644 index 00000000000..c3be5e04b3a --- /dev/null +++ b/yarn-project/foundation/src/crypto/secp256k1-signer/utils.ts @@ -0,0 +1,99 @@ +import { secp256k1 } from '@noble/curves/secp256k1'; + +import { Buffer32 } from '../../buffer/buffer32.js'; +import { EthAddress } from '../../eth-address/index.js'; +import { Signature } from '../../eth-signature/eth_signature.js'; +import { keccak256 } from '../keccak/index.js'; + +const ETH_SIGN_PREFIX = '\x19Ethereum Signed Message:\n32'; + +// We just hash the message to make it easier to work with in the smart contract. +export function makeEthSignDigest(message: Buffer32): Buffer32 { + const prefix = Buffer.from(ETH_SIGN_PREFIX); + return Buffer32.fromBuffer(keccak256(Buffer.concat([prefix, message.buffer]))); +} + +/** + * Converts a public key to an address. + * @param publicKey - The public key to convert. + * @returns The address. + */ +function publicKeyToAddress(publicKey: Buffer): EthAddress { + const hash = keccak256(publicKey.subarray(1)); + return new EthAddress(hash.subarray(12)); +} + +/** + * Converts a private key to a public key. + * @param privateKey - The private key to convert. + * @returns The public key. + */ +export function publicKeyFromPrivateKey(privateKey: Buffer): Buffer { + return Buffer.from(secp256k1.getPublicKey(privateKey, false)); +} + +/** + * Converts a private key to an address. + * @param privateKey - The private key to convert. + * @returns The address. + */ +export function addressFromPrivateKey(privateKey: Buffer): EthAddress { + const publicKey = publicKeyFromPrivateKey(privateKey); + return publicKeyToAddress(publicKey); +} + +/** + * Recovers an address from a hash and a signature. + * @param hash - The hash to recover the address from. + * @param signature - The signature to recover the address from. + * @returns The address. + */ +export function recoverAddress(hash: Buffer32, signature: Signature): EthAddress { + const publicKey = recoverPublicKey(hash, signature); + return publicKeyToAddress(publicKey); +} + +/** + * @attribution - viem + * Converts a yParityOrV value to a recovery bit. + * @param yParityOrV - The yParityOrV value to convert. + * @returns The recovery bit. + */ +function toRecoveryBit(yParityOrV: number) { + if (yParityOrV === 0 || yParityOrV === 1) { + return yParityOrV; + } + if (yParityOrV === 27) { + return 0; + } + if (yParityOrV === 28) { + return 1; + } + throw new Error('Invalid yParityOrV value'); +} + +/** + * Signs a message using ecdsa over the secp256k1 curve. + * @param message - The message to sign. + * @param privateKey - The private key to sign the message with. + * @returns The signature. + */ +export function signMessage(message: Buffer32, privateKey: Buffer) { + const { r, s, recovery } = secp256k1.sign(message.buffer, privateKey); + return new Signature(Buffer32.fromBigInt(r), Buffer32.fromBigInt(s), recovery ? 28 : 27); +} + +/** + * Recovers a public key from a hash and a signature. + * @param hash - The hash to recover the public key from. + * @param signature - The signature to recover the public key from. + * @returns The public key. + */ +export function recoverPublicKey(hash: Buffer32, signature: Signature): Buffer { + const { r, s, v } = signature; + const recoveryBit = toRecoveryBit(v); + const sig = new secp256k1.Signature(r.toBigInt(), s.toBigInt()).addRecoveryBit(recoveryBit); + + const publicKey = sig.recoverPublicKey(hash.buffer).toHex(false); + return Buffer.from(publicKey, 'hex'); +} diff --git a/yarn-project/foundation/src/crypto/sha256/index.test.ts b/yarn-project/foundation/src/crypto/sha256/index.test.ts index 8b30661302a..f350bc035df 100644 --- a/yarn-project/foundation/src/crypto/sha256/index.test.ts +++ b/yarn-project/foundation/src/crypto/sha256/index.test.ts @@ -1,14 +1,46 @@ -import { createHash, randomBytes } from 'crypto'; +import { createHash, randomBytes, randomInt } from 'crypto'; -import { sha256 } from './index.js'; +import { sha256, sha256Compression } from './index.js'; describe('sha256', () => { - it('should correctly hash data using hash.js', () => { - const data = randomBytes(67); + describe('sha256 hash', () => { + it('should correctly hash data using hash.js', () => { + const data = randomBytes(67); - const expected = createHash('sha256').update(data).digest(); + const expected = createHash('sha256').update(data).digest(); - const result = sha256(data); - expect(result).toEqual(expected); + const result = sha256(data); + expect(result).toEqual(expected); + }); + }); + + describe('sha256 compression', () => { + it('sha256Compression works', () => { + const state = Uint32Array.from(Array.from({ length: 8 }, () => randomInt(2 ** 32))); + const inputs = Uint32Array.from(Array.from({ length: 16 }, () => randomInt(2 ** 32))); + + const output = sha256Compression(state, inputs); + expect(output.length).toEqual(8); + }); + it('sha256 compression does not work on state.length < 8', () => { + const state = Uint32Array.from(Array.from({ length: 7 }, () => randomInt(2 ** 32))); + const inputs = Uint32Array.from(Array.from({ length: 16 }, () => randomInt(2 ** 32))); + expect(() => sha256Compression(state, inputs)).toThrowError(); + }); + it('sha256 compression does not work on state.length > 8', () => { + const state = Uint32Array.from(Array.from({ length: 9 }, () => randomInt(2 ** 32))); + const inputs = Uint32Array.from(Array.from({ length: 16 }, () => randomInt(2 ** 32))); + expect(() => sha256Compression(state, inputs)).toThrowError(); + }); + it('sha256 compression does not work on inputs.length < 16', () => { + const state = Uint32Array.from(Array.from({ length: 8 }, () => randomInt(2 ** 32))); + const inputs = Uint32Array.from(Array.from({ length: 15 }, () => randomInt(2 ** 32))); + expect(() => sha256Compression(state, inputs)).toThrowError(); + }); + it('sha256 compression does not work on inputs.length > 16', () => { + const state = Uint32Array.from(Array.from({ length: 8 }, () => randomInt(2 ** 32))); + const inputs = Uint32Array.from(Array.from({ length: 17 }, () => randomInt(2 ** 32))); + expect(() => sha256Compression(state, inputs)).toThrowError(); + }); }); }); diff --git a/yarn-project/foundation/src/crypto/sha256/index.ts b/yarn-project/foundation/src/crypto/sha256/index.ts index 1ff89efda47..528adf850f1 100644 --- a/yarn-project/foundation/src/crypto/sha256/index.ts +++ b/yarn-project/foundation/src/crypto/sha256/index.ts @@ -1,14 +1,147 @@ +/* eslint-disable camelcase */ import { default as hash } from 'hash.js'; import { Fr } from '../../fields/fields.js'; import { truncateAndPad } from '../../serialize/free_funcs.js'; import { type Bufferable, serializeToBuffer } from '../../serialize/serialize.js'; -export const sha256 = (data: Buffer) => Buffer.from(hash.sha256().update(data).digest()); +export function sha256(data: Buffer) { + return Buffer.from(hash.sha256().update(data).digest()); +} -export const sha256Trunc = (data: Buffer) => truncateAndPad(sha256(data)); +export function sha256Trunc(data: Buffer) { + return truncateAndPad(sha256(data)); +} -export const sha256ToField = (data: Bufferable[]) => { +export function sha256ToField(data: Bufferable[]) { const buffer = serializeToBuffer(data); return Fr.fromBuffer(sha256Trunc(buffer)); -}; +} + +/** + * The "SHA256 Compression" operation (component operation of SHA256 "Hash"). + * WARNING: modifies `state` in place (and also returns it) + * + * This algorithm is extracted from the hash.js package + * and modified to take in an initial state to operate on. + * + * @param state - The initial state to operate on (modified in-place). 8 u32s. + * @param inputs - The inputs to compress into the state. 16 u32s. + * @returns The modified state. 8 u32s. + */ +export function sha256Compression(state: Uint32Array, inputs: Uint32Array): Uint32Array { + if (state.length !== 8) { + throw new Error('`state` argument to SHA256 compression must be of length 8'); + } + if (inputs.length !== 16) { + throw new Error('`inputs` argument to SHA256 compression must be of length 16'); + } + + const W = new Array(64); + const k = [ + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, + 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, + 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, + 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, + 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, + 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, + 0xc67178f2, + ]; + let i = 0; + for (i = 0; i < 16; i++) { + W[i] = inputs[i]; + } + for (i = 16; i < W.length; i++) { + W[i] = sum32_4( + W[i - 16], + W[i - 7], + g0_256(W[i - 15]), // Rot17, Rot18, Sh3 + g1_256(W[i - 2]), //ROt17, Rot19, Sh10 + ); + } + + let a = state[0]; + let b = state[1]; + let c = state[2]; + let d = state[3]; + let e = state[4]; + let f = state[5]; + let g = state[6]; + let h = state[7]; + + for (let i = 0; i < 64; i++) { + const T1 = sum32_5( + h, + s1_256(e), // Rot6, Rot11, Rot25 + ch32(e, f, g), + k[i], + W[i], + ); + + const T2 = sum32( + s0_256(a), // Rot2, Rot13, Rot22 + maj32(a, b, c), + ); + h = g; + g = f; + f = e; + e = sum32(d, T1); + d = c; + c = b; + b = a; + a = sum32(T1, T2); + } + + state[0] = sum32(state[0], a); + state[1] = sum32(state[1], b); + state[2] = sum32(state[2], c); + state[3] = sum32(state[3], d); + state[4] = sum32(state[4], e); + state[5] = sum32(state[5], f); + state[6] = sum32(state[6], g); + state[7] = sum32(state[7], h); + return state; +} + +// SHA256 HELPER FUNCTIONS (from hash.js package) + +function rotr32(w: number, b: number) { + return (w >>> b) | (w << (32 - b)); +} + +function sum32(a: number, b: number) { + return (a + b) >>> 0; +} + +function sum32_4(a: number, b: number, c: number, d: number) { + return (a + b + c + d) >>> 0; +} + +function sum32_5(a: number, b: number, c: number, d: number, e: number) { + return (a + b + c + d + e) >>> 0; +} + +function ch32(x: number, y: number, z: number) { + return (x & y) ^ (~x & z); +} + +function maj32(x: number, y: number, z: number) { + return (x & y) ^ (x & z) ^ (y & z); +} + +function s0_256(x: number) { + return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22); +} + +function s1_256(x: number) { + return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25); +} + +function g0_256(x: number) { + return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3); +} + +function g1_256(x: number) { + return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10); +} diff --git a/yarn-project/foundation/src/eth-signature/eth_signature.test.ts b/yarn-project/foundation/src/eth-signature/eth_signature.test.ts new file mode 100644 index 00000000000..d8fc489a675 --- /dev/null +++ b/yarn-project/foundation/src/eth-signature/eth_signature.test.ts @@ -0,0 +1,30 @@ +import { Buffer32 } from '@aztec/foundation/buffer'; +import { Secp256k1Signer, recoverAddress } from '@aztec/foundation/crypto'; +import { Fr } from '@aztec/foundation/fields'; + +import { Signature } from './eth_signature.js'; + +const randomSigner = () => { + const pk = Buffer32.random(); + return new Secp256k1Signer(pk); +}; + +describe('Signature serialization / deserialization', () => { + it('Should serialize / deserialize', () => { + const signer = randomSigner(); + + const originalMessage = Fr.random(); + const message = Buffer32.fromField(originalMessage); + + const signature = signer.sign(message); + + // Serde + const serialized = signature.toBuffer(); + const deserialized = Signature.fromBuffer(serialized); + expect(deserialized).toEqual(signature); + + // Recover signature + const sender = recoverAddress(message, signature); + expect(sender).toEqual(signer.address); + }); +}); diff --git a/yarn-project/circuit-types/src/p2p/signature.ts b/yarn-project/foundation/src/eth-signature/eth_signature.ts similarity index 93% rename from yarn-project/circuit-types/src/p2p/signature.ts rename to yarn-project/foundation/src/eth-signature/eth_signature.ts index 41870e59c62..2808ea63ce3 100644 --- a/yarn-project/circuit-types/src/p2p/signature.ts +++ b/yarn-project/foundation/src/eth-signature/eth_signature.ts @@ -32,6 +32,7 @@ export class Signature { static fromBuffer(buf: Buffer | BufferReader): Signature { const reader = BufferReader.asReader(buf); + const r = reader.readObject(Buffer32); const s = reader.readObject(Buffer32); const v = reader.readNumber(); @@ -41,18 +42,6 @@ export class Signature { return new Signature(r, s, v, isEmpty); } - toBuffer(): Buffer { - return serializeToBuffer([this.r, this.s, this.v]); - } - - static empty(): Signature { - return new Signature(Buffer32.ZERO, Buffer32.ZERO, 0, true); - } - - to0xString(): `0x${string}` { - return `0x${this.r.toString()}${this.s.toString()}${this.v.toString(16)}`; - } - /** * A seperate method exists for this as when signing locally with viem, as when * parsing from viem, we can expect the v value to be a u8, rather than our @@ -71,6 +60,22 @@ export class Signature { return new Signature(r, s, v, isEmpty); } + static empty(): Signature { + return new Signature(Buffer32.ZERO, Buffer32.ZERO, 0, true); + } + + equals(other: Signature): boolean { + return this.r.equals(other.r) && this.s.equals(other.s) && this.v === other.v && this.isEmpty === other.isEmpty; + } + + toBuffer(): Buffer { + return serializeToBuffer([this.r, this.s, this.v]); + } + + to0xString(): `0x${string}` { + return `0x${this.r.toString()}${this.s.toString()}${this.v.toString(16)}`; + } + /** * Return the signature with `0x${string}` encodings for r and s */ diff --git a/yarn-project/foundation/src/eth-signature/index.ts b/yarn-project/foundation/src/eth-signature/index.ts new file mode 100644 index 00000000000..73bc59dbe1a --- /dev/null +++ b/yarn-project/foundation/src/eth-signature/index.ts @@ -0,0 +1 @@ +export * from './eth_signature.js'; diff --git a/yarn-project/foundation/src/fields/point.ts b/yarn-project/foundation/src/fields/point.ts index 458252bd87a..3f3620f9348 100644 --- a/yarn-project/foundation/src/fields/point.ts +++ b/yarn-project/foundation/src/fields/point.ts @@ -1,5 +1,6 @@ import { toBigIntBE } from '../bigint-buffer/index.js'; -import { poseidon2Hash, randomBoolean } from '../crypto/index.js'; +import { poseidon2Hash } from '../crypto/poseidon/index.js'; +import { randomBoolean } from '../crypto/random/index.js'; import { BufferReader, FieldReader, serializeToBuffer } from '../serialize/index.js'; import { Fr } from './fields.js'; diff --git a/yarn-project/foundation/src/index.ts b/yarn-project/foundation/src/index.ts index 7a899eba520..78694f262f8 100644 --- a/yarn-project/foundation/src/index.ts +++ b/yarn-project/foundation/src/index.ts @@ -30,3 +30,4 @@ export * as worker from './worker/index.js'; export * as testing from './testing/index.js'; export * as config from './config/index.js'; export * as buffer from './buffer/index.js'; +export * as ethSignature from './eth-signature/index.js'; diff --git a/yarn-project/foundation/src/json-rpc/server/json_rpc_server.ts b/yarn-project/foundation/src/json-rpc/server/json_rpc_server.ts index 60d07291cc0..178d1c5bdc3 100644 --- a/yarn-project/foundation/src/json-rpc/server/json_rpc_server.ts +++ b/yarn-project/foundation/src/json-rpc/server/json_rpc_server.ts @@ -6,6 +6,7 @@ import compress from 'koa-compress'; import Router from 'koa-router'; import { createDebugLogger } from '../../log/index.js'; +import { promiseWithResolvers } from '../../promise/utils.js'; import { type JsonClassConverterInput, type StringClassConverterInput } from '../class_converter.js'; import { convertBigintsInObj } from '../convert.js'; import { type ClassMaps, JsonProxy } from './json_proxy.js'; @@ -19,6 +20,13 @@ export class JsonRpcServer { * The proxy object. */ public proxy: JsonProxy; + + /** + * The HTTP server accepting remote requests. + * This member field is initialized when the server is started. + */ + private httpServer?: http.Server; + constructor( private handler: object, private stringClassMap: StringClassConverterInput, @@ -141,9 +149,32 @@ export class JsonRpcServer { * @param port - Port number. * @param prefix - Prefix string. */ - public start(port: number, prefix = '') { - const httpServer = http.createServer(this.getApp(prefix).callback()); - httpServer.listen(port); + public start(port: number, prefix = ''): void { + if (this.httpServer) { + throw new Error('Server is already listening'); + } + + this.httpServer = http.createServer(this.getApp(prefix).callback()); + this.httpServer.listen(port); + } + + /** + * Stops the HTTP server + */ + public stop(): Promise { + if (!this.httpServer) { + return Promise.resolve(); + } + + const { promise, resolve, reject } = promiseWithResolvers(); + this.httpServer.close(err => { + if (err) { + reject(err); + } else { + resolve(); + } + }); + return promise; } /** diff --git a/yarn-project/foundation/src/serialize/buffer_reader.test.ts b/yarn-project/foundation/src/serialize/buffer_reader.test.ts index 0845ff591e2..bbcb71ee0ba 100644 --- a/yarn-project/foundation/src/serialize/buffer_reader.test.ts +++ b/yarn-project/foundation/src/serialize/buffer_reader.test.ts @@ -3,7 +3,7 @@ import { jest } from '@jest/globals'; import { randomBytes } from '../crypto/index.js'; import { Fq, Fr } from '../fields/fields.js'; import { BufferReader } from './buffer_reader.js'; -import { serializeArrayOfBufferableToVector } from './serialize.js'; +import { serializeArrayOfBufferableToVector, serializeToBuffer } from './serialize.js'; const ARRAY = Array.from(Array(32)).map((_, idx) => (idx % 2 === 0 ? 0 : 1)); const BUFFER = Buffer.from(ARRAY); @@ -42,6 +42,19 @@ describe('buffer reader', () => { }); }); + describe('readUInt256', () => { + it('should read UInt256 from buffer', () => { + // mix in some non-UInt256 values + const content = [1, BigInt(Number.MAX_SAFE_INTEGER) + 1n, 2, BigInt(Number.MAX_SAFE_INTEGER) + 42n, 3]; + const myReader = new BufferReader(serializeToBuffer(content)); + expect(myReader.readNumber()).toEqual(content[0]); + expect(myReader.readUInt256()).toEqual(content[1]); + expect(myReader.readNumber()).toEqual(content[2]); + expect(myReader.readUInt256()).toEqual(content[3]); + expect(myReader.readNumber()).toEqual(content[4]); + }); + }); + describe('readFr', () => { it('should get Fr from buffer', () => { expect(Fr.fromBuffer(bufferReader)).toEqual(Fr.fromBuffer(BUFFER)); diff --git a/yarn-project/foundation/src/serialize/buffer_reader.ts b/yarn-project/foundation/src/serialize/buffer_reader.ts index caee2973dfc..d183e8fd39c 100644 --- a/yarn-project/foundation/src/serialize/buffer_reader.ts +++ b/yarn-project/foundation/src/serialize/buffer_reader.ts @@ -70,6 +70,26 @@ export class BufferReader { return result as Tuple; } + /** + * Reads a 256-bit unsigned integer from the buffer at the current index position. + * Updates the index position by 32 bytes after reading the number. + * + * Assumes the number is stored in big-endian format. + * + * @returns The read 256 bit value as a bigint. + */ + public readUInt256(): bigint { + this.#rangeCheck(32); + + let result = BigInt(0); + for (let i = 0; i < 32; i++) { + result = (result << BigInt(8)) | BigInt(this.buffer[this.index + i]); + } + + this.index += 32; + return result; + } + /** * Reads a 16-bit unsigned integer from the buffer at the current index position. * Updates the index position by 2 bytes after reading the number. diff --git a/yarn-project/foundation/src/serialize/serialize.ts b/yarn-project/foundation/src/serialize/serialize.ts index ae305070714..6698a7081e2 100644 --- a/yarn-project/foundation/src/serialize/serialize.ts +++ b/yarn-project/foundation/src/serialize/serialize.ts @@ -242,7 +242,7 @@ export function toFriendlyJSON(obj: object): string { ).toFriendlyJSON ) { return value.toFriendlyJSON(); - } else if (value && value.type && ['Fr', 'Fq', 'AztecAddress'].includes(value.type)) { + } else if (value && value.type && ['Fr', 'Fq', 'AztecAddress', 'EthAddress'].includes(value.type)) { return value.value; } else { return value; diff --git a/yarn-project/foundation/src/serialize/types.test.ts b/yarn-project/foundation/src/serialize/types.test.ts new file mode 100644 index 00000000000..8e8dbad0949 --- /dev/null +++ b/yarn-project/foundation/src/serialize/types.test.ts @@ -0,0 +1,13 @@ +import { makeTuple } from '../array/array.js'; +import { type Tuple, mapTuple } from './types.js'; + +describe('tuple', () => { + it('types mapTuple correctly', () => { + const tuple: Tuple = makeTuple(3, i => i); + // @ts-expect-error should not allow an argument of a different type + mapTuple(tuple, (i: string) => i); + + const mapped: Tuple = mapTuple(tuple, (i: number) => `${i}`); + expect(mapped).toEqual(['0', '1', '2']); + }); +}); diff --git a/yarn-project/foundation/src/serialize/types.ts b/yarn-project/foundation/src/serialize/types.ts index af70fd793d0..0f09f56103c 100644 --- a/yarn-project/foundation/src/serialize/types.ts +++ b/yarn-project/foundation/src/serialize/types.ts @@ -35,6 +35,6 @@ type MapTuple any> = { * @see https://github.com/microsoft/TypeScript/issues/29841. * @param array - A tuple array. */ -export function mapTuple any>(tuple: T, fn: F): MapTuple { +export function mapTuple any>(tuple: T, fn: F): MapTuple { return tuple.map(fn) as MapTuple; } diff --git a/yarn-project/foundation/src/testing/index.ts b/yarn-project/foundation/src/testing/index.ts index e7616a77c78..b39430dd6f0 100644 --- a/yarn-project/foundation/src/testing/index.ts +++ b/yarn-project/foundation/src/testing/index.ts @@ -1,2 +1,3 @@ export * from './test_data.js'; export * from './snapshot_serializer.js'; +export * from './port_allocator.js'; diff --git a/yarn-project/foundation/src/testing/port_allocator.ts b/yarn-project/foundation/src/testing/port_allocator.ts new file mode 100644 index 00000000000..d1fa4c956f8 --- /dev/null +++ b/yarn-project/foundation/src/testing/port_allocator.ts @@ -0,0 +1,31 @@ +import net from 'net'; + +/** + * Get a random port that is free to use. + * Returns undefined if it fails to get a port. + * + * @attribution: adapted from https://stackoverflow.com/a/71178451 + * + * @returns a random port that is free to use. + */ +export function getRandomPort(): Promise { + return new Promise(resolve => { + const server = net.createServer(); + server.listen(0, () => { + const address = server.address(); + if (address && typeof address === 'object' && 'port' in address) { + const port = address.port; + server.close(() => { + resolve(port); + }); + } else { + server.close(() => { + resolve(undefined); + }); + } + }); + server.on('error', () => { + resolve(undefined); + }); + }); +} diff --git a/yarn-project/foundation/src/trees/index.ts b/yarn-project/foundation/src/trees/index.ts index 60b025a9e13..ccaf59eb8fe 100644 --- a/yarn-project/foundation/src/trees/index.ts +++ b/yarn-project/foundation/src/trees/index.ts @@ -1,3 +1,5 @@ +export * from './unbalanced_merkle_root.js'; + /** * A leaf of an indexed merkle tree. */ diff --git a/yarn-project/foundation/src/trees/unbalanced_merkle_root.ts b/yarn-project/foundation/src/trees/unbalanced_merkle_root.ts new file mode 100644 index 00000000000..2df6765afc7 --- /dev/null +++ b/yarn-project/foundation/src/trees/unbalanced_merkle_root.ts @@ -0,0 +1,52 @@ +import { padArrayEnd } from '@aztec/foundation/collection'; +import { sha256Trunc } from '@aztec/foundation/crypto'; + +/** + * Computes the merkle root for an unbalanced tree. + * + * @dev Adapted from proving-state.ts -> findMergeLevel and unbalanced_tree.ts. + * Calculates the tree upwards layer by layer until we reach the root. + * The L1 calculation instead computes the tree from right to left (slightly cheaper gas). + * TODO: A more thorough investigation of which method is cheaper, then use that method everywhere. + */ +export function computeUnbalancedMerkleRoot(leaves: Buffer[], emptyLeaf?: Buffer, hasher = sha256Trunc): Buffer { + // Pad leaves to 2 + if (leaves.length < 2) { + if (emptyLeaf === undefined) { + throw new Error('Cannot compute a Merkle root with less than 2 leaves'); + } else { + leaves = padArrayEnd(leaves, emptyLeaf, 2); + } + } + + const depth = Math.ceil(Math.log2(leaves.length)); + let [layerWidth, nodeToShift] = + leaves.length & 1 ? [leaves.length - 1, leaves[leaves.length - 1]] : [leaves.length, Buffer.alloc(0)]; + // Allocate this layer's leaves and init the next layer up + let thisLayer = leaves.slice(0, layerWidth); + let nextLayer = []; + for (let i = 0; i < depth; i++) { + for (let j = 0; j < layerWidth; j += 2) { + // Store the hash of each pair one layer up + nextLayer[j / 2] = hasher(Buffer.concat([thisLayer[j], thisLayer[j + 1]])); + } + layerWidth /= 2; + if (layerWidth & 1) { + if (nodeToShift.length) { + // If the next layer has odd length, and we have a node that needs to be shifted up, add it here + nextLayer.push(nodeToShift); + layerWidth += 1; + nodeToShift = Buffer.alloc(0); + } else { + // If we don't have a node waiting to be shifted, store the next layer's final node to be shifted + layerWidth -= 1; + nodeToShift = nextLayer[layerWidth]; + } + } + // reset the layers + thisLayer = nextLayer; + nextLayer = []; + } + // return the root + return thisLayer[0]; +} diff --git a/yarn-project/ivc-integration/package.json b/yarn-project/ivc-integration/package.json index 2976b6de2d8..ed6eabfd7d0 100644 --- a/yarn-project/ivc-integration/package.json +++ b/yarn-project/ivc-integration/package.json @@ -66,11 +66,13 @@ }, "devDependencies": { "@aztec/bb-prover": "workspace:^", + "@aztec/simulator": "workspace:^", "@jest/globals": "^29.5.0", "@msgpack/msgpack": "^3.0.0-beta2", "@types/jest": "^29.5.0", "@types/node": "^18.7.23", "jest": "^29.5.0", + "jest-mock-extended": "^4.0.0-beta1", "levelup": "^5.1.1", "memdown": "^6.1.1", "ts-node": "^10.9.1", diff --git a/yarn-project/ivc-integration/src/avm_integration.test.ts b/yarn-project/ivc-integration/src/avm_integration.test.ts new file mode 100644 index 00000000000..c2bb09e3675 --- /dev/null +++ b/yarn-project/ivc-integration/src/avm_integration.test.ts @@ -0,0 +1,200 @@ +import { + type BBSuccess, + BB_RESULT, + generateAvmProof, + generateProof, + getPublicInputs, + verifyProof, +} from '@aztec/bb-prover'; +import { AvmCircuitInputs, FunctionSelector, Gas, GlobalVariables } from '@aztec/circuits.js'; +import { + AVM_PROOF_LENGTH_IN_FIELDS, + AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS, + PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH, +} from '@aztec/circuits.js/constants'; +import { Fr } from '@aztec/foundation/fields'; +import { createDebugLogger } from '@aztec/foundation/log'; +import { BufferReader } from '@aztec/foundation/serialize'; +import { type FixedLengthArray } from '@aztec/noir-protocol-circuits-types/types'; +import { AvmSimulator, type PublicContractsDB, PublicSideEffectTrace, type WorldStateDB } from '@aztec/simulator'; +import { + getAvmTestContractBytecode, + initContext, + initExecutionEnvironment, + initPersistableStateManager, + resolveAvmTestContractAssertionMessage, +} from '@aztec/simulator/avm/fixtures'; +import { SerializableContractInstance } from '@aztec/types/contracts'; + +import { jest } from '@jest/globals'; +import fs from 'fs/promises'; +import { mock } from 'jest-mock-extended'; +import { tmpdir } from 'node:os'; +import os from 'os'; +import path from 'path'; +import { fileURLToPath } from 'url'; + +import { MockPublicKernelCircuit, witnessGenMockPublicKernelCircuit } from './index.js'; + +// Auto-generated types from noir are not in camel case. +/* eslint-disable camelcase */ + +jest.setTimeout(180_000); + +const logger = createDebugLogger('aztec:avm-integration'); + +describe('AVM Integration', () => { + let bbWorkingDirectory: string; + let bbBinaryPath: string; + + beforeEach(async () => { + //Create a temp working dir + bbWorkingDirectory = await fs.mkdtemp(path.join(os.tmpdir(), 'bb-avm-integration-')); + bbBinaryPath = path.join(path.dirname(fileURLToPath(import.meta.url)), '../../../barretenberg/cpp/build/bin', 'bb'); + }); + + async function createHonkProof(witness: Uint8Array, bytecode: string): Promise { + const witnessFileName = path.join(bbWorkingDirectory, 'witnesses.gz'); + await fs.writeFile(witnessFileName, witness); + + const provingResult = await generateProof( + bbBinaryPath, + bbWorkingDirectory, + 'mock-public-kernel', + Buffer.from(bytecode, 'base64'), + witnessFileName, + 'ultra_honk', + logger.info, + ); + + expect(provingResult.status).toBe(BB_RESULT.SUCCESS); + return provingResult as BBSuccess; + } + + it('Should generate and verify an ultra honk proof from an AVM verification', async () => { + const bbSuccess = await proveAvmTestContract('new_note_hash', [new Fr(1)]); + + const avmProofPath = bbSuccess.proofPath; + const avmVkPath = bbSuccess.vkPath; + expect(avmProofPath).toBeDefined(); + expect(avmVkPath).toBeDefined(); + + // Read the binary proof + const avmProofBuffer = await fs.readFile(avmProofPath!); + const reader = BufferReader.asReader(avmProofBuffer); + reader.readArray(PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH, Fr); + const calldataSize = Fr.fromBuffer(reader).toNumber(); + reader.readArray(calldataSize, Fr); + const returnDataSize = Fr.fromBuffer(reader).toNumber(); + reader.readArray(returnDataSize, Fr); + + const proof: Fr[] = []; + while (!reader.isEmpty()) { + proof.push(Fr.fromBuffer(reader)); + } + expect(proof.length).toBe(AVM_PROOF_LENGTH_IN_FIELDS); + + // Read the key + const vkBuffer = await fs.readFile(path.join(avmVkPath!, 'vk')); + const vkReader = BufferReader.asReader(vkBuffer); + const vk = vkReader.readArray(AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS, Fr); + expect(vk.length).toBe(AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS); + + const witGenResult = await witnessGenMockPublicKernelCircuit({ + verification_key: vk.map(x => x.toString()) as FixedLengthArray< + string, + typeof AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS + >, + proof: proof.map(x => x.toString()) as FixedLengthArray, + }); + + await createHonkProof(witGenResult.witness, MockPublicKernelCircuit.bytecode); + + const verifyResult = await verifyProof( + bbBinaryPath, + path.join(bbWorkingDirectory, 'proof'), + path.join(bbWorkingDirectory, 'vk'), + 'ultra_honk', + logger.info, + ); + + expect(verifyResult.status).toBe(BB_RESULT.SUCCESS); + }); +}); + +// Helper + +const proveAvmTestContract = async ( + functionName: string, + calldata: Fr[] = [], + assertionErrString?: string, +): Promise => { + const startSideEffectCounter = 0; + const functionSelector = FunctionSelector.random(); + const globals = GlobalVariables.empty(); + const environment = initExecutionEnvironment({ functionSelector, calldata, globals }); + + const contractsDb = mock(); + const contractInstance = new SerializableContractInstance({ + version: 1, + salt: new Fr(0x123), + deployer: new Fr(0x456), + contractClassId: new Fr(0x789), + initializationHash: new Fr(0x101112), + publicKeysHash: new Fr(0x161718), + }).withAddress(environment.address); + contractsDb.getContractInstance.mockResolvedValue(await Promise.resolve(contractInstance)); + + const worldStateDB = mock(); + const storageValue = new Fr(5); + worldStateDB.storageRead.mockResolvedValue(await Promise.resolve(storageValue)); + + const trace = new PublicSideEffectTrace(startSideEffectCounter); + const persistableState = initPersistableStateManager({ worldStateDB, trace }); + const context = initContext({ env: environment, persistableState }); + const nestedCallBytecode = getAvmTestContractBytecode('add_args_return'); + jest.spyOn(worldStateDB, 'getBytecode').mockResolvedValue(nestedCallBytecode); + + const startGas = new Gas(context.machineState.gasLeft.daGas, context.machineState.gasLeft.l2Gas); + + // Use a simple contract that emits a side effect + const bytecode = getAvmTestContractBytecode(functionName); + // The paths for the barretenberg binary and the write path are hardcoded for now. + const bbPath = path.resolve('../../barretenberg/cpp/build/bin/bb'); + const bbWorkingDirectory = await fs.mkdtemp(path.join(tmpdir(), 'bb-')); + // First we simulate (though it's not needed in this simple case). + const simulator = new AvmSimulator(context); + const avmResult = await simulator.executeBytecode(bytecode); + + if (assertionErrString == undefined) { + expect(avmResult.reverted).toBe(false); + } else { + // Explicit revert when an assertion failed. + expect(avmResult.reverted).toBe(true); + expect(avmResult.revertReason).toBeDefined(); + expect(resolveAvmTestContractAssertionMessage(functionName, avmResult.revertReason!)).toContain(assertionErrString); + } + + const pxResult = trace.toPublicExecutionResult( + environment, + startGas, + /*endGasLeft=*/ Gas.from(context.machineState.gasLeft), + /*bytecode=*/ simulator.getBytecode()!, + avmResult, + functionName, + ); + + const avmCircuitInputs = new AvmCircuitInputs( + functionName, + /*bytecode=*/ simulator.getBytecode()!, // uncompressed bytecode + /*calldata=*/ context.environment.calldata, + /*publicInputs=*/ getPublicInputs(pxResult), + /*avmHints=*/ pxResult.avmCircuitHints, + ); + + // Then we prove. + const proofRes = await generateAvmProof(bbPath, bbWorkingDirectory, avmCircuitInputs, logger.info); + expect(proofRes.status).toEqual(BB_RESULT.SUCCESS); + + return proofRes as BBSuccess; +}; diff --git a/yarn-project/ivc-integration/src/client_ivc_integration.test.ts b/yarn-project/ivc-integration/src/client_ivc_integration.test.ts index bf2218ddeed..7ec2e0d03ff 100644 --- a/yarn-project/ivc-integration/src/client_ivc_integration.test.ts +++ b/yarn-project/ivc-integration/src/client_ivc_integration.test.ts @@ -10,18 +10,13 @@ import path from 'path'; import { fileURLToPath } from 'url'; import { - MOCK_MAX_COMMITMENTS_PER_TX, MockAppCreatorCircuit, MockAppReaderCircuit, MockPrivateKernelInitCircuit, MockPrivateKernelInnerCircuit, - MockPrivateKernelResetCircuit, - MockPrivateKernelTailCircuit, witnessGenCreatorAppMockCircuit, witnessGenMockPrivateKernelInitCircuit, witnessGenMockPrivateKernelInnerCircuit, - witnessGenMockPrivateKernelResetCircuit, - witnessGenMockPrivateKernelTailCircuit, witnessGenReaderAppMockCircuit, } from './index.js'; @@ -79,16 +74,22 @@ describe('Client IVC Integration', () => { tx, }); - const tailWitnessGenResult = await witnessGenMockPrivateKernelTailCircuit({ - prev_kernel_public_inputs: initWitnessGenResult.publicInputs, - }); + // TODO(https://github.com/AztecProtocol/barretenberg/issues/1101): While using auto_veriy_mode, we can only process an even + // number of circuits into the IVC. This restriction can be removed once we remove use of auto_verify_mode. + // const tailWitnessGenResult = await witnessGenMockPrivateKernelTailCircuit({ + // prev_kernel_public_inputs: initWitnessGenResult.publicInputs, + // }); // Create client IVC proof const bytecodes = [ MockAppCreatorCircuit.bytecode, MockPrivateKernelInitCircuit.bytecode, - MockPrivateKernelTailCircuit.bytecode, + // MockPrivateKernelTailCircuit.bytecode, + ]; + const witnessStack = [ + appWitnessGenResult.witness, + initWitnessGenResult.witness, + // tailWitnessGenResult.witness ]; - const witnessStack = [appWitnessGenResult.witness, initWitnessGenResult.witness, tailWitnessGenResult.witness]; const proof = await createClientIvcProof(witnessStack, bytecodes); await proof.writeToOutputDirectory(bbWorkingDirectory); @@ -110,7 +111,7 @@ describe('Client IVC Integration', () => { }; // Witness gen app and kernels const creatorAppWitnessGenResult = await witnessGenCreatorAppMockCircuit({ commitments_to_create: ['0x1', '0x2'] }); - const readerAppWitnessGenRult = await witnessGenReaderAppMockCircuit({ commitments_to_read: ['0x2', '0x0'] }); + const readerAppWitnessGenResult = await witnessGenReaderAppMockCircuit({ commitments_to_read: ['0x2', '0x0'] }); const initWitnessGenResult = await witnessGenMockPrivateKernelInitCircuit({ app_inputs: creatorAppWitnessGenResult.publicInputs, @@ -118,22 +119,24 @@ describe('Client IVC Integration', () => { }); const innerWitnessGenResult = await witnessGenMockPrivateKernelInnerCircuit({ prev_kernel_public_inputs: initWitnessGenResult.publicInputs, - app_inputs: readerAppWitnessGenRult.publicInputs, + app_inputs: readerAppWitnessGenResult.publicInputs, }); - const resetWitnessGenResult = await witnessGenMockPrivateKernelResetCircuit({ - prev_kernel_public_inputs: innerWitnessGenResult.publicInputs, - commitment_read_hints: [ - '0x1', // Reader reads commitment 0x2, which is at index 1 of the created commitments - MOCK_MAX_COMMITMENTS_PER_TX.toString(), // Pad with no-ops - MOCK_MAX_COMMITMENTS_PER_TX.toString(), - MOCK_MAX_COMMITMENTS_PER_TX.toString(), - ], - }); + // TODO: https://github.com/AztecProtocol/barretenberg/issues/1111 - Add back reset and tail when this is fixed. - const tailWitnessGenResult = await witnessGenMockPrivateKernelTailCircuit({ - prev_kernel_public_inputs: resetWitnessGenResult.publicInputs, - }); + // const resetWitnessGenResult = await witnessGenMockPrivateKernelResetCircuit({ + // prev_kernel_public_inputs: innerWitnessGenResult.publicInputs, + // commitment_read_hints: [ + // '0x1', // Reader reads commitment 0x2, which is at index 1 of the created commitments + // MOCK_MAX_COMMITMENTS_PER_TX.toString(), // Pad with no-ops + // MOCK_MAX_COMMITMENTS_PER_TX.toString(), + // MOCK_MAX_COMMITMENTS_PER_TX.toString(), + // ], + // }); + + // const tailWitnessGenResult = await witnessGenMockPrivateKernelTailCircuit({ + // prev_kernel_public_inputs: resetWitnessGenResult.publicInputs, + // }); // Create client IVC proof const bytecodes = [ @@ -141,16 +144,16 @@ describe('Client IVC Integration', () => { MockPrivateKernelInitCircuit.bytecode, MockAppReaderCircuit.bytecode, MockPrivateKernelInnerCircuit.bytecode, - MockPrivateKernelResetCircuit.bytecode, - MockPrivateKernelTailCircuit.bytecode, + // MockPrivateKernelResetCircuit.bytecode, + // MockPrivateKernelTailCircuit.bytecode, ]; const witnessStack = [ creatorAppWitnessGenResult.witness, initWitnessGenResult.witness, - readerAppWitnessGenRult.witness, + readerAppWitnessGenResult.witness, innerWitnessGenResult.witness, - resetWitnessGenResult.witness, - tailWitnessGenResult.witness, + // resetWitnessGenResult.witness, + // tailWitnessGenResult.witness, ]; const proof = await createClientIvcProof(witnessStack, bytecodes); diff --git a/yarn-project/ivc-integration/src/index.ts b/yarn-project/ivc-integration/src/index.ts index 820e2110a51..dac0fd16ea8 100644 --- a/yarn-project/ivc-integration/src/index.ts +++ b/yarn-project/ivc-integration/src/index.ts @@ -6,6 +6,7 @@ import MockPrivateKernelInitCircuit from '../artifacts/mock_private_kernel_init. import MockPrivateKernelInnerCircuit from '../artifacts/mock_private_kernel_inner.json' assert { type: 'json' }; import MockPrivateKernelResetCircuit from '../artifacts/mock_private_kernel_reset.json' assert { type: 'json' }; import MockPrivateKernelTailCircuit from '../artifacts/mock_private_kernel_tail.json' assert { type: 'json' }; +import MockPublicKernelCircuit from '../artifacts/mock_public_kernel.json' assert { type: 'json' }; import type { AppCreatorInputType, AppPublicInputs, @@ -15,7 +16,9 @@ import type { MockPrivateKernelInnerInputType, MockPrivateKernelResetInputType, MockPrivateKernelTailInputType, + MockPublicKernelInputType, PrivateKernelPublicInputs, + u8, } from './types/index.js'; // Re export the circuit jsons @@ -26,6 +29,7 @@ export { MockPrivateKernelInnerCircuit, MockPrivateKernelResetCircuit, MockPrivateKernelTailCircuit, + MockPublicKernelCircuit, }; export const MOCK_MAX_COMMITMENTS_PER_TX = 4; @@ -101,6 +105,17 @@ export async function witnessGenMockPrivateKernelTailCircuit( const { witness, returnValue } = await program.execute(args, foreignCallHandler); return { witness, - publicInputs: returnValue as PrivateKernelPublicInputs, + publicInputs: returnValue as KernelPublicInputs, + }; +} + +export async function witnessGenMockPublicKernelCircuit( + args: MockPublicKernelInputType, +): Promise> { + const program = new Noir(MockPublicKernelCircuit); + const { witness, returnValue } = await program.execute(args, foreignCallHandler); + return { + witness, + publicInputs: returnValue as u8, }; } diff --git a/yarn-project/ivc-integration/src/scripts/generate_ts_from_abi.ts b/yarn-project/ivc-integration/src/scripts/generate_ts_from_abi.ts index 43da58670c1..d020c891fa5 100644 --- a/yarn-project/ivc-integration/src/scripts/generate_ts_from_abi.ts +++ b/yarn-project/ivc-integration/src/scripts/generate_ts_from_abi.ts @@ -14,6 +14,7 @@ const circuits = [ 'mock_private_kernel_inner', 'mock_private_kernel_reset', 'mock_private_kernel_tail', + 'mock_public_kernel', ]; const main = async () => { diff --git a/yarn-project/ivc-integration/tsconfig.json b/yarn-project/ivc-integration/tsconfig.json index 622822f4e16..1b3f38e75d3 100644 --- a/yarn-project/ivc-integration/tsconfig.json +++ b/yarn-project/ivc-integration/tsconfig.json @@ -18,6 +18,9 @@ }, { "path": "../bb-prover" + }, + { + "path": "../simulator" } ], "include": ["src", "artifacts/*.d.json.ts", "artifacts/**/*.d.json.ts"] diff --git a/yarn-project/key-store/src/key_store.test.ts b/yarn-project/key-store/src/key_store.test.ts index 218da7ff548..25fcdea0a55 100644 --- a/yarn-project/key-store/src/key_store.test.ts +++ b/yarn-project/key-store/src/key_store.test.ts @@ -1,11 +1,4 @@ -import { - AztecAddress, - Fq, - Fr, - computeAppNullifierSecretKey, - deriveKeys, - derivePublicKeyFromSecretKey, -} from '@aztec/circuits.js'; +import { AztecAddress, Fr, deriveKeys, derivePublicKeyFromSecretKey } from '@aztec/circuits.js'; import { openTmpStore } from '@aztec/kv-store/utils'; import { KeyStore } from './key_store.js'; @@ -88,83 +81,4 @@ describe('KeyStore', () => { `"0x1d1d920024dd64e019c23de36d27aefe4d9d4d05983b99cf85bea9e85fd60020"`, ); }); - - it('nullifier key rotation tests', async () => { - const keyStore = new KeyStore(openTmpStore()); - - // Arbitrary fixed values - const sk = new Fr(8923n); - const partialAddress = new Fr(243523n); - - const { address: accountAddress } = await keyStore.addAccount(sk, partialAddress); - expect(accountAddress.toString()).toMatchInlineSnapshot( - `"0x2321fcb3bd7447b178138746ee78f6fbb1e2a2aa8ff542f51420b884bab641cc"`, - ); - - // Arbitrary fixed values - const newMasterNullifierSecretKeys = [new Fq(420n), new Fq(69n), new Fq(42069n)]; - const newDerivedMasterNullifierPublicKeys = [ - derivePublicKeyFromSecretKey(newMasterNullifierSecretKeys[0]), - derivePublicKeyFromSecretKey(newMasterNullifierSecretKeys[1]), - derivePublicKeyFromSecretKey(newMasterNullifierSecretKeys[2]), - ]; - - const newComputedMasterNullifierPublicKeyHashes = [ - newDerivedMasterNullifierPublicKeys[0].hash(), - newDerivedMasterNullifierPublicKeys[1].hash(), - newDerivedMasterNullifierPublicKeys[2].hash(), - ]; - - // We rotate our nullifier key - await keyStore.rotateMasterNullifierKey(accountAddress, newMasterNullifierSecretKeys[0]); - await keyStore.rotateMasterNullifierKey(accountAddress, newMasterNullifierSecretKeys[1]); - await keyStore.rotateMasterNullifierKey(accountAddress, newMasterNullifierSecretKeys[2]); - - // We make sure we can get master nullifier public keys with master nullifier public key hashes - const { pkM: masterNullifierPublicKey2 } = await keyStore.getKeyValidationRequest( - newComputedMasterNullifierPublicKeyHashes[2], - AztecAddress.random(), // Address is random because we are not interested in the app secret key here - ); - expect(masterNullifierPublicKey2).toEqual(newDerivedMasterNullifierPublicKeys[2]); - const { pkM: masterNullifierPublicKey1 } = await keyStore.getKeyValidationRequest( - newComputedMasterNullifierPublicKeyHashes[1], - AztecAddress.random(), // Address is random because we are not interested in the app secret key here - ); - expect(masterNullifierPublicKey1).toEqual(newDerivedMasterNullifierPublicKeys[1]); - const { pkM: masterNullifierPublicKey0 } = await keyStore.getKeyValidationRequest( - newComputedMasterNullifierPublicKeyHashes[0], - AztecAddress.random(), // Address is random because we are not interested in the app secret key here - ); - expect(masterNullifierPublicKey0).toEqual(newDerivedMasterNullifierPublicKeys[0]); - - // Arbitrary app contract address - const appAddress = AztecAddress.fromBigInt(624n); - - // We make sure we can get app nullifier secret keys with master nullifier public key hashes - const { skApp: appNullifierSecretKey0 } = await keyStore.getKeyValidationRequest( - newComputedMasterNullifierPublicKeyHashes[0], - appAddress, - ); - expect(appNullifierSecretKey0.toString()).toMatchInlineSnapshot( - `"0x0d03293ba35ee33ac093be75119d9819da11631b3739b0f12788ef66b28834d5"`, - ); - const { skApp: appNullifierSecretKey1 } = await keyStore.getKeyValidationRequest( - newComputedMasterNullifierPublicKeyHashes[1], - appAddress, - ); - expect(appNullifierSecretKey1.toString()).toMatchInlineSnapshot( - `"0x01baec4d9f3d4b98fa883e256917e91e913490d92cd01763dea49337c9d364af"`, - ); - const { skApp: appNullifierSecretKey2 } = await keyStore.getKeyValidationRequest( - newComputedMasterNullifierPublicKeyHashes[2], - appAddress, - ); - expect(appNullifierSecretKey2.toString()).toMatchInlineSnapshot( - `"0x0d1ff3fde73bc14ea0cfa704aed68d72c27bf58e6159e381f23d2951ce3566ec"`, - ); - - expect(appNullifierSecretKey0).toEqual(computeAppNullifierSecretKey(newMasterNullifierSecretKeys[0], appAddress)); - expect(appNullifierSecretKey1).toEqual(computeAppNullifierSecretKey(newMasterNullifierSecretKeys[1], appAddress)); - expect(appNullifierSecretKey2).toEqual(computeAppNullifierSecretKey(newMasterNullifierSecretKeys[2], appAddress)); - }); }); diff --git a/yarn-project/key-store/src/key_store.ts b/yarn-project/key-store/src/key_store.ts index 6914c2fc83d..3c6904ee805 100644 --- a/yarn-project/key-store/src/key_store.ts +++ b/yarn-project/key-store/src/key_store.ts @@ -2,7 +2,6 @@ import { type PublicKey } from '@aztec/circuit-types'; import { AztecAddress, CompleteAddress, - Fq, Fr, GeneratorIndex, GrumpkinScalar, @@ -21,7 +20,7 @@ import { type Bufferable, serializeToBuffer } from '@aztec/foundation/serialize' import { type AztecKVStore, type AztecMap } from '@aztec/kv-store'; /** - * Used for managing keys. Can hold keys of multiple accounts and allows for key rotation. + * Used for managing keys. Can hold keys of multiple accounts. */ export class KeyStore { #keys: AztecMap; @@ -108,53 +107,29 @@ export class KeyStore { const [keyPrefix, account] = this.#getKeyPrefixAndAccount(pkMHash); // Now we find the master public key for the account - // Since each public keys buffer contains multiple public keys, we need to find the one that matches the hash. - // Then we store the index of the key in the buffer to be able to quickly obtain the corresponding secret key. - let pkM: PublicKey | undefined; - let keyIndexInBuffer = 0; - { - const pkMsBuffer = this.#keys.get(`${account.toString()}-${keyPrefix}pk_m`); - if (!pkMsBuffer) { - throw new Error( - `Could not find ${keyPrefix}pk_m for account ${account.toString()} whose address was successfully obtained with ${keyPrefix}pk_m_hash ${pkMHash.toString()}.`, - ); - } + const pkMBuffer = this.#keys.get(`${account.toString()}-${keyPrefix}pk_m`); + if (!pkMBuffer) { + throw new Error( + `Could not find ${keyPrefix}pk_m for account ${account.toString()} whose address was successfully obtained with ${keyPrefix}pk_m_hash ${pkMHash.toString()}.`, + ); + } - // Now we iterate over the public keys in the buffer to find the one that matches the hash - const numKeys = this.#calculateNumKeys(pkMsBuffer, Point); - for (; keyIndexInBuffer < numKeys; keyIndexInBuffer++) { - const foundPkM = Point.fromBuffer( - pkMsBuffer.subarray(keyIndexInBuffer * Point.SIZE_IN_BYTES, (keyIndexInBuffer + 1) * Point.SIZE_IN_BYTES), - ); - if (foundPkM.hash().equals(pkMHash)) { - pkM = foundPkM; - break; - } - } + const pkM = Point.fromBuffer(pkMBuffer); - if (!pkM) { - throw new Error(`Could not find ${keyPrefix}pkM for ${keyPrefix}pk_m_hash ${pkMHash.toString()}.`); - } + if (!pkM.hash().equals(pkMHash)) { + throw new Error(`Could not find ${keyPrefix}pkM for ${keyPrefix}pk_m_hash ${pkMHash.toString()}.`); } // Now we find the secret key for the public key - let skM: GrumpkinScalar | undefined; - { - const skMsBuffer = this.#keys.get(`${account.toString()}-${keyPrefix}sk_m`); - if (!skMsBuffer) { - throw new Error( - `Could not find ${keyPrefix}sk_m for account ${account.toString()} whose address was successfully obtained with ${keyPrefix}pk_m_hash ${pkMHash.toString()}.`, - ); - } - - skM = GrumpkinScalar.fromBuffer( - skMsBuffer.subarray( - keyIndexInBuffer * GrumpkinScalar.SIZE_IN_BYTES, - (keyIndexInBuffer + 1) * GrumpkinScalar.SIZE_IN_BYTES, - ), + const skMBuffer = this.#keys.get(`${account.toString()}-${keyPrefix}sk_m`); + if (!skMBuffer) { + throw new Error( + `Could not find ${keyPrefix}sk_m for account ${account.toString()} whose address was successfully obtained with ${keyPrefix}pk_m_hash ${pkMHash.toString()}.`, ); } + const skM = GrumpkinScalar.fromBuffer(skMBuffer); + // We sanity check that it's possible to derive the public key from the secret key if (!derivePublicKeyFromSecretKey(skM).equals(pkM)) { throw new Error(`Could not derive ${keyPrefix}pkM from ${keyPrefix}skM.`); @@ -272,60 +247,21 @@ export class KeyStore { public getMasterSecretKey(pkM: PublicKey): Promise { const [keyPrefix, account] = this.#getKeyPrefixAndAccount(pkM); - // We get the secret keys buffer and iterate over the values in the buffer to find the one that matches pkM - let skM: GrumpkinScalar | undefined; - { - const secretKeysBuffer = this.#keys.get(`${account.toString()}-${keyPrefix}sk_m`); - if (!secretKeysBuffer) { - throw new Error( - `Could not find ${keyPrefix}sk_m for ${keyPrefix}pk_m ${pkM.toString()}. This should not happen.`, - ); - } - - const numKeys = this.#calculateNumKeys(secretKeysBuffer, GrumpkinScalar); - for (let i = 0; i < numKeys; i++) { - const foundSkM = GrumpkinScalar.fromBuffer( - secretKeysBuffer.subarray(i * GrumpkinScalar.SIZE_IN_BYTES, (i + 1) * GrumpkinScalar.SIZE_IN_BYTES), - ); - if (derivePublicKeyFromSecretKey(foundSkM).equals(pkM)) { - skM = foundSkM; - break; - } - } + const secretKeyBuffer = this.#keys.get(`${account.toString()}-${keyPrefix}sk_m`); + if (!secretKeyBuffer) { + throw new Error( + `Could not find ${keyPrefix}sk_m for ${keyPrefix}pk_m ${pkM.toString()}. This should not happen.`, + ); + } - if (!skM) { - throw new Error(`Could not find ${keyPrefix}skM for ${keyPrefix}pkM ${pkM.toString()} in secret keys buffer.`); - } + const skM = GrumpkinScalar.fromBuffer(secretKeyBuffer); + if (!derivePublicKeyFromSecretKey(skM).equals(pkM)) { + throw new Error(`Could not find ${keyPrefix}skM for ${keyPrefix}pkM ${pkM.toString()} in secret keys buffer.`); } return Promise.resolve(skM); } - /** - * Rotates the master nullifier key for the specified account. - * - * @dev This function updates the secret and public keys associated with the account. - * It appends a new secret key to the existing secret keys, derives the - * corresponding public key, and updates the stored keys accordingly. - * - * @param account - The account address for which the master nullifier key is being rotated. - * @param newSecretKey - (Optional) A new secret key of type Fq. If not provided, a random key is generated. - * @throws If the account does not have existing nullifier secret keys or public keys. - * @returns A Promise that resolves when the key rotation is complete. - */ - public async rotateMasterNullifierKey(account: AztecAddress, newSecretKey: Fq = Fq.random()) { - // We append the secret key to the array of secret keys - await this.#appendValue(`${account.toString()}-nsk_m`, newSecretKey); - - // Now we derive the public key from the new secret key and append it to the buffer of original public keys - const newPublicKey = derivePublicKeyFromSecretKey(newSecretKey); - await this.#appendValue(`${account.toString()}-npk_m`, newPublicKey); - - // At last we store npk_m_hash under `account-npk_m_hash` key to be able to obtain address and key prefix - // using the #getKeyPrefixAndAccount function later on - await this.#appendValue(`${account.toString()}-npk_m_hash`, newPublicKey.hash()); - } - /** * Gets the key prefix and account address for a given value. * @returns A tuple containing the key prefix and account address. @@ -335,9 +271,7 @@ export class KeyStore { #getKeyPrefixAndAccount(value: Bufferable): [KeyPrefix, AztecAddress] { const valueBuffer = serializeToBuffer(value); for (const [key, val] of this.#keys.entries()) { - // `val` can contain multiple values due to key rotation so we check if the value is in the buffer instead - // of just calling `.equals(...)` - if (val.includes(valueBuffer)) { + if (val.equals(valueBuffer)) { for (const prefix of KEY_PREFIXES) { if (key.includes(`-${prefix}`)) { const account = AztecAddress.fromString(key.split('-')[0]); @@ -348,17 +282,4 @@ export class KeyStore { } throw new Error(`Could not find key prefix.`); } - - async #appendValue(key: string, value: Bufferable) { - const currentValue = this.#keys.get(key); - if (!currentValue) { - throw new Error(`Could not find current value for key ${key}`); - } - - await this.#keys.set(key, serializeToBuffer([currentValue, value])); - } - - #calculateNumKeys(buf: Buffer, T: typeof Point | typeof Fq) { - return buf.byteLength / T.SIZE_IN_BYTES; - } } diff --git a/yarn-project/kv-store/src/lmdb/store.ts b/yarn-project/kv-store/src/lmdb/store.ts index 51358e2d596..d789778c7e0 100644 --- a/yarn-project/kv-store/src/lmdb/store.ts +++ b/yarn-project/kv-store/src/lmdb/store.ts @@ -1,7 +1,7 @@ import { createDebugLogger } from '@aztec/foundation/log'; import { mkdirSync } from 'fs'; -import { mkdtemp } from 'fs/promises'; +import { mkdtemp, rm } from 'fs/promises'; import { type Database, type Key, type RootDatabase, open } from 'lmdb'; import { tmpdir } from 'os'; import { dirname, join } from 'path'; @@ -150,9 +150,22 @@ export class AztecLmdbStore implements AztecKVStore { await this.#rootDb.clearAsync(); } - /** Deletes this store */ + /** + * Close the database. Note, once this is closed we can no longer interact with the DB. + * Closing the root DB also closes child DBs. + */ + async close() { + await this.#rootDb.close(); + } + + /** Deletes this store and removes the database files from disk */ async delete() { await this.#rootDb.drop(); + await this.close(); + if (this.path) { + await rm(this.path, { recursive: true, force: true }); + this.#log.verbose(`Deleted database files at ${this.path}`); + } } estimateSize(): { bytes: number } { diff --git a/yarn-project/noir-protocol-circuits-types/src/artifacts.ts b/yarn-project/noir-protocol-circuits-types/src/artifacts.ts index f93bc37bdd5..bd47118cf1c 100644 --- a/yarn-project/noir-protocol-circuits-types/src/artifacts.ts +++ b/yarn-project/noir-protocol-circuits-types/src/artifacts.ts @@ -26,18 +26,17 @@ import PrivateKernelTailJson from '../artifacts/private_kernel_tail.json' assert import PrivateKernelTailSimulatedJson from '../artifacts/private_kernel_tail_simulated.json' assert { type: 'json' }; import PrivateKernelTailToPublicJson from '../artifacts/private_kernel_tail_to_public.json' assert { type: 'json' }; import PrivateKernelTailToPublicSimulatedJson from '../artifacts/private_kernel_tail_to_public_simulated.json' assert { type: 'json' }; -import PublicKernelAppLogicJson from '../artifacts/public_kernel_app_logic.json' assert { type: 'json' }; -import PublicKernelAppLogicSimulatedJson from '../artifacts/public_kernel_app_logic_simulated.json' assert { type: 'json' }; -import PublicKernelSetupJson from '../artifacts/public_kernel_setup.json' assert { type: 'json' }; -import PublicKernelSetupSimulatedJson from '../artifacts/public_kernel_setup_simulated.json' assert { type: 'json' }; +import PublicKernelInnerJson from '../artifacts/public_kernel_inner.json' assert { type: 'json' }; +import PublicKernelInnerSimulatedJson from '../artifacts/public_kernel_inner_simulated.json' assert { type: 'json' }; +import PublicKernelMergeJson from '../artifacts/public_kernel_merge.json' assert { type: 'json' }; +import PublicKernelMergeSimulatedJson from '../artifacts/public_kernel_merge_simulated.json' assert { type: 'json' }; import PublicKernelTailJson from '../artifacts/public_kernel_tail.json' assert { type: 'json' }; import PublicKernelTailSimulatedJson from '../artifacts/public_kernel_tail_simulated.json' assert { type: 'json' }; -import PublicKernelTeardownJson from '../artifacts/public_kernel_teardown.json' assert { type: 'json' }; -import PublicKernelTeardownSimulatedJson from '../artifacts/public_kernel_teardown_simulated.json' assert { type: 'json' }; import BaseRollupJson from '../artifacts/rollup_base.json' assert { type: 'json' }; import BaseRollupSimulatedJson from '../artifacts/rollup_base_simulated.json' assert { type: 'json' }; import BlockMergeRollupJson from '../artifacts/rollup_block_merge.json' assert { type: 'json' }; import BlockRootRollupJson from '../artifacts/rollup_block_root.json' assert { type: 'json' }; +import BlockRootRollupFinalJson from '../artifacts/rollup_block_root_final.json' assert { type: 'json' }; import MergeRollupJson from '../artifacts/rollup_merge.json' assert { type: 'json' }; import RootRollupJson from '../artifacts/rollup_root.json' assert { type: 'json' }; @@ -61,15 +60,15 @@ export const PrivateResetTagToArtifactName: Record = { EmptyNestedArtifact: EmptyNestedJson as NoirCompiledCircuit, PrivateKernelEmptyArtifact: PrivateKernelEmptyJson as NoirCompiledCircuit, - PublicKernelSetupArtifact: PublicKernelSetupJson as NoirCompiledCircuit, - PublicKernelAppLogicArtifact: PublicKernelAppLogicJson as NoirCompiledCircuit, - PublicKernelTeardownArtifact: PublicKernelTeardownJson as NoirCompiledCircuit, + PublicKernelInnerArtifact: PublicKernelInnerJson as NoirCompiledCircuit, + PublicKernelMergeArtifact: PublicKernelMergeJson as NoirCompiledCircuit, PublicKernelTailArtifact: PublicKernelTailJson as NoirCompiledCircuit, BaseParityArtifact: BaseParityJson as NoirCompiledCircuit, RootParityArtifact: RootParityJson as NoirCompiledCircuit, @@ -96,14 +94,14 @@ export const ServerCircuitArtifacts: Record = { EmptyNestedArtifact: EmptyNestedSimulatedJson as NoirCompiledCircuit, PrivateKernelEmptyArtifact: PrivateKernelEmptySimulatedJson as NoirCompiledCircuit, - PublicKernelSetupArtifact: PublicKernelSetupSimulatedJson as NoirCompiledCircuit, - PublicKernelAppLogicArtifact: PublicKernelAppLogicSimulatedJson as NoirCompiledCircuit, - PublicKernelTeardownArtifact: PublicKernelTeardownSimulatedJson as NoirCompiledCircuit, + PublicKernelInnerArtifact: PublicKernelInnerSimulatedJson as NoirCompiledCircuit, + PublicKernelMergeArtifact: PublicKernelMergeSimulatedJson as NoirCompiledCircuit, PublicKernelTailArtifact: PublicKernelTailSimulatedJson as NoirCompiledCircuit, BaseParityArtifact: BaseParityJson as NoirCompiledCircuit, RootParityArtifact: RootParityJson as NoirCompiledCircuit, @@ -112,6 +110,7 @@ export const SimulatedServerCircuitArtifacts: Record = { diff --git a/yarn-project/noir-protocol-circuits-types/src/index.ts b/yarn-project/noir-protocol-circuits-types/src/index.ts index e554bfcb862..438c9ad1d0a 100644 --- a/yarn-project/noir-protocol-circuits-types/src/index.ts +++ b/yarn-project/noir-protocol-circuits-types/src/index.ts @@ -19,10 +19,12 @@ import { type PrivateKernelTailCircuitPublicInputs, type PublicKernelCircuitPrivateInputs, type PublicKernelCircuitPublicInputs, + type PublicKernelInnerCircuitPrivateInputs, type PublicKernelTailCircuitPrivateInputs, type RootParityInputs, type RootRollupInputs, type RootRollupPublicInputs, + type VMCircuitPublicInputs, } from '@aztec/circuits.js'; import { applyStringFormatting, createDebugLogger } from '@aztec/foundation/log'; @@ -61,10 +63,12 @@ import { mapPrivateKernelTailToPublicCircuitPrivateInputsToNoir, mapPublicKernelCircuitPrivateInputsToNoir, mapPublicKernelCircuitPublicInputsFromNoir, + mapPublicKernelInnerCircuitPrivateInputsToNoir, mapPublicKernelTailCircuitPrivateInputsToNoir, mapRootParityInputsToNoir, mapRootRollupInputsToNoir, mapRootRollupPublicInputsFromNoir, + mapVMCircuitPublicInputsFromNoir, } from './type_conversion.js'; import { type ParityBaseReturnType as BaseParityReturnType, @@ -75,8 +79,8 @@ import { type PrivateKernelInnerReturnType as InnerReturnType, type RollupMergeReturnType as MergeRollupReturnType, type PrivateKernelEmptyReturnType, - type PublicKernelAppLogicReturnType as PublicPublicPreviousReturnType, - type PublicKernelSetupReturnType as PublicSetupReturnType, + type PublicKernelInnerReturnType, + type PublicKernelMergeReturnType, type PrivateKernelResetReturnType as ResetReturnType, type ParityRootReturnType as RootParityReturnType, type RollupRootReturnType as RootRollupReturnType, @@ -340,7 +344,7 @@ export function convertPrivateKernelTailForPublicOutputsFromWitnessMap( const decodedInputs: DecodedInputs = abiDecode(ClientCircuitArtifacts.PrivateKernelTailToPublicArtifact.abi, outputs); // Cast the inputs as the return type - const returnType = decodedInputs.return_value as PublicPublicPreviousReturnType; + const returnType = decodedInputs.return_value as PublicKernelMergeReturnType; return mapPrivateKernelTailCircuitPublicInputsForPublicFromNoir(returnType); } @@ -440,40 +444,30 @@ export function convertRootRollupInputsToWitnessMap(inputs: RootRollupInputs): W const initialWitnessMap = abiEncode(ServerCircuitArtifacts.RootRollupArtifact.abi, { inputs: mapped as any }); return initialWitnessMap; } -/** - * Converts the inputs of the public setup circuit into a witness map - * @param inputs - The public kernel inputs. - * @returns The witness map - */ -export function convertSimulatedPublicSetupInputsToWitnessMap(inputs: PublicKernelCircuitPrivateInputs): WitnessMap { - const mapped = mapPublicKernelCircuitPrivateInputsToNoir(inputs); - const initialWitnessMap = abiEncode(SimulatedServerCircuitArtifacts.PublicKernelSetupArtifact.abi, { - input: mapped as any, - }); - return initialWitnessMap; -} /** - * Converts the inputs of the public app logic circuit into a witness map + * Converts the inputs of the public inner circuit into a witness map * @param inputs - The public kernel inputs. * @returns The witness map */ -export function convertSimulatedPublicInnerInputsToWitnessMap(inputs: PublicKernelCircuitPrivateInputs): WitnessMap { - const mapped = mapPublicKernelCircuitPrivateInputsToNoir(inputs); - const initialWitnessMap = abiEncode(SimulatedServerCircuitArtifacts.PublicKernelAppLogicArtifact.abi, { +export function convertSimulatedPublicInnerInputsToWitnessMap( + inputs: PublicKernelInnerCircuitPrivateInputs, +): WitnessMap { + const mapped = mapPublicKernelInnerCircuitPrivateInputsToNoir(inputs); + const initialWitnessMap = abiEncode(SimulatedServerCircuitArtifacts.PublicKernelInnerArtifact.abi, { input: mapped as any, }); return initialWitnessMap; } /** - * Converts the inputs of the public teardown circuit into a witness map + * Converts the inputs of the public merge circuit into a witness map * @param inputs - The public kernel inputs. * @returns The witness map */ -export function convertSimulatedPublicTeardownInputsToWitnessMap(inputs: PublicKernelCircuitPrivateInputs): WitnessMap { +export function convertSimulatedPublicMergeInputsToWitnessMap(inputs: PublicKernelCircuitPrivateInputs): WitnessMap { const mapped = mapPublicKernelCircuitPrivateInputsToNoir(inputs); - const initialWitnessMap = abiEncode(SimulatedServerCircuitArtifacts.PublicKernelTeardownArtifact.abi, { + const initialWitnessMap = abiEncode(SimulatedServerCircuitArtifacts.PublicKernelMergeArtifact.abi, { input: mapped as any, }); return initialWitnessMap; @@ -493,37 +487,26 @@ export function convertSimulatedPublicTailInputsToWitnessMap(inputs: PublicKerne } /** - * Converts the inputs of the public setup circuit into a witness map + * Converts the inputs of the public inner circuit into a witness map * @param inputs - The public kernel inputs. * @returns The witness map */ -export function convertPublicSetupInputsToWitnessMap(inputs: PublicKernelCircuitPrivateInputs): WitnessMap { - const mapped = mapPublicKernelCircuitPrivateInputsToNoir(inputs); - const initialWitnessMap = abiEncode(ServerCircuitArtifacts.PublicKernelSetupArtifact.abi, { input: mapped as any }); - return initialWitnessMap; -} - -/** - * Converts the inputs of the public setup circuit into a witness map - * @param inputs - The public kernel inputs. - * @returns The witness map - */ -export function convertPublicInnerInputsToWitnessMap(inputs: PublicKernelCircuitPrivateInputs): WitnessMap { - const mapped = mapPublicKernelCircuitPrivateInputsToNoir(inputs); - const initialWitnessMap = abiEncode(ServerCircuitArtifacts.PublicKernelAppLogicArtifact.abi, { +export function convertPublicInnerInputsToWitnessMap(inputs: PublicKernelInnerCircuitPrivateInputs): WitnessMap { + const mapped = mapPublicKernelInnerCircuitPrivateInputsToNoir(inputs); + const initialWitnessMap = abiEncode(ServerCircuitArtifacts.PublicKernelInnerArtifact.abi, { input: mapped as any, }); return initialWitnessMap; } /** - * Converts the inputs of the public teardown circuit into a witness map + * Converts the inputs of the public merge circuit into a witness map * @param inputs - The public kernel inputs. * @returns The witness map */ -export function convertPublicTeardownInputsToWitnessMap(inputs: PublicKernelCircuitPrivateInputs): WitnessMap { +export function convertPublicMergeInputsToWitnessMap(inputs: PublicKernelCircuitPrivateInputs): WitnessMap { const mapped = mapPublicKernelCircuitPrivateInputsToNoir(inputs); - const initialWitnessMap = abiEncode(ServerCircuitArtifacts.PublicKernelTeardownArtifact.abi, { + const initialWitnessMap = abiEncode(ServerCircuitArtifacts.PublicKernelMergeArtifact.abi, { input: mapped as any, }); return initialWitnessMap; @@ -679,58 +662,38 @@ export function convertRootParityOutputsFromWitnessMap(outputs: WitnessMap): Par return mapParityPublicInputsFromNoir(returnType); } -/** - * Converts the outputs of the public setup circuit from a witness map. - * @param outputs - The public kernel outputs as a witness map. - * @returns The public inputs. - */ -export function convertSimulatedPublicSetupOutputFromWitnessMap(outputs: WitnessMap): PublicKernelCircuitPublicInputs { - // Decode the witness map into two fields, the return values and the inputs - const decodedInputs: DecodedInputs = abiDecode( - SimulatedServerCircuitArtifacts.PublicKernelSetupArtifact.abi, - outputs, - ); - - // Cast the inputs as the return type - const returnType = decodedInputs.return_value as PublicSetupReturnType; - - return mapPublicKernelCircuitPublicInputsFromNoir(returnType); -} - /** * Converts the outputs of the public inner circuit from a witness map. * @param outputs - The public kernel outputs as a witness map. * @returns The public inputs. */ -export function convertSimulatedPublicInnerOutputFromWitnessMap(outputs: WitnessMap): PublicKernelCircuitPublicInputs { +export function convertSimulatedPublicInnerOutputFromWitnessMap(outputs: WitnessMap): VMCircuitPublicInputs { // Decode the witness map into two fields, the return values and the inputs const decodedInputs: DecodedInputs = abiDecode( - SimulatedServerCircuitArtifacts.PublicKernelAppLogicArtifact.abi, + SimulatedServerCircuitArtifacts.PublicKernelInnerArtifact.abi, outputs, ); // Cast the inputs as the return type - const returnType = decodedInputs.return_value as PublicPublicPreviousReturnType; + const returnType = decodedInputs.return_value as PublicKernelInnerReturnType; - return mapPublicKernelCircuitPublicInputsFromNoir(returnType); + return mapVMCircuitPublicInputsFromNoir(returnType); } /** - * Converts the outputs of the public tail circuit from a witness map. + * Converts the outputs of the public merge circuit from a witness map. * @param outputs - The public kernel outputs as a witness map. * @returns The public inputs. */ -export function convertSimulatedPublicTeardownOutputFromWitnessMap( - outputs: WitnessMap, -): PublicKernelCircuitPublicInputs { +export function convertSimulatedPublicMergeOutputFromWitnessMap(outputs: WitnessMap): PublicKernelCircuitPublicInputs { // Decode the witness map into two fields, the return values and the inputs const decodedInputs: DecodedInputs = abiDecode( - SimulatedServerCircuitArtifacts.PublicKernelTeardownArtifact.abi, + SimulatedServerCircuitArtifacts.PublicKernelMergeArtifact.abi, outputs, ); // Cast the inputs as the return type - const returnType = decodedInputs.return_value as PublicPublicPreviousReturnType; + const returnType = decodedInputs.return_value as PublicKernelMergeReturnType; return mapPublicKernelCircuitPublicInputsFromNoir(returnType); } @@ -750,47 +713,32 @@ export function convertSimulatedPublicTailOutputFromWitnessMap(outputs: WitnessM return mapKernelCircuitPublicInputsFromNoir(returnType); } -/** - * Converts the outputs of the public setup circuit from a witness map. - * @param outputs - The public kernel outputs as a witness map. - * @returns The public inputs. - */ -export function convertPublicSetupOutputFromWitnessMap(outputs: WitnessMap): PublicKernelCircuitPublicInputs { - // Decode the witness map into two fields, the return values and the inputs - const decodedInputs: DecodedInputs = abiDecode(ServerCircuitArtifacts.PublicKernelSetupArtifact.abi, outputs); - - // Cast the inputs as the return type - const returnType = decodedInputs.return_value as PublicSetupReturnType; - - return mapPublicKernelCircuitPublicInputsFromNoir(returnType); -} - /** * Converts the outputs of the public inner circuit from a witness map. * @param outputs - The public kernel outputs as a witness map. * @returns The public inputs. */ -export function convertPublicInnerOutputFromWitnessMap(outputs: WitnessMap): PublicKernelCircuitPublicInputs { +export function convertPublicInnerOutputFromWitnessMap(outputs: WitnessMap): VMCircuitPublicInputs { // Decode the witness map into two fields, the return values and the inputs - const decodedInputs: DecodedInputs = abiDecode(ServerCircuitArtifacts.PublicKernelAppLogicArtifact.abi, outputs); + const decodedInputs: DecodedInputs = abiDecode(ServerCircuitArtifacts.PublicKernelInnerArtifact.abi, outputs); // Cast the inputs as the return type - const returnType = decodedInputs.return_value as PublicPublicPreviousReturnType; + const returnType = decodedInputs.return_value as PublicKernelInnerReturnType; - return mapPublicKernelCircuitPublicInputsFromNoir(returnType); + return mapVMCircuitPublicInputsFromNoir(returnType); } /** - * Converts the outputs of the public tail circuit from a witness map. + * Converts the outputs of the public merge circuit from a witness map. * @param outputs - The public kernel outputs as a witness map. * @returns The public inputs. */ -export function convertPublicTeardownOutputFromWitnessMap(outputs: WitnessMap): PublicKernelCircuitPublicInputs { +export function convertPublicMergeOutputFromWitnessMap(outputs: WitnessMap): PublicKernelCircuitPublicInputs { // Decode the witness map into two fields, the return values and the inputs - const decodedInputs: DecodedInputs = abiDecode(ServerCircuitArtifacts.PublicKernelTeardownArtifact.abi, outputs); + const decodedInputs: DecodedInputs = abiDecode(ServerCircuitArtifacts.PublicKernelMergeArtifact.abi, outputs); // Cast the inputs as the return type - const returnType = decodedInputs.return_value as PublicPublicPreviousReturnType; + const returnType = decodedInputs.return_value as PublicKernelMergeReturnType; return mapPublicKernelCircuitPublicInputsFromNoir(returnType); } diff --git a/yarn-project/noir-protocol-circuits-types/src/scripts/generate_ts_from_abi.ts b/yarn-project/noir-protocol-circuits-types/src/scripts/generate_ts_from_abi.ts index 1c154da4b1e..842a020e055 100644 --- a/yarn-project/noir-protocol-circuits-types/src/scripts/generate_ts_from_abi.ts +++ b/yarn-project/noir-protocol-circuits-types/src/scripts/generate_ts_from_abi.ts @@ -17,9 +17,8 @@ const circuits = [ resetCircuit, 'private_kernel_tail', 'private_kernel_tail_to_public', - 'public_kernel_setup', - 'public_kernel_app_logic', - 'public_kernel_teardown', + 'public_kernel_inner', + 'public_kernel_merge', 'public_kernel_tail', 'rollup_base', 'rollup_merge', diff --git a/yarn-project/noir-protocol-circuits-types/src/type_conversion.ts b/yarn-project/noir-protocol-circuits-types/src/type_conversion.ts index be9f0a8552d..859d97de3b3 100644 --- a/yarn-project/noir-protocol-circuits-types/src/type_conversion.ts +++ b/yarn-project/noir-protocol-circuits-types/src/type_conversion.ts @@ -16,6 +16,7 @@ import { type ContractStorageUpdateRequest, type EmptyNestedData, EncryptedLogHash, + type EnqueuedCallData, EthAddress, FeeRecipient, Fr, @@ -91,6 +92,7 @@ import { PrivateKernelTailCircuitPublicInputs, PrivateValidationRequests, PublicAccumulatedData, + PublicAccumulatedDataArrayLengths, type PublicCallData, PublicCallRequest, type PublicCallStackItem, @@ -102,10 +104,14 @@ import { type PublicDataTreeLeaf, type PublicDataTreeLeafPreimage, PublicDataUpdateRequest, + PublicInnerCallRequest, type PublicKernelCircuitPrivateInputs, PublicKernelCircuitPublicInputs, type PublicKernelData, + type PublicKernelInnerCircuitPrivateInputs, + type PublicKernelInnerData, type PublicKernelTailCircuitPrivateInputs, + PublicValidationRequestArrayLengths, PublicValidationRequests, type RECURSIVE_PROOF_LENGTH, ReadRequest, @@ -133,6 +139,7 @@ import { TxContext, type TxRequest, VERIFICATION_KEY_LENGTH_IN_FIELDS, + VMCircuitPublicInputs, type VerificationKeyAsFields, } from '@aztec/circuits.js'; import { toBufferBE } from '@aztec/foundation/bigint-buffer'; @@ -153,6 +160,7 @@ import type { ContentCommitment as ContentCommitmentNoir, EmptyNestedCircuitPublicInputs as EmptyNestedDataNoir, EncryptedLogHash as EncryptedLogHashNoir, + EnqueuedCallData as EnqueuedCallDataNoir, FeeRecipient as FeeRecipientNoir, Field, FixedLengthArray, @@ -211,6 +219,7 @@ import type { PrivateKernelTailCircuitPrivateInputs as PrivateKernelTailCircuitPrivateInputsNoir, PrivateKernelTailToPublicCircuitPrivateInputs as PrivateKernelTailToPublicCircuitPrivateInputsNoir, PrivateValidationRequests as PrivateValidationRequestsNoir, + PublicAccumulatedDataArrayLengths as PublicAccumulatedDataArrayLengthsNoir, PublicAccumulatedData as PublicAccumulatedDataNoir, PublicCallData as PublicCallDataNoir, PublicCallRequest as PublicCallRequestNoir, @@ -223,10 +232,14 @@ import type { PublicDataTreeLeaf as PublicDataTreeLeafNoir, PublicDataTreeLeafPreimage as PublicDataTreeLeafPreimageNoir, PublicDataUpdateRequest as PublicDataUpdateRequestNoir, + PublicInnerCallRequest as PublicInnerCallRequestNoir, PublicKernelCircuitPublicInputs as PublicKernelCircuitPublicInputsNoir, PublicKernelData as PublicKernelDataNoir, - PublicKernelSetupCircuitPrivateInputs as PublicKernelSetupCircuitPrivateInputsNoir, + PublicKernelInnerCircuitPrivateInputs as PublicKernelInnerCircuitPrivateInputsNoir, + PublicKernelInnerData as PublicKernelInnerDataNoir, + PublicKernelMergeCircuitPrivateInputs as PublicKernelMergeCircuitPrivateInputsNoir, PublicKernelTailCircuitPrivateInputs as PublicKernelTailCircuitPrivateInputsNoir, + PublicValidationRequestArrayLengths as PublicValidationRequestArrayLengthsNoir, PublicValidationRequests as PublicValidationRequestsNoir, ReadRequest as ReadRequestNoir, ReadRequestStatus as ReadRequestStatusNoir, @@ -251,6 +264,7 @@ import type { TreeLeafReadRequest as TreeLeafReadRequestNoir, TxContext as TxContextNoir, TxRequest as TxRequestNoir, + VMCircuitPublicInputs as VMCircuitPublicInputsNoir, VerificationKey as VerificationKeyNoir, } from './types/index.js'; @@ -576,7 +590,9 @@ function mapPublicCallStackItemCompressedToNoir( */ function mapPublicCallRequestFromNoir(request: PublicCallRequestNoir) { return new PublicCallRequest( - mapPublicCallStackItemCompressedFromNoir(request.item), + mapAztecAddressFromNoir(request.contract_address), + mapCallContextFromNoir(request.call_context), + mapFieldFromNoir(request.args_hash), mapNumberFromNoir(request.counter), ); } @@ -586,7 +602,23 @@ function mapPublicCallRequestFromNoir(request: PublicCallRequestNoir) { * @param privateCallStackItem - The call stack item. * @returns The noir call stack item. */ -export function mapPublicCallRequestToNoir(request: PublicCallRequest): PublicCallRequestNoir { +function mapPublicCallRequestToNoir(request: PublicCallRequest): PublicCallRequestNoir { + return { + contract_address: mapAztecAddressToNoir(request.contractAddress), + call_context: mapCallContextToNoir(request.callContext), + args_hash: mapFieldToNoir(request.argsHash), + counter: mapNumberToNoir(request.counter), + }; +} + +function mapPublicInnerCallRequestFromNoir(request: PublicInnerCallRequestNoir) { + return new PublicInnerCallRequest( + mapPublicCallStackItemCompressedFromNoir(request.item), + mapNumberFromNoir(request.counter), + ); +} + +function mapPublicInnerCallRequestToNoir(request: PublicInnerCallRequest): PublicInnerCallRequestNoir { return { item: mapPublicCallStackItemCompressedToNoir(request.item), counter: mapNumberToNoir(request.counter), @@ -1288,6 +1320,28 @@ function mapPublicValidationRequestsFromNoir(requests: PublicValidationRequestsN ); } +function mapPublicValidationRequestArrayLengthsFromNoir(lengths: PublicValidationRequestArrayLengthsNoir) { + return new PublicValidationRequestArrayLengths( + mapNumberFromNoir(lengths.note_hash_read_requests), + mapNumberFromNoir(lengths.nullifier_read_requests), + mapNumberFromNoir(lengths.nullifier_non_existent_read_requests), + mapNumberFromNoir(lengths.l1_to_l2_msg_read_requests), + mapNumberFromNoir(lengths.public_data_reads), + ); +} + +function mapPublicValidationRequestArrayLengthsToNoir( + lengths: PublicValidationRequestArrayLengths, +): PublicValidationRequestArrayLengthsNoir { + return { + note_hash_read_requests: mapNumberToNoir(lengths.noteHashReadRequests), + nullifier_read_requests: mapNumberToNoir(lengths.nullifierReadRequests), + nullifier_non_existent_read_requests: mapNumberToNoir(lengths.nullifierNonExistentReadRequests), + l1_to_l2_msg_read_requests: mapNumberToNoir(lengths.l1ToL2MsgReadRequests), + public_data_reads: mapNumberToNoir(lengths.publicDataReads), + }; +} + export function mapPrivateAccumulatedDataFromNoir( privateAccumulatedData: PrivateAccumulatedDataNoir, ): PrivateAccumulatedData { @@ -1387,6 +1441,34 @@ export function mapPublicAccumulatedDataToNoir( }; } +function mapPublicAccumulatedDataArrayLengthsFromNoir(lengths: PublicAccumulatedDataArrayLengthsNoir) { + return new PublicAccumulatedDataArrayLengths( + mapNumberFromNoir(lengths.note_hashes), + mapNumberFromNoir(lengths.nullifiers), + mapNumberFromNoir(lengths.l2_to_l1_msgs), + mapNumberFromNoir(lengths.note_encrypted_logs_hashes), + mapNumberFromNoir(lengths.encrypted_logs_hashes), + mapNumberFromNoir(lengths.unencrypted_logs_hashes), + mapNumberFromNoir(lengths.public_data_update_requests), + mapNumberFromNoir(lengths.public_call_stack), + ); +} + +function mapPublicAccumulatedDataArrayLengthsToNoir( + lengths: PublicAccumulatedDataArrayLengths, +): PublicAccumulatedDataArrayLengthsNoir { + return { + note_hashes: mapNumberToNoir(lengths.noteHashes), + nullifiers: mapNumberToNoir(lengths.nullifiers), + l2_to_l1_msgs: mapNumberToNoir(lengths.l2ToL1Msgs), + note_encrypted_logs_hashes: mapNumberToNoir(lengths.noteEncryptedLogsHashes), + encrypted_logs_hashes: mapNumberToNoir(lengths.encryptedLogsHashes), + unencrypted_logs_hashes: mapNumberToNoir(lengths.unencryptedLogsHashes), + public_data_update_requests: mapNumberToNoir(lengths.publicDataUpdateRequests), + public_call_stack: mapNumberToNoir(lengths.publicCallStack), + }; +} + export function mapGasFromNoir(gasUsed: GasNoir): Gas { return Gas.from({ daGas: mapNumberFromNoir(gasUsed.da_gas), @@ -1524,9 +1606,10 @@ export function mapPublicKernelCircuitPublicInputsToNoir( validation_requests: mapPublicValidationRequestsToNoir(inputs.validationRequests), end: mapPublicAccumulatedDataToNoir(inputs.end), end_non_revertible: mapPublicAccumulatedDataToNoir(inputs.endNonRevertibleData), - revert_code: mapRevertCodeToNoir(inputs.revertCode), - public_teardown_call_stack: mapTuple(inputs.publicTeardownCallStack, mapPublicCallRequestToNoir), + end_side_effect_counter: mapNumberToNoir(inputs.endSideEffectCounter), + public_teardown_call_request: mapPublicCallRequestToNoir(inputs.publicTeardownCallRequest), fee_payer: mapAztecAddressToNoir(inputs.feePayer), + revert_code: mapRevertCodeToNoir(inputs.revertCode), }; } @@ -1557,7 +1640,7 @@ export function mapKernelCircuitPublicInputsToNoir(inputs: KernelCircuitPublicIn * @param publicKernelData - The public kernel inner data. * @returns The noir public kernel data. */ -export function mapPublicKernelDataToNoir(publicKernelData: PublicKernelData): PublicKernelDataNoir { +function mapPublicKernelDataToNoir(publicKernelData: PublicKernelData): PublicKernelDataNoir { return { public_inputs: mapPublicKernelCircuitPublicInputsToNoir(publicKernelData.publicInputs), proof: mapRecursiveProofToNoir(publicKernelData.proof), @@ -1567,7 +1650,15 @@ export function mapPublicKernelDataToNoir(publicKernelData: PublicKernelData): P }; } -export function mapKernelDataToNoir(kernelData: KernelData): KernelDataNoir { +function mapPublicKernelInnerDataToNoir(publicKernelData: PublicKernelInnerData): PublicKernelInnerDataNoir { + return { + public_inputs: mapVMCircuitPublicInputsToNoir(publicKernelData.publicInputs), + proof: mapRecursiveProofToNoir(publicKernelData.proof), + vk: mapVerificationKeyToNoir(publicKernelData.vk.keyAsFields), + }; +} + +function mapKernelDataToNoir(kernelData: KernelData): KernelDataNoir { return { public_inputs: mapKernelCircuitPublicInputsToNoir(kernelData.publicInputs), proof: mapRecursiveProofToNoir(kernelData.proof), @@ -1650,7 +1741,7 @@ export function mapPrivateKernelTailCircuitPublicInputsForPublicFromNoir( mapPublicValidationRequestsFromNoir(inputs.validation_requests), mapPublicAccumulatedDataFromNoir(inputs.end_non_revertible), mapPublicAccumulatedDataFromNoir(inputs.end), - mapPublicCallRequestFromNoir(inputs.public_teardown_call_stack[0]), + mapPublicCallRequestFromNoir(inputs.public_teardown_call_request), ); return new PrivateKernelTailCircuitPublicInputs( mapCombinedConstantDataFromNoir(inputs.constants), @@ -1773,12 +1864,21 @@ export function mapPrivateKernelTailToPublicCircuitPrivateInputsToNoir( }; } +export function mapPublicKernelInnerCircuitPrivateInputsToNoir( + inputs: PublicKernelInnerCircuitPrivateInputs, +): PublicKernelInnerCircuitPrivateInputsNoir { + return { + previous_kernel: mapPublicKernelInnerDataToNoir(inputs.previousKernel), + public_call: mapPublicCallDataToNoir(inputs.publicCall), + }; +} + export function mapPublicKernelCircuitPrivateInputsToNoir( inputs: PublicKernelCircuitPrivateInputs, -): PublicKernelSetupCircuitPrivateInputsNoir { +): PublicKernelMergeCircuitPrivateInputsNoir { return { previous_kernel: mapPublicKernelDataToNoir(inputs.previousKernel), - public_call: mapPublicCallDataToNoir(inputs.publicCall), + enqueued_call: mapEnqueuedCallDataToNoir(inputs.enqueuedCall), }; } @@ -1808,17 +1908,14 @@ export function mapPublicKernelCircuitPublicInputsFromNoir( inputs: PublicKernelCircuitPublicInputsNoir, ): PublicKernelCircuitPublicInputs { return new PublicKernelCircuitPublicInputs( + mapCombinedConstantDataFromNoir(inputs.constants), mapPublicValidationRequestsFromNoir(inputs.validation_requests), mapPublicAccumulatedDataFromNoir(inputs.end_non_revertible), mapPublicAccumulatedDataFromNoir(inputs.end), - mapCombinedConstantDataFromNoir(inputs.constants), - mapRevertCodeFromNoir(inputs.revert_code), - mapTupleFromNoir( - inputs.public_teardown_call_stack, - MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, - mapPublicCallRequestFromNoir, - ), + mapNumberFromNoir(inputs.end_side_effect_counter), + mapPublicCallRequestFromNoir(inputs.public_teardown_call_request), mapAztecAddressFromNoir(inputs.fee_payer), + mapRevertCodeFromNoir(inputs.revert_code), ); } @@ -1940,7 +2037,7 @@ export function mapPublicCircuitPublicInputsToNoir( mapStorageUpdateRequestToNoir, ), contract_storage_reads: mapTuple(publicInputs.contractStorageReads, mapStorageReadToNoir), - public_call_requests: mapTuple(publicInputs.publicCallRequests, mapPublicCallRequestToNoir), + public_call_requests: mapTuple(publicInputs.publicCallRequests, mapPublicInnerCallRequestToNoir), note_hashes: mapTuple(publicInputs.noteHashes, mapNoteHashToNoir), nullifiers: mapTuple(publicInputs.nullifiers, mapNullifierToNoir), l2_to_l1_msgs: mapTuple(publicInputs.l2ToL1Msgs, mapL2ToL1MessageToNoir), @@ -2016,11 +2113,10 @@ export function mapBlockRootOrBlockMergePublicInputsToNoir( * @param publicCallStackItem - The public call stack item. * @returns The noir public call stack item. */ -export function mapPublicCallStackItemToNoir(publicCallStackItem: PublicCallStackItem): PublicCallStackItemNoir { +function mapPublicCallStackItemToNoir(publicCallStackItem: PublicCallStackItem): PublicCallStackItemNoir { return { contract_address: mapAztecAddressToNoir(publicCallStackItem.contractAddress), public_inputs: mapPublicCircuitPublicInputsToNoir(publicCallStackItem.publicInputs), - is_execution_request: publicCallStackItem.isExecutionRequest, function_data: mapFunctionDataToNoir(publicCallStackItem.functionData), }; } @@ -2030,13 +2126,59 @@ export function mapPublicCallStackItemToNoir(publicCallStackItem: PublicCallStac * @param publicCall - The public call data. * @returns The noir public call data. */ -export function mapPublicCallDataToNoir(publicCall: PublicCallData): PublicCallDataNoir { +function mapPublicCallDataToNoir(publicCall: PublicCallData): PublicCallDataNoir { return { call_stack_item: mapPublicCallStackItemToNoir(publicCall.callStackItem), proof: {}, bytecode_hash: mapFieldToNoir(publicCall.bytecodeHash), }; } + +function mapVMCircuitPublicInputsToNoir(inputs: VMCircuitPublicInputs): VMCircuitPublicInputsNoir { + return { + constants: mapCombinedConstantDataToNoir(inputs.constants), + call_request: mapPublicCallRequestToNoir(inputs.callRequest), + public_call_stack: mapTuple(inputs.publicCallStack, mapPublicInnerCallRequestToNoir), + previous_validation_request_array_lengths: mapPublicValidationRequestArrayLengthsToNoir( + inputs.previousValidationRequestArrayLengths, + ), + validation_requests: mapPublicValidationRequestsToNoir(inputs.validationRequests), + previous_accumulated_data_array_lengths: mapPublicAccumulatedDataArrayLengthsToNoir( + inputs.previousAccumulatedDataArrayLengths, + ), + accumulated_data: mapPublicAccumulatedDataToNoir(inputs.accumulatedData), + start_side_effect_counter: mapNumberToNoir(inputs.startSideEffectCounter), + end_side_effect_counter: mapNumberToNoir(inputs.endSideEffectCounter), + start_gas_left: mapGasToNoir(inputs.startGasLeft), + transaction_fee: mapFieldToNoir(inputs.transactionFee), + reverted: inputs.reverted, + }; +} + +export function mapVMCircuitPublicInputsFromNoir(inputs: VMCircuitPublicInputsNoir) { + return new VMCircuitPublicInputs( + mapCombinedConstantDataFromNoir(inputs.constants), + mapPublicCallRequestFromNoir(inputs.call_request), + mapTupleFromNoir(inputs.public_call_stack, MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, mapPublicInnerCallRequestFromNoir), + mapPublicValidationRequestArrayLengthsFromNoir(inputs.previous_validation_request_array_lengths), + mapPublicValidationRequestsFromNoir(inputs.validation_requests), + mapPublicAccumulatedDataArrayLengthsFromNoir(inputs.previous_accumulated_data_array_lengths), + mapPublicAccumulatedDataFromNoir(inputs.accumulated_data), + mapNumberFromNoir(inputs.start_side_effect_counter), + mapNumberFromNoir(inputs.end_side_effect_counter), + mapGasFromNoir(inputs.start_gas_left), + mapFieldFromNoir(inputs.transaction_fee), + inputs.reverted, + ); +} + +function mapEnqueuedCallDataToNoir(enqueuedCallData: EnqueuedCallData): EnqueuedCallDataNoir { + return { + data: mapVMCircuitPublicInputsToNoir(enqueuedCallData.data), + proof: {}, + }; +} + /** * Maps a base or merge rollup public inputs from noir to the circuits.js type. * @param baseOrMergeRollupPublicInputs - The noir base or merge rollup public inputs. @@ -2185,7 +2327,7 @@ export function mapBlockRootRollupInputsToNoir(rootRollupInputs: BlockRootRollup */ export function mapRootRollupInputsToNoir(rootRollupInputs: RootRollupInputs): RootRollupInputsNoir { return { - previous_rollup_data: mapTuple(rootRollupInputs.previousRollupData, mapPreviousRollupDataToNoir), + previous_rollup_data: mapTuple(rootRollupInputs.previousRollupData, mapPreviousRollupBlockDataToNoir), prover_id: mapFieldToNoir(rootRollupInputs.proverId), }; } diff --git a/yarn-project/noir-protocol-circuits-types/src/vks.ts b/yarn-project/noir-protocol-circuits-types/src/vks.ts index 563432e4c38..46f00bf4f2d 100644 --- a/yarn-project/noir-protocol-circuits-types/src/vks.ts +++ b/yarn-project/noir-protocol-circuits-types/src/vks.ts @@ -2,6 +2,7 @@ import { BASE_PARITY_INDEX, BASE_ROLLUP_INDEX, BLOCK_MERGE_ROLLUP_INDEX, + BLOCK_ROOT_ROLLUP_FINAL_INDEX, BLOCK_ROOT_ROLLUP_INDEX, EMPTY_NESTED_INDEX, Fr, @@ -19,10 +20,9 @@ import { PRIVATE_KERNEL_RESET_TINY_INDEX, PRIVATE_KERNEL_TAIL_INDEX, PRIVATE_KERNEL_TAIL_TO_PUBLIC_INDEX, - PUBLIC_KERNEL_APP_LOGIC_INDEX, - PUBLIC_KERNEL_SETUP_INDEX, + PUBLIC_KERNEL_INNER_INDEX, + PUBLIC_KERNEL_MERGE_INDEX, PUBLIC_KERNEL_TAIL_INDEX, - PUBLIC_KERNEL_TEARDOWN_INDEX, ROOT_PARITY_INDEX, ROOT_ROLLUP_INDEX, VERIFICATION_KEY_LENGTH_IN_FIELDS, @@ -47,13 +47,13 @@ import PrivateKernelResetSmallVkJson from '../artifacts/keys/private_kernel_rese import PrivateKernelResetTinyVkJson from '../artifacts/keys/private_kernel_reset_tiny.vk.data.json' assert { type: 'json' }; import PrivateKernelTailVkJson from '../artifacts/keys/private_kernel_tail.vk.data.json' assert { type: 'json' }; import PrivateKernelTailToPublicVkJson from '../artifacts/keys/private_kernel_tail_to_public.vk.data.json' assert { type: 'json' }; -import PublicKernelAppLogicVkJson from '../artifacts/keys/public_kernel_app_logic.vk.data.json' assert { type: 'json' }; -import PublicKernelSetupVkJson from '../artifacts/keys/public_kernel_setup.vk.data.json' assert { type: 'json' }; +import PublicKernelInnerVkJson from '../artifacts/keys/public_kernel_inner.vk.data.json' assert { type: 'json' }; +import PublicKernelMergeVkJson from '../artifacts/keys/public_kernel_merge.vk.data.json' assert { type: 'json' }; import PublicKernelTailVkJson from '../artifacts/keys/public_kernel_tail.vk.data.json' assert { type: 'json' }; -import PublicKernelTeardownVkJson from '../artifacts/keys/public_kernel_teardown.vk.data.json' assert { type: 'json' }; import BaseRollupVkJson from '../artifacts/keys/rollup_base.vk.data.json' assert { type: 'json' }; import BlockMergeRollupVkJson from '../artifacts/keys/rollup_block_merge.vk.data.json' assert { type: 'json' }; import BlockRootRollupVkJson from '../artifacts/keys/rollup_block_root.vk.data.json' assert { type: 'json' }; +import BlockRootRollupFinalVkJson from '../artifacts/keys/rollup_block_root_final.vk.data.json' assert { type: 'json' }; import MergeRollupVkJson from '../artifacts/keys/rollup_merge.vk.data.json' assert { type: 'json' }; import RootRollupVkJson from '../artifacts/keys/rollup_root.vk.data.json' assert { type: 'json' }; import { type ClientProtocolArtifact, type ProtocolArtifact, type ServerProtocolArtifact } from './artifacts.js'; @@ -81,15 +81,15 @@ function keyJsonToVKData(json: VkJson): VerificationKeyData { const ServerCircuitVks: Record = { EmptyNestedArtifact: keyJsonToVKData(EmptyNestedVkJson), PrivateKernelEmptyArtifact: keyJsonToVKData(PrivateKernelEmptyVkJson), - PublicKernelSetupArtifact: keyJsonToVKData(PublicKernelSetupVkJson), - PublicKernelAppLogicArtifact: keyJsonToVKData(PublicKernelAppLogicVkJson), - PublicKernelTeardownArtifact: keyJsonToVKData(PublicKernelTeardownVkJson), + PublicKernelInnerArtifact: keyJsonToVKData(PublicKernelInnerVkJson), + PublicKernelMergeArtifact: keyJsonToVKData(PublicKernelMergeVkJson), PublicKernelTailArtifact: keyJsonToVKData(PublicKernelTailVkJson), BaseParityArtifact: keyJsonToVKData(BaseParityVkJson), RootParityArtifact: keyJsonToVKData(RootParityVkJson), BaseRollupArtifact: keyJsonToVKData(BaseRollupVkJson), MergeRollupArtifact: keyJsonToVKData(MergeRollupVkJson), BlockRootRollupArtifact: keyJsonToVKData(BlockRootRollupVkJson), + BlockRootRollupFinalArtifact: keyJsonToVKData(BlockRootRollupFinalVkJson), BlockMergeRollupArtifact: keyJsonToVKData(BlockMergeRollupVkJson), RootRollupArtifact: keyJsonToVKData(RootRollupVkJson), }; @@ -125,9 +125,8 @@ export const ProtocolCircuitVkIndexes: Record = { PrivateKernelResetTinyArtifact: PRIVATE_KERNEL_RESET_TINY_INDEX, PrivateKernelTailArtifact: PRIVATE_KERNEL_TAIL_INDEX, PrivateKernelTailToPublicArtifact: PRIVATE_KERNEL_TAIL_TO_PUBLIC_INDEX, - PublicKernelSetupArtifact: PUBLIC_KERNEL_SETUP_INDEX, - PublicKernelAppLogicArtifact: PUBLIC_KERNEL_APP_LOGIC_INDEX, - PublicKernelTeardownArtifact: PUBLIC_KERNEL_TEARDOWN_INDEX, + PublicKernelInnerArtifact: PUBLIC_KERNEL_INNER_INDEX, + PublicKernelMergeArtifact: PUBLIC_KERNEL_MERGE_INDEX, PublicKernelTailArtifact: PUBLIC_KERNEL_TAIL_INDEX, BaseParityArtifact: BASE_PARITY_INDEX, RootParityArtifact: ROOT_PARITY_INDEX, @@ -136,6 +135,7 @@ export const ProtocolCircuitVkIndexes: Record = { BlockRootRollupArtifact: BLOCK_ROOT_ROLLUP_INDEX, BlockMergeRollupArtifact: BLOCK_MERGE_ROLLUP_INDEX, RootRollupArtifact: ROOT_ROLLUP_INDEX, + BlockRootRollupFinalArtifact: BLOCK_ROOT_ROLLUP_FINAL_INDEX, }; function buildVKTree() { diff --git a/yarn-project/p2p/src/attestation_pool/memory_attestation_pool.test.ts b/yarn-project/p2p/src/attestation_pool/memory_attestation_pool.test.ts index 37e3195c309..98c51e2dd0f 100644 --- a/yarn-project/p2p/src/attestation_pool/memory_attestation_pool.test.ts +++ b/yarn-project/p2p/src/attestation_pool/memory_attestation_pool.test.ts @@ -39,12 +39,12 @@ describe('MemoryAttestationPool', () => { await ap.addAttestations(attestations); for (const attestation of attestations) { - const slot = attestation.header.globalVariables.slotNumber; + const slot = attestation.payload.header.globalVariables.slotNumber; const retreivedAttestations = await ap.getAttestationsForSlot(slot.toBigInt()); expect(retreivedAttestations.length).toBe(1); expect(retreivedAttestations[0]).toEqual(attestation); - expect(retreivedAttestations[0].header.globalVariables.slotNumber).toEqual(slot); + expect(retreivedAttestations[0].payload.header.globalVariables.slotNumber).toEqual(slot); } }); diff --git a/yarn-project/p2p/src/attestation_pool/memory_attestation_pool.ts b/yarn-project/p2p/src/attestation_pool/memory_attestation_pool.ts index 524a399aece..c71a638d99c 100644 --- a/yarn-project/p2p/src/attestation_pool/memory_attestation_pool.ts +++ b/yarn-project/p2p/src/attestation_pool/memory_attestation_pool.ts @@ -19,18 +19,19 @@ export class InMemoryAttestationPool implements AttestationPool { } } - public async addAttestations(attestations: BlockAttestation[]): Promise { + public addAttestations(attestations: BlockAttestation[]): Promise { for (const attestation of attestations) { // Perf: order and group by slot before insertion - const slotNumber = attestation.header.globalVariables.slotNumber; + const slotNumber = attestation.payload.header.globalVariables.slotNumber; - const address = await attestation.getSender(); + const address = attestation.getSender(); const slotAttestationMap = getSlotOrDefault(this.attestations, slotNumber.toBigInt()); slotAttestationMap.set(address.toString(), attestation); this.log.verbose(`Added attestation for slot ${slotNumber} from ${address}`); } + return Promise.resolve(); } public deleteAttestationsForSlot(slot: bigint): Promise { @@ -40,12 +41,12 @@ export class InMemoryAttestationPool implements AttestationPool { return Promise.resolve(); } - public async deleteAttestations(attestations: BlockAttestation[]): Promise { + public deleteAttestations(attestations: BlockAttestation[]): Promise { for (const attestation of attestations) { - const slotNumber = attestation.header.globalVariables.slotNumber; + const slotNumber = attestation.payload.header.globalVariables.slotNumber; const slotAttestationMap = this.attestations.get(slotNumber.toBigInt()); if (slotAttestationMap) { - const address = await attestation.getSender(); + const address = attestation.getSender(); slotAttestationMap.delete(address.toString()); this.log.verbose(`Deleted attestation for slot ${slotNumber} from ${address}`); } diff --git a/yarn-project/p2p/src/attestation_pool/mocks.ts b/yarn-project/p2p/src/attestation_pool/mocks.ts index 00194d52b96..a0c3e1d05f3 100644 --- a/yarn-project/p2p/src/attestation_pool/mocks.ts +++ b/yarn-project/p2p/src/attestation_pool/mocks.ts @@ -1,7 +1,7 @@ -import { BlockAttestation, Signature, TxHash } from '@aztec/circuit-types'; +import { BlockAttestation, ConsensusPayload, TxHash } from '@aztec/circuit-types'; import { makeHeader } from '@aztec/circuits.js/testing'; +import { Signature } from '@aztec/foundation/eth-signature'; import { Fr } from '@aztec/foundation/fields'; -import { serializeToBuffer } from '@aztec/foundation/serialize'; import { type PrivateKeyAccount } from 'viem'; import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts'; @@ -28,9 +28,11 @@ export const mockAttestation = async (signer: PrivateKeyAccount, slot: number = const archive = Fr.random(); const txs = [0, 1, 2, 3, 4, 5].map(() => TxHash.random()); - const message: `0x${string}` = `0x${serializeToBuffer([archive, txs]).toString('hex')}`; + const payload = new ConsensusPayload(header, archive, txs); + + const message: `0x${string}` = `0x${payload.getPayloadToSign().toString('hex')}`; const sigString = await signer.signMessage({ message }); const signature = Signature.from0xString(sigString); - return new BlockAttestation(header, archive, txs, signature); + return new BlockAttestation(payload, signature); }; diff --git a/yarn-project/p2p/src/client/index.ts b/yarn-project/p2p/src/client/index.ts index 518387edfa9..e36054fd7fd 100644 --- a/yarn-project/p2p/src/client/index.ts +++ b/yarn-project/p2p/src/client/index.ts @@ -1,4 +1,4 @@ -import { type L2BlockSource } from '@aztec/circuit-types'; +import type { ClientProtocolCircuitVerifier, L2BlockSource, WorldStateSynchronizer } from '@aztec/circuit-types'; import { createDebugLogger } from '@aztec/foundation/log'; import { type AztecKVStore } from '@aztec/kv-store'; import { type DataStoreConfig, createStore } from '@aztec/kv-store/utils'; @@ -17,69 +17,87 @@ import { getPublicIp, resolveAddressIfNecessary, splitAddressPort } from '../uti export * from './p2p_client.js'; export const createP2PClient = async ( - config: P2PConfig & DataStoreConfig, + _config: P2PConfig & DataStoreConfig, attestationsPool: AttestationPool, l2BlockSource: L2BlockSource, + proofVerifier: ClientProtocolCircuitVerifier, + worldStateSynchronizer: WorldStateSynchronizer, telemetry: TelemetryClient = new NoopTelemetryClient(), deps: { txPool?: TxPool; store?: AztecKVStore } = {}, ) => { + let config = { ..._config }; const store = deps.store ?? (await createStore('p2p', config, createDebugLogger('aztec:p2p:lmdb'))); const txPool = deps.txPool ?? new AztecKVTxPool(store, telemetry); let p2pService; - if (config.p2pEnabled) { - // If announceTcpAddress or announceUdpAddress are not provided, query for public IP if config allows - - const { - tcpAnnounceAddress: configTcpAnnounceAddress, - udpAnnounceAddress: configUdpAnnounceAddress, - queryForIp, - } = config; - - config.tcpAnnounceAddress = configTcpAnnounceAddress - ? await resolveAddressIfNecessary(configTcpAnnounceAddress) - : undefined; - config.udpAnnounceAddress = configUdpAnnounceAddress - ? await resolveAddressIfNecessary(configUdpAnnounceAddress) - : undefined; - - // create variable for re-use if needed - let publicIp; - - // check if no announce IP was provided - const splitTcpAnnounceAddress = splitAddressPort(configTcpAnnounceAddress || '', true); - if (splitTcpAnnounceAddress.length == 2 && splitTcpAnnounceAddress[0] === '') { - if (queryForIp) { - publicIp = await getPublicIp(); - const tcpAnnounceAddress = `${publicIp}:${splitTcpAnnounceAddress[1]}`; - config.tcpAnnounceAddress = tcpAnnounceAddress; - } else { - throw new Error( - `Invalid announceTcpAddress provided: ${configTcpAnnounceAddress}. Expected format: :`, - ); - } - } - - const splitUdpAnnounceAddress = splitAddressPort(configUdpAnnounceAddress || '', true); - if (splitUdpAnnounceAddress.length == 2 && splitUdpAnnounceAddress[0] === '') { - // If announceUdpAddress is not provided, use announceTcpAddress - if (!queryForIp && config.tcpAnnounceAddress) { - config.udpAnnounceAddress = config.tcpAnnounceAddress; - } else if (queryForIp) { - const udpPublicIp = publicIp || (await getPublicIp()); - const udpAnnounceAddress = `${udpPublicIp}:${splitUdpAnnounceAddress[1]}`; - config.udpAnnounceAddress = udpAnnounceAddress; - } - } + if (_config.p2pEnabled) { + config = await configureP2PClientAddresses(_config); // Create peer discovery service const peerId = await createLibP2PPeerId(config.peerIdPrivateKey); const discoveryService = new DiscV5Service(peerId, config); - p2pService = await LibP2PService.new(config, discoveryService, peerId, txPool, attestationsPool, store); + p2pService = await LibP2PService.new( + config, + discoveryService, + peerId, + txPool, + attestationsPool, + l2BlockSource, + proofVerifier, + worldStateSynchronizer, + store, + ); } else { p2pService = new DummyP2PService(); } return new P2PClient(store, l2BlockSource, txPool, attestationsPool, p2pService, config.keepProvenTxsInPoolFor); }; + +async function configureP2PClientAddresses(_config: P2PConfig & DataStoreConfig): Promise { + const config = { ..._config }; + const { + tcpAnnounceAddress: configTcpAnnounceAddress, + udpAnnounceAddress: configUdpAnnounceAddress, + queryForIp, + } = config; + + config.tcpAnnounceAddress = configTcpAnnounceAddress + ? await resolveAddressIfNecessary(configTcpAnnounceAddress) + : undefined; + config.udpAnnounceAddress = configUdpAnnounceAddress + ? await resolveAddressIfNecessary(configUdpAnnounceAddress) + : undefined; + + // create variable for re-use if needed + let publicIp; + + // check if no announce IP was provided + const splitTcpAnnounceAddress = splitAddressPort(configTcpAnnounceAddress || '', true); + if (splitTcpAnnounceAddress.length == 2 && splitTcpAnnounceAddress[0] === '') { + if (queryForIp) { + publicIp = await getPublicIp(); + const tcpAnnounceAddress = `${publicIp}:${splitTcpAnnounceAddress[1]}`; + config.tcpAnnounceAddress = tcpAnnounceAddress; + } else { + throw new Error( + `Invalid announceTcpAddress provided: ${configTcpAnnounceAddress}. Expected format: :`, + ); + } + } + + const splitUdpAnnounceAddress = splitAddressPort(configUdpAnnounceAddress || '', true); + if (splitUdpAnnounceAddress.length == 2 && splitUdpAnnounceAddress[0] === '') { + // If announceUdpAddress is not provided, use announceTcpAddress + if (!queryForIp && config.tcpAnnounceAddress) { + config.udpAnnounceAddress = config.tcpAnnounceAddress; + } else if (queryForIp) { + const udpPublicIp = publicIp || (await getPublicIp()); + const udpAnnounceAddress = `${udpPublicIp}:${splitUdpAnnounceAddress[1]}`; + config.udpAnnounceAddress = udpAnnounceAddress; + } + } + + return config; +} diff --git a/yarn-project/p2p/src/client/p2p_client.test.ts b/yarn-project/p2p/src/client/p2p_client.test.ts index f795da34aee..196a0ee45b7 100644 --- a/yarn-project/p2p/src/client/p2p_client.test.ts +++ b/yarn-project/p2p/src/client/p2p_client.test.ts @@ -61,9 +61,14 @@ describe('In-Memory P2P Client', () => { client = new P2PClient(kvStore, blockSource, txPool, attestationPool, p2pService, 0); }); - const advanceToProvenBlock = async (provenBlockNum: number) => { - blockSource.setProvenBlockNumber(provenBlockNum); - await retryUntil(() => Promise.resolve(client.getSyncedProvenBlockNum() >= provenBlockNum), 'synced', 10, 0.1); + const advanceToProvenBlock = async (getProvenBlockNumber: number) => { + blockSource.setProvenBlockNumber(getProvenBlockNumber); + await retryUntil( + () => Promise.resolve(client.getSyncedProvenBlockNum() >= getProvenBlockNumber), + 'synced', + 10, + 0.1, + ); }; it('can start & stop', async () => { diff --git a/yarn-project/p2p/src/client/p2p_client.ts b/yarn-project/p2p/src/client/p2p_client.ts index 9fec7856fae..63c5b453f0a 100644 --- a/yarn-project/p2p/src/client/p2p_client.ts +++ b/yarn-project/p2p/src/client/p2p_client.ts @@ -319,8 +319,6 @@ export class P2PClient implements P2P { this.log.debug(`Requested ${txHash.toString()} from peer | success = ${!!tx}`); if (tx) { - // TODO(https://github.com/AztecProtocol/aztec-packages/issues/8485): This check is not sufficient to validate the transaction. We need to validate the entire proof. - // TODO(https://github.com/AztecProtocol/aztec-packages/issues/8483): alter peer scoring system for a validator that returns an invalid transcation await this.txPool.addTxs([tx]); } diff --git a/yarn-project/p2p/src/config.ts b/yarn-project/p2p/src/config.ts index 004950685f7..d6d4d743656 100644 --- a/yarn-project/p2p/src/config.ts +++ b/yarn-project/p2p/src/config.ts @@ -2,6 +2,7 @@ import { type ConfigMappingsType, booleanConfigHelper, getConfigFromMappings, + getDefaultConfig, numberConfigHelper, pickConfigMappings, } from '@aztec/foundation/config'; @@ -89,6 +90,66 @@ export interface P2PConfig extends P2PReqRespConfig { /** How many blocks have to pass after a block is proven before its txs are deleted (zero to delete immediately once proven) */ keepProvenTxsInPoolFor: number; + + /** + * The interval of the gossipsub heartbeat to perform maintenance tasks. + */ + gossipsubInterval: number; + + /** + * The D parameter for the gossipsub protocol. + */ + gossipsubD: number; + + /** + * The Dlo parameter for the gossipsub protocol. + */ + gossipsubDlo: number; + + /** + * The Dhi parameter for the gossipsub protocol. + */ + gossipsubDhi: number; + + /** + * The number of gossipsub interval message cache windows to keep. + */ + gossipsubMcacheLength: number; + + /** + * How many message cache windows to include when gossiping with other pears. + */ + gossipsubMcacheGossip: number; + + /** + * The 'age' (in # of L2 blocks) of a processed tx after which we heavily penalize a peer for re-sending it. + */ + severePeerPenaltyBlockLength: number; + + /** + * The weight of the tx topic for the gossipsub protocol. This determines how much the score for this specific topic contributes to the overall peer score. + */ + gossipsubTxTopicWeight: number; + + /** + * This is the weight applied to the penalty for delivering invalid messages. + */ + gossipsubTxInvalidMessageDeliveriesWeight: number; + + /** + * determines how quickly the penalty for invalid message deliveries decays over time. Between 0 and 1. + */ + gossipsubTxInvalidMessageDeliveriesDecay: number; + + /** + * The values for the peer scoring system. Passed as a comma separated list of values in order: low, mid, high tolerance errors. + */ + peerPenaltyValues: number[]; + + /** + * The chain id of the L1 chain. + */ + l1ChainId: number; } export const p2pConfigMappings: ConfigMappingsType = { @@ -172,6 +233,68 @@ export const p2pConfigMappings: ConfigMappingsType = { 'How many blocks have to pass after a block is proven before its txs are deleted (zero to delete immediately once proven)', ...numberConfigHelper(0), }, + gossipsubInterval: { + env: 'P2P_GOSSIPSUB_INTERVAL_MS', + description: 'The interval of the gossipsub heartbeat to perform maintenance tasks.', + ...numberConfigHelper(1_000), + }, + gossipsubD: { + env: 'P2P_GOSSIPSUB_D', + description: 'The D parameter for the gossipsub protocol.', + ...numberConfigHelper(8), + }, + gossipsubDlo: { + env: 'P2P_GOSSIPSUB_DLO', + description: 'The Dlo parameter for the gossipsub protocol.', + ...numberConfigHelper(4), + }, + gossipsubDhi: { + env: 'P2P_GOSSIPSUB_DHI', + description: 'The Dhi parameter for the gossipsub protocol.', + ...numberConfigHelper(12), + }, + gossipsubMcacheLength: { + env: 'P2P_GOSSIPSUB_MCACHE_LENGTH', + description: 'The number of gossipsub interval message cache windows to keep.', + ...numberConfigHelper(5), + }, + gossipsubMcacheGossip: { + env: 'P2P_GOSSIPSUB_MCACHE_GOSSIP', + description: 'How many message cache windows to include when gossiping with other pears.', + ...numberConfigHelper(3), + }, + gossipsubTxTopicWeight: { + env: 'P2P_GOSSIPSUB_TX_TOPIC_WEIGHT', + description: 'The weight of the tx topic for the gossipsub protocol.', + ...numberConfigHelper(1), + }, + gossipsubTxInvalidMessageDeliveriesWeight: { + env: 'P2P_GOSSIPSUB_TX_INVALID_MESSAGE_DELIVERIES_WEIGHT', + description: 'The weight of the tx invalid message deliveries for the gossipsub protocol.', + ...numberConfigHelper(-20), + }, + gossipsubTxInvalidMessageDeliveriesDecay: { + env: 'P2P_GOSSIPSUB_TX_INVALID_MESSAGE_DELIVERIES_DECAY', + description: 'Determines how quickly the penalty for invalid message deliveries decays over time. Between 0 and 1.', + ...numberConfigHelper(0.5), + }, + peerPenaltyValues: { + env: 'P2P_PEER_PENALTY_VALUES', + parseEnv: (val: string) => val.split(',').map(Number), + description: + 'The values for the peer scoring system. Passed as a comma separated list of values in order: low, mid, high tolerance errors.', + defaultValue: [2, 10, 50], + }, + severePeerPenaltyBlockLength: { + env: 'P2P_SEVERE_PEER_PENALTY_BLOCK_LENGTH', + description: 'The "age" (in L2 blocks) of a tx after which we heavily penalize a peer for sending it.', + ...numberConfigHelper(30), + }, + l1ChainId: { + env: 'L1_CHAIN_ID', + description: 'The chain id of the L1 chain.', + ...numberConfigHelper(31337), + }, ...p2pReqRespConfigMappings, }; @@ -183,6 +306,10 @@ export function getP2PConfigEnvVars(): P2PConfig { return getConfigFromMappings(p2pConfigMappings); } +export function getP2PDefaultConfig(): P2PConfig { + return getDefaultConfig(p2pConfigMappings); +} + /** * Required P2P config values for a bootstrap node. */ diff --git a/yarn-project/p2p/src/index.ts b/yarn-project/p2p/src/index.ts index cf9356eef93..e69651a7904 100644 --- a/yarn-project/p2p/src/index.ts +++ b/yarn-project/p2p/src/index.ts @@ -4,3 +4,4 @@ export * from './tx_pool/index.js'; export * from './attestation_pool/index.js'; export * from './service/index.js'; export * from './bootstrap/bootstrap.js'; +export * from './tx_validator/index.js'; diff --git a/yarn-project/p2p/src/mocks/index.ts b/yarn-project/p2p/src/mocks/index.ts index c9d0679e3f8..2610d691203 100644 --- a/yarn-project/p2p/src/mocks/index.ts +++ b/yarn-project/p2p/src/mocks/index.ts @@ -1,16 +1,21 @@ +import { type ClientProtocolCircuitVerifier, type Tx } from '@aztec/circuit-types'; + import { noise } from '@chainsafe/libp2p-noise'; import { yamux } from '@chainsafe/libp2p-yamux'; import { bootstrap } from '@libp2p/bootstrap'; import { tcp } from '@libp2p/tcp'; import { type Libp2p, type Libp2pOptions, createLibp2p } from 'libp2p'; +import { type PeerManager } from '../service/peer_manager.js'; import { type P2PReqRespConfig } from '../service/reqresp/config.js'; import { pingHandler, statusHandler } from '../service/reqresp/handlers.js'; import { PING_PROTOCOL, type ReqRespSubProtocolHandlers, + type ReqRespSubProtocolValidators, STATUS_PROTOCOL, TX_REQ_PROTOCOL, + noopValidator, } from '../service/reqresp/interface.js'; import { ReqResp } from '../service/reqresp/reqresp.js'; @@ -56,18 +61,29 @@ export const MOCK_SUB_PROTOCOL_HANDLERS: ReqRespSubProtocolHandlers = { [TX_REQ_PROTOCOL]: (_msg: any) => Promise.resolve(Uint8Array.from(Buffer.from('tx'))), }; +// By default, all requests are valid +// If you want to test an invalid response, you can override the validator +export const MOCK_SUB_PROTOCOL_VALIDATORS: ReqRespSubProtocolValidators = { + [PING_PROTOCOL]: noopValidator, + [STATUS_PROTOCOL]: noopValidator, + [TX_REQ_PROTOCOL]: noopValidator, +}; + /** * @param numberOfNodes - the number of nodes to create * @returns An array of the created nodes */ -export const createNodes = async (numberOfNodes: number): Promise => { - return await Promise.all(Array.from({ length: numberOfNodes }, () => createReqResp())); +export const createNodes = async (peerManager: PeerManager, numberOfNodes: number): Promise => { + return await Promise.all(Array.from({ length: numberOfNodes }, () => createReqResp(peerManager))); }; -// TODO: think about where else this can go -export const startNodes = async (nodes: ReqRespNode[], subProtocolHandlers = MOCK_SUB_PROTOCOL_HANDLERS) => { +export const startNodes = async ( + nodes: ReqRespNode[], + subProtocolHandlers = MOCK_SUB_PROTOCOL_HANDLERS, + subProtocolValidators = MOCK_SUB_PROTOCOL_VALIDATORS, +) => { for (const node of nodes) { - await node.req.start(subProtocolHandlers); + await node.req.start(subProtocolHandlers, subProtocolValidators); } }; @@ -79,13 +95,13 @@ export const stopNodes = async (nodes: ReqRespNode[]): Promise => { }; // Create a req resp node, exposing the underlying p2p node -export const createReqResp = async (): Promise => { +export const createReqResp = async (peerManager: PeerManager): Promise => { const p2p = await createLibp2pNode(); const config: P2PReqRespConfig = { overallRequestTimeoutMs: 4000, individualRequestTimeoutMs: 2000, }; - const req = new ReqResp(config, p2p); + const req = new ReqResp(config, p2p, peerManager); return { p2p, req, @@ -104,3 +120,15 @@ export const connectToPeers = async (nodes: ReqRespNode[]): Promise => { } } }; + +// Mock circuit verifier for testing - reimplementation from bb to avoid dependency +export class AlwaysTrueCircuitVerifier implements ClientProtocolCircuitVerifier { + verifyProof(_tx: Tx): Promise { + return Promise.resolve(true); + } +} +export class AlwaysFalseCircuitVerifier implements ClientProtocolCircuitVerifier { + verifyProof(_tx: Tx): Promise { + return Promise.resolve(false); + } +} diff --git a/yarn-project/p2p/src/service/discv5_service.test.ts b/yarn-project/p2p/src/service/discv5_service.test.ts index d9487d14bda..1f7acf1eef5 100644 --- a/yarn-project/p2p/src/service/discv5_service.test.ts +++ b/yarn-project/p2p/src/service/discv5_service.test.ts @@ -4,10 +4,9 @@ import { jest } from '@jest/globals'; import type { PeerId } from '@libp2p/interface'; import { BootstrapNode } from '../bootstrap/bootstrap.js'; -import { type P2PConfig } from '../config.js'; +import { type P2PConfig, getP2PDefaultConfig } from '../config.js'; import { DiscV5Service } from './discV5_service.js'; import { createLibP2PPeerId } from './libp2p_service.js'; -import { DEFAULT_P2P_REQRESP_CONFIG } from './reqresp/config.js'; import { PeerDiscoveryState } from './service.js'; const waitForPeers = (node: DiscV5Service, expectedCount: number): Promise => { @@ -124,6 +123,7 @@ describe('Discv5Service', () => { const bootnodeAddr = bootNode.getENR().encodeTxt(); const peerId = await createLibP2PPeerId(); const config: P2PConfig = { + ...getP2PDefaultConfig(), ...baseConfig, tcpListenAddress: `0.0.0.0:${port}`, udpListenAddress: `0.0.0.0:${port}`, @@ -136,7 +136,7 @@ describe('Discv5Service', () => { p2pEnabled: true, l2QueueSize: 100, keepProvenTxsInPoolFor: 0, - ...DEFAULT_P2P_REQRESP_CONFIG, + l1ChainId: 31337, }; return new DiscV5Service(peerId, config); }; diff --git a/yarn-project/p2p/src/service/libp2p_service.ts b/yarn-project/p2p/src/service/libp2p_service.ts index 446c5191734..2c6778eb8fb 100644 --- a/yarn-project/p2p/src/service/libp2p_service.ts +++ b/yarn-project/p2p/src/service/libp2p_service.ts @@ -1,55 +1,63 @@ import { BlockAttestation, BlockProposal, + type ClientProtocolCircuitVerifier, type Gossipable, + type L2BlockSource, + MerkleTreeId, type RawGossipMessage, TopicType, TopicTypeMap, Tx, TxHash, + type WorldStateSynchronizer, } from '@aztec/circuit-types'; +import { Fr } from '@aztec/circuits.js'; import { createDebugLogger } from '@aztec/foundation/log'; import { SerialQueue } from '@aztec/foundation/queue'; import { RunningPromise } from '@aztec/foundation/running-promise'; import type { AztecKVStore } from '@aztec/kv-store'; import { type ENR } from '@chainsafe/enr'; -import { type GossipsubEvents, gossipsub } from '@chainsafe/libp2p-gossipsub'; +import { type GossipSub, type GossipSubComponents, gossipsub } from '@chainsafe/libp2p-gossipsub'; +import { createPeerScoreParams, createTopicScoreParams } from '@chainsafe/libp2p-gossipsub/score'; import { noise } from '@chainsafe/libp2p-noise'; import { yamux } from '@chainsafe/libp2p-yamux'; import { identify } from '@libp2p/identify'; -import type { PeerId, PubSub } from '@libp2p/interface'; +import type { PeerId } from '@libp2p/interface'; import '@libp2p/kad-dht'; import { mplex } from '@libp2p/mplex'; import { createFromJSON, createSecp256k1PeerId } from '@libp2p/peer-id-factory'; import { tcp } from '@libp2p/tcp'; -import { type Libp2p, createLibp2p } from 'libp2p'; +import { createLibp2p } from 'libp2p'; import { type AttestationPool } from '../attestation_pool/attestation_pool.js'; import { type P2PConfig } from '../config.js'; import { type TxPool } from '../tx_pool/index.js'; -import { convertToMultiaddr } from '../util.js'; +import { + DataTxValidator, + DoubleSpendTxValidator, + MetadataTxValidator, + TxProofValidator, +} from '../tx_validator/index.js'; +import { type PubSubLibp2p, convertToMultiaddr } from '../util.js'; import { AztecDatastore } from './data_store.js'; import { PeerManager } from './peer_manager.js'; +import { PeerErrorSeverity } from './peer_scoring.js'; import { pingHandler, statusHandler } from './reqresp/handlers.js'; import { DEFAULT_SUB_PROTOCOL_HANDLERS, + DEFAULT_SUB_PROTOCOL_VALIDATORS, PING_PROTOCOL, type ReqRespSubProtocol, type ReqRespSubProtocolHandlers, STATUS_PROTOCOL, type SubProtocolMap, TX_REQ_PROTOCOL, - subProtocolMap, } from './reqresp/interface.js'; import { ReqResp } from './reqresp/reqresp.js'; import type { P2PService, PeerDiscoveryService } from './service.js'; -export interface PubSubLibp2p extends Libp2p { - services: { - pubsub: PubSub; - }; -} /** * Create a libp2p peer ID from the private key if provided, otherwise creates a new random ID. * @param privateKey - Optional peer ID private key as hex string @@ -90,11 +98,18 @@ export class LibP2PService implements P2PService { private peerDiscoveryService: PeerDiscoveryService, private txPool: TxPool, private attestationPool: AttestationPool, + private l2BlockSource: L2BlockSource, + private proofVerifier: ClientProtocolCircuitVerifier, + private worldStateSynchronizer: WorldStateSynchronizer, private requestResponseHandlers: ReqRespSubProtocolHandlers = DEFAULT_SUB_PROTOCOL_HANDLERS, private logger = createDebugLogger('aztec:libp2p_service'), ) { this.peerManager = new PeerManager(node, peerDiscoveryService, config, logger); - this.reqresp = new ReqResp(config, node); + this.node.services.pubsub.score.params.appSpecificScore = (peerId: string) => { + return this.peerManager.getPeerScore(peerId); + }; + this.node.services.pubsub.score.params.appSpecificWeight = 10; + this.reqresp = new ReqResp(config, node, this.peerManager); this.blockReceivedCallback = (block: BlockProposal): Promise => { this.logger.verbose( @@ -136,18 +151,24 @@ export class LibP2PService implements P2PService { // add GossipSub listener this.node.services.pubsub.addEventListener('gossipsub:message', async e => { - const { msg } = e.detail; + const { msg, propagationSource: peerId } = e.detail; this.logger.debug(`Received PUBSUB message.`); - await this.jobQueue.put(() => this.handleNewGossipMessage(msg)); + await this.jobQueue.put(() => this.handleNewGossipMessage(msg, peerId)); }); // Start running promise for peer discovery this.discoveryRunningPromise = new RunningPromise(() => { - this.peerManager.discover(); + this.peerManager.heartbeat(); }, this.config.peerCheckIntervalMS); this.discoveryRunningPromise.start(); - await this.reqresp.start(this.requestResponseHandlers); + + // Define the sub protocol validators - This is done within this start() method to gain a callback to the existing validateTx function + const reqrespSubProtocolValidators = { + ...DEFAULT_SUB_PROTOCOL_VALIDATORS, + [TX_REQ_PROTOCOL]: this.validateRequestedTx.bind(this), + }; + await this.reqresp.start(this.requestResponseHandlers, reqrespSubProtocolValidators); } /** @@ -181,6 +202,9 @@ export class LibP2PService implements P2PService { peerId: PeerId, txPool: TxPool, attestationPool: AttestationPool, + l2BlockSource: L2BlockSource, + proofVerifier: ClientProtocolCircuitVerifier, + worldStateSynchronizer: WorldStateSynchronizer, store: AztecKVStore, ) { const { tcpListenAddress, tcpAnnounceAddress, minPeerCount, maxPeerCount } = config; @@ -223,13 +247,22 @@ export class LibP2PService implements P2PService { }), pubsub: gossipsub({ allowPublishToZeroTopicPeers: true, - D: 6, - Dlo: 4, - Dhi: 12, - heartbeatInterval: 1_000, - mcacheLength: 5, - mcacheGossip: 3, - }), + D: config.gossipsubD, + Dlo: config.gossipsubDlo, + Dhi: config.gossipsubDhi, + heartbeatInterval: config.gossipsubInterval, + mcacheLength: config.gossipsubMcacheLength, + mcacheGossip: config.gossipsubMcacheGossip, + scoreParams: createPeerScoreParams({ + topics: { + [Tx.p2pTopic]: createTopicScoreParams({ + topicWeight: 1, + invalidMessageDeliveriesWeight: -20, + invalidMessageDeliveriesDecay: 0.5, + }), + }, + }), + }) as (components: GossipSubComponents) => GossipSub, }, }); @@ -252,7 +285,17 @@ export class LibP2PService implements P2PService { [TX_REQ_PROTOCOL]: txHandler, }; - return new LibP2PService(config, node, peerDiscoveryService, txPool, attestationPool, requestResponseHandlers); + return new LibP2PService( + config, + node, + peerDiscoveryService, + txPool, + attestationPool, + l2BlockSource, + proofVerifier, + worldStateSynchronizer, + requestResponseHandlers, + ); } /** @@ -265,18 +308,11 @@ export class LibP2PService implements P2PService { * @param request The request type to send * @returns */ - async sendRequest( + sendRequest( protocol: SubProtocol, request: InstanceType, ): Promise | undefined> { - const pair = subProtocolMap[protocol]; - - const res = await this.reqresp.sendRequest(protocol, request.toBuffer()); - if (!res) { - return undefined; - } - - return pair.response.fromBuffer(res!); + return this.reqresp.sendRequest(protocol, request); } /** @@ -323,10 +359,10 @@ export class LibP2PService implements P2PService { * @param topic - The message's topic. * @param data - The message data */ - private async handleNewGossipMessage(message: RawGossipMessage) { + private async handleNewGossipMessage(message: RawGossipMessage, peerId: PeerId) { if (message.topic === Tx.p2pTopic) { const tx = Tx.fromBuffer(Buffer.from(message.data)); - await this.processTxFromPeer(tx); + await this.processTxFromPeer(tx, peerId); } if (message.topic === BlockAttestation.p2pTopic) { const attestation = BlockAttestation.fromBuffer(Buffer.from(message.data)); @@ -376,11 +412,121 @@ export class LibP2PService implements P2PService { void this.jobQueue.put(() => Promise.resolve(this.sendToPeers(message))); } - private async processTxFromPeer(tx: Tx): Promise { + private async processTxFromPeer(tx: Tx, peerId: PeerId): Promise { const txHash = tx.getTxHash(); const txHashString = txHash.toString(); this.logger.verbose(`Received tx ${txHashString} from external peer.`); - await this.txPool.addTxs([tx]); + + const isValidTx = await this.validatePropagatedTx(tx, peerId); + + if (isValidTx) { + await this.txPool.addTxs([tx]); + } + } + + /** + * Validate a tx that has been requested from a peer. + * + * The core component of this validator is that the tx hash MUST match the requested tx hash, + * In order to perform this check, the tx proof must be verified. + * + * Note: This function is called from within `ReqResp.sendRequest` as part of the + * TX_REQ_PROTOCOL subprotocol validation. + * + * @param requestedTxHash - The hash of the tx that was requested. + * @param responseTx - The tx that was received as a response to the request. + * @param peerId - The peer ID of the peer that sent the tx. + * @returns True if the tx is valid, false otherwise. + */ + private async validateRequestedTx(requestedTxHash: TxHash, responseTx: Tx, peerId: PeerId): Promise { + const proofValidator = new TxProofValidator(this.proofVerifier); + const validProof = await proofValidator.validateTx(responseTx); + + // If the node returns the wrong data, we penalize it + if (!requestedTxHash.equals(responseTx.getTxHash())) { + // Returning the wrong data is a low tolerance error + this.peerManager.penalizePeer(peerId, PeerErrorSeverity.MidToleranceError); + return false; + } + + if (!validProof) { + // If the proof is invalid, but the txHash is correct, then this is an active attack and we severly punish + this.peerManager.penalizePeer(peerId, PeerErrorSeverity.LowToleranceError); + return false; + } + + return true; + } + + private async validatePropagatedTx(tx: Tx, peerId: PeerId): Promise { + const blockNumber = (await this.l2BlockSource.getBlockNumber()) + 1; + // basic data validation + const dataValidator = new DataTxValidator(); + const validData = await dataValidator.validateTx(tx); + if (!validData) { + // penalize + this.node.services.pubsub.score.markInvalidMessageDelivery(peerId.toString(), Tx.p2pTopic); + return false; + } + + // metadata validation + const metadataValidator = new MetadataTxValidator(new Fr(this.config.l1ChainId), new Fr(blockNumber)); + const validMetadata = await metadataValidator.validateTx(tx); + if (!validMetadata) { + // penalize + this.node.services.pubsub.score.markInvalidMessageDelivery(peerId.toString(), Tx.p2pTopic); + return false; + } + + // double spend validation + const doubleSpendValidator = new DoubleSpendTxValidator({ + getNullifierIndex: async (nullifier: Fr) => { + const merkleTree = this.worldStateSynchronizer.getLatest(); + const index = await merkleTree.findLeafIndex(MerkleTreeId.NULLIFIER_TREE, nullifier.toBuffer()); + return index; + }, + }); + const validDoubleSpend = await doubleSpendValidator.validateTx(tx); + if (!validDoubleSpend) { + // check if nullifier is older than 20 blocks + if (blockNumber - this.config.severePeerPenaltyBlockLength > 0) { + const snapshotValidator = new DoubleSpendTxValidator({ + getNullifierIndex: async (nullifier: Fr) => { + const merkleTree = this.worldStateSynchronizer.getSnapshot( + blockNumber - this.config.severePeerPenaltyBlockLength, + ); + const index = await merkleTree.findLeafIndex(MerkleTreeId.NULLIFIER_TREE, nullifier.toBuffer()); + return index; + }, + }); + + const validSnapshot = await snapshotValidator.validateTx(tx); + // High penalty if nullifier is older than 20 blocks + if (!validSnapshot) { + // penalize + this.peerManager.penalizePeer(peerId, PeerErrorSeverity.LowToleranceError); + return false; + } + } + // penalize + this.peerManager.penalizePeer(peerId, PeerErrorSeverity.HighToleranceError); + return false; + } + + // proof validation + const proofValidator = new TxProofValidator(this.proofVerifier); + const validProof = await proofValidator.validateTx(tx); + if (!validProof) { + // penalize + this.peerManager.penalizePeer(peerId, PeerErrorSeverity.MidToleranceError); + return false; + } + + return true; + } + + public getPeerScore(peerId: PeerId): number { + return this.node.services.pubsub.score.score(peerId.toString()); } private async sendToPeers(message: T) { diff --git a/yarn-project/p2p/src/service/peer_manager.ts b/yarn-project/p2p/src/service/peer_manager.ts index c81dab40124..edb0ee58f9a 100644 --- a/yarn-project/p2p/src/service/peer_manager.ts +++ b/yarn-project/p2p/src/service/peer_manager.ts @@ -3,9 +3,10 @@ import { createDebugLogger } from '@aztec/foundation/log'; import { type ENR } from '@chainsafe/enr'; import { type PeerId } from '@libp2p/interface'; import { type Multiaddr } from '@multiformats/multiaddr'; -import { type Libp2p } from 'libp2p'; import { type P2PConfig } from '../config.js'; +import { type PubSubLibp2p } from '../util.js'; +import { type PeerErrorSeverity, PeerScoring } from './peer_scoring.js'; import { type PeerDiscoveryService } from './service.js'; const MAX_DIAL_ATTEMPTS = 3; @@ -20,12 +21,15 @@ type CachedPeer = { export class PeerManager { private cachedPeers: Map = new Map(); + private peerScoring: PeerScoring; + constructor( - private libP2PNode: Libp2p, + private libP2PNode: PubSubLibp2p, private peerDiscoveryService: PeerDiscoveryService, private config: P2PConfig, private logger = createDebugLogger('aztec:p2p:peer_manager'), ) { + this.peerScoring = new PeerScoring(config); // Handle new established connections this.libP2PNode.addEventListener('peer:connect', evt => { const peerId = evt.detail; @@ -52,10 +56,25 @@ export class PeerManager { }); } + public heartbeat() { + this.discover(); + this.peerScoring.decayAllScores(); + } + + public penalizePeer(peerId: PeerId, penalty: PeerErrorSeverity) { + const id = peerId.toString(); + const penaltyValue = this.peerScoring.peerPenalties[penalty]; + this.peerScoring.updateScore(id, -penaltyValue); + } + + public getPeerScore(peerId: string): number { + return this.peerScoring.getScore(peerId); + } + /** * Discovers peers. */ - public discover() { + private discover() { // Get current connections const connections = this.libP2PNode.getConnections(); @@ -155,7 +174,7 @@ export class PeerManager { } } - async dialPeer(peer: CachedPeer) { + private async dialPeer(peer: CachedPeer) { const id = peer.peerId.toString(); await this.libP2PNode.peerStore.merge(peer.peerId, { multiaddrs: [peer.multiaddrTcp] }); diff --git a/yarn-project/p2p/src/service/peer_scoring.test.ts b/yarn-project/p2p/src/service/peer_scoring.test.ts new file mode 100644 index 00000000000..328f5dcd232 --- /dev/null +++ b/yarn-project/p2p/src/service/peer_scoring.test.ts @@ -0,0 +1,104 @@ +import { jest } from '@jest/globals'; + +import { getP2PDefaultConfig } from '../config.js'; +import { PeerErrorSeverity, PeerScoring } from './peer_scoring.js'; + +describe('PeerScoring', () => { + let peerScoring: PeerScoring; + const testPeerId = 'testPeer123'; + + beforeEach(() => { + peerScoring = new PeerScoring({ + ...getP2PDefaultConfig(), + peerPenaltyValues: [2, 10, 50], + }); + jest.useFakeTimers(); + }); + + afterEach(() => { + jest.useRealTimers(); + }); + + test('should initialize with zero score for a new peer', () => { + expect(peerScoring.getScore(testPeerId)).toBe(0); + }); + + test('should update score correctly', () => { + peerScoring.updateScore(testPeerId, 5); + expect(peerScoring.getScore(testPeerId)).toBe(5); + }); + + test('should accumulate scores', () => { + peerScoring.updateScore(testPeerId, 3); + peerScoring.updateScore(testPeerId, 2); + expect(peerScoring.getScore(testPeerId)).toBe(5); + }); + + test('should decay scores over time', () => { + peerScoring.updateScore(testPeerId, 10); + + // Advance time by 1 minute (decay interval) + jest.advanceTimersByTime(60000); + + peerScoring.updateScore(testPeerId, 0); // Trigger decay calculation + expect(peerScoring.getScore(testPeerId)).toBeCloseTo(9, 1); // 10 * 0.9 ≈ 9 + }); + + test('should decay all scores', () => { + peerScoring.updateScore(testPeerId, 10); + peerScoring.updateScore('anotherPeer', 20); + + // Advance time by 2 minutes + jest.advanceTimersByTime(120000); + + peerScoring.decayAllScores(); + expect(peerScoring.getScore(testPeerId)).toBeCloseTo(8.1, 1); // 10 * 0.9 * 0.9 ≈ 8.1 + expect(peerScoring.getScore('anotherPeer')).toBeCloseTo(16.2, 1); // 20 * 0.9 * 0.9 ≈ 16.2 + }); + + test('should apply correct penalties for different error severities', () => { + peerScoring.updateScore(testPeerId, -peerScoring.peerPenalties[PeerErrorSeverity.HighToleranceError]); + expect(peerScoring.getScore(testPeerId)).toBe(-2); + + peerScoring.updateScore(testPeerId, -peerScoring.peerPenalties[PeerErrorSeverity.MidToleranceError]); + expect(peerScoring.getScore(testPeerId)).toBe(-12); + + peerScoring.updateScore(testPeerId, -peerScoring.peerPenalties[PeerErrorSeverity.LowToleranceError]); + expect(peerScoring.getScore(testPeerId)).toBe(-62); + }); + + test('should return zero for non-existent peers', () => { + expect(peerScoring.getScore('nonExistentPeer')).toBe(0); + }); + + test('should apply maximum penalty correctly', () => { + const maxPenalty = Math.max(...Object.values(peerScoring.peerPenalties)); + peerScoring.updateScore(testPeerId, -maxPenalty); + expect(peerScoring.getScore(testPeerId)).toBe(-maxPenalty); + }); + + test('should handle score updates after long periods of inactivity', () => { + peerScoring.updateScore(testPeerId, 100); + jest.advanceTimersByTime(1000 * 60 * 60 * 24); // Advance 24 hours + peerScoring.updateScore(testPeerId, 10); + expect(peerScoring.getScore(testPeerId)).toBeCloseTo(10, 1); + }); + + test('should handle penalties in the correct order', () => { + const testConfig = { + ...getP2PDefaultConfig(), + peerPenaltyValues: [50, 2, 11], + }; + + const peerScoring = new PeerScoring(testConfig); + + peerScoring.updateScore(testPeerId, -peerScoring.peerPenalties[PeerErrorSeverity.HighToleranceError]); + expect(peerScoring.getScore(testPeerId)).toBe(-2); + + peerScoring.updateScore(testPeerId, -peerScoring.peerPenalties[PeerErrorSeverity.MidToleranceError]); + expect(peerScoring.getScore(testPeerId)).toBe(-13); + + peerScoring.updateScore(testPeerId, -peerScoring.peerPenalties[PeerErrorSeverity.LowToleranceError]); + expect(peerScoring.getScore(testPeerId)).toBe(-63); + }); +}); diff --git a/yarn-project/p2p/src/service/peer_scoring.ts b/yarn-project/p2p/src/service/peer_scoring.ts new file mode 100644 index 00000000000..ef6db2d3404 --- /dev/null +++ b/yarn-project/p2p/src/service/peer_scoring.ts @@ -0,0 +1,81 @@ +import { type P2PConfig } from '../config.js'; + +export enum PeerErrorSeverity { + /** + * Not malicious action, but it must not be tolerated + * ~2 occurrences will get the peer banned + */ + LowToleranceError = 'LowToleranceError', + /** + * Negative action that can be tolerated only sometimes + * ~10 occurrences will get the peer banned + */ + MidToleranceError = 'MidToleranceError', + /** + * Some error that can be tolerated multiple times + * ~50 occurrences will get the peer banned + */ + HighToleranceError = 'HighToleranceError', +} + +const DefaultPeerPenalties = { + [PeerErrorSeverity.LowToleranceError]: 2, + [PeerErrorSeverity.MidToleranceError]: 10, + [PeerErrorSeverity.HighToleranceError]: 50, +}; + +export class PeerScoring { + private scores: Map = new Map(); + private lastUpdateTime: Map = new Map(); + private decayInterval = 1000 * 60; // 1 minute + private decayFactor = 0.9; + peerPenalties: { [key in PeerErrorSeverity]: number }; + + constructor(config: P2PConfig) { + const orderedValues = config.peerPenaltyValues.sort((a, b) => a - b); + this.peerPenalties = { + [PeerErrorSeverity.HighToleranceError]: + orderedValues[0] ?? DefaultPeerPenalties[PeerErrorSeverity.LowToleranceError], + [PeerErrorSeverity.MidToleranceError]: + orderedValues[1] ?? DefaultPeerPenalties[PeerErrorSeverity.MidToleranceError], + [PeerErrorSeverity.LowToleranceError]: + orderedValues[2] ?? DefaultPeerPenalties[PeerErrorSeverity.HighToleranceError], + }; + } + + updateScore(peerId: string, scoreDelta: number): void { + const currentTime = Date.now(); + const lastUpdate = this.lastUpdateTime.get(peerId) || currentTime; + const timePassed = currentTime - lastUpdate; + const decayPeriods = Math.floor(timePassed / this.decayInterval); + + let currentScore = this.scores.get(peerId) || 0; + + // Apply decay + currentScore *= Math.pow(this.decayFactor, decayPeriods); + + // Apply new score delta + currentScore += scoreDelta; + + this.scores.set(peerId, currentScore); + this.lastUpdateTime.set(peerId, currentTime); + } + + decayAllScores(): void { + const currentTime = Date.now(); + for (const [peerId, lastUpdate] of this.lastUpdateTime.entries()) { + const timePassed = currentTime - lastUpdate; + const decayPeriods = Math.floor(timePassed / this.decayInterval); + if (decayPeriods > 0) { + let score = this.scores.get(peerId) || 0; + score *= Math.pow(this.decayFactor, decayPeriods); + this.scores.set(peerId, score); + this.lastUpdateTime.set(peerId, currentTime); + } + } + } + + getScore(peerId: string): number { + return this.scores.get(peerId) || 0; + } +} diff --git a/yarn-project/p2p/src/service/reqresp/interface.ts b/yarn-project/p2p/src/service/reqresp/interface.ts index 606efc17bc9..8370b8a8a21 100644 --- a/yarn-project/p2p/src/service/reqresp/interface.ts +++ b/yarn-project/p2p/src/service/reqresp/interface.ts @@ -1,5 +1,7 @@ import { Tx, TxHash } from '@aztec/circuit-types'; +import { type PeerId } from '@libp2p/interface'; + /* * Request Response Sub Protocols */ @@ -46,11 +48,29 @@ export interface ProtocolRateLimitQuota { globalLimit: RateLimitQuota; } +export const noopValidator = () => Promise.resolve(true); + /** * A type mapping from supprotocol to it's handling funciton */ export type ReqRespSubProtocolHandlers = Record; +type ResponseValidator = ( + request: RequestIdentifier, + response: Response, + peerId: PeerId, +) => Promise; + +export type ReqRespSubProtocolValidators = { + [S in ReqRespSubProtocol]: ResponseValidator; +}; + +export const DEFAULT_SUB_PROTOCOL_VALIDATORS: ReqRespSubProtocolValidators = { + [PING_PROTOCOL]: noopValidator, + [STATUS_PROTOCOL]: noopValidator, + [TX_REQ_PROTOCOL]: noopValidator, +}; + /** * Sub protocol map determines the request and response types for each * Req Resp protocol diff --git a/yarn-project/p2p/src/service/reqresp/p2p_client.integration.test.ts b/yarn-project/p2p/src/service/reqresp/p2p_client.integration.test.ts index 31b7f50550f..b52433a9b7b 100644 --- a/yarn-project/p2p/src/service/reqresp/p2p_client.integration.test.ts +++ b/yarn-project/p2p/src/service/reqresp/p2p_client.integration.test.ts @@ -1,23 +1,28 @@ // An integration test for the p2p client to test req resp protocols -import { mockTx } from '@aztec/circuit-types'; +import { type ClientProtocolCircuitVerifier, type WorldStateSynchronizer, mockTx } from '@aztec/circuit-types'; import { EthAddress } from '@aztec/circuits.js'; import { createDebugLogger } from '@aztec/foundation/log'; import { sleep } from '@aztec/foundation/sleep'; +import { getRandomPort } from '@aztec/foundation/testing'; import { type AztecKVStore } from '@aztec/kv-store'; import { type DataStoreConfig, openTmpStore } from '@aztec/kv-store/utils'; +import { SignableENR } from '@chainsafe/enr'; import { describe, expect, it, jest } from '@jest/globals'; +import { multiaddr } from '@multiformats/multiaddr'; import { generatePrivateKey } from 'viem/accounts'; import { type AttestationPool } from '../../attestation_pool/attestation_pool.js'; -import { BootstrapNode } from '../../bootstrap/bootstrap.js'; import { createP2PClient } from '../../client/index.js'; import { MockBlockSource } from '../../client/mocks.js'; import { type P2PClient } from '../../client/p2p_client.js'; -import { type BootnodeConfig, type P2PConfig } from '../../config.js'; +import { type P2PConfig, getP2PDefaultConfig } from '../../config.js'; +import { AlwaysFalseCircuitVerifier, AlwaysTrueCircuitVerifier } from '../../mocks/index.js'; import { type TxPool } from '../../tx_pool/index.js'; +import { convertToMultiaddr } from '../../util.js'; +import { AZTEC_ENR_KEY, AZTEC_NET } from '../discV5_service.js'; import { createLibP2PPeerId } from '../index.js'; -import { DEFAULT_P2P_REQRESP_CONFIG } from './config.js'; +import { PeerErrorSeverity } from '../peer_scoring.js'; /** * Mockify helper for testing purposes. @@ -28,22 +33,6 @@ type Mockify = { const TEST_TIMEOUT = 80000; -const BOOT_NODE_UDP_PORT = 40400; -async function createBootstrapNode(port: number) { - const peerId = await createLibP2PPeerId(); - const bootstrapNode = new BootstrapNode(); - const config: BootnodeConfig = { - udpListenAddress: `0.0.0.0:${port}`, - udpAnnounceAddress: `127.0.0.1:${port}`, - peerIdPrivateKey: Buffer.from(peerId.privateKey!).toString('hex'), - minPeerCount: 1, - maxPeerCount: 100, - }; - await bootstrapNode.start(config); - - return bootstrapNode; -} - function generatePeerIdPrivateKeys(numberOfPeers: number): string[] { const peerIdPrivateKeys: string[] = []; for (let i = 0; i < numberOfPeers; i++) { @@ -60,22 +49,52 @@ describe('Req Resp p2p client integration', () => { let attestationPool: Mockify; let blockSource: MockBlockSource; let kvStore: AztecKVStore; + let worldStateSynchronizer: WorldStateSynchronizer; + let proofVerifier: ClientProtocolCircuitVerifier; + let bootNodePort: number; const logger = createDebugLogger('p2p-client-integration-test'); - const makeBootstrapNode = async (): Promise<[BootstrapNode, string]> => { - const bootstrapNode = await createBootstrapNode(BOOT_NODE_UDP_PORT); - const enr = bootstrapNode.getENR().encodeTxt(); - return [bootstrapNode, enr]; + const getPorts = async (numberOfPeers: number) => { + const ports = []; + for (let i = 0; i < numberOfPeers; i++) { + const port = (await getRandomPort()) || bootNodePort + i + 1; + ports.push(port); + } + return ports; }; - const createClients = async (numberOfPeers: number, bootstrapNodeEnr: string): Promise => { + const createClients = async (numberOfPeers: number, alwaysTrueVerifier: boolean = true): Promise => { const clients: P2PClient[] = []; const peerIdPrivateKeys = generatePeerIdPrivateKeys(numberOfPeers); + + const ports = await getPorts(numberOfPeers); + + const peerEnrs = await Promise.all( + peerIdPrivateKeys.map(async (pk, i) => { + const peerId = await createLibP2PPeerId(pk); + const enr = SignableENR.createFromPeerId(peerId); + + const udpAnnounceAddress = `127.0.0.1:${ports[i]}`; + const publicAddr = multiaddr(convertToMultiaddr(udpAnnounceAddress, 'udp')); + + // ENRS must include the network and a discoverable address (udp for discv5) + enr.set(AZTEC_ENR_KEY, Uint8Array.from([AZTEC_NET])); + enr.setLocationMultiaddr(publicAddr); + + return enr.encodeTxt(); + }), + ); + for (let i = 0; i < numberOfPeers; i++) { // Note these bindings are important - const addr = `127.0.0.1:${i + 1 + BOOT_NODE_UDP_PORT}`; - const listenAddr = `0.0.0.0:${i + 1 + BOOT_NODE_UDP_PORT}`; + const addr = `127.0.0.1:${ports[i]}`; + const listenAddr = `0.0.0.0:${ports[i]}`; + + // Filter nodes so that we only dial active peers + const otherNodes = peerEnrs.filter((_, ind) => ind < i); + const config: P2PConfig & DataStoreConfig = { + ...getP2PDefaultConfig(), p2pEnabled: true, peerIdPrivateKey: peerIdPrivateKeys[i], tcpListenAddress: listenAddr, // run on port 0 @@ -83,7 +102,7 @@ describe('Req Resp p2p client integration', () => { tcpAnnounceAddress: addr, udpAnnounceAddress: addr, l2QueueSize: 1, - bootstrapNodes: [bootstrapNodeEnr], + bootstrapNodes: [...otherNodes], blockCheckIntervalMS: 1000, peerCheckIntervalMS: 1000, transactionProtocol: '', @@ -91,9 +110,9 @@ describe('Req Resp p2p client integration', () => { maxPeerCount: 10, keepProvenTxsInPoolFor: 0, queryForIp: false, + l1ChainId: 31337, dataDirectory: undefined, l1Contracts: { rollupAddress: EthAddress.ZERO }, - ...DEFAULT_P2P_REQRESP_CONFIG, }; txPool = { @@ -116,6 +135,7 @@ describe('Req Resp p2p client integration', () => { }; blockSource = new MockBlockSource(); + proofVerifier = alwaysTrueVerifier ? new AlwaysTrueCircuitVerifier() : new AlwaysFalseCircuitVerifier(); kvStore = openTmpStore(); const deps = { txPool: txPool as unknown as TxPool, @@ -125,6 +145,8 @@ describe('Req Resp p2p client integration', () => { config, attestationPool as unknown as AttestationPool, blockSource, + proofVerifier, + worldStateSynchronizer, undefined, deps, ); @@ -142,18 +164,18 @@ describe('Req Resp p2p client integration', () => { }; // Shutdown all test clients - const shutdown = async (clients: P2PClient[], bootnode: BootstrapNode) => { - await Promise.all([bootnode.stop(), ...clients.map(client => client.stop())]); + const shutdown = async (clients: P2PClient[]) => { + await Promise.all([...clients.map(client => client.stop())]); await sleep(1000); }; - it( + // TODO: re-enable all in file with https://github.com/AztecProtocol/aztec-packages/issues/8707 is fixed + it.skip( 'Returns undefined if unable to find a transaction from another peer', async () => { // We want to create a set of nodes and request transaction from them // Not using a before each as a the wind down is not working as expected - const [bootstrapNode, bootstrapNodeEnr] = await makeBootstrapNode(); - const clients = await createClients(NUMBER_OF_PEERS, bootstrapNodeEnr); + const clients = await createClients(NUMBER_OF_PEERS); const [client1] = clients; await sleep(2000); @@ -165,17 +187,17 @@ describe('Req Resp p2p client integration', () => { const requestedTx = await client1.requestTxByHash(txHash); expect(requestedTx).toBeUndefined(); - await shutdown(clients, bootstrapNode); + // await shutdown(clients, bootstrapNode); + await shutdown(clients); }, TEST_TIMEOUT, ); - it( + it.skip( 'Can request a transaction from another peer', async () => { // We want to create a set of nodes and request transaction from them - const [bootstrapNode, bootstrapNodeEnr] = await makeBootstrapNode(); - const clients = await createClients(NUMBER_OF_PEERS, bootstrapNodeEnr); + const clients = await createClients(NUMBER_OF_PEERS); const [client1] = clients; // Give the nodes time to discover each other @@ -192,7 +214,72 @@ describe('Req Resp p2p client integration', () => { // Expect the tx to be the returned tx to be the same as the one we mocked expect(requestedTx?.toBuffer()).toStrictEqual(tx.toBuffer()); - await shutdown(clients, bootstrapNode); + await shutdown(clients); + }, + TEST_TIMEOUT, + ); + + it.skip( + 'Will penalize peers that send invalid proofs', + async () => { + // We want to create a set of nodes and request transaction from them + const clients = await createClients(NUMBER_OF_PEERS, /*valid proofs*/ false); + const [client1, client2] = clients; + const client2PeerId = (await client2.getEnr()?.peerId())!; + + // Give the nodes time to discover each other + await sleep(6000); + + const penalizePeerSpy = jest.spyOn((client1 as any).p2pService.peerManager, 'penalizePeer'); + + // Perform a get tx request from client 1 + const tx = mockTx(); + const txHash = tx.getTxHash(); + + // Return the correct tx with an invalid proof -> active attack + txPool.getTxByHash.mockImplementationOnce(() => tx); + + const requestedTx = await client1.requestTxByHash(txHash); + // Even though we got a response, the proof was deemed invalid + expect(requestedTx).toBeUndefined(); + + // Low tolerance error is due to the invalid proof + expect(penalizePeerSpy).toHaveBeenCalledWith(client2PeerId, PeerErrorSeverity.LowToleranceError); + + await shutdown(clients); + }, + TEST_TIMEOUT, + ); + + it.skip( + 'Will penalize peers that send the wrong transaction', + async () => { + // We want to create a set of nodes and request transaction from them + const clients = await createClients(NUMBER_OF_PEERS, /*Valid proofs*/ true); + const [client1, client2] = clients; + const client2PeerId = (await client2.getEnr()?.peerId())!; + + // Give the nodes time to discover each other + await sleep(6000); + + const penalizePeerSpy = jest.spyOn((client1 as any).p2pService.peerManager, 'penalizePeer'); + + // Perform a get tx request from client 1 + const tx = mockTx(); + const txHash = tx.getTxHash(); + const tx2 = mockTx(420); + + // Return an invalid tx + txPool.getTxByHash.mockImplementationOnce(() => tx2); + + const requestedTx = await client1.requestTxByHash(txHash); + // Even though we got a response, the proof was deemed invalid + expect(requestedTx).toBeUndefined(); + + // Received wrong tx + expect(penalizePeerSpy).toHaveBeenCalledWith(client2PeerId, PeerErrorSeverity.MidToleranceError); + + await shutdown(clients); }, TEST_TIMEOUT, ); diff --git a/yarn-project/p2p/src/service/reqresp/rate_limiter/rate_limiter.test.ts b/yarn-project/p2p/src/service/reqresp/rate_limiter/rate_limiter.test.ts index e35a59d3a08..813eb1ddbc9 100644 --- a/yarn-project/p2p/src/service/reqresp/rate_limiter/rate_limiter.test.ts +++ b/yarn-project/p2p/src/service/reqresp/rate_limiter/rate_limiter.test.ts @@ -1,6 +1,9 @@ import { jest } from '@jest/globals'; import { type PeerId } from '@libp2p/interface'; +import { type MockProxy, mock } from 'jest-mock-extended'; +import { type PeerManager } from '../../peer_manager.js'; +import { PeerErrorSeverity } from '../../peer_scoring.js'; import { PING_PROTOCOL, type ReqRespSubProtocolRateLimits, TX_REQ_PROTOCOL } from '../interface.js'; import { RequestResponseRateLimiter } from './rate_limiter.js'; @@ -20,6 +23,7 @@ const makePeer = (id: string): PeerId => { describe('rate limiter', () => { let rateLimiter: RequestResponseRateLimiter; + let peerManager: MockProxy; beforeEach(() => { jest.useFakeTimers(); @@ -37,7 +41,10 @@ describe('rate limiter', () => { }, }, } as ReqRespSubProtocolRateLimits; // force type as we will not provide descriptions of all protocols - rateLimiter = new RequestResponseRateLimiter(config); + + peerManager = mock(); + + rateLimiter = new RequestResponseRateLimiter(peerManager, config); }); afterEach(() => { @@ -67,21 +74,25 @@ describe('rate limiter', () => { expect(rateLimiter.allow(TX_REQ_PROTOCOL, peerId)).toBe(true); } expect(rateLimiter.allow(TX_REQ_PROTOCOL, peerId)).toBe(false); + + // Spy on the peer manager and check that penalizePeer is called + expect(peerManager.penalizePeer).toHaveBeenCalledWith(peerId, PeerErrorSeverity.MidToleranceError); }); it('Should allow requests within the global limit', () => { // Initial burst + const falingPeer = makePeer('nolettoinno'); for (let i = 0; i < 10; i++) { expect(rateLimiter.allow(TX_REQ_PROTOCOL, makePeer(`peer${i}`))).toBe(true); } - expect(rateLimiter.allow(TX_REQ_PROTOCOL, makePeer('nolettoinno'))).toBe(false); + expect(rateLimiter.allow(TX_REQ_PROTOCOL, falingPeer)).toBe(false); // Smooth requests for (let i = 0; i < 10; i++) { jest.advanceTimersByTime(100); expect(rateLimiter.allow(TX_REQ_PROTOCOL, makePeer(`peer${i}`))).toBe(true); } - expect(rateLimiter.allow(TX_REQ_PROTOCOL, makePeer('nolettoinno'))).toBe(false); + expect(rateLimiter.allow(TX_REQ_PROTOCOL, falingPeer)).toBe(false); // Reset after quota has passed jest.advanceTimersByTime(1000); @@ -89,7 +100,7 @@ describe('rate limiter', () => { for (let i = 0; i < 10; i++) { expect(rateLimiter.allow(TX_REQ_PROTOCOL, makePeer(`peer${i}`))).toBe(true); } - expect(rateLimiter.allow(TX_REQ_PROTOCOL, makePeer('nolettoinno'))).toBe(false); + expect(rateLimiter.allow(TX_REQ_PROTOCOL, falingPeer)).toBe(false); }); it('Should reset after quota has passed', () => { @@ -125,7 +136,7 @@ describe('rate limiter', () => { }, }, } as ReqRespSubProtocolRateLimits; - const multiProtocolRateLimiter = new RequestResponseRateLimiter(config); + const multiProtocolRateLimiter = new RequestResponseRateLimiter(peerManager, config); const peerId = makePeer('peer1'); @@ -145,7 +156,7 @@ describe('rate limiter', () => { }); it('Should allow requests if no rate limiter is configured', () => { - const rateLimiter = new RequestResponseRateLimiter({} as ReqRespSubProtocolRateLimits); + const rateLimiter = new RequestResponseRateLimiter(peerManager, {} as ReqRespSubProtocolRateLimits); expect(rateLimiter.allow(TX_REQ_PROTOCOL, makePeer('peer1'))).toBe(true); }); diff --git a/yarn-project/p2p/src/service/reqresp/rate_limiter/rate_limiter.ts b/yarn-project/p2p/src/service/reqresp/rate_limiter/rate_limiter.ts index d6bf348df42..37b2909c9ae 100644 --- a/yarn-project/p2p/src/service/reqresp/rate_limiter/rate_limiter.ts +++ b/yarn-project/p2p/src/service/reqresp/rate_limiter/rate_limiter.ts @@ -5,6 +5,8 @@ */ import { type PeerId } from '@libp2p/interface'; +import { type PeerManager } from '../../peer_manager.js'; +import { PeerErrorSeverity } from '../../peer_scoring.js'; import { type ReqRespSubProtocol, type ReqRespSubProtocolRateLimits } from '../interface.js'; import { DEFAULT_RATE_LIMITS } from './rate_limits.js'; @@ -69,6 +71,12 @@ interface PeerRateLimiter { lastAccess: number; } +enum RateLimitStatus { + Allowed, + DeniedGlobal, + DeniedPeer, +} + /** * SubProtocolRateLimiter: A rate limiter for managing request rates on a per-peer and global basis for a specific subprotocol. * @@ -98,9 +106,9 @@ export class SubProtocolRateLimiter { this.peerQuotaTimeMs = peerQuotaTimeMs; } - allow(peerId: PeerId): boolean { + allow(peerId: PeerId): RateLimitStatus { if (!this.globalLimiter.allow()) { - return false; + return RateLimitStatus.DeniedGlobal; } const peerIdStr = peerId.toString(); @@ -115,7 +123,11 @@ export class SubProtocolRateLimiter { } else { peerLimiter.lastAccess = Date.now(); } - return peerLimiter.limiter.allow(); + const peerLimitAllowed = peerLimiter.limiter.allow(); + if (!peerLimitAllowed) { + return RateLimitStatus.DeniedPeer; + } + return RateLimitStatus.Allowed; } cleanupInactivePeers() { @@ -138,14 +150,16 @@ export class SubProtocolRateLimiter { * - Initializes with a set of rate limit configurations for different subprotocols. * - Creates a separate SubProtocolRateLimiter for each configured subprotocol. * - When a request comes in, it routes the rate limiting decision to the appropriate subprotocol limiter. + * - Peers who exceed their peer rate limits will be penalised by the peer manager. * * Usage: * ``` + * const peerManager = new PeerManager(...); * const rateLimits = { * subprotocol1: { peerLimit: { quotaCount: 10, quotaTimeMs: 1000 }, globalLimit: { quotaCount: 100, quotaTimeMs: 1000 } }, * subprotocol2: { peerLimit: { quotaCount: 5, quotaTimeMs: 1000 }, globalLimit: { quotaCount: 50, quotaTimeMs: 1000 } } * }; - * const limiter = new RequestResponseRateLimiter(rateLimits); + * const limiter = new RequestResponseRateLimiter(peerManager, rateLimits); * * Note: Ensure to call `stop()` when shutting down to properly clean up all subprotocol limiters. */ @@ -154,7 +168,7 @@ export class RequestResponseRateLimiter { private cleanupInterval: NodeJS.Timeout | undefined = undefined; - constructor(rateLimits: ReqRespSubProtocolRateLimits = DEFAULT_RATE_LIMITS) { + constructor(private peerManager: PeerManager, rateLimits: ReqRespSubProtocolRateLimits = DEFAULT_RATE_LIMITS) { this.subProtocolRateLimiters = new Map(); for (const [subProtocol, protocolLimits] of Object.entries(rateLimits)) { @@ -179,10 +193,19 @@ export class RequestResponseRateLimiter { allow(subProtocol: ReqRespSubProtocol, peerId: PeerId): boolean { const limiter = this.subProtocolRateLimiters.get(subProtocol); if (!limiter) { - // TODO: maybe throw an error here if no rate limiter is configured? return true; } - return limiter.allow(peerId); + const rateLimitStatus = limiter.allow(peerId); + + switch (rateLimitStatus) { + case RateLimitStatus.DeniedPeer: + this.peerManager.penalizePeer(peerId, PeerErrorSeverity.MidToleranceError); + return false; + case RateLimitStatus.DeniedGlobal: + return false; + default: + return true; + } } cleanupInactivePeers() { diff --git a/yarn-project/p2p/src/service/reqresp/reqresp.test.ts b/yarn-project/p2p/src/service/reqresp/reqresp.test.ts index 7c57d3fa845..1807a318522 100644 --- a/yarn-project/p2p/src/service/reqresp/reqresp.test.ts +++ b/yarn-project/p2p/src/service/reqresp/reqresp.test.ts @@ -2,18 +2,36 @@ import { TxHash, mockTx } from '@aztec/circuit-types'; import { sleep } from '@aztec/foundation/sleep'; import { describe, expect, it, jest } from '@jest/globals'; +import { type MockProxy, mock } from 'jest-mock-extended'; import { CollectiveReqRespTimeoutError, IndiviualReqRespTimeoutError } from '../../errors/reqresp.error.js'; -import { MOCK_SUB_PROTOCOL_HANDLERS, connectToPeers, createNodes, startNodes, stopNodes } from '../../mocks/index.js'; -import { PING_PROTOCOL, TX_REQ_PROTOCOL } from './interface.js'; +import { + MOCK_SUB_PROTOCOL_HANDLERS, + MOCK_SUB_PROTOCOL_VALIDATORS, + connectToPeers, + createNodes, + startNodes, + stopNodes, +} from '../../mocks/index.js'; +import { type PeerManager } from '../peer_manager.js'; +import { PeerErrorSeverity } from '../peer_scoring.js'; +import { PING_PROTOCOL, RequestableBuffer, TX_REQ_PROTOCOL } from './interface.js'; + +const PING_REQUEST = RequestableBuffer.fromBuffer(Buffer.from('ping')); // The Req Resp protocol should allow nodes to dial specific peers // and ask for specific data that they missed via the traditional gossip protocol. describe('ReqResp', () => { + let peerManager: MockProxy; + + beforeEach(() => { + peerManager = mock(); + }); + it('Should perform a ping request', async () => { // Create two nodes // They need to discover each other - const nodes = await createNodes(2); + const nodes = await createNodes(peerManager, 2); const { req: pinger } = nodes[0]; await startNodes(nodes); @@ -23,16 +41,16 @@ describe('ReqResp', () => { await sleep(500); - const res = await pinger.sendRequest(PING_PROTOCOL, Buffer.from('ping')); + const res = await pinger.sendRequest(PING_PROTOCOL, PING_REQUEST); await sleep(500); - expect(res?.toString('utf-8')).toEqual('pong'); + expect(res?.toBuffer().toString('utf-8')).toEqual('pong'); await stopNodes(nodes); }); it('Should handle gracefully if a peer connected peer is offline', async () => { - const nodes = await createNodes(2); + const nodes = await createNodes(peerManager, 2); const { req: pinger } = nodes[0]; const { req: ponger } = nodes[1]; @@ -45,7 +63,7 @@ describe('ReqResp', () => { void ponger.stop(); // It should return undefined if it cannot dial the peer - const res = await pinger.sendRequest(PING_PROTOCOL, Buffer.from('ping')); + const res = await pinger.sendRequest(PING_PROTOCOL, PING_REQUEST); expect(res).toBeUndefined(); @@ -53,7 +71,7 @@ describe('ReqResp', () => { }); it('Should request from a later peer if other peers are offline', async () => { - const nodes = await createNodes(4); + const nodes = await createNodes(peerManager, 4); await startNodes(nodes); await sleep(500); @@ -65,15 +83,15 @@ describe('ReqResp', () => { void nodes[2].req.stop(); // send from the first node - const res = await nodes[0].req.sendRequest(PING_PROTOCOL, Buffer.from('ping')); + const res = await nodes[0].req.sendRequest(PING_PROTOCOL, PING_REQUEST); - expect(res?.toString('utf-8')).toEqual('pong'); + expect(res?.toBuffer().toString('utf-8')).toEqual('pong'); await stopNodes(nodes); }); it('Should hit a rate limit if too many requests are made in quick succession', async () => { - const nodes = await createNodes(2); + const nodes = await createNodes(peerManager, 2); await startNodes(nodes); @@ -110,15 +128,15 @@ describe('ReqResp', () => { return Promise.resolve(Uint8Array.from(Buffer.from(''))); }; - const nodes = await createNodes(2); + const nodes = await createNodes(peerManager, 2); await startNodes(nodes, protocolHandlers); await sleep(500); await connectToPeers(nodes); await sleep(500); - const res = await nodes[0].req.sendRequest(TX_REQ_PROTOCOL, txHash.toBuffer()); - expect(res).toEqual(tx.toBuffer()); + const res = await nodes[0].req.sendRequest(TX_REQ_PROTOCOL, txHash); + expect(res).toEqual(tx); await stopNodes(nodes); }); @@ -133,21 +151,21 @@ describe('ReqResp', () => { return Promise.resolve(Uint8Array.from(Buffer.from(''))); }; - const nodes = await createNodes(2); + const nodes = await createNodes(peerManager, 2); await startNodes(nodes, protocolHandlers); await sleep(500); await connectToPeers(nodes); await sleep(500); - const res = await nodes[0].req.sendRequest(TX_REQ_PROTOCOL, txHash.toBuffer()); + const res = await nodes[0].req.sendRequest(TX_REQ_PROTOCOL, txHash); expect(res).toBeUndefined(); await stopNodes(nodes); }); it('Should hit individual timeout if nothing is returned over the stream', async () => { - const nodes = await createNodes(2); + const nodes = await createNodes(peerManager, 2); await startNodes(nodes); @@ -162,7 +180,8 @@ describe('ReqResp', () => { await connectToPeers(nodes); await sleep(500); - const res = await nodes[0].req.sendRequest(TX_REQ_PROTOCOL, Buffer.from('tx')); + const request = TxHash.random(); + const res = await nodes[0].req.sendRequest(TX_REQ_PROTOCOL, request); expect(res).toBeUndefined(); // Make sure the error message is logged @@ -171,11 +190,19 @@ describe('ReqResp', () => { } | peerId: ${nodes[1].p2p.peerId.toString()} | subProtocol: ${TX_REQ_PROTOCOL}`; expect(loggerSpy).toHaveBeenCalledWith(errorMessage); + // Expect the peer to be penalized for timing out + expect(peerManager.penalizePeer).toHaveBeenCalledWith( + expect.objectContaining({ + publicKey: nodes[1].p2p.peerId.publicKey, // must use objectContaining as we do not match exactly, as private key is contained in this test mapping + }), + PeerErrorSeverity.HighToleranceError, + ); + await stopNodes(nodes); }); it('Should hit collective timeout if nothing is returned over the stream from multiple peers', async () => { - const nodes = await createNodes(4); + const nodes = await createNodes(peerManager, 4); await startNodes(nodes); @@ -192,7 +219,8 @@ describe('ReqResp', () => { await connectToPeers(nodes); await sleep(500); - const res = await nodes[0].req.sendRequest(TX_REQ_PROTOCOL, Buffer.from('tx')); + const request = TxHash.random(); + const res = await nodes[0].req.sendRequest(TX_REQ_PROTOCOL, request); expect(res).toBeUndefined(); // Make sure the error message is logged @@ -201,5 +229,47 @@ describe('ReqResp', () => { await stopNodes(nodes); }); + + it('Should penalize peer if transaction validation fails', async () => { + const tx = mockTx(); + const txHash = tx.getTxHash(); + + // Mock that the node will respond with the tx + const protocolHandlers = MOCK_SUB_PROTOCOL_HANDLERS; + protocolHandlers[TX_REQ_PROTOCOL] = (message: Buffer): Promise => { + const receivedHash = TxHash.fromBuffer(message); + if (txHash.equals(receivedHash)) { + return Promise.resolve(Uint8Array.from(tx.toBuffer())); + } + return Promise.resolve(Uint8Array.from(Buffer.from(''))); + }; + + // Mock that the receiving node will find that the transaction is invalid + const protocolValidators = MOCK_SUB_PROTOCOL_VALIDATORS; + protocolValidators[TX_REQ_PROTOCOL] = (_request, _response, peer) => { + peerManager.penalizePeer(peer, PeerErrorSeverity.LowToleranceError); + return Promise.resolve(false); + }; + + const nodes = await createNodes(peerManager, 2); + + await startNodes(nodes, protocolHandlers, protocolValidators); + await sleep(500); + await connectToPeers(nodes); + await sleep(500); + + const res = await nodes[0].req.sendRequest(TX_REQ_PROTOCOL, txHash); + expect(res).toBeUndefined(); + + // Expect the peer to be penalized for sending an invalid response + expect(peerManager.penalizePeer).toHaveBeenCalledWith( + expect.objectContaining({ + publicKey: nodes[1].p2p.peerId.publicKey, // must use objectContaining as we do not match exactly, as private key is contained in this test mapping + }), + PeerErrorSeverity.LowToleranceError, + ); + + await stopNodes(nodes); + }); }); }); diff --git a/yarn-project/p2p/src/service/reqresp/reqresp.ts b/yarn-project/p2p/src/service/reqresp/reqresp.ts index 51f7a12eb8a..41a9fd97d1e 100644 --- a/yarn-project/p2p/src/service/reqresp/reqresp.ts +++ b/yarn-project/p2p/src/service/reqresp/reqresp.ts @@ -8,11 +8,17 @@ import { type Libp2p } from 'libp2p'; import { type Uint8ArrayList } from 'uint8arraylist'; import { CollectiveReqRespTimeoutError, IndiviualReqRespTimeoutError } from '../../errors/reqresp.error.js'; +import { type PeerManager } from '../peer_manager.js'; +import { PeerErrorSeverity } from '../peer_scoring.js'; import { type P2PReqRespConfig } from './config.js'; import { DEFAULT_SUB_PROTOCOL_HANDLERS, + DEFAULT_SUB_PROTOCOL_VALIDATORS, type ReqRespSubProtocol, type ReqRespSubProtocolHandlers, + type ReqRespSubProtocolValidators, + type SubProtocolMap, + subProtocolMap, } from './interface.js'; import { RequestResponseRateLimiter } from './rate_limiter/rate_limiter.js'; @@ -35,23 +41,28 @@ export class ReqResp { private overallRequestTimeoutMs: number; private individualRequestTimeoutMs: number; + // Warning, if the `start` function is not called as the parent class constructor, then the default sub protocol handlers will be used ( not good ) private subProtocolHandlers: ReqRespSubProtocolHandlers = DEFAULT_SUB_PROTOCOL_HANDLERS; + private subProtocolValidators: ReqRespSubProtocolValidators = DEFAULT_SUB_PROTOCOL_VALIDATORS; + private rateLimiter: RequestResponseRateLimiter; - constructor(config: P2PReqRespConfig, protected readonly libp2p: Libp2p) { + constructor(config: P2PReqRespConfig, protected readonly libp2p: Libp2p, private peerManager: PeerManager) { this.logger = createDebugLogger('aztec:p2p:reqresp'); this.overallRequestTimeoutMs = config.overallRequestTimeoutMs; this.individualRequestTimeoutMs = config.individualRequestTimeoutMs; - this.rateLimiter = new RequestResponseRateLimiter(); + this.rateLimiter = new RequestResponseRateLimiter(peerManager); } /** * Start the reqresp service */ - async start(subProtocolHandlers: ReqRespSubProtocolHandlers) { + async start(subProtocolHandlers: ReqRespSubProtocolHandlers, subProtocolValidators: ReqRespSubProtocolValidators) { this.subProtocolHandlers = subProtocolHandlers; + this.subProtocolValidators = subProtocolValidators; + // Register all protocol handlers for (const subProtocol of Object.keys(this.subProtocolHandlers)) { await this.libp2p.handle(subProtocol, this.streamHandler.bind(this, subProtocol as ReqRespSubProtocol)); @@ -76,29 +87,64 @@ export class ReqResp { * Send a request to peers, returns the first response * * @param subProtocol - The protocol being requested - * @param payload - The payload to send + * @param request - The request to send * @returns - The response from the peer, otherwise undefined + * + * @description + * This method attempts to send a request to all active peers using the specified sub-protocol. + * It opens a stream with each peer, sends the request, and awaits a response. + * If a valid response is received, it returns the response; otherwise, it continues to the next peer. + * If no response is received from any peer, it returns undefined. + * + * The method performs the following steps: + * - Iterates over all active peers. + * - Opens a stream with each peer using the specified sub-protocol. + * + * When a response is received, it is validated using the given sub protocols response validator. + * To see the interface for the response validator - see `interface.ts` + * + * Failing a response validation requests in a severe peer penalty, and will + * prompt the node to continue to search to the next peer. + * For example, a transaction request validator will check that the payload returned does in fact + * match the txHash that was requested. A peer that fails this check an only be an extremely naughty peer. + * + * This entire operation is wrapped in an overall timeout, that is independent of the + * peer it is requesting data from. + * */ - async sendRequest(subProtocol: ReqRespSubProtocol, payload: Buffer): Promise { + async sendRequest( + subProtocol: SubProtocol, + request: InstanceType, + ): Promise | undefined> { const requestFunction = async () => { + const responseValidator = this.subProtocolValidators[subProtocol]; + const requestBuffer = request.toBuffer(); + // Get active peers const peers = this.libp2p.getPeers(); // Attempt to ask all of our peers for (const peer of peers) { - const response = await this.sendRequestToPeer(peer, subProtocol, payload); + const response = await this.sendRequestToPeer(peer, subProtocol, requestBuffer); // If we get a response, return it, otherwise we iterate onto the next peer // We do not consider it a success if we have an empty buffer if (response && response.length > 0) { - return response; + const object = subProtocolMap[subProtocol].response.fromBuffer(response); + // The response validator handles peer punishment within + const isValid = await responseValidator(request, object, peer); + if (!isValid) { + this.logger.error(`Invalid response for ${subProtocol} from ${peer.toString()}`); + return undefined; + } + return object; } } return undefined; }; try { - return await executeTimeoutWithCustomError( + return await executeTimeoutWithCustomError | undefined>( requestFunction, this.overallRequestTimeoutMs, () => new CollectiveReqRespTimeoutError(), @@ -112,10 +158,26 @@ export class ReqResp { /** * Sends a request to a specific peer * + * We first dial a particular protocol for the peer, this ensures that the peer knows + * what to respond with + * + * * @param peerId - The peer to send the request to * @param subProtocol - The protocol to use to request * @param payload - The payload to send * @returns If the request is successful, the response is returned, otherwise undefined + * + * @description + * This method attempts to open a stream with the specified peer, send the payload, + * and await a response. + * If an error occurs, it penalizes the peer and returns undefined. + * + * The method performs the following steps: + * - Opens a stream with the peer using the specified sub-protocol. + * - Sends the payload and awaits a response with a timeout. + * + * If the stream is not closed by the dialled peer, and a timeout occurs, then + * the stream is closed on the requester's end and sender (us) updates its peer score */ async sendRequestToPeer( peerId: PeerId, @@ -128,6 +190,7 @@ export class ReqResp { this.logger.debug(`Stream opened with ${peerId.toString()} for ${subProtocol}`); + // Open the stream with a timeout const result = await executeTimeoutWithCustomError( (): Promise => pipe([payload], stream!, this.readMessage), this.individualRequestTimeoutMs, @@ -140,6 +203,7 @@ export class ReqResp { return result; } catch (e: any) { this.logger.error(`${e.message} | peerId: ${peerId.toString()} | subProtocol: ${subProtocol}`); + this.peerManager.penalizePeer(peerId, PeerErrorSeverity.HighToleranceError); } finally { if (stream) { try { @@ -172,6 +236,16 @@ export class ReqResp { * Reads the incoming stream, determines the protocol, then triggers the appropriate handler * * @param param0 - The incoming stream data + * + * @description + * An individual stream handler will be bound to each sub protocol, and handles returning data back + * to the requesting peer. + * + * The sub protocol handler interface is defined within `interface.ts` and will be assigned to the + * req resp service on start up. + * + * We check rate limits for each peer, note the peer will be penalised within the rate limiter implementation + * if they exceed their peer specific limits. */ private async streamHandler(protocol: ReqRespSubProtocol, { stream, connection }: IncomingStreamData) { // Store a reference to from this for the async generator diff --git a/yarn-project/sequencer-client/src/tx_validator/aggregate_tx_validator.test.ts b/yarn-project/p2p/src/tx_validator/aggregate_tx_validator.test.ts similarity index 89% rename from yarn-project/sequencer-client/src/tx_validator/aggregate_tx_validator.test.ts rename to yarn-project/p2p/src/tx_validator/aggregate_tx_validator.test.ts index 1eb7558bf25..c74a0fc5e16 100644 --- a/yarn-project/sequencer-client/src/tx_validator/aggregate_tx_validator.test.ts +++ b/yarn-project/p2p/src/tx_validator/aggregate_tx_validator.test.ts @@ -25,5 +25,9 @@ describe('AggregateTxValidator', () => { txs.filter(tx => this.denyList.has(Tx.getHash(tx).toString())), ]); } + + validateTx(tx: AnyTx): Promise { + return Promise.resolve(this.denyList.has(Tx.getHash(tx).toString())); + } } }); diff --git a/yarn-project/sequencer-client/src/tx_validator/aggregate_tx_validator.ts b/yarn-project/p2p/src/tx_validator/aggregate_tx_validator.ts similarity index 77% rename from yarn-project/sequencer-client/src/tx_validator/aggregate_tx_validator.ts rename to yarn-project/p2p/src/tx_validator/aggregate_tx_validator.ts index 8397a45eede..99dfb6c282d 100644 --- a/yarn-project/sequencer-client/src/tx_validator/aggregate_tx_validator.ts +++ b/yarn-project/p2p/src/tx_validator/aggregate_tx_validator.ts @@ -21,4 +21,14 @@ export class AggregateTxValidator implements TxValid return [txPool, invalidTxs]; } + + async validateTx(tx: T): Promise { + for (const validator of this.#validators) { + const valid = await validator.validateTx(tx); + if (!valid) { + return false; + } + } + return true; + } } diff --git a/yarn-project/sequencer-client/src/tx_validator/data_validator.test.ts b/yarn-project/p2p/src/tx_validator/data_validator.test.ts similarity index 73% rename from yarn-project/sequencer-client/src/tx_validator/data_validator.test.ts rename to yarn-project/p2p/src/tx_validator/data_validator.test.ts index 670660c28f4..11da4394f21 100644 --- a/yarn-project/sequencer-client/src/tx_validator/data_validator.test.ts +++ b/yarn-project/p2p/src/tx_validator/data_validator.test.ts @@ -29,8 +29,8 @@ describe('TxDataValidator', () => { it('rejects txs with mismatch non revertible execution requests', async () => { const goodTxs = mockTxs(3); const badTxs = mockTxs(2); - badTxs[0].data.forPublic!.endNonRevertibleData.publicCallStack[0].item.argsHash = Fr.random(); - badTxs[1].data.forPublic!.endNonRevertibleData.publicCallStack[1].item.contractAddress = AztecAddress.random(); + badTxs[0].data.forPublic!.endNonRevertibleData.publicCallStack[0].argsHash = Fr.random(); + badTxs[1].data.forPublic!.endNonRevertibleData.publicCallStack[1].contractAddress = AztecAddress.random(); await expect(validator.validateTxs([...goodTxs, ...badTxs])).resolves.toEqual([goodTxs, badTxs]); }); @@ -38,12 +38,12 @@ describe('TxDataValidator', () => { it('rejects txs with mismatch revertible execution requests', async () => { const goodTxs = mockTxs(3); const badTxs = mockTxs(5); - badTxs[0].data.forPublic!.end.publicCallStack[0].item.callContext.msgSender = AztecAddress.random(); - badTxs[1].data.forPublic!.end.publicCallStack[1].item.callContext.storageContractAddress = AztecAddress.random(); - badTxs[2].data.forPublic!.end.publicCallStack[0].item.callContext.functionSelector = FunctionSelector.random(); - badTxs[3].data.forPublic!.end.publicCallStack[1].item.callContext.isDelegateCall = + badTxs[0].data.forPublic!.end.publicCallStack[0].callContext.msgSender = AztecAddress.random(); + badTxs[1].data.forPublic!.end.publicCallStack[1].callContext.storageContractAddress = AztecAddress.random(); + badTxs[2].data.forPublic!.end.publicCallStack[0].callContext.functionSelector = FunctionSelector.random(); + badTxs[3].data.forPublic!.end.publicCallStack[1].callContext.isDelegateCall = !badTxs[3].enqueuedPublicFunctionCalls[1].callContext.isDelegateCall; - badTxs[4].data.forPublic!.end.publicCallStack[0].item.callContext.isStaticCall = + badTxs[4].data.forPublic!.end.publicCallStack[0].callContext.isStaticCall = !badTxs[4].enqueuedPublicFunctionCalls[0].callContext.isStaticCall; await expect(validator.validateTxs([...badTxs, ...goodTxs])).resolves.toEqual([goodTxs, badTxs]); @@ -52,8 +52,8 @@ describe('TxDataValidator', () => { it('rejects txs with mismatch teardown execution requests', async () => { const goodTxs = mockTxs(3); const badTxs = mockTxs(2); - badTxs[0].data.forPublic!.publicTeardownCallRequest.item.contractAddress = AztecAddress.random(); - badTxs[1].data.forPublic!.publicTeardownCallRequest.item.callContext.msgSender = AztecAddress.random(); + badTxs[0].data.forPublic!.publicTeardownCallRequest.contractAddress = AztecAddress.random(); + badTxs[1].data.forPublic!.publicTeardownCallRequest.callContext.msgSender = AztecAddress.random(); await expect(validator.validateTxs([...goodTxs, ...badTxs])).resolves.toEqual([goodTxs, badTxs]); }); diff --git a/yarn-project/sequencer-client/src/tx_validator/data_validator.ts b/yarn-project/p2p/src/tx_validator/data_validator.ts similarity index 94% rename from yarn-project/sequencer-client/src/tx_validator/data_validator.ts rename to yarn-project/p2p/src/tx_validator/data_validator.ts index 39731cbc08d..f284f4638ce 100644 --- a/yarn-project/sequencer-client/src/tx_validator/data_validator.ts +++ b/yarn-project/p2p/src/tx_validator/data_validator.ts @@ -19,6 +19,10 @@ export class DataTxValidator implements TxValidator { return Promise.resolve([validTxs, invalidTxs]); } + validateTx(tx: Tx): Promise { + return Promise.resolve(this.#hasCorrectExecutionRequests(tx)); + } + #hasCorrectExecutionRequests(tx: Tx): boolean { const callRequests = [ ...tx.data.getRevertiblePublicCallRequests(), diff --git a/yarn-project/sequencer-client/src/tx_validator/double_spend_validator.test.ts b/yarn-project/p2p/src/tx_validator/double_spend_validator.test.ts similarity index 100% rename from yarn-project/sequencer-client/src/tx_validator/double_spend_validator.test.ts rename to yarn-project/p2p/src/tx_validator/double_spend_validator.test.ts diff --git a/yarn-project/sequencer-client/src/tx_validator/double_spend_validator.ts b/yarn-project/p2p/src/tx_validator/double_spend_validator.ts similarity index 77% rename from yarn-project/sequencer-client/src/tx_validator/double_spend_validator.ts rename to yarn-project/p2p/src/tx_validator/double_spend_validator.ts index 2b93fe73eb0..15ba9f76d27 100644 --- a/yarn-project/sequencer-client/src/tx_validator/double_spend_validator.ts +++ b/yarn-project/p2p/src/tx_validator/double_spend_validator.ts @@ -10,7 +10,7 @@ export class DoubleSpendTxValidator implements TxValidator { #log = createDebugLogger('aztec:sequencer:tx_validator:tx_double_spend'); #nullifierSource: NullifierSource; - constructor(nullifierSource: NullifierSource) { + constructor(nullifierSource: NullifierSource, private readonly isValidatingBlock: boolean = true) { this.#nullifierSource = nullifierSource; } @@ -31,6 +31,10 @@ export class DoubleSpendTxValidator implements TxValidator { return [validTxs, invalidTxs]; } + validateTx(tx: T): Promise { + return this.#uniqueNullifiers(tx, new Set()); + } + async #uniqueNullifiers(tx: AnyTx, thisBlockNullifiers: Set): Promise { const nullifiers = tx.data.getNonEmptyNullifiers().map(x => x.toBigInt()); @@ -41,13 +45,15 @@ export class DoubleSpendTxValidator implements TxValidator { return false; } - for (const nullifier of nullifiers) { - if (thisBlockNullifiers.has(nullifier)) { - this.#log.warn(`Rejecting tx ${Tx.getHash(tx)} for repeating a nullifier in the same block`); - return false; - } + if (this.isValidatingBlock) { + for (const nullifier of nullifiers) { + if (thisBlockNullifiers.has(nullifier)) { + this.#log.warn(`Rejecting tx ${Tx.getHash(tx)} for repeating a nullifier in the same block`); + return false; + } - thisBlockNullifiers.add(nullifier); + thisBlockNullifiers.add(nullifier); + } } const nullifierIndexes = await Promise.all(nullifiers.map(n => this.#nullifierSource.getNullifierIndex(new Fr(n)))); diff --git a/yarn-project/p2p/src/tx_validator/index.ts b/yarn-project/p2p/src/tx_validator/index.ts new file mode 100644 index 00000000000..6937dfa460d --- /dev/null +++ b/yarn-project/p2p/src/tx_validator/index.ts @@ -0,0 +1,5 @@ +export * from './aggregate_tx_validator.js'; +export * from './data_validator.js'; +export * from './double_spend_validator.js'; +export * from './metadata_validator.js'; +export * from './tx_proof_validator.js'; diff --git a/yarn-project/sequencer-client/src/tx_validator/metadata_validator.test.ts b/yarn-project/p2p/src/tx_validator/metadata_validator.test.ts similarity index 68% rename from yarn-project/sequencer-client/src/tx_validator/metadata_validator.test.ts rename to yarn-project/p2p/src/tx_validator/metadata_validator.test.ts index c78ee70961a..261618f2a3e 100644 --- a/yarn-project/sequencer-client/src/tx_validator/metadata_validator.test.ts +++ b/yarn-project/p2p/src/tx_validator/metadata_validator.test.ts @@ -1,16 +1,17 @@ import { type AnyTx, mockTx, mockTxForRollup } from '@aztec/circuit-types'; -import { Fr, type GlobalVariables, MaxBlockNumber } from '@aztec/circuits.js'; -import { makeGlobalVariables } from '@aztec/circuits.js/testing'; +import { Fr, MaxBlockNumber } from '@aztec/circuits.js'; import { MetadataTxValidator } from './metadata_validator.js'; describe('MetadataTxValidator', () => { - let globalVariables: GlobalVariables; + let blockNumber: Fr; + let chainId: Fr; let validator: MetadataTxValidator; beforeEach(() => { - globalVariables = makeGlobalVariables(1, 42); - validator = new MetadataTxValidator(globalVariables); + chainId = new Fr(1); + blockNumber = new Fr(42); + validator = new MetadataTxValidator(chainId, blockNumber); }); it('allows only transactions for the right chain', async () => { @@ -18,11 +19,11 @@ describe('MetadataTxValidator', () => { const badTxs = [mockTx(3), mockTxForRollup(4)]; goodTxs.forEach(tx => { - tx.data.constants.txContext.chainId = globalVariables.chainId; + tx.data.constants.txContext.chainId = chainId; }); badTxs.forEach(tx => { - tx.data.constants.txContext.chainId = globalVariables.chainId.add(new Fr(1)); + tx.data.constants.txContext.chainId = chainId.add(new Fr(1)); }); await expect(validator.validateTxs([...goodTxs, ...badTxs])).resolves.toEqual([goodTxs, badTxs]); @@ -30,7 +31,7 @@ describe('MetadataTxValidator', () => { it.each([42, 43])('allows txs with valid max block number', async maxBlockNumber => { const goodTx = mockTxForRollup(1); - goodTx.data.constants.txContext.chainId = globalVariables.chainId; + goodTx.data.constants.txContext.chainId = chainId; goodTx.data.forRollup!.rollupValidationRequests.maxBlockNumber = new MaxBlockNumber(true, new Fr(maxBlockNumber)); await expect(validator.validateTxs([goodTx])).resolves.toEqual([[goodTx], []]); @@ -38,7 +39,7 @@ describe('MetadataTxValidator', () => { it('allows txs with unset max block number', async () => { const goodTx = mockTxForRollup(1); - goodTx.data.constants.txContext.chainId = globalVariables.chainId; + goodTx.data.constants.txContext.chainId = chainId; goodTx.data.forRollup!.rollupValidationRequests.maxBlockNumber = new MaxBlockNumber(false, Fr.ZERO); await expect(validator.validateTxs([goodTx])).resolves.toEqual([[goodTx], []]); @@ -46,10 +47,10 @@ describe('MetadataTxValidator', () => { it('rejects txs with lower max block number', async () => { const badTx = mockTxForRollup(1); - badTx.data.constants.txContext.chainId = globalVariables.chainId; + badTx.data.constants.txContext.chainId = chainId; badTx.data.forRollup!.rollupValidationRequests.maxBlockNumber = new MaxBlockNumber( true, - globalVariables.blockNumber.sub(new Fr(1)), + blockNumber.sub(new Fr(1)), ); await expect(validator.validateTxs([badTx])).resolves.toEqual([[], [badTx]]); }); diff --git a/yarn-project/sequencer-client/src/tx_validator/metadata_validator.ts b/yarn-project/p2p/src/tx_validator/metadata_validator.ts similarity index 67% rename from yarn-project/sequencer-client/src/tx_validator/metadata_validator.ts rename to yarn-project/p2p/src/tx_validator/metadata_validator.ts index d08e7a8929f..995e61cdb00 100644 --- a/yarn-project/sequencer-client/src/tx_validator/metadata_validator.ts +++ b/yarn-project/p2p/src/tx_validator/metadata_validator.ts @@ -1,14 +1,11 @@ import { type AnyTx, Tx, type TxValidator } from '@aztec/circuit-types'; -import { type GlobalVariables } from '@aztec/circuits.js'; +import { type Fr } from '@aztec/circuits.js'; import { createDebugLogger } from '@aztec/foundation/log'; export class MetadataTxValidator implements TxValidator { #log = createDebugLogger('aztec:sequencer:tx_validator:tx_metadata'); - #globalVariables: GlobalVariables; - constructor(globalVariables: GlobalVariables) { - this.#globalVariables = globalVariables; - } + constructor(private chainId: Fr, private blockNumber: Fr) {} validateTxs(txs: T[]): Promise<[validTxs: T[], invalidTxs: T[]]> { const validTxs: T[] = []; @@ -30,12 +27,16 @@ export class MetadataTxValidator implements TxValidator { return Promise.resolve([validTxs, invalidTxs]); } + validateTx(tx: T): Promise { + return Promise.resolve(this.#hasCorrectChainId(tx) && this.#isValidForBlockNumber(tx)); + } + #hasCorrectChainId(tx: T): boolean { - if (!tx.data.constants.txContext.chainId.equals(this.#globalVariables.chainId)) { + if (!tx.data.constants.txContext.chainId.equals(this.chainId)) { this.#log.warn( `Rejecting tx ${Tx.getHash( tx, - )} because of incorrect chain ${tx.data.constants.txContext.chainId.toNumber()} != ${this.#globalVariables.chainId.toNumber()}`, + )} because of incorrect chain ${tx.data.constants.txContext.chainId.toNumber()} != ${this.chainId.toNumber()}`, ); return false; } else { @@ -50,8 +51,12 @@ export class MetadataTxValidator implements TxValidator { : tx.data.rollupValidationRequests; const maxBlockNumber = target.maxBlockNumber; - if (maxBlockNumber.isSome && maxBlockNumber.value < this.#globalVariables.blockNumber) { - this.#log.warn(`Rejecting tx ${Tx.getHash(tx)} for low max block number`); + if (maxBlockNumber.isSome && maxBlockNumber.value < this.blockNumber) { + this.#log.warn( + `Rejecting tx ${Tx.getHash(tx)} for low max block number. Tx max block number: ${ + maxBlockNumber.value + }, current block number: ${this.blockNumber}.`, + ); return false; } else { return true; diff --git a/yarn-project/aztec-node/src/aztec-node/tx_validator/tx_proof_validator.ts b/yarn-project/p2p/src/tx_validator/tx_proof_validator.ts similarity index 100% rename from yarn-project/aztec-node/src/aztec-node/tx_validator/tx_proof_validator.ts rename to yarn-project/p2p/src/tx_validator/tx_proof_validator.ts diff --git a/yarn-project/p2p/src/util.ts b/yarn-project/p2p/src/util.ts index 07a71b5fda2..0c2008d6d3b 100644 --- a/yarn-project/p2p/src/util.ts +++ b/yarn-project/p2p/src/util.ts @@ -1,4 +1,12 @@ +import type { GossipSub } from '@chainsafe/libp2p-gossipsub'; import { resolve } from 'dns/promises'; +import type { Libp2p } from 'libp2p'; + +export interface PubSubLibp2p extends Libp2p { + services: { + pubsub: GossipSub; + }; +} /** * Converts an address string to a multiaddr string. diff --git a/yarn-project/protocol-contracts/scripts/copy-contracts.sh b/yarn-project/protocol-contracts/scripts/copy-contracts.sh index 3646ec63131..aca744ef579 100755 --- a/yarn-project/protocol-contracts/scripts/copy-contracts.sh +++ b/yarn-project/protocol-contracts/scripts/copy-contracts.sh @@ -6,7 +6,6 @@ contracts=( contract_class_registerer_contract-ContractClassRegisterer contract_instance_deployer_contract-ContractInstanceDeployer fee_juice_contract-FeeJuice - key_registry_contract-KeyRegistry auth_registry_contract-AuthRegistry multi_call_entrypoint_contract-MultiCallEntrypoint router_contract-Router diff --git a/yarn-project/protocol-contracts/src/key-registry/artifact.ts b/yarn-project/protocol-contracts/src/key-registry/artifact.ts deleted file mode 100644 index 5feb280a624..00000000000 --- a/yarn-project/protocol-contracts/src/key-registry/artifact.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { loadContractArtifact } from '@aztec/types/abi'; -import { type NoirCompiledContract } from '@aztec/types/noir'; - -import KeyRegistryJson from '../../artifacts/KeyRegistry.json' assert { type: 'json' }; - -export const KeyRegistryArtifact = loadContractArtifact(KeyRegistryJson as NoirCompiledContract); diff --git a/yarn-project/protocol-contracts/src/key-registry/index.test.ts b/yarn-project/protocol-contracts/src/key-registry/index.test.ts deleted file mode 100644 index 216213556d8..00000000000 --- a/yarn-project/protocol-contracts/src/key-registry/index.test.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { - AztecAddress, - CANONICAL_KEY_REGISTRY_ADDRESS, - computeContractAddressFromInstance, - getContractClassFromArtifact, -} from '@aztec/circuits.js'; - -import { getCanonicalKeyRegistry } from './index.js'; - -describe('KeyRegistry', () => { - it('returns canonical protocol contract', () => { - const contract = getCanonicalKeyRegistry(); - expect(computeContractAddressFromInstance(contract.instance)).toEqual(contract.address); - expect(getContractClassFromArtifact(contract.artifact).id).toEqual(contract.contractClass.id); - expect(contract.address).toEqual(AztecAddress.fromBigInt(CANONICAL_KEY_REGISTRY_ADDRESS)); - }); -}); diff --git a/yarn-project/protocol-contracts/src/key-registry/index.ts b/yarn-project/protocol-contracts/src/key-registry/index.ts deleted file mode 100644 index dd4bbf31d6b..00000000000 --- a/yarn-project/protocol-contracts/src/key-registry/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { AztecAddress, CANONICAL_KEY_REGISTRY_ADDRESS } from '@aztec/circuits.js'; - -import { type ProtocolContract, getCanonicalProtocolContract } from '../protocol_contract.js'; -import { KeyRegistryArtifact } from './artifact.js'; - -/** Returns the canonical deployment of the public key registry. */ -export function getCanonicalKeyRegistry(): ProtocolContract { - const contract = getCanonicalProtocolContract(KeyRegistryArtifact, 1); - - if (!contract.address.equals(KeyRegistryAddress)) { - throw new Error( - `Incorrect address for key registry (got ${contract.address.toString()} but expected ${KeyRegistryAddress.toString()}). Check CANONICAL_KEY_REGISTRY_ADDRESS is set to the correct value in the constants files and run the protocol-contracts package tests.`, - ); - } - return contract; -} - -export function getCanonicalKeyRegistryAddress(): AztecAddress { - return getCanonicalKeyRegistry().address; -} - -export const KeyRegistryAddress = AztecAddress.fromBigInt(CANONICAL_KEY_REGISTRY_ADDRESS); diff --git a/yarn-project/prover-client/package.json b/yarn-project/prover-client/package.json index 6f451907c83..9a99cddb3d8 100644 --- a/yarn-project/prover-client/package.json +++ b/yarn-project/prover-client/package.json @@ -5,7 +5,8 @@ "exports": { ".": "./dest/index.js", "./prover-agent": "./dest/prover-agent/index.js", - "./orchestrator": "./dest/orchestrator/index.js" + "./orchestrator": "./dest/orchestrator/index.js", + "./helpers": "./dest/orchestrator/block-building-helpers.js" }, "typedocOptions": { "entryPoints": [ @@ -80,6 +81,7 @@ "@types/memdown": "^3.0.0", "@types/node": "^18.7.23", "@types/source-map-support": "^0.5.10", + "get-port": "^7.1.0", "jest": "^29.5.0", "jest-mock-extended": "^3.0.3", "ts-node": "^10.9.1", diff --git a/yarn-project/prover-client/src/mocks/fixtures.ts b/yarn-project/prover-client/src/mocks/fixtures.ts index eb8ab0fc407..effc35c2814 100644 --- a/yarn-project/prover-client/src/mocks/fixtures.ts +++ b/yarn-project/prover-client/src/mocks/fixtures.ts @@ -2,29 +2,20 @@ import { MerkleTreeId, type ProcessedTx, makeEmptyProcessedTx as makeEmptyProcessedTxFromHistoricalTreeRoots, - makeProcessedTx, - mockTx, } from '@aztec/circuit-types'; +import { makeBloatedProcessedTx as makeBloatedProcessedTxWithVKRoot } from '@aztec/circuit-types/test'; import { AztecAddress, EthAddress, Fr, GasFees, GlobalVariables, - KernelCircuitPublicInputs, - LogHash, - MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, - MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, NULLIFIER_TREE_HEIGHT, PUBLIC_DATA_SUBTREE_HEIGHT, PublicDataTreeLeaf, - PublicDataUpdateRequest, - ScopedLogHash, } from '@aztec/circuits.js'; -import { fr, makeScopedL2ToL1Message } from '@aztec/circuits.js/testing'; -import { makeTuple } from '@aztec/foundation/array'; import { padArrayEnd } from '@aztec/foundation/collection'; import { randomBytes } from '@aztec/foundation/crypto'; import { type DebugLogger } from '@aztec/foundation/log'; @@ -98,43 +89,8 @@ export async function getSimulationProvider( return new WASMSimulator(); } -export const makeBloatedProcessedTx = (builderDb: MerkleTreeOperations, seed = 0x1) => { - seed *= MAX_NULLIFIERS_PER_TX; // Ensure no clashing given incremental seeds - const tx = mockTx(seed); - const kernelOutput = KernelCircuitPublicInputs.empty(); - kernelOutput.constants.vkTreeRoot = getVKTreeRoot(); - kernelOutput.constants.historicalHeader = builderDb.getInitialHeader(); - kernelOutput.end.publicDataUpdateRequests = makeTuple( - MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, - i => new PublicDataUpdateRequest(fr(i), fr(i + 10), i + 20), - seed + 0x500, - ); - kernelOutput.end.publicDataUpdateRequests = makeTuple( - MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, - i => new PublicDataUpdateRequest(fr(i), fr(i + 10), i + 20), - seed + 0x600, - ); - - const processedTx = makeProcessedTx(tx, kernelOutput, []); - - processedTx.data.end.noteHashes = makeTuple(MAX_NOTE_HASHES_PER_TX, fr, seed + 0x100); - processedTx.data.end.nullifiers = makeTuple(MAX_NULLIFIERS_PER_TX, fr, seed + 0x100000); - - processedTx.data.end.nullifiers[tx.data.forPublic!.end.nullifiers.length - 1] = Fr.zero(); - - processedTx.data.end.l2ToL1Msgs = makeTuple(MAX_L2_TO_L1_MSGS_PER_TX, makeScopedL2ToL1Message, seed + 0x300); - processedTx.noteEncryptedLogs.unrollLogs().forEach((log, i) => { - processedTx.data.end.noteEncryptedLogsHashes[i] = new LogHash(Fr.fromBuffer(log.hash()), 0, new Fr(log.length)); - }); - processedTx.encryptedLogs.unrollLogs().forEach((log, i) => { - processedTx.data.end.encryptedLogsHashes[i] = new ScopedLogHash( - new LogHash(Fr.fromBuffer(log.hash()), 0, new Fr(log.length)), - log.maskedContractAddress, - ); - }); - - return processedTx; -}; +export const makeBloatedProcessedTx = (builderDb: MerkleTreeOperations, seed = 0x1) => + makeBloatedProcessedTxWithVKRoot(builderDb, getVKTreeRoot(), seed); export const makeEmptyProcessedTx = (builderDb: MerkleTreeOperations, chainId: Fr, version: Fr) => { const header = builderDb.getInitialHeader(); @@ -179,9 +135,9 @@ export const makeGlobals = (blockNumber: number) => { return new GlobalVariables( Fr.ZERO, Fr.ZERO, - new Fr(blockNumber), + new Fr(blockNumber) /** block number */, new Fr(blockNumber) /** slot number */, - Fr.ZERO, + new Fr(blockNumber) /** timestamp */, EthAddress.ZERO, AztecAddress.ZERO, GasFees.empty(), diff --git a/yarn-project/prover-client/src/mocks/test_context.ts b/yarn-project/prover-client/src/mocks/test_context.ts index e0d6e170685..c3e709fb6d3 100644 --- a/yarn-project/prover-client/src/mocks/test_context.ts +++ b/yarn-project/prover-client/src/mocks/test_context.ts @@ -13,7 +13,6 @@ import { type Fr } from '@aztec/foundation/fields'; import { type DebugLogger } from '@aztec/foundation/log'; import { openTmpStore } from '@aztec/kv-store/utils'; import { - type ContractsDataSourcePublicDB, type PublicExecutionResult, PublicExecutionResultBuilder, type PublicExecutor, @@ -21,7 +20,7 @@ import { RealPublicKernelCircuitSimulator, type SimulationProvider, WASMSimulator, - type WorldStatePublicDB, + type WorldStateDB, } from '@aztec/simulator'; import { NoopTelemetryClient } from '@aztec/telemetry-client/noop'; import { MerkleTrees } from '@aztec/world-state'; @@ -33,7 +32,7 @@ import { tmpdir } from 'os'; import { join } from 'path'; import { TestCircuitProver } from '../../../bb-prover/src/test/test_circuit_prover.js'; -import { ProvingOrchestrator } from '../orchestrator/orchestrator.js'; +import { ProvingOrchestrator } from '../orchestrator/index.js'; import { MemoryProvingQueue } from '../prover-agent/memory-proving-queue.js'; import { ProverAgent } from '../prover-agent/prover-agent.js'; import { getEnvironmentConfig, getSimulationProvider, makeGlobals } from './fixtures.js'; @@ -41,8 +40,7 @@ import { getEnvironmentConfig, getSimulationProvider, makeGlobals } from './fixt export class TestContext { constructor( public publicExecutor: MockProxy, - public publicContractsDB: MockProxy, - public publicWorldStateDB: MockProxy, + public worldStateDB: MockProxy, public publicProcessor: PublicProcessor, public simulationProvider: SimulationProvider, public globalVariables: GlobalVariables, @@ -71,8 +69,7 @@ export class TestContext { const globalVariables = makeGlobals(blockNumber); const publicExecutor = mock(); - const publicContractsDB = mock(); - const publicWorldStateDB = mock(); + const worldStateDB = mock(); const publicKernel = new RealPublicKernelCircuitSimulator(new WASMSimulator()); const telemetry = new NoopTelemetryClient(); @@ -88,14 +85,13 @@ export class TestContext { actualDb = ws.asLatest(); } - const processor = new PublicProcessor( + const processor = PublicProcessor.create( actualDb, publicExecutor, publicKernel, GlobalVariables.empty(), Header.empty(), - publicContractsDB, - publicWorldStateDB, + worldStateDB, telemetry, ); @@ -130,8 +126,7 @@ export class TestContext { return new this( publicExecutor, - publicContractsDB, - publicWorldStateDB, + worldStateDB, processor, simulationProvider, globalVariables, diff --git a/yarn-project/prover-client/src/orchestrator/block-building-helpers.ts b/yarn-project/prover-client/src/orchestrator/block-building-helpers.ts index 278e6f7a65e..dd798f38b35 100644 --- a/yarn-project/prover-client/src/orchestrator/block-building-helpers.ts +++ b/yarn-project/prover-client/src/orchestrator/block-building-helpers.ts @@ -1,4 +1,4 @@ -import { MerkleTreeId, type ProcessedTx } from '@aztec/circuit-types'; +import { type Body, MerkleTreeId, type ProcessedTx, TxEffect, getTreeHeight } from '@aztec/circuit-types'; import { ARCHIVE_HEIGHT, AppendOnlyTreeSnapshot, @@ -6,28 +6,29 @@ import { BaseRollupInputs, BlockMergeRollupInputs, type BlockRootOrBlockMergePublicInputs, - BlockRootRollupInputs, ConstantRollupData, + ContentCommitment, Fr, type GlobalVariables, - type Header, + Header, KernelData, - type L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, MAX_NULLIFIERS_PER_TX, MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MembershipWitness, MergeRollupInputs, + MerkleTreeCalculator, type NESTED_RECURSIVE_PROOF_LENGTH, NOTE_HASH_SUBTREE_HEIGHT, NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH, NULLIFIER_SUBTREE_HEIGHT, NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH, NULLIFIER_TREE_HEIGHT, - type NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, + NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, NullifierLeafPreimage, PUBLIC_DATA_SUBTREE_HEIGHT, PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH, PUBLIC_DATA_TREE_HEIGHT, + type ParityPublicInputs, PartialStateReference, PreviousRollupBlockData, PreviousRollupData, @@ -37,21 +38,25 @@ import { PublicDataUpdateRequest, type RECURSIVE_PROOF_LENGTH, type RecursiveProof, - type RootParityInput, RootRollupInputs, StateDiffHints, - type StateReference, + StateReference, VK_TREE_HEIGHT, type VerificationKeyAsFields, type VerificationKeyData, } from '@aztec/circuits.js'; import { assertPermutation, makeTuple } from '@aztec/foundation/array'; import { padArrayEnd } from '@aztec/foundation/collection'; +import { sha256Trunc } from '@aztec/foundation/crypto'; +import { type DebugLogger } from '@aztec/foundation/log'; import { type Tuple, assertLength, toFriendlyJSON } from '@aztec/foundation/serialize'; +import { computeUnbalancedMerkleRoot } from '@aztec/foundation/trees'; import { getVKIndex, getVKSiblingPath, getVKTreeRoot } from '@aztec/noir-protocol-circuits-types'; import { HintsBuilder, computeFeePayerBalanceLeafSlot } from '@aztec/simulator'; import { type MerkleTreeOperations } from '@aztec/world-state'; +import { inspect } from 'util'; + /** * Type representing the names of the trees for the base rollup. */ @@ -189,7 +194,6 @@ export function createMergeRollupInputs( return mergeInputs; } -// TODO(#7346): Integrate batch rollup circuits and test below export function createBlockMergeRollupInputs( left: [ BlockRootOrBlockMergePublicInputs, @@ -209,6 +213,80 @@ export function createBlockMergeRollupInputs( return mergeInputs; } +export function buildHeaderFromCircuitOutputs( + previousMergeData: [BaseOrMergeRollupPublicInputs, BaseOrMergeRollupPublicInputs], + parityPublicInputs: ParityPublicInputs, + rootRollupOutputs: BlockRootOrBlockMergePublicInputs, + updatedL1ToL2TreeSnapshot: AppendOnlyTreeSnapshot, + logger?: DebugLogger, +) { + const contentCommitment = new ContentCommitment( + new Fr(previousMergeData[0].numTxs + previousMergeData[1].numTxs), + sha256Trunc( + Buffer.concat([previousMergeData[0].txsEffectsHash.toBuffer(), previousMergeData[1].txsEffectsHash.toBuffer()]), + ), + parityPublicInputs.shaRoot.toBuffer(), + sha256Trunc(Buffer.concat([previousMergeData[0].outHash.toBuffer(), previousMergeData[1].outHash.toBuffer()])), + ); + const state = new StateReference(updatedL1ToL2TreeSnapshot, previousMergeData[1].end); + const header = new Header( + rootRollupOutputs.previousArchive, + contentCommitment, + state, + previousMergeData[0].constants.globalVariables, + previousMergeData[0].accumulatedFees.add(previousMergeData[1].accumulatedFees), + ); + if (!header.hash().equals(rootRollupOutputs.endBlockHash)) { + logger?.error( + `Block header mismatch when building header from circuit outputs.` + + `\n\nHeader: ${inspect(header)}` + + `\n\nCircuit: ${toFriendlyJSON(rootRollupOutputs)}`, + ); + throw new Error(`Block header mismatch when building from circuit outputs`); + } + return header; +} + +export async function buildHeaderFromTxEffects( + body: Body, + globalVariables: GlobalVariables, + l1ToL2Messages: Fr[], + db: MerkleTreeOperations, +) { + const stateReference = new StateReference( + await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, db), + new PartialStateReference( + await getTreeSnapshot(MerkleTreeId.NOTE_HASH_TREE, db), + await getTreeSnapshot(MerkleTreeId.NULLIFIER_TREE, db), + await getTreeSnapshot(MerkleTreeId.PUBLIC_DATA_TREE, db), + ), + ); + + const previousArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db); + + const outHash = computeUnbalancedMerkleRoot( + body.txEffects.map(tx => tx.txOutHash()), + TxEffect.empty().txOutHash(), + ); + + l1ToL2Messages = padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP); + const hasher = (left: Buffer, right: Buffer) => sha256Trunc(Buffer.concat([left, right])); + const parityHeight = Math.ceil(Math.log2(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP)); + const parityShaRoot = new MerkleTreeCalculator(parityHeight, Fr.ZERO.toBuffer(), hasher).computeTreeRoot( + l1ToL2Messages.map(msg => msg.toBuffer()), + ); + + const contentCommitment = new ContentCommitment( + new Fr(body.numberOfTxsIncludingPadded), + body.getTxsEffectsHash(), + parityShaRoot, + outHash, + ); + + const fees = body.txEffects.reduce((acc, tx) => acc.add(tx.transactionFee), Fr.ZERO); + return new Header(previousArchive, contentCommitment, stateReference, globalVariables, fees); +} + // Validate that the roots of all local trees match the output of the root circuit simulation export async function validateBlockRootOutput( blockRootOutput: BlockRootOrBlockMergePublicInputs, @@ -238,58 +316,13 @@ export async function validateState(state: StateReference, db: MerkleTreeOperati ); } -// Builds the inputs for the block root rollup circuit, without making any changes to trees -export async function getBlockRootRollupInput( - rollupOutputLeft: BaseOrMergeRollupPublicInputs, - rollupProofLeft: RecursiveProof, - verificationKeyLeft: VerificationKeyAsFields, - rollupOutputRight: BaseOrMergeRollupPublicInputs, - rollupProofRight: RecursiveProof, - verificationKeyRight: VerificationKeyAsFields, - l1ToL2Roots: RootParityInput, - newL1ToL2Messages: Tuple, - messageTreeSnapshot: AppendOnlyTreeSnapshot, - messageTreeRootSiblingPath: Tuple, - db: MerkleTreeOperations, - proverId: Fr, -) { - const previousRollupData: BlockRootRollupInputs['previousRollupData'] = [ - getPreviousRollupDataFromPublicInputs(rollupOutputLeft, rollupProofLeft, verificationKeyLeft), - getPreviousRollupDataFromPublicInputs(rollupOutputRight, rollupProofRight, verificationKeyRight), - ]; - - const getRootTreeSiblingPath = async (treeId: MerkleTreeId) => { - const { size } = await db.getTreeInfo(treeId); - const path = await db.getSiblingPath(treeId, size); - return path.toFields(); - }; - - // Get blocks tree - const startArchiveSnapshot = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db); - const newArchiveSiblingPathArray = await getRootTreeSiblingPath(MerkleTreeId.ARCHIVE); - - const newArchiveSiblingPath = makeTuple( - ARCHIVE_HEIGHT, - i => (i < newArchiveSiblingPathArray.length ? newArchiveSiblingPathArray[i] : Fr.ZERO), - 0, - ); - - return BlockRootRollupInputs.from({ - previousRollupData, - l1ToL2Roots, - newL1ToL2Messages, - newL1ToL2MessageTreeRootSiblingPath: messageTreeRootSiblingPath, - startL1ToL2MessageTreeSnapshot: messageTreeSnapshot, - startArchiveSnapshot, - newArchiveSiblingPath, - // TODO(#7346): Inject previous block hash (required when integrating batch rollup circuits) - previousBlockHash: Fr.ZERO, - proverId, - }); +export async function getRootTreeSiblingPath(treeId: TID, db: MerkleTreeOperations) { + const { size } = await db.getTreeInfo(treeId); + const path = await db.getSiblingPath(treeId, size); + return padArrayEnd(path.toFields(), Fr.ZERO, getTreeHeight(treeId)); } // Builds the inputs for the final root rollup circuit, without making any changes to trees -// TODO(#7346): Integrate batch rollup circuits and test below export function getRootRollupInput( rollupOutputLeft: BlockRootOrBlockMergePublicInputs, rollupProofLeft: RecursiveProof, diff --git a/yarn-project/prover-client/src/orchestrator/proving-state.ts b/yarn-project/prover-client/src/orchestrator/block-proving-state.ts similarity index 86% rename from yarn-project/prover-client/src/orchestrator/proving-state.ts rename to yarn-project/prover-client/src/orchestrator/block-proving-state.ts index 4aaa96abd63..f3c2519c831 100644 --- a/yarn-project/prover-client/src/orchestrator/proving-state.ts +++ b/yarn-project/prover-client/src/orchestrator/block-proving-state.ts @@ -1,5 +1,6 @@ import { type L2Block, type MerkleTreeId, type ProvingResult } from '@aztec/circuit-types'; import { + type ARCHIVE_HEIGHT, type AppendOnlyTreeSnapshot, type BaseOrMergeRollupPublicInputs, type BlockRootOrBlockMergePublicInputs, @@ -8,6 +9,7 @@ import { type L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, type NESTED_RECURSIVE_PROOF_LENGTH, type NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, + NUM_BASE_PARITY_PER_ROOT_PARITY, type Proof, type RECURSIVE_PROOF_LENGTH, type RecursiveProof, @@ -18,6 +20,12 @@ import { type Tuple } from '@aztec/foundation/serialize'; import { type TxProvingState } from './tx-proving-state.js'; +enum PROVING_STATE_LIFECYCLE { + PROVING_STATE_CREATED, + PROVING_STATE_RESOLVED, + PROVING_STATE_REJECTED, +} + export type MergeRollupInputData = { inputs: [BaseOrMergeRollupPublicInputs | undefined, BaseOrMergeRollupPublicInputs | undefined]; proofs: [ @@ -29,20 +37,11 @@ export type MergeRollupInputData = { export type TreeSnapshots = Map; -enum PROVING_STATE_LIFECYCLE { - PROVING_STATE_CREATED, - PROVING_STATE_FULL, - PROVING_STATE_RESOLVED, - PROVING_STATE_REJECTED, -} - /** - * The current state of the proving schedule. Contains the raw inputs (txs) and intermediate state to generate every constituent proof in the tree. - * Carries an identifier so we can identify if the proving state is discarded and a new one started. - * Captures resolve and reject callbacks to provide a promise base interface to the consumer of our proving. + * The current state of the proving schedule for a given block. Managed by ProvingState. + * Contains the raw inputs and intermediate state to generate every constituent proof in the tree. */ -export class ProvingState { - private provingStateLifecycle = PROVING_STATE_LIFECYCLE.PROVING_STATE_CREATED; +export class BlockProvingState { private mergeRollupInputs: MergeRollupInputData[] = []; private rootParityInputs: Array | undefined> = []; private finalRootParityInputs: RootParityInput | undefined; @@ -50,17 +49,28 @@ export class ProvingState { public finalProof: Proof | undefined; public block: L2Block | undefined; private txs: TxProvingState[] = []; + + private provingStateLifecycle = PROVING_STATE_LIFECYCLE.PROVING_STATE_CREATED; + constructor( + public readonly index: number, public readonly totalNumTxs: number, - private completionCallback: (result: ProvingResult) => void, - private rejectionCallback: (reason: string) => void, public readonly globalVariables: GlobalVariables, public readonly newL1ToL2Messages: Tuple, - numRootParityInputs: number, public readonly messageTreeSnapshot: AppendOnlyTreeSnapshot, public readonly messageTreeRootSiblingPath: Tuple, + public readonly messageTreeSnapshotAfterInsertion: AppendOnlyTreeSnapshot, + public readonly archiveTreeSnapshot: AppendOnlyTreeSnapshot, + public readonly archiveTreeRootSiblingPath: Tuple, + public readonly previousBlockHash: Fr, + private completionCallback?: (result: ProvingResult) => void, + private rejectionCallback?: (reason: string) => void, ) { - this.rootParityInputs = Array.from({ length: numRootParityInputs }).map(_ => undefined); + this.rootParityInputs = Array.from({ length: NUM_BASE_PARITY_PER_ROOT_PARITY }).map(_ => undefined); + } + + public get blockNumber() { + return this.globalVariables.blockNumber.toNumber(); } // Returns the number of levels of merge rollups @@ -95,12 +105,8 @@ export class ProvingState { } // Adds a transaction to the proving state, returns it's index - // Will update the proving life cycle if this is the last transaction public addNewTx(tx: TxProvingState) { this.txs.push(tx); - if (this.txs.length === this.totalNumTxs) { - this.provingStateLifecycle = PROVING_STATE_LIFECYCLE.PROVING_STATE_FULL; - } return this.txs.length - 1; } @@ -124,19 +130,6 @@ export class ProvingState { return this.rootParityInputs; } - // Returns true if this proving state is still valid, false otherwise - public verifyState() { - return ( - this.provingStateLifecycle === PROVING_STATE_LIFECYCLE.PROVING_STATE_CREATED || - this.provingStateLifecycle === PROVING_STATE_LIFECYCLE.PROVING_STATE_FULL - ); - } - - // Returns true if we are still able to accept transactions, false otherwise - public isAcceptingTransactions() { - return this.provingStateLifecycle === PROVING_STATE_LIFECYCLE.PROVING_STATE_CREATED; - } - // Returns the complete set of transaction proving state objects public get allTxs() { return this.txs; @@ -211,28 +204,37 @@ export class ProvingState { return this.rootParityInputs.findIndex(p => !p) === -1; } - // Attempts to reject the proving state promise with a reason of 'cancelled' - public cancel() { - this.reject('Proving cancelled'); + // Returns true if we are still able to accept transactions, false otherwise + public isAcceptingTransactions() { + return ( + this.provingStateLifecycle === PROVING_STATE_LIFECYCLE.PROVING_STATE_CREATED && this.totalNumTxs > this.txs.length + ); + } + + // Returns true if this proving state is still valid, false otherwise + public verifyState() { + return this.provingStateLifecycle === PROVING_STATE_LIFECYCLE.PROVING_STATE_CREATED; } // Attempts to reject the proving state promise with the given reason - // Does nothing if not in a valid state public reject(reason: string) { if (!this.verifyState()) { return; } this.provingStateLifecycle = PROVING_STATE_LIFECYCLE.PROVING_STATE_REJECTED; - this.rejectionCallback(reason); + if (this.rejectionCallback) { + this.rejectionCallback(reason); + } } // Attempts to resolve the proving state promise with the given result - // Does nothing if not in a valid state public resolve(result: ProvingResult) { if (!this.verifyState()) { return; } this.provingStateLifecycle = PROVING_STATE_LIFECYCLE.PROVING_STATE_RESOLVED; - this.completionCallback(result); + if (this.completionCallback) { + this.completionCallback(result); + } } } diff --git a/yarn-project/prover-client/src/orchestrator/epoch-proving-state.ts b/yarn-project/prover-client/src/orchestrator/epoch-proving-state.ts new file mode 100644 index 00000000000..350240242b8 --- /dev/null +++ b/yarn-project/prover-client/src/orchestrator/epoch-proving-state.ts @@ -0,0 +1,232 @@ +import { type MerkleTreeId, type ProvingResult } from '@aztec/circuit-types'; +import { + type ARCHIVE_HEIGHT, + type AppendOnlyTreeSnapshot, + type BlockRootOrBlockMergePublicInputs, + Fr, + type GlobalVariables, + type L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, + type NESTED_RECURSIVE_PROOF_LENGTH, + NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, + type Proof, + type RecursiveProof, + type RootRollupPublicInputs, + type VerificationKeyAsFields, +} from '@aztec/circuits.js'; +import { padArrayEnd } from '@aztec/foundation/collection'; +import { type Tuple } from '@aztec/foundation/serialize'; + +import { BlockProvingState } from './block-proving-state.js'; + +export type TreeSnapshots = Map; + +enum PROVING_STATE_LIFECYCLE { + PROVING_STATE_CREATED, + PROVING_STATE_FULL, + PROVING_STATE_RESOLVED, + PROVING_STATE_REJECTED, +} + +export type BlockMergeRollupInputData = { + inputs: [BlockRootOrBlockMergePublicInputs | undefined, BlockRootOrBlockMergePublicInputs | undefined]; + proofs: [ + RecursiveProof | undefined, + RecursiveProof | undefined, + ]; + verificationKeys: [VerificationKeyAsFields | undefined, VerificationKeyAsFields | undefined]; +}; + +/** + * The current state of the proving schedule for an epoch. + * Contains the raw inputs and intermediate state to generate every constituent proof in the tree. + * Carries an identifier so we can identify if the proving state is discarded and a new one started. + * Captures resolve and reject callbacks to provide a promise base interface to the consumer of our proving. + */ +export class EpochProvingState { + private provingStateLifecycle = PROVING_STATE_LIFECYCLE.PROVING_STATE_CREATED; + + private mergeRollupInputs: BlockMergeRollupInputData[] = []; + public rootRollupPublicInputs: RootRollupPublicInputs | undefined; + public finalProof: Proof | undefined; + public blocks: BlockProvingState[] = []; + + constructor( + public readonly epochNumber: number, + public readonly totalNumBlocks: number, + private completionCallback: (result: ProvingResult) => void, + private rejectionCallback: (reason: string) => void, + ) {} + + /** Returns the current block proving state */ + public get currentBlock(): BlockProvingState | undefined { + return this.blocks[this.blocks.length - 1]; + } + + // Returns the number of levels of merge rollups + public get numMergeLevels() { + return BigInt(Math.ceil(Math.log2(this.totalNumBlocks)) - 1); + } + + // Calculates the index and level of the parent rollup circuit + // Based on tree implementation in unbalanced_tree.ts -> batchInsert() + // REFACTOR: This is repeated from the block orchestrator + public findMergeLevel(currentLevel: bigint, currentIndex: bigint) { + const moveUpMergeLevel = (levelSize: number, index: bigint, nodeToShift: boolean) => { + levelSize /= 2; + if (levelSize & 1) { + [levelSize, nodeToShift] = nodeToShift ? [levelSize + 1, false] : [levelSize - 1, true]; + } + index >>= 1n; + return { thisLevelSize: levelSize, thisIndex: index, shiftUp: nodeToShift }; + }; + let [thisLevelSize, shiftUp] = + this.totalNumBlocks & 1 ? [this.totalNumBlocks - 1, true] : [this.totalNumBlocks, false]; + const maxLevel = this.numMergeLevels + 1n; + let placeholder = currentIndex; + for (let i = 0; i < maxLevel - currentLevel; i++) { + ({ thisLevelSize, thisIndex: placeholder, shiftUp } = moveUpMergeLevel(thisLevelSize, placeholder, shiftUp)); + } + let thisIndex = currentIndex; + let mergeLevel = currentLevel; + while (thisIndex >= thisLevelSize && mergeLevel != 0n) { + mergeLevel -= 1n; + ({ thisLevelSize, thisIndex, shiftUp } = moveUpMergeLevel(thisLevelSize, thisIndex, shiftUp)); + } + return [mergeLevel - 1n, thisIndex >> 1n, thisIndex & 1n]; + } + + // Adds a block to the proving state, returns its index + // Will update the proving life cycle if this is the last block + public startNewBlock( + numTxs: number, + globalVariables: GlobalVariables, + l1ToL2Messages: Fr[], + messageTreeSnapshot: AppendOnlyTreeSnapshot, + messageTreeRootSiblingPath: Tuple, + messageTreeSnapshotAfterInsertion: AppendOnlyTreeSnapshot, + archiveTreeSnapshot: AppendOnlyTreeSnapshot, + archiveTreeRootSiblingPath: Tuple, + previousBlockHash: Fr, + completionCallback?: (result: ProvingResult) => void, + rejectionCallback?: (reason: string) => void, + ) { + const block = new BlockProvingState( + this.blocks.length, + numTxs, + globalVariables, + padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP), + messageTreeSnapshot, + messageTreeRootSiblingPath, + messageTreeSnapshotAfterInsertion, + archiveTreeSnapshot, + archiveTreeRootSiblingPath, + previousBlockHash, + completionCallback, + reason => { + // Reject the block + if (rejectionCallback) { + rejectionCallback(reason); + } + // An error on any block rejects this whole epoch + this.reject(reason); + }, + ); + this.blocks.push(block); + if (this.blocks.length === this.totalNumBlocks) { + this.provingStateLifecycle = PROVING_STATE_LIFECYCLE.PROVING_STATE_FULL; + } + return this.blocks.length - 1; + } + + // Returns true if this proving state is still valid, false otherwise + public verifyState() { + return ( + this.provingStateLifecycle === PROVING_STATE_LIFECYCLE.PROVING_STATE_CREATED || + this.provingStateLifecycle === PROVING_STATE_LIFECYCLE.PROVING_STATE_FULL + ); + } + + // Returns true if we are still able to accept blocks, false otherwise + public isAcceptingBlocks() { + return this.provingStateLifecycle === PROVING_STATE_LIFECYCLE.PROVING_STATE_CREATED; + } + + /** + * Stores the inputs to a merge circuit and determines if the circuit is ready to be executed + * @param mergeInputs - The inputs to store + * @param indexWithinMerge - The index in the set of inputs to this merge circuit + * @param indexOfMerge - The global index of this merge circuit + * @returns True if the merge circuit is ready to be executed, false otherwise + */ + public storeMergeInputs( + mergeInputs: [ + BlockRootOrBlockMergePublicInputs, + RecursiveProof, + VerificationKeyAsFields, + ], + indexWithinMerge: number, + indexOfMerge: number, + ) { + if (!this.mergeRollupInputs[indexOfMerge]) { + const mergeInputData: BlockMergeRollupInputData = { + inputs: [undefined, undefined], + proofs: [undefined, undefined], + verificationKeys: [undefined, undefined], + }; + mergeInputData.inputs[indexWithinMerge] = mergeInputs[0]; + mergeInputData.proofs[indexWithinMerge] = mergeInputs[1]; + mergeInputData.verificationKeys[indexWithinMerge] = mergeInputs[2]; + this.mergeRollupInputs[indexOfMerge] = mergeInputData; + return false; + } + const mergeInputData = this.mergeRollupInputs[indexOfMerge]; + mergeInputData.inputs[indexWithinMerge] = mergeInputs[0]; + mergeInputData.proofs[indexWithinMerge] = mergeInputs[1]; + mergeInputData.verificationKeys[indexWithinMerge] = mergeInputs[2]; + return true; + } + + // Returns a specific transaction proving state + public getBlockProvingState(index: number) { + return this.blocks[index]; + } + + // Returns a set of merge rollup inputs + public getMergeInputs(indexOfMerge: number) { + return this.mergeRollupInputs[indexOfMerge]; + } + + // Returns true if we have sufficient inputs to execute the block root rollup + public isReadyForRootRollup() { + return !(this.mergeRollupInputs[0] === undefined || this.mergeRollupInputs[0].inputs.findIndex(p => !p) !== -1); + } + + // Attempts to reject the proving state promise with a reason of 'cancelled' + public cancel() { + this.reject('Proving cancelled'); + } + + // Attempts to reject the proving state promise with the given reason + // Does nothing if not in a valid state + public reject(reason: string) { + if (!this.verifyState()) { + return; + } + this.provingStateLifecycle = PROVING_STATE_LIFECYCLE.PROVING_STATE_REJECTED; + this.rejectionCallback(reason); + + for (const block of this.blocks) { + block.reject('Proving cancelled'); + } + } + + // Attempts to resolve the proving state promise with the given result + // Does nothing if not in a valid state + public resolve(result: ProvingResult) { + if (!this.verifyState()) { + return; + } + this.provingStateLifecycle = PROVING_STATE_LIFECYCLE.PROVING_STATE_RESOLVED; + this.completionCallback(result); + } +} diff --git a/yarn-project/prover-client/src/orchestrator/orchestrator.ts b/yarn-project/prover-client/src/orchestrator/orchestrator.ts index b0ea8d36e60..63cf099f51a 100644 --- a/yarn-project/prover-client/src/orchestrator/orchestrator.ts +++ b/yarn-project/prover-client/src/orchestrator/orchestrator.ts @@ -1,40 +1,38 @@ import { + BlockProofError, Body, EncryptedNoteTxL2Logs, EncryptedTxL2Logs, L2Block, MerkleTreeId, + PROVING_STATUS, type PaddingProcessedTx, type ProcessedTx, - PublicKernelType, + type ProvingBlockResult, + ProvingRequestType, + type ProvingResult, + type ProvingTicket, + type PublicInputsAndRecursiveProof, + type ServerCircuitProver, Tx, type TxEffect, UnencryptedTxL2Logs, makeEmptyProcessedTx, makePaddingProcessedTx, - mapPublicKernelToCircuitName, + mapProvingRequestTypeToCircuitName, toTxEffect, } from '@aztec/circuit-types'; -import { - BlockProofError, - type BlockProver, - PROVING_STATUS, - type ProvingBlockResult, - type ProvingResult, - type ProvingTicket, - type PublicInputsAndRecursiveProof, - type ServerCircuitProver, -} from '@aztec/circuit-types/interfaces'; +import { type EpochProver } from '@aztec/circuit-types/interfaces'; import { type CircuitName } from '@aztec/circuit-types/stats'; import { AvmCircuitInputs, type BaseOrMergeRollupPublicInputs, BaseParityInputs, type BaseRollupInputs, - ContentCommitment, + type BlockRootOrBlockMergePublicInputs, + BlockRootRollupInputs, Fr, type GlobalVariables, - Header, type KernelCircuitPublicInputs, L1_TO_L2_MSG_SUBTREE_HEIGHT, L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, @@ -48,9 +46,9 @@ import { type RecursiveProof, type RootParityInput, RootParityInputs, - StateReference, type TUBE_PROOF_LENGTH, TubeInputs, + type VMCircuitPublicInputs, type VerificationKeyAsFields, VerificationKeyData, makeEmptyProof, @@ -58,7 +56,6 @@ import { } from '@aztec/circuits.js'; import { makeTuple } from '@aztec/foundation/array'; import { padArrayEnd } from '@aztec/foundation/collection'; -import { sha256Trunc } from '@aztec/foundation/crypto'; import { AbortError } from '@aztec/foundation/error'; import { createDebugLogger } from '@aztec/foundation/log'; import { promiseWithResolvers } from '@aztec/foundation/promise'; @@ -73,16 +70,21 @@ import { inspect } from 'util'; import { buildBaseRollupInput, + buildHeaderFromCircuitOutputs, + buildHeaderFromTxEffects, + createBlockMergeRollupInputs, createMergeRollupInputs, - getBlockRootRollupInput, + getPreviousRollupDataFromPublicInputs, + getRootRollupInput, + getRootTreeSiblingPath, getSubtreeSiblingPath, getTreeSnapshot, - validateBlockRootOutput, validatePartialState, validateTx, } from './block-building-helpers.js'; +import { type BlockProvingState, type MergeRollupInputData } from './block-proving-state.js'; +import { type BlockMergeRollupInputData, EpochProvingState, type TreeSnapshots } from './epoch-proving-state.js'; import { ProvingOrchestratorMetrics } from './orchestrator_metrics.js'; -import { type MergeRollupInputData, ProvingState, type TreeSnapshots } from './proving-state.js'; import { TX_PROVING_CODE, type TxProvingInstruction, TxProvingState } from './tx-proving-state.js'; const logger = createDebugLogger('aztec:prover:proving-orchestrator'); @@ -101,8 +103,8 @@ const logger = createDebugLogger('aztec:prover:proving-orchestrator'); /** * The orchestrator, managing the flow of recursive proving operations required to build the rollup proof tree. */ -export class ProvingOrchestrator implements BlockProver { - private provingState: ProvingState | undefined = undefined; +export class ProvingOrchestrator implements EpochProver { + private provingState: EpochProvingState | undefined = undefined; private pendingProvingJobs: AbortController[] = []; private paddingTx: PaddingProcessedTx | undefined = undefined; @@ -132,6 +134,23 @@ export class ProvingOrchestrator implements BlockProver { this.paddingTx = undefined; } + @trackSpan('ProvingOrchestrator.startNewEpoch', (epochNumber, totalNumBlocks) => ({ + [Attributes.EPOCH_SIZE]: totalNumBlocks, + [Attributes.EPOCH_NUMBER]: epochNumber, + })) + public startNewEpoch(epochNumber: number, totalNumBlocks: number): ProvingTicket { + const { promise: _promise, resolve, reject } = promiseWithResolvers(); + const promise = _promise.catch( + (reason): ProvingResult => ({ + status: PROVING_STATUS.FAILURE, + reason, + }), + ); + + this.provingState = new EpochProvingState(epochNumber, totalNumBlocks, resolve, reject); + return { provingPromise: promise }; + } + /** * Starts off a new block * @param numTxs - The total number of transactions in the block. Must be a power of 2 @@ -149,6 +168,15 @@ export class ProvingOrchestrator implements BlockProver { globalVariables: GlobalVariables, l1ToL2Messages: Fr[], ): Promise { + // If no proving state, assume we only care about proving this block and initialize a 1-block epoch + if (!this.provingState) { + this.startNewEpoch(globalVariables.blockNumber.toNumber(), 1); + } + + if (!this.provingState?.isAcceptingBlocks()) { + throw new Error(`Epoch not accepting further blocks`); + } + if (!Number.isInteger(numTxs) || numTxs < 2) { throw new Error(`Length of txs for the block should be at least two (got ${numTxs})`); } @@ -163,11 +191,10 @@ export class ProvingOrchestrator implements BlockProver { ); } - // Cancel any currently proving block before starting a new one - this.cancelBlock(); logger.info( `Starting block ${globalVariables.blockNumber} for slot ${globalVariables.slotNumber} with ${numTxs} transactions`, ); + // we start the block by enqueueing all of the base parity circuits let baseParityInputs: BaseParityInputs[] = []; let l1ToL2MessagesPadded: Tuple; @@ -197,36 +224,39 @@ export class ProvingOrchestrator implements BlockProver { // Update the local trees to include the new l1 to l2 messages await this.db.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, l1ToL2MessagesPadded); + const messageTreeSnapshotAfterInsertion = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, this.db); + + // Get archive snapshot before this block lands + const startArchiveSnapshot = await getTreeSnapshot(MerkleTreeId.ARCHIVE, this.db); + const newArchiveSiblingPath = await getRootTreeSiblingPath(MerkleTreeId.ARCHIVE, this.db); + const previousBlockHash = await this.db.getLeafValue( + MerkleTreeId.ARCHIVE, + BigInt(startArchiveSnapshot.nextAvailableLeafIndex - 1), + ); const { promise: _promise, resolve, reject } = promiseWithResolvers(); - const promise = _promise.catch( - (reason): ProvingResult => ({ - status: PROVING_STATUS.FAILURE, - reason, - }), - ); + const promise = _promise.catch((reason): ProvingResult => ({ status: PROVING_STATUS.FAILURE, reason })); - const provingState = new ProvingState( + this.provingState!.startNewBlock( numTxs, - resolve, - reject, globalVariables, l1ToL2MessagesPadded, - baseParityInputs.length, messageTreeSnapshot, newL1ToL2MessageTreeRootSiblingPath, + messageTreeSnapshotAfterInsertion, + startArchiveSnapshot, + newArchiveSiblingPath, + previousBlockHash!, + resolve, + reject, ); + // Enqueue base parity circuits for the block for (let i = 0; i < baseParityInputs.length; i++) { - this.enqueueBaseParityCircuit(provingState, baseParityInputs[i], i); + this.enqueueBaseParityCircuit(this.provingState!.currentBlock!, baseParityInputs[i], i); } - this.provingState = provingState; - - const ticket: ProvingTicket = { - provingPromise: promise, - }; - return ticket; + return { provingPromise: promise }; } /** @@ -237,11 +267,12 @@ export class ProvingOrchestrator implements BlockProver { [Attributes.TX_HASH]: tx.hash.toString(), })) public async addNewTx(tx: ProcessedTx): Promise { - if (!this.provingState) { + const provingState = this?.provingState?.currentBlock; + if (!provingState) { throw new Error(`Invalid proving state, call startNewBlock before adding transactions`); } - if (!this.provingState.isAcceptingTransactions()) { + if (!provingState.isAcceptingTransactions()) { throw new Error(`Rollup not accepting further transactions`); } @@ -254,34 +285,43 @@ export class ProvingOrchestrator implements BlockProver { return; } - const [inputs, treeSnapshots] = await this.prepareTransaction(tx, this.provingState); - this.enqueueFirstProofs(inputs, treeSnapshots, tx, this.provingState); + const [inputs, treeSnapshots] = await this.prepareTransaction(tx, provingState); + this.enqueueFirstProofs(inputs, treeSnapshots, tx, provingState); + + if (provingState.transactionsReceived === provingState.totalNumTxs) { + logger.verbose( + `All transactions received for block ${provingState.globalVariables.blockNumber}. Assembling header.`, + ); + await this.buildBlockHeader(provingState); + } } /** * Marks the block as full and pads it if required, no more transactions will be accepted. + * Computes the block header and updates the archive tree. */ @trackSpan('ProvingOrchestrator.setBlockCompleted', function () { - if (!this.provingState) { + const block = this.provingState?.currentBlock; + if (!block) { return {}; } - return { - [Attributes.BLOCK_NUMBER]: this.provingState!.globalVariables.blockNumber.toNumber(), - [Attributes.BLOCK_SIZE]: this.provingState!.totalNumTxs, - [Attributes.BLOCK_TXS_COUNT]: this.provingState!.transactionsReceived, + [Attributes.BLOCK_NUMBER]: block.globalVariables.blockNumber.toNumber(), + [Attributes.BLOCK_SIZE]: block.totalNumTxs, + [Attributes.BLOCK_TXS_COUNT]: block.transactionsReceived, }; }) public async setBlockCompleted() { - if (!this.provingState) { + const provingState = this.provingState?.currentBlock; + if (!provingState) { throw new Error(`Invalid proving state, call startNewBlock before adding transactions or completing the block`); } // we may need to pad the rollup with empty transactions - const paddingTxCount = this.provingState.totalNumTxs - this.provingState.transactionsReceived; + const paddingTxCount = provingState.totalNumTxs - provingState.transactionsReceived; if (paddingTxCount === 0) { return; - } else if (this.provingState.totalNumTxs > 2) { + } else if (provingState.totalNumTxs > 2) { throw new Error(`Block not ready for completion: expecting ${paddingTxCount} more transactions.`); } @@ -295,13 +335,13 @@ export class ProvingOrchestrator implements BlockProver { // Then enqueue the proving of all the transactions const unprovenPaddingTx = makeEmptyProcessedTx( this.db.getInitialHeader(), - this.provingState.globalVariables.chainId, - this.provingState.globalVariables.version, + provingState.globalVariables.chainId, + provingState.globalVariables.version, getVKTreeRoot(), ); const txInputs: Array<{ inputs: BaseRollupInputs; snapshot: TreeSnapshots }> = []; for (let i = 0; i < paddingTxCount; i++) { - const [inputs, snapshot] = await this.prepareTransaction(unprovenPaddingTx, this.provingState); + const [inputs, snapshot] = await this.prepareTransaction(unprovenPaddingTx, provingState); const txInput = { inputs, snapshot, @@ -310,13 +350,53 @@ export class ProvingOrchestrator implements BlockProver { } // Now enqueue the proving - this.enqueuePaddingTxs(this.provingState, txInputs, unprovenPaddingTx); + this.enqueuePaddingTxs(provingState, txInputs, unprovenPaddingTx); + + // And build the block header + logger.verbose(`Block ${provingState.globalVariables.blockNumber} padded with empty tx(s). Assembling header.`); + await this.buildBlockHeader(provingState); + } + + private async buildBlockHeader(provingState: BlockProvingState) { + // Collect all new nullifiers, commitments, and contracts from all txs in this block to build body + const gasFees = provingState.globalVariables.gasFees; + const nonEmptyTxEffects: TxEffect[] = provingState!.allTxs + .map(txProvingState => toTxEffect(txProvingState.processedTx, gasFees)) + .filter(txEffect => !txEffect.isEmpty()); + const body = new Body(nonEmptyTxEffects); + + // Given we've applied every change from this block, now assemble the block header + // and update the archive tree, so we're ready to start processing the next block + const header = await buildHeaderFromTxEffects( + body, + provingState.globalVariables, + provingState.newL1ToL2Messages, + this.db, + ); + + logger.verbose(`Updating archive tree with block ${provingState.blockNumber} header ${header.hash().toString()}`); + await this.db.updateArchive(header); + + // Assemble the L2 block + const newArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, this.db); + const l2Block = L2Block.fromFields({ archive: newArchive, header, body }); + + if (!l2Block.body.getTxsEffectsHash().equals(header.contentCommitment.txsEffectsHash)) { + throw new Error( + `Txs effects hash mismatch, ${l2Block.body + .getTxsEffectsHash() + .toString('hex')} == ${header.contentCommitment.txsEffectsHash.toString('hex')} `, + ); + } + + logger.verbose(`Orchestrator finalised block ${l2Block.number}`); + provingState.block = l2Block; } // Enqueues the proving of the required padding transactions // If the fully proven padding transaction is not available, this will first be proven private enqueuePaddingTxs( - provingState: ProvingState, + provingState: BlockProvingState, txInputs: Array<{ inputs: BaseRollupInputs; snapshot: TreeSnapshots }>, unprovenPaddingTx: ProcessedTx, ) { @@ -334,7 +414,7 @@ export class ProvingOrchestrator implements BlockProver { 'ProvingOrchestrator.prover.getEmptyPrivateKernelProof', { [Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server', - [Attributes.PROTOCOL_CIRCUIT_NAME]: 'private-kernel-empty' as CircuitName, + [Attributes.PROTOCOL_CIRCUIT_NAME]: 'private-kernel-empty' satisfies CircuitName, }, signal => this.prover.getEmptyPrivateKernelProof( @@ -368,7 +448,7 @@ export class ProvingOrchestrator implements BlockProver { private provePaddingTransactions( txInputs: Array<{ inputs: BaseRollupInputs; snapshot: TreeSnapshots }>, paddingTx: PaddingProcessedTx, - provingState: ProvingState, + provingState: BlockProvingState, ) { // The padding tx contains the proof and vk, generated separately from the base inputs // Copy these into the base rollup inputs and enqueue the base rollup proof @@ -385,9 +465,9 @@ export class ProvingOrchestrator implements BlockProver { } /** - * Cancel any further proving of the block + * Cancel any further proving */ - public cancelBlock() { + public cancel() { for (const controller of this.pendingProvingJobs) { controller.abort(); } @@ -397,133 +477,83 @@ export class ProvingOrchestrator implements BlockProver { /** * Extract the block header from public inputs. - * TODO(#7346): Refactor this once new batch rollup circuits are integrated * @returns The header of this proving state's block. */ - private async extractBlockHeader() { - if ( - !this.provingState || - !this.provingState.blockRootRollupPublicInputs || - !this.provingState.finalRootParityInput?.publicInputs.shaRoot - ) { - throw new Error(`Invalid proving state, a block must be proven before its header can be extracted.`); - } - - const rootRollupOutputs = this.provingState.blockRootRollupPublicInputs; - const previousMergeData = this.provingState.getMergeInputs(0).inputs; + private extractBlockHeaderFromPublicInputs( + provingState: BlockProvingState, + rootRollupOutputs: BlockRootOrBlockMergePublicInputs, + ) { + const previousMergeData = provingState.getMergeInputs(0).inputs; if (!previousMergeData[0] || !previousMergeData[1]) { throw new Error(`Invalid proving state, final merge inputs before block root circuit missing.`); } - const contentCommitment = new ContentCommitment( - new Fr(previousMergeData[0].numTxs + previousMergeData[1].numTxs), - sha256Trunc( - Buffer.concat([previousMergeData[0].txsEffectsHash.toBuffer(), previousMergeData[1].txsEffectsHash.toBuffer()]), - ), - this.provingState.finalRootParityInput.publicInputs.shaRoot.toBuffer(), - sha256Trunc(Buffer.concat([previousMergeData[0].outHash.toBuffer(), previousMergeData[1].outHash.toBuffer()])), + return buildHeaderFromCircuitOutputs( + [previousMergeData[0], previousMergeData[1]], + provingState.finalRootParityInput!.publicInputs, + rootRollupOutputs, + provingState.messageTreeSnapshotAfterInsertion, + logger, ); - const state = new StateReference( - await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, this.db), - previousMergeData[1].end, - ); - const header = new Header( - rootRollupOutputs.previousArchive, - contentCommitment, - state, - previousMergeData[0].constants.globalVariables, - previousMergeData[0].accumulatedFees.add(previousMergeData[1].accumulatedFees), - ); - if (!header.hash().equals(rootRollupOutputs.endBlockHash)) { - throw new Error(`Block header mismatch in finalise.`); - } - return header; } /** - * Performs the final tree update for the block and returns the fully proven block. + * Returns the fully proven block. Requires proving to have been completed. + * @param index - The index of the block to finalise. Defaults to the last block. * @returns The fully proven block and proof. */ - @trackSpan('ProvingOrchestrator.finaliseBlock', function () { - return { - [Attributes.BLOCK_NUMBER]: this.provingState!.globalVariables.blockNumber.toNumber(), - [Attributes.BLOCK_TXS_COUNT]: this.provingState!.transactionsReceived, - [Attributes.BLOCK_SIZE]: this.provingState!.totalNumTxs, - }; - }) - public async finaliseBlock() { + public finaliseBlock(index?: number) { try { - if (!this.provingState || !this.provingState.blockRootRollupPublicInputs || !this.provingState.finalProof) { - throw new Error(`Invalid proving state, a block must be proven before it can be finalised`); - } - if (this.provingState.block) { - throw new Error('Block already finalised'); - } - - const rootRollupOutputs = this.provingState.blockRootRollupPublicInputs; - const header = await this.extractBlockHeader(); - - logger?.debug(`Updating and validating root trees`); - await this.db.updateArchive(header); - - await validateBlockRootOutput(rootRollupOutputs, header, this.db); - - // Collect all new nullifiers, commitments, and contracts from all txs in this block - const gasFees = this.provingState.globalVariables.gasFees; - const nonEmptyTxEffects: TxEffect[] = this.provingState!.allTxs.map(txProvingState => - toTxEffect(txProvingState.processedTx, gasFees), - ).filter(txEffect => !txEffect.isEmpty()); - const blockBody = new Body(nonEmptyTxEffects); - - const l2Block = L2Block.fromFields({ - archive: rootRollupOutputs.newArchive, - header: header, - body: blockBody, - }); + const block = this.provingState?.blocks[index ?? this.provingState?.blocks.length - 1]; - if (!l2Block.body.getTxsEffectsHash().equals(header.contentCommitment.txsEffectsHash)) { - logger.debug(inspect(blockBody)); - throw new Error( - `Txs effects hash mismatch, ${l2Block.body - .getTxsEffectsHash() - .toString('hex')} == ${header.contentCommitment.txsEffectsHash.toString('hex')} `, - ); + if (!block || !block.blockRootRollupPublicInputs || !block.finalProof || !block.block) { + throw new Error(`Invalid proving state, a block must be proven before it can be finalised`); } - logger.info(`Orchestrator finalised block ${l2Block.number}`); - - this.provingState.block = l2Block; - const blockResult: ProvingBlockResult = { - proof: this.provingState.finalProof, - aggregationObject: this.provingState.finalProof.extractAggregationObject(), - block: l2Block, + proof: block.finalProof, + aggregationObject: block.finalProof.extractAggregationObject(), + block: block.block!, }; pushTestData('blockResults', { proverId: this.proverId.toString(), vkTreeRoot: getVKTreeRoot().toString(), - block: l2Block.toString(), - proof: this.provingState.finalProof.toString(), + block: blockResult.block.toString(), + proof: blockResult.proof.toString(), aggregationObject: blockResult.aggregationObject.map(x => x.toString()), }); - return blockResult; + return Promise.resolve(blockResult); } catch (err) { throw new BlockProofError( err && typeof err === 'object' && 'message' in err ? String(err.message) : String(err), - this.provingState?.allTxs.map(x => Tx.getHash(x.processedTx)) ?? [], + this.provingState?.blocks[index ?? this.provingState?.blocks.length - 1]?.allTxs.map(x => + Tx.getHash(x.processedTx), + ) ?? [], ); } } + /** + * Returns the proof for the current epoch. + * Requires proving to have been completed. + */ + public finaliseEpoch() { + if (!this.provingState || !this.provingState.rootRollupPublicInputs || !this.provingState.finalProof) { + throw new Error(`Invalid proving state, an epoch must be proven before it can be finalised`); + } + + return { proof: this.provingState.finalProof, publicInputs: this.provingState.rootRollupPublicInputs }; + } + /** * Starts the proving process for the given transaction and adds it to our state * @param tx - The transaction whose proving we wish to commence * @param provingState - The proving state being worked on */ - private async prepareTransaction(tx: ProcessedTx, provingState: ProvingState) { + private async prepareTransaction(tx: ProcessedTx, provingState: BlockProvingState) { const txInputs = await this.prepareBaseRollupInputs(provingState, tx); if (!txInputs) { // This should not be possible @@ -536,7 +566,7 @@ export class ProvingOrchestrator implements BlockProver { inputs: BaseRollupInputs, treeSnapshots: TreeSnapshots, tx: ProcessedTx, - provingState: ProvingState, + provingState: BlockProvingState, ) { const txProvingState = new TxProvingState(tx, inputs, treeSnapshots); const txIndex = provingState.addNewTx(txProvingState); @@ -557,7 +587,7 @@ export class ProvingOrchestrator implements BlockProver { * @param job - The actual job, returns a promise notifying of the job's completion */ private deferredProving( - provingState: ProvingState | undefined, + provingState: EpochProvingState | BlockProvingState | undefined, request: (signal: AbortSignal) => Promise, callback: (result: T) => void | Promise, ) { @@ -617,7 +647,7 @@ export class ProvingOrchestrator implements BlockProver { [Attributes.TX_HASH]: tx.hash.toString(), })) private async prepareBaseRollupInputs( - provingState: ProvingState | undefined, + provingState: BlockProvingState | undefined, tx: ProcessedTx, ): Promise<[BaseRollupInputs, TreeSnapshots] | undefined> { if (!provingState?.verifyState()) { @@ -655,34 +685,9 @@ export class ProvingOrchestrator implements BlockProver { return [inputs, treeSnapshots]; } - // Stores the intermediate inputs prepared for a merge proof - private storeMergeInputs( - provingState: ProvingState, - currentLevel: bigint, - currentIndex: bigint, - mergeInputs: [ - BaseOrMergeRollupPublicInputs, - RecursiveProof, - VerificationKeyAsFields, - ], - ) { - const [mergeLevel, indexWithinMergeLevel, indexWithinMerge] = provingState.findMergeLevel( - currentLevel, - currentIndex, - ); - const mergeIndex = 2n ** mergeLevel - 1n + indexWithinMergeLevel; - const ready = provingState.storeMergeInputs(mergeInputs, Number(indexWithinMerge), Number(mergeIndex)); - return { - ready, - indexWithinMergeLevel, - mergeLevel, - mergeInputData: provingState.getMergeInputs(Number(mergeIndex)), - }; - } - // Executes the base rollup circuit and stored the output as intermediate state for the parent merge/root circuit // Executes the next level of merge if all inputs are available - private enqueueBaseRollup(provingState: ProvingState | undefined, index: bigint, tx: TxProvingState) { + private enqueueBaseRollup(provingState: BlockProvingState | undefined, index: bigint, tx: TxProvingState) { if (!provingState?.verifyState()) { logger.debug('Not running base rollup, state invalid'); return; @@ -743,7 +748,7 @@ export class ProvingOrchestrator implements BlockProver { { [Attributes.TX_HASH]: tx.processedTx.hash.toString(), [Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server', - [Attributes.PROTOCOL_CIRCUIT_NAME]: 'base-rollup' as CircuitName, + [Attributes.PROTOCOL_CIRCUIT_NAME]: 'base-rollup' satisfies CircuitName, }, signal => this.prover.getBaseRollupProof(tx.baseRollupInputs, signal, provingState.epochNumber), ), @@ -762,7 +767,7 @@ export class ProvingOrchestrator implements BlockProver { // Enqueues the tub circuit for a given transaction index // Once completed, will enqueue the next circuit, either a public kernel or the base rollup - private enqueueTube(provingState: ProvingState, txIndex: number) { + private enqueueTube(provingState: BlockProvingState, txIndex: number) { if (!provingState?.verifyState()) { logger.debug('Not running tube circuit, state invalid'); return; @@ -779,7 +784,7 @@ export class ProvingOrchestrator implements BlockProver { { [Attributes.TX_HASH]: txProvingState.processedTx.hash.toString(), [Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server', - [Attributes.PROTOCOL_CIRCUIT_NAME]: 'tube-circuit' as CircuitName, + [Attributes.PROTOCOL_CIRCUIT_NAME]: 'tube-circuit' satisfies CircuitName, }, signal => this.prover.getTubeProof( @@ -791,14 +796,7 @@ export class ProvingOrchestrator implements BlockProver { result => { logger.debug(`Completed tube proof for tx index: ${txIndex}`); const nextKernelRequest = txProvingState.getNextPublicKernelFromTubeProof(result.tubeProof, result.tubeVK); - this.checkAndEnqueueNextTxCircuit( - provingState, - txIndex, - -1, - result.tubeProof, - result.tubeVK, - nextKernelRequest, - ); + this.checkAndEnqueueNextTxCircuit(provingState, txIndex, result.tubeProof, result.tubeVK, nextKernelRequest); }, ); } @@ -806,7 +804,7 @@ export class ProvingOrchestrator implements BlockProver { // Executes the merge rollup circuit and stored the output as intermediate state for the parent merge/block root circuit // Enqueues the next level of merge if all inputs are available private enqueueMergeRollup( - provingState: ProvingState, + provingState: BlockProvingState, level: bigint, index: bigint, mergeInputData: MergeRollupInputData, @@ -823,7 +821,7 @@ export class ProvingOrchestrator implements BlockProver { 'ProvingOrchestrator.prover.getMergeRollupProof', { [Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server', - [Attributes.PROTOCOL_CIRCUIT_NAME]: 'merge-rollup' as CircuitName, + [Attributes.PROTOCOL_CIRCUIT_NAME]: 'merge-rollup' satisfies CircuitName, }, signal => this.prover.getMergeRollupProof(inputs, signal, provingState.epochNumber), ), @@ -838,29 +836,40 @@ export class ProvingOrchestrator implements BlockProver { } // Executes the block root rollup circuit - private async enqueueBlockRootRollup(provingState: ProvingState | undefined) { + private enqueueBlockRootRollup(provingState: BlockProvingState | undefined) { if (!provingState?.verifyState()) { - logger.debug('Not running root rollup, state no longer valid'); + logger.debug('Not running block root rollup, state no longer valid'); return; } const mergeInputData = provingState.getMergeInputs(0); const rootParityInput = provingState.finalRootParityInput!; - const inputs = await getBlockRootRollupInput( - mergeInputData.inputs[0]!, - mergeInputData.proofs[0]!, - mergeInputData.verificationKeys[0]!, - mergeInputData.inputs[1]!, - mergeInputData.proofs[1]!, - mergeInputData.verificationKeys[1]!, - rootParityInput, - provingState.newL1ToL2Messages, - provingState.messageTreeSnapshot, - provingState.messageTreeRootSiblingPath, - this.db, - this.proverId, + logger.debug( + `Enqueuing block root rollup for block ${provingState.blockNumber} with ${provingState.newL1ToL2Messages.length} l1 to l2 msgs`, + ); + + const previousRollupData: BlockRootRollupInputs['previousRollupData'] = makeTuple(2, i => + getPreviousRollupDataFromPublicInputs( + mergeInputData.inputs[i]!, + mergeInputData.proofs[i]!, + mergeInputData.verificationKeys[i]!, + ), ); + const inputs = BlockRootRollupInputs.from({ + previousRollupData, + l1ToL2Roots: rootParityInput, + newL1ToL2Messages: provingState.newL1ToL2Messages, + newL1ToL2MessageTreeRootSiblingPath: provingState.messageTreeRootSiblingPath, + startL1ToL2MessageTreeSnapshot: provingState.messageTreeSnapshot, + startArchiveSnapshot: provingState.archiveTreeSnapshot, + newArchiveSiblingPath: provingState.archiveTreeRootSiblingPath, + previousBlockHash: provingState.previousBlockHash, + proverId: this.proverId, + }); + + const shouldProveEpoch = this.provingState!.totalNumBlocks > 1; + this.deferredProving( provingState, wrapCallbackInSpan( @@ -868,25 +877,48 @@ export class ProvingOrchestrator implements BlockProver { 'ProvingOrchestrator.prover.getBlockRootRollupProof', { [Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server', - [Attributes.PROTOCOL_CIRCUIT_NAME]: 'block-root-rollup' as CircuitName, + [Attributes.PROTOCOL_CIRCUIT_NAME]: 'block-root-rollup' satisfies CircuitName, }, - signal => this.prover.getBlockRootRollupProof(inputs, signal, provingState.epochNumber), + signal => + shouldProveEpoch + ? this.prover.getBlockRootRollupProof(inputs, signal, provingState.epochNumber) + : this.prover.getBlockRootRollupFinalProof(inputs, signal, provingState.epochNumber), ), result => { + const header = this.extractBlockHeaderFromPublicInputs(provingState, result.inputs); + if (!header.hash().equals(provingState.block!.header.hash())) { + logger.error( + `Block header mismatch\nCircuit:${inspect(header)}\nComputed:${inspect(provingState.block!.header)}`, + ); + provingState.reject(`Block header hash mismatch`); + } + provingState.blockRootRollupPublicInputs = result.inputs; provingState.finalProof = result.proof.binaryProof; + provingState.resolve({ status: PROVING_STATUS.SUCCESS }); + + logger.debug(`Completed proof for block root rollup for ${provingState.block?.number}`); + // validatePartialState(result.inputs.end, tx.treeSnapshots); // TODO(palla/prover) - const provingResult: ProvingResult = { - status: PROVING_STATUS.SUCCESS, - }; - provingState.resolve(provingResult); + // TODO(palla/prover): Remove this once we've dropped the flow for proving single blocks + if (!shouldProveEpoch) { + logger.verbose(`Skipping epoch rollup, only one block in epoch`); + return; + } + + const currentLevel = this.provingState!.numMergeLevels + 1n; + this.storeAndExecuteNextBlockMergeLevel(this.provingState!, currentLevel, BigInt(provingState.index), [ + result.inputs, + result.proof, + result.verificationKey.keyAsFields, + ]); }, ); } // Executes the base parity circuit and stores the intermediate state for the root parity circuit // Enqueues the root parity circuit if all inputs are available - private enqueueBaseParityCircuit(provingState: ProvingState, inputs: BaseParityInputs, index: number) { + private enqueueBaseParityCircuit(provingState: BlockProvingState, inputs: BaseParityInputs, index: number) { this.deferredProving( provingState, wrapCallbackInSpan( @@ -894,7 +926,7 @@ export class ProvingOrchestrator implements BlockProver { 'ProvingOrchestrator.prover.getBaseParityProof', { [Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server', - [Attributes.PROTOCOL_CIRCUIT_NAME]: 'base-parity' as CircuitName, + [Attributes.PROTOCOL_CIRCUIT_NAME]: 'base-parity' satisfies CircuitName, }, signal => this.prover.getBaseParityProof(inputs, signal, provingState.epochNumber), ), @@ -915,7 +947,7 @@ export class ProvingOrchestrator implements BlockProver { // Runs the root parity circuit ans stored the outputs // Enqueues the root rollup proof if all inputs are available - private enqueueRootParityCircuit(provingState: ProvingState, inputs: RootParityInputs) { + private enqueueRootParityCircuit(provingState: BlockProvingState, inputs: RootParityInputs) { this.deferredProving( provingState, wrapCallbackInSpan( @@ -923,23 +955,104 @@ export class ProvingOrchestrator implements BlockProver { 'ProvingOrchestrator.prover.getRootParityProof', { [Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server', - [Attributes.PROTOCOL_CIRCUIT_NAME]: 'root-parity' as CircuitName, + [Attributes.PROTOCOL_CIRCUIT_NAME]: 'root-parity' satisfies CircuitName, }, signal => this.prover.getRootParityProof(inputs, signal, provingState.epochNumber), ), - async rootInput => { + rootInput => { provingState!.finalRootParityInput = rootInput; - await this.checkAndEnqueueBlockRootRollup(provingState); + this.checkAndEnqueueBlockRootRollup(provingState); + }, + ); + } + + // Executes the block merge rollup circuit and stored the output as intermediate state for the parent merge/block root circuit + // Enqueues the next level of merge if all inputs are available + private enqueueBlockMergeRollup( + provingState: EpochProvingState, + level: bigint, + index: bigint, + mergeInputData: BlockMergeRollupInputData, + ) { + const inputs = createBlockMergeRollupInputs( + [mergeInputData.inputs[0]!, mergeInputData.proofs[0]!, mergeInputData.verificationKeys[0]!], + [mergeInputData.inputs[1]!, mergeInputData.proofs[1]!, mergeInputData.verificationKeys[1]!], + ); + + this.deferredProving( + provingState, + wrapCallbackInSpan( + this.tracer, + 'ProvingOrchestrator.prover.getBlockMergeRollupProof', + { + [Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server', + [Attributes.PROTOCOL_CIRCUIT_NAME]: 'block-merge-rollup' satisfies CircuitName, + }, + signal => this.prover.getBlockMergeRollupProof(inputs, signal, provingState.epochNumber), + ), + result => { + this.storeAndExecuteNextBlockMergeLevel(provingState, level, index, [ + result.inputs, + result.proof, + result.verificationKey.keyAsFields, + ]); + }, + ); + } + + // Executes the root rollup circuit + private enqueueRootRollup(provingState: EpochProvingState | undefined) { + if (!provingState?.verifyState()) { + logger.debug('Not running root rollup, state no longer valid'); + return; + } + + logger.debug(`Preparing root rollup`); + const mergeInputData = provingState.getMergeInputs(0); + + const inputs = getRootRollupInput( + mergeInputData.inputs[0]!, + mergeInputData.proofs[0]!, + mergeInputData.verificationKeys[0]!, + mergeInputData.inputs[1]!, + mergeInputData.proofs[1]!, + mergeInputData.verificationKeys[1]!, + this.proverId, + ); + + this.deferredProving( + provingState, + wrapCallbackInSpan( + this.tracer, + 'ProvingOrchestrator.prover.getRootRollupProof', + { + [Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server', + [Attributes.PROTOCOL_CIRCUIT_NAME]: 'root-rollup' satisfies CircuitName, + }, + signal => this.prover.getRootRollupProof(inputs, signal, provingState.epochNumber), + ), + result => { + provingState.rootRollupPublicInputs = result.inputs; + provingState.finalProof = result.proof.binaryProof; + provingState.resolve({ status: PROVING_STATUS.SUCCESS }); }, ); } - private async checkAndEnqueueBlockRootRollup(provingState: ProvingState | undefined) { + private checkAndEnqueueBlockRootRollup(provingState: BlockProvingState | undefined) { if (!provingState?.isReadyForBlockRootRollup()) { logger.debug('Not ready for root rollup'); return; } - await this.enqueueBlockRootRollup(provingState); + this.enqueueBlockRootRollup(provingState); + } + + private checkAndEnqueueRootRollup(provingState: EpochProvingState | undefined) { + if (!provingState?.isReadyForRootRollup()) { + logger.debug('Not ready for root rollup'); + return; + } + this.enqueueRootRollup(provingState); } /** @@ -950,7 +1063,7 @@ export class ProvingOrchestrator implements BlockProver { * @param mergeInputData - The inputs to be stored */ private storeAndExecuteNextMergeLevel( - provingState: ProvingState, + provingState: BlockProvingState, currentLevel: bigint, currentIndex: bigint, mergeInputData: [ @@ -959,19 +1072,68 @@ export class ProvingOrchestrator implements BlockProver { VerificationKeyAsFields, ], ) { - const result = this.storeMergeInputs(provingState, currentLevel, currentIndex, mergeInputData); + const [mergeLevel, indexWithinMergeLevel, indexWithinMerge] = provingState.findMergeLevel( + currentLevel, + currentIndex, + ); + const mergeIndex = 2n ** mergeLevel - 1n + indexWithinMergeLevel; + const ready = provingState.storeMergeInputs(mergeInputData, Number(indexWithinMerge), Number(mergeIndex)); + const nextMergeInputData = provingState.getMergeInputs(Number(mergeIndex)); + + // Are we ready to execute the next circuit? + if (!ready) { + return; + } + + if (mergeLevel === 0n) { + this.checkAndEnqueueBlockRootRollup(provingState); + } else { + // onto the next merge level + this.enqueueMergeRollup(provingState, mergeLevel, indexWithinMergeLevel, nextMergeInputData); + } + } + + /** + * Stores the inputs to a block merge/root circuit and enqueues the circuit if ready + * @param provingState - The proving state being operated on + * @param currentLevel - The level of the merge/root circuit + * @param currentIndex - The index of the merge/root circuit + * @param mergeInputData - The inputs to be stored + */ + private storeAndExecuteNextBlockMergeLevel( + provingState: EpochProvingState, + currentLevel: bigint, + currentIndex: bigint, + mergeInputData: [ + BlockRootOrBlockMergePublicInputs, + RecursiveProof, + VerificationKeyAsFields, + ], + ) { + const [mergeLevel, indexWithinMergeLevel, indexWithinMerge] = provingState.findMergeLevel( + currentLevel, + currentIndex, + ); + logger.debug(`Computed merge for ${currentLevel}.${currentIndex} as ${mergeLevel}.${indexWithinMergeLevel}`); + if (mergeLevel < 0n) { + throw new Error(`Invalid merge level ${mergeLevel}`); + } + + const mergeIndex = 2n ** mergeLevel - 1n + indexWithinMergeLevel; + const ready = provingState.storeMergeInputs(mergeInputData, Number(indexWithinMerge), Number(mergeIndex)); + const nextMergeInputData = provingState.getMergeInputs(Number(mergeIndex)); // Are we ready to execute the next circuit? - if (!result.ready) { + if (!ready) { + logger.debug(`Not ready to execute next block merge for level ${mergeLevel} index ${indexWithinMergeLevel}`); return; } - if (result.mergeLevel === 0n) { - // TODO (alexg) remove this `void` - void this.checkAndEnqueueBlockRootRollup(provingState); + if (mergeLevel === 0n) { + this.checkAndEnqueueRootRollup(provingState); } else { // onto the next merge level - this.enqueueMergeRollup(provingState, result.mergeLevel, result.indexWithinMergeLevel, result.mergeInputData); + this.enqueueBlockMergeRollup(provingState, mergeLevel, indexWithinMergeLevel, nextMergeInputData); } } @@ -982,7 +1144,7 @@ export class ProvingOrchestrator implements BlockProver { * @param txIndex - The index of the transaction being proven * @param functionIndex - The index of the function/kernel being proven */ - private enqueueVM(provingState: ProvingState | undefined, txIndex: number, functionIndex: number) { + private enqueueVM(provingState: BlockProvingState | undefined, txIndex: number, functionIndex: number) { if (!provingState?.verifyState()) { logger.debug(`Not running VM circuit as state is no longer valid`); return; @@ -1028,13 +1190,11 @@ export class ProvingOrchestrator implements BlockProver { logger.debug(`Proven VM for function index ${functionIndex} of tx index ${txIndex}`); this.checkAndEnqueuePublicKernelFromVMProof(provingState, txIndex, functionIndex, proofAndVk.proof); }); - } else { - this.checkAndEnqueuePublicKernelFromVMProof(provingState, txIndex, functionIndex, /*vmProof=*/ makeEmptyProof()); } } private checkAndEnqueuePublicKernelFromVMProof( - provingState: ProvingState, + provingState: BlockProvingState, txIndex: number, functionIndex: number, vmProof: Proof, @@ -1055,9 +1215,8 @@ export class ProvingOrchestrator implements BlockProver { // This could be either a public kernel or the base rollup // Alternatively, if we are still waiting on a public VM prof then it will continue waiting private checkAndEnqueueNextTxCircuit( - provingState: ProvingState, + provingState: BlockProvingState, txIndex: number, - completedFunctionIndex: number, proof: RecursiveProof | RecursiveProof, verificationKey: VerificationKeyData, nextKernelRequest: TxProvingInstruction, @@ -1089,7 +1248,7 @@ export class ProvingOrchestrator implements BlockProver { throw new Error(`Error occurred, public function request undefined after kernel proof completed`); } - this.enqueuePublicKernel(provingState, txIndex, completedFunctionIndex + 1); + this.enqueuePublicKernel(provingState, txIndex, nextKernelRequest.functionIndex!); } /** @@ -1099,7 +1258,7 @@ export class ProvingOrchestrator implements BlockProver { * @param txIndex - The index of the transaction being proven * @param functionIndex - The index of the function/kernel being proven */ - private enqueuePublicKernel(provingState: ProvingState | undefined, txIndex: number, functionIndex: number) { + private enqueuePublicKernel(provingState: BlockProvingState | undefined, txIndex: number, functionIndex: number) { if (!provingState?.verifyState()) { logger.debug(`Not running public kernel circuit as state is no longer valid`); return; @@ -1112,20 +1271,28 @@ export class ProvingOrchestrator implements BlockProver { provingState, wrapCallbackInSpan( this.tracer, - request.type === PublicKernelType.TAIL + request.type === ProvingRequestType.PUBLIC_KERNEL_TAIL ? 'ProvingOrchestrator.prover.getPublicTailProof' - : 'ProvingOrchestrator.prover.getPublicKernelProof', + : request.type === ProvingRequestType.PUBLIC_KERNEL_MERGE + ? 'ProvingOrchestrator.prover.getPublicKernelMergeProof' + : 'ProvingOrchestrator.prover.getPublicKernelInnerProof', { [Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server', - [Attributes.PROTOCOL_CIRCUIT_NAME]: mapPublicKernelToCircuitName(request.type), + [Attributes.PROTOCOL_CIRCUIT_NAME]: mapProvingRequestTypeToCircuitName(request.type), }, ( signal, - ): Promise> => { - if (request.type === PublicKernelType.TAIL) { - return this.prover.getPublicTailProof(request, signal, provingState.epochNumber); + ): Promise< + PublicInputsAndRecursiveProof< + KernelCircuitPublicInputs | PublicKernelCircuitPublicInputs | VMCircuitPublicInputs + > + > => { + if (request.type === ProvingRequestType.PUBLIC_KERNEL_TAIL) { + return this.prover.getPublicTailProof(request.inputs, signal, provingState.epochNumber); + } else if (request.type === ProvingRequestType.PUBLIC_KERNEL_MERGE) { + return this.prover.getPublicKernelMergeProof(request.inputs, signal, provingState.epochNumber); } else { - return this.prover.getPublicKernelProof(request, signal, provingState.epochNumber); + return this.prover.getPublicKernelInnerProof(request.inputs, signal, provingState.epochNumber); } }, ), @@ -1138,7 +1305,6 @@ export class ProvingOrchestrator implements BlockProver { this.checkAndEnqueueNextTxCircuit( provingState, txIndex, - functionIndex, result.proof, result.verificationKey, nextKernelRequest, diff --git a/yarn-project/prover-client/src/orchestrator/orchestrator_errors.test.ts b/yarn-project/prover-client/src/orchestrator/orchestrator_errors.test.ts index 768304c77a0..01bdd400643 100644 --- a/yarn-project/prover-client/src/orchestrator/orchestrator_errors.test.ts +++ b/yarn-project/prover-client/src/orchestrator/orchestrator_errors.test.ts @@ -46,6 +46,16 @@ describe('prover/orchestrator/errors', () => { expect(finalisedBlock.block.number).toEqual(context.blockNumber); }); + it('throws if adding too many blocks', async () => { + context.orchestrator.startNewEpoch(1, 1); + await context.orchestrator.startNewBlock(2, context.globalVariables, []); + await context.orchestrator.setBlockCompleted(); + + await expect( + async () => await context.orchestrator.startNewBlock(2, context.globalVariables, []), + ).rejects.toThrow('Epoch not accepting further blocks'); + }); + it('throws if adding a transaction before start', async () => { await expect( async () => await context.orchestrator.addNewTx(makeEmptyProcessedTestTx(context.actualDb)), @@ -71,27 +81,10 @@ describe('prover/orchestrator/errors', () => { ); }); - it('throws if finalising an already finalised block', async () => { - const txs = await Promise.all([ - makeEmptyProcessedTestTx(context.actualDb), - makeEmptyProcessedTestTx(context.actualDb), - ]); - - const blockTicket = await context.orchestrator.startNewBlock(txs.length, context.globalVariables, []); - - await context.orchestrator.setBlockCompleted(); - - const result = await blockTicket.provingPromise; - expect(result.status).toBe(PROVING_STATUS.SUCCESS); - const finalisedBlock = await context.orchestrator.finaliseBlock(); - expect(finalisedBlock.block.number).toEqual(context.blockNumber); - await expect(async () => await context.orchestrator.finaliseBlock()).rejects.toThrow('Block already finalised'); - }); - it('throws if adding to a cancelled block', async () => { await context.orchestrator.startNewBlock(2, context.globalVariables, []); - context.orchestrator.cancelBlock(); + context.orchestrator.cancel(); await expect( async () => await context.orchestrator.addNewTx(makeEmptyProcessedTestTx(context.actualDb)), diff --git a/yarn-project/prover-client/src/orchestrator/orchestrator_failures.test.ts b/yarn-project/prover-client/src/orchestrator/orchestrator_failures.test.ts index d4ab78cb91c..a3bd36fe359 100644 --- a/yarn-project/prover-client/src/orchestrator/orchestrator_failures.test.ts +++ b/yarn-project/prover-client/src/orchestrator/orchestrator_failures.test.ts @@ -1,4 +1,6 @@ import { PROVING_STATUS, type ServerCircuitProver } from '@aztec/circuit-types'; +import { Fr } from '@aztec/circuits.js'; +import { times } from '@aztec/foundation/collection'; import { createDebugLogger } from '@aztec/foundation/log'; import { WASMSimulator } from '@aztec/simulator'; import { NoopTelemetryClient } from '@aztec/telemetry-client/noop'; @@ -6,7 +8,7 @@ import { NoopTelemetryClient } from '@aztec/telemetry-client/noop'; import { jest } from '@jest/globals'; import { TestCircuitProver } from '../../../bb-prover/src/test/test_circuit_prover.js'; -import { makeBloatedProcessedTx } from '../mocks/fixtures.js'; +import { makeBloatedProcessedTx, makeGlobals } from '../mocks/fixtures.js'; import { TestContext } from '../mocks/test_context.js'; import { ProvingOrchestrator } from './orchestrator.js'; @@ -51,19 +53,18 @@ describe('prover/orchestrator/failures', () => { jest.spyOn(mockProver, 'getBlockRootRollupProof').mockRejectedValue('Block Root Rollup Failed'); }, ], - // TODO(#7346): Integrate batch rollup circuits into orchestrator and test here - // [ - // 'Block Merge Rollup Failed', - // () => { - // jest.spyOn(mockProver, 'getBlockMergeRollupProof').mockRejectedValue('Block Merge Rollup Failed'); - // }, - // ], - // [ - // 'Root Rollup Failed', - // () => { - // jest.spyOn(mockProver, 'getRootRollupProof').mockRejectedValue('Root Rollup Failed'); - // }, - // ], + [ + 'Block Merge Rollup Failed', + () => { + jest.spyOn(mockProver, 'getBlockMergeRollupProof').mockRejectedValue('Block Merge Rollup Failed'); + }, + ], + [ + 'Root Rollup Failed', + () => { + jest.spyOn(mockProver, 'getRootRollupProof').mockRejectedValue('Root Rollup Failed'); + }, + ], [ 'Base Parity Failed', () => { @@ -78,18 +79,20 @@ describe('prover/orchestrator/failures', () => { ], ] as const)('handles a %s error', async (message: string, fn: () => void) => { fn(); - const txs = [ - makeBloatedProcessedTx(context.actualDb, 1), - makeBloatedProcessedTx(context.actualDb, 2), - makeBloatedProcessedTx(context.actualDb, 3), - ]; - const blockTicket = await orchestrator.startNewBlock(txs.length, context.globalVariables, []); + const epochTicket = orchestrator.startNewEpoch(1, 3); - for (const tx of txs) { - await orchestrator.addNewTx(tx); + // We need at least 3 blocks and 3 txs to ensure all circuits are used + for (let i = 0; i < 3; i++) { + const txs = times(3, j => makeBloatedProcessedTx(context.actualDb, i * 10 + j + 1)); + const msgs = [new Fr(i + 100)]; + await orchestrator.startNewBlock(txs.length, makeGlobals(i + 1), msgs); + for (const tx of txs) { + await orchestrator.addNewTx(tx); + } } - await expect(blockTicket.provingPromise).resolves.toEqual({ status: PROVING_STATUS.FAILURE, reason: message }); + + await expect(epochTicket.provingPromise).resolves.toEqual({ status: PROVING_STATUS.FAILURE, reason: message }); }); }); }); diff --git a/yarn-project/prover-client/src/orchestrator/orchestrator_lifecycle.test.ts b/yarn-project/prover-client/src/orchestrator/orchestrator_lifecycle.test.ts index 4e669651a27..3570e0af591 100644 --- a/yarn-project/prover-client/src/orchestrator/orchestrator_lifecycle.test.ts +++ b/yarn-project/prover-client/src/orchestrator/orchestrator_lifecycle.test.ts @@ -1,11 +1,6 @@ -import { PROVING_STATUS, type ProvingFailure, type ServerCircuitProver } from '@aztec/circuit-types'; -import { - type GlobalVariables, - NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, - NUM_BASE_PARITY_PER_ROOT_PARITY, -} from '@aztec/circuits.js'; -import { fr, makeGlobalVariables } from '@aztec/circuits.js/testing'; -import { range } from '@aztec/foundation/array'; +import { type ServerCircuitProver } from '@aztec/circuit-types'; +import { NUM_BASE_PARITY_PER_ROOT_PARITY } from '@aztec/circuits.js'; +import { makeGlobalVariables } from '@aztec/circuits.js/testing'; import { createDebugLogger } from '@aztec/foundation/log'; import { type PromiseWithResolvers, promiseWithResolvers } from '@aztec/foundation/promise'; import { sleep } from '@aztec/foundation/sleep'; @@ -14,7 +9,6 @@ import { NoopTelemetryClient } from '@aztec/telemetry-client/noop'; import { jest } from '@jest/globals'; import { TestCircuitProver } from '../../../bb-prover/src/test/test_circuit_prover.js'; -import { makeBloatedProcessedTx, makeGlobals } from '../mocks/fixtures.js'; import { TestContext } from '../mocks/test_context.js'; import { ProvingOrchestrator } from './orchestrator.js'; @@ -32,77 +26,6 @@ describe('prover/orchestrator/lifecycle', () => { }); describe('lifecycle', () => { - it('cancels current block and switches to new ones', async () => { - const txs1 = [makeBloatedProcessedTx(context.actualDb, 1), makeBloatedProcessedTx(context.actualDb, 2)]; - - const txs2 = [makeBloatedProcessedTx(context.actualDb, 3), makeBloatedProcessedTx(context.actualDb, 4)]; - - const globals1: GlobalVariables = makeGlobals(100); - const globals2: GlobalVariables = makeGlobals(101); - - const l1ToL2Messages = range(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, 1 + 0x400).map(fr); - - const blockTicket1 = await context.orchestrator.startNewBlock(2, globals1, l1ToL2Messages); - - await context.orchestrator.addNewTx(txs1[0]); - await context.orchestrator.addNewTx(txs1[1]); - - // Now we cancel the block. The first block will come to a stop as and when current proofs complete - context.orchestrator.cancelBlock(); - - const result1 = await blockTicket1.provingPromise; - - // in all likelihood, the block will have a failure code as we cancelled it - // however it may have actually completed proving before we cancelled in which case it could be a success code - if (result1.status === PROVING_STATUS.FAILURE) { - expect((result1 as ProvingFailure).reason).toBe('Proving cancelled'); - } - - await context.actualDb.rollback(); - - const blockTicket2 = await context.orchestrator.startNewBlock(2, globals2, l1ToL2Messages); - - await context.orchestrator.addNewTx(txs2[0]); - await context.orchestrator.addNewTx(txs2[1]); - - const result2 = await blockTicket2.provingPromise; - expect(result2.status).toBe(PROVING_STATUS.SUCCESS); - const finalisedBlock = await context.orchestrator.finaliseBlock(); - - expect(finalisedBlock.block.number).toEqual(101); - }); - - it('automatically cancels an incomplete block when starting a new one', async () => { - const txs1 = [makeBloatedProcessedTx(context.actualDb, 1), makeBloatedProcessedTx(context.actualDb, 2)]; - const txs2 = [makeBloatedProcessedTx(context.actualDb, 3), makeBloatedProcessedTx(context.actualDb, 4)]; - - const globals1: GlobalVariables = makeGlobals(100); - const globals2: GlobalVariables = makeGlobals(101); - - const l1ToL2Messages = range(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, 1 + 0x400).map(fr); - - const blockTicket1 = await context.orchestrator.startNewBlock(2, globals1, l1ToL2Messages); - - await context.orchestrator.addNewTx(txs1[0]); - - await context.actualDb.rollback(); - - const blockTicket2 = await context.orchestrator.startNewBlock(2, globals2, l1ToL2Messages); - - await context.orchestrator.addNewTx(txs2[0]); - await context.orchestrator.addNewTx(txs2[1]); - - const result1 = await blockTicket1.provingPromise; - expect(result1.status).toBe(PROVING_STATUS.FAILURE); - expect((result1 as ProvingFailure).reason).toBe('Proving cancelled'); - - const result2 = await blockTicket2.provingPromise; - expect(result2.status).toBe(PROVING_STATUS.SUCCESS); - const finalisedBlock = await context.orchestrator.finaliseBlock(); - - expect(finalisedBlock.block.number).toEqual(101); - }, 60000); - it('cancels proving requests', async () => { const prover: ServerCircuitProver = new TestCircuitProver(new NoopTelemetryClient()); const orchestrator = new ProvingOrchestrator(context.actualDb, prover, new NoopTelemetryClient()); @@ -121,7 +44,7 @@ describe('prover/orchestrator/lifecycle', () => { expect(spy).toHaveBeenCalledTimes(NUM_BASE_PARITY_PER_ROOT_PARITY); expect(spy.mock.calls.every(([_, signal]) => !signal?.aborted)).toBeTruthy(); - orchestrator.cancelBlock(); + orchestrator.cancel(); expect(spy.mock.calls.every(([_, signal]) => signal?.aborted)).toBeTruthy(); }); }); diff --git a/yarn-project/prover-client/src/orchestrator/orchestrator_multiple_blocks.test.ts b/yarn-project/prover-client/src/orchestrator/orchestrator_multiple_blocks.test.ts index 814461cd36c..7795c423e77 100644 --- a/yarn-project/prover-client/src/orchestrator/orchestrator_multiple_blocks.test.ts +++ b/yarn-project/prover-client/src/orchestrator/orchestrator_multiple_blocks.test.ts @@ -19,17 +19,17 @@ describe('prover/orchestrator/multi-block', () => { }); describe('multiple blocks', () => { - it('builds multiple blocks in sequence', async () => { - const numBlocks = 5; + it.each([4, 5])('builds an epoch with %s blocks in sequence', async (numBlocks: number) => { + const provingTicket = context.orchestrator.startNewEpoch(1, numBlocks); let header = context.actualDb.getInitialHeader(); for (let i = 0; i < numBlocks; i++) { + logger.info(`Creating block ${i + 1000}`); const tx = makeBloatedProcessedTx(context.actualDb, i + 1); tx.data.constants.historicalHeader = header; tx.data.constants.vkTreeRoot = getVKTreeRoot(); const blockNum = i + 1000; - const globals = makeGlobals(blockNum); // This will need to be a 2 tx block @@ -46,9 +46,15 @@ describe('prover/orchestrator/multi-block', () => { expect(finalisedBlock.block.number).toEqual(blockNum); header = finalisedBlock.block.header; - - await context.actualDb.commit(); } + + logger.info('Awaiting epoch ticket'); + const result = await provingTicket.provingPromise; + expect(result).toEqual({ status: PROVING_STATUS.SUCCESS }); + + const epoch = context.orchestrator.finaliseEpoch(); + expect(epoch.publicInputs.endBlockNumber.toNumber()).toEqual(1000 + numBlocks - 1); + expect(epoch.proof).toBeDefined(); }); }); }); diff --git a/yarn-project/prover-client/src/orchestrator/orchestrator_public_functions.test.ts b/yarn-project/prover-client/src/orchestrator/orchestrator_public_functions.test.ts index 0d31974f936..505b2b94b57 100644 --- a/yarn-project/prover-client/src/orchestrator/orchestrator_public_functions.test.ts +++ b/yarn-project/prover-client/src/orchestrator/orchestrator_public_functions.test.ts @@ -1,6 +1,9 @@ -import { PROVING_STATUS, mockTx } from '@aztec/circuit-types'; +import { PROVING_STATUS, PublicExecutionRequest, mockTx } from '@aztec/circuit-types'; +import { AztecAddress } from '@aztec/circuits.js'; +import { makeCallContext } from '@aztec/circuits.js/testing'; import { createDebugLogger } from '@aztec/foundation/log'; import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types'; +import { type PublicExecutionResult, PublicExecutionResultBuilder } from '@aztec/simulator'; import { TestContext } from '../mocks/test_context.js'; @@ -56,5 +59,96 @@ describe('prover/orchestrator/public-functions', () => { expect(finalisedBlock.block.number).toEqual(context.blockNumber); }, ); + + it('nested public calls', async () => { + const tx = mockTx(1234, { + numberOfNonRevertiblePublicCallRequests: 1, + numberOfRevertiblePublicCallRequests: 1, + hasPublicTeardownCallRequest: true, + }); + tx.data.constants.historicalHeader = context.actualDb.getInitialHeader(); + tx.data.constants.vkTreeRoot = getVKTreeRoot(); + + const nonRevertibleRequests = tx.getNonRevertiblePublicExecutionRequests(); + const revertibleRequests = tx.getRevertiblePublicExecutionRequests(); + const teardownRequest = tx.getPublicTeardownExecutionRequest()!; + const mockNestedRequest = () => new PublicExecutionRequest(AztecAddress.random(), makeCallContext(1), []); + + const simulatorResults: PublicExecutionResult[] = [ + // Setup + PublicExecutionResultBuilder.fromPublicExecutionRequest({ + request: nonRevertibleRequests[0], + nestedExecutions: [ + PublicExecutionResultBuilder.fromPublicExecutionRequest({ + request: mockNestedRequest(), + }).build(), + ], + }).build(), + + // App Logic + PublicExecutionResultBuilder.fromPublicExecutionRequest({ + request: revertibleRequests[0], + nestedExecutions: [ + PublicExecutionResultBuilder.fromPublicExecutionRequest({ + request: mockNestedRequest(), + }).build(), + PublicExecutionResultBuilder.fromPublicExecutionRequest({ + request: mockNestedRequest(), + nestedExecutions: [ + PublicExecutionResultBuilder.fromPublicExecutionRequest({ + request: mockNestedRequest(), + }).build(), + ], + }).build(), + ], + }).build(), + + // Teardown + PublicExecutionResultBuilder.fromPublicExecutionRequest({ + request: teardownRequest, + nestedExecutions: [ + PublicExecutionResultBuilder.fromPublicExecutionRequest({ + request: mockNestedRequest(), + }).build(), + PublicExecutionResultBuilder.fromPublicExecutionRequest({ + request: mockNestedRequest(), + }).build(), + ], + }).build(), + ]; + + let simulatorCallCount = 0; + const mockExecutorImplementation = (execution: PublicExecutionRequest) => { + if (simulatorCallCount < simulatorResults.length) { + return Promise.resolve(simulatorResults[simulatorCallCount++]); + } else { + throw new Error(`Unexpected execution request: ${execution}, call count: ${simulatorCallCount}`); + } + }; + + const [processed, _] = await context.processPublicFunctionsWithMockExecutorImplementation( + [tx], + 1, + undefined, + undefined, + mockExecutorImplementation, + ); + + // This will need to be a 2 tx block + const blockTicket = await context.orchestrator.startNewBlock(2, context.globalVariables, []); + + for (const processedTx of processed) { + await context.orchestrator.addNewTx(processedTx); + } + + // we need to complete the block as we have not added a full set of txs + await context.orchestrator.setBlockCompleted(); + + const result = await blockTicket.provingPromise; + expect(result.status).toBe(PROVING_STATUS.SUCCESS); + const finalisedBlock = await context.orchestrator.finaliseBlock(); + + expect(finalisedBlock.block.number).toEqual(context.blockNumber); + }); }); }); diff --git a/yarn-project/prover-client/src/orchestrator/orchestrator_workflow.test.ts b/yarn-project/prover-client/src/orchestrator/orchestrator_workflow.test.ts index b49f7cddb13..9d03a31a25e 100644 --- a/yarn-project/prover-client/src/orchestrator/orchestrator_workflow.test.ts +++ b/yarn-project/prover-client/src/orchestrator/orchestrator_workflow.test.ts @@ -64,7 +64,7 @@ describe('prover/orchestrator', () => { await sleep(10); expect(mockProver.getRootParityProof).toHaveBeenCalledTimes(1); - orchestrator.cancelBlock(); + orchestrator.cancel(); }); }); }); diff --git a/yarn-project/prover-client/src/orchestrator/tx-proving-state.ts b/yarn-project/prover-client/src/orchestrator/tx-proving-state.ts index 4f256b8fb7b..57d67bfa9fb 100644 --- a/yarn-project/prover-client/src/orchestrator/tx-proving-state.ts +++ b/yarn-project/prover-client/src/orchestrator/tx-proving-state.ts @@ -3,8 +3,8 @@ import { type AvmProvingRequest, type MerkleTreeId, type ProcessedTx, + ProvingRequestType, type PublicKernelRequest, - PublicKernelType, } from '@aztec/circuit-types'; import { type AppendOnlyTreeSnapshot, @@ -14,6 +14,7 @@ import { type RECURSIVE_PROOF_LENGTH, type RecursiveProof, type VerificationKeyData, + makeEmptyProof, } from '@aztec/circuits.js'; export enum TX_PROVING_CODE { @@ -25,7 +26,7 @@ export enum TX_PROVING_CODE { export type PublicFunction = { vmRequest: AvmProvingRequest | undefined; vmProof: Proof | undefined; - previousProofType: PublicKernelType; + previousProofType: ProvingRequestType; previousKernelProven: boolean; publicKernelRequest: PublicKernelRequest; }; @@ -35,6 +36,7 @@ export type PublicFunction = { export type TxProvingInstruction = { code: TX_PROVING_CODE; function: PublicFunction | undefined; + functionIndex?: number; }; /** @@ -50,20 +52,38 @@ export class TxProvingState { public readonly baseRollupInputs: BaseRollupInputs, public readonly treeSnapshots: Map, ) { - let previousProofType = PublicKernelType.NON_PUBLIC; + let previousProofType = ProvingRequestType.TUBE_PROOF; for (let i = 0; i < processedTx.publicProvingRequests.length; i++) { const provingRequest = processedTx.publicProvingRequests[i]; - const kernelRequest = provingRequest.type === AVM_REQUEST ? provingRequest.kernelRequest : provingRequest; + const publicKernelRequest = provingRequest.type === AVM_REQUEST ? provingRequest.kernelRequest : provingRequest; const vmRequest = provingRequest.type === AVM_REQUEST ? provingRequest : undefined; + // TODO(#7124): Remove this temporary hack. + // There's no previous kernel for the first inner kernel in a chain of AvmProvingRequests. + // Setting its previousKernelProven to be true so that it will be ready once the vm proof is generated. + const previousKernelProven = !!vmRequest && previousProofType !== ProvingRequestType.PUBLIC_KERNEL_INNER; + const vmProof = provingRequest.type === ProvingRequestType.PUBLIC_KERNEL_TAIL ? makeEmptyProof() : undefined; const publicFunction: PublicFunction = { vmRequest, - vmProof: undefined, + vmProof, previousProofType, - previousKernelProven: false, - publicKernelRequest: kernelRequest, + previousKernelProven, + publicKernelRequest: { + type: publicKernelRequest.type, + // We take a deep copy (clone) of the inputs to be modified here and passed to the prover. + // bb-prover will also modify the inputs by reference. + inputs: publicKernelRequest.inputs.clone(), + } as PublicKernelRequest, }; this.publicFunctions.push(publicFunction); - previousProofType = kernelRequest.type; + previousProofType = publicKernelRequest.type; + } + + if (this.publicFunctions.length > 0) { + // The first merge kernel takes the tube proof. + const firstKernelIndex = this.publicFunctions.findIndex( + fn => fn.publicKernelRequest.type === ProvingRequestType.PUBLIC_KERNEL_MERGE, + ); + this.publicFunctions[firstKernelIndex].previousProofType = ProvingRequestType.TUBE_PROOF; } } @@ -75,29 +95,44 @@ export class TxProvingState { verificationKey: VerificationKeyData, ): TxProvingInstruction { const kernelRequest = this.getPublicFunctionState(provenIndex).publicKernelRequest; - const nextKernelIndex = provenIndex + 1; - if (nextKernelIndex >= this.publicFunctions.length) { + const provenIsInner = kernelRequest.type === ProvingRequestType.PUBLIC_KERNEL_INNER; + // If the proven request is not an inner kernel, its next kernel should not be an inner kernel either. + const nextFunctionIndex = provenIsInner + ? provenIndex + 1 + : this.publicFunctions.findIndex( + (fn, i) => i > provenIndex && fn.publicKernelRequest.type !== ProvingRequestType.PUBLIC_KERNEL_INNER, + ); + if (nextFunctionIndex >= this.publicFunctions.length || nextFunctionIndex === -1) { // The next kernel index is greater than our set of functions, we are done! return { code: TX_PROVING_CODE.COMPLETED, function: undefined }; } // There is more work to do, are we ready? - const nextFunction = this.publicFunctions[nextKernelIndex]; - - // pass both the proof and verification key forward to the next circuit - nextFunction.publicKernelRequest.inputs.previousKernel.proof = proof; - nextFunction.publicKernelRequest.inputs.previousKernel.vk = verificationKey; + const nextFunction = this.publicFunctions[nextFunctionIndex]; + + if (provenIsInner && nextFunction.publicKernelRequest.type !== ProvingRequestType.PUBLIC_KERNEL_INNER) { + // TODO(#7124): Remove this temporary hack. + // If the proven request is inner (with vm proof) and the next one is regular kernel, set the vmProof to be + // not undefined. + // This should eventually be a real vm proof of the entire enqueued call. + nextFunction.vmProof = makeEmptyProof(); + } else { + // pass both the proof and verification key forward to the next circuit + nextFunction.publicKernelRequest.inputs.previousKernel.proof = proof; + nextFunction.publicKernelRequest.inputs.previousKernel.vk = verificationKey; + + // We need to update this so the state machine knows this proof is ready + nextFunction.previousKernelProven = true; + nextFunction.previousProofType = kernelRequest.type; + } - // We need to update this so the state machine knows this proof is ready - nextFunction.previousKernelProven = true; - nextFunction.previousProofType = kernelRequest.type; - if (nextFunction.vmProof === undefined) { + if (nextFunction.vmProof === undefined || !nextFunction.previousKernelProven) { // The VM proof for the next function is not ready return { code: TX_PROVING_CODE.NOT_READY, function: undefined }; } // The VM proof is ready, we can continue - return { code: TX_PROVING_CODE.READY, function: nextFunction }; + return { code: TX_PROVING_CODE.READY, function: nextFunction, functionIndex: nextFunctionIndex }; } // Updates the transaction's proving state after completion of a tube proof @@ -106,14 +141,16 @@ export class TxProvingState { proof: RecursiveProof, verificationKey: VerificationKeyData, ): TxProvingInstruction { - const nextKernelIndex = 0; - if (nextKernelIndex >= this.publicFunctions.length) { - // The next kernel index is greater than our set of functions, we are done! + const nextFunctionIndex = this.publicFunctions.findIndex( + (fn, i) => i > 0 && fn.previousProofType === ProvingRequestType.TUBE_PROOF, + ); + if (nextFunctionIndex === -1) { + // There are no public functions to be processed, we are done! return { code: TX_PROVING_CODE.COMPLETED, function: undefined }; } // There is more work to do, are we ready? - const nextFunction = this.publicFunctions[nextKernelIndex]; + const nextFunction = this.publicFunctions[nextFunctionIndex]; // pass both the proof and verification key forward to the next circuit nextFunction.publicKernelRequest.inputs.previousKernel.proof = proof; @@ -121,14 +158,13 @@ export class TxProvingState { // We need to update this so the state machine knows this proof is ready nextFunction.previousKernelProven = true; - nextFunction.previousProofType = PublicKernelType.NON_PUBLIC; if (nextFunction.vmProof === undefined) { // The VM proof for the next function is not ready return { code: TX_PROVING_CODE.NOT_READY, function: undefined }; } // The VM proof is ready, we can continue - return { code: TX_PROVING_CODE.READY, function: nextFunction }; + return { code: TX_PROVING_CODE.READY, function: nextFunction, functionIndex: nextFunctionIndex }; } // Updates the transaction's proving state after completion of a VM proof @@ -142,7 +178,7 @@ export class TxProvingState { return { code: TX_PROVING_CODE.NOT_READY, function: undefined }; } // The previous kernel is ready so we can prove this kernel - return { code: TX_PROVING_CODE.READY, function: provenFunction }; + return { code: TX_PROVING_CODE.READY, function: provenFunction, functionIndex: provenIndex }; } // Returns the public function state at the given index diff --git a/yarn-project/prover-client/src/prover-agent/agent-queue-rpc-integration.test.ts b/yarn-project/prover-client/src/prover-agent/agent-queue-rpc-integration.test.ts new file mode 100644 index 00000000000..cd30492f015 --- /dev/null +++ b/yarn-project/prover-client/src/prover-agent/agent-queue-rpc-integration.test.ts @@ -0,0 +1,80 @@ +import { type ServerCircuitProver } from '@aztec/circuit-types'; +import { ClientIvcProof, Fr, PrivateKernelEmptyInputData, TubeInputs } from '@aztec/circuits.js'; +import { + makeAvmCircuitInputs, + makeBaseParityInputs, + makeBaseRollupInputs, + makeBlockMergeRollupInputs, + makeBlockRootRollupInputs, + makeHeader, + makeMergeRollupInputs, + makePublicKernelCircuitPrivateInputs, + makePublicKernelInnerCircuitPrivateInputs, + makePublicKernelTailCircuitPrivateInputs, + makeRootParityInputs, + makeRootRollupInputs, +} from '@aztec/circuits.js/testing'; +import { type JsonRpcServer } from '@aztec/foundation/json-rpc/server'; +import { NoopTelemetryClient } from '@aztec/telemetry-client/noop'; + +import getPort from 'get-port'; + +import { MockProver } from '../test/mock_prover.js'; +import { MemoryProvingQueue } from './memory-proving-queue.js'; +import { ProverAgent } from './prover-agent.js'; +import { createProvingJobSourceClient, createProvingJobSourceServer } from './rpc.js'; + +describe('Prover agent <-> queue integration', () => { + let queue: MemoryProvingQueue; + let queueRpcServer: JsonRpcServer; + let agent: ProverAgent; + let prover: ServerCircuitProver; + + type MakeInputs = { + [K in keyof ServerCircuitProver]: () => Parameters[0]; + }; + + const makeInputs: MakeInputs = { + getAvmProof: makeAvmCircuitInputs, + getBaseParityProof: makeBaseParityInputs, + getBaseRollupProof: makeBaseRollupInputs, + getRootParityProof: makeRootParityInputs, + getBlockMergeRollupProof: makeBlockMergeRollupInputs, + getBlockRootRollupProof: makeBlockRootRollupInputs, + getBlockRootRollupFinalProof: makeBlockRootRollupInputs, + getEmptyPrivateKernelProof: () => + new PrivateKernelEmptyInputData(makeHeader(), Fr.random(), Fr.random(), Fr.random()), + getEmptyTubeProof: () => new PrivateKernelEmptyInputData(makeHeader(), Fr.random(), Fr.random(), Fr.random()), + getMergeRollupProof: makeMergeRollupInputs, + getPublicKernelInnerProof: makePublicKernelInnerCircuitPrivateInputs, + getPublicKernelMergeProof: makePublicKernelCircuitPrivateInputs, + getPublicTailProof: makePublicKernelTailCircuitPrivateInputs, + getRootRollupProof: makeRootRollupInputs, + getTubeProof: () => new TubeInputs(ClientIvcProof.empty()), + }; + + beforeEach(async () => { + prover = new MockProver(); + + queue = new MemoryProvingQueue(new NoopTelemetryClient(), 100, 10); + queue.start(); + const port = await getPort(); + queueRpcServer = createProvingJobSourceServer(queue); + queueRpcServer.start(port); + + agent = new ProverAgent(prover, 1, 10); + const queueRpcClient = createProvingJobSourceClient(`http://127.0.0.1:${port}`); + agent.start(queueRpcClient); + }); + + afterEach(async () => { + await agent.stop(); + await queueRpcServer.stop(); + await queue.stop(); + }); + + it.each(Object.entries(makeInputs))('can call %s over JSON-RPC', async (fnName, makeInputs) => { + const resp = await queue[fnName as keyof ServerCircuitProver](makeInputs() as any); + expect(resp).toBeDefined(); + }); +}); diff --git a/yarn-project/prover-client/src/prover-agent/memory-proving-queue.ts b/yarn-project/prover-client/src/prover-agent/memory-proving-queue.ts index 7dc8e10012a..6f54ae5fe87 100644 --- a/yarn-project/prover-client/src/prover-agent/memory-proving-queue.ts +++ b/yarn-project/prover-client/src/prover-agent/memory-proving-queue.ts @@ -6,8 +6,6 @@ import { type ProvingRequestResult, ProvingRequestType, type PublicInputsAndRecursiveProof, - type PublicKernelNonTailRequest, - type PublicKernelTailRequest, type ServerCircuitProver, } from '@aztec/circuit-types'; import type { @@ -22,7 +20,10 @@ import type { MergeRollupInputs, NESTED_RECURSIVE_PROOF_LENGTH, PrivateKernelEmptyInputData, + PublicKernelCircuitPrivateInputs, PublicKernelCircuitPublicInputs, + PublicKernelInnerCircuitPrivateInputs, + PublicKernelTailCircuitPrivateInputs, RECURSIVE_PROOF_LENGTH, RecursiveProof, RootParityInput, @@ -30,6 +31,7 @@ import type { RootRollupInputs, RootRollupPublicInputs, TubeInputs, + VMCircuitPublicInputs, VerificationKeyData, } from '@aztec/circuits.js'; import { randomBytes } from '@aztec/foundation/crypto'; @@ -349,6 +351,14 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource return this.enqueue({ type: ProvingRequestType.BLOCK_ROOT_ROLLUP, inputs: input }, signal, epochNumber); } + getBlockRootRollupFinalProof( + input: BlockRootRollupInputs, + signal?: AbortSignal, + epochNumber?: number, + ): Promise> { + return this.enqueue({ type: ProvingRequestType.BLOCK_ROOT_ROLLUP_FINAL, inputs: input }, signal, epochNumber); + } + /** * Creates a proof for the given input. * @param input - Input to the circuit. @@ -374,19 +384,27 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource } /** - * Create a public kernel proof. + * Create a public kernel inner proof. * @param kernelRequest - Object containing the details of the proof required */ - getPublicKernelProof( - kernelRequest: PublicKernelNonTailRequest, + getPublicKernelInnerProof( + inputs: PublicKernelInnerCircuitPrivateInputs, + signal?: AbortSignal, + epochNumber?: number, + ): Promise> { + return this.enqueue({ type: ProvingRequestType.PUBLIC_KERNEL_INNER, inputs }, signal, epochNumber); + } + + /** + * Create a public kernel merge proof. + * @param kernelRequest - Object containing the details of the proof required + */ + getPublicKernelMergeProof( + inputs: PublicKernelCircuitPrivateInputs, signal?: AbortSignal, epochNumber?: number, ): Promise> { - return this.enqueue( - { type: ProvingRequestType.PUBLIC_KERNEL_NON_TAIL, kernelType: kernelRequest.type, inputs: kernelRequest.inputs }, - signal, - epochNumber, - ); + return this.enqueue({ type: ProvingRequestType.PUBLIC_KERNEL_MERGE, inputs }, signal, epochNumber); } /** @@ -394,15 +412,11 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource * @param kernelRequest - Object containing the details of the proof required */ getPublicTailProof( - kernelRequest: PublicKernelTailRequest, + inputs: PublicKernelTailCircuitPrivateInputs, signal?: AbortSignal, epochNumber?: number, ): Promise> { - return this.enqueue( - { type: ProvingRequestType.PUBLIC_KERNEL_TAIL, kernelType: kernelRequest.type, inputs: kernelRequest.inputs }, - signal, - epochNumber, - ); + return this.enqueue({ type: ProvingRequestType.PUBLIC_KERNEL_TAIL, inputs }, signal, epochNumber); } /** diff --git a/yarn-project/prover-client/src/prover-agent/prover-agent.ts b/yarn-project/prover-client/src/prover-agent/prover-agent.ts index b91b4639baf..a4af27153d7 100644 --- a/yarn-project/prover-client/src/prover-agent/prover-agent.ts +++ b/yarn-project/prover-client/src/prover-agent/prover-agent.ts @@ -161,18 +161,16 @@ export class ProverAgent { return this.circuitProver.getAvmProof(inputs); } - case ProvingRequestType.PUBLIC_KERNEL_NON_TAIL: { - return this.circuitProver.getPublicKernelProof({ - type: request.kernelType, - inputs, - }); + case ProvingRequestType.PUBLIC_KERNEL_INNER: { + return this.circuitProver.getPublicKernelInnerProof(inputs); + } + + case ProvingRequestType.PUBLIC_KERNEL_MERGE: { + return this.circuitProver.getPublicKernelMergeProof(inputs); } case ProvingRequestType.PUBLIC_KERNEL_TAIL: { - return this.circuitProver.getPublicTailProof({ - type: request.kernelType, - inputs, - }); + return this.circuitProver.getPublicTailProof(inputs); } case ProvingRequestType.BASE_ROLLUP: { @@ -187,6 +185,10 @@ export class ProverAgent { return this.circuitProver.getBlockRootRollupProof(inputs); } + case ProvingRequestType.BLOCK_ROOT_ROLLUP_FINAL: { + return this.circuitProver.getBlockRootRollupFinalProof(inputs); + } + case ProvingRequestType.BLOCK_MERGE_ROLLUP: { return this.circuitProver.getBlockMergeRollupProof(inputs); } diff --git a/yarn-project/prover-client/src/prover-agent/rpc.ts b/yarn-project/prover-client/src/prover-agent/rpc.ts index 4474882f187..39d9677ce77 100644 --- a/yarn-project/prover-client/src/prover-agent/rpc.ts +++ b/yarn-project/prover-client/src/prover-agent/rpc.ts @@ -1,6 +1,7 @@ import { type ProvingJobSource } from '@aztec/circuit-types'; import { AvmCircuitInputs, + AvmVerificationKeyData, AztecAddress, BaseOrMergeRollupPublicInputs, BaseParityInputs, @@ -18,6 +19,7 @@ import { Proof, PublicKernelCircuitPrivateInputs, PublicKernelCircuitPublicInputs, + PublicKernelInnerCircuitPrivateInputs, PublicKernelTailCircuitPrivateInputs, RecursiveProof, RootParityInput, @@ -25,6 +27,7 @@ import { RootRollupInputs, RootRollupPublicInputs, TubeInputs, + VMCircuitPublicInputs, VerificationKeyData, } from '@aztec/circuits.js'; import { createJsonRpcClient, makeFetch } from '@aztec/foundation/json-rpc/client'; @@ -37,6 +40,7 @@ export function createProvingJobSourceServer(queue: ProvingJobSource): JsonRpcSe return new JsonRpcServer( queue, { + AvmVerificationKeyData, AvmCircuitInputs, BaseOrMergeRollupPublicInputs, BaseParityInputs, @@ -49,6 +53,8 @@ export function createProvingJobSourceServer(queue: ProvingJobSource): JsonRpcSe Proof, ProvingError, PrivateKernelEmptyInputData, + VMCircuitPublicInputs, + PublicKernelInnerCircuitPrivateInputs, PublicKernelCircuitPrivateInputs, PublicKernelCircuitPublicInputs, PublicKernelTailCircuitPrivateInputs, @@ -75,6 +81,7 @@ export function createProvingJobSourceClient( return createJsonRpcClient( url, { + AvmVerificationKeyData, AvmCircuitInputs, BaseOrMergeRollupPublicInputs, BaseParityInputs, @@ -87,6 +94,8 @@ export function createProvingJobSourceClient( Proof, ProvingError, PrivateKernelEmptyInputData, + VMCircuitPublicInputs, + PublicKernelInnerCircuitPrivateInputs, PublicKernelCircuitPrivateInputs, PublicKernelCircuitPublicInputs, PublicKernelTailCircuitPrivateInputs, diff --git a/yarn-project/prover-client/src/test/bb_prover_full_rollup.test.ts b/yarn-project/prover-client/src/test/bb_prover_full_rollup.test.ts index 8ffad1ac338..fdecf4270ca 100644 --- a/yarn-project/prover-client/src/test/bb_prover_full_rollup.test.ts +++ b/yarn-project/prover-client/src/test/bb_prover_full_rollup.test.ts @@ -66,7 +66,7 @@ describe('prover/bb_prover/full-rollup', () => { logger.info(`Finalising block`); const blockResult = await context.orchestrator.finaliseBlock(); - await expect(prover.verifyProof('BlockRootRollupArtifact', blockResult.proof)).resolves.not.toThrow(); + await expect(prover.verifyProof('BlockRootRollupFinalArtifact', blockResult.proof)).resolves.not.toThrow(); }); // TODO(@PhilWindle): Remove public functions and re-enable once we can handle empty tx slots diff --git a/yarn-project/prover-client/src/test/mock_prover.ts b/yarn-project/prover-client/src/test/mock_prover.ts new file mode 100644 index 00000000000..021832713a7 --- /dev/null +++ b/yarn-project/prover-client/src/test/mock_prover.ts @@ -0,0 +1,170 @@ +import { + type PublicInputsAndRecursiveProof, + type PublicInputsAndTubeProof, + type ServerCircuitProver, + makePublicInputsAndRecursiveProof, +} from '@aztec/circuit-types'; +import { + AvmVerificationKeyData, + type BaseOrMergeRollupPublicInputs, + type BlockRootOrBlockMergePublicInputs, + type KernelCircuitPublicInputs, + type PublicKernelCircuitPublicInputs, + RECURSIVE_PROOF_LENGTH, + type RecursiveProof, + type RootRollupPublicInputs, + type VMCircuitPublicInputs, + VerificationKeyData, + makeEmptyProof, + makeRecursiveProof, +} from '@aztec/circuits.js'; +import { + makeBaseOrMergeRollupPublicInputs, + makeBlockRootOrBlockMergeRollupPublicInputs, + makeKernelCircuitPublicInputs, + makePublicKernelCircuitPublicInputs, + makeRootParityInput, + makeRootRollupPublicInputs, + makeVMCircuitPublicInputs, +} from '@aztec/circuits.js/testing'; + +export class MockProver implements ServerCircuitProver { + constructor() {} + + getAvmProof() { + return Promise.resolve( + Promise.resolve({ + proof: makeEmptyProof(), + verificationKey: AvmVerificationKeyData.makeFake(), + }), + ); + } + + getBaseParityProof() { + return Promise.resolve(makeRootParityInput(RECURSIVE_PROOF_LENGTH)); + } + + getRootParityProof() { + return Promise.resolve(makeRootParityInput(RECURSIVE_PROOF_LENGTH)); + } + + getBaseRollupProof() { + return Promise.resolve( + makePublicInputsAndRecursiveProof( + makeBaseOrMergeRollupPublicInputs(), + makeRecursiveProof(RECURSIVE_PROOF_LENGTH), + VerificationKeyData.makeFake(), + ), + ); + } + + getMergeRollupProof(): Promise> { + return Promise.resolve( + makePublicInputsAndRecursiveProof( + makeBaseOrMergeRollupPublicInputs(), + makeRecursiveProof(RECURSIVE_PROOF_LENGTH), + VerificationKeyData.makeFake(), + ), + ); + } + + getBlockMergeRollupProof() { + return Promise.resolve( + makePublicInputsAndRecursiveProof( + makeBlockRootOrBlockMergeRollupPublicInputs(), + makeRecursiveProof(RECURSIVE_PROOF_LENGTH), + VerificationKeyData.makeFake(), + ), + ); + } + + getBlockRootRollupProof(): Promise> { + return Promise.resolve( + makePublicInputsAndRecursiveProof( + makeBlockRootOrBlockMergeRollupPublicInputs(), + makeRecursiveProof(RECURSIVE_PROOF_LENGTH), + VerificationKeyData.makeFake(), + ), + ); + } + + getBlockRootRollupFinalProof(): Promise> { + return Promise.resolve( + makePublicInputsAndRecursiveProof( + makeBlockRootOrBlockMergeRollupPublicInputs(), + makeRecursiveProof(RECURSIVE_PROOF_LENGTH), + VerificationKeyData.makeFake(), + ), + ); + } + + getEmptyPrivateKernelProof(): Promise> { + return Promise.resolve( + makePublicInputsAndRecursiveProof( + makeKernelCircuitPublicInputs(), + makeRecursiveProof(RECURSIVE_PROOF_LENGTH), + VerificationKeyData.makeFake(), + ), + ); + } + + getEmptyTubeProof(): Promise> { + return Promise.resolve( + makePublicInputsAndRecursiveProof( + makeKernelCircuitPublicInputs(), + makeRecursiveProof(RECURSIVE_PROOF_LENGTH), + VerificationKeyData.makeFake(), + ), + ); + } + + getPublicKernelInnerProof(): Promise> { + return Promise.resolve( + makePublicInputsAndRecursiveProof( + makeVMCircuitPublicInputs(), + makeRecursiveProof(RECURSIVE_PROOF_LENGTH), + VerificationKeyData.makeFake(), + ), + ); + } + + getPublicKernelMergeProof(): Promise> { + return Promise.resolve( + makePublicInputsAndRecursiveProof( + makePublicKernelCircuitPublicInputs(), + makeRecursiveProof(RECURSIVE_PROOF_LENGTH), + VerificationKeyData.makeFake(), + ), + ); + } + + getPublicTailProof(): Promise> { + return Promise.resolve( + makePublicInputsAndRecursiveProof( + makeKernelCircuitPublicInputs(), + makeRecursiveProof(RECURSIVE_PROOF_LENGTH), + VerificationKeyData.makeFake(), + ), + ); + } + + getRootRollupProof(): Promise> { + return Promise.resolve( + makePublicInputsAndRecursiveProof( + makeRootRollupPublicInputs(), + makeRecursiveProof(RECURSIVE_PROOF_LENGTH), + VerificationKeyData.makeFake(), + ), + ); + } + + getTubeProof(): Promise<{ + tubeVK: VerificationKeyData; + tubeProof: RecursiveProof; + }> { + return Promise.resolve({ + tubeVK: VerificationKeyData.makeFake(), + tubeProof: makeRecursiveProof(RECURSIVE_PROOF_LENGTH), + }); + } +} diff --git a/yarn-project/prover-node/src/job/block-proving-job.ts b/yarn-project/prover-node/src/job/block-proving-job.ts index a9fb9c822d8..1f8e70f09b1 100644 --- a/yarn-project/prover-node/src/job/block-proving-job.ts +++ b/yarn-project/prover-node/src/job/block-proving-job.ts @@ -129,7 +129,7 @@ export class BlockProvingJob { } public stop() { - this.prover.cancelBlock(); + this.prover.cancel(); } private async getBlock(blockNumber: number): Promise { diff --git a/yarn-project/prover-node/src/prover-node.test.ts b/yarn-project/prover-node/src/prover-node.test.ts index b8330eff75c..e5cd74cfa32 100644 --- a/yarn-project/prover-node/src/prover-node.test.ts +++ b/yarn-project/prover-node/src/prover-node.test.ts @@ -4,12 +4,13 @@ import { type MerkleTreeAdminOperations, type ProverClient, type TxProvider, + WorldStateRunningState, + type WorldStateSynchronizer, } from '@aztec/circuit-types'; import { type L1Publisher } from '@aztec/sequencer-client'; import { type PublicProcessorFactory, type SimulationProvider } from '@aztec/simulator'; import { NoopTelemetryClient } from '@aztec/telemetry-client/noop'; import { type ContractDataSource } from '@aztec/types/contracts'; -import { WorldStateRunningState, type WorldStateSynchronizer } from '@aztec/world-state'; import { type MockProxy, mock } from 'jest-mock-extended'; diff --git a/yarn-project/prover-node/src/prover-node.ts b/yarn-project/prover-node/src/prover-node.ts index ea71d28d50d..02b3a1b4448 100644 --- a/yarn-project/prover-node/src/prover-node.ts +++ b/yarn-project/prover-node/src/prover-node.ts @@ -4,6 +4,7 @@ import { type MerkleTreeOperations, type ProverClient, type TxProvider, + type WorldStateSynchronizer, } from '@aztec/circuit-types'; import { createDebugLogger } from '@aztec/foundation/log'; import { RunningPromise } from '@aztec/foundation/running-promise'; @@ -11,7 +12,6 @@ import { type L1Publisher } from '@aztec/sequencer-client'; import { PublicProcessorFactory, type SimulationProvider } from '@aztec/simulator'; import { type TelemetryClient } from '@aztec/telemetry-client'; import { type ContractDataSource } from '@aztec/types/contracts'; -import { type WorldStateSynchronizer } from '@aztec/world-state'; import { BlockProvingJob, type BlockProvingJobState } from './job/block-proving-job.js'; import { ProverNodeMetrics } from './metrics.js'; diff --git a/yarn-project/pxe/src/pxe_service/create_pxe_service.ts b/yarn-project/pxe/src/pxe_service/create_pxe_service.ts index fd4b1d3a34d..e6042b7e365 100644 --- a/yarn-project/pxe/src/pxe_service/create_pxe_service.ts +++ b/yarn-project/pxe/src/pxe_service/create_pxe_service.ts @@ -8,7 +8,6 @@ import { getCanonicalAuthRegistry } from '@aztec/protocol-contracts/auth-registr import { getCanonicalClassRegisterer } from '@aztec/protocol-contracts/class-registerer'; import { getCanonicalFeeJuice } from '@aztec/protocol-contracts/fee-juice'; import { getCanonicalInstanceDeployer } from '@aztec/protocol-contracts/instance-deployer'; -import { getCanonicalKeyRegistry } from '@aztec/protocol-contracts/key-registry'; import { getCanonicalMultiCallEntrypointContract } from '@aztec/protocol-contracts/multi-call-entrypoint'; import { getCanonicalRouter } from '@aztec/protocol-contracts/router'; @@ -51,7 +50,6 @@ export async function createPXEService( getCanonicalInstanceDeployer(), getCanonicalMultiCallEntrypointContract(), getCanonicalFeeJuice(), - getCanonicalKeyRegistry(), getCanonicalAuthRegistry(), getCanonicalRouter(), ]) { diff --git a/yarn-project/pxe/src/pxe_service/pxe_service.ts b/yarn-project/pxe/src/pxe_service/pxe_service.ts index a68ec01823b..c18a036d590 100644 --- a/yarn-project/pxe/src/pxe_service/pxe_service.ts +++ b/yarn-project/pxe/src/pxe_service/pxe_service.ts @@ -31,6 +31,7 @@ import { getNonNullifiedL1ToL2MessageWitness, isNoirCallStackUnresolved, } from '@aztec/circuit-types'; +import { type NoteProcessorStats } from '@aztec/circuit-types/stats'; import { AztecAddress, type CompleteAddress, @@ -42,20 +43,19 @@ import { } from '@aztec/circuits.js'; import { computeNoteHashNonce, siloNullifier } from '@aztec/circuits.js/hash'; import { + type AbiDecoded, type ContractArtifact, - type DecodedReturn, EventSelector, FunctionSelector, encodeArguments, } from '@aztec/foundation/abi'; -import { type Fq, Fr, type Point } from '@aztec/foundation/fields'; +import { Fr, type Point } from '@aztec/foundation/fields'; import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log'; import { SerialQueue } from '@aztec/foundation/queue'; import { type KeyStore } from '@aztec/key-store'; import { ClassRegistererAddress } from '@aztec/protocol-contracts/class-registerer'; import { getCanonicalFeeJuice } from '@aztec/protocol-contracts/fee-juice'; import { getCanonicalInstanceDeployer } from '@aztec/protocol-contracts/instance-deployer'; -import { getCanonicalKeyRegistryAddress } from '@aztec/protocol-contracts/key-registry'; import { getCanonicalMultiCallEntrypointAddress } from '@aztec/protocol-contracts/multi-call-entrypoint'; import { type AcirSimulator, @@ -176,10 +176,6 @@ export class PXEService implements PXE { return this.db.getAuthWitness(messageHash); } - async rotateNskM(account: AztecAddress, secretKey: Fq): Promise { - await this.keyStore.rotateMasterNullifierKey(account, secretKey); - } - public addCapsule(capsule: Fr[]) { return this.db.addCapsule(capsule); } @@ -312,8 +308,6 @@ export class PXEService implements PXE { public async getIncomingNotes(filter: IncomingNotesFilter): Promise { const noteDaos = await this.db.getIncomingNotes(filter); - // TODO(#6531): Refactor --> This type conversion is ugly but I decided to keep it this way for now because - // key rotation will affect this const extendedNotes = noteDaos.map(async dao => { let owner = filter.owner; if (owner === undefined) { @@ -341,8 +335,6 @@ export class PXEService implements PXE { public async getOutgoingNotes(filter: OutgoingNotesFilter): Promise { const noteDaos = await this.db.getOutgoingNotes(filter); - // TODO(#6532): Refactor --> This type conversion is ugly but I decided to keep it this way for now because - // key rotation will affect this const extendedNotes = noteDaos.map(async dao => { let owner = filter.owner; if (owner === undefined) { @@ -576,7 +568,7 @@ export class PXEService implements PXE { to: AztecAddress, _from?: AztecAddress, scopes?: AztecAddress[], - ): Promise { + ): Promise { // all simulations must be serialized w.r.t. the synchronizer return await this.jobQueue.put(async () => { // TODO - Should check if `from` has the permission to call the view function. @@ -667,7 +659,6 @@ export class PXEService implements PXE { classRegisterer: ClassRegistererAddress, feeJuice: getCanonicalFeeJuice().address, instanceDeployer: getCanonicalInstanceDeployer().address, - keyRegistry: getCanonicalKeyRegistryAddress(), multiCallEntrypoint: getCanonicalMultiCallEntrypointAddress(), }, }); @@ -888,7 +879,7 @@ export class PXEService implements PXE { return Promise.resolve(this.synchronizer.getSyncStatus()); } - public getSyncStats() { + public getSyncStats(): Promise<{ [address: string]: NoteProcessorStats }> { return Promise.resolve(this.synchronizer.getSyncStats()); } @@ -974,17 +965,11 @@ export class PXEService implements PXE { } if (visibleEvent.payload.event.items.length !== eventMetadata.fieldNames.length) { throw new Error( - 'Something is weird here, we have matching FunctionSelectors, but the actual payload has mismatched length', + 'Something is weird here, we have matching EventSelectors, but the actual payload has mismatched length', ); } - return eventMetadata.fieldNames.reduce( - (acc, curr, i) => ({ - ...acc, - [curr]: visibleEvent.payload.event.items[i], - }), - {} as T, - ); + return eventMetadata.decode(visibleEvent.payload); }) .filter(visibleEvent => visibleEvent !== undefined) as T[]; @@ -1011,17 +996,11 @@ export class PXEService implements PXE { if (unencryptedLogBuf.byteLength !== eventMetadata.fieldNames.length * 32 + 32) { throw new Error( - 'Something is weird here, we have matching FunctionSelectors, but the actual payload has mismatched length', + 'Something is weird here, we have matching EventSelectors, but the actual payload has mismatched length', ); } - return eventMetadata.fieldNames.reduce( - (acc, curr, i) => ({ - ...acc, - [curr]: new Fr(unencryptedLogBuf.subarray(i * 32, i * 32 + 32)), - }), - {} as T, - ); + return eventMetadata.decode(unencryptedLog.log); }) .filter(unencryptedLog => unencryptedLog !== undefined) as T[]; diff --git a/yarn-project/sequencer-client/src/block_builder/index.ts b/yarn-project/sequencer-client/src/block_builder/index.ts index 0b32950acda..077b1049650 100644 --- a/yarn-project/sequencer-client/src/block_builder/index.ts +++ b/yarn-project/sequencer-client/src/block_builder/index.ts @@ -1,51 +1,7 @@ -import { TestCircuitProver } from '@aztec/bb-prover'; -import { - type BlockSimulator, - type MerkleTreeOperations, - type ProcessedTx, - type ProvingTicket, - type SimulationBlockResult, -} from '@aztec/circuit-types'; -import { type Fr, type GlobalVariables } from '@aztec/circuits.js'; -import { ProvingOrchestrator } from '@aztec/prover-client/orchestrator'; -import { type SimulationProvider } from '@aztec/simulator'; -import { type TelemetryClient } from '@aztec/telemetry-client'; -import { NoopTelemetryClient } from '@aztec/telemetry-client/noop'; +import { type BlockSimulator, type MerkleTreeOperations } from '@aztec/circuit-types'; -/** - * Implements a block simulator using a test circuit prover under the hood, which just simulates circuits and outputs empty proofs. - * This class is temporary and should die once we switch from tx effects to tx objects submissions, since sequencers won't have - * the need to create L2 block headers to submit to L1. When we do that, we should also remove the references to the - * prover-client and bb-prover packages from this package. - */ -export class BlockBuilder implements BlockSimulator { - private orchestrator: ProvingOrchestrator; - constructor(db: MerkleTreeOperations, simulationProvider: SimulationProvider, telemetry: TelemetryClient) { - const testProver = new TestCircuitProver(telemetry, simulationProvider); - this.orchestrator = new ProvingOrchestrator(db, testProver, telemetry); - } - - startNewBlock(numTxs: number, globalVariables: GlobalVariables, l1ToL2Messages: Fr[]): Promise { - return this.orchestrator.startNewBlock(numTxs, globalVariables, l1ToL2Messages); - } - cancelBlock(): void { - this.orchestrator.cancelBlock(); - } - finaliseBlock(): Promise { - return this.orchestrator.finaliseBlock(); - } - setBlockCompleted(): Promise { - return this.orchestrator.setBlockCompleted(); - } - addNewTx(tx: ProcessedTx): Promise { - return this.orchestrator.addNewTx(tx); - } -} - -export class BlockBuilderFactory { - constructor(private simulationProvider: SimulationProvider, private telemetry?: TelemetryClient) {} - - create(db: MerkleTreeOperations): BlockSimulator { - return new BlockBuilder(db, this.simulationProvider, this.telemetry ?? new NoopTelemetryClient()); - } +export * from './orchestrator.js'; +export * from './light.js'; +export interface BlockBuilderFactory { + create(db: MerkleTreeOperations): BlockSimulator; } diff --git a/yarn-project/sequencer-client/src/block_builder/light.test.ts b/yarn-project/sequencer-client/src/block_builder/light.test.ts new file mode 100644 index 00000000000..25c041b4fa8 --- /dev/null +++ b/yarn-project/sequencer-client/src/block_builder/light.test.ts @@ -0,0 +1,303 @@ +import { TestCircuitProver } from '@aztec/bb-prover'; +import { + MerkleTreeId, + type MerkleTreeOperations, + type ProcessedTx, + type ServerCircuitProver, + makeEmptyProcessedTx, +} from '@aztec/circuit-types'; +import { makeBloatedProcessedTx } from '@aztec/circuit-types/test'; +import { + type AppendOnlyTreeSnapshot, + type BaseOrMergeRollupPublicInputs, + BaseParityInputs, + BlockRootRollupInputs, + Fr, + type GlobalVariables, + L1_TO_L2_MSG_SUBTREE_HEIGHT, + L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, + type MembershipWitness, + MergeRollupInputs, + NESTED_RECURSIVE_PROOF_LENGTH, + NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, + NUM_BASE_PARITY_PER_ROOT_PARITY, + type ParityPublicInputs, + PreviousRollupData, + type RecursiveProof, + RootParityInput, + RootParityInputs, + VerificationKeyData, + makeEmptyRecursiveProof, +} from '@aztec/circuits.js'; +import { makeGlobalVariables } from '@aztec/circuits.js/testing'; +import { padArrayEnd, times } from '@aztec/foundation/collection'; +import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log'; +import { type Tuple, assertLength } from '@aztec/foundation/serialize'; +import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types'; +import { + buildBaseRollupInput, + buildHeaderFromCircuitOutputs, + getRootTreeSiblingPath, + getSubtreeSiblingPath, + getTreeSnapshot, + makeEmptyMembershipWitness, +} from '@aztec/prover-client/helpers'; +import { NoopTelemetryClient } from '@aztec/telemetry-client/noop'; +import { MerkleTrees } from '@aztec/world-state'; + +import { LightweightBlockBuilder } from './light.js'; + +describe('LightBlockBuilder', () => { + let simulator: ServerCircuitProver; + let logger: DebugLogger; + let globals: GlobalVariables; + let l1ToL2Messages: Fr[]; + let vkRoot: Fr; + + let db: MerkleTreeOperations; + let expectsDb: MerkleTreeOperations; + let builder: LightweightBlockBuilder; + + let emptyProof: RecursiveProof; + let emptyVk: VerificationKeyData; + let emptyVkWitness: MembershipWitness<5>; + + beforeAll(() => { + logger = createDebugLogger('aztec:sequencer-client:test:block-builder'); + simulator = new TestCircuitProver(new NoopTelemetryClient()); + vkRoot = getVKTreeRoot(); + emptyProof = makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH); + emptyVk = VerificationKeyData.makeFake(); + emptyVkWitness = makeEmptyMembershipWitness(5); + }); + + beforeEach(async () => { + globals = makeGlobalVariables(1, { chainId: Fr.ZERO, version: Fr.ZERO }); + l1ToL2Messages = times(7, i => new Fr(i + 1)); + db = await MerkleTrees.tmp().then(t => t.asLatest()); + expectsDb = await MerkleTrees.tmp().then(t => t.asLatest()); + builder = new LightweightBlockBuilder(db, new NoopTelemetryClient()); + }); + + it('builds a 2 tx header', async () => { + const txs = times(2, makeTx); + const header = await buildHeader(txs, l1ToL2Messages); + + const expectedHeader = await buildExpectedHeader(txs, l1ToL2Messages); + + expect(header).toEqual(expectedHeader); + }); + + it('builds a 3 tx header', async () => { + const txs = times(3, makeTx); + const header = await buildHeader(txs, l1ToL2Messages); + + const expectedHeader = await buildExpectedHeader(txs, l1ToL2Messages, async rollupOutputs => { + const merge = await getMergeOutput(rollupOutputs[0], rollupOutputs[1]); + return Promise.resolve([merge, rollupOutputs[2]]); + }); + + expect(header).toEqual(expectedHeader); + }); + + it('builds a 4 tx header', async () => { + const txs = times(4, makeTx); + const header = await buildHeader(txs, l1ToL2Messages); + + const expectedHeader = await buildExpectedHeader(txs, l1ToL2Messages, async rollupOutputs => { + const mergeLeft = await getMergeOutput(rollupOutputs[0], rollupOutputs[1]); + const mergeRight = await getMergeOutput(rollupOutputs[2], rollupOutputs[3]); + return [mergeLeft, mergeRight]; + }); + + expect(header).toEqual(expectedHeader); + }); + + it('builds a 4 tx header with no l1 to l2 messages', async () => { + const l1ToL2Messages: Fr[] = []; + const txs = times(4, makeTx); + const header = await buildHeader(txs, l1ToL2Messages); + + const expectedHeader = await buildExpectedHeader(txs, l1ToL2Messages, async rollupOutputs => { + const mergeLeft = await getMergeOutput(rollupOutputs[0], rollupOutputs[1]); + const mergeRight = await getMergeOutput(rollupOutputs[2], rollupOutputs[3]); + return [mergeLeft, mergeRight]; + }); + + expect(header).toEqual(expectedHeader); + }); + + it('builds a 5 tx header', async () => { + const txs = times(5, makeTx); + const header = await buildHeader(txs, l1ToL2Messages); + + const expectedHeader = await buildExpectedHeader(txs, l1ToL2Messages, async rollupOutputs => { + const merge10 = await getMergeOutput(rollupOutputs[0], rollupOutputs[1]); + const merge11 = await getMergeOutput(rollupOutputs[2], rollupOutputs[3]); + const merge20 = await getMergeOutput(merge10, merge11); + return [merge20, rollupOutputs[4]]; + }); + + expect(header).toEqual(expectedHeader); + }); + + it('builds a single tx header', async () => { + const txs = times(1, i => makeBloatedProcessedTx(db, vkRoot, i)); + const header = await buildHeader(txs, l1ToL2Messages); + + const expectedHeader = await buildExpectedHeader(txs, l1ToL2Messages); + + expect(header).toEqual(expectedHeader); + }); + + it('builds an empty header', async () => { + const txs: ProcessedTx[] = []; + const header = await buildHeader(txs, l1ToL2Messages); + + const expectedHeader = await buildExpectedHeader(txs, l1ToL2Messages); + + expect(header).toEqual(expectedHeader); + }); + + // Makes a tx with a non-zero inclusion fee for testing + const makeTx = (i: number) => makeBloatedProcessedTx(db, vkRoot, i, { inclusionFee: new Fr(i) }); + + // Builds the block header using the ts block builder + const buildHeader = async (txs: ProcessedTx[], l1ToL2Messages: Fr[]) => { + const txCount = Math.max(2, txs.length); + await builder.startNewBlock(txCount, globals, l1ToL2Messages); + for (const tx of txs) { + await builder.addNewTx(tx); + } + await builder.setBlockCompleted(); + const result = await builder.finaliseBlock(); + return result.block.header; + }; + + // Builds the block header using circuit outputs + // Requires a callback for manually assembling the merge rollup tree + const buildExpectedHeader = async ( + txs: ProcessedTx[], + l1ToL2Messages: Fr[], + getTopMerges?: ( + rollupOutputs: BaseOrMergeRollupPublicInputs[], + ) => Promise<[BaseOrMergeRollupPublicInputs, BaseOrMergeRollupPublicInputs]>, + ) => { + if (txs.length <= 2) { + // Pad if we don't have enough txs + txs = [ + ...txs, + ...times(2 - txs.length, () => + makeEmptyProcessedTx(expectsDb.getInitialHeader(), globals.chainId, globals.version, vkRoot), + ), + ]; + // No need to run a merge if there's 0-2 txs + getTopMerges = rollupOutputs => Promise.resolve([rollupOutputs[0], rollupOutputs[1]]); + } + + const rollupOutputs = await getRollupOutputs(txs); + const [mergeLeft, mergeRight] = await getTopMerges!(rollupOutputs); + const l1ToL2Snapshot = await getL1ToL2Snapshot(l1ToL2Messages); + const parityOutput = await getParityOutput(l1ToL2Messages); + const messageTreeSnapshot = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, expectsDb); + const rootOutput = await getBlockRootOutput(mergeLeft, mergeRight, parityOutput, l1ToL2Snapshot); + const expectedHeader = buildHeaderFromCircuitOutputs( + [mergeLeft, mergeRight], + parityOutput, + rootOutput, + messageTreeSnapshot, + logger, + ); + + expect(expectedHeader.hash()).toEqual(rootOutput.endBlockHash); + return expectedHeader; + }; + + const getL1ToL2Snapshot = async (msgs: Fr[]) => { + const l1ToL2Messages = padArrayEnd(msgs, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP); + + const newL1ToL2MessageTreeRootSiblingPath = padArrayEnd( + await getSubtreeSiblingPath(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, L1_TO_L2_MSG_SUBTREE_HEIGHT, expectsDb), + Fr.ZERO, + L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, + ); + + const messageTreeSnapshot = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, expectsDb); + return { messageTreeSnapshot, newL1ToL2MessageTreeRootSiblingPath, l1ToL2Messages }; + }; + + const getRollupOutputs = async (txs: ProcessedTx[]) => { + const rollupOutputs = []; + for (const tx of txs) { + const inputs = await buildBaseRollupInput(tx, emptyProof, globals, expectsDb, emptyVk); + const result = await simulator.getBaseRollupProof(inputs); + rollupOutputs.push(result.inputs); + } + return rollupOutputs; + }; + + const getMergeOutput = async (left: BaseOrMergeRollupPublicInputs, right: BaseOrMergeRollupPublicInputs) => { + const leftInput = new PreviousRollupData(left, emptyProof, emptyVk.keyAsFields, emptyVkWitness); + const rightInput = new PreviousRollupData(right, emptyProof, emptyVk.keyAsFields, emptyVkWitness); + const inputs = new MergeRollupInputs([leftInput, rightInput]); + const result = await simulator.getMergeRollupProof(inputs); + return result.inputs; + }; + + const getParityOutput = async (msgs: Fr[]) => { + const l1ToL2Messages = padArrayEnd(msgs, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP); + await expectsDb.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, l1ToL2Messages); + + const rootParityInputs: RootParityInput[] = []; + for (let i = 0; i < NUM_BASE_PARITY_PER_ROOT_PARITY; i++) { + const input = BaseParityInputs.fromSlice(l1ToL2Messages, i, vkRoot); + const { publicInputs } = await simulator.getBaseParityProof(input); + const rootInput = new RootParityInput(emptyProof, emptyVk.keyAsFields, emptyVkWitness.siblingPath, publicInputs); + rootParityInputs.push(rootInput); + } + + const rootParityInput = new RootParityInputs(assertLength(rootParityInputs, NUM_BASE_PARITY_PER_ROOT_PARITY)); + const result = await simulator.getRootParityProof(rootParityInput); + return result.publicInputs; + }; + + const getBlockRootOutput = async ( + left: BaseOrMergeRollupPublicInputs, + right: BaseOrMergeRollupPublicInputs, + parityOutput: ParityPublicInputs, + l1ToL2Snapshot: { + l1ToL2Messages: Tuple; + newL1ToL2MessageTreeRootSiblingPath: Tuple; + messageTreeSnapshot: AppendOnlyTreeSnapshot; + }, + ) => { + const rollupLeft = new PreviousRollupData(left, emptyProof, emptyVk.keyAsFields, emptyVkWitness); + const rollupRight = new PreviousRollupData(right, emptyProof, emptyVk.keyAsFields, emptyVkWitness); + const startArchiveSnapshot = await getTreeSnapshot(MerkleTreeId.ARCHIVE, expectsDb); + const newArchiveSiblingPath = await getRootTreeSiblingPath(MerkleTreeId.ARCHIVE, expectsDb); + const previousBlockHashLeafIndex = BigInt(startArchiveSnapshot.nextAvailableLeafIndex - 1); + const previousBlockHash = (await expectsDb.getLeafValue(MerkleTreeId.ARCHIVE, previousBlockHashLeafIndex))!; + + const rootParityInput = new RootParityInput( + emptyProof, + emptyVk.keyAsFields, + emptyVkWitness.siblingPath, + parityOutput, + ); + + const inputs = BlockRootRollupInputs.from({ + previousRollupData: [rollupLeft, rollupRight], + l1ToL2Roots: rootParityInput, + newL1ToL2Messages: l1ToL2Snapshot.l1ToL2Messages, + newL1ToL2MessageTreeRootSiblingPath: l1ToL2Snapshot.newL1ToL2MessageTreeRootSiblingPath, + startL1ToL2MessageTreeSnapshot: l1ToL2Snapshot.messageTreeSnapshot, + startArchiveSnapshot, + newArchiveSiblingPath, + previousBlockHash, + proverId: Fr.ZERO, + }); + + const result = await simulator.getBlockRootRollupProof(inputs); + return result.inputs; + }; +}); diff --git a/yarn-project/sequencer-client/src/block_builder/light.ts b/yarn-project/sequencer-client/src/block_builder/light.ts new file mode 100644 index 00000000000..7443087bd6a --- /dev/null +++ b/yarn-project/sequencer-client/src/block_builder/light.ts @@ -0,0 +1,111 @@ +import { createDebugLogger } from '@aztec/aztec.js'; +import { + type BlockSimulator, + Body, + L2Block, + MerkleTreeId, + type MerkleTreeOperations, + PROVING_STATUS, + type ProcessedTx, + type ProvingTicket, + type SimulationBlockResult, + type TxEffect, + makeEmptyProcessedTx, + toTxEffect, +} from '@aztec/circuit-types'; +import { + Fr, + type GlobalVariables, + NESTED_RECURSIVE_PROOF_LENGTH, + NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, + VerificationKeyData, + makeEmptyRecursiveProof, +} from '@aztec/circuits.js'; +import { padArrayEnd } from '@aztec/foundation/collection'; +import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types'; +import { buildBaseRollupInput, buildHeaderFromTxEffects, getTreeSnapshot } from '@aztec/prover-client/helpers'; +import { type TelemetryClient } from '@aztec/telemetry-client'; +import { NoopTelemetryClient } from '@aztec/telemetry-client/noop'; + +/** + * Implements a block simulator using a test circuit prover under the hood, which just simulates circuits and outputs empty proofs. + * This class is temporary and should die once we switch from tx effects to tx objects submissions, since sequencers won't have + * the need to create L2 block headers to submit to L1. When we do that, we should also remove the references to the + * prover-client and bb-prover packages from this package. + */ +export class LightweightBlockBuilder implements BlockSimulator { + private numTxs?: number; + private globalVariables?: GlobalVariables; + private l1ToL2Messages?: Fr[]; + + private readonly txs: ProcessedTx[] = []; + + private readonly logger = createDebugLogger('aztec:sequencer-client:block_builder_light'); + + constructor(private db: MerkleTreeOperations, private telemetry: TelemetryClient) {} + + async startNewBlock(numTxs: number, globalVariables: GlobalVariables, l1ToL2Messages: Fr[]): Promise { + this.logger.verbose('Starting new block', { numTxs, globalVariables, l1ToL2Messages }); + this.numTxs = numTxs; + this.globalVariables = globalVariables; + this.l1ToL2Messages = padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP); + + // Update L1 to L2 tree + await this.db.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, this.l1ToL2Messages!); + + // Nothing to prove, so we return an already resolved promise + return { provingPromise: Promise.resolve({ status: PROVING_STATUS.SUCCESS }) }; + } + + async addNewTx(tx: ProcessedTx): Promise { + this.logger.verbose('Adding new tx to block', { txHash: tx.hash.toString() }); + this.txs.push(tx); + await buildBaseRollupInput( + tx, + makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), + this.globalVariables!, + this.db, + VerificationKeyData.makeFake(), + ); + } + + cancel(): void {} + + async setBlockCompleted(): Promise { + const paddingTxCount = this.numTxs! - this.txs.length; + this.logger.verbose(`Setting block as completed and adding ${paddingTxCount} padding txs`); + for (let i = 0; i < paddingTxCount; i++) { + await this.addNewTx( + makeEmptyProcessedTx( + this.db.getInitialHeader(), + this.globalVariables!.chainId, + this.globalVariables!.version, + getVKTreeRoot(), + ), + ); + } + } + + async finaliseBlock(): Promise { + this.logger.verbose(`Finalising block`); + const nonEmptyTxEffects: TxEffect[] = this.txs + .map(tx => toTxEffect(tx, this.globalVariables!.gasFees)) + .filter(txEffect => !txEffect.isEmpty()); + const body = new Body(nonEmptyTxEffects); + const header = await buildHeaderFromTxEffects(body, this.globalVariables!, this.l1ToL2Messages!, this.db); + + await this.db.updateArchive(header); + const newArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, this.db); + + const block = new L2Block(newArchive, header, body); + return { block }; + } +} + +export class LightweightBlockBuilderFactory { + constructor(private telemetry?: TelemetryClient) {} + + create(db: MerkleTreeOperations): BlockSimulator { + return new LightweightBlockBuilder(db, this.telemetry ?? new NoopTelemetryClient()); + } +} diff --git a/yarn-project/sequencer-client/src/block_builder/orchestrator.ts b/yarn-project/sequencer-client/src/block_builder/orchestrator.ts new file mode 100644 index 00000000000..31f00f26ea5 --- /dev/null +++ b/yarn-project/sequencer-client/src/block_builder/orchestrator.ts @@ -0,0 +1,51 @@ +import { TestCircuitProver } from '@aztec/bb-prover'; +import { + type BlockSimulator, + type MerkleTreeOperations, + type ProcessedTx, + type ProvingTicket, + type SimulationBlockResult, +} from '@aztec/circuit-types'; +import { type Fr, type GlobalVariables } from '@aztec/circuits.js'; +import { ProvingOrchestrator } from '@aztec/prover-client/orchestrator'; +import { type SimulationProvider } from '@aztec/simulator'; +import { type TelemetryClient } from '@aztec/telemetry-client'; +import { NoopTelemetryClient } from '@aztec/telemetry-client/noop'; + +/** + * Implements a block simulator using a test circuit prover under the hood, which just simulates circuits and outputs empty proofs. + * This class is temporary and should die once we switch from tx effects to tx objects submissions, since sequencers won't have + * the need to create L2 block headers to submit to L1. When we do that, we should also remove the references to the + * prover-client and bb-prover packages from this package. + */ +export class OrchestratorBlockBuilder implements BlockSimulator { + private orchestrator: ProvingOrchestrator; + constructor(db: MerkleTreeOperations, simulationProvider: SimulationProvider, telemetry: TelemetryClient) { + const testProver = new TestCircuitProver(telemetry, simulationProvider); + this.orchestrator = new ProvingOrchestrator(db, testProver, telemetry); + } + + startNewBlock(numTxs: number, globalVariables: GlobalVariables, l1ToL2Messages: Fr[]): Promise { + return this.orchestrator.startNewBlock(numTxs, globalVariables, l1ToL2Messages); + } + cancel(): void { + this.orchestrator.cancel(); + } + finaliseBlock(): Promise { + return this.orchestrator.finaliseBlock(); + } + setBlockCompleted(): Promise { + return this.orchestrator.setBlockCompleted(); + } + addNewTx(tx: ProcessedTx): Promise { + return this.orchestrator.addNewTx(tx); + } +} + +export class OrchestratorBlockBuilderFactory { + constructor(private simulationProvider: SimulationProvider, private telemetry?: TelemetryClient) {} + + create(db: MerkleTreeOperations): BlockSimulator { + return new OrchestratorBlockBuilder(db, this.simulationProvider, this.telemetry ?? new NoopTelemetryClient()); + } +} diff --git a/yarn-project/sequencer-client/src/client/sequencer-client.ts b/yarn-project/sequencer-client/src/client/sequencer-client.ts index 02e17329981..0fade8075cd 100644 --- a/yarn-project/sequencer-client/src/client/sequencer-client.ts +++ b/yarn-project/sequencer-client/src/client/sequencer-client.ts @@ -1,12 +1,12 @@ -import { type L1ToL2MessageSource, type L2BlockSource } from '@aztec/circuit-types'; +import { type L1ToL2MessageSource, type L2BlockSource, type WorldStateSynchronizer } from '@aztec/circuit-types'; +import { type EthAddress } from '@aztec/foundation/eth-address'; import { type P2P } from '@aztec/p2p'; import { PublicProcessorFactory, type SimulationProvider } from '@aztec/simulator'; import { type TelemetryClient } from '@aztec/telemetry-client'; import { type ContractDataSource } from '@aztec/types/contracts'; import { type ValidatorClient } from '@aztec/validator-client'; -import { type WorldStateSynchronizer } from '@aztec/world-state'; -import { BlockBuilderFactory } from '../block_builder/index.js'; +import { LightweightBlockBuilderFactory } from '../block_builder/index.js'; import { type SequencerClientConfig } from '../config.js'; import { GlobalVariableBuilder } from '../global_variable_builder/index.js'; import { L1Publisher } from '../publisher/index.js'; @@ -60,7 +60,7 @@ export class SequencerClient { globalsBuilder, p2pClient, worldStateSynchronizer, - new BlockBuilderFactory(simulationProvider, telemetryClient), + new LightweightBlockBuilderFactory(telemetryClient), l2BlockSource, l1ToL2MessageSource, publicProcessorFactory, @@ -100,7 +100,7 @@ export class SequencerClient { this.sequencer.restart(); } - get coinbase() { + get coinbase(): EthAddress { return this.sequencer.coinbase; } diff --git a/yarn-project/sequencer-client/src/global_variable_builder/global_builder.ts b/yarn-project/sequencer-client/src/global_variable_builder/global_builder.ts index 91da4e1b46c..3d9a6e0d093 100644 --- a/yarn-project/sequencer-client/src/global_variable_builder/global_builder.ts +++ b/yarn-project/sequencer-client/src/global_variable_builder/global_builder.ts @@ -1,3 +1,4 @@ +import { type GlobalVariableBuilder as GlobalVariableBuilderInterface } from '@aztec/circuit-types'; import { type AztecAddress, ETHEREUM_SLOT_DURATION, @@ -24,7 +25,7 @@ import type * as chains from 'viem/chains'; /** * Simple global variables builder. */ -export class GlobalVariableBuilder { +export class GlobalVariableBuilder implements GlobalVariableBuilderInterface { private log = createDebugLogger('aztec:sequencer:global_variable_builder'); private rollupContract: GetContractReturnType>; diff --git a/yarn-project/sequencer-client/src/index.ts b/yarn-project/sequencer-client/src/index.ts index 155263344d6..66c24396853 100644 --- a/yarn-project/sequencer-client/src/index.ts +++ b/yarn-project/sequencer-client/src/index.ts @@ -2,10 +2,6 @@ export * from './client/index.js'; export * from './config.js'; export * from './publisher/index.js'; export * from './sequencer/index.js'; -export * from './tx_validator/aggregate_tx_validator.js'; -export * from './tx_validator/data_validator.js'; -export * from './tx_validator/double_spend_validator.js'; -export * from './tx_validator/metadata_validator.js'; // Used by the node to simulate public parts of transactions. Should these be moved to a shared library? export * from './global_variable_builder/index.js'; diff --git a/yarn-project/sequencer-client/src/publisher/l1-publisher.test.ts b/yarn-project/sequencer-client/src/publisher/l1-publisher.test.ts index 0d09e221cd0..a3e6d007c42 100644 --- a/yarn-project/sequencer-client/src/publisher/l1-publisher.test.ts +++ b/yarn-project/sequencer-client/src/publisher/l1-publisher.test.ts @@ -1,5 +1,6 @@ -import { L2Block, type ViemSignature } from '@aztec/circuit-types'; +import { L2Block } from '@aztec/circuit-types'; import { EthAddress } from '@aztec/circuits.js'; +import { type ViemSignature } from '@aztec/foundation/eth-signature'; import { sleep } from '@aztec/foundation/sleep'; import { RollupAbi } from '@aztec/l1-artifacts'; import { NoopTelemetryClient } from '@aztec/telemetry-client/noop'; diff --git a/yarn-project/sequencer-client/src/publisher/l1-publisher.ts b/yarn-project/sequencer-client/src/publisher/l1-publisher.ts index cfbd2a634da..6df5560d3b2 100644 --- a/yarn-project/sequencer-client/src/publisher/l1-publisher.ts +++ b/yarn-project/sequencer-client/src/publisher/l1-publisher.ts @@ -1,8 +1,8 @@ -import { type L2Block, type Signature, type TxHash } from '@aztec/circuit-types'; -import { getHashedSignaturePayload } from '@aztec/circuit-types'; +import { ConsensusPayload, type L2Block, type TxHash, getHashedSignaturePayload } from '@aztec/circuit-types'; import { type L1PublishBlockStats, type L1PublishProofStats } from '@aztec/circuit-types/stats'; import { ETHEREUM_SLOT_DURATION, EthAddress, type Header, type Proof } from '@aztec/circuits.js'; import { createEthereumChain } from '@aztec/ethereum'; +import { type Signature } from '@aztec/foundation/eth-signature'; import { type Fr } from '@aztec/foundation/fields'; import { createDebugLogger } from '@aztec/foundation/log'; import { serializeToBuffer } from '@aztec/foundation/serialize'; @@ -236,7 +236,9 @@ export class L1Publisher { blockHash: block.hash().toString(), }; - const digest = getHashedSignaturePayload(block.archive.root, txHashes ?? []); + const consensusPayload = new ConsensusPayload(block.header, block.archive.root, txHashes ?? []); + + const digest = getHashedSignaturePayload(consensusPayload); const proposeTxArgs = { header: block.header.toBuffer(), archive: block.archive.root.toBuffer(), @@ -255,7 +257,7 @@ export class L1Publisher { // By simulation issue, I mean the fact that the block.timestamp is equal to the last block, not the next, which // make time consistency checks break. await this.validateBlockForSubmission(block.header, { - digest, + digest: digest.toBuffer(), signatures: attestations ?? [], }); @@ -405,14 +407,12 @@ export class L1Publisher { }), }); - const min = (a: bigint, b: bigint) => (a > b ? b : a); - // @note We perform this guesstimate instead of the usual `gasEstimate` since // viem will use the current state to simulate against, which means that // we will fail estimation in the case where we are simulating for the // first ethereum block within our slot (as current time is not in the // slot yet). - const gasGuesstimate = min(computeTxsEffectsHashGas + L1Publisher.PROPOSE_GAS_GUESS, 15_000_000n); + const gasGuesstimate = computeTxsEffectsHashGas + L1Publisher.PROPOSE_GAS_GUESS; const attestations = encodedData.attestations ? encodedData.attestations.map(attest => attest.toViemSignature()) diff --git a/yarn-project/sequencer-client/src/sequencer/sequencer.test.ts b/yarn-project/sequencer-client/src/sequencer/sequencer.test.ts index f7bdf8c1323..2b20ac57113 100644 --- a/yarn-project/sequencer-client/src/sequencer/sequencer.test.ts +++ b/yarn-project/sequencer-client/src/sequencer/sequencer.test.ts @@ -2,6 +2,7 @@ import { BlockAttestation, BlockProposal, type BlockSimulator, + ConsensusPayload, type L1ToL2MessageSource, L2Block, type L2BlockSource, @@ -10,11 +11,12 @@ import { PROVING_STATUS, type ProvingSuccess, type ProvingTicket, - Signature, type Tx, TxHash, type UnencryptedL2Log, UnencryptedTxL2Logs, + WorldStateRunningState, + type WorldStateSynchronizer, makeProcessedTx, mockTxForRollup, } from '@aztec/circuit-types'; @@ -29,13 +31,13 @@ import { import { Buffer32 } from '@aztec/foundation/buffer'; import { times } from '@aztec/foundation/collection'; import { randomBytes } from '@aztec/foundation/crypto'; +import { Signature } from '@aztec/foundation/eth-signature'; import { type Writeable } from '@aztec/foundation/types'; import { type P2P, P2PClientState } from '@aztec/p2p'; import { type PublicProcessor, type PublicProcessorFactory } from '@aztec/simulator'; import { NoopTelemetryClient } from '@aztec/telemetry-client/noop'; import { type ContractDataSource } from '@aztec/types/contracts'; import { type ValidatorClient } from '@aztec/validator-client'; -import { WorldStateRunningState, type WorldStateSynchronizer } from '@aztec/world-state'; import { type MockProxy, mock, mockFn } from 'jest-mock-extended'; @@ -75,14 +77,14 @@ describe('sequencer', () => { const committee = [EthAddress.random()]; const getSignatures = () => [mockedSig]; const getAttestations = () => { - const attestation = new BlockAttestation(block.header, archive, [], mockedSig); + const attestation = new BlockAttestation(new ConsensusPayload(block.header, archive, []), mockedSig); (attestation as any).sender = committee[0]; return [attestation]; }; const createBlockProposal = () => { - return new BlockProposal(block.header, archive, [TxHash.random()], mockedSig); + return new BlockProposal(new ConsensusPayload(block.header, archive, [TxHash.random()]), mockedSig); }; let block: L2Block; @@ -207,7 +209,7 @@ describe('sequencer', () => { // Ok, we have an issue that we never actually call the process L2 block expect(publisher.proposeL2Block).toHaveBeenCalledTimes(1); expect(publisher.proposeL2Block).toHaveBeenCalledWith(block, getSignatures(), [txHash]); - expect(blockSimulator.cancelBlock).toHaveBeenCalledTimes(0); + expect(blockSimulator.cancel).toHaveBeenCalledTimes(0); }); it('builds a block when it is their turn', async () => { @@ -256,7 +258,7 @@ describe('sequencer', () => { Array(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP).fill(new Fr(0n)), ); expect(publisher.proposeL2Block).toHaveBeenCalledWith(block, getSignatures(), [txHash]); - expect(blockSimulator.cancelBlock).toHaveBeenCalledTimes(0); + expect(blockSimulator.cancel).toHaveBeenCalledTimes(0); }); it('builds a block out of several txs rejecting double spends', async () => { @@ -300,7 +302,7 @@ describe('sequencer', () => { ); expect(publisher.proposeL2Block).toHaveBeenCalledWith(block, getSignatures(), validTxHashes); expect(p2p.deleteTxs).toHaveBeenCalledWith([doubleSpendTx.getTxHash()]); - expect(blockSimulator.cancelBlock).toHaveBeenCalledTimes(0); + expect(blockSimulator.cancel).toHaveBeenCalledTimes(0); }); it('builds a block out of several txs rejecting incorrect chain ids', async () => { @@ -339,7 +341,7 @@ describe('sequencer', () => { ); expect(publisher.proposeL2Block).toHaveBeenCalledWith(block, getSignatures(), validTxHashes); expect(p2p.deleteTxs).toHaveBeenCalledWith([invalidChainTx.getTxHash()]); - expect(blockSimulator.cancelBlock).toHaveBeenCalledTimes(0); + expect(blockSimulator.cancel).toHaveBeenCalledTimes(0); }); it('builds a block out of several txs dropping the ones that go over max size', async () => { @@ -379,7 +381,7 @@ describe('sequencer', () => { Array(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP).fill(new Fr(0n)), ); expect(publisher.proposeL2Block).toHaveBeenCalledWith(block, getSignatures(), validTxHashes); - expect(blockSimulator.cancelBlock).toHaveBeenCalledTimes(0); + expect(blockSimulator.cancel).toHaveBeenCalledTimes(0); }); it('builds a block once it reaches the minimum number of transactions', async () => { @@ -430,7 +432,7 @@ describe('sequencer', () => { ); expect(publisher.proposeL2Block).toHaveBeenCalledTimes(1); expect(publisher.proposeL2Block).toHaveBeenCalledWith(block, getSignatures(), txHashes); - expect(blockSimulator.cancelBlock).toHaveBeenCalledTimes(0); + expect(blockSimulator.cancel).toHaveBeenCalledTimes(0); }); it('builds a block that contains zero real transactions once flushed', async () => { @@ -481,7 +483,7 @@ describe('sequencer', () => { ); expect(publisher.proposeL2Block).toHaveBeenCalledTimes(1); expect(publisher.proposeL2Block).toHaveBeenCalledWith(block, getSignatures(), []); - expect(blockSimulator.cancelBlock).toHaveBeenCalledTimes(0); + expect(blockSimulator.cancel).toHaveBeenCalledTimes(0); }); it('builds a block that contains less than the minimum number of transactions once flushed', async () => { @@ -535,7 +537,7 @@ describe('sequencer', () => { expect(publisher.proposeL2Block).toHaveBeenCalledTimes(1); expect(publisher.proposeL2Block).toHaveBeenCalledWith(block, getSignatures(), postFlushTxHashes); - expect(blockSimulator.cancelBlock).toHaveBeenCalledTimes(0); + expect(blockSimulator.cancel).toHaveBeenCalledTimes(0); }); it('aborts building a block if the chain moves underneath it', async () => { diff --git a/yarn-project/sequencer-client/src/sequencer/sequencer.ts b/yarn-project/sequencer-client/src/sequencer/sequencer.ts index 77f1f12f7aa..04426ee93d0 100644 --- a/yarn-project/sequencer-client/src/sequencer/sequencer.ts +++ b/yarn-project/sequencer-client/src/sequencer/sequencer.ts @@ -4,22 +4,24 @@ import { type L2Block, type L2BlockSource, type ProcessedTx, - Signature, Tx, type TxHash, type TxValidator, + type WorldStateStatus, + type WorldStateSynchronizer, } from '@aztec/circuit-types'; import { type AllowedElement, BlockProofError, PROVING_STATUS } from '@aztec/circuit-types/interfaces'; import { type L2BlockBuiltStats } from '@aztec/circuit-types/stats'; import { AppendOnlyTreeSnapshot, - AztecAddress, ContentCommitment, - EthAddress, GENESIS_ARCHIVE_ROOT, Header, StateReference, } from '@aztec/circuits.js'; +import { AztecAddress } from '@aztec/foundation/aztec-address'; +import { EthAddress } from '@aztec/foundation/eth-address'; +import { Signature } from '@aztec/foundation/eth-signature'; import { Fr } from '@aztec/foundation/fields'; import { createDebugLogger } from '@aztec/foundation/log'; import { RunningPromise } from '@aztec/foundation/running-promise'; @@ -28,7 +30,6 @@ import { type P2P } from '@aztec/p2p'; import { type PublicProcessorFactory } from '@aztec/simulator'; import { Attributes, type TelemetryClient, type Tracer, trackSpan } from '@aztec/telemetry-client'; import { type ValidatorClient } from '@aztec/validator-client'; -import { type WorldStateStatus, type WorldStateSynchronizer } from '@aztec/world-state'; import { type BlockBuilderFactory } from '../block_builder/index.js'; import { type GlobalVariableBuilder } from '../global_variable_builder/global_builder.js'; @@ -442,7 +443,7 @@ export class Sequencer { processedTxsCount: processedTxs.length, }) ) { - blockBuilder.cancelBlock(); + blockBuilder.cancel(); throw new Error('Should not propose the block'); } @@ -536,7 +537,7 @@ export class Sequencer { this.log.verbose(`Collected attestations from validators, number of attestations: ${attestations.length}`); // note: the smart contract requires that the signatures are provided in the order of the committee - return await orderAttestations(attestations, committee); + return orderAttestations(attestations, committee); } /** @@ -665,12 +666,12 @@ export enum SequencerState { * * @todo: perform this logic within the memory attestation store instead? */ -async function orderAttestations(attestations: BlockAttestation[], orderAddresses: EthAddress[]): Promise { +function orderAttestations(attestations: BlockAttestation[], orderAddresses: EthAddress[]): Signature[] { // Create a map of sender addresses to BlockAttestations const attestationMap = new Map(); for (const attestation of attestations) { - const sender = await attestation.getSender(); + const sender = attestation.getSender(); if (sender) { attestationMap.set(sender.toString(), attestation); } diff --git a/yarn-project/sequencer-client/src/tx_validator/gas_validator.ts b/yarn-project/sequencer-client/src/tx_validator/gas_validator.ts index ea93d51cafa..4173eb3691d 100644 --- a/yarn-project/sequencer-client/src/tx_validator/gas_validator.ts +++ b/yarn-project/sequencer-client/src/tx_validator/gas_validator.ts @@ -1,8 +1,8 @@ -import { PublicKernelType, type Tx, type TxValidator } from '@aztec/circuit-types'; +import { PublicKernelPhase, type Tx, type TxValidator } from '@aztec/circuit-types'; import { type AztecAddress, type Fr } from '@aztec/circuits.js'; import { createDebugLogger } from '@aztec/foundation/log'; import { FeeJuiceArtifact } from '@aztec/protocol-contracts/fee-juice'; -import { AbstractPhaseManager, computeFeePayerBalanceStorageSlot } from '@aztec/simulator'; +import { EnqueuedCallsProcessor, computeFeePayerBalanceStorageSlot } from '@aztec/simulator'; /** Provides a view into public contract state */ export interface PublicStateSource { @@ -34,6 +34,10 @@ export class GasTxValidator implements TxValidator { return [validTxs, invalidTxs]; } + validateTx(tx: Tx): Promise { + return this.#validateTxFee(tx); + } + async #validateTxFee(tx: Tx): Promise { const feePayer = tx.data.feePayer; // TODO(@spalladino) Eventually remove the is_zero condition as we should always charge fees to every tx @@ -55,7 +59,7 @@ export class GasTxValidator implements TxValidator { ); // If there is a claim in this tx that increases the fee payer balance in Fee Juice, add it to balance - const { [PublicKernelType.SETUP]: setupFns } = AbstractPhaseManager.extractEnqueuedPublicCallsByPhase(tx); + const setupFns = EnqueuedCallsProcessor.getExecutionRequestsByPhase(tx, PublicKernelPhase.SETUP); const claimFunctionCall = setupFns.find( fn => fn.contractAddress.equals(this.#feeJuiceAddress) && diff --git a/yarn-project/sequencer-client/src/tx_validator/phases_validator.ts b/yarn-project/sequencer-client/src/tx_validator/phases_validator.ts index 345fd066ef3..053a4a8d333 100644 --- a/yarn-project/sequencer-client/src/tx_validator/phases_validator.ts +++ b/yarn-project/sequencer-client/src/tx_validator/phases_validator.ts @@ -1,12 +1,12 @@ import { type AllowedElement, type PublicExecutionRequest, - PublicKernelType, + PublicKernelPhase, Tx, type TxValidator, } from '@aztec/circuit-types'; import { createDebugLogger } from '@aztec/foundation/log'; -import { AbstractPhaseManager, ContractsDataSourcePublicDB } from '@aztec/simulator'; +import { ContractsDataSourcePublicDB, EnqueuedCallsProcessor } from '@aztec/simulator'; import { type ContractDataSource } from '@aztec/types/contracts'; export class PhasesTxValidator implements TxValidator { @@ -27,7 +27,7 @@ export class PhasesTxValidator implements TxValidator { // which is what we're trying to do as part of the current txs. await this.contractDataSource.addNewContracts(tx); - if (await this.#validateTx(tx)) { + if (await this.validateTx(tx)) { validTxs.push(tx); } else { invalidTxs.push(tx); @@ -39,14 +39,13 @@ export class PhasesTxValidator implements TxValidator { return Promise.resolve([validTxs, invalidTxs]); } - async #validateTx(tx: Tx): Promise { + async validateTx(tx: Tx): Promise { if (!tx.data.forPublic) { this.#log.debug(`Tx ${Tx.getHash(tx)} does not contain enqueued public functions. Skipping phases validation.`); return true; } - const { [PublicKernelType.SETUP]: setupFns } = AbstractPhaseManager.extractEnqueuedPublicCallsByPhase(tx); - + const setupFns = EnqueuedCallsProcessor.getExecutionRequestsByPhase(tx, PublicKernelPhase.SETUP); for (const setupFn of setupFns) { if (!(await this.isOnAllowList(setupFn, this.setupAllowList))) { this.#log.warn( diff --git a/yarn-project/sequencer-client/src/tx_validator/test_utils.ts b/yarn-project/sequencer-client/src/tx_validator/test_utils.ts index 76d620754d2..1ac09efd7df 100644 --- a/yarn-project/sequencer-client/src/tx_validator/test_utils.ts +++ b/yarn-project/sequencer-client/src/tx_validator/test_utils.ts @@ -32,9 +32,9 @@ function patchFn( tx.enqueuedPublicFunctionCalls[index] = fn; const request = tx.data.forPublic![where].publicCallStack[index]; - request.item.contractAddress = fn.contractAddress; - request.item.callContext = fn.callContext; - request.item.argsHash = computeVarArgsHash(fn.args); + request.contractAddress = fn.contractAddress; + request.callContext = fn.callContext; + request.argsHash = computeVarArgsHash(fn.args); tx.data.forPublic![where].publicCallStack[index] = request; return { diff --git a/yarn-project/sequencer-client/src/tx_validator/tx_validator_factory.ts b/yarn-project/sequencer-client/src/tx_validator/tx_validator_factory.ts index 97f50cf4fae..410322968e5 100644 --- a/yarn-project/sequencer-client/src/tx_validator/tx_validator_factory.ts +++ b/yarn-project/sequencer-client/src/tx_validator/tx_validator_factory.ts @@ -1,15 +1,12 @@ import { type AllowedElement, type ProcessedTx, type Tx, type TxValidator } from '@aztec/circuit-types'; import { type GlobalVariables } from '@aztec/circuits.js'; +import { AggregateTxValidator, DataTxValidator, DoubleSpendTxValidator, MetadataTxValidator } from '@aztec/p2p'; import { FeeJuiceAddress } from '@aztec/protocol-contracts/fee-juice'; -import { WorldStateDB, WorldStatePublicDB } from '@aztec/simulator'; +import { WorldStateDB } from '@aztec/simulator'; import { type ContractDataSource } from '@aztec/types/contracts'; import { type MerkleTreeOperations } from '@aztec/world-state'; -import { AggregateTxValidator } from './aggregate_tx_validator.js'; -import { DataTxValidator } from './data_validator.js'; -import { DoubleSpendTxValidator } from './double_spend_validator.js'; import { GasTxValidator } from './gas_validator.js'; -import { MetadataTxValidator } from './metadata_validator.js'; import { PhasesTxValidator } from './phases_validator.js'; export class TxValidatorFactory { @@ -20,16 +17,17 @@ export class TxValidatorFactory { ) {} validatorForNewTxs(globalVariables: GlobalVariables, setupAllowList: AllowedElement[]): TxValidator { + const worldStateDB = new WorldStateDB(this.merkleTreeDb, this.contractDataSource); return new AggregateTxValidator( new DataTxValidator(), - new MetadataTxValidator(globalVariables), - new DoubleSpendTxValidator(new WorldStateDB(this.merkleTreeDb)), + new MetadataTxValidator(globalVariables.chainId, globalVariables.blockNumber), + new DoubleSpendTxValidator(worldStateDB), new PhasesTxValidator(this.contractDataSource, setupAllowList), - new GasTxValidator(new WorldStatePublicDB(this.merkleTreeDb), FeeJuiceAddress, this.enforceFees), + new GasTxValidator(worldStateDB, FeeJuiceAddress, this.enforceFees), ); } validatorForProcessedTxs(): TxValidator { - return new DoubleSpendTxValidator(new WorldStateDB(this.merkleTreeDb)); + return new DoubleSpendTxValidator(new WorldStateDB(this.merkleTreeDb, this.contractDataSource)); } } diff --git a/yarn-project/simulator/src/avm/avm_context.test.ts b/yarn-project/simulator/src/avm/avm_context.test.ts index a96d8898306..0c58acee4cb 100644 --- a/yarn-project/simulator/src/avm/avm_context.test.ts +++ b/yarn-project/simulator/src/avm/avm_context.test.ts @@ -1,6 +1,6 @@ import { AztecAddress, Fr } from '@aztec/circuits.js'; -import { allSameExcept, anyAvmContextInputs, initContext } from './fixtures/index.js'; +import { allSameExcept, initContext } from './fixtures/index.js'; describe('Avm Context', () => { it('New call should fork context correctly', () => { @@ -17,8 +17,7 @@ describe('Avm Context', () => { address: newAddress, storageAddress: newAddress, contractCallDepth: Fr.ONE, - // Calldata also includes AvmContextInputs - calldata: anyAvmContextInputs().concat(newCalldata), + calldata: newCalldata, isStaticCall: false, }), ); @@ -48,8 +47,7 @@ describe('Avm Context', () => { address: newAddress, storageAddress: newAddress, contractCallDepth: Fr.ONE, - // Calldata also includes AvmContextInputs - calldata: anyAvmContextInputs().concat(newCalldata), + calldata: newCalldata, isStaticCall: true, }), ); diff --git a/yarn-project/simulator/src/avm/avm_execution_environment.test.ts b/yarn-project/simulator/src/avm/avm_execution_environment.test.ts index e13f3f248d7..de9270d0ef0 100644 --- a/yarn-project/simulator/src/avm/avm_execution_environment.test.ts +++ b/yarn-project/simulator/src/avm/avm_execution_environment.test.ts @@ -1,7 +1,7 @@ import { FunctionSelector } from '@aztec/circuits.js'; import { Fr } from '@aztec/foundation/fields'; -import { allSameExcept, anyAvmContextInputs, initExecutionEnvironment } from './fixtures/index.js'; +import { allSameExcept, initExecutionEnvironment } from './fixtures/index.js'; describe('Execution Environment', () => { const newAddress = new Fr(123456n); @@ -17,8 +17,7 @@ describe('Execution Environment', () => { address: newAddress, storageAddress: newAddress, contractCallDepth: Fr.ONE, - // Calldata also includes AvmContextInputs - calldata: anyAvmContextInputs().concat(calldata), + calldata: calldata, }), ); }); @@ -33,8 +32,7 @@ describe('Execution Environment', () => { address: newAddress, contractCallDepth: Fr.ONE, isDelegateCall: true, - // Calldata also includes AvmContextInputs - calldata: anyAvmContextInputs().concat(calldata), + calldata: calldata, }), ); }); @@ -53,8 +51,7 @@ describe('Execution Environment', () => { storageAddress: newAddress, contractCallDepth: Fr.ONE, isStaticCall: true, - // Calldata also includes AvmContextInputs - calldata: anyAvmContextInputs().concat(calldata), + calldata: calldata, }), ); }); diff --git a/yarn-project/simulator/src/avm/avm_execution_environment.ts b/yarn-project/simulator/src/avm/avm_execution_environment.ts index 99c55567942..9e067710bda 100644 --- a/yarn-project/simulator/src/avm/avm_execution_environment.ts +++ b/yarn-project/simulator/src/avm/avm_execution_environment.ts @@ -2,16 +2,6 @@ import { FunctionSelector, type GlobalVariables, type Header } from '@aztec/circ import { type AztecAddress } from '@aztec/foundation/aztec-address'; import { Fr } from '@aztec/foundation/fields'; -export class AvmContextInputs { - static readonly SIZE = 2; - - constructor(private calldataSize: Fr, private isStaticCall: boolean) {} - - public toFields(): Fr[] { - return [this.calldataSize, new Fr(this.isStaticCall)]; - } -} - /** * Contains variables that remain constant during AVM execution * These variables are provided by the public kernel circuit @@ -29,12 +19,7 @@ export class AvmExecutionEnvironment { public readonly isStaticCall: boolean, public readonly isDelegateCall: boolean, public readonly calldata: Fr[], - ) { - // We encode some extra inputs (AvmContextInputs) in calldata. - // This will have to go once we move away from one proof per call. - const inputs = new AvmContextInputs(new Fr(calldata.length), isStaticCall).toFields(); - this.calldata = [...inputs, ...calldata]; - } + ) {} private deriveEnvironmentForNestedCallInternal( targetAddress: AztecAddress, @@ -93,9 +78,4 @@ export class AvmExecutionEnvironment { ): AvmExecutionEnvironment { throw new Error('Delegate calls not supported!'); } - - public getCalldataWithoutPrefix(): Fr[] { - // clip off the first few entries - return this.calldata.slice(AvmContextInputs.SIZE); - } } diff --git a/yarn-project/simulator/src/avm/avm_gas.ts b/yarn-project/simulator/src/avm/avm_gas.ts index 01140e99d32..3ef1ecc19e1 100644 --- a/yarn-project/simulator/src/avm/avm_gas.ts +++ b/yarn-project/simulator/src/avm/avm_gas.ts @@ -53,10 +53,10 @@ function makeCost(l2Gas: number, daGas: number): Gas { } /** Dimensions of gas usage: L1, L2, and DA. */ -export const GasDimensions = ['l2Gas', 'daGas'] as const; +export const GAS_DIMENSIONS = ['l2Gas', 'daGas'] as const; /** Base gas costs for each instruction. Additional gas cost may be added on top due to memory or storage accesses, etc. */ -const BaseGasCosts: Record = { +const BASE_GAS_COSTS: Record = { [Opcode.ADD_8]: makeCost(c.AVM_ADD_BASE_L2_GAS, 0), [Opcode.ADD_16]: makeCost(c.AVM_ADD_BASE_L2_GAS, 0), [Opcode.SUB_8]: makeCost(c.AVM_SUB_BASE_L2_GAS, 0), @@ -87,20 +87,8 @@ const BaseGasCosts: Record = { [Opcode.SHR_16]: makeCost(c.AVM_SHR_BASE_L2_GAS, 0), [Opcode.CAST_8]: makeCost(c.AVM_CAST_BASE_L2_GAS, 0), [Opcode.CAST_16]: makeCost(c.AVM_CAST_BASE_L2_GAS, 0), - [Opcode.ADDRESS]: makeCost(c.AVM_ADDRESS_BASE_L2_GAS, 0), - [Opcode.STORAGEADDRESS]: makeCost(c.AVM_STORAGEADDRESS_BASE_L2_GAS, 0), - [Opcode.SENDER]: makeCost(c.AVM_SENDER_BASE_L2_GAS, 0), - [Opcode.FEEPERL2GAS]: makeCost(c.AVM_FEEPERL2GAS_BASE_L2_GAS, 0), - [Opcode.FEEPERDAGAS]: makeCost(c.AVM_FEEPERDAGAS_BASE_L2_GAS, 0), - [Opcode.TRANSACTIONFEE]: makeCost(c.AVM_TRANSACTIONFEE_BASE_L2_GAS, 0), - [Opcode.FUNCTIONSELECTOR]: makeCost(c.AVM_FUNCTIONSELECTOR_BASE_L2_GAS, 0), - [Opcode.CHAINID]: makeCost(c.AVM_CHAINID_BASE_L2_GAS, 0), - [Opcode.VERSION]: makeCost(c.AVM_VERSION_BASE_L2_GAS, 0), - [Opcode.BLOCKNUMBER]: makeCost(c.AVM_BLOCKNUMBER_BASE_L2_GAS, 0), - [Opcode.TIMESTAMP]: makeCost(c.AVM_TIMESTAMP_BASE_L2_GAS, 0), + [Opcode.GETENVVAR_16]: makeCost(c.AVM_GETENVVAR_BASE_L2_GAS, 0), [Opcode.CALLDATACOPY]: makeCost(c.AVM_CALLDATACOPY_BASE_L2_GAS, 0), - [Opcode.L2GASLEFT]: makeCost(c.AVM_L2GASLEFT_BASE_L2_GAS, 0), - [Opcode.DAGASLEFT]: makeCost(c.AVM_DAGASLEFT_BASE_L2_GAS, 0), [Opcode.JUMP_16]: makeCost(c.AVM_JUMP_BASE_L2_GAS, 0), [Opcode.JUMPI_16]: makeCost(c.AVM_JUMPI_BASE_L2_GAS, 0), [Opcode.INTERNALCALL]: makeCost(c.AVM_INTERNALCALL_BASE_L2_GAS, 0), @@ -115,14 +103,14 @@ const BaseGasCosts: Record = { [Opcode.MOV_16]: makeCost(c.AVM_MOV_BASE_L2_GAS, 0), [Opcode.CMOV]: makeCost(c.AVM_CMOV_BASE_L2_GAS, 0), [Opcode.SLOAD]: makeCost(c.AVM_SLOAD_BASE_L2_GAS, 0), - [Opcode.SSTORE]: makeCost(c.AVM_SSTORE_BASE_L2_GAS, 0), + [Opcode.SSTORE]: makeCost(c.AVM_SSTORE_BASE_L2_GAS, c.AVM_SSTORE_BASE_DA_GAS), [Opcode.NOTEHASHEXISTS]: makeCost(c.AVM_NOTEHASHEXISTS_BASE_L2_GAS, 0), - [Opcode.EMITNOTEHASH]: makeCost(c.AVM_EMITNOTEHASH_BASE_L2_GAS, 0), + [Opcode.EMITNOTEHASH]: makeCost(c.AVM_EMITNOTEHASH_BASE_L2_GAS, c.AVM_EMITNOTEHASH_BASE_DA_GAS), [Opcode.NULLIFIEREXISTS]: makeCost(c.AVM_NULLIFIEREXISTS_BASE_L2_GAS, 0), - [Opcode.EMITNULLIFIER]: makeCost(c.AVM_EMITNULLIFIER_BASE_L2_GAS, 0), + [Opcode.EMITNULLIFIER]: makeCost(c.AVM_EMITNULLIFIER_BASE_L2_GAS, c.AVM_EMITNULLIFIER_BASE_DA_GAS), [Opcode.L1TOL2MSGEXISTS]: makeCost(c.AVM_L1TOL2MSGEXISTS_BASE_L2_GAS, 0), [Opcode.EMITUNENCRYPTEDLOG]: makeCost(c.AVM_EMITUNENCRYPTEDLOG_BASE_L2_GAS, 0), - [Opcode.SENDL2TOL1MSG]: makeCost(c.AVM_SENDL2TOL1MSG_BASE_L2_GAS, 0), + [Opcode.SENDL2TOL1MSG]: makeCost(c.AVM_SENDL2TOL1MSG_BASE_L2_GAS, c.AVM_SENDL2TOL1MSG_BASE_DA_GAS), [Opcode.GETCONTRACTINSTANCE]: makeCost(c.AVM_GETCONTRACTINSTANCE_BASE_L2_GAS, 0), [Opcode.CALL]: makeCost(c.AVM_CALL_BASE_L2_GAS, 0), [Opcode.STATICCALL]: makeCost(c.AVM_STATICCALL_BASE_L2_GAS, 0), @@ -133,110 +121,37 @@ const BaseGasCosts: Record = { [Opcode.DEBUGLOG]: makeCost(c.AVM_DEBUGLOG_BASE_L2_GAS, 0), [Opcode.KECCAK]: makeCost(c.AVM_KECCAK_BASE_L2_GAS, 0), [Opcode.POSEIDON2]: makeCost(c.AVM_POSEIDON2_BASE_L2_GAS, 0), - [Opcode.SHA256]: makeCost(c.AVM_SHA256_BASE_L2_GAS, 0), + [Opcode.SHA256COMPRESSION]: makeCost(c.AVM_SHA256COMPRESSION_BASE_L2_GAS, 0), + [Opcode.KECCAKF1600]: makeCost(c.AVM_KECCAKF1600_BASE_L2_GAS, 0), [Opcode.PEDERSEN]: makeCost(c.AVM_PEDERSEN_BASE_L2_GAS, 0), [Opcode.ECADD]: makeCost(c.AVM_ECADD_BASE_L2_GAS, 0), [Opcode.MSM]: makeCost(c.AVM_MSM_BASE_L2_GAS, 0), [Opcode.PEDERSENCOMMITMENT]: makeCost(c.AVM_PEDERSENCOMMITMENT_BASE_L2_GAS, 0), [Opcode.TORADIXLE]: makeCost(c.AVM_TORADIXLE_BASE_L2_GAS, 0), - [Opcode.SHA256COMPRESSION]: makeCost(c.AVM_SHA256COMPRESSION_BASE_L2_GAS, 0), - [Opcode.KECCAKF1600]: makeCost(c.AVM_KECCAKF1600_BASE_L2_GAS, 0), }; -const DynamicGasCosts: Record = { - [Opcode.ADD_8]: makeCost(c.AVM_ADD_DYN_L2_GAS, 0), - [Opcode.ADD_16]: makeCost(c.AVM_ADD_DYN_L2_GAS, 0), - [Opcode.SUB_8]: makeCost(c.AVM_SUB_DYN_L2_GAS, 0), - [Opcode.SUB_16]: makeCost(c.AVM_SUB_DYN_L2_GAS, 0), - [Opcode.MUL_8]: makeCost(c.AVM_MUL_DYN_L2_GAS, 0), - [Opcode.MUL_16]: makeCost(c.AVM_MUL_DYN_L2_GAS, 0), - [Opcode.DIV_8]: makeCost(c.AVM_DIV_DYN_L2_GAS, 0), - [Opcode.DIV_16]: makeCost(c.AVM_DIV_DYN_L2_GAS, 0), - [Opcode.FDIV_8]: makeCost(c.AVM_FDIV_DYN_L2_GAS, 0), - [Opcode.FDIV_16]: makeCost(c.AVM_FDIV_DYN_L2_GAS, 0), - [Opcode.EQ_8]: makeCost(c.AVM_EQ_DYN_L2_GAS, 0), - [Opcode.EQ_16]: makeCost(c.AVM_EQ_DYN_L2_GAS, 0), - [Opcode.LT_8]: makeCost(c.AVM_LT_DYN_L2_GAS, 0), - [Opcode.LT_16]: makeCost(c.AVM_LT_DYN_L2_GAS, 0), - [Opcode.LTE_8]: makeCost(c.AVM_LTE_DYN_L2_GAS, 0), - [Opcode.LTE_16]: makeCost(c.AVM_LTE_DYN_L2_GAS, 0), - [Opcode.AND_8]: makeCost(c.AVM_AND_DYN_L2_GAS, 0), - [Opcode.AND_16]: makeCost(c.AVM_AND_DYN_L2_GAS, 0), - [Opcode.OR_8]: makeCost(c.AVM_OR_DYN_L2_GAS, 0), - [Opcode.OR_16]: makeCost(c.AVM_OR_DYN_L2_GAS, 0), - [Opcode.XOR_8]: makeCost(c.AVM_XOR_DYN_L2_GAS, 0), - [Opcode.XOR_16]: makeCost(c.AVM_XOR_DYN_L2_GAS, 0), - [Opcode.NOT_8]: makeCost(c.AVM_NOT_DYN_L2_GAS, 0), - [Opcode.NOT_16]: makeCost(c.AVM_NOT_DYN_L2_GAS, 0), - [Opcode.SHL_8]: makeCost(c.AVM_SHL_DYN_L2_GAS, 0), - [Opcode.SHL_16]: makeCost(c.AVM_SHL_DYN_L2_GAS, 0), - [Opcode.SHR_8]: makeCost(c.AVM_SHR_DYN_L2_GAS, 0), - [Opcode.SHR_16]: makeCost(c.AVM_SHR_DYN_L2_GAS, 0), - [Opcode.CAST_8]: makeCost(c.AVM_CAST_DYN_L2_GAS, 0), - [Opcode.CAST_16]: makeCost(c.AVM_CAST_DYN_L2_GAS, 0), - [Opcode.ADDRESS]: makeCost(c.AVM_ADDRESS_DYN_L2_GAS, 0), - [Opcode.STORAGEADDRESS]: makeCost(c.AVM_STORAGEADDRESS_DYN_L2_GAS, 0), - [Opcode.SENDER]: makeCost(c.AVM_SENDER_DYN_L2_GAS, 0), - [Opcode.FEEPERL2GAS]: makeCost(c.AVM_FEEPERL2GAS_DYN_L2_GAS, 0), - [Opcode.FEEPERDAGAS]: makeCost(c.AVM_FEEPERDAGAS_DYN_L2_GAS, 0), - [Opcode.TRANSACTIONFEE]: makeCost(c.AVM_TRANSACTIONFEE_DYN_L2_GAS, 0), - [Opcode.FUNCTIONSELECTOR]: makeCost(c.AVM_FUNCTIONSELECTOR_DYN_L2_GAS, 0), - [Opcode.CHAINID]: makeCost(c.AVM_CHAINID_DYN_L2_GAS, 0), - [Opcode.VERSION]: makeCost(c.AVM_VERSION_DYN_L2_GAS, 0), - [Opcode.BLOCKNUMBER]: makeCost(c.AVM_BLOCKNUMBER_DYN_L2_GAS, 0), - [Opcode.TIMESTAMP]: makeCost(c.AVM_TIMESTAMP_DYN_L2_GAS, 0), - [Opcode.CALLDATACOPY]: makeCost(c.AVM_CALLDATACOPY_DYN_L2_GAS, 0), - [Opcode.L2GASLEFT]: makeCost(c.AVM_L2GASLEFT_DYN_L2_GAS, 0), - [Opcode.DAGASLEFT]: makeCost(c.AVM_DAGASLEFT_DYN_L2_GAS, 0), - [Opcode.JUMP_16]: makeCost(c.AVM_JUMP_DYN_L2_GAS, 0), - [Opcode.JUMPI_16]: makeCost(c.AVM_JUMPI_DYN_L2_GAS, 0), - [Opcode.INTERNALCALL]: makeCost(c.AVM_INTERNALCALL_DYN_L2_GAS, 0), - [Opcode.INTERNALRETURN]: makeCost(c.AVM_INTERNALRETURN_DYN_L2_GAS, 0), - [Opcode.SET_8]: makeCost(c.AVM_SET_DYN_L2_GAS, 0), - [Opcode.SET_16]: makeCost(c.AVM_SET_DYN_L2_GAS, 0), - [Opcode.SET_32]: makeCost(c.AVM_SET_DYN_L2_GAS, 0), - [Opcode.SET_64]: makeCost(c.AVM_SET_DYN_L2_GAS, 0), - [Opcode.SET_128]: makeCost(c.AVM_SET_DYN_L2_GAS, 0), - [Opcode.SET_FF]: makeCost(c.AVM_SET_DYN_L2_GAS, 0), - [Opcode.MOV_8]: makeCost(c.AVM_MOV_DYN_L2_GAS, 0), - [Opcode.MOV_16]: makeCost(c.AVM_MOV_DYN_L2_GAS, 0), - [Opcode.CMOV]: makeCost(c.AVM_CMOV_DYN_L2_GAS, 0), - [Opcode.SLOAD]: makeCost(c.AVM_SLOAD_DYN_L2_GAS, 0), - [Opcode.SSTORE]: makeCost(c.AVM_SSTORE_DYN_L2_GAS, 0), - [Opcode.NOTEHASHEXISTS]: makeCost(c.AVM_NOTEHASHEXISTS_DYN_L2_GAS, 0), - [Opcode.EMITNOTEHASH]: makeCost(c.AVM_EMITNOTEHASH_DYN_L2_GAS, 0), - [Opcode.NULLIFIEREXISTS]: makeCost(c.AVM_NULLIFIEREXISTS_DYN_L2_GAS, 0), - [Opcode.EMITNULLIFIER]: makeCost(c.AVM_EMITNULLIFIER_DYN_L2_GAS, 0), - [Opcode.L1TOL2MSGEXISTS]: makeCost(c.AVM_L1TOL2MSGEXISTS_DYN_L2_GAS, 0), - [Opcode.EMITUNENCRYPTEDLOG]: makeCost(c.AVM_EMITUNENCRYPTEDLOG_DYN_L2_GAS, 0), - [Opcode.SENDL2TOL1MSG]: makeCost(c.AVM_SENDL2TOL1MSG_DYN_L2_GAS, 0), - [Opcode.GETCONTRACTINSTANCE]: makeCost(c.AVM_GETCONTRACTINSTANCE_DYN_L2_GAS, 0), - [Opcode.CALL]: makeCost(c.AVM_CALL_DYN_L2_GAS, 0), - [Opcode.STATICCALL]: makeCost(c.AVM_STATICCALL_DYN_L2_GAS, 0), - [Opcode.DELEGATECALL]: makeCost(c.AVM_DELEGATECALL_DYN_L2_GAS, 0), - [Opcode.RETURN]: makeCost(c.AVM_RETURN_DYN_L2_GAS, 0), - [Opcode.REVERT_8]: makeCost(c.AVM_REVERT_DYN_L2_GAS, 0), - [Opcode.REVERT_16]: makeCost(c.AVM_REVERT_DYN_L2_GAS, 0), - [Opcode.DEBUGLOG]: makeCost(c.AVM_DEBUGLOG_DYN_L2_GAS, 0), - [Opcode.KECCAK]: makeCost(c.AVM_KECCAK_DYN_L2_GAS, 0), - [Opcode.POSEIDON2]: makeCost(c.AVM_POSEIDON2_DYN_L2_GAS, 0), - [Opcode.SHA256]: makeCost(c.AVM_SHA256_DYN_L2_GAS, 0), - [Opcode.PEDERSEN]: makeCost(c.AVM_PEDERSEN_DYN_L2_GAS, 0), - [Opcode.ECADD]: makeCost(c.AVM_ECADD_DYN_L2_GAS, 0), - [Opcode.MSM]: makeCost(c.AVM_MSM_DYN_L2_GAS, 0), - [Opcode.PEDERSENCOMMITMENT]: makeCost(c.AVM_PEDERSENCOMMITMENT_DYN_L2_GAS, 0), - [Opcode.TORADIXLE]: makeCost(c.AVM_TORADIXLE_DYN_L2_GAS, 0), - [Opcode.SHA256COMPRESSION]: makeCost(c.AVM_SHA256COMPRESSION_DYN_L2_GAS, 0), - [Opcode.KECCAKF1600]: makeCost(c.AVM_KECCAKF1600_DYN_L2_GAS, 0), -}; +const DYNAMIC_GAS_COSTS = new Map([ + [Opcode.CALLDATACOPY, makeCost(c.AVM_CALLDATACOPY_DYN_L2_GAS, 0)], + [Opcode.EMITUNENCRYPTEDLOG, makeCost(c.AVM_EMITUNENCRYPTEDLOG_DYN_L2_GAS, c.AVM_EMITUNENCRYPTEDLOG_DYN_DA_GAS)], + [Opcode.CALL, makeCost(c.AVM_CALL_DYN_L2_GAS, 0)], + [Opcode.STATICCALL, makeCost(c.AVM_STATICCALL_DYN_L2_GAS, 0)], + [Opcode.DELEGATECALL, makeCost(c.AVM_DELEGATECALL_DYN_L2_GAS, 0)], + [Opcode.RETURN, makeCost(c.AVM_RETURN_DYN_L2_GAS, 0)], + [Opcode.REVERT_8, makeCost(c.AVM_REVERT_DYN_L2_GAS, 0)], + [Opcode.REVERT_16, makeCost(c.AVM_REVERT_DYN_L2_GAS, 0)], + [Opcode.PEDERSEN, makeCost(c.AVM_PEDERSEN_DYN_L2_GAS, 0)], + [Opcode.MSM, makeCost(c.AVM_MSM_DYN_L2_GAS, 0)], + [Opcode.PEDERSENCOMMITMENT, makeCost(c.AVM_PEDERSENCOMMITMENT_DYN_L2_GAS, 0)], + [Opcode.TORADIXLE, makeCost(c.AVM_TORADIXLE_DYN_L2_GAS, 0)], +]); /** Returns the fixed base gas cost for a given opcode. */ export function getBaseGasCost(opcode: Opcode): Gas { - return BaseGasCosts[opcode]; + return BASE_GAS_COSTS[opcode]; } export function getDynamicGasCost(opcode: Opcode): Gas { - return DynamicGasCosts[opcode]; + return DYNAMIC_GAS_COSTS.has(opcode) ? DYNAMIC_GAS_COSTS.get(opcode)! : makeCost(0, 0); } /** Returns the gas cost associated with the memory operations performed. */ @@ -244,14 +159,14 @@ export function getMemoryGasCost(args: { reads?: number; writes?: number; indire const { reads, writes, indirect } = args; const indirectCount = Addressing.fromWire(indirect ?? 0).count(AddressingMode.INDIRECT); const l2MemoryGasCost = - (reads ?? 0) * GasCostConstants.MEMORY_READ + - (writes ?? 0) * GasCostConstants.MEMORY_WRITE + - indirectCount * GasCostConstants.MEMORY_INDIRECT_READ_PENALTY; + (reads ?? 0) * GAS_COST_CONSTANTS.MEMORY_READ + + (writes ?? 0) * GAS_COST_CONSTANTS.MEMORY_WRITE + + indirectCount * GAS_COST_CONSTANTS.MEMORY_INDIRECT_READ_PENALTY; return makeGas({ l2Gas: l2MemoryGasCost }); } /** Constants used in base cost calculations. */ -export const GasCostConstants = { +export const GAS_COST_CONSTANTS = { MEMORY_READ: 10, MEMORY_INDIRECT_READ_PENALTY: 10, MEMORY_WRITE: 100, @@ -265,6 +180,7 @@ export function getGasCostForTypeTag(tag: TypeTag, baseCost: Gas) { /** Returns a multiplier based on the size of the type represented by the tag. Throws on uninitialized or invalid. */ function getGasCostMultiplierFromTypeTag(tag: TypeTag) { switch (tag) { + case TypeTag.UINT1: // same as u8 case TypeTag.UINT8: return 1; case TypeTag.UINT16: diff --git a/yarn-project/simulator/src/avm/avm_machine_state.ts b/yarn-project/simulator/src/avm/avm_machine_state.ts index 740f607bafb..b9a46e8cb9b 100644 --- a/yarn-project/simulator/src/avm/avm_machine_state.ts +++ b/yarn-project/simulator/src/avm/avm_machine_state.ts @@ -1,6 +1,6 @@ import { type Fr } from '@aztec/circuits.js'; -import { type Gas, GasDimensions } from './avm_gas.js'; +import { GAS_DIMENSIONS, type Gas } from './avm_gas.js'; import { TaggedMemory } from './avm_memory_types.js'; import { OutOfGasError } from './errors.js'; @@ -67,7 +67,7 @@ export class AvmMachineState { */ public consumeGas(gasCost: Partial) { // Assert there is enough gas on every dimension. - const outOfGasDimensions = GasDimensions.filter( + const outOfGasDimensions = GAS_DIMENSIONS.filter( dimension => this[`${dimension}Left`] - (gasCost[dimension] ?? 0) < 0, ); // If not, trigger an exceptional halt. @@ -77,14 +77,14 @@ export class AvmMachineState { throw new OutOfGasError(outOfGasDimensions); } // Otherwise, charge the corresponding gas - for (const dimension of GasDimensions) { + for (const dimension of GAS_DIMENSIONS) { this[`${dimension}Left`] -= gasCost[dimension] ?? 0; } } /** Increases the gas left by the amounts specified. */ public refundGas(gasRefund: Partial) { - for (const dimension of GasDimensions) { + for (const dimension of GAS_DIMENSIONS) { this[`${dimension}Left`] += gasRefund[dimension] ?? 0; } } @@ -133,7 +133,7 @@ export class AvmMachineState { * Flag an exceptional halt. Clears gas left and sets the reverted flag. No output data. */ private exceptionalHalt() { - GasDimensions.forEach(dimension => (this[`${dimension}Left`] = 0)); + GAS_DIMENSIONS.forEach(dimension => (this[`${dimension}Left`] = 0)); this.reverted = true; this.halted = true; } diff --git a/yarn-project/simulator/src/avm/avm_memory_types.test.ts b/yarn-project/simulator/src/avm/avm_memory_types.test.ts index f316b2f42a3..c122a05aab6 100644 --- a/yarn-project/simulator/src/avm/avm_memory_types.test.ts +++ b/yarn-project/simulator/src/avm/avm_memory_types.test.ts @@ -2,6 +2,7 @@ import { Field, MeteredTaggedMemory, TaggedMemory, + Uint1, Uint8, Uint16, Uint32, @@ -98,8 +99,105 @@ describe('MeteredTaggedMemory', () => { }); }); -type IntegralClass = typeof Uint8 | typeof Uint16 | typeof Uint32 | typeof Uint64 | typeof Uint128; -describe.each([Uint8, Uint16, Uint32, Uint64, Uint128])('Integral Types', (clsValue: IntegralClass) => { +type IntegralClass = typeof Uint1 | typeof Uint8 | typeof Uint16 | typeof Uint32 | typeof Uint64 | typeof Uint128; + +describe.each([Uint1])('Integral Types (U1 only)', (clsValue: IntegralClass) => { + describe(`${clsValue.name}`, () => { + it(`Should construct a new ${clsValue.name} from a number`, () => { + const x = new clsValue(1); + expect(x.toBigInt()).toStrictEqual(1n); + }); + + it(`Should construct a new ${clsValue.name} from a bigint`, () => { + const x = new clsValue(0n); + expect(x.toBigInt()).toStrictEqual(0n); + }); + + it(`Should build a new ${clsValue.name}`, () => { + const x = new clsValue(0); + const newX = x.build(1n); + expect(newX).toStrictEqual(new clsValue(1n)); + }); + + it(`Should add two ${clsValue.name} correctly`, () => { + const a = new clsValue(0); + const b = new clsValue(1); + const result = a.add(b); + expect(result).toStrictEqual(new clsValue(1n)); + }); + + it(`Should subtract two ${clsValue.name} correctly`, () => { + const a = new clsValue(1); + const b = new clsValue(0); + const result = a.sub(b); + expect(result).toStrictEqual(new clsValue(1n)); + }); + + it(`Should multiply two ${clsValue.name} correctly`, () => { + const a = new clsValue(1); + const b = new clsValue(1); + const result = a.mul(b); + expect(result).toStrictEqual(new clsValue(1n)); + }); + + it(`Should divide two ${clsValue.name} correctly`, () => { + const a = new clsValue(1); + const b = new clsValue(1); + const result = a.div(b); + expect(result).toStrictEqual(new clsValue(1n)); + }); + + it(`Should shift right ${clsValue.name} correctly`, () => { + const uintA = new clsValue(1); + const result = uintA.shr(new clsValue(1n)); + expect(result).toEqual(new clsValue(0n)); + }); + + it(`Should shift left ${clsValue.name} correctly`, () => { + const uintA = new clsValue(1); + const result = uintA.shl(new clsValue(1n)); + expect(result).toEqual(new clsValue(0n)); + }); + + it(`Should and two ${clsValue.name} correctly`, () => { + const uintA = new clsValue(1); + const uintB = new clsValue(1); + const result = uintA.and(uintB); + expect(result).toEqual(new clsValue(1n)); + }); + + it(`Should or two ${clsValue.name} correctly`, () => { + const uintA = new clsValue(0); + const uintB = new clsValue(1); + const result = uintA.or(uintB); + expect(result).toEqual(new clsValue(1n)); + }); + + it(`Should xor two ${clsValue.name} correctly`, () => { + const uintA = new clsValue(1); + const uintB = new clsValue(1); + const result = uintA.xor(uintB); + expect(result).toEqual(new clsValue(0n)); + }); + + it(`Should check equality of two ${clsValue.name} correctly`, () => { + const a = new clsValue(1); + const b = new clsValue(1); + const c = new clsValue(0); + expect(a.equals(b)).toBe(true); + expect(a.equals(c)).toBe(false); + }); + + it(`Should check if one ${clsValue.name} is less than another correctly`, () => { + const a = new clsValue(0); + const b = new clsValue(1); + expect(a.lt(b)).toBe(true); + expect(b.lt(a)).toBe(false); + }); + }); +}); + +describe.each([Uint8, Uint16, Uint32, Uint64, Uint128])('Integral Types (excluding U1)', (clsValue: IntegralClass) => { describe(`${clsValue.name}`, () => { it(`Should construct a new ${clsValue.name} from a number`, () => { const x = new clsValue(5); diff --git a/yarn-project/simulator/src/avm/avm_memory_types.ts b/yarn-project/simulator/src/avm/avm_memory_types.ts index c85f920b7be..f590c6a40cf 100644 --- a/yarn-project/simulator/src/avm/avm_memory_types.ts +++ b/yarn-project/simulator/src/avm/avm_memory_types.ts @@ -1,3 +1,12 @@ +import { + MEM_TAG_FF, + MEM_TAG_U1, + MEM_TAG_U8, + MEM_TAG_U16, + MEM_TAG_U32, + MEM_TAG_U64, + MEM_TAG_U128, +} from '@aztec/circuits.js'; import { toBufferBE } from '@aztec/foundation/bigint-buffer'; import { Fr } from '@aztec/foundation/fields'; import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log'; @@ -128,6 +137,9 @@ function UnsignedIntegerClassFactory(bits: number) { } public toBuffer(): Buffer { + if (bits < 8) { + return toBufferBE(this.n, 1); + } return toBufferBE(this.n, bits / 8); } }; @@ -136,6 +148,7 @@ function UnsignedIntegerClassFactory(bits: number) { // Now we can create the classes for each unsigned integer type. // We extend instead of just assigning so that the class has the right name. // Otherwise they are all called "NewUintClass". +export class Uint1 extends UnsignedIntegerClassFactory(1) {} export class Uint8 extends UnsignedIntegerClassFactory(8) {} export class Uint16 extends UnsignedIntegerClassFactory(16) {} export class Uint32 extends UnsignedIntegerClassFactory(32) {} @@ -196,12 +209,13 @@ export class Field extends MemoryValue { export enum TypeTag { UNINITIALIZED, - UINT8, - UINT16, - UINT32, - UINT64, - UINT128, - FIELD, + UINT1 = MEM_TAG_U1, + UINT8 = MEM_TAG_U8, + UINT16 = MEM_TAG_U16, + UINT32 = MEM_TAG_U32, + UINT64 = MEM_TAG_U64, + UINT128 = MEM_TAG_U128, + FIELD = MEM_TAG_FF, INVALID, } @@ -302,7 +316,9 @@ export class TaggedMemory implements TaggedMemoryInterface { } public static checkIsIntegralTag(tag: TypeTag) { - if (![TypeTag.UINT8, TypeTag.UINT16, TypeTag.UINT32, TypeTag.UINT64, TypeTag.UINT128].includes(tag)) { + if ( + ![TypeTag.UINT1, TypeTag.UINT8, TypeTag.UINT16, TypeTag.UINT32, TypeTag.UINT64, TypeTag.UINT128].includes(tag) + ) { throw TagCheckError.forTag(TypeTag[tag], 'integral'); } } @@ -332,8 +348,8 @@ export class TaggedMemory implements TaggedMemoryInterface { if (v === undefined) { tag = TypeTag.UNINITIALIZED; - } else if (v instanceof Field) { - tag = TypeTag.FIELD; + } else if (v instanceof Uint1) { + tag = TypeTag.UINT1; } else if (v instanceof Uint8) { tag = TypeTag.UINT8; } else if (v instanceof Uint16) { @@ -344,6 +360,8 @@ export class TaggedMemory implements TaggedMemoryInterface { tag = TypeTag.UINT64; } else if (v instanceof Uint128) { tag = TypeTag.UINT128; + } else if (v instanceof Field) { + tag = TypeTag.FIELD; } return tag; @@ -353,6 +371,8 @@ export class TaggedMemory implements TaggedMemoryInterface { public static buildFromTagTruncating(v: bigint | number, tag: TypeTag): MemoryValue { v = BigInt(v); switch (tag) { + case TypeTag.UINT1: + return new Uint1(v & 1n); case TypeTag.UINT8: return new Uint8(v & ((1n << 8n) - 1n)); case TypeTag.UINT16: @@ -373,6 +393,8 @@ export class TaggedMemory implements TaggedMemoryInterface { // Does not truncate. Type constructor will check that it fits. public static buildFromTagOrDie(v: bigint | number, tag: TypeTag): MemoryValue { switch (tag) { + case TypeTag.UINT1: + return new Uint1(v); case TypeTag.UINT8: return new Uint8(v); case TypeTag.UINT16: diff --git a/yarn-project/simulator/src/avm/avm_simulator.test.ts b/yarn-project/simulator/src/avm/avm_simulator.test.ts index 6bca1202516..a5dac0b3035 100644 --- a/yarn-project/simulator/src/avm/avm_simulator.test.ts +++ b/yarn-project/simulator/src/avm/avm_simulator.test.ts @@ -10,6 +10,7 @@ import { type Fieldable } from '@aztec/foundation/serialize'; import { randomInt } from 'crypto'; import { mock } from 'jest-mock-extended'; +import { type WorldStateDB } from '../public/public_db_sources.js'; import { type PublicSideEffectTraceInterface } from '../public/side_effect_trace_interface.js'; import { type AvmContext } from './avm_context.js'; import { type AvmExecutionEnvironment } from './avm_execution_environment.js'; @@ -17,12 +18,10 @@ import { type MemoryValue, TypeTag, type Uint8, type Uint64 } from './avm_memory import { AvmSimulator } from './avm_simulator.js'; import { isAvmBytecode, markBytecodeAsAvm } from './bytecode_utils.js'; import { - adjustCalldataIndex, getAvmTestContractBytecode, initContext, initExecutionEnvironment, initGlobalVariables, - initHostStorage, initMachineState, initPersistableStateManager, randomMemoryBytes, @@ -30,7 +29,6 @@ import { randomMemoryUint64s, resolveAvmTestContractAssertionMessage, } from './fixtures/index.js'; -import { type HostStorage } from './journal/host_storage.js'; import { type AvmPersistableStateManager } from './journal/journal.js'; import { Add, CalldataCopy, Return, Set } from './opcodes/index.js'; import { encodeToBytecode } from './serialization/bytecode_serialization.js'; @@ -53,10 +51,7 @@ describe('AVM simulator: injected bytecode', () => { beforeAll(() => { calldata = [new Fr(1), new Fr(2)]; bytecode = encodeToBytecode([ - new Set(/*indirect*/ 0, TypeTag.UINT32, /*value*/ adjustCalldataIndex(0), /*dstOffset*/ 0).as( - Opcode.SET_8, - Set.wireFormat8, - ), + new Set(/*indirect*/ 0, TypeTag.UINT32, /*value*/ 0, /*dstOffset*/ 0).as(Opcode.SET_8, Set.wireFormat8), new Set(/*indirect*/ 0, TypeTag.UINT32, /*value*/ 2, /*dstOffset*/ 1).as(Opcode.SET_8, Set.wireFormat8), new CalldataCopy(/*indirect=*/ 0, /*cdOffset=*/ 0, /*copySize=*/ 1, /*dstOffset=*/ 0), new Add(/*indirect=*/ 0, TypeTag.FIELD, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 2).as( @@ -67,8 +62,8 @@ describe('AVM simulator: injected bytecode', () => { ]); }); - it('Should not be recognized as AVM bytecode (magic missing)', async () => { - expect(!(await isAvmBytecode(bytecode))); + it('Should not be recognized as AVM bytecode (magic missing)', () => { + expect(!isAvmBytecode(bytecode)); }); it('Should execute bytecode that performs basic addition', async () => { @@ -117,9 +112,29 @@ describe('AVM simulator: transpiled Noir contracts', () => { expect(results.output).toEqual([new Fr(0)]); }); - it('Should be recognized as AVM bytecode (magic present)', async () => { + it('Should be recognized as AVM bytecode (magic present)', () => { const bytecode = getAvmTestContractBytecode('add_args_return'); - expect(await isAvmBytecode(bytecode)); + expect(isAvmBytecode(bytecode)); + }); + + it('Should handle calldata oracle', async () => { + const calldata: Fr[] = [new Fr(1), new Fr(2), new Fr(3)]; + const context = initContext({ env: initExecutionEnvironment({ calldata }) }); + + const bytecode = getAvmTestContractBytecode('assert_calldata_copy'); + const results = await new AvmSimulator(context).executeBytecode(bytecode); + + expect(results.reverted).toBe(false); + }); + + it('Should handle return oracle', async () => { + const context = initContext(); + + const bytecode = getAvmTestContractBytecode('return_oracle'); + const results = await new AvmSimulator(context).executeBytecode(bytecode); + + expect(results.reverted).toBe(false); + expect(results.output).toEqual([new Fr(1), new Fr(2), new Fr(3)]); }); it('elliptic curve operations', async () => { @@ -375,14 +390,14 @@ describe('AVM simulator: transpiled Noir contracts', () => { const value0 = new Fr(420); const value1 = new Fr(69); - let hostStorage: HostStorage; + let worldStateDB: WorldStateDB; let trace: PublicSideEffectTraceInterface; let persistableState: AvmPersistableStateManager; beforeEach(() => { - hostStorage = initHostStorage(); + worldStateDB = mock(); trace = mock(); - persistableState = initPersistableStateManager({ hostStorage, trace }); + persistableState = initPersistableStateManager({ worldStateDB, trace }); }); const createContext = (calldata: Fr[] = []) => { @@ -409,7 +424,7 @@ describe('AVM simulator: transpiled Noir contracts', () => { const context = createContext(calldata); const bytecode = getAvmTestContractBytecode('note_hash_exists'); if (mockAtLeafIndex !== undefined) { - mockNoteHashExists(hostStorage, mockAtLeafIndex, value0); + mockNoteHashExists(worldStateDB, mockAtLeafIndex, value0); } const results = await new AvmSimulator(context).executeBytecode(bytecode); @@ -434,7 +449,7 @@ describe('AVM simulator: transpiled Noir contracts', () => { const bytecode = getAvmTestContractBytecode('nullifier_exists'); if (exists) { - mockNullifierExists(hostStorage, leafIndex, value0); + mockNullifierExists(worldStateDB, leafIndex, value0); } const results = await new AvmSimulator(context).executeBytecode(bytecode); @@ -473,7 +488,7 @@ describe('AVM simulator: transpiled Noir contracts', () => { const context = createContext(calldata); const bytecode = getAvmTestContractBytecode('l1_to_l2_msg_exists'); if (mockAtLeafIndex !== undefined) { - mockL1ToL2MessageExists(hostStorage, mockAtLeafIndex, value0, /*valueAtOtherIndices=*/ value1); + mockL1ToL2MessageExists(worldStateDB, mockAtLeafIndex, value0, /*valueAtOtherIndices=*/ value1); } const results = await new AvmSimulator(context).executeBytecode(bytecode); @@ -611,7 +626,7 @@ describe('AVM simulator: transpiled Noir contracts', () => { it('Should read value in storage (single)', async () => { const context = createContext(); - mockStorageRead(hostStorage, value0); + mockStorageRead(worldStateDB, value0); const bytecode = getAvmTestContractBytecode('read_storage_single'); @@ -674,7 +689,7 @@ describe('AVM simulator: transpiled Noir contracts', () => { [listSlot0.toBigInt(), value0], [listSlot1.toBigInt(), value1], ]); - mockStorageReadWithMap(hostStorage, mockedStorage); + mockStorageReadWithMap(worldStateDB, mockedStorage); const bytecode = getAvmTestContractBytecode('read_storage_list'); @@ -748,7 +763,7 @@ describe('AVM simulator: transpiled Noir contracts', () => { const calldata = [storageAddress]; const context = createContext(calldata); - mockStorageRead(hostStorage, value0); + mockStorageRead(worldStateDB, value0); const bytecode = getAvmTestContractBytecode('read_storage_map'); const results = await new AvmSimulator(context).executeBytecode(bytecode); @@ -780,7 +795,7 @@ describe('AVM simulator: transpiled Noir contracts', () => { initializationHash: new Fr(0x101112), publicKeysHash: new Fr(0x161718), }; - mockGetContractInstance(hostStorage, contractInstance); + mockGetContractInstance(worldStateDB, contractInstance); const bytecode = getAvmTestContractBytecode('test_get_contract_instance_raw'); @@ -813,7 +828,7 @@ describe('AVM simulator: transpiled Noir contracts', () => { }), /*startGasLeft=*/ expect.anything(), /*endGasLeft=*/ expect.anything(), - /*bytecode=*/ expect.anything(), //decompressBytecodeIfCompressed(addBytecode), + /*bytecode=*/ expect.anything(), /*avmCallResults=*/ expect.anything(), // we don't have the NESTED call's results to check /*functionName=*/ expect.anything(), ); @@ -824,7 +839,7 @@ describe('AVM simulator: transpiled Noir contracts', () => { const context = createContext(calldata); const callBytecode = getAvmTestContractBytecode('nested_call_to_add'); const addBytecode = getAvmTestContractBytecode('add_args_return'); - mockGetBytecode(hostStorage, addBytecode); + mockGetBytecode(worldStateDB, addBytecode); const nestedTrace = mock(); mockTraceFork(trace, nestedTrace); @@ -840,7 +855,7 @@ describe('AVM simulator: transpiled Noir contracts', () => { const context = createContext(calldata); const callBytecode = getAvmTestContractBytecode('nested_static_call_to_add'); const addBytecode = getAvmTestContractBytecode('add_args_return'); - mockGetBytecode(hostStorage, addBytecode); + mockGetBytecode(worldStateDB, addBytecode); const nestedTrace = mock(); mockTraceFork(trace, nestedTrace); @@ -857,7 +872,7 @@ describe('AVM simulator: transpiled Noir contracts', () => { const context = createContext(calldata); const callBytecode = getAvmTestContractBytecode('nested_call_to_add_with_gas'); const addBytecode = getAvmTestContractBytecode('add_args_return'); - mockGetBytecode(hostStorage, addBytecode); + mockGetBytecode(worldStateDB, addBytecode); mockTraceFork(trace); const results = await new AvmSimulator(context).executeBytecode(callBytecode); @@ -876,7 +891,7 @@ describe('AVM simulator: transpiled Noir contracts', () => { const context = createContext(); const callBytecode = getAvmTestContractBytecode('nested_static_call_to_set_storage'); const nestedBytecode = getAvmTestContractBytecode('set_storage_single'); - mockGetBytecode(hostStorage, nestedBytecode); + mockGetBytecode(worldStateDB, nestedBytecode); mockTraceFork(trace); const results = await new AvmSimulator(context).executeBytecode(callBytecode); @@ -900,7 +915,7 @@ describe('AVM simulator: transpiled Noir contracts', () => { const callBytecode = getAvmTestContractBytecode('nested_call_to_add'); // We actually don't pass the function ADD, but it's ok because the signature is the same. const nestedBytecode = getAvmTestContractBytecode('assert_same'); - mockGetBytecode(hostStorage, nestedBytecode); + mockGetBytecode(worldStateDB, nestedBytecode); const results = await new AvmSimulator(context).executeBytecode(callBytecode); expect(results.reverted).toBe(true); // The outer call should revert. diff --git a/yarn-project/simulator/src/avm/avm_simulator.ts b/yarn-project/simulator/src/avm/avm_simulator.ts index 581e21f647e..e768d27958d 100644 --- a/yarn-project/simulator/src/avm/avm_simulator.ts +++ b/yarn-project/simulator/src/avm/avm_simulator.ts @@ -4,7 +4,7 @@ import { strict as assert } from 'assert'; import type { AvmContext } from './avm_context.js'; import { AvmContractCallResult } from './avm_contract_call_result.js'; -import { decompressBytecodeIfCompressed, isAvmBytecode } from './bytecode_utils.js'; +import { isAvmBytecode } from './bytecode_utils.js'; import { AvmExecutionError, InvalidProgramCounterError, @@ -53,11 +53,10 @@ export class AvmSimulator { * This method is useful for testing and debugging. */ public async executeBytecode(bytecode: Buffer): Promise { - const decompressedBytecode = await decompressBytecodeIfCompressed(bytecode); - assert(await isAvmBytecode(decompressedBytecode), "AVM simulator can't execute non-AVM bytecode"); + assert(isAvmBytecode(bytecode), "AVM simulator can't execute non-AVM bytecode"); - this.bytecode = decompressedBytecode; - return await this.executeInstructions(decodeFromBytecode(decompressedBytecode)); + this.bytecode = bytecode; + return await this.executeInstructions(decodeFromBytecode(bytecode)); } /** diff --git a/yarn-project/simulator/src/avm/bytecode_utils.ts b/yarn-project/simulator/src/avm/bytecode_utils.ts index 68ed5117941..73a2282ab67 100644 --- a/yarn-project/simulator/src/avm/bytecode_utils.ts +++ b/yarn-project/simulator/src/avm/bytecode_utils.ts @@ -1,6 +1,3 @@ -import { promisify } from 'util'; -import { gunzip } from 'zlib'; - import { Opcode } from './serialization/instruction_serialization.js'; const AVM_MAGIC_SUFFIX = Buffer.from([ @@ -14,19 +11,7 @@ export function markBytecodeAsAvm(bytecode: Buffer): Buffer { return Buffer.concat([bytecode, AVM_MAGIC_SUFFIX]); } -// This is just a helper function for the AVM simulator -export async function decompressBytecodeIfCompressed(bytecode: Buffer): Promise { - try { - return await promisify(gunzip)(bytecode); - } catch { - // If the bytecode is not compressed, the gunzip call will throw an error - // In this case, we assume the bytecode is not compressed and continue. - return Promise.resolve(bytecode); - } -} - -export async function isAvmBytecode(bytecode: Buffer): Promise { - const decompressedBytecode = await decompressBytecodeIfCompressed(bytecode); +export function isAvmBytecode(bytecode: Buffer): boolean { const magicSize = AVM_MAGIC_SUFFIX.length; - return decompressedBytecode.subarray(-magicSize).equals(AVM_MAGIC_SUFFIX); + return bytecode.subarray(-magicSize).equals(AVM_MAGIC_SUFFIX); } diff --git a/yarn-project/simulator/src/avm/fixtures/index.ts b/yarn-project/simulator/src/avm/fixtures/index.ts index 72bc6d66a7f..9d8e2183322 100644 --- a/yarn-project/simulator/src/avm/fixtures/index.ts +++ b/yarn-project/simulator/src/avm/fixtures/index.ts @@ -10,20 +10,13 @@ import { strict as assert } from 'assert'; import { mock } from 'jest-mock-extended'; import merge from 'lodash.merge'; -import { - type CommitmentsDB, - type PublicContractsDB, - type PublicStateDB, - resolveAssertionMessage, - traverseCauseChain, -} from '../../index.js'; +import { type WorldStateDB, resolveAssertionMessage, traverseCauseChain } from '../../index.js'; import { type PublicSideEffectTraceInterface } from '../../public/side_effect_trace_interface.js'; import { AvmContext } from '../avm_context.js'; -import { AvmContextInputs, AvmExecutionEnvironment } from '../avm_execution_environment.js'; +import { AvmExecutionEnvironment } from '../avm_execution_environment.js'; import { AvmMachineState } from '../avm_machine_state.js'; -import { Field, Uint8, Uint64 } from '../avm_memory_types.js'; +import { Field, Uint8, Uint32, Uint64 } from '../avm_memory_types.js'; import { type AvmRevertReason } from '../errors.js'; -import { HostStorage } from '../journal/host_storage.js'; import { AvmPersistableStateManager } from '../journal/journal.js'; import { NullifierManager } from '../journal/nullifiers.js'; import { PublicStorage } from '../journal/public_storage.js'; @@ -43,32 +36,19 @@ export function initContext(overrides?: { ); } -/** Creates an empty host storage with mocked dbs. */ -export function initHostStorage(overrides?: { - publicDb?: PublicStateDB; - contractsDb?: PublicContractsDB; - commitmentsDb?: CommitmentsDB; -}): HostStorage { - return new HostStorage( - overrides?.publicDb || mock(), - overrides?.contractsDb || mock(), - overrides?.commitmentsDb || mock(), - ); -} - /** Creates an empty state manager with mocked host storage. */ export function initPersistableStateManager(overrides?: { - hostStorage?: HostStorage; + worldStateDB?: WorldStateDB; trace?: PublicSideEffectTraceInterface; publicStorage?: PublicStorage; nullifiers?: NullifierManager; }): AvmPersistableStateManager { - const hostStorage = overrides?.hostStorage || initHostStorage(); + const worldStateDB = overrides?.worldStateDB || mock(); return new AvmPersistableStateManager( - hostStorage, + worldStateDB, overrides?.trace || mock(), - overrides?.publicStorage || new PublicStorage(hostStorage.publicStateDb), - overrides?.nullifiers || new NullifierManager(hostStorage.commitmentsDb), + overrides?.publicStorage || new PublicStorage(worldStateDB), + overrides?.nullifiers || new NullifierManager(worldStateDB), ); } @@ -124,26 +104,14 @@ export function allSameExcept(original: any, overrides: any): any { return merge({}, original, overrides); } -/** - * Adjust the user index to account for the AvmContextInputs size. - * This is a hack for testing, and should go away once AvmContextInputs themselves go away. - */ -export function adjustCalldataIndex(userIndex: number): number { - return userIndex + AvmContextInputs.SIZE; -} - -export function anyAvmContextInputs() { - const tv = []; - for (let i = 0; i < AvmContextInputs.SIZE; i++) { - tv.push(expect.any(Fr)); - } - return tv; -} - export function randomMemoryBytes(length: number): Uint8[] { return [...Array(length)].map(_ => new Uint8(Math.floor(Math.random() * 255))); } +export function randomMemoryUint32s(length: number): Uint32[] { + return [...Array(length)].map(_ => new Uint32(Math.floor(Math.random() * 255))); +} + export function randomMemoryUint64s(length: number): Uint64[] { return [...Array(length)].map(_ => new Uint64(Math.floor(Math.random() * 255))); } diff --git a/yarn-project/simulator/src/avm/journal/host_storage.ts b/yarn-project/simulator/src/avm/journal/host_storage.ts deleted file mode 100644 index 1064c82b5e3..00000000000 --- a/yarn-project/simulator/src/avm/journal/host_storage.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type CommitmentsDB, type PublicContractsDB, type PublicStateDB } from '../../public/db_interfaces.js'; - -/** - * Host storage - * - * A wrapper around the node dbs - */ -export class HostStorage { - constructor( - public readonly publicStateDb: PublicStateDB, - public readonly contractsDb: PublicContractsDB, - public readonly commitmentsDb: CommitmentsDB, - ) {} -} diff --git a/yarn-project/simulator/src/avm/journal/index.ts b/yarn-project/simulator/src/avm/journal/index.ts index 86fe25115d8..5a3cc78b416 100644 --- a/yarn-project/simulator/src/avm/journal/index.ts +++ b/yarn-project/simulator/src/avm/journal/index.ts @@ -1,2 +1 @@ -export * from './host_storage.js'; export * from './journal.js'; diff --git a/yarn-project/simulator/src/avm/journal/journal.test.ts b/yarn-project/simulator/src/avm/journal/journal.test.ts index f3c18188d12..07efb46a647 100644 --- a/yarn-project/simulator/src/avm/journal/journal.test.ts +++ b/yarn-project/simulator/src/avm/journal/journal.test.ts @@ -4,8 +4,9 @@ import { SerializableContractInstance } from '@aztec/types/contracts'; import { mock } from 'jest-mock-extended'; +import { type WorldStateDB } from '../../public/public_db_sources.js'; import { type PublicSideEffectTraceInterface } from '../../public/side_effect_trace_interface.js'; -import { initHostStorage, initPersistableStateManager } from '../fixtures/index.js'; +import { initPersistableStateManager } from '../fixtures/index.js'; import { mockGetContractInstance, mockL1ToL2MessageExists, @@ -13,7 +14,6 @@ import { mockNullifierExists, mockStorageRead, } from '../test_utils.js'; -import { type HostStorage } from './host_storage.js'; import { type AvmPersistableStateManager } from './journal.js'; describe('journal', () => { @@ -21,14 +21,14 @@ describe('journal', () => { const utxo = Fr.random(); const leafIndex = Fr.random(); - let hostStorage: HostStorage; + let worldStateDB: WorldStateDB; let trace: PublicSideEffectTraceInterface; let persistableState: AvmPersistableStateManager; beforeEach(() => { - hostStorage = initHostStorage(); + worldStateDB = mock(); trace = mock(); - persistableState = initPersistableStateManager({ hostStorage, trace }); + persistableState = initPersistableStateManager({ worldStateDB, trace }); }); describe('Public Storage', () => { @@ -38,7 +38,7 @@ describe('journal', () => { const storedValue = new Fr(420); const cachedValue = new Fr(69); - mockStorageRead(hostStorage, storedValue); + mockStorageRead(worldStateDB, storedValue); // Get the cache first const cacheMissResult = await persistableState.readStorage(address, slot); @@ -83,7 +83,7 @@ describe('journal', () => { }); it('checkNoteHashExists works for existing note hashes', async () => { - mockNoteHashExists(hostStorage, leafIndex, utxo); + mockNoteHashExists(worldStateDB, leafIndex, utxo); const exists = await persistableState.checkNoteHashExists(address, utxo, leafIndex); expect(exists).toEqual(true); expect(trace.traceNoteHashCheck).toHaveBeenCalledTimes(1); @@ -110,7 +110,7 @@ describe('journal', () => { }); it('checkNullifierExists works for existing nullifiers', async () => { - mockNullifierExists(hostStorage, leafIndex, utxo); + mockNullifierExists(worldStateDB, leafIndex, utxo); const exists = await persistableState.checkNullifierExists(address, utxo); expect(exists).toEqual(true); expect(trace.traceNullifierCheck).toHaveBeenCalledTimes(1); @@ -130,7 +130,7 @@ describe('journal', () => { }); it('checkL1ToL2MessageExists works for existing message', async () => { - mockL1ToL2MessageExists(hostStorage, leafIndex, utxo); + mockL1ToL2MessageExists(worldStateDB, leafIndex, utxo); const exists = await persistableState.checkL1ToL2MessageExists(address, utxo, leafIndex); expect(exists).toEqual(true); expect(trace.traceL1ToL2MessageCheck).toHaveBeenCalledTimes(1); @@ -148,7 +148,7 @@ describe('journal', () => { describe('Getting contract instances', () => { it('Should get contract instance', async () => { const contractInstance = randomContractInstanceWithAddress(/*(base instance) opts=*/ {}, /*address=*/ address); - mockGetContractInstance(hostStorage, contractInstance); + mockGetContractInstance(worldStateDB, contractInstance); await persistableState.getContractInstance(address); expect(trace.traceGetContractInstance).toHaveBeenCalledTimes(1); expect(trace.traceGetContractInstance).toHaveBeenCalledWith({ exists: true, ...contractInstance }); diff --git a/yarn-project/simulator/src/avm/journal/journal.ts b/yarn-project/simulator/src/avm/journal/journal.ts index 2f869c76a7b..843b6ed90ae 100644 --- a/yarn-project/simulator/src/avm/journal/journal.ts +++ b/yarn-project/simulator/src/avm/journal/journal.ts @@ -3,11 +3,11 @@ import { Fr } from '@aztec/foundation/fields'; import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log'; import { SerializableContractInstance } from '@aztec/types/contracts'; +import { type WorldStateDB } from '../../public/public_db_sources.js'; import { type TracedContractInstance } from '../../public/side_effect_trace.js'; import { type PublicSideEffectTraceInterface } from '../../public/side_effect_trace_interface.js'; import { type AvmContractCallResult } from '../avm_contract_call_result.js'; import { type AvmExecutionEnvironment } from '../avm_execution_environment.js'; -import { type HostStorage } from './host_storage.js'; import { NullifierManager } from './nullifiers.js'; import { PublicStorage } from './public_storage.js'; @@ -25,7 +25,7 @@ export class AvmPersistableStateManager { constructor( /** Reference to node storage */ - private readonly hostStorage: HostStorage, + private readonly worldStateDB: WorldStateDB, /** Side effect trace */ private readonly trace: PublicSideEffectTraceInterface, /** Public storage, including cached writes */ @@ -39,18 +39,15 @@ export class AvmPersistableStateManager { * Create a new state manager with some preloaded pending siloed nullifiers */ public static newWithPendingSiloedNullifiers( - hostStorage: HostStorage, + worldStateDB: WorldStateDB, trace: PublicSideEffectTraceInterface, pendingSiloedNullifiers: Fr[], ) { - const parentNullifiers = NullifierManager.newWithPendingSiloedNullifiers( - hostStorage.commitmentsDb, - pendingSiloedNullifiers, - ); + const parentNullifiers = NullifierManager.newWithPendingSiloedNullifiers(worldStateDB, pendingSiloedNullifiers); return new AvmPersistableStateManager( - hostStorage, + worldStateDB, trace, - /*publicStorage=*/ new PublicStorage(hostStorage.publicStateDb), + /*publicStorage=*/ new PublicStorage(worldStateDB), /*nullifiers=*/ parentNullifiers.fork(), ); } @@ -60,7 +57,7 @@ export class AvmPersistableStateManager { */ public fork() { return new AvmPersistableStateManager( - this.hostStorage, + this.worldStateDB, this.trace.fork(), this.publicStorage.fork(), this.nullifiers.fork(), @@ -122,7 +119,7 @@ export class AvmPersistableStateManager { * @returns true if the note hash exists at the given leaf index, false otherwise */ public async checkNoteHashExists(storageAddress: Fr, noteHash: Fr, leafIndex: Fr): Promise { - const gotLeafValue = (await this.hostStorage.commitmentsDb.getCommitmentValue(leafIndex.toBigInt())) ?? Fr.ZERO; + const gotLeafValue = (await this.worldStateDB.getCommitmentValue(leafIndex.toBigInt())) ?? Fr.ZERO; const exists = gotLeafValue.equals(noteHash); this.log.debug( `noteHashes(${storageAddress})@${noteHash} ?? leafIndex: ${leafIndex} | gotLeafValue: ${gotLeafValue}, exists: ${exists}.`, @@ -177,7 +174,7 @@ export class AvmPersistableStateManager { * @returns exists - whether the message exists in the L1 to L2 Messages tree */ public async checkL1ToL2MessageExists(contractAddress: Fr, msgHash: Fr, msgLeafIndex: Fr): Promise { - const valueAtIndex = (await this.hostStorage.commitmentsDb.getL1ToL2LeafValue(msgLeafIndex.toBigInt())) ?? Fr.ZERO; + const valueAtIndex = (await this.worldStateDB.getL1ToL2LeafValue(msgLeafIndex.toBigInt())) ?? Fr.ZERO; const exists = valueAtIndex.equals(msgHash); this.log.debug( `l1ToL2Messages(@${msgLeafIndex}) ?? exists: ${exists}, expected: ${msgHash}, found: ${valueAtIndex}.`, @@ -217,7 +214,7 @@ export class AvmPersistableStateManager { public async getContractInstance(contractAddress: Fr): Promise { let exists = true; const aztecAddress = AztecAddress.fromField(contractAddress); - let instance = await this.hostStorage.contractsDb.getContractInstance(aztecAddress); + let instance = await this.worldStateDB.getContractInstance(aztecAddress); if (instance === undefined) { instance = SerializableContractInstance.empty().withAddress(aztecAddress); exists = false; @@ -242,7 +239,7 @@ export class AvmPersistableStateManager { * Get a contract's bytecode from the contracts DB */ public async getBytecode(contractAddress: AztecAddress, selector: FunctionSelector): Promise { - return await this.hostStorage.contractsDb.getBytecode(contractAddress, selector); + return await this.worldStateDB.getBytecode(contractAddress, selector); } /** @@ -260,10 +257,8 @@ export class AvmPersistableStateManager { this.acceptNestedCallState(nestedState); } const functionName = - (await nestedState.hostStorage.contractsDb.getDebugFunctionName( - nestedEnvironment.address, - nestedEnvironment.functionSelector, - )) ?? `${nestedEnvironment.address}:${nestedEnvironment.functionSelector}`; + (await this.worldStateDB.getDebugFunctionName(nestedEnvironment.address, nestedEnvironment.functionSelector)) ?? + `${nestedEnvironment.address}:${nestedEnvironment.functionSelector}`; this.log.verbose(`[AVM] Calling nested function ${functionName}`); diff --git a/yarn-project/simulator/src/avm/opcodes/accrued_substate.test.ts b/yarn-project/simulator/src/avm/opcodes/accrued_substate.test.ts index aab2ae6efa6..442bb985ba3 100644 --- a/yarn-project/simulator/src/avm/opcodes/accrued_substate.test.ts +++ b/yarn-project/simulator/src/avm/opcodes/accrued_substate.test.ts @@ -2,17 +2,12 @@ import { Fr } from '@aztec/circuits.js'; import { mock } from 'jest-mock-extended'; +import { type WorldStateDB } from '../../public/public_db_sources.js'; import { type PublicSideEffectTraceInterface } from '../../public/side_effect_trace_interface.js'; import { type AvmContext } from '../avm_context.js'; import { Field, Uint8, Uint32 } from '../avm_memory_types.js'; import { InstructionExecutionError, StaticCallAlterationError } from '../errors.js'; -import { - initContext, - initExecutionEnvironment, - initHostStorage, - initPersistableStateManager, -} from '../fixtures/index.js'; -import { type HostStorage } from '../journal/host_storage.js'; +import { initContext, initExecutionEnvironment, initPersistableStateManager } from '../fixtures/index.js'; import { type AvmPersistableStateManager } from '../journal/journal.js'; import { mockL1ToL2MessageExists, mockNoteHashExists, mockNullifierExists } from '../test_utils.js'; import { @@ -26,7 +21,7 @@ import { } from './accrued_substate.js'; describe('Accrued Substate', () => { - let hostStorage: HostStorage; + let worldStateDB: WorldStateDB; let trace: PublicSideEffectTraceInterface; let persistableState: AvmPersistableStateManager; let context: AvmContext; @@ -43,9 +38,9 @@ describe('Accrued Substate', () => { const existsOffset = 2; beforeEach(() => { - hostStorage = initHostStorage(); + worldStateDB = mock(); trace = mock(); - persistableState = initPersistableStateManager({ hostStorage, trace }); + persistableState = initPersistableStateManager({ worldStateDB, trace }); context = initContext({ persistableState, env: initExecutionEnvironment({ address, storageAddress, sender }) }); }); @@ -83,7 +78,7 @@ describe('Accrued Substate', () => { : ''; it(`Should return ${expectFound} (and be traced) when noteHash ${existsStr} ${foundAtStr}`, async () => { if (mockAtLeafIndex !== undefined) { - mockNoteHashExists(hostStorage, mockAtLeafIndex, value0); + mockNoteHashExists(worldStateDB, mockAtLeafIndex, value0); } context.machineState.memory.set(value0Offset, new Field(value0)); // noteHash @@ -160,7 +155,7 @@ describe('Accrued Substate', () => { const storageAddressOffset = 1; if (exists) { - mockNullifierExists(hostStorage, leafIndex, value0); + mockNullifierExists(worldStateDB, leafIndex, value0); } context.machineState.memory.set(value0Offset, new Field(value0)); // nullifier @@ -229,7 +224,7 @@ describe('Accrued Substate', () => { }); it('Nullifier collision reverts (nullifier exists in host state)', async () => { - mockNullifierExists(hostStorage, leafIndex); // db will say that nullifier already exists + mockNullifierExists(worldStateDB, leafIndex); // db will say that nullifier already exists context.machineState.memory.set(value0Offset, new Field(value0)); await expect(new EmitNullifier(/*indirect=*/ 0, /*offset=*/ value0Offset).execute(context)).rejects.toThrow( new InstructionExecutionError( @@ -275,7 +270,7 @@ describe('Accrued Substate', () => { it(`Should return ${expectFound} (and be traced) when noteHash ${existsStr} ${foundAtStr}`, async () => { if (mockAtLeafIndex !== undefined) { - mockL1ToL2MessageExists(hostStorage, mockAtLeafIndex, value0, /*valueAtOtherIndices=*/ value1); + mockL1ToL2MessageExists(worldStateDB, mockAtLeafIndex, value0, /*valueAtOtherIndices=*/ value1); } context.machineState.memory.set(value0Offset, new Field(value0)); // noteHash diff --git a/yarn-project/simulator/src/avm/opcodes/bitwise.test.ts b/yarn-project/simulator/src/avm/opcodes/bitwise.test.ts index 2741110d723..d493e5a5dd8 100644 --- a/yarn-project/simulator/src/avm/opcodes/bitwise.test.ts +++ b/yarn-project/simulator/src/avm/opcodes/bitwise.test.ts @@ -365,16 +365,13 @@ describe('Bitwise instructions', () => { const buf = Buffer.from([ Opcode.NOT_16, // opcode 0x01, // indirect - TypeTag.UINT64, // inTag ...Buffer.from('1234', 'hex'), // aOffset ...Buffer.from('3456', 'hex'), // dstOffset ]); - const inst = new Not( - /*indirect=*/ 0x01, - /*inTag=*/ TypeTag.UINT64, - /*aOffset=*/ 0x1234, - /*dstOffset=*/ 0x3456, - ).as(Opcode.NOT_16, Not.wireFormat16); + const inst = new Not(/*indirect=*/ 0x01, /*aOffset=*/ 0x1234, /*dstOffset=*/ 0x3456).as( + Opcode.NOT_16, + Not.wireFormat16, + ); expect(Not.as(Not.wireFormat16).deserialize(buf)).toEqual(inst); expect(inst.serialize()).toEqual(buf); @@ -385,7 +382,7 @@ describe('Bitwise instructions', () => { context.machineState.memory.set(0, a); - await new Not(/*indirect=*/ 0, /*inTag=*/ TypeTag.UINT16, /*aOffset=*/ 0, /*dstOffset=*/ 1).execute(context); + await new Not(/*indirect=*/ 0, /*aOffset=*/ 0, /*dstOffset=*/ 1).execute(context); const expected = new Uint16(0b1001101100011011n); // high bits! const actual = context.machineState.memory.get(1); diff --git a/yarn-project/simulator/src/avm/opcodes/bitwise.ts b/yarn-project/simulator/src/avm/opcodes/bitwise.ts index eb377631766..a7383cc5a8c 100644 --- a/yarn-project/simulator/src/avm/opcodes/bitwise.ts +++ b/yarn-project/simulator/src/avm/opcodes/bitwise.ts @@ -1,8 +1,9 @@ import type { AvmContext } from '../avm_context.js'; -import { type IntegralValue, type TaggedMemoryInterface, TypeTag } from '../avm_memory_types.js'; -import { Opcode } from '../serialization/instruction_serialization.js'; +import { type IntegralValue, TaggedMemory, type TaggedMemoryInterface, TypeTag } from '../avm_memory_types.js'; +import { Opcode, OperandType } from '../serialization/instruction_serialization.js'; import { Addressing } from './addressing_mode.js'; -import { ThreeOperandInstruction, TwoOperandInstruction } from './instruction_impl.js'; +import { Instruction } from './instruction.js'; +import { ThreeOperandInstruction } from './instruction_impl.js'; abstract class ThreeOperandBitwiseInstruction extends ThreeOperandInstruction { public async execute(context: AvmContext): Promise { @@ -85,12 +86,15 @@ export class Shr extends ThreeOperandBitwiseInstruction { } } -export class Not extends TwoOperandInstruction { +export class Not extends Instruction { static readonly type: string = 'NOT'; static readonly opcode = Opcode.NOT_8; - constructor(indirect: number, inTag: number, aOffset: number, dstOffset: number) { - super(indirect, inTag, aOffset, dstOffset); + static readonly wireFormat8 = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT8, OperandType.UINT8]; + static readonly wireFormat16 = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16, OperandType.UINT16]; + + constructor(private indirect: number, private srcOffset: number, private dstOffset: number) { + super(); } public async execute(context: AvmContext): Promise { @@ -98,11 +102,11 @@ export class Not extends TwoOperandInstruction { const memory = context.machineState.memory.track(this.type); context.machineState.consumeGas(this.gasCost(memoryOperations)); - const [aOffset, dstOffset] = Addressing.fromWire(this.indirect).resolve([this.aOffset, this.dstOffset], memory); - memory.checkTags(this.inTag, aOffset); - const a = memory.getAs(aOffset); + const [srcOffset, dstOffset] = Addressing.fromWire(this.indirect).resolve([this.srcOffset, this.dstOffset], memory); + TaggedMemory.checkIsIntegralTag(memory.getTag(srcOffset)); + const value = memory.getAs(srcOffset); - const res = a.not(); + const res = value.not(); memory.set(dstOffset, res); memory.assert(memoryOperations); diff --git a/yarn-project/simulator/src/avm/opcodes/commitment.ts b/yarn-project/simulator/src/avm/opcodes/commitment.ts index 6c065781ded..57488cf22fc 100644 --- a/yarn-project/simulator/src/avm/opcodes/commitment.ts +++ b/yarn-project/simulator/src/avm/opcodes/commitment.ts @@ -47,7 +47,7 @@ export class PedersenCommitment extends Instruction { memory.checkTag(TypeTag.UINT32, genIndexOffset); const memoryOperations = { reads: inputSize + 2, writes: 3, indirect: this.indirect }; - context.machineState.consumeGas(this.gasCost(memoryOperations)); + context.machineState.consumeGas(this.gasCost({ ...memoryOperations, dynMultiplier: inputSize })); const inputBuffer: Buffer[] = inputs.map(input => input.toBuffer()); // TODO: Add the generate index to the pedersenCommit function diff --git a/yarn-project/simulator/src/avm/opcodes/comparators.ts b/yarn-project/simulator/src/avm/opcodes/comparators.ts index be0b5c69c09..9ffca75e9b5 100644 --- a/yarn-project/simulator/src/avm/opcodes/comparators.ts +++ b/yarn-project/simulator/src/avm/opcodes/comparators.ts @@ -1,5 +1,5 @@ import type { AvmContext } from '../avm_context.js'; -import { type MemoryValue, Uint8 } from '../avm_memory_types.js'; +import { type MemoryValue, Uint1 } from '../avm_memory_types.js'; import { Opcode } from '../serialization/instruction_serialization.js'; import { Addressing } from './addressing_mode.js'; import { ThreeOperandInstruction } from './instruction_impl.js'; @@ -19,7 +19,7 @@ abstract class ComparatorInstruction extends ThreeOperandInstruction { const a = memory.get(aOffset); const b = memory.get(bOffset); - const dest = new Uint8(this.compare(a, b) ? 1 : 0); + const dest = new Uint1(this.compare(a, b) ? 1 : 0); memory.set(dstOffset, dest); memory.assert(memoryOperations); diff --git a/yarn-project/simulator/src/avm/opcodes/context_getters.test.ts b/yarn-project/simulator/src/avm/opcodes/context_getters.test.ts deleted file mode 100644 index b865d30de2b..00000000000 --- a/yarn-project/simulator/src/avm/opcodes/context_getters.test.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { initContext, initMachineState } from '../fixtures/index.js'; -import { DAGasLeft, L2GasLeft } from './context_getters.js'; - -describe.each([ - [L2GasLeft, 'l2GasLeft'], - [DAGasLeft, 'daGasLeft'], -] as const)('Context getter instructions for machine state', (clsValue, key) => { - it(`${clsValue.name} should (de)serialize correctly`, () => { - const buf = Buffer.from([ - clsValue.opcode, // opcode - 0x01, // indirect - ...Buffer.from('12345678', 'hex'), // dstOffset - ]); - const inst = new clsValue(/*indirect=*/ 0x01, /*dstOffset=*/ 0x12345678); - - expect(clsValue.deserialize(buf)).toEqual(inst); - expect(inst.serialize()).toEqual(buf); - }); - - it(`${clsValue.name} should read '${key}' correctly`, async () => { - const value = 123456; - const instruction = new clsValue(/*indirect=*/ 0, /*dstOffset=*/ 0); - const context = initContext({ machineState: initMachineState({ [key]: value }) }); - - await instruction.execute(context); - - const actual = context.machineState.memory.get(0).toNumber(); - const expected = key === 'l2GasLeft' ? 123276 : value; // l2gascost decreases when it's executed - expect(actual).toEqual(expected); - }); -}); diff --git a/yarn-project/simulator/src/avm/opcodes/context_getters.ts b/yarn-project/simulator/src/avm/opcodes/context_getters.ts deleted file mode 100644 index 22bd501f59d..00000000000 --- a/yarn-project/simulator/src/avm/opcodes/context_getters.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { AvmContext } from '../avm_context.js'; -import { Field, type MemoryValue } from '../avm_memory_types.js'; -import { Opcode } from '../serialization/instruction_serialization.js'; -import { GetterInstruction } from './instruction_impl.js'; - -export class L2GasLeft extends GetterInstruction { - static type: string = 'L2GASLEFT'; - static readonly opcode: Opcode = Opcode.L2GASLEFT; - - // TODO(@spalladino) Protocol specs specifies that the value should be an Uint32, not a Field. - protected getValue(context: AvmContext): MemoryValue { - return new Field(context.machineState.l2GasLeft); - } -} - -export class DAGasLeft extends GetterInstruction { - static type: string = 'DAGASLEFT'; - static readonly opcode: Opcode = Opcode.DAGASLEFT; - - protected getValue(context: AvmContext): MemoryValue { - return new Field(context.machineState.daGasLeft); - } -} diff --git a/yarn-project/simulator/src/avm/opcodes/contract.test.ts b/yarn-project/simulator/src/avm/opcodes/contract.test.ts index ced3a000d64..6ce6eefac99 100644 --- a/yarn-project/simulator/src/avm/opcodes/contract.test.ts +++ b/yarn-project/simulator/src/avm/opcodes/contract.test.ts @@ -4,11 +4,11 @@ import { SerializableContractInstance } from '@aztec/types/contracts'; import { mock } from 'jest-mock-extended'; +import { type WorldStateDB } from '../../public/public_db_sources.js'; import { type PublicSideEffectTraceInterface } from '../../public/side_effect_trace_interface.js'; import { type AvmContext } from '../avm_context.js'; import { Field } from '../avm_memory_types.js'; -import { initContext, initHostStorage, initPersistableStateManager } from '../fixtures/index.js'; -import { type HostStorage } from '../journal/host_storage.js'; +import { initContext, initPersistableStateManager } from '../fixtures/index.js'; import { type AvmPersistableStateManager } from '../journal/journal.js'; import { mockGetContractInstance } from '../test_utils.js'; import { GetContractInstance } from './contract.js'; @@ -16,15 +16,15 @@ import { GetContractInstance } from './contract.js'; describe('Contract opcodes', () => { const address = AztecAddress.random(); - let hostStorage: HostStorage; + let worldStateDB: WorldStateDB; let trace: PublicSideEffectTraceInterface; let persistableState: AvmPersistableStateManager; let context: AvmContext; beforeEach(() => { - hostStorage = initHostStorage(); + worldStateDB = mock(); trace = mock(); - persistableState = initPersistableStateManager({ hostStorage, trace }); + persistableState = initPersistableStateManager({ worldStateDB, trace }); context = initContext({ persistableState }); }); @@ -48,7 +48,7 @@ describe('Contract opcodes', () => { it('should copy contract instance to memory if found', async () => { const contractInstance = randomContractInstanceWithAddress(/*(base instance) opts=*/ {}, /*address=*/ address); - mockGetContractInstance(hostStorage, contractInstance); + mockGetContractInstance(worldStateDB, contractInstance); context.machineState.memory.set(0, new Field(address.toField())); await new GetContractInstance(/*indirect=*/ 0, /*addressOffset=*/ 0, /*dstOffset=*/ 1).execute(context); diff --git a/yarn-project/simulator/src/avm/opcodes/conversion.test.ts b/yarn-project/simulator/src/avm/opcodes/conversion.test.ts index d3278b0871f..4903af1992c 100644 --- a/yarn-project/simulator/src/avm/opcodes/conversion.test.ts +++ b/yarn-project/simulator/src/avm/opcodes/conversion.test.ts @@ -1,5 +1,5 @@ import { type AvmContext } from '../avm_context.js'; -import { Field, type Uint8, Uint32 } from '../avm_memory_types.js'; +import { Field, type Uint1, type Uint8, Uint32 } from '../avm_memory_types.js'; import { initContext } from '../fixtures/index.js'; import { Addressing, AddressingMode } from './addressing_mode.js'; import { ToRadixLE } from './conversion.js'; @@ -18,31 +18,36 @@ describe('Conversion Opcodes', () => { 1, // indirect ...Buffer.from('12345678', 'hex'), // inputStateOffset ...Buffer.from('23456789', 'hex'), // outputStateOffset - ...Buffer.from('00000002', 'hex'), // radix + ...Buffer.from('3456789A', 'hex'), // radixOffset ...Buffer.from('00000100', 'hex'), // numLimbs + ...Buffer.from('01', 'hex'), // outputBits ]); const inst = new ToRadixLE( /*indirect=*/ 1, /*srcOffset=*/ 0x12345678, /*dstOffset=*/ 0x23456789, - /*radix=*/ 2, + /*radixOffset=*/ 0x3456789a, /*numLimbs=*/ 256, + /*outputBits=*/ 1, ); expect(ToRadixLE.deserialize(buf)).toEqual(inst); expect(inst.serialize()).toEqual(buf); }); - it('Should decompose correctly - direct', async () => { + it('Should decompose correctly to bytes - direct', async () => { const arg = new Field(0b1011101010100n); + const radix = new Uint32(2); // Bit decomposition const indirect = 0; const srcOffset = 0; - const radix = 2; // Bit decomposition - const numLimbs = 10; // only the first 10 bits const dstOffset = 20; + const radixOffset = 1; + const numLimbs = 10; // only the first 10 bits + const outputBits = 0; // false, output as bytes context.machineState.memory.set(srcOffset, arg); + context.machineState.memory.set(radixOffset, radix); - await new ToRadixLE(indirect, srcOffset, dstOffset, radix, numLimbs).execute(context); + await new ToRadixLE(indirect, srcOffset, dstOffset, radixOffset, numLimbs, outputBits).execute(context); const resultBuffer: Buffer = Buffer.concat( context.machineState.memory.getSliceAs(dstOffset, numLimbs).map(byte => byte.toBuffer()), @@ -54,23 +59,54 @@ describe('Conversion Opcodes', () => { } }); + it('Should decompose correctly to bits - direct', async () => { + const arg = new Field(0b1011101010100n); + const radix = new Uint32(2); // Bit decomposition + const indirect = 0; + const srcOffset = 0; + const dstOffset = 20; + const radixOffset = 1; + const numLimbs = 10; // only the first 10 bits + const outputBits = 1; // true, output as bits + context.machineState.memory.set(srcOffset, arg); + context.machineState.memory.set(radixOffset, radix); + + await new ToRadixLE(indirect, srcOffset, dstOffset, radixOffset, numLimbs, outputBits).execute(context); + + const resultBuffer: Buffer = Buffer.concat( + context.machineState.memory.getSliceAs(dstOffset, numLimbs).map(byte => byte.toBuffer()), + ); + // The expected result is the first 10 bits of the input, reversed + const expectedResults = '1011101010100'.split('').reverse().slice(0, numLimbs).map(Number); + for (let i = 0; i < numLimbs; i++) { + expect(resultBuffer.readUInt8(i)).toEqual(expectedResults[i]); + } + }); + it('Should decompose correctly - indirect', async () => { const arg = new Field(Buffer.from('1234567890abcdef', 'hex')); const indirect = new Addressing([ /*srcOffset=*/ AddressingMode.INDIRECT, /*dstOffset*/ AddressingMode.INDIRECT, + /*radixOffset*/ AddressingMode.INDIRECT, ]).toWire(); const srcOffset = 0; const srcOffsetReal = 10; const dstOffset = 2; const dstOffsetReal = 30; + const radixOffset = 3; + const radix = new Uint32(1 << 8); // Byte decomposition + const radixOffsetReal = 50; + context.machineState.memory.set(srcOffset, new Uint32(srcOffsetReal)); context.machineState.memory.set(dstOffset, new Uint32(dstOffsetReal)); + context.machineState.memory.set(radixOffset, new Uint32(radixOffsetReal)); context.machineState.memory.set(srcOffsetReal, arg); + context.machineState.memory.set(radixOffsetReal, radix); - const radix = 1 << 8; // Byte decomposition const numLimbs = 32; // 256-bit decomposition - await new ToRadixLE(indirect, srcOffset, dstOffset, radix, numLimbs).execute(context); + const outputBits = 0; // false, output as bytes + await new ToRadixLE(indirect, srcOffset, dstOffset, radixOffset, numLimbs, outputBits).execute(context); const resultBuffer: Buffer = Buffer.concat( context.machineState.memory.getSliceAs(dstOffsetReal, numLimbs).map(byte => byte.toBuffer()), diff --git a/yarn-project/simulator/src/avm/opcodes/conversion.ts b/yarn-project/simulator/src/avm/opcodes/conversion.ts index 70e29969973..5a7d80d2ded 100644 --- a/yarn-project/simulator/src/avm/opcodes/conversion.ts +++ b/yarn-project/simulator/src/avm/opcodes/conversion.ts @@ -1,7 +1,6 @@ -import { strict as assert } from 'assert'; - import { type AvmContext } from '../avm_context.js'; -import { TypeTag, Uint8 } from '../avm_memory_types.js'; +import { TypeTag, Uint1, Uint8 } from '../avm_memory_types.js'; +import { InstructionExecutionError } from '../errors.js'; import { Opcode, OperandType } from '../serialization/instruction_serialization.js'; import { Addressing } from './addressing_mode.js'; import { Instruction } from './instruction.js'; @@ -16,32 +15,41 @@ export class ToRadixLE extends Instruction { OperandType.UINT8, // Indirect OperandType.UINT32, // src memory address OperandType.UINT32, // dst memory address - OperandType.UINT32, // radix (immediate) + OperandType.UINT32, // radix memory address OperandType.UINT32, // number of limbs (Immediate) + OperandType.UINT1, // output is in "bits" mode (Immediate - Uint1 still takes up a whole byte) ]; constructor( private indirect: number, private srcOffset: number, private dstOffset: number, - private radix: number, + private radixOffset: number, private numLimbs: number, + private outputBits: number, // effectively a bool ) { - assert(radix <= 256, 'Radix cannot be greater than 256'); super(); } public async execute(context: AvmContext): Promise { const memory = context.machineState.memory.track(this.type); - const [srcOffset, dstOffset] = Addressing.fromWire(this.indirect).resolve([this.srcOffset, this.dstOffset], memory); - const memoryOperations = { reads: 1, writes: this.numLimbs, indirect: this.indirect }; + const [srcOffset, dstOffset, radixOffset] = Addressing.fromWire(this.indirect).resolve( + [this.srcOffset, this.dstOffset, this.radixOffset], + memory, + ); + const memoryOperations = { reads: 2, writes: this.numLimbs, indirect: this.indirect }; context.machineState.consumeGas(this.gasCost({ ...memoryOperations, dynMultiplier: this.numLimbs })); // The radix gadget only takes in a Field memory.checkTag(TypeTag.FIELD, srcOffset); + memory.checkTag(TypeTag.UINT32, radixOffset); let value: bigint = memory.get(srcOffset).toBigInt(); - const radixBN: bigint = BigInt(this.radix); + const radix: bigint = memory.get(radixOffset).toBigInt(); + if (radix > 256) { + throw new InstructionExecutionError(`ToRadixLE instruction's radix should be <= 256 (was ${radix})`); + } + const radixBN: bigint = BigInt(radix); const limbArray = []; for (let i = 0; i < this.numLimbs; i++) { @@ -50,7 +58,8 @@ export class ToRadixLE extends Instruction { value /= radixBN; } - const res = limbArray.map(byte => new Uint8(byte)); + const outputType = this.outputBits != 0 ? Uint1 : Uint8; + const res = limbArray.map(byte => new outputType(byte)); memory.setSlice(dstOffset, res); memory.assert(memoryOperations); diff --git a/yarn-project/simulator/src/avm/opcodes/environment_getters.test.ts b/yarn-project/simulator/src/avm/opcodes/environment_getters.test.ts index abf0b7e3936..8f68d272b9d 100644 --- a/yarn-project/simulator/src/avm/opcodes/environment_getters.test.ts +++ b/yarn-project/simulator/src/avm/opcodes/environment_getters.test.ts @@ -8,32 +8,8 @@ import { randomInt } from 'crypto'; import { type AvmContext } from '../avm_context.js'; import { TypeTag } from '../avm_memory_types.js'; import { initContext, initExecutionEnvironment, initGlobalVariables } from '../fixtures/index.js'; -import { - Address, - BlockNumber, - ChainId, - FeePerDAGas, - FeePerL2Gas, - FunctionSelector, - Sender, - StorageAddress, - Timestamp, - TransactionFee, - Version, -} from './environment_getters.js'; - -type GetterInstruction = - | typeof Sender - | typeof StorageAddress - | typeof Address - | typeof FunctionSelector - | typeof TransactionFee - | typeof ChainId - | typeof Version - | typeof BlockNumber - | typeof Timestamp - | typeof FeePerDAGas - | typeof FeePerL2Gas; +import { Opcode } from '../serialization/instruction_serialization.js'; +import { EnvironmentVariable, GetEnvVar } from './environment_getters.js'; describe('Environment getters', () => { const address = AztecAddress.random(); @@ -47,6 +23,7 @@ describe('Environment getters', () => { const timestamp = new Fr(randomInt(100000)); // cap timestamp since must fit in u64 const feePerDaGas = Fr.random(); const feePerL2Gas = Fr.random(); + const isStaticCall = true; const gasFees = new GasFees(feePerDaGas, feePerL2Gas); const globals = initGlobalVariables({ chainId, @@ -62,38 +39,45 @@ describe('Environment getters', () => { functionSelector, transactionFee, globals, + isStaticCall, }); let context: AvmContext; beforeEach(() => { context = initContext({ env }); }); - describe.each([ - [Address, address.toField()], - [StorageAddress, storageAddress.toField()], - [Sender, sender.toField()], - [FunctionSelector, functionSelector.toField(), TypeTag.UINT32], - [TransactionFee, transactionFee.toField()], - [ChainId, chainId.toField()], - [Version, version.toField()], - [BlockNumber, blockNumber.toField()], - [Timestamp, timestamp.toField(), TypeTag.UINT64], - [FeePerDAGas, feePerDaGas.toField()], - [FeePerL2Gas, feePerL2Gas.toField()], - ])('Environment getters instructions', (instrClass: GetterInstruction, value: Fr, tag: TypeTag = TypeTag.FIELD) => { - it(`${instrClass.name} should (de)serialize correctly`, () => { - const buf = Buffer.from([ - instrClass.opcode, // opcode - 0x01, // indirect - ...Buffer.from('12345678', 'hex'), // dstOffset - ]); - const instr = new instrClass(/*indirect=*/ 0x01, /*dstOffset=*/ 0x12345678); + it(`Should (de)serialize correctly`, () => { + const buf = Buffer.from([ + Opcode.GETENVVAR_16, // opcode + 0x01, // indirect + 0x05, // var idx + ...Buffer.from('1234', 'hex'), // dstOffset + ]); + const instr = new GetEnvVar(/*indirect=*/ 0x01, 5, /*dstOffset=*/ 0x1234).as( + Opcode.GETENVVAR_16, + GetEnvVar.wireFormat16, + ); - expect(instrClass.deserialize(buf)).toEqual(instr); - expect(instr.serialize()).toEqual(buf); - }); - it(`${instrClass.name} should read '${instrClass.type}' correctly`, async () => { - const instruction = new instrClass(/*indirect=*/ 0, /*dstOffset=*/ 0); + expect(GetEnvVar.as(GetEnvVar.wireFormat16).deserialize(buf)).toEqual(instr); + expect(instr.serialize()).toEqual(buf); + }); + + describe.each([ + [EnvironmentVariable.ADDRESS, address.toField()], + [EnvironmentVariable.STORAGEADDRESS, storageAddress.toField()], + [EnvironmentVariable.SENDER, sender.toField()], + [EnvironmentVariable.FUNCTIONSELECTOR, functionSelector.toField(), TypeTag.UINT32], + [EnvironmentVariable.TRANSACTIONFEE, transactionFee.toField()], + [EnvironmentVariable.CHAINID, chainId.toField()], + [EnvironmentVariable.VERSION, version.toField()], + [EnvironmentVariable.BLOCKNUMBER, blockNumber.toField()], + [EnvironmentVariable.TIMESTAMP, timestamp.toField(), TypeTag.UINT64], + [EnvironmentVariable.FEEPERDAGAS, feePerDaGas.toField()], + [EnvironmentVariable.FEEPERL2GAS, feePerL2Gas.toField()], + [EnvironmentVariable.ISSTATICCALL, new Fr(isStaticCall ? 1 : 0)], + ])('Environment getter instructions', (envVar: EnvironmentVariable, value: Fr, tag: TypeTag = TypeTag.FIELD) => { + it(`Should read '${EnvironmentVariable[envVar]}' correctly`, async () => { + const instruction = new GetEnvVar(/*indirect=*/ 0, envVar, /*dstOffset=*/ 0); await instruction.execute(context); diff --git a/yarn-project/simulator/src/avm/opcodes/environment_getters.ts b/yarn-project/simulator/src/avm/opcodes/environment_getters.ts index 6373382acf6..e93139fb378 100644 --- a/yarn-project/simulator/src/avm/opcodes/environment_getters.ts +++ b/yarn-project/simulator/src/avm/opcodes/environment_getters.ts @@ -1,112 +1,85 @@ import type { AvmContext } from '../avm_context.js'; -import type { AvmExecutionEnvironment } from '../avm_execution_environment.js'; -import { Field, type MemoryValue, Uint32, Uint64 } from '../avm_memory_types.js'; -import { Opcode } from '../serialization/instruction_serialization.js'; -import { GetterInstruction } from './instruction_impl.js'; - -abstract class EnvironmentGetterInstruction extends GetterInstruction { - protected getValue(context: AvmContext): MemoryValue { - return this.getEnvironmentValue(context.environment); - } - - protected abstract getEnvironmentValue(env: AvmExecutionEnvironment): MemoryValue; -} - -export class Address extends EnvironmentGetterInstruction { - static type: string = 'ADDRESS'; - static readonly opcode: Opcode = Opcode.ADDRESS; - - protected getEnvironmentValue(env: AvmExecutionEnvironment) { - return new Field(env.address.toField()); - } -} - -export class StorageAddress extends EnvironmentGetterInstruction { - static type: string = 'STORAGEADDRESS'; - static readonly opcode: Opcode = Opcode.STORAGEADDRESS; - - protected getEnvironmentValue(env: AvmExecutionEnvironment) { - return new Field(env.storageAddress.toField()); - } -} - -export class Sender extends EnvironmentGetterInstruction { - static type: string = 'SENDER'; - static readonly opcode: Opcode = Opcode.SENDER; - - protected getEnvironmentValue(env: AvmExecutionEnvironment) { - return new Field(env.sender.toField()); - } -} - -export class FunctionSelector extends EnvironmentGetterInstruction { - static type: string = 'FUNCTIONSELECTOR'; - static readonly opcode: Opcode = Opcode.FUNCTIONSELECTOR; - - protected getEnvironmentValue(env: AvmExecutionEnvironment) { - return new Uint32(env.functionSelector.value); - } -} - -export class TransactionFee extends EnvironmentGetterInstruction { - static type: string = 'TRANSACTIONFEE'; - static readonly opcode: Opcode = Opcode.TRANSACTIONFEE; - - protected getEnvironmentValue(env: AvmExecutionEnvironment) { - return new Field(env.transactionFee); - } -} - -export class ChainId extends EnvironmentGetterInstruction { - static type: string = 'CHAINID'; - static readonly opcode: Opcode = Opcode.CHAINID; - - protected getEnvironmentValue(env: AvmExecutionEnvironment) { - return new Field(env.globals.chainId); - } +import { Field, Uint32, Uint64 } from '../avm_memory_types.js'; +import { Opcode, OperandType } from '../serialization/instruction_serialization.js'; +import { Addressing } from './addressing_mode.js'; +import { Instruction } from './instruction.js'; + +export enum EnvironmentVariable { + ADDRESS, + STORAGEADDRESS, + SENDER, + FUNCTIONSELECTOR, + TRANSACTIONFEE, + CHAINID, + VERSION, + BLOCKNUMBER, + TIMESTAMP, + FEEPERL2GAS, + FEEPERDAGAS, + ISSTATICCALL, + L2GASLEFT, + DAGASLEFT, } -export class Version extends EnvironmentGetterInstruction { - static type: string = 'VERSION'; - static readonly opcode: Opcode = Opcode.VERSION; - - protected getEnvironmentValue(env: AvmExecutionEnvironment) { - return new Field(env.globals.version); +function getValue(e: EnvironmentVariable, ctx: AvmContext) { + switch (e) { + case EnvironmentVariable.ADDRESS: + return new Field(ctx.environment.address.toField()); + case EnvironmentVariable.STORAGEADDRESS: + return new Field(ctx.environment.storageAddress.toField()); + case EnvironmentVariable.SENDER: + return new Field(ctx.environment.sender.toField()); + case EnvironmentVariable.FUNCTIONSELECTOR: + return new Uint32(ctx.environment.functionSelector.value); + case EnvironmentVariable.TRANSACTIONFEE: + return new Field(ctx.environment.transactionFee); + case EnvironmentVariable.CHAINID: + return new Field(ctx.environment.globals.chainId); + case EnvironmentVariable.VERSION: + return new Field(ctx.environment.globals.version); + case EnvironmentVariable.BLOCKNUMBER: + return new Field(ctx.environment.globals.blockNumber); + case EnvironmentVariable.TIMESTAMP: + return new Uint64(ctx.environment.globals.timestamp.toBigInt()); + case EnvironmentVariable.FEEPERL2GAS: + return new Field(ctx.environment.globals.gasFees.feePerL2Gas); + case EnvironmentVariable.FEEPERDAGAS: + return new Field(ctx.environment.globals.gasFees.feePerDaGas); + case EnvironmentVariable.ISSTATICCALL: + return new Field(ctx.environment.isStaticCall ? 1 : 0); + case EnvironmentVariable.L2GASLEFT: + return new Field(ctx.machineState.l2GasLeft); + case EnvironmentVariable.DAGASLEFT: + return new Field(ctx.machineState.daGasLeft); + default: + throw new Error(`Unknown environment variable ${e}`); } } -export class BlockNumber extends EnvironmentGetterInstruction { - static type: string = 'BLOCKNUMBER'; - static readonly opcode: Opcode = Opcode.BLOCKNUMBER; - - protected getEnvironmentValue(env: AvmExecutionEnvironment) { - return new Field(env.globals.blockNumber); +export class GetEnvVar extends Instruction { + public static readonly type: string = 'GETENVVAR'; + public static readonly opcode: Opcode = Opcode.GETENVVAR_16; + static readonly wireFormat16: OperandType[] = [ + OperandType.UINT8, // opcode + OperandType.UINT8, // indirect + OperandType.UINT8, // variable enum (immediate) + OperandType.UINT16, // dstOffset + ]; + + constructor(private indirect: number, private varEnum: EnvironmentVariable, private dstOffset: number) { + super(); } -} -export class Timestamp extends EnvironmentGetterInstruction { - static type: string = 'TIMESTAMP'; - static readonly opcode: Opcode = Opcode.TIMESTAMP; + public async execute(context: AvmContext): Promise { + const memoryOperations = { writes: 1, indirect: this.indirect }; + const memory = context.machineState.memory.track(this.type); + context.machineState.consumeGas(this.gasCost(memoryOperations)); - protected getEnvironmentValue(env: AvmExecutionEnvironment) { - return new Uint64(env.globals.timestamp.toBigInt()); - } -} - -export class FeePerL2Gas extends EnvironmentGetterInstruction { - static type: string = 'FEEPERL2GAS'; - static readonly opcode: Opcode = Opcode.FEEPERL2GAS; - - protected getEnvironmentValue(env: AvmExecutionEnvironment) { - return new Field(env.globals.gasFees.feePerL2Gas); - } -} + const [dstOffset] = Addressing.fromWire(this.indirect).resolve([this.dstOffset], memory); -export class FeePerDAGas extends EnvironmentGetterInstruction { - static type: string = 'FEEPERDAGAS'; - static readonly opcode: Opcode = Opcode.FEEPERDAGAS; + memory.set(dstOffset, getValue(this.varEnum, context)); - protected getEnvironmentValue(env: AvmExecutionEnvironment) { - return new Field(env.globals.gasFees.feePerDaGas); + memory.assert(memoryOperations); + context.machineState.incrementPc(); } } diff --git a/yarn-project/simulator/src/avm/opcodes/external_calls.test.ts b/yarn-project/simulator/src/avm/opcodes/external_calls.test.ts index ce6bbe4a7f7..d91cac10995 100644 --- a/yarn-project/simulator/src/avm/opcodes/external_calls.test.ts +++ b/yarn-project/simulator/src/avm/opcodes/external_calls.test.ts @@ -2,17 +2,17 @@ import { Fr } from '@aztec/foundation/fields'; import { mock } from 'jest-mock-extended'; +import { type WorldStateDB } from '../../public/public_db_sources.js'; import { type PublicSideEffectTraceInterface } from '../../public/side_effect_trace_interface.js'; import { type AvmContext } from '../avm_context.js'; import { Field, TypeTag, Uint8, Uint32 } from '../avm_memory_types.js'; import { markBytecodeAsAvm } from '../bytecode_utils.js'; -import { adjustCalldataIndex, initContext, initHostStorage, initPersistableStateManager } from '../fixtures/index.js'; -import { type HostStorage } from '../journal/host_storage.js'; +import { initContext, initPersistableStateManager } from '../fixtures/index.js'; import { type AvmPersistableStateManager } from '../journal/journal.js'; import { encodeToBytecode } from '../serialization/bytecode_serialization.js'; import { Opcode } from '../serialization/instruction_serialization.js'; import { mockGetBytecode, mockTraceFork } from '../test_utils.js'; -import { L2GasLeft } from './context_getters.js'; +import { EnvironmentVariable, GetEnvVar } from './environment_getters.js'; import { Call, Return, Revert, StaticCall } from './external_calls.js'; import { type Instruction } from './instruction.js'; import { CalldataCopy, Set } from './memory.js'; @@ -20,15 +20,15 @@ import { SStore } from './storage.js'; describe('External Calls', () => { let context: AvmContext; - let hostStorage: HostStorage; + let worldStateDB: WorldStateDB; let trace: PublicSideEffectTraceInterface; let persistableState: AvmPersistableStateManager; beforeEach(() => { - hostStorage = initHostStorage(); + worldStateDB = mock(); trace = mock(); - persistableState = initPersistableStateManager({ hostStorage, trace }); - context = initContext({ persistableState: persistableState }); + persistableState = initPersistableStateManager({ worldStateDB, trace }); + context = initContext({ persistableState }); mockTraceFork(trace); // make sure trace.fork() works on nested call }); @@ -84,17 +84,14 @@ describe('External Calls', () => { // const otherContextInstructionsL2GasCost = 780; // Includes the cost of the call itself const otherContextInstructionsBytecode = markBytecodeAsAvm( encodeToBytecode([ - new Set(/*indirect=*/ 0, TypeTag.UINT32, adjustCalldataIndex(0), /*dstOffset=*/ 0).as( - Opcode.SET_8, - Set.wireFormat8, - ), + new Set(/*indirect=*/ 0, TypeTag.UINT32, 0, /*dstOffset=*/ 0).as(Opcode.SET_8, Set.wireFormat8), new Set(/*indirect=*/ 0, TypeTag.UINT32, argsSize, /*dstOffset=*/ 1).as(Opcode.SET_8, Set.wireFormat8), new CalldataCopy(/*indirect=*/ 0, /*csOffsetAddress=*/ 0, /*copySizeOffset=*/ 1, /*dstOffset=*/ 0), new SStore(/*indirect=*/ 0, /*srcOffset=*/ valueOffset, /*slotOffset=*/ slotOffset), new Return(/*indirect=*/ 0, /*retOffset=*/ 0, /*size=*/ 2), ]), ); - mockGetBytecode(hostStorage, otherContextInstructionsBytecode); + mockGetBytecode(worldStateDB, otherContextInstructionsBytecode); const { l2GasLeft: initialL2Gas, daGasLeft: initialDaGas } = context.machineState; @@ -127,7 +124,7 @@ describe('External Calls', () => { expect(await context.persistableState.peekStorage(addr, slot)).toEqual(valueToStore); expect(context.machineState.l2GasLeft).toBeLessThan(initialL2Gas); - expect(context.machineState.daGasLeft).toEqual(initialDaGas); + expect(context.machineState.daGasLeft).toBeLessThanOrEqual(initialDaGas); }); it('Should cap to available gas if allocated is bigger', async () => { @@ -144,11 +141,14 @@ describe('External Calls', () => { const otherContextInstructionsBytecode = markBytecodeAsAvm( encodeToBytecode([ - new L2GasLeft(/*indirect=*/ 0, /*dstOffset=*/ 0), + new GetEnvVar(/*indirect=*/ 0, /*envVar=*/ EnvironmentVariable.L2GASLEFT, /*dstOffset=*/ 0).as( + Opcode.GETENVVAR_16, + GetEnvVar.wireFormat16, + ), new Return(/*indirect=*/ 0, /*retOffset=*/ 0, /*size=*/ 1), ]), ); - mockGetBytecode(hostStorage, otherContextInstructionsBytecode); + mockGetBytecode(worldStateDB, otherContextInstructionsBytecode); const { l2GasLeft: initialL2Gas, daGasLeft: initialDaGas } = context.machineState; @@ -177,7 +177,7 @@ describe('External Calls', () => { expect(retValue).toBeLessThan(initialL2Gas); expect(context.machineState.l2GasLeft).toBeLessThan(initialL2Gas); - expect(context.machineState.daGasLeft).toEqual(initialDaGas); + expect(context.machineState.daGasLeft).toBeLessThanOrEqual(initialDaGas); }); }); @@ -235,7 +235,7 @@ describe('External Calls', () => { ]; const otherContextInstructionsBytecode = markBytecodeAsAvm(encodeToBytecode(otherContextInstructions)); - mockGetBytecode(hostStorage, otherContextInstructionsBytecode); + mockGetBytecode(worldStateDB, otherContextInstructionsBytecode); const instruction = new StaticCall( /*indirect=*/ 0, diff --git a/yarn-project/simulator/src/avm/opcodes/hashing.test.ts b/yarn-project/simulator/src/avm/opcodes/hashing.test.ts index ae350b94250..3d17a0d9d2a 100644 --- a/yarn-project/simulator/src/avm/opcodes/hashing.test.ts +++ b/yarn-project/simulator/src/avm/opcodes/hashing.test.ts @@ -1,10 +1,10 @@ -import { keccak256, keccakf1600, pedersenHash, sha256 } from '@aztec/foundation/crypto'; +import { keccak256, keccakf1600, pedersenHash, sha256Compression } from '@aztec/foundation/crypto'; import { type AvmContext } from '../avm_context.js'; import { Field, type Uint8, Uint32, Uint64 } from '../avm_memory_types.js'; -import { initContext, randomMemoryBytes, randomMemoryFields } from '../fixtures/index.js'; +import { initContext, randomMemoryBytes, randomMemoryFields, randomMemoryUint32s } from '../fixtures/index.js'; import { Addressing, AddressingMode } from './addressing_mode.js'; -import { Keccak, KeccakF1600, Pedersen, Poseidon2, Sha256 } from './hashing.js'; +import { Keccak, KeccakF1600, Pedersen, Poseidon2, Sha256Compression } from './hashing.js'; describe('Hashing Opcodes', () => { let context: AvmContext; @@ -173,72 +173,108 @@ describe('Hashing Opcodes', () => { }); }); - describe('Sha256', () => { + describe('Sha256Compression', () => { it('Should (de)serialize correctly', () => { const buf = Buffer.from([ - Sha256.opcode, // opcode + Sha256Compression.opcode, // opcode 1, // indirect ...Buffer.from('12345678', 'hex'), // dstOffset - ...Buffer.from('23456789', 'hex'), // messageOffset - ...Buffer.from('3456789a', 'hex'), // messageSizeOffset + ...Buffer.from('23456789', 'hex'), // stateOffset + ...Buffer.from('3456789a', 'hex'), // stateSizeOffset + ...Buffer.from('456789ab', 'hex'), // inputsOffset + ...Buffer.from('56789abc', 'hex'), // inputsSizeOffset ]); - const inst = new Sha256( + const inst = new Sha256Compression( /*indirect=*/ 1, /*dstOffset=*/ 0x12345678, - /*messageOffset=*/ 0x23456789, - /*messageSizeOffset=*/ 0x3456789a, + /*stateOffset=*/ 0x23456789, + /*stateSizeOffset=*/ 0x3456789a, + /*inputsOffset=*/ 0x456789ab, + /*inputsSizeOffset=*/ 0x56789abc, ); - expect(Sha256.deserialize(buf)).toEqual(inst); + expect(Sha256Compression.deserialize(buf)).toEqual(inst); expect(inst.serialize()).toEqual(buf); }); it('Should hash correctly - direct', async () => { - const args = randomMemoryBytes(10); + const state = randomMemoryUint32s(8); + const stateArray = Uint32Array.from(state.map(byte => byte.toNumber())); + const inputs = randomMemoryUint32s(16); + const inputsArray = Uint32Array.from(inputs.map(byte => byte.toNumber())); const indirect = 0; - const messageOffset = 0; - const messageSizeOffset = 15; - const dstOffset = 20; - context.machineState.memory.set(messageSizeOffset, new Uint32(args.length)); - context.machineState.memory.setSlice(messageOffset, args); - - await new Sha256(indirect, dstOffset, messageOffset, messageSizeOffset).execute(context); - - const resultBuffer = Buffer.concat( - context.machineState.memory.getSliceAs(dstOffset, 32).map(byte => byte.toBuffer()), - ); - const inputBuffer = Buffer.concat(args.map(byte => byte.toBuffer())); - const expectedHash = sha256(inputBuffer); - expect(resultBuffer).toEqual(expectedHash); + const stateOffset = 0; + const stateSizeOffset = 100; + const inputsOffset = 200; + const inputsSizeOffset = 300; + const outputOffset = 300; + context.machineState.memory.set(stateSizeOffset, new Uint32(state.length)); + context.machineState.memory.setSlice(stateOffset, state); + context.machineState.memory.set(inputsSizeOffset, new Uint32(inputs.length)); + context.machineState.memory.setSlice(inputsOffset, inputs); + + await new Sha256Compression( + indirect, + outputOffset, + stateOffset, + stateSizeOffset, + inputsOffset, + inputsSizeOffset, + ).execute(context); + + const output = context.machineState.memory.getSliceAs(outputOffset, 8); + const outputArray = Uint32Array.from(output.map(word => word.toNumber())); + + const expectedOutput = sha256Compression(stateArray, inputsArray); + expect(outputArray).toEqual(expectedOutput); }); it('Should hash correctly - indirect', async () => { - const args = randomMemoryBytes(10); + const state = randomMemoryUint32s(8); + const stateArray = Uint32Array.from(state.map(byte => byte.toNumber())); + const inputs = randomMemoryUint32s(16); + const inputsArray = Uint32Array.from(inputs.map(byte => byte.toNumber())); const indirect = new Addressing([ /*dstOffset=*/ AddressingMode.INDIRECT, - /*messageOffset*/ AddressingMode.INDIRECT, - /*messageSizeOffset*/ AddressingMode.INDIRECT, + /*stateOffset*/ AddressingMode.INDIRECT, + /*stateSizeOffset*/ AddressingMode.INDIRECT, + /*inputsOffset*/ AddressingMode.INDIRECT, + /*inputsSizeOffset*/ AddressingMode.INDIRECT, ]).toWire(); - const messageOffset = 0; - const messageOffsetReal = 10; - const messageSizeOffset = 1; - const messageSizeOffsetReal = 100; - const dstOffset = 2; - const dstOffsetReal = 30; - context.machineState.memory.set(messageOffset, new Uint32(messageOffsetReal)); - context.machineState.memory.set(dstOffset, new Uint32(dstOffsetReal)); - context.machineState.memory.set(messageSizeOffset, new Uint32(messageSizeOffsetReal)); - context.machineState.memory.set(messageSizeOffsetReal, new Uint32(args.length)); - context.machineState.memory.setSlice(messageOffsetReal, args); - - await new Sha256(indirect, dstOffset, messageOffset, messageSizeOffset).execute(context); - - const resultBuffer = Buffer.concat( - context.machineState.memory.getSliceAs(dstOffsetReal, 32).map(byte => byte.toBuffer()), - ); - const inputBuffer = Buffer.concat(args.map(byte => byte.toBuffer())); - const expectedHash = sha256(inputBuffer); - expect(resultBuffer).toEqual(expectedHash); + const stateOffset = 0; + const stateOffsetReal = 10; + const stateSizeOffset = 1; + const stateSizeOffsetReal = 100; + const inputsOffset = 2; + const inputsOffsetReal = 200; + const inputsSizeOffset = 3; + const inputsSizeOffsetReal = 300; + const outputOffset = 4; + const outputOffsetReal = 400; + context.machineState.memory.set(stateSizeOffset, new Uint32(stateSizeOffsetReal)); + context.machineState.memory.set(stateSizeOffsetReal, new Uint32(state.length)); + context.machineState.memory.set(stateOffset, new Uint32(stateOffsetReal)); + context.machineState.memory.setSlice(stateOffsetReal, state); + context.machineState.memory.set(inputsSizeOffset, new Uint32(inputsSizeOffsetReal)); + context.machineState.memory.set(inputsSizeOffsetReal, new Uint32(inputs.length)); + context.machineState.memory.set(inputsOffset, new Uint32(inputsOffsetReal)); + context.machineState.memory.setSlice(inputsOffsetReal, inputs); + context.machineState.memory.set(outputOffset, new Uint32(outputOffsetReal)); + + await new Sha256Compression( + indirect, + outputOffset, + stateOffset, + stateSizeOffset, + inputsOffset, + inputsSizeOffset, + ).execute(context); + + const output = context.machineState.memory.getSliceAs(outputOffsetReal, 8); + const outputArray = Uint32Array.from(output.map(word => word.toNumber())); + + const expectedOutput = sha256Compression(stateArray, inputsArray); + expect(outputArray).toEqual(expectedOutput); }); }); diff --git a/yarn-project/simulator/src/avm/opcodes/hashing.ts b/yarn-project/simulator/src/avm/opcodes/hashing.ts index 6a70b7e6a6b..635e6aa1c5c 100644 --- a/yarn-project/simulator/src/avm/opcodes/hashing.ts +++ b/yarn-project/simulator/src/avm/opcodes/hashing.ts @@ -1,9 +1,16 @@ -import { keccak256, keccakf1600, pedersenHash, poseidon2Permutation, sha256 } from '@aztec/foundation/crypto'; +import { + keccak256, + keccakf1600, + pedersenHash, + poseidon2Permutation, + sha256Compression, +} from '@aztec/foundation/crypto'; import { strict as assert } from 'assert'; import { type AvmContext } from '../avm_context.js'; -import { Field, TypeTag, Uint8, Uint64 } from '../avm_memory_types.js'; +import { Field, TypeTag, Uint8, Uint32, Uint64 } from '../avm_memory_types.js'; +import { InstructionExecutionError } from '../errors.js'; import { Opcode, OperandType } from '../serialization/instruction_serialization.js'; import { Addressing } from './addressing_mode.js'; import { Instruction } from './instruction.js'; @@ -80,7 +87,7 @@ export class Keccak extends Instruction { memory.checkTag(TypeTag.UINT32, messageSizeOffset); const messageSize = memory.get(messageSizeOffset).toNumber(); const memoryOperations = { reads: messageSize + 1, writes: 32, indirect: this.indirect }; - context.machineState.consumeGas(this.gasCost(memoryOperations)); + context.machineState.consumeGas(this.gasCost({ ...memoryOperations, dynMultiplier: messageSize })); memory.checkTagsRange(TypeTag.UINT8, messageOffset, messageSize); @@ -145,9 +152,9 @@ export class KeccakF1600 extends Instruction { } } -export class Sha256 extends Instruction { - static type: string = 'SHA256'; - static readonly opcode: Opcode = Opcode.SHA256; +export class Sha256Compression extends Instruction { + static type: string = 'SHA256COMPRESSION'; + static readonly opcode: Opcode = Opcode.SHA256COMPRESSION; // Informs (de)serialization. See Instruction.deserialize. static readonly wireFormat: OperandType[] = [ @@ -156,36 +163,54 @@ export class Sha256 extends Instruction { OperandType.UINT32, OperandType.UINT32, OperandType.UINT32, + OperandType.UINT32, + OperandType.UINT32, ]; constructor( private indirect: number, - private dstOffset: number, - private messageOffset: number, - private messageSizeOffset: number, + private outputOffset: number, + private stateOffset: number, + private stateSizeOffset: number, + private inputsOffset: number, + private inputsSizeOffset: number, ) { super(); } - // pub fn sha256_slice(input: [u8]) -> [u8; 32] public async execute(context: AvmContext): Promise { + const STATE_SIZE = 8; + const INPUTS_SIZE = 16; + const memory = context.machineState.memory.track(this.type); - const [dstOffset, messageOffset, messageSizeOffset] = Addressing.fromWire(this.indirect).resolve( - [this.dstOffset, this.messageOffset, this.messageSizeOffset], + const [outputOffset, stateOffset, stateSizeOffset, inputsOffset, inputsSizeOffset] = Addressing.fromWire( + this.indirect, + ).resolve( + [this.outputOffset, this.stateOffset, this.stateSizeOffset, this.inputsOffset, this.inputsSizeOffset], memory, ); - memory.checkTag(TypeTag.UINT32, messageSizeOffset); - const messageSize = memory.get(messageSizeOffset).toNumber(); - const memoryOperations = { reads: messageSize + 1, writes: 32, indirect: this.indirect }; + const stateSize = memory.get(stateSizeOffset).toNumber(); + const inputsSize = memory.get(inputsSizeOffset).toNumber(); + if (stateSize !== STATE_SIZE) { + throw new InstructionExecutionError('`state` argument to SHA256 compression must be of length 8'); + } + if (inputsSize !== INPUTS_SIZE) { + throw new InstructionExecutionError('`inputs` argument to SHA256 compression must be of length 16'); + } + // +2 to account for both size offsets (stateSizeOffset and inputsSizeOffset) + // Note: size of output is same as size of state + const memoryOperations = { reads: stateSize + inputsSize + 2, writes: stateSize, indirect: this.indirect }; context.machineState.consumeGas(this.gasCost(memoryOperations)); - memory.checkTagsRange(TypeTag.UINT8, messageOffset, messageSize); + memory.checkTagsRange(TypeTag.UINT32, inputsOffset, inputsSize); + memory.checkTagsRange(TypeTag.UINT32, stateOffset, stateSize); - const messageData = Buffer.concat(memory.getSlice(messageOffset, messageSize).map(word => word.toBuffer())); - const hashBuffer = sha256(messageData); + const state = Uint32Array.from(memory.getSlice(stateOffset, stateSize).map(word => word.toNumber())); + const inputs = Uint32Array.from(memory.getSlice(inputsOffset, inputsSize).map(word => word.toNumber())); + const output = sha256Compression(state, inputs); - // We need to convert the hashBuffer because map doesn't work as expected on an Uint8Array (Buffer). - const res = [...hashBuffer].map(byte => new Uint8(byte)); - memory.setSlice(dstOffset, res); + // Conversion required from Uint32Array to Uint32[] (can't map directly, need `...`) + const res = [...output].map(word => new Uint32(word)); + memory.setSlice(outputOffset, res); memory.assert(memoryOperations); context.machineState.incrementPc(); @@ -231,7 +256,7 @@ export class Pedersen extends Instruction { const hashData = memory.getSlice(messageOffset, messageSize); const memoryOperations = { reads: messageSize + 2, writes: 1, indirect: this.indirect }; - context.machineState.consumeGas(this.gasCost(memoryOperations)); + context.machineState.consumeGas(this.gasCost({ ...memoryOperations, dynMultiplier: messageSize })); memory.checkTagsRange(TypeTag.FIELD, messageOffset, messageSize); diff --git a/yarn-project/simulator/src/avm/opcodes/index.ts b/yarn-project/simulator/src/avm/opcodes/index.ts index d0614bb169a..9ae06bd08c0 100644 --- a/yarn-project/simulator/src/avm/opcodes/index.ts +++ b/yarn-project/simulator/src/avm/opcodes/index.ts @@ -11,3 +11,6 @@ export * from './storage.js'; export * from './external_calls.js'; export * from './environment_getters.js'; export * from './accrued_substate.js'; +export * from './hashing.js'; +export * from './ec_add.js'; +export * from './commitment.js'; diff --git a/yarn-project/simulator/src/avm/opcodes/instruction_impl.ts b/yarn-project/simulator/src/avm/opcodes/instruction_impl.ts index 86e042f44c1..8d2a6f86d69 100644 --- a/yarn-project/simulator/src/avm/opcodes/instruction_impl.ts +++ b/yarn-project/simulator/src/avm/opcodes/instruction_impl.ts @@ -1,25 +1,6 @@ -import { type AvmContext } from '../avm_context.js'; -import { type MemoryValue } from '../avm_memory_types.js'; import { OperandType } from '../serialization/instruction_serialization.js'; -import { Addressing } from './addressing_mode.js'; import { Instruction } from './instruction.js'; -/** Wire format that informs deserialization for instructions with two operands. */ -export const TwoOperandWireFormat8 = [ - OperandType.UINT8, - OperandType.UINT8, - OperandType.UINT8, - OperandType.UINT8, - OperandType.UINT8, -]; -export const TwoOperandWireFormat16 = [ - OperandType.UINT8, - OperandType.UINT8, - OperandType.UINT8, - OperandType.UINT16, - OperandType.UINT16, -]; - /** Wire format that informs deserialization for instructions with three operands. */ export const ThreeOperandWireFormat8 = [ OperandType.UINT8, @@ -38,25 +19,6 @@ export const ThreeOperandWireFormat16 = [ OperandType.UINT16, ]; -/** - * Covers (de)serialization for an instruction with: - * indirect, inTag, and two operands. - */ -export abstract class TwoOperandInstruction extends Instruction { - // Informs (de)serialization. See Instruction.deserialize. - static readonly wireFormat8: OperandType[] = TwoOperandWireFormat8; - static readonly wireFormat16: OperandType[] = TwoOperandWireFormat16; - - constructor( - protected indirect: number, - protected inTag: number, - protected aOffset: number, - protected dstOffset: number, - ) { - super(); - } -} - /** * Covers (de)serialization for an instruction with: * indirect, inTag, and three operands. @@ -75,27 +37,3 @@ export abstract class ThreeOperandInstruction extends Instruction { super(); } } - -export abstract class GetterInstruction extends Instruction { - // Informs (de)serialization. See Instruction.deserialize. - static readonly wireFormat: OperandType[] = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT32]; - - constructor(protected indirect: number, protected dstOffset: number) { - super(); - } - - public async execute(context: AvmContext): Promise { - const memoryOperations = { writes: 1, indirect: this.indirect }; - const memory = context.machineState.memory.track(this.type); - context.machineState.consumeGas(this.gasCost(memoryOperations)); - - const [dstOffset] = Addressing.fromWire(this.indirect).resolve([this.dstOffset], memory); - - memory.set(dstOffset, this.getValue(context)); - - memory.assert(memoryOperations); - context.machineState.incrementPc(); - } - - protected abstract getValue(env: AvmContext): MemoryValue; -} diff --git a/yarn-project/simulator/src/avm/opcodes/memory.test.ts b/yarn-project/simulator/src/avm/opcodes/memory.test.ts index 74bce1ee589..29be47112c8 100644 --- a/yarn-project/simulator/src/avm/opcodes/memory.test.ts +++ b/yarn-project/simulator/src/avm/opcodes/memory.test.ts @@ -2,7 +2,7 @@ import { Fr } from '@aztec/foundation/fields'; import { type AvmContext } from '../avm_context.js'; import { Field, TypeTag, Uint8, Uint16, Uint32, Uint64, Uint128 } from '../avm_memory_types.js'; -import { adjustCalldataIndex, initContext, initExecutionEnvironment } from '../fixtures/index.js'; +import { initContext, initExecutionEnvironment } from '../fixtures/index.js'; import { Opcode } from '../serialization/instruction_serialization.js'; import { Addressing, AddressingMode } from './addressing_mode.js'; import { CMov, CalldataCopy, Cast, Mov, Set } from './memory.js'; @@ -470,7 +470,7 @@ describe('Memory instructions', () => { it('Writes nothing if size is 0', async () => { const calldata = [new Fr(1n), new Fr(2n), new Fr(3n)]; context = initContext({ env: initExecutionEnvironment({ calldata }) }); - context.machineState.memory.set(0, new Uint32(adjustCalldataIndex(0))); // cdoffset + context.machineState.memory.set(0, new Uint32(0)); // cdoffset context.machineState.memory.set(1, new Uint32(0)); // size context.machineState.memory.set(3, new Uint16(12)); // not overwritten @@ -483,7 +483,7 @@ describe('Memory instructions', () => { it('Copies all calldata', async () => { const calldata = [new Fr(1n), new Fr(2n), new Fr(3n)]; context = initContext({ env: initExecutionEnvironment({ calldata }) }); - context.machineState.memory.set(0, new Uint32(adjustCalldataIndex(0))); // cdoffset + context.machineState.memory.set(0, new Uint32(0)); // cdoffset context.machineState.memory.set(1, new Uint32(3)); // size await new CalldataCopy(/*indirect=*/ 0, /*cdOffset=*/ 0, /*copySize=*/ 1, /*dstOffset=*/ 0).execute(context); @@ -495,7 +495,7 @@ describe('Memory instructions', () => { it('Copies slice of calldata', async () => { const calldata = [new Fr(1n), new Fr(2n), new Fr(3n)]; context = initContext({ env: initExecutionEnvironment({ calldata }) }); - context.machineState.memory.set(0, new Uint32(adjustCalldataIndex(1))); // cdoffset + context.machineState.memory.set(0, new Uint32(1)); // cdoffset context.machineState.memory.set(1, new Uint32(2)); // size await new CalldataCopy(/*indirect=*/ 0, /*cdOffset=*/ 0, /*copySize=*/ 1, /*dstOffset=*/ 0).execute(context); diff --git a/yarn-project/simulator/src/avm/opcodes/memory.ts b/yarn-project/simulator/src/avm/opcodes/memory.ts index b96e9466228..52c50c55786 100644 --- a/yarn-project/simulator/src/avm/opcodes/memory.ts +++ b/yarn-project/simulator/src/avm/opcodes/memory.ts @@ -3,7 +3,6 @@ import { Field, TaggedMemory } from '../avm_memory_types.js'; import { Opcode, OperandType } from '../serialization/instruction_serialization.js'; import { Addressing } from './addressing_mode.js'; import { Instruction } from './instruction.js'; -import { TwoOperandInstruction } from './instruction_impl.js'; export class Set extends Instruction { static readonly type: string = 'SET'; @@ -121,12 +120,27 @@ export class CMov extends Instruction { } } -export class Cast extends TwoOperandInstruction { +export class Cast extends Instruction { static readonly type: string = 'CAST'; static readonly opcode = Opcode.CAST_8; - constructor(indirect: number, dstTag: number, srcOffset: number, dstOffset: number) { - super(indirect, dstTag, srcOffset, dstOffset); + static readonly wireFormat8 = [ + OperandType.UINT8, + OperandType.UINT8, + OperandType.UINT8, + OperandType.UINT8, + OperandType.UINT8, + ]; + static readonly wireFormat16 = [ + OperandType.UINT8, + OperandType.UINT8, + OperandType.UINT8, + OperandType.UINT16, + OperandType.UINT16, + ]; + + constructor(private indirect: number, private dstTag: number, private srcOffset: number, private dstOffset: number) { + super(); } public async execute(context: AvmContext): Promise { @@ -134,10 +148,10 @@ export class Cast extends TwoOperandInstruction { const memory = context.machineState.memory.track(this.type); context.machineState.consumeGas(this.gasCost(memoryOperations)); - const [srcOffset, dstOffset] = Addressing.fromWire(this.indirect).resolve([this.aOffset, this.dstOffset], memory); + const [srcOffset, dstOffset] = Addressing.fromWire(this.indirect).resolve([this.srcOffset, this.dstOffset], memory); const a = memory.get(srcOffset); - const casted = TaggedMemory.buildFromTagTruncating(a.toBigInt(), this.inTag); + const casted = TaggedMemory.buildFromTagTruncating(a.toBigInt(), this.dstTag); memory.set(dstOffset, casted); diff --git a/yarn-project/simulator/src/avm/opcodes/multi_scalar_mul.test.ts b/yarn-project/simulator/src/avm/opcodes/multi_scalar_mul.test.ts index 133f215dfad..098a0dcd889 100644 --- a/yarn-project/simulator/src/avm/opcodes/multi_scalar_mul.test.ts +++ b/yarn-project/simulator/src/avm/opcodes/multi_scalar_mul.test.ts @@ -2,7 +2,7 @@ import { Fq, Fr } from '@aztec/circuits.js'; import { Grumpkin } from '@aztec/circuits.js/barretenberg'; import { type AvmContext } from '../avm_context.js'; -import { Field, type MemoryValue, Uint8, Uint32 } from '../avm_memory_types.js'; +import { Field, type MemoryValue, Uint1, Uint32 } from '../avm_memory_types.js'; import { initContext } from '../fixtures/index.js'; import { MultiScalarMul } from './multi_scalar_mul.js'; @@ -50,7 +50,7 @@ describe('MultiScalarMul Opcode', () => { // Points are stored as [x1, y1, inf1, x2, y2, inf2, ...] where the types are [Field, Field, Uint8, Field, Field, Uint8, ...] const storedPoints: MemoryValue[] = points .map(p => p.toFields()) - .flatMap(([x, y, inf]) => [new Field(x), new Field(y), new Uint8(inf.toNumber())]); + .flatMap(([x, y, inf]) => [new Field(x), new Field(y), new Uint1(inf.toNumber())]); const pointsOffset = 0; context.machineState.memory.setSlice(pointsOffset, storedPoints); // Store scalars @@ -90,7 +90,7 @@ describe('MultiScalarMul Opcode', () => { // Points are stored as [x1, y1, inf1, x2, y2, inf2, ...] where the types are [Field, Field, Uint8, Field, Field, Uint8, ...] const storedPoints: MemoryValue[] = points .map(p => p.toFields()) - .flatMap(([x, y, inf]) => [new Field(x), new Field(y), new Uint8(inf.toNumber())]); + .flatMap(([x, y, inf]) => [new Field(x), new Field(y), new Uint1(inf.toNumber())]); const pointsOffset = 0; context.machineState.memory.setSlice(pointsOffset, storedPoints); // Store scalars diff --git a/yarn-project/simulator/src/avm/opcodes/multi_scalar_mul.ts b/yarn-project/simulator/src/avm/opcodes/multi_scalar_mul.ts index c89301ee134..76477f7601b 100644 --- a/yarn-project/simulator/src/avm/opcodes/multi_scalar_mul.ts +++ b/yarn-project/simulator/src/avm/opcodes/multi_scalar_mul.ts @@ -1,8 +1,6 @@ import { Fq, Point } from '@aztec/circuits.js'; import { Grumpkin } from '@aztec/circuits.js/barretenberg'; -import { strict as assert } from 'assert'; - import { type AvmContext } from '../avm_context.js'; import { Field, TypeTag } from '../avm_memory_types.js'; import { InstructionExecutionError } from '../errors.js'; @@ -46,7 +44,9 @@ export class MultiScalarMul extends Instruction { memory.checkTag(TypeTag.UINT32, this.pointsLengthOffset); // Get the size of the unrolled (x, y , inf) points vector const pointsReadLength = memory.get(this.pointsLengthOffset).toNumber(); - assert(pointsReadLength % 3 === 0, 'Points vector offset should be a multiple of 3'); + if (pointsReadLength % 3 !== 0) { + throw new InstructionExecutionError(`Points vector offset should be a multiple of 3, was ${pointsReadLength}`); + } // Divide by 3 since each point is represented as a triplet to get the number of points const numPoints = pointsReadLength / 3; // The tag for each triplet will be (Field, Field, Uint8) @@ -54,8 +54,8 @@ export class MultiScalarMul extends Instruction { const offset = pointsOffset + i * 3; // Check (Field, Field) memory.checkTagsRange(TypeTag.FIELD, offset, 2); - // Check Uint8 (inf flag) - memory.checkTag(TypeTag.UINT8, offset + 2); + // Check Uint1 (inf flag) + memory.checkTag(TypeTag.UINT1, offset + 2); } // Get the unrolled (x, y, inf) representing the points const pointsVector = memory.getSlice(pointsOffset, pointsReadLength); @@ -68,7 +68,7 @@ export class MultiScalarMul extends Instruction { writes: 3 /* output triplet */, indirect: this.indirect, }; - context.machineState.consumeGas(this.gasCost(memoryOperations)); + context.machineState.consumeGas(this.gasCost({ ...memoryOperations, dynMultiplier: pointsReadLength })); // Get the unrolled scalar (lo & hi) representing the scalars const scalarsVector = memory.getSlice(scalarsOffset, scalarReadLength); memory.checkTagsRange(TypeTag.FIELD, scalarsOffset, scalarReadLength); diff --git a/yarn-project/simulator/src/avm/serialization/bytecode_serialization.test.ts b/yarn-project/simulator/src/avm/serialization/bytecode_serialization.test.ts index 10354bcc410..ccc5fa2f951 100644 --- a/yarn-project/simulator/src/avm/serialization/bytecode_serialization.test.ts +++ b/yarn-project/simulator/src/avm/serialization/bytecode_serialization.test.ts @@ -1,6 +1,6 @@ import { strict as assert } from 'assert'; -import { Add, Address, Call, StaticCall, Sub } from '../opcodes/index.js'; +import { Add, Call, EnvironmentVariable, GetEnvVar, StaticCall, Sub } from '../opcodes/index.js'; import { type BufferCursor } from './buffer_cursor.js'; import { type InstructionSet, decodeFromBytecode, encodeToBytecode } from './bytecode_serialization.js'; import { Opcode } from './instruction_serialization.js'; @@ -80,7 +80,10 @@ describe('Bytecode Serialization', () => { Opcode.SUB_8, Sub.wireFormat8, ), - new Address(/*indirect=*/ 0, /*dstOffset=*/ 1), + new GetEnvVar(/*indirect=*/ 0, EnvironmentVariable.ADDRESS, /*dstOffset=*/ 1).as( + Opcode.GETENVVAR_16, + GetEnvVar.wireFormat16, + ), new Call( /*indirect=*/ 0x01, /*gasOffset=*/ 0x12345678, @@ -121,7 +124,10 @@ describe('Bytecode Serialization', () => { Opcode.SUB_8, Sub.wireFormat8, ), - new Address(/*indirect=*/ 0, /*dstOffset=*/ 1), + new GetEnvVar(/*indirect=*/ 0, EnvironmentVariable.ADDRESS, /*dstOffset=*/ 1).as( + Opcode.GETENVVAR_16, + GetEnvVar.wireFormat16, + ), new Call( /*indirect=*/ 0x01, /*gasOffset=*/ 0x12345678, diff --git a/yarn-project/simulator/src/avm/serialization/bytecode_serialization.ts b/yarn-project/simulator/src/avm/serialization/bytecode_serialization.ts index da4ded88423..75f656fa181 100644 --- a/yarn-project/simulator/src/avm/serialization/bytecode_serialization.ts +++ b/yarn-project/simulator/src/avm/serialization/bytecode_serialization.ts @@ -1,33 +1,27 @@ -import { PedersenCommitment } from '../opcodes/commitment.js'; -import { DAGasLeft, L2GasLeft } from '../opcodes/context_getters.js'; -import { EcAdd } from '../opcodes/ec_add.js'; -import { Keccak, KeccakF1600, Pedersen, Poseidon2, Sha256 } from '../opcodes/hashing.js'; import { Add, - Address, And, - BlockNumber, CMov, Call, CalldataCopy, Cast, - ChainId, DebugLog, Div, + EcAdd, EmitNoteHash, EmitNullifier, EmitUnencryptedLog, Eq, - FeePerDAGas, - FeePerL2Gas, FieldDiv, - FunctionSelector, GetContractInstance, + GetEnvVar, Instruction, InternalCall, InternalReturn, Jump, JumpI, + Keccak, + KeccakF1600, L1ToL2MessageExists, Lt, Lte, @@ -37,22 +31,21 @@ import { NoteHashExists, NullifierExists, Or, + Pedersen, + PedersenCommitment, + Poseidon2, Return, Revert, SLoad, SStore, SendL2ToL1Message, - Sender, Set, + Sha256Compression, Shl, Shr, StaticCall, - StorageAddress, Sub, - Timestamp, ToRadixLE, - TransactionFee, - Version, Xor, } from '../opcodes/index.js'; import { MultiScalarMul } from '../opcodes/multi_scalar_mul.js'; @@ -104,25 +97,10 @@ const INSTRUCTION_SET = () => [Opcode.SHR_16, Shr.as(Shr.wireFormat16).deserialize], [Opcode.CAST_8, Cast.as(Cast.wireFormat8).deserialize], [Opcode.CAST_16, Cast.as(Cast.wireFormat16).deserialize], - [Address.opcode, Instruction.deserialize.bind(Address)], - [StorageAddress.opcode, Instruction.deserialize.bind(StorageAddress)], - [Sender.opcode, Instruction.deserialize.bind(Sender)], - [FunctionSelector.opcode, Instruction.deserialize.bind(FunctionSelector)], - [TransactionFee.opcode, Instruction.deserialize.bind(TransactionFee)], - // Execution Environment - Globals - [ChainId.opcode, Instruction.deserialize.bind(ChainId)], - [Version.opcode, Instruction.deserialize.bind(Version)], - [BlockNumber.opcode, Instruction.deserialize.bind(BlockNumber)], - [Timestamp.opcode, Instruction.deserialize.bind(Timestamp)], - [FeePerL2Gas.opcode, Instruction.deserialize.bind(FeePerL2Gas)], - [FeePerDAGas.opcode, Instruction.deserialize.bind(FeePerDAGas)], - // Execution Environment - Calldata + // Execution Environment + [Opcode.GETENVVAR_16, GetEnvVar.as(GetEnvVar.wireFormat16).deserialize], [CalldataCopy.opcode, Instruction.deserialize.bind(CalldataCopy)], - // Machine State - // Machine State - Gas - [L2GasLeft.opcode, Instruction.deserialize.bind(L2GasLeft)], - [DAGasLeft.opcode, Instruction.deserialize.bind(DAGasLeft)], // Machine State - Internal Control Flow [Jump.opcode, Instruction.deserialize.bind(Jump)], [JumpI.opcode, Instruction.deserialize.bind(JumpI)], @@ -167,7 +145,7 @@ const INSTRUCTION_SET = () => [EcAdd.opcode, Instruction.deserialize.bind(EcAdd)], [Keccak.opcode, Instruction.deserialize.bind(Keccak)], [Poseidon2.opcode, Instruction.deserialize.bind(Poseidon2)], - [Sha256.opcode, Instruction.deserialize.bind(Sha256)], + [Sha256Compression.opcode, Instruction.deserialize.bind(Sha256Compression)], [Pedersen.opcode, Instruction.deserialize.bind(Pedersen)], [MultiScalarMul.opcode, Instruction.deserialize.bind(MultiScalarMul)], [PedersenCommitment.opcode, Instruction.deserialize.bind(PedersenCommitment)], diff --git a/yarn-project/simulator/src/avm/serialization/instruction_serialization.ts b/yarn-project/simulator/src/avm/serialization/instruction_serialization.ts index 140a586f5ec..182dc14c51d 100644 --- a/yarn-project/simulator/src/avm/serialization/instruction_serialization.ts +++ b/yarn-project/simulator/src/avm/serialization/instruction_serialization.ts @@ -39,21 +39,8 @@ export enum Opcode { CAST_8, CAST_16, // Execution environment - ADDRESS, - STORAGEADDRESS, - SENDER, - FUNCTIONSELECTOR, - TRANSACTIONFEE, - CHAINID, - VERSION, - BLOCKNUMBER, - TIMESTAMP, - FEEPERL2GAS, - FEEPERDAGAS, + GETENVVAR_16, CALLDATACOPY, - // Gas - L2GASLEFT, - DAGASLEFT, // Control flow JUMP_16, JUMPI_16, @@ -92,16 +79,14 @@ export enum Opcode { // Gadgets KECCAK, POSEIDON2, - SHA256, // temp - may be removed, but alot of contracts rely on it + SHA256COMPRESSION, + KECCAKF1600, PEDERSEN, // temp - may be removed, but alot of contracts rely on it ECADD, MSM, PEDERSENCOMMITMENT, // Conversion TORADIXLE, - // Future Gadgets -- pending changes in noir - SHA256COMPRESSION, - KECCAKF1600, // Here for when we eventually support this } // Possible types for an instruction's operand in its wire format. (Keep in sync with CPP code. @@ -109,6 +94,7 @@ export enum Opcode { // Note that cpp code introduced an additional enum value TAG to express the instruction tag. In TS, // this one is parsed as UINT8. export enum OperandType { + UINT1, UINT8, UINT16, UINT32, @@ -122,6 +108,7 @@ type OperandWriter = (value: any) => void; // Specifies how to read and write each operand type. const OPERAND_SPEC = new Map OperandNativeType, OperandWriter]>([ + [OperandType.UINT1, [1, Buffer.prototype.readUint8, Buffer.prototype.writeUint8]], [OperandType.UINT8, [1, Buffer.prototype.readUint8, Buffer.prototype.writeUint8]], [OperandType.UINT16, [2, Buffer.prototype.readUint16BE, Buffer.prototype.writeUint16BE]], [OperandType.UINT32, [4, Buffer.prototype.readUint32BE, Buffer.prototype.writeUint32BE]], diff --git a/yarn-project/simulator/src/avm/test_utils.ts b/yarn-project/simulator/src/avm/test_utils.ts index f7dda9f6593..65862759fb5 100644 --- a/yarn-project/simulator/src/avm/test_utils.ts +++ b/yarn-project/simulator/src/avm/test_utils.ts @@ -4,12 +4,11 @@ import { type ContractInstanceWithAddress } from '@aztec/types/contracts'; import { type jest } from '@jest/globals'; import { mock } from 'jest-mock-extended'; -import { type CommitmentsDB, type PublicContractsDB, type PublicStateDB } from '../public/db_interfaces.js'; +import { type WorldStateDB } from '../public/public_db_sources.js'; import { type PublicSideEffectTraceInterface } from '../public/side_effect_trace_interface.js'; -import { type HostStorage } from './journal/host_storage.js'; -export function mockGetBytecode(hs: HostStorage, bytecode: Buffer) { - (hs as jest.Mocked).contractsDb.getBytecode.mockResolvedValue(bytecode); +export function mockGetBytecode(worldStateDB: WorldStateDB, bytecode: Buffer) { + (worldStateDB as jest.Mocked).getBytecode.mockResolvedValue(bytecode); } export function mockTraceFork(trace: PublicSideEffectTraceInterface, nestedTrace?: PublicSideEffectTraceInterface) { @@ -18,18 +17,18 @@ export function mockTraceFork(trace: PublicSideEffectTraceInterface, nestedTrace ); } -export function mockStorageRead(hs: HostStorage, value: Fr) { - (hs.publicStateDb as jest.Mocked).storageRead.mockResolvedValue(value); +export function mockStorageRead(worldStateDB: WorldStateDB, value: Fr) { + (worldStateDB as jest.Mocked).storageRead.mockResolvedValue(value); } -export function mockStorageReadWithMap(hs: HostStorage, mockedStorage: Map) { - (hs.publicStateDb as jest.Mocked).storageRead.mockImplementation((_address, slot) => +export function mockStorageReadWithMap(worldStateDB: WorldStateDB, mockedStorage: Map) { + (worldStateDB as jest.Mocked).storageRead.mockImplementation((_address, slot) => Promise.resolve(mockedStorage.get(slot.toBigInt()) ?? Fr.ZERO), ); } -export function mockNoteHashExists(hs: HostStorage, _leafIndex: Fr, value?: Fr) { - (hs.commitmentsDb as jest.Mocked).getCommitmentValue.mockImplementation((index: bigint) => { +export function mockNoteHashExists(worldStateDB: WorldStateDB, _leafIndex: Fr, value?: Fr) { + (worldStateDB as jest.Mocked).getCommitmentValue.mockImplementation((index: bigint) => { if (index == _leafIndex.toBigInt()) { return Promise.resolve(value); } else { @@ -39,12 +38,17 @@ export function mockNoteHashExists(hs: HostStorage, _leafIndex: Fr, value?: Fr) }); } -export function mockNullifierExists(hs: HostStorage, leafIndex: Fr, _value?: Fr) { - (hs.commitmentsDb as jest.Mocked).getNullifierIndex.mockResolvedValue(leafIndex.toBigInt()); +export function mockNullifierExists(worldStateDB: WorldStateDB, leafIndex: Fr, _value?: Fr) { + (worldStateDB as jest.Mocked).getNullifierIndex.mockResolvedValue(leafIndex.toBigInt()); } -export function mockL1ToL2MessageExists(hs: HostStorage, leafIndex: Fr, value: Fr, valueAtOtherIndices?: Fr) { - (hs.commitmentsDb as jest.Mocked).getL1ToL2LeafValue.mockImplementation((index: bigint) => { +export function mockL1ToL2MessageExists( + worldStateDB: WorldStateDB, + leafIndex: Fr, + value: Fr, + valueAtOtherIndices?: Fr, +) { + (worldStateDB as jest.Mocked).getL1ToL2LeafValue.mockImplementation((index: bigint) => { if (index == leafIndex.toBigInt()) { return Promise.resolve(value); } else { @@ -55,6 +59,6 @@ export function mockL1ToL2MessageExists(hs: HostStorage, leafIndex: Fr, value: F }); } -export function mockGetContractInstance(hs: HostStorage, contractInstance: ContractInstanceWithAddress) { - (hs.contractsDb as jest.Mocked).getContractInstance.mockResolvedValue(contractInstance); +export function mockGetContractInstance(worldStateDB: WorldStateDB, contractInstance: ContractInstanceWithAddress) { + (worldStateDB as jest.Mocked).getContractInstance.mockResolvedValue(contractInstance); } diff --git a/yarn-project/simulator/src/client/private_execution.test.ts b/yarn-project/simulator/src/client/private_execution.test.ts index d668a2130a3..a9ab3d33bb4 100644 --- a/yarn-project/simulator/src/client/private_execution.test.ts +++ b/yarn-project/simulator/src/client/private_execution.test.ts @@ -5,9 +5,7 @@ import { type L2BlockNumber, Note, PackedValues, - PublicDataWitness, PublicExecutionRequest, - SiblingPath, TxExecutionRequest, } from '@aztec/circuit-types'; import { @@ -23,7 +21,6 @@ import { NOTE_HASH_TREE_HEIGHT, PUBLIC_DATA_TREE_HEIGHT, PartialStateReference, - PublicDataTreeLeafPreimage, StateReference, TxContext, computeAppNullifierSecretKey, @@ -55,7 +52,7 @@ import { Fr } from '@aztec/foundation/fields'; import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log'; import { type FieldsOf } from '@aztec/foundation/types'; import { openTmpStore } from '@aztec/kv-store/utils'; -import { type AppendOnlyTree, INITIAL_LEAF, Poseidon, StandardTree, newTree } from '@aztec/merkle-tree'; +import { type AppendOnlyTree, Poseidon, StandardTree, newTree } from '@aztec/merkle-tree'; import { ChildContractArtifact, ImportTestContractArtifact, @@ -257,16 +254,6 @@ describe('Private Execution test suite', () => { } throw new Error(`Unknown address: ${address}. Recipient: ${recipient}, Owner: ${owner}`); }); - // This oracle gets called when reading ivpk_m from key registry --> we return zero witness indicating that - // the keys were not registered. This triggers non-registered keys flow in which getCompleteAddress oracle - // gets called and we constrain the result by hashing address preimage and checking it matches. - oracle.getPublicDataTreeWitness.mockResolvedValue( - new PublicDataWitness( - 0n, - PublicDataTreeLeafPreimage.empty(), - SiblingPath.ZERO(PUBLIC_DATA_TREE_HEIGHT, INITIAL_LEAF, new Poseidon()), - ), - ); node = mock(); // eslint-disable-next-line @typescript-eslint/no-unused-vars diff --git a/yarn-project/simulator/src/client/simulator.test.ts b/yarn-project/simulator/src/client/simulator.test.ts index 601cb2aa6e6..1e4cbe6d876 100644 --- a/yarn-project/simulator/src/client/simulator.test.ts +++ b/yarn-project/simulator/src/client/simulator.test.ts @@ -55,7 +55,9 @@ describe('Simulator', () => { const storageSlot = TokenBlacklistContractArtifact.storageLayout['balances'].slot; const noteTypeId = TokenBlacklistContractArtifact.notes['TokenNote'].id; - const createNote = (amount = 123n) => new Note([new Fr(amount), ownerMasterNullifierPublicKey.hash(), Fr.random()]); + // Amount is a U128, with a lo and hi limbs + const createNote = (amount = 123n) => + new Note([new Fr(amount), new Fr(0), ownerMasterNullifierPublicKey.hash(), Fr.random()]); it('should compute note hashes and nullifier', async () => { oracle.getFunctionArtifactByName.mockResolvedValue(artifact); diff --git a/yarn-project/simulator/src/client/test_utils.ts b/yarn-project/simulator/src/client/test_utils.ts index 9253a36fcdb..af7fa0345d9 100644 --- a/yarn-project/simulator/src/client/test_utils.ts +++ b/yarn-project/simulator/src/client/test_utils.ts @@ -1,8 +1,35 @@ -import { Fq, Fr, GeneratorIndex, Point } from '@aztec/circuits.js'; +import { Fq, Fr, Point } from '@aztec/circuits.js'; import { Grumpkin } from '@aztec/circuits.js/barretenberg'; -import { pedersenCommit } from '@aztec/foundation/crypto'; // Copied over from `noir-projects/aztec-nr/aztec/src/generators.nr` +const GENERATORS = [ + new Point( + new Fr(0x30426e64aee30e998c13c8ceecda3a77807dbead52bc2f3bf0eae851b4b710c1n), + new Fr(0x113156a068f603023240c96b4da5474667db3b8711c521c748212a15bc034ea6n), + false, + ), + new Point( + new Fr(0x2825c79cc6a5cbbeef7d6a8f1b6a12b312aa338440aefeb4396148c89147c049n), + new Fr(0x129bfd1da54b7062d6b544e7e36b90736350f6fba01228c41c72099509f5701en), + false, + ), + new Point( + new Fr(0x0edb1e293c3ce91bfc04e3ceaa50d2c541fa9d091c72eb403efb1cfa2cb3357fn), + new Fr(0x1341d675fa030ece3113ad53ca34fd13b19b6e9762046734f414824c4d6ade35n), + false, + ), + new Point( + new Fr(0x0e0dad2250583f2a9f0acb04ededf1701b85b0393cae753fe7e14b88af81cb52n), + new Fr(0x0973b02c5caac339ee4ad5dab51329920f7bf1b6a07e1dabe5df67040b300962n), + false, + ), + new Point( + new Fr(0x2f3342e900e8c488a28931aae68970738fdc68afde2910de7b320c00c902087dn), + new Fr(0x1bf958dc63cb09d59230603a0269ae86d6f92494da244910351f1132df20fc08n), + false, + ), +]; + const G_SLOT = new Point( new Fr(0x041223147b680850dc82e8a55a952d4df20256fe0593d949a9541ca00f0abf15n), new Fr(0x0a8c72e60d0e60f5d804549d48f3044d06140b98ed717a9b532af630c1530791n), @@ -16,14 +43,14 @@ const G_SLOT = new Point( * @returns A note hash. */ export function computeNoteHash(storageSlot: Fr, noteContent: Fr[]): Fr { - // TODO(#7771): update this to do only 1 MSM call - const c = pedersenCommit( - noteContent.map(f => f.toBuffer()), - GeneratorIndex.NOTE_HIDING_POINT, - ); - const noteHidingPointBeforeSlotting = new Point(new Fr(c[0]), new Fr(c[1]), false); - const grumpkin = new Grumpkin(); + const noteHidingPointBeforeSlotting = noteContent + .slice(1) + .reduce( + (acc, item, i) => grumpkin.add(acc, grumpkin.mul(GENERATORS[i + 1], new Fq(item.toBigInt()))), + grumpkin.mul(GENERATORS[0], new Fq(noteContent[0].toBigInt())), + ); + const slotPoint = grumpkin.mul(G_SLOT, new Fq(storageSlot.toBigInt())); const noteHidingPoint = grumpkin.add(noteHidingPointBeforeSlotting, slotPoint); return noteHidingPoint.x; diff --git a/yarn-project/simulator/src/client/unconstrained_execution.ts b/yarn-project/simulator/src/client/unconstrained_execution.ts index 1a7b957f799..7fc622c6987 100644 --- a/yarn-project/simulator/src/client/unconstrained_execution.ts +++ b/yarn-project/simulator/src/client/unconstrained_execution.ts @@ -1,9 +1,4 @@ -import { - type DecodedReturn, - type FunctionArtifact, - type FunctionSelector, - decodeReturnValues, -} from '@aztec/foundation/abi'; +import { type AbiDecoded, type FunctionArtifact, type FunctionSelector, decodeFromAbi } from '@aztec/foundation/abi'; import { type AztecAddress } from '@aztec/foundation/aztec-address'; import { type Fr } from '@aztec/foundation/fields'; import { createDebugLogger } from '@aztec/foundation/log'; @@ -24,7 +19,7 @@ export async function executeUnconstrainedFunction( functionSelector: FunctionSelector, args: Fr[], log = createDebugLogger('aztec:simulator:unconstrained_execution'), -): Promise { +): Promise { log.verbose(`Executing unconstrained function ${contractAddress}:${functionSelector}(${artifact.name})`); const acir = artifact.bytecode; @@ -42,6 +37,6 @@ export async function executeUnconstrainedFunction( }); const returnWitness = witnessMapToFields(acirExecutionResult.returnWitness); - return decodeReturnValues(artifact.returnTypes, returnWitness); + return decodeFromAbi(artifact.returnTypes, returnWitness); } // docs:end:execute_unconstrained_function diff --git a/yarn-project/simulator/src/public/abstract_phase_manager.test.ts b/yarn-project/simulator/src/public/abstract_phase_manager.test.ts deleted file mode 100644 index f7fd7fdf411..00000000000 --- a/yarn-project/simulator/src/public/abstract_phase_manager.test.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { makePublicKernelCircuitPublicInputs } from '@aztec/circuits.js/testing'; - -import { AbstractPhaseManager } from './abstract_phase_manager.js'; - -describe('AbstractPhaseManager utils', () => { - describe('getMaxSideEffectCounter', () => { - it('correctly identifies the highest side effect counter in a transaction', () => { - const inputs = makePublicKernelCircuitPublicInputs(); - - const startingCounter = AbstractPhaseManager.getMaxSideEffectCounter(inputs); - - inputs.endNonRevertibleData.noteHashes.at(-1)!.noteHash.counter = startingCounter + 1; - expect(AbstractPhaseManager.getMaxSideEffectCounter(inputs)).toBe(startingCounter + 1); - - inputs.endNonRevertibleData.publicCallStack.at(-1)!.counter = startingCounter + 2; - expect(AbstractPhaseManager.getMaxSideEffectCounter(inputs)).toBe(startingCounter + 2); - - inputs.end.noteHashes.at(-1)!.noteHash.counter = startingCounter + 3; - expect(AbstractPhaseManager.getMaxSideEffectCounter(inputs)).toBe(startingCounter + 3); - - inputs.end.nullifiers.at(-1)!.counter = startingCounter + 4; - expect(AbstractPhaseManager.getMaxSideEffectCounter(inputs)).toBe(startingCounter + 4); - }); - }); -}); diff --git a/yarn-project/simulator/src/public/abstract_phase_manager.ts b/yarn-project/simulator/src/public/abstract_phase_manager.ts deleted file mode 100644 index 054218ae5a2..00000000000 --- a/yarn-project/simulator/src/public/abstract_phase_manager.ts +++ /dev/null @@ -1,522 +0,0 @@ -import { - AVM_REQUEST, - type AvmProvingRequest, - MerkleTreeId, - type NestedProcessReturnValues, - type PublicExecutionRequest, - type PublicKernelNonTailRequest, - PublicKernelType, - type PublicProvingRequest, - type SimulationError, - type Tx, - type UnencryptedFunctionL2Logs, -} from '@aztec/circuit-types'; -import { - type AvmExecutionHints, - AztecAddress, - ContractStorageRead, - ContractStorageUpdateRequest, - Fr, - FunctionData, - Gas, - type GlobalVariables, - type Header, - type KernelCircuitPublicInputs, - L2ToL1Message, - LogHash, - MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL, - MAX_L2_TO_L1_MSGS_PER_CALL, - MAX_NOTE_HASHES_PER_CALL, - MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, - MAX_NULLIFIERS_PER_CALL, - MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL, - MAX_NULLIFIER_READ_REQUESTS_PER_CALL, - MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, - MAX_PUBLIC_DATA_READS_PER_CALL, - MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, - MAX_UNENCRYPTED_LOGS_PER_CALL, - NESTED_RECURSIVE_PROOF_LENGTH, - NoteHash, - Nullifier, - PublicCallData, - PublicCallRequest, - PublicCallStackItem, - PublicCircuitPublicInputs, - PublicKernelCircuitPrivateInputs, - type PublicKernelCircuitPublicInputs, - PublicKernelData, - ReadRequest, - RevertCode, - TreeLeafReadRequest, - makeEmptyProof, - makeEmptyRecursiveProof, -} from '@aztec/circuits.js'; -import { computeVarArgsHash } from '@aztec/circuits.js/hash'; -import { padArrayEnd } from '@aztec/foundation/collection'; -import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log'; -import { - type ProtocolArtifact, - ProtocolCircuitVkIndexes, - ProtocolCircuitVks, - getVKIndex, - getVKSiblingPath, -} from '@aztec/noir-protocol-circuits-types'; -import { - type PublicExecutionResult, - type PublicExecutor, - accumulateReturnValues, - isPublicExecutionResult, -} from '@aztec/simulator'; -import { type MerkleTreeOperations } from '@aztec/world-state'; - -import { HintsBuilder } from './hints_builder.js'; -import { type PublicKernelCircuitSimulator } from './public_kernel_circuit_simulator.js'; - -export const PhaseIsRevertible: Record = { - [PublicKernelType.NON_PUBLIC]: false, - [PublicKernelType.SETUP]: false, - [PublicKernelType.APP_LOGIC]: true, - [PublicKernelType.TEARDOWN]: true, - [PublicKernelType.TAIL]: false, -}; - -export type PublicProvingInformation = { - functionName: string; // informational only - calldata: Fr[]; - bytecode: Buffer; - inputs: PublicKernelCircuitPrivateInputs; - avmHints: AvmExecutionHints; -}; - -export function makeAvmProvingRequest( - info: PublicProvingInformation, - kernelType: PublicKernelNonTailRequest['type'], -): AvmProvingRequest { - return { - type: AVM_REQUEST, - functionName: info.functionName, - bytecode: info.bytecode, - calldata: info.calldata, - avmHints: info.avmHints, - kernelRequest: { - type: kernelType, - inputs: info.inputs, - }, - }; -} - -export type TxPublicCallsResult = { - /** Inputs to be used for proving */ - publicProvingInformation: PublicProvingInformation[]; - /** The public kernel output at the end of the Tx */ - kernelOutput: PublicKernelCircuitPublicInputs; - /** The last circuit ran by this phase */ - lastKernelArtifact: ProtocolArtifact; - /** Unencrypted logs generated during the execution of this Tx */ - newUnencryptedLogs: UnencryptedFunctionL2Logs[]; - /** Revert reason, if any */ - revertReason?: SimulationError; - /** Return values of simulating complete callstack */ - returnValues: NestedProcessReturnValues[]; - /** Gas used during the execution this Tx */ - gasUsed?: Gas; -}; - -export type PhaseResult = { - /** The collection of public proving requests */ - publicProvingRequests: PublicProvingRequest[]; - /** The output of the public kernel circuit simulation for this phase */ - publicKernelOutput: PublicKernelCircuitPublicInputs; - /** The last circuit ran by this phase */ - lastKernelArtifact: ProtocolArtifact; - /** The final output of the public kernel circuit for this phase */ - finalKernelOutput?: KernelCircuitPublicInputs; - /** Revert reason, if any */ - revertReason?: SimulationError; - /** Return values of simulating complete callstack */ - returnValues: NestedProcessReturnValues[]; - /** Gas used during the execution this phase */ - gasUsed?: Gas; -}; - -export abstract class AbstractPhaseManager { - protected hintsBuilder: HintsBuilder; - protected log: DebugLogger; - constructor( - protected db: MerkleTreeOperations, - protected publicExecutor: PublicExecutor, - protected publicKernel: PublicKernelCircuitSimulator, - protected globalVariables: GlobalVariables, - protected historicalHeader: Header, - public phase: PublicKernelType, - ) { - this.hintsBuilder = new HintsBuilder(db); - this.log = createDebugLogger(`aztec:sequencer:${phase}`); - } - - /** - * @param tx - the tx to be processed - * @param publicKernelPublicInputs - the output of the public kernel circuit for the previous phase - */ - abstract handle( - tx: Tx, - publicKernelPublicInputs: PublicKernelCircuitPublicInputs, - previousKernelArtifact: ProtocolArtifact, - ): Promise; - - public static extractEnqueuedPublicCallsByPhase(tx: Tx): Record { - const teardownRequest = tx.getPublicTeardownExecutionRequest(); - return { - [PublicKernelType.NON_PUBLIC]: [], - [PublicKernelType.SETUP]: tx.getNonRevertiblePublicExecutionRequests(), - [PublicKernelType.APP_LOGIC]: tx.getRevertiblePublicExecutionRequests(), - [PublicKernelType.TEARDOWN]: teardownRequest ? [teardownRequest] : [], - [PublicKernelType.TAIL]: [], - }; - } - - protected extractEnqueuedPublicCalls(tx: Tx): PublicExecutionRequest[] { - const calls = AbstractPhaseManager.extractEnqueuedPublicCallsByPhase(tx)[this.phase]; - - return calls; - } - - protected async processEnqueuedPublicCalls( - tx: Tx, - previousPublicKernelOutput: PublicKernelCircuitPublicInputs, - previousKernelArtifact: ProtocolArtifact, - ): Promise { - const enqueuedCalls = [...this.extractEnqueuedPublicCalls(tx)].reverse(); - - if (!enqueuedCalls || !enqueuedCalls.length) { - return { - publicProvingInformation: [], - kernelOutput: previousPublicKernelOutput, - lastKernelArtifact: previousKernelArtifact, - newUnencryptedLogs: [], - returnValues: [], - gasUsed: Gas.empty(), - }; - } - - // TODO(#1684): Should multiple separately enqueued public calls be treated as - // separate public callstacks to be proven by separate public kernel sequences - // and submitted separately to the base rollup? - - const provingInformationList: PublicProvingInformation[] = []; - const newUnencryptedFunctionLogs: UnencryptedFunctionL2Logs[] = []; - // Transaction fee is zero for all phases except teardown - const transactionFee = this.getTransactionFee(tx, previousPublicKernelOutput); - let gasUsed = Gas.empty(); - let kernelPublicOutput: PublicKernelCircuitPublicInputs = previousPublicKernelOutput; - - const enqueuedCallResults = []; - - for (const enqueuedCall of enqueuedCalls) { - const executionStack: (PublicExecutionRequest | PublicExecutionResult)[] = [enqueuedCall]; - - // Keep track of which result is for the top/enqueued call - let enqueuedExecutionResult: PublicExecutionResult | undefined; - - while (executionStack.length) { - const current = executionStack.pop()!; - const isExecutionRequest = !isPublicExecutionResult(current); - const result = isExecutionRequest - ? await this.publicExecutor.simulate( - /*executionRequest=*/ current, - this.globalVariables, - /*availableGas=*/ this.getAvailableGas(tx, kernelPublicOutput), - tx.data.constants.txContext, - /*pendingNullifiers=*/ this.getSiloedPendingNullifiers(kernelPublicOutput), - transactionFee, - /*startSideEffectCounter=*/ AbstractPhaseManager.getMaxSideEffectCounter(kernelPublicOutput) + 1, - // NOTE: startSideEffectCounter is not the same as the executionRequest's sideEffectCounter - // (which counts the request itself) - ) - : current; - - // Accumulate gas used in this execution - gasUsed = gasUsed.add(Gas.from(result.startGasLeft).sub(Gas.from(result.endGasLeft))); - - // Sanity check for a current upstream assumption. - // Consumers of the result seem to expect "reverted <=> revertReason !== undefined". - const functionSelector = result.executionRequest.callContext.functionSelector.toString(); - if (result.reverted && !result.revertReason) { - throw new Error( - `Simulation of ${result.executionRequest.contractAddress.toString()}:${functionSelector}(${ - result.functionName - }) reverted with no reason.`, - ); - } - - if (result.reverted && !PhaseIsRevertible[this.phase]) { - this.log.debug( - `Simulation error on ${result.executionRequest.contractAddress.toString()}:${functionSelector}(${ - result.functionName - }) with reason: ${result.revertReason}`, - ); - throw result.revertReason; - } - - if (isExecutionRequest) { - newUnencryptedFunctionLogs.push(result.allUnencryptedLogs); - } - executionStack.push(...result.nestedExecutions); - - // Simulate the public kernel circuit. - this.log.debug( - `Running public kernel circuit for ${result.executionRequest.contractAddress.toString()}:${functionSelector}(${ - result.functionName - })`, - ); - const callData = await this.getPublicCallData(result, isExecutionRequest); - const [privateInputs, publicInputs, artifact] = await this.runKernelCircuit( - kernelPublicOutput, - previousKernelArtifact, - callData, - ); - kernelPublicOutput = publicInputs; - previousKernelArtifact = artifact; - - // Capture the inputs for later proving in the AVM and kernel. - const publicProvingInformation: PublicProvingInformation = { - functionName: result.functionName, - calldata: result.calldata, - bytecode: result.bytecode!, - inputs: privateInputs, - avmHints: result.avmCircuitHints, - }; - provingInformationList.push(publicProvingInformation); - - // Sanity check: Note we can't expect them to just be equal, because e.g. - // if the simulator reverts in app logic, it "resets" and result.reverted will be false when we run teardown, - // but the kernel carries the reverted flag forward. But if the simulator reverts, so should the kernel. - if (result.reverted && kernelPublicOutput.revertCode.isOK()) { - throw new Error( - `Public kernel circuit did not revert on ${result.executionRequest.contractAddress.toString()}:${functionSelector}(${ - result.functionName - }), but simulator did.`, - ); - } - - // We know the phase is revertible due to the above check. - // So safely return the revert reason and the kernel output (which has had its revertible side effects dropped) - if (result.reverted) { - this.log.debug( - `Reverting on ${result.executionRequest.contractAddress.toString()}:${functionSelector}(${ - result.functionName - }) with reason: ${result.revertReason}`, - ); - // TODO(@spalladino): Check gasUsed is correct. The AVM should take care of setting gasLeft to zero upon a revert. - return { - publicProvingInformation: [], - kernelOutput: kernelPublicOutput, - lastKernelArtifact: previousKernelArtifact, - newUnencryptedLogs: [], - revertReason: result.revertReason, - returnValues: [], - gasUsed, - }; - } - - if (!enqueuedExecutionResult) { - enqueuedExecutionResult = result; - } - - enqueuedCallResults.push(accumulateReturnValues(enqueuedExecutionResult)); - } - } - - return { - publicProvingInformation: provingInformationList, - kernelOutput: kernelPublicOutput, - lastKernelArtifact: previousKernelArtifact, - newUnencryptedLogs: newUnencryptedFunctionLogs, - returnValues: enqueuedCallResults, - gasUsed, - }; - } - - /** Returns all pending private and public nullifiers. */ - private getSiloedPendingNullifiers(ko: PublicKernelCircuitPublicInputs) { - return [...ko.end.nullifiers, ...ko.endNonRevertibleData.nullifiers].filter(n => !n.isEmpty()); - } - - protected getAvailableGas(tx: Tx, previousPublicKernelOutput: PublicKernelCircuitPublicInputs) { - return tx.data.constants.txContext.gasSettings - .getLimits() // No need to subtract teardown limits since they are already included in end.gasUsed - .sub(previousPublicKernelOutput.end.gasUsed) - .sub(previousPublicKernelOutput.endNonRevertibleData.gasUsed); - } - - protected getTransactionFee(_tx: Tx, _previousPublicKernelOutput: PublicKernelCircuitPublicInputs) { - return Fr.ZERO; - } - - private async runKernelCircuit( - previousOutput: PublicKernelCircuitPublicInputs, - previousCircuit: ProtocolArtifact, - callData: PublicCallData, - ): Promise<[PublicKernelCircuitPrivateInputs, PublicKernelCircuitPublicInputs, ProtocolArtifact]> { - const previousKernel = this.getPreviousKernelData(previousOutput, previousCircuit); - - // We take a deep copy (clone) of these inputs to be passed to the prover - const inputs = new PublicKernelCircuitPrivateInputs(previousKernel, callData); - switch (this.phase) { - case PublicKernelType.SETUP: - return [inputs.clone(), await this.publicKernel.publicKernelCircuitSetup(inputs), 'PublicKernelSetupArtifact']; - case PublicKernelType.APP_LOGIC: - return [ - inputs.clone(), - await this.publicKernel.publicKernelCircuitAppLogic(inputs), - 'PublicKernelAppLogicArtifact', - ]; - case PublicKernelType.TEARDOWN: - return [ - inputs.clone(), - await this.publicKernel.publicKernelCircuitTeardown(inputs), - 'PublicKernelTeardownArtifact', - ]; - default: - throw new Error(`No public kernel circuit for inputs`); - } - } - - protected getPreviousKernelData( - previousOutput: PublicKernelCircuitPublicInputs, - previousCircuit: ProtocolArtifact, - ): PublicKernelData { - // The proof is not used in simulation - const proof = makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH); - - const vk = ProtocolCircuitVks[previousCircuit]; - const vkIndex = ProtocolCircuitVkIndexes[previousCircuit]; - - const leafIndex = getVKIndex(vk); - - return new PublicKernelData(previousOutput, proof, vk, vkIndex, getVKSiblingPath(leafIndex)); - } - - protected async getPublicCallStackItem(result: PublicExecutionResult, isExecutionRequest = false) { - const publicDataTreeInfo = await this.db.getTreeInfo(MerkleTreeId.PUBLIC_DATA_TREE); - this.historicalHeader.state.partial.publicDataTree.root = Fr.fromBuffer(publicDataTreeInfo.root); - - const publicCircuitPublicInputs = PublicCircuitPublicInputs.from({ - callContext: result.executionRequest.callContext, - proverAddress: AztecAddress.ZERO, - argsHash: computeVarArgsHash(result.executionRequest.args), - noteHashes: padArrayEnd(result.noteHashes, NoteHash.empty(), MAX_NOTE_HASHES_PER_CALL), - nullifiers: padArrayEnd(result.nullifiers, Nullifier.empty(), MAX_NULLIFIERS_PER_CALL), - l2ToL1Msgs: padArrayEnd(result.l2ToL1Messages, L2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_CALL), - startSideEffectCounter: result.startSideEffectCounter, - endSideEffectCounter: result.endSideEffectCounter, - returnsHash: computeVarArgsHash(result.returnValues), - noteHashReadRequests: padArrayEnd( - result.noteHashReadRequests, - TreeLeafReadRequest.empty(), - MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, - ), - nullifierReadRequests: padArrayEnd( - result.nullifierReadRequests, - ReadRequest.empty(), - MAX_NULLIFIER_READ_REQUESTS_PER_CALL, - ), - nullifierNonExistentReadRequests: padArrayEnd( - result.nullifierNonExistentReadRequests, - ReadRequest.empty(), - MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL, - ), - l1ToL2MsgReadRequests: padArrayEnd( - result.l1ToL2MsgReadRequests, - TreeLeafReadRequest.empty(), - MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL, - ), - contractStorageReads: padArrayEnd( - result.contractStorageReads, - ContractStorageRead.empty(), - MAX_PUBLIC_DATA_READS_PER_CALL, - ), - contractStorageUpdateRequests: padArrayEnd( - result.contractStorageUpdateRequests, - ContractStorageUpdateRequest.empty(), - MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, - ), - publicCallRequests: padArrayEnd( - result.publicCallRequests, - PublicCallRequest.empty(), - MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, - ), - unencryptedLogsHashes: padArrayEnd(result.unencryptedLogsHashes, LogHash.empty(), MAX_UNENCRYPTED_LOGS_PER_CALL), - historicalHeader: this.historicalHeader, - globalVariables: this.globalVariables, - startGasLeft: Gas.from(result.startGasLeft), - endGasLeft: Gas.from(result.endGasLeft), - transactionFee: result.transactionFee, - // TODO(@just-mitch): need better mapping from simulator to revert code. - revertCode: result.reverted ? RevertCode.APP_LOGIC_REVERTED : RevertCode.OK, - }); - - return new PublicCallStackItem( - result.executionRequest.contractAddress, - new FunctionData(result.executionRequest.callContext.functionSelector, false), - publicCircuitPublicInputs, - isExecutionRequest, - ); - } - - /** - * Looks at the side effects of a transaction and returns the highest counter - * @param tx - A transaction - * @returns The highest side effect counter in the transaction so far - */ - static getMaxSideEffectCounter(inputs: PublicKernelCircuitPublicInputs): number { - const sideEffectCounters = [ - ...inputs.endNonRevertibleData.noteHashes, - ...inputs.endNonRevertibleData.nullifiers, - ...inputs.endNonRevertibleData.noteEncryptedLogsHashes, - ...inputs.endNonRevertibleData.encryptedLogsHashes, - ...inputs.endNonRevertibleData.unencryptedLogsHashes, - ...inputs.endNonRevertibleData.publicCallStack, - ...inputs.endNonRevertibleData.publicDataUpdateRequests, - ...inputs.end.noteHashes, - ...inputs.end.nullifiers, - ...inputs.end.noteEncryptedLogsHashes, - ...inputs.end.encryptedLogsHashes, - ...inputs.end.unencryptedLogsHashes, - ...inputs.end.publicCallStack, - ...inputs.end.publicDataUpdateRequests, - ]; - - let max = 0; - for (const sideEffect of sideEffectCounters) { - if ('counter' in sideEffect) { - max = Math.max(max, sideEffect.counter); - } else { - throw new Error('Unknown side effect type'); - } - } - - return max; - } - - protected getBytecodeHash(_result: PublicExecutionResult) { - // TODO: Determine how to calculate bytecode hash. Circuits just check it isn't zero for now. - // See https://github.com/AztecProtocol/aztec3-packages/issues/378 - const bytecodeHash = new Fr(1n); - return Promise.resolve(bytecodeHash); - } - - /** - * Calculates the PublicCircuitOutput for this execution result along with its proof, - * and assembles a PublicCallData object from it. - * @param result - The execution result. - * @param preimages - The preimages of the callstack items. - * @param isExecutionRequest - Whether the current callstack item should be considered a public fn execution request. - * @returns A corresponding PublicCallData object. - */ - protected async getPublicCallData(result: PublicExecutionResult, isExecutionRequest = false) { - const bytecodeHash = await this.getBytecodeHash(result); - const callStackItem = await this.getPublicCallStackItem(result, isExecutionRequest); - return new PublicCallData(callStackItem, makeEmptyProof(), bytecodeHash); - } -} diff --git a/yarn-project/simulator/src/public/app_logic_phase_manager.ts b/yarn-project/simulator/src/public/app_logic_phase_manager.ts deleted file mode 100644 index 9809e4cb226..00000000000 --- a/yarn-project/simulator/src/public/app_logic_phase_manager.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { PublicKernelType, type PublicProvingRequest, type Tx } from '@aztec/circuit-types'; -import { type GlobalVariables, type Header, type PublicKernelCircuitPublicInputs } from '@aztec/circuits.js'; -import { type ProtocolArtifact } from '@aztec/noir-protocol-circuits-types'; -import { type PublicExecutor, type PublicStateDB } from '@aztec/simulator'; -import { type MerkleTreeOperations } from '@aztec/world-state'; - -import { AbstractPhaseManager, makeAvmProvingRequest } from './abstract_phase_manager.js'; -import { type ContractsDataSourcePublicDB } from './public_db_sources.js'; -import { type PublicKernelCircuitSimulator } from './public_kernel_circuit_simulator.js'; - -/** - * The phase manager responsible for performing the fee preparation phase. - */ -export class AppLogicPhaseManager extends AbstractPhaseManager { - constructor( - db: MerkleTreeOperations, - publicExecutor: PublicExecutor, - publicKernel: PublicKernelCircuitSimulator, - globalVariables: GlobalVariables, - historicalHeader: Header, - protected publicContractsDB: ContractsDataSourcePublicDB, - protected publicStateDB: PublicStateDB, - phase: PublicKernelType = PublicKernelType.APP_LOGIC, - ) { - super(db, publicExecutor, publicKernel, globalVariables, historicalHeader, phase); - } - - override async handle( - tx: Tx, - previousPublicKernelOutput: PublicKernelCircuitPublicInputs, - previousCircuit: ProtocolArtifact, - ) { - this.log.verbose(`Processing tx ${tx.getTxHash()}`); - // add new contracts to the contracts db so that their functions may be found and called - // TODO(#4073): This is catching only private deployments, when we add public ones, we'll - // have to capture contracts emitted in that phase as well. - // TODO(@spalladino): Should we allow emitting contracts in the fee preparation phase? - // TODO(#6464): Should we allow emitting contracts in the private setup phase? - // if so, this should only add contracts that were deployed during private app logic. - await this.publicContractsDB.addNewContracts(tx); - const { - publicProvingInformation, - kernelOutput, - lastKernelArtifact, - newUnencryptedLogs, - revertReason, - returnValues, - gasUsed, - } = await this.processEnqueuedPublicCalls(tx, previousPublicKernelOutput, previousCircuit).catch( - // if we throw for any reason other than simulation, we need to rollback and drop the TX - async err => { - await this.publicStateDB.rollbackToCommit(); - throw err; - }, - ); - - if (revertReason) { - // TODO(#6464): Should we allow emitting contracts in the private setup phase? - // if so, this is removing contracts deployed in private setup - await this.publicContractsDB.removeNewContracts(tx); - await this.publicStateDB.rollbackToCheckpoint(); - tx.filterRevertedLogs(kernelOutput); - } else { - tx.unencryptedLogs.addFunctionLogs(newUnencryptedLogs); - // TODO(#6470): we should be adding contracts deployed in those logs to the publicContractsDB - } - - // Return a list of app logic proving requests - const publicProvingRequests: PublicProvingRequest[] = publicProvingInformation.map(info => { - return makeAvmProvingRequest(info, PublicKernelType.APP_LOGIC); - }); - return { - publicProvingRequests, - publicKernelOutput: kernelOutput, - lastKernelArtifact, - revertReason, - returnValues, - gasUsed, - }; - } -} diff --git a/yarn-project/simulator/src/public/enqueued_call_simulator.ts b/yarn-project/simulator/src/public/enqueued_call_simulator.ts new file mode 100644 index 00000000000..b2f5a12d9e4 --- /dev/null +++ b/yarn-project/simulator/src/public/enqueued_call_simulator.ts @@ -0,0 +1,336 @@ +import { + AVM_REQUEST, + type AvmProvingRequest, + MerkleTreeId, + NestedProcessReturnValues, + ProvingRequestType, + type PublicExecutionRequest, + PublicKernelPhase, + type PublicProvingRequest, + type SimulationError, + type Tx, + UnencryptedFunctionL2Logs, +} from '@aztec/circuit-types'; +import { + AztecAddress, + ContractStorageRead, + ContractStorageUpdateRequest, + Fr, + FunctionData, + Gas, + type GlobalVariables, + type Header, + L2ToL1Message, + LogHash, + MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL, + MAX_L2_TO_L1_MSGS_PER_CALL, + MAX_NOTE_HASHES_PER_CALL, + MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, + MAX_NULLIFIERS_PER_CALL, + MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL, + MAX_NULLIFIER_READ_REQUESTS_PER_CALL, + MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, + MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, + MAX_PUBLIC_DATA_READS_PER_CALL, + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, + MAX_UNENCRYPTED_LOGS_PER_CALL, + NESTED_RECURSIVE_PROOF_LENGTH, + NoteHash, + Nullifier, + PublicAccumulatedData, + PublicAccumulatedDataArrayLengths, + PublicCallData, + type PublicCallRequest, + PublicCallStackItem, + PublicCircuitPublicInputs, + PublicInnerCallRequest, + type PublicKernelCircuitPublicInputs, + PublicKernelInnerCircuitPrivateInputs, + PublicKernelInnerData, + PublicValidationRequestArrayLengths, + PublicValidationRequests, + ReadRequest, + RevertCode, + TreeLeafReadRequest, + VMCircuitPublicInputs, + makeEmptyProof, + makeEmptyRecursiveProof, +} from '@aztec/circuits.js'; +import { computeVarArgsHash } from '@aztec/circuits.js/hash'; +import { makeTuple } from '@aztec/foundation/array'; +import { padArrayEnd } from '@aztec/foundation/collection'; +import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log'; +import { ProtocolCircuitVks } from '@aztec/noir-protocol-circuits-types'; +import { type MerkleTreeOperations } from '@aztec/world-state'; + +import { accumulateReturnValues } from '../common/index.js'; +import { type PublicExecutionResult, collectExecutionResults } from './execution.js'; +import { type PublicExecutor } from './executor.js'; +import { type PublicKernelCircuitSimulator } from './public_kernel_circuit_simulator.js'; + +function makeAvmProvingRequest( + inputs: PublicKernelInnerCircuitPrivateInputs, + result: PublicExecutionResult, +): AvmProvingRequest { + return { + type: AVM_REQUEST, + functionName: result.functionName, + calldata: result.calldata, + bytecode: result.bytecode!, + avmHints: result.avmCircuitHints, + kernelRequest: { + type: ProvingRequestType.PUBLIC_KERNEL_INNER, + inputs, + }, + }; +} + +export type EnqueuedCallResult = { + /** Inputs to be used for proving */ + provingRequests: PublicProvingRequest[]; + /** The public kernel output at the end of the enqueued call */ + kernelOutput: VMCircuitPublicInputs; + /** Unencrypted logs generated during the execution of this enqueued call */ + newUnencryptedLogs: UnencryptedFunctionL2Logs; + /** Return values of simulating complete callstack */ + returnValues: NestedProcessReturnValues; + /** Gas used during the execution this enqueued call */ + gasUsed: Gas; + /** Revert reason, if any */ + revertReason?: SimulationError; +}; + +export class EnqueuedCallSimulator { + private log: DebugLogger; + constructor( + private db: MerkleTreeOperations, + private publicExecutor: PublicExecutor, + private publicKernelSimulator: PublicKernelCircuitSimulator, + private globalVariables: GlobalVariables, + private historicalHeader: Header, + ) { + this.log = createDebugLogger(`aztec:sequencer`); + } + + async simulate( + callRequest: PublicCallRequest, + executionRequest: PublicExecutionRequest, + tx: Tx, + previousPublicKernelOutput: PublicKernelCircuitPublicInputs, + availableGas: Gas, + transactionFee: Fr, + phase: PublicKernelPhase, + ): Promise { + const pendingNullifiers = this.getSiloedPendingNullifiers(previousPublicKernelOutput); + const startSideEffectCounter = previousPublicKernelOutput.endSideEffectCounter + 1; + const result = await this.publicExecutor.simulate( + executionRequest, + this.globalVariables, + availableGas, + tx.data.constants.txContext, + pendingNullifiers, + transactionFee, + startSideEffectCounter, + ); + + const callStack = makeTuple(MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, PublicInnerCallRequest.empty); + callStack[0].item.contractAddress = callRequest.contractAddress; + callStack[0].item.callContext = callRequest.callContext; + callStack[0].item.argsHash = callRequest.argsHash; + const prevAccumulatedData = + phase === PublicKernelPhase.SETUP + ? previousPublicKernelOutput.endNonRevertibleData + : previousPublicKernelOutput.end; + const accumulatedData = PublicAccumulatedData.empty(); + accumulatedData.publicCallStack[0] = callRequest; + const startVMCircuitOutput = new VMCircuitPublicInputs( + previousPublicKernelOutput.constants, + callRequest, + callStack, + PublicValidationRequestArrayLengths.new(previousPublicKernelOutput.validationRequests), + PublicValidationRequests.empty(), + PublicAccumulatedDataArrayLengths.new(prevAccumulatedData), + accumulatedData, + startSideEffectCounter, + startSideEffectCounter, + availableGas, + result.transactionFee, + result.reverted, + ); + + return await this.combineNestedExecutionResults(result, startVMCircuitOutput); + } + + private async combineNestedExecutionResults( + topResult: PublicExecutionResult, + startVMCircuitOutput: VMCircuitPublicInputs, + ): Promise { + const executionResults = collectExecutionResults(topResult); + + const provingRequests: AvmProvingRequest[] = []; + let gasUsed = Gas.empty(); + let revertReason; + let kernelOutput = startVMCircuitOutput; + + for (const result of executionResults) { + // Accumulate gas used in this enqueued call. + gasUsed = gasUsed.add(Gas.from(result.startGasLeft).sub(Gas.from(result.endGasLeft))); + + // Sanity check for a current upstream assumption. + // Consumers of the result seem to expect "reverted <=> revertReason !== undefined". + const functionSelector = result.executionRequest.callContext.functionSelector.toString(); + if (result.reverted && !result.revertReason) { + throw new Error( + `Simulation of ${result.executionRequest.contractAddress.toString()}:${functionSelector}(${ + result.functionName + }) reverted with no reason.`, + ); + } + + // Simulate the public kernel circuit. + this.log.debug( + `Running public kernel inner circuit for ${result.executionRequest.contractAddress.toString()}:${functionSelector}(${ + result.functionName + })`, + ); + + const callData = await this.getPublicCallData(result); + const { inputs, output } = await this.runKernelCircuit(kernelOutput, callData); + kernelOutput = output; + + // Capture the inputs for later proving in the AVM and kernel. + provingRequests.push(makeAvmProvingRequest(inputs, result)); + + // Safely return the revert reason and the kernel output (which has had its revertible side effects dropped) + // TODO(@leila) we shouldn't drop everything when it reverts. The tail kernel needs the data to prove that it's reverted for the correct reason. + if (result.reverted) { + this.log.debug( + `Reverting on ${result.executionRequest.contractAddress.toString()}:${functionSelector}(${ + result.functionName + }) with reason: ${result.revertReason}`, + ); + // TODO(@spalladino): Check gasUsed is correct. The AVM should take care of setting gasLeft to zero upon a revert. + + return { + provingRequests, + kernelOutput, + newUnencryptedLogs: UnencryptedFunctionL2Logs.empty(), + returnValues: NestedProcessReturnValues.empty(), + gasUsed, + revertReason: result.revertReason, + }; + } + } + + return { + provingRequests, + kernelOutput, + newUnencryptedLogs: topResult.allUnencryptedLogs, + returnValues: accumulateReturnValues(topResult), + gasUsed, + revertReason, + }; + } + + /** Returns all pending private and public nullifiers. */ + private getSiloedPendingNullifiers(ko: PublicKernelCircuitPublicInputs) { + return [...ko.end.nullifiers, ...ko.endNonRevertibleData.nullifiers].filter(n => !n.isEmpty()); + } + + private async runKernelCircuit( + previousOutput: VMCircuitPublicInputs, + callData: PublicCallData, + ): Promise<{ inputs: PublicKernelInnerCircuitPrivateInputs; output: VMCircuitPublicInputs }> { + // The proof is not used in simulation + const proof = makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH); + const vk = ProtocolCircuitVks.PublicKernelInnerArtifact; + const previousKernel = new PublicKernelInnerData(previousOutput, proof, vk); + const inputs = new PublicKernelInnerCircuitPrivateInputs(previousKernel, callData); + return { inputs, output: await this.publicKernelSimulator.publicKernelCircuitInner(inputs) }; + } + + /** + * Calculates the PublicCircuitOutput for this execution result along with its proof, + * and assembles a PublicCallData object from it. + * @param result - The execution result. + * @returns A corresponding PublicCallData object. + */ + private async getPublicCallData(result: PublicExecutionResult) { + const bytecodeHash = await this.getBytecodeHash(result); + const callStackItem = await this.getPublicCallStackItem(result); + return new PublicCallData(callStackItem, makeEmptyProof(), bytecodeHash); + } + + private async getPublicCallStackItem(result: PublicExecutionResult) { + const publicDataTreeInfo = await this.db.getTreeInfo(MerkleTreeId.PUBLIC_DATA_TREE); + this.historicalHeader.state.partial.publicDataTree.root = Fr.fromBuffer(publicDataTreeInfo.root); + + const publicCircuitPublicInputs = PublicCircuitPublicInputs.from({ + callContext: result.executionRequest.callContext, + proverAddress: AztecAddress.ZERO, + argsHash: computeVarArgsHash(result.executionRequest.args), + noteHashes: padArrayEnd(result.noteHashes, NoteHash.empty(), MAX_NOTE_HASHES_PER_CALL), + nullifiers: padArrayEnd(result.nullifiers, Nullifier.empty(), MAX_NULLIFIERS_PER_CALL), + l2ToL1Msgs: padArrayEnd(result.l2ToL1Messages, L2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_CALL), + startSideEffectCounter: result.startSideEffectCounter, + endSideEffectCounter: result.endSideEffectCounter, + returnsHash: computeVarArgsHash(result.returnValues), + noteHashReadRequests: padArrayEnd( + result.noteHashReadRequests, + TreeLeafReadRequest.empty(), + MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, + ), + nullifierReadRequests: padArrayEnd( + result.nullifierReadRequests, + ReadRequest.empty(), + MAX_NULLIFIER_READ_REQUESTS_PER_CALL, + ), + nullifierNonExistentReadRequests: padArrayEnd( + result.nullifierNonExistentReadRequests, + ReadRequest.empty(), + MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL, + ), + l1ToL2MsgReadRequests: padArrayEnd( + result.l1ToL2MsgReadRequests, + TreeLeafReadRequest.empty(), + MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL, + ), + contractStorageReads: padArrayEnd( + result.contractStorageReads, + ContractStorageRead.empty(), + MAX_PUBLIC_DATA_READS_PER_CALL, + ), + contractStorageUpdateRequests: padArrayEnd( + result.contractStorageUpdateRequests, + ContractStorageUpdateRequest.empty(), + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, + ), + publicCallRequests: padArrayEnd( + result.publicCallRequests, + PublicInnerCallRequest.empty(), + MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, + ), + unencryptedLogsHashes: padArrayEnd(result.unencryptedLogsHashes, LogHash.empty(), MAX_UNENCRYPTED_LOGS_PER_CALL), + historicalHeader: this.historicalHeader, + globalVariables: this.globalVariables, + startGasLeft: Gas.from(result.startGasLeft), + endGasLeft: Gas.from(result.endGasLeft), + transactionFee: result.transactionFee, + // TODO(@just-mitch): need better mapping from simulator to revert code. + revertCode: result.reverted ? RevertCode.APP_LOGIC_REVERTED : RevertCode.OK, + }); + + return new PublicCallStackItem( + result.executionRequest.contractAddress, + new FunctionData(result.executionRequest.callContext.functionSelector, false), + publicCircuitPublicInputs, + ); + } + + private getBytecodeHash(_result: PublicExecutionResult) { + // TODO: Determine how to calculate bytecode hash. Circuits just check it isn't zero for now. + // See https://github.com/AztecProtocol/aztec3-packages/issues/378 + const bytecodeHash = new Fr(1n); + return Promise.resolve(bytecodeHash); + } +} diff --git a/yarn-project/simulator/src/public/enqueued_calls_processor.ts b/yarn-project/simulator/src/public/enqueued_calls_processor.ts new file mode 100644 index 00000000000..46bc19e2fbd --- /dev/null +++ b/yarn-project/simulator/src/public/enqueued_calls_processor.ts @@ -0,0 +1,388 @@ +import { + type MerkleTreeOperations, + type NestedProcessReturnValues, + type ProcessedTx, + ProvingRequestType, + type PublicExecutionRequest, + type PublicKernelMergeRequest, + PublicKernelPhase, + type PublicProvingRequest, + type SimulationError, + type Tx, +} from '@aztec/circuit-types'; +import { + EnqueuedCallData, + Fr, + Gas, + type GlobalVariables, + type Header, + type KernelCircuitPublicInputs, + NESTED_RECURSIVE_PROOF_LENGTH, + type PublicCallRequest, + PublicKernelCircuitPrivateInputs, + type PublicKernelCircuitPublicInputs, + PublicKernelData, + type VMCircuitPublicInputs, + makeEmptyProof, + makeEmptyRecursiveProof, +} from '@aztec/circuits.js'; +import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log'; +import { Timer } from '@aztec/foundation/timer'; +import { ProtocolCircuitVks, getVKIndex, getVKSiblingPath } from '@aztec/noir-protocol-circuits-types'; + +import { inspect } from 'util'; + +import { EnqueuedCallSimulator } from './enqueued_call_simulator.js'; +import { type PublicExecutor } from './executor.js'; +import { type WorldStateDB } from './public_db_sources.js'; +import { type PublicKernelCircuitSimulator } from './public_kernel_circuit_simulator.js'; +import { PublicKernelTailSimulator } from './public_kernel_tail_simulator.js'; + +const PhaseIsRevertible: Record = { + [PublicKernelPhase.SETUP]: false, + [PublicKernelPhase.APP_LOGIC]: true, + [PublicKernelPhase.TEARDOWN]: true, +}; + +type PublicPhaseResult = { + /** The output of the public kernel circuit simulation for this phase */ + publicKernelOutput: PublicKernelCircuitPublicInputs; + /** The collection of public proving requests */ + provingRequests: PublicProvingRequest[]; + /** Return values of simulating complete callstack */ + returnValues: NestedProcessReturnValues[]; + /** Gas used during the execution this phase */ + gasUsed: Gas; + /** Time spent for the execution this phase */ + durationMs: number; + /** Revert reason, if any */ + revertReason?: SimulationError; +}; + +export type ProcessedPhase = { + phase: PublicKernelPhase; + durationMs: number; + revertReason?: SimulationError; +}; + +export type TxPublicCallsResult = { + /** The collection of public proving requests */ + provingRequests: PublicProvingRequest[]; + /** The output of the public kernel tail circuit simulation for this tx */ + tailKernelOutput: KernelCircuitPublicInputs; + /** Return values of simulating complete callstack */ + returnValues: NestedProcessReturnValues[]; + /** Gas used during the execution this tx */ + gasUsed: ProcessedTx['gasUsed']; + /** Revert reason, if any */ + revertReason?: SimulationError; + processedPhases: ProcessedPhase[]; +}; + +export class EnqueuedCallsProcessor { + private log: DebugLogger; + + constructor( + private publicKernelSimulator: PublicKernelCircuitSimulator, + private globalVariables: GlobalVariables, + private worldStateDB: WorldStateDB, + private enqueuedCallSimulator: EnqueuedCallSimulator, + private publicKernelTailSimulator: PublicKernelTailSimulator, + ) { + this.log = createDebugLogger(`aztec:sequencer`); + } + + static create( + db: MerkleTreeOperations, + publicExecutor: PublicExecutor, + publicKernelSimulator: PublicKernelCircuitSimulator, + globalVariables: GlobalVariables, + historicalHeader: Header, + worldStateDB: WorldStateDB, + ) { + const enqueuedCallSimulator = new EnqueuedCallSimulator( + db, + publicExecutor, + publicKernelSimulator, + globalVariables, + historicalHeader, + ); + + const publicKernelTailSimulator = PublicKernelTailSimulator.create(db, publicKernelSimulator); + + return new EnqueuedCallsProcessor( + publicKernelSimulator, + globalVariables, + worldStateDB, + enqueuedCallSimulator, + publicKernelTailSimulator, + ); + } + + static getExecutionRequestsByPhase(tx: Tx, phase: PublicKernelPhase): PublicExecutionRequest[] { + switch (phase) { + case PublicKernelPhase.SETUP: + return tx.getNonRevertiblePublicExecutionRequests(); + case PublicKernelPhase.APP_LOGIC: + return tx.getRevertiblePublicExecutionRequests(); + case PublicKernelPhase.TEARDOWN: { + const request = tx.getPublicTeardownExecutionRequest(); + return request ? [request] : []; + } + default: + throw new Error(`Unknown phase: ${phase}`); + } + } + + static getCallRequestsByPhase(tx: Tx, phase: PublicKernelPhase): PublicCallRequest[] { + switch (phase) { + case PublicKernelPhase.SETUP: + return tx.data.getNonRevertiblePublicCallRequests(); + case PublicKernelPhase.APP_LOGIC: + return tx.data.getRevertiblePublicCallRequests(); + case PublicKernelPhase.TEARDOWN: { + const request = tx.data.getTeardownPublicCallRequest(); + return request ? [request] : []; + } + default: + throw new Error(`Unknown phase: ${phase}`); + } + } + + async process(tx: Tx): Promise { + this.log.verbose(`Processing tx ${tx.getTxHash()}`); + + const phases: PublicKernelPhase[] = [ + PublicKernelPhase.SETUP, + PublicKernelPhase.APP_LOGIC, + PublicKernelPhase.TEARDOWN, + ]; + const processedPhases: ProcessedPhase[] = []; + const provingRequests: PublicProvingRequest[] = []; + const gasUsed: ProcessedTx['gasUsed'] = {}; + let publicKernelOutput = tx.data.toPublicKernelCircuitPublicInputs(); + let isFromPrivate = true; + let returnValues: NestedProcessReturnValues[] = []; + let revertReason: SimulationError | undefined; + for (let i = 0; i < phases.length; i++) { + const phase = phases[i]; + const callRequests = EnqueuedCallsProcessor.getCallRequestsByPhase(tx, phase); + if (callRequests.length) { + const executionRequests = EnqueuedCallsProcessor.getExecutionRequestsByPhase(tx, phase); + const result = await this.processPhase( + tx, + callRequests, + executionRequests, + publicKernelOutput, + phase, + isFromPrivate, + ).catch(async err => { + await this.worldStateDB.rollbackToCommit(); + throw err; + }); + + publicKernelOutput = result.publicKernelOutput; + isFromPrivate = false; + + provingRequests.push(...result.provingRequests); + if (phase === PublicKernelPhase.APP_LOGIC) { + returnValues = result.returnValues; + } + + gasUsed[phase] = result.gasUsed; + + processedPhases.push({ + phase, + durationMs: result.durationMs, + revertReason: result.revertReason, + }); + + revertReason ??= result.revertReason; + } + } + + const { output: tailKernelOutput, provingRequest } = await this.publicKernelTailSimulator + .simulate(publicKernelOutput) + .catch( + // the abstract phase manager throws if simulation gives error in non-revertible phase + async err => { + await this.worldStateDB.rollbackToCommit(); + throw err; + }, + ); + provingRequests.push(provingRequest); + + return { + provingRequests: provingRequests, + tailKernelOutput, + returnValues, + gasUsed, + processedPhases, + revertReason, + }; + } + + private async processPhase( + tx: Tx, + callRequests: PublicCallRequest[], + executionRequests: PublicExecutionRequest[], + previousPublicKernelOutput: PublicKernelCircuitPublicInputs, + phase: PublicKernelPhase, + isFromPrivate: boolean, + ): Promise { + this.log.debug(`Beginning processing in phase ${PublicKernelPhase[phase]} for tx ${tx.getTxHash()}`); + + const phaseTimer = new Timer(); + const provingRequests: PublicProvingRequest[] = []; + const returnValues: NestedProcessReturnValues[] = []; + let publicKernelOutput = previousPublicKernelOutput; + let gasUsed = Gas.empty(); + let revertReason: SimulationError | undefined; + for (let i = callRequests.length - 1; i >= 0 && !revertReason; i--) { + const callRequest = callRequests[i]; + const executionRequest = executionRequests[i]; + + // add new contracts to the contracts db so that their functions may be found and called + // TODO(#4073): This is catching only private deployments, when we add public ones, we'll + // have to capture contracts emitted in that phase as well. + // TODO(@spalladino): Should we allow emitting contracts in the fee preparation phase? + // TODO(#6464): Should we allow emitting contracts in the private setup phase? + // if so, this should only add contracts that were deployed during private app logic. + await this.worldStateDB.addNewContracts(tx); + + const availableGas = this.getAvailableGas(tx, publicKernelOutput, phase); + const transactionFee = this.getTransactionFee(tx, publicKernelOutput, phase); + + const enqueuedCallResult = await this.enqueuedCallSimulator.simulate( + callRequest, + executionRequest, + tx, + publicKernelOutput, + availableGas, + transactionFee, + phase, + ); + + if (enqueuedCallResult.revertReason && !PhaseIsRevertible[phase]) { + this.log.debug( + `Simulation error on ${executionRequest.contractAddress.toString()}:${ + executionRequest.callContext.functionSelector + } with reason: ${enqueuedCallResult.revertReason}`, + ); + throw enqueuedCallResult.revertReason; + } + + provingRequests.push(...enqueuedCallResult.provingRequests); + returnValues.push(enqueuedCallResult.returnValues); + gasUsed = gasUsed.add(enqueuedCallResult.gasUsed); + revertReason ??= enqueuedCallResult.revertReason; + + if (revertReason) { + // TODO(#6464): Should we allow emitting contracts in the private setup phase? + // if so, this is removing contracts deployed in private setup + await this.worldStateDB.removeNewContracts(tx); + await this.worldStateDB.rollbackToCheckpoint(); + tx.filterRevertedLogs(publicKernelOutput); + } else { + // TODO(#6470): we should be adding contracts deployed in those logs to the publicContractsDB + tx.unencryptedLogs.addFunctionLogs([enqueuedCallResult.newUnencryptedLogs]); + } + + const { output, provingRequest } = await this.runMergeKernelCircuit( + publicKernelOutput, + enqueuedCallResult.kernelOutput, + isFromPrivate, + ); + publicKernelOutput = output; + isFromPrivate = false; + provingRequests.push(provingRequest); + } + + if (phase === PublicKernelPhase.SETUP) { + await this.worldStateDB.checkpoint(); + } + + return { + publicKernelOutput, + provingRequests, + durationMs: phaseTimer.ms(), + gasUsed, + returnValues: revertReason ? [] : returnValues, + revertReason, + }; + } + + private getAvailableGas( + tx: Tx, + previousPublicKernelOutput: PublicKernelCircuitPublicInputs, + phase: PublicKernelPhase, + ) { + if (phase === PublicKernelPhase.TEARDOWN) { + return tx.data.constants.txContext.gasSettings.getTeardownLimits(); + } else { + return tx.data.constants.txContext.gasSettings + .getLimits() // No need to subtract teardown limits since they are already included in end.gasUsed + .sub(previousPublicKernelOutput.end.gasUsed) + .sub(previousPublicKernelOutput.endNonRevertibleData.gasUsed); + } + } + + private getTransactionFee( + tx: Tx, + previousPublicKernelOutput: PublicKernelCircuitPublicInputs, + phase: PublicKernelPhase, + ): Fr { + if (phase !== PublicKernelPhase.TEARDOWN) { + return Fr.ZERO; + } else { + const gasSettings = tx.data.constants.txContext.gasSettings; + const gasFees = this.globalVariables.gasFees; + // No need to add teardown limits since they are already included in end.gasUsed + const gasUsed = previousPublicKernelOutput.end.gasUsed.add( + previousPublicKernelOutput.endNonRevertibleData.gasUsed, + ); + const txFee = gasSettings.inclusionFee.add(gasUsed.computeFee(gasFees)); + this.log.debug(`Computed tx fee`, { txFee, gasUsed: inspect(gasUsed), gasFees: inspect(gasFees) }); + return txFee; + } + } + + private async runMergeKernelCircuit( + previousOutput: PublicKernelCircuitPublicInputs, + enqueuedCallData: VMCircuitPublicInputs, + isFromPrivate: boolean, + ): Promise<{ output: PublicKernelCircuitPublicInputs; provingRequest: PublicKernelMergeRequest }> { + const previousKernel = this.getPreviousKernelData(previousOutput, isFromPrivate); + + // The proof is not used in simulation. + const vmProof = makeEmptyProof(); + const callData = new EnqueuedCallData(enqueuedCallData, vmProof); + + const inputs = new PublicKernelCircuitPrivateInputs(previousKernel, callData); + + const output = await this.publicKernelSimulator.publicKernelCircuitMerge(inputs); + + const provingRequest: PublicKernelMergeRequest = { + type: ProvingRequestType.PUBLIC_KERNEL_MERGE, + inputs, + }; + + return { output, provingRequest }; + } + + private getPreviousKernelData( + previousOutput: PublicKernelCircuitPublicInputs, + isFromPrivate: boolean, + ): PublicKernelData { + // The proof is not used in simulation. + const proof = makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH); + + const vk = isFromPrivate + ? ProtocolCircuitVks.PrivateKernelTailToPublicArtifact + : ProtocolCircuitVks.PublicKernelMergeArtifact; + const vkIndex = getVKIndex(vk); + const siblingPath = getVKSiblingPath(vkIndex); + + return new PublicKernelData(previousOutput, proof, vk, vkIndex, siblingPath); + } +} diff --git a/yarn-project/simulator/src/public/execution.ts b/yarn-project/simulator/src/public/execution.ts index 109fef0a3ea..2312af9898f 100644 --- a/yarn-project/simulator/src/public/execution.ts +++ b/yarn-project/simulator/src/public/execution.ts @@ -13,8 +13,8 @@ import { type LogHash, type NoteHash, type Nullifier, - PublicCallRequest, PublicCallStackItemCompressed, + PublicInnerCallRequest, type ReadRequest, RevertCode, type TreeLeafReadRequest, @@ -89,7 +89,7 @@ export interface PublicExecutionResult { // TODO(dbanks12): add contract instance read requests /** The requests to call public functions made by this call. */ - publicCallRequests: PublicCallRequest[]; + publicCallRequests: PublicInnerCallRequest[]; /** The results of nested calls. */ nestedExecutions: this[]; @@ -100,15 +100,8 @@ export interface PublicExecutionResult { functionName: string; } -/** - * Returns if the input is a public execution result and not just a public execution. - * @param input - Public execution or public execution result. - * @returns Whether the input is a public execution result and not just a public execution. - */ -export function isPublicExecutionResult( - input: PublicExecutionRequest | PublicExecutionResult, -): input is PublicExecutionResult { - return 'executionRequest' in input && input.executionRequest !== undefined; +export function collectExecutionResults(result: PublicExecutionResult): PublicExecutionResult[] { + return [result, ...result.nestedExecutions.map(collectExecutionResults)].flat(); } /** @@ -146,5 +139,5 @@ export function resultToPublicCallRequest(result: PublicExecutionResult) { Gas.from(result.startGasLeft), Gas.from(result.endGasLeft), ); - return new PublicCallRequest(item, result.startSideEffectCounter.toNumber()); + return new PublicInnerCallRequest(item, result.startSideEffectCounter.toNumber()); } diff --git a/yarn-project/simulator/src/public/executor.ts b/yarn-project/simulator/src/public/executor.ts index f3a8a13ebce..52f664df436 100644 --- a/yarn-project/simulator/src/public/executor.ts +++ b/yarn-project/simulator/src/public/executor.ts @@ -9,11 +9,10 @@ import { AvmContext } from '../avm/avm_context.js'; import { AvmExecutionEnvironment } from '../avm/avm_execution_environment.js'; import { AvmMachineState } from '../avm/avm_machine_state.js'; import { AvmSimulator } from '../avm/avm_simulator.js'; -import { HostStorage } from '../avm/journal/host_storage.js'; import { AvmPersistableStateManager } from '../avm/journal/index.js'; -import { type CommitmentsDB, type PublicContractsDB, type PublicStateDB } from './db_interfaces.js'; import { type PublicExecutionResult } from './execution.js'; import { ExecutorMetrics } from './executor_metrics.js'; +import { type WorldStateDB } from './public_db_sources.js'; import { PublicSideEffectTrace } from './side_effect_trace.js'; /** @@ -22,13 +21,7 @@ import { PublicSideEffectTrace } from './side_effect_trace.js'; export class PublicExecutor { metrics: ExecutorMetrics; - constructor( - private readonly publicStorageDB: PublicStateDB, - private readonly contractsDb: PublicContractsDB, - private readonly commitmentsDb: CommitmentsDB, - private readonly header: Header, - client: TelemetryClient, - ) { + constructor(private readonly worldStateDB: WorldStateDB, private readonly header: Header, client: TelemetryClient) { this.metrics = new ExecutorMetrics(client, 'PublicExecutor'); } @@ -56,15 +49,14 @@ export class PublicExecutor { ): Promise { const address = executionRequest.contractAddress; const selector = executionRequest.callContext.functionSelector; - const fnName = (await this.contractsDb.getDebugFunctionName(address, selector)) ?? `${address}:${selector}`; + const fnName = (await this.worldStateDB.getDebugFunctionName(address, selector)) ?? `${address}:${selector}`; PublicExecutor.log.verbose(`[AVM] Executing public external function ${fnName}.`); const timer = new Timer(); - const hostStorage = new HostStorage(this.publicStorageDB, this.contractsDb, this.commitmentsDb); const trace = new PublicSideEffectTrace(startSideEffectCounter); const avmPersistableState = AvmPersistableStateManager.newWithPendingSiloedNullifiers( - hostStorage, + this.worldStateDB, trace, pendingSiloedNullifiers.map(n => n.value), ); diff --git a/yarn-project/simulator/src/public/hints_builder.ts b/yarn-project/simulator/src/public/hints_builder.ts index 637d70d30e9..fd851e1d84a 100644 --- a/yarn-project/simulator/src/public/hints_builder.ts +++ b/yarn-project/simulator/src/public/hints_builder.ts @@ -13,6 +13,7 @@ import { NOTE_HASH_TREE_HEIGHT, NULLIFIER_TREE_HEIGHT, type Nullifier, + type NullifierLeafPreimage, PUBLIC_DATA_TREE_HEIGHT, type PublicDataRead, type PublicDataTreeLeafPreimage, @@ -27,6 +28,7 @@ import { } from '@aztec/circuits.js'; import { makeTuple } from '@aztec/foundation/array'; import { type Tuple } from '@aztec/foundation/serialize'; +import { type IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; import { type MerkleTreeOperations } from '@aztec/world-state'; export class HintsBuilder { @@ -112,7 +114,8 @@ export class HintsBuilder { throw new Error(`Nullifier ${nullifier.toBigInt()} already exists in the tree.`); } - return this.getMembershipWitnessWithPreimage( + // Should find a way to stop casting IndexedTreeLeafPreimage as NullifierLeafPreimage + return this.getMembershipWitnessWithPreimage( MerkleTreeId.NULLIFIER_TREE, NULLIFIER_TREE_HEIGHT, index, @@ -125,23 +128,22 @@ export class HintsBuilder { throw new Error(`Cannot find the previous value index for public data ${leafSlot}.`); } - const { membershipWitness, leafPreimage } = await this.getMembershipWitnessWithPreimage< - typeof PUBLIC_DATA_TREE_HEIGHT - >(MerkleTreeId.PUBLIC_DATA_TREE, PUBLIC_DATA_TREE_HEIGHT, res.index); - // Should find a way to stop casting IndexedTreeLeafPreimage as PublicDataTreeLeafPreimage everywhere. - return { membershipWitness, leafPreimage: leafPreimage as PublicDataTreeLeafPreimage }; + return this.getMembershipWitnessWithPreimage( + MerkleTreeId.PUBLIC_DATA_TREE, + PUBLIC_DATA_TREE_HEIGHT, + res.index, + ); } - private async getMembershipWitnessWithPreimage( - treeId: IndexedTreeId, - treeHeight: TREE_HEIGHT, - index: bigint, - ) { + private async getMembershipWitnessWithPreimage< + TREE_HEIGHT extends number, + LEAF_PREIMAGE extends IndexedTreeLeafPreimage = IndexedTreeLeafPreimage, + >(treeId: IndexedTreeId, treeHeight: TREE_HEIGHT, index: bigint) { const siblingPath = await this.db.getSiblingPath(treeId, index); const membershipWitness = new MembershipWitness(treeHeight, index, siblingPath.toTuple()); - const leafPreimage = await this.db.getLeafPreimage(treeId, index); + const leafPreimage = (await this.db.getLeafPreimage(treeId, index)) as LEAF_PREIMAGE; if (!leafPreimage) { throw new Error(`Cannot find the leaf preimage for tree ${treeId} at index ${index}.`); } diff --git a/yarn-project/simulator/src/public/index.ts b/yarn-project/simulator/src/public/index.ts index cf32d4b4e19..5f744c3211f 100644 --- a/yarn-project/simulator/src/public/index.ts +++ b/yarn-project/simulator/src/public/index.ts @@ -1,6 +1,6 @@ -export * from './abstract_phase_manager.js'; export * from './db_interfaces.js'; -export { isPublicExecutionResult, type PublicExecutionResult } from './execution.js'; +export * from './enqueued_calls_processor.js'; +export { type PublicExecutionResult } from './execution.js'; export { PublicExecutor } from './executor.js'; export * from './fee_payment.js'; export { HintsBuilder } from './hints_builder.js'; @@ -8,3 +8,4 @@ export * from './public_db_sources.js'; export * from './public_kernel.js'; export * from './public_kernel_circuit_simulator.js'; export { PublicProcessor, PublicProcessorFactory } from './public_processor.js'; +export { PublicSideEffectTrace } from './side_effect_trace.js'; diff --git a/yarn-project/simulator/src/public/phase_manager_factory.ts b/yarn-project/simulator/src/public/phase_manager_factory.ts deleted file mode 100644 index 5a71ff74863..00000000000 --- a/yarn-project/simulator/src/public/phase_manager_factory.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { PublicKernelType, type Tx } from '@aztec/circuit-types'; -import { type GlobalVariables, type Header, type PublicKernelCircuitPublicInputs } from '@aztec/circuits.js'; -import { type PublicExecutor, type PublicStateDB } from '@aztec/simulator'; -import { type MerkleTreeOperations } from '@aztec/world-state'; - -import { type AbstractPhaseManager } from './abstract_phase_manager.js'; -import { AppLogicPhaseManager } from './app_logic_phase_manager.js'; -import { type ContractsDataSourcePublicDB } from './public_db_sources.js'; -import { type PublicKernelCircuitSimulator } from './public_kernel_circuit_simulator.js'; -import { SetupPhaseManager } from './setup_phase_manager.js'; -import { TailPhaseManager } from './tail_phase_manager.js'; -import { TeardownPhaseManager } from './teardown_phase_manager.js'; - -export class PhaseDidNotChangeError extends Error { - constructor(phase: PublicKernelType) { - super(`Tried to advance the phase from [${phase}] when the circuit still needs [${phase}]`); - } -} - -export class CannotTransitionToSetupError extends Error { - constructor() { - super('Cannot transition to setup phase'); - } -} - -export class PhaseManagerFactory { - public static phaseFromTx( - tx: Tx, - db: MerkleTreeOperations, - publicExecutor: PublicExecutor, - publicKernel: PublicKernelCircuitSimulator, - globalVariables: GlobalVariables, - historicalHeader: Header, - publicContractsDB: ContractsDataSourcePublicDB, - publicStateDB: PublicStateDB, - ): AbstractPhaseManager | undefined { - const data = tx.data.forPublic!; - if (data.needsSetup) { - return new SetupPhaseManager( - db, - publicExecutor, - publicKernel, - globalVariables, - historicalHeader, - publicContractsDB, - publicStateDB, - ); - } else if (data.needsAppLogic) { - return new AppLogicPhaseManager( - db, - publicExecutor, - publicKernel, - globalVariables, - historicalHeader, - publicContractsDB, - publicStateDB, - ); - } else if (data.needsTeardown) { - return new TeardownPhaseManager( - db, - publicExecutor, - publicKernel, - globalVariables, - historicalHeader, - publicContractsDB, - publicStateDB, - ); - } else { - return undefined; - } - } - - public static phaseFromOutput( - output: PublicKernelCircuitPublicInputs, - currentPhaseManager: AbstractPhaseManager, - db: MerkleTreeOperations, - publicExecutor: PublicExecutor, - publicKernel: PublicKernelCircuitSimulator, - globalVariables: GlobalVariables, - historicalHeader: Header, - publicContractsDB: ContractsDataSourcePublicDB, - publicStateDB: PublicStateDB, - ): AbstractPhaseManager | undefined { - if (output.needsSetup) { - throw new CannotTransitionToSetupError(); - } else if (output.needsAppLogic) { - if (currentPhaseManager.phase === PublicKernelType.APP_LOGIC) { - throw new PhaseDidNotChangeError(currentPhaseManager.phase); - } - return new AppLogicPhaseManager( - db, - publicExecutor, - publicKernel, - globalVariables, - historicalHeader, - publicContractsDB, - publicStateDB, - ); - } else if (output.needsTeardown) { - if (currentPhaseManager.phase === PublicKernelType.TEARDOWN) { - throw new PhaseDidNotChangeError(currentPhaseManager.phase); - } - return new TeardownPhaseManager( - db, - publicExecutor, - publicKernel, - globalVariables, - historicalHeader, - publicContractsDB, - publicStateDB, - ); - } else if (currentPhaseManager.phase !== PublicKernelType.TAIL) { - return new TailPhaseManager( - db, - publicExecutor, - publicKernel, - globalVariables, - historicalHeader, - publicContractsDB, - publicStateDB, - ); - } else { - return undefined; - } - } -} diff --git a/yarn-project/simulator/src/public/public_db_sources.test.ts b/yarn-project/simulator/src/public/public_db_sources.test.ts index d3a66358d1d..4880036b5a8 100644 --- a/yarn-project/simulator/src/public/public_db_sources.test.ts +++ b/yarn-project/simulator/src/public/public_db_sources.test.ts @@ -2,21 +2,25 @@ import { MerkleTreeId } from '@aztec/circuit-types'; import { AztecAddress, Fr, PublicDataTreeLeafPreimage } from '@aztec/circuits.js'; import { computePublicDataTreeLeafSlot } from '@aztec/circuits.js/hash'; import { type IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; +import { type ContractDataSource } from '@aztec/types/contracts'; import { type MerkleTreeOperations } from '@aztec/world-state'; import { type MockProxy, mock } from 'jest-mock-extended'; -import { WorldStatePublicDB } from './public_db_sources.js'; +import { WorldStateDB } from './public_db_sources.js'; const DB_VALUES_SIZE = 10; describe('world_state_public_db', () => { let db: MockProxy; + const contractDataSource: MockProxy = mock(); let dbStorage: Map>; let addresses: AztecAddress[]; let slots: Fr[]; let dbValues: Fr[]; + let worldStateDB: WorldStateDB; + beforeEach(() => { addresses = Array(DB_VALUES_SIZE).fill(0).map(AztecAddress.random); slots = Array(DB_VALUES_SIZE).fill(0).map(Fr.random); @@ -68,153 +72,147 @@ describe('world_state_public_db', () => { return Promise.resolve(PublicDataTreeLeafPreimage.fromBuffer(tree.get(index)!)); }); + + worldStateDB = new WorldStateDB(db, contractDataSource); }); it('reads unwritten value from merkle tree db', async function () { - const publicStateDb = new WorldStatePublicDB(db); - expect(await publicStateDb.storageRead(addresses[0], slots[0])).toEqual(dbValues[0]); - expect(await publicStateDb.storageRead(addresses[1], slots[1])).toEqual(dbValues[1]); + expect(await worldStateDB.storageRead(addresses[0], slots[0])).toEqual(dbValues[0]); + expect(await worldStateDB.storageRead(addresses[1], slots[1])).toEqual(dbValues[1]); }); it('reads uncommitted value back', async function () { - const publicStateDb = new WorldStatePublicDB(db); - expect(await publicStateDb.storageRead(addresses[0], slots[0])).toEqual(dbValues[0]); + expect(await worldStateDB.storageRead(addresses[0], slots[0])).toEqual(dbValues[0]); const newValue = new Fr(dbValues[0].toBigInt() + 1n); // write a new value to our first value - await publicStateDb.storageWrite(addresses[0], slots[0], newValue); + await worldStateDB.storageWrite(addresses[0], slots[0], newValue); // should read back the uncommitted value - expect(await publicStateDb.storageRead(addresses[0], slots[0])).toEqual(newValue); + expect(await worldStateDB.storageRead(addresses[0], slots[0])).toEqual(newValue); // other slots should be unchanged - expect(await publicStateDb.storageRead(addresses[1], slots[1])).toEqual(dbValues[1]); + expect(await worldStateDB.storageRead(addresses[1], slots[1])).toEqual(dbValues[1]); }); it('reads committed value back', async function () { - const publicStateDb = new WorldStatePublicDB(db); - expect(await publicStateDb.storageRead(addresses[0], slots[0])).toEqual(dbValues[0]); + expect(await worldStateDB.storageRead(addresses[0], slots[0])).toEqual(dbValues[0]); const newValue = new Fr(dbValues[0].toBigInt() + 1n); // write a new value to our first value - await publicStateDb.storageWrite(addresses[0], slots[0], newValue); + await worldStateDB.storageWrite(addresses[0], slots[0], newValue); // commit the data - await publicStateDb.commit(); + await worldStateDB.commit(); // should read back the committed value - expect(await publicStateDb.storageRead(addresses[0], slots[0])).toEqual(newValue); + expect(await worldStateDB.storageRead(addresses[0], slots[0])).toEqual(newValue); // other slots should be unchanged - expect(await publicStateDb.storageRead(addresses[1], slots[1])).toEqual(dbValues[1]); + expect(await worldStateDB.storageRead(addresses[1], slots[1])).toEqual(dbValues[1]); }); it('will not rollback a committed value', async function () { - const publicStateDb = new WorldStatePublicDB(db); - expect(await publicStateDb.storageRead(addresses[0], slots[0])).toEqual(dbValues[0]); + expect(await worldStateDB.storageRead(addresses[0], slots[0])).toEqual(dbValues[0]); const newValue = new Fr(dbValues[0].toBigInt() + 1n); // write a new value to our first value - await publicStateDb.storageWrite(addresses[0], slots[0], newValue); + await worldStateDB.storageWrite(addresses[0], slots[0], newValue); // commit the data - await publicStateDb.commit(); + await worldStateDB.commit(); // should read back the committed value - expect(await publicStateDb.storageRead(addresses[0], slots[0])).toEqual(newValue); + expect(await worldStateDB.storageRead(addresses[0], slots[0])).toEqual(newValue); - await publicStateDb.rollbackToCommit(); + await worldStateDB.rollbackToCommit(); // should still read back the committed value - expect(await publicStateDb.storageRead(addresses[0], slots[0])).toEqual(newValue); + expect(await worldStateDB.storageRead(addresses[0], slots[0])).toEqual(newValue); }); it('reads original value if rolled back uncommitted value', async function () { - const publicStateDb = new WorldStatePublicDB(db); - expect(await publicStateDb.storageRead(addresses[0], slots[0])).toEqual(dbValues[0]); + expect(await worldStateDB.storageRead(addresses[0], slots[0])).toEqual(dbValues[0]); const newValue = new Fr(dbValues[0].toBigInt() + 1n); // write a new value to our first value - await publicStateDb.storageWrite(addresses[0], slots[0], newValue); + await worldStateDB.storageWrite(addresses[0], slots[0], newValue); // should read back the uncommitted value - expect(await publicStateDb.storageRead(addresses[0], slots[0])).toEqual(newValue); + expect(await worldStateDB.storageRead(addresses[0], slots[0])).toEqual(newValue); // now rollback - await publicStateDb.rollbackToCommit(); + await worldStateDB.rollbackToCommit(); // should now read the original value - expect(await publicStateDb.storageRead(addresses[0], slots[0])).toEqual(dbValues[0]); + expect(await worldStateDB.storageRead(addresses[0], slots[0])).toEqual(dbValues[0]); }); it('reads newly uncommitted value back', async function () { - const publicStateDb = new WorldStatePublicDB(db); - expect(await publicStateDb.storageRead(addresses[0], slots[0])).toEqual(dbValues[0]); + expect(await worldStateDB.storageRead(addresses[0], slots[0])).toEqual(dbValues[0]); const newValue = new Fr(dbValues[0].toBigInt() + 1n); // write a new value to our first value - await publicStateDb.storageWrite(addresses[0], slots[0], newValue); + await worldStateDB.storageWrite(addresses[0], slots[0], newValue); // commit the data - await publicStateDb.commit(); + await worldStateDB.commit(); // should read back the committed value - expect(await publicStateDb.storageRead(addresses[0], slots[0])).toEqual(newValue); + expect(await worldStateDB.storageRead(addresses[0], slots[0])).toEqual(newValue); // other slots should be unchanged - expect(await publicStateDb.storageRead(addresses[1], slots[1])).toEqual(dbValues[1]); + expect(await worldStateDB.storageRead(addresses[1], slots[1])).toEqual(dbValues[1]); // now update the slot again const newValue2 = new Fr(dbValues[0].toBigInt() + 2n); // write a new value to our first value - await publicStateDb.storageWrite(addresses[0], slots[0], newValue2); + await worldStateDB.storageWrite(addresses[0], slots[0], newValue2); // should read back the uncommitted value - expect(await publicStateDb.storageRead(addresses[0], slots[0])).toEqual(newValue2); + expect(await worldStateDB.storageRead(addresses[0], slots[0])).toEqual(newValue2); }); it('rolls back to previously committed value', async function () { - const publicStateDb = new WorldStatePublicDB(db); - expect(await publicStateDb.storageRead(addresses[0], slots[0])).toEqual(dbValues[0]); + expect(await worldStateDB.storageRead(addresses[0], slots[0])).toEqual(dbValues[0]); const newValue = new Fr(dbValues[0].toBigInt() + 1n); // write a new value to our first value - await publicStateDb.storageWrite(addresses[0], slots[0], newValue); + await worldStateDB.storageWrite(addresses[0], slots[0], newValue); // commit the data - await publicStateDb.commit(); + await worldStateDB.commit(); // should read back the committed value - expect(await publicStateDb.storageRead(addresses[0], slots[0])).toEqual(newValue); + expect(await worldStateDB.storageRead(addresses[0], slots[0])).toEqual(newValue); // other slots should be unchanged - expect(await publicStateDb.storageRead(addresses[1], slots[1])).toEqual(dbValues[1]); + expect(await worldStateDB.storageRead(addresses[1], slots[1])).toEqual(dbValues[1]); // now update the slot again const newValue2 = new Fr(dbValues[0].toBigInt() + 2n); // write a new value to our first value - await publicStateDb.storageWrite(addresses[0], slots[0], newValue2); + await worldStateDB.storageWrite(addresses[0], slots[0], newValue2); // should read back the uncommitted value - expect(await publicStateDb.storageRead(addresses[0], slots[0])).toEqual(newValue2); + expect(await worldStateDB.storageRead(addresses[0], slots[0])).toEqual(newValue2); // rollback - await publicStateDb.rollbackToCommit(); + await worldStateDB.rollbackToCommit(); // should read back the previously committed value - expect(await publicStateDb.storageRead(addresses[0], slots[0])).toEqual(newValue); + expect(await worldStateDB.storageRead(addresses[0], slots[0])).toEqual(newValue); }); it('can use checkpoints', async function () { - const publicStateDb = new WorldStatePublicDB(db); - const read = () => publicStateDb.storageRead(addresses[0], slots[0]); - const write = (value: Fr) => publicStateDb.storageWrite(addresses[0], slots[0], value); + const read = () => worldStateDB.storageRead(addresses[0], slots[0]); + const write = (value: Fr) => worldStateDB.storageWrite(addresses[0], slots[0], value); const newValue = new Fr(dbValues[0].toBigInt() + 1n); const newValue2 = new Fr(dbValues[0].toBigInt() + 2n); @@ -226,32 +224,32 @@ describe('world_state_public_db', () => { // basic expect(await read()).toEqual(dbValues[0]); await write(newValue); - await publicStateDb.checkpoint(); + await worldStateDB.checkpoint(); await write(newValue2); - await publicStateDb.rollbackToCheckpoint(); + await worldStateDB.rollbackToCheckpoint(); expect(await read()).toEqual(newValue); - await publicStateDb.rollbackToCommit(); + await worldStateDB.rollbackToCommit(); expect(await read()).toEqual(dbValues[0]); // write, checkpoint, commit, rollback to checkpoint, rollback to commit await write(newValue3); - await publicStateDb.checkpoint(); - await publicStateDb.rollbackToCheckpoint(); + await worldStateDB.checkpoint(); + await worldStateDB.rollbackToCheckpoint(); expect(await read()).toEqual(newValue3); - await publicStateDb.commit(); - await publicStateDb.rollbackToCommit(); + await worldStateDB.commit(); + await worldStateDB.rollbackToCommit(); expect(await read()).toEqual(newValue3); // writes after checkpoint take precedence await write(newValue4); - await publicStateDb.checkpoint(); + await worldStateDB.checkpoint(); await write(newValue5); - await publicStateDb.commit(); + await worldStateDB.commit(); expect(await read()).toEqual(newValue5); // rollback to checkpoint does not cross commit boundaries await write(newValue6); - await publicStateDb.rollbackToCheckpoint(); + await worldStateDB.rollbackToCheckpoint(); expect(await read()).toEqual(newValue5); }); }); diff --git a/yarn-project/simulator/src/public/public_db_sources.ts b/yarn-project/simulator/src/public/public_db_sources.ts index 662ccae10c3..745f9bfe550 100644 --- a/yarn-project/simulator/src/public/public_db_sources.ts +++ b/yarn-project/simulator/src/public/public_db_sources.ts @@ -38,7 +38,7 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB { private log = createDebugLogger('aztec:sequencer:contracts-data-source'); - constructor(private db: ContractDataSource) {} + constructor(private dataSource: ContractDataSource) {} /** * Add new contracts from a transaction @@ -78,11 +78,11 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB { } public async getContractInstance(address: AztecAddress): Promise { - return this.instanceCache.get(address.toString()) ?? (await this.db.getContract(address)); + return this.instanceCache.get(address.toString()) ?? (await this.dataSource.getContract(address)); } public async getContractClass(contractClassId: Fr): Promise { - return this.classCache.get(contractClassId.toString()) ?? (await this.db.getContractClass(contractClassId)); + return this.classCache.get(contractClassId.toString()) ?? (await this.dataSource.getContractClass(contractClassId)); } async getBytecode(address: AztecAddress, selector: FunctionSelector): Promise { @@ -98,7 +98,7 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB { } public async getDebugFunctionName(address: AztecAddress, selector: FunctionSelector): Promise { - const artifact = await this.db.getContractArtifact(address); + const artifact = await this.dataSource.getContractArtifact(address); if (!artifact) { return Promise.resolve(undefined); } @@ -115,14 +115,18 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB { } /** - * Implements the PublicStateDB using a world-state database. + * A public state DB that reads and writes to the world state. */ -export class WorldStatePublicDB implements PublicStateDB { - private committedWriteCache: Map = new Map(); - private checkpointedWriteCache: Map = new Map(); - private uncommittedWriteCache: Map = new Map(); +export class WorldStateDB extends ContractsDataSourcePublicDB implements PublicStateDB, CommitmentsDB { + private logger = createDebugLogger('aztec:sequencer:world-state-db'); - constructor(private db: MerkleTreeOperations) {} + private publicCommittedWriteCache: Map = new Map(); + private publicCheckpointedWriteCache: Map = new Map(); + private publicUncommittedWriteCache: Map = new Map(); + + constructor(private db: MerkleTreeOperations, dataSource: ContractDataSource) { + super(dataSource); + } /** * Reads a value from public storage, returning zero if none. @@ -132,15 +136,15 @@ export class WorldStatePublicDB implements PublicStateDB { */ public async storageRead(contract: AztecAddress, slot: Fr): Promise { const leafSlot = computePublicDataTreeLeafSlot(contract, slot).value; - const uncommitted = this.uncommittedWriteCache.get(leafSlot); + const uncommitted = this.publicUncommittedWriteCache.get(leafSlot); if (uncommitted !== undefined) { return uncommitted; } - const checkpointed = this.checkpointedWriteCache.get(leafSlot); + const checkpointed = this.publicCheckpointedWriteCache.get(leafSlot); if (checkpointed !== undefined) { return checkpointed; } - const committed = this.committedWriteCache.get(leafSlot); + const committed = this.publicCommittedWriteCache.get(leafSlot); if (committed !== undefined) { return committed; } @@ -167,57 +171,10 @@ export class WorldStatePublicDB implements PublicStateDB { */ public storageWrite(contract: AztecAddress, slot: Fr, newValue: Fr): Promise { const index = computePublicDataTreeLeafSlot(contract, slot).value; - this.uncommittedWriteCache.set(index, newValue); + this.publicUncommittedWriteCache.set(index, newValue); return Promise.resolve(index); } - /** - * Commit the pending changes to the DB. - * @returns Nothing. - */ - commit(): Promise { - for (const [k, v] of this.checkpointedWriteCache) { - this.committedWriteCache.set(k, v); - } - // uncommitted writes take precedence over checkpointed writes - // since they are the most recent - for (const [k, v] of this.uncommittedWriteCache) { - this.committedWriteCache.set(k, v); - } - return this.rollbackToCommit(); - } - - /** - * Rollback the pending changes. - * @returns Nothing. - */ - async rollbackToCommit(): Promise { - await this.rollbackToCheckpoint(); - this.checkpointedWriteCache = new Map(); - return Promise.resolve(); - } - - checkpoint(): Promise { - for (const [k, v] of this.uncommittedWriteCache) { - this.checkpointedWriteCache.set(k, v); - } - return this.rollbackToCheckpoint(); - } - - rollbackToCheckpoint(): Promise { - this.uncommittedWriteCache = new Map(); - return Promise.resolve(); - } -} - -/** - * Implements WorldState db using a world state database. - */ -export class WorldStateDB implements CommitmentsDB { - private log = createDebugLogger('aztec:sequencer:world-state-db'); - - constructor(private db: MerkleTreeOperations) {} - public async getNullifierMembershipWitnessAtLatestBlock( nullifier: Fr, ): Promise { @@ -239,7 +196,7 @@ export class WorldStateDB implements CommitmentsDB { return undefined; } - this.log.debug(`[DB] Fetched nullifier membership`, { + this.logger.debug(`[DB] Fetched nullifier membership`, { eventName: 'public-db-access', duration: timer.ms(), operation: 'get-nullifier-membership-witness-at-latest-block', @@ -277,7 +234,7 @@ export class WorldStateDB implements CommitmentsDB { messageIndex, ); - this.log.debug(`[DB] Fetched L1 to L2 message membership`, { + this.logger.debug(`[DB] Fetched L1 to L2 message membership`, { eventName: 'public-db-access', duration: timer.ms(), operation: 'get-l1-to-l2-message-membership-witness', @@ -289,7 +246,7 @@ export class WorldStateDB implements CommitmentsDB { public async getL1ToL2LeafValue(leafIndex: bigint): Promise { const timer = new Timer(); const leafValue = await this.db.getLeafValue(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, leafIndex); - this.log.debug(`[DB] Fetched L1 to L2 message leaf value`, { + this.logger.debug(`[DB] Fetched L1 to L2 message leaf value`, { eventName: 'public-db-access', duration: timer.ms(), operation: 'get-l1-to-l2-message-leaf-value', @@ -300,7 +257,7 @@ export class WorldStateDB implements CommitmentsDB { public async getCommitmentIndex(commitment: Fr): Promise { const timer = new Timer(); const index = await this.db.findLeafIndex(MerkleTreeId.NOTE_HASH_TREE, commitment); - this.log.debug(`[DB] Fetched commitment index`, { + this.logger.debug(`[DB] Fetched commitment index`, { eventName: 'public-db-access', duration: timer.ms(), operation: 'get-commitment-index', @@ -311,7 +268,7 @@ export class WorldStateDB implements CommitmentsDB { public async getCommitmentValue(leafIndex: bigint): Promise { const timer = new Timer(); const leafValue = await this.db.getLeafValue(MerkleTreeId.NOTE_HASH_TREE, leafIndex); - this.log.debug(`[DB] Fetched commitment leaf value`, { + this.logger.debug(`[DB] Fetched commitment leaf value`, { eventName: 'public-db-access', duration: timer.ms(), operation: 'get-commitment-leaf-value', @@ -322,11 +279,49 @@ export class WorldStateDB implements CommitmentsDB { public async getNullifierIndex(nullifier: Fr): Promise { const timer = new Timer(); const index = await this.db.findLeafIndex(MerkleTreeId.NULLIFIER_TREE, nullifier.toBuffer()); - this.log.debug(`[DB] Fetched nullifier index`, { + this.logger.debug(`[DB] Fetched nullifier index`, { eventName: 'public-db-access', duration: timer.ms(), operation: 'get-nullifier-index', } satisfies PublicDBAccessStats); return index; } + + /** + * Commit the pending public changes to the DB. + * @returns Nothing. + */ + commit(): Promise { + for (const [k, v] of this.publicCheckpointedWriteCache) { + this.publicCommittedWriteCache.set(k, v); + } + // uncommitted writes take precedence over checkpointed writes + // since they are the most recent + for (const [k, v] of this.publicUncommittedWriteCache) { + this.publicCommittedWriteCache.set(k, v); + } + return this.rollbackToCommit(); + } + + /** + * Rollback the pending public changes. + * @returns Nothing. + */ + async rollbackToCommit(): Promise { + await this.rollbackToCheckpoint(); + this.publicCheckpointedWriteCache = new Map(); + return Promise.resolve(); + } + + checkpoint(): Promise { + for (const [k, v] of this.publicUncommittedWriteCache) { + this.publicCheckpointedWriteCache.set(k, v); + } + return this.rollbackToCheckpoint(); + } + + rollbackToCheckpoint(): Promise { + this.publicUncommittedWriteCache = new Map(); + return Promise.resolve(); + } } diff --git a/yarn-project/simulator/src/public/public_kernel.ts b/yarn-project/simulator/src/public/public_kernel.ts index e7490c85ada..0ec6c257086 100644 --- a/yarn-project/simulator/src/public/public_kernel.ts +++ b/yarn-project/simulator/src/public/public_kernel.ts @@ -3,7 +3,9 @@ import { type KernelCircuitPublicInputs, type PublicKernelCircuitPrivateInputs, type PublicKernelCircuitPublicInputs, + type PublicKernelInnerCircuitPrivateInputs, type PublicKernelTailCircuitPrivateInputs, + type VMCircuitPublicInputs, } from '@aztec/circuits.js'; import { createDebugLogger } from '@aztec/foundation/log'; import { elapsed } from '@aztec/foundation/timer'; @@ -11,12 +13,10 @@ import { SimulatedServerCircuitArtifacts, convertSimulatedPublicInnerInputsToWitnessMap, convertSimulatedPublicInnerOutputFromWitnessMap, - convertSimulatedPublicSetupInputsToWitnessMap, - convertSimulatedPublicSetupOutputFromWitnessMap, + convertSimulatedPublicMergeInputsToWitnessMap, + convertSimulatedPublicMergeOutputFromWitnessMap, convertSimulatedPublicTailInputsToWitnessMap, convertSimulatedPublicTailOutputFromWitnessMap, - convertSimulatedPublicTeardownInputsToWitnessMap, - convertSimulatedPublicTeardownOutputFromWitnessMap, } from '@aztec/noir-protocol-circuits-types'; import { WASMSimulator } from '../providers/acvm_wasm.js'; @@ -39,46 +39,15 @@ export class RealPublicKernelCircuitSimulator implements PublicKernelCircuitSimu * @param input - Inputs to the circuit. * @returns The public inputs as outputs of the simulation. */ - public async publicKernelCircuitSetup( - input: PublicKernelCircuitPrivateInputs, - ): Promise { - if (!input.previousKernel.publicInputs.needsSetup) { - throw new Error(`Expected previous kernel inputs to need setup`); - } - const inputWitness = convertSimulatedPublicSetupInputsToWitnessMap(input); - const [duration, witness] = await elapsed(() => - this.wasmSimulator.simulateCircuit(inputWitness, SimulatedServerCircuitArtifacts.PublicKernelSetupArtifact), - ); - const result = convertSimulatedPublicSetupOutputFromWitnessMap(witness); - this.log.debug(`Simulated public kernel setup circuit`, { - eventName: 'circuit-simulation', - circuitName: 'public-kernel-setup', - duration, - inputSize: input.toBuffer().length, - outputSize: result.toBuffer().length, - } satisfies CircuitSimulationStats); - return result; - } - - /** - * Simulates the public kernel app logic circuit from its inputs. - * @param input - Inputs to the circuit. - * @returns The public inputs as outputs of the simulation. - */ - public async publicKernelCircuitAppLogic( - input: PublicKernelCircuitPrivateInputs, - ): Promise { - if (!input.previousKernel.publicInputs.needsAppLogic) { - throw new Error(`Expected previous kernel inputs to need app logic`); - } + public async publicKernelCircuitInner(input: PublicKernelInnerCircuitPrivateInputs): Promise { const inputWitness = convertSimulatedPublicInnerInputsToWitnessMap(input); const [duration, witness] = await elapsed(() => - this.wasmSimulator.simulateCircuit(inputWitness, SimulatedServerCircuitArtifacts.PublicKernelAppLogicArtifact), + this.wasmSimulator.simulateCircuit(inputWitness, SimulatedServerCircuitArtifacts.PublicKernelInnerArtifact), ); const result = convertSimulatedPublicInnerOutputFromWitnessMap(witness); - this.log.debug(`Simulated public kernel app logic circuit`, { + this.log.debug(`Simulated public kernel inner circuit`, { eventName: 'circuit-simulation', - circuitName: 'public-kernel-app-logic', + circuitName: 'public-kernel-inner', duration, inputSize: input.toBuffer().length, outputSize: result.toBuffer().length, @@ -87,24 +56,21 @@ export class RealPublicKernelCircuitSimulator implements PublicKernelCircuitSimu } /** - * Simulates the public kernel teardown circuit from its inputs. + * Simulates the public kernel app logic circuit from its inputs. * @param input - Inputs to the circuit. * @returns The public inputs as outputs of the simulation. */ - public async publicKernelCircuitTeardown( + public async publicKernelCircuitMerge( input: PublicKernelCircuitPrivateInputs, ): Promise { - if (!input.previousKernel.publicInputs.needsTeardown) { - throw new Error(`Expected previous kernel inputs to need teardown`); - } - const inputWitness = convertSimulatedPublicTeardownInputsToWitnessMap(input); + const inputWitness = convertSimulatedPublicMergeInputsToWitnessMap(input); const [duration, witness] = await elapsed(() => - this.wasmSimulator.simulateCircuit(inputWitness, SimulatedServerCircuitArtifacts.PublicKernelTeardownArtifact), + this.wasmSimulator.simulateCircuit(inputWitness, SimulatedServerCircuitArtifacts.PublicKernelMergeArtifact), ); - const result = convertSimulatedPublicTeardownOutputFromWitnessMap(witness); - this.log.debug(`Simulated public kernel teardown circuit`, { + const result = convertSimulatedPublicMergeOutputFromWitnessMap(witness); + this.log.debug(`Simulated public kernel merge circuit`, { eventName: 'circuit-simulation', - circuitName: 'public-kernel-teardown', + circuitName: 'public-kernel-merge', duration, inputSize: input.toBuffer().length, outputSize: result.toBuffer().length, diff --git a/yarn-project/simulator/src/public/public_kernel_circuit_simulator.ts b/yarn-project/simulator/src/public/public_kernel_circuit_simulator.ts index 05bf3182f0e..e779d45bf79 100644 --- a/yarn-project/simulator/src/public/public_kernel_circuit_simulator.ts +++ b/yarn-project/simulator/src/public/public_kernel_circuit_simulator.ts @@ -2,7 +2,9 @@ import { type KernelCircuitPublicInputs, type PublicKernelCircuitPrivateInputs, type PublicKernelCircuitPublicInputs, + type PublicKernelInnerCircuitPrivateInputs, type PublicKernelTailCircuitPrivateInputs, + type VMCircuitPublicInputs, } from '@aztec/circuits.js'; /** @@ -10,23 +12,17 @@ import { */ export interface PublicKernelCircuitSimulator { /** - * Simulates the public kernel setup circuit from its inputs. + * Simulates the public kernel inner circuit from its inputs. * @param inputs - Inputs to the circuit. * @returns The public inputs as outputs of the simulation. */ - publicKernelCircuitSetup(inputs: PublicKernelCircuitPrivateInputs): Promise; + publicKernelCircuitInner(inputs: PublicKernelInnerCircuitPrivateInputs): Promise; /** - * Simulates the public kernel app logic circuit from its inputs. + * Simulates the public kernel merge circuit from its inputs. * @param inputs - Inputs to the circuit. * @returns The public inputs as outputs of the simulation. */ - publicKernelCircuitAppLogic(inputs: PublicKernelCircuitPrivateInputs): Promise; - /** - * Simulates the public kernel teardown circuit from its inputs. - * @param inputs - Inputs to the circuit. - * @returns The public inputs as outputs of the simulation. - */ - publicKernelCircuitTeardown(inputs: PublicKernelCircuitPrivateInputs): Promise; + publicKernelCircuitMerge(inputs: PublicKernelCircuitPrivateInputs): Promise; /** * Simulates the public kernel tail circuit from its inputs. * @param inputs - Inputs to the circuit. diff --git a/yarn-project/simulator/src/public/public_kernel_tail_simulator.ts b/yarn-project/simulator/src/public/public_kernel_tail_simulator.ts new file mode 100644 index 00000000000..d05255d6b0d --- /dev/null +++ b/yarn-project/simulator/src/public/public_kernel_tail_simulator.ts @@ -0,0 +1,106 @@ +import { ProvingRequestType, type PublicKernelTailRequest } from '@aztec/circuit-types'; +import { + type KernelCircuitPublicInputs, + MAX_NULLIFIERS_PER_TX, + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, + NESTED_RECURSIVE_PROOF_LENGTH, + type PublicKernelCircuitPublicInputs, + PublicKernelData, + PublicKernelTailCircuitPrivateInputs, + makeEmptyRecursiveProof, + mergeAccumulatedData, +} from '@aztec/circuits.js'; +import { ProtocolCircuitVks, getVKIndex, getVKSiblingPath } from '@aztec/noir-protocol-circuits-types'; +import { type MerkleTreeOperations } from '@aztec/world-state'; + +import { HintsBuilder } from './hints_builder.js'; +import { type PublicKernelCircuitSimulator } from './public_kernel_circuit_simulator.js'; + +export class PublicKernelTailSimulator { + constructor( + private db: MerkleTreeOperations, + private publicKernelSimulator: PublicKernelCircuitSimulator, + private hintsBuilder: HintsBuilder, + ) {} + + static create(db: MerkleTreeOperations, publicKernelSimulator: PublicKernelCircuitSimulator) { + const hintsBuilder = new HintsBuilder(db); + return new PublicKernelTailSimulator(db, publicKernelSimulator, hintsBuilder); + } + + async simulate( + previousOutput: PublicKernelCircuitPublicInputs, + ): Promise<{ output: KernelCircuitPublicInputs; provingRequest: PublicKernelTailRequest }> { + const inputs = await this.buildPrivateInputs(previousOutput); + + const output = await this.publicKernelSimulator.publicKernelCircuitTail(inputs); + + const provingRequest: PublicKernelTailRequest = { + type: ProvingRequestType.PUBLIC_KERNEL_TAIL, + inputs, + }; + + return { output, provingRequest }; + } + + private async buildPrivateInputs(previousOutput: PublicKernelCircuitPublicInputs) { + const previousKernel = this.getPreviousKernelData(previousOutput); + + const { validationRequests, endNonRevertibleData: nonRevertibleData, end: revertibleData } = previousOutput; + + const noteHashReadRequestHints = await this.hintsBuilder.getNoteHashReadRequestsHints( + validationRequests.noteHashReadRequests, + ); + + const pendingNullifiers = mergeAccumulatedData( + nonRevertibleData.nullifiers, + revertibleData.nullifiers, + MAX_NULLIFIERS_PER_TX, + ); + + const nullifierReadRequestHints = await this.hintsBuilder.getNullifierReadRequestHints( + validationRequests.nullifierReadRequests, + pendingNullifiers, + ); + + const nullifierNonExistentReadRequestHints = await this.hintsBuilder.getNullifierNonExistentReadRequestHints( + validationRequests.nullifierNonExistentReadRequests, + pendingNullifiers, + ); + + const l1ToL2MsgReadRequestHints = await this.hintsBuilder.getL1ToL2MsgReadRequestsHints( + validationRequests.l1ToL2MsgReadRequests, + ); + + const pendingPublicDataWrites = mergeAccumulatedData( + nonRevertibleData.publicDataUpdateRequests, + revertibleData.publicDataUpdateRequests, + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, + ); + + const publicDataHints = await this.hintsBuilder.getPublicDataHints( + validationRequests.publicDataReads, + pendingPublicDataWrites, + ); + + const currentState = await this.db.getStateReference(); + + return new PublicKernelTailCircuitPrivateInputs( + previousKernel, + noteHashReadRequestHints, + nullifierReadRequestHints, + nullifierNonExistentReadRequestHints, + l1ToL2MsgReadRequestHints, + publicDataHints, + currentState.partial, + ); + } + + private getPreviousKernelData(previousOutput: PublicKernelCircuitPublicInputs): PublicKernelData { + const proof = makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH); + const vk = ProtocolCircuitVks.PublicKernelMergeArtifact; + const vkIndex = getVKIndex(vk); + const siblingPath = getVKSiblingPath(vkIndex); + return new PublicKernelData(previousOutput, proof, vk, vkIndex, siblingPath); + } +} diff --git a/yarn-project/simulator/src/public/public_processor.test.ts b/yarn-project/simulator/src/public/public_processor.test.ts index 7778147a3ef..f251a142dac 100644 --- a/yarn-project/simulator/src/public/public_processor.test.ts +++ b/yarn-project/simulator/src/public/public_processor.test.ts @@ -2,7 +2,7 @@ import { type BlockProver, type ProcessedTx, PublicDataWrite, - PublicKernelType, + PublicKernelPhase, SimulationError, type TreeInfo, type TxValidator, @@ -50,7 +50,7 @@ import { jest } from '@jest/globals'; import { type MockProxy, mock } from 'jest-mock-extended'; import { PublicExecutionResultBuilder, makeFunctionCall } from '../mocks/fixtures.js'; -import { type ContractsDataSourcePublicDB, type WorldStatePublicDB } from './public_db_sources.js'; +import { type WorldStateDB } from './public_db_sources.js'; import { RealPublicKernelCircuitSimulator } from './public_kernel.js'; import { type PublicKernelCircuitSimulator } from './public_kernel_circuit_simulator.js'; import { PublicProcessor } from './public_processor.js'; @@ -58,8 +58,7 @@ import { PublicProcessor } from './public_processor.js'; describe('public_processor', () => { let db: MockProxy; let publicExecutor: MockProxy; - let publicContractsDB: MockProxy; - let publicWorldStateDB: MockProxy; + let worldStateDB: MockProxy; let prover: MockProxy; let proof: ClientIvcProof; @@ -70,15 +69,14 @@ describe('public_processor', () => { beforeEach(() => { db = mock(); publicExecutor = mock(); - publicContractsDB = mock(); - publicWorldStateDB = mock(); + worldStateDB = mock(); prover = mock(); proof = ClientIvcProof.empty(); root = Buffer.alloc(32, 5); db.getTreeInfo.mockResolvedValue({ root } as TreeInfo); - publicWorldStateDB.storageRead.mockResolvedValue(Fr.ZERO); + worldStateDB.storageRead.mockResolvedValue(Fr.ZERO); }); describe('with mock circuits', () => { @@ -86,14 +84,13 @@ describe('public_processor', () => { beforeEach(() => { publicKernel = mock(); - processor = new PublicProcessor( + processor = PublicProcessor.create( db, publicExecutor, publicKernel, GlobalVariables.empty(), Header.empty(), - publicContractsDB, - publicWorldStateDB, + worldStateDB, new NoopTelemetryClient(), ); }); @@ -138,8 +135,8 @@ describe('public_processor', () => { expect(processed).toEqual([]); expect(failed[0].tx).toEqual(tx); expect(failed[0].error).toEqual(new SimulationError(`Failed`, [])); - expect(publicWorldStateDB.commit).toHaveBeenCalledTimes(0); - expect(publicWorldStateDB.rollbackToCommit).toHaveBeenCalledTimes(1); + expect(worldStateDB.commit).toHaveBeenCalledTimes(0); + expect(worldStateDB.rollbackToCommit).toHaveBeenCalledTimes(1); expect(prover.addNewTx).toHaveBeenCalledTimes(0); }); }); @@ -185,14 +182,13 @@ describe('public_processor', () => { }); publicKernel = new RealPublicKernelCircuitSimulator(new WASMSimulator()); - processor = new PublicProcessor( + processor = PublicProcessor.create( db, publicExecutor, publicKernel, GlobalVariables.from({ ...GlobalVariables.empty(), gasFees: GasFees.default() }), header, - publicContractsDB, - publicWorldStateDB, + worldStateDB, new NoopTelemetryClient(), ); }); @@ -211,8 +207,8 @@ describe('public_processor', () => { expect(processed[0].hash).toEqual(tx.getTxHash()); expect(processed[0].clientIvcProof).toEqual(proof); expect(publicExecutor.simulate).toHaveBeenCalledTimes(2); - expect(publicWorldStateDB.commit).toHaveBeenCalledTimes(1); - expect(publicWorldStateDB.rollbackToCommit).toHaveBeenCalledTimes(0); + expect(worldStateDB.commit).toHaveBeenCalledTimes(1); + expect(worldStateDB.rollbackToCommit).toHaveBeenCalledTimes(0); // we keep the logs expect(processed[0].encryptedLogs.getTotalLogCount()).toBe(6); @@ -245,10 +241,10 @@ describe('public_processor', () => { expect(failed).toHaveLength(0); expect(publicExecutor.simulate).toHaveBeenCalledTimes(1); // we only call checkpoint after successful "setup" - expect(publicWorldStateDB.checkpoint).toHaveBeenCalledTimes(0); - expect(publicWorldStateDB.rollbackToCheckpoint).toHaveBeenCalledTimes(0); - expect(publicWorldStateDB.commit).toHaveBeenCalledTimes(1); - expect(publicWorldStateDB.rollbackToCommit).toHaveBeenCalledTimes(0); + expect(worldStateDB.checkpoint).toHaveBeenCalledTimes(0); + expect(worldStateDB.rollbackToCheckpoint).toHaveBeenCalledTimes(0); + expect(worldStateDB.commit).toHaveBeenCalledTimes(1); + expect(worldStateDB.rollbackToCommit).toHaveBeenCalledTimes(0); expect(prover.addNewTx).toHaveBeenCalledWith(processed[0]); }); @@ -268,8 +264,8 @@ describe('public_processor', () => { expect(processed[1].clientIvcProof).toEqual(proof); expect(failed).toHaveLength(0); expect(publicExecutor.simulate).toHaveBeenCalledTimes(2); - expect(publicWorldStateDB.commit).toHaveBeenCalledTimes(2); - expect(publicWorldStateDB.rollbackToCommit).toHaveBeenCalledTimes(0); + expect(worldStateDB.commit).toHaveBeenCalledTimes(2); + expect(worldStateDB.rollbackToCommit).toHaveBeenCalledTimes(0); expect(prover.addNewTx).toHaveBeenCalledWith(processed[0]); expect(prover.addNewTx).toHaveBeenCalledWith(processed[1]); @@ -368,9 +364,8 @@ describe('public_processor', () => { } }); - const setupSpy = jest.spyOn(publicKernel, 'publicKernelCircuitSetup'); - const appLogicSpy = jest.spyOn(publicKernel, 'publicKernelCircuitAppLogic'); - const teardownSpy = jest.spyOn(publicKernel, 'publicKernelCircuitTeardown'); + const innerSpy = jest.spyOn(publicKernel, 'publicKernelCircuitInner'); + const mergeSpy = jest.spyOn(publicKernel, 'publicKernelCircuitMerge'); const [processed, failed] = await processor.process([tx], 1, prover); @@ -379,14 +374,13 @@ describe('public_processor', () => { expect(processed[0].clientIvcProof).toEqual(proof); expect(failed).toHaveLength(0); - expect(setupSpy).toHaveBeenCalledTimes(1); - expect(appLogicSpy).toHaveBeenCalledTimes(2); - expect(teardownSpy).toHaveBeenCalledTimes(2); + expect(innerSpy).toHaveBeenCalledTimes(1 + 3 + 2); + expect(mergeSpy).toHaveBeenCalledTimes(3); expect(publicExecutor.simulate).toHaveBeenCalledTimes(3); - expect(publicWorldStateDB.checkpoint).toHaveBeenCalledTimes(1); - expect(publicWorldStateDB.rollbackToCheckpoint).toHaveBeenCalledTimes(1); - expect(publicWorldStateDB.commit).toHaveBeenCalledTimes(1); - expect(publicWorldStateDB.rollbackToCommit).toHaveBeenCalledTimes(0); + expect(worldStateDB.checkpoint).toHaveBeenCalledTimes(1); + expect(worldStateDB.rollbackToCheckpoint).toHaveBeenCalledTimes(1); + expect(worldStateDB.commit).toHaveBeenCalledTimes(1); + expect(worldStateDB.rollbackToCommit).toHaveBeenCalledTimes(0); const txEffect = toTxEffect(processed[0], GasFees.default()); const numPublicDataWrites = 5; @@ -475,9 +469,8 @@ describe('public_processor', () => { } }); - const setupSpy = jest.spyOn(publicKernel, 'publicKernelCircuitSetup'); - const appLogicSpy = jest.spyOn(publicKernel, 'publicKernelCircuitAppLogic'); - const teardownSpy = jest.spyOn(publicKernel, 'publicKernelCircuitTeardown'); + const innerSpy = jest.spyOn(publicKernel, 'publicKernelCircuitInner'); + const mergeSpy = jest.spyOn(publicKernel, 'publicKernelCircuitMerge'); const [processed, failed] = await processor.process([tx], 1, prover); @@ -485,15 +478,14 @@ describe('public_processor', () => { expect(failed).toHaveLength(1); expect(failed[0].tx.getTxHash()).toEqual(tx.getTxHash()); - expect(setupSpy).toHaveBeenCalledTimes(1); - expect(appLogicSpy).toHaveBeenCalledTimes(0); - expect(teardownSpy).toHaveBeenCalledTimes(0); + expect(innerSpy).toHaveBeenCalledTimes(3); + expect(mergeSpy).toHaveBeenCalledTimes(0); expect(publicExecutor.simulate).toHaveBeenCalledTimes(1); - expect(publicWorldStateDB.checkpoint).toHaveBeenCalledTimes(0); - expect(publicWorldStateDB.rollbackToCheckpoint).toHaveBeenCalledTimes(0); - expect(publicWorldStateDB.commit).toHaveBeenCalledTimes(0); - expect(publicWorldStateDB.rollbackToCommit).toHaveBeenCalledTimes(1); + expect(worldStateDB.checkpoint).toHaveBeenCalledTimes(0); + expect(worldStateDB.rollbackToCheckpoint).toHaveBeenCalledTimes(0); + expect(worldStateDB.commit).toHaveBeenCalledTimes(0); + expect(worldStateDB.rollbackToCommit).toHaveBeenCalledTimes(1); expect(prover.addNewTx).toHaveBeenCalledTimes(0); }); @@ -572,9 +564,8 @@ describe('public_processor', () => { } }); - const setupSpy = jest.spyOn(publicKernel, 'publicKernelCircuitSetup'); - const appLogicSpy = jest.spyOn(publicKernel, 'publicKernelCircuitAppLogic'); - const teardownSpy = jest.spyOn(publicKernel, 'publicKernelCircuitTeardown'); + const innerSpy = jest.spyOn(publicKernel, 'publicKernelCircuitInner'); + const mergeSpy = jest.spyOn(publicKernel, 'publicKernelCircuitMerge'); const [processed, failed] = await processor.process([tx], 1, prover); @@ -583,14 +574,13 @@ describe('public_processor', () => { expect(processed[0].clientIvcProof).toEqual(proof); expect(failed).toHaveLength(0); - expect(setupSpy).toHaveBeenCalledTimes(2); - expect(appLogicSpy).toHaveBeenCalledTimes(1); - expect(teardownSpy).toHaveBeenCalledTimes(2); + expect(innerSpy).toHaveBeenCalledTimes(2 + 1 + 3); + expect(mergeSpy).toHaveBeenCalledTimes(3); expect(publicExecutor.simulate).toHaveBeenCalledTimes(3); - expect(publicWorldStateDB.checkpoint).toHaveBeenCalledTimes(1); - expect(publicWorldStateDB.rollbackToCheckpoint).toHaveBeenCalledTimes(1); - expect(publicWorldStateDB.commit).toHaveBeenCalledTimes(1); - expect(publicWorldStateDB.rollbackToCommit).toHaveBeenCalledTimes(0); + expect(worldStateDB.checkpoint).toHaveBeenCalledTimes(1); + expect(worldStateDB.rollbackToCheckpoint).toHaveBeenCalledTimes(1); + expect(worldStateDB.commit).toHaveBeenCalledTimes(1); + expect(worldStateDB.rollbackToCommit).toHaveBeenCalledTimes(0); const txEffect = toTxEffect(processed[0], GasFees.default()); const numPublicDataWrites = 3; @@ -688,9 +678,8 @@ describe('public_processor', () => { } }); - const setupSpy = jest.spyOn(publicKernel, 'publicKernelCircuitSetup'); - const appLogicSpy = jest.spyOn(publicKernel, 'publicKernelCircuitAppLogic'); - const teardownSpy = jest.spyOn(publicKernel, 'publicKernelCircuitTeardown'); + const innerSpy = jest.spyOn(publicKernel, 'publicKernelCircuitInner'); + const mergeSpy = jest.spyOn(publicKernel, 'publicKernelCircuitMerge'); const [processed, failed] = await processor.process([tx], 1, prover); @@ -699,14 +688,13 @@ describe('public_processor', () => { expect(processed[0].clientIvcProof).toEqual(proof); expect(failed).toHaveLength(0); - expect(setupSpy).toHaveBeenCalledTimes(2); - expect(appLogicSpy).toHaveBeenCalledTimes(1); - expect(teardownSpy).toHaveBeenCalledTimes(2); + expect(innerSpy).toHaveBeenCalledTimes(2 + 1 + 3); + expect(mergeSpy).toHaveBeenCalledTimes(3); expect(publicExecutor.simulate).toHaveBeenCalledTimes(3); - expect(publicWorldStateDB.checkpoint).toHaveBeenCalledTimes(1); - expect(publicWorldStateDB.rollbackToCheckpoint).toHaveBeenCalledTimes(2); - expect(publicWorldStateDB.commit).toHaveBeenCalledTimes(1); - expect(publicWorldStateDB.rollbackToCommit).toHaveBeenCalledTimes(0); + expect(worldStateDB.checkpoint).toHaveBeenCalledTimes(1); + expect(worldStateDB.rollbackToCheckpoint).toHaveBeenCalledTimes(2); + expect(worldStateDB.commit).toHaveBeenCalledTimes(1); + expect(worldStateDB.rollbackToCommit).toHaveBeenCalledTimes(0); const txEffect = toTxEffect(processed[0], GasFees.default()); const numPublicDataWrites = 3; @@ -729,7 +717,7 @@ describe('public_processor', () => { expect(prover.addNewTx).toHaveBeenCalledWith(processed[0]); }); - it('runs a tx with setup and teardown phases', async function () { + it('runs a tx with all phases', async function () { const tx = mockTx(1, { numberOfNonRevertiblePublicCallRequests: 1, numberOfRevertiblePublicCallRequests: 1, @@ -841,9 +829,8 @@ describe('public_processor', () => { } }); - const setupSpy = jest.spyOn(publicKernel, 'publicKernelCircuitSetup'); - const appLogicSpy = jest.spyOn(publicKernel, 'publicKernelCircuitAppLogic'); - const teardownSpy = jest.spyOn(publicKernel, 'publicKernelCircuitTeardown'); + const innerSpy = jest.spyOn(publicKernel, 'publicKernelCircuitInner'); + const mergeSpy = jest.spyOn(publicKernel, 'publicKernelCircuitMerge'); const tailSpy = jest.spyOn(publicKernel, 'publicKernelCircuitTail'); const [processed, failed] = await processor.process([tx], 1, prover); @@ -853,9 +840,8 @@ describe('public_processor', () => { expect(processed[0].clientIvcProof).toEqual(proof); expect(failed).toHaveLength(0); - expect(setupSpy).toHaveBeenCalledTimes(1); - expect(appLogicSpy).toHaveBeenCalledTimes(1); - expect(teardownSpy).toHaveBeenCalledTimes(3); + expect(innerSpy).toHaveBeenCalledTimes(1 + 1 + 3); + expect(mergeSpy).toHaveBeenCalledTimes(3); expect(tailSpy).toHaveBeenCalledTimes(1); const expectedSimulateCall = (availableGas: Partial>, txFee: number) => [ @@ -873,25 +859,23 @@ describe('public_processor', () => { expect(publicExecutor.simulate).toHaveBeenNthCalledWith(2, ...expectedSimulateCall(afterSetupGas, 0)); expect(publicExecutor.simulate).toHaveBeenNthCalledWith(3, ...expectedSimulateCall(teardownGas, expectedTxFee)); - expect(publicWorldStateDB.checkpoint).toHaveBeenCalledTimes(1); - expect(publicWorldStateDB.rollbackToCheckpoint).toHaveBeenCalledTimes(0); - expect(publicWorldStateDB.commit).toHaveBeenCalledTimes(1); - expect(publicWorldStateDB.rollbackToCommit).toHaveBeenCalledTimes(0); + expect(worldStateDB.checkpoint).toHaveBeenCalledTimes(1); + expect(worldStateDB.rollbackToCheckpoint).toHaveBeenCalledTimes(0); + expect(worldStateDB.commit).toHaveBeenCalledTimes(1); + expect(worldStateDB.rollbackToCommit).toHaveBeenCalledTimes(0); expect(processed[0].data.end.gasUsed).toEqual(Gas.from(expectedTotalGasUsed)); - expect(processed[0].gasUsed[PublicKernelType.SETUP]).toEqual(setupGasUsed); - expect(processed[0].gasUsed[PublicKernelType.APP_LOGIC]).toEqual(appGasUsed); - expect(processed[0].gasUsed[PublicKernelType.TEARDOWN]).toEqual(teardownGasUsed); - expect(processed[0].gasUsed[PublicKernelType.TAIL]).toBeUndefined(); - expect(processed[0].gasUsed[PublicKernelType.NON_PUBLIC]).toBeUndefined(); + expect(processed[0].gasUsed[PublicKernelPhase.SETUP]).toEqual(setupGasUsed); + expect(processed[0].gasUsed[PublicKernelPhase.APP_LOGIC]).toEqual(appGasUsed); + expect(processed[0].gasUsed[PublicKernelPhase.TEARDOWN]).toEqual(teardownGasUsed); const txEffect = toTxEffect(processed[0], GasFees.default()); const numPublicDataWrites = 3; expect(arrayNonEmptyLength(txEffect.publicDataWrites, PublicDataWrite.isEmpty)).toEqual(numPublicDataWrites); expect(txEffect.publicDataWrites.slice(0, numPublicDataWrites)).toEqual([ - new PublicDataWrite(computePublicDataTreeLeafSlot(nestedContractAddress, contractSlotB), fr(0x152)), new PublicDataWrite(computePublicDataTreeLeafSlot(nestedContractAddress, contractSlotA), fr(0x103)), new PublicDataWrite(computePublicDataTreeLeafSlot(nestedContractAddress, contractSlotC), fr(0x201)), + new PublicDataWrite(computePublicDataTreeLeafSlot(nestedContractAddress, contractSlotB), fr(0x152)), ]); expect(txEffect.encryptedLogs.getTotalLogCount()).toBe(0); expect(txEffect.unencryptedLogs.getTotalLogCount()).toBe(0); @@ -954,9 +938,8 @@ describe('public_processor', () => { } }); - const setupSpy = jest.spyOn(publicKernel, 'publicKernelCircuitSetup'); - const appLogicSpy = jest.spyOn(publicKernel, 'publicKernelCircuitAppLogic'); - const teardownSpy = jest.spyOn(publicKernel, 'publicKernelCircuitTeardown'); + const innerSpy = jest.spyOn(publicKernel, 'publicKernelCircuitInner'); + const mergeSpy = jest.spyOn(publicKernel, 'publicKernelCircuitMerge'); const tailSpy = jest.spyOn(publicKernel, 'publicKernelCircuitTail'); const [processed, failed] = await processor.process([tx], 1, prover); @@ -966,9 +949,8 @@ describe('public_processor', () => { expect(processed[0].clientIvcProof).toEqual(proof); expect(failed).toHaveLength(0); - expect(setupSpy).toHaveBeenCalledTimes(0); - expect(appLogicSpy).toHaveBeenCalledTimes(0); - expect(teardownSpy).toHaveBeenCalledTimes(1); + expect(innerSpy).toHaveBeenCalledTimes(1); + expect(mergeSpy).toHaveBeenCalledTimes(1); expect(tailSpy).toHaveBeenCalledTimes(1); }); @@ -988,8 +970,8 @@ describe('public_processor', () => { inclusionFee: new Fr(inclusionFee), }); - publicWorldStateDB.storageRead.mockResolvedValue(new Fr(initialBalance)); - publicWorldStateDB.storageWrite.mockImplementation((address: AztecAddress, slot: Fr) => + worldStateDB.storageRead.mockResolvedValue(new Fr(initialBalance)); + worldStateDB.storageWrite.mockImplementation((address: AztecAddress, slot: Fr) => Promise.resolve(computePublicDataTreeLeafSlot(address, slot).toBigInt()), ); @@ -998,9 +980,9 @@ describe('public_processor', () => { expect(failed.map(f => f.error)).toEqual([]); expect(processed).toHaveLength(1); expect(publicExecutor.simulate).toHaveBeenCalledTimes(0); - expect(publicWorldStateDB.commit).toHaveBeenCalledTimes(1); - expect(publicWorldStateDB.rollbackToCommit).toHaveBeenCalledTimes(0); - expect(publicWorldStateDB.storageWrite).toHaveBeenCalledTimes(1); + expect(worldStateDB.commit).toHaveBeenCalledTimes(1); + expect(worldStateDB.rollbackToCommit).toHaveBeenCalledTimes(0); + expect(worldStateDB.storageWrite).toHaveBeenCalledTimes(1); expect(processed[0].data.feePayer).toEqual(feePayer); expect(processed[0].finalPublicDataUpdateRequests[MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX]).toEqual( PublicDataUpdateRequest.from({ @@ -1028,8 +1010,8 @@ describe('public_processor', () => { inclusionFee: new Fr(inclusionFee), }); - publicWorldStateDB.storageRead.mockResolvedValue(new Fr(initialBalance)); - publicWorldStateDB.storageWrite.mockImplementation((address: AztecAddress, slot: Fr) => + worldStateDB.storageRead.mockResolvedValue(new Fr(initialBalance)); + worldStateDB.storageWrite.mockImplementation((address: AztecAddress, slot: Fr) => Promise.resolve(computePublicDataTreeLeafSlot(address, slot).toBigInt()), ); @@ -1040,9 +1022,9 @@ describe('public_processor', () => { expect(processed[0].hash).toEqual(tx.getTxHash()); expect(processed[0].clientIvcProof).toEqual(proof); expect(publicExecutor.simulate).toHaveBeenCalledTimes(2); - expect(publicWorldStateDB.commit).toHaveBeenCalledTimes(1); - expect(publicWorldStateDB.rollbackToCommit).toHaveBeenCalledTimes(0); - expect(publicWorldStateDB.storageWrite).toHaveBeenCalledTimes(1); + expect(worldStateDB.commit).toHaveBeenCalledTimes(1); + expect(worldStateDB.rollbackToCommit).toHaveBeenCalledTimes(0); + expect(worldStateDB.storageWrite).toHaveBeenCalledTimes(1); expect(processed[0].data.feePayer).toEqual(feePayer); expect(processed[0].finalPublicDataUpdateRequests[MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX]).toEqual( PublicDataUpdateRequest.from({ @@ -1070,8 +1052,8 @@ describe('public_processor', () => { inclusionFee: new Fr(inclusionFee), }); - publicWorldStateDB.storageRead.mockResolvedValue(Fr.ZERO); - publicWorldStateDB.storageWrite.mockImplementation((address: AztecAddress, slot: Fr) => + worldStateDB.storageRead.mockResolvedValue(Fr.ZERO); + worldStateDB.storageWrite.mockImplementation((address: AztecAddress, slot: Fr) => Promise.resolve(computePublicDataTreeLeafSlot(address, slot).toBigInt()), ); @@ -1088,9 +1070,9 @@ describe('public_processor', () => { expect(processed[0].hash).toEqual(tx.getTxHash()); expect(processed[0].clientIvcProof).toEqual(proof); expect(publicExecutor.simulate).toHaveBeenCalledTimes(2); - expect(publicWorldStateDB.commit).toHaveBeenCalledTimes(1); - expect(publicWorldStateDB.rollbackToCommit).toHaveBeenCalledTimes(0); - expect(publicWorldStateDB.storageWrite).toHaveBeenCalledTimes(1); + expect(worldStateDB.commit).toHaveBeenCalledTimes(1); + expect(worldStateDB.rollbackToCommit).toHaveBeenCalledTimes(0); + expect(worldStateDB.storageWrite).toHaveBeenCalledTimes(1); expect(processed[0].data.feePayer).toEqual(feePayer); expect(processed[0].finalPublicDataUpdateRequests[0]).toEqual( PublicDataUpdateRequest.from({ @@ -1118,8 +1100,8 @@ describe('public_processor', () => { inclusionFee: new Fr(inclusionFee), }); - publicWorldStateDB.storageRead.mockResolvedValue(new Fr(initialBalance)); - publicWorldStateDB.storageWrite.mockImplementation((address: AztecAddress, slot: Fr) => + worldStateDB.storageRead.mockResolvedValue(new Fr(initialBalance)); + worldStateDB.storageWrite.mockImplementation((address: AztecAddress, slot: Fr) => Promise.resolve(computePublicDataTreeLeafSlot(address, slot).toBigInt()), ); @@ -1129,9 +1111,9 @@ describe('public_processor', () => { expect(failed).toHaveLength(1); expect(failed[0].error.message).toMatch(/Not enough balance/i); expect(publicExecutor.simulate).toHaveBeenCalledTimes(0); - expect(publicWorldStateDB.commit).toHaveBeenCalledTimes(0); - expect(publicWorldStateDB.rollbackToCommit).toHaveBeenCalledTimes(0); - expect(publicWorldStateDB.storageWrite).toHaveBeenCalledTimes(0); + expect(worldStateDB.commit).toHaveBeenCalledTimes(0); + expect(worldStateDB.rollbackToCommit).toHaveBeenCalledTimes(0); + expect(worldStateDB.storageWrite).toHaveBeenCalledTimes(0); }); }); }); diff --git a/yarn-project/simulator/src/public/public_processor.ts b/yarn-project/simulator/src/public/public_processor.ts index 84cffb190f0..7739c0a501d 100644 --- a/yarn-project/simulator/src/public/public_processor.ts +++ b/yarn-project/simulator/src/public/public_processor.ts @@ -3,9 +3,6 @@ import { NestedProcessReturnValues, type ProcessedTx, type ProcessedTxHandler, - PublicKernelType, - type PublicProvingRequest, - type SimulationError, Tx, type TxValidator, makeProcessedTx, @@ -17,7 +14,6 @@ import { FEE_JUICE_ADDRESS, type GlobalVariables, type Header, - type KernelCircuitPublicInputs, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, PROTOCOL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, PublicDataUpdateRequest, @@ -25,22 +21,16 @@ import { import { times } from '@aztec/foundation/collection'; import { createDebugLogger } from '@aztec/foundation/log'; import { Timer } from '@aztec/foundation/timer'; -import { type ProtocolArtifact } from '@aztec/noir-protocol-circuits-types'; import { ClassRegistererAddress } from '@aztec/protocol-contracts/class-registerer'; -import { - PublicExecutor, - type PublicStateDB, - type SimulationProvider, - computeFeePayerBalanceLeafSlot, - computeFeePayerBalanceStorageSlot, -} from '@aztec/simulator'; import { Attributes, type TelemetryClient, type Tracer, trackSpan } from '@aztec/telemetry-client'; import { type ContractDataSource } from '@aztec/types/contracts'; import { type MerkleTreeOperations } from '@aztec/world-state'; -import { type AbstractPhaseManager } from './abstract_phase_manager.js'; -import { PhaseManagerFactory } from './phase_manager_factory.js'; -import { ContractsDataSourcePublicDB, WorldStateDB, WorldStatePublicDB } from './public_db_sources.js'; +import { type SimulationProvider } from '../providers/index.js'; +import { EnqueuedCallsProcessor } from './enqueued_calls_processor.js'; +import { PublicExecutor } from './executor.js'; +import { computeFeePayerBalanceLeafSlot, computeFeePayerBalanceStorageSlot } from './fee_payment.js'; +import { WorldStateDB } from './public_db_sources.js'; import { RealPublicKernelCircuitSimulator } from './public_kernel.js'; import { type PublicKernelCircuitSimulator } from './public_kernel_circuit_simulator.js'; import { PublicProcessorMetrics } from './public_processor_metrics.js'; @@ -65,25 +55,18 @@ export class PublicProcessorFactory { public create(maybeHistoricalHeader: Header | undefined, globalVariables: GlobalVariables): PublicProcessor { const { merkleTree, telemetryClient } = this; const historicalHeader = maybeHistoricalHeader ?? merkleTree.getInitialHeader(); - const publicContractsDB = new ContractsDataSourcePublicDB(this.contractDataSource); - const worldStatePublicDB = new WorldStatePublicDB(merkleTree); - const worldStateDB = new WorldStateDB(merkleTree); - const publicExecutor = new PublicExecutor( - worldStatePublicDB, - publicContractsDB, - worldStateDB, - historicalHeader, - telemetryClient, - ); - return new PublicProcessor( + const worldStateDB = new WorldStateDB(merkleTree, this.contractDataSource); + const publicExecutor = new PublicExecutor(worldStateDB, historicalHeader, telemetryClient); + const publicKernelSimulator = new RealPublicKernelCircuitSimulator(this.simulator); + + return PublicProcessor.create( merkleTree, publicExecutor, - new RealPublicKernelCircuitSimulator(this.simulator), + publicKernelSimulator, globalVariables, historicalHeader, - publicContractsDB, - worldStatePublicDB, + worldStateDB, this.telemetryClient, ); } @@ -101,14 +84,44 @@ export class PublicProcessor { protected publicKernel: PublicKernelCircuitSimulator, protected globalVariables: GlobalVariables, protected historicalHeader: Header, - protected publicContractsDB: ContractsDataSourcePublicDB, - protected publicStateDB: PublicStateDB, + protected worldStateDB: WorldStateDB, + protected enqueuedCallsProcessor: EnqueuedCallsProcessor, telemetryClient: TelemetryClient, private log = createDebugLogger('aztec:sequencer:public-processor'), ) { this.metrics = new PublicProcessorMetrics(telemetryClient, 'PublicProcessor'); } + static create( + db: MerkleTreeOperations, + publicExecutor: PublicExecutor, + publicKernelSimulator: PublicKernelCircuitSimulator, + globalVariables: GlobalVariables, + historicalHeader: Header, + worldStateDB: WorldStateDB, + telemetryClient: TelemetryClient, + ) { + const enqueuedCallsProcessor = EnqueuedCallsProcessor.create( + db, + publicExecutor, + publicKernelSimulator, + globalVariables, + historicalHeader, + worldStateDB, + ); + + return new PublicProcessor( + db, + publicExecutor, + publicKernelSimulator, + globalVariables, + historicalHeader, + worldStateDB, + enqueuedCallsProcessor, + telemetryClient, + ); + } + get tracer(): Tracer { return this.metrics.tracer; } @@ -151,7 +164,7 @@ export class PublicProcessor { processedTx.finalPublicDataUpdateRequests = await this.createFinalDataUpdateRequests(processedTx); // Commit the state updates from this transaction - await this.publicStateDB.commit(); + await this.worldStateDB.commit(); validateProcessedTx(processedTx); // Re-validate the transaction @@ -217,14 +230,14 @@ export class PublicProcessor { const balance = existingBalanceWriteIndex > -1 ? finalPublicDataUpdateRequests[existingBalanceWriteIndex].newValue - : await this.publicStateDB.storageRead(feeJuiceAddress, balanceSlot); + : await this.worldStateDB.storageRead(feeJuiceAddress, balanceSlot); if (balance.lt(txFee)) { throw new Error(`Not enough balance for fee payer to pay for transaction (got ${balance} needs ${txFee})`); } const updatedBalance = balance.sub(txFee); - await this.publicStateDB.storageWrite(feeJuiceAddress, balanceSlot, updatedBalance); + await this.worldStateDB.storageWrite(feeJuiceAddress, balanceSlot, updatedBalance); finalPublicDataUpdateRequests[ existingBalanceWriteIndex > -1 ? existingBalanceWriteIndex : MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX @@ -238,69 +251,31 @@ export class PublicProcessor { })) private async processTxWithPublicCalls(tx: Tx): Promise<[ProcessedTx, NestedProcessReturnValues[]]> { const timer = new Timer(); - let returnValues: NestedProcessReturnValues[] = []; - const publicProvingRequests: PublicProvingRequest[] = []; - let phase: AbstractPhaseManager | undefined = PhaseManagerFactory.phaseFromTx( - tx, - this.db, - this.publicExecutor, - this.publicKernel, - this.globalVariables, - this.historicalHeader, - this.publicContractsDB, - this.publicStateDB, - ); - this.log.debug(`Beginning processing in phase ${phase?.phase} for tx ${tx.getTxHash()}`); - let publicKernelPublicInput = tx.data.toPublicKernelCircuitPublicInputs(); - let lastKernelArtifact: ProtocolArtifact = 'PrivateKernelTailToPublicArtifact'; // All txs with public calls must carry tail to public proofs - let finalKernelOutput: KernelCircuitPublicInputs | undefined; - let revertReason: SimulationError | undefined; - const gasUsed: ProcessedTx['gasUsed'] = {}; - let phaseCount = 0; - while (phase) { - phaseCount++; - const phaseTimer = new Timer(); - const output = await phase.handle(tx, publicKernelPublicInput, lastKernelArtifact); - - if (output.revertReason) { - this.metrics.recordRevertedPhase(phase.phase); - } else { - this.metrics.recordPhaseDuration(phase.phase, phaseTimer.ms()); - } - gasUsed[phase.phase] = output.gasUsed; - if (phase.phase === PublicKernelType.APP_LOGIC) { - returnValues = output.returnValues; - } - publicProvingRequests.push(...output.publicProvingRequests); - publicKernelPublicInput = output.publicKernelOutput; - lastKernelArtifact = output.lastKernelArtifact; - finalKernelOutput = output.finalKernelOutput; - revertReason ??= output.revertReason; - phase = PhaseManagerFactory.phaseFromOutput( - publicKernelPublicInput, - phase, - this.db, - this.publicExecutor, - this.publicKernel, - this.globalVariables, - this.historicalHeader, - this.publicContractsDB, - this.publicStateDB, - ); - } + const { tailKernelOutput, returnValues, revertReason, provingRequests, gasUsed, processedPhases } = + await this.enqueuedCallsProcessor.process(tx); - if (!finalKernelOutput) { + if (!tailKernelOutput) { this.metrics.recordFailedTx(); throw new Error('Final public kernel was not executed.'); } + processedPhases.forEach(phase => { + if (phase.revertReason) { + this.metrics.recordRevertedPhase(phase.phase); + } else { + this.metrics.recordPhaseDuration(phase.phase, phase.durationMs); + } + }); + this.metrics.recordClassRegistration( ...ContractClassRegisteredEvent.fromLogs(tx.unencryptedLogs.unrollLogs(), ClassRegistererAddress), ); + const phaseCount = processedPhases.length; this.metrics.recordTx(phaseCount, timer.ms()); - const processedTx = makeProcessedTx(tx, finalKernelOutput, publicProvingRequests, revertReason, gasUsed); + + const processedTx = makeProcessedTx(tx, tailKernelOutput, provingRequests, revertReason, gasUsed); return [processedTx, returnValues]; } } diff --git a/yarn-project/simulator/src/public/public_processor_metrics.ts b/yarn-project/simulator/src/public/public_processor_metrics.ts index 2c7f36d28f5..6ddbef9fc27 100644 --- a/yarn-project/simulator/src/public/public_processor_metrics.ts +++ b/yarn-project/simulator/src/public/public_processor_metrics.ts @@ -1,4 +1,4 @@ -import { type PublicKernelType } from '@aztec/circuit-types'; +import { type PublicKernelPhase } from '@aztec/circuit-types'; import { type ContractClassRegisteredEvent } from '@aztec/circuits.js'; import { Attributes, @@ -56,7 +56,7 @@ export class PublicProcessorMetrics { }); } - recordPhaseDuration(phaseName: PublicKernelType, durationMs: number) { + recordPhaseDuration(phaseName: PublicKernelPhase, durationMs: number) { this.phaseCount.add(1, { [Attributes.TX_PHASE_NAME]: phaseName, [Attributes.OK]: true }); this.phaseDuration.record(Math.ceil(durationMs), { [Attributes.TX_PHASE_NAME]: phaseName }); } @@ -75,7 +75,7 @@ export class PublicProcessorMetrics { }); } - recordRevertedPhase(phaseName: PublicKernelType) { + recordRevertedPhase(phaseName: PublicKernelPhase) { this.phaseCount.add(1, { [Attributes.TX_PHASE_NAME]: phaseName, [Attributes.OK]: false }); } diff --git a/yarn-project/simulator/src/public/setup_phase_manager.test.ts b/yarn-project/simulator/src/public/setup_phase_manager.test.ts deleted file mode 100644 index a765c59e984..00000000000 --- a/yarn-project/simulator/src/public/setup_phase_manager.test.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { type TreeInfo, mockTx } from '@aztec/circuit-types'; -import { GlobalVariables, Header } from '@aztec/circuits.js'; -import { type PublicExecutor } from '@aztec/simulator'; -import { type MerkleTreeOperations } from '@aztec/world-state'; - -import { it } from '@jest/globals'; -import { type MockProxy, mock } from 'jest-mock-extended'; - -import { type ContractsDataSourcePublicDB, type WorldStatePublicDB } from './public_db_sources.js'; -import { type PublicKernelCircuitSimulator } from './public_kernel_circuit_simulator.js'; -import { SetupPhaseManager } from './setup_phase_manager.js'; - -class TestSetupPhaseManager extends SetupPhaseManager { - override extractEnqueuedPublicCalls(tx: any) { - return super.extractEnqueuedPublicCalls(tx); - } -} - -describe('setup_phase_manager', () => { - let db: MockProxy; - let publicExecutor: MockProxy; - let publicContractsDB: MockProxy; - let publicWorldStateDB: MockProxy; - let publicKernel: MockProxy; - - let root: Buffer; - - let phaseManager: TestSetupPhaseManager; - - beforeEach(() => { - db = mock(); - publicExecutor = mock(); - publicContractsDB = mock(); - publicWorldStateDB = mock(); - - root = Buffer.alloc(32, 5); - db.getTreeInfo.mockResolvedValue({ root } as TreeInfo); - publicKernel = mock(); - phaseManager = new TestSetupPhaseManager( - db, - publicExecutor, - publicKernel, - GlobalVariables.empty(), - Header.empty(), - publicContractsDB, - publicWorldStateDB, - ); - }); - - it('does not extract non-revertible calls when none exist', function () { - const tx = mockTx(1, { numberOfNonRevertiblePublicCallRequests: 0, numberOfRevertiblePublicCallRequests: 0 }); - - const enqueuedNonRevertibleCalls = phaseManager.extractEnqueuedPublicCalls(tx); - - expect(enqueuedNonRevertibleCalls).toEqual([]); - }); -}); diff --git a/yarn-project/simulator/src/public/setup_phase_manager.ts b/yarn-project/simulator/src/public/setup_phase_manager.ts deleted file mode 100644 index 2e40f0ffeb0..00000000000 --- a/yarn-project/simulator/src/public/setup_phase_manager.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { PublicKernelType, type PublicProvingRequest, type Tx } from '@aztec/circuit-types'; -import { type GlobalVariables, type Header, type PublicKernelCircuitPublicInputs } from '@aztec/circuits.js'; -import { type ProtocolArtifact } from '@aztec/noir-protocol-circuits-types'; -import { type PublicExecutor, type PublicStateDB } from '@aztec/simulator'; -import { type MerkleTreeOperations } from '@aztec/world-state'; - -import { AbstractPhaseManager, makeAvmProvingRequest } from './abstract_phase_manager.js'; -import { type ContractsDataSourcePublicDB } from './public_db_sources.js'; -import { type PublicKernelCircuitSimulator } from './public_kernel_circuit_simulator.js'; - -/** - * The phase manager responsible for performing the fee preparation phase. - */ -export class SetupPhaseManager extends AbstractPhaseManager { - constructor( - db: MerkleTreeOperations, - publicExecutor: PublicExecutor, - publicKernel: PublicKernelCircuitSimulator, - globalVariables: GlobalVariables, - historicalHeader: Header, - protected publicContractsDB: ContractsDataSourcePublicDB, - protected publicStateDB: PublicStateDB, - phase: PublicKernelType = PublicKernelType.SETUP, - ) { - super(db, publicExecutor, publicKernel, globalVariables, historicalHeader, phase); - } - - override async handle( - tx: Tx, - previousPublicKernelOutput: PublicKernelCircuitPublicInputs, - previousCircuit: ProtocolArtifact, - ) { - this.log.verbose(`Processing tx ${tx.getTxHash()}`); - // TODO(#6464): Should we allow emitting contracts in the private setup phase? - // if so, this should only add contracts that were deployed during private app logic. - await this.publicContractsDB.addNewContracts(tx); - const { publicProvingInformation, kernelOutput, lastKernelArtifact, newUnencryptedLogs, revertReason, gasUsed } = - await this.processEnqueuedPublicCalls(tx, previousPublicKernelOutput, previousCircuit).catch( - // the abstract phase manager throws if simulation gives error in a non-revertible phase - async err => { - await this.publicStateDB.rollbackToCommit(); - throw err; - }, - ); - tx.unencryptedLogs.addFunctionLogs(newUnencryptedLogs); - await this.publicStateDB.checkpoint(); - - // Return a list of setup proving requests - const publicProvingRequests: PublicProvingRequest[] = publicProvingInformation.map(info => { - return makeAvmProvingRequest(info, PublicKernelType.SETUP); - }); - return { - publicProvingRequests, - publicKernelOutput: kernelOutput, - lastKernelArtifact, - revertReason, - returnValues: [], - gasUsed, - }; - } -} diff --git a/yarn-project/simulator/src/public/side_effect_trace.ts b/yarn-project/simulator/src/public/side_effect_trace.ts index 5d7b0a33a70..783e1c64ff6 100644 --- a/yarn-project/simulator/src/public/side_effect_trace.ts +++ b/yarn-project/simulator/src/public/side_effect_trace.ts @@ -14,7 +14,7 @@ import { LogHash, NoteHash, Nullifier, - type PublicCallRequest, + type PublicInnerCallRequest, ReadRequest, TreeLeafReadRequest, } from '@aztec/circuits.js'; @@ -53,7 +53,7 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface { private allUnencryptedLogs: UnencryptedL2Log[] = []; private unencryptedLogsHashes: LogHash[] = []; - private publicCallRequests: PublicCallRequest[] = []; + private publicCallRequests: PublicInnerCallRequest[] = []; private gotContractInstances: ContractInstanceWithAddress[] = []; @@ -183,10 +183,8 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface { const basicLogHash = Fr.fromBuffer(ulog.hash()); this.unencryptedLogs.push(ulog); this.allUnencryptedLogs.push(ulog); - // We want the length of the buffer output from function_l2_logs -> toBuffer to equal the stored log length in the kernels. - // The kernels store the length of the processed log as 4 bytes; thus for this length value to match the log length stored in the kernels, - // we need to add four to the length here. - // https://github.com/AztecProtocol/aztec-packages/issues/6578#issuecomment-2125003435 + // This length is for charging DA and is checked on-chain - has to be length of log preimage + 4 bytes. + // The .length call also has a +4 but that is unrelated this.unencryptedLogsHashes.push(new LogHash(basicLogHash, this.sideEffectCounter, new Fr(ulog.length + 4))); this.logger.debug(`NEW_UNENCRYPTED_LOG cnt: ${this.sideEffectCounter}`); this.incrementSideEffectCounter(); @@ -331,10 +329,5 @@ function createPublicExecutionRequest(avmEnvironment: AvmExecutionEnvironment): isDelegateCall: avmEnvironment.isDelegateCall, isStaticCall: avmEnvironment.isStaticCall, }); - return new PublicExecutionRequest( - avmEnvironment.address, - callContext, - // execution request does not contain AvmContextInputs prefix - avmEnvironment.getCalldataWithoutPrefix(), - ); + return new PublicExecutionRequest(avmEnvironment.address, callContext, avmEnvironment.calldata); } diff --git a/yarn-project/simulator/src/public/tail_phase_manager.ts b/yarn-project/simulator/src/public/tail_phase_manager.ts deleted file mode 100644 index 08b0916d30c..00000000000 --- a/yarn-project/simulator/src/public/tail_phase_manager.ts +++ /dev/null @@ -1,127 +0,0 @@ -import { type PublicKernelRequest, PublicKernelType, type Tx } from '@aztec/circuit-types'; -import { - type GlobalVariables, - type Header, - type KernelCircuitPublicInputs, - MAX_NULLIFIERS_PER_TX, - MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, - type PublicKernelCircuitPublicInputs, - PublicKernelTailCircuitPrivateInputs, - mergeAccumulatedData, -} from '@aztec/circuits.js'; -import { type ProtocolArtifact } from '@aztec/noir-protocol-circuits-types'; -import { type PublicExecutor, type PublicStateDB } from '@aztec/simulator'; -import { type MerkleTreeOperations } from '@aztec/world-state'; - -import { AbstractPhaseManager } from './abstract_phase_manager.js'; -import { type ContractsDataSourcePublicDB } from './public_db_sources.js'; -import { type PublicKernelCircuitSimulator } from './public_kernel_circuit_simulator.js'; - -export class TailPhaseManager extends AbstractPhaseManager { - constructor( - db: MerkleTreeOperations, - publicExecutor: PublicExecutor, - publicKernel: PublicKernelCircuitSimulator, - globalVariables: GlobalVariables, - historicalHeader: Header, - protected publicContractsDB: ContractsDataSourcePublicDB, - protected publicStateDB: PublicStateDB, - phase: PublicKernelType = PublicKernelType.TAIL, - ) { - super(db, publicExecutor, publicKernel, globalVariables, historicalHeader, phase); - } - - override async handle( - tx: Tx, - previousPublicKernelOutput: PublicKernelCircuitPublicInputs, - previousKernelArtifact: ProtocolArtifact, - ) { - this.log.verbose(`Processing tx ${tx.getTxHash()}`); - const [inputs, finalKernelOutput] = await this.simulate(previousPublicKernelOutput, previousKernelArtifact).catch( - // the abstract phase manager throws if simulation gives error in non-revertible phase - async err => { - await this.publicStateDB.rollbackToCommit(); - throw err; - }, - ); - - // Return a tail proving request - const kernelRequest: PublicKernelRequest = { - type: PublicKernelType.TAIL, - inputs: inputs, - }; - - return { - publicProvingRequests: [kernelRequest], - publicKernelOutput: previousPublicKernelOutput, - lastKernelArtifact: 'PublicKernelTailArtifact' as ProtocolArtifact, - finalKernelOutput, - returnValues: [], - }; - } - - private async simulate( - previousOutput: PublicKernelCircuitPublicInputs, - previousKernelArtifact: ProtocolArtifact, - ): Promise<[PublicKernelTailCircuitPrivateInputs, KernelCircuitPublicInputs]> { - const inputs = await this.buildPrivateInputs(previousOutput, previousKernelArtifact); - // We take a deep copy (clone) of these to pass to the prover - return [inputs.clone(), await this.publicKernel.publicKernelCircuitTail(inputs)]; - } - - private async buildPrivateInputs( - previousOutput: PublicKernelCircuitPublicInputs, - previousKernelArtifact: ProtocolArtifact, - ) { - const previousKernel = this.getPreviousKernelData(previousOutput, previousKernelArtifact); - - const { validationRequests, endNonRevertibleData: nonRevertibleData, end: revertibleData } = previousOutput; - - const noteHashReadRequestHints = await this.hintsBuilder.getNoteHashReadRequestsHints( - validationRequests.noteHashReadRequests, - ); - - const pendingNullifiers = mergeAccumulatedData( - nonRevertibleData.nullifiers, - revertibleData.nullifiers, - MAX_NULLIFIERS_PER_TX, - ); - - const nullifierReadRequestHints = await this.hintsBuilder.getNullifierReadRequestHints( - validationRequests.nullifierReadRequests, - pendingNullifiers, - ); - - const nullifierNonExistentReadRequestHints = await this.hintsBuilder.getNullifierNonExistentReadRequestHints( - validationRequests.nullifierNonExistentReadRequests, - pendingNullifiers, - ); - - const l1ToL2MsgReadRequestHints = await this.hintsBuilder.getL1ToL2MsgReadRequestsHints( - validationRequests.l1ToL2MsgReadRequests, - ); - - const pendingPublicDataWrites = mergeAccumulatedData( - nonRevertibleData.publicDataUpdateRequests, - revertibleData.publicDataUpdateRequests, - MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, - ); - - const publicDataHints = await this.hintsBuilder.getPublicDataHints( - validationRequests.publicDataReads, - pendingPublicDataWrites, - ); - - const currentState = await this.db.getStateReference(); - - return new PublicKernelTailCircuitPrivateInputs( - previousKernel, - noteHashReadRequestHints, - nullifierReadRequestHints, - nullifierNonExistentReadRequestHints, - l1ToL2MsgReadRequestHints, - publicDataHints, - currentState.partial, - ); - } -} diff --git a/yarn-project/simulator/src/public/teardown_phase_manager.ts b/yarn-project/simulator/src/public/teardown_phase_manager.ts deleted file mode 100644 index 03401e33dbb..00000000000 --- a/yarn-project/simulator/src/public/teardown_phase_manager.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { PublicKernelType, type PublicProvingRequest, type Tx } from '@aztec/circuit-types'; -import { - type Fr, - type Gas, - type GlobalVariables, - type Header, - type PublicKernelCircuitPublicInputs, -} from '@aztec/circuits.js'; -import { type ProtocolArtifact } from '@aztec/noir-protocol-circuits-types'; -import { type PublicExecutor, type PublicStateDB } from '@aztec/simulator'; -import { type MerkleTreeOperations } from '@aztec/world-state'; - -import { inspect } from 'util'; - -import { AbstractPhaseManager, makeAvmProvingRequest } from './abstract_phase_manager.js'; -import { type ContractsDataSourcePublicDB } from './public_db_sources.js'; -import { type PublicKernelCircuitSimulator } from './public_kernel_circuit_simulator.js'; - -/** - * The phase manager responsible for performing the fee preparation phase. - */ -export class TeardownPhaseManager extends AbstractPhaseManager { - constructor( - db: MerkleTreeOperations, - publicExecutor: PublicExecutor, - publicKernel: PublicKernelCircuitSimulator, - globalVariables: GlobalVariables, - historicalHeader: Header, - protected publicContractsDB: ContractsDataSourcePublicDB, - protected publicStateDB: PublicStateDB, - phase: PublicKernelType = PublicKernelType.TEARDOWN, - ) { - super(db, publicExecutor, publicKernel, globalVariables, historicalHeader, phase); - } - - override async handle( - tx: Tx, - previousPublicKernelOutput: PublicKernelCircuitPublicInputs, - previousKernelArtifact: ProtocolArtifact, - ) { - this.log.verbose(`Processing tx ${tx.getTxHash()}`); - const { publicProvingInformation, kernelOutput, lastKernelArtifact, newUnencryptedLogs, revertReason, gasUsed } = - await this.processEnqueuedPublicCalls(tx, previousPublicKernelOutput, previousKernelArtifact).catch( - // the abstract phase manager throws if simulation gives error in a non-revertible phase - async err => { - await this.publicStateDB.rollbackToCommit(); - throw err; - }, - ); - if (revertReason) { - await this.publicStateDB.rollbackToCheckpoint(); - tx.filterRevertedLogs(kernelOutput); - } else { - // TODO(#6464): Should we allow emitting contracts in the public teardown phase? - // if so, we should insert them here - tx.unencryptedLogs.addFunctionLogs(newUnencryptedLogs); - } - - // Return a list of teardown proving requests - const publicProvingRequests: PublicProvingRequest[] = publicProvingInformation.map(info => { - return makeAvmProvingRequest(info, PublicKernelType.TEARDOWN); - }); - return { - publicProvingRequests, - publicKernelOutput: kernelOutput, - lastKernelArtifact, - revertReason, - returnValues: [], - gasUsed, - }; - } - - protected override getTransactionFee(tx: Tx, previousPublicKernelOutput: PublicKernelCircuitPublicInputs): Fr { - const gasSettings = tx.data.constants.txContext.gasSettings; - const gasFees = this.globalVariables.gasFees; - // No need to add teardown limits since they are already included in end.gasUsed - const gasUsed = previousPublicKernelOutput.end.gasUsed.add(previousPublicKernelOutput.endNonRevertibleData.gasUsed); - const txFee = gasSettings.inclusionFee.add(gasUsed.computeFee(gasFees)); - this.log.debug(`Computed tx fee`, { txFee, gasUsed: inspect(gasUsed), gasFees: inspect(gasFees) }); - return txFee; - } - - protected override getAvailableGas(tx: Tx, _previousPublicKernelOutput: PublicKernelCircuitPublicInputs): Gas { - return tx.data.constants.txContext.gasSettings.getTeardownLimits(); - } -} diff --git a/yarn-project/telemetry-client/src/attributes.ts b/yarn-project/telemetry-client/src/attributes.ts index 34ad82007fd..4a320161d69 100644 --- a/yarn-project/telemetry-client/src/attributes.ts +++ b/yarn-project/telemetry-client/src/attributes.ts @@ -48,6 +48,10 @@ export const BLOCK_CANDIDATE_TXS_COUNT = 'aztec.block.candidate_txs_count'; export const BLOCK_TXS_COUNT = 'aztec.block.txs_count'; /** The block size (power of 2) */ export const BLOCK_SIZE = 'aztec.block.size'; +/** How many blocks are included in this epoch */ +export const EPOCH_SIZE = 'aztec.epoch.size'; +/** The epoch number */ +export const EPOCH_NUMBER = 'aztec.epoch.number'; /** The tx hash */ export const TX_HASH = 'aztec.tx.hash'; /** Generic attribute representing whether the action was successful or not */ diff --git a/yarn-project/txe/src/oracle/txe_oracle.ts b/yarn-project/txe/src/oracle/txe_oracle.ts index 93a8bcc59f2..a2fdb9df74d 100644 --- a/yarn-project/txe/src/oracle/txe_oracle.ts +++ b/yarn-project/txe/src/oracle/txe_oracle.ts @@ -51,7 +51,6 @@ import { Timer } from '@aztec/foundation/timer'; import { type KeyStore } from '@aztec/key-store'; import { ContractDataOracle } from '@aztec/pxe'; import { - ContractsDataSourcePublicDB, ExecutionError, type ExecutionNoteCache, type MessageLoadOracleInputs, @@ -60,7 +59,6 @@ import { type PackedValuesCache, PublicExecutor, type TypedOracle, - WorldStateDB, acvm, createSimulationError, extractCallStack, @@ -74,7 +72,7 @@ import { MerkleTreeSnapshotOperationsFacade, type MerkleTrees } from '@aztec/wor import { type TXEDatabase } from '../util/txe_database.js'; import { TXEPublicContractDataSource } from '../util/txe_public_contract_data_source.js'; -import { TXEPublicStateDB } from '../util/txe_public_state_db.js'; +import { TXEWorldStateDB } from '../util/txe_world_state_db.js'; export class TXE implements TypedOracle { private blockNumber = 0; @@ -82,6 +80,7 @@ export class TXE implements TypedOracle { private contractAddress: AztecAddress; private msgSender: AztecAddress; private functionSelector = FunctionSelector.fromField(new Fr(0)); + private isStaticCall = false; // This will hold the _real_ calldata. That is, the one without the PublicContextInputs. // TODO: Remove this comment once PublicContextInputs are removed. private calldata: Fr[] = []; @@ -132,9 +131,7 @@ export class TXE implements TypedOracle { } getCalldata() { - // TODO: Remove this once PublicContextInputs are removed. - const inputs = this.getPublicContextInputs(); - return [...inputs.toFields(), ...this.calldata]; + return this.calldata; } setMsgSender(msgSender: Fr) { @@ -215,17 +212,6 @@ export class TXE implements TypedOracle { return inputs; } - getPublicContextInputs() { - const inputs = { - calldataLength: new Fr(this.calldata.length), - isStaticCall: false, - toFields: function () { - return [this.calldataLength, new Fr(this.isStaticCall)]; - }, - }; - return inputs; - } - async avmOpcodeNullifierExists(innerNullifier: Fr, targetAddress: AztecAddress): Promise { const nullifier = siloNullifier(targetAddress, innerNullifier!); const db = this.trees.asLatest(); @@ -283,6 +269,14 @@ export class TXE implements TypedOracle { return Promise.resolve(this.contractAddress); } + setIsStaticCall(isStatic: boolean) { + this.isStaticCall = isStatic; + } + + getIsStaticCall() { + return this.isStaticCall; + } + getRandomField() { return Fr.random(); } @@ -717,10 +711,9 @@ export class TXE implements TypedOracle { const header = Header.empty(); header.state = await this.trees.getStateReference(true); header.globalVariables.blockNumber = new Fr(await this.getBlockNumber()); + const executor = new PublicExecutor( - new TXEPublicStateDB(this), - new ContractsDataSourcePublicDB(new TXEPublicContractDataSource(this)), - new WorldStateDB(this.trees.asLatest()), + new TXEWorldStateDB(this.trees.asLatest(), new TXEPublicContractDataSource(this)), header, new NoopTelemetryClient(), ); diff --git a/yarn-project/txe/src/txe_service/txe_service.ts b/yarn-project/txe/src/txe_service/txe_service.ts index 5d8edd2800b..ea4b2c0088f 100644 --- a/yarn-project/txe/src/txe_service/txe_service.ts +++ b/yarn-project/txe/src/txe_service/txe_service.ts @@ -59,11 +59,6 @@ export class TXEService { return toForeignCallResult(inputs.toFields().map(toSingle)); } - getPublicContextInputs() { - const inputs = (this.typedOracle as TXE).getPublicContextInputs(); - return toForeignCallResult(inputs.toFields().map(toSingle)); - } - async advanceBlocksBy(blocks: ForeignCallSingle) { const nBlocks = fromSingle(blocks).toNumber(); this.logger.debug(`time traveling ${nBlocks} blocks`); @@ -313,6 +308,16 @@ export class TXEService { return toForeignCallResult([toSingle(functionSelector.toField())]); } + setIsStaticCall(isStaticCall: ForeignCallSingle) { + (this.typedOracle as TXE).setIsStaticCall(fromSingle(isStaticCall).toBool()); + return toForeignCallResult([]); + } + + avmOpcodeIsStaticCall() { + const isStaticCall = (this.typedOracle as TXE).getIsStaticCall(); + return toForeignCallResult([toSingle(new Fr(isStaticCall ? 1 : 0))]); + } + async avmOpcodeChainId() { const chainId = await (this.typedOracle as TXE).getChainId(); return toForeignCallResult([toSingle(chainId)]); diff --git a/yarn-project/txe/src/util/txe_public_state_db.ts b/yarn-project/txe/src/util/txe_public_state_db.ts deleted file mode 100644 index 62bdbaf7e5b..00000000000 --- a/yarn-project/txe/src/util/txe_public_state_db.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { MerkleTreeId } from '@aztec/circuit-types'; -import { - type AztecAddress, - Fr, - PUBLIC_DATA_SUBTREE_HEIGHT, - PublicDataTreeLeaf, - type PublicDataTreeLeafPreimage, -} from '@aztec/circuits.js'; -import { computePublicDataTreeLeafSlot } from '@aztec/circuits.js/hash'; -import { type PublicStateDB } from '@aztec/simulator'; - -import { type TXE } from '../oracle/txe_oracle.js'; - -export class TXEPublicStateDB implements PublicStateDB { - constructor(private txeOracle: TXE) {} - - async storageRead(contract: AztecAddress, slot: Fr): Promise { - const db = this.txeOracle.getTrees().asLatest(); - const leafSlot = computePublicDataTreeLeafSlot(contract, slot).toBigInt(); - - const lowLeafResult = await db.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot); - - let value = Fr.ZERO; - if (lowLeafResult && lowLeafResult.alreadyPresent) { - const preimage = (await db.getLeafPreimage( - MerkleTreeId.PUBLIC_DATA_TREE, - lowLeafResult.index, - )) as PublicDataTreeLeafPreimage; - value = preimage.value; - } - return value; - } - - async storageWrite(contract: AztecAddress, slot: Fr, newValue: Fr): Promise { - const db = this.txeOracle.getTrees().asLatest(); - - await db.batchInsert( - MerkleTreeId.PUBLIC_DATA_TREE, - [new PublicDataTreeLeaf(computePublicDataTreeLeafSlot(contract, slot), newValue).toBuffer()], - PUBLIC_DATA_SUBTREE_HEIGHT, - ); - return newValue.toBigInt(); - } - - checkpoint(): Promise { - return Promise.resolve(); - } - rollbackToCheckpoint(): Promise { - throw new Error('Cannot rollback'); - } - commit(): Promise { - return Promise.resolve(); - } - rollbackToCommit(): Promise { - throw new Error('Cannot rollback'); - } -} diff --git a/yarn-project/txe/src/util/txe_world_state_db.ts b/yarn-project/txe/src/util/txe_world_state_db.ts new file mode 100644 index 00000000000..338962fefd9 --- /dev/null +++ b/yarn-project/txe/src/util/txe_world_state_db.ts @@ -0,0 +1,55 @@ +import { MerkleTreeId, type MerkleTreeOperations } from '@aztec/circuit-types'; +import { + type AztecAddress, + Fr, + PUBLIC_DATA_SUBTREE_HEIGHT, + PublicDataTreeLeaf, + type PublicDataTreeLeafPreimage, +} from '@aztec/circuits.js'; +import { computePublicDataTreeLeafSlot } from '@aztec/circuits.js/hash'; +import { WorldStateDB } from '@aztec/simulator'; +import { type ContractDataSource } from '@aztec/types/contracts'; + +export class TXEWorldStateDB extends WorldStateDB { + constructor(private merkleDb: MerkleTreeOperations, dataSource: ContractDataSource) { + super(merkleDb, dataSource); + } + + override async storageRead(contract: AztecAddress, slot: Fr): Promise { + const leafSlot = computePublicDataTreeLeafSlot(contract, slot).toBigInt(); + + const lowLeafResult = await this.merkleDb.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot); + + let value = Fr.ZERO; + if (lowLeafResult && lowLeafResult.alreadyPresent) { + const preimage = (await this.merkleDb.getLeafPreimage( + MerkleTreeId.PUBLIC_DATA_TREE, + lowLeafResult.index, + )) as PublicDataTreeLeafPreimage; + value = preimage.value; + } + return value; + } + + override async storageWrite(contract: AztecAddress, slot: Fr, newValue: Fr): Promise { + await this.merkleDb.batchInsert( + MerkleTreeId.PUBLIC_DATA_TREE, + [new PublicDataTreeLeaf(computePublicDataTreeLeafSlot(contract, slot), newValue).toBuffer()], + PUBLIC_DATA_SUBTREE_HEIGHT, + ); + return newValue.toBigInt(); + } + + override checkpoint(): Promise { + return Promise.resolve(); + } + override rollbackToCheckpoint(): Promise { + throw new Error('Cannot rollback'); + } + override commit(): Promise { + return Promise.resolve(); + } + override rollbackToCommit(): Promise { + throw new Error('Cannot rollback'); + } +} diff --git a/yarn-project/types/src/abi/contract_artifact.ts b/yarn-project/types/src/abi/contract_artifact.ts index 5756ab305a7..c06a4d3a7b3 100644 --- a/yarn-project/types/src/abi/contract_artifact.ts +++ b/yarn-project/types/src/abi/contract_artifact.ts @@ -19,7 +19,6 @@ import { AZTEC_INTERNAL_ATTRIBUTE, AZTEC_PRIVATE_ATTRIBUTE, AZTEC_PUBLIC_ATTRIBUTE, - AZTEC_PUBLIC_VM_ATTRIBUTE, AZTEC_VIEW_ATTRIBUTE, type NoirCompiledContract, } from '../noir/index.js'; @@ -189,10 +188,7 @@ function generateFunctionArtifact(fn: NoirCompiledContractFunction, contract: No function getFunctionType(fn: NoirCompiledContractFunction): FunctionType { if (fn.custom_attributes.includes(AZTEC_PRIVATE_ATTRIBUTE)) { return FunctionType.PRIVATE; - } else if ( - fn.custom_attributes.includes(AZTEC_PUBLIC_ATTRIBUTE) || - fn.custom_attributes.includes(AZTEC_PUBLIC_VM_ATTRIBUTE) - ) { + } else if (fn.custom_attributes.includes(AZTEC_PUBLIC_ATTRIBUTE)) { return FunctionType.PUBLIC; } else if (fn.is_unconstrained) { return FunctionType.UNCONSTRAINED; diff --git a/yarn-project/types/src/contracts/protocol_contract_addresses.ts b/yarn-project/types/src/contracts/protocol_contract_addresses.ts index f031a8658f5..ddc1f67e03d 100644 --- a/yarn-project/types/src/contracts/protocol_contract_addresses.ts +++ b/yarn-project/types/src/contracts/protocol_contract_addresses.ts @@ -4,6 +4,5 @@ export type ProtocolContractAddresses = { classRegisterer: AztecAddress; feeJuice: AztecAddress; instanceDeployer: AztecAddress; - keyRegistry: AztecAddress; multiCallEntrypoint: AztecAddress; }; diff --git a/yarn-project/types/src/noir/index.ts b/yarn-project/types/src/noir/index.ts index a35b0615372..ca8d028bc22 100644 --- a/yarn-project/types/src/noir/index.ts +++ b/yarn-project/types/src/noir/index.ts @@ -7,12 +7,11 @@ import { type DebugInfo, } from '@aztec/foundation/abi'; -export const AZTEC_PRIVATE_ATTRIBUTE = 'aztec(private)'; -export const AZTEC_PUBLIC_ATTRIBUTE = 'aztec(public)'; -export const AZTEC_PUBLIC_VM_ATTRIBUTE = 'aztec(public-vm)'; -export const AZTEC_INTERNAL_ATTRIBUTE = 'aztec(internal)'; -export const AZTEC_INITIALIZER_ATTRIBUTE = 'aztec(initializer)'; -export const AZTEC_VIEW_ATTRIBUTE = 'aztec(view)'; +export const AZTEC_PRIVATE_ATTRIBUTE = 'private'; +export const AZTEC_PUBLIC_ATTRIBUTE = 'public'; +export const AZTEC_INTERNAL_ATTRIBUTE = 'internal'; +export const AZTEC_INITIALIZER_ATTRIBUTE = 'initializer'; +export const AZTEC_VIEW_ATTRIBUTE = 'view'; /** * An error could be a custom error of any regular type or a formatted string error. diff --git a/yarn-project/validator-client/src/duties/validation_service.ts b/yarn-project/validator-client/src/duties/validation_service.ts index 3a4ec7e8c6d..55699c13d51 100644 --- a/yarn-project/validator-client/src/duties/validation_service.ts +++ b/yarn-project/validator-client/src/duties/validation_service.ts @@ -1,5 +1,6 @@ -import { BlockAttestation, BlockProposal, type TxHash } from '@aztec/circuit-types'; +import { BlockAttestation, BlockProposal, ConsensusPayload, type TxHash } from '@aztec/circuit-types'; import { type Header } from '@aztec/circuits.js'; +import { Buffer32 } from '@aztec/foundation/buffer'; import { keccak256 } from '@aztec/foundation/crypto'; import { type Fr } from '@aztec/foundation/fields'; @@ -18,9 +19,9 @@ export class ValidationService { * @returns A block proposal signing the above information (not the current implementation!!!) */ createBlockProposal(header: Header, archive: Fr, txs: TxHash[]): Promise { - const payloadSigner = (payload: Buffer) => this.keyStore.sign(payload); + const payloadSigner = (payload: Buffer32) => this.keyStore.signMessage(payload); - return BlockProposal.createProposalFromSigner(header, archive, txs, payloadSigner); + return BlockProposal.createProposalFromSigner(new ConsensusPayload(header, archive, txs), payloadSigner); } /** @@ -35,8 +36,8 @@ export class ValidationService { async attestToProposal(proposal: BlockProposal): Promise { // TODO(https://github.com/AztecProtocol/aztec-packages/issues/7961): check that the current validator is correct - const buf = keccak256(proposal.getPayload()); - const sig = await this.keyStore.sign(buf); - return new BlockAttestation(proposal.header, proposal.archive, proposal.txs, sig); + const buf = Buffer32.fromBuffer(keccak256(proposal.getPayload())); + const sig = await this.keyStore.signMessage(buf); + return new BlockAttestation(proposal.payload, sig); } } diff --git a/yarn-project/validator-client/src/errors/validator.error.ts b/yarn-project/validator-client/src/errors/validator.error.ts index 5cc3929962e..73c3eaf2729 100644 --- a/yarn-project/validator-client/src/errors/validator.error.ts +++ b/yarn-project/validator-client/src/errors/validator.error.ts @@ -2,7 +2,13 @@ import { type TxHash } from '@aztec/circuit-types/tx_hash'; export class ValidatorError extends Error { constructor(message: string) { - super(message); + super(`Validator Error: ${message}`); + } +} + +export class InvalidValidatorPrivateKeyError extends ValidatorError { + constructor() { + super('Invalid validator private key provided'); } } diff --git a/yarn-project/validator-client/src/key_store/interface.ts b/yarn-project/validator-client/src/key_store/interface.ts index d55921b6dca..2b96c90377b 100644 --- a/yarn-project/validator-client/src/key_store/interface.ts +++ b/yarn-project/validator-client/src/key_store/interface.ts @@ -1,9 +1,18 @@ -import { type Signature } from '@aztec/circuit-types'; +import { type Buffer32 } from '@aztec/foundation/buffer'; +import { type Signature } from '@aztec/foundation/eth-signature'; /** Key Store * * A keystore interface that can be replaced with a local keystore / remote signer service */ export interface ValidatorKeyStore { - sign(message: Buffer): Promise; + sign(message: Buffer32): Promise; + /** + * Flavor of sign message that followed EIP-712 eth signed message prefix + * Note: this is only required when we are using ecdsa signatures over secp256k1 + * + * @param message - The message to sign. + * @returns The signature. + */ + signMessage(message: Buffer32): Promise; } diff --git a/yarn-project/validator-client/src/key_store/local_key_store.ts b/yarn-project/validator-client/src/key_store/local_key_store.ts index 220b62fe409..736ee361a45 100644 --- a/yarn-project/validator-client/src/key_store/local_key_store.ts +++ b/yarn-project/validator-client/src/key_store/local_key_store.ts @@ -1,6 +1,6 @@ -import { Signature } from '@aztec/circuit-types'; - -import { type PrivateKeyAccount, privateKeyToAccount } from 'viem/accounts'; +import { type Buffer32 } from '@aztec/foundation/buffer'; +import { Secp256k1Signer } from '@aztec/foundation/crypto'; +import { type Signature } from '@aztec/foundation/eth-signature'; import { type ValidatorKeyStore } from './interface.js'; @@ -10,10 +10,10 @@ import { type ValidatorKeyStore } from './interface.js'; * An implementation of the Key store using an in memory private key. */ export class LocalKeyStore implements ValidatorKeyStore { - private signer: PrivateKeyAccount; + private signer: Secp256k1Signer; - constructor(privateKey: string) { - this.signer = privateKeyToAccount(privateKey as `0x{string}`); + constructor(privateKey: Buffer32) { + this.signer = new Secp256k1Signer(privateKey); } /** @@ -22,10 +22,15 @@ export class LocalKeyStore implements ValidatorKeyStore { * @param messageBuffer - The message buffer to sign * @return signature */ - public async sign(digestBuffer: Buffer): Promise { - const digest: `0x${string}` = `0x${digestBuffer.toString('hex')}`; - const signature = await this.signer.signMessage({ message: { raw: digest } }); + public sign(digest: Buffer32): Promise { + const signature = this.signer.sign(digest); + + return Promise.resolve(signature); + } - return Signature.from0xString(signature); + public signMessage(message: Buffer32): Promise { + // Sign message adds eth sign prefix and hashes before signing + const signature = this.signer.signMessage(message); + return Promise.resolve(signature); } } diff --git a/yarn-project/validator-client/src/validator.test.ts b/yarn-project/validator-client/src/validator.test.ts index 4802656e5ce..fc870184fec 100644 --- a/yarn-project/validator-client/src/validator.test.ts +++ b/yarn-project/validator-client/src/validator.test.ts @@ -12,10 +12,16 @@ import { type MockProxy, mock } from 'jest-mock-extended'; import { type PrivateKeyAccount, generatePrivateKey, privateKeyToAccount } from 'viem/accounts'; import { makeBlockProposal } from '../../circuit-types/src/p2p/mocks.js'; -import { AttestationTimeoutError, TransactionsNotAvailableError } from './errors/validator.error.js'; +import { type ValidatorClientConfig } from './config.js'; +import { + AttestationTimeoutError, + InvalidValidatorPrivateKeyError, + TransactionsNotAvailableError, +} from './errors/validator.error.js'; import { ValidatorClient } from './validator.js'; describe('ValidationService', () => { + let config: ValidatorClientConfig; let validatorClient: ValidatorClient; let p2pClient: MockProxy; let validatorAccount: PrivateKeyAccount; @@ -27,7 +33,7 @@ describe('ValidationService', () => { const validatorPrivateKey = generatePrivateKey(); validatorAccount = privateKeyToAccount(validatorPrivateKey); - const config = { + config = { validatorPrivateKey: validatorPrivateKey, attestationPoolingIntervalMs: 1000, attestationWaitTimeoutMs: 1000, @@ -36,6 +42,11 @@ describe('ValidationService', () => { validatorClient = ValidatorClient.new(config, p2pClient); }); + it('Should throw error if an invalid private key is provided', () => { + config.validatorPrivateKey = '0x1234567890123456789'; + expect(() => ValidatorClient.new(config, p2pClient)).toThrow(InvalidValidatorPrivateKeyError); + }); + it('Should create a valid block proposal', async () => { const header = makeHeader(); const archive = Fr.random(); @@ -46,17 +57,17 @@ describe('ValidationService', () => { expect(blockProposal).toBeDefined(); const validatorAddress = EthAddress.fromString(validatorAccount.address); - expect(await blockProposal.getSender()).toEqual(validatorAddress); + expect(blockProposal.getSender()).toEqual(validatorAddress); }); it('Should a timeout if we do not collect enough attestations in time', async () => { - const proposal = await makeBlockProposal(); + const proposal = makeBlockProposal(); await expect(validatorClient.collectAttestations(proposal, 2)).rejects.toThrow(AttestationTimeoutError); }); it('Should throw an error if the transactions are not available', async () => { - const proposal = await makeBlockProposal(); + const proposal = makeBlockProposal(); // mock the p2pClient.getTxStatus to return undefined for all transactions p2pClient.getTxStatus.mockImplementation(() => undefined); diff --git a/yarn-project/validator-client/src/validator.ts b/yarn-project/validator-client/src/validator.ts index 1c8442ef367..a32a7d4f9e7 100644 --- a/yarn-project/validator-client/src/validator.ts +++ b/yarn-project/validator-client/src/validator.ts @@ -1,5 +1,6 @@ import { type BlockAttestation, type BlockProposal, type TxHash } from '@aztec/circuit-types'; import { type Header } from '@aztec/circuits.js'; +import { Buffer32 } from '@aztec/foundation/buffer'; import { type Fr } from '@aztec/foundation/fields'; import { createDebugLogger } from '@aztec/foundation/log'; import { sleep } from '@aztec/foundation/sleep'; @@ -7,7 +8,11 @@ import { type P2P } from '@aztec/p2p'; import { type ValidatorClientConfig } from './config.js'; import { ValidationService } from './duties/validation_service.js'; -import { AttestationTimeoutError, TransactionsNotAvailableError } from './errors/validator.error.js'; +import { + AttestationTimeoutError, + InvalidValidatorPrivateKeyError, + TransactionsNotAvailableError, +} from './errors/validator.error.js'; import { type ValidatorKeyStore } from './key_store/interface.js'; import { LocalKeyStore } from './key_store/local_key_store.js'; @@ -42,7 +47,12 @@ export class ValidatorClient implements Validator { } static new(config: ValidatorClientConfig, p2pClient: P2P) { - const localKeyStore = new LocalKeyStore(config.validatorPrivateKey); + if (!config.validatorPrivateKey) { + throw new InvalidValidatorPrivateKeyError(); + } + + const privateKey = validatePrivateKey(config.validatorPrivateKey); + const localKeyStore = new LocalKeyStore(privateKey); const validator = new ValidatorClient( localKeyStore, @@ -79,7 +89,9 @@ export class ValidatorClient implements Validator { } return undefined; } - this.log.debug(`Transactions available, attesting to proposal with ${proposal.txs.length} transactions`); + this.log.debug( + `Transactions available, attesting to proposal with ${proposal.payload.txHashes.length} transactions`, + ); // If the above function does not throw an error, then we can attest to the proposal return this.validationService.attestToProposal(proposal); @@ -94,7 +106,7 @@ export class ValidatorClient implements Validator { * @param proposal - The proposal to attest to */ async ensureTransactionsAreAvailable(proposal: BlockProposal) { - const txHashes: TxHash[] = proposal.txs; + const txHashes: TxHash[] = proposal.payload.txHashes; const transactionStatuses = await Promise.all(txHashes.map(txHash => this.p2pClient.getTxStatus(txHash))); const missingTxs = txHashes.filter((_, index) => !['pending', 'mined'].includes(transactionStatuses[index] ?? '')); @@ -126,7 +138,7 @@ export class ValidatorClient implements Validator { numberOfRequiredAttestations: number, ): Promise { // Wait and poll the p2pClient's attestation pool for this block until we have enough attestations - const slot = proposal.header.globalVariables.slotNumber.toBigInt(); + const slot = proposal.payload.header.globalVariables.slotNumber.toBigInt(); this.log.info(`Waiting for ${numberOfRequiredAttestations} attestations for slot: ${slot}`); const myAttestation = await this.validationService.attestToProposal(proposal); @@ -154,3 +166,11 @@ export class ValidatorClient implements Validator { } } } + +function validatePrivateKey(privateKey: string): Buffer32 { + try { + return Buffer32.fromString(privateKey); + } catch (error) { + throw new InvalidValidatorPrivateKeyError(); + } +} diff --git a/yarn-project/world-state/scripts/build.sh b/yarn-project/world-state/scripts/build.sh index 9ac0f1c305a..17d34d494be 100755 --- a/yarn-project/world-state/scripts/build.sh +++ b/yarn-project/world-state/scripts/build.sh @@ -5,15 +5,16 @@ set -e cd "$(dirname "$0")/.." # relatiev path from the directory containing package.json -WORLD_STATE_LIB_PATH=../../barretenberg/cpp/build/bin/world_state_napi.node +WORLD_STATE_LIB_PATH=../../barretenberg/cpp/build-pic/lib/world_state_napi.node +PRESET=${PRESET:-clang16-pic} build_addon() { - (cd ../../barretenberg/cpp; cmake --preset clang16-pic -DCMAKE_BUILD_TYPE=RelWithAssert; cmake --build --preset clang16-pic --target world_state_napi; echo $PWD; mkdir -p build/bin; cp ./build-pic/lib/world_state_napi.node ./build/bin/world_state_napi.node) + (cd ../../barretenberg/cpp; cmake --preset $PRESET -DCMAKE_BUILD_TYPE=RelWithAssert; cmake --build --preset $PRESET --target world_state_napi; echo $PWD; mkdir -p build/bin; cp ./build-pic/lib/world_state_napi.node ./build/bin/world_state_napi.node) } cp_addon_lib() { if [ -f $WORLD_STATE_LIB_PATH ]; then - echo "Copying world_state_napi.node to build directory" + echo "Copying $(realpath $WORLD_STATE_LIB_PATH) to build directory" rm -rf build mkdir build cp $WORLD_STATE_LIB_PATH build/world_state_napi.node diff --git a/yarn-project/world-state/src/synchronizer/index.ts b/yarn-project/world-state/src/synchronizer/index.ts index 4c7128617fa..b0f54963f8f 100644 --- a/yarn-project/world-state/src/synchronizer/index.ts +++ b/yarn-project/world-state/src/synchronizer/index.ts @@ -1,3 +1,2 @@ export * from './server_world_state_synchronizer.js'; -export * from './world_state_synchronizer.js'; export * from './factory.js'; diff --git a/yarn-project/world-state/src/synchronizer/server_world_state_synchronizer.test.ts b/yarn-project/world-state/src/synchronizer/server_world_state_synchronizer.test.ts index f46aa23879d..1852f140e2a 100644 --- a/yarn-project/world-state/src/synchronizer/server_world_state_synchronizer.test.ts +++ b/yarn-project/world-state/src/synchronizer/server_world_state_synchronizer.test.ts @@ -1,4 +1,11 @@ -import { type L1ToL2MessageSource, L2Block, type L2BlockSource, MerkleTreeId, SiblingPath } from '@aztec/circuit-types'; +import { + type L1ToL2MessageSource, + L2Block, + type L2BlockSource, + MerkleTreeId, + SiblingPath, + WorldStateRunningState, +} from '@aztec/circuit-types'; import { Fr } from '@aztec/circuits.js'; import { L1_TO_L2_MSG_SUBTREE_HEIGHT } from '@aztec/circuits.js/constants'; import { randomInt } from '@aztec/foundation/crypto'; @@ -13,7 +20,6 @@ import { mock } from 'jest-mock-extended'; import { type MerkleTreeAdminDb, type MerkleTrees, type WorldStateConfig } from '../index.js'; import { ServerWorldStateSynchronizer } from './server_world_state_synchronizer.js'; -import { WorldStateRunningState } from './world_state_synchronizer.js'; const LATEST_BLOCK_NUMBER = 5; const getLatestBlockNumber = () => Promise.resolve(LATEST_BLOCK_NUMBER); diff --git a/yarn-project/world-state/src/synchronizer/server_world_state_synchronizer.ts b/yarn-project/world-state/src/synchronizer/server_world_state_synchronizer.ts index c0235d8fbf5..9cd2d861104 100644 --- a/yarn-project/world-state/src/synchronizer/server_world_state_synchronizer.ts +++ b/yarn-project/world-state/src/synchronizer/server_world_state_synchronizer.ts @@ -5,6 +5,9 @@ import { L2BlockDownloader, type L2BlockSource, type MerkleTreeAdminOperations, + WorldStateRunningState, + type WorldStateStatus, + type WorldStateSynchronizer, } from '@aztec/circuit-types'; import { type L2BlockHandledStats } from '@aztec/circuit-types/stats'; import { L1_TO_L2_MSG_SUBTREE_HEIGHT } from '@aztec/circuits.js/constants'; @@ -24,11 +27,6 @@ import { import { MerkleTreeSnapshotOperationsFacade } from '../world-state-db/merkle_tree_snapshot_operations_facade.js'; import { type MerkleTrees } from '../world-state-db/merkle_trees.js'; import { type WorldStateConfig } from './config.js'; -import { - WorldStateRunningState, - type WorldStateStatus, - type WorldStateSynchronizer, -} from './world_state_synchronizer.js'; /** * Synchronizes the world state with the L2 blocks from a L2BlockSource. @@ -305,18 +303,13 @@ export class ServerWorldStateSynchronizer implements WorldStateSynchronizer { * @throws If the L1 to L2 messages do not hash to the block inHash. */ async #verifyMessagesHashToInHash(l1ToL2Messages: Fr[], inHash: Buffer) { - const tree = new StandardTree( - openTmpStore(true), - new SHA256Trunc(), - 'temp_in_hash_check', - L1_TO_L2_MSG_SUBTREE_HEIGHT, - 0n, - Fr, - ); + const store = openTmpStore(true); + const tree = new StandardTree(store, new SHA256Trunc(), 'temp_in_hash_check', L1_TO_L2_MSG_SUBTREE_HEIGHT, 0n, Fr); await tree.appendLeaves(l1ToL2Messages); if (!tree.getRoot(true).equals(inHash)) { throw new Error('Obtained L1 to L2 messages failed to be hashed to the block inHash'); } + await store.delete(); } } diff --git a/yarn-project/world-state/src/world-state-db/merkle_trees.ts b/yarn-project/world-state/src/world-state-db/merkle_trees.ts index f94cbec7dde..15df42917e7 100644 --- a/yarn-project/world-state/src/world-state-db/merkle_trees.ts +++ b/yarn-project/world-state/src/world-state-db/merkle_trees.ts @@ -35,6 +35,7 @@ import { SerialQueue } from '@aztec/foundation/queue'; import { Timer, elapsed } from '@aztec/foundation/timer'; import { type IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; import { type AztecKVStore, type AztecSingleton } from '@aztec/kv-store'; +import { openTmpStore } from '@aztec/kv-store/utils'; import { type AppendOnlyTree, type IndexedTree, @@ -47,6 +48,7 @@ import { newTree, } from '@aztec/merkle-tree'; import { type TelemetryClient } from '@aztec/telemetry-client'; +import { NoopTelemetryClient } from '@aztec/telemetry-client/noop'; import { type Hasher } from '@aztec/types/interfaces'; import { @@ -119,6 +121,14 @@ export class MerkleTrees implements MerkleTreeDb { return merkleTrees; } + /** + * Creates a temporary store. Useful for testing. + */ + public static tmp() { + const store = openTmpStore(); + return MerkleTrees.new(store, new NoopTelemetryClient()); + } + /** * Initializes the collection of Merkle Trees. */ diff --git a/yarn-project/yarn.lock b/yarn-project/yarn.lock index beac450610c..677a033c70b 100644 --- a/yarn-project/yarn.lock +++ b/yarn-project/yarn.lock @@ -292,6 +292,7 @@ __metadata: "@aztec/noir-protocol-circuits-types": "workspace:^" "@aztec/simulator": "workspace:^" "@aztec/telemetry-client": "workspace:^" + "@aztec/types": "workspace:^" "@jest/globals": ^29.5.0 "@msgpack/msgpack": ^3.0.0-beta2 "@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi" @@ -677,6 +678,7 @@ __metadata: supertest: ^6.3.3 ts-node: ^10.9.1 typescript: ^5.0.4 + viem: ^2.7.15 zod: ^3.22.4 languageName: unknown linkType: soft @@ -688,6 +690,7 @@ __metadata: "@aztec/bb-prover": "workspace:^" "@aztec/circuits.js": "workspace:^" "@aztec/foundation": "workspace:^" + "@aztec/simulator": "workspace:^" "@aztec/types": "workspace:^" "@jest/globals": ^29.5.0 "@msgpack/msgpack": ^3.0.0-beta2 @@ -699,6 +702,7 @@ __metadata: "@types/node": ^18.7.23 change-case: ^5.4.4 jest: ^29.5.0 + jest-mock-extended: ^4.0.0-beta1 levelup: ^5.1.1 memdown: ^6.1.1 ts-node: ^10.9.1 @@ -945,6 +949,7 @@ __metadata: "@types/node": ^18.7.23 "@types/source-map-support": ^0.5.10 commander: ^12.1.0 + get-port: ^7.1.0 jest: ^29.5.0 jest-mock-extended: ^3.0.3 lodash.chunk: ^4.2.0 @@ -3365,7 +3370,7 @@ __metadata: version: 0.0.0-use.local resolution: "@noir-lang/noir_codegen@portal:../noir/packages/noir_codegen::locator=%40aztec%2Faztec3-packages%40workspace%3A." dependencies: - "@noir-lang/types": 0.33.0 + "@noir-lang/types": 0.34.0 glob: ^10.3.10 ts-command-line-args: ^2.5.1 bin: @@ -3374,13 +3379,13 @@ __metadata: linkType: soft "@noir-lang/noir_js@file:../noir/packages/noir_js::locator=%40aztec%2Faztec3-packages%40workspace%3A.": - version: 0.33.0 - resolution: "@noir-lang/noir_js@file:../noir/packages/noir_js#../noir/packages/noir_js::hash=e4c9c2&locator=%40aztec%2Faztec3-packages%40workspace%3A." + version: 0.34.0 + resolution: "@noir-lang/noir_js@file:../noir/packages/noir_js#../noir/packages/noir_js::hash=999f32&locator=%40aztec%2Faztec3-packages%40workspace%3A." dependencies: - "@noir-lang/acvm_js": 0.49.0 - "@noir-lang/noirc_abi": 0.33.0 - "@noir-lang/types": 0.33.0 - checksum: 82d759db2487b4c2fd298ec989cb0f4547f5dfef4cc70bf37531e1d92e04bfecf425576497b8f63769a3249a584a1a31c2751615a2633a51b2dd815e296044b1 + "@noir-lang/acvm_js": 0.50.0 + "@noir-lang/noirc_abi": 0.34.0 + "@noir-lang/types": 0.34.0 + checksum: 72009b3553a8c2652270b86b02bf5215456adb3c66ebb08a3b66185d20b708e86cf3300c3f57641d2e9e9f10d340bbf5e2f9fb1f89507900ccdd9b0e42c4349a languageName: node linkType: hard @@ -3388,7 +3393,7 @@ __metadata: version: 0.0.0-use.local resolution: "@noir-lang/noirc_abi@portal:../noir/packages/noirc_abi::locator=%40aztec%2Faztec3-packages%40workspace%3A." dependencies: - "@noir-lang/types": 0.33.0 + "@noir-lang/types": 0.34.0 languageName: node linkType: soft @@ -10831,6 +10836,19 @@ __metadata: languageName: node linkType: hard +"jest-mock-extended@npm:^4.0.0-beta1": + version: 4.0.0-beta1 + resolution: "jest-mock-extended@npm:4.0.0-beta1" + dependencies: + ts-essentials: ^10.0.2 + peerDependencies: + "@jest/globals": ^28.0.0 || ^29.0.0 + jest: ^24.0.0 || ^25.0.0 || ^26.0.0 || ^27.0.0 || ^28.0.0 || ^29.0.0 + typescript: ^3.0.0 || ^4.0.0 || ^5.0.0 + checksum: de84487f07a4a812fcfdcfde5234dedb35676103a8542bd30b4dd8b7ee4fdaa4f5d5c60b6c076539d10a8d303af36cbee24a9a16a20aa4f43413a69427a4e99b + languageName: node + linkType: hard + "jest-mock@npm:^29.7.0": version: 29.7.0 resolution: "jest-mock@npm:29.7.0" @@ -15354,6 +15372,18 @@ __metadata: languageName: node linkType: hard +"ts-essentials@npm:^10.0.2": + version: 10.0.2 + resolution: "ts-essentials@npm:10.0.2" + peerDependencies: + typescript: ">=4.5.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: f2d612b543b405f27cb890f15667454ad48d7bd3e699d62adf0fedd8c3797dc4ecd93d33ba5983a02f97912cb6383f2ca349d02747bd57fd4384fc1f264f1826 + languageName: node + linkType: hard + "ts-graphviz@npm:^1.5.0": version: 1.8.2 resolution: "ts-graphviz@npm:1.8.2"